From a4d2b732aaefa55b8b658ab8748781207f09c2e2 Mon Sep 17 00:00:00 2001 From: NurgazievichR Date: Mon, 7 Apr 2025 17:58:33 +0600 Subject: [PATCH] base works on browser and laptop --- Game.cpp | 34 +- GameObjectManager.cpp | 36 +- OpenGlExtensions.cpp | 2 +- Readme.md | 11 + build-emcmake/CMakeCache.txt | 372 + .../CMakeFiles/3.28.3/CMakeCXXCompiler.cmake | 85 + .../3.28.3/CMakeDetermineCompilerABI_CXX.bin | 1521 +++ .../CMakeFiles/3.28.3/CMakeSystem.cmake | 15 + .../CompilerIdCXX/CMakeCXXCompilerId.cpp | 869 ++ .../CMakeFiles/3.28.3/CompilerIdCXX/a.out.js | 1521 +++ .../3.28.3/CompilerIdCXX/a.out.wasm | Bin 0 -> 1791 bytes .../CMakeFiles/CMakeConfigureLog.yaml | 254 + build-emcmake/CMakeFiles/cmake.check_cache | 1 + jumpingbird.data | Bin 1639315 -> 2425853 bytes jumpingbird.html | 2 +- jumpingbird.js | 2 +- jumpingbird.wasm | Bin 733634 -> 914989 bytes main.cpp | 30 +- thirdparty/libzip-1.11.3/CMakeLists.txt | 1 + .../build-emcmake/CMakeCache.txt | 887 ++ .../CMakeFiles/3.28.3/CMakeCCompiler.cmake | 74 + .../3.28.3/CMakeDetermineCompilerABI_C.bin | 1521 +++ .../CMakeFiles/3.28.3/CMakeSystem.cmake | 15 + .../3.28.3/CompilerIdC/CMakeCCompilerId.c | 880 ++ .../CMakeFiles/3.28.3/CompilerIdC/a.out.js | 1521 +++ .../CMakeFiles/3.28.3/CompilerIdC/a.out.wasm | Bin 0 -> 1791 bytes .../CMakeFiles/CMakeConfigureLog.yaml | 2887 +++++ .../CMakeDirectoryInformation.cmake | 16 + .../CMakeFiles/CMakeRuleHashes.txt | 324 + .../CheckTypeSize/INT16_T_LIBZIP.bin | Bin 0 -> 1166 bytes .../CMakeFiles/CheckTypeSize/INT16_T_LIBZIP.c | 46 + .../CheckTypeSize/INT32_T_LIBZIP.bin | Bin 0 -> 1166 bytes .../CMakeFiles/CheckTypeSize/INT32_T_LIBZIP.c | 46 + .../CheckTypeSize/INT64_T_LIBZIP.bin | Bin 0 -> 1166 bytes .../CMakeFiles/CheckTypeSize/INT64_T_LIBZIP.c | 46 + .../CheckTypeSize/INT8_T_LIBZIP.bin | Bin 0 -> 1166 bytes .../CMakeFiles/CheckTypeSize/INT8_T_LIBZIP.c | 46 + .../CMakeFiles/CheckTypeSize/INT_LIBZIP.bin | Bin 0 -> 1166 bytes .../CMakeFiles/CheckTypeSize/INT_LIBZIP.c | 46 + .../CMakeFiles/CheckTypeSize/LONG_LIBZIP.bin | Bin 0 -> 1166 bytes .../CMakeFiles/CheckTypeSize/LONG_LIBZIP.c | 46 + .../CheckTypeSize/LONG_LONG_LIBZIP.bin | Bin 0 -> 1166 bytes .../CheckTypeSize/LONG_LONG_LIBZIP.c | 46 + .../CMakeFiles/CheckTypeSize/SHORT_LIBZIP.bin | Bin 0 -> 1166 bytes .../CMakeFiles/CheckTypeSize/SHORT_LIBZIP.c | 46 + .../CMakeFiles/CheckTypeSize/SIZEOF_OFF_T.bin | Bin 0 -> 1166 bytes .../CMakeFiles/CheckTypeSize/SIZEOF_OFF_T.c | 46 + .../CheckTypeSize/SIZEOF_SIZE_T.bin | Bin 0 -> 1166 bytes .../CMakeFiles/CheckTypeSize/SIZEOF_SIZE_T.c | 46 + .../CheckTypeSize/UINT16_T_LIBZIP.bin | Bin 0 -> 1166 bytes .../CheckTypeSize/UINT16_T_LIBZIP.c | 46 + .../CheckTypeSize/UINT32_T_LIBZIP.bin | Bin 0 -> 1166 bytes .../CheckTypeSize/UINT32_T_LIBZIP.c | 46 + .../CheckTypeSize/UINT64_T_LIBZIP.bin | Bin 0 -> 1166 bytes .../CheckTypeSize/UINT64_T_LIBZIP.c | 46 + .../CheckTypeSize/UINT8_T_LIBZIP.bin | Bin 0 -> 1166 bytes .../CMakeFiles/CheckTypeSize/UINT8_T_LIBZIP.c | 46 + .../CMakeFiles/CheckTypeSize/__INT16_LIBZIP.c | 46 + .../CMakeFiles/CheckTypeSize/__INT32_LIBZIP.c | 46 + .../CMakeFiles/CheckTypeSize/__INT64_LIBZIP.c | 46 + .../CMakeFiles/CheckTypeSize/__INT8_LIBZIP.c | 46 + .../libzip-targets-noconfig.cmake | 46 + .../libzip-targets.cmake | 116 + .../build-emcmake/CMakeFiles/Makefile.cmake | 209 + .../build-emcmake/CMakeFiles/Makefile2 | 661 ++ .../CMakeFiles/TargetDirectories.txt | 60 + .../CMakeFiles/cmake.check_cache | 1 + .../CMakeFiles/dist.dir/DependInfo.cmake | 22 + .../CMakeFiles/dist.dir/build.make | 89 + .../CMakeFiles/dist.dir/cmake_clean.cmake | 8 + .../CMakeFiles/dist.dir/compiler_depend.make | 2 + .../CMakeFiles/dist.dir/compiler_depend.ts | 2 + .../CMakeFiles/dist.dir/progress.make | 1 + .../CMakeFiles/distcheck.dir/DependInfo.cmake | 22 + .../CMakeFiles/distcheck.dir/build.make | 100 + .../distcheck.dir/cmake_clean.cmake | 8 + .../distcheck.dir/compiler_depend.make | 2 + .../distcheck.dir/compiler_depend.ts | 2 + .../CMakeFiles/distcheck.dir/progress.make | 1 + .../build-emcmake/CMakeFiles/progress.marks | 1 + .../build-emcmake/CTestTestfile.cmake | 11 + .../libzip-1.11.3/build-emcmake/Makefile | 452 + .../build-emcmake/cmake_install.cmake | 105 + .../build-emcmake/compile_commands.json | 770 ++ .../libzip-1.11.3/build-emcmake/config.h | 75 + .../CMakeDirectoryInformation.cmake | 16 + .../add-compressed-data.dir/DependInfo.cmake | 23 + .../add-compressed-data.c.o | Bin 0 -> 4318 bytes .../add-compressed-data.c.o.d | 33 + .../add-compressed-data.dir/build.make | 115 + .../add-compressed-data.dir/cmake_clean.cmake | 11 + .../compiler_depend.make | 2 + .../compiler_depend.ts | 2 + .../add-compressed-data.dir/depend.make | 2 + .../add-compressed-data.dir/flags.make | 10 + .../add-compressed-data.dir/link.txt | 1 + .../add-compressed-data.dir/progress.make | 3 + .../autoclose-archive.dir/DependInfo.cmake | 23 + .../autoclose-archive.c.o | Bin 0 -> 4566 bytes .../autoclose-archive.c.o.d | 33 + .../autoclose-archive.dir/build.make | 115 + .../autoclose-archive.dir/cmake_clean.cmake | 11 + .../compiler_depend.make | 2 + .../autoclose-archive.dir/compiler_depend.ts | 2 + .../autoclose-archive.dir/depend.make | 2 + .../autoclose-archive.dir/flags.make | 10 + .../CMakeFiles/autoclose-archive.dir/link.txt | 1 + .../autoclose-archive.dir/progress.make | 3 + .../CMakeFiles/in-memory.dir/DependInfo.cmake | 23 + .../CMakeFiles/in-memory.dir/build.make | 115 + .../in-memory.dir/cmake_clean.cmake | 11 + .../in-memory.dir/compiler_depend.make | 2 + .../in-memory.dir/compiler_depend.ts | 2 + .../CMakeFiles/in-memory.dir/depend.make | 2 + .../CMakeFiles/in-memory.dir/flags.make | 10 + .../CMakeFiles/in-memory.dir/in-memory.c.o | Bin 0 -> 6533 bytes .../CMakeFiles/in-memory.dir/in-memory.c.o.d | 38 + .../CMakeFiles/in-memory.dir/link.txt | 1 + .../CMakeFiles/in-memory.dir/progress.make | 3 + .../examples/CMakeFiles/progress.marks | 1 + .../examples/CTestTestfile.cmake | 6 + .../build-emcmake/examples/Makefile | 326 + .../examples/add-compressed-data.js | 4814 +++++++++ .../examples/add-compressed-data.wasm | Bin 0 -> 398069 bytes .../examples/autoclose-archive.js | 4814 +++++++++ .../examples/autoclose-archive.wasm | Bin 0 -> 398520 bytes .../examples/cmake_install.cmake | 39 + .../build-emcmake/examples/in-memory.js | 4737 +++++++++ .../build-emcmake/examples/in-memory.wasm | Bin 0 -> 371069 bytes .../build-emcmake/install/include/zip.h | 528 + .../build-emcmake/install/include/zipconf.h | 48 + .../cmake/libzip/libzip-config-version.cmake | 43 + .../lib/cmake/libzip/libzip-config.cmake | 69 + .../libzip/libzip-targets-noconfig.cmake | 46 + .../lib/cmake/libzip/libzip-targets.cmake | 116 + .../cmake/libzip/modules/FindMbedTLS.cmake | 141 + .../lib/cmake/libzip/modules/FindNettle.cmake | 141 + .../lib/cmake/libzip/modules/Findzstd.cmake | 186 + .../build-emcmake/install/lib/libzip.a | Bin 0 -> 353784 bytes .../install/lib/pkgconfig/libzip.pc | 14 + .../install/share/man/man1/zipcmp.1 | 99 + .../install/share/man/man1/zipmerge.1 | 105 + .../install/share/man/man1/ziptool.1 | 364 + .../share/man/man3/ZIP_SOURCE_GET_ARGS.3 | 79 + .../install/share/man/man3/libzip.3 | 299 + .../install/share/man/man3/zip_add.3 | 96 + .../install/share/man/man3/zip_add_dir.3 | 69 + .../install/share/man/man3/zip_close.3 | 136 + .../man3/zip_compression_method_supported.3 | 65 + .../install/share/man/man3/zip_delete.3 | 80 + .../install/share/man/man3/zip_dir_add.3 | 109 + .../install/share/man/man3/zip_discard.3 | 61 + .../man3/zip_encryption_method_supported.3 | 65 + .../install/share/man/man3/zip_error_clear.3 | 69 + .../share/man/man3/zip_error_code_system.3 | 63 + .../share/man/man3/zip_error_code_zip.3 | 60 + .../install/share/man/man3/zip_error_fini.3 | 60 + .../install/share/man/man3/zip_error_get.3 | 117 + .../share/man/man3/zip_error_get_sys_type.3 | 77 + .../install/share/man/man3/zip_error_init.3 | 76 + .../share/man/man3/zip_error_init_with_code.3 | 76 + .../install/share/man/man3/zip_error_set.3 | 70 + .../man/man3/zip_error_set_from_source.3 | 69 + .../share/man/man3/zip_error_strerror.3 | 67 + .../share/man/man3/zip_error_system_type.3 | 77 + .../share/man/man3/zip_error_to_data.3 | 69 + .../install/share/man/man3/zip_error_to_str.3 | 88 + .../install/share/man/man3/zip_errors.3 | 125 + .../install/share/man/man3/zip_fclose.3 | 65 + .../install/share/man/man3/zip_fdopen.3 | 149 + .../install/share/man/man3/zip_file_add.3 | 175 + .../share/man/man3/zip_file_attributes_init.3 | 61 + .../share/man/man3/zip_file_error_clear.3 | 69 + .../share/man/man3/zip_file_error_get.3 | 117 + .../man/man3/zip_file_extra_field_delete.3 | 130 + .../man3/zip_file_extra_field_delete_by_id.3 | 130 + .../share/man/man3/zip_file_extra_field_get.3 | 157 + .../man/man3/zip_file_extra_field_get_by_id.3 | 157 + .../share/man/man3/zip_file_extra_field_set.3 | 115 + .../man/man3/zip_file_extra_fields_count.3 | 113 + .../man3/zip_file_extra_fields_count_by_id.3 | 113 + .../share/man/man3/zip_file_get_comment.3 | 119 + .../share/man/man3/zip_file_get_error.3 | 57 + .../man3/zip_file_get_external_attributes.3 | 165 + .../share/man/man3/zip_file_is_seekable.3 | 89 + .../install/share/man/man3/zip_file_rename.3 | 104 + .../install/share/man/man3/zip_file_replace.3 | 175 + .../share/man/man3/zip_file_set_comment.3 | 116 + .../share/man/man3/zip_file_set_dostime.3 | 126 + .../share/man/man3/zip_file_set_encryption.3 | 121 + .../man3/zip_file_set_external_attributes.3 | 89 + .../share/man/man3/zip_file_set_mtime.3 | 126 + .../share/man/man3/zip_file_strerror.3 | 85 + .../install/share/man/man3/zip_fopen.3 | 148 + .../share/man/man3/zip_fopen_encrypted.3 | 135 + .../install/share/man/man3/zip_fopen_index.3 | 148 + .../man/man3/zip_fopen_index_encrypted.3 | 135 + .../install/share/man/man3/zip_fread.3 | 85 + .../install/share/man/man3/zip_fseek.3 | 89 + .../install/share/man/man3/zip_ftell.3 | 67 + .../share/man/man3/zip_get_archive_comment.3 | 112 + .../share/man/man3/zip_get_archive_flag.3 | 110 + .../install/share/man/man3/zip_get_error.3 | 60 + .../share/man/man3/zip_get_file_comment.3 | 73 + .../install/share/man/man3/zip_get_name.3 | 132 + .../share/man/man3/zip_get_num_entries.3 | 88 + .../share/man/man3/zip_get_num_files.3 | 75 + .../share/man/man3/zip_libzip_version.3 | 66 + .../install/share/man/man3/zip_name_locate.3 | 148 + .../install/share/man/man3/zip_open.3 | 192 + .../share/man/man3/zip_open_from_source.3 | 192 + .../zip_register_cancel_callback_with_state.3 | 84 + .../man/man3/zip_register_progress_callback.3 | 77 + ...ip_register_progress_callback_with_state.3 | 87 + .../install/share/man/man3/zip_rename.3 | 70 + .../install/share/man/man3/zip_replace.3 | 96 + .../share/man/man3/zip_set_archive_comment.3 | 93 + .../share/man/man3/zip_set_archive_flag.3 | 90 + .../share/man/man3/zip_set_default_password.3 | 90 + .../share/man/man3/zip_set_file_comment.3 | 79 + .../share/man/man3/zip_set_file_compression.3 | 146 + .../install/share/man/man3/zip_source.3 | 90 + .../share/man/man3/zip_source_begin_write.3 | 89 + .../man/man3/zip_source_begin_write_cloning.3 | 89 + .../share/man/man3/zip_source_buffer.3 | 102 + .../share/man/man3/zip_source_buffer_create.3 | 102 + .../man/man3/zip_source_buffer_fragment.3 | 112 + .../man3/zip_source_buffer_fragment_create.3 | 112 + .../install/share/man/man3/zip_source_close.3 | 67 + .../share/man/man3/zip_source_commit_write.3 | 70 + .../install/share/man/man3/zip_source_error.3 | 60 + .../install/share/man/man3/zip_source_file.3 | 147 + .../share/man/man3/zip_source_file_create.3 | 147 + .../install/share/man/man3/zip_source_filep.3 | 112 + .../share/man/man3/zip_source_filep_create.3 | 112 + .../install/share/man/man3/zip_source_free.3 | 76 + .../share/man/man3/zip_source_function.3 | 415 + .../man/man3/zip_source_function_create.3 | 415 + .../share/man/man3/zip_source_is_deleted.3 | 62 + .../share/man/man3/zip_source_is_seekable.3 | 65 + .../install/share/man/man3/zip_source_keep.3 | 60 + .../share/man/man3/zip_source_layered.3 | 166 + .../man/man3/zip_source_layered_create.3 | 166 + .../man/man3/zip_source_make_command_bitmap.3 | 62 + .../install/share/man/man3/zip_source_open.3 | 70 + .../install/share/man/man3/zip_source_read.3 | 80 + .../man/man3/zip_source_rollback_write.3 | 68 + .../install/share/man/man3/zip_source_seek.3 | 82 + .../man/man3/zip_source_seek_compute_offset.3 | 81 + .../share/man/man3/zip_source_seek_write.3 | 84 + .../install/share/man/man3/zip_source_stat.3 | 125 + .../install/share/man/man3/zip_source_tell.3 | 74 + .../share/man/man3/zip_source_tell_write.3 | 77 + .../share/man/man3/zip_source_win32a.3 | 121 + .../share/man/man3/zip_source_win32a_create.3 | 121 + .../share/man/man3/zip_source_win32handle.3 | 110 + .../man/man3/zip_source_win32handle_create.3 | 110 + .../share/man/man3/zip_source_win32w.3 | 119 + .../share/man/man3/zip_source_win32w_create.3 | 119 + .../share/man/man3/zip_source_window_create.3 | 98 + .../install/share/man/man3/zip_source_write.3 | 80 + .../install/share/man/man3/zip_source_zip.3 | 144 + .../share/man/man3/zip_source_zip_create.3 | 144 + .../share/man/man3/zip_source_zip_file.3 | 144 + .../man/man3/zip_source_zip_file_create.3 | 144 + .../install/share/man/man3/zip_stat.3 | 179 + .../install/share/man/man3/zip_stat_index.3 | 179 + .../install/share/man/man3/zip_stat_init.3 | 76 + .../install/share/man/man3/zip_strerror.3 | 85 + .../install/share/man/man3/zip_unchange.3 | 81 + .../install/share/man/man3/zip_unchange_all.3 | 64 + .../share/man/man3/zip_unchange_archive.3 | 64 + .../build-emcmake/install_manifest.txt | 146 + .../CMakeDirectoryInformation.cmake | 16 + .../lib/CMakeFiles/progress.marks | 1 + .../lib/CMakeFiles/zip.dir/DependInfo.cmake | 135 + .../lib/CMakeFiles/zip.dir/build.make | 2022 ++++ .../lib/CMakeFiles/zip.dir/cmake_clean.cmake | 236 + .../zip.dir/cmake_clean_target.cmake | 3 + .../CMakeFiles/zip.dir/compiler_depend.make | 2 + .../lib/CMakeFiles/zip.dir/compiler_depend.ts | 2 + .../lib/CMakeFiles/zip.dir/depend.make | 2 + .../lib/CMakeFiles/zip.dir/flags.make | 10 + .../lib/CMakeFiles/zip.dir/link.txt | 2 + .../lib/CMakeFiles/zip.dir/progress.make | 116 + .../lib/CMakeFiles/zip.dir/zip_add.c.o | Bin 0 -> 587 bytes .../lib/CMakeFiles/zip.dir/zip_add.c.o.d | 41 + .../lib/CMakeFiles/zip.dir/zip_add_dir.c.o | Bin 0 -> 572 bytes .../lib/CMakeFiles/zip.dir/zip_add_dir.c.o.d | 41 + .../lib/CMakeFiles/zip.dir/zip_add_entry.c.o | Bin 0 -> 1366 bytes .../CMakeFiles/zip.dir/zip_add_entry.c.o.d | 44 + .../zip.dir/zip_algorithm_deflate.c.o | Bin 0 -> 4579 bytes .../zip.dir/zip_algorithm_deflate.c.o.d | 60 + .../lib/CMakeFiles/zip.dir/zip_buffer.c.o | Bin 0 -> 7286 bytes .../lib/CMakeFiles/zip.dir/zip_buffer.c.o.d | 44 + .../lib/CMakeFiles/zip.dir/zip_close.c.o | Bin 0 -> 22626 bytes .../lib/CMakeFiles/zip.dir/zip_close.c.o.d | 44 + .../lib/CMakeFiles/zip.dir/zip_delete.c.o | Bin 0 -> 1166 bytes .../lib/CMakeFiles/zip.dir/zip_delete.c.o.d | 41 + .../lib/CMakeFiles/zip.dir/zip_dir_add.c.o | Bin 0 -> 1877 bytes .../lib/CMakeFiles/zip.dir/zip_dir_add.c.o.d | 44 + .../lib/CMakeFiles/zip.dir/zip_dirent.c.o | Bin 0 -> 35910 bytes .../lib/CMakeFiles/zip.dir/zip_dirent.c.o.d | 59 + .../lib/CMakeFiles/zip.dir/zip_discard.c.o | Bin 0 -> 1479 bytes .../lib/CMakeFiles/zip.dir/zip_discard.c.o.d | 44 + .../lib/CMakeFiles/zip.dir/zip_entry.c.o | Bin 0 -> 751 bytes .../lib/CMakeFiles/zip.dir/zip_entry.c.o.d | 41 + .../lib/CMakeFiles/zip.dir/zip_err_str.c.o | Bin 0 -> 5668 bytes .../lib/CMakeFiles/zip.dir/zip_err_str.c.o.d | 41 + .../lib/CMakeFiles/zip.dir/zip_error.c.o | Bin 0 -> 2673 bytes .../lib/CMakeFiles/zip.dir/zip_error.c.o.d | 44 + .../CMakeFiles/zip.dir/zip_error_clear.c.o | Bin 0 -> 595 bytes .../CMakeFiles/zip.dir/zip_error_clear.c.o.d | 41 + .../lib/CMakeFiles/zip.dir/zip_error_get.c.o | Bin 0 -> 729 bytes .../CMakeFiles/zip.dir/zip_error_get.c.o.d | 41 + .../zip.dir/zip_error_get_sys_type.c.o | Bin 0 -> 675 bytes .../zip.dir/zip_error_get_sys_type.c.o.d | 41 + .../CMakeFiles/zip.dir/zip_error_strerror.c.o | Bin 0 -> 3781 bytes .../zip.dir/zip_error_strerror.c.o.d | 59 + .../CMakeFiles/zip.dir/zip_error_to_str.c.o | Bin 0 -> 980 bytes .../CMakeFiles/zip.dir/zip_error_to_str.c.o.d | 40 + .../CMakeFiles/zip.dir/zip_extra_field.c.o | Bin 0 -> 9981 bytes .../CMakeFiles/zip.dir/zip_extra_field.c.o.d | 44 + .../zip.dir/zip_extra_field_api.c.o | Bin 0 -> 9231 bytes .../zip.dir/zip_extra_field_api.c.o.d | 41 + .../lib/CMakeFiles/zip.dir/zip_fclose.c.o | Bin 0 -> 733 bytes .../lib/CMakeFiles/zip.dir/zip_fclose.c.o.d | 44 + .../lib/CMakeFiles/zip.dir/zip_fdopen.c.o | Bin 0 -> 1647 bytes .../lib/CMakeFiles/zip.dir/zip_fdopen.c.o.d | 43 + .../lib/CMakeFiles/zip.dir/zip_file_add.c.o | Bin 0 -> 796 bytes .../lib/CMakeFiles/zip.dir/zip_file_add.c.o.d | 41 + .../zip.dir/zip_file_error_clear.c.o | Bin 0 -> 589 bytes .../zip.dir/zip_file_error_clear.c.o.d | 41 + .../CMakeFiles/zip.dir/zip_file_error_get.c.o | Bin 0 -> 577 bytes .../zip.dir/zip_file_error_get.c.o.d | 41 + .../zip.dir/zip_file_get_comment.c.o | Bin 0 -> 894 bytes .../zip.dir/zip_file_get_comment.c.o.d | 41 + .../zip_file_get_external_attributes.c.o | Bin 0 -> 870 bytes .../zip_file_get_external_attributes.c.o.d | 41 + .../zip.dir/zip_file_get_offset.c.o | Bin 0 -> 2479 bytes .../zip.dir/zip_file_get_offset.c.o.d | 40 + .../CMakeFiles/zip.dir/zip_file_rename.c.o | Bin 0 -> 1420 bytes .../CMakeFiles/zip.dir/zip_file_rename.c.o.d | 41 + .../CMakeFiles/zip.dir/zip_file_replace.c.o | Bin 0 -> 2899 bytes .../CMakeFiles/zip.dir/zip_file_replace.c.o.d | 41 + .../zip.dir/zip_file_set_comment.c.o | Bin 0 -> 2439 bytes .../zip.dir/zip_file_set_comment.c.o.d | 44 + .../zip.dir/zip_file_set_encryption.c.o | Bin 0 -> 3040 bytes .../zip.dir/zip_file_set_encryption.c.o.d | 44 + .../zip_file_set_external_attributes.c.o | Bin 0 -> 2107 bytes .../zip_file_set_external_attributes.c.o.d | 41 + .../CMakeFiles/zip.dir/zip_file_set_mtime.c.o | Bin 0 -> 2264 bytes .../zip.dir/zip_file_set_mtime.c.o.d | 41 + .../CMakeFiles/zip.dir/zip_file_strerror.c.o | Bin 0 -> 551 bytes .../zip.dir/zip_file_strerror.c.o.d | 41 + .../lib/CMakeFiles/zip.dir/zip_fopen.c.o | Bin 0 -> 756 bytes .../lib/CMakeFiles/zip.dir/zip_fopen.c.o.d | 41 + .../zip.dir/zip_fopen_encrypted.c.o | Bin 0 -> 767 bytes .../zip.dir/zip_fopen_encrypted.c.o.d | 41 + .../CMakeFiles/zip.dir/zip_fopen_index.c.o | Bin 0 -> 619 bytes .../CMakeFiles/zip.dir/zip_fopen_index.c.o.d | 41 + .../zip.dir/zip_fopen_index_encrypted.c.o | Bin 0 -> 1494 bytes .../zip.dir/zip_fopen_index_encrypted.c.o.d | 43 + .../lib/CMakeFiles/zip.dir/zip_fread.c.o | Bin 0 -> 1011 bytes .../lib/CMakeFiles/zip.dir/zip_fread.c.o.d | 41 + .../lib/CMakeFiles/zip.dir/zip_fseek.c.o | Bin 0 -> 1064 bytes .../lib/CMakeFiles/zip.dir/zip_fseek.c.o.d | 41 + .../lib/CMakeFiles/zip.dir/zip_ftell.c.o | Bin 0 -> 807 bytes .../lib/CMakeFiles/zip.dir/zip_ftell.c.o.d | 41 + .../zip.dir/zip_get_archive_comment.c.o | Bin 0 -> 875 bytes .../zip.dir/zip_get_archive_comment.c.o.d | 41 + .../zip.dir/zip_get_archive_flag.c.o | Bin 0 -> 606 bytes .../zip.dir/zip_get_archive_flag.c.o.d | 41 + .../zip_get_encryption_implementation.c.o | Bin 0 -> 973 bytes .../zip_get_encryption_implementation.c.o.d | 41 + .../zip.dir/zip_get_file_comment.c.o | Bin 0 -> 723 bytes .../zip.dir/zip_get_file_comment.c.o.d | 41 + .../lib/CMakeFiles/zip.dir/zip_get_name.c.o | Bin 0 -> 984 bytes .../lib/CMakeFiles/zip.dir/zip_get_name.c.o.d | 41 + .../zip.dir/zip_get_num_entries.c.o | Bin 0 -> 818 bytes .../zip.dir/zip_get_num_entries.c.o.d | 41 + .../CMakeFiles/zip.dir/zip_get_num_files.c.o | Bin 0 -> 731 bytes .../zip.dir/zip_get_num_files.c.o.d | 44 + .../lib/CMakeFiles/zip.dir/zip_hash.c.o | Bin 0 -> 8119 bytes .../lib/CMakeFiles/zip.dir/zip_hash.c.o.d | 44 + .../lib/CMakeFiles/zip.dir/zip_io_util.c.o | Bin 0 -> 3120 bytes .../lib/CMakeFiles/zip.dir/zip_io_util.c.o.d | 59 + .../CMakeFiles/zip.dir/zip_libzip_version.c.o | Bin 0 -> 489 bytes .../zip.dir/zip_libzip_version.c.o.d | 41 + .../lib/CMakeFiles/zip.dir/zip_memdup.c.o | Bin 0 -> 767 bytes .../lib/CMakeFiles/zip.dir/zip_memdup.c.o.d | 44 + .../CMakeFiles/zip.dir/zip_name_locate.c.o | Bin 0 -> 2309 bytes .../CMakeFiles/zip.dir/zip_name_locate.c.o.d | 41 + .../lib/CMakeFiles/zip.dir/zip_new.c.o | Bin 0 -> 1163 bytes .../lib/CMakeFiles/zip.dir/zip_new.c.o.d | 44 + .../lib/CMakeFiles/zip.dir/zip_open.c.o | Bin 0 -> 26926 bytes .../lib/CMakeFiles/zip.dir/zip_open.c.o.d | 46 + .../lib/CMakeFiles/zip.dir/zip_pkware.c.o | Bin 0 -> 2092 bytes .../lib/CMakeFiles/zip.dir/zip_pkware.c.o.d | 59 + .../lib/CMakeFiles/zip.dir/zip_progress.c.o | Bin 0 -> 5667 bytes .../lib/CMakeFiles/zip.dir/zip_progress.c.o.d | 44 + .../CMakeFiles/zip.dir/zip_random_unix.c.o | Bin 0 -> 1361 bytes .../CMakeFiles/zip.dir/zip_random_unix.c.o.d | 48 + .../lib/CMakeFiles/zip.dir/zip_rename.c.o | Bin 0 -> 593 bytes .../lib/CMakeFiles/zip.dir/zip_rename.c.o.d | 41 + .../lib/CMakeFiles/zip.dir/zip_replace.c.o | Bin 0 -> 595 bytes .../lib/CMakeFiles/zip.dir/zip_replace.c.o.d | 41 + .../zip.dir/zip_set_archive_comment.c.o | Bin 0 -> 1623 bytes .../zip.dir/zip_set_archive_comment.c.o.d | 44 + .../zip.dir/zip_set_archive_flag.c.o | Bin 0 -> 1120 bytes .../zip.dir/zip_set_archive_flag.c.o.d | 41 + .../zip.dir/zip_set_default_password.c.o | Bin 0 -> 901 bytes .../zip.dir/zip_set_default_password.c.o.d | 44 + .../zip.dir/zip_set_file_comment.c.o | Bin 0 -> 818 bytes .../zip.dir/zip_set_file_comment.c.o.d | 41 + .../zip.dir/zip_set_file_compression.c.o | Bin 0 -> 1727 bytes .../zip.dir/zip_set_file_compression.c.o.d | 41 + .../lib/CMakeFiles/zip.dir/zip_set_name.c.o | Bin 0 -> 3630 bytes .../lib/CMakeFiles/zip.dir/zip_set_name.c.o.d | 44 + .../zip.dir/zip_source_accept_empty.c.o | Bin 0 -> 873 bytes .../zip.dir/zip_source_accept_empty.c.o.d | 41 + .../zip.dir/zip_source_begin_write.c.o | Bin 0 -> 899 bytes .../zip.dir/zip_source_begin_write.c.o.d | 41 + .../zip_source_begin_write_cloning.c.o | Bin 0 -> 919 bytes .../zip_source_begin_write_cloning.c.o.d | 41 + .../CMakeFiles/zip.dir/zip_source_buffer.c.o | Bin 0 -> 16267 bytes .../zip.dir/zip_source_buffer.c.o.d | 44 + .../CMakeFiles/zip.dir/zip_source_call.c.o | Bin 0 -> 1311 bytes .../CMakeFiles/zip.dir/zip_source_call.c.o.d | 41 + .../CMakeFiles/zip.dir/zip_source_close.c.o | Bin 0 -> 924 bytes .../CMakeFiles/zip.dir/zip_source_close.c.o.d | 41 + .../zip.dir/zip_source_commit_write.c.o | Bin 0 -> 1150 bytes .../zip.dir/zip_source_commit_write.c.o.d | 41 + .../zip.dir/zip_source_compress.c.o | Bin 0 -> 8706 bytes .../zip.dir/zip_source_compress.c.o.d | 44 + .../lib/CMakeFiles/zip.dir/zip_source_crc.c.o | Bin 0 -> 4760 bytes .../CMakeFiles/zip.dir/zip_source_crc.c.o.d | 59 + .../CMakeFiles/zip.dir/zip_source_error.c.o | Bin 0 -> 633 bytes .../CMakeFiles/zip.dir/zip_source_error.c.o.d | 41 + .../zip.dir/zip_source_file_common.c.o | Bin 0 -> 10358 bytes .../zip.dir/zip_source_file_common.c.o.d | 44 + .../zip.dir/zip_source_file_stdio.c.o | Bin 0 -> 3298 bytes .../zip.dir/zip_source_file_stdio.c.o.d | 48 + .../zip.dir/zip_source_file_stdio_named.c.o | Bin 0 -> 6073 bytes .../zip.dir/zip_source_file_stdio_named.c.o.d | 50 + .../CMakeFiles/zip.dir/zip_source_free.c.o | Bin 0 -> 1199 bytes .../CMakeFiles/zip.dir/zip_source_free.c.o.d | 44 + .../zip.dir/zip_source_function.c.o | Bin 0 -> 1819 bytes .../zip.dir/zip_source_function.c.o.d | 44 + .../zip.dir/zip_source_get_dostime.c.o | Bin 0 -> 1200 bytes .../zip.dir/zip_source_get_dostime.c.o.d | 41 + .../zip_source_get_file_attributes.c.o | Bin 0 -> 2692 bytes .../zip_source_get_file_attributes.c.o.d | 41 + .../zip.dir/zip_source_is_deleted.c.o | Bin 0 -> 510 bytes .../zip.dir/zip_source_is_deleted.c.o.d | 41 + .../CMakeFiles/zip.dir/zip_source_layered.c.o | Bin 0 -> 1418 bytes .../zip.dir/zip_source_layered.c.o.d | 44 + .../CMakeFiles/zip.dir/zip_source_open.c.o | Bin 0 -> 1467 bytes .../CMakeFiles/zip.dir/zip_source_open.c.o.d | 41 + .../zip_source_pass_to_lower_layer.c.o | Bin 0 -> 1004 bytes .../zip_source_pass_to_lower_layer.c.o.d | 41 + .../zip.dir/zip_source_pkware_decode.c.o | Bin 0 -> 4296 bytes .../zip.dir/zip_source_pkware_decode.c.o.d | 44 + .../zip.dir/zip_source_pkware_encode.c.o | Bin 0 -> 5618 bytes .../zip.dir/zip_source_pkware_encode.c.o.d | 44 + .../CMakeFiles/zip.dir/zip_source_read.c.o | Bin 0 -> 1635 bytes .../CMakeFiles/zip.dir/zip_source_read.c.o.d | 41 + .../CMakeFiles/zip.dir/zip_source_remove.c.o | Bin 0 -> 1066 bytes .../zip.dir/zip_source_remove.c.o.d | 41 + .../zip.dir/zip_source_rollback_write.c.o | Bin 0 -> 740 bytes .../zip.dir/zip_source_rollback_write.c.o.d | 41 + .../CMakeFiles/zip.dir/zip_source_seek.c.o | Bin 0 -> 1651 bytes .../CMakeFiles/zip.dir/zip_source_seek.c.o.d | 41 + .../zip.dir/zip_source_seek_write.c.o | Bin 0 -> 1015 bytes .../zip.dir/zip_source_seek_write.c.o.d | 41 + .../CMakeFiles/zip.dir/zip_source_stat.c.o | Bin 0 -> 1169 bytes .../CMakeFiles/zip.dir/zip_source_stat.c.o.d | 41 + .../zip.dir/zip_source_supports.c.o | Bin 0 -> 1089 bytes .../zip.dir/zip_source_supports.c.o.d | 50 + .../CMakeFiles/zip.dir/zip_source_tell.c.o | Bin 0 -> 985 bytes .../CMakeFiles/zip.dir/zip_source_tell.c.o.d | 41 + .../zip.dir/zip_source_tell_write.c.o | Bin 0 -> 841 bytes .../zip.dir/zip_source_tell_write.c.o.d | 41 + .../CMakeFiles/zip.dir/zip_source_window.c.o | Bin 0 -> 9541 bytes .../zip.dir/zip_source_window.c.o.d | 44 + .../CMakeFiles/zip.dir/zip_source_write.c.o | Bin 0 -> 806 bytes .../CMakeFiles/zip.dir/zip_source_write.c.o.d | 41 + .../lib/CMakeFiles/zip.dir/zip_source_zip.c.o | Bin 0 -> 1216 bytes .../CMakeFiles/zip.dir/zip_source_zip.c.o.d | 44 + .../CMakeFiles/zip.dir/zip_source_zip_new.c.o | Bin 0 -> 8276 bytes .../zip.dir/zip_source_zip_new.c.o.d | 44 + .../lib/CMakeFiles/zip.dir/zip_stat.c.o | Bin 0 -> 745 bytes .../lib/CMakeFiles/zip.dir/zip_stat.c.o.d | 41 + .../lib/CMakeFiles/zip.dir/zip_stat_index.c.o | Bin 0 -> 3212 bytes .../CMakeFiles/zip.dir/zip_stat_index.c.o.d | 41 + .../lib/CMakeFiles/zip.dir/zip_stat_init.c.o | Bin 0 -> 1495 bytes .../CMakeFiles/zip.dir/zip_stat_init.c.o.d | 41 + .../lib/CMakeFiles/zip.dir/zip_strerror.c.o | Bin 0 -> 557 bytes .../lib/CMakeFiles/zip.dir/zip_strerror.c.o.d | 41 + .../lib/CMakeFiles/zip.dir/zip_string.c.o | Bin 0 -> 4056 bytes .../lib/CMakeFiles/zip.dir/zip_string.c.o.d | 59 + .../lib/CMakeFiles/zip.dir/zip_unchange.c.o | Bin 0 -> 2467 bytes .../lib/CMakeFiles/zip.dir/zip_unchange.c.o.d | 44 + .../CMakeFiles/zip.dir/zip_unchange_all.c.o | Bin 0 -> 912 bytes .../CMakeFiles/zip.dir/zip_unchange_all.c.o.d | 41 + .../zip.dir/zip_unchange_archive.c.o | Bin 0 -> 664 bytes .../zip.dir/zip_unchange_archive.c.o.d | 44 + .../CMakeFiles/zip.dir/zip_unchange_data.c.o | Bin 0 -> 899 bytes .../zip.dir/zip_unchange_data.c.o.d | 41 + .../lib/CMakeFiles/zip.dir/zip_utf-8.c.o | Bin 0 -> 4857 bytes .../lib/CMakeFiles/zip.dir/zip_utf-8.c.o.d | 44 + .../build-emcmake/lib/CTestTestfile.cmake | 6 + .../libzip-1.11.3/build-emcmake/lib/Makefile | 3266 ++++++ .../build-emcmake/lib/cmake_install.cmake | 47 + .../libzip-1.11.3/build-emcmake/lib/libzip.a | Bin 0 -> 353784 bytes .../build-emcmake/lib/zip_err_str.c | 86 + .../build-emcmake/libzip-config-version.cmake | 43 + .../build-emcmake/libzip-config.cmake | 69 + .../build-emcmake/libzip-targets.cmake | 69 + .../libzip-1.11.3/build-emcmake/libzip.pc | 14 + .../CMakeDirectoryInformation.cmake | 16 + .../man/CMakeFiles/man.dir/DependInfo.cmake | 22 + .../man/CMakeFiles/man.dir/build.make | 715 ++ .../man/CMakeFiles/man.dir/cmake_clean.cmake | 113 + .../CMakeFiles/man.dir/compiler_depend.make | 2 + .../man/CMakeFiles/man.dir/compiler_depend.ts | 2 + .../man/CMakeFiles/man.dir/progress.make | 106 + .../man/CMakeFiles/progress.marks | 1 + .../update-html.dir/DependInfo.cmake | 22 + .../man/CMakeFiles/update-html.dir/build.make | 820 ++ .../update-html.dir/cmake_clean.cmake | 113 + .../update-html.dir/compiler_depend.make | 2 + .../update-html.dir/compiler_depend.ts | 2 + .../CMakeFiles/update-html.dir/progress.make | 106 + .../update-man.dir/DependInfo.cmake | 22 + .../man/CMakeFiles/update-man.dir/build.make | 820 ++ .../update-man.dir/cmake_clean.cmake | 113 + .../update-man.dir/compiler_depend.make | 2 + .../update-man.dir/compiler_depend.ts | 2 + .../CMakeFiles/update-man.dir/progress.make | 106 + .../update_zip_errors.dir/DependInfo.cmake | 22 + .../update_zip_errors.dir/build.make | 88 + .../update_zip_errors.dir/cmake_clean.cmake | 8 + .../compiler_depend.make | 2 + .../update_zip_errors.dir/compiler_depend.ts | 2 + .../update_zip_errors.dir/progress.make | 1 + .../build-emcmake/man/CTestTestfile.cmake | 6 + .../libzip-1.11.3/build-emcmake/man/Makefile | 260 + .../build-emcmake/man/ZIP_SOURCE_GET_ARGS.3 | 79 + .../build-emcmake/man/cmake_install.cmake | 567 + .../libzip-1.11.3/build-emcmake/man/libzip.3 | 299 + .../libzip-1.11.3/build-emcmake/man/zip_add.3 | 96 + .../build-emcmake/man/zip_add_dir.3 | 69 + .../build-emcmake/man/zip_close.3 | 136 + .../man/zip_compression_method_supported.3 | 65 + .../build-emcmake/man/zip_delete.3 | 80 + .../build-emcmake/man/zip_dir_add.3 | 109 + .../build-emcmake/man/zip_discard.3 | 61 + .../man/zip_encryption_method_supported.3 | 65 + .../build-emcmake/man/zip_error_clear.3 | 69 + .../build-emcmake/man/zip_error_code_system.3 | 63 + .../build-emcmake/man/zip_error_code_zip.3 | 60 + .../build-emcmake/man/zip_error_fini.3 | 60 + .../build-emcmake/man/zip_error_get.3 | 117 + .../man/zip_error_get_sys_type.3 | 77 + .../build-emcmake/man/zip_error_init.3 | 76 + .../build-emcmake/man/zip_error_set.3 | 70 + .../man/zip_error_set_from_source.3 | 69 + .../build-emcmake/man/zip_error_strerror.3 | 67 + .../build-emcmake/man/zip_error_system_type.3 | 77 + .../build-emcmake/man/zip_error_to_data.3 | 69 + .../build-emcmake/man/zip_error_to_str.3 | 88 + .../build-emcmake/man/zip_errors.3 | 125 + .../build-emcmake/man/zip_fclose.3 | 65 + .../build-emcmake/man/zip_fdopen.3 | 149 + .../build-emcmake/man/zip_file_add.3 | 175 + .../man/zip_file_attributes_init.3 | 61 + .../man/zip_file_extra_field_delete.3 | 130 + .../man/zip_file_extra_field_get.3 | 157 + .../man/zip_file_extra_field_set.3 | 115 + .../man/zip_file_extra_fields_count.3 | 113 + .../build-emcmake/man/zip_file_get_comment.3 | 119 + .../build-emcmake/man/zip_file_get_error.3 | 57 + .../man/zip_file_get_external_attributes.3 | 165 + .../build-emcmake/man/zip_file_rename.3 | 104 + .../build-emcmake/man/zip_file_set_comment.3 | 116 + .../man/zip_file_set_encryption.3 | 121 + .../man/zip_file_set_external_attributes.3 | 89 + .../build-emcmake/man/zip_file_set_mtime.3 | 126 + .../build-emcmake/man/zip_file_strerror.3 | 85 + .../build-emcmake/man/zip_fopen.3 | 148 + .../build-emcmake/man/zip_fopen_encrypted.3 | 135 + .../build-emcmake/man/zip_fread.3 | 85 + .../build-emcmake/man/zip_fseek.3 | 89 + .../build-emcmake/man/zip_ftell.3 | 67 + .../man/zip_get_archive_comment.3 | 112 + .../build-emcmake/man/zip_get_archive_flag.3 | 110 + .../build-emcmake/man/zip_get_error.3 | 60 + .../build-emcmake/man/zip_get_file_comment.3 | 73 + .../build-emcmake/man/zip_get_name.3 | 132 + .../build-emcmake/man/zip_get_num_entries.3 | 88 + .../build-emcmake/man/zip_get_num_files.3 | 75 + .../build-emcmake/man/zip_libzip_version.3 | 66 + .../build-emcmake/man/zip_name_locate.3 | 148 + .../build-emcmake/man/zip_open.3 | 192 + .../zip_register_cancel_callback_with_state.3 | 84 + .../man/zip_register_progress_callback.3 | 77 + ...ip_register_progress_callback_with_state.3 | 87 + .../build-emcmake/man/zip_rename.3 | 70 + .../man/zip_set_archive_comment.3 | 93 + .../build-emcmake/man/zip_set_archive_flag.3 | 90 + .../man/zip_set_default_password.3 | 90 + .../build-emcmake/man/zip_set_file_comment.3 | 79 + .../man/zip_set_file_compression.3 | 146 + .../build-emcmake/man/zip_source.3 | 90 + .../man/zip_source_begin_write.3 | 89 + .../build-emcmake/man/zip_source_buffer.3 | 102 + .../man/zip_source_buffer_fragment.3 | 112 + .../build-emcmake/man/zip_source_close.3 | 67 + .../man/zip_source_commit_write.3 | 70 + .../build-emcmake/man/zip_source_error.3 | 60 + .../build-emcmake/man/zip_source_file.3 | 147 + .../build-emcmake/man/zip_source_filep.3 | 112 + .../build-emcmake/man/zip_source_free.3 | 76 + .../build-emcmake/man/zip_source_function.3 | 415 + .../build-emcmake/man/zip_source_is_deleted.3 | 62 + .../man/zip_source_is_seekable.3 | 65 + .../build-emcmake/man/zip_source_keep.3 | 60 + .../build-emcmake/man/zip_source_layered.3 | 166 + .../man/zip_source_make_command_bitmap.3 | 62 + .../build-emcmake/man/zip_source_open.3 | 70 + .../build-emcmake/man/zip_source_read.3 | 80 + .../man/zip_source_rollback_write.3 | 68 + .../build-emcmake/man/zip_source_seek.3 | 82 + .../man/zip_source_seek_compute_offset.3 | 81 + .../build-emcmake/man/zip_source_seek_write.3 | 84 + .../build-emcmake/man/zip_source_stat.3 | 125 + .../build-emcmake/man/zip_source_tell.3 | 74 + .../build-emcmake/man/zip_source_tell_write.3 | 77 + .../build-emcmake/man/zip_source_win32a.3 | 121 + .../man/zip_source_win32handle.3 | 110 + .../build-emcmake/man/zip_source_win32w.3 | 119 + .../man/zip_source_window_create.3 | 98 + .../build-emcmake/man/zip_source_write.3 | 80 + .../build-emcmake/man/zip_source_zip.3 | 144 + .../build-emcmake/man/zip_source_zip_file.3 | 144 + .../build-emcmake/man/zip_stat.3 | 179 + .../build-emcmake/man/zip_stat_init.3 | 76 + .../build-emcmake/man/zip_unchange.3 | 81 + .../build-emcmake/man/zip_unchange_all.3 | 64 + .../build-emcmake/man/zip_unchange_archive.3 | 64 + .../libzip-1.11.3/build-emcmake/man/zipcmp.1 | 99 + .../build-emcmake/man/zipmerge.1 | 105 + .../libzip-1.11.3/build-emcmake/man/ziptool.1 | 364 + .../CMakeDirectoryInformation.cmake | 16 + .../list-fuzzers.dir/DependInfo.cmake | 22 + .../CMakeFiles/list-fuzzers.dir/build.make | 87 + .../list-fuzzers.dir/cmake_clean.cmake | 8 + .../list-fuzzers.dir/compiler_depend.make | 2 + .../list-fuzzers.dir/compiler_depend.ts | 2 + .../CMakeFiles/list-fuzzers.dir/progress.make | 1 + .../ossfuzz/CMakeFiles/progress.marks | 1 + .../zip_read_file_fuzzer.dir/DependInfo.cmake | 24 + .../zip_read_file_fuzzer.dir/build.make | 132 + .../cmake_clean.cmake | 13 + .../compiler_depend.make | 2 + .../compiler_depend.ts | 2 + .../zip_read_file_fuzzer.dir/depend.make | 2 + .../zip_read_file_fuzzer.dir/flags.make | 10 + .../zip_read_file_fuzzer.dir/fuzz_main.c.o | Bin 0 -> 1925 bytes .../zip_read_file_fuzzer.dir/fuzz_main.c.o.d | 21 + .../zip_read_file_fuzzer.dir/link.txt | 1 + .../zip_read_file_fuzzer.dir/progress.make | 4 + .../zip_read_file_fuzzer.c.o | Bin 0 -> 3745 bytes .../zip_read_file_fuzzer.c.o.d | 36 + .../zip_read_fuzzer.dir/DependInfo.cmake | 24 + .../CMakeFiles/zip_read_fuzzer.dir/build.make | 132 + .../zip_read_fuzzer.dir/cmake_clean.cmake | 13 + .../zip_read_fuzzer.dir/compiler_depend.make | 2 + .../zip_read_fuzzer.dir/compiler_depend.ts | 2 + .../zip_read_fuzzer.dir/depend.make | 2 + .../CMakeFiles/zip_read_fuzzer.dir/flags.make | 10 + .../zip_read_fuzzer.dir/fuzz_main.c.o | Bin 0 -> 1925 bytes .../zip_read_fuzzer.dir/fuzz_main.c.o.d | 21 + .../CMakeFiles/zip_read_fuzzer.dir/link.txt | 1 + .../zip_read_fuzzer.dir/progress.make | 4 + .../zip_read_fuzzer.dir/zip_read_fuzzer.c.o | Bin 0 -> 2938 bytes .../zip_read_fuzzer.dir/zip_read_fuzzer.c.o.d | 28 + .../DependInfo.cmake | 24 + .../build.make | 132 + .../cmake_clean.cmake | 13 + .../compiler_depend.make | 2 + .../compiler_depend.ts | 2 + .../depend.make | 2 + .../flags.make | 10 + .../fuzz_main.c.o | Bin 0 -> 1925 bytes .../fuzz_main.c.o.d | 21 + .../link.txt | 1 + .../progress.make | 4 + .../zip_write_encrypt_aes256_file_fuzzer.c.o | Bin 0 -> 2312 bytes ...zip_write_encrypt_aes256_file_fuzzer.c.o.d | 33 + .../DependInfo.cmake | 24 + .../build.make | 132 + .../cmake_clean.cmake | 13 + .../compiler_depend.make | 2 + .../compiler_depend.ts | 2 + .../depend.make | 2 + .../flags.make | 10 + .../fuzz_main.c.o | Bin 0 -> 1925 bytes .../fuzz_main.c.o.d | 21 + .../link.txt | 1 + .../progress.make | 4 + .../zip_write_encrypt_pkware_file_fuzzer.c.o | Bin 0 -> 2267 bytes ...zip_write_encrypt_pkware_file_fuzzer.c.o.d | 33 + .../build-emcmake/ossfuzz/CTestTestfile.cmake | 6 + .../build-emcmake/ossfuzz/Makefile | 419 + .../build-emcmake/ossfuzz/cmake_install.cmake | 39 + .../ossfuzz/zip_read_file_fuzzer.js | 4809 +++++++++ .../ossfuzz/zip_read_file_fuzzer.wasm | Bin 0 -> 389285 bytes .../build-emcmake/ossfuzz/zip_read_fuzzer.js | 4646 ++++++++ .../ossfuzz/zip_read_fuzzer.wasm | Bin 0 -> 371655 bytes .../zip_write_encrypt_aes256_file_fuzzer.js | 4809 +++++++++ .../zip_write_encrypt_aes256_file_fuzzer.wasm | Bin 0 -> 400122 bytes .../zip_write_encrypt_pkware_file_fuzzer.js | 4809 +++++++++ .../zip_write_encrypt_pkware_file_fuzzer.wasm | Bin 0 -> 400106 bytes .../CMakeDirectoryInformation.cmake | 16 + .../src/CMakeFiles/progress.marks | 1 + .../CMakeFiles/zipcmp.dir/DependInfo.cmake | 24 + .../src/CMakeFiles/zipcmp.dir/build.make | 132 + .../CMakeFiles/zipcmp.dir/cmake_clean.cmake | 13 + .../zipcmp.dir/compiler_depend.make | 2 + .../CMakeFiles/zipcmp.dir/compiler_depend.ts | 2 + .../src/CMakeFiles/zipcmp.dir/depend.make | 2 + .../src/CMakeFiles/zipcmp.dir/diff_output.c.o | Bin 0 -> 3758 bytes .../CMakeFiles/zipcmp.dir/diff_output.c.o.d | 52 + .../src/CMakeFiles/zipcmp.dir/flags.make | 10 + .../src/CMakeFiles/zipcmp.dir/link.txt | 1 + .../src/CMakeFiles/zipcmp.dir/progress.make | 4 + .../src/CMakeFiles/zipcmp.dir/zipcmp.c.o | Bin 0 -> 28320 bytes .../src/CMakeFiles/zipcmp.dir/zipcmp.c.o.d | 60 + .../CMakeFiles/zipmerge.dir/DependInfo.cmake | 23 + .../src/CMakeFiles/zipmerge.dir/build.make | 115 + .../CMakeFiles/zipmerge.dir/cmake_clean.cmake | 11 + .../zipmerge.dir/compiler_depend.make | 2 + .../zipmerge.dir/compiler_depend.ts | 2 + .../src/CMakeFiles/zipmerge.dir/depend.make | 2 + .../src/CMakeFiles/zipmerge.dir/flags.make | 10 + .../src/CMakeFiles/zipmerge.dir/link.txt | 1 + .../src/CMakeFiles/zipmerge.dir/progress.make | 3 + .../src/CMakeFiles/zipmerge.dir/zipmerge.c.o | Bin 0 -> 10717 bytes .../CMakeFiles/zipmerge.dir/zipmerge.c.o.d | 38 + .../CMakeFiles/ziptool.dir/DependInfo.cmake | 23 + .../src/CMakeFiles/ziptool.dir/build.make | 115 + .../CMakeFiles/ziptool.dir/cmake_clean.cmake | 11 + .../ziptool.dir/compiler_depend.make | 2 + .../CMakeFiles/ziptool.dir/compiler_depend.ts | 2 + .../src/CMakeFiles/ziptool.dir/depend.make | 2 + .../src/CMakeFiles/ziptool.dir/flags.make | 10 + .../src/CMakeFiles/ziptool.dir/link.txt | 1 + .../src/CMakeFiles/ziptool.dir/progress.make | 3 + .../src/CMakeFiles/ziptool.dir/ziptool.c.o | Bin 0 -> 181061 bytes .../src/CMakeFiles/ziptool.dir/ziptool.c.o.d | 46 + .../build-emcmake/src/CTestTestfile.cmake | 6 + .../libzip-1.11.3/build-emcmake/src/Makefile | 353 + .../build-emcmake/src/cmake_install.cmake | 81 + .../libzip-1.11.3/build-emcmake/src/zipcmp.js | 4814 +++++++++ .../build-emcmake/src/zipcmp.wasm | Bin 0 -> 412967 bytes .../build-emcmake/src/zipmerge.js | 4814 +++++++++ .../build-emcmake/src/zipmerge.wasm | Bin 0 -> 412829 bytes .../build-emcmake/src/ziptool.js | 4827 +++++++++ .../build-emcmake/src/ziptool.wasm | Bin 0 -> 461566 bytes .../libzip-1.11.3/build-emcmake/zipconf.h | 48 + thirdparty/zlib-1.3.1/CMakeLists.txt | 218 + thirdparty/zlib-1.3.1/ChangeLog | 1618 +++ thirdparty/zlib-1.3.1/FAQ | 367 + thirdparty/zlib-1.3.1/INDEX | 68 + thirdparty/zlib-1.3.1/LICENSE | 22 + thirdparty/zlib-1.3.1/Makefile | 5 + thirdparty/zlib-1.3.1/Makefile.in | 410 + thirdparty/zlib-1.3.1/README | 117 + thirdparty/zlib-1.3.1/adler32.c | 164 + thirdparty/zlib-1.3.1/amiga/Makefile.pup | 69 + thirdparty/zlib-1.3.1/amiga/Makefile.sas | 68 + .../zlib-1.3.1/build-emcmake/CMakeCache.txt | 353 + .../CMakeFiles/3.28.3/CMakeCCompiler.cmake | 74 + .../3.28.3/CMakeDetermineCompilerABI_C.bin | 1521 +++ .../CMakeFiles/3.28.3/CMakeSystem.cmake | 15 + .../3.28.3/CompilerIdC/CMakeCCompilerId.c | 880 ++ .../CMakeFiles/3.28.3/CompilerIdC/a.out.js | 1521 +++ .../CMakeFiles/3.28.3/CompilerIdC/a.out.wasm | Bin 0 -> 1791 bytes .../CMakeFiles/CMakeConfigureLog.yaml | 409 + .../CMakeDirectoryInformation.cmake | 16 + .../CMakeFiles/CheckTypeSize/OFF64_T.bin | Bin 0 -> 1166 bytes .../CMakeFiles/CheckTypeSize/OFF64_T.c | 46 + .../build-emcmake/CMakeFiles/Makefile.cmake | 122 + .../build-emcmake/CMakeFiles/Makefile2 | 252 + .../CMakeFiles/TargetDirectories.txt | 13 + .../CMakeFiles/cmake.check_cache | 1 + .../CMakeFiles/example.dir/DependInfo.cmake | 23 + .../CMakeFiles/example.dir/build.make | 114 + .../CMakeFiles/example.dir/cmake_clean.cmake | 11 + .../example.dir/compiler_depend.make | 2 + .../CMakeFiles/example.dir/compiler_depend.ts | 2 + .../CMakeFiles/example.dir/depend.make | 2 + .../CMakeFiles/example.dir/flags.make | 10 + .../CMakeFiles/example.dir/link.txt | 1 + .../CMakeFiles/example.dir/progress.make | 3 + .../CMakeFiles/example.dir/test/example.c.o | Bin 0 -> 18191 bytes .../CMakeFiles/example.dir/test/example.c.o.d | 43 + .../CMakeFiles/example64.dir/DependInfo.cmake | 23 + .../CMakeFiles/example64.dir/build.make | 114 + .../example64.dir/cmake_clean.cmake | 11 + .../example64.dir/compiler_depend.make | 2 + .../example64.dir/compiler_depend.ts | 2 + .../CMakeFiles/example64.dir/depend.make | 2 + .../CMakeFiles/example64.dir/flags.make | 10 + .../CMakeFiles/example64.dir/link.txt | 1 + .../CMakeFiles/example64.dir/progress.make | 3 + .../CMakeFiles/example64.dir/test/example.c.o | Bin 0 -> 18191 bytes .../example64.dir/test/example.c.o.d | 43 + .../CMakeFiles/minigzip.dir/DependInfo.cmake | 23 + .../CMakeFiles/minigzip.dir/build.make | 114 + .../CMakeFiles/minigzip.dir/cmake_clean.cmake | 11 + .../minigzip.dir/compiler_depend.make | 2 + .../minigzip.dir/compiler_depend.ts | 2 + .../CMakeFiles/minigzip.dir/depend.make | 2 + .../CMakeFiles/minigzip.dir/flags.make | 10 + .../CMakeFiles/minigzip.dir/link.txt | 1 + .../CMakeFiles/minigzip.dir/progress.make | 3 + .../CMakeFiles/minigzip.dir/test/minigzip.c.o | Bin 0 -> 7450 bytes .../minigzip.dir/test/minigzip.c.o.d | 43 + .../minigzip64.dir/DependInfo.cmake | 23 + .../CMakeFiles/minigzip64.dir/build.make | 114 + .../minigzip64.dir/cmake_clean.cmake | 11 + .../minigzip64.dir/compiler_depend.make | 2 + .../minigzip64.dir/compiler_depend.ts | 2 + .../CMakeFiles/minigzip64.dir/depend.make | 2 + .../CMakeFiles/minigzip64.dir/flags.make | 10 + .../CMakeFiles/minigzip64.dir/link.txt | 1 + .../CMakeFiles/minigzip64.dir/progress.make | 3 + .../minigzip64.dir/test/minigzip.c.o | Bin 0 -> 7450 bytes .../minigzip64.dir/test/minigzip.c.o.d | 43 + .../build-emcmake/CMakeFiles/progress.marks | 1 + .../CMakeFiles/zlib.dir/DependInfo.cmake | 37 + .../CMakeFiles/zlib.dir/adler32.c.o | Bin 0 -> 5938 bytes .../CMakeFiles/zlib.dir/adler32.c.o.d | 43 + .../CMakeFiles/zlib.dir/build.make | 350 + .../CMakeFiles/zlib.dir/cmake_clean.cmake | 39 + .../zlib.dir/cmake_clean_target.cmake | 3 + .../CMakeFiles/zlib.dir/compiler_depend.make | 2 + .../CMakeFiles/zlib.dir/compiler_depend.ts | 2 + .../CMakeFiles/zlib.dir/compress.c.o | Bin 0 -> 1647 bytes .../CMakeFiles/zlib.dir/compress.c.o.d | 36 + .../CMakeFiles/zlib.dir/crc32.c.o | Bin 0 -> 19892 bytes .../CMakeFiles/zlib.dir/crc32.c.o.d | 44 + .../CMakeFiles/zlib.dir/deflate.c.o | Bin 0 -> 58064 bytes .../CMakeFiles/zlib.dir/deflate.c.o.d | 44 + .../CMakeFiles/zlib.dir/depend.make | 2 + .../CMakeFiles/zlib.dir/flags.make | 10 + .../CMakeFiles/zlib.dir/gzclose.c.o | Bin 0 -> 718 bytes .../CMakeFiles/zlib.dir/gzclose.c.o.d | 48 + .../CMakeFiles/zlib.dir/gzlib.c.o | Bin 0 -> 10154 bytes .../CMakeFiles/zlib.dir/gzlib.c.o.d | 48 + .../CMakeFiles/zlib.dir/gzread.c.o | Bin 0 -> 12516 bytes .../CMakeFiles/zlib.dir/gzread.c.o.d | 48 + .../CMakeFiles/zlib.dir/gzwrite.c.o | Bin 0 -> 11463 bytes .../CMakeFiles/zlib.dir/gzwrite.c.o.d | 48 + .../CMakeFiles/zlib.dir/infback.c.o | Bin 0 -> 20892 bytes .../CMakeFiles/zlib.dir/infback.c.o.d | 47 + .../CMakeFiles/zlib.dir/inffast.c.o | Bin 0 -> 7230 bytes .../CMakeFiles/zlib.dir/inffast.c.o.d | 46 + .../CMakeFiles/zlib.dir/inflate.c.o | Bin 0 -> 41957 bytes .../CMakeFiles/zlib.dir/inflate.c.o.d | 47 + .../CMakeFiles/zlib.dir/inftrees.c.o | Bin 0 -> 6596 bytes .../CMakeFiles/zlib.dir/inftrees.c.o.d | 44 + .../CMakeFiles/zlib.dir/link.txt | 2 + .../CMakeFiles/zlib.dir/progress.make | 17 + .../CMakeFiles/zlib.dir/trees.c.o | Bin 0 -> 39596 bytes .../CMakeFiles/zlib.dir/trees.c.o.d | 45 + .../CMakeFiles/zlib.dir/uncompr.c.o | Bin 0 -> 1839 bytes .../CMakeFiles/zlib.dir/uncompr.c.o.d | 36 + .../CMakeFiles/zlib.dir/zutil.c.o | Bin 0 -> 1781 bytes .../CMakeFiles/zlib.dir/zutil.c.o.d | 49 + .../zlibstatic.dir/DependInfo.cmake | 37 + .../CMakeFiles/zlibstatic.dir/adler32.c.o | Bin 0 -> 5938 bytes .../CMakeFiles/zlibstatic.dir/adler32.c.o.d | 43 + .../CMakeFiles/zlibstatic.dir/build.make | 350 + .../zlibstatic.dir/cmake_clean.cmake | 39 + .../zlibstatic.dir/cmake_clean_target.cmake | 3 + .../zlibstatic.dir/compiler_depend.make | 2 + .../zlibstatic.dir/compiler_depend.ts | 2 + .../CMakeFiles/zlibstatic.dir/compress.c.o | Bin 0 -> 1647 bytes .../CMakeFiles/zlibstatic.dir/compress.c.o.d | 36 + .../CMakeFiles/zlibstatic.dir/crc32.c.o | Bin 0 -> 19892 bytes .../CMakeFiles/zlibstatic.dir/crc32.c.o.d | 44 + .../CMakeFiles/zlibstatic.dir/deflate.c.o | Bin 0 -> 58064 bytes .../CMakeFiles/zlibstatic.dir/deflate.c.o.d | 44 + .../CMakeFiles/zlibstatic.dir/depend.make | 2 + .../CMakeFiles/zlibstatic.dir/flags.make | 10 + .../CMakeFiles/zlibstatic.dir/gzclose.c.o | Bin 0 -> 718 bytes .../CMakeFiles/zlibstatic.dir/gzclose.c.o.d | 48 + .../CMakeFiles/zlibstatic.dir/gzlib.c.o | Bin 0 -> 10154 bytes .../CMakeFiles/zlibstatic.dir/gzlib.c.o.d | 48 + .../CMakeFiles/zlibstatic.dir/gzread.c.o | Bin 0 -> 12516 bytes .../CMakeFiles/zlibstatic.dir/gzread.c.o.d | 48 + .../CMakeFiles/zlibstatic.dir/gzwrite.c.o | Bin 0 -> 11463 bytes .../CMakeFiles/zlibstatic.dir/gzwrite.c.o.d | 48 + .../CMakeFiles/zlibstatic.dir/infback.c.o | Bin 0 -> 20892 bytes .../CMakeFiles/zlibstatic.dir/infback.c.o.d | 47 + .../CMakeFiles/zlibstatic.dir/inffast.c.o | Bin 0 -> 7230 bytes .../CMakeFiles/zlibstatic.dir/inffast.c.o.d | 46 + .../CMakeFiles/zlibstatic.dir/inflate.c.o | Bin 0 -> 41957 bytes .../CMakeFiles/zlibstatic.dir/inflate.c.o.d | 47 + .../CMakeFiles/zlibstatic.dir/inftrees.c.o | Bin 0 -> 6596 bytes .../CMakeFiles/zlibstatic.dir/inftrees.c.o.d | 44 + .../CMakeFiles/zlibstatic.dir/link.txt | 2 + .../CMakeFiles/zlibstatic.dir/progress.make | 17 + .../CMakeFiles/zlibstatic.dir/trees.c.o | Bin 0 -> 39596 bytes .../CMakeFiles/zlibstatic.dir/trees.c.o.d | 45 + .../CMakeFiles/zlibstatic.dir/uncompr.c.o | Bin 0 -> 1839 bytes .../CMakeFiles/zlibstatic.dir/uncompr.c.o.d | 36 + .../CMakeFiles/zlibstatic.dir/zutil.c.o | Bin 0 -> 1781 bytes .../CMakeFiles/zlibstatic.dir/zutil.c.o.d | 49 + .../build-emcmake/CTestTestfile.cmake | 10 + thirdparty/zlib-1.3.1/build-emcmake/Makefile | 794 ++ .../build-emcmake/cmake_install.cmake | 112 + .../zlib-1.3.1/build-emcmake/example.js | 4342 ++++++++ .../zlib-1.3.1/build-emcmake/example.wasm | Bin 0 -> 222066 bytes .../zlib-1.3.1/build-emcmake/example64.js | 4342 ++++++++ .../zlib-1.3.1/build-emcmake/example64.wasm | Bin 0 -> 222066 bytes .../build-emcmake/install_manifest.txt | 6 + thirdparty/zlib-1.3.1/build-emcmake/libz.a | Bin 0 -> 242940 bytes .../zlib-1.3.1/build-emcmake/minigzip.js | 4517 ++++++++ .../zlib-1.3.1/build-emcmake/minigzip.wasm | Bin 0 -> 201173 bytes .../zlib-1.3.1/build-emcmake/minigzip64.js | 4517 ++++++++ .../zlib-1.3.1/build-emcmake/minigzip64.wasm | Bin 0 -> 201173 bytes thirdparty/zlib-1.3.1/build-emcmake/zconf.h | 545 + thirdparty/zlib-1.3.1/build-emcmake/zlib.pc | 13 + thirdparty/zlib-1.3.1/compress.c | 75 + thirdparty/zlib-1.3.1/configure | 929 ++ thirdparty/zlib-1.3.1/contrib/README.contrib | 57 + .../zlib-1.3.1/contrib/ada/buffer_demo.adb | 106 + thirdparty/zlib-1.3.1/contrib/ada/mtest.adb | 156 + thirdparty/zlib-1.3.1/contrib/ada/read.adb | 156 + thirdparty/zlib-1.3.1/contrib/ada/readme.txt | 65 + thirdparty/zlib-1.3.1/contrib/ada/test.adb | 463 + .../zlib-1.3.1/contrib/ada/zlib-streams.adb | 225 + .../zlib-1.3.1/contrib/ada/zlib-streams.ads | 114 + .../zlib-1.3.1/contrib/ada/zlib-thin.adb | 141 + .../zlib-1.3.1/contrib/ada/zlib-thin.ads | 450 + thirdparty/zlib-1.3.1/contrib/ada/zlib.adb | 701 ++ thirdparty/zlib-1.3.1/contrib/ada/zlib.ads | 328 + thirdparty/zlib-1.3.1/contrib/ada/zlib.gpr | 20 + thirdparty/zlib-1.3.1/contrib/blast/Makefile | 8 + thirdparty/zlib-1.3.1/contrib/blast/README | 4 + thirdparty/zlib-1.3.1/contrib/blast/blast.c | 466 + thirdparty/zlib-1.3.1/contrib/blast/blast.h | 83 + thirdparty/zlib-1.3.1/contrib/blast/test.pk | Bin 0 -> 8 bytes thirdparty/zlib-1.3.1/contrib/blast/test.txt | 1 + thirdparty/zlib-1.3.1/contrib/delphi/ZLib.pas | 557 + .../zlib-1.3.1/contrib/delphi/ZLibConst.pas | 11 + .../zlib-1.3.1/contrib/delphi/readme.txt | 76 + .../zlib-1.3.1/contrib/delphi/zlibd32.mak | 99 + .../zlib-1.3.1/contrib/dotzlib/DotZLib.build | 33 + .../zlib-1.3.1/contrib/dotzlib/DotZLib.chm | Bin 0 -> 72726 bytes .../zlib-1.3.1/contrib/dotzlib/DotZLib.sln | 21 + .../contrib/dotzlib/DotZLib/AssemblyInfo.cs | 58 + .../contrib/dotzlib/DotZLib/ChecksumImpl.cs | 202 + .../contrib/dotzlib/DotZLib/CircularBuffer.cs | 83 + .../contrib/dotzlib/DotZLib/CodecBase.cs | 198 + .../contrib/dotzlib/DotZLib/Deflater.cs | 106 + .../contrib/dotzlib/DotZLib/DotZLib.cs | 288 + .../contrib/dotzlib/DotZLib/DotZLib.csproj | 141 + .../contrib/dotzlib/DotZLib/GZipStream.cs | 301 + .../contrib/dotzlib/DotZLib/Inflater.cs | 105 + .../contrib/dotzlib/DotZLib/UnitTests.cs | 274 + .../contrib/dotzlib/LICENSE_1_0.txt | 23 + .../zlib-1.3.1/contrib/dotzlib/readme.txt | 58 + .../zlib-1.3.1/contrib/gcc_gvmat64/gvmat64.S | 574 + thirdparty/zlib-1.3.1/contrib/infback9/README | 1 + .../zlib-1.3.1/contrib/infback9/infback9.c | 603 ++ .../zlib-1.3.1/contrib/infback9/infback9.h | 37 + .../zlib-1.3.1/contrib/infback9/inffix9.h | 107 + .../zlib-1.3.1/contrib/infback9/inflate9.h | 47 + .../zlib-1.3.1/contrib/infback9/inftree9.c | 319 + .../zlib-1.3.1/contrib/infback9/inftree9.h | 61 + .../zlib-1.3.1/contrib/iostream/test.cpp | 24 + .../zlib-1.3.1/contrib/iostream/zfstream.cpp | 329 + .../zlib-1.3.1/contrib/iostream/zfstream.h | 128 + .../zlib-1.3.1/contrib/iostream2/zstream.h | 307 + .../contrib/iostream2/zstream_test.cpp | 25 + .../zlib-1.3.1/contrib/iostream3/README | 35 + thirdparty/zlib-1.3.1/contrib/iostream3/TODO | 17 + .../zlib-1.3.1/contrib/iostream3/test.cc | 50 + .../zlib-1.3.1/contrib/iostream3/zfstream.cc | 479 + .../zlib-1.3.1/contrib/iostream3/zfstream.h | 466 + .../zlib-1.3.1/contrib/minizip/Makefile | 29 + .../zlib-1.3.1/contrib/minizip/Makefile.am | 45 + .../contrib/minizip/MiniZip64_Changes.txt | 6 + .../contrib/minizip/MiniZip64_info.txt | 74 + .../zlib-1.3.1/contrib/minizip/configure.ac | 32 + thirdparty/zlib-1.3.1/contrib/minizip/crypt.h | 128 + thirdparty/zlib-1.3.1/contrib/minizip/ioapi.c | 231 + thirdparty/zlib-1.3.1/contrib/minizip/ioapi.h | 210 + .../zlib-1.3.1/contrib/minizip/iowin32.c | 440 + .../zlib-1.3.1/contrib/minizip/iowin32.h | 28 + .../zlib-1.3.1/contrib/minizip/make_vms.com | 25 + .../zlib-1.3.1/contrib/minizip/miniunz.c | 647 ++ .../zlib-1.3.1/contrib/minizip/miniunzip.1 | 63 + .../zlib-1.3.1/contrib/minizip/minizip.1 | 46 + .../zlib-1.3.1/contrib/minizip/minizip.c | 509 + .../zlib-1.3.1/contrib/minizip/minizip.pc.in | 12 + .../zlib-1.3.1/contrib/minizip/mztools.c | 285 + .../zlib-1.3.1/contrib/minizip/mztools.h | 37 + thirdparty/zlib-1.3.1/contrib/minizip/unzip.c | 1985 ++++ thirdparty/zlib-1.3.1/contrib/minizip/unzip.h | 437 + thirdparty/zlib-1.3.1/contrib/minizip/zip.c | 1956 ++++ thirdparty/zlib-1.3.1/contrib/minizip/zip.h | 364 + .../zlib-1.3.1/contrib/nuget/nuget.csproj | 43 + thirdparty/zlib-1.3.1/contrib/nuget/nuget.sln | 22 + .../zlib-1.3.1/contrib/pascal/example.pas | 599 ++ .../zlib-1.3.1/contrib/pascal/readme.txt | 76 + .../zlib-1.3.1/contrib/pascal/zlibd32.mak | 99 + .../zlib-1.3.1/contrib/pascal/zlibpas.pas | 276 + thirdparty/zlib-1.3.1/contrib/puff/Makefile | 42 + thirdparty/zlib-1.3.1/contrib/puff/README | 63 + thirdparty/zlib-1.3.1/contrib/puff/puff.c | 840 ++ thirdparty/zlib-1.3.1/contrib/puff/puff.h | 35 + thirdparty/zlib-1.3.1/contrib/puff/pufftest.c | 165 + thirdparty/zlib-1.3.1/contrib/puff/zeros.raw | Bin 0 -> 2517 bytes .../zlib-1.3.1/contrib/testzlib/testzlib.c | 275 + .../zlib-1.3.1/contrib/testzlib/testzlib.txt | 10 + thirdparty/zlib-1.3.1/contrib/untgz/Makefile | 14 + .../zlib-1.3.1/contrib/untgz/Makefile.msc | 17 + thirdparty/zlib-1.3.1/contrib/untgz/untgz.c | 667 ++ .../zlib-1.3.1/contrib/vstudio/readme.txt | 81 + .../contrib/vstudio/vc10/miniunz.vcxproj | 310 + .../vstudio/vc10/miniunz.vcxproj.filters | 22 + .../contrib/vstudio/vc10/minizip.vcxproj | 307 + .../vstudio/vc10/minizip.vcxproj.filters | 22 + .../contrib/vstudio/vc10/testzlib.vcxproj | 412 + .../vstudio/vc10/testzlib.vcxproj.filters | 55 + .../contrib/vstudio/vc10/testzlibdll.vcxproj | 310 + .../vstudio/vc10/testzlibdll.vcxproj.filters | 22 + .../zlib-1.3.1/contrib/vstudio/vc10/zlib.rc | 32 + .../contrib/vstudio/vc10/zlibstat.vcxproj | 449 + .../vstudio/vc10/zlibstat.vcxproj.filters | 74 + .../contrib/vstudio/vc10/zlibvc.def | 158 + .../contrib/vstudio/vc10/zlibvc.sln | 135 + .../contrib/vstudio/vc10/zlibvc.vcxproj | 633 ++ .../vstudio/vc10/zlibvc.vcxproj.filters | 115 + .../contrib/vstudio/vc11/miniunz.vcxproj | 314 + .../contrib/vstudio/vc11/minizip.vcxproj | 311 + .../contrib/vstudio/vc11/testzlib.vcxproj | 418 + .../contrib/vstudio/vc11/testzlibdll.vcxproj | 314 + .../zlib-1.3.1/contrib/vstudio/vc11/zlib.rc | 32 + .../contrib/vstudio/vc11/zlibstat.vcxproj | 456 + .../contrib/vstudio/vc11/zlibvc.def | 158 + .../contrib/vstudio/vc11/zlibvc.sln | 117 + .../contrib/vstudio/vc11/zlibvc.vcxproj | 664 ++ .../contrib/vstudio/vc12/miniunz.vcxproj | 316 + .../contrib/vstudio/vc12/minizip.vcxproj | 313 + .../contrib/vstudio/vc12/testzlib.vcxproj | 422 + .../contrib/vstudio/vc12/testzlibdll.vcxproj | 316 + .../zlib-1.3.1/contrib/vstudio/vc12/zlib.rc | 32 + .../contrib/vstudio/vc12/zlibstat.vcxproj | 459 + .../contrib/vstudio/vc12/zlibvc.def | 158 + .../contrib/vstudio/vc12/zlibvc.sln | 119 + .../contrib/vstudio/vc12/zlibvc.vcxproj | 668 ++ .../contrib/vstudio/vc14/miniunz.vcxproj | 316 + .../contrib/vstudio/vc14/minizip.vcxproj | 313 + .../contrib/vstudio/vc14/testzlib.vcxproj | 422 + .../contrib/vstudio/vc14/testzlibdll.vcxproj | 316 + .../zlib-1.3.1/contrib/vstudio/vc14/zlib.rc | 32 + .../contrib/vstudio/vc14/zlibstat.vcxproj | 459 + .../contrib/vstudio/vc14/zlibvc.def | 158 + .../contrib/vstudio/vc14/zlibvc.sln | 119 + .../contrib/vstudio/vc14/zlibvc.vcxproj | 668 ++ .../contrib/vstudio/vc17/miniunz.vcxproj | 409 + .../contrib/vstudio/vc17/minizip.vcxproj | 405 + .../contrib/vstudio/vc17/testzlib.vcxproj | 473 + .../contrib/vstudio/vc17/testzlibdll.vcxproj | 409 + .../zlib-1.3.1/contrib/vstudio/vc17/zlib.rc | 32 + .../contrib/vstudio/vc17/zlibstat.vcxproj | 602 ++ .../contrib/vstudio/vc17/zlibvc.def | 158 + .../contrib/vstudio/vc17/zlibvc.sln | 179 + .../contrib/vstudio/vc17/zlibvc.vcxproj | 875 ++ .../contrib/vstudio/vc9/miniunz.vcproj | 565 + .../contrib/vstudio/vc9/minizip.vcproj | 562 + .../contrib/vstudio/vc9/testzlib.vcproj | 796 ++ .../contrib/vstudio/vc9/testzlibdll.vcproj | 565 + .../zlib-1.3.1/contrib/vstudio/vc9/zlib.rc | 32 + .../contrib/vstudio/vc9/zlibstat.vcproj | 781 ++ .../zlib-1.3.1/contrib/vstudio/vc9/zlibvc.def | 158 + .../zlib-1.3.1/contrib/vstudio/vc9/zlibvc.sln | 144 + .../contrib/vstudio/vc9/zlibvc.vcproj | 1100 ++ thirdparty/zlib-1.3.1/crc32.c | 1049 ++ thirdparty/zlib-1.3.1/crc32.h | 9446 +++++++++++++++++ thirdparty/zlib-1.3.1/deflate.c | 2139 ++++ thirdparty/zlib-1.3.1/deflate.h | 377 + thirdparty/zlib-1.3.1/doc/algorithm.txt | 209 + thirdparty/zlib-1.3.1/doc/crc-doc.1.0.pdf | Bin 0 -> 776142 bytes thirdparty/zlib-1.3.1/doc/rfc1950.txt | 619 ++ thirdparty/zlib-1.3.1/doc/rfc1951.txt | 955 ++ thirdparty/zlib-1.3.1/doc/rfc1952.txt | 675 ++ thirdparty/zlib-1.3.1/doc/txtvsbin.txt | 107 + .../zlib-1.3.1/examples/README.examples | 54 + thirdparty/zlib-1.3.1/examples/enough.c | 597 ++ thirdparty/zlib-1.3.1/examples/fitblk.c | 233 + thirdparty/zlib-1.3.1/examples/gun.c | 702 ++ thirdparty/zlib-1.3.1/examples/gzappend.c | 504 + thirdparty/zlib-1.3.1/examples/gzjoin.c | 449 + thirdparty/zlib-1.3.1/examples/gzlog.c | 1061 ++ thirdparty/zlib-1.3.1/examples/gzlog.h | 91 + thirdparty/zlib-1.3.1/examples/gznorm.c | 470 + thirdparty/zlib-1.3.1/examples/zlib_how.html | 549 + thirdparty/zlib-1.3.1/examples/zpipe.c | 205 + thirdparty/zlib-1.3.1/examples/zran.c | 533 + thirdparty/zlib-1.3.1/examples/zran.h | 51 + thirdparty/zlib-1.3.1/gzclose.c | 23 + thirdparty/zlib-1.3.1/gzguts.h | 214 + thirdparty/zlib-1.3.1/gzlib.c | 582 + thirdparty/zlib-1.3.1/gzread.c | 602 ++ thirdparty/zlib-1.3.1/gzwrite.c | 631 ++ thirdparty/zlib-1.3.1/infback.c | 628 ++ thirdparty/zlib-1.3.1/inffast.c | 320 + thirdparty/zlib-1.3.1/inffast.h | 11 + thirdparty/zlib-1.3.1/inffixed.h | 94 + thirdparty/zlib-1.3.1/inflate.c | 1526 +++ thirdparty/zlib-1.3.1/inflate.h | 126 + thirdparty/zlib-1.3.1/inftrees.c | 299 + thirdparty/zlib-1.3.1/inftrees.h | 62 + thirdparty/zlib-1.3.1/install/include/zconf.h | 545 + thirdparty/zlib-1.3.1/install/include/zlib.h | 1938 ++++ thirdparty/zlib-1.3.1/install/lib/libz.a | Bin 0 -> 242940 bytes .../zlib-1.3.1/install/share/man/man3/zlib.3 | 149 + .../install/share/pkgconfig/zlib.pc | 13 + thirdparty/zlib-1.3.1/make_vms.com | 867 ++ thirdparty/zlib-1.3.1/msdos/Makefile.bor | 115 + thirdparty/zlib-1.3.1/msdos/Makefile.dj2 | 104 + thirdparty/zlib-1.3.1/msdos/Makefile.emx | 69 + thirdparty/zlib-1.3.1/msdos/Makefile.msc | 112 + thirdparty/zlib-1.3.1/msdos/Makefile.tc | 100 + thirdparty/zlib-1.3.1/nintendods/Makefile | 126 + thirdparty/zlib-1.3.1/nintendods/README | 5 + thirdparty/zlib-1.3.1/old/Makefile.emx | 69 + thirdparty/zlib-1.3.1/old/Makefile.riscos | 151 + thirdparty/zlib-1.3.1/old/README | 3 + thirdparty/zlib-1.3.1/old/descrip.mms | 48 + thirdparty/zlib-1.3.1/old/os2/Makefile.os2 | 136 + thirdparty/zlib-1.3.1/old/os2/zlib.def | 51 + thirdparty/zlib-1.3.1/old/visual-basic.txt | 160 + thirdparty/zlib-1.3.1/os400/README400 | 48 + thirdparty/zlib-1.3.1/os400/bndsrc | 127 + thirdparty/zlib-1.3.1/os400/make.sh | 366 + thirdparty/zlib-1.3.1/os400/zlib.inc | 527 + thirdparty/zlib-1.3.1/qnx/package.qpg | 141 + thirdparty/zlib-1.3.1/test/example.c | 546 + thirdparty/zlib-1.3.1/test/infcover.c | 672 ++ thirdparty/zlib-1.3.1/test/minigzip.c | 579 + thirdparty/zlib-1.3.1/treebuild.xml | 116 + thirdparty/zlib-1.3.1/trees.c | 1117 ++ thirdparty/zlib-1.3.1/trees.h | 128 + thirdparty/zlib-1.3.1/uncompr.c | 85 + thirdparty/zlib-1.3.1/watcom/watcom_f.mak | 43 + thirdparty/zlib-1.3.1/watcom/watcom_l.mak | 43 + thirdparty/zlib-1.3.1/zconf.h.cmakein | 545 + thirdparty/zlib-1.3.1/zconf.h.in | 543 + thirdparty/zlib-1.3.1/zconf.h.included | 543 + thirdparty/zlib-1.3.1/zlib.3 | 149 + thirdparty/zlib-1.3.1/zlib.3.pdf | Bin 0 -> 25523 bytes thirdparty/zlib-1.3.1/zlib.h | 1938 ++++ thirdparty/zlib-1.3.1/zlib.map | 100 + thirdparty/zlib-1.3.1/zlib.pc.cmakein | 13 + thirdparty/zlib-1.3.1/zlib.pc.in | 13 + thirdparty/zlib-1.3.1/zutil.c | 299 + thirdparty/zlib-1.3.1/zutil.h | 254 + 1177 files changed, 221998 insertions(+), 42 deletions(-) create mode 100644 build-emcmake/CMakeCache.txt create mode 100644 build-emcmake/CMakeFiles/3.28.3/CMakeCXXCompiler.cmake create mode 100644 build-emcmake/CMakeFiles/3.28.3/CMakeDetermineCompilerABI_CXX.bin create mode 100644 build-emcmake/CMakeFiles/3.28.3/CMakeSystem.cmake create mode 100644 build-emcmake/CMakeFiles/3.28.3/CompilerIdCXX/CMakeCXXCompilerId.cpp create mode 100644 build-emcmake/CMakeFiles/3.28.3/CompilerIdCXX/a.out.js create mode 100755 build-emcmake/CMakeFiles/3.28.3/CompilerIdCXX/a.out.wasm create mode 100644 build-emcmake/CMakeFiles/CMakeConfigureLog.yaml create mode 100644 build-emcmake/CMakeFiles/cmake.check_cache mode change 100644 => 100755 jumpingbird.wasm create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/CMakeCache.txt create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/3.28.3/CMakeCCompiler.cmake create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/3.28.3/CMakeDetermineCompilerABI_C.bin create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/3.28.3/CMakeSystem.cmake create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/3.28.3/CompilerIdC/CMakeCCompilerId.c create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/3.28.3/CompilerIdC/a.out.js create mode 100755 thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/3.28.3/CompilerIdC/a.out.wasm create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeConfigureLog.yaml create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeDirectoryInformation.cmake create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeRuleHashes.txt create mode 100755 thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CheckTypeSize/INT16_T_LIBZIP.bin create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CheckTypeSize/INT16_T_LIBZIP.c create mode 100755 thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CheckTypeSize/INT32_T_LIBZIP.bin create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CheckTypeSize/INT32_T_LIBZIP.c create mode 100755 thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CheckTypeSize/INT64_T_LIBZIP.bin create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CheckTypeSize/INT64_T_LIBZIP.c create mode 100755 thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CheckTypeSize/INT8_T_LIBZIP.bin create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CheckTypeSize/INT8_T_LIBZIP.c create mode 100755 thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CheckTypeSize/INT_LIBZIP.bin create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CheckTypeSize/INT_LIBZIP.c create mode 100755 thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CheckTypeSize/LONG_LIBZIP.bin create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CheckTypeSize/LONG_LIBZIP.c create mode 100755 thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CheckTypeSize/LONG_LONG_LIBZIP.bin create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CheckTypeSize/LONG_LONG_LIBZIP.c create mode 100755 thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CheckTypeSize/SHORT_LIBZIP.bin create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CheckTypeSize/SHORT_LIBZIP.c create mode 100755 thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CheckTypeSize/SIZEOF_OFF_T.bin create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CheckTypeSize/SIZEOF_OFF_T.c create mode 100755 thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CheckTypeSize/SIZEOF_SIZE_T.bin create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CheckTypeSize/SIZEOF_SIZE_T.c create mode 100755 thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CheckTypeSize/UINT16_T_LIBZIP.bin create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CheckTypeSize/UINT16_T_LIBZIP.c create mode 100755 thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CheckTypeSize/UINT32_T_LIBZIP.bin create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CheckTypeSize/UINT32_T_LIBZIP.c create mode 100755 thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CheckTypeSize/UINT64_T_LIBZIP.bin create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CheckTypeSize/UINT64_T_LIBZIP.c create mode 100755 thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CheckTypeSize/UINT8_T_LIBZIP.bin create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CheckTypeSize/UINT8_T_LIBZIP.c create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CheckTypeSize/__INT16_LIBZIP.c create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CheckTypeSize/__INT32_LIBZIP.c create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CheckTypeSize/__INT64_LIBZIP.c create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CheckTypeSize/__INT8_LIBZIP.c create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/Export/ab63c3a9eda5ec24a2943b813039874c/libzip-targets-noconfig.cmake create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/Export/ab63c3a9eda5ec24a2943b813039874c/libzip-targets.cmake create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/Makefile.cmake create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/Makefile2 create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/TargetDirectories.txt create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/cmake.check_cache create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/dist.dir/DependInfo.cmake create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/dist.dir/build.make create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/dist.dir/cmake_clean.cmake create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/dist.dir/compiler_depend.make create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/dist.dir/compiler_depend.ts create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/dist.dir/progress.make create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/distcheck.dir/DependInfo.cmake create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/distcheck.dir/build.make create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/distcheck.dir/cmake_clean.cmake create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/distcheck.dir/compiler_depend.make create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/distcheck.dir/compiler_depend.ts create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/distcheck.dir/progress.make create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/progress.marks create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/CTestTestfile.cmake create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/Makefile create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/cmake_install.cmake create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/compile_commands.json create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/config.h create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/examples/CMakeFiles/CMakeDirectoryInformation.cmake create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/examples/CMakeFiles/add-compressed-data.dir/DependInfo.cmake create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/examples/CMakeFiles/add-compressed-data.dir/add-compressed-data.c.o create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/examples/CMakeFiles/add-compressed-data.dir/add-compressed-data.c.o.d create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/examples/CMakeFiles/add-compressed-data.dir/build.make create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/examples/CMakeFiles/add-compressed-data.dir/cmake_clean.cmake create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/examples/CMakeFiles/add-compressed-data.dir/compiler_depend.make create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/examples/CMakeFiles/add-compressed-data.dir/compiler_depend.ts create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/examples/CMakeFiles/add-compressed-data.dir/depend.make create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/examples/CMakeFiles/add-compressed-data.dir/flags.make create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/examples/CMakeFiles/add-compressed-data.dir/link.txt create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/examples/CMakeFiles/add-compressed-data.dir/progress.make create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/examples/CMakeFiles/autoclose-archive.dir/DependInfo.cmake create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/examples/CMakeFiles/autoclose-archive.dir/autoclose-archive.c.o create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/examples/CMakeFiles/autoclose-archive.dir/autoclose-archive.c.o.d create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/examples/CMakeFiles/autoclose-archive.dir/build.make create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/examples/CMakeFiles/autoclose-archive.dir/cmake_clean.cmake create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/examples/CMakeFiles/autoclose-archive.dir/compiler_depend.make create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/examples/CMakeFiles/autoclose-archive.dir/compiler_depend.ts create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/examples/CMakeFiles/autoclose-archive.dir/depend.make create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/examples/CMakeFiles/autoclose-archive.dir/flags.make create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/examples/CMakeFiles/autoclose-archive.dir/link.txt create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/examples/CMakeFiles/autoclose-archive.dir/progress.make create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/examples/CMakeFiles/in-memory.dir/DependInfo.cmake create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/examples/CMakeFiles/in-memory.dir/build.make create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/examples/CMakeFiles/in-memory.dir/cmake_clean.cmake create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/examples/CMakeFiles/in-memory.dir/compiler_depend.make create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/examples/CMakeFiles/in-memory.dir/compiler_depend.ts create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/examples/CMakeFiles/in-memory.dir/depend.make create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/examples/CMakeFiles/in-memory.dir/flags.make create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/examples/CMakeFiles/in-memory.dir/in-memory.c.o create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/examples/CMakeFiles/in-memory.dir/in-memory.c.o.d create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/examples/CMakeFiles/in-memory.dir/link.txt create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/examples/CMakeFiles/in-memory.dir/progress.make create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/examples/CMakeFiles/progress.marks create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/examples/CTestTestfile.cmake create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/examples/Makefile create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/examples/add-compressed-data.js create mode 100755 thirdparty/libzip-1.11.3/build-emcmake/examples/add-compressed-data.wasm create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/examples/autoclose-archive.js create mode 100755 thirdparty/libzip-1.11.3/build-emcmake/examples/autoclose-archive.wasm create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/examples/cmake_install.cmake create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/examples/in-memory.js create mode 100755 thirdparty/libzip-1.11.3/build-emcmake/examples/in-memory.wasm create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/install/include/zip.h create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/install/include/zipconf.h create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/install/lib/cmake/libzip/libzip-config-version.cmake create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/install/lib/cmake/libzip/libzip-config.cmake create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/install/lib/cmake/libzip/libzip-targets-noconfig.cmake create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/install/lib/cmake/libzip/libzip-targets.cmake create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/install/lib/cmake/libzip/modules/FindMbedTLS.cmake create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/install/lib/cmake/libzip/modules/FindNettle.cmake create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/install/lib/cmake/libzip/modules/Findzstd.cmake create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/install/lib/libzip.a create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/install/lib/pkgconfig/libzip.pc create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man1/zipcmp.1 create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man1/zipmerge.1 create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man1/ziptool.1 create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/ZIP_SOURCE_GET_ARGS.3 create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/libzip.3 create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_add.3 create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_add_dir.3 create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_close.3 create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_compression_method_supported.3 create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_delete.3 create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_dir_add.3 create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_discard.3 create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_encryption_method_supported.3 create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_error_clear.3 create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_error_code_system.3 create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_error_code_zip.3 create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_error_fini.3 create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_error_get.3 create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_error_get_sys_type.3 create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_error_init.3 create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_error_init_with_code.3 create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_error_set.3 create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_error_set_from_source.3 create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_error_strerror.3 create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_error_system_type.3 create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_error_to_data.3 create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_error_to_str.3 create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_errors.3 create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_fclose.3 create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_fdopen.3 create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_file_add.3 create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_file_attributes_init.3 create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_file_error_clear.3 create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_file_error_get.3 create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_file_extra_field_delete.3 create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_file_extra_field_delete_by_id.3 create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_file_extra_field_get.3 create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_file_extra_field_get_by_id.3 create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_file_extra_field_set.3 create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_file_extra_fields_count.3 create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_file_extra_fields_count_by_id.3 create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_file_get_comment.3 create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_file_get_error.3 create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_file_get_external_attributes.3 create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_file_is_seekable.3 create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_file_rename.3 create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_file_replace.3 create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_file_set_comment.3 create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_file_set_dostime.3 create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_file_set_encryption.3 create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_file_set_external_attributes.3 create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_file_set_mtime.3 create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_file_strerror.3 create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_fopen.3 create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_fopen_encrypted.3 create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_fopen_index.3 create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_fopen_index_encrypted.3 create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_fread.3 create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_fseek.3 create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_ftell.3 create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_get_archive_comment.3 create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_get_archive_flag.3 create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_get_error.3 create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_get_file_comment.3 create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_get_name.3 create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_get_num_entries.3 create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_get_num_files.3 create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_libzip_version.3 create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_name_locate.3 create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_open.3 create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_open_from_source.3 create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_register_cancel_callback_with_state.3 create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_register_progress_callback.3 create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_register_progress_callback_with_state.3 create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_rename.3 create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_replace.3 create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_set_archive_comment.3 create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_set_archive_flag.3 create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_set_default_password.3 create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_set_file_comment.3 create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_set_file_compression.3 create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_source.3 create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_source_begin_write.3 create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_source_begin_write_cloning.3 create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_source_buffer.3 create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_source_buffer_create.3 create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_source_buffer_fragment.3 create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_source_buffer_fragment_create.3 create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_source_close.3 create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_source_commit_write.3 create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_source_error.3 create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_source_file.3 create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_source_file_create.3 create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_source_filep.3 create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_source_filep_create.3 create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_source_free.3 create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_source_function.3 create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_source_function_create.3 create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_source_is_deleted.3 create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_source_is_seekable.3 create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_source_keep.3 create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_source_layered.3 create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_source_layered_create.3 create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_source_make_command_bitmap.3 create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_source_open.3 create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_source_read.3 create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_source_rollback_write.3 create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_source_seek.3 create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_source_seek_compute_offset.3 create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_source_seek_write.3 create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_source_stat.3 create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_source_tell.3 create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_source_tell_write.3 create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_source_win32a.3 create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_source_win32a_create.3 create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_source_win32handle.3 create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_source_win32handle_create.3 create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_source_win32w.3 create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_source_win32w_create.3 create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_source_window_create.3 create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_source_write.3 create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_source_zip.3 create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_source_zip_create.3 create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_source_zip_file.3 create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_source_zip_file_create.3 create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_stat.3 create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_stat_index.3 create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_stat_init.3 create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_strerror.3 create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_unchange.3 create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_unchange_all.3 create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_unchange_archive.3 create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/install_manifest.txt create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/CMakeDirectoryInformation.cmake create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/progress.marks create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/DependInfo.cmake create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/build.make create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/cmake_clean.cmake create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/cmake_clean_target.cmake create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/compiler_depend.make create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/compiler_depend.ts create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/depend.make create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/flags.make create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/link.txt create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/progress.make create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_add.c.o create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_add.c.o.d create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_add_dir.c.o create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_add_dir.c.o.d create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_add_entry.c.o create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_add_entry.c.o.d create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_algorithm_deflate.c.o create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_algorithm_deflate.c.o.d create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_buffer.c.o create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_buffer.c.o.d create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_close.c.o create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_close.c.o.d create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_delete.c.o create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_delete.c.o.d create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_dir_add.c.o create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_dir_add.c.o.d create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_dirent.c.o create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_dirent.c.o.d create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_discard.c.o create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_discard.c.o.d create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_entry.c.o create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_entry.c.o.d create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_err_str.c.o create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_err_str.c.o.d create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_error.c.o create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_error.c.o.d create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_error_clear.c.o create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_error_clear.c.o.d create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_error_get.c.o create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_error_get.c.o.d create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_error_get_sys_type.c.o create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_error_get_sys_type.c.o.d create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_error_strerror.c.o create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_error_strerror.c.o.d create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_error_to_str.c.o create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_error_to_str.c.o.d create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_extra_field.c.o create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_extra_field.c.o.d create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_extra_field_api.c.o create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_extra_field_api.c.o.d create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_fclose.c.o create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_fclose.c.o.d create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_fdopen.c.o create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_fdopen.c.o.d create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_file_add.c.o create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_file_add.c.o.d create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_file_error_clear.c.o create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_file_error_clear.c.o.d create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_file_error_get.c.o create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_file_error_get.c.o.d create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_file_get_comment.c.o create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_file_get_comment.c.o.d create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_file_get_external_attributes.c.o create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_file_get_external_attributes.c.o.d create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_file_get_offset.c.o create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_file_get_offset.c.o.d create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_file_rename.c.o create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_file_rename.c.o.d create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_file_replace.c.o create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_file_replace.c.o.d create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_file_set_comment.c.o create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_file_set_comment.c.o.d create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_file_set_encryption.c.o create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_file_set_encryption.c.o.d create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_file_set_external_attributes.c.o create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_file_set_external_attributes.c.o.d create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_file_set_mtime.c.o create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_file_set_mtime.c.o.d create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_file_strerror.c.o create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_file_strerror.c.o.d create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_fopen.c.o create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_fopen.c.o.d create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_fopen_encrypted.c.o create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_fopen_encrypted.c.o.d create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_fopen_index.c.o create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_fopen_index.c.o.d create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_fopen_index_encrypted.c.o create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_fopen_index_encrypted.c.o.d create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_fread.c.o create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_fread.c.o.d create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_fseek.c.o create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_fseek.c.o.d create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_ftell.c.o create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_ftell.c.o.d create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_get_archive_comment.c.o create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_get_archive_comment.c.o.d create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_get_archive_flag.c.o create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_get_archive_flag.c.o.d create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_get_encryption_implementation.c.o create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_get_encryption_implementation.c.o.d create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_get_file_comment.c.o create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_get_file_comment.c.o.d create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_get_name.c.o create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_get_name.c.o.d create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_get_num_entries.c.o create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_get_num_entries.c.o.d create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_get_num_files.c.o create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_get_num_files.c.o.d create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_hash.c.o create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_hash.c.o.d create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_io_util.c.o create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_io_util.c.o.d create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_libzip_version.c.o create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_libzip_version.c.o.d create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_memdup.c.o create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_memdup.c.o.d create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_name_locate.c.o create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_name_locate.c.o.d create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_new.c.o create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_new.c.o.d create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_open.c.o create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_open.c.o.d create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_pkware.c.o create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_pkware.c.o.d create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_progress.c.o create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_progress.c.o.d create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_random_unix.c.o create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_random_unix.c.o.d create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_rename.c.o create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_rename.c.o.d create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_replace.c.o create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_replace.c.o.d create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_set_archive_comment.c.o create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_set_archive_comment.c.o.d create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_set_archive_flag.c.o create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_set_archive_flag.c.o.d create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_set_default_password.c.o create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_set_default_password.c.o.d create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_set_file_comment.c.o create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_set_file_comment.c.o.d create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_set_file_compression.c.o create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_set_file_compression.c.o.d create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_set_name.c.o create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_set_name.c.o.d create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_source_accept_empty.c.o create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_source_accept_empty.c.o.d create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_source_begin_write.c.o create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_source_begin_write.c.o.d create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_source_begin_write_cloning.c.o create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_source_begin_write_cloning.c.o.d create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_source_buffer.c.o create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_source_buffer.c.o.d create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_source_call.c.o create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_source_call.c.o.d create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_source_close.c.o create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_source_close.c.o.d create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_source_commit_write.c.o create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_source_commit_write.c.o.d create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_source_compress.c.o create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_source_compress.c.o.d create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_source_crc.c.o create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_source_crc.c.o.d create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_source_error.c.o create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_source_error.c.o.d create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_source_file_common.c.o create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_source_file_common.c.o.d create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_source_file_stdio.c.o create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_source_file_stdio.c.o.d create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_source_file_stdio_named.c.o create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_source_file_stdio_named.c.o.d create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_source_free.c.o create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_source_free.c.o.d create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_source_function.c.o create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_source_function.c.o.d create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_source_get_dostime.c.o create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_source_get_dostime.c.o.d create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_source_get_file_attributes.c.o create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_source_get_file_attributes.c.o.d create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_source_is_deleted.c.o create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_source_is_deleted.c.o.d create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_source_layered.c.o create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_source_layered.c.o.d create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_source_open.c.o create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_source_open.c.o.d create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_source_pass_to_lower_layer.c.o create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_source_pass_to_lower_layer.c.o.d create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_source_pkware_decode.c.o create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_source_pkware_decode.c.o.d create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_source_pkware_encode.c.o create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_source_pkware_encode.c.o.d create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_source_read.c.o create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_source_read.c.o.d create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_source_remove.c.o create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_source_remove.c.o.d create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_source_rollback_write.c.o create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_source_rollback_write.c.o.d create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_source_seek.c.o create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_source_seek.c.o.d create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_source_seek_write.c.o create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_source_seek_write.c.o.d create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_source_stat.c.o create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_source_stat.c.o.d create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_source_supports.c.o create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_source_supports.c.o.d create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_source_tell.c.o create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_source_tell.c.o.d create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_source_tell_write.c.o create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_source_tell_write.c.o.d create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_source_window.c.o create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_source_window.c.o.d create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_source_write.c.o create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_source_write.c.o.d create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_source_zip.c.o create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_source_zip.c.o.d create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_source_zip_new.c.o create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_source_zip_new.c.o.d create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_stat.c.o create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_stat.c.o.d create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_stat_index.c.o create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_stat_index.c.o.d create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_stat_init.c.o create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_stat_init.c.o.d create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_strerror.c.o create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_strerror.c.o.d create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_string.c.o create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_string.c.o.d create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_unchange.c.o create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_unchange.c.o.d create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_unchange_all.c.o create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_unchange_all.c.o.d create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_unchange_archive.c.o create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_unchange_archive.c.o.d create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_unchange_data.c.o create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_unchange_data.c.o.d create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_utf-8.c.o create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_utf-8.c.o.d create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/lib/CTestTestfile.cmake create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/lib/Makefile create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/lib/cmake_install.cmake create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/lib/libzip.a create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/lib/zip_err_str.c create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/libzip-config-version.cmake create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/libzip-config.cmake create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/libzip-targets.cmake create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/libzip.pc create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/man/CMakeFiles/CMakeDirectoryInformation.cmake create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/man/CMakeFiles/man.dir/DependInfo.cmake create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/man/CMakeFiles/man.dir/build.make create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/man/CMakeFiles/man.dir/cmake_clean.cmake create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/man/CMakeFiles/man.dir/compiler_depend.make create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/man/CMakeFiles/man.dir/compiler_depend.ts create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/man/CMakeFiles/man.dir/progress.make create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/man/CMakeFiles/progress.marks create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/man/CMakeFiles/update-html.dir/DependInfo.cmake create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/man/CMakeFiles/update-html.dir/build.make create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/man/CMakeFiles/update-html.dir/cmake_clean.cmake create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/man/CMakeFiles/update-html.dir/compiler_depend.make create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/man/CMakeFiles/update-html.dir/compiler_depend.ts create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/man/CMakeFiles/update-html.dir/progress.make create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/man/CMakeFiles/update-man.dir/DependInfo.cmake create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/man/CMakeFiles/update-man.dir/build.make create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/man/CMakeFiles/update-man.dir/cmake_clean.cmake create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/man/CMakeFiles/update-man.dir/compiler_depend.make create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/man/CMakeFiles/update-man.dir/compiler_depend.ts create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/man/CMakeFiles/update-man.dir/progress.make create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/man/CMakeFiles/update_zip_errors.dir/DependInfo.cmake create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/man/CMakeFiles/update_zip_errors.dir/build.make create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/man/CMakeFiles/update_zip_errors.dir/cmake_clean.cmake create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/man/CMakeFiles/update_zip_errors.dir/compiler_depend.make create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/man/CMakeFiles/update_zip_errors.dir/compiler_depend.ts create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/man/CMakeFiles/update_zip_errors.dir/progress.make create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/man/CTestTestfile.cmake create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/man/Makefile create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/man/ZIP_SOURCE_GET_ARGS.3 create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/man/cmake_install.cmake create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/man/libzip.3 create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/man/zip_add.3 create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/man/zip_add_dir.3 create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/man/zip_close.3 create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/man/zip_compression_method_supported.3 create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/man/zip_delete.3 create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/man/zip_dir_add.3 create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/man/zip_discard.3 create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/man/zip_encryption_method_supported.3 create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/man/zip_error_clear.3 create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/man/zip_error_code_system.3 create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/man/zip_error_code_zip.3 create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/man/zip_error_fini.3 create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/man/zip_error_get.3 create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/man/zip_error_get_sys_type.3 create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/man/zip_error_init.3 create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/man/zip_error_set.3 create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/man/zip_error_set_from_source.3 create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/man/zip_error_strerror.3 create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/man/zip_error_system_type.3 create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/man/zip_error_to_data.3 create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/man/zip_error_to_str.3 create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/man/zip_errors.3 create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/man/zip_fclose.3 create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/man/zip_fdopen.3 create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/man/zip_file_add.3 create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/man/zip_file_attributes_init.3 create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/man/zip_file_extra_field_delete.3 create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/man/zip_file_extra_field_get.3 create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/man/zip_file_extra_field_set.3 create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/man/zip_file_extra_fields_count.3 create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/man/zip_file_get_comment.3 create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/man/zip_file_get_error.3 create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/man/zip_file_get_external_attributes.3 create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/man/zip_file_rename.3 create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/man/zip_file_set_comment.3 create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/man/zip_file_set_encryption.3 create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/man/zip_file_set_external_attributes.3 create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/man/zip_file_set_mtime.3 create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/man/zip_file_strerror.3 create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/man/zip_fopen.3 create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/man/zip_fopen_encrypted.3 create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/man/zip_fread.3 create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/man/zip_fseek.3 create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/man/zip_ftell.3 create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/man/zip_get_archive_comment.3 create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/man/zip_get_archive_flag.3 create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/man/zip_get_error.3 create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/man/zip_get_file_comment.3 create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/man/zip_get_name.3 create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/man/zip_get_num_entries.3 create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/man/zip_get_num_files.3 create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/man/zip_libzip_version.3 create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/man/zip_name_locate.3 create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/man/zip_open.3 create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/man/zip_register_cancel_callback_with_state.3 create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/man/zip_register_progress_callback.3 create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/man/zip_register_progress_callback_with_state.3 create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/man/zip_rename.3 create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/man/zip_set_archive_comment.3 create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/man/zip_set_archive_flag.3 create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/man/zip_set_default_password.3 create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/man/zip_set_file_comment.3 create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/man/zip_set_file_compression.3 create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/man/zip_source.3 create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_begin_write.3 create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_buffer.3 create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_buffer_fragment.3 create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_close.3 create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_commit_write.3 create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_error.3 create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_file.3 create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_filep.3 create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_free.3 create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_function.3 create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_is_deleted.3 create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_is_seekable.3 create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_keep.3 create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_layered.3 create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_make_command_bitmap.3 create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_open.3 create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_read.3 create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_rollback_write.3 create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_seek.3 create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_seek_compute_offset.3 create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_seek_write.3 create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_stat.3 create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_tell.3 create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_tell_write.3 create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_win32a.3 create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_win32handle.3 create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_win32w.3 create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_window_create.3 create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_write.3 create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_zip.3 create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_zip_file.3 create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/man/zip_stat.3 create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/man/zip_stat_init.3 create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/man/zip_unchange.3 create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/man/zip_unchange_all.3 create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/man/zip_unchange_archive.3 create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/man/zipcmp.1 create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/man/zipmerge.1 create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/man/ziptool.1 create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/ossfuzz/CMakeFiles/CMakeDirectoryInformation.cmake create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/ossfuzz/CMakeFiles/list-fuzzers.dir/DependInfo.cmake create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/ossfuzz/CMakeFiles/list-fuzzers.dir/build.make create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/ossfuzz/CMakeFiles/list-fuzzers.dir/cmake_clean.cmake create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/ossfuzz/CMakeFiles/list-fuzzers.dir/compiler_depend.make create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/ossfuzz/CMakeFiles/list-fuzzers.dir/compiler_depend.ts create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/ossfuzz/CMakeFiles/list-fuzzers.dir/progress.make create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/ossfuzz/CMakeFiles/progress.marks create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/ossfuzz/CMakeFiles/zip_read_file_fuzzer.dir/DependInfo.cmake create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/ossfuzz/CMakeFiles/zip_read_file_fuzzer.dir/build.make create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/ossfuzz/CMakeFiles/zip_read_file_fuzzer.dir/cmake_clean.cmake create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/ossfuzz/CMakeFiles/zip_read_file_fuzzer.dir/compiler_depend.make create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/ossfuzz/CMakeFiles/zip_read_file_fuzzer.dir/compiler_depend.ts create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/ossfuzz/CMakeFiles/zip_read_file_fuzzer.dir/depend.make create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/ossfuzz/CMakeFiles/zip_read_file_fuzzer.dir/flags.make create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/ossfuzz/CMakeFiles/zip_read_file_fuzzer.dir/fuzz_main.c.o create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/ossfuzz/CMakeFiles/zip_read_file_fuzzer.dir/fuzz_main.c.o.d create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/ossfuzz/CMakeFiles/zip_read_file_fuzzer.dir/link.txt create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/ossfuzz/CMakeFiles/zip_read_file_fuzzer.dir/progress.make create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/ossfuzz/CMakeFiles/zip_read_file_fuzzer.dir/zip_read_file_fuzzer.c.o create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/ossfuzz/CMakeFiles/zip_read_file_fuzzer.dir/zip_read_file_fuzzer.c.o.d create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/ossfuzz/CMakeFiles/zip_read_fuzzer.dir/DependInfo.cmake create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/ossfuzz/CMakeFiles/zip_read_fuzzer.dir/build.make create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/ossfuzz/CMakeFiles/zip_read_fuzzer.dir/cmake_clean.cmake create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/ossfuzz/CMakeFiles/zip_read_fuzzer.dir/compiler_depend.make create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/ossfuzz/CMakeFiles/zip_read_fuzzer.dir/compiler_depend.ts create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/ossfuzz/CMakeFiles/zip_read_fuzzer.dir/depend.make create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/ossfuzz/CMakeFiles/zip_read_fuzzer.dir/flags.make create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/ossfuzz/CMakeFiles/zip_read_fuzzer.dir/fuzz_main.c.o create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/ossfuzz/CMakeFiles/zip_read_fuzzer.dir/fuzz_main.c.o.d create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/ossfuzz/CMakeFiles/zip_read_fuzzer.dir/link.txt create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/ossfuzz/CMakeFiles/zip_read_fuzzer.dir/progress.make create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/ossfuzz/CMakeFiles/zip_read_fuzzer.dir/zip_read_fuzzer.c.o create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/ossfuzz/CMakeFiles/zip_read_fuzzer.dir/zip_read_fuzzer.c.o.d create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/ossfuzz/CMakeFiles/zip_write_encrypt_aes256_file_fuzzer.dir/DependInfo.cmake create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/ossfuzz/CMakeFiles/zip_write_encrypt_aes256_file_fuzzer.dir/build.make create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/ossfuzz/CMakeFiles/zip_write_encrypt_aes256_file_fuzzer.dir/cmake_clean.cmake create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/ossfuzz/CMakeFiles/zip_write_encrypt_aes256_file_fuzzer.dir/compiler_depend.make create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/ossfuzz/CMakeFiles/zip_write_encrypt_aes256_file_fuzzer.dir/compiler_depend.ts create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/ossfuzz/CMakeFiles/zip_write_encrypt_aes256_file_fuzzer.dir/depend.make create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/ossfuzz/CMakeFiles/zip_write_encrypt_aes256_file_fuzzer.dir/flags.make create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/ossfuzz/CMakeFiles/zip_write_encrypt_aes256_file_fuzzer.dir/fuzz_main.c.o create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/ossfuzz/CMakeFiles/zip_write_encrypt_aes256_file_fuzzer.dir/fuzz_main.c.o.d create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/ossfuzz/CMakeFiles/zip_write_encrypt_aes256_file_fuzzer.dir/link.txt create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/ossfuzz/CMakeFiles/zip_write_encrypt_aes256_file_fuzzer.dir/progress.make create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/ossfuzz/CMakeFiles/zip_write_encrypt_aes256_file_fuzzer.dir/zip_write_encrypt_aes256_file_fuzzer.c.o create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/ossfuzz/CMakeFiles/zip_write_encrypt_aes256_file_fuzzer.dir/zip_write_encrypt_aes256_file_fuzzer.c.o.d create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/ossfuzz/CMakeFiles/zip_write_encrypt_pkware_file_fuzzer.dir/DependInfo.cmake create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/ossfuzz/CMakeFiles/zip_write_encrypt_pkware_file_fuzzer.dir/build.make create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/ossfuzz/CMakeFiles/zip_write_encrypt_pkware_file_fuzzer.dir/cmake_clean.cmake create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/ossfuzz/CMakeFiles/zip_write_encrypt_pkware_file_fuzzer.dir/compiler_depend.make create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/ossfuzz/CMakeFiles/zip_write_encrypt_pkware_file_fuzzer.dir/compiler_depend.ts create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/ossfuzz/CMakeFiles/zip_write_encrypt_pkware_file_fuzzer.dir/depend.make create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/ossfuzz/CMakeFiles/zip_write_encrypt_pkware_file_fuzzer.dir/flags.make create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/ossfuzz/CMakeFiles/zip_write_encrypt_pkware_file_fuzzer.dir/fuzz_main.c.o create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/ossfuzz/CMakeFiles/zip_write_encrypt_pkware_file_fuzzer.dir/fuzz_main.c.o.d create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/ossfuzz/CMakeFiles/zip_write_encrypt_pkware_file_fuzzer.dir/link.txt create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/ossfuzz/CMakeFiles/zip_write_encrypt_pkware_file_fuzzer.dir/progress.make create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/ossfuzz/CMakeFiles/zip_write_encrypt_pkware_file_fuzzer.dir/zip_write_encrypt_pkware_file_fuzzer.c.o create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/ossfuzz/CMakeFiles/zip_write_encrypt_pkware_file_fuzzer.dir/zip_write_encrypt_pkware_file_fuzzer.c.o.d create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/ossfuzz/CTestTestfile.cmake create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/ossfuzz/Makefile create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/ossfuzz/cmake_install.cmake create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/ossfuzz/zip_read_file_fuzzer.js create mode 100755 thirdparty/libzip-1.11.3/build-emcmake/ossfuzz/zip_read_file_fuzzer.wasm create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/ossfuzz/zip_read_fuzzer.js create mode 100755 thirdparty/libzip-1.11.3/build-emcmake/ossfuzz/zip_read_fuzzer.wasm create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/ossfuzz/zip_write_encrypt_aes256_file_fuzzer.js create mode 100755 thirdparty/libzip-1.11.3/build-emcmake/ossfuzz/zip_write_encrypt_aes256_file_fuzzer.wasm create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/ossfuzz/zip_write_encrypt_pkware_file_fuzzer.js create mode 100755 thirdparty/libzip-1.11.3/build-emcmake/ossfuzz/zip_write_encrypt_pkware_file_fuzzer.wasm create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/src/CMakeFiles/CMakeDirectoryInformation.cmake create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/src/CMakeFiles/progress.marks create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/src/CMakeFiles/zipcmp.dir/DependInfo.cmake create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/src/CMakeFiles/zipcmp.dir/build.make create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/src/CMakeFiles/zipcmp.dir/cmake_clean.cmake create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/src/CMakeFiles/zipcmp.dir/compiler_depend.make create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/src/CMakeFiles/zipcmp.dir/compiler_depend.ts create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/src/CMakeFiles/zipcmp.dir/depend.make create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/src/CMakeFiles/zipcmp.dir/diff_output.c.o create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/src/CMakeFiles/zipcmp.dir/diff_output.c.o.d create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/src/CMakeFiles/zipcmp.dir/flags.make create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/src/CMakeFiles/zipcmp.dir/link.txt create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/src/CMakeFiles/zipcmp.dir/progress.make create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/src/CMakeFiles/zipcmp.dir/zipcmp.c.o create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/src/CMakeFiles/zipcmp.dir/zipcmp.c.o.d create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/src/CMakeFiles/zipmerge.dir/DependInfo.cmake create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/src/CMakeFiles/zipmerge.dir/build.make create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/src/CMakeFiles/zipmerge.dir/cmake_clean.cmake create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/src/CMakeFiles/zipmerge.dir/compiler_depend.make create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/src/CMakeFiles/zipmerge.dir/compiler_depend.ts create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/src/CMakeFiles/zipmerge.dir/depend.make create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/src/CMakeFiles/zipmerge.dir/flags.make create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/src/CMakeFiles/zipmerge.dir/link.txt create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/src/CMakeFiles/zipmerge.dir/progress.make create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/src/CMakeFiles/zipmerge.dir/zipmerge.c.o create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/src/CMakeFiles/zipmerge.dir/zipmerge.c.o.d create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/src/CMakeFiles/ziptool.dir/DependInfo.cmake create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/src/CMakeFiles/ziptool.dir/build.make create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/src/CMakeFiles/ziptool.dir/cmake_clean.cmake create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/src/CMakeFiles/ziptool.dir/compiler_depend.make create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/src/CMakeFiles/ziptool.dir/compiler_depend.ts create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/src/CMakeFiles/ziptool.dir/depend.make create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/src/CMakeFiles/ziptool.dir/flags.make create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/src/CMakeFiles/ziptool.dir/link.txt create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/src/CMakeFiles/ziptool.dir/progress.make create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/src/CMakeFiles/ziptool.dir/ziptool.c.o create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/src/CMakeFiles/ziptool.dir/ziptool.c.o.d create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/src/CTestTestfile.cmake create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/src/Makefile create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/src/cmake_install.cmake create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/src/zipcmp.js create mode 100755 thirdparty/libzip-1.11.3/build-emcmake/src/zipcmp.wasm create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/src/zipmerge.js create mode 100755 thirdparty/libzip-1.11.3/build-emcmake/src/zipmerge.wasm create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/src/ziptool.js create mode 100755 thirdparty/libzip-1.11.3/build-emcmake/src/ziptool.wasm create mode 100644 thirdparty/libzip-1.11.3/build-emcmake/zipconf.h create mode 100644 thirdparty/zlib-1.3.1/CMakeLists.txt create mode 100644 thirdparty/zlib-1.3.1/ChangeLog create mode 100644 thirdparty/zlib-1.3.1/FAQ create mode 100644 thirdparty/zlib-1.3.1/INDEX create mode 100644 thirdparty/zlib-1.3.1/LICENSE create mode 100644 thirdparty/zlib-1.3.1/Makefile create mode 100644 thirdparty/zlib-1.3.1/Makefile.in create mode 100644 thirdparty/zlib-1.3.1/README create mode 100644 thirdparty/zlib-1.3.1/adler32.c create mode 100644 thirdparty/zlib-1.3.1/amiga/Makefile.pup create mode 100644 thirdparty/zlib-1.3.1/amiga/Makefile.sas create mode 100644 thirdparty/zlib-1.3.1/build-emcmake/CMakeCache.txt create mode 100644 thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/3.28.3/CMakeCCompiler.cmake create mode 100644 thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/3.28.3/CMakeDetermineCompilerABI_C.bin create mode 100644 thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/3.28.3/CMakeSystem.cmake create mode 100644 thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/3.28.3/CompilerIdC/CMakeCCompilerId.c create mode 100644 thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/3.28.3/CompilerIdC/a.out.js create mode 100755 thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/3.28.3/CompilerIdC/a.out.wasm create mode 100644 thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/CMakeConfigureLog.yaml create mode 100644 thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/CMakeDirectoryInformation.cmake create mode 100755 thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/CheckTypeSize/OFF64_T.bin create mode 100644 thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/CheckTypeSize/OFF64_T.c create mode 100644 thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/Makefile.cmake create mode 100644 thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/Makefile2 create mode 100644 thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/TargetDirectories.txt create mode 100644 thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/cmake.check_cache create mode 100644 thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/example.dir/DependInfo.cmake create mode 100644 thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/example.dir/build.make create mode 100644 thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/example.dir/cmake_clean.cmake create mode 100644 thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/example.dir/compiler_depend.make create mode 100644 thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/example.dir/compiler_depend.ts create mode 100644 thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/example.dir/depend.make create mode 100644 thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/example.dir/flags.make create mode 100644 thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/example.dir/link.txt create mode 100644 thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/example.dir/progress.make create mode 100644 thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/example.dir/test/example.c.o create mode 100644 thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/example.dir/test/example.c.o.d create mode 100644 thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/example64.dir/DependInfo.cmake create mode 100644 thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/example64.dir/build.make create mode 100644 thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/example64.dir/cmake_clean.cmake create mode 100644 thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/example64.dir/compiler_depend.make create mode 100644 thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/example64.dir/compiler_depend.ts create mode 100644 thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/example64.dir/depend.make create mode 100644 thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/example64.dir/flags.make create mode 100644 thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/example64.dir/link.txt create mode 100644 thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/example64.dir/progress.make create mode 100644 thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/example64.dir/test/example.c.o create mode 100644 thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/example64.dir/test/example.c.o.d create mode 100644 thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/minigzip.dir/DependInfo.cmake create mode 100644 thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/minigzip.dir/build.make create mode 100644 thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/minigzip.dir/cmake_clean.cmake create mode 100644 thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/minigzip.dir/compiler_depend.make create mode 100644 thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/minigzip.dir/compiler_depend.ts create mode 100644 thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/minigzip.dir/depend.make create mode 100644 thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/minigzip.dir/flags.make create mode 100644 thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/minigzip.dir/link.txt create mode 100644 thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/minigzip.dir/progress.make create mode 100644 thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/minigzip.dir/test/minigzip.c.o create mode 100644 thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/minigzip.dir/test/minigzip.c.o.d create mode 100644 thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/minigzip64.dir/DependInfo.cmake create mode 100644 thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/minigzip64.dir/build.make create mode 100644 thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/minigzip64.dir/cmake_clean.cmake create mode 100644 thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/minigzip64.dir/compiler_depend.make create mode 100644 thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/minigzip64.dir/compiler_depend.ts create mode 100644 thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/minigzip64.dir/depend.make create mode 100644 thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/minigzip64.dir/flags.make create mode 100644 thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/minigzip64.dir/link.txt create mode 100644 thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/minigzip64.dir/progress.make create mode 100644 thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/minigzip64.dir/test/minigzip.c.o create mode 100644 thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/minigzip64.dir/test/minigzip.c.o.d create mode 100644 thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/progress.marks create mode 100644 thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/zlib.dir/DependInfo.cmake create mode 100644 thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/zlib.dir/adler32.c.o create mode 100644 thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/zlib.dir/adler32.c.o.d create mode 100644 thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/zlib.dir/build.make create mode 100644 thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/zlib.dir/cmake_clean.cmake create mode 100644 thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/zlib.dir/cmake_clean_target.cmake create mode 100644 thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/zlib.dir/compiler_depend.make create mode 100644 thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/zlib.dir/compiler_depend.ts create mode 100644 thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/zlib.dir/compress.c.o create mode 100644 thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/zlib.dir/compress.c.o.d create mode 100644 thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/zlib.dir/crc32.c.o create mode 100644 thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/zlib.dir/crc32.c.o.d create mode 100644 thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/zlib.dir/deflate.c.o create mode 100644 thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/zlib.dir/deflate.c.o.d create mode 100644 thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/zlib.dir/depend.make create mode 100644 thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/zlib.dir/flags.make create mode 100644 thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/zlib.dir/gzclose.c.o create mode 100644 thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/zlib.dir/gzclose.c.o.d create mode 100644 thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/zlib.dir/gzlib.c.o create mode 100644 thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/zlib.dir/gzlib.c.o.d create mode 100644 thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/zlib.dir/gzread.c.o create mode 100644 thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/zlib.dir/gzread.c.o.d create mode 100644 thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/zlib.dir/gzwrite.c.o create mode 100644 thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/zlib.dir/gzwrite.c.o.d create mode 100644 thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/zlib.dir/infback.c.o create mode 100644 thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/zlib.dir/infback.c.o.d create mode 100644 thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/zlib.dir/inffast.c.o create mode 100644 thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/zlib.dir/inffast.c.o.d create mode 100644 thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/zlib.dir/inflate.c.o create mode 100644 thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/zlib.dir/inflate.c.o.d create mode 100644 thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/zlib.dir/inftrees.c.o create mode 100644 thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/zlib.dir/inftrees.c.o.d create mode 100644 thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/zlib.dir/link.txt create mode 100644 thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/zlib.dir/progress.make create mode 100644 thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/zlib.dir/trees.c.o create mode 100644 thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/zlib.dir/trees.c.o.d create mode 100644 thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/zlib.dir/uncompr.c.o create mode 100644 thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/zlib.dir/uncompr.c.o.d create mode 100644 thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/zlib.dir/zutil.c.o create mode 100644 thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/zlib.dir/zutil.c.o.d create mode 100644 thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/zlibstatic.dir/DependInfo.cmake create mode 100644 thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/zlibstatic.dir/adler32.c.o create mode 100644 thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/zlibstatic.dir/adler32.c.o.d create mode 100644 thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/zlibstatic.dir/build.make create mode 100644 thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/zlibstatic.dir/cmake_clean.cmake create mode 100644 thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/zlibstatic.dir/cmake_clean_target.cmake create mode 100644 thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/zlibstatic.dir/compiler_depend.make create mode 100644 thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/zlibstatic.dir/compiler_depend.ts create mode 100644 thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/zlibstatic.dir/compress.c.o create mode 100644 thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/zlibstatic.dir/compress.c.o.d create mode 100644 thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/zlibstatic.dir/crc32.c.o create mode 100644 thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/zlibstatic.dir/crc32.c.o.d create mode 100644 thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/zlibstatic.dir/deflate.c.o create mode 100644 thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/zlibstatic.dir/deflate.c.o.d create mode 100644 thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/zlibstatic.dir/depend.make create mode 100644 thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/zlibstatic.dir/flags.make create mode 100644 thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/zlibstatic.dir/gzclose.c.o create mode 100644 thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/zlibstatic.dir/gzclose.c.o.d create mode 100644 thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/zlibstatic.dir/gzlib.c.o create mode 100644 thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/zlibstatic.dir/gzlib.c.o.d create mode 100644 thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/zlibstatic.dir/gzread.c.o create mode 100644 thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/zlibstatic.dir/gzread.c.o.d create mode 100644 thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/zlibstatic.dir/gzwrite.c.o create mode 100644 thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/zlibstatic.dir/gzwrite.c.o.d create mode 100644 thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/zlibstatic.dir/infback.c.o create mode 100644 thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/zlibstatic.dir/infback.c.o.d create mode 100644 thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/zlibstatic.dir/inffast.c.o create mode 100644 thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/zlibstatic.dir/inffast.c.o.d create mode 100644 thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/zlibstatic.dir/inflate.c.o create mode 100644 thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/zlibstatic.dir/inflate.c.o.d create mode 100644 thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/zlibstatic.dir/inftrees.c.o create mode 100644 thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/zlibstatic.dir/inftrees.c.o.d create mode 100644 thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/zlibstatic.dir/link.txt create mode 100644 thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/zlibstatic.dir/progress.make create mode 100644 thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/zlibstatic.dir/trees.c.o create mode 100644 thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/zlibstatic.dir/trees.c.o.d create mode 100644 thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/zlibstatic.dir/uncompr.c.o create mode 100644 thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/zlibstatic.dir/uncompr.c.o.d create mode 100644 thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/zlibstatic.dir/zutil.c.o create mode 100644 thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/zlibstatic.dir/zutil.c.o.d create mode 100644 thirdparty/zlib-1.3.1/build-emcmake/CTestTestfile.cmake create mode 100644 thirdparty/zlib-1.3.1/build-emcmake/Makefile create mode 100644 thirdparty/zlib-1.3.1/build-emcmake/cmake_install.cmake create mode 100644 thirdparty/zlib-1.3.1/build-emcmake/example.js create mode 100755 thirdparty/zlib-1.3.1/build-emcmake/example.wasm create mode 100644 thirdparty/zlib-1.3.1/build-emcmake/example64.js create mode 100755 thirdparty/zlib-1.3.1/build-emcmake/example64.wasm create mode 100644 thirdparty/zlib-1.3.1/build-emcmake/install_manifest.txt create mode 100644 thirdparty/zlib-1.3.1/build-emcmake/libz.a create mode 100644 thirdparty/zlib-1.3.1/build-emcmake/minigzip.js create mode 100755 thirdparty/zlib-1.3.1/build-emcmake/minigzip.wasm create mode 100644 thirdparty/zlib-1.3.1/build-emcmake/minigzip64.js create mode 100755 thirdparty/zlib-1.3.1/build-emcmake/minigzip64.wasm create mode 100644 thirdparty/zlib-1.3.1/build-emcmake/zconf.h create mode 100644 thirdparty/zlib-1.3.1/build-emcmake/zlib.pc create mode 100644 thirdparty/zlib-1.3.1/compress.c create mode 100755 thirdparty/zlib-1.3.1/configure create mode 100644 thirdparty/zlib-1.3.1/contrib/README.contrib create mode 100644 thirdparty/zlib-1.3.1/contrib/ada/buffer_demo.adb create mode 100644 thirdparty/zlib-1.3.1/contrib/ada/mtest.adb create mode 100644 thirdparty/zlib-1.3.1/contrib/ada/read.adb create mode 100644 thirdparty/zlib-1.3.1/contrib/ada/readme.txt create mode 100644 thirdparty/zlib-1.3.1/contrib/ada/test.adb create mode 100644 thirdparty/zlib-1.3.1/contrib/ada/zlib-streams.adb create mode 100644 thirdparty/zlib-1.3.1/contrib/ada/zlib-streams.ads create mode 100644 thirdparty/zlib-1.3.1/contrib/ada/zlib-thin.adb create mode 100644 thirdparty/zlib-1.3.1/contrib/ada/zlib-thin.ads create mode 100644 thirdparty/zlib-1.3.1/contrib/ada/zlib.adb create mode 100644 thirdparty/zlib-1.3.1/contrib/ada/zlib.ads create mode 100644 thirdparty/zlib-1.3.1/contrib/ada/zlib.gpr create mode 100644 thirdparty/zlib-1.3.1/contrib/blast/Makefile create mode 100644 thirdparty/zlib-1.3.1/contrib/blast/README create mode 100644 thirdparty/zlib-1.3.1/contrib/blast/blast.c create mode 100644 thirdparty/zlib-1.3.1/contrib/blast/blast.h create mode 100644 thirdparty/zlib-1.3.1/contrib/blast/test.pk create mode 100644 thirdparty/zlib-1.3.1/contrib/blast/test.txt create mode 100644 thirdparty/zlib-1.3.1/contrib/delphi/ZLib.pas create mode 100644 thirdparty/zlib-1.3.1/contrib/delphi/ZLibConst.pas create mode 100644 thirdparty/zlib-1.3.1/contrib/delphi/readme.txt create mode 100644 thirdparty/zlib-1.3.1/contrib/delphi/zlibd32.mak create mode 100644 thirdparty/zlib-1.3.1/contrib/dotzlib/DotZLib.build create mode 100644 thirdparty/zlib-1.3.1/contrib/dotzlib/DotZLib.chm create mode 100644 thirdparty/zlib-1.3.1/contrib/dotzlib/DotZLib.sln create mode 100644 thirdparty/zlib-1.3.1/contrib/dotzlib/DotZLib/AssemblyInfo.cs create mode 100644 thirdparty/zlib-1.3.1/contrib/dotzlib/DotZLib/ChecksumImpl.cs create mode 100644 thirdparty/zlib-1.3.1/contrib/dotzlib/DotZLib/CircularBuffer.cs create mode 100644 thirdparty/zlib-1.3.1/contrib/dotzlib/DotZLib/CodecBase.cs create mode 100644 thirdparty/zlib-1.3.1/contrib/dotzlib/DotZLib/Deflater.cs create mode 100644 thirdparty/zlib-1.3.1/contrib/dotzlib/DotZLib/DotZLib.cs create mode 100644 thirdparty/zlib-1.3.1/contrib/dotzlib/DotZLib/DotZLib.csproj create mode 100644 thirdparty/zlib-1.3.1/contrib/dotzlib/DotZLib/GZipStream.cs create mode 100644 thirdparty/zlib-1.3.1/contrib/dotzlib/DotZLib/Inflater.cs create mode 100644 thirdparty/zlib-1.3.1/contrib/dotzlib/DotZLib/UnitTests.cs create mode 100644 thirdparty/zlib-1.3.1/contrib/dotzlib/LICENSE_1_0.txt create mode 100644 thirdparty/zlib-1.3.1/contrib/dotzlib/readme.txt create mode 100644 thirdparty/zlib-1.3.1/contrib/gcc_gvmat64/gvmat64.S create mode 100644 thirdparty/zlib-1.3.1/contrib/infback9/README create mode 100644 thirdparty/zlib-1.3.1/contrib/infback9/infback9.c create mode 100644 thirdparty/zlib-1.3.1/contrib/infback9/infback9.h create mode 100644 thirdparty/zlib-1.3.1/contrib/infback9/inffix9.h create mode 100644 thirdparty/zlib-1.3.1/contrib/infback9/inflate9.h create mode 100644 thirdparty/zlib-1.3.1/contrib/infback9/inftree9.c create mode 100644 thirdparty/zlib-1.3.1/contrib/infback9/inftree9.h create mode 100644 thirdparty/zlib-1.3.1/contrib/iostream/test.cpp create mode 100644 thirdparty/zlib-1.3.1/contrib/iostream/zfstream.cpp create mode 100644 thirdparty/zlib-1.3.1/contrib/iostream/zfstream.h create mode 100644 thirdparty/zlib-1.3.1/contrib/iostream2/zstream.h create mode 100644 thirdparty/zlib-1.3.1/contrib/iostream2/zstream_test.cpp create mode 100644 thirdparty/zlib-1.3.1/contrib/iostream3/README create mode 100644 thirdparty/zlib-1.3.1/contrib/iostream3/TODO create mode 100644 thirdparty/zlib-1.3.1/contrib/iostream3/test.cc create mode 100644 thirdparty/zlib-1.3.1/contrib/iostream3/zfstream.cc create mode 100644 thirdparty/zlib-1.3.1/contrib/iostream3/zfstream.h create mode 100644 thirdparty/zlib-1.3.1/contrib/minizip/Makefile create mode 100644 thirdparty/zlib-1.3.1/contrib/minizip/Makefile.am create mode 100644 thirdparty/zlib-1.3.1/contrib/minizip/MiniZip64_Changes.txt create mode 100644 thirdparty/zlib-1.3.1/contrib/minizip/MiniZip64_info.txt create mode 100644 thirdparty/zlib-1.3.1/contrib/minizip/configure.ac create mode 100644 thirdparty/zlib-1.3.1/contrib/minizip/crypt.h create mode 100644 thirdparty/zlib-1.3.1/contrib/minizip/ioapi.c create mode 100644 thirdparty/zlib-1.3.1/contrib/minizip/ioapi.h create mode 100644 thirdparty/zlib-1.3.1/contrib/minizip/iowin32.c create mode 100644 thirdparty/zlib-1.3.1/contrib/minizip/iowin32.h create mode 100644 thirdparty/zlib-1.3.1/contrib/minizip/make_vms.com create mode 100644 thirdparty/zlib-1.3.1/contrib/minizip/miniunz.c create mode 100644 thirdparty/zlib-1.3.1/contrib/minizip/miniunzip.1 create mode 100644 thirdparty/zlib-1.3.1/contrib/minizip/minizip.1 create mode 100644 thirdparty/zlib-1.3.1/contrib/minizip/minizip.c create mode 100644 thirdparty/zlib-1.3.1/contrib/minizip/minizip.pc.in create mode 100644 thirdparty/zlib-1.3.1/contrib/minizip/mztools.c create mode 100644 thirdparty/zlib-1.3.1/contrib/minizip/mztools.h create mode 100644 thirdparty/zlib-1.3.1/contrib/minizip/unzip.c create mode 100644 thirdparty/zlib-1.3.1/contrib/minizip/unzip.h create mode 100644 thirdparty/zlib-1.3.1/contrib/minizip/zip.c create mode 100644 thirdparty/zlib-1.3.1/contrib/minizip/zip.h create mode 100644 thirdparty/zlib-1.3.1/contrib/nuget/nuget.csproj create mode 100644 thirdparty/zlib-1.3.1/contrib/nuget/nuget.sln create mode 100644 thirdparty/zlib-1.3.1/contrib/pascal/example.pas create mode 100644 thirdparty/zlib-1.3.1/contrib/pascal/readme.txt create mode 100644 thirdparty/zlib-1.3.1/contrib/pascal/zlibd32.mak create mode 100644 thirdparty/zlib-1.3.1/contrib/pascal/zlibpas.pas create mode 100644 thirdparty/zlib-1.3.1/contrib/puff/Makefile create mode 100644 thirdparty/zlib-1.3.1/contrib/puff/README create mode 100644 thirdparty/zlib-1.3.1/contrib/puff/puff.c create mode 100644 thirdparty/zlib-1.3.1/contrib/puff/puff.h create mode 100644 thirdparty/zlib-1.3.1/contrib/puff/pufftest.c create mode 100644 thirdparty/zlib-1.3.1/contrib/puff/zeros.raw create mode 100644 thirdparty/zlib-1.3.1/contrib/testzlib/testzlib.c create mode 100644 thirdparty/zlib-1.3.1/contrib/testzlib/testzlib.txt create mode 100644 thirdparty/zlib-1.3.1/contrib/untgz/Makefile create mode 100644 thirdparty/zlib-1.3.1/contrib/untgz/Makefile.msc create mode 100644 thirdparty/zlib-1.3.1/contrib/untgz/untgz.c create mode 100644 thirdparty/zlib-1.3.1/contrib/vstudio/readme.txt create mode 100644 thirdparty/zlib-1.3.1/contrib/vstudio/vc10/miniunz.vcxproj create mode 100644 thirdparty/zlib-1.3.1/contrib/vstudio/vc10/miniunz.vcxproj.filters create mode 100644 thirdparty/zlib-1.3.1/contrib/vstudio/vc10/minizip.vcxproj create mode 100644 thirdparty/zlib-1.3.1/contrib/vstudio/vc10/minizip.vcxproj.filters create mode 100644 thirdparty/zlib-1.3.1/contrib/vstudio/vc10/testzlib.vcxproj create mode 100644 thirdparty/zlib-1.3.1/contrib/vstudio/vc10/testzlib.vcxproj.filters create mode 100644 thirdparty/zlib-1.3.1/contrib/vstudio/vc10/testzlibdll.vcxproj create mode 100644 thirdparty/zlib-1.3.1/contrib/vstudio/vc10/testzlibdll.vcxproj.filters create mode 100644 thirdparty/zlib-1.3.1/contrib/vstudio/vc10/zlib.rc create mode 100644 thirdparty/zlib-1.3.1/contrib/vstudio/vc10/zlibstat.vcxproj create mode 100644 thirdparty/zlib-1.3.1/contrib/vstudio/vc10/zlibstat.vcxproj.filters create mode 100644 thirdparty/zlib-1.3.1/contrib/vstudio/vc10/zlibvc.def create mode 100644 thirdparty/zlib-1.3.1/contrib/vstudio/vc10/zlibvc.sln create mode 100644 thirdparty/zlib-1.3.1/contrib/vstudio/vc10/zlibvc.vcxproj create mode 100644 thirdparty/zlib-1.3.1/contrib/vstudio/vc10/zlibvc.vcxproj.filters create mode 100644 thirdparty/zlib-1.3.1/contrib/vstudio/vc11/miniunz.vcxproj create mode 100644 thirdparty/zlib-1.3.1/contrib/vstudio/vc11/minizip.vcxproj create mode 100644 thirdparty/zlib-1.3.1/contrib/vstudio/vc11/testzlib.vcxproj create mode 100644 thirdparty/zlib-1.3.1/contrib/vstudio/vc11/testzlibdll.vcxproj create mode 100644 thirdparty/zlib-1.3.1/contrib/vstudio/vc11/zlib.rc create mode 100644 thirdparty/zlib-1.3.1/contrib/vstudio/vc11/zlibstat.vcxproj create mode 100644 thirdparty/zlib-1.3.1/contrib/vstudio/vc11/zlibvc.def create mode 100644 thirdparty/zlib-1.3.1/contrib/vstudio/vc11/zlibvc.sln create mode 100644 thirdparty/zlib-1.3.1/contrib/vstudio/vc11/zlibvc.vcxproj create mode 100644 thirdparty/zlib-1.3.1/contrib/vstudio/vc12/miniunz.vcxproj create mode 100644 thirdparty/zlib-1.3.1/contrib/vstudio/vc12/minizip.vcxproj create mode 100644 thirdparty/zlib-1.3.1/contrib/vstudio/vc12/testzlib.vcxproj create mode 100644 thirdparty/zlib-1.3.1/contrib/vstudio/vc12/testzlibdll.vcxproj create mode 100644 thirdparty/zlib-1.3.1/contrib/vstudio/vc12/zlib.rc create mode 100644 thirdparty/zlib-1.3.1/contrib/vstudio/vc12/zlibstat.vcxproj create mode 100644 thirdparty/zlib-1.3.1/contrib/vstudio/vc12/zlibvc.def create mode 100644 thirdparty/zlib-1.3.1/contrib/vstudio/vc12/zlibvc.sln create mode 100644 thirdparty/zlib-1.3.1/contrib/vstudio/vc12/zlibvc.vcxproj create mode 100644 thirdparty/zlib-1.3.1/contrib/vstudio/vc14/miniunz.vcxproj create mode 100644 thirdparty/zlib-1.3.1/contrib/vstudio/vc14/minizip.vcxproj create mode 100644 thirdparty/zlib-1.3.1/contrib/vstudio/vc14/testzlib.vcxproj create mode 100644 thirdparty/zlib-1.3.1/contrib/vstudio/vc14/testzlibdll.vcxproj create mode 100644 thirdparty/zlib-1.3.1/contrib/vstudio/vc14/zlib.rc create mode 100644 thirdparty/zlib-1.3.1/contrib/vstudio/vc14/zlibstat.vcxproj create mode 100644 thirdparty/zlib-1.3.1/contrib/vstudio/vc14/zlibvc.def create mode 100644 thirdparty/zlib-1.3.1/contrib/vstudio/vc14/zlibvc.sln create mode 100644 thirdparty/zlib-1.3.1/contrib/vstudio/vc14/zlibvc.vcxproj create mode 100644 thirdparty/zlib-1.3.1/contrib/vstudio/vc17/miniunz.vcxproj create mode 100644 thirdparty/zlib-1.3.1/contrib/vstudio/vc17/minizip.vcxproj create mode 100644 thirdparty/zlib-1.3.1/contrib/vstudio/vc17/testzlib.vcxproj create mode 100644 thirdparty/zlib-1.3.1/contrib/vstudio/vc17/testzlibdll.vcxproj create mode 100644 thirdparty/zlib-1.3.1/contrib/vstudio/vc17/zlib.rc create mode 100644 thirdparty/zlib-1.3.1/contrib/vstudio/vc17/zlibstat.vcxproj create mode 100644 thirdparty/zlib-1.3.1/contrib/vstudio/vc17/zlibvc.def create mode 100644 thirdparty/zlib-1.3.1/contrib/vstudio/vc17/zlibvc.sln create mode 100644 thirdparty/zlib-1.3.1/contrib/vstudio/vc17/zlibvc.vcxproj create mode 100644 thirdparty/zlib-1.3.1/contrib/vstudio/vc9/miniunz.vcproj create mode 100644 thirdparty/zlib-1.3.1/contrib/vstudio/vc9/minizip.vcproj create mode 100644 thirdparty/zlib-1.3.1/contrib/vstudio/vc9/testzlib.vcproj create mode 100644 thirdparty/zlib-1.3.1/contrib/vstudio/vc9/testzlibdll.vcproj create mode 100644 thirdparty/zlib-1.3.1/contrib/vstudio/vc9/zlib.rc create mode 100644 thirdparty/zlib-1.3.1/contrib/vstudio/vc9/zlibstat.vcproj create mode 100644 thirdparty/zlib-1.3.1/contrib/vstudio/vc9/zlibvc.def create mode 100644 thirdparty/zlib-1.3.1/contrib/vstudio/vc9/zlibvc.sln create mode 100644 thirdparty/zlib-1.3.1/contrib/vstudio/vc9/zlibvc.vcproj create mode 100644 thirdparty/zlib-1.3.1/crc32.c create mode 100644 thirdparty/zlib-1.3.1/crc32.h create mode 100644 thirdparty/zlib-1.3.1/deflate.c create mode 100644 thirdparty/zlib-1.3.1/deflate.h create mode 100644 thirdparty/zlib-1.3.1/doc/algorithm.txt create mode 100644 thirdparty/zlib-1.3.1/doc/crc-doc.1.0.pdf create mode 100644 thirdparty/zlib-1.3.1/doc/rfc1950.txt create mode 100644 thirdparty/zlib-1.3.1/doc/rfc1951.txt create mode 100644 thirdparty/zlib-1.3.1/doc/rfc1952.txt create mode 100644 thirdparty/zlib-1.3.1/doc/txtvsbin.txt create mode 100644 thirdparty/zlib-1.3.1/examples/README.examples create mode 100644 thirdparty/zlib-1.3.1/examples/enough.c create mode 100644 thirdparty/zlib-1.3.1/examples/fitblk.c create mode 100644 thirdparty/zlib-1.3.1/examples/gun.c create mode 100644 thirdparty/zlib-1.3.1/examples/gzappend.c create mode 100644 thirdparty/zlib-1.3.1/examples/gzjoin.c create mode 100644 thirdparty/zlib-1.3.1/examples/gzlog.c create mode 100644 thirdparty/zlib-1.3.1/examples/gzlog.h create mode 100644 thirdparty/zlib-1.3.1/examples/gznorm.c create mode 100644 thirdparty/zlib-1.3.1/examples/zlib_how.html create mode 100644 thirdparty/zlib-1.3.1/examples/zpipe.c create mode 100644 thirdparty/zlib-1.3.1/examples/zran.c create mode 100644 thirdparty/zlib-1.3.1/examples/zran.h create mode 100644 thirdparty/zlib-1.3.1/gzclose.c create mode 100644 thirdparty/zlib-1.3.1/gzguts.h create mode 100644 thirdparty/zlib-1.3.1/gzlib.c create mode 100644 thirdparty/zlib-1.3.1/gzread.c create mode 100644 thirdparty/zlib-1.3.1/gzwrite.c create mode 100644 thirdparty/zlib-1.3.1/infback.c create mode 100644 thirdparty/zlib-1.3.1/inffast.c create mode 100644 thirdparty/zlib-1.3.1/inffast.h create mode 100644 thirdparty/zlib-1.3.1/inffixed.h create mode 100644 thirdparty/zlib-1.3.1/inflate.c create mode 100644 thirdparty/zlib-1.3.1/inflate.h create mode 100644 thirdparty/zlib-1.3.1/inftrees.c create mode 100644 thirdparty/zlib-1.3.1/inftrees.h create mode 100644 thirdparty/zlib-1.3.1/install/include/zconf.h create mode 100644 thirdparty/zlib-1.3.1/install/include/zlib.h create mode 100644 thirdparty/zlib-1.3.1/install/lib/libz.a create mode 100644 thirdparty/zlib-1.3.1/install/share/man/man3/zlib.3 create mode 100644 thirdparty/zlib-1.3.1/install/share/pkgconfig/zlib.pc create mode 100644 thirdparty/zlib-1.3.1/make_vms.com create mode 100644 thirdparty/zlib-1.3.1/msdos/Makefile.bor create mode 100644 thirdparty/zlib-1.3.1/msdos/Makefile.dj2 create mode 100644 thirdparty/zlib-1.3.1/msdos/Makefile.emx create mode 100644 thirdparty/zlib-1.3.1/msdos/Makefile.msc create mode 100644 thirdparty/zlib-1.3.1/msdos/Makefile.tc create mode 100644 thirdparty/zlib-1.3.1/nintendods/Makefile create mode 100644 thirdparty/zlib-1.3.1/nintendods/README create mode 100644 thirdparty/zlib-1.3.1/old/Makefile.emx create mode 100644 thirdparty/zlib-1.3.1/old/Makefile.riscos create mode 100644 thirdparty/zlib-1.3.1/old/README create mode 100644 thirdparty/zlib-1.3.1/old/descrip.mms create mode 100644 thirdparty/zlib-1.3.1/old/os2/Makefile.os2 create mode 100644 thirdparty/zlib-1.3.1/old/os2/zlib.def create mode 100644 thirdparty/zlib-1.3.1/old/visual-basic.txt create mode 100644 thirdparty/zlib-1.3.1/os400/README400 create mode 100644 thirdparty/zlib-1.3.1/os400/bndsrc create mode 100644 thirdparty/zlib-1.3.1/os400/make.sh create mode 100644 thirdparty/zlib-1.3.1/os400/zlib.inc create mode 100644 thirdparty/zlib-1.3.1/qnx/package.qpg create mode 100644 thirdparty/zlib-1.3.1/test/example.c create mode 100644 thirdparty/zlib-1.3.1/test/infcover.c create mode 100644 thirdparty/zlib-1.3.1/test/minigzip.c create mode 100644 thirdparty/zlib-1.3.1/treebuild.xml create mode 100644 thirdparty/zlib-1.3.1/trees.c create mode 100644 thirdparty/zlib-1.3.1/trees.h create mode 100644 thirdparty/zlib-1.3.1/uncompr.c create mode 100644 thirdparty/zlib-1.3.1/watcom/watcom_f.mak create mode 100644 thirdparty/zlib-1.3.1/watcom/watcom_l.mak create mode 100644 thirdparty/zlib-1.3.1/zconf.h.cmakein create mode 100644 thirdparty/zlib-1.3.1/zconf.h.in create mode 100644 thirdparty/zlib-1.3.1/zconf.h.included create mode 100644 thirdparty/zlib-1.3.1/zlib.3 create mode 100644 thirdparty/zlib-1.3.1/zlib.3.pdf create mode 100644 thirdparty/zlib-1.3.1/zlib.h create mode 100644 thirdparty/zlib-1.3.1/zlib.map create mode 100644 thirdparty/zlib-1.3.1/zlib.pc.cmakein create mode 100644 thirdparty/zlib-1.3.1/zlib.pc.in create mode 100644 thirdparty/zlib-1.3.1/zutil.c create mode 100644 thirdparty/zlib-1.3.1/zutil.h diff --git a/Game.cpp b/Game.cpp index e2c6ea1..a1867e0 100755 --- a/Game.cpp +++ b/Game.cpp @@ -28,22 +28,8 @@ Game::~Game() { SDL_Quit(); } -void Game::setup() { - if (SDL_Init(SDL_INIT_VIDEO | SDL_INIT_EVENTS) != 0) { - SDL_Log("Failed to initialize SDL: %s", SDL_GetError()); - return; - } - - SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, 3); - SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, 3); - SDL_GL_SetAttribute(SDL_GL_CONTEXT_PROFILE_MASK, SDL_GL_CONTEXT_PROFILE_CORE); - - window = SDL_CreateWindow("Game", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, - Environment::width, Environment::height, SDL_WINDOW_OPENGL); - - Environment::window = window; - - glContext = SDL_GL_CreateContext(window); +void Game::setup() { + glContext = SDL_GL_CreateContext(ZL::Environment::window); ZL::BindOpenGlFunctions(); ZL::CheckGlError(); @@ -51,14 +37,15 @@ void Game::setup() { std::cout << "Hello 1" << std::endl; // Initialize renderer + /* renderer.shaderManager.AddShaderFromFiles("default", "./default.vertex", "./default.fragment"); renderer.shaderManager.AddShaderFromFiles("defaultColor", "./defaultColor.vertex", "./defaultColor.fragment"); renderer.shaderManager.AddShaderFromFiles("defaultHideCam", "./defaultHideCam.vertex", "./defaultHideCam.fragment"); - +*/ // Initialize game objects std::cout << "Hello 2" << std::endl; - gameObjects.initialize(); + // gameObjects.initialize(); std::cout << "Hello 3" << std::endl; @@ -73,6 +60,7 @@ void Game::drawScene() { void Game::processTickCount() { + #if 0 if (Environment::finalIsGood) { return; @@ -113,23 +101,25 @@ void Game::processTickCount() { lastTickCount = newTickCount; } + #endif } void Game::render() { - SDL_GL_MakeCurrent(window, glContext); + SDL_GL_MakeCurrent(ZL::Environment::window, glContext); ZL::CheckGlError(); - glClearColor(0.0f, 0.0f, 0.0f, 1.0f); + glClearColor(0.0f, 1.0f, 0.0f, 1.0f); glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT); - drawScene(); + // drawScene(); processTickCount(); - SDL_GL_SwapWindow(window); + SDL_GL_SwapWindow(ZL::Environment::window); } void Game::update() { SDL_Event event; + std::cout << "HEE" << std::endl; while (SDL_PollEvent(&event)) { if (event.type == SDL_QUIT) { if (gameObjects.loadingThread.joinable()) diff --git a/GameObjectManager.cpp b/GameObjectManager.cpp index 8812dbd..f3d050a 100644 --- a/GameObjectManager.cpp +++ b/GameObjectManager.cpp @@ -16,9 +16,8 @@ const float GameObjectManager::SELECTED_CUBE_ICON_SIZE = 244.0f; const float GameObjectManager::SELECTED_CUBE_MARGIN = 50.0f; void GameObjectManager::initializeLoadingScreen() -{ +{ loadingScreenTexturePtr = std::make_shared(CreateTextureDataFromBmp24("./loading.bmp")); - loadingScreenMesh = CreateRect2D( { Environment::width / 2.f, Environment::height / 2.f }, { Environment::width / 2.f, Environment::height / 2.f }, @@ -29,17 +28,15 @@ void GameObjectManager::initializeLoadingScreen() } void GameObjectManager::initialize() { - initializeLoadingScreen(); - std::function loadingFunction1 = [this]() { current_room_index = 0; objects_in_inventory = 0; - bearName = ""; - current_room_index = 0; - objects_in_inventory = 0; + bearName = ""; + current_room_index = 0; + objects_in_inventory = 0; //coneTexturePtr = std::make_shared(CreateTextureDataFromBmp24("./conus.bmp")); @@ -54,7 +51,7 @@ void GameObjectManager::initialize() { loadingThread = std::thread([this]() { - + /* preloadedRoomMeshArr.resize(3); preloadedRoomMeshArr[0] = ZL::LoadFromTextFile("./oneroom001.txt"); preloadedRoomMeshArr[0].Scale(10); @@ -74,17 +71,17 @@ void GameObjectManager::initialize() { violaIdleModel.LoadFromFile("./idleviola_uv010.txt"); violaWalkModel.LoadFromFile("./walkviola_uv010.txt"); - sideThreadLoadingCompleted = true; + sideThreadLoadingCompleted = true;*/ }); + std::function loadingFunction2 = [this]() { return sideThreadLoadingCompleted; }; - std::function loadingFunction3 = [this]() { - +/* // Create active object ActiveObject cubeForFirstRoomT; cubeForFirstRoomT.name = "cube_T"; @@ -255,13 +252,14 @@ void GameObjectManager::initialize() { rooms.push_back(room_3); activeObjects = rooms[current_room_index].objects; - +*/ // Initialize audio /* audioPlayer = std::make_unique(); if (audioPlayer) { audioPlayer->playMusic(rooms[current_room_index].sound_name); }*/ + /* #ifdef AUDIO audioPlayerAsync.resetAsync(); audioPlayerAsync.playMusicAsync(rooms[current_room_index].sound_name); @@ -305,14 +303,15 @@ void GameObjectManager::initialize() { //SDL_ShowCursor(SDL_DISABLE); SDL_SetRelativeMouseMode(SDL_TRUE); - +*/ +std::cout << "Hi2" << std::endl; return true; }; - loadingFunctions.push_back(loadingFunction1); - loadingFunctions.push_back(loadingFunction2); - loadingFunctions.push_back(loadingFunction3); + //loadingFunctions.push_back(loadingFunction1); + //loadingFunctions.push_back(loadingFunction2); + //loadingFunctions.push_back(loadingFunction3); } void GameObjectManager::switch_room(int index){ @@ -713,6 +712,9 @@ void GameObjectManager::handleEvent(const SDL_Event& event) { } void GameObjectManager::updateScene(size_t ms) { + + #if 0 + const float SPEED = 0.1f; Vector2f directionVector = { 0.f, SPEED }; // x and z @@ -863,6 +865,8 @@ void GameObjectManager::updateScene(size_t ms) { //float Environment::monsterTimer = 0.0; //int Environment::monsterState = 1; + + #endif } bool GameObjectManager::isPointInObject(int screenX, int screenY, int objectScreenX, int objectScreenY) const { diff --git a/OpenGlExtensions.cpp b/OpenGlExtensions.cpp index 511a484..45f0936 100755 --- a/OpenGlExtensions.cpp +++ b/OpenGlExtensions.cpp @@ -1,6 +1,7 @@ #include "OpenGlExtensions.h" #include "Utils.h" +#include #if defined(WIN32) || defined(_WIN32) || defined(__WIN32__) @@ -326,7 +327,6 @@ namespace ZL { void CheckGlError() { size_t error = glGetError(); - if (error != GL_NO_ERROR) { throw std::runtime_error("Gl error"); diff --git a/Readme.md b/Readme.md index 20e4a13..c9ee197 100644 --- a/Readme.md +++ b/Readme.md @@ -61,6 +61,10 @@ emcmake cmake .. emcc main.cpp Game.cpp Environment.cpp GameObjectManager.cpp BoneAnimatedModel.cpp GameWorld.cpp InputManager.cpp Inventory.cpp ObjLoader.cpp QuestScripts.cpp RenderSystem.cpp Math.cpp Physics.cpp Renderer.cpp TextModel.cpp ShaderManager.cpp TextureManager.cpp Utils.cpp OpenGlExtensions.cpp -O2 -std=c++14 -IC:\Users\ASUS\Desktop\fishrungame2\ZeptoLabTest1\thirdparty\libzip-1.11.3\build-emcmake\install\include -LC:\Users\ASUS\Desktop\fishrungame2\ZeptoLabTest1\thirdparty\libzip-1.11.3\build-emcmake\install\lib -lzip -sTOTAL_MEMORY=33554432 -sUSE_SDL_IMAGE=2 -sSDL2_IMAGE_FORMATS="[""png""]" -sUSE_SDL=2 --preload-file background.bmp --preload-file bird.bmp32 --preload-file default.fragment --preload-file default.vertex --preload-file game_over.bmp32 --preload-file pipe.bmp32 -o jumpingbird.html + +emcc main.cpp Game.cpp Environment.cpp GameObjectManager.cpp BoneAnimatedModel.cpp GameWorld.cpp InputManager.cpp Inventory.cpp ObjLoader.cpp QuestScripts.cpp RenderSystem.cpp Math.cpp Physics.cpp Renderer.cpp TextModel.cpp ShaderManager.cpp TextureManager.cpp Utils.cpp OpenGlExtensions.cpp -O2 -std=c++14 -pthread -sUSE_PTHREADS=1 -sPTHREAD_POOL_SIZE=4 -I./thirdparty/libzip-1.11.3/build-emcmake/install/include -I./thirdparty/zlib-1.3.1/install/include -L./thirdparty/libzip-1.11.3/build-emcmake/install/lib -L./thirdparty/zlib-1.3.1/install/lib -lzip -lz -sTOTAL_MEMORY=33554432 -sUSE_SDL_IMAGE=2 -sSDL2_IMAGE_FORMATS='["png"]' -sUSE_SDL=2 --preload-file background.bmp --preload-file bird.bmp32 --preload-file default.fragment --preload-file default.vertex --preload-file game_over.bmp32 --preload-file pipe.bmp32 --preload-file loading.bmp -o jumpingbird.html + +emrun --no_browser --port 8080 . ``` # License @@ -68,4 +72,11 @@ Code: MIT Art: CC-BY +# Cmake Run +Run using cmakelist +make -j$(nproc) -C build #Компилируем +./build/sdl_app #ЗапуÑкаем +Ð”Ð»Ñ Ð¿Ð¾Ñтройки без звука +rm -rf build #Очищаем build папку +cmake -B build -DAUDIO=1 #ПереÑоздаём конфигурацию CMake \ No newline at end of file diff --git a/build-emcmake/CMakeCache.txt b/build-emcmake/CMakeCache.txt new file mode 100644 index 0000000..c30ecbf --- /dev/null +++ b/build-emcmake/CMakeCache.txt @@ -0,0 +1,372 @@ +# This is the CMakeCache file. +# For build in directory: /home/romazan/Рабочий Ñтол/cproject/build-emcmake +# It was generated by CMake: /usr/bin/cmake +# You can edit this file to change values found and used by cmake. +# If you do not want to change any of the values, simply exit the editor. +# If you do want to change a value, simply edit, save, and exit the editor. +# The syntax for the file is as follows: +# KEY:TYPE=VALUE +# KEY is the name of a variable in the cache. +# TYPE is a hint to GUIs for the type of VALUE, DO NOT EDIT TYPE!. +# VALUE is the current value for the KEY. + +######################## +# EXTERNAL cache entries +######################## + +//Path to a program. +CMAKE_ADDR2LINE:FILEPATH=/usr/bin/addr2line + +//Choose the type of build, options are: None Debug Release RelWithDebInfo +// MinSizeRel ... +CMAKE_BUILD_TYPE:STRING= + +//Enable/Disable color output during build. +CMAKE_COLOR_MAKEFILE:BOOL=ON + +//No help, variable specified on the command line. +CMAKE_CROSSCOMPILING_EMULATOR:UNINITIALIZED=/home/romazan/Рабочий Ñтол/emsdk/node/20.18.0_64bit/bin/node + +//Flags used by the CXX compiler during all build types. +CMAKE_CXX_FLAGS:STRING= + +//Flags used by the CXX compiler during DEBUG builds. +CMAKE_CXX_FLAGS_DEBUG:STRING=-g + +//Flags used by the CXX compiler during MINSIZEREL builds. +CMAKE_CXX_FLAGS_MINSIZEREL:STRING=-Os -DNDEBUG + +//Flags used by the CXX compiler during RELEASE builds. +CMAKE_CXX_FLAGS_RELEASE:STRING=-O3 -DNDEBUG + +//Flags used by the CXX compiler during RELWITHDEBINFO builds. +CMAKE_CXX_FLAGS_RELWITHDEBINFO:STRING=-O2 -g -DNDEBUG + +//Path to a program. +CMAKE_DLLTOOL:FILEPATH=CMAKE_DLLTOOL-NOTFOUND + +//Flags used by the linker during all build types. +CMAKE_EXE_LINKER_FLAGS:STRING= + +//Flags used by the linker during DEBUG builds. +CMAKE_EXE_LINKER_FLAGS_DEBUG:STRING= + +//Flags used by the linker during MINSIZEREL builds. +CMAKE_EXE_LINKER_FLAGS_MINSIZEREL:STRING= + +//Flags used by the linker during RELEASE builds. +CMAKE_EXE_LINKER_FLAGS_RELEASE:STRING= + +//Flags used by the linker during RELWITHDEBINFO builds. +CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO:STRING= + +//Enable/Disable output of compile commands during generation. +CMAKE_EXPORT_COMPILE_COMMANDS:BOOL= + +//Value Computed by CMake. +CMAKE_FIND_PACKAGE_REDIRECTS_DIR:STATIC=/home/romazan/Рабочий Ñтол/cproject/build-emcmake/CMakeFiles/pkgRedirects + +//Install path prefix, prepended onto install directories. +CMAKE_INSTALL_PREFIX:PATH=/home/romazan/Рабочий Ñтол/cproject/build-emcmake/install + +//Path to a program. +CMAKE_LINKER:FILEPATH=/usr/bin/ld + +//Path to a program. +CMAKE_MAKE_PROGRAM:FILEPATH=/usr/bin/gmake + +//Flags used by the linker during the creation of modules during +// all build types. +CMAKE_MODULE_LINKER_FLAGS:STRING= + +//Flags used by the linker during the creation of modules during +// DEBUG builds. +CMAKE_MODULE_LINKER_FLAGS_DEBUG:STRING= + +//Flags used by the linker during the creation of modules during +// MINSIZEREL builds. +CMAKE_MODULE_LINKER_FLAGS_MINSIZEREL:STRING= + +//Flags used by the linker during the creation of modules during +// RELEASE builds. +CMAKE_MODULE_LINKER_FLAGS_RELEASE:STRING= + +//Flags used by the linker during the creation of modules during +// RELWITHDEBINFO builds. +CMAKE_MODULE_LINKER_FLAGS_RELWITHDEBINFO:STRING= + +//Path to a program. +CMAKE_OBJCOPY:FILEPATH=/usr/bin/objcopy + +//Path to a program. +CMAKE_OBJDUMP:FILEPATH=/usr/bin/objdump + +//Value Computed by CMake +CMAKE_PROJECT_DESCRIPTION:STATIC= + +//Value Computed by CMake +CMAKE_PROJECT_HOMEPAGE_URL:STATIC= + +//Value Computed by CMake +CMAKE_PROJECT_NAME:STATIC=SDLApp + +//Value Computed by CMake +CMAKE_PROJECT_VERSION:STATIC=1.0 + +//Value Computed by CMake +CMAKE_PROJECT_VERSION_MAJOR:STATIC=1 + +//Value Computed by CMake +CMAKE_PROJECT_VERSION_MINOR:STATIC=0 + +//Value Computed by CMake +CMAKE_PROJECT_VERSION_PATCH:STATIC= + +//Value Computed by CMake +CMAKE_PROJECT_VERSION_TWEAK:STATIC= + +//Path to a program. +CMAKE_READELF:FILEPATH=/usr/bin/readelf + +//Flags used by the linker during the creation of shared libraries +// during all build types. +CMAKE_SHARED_LINKER_FLAGS:STRING= + +//Flags used by the linker during the creation of shared libraries +// during DEBUG builds. +CMAKE_SHARED_LINKER_FLAGS_DEBUG:STRING= + +//Flags used by the linker during the creation of shared libraries +// during MINSIZEREL builds. +CMAKE_SHARED_LINKER_FLAGS_MINSIZEREL:STRING= + +//Flags used by the linker during the creation of shared libraries +// during RELEASE builds. +CMAKE_SHARED_LINKER_FLAGS_RELEASE:STRING= + +//Flags used by the linker during the creation of shared libraries +// during RELWITHDEBINFO builds. +CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO:STRING= + +//If set, runtime paths are not added when installing shared libraries, +// but are added when building. +CMAKE_SKIP_INSTALL_RPATH:BOOL=NO + +//If set, runtime paths are not added when using shared libraries. +CMAKE_SKIP_RPATH:BOOL=NO + +//Flags used by the linker during the creation of static libraries +// during all build types. +CMAKE_STATIC_LINKER_FLAGS:STRING= + +//Flags used by the linker during the creation of static libraries +// during DEBUG builds. +CMAKE_STATIC_LINKER_FLAGS_DEBUG:STRING= + +//Flags used by the linker during the creation of static libraries +// during MINSIZEREL builds. +CMAKE_STATIC_LINKER_FLAGS_MINSIZEREL:STRING= + +//Flags used by the linker during the creation of static libraries +// during RELEASE builds. +CMAKE_STATIC_LINKER_FLAGS_RELEASE:STRING= + +//Flags used by the linker during the creation of static libraries +// during RELWITHDEBINFO builds. +CMAKE_STATIC_LINKER_FLAGS_RELWITHDEBINFO:STRING= + +//Path to a program. +CMAKE_STRIP:FILEPATH=/usr/bin/strip + +//Path to a program. +CMAKE_TAPI:FILEPATH=CMAKE_TAPI-NOTFOUND + +//No help, variable specified on the command line. +CMAKE_TOOLCHAIN_FILE:UNINITIALIZED=/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/cmake/Modules/Platform/Emscripten.cmake + +//If this value is on, makefiles will be generated without the +// .SILENT directive, and all commands will be echoed to the console +// during the make. This is useful for debugging only. With Visual +// Studio IDE projects all commands are done without /nologo. +CMAKE_VERBOSE_MAKEFILE:BOOL=FALSE + +//Force C/C++ compiler +EMSCRIPTEN_FORCE_COMPILERS:BOOL=OFF + +//If set, static library targets generate LLVM bitcode files (.bc). +// If disabled (default), UNIX ar archives (.a) are generated. +EMSCRIPTEN_GENERATE_BITCODE_STATIC_LIBRARIES:BOOL=OFF + +//Arguments to supply to pkg-config +PKG_CONFIG_ARGN:STRING= + +//pkg-config executable +PKG_CONFIG_EXECUTABLE:FILEPATH=/usr/bin/pkg-config + +//Value Computed by CMake +SDLApp_BINARY_DIR:STATIC=/home/romazan/Рабочий Ñтол/cproject/build-emcmake + +//Value Computed by CMake +SDLApp_IS_TOP_LEVEL:STATIC=ON + +//Value Computed by CMake +SDLApp_SOURCE_DIR:STATIC=/home/romazan/Рабочий Ñтол/cproject + + +######################## +# INTERNAL cache entries +######################## + +//ADVANCED property for variable: CMAKE_ADDR2LINE +CMAKE_ADDR2LINE-ADVANCED:INTERNAL=1 +//This is the directory where this CMakeCache.txt was created +CMAKE_CACHEFILE_DIR:INTERNAL=/home/romazan/Рабочий Ñтол/cproject/build-emcmake +//Major version of cmake used to create the current loaded cache +CMAKE_CACHE_MAJOR_VERSION:INTERNAL=3 +//Minor version of cmake used to create the current loaded cache +CMAKE_CACHE_MINOR_VERSION:INTERNAL=28 +//Patch version of cmake used to create the current loaded cache +CMAKE_CACHE_PATCH_VERSION:INTERNAL=3 +//ADVANCED property for variable: CMAKE_COLOR_MAKEFILE +CMAKE_COLOR_MAKEFILE-ADVANCED:INTERNAL=1 +//Path to CMake executable. +CMAKE_COMMAND:INTERNAL=/usr/bin/cmake +//Path to cpack program executable. +CMAKE_CPACK_COMMAND:INTERNAL=/usr/bin/cpack +//Path to ctest program executable. +CMAKE_CTEST_COMMAND:INTERNAL=/usr/bin/ctest +//ADVANCED property for variable: CMAKE_CXX_FLAGS +CMAKE_CXX_FLAGS-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_CXX_FLAGS_DEBUG +CMAKE_CXX_FLAGS_DEBUG-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_CXX_FLAGS_MINSIZEREL +CMAKE_CXX_FLAGS_MINSIZEREL-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_CXX_FLAGS_RELEASE +CMAKE_CXX_FLAGS_RELEASE-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_CXX_FLAGS_RELWITHDEBINFO +CMAKE_CXX_FLAGS_RELWITHDEBINFO-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_DLLTOOL +CMAKE_DLLTOOL-ADVANCED:INTERNAL=1 +//Executable file format +CMAKE_EXECUTABLE_FORMAT:INTERNAL=Unknown +//ADVANCED property for variable: CMAKE_EXE_LINKER_FLAGS +CMAKE_EXE_LINKER_FLAGS-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_EXE_LINKER_FLAGS_DEBUG +CMAKE_EXE_LINKER_FLAGS_DEBUG-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_EXE_LINKER_FLAGS_MINSIZEREL +CMAKE_EXE_LINKER_FLAGS_MINSIZEREL-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_EXE_LINKER_FLAGS_RELEASE +CMAKE_EXE_LINKER_FLAGS_RELEASE-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO +CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_EXPORT_COMPILE_COMMANDS +CMAKE_EXPORT_COMPILE_COMMANDS-ADVANCED:INTERNAL=1 +//Name of external makefile project generator. +CMAKE_EXTRA_GENERATOR:INTERNAL= +//Name of generator. +CMAKE_GENERATOR:INTERNAL=Unix Makefiles +//Generator instance identifier. +CMAKE_GENERATOR_INSTANCE:INTERNAL= +//Name of generator platform. +CMAKE_GENERATOR_PLATFORM:INTERNAL= +//Name of generator toolset. +CMAKE_GENERATOR_TOOLSET:INTERNAL= +//Test CMAKE_HAVE_LIBC_PTHREAD +CMAKE_HAVE_LIBC_PTHREAD:INTERNAL=1 +//Source directory with the top level CMakeLists.txt file for this +// project +CMAKE_HOME_DIRECTORY:INTERNAL=/home/romazan/Рабочий Ñтол/cproject +//ADVANCED property for variable: CMAKE_LINKER +CMAKE_LINKER-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_MAKE_PROGRAM +CMAKE_MAKE_PROGRAM-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_MODULE_LINKER_FLAGS +CMAKE_MODULE_LINKER_FLAGS-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_MODULE_LINKER_FLAGS_DEBUG +CMAKE_MODULE_LINKER_FLAGS_DEBUG-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_MODULE_LINKER_FLAGS_MINSIZEREL +CMAKE_MODULE_LINKER_FLAGS_MINSIZEREL-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_MODULE_LINKER_FLAGS_RELEASE +CMAKE_MODULE_LINKER_FLAGS_RELEASE-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_MODULE_LINKER_FLAGS_RELWITHDEBINFO +CMAKE_MODULE_LINKER_FLAGS_RELWITHDEBINFO-ADVANCED:INTERNAL=1 +//number of local generators +CMAKE_NUMBER_OF_MAKEFILES:INTERNAL=1 +//ADVANCED property for variable: CMAKE_OBJCOPY +CMAKE_OBJCOPY-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_OBJDUMP +CMAKE_OBJDUMP-ADVANCED:INTERNAL=1 +//Platform information initialized +CMAKE_PLATFORM_INFO_INITIALIZED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_READELF +CMAKE_READELF-ADVANCED:INTERNAL=1 +//Path to CMake installation. +CMAKE_ROOT:INTERNAL=/usr/share/cmake-3.28 +//ADVANCED property for variable: CMAKE_SHARED_LINKER_FLAGS +CMAKE_SHARED_LINKER_FLAGS-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_SHARED_LINKER_FLAGS_DEBUG +CMAKE_SHARED_LINKER_FLAGS_DEBUG-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_SHARED_LINKER_FLAGS_MINSIZEREL +CMAKE_SHARED_LINKER_FLAGS_MINSIZEREL-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_SHARED_LINKER_FLAGS_RELEASE +CMAKE_SHARED_LINKER_FLAGS_RELEASE-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO +CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_SKIP_INSTALL_RPATH +CMAKE_SKIP_INSTALL_RPATH-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_SKIP_RPATH +CMAKE_SKIP_RPATH-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_STATIC_LINKER_FLAGS +CMAKE_STATIC_LINKER_FLAGS-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_STATIC_LINKER_FLAGS_DEBUG +CMAKE_STATIC_LINKER_FLAGS_DEBUG-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_STATIC_LINKER_FLAGS_MINSIZEREL +CMAKE_STATIC_LINKER_FLAGS_MINSIZEREL-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_STATIC_LINKER_FLAGS_RELEASE +CMAKE_STATIC_LINKER_FLAGS_RELEASE-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_STATIC_LINKER_FLAGS_RELWITHDEBINFO +CMAKE_STATIC_LINKER_FLAGS_RELWITHDEBINFO-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_STRIP +CMAKE_STRIP-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_TAPI +CMAKE_TAPI-ADVANCED:INTERNAL=1 +//uname command +CMAKE_UNAME:INTERNAL=/usr/bin/uname +//ADVANCED property for variable: CMAKE_VERBOSE_MAKEFILE +CMAKE_VERBOSE_MAKEFILE-ADVANCED:INTERNAL=1 +//If true, we are targeting Emscripten output. +EMSCRIPTEN:INTERNAL=1 +//Details about finding PkgConfig +FIND_PACKAGE_MESSAGE_DETAILS_PkgConfig:INTERNAL=[/usr/bin/pkg-config][v1.8.1()] +//Details about finding Threads +FIND_PACKAGE_MESSAGE_DETAILS_Threads:INTERNAL=[TRUE][v()] +//ADVANCED property for variable: PKG_CONFIG_ARGN +PKG_CONFIG_ARGN-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: PKG_CONFIG_EXECUTABLE +PKG_CONFIG_EXECUTABLE-ADVANCED:INTERNAL=1 +SDL2_CFLAGS:INTERNAL= +SDL2_CFLAGS_I:INTERNAL= +SDL2_CFLAGS_OTHER:INTERNAL= +SDL2_FOUND:INTERNAL= +SDL2_INCLUDEDIR:INTERNAL= +SDL2_LIBDIR:INTERNAL= +SDL2_LIBS:INTERNAL= +SDL2_LIBS_L:INTERNAL= +SDL2_LIBS_OTHER:INTERNAL= +SDL2_LIBS_PATHS:INTERNAL= +SDL2_MODULE_NAME:INTERNAL= +SDL2_PREFIX:INTERNAL= +SDL2_STATIC_CFLAGS:INTERNAL= +SDL2_STATIC_CFLAGS_I:INTERNAL= +SDL2_STATIC_CFLAGS_OTHER:INTERNAL= +SDL2_STATIC_LIBDIR:INTERNAL= +SDL2_STATIC_LIBS:INTERNAL= +SDL2_STATIC_LIBS_L:INTERNAL= +SDL2_STATIC_LIBS_OTHER:INTERNAL= +SDL2_STATIC_LIBS_PATHS:INTERNAL= +SDL2_VERSION:INTERNAL= +SDL2_sdl2_INCLUDEDIR:INTERNAL= +SDL2_sdl2_LIBDIR:INTERNAL= +SDL2_sdl2_PREFIX:INTERNAL= +SDL2_sdl2_VERSION:INTERNAL= + diff --git a/build-emcmake/CMakeFiles/3.28.3/CMakeCXXCompiler.cmake b/build-emcmake/CMakeFiles/3.28.3/CMakeCXXCompiler.cmake new file mode 100644 index 0000000..75f37a1 --- /dev/null +++ b/build-emcmake/CMakeFiles/3.28.3/CMakeCXXCompiler.cmake @@ -0,0 +1,85 @@ +set(CMAKE_CXX_COMPILER "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/em++") +set(CMAKE_CXX_COMPILER_ARG1 "") +set(CMAKE_CXX_COMPILER_ID "Clang") +set(CMAKE_CXX_COMPILER_VERSION "21.0.0") +set(CMAKE_CXX_COMPILER_VERSION_INTERNAL "") +set(CMAKE_CXX_COMPILER_WRAPPER "") +set(CMAKE_CXX_STANDARD_COMPUTED_DEFAULT "17") +set(CMAKE_CXX_EXTENSIONS_COMPUTED_DEFAULT "ON") +set(CMAKE_CXX_COMPILE_FEATURES "cxx_std_98;cxx_template_template_parameters;cxx_std_11;cxx_alias_templates;cxx_alignas;cxx_alignof;cxx_attributes;cxx_auto_type;cxx_constexpr;cxx_decltype;cxx_decltype_incomplete_return_types;cxx_default_function_template_args;cxx_defaulted_functions;cxx_defaulted_move_initializers;cxx_delegating_constructors;cxx_deleted_functions;cxx_enum_forward_declarations;cxx_explicit_conversions;cxx_extended_friend_declarations;cxx_extern_templates;cxx_final;cxx_func_identifier;cxx_generalized_initializers;cxx_inheriting_constructors;cxx_inline_namespaces;cxx_lambdas;cxx_local_type_template_args;cxx_long_long_type;cxx_noexcept;cxx_nonstatic_member_init;cxx_nullptr;cxx_override;cxx_range_for;cxx_raw_string_literals;cxx_reference_qualified_functions;cxx_right_angle_brackets;cxx_rvalue_references;cxx_sizeof_member;cxx_static_assert;cxx_strong_enums;cxx_thread_local;cxx_trailing_return_types;cxx_unicode_literals;cxx_uniform_initialization;cxx_unrestricted_unions;cxx_user_literals;cxx_variadic_macros;cxx_variadic_templates;cxx_std_14;cxx_aggregate_default_initializers;cxx_attribute_deprecated;cxx_binary_literals;cxx_contextual_conversions;cxx_decltype_auto;cxx_digit_separators;cxx_generic_lambdas;cxx_lambda_init_captures;cxx_relaxed_constexpr;cxx_return_type_deduction;cxx_variable_templates;cxx_std_17;cxx_std_20;cxx_std_23") +set(CMAKE_CXX98_COMPILE_FEATURES "cxx_std_98;cxx_template_template_parameters") +set(CMAKE_CXX11_COMPILE_FEATURES "cxx_std_11;cxx_alias_templates;cxx_alignas;cxx_alignof;cxx_attributes;cxx_auto_type;cxx_constexpr;cxx_decltype;cxx_decltype_incomplete_return_types;cxx_default_function_template_args;cxx_defaulted_functions;cxx_defaulted_move_initializers;cxx_delegating_constructors;cxx_deleted_functions;cxx_enum_forward_declarations;cxx_explicit_conversions;cxx_extended_friend_declarations;cxx_extern_templates;cxx_final;cxx_func_identifier;cxx_generalized_initializers;cxx_inheriting_constructors;cxx_inline_namespaces;cxx_lambdas;cxx_local_type_template_args;cxx_long_long_type;cxx_noexcept;cxx_nonstatic_member_init;cxx_nullptr;cxx_override;cxx_range_for;cxx_raw_string_literals;cxx_reference_qualified_functions;cxx_right_angle_brackets;cxx_rvalue_references;cxx_sizeof_member;cxx_static_assert;cxx_strong_enums;cxx_thread_local;cxx_trailing_return_types;cxx_unicode_literals;cxx_uniform_initialization;cxx_unrestricted_unions;cxx_user_literals;cxx_variadic_macros;cxx_variadic_templates") +set(CMAKE_CXX14_COMPILE_FEATURES "cxx_std_14;cxx_aggregate_default_initializers;cxx_attribute_deprecated;cxx_binary_literals;cxx_contextual_conversions;cxx_decltype_auto;cxx_digit_separators;cxx_generic_lambdas;cxx_lambda_init_captures;cxx_relaxed_constexpr;cxx_return_type_deduction;cxx_variable_templates") +set(CMAKE_CXX17_COMPILE_FEATURES "cxx_std_17") +set(CMAKE_CXX20_COMPILE_FEATURES "cxx_std_20") +set(CMAKE_CXX23_COMPILE_FEATURES "cxx_std_23") + +set(CMAKE_CXX_PLATFORM_ID "") +set(CMAKE_CXX_SIMULATE_ID "") +set(CMAKE_CXX_COMPILER_FRONTEND_VARIANT "GNU") +set(CMAKE_CXX_SIMULATE_VERSION "") + + + + +set(CMAKE_AR "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emar") +set(CMAKE_CXX_COMPILER_AR "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emar") +set(CMAKE_RANLIB "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emranlib") +set(CMAKE_CXX_COMPILER_RANLIB "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emranlib") +set(CMAKE_LINKER "/usr/bin/ld") +set(CMAKE_MT "") +set(CMAKE_TAPI "CMAKE_TAPI-NOTFOUND") +set(CMAKE_COMPILER_IS_GNUCXX ) +set(CMAKE_CXX_COMPILER_LOADED 1) +set(CMAKE_CXX_COMPILER_WORKS TRUE) +set(CMAKE_CXX_ABI_COMPILED TRUE) + +set(CMAKE_CXX_COMPILER_ENV_VAR "CXX") + +set(CMAKE_CXX_COMPILER_ID_RUN 1) +set(CMAKE_CXX_SOURCE_FILE_EXTENSIONS C;M;c++;cc;cpp;cxx;m;mm;mpp;CPP;ixx;cppm;ccm;cxxm;c++m) +set(CMAKE_CXX_IGNORE_EXTENSIONS inl;h;hpp;HPP;H;o;O;obj;OBJ;def;DEF;rc;RC) + +foreach (lang C OBJC OBJCXX) + if (CMAKE_${lang}_COMPILER_ID_RUN) + foreach(extension IN LISTS CMAKE_${lang}_SOURCE_FILE_EXTENSIONS) + list(REMOVE_ITEM CMAKE_CXX_SOURCE_FILE_EXTENSIONS ${extension}) + endforeach() + endif() +endforeach() + +set(CMAKE_CXX_LINKER_PREFERENCE 30) +set(CMAKE_CXX_LINKER_PREFERENCE_PROPAGATES 1) +set(CMAKE_CXX_LINKER_DEPFILE_SUPPORTED FALSE) + +# Save compiler ABI information. +set(CMAKE_CXX_SIZEOF_DATA_PTR "4") +set(CMAKE_CXX_COMPILER_ABI "") +set(CMAKE_CXX_BYTE_ORDER "LITTLE_ENDIAN") +set(CMAKE_CXX_LIBRARY_ARCHITECTURE "") + +if(CMAKE_CXX_SIZEOF_DATA_PTR) + set(CMAKE_SIZEOF_VOID_P "${CMAKE_CXX_SIZEOF_DATA_PTR}") +endif() + +if(CMAKE_CXX_COMPILER_ABI) + set(CMAKE_INTERNAL_PLATFORM_ABI "${CMAKE_CXX_COMPILER_ABI}") +endif() + +if(CMAKE_CXX_LIBRARY_ARCHITECTURE) + set(CMAKE_LIBRARY_ARCHITECTURE "") +endif() + +set(CMAKE_CXX_CL_SHOWINCLUDES_PREFIX "") +if(CMAKE_CXX_CL_SHOWINCLUDES_PREFIX) + set(CMAKE_CL_SHOWINCLUDES_PREFIX "${CMAKE_CXX_CL_SHOWINCLUDES_PREFIX}") +endif() + + + + + +set(CMAKE_CXX_IMPLICIT_INCLUDE_DIRECTORIES "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/fakesdl;/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat;/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/c++/v1;/home/romazan/Рабочий Ñтол/emsdk/upstream/lib/clang/21/include;/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/cache/sysroot/include") +set(CMAKE_CXX_IMPLICIT_LINK_LIBRARIES "GL-getprocaddr;al;html5;stubs-debug;noexit;c-debug;dlmalloc-debug;compiler_rt;c++-noexcept;c++abi-debug-noexcept;sockets") +set(CMAKE_CXX_IMPLICIT_LINK_DIRECTORIES "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/cache/sysroot/lib/wasm32-emscripten;/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/src/lib") +set(CMAKE_CXX_IMPLICIT_LINK_FRAMEWORK_DIRECTORIES "") diff --git a/build-emcmake/CMakeFiles/3.28.3/CMakeDetermineCompilerABI_CXX.bin b/build-emcmake/CMakeFiles/3.28.3/CMakeDetermineCompilerABI_CXX.bin new file mode 100644 index 0000000..681c9b7 --- /dev/null +++ b/build-emcmake/CMakeFiles/3.28.3/CMakeDetermineCompilerABI_CXX.bin @@ -0,0 +1,1521 @@ +// include: shell.js +// The Module object: Our interface to the outside world. We import +// and export values on it. There are various ways Module can be used: +// 1. Not defined. We create it here +// 2. A function parameter, function(moduleArg) => Promise +// 3. pre-run appended it, var Module = {}; ..generated code.. +// 4. External script tag defines var Module. +// We need to check if Module already exists (e.g. case 3 above). +// Substitution will be replaced with actual code on later stage of the build, +// this way Closure Compiler will not mangle it (e.g. case 4. above). +// Note that if you want to run closure, and also to use Module +// after the generated code, you will need to define var Module = {}; +// before the code. Then that object will be used in the code, and you +// can continue to use Module afterwards as well. +var Module = typeof Module != 'undefined' ? Module : {}; + +// Determine the runtime environment we are in. You can customize this by +// setting the ENVIRONMENT setting at compile time (see settings.js). + +// Attempt to auto-detect the environment +var ENVIRONMENT_IS_WEB = typeof window == 'object'; +var ENVIRONMENT_IS_WORKER = typeof WorkerGlobalScope != 'undefined'; +// N.b. Electron.js environment is simultaneously a NODE-environment, but +// also a web environment. +var ENVIRONMENT_IS_NODE = typeof process == 'object' && typeof process.versions == 'object' && typeof process.versions.node == 'string' && process.type != 'renderer'; +var ENVIRONMENT_IS_SHELL = !ENVIRONMENT_IS_WEB && !ENVIRONMENT_IS_NODE && !ENVIRONMENT_IS_WORKER; + +if (ENVIRONMENT_IS_NODE) { + +} + +// --pre-jses are emitted after the Module integration code, so that they can +// refer to Module (if they choose; they can also define Module) + + +// Sometimes an existing Module object exists with properties +// meant to overwrite the default module functionality. Here +// we collect those properties and reapply _after_ we configure +// the current environment's defaults to avoid having to be so +// defensive during initialization. +var moduleOverrides = {...Module}; + +var arguments_ = []; +var thisProgram = './this.program'; +var quit_ = (status, toThrow) => { + throw toThrow; +}; + +// `/` should be present at the end if `scriptDirectory` is not empty +var scriptDirectory = ''; +function locateFile(path) { + if (Module['locateFile']) { + return Module['locateFile'](path, scriptDirectory); + } + return scriptDirectory + path; +} + +// Hooks that are implemented differently in different runtime environments. +var readAsync, readBinary; + +if (ENVIRONMENT_IS_NODE) { + if (typeof process == 'undefined' || !process.release || process.release.name !== 'node') throw new Error('not compiled for this environment (did you build to HTML and try to run it not on the web, or set ENVIRONMENT to something - like node - and run it someplace else - like on the web?)'); + + var nodeVersion = process.versions.node; + var numericVersion = nodeVersion.split('.').slice(0, 3); + numericVersion = (numericVersion[0] * 10000) + (numericVersion[1] * 100) + (numericVersion[2].split('-')[0] * 1); + var minVersion = 160000; + if (numericVersion < 160000) { + throw new Error('This emscripten-generated code requires node v16.0.0 (detected v' + nodeVersion + ')'); + } + + // These modules will usually be used on Node.js. Load them eagerly to avoid + // the complexity of lazy-loading. + var fs = require('fs'); + var nodePath = require('path'); + + scriptDirectory = __dirname + '/'; + +// include: node_shell_read.js +readBinary = (filename) => { + // We need to re-wrap `file://` strings to URLs. + filename = isFileURI(filename) ? new URL(filename) : filename; + var ret = fs.readFileSync(filename); + assert(Buffer.isBuffer(ret)); + return ret; +}; + +readAsync = async (filename, binary = true) => { + // See the comment in the `readBinary` function. + filename = isFileURI(filename) ? new URL(filename) : filename; + var ret = fs.readFileSync(filename, binary ? undefined : 'utf8'); + assert(binary ? Buffer.isBuffer(ret) : typeof ret == 'string'); + return ret; +}; +// end include: node_shell_read.js + if (!Module['thisProgram'] && process.argv.length > 1) { + thisProgram = process.argv[1].replace(/\\/g, '/'); + } + + arguments_ = process.argv.slice(2); + + if (typeof module != 'undefined') { + module['exports'] = Module; + } + + quit_ = (status, toThrow) => { + process.exitCode = status; + throw toThrow; + }; + +} else +if (ENVIRONMENT_IS_SHELL) { + + if ((typeof process == 'object' && typeof require === 'function') || typeof window == 'object' || typeof WorkerGlobalScope != 'undefined') throw new Error('not compiled for this environment (did you build to HTML and try to run it not on the web, or set ENVIRONMENT to something - like node - and run it someplace else - like on the web?)'); + +} else + +// Note that this includes Node.js workers when relevant (pthreads is enabled). +// Node.js workers are detected as a combination of ENVIRONMENT_IS_WORKER and +// ENVIRONMENT_IS_NODE. +if (ENVIRONMENT_IS_WEB || ENVIRONMENT_IS_WORKER) { + if (ENVIRONMENT_IS_WORKER) { // Check worker, not web, since window could be polyfilled + scriptDirectory = self.location.href; + } else if (typeof document != 'undefined' && document.currentScript) { // web + scriptDirectory = document.currentScript.src; + } + // blob urls look like blob:http://site.com/etc/etc and we cannot infer anything from them. + // otherwise, slice off the final part of the url to find the script directory. + // if scriptDirectory does not contain a slash, lastIndexOf will return -1, + // and scriptDirectory will correctly be replaced with an empty string. + // If scriptDirectory contains a query (starting with ?) or a fragment (starting with #), + // they are removed because they could contain a slash. + if (scriptDirectory.startsWith('blob:')) { + scriptDirectory = ''; + } else { + scriptDirectory = scriptDirectory.slice(0, scriptDirectory.replace(/[?#].*/, '').lastIndexOf('/')+1); + } + + if (!(typeof window == 'object' || typeof WorkerGlobalScope != 'undefined')) throw new Error('not compiled for this environment (did you build to HTML and try to run it not on the web, or set ENVIRONMENT to something - like node - and run it someplace else - like on the web?)'); + + { +// include: web_or_worker_shell_read.js +if (ENVIRONMENT_IS_WORKER) { + readBinary = (url) => { + var xhr = new XMLHttpRequest(); + xhr.open('GET', url, false); + xhr.responseType = 'arraybuffer'; + xhr.send(null); + return new Uint8Array(/** @type{!ArrayBuffer} */(xhr.response)); + }; + } + + readAsync = async (url) => { + // Fetch has some additional restrictions over XHR, like it can't be used on a file:// url. + // See https://github.com/github/fetch/pull/92#issuecomment-140665932 + // Cordova or Electron apps are typically loaded from a file:// url. + // So use XHR on webview if URL is a file URL. + if (isFileURI(url)) { + return new Promise((resolve, reject) => { + var xhr = new XMLHttpRequest(); + xhr.open('GET', url, true); + xhr.responseType = 'arraybuffer'; + xhr.onload = () => { + if (xhr.status == 200 || (xhr.status == 0 && xhr.response)) { // file URLs can return 0 + resolve(xhr.response); + return; + } + reject(xhr.status); + }; + xhr.onerror = reject; + xhr.send(null); + }); + } + var response = await fetch(url, { credentials: 'same-origin' }); + if (response.ok) { + return response.arrayBuffer(); + } + throw new Error(response.status + ' : ' + response.url); + }; +// end include: web_or_worker_shell_read.js + } +} else +{ + throw new Error('environment detection error'); +} + +var out = Module['print'] || console.log.bind(console); +var err = Module['printErr'] || console.error.bind(console); + +// Merge back in the overrides +Object.assign(Module, moduleOverrides); +// Free the object hierarchy contained in the overrides, this lets the GC +// reclaim data used. +moduleOverrides = null; +checkIncomingModuleAPI(); + +// Emit code to handle expected values on the Module object. This applies Module.x +// to the proper local x. This has two benefits: first, we only emit it if it is +// expected to arrive, and second, by using a local everywhere else that can be +// minified. + +if (Module['arguments']) arguments_ = Module['arguments'];legacyModuleProp('arguments', 'arguments_'); + +if (Module['thisProgram']) thisProgram = Module['thisProgram'];legacyModuleProp('thisProgram', 'thisProgram'); + +// perform assertions in shell.js after we set up out() and err(), as otherwise if an assertion fails it cannot print the message +// Assertions on removed incoming Module JS APIs. +assert(typeof Module['memoryInitializerPrefixURL'] == 'undefined', 'Module.memoryInitializerPrefixURL option was removed, use Module.locateFile instead'); +assert(typeof Module['pthreadMainPrefixURL'] == 'undefined', 'Module.pthreadMainPrefixURL option was removed, use Module.locateFile instead'); +assert(typeof Module['cdInitializerPrefixURL'] == 'undefined', 'Module.cdInitializerPrefixURL option was removed, use Module.locateFile instead'); +assert(typeof Module['filePackagePrefixURL'] == 'undefined', 'Module.filePackagePrefixURL option was removed, use Module.locateFile instead'); +assert(typeof Module['read'] == 'undefined', 'Module.read option was removed'); +assert(typeof Module['readAsync'] == 'undefined', 'Module.readAsync option was removed (modify readAsync in JS)'); +assert(typeof Module['readBinary'] == 'undefined', 'Module.readBinary option was removed (modify readBinary in JS)'); +assert(typeof Module['setWindowTitle'] == 'undefined', 'Module.setWindowTitle option was removed (modify emscripten_set_window_title in JS)'); +assert(typeof Module['TOTAL_MEMORY'] == 'undefined', 'Module.TOTAL_MEMORY has been renamed Module.INITIAL_MEMORY'); +legacyModuleProp('asm', 'wasmExports'); +legacyModuleProp('readAsync', 'readAsync'); +legacyModuleProp('readBinary', 'readBinary'); +legacyModuleProp('setWindowTitle', 'setWindowTitle'); +var IDBFS = 'IDBFS is no longer included by default; build with -lidbfs.js'; +var PROXYFS = 'PROXYFS is no longer included by default; build with -lproxyfs.js'; +var WORKERFS = 'WORKERFS is no longer included by default; build with -lworkerfs.js'; +var FETCHFS = 'FETCHFS is no longer included by default; build with -lfetchfs.js'; +var ICASEFS = 'ICASEFS is no longer included by default; build with -licasefs.js'; +var JSFILEFS = 'JSFILEFS is no longer included by default; build with -ljsfilefs.js'; +var OPFS = 'OPFS is no longer included by default; build with -lopfs.js'; + +var NODEFS = 'NODEFS is no longer included by default; build with -lnodefs.js'; + +assert(!ENVIRONMENT_IS_SHELL, 'shell environment detected but not enabled at build time. Add `shell` to `-sENVIRONMENT` to enable.'); + +// end include: shell.js + +// include: preamble.js +// === Preamble library stuff === + +// Documentation for the public APIs defined in this file must be updated in: +// site/source/docs/api_reference/preamble.js.rst +// A prebuilt local version of the documentation is available at: +// site/build/text/docs/api_reference/preamble.js.txt +// You can also build docs locally as HTML or other formats in site/ +// An online HTML version (which may be of a different version of Emscripten) +// is up at http://kripken.github.io/emscripten-site/docs/api_reference/preamble.js.html + +var wasmBinary = Module['wasmBinary'];legacyModuleProp('wasmBinary', 'wasmBinary'); + +if (typeof WebAssembly != 'object') { + err('no native wasm support detected'); +} + +// Wasm globals + +var wasmMemory; + +//======================================== +// Runtime essentials +//======================================== + +// whether we are quitting the application. no code should run after this. +// set in exit() and abort() +var ABORT = false; + +// set by exit() and abort(). Passed to 'onExit' handler. +// NOTE: This is also used as the process return code code in shell environments +// but only when noExitRuntime is false. +var EXITSTATUS; + +// In STRICT mode, we only define assert() when ASSERTIONS is set. i.e. we +// don't define it at all in release modes. This matches the behaviour of +// MINIMAL_RUNTIME. +// TODO(sbc): Make this the default even without STRICT enabled. +/** @type {function(*, string=)} */ +function assert(condition, text) { + if (!condition) { + abort('Assertion failed' + (text ? ': ' + text : '')); + } +} + +// We used to include malloc/free by default in the past. Show a helpful error in +// builds with assertions. +function _malloc() { + abort('malloc() called but not included in the build - add `_malloc` to EXPORTED_FUNCTIONS'); +} +function _free() { + // Show a helpful error since we used to include free by default in the past. + abort('free() called but not included in the build - add `_free` to EXPORTED_FUNCTIONS'); +} + +// Memory management + +var HEAP, +/** @type {!Int8Array} */ + HEAP8, +/** @type {!Uint8Array} */ + HEAPU8, +/** @type {!Int16Array} */ + HEAP16, +/** @type {!Uint16Array} */ + HEAPU16, +/** @type {!Int32Array} */ + HEAP32, +/** @type {!Uint32Array} */ + HEAPU32, +/** @type {!Float32Array} */ + HEAPF32, +/* BigInt64Array type is not correctly defined in closure +/** not-@type {!BigInt64Array} */ + HEAP64, +/* BigUint64Array type is not correctly defined in closure +/** not-t@type {!BigUint64Array} */ + HEAPU64, +/** @type {!Float64Array} */ + HEAPF64; + +var runtimeInitialized = false; + +/** + * Indicates whether filename is delivered via file protocol (as opposed to http/https) + * @noinline + */ +var isFileURI = (filename) => filename.startsWith('file://'); + +// include: runtime_shared.js +// include: runtime_stack_check.js +// Initializes the stack cookie. Called at the startup of main and at the startup of each thread in pthreads mode. +function writeStackCookie() { + var max = _emscripten_stack_get_end(); + assert((max & 3) == 0); + // If the stack ends at address zero we write our cookies 4 bytes into the + // stack. This prevents interference with SAFE_HEAP and ASAN which also + // monitor writes to address zero. + if (max == 0) { + max += 4; + } + // The stack grow downwards towards _emscripten_stack_get_end. + // We write cookies to the final two words in the stack and detect if they are + // ever overwritten. + HEAPU32[((max)>>2)] = 0x02135467; + HEAPU32[(((max)+(4))>>2)] = 0x89BACDFE; + // Also test the global address 0 for integrity. + HEAPU32[((0)>>2)] = 1668509029; +} + +function checkStackCookie() { + if (ABORT) return; + var max = _emscripten_stack_get_end(); + // See writeStackCookie(). + if (max == 0) { + max += 4; + } + var cookie1 = HEAPU32[((max)>>2)]; + var cookie2 = HEAPU32[(((max)+(4))>>2)]; + if (cookie1 != 0x02135467 || cookie2 != 0x89BACDFE) { + abort(`Stack overflow! Stack cookie has been overwritten at ${ptrToString(max)}, expected hex dwords 0x89BACDFE and 0x2135467, but received ${ptrToString(cookie2)} ${ptrToString(cookie1)}`); + } + // Also test the global address 0 for integrity. + if (HEAPU32[((0)>>2)] != 0x63736d65 /* 'emsc' */) { + abort('Runtime error: The application has corrupted its heap memory area (address zero)!'); + } +} +// end include: runtime_stack_check.js +// include: runtime_exceptions.js +// end include: runtime_exceptions.js +// include: runtime_debug.js +// Endianness check +(() => { + var h16 = new Int16Array(1); + var h8 = new Int8Array(h16.buffer); + h16[0] = 0x6373; + if (h8[0] !== 0x73 || h8[1] !== 0x63) throw 'Runtime error: expected the system to be little-endian! (Run with -sSUPPORT_BIG_ENDIAN to bypass)'; +})(); + +if (Module['ENVIRONMENT']) { + throw new Error('Module.ENVIRONMENT has been deprecated. To force the environment, use the ENVIRONMENT compile-time option (for example, -sENVIRONMENT=web or -sENVIRONMENT=node)'); +} + +function legacyModuleProp(prop, newName, incoming=true) { + if (!Object.getOwnPropertyDescriptor(Module, prop)) { + Object.defineProperty(Module, prop, { + configurable: true, + get() { + let extra = incoming ? ' (the initial value can be provided on Module, but after startup the value is only looked for on a local variable of that name)' : ''; + abort(`\`Module.${prop}\` has been replaced by \`${newName}\`` + extra); + + } + }); + } +} + +function consumedModuleProp(prop) { + if (!Object.getOwnPropertyDescriptor(Module, prop)) { + Object.defineProperty(Module, prop, { + configurable: true, + set() { + abort(`Attempt to set \`Module.${prop}\` after it has already been processed. This can happen, for example, when code is injected via '--post-js' rather than '--pre-js'`); + + } + }); + } +} + +function ignoredModuleProp(prop) { + if (Object.getOwnPropertyDescriptor(Module, prop)) { + abort(`\`Module.${prop}\` was supplied but \`${prop}\` not included in INCOMING_MODULE_JS_API`); + } +} + +// forcing the filesystem exports a few things by default +function isExportedByForceFilesystem(name) { + return name === 'FS_createPath' || + name === 'FS_createDataFile' || + name === 'FS_createPreloadedFile' || + name === 'FS_unlink' || + name === 'addRunDependency' || + // The old FS has some functionality that WasmFS lacks. + name === 'FS_createLazyFile' || + name === 'FS_createDevice' || + name === 'removeRunDependency'; +} + +/** + * Intercept access to a global symbol. This enables us to give informative + * warnings/errors when folks attempt to use symbols they did not include in + * their build, or no symbols that no longer exist. + */ +function hookGlobalSymbolAccess(sym, func) { + if (typeof globalThis != 'undefined' && !Object.getOwnPropertyDescriptor(globalThis, sym)) { + Object.defineProperty(globalThis, sym, { + configurable: true, + get() { + func(); + return undefined; + } + }); + } +} + +function missingGlobal(sym, msg) { + hookGlobalSymbolAccess(sym, () => { + warnOnce(`\`${sym}\` is not longer defined by emscripten. ${msg}`); + }); +} + +missingGlobal('buffer', 'Please use HEAP8.buffer or wasmMemory.buffer'); +missingGlobal('asm', 'Please use wasmExports instead'); + +function missingLibrarySymbol(sym) { + hookGlobalSymbolAccess(sym, () => { + // Can't `abort()` here because it would break code that does runtime + // checks. e.g. `if (typeof SDL === 'undefined')`. + var msg = `\`${sym}\` is a library symbol and not included by default; add it to your library.js __deps or to DEFAULT_LIBRARY_FUNCS_TO_INCLUDE on the command line`; + // DEFAULT_LIBRARY_FUNCS_TO_INCLUDE requires the name as it appears in + // library.js, which means $name for a JS name with no prefix, or name + // for a JS name like _name. + var librarySymbol = sym; + if (!librarySymbol.startsWith('_')) { + librarySymbol = '$' + sym; + } + msg += ` (e.g. -sDEFAULT_LIBRARY_FUNCS_TO_INCLUDE='${librarySymbol}')`; + if (isExportedByForceFilesystem(sym)) { + msg += '. Alternatively, forcing filesystem support (-sFORCE_FILESYSTEM) can export this for you'; + } + warnOnce(msg); + }); + + // Any symbol that is not included from the JS library is also (by definition) + // not exported on the Module object. + unexportedRuntimeSymbol(sym); +} + +function unexportedRuntimeSymbol(sym) { + if (!Object.getOwnPropertyDescriptor(Module, sym)) { + Object.defineProperty(Module, sym, { + configurable: true, + get() { + var msg = `'${sym}' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the Emscripten FAQ)`; + if (isExportedByForceFilesystem(sym)) { + msg += '. Alternatively, forcing filesystem support (-sFORCE_FILESYSTEM) can export this for you'; + } + abort(msg); + } + }); + } +} + +var runtimeDebug = true; // Switch to false at runtime to disable logging at the right times + +// Used by XXXXX_DEBUG settings to output debug messages. +function dbg(...args) { + if (!runtimeDebug && typeof runtimeDebug != 'undefined') return; + // TODO(sbc): Make this configurable somehow. Its not always convenient for + // logging to show up as warnings. + console.warn(...args); +} +// end include: runtime_debug.js +// include: memoryprofiler.js +// end include: memoryprofiler.js + + +function updateMemoryViews() { + var b = wasmMemory.buffer; + Module['HEAP8'] = HEAP8 = new Int8Array(b); + Module['HEAP16'] = HEAP16 = new Int16Array(b); + Module['HEAPU8'] = HEAPU8 = new Uint8Array(b); + Module['HEAPU16'] = HEAPU16 = new Uint16Array(b); + Module['HEAP32'] = HEAP32 = new Int32Array(b); + Module['HEAPU32'] = HEAPU32 = new Uint32Array(b); + Module['HEAPF32'] = HEAPF32 = new Float32Array(b); + Module['HEAPF64'] = HEAPF64 = new Float64Array(b); + Module['HEAP64'] = HEAP64 = new BigInt64Array(b); + Module['HEAPU64'] = HEAPU64 = new BigUint64Array(b); +} + +// end include: runtime_shared.js +assert(!Module['STACK_SIZE'], 'STACK_SIZE can no longer be set at runtime. Use -sSTACK_SIZE at link time') + +assert(typeof Int32Array != 'undefined' && typeof Float64Array !== 'undefined' && Int32Array.prototype.subarray != undefined && Int32Array.prototype.set != undefined, + 'JS engine does not provide full typed array support'); + +// If memory is defined in wasm, the user can't provide it, or set INITIAL_MEMORY +assert(!Module['wasmMemory'], 'Use of `wasmMemory` detected. Use -sIMPORTED_MEMORY to define wasmMemory externally'); +assert(!Module['INITIAL_MEMORY'], 'Detected runtime INITIAL_MEMORY setting. Use -sIMPORTED_MEMORY to define wasmMemory dynamically'); + +function preRun() { + if (Module['preRun']) { + if (typeof Module['preRun'] == 'function') Module['preRun'] = [Module['preRun']]; + while (Module['preRun'].length) { + addOnPreRun(Module['preRun'].shift()); + } + } + consumedModuleProp('preRun'); + callRuntimeCallbacks(onPreRuns); +} + +function initRuntime() { + assert(!runtimeInitialized); + runtimeInitialized = true; + + checkStackCookie(); + + + + wasmExports['__wasm_call_ctors'](); + + +} + +function preMain() { + checkStackCookie(); + +} + +function postRun() { + checkStackCookie(); + + if (Module['postRun']) { + if (typeof Module['postRun'] == 'function') Module['postRun'] = [Module['postRun']]; + while (Module['postRun'].length) { + addOnPostRun(Module['postRun'].shift()); + } + } + consumedModuleProp('postRun'); + + callRuntimeCallbacks(onPostRuns); +} + +// A counter of dependencies for calling run(). If we need to +// do asynchronous work before running, increment this and +// decrement it. Incrementing must happen in a place like +// Module.preRun (used by emcc to add file preloading). +// Note that you can add dependencies in preRun, even though +// it happens right before run - run will be postponed until +// the dependencies are met. +var runDependencies = 0; +var dependenciesFulfilled = null; // overridden to take different actions when all run dependencies are fulfilled +var runDependencyTracking = {}; +var runDependencyWatcher = null; + +function getUniqueRunDependency(id) { + var orig = id; + while (1) { + if (!runDependencyTracking[id]) return id; + id = orig + Math.random(); + } +} + +function addRunDependency(id) { + runDependencies++; + + Module['monitorRunDependencies']?.(runDependencies); + + if (id) { + assert(!runDependencyTracking[id]); + runDependencyTracking[id] = 1; + if (runDependencyWatcher === null && typeof setInterval != 'undefined') { + // Check for missing dependencies every few seconds + runDependencyWatcher = setInterval(() => { + if (ABORT) { + clearInterval(runDependencyWatcher); + runDependencyWatcher = null; + return; + } + var shown = false; + for (var dep in runDependencyTracking) { + if (!shown) { + shown = true; + err('still waiting on run dependencies:'); + } + err(`dependency: ${dep}`); + } + if (shown) { + err('(end of list)'); + } + }, 10000); + } + } else { + err('warning: run dependency added without ID'); + } +} + +function removeRunDependency(id) { + runDependencies--; + + Module['monitorRunDependencies']?.(runDependencies); + + if (id) { + assert(runDependencyTracking[id]); + delete runDependencyTracking[id]; + } else { + err('warning: run dependency removed without ID'); + } + if (runDependencies == 0) { + if (runDependencyWatcher !== null) { + clearInterval(runDependencyWatcher); + runDependencyWatcher = null; + } + if (dependenciesFulfilled) { + var callback = dependenciesFulfilled; + dependenciesFulfilled = null; + callback(); // can add another dependenciesFulfilled + } + } +} + +/** @param {string|number=} what */ +function abort(what) { + Module['onAbort']?.(what); + + what = 'Aborted(' + what + ')'; + // TODO(sbc): Should we remove printing and leave it up to whoever + // catches the exception? + err(what); + + ABORT = true; + + // Use a wasm runtime error, because a JS error might be seen as a foreign + // exception, which means we'd run destructors on it. We need the error to + // simply make the program stop. + // FIXME This approach does not work in Wasm EH because it currently does not assume + // all RuntimeErrors are from traps; it decides whether a RuntimeError is from + // a trap or not based on a hidden field within the object. So at the moment + // we don't have a way of throwing a wasm trap from JS. TODO Make a JS API that + // allows this in the wasm spec. + + // Suppress closure compiler warning here. Closure compiler's builtin extern + // definition for WebAssembly.RuntimeError claims it takes no arguments even + // though it can. + // TODO(https://github.com/google/closure-compiler/pull/3913): Remove if/when upstream closure gets fixed. + /** @suppress {checkTypes} */ + var e = new WebAssembly.RuntimeError(what); + + // Throw the error whether or not MODULARIZE is set because abort is used + // in code paths apart from instantiation where an exception is expected + // to be thrown when abort is called. + throw e; +} + +// show errors on likely calls to FS when it was not included +var FS = { + error() { + abort('Filesystem support (FS) was not included. The problem is that you are using files from JS, but files were not used from C/C++, so filesystem support was not auto-included. You can force-include filesystem support with -sFORCE_FILESYSTEM'); + }, + init() { FS.error() }, + createDataFile() { FS.error() }, + createPreloadedFile() { FS.error() }, + createLazyFile() { FS.error() }, + open() { FS.error() }, + mkdev() { FS.error() }, + registerDevice() { FS.error() }, + analyzePath() { FS.error() }, + + ErrnoError() { FS.error() }, +}; +Module['FS_createDataFile'] = FS.createDataFile; +Module['FS_createPreloadedFile'] = FS.createPreloadedFile; + +function createExportWrapper(name, nargs) { + return (...args) => { + assert(runtimeInitialized, `native function \`${name}\` called before runtime initialization`); + var f = wasmExports[name]; + assert(f, `exported native function \`${name}\` not found`); + // Only assert for too many arguments. Too few can be valid since the missing arguments will be zero filled. + assert(args.length <= nargs, `native function \`${name}\` called with ${args.length} args but expects ${nargs}`); + return f(...args); + }; +} + +var wasmBinaryFile; + +function findWasmBinary() { + return locateFile('cmTC_63219.wasm'); +} + +function getBinarySync(file) { + if (file == wasmBinaryFile && wasmBinary) { + return new Uint8Array(wasmBinary); + } + if (readBinary) { + return readBinary(file); + } + throw 'both async and sync fetching of the wasm failed'; +} + +async function getWasmBinary(binaryFile) { + // If we don't have the binary yet, load it asynchronously using readAsync. + if (!wasmBinary) { + // Fetch the binary using readAsync + try { + var response = await readAsync(binaryFile); + return new Uint8Array(response); + } catch { + // Fall back to getBinarySync below; + } + } + + // Otherwise, getBinarySync should be able to get it synchronously + return getBinarySync(binaryFile); +} + +async function instantiateArrayBuffer(binaryFile, imports) { + try { + var binary = await getWasmBinary(binaryFile); + var instance = await WebAssembly.instantiate(binary, imports); + return instance; + } catch (reason) { + err(`failed to asynchronously prepare wasm: ${reason}`); + + // Warn on some common problems. + if (isFileURI(wasmBinaryFile)) { + err(`warning: Loading from a file URI (${wasmBinaryFile}) is not supported in most browsers. See https://emscripten.org/docs/getting_started/FAQ.html#how-do-i-run-a-local-webserver-for-testing-why-does-my-program-stall-in-downloading-or-preparing`); + } + abort(reason); + } +} + +async function instantiateAsync(binary, binaryFile, imports) { + if (!binary && typeof WebAssembly.instantiateStreaming == 'function' + // Don't use streaming for file:// delivered objects in a webview, fetch them synchronously. + && !isFileURI(binaryFile) + // Avoid instantiateStreaming() on Node.js environment for now, as while + // Node.js v18.1.0 implements it, it does not have a full fetch() + // implementation yet. + // + // Reference: + // https://github.com/emscripten-core/emscripten/pull/16917 + && !ENVIRONMENT_IS_NODE + ) { + try { + var response = fetch(binaryFile, { credentials: 'same-origin' }); + var instantiationResult = await WebAssembly.instantiateStreaming(response, imports); + return instantiationResult; + } catch (reason) { + // We expect the most common failure cause to be a bad MIME type for the binary, + // in which case falling back to ArrayBuffer instantiation should work. + err(`wasm streaming compile failed: ${reason}`); + err('falling back to ArrayBuffer instantiation'); + // fall back of instantiateArrayBuffer below + }; + } + return instantiateArrayBuffer(binaryFile, imports); +} + +function getWasmImports() { + // prepare imports + return { + 'env': wasmImports, + 'wasi_snapshot_preview1': wasmImports, + } +} + +// Create the wasm instance. +// Receives the wasm imports, returns the exports. +async function createWasm() { + // Load the wasm module and create an instance of using native support in the JS engine. + // handle a generated wasm instance, receiving its exports and + // performing other necessary setup + /** @param {WebAssembly.Module=} module*/ + function receiveInstance(instance, module) { + wasmExports = instance.exports; + + + + wasmMemory = wasmExports['memory']; + + assert(wasmMemory, 'memory not found in wasm exports'); + updateMemoryViews(); + + removeRunDependency('wasm-instantiate'); + return wasmExports; + } + // wait for the pthread pool (if any) + addRunDependency('wasm-instantiate'); + + // Prefer streaming instantiation if available. + // Async compilation can be confusing when an error on the page overwrites Module + // (for example, if the order of elements is wrong, and the one defining Module is + // later), so we save Module and check it later. + var trueModule = Module; + function receiveInstantiationResult(result) { + // 'result' is a ResultObject object which has both the module and instance. + // receiveInstance() will swap in the exports (to Module.asm) so they can be called + assert(Module === trueModule, 'the Module object should not be replaced during async compilation - perhaps the order of HTML elements is wrong?'); + trueModule = null; + // TODO: Due to Closure regression https://github.com/google/closure-compiler/issues/3193, the above line no longer optimizes out down to the following line. + // When the regression is fixed, can restore the above PTHREADS-enabled path. + return receiveInstance(result['instance']); + } + + var info = getWasmImports(); + + // User shell pages can write their own Module.instantiateWasm = function(imports, successCallback) callback + // to manually instantiate the Wasm module themselves. This allows pages to + // run the instantiation parallel to any other async startup actions they are + // performing. + // Also pthreads and wasm workers initialize the wasm instance through this + // path. + if (Module['instantiateWasm']) { + return new Promise((resolve, reject) => { + try { + Module['instantiateWasm'](info, (mod, inst) => { + receiveInstance(mod, inst); + resolve(mod.exports); + }); + } catch(e) { + err(`Module.instantiateWasm callback failed with error: ${e}`); + reject(e); + } + }); + } + + wasmBinaryFile ??= findWasmBinary(); + var result = await instantiateAsync(wasmBinary, wasmBinaryFile, info); + var exports = receiveInstantiationResult(result); + return exports; +} + +// end include: preamble.js + +// Begin JS library code + + + class ExitStatus { + name = 'ExitStatus'; + constructor(status) { + this.message = `Program terminated with exit(${status})`; + this.status = status; + } + } + + var callRuntimeCallbacks = (callbacks) => { + while (callbacks.length > 0) { + // Pass the module as the first argument. + callbacks.shift()(Module); + } + }; + var onPostRuns = []; + var addOnPostRun = (cb) => onPostRuns.unshift(cb); + + var onPreRuns = []; + var addOnPreRun = (cb) => onPreRuns.unshift(cb); + + + + /** + * @param {number} ptr + * @param {string} type + */ + function getValue(ptr, type = 'i8') { + if (type.endsWith('*')) type = '*'; + switch (type) { + case 'i1': return HEAP8[ptr]; + case 'i8': return HEAP8[ptr]; + case 'i16': return HEAP16[((ptr)>>1)]; + case 'i32': return HEAP32[((ptr)>>2)]; + case 'i64': return HEAP64[((ptr)>>3)]; + case 'float': return HEAPF32[((ptr)>>2)]; + case 'double': return HEAPF64[((ptr)>>3)]; + case '*': return HEAPU32[((ptr)>>2)]; + default: abort(`invalid type for getValue: ${type}`); + } + } + + var noExitRuntime = Module['noExitRuntime'] || true; + + var ptrToString = (ptr) => { + assert(typeof ptr === 'number'); + // With CAN_ADDRESS_2GB or MEMORY64, pointers are already unsigned. + ptr >>>= 0; + return '0x' + ptr.toString(16).padStart(8, '0'); + }; + + + /** + * @param {number} ptr + * @param {number} value + * @param {string} type + */ + function setValue(ptr, value, type = 'i8') { + if (type.endsWith('*')) type = '*'; + switch (type) { + case 'i1': HEAP8[ptr] = value; break; + case 'i8': HEAP8[ptr] = value; break; + case 'i16': HEAP16[((ptr)>>1)] = value; break; + case 'i32': HEAP32[((ptr)>>2)] = value; break; + case 'i64': HEAP64[((ptr)>>3)] = BigInt(value); break; + case 'float': HEAPF32[((ptr)>>2)] = value; break; + case 'double': HEAPF64[((ptr)>>3)] = value; break; + case '*': HEAPU32[((ptr)>>2)] = value; break; + default: abort(`invalid type for setValue: ${type}`); + } + } + + var stackRestore = (val) => __emscripten_stack_restore(val); + + var stackSave = () => _emscripten_stack_get_current(); + + var warnOnce = (text) => { + warnOnce.shown ||= {}; + if (!warnOnce.shown[text]) { + warnOnce.shown[text] = 1; + if (ENVIRONMENT_IS_NODE) text = 'warning: ' + text; + err(text); + } + }; + + + var runtimeKeepaliveCounter = 0; + var keepRuntimeAlive = () => noExitRuntime || runtimeKeepaliveCounter > 0; + var _proc_exit = (code) => { + EXITSTATUS = code; + if (!keepRuntimeAlive()) { + Module['onExit']?.(code); + ABORT = true; + } + quit_(code, new ExitStatus(code)); + }; + + + /** @param {boolean|number=} implicit */ + var exitJS = (status, implicit) => { + EXITSTATUS = status; + + checkUnflushedContent(); + + // if exit() was called explicitly, warn the user if the runtime isn't actually being shut down + if (keepRuntimeAlive() && !implicit) { + var msg = `program exited (with status: ${status}), but keepRuntimeAlive() is set (counter=${runtimeKeepaliveCounter}) due to an async operation, so halting execution but not exiting the runtime or preventing further async execution (you can use emscripten_force_exit, if you want to force a true shutdown)`; + err(msg); + } + + _proc_exit(status); + }; + + var handleException = (e) => { + // Certain exception types we do not treat as errors since they are used for + // internal control flow. + // 1. ExitStatus, which is thrown by exit() + // 2. "unwind", which is thrown by emscripten_unwind_to_js_event_loop() and others + // that wish to return to JS event loop. + if (e instanceof ExitStatus || e == 'unwind') { + return EXITSTATUS; + } + checkStackCookie(); + if (e instanceof WebAssembly.RuntimeError) { + if (_emscripten_stack_get_current() <= 0) { + err('Stack overflow detected. You can try increasing -sSTACK_SIZE (currently set to 65536)'); + } + } + quit_(1, e); + }; + + var lengthBytesUTF8 = (str) => { + var len = 0; + for (var i = 0; i < str.length; ++i) { + // Gotcha: charCodeAt returns a 16-bit word that is a UTF-16 encoded code + // unit, not a Unicode code point of the character! So decode + // UTF16->UTF32->UTF8. + // See http://unicode.org/faq/utf_bom.html#utf16-3 + var c = str.charCodeAt(i); // possibly a lead surrogate + if (c <= 0x7F) { + len++; + } else if (c <= 0x7FF) { + len += 2; + } else if (c >= 0xD800 && c <= 0xDFFF) { + len += 4; ++i; + } else { + len += 3; + } + } + return len; + }; + + var stringToUTF8Array = (str, heap, outIdx, maxBytesToWrite) => { + assert(typeof str === 'string', `stringToUTF8Array expects a string (got ${typeof str})`); + // Parameter maxBytesToWrite is not optional. Negative values, 0, null, + // undefined and false each don't write out any bytes. + if (!(maxBytesToWrite > 0)) + return 0; + + var startIdx = outIdx; + var endIdx = outIdx + maxBytesToWrite - 1; // -1 for string null terminator. + for (var i = 0; i < str.length; ++i) { + // Gotcha: charCodeAt returns a 16-bit word that is a UTF-16 encoded code + // unit, not a Unicode code point of the character! So decode + // UTF16->UTF32->UTF8. + // See http://unicode.org/faq/utf_bom.html#utf16-3 + // For UTF8 byte structure, see http://en.wikipedia.org/wiki/UTF-8#Description + // and https://www.ietf.org/rfc/rfc2279.txt + // and https://tools.ietf.org/html/rfc3629 + var u = str.charCodeAt(i); // possibly a lead surrogate + if (u >= 0xD800 && u <= 0xDFFF) { + var u1 = str.charCodeAt(++i); + u = 0x10000 + ((u & 0x3FF) << 10) | (u1 & 0x3FF); + } + if (u <= 0x7F) { + if (outIdx >= endIdx) break; + heap[outIdx++] = u; + } else if (u <= 0x7FF) { + if (outIdx + 1 >= endIdx) break; + heap[outIdx++] = 0xC0 | (u >> 6); + heap[outIdx++] = 0x80 | (u & 63); + } else if (u <= 0xFFFF) { + if (outIdx + 2 >= endIdx) break; + heap[outIdx++] = 0xE0 | (u >> 12); + heap[outIdx++] = 0x80 | ((u >> 6) & 63); + heap[outIdx++] = 0x80 | (u & 63); + } else { + if (outIdx + 3 >= endIdx) break; + if (u > 0x10FFFF) warnOnce('Invalid Unicode code point ' + ptrToString(u) + ' encountered when serializing a JS string to a UTF-8 string in wasm memory! (Valid unicode code points should be in range 0-0x10FFFF).'); + heap[outIdx++] = 0xF0 | (u >> 18); + heap[outIdx++] = 0x80 | ((u >> 12) & 63); + heap[outIdx++] = 0x80 | ((u >> 6) & 63); + heap[outIdx++] = 0x80 | (u & 63); + } + } + // Null-terminate the pointer to the buffer. + heap[outIdx] = 0; + return outIdx - startIdx; + }; + var stringToUTF8 = (str, outPtr, maxBytesToWrite) => { + assert(typeof maxBytesToWrite == 'number', 'stringToUTF8(str, outPtr, maxBytesToWrite) is missing the third parameter that specifies the length of the output buffer!'); + return stringToUTF8Array(str, HEAPU8, outPtr, maxBytesToWrite); + }; + + var stackAlloc = (sz) => __emscripten_stack_alloc(sz); + var stringToUTF8OnStack = (str) => { + var size = lengthBytesUTF8(str) + 1; + var ret = stackAlloc(size); + stringToUTF8(str, ret, size); + return ret; + }; +// End JS library code + +function checkIncomingModuleAPI() { + ignoredModuleProp('fetchSettings'); +} +var wasmImports = { + +}; +var wasmExports; +createWasm(); +var ___wasm_call_ctors = createExportWrapper('__wasm_call_ctors', 0); +var _main = Module['_main'] = createExportWrapper('__main_argc_argv', 2); +var _fflush = createExportWrapper('fflush', 1); +var _emscripten_stack_init = () => (_emscripten_stack_init = wasmExports['emscripten_stack_init'])(); +var _emscripten_stack_get_free = () => (_emscripten_stack_get_free = wasmExports['emscripten_stack_get_free'])(); +var _emscripten_stack_get_base = () => (_emscripten_stack_get_base = wasmExports['emscripten_stack_get_base'])(); +var _emscripten_stack_get_end = () => (_emscripten_stack_get_end = wasmExports['emscripten_stack_get_end'])(); +var __emscripten_stack_restore = (a0) => (__emscripten_stack_restore = wasmExports['_emscripten_stack_restore'])(a0); +var __emscripten_stack_alloc = (a0) => (__emscripten_stack_alloc = wasmExports['_emscripten_stack_alloc'])(a0); +var _emscripten_stack_get_current = () => (_emscripten_stack_get_current = wasmExports['emscripten_stack_get_current'])(); + + +// include: postamble.js +// === Auto-generated postamble setup entry stuff === + +var missingLibrarySymbols = [ + 'writeI53ToI64', + 'writeI53ToI64Clamped', + 'writeI53ToI64Signaling', + 'writeI53ToU64Clamped', + 'writeI53ToU64Signaling', + 'readI53FromI64', + 'readI53FromU64', + 'convertI32PairToI53', + 'convertI32PairToI53Checked', + 'convertU32PairToI53', + 'bigintToI53Checked', + 'getTempRet0', + 'setTempRet0', + 'zeroMemory', + 'getHeapMax', + 'abortOnCannotGrowMemory', + 'growMemory', + 'strError', + 'inetPton4', + 'inetNtop4', + 'inetPton6', + 'inetNtop6', + 'readSockaddr', + 'writeSockaddr', + 'emscriptenLog', + 'readEmAsmArgs', + 'jstoi_q', + 'getExecutableName', + 'listenOnce', + 'autoResumeAudioContext', + 'getDynCaller', + 'dynCall', + 'runtimeKeepalivePush', + 'runtimeKeepalivePop', + 'callUserCallback', + 'maybeExit', + 'asmjsMangle', + 'asyncLoad', + 'alignMemory', + 'mmapAlloc', + 'HandleAllocator', + 'getNativeTypeSize', + 'addOnInit', + 'addOnPostCtor', + 'addOnPreMain', + 'addOnExit', + 'STACK_SIZE', + 'STACK_ALIGN', + 'POINTER_SIZE', + 'ASSERTIONS', + 'getCFunc', + 'ccall', + 'cwrap', + 'uleb128Encode', + 'sigToWasmTypes', + 'generateFuncType', + 'convertJsFunctionToWasm', + 'getEmptyTableSlot', + 'updateTableMap', + 'getFunctionAddress', + 'addFunction', + 'removeFunction', + 'reallyNegative', + 'unSign', + 'strLen', + 'reSign', + 'formatString', + 'UTF8ArrayToString', + 'UTF8ToString', + 'intArrayFromString', + 'intArrayToString', + 'AsciiToString', + 'stringToAscii', + 'UTF16ToString', + 'stringToUTF16', + 'lengthBytesUTF16', + 'UTF32ToString', + 'stringToUTF32', + 'lengthBytesUTF32', + 'stringToNewUTF8', + 'writeArrayToMemory', + 'registerKeyEventCallback', + 'maybeCStringToJsString', + 'findEventTarget', + 'getBoundingClientRect', + 'fillMouseEventData', + 'registerMouseEventCallback', + 'registerWheelEventCallback', + 'registerUiEventCallback', + 'registerFocusEventCallback', + 'fillDeviceOrientationEventData', + 'registerDeviceOrientationEventCallback', + 'fillDeviceMotionEventData', + 'registerDeviceMotionEventCallback', + 'screenOrientation', + 'fillOrientationChangeEventData', + 'registerOrientationChangeEventCallback', + 'fillFullscreenChangeEventData', + 'registerFullscreenChangeEventCallback', + 'JSEvents_requestFullscreen', + 'JSEvents_resizeCanvasForFullscreen', + 'registerRestoreOldStyle', + 'hideEverythingExceptGivenElement', + 'restoreHiddenElements', + 'setLetterbox', + 'softFullscreenResizeWebGLRenderTarget', + 'doRequestFullscreen', + 'fillPointerlockChangeEventData', + 'registerPointerlockChangeEventCallback', + 'registerPointerlockErrorEventCallback', + 'requestPointerLock', + 'fillVisibilityChangeEventData', + 'registerVisibilityChangeEventCallback', + 'registerTouchEventCallback', + 'fillGamepadEventData', + 'registerGamepadEventCallback', + 'registerBeforeUnloadEventCallback', + 'fillBatteryEventData', + 'battery', + 'registerBatteryEventCallback', + 'setCanvasElementSize', + 'getCanvasElementSize', + 'jsStackTrace', + 'getCallstack', + 'convertPCtoSourceLocation', + 'getEnvStrings', + 'checkWasiClock', + 'flush_NO_FILESYSTEM', + 'wasiRightsToMuslOFlags', + 'wasiOFlagsToMuslOFlags', + 'initRandomFill', + 'randomFill', + 'safeSetTimeout', + 'setImmediateWrapped', + 'safeRequestAnimationFrame', + 'clearImmediateWrapped', + 'registerPostMainLoop', + 'registerPreMainLoop', + 'getPromise', + 'makePromise', + 'idsToPromises', + 'makePromiseCallback', + 'ExceptionInfo', + 'findMatchingCatch', + 'Browser_asyncPrepareDataCounter', + 'isLeapYear', + 'ydayFromDate', + 'arraySum', + 'addDays', + 'getSocketFromFD', + 'getSocketAddress', + 'FS_createPreloadedFile', + 'FS_modeStringToFlags', + 'FS_getMode', + 'FS_stdin_getChar', + 'FS_unlink', + 'FS_createDataFile', + 'FS_mkdirTree', + '_setNetworkCallback', + 'heapObjectForWebGLType', + 'toTypedArrayIndex', + 'webgl_enable_ANGLE_instanced_arrays', + 'webgl_enable_OES_vertex_array_object', + 'webgl_enable_WEBGL_draw_buffers', + 'webgl_enable_WEBGL_multi_draw', + 'webgl_enable_EXT_polygon_offset_clamp', + 'webgl_enable_EXT_clip_control', + 'webgl_enable_WEBGL_polygon_mode', + 'emscriptenWebGLGet', + 'computeUnpackAlignedImageSize', + 'colorChannelsInGlTextureFormat', + 'emscriptenWebGLGetTexPixelData', + 'emscriptenWebGLGetUniform', + 'webglGetUniformLocation', + 'webglPrepareUniformLocationsBeforeFirstUse', + 'webglGetLeftBracePos', + 'emscriptenWebGLGetVertexAttrib', + '__glGetActiveAttribOrUniform', + 'writeGLArray', + 'registerWebGlEventCallback', + 'runAndAbortIfError', + 'ALLOC_NORMAL', + 'ALLOC_STACK', + 'allocate', + 'writeStringToMemory', + 'writeAsciiToMemory', + 'demangle', + 'stackTrace', +]; +missingLibrarySymbols.forEach(missingLibrarySymbol) + +var unexportedSymbols = [ + 'run', + 'addRunDependency', + 'removeRunDependency', + 'out', + 'err', + 'callMain', + 'abort', + 'wasmMemory', + 'wasmExports', + 'writeStackCookie', + 'checkStackCookie', + 'INT53_MAX', + 'INT53_MIN', + 'stackSave', + 'stackRestore', + 'stackAlloc', + 'ptrToString', + 'exitJS', + 'ENV', + 'ERRNO_CODES', + 'DNS', + 'Protocols', + 'Sockets', + 'timers', + 'warnOnce', + 'readEmAsmArgsArray', + 'jstoi_s', + 'handleException', + 'keepRuntimeAlive', + 'wasmTable', + 'noExitRuntime', + 'addOnPreRun', + 'addOnPostRun', + 'freeTableIndexes', + 'functionsInTableMap', + 'setValue', + 'getValue', + 'PATH', + 'PATH_FS', + 'UTF8Decoder', + 'stringToUTF8Array', + 'stringToUTF8', + 'lengthBytesUTF8', + 'UTF16Decoder', + 'stringToUTF8OnStack', + 'JSEvents', + 'specialHTMLTargets', + 'findCanvasEventTarget', + 'currentFullscreenStrategy', + 'restoreOldWindowedStyle', + 'UNWIND_CACHE', + 'ExitStatus', + 'emSetImmediate', + 'emClearImmediate_deps', + 'emClearImmediate', + 'promiseMap', + 'uncaughtExceptionCount', + 'exceptionLast', + 'exceptionCaught', + 'Browser', + 'getPreloadedImageData__data', + 'wget', + 'MONTH_DAYS_REGULAR', + 'MONTH_DAYS_LEAP', + 'MONTH_DAYS_REGULAR_CUMULATIVE', + 'MONTH_DAYS_LEAP_CUMULATIVE', + 'SYSCALLS', + 'preloadPlugins', + 'FS_stdin_getChar_buffer', + 'FS_createPath', + 'FS_createDevice', + 'FS_readFile', + 'FS', + 'FS_createLazyFile', + 'MEMFS', + 'TTY', + 'PIPEFS', + 'SOCKFS', + 'tempFixedLengthArray', + 'miniTempWebGLFloatBuffers', + 'miniTempWebGLIntBuffers', + 'GL', + 'AL', + 'GLUT', + 'EGL', + 'GLEW', + 'IDBStore', + 'SDL', + 'SDL_gfx', + 'allocateUTF8', + 'allocateUTF8OnStack', + 'print', + 'printErr', +]; +unexportedSymbols.forEach(unexportedRuntimeSymbol); + + + +var calledRun; + +function callMain(args = []) { + assert(runDependencies == 0, 'cannot call main when async dependencies remain! (listen on Module["onRuntimeInitialized"])'); + assert(typeof onPreRuns === 'undefined' || onPreRuns.length == 0, 'cannot call main when preRun functions remain to be called'); + + var entryFunction = _main; + + args.unshift(thisProgram); + + var argc = args.length; + var argv = stackAlloc((argc + 1) * 4); + var argv_ptr = argv; + args.forEach((arg) => { + HEAPU32[((argv_ptr)>>2)] = stringToUTF8OnStack(arg); + argv_ptr += 4; + }); + HEAPU32[((argv_ptr)>>2)] = 0; + + try { + + var ret = entryFunction(argc, argv); + + // if we're not running an evented main loop, it's time to exit + exitJS(ret, /* implicit = */ true); + return ret; + } catch (e) { + return handleException(e); + } +} + +function stackCheckInit() { + // This is normally called automatically during __wasm_call_ctors but need to + // get these values before even running any of the ctors so we call it redundantly + // here. + _emscripten_stack_init(); + // TODO(sbc): Move writeStackCookie to native to to avoid this. + writeStackCookie(); +} + +function run(args = arguments_) { + + if (runDependencies > 0) { + dependenciesFulfilled = run; + return; + } + + stackCheckInit(); + + preRun(); + + // a preRun added a dependency, run will be called later + if (runDependencies > 0) { + dependenciesFulfilled = run; + return; + } + + function doRun() { + // run may have just been called through dependencies being fulfilled just in this very frame, + // or while the async setStatus time below was happening + assert(!calledRun); + calledRun = true; + Module['calledRun'] = true; + + if (ABORT) return; + + initRuntime(); + + preMain(); + + Module['onRuntimeInitialized']?.(); + consumedModuleProp('onRuntimeInitialized'); + + var noInitialRun = Module['noInitialRun'];legacyModuleProp('noInitialRun', 'noInitialRun'); + if (!noInitialRun) callMain(args); + + postRun(); + } + + if (Module['setStatus']) { + Module['setStatus']('Running...'); + setTimeout(() => { + setTimeout(() => Module['setStatus'](''), 1); + doRun(); + }, 1); + } else + { + doRun(); + } + checkStackCookie(); +} + +function checkUnflushedContent() { + // Compiler settings do not allow exiting the runtime, so flushing + // the streams is not possible. but in ASSERTIONS mode we check + // if there was something to flush, and if so tell the user they + // should request that the runtime be exitable. + // Normally we would not even include flush() at all, but in ASSERTIONS + // builds we do so just for this check, and here we see if there is any + // content to flush, that is, we check if there would have been + // something a non-ASSERTIONS build would have not seen. + // How we flush the streams depends on whether we are in SYSCALLS_REQUIRE_FILESYSTEM=0 + // mode (which has its own special function for this; otherwise, all + // the code is inside libc) + var oldOut = out; + var oldErr = err; + var has = false; + out = err = (x) => { + has = true; + } + try { // it doesn't matter if it fails + _fflush(0); + } catch(e) {} + out = oldOut; + err = oldErr; + if (has) { + warnOnce('stdio streams had content in them that was not flushed. you should set EXIT_RUNTIME to 1 (see the Emscripten FAQ), or make sure to emit a newline when you printf etc.'); + warnOnce('(this may also be due to not including full filesystem support - try building with -sFORCE_FILESYSTEM)'); + } +} + +if (Module['preInit']) { + if (typeof Module['preInit'] == 'function') Module['preInit'] = [Module['preInit']]; + while (Module['preInit'].length > 0) { + Module['preInit'].pop()(); + } +} +consumedModuleProp('preInit'); + +run(); + +// end include: postamble.js + diff --git a/build-emcmake/CMakeFiles/3.28.3/CMakeSystem.cmake b/build-emcmake/CMakeFiles/3.28.3/CMakeSystem.cmake new file mode 100644 index 0000000..196df84 --- /dev/null +++ b/build-emcmake/CMakeFiles/3.28.3/CMakeSystem.cmake @@ -0,0 +1,15 @@ +set(CMAKE_HOST_SYSTEM "Linux-6.8.0-53-generic") +set(CMAKE_HOST_SYSTEM_NAME "Linux") +set(CMAKE_HOST_SYSTEM_VERSION "6.8.0-53-generic") +set(CMAKE_HOST_SYSTEM_PROCESSOR "x86_64") + +include("/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/cmake/Modules/Platform/Emscripten.cmake") + +set(CMAKE_SYSTEM "Emscripten-1") +set(CMAKE_SYSTEM_NAME "Emscripten") +set(CMAKE_SYSTEM_VERSION "1") +set(CMAKE_SYSTEM_PROCESSOR "x86") + +set(CMAKE_CROSSCOMPILING "TRUE") + +set(CMAKE_SYSTEM_LOADED 1) diff --git a/build-emcmake/CMakeFiles/3.28.3/CompilerIdCXX/CMakeCXXCompilerId.cpp b/build-emcmake/CMakeFiles/3.28.3/CompilerIdCXX/CMakeCXXCompilerId.cpp new file mode 100644 index 0000000..9c9c90e --- /dev/null +++ b/build-emcmake/CMakeFiles/3.28.3/CompilerIdCXX/CMakeCXXCompilerId.cpp @@ -0,0 +1,869 @@ +/* This source file must have a .cpp extension so that all C++ compilers + recognize the extension without flags. Borland does not know .cxx for + example. */ +#ifndef __cplusplus +# error "A C compiler has been selected for C++." +#endif + +#if !defined(__has_include) +/* If the compiler does not have __has_include, pretend the answer is + always no. */ +# define __has_include(x) 0 +#endif + + +/* Version number components: V=Version, R=Revision, P=Patch + Version date components: YYYY=Year, MM=Month, DD=Day */ + +#if defined(__COMO__) +# define COMPILER_ID "Comeau" + /* __COMO_VERSION__ = VRR */ +# define COMPILER_VERSION_MAJOR DEC(__COMO_VERSION__ / 100) +# define COMPILER_VERSION_MINOR DEC(__COMO_VERSION__ % 100) + +#elif defined(__INTEL_COMPILER) || defined(__ICC) +# define COMPILER_ID "Intel" +# if defined(_MSC_VER) +# define SIMULATE_ID "MSVC" +# endif +# if defined(__GNUC__) +# define SIMULATE_ID "GNU" +# endif + /* __INTEL_COMPILER = VRP prior to 2021, and then VVVV for 2021 and later, + except that a few beta releases use the old format with V=2021. */ +# if __INTEL_COMPILER < 2021 || __INTEL_COMPILER == 202110 || __INTEL_COMPILER == 202111 +# define COMPILER_VERSION_MAJOR DEC(__INTEL_COMPILER/100) +# define COMPILER_VERSION_MINOR DEC(__INTEL_COMPILER/10 % 10) +# if defined(__INTEL_COMPILER_UPDATE) +# define COMPILER_VERSION_PATCH DEC(__INTEL_COMPILER_UPDATE) +# else +# define COMPILER_VERSION_PATCH DEC(__INTEL_COMPILER % 10) +# endif +# else +# define COMPILER_VERSION_MAJOR DEC(__INTEL_COMPILER) +# define COMPILER_VERSION_MINOR DEC(__INTEL_COMPILER_UPDATE) + /* The third version component from --version is an update index, + but no macro is provided for it. */ +# define COMPILER_VERSION_PATCH DEC(0) +# endif +# if defined(__INTEL_COMPILER_BUILD_DATE) + /* __INTEL_COMPILER_BUILD_DATE = YYYYMMDD */ +# define COMPILER_VERSION_TWEAK DEC(__INTEL_COMPILER_BUILD_DATE) +# endif +# if defined(_MSC_VER) + /* _MSC_VER = VVRR */ +# define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100) +# define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100) +# endif +# if defined(__GNUC__) +# define SIMULATE_VERSION_MAJOR DEC(__GNUC__) +# elif defined(__GNUG__) +# define SIMULATE_VERSION_MAJOR DEC(__GNUG__) +# endif +# if defined(__GNUC_MINOR__) +# define SIMULATE_VERSION_MINOR DEC(__GNUC_MINOR__) +# endif +# if defined(__GNUC_PATCHLEVEL__) +# define SIMULATE_VERSION_PATCH DEC(__GNUC_PATCHLEVEL__) +# endif + +#elif (defined(__clang__) && defined(__INTEL_CLANG_COMPILER)) || defined(__INTEL_LLVM_COMPILER) +# define COMPILER_ID "IntelLLVM" +#if defined(_MSC_VER) +# define SIMULATE_ID "MSVC" +#endif +#if defined(__GNUC__) +# define SIMULATE_ID "GNU" +#endif +/* __INTEL_LLVM_COMPILER = VVVVRP prior to 2021.2.0, VVVVRRPP for 2021.2.0 and + * later. Look for 6 digit vs. 8 digit version number to decide encoding. + * VVVV is no smaller than the current year when a version is released. + */ +#if __INTEL_LLVM_COMPILER < 1000000L +# define COMPILER_VERSION_MAJOR DEC(__INTEL_LLVM_COMPILER/100) +# define COMPILER_VERSION_MINOR DEC(__INTEL_LLVM_COMPILER/10 % 10) +# define COMPILER_VERSION_PATCH DEC(__INTEL_LLVM_COMPILER % 10) +#else +# define COMPILER_VERSION_MAJOR DEC(__INTEL_LLVM_COMPILER/10000) +# define COMPILER_VERSION_MINOR DEC(__INTEL_LLVM_COMPILER/100 % 100) +# define COMPILER_VERSION_PATCH DEC(__INTEL_LLVM_COMPILER % 100) +#endif +#if defined(_MSC_VER) + /* _MSC_VER = VVRR */ +# define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100) +# define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100) +#endif +#if defined(__GNUC__) +# define SIMULATE_VERSION_MAJOR DEC(__GNUC__) +#elif defined(__GNUG__) +# define SIMULATE_VERSION_MAJOR DEC(__GNUG__) +#endif +#if defined(__GNUC_MINOR__) +# define SIMULATE_VERSION_MINOR DEC(__GNUC_MINOR__) +#endif +#if defined(__GNUC_PATCHLEVEL__) +# define SIMULATE_VERSION_PATCH DEC(__GNUC_PATCHLEVEL__) +#endif + +#elif defined(__PATHCC__) +# define COMPILER_ID "PathScale" +# define COMPILER_VERSION_MAJOR DEC(__PATHCC__) +# define COMPILER_VERSION_MINOR DEC(__PATHCC_MINOR__) +# if defined(__PATHCC_PATCHLEVEL__) +# define COMPILER_VERSION_PATCH DEC(__PATHCC_PATCHLEVEL__) +# endif + +#elif defined(__BORLANDC__) && defined(__CODEGEARC_VERSION__) +# define COMPILER_ID "Embarcadero" +# define COMPILER_VERSION_MAJOR HEX(__CODEGEARC_VERSION__>>24 & 0x00FF) +# define COMPILER_VERSION_MINOR HEX(__CODEGEARC_VERSION__>>16 & 0x00FF) +# define COMPILER_VERSION_PATCH DEC(__CODEGEARC_VERSION__ & 0xFFFF) + +#elif defined(__BORLANDC__) +# define COMPILER_ID "Borland" + /* __BORLANDC__ = 0xVRR */ +# define COMPILER_VERSION_MAJOR HEX(__BORLANDC__>>8) +# define COMPILER_VERSION_MINOR HEX(__BORLANDC__ & 0xFF) + +#elif defined(__WATCOMC__) && __WATCOMC__ < 1200 +# define COMPILER_ID "Watcom" + /* __WATCOMC__ = VVRR */ +# define COMPILER_VERSION_MAJOR DEC(__WATCOMC__ / 100) +# define COMPILER_VERSION_MINOR DEC((__WATCOMC__ / 10) % 10) +# if (__WATCOMC__ % 10) > 0 +# define COMPILER_VERSION_PATCH DEC(__WATCOMC__ % 10) +# endif + +#elif defined(__WATCOMC__) +# define COMPILER_ID "OpenWatcom" + /* __WATCOMC__ = VVRP + 1100 */ +# define COMPILER_VERSION_MAJOR DEC((__WATCOMC__ - 1100) / 100) +# define COMPILER_VERSION_MINOR DEC((__WATCOMC__ / 10) % 10) +# if (__WATCOMC__ % 10) > 0 +# define COMPILER_VERSION_PATCH DEC(__WATCOMC__ % 10) +# endif + +#elif defined(__SUNPRO_CC) +# define COMPILER_ID "SunPro" +# if __SUNPRO_CC >= 0x5100 + /* __SUNPRO_CC = 0xVRRP */ +# define COMPILER_VERSION_MAJOR HEX(__SUNPRO_CC>>12) +# define COMPILER_VERSION_MINOR HEX(__SUNPRO_CC>>4 & 0xFF) +# define COMPILER_VERSION_PATCH HEX(__SUNPRO_CC & 0xF) +# else + /* __SUNPRO_CC = 0xVRP */ +# define COMPILER_VERSION_MAJOR HEX(__SUNPRO_CC>>8) +# define COMPILER_VERSION_MINOR HEX(__SUNPRO_CC>>4 & 0xF) +# define COMPILER_VERSION_PATCH HEX(__SUNPRO_CC & 0xF) +# endif + +#elif defined(__HP_aCC) +# define COMPILER_ID "HP" + /* __HP_aCC = VVRRPP */ +# define COMPILER_VERSION_MAJOR DEC(__HP_aCC/10000) +# define COMPILER_VERSION_MINOR DEC(__HP_aCC/100 % 100) +# define COMPILER_VERSION_PATCH DEC(__HP_aCC % 100) + +#elif defined(__DECCXX) +# define COMPILER_ID "Compaq" + /* __DECCXX_VER = VVRRTPPPP */ +# define COMPILER_VERSION_MAJOR DEC(__DECCXX_VER/10000000) +# define COMPILER_VERSION_MINOR DEC(__DECCXX_VER/100000 % 100) +# define COMPILER_VERSION_PATCH DEC(__DECCXX_VER % 10000) + +#elif defined(__IBMCPP__) && defined(__COMPILER_VER__) +# define COMPILER_ID "zOS" + /* __IBMCPP__ = VRP */ +# define COMPILER_VERSION_MAJOR DEC(__IBMCPP__/100) +# define COMPILER_VERSION_MINOR DEC(__IBMCPP__/10 % 10) +# define COMPILER_VERSION_PATCH DEC(__IBMCPP__ % 10) + +#elif defined(__open_xl__) && defined(__clang__) +# define COMPILER_ID "IBMClang" +# define COMPILER_VERSION_MAJOR DEC(__open_xl_version__) +# define COMPILER_VERSION_MINOR DEC(__open_xl_release__) +# define COMPILER_VERSION_PATCH DEC(__open_xl_modification__) +# define COMPILER_VERSION_TWEAK DEC(__open_xl_ptf_fix_level__) + + +#elif defined(__ibmxl__) && defined(__clang__) +# define COMPILER_ID "XLClang" +# define COMPILER_VERSION_MAJOR DEC(__ibmxl_version__) +# define COMPILER_VERSION_MINOR DEC(__ibmxl_release__) +# define COMPILER_VERSION_PATCH DEC(__ibmxl_modification__) +# define COMPILER_VERSION_TWEAK DEC(__ibmxl_ptf_fix_level__) + + +#elif defined(__IBMCPP__) && !defined(__COMPILER_VER__) && __IBMCPP__ >= 800 +# define COMPILER_ID "XL" + /* __IBMCPP__ = VRP */ +# define COMPILER_VERSION_MAJOR DEC(__IBMCPP__/100) +# define COMPILER_VERSION_MINOR DEC(__IBMCPP__/10 % 10) +# define COMPILER_VERSION_PATCH DEC(__IBMCPP__ % 10) + +#elif defined(__IBMCPP__) && !defined(__COMPILER_VER__) && __IBMCPP__ < 800 +# define COMPILER_ID "VisualAge" + /* __IBMCPP__ = VRP */ +# define COMPILER_VERSION_MAJOR DEC(__IBMCPP__/100) +# define COMPILER_VERSION_MINOR DEC(__IBMCPP__/10 % 10) +# define COMPILER_VERSION_PATCH DEC(__IBMCPP__ % 10) + +#elif defined(__NVCOMPILER) +# define COMPILER_ID "NVHPC" +# define COMPILER_VERSION_MAJOR DEC(__NVCOMPILER_MAJOR__) +# define COMPILER_VERSION_MINOR DEC(__NVCOMPILER_MINOR__) +# if defined(__NVCOMPILER_PATCHLEVEL__) +# define COMPILER_VERSION_PATCH DEC(__NVCOMPILER_PATCHLEVEL__) +# endif + +#elif defined(__PGI) +# define COMPILER_ID "PGI" +# define COMPILER_VERSION_MAJOR DEC(__PGIC__) +# define COMPILER_VERSION_MINOR DEC(__PGIC_MINOR__) +# if defined(__PGIC_PATCHLEVEL__) +# define COMPILER_VERSION_PATCH DEC(__PGIC_PATCHLEVEL__) +# endif + +#elif defined(__clang__) && defined(__cray__) +# define COMPILER_ID "CrayClang" +# define COMPILER_VERSION_MAJOR DEC(__cray_major__) +# define COMPILER_VERSION_MINOR DEC(__cray_minor__) +# define COMPILER_VERSION_PATCH DEC(__cray_patchlevel__) +# define COMPILER_VERSION_INTERNAL_STR __clang_version__ + + +#elif defined(_CRAYC) +# define COMPILER_ID "Cray" +# define COMPILER_VERSION_MAJOR DEC(_RELEASE_MAJOR) +# define COMPILER_VERSION_MINOR DEC(_RELEASE_MINOR) + +#elif defined(__TI_COMPILER_VERSION__) +# define COMPILER_ID "TI" + /* __TI_COMPILER_VERSION__ = VVVRRRPPP */ +# define COMPILER_VERSION_MAJOR DEC(__TI_COMPILER_VERSION__/1000000) +# define COMPILER_VERSION_MINOR DEC(__TI_COMPILER_VERSION__/1000 % 1000) +# define COMPILER_VERSION_PATCH DEC(__TI_COMPILER_VERSION__ % 1000) + +#elif defined(__CLANG_FUJITSU) +# define COMPILER_ID "FujitsuClang" +# define COMPILER_VERSION_MAJOR DEC(__FCC_major__) +# define COMPILER_VERSION_MINOR DEC(__FCC_minor__) +# define COMPILER_VERSION_PATCH DEC(__FCC_patchlevel__) +# define COMPILER_VERSION_INTERNAL_STR __clang_version__ + + +#elif defined(__FUJITSU) +# define COMPILER_ID "Fujitsu" +# if defined(__FCC_version__) +# define COMPILER_VERSION __FCC_version__ +# elif defined(__FCC_major__) +# define COMPILER_VERSION_MAJOR DEC(__FCC_major__) +# define COMPILER_VERSION_MINOR DEC(__FCC_minor__) +# define COMPILER_VERSION_PATCH DEC(__FCC_patchlevel__) +# endif +# if defined(__fcc_version) +# define COMPILER_VERSION_INTERNAL DEC(__fcc_version) +# elif defined(__FCC_VERSION) +# define COMPILER_VERSION_INTERNAL DEC(__FCC_VERSION) +# endif + + +#elif defined(__ghs__) +# define COMPILER_ID "GHS" +/* __GHS_VERSION_NUMBER = VVVVRP */ +# ifdef __GHS_VERSION_NUMBER +# define COMPILER_VERSION_MAJOR DEC(__GHS_VERSION_NUMBER / 100) +# define COMPILER_VERSION_MINOR DEC(__GHS_VERSION_NUMBER / 10 % 10) +# define COMPILER_VERSION_PATCH DEC(__GHS_VERSION_NUMBER % 10) +# endif + +#elif defined(__TASKING__) +# define COMPILER_ID "Tasking" + # define COMPILER_VERSION_MAJOR DEC(__VERSION__/1000) + # define COMPILER_VERSION_MINOR DEC(__VERSION__ % 100) +# define COMPILER_VERSION_INTERNAL DEC(__VERSION__) + +#elif defined(__ORANGEC__) +# define COMPILER_ID "OrangeC" +# define COMPILER_VERSION_MAJOR DEC(__ORANGEC_MAJOR__) +# define COMPILER_VERSION_MINOR DEC(__ORANGEC_MINOR__) +# define COMPILER_VERSION_PATCH DEC(__ORANGEC_PATCHLEVEL__) + +#elif defined(__SCO_VERSION__) +# define COMPILER_ID "SCO" + +#elif defined(__ARMCC_VERSION) && !defined(__clang__) +# define COMPILER_ID "ARMCC" +#if __ARMCC_VERSION >= 1000000 + /* __ARMCC_VERSION = VRRPPPP */ + # define COMPILER_VERSION_MAJOR DEC(__ARMCC_VERSION/1000000) + # define COMPILER_VERSION_MINOR DEC(__ARMCC_VERSION/10000 % 100) + # define COMPILER_VERSION_PATCH DEC(__ARMCC_VERSION % 10000) +#else + /* __ARMCC_VERSION = VRPPPP */ + # define COMPILER_VERSION_MAJOR DEC(__ARMCC_VERSION/100000) + # define COMPILER_VERSION_MINOR DEC(__ARMCC_VERSION/10000 % 10) + # define COMPILER_VERSION_PATCH DEC(__ARMCC_VERSION % 10000) +#endif + + +#elif defined(__clang__) && defined(__apple_build_version__) +# define COMPILER_ID "AppleClang" +# if defined(_MSC_VER) +# define SIMULATE_ID "MSVC" +# endif +# define COMPILER_VERSION_MAJOR DEC(__clang_major__) +# define COMPILER_VERSION_MINOR DEC(__clang_minor__) +# define COMPILER_VERSION_PATCH DEC(__clang_patchlevel__) +# if defined(_MSC_VER) + /* _MSC_VER = VVRR */ +# define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100) +# define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100) +# endif +# define COMPILER_VERSION_TWEAK DEC(__apple_build_version__) + +#elif defined(__clang__) && defined(__ARMCOMPILER_VERSION) +# define COMPILER_ID "ARMClang" + # define COMPILER_VERSION_MAJOR DEC(__ARMCOMPILER_VERSION/1000000) + # define COMPILER_VERSION_MINOR DEC(__ARMCOMPILER_VERSION/10000 % 100) + # define COMPILER_VERSION_PATCH DEC(__ARMCOMPILER_VERSION/100 % 100) +# define COMPILER_VERSION_INTERNAL DEC(__ARMCOMPILER_VERSION) + +#elif defined(__clang__) +# define COMPILER_ID "Clang" +# if defined(_MSC_VER) +# define SIMULATE_ID "MSVC" +# endif +# define COMPILER_VERSION_MAJOR DEC(__clang_major__) +# define COMPILER_VERSION_MINOR DEC(__clang_minor__) +# define COMPILER_VERSION_PATCH DEC(__clang_patchlevel__) +# if defined(_MSC_VER) + /* _MSC_VER = VVRR */ +# define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100) +# define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100) +# endif + +#elif defined(__LCC__) && (defined(__GNUC__) || defined(__GNUG__) || defined(__MCST__)) +# define COMPILER_ID "LCC" +# define COMPILER_VERSION_MAJOR DEC(__LCC__ / 100) +# define COMPILER_VERSION_MINOR DEC(__LCC__ % 100) +# if defined(__LCC_MINOR__) +# define COMPILER_VERSION_PATCH DEC(__LCC_MINOR__) +# endif +# if defined(__GNUC__) && defined(__GNUC_MINOR__) +# define SIMULATE_ID "GNU" +# define SIMULATE_VERSION_MAJOR DEC(__GNUC__) +# define SIMULATE_VERSION_MINOR DEC(__GNUC_MINOR__) +# if defined(__GNUC_PATCHLEVEL__) +# define SIMULATE_VERSION_PATCH DEC(__GNUC_PATCHLEVEL__) +# endif +# endif + +#elif defined(__GNUC__) || defined(__GNUG__) +# define COMPILER_ID "GNU" +# if defined(__GNUC__) +# define COMPILER_VERSION_MAJOR DEC(__GNUC__) +# else +# define COMPILER_VERSION_MAJOR DEC(__GNUG__) +# endif +# if defined(__GNUC_MINOR__) +# define COMPILER_VERSION_MINOR DEC(__GNUC_MINOR__) +# endif +# if defined(__GNUC_PATCHLEVEL__) +# define COMPILER_VERSION_PATCH DEC(__GNUC_PATCHLEVEL__) +# endif + +#elif defined(_MSC_VER) +# define COMPILER_ID "MSVC" + /* _MSC_VER = VVRR */ +# define COMPILER_VERSION_MAJOR DEC(_MSC_VER / 100) +# define COMPILER_VERSION_MINOR DEC(_MSC_VER % 100) +# if defined(_MSC_FULL_VER) +# if _MSC_VER >= 1400 + /* _MSC_FULL_VER = VVRRPPPPP */ +# define COMPILER_VERSION_PATCH DEC(_MSC_FULL_VER % 100000) +# else + /* _MSC_FULL_VER = VVRRPPPP */ +# define COMPILER_VERSION_PATCH DEC(_MSC_FULL_VER % 10000) +# endif +# endif +# if defined(_MSC_BUILD) +# define COMPILER_VERSION_TWEAK DEC(_MSC_BUILD) +# endif + +#elif defined(_ADI_COMPILER) +# define COMPILER_ID "ADSP" +#if defined(__VERSIONNUM__) + /* __VERSIONNUM__ = 0xVVRRPPTT */ +# define COMPILER_VERSION_MAJOR DEC(__VERSIONNUM__ >> 24 & 0xFF) +# define COMPILER_VERSION_MINOR DEC(__VERSIONNUM__ >> 16 & 0xFF) +# define COMPILER_VERSION_PATCH DEC(__VERSIONNUM__ >> 8 & 0xFF) +# define COMPILER_VERSION_TWEAK DEC(__VERSIONNUM__ & 0xFF) +#endif + +#elif defined(__IAR_SYSTEMS_ICC__) || defined(__IAR_SYSTEMS_ICC) +# define COMPILER_ID "IAR" +# if defined(__VER__) && defined(__ICCARM__) +# define COMPILER_VERSION_MAJOR DEC((__VER__) / 1000000) +# define COMPILER_VERSION_MINOR DEC(((__VER__) / 1000) % 1000) +# define COMPILER_VERSION_PATCH DEC((__VER__) % 1000) +# define COMPILER_VERSION_INTERNAL DEC(__IAR_SYSTEMS_ICC__) +# elif defined(__VER__) && (defined(__ICCAVR__) || defined(__ICCRX__) || defined(__ICCRH850__) || defined(__ICCRL78__) || defined(__ICC430__) || defined(__ICCRISCV__) || defined(__ICCV850__) || defined(__ICC8051__) || defined(__ICCSTM8__)) +# define COMPILER_VERSION_MAJOR DEC((__VER__) / 100) +# define COMPILER_VERSION_MINOR DEC((__VER__) - (((__VER__) / 100)*100)) +# define COMPILER_VERSION_PATCH DEC(__SUBVERSION__) +# define COMPILER_VERSION_INTERNAL DEC(__IAR_SYSTEMS_ICC__) +# endif + + +/* These compilers are either not known or too old to define an + identification macro. Try to identify the platform and guess that + it is the native compiler. */ +#elif defined(__hpux) || defined(__hpua) +# define COMPILER_ID "HP" + +#else /* unknown compiler */ +# define COMPILER_ID "" +#endif + +/* Construct the string literal in pieces to prevent the source from + getting matched. Store it in a pointer rather than an array + because some compilers will just produce instructions to fill the + array rather than assigning a pointer to a static array. */ +char const* info_compiler = "INFO" ":" "compiler[" COMPILER_ID "]"; +#ifdef SIMULATE_ID +char const* info_simulate = "INFO" ":" "simulate[" SIMULATE_ID "]"; +#endif + +#ifdef __QNXNTO__ +char const* qnxnto = "INFO" ":" "qnxnto[]"; +#endif + +#if defined(__CRAYXT_COMPUTE_LINUX_TARGET) +char const *info_cray = "INFO" ":" "compiler_wrapper[CrayPrgEnv]"; +#endif + +#define STRINGIFY_HELPER(X) #X +#define STRINGIFY(X) STRINGIFY_HELPER(X) + +/* Identify known platforms by name. */ +#if defined(__linux) || defined(__linux__) || defined(linux) +# define PLATFORM_ID "Linux" + +#elif defined(__MSYS__) +# define PLATFORM_ID "MSYS" + +#elif defined(__CYGWIN__) +# define PLATFORM_ID "Cygwin" + +#elif defined(__MINGW32__) +# define PLATFORM_ID "MinGW" + +#elif defined(__APPLE__) +# define PLATFORM_ID "Darwin" + +#elif defined(_WIN32) || defined(__WIN32__) || defined(WIN32) +# define PLATFORM_ID "Windows" + +#elif defined(__FreeBSD__) || defined(__FreeBSD) +# define PLATFORM_ID "FreeBSD" + +#elif defined(__NetBSD__) || defined(__NetBSD) +# define PLATFORM_ID "NetBSD" + +#elif defined(__OpenBSD__) || defined(__OPENBSD) +# define PLATFORM_ID "OpenBSD" + +#elif defined(__sun) || defined(sun) +# define PLATFORM_ID "SunOS" + +#elif defined(_AIX) || defined(__AIX) || defined(__AIX__) || defined(__aix) || defined(__aix__) +# define PLATFORM_ID "AIX" + +#elif defined(__hpux) || defined(__hpux__) +# define PLATFORM_ID "HP-UX" + +#elif defined(__HAIKU__) +# define PLATFORM_ID "Haiku" + +#elif defined(__BeOS) || defined(__BEOS__) || defined(_BEOS) +# define PLATFORM_ID "BeOS" + +#elif defined(__QNX__) || defined(__QNXNTO__) +# define PLATFORM_ID "QNX" + +#elif defined(__tru64) || defined(_tru64) || defined(__TRU64__) +# define PLATFORM_ID "Tru64" + +#elif defined(__riscos) || defined(__riscos__) +# define PLATFORM_ID "RISCos" + +#elif defined(__sinix) || defined(__sinix__) || defined(__SINIX__) +# define PLATFORM_ID "SINIX" + +#elif defined(__UNIX_SV__) +# define PLATFORM_ID "UNIX_SV" + +#elif defined(__bsdos__) +# define PLATFORM_ID "BSDOS" + +#elif defined(_MPRAS) || defined(MPRAS) +# define PLATFORM_ID "MP-RAS" + +#elif defined(__osf) || defined(__osf__) +# define PLATFORM_ID "OSF1" + +#elif defined(_SCO_SV) || defined(SCO_SV) || defined(sco_sv) +# define PLATFORM_ID "SCO_SV" + +#elif defined(__ultrix) || defined(__ultrix__) || defined(_ULTRIX) +# define PLATFORM_ID "ULTRIX" + +#elif defined(__XENIX__) || defined(_XENIX) || defined(XENIX) +# define PLATFORM_ID "Xenix" + +#elif defined(__WATCOMC__) +# if defined(__LINUX__) +# define PLATFORM_ID "Linux" + +# elif defined(__DOS__) +# define PLATFORM_ID "DOS" + +# elif defined(__OS2__) +# define PLATFORM_ID "OS2" + +# elif defined(__WINDOWS__) +# define PLATFORM_ID "Windows3x" + +# elif defined(__VXWORKS__) +# define PLATFORM_ID "VxWorks" + +# else /* unknown platform */ +# define PLATFORM_ID +# endif + +#elif defined(__INTEGRITY) +# if defined(INT_178B) +# define PLATFORM_ID "Integrity178" + +# else /* regular Integrity */ +# define PLATFORM_ID "Integrity" +# endif + +# elif defined(_ADI_COMPILER) +# define PLATFORM_ID "ADSP" + +#else /* unknown platform */ +# define PLATFORM_ID + +#endif + +/* For windows compilers MSVC and Intel we can determine + the architecture of the compiler being used. This is because + the compilers do not have flags that can change the architecture, + but rather depend on which compiler is being used +*/ +#if defined(_WIN32) && defined(_MSC_VER) +# if defined(_M_IA64) +# define ARCHITECTURE_ID "IA64" + +# elif defined(_M_ARM64EC) +# define ARCHITECTURE_ID "ARM64EC" + +# elif defined(_M_X64) || defined(_M_AMD64) +# define ARCHITECTURE_ID "x64" + +# elif defined(_M_IX86) +# define ARCHITECTURE_ID "X86" + +# elif defined(_M_ARM64) +# define ARCHITECTURE_ID "ARM64" + +# elif defined(_M_ARM) +# if _M_ARM == 4 +# define ARCHITECTURE_ID "ARMV4I" +# elif _M_ARM == 5 +# define ARCHITECTURE_ID "ARMV5I" +# else +# define ARCHITECTURE_ID "ARMV" STRINGIFY(_M_ARM) +# endif + +# elif defined(_M_MIPS) +# define ARCHITECTURE_ID "MIPS" + +# elif defined(_M_SH) +# define ARCHITECTURE_ID "SHx" + +# else /* unknown architecture */ +# define ARCHITECTURE_ID "" +# endif + +#elif defined(__WATCOMC__) +# if defined(_M_I86) +# define ARCHITECTURE_ID "I86" + +# elif defined(_M_IX86) +# define ARCHITECTURE_ID "X86" + +# else /* unknown architecture */ +# define ARCHITECTURE_ID "" +# endif + +#elif defined(__IAR_SYSTEMS_ICC__) || defined(__IAR_SYSTEMS_ICC) +# if defined(__ICCARM__) +# define ARCHITECTURE_ID "ARM" + +# elif defined(__ICCRX__) +# define ARCHITECTURE_ID "RX" + +# elif defined(__ICCRH850__) +# define ARCHITECTURE_ID "RH850" + +# elif defined(__ICCRL78__) +# define ARCHITECTURE_ID "RL78" + +# elif defined(__ICCRISCV__) +# define ARCHITECTURE_ID "RISCV" + +# elif defined(__ICCAVR__) +# define ARCHITECTURE_ID "AVR" + +# elif defined(__ICC430__) +# define ARCHITECTURE_ID "MSP430" + +# elif defined(__ICCV850__) +# define ARCHITECTURE_ID "V850" + +# elif defined(__ICC8051__) +# define ARCHITECTURE_ID "8051" + +# elif defined(__ICCSTM8__) +# define ARCHITECTURE_ID "STM8" + +# else /* unknown architecture */ +# define ARCHITECTURE_ID "" +# endif + +#elif defined(__ghs__) +# if defined(__PPC64__) +# define ARCHITECTURE_ID "PPC64" + +# elif defined(__ppc__) +# define ARCHITECTURE_ID "PPC" + +# elif defined(__ARM__) +# define ARCHITECTURE_ID "ARM" + +# elif defined(__x86_64__) +# define ARCHITECTURE_ID "x64" + +# elif defined(__i386__) +# define ARCHITECTURE_ID "X86" + +# else /* unknown architecture */ +# define ARCHITECTURE_ID "" +# endif + +#elif defined(__TI_COMPILER_VERSION__) +# if defined(__TI_ARM__) +# define ARCHITECTURE_ID "ARM" + +# elif defined(__MSP430__) +# define ARCHITECTURE_ID "MSP430" + +# elif defined(__TMS320C28XX__) +# define ARCHITECTURE_ID "TMS320C28x" + +# elif defined(__TMS320C6X__) || defined(_TMS320C6X) +# define ARCHITECTURE_ID "TMS320C6x" + +# else /* unknown architecture */ +# define ARCHITECTURE_ID "" +# endif + +# elif defined(__ADSPSHARC__) +# define ARCHITECTURE_ID "SHARC" + +# elif defined(__ADSPBLACKFIN__) +# define ARCHITECTURE_ID "Blackfin" + +#elif defined(__TASKING__) + +# if defined(__CTC__) || defined(__CPTC__) +# define ARCHITECTURE_ID "TriCore" + +# elif defined(__CMCS__) +# define ARCHITECTURE_ID "MCS" + +# elif defined(__CARM__) +# define ARCHITECTURE_ID "ARM" + +# elif defined(__CARC__) +# define ARCHITECTURE_ID "ARC" + +# elif defined(__C51__) +# define ARCHITECTURE_ID "8051" + +# elif defined(__CPCP__) +# define ARCHITECTURE_ID "PCP" + +# else +# define ARCHITECTURE_ID "" +# endif + +#else +# define ARCHITECTURE_ID +#endif + +/* Convert integer to decimal digit literals. */ +#define DEC(n) \ + ('0' + (((n) / 10000000)%10)), \ + ('0' + (((n) / 1000000)%10)), \ + ('0' + (((n) / 100000)%10)), \ + ('0' + (((n) / 10000)%10)), \ + ('0' + (((n) / 1000)%10)), \ + ('0' + (((n) / 100)%10)), \ + ('0' + (((n) / 10)%10)), \ + ('0' + ((n) % 10)) + +/* Convert integer to hex digit literals. */ +#define HEX(n) \ + ('0' + ((n)>>28 & 0xF)), \ + ('0' + ((n)>>24 & 0xF)), \ + ('0' + ((n)>>20 & 0xF)), \ + ('0' + ((n)>>16 & 0xF)), \ + ('0' + ((n)>>12 & 0xF)), \ + ('0' + ((n)>>8 & 0xF)), \ + ('0' + ((n)>>4 & 0xF)), \ + ('0' + ((n) & 0xF)) + +/* Construct a string literal encoding the version number. */ +#ifdef COMPILER_VERSION +char const* info_version = "INFO" ":" "compiler_version[" COMPILER_VERSION "]"; + +/* Construct a string literal encoding the version number components. */ +#elif defined(COMPILER_VERSION_MAJOR) +char const info_version[] = { + 'I', 'N', 'F', 'O', ':', + 'c','o','m','p','i','l','e','r','_','v','e','r','s','i','o','n','[', + COMPILER_VERSION_MAJOR, +# ifdef COMPILER_VERSION_MINOR + '.', COMPILER_VERSION_MINOR, +# ifdef COMPILER_VERSION_PATCH + '.', COMPILER_VERSION_PATCH, +# ifdef COMPILER_VERSION_TWEAK + '.', COMPILER_VERSION_TWEAK, +# endif +# endif +# endif + ']','\0'}; +#endif + +/* Construct a string literal encoding the internal version number. */ +#ifdef COMPILER_VERSION_INTERNAL +char const info_version_internal[] = { + 'I', 'N', 'F', 'O', ':', + 'c','o','m','p','i','l','e','r','_','v','e','r','s','i','o','n','_', + 'i','n','t','e','r','n','a','l','[', + COMPILER_VERSION_INTERNAL,']','\0'}; +#elif defined(COMPILER_VERSION_INTERNAL_STR) +char const* info_version_internal = "INFO" ":" "compiler_version_internal[" COMPILER_VERSION_INTERNAL_STR "]"; +#endif + +/* Construct a string literal encoding the version number components. */ +#ifdef SIMULATE_VERSION_MAJOR +char const info_simulate_version[] = { + 'I', 'N', 'F', 'O', ':', + 's','i','m','u','l','a','t','e','_','v','e','r','s','i','o','n','[', + SIMULATE_VERSION_MAJOR, +# ifdef SIMULATE_VERSION_MINOR + '.', SIMULATE_VERSION_MINOR, +# ifdef SIMULATE_VERSION_PATCH + '.', SIMULATE_VERSION_PATCH, +# ifdef SIMULATE_VERSION_TWEAK + '.', SIMULATE_VERSION_TWEAK, +# endif +# endif +# endif + ']','\0'}; +#endif + +/* Construct the string literal in pieces to prevent the source from + getting matched. Store it in a pointer rather than an array + because some compilers will just produce instructions to fill the + array rather than assigning a pointer to a static array. */ +char const* info_platform = "INFO" ":" "platform[" PLATFORM_ID "]"; +char const* info_arch = "INFO" ":" "arch[" ARCHITECTURE_ID "]"; + + + +#if defined(__INTEL_COMPILER) && defined(_MSVC_LANG) && _MSVC_LANG < 201403L +# if defined(__INTEL_CXX11_MODE__) +# if defined(__cpp_aggregate_nsdmi) +# define CXX_STD 201402L +# else +# define CXX_STD 201103L +# endif +# else +# define CXX_STD 199711L +# endif +#elif defined(_MSC_VER) && defined(_MSVC_LANG) +# define CXX_STD _MSVC_LANG +#else +# define CXX_STD __cplusplus +#endif + +const char* info_language_standard_default = "INFO" ":" "standard_default[" +#if CXX_STD > 202002L + "23" +#elif CXX_STD > 201703L + "20" +#elif CXX_STD >= 201703L + "17" +#elif CXX_STD >= 201402L + "14" +#elif CXX_STD >= 201103L + "11" +#else + "98" +#endif +"]"; + +const char* info_language_extensions_default = "INFO" ":" "extensions_default[" +#if (defined(__clang__) || defined(__GNUC__) || defined(__xlC__) || \ + defined(__TI_COMPILER_VERSION__)) && \ + !defined(__STRICT_ANSI__) + "ON" +#else + "OFF" +#endif +"]"; + +/*--------------------------------------------------------------------------*/ + +int main(int argc, char* argv[]) +{ + int require = 0; + require += info_compiler[argc]; + require += info_platform[argc]; + require += info_arch[argc]; +#ifdef COMPILER_VERSION_MAJOR + require += info_version[argc]; +#endif +#ifdef COMPILER_VERSION_INTERNAL + require += info_version_internal[argc]; +#endif +#ifdef SIMULATE_ID + require += info_simulate[argc]; +#endif +#ifdef SIMULATE_VERSION_MAJOR + require += info_simulate_version[argc]; +#endif +#if defined(__CRAYXT_COMPUTE_LINUX_TARGET) + require += info_cray[argc]; +#endif + require += info_language_standard_default[argc]; + require += info_language_extensions_default[argc]; + (void)argv; + return require; +} diff --git a/build-emcmake/CMakeFiles/3.28.3/CompilerIdCXX/a.out.js b/build-emcmake/CMakeFiles/3.28.3/CompilerIdCXX/a.out.js new file mode 100644 index 0000000..9281774 --- /dev/null +++ b/build-emcmake/CMakeFiles/3.28.3/CompilerIdCXX/a.out.js @@ -0,0 +1,1521 @@ +// include: shell.js +// The Module object: Our interface to the outside world. We import +// and export values on it. There are various ways Module can be used: +// 1. Not defined. We create it here +// 2. A function parameter, function(moduleArg) => Promise +// 3. pre-run appended it, var Module = {}; ..generated code.. +// 4. External script tag defines var Module. +// We need to check if Module already exists (e.g. case 3 above). +// Substitution will be replaced with actual code on later stage of the build, +// this way Closure Compiler will not mangle it (e.g. case 4. above). +// Note that if you want to run closure, and also to use Module +// after the generated code, you will need to define var Module = {}; +// before the code. Then that object will be used in the code, and you +// can continue to use Module afterwards as well. +var Module = typeof Module != 'undefined' ? Module : {}; + +// Determine the runtime environment we are in. You can customize this by +// setting the ENVIRONMENT setting at compile time (see settings.js). + +// Attempt to auto-detect the environment +var ENVIRONMENT_IS_WEB = typeof window == 'object'; +var ENVIRONMENT_IS_WORKER = typeof WorkerGlobalScope != 'undefined'; +// N.b. Electron.js environment is simultaneously a NODE-environment, but +// also a web environment. +var ENVIRONMENT_IS_NODE = typeof process == 'object' && typeof process.versions == 'object' && typeof process.versions.node == 'string' && process.type != 'renderer'; +var ENVIRONMENT_IS_SHELL = !ENVIRONMENT_IS_WEB && !ENVIRONMENT_IS_NODE && !ENVIRONMENT_IS_WORKER; + +if (ENVIRONMENT_IS_NODE) { + +} + +// --pre-jses are emitted after the Module integration code, so that they can +// refer to Module (if they choose; they can also define Module) + + +// Sometimes an existing Module object exists with properties +// meant to overwrite the default module functionality. Here +// we collect those properties and reapply _after_ we configure +// the current environment's defaults to avoid having to be so +// defensive during initialization. +var moduleOverrides = {...Module}; + +var arguments_ = []; +var thisProgram = './this.program'; +var quit_ = (status, toThrow) => { + throw toThrow; +}; + +// `/` should be present at the end if `scriptDirectory` is not empty +var scriptDirectory = ''; +function locateFile(path) { + if (Module['locateFile']) { + return Module['locateFile'](path, scriptDirectory); + } + return scriptDirectory + path; +} + +// Hooks that are implemented differently in different runtime environments. +var readAsync, readBinary; + +if (ENVIRONMENT_IS_NODE) { + if (typeof process == 'undefined' || !process.release || process.release.name !== 'node') throw new Error('not compiled for this environment (did you build to HTML and try to run it not on the web, or set ENVIRONMENT to something - like node - and run it someplace else - like on the web?)'); + + var nodeVersion = process.versions.node; + var numericVersion = nodeVersion.split('.').slice(0, 3); + numericVersion = (numericVersion[0] * 10000) + (numericVersion[1] * 100) + (numericVersion[2].split('-')[0] * 1); + var minVersion = 160000; + if (numericVersion < 160000) { + throw new Error('This emscripten-generated code requires node v16.0.0 (detected v' + nodeVersion + ')'); + } + + // These modules will usually be used on Node.js. Load them eagerly to avoid + // the complexity of lazy-loading. + var fs = require('fs'); + var nodePath = require('path'); + + scriptDirectory = __dirname + '/'; + +// include: node_shell_read.js +readBinary = (filename) => { + // We need to re-wrap `file://` strings to URLs. + filename = isFileURI(filename) ? new URL(filename) : filename; + var ret = fs.readFileSync(filename); + assert(Buffer.isBuffer(ret)); + return ret; +}; + +readAsync = async (filename, binary = true) => { + // See the comment in the `readBinary` function. + filename = isFileURI(filename) ? new URL(filename) : filename; + var ret = fs.readFileSync(filename, binary ? undefined : 'utf8'); + assert(binary ? Buffer.isBuffer(ret) : typeof ret == 'string'); + return ret; +}; +// end include: node_shell_read.js + if (!Module['thisProgram'] && process.argv.length > 1) { + thisProgram = process.argv[1].replace(/\\/g, '/'); + } + + arguments_ = process.argv.slice(2); + + if (typeof module != 'undefined') { + module['exports'] = Module; + } + + quit_ = (status, toThrow) => { + process.exitCode = status; + throw toThrow; + }; + +} else +if (ENVIRONMENT_IS_SHELL) { + + if ((typeof process == 'object' && typeof require === 'function') || typeof window == 'object' || typeof WorkerGlobalScope != 'undefined') throw new Error('not compiled for this environment (did you build to HTML and try to run it not on the web, or set ENVIRONMENT to something - like node - and run it someplace else - like on the web?)'); + +} else + +// Note that this includes Node.js workers when relevant (pthreads is enabled). +// Node.js workers are detected as a combination of ENVIRONMENT_IS_WORKER and +// ENVIRONMENT_IS_NODE. +if (ENVIRONMENT_IS_WEB || ENVIRONMENT_IS_WORKER) { + if (ENVIRONMENT_IS_WORKER) { // Check worker, not web, since window could be polyfilled + scriptDirectory = self.location.href; + } else if (typeof document != 'undefined' && document.currentScript) { // web + scriptDirectory = document.currentScript.src; + } + // blob urls look like blob:http://site.com/etc/etc and we cannot infer anything from them. + // otherwise, slice off the final part of the url to find the script directory. + // if scriptDirectory does not contain a slash, lastIndexOf will return -1, + // and scriptDirectory will correctly be replaced with an empty string. + // If scriptDirectory contains a query (starting with ?) or a fragment (starting with #), + // they are removed because they could contain a slash. + if (scriptDirectory.startsWith('blob:')) { + scriptDirectory = ''; + } else { + scriptDirectory = scriptDirectory.slice(0, scriptDirectory.replace(/[?#].*/, '').lastIndexOf('/')+1); + } + + if (!(typeof window == 'object' || typeof WorkerGlobalScope != 'undefined')) throw new Error('not compiled for this environment (did you build to HTML and try to run it not on the web, or set ENVIRONMENT to something - like node - and run it someplace else - like on the web?)'); + + { +// include: web_or_worker_shell_read.js +if (ENVIRONMENT_IS_WORKER) { + readBinary = (url) => { + var xhr = new XMLHttpRequest(); + xhr.open('GET', url, false); + xhr.responseType = 'arraybuffer'; + xhr.send(null); + return new Uint8Array(/** @type{!ArrayBuffer} */(xhr.response)); + }; + } + + readAsync = async (url) => { + // Fetch has some additional restrictions over XHR, like it can't be used on a file:// url. + // See https://github.com/github/fetch/pull/92#issuecomment-140665932 + // Cordova or Electron apps are typically loaded from a file:// url. + // So use XHR on webview if URL is a file URL. + if (isFileURI(url)) { + return new Promise((resolve, reject) => { + var xhr = new XMLHttpRequest(); + xhr.open('GET', url, true); + xhr.responseType = 'arraybuffer'; + xhr.onload = () => { + if (xhr.status == 200 || (xhr.status == 0 && xhr.response)) { // file URLs can return 0 + resolve(xhr.response); + return; + } + reject(xhr.status); + }; + xhr.onerror = reject; + xhr.send(null); + }); + } + var response = await fetch(url, { credentials: 'same-origin' }); + if (response.ok) { + return response.arrayBuffer(); + } + throw new Error(response.status + ' : ' + response.url); + }; +// end include: web_or_worker_shell_read.js + } +} else +{ + throw new Error('environment detection error'); +} + +var out = Module['print'] || console.log.bind(console); +var err = Module['printErr'] || console.error.bind(console); + +// Merge back in the overrides +Object.assign(Module, moduleOverrides); +// Free the object hierarchy contained in the overrides, this lets the GC +// reclaim data used. +moduleOverrides = null; +checkIncomingModuleAPI(); + +// Emit code to handle expected values on the Module object. This applies Module.x +// to the proper local x. This has two benefits: first, we only emit it if it is +// expected to arrive, and second, by using a local everywhere else that can be +// minified. + +if (Module['arguments']) arguments_ = Module['arguments'];legacyModuleProp('arguments', 'arguments_'); + +if (Module['thisProgram']) thisProgram = Module['thisProgram'];legacyModuleProp('thisProgram', 'thisProgram'); + +// perform assertions in shell.js after we set up out() and err(), as otherwise if an assertion fails it cannot print the message +// Assertions on removed incoming Module JS APIs. +assert(typeof Module['memoryInitializerPrefixURL'] == 'undefined', 'Module.memoryInitializerPrefixURL option was removed, use Module.locateFile instead'); +assert(typeof Module['pthreadMainPrefixURL'] == 'undefined', 'Module.pthreadMainPrefixURL option was removed, use Module.locateFile instead'); +assert(typeof Module['cdInitializerPrefixURL'] == 'undefined', 'Module.cdInitializerPrefixURL option was removed, use Module.locateFile instead'); +assert(typeof Module['filePackagePrefixURL'] == 'undefined', 'Module.filePackagePrefixURL option was removed, use Module.locateFile instead'); +assert(typeof Module['read'] == 'undefined', 'Module.read option was removed'); +assert(typeof Module['readAsync'] == 'undefined', 'Module.readAsync option was removed (modify readAsync in JS)'); +assert(typeof Module['readBinary'] == 'undefined', 'Module.readBinary option was removed (modify readBinary in JS)'); +assert(typeof Module['setWindowTitle'] == 'undefined', 'Module.setWindowTitle option was removed (modify emscripten_set_window_title in JS)'); +assert(typeof Module['TOTAL_MEMORY'] == 'undefined', 'Module.TOTAL_MEMORY has been renamed Module.INITIAL_MEMORY'); +legacyModuleProp('asm', 'wasmExports'); +legacyModuleProp('readAsync', 'readAsync'); +legacyModuleProp('readBinary', 'readBinary'); +legacyModuleProp('setWindowTitle', 'setWindowTitle'); +var IDBFS = 'IDBFS is no longer included by default; build with -lidbfs.js'; +var PROXYFS = 'PROXYFS is no longer included by default; build with -lproxyfs.js'; +var WORKERFS = 'WORKERFS is no longer included by default; build with -lworkerfs.js'; +var FETCHFS = 'FETCHFS is no longer included by default; build with -lfetchfs.js'; +var ICASEFS = 'ICASEFS is no longer included by default; build with -licasefs.js'; +var JSFILEFS = 'JSFILEFS is no longer included by default; build with -ljsfilefs.js'; +var OPFS = 'OPFS is no longer included by default; build with -lopfs.js'; + +var NODEFS = 'NODEFS is no longer included by default; build with -lnodefs.js'; + +assert(!ENVIRONMENT_IS_SHELL, 'shell environment detected but not enabled at build time. Add `shell` to `-sENVIRONMENT` to enable.'); + +// end include: shell.js + +// include: preamble.js +// === Preamble library stuff === + +// Documentation for the public APIs defined in this file must be updated in: +// site/source/docs/api_reference/preamble.js.rst +// A prebuilt local version of the documentation is available at: +// site/build/text/docs/api_reference/preamble.js.txt +// You can also build docs locally as HTML or other formats in site/ +// An online HTML version (which may be of a different version of Emscripten) +// is up at http://kripken.github.io/emscripten-site/docs/api_reference/preamble.js.html + +var wasmBinary = Module['wasmBinary'];legacyModuleProp('wasmBinary', 'wasmBinary'); + +if (typeof WebAssembly != 'object') { + err('no native wasm support detected'); +} + +// Wasm globals + +var wasmMemory; + +//======================================== +// Runtime essentials +//======================================== + +// whether we are quitting the application. no code should run after this. +// set in exit() and abort() +var ABORT = false; + +// set by exit() and abort(). Passed to 'onExit' handler. +// NOTE: This is also used as the process return code code in shell environments +// but only when noExitRuntime is false. +var EXITSTATUS; + +// In STRICT mode, we only define assert() when ASSERTIONS is set. i.e. we +// don't define it at all in release modes. This matches the behaviour of +// MINIMAL_RUNTIME. +// TODO(sbc): Make this the default even without STRICT enabled. +/** @type {function(*, string=)} */ +function assert(condition, text) { + if (!condition) { + abort('Assertion failed' + (text ? ': ' + text : '')); + } +} + +// We used to include malloc/free by default in the past. Show a helpful error in +// builds with assertions. +function _malloc() { + abort('malloc() called but not included in the build - add `_malloc` to EXPORTED_FUNCTIONS'); +} +function _free() { + // Show a helpful error since we used to include free by default in the past. + abort('free() called but not included in the build - add `_free` to EXPORTED_FUNCTIONS'); +} + +// Memory management + +var HEAP, +/** @type {!Int8Array} */ + HEAP8, +/** @type {!Uint8Array} */ + HEAPU8, +/** @type {!Int16Array} */ + HEAP16, +/** @type {!Uint16Array} */ + HEAPU16, +/** @type {!Int32Array} */ + HEAP32, +/** @type {!Uint32Array} */ + HEAPU32, +/** @type {!Float32Array} */ + HEAPF32, +/* BigInt64Array type is not correctly defined in closure +/** not-@type {!BigInt64Array} */ + HEAP64, +/* BigUint64Array type is not correctly defined in closure +/** not-t@type {!BigUint64Array} */ + HEAPU64, +/** @type {!Float64Array} */ + HEAPF64; + +var runtimeInitialized = false; + +/** + * Indicates whether filename is delivered via file protocol (as opposed to http/https) + * @noinline + */ +var isFileURI = (filename) => filename.startsWith('file://'); + +// include: runtime_shared.js +// include: runtime_stack_check.js +// Initializes the stack cookie. Called at the startup of main and at the startup of each thread in pthreads mode. +function writeStackCookie() { + var max = _emscripten_stack_get_end(); + assert((max & 3) == 0); + // If the stack ends at address zero we write our cookies 4 bytes into the + // stack. This prevents interference with SAFE_HEAP and ASAN which also + // monitor writes to address zero. + if (max == 0) { + max += 4; + } + // The stack grow downwards towards _emscripten_stack_get_end. + // We write cookies to the final two words in the stack and detect if they are + // ever overwritten. + HEAPU32[((max)>>2)] = 0x02135467; + HEAPU32[(((max)+(4))>>2)] = 0x89BACDFE; + // Also test the global address 0 for integrity. + HEAPU32[((0)>>2)] = 1668509029; +} + +function checkStackCookie() { + if (ABORT) return; + var max = _emscripten_stack_get_end(); + // See writeStackCookie(). + if (max == 0) { + max += 4; + } + var cookie1 = HEAPU32[((max)>>2)]; + var cookie2 = HEAPU32[(((max)+(4))>>2)]; + if (cookie1 != 0x02135467 || cookie2 != 0x89BACDFE) { + abort(`Stack overflow! Stack cookie has been overwritten at ${ptrToString(max)}, expected hex dwords 0x89BACDFE and 0x2135467, but received ${ptrToString(cookie2)} ${ptrToString(cookie1)}`); + } + // Also test the global address 0 for integrity. + if (HEAPU32[((0)>>2)] != 0x63736d65 /* 'emsc' */) { + abort('Runtime error: The application has corrupted its heap memory area (address zero)!'); + } +} +// end include: runtime_stack_check.js +// include: runtime_exceptions.js +// end include: runtime_exceptions.js +// include: runtime_debug.js +// Endianness check +(() => { + var h16 = new Int16Array(1); + var h8 = new Int8Array(h16.buffer); + h16[0] = 0x6373; + if (h8[0] !== 0x73 || h8[1] !== 0x63) throw 'Runtime error: expected the system to be little-endian! (Run with -sSUPPORT_BIG_ENDIAN to bypass)'; +})(); + +if (Module['ENVIRONMENT']) { + throw new Error('Module.ENVIRONMENT has been deprecated. To force the environment, use the ENVIRONMENT compile-time option (for example, -sENVIRONMENT=web or -sENVIRONMENT=node)'); +} + +function legacyModuleProp(prop, newName, incoming=true) { + if (!Object.getOwnPropertyDescriptor(Module, prop)) { + Object.defineProperty(Module, prop, { + configurable: true, + get() { + let extra = incoming ? ' (the initial value can be provided on Module, but after startup the value is only looked for on a local variable of that name)' : ''; + abort(`\`Module.${prop}\` has been replaced by \`${newName}\`` + extra); + + } + }); + } +} + +function consumedModuleProp(prop) { + if (!Object.getOwnPropertyDescriptor(Module, prop)) { + Object.defineProperty(Module, prop, { + configurable: true, + set() { + abort(`Attempt to set \`Module.${prop}\` after it has already been processed. This can happen, for example, when code is injected via '--post-js' rather than '--pre-js'`); + + } + }); + } +} + +function ignoredModuleProp(prop) { + if (Object.getOwnPropertyDescriptor(Module, prop)) { + abort(`\`Module.${prop}\` was supplied but \`${prop}\` not included in INCOMING_MODULE_JS_API`); + } +} + +// forcing the filesystem exports a few things by default +function isExportedByForceFilesystem(name) { + return name === 'FS_createPath' || + name === 'FS_createDataFile' || + name === 'FS_createPreloadedFile' || + name === 'FS_unlink' || + name === 'addRunDependency' || + // The old FS has some functionality that WasmFS lacks. + name === 'FS_createLazyFile' || + name === 'FS_createDevice' || + name === 'removeRunDependency'; +} + +/** + * Intercept access to a global symbol. This enables us to give informative + * warnings/errors when folks attempt to use symbols they did not include in + * their build, or no symbols that no longer exist. + */ +function hookGlobalSymbolAccess(sym, func) { + if (typeof globalThis != 'undefined' && !Object.getOwnPropertyDescriptor(globalThis, sym)) { + Object.defineProperty(globalThis, sym, { + configurable: true, + get() { + func(); + return undefined; + } + }); + } +} + +function missingGlobal(sym, msg) { + hookGlobalSymbolAccess(sym, () => { + warnOnce(`\`${sym}\` is not longer defined by emscripten. ${msg}`); + }); +} + +missingGlobal('buffer', 'Please use HEAP8.buffer or wasmMemory.buffer'); +missingGlobal('asm', 'Please use wasmExports instead'); + +function missingLibrarySymbol(sym) { + hookGlobalSymbolAccess(sym, () => { + // Can't `abort()` here because it would break code that does runtime + // checks. e.g. `if (typeof SDL === 'undefined')`. + var msg = `\`${sym}\` is a library symbol and not included by default; add it to your library.js __deps or to DEFAULT_LIBRARY_FUNCS_TO_INCLUDE on the command line`; + // DEFAULT_LIBRARY_FUNCS_TO_INCLUDE requires the name as it appears in + // library.js, which means $name for a JS name with no prefix, or name + // for a JS name like _name. + var librarySymbol = sym; + if (!librarySymbol.startsWith('_')) { + librarySymbol = '$' + sym; + } + msg += ` (e.g. -sDEFAULT_LIBRARY_FUNCS_TO_INCLUDE='${librarySymbol}')`; + if (isExportedByForceFilesystem(sym)) { + msg += '. Alternatively, forcing filesystem support (-sFORCE_FILESYSTEM) can export this for you'; + } + warnOnce(msg); + }); + + // Any symbol that is not included from the JS library is also (by definition) + // not exported on the Module object. + unexportedRuntimeSymbol(sym); +} + +function unexportedRuntimeSymbol(sym) { + if (!Object.getOwnPropertyDescriptor(Module, sym)) { + Object.defineProperty(Module, sym, { + configurable: true, + get() { + var msg = `'${sym}' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the Emscripten FAQ)`; + if (isExportedByForceFilesystem(sym)) { + msg += '. Alternatively, forcing filesystem support (-sFORCE_FILESYSTEM) can export this for you'; + } + abort(msg); + } + }); + } +} + +var runtimeDebug = true; // Switch to false at runtime to disable logging at the right times + +// Used by XXXXX_DEBUG settings to output debug messages. +function dbg(...args) { + if (!runtimeDebug && typeof runtimeDebug != 'undefined') return; + // TODO(sbc): Make this configurable somehow. Its not always convenient for + // logging to show up as warnings. + console.warn(...args); +} +// end include: runtime_debug.js +// include: memoryprofiler.js +// end include: memoryprofiler.js + + +function updateMemoryViews() { + var b = wasmMemory.buffer; + Module['HEAP8'] = HEAP8 = new Int8Array(b); + Module['HEAP16'] = HEAP16 = new Int16Array(b); + Module['HEAPU8'] = HEAPU8 = new Uint8Array(b); + Module['HEAPU16'] = HEAPU16 = new Uint16Array(b); + Module['HEAP32'] = HEAP32 = new Int32Array(b); + Module['HEAPU32'] = HEAPU32 = new Uint32Array(b); + Module['HEAPF32'] = HEAPF32 = new Float32Array(b); + Module['HEAPF64'] = HEAPF64 = new Float64Array(b); + Module['HEAP64'] = HEAP64 = new BigInt64Array(b); + Module['HEAPU64'] = HEAPU64 = new BigUint64Array(b); +} + +// end include: runtime_shared.js +assert(!Module['STACK_SIZE'], 'STACK_SIZE can no longer be set at runtime. Use -sSTACK_SIZE at link time') + +assert(typeof Int32Array != 'undefined' && typeof Float64Array !== 'undefined' && Int32Array.prototype.subarray != undefined && Int32Array.prototype.set != undefined, + 'JS engine does not provide full typed array support'); + +// If memory is defined in wasm, the user can't provide it, or set INITIAL_MEMORY +assert(!Module['wasmMemory'], 'Use of `wasmMemory` detected. Use -sIMPORTED_MEMORY to define wasmMemory externally'); +assert(!Module['INITIAL_MEMORY'], 'Detected runtime INITIAL_MEMORY setting. Use -sIMPORTED_MEMORY to define wasmMemory dynamically'); + +function preRun() { + if (Module['preRun']) { + if (typeof Module['preRun'] == 'function') Module['preRun'] = [Module['preRun']]; + while (Module['preRun'].length) { + addOnPreRun(Module['preRun'].shift()); + } + } + consumedModuleProp('preRun'); + callRuntimeCallbacks(onPreRuns); +} + +function initRuntime() { + assert(!runtimeInitialized); + runtimeInitialized = true; + + checkStackCookie(); + + + + wasmExports['__wasm_call_ctors'](); + + +} + +function preMain() { + checkStackCookie(); + +} + +function postRun() { + checkStackCookie(); + + if (Module['postRun']) { + if (typeof Module['postRun'] == 'function') Module['postRun'] = [Module['postRun']]; + while (Module['postRun'].length) { + addOnPostRun(Module['postRun'].shift()); + } + } + consumedModuleProp('postRun'); + + callRuntimeCallbacks(onPostRuns); +} + +// A counter of dependencies for calling run(). If we need to +// do asynchronous work before running, increment this and +// decrement it. Incrementing must happen in a place like +// Module.preRun (used by emcc to add file preloading). +// Note that you can add dependencies in preRun, even though +// it happens right before run - run will be postponed until +// the dependencies are met. +var runDependencies = 0; +var dependenciesFulfilled = null; // overridden to take different actions when all run dependencies are fulfilled +var runDependencyTracking = {}; +var runDependencyWatcher = null; + +function getUniqueRunDependency(id) { + var orig = id; + while (1) { + if (!runDependencyTracking[id]) return id; + id = orig + Math.random(); + } +} + +function addRunDependency(id) { + runDependencies++; + + Module['monitorRunDependencies']?.(runDependencies); + + if (id) { + assert(!runDependencyTracking[id]); + runDependencyTracking[id] = 1; + if (runDependencyWatcher === null && typeof setInterval != 'undefined') { + // Check for missing dependencies every few seconds + runDependencyWatcher = setInterval(() => { + if (ABORT) { + clearInterval(runDependencyWatcher); + runDependencyWatcher = null; + return; + } + var shown = false; + for (var dep in runDependencyTracking) { + if (!shown) { + shown = true; + err('still waiting on run dependencies:'); + } + err(`dependency: ${dep}`); + } + if (shown) { + err('(end of list)'); + } + }, 10000); + } + } else { + err('warning: run dependency added without ID'); + } +} + +function removeRunDependency(id) { + runDependencies--; + + Module['monitorRunDependencies']?.(runDependencies); + + if (id) { + assert(runDependencyTracking[id]); + delete runDependencyTracking[id]; + } else { + err('warning: run dependency removed without ID'); + } + if (runDependencies == 0) { + if (runDependencyWatcher !== null) { + clearInterval(runDependencyWatcher); + runDependencyWatcher = null; + } + if (dependenciesFulfilled) { + var callback = dependenciesFulfilled; + dependenciesFulfilled = null; + callback(); // can add another dependenciesFulfilled + } + } +} + +/** @param {string|number=} what */ +function abort(what) { + Module['onAbort']?.(what); + + what = 'Aborted(' + what + ')'; + // TODO(sbc): Should we remove printing and leave it up to whoever + // catches the exception? + err(what); + + ABORT = true; + + // Use a wasm runtime error, because a JS error might be seen as a foreign + // exception, which means we'd run destructors on it. We need the error to + // simply make the program stop. + // FIXME This approach does not work in Wasm EH because it currently does not assume + // all RuntimeErrors are from traps; it decides whether a RuntimeError is from + // a trap or not based on a hidden field within the object. So at the moment + // we don't have a way of throwing a wasm trap from JS. TODO Make a JS API that + // allows this in the wasm spec. + + // Suppress closure compiler warning here. Closure compiler's builtin extern + // definition for WebAssembly.RuntimeError claims it takes no arguments even + // though it can. + // TODO(https://github.com/google/closure-compiler/pull/3913): Remove if/when upstream closure gets fixed. + /** @suppress {checkTypes} */ + var e = new WebAssembly.RuntimeError(what); + + // Throw the error whether or not MODULARIZE is set because abort is used + // in code paths apart from instantiation where an exception is expected + // to be thrown when abort is called. + throw e; +} + +// show errors on likely calls to FS when it was not included +var FS = { + error() { + abort('Filesystem support (FS) was not included. The problem is that you are using files from JS, but files were not used from C/C++, so filesystem support was not auto-included. You can force-include filesystem support with -sFORCE_FILESYSTEM'); + }, + init() { FS.error() }, + createDataFile() { FS.error() }, + createPreloadedFile() { FS.error() }, + createLazyFile() { FS.error() }, + open() { FS.error() }, + mkdev() { FS.error() }, + registerDevice() { FS.error() }, + analyzePath() { FS.error() }, + + ErrnoError() { FS.error() }, +}; +Module['FS_createDataFile'] = FS.createDataFile; +Module['FS_createPreloadedFile'] = FS.createPreloadedFile; + +function createExportWrapper(name, nargs) { + return (...args) => { + assert(runtimeInitialized, `native function \`${name}\` called before runtime initialization`); + var f = wasmExports[name]; + assert(f, `exported native function \`${name}\` not found`); + // Only assert for too many arguments. Too few can be valid since the missing arguments will be zero filled. + assert(args.length <= nargs, `native function \`${name}\` called with ${args.length} args but expects ${nargs}`); + return f(...args); + }; +} + +var wasmBinaryFile; + +function findWasmBinary() { + return locateFile('a.out.wasm'); +} + +function getBinarySync(file) { + if (file == wasmBinaryFile && wasmBinary) { + return new Uint8Array(wasmBinary); + } + if (readBinary) { + return readBinary(file); + } + throw 'both async and sync fetching of the wasm failed'; +} + +async function getWasmBinary(binaryFile) { + // If we don't have the binary yet, load it asynchronously using readAsync. + if (!wasmBinary) { + // Fetch the binary using readAsync + try { + var response = await readAsync(binaryFile); + return new Uint8Array(response); + } catch { + // Fall back to getBinarySync below; + } + } + + // Otherwise, getBinarySync should be able to get it synchronously + return getBinarySync(binaryFile); +} + +async function instantiateArrayBuffer(binaryFile, imports) { + try { + var binary = await getWasmBinary(binaryFile); + var instance = await WebAssembly.instantiate(binary, imports); + return instance; + } catch (reason) { + err(`failed to asynchronously prepare wasm: ${reason}`); + + // Warn on some common problems. + if (isFileURI(wasmBinaryFile)) { + err(`warning: Loading from a file URI (${wasmBinaryFile}) is not supported in most browsers. See https://emscripten.org/docs/getting_started/FAQ.html#how-do-i-run-a-local-webserver-for-testing-why-does-my-program-stall-in-downloading-or-preparing`); + } + abort(reason); + } +} + +async function instantiateAsync(binary, binaryFile, imports) { + if (!binary && typeof WebAssembly.instantiateStreaming == 'function' + // Don't use streaming for file:// delivered objects in a webview, fetch them synchronously. + && !isFileURI(binaryFile) + // Avoid instantiateStreaming() on Node.js environment for now, as while + // Node.js v18.1.0 implements it, it does not have a full fetch() + // implementation yet. + // + // Reference: + // https://github.com/emscripten-core/emscripten/pull/16917 + && !ENVIRONMENT_IS_NODE + ) { + try { + var response = fetch(binaryFile, { credentials: 'same-origin' }); + var instantiationResult = await WebAssembly.instantiateStreaming(response, imports); + return instantiationResult; + } catch (reason) { + // We expect the most common failure cause to be a bad MIME type for the binary, + // in which case falling back to ArrayBuffer instantiation should work. + err(`wasm streaming compile failed: ${reason}`); + err('falling back to ArrayBuffer instantiation'); + // fall back of instantiateArrayBuffer below + }; + } + return instantiateArrayBuffer(binaryFile, imports); +} + +function getWasmImports() { + // prepare imports + return { + 'env': wasmImports, + 'wasi_snapshot_preview1': wasmImports, + } +} + +// Create the wasm instance. +// Receives the wasm imports, returns the exports. +async function createWasm() { + // Load the wasm module and create an instance of using native support in the JS engine. + // handle a generated wasm instance, receiving its exports and + // performing other necessary setup + /** @param {WebAssembly.Module=} module*/ + function receiveInstance(instance, module) { + wasmExports = instance.exports; + + + + wasmMemory = wasmExports['memory']; + + assert(wasmMemory, 'memory not found in wasm exports'); + updateMemoryViews(); + + removeRunDependency('wasm-instantiate'); + return wasmExports; + } + // wait for the pthread pool (if any) + addRunDependency('wasm-instantiate'); + + // Prefer streaming instantiation if available. + // Async compilation can be confusing when an error on the page overwrites Module + // (for example, if the order of elements is wrong, and the one defining Module is + // later), so we save Module and check it later. + var trueModule = Module; + function receiveInstantiationResult(result) { + // 'result' is a ResultObject object which has both the module and instance. + // receiveInstance() will swap in the exports (to Module.asm) so they can be called + assert(Module === trueModule, 'the Module object should not be replaced during async compilation - perhaps the order of HTML elements is wrong?'); + trueModule = null; + // TODO: Due to Closure regression https://github.com/google/closure-compiler/issues/3193, the above line no longer optimizes out down to the following line. + // When the regression is fixed, can restore the above PTHREADS-enabled path. + return receiveInstance(result['instance']); + } + + var info = getWasmImports(); + + // User shell pages can write their own Module.instantiateWasm = function(imports, successCallback) callback + // to manually instantiate the Wasm module themselves. This allows pages to + // run the instantiation parallel to any other async startup actions they are + // performing. + // Also pthreads and wasm workers initialize the wasm instance through this + // path. + if (Module['instantiateWasm']) { + return new Promise((resolve, reject) => { + try { + Module['instantiateWasm'](info, (mod, inst) => { + receiveInstance(mod, inst); + resolve(mod.exports); + }); + } catch(e) { + err(`Module.instantiateWasm callback failed with error: ${e}`); + reject(e); + } + }); + } + + wasmBinaryFile ??= findWasmBinary(); + var result = await instantiateAsync(wasmBinary, wasmBinaryFile, info); + var exports = receiveInstantiationResult(result); + return exports; +} + +// end include: preamble.js + +// Begin JS library code + + + class ExitStatus { + name = 'ExitStatus'; + constructor(status) { + this.message = `Program terminated with exit(${status})`; + this.status = status; + } + } + + var callRuntimeCallbacks = (callbacks) => { + while (callbacks.length > 0) { + // Pass the module as the first argument. + callbacks.shift()(Module); + } + }; + var onPostRuns = []; + var addOnPostRun = (cb) => onPostRuns.unshift(cb); + + var onPreRuns = []; + var addOnPreRun = (cb) => onPreRuns.unshift(cb); + + + + /** + * @param {number} ptr + * @param {string} type + */ + function getValue(ptr, type = 'i8') { + if (type.endsWith('*')) type = '*'; + switch (type) { + case 'i1': return HEAP8[ptr]; + case 'i8': return HEAP8[ptr]; + case 'i16': return HEAP16[((ptr)>>1)]; + case 'i32': return HEAP32[((ptr)>>2)]; + case 'i64': return HEAP64[((ptr)>>3)]; + case 'float': return HEAPF32[((ptr)>>2)]; + case 'double': return HEAPF64[((ptr)>>3)]; + case '*': return HEAPU32[((ptr)>>2)]; + default: abort(`invalid type for getValue: ${type}`); + } + } + + var noExitRuntime = Module['noExitRuntime'] || true; + + var ptrToString = (ptr) => { + assert(typeof ptr === 'number'); + // With CAN_ADDRESS_2GB or MEMORY64, pointers are already unsigned. + ptr >>>= 0; + return '0x' + ptr.toString(16).padStart(8, '0'); + }; + + + /** + * @param {number} ptr + * @param {number} value + * @param {string} type + */ + function setValue(ptr, value, type = 'i8') { + if (type.endsWith('*')) type = '*'; + switch (type) { + case 'i1': HEAP8[ptr] = value; break; + case 'i8': HEAP8[ptr] = value; break; + case 'i16': HEAP16[((ptr)>>1)] = value; break; + case 'i32': HEAP32[((ptr)>>2)] = value; break; + case 'i64': HEAP64[((ptr)>>3)] = BigInt(value); break; + case 'float': HEAPF32[((ptr)>>2)] = value; break; + case 'double': HEAPF64[((ptr)>>3)] = value; break; + case '*': HEAPU32[((ptr)>>2)] = value; break; + default: abort(`invalid type for setValue: ${type}`); + } + } + + var stackRestore = (val) => __emscripten_stack_restore(val); + + var stackSave = () => _emscripten_stack_get_current(); + + var warnOnce = (text) => { + warnOnce.shown ||= {}; + if (!warnOnce.shown[text]) { + warnOnce.shown[text] = 1; + if (ENVIRONMENT_IS_NODE) text = 'warning: ' + text; + err(text); + } + }; + + + var runtimeKeepaliveCounter = 0; + var keepRuntimeAlive = () => noExitRuntime || runtimeKeepaliveCounter > 0; + var _proc_exit = (code) => { + EXITSTATUS = code; + if (!keepRuntimeAlive()) { + Module['onExit']?.(code); + ABORT = true; + } + quit_(code, new ExitStatus(code)); + }; + + + /** @param {boolean|number=} implicit */ + var exitJS = (status, implicit) => { + EXITSTATUS = status; + + checkUnflushedContent(); + + // if exit() was called explicitly, warn the user if the runtime isn't actually being shut down + if (keepRuntimeAlive() && !implicit) { + var msg = `program exited (with status: ${status}), but keepRuntimeAlive() is set (counter=${runtimeKeepaliveCounter}) due to an async operation, so halting execution but not exiting the runtime or preventing further async execution (you can use emscripten_force_exit, if you want to force a true shutdown)`; + err(msg); + } + + _proc_exit(status); + }; + + var handleException = (e) => { + // Certain exception types we do not treat as errors since they are used for + // internal control flow. + // 1. ExitStatus, which is thrown by exit() + // 2. "unwind", which is thrown by emscripten_unwind_to_js_event_loop() and others + // that wish to return to JS event loop. + if (e instanceof ExitStatus || e == 'unwind') { + return EXITSTATUS; + } + checkStackCookie(); + if (e instanceof WebAssembly.RuntimeError) { + if (_emscripten_stack_get_current() <= 0) { + err('Stack overflow detected. You can try increasing -sSTACK_SIZE (currently set to 65536)'); + } + } + quit_(1, e); + }; + + var lengthBytesUTF8 = (str) => { + var len = 0; + for (var i = 0; i < str.length; ++i) { + // Gotcha: charCodeAt returns a 16-bit word that is a UTF-16 encoded code + // unit, not a Unicode code point of the character! So decode + // UTF16->UTF32->UTF8. + // See http://unicode.org/faq/utf_bom.html#utf16-3 + var c = str.charCodeAt(i); // possibly a lead surrogate + if (c <= 0x7F) { + len++; + } else if (c <= 0x7FF) { + len += 2; + } else if (c >= 0xD800 && c <= 0xDFFF) { + len += 4; ++i; + } else { + len += 3; + } + } + return len; + }; + + var stringToUTF8Array = (str, heap, outIdx, maxBytesToWrite) => { + assert(typeof str === 'string', `stringToUTF8Array expects a string (got ${typeof str})`); + // Parameter maxBytesToWrite is not optional. Negative values, 0, null, + // undefined and false each don't write out any bytes. + if (!(maxBytesToWrite > 0)) + return 0; + + var startIdx = outIdx; + var endIdx = outIdx + maxBytesToWrite - 1; // -1 for string null terminator. + for (var i = 0; i < str.length; ++i) { + // Gotcha: charCodeAt returns a 16-bit word that is a UTF-16 encoded code + // unit, not a Unicode code point of the character! So decode + // UTF16->UTF32->UTF8. + // See http://unicode.org/faq/utf_bom.html#utf16-3 + // For UTF8 byte structure, see http://en.wikipedia.org/wiki/UTF-8#Description + // and https://www.ietf.org/rfc/rfc2279.txt + // and https://tools.ietf.org/html/rfc3629 + var u = str.charCodeAt(i); // possibly a lead surrogate + if (u >= 0xD800 && u <= 0xDFFF) { + var u1 = str.charCodeAt(++i); + u = 0x10000 + ((u & 0x3FF) << 10) | (u1 & 0x3FF); + } + if (u <= 0x7F) { + if (outIdx >= endIdx) break; + heap[outIdx++] = u; + } else if (u <= 0x7FF) { + if (outIdx + 1 >= endIdx) break; + heap[outIdx++] = 0xC0 | (u >> 6); + heap[outIdx++] = 0x80 | (u & 63); + } else if (u <= 0xFFFF) { + if (outIdx + 2 >= endIdx) break; + heap[outIdx++] = 0xE0 | (u >> 12); + heap[outIdx++] = 0x80 | ((u >> 6) & 63); + heap[outIdx++] = 0x80 | (u & 63); + } else { + if (outIdx + 3 >= endIdx) break; + if (u > 0x10FFFF) warnOnce('Invalid Unicode code point ' + ptrToString(u) + ' encountered when serializing a JS string to a UTF-8 string in wasm memory! (Valid unicode code points should be in range 0-0x10FFFF).'); + heap[outIdx++] = 0xF0 | (u >> 18); + heap[outIdx++] = 0x80 | ((u >> 12) & 63); + heap[outIdx++] = 0x80 | ((u >> 6) & 63); + heap[outIdx++] = 0x80 | (u & 63); + } + } + // Null-terminate the pointer to the buffer. + heap[outIdx] = 0; + return outIdx - startIdx; + }; + var stringToUTF8 = (str, outPtr, maxBytesToWrite) => { + assert(typeof maxBytesToWrite == 'number', 'stringToUTF8(str, outPtr, maxBytesToWrite) is missing the third parameter that specifies the length of the output buffer!'); + return stringToUTF8Array(str, HEAPU8, outPtr, maxBytesToWrite); + }; + + var stackAlloc = (sz) => __emscripten_stack_alloc(sz); + var stringToUTF8OnStack = (str) => { + var size = lengthBytesUTF8(str) + 1; + var ret = stackAlloc(size); + stringToUTF8(str, ret, size); + return ret; + }; +// End JS library code + +function checkIncomingModuleAPI() { + ignoredModuleProp('fetchSettings'); +} +var wasmImports = { + +}; +var wasmExports; +createWasm(); +var ___wasm_call_ctors = createExportWrapper('__wasm_call_ctors', 0); +var _main = Module['_main'] = createExportWrapper('__main_argc_argv', 2); +var _fflush = createExportWrapper('fflush', 1); +var _emscripten_stack_init = () => (_emscripten_stack_init = wasmExports['emscripten_stack_init'])(); +var _emscripten_stack_get_free = () => (_emscripten_stack_get_free = wasmExports['emscripten_stack_get_free'])(); +var _emscripten_stack_get_base = () => (_emscripten_stack_get_base = wasmExports['emscripten_stack_get_base'])(); +var _emscripten_stack_get_end = () => (_emscripten_stack_get_end = wasmExports['emscripten_stack_get_end'])(); +var __emscripten_stack_restore = (a0) => (__emscripten_stack_restore = wasmExports['_emscripten_stack_restore'])(a0); +var __emscripten_stack_alloc = (a0) => (__emscripten_stack_alloc = wasmExports['_emscripten_stack_alloc'])(a0); +var _emscripten_stack_get_current = () => (_emscripten_stack_get_current = wasmExports['emscripten_stack_get_current'])(); + + +// include: postamble.js +// === Auto-generated postamble setup entry stuff === + +var missingLibrarySymbols = [ + 'writeI53ToI64', + 'writeI53ToI64Clamped', + 'writeI53ToI64Signaling', + 'writeI53ToU64Clamped', + 'writeI53ToU64Signaling', + 'readI53FromI64', + 'readI53FromU64', + 'convertI32PairToI53', + 'convertI32PairToI53Checked', + 'convertU32PairToI53', + 'bigintToI53Checked', + 'getTempRet0', + 'setTempRet0', + 'zeroMemory', + 'getHeapMax', + 'abortOnCannotGrowMemory', + 'growMemory', + 'strError', + 'inetPton4', + 'inetNtop4', + 'inetPton6', + 'inetNtop6', + 'readSockaddr', + 'writeSockaddr', + 'emscriptenLog', + 'readEmAsmArgs', + 'jstoi_q', + 'getExecutableName', + 'listenOnce', + 'autoResumeAudioContext', + 'getDynCaller', + 'dynCall', + 'runtimeKeepalivePush', + 'runtimeKeepalivePop', + 'callUserCallback', + 'maybeExit', + 'asmjsMangle', + 'asyncLoad', + 'alignMemory', + 'mmapAlloc', + 'HandleAllocator', + 'getNativeTypeSize', + 'addOnInit', + 'addOnPostCtor', + 'addOnPreMain', + 'addOnExit', + 'STACK_SIZE', + 'STACK_ALIGN', + 'POINTER_SIZE', + 'ASSERTIONS', + 'getCFunc', + 'ccall', + 'cwrap', + 'uleb128Encode', + 'sigToWasmTypes', + 'generateFuncType', + 'convertJsFunctionToWasm', + 'getEmptyTableSlot', + 'updateTableMap', + 'getFunctionAddress', + 'addFunction', + 'removeFunction', + 'reallyNegative', + 'unSign', + 'strLen', + 'reSign', + 'formatString', + 'UTF8ArrayToString', + 'UTF8ToString', + 'intArrayFromString', + 'intArrayToString', + 'AsciiToString', + 'stringToAscii', + 'UTF16ToString', + 'stringToUTF16', + 'lengthBytesUTF16', + 'UTF32ToString', + 'stringToUTF32', + 'lengthBytesUTF32', + 'stringToNewUTF8', + 'writeArrayToMemory', + 'registerKeyEventCallback', + 'maybeCStringToJsString', + 'findEventTarget', + 'getBoundingClientRect', + 'fillMouseEventData', + 'registerMouseEventCallback', + 'registerWheelEventCallback', + 'registerUiEventCallback', + 'registerFocusEventCallback', + 'fillDeviceOrientationEventData', + 'registerDeviceOrientationEventCallback', + 'fillDeviceMotionEventData', + 'registerDeviceMotionEventCallback', + 'screenOrientation', + 'fillOrientationChangeEventData', + 'registerOrientationChangeEventCallback', + 'fillFullscreenChangeEventData', + 'registerFullscreenChangeEventCallback', + 'JSEvents_requestFullscreen', + 'JSEvents_resizeCanvasForFullscreen', + 'registerRestoreOldStyle', + 'hideEverythingExceptGivenElement', + 'restoreHiddenElements', + 'setLetterbox', + 'softFullscreenResizeWebGLRenderTarget', + 'doRequestFullscreen', + 'fillPointerlockChangeEventData', + 'registerPointerlockChangeEventCallback', + 'registerPointerlockErrorEventCallback', + 'requestPointerLock', + 'fillVisibilityChangeEventData', + 'registerVisibilityChangeEventCallback', + 'registerTouchEventCallback', + 'fillGamepadEventData', + 'registerGamepadEventCallback', + 'registerBeforeUnloadEventCallback', + 'fillBatteryEventData', + 'battery', + 'registerBatteryEventCallback', + 'setCanvasElementSize', + 'getCanvasElementSize', + 'jsStackTrace', + 'getCallstack', + 'convertPCtoSourceLocation', + 'getEnvStrings', + 'checkWasiClock', + 'flush_NO_FILESYSTEM', + 'wasiRightsToMuslOFlags', + 'wasiOFlagsToMuslOFlags', + 'initRandomFill', + 'randomFill', + 'safeSetTimeout', + 'setImmediateWrapped', + 'safeRequestAnimationFrame', + 'clearImmediateWrapped', + 'registerPostMainLoop', + 'registerPreMainLoop', + 'getPromise', + 'makePromise', + 'idsToPromises', + 'makePromiseCallback', + 'ExceptionInfo', + 'findMatchingCatch', + 'Browser_asyncPrepareDataCounter', + 'isLeapYear', + 'ydayFromDate', + 'arraySum', + 'addDays', + 'getSocketFromFD', + 'getSocketAddress', + 'FS_createPreloadedFile', + 'FS_modeStringToFlags', + 'FS_getMode', + 'FS_stdin_getChar', + 'FS_unlink', + 'FS_createDataFile', + 'FS_mkdirTree', + '_setNetworkCallback', + 'heapObjectForWebGLType', + 'toTypedArrayIndex', + 'webgl_enable_ANGLE_instanced_arrays', + 'webgl_enable_OES_vertex_array_object', + 'webgl_enable_WEBGL_draw_buffers', + 'webgl_enable_WEBGL_multi_draw', + 'webgl_enable_EXT_polygon_offset_clamp', + 'webgl_enable_EXT_clip_control', + 'webgl_enable_WEBGL_polygon_mode', + 'emscriptenWebGLGet', + 'computeUnpackAlignedImageSize', + 'colorChannelsInGlTextureFormat', + 'emscriptenWebGLGetTexPixelData', + 'emscriptenWebGLGetUniform', + 'webglGetUniformLocation', + 'webglPrepareUniformLocationsBeforeFirstUse', + 'webglGetLeftBracePos', + 'emscriptenWebGLGetVertexAttrib', + '__glGetActiveAttribOrUniform', + 'writeGLArray', + 'registerWebGlEventCallback', + 'runAndAbortIfError', + 'ALLOC_NORMAL', + 'ALLOC_STACK', + 'allocate', + 'writeStringToMemory', + 'writeAsciiToMemory', + 'demangle', + 'stackTrace', +]; +missingLibrarySymbols.forEach(missingLibrarySymbol) + +var unexportedSymbols = [ + 'run', + 'addRunDependency', + 'removeRunDependency', + 'out', + 'err', + 'callMain', + 'abort', + 'wasmMemory', + 'wasmExports', + 'writeStackCookie', + 'checkStackCookie', + 'INT53_MAX', + 'INT53_MIN', + 'stackSave', + 'stackRestore', + 'stackAlloc', + 'ptrToString', + 'exitJS', + 'ENV', + 'ERRNO_CODES', + 'DNS', + 'Protocols', + 'Sockets', + 'timers', + 'warnOnce', + 'readEmAsmArgsArray', + 'jstoi_s', + 'handleException', + 'keepRuntimeAlive', + 'wasmTable', + 'noExitRuntime', + 'addOnPreRun', + 'addOnPostRun', + 'freeTableIndexes', + 'functionsInTableMap', + 'setValue', + 'getValue', + 'PATH', + 'PATH_FS', + 'UTF8Decoder', + 'stringToUTF8Array', + 'stringToUTF8', + 'lengthBytesUTF8', + 'UTF16Decoder', + 'stringToUTF8OnStack', + 'JSEvents', + 'specialHTMLTargets', + 'findCanvasEventTarget', + 'currentFullscreenStrategy', + 'restoreOldWindowedStyle', + 'UNWIND_CACHE', + 'ExitStatus', + 'emSetImmediate', + 'emClearImmediate_deps', + 'emClearImmediate', + 'promiseMap', + 'uncaughtExceptionCount', + 'exceptionLast', + 'exceptionCaught', + 'Browser', + 'getPreloadedImageData__data', + 'wget', + 'MONTH_DAYS_REGULAR', + 'MONTH_DAYS_LEAP', + 'MONTH_DAYS_REGULAR_CUMULATIVE', + 'MONTH_DAYS_LEAP_CUMULATIVE', + 'SYSCALLS', + 'preloadPlugins', + 'FS_stdin_getChar_buffer', + 'FS_createPath', + 'FS_createDevice', + 'FS_readFile', + 'FS', + 'FS_createLazyFile', + 'MEMFS', + 'TTY', + 'PIPEFS', + 'SOCKFS', + 'tempFixedLengthArray', + 'miniTempWebGLFloatBuffers', + 'miniTempWebGLIntBuffers', + 'GL', + 'AL', + 'GLUT', + 'EGL', + 'GLEW', + 'IDBStore', + 'SDL', + 'SDL_gfx', + 'allocateUTF8', + 'allocateUTF8OnStack', + 'print', + 'printErr', +]; +unexportedSymbols.forEach(unexportedRuntimeSymbol); + + + +var calledRun; + +function callMain(args = []) { + assert(runDependencies == 0, 'cannot call main when async dependencies remain! (listen on Module["onRuntimeInitialized"])'); + assert(typeof onPreRuns === 'undefined' || onPreRuns.length == 0, 'cannot call main when preRun functions remain to be called'); + + var entryFunction = _main; + + args.unshift(thisProgram); + + var argc = args.length; + var argv = stackAlloc((argc + 1) * 4); + var argv_ptr = argv; + args.forEach((arg) => { + HEAPU32[((argv_ptr)>>2)] = stringToUTF8OnStack(arg); + argv_ptr += 4; + }); + HEAPU32[((argv_ptr)>>2)] = 0; + + try { + + var ret = entryFunction(argc, argv); + + // if we're not running an evented main loop, it's time to exit + exitJS(ret, /* implicit = */ true); + return ret; + } catch (e) { + return handleException(e); + } +} + +function stackCheckInit() { + // This is normally called automatically during __wasm_call_ctors but need to + // get these values before even running any of the ctors so we call it redundantly + // here. + _emscripten_stack_init(); + // TODO(sbc): Move writeStackCookie to native to to avoid this. + writeStackCookie(); +} + +function run(args = arguments_) { + + if (runDependencies > 0) { + dependenciesFulfilled = run; + return; + } + + stackCheckInit(); + + preRun(); + + // a preRun added a dependency, run will be called later + if (runDependencies > 0) { + dependenciesFulfilled = run; + return; + } + + function doRun() { + // run may have just been called through dependencies being fulfilled just in this very frame, + // or while the async setStatus time below was happening + assert(!calledRun); + calledRun = true; + Module['calledRun'] = true; + + if (ABORT) return; + + initRuntime(); + + preMain(); + + Module['onRuntimeInitialized']?.(); + consumedModuleProp('onRuntimeInitialized'); + + var noInitialRun = Module['noInitialRun'];legacyModuleProp('noInitialRun', 'noInitialRun'); + if (!noInitialRun) callMain(args); + + postRun(); + } + + if (Module['setStatus']) { + Module['setStatus']('Running...'); + setTimeout(() => { + setTimeout(() => Module['setStatus'](''), 1); + doRun(); + }, 1); + } else + { + doRun(); + } + checkStackCookie(); +} + +function checkUnflushedContent() { + // Compiler settings do not allow exiting the runtime, so flushing + // the streams is not possible. but in ASSERTIONS mode we check + // if there was something to flush, and if so tell the user they + // should request that the runtime be exitable. + // Normally we would not even include flush() at all, but in ASSERTIONS + // builds we do so just for this check, and here we see if there is any + // content to flush, that is, we check if there would have been + // something a non-ASSERTIONS build would have not seen. + // How we flush the streams depends on whether we are in SYSCALLS_REQUIRE_FILESYSTEM=0 + // mode (which has its own special function for this; otherwise, all + // the code is inside libc) + var oldOut = out; + var oldErr = err; + var has = false; + out = err = (x) => { + has = true; + } + try { // it doesn't matter if it fails + _fflush(0); + } catch(e) {} + out = oldOut; + err = oldErr; + if (has) { + warnOnce('stdio streams had content in them that was not flushed. you should set EXIT_RUNTIME to 1 (see the Emscripten FAQ), or make sure to emit a newline when you printf etc.'); + warnOnce('(this may also be due to not including full filesystem support - try building with -sFORCE_FILESYSTEM)'); + } +} + +if (Module['preInit']) { + if (typeof Module['preInit'] == 'function') Module['preInit'] = [Module['preInit']]; + while (Module['preInit'].length > 0) { + Module['preInit'].pop()(); + } +} +consumedModuleProp('preInit'); + +run(); + +// end include: postamble.js + diff --git a/build-emcmake/CMakeFiles/3.28.3/CompilerIdCXX/a.out.wasm b/build-emcmake/CMakeFiles/3.28.3/CompilerIdCXX/a.out.wasm new file mode 100755 index 0000000000000000000000000000000000000000..15fd07e3924a8dfd418f55f4d9dbd30871d7f973 GIT binary patch literal 1791 zcmai#J9FDc5P|JmEV&lRhsMpq{bO}5`ehdyWRb6_jp)<-EA`fU`s;> zO0U;rJ?dWd*sBA81D=do4-S}A0P87ZI#<+8mS?kBRn78@N;m5;#xhyP&iOgdjw?N8 zo}Q{2b&xhg-}8L7?X-jNC5JJ~`h*s>>bB=u^(Y9t0J>$h?UrxZVY4oq6JXg!!;8Bw zpfKgMyY;Zui5%bRMt1$!YWb}QGIN*an@(gkLdSvZyLE?l*MXtgcltU05#;8qOS;hM zQiu-lnaes#AgF_~aLGvqQjf#X@gq>@EDHFj6*_f_F81qDEAXwzKJ*+0!$0J774(eu zm%_Gti>Gvf;HEAVYS6nfS!v=uR%vq5~4fBy0!4b^IVpN)eC}06cU7-_7Pf=qyR^~q?sPPmvf#W#g zibKZQKHCJ56>k@T? zP>44WBO#EaSQJy#A}(Ul6(vHI2$lLS;gSJ=p2{3=lH)So#N|kov5d>HxRpBI#@l$y z6%}%Y@t!Ll5b8mS zs$s3ne@Rg5DQW}Pal;i4@u5U*5^4)KaVrv!@DXms;&F<4f=}?VE4B%>-A@O^4(=4R zVL&J)|GGBMc>e$(9Gjhwi!4b?HpXTA^>bm<*4l zXJRUa)PjRXzezBEm5Jz|Cy3vqtc?yPzerdrm`vLK&6(2UI|w84q%po@LYeqy#0dG)A0LNSgU15{j}X81mf_ zmLG(t7MaxLib@h9GJ1vIn8{puEZP1PpviqiLf7~L!h5i;=t;*_$|K3Up9s^mKN!8> zvYP(LKG=KuY_lG;J1x%%_uuzyzxf=J$&P17jUa6A_s4cve=(4qPpNQrspfR8Bd1}< zUbO#guWv`?)IYMrqYF)S{W)A*|60#FaY9MiUrnyH>PjlCu3iY_YQ8>G>2LvqDSDRZ z`G}q>J@6eXL{!;jiFWKLrn;J|Xosz?M|oVH;qOo3R-?tDTGeLp=w-rjOb;@=~i;x KR?|0VYyJW1zny*n literal 0 HcmV?d00001 diff --git a/build-emcmake/CMakeFiles/CMakeConfigureLog.yaml b/build-emcmake/CMakeFiles/CMakeConfigureLog.yaml new file mode 100644 index 0000000..c05f172 --- /dev/null +++ b/build-emcmake/CMakeFiles/CMakeConfigureLog.yaml @@ -0,0 +1,254 @@ + +--- +events: + - + kind: "message-v1" + backtrace: + - "/usr/share/cmake-3.28/Modules/CMakeDetermineSystem.cmake:228 (message)" + - "CMakeLists.txt:3 (project)" + message: | + The target system is: Emscripten - 1 - x86 + The host system is: Linux - 6.8.0-53-generic - x86_64 + - + kind: "message-v1" + backtrace: + - "/usr/share/cmake-3.28/Modules/CMakeDetermineCompilerId.cmake:17 (message)" + - "/usr/share/cmake-3.28/Modules/CMakeDetermineCompilerId.cmake:64 (__determine_compiler_id_test)" + - "/usr/share/cmake-3.28/Modules/CMakeDetermineCXXCompiler.cmake:126 (CMAKE_DETERMINE_COMPILER_ID)" + - "CMakeLists.txt:3 (project)" + message: | + Compiling the CXX compiler identification source file "CMakeCXXCompilerId.cpp" succeeded. + Compiler: /home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/em++ + Build flags: + Id flags: + + The output was: + 0 + shared:INFO: (Emscripten: Running sanity checks) + cache:INFO: generating system asset: symbol_lists/5942949263c8e6ecd538c6aa2e8973567049bbc7.json... (this will be cached in "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/cache/symbol_lists/5942949263c8e6ecd538c6aa2e8973567049bbc7.json" for subsequent builds) + cache:INFO: - ok + + + Compilation of the CXX compiler identification source "CMakeCXXCompilerId.cpp" produced "a.out.js" + + Compilation of the CXX compiler identification source "CMakeCXXCompilerId.cpp" produced "a.out.wasm" + + The CXX compiler identification could not be found in: + /home/romazan/Рабочий Ñтол/cproject/build-emcmake/CMakeFiles/3.28.3/CompilerIdCXX/a.out.js + + The CXX compiler identification is Clang, found in: + /home/romazan/Рабочий Ñтол/cproject/build-emcmake/CMakeFiles/3.28.3/CompilerIdCXX/a.out.wasm + + - + kind: "try_compile-v1" + backtrace: + - "/usr/share/cmake-3.28/Modules/CMakeDetermineCompilerABI.cmake:57 (try_compile)" + - "/usr/share/cmake-3.28/Modules/CMakeTestCXXCompiler.cmake:26 (CMAKE_DETERMINE_COMPILER_ABI)" + - "CMakeLists.txt:3 (project)" + checks: + - "Detecting CXX compiler ABI info" + directories: + source: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/cproject/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-KFqeHh" + binary: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/cproject/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-KFqeHh" + cmakeVariables: + CMAKE_CXX_COMPILER_CLANG_SCAN_DEPS: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/emscan-deps" + CMAKE_CXX_FLAGS: "" + CMAKE_CXX_FLAGS_DEBUG: "-g" + CMAKE_EXE_LINKER_FLAGS: "" + CMAKE_MODULE_PATH: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules" + buildResult: + variable: "CMAKE_CXX_ABI_COMPILED" + cached: true + stdout: | + Change Dir: '/home/romazan/Рабочий Ñтол/cproject/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-KFqeHh' + + Run Build Command(s): /usr/bin/cmake -E env VERBOSE=1 /usr/bin/gmake -f Makefile cmTC_63219/fast + /usr/bin/gmake -f CMakeFiles/cmTC_63219.dir/build.make CMakeFiles/cmTC_63219.dir/build + gmake[1]: Entering directory '/home/romazan/Рабочий Ñтол/cproject/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-KFqeHh' + Building CXX object CMakeFiles/cmTC_63219.dir/CMakeCXXCompilerABI.cpp.o + "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/em++" -v -MD -MT CMakeFiles/cmTC_63219.dir/CMakeCXXCompilerABI.cpp.o -MF CMakeFiles/cmTC_63219.dir/CMakeCXXCompilerABI.cpp.o.d -o CMakeFiles/cmTC_63219.dir/CMakeCXXCompilerABI.cpp.o -c /usr/share/cmake-3.28/Modules/CMakeCXXCompilerABI.cpp + "/home/romazan/Рабочий Ñтол/emsdk/upstream/bin/clang++" -target wasm32-unknown-emscripten -fignore-exceptions -mllvm -combiner-global-alias-analysis=false -mllvm -enable-emscripten-sjlj -mllvm -disable-lsr "--sysroot=/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/cache/sysroot" -DEMSCRIPTEN -Xclang -iwithsysroot/include/fakesdl -Xclang -iwithsysroot/include/compat -v -MD -MT CMakeFiles/cmTC_63219.dir/CMakeCXXCompilerABI.cpp.o -MF CMakeFiles/cmTC_63219.dir/CMakeCXXCompilerABI.cpp.o.d -oCMakeFiles/cmTC_63219.dir/CMakeCXXCompilerABI.cpp.o -c /usr/share/cmake-3.28/Modules/CMakeCXXCompilerABI.cpp + clang version 21.0.0git (https:/github.com/llvm/llvm-project 4775e6d9099467df9363e1a3cd5950cc3d2fde05) + Target: wasm32-unknown-emscripten + Thread model: posix + InstalledDir: /home/romazan/Рабочий Ñтол/emsdk/upstream/bin + (in-process) + "/home/romazan/Рабочий Ñтол/emsdk/upstream/bin/clang-21" -cc1 -triple wasm32-unknown-emscripten -emit-obj -disable-free -clear-ast-before-backend -disable-llvm-verifier -discard-value-names -main-file-name CMakeCXXCompilerABI.cpp -mrelocation-model static -mframe-pointer=none -ffp-contract=on -fno-rounding-math -mconstructor-aliases -target-cpu generic -fvisibility=hidden -debugger-tuning=gdb "-fdebug-compilation-dir=/home/romazan/Рабочий Ñтол/cproject/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-KFqeHh" -v "-fcoverage-compilation-dir=/home/romazan/Рабочий Ñтол/cproject/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-KFqeHh" -resource-dir "/home/romazan/Рабочий Ñтол/emsdk/upstream/lib/clang/21" -dependency-file CMakeFiles/cmTC_63219.dir/CMakeCXXCompilerABI.cpp.o.d -MT CMakeFiles/cmTC_63219.dir/CMakeCXXCompilerABI.cpp.o -sys-header-deps -D EMSCRIPTEN -isysroot "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/cache/sysroot" -internal-isystem "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/wasm32-emscripten/c++/v1" -internal-isystem "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/c++/v1" -internal-isystem "/home/romazan/Рабочий Ñтол/emsdk/upstream/lib/clang/21/include" -internal-isystem "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/wasm32-emscripten" -internal-isystem "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/cache/sysroot/include" -fdeprecated-macro -ferror-limit 19 -fgnuc-version=4.2.1 -fskip-odr-check-in-gmf -fcxx-exceptions -fignore-exceptions -fexceptions -iwithsysroot/include/fakesdl -iwithsysroot/include/compat -mllvm -combiner-global-alias-analysis=false -mllvm -enable-emscripten-sjlj -mllvm -disable-lsr -o CMakeFiles/cmTC_63219.dir/CMakeCXXCompilerABI.cpp.o -x c++ /usr/share/cmake-3.28/Modules/CMakeCXXCompilerABI.cpp + clang -cc1 version 21.0.0git based upon LLVM 21.0.0git default target x86_64-unknown-linux-gnu + ignoring nonexistent directory "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/wasm32-emscripten/c++/v1" + ignoring nonexistent directory "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/wasm32-emscripten" + #include "..." search starts here: + #include <...> search starts here: + /home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/fakesdl + /home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat + /home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/c++/v1 + /home/romazan/Рабочий Ñтол/emsdk/upstream/lib/clang/21/include + /home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/cache/sysroot/include + End of search list. + Linking CXX executable cmTC_63219.js + /usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_63219.dir/link.txt --verbose=1 + "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/em++" -v @CMakeFiles/cmTC_63219.dir/objects1.rsp -o cmTC_63219.js + "/home/romazan/Рабочий Ñтол/emsdk/upstream/bin/clang" --version + "/home/romazan/Рабочий Ñтол/emsdk/upstream/bin/wasm-ld" -o cmTC_63219.wasm CMakeFiles/cmTC_63219.dir/CMakeCXXCompilerABI.cpp.o "-L/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/cache/sysroot/lib/wasm32-emscripten" "-L/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/src/lib" -lGL-getprocaddr -lal -lhtml5 -lstubs-debug -lnoexit -lc-debug -ldlmalloc-debug -lcompiler_rt -lc++-noexcept -lc++abi-debug-noexcept -lsockets -mllvm -combiner-global-alias-analysis=false -mllvm -enable-emscripten-sjlj -mllvm -disable-lsr /tmp/tmplzzwbdr5libemscripten_js_symbols.so --strip-debug --export=emscripten_stack_get_end --export=emscripten_stack_get_free --export=emscripten_stack_get_base --export=emscripten_stack_get_current --export=emscripten_stack_init --export=_emscripten_stack_alloc --export=__wasm_call_ctors --export=_emscripten_stack_restore --export-if-defined=__start_em_asm --export-if-defined=__stop_em_asm --export-if-defined=__start_em_lib_deps --export-if-defined=__stop_em_lib_deps --export-if-defined=__start_em_js --export-if-defined=__stop_em_js --export-if-defined=main --export-if-defined=__main_argc_argv --export-if-defined=fflush --export-table -z stack-size=65536 --no-growable-memory --initial-heap=16777216 --no-entry --stack-first --table-base=1 + "/home/romazan/Рабочий Ñтол/emsdk/upstream/bin/llvm-objcopy" cmTC_63219.wasm cmTC_63219.wasm --remove-section=.debug* --remove-section=producers --remove-section=name + "/home/romazan/Рабочий Ñтол/emsdk/node/20.18.0_64bit/bin/node" "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/tools/compiler.mjs" - + gmake[1]: Leaving directory '/home/romazan/Рабочий Ñтол/cproject/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-KFqeHh' + + exitCode: 0 + - + kind: "message-v1" + backtrace: + - "/usr/share/cmake-3.28/Modules/CMakeDetermineCompilerABI.cmake:127 (message)" + - "/usr/share/cmake-3.28/Modules/CMakeTestCXXCompiler.cmake:26 (CMAKE_DETERMINE_COMPILER_ABI)" + - "CMakeLists.txt:3 (project)" + message: | + Parsed CXX implicit include dir info: rv=done + found start of include info + found start of implicit include info + add: [/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/fakesdl] + add: [/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat] + add: [/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/c++/v1] + add: [/home/romazan/Рабочий Ñтол/emsdk/upstream/lib/clang/21/include] + add: [/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/cache/sysroot/include] + end of search list found + collapse include dir [/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/fakesdl] ==> [/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/fakesdl] + collapse include dir [/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat] ==> [/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat] + collapse include dir [/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/c++/v1] ==> [/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/c++/v1] + collapse include dir [/home/romazan/Рабочий Ñтол/emsdk/upstream/lib/clang/21/include] ==> [/home/romazan/Рабочий Ñтол/emsdk/upstream/lib/clang/21/include] + collapse include dir [/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/cache/sysroot/include] ==> [/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/cache/sysroot/include] + implicit include dirs: [/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/fakesdl;/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat;/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/c++/v1;/home/romazan/Рабочий Ñтол/emsdk/upstream/lib/clang/21/include;/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/cache/sysroot/include] + + + - + kind: "message-v1" + backtrace: + - "/usr/share/cmake-3.28/Modules/CMakeDetermineCompilerABI.cmake:159 (message)" + - "/usr/share/cmake-3.28/Modules/CMakeTestCXXCompiler.cmake:26 (CMAKE_DETERMINE_COMPILER_ABI)" + - "CMakeLists.txt:3 (project)" + message: | + Parsed CXX implicit link information: + link line regex: [^( *|.*[/\\])(ld|CMAKE_LINK_STARTFILE-NOTFOUND|([^/\\]+-)?ld|collect2)[^/\\]*( |$)] + ignore line: [Change Dir: '/home/romazan/Рабочий Ñтол/cproject/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-KFqeHh'] + ignore line: [] + ignore line: [Run Build Command(s): /usr/bin/cmake -E env VERBOSE=1 /usr/bin/gmake -f Makefile cmTC_63219/fast] + ignore line: [/usr/bin/gmake -f CMakeFiles/cmTC_63219.dir/build.make CMakeFiles/cmTC_63219.dir/build] + ignore line: [gmake[1]: Entering directory '/home/romazan/Рабочий Ñтол/cproject/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-KFqeHh'] + ignore line: [Building CXX object CMakeFiles/cmTC_63219.dir/CMakeCXXCompilerABI.cpp.o] + ignore line: ["/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/em++" -v -MD -MT CMakeFiles/cmTC_63219.dir/CMakeCXXCompilerABI.cpp.o -MF CMakeFiles/cmTC_63219.dir/CMakeCXXCompilerABI.cpp.o.d -o CMakeFiles/cmTC_63219.dir/CMakeCXXCompilerABI.cpp.o -c /usr/share/cmake-3.28/Modules/CMakeCXXCompilerABI.cpp] + ignore line: [ "/home/romazan/Рабочий Ñтол/emsdk/upstream/bin/clang++" -target wasm32-unknown-emscripten -fignore-exceptions -mllvm -combiner-global-alias-analysis=false -mllvm -enable-emscripten-sjlj -mllvm -disable-lsr "--sysroot=/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/cache/sysroot" -DEMSCRIPTEN -Xclang -iwithsysroot/include/fakesdl -Xclang -iwithsysroot/include/compat -v -MD -MT CMakeFiles/cmTC_63219.dir/CMakeCXXCompilerABI.cpp.o -MF CMakeFiles/cmTC_63219.dir/CMakeCXXCompilerABI.cpp.o.d -oCMakeFiles/cmTC_63219.dir/CMakeCXXCompilerABI.cpp.o -c /usr/share/cmake-3.28/Modules/CMakeCXXCompilerABI.cpp] + ignore line: [clang version 21.0.0git (https:/github.com/llvm/llvm-project 4775e6d9099467df9363e1a3cd5950cc3d2fde05)] + ignore line: [Target: wasm32-unknown-emscripten] + ignore line: [Thread model: posix] + ignore line: [InstalledDir: /home/romazan/Рабочий Ñтол/emsdk/upstream/bin] + ignore line: [ (in-process)] + ignore line: [ "/home/romazan/Рабочий Ñтол/emsdk/upstream/bin/clang-21" -cc1 -triple wasm32-unknown-emscripten -emit-obj -disable-free -clear-ast-before-backend -disable-llvm-verifier -discard-value-names -main-file-name CMakeCXXCompilerABI.cpp -mrelocation-model static -mframe-pointer=none -ffp-contract=on -fno-rounding-math -mconstructor-aliases -target-cpu generic -fvisibility=hidden -debugger-tuning=gdb "-fdebug-compilation-dir=/home/romazan/Рабочий Ñтол/cproject/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-KFqeHh" -v "-fcoverage-compilation-dir=/home/romazan/Рабочий Ñтол/cproject/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-KFqeHh" -resource-dir "/home/romazan/Рабочий Ñтол/emsdk/upstream/lib/clang/21" -dependency-file CMakeFiles/cmTC_63219.dir/CMakeCXXCompilerABI.cpp.o.d -MT CMakeFiles/cmTC_63219.dir/CMakeCXXCompilerABI.cpp.o -sys-header-deps -D EMSCRIPTEN -isysroot "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/cache/sysroot" -internal-isystem "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/wasm32-emscripten/c++/v1" -internal-isystem "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/c++/v1" -internal-isystem "/home/romazan/Рабочий Ñтол/emsdk/upstream/lib/clang/21/include" -internal-isystem "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/wasm32-emscripten" -internal-isystem "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/cache/sysroot/include" -fdeprecated-macro -ferror-limit 19 -fgnuc-version=4.2.1 -fskip-odr-check-in-gmf -fcxx-exceptions -fignore-exceptions -fexceptions -iwithsysroot/include/fakesdl -iwithsysroot/include/compat -mllvm -combiner-global-alias-analysis=false -mllvm -enable-emscripten-sjlj -mllvm -disable-lsr -o CMakeFiles/cmTC_63219.dir/CMakeCXXCompilerABI.cpp.o -x c++ /usr/share/cmake-3.28/Modules/CMakeCXXCompilerABI.cpp] + ignore line: [clang -cc1 version 21.0.0git based upon LLVM 21.0.0git default target x86_64-unknown-linux-gnu] + ignore line: [ignoring nonexistent directory "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/wasm32-emscripten/c++/v1"] + ignore line: [ignoring nonexistent directory "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/wasm32-emscripten"] + ignore line: [#include "..." search starts here:] + ignore line: [#include <...> search starts here:] + ignore line: [ /home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/fakesdl] + ignore line: [ /home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat] + ignore line: [ /home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/c++/v1] + ignore line: [ /home/romazan/Рабочий Ñтол/emsdk/upstream/lib/clang/21/include] + ignore line: [ /home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/cache/sysroot/include] + ignore line: [End of search list.] + ignore line: [Linking CXX executable cmTC_63219.js] + ignore line: [/usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_63219.dir/link.txt --verbose=1] + ignore line: ["/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/em++" -v @CMakeFiles/cmTC_63219.dir/objects1.rsp -o cmTC_63219.js ] + ignore line: [ "/home/romazan/Рабочий Ñтол/emsdk/upstream/bin/clang" --version] + link line: [ "/home/romazan/Рабочий Ñтол/emsdk/upstream/bin/wasm-ld" -o cmTC_63219.wasm CMakeFiles/cmTC_63219.dir/CMakeCXXCompilerABI.cpp.o "-L/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/cache/sysroot/lib/wasm32-emscripten" "-L/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/src/lib" -lGL-getprocaddr -lal -lhtml5 -lstubs-debug -lnoexit -lc-debug -ldlmalloc-debug -lcompiler_rt -lc++-noexcept -lc++abi-debug-noexcept -lsockets -mllvm -combiner-global-alias-analysis=false -mllvm -enable-emscripten-sjlj -mllvm -disable-lsr /tmp/tmplzzwbdr5libemscripten_js_symbols.so --strip-debug --export=emscripten_stack_get_end --export=emscripten_stack_get_free --export=emscripten_stack_get_base --export=emscripten_stack_get_current --export=emscripten_stack_init --export=_emscripten_stack_alloc --export=__wasm_call_ctors --export=_emscripten_stack_restore --export-if-defined=__start_em_asm --export-if-defined=__stop_em_asm --export-if-defined=__start_em_lib_deps --export-if-defined=__stop_em_lib_deps --export-if-defined=__start_em_js --export-if-defined=__stop_em_js --export-if-defined=main --export-if-defined=__main_argc_argv --export-if-defined=fflush --export-table -z stack-size=65536 --no-growable-memory --initial-heap=16777216 --no-entry --stack-first --table-base=1] + arg [/home/romazan/Рабочий Ñтол/emsdk/upstream/bin/wasm-ld] ==> ignore + arg [-o] ==> ignore + arg [cmTC_63219.wasm] ==> ignore + arg [CMakeFiles/cmTC_63219.dir/CMakeCXXCompilerABI.cpp.o] ==> ignore + arg [-L/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/cache/sysroot/lib/wasm32-emscripten] ==> dir [/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/cache/sysroot/lib/wasm32-emscripten] + arg [-L/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/src/lib] ==> dir [/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/src/lib] + arg [-lGL-getprocaddr] ==> lib [GL-getprocaddr] + arg [-lal] ==> lib [al] + arg [-lhtml5] ==> lib [html5] + arg [-lstubs-debug] ==> lib [stubs-debug] + arg [-lnoexit] ==> lib [noexit] + arg [-lc-debug] ==> lib [c-debug] + arg [-ldlmalloc-debug] ==> lib [dlmalloc-debug] + arg [-lcompiler_rt] ==> lib [compiler_rt] + arg [-lc++-noexcept] ==> lib [c++-noexcept] + arg [-lc++abi-debug-noexcept] ==> lib [c++abi-debug-noexcept] + arg [-lsockets] ==> lib [sockets] + arg [-mllvm] ==> ignore + arg [-combiner-global-alias-analysis=false] ==> ignore + arg [-mllvm] ==> ignore + arg [-enable-emscripten-sjlj] ==> ignore + arg [-mllvm] ==> ignore + arg [-disable-lsr] ==> ignore + arg [/tmp/tmplzzwbdr5libemscripten_js_symbols.so] ==> ignore + arg [--strip-debug] ==> ignore + arg [--export=emscripten_stack_get_end] ==> ignore + arg [--export=emscripten_stack_get_free] ==> ignore + arg [--export=emscripten_stack_get_base] ==> ignore + arg [--export=emscripten_stack_get_current] ==> ignore + arg [--export=emscripten_stack_init] ==> ignore + arg [--export=_emscripten_stack_alloc] ==> ignore + arg [--export=__wasm_call_ctors] ==> ignore + arg [--export=_emscripten_stack_restore] ==> ignore + arg [--export-if-defined=__start_em_asm] ==> ignore + arg [--export-if-defined=__stop_em_asm] ==> ignore + arg [--export-if-defined=__start_em_lib_deps] ==> ignore + arg [--export-if-defined=__stop_em_lib_deps] ==> ignore + arg [--export-if-defined=__start_em_js] ==> ignore + arg [--export-if-defined=__stop_em_js] ==> ignore + arg [--export-if-defined=main] ==> ignore + arg [--export-if-defined=__main_argc_argv] ==> ignore + arg [--export-if-defined=fflush] ==> ignore + arg [--export-table] ==> ignore + arg [-zstack-size=65536] ==> ignore + arg [--no-growable-memory] ==> ignore + arg [--initial-heap=16777216] ==> ignore + arg [--no-entry] ==> ignore + arg [--stack-first] ==> ignore + arg [--table-base=1] ==> ignore + collapse library dir [/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/cache/sysroot/lib/wasm32-emscripten] ==> [/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/cache/sysroot/lib/wasm32-emscripten] + collapse library dir [/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/src/lib] ==> [/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/src/lib] + implicit libs: [GL-getprocaddr;al;html5;stubs-debug;noexit;c-debug;dlmalloc-debug;compiler_rt;c++-noexcept;c++abi-debug-noexcept;sockets] + implicit objs: [] + implicit dirs: [/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/cache/sysroot/lib/wasm32-emscripten;/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/src/lib] + implicit fwks: [] + + + - + kind: "try_compile-v1" + backtrace: + - "/usr/share/cmake-3.28/Modules/Internal/CheckSourceCompiles.cmake:101 (try_compile)" + - "/usr/share/cmake-3.28/Modules/CheckCXXSourceCompiles.cmake:52 (cmake_check_source_compiles)" + - "/usr/share/cmake-3.28/Modules/FindThreads.cmake:99 (CHECK_CXX_SOURCE_COMPILES)" + - "/usr/share/cmake-3.28/Modules/FindThreads.cmake:163 (_threads_check_libc)" + - "CMakeLists.txt:9 (find_package)" + checks: + - "Performing Test CMAKE_HAVE_LIBC_PTHREAD" + directories: + source: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/cproject/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-0L1xjZ" + binary: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/cproject/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-0L1xjZ" + cmakeVariables: + CMAKE_CXX_COMPILER_CLANG_SCAN_DEPS: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/emscan-deps" + CMAKE_CXX_FLAGS: "" + CMAKE_CXX_FLAGS_DEBUG: "-g" + CMAKE_EXE_LINKER_FLAGS: "" + CMAKE_MODULE_PATH: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules" + buildResult: + variable: "CMAKE_HAVE_LIBC_PTHREAD" + cached: true + stdout: | + Change Dir: '/home/romazan/Рабочий Ñтол/cproject/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-0L1xjZ' + + Run Build Command(s): /usr/bin/cmake -E env VERBOSE=1 /usr/bin/gmake -f Makefile cmTC_ad7d0/fast + /usr/bin/gmake -f CMakeFiles/cmTC_ad7d0.dir/build.make CMakeFiles/cmTC_ad7d0.dir/build + gmake[1]: вход в каталог «/home/romazan/Рабочий Ñтол/cproject/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-0L1xjZ» + Building CXX object CMakeFiles/cmTC_ad7d0.dir/src.cxx.o + "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/em++" -DCMAKE_HAVE_LIBC_PTHREAD -std=gnu++17 -MD -MT CMakeFiles/cmTC_ad7d0.dir/src.cxx.o -MF CMakeFiles/cmTC_ad7d0.dir/src.cxx.o.d -o CMakeFiles/cmTC_ad7d0.dir/src.cxx.o -c "/home/romazan/Рабочий Ñтол/cproject/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-0L1xjZ/src.cxx" + Linking CXX executable cmTC_ad7d0.js + /usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_ad7d0.dir/link.txt --verbose=1 + "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/em++" @CMakeFiles/cmTC_ad7d0.dir/objects1.rsp -o cmTC_ad7d0.js + gmake[1]: выход из каталога «/home/romazan/Рабочий Ñтол/cproject/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-0L1xjZ» + + exitCode: 0 +... diff --git a/build-emcmake/CMakeFiles/cmake.check_cache b/build-emcmake/CMakeFiles/cmake.check_cache new file mode 100644 index 0000000..3dccd73 --- /dev/null +++ b/build-emcmake/CMakeFiles/cmake.check_cache @@ -0,0 +1 @@ +# This file is generated by cmake for dependency checking of the CMakeCache.txt file diff --git a/jumpingbird.data b/jumpingbird.data index ad9702835a96164aa7b4a62f25ca89e130ba02aa..f2fcdbfe04f081995419ad6dd7d8e46063e4097d 100644 GIT binary patch literal 2425853 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 z5+DH*AOR8}0TLhq5+DH*AOR8}0TLhq5+DH*AOR8}0TLhq5+DH*AOR8}0TLhq5+DH* zAOR8}0TLhq5+DH*AOR8}0TLhq5+DH*AOR8}0TLhq5+DH*AOR8}0TLhq5+DH*AOR8} z0TLhq5+DH*AOR8}0TLhq5+DH*AOR8}0TLhq5+DH*AOR8}0TLhq5+DH*AOR8}0TLhq z5+DH*AOR8}0TLhq5+DH*AOR8}0TLhq5+DH*AOR8}0TLhq5+DH*AOR8}0TLhq5+DH* zAOR8}0TLhq5+DH*AOR8}0TLhq5+DH*AOR8}0TLhq5+DH*AOR8}0TLhq5+DH*AOR8} z0TLhq5+DH*AOR8}0TLhq5+DH*AOR8}0TLhq5+DH*AOR8}0TLhq5+DH*AOR8}0TLhq z5+DH*AOR8}0TLhq5+DH*AOR8}0TLhq5+DH*AOR8}0TLhq5+DH*AOR8}0TLhq5+DH* zAOR8}0TLhq5+DH*AOR8}0TLhq5+DH*AOR8}0TLhq5+DH*AOR8}0TLhq5+DH*AOR8} z0TLhq5+DH*AOR8}0TLhq5+DH*AOR8}0TLhq5+DH*AOR8}0TLhq5+DH*AOR8}0TLhq z5+DH*AOR8}0TLhq5+DH*AOR8}0TLhq5+DH*AOR8}0TLhq5+DH*AOR8}0TLhq5+DH* zAOR8}0TLhq5+DH*AOR8}0TLhq5+DH*AOR8}0TLhq5+DH*AOR8}0TLhq5+DH*AOR8} z0TLhq5+DH*AOR8}0TLhq5+DH*AOR8}0TLhq5+DH*AOR8}0TLhq5+DH*AOR8}0TLhq z5+DH*AOR8}0TLhq5+DH*AOR8}0TLhq5+DH*AOR8}0TLhq5+DH*AOR8}0TLhq5+DH* zAOR8}0TLhq5+DH*AOR8}0TLhq5+DH*AOR8}0TLhq5+DH*AOR8}0TLhq5+DH*AOR8} z0TLhq5+DH*AOR8}0TLhq5+DH*AOR8}0TLhq5+DH*AOR8}0TLhq5+DH*AOR8}0TLhq z5+DH*AOR8}0TLhq5+DH*AOR8}0TLhq5+DH*AOR8}0TLhq5+DH*AOR8}0TLhq5+DH* zAOR8}0TLhq5+DH*AOR8}0TLhq5+DH*AOR8}0TLhq5+DH*AOR8}0TLhq5+DH*AOR8} z0TLhq5+DH*AOR8}0TLhq5+DH*AOR8}0TLhq5+DH*AOR8}0TLhq5+DH*AOR8}0TLhq z5+DH*AOR8}0TLhq5+DH*AOR8}0TLhq5+DH*AOR8}0TLhq5+DH*AOR8}0TLhq5+DH* zAOR8}0TLhq5+DH*AOR8}0TLhq5+DH*AOR8}0TLhq5+DH*AOR8}0TLhq5+DH*AOR8} z0TLhq5+DH*AOR8}0TLhq5+DH*AOR8}0TLhq5+DH*AOR8}0TLhq5+DH*AOR8}0TLhq z5+DH*AOR8}0TLhq5+DH*AOR8}0TLhq5+DH*AOR8}0TLhq5+DH*AOR8}0TLhq5+DH* zAOR8}0TLhq5+DH*AOR8}0TLhq5+DH*AOR8}0TLhq5+DH*AOR8}0TLhq5+DH*AOR8} z0TLhq5+DH*AOR8}0TLhq5+DH*AOR8}0TLhq5+DH*AOR8}0TLhq5+DH*AOR8}0TLhq z5+DH*AOR8}0TLhq5+DH*AOR8}0TLhq5+DH*AOR8}0TLhq5+DH*AOR8}0TLhq5+DH* zAOR8}0TLhq5+DH*AOR8}0TLhq5+DH*AOR8}0TLhq5+DH*AOR8}0TLhq5+DH*AOR8} z0TLhq5+DH*AOR8}0TLhq5+DH*AOR8}0TLhq5+DH*AOR8}0TLhq5+DH*AOR8}0TLhq z5+DH*AOR8}0TLhq5+DH*AOR8}0TLhq5+DH*AOR8}0TLhq5+DH*AOR8}0TLhq5+DH* zAOR8}0TLhq5+DH*AOR8}0TLhq5+DH*AOR8}0TLhq5+DH*AOR8}0TLhq5+DH*AOR8} z0TLhq5+DH*AOR8}0TLhq5+DH*AOR8}0TLhq5+DH*AOR8}0TLhq5+DH*AOR8}0TLhq z5+DH*AOR8}0TLhq5+DH*AOR8}0TLhq5+DH*AOR8}0TLhq5+DH*AOR8}0TLhq5+DH* zAOR8}0TLhq5+DH*AOR8}0TLhq5+DH*AOR8}0TLhq5+DH*AOR8}0TLhq5+DH*AOR8} z0TLhq5+DH*AOR8}0TLhq5+DH*AOR8}0TLhq5+DH*AOR8}0TLhq5+DH*AOR8}0TLhq z5+DH*AOR8}0TLhq5+DH*AOR8}0TLhq5+DH*AOR8}0TLhq5+DH*AOR8}0TLhq5+DH* zAOR8}0TLhq5+DH*AOR8}0TLhq5+DH*AOR8}0TLhq5+DH*AOR8}0TLhq5+DH*AOR8} z0TLhq5+DH*AOR8}0TLhq5+DH*AOR8}0TLhq5+DH*AOR8}0TLhq5+DH*AOR8}0TLhq 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�ffKKqnIcYfN# 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

wn?=Z|wj5&i_r} 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 Codeimage/svg+xml

Downloading...
Resize canvasLock/hide mouse pointer    
\ No newline at end of file +Emscripten-Generated Code
Downloading...
Resize canvas Lock/hide mouse pointer    
\ No newline at end of file diff --git a/jumpingbird.js b/jumpingbird.js index 38d9b77..4502910 100644 --- a/jumpingbird.js +++ b/jumpingbird.js @@ -1 +1 @@ -var Module=typeof Module!="undefined"?Module:{};if(!Module.expectedDataFileDownloads){Module.expectedDataFileDownloads=0}Module.expectedDataFileDownloads++;(function(){if(Module["ENVIRONMENT_IS_PTHREAD"]||Module["$ww"])return;var loadPackage=function(metadata){var PACKAGE_PATH="";if(typeof window==="object"){PACKAGE_PATH=window["encodeURIComponent"](window.location.pathname.toString().substring(0,window.location.pathname.toString().lastIndexOf("/"))+"/")}else if(typeof process==="undefined"&&typeof location!=="undefined"){PACKAGE_PATH=encodeURIComponent(location.pathname.toString().substring(0,location.pathname.toString().lastIndexOf("/"))+"/")}var PACKAGE_NAME="jumpingbird.data";var REMOTE_PACKAGE_BASE="jumpingbird.data";if(typeof Module["locateFilePackage"]==="function"&&!Module["locateFile"]){Module["locateFile"]=Module["locateFilePackage"];err("warning: you defined Module.locateFilePackage, that has been renamed to Module.locateFile (using your locateFilePackage for now)")}var REMOTE_PACKAGE_NAME=Module["locateFile"]?Module["locateFile"](REMOTE_PACKAGE_BASE,""):REMOTE_PACKAGE_BASE;var REMOTE_PACKAGE_SIZE=metadata["remote_package_size"];function fetchRemotePackage(packageName,packageSize,callback,errback){if(typeof process==="object"&&typeof process.versions==="object"&&typeof process.versions.node==="string"){require("fs").readFile(packageName,function(err,contents){if(err){errback(err)}else{callback(contents.buffer)}});return}var xhr=new XMLHttpRequest;xhr.open("GET",packageName,true);xhr.responseType="arraybuffer";xhr.onprogress=function(event){var url=packageName;var size=packageSize;if(event.total)size=event.total;if(event.loaded){if(!xhr.addedTotal){xhr.addedTotal=true;if(!Module.dataFileDownloads)Module.dataFileDownloads={};Module.dataFileDownloads[url]={loaded:event.loaded,total:size}}else{Module.dataFileDownloads[url].loaded=event.loaded}var total=0;var loaded=0;var num=0;for(var download in Module.dataFileDownloads){var data=Module.dataFileDownloads[download];total+=data.total;loaded+=data.loaded;num++}total=Math.ceil(total*Module.expectedDataFileDownloads/num);if(Module["setStatus"])Module["setStatus"](`Downloading data... (${loaded}/${total})`)}else if(!Module.dataFileDownloads){if(Module["setStatus"])Module["setStatus"]("Downloading data...")}};xhr.onerror=function(event){throw new Error("NetworkError for: "+packageName)};xhr.onload=function(event){if(xhr.status==200||xhr.status==304||xhr.status==206||xhr.status==0&&xhr.response){var packageData=xhr.response;callback(packageData)}else{throw new Error(xhr.statusText+" : "+xhr.responseURL)}};xhr.send(null)}function handleError(error){console.error("package error:",error)}var fetchedCallback=null;var fetched=Module["getPreloadedPackage"]?Module["getPreloadedPackage"](REMOTE_PACKAGE_NAME,REMOTE_PACKAGE_SIZE):null;if(!fetched)fetchRemotePackage(REMOTE_PACKAGE_NAME,REMOTE_PACKAGE_SIZE,function(data){if(fetchedCallback){fetchedCallback(data);fetchedCallback=null}else{fetched=data}},handleError);function runWithFS(){function assert(check,msg){if(!check)throw msg+(new Error).stack}function DataRequest(start,end,audio){this.start=start;this.end=end;this.audio=audio}DataRequest.prototype={requests:{},open:function(mode,name){this.name=name;this.requests[name]=this;Module["addRunDependency"](`fp ${this.name}`)},send:function(){},onload:function(){var byteArray=this.byteArray.subarray(this.start,this.end);this.finish(byteArray)},finish:function(byteArray){var that=this;Module["FS_createDataFile"](this.name,null,byteArray,true,true,true);Module["removeRunDependency"](`fp ${that.name}`);this.requests[this.name]=null}};var files=metadata["files"];for(var i=0;i{throw toThrow};var ENVIRONMENT_IS_WEB=typeof window=="object";var ENVIRONMENT_IS_WORKER=typeof importScripts=="function";var ENVIRONMENT_IS_NODE=typeof process=="object"&&typeof process.versions=="object"&&typeof process.versions.node=="string";var scriptDirectory="";function locateFile(path){if(Module["locateFile"]){return Module["locateFile"](path,scriptDirectory)}return scriptDirectory+path}var read_,readAsync,readBinary;if(ENVIRONMENT_IS_NODE){var fs=require("fs");var nodePath=require("path");if(ENVIRONMENT_IS_WORKER){scriptDirectory=nodePath.dirname(scriptDirectory)+"/"}else{scriptDirectory=__dirname+"/"}read_=(filename,binary)=>{filename=isFileURI(filename)?new URL(filename):nodePath.normalize(filename);return fs.readFileSync(filename,binary?undefined:"utf8")};readBinary=filename=>{var ret=read_(filename,true);if(!ret.buffer){ret=new Uint8Array(ret)}return ret};readAsync=(filename,onload,onerror,binary=true)=>{filename=isFileURI(filename)?new URL(filename):nodePath.normalize(filename);fs.readFile(filename,binary?undefined:"utf8",(err,data)=>{if(err)onerror(err);else onload(binary?data.buffer:data)})};if(!Module["thisProgram"]&&process.argv.length>1){thisProgram=process.argv[1].replace(/\\/g,"/")}arguments_=process.argv.slice(2);if(typeof module!="undefined"){module["exports"]=Module}process.on("uncaughtException",ex=>{if(ex!=="unwind"&&!(ex instanceof ExitStatus)&&!(ex.context instanceof ExitStatus)){throw ex}});quit_=(status,toThrow)=>{process.exitCode=status;throw toThrow};Module["inspect"]=()=>"[Emscripten Module object]"}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){if(ENVIRONMENT_IS_WORKER){scriptDirectory=self.location.href}else if(typeof document!="undefined"&&document.currentScript){scriptDirectory=document.currentScript.src}if(scriptDirectory.indexOf("blob:")!==0){scriptDirectory=scriptDirectory.substr(0,scriptDirectory.replace(/[?#].*/,"").lastIndexOf("/")+1)}else{scriptDirectory=""}{read_=url=>{var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.send(null);return xhr.responseText};if(ENVIRONMENT_IS_WORKER){readBinary=url=>{var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.responseType="arraybuffer";xhr.send(null);return new Uint8Array(xhr.response)}}readAsync=(url,onload,onerror)=>{var xhr=new XMLHttpRequest;xhr.open("GET",url,true);xhr.responseType="arraybuffer";xhr.onload=()=>{if(xhr.status==200||xhr.status==0&&xhr.response){onload(xhr.response);return}onerror()};xhr.onerror=onerror;xhr.send(null)}}}else{}var out=Module["print"]||console.log.bind(console);var err=Module["printErr"]||console.error.bind(console);Object.assign(Module,moduleOverrides);moduleOverrides=null;if(Module["arguments"])arguments_=Module["arguments"];if(Module["thisProgram"])thisProgram=Module["thisProgram"];if(Module["quit"])quit_=Module["quit"];var wasmBinary;if(Module["wasmBinary"])wasmBinary=Module["wasmBinary"];if(typeof WebAssembly!="object"){abort("no native wasm support detected")}function intArrayFromBase64(s){if(typeof ENVIRONMENT_IS_NODE!="undefined"&&ENVIRONMENT_IS_NODE){var buf=Buffer.from(s,"base64");return new Uint8Array(buf.buffer,buf.byteOffset,buf.length)}var decoded=atob(s);var bytes=new Uint8Array(decoded.length);for(var i=0;ifilename.startsWith(dataURIPrefix);var isFileURI=filename=>filename.startsWith("file://");var wasmBinaryFile;wasmBinaryFile="jumpingbird.wasm";if(!isDataURI(wasmBinaryFile)){wasmBinaryFile=locateFile(wasmBinaryFile)}function getBinarySync(file){if(file==wasmBinaryFile&&wasmBinary){return new Uint8Array(wasmBinary)}if(readBinary){return readBinary(file)}throw"both async and sync fetching of the wasm failed"}function getBinaryPromise(binaryFile){if(!wasmBinary&&(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER)){if(typeof fetch=="function"&&!isFileURI(binaryFile)){return fetch(binaryFile,{credentials:"same-origin"}).then(response=>{if(!response["ok"]){throw"failed to load wasm binary file at '"+binaryFile+"'"}return response["arrayBuffer"]()}).catch(()=>getBinarySync(binaryFile))}else if(readAsync){return new Promise((resolve,reject)=>{readAsync(binaryFile,response=>resolve(new Uint8Array(response)),reject)})}}return Promise.resolve().then(()=>getBinarySync(binaryFile))}function instantiateArrayBuffer(binaryFile,imports,receiver){return getBinaryPromise(binaryFile).then(binary=>WebAssembly.instantiate(binary,imports)).then(instance=>instance).then(receiver,reason=>{err(`failed to asynchronously prepare wasm: ${reason}`);abort(reason)})}function instantiateAsync(binary,binaryFile,imports,callback){if(!binary&&typeof WebAssembly.instantiateStreaming=="function"&&!isDataURI(binaryFile)&&!isFileURI(binaryFile)&&!ENVIRONMENT_IS_NODE&&typeof fetch=="function"){return fetch(binaryFile,{credentials:"same-origin"}).then(response=>{var result=WebAssembly.instantiateStreaming(response,imports);return result.then(callback,function(reason){err(`wasm streaming compile failed: ${reason}`);err("falling back to ArrayBuffer instantiation");return instantiateArrayBuffer(binaryFile,imports,callback)})})}return instantiateArrayBuffer(binaryFile,imports,callback)}function createWasm(){var info={"env":wasmImports,"wasi_snapshot_preview1":wasmImports};function receiveInstance(instance,module){wasmExports=instance.exports;wasmMemory=wasmExports["memory"];updateMemoryViews();wasmTable=wasmExports["__indirect_function_table"];addOnInit(wasmExports["__wasm_call_ctors"]);removeRunDependency("wasm-instantiate");return wasmExports}addRunDependency("wasm-instantiate");function receiveInstantiationResult(result){receiveInstance(result["instance"])}if(Module["instantiateWasm"]){try{return Module["instantiateWasm"](info,receiveInstance)}catch(e){err(`Module.instantiateWasm callback failed with error: ${e}`);return false}}instantiateAsync(wasmBinary,wasmBinaryFile,info,receiveInstantiationResult);return{}}var tempDouble;var tempI64;var ASM_CONSTS={74008:()=>{if(typeof AudioContext!=="undefined"){return true}else if(typeof webkitAudioContext!=="undefined"){return true}return false},74155:()=>{if(typeof navigator.mediaDevices!=="undefined"&&typeof navigator.mediaDevices.getUserMedia!=="undefined"){return true}else if(typeof navigator.webkitGetUserMedia!=="undefined"){return true}return false},74389:$0=>{if(typeof Module["SDL2"]==="undefined"){Module["SDL2"]={}}var SDL2=Module["SDL2"];if(!$0){SDL2.audio={}}else{SDL2.capture={}}if(!SDL2.audioContext){if(typeof AudioContext!=="undefined"){SDL2.audioContext=new AudioContext}else if(typeof webkitAudioContext!=="undefined"){SDL2.audioContext=new webkitAudioContext}if(SDL2.audioContext){autoResumeAudioContext(SDL2.audioContext)}}return SDL2.audioContext===undefined?-1:0},74882:()=>{var SDL2=Module["SDL2"];return SDL2.audioContext.sampleRate},74950:($0,$1,$2,$3)=>{var SDL2=Module["SDL2"];var have_microphone=function(stream){if(SDL2.capture.silenceTimer!==undefined){clearTimeout(SDL2.capture.silenceTimer);SDL2.capture.silenceTimer=undefined}SDL2.capture.mediaStreamNode=SDL2.audioContext.createMediaStreamSource(stream);SDL2.capture.scriptProcessorNode=SDL2.audioContext.createScriptProcessor($1,$0,1);SDL2.capture.scriptProcessorNode.onaudioprocess=function(audioProcessingEvent){if(SDL2===undefined||SDL2.capture===undefined){return}audioProcessingEvent.outputBuffer.getChannelData(0).fill(0);SDL2.capture.currentCaptureBuffer=audioProcessingEvent.inputBuffer;dynCall("vi",$2,[$3])};SDL2.capture.mediaStreamNode.connect(SDL2.capture.scriptProcessorNode);SDL2.capture.scriptProcessorNode.connect(SDL2.audioContext.destination);SDL2.capture.stream=stream};var no_microphone=function(error){};SDL2.capture.silenceBuffer=SDL2.audioContext.createBuffer($0,$1,SDL2.audioContext.sampleRate);SDL2.capture.silenceBuffer.getChannelData(0).fill(0);var silence_callback=function(){SDL2.capture.currentCaptureBuffer=SDL2.capture.silenceBuffer;dynCall("vi",$2,[$3])};SDL2.capture.silenceTimer=setTimeout(silence_callback,$1/SDL2.audioContext.sampleRate*1e3);if(navigator.mediaDevices!==undefined&&navigator.mediaDevices.getUserMedia!==undefined){navigator.mediaDevices.getUserMedia({audio:true,video:false}).then(have_microphone).catch(no_microphone)}else if(navigator.webkitGetUserMedia!==undefined){navigator.webkitGetUserMedia({audio:true,video:false},have_microphone,no_microphone)}},76602:($0,$1,$2,$3)=>{var SDL2=Module["SDL2"];SDL2.audio.scriptProcessorNode=SDL2.audioContext["createScriptProcessor"]($1,0,$0);SDL2.audio.scriptProcessorNode["onaudioprocess"]=function(e){if(SDL2===undefined||SDL2.audio===undefined){return}SDL2.audio.currentOutputBuffer=e["outputBuffer"];dynCall("vi",$2,[$3])};SDL2.audio.scriptProcessorNode["connect"](SDL2.audioContext["destination"])},77012:($0,$1)=>{var SDL2=Module["SDL2"];var numChannels=SDL2.capture.currentCaptureBuffer.numberOfChannels;for(var c=0;c{var SDL2=Module["SDL2"];var numChannels=SDL2.audio.currentOutputBuffer["numberOfChannels"];for(var c=0;c>2]}}},78097:$0=>{var SDL2=Module["SDL2"];if($0){if(SDL2.capture.silenceTimer!==undefined){clearTimeout(SDL2.capture.silenceTimer)}if(SDL2.capture.stream!==undefined){var tracks=SDL2.capture.stream.getAudioTracks();for(var i=0;i{var w=$0;var h=$1;var pixels=$2;if(!Module["SDL2"])Module["SDL2"]={};var SDL2=Module["SDL2"];if(SDL2.ctxCanvas!==Module["canvas"]){SDL2.ctx=Module["createContext"](Module["canvas"],false,true);SDL2.ctxCanvas=Module["canvas"]}if(SDL2.w!==w||SDL2.h!==h||SDL2.imageCtx!==SDL2.ctx){SDL2.image=SDL2.ctx.createImageData(w,h);SDL2.w=w;SDL2.h=h;SDL2.imageCtx=SDL2.ctx}var data=SDL2.image.data;var src=pixels>>2;var dst=0;var num;if(typeof CanvasPixelArray!=="undefined"&&data instanceof CanvasPixelArray){num=data.length;while(dst>8&255;data[dst+2]=val>>16&255;data[dst+3]=255;src++;dst+=4}}else{if(SDL2.data32Data!==data){SDL2.data32=new Int32Array(data.buffer);SDL2.data8=new Uint8Array(data.buffer);SDL2.data32Data=data}var data32=SDL2.data32;num=data32.length;data32.set(HEAP32.subarray(src,src+num));var data8=SDL2.data8;var i=3;var j=i+4*num;if(num%8==0){while(i{var w=$0;var h=$1;var hot_x=$2;var hot_y=$3;var pixels=$4;var canvas=document.createElement("canvas");canvas.width=w;canvas.height=h;var ctx=canvas.getContext("2d");var image=ctx.createImageData(w,h);var data=image.data;var src=pixels>>2;var dst=0;var num;if(typeof CanvasPixelArray!=="undefined"&&data instanceof CanvasPixelArray){num=data.length;while(dst>8&255;data[dst+2]=val>>16&255;data[dst+3]=val>>24&255;src++;dst+=4}}else{var data32=new Int32Array(data.buffer);num=data32.length;data32.set(HEAP32.subarray(src,src+num))}ctx.putImageData(image,0,0);var url=hot_x===0&&hot_y===0?"url("+canvas.toDataURL()+"), auto":"url("+canvas.toDataURL()+") "+hot_x+" "+hot_y+", auto";var urlBuf=_malloc(url.length+1);stringToUTF8(url,urlBuf,url.length+1);return urlBuf},81727:$0=>{if(Module["canvas"]){Module["canvas"].style["cursor"]=UTF8ToString($0)}},81810:()=>{if(Module["canvas"]){Module["canvas"].style["cursor"]="none"}},81879:()=>window.innerWidth,81909:()=>window.innerHeight};function ExitStatus(status){this.name="ExitStatus";this.message=`Program terminated with exit(${status})`;this.status=status}var listenOnce=(object,event,func)=>{object.addEventListener(event,func,{"once":true})};var autoResumeAudioContext=(ctx,elements)=>{if(!elements){elements=[document,document.getElementById("canvas")]}["keydown","mousedown","touchstart"].forEach(event=>{elements.forEach(element=>{if(element){listenOnce(element,event,()=>{if(ctx.state==="suspended")ctx.resume()})}})})};var callRuntimeCallbacks=callbacks=>{while(callbacks.length>0){callbacks.shift()(Module)}};var dynCallLegacy=(sig,ptr,args)=>{var f=Module["dynCall_"+sig];return args&&args.length?f.apply(null,[ptr].concat(args)):f.call(null,ptr)};var wasmTableMirror=[];var wasmTable;var getWasmTableEntry=funcPtr=>{var func=wasmTableMirror[funcPtr];if(!func){if(funcPtr>=wasmTableMirror.length)wasmTableMirror.length=funcPtr+1;wasmTableMirror[funcPtr]=func=wasmTable.get(funcPtr)}return func};var dynCall=(sig,ptr,args)=>{if(sig.includes("j")){return dynCallLegacy(sig,ptr,args)}var rtn=getWasmTableEntry(ptr).apply(null,args);return rtn};var noExitRuntime=Module["noExitRuntime"]||true;function setValue(ptr,value,type="i8"){if(type.endsWith("*"))type="*";switch(type){case"i1":HEAP8[ptr>>0]=value;break;case"i8":HEAP8[ptr>>0]=value;break;case"i16":HEAP16[ptr>>1]=value;break;case"i32":HEAP32[ptr>>2]=value;break;case"i64":abort("to do setValue(i64) use WASM_BIGINT");case"float":HEAPF32[ptr>>2]=value;break;case"double":HEAPF64[ptr>>3]=value;break;case"*":HEAPU32[ptr>>2]=value;break;default:abort(`invalid type for setValue: ${type}`)}}function ExceptionInfo(excPtr){this.excPtr=excPtr;this.ptr=excPtr-24;this.set_type=function(type){HEAPU32[this.ptr+4>>2]=type};this.get_type=function(){return HEAPU32[this.ptr+4>>2]};this.set_destructor=function(destructor){HEAPU32[this.ptr+8>>2]=destructor};this.get_destructor=function(){return HEAPU32[this.ptr+8>>2]};this.set_caught=function(caught){caught=caught?1:0;HEAP8[this.ptr+12>>0]=caught};this.get_caught=function(){return HEAP8[this.ptr+12>>0]!=0};this.set_rethrown=function(rethrown){rethrown=rethrown?1:0;HEAP8[this.ptr+13>>0]=rethrown};this.get_rethrown=function(){return HEAP8[this.ptr+13>>0]!=0};this.init=function(type,destructor){this.set_adjusted_ptr(0);this.set_type(type);this.set_destructor(destructor)};this.set_adjusted_ptr=function(adjustedPtr){HEAPU32[this.ptr+16>>2]=adjustedPtr};this.get_adjusted_ptr=function(){return HEAPU32[this.ptr+16>>2]};this.get_exception_ptr=function(){var isPointer=___cxa_is_pointer_type(this.get_type());if(isPointer){return HEAPU32[this.excPtr>>2]}var adjusted=this.get_adjusted_ptr();if(adjusted!==0)return adjusted;return this.excPtr}}var exceptionLast=0;var uncaughtExceptionCount=0;var ___cxa_throw=(ptr,type,destructor)=>{var info=new ExceptionInfo(ptr);info.init(type,destructor);exceptionLast=ptr;uncaughtExceptionCount++;throw exceptionLast};var setErrNo=value=>{HEAP32[___errno_location()>>2]=value;return value};var PATH={isAbs:path=>path.charAt(0)==="/",splitPath:filename=>{var splitPathRe=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/;return splitPathRe.exec(filename).slice(1)},normalizeArray:(parts,allowAboveRoot)=>{var up=0;for(var i=parts.length-1;i>=0;i--){var last=parts[i];if(last==="."){parts.splice(i,1)}else if(last===".."){parts.splice(i,1);up++}else if(up){parts.splice(i,1);up--}}if(allowAboveRoot){for(;up;up--){parts.unshift("..")}}return parts},normalize:path=>{var isAbsolute=PATH.isAbs(path),trailingSlash=path.substr(-1)==="/";path=PATH.normalizeArray(path.split("/").filter(p=>!!p),!isAbsolute).join("/");if(!path&&!isAbsolute){path="."}if(path&&trailingSlash){path+="/"}return(isAbsolute?"/":"")+path},dirname:path=>{var result=PATH.splitPath(path),root=result[0],dir=result[1];if(!root&&!dir){return"."}if(dir){dir=dir.substr(0,dir.length-1)}return root+dir},basename:path=>{if(path==="/")return"/";path=PATH.normalize(path);path=path.replace(/\/$/,"");var lastSlash=path.lastIndexOf("/");if(lastSlash===-1)return path;return path.substr(lastSlash+1)},join:function(){var paths=Array.prototype.slice.call(arguments);return PATH.normalize(paths.join("/"))},join2:(l,r)=>PATH.normalize(l+"/"+r)};var initRandomFill=()=>{if(typeof crypto=="object"&&typeof crypto["getRandomValues"]=="function"){return view=>crypto.getRandomValues(view)}else if(ENVIRONMENT_IS_NODE){try{var crypto_module=require("crypto");var randomFillSync=crypto_module["randomFillSync"];if(randomFillSync){return view=>crypto_module["randomFillSync"](view)}var randomBytes=crypto_module["randomBytes"];return view=>(view.set(randomBytes(view.byteLength)),view)}catch(e){}}abort("initRandomDevice")};var randomFill=view=>(randomFill=initRandomFill())(view);var PATH_FS={resolve:function(){var resolvedPath="",resolvedAbsolute=false;for(var i=arguments.length-1;i>=-1&&!resolvedAbsolute;i--){var path=i>=0?arguments[i]:FS.cwd();if(typeof path!="string"){throw new TypeError("Arguments to path.resolve must be strings")}else if(!path){return""}resolvedPath=path+"/"+resolvedPath;resolvedAbsolute=PATH.isAbs(path)}resolvedPath=PATH.normalizeArray(resolvedPath.split("/").filter(p=>!!p),!resolvedAbsolute).join("/");return(resolvedAbsolute?"/":"")+resolvedPath||"."},relative:(from,to)=>{from=PATH_FS.resolve(from).substr(1);to=PATH_FS.resolve(to).substr(1);function trim(arr){var start=0;for(;start=0;end--){if(arr[end]!=="")break}if(start>end)return[];return arr.slice(start,end-start+1)}var fromParts=trim(from.split("/"));var toParts=trim(to.split("/"));var length=Math.min(fromParts.length,toParts.length);var samePartsLength=length;for(var i=0;i{var endIdx=idx+maxBytesToRead;var endPtr=idx;while(heapOrArray[endPtr]&&!(endPtr>=endIdx))++endPtr;if(endPtr-idx>16&&heapOrArray.buffer&&UTF8Decoder){return UTF8Decoder.decode(heapOrArray.subarray(idx,endPtr))}var str="";while(idx>10,56320|ch&1023)}}return str};var FS_stdin_getChar_buffer=[];var lengthBytesUTF8=str=>{var len=0;for(var i=0;i=55296&&c<=57343){len+=4;++i}else{len+=3}}return len};var stringToUTF8Array=(str,heap,outIdx,maxBytesToWrite)=>{if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i=55296&&u<=57343){var u1=str.charCodeAt(++i);u=65536+((u&1023)<<10)|u1&1023}if(u<=127){if(outIdx>=endIdx)break;heap[outIdx++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;heap[outIdx++]=192|u>>6;heap[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;heap[outIdx++]=224|u>>12;heap[outIdx++]=128|u>>6&63;heap[outIdx++]=128|u&63}else{if(outIdx+3>=endIdx)break;heap[outIdx++]=240|u>>18;heap[outIdx++]=128|u>>12&63;heap[outIdx++]=128|u>>6&63;heap[outIdx++]=128|u&63}}heap[outIdx]=0;return outIdx-startIdx};function intArrayFromString(stringy,dontAddNull,length){var len=length>0?length:lengthBytesUTF8(stringy)+1;var u8array=new Array(len);var numBytesWritten=stringToUTF8Array(stringy,u8array,0,u8array.length);if(dontAddNull)u8array.length=numBytesWritten;return u8array}var FS_stdin_getChar=()=>{if(!FS_stdin_getChar_buffer.length){var result=null;if(ENVIRONMENT_IS_NODE){var BUFSIZE=256;var buf=Buffer.alloc(BUFSIZE);var bytesRead=0;var fd=process.stdin.fd;try{bytesRead=fs.readSync(fd,buf)}catch(e){if(e.toString().includes("EOF"))bytesRead=0;else throw e}if(bytesRead>0){result=buf.slice(0,bytesRead).toString("utf-8")}else{result=null}}else if(typeof window!="undefined"&&typeof window.prompt=="function"){result=window.prompt("Input: ");if(result!==null){result+="\n"}}else if(typeof readline=="function"){result=readline();if(result!==null){result+="\n"}}if(!result){return null}FS_stdin_getChar_buffer=intArrayFromString(result,true)}return FS_stdin_getChar_buffer.shift()};var TTY={ttys:[],init(){},shutdown(){},register(dev,ops){TTY.ttys[dev]={input:[],output:[],ops:ops};FS.registerDevice(dev,TTY.stream_ops)},stream_ops:{open(stream){var tty=TTY.ttys[stream.node.rdev];if(!tty){throw new FS.ErrnoError(43)}stream.tty=tty;stream.seekable=false},close(stream){stream.tty.ops.fsync(stream.tty)},fsync(stream){stream.tty.ops.fsync(stream.tty)},read(stream,buffer,offset,length,pos){if(!stream.tty||!stream.tty.ops.get_char){throw new FS.ErrnoError(60)}var bytesRead=0;for(var i=0;i0){out(UTF8ArrayToString(tty.output,0));tty.output=[]}},ioctl_tcgets(tty){return{c_iflag:25856,c_oflag:5,c_cflag:191,c_lflag:35387,c_cc:[3,28,127,21,4,0,1,0,17,19,26,0,18,15,23,22,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]}},ioctl_tcsets(tty,optional_actions,data){return 0},ioctl_tiocgwinsz(tty){return[24,80]}},default_tty1_ops:{put_char(tty,val){if(val===null||val===10){err(UTF8ArrayToString(tty.output,0));tty.output=[]}else{if(val!=0)tty.output.push(val)}},fsync(tty){if(tty.output&&tty.output.length>0){err(UTF8ArrayToString(tty.output,0));tty.output=[]}}}};var mmapAlloc=size=>{abort()};var MEMFS={ops_table:null,mount(mount){return MEMFS.createNode(null,"/",16384|511,0)},createNode(parent,name,mode,dev){if(FS.isBlkdev(mode)||FS.isFIFO(mode)){throw new FS.ErrnoError(63)}if(!MEMFS.ops_table){MEMFS.ops_table={dir:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,lookup:MEMFS.node_ops.lookup,mknod:MEMFS.node_ops.mknod,rename:MEMFS.node_ops.rename,unlink:MEMFS.node_ops.unlink,rmdir:MEMFS.node_ops.rmdir,readdir:MEMFS.node_ops.readdir,symlink:MEMFS.node_ops.symlink},stream:{llseek:MEMFS.stream_ops.llseek}},file:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:{llseek:MEMFS.stream_ops.llseek,read:MEMFS.stream_ops.read,write:MEMFS.stream_ops.write,allocate:MEMFS.stream_ops.allocate,mmap:MEMFS.stream_ops.mmap,msync:MEMFS.stream_ops.msync}},link:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,readlink:MEMFS.node_ops.readlink},stream:{}},chrdev:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:FS.chrdev_stream_ops}}}var node=FS.createNode(parent,name,mode,dev);if(FS.isDir(node.mode)){node.node_ops=MEMFS.ops_table.dir.node;node.stream_ops=MEMFS.ops_table.dir.stream;node.contents={}}else if(FS.isFile(node.mode)){node.node_ops=MEMFS.ops_table.file.node;node.stream_ops=MEMFS.ops_table.file.stream;node.usedBytes=0;node.contents=null}else if(FS.isLink(node.mode)){node.node_ops=MEMFS.ops_table.link.node;node.stream_ops=MEMFS.ops_table.link.stream}else if(FS.isChrdev(node.mode)){node.node_ops=MEMFS.ops_table.chrdev.node;node.stream_ops=MEMFS.ops_table.chrdev.stream}node.timestamp=Date.now();if(parent){parent.contents[name]=node;parent.timestamp=node.timestamp}return node},getFileDataAsTypedArray(node){if(!node.contents)return new Uint8Array(0);if(node.contents.subarray)return node.contents.subarray(0,node.usedBytes);return new Uint8Array(node.contents)},expandFileStorage(node,newCapacity){var prevCapacity=node.contents?node.contents.length:0;if(prevCapacity>=newCapacity)return;var CAPACITY_DOUBLING_MAX=1024*1024;newCapacity=Math.max(newCapacity,prevCapacity*(prevCapacity>>0);if(prevCapacity!=0)newCapacity=Math.max(newCapacity,256);var oldContents=node.contents;node.contents=new Uint8Array(newCapacity);if(node.usedBytes>0)node.contents.set(oldContents.subarray(0,node.usedBytes),0)},resizeFileStorage(node,newSize){if(node.usedBytes==newSize)return;if(newSize==0){node.contents=null;node.usedBytes=0}else{var oldContents=node.contents;node.contents=new Uint8Array(newSize);if(oldContents){node.contents.set(oldContents.subarray(0,Math.min(newSize,node.usedBytes)))}node.usedBytes=newSize}},node_ops:{getattr(node){var attr={};attr.dev=FS.isChrdev(node.mode)?node.id:1;attr.ino=node.id;attr.mode=node.mode;attr.nlink=1;attr.uid=0;attr.gid=0;attr.rdev=node.rdev;if(FS.isDir(node.mode)){attr.size=4096}else if(FS.isFile(node.mode)){attr.size=node.usedBytes}else if(FS.isLink(node.mode)){attr.size=node.link.length}else{attr.size=0}attr.atime=new Date(node.timestamp);attr.mtime=new Date(node.timestamp);attr.ctime=new Date(node.timestamp);attr.blksize=4096;attr.blocks=Math.ceil(attr.size/attr.blksize);return attr},setattr(node,attr){if(attr.mode!==undefined){node.mode=attr.mode}if(attr.timestamp!==undefined){node.timestamp=attr.timestamp}if(attr.size!==undefined){MEMFS.resizeFileStorage(node,attr.size)}},lookup(parent,name){throw FS.genericErrors[44]},mknod(parent,name,mode,dev){return MEMFS.createNode(parent,name,mode,dev)},rename(old_node,new_dir,new_name){if(FS.isDir(old_node.mode)){var new_node;try{new_node=FS.lookupNode(new_dir,new_name)}catch(e){}if(new_node){for(var i in new_node.contents){throw new FS.ErrnoError(55)}}}delete old_node.parent.contents[old_node.name];old_node.parent.timestamp=Date.now();old_node.name=new_name;new_dir.contents[new_name]=old_node;new_dir.timestamp=old_node.parent.timestamp;old_node.parent=new_dir},unlink(parent,name){delete parent.contents[name];parent.timestamp=Date.now()},rmdir(parent,name){var node=FS.lookupNode(parent,name);for(var i in node.contents){throw new FS.ErrnoError(55)}delete parent.contents[name];parent.timestamp=Date.now()},readdir(node){var entries=[".",".."];for(var key in node.contents){if(!node.contents.hasOwnProperty(key)){continue}entries.push(key)}return entries},symlink(parent,newname,oldpath){var node=MEMFS.createNode(parent,newname,511|40960,0);node.link=oldpath;return node},readlink(node){if(!FS.isLink(node.mode)){throw new FS.ErrnoError(28)}return node.link}},stream_ops:{read(stream,buffer,offset,length,position){var contents=stream.node.contents;if(position>=stream.node.usedBytes)return 0;var size=Math.min(stream.node.usedBytes-position,length);if(size>8&&contents.subarray){buffer.set(contents.subarray(position,position+size),offset)}else{for(var i=0;i0||position+length{var dep=!noRunDep?getUniqueRunDependency(`al ${url}`):"";readAsync(url,arrayBuffer=>{assert(arrayBuffer,`Loading data file "${url}" failed (no arrayBuffer).`);onload(new Uint8Array(arrayBuffer));if(dep)removeRunDependency(dep)},event=>{if(onerror){onerror()}else{throw`Loading data file "${url}" failed.`}});if(dep)addRunDependency(dep)};var FS_createDataFile=(parent,name,fileData,canRead,canWrite,canOwn)=>{FS.createDataFile(parent,name,fileData,canRead,canWrite,canOwn)};var preloadPlugins=Module["preloadPlugins"]||[];var FS_handledByPreloadPlugin=(byteArray,fullname,finish,onerror)=>{if(typeof Browser!="undefined")Browser.init();var handled=false;preloadPlugins.forEach(plugin=>{if(handled)return;if(plugin["canHandle"](fullname)){plugin["handle"](byteArray,fullname,finish,onerror);handled=true}});return handled};var FS_createPreloadedFile=(parent,name,url,canRead,canWrite,onload,onerror,dontCreateFile,canOwn,preFinish)=>{var fullname=name?PATH_FS.resolve(PATH.join2(parent,name)):parent;var dep=getUniqueRunDependency(`cp ${fullname}`);function processData(byteArray){function finish(byteArray){if(preFinish)preFinish();if(!dontCreateFile){FS_createDataFile(parent,name,byteArray,canRead,canWrite,canOwn)}if(onload)onload();removeRunDependency(dep)}if(FS_handledByPreloadPlugin(byteArray,fullname,finish,()=>{if(onerror)onerror();removeRunDependency(dep)})){return}finish(byteArray)}addRunDependency(dep);if(typeof url=="string"){asyncLoad(url,byteArray=>processData(byteArray),onerror)}else{processData(url)}};var FS_modeStringToFlags=str=>{var flagModes={"r":0,"r+":2,"w":512|64|1,"w+":512|64|2,"a":1024|64|1,"a+":1024|64|2};var flags=flagModes[str];if(typeof flags=="undefined"){throw new Error(`Unknown file open mode: ${str}`)}return flags};var FS_getMode=(canRead,canWrite)=>{var mode=0;if(canRead)mode|=292|73;if(canWrite)mode|=146;return mode};var FS={root:null,mounts:[],devices:{},streams:[],nextInode:1,nameTable:null,currentPath:"/",initialized:false,ignorePermissions:true,ErrnoError:null,genericErrors:{},filesystems:null,syncFSRequests:0,lookupPath(path,opts={}){path=PATH_FS.resolve(path);if(!path)return{path:"",node:null};var defaults={follow_mount:true,recurse_count:0};opts=Object.assign(defaults,opts);if(opts.recurse_count>8){throw new FS.ErrnoError(32)}var parts=path.split("/").filter(p=>!!p);var current=FS.root;var current_path="/";for(var i=0;i40){throw new FS.ErrnoError(32)}}}}return{path:current_path,node:current}},getPath(node){var path;while(true){if(FS.isRoot(node)){var mount=node.mount.mountpoint;if(!path)return mount;return mount[mount.length-1]!=="/"?`${mount}/${path}`:mount+path}path=path?`${node.name}/${path}`:node.name;node=node.parent}},hashName(parentid,name){var hash=0;for(var i=0;i>>0)%FS.nameTable.length},hashAddNode(node){var hash=FS.hashName(node.parent.id,node.name);node.name_next=FS.nameTable[hash];FS.nameTable[hash]=node},hashRemoveNode(node){var hash=FS.hashName(node.parent.id,node.name);if(FS.nameTable[hash]===node){FS.nameTable[hash]=node.name_next}else{var current=FS.nameTable[hash];while(current){if(current.name_next===node){current.name_next=node.name_next;break}current=current.name_next}}},lookupNode(parent,name){var errCode=FS.mayLookup(parent);if(errCode){throw new FS.ErrnoError(errCode,parent)}var hash=FS.hashName(parent.id,name);for(var node=FS.nameTable[hash];node;node=node.name_next){var nodeName=node.name;if(node.parent.id===parent.id&&nodeName===name){return node}}return FS.lookup(parent,name)},createNode(parent,name,mode,rdev){var node=new FS.FSNode(parent,name,mode,rdev);FS.hashAddNode(node);return node},destroyNode(node){FS.hashRemoveNode(node)},isRoot(node){return node===node.parent},isMountpoint(node){return!!node.mounted},isFile(mode){return(mode&61440)===32768},isDir(mode){return(mode&61440)===16384},isLink(mode){return(mode&61440)===40960},isChrdev(mode){return(mode&61440)===8192},isBlkdev(mode){return(mode&61440)===24576},isFIFO(mode){return(mode&61440)===4096},isSocket(mode){return(mode&49152)===49152},flagsToPermissionString(flag){var perms=["r","w","rw"][flag&3];if(flag&512){perms+="w"}return perms},nodePermissions(node,perms){if(FS.ignorePermissions){return 0}if(perms.includes("r")&&!(node.mode&292)){return 2}else if(perms.includes("w")&&!(node.mode&146)){return 2}else if(perms.includes("x")&&!(node.mode&73)){return 2}return 0},mayLookup(dir){var errCode=FS.nodePermissions(dir,"x");if(errCode)return errCode;if(!dir.node_ops.lookup)return 2;return 0},mayCreate(dir,name){try{var node=FS.lookupNode(dir,name);return 20}catch(e){}return FS.nodePermissions(dir,"wx")},mayDelete(dir,name,isdir){var node;try{node=FS.lookupNode(dir,name)}catch(e){return e.errno}var errCode=FS.nodePermissions(dir,"wx");if(errCode){return errCode}if(isdir){if(!FS.isDir(node.mode)){return 54}if(FS.isRoot(node)||FS.getPath(node)===FS.cwd()){return 10}}else{if(FS.isDir(node.mode)){return 31}}return 0},mayOpen(node,flags){if(!node){return 44}if(FS.isLink(node.mode)){return 32}else if(FS.isDir(node.mode)){if(FS.flagsToPermissionString(flags)!=="r"||flags&512){return 31}}return FS.nodePermissions(node,FS.flagsToPermissionString(flags))},MAX_OPEN_FDS:4096,nextfd(){for(var fd=0;fd<=FS.MAX_OPEN_FDS;fd++){if(!FS.streams[fd]){return fd}}throw new FS.ErrnoError(33)},getStreamChecked(fd){var stream=FS.getStream(fd);if(!stream){throw new FS.ErrnoError(8)}return stream},getStream:fd=>FS.streams[fd],createStream(stream,fd=-1){if(!FS.FSStream){FS.FSStream=function(){this.shared={}};FS.FSStream.prototype={};Object.defineProperties(FS.FSStream.prototype,{object:{get(){return this.node},set(val){this.node=val}},isRead:{get(){return(this.flags&2097155)!==1}},isWrite:{get(){return(this.flags&2097155)!==0}},isAppend:{get(){return this.flags&1024}},flags:{get(){return this.shared.flags},set(val){this.shared.flags=val}},position:{get(){return this.shared.position},set(val){this.shared.position=val}}})}stream=Object.assign(new FS.FSStream,stream);if(fd==-1){fd=FS.nextfd()}stream.fd=fd;FS.streams[fd]=stream;return stream},closeStream(fd){FS.streams[fd]=null},chrdev_stream_ops:{open(stream){var device=FS.getDevice(stream.node.rdev);stream.stream_ops=device.stream_ops;if(stream.stream_ops.open){stream.stream_ops.open(stream)}},llseek(){throw new FS.ErrnoError(70)}},major:dev=>dev>>8,minor:dev=>dev&255,makedev:(ma,mi)=>ma<<8|mi,registerDevice(dev,ops){FS.devices[dev]={stream_ops:ops}},getDevice:dev=>FS.devices[dev],getMounts(mount){var mounts=[];var check=[mount];while(check.length){var m=check.pop();mounts.push(m);check.push.apply(check,m.mounts)}return mounts},syncfs(populate,callback){if(typeof populate=="function"){callback=populate;populate=false}FS.syncFSRequests++;if(FS.syncFSRequests>1){err(`warning: ${FS.syncFSRequests} FS.syncfs operations in flight at once, probably just doing extra work`)}var mounts=FS.getMounts(FS.root.mount);var completed=0;function doCallback(errCode){FS.syncFSRequests--;return callback(errCode)}function done(errCode){if(errCode){if(!done.errored){done.errored=true;return doCallback(errCode)}return}if(++completed>=mounts.length){doCallback(null)}}mounts.forEach(mount=>{if(!mount.type.syncfs){return done(null)}mount.type.syncfs(mount,populate,done)})},mount(type,opts,mountpoint){var root=mountpoint==="/";var pseudo=!mountpoint;var node;if(root&&FS.root){throw new FS.ErrnoError(10)}else if(!root&&!pseudo){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});mountpoint=lookup.path;node=lookup.node;if(FS.isMountpoint(node)){throw new FS.ErrnoError(10)}if(!FS.isDir(node.mode)){throw new FS.ErrnoError(54)}}var mount={type:type,opts:opts,mountpoint:mountpoint,mounts:[]};var mountRoot=type.mount(mount);mountRoot.mount=mount;mount.root=mountRoot;if(root){FS.root=mountRoot}else if(node){node.mounted=mount;if(node.mount){node.mount.mounts.push(mount)}}return mountRoot},unmount(mountpoint){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});if(!FS.isMountpoint(lookup.node)){throw new FS.ErrnoError(28)}var node=lookup.node;var mount=node.mounted;var mounts=FS.getMounts(mount);Object.keys(FS.nameTable).forEach(hash=>{var current=FS.nameTable[hash];while(current){var next=current.name_next;if(mounts.includes(current.mount)){FS.destroyNode(current)}current=next}});node.mounted=null;var idx=node.mount.mounts.indexOf(mount);node.mount.mounts.splice(idx,1)},lookup(parent,name){return parent.node_ops.lookup(parent,name)},mknod(path,mode,dev){var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;var name=PATH.basename(path);if(!name||name==="."||name===".."){throw new FS.ErrnoError(28)}var errCode=FS.mayCreate(parent,name);if(errCode){throw new FS.ErrnoError(errCode)}if(!parent.node_ops.mknod){throw new FS.ErrnoError(63)}return parent.node_ops.mknod(parent,name,mode,dev)},create(path,mode){mode=mode!==undefined?mode:438;mode&=4095;mode|=32768;return FS.mknod(path,mode,0)},mkdir(path,mode){mode=mode!==undefined?mode:511;mode&=511|512;mode|=16384;return FS.mknod(path,mode,0)},mkdirTree(path,mode){var dirs=path.split("/");var d="";for(var i=0;i0,ioctl(stream,cmd,arg){if(!stream.stream_ops.ioctl){throw new FS.ErrnoError(59)}return stream.stream_ops.ioctl(stream,cmd,arg)},readFile(path,opts={}){opts.flags=opts.flags||0;opts.encoding=opts.encoding||"binary";if(opts.encoding!=="utf8"&&opts.encoding!=="binary"){throw new Error(`Invalid encoding type "${opts.encoding}"`)}var ret;var stream=FS.open(path,opts.flags);var stat=FS.stat(path);var length=stat.size;var buf=new Uint8Array(length);FS.read(stream,buf,0,length,0);if(opts.encoding==="utf8"){ret=UTF8ArrayToString(buf,0)}else if(opts.encoding==="binary"){ret=buf}FS.close(stream);return ret},writeFile(path,data,opts={}){opts.flags=opts.flags||577;var stream=FS.open(path,opts.flags,opts.mode);if(typeof data=="string"){var buf=new Uint8Array(lengthBytesUTF8(data)+1);var actualNumBytes=stringToUTF8Array(data,buf,0,buf.length);FS.write(stream,buf,0,actualNumBytes,undefined,opts.canOwn)}else if(ArrayBuffer.isView(data)){FS.write(stream,data,0,data.byteLength,undefined,opts.canOwn)}else{throw new Error("Unsupported data type")}FS.close(stream)},cwd:()=>FS.currentPath,chdir(path){var lookup=FS.lookupPath(path,{follow:true});if(lookup.node===null){throw new FS.ErrnoError(44)}if(!FS.isDir(lookup.node.mode)){throw new FS.ErrnoError(54)}var errCode=FS.nodePermissions(lookup.node,"x");if(errCode){throw new FS.ErrnoError(errCode)}FS.currentPath=lookup.path},createDefaultDirectories(){FS.mkdir("/tmp");FS.mkdir("/home");FS.mkdir("/home/web_user")},createDefaultDevices(){FS.mkdir("/dev");FS.registerDevice(FS.makedev(1,3),{read:()=>0,write:(stream,buffer,offset,length,pos)=>length});FS.mkdev("/dev/null",FS.makedev(1,3));TTY.register(FS.makedev(5,0),TTY.default_tty_ops);TTY.register(FS.makedev(6,0),TTY.default_tty1_ops);FS.mkdev("/dev/tty",FS.makedev(5,0));FS.mkdev("/dev/tty1",FS.makedev(6,0));var randomBuffer=new Uint8Array(1024),randomLeft=0;var randomByte=()=>{if(randomLeft===0){randomLeft=randomFill(randomBuffer).byteLength}return randomBuffer[--randomLeft]};FS.createDevice("/dev","random",randomByte);FS.createDevice("/dev","urandom",randomByte);FS.mkdir("/dev/shm");FS.mkdir("/dev/shm/tmp")},createSpecialDirectories(){FS.mkdir("/proc");var proc_self=FS.mkdir("/proc/self");FS.mkdir("/proc/self/fd");FS.mount({mount(){var node=FS.createNode(proc_self,"fd",16384|511,73);node.node_ops={lookup(parent,name){var fd=+name;var stream=FS.getStreamChecked(fd);var ret={parent:null,mount:{mountpoint:"fake"},node_ops:{readlink:()=>stream.path}};ret.parent=ret;return ret}};return node}},{},"/proc/self/fd")},createStandardStreams(){if(Module["stdin"]){FS.createDevice("/dev","stdin",Module["stdin"])}else{FS.symlink("/dev/tty","/dev/stdin")}if(Module["stdout"]){FS.createDevice("/dev","stdout",null,Module["stdout"])}else{FS.symlink("/dev/tty","/dev/stdout")}if(Module["stderr"]){FS.createDevice("/dev","stderr",null,Module["stderr"])}else{FS.symlink("/dev/tty1","/dev/stderr")}var stdin=FS.open("/dev/stdin",0);var stdout=FS.open("/dev/stdout",1);var stderr=FS.open("/dev/stderr",1)},ensureErrnoError(){if(FS.ErrnoError)return;FS.ErrnoError=function ErrnoError(errno,node){this.name="ErrnoError";this.node=node;this.setErrno=function(errno){this.errno=errno};this.setErrno(errno);this.message="FS error"};FS.ErrnoError.prototype=new Error;FS.ErrnoError.prototype.constructor=FS.ErrnoError;[44].forEach(code=>{FS.genericErrors[code]=new FS.ErrnoError(code);FS.genericErrors[code].stack=""})},staticInit(){FS.ensureErrnoError();FS.nameTable=new Array(4096);FS.mount(MEMFS,{},"/");FS.createDefaultDirectories();FS.createDefaultDevices();FS.createSpecialDirectories();FS.filesystems={"MEMFS":MEMFS}},init(input,output,error){FS.init.initialized=true;FS.ensureErrnoError();Module["stdin"]=input||Module["stdin"];Module["stdout"]=output||Module["stdout"];Module["stderr"]=error||Module["stderr"];FS.createStandardStreams()},quit(){FS.init.initialized=false;for(var i=0;ithis.length-1||idx<0){return undefined}var chunkOffset=idx%this.chunkSize;var chunkNum=idx/this.chunkSize|0;return this.getter(chunkNum)[chunkOffset]};LazyUint8Array.prototype.setDataGetter=function LazyUint8Array_setDataGetter(getter){this.getter=getter};LazyUint8Array.prototype.cacheLength=function LazyUint8Array_cacheLength(){var xhr=new XMLHttpRequest;xhr.open("HEAD",url,false);xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);var datalength=Number(xhr.getResponseHeader("Content-length"));var header;var hasByteServing=(header=xhr.getResponseHeader("Accept-Ranges"))&&header==="bytes";var usesGzip=(header=xhr.getResponseHeader("Content-Encoding"))&&header==="gzip";var chunkSize=1024*1024;if(!hasByteServing)chunkSize=datalength;var doXHR=(from,to)=>{if(from>to)throw new Error("invalid range ("+from+", "+to+") or no bytes requested!");if(to>datalength-1)throw new Error("only "+datalength+" bytes available! programmer error!");var xhr=new XMLHttpRequest;xhr.open("GET",url,false);if(datalength!==chunkSize)xhr.setRequestHeader("Range","bytes="+from+"-"+to);xhr.responseType="arraybuffer";if(xhr.overrideMimeType){xhr.overrideMimeType("text/plain; charset=x-user-defined")}xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);if(xhr.response!==undefined){return new Uint8Array(xhr.response||[])}return intArrayFromString(xhr.responseText||"",true)};var lazyArray=this;lazyArray.setDataGetter(chunkNum=>{var start=chunkNum*chunkSize;var end=(chunkNum+1)*chunkSize-1;end=Math.min(end,datalength-1);if(typeof lazyArray.chunks[chunkNum]=="undefined"){lazyArray.chunks[chunkNum]=doXHR(start,end)}if(typeof lazyArray.chunks[chunkNum]=="undefined")throw new Error("doXHR failed!");return lazyArray.chunks[chunkNum]});if(usesGzip||!datalength){chunkSize=datalength=1;datalength=this.getter(0).length;chunkSize=datalength;out("LazyFiles on gzip forces download of the whole file when length is accessed")}this._length=datalength;this._chunkSize=chunkSize;this.lengthKnown=true};if(typeof XMLHttpRequest!="undefined"){if(!ENVIRONMENT_IS_WORKER)throw"Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc";var lazyArray=new LazyUint8Array;Object.defineProperties(lazyArray,{length:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._length}},chunkSize:{get:function(){if(!this.lengthKnown){this.cacheLength()}return this._chunkSize}}});var properties={isDevice:false,contents:lazyArray}}else{var properties={isDevice:false,url:url}}var node=FS.createFile(parent,name,properties,canRead,canWrite);if(properties.contents){node.contents=properties.contents}else if(properties.url){node.contents=null;node.url=properties.url}Object.defineProperties(node,{usedBytes:{get:function(){return this.contents.length}}});var stream_ops={};var keys=Object.keys(node.stream_ops);keys.forEach(key=>{var fn=node.stream_ops[key];stream_ops[key]=function forceLoadLazyFile(){FS.forceLoadFile(node);return fn.apply(null,arguments)}});function writeChunks(stream,buffer,offset,length,position){var contents=stream.node.contents;if(position>=contents.length)return 0;var size=Math.min(contents.length-position,length);if(contents.slice){for(var i=0;i{FS.forceLoadFile(node);return writeChunks(stream,buffer,offset,length,position)};stream_ops.mmap=(stream,length,position,prot,flags)=>{FS.forceLoadFile(node);var ptr=mmapAlloc(length);if(!ptr){throw new FS.ErrnoError(48)}writeChunks(stream,HEAP8,ptr,length,position);return{ptr:ptr,allocated:true}};node.stream_ops=stream_ops;return node}};var UTF8ToString=(ptr,maxBytesToRead)=>ptr?UTF8ArrayToString(HEAPU8,ptr,maxBytesToRead):"";var SYSCALLS={DEFAULT_POLLMASK:5,calculateAt(dirfd,path,allowEmpty){if(PATH.isAbs(path)){return path}var dir;if(dirfd===-100){dir=FS.cwd()}else{var dirstream=SYSCALLS.getStreamFromFD(dirfd);dir=dirstream.path}if(path.length==0){if(!allowEmpty){throw new FS.ErrnoError(44)}return dir}return PATH.join2(dir,path)},doStat(func,path,buf){try{var stat=func(path)}catch(e){if(e&&e.node&&PATH.normalize(path)!==PATH.normalize(FS.getPath(e.node))){return-54}throw e}HEAP32[buf>>2]=stat.dev;HEAP32[buf+4>>2]=stat.mode;HEAPU32[buf+8>>2]=stat.nlink;HEAP32[buf+12>>2]=stat.uid;HEAP32[buf+16>>2]=stat.gid;HEAP32[buf+20>>2]=stat.rdev;tempI64=[stat.size>>>0,(tempDouble=stat.size,+Math.abs(tempDouble)>=1?tempDouble>0?+Math.floor(tempDouble/4294967296)>>>0:~~+Math.ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+24>>2]=tempI64[0],HEAP32[buf+28>>2]=tempI64[1];HEAP32[buf+32>>2]=4096;HEAP32[buf+36>>2]=stat.blocks;var atime=stat.atime.getTime();var mtime=stat.mtime.getTime();var ctime=stat.ctime.getTime();tempI64=[Math.floor(atime/1e3)>>>0,(tempDouble=Math.floor(atime/1e3),+Math.abs(tempDouble)>=1?tempDouble>0?+Math.floor(tempDouble/4294967296)>>>0:~~+Math.ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+40>>2]=tempI64[0],HEAP32[buf+44>>2]=tempI64[1];HEAPU32[buf+48>>2]=atime%1e3*1e3;tempI64=[Math.floor(mtime/1e3)>>>0,(tempDouble=Math.floor(mtime/1e3),+Math.abs(tempDouble)>=1?tempDouble>0?+Math.floor(tempDouble/4294967296)>>>0:~~+Math.ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+56>>2]=tempI64[0],HEAP32[buf+60>>2]=tempI64[1];HEAPU32[buf+64>>2]=mtime%1e3*1e3;tempI64=[Math.floor(ctime/1e3)>>>0,(tempDouble=Math.floor(ctime/1e3),+Math.abs(tempDouble)>=1?tempDouble>0?+Math.floor(tempDouble/4294967296)>>>0:~~+Math.ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+72>>2]=tempI64[0],HEAP32[buf+76>>2]=tempI64[1];HEAPU32[buf+80>>2]=ctime%1e3*1e3;tempI64=[stat.ino>>>0,(tempDouble=stat.ino,+Math.abs(tempDouble)>=1?tempDouble>0?+Math.floor(tempDouble/4294967296)>>>0:~~+Math.ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[buf+88>>2]=tempI64[0],HEAP32[buf+92>>2]=tempI64[1];return 0},doMsync(addr,stream,len,flags,offset){if(!FS.isFile(stream.node.mode)){throw new FS.ErrnoError(43)}if(flags&2){return 0}var buffer=HEAPU8.slice(addr,addr+len);FS.msync(stream,buffer,offset,len,flags)},varargs:undefined,get(){var ret=HEAP32[+SYSCALLS.varargs>>2];SYSCALLS.varargs+=4;return ret},getp(){return SYSCALLS.get()},getStr(ptr){var ret=UTF8ToString(ptr);return ret},getStreamFromFD(fd){var stream=FS.getStreamChecked(fd);return stream}};function ___syscall_fcntl64(fd,cmd,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(fd);switch(cmd){case 0:{var arg=SYSCALLS.get();if(arg<0){return-28}while(FS.streams[arg]){arg++}var newStream;newStream=FS.createStream(stream,arg);return newStream.fd}case 1:case 2:return 0;case 3:return stream.flags;case 4:{var arg=SYSCALLS.get();stream.flags|=arg;return 0}case 5:{var arg=SYSCALLS.getp();var offset=0;HEAP16[arg+offset>>1]=2;return 0}case 6:case 7:return 0;case 16:case 8:return-28;case 9:setErrNo(28);return-1;default:{return-28}}}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}function ___syscall_ioctl(fd,op,varargs){SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(fd);switch(op){case 21509:{if(!stream.tty)return-59;return 0}case 21505:{if(!stream.tty)return-59;if(stream.tty.ops.ioctl_tcgets){var termios=stream.tty.ops.ioctl_tcgets(stream);var argp=SYSCALLS.getp();HEAP32[argp>>2]=termios.c_iflag||0;HEAP32[argp+4>>2]=termios.c_oflag||0;HEAP32[argp+8>>2]=termios.c_cflag||0;HEAP32[argp+12>>2]=termios.c_lflag||0;for(var i=0;i<32;i++){HEAP8[argp+i+17>>0]=termios.c_cc[i]||0}return 0}return 0}case 21510:case 21511:case 21512:{if(!stream.tty)return-59;return 0}case 21506:case 21507:case 21508:{if(!stream.tty)return-59;if(stream.tty.ops.ioctl_tcsets){var argp=SYSCALLS.getp();var c_iflag=HEAP32[argp>>2];var c_oflag=HEAP32[argp+4>>2];var c_cflag=HEAP32[argp+8>>2];var c_lflag=HEAP32[argp+12>>2];var c_cc=[];for(var i=0;i<32;i++){c_cc.push(HEAP8[argp+i+17>>0])}return stream.tty.ops.ioctl_tcsets(stream.tty,op,{c_iflag:c_iflag,c_oflag:c_oflag,c_cflag:c_cflag,c_lflag:c_lflag,c_cc:c_cc})}return 0}case 21519:{if(!stream.tty)return-59;var argp=SYSCALLS.getp();HEAP32[argp>>2]=0;return 0}case 21520:{if(!stream.tty)return-59;return-28}case 21531:{var argp=SYSCALLS.getp();return FS.ioctl(stream,op,argp)}case 21523:{if(!stream.tty)return-59;if(stream.tty.ops.ioctl_tiocgwinsz){var winsize=stream.tty.ops.ioctl_tiocgwinsz(stream.tty);var argp=SYSCALLS.getp();HEAP16[argp>>1]=winsize[0];HEAP16[argp+2>>1]=winsize[1]}return 0}case 21524:{if(!stream.tty)return-59;return 0}case 21515:{if(!stream.tty)return-59;return 0}default:return-28}}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}function ___syscall_openat(dirfd,path,flags,varargs){SYSCALLS.varargs=varargs;try{path=SYSCALLS.getStr(path);path=SYSCALLS.calculateAt(dirfd,path);var mode=varargs?SYSCALLS.get():0;return FS.open(path,flags,mode).fd}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}var nowIsMonotonic=1;var __emscripten_get_now_is_monotonic=()=>nowIsMonotonic;var _abort=()=>{abort("")};var _emscripten_set_main_loop_timing=(mode,value)=>{Browser.mainLoop.timingMode=mode;Browser.mainLoop.timingValue=value;if(!Browser.mainLoop.func){return 1}if(!Browser.mainLoop.running){Browser.mainLoop.running=true}if(mode==0){Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_setTimeout(){var timeUntilNextTick=Math.max(0,Browser.mainLoop.tickStartTime+value-_emscripten_get_now())|0;setTimeout(Browser.mainLoop.runner,timeUntilNextTick)};Browser.mainLoop.method="timeout"}else if(mode==1){Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_rAF(){Browser.requestAnimationFrame(Browser.mainLoop.runner)};Browser.mainLoop.method="rAF"}else if(mode==2){if(typeof Browser.setImmediate=="undefined"){if(typeof setImmediate=="undefined"){var setImmediates=[];var emscriptenMainLoopMessageId="setimmediate";var Browser_setImmediate_messageHandler=event=>{if(event.data===emscriptenMainLoopMessageId||event.data.target===emscriptenMainLoopMessageId){event.stopPropagation();setImmediates.shift()()}};addEventListener("message",Browser_setImmediate_messageHandler,true);Browser.setImmediate=function Browser_emulated_setImmediate(func){setImmediates.push(func);if(ENVIRONMENT_IS_WORKER){if(Module["setImmediates"]===undefined)Module["setImmediates"]=[];Module["setImmediates"].push(func);postMessage({target:emscriptenMainLoopMessageId})}else postMessage(emscriptenMainLoopMessageId,"*")}}else{Browser.setImmediate=setImmediate}}Browser.mainLoop.scheduler=function Browser_mainLoop_scheduler_setImmediate(){Browser.setImmediate(Browser.mainLoop.runner)};Browser.mainLoop.method="immediate"}return 0};var _emscripten_get_now;_emscripten_get_now=()=>performance.now();var setMainLoop=(browserIterationFunc,fps,simulateInfiniteLoop,arg,noSetTiming)=>{assert(!Browser.mainLoop.func,"emscripten_set_main_loop: there can only be one main loop function at once: call emscripten_cancel_main_loop to cancel the previous one before setting a new one with different parameters.");Browser.mainLoop.func=browserIterationFunc;Browser.mainLoop.arg=arg;var thisMainLoopId=Browser.mainLoop.currentlyRunningMainloop;function checkIsRunning(){if(thisMainLoopId0){var start=Date.now();var blocker=Browser.mainLoop.queue.shift();blocker.func(blocker.arg);if(Browser.mainLoop.remainingBlockers){var remaining=Browser.mainLoop.remainingBlockers;var next=remaining%1==0?remaining-1:Math.floor(remaining);if(blocker.counted){Browser.mainLoop.remainingBlockers=next}else{next=next+.5;Browser.mainLoop.remainingBlockers=(8*remaining+next)/9}}Browser.mainLoop.updateStatus();if(!checkIsRunning())return;setTimeout(Browser.mainLoop.runner,0);return}if(!checkIsRunning())return;Browser.mainLoop.currentFrameNumber=Browser.mainLoop.currentFrameNumber+1|0;if(Browser.mainLoop.timingMode==1&&Browser.mainLoop.timingValue>1&&Browser.mainLoop.currentFrameNumber%Browser.mainLoop.timingValue!=0){Browser.mainLoop.scheduler();return}else if(Browser.mainLoop.timingMode==0){Browser.mainLoop.tickStartTime=_emscripten_get_now()}Browser.mainLoop.runIter(browserIterationFunc);if(!checkIsRunning())return;if(typeof SDL=="object"&&SDL.audio&&SDL.audio.queueNewAudioData)SDL.audio.queueNewAudioData();Browser.mainLoop.scheduler()};if(!noSetTiming){if(fps&&fps>0){_emscripten_set_main_loop_timing(0,1e3/fps)}else{_emscripten_set_main_loop_timing(1,1)}Browser.mainLoop.scheduler()}if(simulateInfiniteLoop){throw"unwind"}};var handleException=e=>{if(e instanceof ExitStatus||e=="unwind"){return EXITSTATUS}quit_(1,e)};var runtimeKeepaliveCounter=0;var keepRuntimeAlive=()=>noExitRuntime||runtimeKeepaliveCounter>0;var _proc_exit=code=>{EXITSTATUS=code;if(!keepRuntimeAlive()){if(Module["onExit"])Module["onExit"](code);ABORT=true}quit_(code,new ExitStatus(code))};var exitJS=(status,implicit)=>{EXITSTATUS=status;_proc_exit(status)};var _exit=exitJS;var maybeExit=()=>{if(!keepRuntimeAlive()){try{_exit(EXITSTATUS)}catch(e){handleException(e)}}};var callUserCallback=func=>{if(ABORT){return}try{func();maybeExit()}catch(e){handleException(e)}};var safeSetTimeout=(func,timeout)=>setTimeout(()=>{callUserCallback(func)},timeout);var warnOnce=text=>{if(!warnOnce.shown)warnOnce.shown={};if(!warnOnce.shown[text]){warnOnce.shown[text]=1;if(ENVIRONMENT_IS_NODE)text="warning: "+text;err(text)}};var Browser={mainLoop:{running:false,scheduler:null,method:"",currentlyRunningMainloop:0,func:null,arg:0,timingMode:0,timingValue:0,currentFrameNumber:0,queue:[],pause(){Browser.mainLoop.scheduler=null;Browser.mainLoop.currentlyRunningMainloop++},resume(){Browser.mainLoop.currentlyRunningMainloop++;var timingMode=Browser.mainLoop.timingMode;var timingValue=Browser.mainLoop.timingValue;var func=Browser.mainLoop.func;Browser.mainLoop.func=null;setMainLoop(func,0,false,Browser.mainLoop.arg,true);_emscripten_set_main_loop_timing(timingMode,timingValue);Browser.mainLoop.scheduler()},updateStatus(){if(Module["setStatus"]){var message=Module["statusMessage"]||"Please wait...";var remaining=Browser.mainLoop.remainingBlockers;var expected=Browser.mainLoop.expectedBlockers;if(remaining){if(remaining{assert(img.complete,`Image ${name} could not be decoded`);var canvas=document.createElement("canvas");canvas.width=img.width;canvas.height=img.height;var ctx=canvas.getContext("2d");ctx.drawImage(img,0,0);preloadedImages[name]=canvas;URL.revokeObjectURL(url);if(onload)onload(byteArray)};img.onerror=event=>{err(`Image ${url} could not be decoded`);if(onerror)onerror()};img.src=url};preloadPlugins.push(imagePlugin);var audioPlugin={};audioPlugin["canHandle"]=function audioPlugin_canHandle(name){return!Module.noAudioDecoding&&name.substr(-4)in{".ogg":1,".wav":1,".mp3":1}};audioPlugin["handle"]=function audioPlugin_handle(byteArray,name,onload,onerror){var done=false;function finish(audio){if(done)return;done=true;preloadedAudios[name]=audio;if(onload)onload(byteArray)}var b=new Blob([byteArray],{type:Browser.getMimetype(name)});var url=URL.createObjectURL(b);var audio=new Audio;audio.addEventListener("canplaythrough",()=>finish(audio),false);audio.onerror=function audio_onerror(event){if(done)return;err(`warning: browser could not fully decode audio ${name}, trying slower base64 approach`);function encode64(data){var BASE="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";var PAD="=";var ret="";var leftchar=0;var leftbits=0;for(var i=0;i=6){var curr=leftchar>>leftbits-6&63;leftbits-=6;ret+=BASE[curr]}}if(leftbits==2){ret+=BASE[(leftchar&3)<<4];ret+=PAD+PAD}else if(leftbits==4){ret+=BASE[(leftchar&15)<<2];ret+=PAD}return ret}audio.src="data:audio/x-"+name.substr(-3)+";base64,"+encode64(byteArray);finish(audio)};audio.src=url;safeSetTimeout(()=>{finish(audio)},1e4)};preloadPlugins.push(audioPlugin);function pointerLockChange(){Browser.pointerLock=document["pointerLockElement"]===Module["canvas"]||document["mozPointerLockElement"]===Module["canvas"]||document["webkitPointerLockElement"]===Module["canvas"]||document["msPointerLockElement"]===Module["canvas"]}var canvas=Module["canvas"];if(canvas){canvas.requestPointerLock=canvas["requestPointerLock"]||canvas["mozRequestPointerLock"]||canvas["webkitRequestPointerLock"]||canvas["msRequestPointerLock"]||(()=>{});canvas.exitPointerLock=document["exitPointerLock"]||document["mozExitPointerLock"]||document["webkitExitPointerLock"]||document["msExitPointerLock"]||(()=>{});canvas.exitPointerLock=canvas.exitPointerLock.bind(document);document.addEventListener("pointerlockchange",pointerLockChange,false);document.addEventListener("mozpointerlockchange",pointerLockChange,false);document.addEventListener("webkitpointerlockchange",pointerLockChange,false);document.addEventListener("mspointerlockchange",pointerLockChange,false);if(Module["elementPointerLock"]){canvas.addEventListener("click",ev=>{if(!Browser.pointerLock&&Module["canvas"].requestPointerLock){Module["canvas"].requestPointerLock();ev.preventDefault()}},false)}}},createContext(canvas,useWebGL,setInModule,webGLContextAttributes){if(useWebGL&&Module.ctx&&canvas==Module.canvas)return Module.ctx;var ctx;var contextHandle;if(useWebGL){var contextAttributes={antialias:false,alpha:false,majorVersion:1};if(webGLContextAttributes){for(var attribute in webGLContextAttributes){contextAttributes[attribute]=webGLContextAttributes[attribute]}}if(typeof GL!="undefined"){contextHandle=GL.createContext(canvas,contextAttributes);if(contextHandle){ctx=GL.getContext(contextHandle).GLctx}}}else{ctx=canvas.getContext("2d")}if(!ctx)return null;if(setInModule){if(!useWebGL)assert(typeof GLctx=="undefined","cannot set in module if GLctx is used, but we are a non-GL context that would replace it");Module.ctx=ctx;if(useWebGL)GL.makeContextCurrent(contextHandle);Module.useWebGL=useWebGL;Browser.moduleContextCreatedCallbacks.forEach(callback=>callback());Browser.init()}return ctx},destroyContext(canvas,useWebGL,setInModule){},fullscreenHandlersInstalled:false,lockPointer:undefined,resizeCanvas:undefined,requestFullscreen(lockPointer,resizeCanvas){Browser.lockPointer=lockPointer;Browser.resizeCanvas=resizeCanvas;if(typeof Browser.lockPointer=="undefined")Browser.lockPointer=true;if(typeof Browser.resizeCanvas=="undefined")Browser.resizeCanvas=false;var canvas=Module["canvas"];function fullscreenChange(){Browser.isFullscreen=false;var canvasContainer=canvas.parentNode;if((document["fullscreenElement"]||document["mozFullScreenElement"]||document["msFullscreenElement"]||document["webkitFullscreenElement"]||document["webkitCurrentFullScreenElement"])===canvasContainer){canvas.exitFullscreen=Browser.exitFullscreen;if(Browser.lockPointer)canvas.requestPointerLock();Browser.isFullscreen=true;if(Browser.resizeCanvas){Browser.setFullscreenCanvasSize()}else{Browser.updateCanvasDimensions(canvas)}}else{canvasContainer.parentNode.insertBefore(canvas,canvasContainer);canvasContainer.parentNode.removeChild(canvasContainer);if(Browser.resizeCanvas){Browser.setWindowedCanvasSize()}else{Browser.updateCanvasDimensions(canvas)}}if(Module["onFullScreen"])Module["onFullScreen"](Browser.isFullscreen);if(Module["onFullscreen"])Module["onFullscreen"](Browser.isFullscreen)}if(!Browser.fullscreenHandlersInstalled){Browser.fullscreenHandlersInstalled=true;document.addEventListener("fullscreenchange",fullscreenChange,false);document.addEventListener("mozfullscreenchange",fullscreenChange,false);document.addEventListener("webkitfullscreenchange",fullscreenChange,false);document.addEventListener("MSFullscreenChange",fullscreenChange,false)}var canvasContainer=document.createElement("div");canvas.parentNode.insertBefore(canvasContainer,canvas);canvasContainer.appendChild(canvas);canvasContainer.requestFullscreen=canvasContainer["requestFullscreen"]||canvasContainer["mozRequestFullScreen"]||canvasContainer["msRequestFullscreen"]||(canvasContainer["webkitRequestFullscreen"]?()=>canvasContainer["webkitRequestFullscreen"](Element["ALLOW_KEYBOARD_INPUT"]):null)||(canvasContainer["webkitRequestFullScreen"]?()=>canvasContainer["webkitRequestFullScreen"](Element["ALLOW_KEYBOARD_INPUT"]):null);canvasContainer.requestFullscreen()},exitFullscreen(){if(!Browser.isFullscreen){return false}var CFS=document["exitFullscreen"]||document["cancelFullScreen"]||document["mozCancelFullScreen"]||document["msExitFullscreen"]||document["webkitCancelFullScreen"]||(()=>{});CFS.apply(document,[]);return true},nextRAF:0,fakeRequestAnimationFrame(func){var now=Date.now();if(Browser.nextRAF===0){Browser.nextRAF=now+1e3/60}else{while(now+2>=Browser.nextRAF){Browser.nextRAF+=1e3/60}}var delay=Math.max(Browser.nextRAF-now,0);setTimeout(func,delay)},requestAnimationFrame(func){if(typeof requestAnimationFrame=="function"){requestAnimationFrame(func);return}var RAF=Browser.fakeRequestAnimationFrame;RAF(func)},safeSetTimeout(func,timeout){return safeSetTimeout(func,timeout)},safeRequestAnimationFrame(func){return Browser.requestAnimationFrame(()=>{callUserCallback(func)})},getMimetype(name){return{"jpg":"image/jpeg","jpeg":"image/jpeg","png":"image/png","bmp":"image/bmp","ogg":"audio/ogg","wav":"audio/wav","mp3":"audio/mpeg"}[name.substr(name.lastIndexOf(".")+1)]},getUserMedia(func){if(!window.getUserMedia){window.getUserMedia=navigator["getUserMedia"]||navigator["mozGetUserMedia"]}window.getUserMedia(func)},getMovementX(event){return event["movementX"]||event["mozMovementX"]||event["webkitMovementX"]||0},getMovementY(event){return event["movementY"]||event["mozMovementY"]||event["webkitMovementY"]||0},getMouseWheelDelta(event){var delta=0;switch(event.type){case"DOMMouseScroll":delta=event.detail/3;break;case"mousewheel":delta=event.wheelDelta/120;break;case"wheel":delta=event.deltaY;switch(event.deltaMode){case 0:delta/=100;break;case 1:delta/=3;break;case 2:delta*=80;break;default:throw"unrecognized mouse wheel delta mode: "+event.deltaMode}break;default:throw"unrecognized mouse wheel event: "+event.type}return delta},mouseX:0,mouseY:0,mouseMovementX:0,mouseMovementY:0,touches:{},lastTouches:{},calculateMouseEvent(event){if(Browser.pointerLock){if(event.type!="mousemove"&&"mozMovementX"in event){Browser.mouseMovementX=Browser.mouseMovementY=0}else{Browser.mouseMovementX=Browser.getMovementX(event);Browser.mouseMovementY=Browser.getMovementY(event)}if(typeof SDL!="undefined"){Browser.mouseX=SDL.mouseX+Browser.mouseMovementX;Browser.mouseY=SDL.mouseY+Browser.mouseMovementY}else{Browser.mouseX+=Browser.mouseMovementX;Browser.mouseY+=Browser.mouseMovementY}}else{var rect=Module["canvas"].getBoundingClientRect();var cw=Module["canvas"].width;var ch=Module["canvas"].height;var scrollX=typeof window.scrollX!="undefined"?window.scrollX:window.pageXOffset;var scrollY=typeof window.scrollY!="undefined"?window.scrollY:window.pageYOffset;if(event.type==="touchstart"||event.type==="touchend"||event.type==="touchmove"){var touch=event.touch;if(touch===undefined){return}var adjustedX=touch.pageX-(scrollX+rect.left);var adjustedY=touch.pageY-(scrollY+rect.top);adjustedX=adjustedX*(cw/rect.width);adjustedY=adjustedY*(ch/rect.height);var coords={x:adjustedX,y:adjustedY};if(event.type==="touchstart"){Browser.lastTouches[touch.identifier]=coords;Browser.touches[touch.identifier]=coords}else if(event.type==="touchend"||event.type==="touchmove"){var last=Browser.touches[touch.identifier];if(!last)last=coords;Browser.lastTouches[touch.identifier]=last;Browser.touches[touch.identifier]=coords}return}var x=event.pageX-(scrollX+rect.left);var y=event.pageY-(scrollY+rect.top);x=x*(cw/rect.width);y=y*(ch/rect.height);Browser.mouseMovementX=x-Browser.mouseX;Browser.mouseMovementY=y-Browser.mouseY;Browser.mouseX=x;Browser.mouseY=y}},resizeListeners:[],updateResizeListeners(){var canvas=Module["canvas"];Browser.resizeListeners.forEach(listener=>listener(canvas.width,canvas.height))},setCanvasSize(width,height,noUpdates){var canvas=Module["canvas"];Browser.updateCanvasDimensions(canvas,width,height);if(!noUpdates)Browser.updateResizeListeners()},windowedWidth:0,windowedHeight:0,setFullscreenCanvasSize(){if(typeof SDL!="undefined"){var flags=HEAPU32[SDL.screen>>2];flags=flags|8388608;HEAP32[SDL.screen>>2]=flags}Browser.updateCanvasDimensions(Module["canvas"]);Browser.updateResizeListeners()},setWindowedCanvasSize(){if(typeof SDL!="undefined"){var flags=HEAPU32[SDL.screen>>2];flags=flags&~8388608;HEAP32[SDL.screen>>2]=flags}Browser.updateCanvasDimensions(Module["canvas"]);Browser.updateResizeListeners()},updateCanvasDimensions(canvas,wNative,hNative){if(wNative&&hNative){canvas.widthNative=wNative;canvas.heightNative=hNative}else{wNative=canvas.widthNative;hNative=canvas.heightNative}var w=wNative;var h=hNative;if(Module["forcedAspectRatio"]&&Module["forcedAspectRatio"]>0){if(w/h>2];if(param==12321){var alphaSize=HEAP32[attribList+4>>2];EGL.contextAttributes.alpha=alphaSize>0}else if(param==12325){var depthSize=HEAP32[attribList+4>>2];EGL.contextAttributes.depth=depthSize>0}else if(param==12326){var stencilSize=HEAP32[attribList+4>>2];EGL.contextAttributes.stencil=stencilSize>0}else if(param==12337){var samples=HEAP32[attribList+4>>2];EGL.contextAttributes.antialias=samples>0}else if(param==12338){var samples=HEAP32[attribList+4>>2];EGL.contextAttributes.antialias=samples==1}else if(param==12544){var requestedPriority=HEAP32[attribList+4>>2];EGL.contextAttributes.lowLatency=requestedPriority!=12547}else if(param==12344){break}attribList+=8}}if((!config||!config_size)&&!numConfigs){EGL.setErrorCode(12300);return 0}if(numConfigs){HEAP32[numConfigs>>2]=1}if(config&&config_size>0){HEAPU32[config>>2]=62002}EGL.setErrorCode(12288);return 1}};var _eglBindAPI=api=>{if(api==12448){EGL.setErrorCode(12288);return 1}EGL.setErrorCode(12300);return 0};var _eglChooseConfig=(display,attrib_list,configs,config_size,numConfigs)=>EGL.chooseConfig(display,attrib_list,configs,config_size,numConfigs);var webgl_enable_ANGLE_instanced_arrays=ctx=>{var ext=ctx.getExtension("ANGLE_instanced_arrays");if(ext){ctx["vertexAttribDivisor"]=(index,divisor)=>ext["vertexAttribDivisorANGLE"](index,divisor);ctx["drawArraysInstanced"]=(mode,first,count,primcount)=>ext["drawArraysInstancedANGLE"](mode,first,count,primcount);ctx["drawElementsInstanced"]=(mode,count,type,indices,primcount)=>ext["drawElementsInstancedANGLE"](mode,count,type,indices,primcount);return 1}};var webgl_enable_OES_vertex_array_object=ctx=>{var ext=ctx.getExtension("OES_vertex_array_object");if(ext){ctx["createVertexArray"]=()=>ext["createVertexArrayOES"]();ctx["deleteVertexArray"]=vao=>ext["deleteVertexArrayOES"](vao);ctx["bindVertexArray"]=vao=>ext["bindVertexArrayOES"](vao);ctx["isVertexArray"]=vao=>ext["isVertexArrayOES"](vao);return 1}};var webgl_enable_WEBGL_draw_buffers=ctx=>{var ext=ctx.getExtension("WEBGL_draw_buffers");if(ext){ctx["drawBuffers"]=(n,bufs)=>ext["drawBuffersWEBGL"](n,bufs);return 1}};var webgl_enable_WEBGL_multi_draw=ctx=>!!(ctx.multiDrawWebgl=ctx.getExtension("WEBGL_multi_draw"));var GL={counter:1,buffers:[],programs:[],framebuffers:[],renderbuffers:[],textures:[],shaders:[],vaos:[],contexts:[],offscreenCanvases:{},queries:[],stringCache:{},unpackAlignment:4,recordError:function recordError(errorCode){if(!GL.lastError){GL.lastError=errorCode}},getNewId:table=>{var ret=GL.counter++;for(var i=table.length;i{var source="";for(var i=0;i>2]:-1;source+=UTF8ToString(HEAP32[string+i*4>>2],len<0?undefined:len)}return source},createContext:(canvas,webGLContextAttributes)=>{if(!canvas.getContextSafariWebGL2Fixed){canvas.getContextSafariWebGL2Fixed=canvas.getContext;function fixedGetContext(ver,attrs){var gl=canvas.getContextSafariWebGL2Fixed(ver,attrs);return ver=="webgl"==gl instanceof WebGLRenderingContext?gl:null}canvas.getContext=fixedGetContext}var ctx=canvas.getContext("webgl",webGLContextAttributes);if(!ctx)return 0;var handle=GL.registerContext(ctx,webGLContextAttributes);return handle},registerContext:(ctx,webGLContextAttributes)=>{var handle=GL.getNewId(GL.contexts);var context={handle:handle,attributes:webGLContextAttributes,version:webGLContextAttributes.majorVersion,GLctx:ctx};if(ctx.canvas)ctx.canvas.GLctxObject=context;GL.contexts[handle]=context;if(typeof webGLContextAttributes.enableExtensionsByDefault=="undefined"||webGLContextAttributes.enableExtensionsByDefault){GL.initExtensions(context)}return handle},makeContextCurrent:contextHandle=>{GL.currentContext=GL.contexts[contextHandle];Module.ctx=GLctx=GL.currentContext&&GL.currentContext.GLctx;return!(contextHandle&&!GLctx)},getContext:contextHandle=>GL.contexts[contextHandle],deleteContext:contextHandle=>{if(GL.currentContext===GL.contexts[contextHandle]){GL.currentContext=null}if(typeof JSEvents=="object"){JSEvents.removeAllHandlersOnTarget(GL.contexts[contextHandle].GLctx.canvas)}if(GL.contexts[contextHandle]&&GL.contexts[contextHandle].GLctx.canvas){GL.contexts[contextHandle].GLctx.canvas.GLctxObject=undefined}GL.contexts[contextHandle]=null},initExtensions:context=>{if(!context)context=GL.currentContext;if(context.initExtensionsDone)return;context.initExtensionsDone=true;var GLctx=context.GLctx;webgl_enable_ANGLE_instanced_arrays(GLctx);webgl_enable_OES_vertex_array_object(GLctx);webgl_enable_WEBGL_draw_buffers(GLctx);{GLctx.disjointTimerQueryExt=GLctx.getExtension("EXT_disjoint_timer_query")}webgl_enable_WEBGL_multi_draw(GLctx);var exts=GLctx.getSupportedExtensions()||[];exts.forEach(ext=>{if(!ext.includes("lose_context")&&!ext.includes("debug")){GLctx.getExtension(ext)}})},getExtensions(){var exts=GLctx.getSupportedExtensions()||[];exts=exts.concat(exts.map(e=>"GL_"+e));return exts}};var _eglCreateContext=(display,config,hmm,contextAttribs)=>{if(display!=62e3){EGL.setErrorCode(12296);return 0}var glesContextVersion=1;for(;;){var param=HEAP32[contextAttribs>>2];if(param==12440){glesContextVersion=HEAP32[contextAttribs+4>>2]}else if(param==12344){break}else{EGL.setErrorCode(12292);return 0}contextAttribs+=8}if(glesContextVersion!=2){EGL.setErrorCode(12293);return 0}EGL.contextAttributes.majorVersion=glesContextVersion-1;EGL.contextAttributes.minorVersion=0;EGL.context=GL.createContext(Module["canvas"],EGL.contextAttributes);if(EGL.context!=0){EGL.setErrorCode(12288);GL.makeContextCurrent(EGL.context);Module.useWebGL=true;Browser.moduleContextCreatedCallbacks.forEach(function(callback){callback()});GL.makeContextCurrent(null);return 62004}else{EGL.setErrorCode(12297);return 0}};var _eglCreateWindowSurface=(display,config,win,attrib_list)=>{if(display!=62e3){EGL.setErrorCode(12296);return 0}if(config!=62002){EGL.setErrorCode(12293);return 0}EGL.setErrorCode(12288);return 62006};var _eglDestroyContext=(display,context)=>{if(display!=62e3){EGL.setErrorCode(12296);return 0}if(context!=62004){EGL.setErrorCode(12294);return 0}GL.deleteContext(EGL.context);EGL.setErrorCode(12288);if(EGL.currentContext==context){EGL.currentContext=0}return 1};var _eglDestroySurface=(display,surface)=>{if(display!=62e3){EGL.setErrorCode(12296);return 0}if(surface!=62006){EGL.setErrorCode(12301);return 1}if(EGL.currentReadSurface==surface){EGL.currentReadSurface=0}if(EGL.currentDrawSurface==surface){EGL.currentDrawSurface=0}EGL.setErrorCode(12288);return 1};var _eglGetConfigAttrib=(display,config,attribute,value)=>{if(display!=62e3){EGL.setErrorCode(12296);return 0}if(config!=62002){EGL.setErrorCode(12293);return 0}if(!value){EGL.setErrorCode(12300);return 0}EGL.setErrorCode(12288);switch(attribute){case 12320:HEAP32[value>>2]=EGL.contextAttributes.alpha?32:24;return 1;case 12321:HEAP32[value>>2]=EGL.contextAttributes.alpha?8:0;return 1;case 12322:HEAP32[value>>2]=8;return 1;case 12323:HEAP32[value>>2]=8;return 1;case 12324:HEAP32[value>>2]=8;return 1;case 12325:HEAP32[value>>2]=EGL.contextAttributes.depth?24:0;return 1;case 12326:HEAP32[value>>2]=EGL.contextAttributes.stencil?8:0;return 1;case 12327:HEAP32[value>>2]=12344;return 1;case 12328:HEAP32[value>>2]=62002;return 1;case 12329:HEAP32[value>>2]=0;return 1;case 12330:HEAP32[value>>2]=4096;return 1;case 12331:HEAP32[value>>2]=16777216;return 1;case 12332:HEAP32[value>>2]=4096;return 1;case 12333:HEAP32[value>>2]=0;return 1;case 12334:HEAP32[value>>2]=0;return 1;case 12335:HEAP32[value>>2]=12344;return 1;case 12337:HEAP32[value>>2]=EGL.contextAttributes.antialias?4:0;return 1;case 12338:HEAP32[value>>2]=EGL.contextAttributes.antialias?1:0;return 1;case 12339:HEAP32[value>>2]=4;return 1;case 12340:HEAP32[value>>2]=12344;return 1;case 12341:case 12342:case 12343:HEAP32[value>>2]=-1;return 1;case 12345:case 12346:HEAP32[value>>2]=0;return 1;case 12347:HEAP32[value>>2]=0;return 1;case 12348:HEAP32[value>>2]=1;return 1;case 12349:case 12350:HEAP32[value>>2]=0;return 1;case 12351:HEAP32[value>>2]=12430;return 1;case 12352:HEAP32[value>>2]=4;return 1;case 12354:HEAP32[value>>2]=0;return 1;default:EGL.setErrorCode(12292);return 0}};var _eglGetDisplay=nativeDisplayType=>{EGL.setErrorCode(12288);if(nativeDisplayType!=0&&nativeDisplayType!=1){return 0}return 62e3};var _eglGetError=()=>EGL.errorCode;var _eglInitialize=(display,majorVersion,minorVersion)=>{if(display!=62e3){EGL.setErrorCode(12296);return 0}if(majorVersion){HEAP32[majorVersion>>2]=1}if(minorVersion){HEAP32[minorVersion>>2]=4}EGL.defaultDisplayInitialized=true;EGL.setErrorCode(12288);return 1};var _eglMakeCurrent=(display,draw,read,context)=>{if(display!=62e3){EGL.setErrorCode(12296);return 0}if(context!=0&&context!=62004){EGL.setErrorCode(12294);return 0}if(read!=0&&read!=62006||draw!=0&&draw!=62006){EGL.setErrorCode(12301);return 0}GL.makeContextCurrent(context?EGL.context:null);EGL.currentContext=context;EGL.currentDrawSurface=draw;EGL.currentReadSurface=read;EGL.setErrorCode(12288);return 1};var stringToUTF8=(str,outPtr,maxBytesToWrite)=>stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite);var stringToNewUTF8=str=>{var size=lengthBytesUTF8(str)+1;var ret=_malloc(size);if(ret)stringToUTF8(str,ret,size);return ret};var _eglQueryString=(display,name)=>{if(display!=62e3){EGL.setErrorCode(12296);return 0}EGL.setErrorCode(12288);if(EGL.stringCache[name])return EGL.stringCache[name];var ret;switch(name){case 12371:ret=stringToNewUTF8("Emscripten");break;case 12372:ret=stringToNewUTF8("1.4 Emscripten EGL");break;case 12373:ret=stringToNewUTF8("");break;case 12429:ret=stringToNewUTF8("OpenGL_ES");break;default:EGL.setErrorCode(12300);return 0}EGL.stringCache[name]=ret;return ret};var _eglSwapBuffers=(dpy,surface)=>{if(!EGL.defaultDisplayInitialized){EGL.setErrorCode(12289)}else if(!Module.ctx){EGL.setErrorCode(12290)}else if(Module.ctx.isContextLost()){EGL.setErrorCode(12302)}else{EGL.setErrorCode(12288);return 1}return 0};var _eglSwapInterval=(display,interval)=>{if(display!=62e3){EGL.setErrorCode(12296);return 0}if(interval==0)_emscripten_set_main_loop_timing(0,0);else _emscripten_set_main_loop_timing(1,interval);EGL.setErrorCode(12288);return 1};var _eglTerminate=display=>{if(display!=62e3){EGL.setErrorCode(12296);return 0}EGL.currentContext=0;EGL.currentReadSurface=0;EGL.currentDrawSurface=0;EGL.defaultDisplayInitialized=false;EGL.setErrorCode(12288);return 1};var _eglWaitClient=()=>{EGL.setErrorCode(12288);return 1};var _eglWaitGL=_eglWaitClient;var _eglWaitNative=nativeEngineId=>{EGL.setErrorCode(12288);return 1};var readEmAsmArgsArray=[];var readEmAsmArgs=(sigPtr,buf)=>{readEmAsmArgsArray.length=0;var ch;while(ch=HEAPU8[sigPtr++]){var wide=ch!=105;wide&=ch!=112;buf+=wide&&buf%8?4:0;readEmAsmArgsArray.push(ch==112?HEAPU32[buf>>2]:ch==105?HEAP32[buf>>2]:HEAPF64[buf>>3]);buf+=wide?8:4}return readEmAsmArgsArray};var runEmAsmFunction=(code,sigPtr,argbuf)=>{var args=readEmAsmArgs(sigPtr,argbuf);return ASM_CONSTS[code].apply(null,args)};var _emscripten_asm_const_int=(code,sigPtr,argbuf)=>runEmAsmFunction(code,sigPtr,argbuf);var runMainThreadEmAsm=(code,sigPtr,argbuf,sync)=>{var args=readEmAsmArgs(sigPtr,argbuf);return ASM_CONSTS[code].apply(null,args)};var _emscripten_asm_const_int_sync_on_main_thread=(code,sigPtr,argbuf)=>runMainThreadEmAsm(code,sigPtr,argbuf,1);var _emscripten_date_now=()=>Date.now();var withStackSave=f=>{var stack=stackSave();var ret=f();stackRestore(stack);return ret};var JSEvents={inEventHandler:0,removeAllEventListeners(){for(var i=JSEvents.eventHandlers.length-1;i>=0;--i){JSEvents._removeHandler(i)}JSEvents.eventHandlers=[];JSEvents.deferredCalls=[]},registerRemoveEventListeners(){if(!JSEvents.removeEventListenersRegistered){__ATEXIT__.push(JSEvents.removeAllEventListeners);JSEvents.removeEventListenersRegistered=true}},deferredCalls:[],deferCall(targetFunction,precedence,argsList){function arraysHaveEqualContent(arrA,arrB){if(arrA.length!=arrB.length)return false;for(var i in arrA){if(arrA[i]!=arrB[i])return false}return true}for(var i in JSEvents.deferredCalls){var call=JSEvents.deferredCalls[i];if(call.targetFunction==targetFunction&&arraysHaveEqualContent(call.argsList,argsList)){return}}JSEvents.deferredCalls.push({targetFunction:targetFunction,precedence:precedence,argsList:argsList});JSEvents.deferredCalls.sort((x,y)=>x.precedence{for(var i=0;icString>2?UTF8ToString(cString):cString;var specialHTMLTargets=[0,typeof document!="undefined"?document:0,typeof window!="undefined"?window:0];var findEventTarget=target=>{target=maybeCStringToJsString(target);var domElement=specialHTMLTargets[target]||(typeof document!="undefined"?document.querySelector(target):undefined);return domElement};var findCanvasEventTarget=target=>findEventTarget(target);var _emscripten_get_canvas_element_size=(target,width,height)=>{var canvas=findCanvasEventTarget(target);if(!canvas)return-4;HEAP32[width>>2]=canvas.width;HEAP32[height>>2]=canvas.height};var stringToUTF8OnStack=str=>{var size=lengthBytesUTF8(str)+1;var ret=stackAlloc(size);stringToUTF8(str,ret,size);return ret};var getCanvasElementSize=target=>withStackSave(()=>{var w=stackAlloc(8);var h=w+4;var targetInt=stringToUTF8OnStack(target.id);var ret=_emscripten_get_canvas_element_size(targetInt,w,h);var size=[HEAP32[w>>2],HEAP32[h>>2]];return size});var _emscripten_set_canvas_element_size=(target,width,height)=>{var canvas=findCanvasEventTarget(target);if(!canvas)return-4;canvas.width=width;canvas.height=height;return 0};var setCanvasElementSize=(target,width,height)=>{if(!target.controlTransferredOffscreen){target.width=width;target.height=height}else{withStackSave(()=>{var targetInt=stringToUTF8OnStack(target.id);_emscripten_set_canvas_element_size(targetInt,width,height)})}};var registerRestoreOldStyle=canvas=>{var canvasSize=getCanvasElementSize(canvas);var oldWidth=canvasSize[0];var oldHeight=canvasSize[1];var oldCssWidth=canvas.style.width;var oldCssHeight=canvas.style.height;var oldBackgroundColor=canvas.style.backgroundColor;var oldDocumentBackgroundColor=document.body.style.backgroundColor;var oldPaddingLeft=canvas.style.paddingLeft;var oldPaddingRight=canvas.style.paddingRight;var oldPaddingTop=canvas.style.paddingTop;var oldPaddingBottom=canvas.style.paddingBottom;var oldMarginLeft=canvas.style.marginLeft;var oldMarginRight=canvas.style.marginRight;var oldMarginTop=canvas.style.marginTop;var oldMarginBottom=canvas.style.marginBottom;var oldDocumentBodyMargin=document.body.style.margin;var oldDocumentOverflow=document.documentElement.style.overflow;var oldDocumentScroll=document.body.scroll;var oldImageRendering=canvas.style.imageRendering;function restoreOldStyle(){var fullscreenElement=document.fullscreenElement||document.webkitFullscreenElement;if(!fullscreenElement){document.removeEventListener("fullscreenchange",restoreOldStyle);document.removeEventListener("webkitfullscreenchange",restoreOldStyle);setCanvasElementSize(canvas,oldWidth,oldHeight);canvas.style.width=oldCssWidth;canvas.style.height=oldCssHeight;canvas.style.backgroundColor=oldBackgroundColor;if(!oldDocumentBackgroundColor)document.body.style.backgroundColor="white";document.body.style.backgroundColor=oldDocumentBackgroundColor;canvas.style.paddingLeft=oldPaddingLeft;canvas.style.paddingRight=oldPaddingRight;canvas.style.paddingTop=oldPaddingTop;canvas.style.paddingBottom=oldPaddingBottom;canvas.style.marginLeft=oldMarginLeft;canvas.style.marginRight=oldMarginRight;canvas.style.marginTop=oldMarginTop;canvas.style.marginBottom=oldMarginBottom;document.body.style.margin=oldDocumentBodyMargin;document.documentElement.style.overflow=oldDocumentOverflow;document.body.scroll=oldDocumentScroll;canvas.style.imageRendering=oldImageRendering;if(canvas.GLctxObject)canvas.GLctxObject.GLctx.viewport(0,0,oldWidth,oldHeight);if(currentFullscreenStrategy.canvasResizedCallback){getWasmTableEntry(currentFullscreenStrategy.canvasResizedCallback)(37,0,currentFullscreenStrategy.canvasResizedCallbackUserData)}}}document.addEventListener("fullscreenchange",restoreOldStyle);document.addEventListener("webkitfullscreenchange",restoreOldStyle);return restoreOldStyle};var setLetterbox=(element,topBottom,leftRight)=>{element.style.paddingLeft=element.style.paddingRight=leftRight+"px";element.style.paddingTop=element.style.paddingBottom=topBottom+"px"};var getBoundingClientRect=e=>specialHTMLTargets.indexOf(e)<0?e.getBoundingClientRect():{"left":0,"top":0};var JSEvents_resizeCanvasForFullscreen=(target,strategy)=>{var restoreOldStyle=registerRestoreOldStyle(target);var cssWidth=strategy.softFullscreen?innerWidth:screen.width;var cssHeight=strategy.softFullscreen?innerHeight:screen.height;var rect=getBoundingClientRect(target);var windowedCssWidth=rect.width;var windowedCssHeight=rect.height;var canvasSize=getCanvasElementSize(target);var windowedRttWidth=canvasSize[0];var windowedRttHeight=canvasSize[1];if(strategy.scaleMode==3){setLetterbox(target,(cssHeight-windowedCssHeight)/2,(cssWidth-windowedCssWidth)/2);cssWidth=windowedCssWidth;cssHeight=windowedCssHeight}else if(strategy.scaleMode==2){if(cssWidth*windowedRttHeight{if(strategy.scaleMode!=0||strategy.canvasResolutionScaleMode!=0){JSEvents_resizeCanvasForFullscreen(target,strategy)}if(target.requestFullscreen){target.requestFullscreen()}else if(target.webkitRequestFullscreen){target.webkitRequestFullscreen(Element.ALLOW_KEYBOARD_INPUT)}else{return JSEvents.fullscreenEnabled()?-3:-1}currentFullscreenStrategy=strategy;if(strategy.canvasResizedCallback){getWasmTableEntry(strategy.canvasResizedCallback)(37,0,strategy.canvasResizedCallbackUserData)}return 0};var _emscripten_exit_fullscreen=()=>{if(!JSEvents.fullscreenEnabled())return-1;JSEvents.removeDeferredCalls(JSEvents_requestFullscreen);var d=specialHTMLTargets[1];if(d.exitFullscreen){d.fullscreenElement&&d.exitFullscreen()}else if(d.webkitExitFullscreen){d.webkitFullscreenElement&&d.webkitExitFullscreen()}else{return-1}return 0};var requestPointerLock=target=>{if(target.requestPointerLock){target.requestPointerLock()}else{if(document.body.requestPointerLock){return-3}return-1}return 0};var _emscripten_exit_pointerlock=()=>{JSEvents.removeDeferredCalls(requestPointerLock);if(document.exitPointerLock){document.exitPointerLock()}else{return-1}return 0};var _emscripten_get_device_pixel_ratio=()=>typeof devicePixelRatio=="number"&&devicePixelRatio||1;var _emscripten_get_element_css_size=(target,width,height)=>{target=findEventTarget(target);if(!target)return-4;var rect=getBoundingClientRect(target);HEAPF64[width>>3]=rect.width;HEAPF64[height>>3]=rect.height;return 0};var fillGamepadEventData=(eventStruct,e)=>{HEAPF64[eventStruct>>3]=e.timestamp;for(var i=0;i>3]=e.axes[i]}for(var i=0;i>3]=e.buttons[i].value}else{HEAPF64[eventStruct+i*8+528>>3]=e.buttons[i]}}for(var i=0;i>2]=e.buttons[i].pressed}else{HEAP32[eventStruct+i*4+1040>>2]=e.buttons[i]==1}}HEAP32[eventStruct+1296>>2]=e.connected;HEAP32[eventStruct+1300>>2]=e.index;HEAP32[eventStruct+8>>2]=e.axes.length;HEAP32[eventStruct+12>>2]=e.buttons.length;stringToUTF8(e.id,eventStruct+1304,64);stringToUTF8(e.mapping,eventStruct+1368,64)};var _emscripten_get_gamepad_status=(index,gamepadState)=>{if(index<0||index>=JSEvents.lastGamepadState.length)return-5;if(!JSEvents.lastGamepadState[index])return-7;fillGamepadEventData(gamepadState,JSEvents.lastGamepadState[index]);return 0};var _emscripten_get_num_gamepads=()=>JSEvents.lastGamepadState.length;var _emscripten_get_screen_size=(width,height)=>{HEAP32[width>>2]=screen.width;HEAP32[height>>2]=screen.height};function _glActiveTexture(x0){GLctx.activeTexture(x0)}var _emscripten_glActiveTexture=_glActiveTexture;var _glAttachShader=(program,shader)=>{GLctx.attachShader(GL.programs[program],GL.shaders[shader])};var _emscripten_glAttachShader=_glAttachShader;var _glBeginQueryEXT=(target,id)=>{GLctx.disjointTimerQueryExt["beginQueryEXT"](target,GL.queries[id])};var _emscripten_glBeginQueryEXT=_glBeginQueryEXT;var _glBindAttribLocation=(program,index,name)=>{GLctx.bindAttribLocation(GL.programs[program],index,UTF8ToString(name))};var _emscripten_glBindAttribLocation=_glBindAttribLocation;var _glBindBuffer=(target,buffer)=>{GLctx.bindBuffer(target,GL.buffers[buffer])};var _emscripten_glBindBuffer=_glBindBuffer;var _glBindFramebuffer=(target,framebuffer)=>{GLctx.bindFramebuffer(target,GL.framebuffers[framebuffer])};var _emscripten_glBindFramebuffer=_glBindFramebuffer;var _glBindRenderbuffer=(target,renderbuffer)=>{GLctx.bindRenderbuffer(target,GL.renderbuffers[renderbuffer])};var _emscripten_glBindRenderbuffer=_glBindRenderbuffer;var _glBindTexture=(target,texture)=>{GLctx.bindTexture(target,GL.textures[texture])};var _emscripten_glBindTexture=_glBindTexture;var _glBindVertexArray=vao=>{GLctx.bindVertexArray(GL.vaos[vao])};var _glBindVertexArrayOES=_glBindVertexArray;var _emscripten_glBindVertexArrayOES=_glBindVertexArrayOES;function _glBlendColor(x0,x1,x2,x3){GLctx.blendColor(x0,x1,x2,x3)}var _emscripten_glBlendColor=_glBlendColor;function _glBlendEquation(x0){GLctx.blendEquation(x0)}var _emscripten_glBlendEquation=_glBlendEquation;function _glBlendEquationSeparate(x0,x1){GLctx.blendEquationSeparate(x0,x1)}var _emscripten_glBlendEquationSeparate=_glBlendEquationSeparate;function _glBlendFunc(x0,x1){GLctx.blendFunc(x0,x1)}var _emscripten_glBlendFunc=_glBlendFunc;function _glBlendFuncSeparate(x0,x1,x2,x3){GLctx.blendFuncSeparate(x0,x1,x2,x3)}var _emscripten_glBlendFuncSeparate=_glBlendFuncSeparate;var _glBufferData=(target,size,data,usage)=>{GLctx.bufferData(target,data?HEAPU8.subarray(data,data+size):size,usage)};var _emscripten_glBufferData=_glBufferData;var _glBufferSubData=(target,offset,size,data)=>{GLctx.bufferSubData(target,offset,HEAPU8.subarray(data,data+size))};var _emscripten_glBufferSubData=_glBufferSubData;function _glCheckFramebufferStatus(x0){return GLctx.checkFramebufferStatus(x0)}var _emscripten_glCheckFramebufferStatus=_glCheckFramebufferStatus;function _glClear(x0){GLctx.clear(x0)}var _emscripten_glClear=_glClear;function _glClearColor(x0,x1,x2,x3){GLctx.clearColor(x0,x1,x2,x3)}var _emscripten_glClearColor=_glClearColor;function _glClearDepthf(x0){GLctx.clearDepth(x0)}var _emscripten_glClearDepthf=_glClearDepthf;function _glClearStencil(x0){GLctx.clearStencil(x0)}var _emscripten_glClearStencil=_glClearStencil;var _glColorMask=(red,green,blue,alpha)=>{GLctx.colorMask(!!red,!!green,!!blue,!!alpha)};var _emscripten_glColorMask=_glColorMask;var _glCompileShader=shader=>{GLctx.compileShader(GL.shaders[shader])};var _emscripten_glCompileShader=_glCompileShader;var _glCompressedTexImage2D=(target,level,internalFormat,width,height,border,imageSize,data)=>{GLctx.compressedTexImage2D(target,level,internalFormat,width,height,border,data?HEAPU8.subarray(data,data+imageSize):null)};var _emscripten_glCompressedTexImage2D=_glCompressedTexImage2D;var _glCompressedTexSubImage2D=(target,level,xoffset,yoffset,width,height,format,imageSize,data)=>{GLctx.compressedTexSubImage2D(target,level,xoffset,yoffset,width,height,format,data?HEAPU8.subarray(data,data+imageSize):null)};var _emscripten_glCompressedTexSubImage2D=_glCompressedTexSubImage2D;function _glCopyTexImage2D(x0,x1,x2,x3,x4,x5,x6,x7){GLctx.copyTexImage2D(x0,x1,x2,x3,x4,x5,x6,x7)}var _emscripten_glCopyTexImage2D=_glCopyTexImage2D;function _glCopyTexSubImage2D(x0,x1,x2,x3,x4,x5,x6,x7){GLctx.copyTexSubImage2D(x0,x1,x2,x3,x4,x5,x6,x7)}var _emscripten_glCopyTexSubImage2D=_glCopyTexSubImage2D;var _glCreateProgram=()=>{var id=GL.getNewId(GL.programs);var program=GLctx.createProgram();program.name=id;program.maxUniformLength=program.maxAttributeLength=program.maxUniformBlockNameLength=0;program.uniformIdCounter=1;GL.programs[id]=program;return id};var _emscripten_glCreateProgram=_glCreateProgram;var _glCreateShader=shaderType=>{var id=GL.getNewId(GL.shaders);GL.shaders[id]=GLctx.createShader(shaderType);return id};var _emscripten_glCreateShader=_glCreateShader;function _glCullFace(x0){GLctx.cullFace(x0)}var _emscripten_glCullFace=_glCullFace;var _glDeleteBuffers=(n,buffers)=>{for(var i=0;i>2];var buffer=GL.buffers[id];if(!buffer)continue;GLctx.deleteBuffer(buffer);buffer.name=0;GL.buffers[id]=null}};var _emscripten_glDeleteBuffers=_glDeleteBuffers;var _glDeleteFramebuffers=(n,framebuffers)=>{for(var i=0;i>2];var framebuffer=GL.framebuffers[id];if(!framebuffer)continue;GLctx.deleteFramebuffer(framebuffer);framebuffer.name=0;GL.framebuffers[id]=null}};var _emscripten_glDeleteFramebuffers=_glDeleteFramebuffers;var _glDeleteProgram=id=>{if(!id)return;var program=GL.programs[id];if(!program){GL.recordError(1281);return}GLctx.deleteProgram(program);program.name=0;GL.programs[id]=null};var _emscripten_glDeleteProgram=_glDeleteProgram;var _glDeleteQueriesEXT=(n,ids)=>{for(var i=0;i>2];var query=GL.queries[id];if(!query)continue;GLctx.disjointTimerQueryExt["deleteQueryEXT"](query);GL.queries[id]=null}};var _emscripten_glDeleteQueriesEXT=_glDeleteQueriesEXT;var _glDeleteRenderbuffers=(n,renderbuffers)=>{for(var i=0;i>2];var renderbuffer=GL.renderbuffers[id];if(!renderbuffer)continue;GLctx.deleteRenderbuffer(renderbuffer);renderbuffer.name=0;GL.renderbuffers[id]=null}};var _emscripten_glDeleteRenderbuffers=_glDeleteRenderbuffers;var _glDeleteShader=id=>{if(!id)return;var shader=GL.shaders[id];if(!shader){GL.recordError(1281);return}GLctx.deleteShader(shader);GL.shaders[id]=null};var _emscripten_glDeleteShader=_glDeleteShader;var _glDeleteTextures=(n,textures)=>{for(var i=0;i>2];var texture=GL.textures[id];if(!texture)continue;GLctx.deleteTexture(texture);texture.name=0;GL.textures[id]=null}};var _emscripten_glDeleteTextures=_glDeleteTextures;var _glDeleteVertexArrays=(n,vaos)=>{for(var i=0;i>2];GLctx.deleteVertexArray(GL.vaos[id]);GL.vaos[id]=null}};var _glDeleteVertexArraysOES=_glDeleteVertexArrays;var _emscripten_glDeleteVertexArraysOES=_glDeleteVertexArraysOES;function _glDepthFunc(x0){GLctx.depthFunc(x0)}var _emscripten_glDepthFunc=_glDepthFunc;var _glDepthMask=flag=>{GLctx.depthMask(!!flag)};var _emscripten_glDepthMask=_glDepthMask;function _glDepthRangef(x0,x1){GLctx.depthRange(x0,x1)}var _emscripten_glDepthRangef=_glDepthRangef;var _glDetachShader=(program,shader)=>{GLctx.detachShader(GL.programs[program],GL.shaders[shader])};var _emscripten_glDetachShader=_glDetachShader;function _glDisable(x0){GLctx.disable(x0)}var _emscripten_glDisable=_glDisable;var _glDisableVertexAttribArray=index=>{GLctx.disableVertexAttribArray(index)};var _emscripten_glDisableVertexAttribArray=_glDisableVertexAttribArray;var _glDrawArrays=(mode,first,count)=>{GLctx.drawArrays(mode,first,count)};var _emscripten_glDrawArrays=_glDrawArrays;var _glDrawArraysInstanced=(mode,first,count,primcount)=>{GLctx.drawArraysInstanced(mode,first,count,primcount)};var _glDrawArraysInstancedANGLE=_glDrawArraysInstanced;var _emscripten_glDrawArraysInstancedANGLE=_glDrawArraysInstancedANGLE;var tempFixedLengthArray=[];var _glDrawBuffers=(n,bufs)=>{var bufArray=tempFixedLengthArray[n];for(var i=0;i>2]}GLctx.drawBuffers(bufArray)};var _glDrawBuffersWEBGL=_glDrawBuffers;var _emscripten_glDrawBuffersWEBGL=_glDrawBuffersWEBGL;var _glDrawElements=(mode,count,type,indices)=>{GLctx.drawElements(mode,count,type,indices)};var _emscripten_glDrawElements=_glDrawElements;var _glDrawElementsInstanced=(mode,count,type,indices,primcount)=>{GLctx.drawElementsInstanced(mode,count,type,indices,primcount)};var _glDrawElementsInstancedANGLE=_glDrawElementsInstanced;var _emscripten_glDrawElementsInstancedANGLE=_glDrawElementsInstancedANGLE;function _glEnable(x0){GLctx.enable(x0)}var _emscripten_glEnable=_glEnable;var _glEnableVertexAttribArray=index=>{GLctx.enableVertexAttribArray(index)};var _emscripten_glEnableVertexAttribArray=_glEnableVertexAttribArray;var _glEndQueryEXT=target=>{GLctx.disjointTimerQueryExt["endQueryEXT"](target)};var _emscripten_glEndQueryEXT=_glEndQueryEXT;function _glFinish(){GLctx.finish()}var _emscripten_glFinish=_glFinish;function _glFlush(){GLctx.flush()}var _emscripten_glFlush=_glFlush;var _glFramebufferRenderbuffer=(target,attachment,renderbuffertarget,renderbuffer)=>{GLctx.framebufferRenderbuffer(target,attachment,renderbuffertarget,GL.renderbuffers[renderbuffer])};var _emscripten_glFramebufferRenderbuffer=_glFramebufferRenderbuffer;var _glFramebufferTexture2D=(target,attachment,textarget,texture,level)=>{GLctx.framebufferTexture2D(target,attachment,textarget,GL.textures[texture],level)};var _emscripten_glFramebufferTexture2D=_glFramebufferTexture2D;function _glFrontFace(x0){GLctx.frontFace(x0)}var _emscripten_glFrontFace=_glFrontFace;var __glGenObject=(n,buffers,createFunction,objectTable)=>{for(var i=0;i>2]=id}};var _glGenBuffers=(n,buffers)=>{__glGenObject(n,buffers,"createBuffer",GL.buffers)};var _emscripten_glGenBuffers=_glGenBuffers;var _glGenFramebuffers=(n,ids)=>{__glGenObject(n,ids,"createFramebuffer",GL.framebuffers)};var _emscripten_glGenFramebuffers=_glGenFramebuffers;var _glGenQueriesEXT=(n,ids)=>{for(var i=0;i>2]=0;return}var id=GL.getNewId(GL.queries);query.name=id;GL.queries[id]=query;HEAP32[ids+i*4>>2]=id}};var _emscripten_glGenQueriesEXT=_glGenQueriesEXT;var _glGenRenderbuffers=(n,renderbuffers)=>{__glGenObject(n,renderbuffers,"createRenderbuffer",GL.renderbuffers)};var _emscripten_glGenRenderbuffers=_glGenRenderbuffers;var _glGenTextures=(n,textures)=>{__glGenObject(n,textures,"createTexture",GL.textures)};var _emscripten_glGenTextures=_glGenTextures;function _glGenVertexArrays(n,arrays){__glGenObject(n,arrays,"createVertexArray",GL.vaos)}var _glGenVertexArraysOES=_glGenVertexArrays;var _emscripten_glGenVertexArraysOES=_glGenVertexArraysOES;function _glGenerateMipmap(x0){GLctx.generateMipmap(x0)}var _emscripten_glGenerateMipmap=_glGenerateMipmap;var __glGetActiveAttribOrUniform=(funcName,program,index,bufSize,length,size,type,name)=>{program=GL.programs[program];var info=GLctx[funcName](program,index);if(info){var numBytesWrittenExclNull=name&&stringToUTF8(info.name,name,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull;if(size)HEAP32[size>>2]=info.size;if(type)HEAP32[type>>2]=info.type}};var _glGetActiveAttrib=(program,index,bufSize,length,size,type,name)=>{__glGetActiveAttribOrUniform("getActiveAttrib",program,index,bufSize,length,size,type,name)};var _emscripten_glGetActiveAttrib=_glGetActiveAttrib;var _glGetActiveUniform=(program,index,bufSize,length,size,type,name)=>{__glGetActiveAttribOrUniform("getActiveUniform",program,index,bufSize,length,size,type,name)};var _emscripten_glGetActiveUniform=_glGetActiveUniform;var _glGetAttachedShaders=(program,maxCount,count,shaders)=>{var result=GLctx.getAttachedShaders(GL.programs[program]);var len=result.length;if(len>maxCount){len=maxCount}HEAP32[count>>2]=len;for(var i=0;i>2]=id}};var _emscripten_glGetAttachedShaders=_glGetAttachedShaders;var _glGetAttribLocation=(program,name)=>GLctx.getAttribLocation(GL.programs[program],UTF8ToString(name));var _emscripten_glGetAttribLocation=_glGetAttribLocation;var writeI53ToI64=(ptr,num)=>{HEAPU32[ptr>>2]=num;var lower=HEAPU32[ptr>>2];HEAPU32[ptr+4>>2]=(num-lower)/4294967296};var emscriptenWebGLGet=(name_,p,type)=>{if(!p){GL.recordError(1281);return}var ret=undefined;switch(name_){case 36346:ret=1;break;case 36344:if(type!=0&&type!=1){GL.recordError(1280)}return;case 36345:ret=0;break;case 34466:var formats=GLctx.getParameter(34467);ret=formats?formats.length:0;break}if(ret===undefined){var result=GLctx.getParameter(name_);switch(typeof result){case"number":ret=result;break;case"boolean":ret=result?1:0;break;case"string":GL.recordError(1280);return;case"object":if(result===null){switch(name_){case 34964:case 35725:case 34965:case 36006:case 36007:case 32873:case 34229:case 34068:{ret=0;break}default:{GL.recordError(1280);return}}}else if(result instanceof Float32Array||result instanceof Uint32Array||result instanceof Int32Array||result instanceof Array){for(var i=0;i>2]=result[i];break;case 2:HEAPF32[p+i*4>>2]=result[i];break;case 4:HEAP8[p+i>>0]=result[i]?1:0;break}}return}else{try{ret=result.name|0}catch(e){GL.recordError(1280);err(`GL_INVALID_ENUM in glGet${type}v: Unknown object returned from WebGL getParameter(${name_})! (error: ${e})`);return}}break;default:GL.recordError(1280);err(`GL_INVALID_ENUM in glGet${type}v: Native code calling glGet${type}v(${name_}) and it returns ${result} of type ${typeof result}!`);return}}switch(type){case 1:writeI53ToI64(p,ret);break;case 0:HEAP32[p>>2]=ret;break;case 2:HEAPF32[p>>2]=ret;break;case 4:HEAP8[p>>0]=ret?1:0;break}};var _glGetBooleanv=(name_,p)=>emscriptenWebGLGet(name_,p,4);var _emscripten_glGetBooleanv=_glGetBooleanv;var _glGetBufferParameteriv=(target,value,data)=>{if(!data){GL.recordError(1281);return}HEAP32[data>>2]=GLctx.getBufferParameter(target,value)};var _emscripten_glGetBufferParameteriv=_glGetBufferParameteriv;var _glGetError=()=>{var error=GLctx.getError()||GL.lastError;GL.lastError=0;return error};var _emscripten_glGetError=_glGetError;var _glGetFloatv=(name_,p)=>emscriptenWebGLGet(name_,p,2);var _emscripten_glGetFloatv=_glGetFloatv;var _glGetFramebufferAttachmentParameteriv=(target,attachment,pname,params)=>{var result=GLctx.getFramebufferAttachmentParameter(target,attachment,pname);if(result instanceof WebGLRenderbuffer||result instanceof WebGLTexture){result=result.name|0}HEAP32[params>>2]=result};var _emscripten_glGetFramebufferAttachmentParameteriv=_glGetFramebufferAttachmentParameteriv;var _glGetIntegerv=(name_,p)=>emscriptenWebGLGet(name_,p,0);var _emscripten_glGetIntegerv=_glGetIntegerv;var _glGetProgramInfoLog=(program,maxLength,length,infoLog)=>{var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";var numBytesWrittenExclNull=maxLength>0&&infoLog?stringToUTF8(log,infoLog,maxLength):0;if(length)HEAP32[length>>2]=numBytesWrittenExclNull};var _emscripten_glGetProgramInfoLog=_glGetProgramInfoLog;var _glGetProgramiv=(program,pname,p)=>{if(!p){GL.recordError(1281);return}if(program>=GL.counter){GL.recordError(1281);return}program=GL.programs[program];if(pname==35716){var log=GLctx.getProgramInfoLog(program);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35719){if(!program.maxUniformLength){for(var i=0;i>2]=program.maxUniformLength}else if(pname==35722){if(!program.maxAttributeLength){for(var i=0;i>2]=program.maxAttributeLength}else if(pname==35381){if(!program.maxUniformBlockNameLength){for(var i=0;i>2]=program.maxUniformBlockNameLength}else{HEAP32[p>>2]=GLctx.getProgramParameter(program,pname)}};var _emscripten_glGetProgramiv=_glGetProgramiv;var _glGetQueryObjecti64vEXT=(id,pname,params)=>{if(!params){GL.recordError(1281);return}var query=GL.queries[id];var param;{param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname)}var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}writeI53ToI64(params,ret)};var _emscripten_glGetQueryObjecti64vEXT=_glGetQueryObjecti64vEXT;var _glGetQueryObjectivEXT=(id,pname,params)=>{if(!params){GL.recordError(1281);return}var query=GL.queries[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}HEAP32[params>>2]=ret};var _emscripten_glGetQueryObjectivEXT=_glGetQueryObjectivEXT;var _glGetQueryObjectui64vEXT=_glGetQueryObjecti64vEXT;var _emscripten_glGetQueryObjectui64vEXT=_glGetQueryObjectui64vEXT;var _glGetQueryObjectuivEXT=_glGetQueryObjectivEXT;var _emscripten_glGetQueryObjectuivEXT=_glGetQueryObjectuivEXT;var _glGetQueryivEXT=(target,pname,params)=>{if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.disjointTimerQueryExt["getQueryEXT"](target,pname)};var _emscripten_glGetQueryivEXT=_glGetQueryivEXT;var _glGetRenderbufferParameteriv=(target,pname,params)=>{if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.getRenderbufferParameter(target,pname)};var _emscripten_glGetRenderbufferParameteriv=_glGetRenderbufferParameteriv;var _glGetShaderInfoLog=(shader,maxLength,length,infoLog)=>{var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";var numBytesWrittenExclNull=maxLength>0&&infoLog?stringToUTF8(log,infoLog,maxLength):0;if(length)HEAP32[length>>2]=numBytesWrittenExclNull};var _emscripten_glGetShaderInfoLog=_glGetShaderInfoLog;var _glGetShaderPrecisionFormat=(shaderType,precisionType,range,precision)=>{var result=GLctx.getShaderPrecisionFormat(shaderType,precisionType);HEAP32[range>>2]=result.rangeMin;HEAP32[range+4>>2]=result.rangeMax;HEAP32[precision>>2]=result.precision};var _emscripten_glGetShaderPrecisionFormat=_glGetShaderPrecisionFormat;var _glGetShaderSource=(shader,bufSize,length,source)=>{var result=GLctx.getShaderSource(GL.shaders[shader]);if(!result)return;var numBytesWrittenExclNull=bufSize>0&&source?stringToUTF8(result,source,bufSize):0;if(length)HEAP32[length>>2]=numBytesWrittenExclNull};var _emscripten_glGetShaderSource=_glGetShaderSource;var _glGetShaderiv=(shader,pname,p)=>{if(!p){GL.recordError(1281);return}if(pname==35716){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";var logLength=log?log.length+1:0;HEAP32[p>>2]=logLength}else if(pname==35720){var source=GLctx.getShaderSource(GL.shaders[shader]);var sourceLength=source?source.length+1:0;HEAP32[p>>2]=sourceLength}else{HEAP32[p>>2]=GLctx.getShaderParameter(GL.shaders[shader],pname)}};var _emscripten_glGetShaderiv=_glGetShaderiv;var _glGetString=name_=>{var ret=GL.stringCache[name_];if(!ret){switch(name_){case 7939:ret=stringToNewUTF8(GL.getExtensions().join(" "));break;case 7936:case 7937:case 37445:case 37446:var s=GLctx.getParameter(name_);if(!s){GL.recordError(1280)}ret=s?stringToNewUTF8(s):0;break;case 7938:var glVersion=GLctx.getParameter(7938);{glVersion=`OpenGL ES 2.0 (${glVersion})`}ret=stringToNewUTF8(glVersion);break;case 35724:var glslVersion=GLctx.getParameter(35724);var ver_re=/^WebGL GLSL ES ([0-9]\.[0-9][0-9]?)(?:$| .*)/;var ver_num=glslVersion.match(ver_re);if(ver_num!==null){if(ver_num[1].length==3)ver_num[1]=ver_num[1]+"0";glslVersion=`OpenGL ES GLSL ES ${ver_num[1]} (${glslVersion})`}ret=stringToNewUTF8(glslVersion);break;default:GL.recordError(1280)}GL.stringCache[name_]=ret}return ret};var _emscripten_glGetString=_glGetString;var _glGetTexParameterfv=(target,pname,params)=>{if(!params){GL.recordError(1281);return}HEAPF32[params>>2]=GLctx.getTexParameter(target,pname)};var _emscripten_glGetTexParameterfv=_glGetTexParameterfv;var _glGetTexParameteriv=(target,pname,params)=>{if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.getTexParameter(target,pname)};var _emscripten_glGetTexParameteriv=_glGetTexParameteriv;var jstoi_q=str=>parseInt(str);var webglGetLeftBracePos=name=>name.slice(-1)=="]"&&name.lastIndexOf("[");var webglPrepareUniformLocationsBeforeFirstUse=program=>{var uniformLocsById=program.uniformLocsById,uniformSizeAndIdsByName=program.uniformSizeAndIdsByName,i,j;if(!uniformLocsById){program.uniformLocsById=uniformLocsById={};program.uniformArrayNamesById={};for(i=0;i0?nm.slice(0,lb):nm;var id=program.uniformIdCounter;program.uniformIdCounter+=sz;uniformSizeAndIdsByName[arrayName]=[sz,id];for(j=0;j{name=UTF8ToString(name);if(program=GL.programs[program]){webglPrepareUniformLocationsBeforeFirstUse(program);var uniformLocsById=program.uniformLocsById;var arrayIndex=0;var uniformBaseName=name;var leftBrace=webglGetLeftBracePos(name);if(leftBrace>0){arrayIndex=jstoi_q(name.slice(leftBrace+1))>>>0;uniformBaseName=name.slice(0,leftBrace)}var sizeAndId=program.uniformSizeAndIdsByName[uniformBaseName];if(sizeAndId&&arrayIndex{var p=GLctx.currentProgram;if(p){var webglLoc=p.uniformLocsById[location];if(typeof webglLoc=="number"){p.uniformLocsById[location]=webglLoc=GLctx.getUniformLocation(p,p.uniformArrayNamesById[location]+(webglLoc>0?`[${webglLoc}]`:""))}return webglLoc}else{GL.recordError(1282)}};var emscriptenWebGLGetUniform=(program,location,params,type)=>{if(!params){GL.recordError(1281);return}program=GL.programs[program];webglPrepareUniformLocationsBeforeFirstUse(program);var data=GLctx.getUniform(program,webglGetUniformLocation(location));if(typeof data=="number"||typeof data=="boolean"){switch(type){case 0:HEAP32[params>>2]=data;break;case 2:HEAPF32[params>>2]=data;break}}else{for(var i=0;i>2]=data[i];break;case 2:HEAPF32[params+i*4>>2]=data[i];break}}}};var _glGetUniformfv=(program,location,params)=>{emscriptenWebGLGetUniform(program,location,params,2)};var _emscripten_glGetUniformfv=_glGetUniformfv;var _glGetUniformiv=(program,location,params)=>{emscriptenWebGLGetUniform(program,location,params,0)};var _emscripten_glGetUniformiv=_glGetUniformiv;var _glGetVertexAttribPointerv=(index,pname,pointer)=>{if(!pointer){GL.recordError(1281);return}HEAP32[pointer>>2]=GLctx.getVertexAttribOffset(index,pname)};var _emscripten_glGetVertexAttribPointerv=_glGetVertexAttribPointerv;var emscriptenWebGLGetVertexAttrib=(index,pname,params,type)=>{if(!params){GL.recordError(1281);return}var data=GLctx.getVertexAttrib(index,pname);if(pname==34975){HEAP32[params>>2]=data&&data["name"]}else if(typeof data=="number"||typeof data=="boolean"){switch(type){case 0:HEAP32[params>>2]=data;break;case 2:HEAPF32[params>>2]=data;break;case 5:HEAP32[params>>2]=Math.fround(data);break}}else{for(var i=0;i>2]=data[i];break;case 2:HEAPF32[params+i*4>>2]=data[i];break;case 5:HEAP32[params+i*4>>2]=Math.fround(data[i]);break}}}};var _glGetVertexAttribfv=(index,pname,params)=>{emscriptenWebGLGetVertexAttrib(index,pname,params,2)};var _emscripten_glGetVertexAttribfv=_glGetVertexAttribfv;var _glGetVertexAttribiv=(index,pname,params)=>{emscriptenWebGLGetVertexAttrib(index,pname,params,5)};var _emscripten_glGetVertexAttribiv=_glGetVertexAttribiv;function _glHint(x0,x1){GLctx.hint(x0,x1)}var _emscripten_glHint=_glHint;var _glIsBuffer=buffer=>{var b=GL.buffers[buffer];if(!b)return 0;return GLctx.isBuffer(b)};var _emscripten_glIsBuffer=_glIsBuffer;function _glIsEnabled(x0){return GLctx.isEnabled(x0)}var _emscripten_glIsEnabled=_glIsEnabled;var _glIsFramebuffer=framebuffer=>{var fb=GL.framebuffers[framebuffer];if(!fb)return 0;return GLctx.isFramebuffer(fb)};var _emscripten_glIsFramebuffer=_glIsFramebuffer;var _glIsProgram=program=>{program=GL.programs[program];if(!program)return 0;return GLctx.isProgram(program)};var _emscripten_glIsProgram=_glIsProgram;var _glIsQueryEXT=id=>{var query=GL.queries[id];if(!query)return 0;return GLctx.disjointTimerQueryExt["isQueryEXT"](query)};var _emscripten_glIsQueryEXT=_glIsQueryEXT;var _glIsRenderbuffer=renderbuffer=>{var rb=GL.renderbuffers[renderbuffer];if(!rb)return 0;return GLctx.isRenderbuffer(rb)};var _emscripten_glIsRenderbuffer=_glIsRenderbuffer;var _glIsShader=shader=>{var s=GL.shaders[shader];if(!s)return 0;return GLctx.isShader(s)};var _emscripten_glIsShader=_glIsShader;var _glIsTexture=id=>{var texture=GL.textures[id];if(!texture)return 0;return GLctx.isTexture(texture)};var _emscripten_glIsTexture=_glIsTexture;var _glIsVertexArray=array=>{var vao=GL.vaos[array];if(!vao)return 0;return GLctx.isVertexArray(vao)};var _glIsVertexArrayOES=_glIsVertexArray;var _emscripten_glIsVertexArrayOES=_glIsVertexArrayOES;function _glLineWidth(x0){GLctx.lineWidth(x0)}var _emscripten_glLineWidth=_glLineWidth;var _glLinkProgram=program=>{program=GL.programs[program];GLctx.linkProgram(program);program.uniformLocsById=0;program.uniformSizeAndIdsByName={}};var _emscripten_glLinkProgram=_glLinkProgram;var _glPixelStorei=(pname,param)=>{if(pname==3317){GL.unpackAlignment=param}GLctx.pixelStorei(pname,param)};var _emscripten_glPixelStorei=_glPixelStorei;function _glPolygonOffset(x0,x1){GLctx.polygonOffset(x0,x1)}var _emscripten_glPolygonOffset=_glPolygonOffset;var _glQueryCounterEXT=(id,target)=>{GLctx.disjointTimerQueryExt["queryCounterEXT"](GL.queries[id],target)};var _emscripten_glQueryCounterEXT=_glQueryCounterEXT;var computeUnpackAlignedImageSize=(width,height,sizePerPixel,alignment)=>{function roundedToNextMultipleOf(x,y){return x+y-1&-y}var plainRowSize=width*sizePerPixel;var alignedRowSize=roundedToNextMultipleOf(plainRowSize,alignment);return height*alignedRowSize};var colorChannelsInGlTextureFormat=format=>{var colorChannels={5:3,6:4,8:2,29502:3,29504:4};return colorChannels[format-6402]||1};var heapObjectForWebGLType=type=>{type-=5120;if(type==1)return HEAPU8;if(type==4)return HEAP32;if(type==6)return HEAPF32;if(type==5||type==28922)return HEAPU32;return HEAPU16};var heapAccessShiftForWebGLHeap=heap=>31-Math.clz32(heap.BYTES_PER_ELEMENT);var emscriptenWebGLGetTexPixelData=(type,format,width,height,pixels,internalFormat)=>{var heap=heapObjectForWebGLType(type);var shift=heapAccessShiftForWebGLHeap(heap);var byteSize=1<>shift,pixels+bytes>>shift)};var _glReadPixels=(x,y,width,height,format,type,pixels)=>{var pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,format);if(!pixelData){GL.recordError(1280);return}GLctx.readPixels(x,y,width,height,format,type,pixelData)};var _emscripten_glReadPixels=_glReadPixels;var _glReleaseShaderCompiler=()=>{};var _emscripten_glReleaseShaderCompiler=_glReleaseShaderCompiler;function _glRenderbufferStorage(x0,x1,x2,x3){GLctx.renderbufferStorage(x0,x1,x2,x3)}var _emscripten_glRenderbufferStorage=_glRenderbufferStorage;var _glSampleCoverage=(value,invert)=>{GLctx.sampleCoverage(value,!!invert)};var _emscripten_glSampleCoverage=_glSampleCoverage;function _glScissor(x0,x1,x2,x3){GLctx.scissor(x0,x1,x2,x3)}var _emscripten_glScissor=_glScissor;var _glShaderBinary=(count,shaders,binaryformat,binary,length)=>{GL.recordError(1280)};var _emscripten_glShaderBinary=_glShaderBinary;var _glShaderSource=(shader,count,string,length)=>{var source=GL.getSource(shader,count,string,length);GLctx.shaderSource(GL.shaders[shader],source)};var _emscripten_glShaderSource=_glShaderSource;function _glStencilFunc(x0,x1,x2){GLctx.stencilFunc(x0,x1,x2)}var _emscripten_glStencilFunc=_glStencilFunc;function _glStencilFuncSeparate(x0,x1,x2,x3){GLctx.stencilFuncSeparate(x0,x1,x2,x3)}var _emscripten_glStencilFuncSeparate=_glStencilFuncSeparate;function _glStencilMask(x0){GLctx.stencilMask(x0)}var _emscripten_glStencilMask=_glStencilMask;function _glStencilMaskSeparate(x0,x1){GLctx.stencilMaskSeparate(x0,x1)}var _emscripten_glStencilMaskSeparate=_glStencilMaskSeparate;function _glStencilOp(x0,x1,x2){GLctx.stencilOp(x0,x1,x2)}var _emscripten_glStencilOp=_glStencilOp;function _glStencilOpSeparate(x0,x1,x2,x3){GLctx.stencilOpSeparate(x0,x1,x2,x3)}var _emscripten_glStencilOpSeparate=_glStencilOpSeparate;var _glTexImage2D=(target,level,internalFormat,width,height,border,format,type,pixels)=>{GLctx.texImage2D(target,level,internalFormat,width,height,border,format,type,pixels?emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat):null)};var _emscripten_glTexImage2D=_glTexImage2D;function _glTexParameterf(x0,x1,x2){GLctx.texParameterf(x0,x1,x2)}var _emscripten_glTexParameterf=_glTexParameterf;var _glTexParameterfv=(target,pname,params)=>{var param=HEAPF32[params>>2];GLctx.texParameterf(target,pname,param)};var _emscripten_glTexParameterfv=_glTexParameterfv;function _glTexParameteri(x0,x1,x2){GLctx.texParameteri(x0,x1,x2)}var _emscripten_glTexParameteri=_glTexParameteri;var _glTexParameteriv=(target,pname,params)=>{var param=HEAP32[params>>2];GLctx.texParameteri(target,pname,param)};var _emscripten_glTexParameteriv=_glTexParameteriv;var _glTexSubImage2D=(target,level,xoffset,yoffset,width,height,format,type,pixels)=>{var pixelData=null;if(pixels)pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,0);GLctx.texSubImage2D(target,level,xoffset,yoffset,width,height,format,type,pixelData)};var _emscripten_glTexSubImage2D=_glTexSubImage2D;var _glUniform1f=(location,v0)=>{GLctx.uniform1f(webglGetUniformLocation(location),v0)};var _emscripten_glUniform1f=_glUniform1f;var miniTempWebGLFloatBuffers=[];var _glUniform1fv=(location,count,value)=>{if(count<=288){var view=miniTempWebGLFloatBuffers[count-1];for(var i=0;i>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*4>>2)}GLctx.uniform1fv(webglGetUniformLocation(location),view)};var _emscripten_glUniform1fv=_glUniform1fv;var _glUniform1i=(location,v0)=>{GLctx.uniform1i(webglGetUniformLocation(location),v0)};var _emscripten_glUniform1i=_glUniform1i;var miniTempWebGLIntBuffers=[];var _glUniform1iv=(location,count,value)=>{if(count<=288){var view=miniTempWebGLIntBuffers[count-1];for(var i=0;i>2]}}else{var view=HEAP32.subarray(value>>2,value+count*4>>2)}GLctx.uniform1iv(webglGetUniformLocation(location),view)};var _emscripten_glUniform1iv=_glUniform1iv;var _glUniform2f=(location,v0,v1)=>{GLctx.uniform2f(webglGetUniformLocation(location),v0,v1)};var _emscripten_glUniform2f=_glUniform2f;var _glUniform2fv=(location,count,value)=>{if(count<=144){var view=miniTempWebGLFloatBuffers[2*count-1];for(var i=0;i<2*count;i+=2){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*8>>2)}GLctx.uniform2fv(webglGetUniformLocation(location),view)};var _emscripten_glUniform2fv=_glUniform2fv;var _glUniform2i=(location,v0,v1)=>{GLctx.uniform2i(webglGetUniformLocation(location),v0,v1)};var _emscripten_glUniform2i=_glUniform2i;var _glUniform2iv=(location,count,value)=>{if(count<=144){var view=miniTempWebGLIntBuffers[2*count-1];for(var i=0;i<2*count;i+=2){view[i]=HEAP32[value+4*i>>2];view[i+1]=HEAP32[value+(4*i+4)>>2]}}else{var view=HEAP32.subarray(value>>2,value+count*8>>2)}GLctx.uniform2iv(webglGetUniformLocation(location),view)};var _emscripten_glUniform2iv=_glUniform2iv;var _glUniform3f=(location,v0,v1,v2)=>{GLctx.uniform3f(webglGetUniformLocation(location),v0,v1,v2)};var _emscripten_glUniform3f=_glUniform3f;var _glUniform3fv=(location,count,value)=>{if(count<=96){var view=miniTempWebGLFloatBuffers[3*count-1];for(var i=0;i<3*count;i+=3){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*12>>2)}GLctx.uniform3fv(webglGetUniformLocation(location),view)};var _emscripten_glUniform3fv=_glUniform3fv;var _glUniform3i=(location,v0,v1,v2)=>{GLctx.uniform3i(webglGetUniformLocation(location),v0,v1,v2)};var _emscripten_glUniform3i=_glUniform3i;var _glUniform3iv=(location,count,value)=>{if(count<=96){var view=miniTempWebGLIntBuffers[3*count-1];for(var i=0;i<3*count;i+=3){view[i]=HEAP32[value+4*i>>2];view[i+1]=HEAP32[value+(4*i+4)>>2];view[i+2]=HEAP32[value+(4*i+8)>>2]}}else{var view=HEAP32.subarray(value>>2,value+count*12>>2)}GLctx.uniform3iv(webglGetUniformLocation(location),view)};var _emscripten_glUniform3iv=_glUniform3iv;var _glUniform4f=(location,v0,v1,v2,v3)=>{GLctx.uniform4f(webglGetUniformLocation(location),v0,v1,v2,v3)};var _emscripten_glUniform4f=_glUniform4f;var _glUniform4fv=(location,count,value)=>{if(count<=72){var view=miniTempWebGLFloatBuffers[4*count-1];var heap=HEAPF32;value>>=2;for(var i=0;i<4*count;i+=4){var dst=value+i;view[i]=heap[dst];view[i+1]=heap[dst+1];view[i+2]=heap[dst+2];view[i+3]=heap[dst+3]}}else{var view=HEAPF32.subarray(value>>2,value+count*16>>2)}GLctx.uniform4fv(webglGetUniformLocation(location),view)};var _emscripten_glUniform4fv=_glUniform4fv;var _glUniform4i=(location,v0,v1,v2,v3)=>{GLctx.uniform4i(webglGetUniformLocation(location),v0,v1,v2,v3)};var _emscripten_glUniform4i=_glUniform4i;var _glUniform4iv=(location,count,value)=>{if(count<=72){var view=miniTempWebGLIntBuffers[4*count-1];for(var i=0;i<4*count;i+=4){view[i]=HEAP32[value+4*i>>2];view[i+1]=HEAP32[value+(4*i+4)>>2];view[i+2]=HEAP32[value+(4*i+8)>>2];view[i+3]=HEAP32[value+(4*i+12)>>2]}}else{var view=HEAP32.subarray(value>>2,value+count*16>>2)}GLctx.uniform4iv(webglGetUniformLocation(location),view)};var _emscripten_glUniform4iv=_glUniform4iv;var _glUniformMatrix2fv=(location,count,transpose,value)=>{if(count<=72){var view=miniTempWebGLFloatBuffers[4*count-1];for(var i=0;i<4*count;i+=4){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*16>>2)}GLctx.uniformMatrix2fv(webglGetUniformLocation(location),!!transpose,view)};var _emscripten_glUniformMatrix2fv=_glUniformMatrix2fv;var _glUniformMatrix3fv=(location,count,transpose,value)=>{if(count<=32){var view=miniTempWebGLFloatBuffers[9*count-1];for(var i=0;i<9*count;i+=9){view[i]=HEAPF32[value+4*i>>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*36>>2)}GLctx.uniformMatrix3fv(webglGetUniformLocation(location),!!transpose,view)};var _emscripten_glUniformMatrix3fv=_glUniformMatrix3fv;var _glUniformMatrix4fv=(location,count,transpose,value)=>{if(count<=18){var view=miniTempWebGLFloatBuffers[16*count-1];var heap=HEAPF32;value>>=2;for(var i=0;i<16*count;i+=16){var dst=value+i;view[i]=heap[dst];view[i+1]=heap[dst+1];view[i+2]=heap[dst+2];view[i+3]=heap[dst+3];view[i+4]=heap[dst+4];view[i+5]=heap[dst+5];view[i+6]=heap[dst+6];view[i+7]=heap[dst+7];view[i+8]=heap[dst+8];view[i+9]=heap[dst+9];view[i+10]=heap[dst+10];view[i+11]=heap[dst+11];view[i+12]=heap[dst+12];view[i+13]=heap[dst+13];view[i+14]=heap[dst+14];view[i+15]=heap[dst+15]}}else{var view=HEAPF32.subarray(value>>2,value+count*64>>2)}GLctx.uniformMatrix4fv(webglGetUniformLocation(location),!!transpose,view)};var _emscripten_glUniformMatrix4fv=_glUniformMatrix4fv;var _glUseProgram=program=>{program=GL.programs[program];GLctx.useProgram(program);GLctx.currentProgram=program};var _emscripten_glUseProgram=_glUseProgram;var _glValidateProgram=program=>{GLctx.validateProgram(GL.programs[program])};var _emscripten_glValidateProgram=_glValidateProgram;function _glVertexAttrib1f(x0,x1){GLctx.vertexAttrib1f(x0,x1)}var _emscripten_glVertexAttrib1f=_glVertexAttrib1f;var _glVertexAttrib1fv=(index,v)=>{GLctx.vertexAttrib1f(index,HEAPF32[v>>2])};var _emscripten_glVertexAttrib1fv=_glVertexAttrib1fv;function _glVertexAttrib2f(x0,x1,x2){GLctx.vertexAttrib2f(x0,x1,x2)}var _emscripten_glVertexAttrib2f=_glVertexAttrib2f;var _glVertexAttrib2fv=(index,v)=>{GLctx.vertexAttrib2f(index,HEAPF32[v>>2],HEAPF32[v+4>>2])};var _emscripten_glVertexAttrib2fv=_glVertexAttrib2fv;function _glVertexAttrib3f(x0,x1,x2,x3){GLctx.vertexAttrib3f(x0,x1,x2,x3)}var _emscripten_glVertexAttrib3f=_glVertexAttrib3f;var _glVertexAttrib3fv=(index,v)=>{GLctx.vertexAttrib3f(index,HEAPF32[v>>2],HEAPF32[v+4>>2],HEAPF32[v+8>>2])};var _emscripten_glVertexAttrib3fv=_glVertexAttrib3fv;function _glVertexAttrib4f(x0,x1,x2,x3,x4){GLctx.vertexAttrib4f(x0,x1,x2,x3,x4)}var _emscripten_glVertexAttrib4f=_glVertexAttrib4f;var _glVertexAttrib4fv=(index,v)=>{GLctx.vertexAttrib4f(index,HEAPF32[v>>2],HEAPF32[v+4>>2],HEAPF32[v+8>>2],HEAPF32[v+12>>2])};var _emscripten_glVertexAttrib4fv=_glVertexAttrib4fv;var _glVertexAttribDivisor=(index,divisor)=>{GLctx.vertexAttribDivisor(index,divisor)};var _glVertexAttribDivisorANGLE=_glVertexAttribDivisor;var _emscripten_glVertexAttribDivisorANGLE=_glVertexAttribDivisorANGLE;var _glVertexAttribPointer=(index,size,type,normalized,stride,ptr)=>{GLctx.vertexAttribPointer(index,size,type,!!normalized,stride,ptr)};var _emscripten_glVertexAttribPointer=_glVertexAttribPointer;function _glViewport(x0,x1,x2,x3){GLctx.viewport(x0,x1,x2,x3)}var _emscripten_glViewport=_glViewport;var _emscripten_has_asyncify=()=>0;var _emscripten_memcpy_js=(dest,src,num)=>HEAPU8.copyWithin(dest,src,src+num);var doRequestFullscreen=(target,strategy)=>{if(!JSEvents.fullscreenEnabled())return-1;target=findEventTarget(target);if(!target)return-4;if(!target.requestFullscreen&&!target.webkitRequestFullscreen){return-3}var canPerformRequests=JSEvents.canPerformEventHandlerRequests();if(!canPerformRequests){if(strategy.deferUntilInEventHandler){JSEvents.deferCall(JSEvents_requestFullscreen,1,[target,strategy]);return 1}return-2}return JSEvents_requestFullscreen(target,strategy)};var _emscripten_request_fullscreen_strategy=(target,deferUntilInEventHandler,fullscreenStrategy)=>{var strategy={scaleMode:HEAP32[fullscreenStrategy>>2],canvasResolutionScaleMode:HEAP32[fullscreenStrategy+4>>2],filteringMode:HEAP32[fullscreenStrategy+8>>2],deferUntilInEventHandler:deferUntilInEventHandler,canvasResizedCallback:HEAP32[fullscreenStrategy+12>>2],canvasResizedCallbackUserData:HEAP32[fullscreenStrategy+16>>2]};return doRequestFullscreen(target,strategy)};var _emscripten_request_pointerlock=(target,deferUntilInEventHandler)=>{target=findEventTarget(target);if(!target)return-4;if(!target.requestPointerLock){return-1}var canPerformRequests=JSEvents.canPerformEventHandlerRequests();if(!canPerformRequests){if(deferUntilInEventHandler){JSEvents.deferCall(requestPointerLock,2,[target]);return 1}return-2}return requestPointerLock(target)};var abortOnCannotGrowMemory=requestedSize=>{abort("OOM")};var _emscripten_resize_heap=requestedSize=>{var oldSize=HEAPU8.length;requestedSize>>>=0;abortOnCannotGrowMemory(requestedSize)};var _emscripten_sample_gamepad_data=()=>(JSEvents.lastGamepadState=navigator.getGamepads?navigator.getGamepads():navigator.webkitGetGamepads?navigator.webkitGetGamepads():null)?0:-1;var registerBeforeUnloadEventCallback=(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString)=>{var beforeUnloadEventHandlerFunc=(e=event)=>{var confirmationMessage=getWasmTableEntry(callbackfunc)(eventTypeId,0,userData);if(confirmationMessage){confirmationMessage=UTF8ToString(confirmationMessage)}if(confirmationMessage){e.preventDefault();e.returnValue=confirmationMessage;return confirmationMessage}};var eventHandler={target:findEventTarget(target),eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:beforeUnloadEventHandlerFunc,useCapture:useCapture};return JSEvents.registerOrRemoveHandler(eventHandler)};var _emscripten_set_beforeunload_callback_on_thread=(userData,callbackfunc,targetThread)=>{if(typeof onbeforeunload=="undefined")return-1;if(targetThread!==1)return-5;return registerBeforeUnloadEventCallback(2,userData,true,callbackfunc,28,"beforeunload")};var registerFocusEventCallback=(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread)=>{if(!JSEvents.focusEvent)JSEvents.focusEvent=_malloc(256);var focusEventHandlerFunc=(e=event)=>{var nodeName=JSEvents.getNodeNameForTarget(e.target);var id=e.target.id?e.target.id:"";var focusEvent=JSEvents.focusEvent;stringToUTF8(nodeName,focusEvent+0,128);stringToUTF8(id,focusEvent+128,128);if(getWasmTableEntry(callbackfunc)(eventTypeId,focusEvent,userData))e.preventDefault()};var eventHandler={target:findEventTarget(target),eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:focusEventHandlerFunc,useCapture:useCapture};return JSEvents.registerOrRemoveHandler(eventHandler)};var _emscripten_set_blur_callback_on_thread=(target,userData,useCapture,callbackfunc,targetThread)=>registerFocusEventCallback(target,userData,useCapture,callbackfunc,12,"blur",targetThread);var _emscripten_set_element_css_size=(target,width,height)=>{target=findEventTarget(target);if(!target)return-4;target.style.width=width+"px";target.style.height=height+"px";return 0};var _emscripten_set_focus_callback_on_thread=(target,userData,useCapture,callbackfunc,targetThread)=>registerFocusEventCallback(target,userData,useCapture,callbackfunc,13,"focus",targetThread);var fillFullscreenChangeEventData=eventStruct=>{var fullscreenElement=document.fullscreenElement||document.mozFullScreenElement||document.webkitFullscreenElement||document.msFullscreenElement;var isFullscreen=!!fullscreenElement;HEAP32[eventStruct>>2]=isFullscreen;HEAP32[eventStruct+4>>2]=JSEvents.fullscreenEnabled();var reportedElement=isFullscreen?fullscreenElement:JSEvents.previousFullscreenElement;var nodeName=JSEvents.getNodeNameForTarget(reportedElement);var id=reportedElement&&reportedElement.id?reportedElement.id:"";stringToUTF8(nodeName,eventStruct+8,128);stringToUTF8(id,eventStruct+136,128);HEAP32[eventStruct+264>>2]=reportedElement?reportedElement.clientWidth:0;HEAP32[eventStruct+268>>2]=reportedElement?reportedElement.clientHeight:0;HEAP32[eventStruct+272>>2]=screen.width;HEAP32[eventStruct+276>>2]=screen.height;if(isFullscreen){JSEvents.previousFullscreenElement=fullscreenElement}};var registerFullscreenChangeEventCallback=(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread)=>{if(!JSEvents.fullscreenChangeEvent)JSEvents.fullscreenChangeEvent=_malloc(280);var fullscreenChangeEventhandlerFunc=(e=event)=>{var fullscreenChangeEvent=JSEvents.fullscreenChangeEvent;fillFullscreenChangeEventData(fullscreenChangeEvent);if(getWasmTableEntry(callbackfunc)(eventTypeId,fullscreenChangeEvent,userData))e.preventDefault()};var eventHandler={target:target,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:fullscreenChangeEventhandlerFunc,useCapture:useCapture};return JSEvents.registerOrRemoveHandler(eventHandler)};var _emscripten_set_fullscreenchange_callback_on_thread=(target,userData,useCapture,callbackfunc,targetThread)=>{if(!JSEvents.fullscreenEnabled())return-1;target=findEventTarget(target);if(!target)return-4;registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"webkitfullscreenchange",targetThread);return registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"fullscreenchange",targetThread)};var registerGamepadEventCallback=(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread)=>{if(!JSEvents.gamepadEvent)JSEvents.gamepadEvent=_malloc(1432);var gamepadEventHandlerFunc=(e=event)=>{var gamepadEvent=JSEvents.gamepadEvent;fillGamepadEventData(gamepadEvent,e["gamepad"]);if(getWasmTableEntry(callbackfunc)(eventTypeId,gamepadEvent,userData))e.preventDefault()};var eventHandler={target:findEventTarget(target),allowsDeferredCalls:true,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:gamepadEventHandlerFunc,useCapture:useCapture};return JSEvents.registerOrRemoveHandler(eventHandler)};var _emscripten_set_gamepadconnected_callback_on_thread=(userData,useCapture,callbackfunc,targetThread)=>{if(!navigator.getGamepads&&!navigator.webkitGetGamepads)return-1;return registerGamepadEventCallback(2,userData,useCapture,callbackfunc,26,"gamepadconnected",targetThread)};var _emscripten_set_gamepaddisconnected_callback_on_thread=(userData,useCapture,callbackfunc,targetThread)=>{if(!navigator.getGamepads&&!navigator.webkitGetGamepads)return-1;return registerGamepadEventCallback(2,userData,useCapture,callbackfunc,27,"gamepaddisconnected",targetThread)};var registerKeyEventCallback=(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread)=>{if(!JSEvents.keyEvent)JSEvents.keyEvent=_malloc(176);var keyEventHandlerFunc=e=>{var keyEventData=JSEvents.keyEvent;HEAPF64[keyEventData>>3]=e.timeStamp;var idx=keyEventData>>2;HEAP32[idx+2]=e.location;HEAP32[idx+3]=e.ctrlKey;HEAP32[idx+4]=e.shiftKey;HEAP32[idx+5]=e.altKey;HEAP32[idx+6]=e.metaKey;HEAP32[idx+7]=e.repeat;HEAP32[idx+8]=e.charCode;HEAP32[idx+9]=e.keyCode;HEAP32[idx+10]=e.which;stringToUTF8(e.key||"",keyEventData+44,32);stringToUTF8(e.code||"",keyEventData+76,32);stringToUTF8(e.char||"",keyEventData+108,32);stringToUTF8(e.locale||"",keyEventData+140,32);if(getWasmTableEntry(callbackfunc)(eventTypeId,keyEventData,userData))e.preventDefault()};var eventHandler={target:findEventTarget(target),allowsDeferredCalls:true,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:keyEventHandlerFunc,useCapture:useCapture};return JSEvents.registerOrRemoveHandler(eventHandler)};var _emscripten_set_keydown_callback_on_thread=(target,userData,useCapture,callbackfunc,targetThread)=>registerKeyEventCallback(target,userData,useCapture,callbackfunc,2,"keydown",targetThread);var _emscripten_set_keypress_callback_on_thread=(target,userData,useCapture,callbackfunc,targetThread)=>registerKeyEventCallback(target,userData,useCapture,callbackfunc,1,"keypress",targetThread);var _emscripten_set_keyup_callback_on_thread=(target,userData,useCapture,callbackfunc,targetThread)=>registerKeyEventCallback(target,userData,useCapture,callbackfunc,3,"keyup",targetThread);var _emscripten_set_main_loop=(func,fps,simulateInfiniteLoop)=>{var browserIterationFunc=getWasmTableEntry(func);setMainLoop(browserIterationFunc,fps,simulateInfiniteLoop)};var fillMouseEventData=(eventStruct,e,target)=>{HEAPF64[eventStruct>>3]=e.timeStamp;var idx=eventStruct>>2;HEAP32[idx+2]=e.screenX;HEAP32[idx+3]=e.screenY;HEAP32[idx+4]=e.clientX;HEAP32[idx+5]=e.clientY;HEAP32[idx+6]=e.ctrlKey;HEAP32[idx+7]=e.shiftKey;HEAP32[idx+8]=e.altKey;HEAP32[idx+9]=e.metaKey;HEAP16[idx*2+20]=e.button;HEAP16[idx*2+21]=e.buttons;HEAP32[idx+11]=e["movementX"];HEAP32[idx+12]=e["movementY"];var rect=getBoundingClientRect(target);HEAP32[idx+13]=e.clientX-rect.left;HEAP32[idx+14]=e.clientY-rect.top};var registerMouseEventCallback=(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread)=>{if(!JSEvents.mouseEvent)JSEvents.mouseEvent=_malloc(72);target=findEventTarget(target);var mouseEventHandlerFunc=(e=event)=>{fillMouseEventData(JSEvents.mouseEvent,e,target);if(getWasmTableEntry(callbackfunc)(eventTypeId,JSEvents.mouseEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:eventTypeString!="mousemove"&&eventTypeString!="mouseenter"&&eventTypeString!="mouseleave",eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:mouseEventHandlerFunc,useCapture:useCapture};return JSEvents.registerOrRemoveHandler(eventHandler)};var _emscripten_set_mousedown_callback_on_thread=(target,userData,useCapture,callbackfunc,targetThread)=>registerMouseEventCallback(target,userData,useCapture,callbackfunc,5,"mousedown",targetThread);var _emscripten_set_mouseenter_callback_on_thread=(target,userData,useCapture,callbackfunc,targetThread)=>registerMouseEventCallback(target,userData,useCapture,callbackfunc,33,"mouseenter",targetThread);var _emscripten_set_mouseleave_callback_on_thread=(target,userData,useCapture,callbackfunc,targetThread)=>registerMouseEventCallback(target,userData,useCapture,callbackfunc,34,"mouseleave",targetThread);var _emscripten_set_mousemove_callback_on_thread=(target,userData,useCapture,callbackfunc,targetThread)=>registerMouseEventCallback(target,userData,useCapture,callbackfunc,8,"mousemove",targetThread);var _emscripten_set_mouseup_callback_on_thread=(target,userData,useCapture,callbackfunc,targetThread)=>registerMouseEventCallback(target,userData,useCapture,callbackfunc,6,"mouseup",targetThread);var fillPointerlockChangeEventData=eventStruct=>{var pointerLockElement=document.pointerLockElement||document.mozPointerLockElement||document.webkitPointerLockElement||document.msPointerLockElement;var isPointerlocked=!!pointerLockElement;HEAP32[eventStruct>>2]=isPointerlocked;var nodeName=JSEvents.getNodeNameForTarget(pointerLockElement);var id=pointerLockElement&&pointerLockElement.id?pointerLockElement.id:"";stringToUTF8(nodeName,eventStruct+4,128);stringToUTF8(id,eventStruct+132,128)};var registerPointerlockChangeEventCallback=(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread)=>{if(!JSEvents.pointerlockChangeEvent)JSEvents.pointerlockChangeEvent=_malloc(260);var pointerlockChangeEventHandlerFunc=(e=event)=>{var pointerlockChangeEvent=JSEvents.pointerlockChangeEvent;fillPointerlockChangeEventData(pointerlockChangeEvent);if(getWasmTableEntry(callbackfunc)(eventTypeId,pointerlockChangeEvent,userData))e.preventDefault()};var eventHandler={target:target,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:pointerlockChangeEventHandlerFunc,useCapture:useCapture};return JSEvents.registerOrRemoveHandler(eventHandler)};var _emscripten_set_pointerlockchange_callback_on_thread=(target,userData,useCapture,callbackfunc,targetThread)=>{if(!document||!document.body||!document.body.requestPointerLock&&!document.body.mozRequestPointerLock&&!document.body.webkitRequestPointerLock&&!document.body.msRequestPointerLock){return-1}target=findEventTarget(target);if(!target)return-4;registerPointerlockChangeEventCallback(target,userData,useCapture,callbackfunc,20,"mozpointerlockchange",targetThread);registerPointerlockChangeEventCallback(target,userData,useCapture,callbackfunc,20,"webkitpointerlockchange",targetThread);registerPointerlockChangeEventCallback(target,userData,useCapture,callbackfunc,20,"mspointerlockchange",targetThread);return registerPointerlockChangeEventCallback(target,userData,useCapture,callbackfunc,20,"pointerlockchange",targetThread)};var registerUiEventCallback=(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread)=>{if(!JSEvents.uiEvent)JSEvents.uiEvent=_malloc(36);target=findEventTarget(target);var uiEventHandlerFunc=(e=event)=>{if(e.target!=target){return}var b=document.body;if(!b){return}var uiEvent=JSEvents.uiEvent;HEAP32[uiEvent>>2]=e.detail;HEAP32[uiEvent+4>>2]=b.clientWidth;HEAP32[uiEvent+8>>2]=b.clientHeight;HEAP32[uiEvent+12>>2]=innerWidth;HEAP32[uiEvent+16>>2]=innerHeight;HEAP32[uiEvent+20>>2]=outerWidth;HEAP32[uiEvent+24>>2]=outerHeight;HEAP32[uiEvent+28>>2]=pageXOffset;HEAP32[uiEvent+32>>2]=pageYOffset;if(getWasmTableEntry(callbackfunc)(eventTypeId,uiEvent,userData))e.preventDefault()};var eventHandler={target:target,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:uiEventHandlerFunc,useCapture:useCapture};return JSEvents.registerOrRemoveHandler(eventHandler)};var _emscripten_set_resize_callback_on_thread=(target,userData,useCapture,callbackfunc,targetThread)=>registerUiEventCallback(target,userData,useCapture,callbackfunc,10,"resize",targetThread);var registerTouchEventCallback=(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread)=>{if(!JSEvents.touchEvent)JSEvents.touchEvent=_malloc(1696);target=findEventTarget(target);var touchEventHandlerFunc=e=>{var t,touches={},et=e.touches;for(var i=0;i>3]=e.timeStamp;var idx=touchEvent>>2;HEAP32[idx+3]=e.ctrlKey;HEAP32[idx+4]=e.shiftKey;HEAP32[idx+5]=e.altKey;HEAP32[idx+6]=e.metaKey;idx+=7;var targetRect=getBoundingClientRect(target);var numTouches=0;for(var i in touches){t=touches[i];HEAP32[idx+0]=t.identifier;HEAP32[idx+1]=t.screenX;HEAP32[idx+2]=t.screenY;HEAP32[idx+3]=t.clientX;HEAP32[idx+4]=t.clientY;HEAP32[idx+5]=t.pageX;HEAP32[idx+6]=t.pageY;HEAP32[idx+7]=t.isChanged;HEAP32[idx+8]=t.onTarget;HEAP32[idx+9]=t.clientX-targetRect.left;HEAP32[idx+10]=t.clientY-targetRect.top;idx+=13;if(++numTouches>31){break}}HEAP32[touchEvent+8>>2]=numTouches;if(getWasmTableEntry(callbackfunc)(eventTypeId,touchEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:eventTypeString=="touchstart"||eventTypeString=="touchend",eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:touchEventHandlerFunc,useCapture:useCapture};return JSEvents.registerOrRemoveHandler(eventHandler)};var _emscripten_set_touchcancel_callback_on_thread=(target,userData,useCapture,callbackfunc,targetThread)=>registerTouchEventCallback(target,userData,useCapture,callbackfunc,25,"touchcancel",targetThread);var _emscripten_set_touchend_callback_on_thread=(target,userData,useCapture,callbackfunc,targetThread)=>registerTouchEventCallback(target,userData,useCapture,callbackfunc,23,"touchend",targetThread);var _emscripten_set_touchmove_callback_on_thread=(target,userData,useCapture,callbackfunc,targetThread)=>registerTouchEventCallback(target,userData,useCapture,callbackfunc,24,"touchmove",targetThread);var _emscripten_set_touchstart_callback_on_thread=(target,userData,useCapture,callbackfunc,targetThread)=>registerTouchEventCallback(target,userData,useCapture,callbackfunc,22,"touchstart",targetThread);var fillVisibilityChangeEventData=eventStruct=>{var visibilityStates=["hidden","visible","prerender","unloaded"];var visibilityState=visibilityStates.indexOf(document.visibilityState);HEAP32[eventStruct>>2]=document.hidden;HEAP32[eventStruct+4>>2]=visibilityState};var registerVisibilityChangeEventCallback=(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread)=>{if(!JSEvents.visibilityChangeEvent)JSEvents.visibilityChangeEvent=_malloc(8);var visibilityChangeEventHandlerFunc=(e=event)=>{var visibilityChangeEvent=JSEvents.visibilityChangeEvent;fillVisibilityChangeEventData(visibilityChangeEvent);if(getWasmTableEntry(callbackfunc)(eventTypeId,visibilityChangeEvent,userData))e.preventDefault()};var eventHandler={target:target,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:visibilityChangeEventHandlerFunc,useCapture:useCapture};return JSEvents.registerOrRemoveHandler(eventHandler)};var _emscripten_set_visibilitychange_callback_on_thread=(userData,useCapture,callbackfunc,targetThread)=>{if(!specialHTMLTargets[1]){return-4}return registerVisibilityChangeEventCallback(specialHTMLTargets[1],userData,useCapture,callbackfunc,21,"visibilitychange",targetThread)};var registerWheelEventCallback=(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread)=>{if(!JSEvents.wheelEvent)JSEvents.wheelEvent=_malloc(104);var wheelHandlerFunc=(e=event)=>{var wheelEvent=JSEvents.wheelEvent;fillMouseEventData(wheelEvent,e,target);HEAPF64[wheelEvent+72>>3]=e["deltaX"];HEAPF64[wheelEvent+80>>3]=e["deltaY"];HEAPF64[wheelEvent+88>>3]=e["deltaZ"];HEAP32[wheelEvent+96>>2]=e["deltaMode"];if(getWasmTableEntry(callbackfunc)(eventTypeId,wheelEvent,userData))e.preventDefault()};var eventHandler={target:target,allowsDeferredCalls:true,eventTypeString:eventTypeString,callbackfunc:callbackfunc,handlerFunc:wheelHandlerFunc,useCapture:useCapture};return JSEvents.registerOrRemoveHandler(eventHandler)};var _emscripten_set_wheel_callback_on_thread=(target,userData,useCapture,callbackfunc,targetThread)=>{target=findEventTarget(target);if(!target)return-4;if(typeof target.onwheel!="undefined"){return registerWheelEventCallback(target,userData,useCapture,callbackfunc,9,"wheel",targetThread)}else{return-1}};var _emscripten_set_window_title=title=>document.title=UTF8ToString(title);var _emscripten_sleep=()=>{throw"Please compile your program with async support in order to use asynchronous operations like emscripten_sleep"};var ENV={};var getExecutableName=()=>thisProgram||"./this.program";var getEnvStrings=()=>{if(!getEnvStrings.strings){var lang=(typeof navigator=="object"&&navigator.languages&&navigator.languages[0]||"C").replace("-","_")+".UTF-8";var env={"USER":"web_user","LOGNAME":"web_user","PATH":"/","PWD":"/","HOME":"/home/web_user","LANG":lang,"_":getExecutableName()};for(var x in ENV){if(ENV[x]===undefined)delete env[x];else env[x]=ENV[x]}var strings=[];for(var x in env){strings.push(`${x}=${env[x]}`)}getEnvStrings.strings=strings}return getEnvStrings.strings};var stringToAscii=(str,buffer)=>{for(var i=0;i>0]=str.charCodeAt(i)}HEAP8[buffer>>0]=0};var _environ_get=(__environ,environ_buf)=>{var bufSize=0;getEnvStrings().forEach((string,i)=>{var ptr=environ_buf+bufSize;HEAPU32[__environ+i*4>>2]=ptr;stringToAscii(string,ptr);bufSize+=string.length+1});return 0};var _environ_sizes_get=(penviron_count,penviron_buf_size)=>{var strings=getEnvStrings();HEAPU32[penviron_count>>2]=strings.length;var bufSize=0;strings.forEach(string=>bufSize+=string.length+1);HEAPU32[penviron_buf_size>>2]=bufSize;return 0};function _fd_close(fd){try{var stream=SYSCALLS.getStreamFromFD(fd);FS.close(stream);return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return e.errno}}var doReadv=(stream,iov,iovcnt,offset)=>{var ret=0;for(var i=0;i>2];var len=HEAPU32[iov+4>>2];iov+=8;var curr=FS.read(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr;if(curr>2]=num;return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return e.errno}}var convertI32PairToI53Checked=(lo,hi)=>hi+2097152>>>0<4194305-!!lo?(lo>>>0)+hi*4294967296:NaN;function _fd_seek(fd,offset_low,offset_high,whence,newOffset){var offset=convertI32PairToI53Checked(offset_low,offset_high);try{if(isNaN(offset))return 61;var stream=SYSCALLS.getStreamFromFD(fd);FS.llseek(stream,offset,whence);tempI64=[stream.position>>>0,(tempDouble=stream.position,+Math.abs(tempDouble)>=1?tempDouble>0?+Math.floor(tempDouble/4294967296)>>>0:~~+Math.ceil((tempDouble-+(~~tempDouble>>>0))/4294967296)>>>0:0)],HEAP32[newOffset>>2]=tempI64[0],HEAP32[newOffset+4>>2]=tempI64[1];if(stream.getdents&&offset===0&&whence===0)stream.getdents=null;return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return e.errno}}var doWritev=(stream,iov,iovcnt,offset)=>{var ret=0;for(var i=0;i>2];var len=HEAPU32[iov+4>>2];iov+=8;var curr=FS.write(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr;if(typeof offset!=="undefined"){offset+=curr}}return ret};function _fd_write(fd,iov,iovcnt,pnum){try{var stream=SYSCALLS.getStreamFromFD(fd);var num=doWritev(stream,iov,iovcnt);HEAPU32[pnum>>2]=num;return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return e.errno}}var isLeapYear=year=>year%4===0&&(year%100!==0||year%400===0);var arraySum=(array,index)=>{var sum=0;for(var i=0;i<=index;sum+=array[i++]){}return sum};var MONTH_DAYS_LEAP=[31,29,31,30,31,30,31,31,30,31,30,31];var MONTH_DAYS_REGULAR=[31,28,31,30,31,30,31,31,30,31,30,31];var addDays=(date,days)=>{var newDate=new Date(date.getTime());while(days>0){var leap=isLeapYear(newDate.getFullYear());var currentMonth=newDate.getMonth();var daysInCurrentMonth=(leap?MONTH_DAYS_LEAP:MONTH_DAYS_REGULAR)[currentMonth];if(days>daysInCurrentMonth-newDate.getDate()){days-=daysInCurrentMonth-newDate.getDate()+1;newDate.setDate(1);if(currentMonth<11){newDate.setMonth(currentMonth+1)}else{newDate.setMonth(0);newDate.setFullYear(newDate.getFullYear()+1)}}else{newDate.setDate(newDate.getDate()+days);return newDate}}return newDate};var writeArrayToMemory=(array,buffer)=>{HEAP8.set(array,buffer)};var _strftime=(s,maxsize,format,tm)=>{var tm_zone=HEAPU32[tm+40>>2];var date={tm_sec:HEAP32[tm>>2],tm_min:HEAP32[tm+4>>2],tm_hour:HEAP32[tm+8>>2],tm_mday:HEAP32[tm+12>>2],tm_mon:HEAP32[tm+16>>2],tm_year:HEAP32[tm+20>>2],tm_wday:HEAP32[tm+24>>2],tm_yday:HEAP32[tm+28>>2],tm_isdst:HEAP32[tm+32>>2],tm_gmtoff:HEAP32[tm+36>>2],tm_zone:tm_zone?UTF8ToString(tm_zone):""};var pattern=UTF8ToString(format);var EXPANSION_RULES_1={"%c":"%a %b %d %H:%M:%S %Y","%D":"%m/%d/%y","%F":"%Y-%m-%d","%h":"%b","%r":"%I:%M:%S %p","%R":"%H:%M","%T":"%H:%M:%S","%x":"%m/%d/%y","%X":"%H:%M:%S","%Ec":"%c","%EC":"%C","%Ex":"%m/%d/%y","%EX":"%H:%M:%S","%Ey":"%y","%EY":"%Y","%Od":"%d","%Oe":"%e","%OH":"%H","%OI":"%I","%Om":"%m","%OM":"%M","%OS":"%S","%Ou":"%u","%OU":"%U","%OV":"%V","%Ow":"%w","%OW":"%W","%Oy":"%y"};for(var rule in EXPANSION_RULES_1){pattern=pattern.replace(new RegExp(rule,"g"),EXPANSION_RULES_1[rule])}var WEEKDAYS=["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"];var MONTHS=["January","February","March","April","May","June","July","August","September","October","November","December"];function leadingSomething(value,digits,character){var str=typeof value=="number"?value.toString():value||"";while(str.length0?1:0}var compare;if((compare=sgn(date1.getFullYear()-date2.getFullYear()))===0){if((compare=sgn(date1.getMonth()-date2.getMonth()))===0){compare=sgn(date1.getDate()-date2.getDate())}}return compare}function getFirstWeekStartDate(janFourth){switch(janFourth.getDay()){case 0:return new Date(janFourth.getFullYear()-1,11,29);case 1:return janFourth;case 2:return new Date(janFourth.getFullYear(),0,3);case 3:return new Date(janFourth.getFullYear(),0,2);case 4:return new Date(janFourth.getFullYear(),0,1);case 5:return new Date(janFourth.getFullYear()-1,11,31);case 6:return new Date(janFourth.getFullYear()-1,11,30)}}function getWeekBasedYear(date){var thisDate=addDays(new Date(date.tm_year+1900,0,1),date.tm_yday);var janFourthThisYear=new Date(thisDate.getFullYear(),0,4);var janFourthNextYear=new Date(thisDate.getFullYear()+1,0,4);var firstWeekStartThisYear=getFirstWeekStartDate(janFourthThisYear);var firstWeekStartNextYear=getFirstWeekStartDate(janFourthNextYear);if(compareByDay(firstWeekStartThisYear,thisDate)<=0){if(compareByDay(firstWeekStartNextYear,thisDate)<=0){return thisDate.getFullYear()+1}return thisDate.getFullYear()}return thisDate.getFullYear()-1}var EXPANSION_RULES_2={"%a":date=>WEEKDAYS[date.tm_wday].substring(0,3),"%A":date=>WEEKDAYS[date.tm_wday],"%b":date=>MONTHS[date.tm_mon].substring(0,3),"%B":date=>MONTHS[date.tm_mon],"%C":date=>{var year=date.tm_year+1900;return leadingNulls(year/100|0,2)},"%d":date=>leadingNulls(date.tm_mday,2),"%e":date=>leadingSomething(date.tm_mday,2," "),"%g":date=>getWeekBasedYear(date).toString().substring(2),"%G":date=>getWeekBasedYear(date),"%H":date=>leadingNulls(date.tm_hour,2),"%I":date=>{var twelveHour=date.tm_hour;if(twelveHour==0)twelveHour=12;else if(twelveHour>12)twelveHour-=12;return leadingNulls(twelveHour,2)},"%j":date=>leadingNulls(date.tm_mday+arraySum(isLeapYear(date.tm_year+1900)?MONTH_DAYS_LEAP:MONTH_DAYS_REGULAR,date.tm_mon-1),3),"%m":date=>leadingNulls(date.tm_mon+1,2),"%M":date=>leadingNulls(date.tm_min,2),"%n":()=>"\n","%p":date=>{if(date.tm_hour>=0&&date.tm_hour<12){return"AM"}return"PM"},"%S":date=>leadingNulls(date.tm_sec,2),"%t":()=>"\t","%u":date=>date.tm_wday||7,"%U":date=>{var days=date.tm_yday+7-date.tm_wday;return leadingNulls(Math.floor(days/7),2)},"%V":date=>{var val=Math.floor((date.tm_yday+7-(date.tm_wday+6)%7)/7);if((date.tm_wday+371-date.tm_yday-2)%7<=2){val++}if(!val){val=52;var dec31=(date.tm_wday+7-date.tm_yday-1)%7;if(dec31==4||dec31==5&&isLeapYear(date.tm_year%400-1)){val++}}else if(val==53){var jan1=(date.tm_wday+371-date.tm_yday)%7;if(jan1!=4&&(jan1!=3||!isLeapYear(date.tm_year)))val=1}return leadingNulls(val,2)},"%w":date=>date.tm_wday,"%W":date=>{var days=date.tm_yday+7-(date.tm_wday+6)%7;return leadingNulls(Math.floor(days/7),2)},"%y":date=>(date.tm_year+1900).toString().substring(2),"%Y":date=>date.tm_year+1900,"%z":date=>{var off=date.tm_gmtoff;var ahead=off>=0;off=Math.abs(off)/60;off=off/60*100+off%60;return(ahead?"+":"-")+String("0000"+off).slice(-4)},"%Z":date=>date.tm_zone,"%%":()=>"%"};pattern=pattern.replace(/%%/g,"\0\0");for(var rule in EXPANSION_RULES_2){if(pattern.includes(rule)){pattern=pattern.replace(new RegExp(rule,"g"),EXPANSION_RULES_2[rule](date))}}pattern=pattern.replace(/\0\0/g,"%");var bytes=intArrayFromString(pattern,false);if(bytes.length>maxsize){return 0}writeArrayToMemory(bytes,s);return bytes.length-1};var _strftime_l=(s,maxsize,format,tm,loc)=>_strftime(s,maxsize,format,tm);var FSNode=function(parent,name,mode,rdev){if(!parent){parent=this}this.parent=parent;this.mount=parent.mount;this.mounted=null;this.id=FS.nextInode++;this.name=name;this.mode=mode;this.node_ops={};this.stream_ops={};this.rdev=rdev};var readMode=292|73;var writeMode=146;Object.defineProperties(FSNode.prototype,{read:{get:function(){return(this.mode&readMode)===readMode},set:function(val){val?this.mode|=readMode:this.mode&=~readMode}},write:{get:function(){return(this.mode&writeMode)===writeMode},set:function(val){val?this.mode|=writeMode:this.mode&=~writeMode}},isFolder:{get:function(){return FS.isDir(this.mode)}},isDevice:{get:function(){return FS.isChrdev(this.mode)}}});FS.FSNode=FSNode;FS.createPreloadedFile=FS_createPreloadedFile;FS.staticInit();Module["FS_createPath"]=FS.createPath;Module["FS_createDataFile"]=FS.createDataFile;Module["FS_createPreloadedFile"]=FS.createPreloadedFile;Module["FS_unlink"]=FS.unlink;Module["FS_createLazyFile"]=FS.createLazyFile;Module["FS_createDevice"]=FS.createDevice;Module["requestFullscreen"]=Browser.requestFullscreen;Module["requestAnimationFrame"]=Browser.requestAnimationFrame;Module["setCanvasSize"]=Browser.setCanvasSize;Module["pauseMainLoop"]=Browser.mainLoop.pause;Module["resumeMainLoop"]=Browser.mainLoop.resume;Module["getUserMedia"]=Browser.getUserMedia;Module["createContext"]=Browser.createContext;var preloadedImages={};var preloadedAudios={};var GLctx;for(var i=0;i<32;++i)tempFixedLengthArray.push(new Array(i));var miniTempWebGLFloatBuffersStorage=new Float32Array(288);for(var i=0;i<288;++i){miniTempWebGLFloatBuffers[i]=miniTempWebGLFloatBuffersStorage.subarray(0,i+1)}var miniTempWebGLIntBuffersStorage=new Int32Array(288);for(var i=0;i<288;++i){miniTempWebGLIntBuffers[i]=miniTempWebGLIntBuffersStorage.subarray(0,i+1)}var wasmImports={__cxa_throw:___cxa_throw,__syscall_fcntl64:___syscall_fcntl64,__syscall_ioctl:___syscall_ioctl,__syscall_openat:___syscall_openat,_emscripten_get_now_is_monotonic:__emscripten_get_now_is_monotonic,abort:_abort,eglBindAPI:_eglBindAPI,eglChooseConfig:_eglChooseConfig,eglCreateContext:_eglCreateContext,eglCreateWindowSurface:_eglCreateWindowSurface,eglDestroyContext:_eglDestroyContext,eglDestroySurface:_eglDestroySurface,eglGetConfigAttrib:_eglGetConfigAttrib,eglGetDisplay:_eglGetDisplay,eglGetError:_eglGetError,eglInitialize:_eglInitialize,eglMakeCurrent:_eglMakeCurrent,eglQueryString:_eglQueryString,eglSwapBuffers:_eglSwapBuffers,eglSwapInterval:_eglSwapInterval,eglTerminate:_eglTerminate,eglWaitGL:_eglWaitGL,eglWaitNative:_eglWaitNative,emscripten_asm_const_int:_emscripten_asm_const_int,emscripten_asm_const_int_sync_on_main_thread:_emscripten_asm_const_int_sync_on_main_thread,emscripten_date_now:_emscripten_date_now,emscripten_exit_fullscreen:_emscripten_exit_fullscreen,emscripten_exit_pointerlock:_emscripten_exit_pointerlock,emscripten_get_device_pixel_ratio:_emscripten_get_device_pixel_ratio,emscripten_get_element_css_size:_emscripten_get_element_css_size,emscripten_get_gamepad_status:_emscripten_get_gamepad_status,emscripten_get_now:_emscripten_get_now,emscripten_get_num_gamepads:_emscripten_get_num_gamepads,emscripten_get_screen_size:_emscripten_get_screen_size,emscripten_glActiveTexture:_emscripten_glActiveTexture,emscripten_glAttachShader:_emscripten_glAttachShader,emscripten_glBeginQueryEXT:_emscripten_glBeginQueryEXT,emscripten_glBindAttribLocation:_emscripten_glBindAttribLocation,emscripten_glBindBuffer:_emscripten_glBindBuffer,emscripten_glBindFramebuffer:_emscripten_glBindFramebuffer,emscripten_glBindRenderbuffer:_emscripten_glBindRenderbuffer,emscripten_glBindTexture:_emscripten_glBindTexture,emscripten_glBindVertexArrayOES:_emscripten_glBindVertexArrayOES,emscripten_glBlendColor:_emscripten_glBlendColor,emscripten_glBlendEquation:_emscripten_glBlendEquation,emscripten_glBlendEquationSeparate:_emscripten_glBlendEquationSeparate,emscripten_glBlendFunc:_emscripten_glBlendFunc,emscripten_glBlendFuncSeparate:_emscripten_glBlendFuncSeparate,emscripten_glBufferData:_emscripten_glBufferData,emscripten_glBufferSubData:_emscripten_glBufferSubData,emscripten_glCheckFramebufferStatus:_emscripten_glCheckFramebufferStatus,emscripten_glClear:_emscripten_glClear,emscripten_glClearColor:_emscripten_glClearColor,emscripten_glClearDepthf:_emscripten_glClearDepthf,emscripten_glClearStencil:_emscripten_glClearStencil,emscripten_glColorMask:_emscripten_glColorMask,emscripten_glCompileShader:_emscripten_glCompileShader,emscripten_glCompressedTexImage2D:_emscripten_glCompressedTexImage2D,emscripten_glCompressedTexSubImage2D:_emscripten_glCompressedTexSubImage2D,emscripten_glCopyTexImage2D:_emscripten_glCopyTexImage2D,emscripten_glCopyTexSubImage2D:_emscripten_glCopyTexSubImage2D,emscripten_glCreateProgram:_emscripten_glCreateProgram,emscripten_glCreateShader:_emscripten_glCreateShader,emscripten_glCullFace:_emscripten_glCullFace,emscripten_glDeleteBuffers:_emscripten_glDeleteBuffers,emscripten_glDeleteFramebuffers:_emscripten_glDeleteFramebuffers,emscripten_glDeleteProgram:_emscripten_glDeleteProgram,emscripten_glDeleteQueriesEXT:_emscripten_glDeleteQueriesEXT,emscripten_glDeleteRenderbuffers:_emscripten_glDeleteRenderbuffers,emscripten_glDeleteShader:_emscripten_glDeleteShader,emscripten_glDeleteTextures:_emscripten_glDeleteTextures,emscripten_glDeleteVertexArraysOES:_emscripten_glDeleteVertexArraysOES,emscripten_glDepthFunc:_emscripten_glDepthFunc,emscripten_glDepthMask:_emscripten_glDepthMask,emscripten_glDepthRangef:_emscripten_glDepthRangef,emscripten_glDetachShader:_emscripten_glDetachShader,emscripten_glDisable:_emscripten_glDisable,emscripten_glDisableVertexAttribArray:_emscripten_glDisableVertexAttribArray,emscripten_glDrawArrays:_emscripten_glDrawArrays,emscripten_glDrawArraysInstancedANGLE:_emscripten_glDrawArraysInstancedANGLE,emscripten_glDrawBuffersWEBGL:_emscripten_glDrawBuffersWEBGL,emscripten_glDrawElements:_emscripten_glDrawElements,emscripten_glDrawElementsInstancedANGLE:_emscripten_glDrawElementsInstancedANGLE,emscripten_glEnable:_emscripten_glEnable,emscripten_glEnableVertexAttribArray:_emscripten_glEnableVertexAttribArray,emscripten_glEndQueryEXT:_emscripten_glEndQueryEXT,emscripten_glFinish:_emscripten_glFinish,emscripten_glFlush:_emscripten_glFlush,emscripten_glFramebufferRenderbuffer:_emscripten_glFramebufferRenderbuffer,emscripten_glFramebufferTexture2D:_emscripten_glFramebufferTexture2D,emscripten_glFrontFace:_emscripten_glFrontFace,emscripten_glGenBuffers:_emscripten_glGenBuffers,emscripten_glGenFramebuffers:_emscripten_glGenFramebuffers,emscripten_glGenQueriesEXT:_emscripten_glGenQueriesEXT,emscripten_glGenRenderbuffers:_emscripten_glGenRenderbuffers,emscripten_glGenTextures:_emscripten_glGenTextures,emscripten_glGenVertexArraysOES:_emscripten_glGenVertexArraysOES,emscripten_glGenerateMipmap:_emscripten_glGenerateMipmap,emscripten_glGetActiveAttrib:_emscripten_glGetActiveAttrib,emscripten_glGetActiveUniform:_emscripten_glGetActiveUniform,emscripten_glGetAttachedShaders:_emscripten_glGetAttachedShaders,emscripten_glGetAttribLocation:_emscripten_glGetAttribLocation,emscripten_glGetBooleanv:_emscripten_glGetBooleanv,emscripten_glGetBufferParameteriv:_emscripten_glGetBufferParameteriv,emscripten_glGetError:_emscripten_glGetError,emscripten_glGetFloatv:_emscripten_glGetFloatv,emscripten_glGetFramebufferAttachmentParameteriv:_emscripten_glGetFramebufferAttachmentParameteriv,emscripten_glGetIntegerv:_emscripten_glGetIntegerv,emscripten_glGetProgramInfoLog:_emscripten_glGetProgramInfoLog,emscripten_glGetProgramiv:_emscripten_glGetProgramiv,emscripten_glGetQueryObjecti64vEXT:_emscripten_glGetQueryObjecti64vEXT,emscripten_glGetQueryObjectivEXT:_emscripten_glGetQueryObjectivEXT,emscripten_glGetQueryObjectui64vEXT:_emscripten_glGetQueryObjectui64vEXT,emscripten_glGetQueryObjectuivEXT:_emscripten_glGetQueryObjectuivEXT,emscripten_glGetQueryivEXT:_emscripten_glGetQueryivEXT,emscripten_glGetRenderbufferParameteriv:_emscripten_glGetRenderbufferParameteriv,emscripten_glGetShaderInfoLog:_emscripten_glGetShaderInfoLog,emscripten_glGetShaderPrecisionFormat:_emscripten_glGetShaderPrecisionFormat,emscripten_glGetShaderSource:_emscripten_glGetShaderSource,emscripten_glGetShaderiv:_emscripten_glGetShaderiv,emscripten_glGetString:_emscripten_glGetString,emscripten_glGetTexParameterfv:_emscripten_glGetTexParameterfv,emscripten_glGetTexParameteriv:_emscripten_glGetTexParameteriv,emscripten_glGetUniformLocation:_emscripten_glGetUniformLocation,emscripten_glGetUniformfv:_emscripten_glGetUniformfv,emscripten_glGetUniformiv:_emscripten_glGetUniformiv,emscripten_glGetVertexAttribPointerv:_emscripten_glGetVertexAttribPointerv,emscripten_glGetVertexAttribfv:_emscripten_glGetVertexAttribfv,emscripten_glGetVertexAttribiv:_emscripten_glGetVertexAttribiv,emscripten_glHint:_emscripten_glHint,emscripten_glIsBuffer:_emscripten_glIsBuffer,emscripten_glIsEnabled:_emscripten_glIsEnabled,emscripten_glIsFramebuffer:_emscripten_glIsFramebuffer,emscripten_glIsProgram:_emscripten_glIsProgram,emscripten_glIsQueryEXT:_emscripten_glIsQueryEXT,emscripten_glIsRenderbuffer:_emscripten_glIsRenderbuffer,emscripten_glIsShader:_emscripten_glIsShader,emscripten_glIsTexture:_emscripten_glIsTexture,emscripten_glIsVertexArrayOES:_emscripten_glIsVertexArrayOES,emscripten_glLineWidth:_emscripten_glLineWidth,emscripten_glLinkProgram:_emscripten_glLinkProgram,emscripten_glPixelStorei:_emscripten_glPixelStorei,emscripten_glPolygonOffset:_emscripten_glPolygonOffset,emscripten_glQueryCounterEXT:_emscripten_glQueryCounterEXT,emscripten_glReadPixels:_emscripten_glReadPixels,emscripten_glReleaseShaderCompiler:_emscripten_glReleaseShaderCompiler,emscripten_glRenderbufferStorage:_emscripten_glRenderbufferStorage,emscripten_glSampleCoverage:_emscripten_glSampleCoverage,emscripten_glScissor:_emscripten_glScissor,emscripten_glShaderBinary:_emscripten_glShaderBinary,emscripten_glShaderSource:_emscripten_glShaderSource,emscripten_glStencilFunc:_emscripten_glStencilFunc,emscripten_glStencilFuncSeparate:_emscripten_glStencilFuncSeparate,emscripten_glStencilMask:_emscripten_glStencilMask,emscripten_glStencilMaskSeparate:_emscripten_glStencilMaskSeparate,emscripten_glStencilOp:_emscripten_glStencilOp,emscripten_glStencilOpSeparate:_emscripten_glStencilOpSeparate,emscripten_glTexImage2D:_emscripten_glTexImage2D,emscripten_glTexParameterf:_emscripten_glTexParameterf,emscripten_glTexParameterfv:_emscripten_glTexParameterfv,emscripten_glTexParameteri:_emscripten_glTexParameteri,emscripten_glTexParameteriv:_emscripten_glTexParameteriv,emscripten_glTexSubImage2D:_emscripten_glTexSubImage2D,emscripten_glUniform1f:_emscripten_glUniform1f,emscripten_glUniform1fv:_emscripten_glUniform1fv,emscripten_glUniform1i:_emscripten_glUniform1i,emscripten_glUniform1iv:_emscripten_glUniform1iv,emscripten_glUniform2f:_emscripten_glUniform2f,emscripten_glUniform2fv:_emscripten_glUniform2fv,emscripten_glUniform2i:_emscripten_glUniform2i,emscripten_glUniform2iv:_emscripten_glUniform2iv,emscripten_glUniform3f:_emscripten_glUniform3f,emscripten_glUniform3fv:_emscripten_glUniform3fv,emscripten_glUniform3i:_emscripten_glUniform3i,emscripten_glUniform3iv:_emscripten_glUniform3iv,emscripten_glUniform4f:_emscripten_glUniform4f,emscripten_glUniform4fv:_emscripten_glUniform4fv,emscripten_glUniform4i:_emscripten_glUniform4i,emscripten_glUniform4iv:_emscripten_glUniform4iv,emscripten_glUniformMatrix2fv:_emscripten_glUniformMatrix2fv,emscripten_glUniformMatrix3fv:_emscripten_glUniformMatrix3fv,emscripten_glUniformMatrix4fv:_emscripten_glUniformMatrix4fv,emscripten_glUseProgram:_emscripten_glUseProgram,emscripten_glValidateProgram:_emscripten_glValidateProgram,emscripten_glVertexAttrib1f:_emscripten_glVertexAttrib1f,emscripten_glVertexAttrib1fv:_emscripten_glVertexAttrib1fv,emscripten_glVertexAttrib2f:_emscripten_glVertexAttrib2f,emscripten_glVertexAttrib2fv:_emscripten_glVertexAttrib2fv,emscripten_glVertexAttrib3f:_emscripten_glVertexAttrib3f,emscripten_glVertexAttrib3fv:_emscripten_glVertexAttrib3fv,emscripten_glVertexAttrib4f:_emscripten_glVertexAttrib4f,emscripten_glVertexAttrib4fv:_emscripten_glVertexAttrib4fv,emscripten_glVertexAttribDivisorANGLE:_emscripten_glVertexAttribDivisorANGLE,emscripten_glVertexAttribPointer:_emscripten_glVertexAttribPointer,emscripten_glViewport:_emscripten_glViewport,emscripten_has_asyncify:_emscripten_has_asyncify,emscripten_memcpy_js:_emscripten_memcpy_js,emscripten_request_fullscreen_strategy:_emscripten_request_fullscreen_strategy,emscripten_request_pointerlock:_emscripten_request_pointerlock,emscripten_resize_heap:_emscripten_resize_heap,emscripten_sample_gamepad_data:_emscripten_sample_gamepad_data,emscripten_set_beforeunload_callback_on_thread:_emscripten_set_beforeunload_callback_on_thread,emscripten_set_blur_callback_on_thread:_emscripten_set_blur_callback_on_thread,emscripten_set_canvas_element_size:_emscripten_set_canvas_element_size,emscripten_set_element_css_size:_emscripten_set_element_css_size,emscripten_set_focus_callback_on_thread:_emscripten_set_focus_callback_on_thread,emscripten_set_fullscreenchange_callback_on_thread:_emscripten_set_fullscreenchange_callback_on_thread,emscripten_set_gamepadconnected_callback_on_thread:_emscripten_set_gamepadconnected_callback_on_thread,emscripten_set_gamepaddisconnected_callback_on_thread:_emscripten_set_gamepaddisconnected_callback_on_thread,emscripten_set_keydown_callback_on_thread:_emscripten_set_keydown_callback_on_thread,emscripten_set_keypress_callback_on_thread:_emscripten_set_keypress_callback_on_thread,emscripten_set_keyup_callback_on_thread:_emscripten_set_keyup_callback_on_thread,emscripten_set_main_loop:_emscripten_set_main_loop,emscripten_set_mousedown_callback_on_thread:_emscripten_set_mousedown_callback_on_thread,emscripten_set_mouseenter_callback_on_thread:_emscripten_set_mouseenter_callback_on_thread,emscripten_set_mouseleave_callback_on_thread:_emscripten_set_mouseleave_callback_on_thread,emscripten_set_mousemove_callback_on_thread:_emscripten_set_mousemove_callback_on_thread,emscripten_set_mouseup_callback_on_thread:_emscripten_set_mouseup_callback_on_thread,emscripten_set_pointerlockchange_callback_on_thread:_emscripten_set_pointerlockchange_callback_on_thread,emscripten_set_resize_callback_on_thread:_emscripten_set_resize_callback_on_thread,emscripten_set_touchcancel_callback_on_thread:_emscripten_set_touchcancel_callback_on_thread,emscripten_set_touchend_callback_on_thread:_emscripten_set_touchend_callback_on_thread,emscripten_set_touchmove_callback_on_thread:_emscripten_set_touchmove_callback_on_thread,emscripten_set_touchstart_callback_on_thread:_emscripten_set_touchstart_callback_on_thread,emscripten_set_visibilitychange_callback_on_thread:_emscripten_set_visibilitychange_callback_on_thread,emscripten_set_wheel_callback_on_thread:_emscripten_set_wheel_callback_on_thread,emscripten_set_window_title:_emscripten_set_window_title,emscripten_sleep:_emscripten_sleep,environ_get:_environ_get,environ_sizes_get:_environ_sizes_get,fd_close:_fd_close,fd_read:_fd_read,fd_seek:_fd_seek,fd_write:_fd_write,glActiveTexture:_glActiveTexture,glAttachShader:_glAttachShader,glBindBuffer:_glBindBuffer,glBindTexture:_glBindTexture,glBlendFunc:_glBlendFunc,glBufferData:_glBufferData,glClear:_glClear,glClearColor:_glClearColor,glCompileShader:_glCompileShader,glCreateProgram:_glCreateProgram,glCreateShader:_glCreateShader,glDeleteBuffers:_glDeleteBuffers,glDeleteProgram:_glDeleteProgram,glDeleteShader:_glDeleteShader,glDeleteTextures:_glDeleteTextures,glDepthFunc:_glDepthFunc,glDisableVertexAttribArray:_glDisableVertexAttribArray,glDrawArrays:_glDrawArrays,glEnable:_glEnable,glEnableVertexAttribArray:_glEnableVertexAttribArray,glGenBuffers:_glGenBuffers,glGenTextures:_glGenTextures,glGetActiveAttrib:_glGetActiveAttrib,glGetActiveUniform:_glGetActiveUniform,glGetAttribLocation:_glGetAttribLocation,glGetError:_glGetError,glGetProgramInfoLog:_glGetProgramInfoLog,glGetProgramiv:_glGetProgramiv,glGetShaderInfoLog:_glGetShaderInfoLog,glGetShaderiv:_glGetShaderiv,glGetUniformLocation:_glGetUniformLocation,glLinkProgram:_glLinkProgram,glShaderSource:_glShaderSource,glTexImage2D:_glTexImage2D,glTexParameteri:_glTexParameteri,glUniform1i:_glUniform1i,glUniformMatrix4fv:_glUniformMatrix4fv,glUseProgram:_glUseProgram,glVertexAttribPointer:_glVertexAttribPointer,glViewport:_glViewport,strftime_l:_strftime_l};var wasmExports=createWasm();var ___wasm_call_ctors=()=>(___wasm_call_ctors=wasmExports["__wasm_call_ctors"])();var _main=Module["_main"]=(a0,a1)=>(_main=Module["_main"]=wasmExports["__main_argc_argv"])(a0,a1);var _free=a0=>(_free=wasmExports["free"])(a0);var _malloc=a0=>(_malloc=wasmExports["malloc"])(a0);var ___errno_location=()=>(___errno_location=wasmExports["__errno_location"])();var stackSave=()=>(stackSave=wasmExports["stackSave"])();var stackRestore=a0=>(stackRestore=wasmExports["stackRestore"])(a0);var stackAlloc=a0=>(stackAlloc=wasmExports["stackAlloc"])(a0);var ___cxa_is_pointer_type=a0=>(___cxa_is_pointer_type=wasmExports["__cxa_is_pointer_type"])(a0);var dynCall_jiji=Module["dynCall_jiji"]=(a0,a1,a2,a3,a4)=>(dynCall_jiji=Module["dynCall_jiji"]=wasmExports["dynCall_jiji"])(a0,a1,a2,a3,a4);var dynCall_ji=Module["dynCall_ji"]=(a0,a1)=>(dynCall_ji=Module["dynCall_ji"]=wasmExports["dynCall_ji"])(a0,a1);var dynCall_viijii=Module["dynCall_viijii"]=(a0,a1,a2,a3,a4,a5,a6)=>(dynCall_viijii=Module["dynCall_viijii"]=wasmExports["dynCall_viijii"])(a0,a1,a2,a3,a4,a5,a6);var dynCall_iiiiij=Module["dynCall_iiiiij"]=(a0,a1,a2,a3,a4,a5,a6)=>(dynCall_iiiiij=Module["dynCall_iiiiij"]=wasmExports["dynCall_iiiiij"])(a0,a1,a2,a3,a4,a5,a6);var dynCall_iiiiijj=Module["dynCall_iiiiijj"]=(a0,a1,a2,a3,a4,a5,a6,a7,a8)=>(dynCall_iiiiijj=Module["dynCall_iiiiijj"]=wasmExports["dynCall_iiiiijj"])(a0,a1,a2,a3,a4,a5,a6,a7,a8);var dynCall_iiiiiijj=Module["dynCall_iiiiiijj"]=(a0,a1,a2,a3,a4,a5,a6,a7,a8,a9)=>(dynCall_iiiiiijj=Module["dynCall_iiiiiijj"]=wasmExports["dynCall_iiiiiijj"])(a0,a1,a2,a3,a4,a5,a6,a7,a8,a9);Module["addRunDependency"]=addRunDependency;Module["removeRunDependency"]=removeRunDependency;Module["FS_createPath"]=FS.createPath;Module["FS_createLazyFile"]=FS.createLazyFile;Module["FS_createDevice"]=FS.createDevice;Module["FS_createPreloadedFile"]=FS.createPreloadedFile;Module["FS_createDataFile"]=FS.createDataFile;Module["FS_unlink"]=FS.unlink;var calledRun;dependenciesFulfilled=function runCaller(){if(!calledRun)run();if(!calledRun)dependenciesFulfilled=runCaller};function callMain(args=[]){var entryFunction=_main;args.unshift(thisProgram);var argc=args.length;var argv=stackAlloc((argc+1)*4);var argv_ptr=argv;args.forEach(arg=>{HEAPU32[argv_ptr>>2]=stringToUTF8OnStack(arg);argv_ptr+=4});HEAPU32[argv_ptr>>2]=0;try{var ret=entryFunction(argc,argv);exitJS(ret,true);return ret}catch(e){return handleException(e)}}function run(args=arguments_){if(runDependencies>0){return}preRun();if(runDependencies>0){return}function doRun(){if(calledRun)return;calledRun=true;Module["calledRun"]=true;if(ABORT)return;initRuntime();preMain();if(Module["onRuntimeInitialized"])Module["onRuntimeInitialized"]();if(shouldRunNow)callMain(args);postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout(function(){setTimeout(function(){Module["setStatus"]("")},1);doRun()},1)}else{doRun()}}if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].pop()()}}var shouldRunNow=true;if(Module["noInitialRun"])shouldRunNow=false;run(); +var Module=typeof Module!="undefined"?Module:{};var ENVIRONMENT_IS_WEB=typeof window=="object";var ENVIRONMENT_IS_WORKER=typeof WorkerGlobalScope!="undefined";var ENVIRONMENT_IS_NODE=typeof process=="object"&&typeof process.versions=="object"&&typeof process.versions.node=="string"&&process.type!="renderer";var ENVIRONMENT_IS_PTHREAD=ENVIRONMENT_IS_WORKER&&self.name?.startsWith("em-pthread");if(ENVIRONMENT_IS_NODE){var worker_threads=require("worker_threads");global.Worker=worker_threads.Worker;ENVIRONMENT_IS_WORKER=!worker_threads.isMainThread;ENVIRONMENT_IS_PTHREAD=ENVIRONMENT_IS_WORKER&&worker_threads["workerData"]=="em-pthread"}Module["expectedDataFileDownloads"]??=0;Module["expectedDataFileDownloads"]++;(()=>{var isPthread=typeof ENVIRONMENT_IS_PTHREAD!="undefined"&&ENVIRONMENT_IS_PTHREAD;var isWasmWorker=typeof ENVIRONMENT_IS_WASM_WORKER!="undefined"&&ENVIRONMENT_IS_WASM_WORKER;if(isPthread||isWasmWorker)return;var isNode=typeof process==="object"&&typeof process.versions==="object"&&typeof process.versions.node==="string";function loadPackage(metadata){var PACKAGE_PATH="";if(typeof window==="object"){PACKAGE_PATH=window["encodeURIComponent"](window.location.pathname.substring(0,window.location.pathname.lastIndexOf("/"))+"/")}else if(typeof process==="undefined"&&typeof location!=="undefined"){PACKAGE_PATH=encodeURIComponent(location.pathname.substring(0,location.pathname.lastIndexOf("/"))+"/")}var PACKAGE_NAME="jumpingbird.data";var REMOTE_PACKAGE_BASE="jumpingbird.data";var REMOTE_PACKAGE_NAME=Module["locateFile"]?Module["locateFile"](REMOTE_PACKAGE_BASE,""):REMOTE_PACKAGE_BASE;var REMOTE_PACKAGE_SIZE=metadata["remote_package_size"];function fetchRemotePackage(packageName,packageSize,callback,errback){if(isNode){require("fs").readFile(packageName,(err,contents)=>{if(err){errback(err)}else{callback(contents.buffer)}});return}Module["dataFileDownloads"]??={};fetch(packageName).catch(cause=>Promise.reject(new Error(`Network Error: ${packageName}`,{cause}))).then(response=>{if(!response.ok){return Promise.reject(new Error(`${response.status}: ${response.url}`))}if(!response.body&&response.arrayBuffer){return response.arrayBuffer().then(callback)}const reader=response.body.getReader();const iterate=()=>reader.read().then(handleChunk).catch(cause=>Promise.reject(new Error(`Unexpected error while handling : ${response.url} ${cause}`,{cause})));const chunks=[];const headers=response.headers;const total=Number(headers.get("Content-Length")??packageSize);let loaded=0;const handleChunk=({done,value})=>{if(!done){chunks.push(value);loaded+=value.length;Module["dataFileDownloads"][packageName]={loaded,total};let totalLoaded=0;let totalSize=0;for(const download of Object.values(Module["dataFileDownloads"])){totalLoaded+=download.loaded;totalSize+=download.total}Module["setStatus"]?.(`Downloading data... (${totalLoaded}/${totalSize})`);return iterate()}else{const packageData=new Uint8Array(chunks.map(c=>c.length).reduce((a,b)=>a+b,0));let offset=0;for(const chunk of chunks){packageData.set(chunk,offset);offset+=chunk.length}callback(packageData.buffer)}};Module["setStatus"]?.("Downloading data...");return iterate()})}function handleError(error){console.error("package error:",error)}var fetchedCallback=null;var fetched=Module["getPreloadedPackage"]?Module["getPreloadedPackage"](REMOTE_PACKAGE_NAME,REMOTE_PACKAGE_SIZE):null;if(!fetched)fetchRemotePackage(REMOTE_PACKAGE_NAME,REMOTE_PACKAGE_SIZE,data=>{if(fetchedCallback){fetchedCallback(data);fetchedCallback=null}else{fetched=data}},handleError);function runWithFS(Module){function assert(check,msg){if(!check)throw msg+(new Error).stack}function DataRequest(start,end,audio){this.start=start;this.end=end;this.audio=audio}DataRequest.prototype={requests:{},open:function(mode,name){this.name=name;this.requests[name]=this;Module["addRunDependency"](`fp ${this.name}`)},send:function(){},onload:function(){var byteArray=this.byteArray.subarray(this.start,this.end);this.finish(byteArray)},finish:function(byteArray){var that=this;Module["FS_createDataFile"](this.name,null,byteArray,true,true,true);Module["removeRunDependency"](`fp ${that.name}`);this.requests[this.name]=null}};var files=metadata["files"];for(var i=0;i{throw toThrow};var _scriptName=typeof document!="undefined"?document.currentScript?.src:undefined;if(ENVIRONMENT_IS_NODE){_scriptName=__filename}else if(ENVIRONMENT_IS_WORKER){_scriptName=self.location.href}var scriptDirectory="";function locateFile(path){if(Module["locateFile"]){return Module["locateFile"](path,scriptDirectory)}return scriptDirectory+path}var readAsync,readBinary;if(ENVIRONMENT_IS_NODE){var fs=require("fs");var nodePath=require("path");scriptDirectory=__dirname+"/";readBinary=filename=>{filename=isFileURI(filename)?new URL(filename):filename;var ret=fs.readFileSync(filename);return ret};readAsync=async(filename,binary=true)=>{filename=isFileURI(filename)?new URL(filename):filename;var ret=fs.readFileSync(filename,binary?undefined:"utf8");return ret};if(!Module["thisProgram"]&&process.argv.length>1){thisProgram=process.argv[1].replace(/\\/g,"/")}arguments_=process.argv.slice(2);if(typeof module!="undefined"){module["exports"]=Module}quit_=(status,toThrow)=>{process.exitCode=status;throw toThrow}}else if(ENVIRONMENT_IS_WEB||ENVIRONMENT_IS_WORKER){if(ENVIRONMENT_IS_WORKER){scriptDirectory=self.location.href}else if(typeof document!="undefined"&&document.currentScript){scriptDirectory=document.currentScript.src}if(scriptDirectory.startsWith("blob:")){scriptDirectory=""}else{scriptDirectory=scriptDirectory.slice(0,scriptDirectory.replace(/[?#].*/,"").lastIndexOf("/")+1)}if(!ENVIRONMENT_IS_NODE){if(ENVIRONMENT_IS_WORKER){readBinary=url=>{var xhr=new XMLHttpRequest;xhr.open("GET",url,false);xhr.responseType="arraybuffer";xhr.send(null);return new Uint8Array(xhr.response)}}readAsync=async url=>{if(isFileURI(url)){return new Promise((resolve,reject)=>{var xhr=new XMLHttpRequest;xhr.open("GET",url,true);xhr.responseType="arraybuffer";xhr.onload=()=>{if(xhr.status==200||xhr.status==0&&xhr.response){resolve(xhr.response);return}reject(xhr.status)};xhr.onerror=reject;xhr.send(null)})}var response=await fetch(url,{credentials:"same-origin"});if(response.ok){return response.arrayBuffer()}throw new Error(response.status+" : "+response.url)}}}else{}var defaultPrint=console.log.bind(console);var defaultPrintErr=console.error.bind(console);if(ENVIRONMENT_IS_NODE){defaultPrint=(...args)=>fs.writeSync(1,args.join(" ")+"\n");defaultPrintErr=(...args)=>fs.writeSync(2,args.join(" ")+"\n")}var out=Module["print"]||defaultPrint;var err=Module["printErr"]||defaultPrintErr;Object.assign(Module,moduleOverrides);moduleOverrides=null;if(Module["arguments"])arguments_=Module["arguments"];if(Module["thisProgram"])thisProgram=Module["thisProgram"];var wasmBinary=Module["wasmBinary"];var wasmMemory;var wasmModule;var ABORT=false;var EXITSTATUS;var HEAP8,HEAPU8,HEAP16,HEAPU16,HEAP32,HEAPU32,HEAPF32,HEAP64,HEAPU64,HEAPF64;var runtimeInitialized=false;var isFileURI=filename=>filename.startsWith("file://");if(ENVIRONMENT_IS_PTHREAD){var wasmModuleReceived;if(ENVIRONMENT_IS_NODE){var parentPort=worker_threads["parentPort"];parentPort.on("message",msg=>onmessage({data:msg}));Object.assign(globalThis,{self:global,postMessage:msg=>parentPort.postMessage(msg)})}var initializedJS=false;function threadPrintErr(...args){if(ENVIRONMENT_IS_NODE){fs.writeSync(2,args.join(" ")+"\n");return}console.error(...args)}if(!Module["printErr"])err=threadPrintErr;self.onunhandledrejection=e=>{throw e.reason||e};function handleMessage(e){try{var msgData=e["data"];var cmd=msgData.cmd;if(cmd==="load"){let messageQueue=[];self.onmessage=e=>messageQueue.push(e);self.startWorker=instance=>{postMessage({cmd:"loaded"});for(let msg of messageQueue){handleMessage(msg)}self.onmessage=handleMessage};for(const handler of msgData.handlers){if(!Module[handler]||Module[handler].proxy){Module[handler]=(...args)=>{postMessage({cmd:"callHandler",handler,args})};if(handler=="print")out=Module[handler];if(handler=="printErr")err=Module[handler]}}wasmMemory=msgData.wasmMemory;updateMemoryViews();wasmModuleReceived(msgData.wasmModule)}else if(cmd==="run"){establishStackSpace(msgData.pthread_ptr);__emscripten_thread_init(msgData.pthread_ptr,0,0,1,0,0);PThread.threadInitTLS();__emscripten_thread_mailbox_await(msgData.pthread_ptr);if(!initializedJS){initializedJS=true}try{invokeEntryPoint(msgData.start_routine,msgData.arg)}catch(ex){if(ex!="unwind"){throw ex}}}else if(msgData.target==="setimmediate"){}else if(cmd==="checkMailbox"){if(initializedJS){checkMailbox()}}else if(cmd){err(`worker: received unknown command ${cmd}`);err(msgData)}}catch(ex){__emscripten_thread_crashed();throw ex}}self.onmessage=handleMessage}function updateMemoryViews(){var b=wasmMemory.buffer;Module["HEAP8"]=HEAP8=new Int8Array(b);Module["HEAP16"]=HEAP16=new Int16Array(b);Module["HEAPU8"]=HEAPU8=new Uint8Array(b);Module["HEAPU16"]=HEAPU16=new Uint16Array(b);Module["HEAP32"]=HEAP32=new Int32Array(b);Module["HEAPU32"]=HEAPU32=new Uint32Array(b);Module["HEAPF32"]=HEAPF32=new Float32Array(b);Module["HEAPF64"]=HEAPF64=new Float64Array(b);Module["HEAP64"]=HEAP64=new BigInt64Array(b);Module["HEAPU64"]=HEAPU64=new BigUint64Array(b)}if(!ENVIRONMENT_IS_PTHREAD){if(Module["wasmMemory"]){wasmMemory=Module["wasmMemory"]}else{var INITIAL_MEMORY=Module["INITIAL_MEMORY"]||33554432;wasmMemory=new WebAssembly.Memory({initial:INITIAL_MEMORY/65536,maximum:INITIAL_MEMORY/65536,shared:true})}updateMemoryViews()}function preRun(){if(Module["preRun"]){if(typeof Module["preRun"]=="function")Module["preRun"]=[Module["preRun"]];while(Module["preRun"].length){addOnPreRun(Module["preRun"].shift())}}callRuntimeCallbacks(onPreRuns)}function initRuntime(){runtimeInitialized=true;if(ENVIRONMENT_IS_PTHREAD)return startWorker(Module);if(!Module["noFSInit"]&&!FS.initialized)FS.init();TTY.init();wasmExports["__wasm_call_ctors"]();FS.ignorePermissions=false}function preMain(){}function postRun(){if(ENVIRONMENT_IS_PTHREAD)return;if(Module["postRun"]){if(typeof Module["postRun"]=="function")Module["postRun"]=[Module["postRun"]];while(Module["postRun"].length){addOnPostRun(Module["postRun"].shift())}}callRuntimeCallbacks(onPostRuns)}var runDependencies=0;var dependenciesFulfilled=null;function getUniqueRunDependency(id){return id}function addRunDependency(id){runDependencies++;Module["monitorRunDependencies"]?.(runDependencies)}function removeRunDependency(id){runDependencies--;Module["monitorRunDependencies"]?.(runDependencies);if(runDependencies==0){if(dependenciesFulfilled){var callback=dependenciesFulfilled;dependenciesFulfilled=null;callback()}}}function abort(what){Module["onAbort"]?.(what);what="Aborted("+what+")";err(what);ABORT=true;what+=". Build with -sASSERTIONS for more info.";var e=new WebAssembly.RuntimeError(what);throw e}var wasmBinaryFile;function findWasmBinary(){return locateFile("jumpingbird.wasm")}function getBinarySync(file){if(file==wasmBinaryFile&&wasmBinary){return new Uint8Array(wasmBinary)}if(readBinary){return readBinary(file)}throw"both async and sync fetching of the wasm failed"}async function getWasmBinary(binaryFile){if(!wasmBinary){try{var response=await readAsync(binaryFile);return new Uint8Array(response)}catch{}}return getBinarySync(binaryFile)}async function instantiateArrayBuffer(binaryFile,imports){try{var binary=await getWasmBinary(binaryFile);var instance=await WebAssembly.instantiate(binary,imports);return instance}catch(reason){err(`failed to asynchronously prepare wasm: ${reason}`);abort(reason)}}async function instantiateAsync(binary,binaryFile,imports){if(!binary&&typeof WebAssembly.instantiateStreaming=="function"&&!isFileURI(binaryFile)&&!ENVIRONMENT_IS_NODE){try{var response=fetch(binaryFile,{credentials:"same-origin"});var instantiationResult=await WebAssembly.instantiateStreaming(response,imports);return instantiationResult}catch(reason){err(`wasm streaming compile failed: ${reason}`);err("falling back to ArrayBuffer instantiation")}}return instantiateArrayBuffer(binaryFile,imports)}function getWasmImports(){assignWasmImports();return{env:wasmImports,wasi_snapshot_preview1:wasmImports}}async function createWasm(){function receiveInstance(instance,module){wasmExports=instance.exports;registerTLSInit(wasmExports["_emscripten_tls_init"]);wasmTable=wasmExports["__indirect_function_table"];wasmModule=module;removeRunDependency("wasm-instantiate");return wasmExports}addRunDependency("wasm-instantiate");function receiveInstantiationResult(result){return receiveInstance(result["instance"],result["module"])}var info=getWasmImports();if(Module["instantiateWasm"]){return new Promise((resolve,reject)=>{Module["instantiateWasm"](info,(mod,inst)=>{receiveInstance(mod,inst);resolve(mod.exports)})})}if(ENVIRONMENT_IS_PTHREAD){return new Promise(resolve=>{wasmModuleReceived=module=>{var instance=new WebAssembly.Instance(module,getWasmImports());resolve(receiveInstance(instance,module))}})}wasmBinaryFile??=findWasmBinary();var result=await instantiateAsync(wasmBinary,wasmBinaryFile,info);var exports=receiveInstantiationResult(result);return exports}class ExitStatus{name="ExitStatus";constructor(status){this.message=`Program terminated with exit(${status})`;this.status=status}}var terminateWorker=worker=>{worker.terminate();worker.onmessage=e=>{}};var cleanupThread=pthread_ptr=>{var worker=PThread.pthreads[pthread_ptr];PThread.returnWorkerToPool(worker)};var callRuntimeCallbacks=callbacks=>{while(callbacks.length>0){callbacks.shift()(Module)}};var onPreRuns=[];var addOnPreRun=cb=>onPreRuns.unshift(cb);var spawnThread=threadParams=>{var worker=PThread.getNewWorker();if(!worker){return 6}PThread.runningWorkers.push(worker);PThread.pthreads[threadParams.pthread_ptr]=worker;worker.pthread_ptr=threadParams.pthread_ptr;var msg={cmd:"run",start_routine:threadParams.startRoutine,arg:threadParams.arg,pthread_ptr:threadParams.pthread_ptr};if(ENVIRONMENT_IS_NODE){worker.unref()}worker.postMessage(msg,threadParams.transferList);return 0};var runtimeKeepaliveCounter=0;var keepRuntimeAlive=()=>noExitRuntime||runtimeKeepaliveCounter>0;var stackSave=()=>_emscripten_stack_get_current();var stackRestore=val=>__emscripten_stack_restore(val);var stackAlloc=sz=>__emscripten_stack_alloc(sz);var proxyToMainThread=(funcIndex,emAsmAddr,sync,...callArgs)=>{var serializedNumCallArgs=callArgs.length*2;var sp=stackSave();var args=stackAlloc(serializedNumCallArgs*8);var b=args>>3;for(var i=0;i{EXITSTATUS=status;if(ENVIRONMENT_IS_PTHREAD){exitOnMainThread(status);throw"unwind"}_proc_exit(status)};var _exit=exitJS;var PThread={unusedWorkers:[],runningWorkers:[],tlsInitFunctions:[],pthreads:{},init(){if(!ENVIRONMENT_IS_PTHREAD){PThread.initMainThread()}},initMainThread(){var pthreadPoolSize=4;while(pthreadPoolSize--){PThread.allocateUnusedWorker()}addOnPreRun(()=>{addRunDependency("loading-workers");PThread.loadWasmModuleToAllWorkers(()=>removeRunDependency("loading-workers"))})},terminateAllThreads:()=>{for(var worker of PThread.runningWorkers){terminateWorker(worker)}for(var worker of PThread.unusedWorkers){terminateWorker(worker)}PThread.unusedWorkers=[];PThread.runningWorkers=[];PThread.pthreads={}},returnWorkerToPool:worker=>{var pthread_ptr=worker.pthread_ptr;delete PThread.pthreads[pthread_ptr];PThread.unusedWorkers.push(worker);PThread.runningWorkers.splice(PThread.runningWorkers.indexOf(worker),1);worker.pthread_ptr=0;__emscripten_thread_free_data(pthread_ptr)},threadInitTLS(){PThread.tlsInitFunctions.forEach(f=>f())},loadWasmModuleToWorker:worker=>new Promise(onFinishedLoading=>{worker.onmessage=e=>{var d=e["data"];var cmd=d.cmd;if(d.targetThread&&d.targetThread!=_pthread_self()){var targetWorker=PThread.pthreads[d.targetThread];if(targetWorker){targetWorker.postMessage(d,d.transferList)}else{err(`Internal error! Worker sent a message "${cmd}" to target pthread ${d.targetThread}, but that thread no longer exists!`)}return}if(cmd==="checkMailbox"){checkMailbox()}else if(cmd==="spawnThread"){spawnThread(d)}else if(cmd==="cleanupThread"){cleanupThread(d.thread)}else if(cmd==="loaded"){worker.loaded=true;if(ENVIRONMENT_IS_NODE&&!worker.pthread_ptr){worker.unref()}onFinishedLoading(worker)}else if(d.target==="setimmediate"){worker.postMessage(d)}else if(cmd==="callHandler"){Module[d.handler](...d.args)}else if(cmd){err(`worker sent an unknown command ${cmd}`)}};worker.onerror=e=>{var message="worker sent an error!";err(`${message} ${e.filename}:${e.lineno}: ${e.message}`);throw e};if(ENVIRONMENT_IS_NODE){worker.on("message",data=>worker.onmessage({data}));worker.on("error",e=>worker.onerror(e))}var handlers=[];var knownHandlers=["onExit","onAbort","print","printErr"];for(var handler of knownHandlers){if(Module.propertyIsEnumerable(handler)){handlers.push(handler)}}worker.postMessage({cmd:"load",handlers,wasmMemory,wasmModule})}),loadWasmModuleToAllWorkers(onMaybeReady){if(ENVIRONMENT_IS_PTHREAD){return onMaybeReady()}let pthreadPoolReady=Promise.all(PThread.unusedWorkers.map(PThread.loadWasmModuleToWorker));pthreadPoolReady.then(onMaybeReady)},allocateUnusedWorker(){var worker;var pthreadMainJs=_scriptName;if(Module["mainScriptUrlOrBlob"]){pthreadMainJs=Module["mainScriptUrlOrBlob"];if(typeof pthreadMainJs!="string"){pthreadMainJs=URL.createObjectURL(pthreadMainJs)}}worker=new Worker(pthreadMainJs,{workerData:"em-pthread",name:"em-pthread"});PThread.unusedWorkers.push(worker)},getNewWorker(){if(PThread.unusedWorkers.length==0){PThread.allocateUnusedWorker();PThread.loadWasmModuleToWorker(PThread.unusedWorkers[0])}return PThread.unusedWorkers.pop()}};var onPostRuns=[];var addOnPostRun=cb=>onPostRuns.unshift(cb);var establishStackSpace=pthread_ptr=>{var stackHigh=HEAPU32[pthread_ptr+52>>2];var stackSize=HEAPU32[pthread_ptr+56>>2];var stackLow=stackHigh-stackSize;_emscripten_stack_set_limits(stackHigh,stackLow);stackRestore(stackHigh)};var wasmTableMirror=[];var wasmTable;var getWasmTableEntry=funcPtr=>{var func=wasmTableMirror[funcPtr];if(!func){wasmTableMirror[funcPtr]=func=wasmTable.get(funcPtr)}return func};var invokeEntryPoint=(ptr,arg)=>{runtimeKeepaliveCounter=0;noExitRuntime=0;var result=getWasmTableEntry(ptr)(arg);function finish(result){if(keepRuntimeAlive()){EXITSTATUS=result}else{__emscripten_thread_exit(result)}}finish(result)};var noExitRuntime=Module["noExitRuntime"]||true;var registerTLSInit=tlsInitFunc=>PThread.tlsInitFunctions.push(tlsInitFunc);function setValue(ptr,value,type="i8"){if(type.endsWith("*"))type="*";switch(type){case"i1":HEAP8[ptr]=value;break;case"i8":HEAP8[ptr]=value;break;case"i16":HEAP16[ptr>>1]=value;break;case"i32":HEAP32[ptr>>2]=value;break;case"i64":HEAP64[ptr>>3]=BigInt(value);break;case"float":HEAPF32[ptr>>2]=value;break;case"double":HEAPF64[ptr>>3]=value;break;case"*":HEAPU32[ptr>>2]=value;break;default:abort(`invalid type for setValue: ${type}`)}}var UTF8Decoder=typeof TextDecoder!="undefined"?new TextDecoder:undefined;var UTF8ArrayToString=(heapOrArray,idx=0,maxBytesToRead=NaN)=>{var endIdx=idx+maxBytesToRead;var endPtr=idx;while(heapOrArray[endPtr]&&!(endPtr>=endIdx))++endPtr;if(endPtr-idx>16&&heapOrArray.buffer&&UTF8Decoder){return UTF8Decoder.decode(heapOrArray.buffer instanceof ArrayBuffer?heapOrArray.subarray(idx,endPtr):heapOrArray.slice(idx,endPtr))}var str="";while(idx>10,56320|ch&1023)}}return str};var UTF8ToString=(ptr,maxBytesToRead)=>ptr?UTF8ArrayToString(HEAPU8,ptr,maxBytesToRead):"";var ___assert_fail=(condition,filename,line,func)=>abort(`Assertion failed: ${UTF8ToString(condition)}, at: `+[filename?UTF8ToString(filename):"unknown filename",line,func?UTF8ToString(func):"unknown function"]);var ___call_sighandler=(fp,sig)=>getWasmTableEntry(fp)(sig);class ExceptionInfo{constructor(excPtr){this.excPtr=excPtr;this.ptr=excPtr-24}set_type(type){HEAPU32[this.ptr+4>>2]=type}get_type(){return HEAPU32[this.ptr+4>>2]}set_destructor(destructor){HEAPU32[this.ptr+8>>2]=destructor}get_destructor(){return HEAPU32[this.ptr+8>>2]}set_caught(caught){caught=caught?1:0;HEAP8[this.ptr+12]=caught}get_caught(){return HEAP8[this.ptr+12]!=0}set_rethrown(rethrown){rethrown=rethrown?1:0;HEAP8[this.ptr+13]=rethrown}get_rethrown(){return HEAP8[this.ptr+13]!=0}init(type,destructor){this.set_adjusted_ptr(0);this.set_type(type);this.set_destructor(destructor)}set_adjusted_ptr(adjustedPtr){HEAPU32[this.ptr+16>>2]=adjustedPtr}get_adjusted_ptr(){return HEAPU32[this.ptr+16>>2]}}var exceptionLast=0;var uncaughtExceptionCount=0;var ___cxa_throw=(ptr,type,destructor)=>{var info=new ExceptionInfo(ptr);info.init(type,destructor);exceptionLast=ptr;uncaughtExceptionCount++;throw exceptionLast};function pthreadCreateProxied(pthread_ptr,attr,startRoutine,arg){if(ENVIRONMENT_IS_PTHREAD)return proxyToMainThread(2,0,1,pthread_ptr,attr,startRoutine,arg);return ___pthread_create_js(pthread_ptr,attr,startRoutine,arg)}var _emscripten_has_threading_support=()=>typeof SharedArrayBuffer!="undefined";var ___pthread_create_js=(pthread_ptr,attr,startRoutine,arg)=>{if(!_emscripten_has_threading_support()){return 6}var transferList=[];var error=0;if(ENVIRONMENT_IS_PTHREAD&&(transferList.length===0||error)){return pthreadCreateProxied(pthread_ptr,attr,startRoutine,arg)}if(error)return error;var threadParams={startRoutine,pthread_ptr,arg,transferList};if(ENVIRONMENT_IS_PTHREAD){threadParams.cmd="spawnThread";postMessage(threadParams,transferList);return 0}return spawnThread(threadParams)};var PATH={isAbs:path=>path.charAt(0)==="/",splitPath:filename=>{var splitPathRe=/^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/;return splitPathRe.exec(filename).slice(1)},normalizeArray:(parts,allowAboveRoot)=>{var up=0;for(var i=parts.length-1;i>=0;i--){var last=parts[i];if(last==="."){parts.splice(i,1)}else if(last===".."){parts.splice(i,1);up++}else if(up){parts.splice(i,1);up--}}if(allowAboveRoot){for(;up;up--){parts.unshift("..")}}return parts},normalize:path=>{var isAbsolute=PATH.isAbs(path),trailingSlash=path.slice(-1)==="/";path=PATH.normalizeArray(path.split("/").filter(p=>!!p),!isAbsolute).join("/");if(!path&&!isAbsolute){path="."}if(path&&trailingSlash){path+="/"}return(isAbsolute?"/":"")+path},dirname:path=>{var result=PATH.splitPath(path),root=result[0],dir=result[1];if(!root&&!dir){return"."}if(dir){dir=dir.slice(0,-1)}return root+dir},basename:path=>path&&path.match(/([^\/]+|\/)\/*$/)[1],join:(...paths)=>PATH.normalize(paths.join("/")),join2:(l,r)=>PATH.normalize(l+"/"+r)};var initRandomFill=()=>{if(ENVIRONMENT_IS_NODE){var nodeCrypto=require("crypto");return view=>nodeCrypto.randomFillSync(view)}return view=>view.set(crypto.getRandomValues(new Uint8Array(view.byteLength)))};var randomFill=view=>{(randomFill=initRandomFill())(view)};var PATH_FS={resolve:(...args)=>{var resolvedPath="",resolvedAbsolute=false;for(var i=args.length-1;i>=-1&&!resolvedAbsolute;i--){var path=i>=0?args[i]:FS.cwd();if(typeof path!="string"){throw new TypeError("Arguments to path.resolve must be strings")}else if(!path){return""}resolvedPath=path+"/"+resolvedPath;resolvedAbsolute=PATH.isAbs(path)}resolvedPath=PATH.normalizeArray(resolvedPath.split("/").filter(p=>!!p),!resolvedAbsolute).join("/");return(resolvedAbsolute?"/":"")+resolvedPath||"."},relative:(from,to)=>{from=PATH_FS.resolve(from).slice(1);to=PATH_FS.resolve(to).slice(1);function trim(arr){var start=0;for(;start=0;end--){if(arr[end]!=="")break}if(start>end)return[];return arr.slice(start,end-start+1)}var fromParts=trim(from.split("/"));var toParts=trim(to.split("/"));var length=Math.min(fromParts.length,toParts.length);var samePartsLength=length;for(var i=0;i{var len=0;for(var i=0;i=55296&&c<=57343){len+=4;++i}else{len+=3}}return len};var stringToUTF8Array=(str,heap,outIdx,maxBytesToWrite)=>{if(!(maxBytesToWrite>0))return 0;var startIdx=outIdx;var endIdx=outIdx+maxBytesToWrite-1;for(var i=0;i=55296&&u<=57343){var u1=str.charCodeAt(++i);u=65536+((u&1023)<<10)|u1&1023}if(u<=127){if(outIdx>=endIdx)break;heap[outIdx++]=u}else if(u<=2047){if(outIdx+1>=endIdx)break;heap[outIdx++]=192|u>>6;heap[outIdx++]=128|u&63}else if(u<=65535){if(outIdx+2>=endIdx)break;heap[outIdx++]=224|u>>12;heap[outIdx++]=128|u>>6&63;heap[outIdx++]=128|u&63}else{if(outIdx+3>=endIdx)break;heap[outIdx++]=240|u>>18;heap[outIdx++]=128|u>>12&63;heap[outIdx++]=128|u>>6&63;heap[outIdx++]=128|u&63}}heap[outIdx]=0;return outIdx-startIdx};var intArrayFromString=(stringy,dontAddNull,length)=>{var len=length>0?length:lengthBytesUTF8(stringy)+1;var u8array=new Array(len);var numBytesWritten=stringToUTF8Array(stringy,u8array,0,u8array.length);if(dontAddNull)u8array.length=numBytesWritten;return u8array};var FS_stdin_getChar=()=>{if(!FS_stdin_getChar_buffer.length){var result=null;if(ENVIRONMENT_IS_NODE){var BUFSIZE=256;var buf=Buffer.alloc(BUFSIZE);var bytesRead=0;var fd=process.stdin.fd;try{bytesRead=fs.readSync(fd,buf,0,BUFSIZE)}catch(e){if(e.toString().includes("EOF"))bytesRead=0;else throw e}if(bytesRead>0){result=buf.slice(0,bytesRead).toString("utf-8")}}else if(typeof window!="undefined"&&typeof window.prompt=="function"){result=window.prompt("Input: ");if(result!==null){result+="\n"}}else{}if(!result){return null}FS_stdin_getChar_buffer=intArrayFromString(result,true)}return FS_stdin_getChar_buffer.shift()};var TTY={ttys:[],init(){},shutdown(){},register(dev,ops){TTY.ttys[dev]={input:[],output:[],ops};FS.registerDevice(dev,TTY.stream_ops)},stream_ops:{open(stream){var tty=TTY.ttys[stream.node.rdev];if(!tty){throw new FS.ErrnoError(43)}stream.tty=tty;stream.seekable=false},close(stream){stream.tty.ops.fsync(stream.tty)},fsync(stream){stream.tty.ops.fsync(stream.tty)},read(stream,buffer,offset,length,pos){if(!stream.tty||!stream.tty.ops.get_char){throw new FS.ErrnoError(60)}var bytesRead=0;for(var i=0;i0){out(UTF8ArrayToString(tty.output));tty.output=[]}},ioctl_tcgets(tty){return{c_iflag:25856,c_oflag:5,c_cflag:191,c_lflag:35387,c_cc:[3,28,127,21,4,0,1,0,17,19,26,0,18,15,23,22,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]}},ioctl_tcsets(tty,optional_actions,data){return 0},ioctl_tiocgwinsz(tty){return[24,80]}},default_tty1_ops:{put_char(tty,val){if(val===null||val===10){err(UTF8ArrayToString(tty.output));tty.output=[]}else{if(val!=0)tty.output.push(val)}},fsync(tty){if(tty.output?.length>0){err(UTF8ArrayToString(tty.output));tty.output=[]}}}};var mmapAlloc=size=>{abort()};var MEMFS={ops_table:null,mount(mount){return MEMFS.createNode(null,"/",16895,0)},createNode(parent,name,mode,dev){if(FS.isBlkdev(mode)||FS.isFIFO(mode)){throw new FS.ErrnoError(63)}MEMFS.ops_table||={dir:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,lookup:MEMFS.node_ops.lookup,mknod:MEMFS.node_ops.mknod,rename:MEMFS.node_ops.rename,unlink:MEMFS.node_ops.unlink,rmdir:MEMFS.node_ops.rmdir,readdir:MEMFS.node_ops.readdir,symlink:MEMFS.node_ops.symlink},stream:{llseek:MEMFS.stream_ops.llseek}},file:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:{llseek:MEMFS.stream_ops.llseek,read:MEMFS.stream_ops.read,write:MEMFS.stream_ops.write,mmap:MEMFS.stream_ops.mmap,msync:MEMFS.stream_ops.msync}},link:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr,readlink:MEMFS.node_ops.readlink},stream:{}},chrdev:{node:{getattr:MEMFS.node_ops.getattr,setattr:MEMFS.node_ops.setattr},stream:FS.chrdev_stream_ops}};var node=FS.createNode(parent,name,mode,dev);if(FS.isDir(node.mode)){node.node_ops=MEMFS.ops_table.dir.node;node.stream_ops=MEMFS.ops_table.dir.stream;node.contents={}}else if(FS.isFile(node.mode)){node.node_ops=MEMFS.ops_table.file.node;node.stream_ops=MEMFS.ops_table.file.stream;node.usedBytes=0;node.contents=null}else if(FS.isLink(node.mode)){node.node_ops=MEMFS.ops_table.link.node;node.stream_ops=MEMFS.ops_table.link.stream}else if(FS.isChrdev(node.mode)){node.node_ops=MEMFS.ops_table.chrdev.node;node.stream_ops=MEMFS.ops_table.chrdev.stream}node.atime=node.mtime=node.ctime=Date.now();if(parent){parent.contents[name]=node;parent.atime=parent.mtime=parent.ctime=node.atime}return node},getFileDataAsTypedArray(node){if(!node.contents)return new Uint8Array(0);if(node.contents.subarray)return node.contents.subarray(0,node.usedBytes);return new Uint8Array(node.contents)},expandFileStorage(node,newCapacity){var prevCapacity=node.contents?node.contents.length:0;if(prevCapacity>=newCapacity)return;var CAPACITY_DOUBLING_MAX=1024*1024;newCapacity=Math.max(newCapacity,prevCapacity*(prevCapacity>>0);if(prevCapacity!=0)newCapacity=Math.max(newCapacity,256);var oldContents=node.contents;node.contents=new Uint8Array(newCapacity);if(node.usedBytes>0)node.contents.set(oldContents.subarray(0,node.usedBytes),0)},resizeFileStorage(node,newSize){if(node.usedBytes==newSize)return;if(newSize==0){node.contents=null;node.usedBytes=0}else{var oldContents=node.contents;node.contents=new Uint8Array(newSize);if(oldContents){node.contents.set(oldContents.subarray(0,Math.min(newSize,node.usedBytes)))}node.usedBytes=newSize}},node_ops:{getattr(node){var attr={};attr.dev=FS.isChrdev(node.mode)?node.id:1;attr.ino=node.id;attr.mode=node.mode;attr.nlink=1;attr.uid=0;attr.gid=0;attr.rdev=node.rdev;if(FS.isDir(node.mode)){attr.size=4096}else if(FS.isFile(node.mode)){attr.size=node.usedBytes}else if(FS.isLink(node.mode)){attr.size=node.link.length}else{attr.size=0}attr.atime=new Date(node.atime);attr.mtime=new Date(node.mtime);attr.ctime=new Date(node.ctime);attr.blksize=4096;attr.blocks=Math.ceil(attr.size/attr.blksize);return attr},setattr(node,attr){for(const key of["mode","atime","mtime","ctime"]){if(attr[key]!=null){node[key]=attr[key]}}if(attr.size!==undefined){MEMFS.resizeFileStorage(node,attr.size)}},lookup(parent,name){throw MEMFS.doesNotExistError},mknod(parent,name,mode,dev){return MEMFS.createNode(parent,name,mode,dev)},rename(old_node,new_dir,new_name){var new_node;try{new_node=FS.lookupNode(new_dir,new_name)}catch(e){}if(new_node){if(FS.isDir(old_node.mode)){for(var i in new_node.contents){throw new FS.ErrnoError(55)}}FS.hashRemoveNode(new_node)}delete old_node.parent.contents[old_node.name];new_dir.contents[new_name]=old_node;old_node.name=new_name;new_dir.ctime=new_dir.mtime=old_node.parent.ctime=old_node.parent.mtime=Date.now()},unlink(parent,name){delete parent.contents[name];parent.ctime=parent.mtime=Date.now()},rmdir(parent,name){var node=FS.lookupNode(parent,name);for(var i in node.contents){throw new FS.ErrnoError(55)}delete parent.contents[name];parent.ctime=parent.mtime=Date.now()},readdir(node){return[".","..",...Object.keys(node.contents)]},symlink(parent,newname,oldpath){var node=MEMFS.createNode(parent,newname,511|40960,0);node.link=oldpath;return node},readlink(node){if(!FS.isLink(node.mode)){throw new FS.ErrnoError(28)}return node.link}},stream_ops:{read(stream,buffer,offset,length,position){var contents=stream.node.contents;if(position>=stream.node.usedBytes)return 0;var size=Math.min(stream.node.usedBytes-position,length);if(size>8&&contents.subarray){buffer.set(contents.subarray(position,position+size),offset)}else{for(var i=0;i0||position+length{var arrayBuffer=await readAsync(url);return new Uint8Array(arrayBuffer)};var FS_createDataFile=(parent,name,fileData,canRead,canWrite,canOwn)=>{FS.createDataFile(parent,name,fileData,canRead,canWrite,canOwn)};var preloadPlugins=Module["preloadPlugins"]||[];var FS_handledByPreloadPlugin=(byteArray,fullname,finish,onerror)=>{if(typeof Browser!="undefined")Browser.init();var handled=false;preloadPlugins.forEach(plugin=>{if(handled)return;if(plugin["canHandle"](fullname)){plugin["handle"](byteArray,fullname,finish,onerror);handled=true}});return handled};var FS_createPreloadedFile=(parent,name,url,canRead,canWrite,onload,onerror,dontCreateFile,canOwn,preFinish)=>{var fullname=name?PATH_FS.resolve(PATH.join2(parent,name)):parent;var dep=getUniqueRunDependency(`cp ${fullname}`);function processData(byteArray){function finish(byteArray){preFinish?.();if(!dontCreateFile){FS_createDataFile(parent,name,byteArray,canRead,canWrite,canOwn)}onload?.();removeRunDependency(dep)}if(FS_handledByPreloadPlugin(byteArray,fullname,finish,()=>{onerror?.();removeRunDependency(dep)})){return}finish(byteArray)}addRunDependency(dep);if(typeof url=="string"){asyncLoad(url).then(processData,onerror)}else{processData(url)}};var FS_modeStringToFlags=str=>{var flagModes={r:0,"r+":2,w:512|64|1,"w+":512|64|2,a:1024|64|1,"a+":1024|64|2};var flags=flagModes[str];if(typeof flags=="undefined"){throw new Error(`Unknown file open mode: ${str}`)}return flags};var FS_getMode=(canRead,canWrite)=>{var mode=0;if(canRead)mode|=292|73;if(canWrite)mode|=146;return mode};var FS={root:null,mounts:[],devices:{},streams:[],nextInode:1,nameTable:null,currentPath:"/",initialized:false,ignorePermissions:true,filesystems:null,syncFSRequests:0,readFiles:{},ErrnoError:class{name="ErrnoError";constructor(errno){this.errno=errno}},FSStream:class{shared={};get object(){return this.node}set object(val){this.node=val}get isRead(){return(this.flags&2097155)!==1}get isWrite(){return(this.flags&2097155)!==0}get isAppend(){return this.flags&1024}get flags(){return this.shared.flags}set flags(val){this.shared.flags=val}get position(){return this.shared.position}set position(val){this.shared.position=val}},FSNode:class{node_ops={};stream_ops={};readMode=292|73;writeMode=146;mounted=null;constructor(parent,name,mode,rdev){if(!parent){parent=this}this.parent=parent;this.mount=parent.mount;this.id=FS.nextInode++;this.name=name;this.mode=mode;this.rdev=rdev;this.atime=this.mtime=this.ctime=Date.now()}get read(){return(this.mode&this.readMode)===this.readMode}set read(val){val?this.mode|=this.readMode:this.mode&=~this.readMode}get write(){return(this.mode&this.writeMode)===this.writeMode}set write(val){val?this.mode|=this.writeMode:this.mode&=~this.writeMode}get isFolder(){return FS.isDir(this.mode)}get isDevice(){return FS.isChrdev(this.mode)}},lookupPath(path,opts={}){if(!path){throw new FS.ErrnoError(44)}opts.follow_mount??=true;if(!PATH.isAbs(path)){path=FS.cwd()+"/"+path}linkloop:for(var nlinks=0;nlinks<40;nlinks++){var parts=path.split("/").filter(p=>!!p);var current=FS.root;var current_path="/";for(var i=0;i>>0)%FS.nameTable.length},hashAddNode(node){var hash=FS.hashName(node.parent.id,node.name);node.name_next=FS.nameTable[hash];FS.nameTable[hash]=node},hashRemoveNode(node){var hash=FS.hashName(node.parent.id,node.name);if(FS.nameTable[hash]===node){FS.nameTable[hash]=node.name_next}else{var current=FS.nameTable[hash];while(current){if(current.name_next===node){current.name_next=node.name_next;break}current=current.name_next}}},lookupNode(parent,name){var errCode=FS.mayLookup(parent);if(errCode){throw new FS.ErrnoError(errCode)}var hash=FS.hashName(parent.id,name);for(var node=FS.nameTable[hash];node;node=node.name_next){var nodeName=node.name;if(node.parent.id===parent.id&&nodeName===name){return node}}return FS.lookup(parent,name)},createNode(parent,name,mode,rdev){var node=new FS.FSNode(parent,name,mode,rdev);FS.hashAddNode(node);return node},destroyNode(node){FS.hashRemoveNode(node)},isRoot(node){return node===node.parent},isMountpoint(node){return!!node.mounted},isFile(mode){return(mode&61440)===32768},isDir(mode){return(mode&61440)===16384},isLink(mode){return(mode&61440)===40960},isChrdev(mode){return(mode&61440)===8192},isBlkdev(mode){return(mode&61440)===24576},isFIFO(mode){return(mode&61440)===4096},isSocket(mode){return(mode&49152)===49152},flagsToPermissionString(flag){var perms=["r","w","rw"][flag&3];if(flag&512){perms+="w"}return perms},nodePermissions(node,perms){if(FS.ignorePermissions){return 0}if(perms.includes("r")&&!(node.mode&292)){return 2}else if(perms.includes("w")&&!(node.mode&146)){return 2}else if(perms.includes("x")&&!(node.mode&73)){return 2}return 0},mayLookup(dir){if(!FS.isDir(dir.mode))return 54;var errCode=FS.nodePermissions(dir,"x");if(errCode)return errCode;if(!dir.node_ops.lookup)return 2;return 0},mayCreate(dir,name){if(!FS.isDir(dir.mode)){return 54}try{var node=FS.lookupNode(dir,name);return 20}catch(e){}return FS.nodePermissions(dir,"wx")},mayDelete(dir,name,isdir){var node;try{node=FS.lookupNode(dir,name)}catch(e){return e.errno}var errCode=FS.nodePermissions(dir,"wx");if(errCode){return errCode}if(isdir){if(!FS.isDir(node.mode)){return 54}if(FS.isRoot(node)||FS.getPath(node)===FS.cwd()){return 10}}else{if(FS.isDir(node.mode)){return 31}}return 0},mayOpen(node,flags){if(!node){return 44}if(FS.isLink(node.mode)){return 32}else if(FS.isDir(node.mode)){if(FS.flagsToPermissionString(flags)!=="r"||flags&(512|64)){return 31}}return FS.nodePermissions(node,FS.flagsToPermissionString(flags))},checkOpExists(op,err){if(!op){throw new FS.ErrnoError(err)}return op},MAX_OPEN_FDS:4096,nextfd(){for(var fd=0;fd<=FS.MAX_OPEN_FDS;fd++){if(!FS.streams[fd]){return fd}}throw new FS.ErrnoError(33)},getStreamChecked(fd){var stream=FS.getStream(fd);if(!stream){throw new FS.ErrnoError(8)}return stream},getStream:fd=>FS.streams[fd],createStream(stream,fd=-1){stream=Object.assign(new FS.FSStream,stream);if(fd==-1){fd=FS.nextfd()}stream.fd=fd;FS.streams[fd]=stream;return stream},closeStream(fd){FS.streams[fd]=null},dupStream(origStream,fd=-1){var stream=FS.createStream(origStream,fd);stream.stream_ops?.dup?.(stream);return stream},doSetAttr(stream,node,attr){var setattr=stream?.stream_ops.setattr;var arg=setattr?stream:node;setattr??=node.node_ops.setattr;FS.checkOpExists(setattr,63);setattr(arg,attr)},chrdev_stream_ops:{open(stream){var device=FS.getDevice(stream.node.rdev);stream.stream_ops=device.stream_ops;stream.stream_ops.open?.(stream)},llseek(){throw new FS.ErrnoError(70)}},major:dev=>dev>>8,minor:dev=>dev&255,makedev:(ma,mi)=>ma<<8|mi,registerDevice(dev,ops){FS.devices[dev]={stream_ops:ops}},getDevice:dev=>FS.devices[dev],getMounts(mount){var mounts=[];var check=[mount];while(check.length){var m=check.pop();mounts.push(m);check.push(...m.mounts)}return mounts},syncfs(populate,callback){if(typeof populate=="function"){callback=populate;populate=false}FS.syncFSRequests++;if(FS.syncFSRequests>1){err(`warning: ${FS.syncFSRequests} FS.syncfs operations in flight at once, probably just doing extra work`)}var mounts=FS.getMounts(FS.root.mount);var completed=0;function doCallback(errCode){FS.syncFSRequests--;return callback(errCode)}function done(errCode){if(errCode){if(!done.errored){done.errored=true;return doCallback(errCode)}return}if(++completed>=mounts.length){doCallback(null)}}mounts.forEach(mount=>{if(!mount.type.syncfs){return done(null)}mount.type.syncfs(mount,populate,done)})},mount(type,opts,mountpoint){var root=mountpoint==="/";var pseudo=!mountpoint;var node;if(root&&FS.root){throw new FS.ErrnoError(10)}else if(!root&&!pseudo){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});mountpoint=lookup.path;node=lookup.node;if(FS.isMountpoint(node)){throw new FS.ErrnoError(10)}if(!FS.isDir(node.mode)){throw new FS.ErrnoError(54)}}var mount={type,opts,mountpoint,mounts:[]};var mountRoot=type.mount(mount);mountRoot.mount=mount;mount.root=mountRoot;if(root){FS.root=mountRoot}else if(node){node.mounted=mount;if(node.mount){node.mount.mounts.push(mount)}}return mountRoot},unmount(mountpoint){var lookup=FS.lookupPath(mountpoint,{follow_mount:false});if(!FS.isMountpoint(lookup.node)){throw new FS.ErrnoError(28)}var node=lookup.node;var mount=node.mounted;var mounts=FS.getMounts(mount);Object.keys(FS.nameTable).forEach(hash=>{var current=FS.nameTable[hash];while(current){var next=current.name_next;if(mounts.includes(current.mount)){FS.destroyNode(current)}current=next}});node.mounted=null;var idx=node.mount.mounts.indexOf(mount);node.mount.mounts.splice(idx,1)},lookup(parent,name){return parent.node_ops.lookup(parent,name)},mknod(path,mode,dev){var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;var name=PATH.basename(path);if(!name){throw new FS.ErrnoError(28)}if(name==="."||name===".."){throw new FS.ErrnoError(20)}var errCode=FS.mayCreate(parent,name);if(errCode){throw new FS.ErrnoError(errCode)}if(!parent.node_ops.mknod){throw new FS.ErrnoError(63)}return parent.node_ops.mknod(parent,name,mode,dev)},statfs(path){return FS.statfsNode(FS.lookupPath(path,{follow:true}).node)},statfsStream(stream){return FS.statfsNode(stream.node)},statfsNode(node){var rtn={bsize:4096,frsize:4096,blocks:1e6,bfree:5e5,bavail:5e5,files:FS.nextInode,ffree:FS.nextInode-1,fsid:42,flags:2,namelen:255};if(node.node_ops.statfs){Object.assign(rtn,node.node_ops.statfs(node.mount.opts.root))}return rtn},create(path,mode=438){mode&=4095;mode|=32768;return FS.mknod(path,mode,0)},mkdir(path,mode=511){mode&=511|512;mode|=16384;return FS.mknod(path,mode,0)},mkdirTree(path,mode){var dirs=path.split("/");var d="";for(var dir of dirs){if(!dir)continue;if(d||PATH.isAbs(path))d+="/";d+=dir;try{FS.mkdir(d,mode)}catch(e){if(e.errno!=20)throw e}}},mkdev(path,mode,dev){if(typeof dev=="undefined"){dev=mode;mode=438}mode|=8192;return FS.mknod(path,mode,dev)},symlink(oldpath,newpath){if(!PATH_FS.resolve(oldpath)){throw new FS.ErrnoError(44)}var lookup=FS.lookupPath(newpath,{parent:true});var parent=lookup.node;if(!parent){throw new FS.ErrnoError(44)}var newname=PATH.basename(newpath);var errCode=FS.mayCreate(parent,newname);if(errCode){throw new FS.ErrnoError(errCode)}if(!parent.node_ops.symlink){throw new FS.ErrnoError(63)}return parent.node_ops.symlink(parent,newname,oldpath)},rename(old_path,new_path){var old_dirname=PATH.dirname(old_path);var new_dirname=PATH.dirname(new_path);var old_name=PATH.basename(old_path);var new_name=PATH.basename(new_path);var lookup,old_dir,new_dir;lookup=FS.lookupPath(old_path,{parent:true});old_dir=lookup.node;lookup=FS.lookupPath(new_path,{parent:true});new_dir=lookup.node;if(!old_dir||!new_dir)throw new FS.ErrnoError(44);if(old_dir.mount!==new_dir.mount){throw new FS.ErrnoError(75)}var old_node=FS.lookupNode(old_dir,old_name);var relative=PATH_FS.relative(old_path,new_dirname);if(relative.charAt(0)!=="."){throw new FS.ErrnoError(28)}relative=PATH_FS.relative(new_path,old_dirname);if(relative.charAt(0)!=="."){throw new FS.ErrnoError(55)}var new_node;try{new_node=FS.lookupNode(new_dir,new_name)}catch(e){}if(old_node===new_node){return}var isdir=FS.isDir(old_node.mode);var errCode=FS.mayDelete(old_dir,old_name,isdir);if(errCode){throw new FS.ErrnoError(errCode)}errCode=new_node?FS.mayDelete(new_dir,new_name,isdir):FS.mayCreate(new_dir,new_name);if(errCode){throw new FS.ErrnoError(errCode)}if(!old_dir.node_ops.rename){throw new FS.ErrnoError(63)}if(FS.isMountpoint(old_node)||new_node&&FS.isMountpoint(new_node)){throw new FS.ErrnoError(10)}if(new_dir!==old_dir){errCode=FS.nodePermissions(old_dir,"w");if(errCode){throw new FS.ErrnoError(errCode)}}FS.hashRemoveNode(old_node);try{old_dir.node_ops.rename(old_node,new_dir,new_name);old_node.parent=new_dir}catch(e){throw e}finally{FS.hashAddNode(old_node)}},rmdir(path){var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;var name=PATH.basename(path);var node=FS.lookupNode(parent,name);var errCode=FS.mayDelete(parent,name,true);if(errCode){throw new FS.ErrnoError(errCode)}if(!parent.node_ops.rmdir){throw new FS.ErrnoError(63)}if(FS.isMountpoint(node)){throw new FS.ErrnoError(10)}parent.node_ops.rmdir(parent,name);FS.destroyNode(node)},readdir(path){var lookup=FS.lookupPath(path,{follow:true});var node=lookup.node;var readdir=FS.checkOpExists(node.node_ops.readdir,54);return readdir(node)},unlink(path){var lookup=FS.lookupPath(path,{parent:true});var parent=lookup.node;if(!parent){throw new FS.ErrnoError(44)}var name=PATH.basename(path);var node=FS.lookupNode(parent,name);var errCode=FS.mayDelete(parent,name,false);if(errCode){throw new FS.ErrnoError(errCode)}if(!parent.node_ops.unlink){throw new FS.ErrnoError(63)}if(FS.isMountpoint(node)){throw new FS.ErrnoError(10)}parent.node_ops.unlink(parent,name);FS.destroyNode(node)},readlink(path){var lookup=FS.lookupPath(path);var link=lookup.node;if(!link){throw new FS.ErrnoError(44)}if(!link.node_ops.readlink){throw new FS.ErrnoError(28)}return link.node_ops.readlink(link)},stat(path,dontFollow){var lookup=FS.lookupPath(path,{follow:!dontFollow});var node=lookup.node;var getattr=FS.checkOpExists(node.node_ops.getattr,63);return getattr(node)},fstat(fd){var stream=FS.getStreamChecked(fd);var node=stream.node;var getattr=stream.stream_ops.getattr;var arg=getattr?stream:node;getattr??=node.node_ops.getattr;FS.checkOpExists(getattr,63);return getattr(arg)},lstat(path){return FS.stat(path,true)},doChmod(stream,node,mode,dontFollow){FS.doSetAttr(stream,node,{mode:mode&4095|node.mode&~4095,ctime:Date.now(),dontFollow})},chmod(path,mode,dontFollow){var node;if(typeof path=="string"){var lookup=FS.lookupPath(path,{follow:!dontFollow});node=lookup.node}else{node=path}FS.doChmod(null,node,mode,dontFollow)},lchmod(path,mode){FS.chmod(path,mode,true)},fchmod(fd,mode){var stream=FS.getStreamChecked(fd);FS.doChmod(stream,stream.node,mode,false)},doChown(stream,node,dontFollow){FS.doSetAttr(stream,node,{timestamp:Date.now(),dontFollow})},chown(path,uid,gid,dontFollow){var node;if(typeof path=="string"){var lookup=FS.lookupPath(path,{follow:!dontFollow});node=lookup.node}else{node=path}FS.doChown(null,node,dontFollow)},lchown(path,uid,gid){FS.chown(path,uid,gid,true)},fchown(fd,uid,gid){var stream=FS.getStreamChecked(fd);FS.doChown(stream,stream.node,false)},doTruncate(stream,node,len){if(FS.isDir(node.mode)){throw new FS.ErrnoError(31)}if(!FS.isFile(node.mode)){throw new FS.ErrnoError(28)}var errCode=FS.nodePermissions(node,"w");if(errCode){throw new FS.ErrnoError(errCode)}FS.doSetAttr(stream,node,{size:len,timestamp:Date.now()})},truncate(path,len){if(len<0){throw new FS.ErrnoError(28)}var node;if(typeof path=="string"){var lookup=FS.lookupPath(path,{follow:true});node=lookup.node}else{node=path}FS.doTruncate(null,node,len)},ftruncate(fd,len){var stream=FS.getStreamChecked(fd);if(len<0||(stream.flags&2097155)===0){throw new FS.ErrnoError(28)}FS.doTruncate(stream,stream.node,len)},utime(path,atime,mtime){var lookup=FS.lookupPath(path,{follow:true});var node=lookup.node;var setattr=FS.checkOpExists(node.node_ops.setattr,63);setattr(node,{atime,mtime})},open(path,flags,mode=438){if(path===""){throw new FS.ErrnoError(44)}flags=typeof flags=="string"?FS_modeStringToFlags(flags):flags;if(flags&64){mode=mode&4095|32768}else{mode=0}var node;var isDirPath;if(typeof path=="object"){node=path}else{isDirPath=path.endsWith("/");var lookup=FS.lookupPath(path,{follow:!(flags&131072),noent_okay:true});node=lookup.node;path=lookup.path}var created=false;if(flags&64){if(node){if(flags&128){throw new FS.ErrnoError(20)}}else if(isDirPath){throw new FS.ErrnoError(31)}else{node=FS.mknod(path,mode|511,0);created=true}}if(!node){throw new FS.ErrnoError(44)}if(FS.isChrdev(node.mode)){flags&=~512}if(flags&65536&&!FS.isDir(node.mode)){throw new FS.ErrnoError(54)}if(!created){var errCode=FS.mayOpen(node,flags);if(errCode){throw new FS.ErrnoError(errCode)}}if(flags&512&&!created){FS.truncate(node,0)}flags&=~(128|512|131072);var stream=FS.createStream({node,path:FS.getPath(node),flags,seekable:true,position:0,stream_ops:node.stream_ops,ungotten:[],error:false});if(stream.stream_ops.open){stream.stream_ops.open(stream)}if(created){FS.chmod(node,mode&511)}if(Module["logReadFiles"]&&!(flags&1)){if(!(path in FS.readFiles)){FS.readFiles[path]=1}}return stream},close(stream){if(FS.isClosed(stream)){throw new FS.ErrnoError(8)}if(stream.getdents)stream.getdents=null;try{if(stream.stream_ops.close){stream.stream_ops.close(stream)}}catch(e){throw e}finally{FS.closeStream(stream.fd)}stream.fd=null},isClosed(stream){return stream.fd===null},llseek(stream,offset,whence){if(FS.isClosed(stream)){throw new FS.ErrnoError(8)}if(!stream.seekable||!stream.stream_ops.llseek){throw new FS.ErrnoError(70)}if(whence!=0&&whence!=1&&whence!=2){throw new FS.ErrnoError(28)}stream.position=stream.stream_ops.llseek(stream,offset,whence);stream.ungotten=[];return stream.position},read(stream,buffer,offset,length,position){if(length<0||position<0){throw new FS.ErrnoError(28)}if(FS.isClosed(stream)){throw new FS.ErrnoError(8)}if((stream.flags&2097155)===1){throw new FS.ErrnoError(8)}if(FS.isDir(stream.node.mode)){throw new FS.ErrnoError(31)}if(!stream.stream_ops.read){throw new FS.ErrnoError(28)}var seeking=typeof position!="undefined";if(!seeking){position=stream.position}else if(!stream.seekable){throw new FS.ErrnoError(70)}var bytesRead=stream.stream_ops.read(stream,buffer,offset,length,position);if(!seeking)stream.position+=bytesRead;return bytesRead},write(stream,buffer,offset,length,position,canOwn){if(length<0||position<0){throw new FS.ErrnoError(28)}if(FS.isClosed(stream)){throw new FS.ErrnoError(8)}if((stream.flags&2097155)===0){throw new FS.ErrnoError(8)}if(FS.isDir(stream.node.mode)){throw new FS.ErrnoError(31)}if(!stream.stream_ops.write){throw new FS.ErrnoError(28)}if(stream.seekable&&stream.flags&1024){FS.llseek(stream,0,2)}var seeking=typeof position!="undefined";if(!seeking){position=stream.position}else if(!stream.seekable){throw new FS.ErrnoError(70)}var bytesWritten=stream.stream_ops.write(stream,buffer,offset,length,position,canOwn);if(!seeking)stream.position+=bytesWritten;return bytesWritten},mmap(stream,length,position,prot,flags){if((prot&2)!==0&&(flags&2)===0&&(stream.flags&2097155)!==2){throw new FS.ErrnoError(2)}if((stream.flags&2097155)===1){throw new FS.ErrnoError(2)}if(!stream.stream_ops.mmap){throw new FS.ErrnoError(43)}if(!length){throw new FS.ErrnoError(28)}return stream.stream_ops.mmap(stream,length,position,prot,flags)},msync(stream,buffer,offset,length,mmapFlags){if(!stream.stream_ops.msync){return 0}return stream.stream_ops.msync(stream,buffer,offset,length,mmapFlags)},ioctl(stream,cmd,arg){if(!stream.stream_ops.ioctl){throw new FS.ErrnoError(59)}return stream.stream_ops.ioctl(stream,cmd,arg)},readFile(path,opts={}){opts.flags=opts.flags||0;opts.encoding=opts.encoding||"binary";if(opts.encoding!=="utf8"&&opts.encoding!=="binary"){throw new Error(`Invalid encoding type "${opts.encoding}"`)}var ret;var stream=FS.open(path,opts.flags);var stat=FS.stat(path);var length=stat.size;var buf=new Uint8Array(length);FS.read(stream,buf,0,length,0);if(opts.encoding==="utf8"){ret=UTF8ArrayToString(buf)}else if(opts.encoding==="binary"){ret=buf}FS.close(stream);return ret},writeFile(path,data,opts={}){opts.flags=opts.flags||577;var stream=FS.open(path,opts.flags,opts.mode);if(typeof data=="string"){var buf=new Uint8Array(lengthBytesUTF8(data)+1);var actualNumBytes=stringToUTF8Array(data,buf,0,buf.length);FS.write(stream,buf,0,actualNumBytes,undefined,opts.canOwn)}else if(ArrayBuffer.isView(data)){FS.write(stream,data,0,data.byteLength,undefined,opts.canOwn)}else{throw new Error("Unsupported data type")}FS.close(stream)},cwd:()=>FS.currentPath,chdir(path){var lookup=FS.lookupPath(path,{follow:true});if(lookup.node===null){throw new FS.ErrnoError(44)}if(!FS.isDir(lookup.node.mode)){throw new FS.ErrnoError(54)}var errCode=FS.nodePermissions(lookup.node,"x");if(errCode){throw new FS.ErrnoError(errCode)}FS.currentPath=lookup.path},createDefaultDirectories(){FS.mkdir("/tmp");FS.mkdir("/home");FS.mkdir("/home/web_user")},createDefaultDevices(){FS.mkdir("/dev");FS.registerDevice(FS.makedev(1,3),{read:()=>0,write:(stream,buffer,offset,length,pos)=>length,llseek:()=>0});FS.mkdev("/dev/null",FS.makedev(1,3));TTY.register(FS.makedev(5,0),TTY.default_tty_ops);TTY.register(FS.makedev(6,0),TTY.default_tty1_ops);FS.mkdev("/dev/tty",FS.makedev(5,0));FS.mkdev("/dev/tty1",FS.makedev(6,0));var randomBuffer=new Uint8Array(1024),randomLeft=0;var randomByte=()=>{if(randomLeft===0){randomFill(randomBuffer);randomLeft=randomBuffer.byteLength}return randomBuffer[--randomLeft]};FS.createDevice("/dev","random",randomByte);FS.createDevice("/dev","urandom",randomByte);FS.mkdir("/dev/shm");FS.mkdir("/dev/shm/tmp")},createSpecialDirectories(){FS.mkdir("/proc");var proc_self=FS.mkdir("/proc/self");FS.mkdir("/proc/self/fd");FS.mount({mount(){var node=FS.createNode(proc_self,"fd",16895,73);node.stream_ops={llseek:MEMFS.stream_ops.llseek};node.node_ops={lookup(parent,name){var fd=+name;var stream=FS.getStreamChecked(fd);var ret={parent:null,mount:{mountpoint:"fake"},node_ops:{readlink:()=>stream.path},id:fd+1};ret.parent=ret;return ret},readdir(){return Array.from(FS.streams.entries()).filter(([k,v])=>v).map(([k,v])=>k.toString())}};return node}},{},"/proc/self/fd")},createStandardStreams(input,output,error){if(input){FS.createDevice("/dev","stdin",input)}else{FS.symlink("/dev/tty","/dev/stdin")}if(output){FS.createDevice("/dev","stdout",null,output)}else{FS.symlink("/dev/tty","/dev/stdout")}if(error){FS.createDevice("/dev","stderr",null,error)}else{FS.symlink("/dev/tty1","/dev/stderr")}var stdin=FS.open("/dev/stdin",0);var stdout=FS.open("/dev/stdout",1);var stderr=FS.open("/dev/stderr",1)},staticInit(){FS.nameTable=new Array(4096);FS.mount(MEMFS,{},"/");FS.createDefaultDirectories();FS.createDefaultDevices();FS.createSpecialDirectories();FS.filesystems={MEMFS}},init(input,output,error){FS.initialized=true;input??=Module["stdin"];output??=Module["stdout"];error??=Module["stderr"];FS.createStandardStreams(input,output,error)},quit(){FS.initialized=false;for(var stream of FS.streams){if(stream){FS.close(stream)}}},findObject(path,dontResolveLastLink){var ret=FS.analyzePath(path,dontResolveLastLink);if(!ret.exists){return null}return ret.object},analyzePath(path,dontResolveLastLink){try{var lookup=FS.lookupPath(path,{follow:!dontResolveLastLink});path=lookup.path}catch(e){}var ret={isRoot:false,exists:false,error:0,name:null,path:null,object:null,parentExists:false,parentPath:null,parentObject:null};try{var lookup=FS.lookupPath(path,{parent:true});ret.parentExists=true;ret.parentPath=lookup.path;ret.parentObject=lookup.node;ret.name=PATH.basename(path);lookup=FS.lookupPath(path,{follow:!dontResolveLastLink});ret.exists=true;ret.path=lookup.path;ret.object=lookup.node;ret.name=lookup.node.name;ret.isRoot=lookup.path==="/"}catch(e){ret.error=e.errno}return ret},createPath(parent,path,canRead,canWrite){parent=typeof parent=="string"?parent:FS.getPath(parent);var parts=path.split("/").reverse();while(parts.length){var part=parts.pop();if(!part)continue;var current=PATH.join2(parent,part);try{FS.mkdir(current)}catch(e){if(e.errno!=20)throw e}parent=current}return current},createFile(parent,name,properties,canRead,canWrite){var path=PATH.join2(typeof parent=="string"?parent:FS.getPath(parent),name);var mode=FS_getMode(canRead,canWrite);return FS.create(path,mode)},createDataFile(parent,name,data,canRead,canWrite,canOwn){var path=name;if(parent){parent=typeof parent=="string"?parent:FS.getPath(parent);path=name?PATH.join2(parent,name):parent}var mode=FS_getMode(canRead,canWrite);var node=FS.create(path,mode);if(data){if(typeof data=="string"){var arr=new Array(data.length);for(var i=0,len=data.length;ithis.length-1||idx<0){return undefined}var chunkOffset=idx%this.chunkSize;var chunkNum=idx/this.chunkSize|0;return this.getter(chunkNum)[chunkOffset]}setDataGetter(getter){this.getter=getter}cacheLength(){var xhr=new XMLHttpRequest;xhr.open("HEAD",url,false);xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);var datalength=Number(xhr.getResponseHeader("Content-length"));var header;var hasByteServing=(header=xhr.getResponseHeader("Accept-Ranges"))&&header==="bytes";var usesGzip=(header=xhr.getResponseHeader("Content-Encoding"))&&header==="gzip";var chunkSize=1024*1024;if(!hasByteServing)chunkSize=datalength;var doXHR=(from,to)=>{if(from>to)throw new Error("invalid range ("+from+", "+to+") or no bytes requested!");if(to>datalength-1)throw new Error("only "+datalength+" bytes available! programmer error!");var xhr=new XMLHttpRequest;xhr.open("GET",url,false);if(datalength!==chunkSize)xhr.setRequestHeader("Range","bytes="+from+"-"+to);xhr.responseType="arraybuffer";if(xhr.overrideMimeType){xhr.overrideMimeType("text/plain; charset=x-user-defined")}xhr.send(null);if(!(xhr.status>=200&&xhr.status<300||xhr.status===304))throw new Error("Couldn't load "+url+". Status: "+xhr.status);if(xhr.response!==undefined){return new Uint8Array(xhr.response||[])}return intArrayFromString(xhr.responseText||"",true)};var lazyArray=this;lazyArray.setDataGetter(chunkNum=>{var start=chunkNum*chunkSize;var end=(chunkNum+1)*chunkSize-1;end=Math.min(end,datalength-1);if(typeof lazyArray.chunks[chunkNum]=="undefined"){lazyArray.chunks[chunkNum]=doXHR(start,end)}if(typeof lazyArray.chunks[chunkNum]=="undefined")throw new Error("doXHR failed!");return lazyArray.chunks[chunkNum]});if(usesGzip||!datalength){chunkSize=datalength=1;datalength=this.getter(0).length;chunkSize=datalength;out("LazyFiles on gzip forces download of the whole file when length is accessed")}this._length=datalength;this._chunkSize=chunkSize;this.lengthKnown=true}get length(){if(!this.lengthKnown){this.cacheLength()}return this._length}get chunkSize(){if(!this.lengthKnown){this.cacheLength()}return this._chunkSize}}if(typeof XMLHttpRequest!="undefined"){if(!ENVIRONMENT_IS_WORKER)throw"Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc";var lazyArray=new LazyUint8Array;var properties={isDevice:false,contents:lazyArray}}else{var properties={isDevice:false,url}}var node=FS.createFile(parent,name,properties,canRead,canWrite);if(properties.contents){node.contents=properties.contents}else if(properties.url){node.contents=null;node.url=properties.url}Object.defineProperties(node,{usedBytes:{get:function(){return this.contents.length}}});var stream_ops={};var keys=Object.keys(node.stream_ops);keys.forEach(key=>{var fn=node.stream_ops[key];stream_ops[key]=(...args)=>{FS.forceLoadFile(node);return fn(...args)}});function writeChunks(stream,buffer,offset,length,position){var contents=stream.node.contents;if(position>=contents.length)return 0;var size=Math.min(contents.length-position,length);if(contents.slice){for(var i=0;i{FS.forceLoadFile(node);return writeChunks(stream,buffer,offset,length,position)};stream_ops.mmap=(stream,length,position,prot,flags)=>{FS.forceLoadFile(node);var ptr=mmapAlloc(length);if(!ptr){throw new FS.ErrnoError(48)}writeChunks(stream,HEAP8,ptr,length,position);return{ptr,allocated:true}};node.stream_ops=stream_ops;return node}};var SYSCALLS={DEFAULT_POLLMASK:5,calculateAt(dirfd,path,allowEmpty){if(PATH.isAbs(path)){return path}var dir;if(dirfd===-100){dir=FS.cwd()}else{var dirstream=SYSCALLS.getStreamFromFD(dirfd);dir=dirstream.path}if(path.length==0){if(!allowEmpty){throw new FS.ErrnoError(44)}return dir}return dir+"/"+path},writeStat(buf,stat){HEAP32[buf>>2]=stat.dev;HEAP32[buf+4>>2]=stat.mode;HEAPU32[buf+8>>2]=stat.nlink;HEAP32[buf+12>>2]=stat.uid;HEAP32[buf+16>>2]=stat.gid;HEAP32[buf+20>>2]=stat.rdev;HEAP64[buf+24>>3]=BigInt(stat.size);HEAP32[buf+32>>2]=4096;HEAP32[buf+36>>2]=stat.blocks;var atime=stat.atime.getTime();var mtime=stat.mtime.getTime();var ctime=stat.ctime.getTime();HEAP64[buf+40>>3]=BigInt(Math.floor(atime/1e3));HEAPU32[buf+48>>2]=atime%1e3*1e3*1e3;HEAP64[buf+56>>3]=BigInt(Math.floor(mtime/1e3));HEAPU32[buf+64>>2]=mtime%1e3*1e3*1e3;HEAP64[buf+72>>3]=BigInt(Math.floor(ctime/1e3));HEAPU32[buf+80>>2]=ctime%1e3*1e3*1e3;HEAP64[buf+88>>3]=BigInt(stat.ino);return 0},writeStatFs(buf,stats){HEAP32[buf+4>>2]=stats.bsize;HEAP32[buf+40>>2]=stats.bsize;HEAP32[buf+8>>2]=stats.blocks;HEAP32[buf+12>>2]=stats.bfree;HEAP32[buf+16>>2]=stats.bavail;HEAP32[buf+20>>2]=stats.files;HEAP32[buf+24>>2]=stats.ffree;HEAP32[buf+28>>2]=stats.fsid;HEAP32[buf+44>>2]=stats.flags;HEAP32[buf+36>>2]=stats.namelen},doMsync(addr,stream,len,flags,offset){if(!FS.isFile(stream.node.mode)){throw new FS.ErrnoError(43)}if(flags&2){return 0}var buffer=HEAPU8.slice(addr,addr+len);FS.msync(stream,buffer,offset,len,flags)},getStreamFromFD(fd){var stream=FS.getStreamChecked(fd);return stream},varargs:undefined,getStr(ptr){var ret=UTF8ToString(ptr);return ret}};function ___syscall_chmod(path,mode){if(ENVIRONMENT_IS_PTHREAD)return proxyToMainThread(3,0,1,path,mode);try{path=SYSCALLS.getStr(path);FS.chmod(path,mode);return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}function ___syscall_fchmod(fd,mode){if(ENVIRONMENT_IS_PTHREAD)return proxyToMainThread(4,0,1,fd,mode);try{FS.fchmod(fd,mode);return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}var syscallGetVarargI=()=>{var ret=HEAP32[+SYSCALLS.varargs>>2];SYSCALLS.varargs+=4;return ret};var syscallGetVarargP=syscallGetVarargI;function ___syscall_fcntl64(fd,cmd,varargs){if(ENVIRONMENT_IS_PTHREAD)return proxyToMainThread(5,0,1,fd,cmd,varargs);SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(fd);switch(cmd){case 0:{var arg=syscallGetVarargI();if(arg<0){return-28}while(FS.streams[arg]){arg++}var newStream;newStream=FS.dupStream(stream,arg);return newStream.fd}case 1:case 2:return 0;case 3:return stream.flags;case 4:{var arg=syscallGetVarargI();stream.flags|=arg;return 0}case 12:{var arg=syscallGetVarargP();var offset=0;HEAP16[arg+offset>>1]=2;return 0}case 13:case 14:return 0}return-28}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}function ___syscall_fstat64(fd,buf){if(ENVIRONMENT_IS_PTHREAD)return proxyToMainThread(6,0,1,fd,buf);try{return SYSCALLS.writeStat(buf,FS.fstat(fd))}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}function ___syscall_ioctl(fd,op,varargs){if(ENVIRONMENT_IS_PTHREAD)return proxyToMainThread(7,0,1,fd,op,varargs);SYSCALLS.varargs=varargs;try{var stream=SYSCALLS.getStreamFromFD(fd);switch(op){case 21509:{if(!stream.tty)return-59;return 0}case 21505:{if(!stream.tty)return-59;if(stream.tty.ops.ioctl_tcgets){var termios=stream.tty.ops.ioctl_tcgets(stream);var argp=syscallGetVarargP();HEAP32[argp>>2]=termios.c_iflag||0;HEAP32[argp+4>>2]=termios.c_oflag||0;HEAP32[argp+8>>2]=termios.c_cflag||0;HEAP32[argp+12>>2]=termios.c_lflag||0;for(var i=0;i<32;i++){HEAP8[argp+i+17]=termios.c_cc[i]||0}return 0}return 0}case 21510:case 21511:case 21512:{if(!stream.tty)return-59;return 0}case 21506:case 21507:case 21508:{if(!stream.tty)return-59;if(stream.tty.ops.ioctl_tcsets){var argp=syscallGetVarargP();var c_iflag=HEAP32[argp>>2];var c_oflag=HEAP32[argp+4>>2];var c_cflag=HEAP32[argp+8>>2];var c_lflag=HEAP32[argp+12>>2];var c_cc=[];for(var i=0;i<32;i++){c_cc.push(HEAP8[argp+i+17])}return stream.tty.ops.ioctl_tcsets(stream.tty,op,{c_iflag,c_oflag,c_cflag,c_lflag,c_cc})}return 0}case 21519:{if(!stream.tty)return-59;var argp=syscallGetVarargP();HEAP32[argp>>2]=0;return 0}case 21520:{if(!stream.tty)return-59;return-28}case 21531:{var argp=syscallGetVarargP();return FS.ioctl(stream,op,argp)}case 21523:{if(!stream.tty)return-59;if(stream.tty.ops.ioctl_tiocgwinsz){var winsize=stream.tty.ops.ioctl_tiocgwinsz(stream.tty);var argp=syscallGetVarargP();HEAP16[argp>>1]=winsize[0];HEAP16[argp+2>>1]=winsize[1]}return 0}case 21524:{if(!stream.tty)return-59;return 0}case 21515:{if(!stream.tty)return-59;return 0}default:return-28}}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}function ___syscall_lstat64(path,buf){if(ENVIRONMENT_IS_PTHREAD)return proxyToMainThread(8,0,1,path,buf);try{path=SYSCALLS.getStr(path);return SYSCALLS.writeStat(buf,FS.lstat(path))}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}function ___syscall_newfstatat(dirfd,path,buf,flags){if(ENVIRONMENT_IS_PTHREAD)return proxyToMainThread(9,0,1,dirfd,path,buf,flags);try{path=SYSCALLS.getStr(path);var nofollow=flags&256;var allowEmpty=flags&4096;flags=flags&~6400;path=SYSCALLS.calculateAt(dirfd,path,allowEmpty);return SYSCALLS.writeStat(buf,nofollow?FS.lstat(path):FS.stat(path))}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}function ___syscall_openat(dirfd,path,flags,varargs){if(ENVIRONMENT_IS_PTHREAD)return proxyToMainThread(10,0,1,dirfd,path,flags,varargs);SYSCALLS.varargs=varargs;try{path=SYSCALLS.getStr(path);path=SYSCALLS.calculateAt(dirfd,path);var mode=varargs?syscallGetVarargI():0;return FS.open(path,flags,mode).fd}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}function ___syscall_renameat(olddirfd,oldpath,newdirfd,newpath){if(ENVIRONMENT_IS_PTHREAD)return proxyToMainThread(11,0,1,olddirfd,oldpath,newdirfd,newpath);try{oldpath=SYSCALLS.getStr(oldpath);newpath=SYSCALLS.getStr(newpath);oldpath=SYSCALLS.calculateAt(olddirfd,oldpath);newpath=SYSCALLS.calculateAt(newdirfd,newpath);FS.rename(oldpath,newpath);return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}function ___syscall_rmdir(path){if(ENVIRONMENT_IS_PTHREAD)return proxyToMainThread(12,0,1,path);try{path=SYSCALLS.getStr(path);FS.rmdir(path);return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}function ___syscall_stat64(path,buf){if(ENVIRONMENT_IS_PTHREAD)return proxyToMainThread(13,0,1,path,buf);try{path=SYSCALLS.getStr(path);return SYSCALLS.writeStat(buf,FS.stat(path))}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}function ___syscall_unlinkat(dirfd,path,flags){if(ENVIRONMENT_IS_PTHREAD)return proxyToMainThread(14,0,1,dirfd,path,flags);try{path=SYSCALLS.getStr(path);path=SYSCALLS.calculateAt(dirfd,path);if(flags===0){FS.unlink(path)}else if(flags===512){FS.rmdir(path)}else{abort("Invalid flags passed to unlinkat")}return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return-e.errno}}var __abort_js=()=>abort("");var __emscripten_init_main_thread_js=tb=>{__emscripten_thread_init(tb,!ENVIRONMENT_IS_WORKER,1,!ENVIRONMENT_IS_WEB,65536,false);PThread.threadInitTLS()};var handleException=e=>{if(e instanceof ExitStatus||e=="unwind"){return EXITSTATUS}quit_(1,e)};var maybeExit=()=>{if(!keepRuntimeAlive()){try{if(ENVIRONMENT_IS_PTHREAD)__emscripten_thread_exit(EXITSTATUS);else _exit(EXITSTATUS)}catch(e){handleException(e)}}};var callUserCallback=func=>{if(ABORT){return}try{func();maybeExit()}catch(e){handleException(e)}};var __emscripten_thread_mailbox_await=pthread_ptr=>{if(typeof Atomics.waitAsync==="function"){var wait=Atomics.waitAsync(HEAP32,pthread_ptr>>2,pthread_ptr);wait.value.then(checkMailbox);var waitingAsync=pthread_ptr+128;Atomics.store(HEAP32,waitingAsync>>2,1)}};var checkMailbox=()=>{var pthread_ptr=_pthread_self();if(pthread_ptr){__emscripten_thread_mailbox_await(pthread_ptr);callUserCallback(__emscripten_check_mailbox)}};var __emscripten_notify_mailbox_postmessage=(targetThread,currThreadId)=>{if(targetThread==currThreadId){setTimeout(checkMailbox)}else if(ENVIRONMENT_IS_PTHREAD){postMessage({targetThread,cmd:"checkMailbox"})}else{var worker=PThread.pthreads[targetThread];if(!worker){return}worker.postMessage({cmd:"checkMailbox"})}};var proxiedJSCallArgs=[];var __emscripten_receive_on_main_thread_js=(funcIndex,emAsmAddr,callingThread,numCallArgs,args)=>{numCallArgs/=2;proxiedJSCallArgs.length=numCallArgs;var b=args>>3;for(var i=0;i{noExitRuntime=false;runtimeKeepaliveCounter=0};var __emscripten_thread_cleanup=thread=>{if(!ENVIRONMENT_IS_PTHREAD)cleanupThread(thread);else postMessage({cmd:"cleanupThread",thread})};var __emscripten_thread_set_strongref=thread=>{if(ENVIRONMENT_IS_NODE){PThread.pthreads[thread].ref()}};var isLeapYear=year=>year%4===0&&(year%100!==0||year%400===0);var MONTH_DAYS_LEAP_CUMULATIVE=[0,31,60,91,121,152,182,213,244,274,305,335];var MONTH_DAYS_REGULAR_CUMULATIVE=[0,31,59,90,120,151,181,212,243,273,304,334];var ydayFromDate=date=>{var leap=isLeapYear(date.getFullYear());var monthDaysCumulative=leap?MONTH_DAYS_LEAP_CUMULATIVE:MONTH_DAYS_REGULAR_CUMULATIVE;var yday=monthDaysCumulative[date.getMonth()]+date.getDate()-1;return yday};var INT53_MAX=9007199254740992;var INT53_MIN=-9007199254740992;var bigintToI53Checked=num=>numINT53_MAX?NaN:Number(num);function __localtime_js(time,tmPtr){time=bigintToI53Checked(time);var date=new Date(time*1e3);HEAP32[tmPtr>>2]=date.getSeconds();HEAP32[tmPtr+4>>2]=date.getMinutes();HEAP32[tmPtr+8>>2]=date.getHours();HEAP32[tmPtr+12>>2]=date.getDate();HEAP32[tmPtr+16>>2]=date.getMonth();HEAP32[tmPtr+20>>2]=date.getFullYear()-1900;HEAP32[tmPtr+24>>2]=date.getDay();var yday=ydayFromDate(date)|0;HEAP32[tmPtr+28>>2]=yday;HEAP32[tmPtr+36>>2]=-(date.getTimezoneOffset()*60);var start=new Date(date.getFullYear(),0,1);var summerOffset=new Date(date.getFullYear(),6,1).getTimezoneOffset();var winterOffset=start.getTimezoneOffset();var dst=(summerOffset!=winterOffset&&date.getTimezoneOffset()==Math.min(winterOffset,summerOffset))|0;HEAP32[tmPtr+32>>2]=dst}var __mktime_js=function(tmPtr){var ret=(()=>{var date=new Date(HEAP32[tmPtr+20>>2]+1900,HEAP32[tmPtr+16>>2],HEAP32[tmPtr+12>>2],HEAP32[tmPtr+8>>2],HEAP32[tmPtr+4>>2],HEAP32[tmPtr>>2],0);var dst=HEAP32[tmPtr+32>>2];var guessedOffset=date.getTimezoneOffset();var start=new Date(date.getFullYear(),0,1);var summerOffset=new Date(date.getFullYear(),6,1).getTimezoneOffset();var winterOffset=start.getTimezoneOffset();var dstOffset=Math.min(winterOffset,summerOffset);if(dst<0){HEAP32[tmPtr+32>>2]=Number(summerOffset!=winterOffset&&dstOffset==guessedOffset)}else if(dst>0!=(dstOffset==guessedOffset)){var nonDstOffset=Math.max(winterOffset,summerOffset);var trueOffset=dst>0?dstOffset:nonDstOffset;date.setTime(date.getTime()+(trueOffset-guessedOffset)*6e4)}HEAP32[tmPtr+24>>2]=date.getDay();var yday=ydayFromDate(date)|0;HEAP32[tmPtr+28>>2]=yday;HEAP32[tmPtr>>2]=date.getSeconds();HEAP32[tmPtr+4>>2]=date.getMinutes();HEAP32[tmPtr+8>>2]=date.getHours();HEAP32[tmPtr+12>>2]=date.getDate();HEAP32[tmPtr+16>>2]=date.getMonth();HEAP32[tmPtr+20>>2]=date.getYear();var timeMs=date.getTime();if(isNaN(timeMs)){return-1}return timeMs/1e3})();return BigInt(ret)};var stringToUTF8=(str,outPtr,maxBytesToWrite)=>stringToUTF8Array(str,HEAPU8,outPtr,maxBytesToWrite);var __tzset_js=(timezone,daylight,std_name,dst_name)=>{var currentYear=(new Date).getFullYear();var winter=new Date(currentYear,0,1);var summer=new Date(currentYear,6,1);var winterOffset=winter.getTimezoneOffset();var summerOffset=summer.getTimezoneOffset();var stdTimezoneOffset=Math.max(winterOffset,summerOffset);HEAPU32[timezone>>2]=stdTimezoneOffset*60;HEAP32[daylight>>2]=Number(winterOffset!=summerOffset);var extractZone=timezoneOffset=>{var sign=timezoneOffset>=0?"-":"+";var absOffset=Math.abs(timezoneOffset);var hours=String(Math.floor(absOffset/60)).padStart(2,"0");var minutes=String(absOffset%60).padStart(2,"0");return`UTC${sign}${hours}${minutes}`};var winterName=extractZone(winterOffset);var summerName=extractZone(summerOffset);if(summerOffsetperformance.timeOrigin+performance.now();var _emscripten_date_now=()=>Date.now();var nowIsMonotonic=1;var checkWasiClock=clock_id=>clock_id>=0&&clock_id<=3;function _clock_time_get(clk_id,ignored_precision,ptime){ignored_precision=bigintToI53Checked(ignored_precision);if(!checkWasiClock(clk_id)){return 28}var now;if(clk_id===0){now=_emscripten_date_now()}else if(nowIsMonotonic){now=_emscripten_get_now()}else{return 52}var nsec=Math.round(now*1e3*1e3);HEAP64[ptime>>3]=BigInt(nsec);return 0}var runtimeKeepalivePush=()=>{runtimeKeepaliveCounter+=1};var runtimeKeepalivePop=()=>{runtimeKeepaliveCounter-=1};var safeSetTimeout=(func,timeout)=>{runtimeKeepalivePush();return setTimeout(()=>{runtimeKeepalivePop();callUserCallback(func)},timeout)};var warnOnce=text=>{warnOnce.shown||={};if(!warnOnce.shown[text]){warnOnce.shown[text]=1;if(ENVIRONMENT_IS_NODE)text="warning: "+text;err(text)}};var Browser={useWebGL:false,isFullscreen:false,pointerLock:false,moduleContextCreatedCallbacks:[],workers:[],preloadedImages:{},preloadedAudios:{},getCanvas:()=>Module["canvas"],init(){if(Browser.initted)return;Browser.initted=true;var imagePlugin={};imagePlugin["canHandle"]=function imagePlugin_canHandle(name){return!Module["noImageDecoding"]&&/\.(jpg|jpeg|png|bmp|webp)$/i.test(name)};imagePlugin["handle"]=function imagePlugin_handle(byteArray,name,onload,onerror){var b=new Blob([byteArray],{type:Browser.getMimetype(name)});if(b.size!==byteArray.length){b=new Blob([new Uint8Array(byteArray).buffer],{type:Browser.getMimetype(name)})}var url=URL.createObjectURL(b);var img=new Image;img.onload=()=>{var canvas=document.createElement("canvas");canvas.width=img.width;canvas.height=img.height;var ctx=canvas.getContext("2d");ctx.drawImage(img,0,0);Browser.preloadedImages[name]=canvas;URL.revokeObjectURL(url);onload?.(byteArray)};img.onerror=event=>{err(`Image ${url} could not be decoded`);onerror?.()};img.src=url};preloadPlugins.push(imagePlugin);var audioPlugin={};audioPlugin["canHandle"]=function audioPlugin_canHandle(name){return!Module["noAudioDecoding"]&&name.slice(-4)in{".ogg":1,".wav":1,".mp3":1}};audioPlugin["handle"]=function audioPlugin_handle(byteArray,name,onload,onerror){var done=false;function finish(audio){if(done)return;done=true;Browser.preloadedAudios[name]=audio;onload?.(byteArray)}var b=new Blob([byteArray],{type:Browser.getMimetype(name)});var url=URL.createObjectURL(b);var audio=new Audio;audio.addEventListener("canplaythrough",()=>finish(audio),false);audio.onerror=function audio_onerror(event){if(done)return;err(`warning: browser could not fully decode audio ${name}, trying slower base64 approach`);function encode64(data){var BASE="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";var PAD="=";var ret="";var leftchar=0;var leftbits=0;for(var i=0;i=6){var curr=leftchar>>leftbits-6&63;leftbits-=6;ret+=BASE[curr]}}if(leftbits==2){ret+=BASE[(leftchar&3)<<4];ret+=PAD+PAD}else if(leftbits==4){ret+=BASE[(leftchar&15)<<2];ret+=PAD}return ret}audio.src="data:audio/x-"+name.slice(-3)+";base64,"+encode64(byteArray);finish(audio)};audio.src=url;safeSetTimeout(()=>{finish(audio)},1e4)};preloadPlugins.push(audioPlugin);function pointerLockChange(){var canvas=Browser.getCanvas();Browser.pointerLock=document["pointerLockElement"]===canvas||document["mozPointerLockElement"]===canvas||document["webkitPointerLockElement"]===canvas||document["msPointerLockElement"]===canvas}var canvas=Browser.getCanvas();if(canvas){canvas.requestPointerLock=canvas["requestPointerLock"]||canvas["mozRequestPointerLock"]||canvas["webkitRequestPointerLock"]||canvas["msRequestPointerLock"]||(()=>{});canvas.exitPointerLock=document["exitPointerLock"]||document["mozExitPointerLock"]||document["webkitExitPointerLock"]||document["msExitPointerLock"]||(()=>{});canvas.exitPointerLock=canvas.exitPointerLock.bind(document);document.addEventListener("pointerlockchange",pointerLockChange,false);document.addEventListener("mozpointerlockchange",pointerLockChange,false);document.addEventListener("webkitpointerlockchange",pointerLockChange,false);document.addEventListener("mspointerlockchange",pointerLockChange,false);if(Module["elementPointerLock"]){canvas.addEventListener("click",ev=>{if(!Browser.pointerLock&&Browser.getCanvas().requestPointerLock){Browser.getCanvas().requestPointerLock();ev.preventDefault()}},false)}}},createContext(canvas,useWebGL,setInModule,webGLContextAttributes){if(useWebGL&&Module["ctx"]&&canvas==Browser.getCanvas())return Module["ctx"];var ctx;var contextHandle;if(useWebGL){var contextAttributes={antialias:false,alpha:false,majorVersion:1};if(webGLContextAttributes){for(var attribute in webGLContextAttributes){contextAttributes[attribute]=webGLContextAttributes[attribute]}}if(typeof GL!="undefined"){contextHandle=GL.createContext(canvas,contextAttributes);if(contextHandle){ctx=GL.getContext(contextHandle).GLctx}}}else{ctx=canvas.getContext("2d")}if(!ctx)return null;if(setInModule){Module["ctx"]=ctx;if(useWebGL)GL.makeContextCurrent(contextHandle);Browser.useWebGL=useWebGL;Browser.moduleContextCreatedCallbacks.forEach(callback=>callback());Browser.init()}return ctx},fullscreenHandlersInstalled:false,lockPointer:undefined,resizeCanvas:undefined,requestFullscreen(lockPointer,resizeCanvas){Browser.lockPointer=lockPointer;Browser.resizeCanvas=resizeCanvas;if(typeof Browser.lockPointer=="undefined")Browser.lockPointer=true;if(typeof Browser.resizeCanvas=="undefined")Browser.resizeCanvas=false;var canvas=Browser.getCanvas();function fullscreenChange(){Browser.isFullscreen=false;var canvasContainer=canvas.parentNode;if((document["fullscreenElement"]||document["mozFullScreenElement"]||document["msFullscreenElement"]||document["webkitFullscreenElement"]||document["webkitCurrentFullScreenElement"])===canvasContainer){canvas.exitFullscreen=Browser.exitFullscreen;if(Browser.lockPointer)canvas.requestPointerLock();Browser.isFullscreen=true;if(Browser.resizeCanvas){Browser.setFullscreenCanvasSize()}else{Browser.updateCanvasDimensions(canvas)}}else{canvasContainer.parentNode.insertBefore(canvas,canvasContainer);canvasContainer.parentNode.removeChild(canvasContainer);if(Browser.resizeCanvas){Browser.setWindowedCanvasSize()}else{Browser.updateCanvasDimensions(canvas)}}Module["onFullScreen"]?.(Browser.isFullscreen);Module["onFullscreen"]?.(Browser.isFullscreen)}if(!Browser.fullscreenHandlersInstalled){Browser.fullscreenHandlersInstalled=true;document.addEventListener("fullscreenchange",fullscreenChange,false);document.addEventListener("mozfullscreenchange",fullscreenChange,false);document.addEventListener("webkitfullscreenchange",fullscreenChange,false);document.addEventListener("MSFullscreenChange",fullscreenChange,false)}var canvasContainer=document.createElement("div");canvas.parentNode.insertBefore(canvasContainer,canvas);canvasContainer.appendChild(canvas);canvasContainer.requestFullscreen=canvasContainer["requestFullscreen"]||canvasContainer["mozRequestFullScreen"]||canvasContainer["msRequestFullscreen"]||(canvasContainer["webkitRequestFullscreen"]?()=>canvasContainer["webkitRequestFullscreen"](Element["ALLOW_KEYBOARD_INPUT"]):null)||(canvasContainer["webkitRequestFullScreen"]?()=>canvasContainer["webkitRequestFullScreen"](Element["ALLOW_KEYBOARD_INPUT"]):null);canvasContainer.requestFullscreen()},exitFullscreen(){if(!Browser.isFullscreen){return false}var CFS=document["exitFullscreen"]||document["cancelFullScreen"]||document["mozCancelFullScreen"]||document["msExitFullscreen"]||document["webkitCancelFullScreen"]||(()=>{});CFS.apply(document,[]);return true},safeSetTimeout(func,timeout){return safeSetTimeout(func,timeout)},getMimetype(name){return{jpg:"image/jpeg",jpeg:"image/jpeg",png:"image/png",bmp:"image/bmp",ogg:"audio/ogg",wav:"audio/wav",mp3:"audio/mpeg"}[name.slice(name.lastIndexOf(".")+1)]},getUserMedia(func){window.getUserMedia||=navigator["getUserMedia"]||navigator["mozGetUserMedia"];window.getUserMedia(func)},getMovementX(event){return event["movementX"]||event["mozMovementX"]||event["webkitMovementX"]||0},getMovementY(event){return event["movementY"]||event["mozMovementY"]||event["webkitMovementY"]||0},getMouseWheelDelta(event){var delta=0;switch(event.type){case"DOMMouseScroll":delta=event.detail/3;break;case"mousewheel":delta=event.wheelDelta/120;break;case"wheel":delta=event.deltaY;switch(event.deltaMode){case 0:delta/=100;break;case 1:delta/=3;break;case 2:delta*=80;break;default:throw"unrecognized mouse wheel delta mode: "+event.deltaMode}break;default:throw"unrecognized mouse wheel event: "+event.type}return delta},mouseX:0,mouseY:0,mouseMovementX:0,mouseMovementY:0,touches:{},lastTouches:{},calculateMouseCoords(pageX,pageY){var canvas=Browser.getCanvas();var rect=canvas.getBoundingClientRect();var scrollX=typeof window.scrollX!="undefined"?window.scrollX:window.pageXOffset;var scrollY=typeof window.scrollY!="undefined"?window.scrollY:window.pageYOffset;var adjustedX=pageX-(scrollX+rect.left);var adjustedY=pageY-(scrollY+rect.top);adjustedX=adjustedX*(canvas.width/rect.width);adjustedY=adjustedY*(canvas.height/rect.height);return{x:adjustedX,y:adjustedY}},setMouseCoords(pageX,pageY){const{x,y}=Browser.calculateMouseCoords(pageX,pageY);Browser.mouseMovementX=x-Browser.mouseX;Browser.mouseMovementY=y-Browser.mouseY;Browser.mouseX=x;Browser.mouseY=y},calculateMouseEvent(event){if(Browser.pointerLock){if(event.type!="mousemove"&&"mozMovementX"in event){Browser.mouseMovementX=Browser.mouseMovementY=0}else{Browser.mouseMovementX=Browser.getMovementX(event);Browser.mouseMovementY=Browser.getMovementY(event)}Browser.mouseX+=Browser.mouseMovementX;Browser.mouseY+=Browser.mouseMovementY}else{if(event.type==="touchstart"||event.type==="touchend"||event.type==="touchmove"){var touch=event.touch;if(touch===undefined){return}var coords=Browser.calculateMouseCoords(touch.pageX,touch.pageY);if(event.type==="touchstart"){Browser.lastTouches[touch.identifier]=coords;Browser.touches[touch.identifier]=coords}else if(event.type==="touchend"||event.type==="touchmove"){var last=Browser.touches[touch.identifier];last||=coords;Browser.lastTouches[touch.identifier]=last;Browser.touches[touch.identifier]=coords}return}Browser.setMouseCoords(event.pageX,event.pageY)}},resizeListeners:[],updateResizeListeners(){var canvas=Browser.getCanvas();Browser.resizeListeners.forEach(listener=>listener(canvas.width,canvas.height))},setCanvasSize(width,height,noUpdates){var canvas=Browser.getCanvas();Browser.updateCanvasDimensions(canvas,width,height);if(!noUpdates)Browser.updateResizeListeners()},windowedWidth:0,windowedHeight:0,setFullscreenCanvasSize(){if(typeof SDL!="undefined"){var flags=HEAPU32[SDL.screen>>2];flags=flags|8388608;HEAP32[SDL.screen>>2]=flags}Browser.updateCanvasDimensions(Browser.getCanvas());Browser.updateResizeListeners()},setWindowedCanvasSize(){if(typeof SDL!="undefined"){var flags=HEAPU32[SDL.screen>>2];flags=flags&~8388608;HEAP32[SDL.screen>>2]=flags}Browser.updateCanvasDimensions(Browser.getCanvas());Browser.updateResizeListeners()},updateCanvasDimensions(canvas,wNative,hNative){if(wNative&&hNative){canvas.widthNative=wNative;canvas.heightNative=hNative}else{wNative=canvas.widthNative;hNative=canvas.heightNative}var w=wNative;var h=hNative;if(Module["forcedAspectRatio"]>0){if(w/h>2];if(param==12321){var alphaSize=HEAP32[attribList+4>>2];EGL.contextAttributes.alpha=alphaSize>0}else if(param==12325){var depthSize=HEAP32[attribList+4>>2];EGL.contextAttributes.depth=depthSize>0}else if(param==12326){var stencilSize=HEAP32[attribList+4>>2];EGL.contextAttributes.stencil=stencilSize>0}else if(param==12337){var samples=HEAP32[attribList+4>>2];EGL.contextAttributes.antialias=samples>0}else if(param==12338){var samples=HEAP32[attribList+4>>2];EGL.contextAttributes.antialias=samples==1}else if(param==12544){var requestedPriority=HEAP32[attribList+4>>2];EGL.contextAttributes.lowLatency=requestedPriority!=12547}else if(param==12344){break}attribList+=8}}if((!config||!config_size)&&!numConfigs){EGL.setErrorCode(12300);return 0}if(numConfigs){HEAP32[numConfigs>>2]=1}if(config&&config_size>0){HEAPU32[config>>2]=62002}EGL.setErrorCode(12288);return 1}};function _eglBindAPI(api){if(ENVIRONMENT_IS_PTHREAD)return proxyToMainThread(15,0,1,api);if(api==12448){EGL.setErrorCode(12288);return 1}EGL.setErrorCode(12300);return 0}function _eglChooseConfig(display,attrib_list,configs,config_size,numConfigs){if(ENVIRONMENT_IS_PTHREAD)return proxyToMainThread(16,0,1,display,attrib_list,configs,config_size,numConfigs);return EGL.chooseConfig(display,attrib_list,configs,config_size,numConfigs)}var GLctx;var webgl_enable_ANGLE_instanced_arrays=ctx=>{var ext=ctx.getExtension("ANGLE_instanced_arrays");if(ext){ctx["vertexAttribDivisor"]=(index,divisor)=>ext["vertexAttribDivisorANGLE"](index,divisor);ctx["drawArraysInstanced"]=(mode,first,count,primcount)=>ext["drawArraysInstancedANGLE"](mode,first,count,primcount);ctx["drawElementsInstanced"]=(mode,count,type,indices,primcount)=>ext["drawElementsInstancedANGLE"](mode,count,type,indices,primcount);return 1}};var webgl_enable_OES_vertex_array_object=ctx=>{var ext=ctx.getExtension("OES_vertex_array_object");if(ext){ctx["createVertexArray"]=()=>ext["createVertexArrayOES"]();ctx["deleteVertexArray"]=vao=>ext["deleteVertexArrayOES"](vao);ctx["bindVertexArray"]=vao=>ext["bindVertexArrayOES"](vao);ctx["isVertexArray"]=vao=>ext["isVertexArrayOES"](vao);return 1}};var webgl_enable_WEBGL_draw_buffers=ctx=>{var ext=ctx.getExtension("WEBGL_draw_buffers");if(ext){ctx["drawBuffers"]=(n,bufs)=>ext["drawBuffersWEBGL"](n,bufs);return 1}};var webgl_enable_EXT_polygon_offset_clamp=ctx=>!!(ctx.extPolygonOffsetClamp=ctx.getExtension("EXT_polygon_offset_clamp"));var webgl_enable_EXT_clip_control=ctx=>!!(ctx.extClipControl=ctx.getExtension("EXT_clip_control"));var webgl_enable_WEBGL_polygon_mode=ctx=>!!(ctx.webglPolygonMode=ctx.getExtension("WEBGL_polygon_mode"));var webgl_enable_WEBGL_multi_draw=ctx=>!!(ctx.multiDrawWebgl=ctx.getExtension("WEBGL_multi_draw"));var getEmscriptenSupportedExtensions=ctx=>{var supportedExtensions=["ANGLE_instanced_arrays","EXT_blend_minmax","EXT_disjoint_timer_query","EXT_frag_depth","EXT_shader_texture_lod","EXT_sRGB","OES_element_index_uint","OES_fbo_render_mipmap","OES_standard_derivatives","OES_texture_float","OES_texture_half_float","OES_texture_half_float_linear","OES_vertex_array_object","WEBGL_color_buffer_float","WEBGL_depth_texture","WEBGL_draw_buffers","EXT_clip_control","EXT_color_buffer_half_float","EXT_depth_clamp","EXT_float_blend","EXT_polygon_offset_clamp","EXT_texture_compression_bptc","EXT_texture_compression_rgtc","EXT_texture_filter_anisotropic","KHR_parallel_shader_compile","OES_texture_float_linear","WEBGL_blend_func_extended","WEBGL_compressed_texture_astc","WEBGL_compressed_texture_etc","WEBGL_compressed_texture_etc1","WEBGL_compressed_texture_s3tc","WEBGL_compressed_texture_s3tc_srgb","WEBGL_debug_renderer_info","WEBGL_debug_shaders","WEBGL_lose_context","WEBGL_multi_draw","WEBGL_polygon_mode"];return(ctx.getSupportedExtensions()||[]).filter(ext=>supportedExtensions.includes(ext))};var GL={counter:1,buffers:[],programs:[],framebuffers:[],renderbuffers:[],textures:[],shaders:[],vaos:[],contexts:{},offscreenCanvases:{},queries:[],stringCache:{},unpackAlignment:4,unpackRowLength:0,recordError:errorCode=>{if(!GL.lastError){GL.lastError=errorCode}},getNewId:table=>{var ret=GL.counter++;for(var i=table.length;i{for(var i=0;i>2]=id}},getSource:(shader,count,string,length)=>{var source="";for(var i=0;i>2]:undefined;source+=UTF8ToString(HEAPU32[string+i*4>>2],len)}return source},createContext:(canvas,webGLContextAttributes)=>{if(!canvas.getContextSafariWebGL2Fixed){canvas.getContextSafariWebGL2Fixed=canvas.getContext;function fixedGetContext(ver,attrs){var gl=canvas.getContextSafariWebGL2Fixed(ver,attrs);return ver=="webgl"==gl instanceof WebGLRenderingContext?gl:null}canvas.getContext=fixedGetContext}var ctx=canvas.getContext("webgl",webGLContextAttributes);if(!ctx)return 0;var handle=GL.registerContext(ctx,webGLContextAttributes);return handle},registerContext:(ctx,webGLContextAttributes)=>{var handle=_malloc(8);HEAPU32[handle+4>>2]=_pthread_self();var context={handle,attributes:webGLContextAttributes,version:webGLContextAttributes.majorVersion,GLctx:ctx};if(ctx.canvas)ctx.canvas.GLctxObject=context;GL.contexts[handle]=context;if(typeof webGLContextAttributes.enableExtensionsByDefault=="undefined"||webGLContextAttributes.enableExtensionsByDefault){GL.initExtensions(context)}return handle},makeContextCurrent:contextHandle=>{GL.currentContext=GL.contexts[contextHandle];Module["ctx"]=GLctx=GL.currentContext?.GLctx;return!(contextHandle&&!GLctx)},getContext:contextHandle=>GL.contexts[contextHandle],deleteContext:contextHandle=>{if(GL.currentContext===GL.contexts[contextHandle]){GL.currentContext=null}if(typeof JSEvents=="object"){JSEvents.removeAllHandlersOnTarget(GL.contexts[contextHandle].GLctx.canvas)}if(GL.contexts[contextHandle]?.GLctx.canvas){GL.contexts[contextHandle].GLctx.canvas.GLctxObject=undefined}_free(GL.contexts[contextHandle].handle);GL.contexts[contextHandle]=null},initExtensions:context=>{context||=GL.currentContext;if(context.initExtensionsDone)return;context.initExtensionsDone=true;var GLctx=context.GLctx;webgl_enable_WEBGL_multi_draw(GLctx);webgl_enable_EXT_polygon_offset_clamp(GLctx);webgl_enable_EXT_clip_control(GLctx);webgl_enable_WEBGL_polygon_mode(GLctx);webgl_enable_ANGLE_instanced_arrays(GLctx);webgl_enable_OES_vertex_array_object(GLctx);webgl_enable_WEBGL_draw_buffers(GLctx);{GLctx.disjointTimerQueryExt=GLctx.getExtension("EXT_disjoint_timer_query")}getEmscriptenSupportedExtensions(GLctx).forEach(ext=>{if(!ext.includes("lose_context")&&!ext.includes("debug")){GLctx.getExtension(ext)}})}};function _eglCreateContext(display,config,hmm,contextAttribs){if(ENVIRONMENT_IS_PTHREAD)return proxyToMainThread(17,0,1,display,config,hmm,contextAttribs);if(display!=62e3){EGL.setErrorCode(12296);return 0}var glesContextVersion=1;for(;;){var param=HEAP32[contextAttribs>>2];if(param==12440){glesContextVersion=HEAP32[contextAttribs+4>>2]}else if(param==12344){break}else{EGL.setErrorCode(12292);return 0}contextAttribs+=8}if(glesContextVersion!=2){EGL.setErrorCode(12293);return 0}EGL.contextAttributes.majorVersion=glesContextVersion-1;EGL.contextAttributes.minorVersion=0;EGL.context=GL.createContext(Browser.getCanvas(),EGL.contextAttributes);if(EGL.context!=0){EGL.setErrorCode(12288);GL.makeContextCurrent(EGL.context);Browser.useWebGL=true;Browser.moduleContextCreatedCallbacks.forEach(callback=>callback());GL.makeContextCurrent(null);return 62004}else{EGL.setErrorCode(12297);return 0}}function _eglCreateWindowSurface(display,config,win,attrib_list){if(ENVIRONMENT_IS_PTHREAD)return proxyToMainThread(18,0,1,display,config,win,attrib_list);if(display!=62e3){EGL.setErrorCode(12296);return 0}if(config!=62002){EGL.setErrorCode(12293);return 0}EGL.setErrorCode(12288);return 62006}function _eglDestroyContext(display,context){if(ENVIRONMENT_IS_PTHREAD)return proxyToMainThread(19,0,1,display,context);if(display!=62e3){EGL.setErrorCode(12296);return 0}if(context!=62004){EGL.setErrorCode(12294);return 0}GL.deleteContext(EGL.context);EGL.setErrorCode(12288);if(EGL.currentContext==context){EGL.currentContext=0}return 1}function _eglDestroySurface(display,surface){if(ENVIRONMENT_IS_PTHREAD)return proxyToMainThread(20,0,1,display,surface);if(display!=62e3){EGL.setErrorCode(12296);return 0}if(surface!=62006){EGL.setErrorCode(12301);return 1}if(EGL.currentReadSurface==surface){EGL.currentReadSurface=0}if(EGL.currentDrawSurface==surface){EGL.currentDrawSurface=0}EGL.setErrorCode(12288);return 1}function _eglGetConfigAttrib(display,config,attribute,value){if(ENVIRONMENT_IS_PTHREAD)return proxyToMainThread(21,0,1,display,config,attribute,value);if(display!=62e3){EGL.setErrorCode(12296);return 0}if(config!=62002){EGL.setErrorCode(12293);return 0}if(!value){EGL.setErrorCode(12300);return 0}EGL.setErrorCode(12288);switch(attribute){case 12320:HEAP32[value>>2]=EGL.contextAttributes.alpha?32:24;return 1;case 12321:HEAP32[value>>2]=EGL.contextAttributes.alpha?8:0;return 1;case 12322:HEAP32[value>>2]=8;return 1;case 12323:HEAP32[value>>2]=8;return 1;case 12324:HEAP32[value>>2]=8;return 1;case 12325:HEAP32[value>>2]=EGL.contextAttributes.depth?24:0;return 1;case 12326:HEAP32[value>>2]=EGL.contextAttributes.stencil?8:0;return 1;case 12327:HEAP32[value>>2]=12344;return 1;case 12328:HEAP32[value>>2]=62002;return 1;case 12329:HEAP32[value>>2]=0;return 1;case 12330:HEAP32[value>>2]=4096;return 1;case 12331:HEAP32[value>>2]=16777216;return 1;case 12332:HEAP32[value>>2]=4096;return 1;case 12333:HEAP32[value>>2]=0;return 1;case 12334:HEAP32[value>>2]=0;return 1;case 12335:HEAP32[value>>2]=12344;return 1;case 12337:HEAP32[value>>2]=EGL.contextAttributes.antialias?4:0;return 1;case 12338:HEAP32[value>>2]=EGL.contextAttributes.antialias?1:0;return 1;case 12339:HEAP32[value>>2]=4;return 1;case 12340:HEAP32[value>>2]=12344;return 1;case 12341:case 12342:case 12343:HEAP32[value>>2]=-1;return 1;case 12345:case 12346:HEAP32[value>>2]=0;return 1;case 12347:HEAP32[value>>2]=0;return 1;case 12348:HEAP32[value>>2]=1;return 1;case 12349:case 12350:HEAP32[value>>2]=0;return 1;case 12351:HEAP32[value>>2]=12430;return 1;case 12352:HEAP32[value>>2]=4;return 1;case 12354:HEAP32[value>>2]=0;return 1;default:EGL.setErrorCode(12292);return 0}}function _eglGetDisplay(nativeDisplayType){if(ENVIRONMENT_IS_PTHREAD)return proxyToMainThread(22,0,1,nativeDisplayType);EGL.setErrorCode(12288);if(nativeDisplayType!=0&&nativeDisplayType!=1){return 0}return 62e3}function _eglGetError(){if(ENVIRONMENT_IS_PTHREAD)return proxyToMainThread(23,0,1);return EGL.errorCode}function _eglInitialize(display,majorVersion,minorVersion){if(ENVIRONMENT_IS_PTHREAD)return proxyToMainThread(24,0,1,display,majorVersion,minorVersion);if(display!=62e3){EGL.setErrorCode(12296);return 0}if(majorVersion){HEAP32[majorVersion>>2]=1}if(minorVersion){HEAP32[minorVersion>>2]=4}EGL.defaultDisplayInitialized=true;EGL.setErrorCode(12288);return 1}function _eglMakeCurrent(display,draw,read,context){if(ENVIRONMENT_IS_PTHREAD)return proxyToMainThread(25,0,1,display,draw,read,context);if(display!=62e3){EGL.setErrorCode(12296);return 0}if(context!=0&&context!=62004){EGL.setErrorCode(12294);return 0}if(read!=0&&read!=62006||draw!=0&&draw!=62006){EGL.setErrorCode(12301);return 0}GL.makeContextCurrent(context?EGL.context:null);EGL.currentContext=context;EGL.currentDrawSurface=draw;EGL.currentReadSurface=read;EGL.setErrorCode(12288);return 1}var stringToNewUTF8=str=>{var size=lengthBytesUTF8(str)+1;var ret=_malloc(size);if(ret)stringToUTF8(str,ret,size);return ret};function _eglQueryString(display,name){if(ENVIRONMENT_IS_PTHREAD)return proxyToMainThread(26,0,1,display,name);if(display!=62e3){EGL.setErrorCode(12296);return 0}EGL.setErrorCode(12288);if(EGL.stringCache[name])return EGL.stringCache[name];var ret;switch(name){case 12371:ret=stringToNewUTF8("Emscripten");break;case 12372:ret=stringToNewUTF8("1.4 Emscripten EGL");break;case 12373:ret=stringToNewUTF8("");break;case 12429:ret=stringToNewUTF8("OpenGL_ES");break;default:EGL.setErrorCode(12300);return 0}EGL.stringCache[name]=ret;return ret}function _eglSwapBuffers(dpy,surface){if(ENVIRONMENT_IS_PTHREAD)return proxyToMainThread(27,0,1,dpy,surface);if(!EGL.defaultDisplayInitialized){EGL.setErrorCode(12289)}else if(!GLctx){EGL.setErrorCode(12290)}else if(GLctx.isContextLost()){EGL.setErrorCode(12302)}else{EGL.setErrorCode(12288);return 1}return 0}var setMainLoop=(iterFunc,fps,simulateInfiniteLoop,arg,noSetTiming)=>{MainLoop.func=iterFunc;MainLoop.arg=arg;var thisMainLoopId=MainLoop.currentlyRunningMainloop;function checkIsRunning(){if(thisMainLoopId0){var start=Date.now();var blocker=MainLoop.queue.shift();blocker.func(blocker.arg);if(MainLoop.remainingBlockers){var remaining=MainLoop.remainingBlockers;var next=remaining%1==0?remaining-1:Math.floor(remaining);if(blocker.counted){MainLoop.remainingBlockers=next}else{next=next+.5;MainLoop.remainingBlockers=(8*remaining+next)/9}}MainLoop.updateStatus();if(!checkIsRunning())return;setTimeout(MainLoop.runner,0);return}if(!checkIsRunning())return;MainLoop.currentFrameNumber=MainLoop.currentFrameNumber+1|0;if(MainLoop.timingMode==1&&MainLoop.timingValue>1&&MainLoop.currentFrameNumber%MainLoop.timingValue!=0){MainLoop.scheduler();return}else if(MainLoop.timingMode==0){MainLoop.tickStartTime=_emscripten_get_now()}MainLoop.runIter(iterFunc);if(!checkIsRunning())return;MainLoop.scheduler()};if(!noSetTiming){if(fps>0){_emscripten_set_main_loop_timing(0,1e3/fps)}else{_emscripten_set_main_loop_timing(1,1)}MainLoop.scheduler()}if(simulateInfiniteLoop){throw"unwind"}};var MainLoop={running:false,scheduler:null,method:"",currentlyRunningMainloop:0,func:null,arg:0,timingMode:0,timingValue:0,currentFrameNumber:0,queue:[],preMainLoop:[],postMainLoop:[],pause(){MainLoop.scheduler=null;MainLoop.currentlyRunningMainloop++},resume(){MainLoop.currentlyRunningMainloop++;var timingMode=MainLoop.timingMode;var timingValue=MainLoop.timingValue;var func=MainLoop.func;MainLoop.func=null;setMainLoop(func,0,false,MainLoop.arg,true);_emscripten_set_main_loop_timing(timingMode,timingValue);MainLoop.scheduler()},updateStatus(){if(Module["setStatus"]){var message=Module["statusMessage"]||"Please wait...";var remaining=MainLoop.remainingBlockers??0;var expected=MainLoop.expectedBlockers??0;if(remaining){if(remaining=MainLoop.nextRAF){MainLoop.nextRAF+=1e3/60}}var delay=Math.max(MainLoop.nextRAF-now,0);setTimeout(func,delay)},requestAnimationFrame(func){if(typeof requestAnimationFrame=="function"){requestAnimationFrame(func);return}var RAF=MainLoop.fakeRequestAnimationFrame;RAF(func)}};var _emscripten_set_main_loop_timing=(mode,value)=>{MainLoop.timingMode=mode;MainLoop.timingValue=value;if(!MainLoop.func){return 1}if(!MainLoop.running){runtimeKeepalivePush();MainLoop.running=true}if(mode==0){MainLoop.scheduler=function MainLoop_scheduler_setTimeout(){var timeUntilNextTick=Math.max(0,MainLoop.tickStartTime+value-_emscripten_get_now())|0;setTimeout(MainLoop.runner,timeUntilNextTick)};MainLoop.method="timeout"}else if(mode==1){MainLoop.scheduler=function MainLoop_scheduler_rAF(){MainLoop.requestAnimationFrame(MainLoop.runner)};MainLoop.method="rAF"}else if(mode==2){if(typeof MainLoop.setImmediate=="undefined"){if(typeof setImmediate=="undefined"){var setImmediates=[];var emscriptenMainLoopMessageId="setimmediate";var MainLoop_setImmediate_messageHandler=event=>{if(event.data===emscriptenMainLoopMessageId||event.data.target===emscriptenMainLoopMessageId){event.stopPropagation();setImmediates.shift()()}};addEventListener("message",MainLoop_setImmediate_messageHandler,true);MainLoop.setImmediate=func=>{setImmediates.push(func);if(ENVIRONMENT_IS_WORKER){Module["setImmediates"]??=[];Module["setImmediates"].push(func);postMessage({target:emscriptenMainLoopMessageId})}else postMessage(emscriptenMainLoopMessageId,"*")}}else{MainLoop.setImmediate=setImmediate}}MainLoop.scheduler=function MainLoop_scheduler_setImmediate(){MainLoop.setImmediate(MainLoop.runner)};MainLoop.method="immediate"}return 0};function _eglSwapInterval(display,interval){if(ENVIRONMENT_IS_PTHREAD)return proxyToMainThread(28,0,1,display,interval);if(display!=62e3){EGL.setErrorCode(12296);return 0}if(interval==0)_emscripten_set_main_loop_timing(0,0);else _emscripten_set_main_loop_timing(1,interval);EGL.setErrorCode(12288);return 1}function _eglTerminate(display){if(ENVIRONMENT_IS_PTHREAD)return proxyToMainThread(29,0,1,display);if(display!=62e3){EGL.setErrorCode(12296);return 0}EGL.currentContext=0;EGL.currentReadSurface=0;EGL.currentDrawSurface=0;EGL.defaultDisplayInitialized=false;EGL.setErrorCode(12288);return 1}function _eglWaitClient(){if(ENVIRONMENT_IS_PTHREAD)return proxyToMainThread(30,0,1);EGL.setErrorCode(12288);return 1}var _eglWaitGL=_eglWaitClient;function _eglWaitNative(nativeEngineId){if(ENVIRONMENT_IS_PTHREAD)return proxyToMainThread(31,0,1,nativeEngineId);EGL.setErrorCode(12288);return 1}var readEmAsmArgsArray=[];var readEmAsmArgs=(sigPtr,buf)=>{readEmAsmArgsArray.length=0;var ch;while(ch=HEAPU8[sigPtr++]){var wide=ch!=105;wide&=ch!=112;buf+=wide&&buf%8?4:0;readEmAsmArgsArray.push(ch==112?HEAPU32[buf>>2]:ch==106?HEAP64[buf>>3]:ch==105?HEAP32[buf>>2]:HEAPF64[buf>>3]);buf+=wide?8:4}return readEmAsmArgsArray};var runEmAsmFunction=(code,sigPtr,argbuf)=>{var args=readEmAsmArgs(sigPtr,argbuf);return ASM_CONSTS[code](...args)};var _emscripten_asm_const_int=(code,sigPtr,argbuf)=>runEmAsmFunction(code,sigPtr,argbuf);var runMainThreadEmAsm=(emAsmAddr,sigPtr,argbuf,sync)=>{var args=readEmAsmArgs(sigPtr,argbuf);if(ENVIRONMENT_IS_PTHREAD){return proxyToMainThread(0,emAsmAddr,sync,...args)}return ASM_CONSTS[emAsmAddr](...args)};var _emscripten_asm_const_int_sync_on_main_thread=(emAsmAddr,sigPtr,argbuf)=>runMainThreadEmAsm(emAsmAddr,sigPtr,argbuf,1);var _emscripten_asm_const_ptr_sync_on_main_thread=(emAsmAddr,sigPtr,argbuf)=>runMainThreadEmAsm(emAsmAddr,sigPtr,argbuf,1);var _emscripten_cancel_main_loop=()=>{MainLoop.pause();MainLoop.func=null};var _emscripten_check_blocking_allowed=()=>{};var onExits=[];var JSEvents={memcpy(target,src,size){HEAP8.set(HEAP8.subarray(src,src+size),target)},removeAllEventListeners(){while(JSEvents.eventHandlers.length){JSEvents._removeHandler(JSEvents.eventHandlers.length-1)}JSEvents.deferredCalls=[]},inEventHandler:0,deferredCalls:[],deferCall(targetFunction,precedence,argsList){function arraysHaveEqualContent(arrA,arrB){if(arrA.length!=arrB.length)return false;for(var i in arrA){if(arrA[i]!=arrB[i])return false}return true}for(var call of JSEvents.deferredCalls){if(call.targetFunction==targetFunction&&arraysHaveEqualContent(call.argsList,argsList)){return}}JSEvents.deferredCalls.push({targetFunction,precedence,argsList});JSEvents.deferredCalls.sort((x,y)=>x.precedencecall.targetFunction!=targetFunction)},canPerformEventHandlerRequests(){if(navigator.userActivation){return navigator.userActivation.isActive}return JSEvents.inEventHandler&&JSEvents.currentEventHandler.allowsDeferredCalls},runDeferredCalls(){if(!JSEvents.canPerformEventHandlerRequests()){return}var deferredCalls=JSEvents.deferredCalls;JSEvents.deferredCalls=[];for(var call of deferredCalls){call.targetFunction(...call.argsList)}},eventHandlers:[],removeAllHandlersOnTarget:(target,eventTypeString)=>{for(var i=0;icString>2?UTF8ToString(cString):cString;var findEventTarget=target=>{target=maybeCStringToJsString(target);var domElement=specialHTMLTargets[target]||(typeof document!="undefined"?document.querySelector(target):null);return domElement};var findCanvasEventTarget=findEventTarget;var getCanvasSizeCallingThread=(target,width,height)=>{var canvas=findCanvasEventTarget(target);if(!canvas)return-4;if(!canvas.controlTransferredOffscreen){HEAP32[width>>2]=canvas.width;HEAP32[height>>2]=canvas.height}else{return-4}return 0};function getCanvasSizeMainThread(target,width,height){if(ENVIRONMENT_IS_PTHREAD)return proxyToMainThread(33,0,1,target,width,height);return getCanvasSizeCallingThread(target,width,height)}var _emscripten_get_canvas_element_size=(target,width,height)=>{var canvas=findCanvasEventTarget(target);if(canvas){return getCanvasSizeCallingThread(target,width,height)}return getCanvasSizeMainThread(target,width,height)};var stringToUTF8OnStack=str=>{var size=lengthBytesUTF8(str)+1;var ret=stackAlloc(size);stringToUTF8(str,ret,size);return ret};var getCanvasElementSize=target=>{var sp=stackSave();var w=stackAlloc(8);var h=w+4;var targetInt=stringToUTF8OnStack(target.id);var ret=_emscripten_get_canvas_element_size(targetInt,w,h);var size=[HEAP32[w>>2],HEAP32[h>>2]];stackRestore(sp);return size};var setCanvasElementSizeCallingThread=(target,width,height)=>{var canvas=findCanvasEventTarget(target);if(!canvas)return-4;if(!canvas.controlTransferredOffscreen){var autoResizeViewport=false;if(canvas.GLctxObject?.GLctx){var prevViewport=canvas.GLctxObject.GLctx.getParameter(2978);autoResizeViewport=prevViewport[0]===0&&prevViewport[1]===0&&prevViewport[2]===canvas.width&&prevViewport[3]===canvas.height}canvas.width=width;canvas.height=height;if(autoResizeViewport){canvas.GLctxObject.GLctx.viewport(0,0,width,height)}}else{return-4}return 0};function setCanvasElementSizeMainThread(target,width,height){if(ENVIRONMENT_IS_PTHREAD)return proxyToMainThread(34,0,1,target,width,height);return setCanvasElementSizeCallingThread(target,width,height)}var _emscripten_set_canvas_element_size=(target,width,height)=>{var canvas=findCanvasEventTarget(target);if(canvas){return setCanvasElementSizeCallingThread(target,width,height)}return setCanvasElementSizeMainThread(target,width,height)};var setCanvasElementSize=(target,width,height)=>{if(!target.controlTransferredOffscreen){target.width=width;target.height=height}else{var sp=stackSave();var targetInt=stringToUTF8OnStack(target.id);_emscripten_set_canvas_element_size(targetInt,width,height);stackRestore(sp)}};var currentFullscreenStrategy={};var registerRestoreOldStyle=canvas=>{var canvasSize=getCanvasElementSize(canvas);var oldWidth=canvasSize[0];var oldHeight=canvasSize[1];var oldCssWidth=canvas.style.width;var oldCssHeight=canvas.style.height;var oldBackgroundColor=canvas.style.backgroundColor;var oldDocumentBackgroundColor=document.body.style.backgroundColor;var oldPaddingLeft=canvas.style.paddingLeft;var oldPaddingRight=canvas.style.paddingRight;var oldPaddingTop=canvas.style.paddingTop;var oldPaddingBottom=canvas.style.paddingBottom;var oldMarginLeft=canvas.style.marginLeft;var oldMarginRight=canvas.style.marginRight;var oldMarginTop=canvas.style.marginTop;var oldMarginBottom=canvas.style.marginBottom;var oldDocumentBodyMargin=document.body.style.margin;var oldDocumentOverflow=document.documentElement.style.overflow;var oldDocumentScroll=document.body.scroll;var oldImageRendering=canvas.style.imageRendering;function restoreOldStyle(){var fullscreenElement=document.fullscreenElement||document.webkitFullscreenElement;if(!fullscreenElement){document.removeEventListener("fullscreenchange",restoreOldStyle);document.removeEventListener("webkitfullscreenchange",restoreOldStyle);setCanvasElementSize(canvas,oldWidth,oldHeight);canvas.style.width=oldCssWidth;canvas.style.height=oldCssHeight;canvas.style.backgroundColor=oldBackgroundColor;if(!oldDocumentBackgroundColor)document.body.style.backgroundColor="white";document.body.style.backgroundColor=oldDocumentBackgroundColor;canvas.style.paddingLeft=oldPaddingLeft;canvas.style.paddingRight=oldPaddingRight;canvas.style.paddingTop=oldPaddingTop;canvas.style.paddingBottom=oldPaddingBottom;canvas.style.marginLeft=oldMarginLeft;canvas.style.marginRight=oldMarginRight;canvas.style.marginTop=oldMarginTop;canvas.style.marginBottom=oldMarginBottom;document.body.style.margin=oldDocumentBodyMargin;document.documentElement.style.overflow=oldDocumentOverflow;document.body.scroll=oldDocumentScroll;canvas.style.imageRendering=oldImageRendering;if(canvas.GLctxObject)canvas.GLctxObject.GLctx.viewport(0,0,oldWidth,oldHeight);if(currentFullscreenStrategy.canvasResizedCallback){if(currentFullscreenStrategy.canvasResizedCallbackTargetThread)__emscripten_run_callback_on_thread(currentFullscreenStrategy.canvasResizedCallbackTargetThread,currentFullscreenStrategy.canvasResizedCallback,37,0,currentFullscreenStrategy.canvasResizedCallbackUserData);else getWasmTableEntry(currentFullscreenStrategy.canvasResizedCallback)(37,0,currentFullscreenStrategy.canvasResizedCallbackUserData)}}}document.addEventListener("fullscreenchange",restoreOldStyle);document.addEventListener("webkitfullscreenchange",restoreOldStyle);return restoreOldStyle};var setLetterbox=(element,topBottom,leftRight)=>{element.style.paddingLeft=element.style.paddingRight=leftRight+"px";element.style.paddingTop=element.style.paddingBottom=topBottom+"px"};var getBoundingClientRect=e=>specialHTMLTargets.indexOf(e)<0?e.getBoundingClientRect():{left:0,top:0};var JSEvents_resizeCanvasForFullscreen=(target,strategy)=>{var restoreOldStyle=registerRestoreOldStyle(target);var cssWidth=strategy.softFullscreen?innerWidth:screen.width;var cssHeight=strategy.softFullscreen?innerHeight:screen.height;var rect=getBoundingClientRect(target);var windowedCssWidth=rect.width;var windowedCssHeight=rect.height;var canvasSize=getCanvasElementSize(target);var windowedRttWidth=canvasSize[0];var windowedRttHeight=canvasSize[1];if(strategy.scaleMode==3){setLetterbox(target,(cssHeight-windowedCssHeight)/2,(cssWidth-windowedCssWidth)/2);cssWidth=windowedCssWidth;cssHeight=windowedCssHeight}else if(strategy.scaleMode==2){if(cssWidth*windowedRttHeight{if(strategy.scaleMode!=0||strategy.canvasResolutionScaleMode!=0){JSEvents_resizeCanvasForFullscreen(target,strategy)}if(target.requestFullscreen){target.requestFullscreen()}else if(target.webkitRequestFullscreen){target.webkitRequestFullscreen(Element.ALLOW_KEYBOARD_INPUT)}else{return JSEvents.fullscreenEnabled()?-3:-1}currentFullscreenStrategy=strategy;if(strategy.canvasResizedCallback){if(strategy.canvasResizedCallbackTargetThread)__emscripten_run_callback_on_thread(strategy.canvasResizedCallbackTargetThread,strategy.canvasResizedCallback,37,0,strategy.canvasResizedCallbackUserData);else getWasmTableEntry(strategy.canvasResizedCallback)(37,0,strategy.canvasResizedCallbackUserData)}return 0};function _emscripten_exit_fullscreen(){if(ENVIRONMENT_IS_PTHREAD)return proxyToMainThread(32,0,1);if(!JSEvents.fullscreenEnabled())return-1;JSEvents.removeDeferredCalls(JSEvents_requestFullscreen);var d=specialHTMLTargets[1];if(d.exitFullscreen){d.fullscreenElement&&d.exitFullscreen()}else if(d.webkitExitFullscreen){d.webkitFullscreenElement&&d.webkitExitFullscreen()}else{return-1}return 0}var requestPointerLock=target=>{if(target.requestPointerLock){target.requestPointerLock()}else{if(document.body.requestPointerLock){return-3}return-1}return 0};function _emscripten_exit_pointerlock(){if(ENVIRONMENT_IS_PTHREAD)return proxyToMainThread(35,0,1);JSEvents.removeDeferredCalls(requestPointerLock);if(document.exitPointerLock){document.exitPointerLock()}else{return-1}return 0}var _emscripten_exit_with_live_runtime=()=>{runtimeKeepalivePush();throw"unwind"};function _emscripten_force_exit(status){if(ENVIRONMENT_IS_PTHREAD)return proxyToMainThread(36,0,1,status);__emscripten_runtime_keepalive_clear();_exit(status)}function _emscripten_get_device_pixel_ratio(){if(ENVIRONMENT_IS_PTHREAD)return proxyToMainThread(37,0,1);return typeof devicePixelRatio=="number"&&devicePixelRatio||1}function _emscripten_get_element_css_size(target,width,height){if(ENVIRONMENT_IS_PTHREAD)return proxyToMainThread(38,0,1,target,width,height);target=findEventTarget(target);if(!target)return-4;var rect=getBoundingClientRect(target);HEAPF64[width>>3]=rect.width;HEAPF64[height>>3]=rect.height;return 0}var fillGamepadEventData=(eventStruct,e)=>{HEAPF64[eventStruct>>3]=e.timestamp;for(var i=0;i>3]=e.axes[i]}for(var i=0;i>3]=e.buttons[i].value}else{HEAPF64[eventStruct+i*8+528>>3]=e.buttons[i]}}for(var i=0;i>2]=e.index;HEAP32[eventStruct+8>>2]=e.axes.length;HEAP32[eventStruct+12>>2]=e.buttons.length;stringToUTF8(e.id,eventStruct+1112,64);stringToUTF8(e.mapping,eventStruct+1176,64)};function _emscripten_get_gamepad_status(index,gamepadState){if(ENVIRONMENT_IS_PTHREAD)return proxyToMainThread(39,0,1,index,gamepadState);if(index<0||index>=JSEvents.lastGamepadState.length)return-5;if(!JSEvents.lastGamepadState[index])return-7;fillGamepadEventData(gamepadState,JSEvents.lastGamepadState[index]);return 0}function _emscripten_get_num_gamepads(){if(ENVIRONMENT_IS_PTHREAD)return proxyToMainThread(40,0,1);return JSEvents.lastGamepadState.length}function _emscripten_get_screen_size(width,height){if(ENVIRONMENT_IS_PTHREAD)return proxyToMainThread(41,0,1,width,height);HEAP32[width>>2]=screen.width;HEAP32[height>>2]=screen.height}var _glActiveTexture=x0=>GLctx.activeTexture(x0);var _emscripten_glActiveTexture=_glActiveTexture;var _glAttachShader=(program,shader)=>{GLctx.attachShader(GL.programs[program],GL.shaders[shader])};var _emscripten_glAttachShader=_glAttachShader;var _glBeginQueryEXT=(target,id)=>{GLctx.disjointTimerQueryExt["beginQueryEXT"](target,GL.queries[id])};var _emscripten_glBeginQueryEXT=_glBeginQueryEXT;var _glBindAttribLocation=(program,index,name)=>{GLctx.bindAttribLocation(GL.programs[program],index,UTF8ToString(name))};var _emscripten_glBindAttribLocation=_glBindAttribLocation;var _glBindBuffer=(target,buffer)=>{GLctx.bindBuffer(target,GL.buffers[buffer])};var _emscripten_glBindBuffer=_glBindBuffer;var _glBindFramebuffer=(target,framebuffer)=>{GLctx.bindFramebuffer(target,GL.framebuffers[framebuffer])};var _emscripten_glBindFramebuffer=_glBindFramebuffer;var _glBindRenderbuffer=(target,renderbuffer)=>{GLctx.bindRenderbuffer(target,GL.renderbuffers[renderbuffer])};var _emscripten_glBindRenderbuffer=_glBindRenderbuffer;var _glBindTexture=(target,texture)=>{GLctx.bindTexture(target,GL.textures[texture])};var _emscripten_glBindTexture=_glBindTexture;var _glBindVertexArray=vao=>{GLctx.bindVertexArray(GL.vaos[vao])};var _glBindVertexArrayOES=_glBindVertexArray;var _emscripten_glBindVertexArrayOES=_glBindVertexArrayOES;var _glBlendColor=(x0,x1,x2,x3)=>GLctx.blendColor(x0,x1,x2,x3);var _emscripten_glBlendColor=_glBlendColor;var _glBlendEquation=x0=>GLctx.blendEquation(x0);var _emscripten_glBlendEquation=_glBlendEquation;var _glBlendEquationSeparate=(x0,x1)=>GLctx.blendEquationSeparate(x0,x1);var _emscripten_glBlendEquationSeparate=_glBlendEquationSeparate;var _glBlendFunc=(x0,x1)=>GLctx.blendFunc(x0,x1);var _emscripten_glBlendFunc=_glBlendFunc;var _glBlendFuncSeparate=(x0,x1,x2,x3)=>GLctx.blendFuncSeparate(x0,x1,x2,x3);var _emscripten_glBlendFuncSeparate=_glBlendFuncSeparate;var _glBufferData=(target,size,data,usage)=>{GLctx.bufferData(target,data?HEAPU8.subarray(data,data+size):size,usage)};var _emscripten_glBufferData=_glBufferData;var _glBufferSubData=(target,offset,size,data)=>{GLctx.bufferSubData(target,offset,HEAPU8.subarray(data,data+size))};var _emscripten_glBufferSubData=_glBufferSubData;var _glCheckFramebufferStatus=x0=>GLctx.checkFramebufferStatus(x0);var _emscripten_glCheckFramebufferStatus=_glCheckFramebufferStatus;var _glClear=x0=>GLctx.clear(x0);var _emscripten_glClear=_glClear;var _glClearColor=(x0,x1,x2,x3)=>GLctx.clearColor(x0,x1,x2,x3);var _emscripten_glClearColor=_glClearColor;var _glClearDepthf=x0=>GLctx.clearDepth(x0);var _emscripten_glClearDepthf=_glClearDepthf;var _glClearStencil=x0=>GLctx.clearStencil(x0);var _emscripten_glClearStencil=_glClearStencil;var _glClipControlEXT=(origin,depth)=>{GLctx.extClipControl["clipControlEXT"](origin,depth)};var _emscripten_glClipControlEXT=_glClipControlEXT;var _glColorMask=(red,green,blue,alpha)=>{GLctx.colorMask(!!red,!!green,!!blue,!!alpha)};var _emscripten_glColorMask=_glColorMask;var _glCompileShader=shader=>{GLctx.compileShader(GL.shaders[shader])};var _emscripten_glCompileShader=_glCompileShader;var _glCompressedTexImage2D=(target,level,internalFormat,width,height,border,imageSize,data)=>{GLctx.compressedTexImage2D(target,level,internalFormat,width,height,border,HEAPU8.subarray(data,data+imageSize))};var _emscripten_glCompressedTexImage2D=_glCompressedTexImage2D;var _glCompressedTexSubImage2D=(target,level,xoffset,yoffset,width,height,format,imageSize,data)=>{GLctx.compressedTexSubImage2D(target,level,xoffset,yoffset,width,height,format,HEAPU8.subarray(data,data+imageSize))};var _emscripten_glCompressedTexSubImage2D=_glCompressedTexSubImage2D;var _glCopyTexImage2D=(x0,x1,x2,x3,x4,x5,x6,x7)=>GLctx.copyTexImage2D(x0,x1,x2,x3,x4,x5,x6,x7);var _emscripten_glCopyTexImage2D=_glCopyTexImage2D;var _glCopyTexSubImage2D=(x0,x1,x2,x3,x4,x5,x6,x7)=>GLctx.copyTexSubImage2D(x0,x1,x2,x3,x4,x5,x6,x7);var _emscripten_glCopyTexSubImage2D=_glCopyTexSubImage2D;var _glCreateProgram=()=>{var id=GL.getNewId(GL.programs);var program=GLctx.createProgram();program.name=id;program.maxUniformLength=program.maxAttributeLength=program.maxUniformBlockNameLength=0;program.uniformIdCounter=1;GL.programs[id]=program;return id};var _emscripten_glCreateProgram=_glCreateProgram;var _glCreateShader=shaderType=>{var id=GL.getNewId(GL.shaders);GL.shaders[id]=GLctx.createShader(shaderType);return id};var _emscripten_glCreateShader=_glCreateShader;var _glCullFace=x0=>GLctx.cullFace(x0);var _emscripten_glCullFace=_glCullFace;var _glDeleteBuffers=(n,buffers)=>{for(var i=0;i>2];var buffer=GL.buffers[id];if(!buffer)continue;GLctx.deleteBuffer(buffer);buffer.name=0;GL.buffers[id]=null}};var _emscripten_glDeleteBuffers=_glDeleteBuffers;var _glDeleteFramebuffers=(n,framebuffers)=>{for(var i=0;i>2];var framebuffer=GL.framebuffers[id];if(!framebuffer)continue;GLctx.deleteFramebuffer(framebuffer);framebuffer.name=0;GL.framebuffers[id]=null}};var _emscripten_glDeleteFramebuffers=_glDeleteFramebuffers;var _glDeleteProgram=id=>{if(!id)return;var program=GL.programs[id];if(!program){GL.recordError(1281);return}GLctx.deleteProgram(program);program.name=0;GL.programs[id]=null};var _emscripten_glDeleteProgram=_glDeleteProgram;var _glDeleteQueriesEXT=(n,ids)=>{for(var i=0;i>2];var query=GL.queries[id];if(!query)continue;GLctx.disjointTimerQueryExt["deleteQueryEXT"](query);GL.queries[id]=null}};var _emscripten_glDeleteQueriesEXT=_glDeleteQueriesEXT;var _glDeleteRenderbuffers=(n,renderbuffers)=>{for(var i=0;i>2];var renderbuffer=GL.renderbuffers[id];if(!renderbuffer)continue;GLctx.deleteRenderbuffer(renderbuffer);renderbuffer.name=0;GL.renderbuffers[id]=null}};var _emscripten_glDeleteRenderbuffers=_glDeleteRenderbuffers;var _glDeleteShader=id=>{if(!id)return;var shader=GL.shaders[id];if(!shader){GL.recordError(1281);return}GLctx.deleteShader(shader);GL.shaders[id]=null};var _emscripten_glDeleteShader=_glDeleteShader;var _glDeleteTextures=(n,textures)=>{for(var i=0;i>2];var texture=GL.textures[id];if(!texture)continue;GLctx.deleteTexture(texture);texture.name=0;GL.textures[id]=null}};var _emscripten_glDeleteTextures=_glDeleteTextures;var _glDeleteVertexArrays=(n,vaos)=>{for(var i=0;i>2];GLctx.deleteVertexArray(GL.vaos[id]);GL.vaos[id]=null}};var _glDeleteVertexArraysOES=_glDeleteVertexArrays;var _emscripten_glDeleteVertexArraysOES=_glDeleteVertexArraysOES;var _glDepthFunc=x0=>GLctx.depthFunc(x0);var _emscripten_glDepthFunc=_glDepthFunc;var _glDepthMask=flag=>{GLctx.depthMask(!!flag)};var _emscripten_glDepthMask=_glDepthMask;var _glDepthRangef=(x0,x1)=>GLctx.depthRange(x0,x1);var _emscripten_glDepthRangef=_glDepthRangef;var _glDetachShader=(program,shader)=>{GLctx.detachShader(GL.programs[program],GL.shaders[shader])};var _emscripten_glDetachShader=_glDetachShader;var _glDisable=x0=>GLctx.disable(x0);var _emscripten_glDisable=_glDisable;var _glDisableVertexAttribArray=index=>{GLctx.disableVertexAttribArray(index)};var _emscripten_glDisableVertexAttribArray=_glDisableVertexAttribArray;var _glDrawArrays=(mode,first,count)=>{GLctx.drawArrays(mode,first,count)};var _emscripten_glDrawArrays=_glDrawArrays;var _glDrawArraysInstanced=(mode,first,count,primcount)=>{GLctx.drawArraysInstanced(mode,first,count,primcount)};var _glDrawArraysInstancedANGLE=_glDrawArraysInstanced;var _emscripten_glDrawArraysInstancedANGLE=_glDrawArraysInstancedANGLE;var tempFixedLengthArray=[];var _glDrawBuffers=(n,bufs)=>{var bufArray=tempFixedLengthArray[n];for(var i=0;i>2]}GLctx.drawBuffers(bufArray)};var _glDrawBuffersWEBGL=_glDrawBuffers;var _emscripten_glDrawBuffersWEBGL=_glDrawBuffersWEBGL;var _glDrawElements=(mode,count,type,indices)=>{GLctx.drawElements(mode,count,type,indices)};var _emscripten_glDrawElements=_glDrawElements;var _glDrawElementsInstanced=(mode,count,type,indices,primcount)=>{GLctx.drawElementsInstanced(mode,count,type,indices,primcount)};var _glDrawElementsInstancedANGLE=_glDrawElementsInstanced;var _emscripten_glDrawElementsInstancedANGLE=_glDrawElementsInstancedANGLE;var _glEnable=x0=>GLctx.enable(x0);var _emscripten_glEnable=_glEnable;var _glEnableVertexAttribArray=index=>{GLctx.enableVertexAttribArray(index)};var _emscripten_glEnableVertexAttribArray=_glEnableVertexAttribArray;var _glEndQueryEXT=target=>{GLctx.disjointTimerQueryExt["endQueryEXT"](target)};var _emscripten_glEndQueryEXT=_glEndQueryEXT;var _glFinish=()=>GLctx.finish();var _emscripten_glFinish=_glFinish;var _glFlush=()=>GLctx.flush();var _emscripten_glFlush=_glFlush;var _glFramebufferRenderbuffer=(target,attachment,renderbuffertarget,renderbuffer)=>{GLctx.framebufferRenderbuffer(target,attachment,renderbuffertarget,GL.renderbuffers[renderbuffer])};var _emscripten_glFramebufferRenderbuffer=_glFramebufferRenderbuffer;var _glFramebufferTexture2D=(target,attachment,textarget,texture,level)=>{GLctx.framebufferTexture2D(target,attachment,textarget,GL.textures[texture],level)};var _emscripten_glFramebufferTexture2D=_glFramebufferTexture2D;var _glFrontFace=x0=>GLctx.frontFace(x0);var _emscripten_glFrontFace=_glFrontFace;var _glGenBuffers=(n,buffers)=>{GL.genObject(n,buffers,"createBuffer",GL.buffers)};var _emscripten_glGenBuffers=_glGenBuffers;var _glGenFramebuffers=(n,ids)=>{GL.genObject(n,ids,"createFramebuffer",GL.framebuffers)};var _emscripten_glGenFramebuffers=_glGenFramebuffers;var _glGenQueriesEXT=(n,ids)=>{for(var i=0;i>2]=0;return}var id=GL.getNewId(GL.queries);query.name=id;GL.queries[id]=query;HEAP32[ids+i*4>>2]=id}};var _emscripten_glGenQueriesEXT=_glGenQueriesEXT;var _glGenRenderbuffers=(n,renderbuffers)=>{GL.genObject(n,renderbuffers,"createRenderbuffer",GL.renderbuffers)};var _emscripten_glGenRenderbuffers=_glGenRenderbuffers;var _glGenTextures=(n,textures)=>{GL.genObject(n,textures,"createTexture",GL.textures)};var _emscripten_glGenTextures=_glGenTextures;var _glGenVertexArrays=(n,arrays)=>{GL.genObject(n,arrays,"createVertexArray",GL.vaos)};var _glGenVertexArraysOES=_glGenVertexArrays;var _emscripten_glGenVertexArraysOES=_glGenVertexArraysOES;var _glGenerateMipmap=x0=>GLctx.generateMipmap(x0);var _emscripten_glGenerateMipmap=_glGenerateMipmap;var __glGetActiveAttribOrUniform=(funcName,program,index,bufSize,length,size,type,name)=>{program=GL.programs[program];var info=GLctx[funcName](program,index);if(info){var numBytesWrittenExclNull=name&&stringToUTF8(info.name,name,bufSize);if(length)HEAP32[length>>2]=numBytesWrittenExclNull;if(size)HEAP32[size>>2]=info.size;if(type)HEAP32[type>>2]=info.type}};var _glGetActiveAttrib=(program,index,bufSize,length,size,type,name)=>__glGetActiveAttribOrUniform("getActiveAttrib",program,index,bufSize,length,size,type,name);var _emscripten_glGetActiveAttrib=_glGetActiveAttrib;var _glGetActiveUniform=(program,index,bufSize,length,size,type,name)=>__glGetActiveAttribOrUniform("getActiveUniform",program,index,bufSize,length,size,type,name);var _emscripten_glGetActiveUniform=_glGetActiveUniform;var _glGetAttachedShaders=(program,maxCount,count,shaders)=>{var result=GLctx.getAttachedShaders(GL.programs[program]);var len=result.length;if(len>maxCount){len=maxCount}HEAP32[count>>2]=len;for(var i=0;i>2]=id}};var _emscripten_glGetAttachedShaders=_glGetAttachedShaders;var _glGetAttribLocation=(program,name)=>GLctx.getAttribLocation(GL.programs[program],UTF8ToString(name));var _emscripten_glGetAttribLocation=_glGetAttribLocation;var writeI53ToI64=(ptr,num)=>{HEAPU32[ptr>>2]=num;var lower=HEAPU32[ptr>>2];HEAPU32[ptr+4>>2]=(num-lower)/4294967296};var emscriptenWebGLGet=(name_,p,type)=>{if(!p){GL.recordError(1281);return}var ret=undefined;switch(name_){case 36346:ret=1;break;case 36344:if(type!=0&&type!=1){GL.recordError(1280)}return;case 36345:ret=0;break;case 34466:var formats=GLctx.getParameter(34467);ret=formats?formats.length:0;break}if(ret===undefined){var result=GLctx.getParameter(name_);switch(typeof result){case"number":ret=result;break;case"boolean":ret=result?1:0;break;case"string":GL.recordError(1280);return;case"object":if(result===null){switch(name_){case 34964:case 35725:case 34965:case 36006:case 36007:case 32873:case 34229:case 34068:{ret=0;break}default:{GL.recordError(1280);return}}}else if(result instanceof Float32Array||result instanceof Uint32Array||result instanceof Int32Array||result instanceof Array){for(var i=0;i>2]=result[i];break;case 2:HEAPF32[p+i*4>>2]=result[i];break;case 4:HEAP8[p+i]=result[i]?1:0;break}}return}else{try{ret=result.name|0}catch(e){GL.recordError(1280);err(`GL_INVALID_ENUM in glGet${type}v: Unknown object returned from WebGL getParameter(${name_})! (error: ${e})`);return}}break;default:GL.recordError(1280);err(`GL_INVALID_ENUM in glGet${type}v: Native code calling glGet${type}v(${name_}) and it returns ${result} of type ${typeof result}!`);return}}switch(type){case 1:writeI53ToI64(p,ret);break;case 0:HEAP32[p>>2]=ret;break;case 2:HEAPF32[p>>2]=ret;break;case 4:HEAP8[p]=ret?1:0;break}};var _glGetBooleanv=(name_,p)=>emscriptenWebGLGet(name_,p,4);var _emscripten_glGetBooleanv=_glGetBooleanv;var _glGetBufferParameteriv=(target,value,data)=>{if(!data){GL.recordError(1281);return}HEAP32[data>>2]=GLctx.getBufferParameter(target,value)};var _emscripten_glGetBufferParameteriv=_glGetBufferParameteriv;var _glGetError=()=>{var error=GLctx.getError()||GL.lastError;GL.lastError=0;return error};var _emscripten_glGetError=_glGetError;var _glGetFloatv=(name_,p)=>emscriptenWebGLGet(name_,p,2);var _emscripten_glGetFloatv=_glGetFloatv;var _glGetFramebufferAttachmentParameteriv=(target,attachment,pname,params)=>{var result=GLctx.getFramebufferAttachmentParameter(target,attachment,pname);if(result instanceof WebGLRenderbuffer||result instanceof WebGLTexture){result=result.name|0}HEAP32[params>>2]=result};var _emscripten_glGetFramebufferAttachmentParameteriv=_glGetFramebufferAttachmentParameteriv;var _glGetIntegerv=(name_,p)=>emscriptenWebGLGet(name_,p,0);var _emscripten_glGetIntegerv=_glGetIntegerv;var _glGetProgramInfoLog=(program,maxLength,length,infoLog)=>{var log=GLctx.getProgramInfoLog(GL.programs[program]);if(log===null)log="(unknown error)";var numBytesWrittenExclNull=maxLength>0&&infoLog?stringToUTF8(log,infoLog,maxLength):0;if(length)HEAP32[length>>2]=numBytesWrittenExclNull};var _emscripten_glGetProgramInfoLog=_glGetProgramInfoLog;var _glGetProgramiv=(program,pname,p)=>{if(!p){GL.recordError(1281);return}if(program>=GL.counter){GL.recordError(1281);return}program=GL.programs[program];if(pname==35716){var log=GLctx.getProgramInfoLog(program);if(log===null)log="(unknown error)";HEAP32[p>>2]=log.length+1}else if(pname==35719){if(!program.maxUniformLength){var numActiveUniforms=GLctx.getProgramParameter(program,35718);for(var i=0;i>2]=program.maxUniformLength}else if(pname==35722){if(!program.maxAttributeLength){var numActiveAttributes=GLctx.getProgramParameter(program,35721);for(var i=0;i>2]=program.maxAttributeLength}else if(pname==35381){if(!program.maxUniformBlockNameLength){var numActiveUniformBlocks=GLctx.getProgramParameter(program,35382);for(var i=0;i>2]=program.maxUniformBlockNameLength}else{HEAP32[p>>2]=GLctx.getProgramParameter(program,pname)}};var _emscripten_glGetProgramiv=_glGetProgramiv;var _glGetQueryObjecti64vEXT=(id,pname,params)=>{if(!params){GL.recordError(1281);return}var query=GL.queries[id];var param;{param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname)}var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}writeI53ToI64(params,ret)};var _emscripten_glGetQueryObjecti64vEXT=_glGetQueryObjecti64vEXT;var _glGetQueryObjectivEXT=(id,pname,params)=>{if(!params){GL.recordError(1281);return}var query=GL.queries[id];var param=GLctx.disjointTimerQueryExt["getQueryObjectEXT"](query,pname);var ret;if(typeof param=="boolean"){ret=param?1:0}else{ret=param}HEAP32[params>>2]=ret};var _emscripten_glGetQueryObjectivEXT=_glGetQueryObjectivEXT;var _glGetQueryObjectui64vEXT=_glGetQueryObjecti64vEXT;var _emscripten_glGetQueryObjectui64vEXT=_glGetQueryObjectui64vEXT;var _glGetQueryObjectuivEXT=_glGetQueryObjectivEXT;var _emscripten_glGetQueryObjectuivEXT=_glGetQueryObjectuivEXT;var _glGetQueryivEXT=(target,pname,params)=>{if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.disjointTimerQueryExt["getQueryEXT"](target,pname)};var _emscripten_glGetQueryivEXT=_glGetQueryivEXT;var _glGetRenderbufferParameteriv=(target,pname,params)=>{if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.getRenderbufferParameter(target,pname)};var _emscripten_glGetRenderbufferParameteriv=_glGetRenderbufferParameteriv;var _glGetShaderInfoLog=(shader,maxLength,length,infoLog)=>{var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";var numBytesWrittenExclNull=maxLength>0&&infoLog?stringToUTF8(log,infoLog,maxLength):0;if(length)HEAP32[length>>2]=numBytesWrittenExclNull};var _emscripten_glGetShaderInfoLog=_glGetShaderInfoLog;var _glGetShaderPrecisionFormat=(shaderType,precisionType,range,precision)=>{var result=GLctx.getShaderPrecisionFormat(shaderType,precisionType);HEAP32[range>>2]=result.rangeMin;HEAP32[range+4>>2]=result.rangeMax;HEAP32[precision>>2]=result.precision};var _emscripten_glGetShaderPrecisionFormat=_glGetShaderPrecisionFormat;var _glGetShaderSource=(shader,bufSize,length,source)=>{var result=GLctx.getShaderSource(GL.shaders[shader]);if(!result)return;var numBytesWrittenExclNull=bufSize>0&&source?stringToUTF8(result,source,bufSize):0;if(length)HEAP32[length>>2]=numBytesWrittenExclNull};var _emscripten_glGetShaderSource=_glGetShaderSource;var _glGetShaderiv=(shader,pname,p)=>{if(!p){GL.recordError(1281);return}if(pname==35716){var log=GLctx.getShaderInfoLog(GL.shaders[shader]);if(log===null)log="(unknown error)";var logLength=log?log.length+1:0;HEAP32[p>>2]=logLength}else if(pname==35720){var source=GLctx.getShaderSource(GL.shaders[shader]);var sourceLength=source?source.length+1:0;HEAP32[p>>2]=sourceLength}else{HEAP32[p>>2]=GLctx.getShaderParameter(GL.shaders[shader],pname)}};var _emscripten_glGetShaderiv=_glGetShaderiv;var webglGetExtensions=()=>{var exts=getEmscriptenSupportedExtensions(GLctx);exts=exts.concat(exts.map(e=>"GL_"+e));return exts};var _glGetString=name_=>{var ret=GL.stringCache[name_];if(!ret){switch(name_){case 7939:ret=stringToNewUTF8(webglGetExtensions().join(" "));break;case 7936:case 7937:case 37445:case 37446:var s=GLctx.getParameter(name_);if(!s){GL.recordError(1280)}ret=s?stringToNewUTF8(s):0;break;case 7938:var webGLVersion=GLctx.getParameter(7938);var glVersion=`OpenGL ES 2.0 (${webGLVersion})`;ret=stringToNewUTF8(glVersion);break;case 35724:var glslVersion=GLctx.getParameter(35724);var ver_re=/^WebGL GLSL ES ([0-9]\.[0-9][0-9]?)(?:$| .*)/;var ver_num=glslVersion.match(ver_re);if(ver_num!==null){if(ver_num[1].length==3)ver_num[1]=ver_num[1]+"0";glslVersion=`OpenGL ES GLSL ES ${ver_num[1]} (${glslVersion})`}ret=stringToNewUTF8(glslVersion);break;default:GL.recordError(1280)}GL.stringCache[name_]=ret}return ret};var _emscripten_glGetString=_glGetString;var _glGetTexParameterfv=(target,pname,params)=>{if(!params){GL.recordError(1281);return}HEAPF32[params>>2]=GLctx.getTexParameter(target,pname)};var _emscripten_glGetTexParameterfv=_glGetTexParameterfv;var _glGetTexParameteriv=(target,pname,params)=>{if(!params){GL.recordError(1281);return}HEAP32[params>>2]=GLctx.getTexParameter(target,pname)};var _emscripten_glGetTexParameteriv=_glGetTexParameteriv;var jstoi_q=str=>parseInt(str);var webglGetLeftBracePos=name=>name.slice(-1)=="]"&&name.lastIndexOf("[");var webglPrepareUniformLocationsBeforeFirstUse=program=>{var uniformLocsById=program.uniformLocsById,uniformSizeAndIdsByName=program.uniformSizeAndIdsByName,i,j;if(!uniformLocsById){program.uniformLocsById=uniformLocsById={};program.uniformArrayNamesById={};var numActiveUniforms=GLctx.getProgramParameter(program,35718);for(i=0;i0?nm.slice(0,lb):nm;var id=program.uniformIdCounter;program.uniformIdCounter+=sz;uniformSizeAndIdsByName[arrayName]=[sz,id];for(j=0;j{name=UTF8ToString(name);if(program=GL.programs[program]){webglPrepareUniformLocationsBeforeFirstUse(program);var uniformLocsById=program.uniformLocsById;var arrayIndex=0;var uniformBaseName=name;var leftBrace=webglGetLeftBracePos(name);if(leftBrace>0){arrayIndex=jstoi_q(name.slice(leftBrace+1))>>>0;uniformBaseName=name.slice(0,leftBrace)}var sizeAndId=program.uniformSizeAndIdsByName[uniformBaseName];if(sizeAndId&&arrayIndex{var p=GLctx.currentProgram;if(p){var webglLoc=p.uniformLocsById[location];if(typeof webglLoc=="number"){p.uniformLocsById[location]=webglLoc=GLctx.getUniformLocation(p,p.uniformArrayNamesById[location]+(webglLoc>0?`[${webglLoc}]`:""))}return webglLoc}else{GL.recordError(1282)}};var emscriptenWebGLGetUniform=(program,location,params,type)=>{if(!params){GL.recordError(1281);return}program=GL.programs[program];webglPrepareUniformLocationsBeforeFirstUse(program);var data=GLctx.getUniform(program,webglGetUniformLocation(location));if(typeof data=="number"||typeof data=="boolean"){switch(type){case 0:HEAP32[params>>2]=data;break;case 2:HEAPF32[params>>2]=data;break}}else{for(var i=0;i>2]=data[i];break;case 2:HEAPF32[params+i*4>>2]=data[i];break}}}};var _glGetUniformfv=(program,location,params)=>{emscriptenWebGLGetUniform(program,location,params,2)};var _emscripten_glGetUniformfv=_glGetUniformfv;var _glGetUniformiv=(program,location,params)=>{emscriptenWebGLGetUniform(program,location,params,0)};var _emscripten_glGetUniformiv=_glGetUniformiv;var _glGetVertexAttribPointerv=(index,pname,pointer)=>{if(!pointer){GL.recordError(1281);return}HEAP32[pointer>>2]=GLctx.getVertexAttribOffset(index,pname)};var _emscripten_glGetVertexAttribPointerv=_glGetVertexAttribPointerv;var emscriptenWebGLGetVertexAttrib=(index,pname,params,type)=>{if(!params){GL.recordError(1281);return}var data=GLctx.getVertexAttrib(index,pname);if(pname==34975){HEAP32[params>>2]=data&&data["name"]}else if(typeof data=="number"||typeof data=="boolean"){switch(type){case 0:HEAP32[params>>2]=data;break;case 2:HEAPF32[params>>2]=data;break;case 5:HEAP32[params>>2]=Math.fround(data);break}}else{for(var i=0;i>2]=data[i];break;case 2:HEAPF32[params+i*4>>2]=data[i];break;case 5:HEAP32[params+i*4>>2]=Math.fround(data[i]);break}}}};var _glGetVertexAttribfv=(index,pname,params)=>{emscriptenWebGLGetVertexAttrib(index,pname,params,2)};var _emscripten_glGetVertexAttribfv=_glGetVertexAttribfv;var _glGetVertexAttribiv=(index,pname,params)=>{emscriptenWebGLGetVertexAttrib(index,pname,params,5)};var _emscripten_glGetVertexAttribiv=_glGetVertexAttribiv;var _glHint=(x0,x1)=>GLctx.hint(x0,x1);var _emscripten_glHint=_glHint;var _glIsBuffer=buffer=>{var b=GL.buffers[buffer];if(!b)return 0;return GLctx.isBuffer(b)};var _emscripten_glIsBuffer=_glIsBuffer;var _glIsEnabled=x0=>GLctx.isEnabled(x0);var _emscripten_glIsEnabled=_glIsEnabled;var _glIsFramebuffer=framebuffer=>{var fb=GL.framebuffers[framebuffer];if(!fb)return 0;return GLctx.isFramebuffer(fb)};var _emscripten_glIsFramebuffer=_glIsFramebuffer;var _glIsProgram=program=>{program=GL.programs[program];if(!program)return 0;return GLctx.isProgram(program)};var _emscripten_glIsProgram=_glIsProgram;var _glIsQueryEXT=id=>{var query=GL.queries[id];if(!query)return 0;return GLctx.disjointTimerQueryExt["isQueryEXT"](query)};var _emscripten_glIsQueryEXT=_glIsQueryEXT;var _glIsRenderbuffer=renderbuffer=>{var rb=GL.renderbuffers[renderbuffer];if(!rb)return 0;return GLctx.isRenderbuffer(rb)};var _emscripten_glIsRenderbuffer=_glIsRenderbuffer;var _glIsShader=shader=>{var s=GL.shaders[shader];if(!s)return 0;return GLctx.isShader(s)};var _emscripten_glIsShader=_glIsShader;var _glIsTexture=id=>{var texture=GL.textures[id];if(!texture)return 0;return GLctx.isTexture(texture)};var _emscripten_glIsTexture=_glIsTexture;var _glIsVertexArray=array=>{var vao=GL.vaos[array];if(!vao)return 0;return GLctx.isVertexArray(vao)};var _glIsVertexArrayOES=_glIsVertexArray;var _emscripten_glIsVertexArrayOES=_glIsVertexArrayOES;var _glLineWidth=x0=>GLctx.lineWidth(x0);var _emscripten_glLineWidth=_glLineWidth;var _glLinkProgram=program=>{program=GL.programs[program];GLctx.linkProgram(program);program.uniformLocsById=0;program.uniformSizeAndIdsByName={}};var _emscripten_glLinkProgram=_glLinkProgram;var _glPixelStorei=(pname,param)=>{if(pname==3317){GL.unpackAlignment=param}else if(pname==3314){GL.unpackRowLength=param}GLctx.pixelStorei(pname,param)};var _emscripten_glPixelStorei=_glPixelStorei;var _glPolygonModeWEBGL=(face,mode)=>{GLctx.webglPolygonMode["polygonModeWEBGL"](face,mode)};var _emscripten_glPolygonModeWEBGL=_glPolygonModeWEBGL;var _glPolygonOffset=(x0,x1)=>GLctx.polygonOffset(x0,x1);var _emscripten_glPolygonOffset=_glPolygonOffset;var _glPolygonOffsetClampEXT=(factor,units,clamp)=>{GLctx.extPolygonOffsetClamp["polygonOffsetClampEXT"](factor,units,clamp)};var _emscripten_glPolygonOffsetClampEXT=_glPolygonOffsetClampEXT;var _glQueryCounterEXT=(id,target)=>{GLctx.disjointTimerQueryExt["queryCounterEXT"](GL.queries[id],target)};var _emscripten_glQueryCounterEXT=_glQueryCounterEXT;var computeUnpackAlignedImageSize=(width,height,sizePerPixel)=>{function roundedToNextMultipleOf(x,y){return x+y-1&-y}var plainRowSize=(GL.unpackRowLength||width)*sizePerPixel;var alignedRowSize=roundedToNextMultipleOf(plainRowSize,GL.unpackAlignment);return height*alignedRowSize};var colorChannelsInGlTextureFormat=format=>{var colorChannels={5:3,6:4,8:2,29502:3,29504:4};return colorChannels[format-6402]||1};var heapObjectForWebGLType=type=>{type-=5120;if(type==1)return HEAPU8;if(type==4)return HEAP32;if(type==6)return HEAPF32;if(type==5||type==28922)return HEAPU32;return HEAPU16};var toTypedArrayIndex=(pointer,heap)=>pointer>>>31-Math.clz32(heap.BYTES_PER_ELEMENT);var emscriptenWebGLGetTexPixelData=(type,format,width,height,pixels,internalFormat)=>{var heap=heapObjectForWebGLType(type);var sizePerPixel=colorChannelsInGlTextureFormat(format)*heap.BYTES_PER_ELEMENT;var bytes=computeUnpackAlignedImageSize(width,height,sizePerPixel);return heap.subarray(toTypedArrayIndex(pixels,heap),toTypedArrayIndex(pixels+bytes,heap))};var _glReadPixels=(x,y,width,height,format,type,pixels)=>{var pixelData=emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,format);if(!pixelData){GL.recordError(1280);return}GLctx.readPixels(x,y,width,height,format,type,pixelData)};var _emscripten_glReadPixels=_glReadPixels;var _glReleaseShaderCompiler=()=>{};var _emscripten_glReleaseShaderCompiler=_glReleaseShaderCompiler;var _glRenderbufferStorage=(x0,x1,x2,x3)=>GLctx.renderbufferStorage(x0,x1,x2,x3);var _emscripten_glRenderbufferStorage=_glRenderbufferStorage;var _glSampleCoverage=(value,invert)=>{GLctx.sampleCoverage(value,!!invert)};var _emscripten_glSampleCoverage=_glSampleCoverage;var _glScissor=(x0,x1,x2,x3)=>GLctx.scissor(x0,x1,x2,x3);var _emscripten_glScissor=_glScissor;var _glShaderBinary=(count,shaders,binaryformat,binary,length)=>{GL.recordError(1280)};var _emscripten_glShaderBinary=_glShaderBinary;var _glShaderSource=(shader,count,string,length)=>{var source=GL.getSource(shader,count,string,length);GLctx.shaderSource(GL.shaders[shader],source)};var _emscripten_glShaderSource=_glShaderSource;var _glStencilFunc=(x0,x1,x2)=>GLctx.stencilFunc(x0,x1,x2);var _emscripten_glStencilFunc=_glStencilFunc;var _glStencilFuncSeparate=(x0,x1,x2,x3)=>GLctx.stencilFuncSeparate(x0,x1,x2,x3);var _emscripten_glStencilFuncSeparate=_glStencilFuncSeparate;var _glStencilMask=x0=>GLctx.stencilMask(x0);var _emscripten_glStencilMask=_glStencilMask;var _glStencilMaskSeparate=(x0,x1)=>GLctx.stencilMaskSeparate(x0,x1);var _emscripten_glStencilMaskSeparate=_glStencilMaskSeparate;var _glStencilOp=(x0,x1,x2)=>GLctx.stencilOp(x0,x1,x2);var _emscripten_glStencilOp=_glStencilOp;var _glStencilOpSeparate=(x0,x1,x2,x3)=>GLctx.stencilOpSeparate(x0,x1,x2,x3);var _emscripten_glStencilOpSeparate=_glStencilOpSeparate;var _glTexImage2D=(target,level,internalFormat,width,height,border,format,type,pixels)=>{var pixelData=pixels?emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,internalFormat):null;GLctx.texImage2D(target,level,internalFormat,width,height,border,format,type,pixelData)};var _emscripten_glTexImage2D=_glTexImage2D;var _glTexParameterf=(x0,x1,x2)=>GLctx.texParameterf(x0,x1,x2);var _emscripten_glTexParameterf=_glTexParameterf;var _glTexParameterfv=(target,pname,params)=>{var param=HEAPF32[params>>2];GLctx.texParameterf(target,pname,param)};var _emscripten_glTexParameterfv=_glTexParameterfv;var _glTexParameteri=(x0,x1,x2)=>GLctx.texParameteri(x0,x1,x2);var _emscripten_glTexParameteri=_glTexParameteri;var _glTexParameteriv=(target,pname,params)=>{var param=HEAP32[params>>2];GLctx.texParameteri(target,pname,param)};var _emscripten_glTexParameteriv=_glTexParameteriv;var _glTexSubImage2D=(target,level,xoffset,yoffset,width,height,format,type,pixels)=>{var pixelData=pixels?emscriptenWebGLGetTexPixelData(type,format,width,height,pixels,0):null;GLctx.texSubImage2D(target,level,xoffset,yoffset,width,height,format,type,pixelData)};var _emscripten_glTexSubImage2D=_glTexSubImage2D;var _glUniform1f=(location,v0)=>{GLctx.uniform1f(webglGetUniformLocation(location),v0)};var _emscripten_glUniform1f=_glUniform1f;var miniTempWebGLFloatBuffers=[];var _glUniform1fv=(location,count,value)=>{if(count<=288){var view=miniTempWebGLFloatBuffers[count];for(var i=0;i>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*4>>2)}GLctx.uniform1fv(webglGetUniformLocation(location),view)};var _emscripten_glUniform1fv=_glUniform1fv;var _glUniform1i=(location,v0)=>{GLctx.uniform1i(webglGetUniformLocation(location),v0)};var _emscripten_glUniform1i=_glUniform1i;var miniTempWebGLIntBuffers=[];var _glUniform1iv=(location,count,value)=>{if(count<=288){var view=miniTempWebGLIntBuffers[count];for(var i=0;i>2]}}else{var view=HEAP32.subarray(value>>2,value+count*4>>2)}GLctx.uniform1iv(webglGetUniformLocation(location),view)};var _emscripten_glUniform1iv=_glUniform1iv;var _glUniform2f=(location,v0,v1)=>{GLctx.uniform2f(webglGetUniformLocation(location),v0,v1)};var _emscripten_glUniform2f=_glUniform2f;var _glUniform2fv=(location,count,value)=>{if(count<=144){count*=2;var view=miniTempWebGLFloatBuffers[count];for(var i=0;i>2];view[i+1]=HEAPF32[value+(4*i+4)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*8>>2)}GLctx.uniform2fv(webglGetUniformLocation(location),view)};var _emscripten_glUniform2fv=_glUniform2fv;var _glUniform2i=(location,v0,v1)=>{GLctx.uniform2i(webglGetUniformLocation(location),v0,v1)};var _emscripten_glUniform2i=_glUniform2i;var _glUniform2iv=(location,count,value)=>{if(count<=144){count*=2;var view=miniTempWebGLIntBuffers[count];for(var i=0;i>2];view[i+1]=HEAP32[value+(4*i+4)>>2]}}else{var view=HEAP32.subarray(value>>2,value+count*8>>2)}GLctx.uniform2iv(webglGetUniformLocation(location),view)};var _emscripten_glUniform2iv=_glUniform2iv;var _glUniform3f=(location,v0,v1,v2)=>{GLctx.uniform3f(webglGetUniformLocation(location),v0,v1,v2)};var _emscripten_glUniform3f=_glUniform3f;var _glUniform3fv=(location,count,value)=>{if(count<=96){count*=3;var view=miniTempWebGLFloatBuffers[count];for(var i=0;i>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*12>>2)}GLctx.uniform3fv(webglGetUniformLocation(location),view)};var _emscripten_glUniform3fv=_glUniform3fv;var _glUniform3i=(location,v0,v1,v2)=>{GLctx.uniform3i(webglGetUniformLocation(location),v0,v1,v2)};var _emscripten_glUniform3i=_glUniform3i;var _glUniform3iv=(location,count,value)=>{if(count<=96){count*=3;var view=miniTempWebGLIntBuffers[count];for(var i=0;i>2];view[i+1]=HEAP32[value+(4*i+4)>>2];view[i+2]=HEAP32[value+(4*i+8)>>2]}}else{var view=HEAP32.subarray(value>>2,value+count*12>>2)}GLctx.uniform3iv(webglGetUniformLocation(location),view)};var _emscripten_glUniform3iv=_glUniform3iv;var _glUniform4f=(location,v0,v1,v2,v3)=>{GLctx.uniform4f(webglGetUniformLocation(location),v0,v1,v2,v3)};var _emscripten_glUniform4f=_glUniform4f;var _glUniform4fv=(location,count,value)=>{if(count<=72){var view=miniTempWebGLFloatBuffers[4*count];var heap=HEAPF32;value=value>>2;count*=4;for(var i=0;i>2,value+count*16>>2)}GLctx.uniform4fv(webglGetUniformLocation(location),view)};var _emscripten_glUniform4fv=_glUniform4fv;var _glUniform4i=(location,v0,v1,v2,v3)=>{GLctx.uniform4i(webglGetUniformLocation(location),v0,v1,v2,v3)};var _emscripten_glUniform4i=_glUniform4i;var _glUniform4iv=(location,count,value)=>{if(count<=72){count*=4;var view=miniTempWebGLIntBuffers[count];for(var i=0;i>2];view[i+1]=HEAP32[value+(4*i+4)>>2];view[i+2]=HEAP32[value+(4*i+8)>>2];view[i+3]=HEAP32[value+(4*i+12)>>2]}}else{var view=HEAP32.subarray(value>>2,value+count*16>>2)}GLctx.uniform4iv(webglGetUniformLocation(location),view)};var _emscripten_glUniform4iv=_glUniform4iv;var _glUniformMatrix2fv=(location,count,transpose,value)=>{if(count<=72){count*=4;var view=miniTempWebGLFloatBuffers[count];for(var i=0;i>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*16>>2)}GLctx.uniformMatrix2fv(webglGetUniformLocation(location),!!transpose,view)};var _emscripten_glUniformMatrix2fv=_glUniformMatrix2fv;var _glUniformMatrix3fv=(location,count,transpose,value)=>{if(count<=32){count*=9;var view=miniTempWebGLFloatBuffers[count];for(var i=0;i>2];view[i+1]=HEAPF32[value+(4*i+4)>>2];view[i+2]=HEAPF32[value+(4*i+8)>>2];view[i+3]=HEAPF32[value+(4*i+12)>>2];view[i+4]=HEAPF32[value+(4*i+16)>>2];view[i+5]=HEAPF32[value+(4*i+20)>>2];view[i+6]=HEAPF32[value+(4*i+24)>>2];view[i+7]=HEAPF32[value+(4*i+28)>>2];view[i+8]=HEAPF32[value+(4*i+32)>>2]}}else{var view=HEAPF32.subarray(value>>2,value+count*36>>2)}GLctx.uniformMatrix3fv(webglGetUniformLocation(location),!!transpose,view)};var _emscripten_glUniformMatrix3fv=_glUniformMatrix3fv;var _glUniformMatrix4fv=(location,count,transpose,value)=>{if(count<=18){var view=miniTempWebGLFloatBuffers[16*count];var heap=HEAPF32;value=value>>2;count*=16;for(var i=0;i>2,value+count*64>>2)}GLctx.uniformMatrix4fv(webglGetUniformLocation(location),!!transpose,view)};var _emscripten_glUniformMatrix4fv=_glUniformMatrix4fv;var _glUseProgram=program=>{program=GL.programs[program];GLctx.useProgram(program);GLctx.currentProgram=program};var _emscripten_glUseProgram=_glUseProgram;var _glValidateProgram=program=>{GLctx.validateProgram(GL.programs[program])};var _emscripten_glValidateProgram=_glValidateProgram;var _glVertexAttrib1f=(x0,x1)=>GLctx.vertexAttrib1f(x0,x1);var _emscripten_glVertexAttrib1f=_glVertexAttrib1f;var _glVertexAttrib1fv=(index,v)=>{GLctx.vertexAttrib1f(index,HEAPF32[v>>2])};var _emscripten_glVertexAttrib1fv=_glVertexAttrib1fv;var _glVertexAttrib2f=(x0,x1,x2)=>GLctx.vertexAttrib2f(x0,x1,x2);var _emscripten_glVertexAttrib2f=_glVertexAttrib2f;var _glVertexAttrib2fv=(index,v)=>{GLctx.vertexAttrib2f(index,HEAPF32[v>>2],HEAPF32[v+4>>2])};var _emscripten_glVertexAttrib2fv=_glVertexAttrib2fv;var _glVertexAttrib3f=(x0,x1,x2,x3)=>GLctx.vertexAttrib3f(x0,x1,x2,x3);var _emscripten_glVertexAttrib3f=_glVertexAttrib3f;var _glVertexAttrib3fv=(index,v)=>{GLctx.vertexAttrib3f(index,HEAPF32[v>>2],HEAPF32[v+4>>2],HEAPF32[v+8>>2])};var _emscripten_glVertexAttrib3fv=_glVertexAttrib3fv;var _glVertexAttrib4f=(x0,x1,x2,x3,x4)=>GLctx.vertexAttrib4f(x0,x1,x2,x3,x4);var _emscripten_glVertexAttrib4f=_glVertexAttrib4f;var _glVertexAttrib4fv=(index,v)=>{GLctx.vertexAttrib4f(index,HEAPF32[v>>2],HEAPF32[v+4>>2],HEAPF32[v+8>>2],HEAPF32[v+12>>2])};var _emscripten_glVertexAttrib4fv=_glVertexAttrib4fv;var _glVertexAttribDivisor=(index,divisor)=>{GLctx.vertexAttribDivisor(index,divisor)};var _glVertexAttribDivisorANGLE=_glVertexAttribDivisor;var _emscripten_glVertexAttribDivisorANGLE=_glVertexAttribDivisorANGLE;var _glVertexAttribPointer=(index,size,type,normalized,stride,ptr)=>{GLctx.vertexAttribPointer(index,size,type,!!normalized,stride,ptr)};var _emscripten_glVertexAttribPointer=_glVertexAttribPointer;var _glViewport=(x0,x1,x2,x3)=>GLctx.viewport(x0,x1,x2,x3);var _emscripten_glViewport=_glViewport;var _emscripten_has_asyncify=()=>0;var doRequestFullscreen=(target,strategy)=>{if(!JSEvents.fullscreenEnabled())return-1;target=findEventTarget(target);if(!target)return-4;if(!target.requestFullscreen&&!target.webkitRequestFullscreen){return-3}if(!JSEvents.canPerformEventHandlerRequests()){if(strategy.deferUntilInEventHandler){JSEvents.deferCall(JSEvents_requestFullscreen,1,[target,strategy]);return 1}return-2}return JSEvents_requestFullscreen(target,strategy)};function _emscripten_request_fullscreen_strategy(target,deferUntilInEventHandler,fullscreenStrategy){if(ENVIRONMENT_IS_PTHREAD)return proxyToMainThread(42,0,1,target,deferUntilInEventHandler,fullscreenStrategy);var strategy={scaleMode:HEAP32[fullscreenStrategy>>2],canvasResolutionScaleMode:HEAP32[fullscreenStrategy+4>>2],filteringMode:HEAP32[fullscreenStrategy+8>>2],deferUntilInEventHandler,canvasResizedCallbackTargetThread:HEAP32[fullscreenStrategy+20>>2],canvasResizedCallback:HEAP32[fullscreenStrategy+12>>2],canvasResizedCallbackUserData:HEAP32[fullscreenStrategy+16>>2]};return doRequestFullscreen(target,strategy)}function _emscripten_request_pointerlock(target,deferUntilInEventHandler){if(ENVIRONMENT_IS_PTHREAD)return proxyToMainThread(43,0,1,target,deferUntilInEventHandler);target=findEventTarget(target);if(!target)return-4;if(!target.requestPointerLock){return-1}if(!JSEvents.canPerformEventHandlerRequests()){if(deferUntilInEventHandler){JSEvents.deferCall(requestPointerLock,2,[target]);return 1}return-2}return requestPointerLock(target)}var abortOnCannotGrowMemory=requestedSize=>{abort("OOM")};var _emscripten_resize_heap=requestedSize=>{var oldSize=HEAPU8.length;requestedSize>>>=0;abortOnCannotGrowMemory(requestedSize)};function _emscripten_sample_gamepad_data(){if(ENVIRONMENT_IS_PTHREAD)return proxyToMainThread(44,0,1);try{if(navigator.getGamepads)return(JSEvents.lastGamepadState=navigator.getGamepads())?0:-1}catch(e){navigator.getGamepads=null}return-1}var registerBeforeUnloadEventCallback=(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString)=>{var beforeUnloadEventHandlerFunc=(e=event)=>{var confirmationMessage=getWasmTableEntry(callbackfunc)(eventTypeId,0,userData);if(confirmationMessage){confirmationMessage=UTF8ToString(confirmationMessage)}if(confirmationMessage){e.preventDefault();e.returnValue=confirmationMessage;return confirmationMessage}};var eventHandler={target:findEventTarget(target),eventTypeString,callbackfunc,handlerFunc:beforeUnloadEventHandlerFunc,useCapture};return JSEvents.registerOrRemoveHandler(eventHandler)};function _emscripten_set_beforeunload_callback_on_thread(userData,callbackfunc,targetThread){if(ENVIRONMENT_IS_PTHREAD)return proxyToMainThread(45,0,1,userData,callbackfunc,targetThread);if(typeof onbeforeunload=="undefined")return-1;if(targetThread!==1)return-5;return registerBeforeUnloadEventCallback(2,userData,true,callbackfunc,28,"beforeunload")}var registerFocusEventCallback=(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread)=>{targetThread=JSEvents.getTargetThreadForEventCallback(targetThread);JSEvents.focusEvent||=_malloc(256);var focusEventHandlerFunc=(e=event)=>{var nodeName=JSEvents.getNodeNameForTarget(e.target);var id=e.target.id?e.target.id:"";var focusEvent=targetThread?_malloc(256):JSEvents.focusEvent;stringToUTF8(nodeName,focusEvent+0,128);stringToUTF8(id,focusEvent+128,128);if(targetThread)__emscripten_run_callback_on_thread(targetThread,callbackfunc,eventTypeId,focusEvent,userData);else if(getWasmTableEntry(callbackfunc)(eventTypeId,focusEvent,userData))e.preventDefault()};var eventHandler={target:findEventTarget(target),eventTypeString,callbackfunc,handlerFunc:focusEventHandlerFunc,useCapture};return JSEvents.registerOrRemoveHandler(eventHandler)};function _emscripten_set_blur_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){if(ENVIRONMENT_IS_PTHREAD)return proxyToMainThread(46,0,1,target,userData,useCapture,callbackfunc,targetThread);return registerFocusEventCallback(target,userData,useCapture,callbackfunc,12,"blur",targetThread)}function _emscripten_set_element_css_size(target,width,height){if(ENVIRONMENT_IS_PTHREAD)return proxyToMainThread(47,0,1,target,width,height);target=findEventTarget(target);if(!target)return-4;target.style.width=width+"px";target.style.height=height+"px";return 0}function _emscripten_set_focus_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){if(ENVIRONMENT_IS_PTHREAD)return proxyToMainThread(48,0,1,target,userData,useCapture,callbackfunc,targetThread);return registerFocusEventCallback(target,userData,useCapture,callbackfunc,13,"focus",targetThread)}var fillFullscreenChangeEventData=eventStruct=>{var fullscreenElement=document.fullscreenElement||document.mozFullScreenElement||document.webkitFullscreenElement||document.msFullscreenElement;var isFullscreen=!!fullscreenElement;HEAP8[eventStruct]=isFullscreen;HEAP8[eventStruct+1]=JSEvents.fullscreenEnabled();var reportedElement=isFullscreen?fullscreenElement:JSEvents.previousFullscreenElement;var nodeName=JSEvents.getNodeNameForTarget(reportedElement);var id=reportedElement?.id||"";stringToUTF8(nodeName,eventStruct+2,128);stringToUTF8(id,eventStruct+130,128);HEAP32[eventStruct+260>>2]=reportedElement?reportedElement.clientWidth:0;HEAP32[eventStruct+264>>2]=reportedElement?reportedElement.clientHeight:0;HEAP32[eventStruct+268>>2]=screen.width;HEAP32[eventStruct+272>>2]=screen.height;if(isFullscreen){JSEvents.previousFullscreenElement=fullscreenElement}};var registerFullscreenChangeEventCallback=(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread)=>{targetThread=JSEvents.getTargetThreadForEventCallback(targetThread);JSEvents.fullscreenChangeEvent||=_malloc(276);var fullscreenChangeEventhandlerFunc=(e=event)=>{var fullscreenChangeEvent=targetThread?_malloc(276):JSEvents.fullscreenChangeEvent;fillFullscreenChangeEventData(fullscreenChangeEvent);if(targetThread)__emscripten_run_callback_on_thread(targetThread,callbackfunc,eventTypeId,fullscreenChangeEvent,userData);else if(getWasmTableEntry(callbackfunc)(eventTypeId,fullscreenChangeEvent,userData))e.preventDefault()};var eventHandler={target,eventTypeString,callbackfunc,handlerFunc:fullscreenChangeEventhandlerFunc,useCapture};return JSEvents.registerOrRemoveHandler(eventHandler)};function _emscripten_set_fullscreenchange_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){if(ENVIRONMENT_IS_PTHREAD)return proxyToMainThread(49,0,1,target,userData,useCapture,callbackfunc,targetThread);if(!JSEvents.fullscreenEnabled())return-1;target=findEventTarget(target);if(!target)return-4;registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"webkitfullscreenchange",targetThread);return registerFullscreenChangeEventCallback(target,userData,useCapture,callbackfunc,19,"fullscreenchange",targetThread)}var registerGamepadEventCallback=(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread)=>{targetThread=JSEvents.getTargetThreadForEventCallback(targetThread);JSEvents.gamepadEvent||=_malloc(1240);var gamepadEventHandlerFunc=(e=event)=>{var gamepadEvent=targetThread?_malloc(1240):JSEvents.gamepadEvent;fillGamepadEventData(gamepadEvent,e["gamepad"]);if(targetThread)__emscripten_run_callback_on_thread(targetThread,callbackfunc,eventTypeId,gamepadEvent,userData);else if(getWasmTableEntry(callbackfunc)(eventTypeId,gamepadEvent,userData))e.preventDefault()};var eventHandler={target:findEventTarget(target),allowsDeferredCalls:true,eventTypeString,callbackfunc,handlerFunc:gamepadEventHandlerFunc,useCapture};return JSEvents.registerOrRemoveHandler(eventHandler)};function _emscripten_set_gamepadconnected_callback_on_thread(userData,useCapture,callbackfunc,targetThread){if(ENVIRONMENT_IS_PTHREAD)return proxyToMainThread(50,0,1,userData,useCapture,callbackfunc,targetThread);if(_emscripten_sample_gamepad_data())return-1;return registerGamepadEventCallback(2,userData,useCapture,callbackfunc,26,"gamepadconnected",targetThread)}function _emscripten_set_gamepaddisconnected_callback_on_thread(userData,useCapture,callbackfunc,targetThread){if(ENVIRONMENT_IS_PTHREAD)return proxyToMainThread(51,0,1,userData,useCapture,callbackfunc,targetThread);if(_emscripten_sample_gamepad_data())return-1;return registerGamepadEventCallback(2,userData,useCapture,callbackfunc,27,"gamepaddisconnected",targetThread)}var registerKeyEventCallback=(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread)=>{targetThread=JSEvents.getTargetThreadForEventCallback(targetThread);JSEvents.keyEvent||=_malloc(160);var keyEventHandlerFunc=e=>{var keyEventData=targetThread?_malloc(160):JSEvents.keyEvent;HEAPF64[keyEventData>>3]=e.timeStamp;var idx=keyEventData>>2;HEAP32[idx+2]=e.location;HEAP8[keyEventData+12]=e.ctrlKey;HEAP8[keyEventData+13]=e.shiftKey;HEAP8[keyEventData+14]=e.altKey;HEAP8[keyEventData+15]=e.metaKey;HEAP8[keyEventData+16]=e.repeat;HEAP32[idx+5]=e.charCode;HEAP32[idx+6]=e.keyCode;HEAP32[idx+7]=e.which;stringToUTF8(e.key||"",keyEventData+32,32);stringToUTF8(e.code||"",keyEventData+64,32);stringToUTF8(e.char||"",keyEventData+96,32);stringToUTF8(e.locale||"",keyEventData+128,32);if(targetThread)__emscripten_run_callback_on_thread(targetThread,callbackfunc,eventTypeId,keyEventData,userData);else if(getWasmTableEntry(callbackfunc)(eventTypeId,keyEventData,userData))e.preventDefault()};var eventHandler={target:findEventTarget(target),eventTypeString,callbackfunc,handlerFunc:keyEventHandlerFunc,useCapture};return JSEvents.registerOrRemoveHandler(eventHandler)};function _emscripten_set_keydown_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){if(ENVIRONMENT_IS_PTHREAD)return proxyToMainThread(52,0,1,target,userData,useCapture,callbackfunc,targetThread);return registerKeyEventCallback(target,userData,useCapture,callbackfunc,2,"keydown",targetThread)}function _emscripten_set_keypress_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){if(ENVIRONMENT_IS_PTHREAD)return proxyToMainThread(53,0,1,target,userData,useCapture,callbackfunc,targetThread);return registerKeyEventCallback(target,userData,useCapture,callbackfunc,1,"keypress",targetThread)}function _emscripten_set_keyup_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){if(ENVIRONMENT_IS_PTHREAD)return proxyToMainThread(54,0,1,target,userData,useCapture,callbackfunc,targetThread);return registerKeyEventCallback(target,userData,useCapture,callbackfunc,3,"keyup",targetThread)}var _emscripten_set_main_loop=(func,fps,simulateInfiniteLoop)=>{var iterFunc=getWasmTableEntry(func);setMainLoop(iterFunc,fps,simulateInfiniteLoop)};var fillMouseEventData=(eventStruct,e,target)=>{HEAPF64[eventStruct>>3]=e.timeStamp;var idx=eventStruct>>2;HEAP32[idx+2]=e.screenX;HEAP32[idx+3]=e.screenY;HEAP32[idx+4]=e.clientX;HEAP32[idx+5]=e.clientY;HEAP8[eventStruct+24]=e.ctrlKey;HEAP8[eventStruct+25]=e.shiftKey;HEAP8[eventStruct+26]=e.altKey;HEAP8[eventStruct+27]=e.metaKey;HEAP16[idx*2+14]=e.button;HEAP16[idx*2+15]=e.buttons;HEAP32[idx+8]=e["movementX"];HEAP32[idx+9]=e["movementY"];var rect=getBoundingClientRect(target);HEAP32[idx+10]=e.clientX-(rect.left|0);HEAP32[idx+11]=e.clientY-(rect.top|0)};var registerMouseEventCallback=(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread)=>{targetThread=JSEvents.getTargetThreadForEventCallback(targetThread);JSEvents.mouseEvent||=_malloc(64);target=findEventTarget(target);var mouseEventHandlerFunc=(e=event)=>{fillMouseEventData(JSEvents.mouseEvent,e,target);if(targetThread){var mouseEventData=_malloc(64);fillMouseEventData(mouseEventData,e,target);__emscripten_run_callback_on_thread(targetThread,callbackfunc,eventTypeId,mouseEventData,userData)}else if(getWasmTableEntry(callbackfunc)(eventTypeId,JSEvents.mouseEvent,userData))e.preventDefault()};var eventHandler={target,allowsDeferredCalls:eventTypeString!="mousemove"&&eventTypeString!="mouseenter"&&eventTypeString!="mouseleave",eventTypeString,callbackfunc,handlerFunc:mouseEventHandlerFunc,useCapture};return JSEvents.registerOrRemoveHandler(eventHandler)};function _emscripten_set_mousedown_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){if(ENVIRONMENT_IS_PTHREAD)return proxyToMainThread(55,0,1,target,userData,useCapture,callbackfunc,targetThread);return registerMouseEventCallback(target,userData,useCapture,callbackfunc,5,"mousedown",targetThread)}function _emscripten_set_mouseenter_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){if(ENVIRONMENT_IS_PTHREAD)return proxyToMainThread(56,0,1,target,userData,useCapture,callbackfunc,targetThread);return registerMouseEventCallback(target,userData,useCapture,callbackfunc,33,"mouseenter",targetThread)}function _emscripten_set_mouseleave_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){if(ENVIRONMENT_IS_PTHREAD)return proxyToMainThread(57,0,1,target,userData,useCapture,callbackfunc,targetThread);return registerMouseEventCallback(target,userData,useCapture,callbackfunc,34,"mouseleave",targetThread)}function _emscripten_set_mousemove_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){if(ENVIRONMENT_IS_PTHREAD)return proxyToMainThread(58,0,1,target,userData,useCapture,callbackfunc,targetThread);return registerMouseEventCallback(target,userData,useCapture,callbackfunc,8,"mousemove",targetThread)}function _emscripten_set_mouseup_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){if(ENVIRONMENT_IS_PTHREAD)return proxyToMainThread(59,0,1,target,userData,useCapture,callbackfunc,targetThread);return registerMouseEventCallback(target,userData,useCapture,callbackfunc,6,"mouseup",targetThread)}var fillPointerlockChangeEventData=eventStruct=>{var pointerLockElement=document.pointerLockElement||document.mozPointerLockElement||document.webkitPointerLockElement||document.msPointerLockElement;var isPointerlocked=!!pointerLockElement;HEAP8[eventStruct]=isPointerlocked;var nodeName=JSEvents.getNodeNameForTarget(pointerLockElement);var id=pointerLockElement?.id||"";stringToUTF8(nodeName,eventStruct+1,128);stringToUTF8(id,eventStruct+129,128)};var registerPointerlockChangeEventCallback=(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread)=>{targetThread=JSEvents.getTargetThreadForEventCallback(targetThread);JSEvents.pointerlockChangeEvent||=_malloc(257);var pointerlockChangeEventHandlerFunc=(e=event)=>{var pointerlockChangeEvent=targetThread?_malloc(257):JSEvents.pointerlockChangeEvent;fillPointerlockChangeEventData(pointerlockChangeEvent);if(targetThread)__emscripten_run_callback_on_thread(targetThread,callbackfunc,eventTypeId,pointerlockChangeEvent,userData);else if(getWasmTableEntry(callbackfunc)(eventTypeId,pointerlockChangeEvent,userData))e.preventDefault()};var eventHandler={target,eventTypeString,callbackfunc,handlerFunc:pointerlockChangeEventHandlerFunc,useCapture};return JSEvents.registerOrRemoveHandler(eventHandler)};function _emscripten_set_pointerlockchange_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){if(ENVIRONMENT_IS_PTHREAD)return proxyToMainThread(60,0,1,target,userData,useCapture,callbackfunc,targetThread);if(!document||!document.body||!document.body.requestPointerLock&&!document.body.mozRequestPointerLock&&!document.body.webkitRequestPointerLock&&!document.body.msRequestPointerLock){return-1}target=findEventTarget(target);if(!target)return-4;registerPointerlockChangeEventCallback(target,userData,useCapture,callbackfunc,20,"mozpointerlockchange",targetThread);registerPointerlockChangeEventCallback(target,userData,useCapture,callbackfunc,20,"webkitpointerlockchange",targetThread);registerPointerlockChangeEventCallback(target,userData,useCapture,callbackfunc,20,"mspointerlockchange",targetThread);return registerPointerlockChangeEventCallback(target,userData,useCapture,callbackfunc,20,"pointerlockchange",targetThread)}var registerUiEventCallback=(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread)=>{targetThread=JSEvents.getTargetThreadForEventCallback(targetThread);JSEvents.uiEvent||=_malloc(36);target=findEventTarget(target);var uiEventHandlerFunc=(e=event)=>{if(e.target!=target){return}var b=document.body;if(!b){return}var uiEvent=targetThread?_malloc(36):JSEvents.uiEvent;HEAP32[uiEvent>>2]=0;HEAP32[uiEvent+4>>2]=b.clientWidth;HEAP32[uiEvent+8>>2]=b.clientHeight;HEAP32[uiEvent+12>>2]=innerWidth;HEAP32[uiEvent+16>>2]=innerHeight;HEAP32[uiEvent+20>>2]=outerWidth;HEAP32[uiEvent+24>>2]=outerHeight;HEAP32[uiEvent+28>>2]=pageXOffset|0;HEAP32[uiEvent+32>>2]=pageYOffset|0;if(targetThread)__emscripten_run_callback_on_thread(targetThread,callbackfunc,eventTypeId,uiEvent,userData);else if(getWasmTableEntry(callbackfunc)(eventTypeId,uiEvent,userData))e.preventDefault()};var eventHandler={target,eventTypeString,callbackfunc,handlerFunc:uiEventHandlerFunc,useCapture};return JSEvents.registerOrRemoveHandler(eventHandler)};function _emscripten_set_resize_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){if(ENVIRONMENT_IS_PTHREAD)return proxyToMainThread(61,0,1,target,userData,useCapture,callbackfunc,targetThread);return registerUiEventCallback(target,userData,useCapture,callbackfunc,10,"resize",targetThread)}var registerTouchEventCallback=(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread)=>{targetThread=JSEvents.getTargetThreadForEventCallback(targetThread);JSEvents.touchEvent||=_malloc(1552);target=findEventTarget(target);var touchEventHandlerFunc=e=>{var t,touches={},et=e.touches;for(let t of et){t.isChanged=t.onTarget=0;touches[t.identifier]=t}for(let t of e.changedTouches){t.isChanged=1;touches[t.identifier]=t}for(let t of e.targetTouches){touches[t.identifier].onTarget=1}var touchEvent=targetThread?_malloc(1552):JSEvents.touchEvent;HEAPF64[touchEvent>>3]=e.timeStamp;HEAP8[touchEvent+12]=e.ctrlKey;HEAP8[touchEvent+13]=e.shiftKey;HEAP8[touchEvent+14]=e.altKey;HEAP8[touchEvent+15]=e.metaKey;var idx=touchEvent+16;var targetRect=getBoundingClientRect(target);var numTouches=0;for(let t of Object.values(touches)){var idx32=idx>>2;HEAP32[idx32+0]=t.identifier;HEAP32[idx32+1]=t.screenX;HEAP32[idx32+2]=t.screenY;HEAP32[idx32+3]=t.clientX;HEAP32[idx32+4]=t.clientY;HEAP32[idx32+5]=t.pageX;HEAP32[idx32+6]=t.pageY;HEAP8[idx+28]=t.isChanged;HEAP8[idx+29]=t.onTarget;HEAP32[idx32+8]=t.clientX-(targetRect.left|0);HEAP32[idx32+9]=t.clientY-(targetRect.top|0);idx+=48;if(++numTouches>31){break}}HEAP32[touchEvent+8>>2]=numTouches;if(targetThread)__emscripten_run_callback_on_thread(targetThread,callbackfunc,eventTypeId,touchEvent,userData);else if(getWasmTableEntry(callbackfunc)(eventTypeId,touchEvent,userData))e.preventDefault()};var eventHandler={target,allowsDeferredCalls:eventTypeString=="touchstart"||eventTypeString=="touchend",eventTypeString,callbackfunc,handlerFunc:touchEventHandlerFunc,useCapture};return JSEvents.registerOrRemoveHandler(eventHandler)};function _emscripten_set_touchcancel_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){if(ENVIRONMENT_IS_PTHREAD)return proxyToMainThread(62,0,1,target,userData,useCapture,callbackfunc,targetThread);return registerTouchEventCallback(target,userData,useCapture,callbackfunc,25,"touchcancel",targetThread)}function _emscripten_set_touchend_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){if(ENVIRONMENT_IS_PTHREAD)return proxyToMainThread(63,0,1,target,userData,useCapture,callbackfunc,targetThread);return registerTouchEventCallback(target,userData,useCapture,callbackfunc,23,"touchend",targetThread)}function _emscripten_set_touchmove_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){if(ENVIRONMENT_IS_PTHREAD)return proxyToMainThread(64,0,1,target,userData,useCapture,callbackfunc,targetThread);return registerTouchEventCallback(target,userData,useCapture,callbackfunc,24,"touchmove",targetThread)}function _emscripten_set_touchstart_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){if(ENVIRONMENT_IS_PTHREAD)return proxyToMainThread(65,0,1,target,userData,useCapture,callbackfunc,targetThread);return registerTouchEventCallback(target,userData,useCapture,callbackfunc,22,"touchstart",targetThread)}var fillVisibilityChangeEventData=eventStruct=>{var visibilityStates=["hidden","visible","prerender","unloaded"];var visibilityState=visibilityStates.indexOf(document.visibilityState);HEAP8[eventStruct]=document.hidden;HEAP32[eventStruct+4>>2]=visibilityState};var registerVisibilityChangeEventCallback=(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread)=>{targetThread=JSEvents.getTargetThreadForEventCallback(targetThread);JSEvents.visibilityChangeEvent||=_malloc(8);var visibilityChangeEventHandlerFunc=(e=event)=>{var visibilityChangeEvent=targetThread?_malloc(8):JSEvents.visibilityChangeEvent;fillVisibilityChangeEventData(visibilityChangeEvent);if(targetThread)__emscripten_run_callback_on_thread(targetThread,callbackfunc,eventTypeId,visibilityChangeEvent,userData);else if(getWasmTableEntry(callbackfunc)(eventTypeId,visibilityChangeEvent,userData))e.preventDefault()};var eventHandler={target,eventTypeString,callbackfunc,handlerFunc:visibilityChangeEventHandlerFunc,useCapture};return JSEvents.registerOrRemoveHandler(eventHandler)};function _emscripten_set_visibilitychange_callback_on_thread(userData,useCapture,callbackfunc,targetThread){if(ENVIRONMENT_IS_PTHREAD)return proxyToMainThread(66,0,1,userData,useCapture,callbackfunc,targetThread);if(!specialHTMLTargets[1]){return-4}return registerVisibilityChangeEventCallback(specialHTMLTargets[1],userData,useCapture,callbackfunc,21,"visibilitychange",targetThread)}var registerWheelEventCallback=(target,userData,useCapture,callbackfunc,eventTypeId,eventTypeString,targetThread)=>{targetThread=JSEvents.getTargetThreadForEventCallback(targetThread);JSEvents.wheelEvent||=_malloc(96);var wheelHandlerFunc=(e=event)=>{var wheelEvent=targetThread?_malloc(96):JSEvents.wheelEvent;fillMouseEventData(wheelEvent,e,target);HEAPF64[wheelEvent+64>>3]=e["deltaX"];HEAPF64[wheelEvent+72>>3]=e["deltaY"];HEAPF64[wheelEvent+80>>3]=e["deltaZ"];HEAP32[wheelEvent+88>>2]=e["deltaMode"];if(targetThread)__emscripten_run_callback_on_thread(targetThread,callbackfunc,eventTypeId,wheelEvent,userData);else if(getWasmTableEntry(callbackfunc)(eventTypeId,wheelEvent,userData))e.preventDefault()};var eventHandler={target,allowsDeferredCalls:true,eventTypeString,callbackfunc,handlerFunc:wheelHandlerFunc,useCapture};return JSEvents.registerOrRemoveHandler(eventHandler)};function _emscripten_set_wheel_callback_on_thread(target,userData,useCapture,callbackfunc,targetThread){if(ENVIRONMENT_IS_PTHREAD)return proxyToMainThread(67,0,1,target,userData,useCapture,callbackfunc,targetThread);target=findEventTarget(target);if(!target)return-4;if(typeof target.onwheel!="undefined"){return registerWheelEventCallback(target,userData,useCapture,callbackfunc,9,"wheel",targetThread)}else{return-1}}function _emscripten_set_window_title(title){if(ENVIRONMENT_IS_PTHREAD)return proxyToMainThread(68,0,1,title);return document.title=UTF8ToString(title)}var _emscripten_sleep=()=>{throw"Please compile your program with async support in order to use asynchronous operations like emscripten_sleep"};var ENV={};var getExecutableName=()=>thisProgram||"./this.program";var getEnvStrings=()=>{if(!getEnvStrings.strings){var lang=(typeof navigator=="object"&&navigator.languages&&navigator.languages[0]||"C").replace("-","_")+".UTF-8";var env={USER:"web_user",LOGNAME:"web_user",PATH:"/",PWD:"/",HOME:"/home/web_user",LANG:lang,_:getExecutableName()};for(var x in ENV){if(ENV[x]===undefined)delete env[x];else env[x]=ENV[x]}var strings=[];for(var x in env){strings.push(`${x}=${env[x]}`)}getEnvStrings.strings=strings}return getEnvStrings.strings};var stringToAscii=(str,buffer)=>{for(var i=0;i{var ptr=environ_buf+bufSize;HEAPU32[__environ+i*4>>2]=ptr;stringToAscii(string,ptr);bufSize+=string.length+1});return 0};var _environ_sizes_get=function(penviron_count,penviron_buf_size){if(ENVIRONMENT_IS_PTHREAD)return proxyToMainThread(70,0,1,penviron_count,penviron_buf_size);var strings=getEnvStrings();HEAPU32[penviron_count>>2]=strings.length;var bufSize=0;strings.forEach(string=>bufSize+=string.length+1);HEAPU32[penviron_buf_size>>2]=bufSize;return 0};function _fd_close(fd){if(ENVIRONMENT_IS_PTHREAD)return proxyToMainThread(71,0,1,fd);try{var stream=SYSCALLS.getStreamFromFD(fd);FS.close(stream);return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return e.errno}}function _fd_fdstat_get(fd,pbuf){if(ENVIRONMENT_IS_PTHREAD)return proxyToMainThread(72,0,1,fd,pbuf);try{var rightsBase=0;var rightsInheriting=0;var flags=0;{var stream=SYSCALLS.getStreamFromFD(fd);var type=stream.tty?2:FS.isDir(stream.mode)?3:FS.isLink(stream.mode)?7:4}HEAP8[pbuf]=type;HEAP16[pbuf+2>>1]=flags;HEAP64[pbuf+8>>3]=BigInt(rightsBase);HEAP64[pbuf+16>>3]=BigInt(rightsInheriting);return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return e.errno}}var doReadv=(stream,iov,iovcnt,offset)=>{var ret=0;for(var i=0;i>2];var len=HEAPU32[iov+4>>2];iov+=8;var curr=FS.read(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr;if(curr>2]=num;return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return e.errno}}function _fd_seek(fd,offset,whence,newOffset){if(ENVIRONMENT_IS_PTHREAD)return proxyToMainThread(74,0,1,fd,offset,whence,newOffset);offset=bigintToI53Checked(offset);try{if(isNaN(offset))return 61;var stream=SYSCALLS.getStreamFromFD(fd);FS.llseek(stream,offset,whence);HEAP64[newOffset>>3]=BigInt(stream.position);if(stream.getdents&&offset===0&&whence===0)stream.getdents=null;return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return e.errno}}var doWritev=(stream,iov,iovcnt,offset)=>{var ret=0;for(var i=0;i>2];var len=HEAPU32[iov+4>>2];iov+=8;var curr=FS.write(stream,HEAP8,ptr,len,offset);if(curr<0)return-1;ret+=curr;if(curr>2]=num;return 0}catch(e){if(typeof FS=="undefined"||!(e.name==="ErrnoError"))throw e;return e.errno}}var listenOnce=(object,event,func)=>object.addEventListener(event,func,{once:true});var autoResumeAudioContext=(ctx,elements)=>{if(!elements){elements=[document,document.getElementById("canvas")]}["keydown","mousedown","touchstart"].forEach(event=>{elements.forEach(element=>{if(element){listenOnce(element,event,()=>{if(ctx.state==="suspended")ctx.resume()})}})})};var dynCall=(sig,ptr,args=[],promising=false)=>{var func=getWasmTableEntry(ptr);var rtn=func(...args);return rtn};var FS_createPath=FS.createPath;var FS_unlink=path=>FS.unlink(path);var FS_createLazyFile=FS.createLazyFile;var FS_createDevice=FS.createDevice;PThread.init();FS.createPreloadedFile=FS_createPreloadedFile;FS.staticInit();Module["FS_createPath"]=FS.createPath;Module["FS_createDataFile"]=FS.createDataFile;Module["FS_createPreloadedFile"]=FS.createPreloadedFile;Module["FS_unlink"]=FS.unlink;Module["FS_createLazyFile"]=FS.createLazyFile;Module["FS_createDevice"]=FS.createDevice;MEMFS.doesNotExistError=new FS.ErrnoError(44);MEMFS.doesNotExistError.stack="";Module["requestFullscreen"]=Browser.requestFullscreen;Module["setCanvasSize"]=Browser.setCanvasSize;Module["getUserMedia"]=Browser.getUserMedia;Module["createContext"]=Browser.createContext;Module["requestAnimationFrame"]=MainLoop.requestAnimationFrame;Module["pauseMainLoop"]=MainLoop.pause;Module["resumeMainLoop"]=MainLoop.resume;MainLoop.init();for(let i=0;i<32;++i)tempFixedLengthArray.push(new Array(i));var miniTempWebGLFloatBuffersStorage=new Float32Array(288);for(var i=0;i<=288;++i){miniTempWebGLFloatBuffers[i]=miniTempWebGLFloatBuffersStorage.subarray(0,i)}var miniTempWebGLIntBuffersStorage=new Int32Array(288);for(var i=0;i<=288;++i){miniTempWebGLIntBuffers[i]=miniTempWebGLIntBuffersStorage.subarray(0,i)}var proxiedFunctionTable=[_proc_exit,exitOnMainThread,pthreadCreateProxied,___syscall_chmod,___syscall_fchmod,___syscall_fcntl64,___syscall_fstat64,___syscall_ioctl,___syscall_lstat64,___syscall_newfstatat,___syscall_openat,___syscall_renameat,___syscall_rmdir,___syscall_stat64,___syscall_unlinkat,_eglBindAPI,_eglChooseConfig,_eglCreateContext,_eglCreateWindowSurface,_eglDestroyContext,_eglDestroySurface,_eglGetConfigAttrib,_eglGetDisplay,_eglGetError,_eglInitialize,_eglMakeCurrent,_eglQueryString,_eglSwapBuffers,_eglSwapInterval,_eglTerminate,_eglWaitClient,_eglWaitNative,_emscripten_exit_fullscreen,getCanvasSizeMainThread,setCanvasElementSizeMainThread,_emscripten_exit_pointerlock,_emscripten_force_exit,_emscripten_get_device_pixel_ratio,_emscripten_get_element_css_size,_emscripten_get_gamepad_status,_emscripten_get_num_gamepads,_emscripten_get_screen_size,_emscripten_request_fullscreen_strategy,_emscripten_request_pointerlock,_emscripten_sample_gamepad_data,_emscripten_set_beforeunload_callback_on_thread,_emscripten_set_blur_callback_on_thread,_emscripten_set_element_css_size,_emscripten_set_focus_callback_on_thread,_emscripten_set_fullscreenchange_callback_on_thread,_emscripten_set_gamepadconnected_callback_on_thread,_emscripten_set_gamepaddisconnected_callback_on_thread,_emscripten_set_keydown_callback_on_thread,_emscripten_set_keypress_callback_on_thread,_emscripten_set_keyup_callback_on_thread,_emscripten_set_mousedown_callback_on_thread,_emscripten_set_mouseenter_callback_on_thread,_emscripten_set_mouseleave_callback_on_thread,_emscripten_set_mousemove_callback_on_thread,_emscripten_set_mouseup_callback_on_thread,_emscripten_set_pointerlockchange_callback_on_thread,_emscripten_set_resize_callback_on_thread,_emscripten_set_touchcancel_callback_on_thread,_emscripten_set_touchend_callback_on_thread,_emscripten_set_touchmove_callback_on_thread,_emscripten_set_touchstart_callback_on_thread,_emscripten_set_visibilitychange_callback_on_thread,_emscripten_set_wheel_callback_on_thread,_emscripten_set_window_title,_environ_get,_environ_sizes_get,_fd_close,_fd_fdstat_get,_fd_read,_fd_seek,_fd_write];var ASM_CONSTS={102240:$0=>{var str=UTF8ToString($0)+"\n\n"+"Abort/Retry/Ignore/AlwaysIgnore? [ariA] :";var reply=window.prompt(str,"i");if(reply===null){reply="i"}return allocate(intArrayFromString(reply),"i8",ALLOC_NORMAL)},102465:()=>{if(typeof AudioContext!=="undefined"){return true}else if(typeof webkitAudioContext!=="undefined"){return true}return false},102612:()=>{if(typeof navigator.mediaDevices!=="undefined"&&typeof navigator.mediaDevices.getUserMedia!=="undefined"){return true}else if(typeof navigator.webkitGetUserMedia!=="undefined"){return true}return false},102846:$0=>{if(typeof Module["SDL2"]==="undefined"){Module["SDL2"]={}}var SDL2=Module["SDL2"];if(!$0){SDL2.audio={}}else{SDL2.capture={}}if(!SDL2.audioContext){if(typeof AudioContext!=="undefined"){SDL2.audioContext=new AudioContext}else if(typeof webkitAudioContext!=="undefined"){SDL2.audioContext=new webkitAudioContext}if(SDL2.audioContext){if(typeof navigator.userActivation==="undefined"){autoResumeAudioContext(SDL2.audioContext)}}}return SDL2.audioContext===undefined?-1:0},103398:()=>{var SDL2=Module["SDL2"];return SDL2.audioContext.sampleRate},103466:($0,$1,$2,$3)=>{var SDL2=Module["SDL2"];var have_microphone=function(stream){if(SDL2.capture.silenceTimer!==undefined){clearInterval(SDL2.capture.silenceTimer);SDL2.capture.silenceTimer=undefined;SDL2.capture.silenceBuffer=undefined}SDL2.capture.mediaStreamNode=SDL2.audioContext.createMediaStreamSource(stream);SDL2.capture.scriptProcessorNode=SDL2.audioContext.createScriptProcessor($1,$0,1);SDL2.capture.scriptProcessorNode.onaudioprocess=function(audioProcessingEvent){if(SDL2===undefined||SDL2.capture===undefined){return}audioProcessingEvent.outputBuffer.getChannelData(0).fill(0);SDL2.capture.currentCaptureBuffer=audioProcessingEvent.inputBuffer;dynCall("vi",$2,[$3])};SDL2.capture.mediaStreamNode.connect(SDL2.capture.scriptProcessorNode);SDL2.capture.scriptProcessorNode.connect(SDL2.audioContext.destination);SDL2.capture.stream=stream};var no_microphone=function(error){};SDL2.capture.silenceBuffer=SDL2.audioContext.createBuffer($0,$1,SDL2.audioContext.sampleRate);SDL2.capture.silenceBuffer.getChannelData(0).fill(0);var silence_callback=function(){SDL2.capture.currentCaptureBuffer=SDL2.capture.silenceBuffer;dynCall("vi",$2,[$3])};SDL2.capture.silenceTimer=setInterval(silence_callback,$1/SDL2.audioContext.sampleRate*1e3);if(navigator.mediaDevices!==undefined&&navigator.mediaDevices.getUserMedia!==undefined){navigator.mediaDevices.getUserMedia({audio:true,video:false}).then(have_microphone).catch(no_microphone)}else if(navigator.webkitGetUserMedia!==undefined){navigator.webkitGetUserMedia({audio:true,video:false},have_microphone,no_microphone)}},105159:($0,$1,$2,$3)=>{var SDL2=Module["SDL2"];SDL2.audio.scriptProcessorNode=SDL2.audioContext["createScriptProcessor"]($1,0,$0);SDL2.audio.scriptProcessorNode["onaudioprocess"]=function(e){if(SDL2===undefined||SDL2.audio===undefined){return}if(SDL2.audio.silenceTimer!==undefined){clearInterval(SDL2.audio.silenceTimer);SDL2.audio.silenceTimer=undefined;SDL2.audio.silenceBuffer=undefined}SDL2.audio.currentOutputBuffer=e["outputBuffer"];dynCall("vi",$2,[$3])};SDL2.audio.scriptProcessorNode["connect"](SDL2.audioContext["destination"]);if(SDL2.audioContext.state==="suspended"){SDL2.audio.silenceBuffer=SDL2.audioContext.createBuffer($0,$1,SDL2.audioContext.sampleRate);SDL2.audio.silenceBuffer.getChannelData(0).fill(0);var silence_callback=function(){if(typeof navigator.userActivation!=="undefined"){if(navigator.userActivation.hasBeenActive){SDL2.audioContext.resume()}}SDL2.audio.currentOutputBuffer=SDL2.audio.silenceBuffer;dynCall("vi",$2,[$3]);SDL2.audio.currentOutputBuffer=undefined};SDL2.audio.silenceTimer=setInterval(silence_callback,$1/SDL2.audioContext.sampleRate*1e3)}},106334:($0,$1)=>{var SDL2=Module["SDL2"];var numChannels=SDL2.capture.currentCaptureBuffer.numberOfChannels;for(var c=0;c{var SDL2=Module["SDL2"];var buf=$0>>>2;var numChannels=SDL2.audio.currentOutputBuffer["numberOfChannels"];for(var c=0;c{var SDL2=Module["SDL2"];if($0){if(SDL2.capture.silenceTimer!==undefined){clearInterval(SDL2.capture.silenceTimer)}if(SDL2.capture.stream!==undefined){var tracks=SDL2.capture.stream.getAudioTracks();for(var i=0;i{var w=$0;var h=$1;var pixels=$2;if(!Module["SDL2"])Module["SDL2"]={};var SDL2=Module["SDL2"];if(SDL2.ctxCanvas!==Module["canvas"]){SDL2.ctx=Module["createContext"](Module["canvas"],false,true);SDL2.ctxCanvas=Module["canvas"]}if(SDL2.w!==w||SDL2.h!==h||SDL2.imageCtx!==SDL2.ctx){SDL2.image=SDL2.ctx.createImageData(w,h);SDL2.w=w;SDL2.h=h;SDL2.imageCtx=SDL2.ctx}var data=SDL2.image.data;var src=pixels/4;var dst=0;var num;if(typeof CanvasPixelArray!=="undefined"&&data instanceof CanvasPixelArray){num=data.length;while(dst>8&255;data[dst+2]=val>>16&255;data[dst+3]=255;src++;dst+=4}}else{if(SDL2.data32Data!==data){SDL2.data32=new Int32Array(data.buffer);SDL2.data8=new Uint8Array(data.buffer);SDL2.data32Data=data}var data32=SDL2.data32;num=data32.length;data32.set(HEAP32.subarray(src,src+num));var data8=SDL2.data8;var i=3;var j=i+4*num;if(num%8==0){while(i{var w=$0;var h=$1;var hot_x=$2;var hot_y=$3;var pixels=$4;var canvas=document.createElement("canvas");canvas.width=w;canvas.height=h;var ctx=canvas.getContext("2d");var image=ctx.createImageData(w,h);var data=image.data;var src=pixels/4;var dst=0;var num;if(typeof CanvasPixelArray!=="undefined"&&data instanceof CanvasPixelArray){num=data.length;while(dst>8&255;data[dst+2]=val>>16&255;data[dst+3]=val>>24&255;src++;dst+=4}}else{var data32=new Int32Array(data.buffer);num=data32.length;data32.set(HEAP32.subarray(src,src+num))}ctx.putImageData(image,0,0);var url=hot_x===0&&hot_y===0?"url("+canvas.toDataURL()+"), auto":"url("+canvas.toDataURL()+") "+hot_x+" "+hot_y+", auto";var urlBuf=_malloc(url.length+1);stringToUTF8(url,urlBuf,url.length+1);return urlBuf},110890:$0=>{if(Module["canvas"]){Module["canvas"].style["cursor"]=UTF8ToString($0)}},110973:()=>{if(Module["canvas"]){Module["canvas"].style["cursor"]="none"}},111042:()=>window.innerWidth,111072:()=>window.innerHeight};var wasmImports;function assignWasmImports(){wasmImports={__assert_fail:___assert_fail,__call_sighandler:___call_sighandler,__cxa_throw:___cxa_throw,__pthread_create_js:___pthread_create_js,__syscall_chmod:___syscall_chmod,__syscall_fchmod:___syscall_fchmod,__syscall_fcntl64:___syscall_fcntl64,__syscall_fstat64:___syscall_fstat64,__syscall_ioctl:___syscall_ioctl,__syscall_lstat64:___syscall_lstat64,__syscall_newfstatat:___syscall_newfstatat,__syscall_openat:___syscall_openat,__syscall_renameat:___syscall_renameat,__syscall_rmdir:___syscall_rmdir,__syscall_stat64:___syscall_stat64,__syscall_unlinkat:___syscall_unlinkat,_abort_js:__abort_js,_emscripten_init_main_thread_js:__emscripten_init_main_thread_js,_emscripten_notify_mailbox_postmessage:__emscripten_notify_mailbox_postmessage,_emscripten_receive_on_main_thread_js:__emscripten_receive_on_main_thread_js,_emscripten_runtime_keepalive_clear:__emscripten_runtime_keepalive_clear,_emscripten_thread_cleanup:__emscripten_thread_cleanup,_emscripten_thread_mailbox_await:__emscripten_thread_mailbox_await,_emscripten_thread_set_strongref:__emscripten_thread_set_strongref,_localtime_js:__localtime_js,_mktime_js:__mktime_js,_tzset_js:__tzset_js,clock_time_get:_clock_time_get,eglBindAPI:_eglBindAPI,eglChooseConfig:_eglChooseConfig,eglCreateContext:_eglCreateContext,eglCreateWindowSurface:_eglCreateWindowSurface,eglDestroyContext:_eglDestroyContext,eglDestroySurface:_eglDestroySurface,eglGetConfigAttrib:_eglGetConfigAttrib,eglGetDisplay:_eglGetDisplay,eglGetError:_eglGetError,eglInitialize:_eglInitialize,eglMakeCurrent:_eglMakeCurrent,eglQueryString:_eglQueryString,eglSwapBuffers:_eglSwapBuffers,eglSwapInterval:_eglSwapInterval,eglTerminate:_eglTerminate,eglWaitGL:_eglWaitGL,eglWaitNative:_eglWaitNative,emscripten_asm_const_int:_emscripten_asm_const_int,emscripten_asm_const_int_sync_on_main_thread:_emscripten_asm_const_int_sync_on_main_thread,emscripten_asm_const_ptr_sync_on_main_thread:_emscripten_asm_const_ptr_sync_on_main_thread,emscripten_cancel_main_loop:_emscripten_cancel_main_loop,emscripten_check_blocking_allowed:_emscripten_check_blocking_allowed,emscripten_date_now:_emscripten_date_now,emscripten_exit_fullscreen:_emscripten_exit_fullscreen,emscripten_exit_pointerlock:_emscripten_exit_pointerlock,emscripten_exit_with_live_runtime:_emscripten_exit_with_live_runtime,emscripten_force_exit:_emscripten_force_exit,emscripten_get_device_pixel_ratio:_emscripten_get_device_pixel_ratio,emscripten_get_element_css_size:_emscripten_get_element_css_size,emscripten_get_gamepad_status:_emscripten_get_gamepad_status,emscripten_get_now:_emscripten_get_now,emscripten_get_num_gamepads:_emscripten_get_num_gamepads,emscripten_get_screen_size:_emscripten_get_screen_size,emscripten_glActiveTexture:_emscripten_glActiveTexture,emscripten_glAttachShader:_emscripten_glAttachShader,emscripten_glBeginQueryEXT:_emscripten_glBeginQueryEXT,emscripten_glBindAttribLocation:_emscripten_glBindAttribLocation,emscripten_glBindBuffer:_emscripten_glBindBuffer,emscripten_glBindFramebuffer:_emscripten_glBindFramebuffer,emscripten_glBindRenderbuffer:_emscripten_glBindRenderbuffer,emscripten_glBindTexture:_emscripten_glBindTexture,emscripten_glBindVertexArrayOES:_emscripten_glBindVertexArrayOES,emscripten_glBlendColor:_emscripten_glBlendColor,emscripten_glBlendEquation:_emscripten_glBlendEquation,emscripten_glBlendEquationSeparate:_emscripten_glBlendEquationSeparate,emscripten_glBlendFunc:_emscripten_glBlendFunc,emscripten_glBlendFuncSeparate:_emscripten_glBlendFuncSeparate,emscripten_glBufferData:_emscripten_glBufferData,emscripten_glBufferSubData:_emscripten_glBufferSubData,emscripten_glCheckFramebufferStatus:_emscripten_glCheckFramebufferStatus,emscripten_glClear:_emscripten_glClear,emscripten_glClearColor:_emscripten_glClearColor,emscripten_glClearDepthf:_emscripten_glClearDepthf,emscripten_glClearStencil:_emscripten_glClearStencil,emscripten_glClipControlEXT:_emscripten_glClipControlEXT,emscripten_glColorMask:_emscripten_glColorMask,emscripten_glCompileShader:_emscripten_glCompileShader,emscripten_glCompressedTexImage2D:_emscripten_glCompressedTexImage2D,emscripten_glCompressedTexSubImage2D:_emscripten_glCompressedTexSubImage2D,emscripten_glCopyTexImage2D:_emscripten_glCopyTexImage2D,emscripten_glCopyTexSubImage2D:_emscripten_glCopyTexSubImage2D,emscripten_glCreateProgram:_emscripten_glCreateProgram,emscripten_glCreateShader:_emscripten_glCreateShader,emscripten_glCullFace:_emscripten_glCullFace,emscripten_glDeleteBuffers:_emscripten_glDeleteBuffers,emscripten_glDeleteFramebuffers:_emscripten_glDeleteFramebuffers,emscripten_glDeleteProgram:_emscripten_glDeleteProgram,emscripten_glDeleteQueriesEXT:_emscripten_glDeleteQueriesEXT,emscripten_glDeleteRenderbuffers:_emscripten_glDeleteRenderbuffers,emscripten_glDeleteShader:_emscripten_glDeleteShader,emscripten_glDeleteTextures:_emscripten_glDeleteTextures,emscripten_glDeleteVertexArraysOES:_emscripten_glDeleteVertexArraysOES,emscripten_glDepthFunc:_emscripten_glDepthFunc,emscripten_glDepthMask:_emscripten_glDepthMask,emscripten_glDepthRangef:_emscripten_glDepthRangef,emscripten_glDetachShader:_emscripten_glDetachShader,emscripten_glDisable:_emscripten_glDisable,emscripten_glDisableVertexAttribArray:_emscripten_glDisableVertexAttribArray,emscripten_glDrawArrays:_emscripten_glDrawArrays,emscripten_glDrawArraysInstancedANGLE:_emscripten_glDrawArraysInstancedANGLE,emscripten_glDrawBuffersWEBGL:_emscripten_glDrawBuffersWEBGL,emscripten_glDrawElements:_emscripten_glDrawElements,emscripten_glDrawElementsInstancedANGLE:_emscripten_glDrawElementsInstancedANGLE,emscripten_glEnable:_emscripten_glEnable,emscripten_glEnableVertexAttribArray:_emscripten_glEnableVertexAttribArray,emscripten_glEndQueryEXT:_emscripten_glEndQueryEXT,emscripten_glFinish:_emscripten_glFinish,emscripten_glFlush:_emscripten_glFlush,emscripten_glFramebufferRenderbuffer:_emscripten_glFramebufferRenderbuffer,emscripten_glFramebufferTexture2D:_emscripten_glFramebufferTexture2D,emscripten_glFrontFace:_emscripten_glFrontFace,emscripten_glGenBuffers:_emscripten_glGenBuffers,emscripten_glGenFramebuffers:_emscripten_glGenFramebuffers,emscripten_glGenQueriesEXT:_emscripten_glGenQueriesEXT,emscripten_glGenRenderbuffers:_emscripten_glGenRenderbuffers,emscripten_glGenTextures:_emscripten_glGenTextures,emscripten_glGenVertexArraysOES:_emscripten_glGenVertexArraysOES,emscripten_glGenerateMipmap:_emscripten_glGenerateMipmap,emscripten_glGetActiveAttrib:_emscripten_glGetActiveAttrib,emscripten_glGetActiveUniform:_emscripten_glGetActiveUniform,emscripten_glGetAttachedShaders:_emscripten_glGetAttachedShaders,emscripten_glGetAttribLocation:_emscripten_glGetAttribLocation,emscripten_glGetBooleanv:_emscripten_glGetBooleanv,emscripten_glGetBufferParameteriv:_emscripten_glGetBufferParameteriv,emscripten_glGetError:_emscripten_glGetError,emscripten_glGetFloatv:_emscripten_glGetFloatv,emscripten_glGetFramebufferAttachmentParameteriv:_emscripten_glGetFramebufferAttachmentParameteriv,emscripten_glGetIntegerv:_emscripten_glGetIntegerv,emscripten_glGetProgramInfoLog:_emscripten_glGetProgramInfoLog,emscripten_glGetProgramiv:_emscripten_glGetProgramiv,emscripten_glGetQueryObjecti64vEXT:_emscripten_glGetQueryObjecti64vEXT,emscripten_glGetQueryObjectivEXT:_emscripten_glGetQueryObjectivEXT,emscripten_glGetQueryObjectui64vEXT:_emscripten_glGetQueryObjectui64vEXT,emscripten_glGetQueryObjectuivEXT:_emscripten_glGetQueryObjectuivEXT,emscripten_glGetQueryivEXT:_emscripten_glGetQueryivEXT,emscripten_glGetRenderbufferParameteriv:_emscripten_glGetRenderbufferParameteriv,emscripten_glGetShaderInfoLog:_emscripten_glGetShaderInfoLog,emscripten_glGetShaderPrecisionFormat:_emscripten_glGetShaderPrecisionFormat,emscripten_glGetShaderSource:_emscripten_glGetShaderSource,emscripten_glGetShaderiv:_emscripten_glGetShaderiv,emscripten_glGetString:_emscripten_glGetString,emscripten_glGetTexParameterfv:_emscripten_glGetTexParameterfv,emscripten_glGetTexParameteriv:_emscripten_glGetTexParameteriv,emscripten_glGetUniformLocation:_emscripten_glGetUniformLocation,emscripten_glGetUniformfv:_emscripten_glGetUniformfv,emscripten_glGetUniformiv:_emscripten_glGetUniformiv,emscripten_glGetVertexAttribPointerv:_emscripten_glGetVertexAttribPointerv,emscripten_glGetVertexAttribfv:_emscripten_glGetVertexAttribfv,emscripten_glGetVertexAttribiv:_emscripten_glGetVertexAttribiv,emscripten_glHint:_emscripten_glHint,emscripten_glIsBuffer:_emscripten_glIsBuffer,emscripten_glIsEnabled:_emscripten_glIsEnabled,emscripten_glIsFramebuffer:_emscripten_glIsFramebuffer,emscripten_glIsProgram:_emscripten_glIsProgram,emscripten_glIsQueryEXT:_emscripten_glIsQueryEXT,emscripten_glIsRenderbuffer:_emscripten_glIsRenderbuffer,emscripten_glIsShader:_emscripten_glIsShader,emscripten_glIsTexture:_emscripten_glIsTexture,emscripten_glIsVertexArrayOES:_emscripten_glIsVertexArrayOES,emscripten_glLineWidth:_emscripten_glLineWidth,emscripten_glLinkProgram:_emscripten_glLinkProgram,emscripten_glPixelStorei:_emscripten_glPixelStorei,emscripten_glPolygonModeWEBGL:_emscripten_glPolygonModeWEBGL,emscripten_glPolygonOffset:_emscripten_glPolygonOffset,emscripten_glPolygonOffsetClampEXT:_emscripten_glPolygonOffsetClampEXT,emscripten_glQueryCounterEXT:_emscripten_glQueryCounterEXT,emscripten_glReadPixels:_emscripten_glReadPixels,emscripten_glReleaseShaderCompiler:_emscripten_glReleaseShaderCompiler,emscripten_glRenderbufferStorage:_emscripten_glRenderbufferStorage,emscripten_glSampleCoverage:_emscripten_glSampleCoverage,emscripten_glScissor:_emscripten_glScissor,emscripten_glShaderBinary:_emscripten_glShaderBinary,emscripten_glShaderSource:_emscripten_glShaderSource,emscripten_glStencilFunc:_emscripten_glStencilFunc,emscripten_glStencilFuncSeparate:_emscripten_glStencilFuncSeparate,emscripten_glStencilMask:_emscripten_glStencilMask,emscripten_glStencilMaskSeparate:_emscripten_glStencilMaskSeparate,emscripten_glStencilOp:_emscripten_glStencilOp,emscripten_glStencilOpSeparate:_emscripten_glStencilOpSeparate,emscripten_glTexImage2D:_emscripten_glTexImage2D,emscripten_glTexParameterf:_emscripten_glTexParameterf,emscripten_glTexParameterfv:_emscripten_glTexParameterfv,emscripten_glTexParameteri:_emscripten_glTexParameteri,emscripten_glTexParameteriv:_emscripten_glTexParameteriv,emscripten_glTexSubImage2D:_emscripten_glTexSubImage2D,emscripten_glUniform1f:_emscripten_glUniform1f,emscripten_glUniform1fv:_emscripten_glUniform1fv,emscripten_glUniform1i:_emscripten_glUniform1i,emscripten_glUniform1iv:_emscripten_glUniform1iv,emscripten_glUniform2f:_emscripten_glUniform2f,emscripten_glUniform2fv:_emscripten_glUniform2fv,emscripten_glUniform2i:_emscripten_glUniform2i,emscripten_glUniform2iv:_emscripten_glUniform2iv,emscripten_glUniform3f:_emscripten_glUniform3f,emscripten_glUniform3fv:_emscripten_glUniform3fv,emscripten_glUniform3i:_emscripten_glUniform3i,emscripten_glUniform3iv:_emscripten_glUniform3iv,emscripten_glUniform4f:_emscripten_glUniform4f,emscripten_glUniform4fv:_emscripten_glUniform4fv,emscripten_glUniform4i:_emscripten_glUniform4i,emscripten_glUniform4iv:_emscripten_glUniform4iv,emscripten_glUniformMatrix2fv:_emscripten_glUniformMatrix2fv,emscripten_glUniformMatrix3fv:_emscripten_glUniformMatrix3fv,emscripten_glUniformMatrix4fv:_emscripten_glUniformMatrix4fv,emscripten_glUseProgram:_emscripten_glUseProgram,emscripten_glValidateProgram:_emscripten_glValidateProgram,emscripten_glVertexAttrib1f:_emscripten_glVertexAttrib1f,emscripten_glVertexAttrib1fv:_emscripten_glVertexAttrib1fv,emscripten_glVertexAttrib2f:_emscripten_glVertexAttrib2f,emscripten_glVertexAttrib2fv:_emscripten_glVertexAttrib2fv,emscripten_glVertexAttrib3f:_emscripten_glVertexAttrib3f,emscripten_glVertexAttrib3fv:_emscripten_glVertexAttrib3fv,emscripten_glVertexAttrib4f:_emscripten_glVertexAttrib4f,emscripten_glVertexAttrib4fv:_emscripten_glVertexAttrib4fv,emscripten_glVertexAttribDivisorANGLE:_emscripten_glVertexAttribDivisorANGLE,emscripten_glVertexAttribPointer:_emscripten_glVertexAttribPointer,emscripten_glViewport:_emscripten_glViewport,emscripten_has_asyncify:_emscripten_has_asyncify,emscripten_request_fullscreen_strategy:_emscripten_request_fullscreen_strategy,emscripten_request_pointerlock:_emscripten_request_pointerlock,emscripten_resize_heap:_emscripten_resize_heap,emscripten_sample_gamepad_data:_emscripten_sample_gamepad_data,emscripten_set_beforeunload_callback_on_thread:_emscripten_set_beforeunload_callback_on_thread,emscripten_set_blur_callback_on_thread:_emscripten_set_blur_callback_on_thread,emscripten_set_canvas_element_size:_emscripten_set_canvas_element_size,emscripten_set_element_css_size:_emscripten_set_element_css_size,emscripten_set_focus_callback_on_thread:_emscripten_set_focus_callback_on_thread,emscripten_set_fullscreenchange_callback_on_thread:_emscripten_set_fullscreenchange_callback_on_thread,emscripten_set_gamepadconnected_callback_on_thread:_emscripten_set_gamepadconnected_callback_on_thread,emscripten_set_gamepaddisconnected_callback_on_thread:_emscripten_set_gamepaddisconnected_callback_on_thread,emscripten_set_keydown_callback_on_thread:_emscripten_set_keydown_callback_on_thread,emscripten_set_keypress_callback_on_thread:_emscripten_set_keypress_callback_on_thread,emscripten_set_keyup_callback_on_thread:_emscripten_set_keyup_callback_on_thread,emscripten_set_main_loop:_emscripten_set_main_loop,emscripten_set_mousedown_callback_on_thread:_emscripten_set_mousedown_callback_on_thread,emscripten_set_mouseenter_callback_on_thread:_emscripten_set_mouseenter_callback_on_thread,emscripten_set_mouseleave_callback_on_thread:_emscripten_set_mouseleave_callback_on_thread,emscripten_set_mousemove_callback_on_thread:_emscripten_set_mousemove_callback_on_thread,emscripten_set_mouseup_callback_on_thread:_emscripten_set_mouseup_callback_on_thread,emscripten_set_pointerlockchange_callback_on_thread:_emscripten_set_pointerlockchange_callback_on_thread,emscripten_set_resize_callback_on_thread:_emscripten_set_resize_callback_on_thread,emscripten_set_touchcancel_callback_on_thread:_emscripten_set_touchcancel_callback_on_thread,emscripten_set_touchend_callback_on_thread:_emscripten_set_touchend_callback_on_thread,emscripten_set_touchmove_callback_on_thread:_emscripten_set_touchmove_callback_on_thread,emscripten_set_touchstart_callback_on_thread:_emscripten_set_touchstart_callback_on_thread,emscripten_set_visibilitychange_callback_on_thread:_emscripten_set_visibilitychange_callback_on_thread,emscripten_set_wheel_callback_on_thread:_emscripten_set_wheel_callback_on_thread,emscripten_set_window_title:_emscripten_set_window_title,emscripten_sleep:_emscripten_sleep,environ_get:_environ_get,environ_sizes_get:_environ_sizes_get,exit:_exit,fd_close:_fd_close,fd_fdstat_get:_fd_fdstat_get,fd_read:_fd_read,fd_seek:_fd_seek,fd_write:_fd_write,glActiveTexture:_glActiveTexture,glBindTexture:_glBindTexture,glBlendFunc:_glBlendFunc,glClear:_glClear,glClearColor:_glClearColor,glDeleteTextures:_glDeleteTextures,glDepthFunc:_glDepthFunc,glEnable:_glEnable,glGenTextures:_glGenTextures,glGetError:_glGetError,glTexImage2D:_glTexImage2D,glTexParameteri:_glTexParameteri,memory:wasmMemory,proc_exit:_proc_exit}}var wasmExports;createWasm();var ___wasm_call_ctors=()=>(___wasm_call_ctors=wasmExports["__wasm_call_ctors"])();var _main=Module["_main"]=(a0,a1)=>(_main=Module["_main"]=wasmExports["__main_argc_argv"])(a0,a1);var _malloc=a0=>(_malloc=wasmExports["malloc"])(a0);var _free=a0=>(_free=wasmExports["free"])(a0);var _pthread_self=()=>(_pthread_self=wasmExports["pthread_self"])();var __emscripten_tls_init=()=>(__emscripten_tls_init=wasmExports["_emscripten_tls_init"])();var __emscripten_run_callback_on_thread=(a0,a1,a2,a3,a4)=>(__emscripten_run_callback_on_thread=wasmExports["_emscripten_run_callback_on_thread"])(a0,a1,a2,a3,a4);var __emscripten_thread_init=(a0,a1,a2,a3,a4,a5)=>(__emscripten_thread_init=wasmExports["_emscripten_thread_init"])(a0,a1,a2,a3,a4,a5);var __emscripten_thread_crashed=()=>(__emscripten_thread_crashed=wasmExports["_emscripten_thread_crashed"])();var __emscripten_run_on_main_thread_js=(a0,a1,a2,a3,a4)=>(__emscripten_run_on_main_thread_js=wasmExports["_emscripten_run_on_main_thread_js"])(a0,a1,a2,a3,a4);var __emscripten_thread_free_data=a0=>(__emscripten_thread_free_data=wasmExports["_emscripten_thread_free_data"])(a0);var __emscripten_thread_exit=a0=>(__emscripten_thread_exit=wasmExports["_emscripten_thread_exit"])(a0);var __emscripten_check_mailbox=()=>(__emscripten_check_mailbox=wasmExports["_emscripten_check_mailbox"])();var _emscripten_stack_set_limits=(a0,a1)=>(_emscripten_stack_set_limits=wasmExports["emscripten_stack_set_limits"])(a0,a1);var __emscripten_stack_restore=a0=>(__emscripten_stack_restore=wasmExports["_emscripten_stack_restore"])(a0);var __emscripten_stack_alloc=a0=>(__emscripten_stack_alloc=wasmExports["_emscripten_stack_alloc"])(a0);var _emscripten_stack_get_current=()=>(_emscripten_stack_get_current=wasmExports["emscripten_stack_get_current"])();Module["addRunDependency"]=addRunDependency;Module["removeRunDependency"]=removeRunDependency;Module["FS_createPreloadedFile"]=FS_createPreloadedFile;Module["FS_unlink"]=FS_unlink;Module["FS_createPath"]=FS_createPath;Module["FS_createDevice"]=FS_createDevice;Module["FS_createDataFile"]=FS_createDataFile;Module["FS_createLazyFile"]=FS_createLazyFile;function callMain(args=[]){var entryFunction=_main;args.unshift(thisProgram);var argc=args.length;var argv=stackAlloc((argc+1)*4);var argv_ptr=argv;args.forEach(arg=>{HEAPU32[argv_ptr>>2]=stringToUTF8OnStack(arg);argv_ptr+=4});HEAPU32[argv_ptr>>2]=0;try{var ret=entryFunction(argc,argv);exitJS(ret,true);return ret}catch(e){return handleException(e)}}function run(args=arguments_){if(runDependencies>0){dependenciesFulfilled=run;return}if(ENVIRONMENT_IS_PTHREAD){initRuntime();return}preRun();if(runDependencies>0){dependenciesFulfilled=run;return}function doRun(){Module["calledRun"]=true;if(ABORT)return;initRuntime();preMain();Module["onRuntimeInitialized"]?.();var noInitialRun=Module["noInitialRun"];if(!noInitialRun)callMain(args);postRun()}if(Module["setStatus"]){Module["setStatus"]("Running...");setTimeout(()=>{setTimeout(()=>Module["setStatus"](""),1);doRun()},1)}else{doRun()}}if(Module["preInit"]){if(typeof Module["preInit"]=="function")Module["preInit"]=[Module["preInit"]];while(Module["preInit"].length>0){Module["preInit"].pop()()}}run(); diff --git a/jumpingbird.wasm b/jumpingbird.wasm old mode 100644 new mode 100755 index 65ac66a81f2ae85bdc0cd176e6960b6bc6c7f5f8..c00c26b5dc3a8a1b0fd8d989c287fb4a73ccc246 GIT binary patch literal 914989 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

b4W*rEBh=eSMY1`f29hG4utuh) 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

f~E8zu1#ax|TG@pvNMbV4$!)MED3(`}f^Zdx-pM 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%0AZ%2#C@WyOF;pW!;P1Q% zf&_N;_R0FJ??#{iN`h6@@k|N1#2D(CjhAT%?^g_ddY zl*x4S7QH1J@2&K&y?pDHRL{><@7<*+bwjxm@de;$mfX0e0v zRU?KYze#zzQYc?d#D?P(+%S~uD5fTGL2lfA1}zs>OkZ-nZvzc>HUPO|+XEp?AXuKX z*I`6`?xcq{calS!JISHVJ)Lpc#o9aZLBvM7mrY42i(yQ~aE=+AE_GDAPfS@>Ltk*v z2B1%}rgpEHj$nsikcgdruzTu<$bbA8wie~AuG%#kb*b(8`T{mN5?0JgMGyvAaJ|zK zCm-(va?MW*76r4#=?e{tx7Lz2tKm$+6>peASne_(5~NVMv{jGTMx9nHDd#GNly~6i zV%uXB50amLrbUUT0b!*A7&{aEQMpQ)2QgE1A=}T4$^S2&S=l|F!AXrnW>Zvg!?|3l`!W@xCWb-FY>q+#XWY zbvE`~#O&Wd*v_n>;#Rq#z>i?#tuZ@lRbQwpZHWyCx2O~rARH#ey=@`2KyU%(@Jpy% z<7in%#;RZczR2z66W6GRi?g>SJveoj^Bs&N^HV0`2UIVP>pxhDz!Y}SEYzCj-#1bf zim0`(%=cnK*`w}YXW5PEN~HH!pH=sRYZ0R9$*3ER_94TwtvqR^5D0*+N`?p~+5fc-N3{y=2l6TzHkqju|0vD~6*b22v># z&tUObSSvw+39`i;PN#shpjE>R`Ik%d0ZB01X3I8UR_Gc4{&k9!ZU|#2B9sq9udzg6 zWV=t80t9JRx6uZZ2XJ7lCj^2)YZ3^4=GOEt7DfPqt32Xj3@rj-5?lcYO>hxhRzR3y zyat7&5TRc)%scb6h{MbrPe2##n6`EfwF&9yBGbW~=ocfM9rYZAcsJ#9&RhBJ+kkas zMJ?F^LE_Y&BN9q5@@j@@fGN=%XaPgkN|OB;Y-$5d=m4Is%rl7AK)C*>Lrso$&m7&J z9;DYrH*i3ZZlK##L^lpRby!x6t9soY3p{7@EpKC;ivgKyLc;Kcp$-j^u<_%1^Y-Tp z>E_^(?kkrqkKe+~a@BC7CPRWo7e-O_bQVr@6sqPgo~P}ki{P9qc*)Q?=pl>39U}R` zCba18G#MfR^T1d5?}|F;73rht9&LJSDcXbPirQMbiA}n{Dh#FdN;ZD#$MABMM47li zA`wS1wNp754%i5wr_=fap1%ed?5^_N&>}Tezd>zm?M4HCGNpvpFr_F$ON}BrZ1x(E zU5>{s3bb|=k|7EP414;J1vxFCiuz=9i39**@RyG-fjAb!G^Zi+FNNm%B9Y`i%3yq~Dpo3^*i~-8GE@%s zXg59uaPW_;lzTd4lRf#Vp`F*yzLP%a)fkn3L^ku-yB!9d&{NpriA^@mu=Bt zO(aAm6an^FCIiRTw9NRT$<=&&@< zsJJ4hb1j9h@YipvCMw1*F^vaWufY#o(wfzUJRE;9l?QWB`xu@ma|_v&|nW0~yz80#uK67`@@d6K8O zR=-YenqRaM*!f!3KP6ZxTGi1xHvh_g_=OheS;yM`IlS+(lco3e%X|Dnkp&)2eA$GB z-r0>sEiPd-@g&7`8{}|<{@B_JMU5b^p!XJvuE~0~6A*DdgC%r*BqN(JhT+N9WGR#l z;jD%#b;weS+G8ZOE!nDrY?eAhC)+G_<_nX}o;vG=$!VS{wH;}1huW>Q)JVIKmU`9; z*$e2=u}D@n8ClV6v>*xm7~6C@F%t-cq~9@t=(76l$ourRPeXr(EtUZOK2Qgo z;h5GvWxk)aD$oalVRl+7g4PCtK`llsSp8_XEQW~+l^H69$2KdyWK=*zf*c#nzp!MJ zxt1YF5SZoBJUyF-d)PKOi@^}a)`MtBy&zT-l)QQ(zf=z16k4VV#oX3)Cgof?$Is>5 zCj-%$zj!!5S!daGiUMJ&DT>M9_yVk=C>jhj3gHyO+B0EC)zfD=j?;M~C~6a9rMC&z zHwO^N*92X0^0kJpSYyo5L}O00s2(Eb0~CdvheDPR;}V@f3!5VWNCT3~Oyv-JC^@Zr z(sR!t+bb>BgENdc|L~Vp^N*;E$I?3U-wpF`?wDhwTCT3S@@1o`F(avQz!*sZBPrV# zg9u^-;9HJ~+}$A2gNU68gcAh zgdH{Cn1n&OWl$c}Q;JqcPi#tQOFY6kL8uHrRCVSgD}xb>6M&G^xtbGz`D0FCGF-o0 z5Y!h+yF}b@2YOr)dV)z5&hKgR265KN8SI#KIpz*|lRLDG&>DAWt;Zb{9d67W@T!76 zPjCmaR&xh!V5D$|uO$To6jvB+l$zATZn_Z}uidN6_bj0qZRq5I!Z94tlJ-7wg$0B1=5$K@}cujs! zt$G(EU=4nq-2~gEWetgBs<)Pcm_tOB=8(YcZQbu>6<)E_9cZ?|zsxMwl3QJku;m2CKB2bYLAAammYN(zg`snjX&J`|XVYEg*SRx5%30m{48Cw(@lZ~@5~4q zOf_Js%u;<}N?(|QIfP*_{om=42;*49hIy;T!>i_yf{koq!jS||G%DbsQN5mN|IW@2 zW&$6TekW&%SF1-wp@~s}Qzse~Yf_`io@%bvUqa6S>x>qMb+>v{b~Qnbet~dLj7rh> z0)<)+1LMIb)|M%IY1WmphqYz_;f9~Vh`YVSMQ8Tzm8YlcfJ&ePrWBnqg)c!Dkm8ph z7aisN0c<&9_H?~Q%~4|7%!(^o*tS+Xk@TWI1=1@W*+?&e7f52mgawe8V?z^dI;>TU zhum4j@V9zeet1vrT@cMyPu%h`ZM+K75v0MbxDq|;T zy~=2_QJIQDX6vF^v)x8fqyT5+2o7o&K8d%4C<$PY!QBY;Ne@EZ1~_ngRpvv|>_g&T zCeRGcBEb`lh$CC=AOpUk#*9Y-$o1FWgEC50`>U@$`jNlr?qTUQ9wgVr-kKU9Mk*1O z?S#a@WEBEY)jO_``8s}uP+GAG`v~8Xx)&$-h#q5L5RKN4rVIkl2-R~o7sKIz^=7R- zMgd?|&zfx3Xp%BZ!TKXhB$AH~ydvCm!m67Nbe}^)qWiNm$@G+r@OhQ9^JGgva4_iu z;U+8rp}Q>s3;9EKy#y3#BrXBa+4nu*P`)zE)XEY7H27|53D9Reb&Qo^g`rvXwJlZ3 zQq*O(1pp&_?`V&%v$y)?V{f<+6T_M;>crq!wfD2cypTTOY45tLLjFMU>;+CffSc1Y zV`%k(78|+(ehsZHyAa_bsKg?H1T@BsN6;Aig~rG_^lzKSJldc!q#HD*cj`1|y~><$ z#L8+K6N(y*iS0Iuo*Io=uU#jUq1|r@jk)gHVI(o%{K!|wB*q_3oy1suPAra7-&zXu zRNtI3fvG_Ufr<0r1ja#kLIT5*IRSy`{~I7Mk6nG%Y67FINdn_J&zQgKW9Jk2Ia*SlKEg3<2`5B_>^HX9D!mzG!VVA_AOmx1-jTQTMq5E1^OIiJx zHQKbysqU(`zudH|+`7N)?kkJE@DNzX)#=FOG-A z_-WLO_2X818nV_t<0r-xVW<*NFy_kQwjpf4Fcpit@CRHf7svcWqTa@r&LGJT%8jO# zZz<2%#k`&+)_ax&r69&jIoVWC_kvG16Af6f-Z(d&2M|8pvvIm-Y`SO5g*e@_6Vp8t z4#H1P_ky52G2I({y0wcaEu>S@6-$9Sc3&=ZK)b9qr~Ss9;#b0p=@Hyp6U85FXE5w- z3EQpvkkApuG{2)TCsQ^6LsgYyG@%^k@i=j#sR;Y2U1i^=iaO31t!;Qf!`{Mh+`>~= zbtdA+7%%ZDWef`p#j6^P0!GN!bSmP_IaLSP2 zr5~Mw1W$UU;%q`DXLPO`<2yn`t?|uMc=n|;=ti?a?${Khv`ytkp~^;~iUkU=uA*T` z6JiMo_?^ADP1*jGq_j@8@HwF>0&pJ)<&guLv5enC^lgyLqiGTfO7wj@I-5ubp$EA_a zk5hUr$IK)zDvB%fhRX^XWr-lQbVE>2z?(Cuu%T(rHE(=F6>dlIADK!f8$xPMahPTS4IY z39^7su_ozs=0bDQp-X1{Wdtn9Ge?`qUd;tIHuC}(*xby63!I4jGoOpB0z+&Vfo69V zBT&|u5zNG8IkT(WEJh$Uz}Eu~wDVzu7tF+`QS+OPkr(jIf`8Ls2z=vD6AWRKEq{r5 zXl=gG`KcMgf+Ng)d7511PcOwRgK6h-PEe8g8Ln>OWXUuzq!yqFvGJ*LF2(NTz$g#K^u{ePO+D@1x3ds+$Pl5HPU|dR1&A4R2 zI!g9q`mR z*0i*`zP0Q3slGYoh_G(kmw{H2Kz;rWSz9(h6dCKLB z$a37}8|9THqf2wp83^^R;UfD)PM78)UD{}LNgJ(_9!-{>kde`Ma2v&rTKAfz~JLPRkEsdWkMOt#LAN1AYt0Y2~u&essyRH zX@+q#NwlhTCafy{G$BMItam1?D(FZen!&2#=8`$=QuuW(N(+uMG`@$N&XfW*H%UmB zL`au{_GHu&9SN#$b|qClgL>&Rq2r$>=gitnY#19mN^B;YISF0=ZtyS@+tW38%o>-Q zEjR4Kvlg?**xoV26mAG=keNjqYLJfSj^?RwQpsVovmCg>(((iW9cKSScP z;Y!izwx%{4bpwp2m74C`Hg}>bAhcYD>X{^&n8U3F|?y6s$+qP77qs z7HMrQP~ec&1TI($0)bmc^KV)U8Z>UK`8U6D&0kykwY8u@==f$GLbqUqu3;?*!4U(Y zvxtY7a5nE6Zsr*I{CHkYV_r7DbOyFEa3gbLm7K0sa=PXP*L7^PU?x9!8^Lp!6`9l= zx%+WegxnG~H7jk(;>BS0H1uUt9;zp=etc|Cvxlb5GrTsVBK$%oMS|2v;|r%^m0@0! zVRyYYjbQx525PhbUn4C%4DaJn(u=-YnR8Q^%%R$B;4F#xW?<+nJ4Ax$yUh!%@GjOCNrM^fe`nwo zPHS>{Q;H3~Yh!@nMp$yO2Oceih!nt9+YkM0UC;d>gZCnnpAFv2Is2sevrRbB%IZW& zME7!>0dU9la>QG;&kndWOwdZ!RQF>YU^}Lg1=zD39I+zH@zfmZL?{Rv@lyIm+=1v= zqZ0#W004q^vjEhAhI5%4jXam)3mePZ?0<2^H*1U;j|&@|SWb9!oKHtJOtjj@g zVj?*`PP$7I2+UFfR?AF})e5fkmBOW|F)jq3<3gPM7~2R$kxwoib(T1}t4bMDXG!iF z>>_a1YH5V=okLpDNkeeuLrs&IWAx7hfa^~m6f6QMPG1h#Q$q;8B4|zkyZvUP0_P{4 z?f{?^WX9=SPUm#sgxoS;8fkxlTH7pH_1!v`8{)_gfNSxxt(b&%WFy5PMK7sA)iH~j zk9Ke?5e{Lb!PBG_JWWQeWe7lfe|6R#)Bm|E&^%C7YComixdh6_zJ@59R35yf(Tcz_ zYS-CbP&W;jx7O!Ibo<}R^sTe{n34Y@rq49L$>}paZ=LD${BPOxL4LLR(xj8aYz)MlK7iTLLl%$SabH9jry!P ztu8!?nce1^QnE$$!nOx?hd%gb=@8!`p!&}0p!)ZeofP1fKT$;!`}#F1CF5>0uR5Q~tZ<5ni? z;8~`X=s}32GP-1o>L_wOkOXChV2GQO-z?3{3a@j;k^GX3cOhD4GX{v!utWsm#YXuTvlT!j)VdG7LW8#@XAS9t3~K~`W4jyk5kEu3UVhGi>hn|T#4(Oe?DJC77VI4SoQ@k1 zKa0Z!V2J#rnU#F;%Rh%P8U}>ly5wjqaU0!8Hn+c=-Ny=+aLvwDx!~FJ`%8RiG*OTr zK7`Jll5>M_FQ6#L7meSTm~&`h8N{NPyS>os!$MF(|tA=2D&;X|)h!N(vr z0Uy*Z!N&mG;}bX;b1BqOj`jHb#HMno$g>-9LkZ6t&#wr0FyAt+5P1V z#L8jPszHVHHOJTufJ_S^3LGZW`^&;$vIsEtm;IB3$Msn{8{xr@dzA>|7jb)I_L1`# zDmsF?{`3%ObRSof54*CtAjXxr*;>9e?3S!{RjDM13r3qBpA zdH5Kz0534g?kQ*XgUu*Jd-h^58SE2TxzMc-^#E-Npp%KNG?&2txdVJ`?Et%t0iJb| z17wX)(7-bVs_3f;^dVl&97FF3KTReaF#Cj$e8SK42_O1|pW%pHIwEiN2_I>~We+e! z9tx3}XJ6{2D5CUIJc>*%#>R=+!ssG{ZmwaGJNaP-(r9FW@OXPAIVmK`oFlcbaj9X6 zEc-RhL&}npS5G(?{jpTBgaS`6j7E7CMjK)eeVk|bI7=VrR>ldOp5=%=a>N$pCliup z80|#ehGocX%S?|r*X{w6t3~LMK%hs4fhS|nbMU_u2IJkT9T2U`K(GVuu0yxGj1vb- zyK54PPz-qH>T_k91Esxy%M?GKDLxbinMM6M52M0vgb0!)%$6S+kNDZD1HEQ^;345m zJ3kAfM5k=%4d-l$0zo#5#4{yzeS9Pw` z;LaK5RmyadJa43_tFAr#;BP5@NX21ZVd5fZteJITK4vZ%y=GPV{2{U4wj~$hoy*UQ zu+j4KLzun!`9b#fDDpfGBJ&;QSH-dJD>jI-w_-J6jD%_2S|-oSS}z{FNxzFL!?X3< z({u0EmErg38f{d`tF9QHUe3OM_`Sep`yL%1#?Un+khgXuh>c8a3kCW)`^D*X!|yA< zM?WKSkEMG?XH>2I!!vPFELgD!=#2_v%9%(R4Z7y$hk#QOEz5B}Oe)HIqviFieE}>+>(- z*9IMsZ7YZpFg>e5c(hr`*?ogJgq_u9E8E#^lV+&|QK7BO$jg}A)}&%8GYDmdUdAS| zN!L^cLyXl^dYQhgFl+iHmiyiA7Yk=izqC@n+x=qson`Z#HRpSb5T(tx&atci6Vo`J zZ^%0@zfE&F*=9YL-=;R1Cu6B2PS5GA0^G!&hw+&W2MxB2&vqmH8qm~J`|atb0@|>! z(90ktiU_G+_K57)dc=Mf$R&-!i)0lX%u8j}W>5Bs@Gpm4h|ZZlSPZ+m^h9@W;?2D0DC9(FjRfgfkw6D4$R|Zzl7J{?S4T! z(cKtuoGXRr;JLH8#IBm5wSgzwpJu!(>1;(T>y?{#Q`OIkYL=&YQk(0Gp2QtYk>fcq z<y#@Icy7+`#V|j(u+ACnkJyy^u`*j5x!JeVnoFlT8XU_JMG;8PWcDn^xB9d*{ zgQ89$%j2yfiXghH@B?#YVKvE<6q;Dhg(nI_Z{ri6VFip&EjbPFd8WN@#pcnyRnSYa z*eI96tlG&EH2IE85$Y_9QOSqieE=Q@B~xV>l)$bp#c$L{Vw7Z7epO=t1dF)8ArM}p zP2jT&9fX{pZ8XjLguK^48k22>Xan)i;4BB^hiyFlax9R)CA`Ac;hFY0;?c>EJw9vS zUe0g{p3kHT)KCeMV`5jfbTVvA3@ylHV>MYgRnfs`(khCh7Mzo;b%7$bbwbFj22Bl% zQ~vUqfZ&uH3nSNF>t~XmtH4P;79fneq>I;oH!?3G*-8c)h=vCca)z8&gMa6NypOxmf8FhDVpR~=> z;Aym)2sYh4`pcC7J9H3{L!63cw1HZZ%TRLVlP5zS(o@2}sdABZn4`3oo9$pjN0P5- z9(zK_gs94_+&zSK+pxbpZ4YyUiw%|vNEAP&hUHhvK+WbwvOl{qyH#b zBa#^bm|&2g6_e29$3_+=)JDpnty`HOlCf#Oo=E0pf=FhoonjLrnIf5e*ZT!77_qBG zG7K$76QhWx7;2)5@mUk)evNC!BgXw*hO<-#yifUKtYBGKWqV?5%q)B6Yq&MovQacj z?9k)vY0Jjyh3~21NvlQ@Gmd{ksWw6$Sj_CR>DqvB`V}op@5Gm( zV&iZqvKRASfY->JmOlebk=V*klf ziK6)EhV*pXmZ;6?CK#P9tGdJ_1OpkTA=VO;OoXb%q$yFcXtx3g_g!Q@;cuh*T*v0a735UFF|EwPujR<&s0_i+iwtEL;pJ#h?EF zXYbvkCClpjzB=dB>)yKecJ=g~;WFJ~PSx~E+7c{H64o%rNc6#CMnW(Dk^i!?oVD^_ zH)!QH?KXdmH9bJ=5lCW$APlyaM6eJDA$v5)5)w{4iLiqtq~HYEC}G8u1g)j`i7eS* zd&K1P{q4uur|MMQy04z@nVN=Mbx!TG&wl*guWb?&KB|0Tp$D0Bv~?zDgQUc#4DQ~@ zt~DsnER>kA!^v`t(i7vXr~`9G3C;a zxNJyF7Hsokj|*C8{65k`jFcK_G-64v&_sg7BsJO9PnesJB&HX6J{Sh1ItTlLlbFb$ zC~>i0b^19HlOuZ4*okS8EL8vGL?elfXPr@{{^_hqO%di2h$D_iYZPTBlU8c|+sWop z|2Dvzm6?vyg_oJ?eJamNMymJG$xwFfWG2Z_l9`V4R-=Z6vYT*ULMy=Rj$|f8Cl_&3 zP@IV0TsTvU%w$yKtfLyP)K3STri9S}RD)9iv=h(`5sf*LVS!0fvLGN%$ui}tg=Cyt zlMML-f!srpvX=|VIFphL9fsg^F954aG8{D#$=IGH8IGFNB%_A7<6xeU7k+Y_F6K#w zsaXlhFf}V78D~zOWZYPlWQ;~19A;Z4KwXLk8z(JUA^Sa28JxMNhkxD#ri($Q@}{Ru zGRy_5l}I7p=+(*@+phsrF))C-gXq{aM9RvmE{xn(4JFwAnbW} z(VllI+gGIiO=;ZG9*MPdVHSL8fh4PGEhI%dbWcboWJcziBud^T^=EIzB4LHjO{;xFdodAwEL4)|OId}cw6 z){Ev_%B17*3+X*WFbwP6P<9s@5%{co-5XjXyQMR&JZZFDXv1em`*Cy|F82c6Po;^L zHyM3s;IdND2tv_55Bxscsm7-;Yc`g*H71=IU@Vw)J36m8@#f18ocCz-Z~BK67ax*@ zCBLPrRz1cx>Zubq^z(ZuT+xv+yg2qWP%$RV%=xR8nDgh8CL9*J{fdowsg;D$DL zi5PdtaV#2ye>){P+L3qBKn@nJW&~;>nJpQgCUQGuTfjWS!l@vsTR149mdqqBjED7Y z8;SAIro5#JJ1l(4Ly@&irq+=<3w8>D+r3aESdlgd%9yP}*D)v0ZlzOnz+#Y;-mYgp zFNhs>_Pp_MQy-0<&y{K*Jd!wO7}df{&Gh|%W1zc_sQU;i88bjbYvaLs@`)hy@FVGaCI-SpAkYPvw_~ zmTJhSwe*{A>3uEWN~gYRsLd z)>ffGcv-3e;=HM5Ue?OKEK_IbGnSb5ykX=-<{c&|G1-hEEpv{;-V}&@2aHHvGE<;@kKG`>)Vq$LPcetqUHAJN3`1^DwE12+XzsMPnK%O= zs`(8?&dDxBp(xfP>~yzb7pnWr51y|Xn4(?iW^o#abJ%#OaFr9 zGaQY+SSylqh9O5362lOSEAM+#<{vns(4x+pB6)y$M2ckLA*5j#0z!JN5F!OnTZk$d zEhM_fvC{p8rXeE_4Fd@z=!Ps^(K6Hv(2~*xl3r(DW-?Gin{@Kdyf%3%Q!kpfA|knz^LX)k#~2Ty^eN>kuqsYgOxz84(N6<|M2`OU8tCXyq|Q zo4`ur8jb#bjnp&NAsslP0N~R_>VVKf?gXi+l(#=EmLhd`#y$jbWR<+B#Gm(<>mWSI z!t+SY`rL>Jt%__j3XU^6iFzb2I?zm_001)&9e~hBn>Gj*#XN5nTRi1(S`zeU*4<7zt;5i8W@MFYz>tLk@*z_R)+P)RkOd9P&Ow*&m?aDJn+=WucF6k#T6j zI2H}Ui539q0^D6RkcNoWbUUilB%YP+ric~AD{!r090J#5VVgyPuym<4#Ec{+S2t`Y zHWqIlO66;BAlWjv>xNJciECRDSF3dhyOTQnP0$b5l1FtZ}=Z`n;HZ$mt(? z?hS2u&OB73+-aJJ7C^h($^*?qtvobp%ZE1)Ef|gAUZO2WpIKt5T7Z6uwmdVOHuF%u z=BWU4O6H*jlMPG1+%D6y@{!UU+B~#iB)06!hp}MQ7YwBV@N?#&dhu@$fRD^NF%PvY zdjerI_85s1wO6smH>g7UI-{lK&X+o34qO_wLulX)n5)}&Fz_y8m(846I@br-{D0lzA-dSKp} zQvTY~qow`p=Ab$g?LHhYX69W}Z%uQCeESNk<{J#XqGYk z$S*8Hbj&EUA(T^cijnP=#|Bee^o;FRv!`^6p=Jtvlj9VT4iAn@n*k^0_U$mEPlg&s zpA6$Lqi^=K>gd}{5^gVL?@l@TNt-0x0ccwI2{f&yJE#SSoNrjwBw@0*;O`_%63fPP zef2R#MRcWcH4qC9f4d--+XWw-5fLk}Rhf-VXmVSpT@w*(MXY8|DLyt3OQOI@B32k` zK&)gKhZ#MHmGrdg=trY}*Yketn%p%k1h~YEXv*B=Ed&@WlkkzOU4Ym?fFL9<6(G7W zFCP{rfq`@hlv~6F;IAz#%=`#vl>5+^Kb0C2uzL^@)}dGkLn#+5svd+{U8%DY3kV;P zAKQpwO#%r9G_l~&<5)BZ|Mrdwv%y875UULYTHII~vBVgw#e(l^mEiUosL59Hop{;G z_({Rrl6A2aDPSn9fnTcvRx9b&3@Ba@@W5|QHE#|xjzV8T30vbd@B`ct%U!&nfu|gL z^o<4eqh}OH8a;g-Y4i=1Wll%0xyxy)EDrAHEMwSlnAL$gdMi^267dm2I2Md%m7&Zc zKn%)UG@Lday6a_VEi1o3F6fqq;C#`e|=kV0l$#U3q=jv~!Nz8YlKi)UQ^-m5r$m6rYS>r&jcHr#v?~ zlRuWjM)c1z4|j?zFFKUlQ%$Ixq?jrLJUJ$4l8fDhe`UT?bZAMqV7Upu)xu6;6gkFe zJ~HHOv5kq9{)CUirL6c~7CPW{qnK{U*qWKZJUY#6ZXCEB%k1F{n#oXR_PZq|&$;h2 zlrd<`l-Z-r*tdyg_Gr^6vqu}w%&~rahH|EiGMY8Vg(vz&9~Tk|2~tU!J!K?w9W#`b zvCMVMP|irto8%%gbMrwYezE5xxmg9lltWnd-^#}ixh!Q11y)@byGfSvKuyrbIigFM zh~c&+zvAKttq?|NQvc)%TDHR+Nda09a+I}p*Lj>za+LY28es-U)OF!fHNp(^$Wi99 zuIqA~E@Hx=-ltshazo~hdMC?aymmRt1Fp4+$9b#IQQlTQjS3=Ao>!ousNXdj-&*pr zM&mUagZoFKKP_mSgT`xaERkc4#&C7XPDhb?*4+43bK^4-$yKW@Vag>pzi&G$^U0a2 z0I}f}v;3I@kPuG!<Fcu2|y@bVVlDTJv<|Se_b!?kr zwiC?n5HVX~^fED9V)!YD+2AL=3Z^J9i}0=5iksz*Y|*1nl-Vv?xIp#7l%wpS-cj#= zXtJgI7oFa(^K-bu3~%Z`g)F1`&xtx-{kKxH9cPGds{f|-OZ_*ZbEf2Qo<#jW2PF#X zzY3~g13>-Pu&b=0{zv7XF*~|6%~f_tI?ciM(_5%XtnnFVH>d3+ z_$+fkzQ$)&I9=oOi6}&Ce7@CI`V^mK1<2O;yvFAfGjOc&`PSmIov$f7UxL=i+uVK& zj{bZyc18!x0D3vn`vxOnY0Mk^YT7)Xg@crNEL4kVqfk2|g~mK!LHUAjm3^ zQTzorJReu8p^wGvOw6mkJLzBqP!t3Pvke0JV+=rW&#S!4)tvzz{%)^7AReHzH5gTc zt^TO$Z}mo151(OW=SD3u62zYJok7RRKqEQfXL?fXq2jUAmB>|G!2?Fm zJ(M1Q+noc9zx`4Hj2P~Y5loTa9ltQMu(7b+40tSTHv=IH+sy#U!ge!ovasC@s4Q$Z z11(8A4=|18IW)k0wpg8#P?boOM8$~|USzRf=4Vrth|U5^;wVS~<{R~xH790uG*Ov_ zSR$c@!iLO>C^8{iEfC;~JlZ!a@<m2RroTokR9^u^uPkW?Z>1o?M zh;TZAdh`6*OT?<$^mN!YVK4#Pv%m&^P1tTUU;B~sJQV-JbcP{}9YgS(KvsLl2`q53 z<^*Q6RmHx*5QeP`L3J-qks)ZyeSkh;+e`3%QM*~ZU({|E?-#Y3#rs9=X7PSeyIH(n z)NU5<>vj?EljW&FC-=v833PxjWxWv*9zZ8b5Z@U3B*2G))L`iB)0@W5Yv7TaR6i3X znpMIrJihOQ3qDM^=mR}AJkH3Q3{Fg(=+s0aiW8kwoDj+p*7B?5(M^fw8 z6R6|1ar<-I>f^cT|2qeWdj<_3@Bga$xsb5Ly85@i=aoNIERH9SPau& z0a{ubw!=wF!*&R1Y1j@MEe+eDqNQOwJhU`yhXiYAnnGZ=H4Jdu!GN8sI}ZbncJXsLuwpY95k~rp#n5 z)F+#xK4jsF`ao-KFuqt7V!o4J9b}n^5(v<0Pe?2YG-$OaB#HzwwAvG0o(Pm^wI_N! z5s1-hPxN^r(4*C!81O_ONsFFPefEjOC{q#KA_Gy}7DW03nJE1%`KhBEuTI$uyfBJU z|5RDP%i-{%)27ERe{^qZqA;;HUKF+v`-Uj&x!`6Bhsv~F;#p7NtQLihAU9@@AfU5h z7sSEzgQ-o-Oa0+*LEl^6rEFtTkb4Bh4>DmI-v%5WrY+Vy#21b*N)ygeL??yX4%*ooqS1|-7@5q-K{pN@-J~fS(YTBO^aAkW=A)?waIeJMp&E7 z>@+U#o}5jrO}j_1Hkou5y*lNNGtl518Db8X5HZBoBqsw$RC)sho@=`>d6GB?yRbSN zXqQ$FMa`KKiEVnQA@UU7?xfCcT%jwzG>lF(FryRqF*?ybUm6xC8koh2`ye;V&X;B- z86xy#w&K1^HksxWqowv7Ga|qSOO+D%%$l~vPRd55Lw1zs8|?-NtBXtMbm?J=gM{~_ zA@G*E(U`0@v?KpqEn8o*d_oXK@pDyJ@_W6)F=(y@)6Eu?dtF1*dE-mj7a zf#r>5{}OGo-ft_kBb(K6-fA|hZh1zBm=Be@kBixCR%=?drd38zPKt)EX%*CYO{-)tXkVX;p21o0VVJa+Q~pO%A?wa+QTCsQhChUMY6L+0V{;``Ma$t*O_V zdabD!g0?EOHWka;Mk@?fxUNzV>C7bh0JHFhPect>7xpa&SVwuOu2cBszuLd1`#EMy!lvr`&vI}^|HidR zh7L6BJ_Zh%F-oaEv@@@suVzo+kc%EtSUX_423Z*7$)VC3WKRub6>n{!C~J^igX}_? z4wu)9No6gtJcBK9bQ00+Mr?JGg!Hm(vV&fxR3C{4UQ94xK8~nhEdBsdVHJ0k(ZB;l z1y!>U!)=N%?V`f19oHP)?azn`UUZ1=s;)$ZLOzbU`Lv4)w{$*>fw(78A&3KspwPn> zKxlRNB@q<*#}X7emTAT@SF$v4aEStT$VD*W{I~io1rmG$80+svaTC6yC~p4Ni`5US zT7u-&>e2l)v3`&y)+<*nisABNSB*+4ojUoj?1cIVxpuF^foV6N?ff7b1MjQOb0k)E z-^0j79m!Vr;q9%4H>#UoEA*{*qk8Vl{T%dT|K-pX?P96OMu=XL!<0mtA6Hd z?|LIAX4#7O@atU(cd9X0*G6bp3TpQ!ostBTgFx_w8eEMai=wi==3 zGj^Jrjb6xYm-=f?agN<{hv`vtAgNaoQ-AMdT-pGazM-Rm&_Sx_1~a&{X}Dxa=Nr!9 z(l;KzZw8m#ofE^Q7h!~l#HANugonhXTQb5E!KIJ(Ig1kvguh&v_N`cWtN~7xljlpm zMh|>l@mgjnx+rdB3CqTp6rp8#jD(1!B|8qN+tbRI2zT;)X(+bD>#DsQ6d-$n^C-oa zUU>ZZ!M>wwh$gz2!p^g|!l(#b@jt`Yz6sCbh-*H?eBAFaAKidM(cRnmdGCfj$60iH z*TvUH=HJYf@Jc9`K8nDNZo6@Lyt(bh<+0^97#CWFD>ssCC(zFAq}+%MP^Yxl!wRZsL{3t9V#LMsp`&cL7fkQ7u zWQRKGPY!j|-`n}wqYfwq>a318x93>faq0FPYde13E@M3rocp6!6H+X`L>~Lpvbv2! zjXj6*@x{BYq?8Xc_UY?ht0LFib1#cFzNGUc{gIV(@x^j(93j5AUu#tiweR&RtQEoR zCd);ZSS)<3u`80&FhnRecWOwv3v07TVMU5s0lS9d0<^W@S=#sv^{(1CtP!-a-~;Z* zWB{xYTsGh7tP!+6rFWtq+4-H(DWSM=4IJfB_IBu%T}MkpsMOLNrU=z3F3qSch>`9h z%($pjnVjUAn%%s`nfwZ~W`sa!BRbl}s^YvzPY;@jjz*+9Fgn^iFO3c6O|#J@ZRVz4 zySeGsjtd|#dszYmcAWr$UDrSWdztjx%uPK92`}n8kMJ^)V{1{+E<4{JFiO}y(b2`# zn6mFO`8gt<$Y}ghAzj}^MN{7Cz)XHx#dm&ibH#YY>DDy%vP82rjm7%jq_H`m(QqHHY3y2#UCXg+Id(0_9!&r@Io9IP`%O|C z;?VmO#i93Iyu;dhAPGg@)iu>!Q{6SyT~pm-P~E0vi)j|alH^_D=VenMetzKN=Rbe0 z89%QIsuqy5AdKEBsGh|V)D}jM0frJ5ryoWy$=t%|6DxCVG{QvGFr{L9^@d6;zWnIx zpqg&jurf3FnGy}AL?2*;3^8xbcSa-RDZLXuVWI8Oz<5yTdx&~(4l~*oPiL5Qn3}3_ z%tf>h=HuCAImDb8eo4aAES^2wujAPvs|;DL!}xl$Hk(uMA2j(DMRNI)R=SfYOnAJ`qs*(vVPFks3~{`b#0DgKrjG zdx4-?AMI3lk~N@&UqYD>`aNYb-4gnzAKi(W7IMW|XaIO!*ieHGiP`fRAw?a#R2Cs4 zq@yl7WPp70PyYiUwwW%v?&3<7-5|=KyI(#2&h9=@w2C9dt_fu&wo8yXHH^E?gF80V|_?x-%@dimhQV~XlCSs zK0`QY9vb96oZ82Yw(Yk+&-fO+OJ$}EByPdG;^v;pyG&|ObZ&w=02a3eSh>&3UjSIH z#(X%u^@VfUIbZc*M{-WIT0P{9PtkZa7KDwd`@n|}k-RI0NSI`5N73GX zutj22o)K3>Sxw23Zn_c%XK?BJ5(a{-HY3-eIo*j_a@Iz!cu>krC_RVX9+^U&kgaQ$ z)1e=j+p;e!myBI!#Rhk*vcT{3vTZK_Zb$%Bp@8f!IpJ?_>S}kPZ9IOn`&JHpeC+M` zG&4S`7w+?Q1(aoCVxLKWR&M}7FMo{J6mPHceMzMHup4HiQh2SIt1#iA3ZfWNiVTP1 z{uP-H3T5(Rt<(pY(JM!&GVZSZcvboinq-y#K=(2drP3@_2te`+->zSqQfPc%y;_Re zj=Q*mvvy~{?CoDkln|e$*{zE2#hXiyR~6~1WhuKh-Z)Bo$FvCJEi_)#SdG^Yw8MB2 zmauSg2=o=YV#Sfkna%1`_g(oFu&HCx%fDOuGI0i5IwtEb-+!}~)hFls=~})dRjf4k zD=aA*I7_POHquec-b4|bRsKEO9a}zICjVS%o%jX3f}fjCn5T83w{@pU!){pVv>|rq z%1*s4^darHuT@1?Vc-)=p;wRcV)@W*2E}0^f^-|V#3KQTg8Fki(RjLH;QT8pl;NP5 zlXcDie$kmocA>Na658`|K|@26QSmr^d0?vX6tbBB4gzgHu2l5FLZX&W2CP*fdJX6` zj#IYdyo)R^I%NJR?)Bix87e7etB$>vG=9tHAE^@AH7(Z--hWL#G*yoGTZd)DnMb@$ z_K45t*mM!|j{N>;6kGZI$l6H;t(yib&TW@LYl%AXuy#8ky9m~gkU^_$5#X48J#5R+ zZA-V_mf;B)(M3cSZ;Cc#b|((l$K;W?_^Uq>*L#IWqLERM!V=FKs;Pz{QNv|2&m}3} zX?Sx_z?(AxZzwZ!2)sGm^Kt7U+#l}wxQ{D8e@EiYqD4uNAd6llhiWT45*Obi!3vMW z^qH+5Yvn598HhK7T+j zOK)87vJ0?zN$#>JqM7m6yZn;c<-qh)l$NM0dyuL^6ehllc6%D$2^1U>e*g`KV$aZ1 zsCpX>@2)_@T^mosEo^s=IEsd!<~!$TIJ(kO8g5>XxnYWipW-l^G`#C*cxO2c@36}* z$Q*A40;AJ$H&Jipw?R_qI7vZ@sZ&uoJWv9H0*bt(FlrRhlE3hXl7b}@B~Z3;SV_U8 zfJSimyre+X)QL(8C-=@dDD#p*loVu5WAI0k6i#fIf-Dkl^H#>|M25|pNlu-;$W zzbFa51opQf9jy2FC9uDtBvy*X5PvThzy*R_AiYjIp2`IWP;7|MYH|V95FvD4w_8B5 zT^lbKSR~gR!TyToROeuCTBNfb3?8OqnX!PO#DBFGP z{!Ue5UccCpMZwz_e3ddRAba>S6xf3Yanv}{W!D+O{mCwfm3sVwGnem8wpD9uW3uJA zKao4#N2VQwk1f9N0oZh^cR%};U&U@Kcb$db$L<;r zl54-^t_!Yt`ofiRsJ$o@WsZ-zvCvAm zEkl3if*lJ*+iPO@A-m-UR_LC}rDZ-EjrI<}ig^HYAjO_E;i~G~LU_6`15X~lB0PEc zl1H*w2r@_PqzM&A?4-HzD|Zt2Hks97_ZIqLyXvV&N-v-#2h)q}&Z8Hs)+y5qdqWd4 zPMGG|8=7EqGH-}5<%z3av;s_-aWl{h@eyMn`;&8#kL&_zkfLq)6dz}6uChD1D~UNh zmvEK&nA1+pRYa7U)^nYE-_I|He@VRQtQgU4x1O8ybbwAgkhIlEn108a#;w-kgkX&DuRI%# z7`~z?Wf4_Z^g5*$`J^l&e^nOI6+N{}o$5E#eaa&8_x|hGkPVz9U}Z**)CKV)j@9dZ zaz2#i^hXKx%UKRg0@1ZCciGolF#{cE;6!t13wOkW3&oxlRfYx;{RV6JUc>iG489vS zku`j;;rotqvRRXYg_c(3m5ZIx|FV^x^`XsM*dVZNU7VOzZ0t@n_GxTm zj1cO zs4PJhYh$%_V>+}8z_YsN#?;jS?^U1wkXm!^Rj%-T7DQQ;lTj3Abx1vSzF6a%aAXr^ z`P)+CJJYYTHNKD2g$E77YlASmA<(dE(+!+C&90p=E8$k4ah$grX!K=ul3{m~SQvy^ zRVZ37Ffs3^v%s=AU;|x4@X0N(osFKMt0sVqNyDcCVIybBVPo}@d(zNCG(0&uBGDi$ zJ|!APL+XP8Rw5dQ>0+K}n8v$=Xo#q^5skyVwS{POSYYuJ@?sQE=j+03SyI9Kc72fN zg{jYxxj3=x=J5oJjPju|`0itJlHFH11IA@K&b#9Cp?xB>x$=fE67TBRnQSJEL{M;8 zMuK=Jc2E~?7&?YP9uhm*5VQ)JqgYxK?)VYY(8PAMVT6>02)~#uhH%Ok>_nNl zk&AP`7$YA^HmH8D^F!6Eu9tRdOs~2}XFfigU8_1}?>zCL+Tw1t#oayK>v9iC*CdVW zRiRtic}}m_IV2fqz~o7~;Mg)FJf3x~LF%yZy#}d;AmxOGHAt;N>KIhY^e<8Bgjki_ zbeYndUOZX@*&4`>0b~v65-gcO*w?w9I-N_75@HrGFpORp_$Jmfhq{{aitoPyo!`)$w_44(nl2V zg6 zPcT_X7$R;^AIR41h|gAaG2{xvFSTgL2=S4wI`&D_Vi)8Xdg0S=>fyCKPhT5VzebFoAYsXo!V*{;~#`9C60R^ zCxesieq(JIP%h11;`7x zT{652MU??U3rDD2UJmETi=Ad`bvf>0XE&+Hwy8Q8@GIgwE&5m9o{ju+_-9AcMk6uG zY(rPaZqGT+2A-z!JB3}0Y(`%f1*3k3?)#7usw>PS5YcAr+r&U&+BCvgXtU+pc&AXP znA{wf%mXj>xBw)xM46?4g(891u4AZ+Y|czDhPudPFxe2SaJM-hQ25234^hYFUD)z5 zG1~z|0K&T>gk&X#EOR69mzbC>UEyKkuiOX&eZeBgUwN3wP_2cS5EFBpF1$q$Vc)N7 z*^?W=uALjfJWh7qbR!(+t!5GQRiHUqRT!uPm!@YW@A2{mPU?rD{m><}8Bfz6b+b*E z1zzQE<5A&(zV%pGzF(O3gG_(~Nc9{-%eno~zKm77nyh+dgff2P?H5&=wl7psfk@S##+C z6mGjvX;PKs$LX!lF~r}@mKP>w zy;eN}Y=cQDf^Bwo6iX58#00~$btwYlJR=;STZt&4h|3^K95R@)fLS5EGzxegkje_| znFX7%drm}g;~7pwi3 z!tU0a{!-m^3yKl1N)TR=GAjOht0BgAHj zMo1aHjKOx4GLnKvUdq^MNEyq$%gy32_ z+G5m9>KeGE146j%jCJN1Ds&#S5RUVpsaYO;Ho;gYXTS#bI3)Ou$&NN3pNub^L5N=c zRW&w{i_cVDYHExENa4=gjp@yImp;Auj0UFkW}lL9_heiHSh>5@BG+xm%H2A>*(`C$ z%tQX)=l`547XCHUoSVLl*Wg2fOo2YemAnthta1&_iWa-n6W2m`%iXYDk!uv8BT{k3 zhhzdzqX^x=;sIuTF0xp^*yEbx%w!R3LeaW6TaZTa+pgL>t(xmBq<)d-gWDRr_U3*$ zdKgIULG0v)@KDmotR{`dyh!}Ti)7A1yhvQhi)2B=bzC{L*1SmkO*8Y3-i7xfS!l1z ztoE7I8jWRI`@AKtofk>9UZj~43wz{&doPkjkh{brsBG8SJ=dsp;wZmHt(P@w>7Y9c z%UPq=8nyBnb4XJ&$o|0KD(s@dVCL&poXwMBrdu}M&bHhb@VsY@*uVis>(VmMe4$jiB@R*{kRtW1V zicTYrHUt8mlh99TyIjZ6Pk$XlKmBzG{Y0)-G&Ohik(=>>$eYuAg=`i`h^P4qnL6am zauM^v*mBH;I-Yqzxdi%9klOEV-G1`Q^Dz786zxY$R#FBM=fPSts;Ui zg)ny3v(5yFRGCmSt?f-LJW$pRPEhkkH*8>>WQVdk8S7rh**t=hhyn=|dpn0d6j3}S z=8%s^#BB)OnV!?-*kA5WcXhd|OB{#9Hotk>lr+nru-u6)8QwbBLY(0(DTS`^rup0n zE%M=WCmMDWH=nYbM#*9Fa603RZE+?GMEI~nS6f5c%XyBta+={jMRIHXS@nOK!nA0U=z^w+WI zt-p>%Z~b*FdP~xKEPBfd8lCpbY*vh0`91-B1e#kgKVeLSx>I>y;pOXeSpi#aJFvBw zzIm`69t^e)gm3wWA_1Mhp5N&eiY+;ytC9Z@`2DEbeeawPyyHk^RXLJ1M!e z6KX?X=X{PxFOeF00VXk8;+&O*6Dy`@q`r2h8|6T>-rk2W!drD|H5yq2F3sXicO`D#+xTSO|Y zCUY;4%8t=OVCvz0Bar%5j`puXaUgGZ9)JN-34p0O)#(7(!S6X406X|SCj($@?>Pwo zGZGO6LaPxSnJvPgaahWJH`%OHfPg=vWjd}kkhD%s$|%56OMVu?zL=D)%wA*B>?XSv zu`>1>YJev|CBbhQ2R&++OPJ(QyIjHtSMM^iI#0DV{}osrdCQ4}w&BW!;|dj@IGoJo ziIOsA;CdAE7uTyLFmb~fu6HI)utq(p(-~IddXdjLE+^*axS9qp4&peS=W(YZrzO1c zb{UN$aJS2792tD^Mq`P`;>I$7AXsa|Knre50+d$Os<2$()*r?v_o!xABRkB%sU$1;~ux+xW1!P8|4F960BW zD6^0viTuScO)_+3Wt3%ft;FIgV}o2iPFSS;@_K&_qK~uEx6S_60kZ4;^(9vBaQrn79RxN- zV+13gWg`z=$g)}Q_)BBQ8(WQVES8F1QJyscBG@*Qb3wPubJt3%Gjki;!&QX^$so1g z!i^T%!`qrm^I2dIZ)?899^Te`i9Nin`4W40Tk|FM@V4el?BTBY5$)kFa3&ae`mSR3 zpB7oq&WdZ~N#pI=svdv$kCs;a!^>9f#Xst1UQDBu!Hl>^Z@YCfFY#?y@Tk>7#aCm2 z*wfLQorx*q+!a(PBsTt9Bq5(f67rWwLglbmueu`n6WO@4v@OLdc!)3v{!+VwM;Tlr z!g5rPEEYn^s{2&i;C{Vgg^`SCJJmUR171h}9bQLbBwwyyn|7+b8+t7Ysi~l}Kt;8$ zSdsDuCm zRKtM6v-XW6*Zen1iurGS78zffaB?)_;p(~nkdGhlk3L#tLtoN@g0>`Un$vIE)f%&f zV+xh=;Y+BibcOS7%$BYws+`glg{e7;FKN`Qut6-g$rOosxd`TEF+gh8pgvu{aw*3T zq^pj*>Ri!$V@V41EPN^xOX@%DV>yqp--msy;4yaT;K!^6guLO@&5&_GV`Ytf4G3?s z!y{wAx>69`Py?a}RjAy4y|>VQx$l1?`Th&`{mCw+>SlNEqT9W(KvA2R$$JWH2k)ui z_Ko`K)l*Of{fEEiX606AlIa)flGMAp(OQW_0C;#GYhLeqkYma`^|7+JsGQWNL)K=< zEFc34^+$5KRhP8LIfxL>v7|*o3)N0u{FW{)@Ru%W(W3<}iX|=jv~cjXXf6X(sH#`ENv9)&_ zPz|qZBaqXsU$X-0R9w97&}2q$@fIV|CfmAIpRBRwuus-Vbnue_r_w>U;MDS6a0N|8 zoV4VsRBL-d0WyyclJ7h^Y>+Y*qpfh-9U2|#P0-?pC1n#_J=%Z=vsB72#R|{NE&K}4 z%q@BAGczC`2-ra&-y~qq)^axm}?ciaao!!C1JUhFC%bz`w9sHdMt?`NL)c=f0XJPvio4u>HJ z9h9^e>`l8w-fq5W{KUr{@=_y-I7Uj2gZ^7c9U$<_ZPYJX>Y{R!(+8`IXY{u$p>o zv~wmkoM%-=JRsdSp4fQPjtwI`*!Xc+ZamufT>+L>=6a*td6d5URep8ax0;t)6T&k` z$+~Qoqeq#w=?bMqdDD{F6%XdSqtVY6*%mUHTTD?Qx0qdt$CvWgR$t>#lkwH6dtd6c7$zaaNOZQy0#mPiAefrbxB+HWq@(!d*oK_`5M@ zHNRYL?F>6vH}7`4h2mh@1(W%VWbqc(ad?Gf`i$>Cc%E1eZcz#T3ROH6xyCJhKoELY zI2K0Z;+Cm*Jor{Fe~69b0r!=Wl|A>>6ug7lsElMGse%cSIGdRiqN2~N%%(nAe66V} zD`}D3-qg!%Y=KSb%T@&VTmcTdZhQJ{4=Xz`s|#&-AFoPlH-)7iC=(uC%=doaJ<0LAQf_v`H* z)Z6WWz;E~RHgUVNYi`FKlG}FU;TQRkk}=gm1X?P#yE|fa!ftJsV-X!A73?~Q>h`*4 zsQ9CKf{Ha=6Xn9>^PM0%AKxK-drjvJkTly%*4-nfAvi%g>}3I#bY&z^o4x7K5VPk5 zgT*@qLE}}(?rw1elbh}<+sURoWRbo+FhSZtzHcD!<0g6nd8`VWuxjx7HE58dnhudy zZXi!$n_C7^B*qM2WAFU!d>-WU)j-}>3xv{YnT`7mT022LtF<|g5e<6ZpGN>K=PC$b zblDk<+1h{r*cDh-D5YCK;(P<)p;1_DGebZMucPqmQK!%NW%ZyXf!)ZwU)J1%maU2h zt$KB{dQC^8_w=%Jk;;n=J1SoU(1Pu0v7jFUEuuMCtZ7j_uwQi^(Y-ec^$=F~&)cz= zkL*KH=w_d+6POUmT^Yf5GsoU_2m@REfyT zd}7#^5POS6HXvuaf!H-L*=|GCV0qePco{u9Al!6_Ju<}p&0c;@j?-URTR^erWRTJ1=3yp2UDpuGURw?cxSRI%5hzahMuh54AvmE4R3FP{ms?C}q zD)VaB7^2lD>JZzt376iR+)Wz;^sVwP7~8%5)JA0Q>Pkk z`>kceJy7c`76G-~L;!WSJY&xU@J)$zF95YY0Xl(-5R6s3f&x=(4q(Ap zCk{SOG+$QT{AOV~qXWB?O-rGGVw)K1q)ii58vF#_|0n}nz)$WttpP?0EZ1VB$YxFZ zq!uvMIjsTGn-Xu4Wgc`8tn@*ThhS%bVDkeX)Ml9&xz-xk3;8=6dSo8x=!#kcBC2h- z>{^bXq}0i8_ng)+qe{B%_EbvS9kqra0yz5>_*jEPOPjdeElT3?wTAb;=vo6j405$x zZ$K)86hnxwIq^b@(sdO`V|)r~%g~vP&c3k(4W&6yGXwdGNJ#LkGz-5?2K3Ir(3|9H29_0JYZ{ z0BTbk1k@*{GyIb~#DAg4#dmmnHqioy^_6xnvPb=9W! z7LSIR!&mfZWC{-5LamZ?3U8Lp%Grz*n&-nrotkb*W9i6w3{#|PSg7PCnZY4hs8+$DMQ)N23%*?6aSM)Xl^VsS zOKR=Y1^3{%)KlWYae-y)V?By;IXA@xJRozP5_6G!hg>AGKAXAt08hzXpbmg}F4~(@ zPYM1mIn@_?N_GzEDLKa?4uX3`UXQa*Vv^Ux`%mUPB~DZF#;hft5;)+tr*2|zqK9n` zliifA!SS70TS2zl3?h*X=TxCYO}g{lCwNOdvur9vDiJ^3Ii?fktG#?TVU{(Z!W@$* zm{&w*Sr8DgS4M}Qc~8DW%u-+sP#@^<8#^#Q>%1qgEce80?`{QZe~?4sM3I5$ZsWNA zSO-k%(CAlA?t$YP4s4a@;JEk9bKG_(3KF_=qR7kF5AG7VtfP~VOkr=9^G+1e9h@k= zQjV7fWsjiW^b7*;dQ@=|aKT-x7;9=VnmmSZxWJk41|vgxay-w%dE21QIQ6 z;&z`(aMJDKW=LX^`XMF>rOd;BbTc?>WGWh-q%8iDb2B6%NlBax;B8bTx)~CCn0Ma1 z9NY|!<0p}-5&~i{hlJ-kUIPa21rQ0`K1wMF+%5d9k0PNo_e>3Ci##g6ii7T zgGBOZh9kuYuo(G;xsMTPGIYn8+Ug3C< zvWLX!EFz;-)<6o10Z6lN;}-{YHHjo^6e=rOW8h_twVS~QT%SN_Qew13ey&54`XMw) zwtX*3D?WNA-Y!bj3QbC+>V`<-;X8@9TP#jDLz6_?1K^7Br2;f48GlpRQ2||Rd@!De z7!Ga%bTb^>l@bk7v%SSZvhdN%VancB|K?0+1!^21F#u`yZT#Z;sezg>ErmEH0`!Tx z8SbzM9m!IP&~eGxTIl8$EsoG>NLo|7|>Ze_i5as7$JOeG&LcEU2|<&4E<>Zb6lpxPj3$V?aZ zRdM}Fe+j?U^eR>2O;YBeE1Uo+0R!Ts7xNq>Y?fYms$*|)Lzm?4$C)>Q#kj zMehf|)e-Zl@Z1orz3@!?gyR|ntAa}{w3_fdBVvmQ^I(8v9&le#3?hT|!n29U9(1FK z>|aw0&&?pAc7Zzz<PR0DYpu^X(Yd51`FN^oQV?7)g8lxc)mhcILL#Ak1X3j-5I6 z*qPfCBDb2^jHDYHlBq9NILsX0>xhE4jn`oewR=r%-ft@8GHQAqsMew86YWnSa^{Z7GI-&I7Y3@8joIWV zSqAa(rCA2Pm9XHX>L&f~-Rw+^6IG!$S5c!U(Mz#(Jqi*aQ1y~Pbc;;ib)`r;6Gg{S znwK~@0@R&&1+H^*gcX5IZdiuKE9)8AT)HPw3m1vREF$(|ba`59CntVgMWCgp+i@;I z1DCPMgSk-Mo6LsZ&0{mS0IgEJ@E1+2!iGaC#!#*RjNy4cnNi+VgjSKD7P9atojV0?;9@AjnWvK z)R|R%oN~jJ#-Kt5HE-VE%XgBfPLt@V4K!OC17lW_0&!Pq^1gshRWKNfy`>7V0(4Jyw~#rkiyPX3wip23%*#yDW!8 zM96^D>revC(dg%v2E@NnN~6*XERwjbf{;}T%2g@IhrzdmzZ-r8l32`>M3Y$1aU5k7 z2pB1MrIu3qSGw@`7y~>ELOg+fQNEF60{n9RFvJ>7)vfJR`2>GCrGtY-zRS@q5A zd-a*xH6tkvj)6%erBW|6!ZvxQDc?I|DvZOEA`wqXJx&I(LRwroF@zFvo|KwFHe*<> zlAXw%g#*W1W>1yXw01n0oD*m?Z>htAqt}D}9qo*xT0kM?(g?u}O=*X7pP{ld z@$ZUuSS9{_5u|&Za8<563?rikC>Owc7X(FcJitqQZ&Y#HtyDsQq~N`&Q^i$- z3UMisI~6SJll@neJBz@PbpXnd6@GQO(?!xr?u@c!i`?l7^&ykS z*nm`pw}6)xxzobB{$jGO$(?Sv zH5JF~F6%xzJFeGQn#O0XFP1xNK&$z$C8wFr?n^T-lRNWh3R;wjse0slR*xKkbGh7^ zJGoN{?#P{VEvUBYl`;P^PoR25xieo$?py@vI$r?wYq8u}hrUFBpOrgRyDsE!8kK2Vgi~bT zh7mNt7ik;3;_cI7fe}>U)$K;m_DqIo1P!HBYd4)|`o2nVOM-iC3avAJ;kCX>us4M^ zss#UHFCVX93MHL9F@^5Vm_j*n)n%#g>VsM_33LW)d~FJqtL?0rLM4DciarvuzpC{0YE0&$357XULuz2H!Q8&f^gJSy(ifNK~MipvCh zy^}hjg$dv`?e#90?(I`b&3e6Q(*V~csXM@>G`Ihaod=r2RiK0|fGgmsP3K0+3~=k% zJ(nof1YC!cL2F|03jkNE^7d)I0C1(jg&M#SQEUj3KDfC@+g5pb=dO`=QP zRi1kk1LbU{dc#V3w%mOb5URz3hL!YJ^TZuA7m4#m75I>K$&5_jF|iWXZ;%M1{!(kPwYU8-AxrMN}jXD`fd~ z*GdR8u;%~<4Kyb9pF(WTzs>VAvv}T8)&|ig!Sizt&m}%tegF2e5pajFurapD+#$P; zB6!x69P^@jHe*A6BMcpx`!EsjPR@e-wkul*@>d`b3GzEG(jMF{&E4;SVxiD3oV<(J z67rT6S?*W{-;h_?0Uyn36;%WFx9q@Kne5N9XPEVM@QVP6!zLQhQDXr$)=K?`Ss%(% zhenM?|5Go!C-UqP9@IQjm27=DRUm68Y~|P%wO#`zqeMRJaloWBkyjLF_NRR-$ zw2KQ`50gcWV+I3ZV>{$N9+~Z45uQ%DbT_dnr9}QbeM8HIRU_FNH30arHxl zj&Q*vfN;Tw@YJ}_>f%apVaCO^5-x16fD27eSHOi-2oWv>LBrufxN^7e!HPcB9-YU->AOfLW=dfeWuF?|l?lt5G6Bgwg09-6^$1hc_f`9WBJiJ-al% zM@`I6CVBP*4n;e4CyTRRm`I;0yN3<#iEd~oNMmD@_#U{JSeITDl!b$Xdz6qq8{EUW zZHbdbwE%*lqz>*$`H$hc1o2t|H^zl(J|EnZ2J=X-mAVtu0|ob_>O%ycI*;#UdG9Sb zJOcSyg3P?%B(oFef)YfQaFQm%v1v|(l?1P+!@*R8bycS{K-90QOON*S-X*37VIP(d z(-NZJs9x3HX;gK({i4PILV4``a!Fe7+U3wB>S2(mhp9x}3>tIHv{j^*wtryMSTN?z zsF&(?b?=>1znW2F3Vo=f#^fDzGQa^*W2xuDM~$VNd_HQ-Pk_+2ph>PCH3n1mnZL79 zV_5UtaBDxxI%-T#XvO9pA!=+1q$fdRp)M~X;~?mb3Jp(##vH)Udhc@Qy^8=pvivGWX->v%h>5x%qgcSy8zy zS`P9b?R?RrGNZ`Nc!ON|hg6Z1Wv8jgIeruryAUlG<@pw+3_%83v{aE>N6VE5Wog{D zirgAHPdHlc4pZcGT1NBa1|LFjB1ebcVdZ&|*ODOrV<>Xwbm^uX^!Vj@8;V>V9cQO0 zy*Oc*P4U(RRG8koOp$B4MvkP&CBBg(%C$|WNOZo{%9_QnHx;>+!Z7C)ISX>n5UX60 zkmJ$8E{q>ADsnXRj>1r)Nu1ZY1iexg1p*(2Su1k!7axXM#}n1BUWZ{WQsfQ}!(0OC zNfc(gBG-({5@Pnw+G^@6^Lvg(~7z;B@NoJ8XEX z2i`QM)w{_QVDE!fIA+OE6BWunj~3o4Ghzs6#cYgH7p|PUK3oMvRY*vUf{WaM7QYfP z%!jw8+T*+%(0Me2_89P%C17&P!dn+5IyhQ6^$jXHp z9hO{iOEtaM0j|dla9x4~NqlQ^jAK6_fN&v=Z*{oP>WyD1z;!V$oJN4Fa3KmFh6~~9 z&c%h(4{$wo|DEwS7l@XsWrq#KjP{XeUeJCAgInN&s|R8d#%VGlDz5Q_kYE^$BhtXy z0x?s&h}XcNrcqWDGv>LLKuk>_2&&S+Qo(jnAZ8ro!a&U0AlMv&Wa)VkH)>$(KujNq z*?`W2bg#vMmK`~;MF z<=&xEaA5)=UM`MmL8v;DkK*S#UM^O7yMM%bm49wSILxT##J473SVW-%bhdTeGim7 zsd=L+YgkiStE?Ra@Z#f&Sy-%SHRa9-T1x@mIX3H)0agQelQ1IG*~tLy0PkF|#6rYu z;edum19D1DD*Z`cs5HO=g1af)mCmw(!{t$v}uz&z~;c8I;PHMAQWd4=ywT>(B z0XV4`K5zbYmh2#ghd2fTD_G5C0XU1q@O1!=D+zN;>&r#JjUm5+sMy$*O$}$<^fmsyk!A60PZ>fhX5QA%ViNb!w`WZ8*r3T zLLDm?fdk#eGl7s9OW_RH0XVAUw0eQLWf3^ZNzt4oWzIsjEclvT1diVV6I=Q(;{Y7T z`=e^v5`hy-X*D8nd|XalRqK!eI8ji*`RaCvS0|+R1S`ymriYLl`E3slz-jRhbK-Xt zcozrY_*vOo+^kvxaH3MMz#_+rtOIavd4;*88cPES8WA|r%+iR!@$S7E7h26Mivw_0 z!iAFwz!5G4F~s3QxI&;MRxDiA0XTOWF1!Q+a72?ai_PXm95w(a$gvQ-DCpL)IKg_i zdH_y5$t4MKXeQ80tPPHkx)NH$#ew_;2qN1?sns0GCfnBTlD0z0&Tbb3R{^i^CR_*G zMjYhA0G!%n*BpYmNajS`bpX!nF^3K4jDo|09Cqyli>dplG@ zON99(xuK;Jnq|+I{nP}vPN0uT3NbZ_mBW!0`GDk8XF@|oYN>?Q_0_kPx#&&0C!9ck zTX@*KcQ>Zh#N}F+K)jm!CkzMoW7^QyW70)p` z`25TzklqOF@~*UXB{Xx8kmz!|mj1f~BD)$Q6OQb? z7dX8G0@8AT9w!JT2k4QUhhc1_gRC~oAs^GNa`-3*5)R*V=82D2kM2_|f2ceDl+5Iy zyo^F3n|8336+Y?6ltx5dfmvkBj%m&I=~^}to!y0t$z|kvsHa27KGEmM6j&} zwEW-Kj7eGKu1A-GW`o6=B6WzvV=>XJ>XINFQ^L}uk9#?pu|bI&DusB$(_M_UMW1iTLjbzJ0V zldo^Sz({not!s@Xr)fGbn6Tdfw_TuHrPf#k+?f6#h^hhi1VbGKxFL=}fSZOoHcEc@ zf;TfsaPkmaYMoxtdHN$LxCNoYq5^T=?{!_T%hDOxJk`MmX{j4!;jKs2Z-1S zTAYg@0uo&WYS;lCrP~_k$i6rxVMpmI)bVhEjxVXBbXm$oO;EH~<0Rd6r7?@cF)Ev} zIF|mlIMC6n`9U}!&!Z*KG0~D2xczE+T8kv2v|j?<=y6$MVbJUzxwA(;=~0s_gjZhG0DD(7N&FZRkLC-;HU1 zGLXF>n^2>YTDJAi9LCNQ(+wI;dR1pKtRCa>jjHqA+nDO!ylqtzc#Lkig?dYi&SWs+ zPdC3@W_CLHrF=N$;qTk-lo@I?y}9q-o^?_KSqo;$jp)|;ey|-R{FfX|nak+(huA}L%JeZHUg%N32f5y{pSF zYr@PSbAvbA8h?C1&1$3OCgpZ8yH zKKZ$i_^&VgwP&By*Xr+mEThrQcRu?>_VD(%+-u)&{z&%7_J!(?el|P9URF1spzXu# zoxa}u3BCdh)#Fdze2Ql0tAF`%*X;41{=z51JN2T6x3Pd!?|ka>pRi^>{tK?zJJsyr zZ3^C2@BGM@^py?d>*s%-X7^VAqi^>3N51sQ(A!6z3}4@=$vnIb0Pw^UpR|s@7CKfl z|Jzfa*H?T0Pk%wp?ydgXC;c!#^2Dcn$Gl(7I0jws{{_Ad?CTeP!Jha#{t4dnsrcKI z`l|Q8`{^$~O|w^4KlKUM@eA*I_Br1%%m3-{_1Uk4op`r4<>BqI9)9-Azhr~|rhoX| zYWDEH(JM*Jh6V#Hutr}~{w{r#UP9Gv{_dw%Dgx%+za-OS`+@SF{Q_s##?2KtXZF#NA- z_VD%|zy0o~e)C5PE$v_ZTW$ru{HZ_qWY71ej<4=)z2e^Z-|i~~Ouw%-4{viOeD#~p z{N6KsrAR{cd(Zs-Z}qg8-+aDvW>kIbV{}-(*Z%$wdU5r24Y~TdcBJ}g`};9%d-ad) z@9)~3fANdD^CkQHwV&7b-?zU%W6uJ0-1)TqecJAS$o~GC24DTSJ@w%i^!Cr$-@j>h zo_>N~HSACR!TSrAg#Ldl8`0>Wd@36~+06>@v+Rgsu~z)|*uH(RdY$Th{{oC3|4R4X zie8}y9WUDR1!;cTuL_;$T71uWh1)^v+<5`^QMjwzK5VDl<{3uYmOio#v7#S6RLJt@ zp1yhW`2pW5jXGy2c9k};C-gJKM?>1XQJvYZx>u|G`_U{ql9RcX52hOaAoSs1-Ivax z%CGaovwydcK@$p|RUh%+C1c<8-*MSg&wbXl$>ymQZ`t*4*%{`YtQd6rJxCrF3Y$#{ zS>>$sau_CpM#EP%uwT&pT?0+t&9vo7*mwLLL03<}ee{7*Bs|#mL;7HNGx-v(1A8-? zu1!RA3?;b$dVyh%b*B<&|;z&D#uxpO`tdNgfeLt!}BN({4s9J}ANjb|R=5}2Y%U%eO^%wW_;y7g{=+i15@k-U0t@bJ_+{YLiiK2P5F z@cy(XoZy}DAp=uukg36>r-T;txvaJG_<~XJFI{eV3arWhsz$~5%=Ip{^_u~U-MIV*1zXF-GE?F zJj}Y-a0>DrW2mI={iA5@DCdqvvn72X%oY1p7XD{Pd#+syj^H6EVJt{{2DrR zyXSVbdgCK7cK1?gW!8pJ6r?;E?2PI-7|QfQ=*hzn9%+n^Z0Gz8a{<(h7rJH!2Wm!V zF9;mipKlfbga)?H@YKuAcj#xkuiw=iD~Hyf27(-VgjX7v(}~(zo6y;$@7p3x8Yh0n zwN;PSm>1ZaUC#sGdfv2LBwKg_c1vFaO74aR>wsGfgnAU{!N z-X6qGn99RY{7fR~#VV8JX-)qG!mG8plwX>Hi=$EX>hX{CrbZvs)t?NY*}qovo$;Uc zk+d1B`?1W%KMK1M$g(heKoNfR z&4}SB_C5O3E*`S`J5_mg+P%nrGy4n3*wvo??CK8^aktvKGXD2{V>um$|L>8!tRp_U zmvY>AukWB!@UFp?YWTL-cTj*h5f~#R<9&UnocT}>sgoa=3(a5~iI zf;Gbql&e0If*7(J(~KSjV8X(Jen!=BlGBtQugb!yrm`GmHzsVKYnSr|P+lrWjtDO~ zm?2Eu5G2hpgl{?W5GE@Q;ahA7<8%m9Hv|b#4B=Hr9>R3RA-u|lu$2zsem4Y(gAC!m zBM;&J6^C#i8~3K{b@@eY0w*9NFyJ@F3w*JYUq(6uhw|#5 zT@=s$=l>soBbiL9t3x|xfWCOqyqBiiRrwD@T%lQhIU=Uvqrp5+T%tdIHhmQc%BHA< z;3N7iJ&IXem3zVWTZV6i7qPzSKej1W8S-wh=8#B4lCo+dw zOs%M=R#d+mr&chviJW%4DCp6KyszmDucJ#>e_Wb4XKmb20D6Q~+UFV*o(^f-JwGNs zH74%am~tBpW3;oU>Nyx~+G4&oPITAz<=Mb*!hn$?SZWgn$tDb(V5|kS6>+LBC|-7D zO1STa{@#BbDy}czVwV$~+`778S0x5+7Wg%tSJ~zC`n7BHR>43-L^sV|aIY@9px9$( zW9Su^nJ7gY5V!N|SEf7+wZ1y-6K|xRn3=n{qARivlPj3w)hVFzRv!CaCWBq0?BOy& zeqjzQ)Dgf;lB}^MElpW54 zeod#mafPwGp5Z`>nEXsLNRBm|#Aet$ScaKqkOgZtjm-cmR(7TtsB6vc56#5$jQ41k zqPNKW9o_0CqvDGHl^t$DsiE06w{Q!J$u=}@L2RW3!FQ~=`zYK;ZXcu9Yl%8qT5TX) z5IS746XTx)1v*Y6>b$A*y8JJw#bqIh-Mu^-{qp_USn&4b@apu8795L^_J(D2HY|`} z{7ZDRL9a4?PIZ2#XhykV-D6&ofWP6or-gNIcQ0!{MQixrSRA&5X(E9{%Zvlyk@X7r zIc6UeL1U&cKPfy@xSnICU1O#oP=47Kn_mw3pd4;mZtY81jNd(&Vr~+2Gj>T)61^YW zLbe})`emO#Qs`N5QLUWYngk0d(^>a5ogXC7g^wSYoYlwoPsaNAzDb^6u5J>kqYgHv zs>577e15t$eot>YU;%|`Rp%|+SlOguU6#mbl80Nd%Z#8WMl2*Ow*jOpdRGiQq-vqC zEL4}!RTfOpo4SJXIR9c-Q*-}pC{m%ioh&b~r{Ryp4SA*9)GrVU{z52h$Pfyy9HHO~ zgo3{i3P=E7pfUWt|N1o`l98W4M}ID}we=&K+FQ!1xPiPQsJH8hU2n$gsa*>_L<^5U z8TNO?T0@SuZGXO7jA+BjR&JNd%!K=+gPvdxBkUPK)B*o^>6U!IZPit=1i)g7Tz_x?r+ng{!L7sX@F1pBbvmS^2~$zy9r&= zn{nF{U$hAB!E_JmtZBa-@jN%AwTHEk7)xXlfK?5n@NBTFZ7{PjG+9!gp+59Y59?{o zek#e8FGJ|r=s^gQ!^Ww+v)l3Zf6mI#V6x@Jk+I{1!nmP`g-~z`MIKgz?+2NN<980K zul;in3f5?RafW(1oMm*w>VIb82~RW1^I-mvK9LN$!6@IrhsD3a=eUg#nw=iLrt{`% zjPV}YIDWbZaS*r}!C)+?dqC%<{JW|b{vtYB^>;E?KJYhkNxOcS7pft|%LXCVr3=wO z@f2pDpCF7nwG6DC*C!O>CK8wj5(w)z2ToM^vvgHet3VH?VQU7v;P%<0=j5^l^^@F{}pzUBt!h# zALZiCBBZDh*Q+Q0wY%<(sy}57xtV?M`K|7#`euE#WE8XS>8GRU&Hh)I=qDK=zSWK5 zi~gGTCZmA(CZniVj6G_u#q4`}=_tCh|B1%h+`ksz>eu3r-CFS8WE7Z4>rt4ZJ2FTU zoN%C=Fwx*7WA)4y(9}B>nj|>M0-R*Ca3UyC4+6^~LJ8keC<&0_Apiq{ZS>5{^Io?D z$dtv-xz5Z_yO^a4{3r9JXn&a;#FJ{;pBILlc=tU zJaqYYvH;GElKXx-h?Q4&imWSgHmKeYc|^-acIHFtP|0{-{r8#R@}pVk z!~bNAvzG(Fe>3A(fkyW{Y+4RK1f0;7F!&w*Vk}b)-x-6n16e-6OCH?9k|*hxySugw zh$8xm;fYuOtaUzy+CPVxv5PE@rBGechM`s;(*S*+@~%no;CEIHvZc$hzu2{2?ZS`I z+U$ifRzIhn5IFU6+l#sbQ)qTe`sJH{+U|v?^XlVrNV@gQs!z18S2t%qKd)c)4%SPr z;|pf8>XTXZ3*nbBaEmqcJdn+t&-;GSr}WsCOhKC46nm}B&MtSSFftoBmwtqDK66at z<~3@bydV=&^(kc)R==3Bt!@Ytu_;3>b3q7j=-aSDw3AgIeh+KuAW5$c#8B*%?ZcqU zh78$BAwXPLjgv{-G+UOM@%4F)z=rGq!M?i<&#J$b33xOgXZ7mXWGaoiQ~hm&!KZD3 zv2E>jAFB`&)MD>ED${7P6J8FL`{xdMG>xt4rfEsuk|Q7~x2j9%UPe3oa)Mwz*{Z}5 z+!Bu;N$#-*HkR}r&{#5%t@PfmyVrPj&)wUN?KX`M2?lxF#d613DPJ!jMEAxYhs{4? zTz+yEiQ+Ra2#3)@AJZcI$y02I6kvU;q%I*PPd2Mxeu3aOqzW~6>c?4qY?WsjAdJx( zz`r|HPHQ!St@A7bSGiej-@w{+{u;U)gOF#+mI!$%t`m!h*aVaigUwwz9JA^f+q{mm zL-N?Y)u+kWVYKy~uqDs}G}s1YxV7W9_FET*qFjJs2Eq(FD|d{H+>01d{ffPAPrvRN zK5&PTs0o+iQ4aPb;R#43iB!L8u>KjwrI$m@vU}BzF8I~DQmbFHR==K2Fg$FHMpLYH zCc{i{?9&lb!a*hQ*SAe}*QAUT-;LDYV_qA>_As2;KQ1 zbZ_wxdhbc=9 zgGbN`MhW#)b>1Q;3d`STY1C;5AhI5v^$%uSpvLl%PfYxQl<2BMPKVw(+3{w>qCkNv zcWeyonyeICI5$XZu;%5qyP(1&U6rHcio+f-Lu19@F*B#J76myeIf8>!RLFHvZm`*G zCX9&$L#f2xn5c8TugH0HMn92dJ(CwdkNB$v`kZ(l9reG51*1#qm17~ilt0^@ z4$hlqPD5_9^f~*~C zLEh@#LHWwj_hYzoDy}T<46e$hxaDr2{`BjBvR7#VJ84nRxj+HTY1NlH&u@0vuhG4< zH!JsVZDd1r_r;DmkaA&-xM$g|-gB05m<_)x^Re^_oM%5J_JzZl$vpE<=_*>5^&rn_ z9a+<-iYpRUtA8|3n&`*>X2g@vpK*8TlQBO2d}sU=w!-R5_3bLFzT6d%<+g0_jc6`F z-~F&64D!p>`+hbX{~zp#I8{$!9VL){B*u(T{A$N~W zV8+!~tmCrSNAjznChA6Stvf2T6|+4FT7TKzKl3PqJMd8(1u!Ubfs0MRfoX>zyy|}g zIAn&k?F8g(IBFAt#C5J|$he5BCl{1=P5#Q&$(M{IJ_?L?_ADB?HoJqF*YuJNL3efB2IE8bIb=eKpt`se=+~`~_NikkmRn zn18t#e`cs(-vpI^{#{7-Z+uSE=|t0g!!!E( z+GjraP_A+5;vu{BfNp)jUhq49o)6|v(WLqZf8C)CN(D}=@o#94bNTWu%p4K`sP3H`zRi=seaHx%hZ8^HPai9z)_FlYQM;Ph zRXz8g@}hTQHaAiwjqD#j=;#IufJ36{V5#DnFLuP?^3h+<**Di+COBhZ14YvQnDU%e zA9yH`wJeY|+Fi=OfRm#7qh~!yGs?uqZxK&g4X=#f1E9bj@P~F@SA2tc>GLM@74zEq z)jwN2;lB_0{-oC7z4inxF98r}bbNlLfSl>87D_xre;sXq?b!_gjmzg~BXX|qUj;t! z80qU*`1(~ikX$BTVSgB=V+;EHyL6-pt8}L|O@&z;;n*aTBMBC4&WI>>D) z$IcS4cYD4dGV*OxnEM`g%;3(nTr)z- zFS=%z%APetZ@i!vF}$Dr?1#VWHGlrXKl^_ky!Va&HG{D|5d~&Y8Uo=k@Yt~ne97gA z%&Uu9cg$qZl*Kce9&InW;g;^n3lbesgDvvD%$k_Q~|e*p4^Bk?kXsEC;_@cD^;g zS$uZ7_0d0T#8cPr<{GEjuX0QDvfL^QeK$JV|J8Dv?>D&*9hE(T;Xp+@`h z0PMJn>m@Xhm0Ask`=av#OMXXcgaC^RxB<$-%+x<$jDMY%R8L_0w;P{>jh#ml`&KkN zWVvt66~WP|p2{njr~UG6#Sjg!__jhCAd8t*U$tLg0nRp0pPvOS39y8<@X}qpm%z=F z#b-bId~Q`Ilw-mVd%zAqe8B%;Op~sj5d~5E4}9=>2Cv586ysJ?cW;kfpo0sZD_la< zaqNLMpMiWNUA!Mm9KLV5`I8Un7fQXVPa@TLywu}1Ydx;r=JCI4kH@#YABlG3ebXV2 z^Gj9^^>`_hH65hOX}tARmlN?#FFlRrG?k+{pX}7ZgV|_47w5p^qWj^}9C#>=DBWA_ zg&NO-$0d)4VLKf30`8wHfbIO-iai23_!x7#3Lk=JJ`A1>B|baMFXw+n3$OssC3p|T zz=g)ov}3)4SJ(0b;`IV)_rM26)8U`*@ZWy{5y@m!`i6jC{bb*&vOneaufV&fqrYgs zGfVpo=f2$@zQ5dbzerDsPhvG2{Unb)l<&b@=leINOaB+Zh^=2KH$FJ^y$B)n?#*(? zZg0H595(uQPlA@4KgnYc34J8-Uxc`f{v>n4JAtgl#SZHRSrlnpE)hO9F`1B7P2!8j z7=C~fA>wGk&_zBxkT_ISzx@>k>*OKHizZ#_5oop~8|W?@f}SAXK}R$QfYCiU2>dn; zty}1-enE_kFZ@C_wUO%=BuVwaBh}A-S>h-WgUHqeB8U{8(SOjaHPuV`XDlwD1AV*# zIs962r7C5DJhK!0U z9YSB8gBmHuQxoZY8{8S0OyLf8bu+iCEqC>VyHe&JEuVB(1itASdUCd~cmzV9fkno} zx)FnBQ{gYuVnY88CxQ6SXAr$dj}Kz-Xw*j(;m5*U%Kw6WzNYj4v-kedmYrpt=RRkj zdw$$=?!D($Rgy~m%07qcUWF!_rL2$z&QM!{&g#D}U+D^wHE{Z+r@)hWR=wi_%!|6D&Zoj!50$lUGmM(CCfhfERA9h~b#kl0BaZ zdSU)fdRTD&7@mP=!ubQ7KN`;OlgA*OU*P=VaDI{VXT$lEoIe-NpXU7Yc7Ce;1!n(C z;rfOAh53CZ&z_Gi|HAfXrIsk&emY1K zL1V6T7S6}PVlE$ROG__IOK;jBg}jv$<_B$P(k_hz>B94YguPj(k8*lg8sGC7`wMeo z+B$uhQ+<=uXE=Qh*S=aR|Uv_Omzb;p>`S?e^(;?(aryqIQ$;81&?Z4eOURVPD7+m$&%12^-k%TQ=LP z_qN}Ny^gpUxwvVcUi8sX;)ED2H=Cu$;i%N?y}4z{0xxrcT*ZZ6e$H%Xt2(4maWR0w zmA_g9E@X>{bcx42C#M^8a=I}mM{mE-lD8YwD&Gt?f=ZKae!8HV08U)bY{t!nyORPV z1Su5j5Z}vj#WLmDE6tnAGvz0KF7iJK0vHZe)ii!s4PPk5?N(lSR727lay%v7SIG}P z($c&`958st<*)xuMxsFFPCy7fi<@G_lCIS=7e!KXyXCzy^I6^_Z){ie!K*|rq-jbF z@c~I^q=sdvv52UA``>4^bHDu1VH_X=8KWzo{&l%S=-81GYrFig-)mvb7g+q(^ z&_bs$AIi>LVLn>uI2QJTMM&Z3@r(H&&?v9GeNw#{JM&!2F}rw@LF->(Q!GS4EvxZI zAF=t@xWo69?kkUWn0wauvRsqjd`lT2p0L8VeFZ3fhyUg5%lPRC*7Jp^@@Z#0(>qgk z$SXWjeip~MKXH$uiT=@HJ;*h6l|Ur5a{7FKt@^&<%}S%!cL{|M153IO~+ryJi~-1i7WB51Qkei3J2%+?g-ZIe&ax`$T!`^M=wG#o#oEayj~*cis2A&PG*WHFQ|;Zbx``EqN@$TQ>rbb!tPsYYkL` z3PfP5TUhfXe6dJD=M3`ONb<%t!hQKI<9(vd;XYn;VJY{OjiaQP{C}Y7I+QDolTI-k zg8!QM3KS+S8Vn!1^ARjYXBvNiaH#mFw8AjtWhhqXzG}$AJ<10(P)z&K)hH(1tA-q~ zO?ibN3ZFbC?0IoZx<1AZ;zXN+O->@W^?IU^@T#BimjN@nB5?M`KSOi~|Lgcc<5RcV(IZ3Pxd;GycA;;= z;8vLz=EQ0%IaWM>0Qr*fB}jPH0SzWVf;(kPcZ>{=PF9uPPL{#lCDz#+&Q77E7f905 z#m?PEd@4eciC1;U4_J*Ag*2JgZuyb_svZ%=K#02a*B$;%ySc=S?o>7}!q5U%!B%y( z$HE}IQ4KM0l%FS6TnVBQ=Q#MB6~0P3>2tO$niCH@F)k*LpEykQoc;B%6F+M!F{+mg zyb3$D6kU?Z$X6`vWJkhIc7w2!HGWQWX<;YlGMPI08dn%!>qfYc={4%U$GBijuT_^( zFeHMFjbn*1oVMVn=Wq3&kb)*#&UQ^QN1N=hM($Mmb}dk9F%fk7wS=Mc=qn5z)Z~v zHiK3q-UnLuvF4Z|_(h_Y?KCyxN&__|xPZB7N%fX}|AAW01p*KXT z(2yuTt*yjw&RPusM7_8c!Ao&3zXCIOon9E9#n&fRe>WdgSDM}6(^WS%{4LYd63GP1Ob*6H;|cj=mxG~6v@Aps#+s$S#}@@M0q zaOWA=ZOrPDBpO%J$%F0zfgo5-9%Y{D$wPC2sj5SU&M<0TcyX4fH0qbBEtl@b* zH4j;!6bEm}Ppk7K?hi^~8&P1c(5qtQ>syE7bXs@9R1SP9L3W!;TB)nKK4pY9()7U~ z_#ZXD3gbDlLX79Yf?pAN4&wV&E==fwa+ET73bUhyO?J2w-K1BZKEof9NP0>lc^fzM zR&g4?r_4w(CtiE1{VM(8X;MnYA7Q1|`0YLBT71VcD8p*(ITgB%!B)v&3EjX=$WAI# z8Eo3V*X|805VD8@nKYlf6^ub^(=s!Qtu5;%k6HhG2>SI_!odJnmfyybXuEB}J6vP3Z+&+_Htkjb_L9V311eIfOcS{YMQ!cgJ8K^BZGhh$SzW8 zSr0May>E<5=YnEaP$XYRD%fO|j{rrKr@pIVs}4~HdJ=5Q#t#aiTw+;&3Ynt_KpAt0 z^E)^DV5QK|6Mb64r&h?ybmvW%*)Rt>J>-Sv;y1min~LwQ6tBu%#I(o-{LzoQMrPlX z(C$h!%R9k~aQ+|mGhF^qBRy9ixO3|i>FPA|D*ZkwG;m#u6Lc-}2S5*k*hPe)>011i zt_6~FhO*_BDCh3Wvt}X3rxTSeM4TyGc0}2-8z@`WxKg%CS=SI`+tP7 z)Bn{~P(`l!Xn*d?mQ&cc&9h8E27+_YLT3(OFn-B@b1xA|sOY)q#OmJ_R|9SzuOR6>8?6ry0*GMrLI zirG2V-_YHYC@19QI$q=3pgFxabY{X|3OWxbaQzqq`i{hWe~!XOGV3ZpEfV~A}59AvaSd9wRh-AnjLe-76SNiXty=-Os0 z@R*{;{Ncq!pu|1fVn_l?{3c(~H!&Cy6<(Fg=fDE%`2w~txfM(=C2uw6fIGqTvNgIY za>V}Kh7;d}R!bjWfLP~nJG0K=PUZ11Kh>C0VP(L1sr3fpL{2h=K9QCvWMicJ4A1yk z92&1ZiHVODihxsso8FL^7BY$y%^SY0_N52LKtpE?oWK~afm{8}ZHq5DVm$5Z72!d}Y+9d0dc;aIoPYjXAi;c+Rla0vZ z(^ceAy{7L99M!Q!WkbeyKgvqNZ1|;IS^RCLiN;UmNETA{`Av}|GT-gDF%HJvDpwWv z>)e*1S>2Z5(4)EmOBc$+s_@NX1eN+e2dkm;A68u1&OVE4B>`KA7se=UZd3@F#3(Jn zJQIyptI&asNRW^<&v=N^qMLb?mXl{mocrcn3=gw{ZmC|Aow2};^cr2G3jz)9s4N`T(nYa4KMO6qOkIj0M%=KRA%t^Jkwj6;;Ra!=(6Qw+I4-q<8u3ulY@m;U-k38}EJ6Z*UAZ zphDev=uiCy$8duPy>9&KC;bM;aO0TYcuVL2$8e+Y8~^98`x6|)jgx-k-FHZ-F5i7e zxO~blzbCZk7;fC^H~!;q`-?b+8@Kz79|=!z3^!ijH-0xf!7<#p({KDk00_r$g9RiS z-u=ot?r;c~0|3AOS^qT0aO0)k{&NafcFNBU!)2DE=rtevCwBQ`|0G;~m0$jm@EVTc z#;g6t509+<50Ap-Z}-c8{xSb7$8h5{;r&>ueD-6f!sXZc<$w5EyZjGd8!mr`U;fFD z`)fFc8~?&@{GiXk55^hzPQU!|O?%D9H$&^Y{qhqB?eY@`!{zVx%fI#q{&tSx#(BT- zh_`z`V+>z`T;*B=Pizx-+c0>^OY!Eom%-q*56IEFj#40nDk^onD+ z^PX_$kHRw?!<~o2o&P&L!!g`>f4K7-f9O5n818%^-1+n&>%gZEh3g***DpNfPjC!( z9u0Rs^+F%z3&V95n;RTIa>TBGS#5jCF-*MBIm8jj%!xSRFr69IuZhC3`jvO7QeeEY_aK0jP%4Vztm zpI?7py#7qM{HAPXfhu z&unQC7R~{ZsDA!O+vA6&%k!&MKAQY$H-6=fU!BIUmBz1b<5#cotKaxFX#84j{2DfX zjT*n!8o$;Xzcw1b#>p=-HKe_a9~m4Oe?SH2Oo4hsSd9og4*_qymhU6bS9EX7?(_xa zf(xbx(<9M;XZZ^_t!Sp{xZA=<64aQs7# z-_G%mIKF`6GaLzHmVeB#;P@vTWzc_;Bhg(u5(-uZk__WhN=m{_OEt0{_BuHZ(lXFI zaA;GpOlpmVgVed%=H`-`Yi_|NHSeGzIr7GdwNEL^$b03x;H#xo$>${~p5M%B%L|3A zoAh(mOMXDgyHaUv?PU1}YvZ33o)`l3hvmf|!qUSpg34XKg_2sI8`mfUbmI4-?`b%lzOsK{?I2|6JaF&e)3f0l+0y~lyCnc@V+g}a8{L{`H>dZ zZB|}jHGHpJQMEH=2$f%OOS6mcIa|laE!tn@(q_?&V&?LuI0v7`Q2w7&=MgYHo-tZcF7sbn|T@7 za;kk^Fd&2`ykLyNi^so_n4-|4U0!JYGoD!yI`9^|KQ8~8^uU;14{GQw-z3^0gy?x4 zM!v$q&nv`I{`MERrx)tGS|-KJ{6Nd8bYPMz8oUN?pb{ zf3;F0PRUta-Q`aCEc}=o=IY~Hx_Pm+Im+xYemv1)_RCMaixlyD%fJ6i?+$Pp4u88% zKgu^fm6hm8@*f21jcdOYdn3 zckJ4Q#BbPIr)T4qn`~oAfH*rCaA5oyrJsA(F0JT6U^-GY1q-{FrB^AU4GIFSl4!FEc zz>IIyZs?`aN6S3-=p*6=PZRx;9~nO7p#bJvq>&9DrD9x&Q4QiC%}4z-`F8Eo<9{;{ zH_fJ2dBsA5&lpai&bHh#m-0yW5e4cwlb9Q(i2*CR+di%F@}%gRGs~A?!J&A;!}N@2 z^yj2LW3xkIsICcCipUFC;Ybj{vb5|ic3S@MHCh5ptNCdYUrfD;ufB_~ek#5!BTW2M>BZ9vxWy8Ydjb_9t?#CRBvkF!NBoguow@>#1S5_35(;wu>4KKgJHyjVTuPs z!-MM6jt5jV8#*40hQHozjbMR?UMv%7%@-C4>-*9nx%*$$LT6x=A6 zFsP;H7@Zg%aAib_B8UD28LeN8S-;i{=30eFk64AMXD8#D-C1%%cR|!mT3!`(V>y7f zgd&Dfwo9p(G3sWEdAb&LQ{|LG$w%vCe2)sP@?%yhMD-Xj(RUGk-Ze|CW&~wXo)j-u zju=M4%a3l+M}f}9L`uBIxjWp}$kpCBiWu%xCYNz4f*XdJ1{H&wK7Fz*_WjeG%I>V5V>1H8brx5rHCsnf8YtJ?tr#54UYSXJDgUCm(2md<2nCw?RJb zS@L001Nm?k$;TghI7dK39TUS4S10_D0}klV1bMMg)-edu86`kqe4h#7DPaVAsyJ1{${0iwLw06E$K zZL;(7uUSeaSECj>b_3VYbT9KD*vy*DHK(SmJR1zgSYAHMV4l;74dydC`>?dIXIo)7 z&$fIxRVSQ#wB=Bc^+c!5dcvuIe?$UAQi^v6){h6UK7E;B#U#kf&jMCC!5yqm zRA9Xr!Fq8Uu*#gI(+#km)RpT6tbqU>KUPb0~S0OI{(0BcK&|#^zXzes?NVzXGUBXV&^X`@4Pt`t_2pL z(=4MdS9cQnY9NAHn-wQ!tbd&aM#V8QD)POSGAcv{B1l}<)|ys~icnkJF;gc-@*VUYE6BzWx^T>dN~KQs4xN`{TvH< zEnCQJolL8=%;xdctTJb&D<;av%CW}NFYOG434E29QC=o*vDHi_bDo1sY1K3c{TvF9 zVfLv8z-nA2_SZJm1&_20Yx%P=tcN*$FvUgXQc>4}ncXuI>bQk~Tc}|nPRYU;kfO_$8n3!)-Zz+r#&@ z$jnU3LrZCmf2=n_O&-6yhsUoqes516zwwXvY%zQboXaUWSPryB z3W{Gi1E9XVnbF5Yp?;mbv>LIcj z6?Od6q|yv;rdz6b*waj#M#=KG%~h1O?^XsH=<#azNa9GKqjDs0jpa46gn&xoP|9a5 zAzl|OAU1n$G+21BpTf1njlsx?EW^#l5{HkB3kOWRN zB_gA^daR9>%1uOrj=urT*D0U?r0ybQOiFI&G+|>+i@@}T@?Ww&GZ1Yb^Jm9DwXnpY$pmEX!fiL8xjPpwJvEgZv#^z)hO#XnqV)t+Sf=Ah3J;l>;z1>X zxocj8$lNFjtti1Sr-EvEfTVCk*~i<;IppQSG`;Rl1t$3MfP#dUzleWXTu3)FKEMIS zrS%CpDQ}q2ip9t?i-pC4Bf`1H=1N0+6^>Y7V1zhj6h;Aa=fjlBK9Z5qb;hG27L{uP zBZIZ+;y8G|obkMuFr}FHUtt@k%v*EcWZjj_CTG=$_MGQxij`rVh#RrD0~4UQJwtwG z(J<<_L_<&t7u-}pftv~_`!Xmo(=RfpKF1JywHR7fGt;^+aYP<*^%bzWMNfwxvuKEs zeT+}F6GZKZ(KHdYvpYruk5h?aF*bYtVN)x(_Wt_X`?&_Wff$hCsrG5by9n15eo5wN zxJonJW8w12=H)RVM52mX%qxO=^>8>eqI;?}{+Yq>vn#DZbj>1g39N`?izuIS?-`oU1foJhnv;8^NDs^Aj ztat&~JP4M*R1Xnl=0piVYNC{%#iVM6;%~qFH+Af#Z@Ovq zWiS}sKx2=Shp<-PC+hA<(7BXJFi#tfa>0yv99+c%-K_qNfo_H3v>uIoh9A;?qJrO$ zk>Xa$RVW=0q6=t;Lv1I)UIRGV0l@1(so^Ap+y}h6tJRl$!B1AWW>;3Uv=(VwtSO$Q z_k=BBaK92BN7DtZ-5Y4%1(I?K$=lOm#R-oNtwG-d5i7&L-)ICP9EB{5E^H^8K@u0Y zuK6-w&aAnA^PG|*=(jmfD5b9G8Lsyy*>^$IBDKRMjJQFkA+|zJa2L3py97ZQ6o+H%`N}7sHeLbGCr!#0Ot=dBadUQ)waifw z{tt)adoZ=$_Exrd&;y?e{8?>nK;?673hIC}?DSyGU^?ZqG^g>imaqXI0Yjx_@)jnO z2DYf!mA$IC~59^<%?1Gf5~CQr-hC~Uo&wN~1l z9B*)knO!&T!|TSjj;6x}or5eh`$~>jE-)h&6A6T`bm;EOH_Dv74a5sAgoxlqPrA~)Jm4A!SpHnaQ+M5@}>(HUi@IO z5>MLk1fp)8jX&tAXEGJ|Af7U>sdZjlmy-{Xun4H%iq~0d+%i-%AKV?>(uOCNF?Es~ zQl?Qo2;2N3JB$dL6tFk)D|4GBUhpasBWMS5ahvU-kiVwyl`3haYi4gv+Bw*#@Hi-8 zvdxz47G{c#lM6YiXfh$fyZ9&?pOB~Q!tv1r5H=#i@L~9a-Z`!%91}oM}V0 zJg;wr3)U&t9?H(A2T&*(2)fU95*o4@f!3*Tf%_EI#wJrw4y&dyoL7b#?=9NaFOzP4 z-r=+lvC$RIq5qySNlY{0(W;~YJCG2!Nbs~*#X=BbRT!jKhe0^?FbF#y@lS<$U?D_8 zj_S+;AxGJiL8(gN2C)-+NFfrk0^GD`(SJFh9m#ZEt0LB`mYQ~2)qkvdc3VB z9H}26=0UUwkZJ(rvuOYt2LsTk7=Xsn_HjUa$s9gf%^`hc4pF%ZCGq{DtYwhXlsQKh z4cgMBqCLk=v*$o)$W-gf%HXtW6&_z>j*ckCBKMVb*B_%ZKKdoS= zSkzQ`BfuhYYoO()7-CxTXLod~xu!D%T&^g)L~`S72hyDA~&cTK6U6H+{Ju1-g( zI%8aj@>x{~b#3@Nop$%$mX!~N-Z!BKwyNt)H=?}f2^GjSiOjjIep8g<>s$KGL-NoR5c_eQ>kQB_1Xj%sCNR%~jiqx^+!yF?ru0eb_Fp^v~_TUwJn zr7m%HC!j}2@Txm4PZ|}Mxsjx2xH62@TLELV5Ey)1z+hFD@=%JAt4&6`2NGb6A~3AN zB0@Ln=$ZqAgMh(7z~GQiTJ*-&Gg`Z01O_J#jMm2(~Bm z0S}9V!w(MgmGAA}+hS3e36M1~g58r59uc892?zyCgB%S$AW#Ee=56!#J6+=*;%?+PT%Ax7vx)!veS$|8GWiNT#wCj_)5`L}- zHS)6kt>A2H(n1~kUXTD+2Px;Pd^0p70{C|AF~sK48Ja*R=0D7b-}1?ge|8#%t>Z;FHdqoG`xjJ>ntQ+XlA`lY44<|9NcC&roxO`k zFi@Y%P^`a=eVFni41SfT7@t^8xHn=1-=R1Bws%K$DJ+Bu-Xbh;sfOaesMTmnRGmva}{&^ zdj*|g9OR(-Tq*k~}Cs^Uxgq_@SGdAJTXH6EFSPFqkuG(h} zi8>TF_qk(vt%^UOiEoYnXaLc#s!05%&kT4vDA}@I)6;6J5agx+0{A!I?L)8&_p9fd zT+nWQt4Js;STaa!h)V-r40G>>fm_i2Lo(qV3>CaPg5aS1w16)7F90U6<}vjuLiATO z0hYoYC+T85u{V6{(PHyq4IzFmf%=~b>iUv>x%ylH?dkAl`&tCIO?Uda#Zy&(4vP3v z&vrd4I`9Jxc`tKdFH#TUD1AQsMY;$)q<7j(z_(wN-2~?vzbI41L%5ox7wk;65>=f4 z!hio@(S6$#7AB!2R;4RF<8fnr3&yK4hL8_MF5v`FhCiOSd$s6a0bZC0i%fkhhOr%| zMiPrtOFSB<&Jp);QPlttf5tH9FyhwxvV2h_s()VFyk}v~!eD0P%5XLX3o3_zJ-H=xqgAQ*H zo&&T}t!t5Pg%4^?ctReL4{G+^AXs>JF_I@K?qfN8ZlhXKqt))wQdNe0u4mq36&%=t z08>`K?^oq^j_(iG-%0sE{eHlZfD>Fc{Cy|BCBH1+BNrY-b1znKue4D%^>b>F@umhJ zLl3B5+h=`>mxvsGMSotR2j0&EN7<4NTo78E)}M## zQpK5%9DUsGvJr>1*$M!-sEV%wfPenOm}p4NstyxvpVS)8>@Hci`C1#3n`>G;<_|pS zRHn64BUNlf`gjwqG@}XLu_t*aE{T$7%O5yZW~^_Np{9ajyz0ZP&2>~Id5R%o+$1b4 zkDrfXr+LJHBG}nQLC8BRSnw+ZW--YXpT%li8UH(N^k=)k$$9zB3Bsh=UZSHpk%Vcl2>7z?kTXw(9HAc+m#j&VpvQlf0CR_ZJtyWe&0_D zaN)9ov;;Wt*h{*^Rs_;4wipXe(pdBzn}U*@KG5>Lg7GIkXj|m60vI4@=L&ok@Byh* zv;+BUdT4LVU3TOBl2g19PH_h>lEqHET`S9l^JM?Ni0uxIkFJ27Z-qyQ6ufUB2l*Hyi2xg_iJeR?&hCKAvcf#oj$J#|o zM)<`)NG?)f!Y}^Tr>uM4)Yb>t??+<~4^LTQDRLvLLGOIO9LY9Whw3}6=AChU$6i)H zGpg^1`{w0S=;gfiL*`U=d;(K6k2WbxAM>JV6Xx2?T@-ry6msO*$7l~=8B2^)A+dng!$U!fw^e-n;xhv^y}Sj(f{rTJ`Y9>?wGt-YR}mJ{I3< zUHtLo_W{w0;UYSX*8L(Y0#8SZilu_4?%{j8V!OyA3o8s zsYWw`@U;^*3Wy4a@(FzTub+VEsW<=*m>>PD)gjE&$#E<`ZhI3?Ar<^OK#M)#Z#gSZ z1|__C!*`KxtwBC}%USWGa&`7LRm6JiiT#D%*>l#Q`EZvo+db#x!2EJ6eu^&XQ~2?! zcd=W$#N?M--*(hK);r620S8RJ*Gbyg7h7k~#a7{?UFp-jM}6?<^Bdri?gnrNBy8YO`mvUhD zk=Fp<9X9zl#h5f@fUki~kLL3{3B7FBJW0Gv{DIQjb*T5}_w?2T5yVg88{=bfZjI~E+I|ywtv=}u z)Fa~-acJHn=Cz{sxq0;-Mks8H0-?tSo9!m>oOBY47PAW<3?+KD1zJ=MW+U#aF?G-yuAuVR-y)mu5FzZY~ zHLZ~&Cy0j#sQXNcogpXBR3tw4Oc;Zu9x<|t-AAb+L>AYx`RxhtKEImkWR`ztU73)s z7ZBpsKj9-`WU>h4!OpXGOUf!1g8nr032$%D%<2#*pai847raJwC(srieW)v?E$9@M zKzLTSi)qW5e&6V#pqOVHl%bQ{JdPfkJj*N5?(MP3wB2}Yg~~hk6m5U(1nOe*F-!$} zY&z{V9_v!s;+~>+{+tOt+%ev75xaffbi_v2ZB_fY*$0qo1tJo>i(I`3&mWuX2T4+4 z)VcQq286-skJ6Kz9F6esqCxn>)ga(R%C@raE*i$3#^B($?(4bT^xYo`-PS|9>2vka zGN|toVWt=){w^GWc9MY7Q7AxiXDmWTtVk`stC~^At8HebiCWBOphmKkLcg}3C1U-c zI%s%XHi1qJ`u3|(#tt4s0BgUe37*anqzThYBS=YBs}(T{sCiuwq)DNj2vS|Yz6r89 z44Y^ys)RY2VzY1zj@(z5Ae-F{I6q5}OAzKOm>`?O#=Eh5f((z^-n7GK`&MRH0<Q9B|Yu288*&iCO>)MblNew<&U}a?8L`zA=@^=Y#zgHXJ32Xw4XfIV@=aN1$syY zb|IRLbe=Q_f7BxlGJm1GT{2uOT<#RprSdj>d(oKv**In?{#~q^C~h@wUcG44{$L#S z>}dBi)RYVCa)<#FOqHBS80(BwW|Twx;2?X;Z-v_mCsW{ zDKzYi^W;b^8esUlKnTa?TJNUJPWW&%GW4z#!{I3m1|iR16Y?6G{X)niCvC#_MBDrdH57>%e;`?sT`g{j^ex00I$T+PWtY zPf^i2Bg;=dBYcDMIu_ldgjCe@3~BCVCO;wAp53)Yq8K5I3^yST*{meXg{WJu*R7y7 zW2uo?i?2)faS^6rY&n-m^oVUKQKLtwTcg9OA5`RvUo6hmfn`iOU>oV6my?gDm-o+1 zvyiq$7Zr9fb0m(|gP4aVxHfsTqtWs(TLEc!Vc7Cuw{6(CNu@kiw@O{;9yNIBu?`@> z<89z@5KyK{CKW@}3N1k3De(kU)JwY|co{S&>NY`I-s3^qu0g?WPTIM8W>3)!*zW&1 z-^VOvCy^RnXNXmjuk=4p2d^&%XKaM=%IfQj)id+(Ts50-lE72IQ~pYMZwV-h{FUGf z;U-?jW{4FiJ;u?A*9;&fnTYYJR~)tdsSMVRXUgyU$_KIqU^)PGgLNkSS=XO6{TXeI z--Hhr=#e+Js!1@A6HXTuHm|9U5{o59B$wetQ^<;wFR;Cf^a|L5Qd&?J&yZS2{gd-N z%=w_S$P%}?UbZI6MYenVMxJX??2vRlyaYzgWEzlwspO8a(GVCd?m>PC7x^T!H9SKq zDd_vkDeHqfTv%g0jLrFUNZCW1OYZdTgez+W-#yQVM=?2M6Y5dsWGs$njK@)(e(2qd zV?f>(U)Y*zzdE+>E3%`7l3)y*j6}$JP~L-X44@UYZyzmKNUseqSU02g6Xg%;b!}r{ zm5Zffky`$A__hQ_$b>{$#~JY$*rCi^+h=!u6AF>mEM-_1Ub)_;amu!@!$3~ zhH#&S!qsBD4dH6Sz_~vgU_phhO?1wfNWh0-7vUUG`_ZkaP$)_%g~DpOAS0zvv}=U| zS@@zXqdWASKIy)xEQ;ZIUR?vbv?@W&@V1U#YMJS55Gx(8P;l0TzBPUEt8P;9OZG_CW)W6{G9u6NK@5N$} zQ)0$quuByuk;T9jEC&3XmtZkq^F!IJNZEzOpt^S00V-o>2f>tI1R-=VGs0FL=ojdt zgI-?j&SIEnYNA5|C=3tDreUWRgLqnf3(^!dhF0PQJ6a4%q*M|1Nk@3&ovjQ90HUs& z)eu-+uo~=cQSYZI4_7PzT$ghsa-OI}rEM0+26R zQ5oZtsWlf3iN-Yy1Ke*U-@$E39aioXhstiijH@`QaaFe)Sg?K`D2vNtH>^4*je=&z zZa9S9u)ttg#8BP%OBw2NgTaiE7-kgK7*R)yq2i|Nk(&m-X=X#!oGpjpo20!NL(PNP zkW1F8ePpORm<mr3Dg#At^0Rm)j2WIsvP!WHhHdXc{cw%f{r? zzW8bfJ8ry1V6QBUw|_00&l10Gohe(+DBPO~V~LJU2*-AY#!st-#4L9skx=FWTz;ut zV#2YV1SR!}G}ExQTBPQK4)FA7v7~y&YOQDBKnWhn6-1(3N6L}KWk8!1de#wy|$^2;*Q4^8MxRX(UGd|Dt)s(%+bM-lP*fV0nhk^8$S+@o{Baaxe>rS*HyBSEAR@a=-dG* zr0olscBNK6f$|W1kwa1#F~HFyj4i%xs;x21yH;jkYL`C;sbksny6q?R2& z2oF)gaUjYGofy#b>S8XwBm?<${AX-vhDRitWS(l0%Byeq^CeJ>kCgJ~uez=Xu}C{l z7>8LfzG)KZLzcDZah88LqK8Qo|ENedG79G(6_Urx0l}G5c_tMVN%+UIp=f#H&OyzLdkxfCZfh+D}Pd40k8ej_OW~v_x243fl!>3EL$G5$IOB z>=L#c9s%(C#%fdc4c}<6U7=Hh?Gho7(a^j$ib^GXW`XHBD%KTXSchv<0Yd?7meq4k zQ$d{DTrXQh$#HY(9=}(L^$CTQh6EELgjw$2DJlMNhMkd^)>pE8T}_IOGb-Olngrf| z!tzR*;Le7faAjQZ?(=-uWPu6|$wEA!pNW5j#9V>}LhgJ{L)GHAhJ{OsKVQ`nRZ-Va z^JquL%Rxh3D>ea(MJHI%r=c+d3rtALF}@9c$t2gxRI-|_i~_4@u+vh|jU9AUzEmbc zHlaR21wMArAQWTZk+y@^yp1zmI+?70;{#-Lw8 zT7=X28c^fhvJwQtb$*#!LokF$rM0kVXa&fU?m8h?>Ek<5GleebsEx8lcIIfPO1LssTC& zRsX9G?!`=hs3iakFx0XxPl=B5W zzA_-X2r!p}T&i#le6+GbVfE4=;3LSGdLkA)7?4!oqy|+wI}9a$COVN!^RK9XKxvIg z{hU{r%k0c!Zfh2E1NaSd39nX^pD<3Nd_tA8jB`yv%SCRBK3XgBT7#(4lKACe+nUFA ziOI&PvzemOou?&nhsFM2I#*Vm$4bB^VcRuk%VK{CqfoU$MfBuP0=%MVf}1GJV#kWb z6F2C3%oe?4%bPQ3k|)@W;V4EW^kEOVeOa|PR;qV;taMFbTkz41mji;p!mbR5zw-P` zbIJ}7b|CXLb;<%qag55f8j@piPF0TCaH-*#jm;2SiLY$NgTid59$4jpE%v|~2{)W2 z%zI6gl{*J{kky_*2uP|%B?hWnfx?3SbH?#Xrhik(TjY4%Ls!L6pjKCEV`myHlunvF zsxK~g#0r>mJxu+rm*9PG(?fM3&UD~#B>2=lVrs&aBKg8n{^lZEtvlMjeE|Dn7i)Zb zYk`ZkMjI0udqtZ?E>?M0w|A}*piY2oevK-DY1X-FZI3a{JaX6%hx~v_p^MZG)qzA8 z9f*wUpqa$EigWxcz`06vrGdhcz>N<$0*6Zt2WxB=_yAM42T!Wonr<>Jbxv6*p>_(_ zo>U_|p>@NclvPtPg61M@CG1qUw&f9XhM@5XSar;j$Wt%RB@QDvP_upKAK+b+!|l7@ zltl)?Zz@Ab1Rt?yZ@eXP?_Kj2L&Q0EY2+<4?o#-C>eM&h66Vl+9JtRAzv)y86=@;k zXBY0$7|t@gy~%Jy^GhA2s>$W|VK}>Ul-eV~QEKPGQMxbZKxvjkoiWo1N9pkON-!5p z;*~4uC}n>I(+8y{N}+YuuzN>obYR0I8je!a+vIc#@;P#?y)n1Fc}1No;FG_MA>l|% zh7`P_SDEjbiW>P|>gs|>jEweiguxklby(u^fd#kyWeqHAOkMDSid!m>T?D`V^}{V0 z^428V&hD7A%#kMC<2#i@w4erS*^<*U!ZtWP&BqBN zH>W2CFg`v!UgETJdb-DHd#|0acg|~vRS=z?iHca(qS}95lx@ymJi?r~5Rc zk3+k)Ec0+S;FQ3KNNEitgI^6NJWId{=P)&0YZp@X(V9q($Sz zYq$oq`9@q`*;rR;vtfL|+>{H~RdUDkrCC?06iqzz3ZWzpOkY>o3>4K4Oae9d2<9D_ zq-f1MFsUPrpPd`5t_%-3$>-3awU;7~PA2!K;us@eT^Sshtgc+{z&zc$!750r0QlaM zO9|fT!%aWtFfMGz2Rms;IY-L{;XOEG>L|o0TjD5`!BnSeVur%LRn`GtZB@1kvgF!{ z={UUxNvb->Mtbdlt{s~mOs|nMcU$&67RGUyvf_=yL^9&Gtgu4gTF5XWfZ$G3MO&!s zu~HYzU=i^>#R{$`TJbIw@gNknnl?CiPqC_;KU&Z$tv;efQmSLC7+Y-v2+zVSD$PL) zFN)!mTdY~Z2v>qo+rtONKRs4qm00o z!hnmM#Cw3M4fvKui7_G`z~aOL)IGicb&oAT-R+4EnkFzQs<8~1sXtqkZZ1Ac1{I15A??bx`NIO<{?onT=hX3Y z;^bdUEPLJ2bcXPqYNwKqF;d7zLi|dlt2ja@;BL(loM-IxD7<1NR5?kQg;U2)&)WQ+ z^Qkiq;&dS1!GtBeVvw^&Q>+4QZA9tG7N>}+qf59idWIFTFA}w-xCY?@9_ov z_t^AM%9C#}SUY-8UAj%29Tk%`z%7P6g3o$HK!lBuYsfGd?Wzko-W9mVS}NoY-BYaD zRLdTTyrUr};pm{Y2{~ic#)unY5H=0>(Zqw2^uOuOT~T-&ts}ao^3)}-<+nQn+SV0U zfUbq#erpp=;b%&PbCpr#Dh*EUK&aL81q=k4<-kl@E#MW2@Qb>>lne1|OH-7b%J1VK5kAX_k~H_JSNw8MQ|2}&|Of}mW(MQ(-K46-7LZc(!p=R4CK z9);haRO{J(!f=9o-r-rB^K(9(MiD_!`Xn~_Pbw=(!WwPEgD!>HyB}2S`LcxPt`qdJ zeO2vXL8hn-*O1fCvR75pGZBnkvv21TbTiWS3<)=Da++F{N$kD4vi^D;BvpdGOJiGE zyu+HLhMRvq6%xVCkN;<3&?&Ty+4)tY+3bAkLBxfFSJfH?c%)U|z&y#Wmr?3bg&?mh zzJ)G2Z`o8&%+_9sV>g1H(RziG-u0R&B?f`wy#gdK~2VWWdaumn{$AuUp@yRuzFdH ziO_LE5G*OXdggM?m@I{_2WRpWoxqubRNk}I48I9_#14-x)`Ty`YUY!3R`Wp2ZDy6o z^0{0rWGpbHTiY==<;9xWlM$)HG>!AQ|4M>E&^s%%U$&?#A)Y?0MeNg&c`k=4evwe9`QWd19%y1`P0$&Kc>pKj_rEGOYM*GnxY zA)om?_xMfRh!7SL!}V$+DCIP_oP^aO%|OmUQ!a?C9w#8al?!?)a8ln{mop zNQ;J!aZ_dSZx%N;!@&nJ3F>&!0i5d|4kj?ZH60fl7B4a{Z92Ism4gRDlgM0FaZQ_G z=FzV+xx`b{P77ib5{{I%=?h*g0*o$dq4NzU*lLpDl(5kGfjGfF(@gLoTOz_d1N&R1 zH>Q(xldheZ9!{^_tZT=oN78GgscV9drPq$@+OpV$Pw)xGArH=p*$ED+$x-(SwYS$E8i;^Yzju z@dIDl#I%dGIG?w?fD}oP&_WV8H%pfj1o5R!h9JmqEo+_=;m4p)T=5qbEV@epeTBlCJ>05TW!)rTo<;uK*iWqHI~#7 zt!YeFK*@fvg^euhQSiZEx zxQqmXg$tpW3$KiS#(?qV*U-Y(1(?T=>boS`3Lw^KB=UY`=tVd3P7sNwtDRsT1*Uk&aJOn6x`nfpp2V0 zH}3Fg+HuG%QQA!xp9$n!8pWc#2nQ5UT3ZCAl-mnRDCQPKOVT2eCLYEY8d;Q{(yY;} zO&Sre4`Jas_@wcA#a)dccb}tU&W95VU@?=AW3V{Z3{_a(&TZgOk6#Mv{#uf6Vy!uU*9b@=$g`Xv`rYsQ|8}xj74c^#hb6lL}C4!;S`XQO{i} z1njFAqhp(p>{3JL?tI)SM?n?;W)|fkGcONfL0TB#JU;HY6KS*|Euytq#kG?xn;LEo z*d$2qR3D^84ZN5l7FUo7fRP)9KyB*rGl8)z8h(iY3{s>K4d0_8vJ8OpvbIt~Vo*D( zBDJ8ca56Tjm62H~n=rgY$}WK0z6ZE%A)+DPys|cvMrX>}v1Y=IB_~#PSd!*RKz~xn5%nUAK%E3j_bL9^8y^>5jJnMkg#}~x1+sSvSfDpc0 z;jPW1vF$}UGbUj61#c&KOw3yF*ymnd(oyQjx$9ELuw~Ml6(vFHz%zr-U6M2ipRAPd z@dxF+P9zPUYfF=^WzX)fED%Y}VnrU74wdAZ%OTBXiI#k}ofEndF(5%fcA9HeA!0C7 zYN`r{hPE**U9B#h4NJ$$DYh2UNaS)@i*ctqBa&$&Vz3F&;W-lTZt64w&=rqS^f>aD z%G9Z-!7+G|sY8<`rVf6C?c>W0fI36Q&aGgz_r;~nl4kpF8r1+zW!^QjkObcufwvrC z_aDCdZ&5jXqRW0`{VS(5aRxZEq&+p;;$+;(i5E%rRHJ5XSk^s11# za;Z{O%cg@A&BT}YBt>(VqW0hwl%f{54KmZJuM(5AxNYOw9?Ae7uprx%WSc5(%W|1B z#AjL)mOjWGOsO`-Z9_FHR%Qh_6Yx>ocJmAtRt)R0Nf6Fsye%=Tx49s!$Ggu{>&m3* ze8A`Uf`HGl1p%K*;S7#{+imF3_{>=E>6 zOjWc*t7KQED~4JvtYY&OL#uY~n&%hfkbYX6eLv z44as%m5Qt>0I65tdMDGvcemft58>w%AX5a;rfEL$clY8SmAtl^gzM8 zNj`N}IG^Ege8IdNTae*U%~g{X9t*7S*y6czE#qi1UD)N$>ZTjXY!H2M-iRdF;32%P zBsjnWokDFMDWe+QYdbybldEU@p45;`?=(-oJ6}spIS+xcD(9iWSP#N!YsTu-swJI) zvD)%oc;-wQ(q<{wnm!d04|Cou<64V93PNN|alQV0G`q3hMy$}t9bc`_6)H4n&Ntv~ z2*BOtr&AHq!lEizD&=B!ZGSKx&0$e3%(o@Zm>)Uxk*;f2^+o}PJp@&`*y^(mhyUx> zY0u5QFIrw0bELDK7%xJvA-p{fCvOag>6jl&P2V<_4NXX6AW4H{O6pN0 z_m_=gHqfR~G#A6ClftW$Ndc+aaTJDB&gAB?YRYcvmFvuMQf%ABy^#qzDlpYbSA zZbu%aVgwa+GxNCrBK)04slg&1MQ_#R86K6mtJ48M{q+*hy}oX6Ci*jLK;8aTYu zgH66yWA`rkUP}dWQnWX|7jQv1EOo;7=jzrKs5(V!=wi?Q+lgemh+g0Pw2vlvlK1 zWzAWGb9SaEo~hx%`=_?BGAV&|;6XteTh<{cW_5|cCes!34m%G^F$AM#^s2yB6U9(! z#tuw3YE$9iAa&`joSqG)JL~kUhaFt~mo@C9sAZEMSHr$O`0>?*Lc*#I3fG)fFCYB= zV}8QLZSdmaRwYwv_$=!0#EhF)Q9mL(ZcTlXrcL}T=Ei_^6#sb8Yq&kX8HR`HZXC`9p;i*_ib3fR5 zDkAuPgSA`Opiwjv$D4K!YFzt@D5M#UGbSGAJuwQ??Cafx+QlZjSBL^6S;hEixudpC zo9!9D8Z6SbtAd+ZsK}>EEu4q7H!8T9nY(3vOQEzPU*!w7s*xrDxg86Z)^!lck=f^h zn|p$%8^iMetrLkG9*PE3lQvBzQG+%qEFa{mz&lW8J|L|MbM6RUQ<78gvaA8e8}45% zZn)}&IcGqe?BL|JVB4%TNl|tlzP06Fdrca^O&SCvT}EOJ+2nqJY~?46kW~TC6tcwA z<`LJ}aSGXMSHN=ys$uV(gQagPb`Ys>poZ!)#N8nzz8sr(dT<$v@6wv7_9|jVszRUj z>^PH=S1YiUD_H1rxuug9{TxRhH4FaY=0){tvCFOfDH-33vsv^dF2&m!KDqeDA8hX; zS`gE9Z#NE9iGORWrKp!*^>e-x!{Ix=zP0)l<~GM#SScTKw|V8pk*4hab5w=OOnOP` zKW7oivoCS~IjTcBOk(1cf-Nt6K042Jcaf+h*-aQ*`!X)ad9E^JbEC)@MX-8s4QUu{ zdC`3siHBT6*$7^AX-Ynpq(K~y*amC0XyOB^7s5n^HTX9{wk0JlK|Qdp`1r##iNkCjBdy4ohcBhA~;ZE1k zh)w;YJAIiueKFH=SDCphP1EnVU%g2Ka-27KSEP3cK=&eoKpdjeNb2Ek(3XOCafWvV z?;XLE!ZfwdE7Yx2X0)jK^E(cMK`jqf`oct&}L+ch|@&-n7#IS0)?yV;j9$$xaS zqjIeGvsS0w>2z`;_ot-~$2zX5M{Kg#*_f_{kgB}UQzkV zypDkxo7?3IFyr7PtZ8<(E?#5si=FLz8+_tyU&5!W!Cwb_dO0HOKP(opaD&CQW#P*~ zu>Z8MK+Sbp5O)tA_!aj-Cd9B4pS~vCos|0EyAIaO9CyDO?)Sa0{NP9j<<7{qER2c4 z@L&%A=zb?_f4}#!ihO@_PwqDp2)OE{;aFzga?e7xt!Lq@)d?T`F?)lm8`AS&O+4*Q zE)rpzG?-NfBY?kJUGV|X;~DhbA&k_;Fbv4MjrRq|{tn)kuWpBYfbD@9*dFu{-J#%_ zr*2AdF#2-g2DZ!t@BIvK*vY}Z7_)bJY8kqJCA#I8iOGL-%MbtUH(l0FTnm%hZBcr` zGDulN?d>y3XZ(Y^O+J>F%h!VJxX3)zVQB2cW%YLs`^q{i_M<&ktn`m9Iaj#c$}Cb9 z#MYEfhA61+^;eZa_s7PfbngF3R-998r5MI#sNpWvLbQp)0nbRK@>a3AaJ9K-NbIxw z-yyZ47~P`}b+@z(z}CMkt{2tV_Qf_+Ijk)|!**JNl&wg#GFzTlz&$qCa!9Ezd9dsh znsZNl9O{;(QP{#5TLvqZ)>X-};!uQU(u5Vds^&Ki`T46fJ8-tzU8^cV;f16GxH-4{ z^#&!p_t8XPzxXf#j3TG@qPs|e6$UCCGXe7tQ?)H^g@8Lf=oL@&pmuah=y-=Xi3-9|Id36> z?^~!OEZkkbUP}CjyC0Rhovf)v{IoJDg9D} zR-!fSO=u;&VTWK=gK1E$BxM?N9#4;FrBgGrY$UyvaNvc@M)oerb`$3kuU)#F#2E3l zT27LdB{6|C-RFW|3S2=@3Q*Zfw(aUusqKzIu2?feL9VMwO15EVy%Cj5Opl;lF^Re3 z22+ayY1`T*g=9hVXSC zj7;V7<(3fJ^tw4#<0x$XWQD1G*9cp5!Pf zQrkSJkWZ0K1twlZXJVVh9GYl{pbXA-f^HwLf*C_Ib#E+qQl@U|%95$ehH7D>0=Duf zj>UpG!H~7WW9N#S-Iq#DpyJ4ksmt!H!PQbN4`3S#TOOb~W42cXx@;R`8_%XK-Uthf zNA>AHp@N(~J=G#;O0aQeCH8QxZKr5n%$UAWT+1}S7uCA{C1c~${4k0 zCz5SVmXsOu8HFgvn0rX~P{nUEB{z#P9B*#rWF?}H&6OS#2?9$w;n7Xxgg1h$NYDtf z3RifcIH$xz6K&rl5CCBW!Qwi0jnn%PgQIGThr;(aSm#%4PrLq<~E zoDgAbLs{yI5ZRS6oj)hNxcpD+bQ*+c)s{wPW2W=x<>1(y=e(DSqq3Dmnz2zfj`Hgj z3uSY)nuRVZJ+{I88BdKY)H!Fm?G^>HOgnQEr%{E`=4y9k;xvCYN7eip)2!ytHrT6J zsBg42IpOhO?a-w8yM_5Xk<8x_C$XEE*f@z^&u^z<;dNoLp3N={)*}f!J?K@%oMaii z&?0O?v4gkWcj=PIR|z^RM-~~fiq6#x*{Pbap}dnytyofyEYLA&JKAQgE=MLh4ogIv z<;ZG0unm~@uEy9-OJ{uq&>NQ-ei`HT>q0r zsT|x+D{r-0Z77zl;yZ@kYTYUN!EaA&5^9r+hP57NCw(2Z%FgRp%Nq)qi4vG`l_D7u zUA{MdL}l8}tmmzEo>AqNP5a6m_E9Q*RhumK@~S&UZ#~awH^dc}xv#xf*AOeZre;v4 z!qzmh*n|ai^^)g!n_gAxN7cZWJ;l2#tfcUzLeyAiG+1gUsty z0I6_^MU)QNHuh@SdS&Ny(VJMRGQ<@yXt35E^;Ge=H_C?kC#1_+2L$apC8@s}lF1XSXt~4*UxyXDr zFXmhX=HVhMT+cu_{ubcEZ^5NC>3AcD3l+kEOV=tvCvbtgEFF6wMwn0_#?b;|95sj$ zn%f2li-}QkWu6}4ERiC`C9HN_A7WP)L6}K@Fd@?VnSB14bir{=xzk?!3{xCF(__H) znZ>m1pEVDD!awS78&|sy`WsonS4w{)C%NwXyB9{ZGRug-^`!(Cm<MgS-i2Vm^0*zAE#A;+;I?h`Y_-0aTf^Di4VdKdq z*2E~T&ZugEfzVPMWxmLExlFSnRD(3Nz*lfY?E-9m6_niBGoCW2^o?7@^6RhrG(c9gi*phUcT+o(9pZHjq>-Bw4h z*GtqCT0gMBpolap?t9q=#dY7=$Okmq>%Oy*ja=WI-3u3L+7VD2I9J&bv(y$i4Os=1 z9TAou^-_Z(@Sc9df>)>ZY*1iCR|Z9p4Z)xgRpCpcw^8T?Ya&vQ-3k(Kdu!rKek5vg z_*<{sNTRxSWjfwk9C7gbKc!FBEY89h**M6wGmNiQH!vt=?}V8Yhuwf z;MB$jb~6C1^7>RMVkHeCc8LL~Nkp(+nG#q1;}QGR+pGTZh?Q6O<9or@SqtK`hgvJk zEC`f3SrCIN9?{?4g6KCb2wZ@+L#iwYZ9h+iam6D@&<~t+h`k`BCPdK;L&zlBBi{ry z`3@^Q`}Y8RD#w{KMG=Vpc{6ycODkLFxG-)s!)h3x_bqr!ZD@f1*xWAr{MLY*`~22` zbo=$zfK4p}M7s(NWOZo3C$k^*`O1O9{7at);JLtAtTe*`v-p4)UHCxpr+^PxjSu^w z!)v#$u11lD1Con%I3T%LhXZu63J2&dz+yfeAXrcve@=%77O4(DJN7^egj2%U2ldzo z4IN_pC;%XfG+9(mNh|Uc$ieZv_RQz=p84^4v8zZqb<@s#)4uP+B?r>kDbRHyBY(qA zYJsqbl=PA7rc;p;ud7Z)LcTsawHH2M8gahkn5L9P)lBj|d9K+Oe{0b5vsL+A^&+?1?cv;0~_Tyz0f4Z!f z;nMRkXW(o6_AqB~&TBzWeZx$X;;Aw9SY+_^Us7W36r4HiJp_ zi{-qSwi*1@d($@Asv4Yif3+(prd_CFGuj>5FH0q?O!wtnX0e2gl8iJkNPvhQ+vb#q zqox@yH8jm|%{9$R+Qz3%PhBK6ulR?eB)sAuiqh@MeP}0%MJAJ(AxkvZt|rhmS1GY` z`s*x)8I!wG`YYv?rGWONzrrd#ouzp(@RH`mK>Oih&|m#6bNVZrf*M46JL|8rV-Nc4 z66)$EGW=4gON^_jDk_oA$c*YHLD!7MD=;-6rwbP@e2?!!St+u~Gp+^93xuf1hL>Ne zBAa~an)NQy@%0J2Nc`7X@30J&EKu3H{B}QIH^#1Nj9bG|BB#oATtoVu6%m=|9p=!5AGQ*HSWo`ev}&`hLOg>PSLbUH zU#`yAA|74guk8iDW_9Ja{&%gLqi41kojma<^SU$bQsAX*!#+sGCf3fiaoK(ytKJcw z{b~OU3tTv}Jo3Wutegr9pO5(g0-{3d8Et{}BfkT1s7mH5Su{fxJ z7>6-6YdDN12Ot^?>`acb>AKTZ=XI=>GP)uja>VIs z6v+{U4D?m6&S23ZJD^lvFjf#RvQKLduu;c}gpzI+%|HpFubPq$>FNPpJvN2f1J&KA ztLwTtM_9ordgVhYNfAO@+PghQ&059UX^V3~Cw@72D&}n*^MU z0Ha8G0WCo&(2_ney}{_b7%U*Cv5^zY8`TcpBS6w_j-;SWNJ_SnYjI_3GH`mb9__9( zyXePWy3nQzws6F{a9~&PVDeyj+k(Ql;x3_((*>imYtRK&^lE8QrB(A=G&h)RdY6uf z5(o#5h?)#VbA#wzgl2jyyaJ7>t|nwYKV`kI&W_vf2?n};9kXA>`E%3$IjSZur?Q}j zo4IOI40lc>hitM^lLNioP7lu$q|YPL6J8e5cbdv{F6_gkwwvdQc6zrx(Sj<)rRN^Z zxy6JvZfO||D{3nBl-~kmK3Vam4#=JXa#euL6F{cIeF^h9UOC5taIeL<$<&(-@(J@X z5o;npWj-cxP2_LGd=AerpW_DaM1Zfm06*XY{NSFMk5oDJWQrKC_|GVEmg#{g&2zTu zqwRNXaY-dCzU^q?yhblDO#tqyb$M_b*8`^O@!3wX9-dvN4uL&u+{~6>o8&h#PG}T1 z7`=f7$sqRKn0g_tVjJG2{wyBLYJ4Y)5yLyHRpIqm=7v!{#zuCtkJZDtyb&~5pGI)w z!r7?0vh4`KwB|%qk8L{w(6%8h_BIC%&iR!!g1ssnO0#n8S z)<>#<1ZAb>BC8N$R90#g#&}CmRtV_G7%-cln8-^Kl$9GMmfC2x#sWD#$s?!(Q+N7GOhbAB}@+Nq7OTLe%D`aPx^@jf+-3J+l@ZxB})e$l#-pt zob%;cz+IIuk0n2qYbPfnU@zbQ<15mIa+27}Bqxuy0d zE|L7wToVjQng;q%W7FhW$|f$8pvxBM=Sxv{pcB1g4}IHhxAxYf2K}f<2X_xG6Ue&& zlo9)`Vbq|jYulr}(3`C)ujtKImDloT))^JGVxuS1{pT!!rrB^#sb}WETB#gZErd(( zCb6Eo7A~w@-%j=KCL*Nr84+KT3#X^m<_gc53#WN8I9Qq&gZm>~wD6n~%=H%dQ%EoC z`fBrD;m!$!Z%i+X&Ivj1()6-fc(r`&C#tdI8EQK3YE3?M-qo6X%AXFy4lc`icWlOa zcOv0k){$FW=|5iBr;aSx=f>48_icTD>c^$_|5CbsdA*LV zL-m>xESCgzxbvO?j*?UR8TSn9=z07K>GfV5mlm2#c|)3hH_IDvO~|o-xZ({#cj;HU zyy?}ZpC`LpB<}uWiIdXEm&uglaYlEMq(4mYC<%P`?~mQTKbok3WMIWNO%Bwo7#^7F zHP#VIK8gRFaJ}Z(9(V)sJ28e6R7dJ*NezzurhaekcvoWNIsX>Ph5igb3v^d_iNiU#r;}Zrnp~A%S*(4w$Ewc{yqk^EJkb+>i7c0 zND2)a4TvY298`cQA%mn{E%%J5guDqkByw&$n$UN4+n?QZWpBNRw4z=tLf~Yy6;x)( zCTUUwWQKfpfJLOCYt)Oq(3XXyE803bd~Vu0dT$K=z^hT%JJX(m(4CiKS9?`63wn*o zxWtgOc-ipGq|n(2E%0=VldZHn?RGoI8BR^X)b%u*NkJJki7Sfxg*fyL1z)@+aY~yv z=q6n~kwnBylf*ca0bW&%oSLP~%4tQ<4pjngO#GE=*0UrRFz_eq;}t-!keLS*Nw&X34rwSP#-7 ztS35CSdSxNJ&_xTNC7d60rHm}mXI}^++ug1$A(LRCt#fgo}i7u1AVSc@>-_a0M}1EE!a zs0!@C4^z{A7I0zglWOeHi})dBe9{aY<7OukE_qBm?nbpeo^Z*dx_Vewk0o64xUS-r z-VHxIF*#Jjn}JReerRgbsIX5TEbLo1754H2d*O$Ylzn@g+=2yEJoSJc7_}&}H#93B z{v`4@w{yZLr|hSq?ERcwLUpo5^za}j82a#6aZb~rkQfb;F1n`pd&e|99-~FV7N#ET z1Ci&Ve(n+#j?FMpf8F9C62VnJJE}x){ah>7IPu_R9OB&Q!c+PDQ(<)54(xKq6gjVt z>F~m7+trvXIFioTj$<+&o=C68WI+L!JWr8be^rc$ip)yVsCYcT#h?b0L$a}&Jl^~Z zk;hA6OZ^M842s3vQrIY{9GEjAUks{_6`B$Tu1aC6*_P=^rpBe|PR2q^jY~5QjH8$u z_dJ9FFOmVqL0N?y3fpWn2!x~CBpz5#4!eqWqdORmIJ-Kum_eZkM*X)~jq$|3GYPCp zaRLibpss}+!VpR{qPJI14+#ay#)=wUG{(`vhA{k|IgZ`{qiPYY67#SdGC+2oTvJHilJYnGlW4!a#s0Dgrz%nn(%o zh~zsH-XuV?UW_bL0yI0y$TB5BljTO1I}_mX83Ihb|JIXZA>Ysqr!`j;Zr%$4iX&SP zU~MsSZB4ZYNu95w_8NkR{~MT=GS|o3jZMXt^9B|-i&T-J( zy(N8tLtrU>I*B{Jo%d)b47SW%Lf4YB!n)L{$GLtSq5A-anrMcF>+w0XI(q%T# zNxyM7*_>El6zVU!<1Z52#6Lm&)wG1MGChf~ZcSJ0)vs8~h72$H>LW5ChflUzt$UxB zmBpE9c9I2B&fBu`n8tose-7!-Sbs)aWQ=ru>m&dl{*MfV{`0`o9kGL459$9!4j7pL9xSvG)Dil@rIF3a20%I0 zeyTOi1bG^_$L}7L*~YN^^nc21l*8d+uHTl8%C5X^_Wp0qUda3Sd@FoV9jRY4ej9t> zwZ`|a3|Dy+JQ+XOA6{s;a%-)R35xe_3<3Q3%(NxImtS}f>?@nLb?e{%7ytH=@?NA8 z=AHFUh}ACNnQy&(jhzAhaBSW4CPmA-L`yK_Rny!crY;@6qYWf=cI=M!NFoj^7v%1< zW}68u^37gWeR?gM`Ldo1-_%wS%};XgygK{9fAY@OFE`BnKx=c54JZ28STmFjf2Rcm zG#Dc>;#1jl1(C|?D6o3EB2v+BZa>u;|JY!<0=T<{UAKc5gAb1he9{R8UlkzA!0=*) znbw6qVajYvSNMUiw7P4UI)b!%Ti+@m{>*I#M6f`mo_V|@lC~GI*#{H{`DjB6US#Bq zVF~gSo$&|z!*@K?>b&6IV{hDeL;HJ~$P2AA(~)Mf8sWNnwm~Pz;L)2mG(!EZM!3NU z*9*ID2OD90%;sKsd3Ur=79-8?F(Gu$py&S?7~}(3&02$Y-dXAP`r3#wJZ&?6NBbCl zBLfN3(zpd_WJm947wkHqk=nG~maVe3LE{!vxh?CHQn&%Q-qB~rn+*m;3_7R#+4w?l z{6Y5Zuy0XRQ(w?NBbo>;0=X^QAP~u6UFqq!WosmdaiBDA?2Gma<)%?*a)5~}TW2RXmbNa#b~xe68`=GY zEAm&7OHAogtC^#T&W%IclrSECz^ow-7M;i-h_|7XskOKt^C;vSZe_5h@iq}I@26@O%FK4 zo^XiSO;toGTfnh$8iA#xFPXy!;K2<16wwcD`#<`(ac2EM)@D^-`dhKk$^z2O_D z+NY*t9hlNp9ZxcE9GFt=PX!8rkWy{IesEaFL*UaOOgHs7g!P*4evxZ#`^AA|y2n1< ztGcwoJ#dX^-Hp&U_`SK7p`tMFs!!;10;I*(wNUFH$-UwZ^Xz0Ba$f~|E4|CGH!J_2 z3VVZwReqY>$N!(b_kp*os_uQ)pS{oC`|N#A)=5s1lbi$0wFr;^!Dv%Bgh0-U0Ro0U zT2xfD^veBQKRIb%gDIbWJ})Fk#Y(NWQl;+#VsC=fP;YFludirnmA3jG{<%t9Y|+|^ z_u(!5ccoSD!;0{}zcJ@pd+(DF5{vD-pZfx5ueIj?Ip!E+jycAhW7cTLcr#PhB$%W^ zIKJCu`!dk&aqW`?g}%X4%pkc^%%EJeGiQ%r&S@HkwSiJxsL(9i^I!v$f>69{_zz?^ z&3gnRz}bX&E~E`{A1M)LzuJWPV2Tn~hTkWYE~agg-(;~gNK5D_B(E@8s9ew-#L`52 zY0mt#1RNvN6tOKfHFaEjVgl+P0GJY$|n+yTMxupcrv|& zODV4gD|oDLYd^hk{C30W$P zgiRUdXlk~%27TuG&7~4wmr9UbinYfrt4)o%xHaemo zlr}^N^=u*r<(E%P9tQ$KM#qhS4zG$H^jcwsc`7RZzD7b(dNsm!y1WgHZD#+Q0W@rQ zG@Kkj!{vIn@Uz|IAQ~>WkN(VtjN#|74m}O8>T-B(n==H=Z9$-527 zk|_d_cw%4PRe6IVugVQlZzfSz)MAzTM6CXcAozxq;<3oS9Oskl3-KC{cIJTjIO}3W z{NU<}Tk#uDe1=NeKqXl?`%g^?h@NxlET-fc$;M2W%|015%TLu4W^;&)P<6D6h9{$c zEc)DBj$gdE*9mq@h6El{iF?&K#atJ#)||ZY+~OY7S49@(-6fnsSUDHE=)M{$e zR1kdl!rd5b8H!D;`M-kU5g8ga&DfV*`3+1 zu&GAMfS-0&DznJX`Zp9jds&!9(w*tVkpExs)0cp!o~4xXB$`czd?x$V_G$&JkJjo3 zpstT*J-~U}?%@rfuUC-_RRtE8qR2iNF^zL3XWc{cpI`%gwU`ho8W` zJ`y40c_hN`en6t81BsRnB9Wm9y)qR=*(m`f1@57^BXjn8+01}tkmV#d3u`g^kn07eHf>rb#C&eFj7T! zZnDdbua6?H10MG}U}~RK6BsGsj5Q{OkLfM5m7;#^4TJ^(vpa-4njU;nnjyxsLw43s zIP}#%I{kScoxZ~G_sTEZ@1q3&O52oHR^3vGz)oZ!WJikIyqg~p3Bym&6#7#fSadnW zFL8msv#8eNNID`g^0dXw#dI0xO|P-z23)e$bjOG8E>|H(q=(TVLFcvr63Jf&g|%PC zvICDH{ApuU^;*VmY)|=1$!>7~(D!xd0C`-ipV#W=HM@83hDCuiMO!dqePOs^T%}HA zc|-%MEgzF60>0&Ib7KZ;aD@KyYKtFozD|XXf%}4ker8H%0&uzTj5s*&3qLC@_)=f5 ziUtAI0hi)c07^oJB}AR+cpx?D#Rz|pr%!Du;U1XO)+KK`FBR4EcKvzjPd{(H&7pd& zBw7na8)3s0q`ebY0CB|?piGgtfs{;qD#<4aJ6QbqJ;m#skA9VVm3#FK)5Z0Uf?PJ3kYavh=ijbz*SOb` z<8_2wf5Y_M`RnK%>=gQbHHA^!8>gxDwIm}U?|KsUzNZuSx~G$3WL`@1l-g+ht7zRD z?kQe=2>QI`)ETkbl;p)$G@cFP>jm9@J)^j+_)lo{r%bk>b!kFz7sPpLM8 z>u0IE4%tC$#s+Iq@&W{u=8$`)9kZpUgSE+ap?(HezFserIhjQiSD)uutKC$!GG`J+v4BkzeTDRzsrB`4U?&-xk%HnsRHS{mID$3Bz&lo<%XR_gU1t~@5s7D zqvpE^-LGY$69ogv{h_hfg~ncYW6`36!>wJrsI_M=YVC$at=(9)mTIhF;t*=BT2_Uv zRa?7aRDSftI#JgwZYnK&0UJbJM>MDk>o>^6K9j^Wo0@#6Re_&FK^K#snA=GQ9GOaG zZh(U&;)*s5lE*dREx&#rv4zLc&|-w~mPWus49?AXO9SP~Z`}m&!rXkiL z_S+gR0A3%^5FW5xvgIY9$BYQ^=vV9+`D;Lez@F=tGUiJyrpd2{NpiWQE)j89qU@ zt&v+W4}>DDmUN8APt!3XycRKBWG|rt0|_(YcsaQ%EQmp9c!*|0>A#TT#YmMRzVUey z1v3!`A$AsM@{w{d!nX{|LIq|TtSYdNP=Q$8xQL2HJ`EDCMzHQF|F%Z@Sqqyr@f3+# zmin9}4HGbjDrCfBhq2VQEE^-(2)*rL(PviZDdh|gHVK?eHIBd2`8x|Ne+(<8M{|=^ zM#`@|Wt$gdd>W}1*urdW{K2w1f7o@vd%q26V*c>HVv_>cWloGJ!dc+#%T1fXQb-bS zakfCP1fjQ#(3gUzelGCXOdNvMSs-$VSJNzw8zn_ixEVdxNMjDBX*M)vZk3*8{4?h!4|61wI;7sK+1YYhb3#QPmjQJmw}zzMQ8T%O5>h!52>v7138V_Cpn8s8l4*sFbG5 zx^B7jt!&Tq;aw}&Ef?Td*MU^N(pfpQ(U&8ArKBTu1*22ft@P!{2Mys?PQ$JA<>jxJQ4DLL zIhVz-HP+KrL#L1+s+;r8fLr8LuwP{PVTMCASTu-pQ!XPl=xPZsWS}PIi)p3l_-H7Q zDOn#k=NGwIH@kJqJBm$jcbjg`H>txJhYol&iqo)HY2<5d zD6ubUsPlD(KKYprwBCclo$=m-k{`wXo}Ass)TlQ*a$;|6%BPVEJ4H*$4F1GpGGE!u!gkCw;?qT$T40nvRbcAPr?yM-uvy=d<_cAUt zG*5g*6>lqU;`CZ1#kJM{z2sfRV;y|$cQ!PQV^4(t`xzxZi zCP54r`J^}7p#Lv^&@a-WVWj*uWF;3exH`jyN6B#Ec`VmP%6rJLA!OK4XV`p{44cnO zx0B(0WS9#X=H{y=vD0f^@<=R=g}r{B*EjjsPx1P*ypFDo=*eqH0LM5fY4UCWkC6&LvX1J55c20 zAA&MR%Eu{(1J7D<fXg@NF`2K?V>W-WTe&{klAor>MKDz!7s6C|Y=)bX zWFvFHhTZu~+)0Q@`H%2GaNWpbfzLB}KFJMWKUy|!%FlJHE=KI2LVPHP=IzeUBZ)Qj z61VC`*t(-Bhx0A?ZPrt69`r0->u|o+Wry<%;Sc#s-SWds3}c7$ZEo^#eu0}foL}sw z59gP-Qx4~sx>H{qMfrAD=y91lS&z$IXCw2$%Ut7dzQZ*S=U2G(A7(ZoG|I1Z?Zf$1 zEB?qz%3ru~QDTC?sdgy zpEcoyPm?JPqYUue!I{q9?>r0 z=f5_*;Irr1c*{&$kM{sN*m&D^HrhWljQ#PRv~l_&jpcBi^;rIp>SUZ68mXd8E7Y{_ zy!u}5<6ZS_htrM#O+By|z^%-TPqN{53B&)j+XWXzG#H=)?TF#KrULCt;Jc;**`qm^ z&X66^A0gtuc7NblV@ifbFG*h3&x7cH7h39s+b)6 z_)phLY}Q>SQRs3+q0MePzeq@knzNGT62&0SB^HU4rx(Sa;p5{FA6M~uQT$pTpN9Cf zir0(cPwTpk)V4-*DjeAJGx5vxtTw2j zbaTtAvN~=ul!Y$UCIeQw{r}v#yBx4i0#Y;q&*GSVzBr}w z8rZ=Nq*${%#md#vLM*-dA{$Ds>PyyI6~I2azE>icH9-xxynlZ?yqlmV`|{A?_&eXJ z9HboBfJX-369&BMl-Rv;YT8pPJ8bf_L`YGp<*I34835Vo{3+*x4Z1$Y>I6RQqW5|F zRl^*>hYCy;GXOr)&w%x~1mQQ|LrZw#5`6va$!oJ4L+OY3O*Me#MFT%%x-S& z!bvXP%aU!@U9y)|+xhO&z4`fFR-UYwS-hcV!OF45VRBgGE_7S>vdX;3y>u^2%nRJM zy{s>tQaX2zr4&6O>C}U8Dl0=T&~VfP$?ee?*$XQO2eHCpHVcbczql>6X5FeK>`S#~ z-KNFo#afbv)$6jutX;c@S-GBcm~|_w(w9l9QqhmZd7I_uW}0+ie!eY1(WHf?C*8A! z=lOo&d4XSeqE^)U@@4znj=h1e!tu~+PZ0{My+WaZ&+gi}6ZuQn8|vx;03de(Nr2q> z#-MjO-z;h%Zl^VeSig+Gac_cet7%8n3lBml9Szi6KTh?JfqABI>MB~e{&ieeZfZ^@>JlX1Q!&jY{#WJ8hle1K$I zh-SMPLpIp;0J7owoXhhrx?wjEq~&GcPW;LpqY3N$$cJ9q@|>B$a`g^q1LdYhD8-rk%nhvMrx zr;a?Q)9Y}_rR-(sDFlWHiR^a)iRn%^tJ;^ z9Gb&?CSI+$l}@pCTpLBRA~q%aOH43OCC>gbJv0rj_Fqw z+8%dVUOTe79ucgrOdv;aeWTVD65#lm(H5Qvt@xwA8S8awT05>eub?x;=0KCCk`)QM z{@CW`2A)KjGP75K%ys!Mx3(fiz>6Ny!+;>9Ey2aZ;=npQoDkLZF|#>hNivE zB>O69t$yzJZx|G3Z!Ut#mMUbjW&IRPwgkv(NSpmH@_sA zbEg0!FbQ!S)PNPhR@mDN)$1p^?6$i>;-uHb_ZK8*4BfdP@)XU@SftNIu@` zRvpF`gpfQZv(Gj+B1w4$!5P#YQ|_rC-<^*E(}o zha$Sjw}`3dlMHDWjF9YFi@7b6Jk(S%92g8o()&{G7BA(_X|;f9RR{4+E|&CW-NQ^T z;Z2Rjp<>v!g|%FUGRVMsyUh*s`cn0JyLx>Yy)Nb)WxtfJ7h4>amGr;3Snb?OUs(+R ze=GzHiFJK5z377iErIP93j%Kd#WukJiC&KhS|EW}2i>L4n5ASF(rwx6LejatN2F#w zivXh;>wG~=uq!?65dUWx0(OwGZAXHvRgnXam692-n)wkKY=$2ZlcH+?v((TsV!H?M zWdblvNTTPYO4TB~4`2>+mf1}*r*eliobE)i$#zK@HW?UY+!GiD&ga7>flwkYy_GZz z-AKHJ_h=!dVb9TR9VdcuR-^8JSVj#Z7^Arp<%y0|cBPuJ{u}+kwSHjw`GI;Y+0{Iq zoL~=6goIFd9O67>2a9?6O6_LCfJJ!Ot2Ue7-KUgFwS4Dz&L+}0;BxL z0O}Bjs#oj=?IE0csi#LX7hm8B&C`RhW}iqBHRT2F$GozVIe#}1FIU7XEJ9{u*7PCb zN<~~{5wbD&BepBzGK;vh9|3nB#M28z#ai!!eOm8>eb2`TFZXo%GEb*Fj$nipof@8U zP3Qk;V^Oonf1%-k3)XDohcFx!+pu}5VjKU`q+z0HHF=*HY4q7`^IvE{3i!IV;Nn2! zCePtH)5RO=?!euTbC?FX`%$Q-n%%;}d4Rhkviy%oH8w~53k{Oi`6oCWgHzE_hGS5g zV`U}T1--5obGEMIBeDmpTz<37ycn85T0G-Gr+*AB)+3unY#{Pf@h z&Rz+LwOL65VVv@jBiQ->Tr}Rmt6Kz1#+8-yPg+KsD4}n!%jBDh7lV zQMhkuMk~AOPH1H|(8_MrN-cJ1b+>9|tXA@Et>l#>x^Bd`Qq5`c$MWmSYPzD&;l^tflD`?2(eJ=>xV)RP#yRue-^obYuKb?5=Kz(N~$)c z&)KGAPOW04#Dmj@_*pC)S3xal`83;%TiyjldaUM##`;mD;RceP?@}i4Wd40p?;1$b zOzB--ig=$f5YiRryTZf3sFR-FF9k%w=_NP{FUM+1BHf^%!9zs=4US0}G+d+mr8I8H zNhW*m(=`AK4VAb8t8;Tz#|yhZ#-bF}Q~A`lMzU{VkS?G87JB7~nt91SW*#tUG~Y_` z?N+IK$E$arHv64+dF!1c6vD5{6gNs}i&EZxCtFgrLMU(J?LU4OC`9EQydL;-d%aun z-&Qt7@K)Y(rw*BxaaX_J{?>^8tW-)QC@_bl6k_Q^Rn3pv)!^CBH==GjXP%GCG*48P zI%6;8f>l#K_8n;rCsNv3ny;WFPP*B@Z&+sK5Pe3<-W{l(Iusgu{6O0!U3^}GcB&qL z+p@VKG%}^6DYi`OY~P?YQ0H4`Xn8eFp}m==ut{iYr!yEt92JVE*?7rop|~T!;R(Y) z!QOpm3X-em<-6~Vv#;PiLQ_u)o7PhPDJud&@*CC{`v3olEGDv077Weai z9uq?GVP2^*g=xsP!>8rvp0HujDXJ7RfJ(&&XZFq}eW$NzoF8sLK|Cv0q_q!G>;@lK z28Z`l_1hj1sQNAQsmjpu+`;#Ecyb=L{O>%s@%(>y!pF*|ctS|!cX^5%{1Z>{itq8f zp6Am%ujBcBp4akxhUYarpXCVyEEixv8+g8j=h-~p%5yExxA9!V^A?^iJjF`i&Nl>V zPl#5Vw#$#)F;YGfJv|!Ha7|+mH(-25X~8$>TW8YK_BXvJO~`B+WVTGBgyAtad*2IyBM9)K&%^MK+RWC>9uhF9X|)0Ns%TAam1_| zC{0m1qiiXiBABI^*Yv|)ULD})^dZL%Es;M2xJE$gjYevJOtgelwW=m_2tqv!5vb1pMF$K~gzVsEoMx6x_Ml;x#|HmD z`f*;6F_0?G1;}92n0vVZ#l6?w*y1J%jz}qW2zGZyMQMax7wRAF>TD zoNofrgt5!4vRbPSCNCg;3H!zoX>b`@mmpUn0*$oooY9RiVu&ovEe046dqCPT_m*pM z%)MjB+;M8CWA1cGE(>_*s>3exB(3Fe4M%}Wrlo1^^A$(SCu~0j#}tgf$vqB|p(s}w^o>4=(*af=={%9^TWK&@ zsZiIG+dIA|wZW6)G>ECR2kFfv^U!w6o_M*JK}Mn6oit5*0f?>xakEM%cCkwdF^O^2 z6pUXej*KzY0fNbVOp_e~6>ck*rgI)TblBO6&M}JaNzO5NwTrGyW0Lzk4fUWkvZHEd zynAJ9cQGLYKdl^PShR2xY7vKQt&LKeo(ih>Q>D(XQXH1H%QPJh=CTZhFC->H`NL;2 z{Fx4aA{!4TW_!}$C!+M=Cx@(jySmUNa-=CtwcFX+r9E4;IZW>YUeNrNdrKyiqvA<0 zYyiGv;0Z91{xl4;#}uKU#}ZCtEyfd}QKQ5Ufa;X)KYUe12$x7BY+(YIWKv;_VF?(M zP`F{wFvdu{$8(;LgA~U^8mwWg!IM2l;0;dlD!d_Dv~pC`5f3^F_K+GAEB32$W_LMb zr{w$+Xu0+<#yi0&bH-~Z=5eHET3BZNa6T7iQD}`>Rjx4p_Sr`k`(y*?U~F&rGaLS# z9R8dd{*(dJFuseldAyhvd-fpDhfgQ4rgQk^0F0)59ggKJy--GP%Z+;(trk-@C~I9C z!Ty2boc<(2ZcMO<{tpxbe49|SJL>Kzqko2;3b2ZaF-S(MeWq+V;93VUj(6_oeA4Ls zoKBj!A4X1^Mt-&%yT5qxU7S6_IKCra&(N$_L$Uka8^20^3z;1Kb?bVZFe%IokYPi)KM^wImJ2(JcXiG($Lkkc?Hd%%umtWIZY8W z6mb$ooJSeqli=Tl}ta3*R#*2yV=QlvZ=-G zWaRuV6nJjsP77IMzdikG1i5{SxE?3y6vD*j^K&t*W!V&o$*;3Kt9=TeW3?~sG>ciH z-(pEs+LE2?2=BD-JD3(!(GuWBrA`1bm>(+|RouQfY47W;wnjef_ z(ShEdpCi(Ikw}wS`u<|WUHOY4MyL|uPlm8X6m1OQU@>x!(J`BU2MN`9h=}#YM-pVm zZGcW8))sN+3==EDNuC(7qMm~&MRe_}Op4}{S?~wI4H%DB-0!Tpluz&89Kzt_qB0Ypk)GAS=^1rkyAcB1PWiF<=Lh4$dU{S zW^d^>P|>lcz!#gjjSmcRV-3}hEDAYd+^{CUz~k0E#<;;t!?<;a$IXV(&o?%V8ZysH z9mnudhilAi=$12o>rlc8#*@ZBLn#{W9U%UY3L+qm<%Wn;$i53=%`zvlws() ziUU_Dt`hCF>up^6&}Ft7XB563vmW=0=R}*b{94b};`&i$`{1cP77;4hzxYR_)v&LQ zfsM1rxi>{@F*((=GOYMn_1_s^A*Tf8!dsf!U0Oc%4_<|USS4M==U&3CAMDLji4w)u zWIx~ZS9GWfEx*kd6D4_F;X7F1YC(M~&mPa8=c$GDJ9%nh{R=#4?$)>JH2ryU7|6tC zJNmjWHnkcJl*Trh(;!S)-`Eb3eZ9jg-iJPpDganh25XZ?q_cd0Io~F{feM`AnS$t#?xkhl*^eQD90G?m>~Yx6%qjCC{V<957Nf5LpJGD|HwxBE(fJlu z{l5T`&^F!kVz}rLg=K)cm9l}Mgqt67>AY%FPYTqyI}x{{99_C-1+z88C6u$g=mMw- z9TwNbwTkh1}K9q?bY}XekchR|B z52)o2zKVaKP1<+e$!%oOaG=k2Ef)+-L;zk|nCp@`bdt8=QOeY0jx@1Edz{MC{FE1* zpGkkF(EwMOaI||7>h|5h`PK~_>sMDPN2AFnofL`)&xP#$hIO;3eE1V-iDHfVCoY-p zo&nwH6Uc#C^95?fE5yo~UCJlk+mPKw#M1pyqpvc4rcCHnI!8<6@{}EFsW_LZ^P=pN zupWw0BDJwQYTbNhB`vx?O`7}TeNr^J`1j0rf}CbN8@NMM0jT3Hno1+HQ&oSbF4nA_XiOs!uxl(xafma5DH;2fM?Tq zHHG`;_}zHcGTW(_mg%1I;YS-g&q{SDXQ-4$NM>0V9A}TN((%>R2_6O;b75ADuxyY{ z(aB}<6zU=uf8b7fin32_r|OjPvnw3Ym_~Q8ud8Y}Fx}R=Zt_P?|KP#jJ#f(0)BW!% z(SrvhD_KLI^bO60M&0fQ<22qI?~^6v_ljie##`CIv1E6VmLF|j(b!8Xqq>dvkpKIw zE7*Ih;5&;dX2VM>8EC^F9&pjYBB-6B$F|&{5ob)R+5eL^x(X@y389aD^4~%n_};2g zZ8^{_qPxhLh{<%DYUhMuDCl>}&lEUGiRV4`ZI~}dFY8W_)Ys$^DNDOh!azuufcG`w zfAKz;-IEb?AZ~|6K%`0C*(chEa;}K-q^cXRQkTq^A45o&O|z>Qsb6J8P!^iOp4$IB zn$tiRtxLCKCoNi6!_`{lfje94(uiHf{j^9;f8Q!bG)vuX`SY~A&)3zU0#g*FVl!q4 z_2vs$p9nk=f%~+ajH_}>C6DZYsnE*@X-FlWV|CbzwX$SGH?kQB1kdO($&2;65j>Hj zD8Ye>q#l>#aVi{(VQP@v*vn{X%oXe9TONwcFKnnT1v%kOuqq{XDH4(8OUPG_vgs*_ zBICho9qdf3%%wS)ml(@-f?V5MQRu?ApXNLJ1vVUrCjtuCtdk@FaGz$k8ZB<;ro)fR z3$wT3-e0X}){tnWOWIhE#pQ4RWt81o>9wZ>G$OONV&a%GR#JZMeQ}k5hP#LtA_g_rcmUq9Fn| zTnkr}B@CJF$=janV%@_rhO%mOfo&LZ7l{KiEs9;Ep=ajQMQnTr>`4VMO4Bi@be>d& zWv+{NbPhvBP>&aLx&j@jm3^zzt>6D-w7WsYXkuDuXMZ{>wr{(R^e<};G7mYtsDL>sCF5rmRSN&6*Hb*!rFi=)-spN)3k5-VGxDNv}MHfXzM zVSUKkGI+`?DIn7)>|@--f#K;1b|sL4r@obw=^Lc>bE5*7&uKddNpkR@BmsyIrgjH1 z&+EIE)Vvd*?EfA;WPkv=QTBM<);}8UgXc?i=od!2YXOv(*iujjHs$Rp0_jumBZl6@ zoy0`uTC{_zkdAsD_9h=B({$|HqqI8+NNIO6jLl$tcS#7O;3#`{yZh;tNwL2zKI-O+ zB_=dV7%6a26|vk!WW%(gD`v`D)|2D68>TA(nt&IzZtW1r;V~QikM?$#?{`BfktIoQ z>yV(#;+@M?0*b*D6e<7NJ#!Q<#-@-Sr$cnB40hAM{F=aNl`~FDbVhhg8KH}=_}a|->4<-qI4UQo@S#vMAw3j*g!PIMU-JV;)*Mlr^6IKS z-2tau1vcg$$|gI+iR%ZyXr?08&WXB@`|M}a%K;hwJNyg!m}gTsGaD`z78>Hj<#!&b zyJ_vGWXKwC-A2o`AIRIoeKplk05D6oT*+iCGIx^Z1vSx8s`BU>X zXY!Mu1vx55JYS}l1y!n`3Th>^@=w?03^VLF5@=y>@VTgMTJ_U;y| zgoi>cD5@In3>AEaIKVtvFxlf~Snlf}aF=OTJbGpoNY0@$vCUiXIm5v^9In)74hN&- z6}qYgXZaRjGl;F;b?)rF^d4)L;)5v@0Tty>1v>GEn|B%9Xt?ejVf%mP;RdV#UvZXt z1`M}O(C>5?+IN97$6Hsp6Rif_nE`ZSsTo4HI}3~u8EMqc?(h``f!7T>p3<{M$PZ88&&>T(-M+@~CWKm0Rikd(TnMY7NM^NKJCH%D- z)Xo&t&NQgWn#ZOw4JJFc3~+D{!@1aSEM%oD!y2Kauc3k;fU3hZjRwYW{7{lomWg!3e9_WeE_T`wDZpx=P0w#(m}0M3BM?_) z%tVo*_z5M;FjR=I;$o7ATvSs8BD21b^*ul3A~|i-Yq1-YAC{Oc-5L5zOl9DKZinQj zr=PZd5HpDiN^^9~k`mdFuo4!z8g>abLIcyvsTqw?rut%hr%d#$d-ze!+Lw8FFAN!7 zwH3g%I^waOU(P`62(-8fT_rzwXSvpoCTo}l$m%faP|VtV9h{)$)+1cI)o$G(bTJq} zxOp9=E6HZ0Xx&jXF!~d8(v`YBjTXX!R}w4B9O-T`R&N-*`%dOJwAi_Q}ScPd+KzXs++EK?|+uPq3L z0YM!F;Xu!V7NhQI2Uo zT_15+6Pbf|+z)Bw35sYQUlGPAzMAicv-qg|4o$`u&sqaX+fkh=AW3>{rgYiMkli^?q^bf1)4T|-##QJw6Ng^eX z)`b~cSAVK#A4aQo%Fo#{<*8>+xp}L5M=_#n6jI01T7r{rU#+U(GE4uRk{ZigqK`m!{Ee zANi{%VcoFHhV4=@@3VkT`gOImdkgz@C(y!z1fBA}HMT&Jg~a4sK+kCovz4Z0Tl;~d z4-*7&eRv-Ofi4ssaqEzzDVYG$h`$T3}I1 zo!%V=z1SQ(e7)3lPI-c$afla7gZ)JW|;IXUwoql7REcr?n#&j2F~ z#FbTo9qi9#b7G1qMoh6G>yqCtDjf`k*HCcL*0(Sq7@MT@r;}(806C}E{|OaBWjQdF zi%=wyn#xwYiF8mSB#thKD4aa9sY_#=UV!>hu*lxq_RH_sBasB;xctUfY7~lPJG1dr znLTtKGB@-nCDyu6^_Vh?AE_E_SN|N2zENBEqOf~6fsVEjT9iEnH1;dyaG*b3g$K|7uutqsO5M5+FDEHf5TGY0- z_mvjWM2dm3yq!+n*+v)Ny>EA!-B<_n0_;?~A7@oq)gsI~o?E5e%W9>E z8905*lk%he-N9yvw5Cugwxwsonw@GlTKV3T*nNMB>8AppG&$@`_P|y$wbH@1=(YCd zqEk*Qbk^tzuT42DDJsrBXyc;sbeQVSORiRmIgJ?@iyvpSY&0gPn-(T^XdId@nuNMNM*z`V8=@9M z0DcPR<^d_8MMT|?OWW#cv(cx`#^7f2iodAJjbf(4-lniujB#5sH~626$2%iY-0-`T zt(qJ2L?`c)(&-J-OUef$y|SK6ke2icM{bB4hdQXi0-;h>K|0qId8CHEo)=-NCRlPi zhoQ3XjbKxN5Wjf}Luqz+S&HfK2%b8+_nKR0;Z% znVmB8Mt%dQWIMUEXsdd8v4X|4>n6~t1i`(U$+%vdnan~o@m2Gmw1eEVO}a0C=o{}z z(E;-MrH_93vve5rF7^54!{7K&^Aa|IX$-x)LV1vI@rPX-HaB|6jcQVy&PN2u{ml4P zjLnsi8$DFCH7(+3;xfP}ue14xCP7V6jbLjKYeyQmN@7Q+{J!RQXA?{ZFsC~p-FG?WpdlAqi{m3Vje z-yRnvazEQx&FiC!$*9u4&!#I{Ws!_86>CPc9&Cp{R^V_^_olj*<0E`}wkf*O0fbG_ z6+D>bckr-5XriN`l4Q3_?K*@TjWbkK>&GEb?VD<@_Po^^XExZZk9J_@qVZz2A>;}R z@yBgK(3KVxD*AVI|DJEWEjRc?kFKhEglceinFy(nXD&S!Vr{EC^t|y~Qu#5k~O!Nl-Tsu}P7|B10YBVlSLT%*v#fI&zfKfb*>3Rr-25yZB^X_@$Rf?8m59KOCVTiND@L5Q9k>>B8wr@`q>)! zuC#5C)VSHd`CSE#b?FA-6m$5xbXGX!Xre$QmlPXzW*x zn_@P1>8nLvg4$9a*XH8+|m!A3gq6A59F(pYWp3&KrBh4q{$lA3g7Ac0pNrmc!Yw_h*5oVTA>3keKf0hyZ)<4g z!91fYOWf4KVoBYZH!A;=}OF69OmSz8) zqhcaV^r_)}Bkz-L*}?G1uAVj11eE&|t&omEB9)e=KL_U$Q*t8$#DFy7XRbf6`) zc?^))I#0Vrk7poJ-U5lLB)hZnG5Bm#gk`*56-xKces*t(<((b-{vFw_4(A{u2Tx!Y|%uflf;BxEe0qTZ~ckPwn-3m zjYS(+`tyfUQ4vNqy z_lpp$8T)<#yy2G-X(8Zf?0T-DHA-xtFO*(D0Pegtik|wa@x%%0@OW}^(OP$nMTPN< zyCEcP3C?qSx{Rqt`-7$bkS0|D~UOk6S6CKj7wq;>*q)kv#xO)-yI}o zK)4MQY1mz&(!bDL%CJR+)Kwixr&?76!PHKU1mU#GON(udEKb(+YxoU84GW)OTy-9ZEr6w|Iatd%R&|UO^#bt*!qaUWiZH^U zloJI4*drjcYasYCjtdA?UT#tMKtRCNRHkN%$PM=i3xFBcPgkK{STK#YBr1bSji2hQ z$4>Rwa5FJfvT<6(H6qY}(Yspk^jJn;^uLspwjjI4q70mHvcC8Whi>TVUD~SdYx@*( zq?e0K!t~t35;1h<@upcmCW(kCi*z!eb}wN?LF=e}MtdS4c@TJg6q(8ld8LfefdL>A z5atz}L2U-9n8g86xVvSr7)=@$iE@@*{k3wo(!}}L0Zm-D`<)f>GOg=PT!)(si0qv~ zEtBb9gtw-@>Xd)GrjpnztqYMAgKkKvM(4mtw2;V@##p3AGG2iaCd!kP$%5G)n{6?o ze(Ux=rb*0y{a0zL6^fpv-lS=IDJM;g(Lzr;P=-)i72W&{S@!gk>Bl6kDXD)_x%r?wREsI z(0jAicM7#8S^H?I>99Ls8IwV$JbP!pw2X5`#t#Nt#dK0htYYyftdH#WLWU{^mc0OT zpwAphejBcqhKqy@2}d8~z_ADC79>X)79Mz(A-5POikJww%lwlNO#_h0=L#J@*W1}V zY~AJ?FGOjUOLmq&z1uD)hMsIqf+}ox99Ik#@O9g~#(MHzq zri_z4Q|1ruaBL}s^`SUg3e-W*lOjE4ibOVYP6YD6FdfdNcj@rr<}vYG^F~2$HBabG zMm87AS7%os1fQH`rG0&UfHqbv}Nqp_4C$Y2Lb z8J?xxLB)V*)J%^R>K1K}AXnR3YDk{KGzl$Ap3*W)6j;KvAQ@8)$oGZn&W*8mB>&1q zf!4XCMxrWDxv2|QN>Z%Qc2RrXBux~u8i5VtK`KE%3Mw*T^3&T;shse0Y?bez3wQAEnx(jxAgQjv$HSDw>!{48g&I#1JkilNgdP z(%*dlKH~y{>GLJlylmWJ4A@pyDbKxxEZD=~{eX`DjgzhRObyYQ2%!LYN2E>=a70U^ zqNHFXT=T>cEdhmF0WPWTxH>o${ z$Wr~(?6@>V0%gz(3<92~TWclVqi?`O2^*-}fMXHL*;rURx0TOoPTNN1rkseg`w(>o zHh_vTC(Oe(B^w{|myy&cZ_Jay0|L?`cTA6bgmzuYH4=z(+i44_w;@qUi)^wD;F1^yZICHsMc0VjZ=98F>ZQ8!X{4UN0 zpBQkcFku|=sM$hb(l1LAp|7CP4@Afhfg}AurkzCF|D>H_qbd9lF3K(JI*-R}#m+TC zG|d}WY?}pd;E8TbJpw3PENh)M_}FTkvc=JaU&fsrjJ*06$wQ* zB#|N#Vl75Rt_)$HV20BK+xwBp#=Sz`OGU^OYJ>^>_9mep(HX6(v4WI0saveIp8ZXM zqn=;+ZAW^C*CxAfG~e*{3c(n7>Nby5djV`A2k!Tq&4g@QLe!3d^b79B;>g6Epcj?W zfrSBES0qiBoD;V1``WpJWz+7y^P+gE$>nKvbU`vH%^OgoF9E*Z?}|;SOUm!cDCieX zIw(*_%k)ZCY1utfTjE!iKC`iRrWav&fEm<1ANv%96sD8D!afKU$e;_4=8Qe(9r3*NiRhqg*$SAVQd(caWu9JP&Wcc^I7&|)n zmIXze2h1_Yt5yFy`gk$kJ(zYqUT8V0@zQGz%`gVd8WUo60ET}WgQia^qEs4?LZb}s zNGkJ)#cB=ON`Xf=A7|W|?QJcz&$tf#dv?*hdNndK%?$fYX}2i+f|$K zw^KJZsqtkb1~aM_f`TE9lqsPLmyWTba+=m*GU!D9_YUyJ>@X09Fz{Ong=Y+gMm}_W zDAea48wz8!Yx$WihMMA`ZB6;I2<}p_bFhLq`#)6e5rtVOg;m&%Dkq?2A3^2w)nmM- zC`1ho!_Y$<;!4|%%2jW;`Kk%T-1Bh&Mtm`uM{3atX<=}WaT^Li^kB?%Sf**yb=O1` z5;3T3kY%VLYJ?N!?DifgrhU_m@)pja3ZpMQJh_uToTeD}B7M_l>5v;wwtI-La;r!j z)C~k87AO!;eglCTL;^>K0!OGEDTNq4R5`**H0Fhso~L@eQ0elrN@l6q&;VB9S}^>J z;An#*75R~}0S+|8nb1B~fk8HCT4M%?AA8UQOItVKsQXXCY#6=>voMz>a;6(rqoc|Myey{ z+5!3u0zYJmC9tMXT(<^p>E*J(2QgZPxzcdVyygG1Io|&qR0~9hV5e=S|NPm)aIBs! zYDD>gXN$l(!)y^(+$)rKbdG2ESI-vBD$ffzTSy=n797@i!NHZkDZ#-E#E9h*Fv^Ft z!1aPd*sQE&Z?zcqOXDC1NLmQ8q3!tyi)nc2amo%%Y$Gh&%U}6MWcD-Kz>ekpC=6+d zN%!sYt5|m19K+D>Blas>Z@c__v@`on6vf+_vN0rF4Y%NNT|S1|ILJJg+KX0lw*Q3a z9Uh7HNiDfEUsjqmaWGtg2mlEhO6VEIf)*C-@*%78Q}&B?xXq2L{LJ=SAkt@ZmZ9iA zt=L(s*g*riduBV8To`hOk)1c}80bLrJLzPP{Q>wT6bFPe63LEY@e$s(72|r$a;>}X z*c@7FTU`=*t+CByd%hw??}OTRzgvMjm59ZQl|oWdT_^LDi8$JLp0K0uI(RW*%)gk4 zSjNb?-F6&mV@dMqu&pWQHQ}4l8GN&R2IXr*aAz=eTOZfrw?ulmYpFmb@u^)S_OXo$ zi*f1f>~l_^sJGC+iH&2B)B~Qc2UYvU74wL;w8z^KdsHF=>~IYki?6BzsbYCT zjS6UtCUOc_r|GQ2C)V4-L_`*rD(AU7`y5Ti0%xPFzA>NBFm;;Qk2isaf#Xem;3432 zA$QaxZdnbr7VkC4uBPi_coyJ#L-oeswwc|2nuObZ;4D_uafMU>W~BKnCIg7& z@0wUa8ONVMc_rkf0DruJ8ff@Z!FnlowF=hV`Us=!hdT7OTwd@ES*<^FzN^+O`w6u;fDQg8E|>P>XWZ?uffxigrra#4>{vPRBiXT1e9YlJYS;K5i}DN?o4 zVf;i4a44$jqb1RNjT=t$^GkWPTwUMRVN2yPjR>dBJvk{mZ5Dw5!eBL}t;R8qw`D;N z87`88;HoE}vqx@CV*X^PA9xmT8o)5P5QFFj4XQ{4|Mwys^ky6|ap)6dy{RD8$8c7F zRHSmMScseP&`(9Dyn1T!kkl>kHA~m(uM$rxwp}Tyj!Q*Gy^EQ6ApECAs z9&~Bt6k>1kTr3>6od`H^Z9mvp#kA-YYZn{8j%vJ&Ea6zIEsNDe!o0z-8#>sGuoDV2 zCJ9ntPtkTEMP6ff#n+L*3c3O@g@dX?d-jB#^0wj;6w@srs+}tr<6%rGp=0++p|vX~3$*xC7C^+o26jDQIE)Nc}vl8FR@ZS$&csDJv`g+d0Ub z-XJIY$s%p6>Eo@Po<~yi#Vn?Q&mJ2rX^|pt6&f^B)oWI;z;7>f8P++9AGErGnXHw; zSrdq}k95p{NBR@Au->EBWobksx(?`vVsoEn<-=&l4y5Io8->xk}?3Zv7D)NQE z=0~#+wafkD6N=Naz&GKe9o>)8)j?x?hMGk_xtPkm88H|PZ#3TA)Dj~C%{iJy@obmE z3g9}^F4|=q2n8AW&;z9gAtTkJIhuki(NnolCbK`yzi3M~QRU&kjr<-!I%3UPQXWp& zwUm8dC$nim9ejI=t3tdH$bq;<_P!LeDkyY2Phr%(dh&fhPlSQH^|aE?P43{mypIu% zbTVBfDCg%>mCidm0Kd&$e?HB*$wQj`mXwboh-fd+0?!Ul7EtCnwpqe1h9G7x3z|pY zOF!I6ZM8wBY+CoO)YMh=3AK#Qiy{n}9|Aj@#upUB-W~O;$AfN3aH)Dh`)%){63-G1 zR5q3|?duv68#s1&Xl(c1?PQ7uko>Y9vo6}JjuQchwRGKf(9qdbhlsk}55*jWXE)7b z9Y%Ex<8^1tj>9E$*|KuKP~`Xj&X1s-N6IF3GTpl>1@quQ*>V}c{X3L&xGk@>%tr-i zVa6VDMS2vK{{e|CThW-yKHM%p`|v=a7JG+cbtSi=57g11Cv6J{o|eU<{@5Km3m$1} z_bc4H{4MW7m9525N=vk51k1JUXL_Ptn8vt#vTZIPNMa+xCrAR=RgN}O;?V$R3S{#X zU~o`&6dO98C~a?MTK0Bf<9hfY)4hrpy)??N4u3u|_?ebC-AK#-&2G`N{a0#NyIW|- zRRgD_po#fowiZ)1b0{V~X82;Hbl4uGD3kl<=Co{Y4p$3G!k%R%NqrJ;K=s@C?1)$c zH<%2;BcnUT{hR8sZOyfV808lp1TNFm9Rg+R5W;aam&i*?nP&MbT%I6i`YwhM;$ds4 z{$tnMBcpbxF_oNVjpocAZ7H2MW55%dv|4KyAqlLF|bv{xl zRyM8jD;1UH?V2W#g-<34x;<}<$g&!ChU)ebDPB+Acnue7|Qu3 zHSkx3va9fpuP0q*cH0X$qHvVbFJlZOMl=L*=C+-{8HS=UFeFqkqXaUF{oAl2wKE2c zY+FNW0=IcNCObq0p;Jey6NDBm6c!zhXvUFSR0Z&?2A{-+?Cc(p-HO>qsLwQHn}|3M zpe;lJchtT@`61cy@hBenC(A8UJ9%k)L-->l9h7#tC{1WgJ;EF&c-tCmyRFG1UHK@= zKiH!&WRi))nFr>WodNP@bVp~W2+7#Bk7cu)Cf&hQws~qw>FvY>yuW<>8N4@T@8N*3 z=l3z5!nsKmps{~z3O?Wui^?Lb{rhVr(aGhDHY!`QZEtp?+M7L^0&V)3?kN~27WVQy zetxO}L^!nl)SA2p0`a-RHta=#Q|zZ2${qxL98+j#p+-hvV$hzezA#|H$j^}vqeyjX zvPgZWQdu};?Y2W*(+V zW+8KsEVc*coSQtsi9-@tpiQextxO&u8xszb42O0bOfq8bN%l7l7{ASCk32I%PsWJQ zf91n=bLhlKRM1iBpFv0Rm-m02KC@@YpRFh#^U2tY0lDGj3F>-$QBXJg8W@s&v5`mF zV?t^>wZZ+D&v4ixlB1>_5b=}tr9HC%9HN&_R;}L8j&wm*^SWK^>SE);YP5MTFL^mcWogW*j*ziH~pRd)1o~or4j|WCO62ZGaF4gM-LuVa zxj*|IxFy6P{vt6!%g*c*IytBF>YTemE%fj3hfvF5wlfHE=ZSVsTj7FYj67>MRxS=w z88l5>AHw14?lbMAy}xlYy-gA$Ibp8NCSD@6`s8(*(TlVT zTmqnZNg|;iIH;5D@z52!`3^~CjjXz-`nuuB$WR$ETB1yy*RdMR=!!*ifB$}0V|rC*+d$B&3)yg zgOG3WDae~QSv)l;-x?m|b3Dj54LGv+}ce_m^W`)!>(&Vnz=1WB#-kT{vTl;#?QzI2umtY|9qa8>^96Z*z&iW}VF8 z##g-5&O^?YN-3Y~PtcX;Tycnfwg6I|M)!*;OXR9qDXp=IK+TGE8EsR|igQ!z^PpJ_ z)jWlr)5sG>FXc}H1&&2Q0$OBS z-}yc_wi!Cn0%Sz2n74MrMr=cmqvBcW@$7iepB=s`u*NfC zQ~4K<14INREz_9g3Hi!52Sa+~0JSvh^F+3Sy-1$cb#y$8ilu5J4NDg(v+WH}IvdKU z+hS-CLhI*ulBByomIEGX&v1dI>HqdPkF#Z~Da*UOlGFfApeJKqNzO{!MQ>Xa{{0)M zvFBI>x}T7=$3!$4W;yUh>ms4I)=RqI@eaPVe!7G2pg*B?m~}O0AeMrYUXN0=w0fd2 z^-AJHOM-w3hyEHQ)~R~zsr9mPv|1q{S8E9sM8k@&hm|Sf0Fz)&{4;_8xssX#)<}0vS^e3sqQTJg(47&R zHDNT$4rv`(e(E1WS;LXPW|1H4NB%=2ZriEOvthE}&<0s>@E^1q)VfXTc2LV)i*oRu z`cWY~Bu2+uQop73+gSZJUcW7=-zMs}nfh&Y{Wi@Tl`c>zV$-Qo@M^_FRd&gTW`M{a zk~FzO-*R0eIkS^}hRsRkG9Kw%GFLu&A8X(2v$mj?CE>GdVhn+wsp>HC*lMu^(5uh& zklpr^l<$gnm5=?Jyf?0oZh^zg%NE)I+Q*GXkS_0PM>NsY6p~P_eL_UZPP;1vs!FsV zeDa&-+C?`RRdAw^OPL-~+ z#a&XeD`Oo|w<))aPPJtz;-hO!#PE}L_WO8Z@l=3j*KiRkPM{nKESe=Hyb6d#i&#O| zwP>4Yg45}>h&5tUJb3sAI2f@T6Q5+ov>#29jtfErAa(<|B-w2`s?LnVoszfNRXf6? zpmqjHJ*tAr=S1bl?D9gfP2SX#DEmT3pAUymE;xMj&Q|u9T+#IFapgr63X7nyeFFCL z7lAZbm7!uyx{bTk19>4^l@FOtWWIdxmJ5IKF#h$@sC>{aPP=*Q6RmxFO?;vOKJjBA z@e{2oEzKi~PutC70AbV_cR!tQr&EIq?LcO<`Qiz*H`Afu@{8Yx#bjUg(8*S*4&{8J z^;1RiVL5;23#@sfwaePI3kOuE#>VQ5*)TXR=86OPK<5qS#XwUHfI**A&X^6U;{9!q z>Dl-G?N{x>9&&MICU@Ckc-}1)BUe|7x54|7m3>up8?v2ygqn*_x zMOpAh&>HMx0`RUPNtMoL-w^8)jH7Z|#s^7H=BV@Ph(SJZmzG6X8-d*uHiif^yb}&a z-fPTE?^1Y_-?lLl7V(ySOvaV2av6Sk$BChk#vF9To#H9TrF!~wxnMTh4@Bk zc|hYDT3QHeOnYGLxXS$i(;3+6TUw~CnBJo7o>3ThxBK=)vbt}&iehn|<|vQ)HPg$1 znxQDBQ~GQbn-EW1tY*d)fdMYf>_dXeuY5wW@D&E%mWE801*b7t=`vmR)sI!t>< zg8tls94xI^Pv#oq6;=+#88g8sV9f-_EW5N3{Yi-#sp`fM26eTEn$;a9)y6ylIh{(neh z!0i0FWVsKbtJ#BX$PMl%jtQ73q8PbCLJp9n;F80`gNi)?O))5(S&ACu9O<=QAK?TV z`fY$jiV-nPQh~P(U22DA>JOwTv6~O~i`$4Xs*7fZqzA|)P%~w!^m)_ffD`ftWvZ?} zPU|iilPGVwOIli?Sh;YQ7?wx&r@`iLwL+}Wn@Gdy8m0_|!b}MrOPWNofiIKGKfi6c zX@x0(yQNC>VS;aDd|U$n=I>!bK#+5vG zu#6^{p5KAeodPZNZpLql>QI>84bG1;&{8du58-o4rm)1SzBjfiwN{as#be%I(m-Bt z_Fm}^$P^cF;3-Qwlu9x)$=LXde4-j#@^JzC?mm+xjEUW6%03Zu>LPi4q+cz_LCNOR ziMpwl%@`0Eiz?4&!_0PXY;BE8w#=p~6`Z1-Cbe7Uh6dJ9Emm8IkX#0SFhq52;sS<* z1O21H_cDKq%}qhLG$xg+(J5mYLy5Jc!nzj{15rs!rkbViC@kHG=FJqs|0Nu~alpVP z3PD%k01PZM7%bLitbpir@6f!g3v|Ubu9(gno~IcDVDAoP$K`uICu}wka@7qDf&^U> z_Z&~+2$t2%K0UhH8V_(gzLZq5hQ)~fY$qIsKa=>B*#e={aPXESlqcnimL*KXT|q+S zYD$)mV0^}8|0i2YAO-E>`PpZ-Cnz3MF~N^CiTh8;0X`=CnO29`Pb3AhkxEC%mYgb%?O~Ql~CI zjcjjHgNh|9e5(7)Y23sle>ZFrQooIvusrZS@m5}b>u$Z|k%!oj^XLJ%S5D70(FhRK z%@bF)dPIz0IJ;~Q=4!fnp>7z&z+K?nQr zbP-iyS50SM>8LXTR8&4vtqrwMP*+2bvWM8R@;(U6_@D1wK|ehgQEx3Oohv_O9ao%Q z)em{;wRAl;_WW)gO!5Fo6Ig>UGjHTMm~5ov5sx))HkfvJj@i2fFWU#UnxotkM2*h$#D9 zyO2yDxLve$|I0!BkK7@OwP4L;<->PNHey?bSUV)Xn|=7W+ACpaHpdmMkKX=tRA_gE?aQY@E4bavG1Fvs`2xjb-rp2OW6-!;%RNRHzd337nE#4j!A?@E+NWe~ z!)_>K8Q;XQMA>}j3Gp%;SzXM)7^B#_{}phu-?9!GPKTUywyyCNy!Y#il)@xE+`Z95 zEF-u@H}YAnkI7v4Ya3pi+U@PGMNf^7Uk+cV89G;Cdk##RXCEyqf7jkVtrHLiQ?U<- z3$y~H=!&!d%!wG87jnB)Rfd914|r-b ze!;$um@Qx^v_a#nUj?Npq!-HFDVEE6a+Wk0ie!VrY$O|00HuUeFjS@$fWI(aTaMXO zs%*Gfgf!B%e35&N%r&w^!HmyKr+5&TX?HD0p|AykWNej(!ZW2&Hc&Eo*KPL)~HcCZ%pzqF>5hF z25f}{kAbj(HX#&ASR+Q8U@+|wZ8EILAkr5=n?}Dg$4molY8YsV=)zNuL>Fr$HY*&X zd64nWO_hLbB%K470e?jc?Eo+;MsX}Z@*ZHk+Rg`$`phk^@zMwbE7-3p5#AWd_vWLC z39F3mdxJUlIwYx4l1344mPJXk_gc{FwDN3QsPGqawD6a$w%~91)(VlBD4a~k3tNP( zc+i?n&gOyLbS)3Etl>cx$HS1e>5x1k#hYZ1~ewrqE8h~s_rl-rnNBKI?{<}2<_ z3;+T=wjGs$uM%s0j`+sx2M4#!I$^4oP$s!H>gRnqG!f-?&yZGk1>p44U{mb9(oSWJ zKD<22BMlE@RTqH_!Mo20zX%pyQYeCyc9*>=F$U*BRD+;(=uaWuB`y=!r7DujgeGC; zk`S(KM}F?}7DNr z0O8m*fcGWSf{`Cgh95Q4vzUy63ErF>%J6<_S}=rf0&;eOAR&=f&#-R(`{bvo5>b*% z;bki+Ssw`x*wN0n(3{mpNYf(?tCMEA9}fK{wP<~GCQcMLMQ4J{elhMJ;a-~VXJWK1 z3AhF-E45imVg#(lD>}nHkRYAy5|ie?w*3 zT|;RulkU+4FFVmR+K+4|dY}x3lCh!3V2jUD{|;hJE8o)Khe>0ztqzSyqe+^LG?qf{ z;D(x;;!;g~-I|KmOomEW4Q+R4NldfG^i1m`_EMocQ*X{8O?>cKmU4+tS*MisY07ze z(w-~GbxD~`nYpVD-4&=bBB%Sel5qdCH?v1Qy0&+8h3eX9N%$NEA~VCQBU3~~Zmo)C zyde*oci=a*62kx#c+U)PjJy!Qtw9xT8xVGJYy3y-;-qhC$-S{t?k|s)`=(C0|9!OF z4|mGFVYJ+jb;^CwXt|#-sYubs{jdDV(9rrvYj)RA0Sr)s`8eIMIETmn7XxSRt27`Q z*utV9?BG-Qg0dPYKsv-JE*K?`vCq&>7ui94cg9ZjJF9u&+9M6Pjr!bpD=E*L3+iqNY8R%2si-4&LD#ZhyfGGsihLPN+8!c?BCiIFgGeAVVE z1Y~vDgv$9GW^N^tPnPVQk{)!+7AN#2o}{W+t{<^hiNIg5Ip7V7c}>g%@xq+XWy)&W zCg(KnTv$L+Rw1C{sCbJhX==f@6rP{Dv=%RINM6@NeFhM9h!)18j%uHOrtQd>sk9wj z-rb=Ysu|OE28qPh5ADtkQG*d(pyz#5$!Diw>M5Sc4~=~e4;+YIjQD1IxuGGWx}=)WiA2jFv*fIOy3so-E~LZJ>=`qFW`w?vhBqSJ?0RXkftA-$!AnZ}Ya(UeGGrCsLM8O;x?N_6NIZ@{22t_Yg{y~{!;JwCJ7H>`I|B_`7mY{faC@o6yPj8@ax*kCnc6Q zwX-5DvA#>WCDA>9dhwS+?NsZOW}p;0uBxnJGDwNVktHvky93UDs3fy>44*dJ(UJZS zP*uR#x}#3<_pC?@X{SY)?@xA-9xM4v@&K#kV55SSrFS7veRMda zRTd!lC}m|GZh&~{{jAmz4=+K)s`b!_Mu!Hlhhc;D02(D|ht@fc2IkNZjuxAaJjL9=+{dScfP$eZxz!~Z%^%ew2+yl|{w2?^^ZYZO*YNx>&ue)u;<=IMLY~+09HMjXdIBE<>34;__2bKQ7j9U4 z&tiX0|7HJW$jcb*GrmmMAR=z<3I@}s!WhXABN0o+FJ@9Qw=;JxvcYlM(QqL|@cbvt7l~_Tl8db!7`YoaR&H zwkRE9Q!sJUJz13;K)qdQ83VUrPdE&HBgD1*h-KZy583Bd=t>&O>`!@~B3rtyt1x4b zVJpN!7^FCKp-!1T%(D||E}Q7Ac@S$~5~lBvr+k`1a@1!{OjeSNOrb&%nJPIWQ|eSs zreIk>H9s)}O-!?r4&CM;rBf|4lXvOVylp2xGcV#WLPXsQz8u zvSM8Tcfd7>jubcyqB;b5ODPv0hjaC(H|PYtLvbDwgYjybD|68RGuv&QWN_Dptqjj0 ze$L}i>>ip_Uu!3~nHezi7#c-}KJL8R{1icZ9)jt91!^+NfQ%v;LmDc&kwVhV%ia%8{gQwI)Yi>41X`yG2GwPSoiJ#sH zO%2f3a!0nvm2y)uElJ9V#@&kB!AI*>eY~MwfJCZ` z_-(C9_hz~qh9s(HX{`i^GJ`Ak1@ub4@xgopGSMZFDMVJbs?bAZyKcKy$}la^{<|d5 z3q+iM3f>v?yK{dmoku^khn|SW(Xf4kKKG)%??X<+d%ZQ4UJ!q?6o&rFY{otka{%H8 z^1X0zss0r)C5@Uz6IFZ?w6{1 zGW&>noh3;3U9t35Q*+fUSg3pq5^xiSxD>?5dvz2&R7_hfx{#WvGBrFpl;XVsm}E^U z&^&B_vDPyj?$l>VRu3%3#q~WDWPYRAS{mOa%%{`$@1zOR`44!M2K(bUD1}kEtI}QV z>5bj8U2wtbuHCCf`1>xSsX}+z3~<( z6UNDyDSs8--(xr&!A&5>VcAvPX+a5OyF)>eRZY9xN;#9IhuCC`RnOG*C}t_bC`@Pb z^O$r|?Cma3%Ig%N-Zf2F+$|xun6AYl+C5E;U|6siP1q&C-OS7FgV z_cFC&_h{i|vc>X$s^ZW3BTX50J_iKBP5Ylht|$%Z8cusXcW(AtAv;8&+-vq!}VTG2!?qN06C6rDs@tp*?MtWjP(<9yZU_0~R23s1rg zC;N~6!9BI>iI-|umLaQ9?ed@hm9>j>FmLpBnY^;CT@WZfOlwan)-HEshS??zAqp`U zVq|pHjFD_C#2BI6oXNw~MNB>2`U1tVMld+smMiNlQ*g}YCBXE-jkwyiLAex&np|xRvsgB%iPN>2UPqSme-f|A& zrHOMHCskNrM9Va@F2iKbkQ7d0&yYj>={%@13D|SS`aiH?{=vvr|)@ zgxKlO{jeknQ>YEVMlYw3E`c|G9%~MxW*_wSlH`+=kq75VHXlATRGts=(Y$QRw?E0- zH`sr0-1n0Iik0;xvyLSLstfAggm}I@*xws;<98~ml*4K*c0blj+Rfs9Um9cuzdsGK zjDJ53;?m%OG{~C%gEYvb`C%G_V*V%%vZQZLgOG^_(;yT7-ZaRX@sJO;gA0x;Rdmk9 ztRDD-g5_C(KSbfzCOU&HYvo{f)AueseCfePXxa;!+dcyS|GWW2*Io9=kHOX{;~K9U zA5GX{Vs*z!JH5Wy)60SKE;h)!R(3JVofS@1LnH@_j}j7_wm-mqeGY0+_7fmm6gH%dQa~u zrQ$C`^t6_tr|vwSmek$;MHYqjeJ8cdnVaU?_Q>;(Rj|YS`;VqCu3UN56_d+DhbJb>Ve3oLkCNw2T8@ZJQkxXFTVBY48&7JMVYyFULJ6#)@* z*WK`01>Z{W&f||(5Qfp6b+QEyC3xO%EvPwm-uG9YM}|Kpc-L>wTJ>-9`|zXf)bo9JO1oV1dmpZ6OOyLn) zf7tv!$!C^*_0F3J?xoC6{#-$6P0l;wR|@_gf>)h*>L!ApBDiJijS3#4B2K*YdkX(w z1uuSfGrEnCn1?WgAV?M(323%@q>>G^%f>bqrM{qYfmrxHBjvn%f; zco4xaUTDF8AxQsLA=6$$@Z=YM(LcX$F`+9~{QBNte%}cy;p(H#x}Wgp6sCV)ty1K(N?3l@H3|%w8 z{8nnq`R%TKj^AqSM1Ff}C-B=_TgGo(JD%TK?Kpn>YRB^1Upt21akZoQt=B%w@A%qh z_?=KYir*b-NAf$db_BmW)(+=)Qf-LeooY*CH@Wud*zH{VRP3hI4vXE?+9zW-t@dxR z+okrevD>xwiP*ia_AjwZYKO+IQTylEHEV~&?)9~UV>i8aQ0(4NTN1lB)((u_jM_iN zZf5NtW4BxF+ZfdTGx0^dV|PPP`;*w+7}P!#yKe-wKaSlu zgW4a(?ps0agP4&9wLgsArl9tL*nK;wEsEXELGAsRxdgTM#qQRi_TJdt7StBT?)IRz z0DH=yHa~XX32N_&-JL;gUhM7)Y6q}m4{H0z?z=(F#qN7SZ7wT(P@4lQ5!ButyN83? zyV&dpwf$oElc4s_*gYE5_J#cqYVU~MPlMV%v18}IckCVyYJ0(c2er2&69{U1#_s1q z?QNXs32J{3yI%ygx5n<5L2Y*IeihW-61(37wKvD^xuCX3>|O|JvtsvRP}>~`-9hb5 zu{#a~+l>P)JZ8pj6^|LQJB`O1V|O}_H^go=kLj`d0*}{oc#KCgc58VwVz-V5Hj!uX zcpZLTcyLg}?eSimC+7EcZq5Y5t+}R^MdH^YpDlp{% zNA?(x3Q*+%C-yTQaAA-0fCGDi2i(__8zb$_yJB|x+X8%#GnVK!UNn9yeAU<`HWrM) zVE;#F&CtKy?RN%S-x)Ka@{AcsjAm5*yBR$*dS}ElYBOf^&6v?YW5&4j^^6(y8RK`G zFk|M79cD~~YnhzB-+9W^X+F5iuCGfP&DT$V10(wa?bqOM(UajnLOV~!|6avGfQL&w z$@f{k2L+DP6CC)Ao*=j@ehuKeJ^ke(pI33?AE+^zCJg`em>xbSPmL592Z z1RK7sC+Kjqp5Vjn09RvwtKwk9cNAyzZ&O@2p(jXji=MoHNacbSkLn3tJfim?#!vJF zGnT0xpvDS4!Htvj1UZ)L33hx=PtfB;J;9IT^#nnV)e{UkT2JICh77I=gyzSwcJ2j}hLdP(f-^5uhEcStJZBrytHINvlGTXFOw zyvtuAB&q8q3&5KO`*(|?@TLFhI!dthNSdoH97SiP_<}=7*`Pbv@712kf~Ze1^YtGf zv5}&fO*BVSy%Q@8&oL{Tia?4^Er`EgF7>1$B%~(bzDc4dA|cuqn6f(IP_zoGnP!aF zk|&Jr*KLpS7y0IqVV+o+iG_GNjuMI$q_TPJhvP`5eF>_2TO3n4X|M_zB+b_3`2 zO7=mP-fyu9hq|Xbex8?}<)>}j`c6+#XCf#=ALB)Rfx}Tm&mMv9?MpaV4v@CNmbC(k zmpwAP>t#26Bq9t+0TA-Qc<3lFqI-i>xr^?JbT<{Ttv9Et2sl3qKFPnvgsmf}~V1ia1Yk@DxqpP(1Cn;@bv z2|=1A$qr^KJQ1S9~O>~+pXy4(8K+_ya&UBxjyl2zhFI6o}246z2w_Tm8nUN)R) z;Q3NDkQ0SGgB>3qM&V(lr6t*sdrgolHA+BIS@#Iu>inI$A;!^-O8w1A<*L5{;$i*G zmth*M!2>F44rkA1yS2#@%pWNqxt1iR&FCG7X)QAC@@857I>{Wr}avM74ob69fH)A|{-dP*_FP-ztqH&4LVhvqK%T z(ZNRtCVM@#yg0Ox=SwgXRC`8eOuHgZ%hmjJ_GzWIB z`~?{1UtCbC-$#eschNhq2?>19)ajfN;fajT-NzFhkh`BJt#;q%sSh6DxkkwG0|JY9 z{*dQ>Jb%Pbdg){!9E1jtjI=a1)yIRQO5X%Hw1C0rx-NIyV>>n&NSwdMA*{JxYbZePNr(+Wn zCnhAn$3&Wx{I|1Okhv^JN%bBRHT_ANW59px$25QOS5+afr8j`kN*pXYhm3exL?|V( zcBq8|V`ws=Y`m|E9LOx7+wEZ%DiAe@PPfTB!Y<0X)can63)tz( zdOL~G?PjaV8UpD;3@jd;-L~=xoB|CF^ci1)lfnRJ2ow#VQdxDwkwJ8M02;Mg8byO( zQ)EjOP^BJ}pmDJ>n2E%i98YNhZjhD0%=IOV04~J~xJqmXE{OuJ65D}GqJXPJLC_i| zm>F;-2DgTh6xmpFiJ!+^!O4?S*|yS6ubsx7dVqBafPl9EsY&b;6f|dz-7HCwuqi)t+2)`C(;GA& z{LJ@^FL2~=l7}PJz`AJ3;}jYdxS=ka)^<#e!;B(9fmtfh5eU3oX(^wIfOr_;BV_bO zu4H%zy@9G*2Q*|DI}x=e)DMS6zXXNT4NzeYSrWR@Lgx_rhK1G;`lf}hCiE=}oki#- zg&;<$dK`kB1J?8H80|Cn?fV9#63qOzI{Y|uMzRRr?@cxc%RnDJ4WQ(cSQW1 zBjWpwh`+0~S?`|W9y+pAzn?=E4%QUDG_Q0H-{q0Htr6E+!v3voI{@1l`wQ#ye6Uo1 z57r^zTgvf<;*J?_OxQAul`8XyH-BcPsLW?ZLJMpPT9_gW%Ou7?ZvkaG3tQzqS)$Vs z!L~yM!8SE*iJPo*eHvR-w8}CqjmPo7@lnVkV*{yHD3UUR6rv(L6$)7Wn<1PaYq3z2 z`3~Qwa(vK=R0ByB&!#Wo7KY}CXR|Mq|8lGSa&c|=%v7XWpC6wQM^*UJNFMXx7POd( z<(h6bry0j3A`rUo>|xZSW<|3NN!yC{^UWv~$)Uq}Y&_D|UA3B3P3)u9yJ0193|zG1 z6i8W&)MDc(<=hm~1c!Fs%GChR!(fk*EO`&5IB`hIkwOCjsRg+J-4sfzyanvs(pcn zqG@(BhQllyH~b8Ql%<>IHQ$0(tIZ!Nftzq8qBRHZ8w9oa@6K2O0}{B4H$klYXY7%{ z$)qCd=B~7C*3K?%r|cBjYN_CKo=8icMvT(#P|+X(PI@@gFA0NfhM+%konXFs*b&fZ z*;%p^CB&Ar%hmw&dg_yKATw!i*m+MFi26NdJX)bogvfEuJ?h`#Mzv(ci5FaboLLc~ z23HLgZ^@}M61gQO%MbSYEM4qht6Yn#yIAV1qnQ<W|fnYOQf4b!+lC>a^Nt^wbO0%S2P*xisktoW0@?78gIxI_T$O0D6XhffA`OmB47ZrI zWl-xJgQ*s2S^6-xu+1`NUjiL#Kr84fqg$u5&OuZ>=*r@;kP2Ymrv1AaV9E@}K&Mv* zy2#!2n1K!hxkqx)MSxD$gmMz)PMK+l%GNFdD`afSzRsSh^tDi<_04u1Lj;bV;%o+#VFxwI*5YR>ia^ z6|rJ2WxTk-~%iFfmtEg80k zX#)spnhhz?MxT~VHs4GTSTUuCBP%#Oncs}CM;F5;VnjxUp6!D^)0kTb!PC&jK+YWL zC&_-6Xm`hK$!ukwg2B;&WWKM10K}#VJyebM*`BgnL+T5%ZHuZ&1t^qRUkGLe;60ul zcc6c&PfVlxMO440H;(U)O5K@og_Y&@YW<7yq*JONUk>v<91~=VU%}N9i5XZ!Lw|&t z(javifrRF1{zuw!MnI~5R8K~i)Az<1(-4+JeHS$F?v{Fdv0Y@!+mgO4YEU?i>TIPn zBAI0!M&r$#72?Y#lTE|>H0=HelW0b1Py}n;vxsXn>jY)8vS;PUv^Jrl42-3ygjf~Y ztR(H};Afi^M8kD)9?FJ6O@#rsp|D=a;TnTsgIm@v90K88su_%}eEN|n8_#*^)69HX zkKvZH{*ZbM9%QsZw2qTAOERCQ$FR%bXt#NIOQ8jiiAaU_O1alyNs3-l$|@NKO6Xfc z=sU$7kp)gaLwo?_G#{{1I9GqU_dDZt7(dw%1B^iYk-zbjhMiZ!C!F_DK&2Z)Sp`u) zy$#0$W#2Lh&m=iCG(RWw{2qCM7&2P8)u*Dube@MFUvuqf|p6 zr=gR@y)5+)^Np(dQ)=~PW}NDUvg}yM`y#_&?Y8Mfe^;3_{1&s^^jRP?Vl~U!%L9$EJR1z#Rc^4gr3ZQkO3O3pd9reD`wc&qj!j6IsF+rZ|!C{ zpB|33i!MlpnMoTMYV3TuZ*z6?v5{fnuptyU_;6!oWVstn;;k-_{Os^@p}EKOK!!8? zkxaLkpMZ2fZA59PWV?x#urkssn*l4~)9l?@x@p$GI}6>8y&Ed>4Jn_^4kJD3RIJ%3 zagd(4u-%|3e6Y{i=dQ8ohGcAHGkm_hiirKOjR!)mkYa1 zuM^dK;-|tx^F^tG04h!$cE{a*$a-#Ruchb#Xs{UsPh_ zTtOuE!0L1Cz9e5{2D#Xv8u%@ty4@7#tupH3dwEl9%2lx5Ow;jLu5GYZvftrVRW5RX zb2n@p?sD=$Wv$R)Yg(y(rKj}-BY8~%=s0h4r( zVoM*H#bsNV?8;Yu4_lS)_sA&~$ZBnoUe)9hHD-YX1ia=P68k7Y*3K$PP!BhxfeMkI zQ7CdhtKD=RU=T(+#_q@Gb%zr9lkI|Z3|Xy)pMCa9XzVPi?AYSk5`U|Tf$*IZ*a+Sh>B zChcSd1r)@Q7G@rl4|WdRhH3sdOqJMLTn#A_5}7P1smK2eCU%q=%tp;%?g-4CVWU@r z7ilJ#lOf2Ho(|9|w&>W{>>UU4RF`MlDn(QLDETv!#s}6&& zs%%kbqWdr|xr9$#MmIhI8-)531{yn151Hk$fN#e!u<~eb^MhNSVe3GU9W;w=>Xs9^ z5(1OQ>y;gGVl}~51uY0juK(tNsyaVzwf*NUCr%bNC+f_78R-hi!o9wPH+_ym zgj2AU{78jVSXTeSq-T9ym4akwBg~wOcf~x#RxHF=sbe5Cnp9vg6s! zZe6*CN*N?F-7lG`9yeJM4zb$tUr)_cVhg7t8RrsTzL1QZkfg$prKHz7)T`NV?gGS} zqaII(IOBjN3&$ZRHq>wMe4j?8;w24QQo@``1N>t74IwlZ>=#0iLC`j36!oUe0~#t_ zhAJsLe)39gKWRa7JrtkrXVX@~U|0-L47AWelt>MP>lZYk@1i?V{49nW{$w1Y8#@G@ z_F#|TJU;M;OT-8m4S_1`qmU%v5&CY0Sis~1u6%Y{D`%ikewuV_R{n}bb(X!Foxfsr zoo%o7%wNssoH8>M5;IeFh%*Q3NB2Nd!P?!zSvqL<#ov$!a%0&}hirjOe3Lk+H`zCd z5T4xC08P<7?O?Ue@lgPKOogV)FI`#(h6NMr+syr3#stc3uu-ia{TK@3Yh%>dYuFXW zrL2JwOh&%n6O_-AoM-A?H)3H#Z3rkpFE(yBc5V%sXxDVThG(!T|5_`3^ve2+O3NW-Sre5i7LJ6R@S=E63E= zk|YeC+nUY7p$N9N0ab(&EhLc{Zz#6(U@U)lhKF*$&k|~;d0OT8OXU!WF2|V7{9z2j z-?d>XR4Z8u4JzLDDa?>U-=6x3Jq)C~gk7$LhNF)KQ=u5?VH-N1Vs%J7llFPrwriJC z4R4Bybl+tG$zbSJJnL*@T#cBw!6ic+Ojbk{ovow`C`pLhOWA0{Q5lt-&ie`*tRnl`m#Z>CVtym^)l{CFI4xi9A-@>x@2}Px| zNhGT7*=6k@ZSzu5^Mztay!Z1vR1i_v8P-3i@h4qLNibjT?Xu;<*Xr>{mF~&aRI&mJ z)9Ff6ST7T%vxMko-bLeBqXGn6k_<9PT}cSPx2IqwZVN@ABt}-FngIR4jf~M*;r=&* zC9ccdRj6BCENjEfn6NWU&6u>pP$s9@Bv3SG?{qi6ww}pZq;4FVBbO5sNEuT&?KunZ1V84s(1JggDv3x)uh`qM_rz2 z5{;iMhOMqv5}9T@=J_yLbb@%+3GG0+>xQAKA4}En+i=L+DNKufy1klb?z zlZy3Lj36O;yN?gC=*mQgtSrQ{{X3T5gpc--+5T~6l zUvJeoxMZeS1>9z_Rk60%f(I^Jzts=)RrCYX*A(geybzL!cY=3AX3(u2j$|AA0TiQ2 zJ~LS89{wqU9a#+Im=L(L-soR3mrbS$L&@d>DkCHeB?pr96~=(0DR@ZJoOYD2q0kVJ z5nM8#QRKs|jm>(A#o@8s1aWSnScG$7UjerITBfh+1JH~^eVt^0HmxtQU&$Cg({FwHdFX^w=QH+dI!Cjr=Nvt5p&pkZ%FVAn#m!d>T*{m#HDGF z8K#+js@AmZCWowrMj=Hb%w_~`=%mu`BubTl(e9E8gf*X_Va8b$J*Fie8M#D|hlAhQ z5<%DX9RtQItrQ!=mL?5je{2sc09WcaA{T|BhF*k4Wy2Sel)$c6<_0S=46S{kQoEHDb2;Otu0d!OWmtzhaSUe=7*j^c$7_yY^vRh!g7 zxlJ)N)lezz-V)PG_>#>Kn0r`S@KqZLWVY5{11y((WD{dOA{k24tsoLw$>>tvP`#X; zR+ntRQ4JtWf}!&M2H0xxm9ZLbA_i0lIr2(zG88pRfCVkaL4I-9>PRCsJ4(W+*>2m5 zFfgJgwCOZ&#zJcys~y*d<*>6kpzBIifbD!&M&v1t$fNG9^z6F1)CH{e#y+QXzxfem z8~G(N=OUTyKLy9}k-rNf({E$UVZzi~@xxwdJv!5zWrE}YY`;Z_{|J>I(-;cGJEK4< z+0&o^8blDg)|3W8;yrA6VKj)EMS}upkOo(C;l3EfS}V^)$`Q!Ckg@<-_Rz4x?rXnH zF-w=6P$BXVT~OMBQZun@rDI5>z+br?D|=goxo*oQUbB!0G4s!D+*+f~h(;{X|emuMg(>$~ka7=3f(_b^i7lB8?F!7W9!^@3_qr9k`TIKY-hl#ckBWsQVvsd<@Q2#KjG1q;C( zzMTq0hr-nJ1+uPF;6`Mvd4cFq(r!j7FrUHJXfu!*25e(~N%Jigu~iU57z<{|H8Df3 zx;KRJngzbq;%KxYf=kcqLZWPRa5cgOGN^TC50f&$Bl@hx+1ogZL(U5k)_bw&Fet!# zD4TDxV39WYnGsD!PVAAn#dgO$erN54K4%PwcFP+pt!>@t9rku^m?r~h8<~~A+<1*9 zE>i4+ z>D;A?@)Pb;BJFrBf_4GR?JcX}TurA!K__-AMJ@uWhU82^N8+$*By|0>s#15%AW59i zF?HMDQ!*WxZPZJxvUCY0x|oH-hMR1A=GkzQpG{Y`7sD1BU*g<6Ya$$=2` z+V)RNY$>FQdHHuU)9+>t`%c6kBP6K3Rz#J|mN#3ZACvf8h7%~gj)SY0Xf@-!O7Stj z%Yvo)4m7^X7TAokb<`IF0T!##HOBF@7Je%|khGk6wg7fAj^Crx94YfYTwWm7gR;db z(HbH6NP(9zC#03*cT!40!ZSHMdtU`33Q!aM@f-LV!cbsVERNv?uSyGM$NwIBeJLDt zSF8NDjc07_QoGQQ)qUxlDDd*L3}4wU%al%kI-xs zBflFatFH&jXkun~h}m7ze~~#>5BWQ_$4vj2u2yxRHOiUWrhs1^zGQ_DifvRn=pf$6 zU6fKlk%(YKV9tRfN-H4m~42{Flrkj5R{{D+1>z z@C*Si9n5)@EOW|?oCOCWY?Bd)M$3G{;wY0FyY+)dO>^e?yu4Af`cSNmma3ovm<|1SVSz%4ex~bZntmqh$8Mag z*H6Q$!n_s(ObW6wROb<}s1E@qv^IlExW1iEyW%U;%dj@fewa5Ux5~_<9 zgQ$-7eK>e!k8H?*ksn6G9vQd}Ge-;rQHB_TTmCwifM^kS>^NTM}$#%`T^h(^D?=uFxl@Z>pSAb|{e#0eg_j zn-smrbq_iYFsryMUxld8_k@f`Y|5#h^xgx|BoeU3y$#j{`X!Xq7xcl5> zVYV6q4lpuQ({%7mqby*H)16O3klySm`1HTe`>w zp3ZQ04e(7zw0;bDQ*oQkY`hx3E1j);x+*nm)EH~lA)wUJZW|tp3gd`stYI~(tu>68%3E{@+oS`trYDhpN{W)X*g*tlwcx&Wr=~%!>@XV- z?bK;nxBK!g43AIqdtFPm!wcQ+su_}S$c9du0i*DYMXEztGiV4}{>X;J3`0iA+4NYQN+B)FJ)(}-cGQno}IcTU@UEw<6sD2XUizQZX zIaZ+uG6^u5EdwTg1cqeMEzAHngqE;xygZ$AlOiE*r2DBcx^$JpXcUkILSoDJ!{PWM;yEifqj9Pxug) zBe?BS(nolKFUe#0eN#9TU3Dg23O?rFEw^_^`FD#|z|3YhqtcCQcr{<=;TK`iX?AHU zzCkKbW5_^@H-#Td&^iO}P!PM8i)l8mRrKyLQ<8E~5>8q&N0KOn?*;5i+J zrorVSEB9f1d^LbF1r{$qrUnagA0_h9EV7u$Vr%@(3Y9- zknL@W?G=-&Tt9*H+rne-tv)p@RO7QbQSy_aE1d$ieQKQoT`f}}-w88~hNHh2IbJ?s zitnUEr-*H|`F5lI?#aO_b7{QUXR!?O+W<@Izr=+Ddktar1IDlbSbZu0U(Hhqm+(~P z$Do}E6dzMQ#s7@^S|C=0?v*%$?n>LL_}$1N(x!R2sBUM*c$B2gY~`8yN%UU6U^6|) zWz8c}AyuLZw#9Idb&KC%h}rWc(Sd{Vw+#7~!-;IGEy5-Xb1)A6xDxLih!CaverbyX z&KzK*6UU$IydfVZn)OzPK)U4hCXywqa|tV>&K}xMgope2uTmnUQJ^ObpNQ7aHnA-= zqD3YWY^Rx&;w#Gjj$`(k=}jFjy<$#$v+>WmYR)i$7hK`%8lUX+bHBy2{>Zeyy*+J|4%c z@^FT0vvJc5#@xCG3B$3N0L~2^icC!-S12NPI7+!%5$>z72uBtJywCZ_jf(7)Mm8!k zDUIBu$c|~`4n-!W5l#sPcp>uz+^fihH1dEV$1fl zQyCz6ZP|QS26yKa9C5!4)C1k7?ifrgRl}$}N&mVk+|&TljjNCE-eCeB=kB6Jd7!&T zPsZNld$+J|2@~9R^%g&L-_sLIr*jU+I!lh|zG4A9(Y=5Ry)GMOQ83seJr?>0?2%&P zX&DkCx8Nh^Op`}pv`t(-bF#Py#f>d-(L}ZhX)^7CDu5KSE#Ze6*k=t4uu2*MRST@? zLbL^HJ;-J+P6LY!+bkv#m!X@*p0$|pP1F)JD9=~2P)skjSh6t5Co9bsMbeJ4V!;zj zTW&FvSCFO)jqEmy3?CRgHU)PBL|bodInmyfyu)d%am|KRBmuhNbT;Lw^+?L1w}BQH zThSz23JP@-w6O(u{01$h?W(t(wzn)}!&eNyk{!L5ugfoF!a&GzMV#4CFHV-TNdaC`N-_5H^uf!j<{kH!z;0@lZvTDe)zzn5BdI>S0JR<%ufc96cO_ADH9 zmdrc})aSd!R(R0xHd_X5Zjae^1^!}2i}*fhYo<6NGvA5V7qa-WxX-M@;Ua%qP7;$; zFyzpUPBKI`E)SGUWW~ZocM739>%3$Psg&NrCZ*>KFQp&(0kALu1OudysSPN@r1XC} z+5mX{mUT-VK4F>-UjajayV;+>5vZj?B<<5_I#4l58>JYkIj(4%VV@dO-=ANS*$~2o3i41;|yRIJ;lR z1V6Jm0a#uFv19M!E=I~|Cgw0RU+U2!%7FSD@4;=kvK+hw#XU1JQS0E${aUI6O$hop z12w--c7?;^aLKa~;V{q?!F1L`hK^P|hatr1gH=c)aE`8)kVp4gkO#qp42jD6##<0^ zQ;HN8h%<77A*iD_7%I~y42DE+N7lK}mp9MqoZM39G+Lb2InC$6I7v2$km z&_t8KeJX4P1GiZhz9{fCUZ_~1g0z+f$JXS_3L3`QP}%}NpV!EKgs%|P^a=wLY}CrbJlWw*e!wdbTRPCIXf>4OxNX%DGb)#_v< z4aKFSTtL~*x6JmyfahNPhLj!JPpb{?aBr&Jm)Xgq;E#0bqqKx(stC~cfpXm1pkb>) z+8Om=gzcrJYyck>%^E9LsKp!3^2rh@GQ_AFe(CXq1BkOooD^LV<4PJ!OpsTJ;QlUfIF zcWy||IYA5WWhefCmZp*nXGK&=HcxNZGawmtUEYnX-Q7YeCIV#Pi8$9ua6%3l_#mA? z1`Ep(zr`Ps9Z{05*yICMU`23rt^_^j`~_ zyNgm?uj(!ht6Rc8>TdEYr{5(6Z>K(_HQ_P_lD&4E>?#rIBt7a4S^;%$OwnUuwU_g+Mv zJ`0|<0nG#)Z`IWnyUlm`t6*7io8!sL$PFUk4BV%eEND!Nq>$)N`f(jlN_I~AlgWgn zs_l0r4C0b*qP-+UmJlUVlyGP=X>pTM$1zq@2O9Nc0_BEpDM@1!LTws-iuE>j)T7$i zNsmfn2R+J-UBK9hR9i~Mk=03jUrTnu5#d}U`sThW;Z_r=&IaUpn$yQ_`Q7H}(@j1k zsUxdELo(O|S?uOD&{iijP3(HtOd%TUG7)HbbxOo_zmE^V)FE;ny0 zLUrJ1tL=SWG_q%kmWbw6FIu-lS<(LytsaM{iUF?cAx~JSk6RuY6TI8#X=1BDa2D(buNUpYww!Nq<=1_AR zxHSyv7rl#{aa(#m9D-S&AC9a=r4GYN1JGEv6{Bjvl(zRp@hH~>j{ao4frD91P_$XI zYK(O?wz~7;rP={Q<;h(l(hNgW)U0VNAPqJa%+nn-5*|4V)XWhx zhfS|X%(hw$Epxa);(<9zO3Pk_5On~Mw5eq4ZBNa+fQ@(1n1s-Yk%#W<8dkpq*e$#) z(Vo&@ESfH*9S-+(nA?Y|a`os!pO3q~92d56L~Xr1U~UGd8U*XWHLo_)c|60?&!p#Y=RDY;Wm z(%b%V*%I1F!M=es=>198OY}qv^A4plS4ikkD*Fvz>UP^YN~!WD+_BUsK~AXwP02il zKJue2my0arRaX%fZ~??9WZuRSxwA$%gyz}s8MUvalM0U*0K&%16RgF}4!zdE>iz`{ ztxXrGeopK=07C;uenTt{$+r(q4lQAm#}u4YwC9t4x&u8IYAB&o$uTnlqB5=^@C09) zz;_9tU79vs8G)C*36r9Yz%z?9M{po79x5g9DGz0IzTDW6?_wsC0Ir4D6SMxo1b$E4 z5Sx<>?6?qF+)ljxWQri3f_bkdOCLlZtCMyh3EJdjmUbFD(Nm-Et+lri@_hqMB+#wB zcugdVZ%>d6806F*j0c`gg_Suv;tv#eC`pee?J$BG1A~VO6hd~O@Htev47hDX*@Fee zynzK~R{TkO%dF3gCds1zmam=ugGCu-r|o0q#D|k)apFdjJ8|L}Nrn^Ww5@Qf{}poL z{Ta5z87;1P=#9pS*AFQswm1oPIn+vmeyVaZ}Ct>piJHm7u%J(mXe)#SqSA@_@RC#D&AR9lA`bcZlo zesSToj$@#e#->d>Q<#rMM<%>|NU6UQZ!To&z?>JQzd{oI@_F!--x-w$7l}@3GYm$~ zgXbKi@y>0u($Vi0Mx8mm7?_F&Z{uNXVwGVG;N`hyWH|p>0K_-KIETCuqf|R;6{D8E zeGWV&(_`eobI6RwG#g4?ZGTH> z+gcbi@Wl??u|ez`!v?WWx+Y;7n@Fjp4C%B%xnSy}XzXT};xp zaEN`koCsXnrHI-err6h7dmEaGWmPF1ikE((1FxaI-zbR34l2kt4*1EG5w_3lkrg}ZdE&~RGsm1$o_EI*=y>Ikt~Oo!gf?Vlvy%5^18oo>I|lh)EP$R zUsGqKH>AF%&d6*?v^V^(Q)hscB5gc=kJTA3ixVGCl3!D2j3mi^)7ZB4O!uX2(%5{{ z_4}&MFuE)gnb*`ADHE*)I7VPr=ukYArDCn zLD_M%5#i|2gWg$^)Z`^}&uNWZXwz0i^^mlpPReO3KZL=42@Uk`RKA4OFQJG2oyreo z`YXEK(I&JR&^rHYn0#|Bg0A+2l|&vF%yjX!QtBtGwGNScpIss+S2 zw0-E((eG(D3~gVR(>gorrBe*(U~1%i9j{z7%_$~LwXs@#QV?F z$>f^SUa4Dh4UJdPwd+b!fIvy5dTF1NIXtACK^@qRTbw*b!XSAnXOM|h(Ydk^$!q<2NtUG?kxsvYfQVHB} zG4^XbLOxqx;}P=hZ%V)Zd+-Qs{lp{i_`T;5umpOQi2LvZfGr!q|7^2ktgZ5m!5GYr zrPAA;*>RyD9>daGgtj5Oz#%R*I z7Kn^(cW3ps$-5DcTOA$P_SBSA=EwhO@;XCHp zonHTb9N5O*?ByKTmiTvj2exzV#~2Kp%m%RY5rq!qIxkt&`X!EQzrvD5cwXYP_A4y; zzu3BoR=>Q%+8XBV9M;aqq9dtpA5!Wcg(UO7ZNV-||9wBIO~1!_RNL!SIv>?80Fn{v z?Vr@PYTIRjX%!<0bzb`R>GZ37P}@*4U+D^hZRaA|4)lo`=trcrDbLf@@Yi#z=R&Tp#FRf!FrWD2hCmKZCf?k~3$i&}< z3ZpLQmfC(UwCF(4$s$^=6g%O~f8S$2%%ZU#`_T+i-cHAUiV2jV&Gt|IShejEo1C)}%-ccxaH5`EEMz}+oTxzpeceYi{N0V;h^J!qIxhT~M`-^m{ zVsd?bPjix83C-@NRJ><9gcFDQxzz^uQs^!=JdpZpWhTYHDf`=F5?n7$_bz+QZEuKC zR;!!QQtoCns^tIVW>g90W;ArFG<7t}MU~oQWw;_jZz*{D3k(%48IMQq8% zK{BqCa6&OaXz_r*_Q5iw22;Ftr9&Ea^KT;v=MMj)76eBo>%DfjN(Oc#le22m7F+Y%^ZD=Tpsa9I5;!=rq_iDb4xPs52EXU< zOI>$&yp`>tT}LC=+K5jn!{5+>#LoH^@LwHtm9LH>MVr}WM<8CwZo%x)C6E`dOm+fRb&gl|o?w7G^B`He{}=LOKIF0?FtB=G z#9@^GD;c~~=fYr`CX)N~$Egs&OlMZ}n5m2ST*zhiicM2{*ePyg;EblIM0;Icqp8gLWHJ85My zO?kIQmX(L)v?m$$biL%;X=O1`_|G_4V}+-Rgu13A6tZ*DF$bUofErBzSk=H`fviDI z>M;P`0eC|BfeYQjXC1w_zEy{H-1iipn$|VJjl8~hS*P51-xtAFiRun%*8HAPn@{fP z>H*Jb>IBc^rTYPLB@={*Tyr;oLvb-+*Ujh z&*`8GzEV6Yss1rxNsb|1V8}odcjjfhcMCb>+`Jk1u}=ZCOAZ~FB;mk71|9I$gNB5c z0L{xAS&zE~c&K zy2WgUYfk&9jj5a@dieMmpUr8!Tcuc^&h3G0p!p&j>2yxx_R5d6pW2pFBd&}#@}1{2 zI1C{&`eB5j)0~F13(vLi!V=|^87EiSWS&lcdNi4Rr)&wxd+fW|GMT55*H7kjQs?Mu z(~(3PoFeXk>pYp&ZgLya@~o$md1A-O>^smtiz@?KF1SEeJ?qP6Fmsk=@s-Y5VSt~r zRn1us3W9;3z5^K?ri==Nos}{+2#j&$I!;!mX9~pWYI6JZ zw)`%0bF!zT6a9Ky_v`I+zuqQ(y`5(3?f=(vQw#0b=VpCWv}Be|96M%`drU-Hd?Qov zWz0>O)M0aTY*>&}=iisPsokCtxQ=tP-ZnS4zjWp^eGI&h?5!%=>DlCDZwpzu{Pc-fQatsp+F{X8LTE}iBC&$fR+o@DjLf7mkI*Fyn zGa=3D#Vt&*->p~y6|rBKMwmfx@{d-TN~7a$sVgFdaSCyhE;xV?(uFcSS9wM16G00ZS2FV zk5yw~0ADUvArUZi(te+f&8S4G13ED)8lCA;M^po&UwtB_?uyF25+bFk{fdc{=IQo{ zR5r0kCsH|C>4;M}tr~$-5P>qcdQQM(Bf}LnWN~^ZNtr#PbLhy(b&jgi$ zdwg~h>mpP*p4i_zU5Rhx3bv)7oC%m&q|$X4M3SgMf@l^{LS2N)x_(joyd;f?A0>wG z%Ea)x*wRU$=d|7Bf=}Y>Ohk=1ow4PFM0F=vF|TPXpZ|x8;O~EQTPp zTwvh^8(m20?K;(>c4bgI$it$p`x>}Hv#45UE`8N}s4KszCan=DdwGhHcXhpqzCabV zd{3c`F22g!nYJri6!aA$O#3Q`uZ*~2Gl!j=zGgtm8mv2+{JWk|oWV%gM!GCa_Zc%{ z-AT`4#01UqNC2w~3??3f5%^PJIAC|G@j-PE(Dm|=c!A^6R>nY+oJmFFpce!r_KKDO zUf3SKeJ=x!m~2oXZY82&6}z^M@)}&(P@W3_fbSlGuEisyOB#fyskw^!Mv>|mRe(8z zeAP{idUc;2ZLIYLqm`j@OIo3=Ttc|$)w^)tfZne3sTf4bZv4AmAhi9V z!-Lz)8@g)JJ&5qWhlhqv&IE9XpvgwahECV+5#X8$4IMa~4;`Skp+lrg!~D>JrVK)8 zL&vbU4jmw75H(l=9WWU=bh^}odP6^SRU5iaW!O6gN8Y;pkjQfvp>jT)T-PW-@eabK zfhE-4;)PikGg|$yS|z&FGITYykL6DZaFoi{tD);{8@lVGQdfGJVK>S;jg4fL@~+Ku z7AitQ)%r^L7e`Yx3oqTegfr3Ii=^-<`$v^M247U0)rI~=O-eUzC2aQUMU?aa5+`aF z+r5mG;VS@-P!#A6TIkJQAwEi^@!`fpNnq=m%OMl5TbCww>(az-U7Faf-OKZpDG4hQ zWiw)0cpz31_49)upDPgcQ?H*^ZBo*#gey8jIT@$gnawWRwEc3`8S8*bVNP}^c~!MZ z!)GQGCWRL_ZPv9%(dCN}WZlTvt4EdV8iN?Tl$#FX23oGaeM^bE6=;7&dQ^sqCP8Qg zt?s0>TUgyY0<#qg_KxhEnMC=178gIBSmi>_ZhuStHmyJYa$;Rl@9#*x?^L@ZH4;fo z7&*M=C)}S&jeO)1ckbCGf9ZT+Zfvy4#5G8)lF^OohmQu*66YnLhWhJzXb z)LzSz=0}YS6x|(b%d84?cYb;a?gJxVJl6UmLN(fq+^I(O+^zuBajTX?okfG|clRcg z7Ptqu@Tz`nb!rkQdeH?X*IoY%SX!Fm654X|4};=GgBRDG$2F;0jwUaDb#BXxJ$P}? zS6W`Ykr%7J8MvP8lU<$2#R<0ru8UVwg^xn|SQLUA?zsRoi02CarAF}jsL8$dhcsmg z9csD&nEI)Jb6ouT(3QBES4;c!&>d5%zu4Od0G^VA_}HB(fte-f1@sjnLWX9k866D4 zqO<@a)Cj!-UoUJy(90$?gqG+E;*=~g$po2biRQW+I^rn9VloaUA(j+}A92(txIJ1A zCZv^PD(ch=1n5;Z0tr!35AFMKaQKH%2i7H!#_HBy8Y+=BiA%u!`esB@tx-YtMTvGD ze?+PNJ-SAx;14K37^s-jzqkvmWEWwWy6 z^A&yJ*}Sd`6#sS6_X`!jpn%nS#h)sQyGZdPH|O7Pu=F@9{$fS%d_xw!MA2vRak^B| z6N-;7Q~bDEmiux=AG|X!`wGSHE8+*5AO7Wi+aJ*XaQ*$_eUD0*i zlbz0qYZSjThwHV9K9R$5qoP}P&oW=9=V=p0{fQuKm6^Cm@aosebzwxW0EsW&TnV_wuPir#Zq-mY5}|5g6+ zZHk_q=e}Lh>xNW{I0-=62bPtm*b-1jT`wY<~cSM>8!vx*;3bX|d@KT!OFU*_%nq2fbD z`i~U9q?kgR6~DeftOpgpr^x?f#qTP}(?g2iS|H}bif=5+dqnZ8zmwPh6UC3)HEZsp zir)UFEc%$D_ifB`|5WiSew@dDruc0|{Bgw}dt3JT6N*02n?;{gbXzfIKUe(8V!}VA z_)`Tbep>NI3j**9#qTT9f2sJz#jN?2;^!CX&nW(-g4q39@nr=8`HkWi=HvQXML%DF z=2^wB&T-~BMZZ^+_PpX>_+Ac+7ZiVP$E>qk6#aQo+KY;xm{+z{(V^n&ZHnKYe?0`B z>V8~&eYoO>=U*S8=tD(Mj#T`d{Oh9>{ciE~XB2-X$Joy*`px3&qZR*6UidMJe!KYk zSj8XBzdlaUZ{>9zujnaxbeW@!OBi+jo@W&lT~{DE@E}|E%Iy7xAMN{~8Qix&$3#`B&xfV-??4#E(;aQxQL1 z;Jcvc-x-R3vxw6fy}8wDm>M@r2-n~S4a|?`Jb*#@nLKJhK0PNOF9=3w=1~Lj`aEh7 z{zg8Y2HavSW|fD5aYl_O?%!nk6?>T_OWU#25q*I&bf&PID#GWXt+wiOp}Au-9VJbE7l+ zTDB3PTe?^HN7}Pg_X=l|&IW8hWpk&=CUur7byc=S6dEB(INx^F?&Ncj!PI|Vl0d-q zQi4iaZTtGreSzn6;$P&M@ca_bnmg$W-LziKvpN^?Mg7?x+v_%|be|+3iQ@JO_hh$d zCcy5JFLl>{&FQb0-Bo1!cEV-0dodNW>)NmWRH^=aZ+w5LR4(AJ{%h|pK^&Q8H_I+q zfT8b1lLH`ZK=!d0A`j$Tdxeu-(kN%UNJ=zdv3+GfK2U#JrI(i`W#lE2%23ezu#-s~ zUXG?R`oK~*lxh^p2qSQCUa?!o4Fx#ZVde1-|U%cGHpb{SX)jV#CQ^M zPyld{1-lvutPEwd{zlTQ*O;je(k^R67fDF22NC|-pjkuMy|UY`xTOo2X4zoSB_v2* zqNDoxd^WWp2xbfKfE9JjmpyvIHnI`?q3adsw)% z^ywt{db6^Ba?IIo8~?gdmSgg@aZUMy8t-|N_n7zL7aGsaNrHbTyKN9e=H`gYC>WN}z z15H_n5+_{OEG6mRytgbKm^JT`b=R(&cgBl9{LmghJpbA?>*js@j6*K`<@$>iTr%nP zTfe#FY6Wk6{It_gKYbHHlc*PEjK9D6(7xv{rx}m;9XkE}pZv-ka{uwW?pX5=eHSVC zkIABM-1?r&72I}YuwwdquUD||f9T&m1REe;4qUZTvuVw`wJ4HgC&QpEzqdTFdz7b; zeZ7CPHVM|QZ3buXO=bV!Po|nQDt;^sqovWOlHlqlbCQ3IJOp@X=wUzd2i!ky6Qh0_ z8Pa4WZs~r1Hr6G*{!Kd8_T??bSRc<=E5nbr*jOug?Q<5SfwC$ex^_hp@C@dzI3*wB zmiI$*?7fYxzJ4klTe56SKixQIr9SW(HJ>K@?lat`&lbgXZQbK4)3h5qlverG=8y{Oj_!rGh5YeT=GFIAV zseYprEv_W5$ofp!()BJDd7V2g_EYSqgQi3kB>`B@$T2!ikvq$3ZuGe>IbxN}#d(0-Jp3%IhPE zk*&vN;{f&uc5^5ROR=iPfVfYq5bEXny*=*orIJM&$xFhlz@?KtqJP4^t9Adzm*>LDlypV_{NY7JwQ*q3rjC+E@!e>b5jP6Y$E$^ zX}lw!z<(f~)wfd@Ol1u=kVJ=NKxNh&5lrKo=d5c+Yn$aFxx6-s*3uXIo40(&n|EGQ zdj8$(=KaebUpHy-b$@y-glmxzt}jEll#2qA$U^h(-shNWe){}5Ux!p)bjjDh`18iQ z$$kEZRu6sf(<`o7vyS|9eBIhLYvNPtVRYCyb!9yZdoPPt=%PV4`QuHH4E<#AzNyU# z?qiFkuY|K6Yyp{Hd+oJ#q^CeQ6l!EC1dXRt}lc<%CqeiF>Cp-3s zB~g1`l_2t2SE{xW*Q5*JS;tJjm_qmIIR<)?ppEIfAov@Z zfY1v-3kYkAOsSI%JL+Q_d)3%;kQ$!U-Umvlj{&&aZ+MTMSy%$j!TSnT$S%ag#*e;- zqa>vG$~Xoi<(8CxbsIv?wee##YsYgk*$ z(DcdKP(M&~i+QNSY*kaT;!J|k5LBeu&*vq;zI(5VIi1*BA^v7!pM{wdEw;w6HyNgvZkbii`F_dMpT(p zhJ8?IqfF^+7J`@i%cU?3%7QR`1nJTejFK5GqS3+}UvSZFRYT2#%}8}Md&t|wY%1wm z)2ysrV>Kt06dLcR=8BL*4KX-4yF%QT`D#`bj;xB7bKSiGC97vm1M?t9PNU9)qRt+4 zyGLtEv~ryGnTZkc-rb{f^s1C}zk|J;y{$5vS~1?E2K6v)1!Nt(YylQcVat!W$E#F|nhc?neM`MbaF_YHbC zXNh~^hUq$OU3FVF9Pblq`v-q6Cf9b2bG6mIc1<&w_twAr+bMr@$sJ!`(+t%#l9O<4 z@s?)McQd_j`EpLnm+$KM<-5Susu@BfP-v^VXJb*o=8jeKRt1DqO#wyKJ#$;W>{#_? zU-hTG4R+OCwd@xj09AMO3*XCvTQ=N0ghdc!q7^K&mmYTC1Z&&3SDt+KN&P<^(YE}p z+7`8f#lEz*rFllQEq|*oKjnK>Wt1LPE3j&6ZG{GB=N1S(J)#wU$at%=Fxwmsp`BYG z^z?{Uq+fan9hO1p`5PWSw)}n*#LPSLrcEE8{nroYLWF$|Sd&hteQsFOj3De4Xc`+U z-g+d0rGZLj81t@m&GOo2S1L{U>9v0c%3<^=X^=kAKLj7mmi+8OhZol{aZg^voR6~B zsth~Vnw0?tZodp64OWqe13+tJtI0Pl%Wo#Ip5#^zn=GfcP>ykpU-JO+3#~% zm;d^&|9$<}derzwuB)DV@11Y{PV@`BHQts3nS1~^nM;X?4wlvG*|tJbDR`j;!LMsg zwl={~NSR`xvyV)yi8@Zz9!9B7ek3{a;l4s*+Jp}Cq8m{liELV9abxhr{(ED%kCG^{ zC7E!jlOFR#@K(8|bXbZ1R2yr>rciBC9L^!p*u5+#dYo zpM3unfBD&$5p8S0 zK=H9OO9?R|s0jcoUkx}vG#+WpVfFhh1Q=VxSk1%xK639D^6Q8inoRa7DNl8U2TeUC zoEQ|@WY)_6tJ}ve0WlzxpQNAGHU~xdFm`Hjl$_~H@qKBCKn7P#!=H8URcz58-y0Ea z&x<~M!rWP?^p$BEF--qLbP6J_`rr2c7t9xPw=d&o1a64nG{#8zz$=$5baU6Lt}ytY3j#xB}~ z8py;mnb1CLM6wJNjJJXy`+BWlhHAz#sDZHLP&B;jcj!f?u3kbH6xa;!nNPEM|KjiQ zTFJ^CHWUjM0&_4U@<@b3OwdFA(IkNbGXYCWJfU4V_eK<1@q4LJg_8D`!w)sf)7?v2 z@JzN`ej)AW)J)31>~72ExCMwDb?`%zNk;TfujutJv`NwP`Dgcn;Bkh8D4F#n-cU(VGB`4dEu4X zO;60<0g;!7Ay8HU7y4;FS3!_3$vNIhKV~Z{huH3@K(wzf0Y(ro3(vV;?m)2~99#-C zmokP+Y3R~caY>pUF25K>IaKotPqnC)Ao*#7HPeE1qVGh8Ymta@gEb`wnXRhQXEy&> z`|xjlU_^!r3w4NThGXw-Uy?t)87KGoNj7&$6B6fjhkD-J+FpEtj+WS2gz)-^Ge~MrR5c z+u9&kiHCdzq4&sxNYn;X8kz@ysrcoL;6H2y4jz1Oi+aNg4T;Fp-S3G{{eq`TwoVI% zLg@kJnfAKtaje)lZJl_#7TJX&uL&4-Z>RwkzTu-DAGyjGZZ4bC|9a<*8b1ePdxG-o z8q&MGBYL&$LrrakPV1tE>(0RT=RiYMzW7kEXFJwyAoL!D8yXs4vSj5lgCxz+c7zqD z6`^;P)^PtWTr@91>WJ*=VGcqr68J)LZ66JTZbc?5Un*Nt=yDSUcA&RH-tN|9zh=9f`O20Es^UoKtW?w0~9cUJRxwCBkOF5CTH*xG57>wj`eIrg|`C5nT)d( zcrEzTGW#1O2<>XZgqog}amN7^VVe&0Y>SrUtsLni+x@Dtyb8U&)G{q}wL^Oc=`9r83cFre#LMIkL(O9rdmp ziH8oEol=Xw^O0{812dgB3Bs3NO48xdsd*P|)=v`NpxC|byId|_64PU9Euy;RV_gkS zYDAduC$db3B0MXO*^p2{`d@-n))^A0GFuDIhsj~)@}E+i94qmjWep*}TGR?s!wari zq6}3q&&2dE;71OTo+$8>Yh>#Cf4WfDH8b=TU*P5WQz)d*_KF`h^UcQF2b=v=z0EUJ zxbYDcR_R=TRmLW3m(0TLVA2dZe$#a&9Q9yxE=z7z#WUS_1pE}0NYm4(UkH}w`ObG1R zq;WG~K2WZbZWO57fyof$3>f{|x7KI+4M{f4Ayh0VgB8(0;y)ynh*?=%%8bfMiQ;wf zeUdsFbLXsctGH;brA1 zHvgDcqjB>r#R$g&XMmUvZ-1{g+iAvmp)2_T`J5GmFw0LW|IprOJ6I;HybMsCZTG_15cQ1zCb^KQQ!l$wPTO>IAU8*5xWYrDxEKHr!zqufmbkT1hvPHv; z4Fp5kvY=Ik#?Yi*1H8E!gy5*On&DA@qe~hi zab+vEptbbNWM~wyj1o(q=!S>i-!5)Jyt#o)%%{q;!;En?QQz|-#g&yK*^>Pw?Supw zg*v2x@k74@4`*n+swBp1?#63hSdB5S$20cm(*s6fO5(`x-rFi46i0?L_sUCwJ|Dif zg_MFqkS~|RADP@b@htZ*LPF`Ww&PwdgTO4g@+-J#T5VEQBUUx5(PeYtrIua{p@fwQ zUFOylu9rn$!VZL^avU`}Y?(%Vjg^W$sJp64l?S|?0{qA`#=k@4p^apr+S3XD!BJKj znL+%BA`mKAmbz-}%yCF;yRKb|*97*lV9_ zn=-h9?xIJ4JcRdDX2%;Cb@4CJkmC@4O;D+Y5hlSRXmdb?pEablP%4U0gZY+>06{i4 zf>pf(_>MP3t8NFNZn@3K2tfdF9D3>H$*Z<%13O<5VXDE|xX^K#fo0ID-S0buIOqji8%YVhn;aJyRN8GA z7R5P^jWW&avYFXE94M`Zv}p6RJlid{@r%R|ijwjvmSPmxR4&=J;$OHC3=6-%jrhh4 zW;Q^zOhrUFL@#t39bJ-_M|yp@NW=rWYTaBx7Aeh2&e94vrWFQ6^54td76S6^pw5=` zx!%&xF+&njr0nXL^f4fF+5!~Pbke2BCbMlCrZZmdB8`w$12V_p5HH)0vb*SRi)KhH zjW@9~n^C+AxOhh{`OzK{sNuQIdGT;#7(Zx=Wi&hw+%S$KQMMS&MgWy*QynFMQrRDX zd3KNkbh%Ot8af))CamHI{@nt{mjAOWw*gFP&M;dUjv0(<1GAT84WI|Hir_NI{fJX6 z)MX4aB%@6!SDNM=vgjx93(MKrr3soF-KA!8B4<62M4}^J}o4d z!M96FrZ>0w1a9j{GAgl-Botwcg>t3WXG}KDaJY13$dpD%x_rtT@11^d3Fs9fjIzvJ z{czlSLi`n zwctFz6K+^dz|m-OOq!>^9iFEcsLsg7Md-haZYVggR5P+7sF4dH>ge||jc9E6P7=2$ z-X-IW$%GS8IO=r_j#}pghJ|W0H6y6XcblT7=oUe&^D&J6Cg4jDVS3pQr%1zn(2e-y z0eJYSWPi&be}DoG z2(!SgRa6mf4EM=87#3;F*+vde#V>gS4tlT9G?yt0SL zU7|ahBP5ijsCfx@$RZtbJ#MCRvna$5X<6~kXp>hx42A#!fP)5b!0sHs=wuk^~F;+zmVf-4{D zS@Ep==|)g?td)3|V)n+?=oovivp+sTy13oo$U**eZ_&^soJyW55HsPI8Nm<8UKZu# z8rO~fv)3pQ2LjOqF=0>X>Sm4Cu5R?uD9`p9XV5hjX||WB-P4J!C5QWIU$p;=^=v}k z&Kx3iGgNDSkgg4X^j-pS&J!l46~{BV3i0g{3#8$Z1kV?q2I%ttU}K+NjM+}QM+%yx z6Mu2U3Ze&jkqRQo77@tv^XjT3{>T0+5EFLDe)35UJ8T$C$Q4P&#N(ar2M*q&5mC?9 zH&#;(GK2s{-qqVSY_lMe*sOCFzDvXd)!QHAK2*7^KXF2N7x@@l0>ewIcfQmu$g49c^EQiM{@u9-mA;hw7gf++&VTPEA=FqnV6sVrBwT4 z;=(%A30;~~eMys;OrrB&E=zWJ7?G=;^3vmA&x~zz$T>xf)!h2cGU5qM<@tU6Rts!!HOWTYW=HOwme{J`F04Tc($myVql~RB=+AK z?TR42DjA;=b_@lpzDQZxyjF`Fvtp51xa-()sWp~vYfh=M;@gLgC8kJ7nQ3+u{s&|f znEl^nHDJ7u=&nbZlTK2+KuC6GHAG@eh|%&ndz?wl=)E4AhS5r-b~8u@L~Qre#Ip8k z6kksLoGNlg%(oQ}LK)C4X7|sTw49Nxd99iBW}^;6M;V+lg2Y146K0#qi_<^%r6ce$}cPBn)Ibb))&OVg~PNG`M4Pd~;b<+e+x zUmnc>4*(UI3DZ*RwxLDrUuS<{I02&!8Y%gfkd4|xAt&lvln%Ol6d<=Dlz(Yy<27U5$#+WERn^7Z(A1i>_+hAZJqoXX$ENE9KSe4vmD!!k-W+K&@28=m7FkuT^-CR|hy zF|)P;=B}Yfg~lrISpI?Ng*RK|PC%gojer!0;#ptb1C7lrXl7D#V&<$fdbMe{EzYJL zKGs$5)Ec_dtk4AeVvGd^*k0iVqGDbO2niEO`2-1VL-DBI&S{oyRBE)L_1#=z(ZJBe zY649P$RWvRLxD4gLmFo@gIh7$6lC^oR>XTv*bp(&6_b_#h?pw(2k$~*HB0-muDe^DU~s0GU1A3rv!<+8~AV#pgA1< z1PX?4#^o}`x#DCVtQE7~j{mM^xEk0iqd`JtOoxTt%r#fY%(k0{&s+SBIFhaef&u#? zU0rVF;k3eaj3m)jLXgI&m^nYVcyKBg5a3mkf*7#$1obeo{IcYEieSn`2*>Ylm;V-N zrls-cg{RY{EBHx#Ot`p6%TxEawN9fJS!Pk{jzWX<(-Mw_U<<6{x{61Cr3uGctG^1( zTgR~vF{a`Hm?To#b(tYFus(@EeVHOec$-xsx(M$ka?C$^WahOQA4Gt=QAD|Xj~PR_ zKEf^u^KPM0lAxFjV&%)oE-v5OyTngsWx{E#{40fwkpk!}GeJWx{!hzenXS-?YoI7a zEy}mT#-)kgJ&Xd+A9#xQWjOjsXrnjx>7fH*U-bWR3>HuhdU#UNwutZ&Gh9o16Hq^r z&@Lz^G$`Pbn3OCRVEUw(VrI}+9&&9KfgxQjhwZeXB_0>3DcyK!&4O$Ib;q#|+K*_= z9kn@+e9yZ|Ad0S*I2g6c2BsW)Ju_}q?^3+RtV7OqhKrBIaZn4f6!nXDf&|IjU`Vw> zfrp6+1=)z)vvB-4G4MS_`RlSwe+7ksybi1PYjy{DA2Gs66<9HvQ$33`GZ3a-RM5>j_rL?I!&BgPLQ+QT;|FS0K=8 z&sbrUK`x~XgEOu=B3TvjlFT|stYNfD)}7Bm(2Dca6VX=w*#E{vIL z6M72bfoSBK2e7CE=b`V_L@a|OmC2&<$d*fp)FY&{GC~nf4vijJuD!i!K1V-hHNmtd z0KpVCkWq=O*tHFyv6rrf=dk#fLUyeZpQ*2^bfGm8lIrADB-d8WrG3mbZ(DSnncSD9 zSsFFU+{mkxk`|}fhxdRY;!#%qtYVH0w(Rn9)~J)yJBOp-0U!a^JN(pO$Iv;$54|NJ z$Wf5WE;4xroopfH6~th~)X*wuCKRv;Y@~@TGbaA^wK752V6{zJ52uj~VvR$4ifCzu zaX+oasOv2-C^AFCLvw6_Z*>q7!Y}t#M~!bu<&cTY{lk6c34Jtux=Usmryr385zV zx=j0_c>m?|*nE@v0bdZbK#a`S`v1jdHB5#EeWoQfX zHGy3Atf31jsqNmdtU_=w2dXHp94-k5vcQZQN>>-TP=cfAthA_uRj|qALkehxT$ww= zZZ=2Ta!+X6sR04u>>~*=G@-QqN>9zJ=|1^h@p0x>Q{2;S(us(N<^zk-XM#If73gYL zNnrV^;@LbC#HOZAUVt<`P{gUQ(3Bz9RZ~KkuPEN9&=kl_%9FjC{e^^c_+E`@Xp!$t zm`1*j_3}BjqUo&B=OfhoSXfb&m&@i@oxqJ@R%FgT1cx-Vh%QYwTCvX=;^ll@_(CbOsWyO+Z95A^ia?DcKq)imL4Wc23 zCyvI(3`f?(f7yC)LKR!V8SrrDR(y`z` zQ>ZcsRz1=XYtfo8GvPt2zRllhcDyuF)~#NJ0rJ?g*;8Y{7exbbi(P^A<0i0Jhm&armk!^_$`ALLCh@XdGQSfAve8Dx zDs7e2zxZm6*O+PGm7&unQf)9@TS zaE6JKPb9&J-6&;>^UDCG84oz0XQ5&w`z8DjC_S(Eq{Jr%q6Xh#@HnY7Gr$ab42wnf zdd@TG*j~Lj`#d^UxFCvqb-$NE3Ho2q8;1K__z44vUuuhP)ixgz%yFJQ5)?EHw2z#~ z3RrSP@G$@@2Bvyp`AwWnkg9q1b5VZJK2K<nZ!xRSSp&E~9AnkY`f1pzi z*oY3!wF<`Or^i^HwZG->^akznVUFAv(lw9v`GU?4hDX~u^T73EusUji-MdO-BMZ2LMJ83&&WzM)!{QuqauVUdqyqDU=7n|Cn$(LXN%PYv zb{g?h5V|Nogh8e7t62aI-6l#cq9Qvf?u`Mf6)2KmJGdi?5;xHq$~h+AI)P&~6|`x# zUswS$ac%a>m@FB9iW1Df)sr`6H#kT3ME9Om$vz&t!Af8v-NL0YG9t}60>3MnC{}T` zTOH27Z4h1p#Vv^L6hzm6=o<5+`FDUARNm$%z+--RNLPU%YG#W}N;XI#XwnscPC@lJ zy>z@#k$lbali-Mx$_y#fR;*I7&87|TRRW)cv=0r#BwSF`Oi`9YWnh_qrGaonmUY0K z@=Gu;6SZLZYyN=KI+x-iy5YRf%q5GS<)rGWM0th=nB{Nv#FOVVEGD&8LF<4#ZRCcE zS=FX)adrSh7I6n@B{2af%D;t9G&H@zZMxPEjJi;_fNDex9M*_5C($CEY-4gG728>d z`Xjbz+CcdRLk$W;|80=q4Yc1R7$U%61lAT>BRWKQ5gm($L~B`S3K5;Z7162D)@>@! zSle2L@G~jaB51?F0|n}(Z$r>Bo<;)C#&JBgrUB8GBbzBq8kW>22ZkFSi%C@ZAB@!lTE4A72#nrh&y9 zS-A2BUQ`^nalJgnnER~Y1+pnW5T3$t;d{jcaD*5M%-DWYO5c1FhpX(z?Qjw^8bo@` z>6KUxB8agrO{8f*42rlY{vcHvaa?3cO?Ix`A({<$hywV^%BpP)9Zq19Ks|rfH3!4r z`yOG?`2l}O=h`2NocH~q{2*hqIsaeCz`Gmn4@Hy^@397zO3LJ%Qsbz``pv!GtiR$$ zvcwk9lHz%wAJNLPg-KTFK6AC0#k_pN^HZ#7UQETkBgm=pzjcc@m|1Zd36_}-rhg__KjLEEY?ZFl~kUnFu|?$0Q0m)FQpo+B5nTfrN~0z8mGm zqQ@_q6f09m!%|+026pie6$lynrb3l0h}2032Go3Dz$%T_aU+3eBSCy2x{~4spM{`8 zQEumem)77#G&+robq{~tTg*GZgudd?2j3Z5Qh$E#b z;YbMi!ehRx?HKzVlJE zu4{khrA4YB^ICJIEDA5!LkAmoA9jQ48UQ@OzA<^C;iq6C6~olE89U=KnWEY4?Dy{- zTO-ZLKmgz7P)Gq`J<+%&?EQOzIl@ad8YvgMfDJ&_RS2=@SA(naPeZ zpsaDW7D|mpzzB=jDLa@QK?#EN8EAV0k`FkNcynMM$Nzy{;D*YLCC`N$PZ1lKiAk(U z;Z$(vCb~mDf*YF|Zb!o$@Az?ey>L%w!6VSUaQE<1Pmb~ZA^omk+t>eB>7WBriLD`y z_!ehKO_u>0n?)9QBP`0+*4dMC-jrsj{0^Pcv|?5@mcw?e2E-1$6jEF!Sq;?hsQw@o zh1059S8XDs`sybm?{|^SfG=Ijo&Ke{EMa{}mAxsd%^bvby0+TFk#=SR6`(Dci6^!) z+*Dl|Yy=Dz`;zl|ZBwlzLt&Zb>4FRhx7lsup8)~{ywm$G{~QF|>>7kgWR4GI!a*=d zI0^**T?@iQH7O7fv3Agvy#@r>+nGh((1k!C>WZv1x1qpbV9@&FRTuC<%mT56bm96z zIy)$Em*xM=4wSMm=$2pX(!&JUoxm?QTdkV7ZdL;Xl^QS~*y2oIz8)8@+}EE3y=m3# zC;1$_kY{s*I*=X6?pG>|(wBS25lWIW6yvBot+7DECN@x90@3CujnfU#Qt7rKi8Gaa z?wR+hCG$q*CCn2fKy%QZ zmcMbggo9W{;#i}q>;TyeDq?+$RTODAqa9vZ1Cr&y0L37ZtXuAqYGSd5BPl4rd08EN zV@(!(2BD0l*Fz;4peAfdly;?$>4m@?`ldv8d5|2_;?8LKWyQ6o^0j0BjZ~rRF8yK2 zVUfekZ`U=an$c>yS0dVo=AnPiB}jSzYK3g%bKhG0c}mJrc9@dM&isv9QF=A_>X!5NU(O;UT8^oh4ik$Bv1x@ez_Vm6AGf)YDTfS)WL z%yZ?PTxyvGlm6`4P-+lB5kqLcp)2!-K#H=u@flmt{TC;=d zD`=Q@lGxG;EtT(pEq3NRzym*3AAktb+D<%OB$!yT65Ve;zb>CwfTgL!uRO=IvdPra z7H`nkXL*0e%CbC3Hcgwp9>MUP5rRElVa_0UV&$-;MIL_Yta9~?cgclY3%zQF$L=^} z{qu{rdGFIOyY+v$H@9083yTSI8(D%6y8Ed51Q@M2T2ee$wlIlXuC&AAKeccya-EpA z0?RaoNBvJv(AYegsRiteU}_Afr{A+%O^7_jftENFXbeQ`NC^)(PSoxl**hzA+Et-O z0E{|=j@QzuYl`GSYzi8sB7Fi_KubQ#&b)-W_#yd)G3Di3d90)0+0hOBzM+vS^;u4$ zlYzp1HI(?UJm~^`&?il4UT<};8|njDGn`?GN3Cd_>KJbF9^U9ZG>qyrNF-^i!A2_O z%AB@Z=+K%e(RuTRi1>HNXgro-%_xOW;>Oe!na_!P`#T6-C;cmC0E;g2^X3R`{W7aTZZk3v>PTx98<@`*59M zJ?RXE@sV9G7CD^+u+m9If!DZeD;GI6@al3-mBF3N`J_MNQ5WS*wtww=l4NE1-M>4q<$k^ZE7i=| zzXv42kYm%dHqDjc{lxs%qkTRdY8LMbqFEAy!*=vkl8a$uGRZ=+JuoMbx#^GKC;n-| zh9guP!fHsCchL|JlK#f<*0Yqek1b4A8$~^nYIOHe;CRk~6Z2OdJyOj`xq&u|2Te-o zZLIiVEP$X{s{dCmMM%K2&DwubQZtqiX4f}7Yw!I8s)rPU3s2irBTrKZi+-OeErcDA zP)O~7x`>9;NMuH$Db^N$1@lJ}Jki34d&aH9Kp#QCHiZZVZ~M7TsBFWM=E0}+lHb3v ze5PjD#@QbtKM^JKR;-063p*91x+v|@hjt*gSa518KFc0Y^o7j^=)NGeIu%0nIz7Qh z><5XCMqIbVdz8;#Dj&lK!z|W_07pYHAm}9qTH|6s-1?}vmE%t>Ut`Kva8Bl~$e-zK z$pBRrRRnW0RC4r^DbnfdK# zDc5OP`I9m%s)cH6wQ;0bzUrDqhK_Wc{#>p<)nKcBb__O-3?Dt%Qf;cXly^m=hrKr9 z|4r)5VhuvdR>jtwy?RMgIVPv07w>u(a=82K}XxpOA+LX&87 zrs>oKVq>gB_!@H0rEj>?gtlaMYAt1w;T0wzQwlC~-O>(GF9zh~FQj2tU6sWDs`hXG zQu#I;|1JGZg8WuTwV{7T^J`PU!th3hG1xfY!LCrMYMgL5od8`ScKdTIf0`$MOfzLLvlY7RucV&qNrx{5}QWq$Bf7ef&E4Y`*wl7xtghp+4<~f zwejG5b!ecq)9J+%ueH^ekJ>tZGaSd^Z#((i%_T!Vjx)ZKbD!szqv`TtWT+8}Yz@7; z+e+MXff76OmDC|PW&x1t@V7W()r_dOYq=0$kWTXjQOJl=&whAWbf;$#VNlgE_L@-m zZZB-03Y>8=L0 zbalj*{2~H^fLmR+M3&>e^6diRBn4qf)m^nlAIW^a?)Lsp+QWx4hPTbwI~?~Km=EA{ zmLEf-oRP5Nb&gw|2kr0O_V=F5>ymh)o>uJPF>myzjc3lJ17n&e(}CvJytomu8M>&; zBv&&Jlz(MoJ{`&BF_8;ut|m(sZ)>t#_5My7(LD;|MiPncPdMrCSMB{H=e^&VpNxGx z%p$tBYHyMS)TnHOC&YtIF4dVy={OIf@;JzFeT9*M`=R_0CWQ1B zvVpMq?*5nu1;l8Bb&G?tn&L|r$c784InpJh=J>f)YR)5t5?N+*qvpm6xWZD(%(yPB z)f~^q)tqjy)lpMsP&+rE-`2KwPFo`9QAO8pZ7H}3#U>CIcdPH+3O=k?Kxp(okH7UA zMOv#obUA8_mP`$%5H38VWbtaFN&E?k-}cpn!9cJCsQ4*7H7!@US8aSi9pFDGG2m{_ zF|Y&zc)G)qt*K>wQD^}e*mhH34gnm9$MH%P&&)#i8pHw$2g1az)PU3;a9PH}$~7cT zyg1|MuilyVEph#sBSga<8>WA|2=U72OJ@5s*&L&yAG3&mUluV>IGU~?_dOaq|n zSqwvvBWR*Ynov@J)V{<_wHf^=3<*=Tsnh$In~N037f7Rd=-Pu1YGK&9d?G*M?$)5C z8EA~OMc0*_LNZK%Vl?0ih&Rr6U&|;Mm7L|N@a!AFZmXI)pgiG*eCMtdg+;kqk~|i( zqW*3*a=HFg`m;mAhu_j$-=di)LwevuHG^+HWb%fEG-8voDyVXc{@i+==CPm_Z}#f- z&F8`ZEmh7i~MMUAbMC=CnH@Mgu{A3N_oGvU3NmhFJt zPUv{{%!q82!|G>pL$nABqtZ_3LLAU#Ozg!*g;KGJ9_TCOsTaE1^fNQRPV>NmiBh&^ z=DV-b`~}IuH~@(}n_HiS<365MgZB~pd(!?soW`j*o;t)2+N#COd`AiyoFMCKoNzhT z_cp^hauah&p+XAFQR?eA&(`&g=Y8cm#vz&vWe zOo5t1ur;41%)+zD@pdo>@???lPLH5G#bqSDRRL_el)vawHEe$$jSxyJb_Cvo9_n!L zj(fFLEBc82MLkmaVXub$lSN!9donjPNf>E0c9hfvyG!u*m^CK#4aQ^KTOhR+xC1K{C2W0*mlQA$e&yYN&)0vFik)90>7G791N`W$58Z2(qy)t9r~l7CvBD$k7094( z2GgcoO6TnpvA3pxW(|kd1}O(X%|GktL1Hj>2s1bO0lPC`&@ibW%c|S>fS&|8 z^W8v-*ay>DHM4it1}_^BZ|?_-us*H zST%nEA;BA1>kMhNn78(Kg+MA&q$OLDi^rPIY^R${?Fd@tg_QzoN9nZcU8u$>Yv$1= zl8q5y&+W_~iH)o_(W^adcO@cXe!)hxDa(F}K~C)%Ovto9liYysh1BKiFbj|ZOOqgh zpd%b@WL7l~^jYAnn){V~EH;;|mxC)Gy(MqU;&9|Q4^%CXd=59Z#EosZu{FkxT+2Ku zmS9FT8tGy{#MFqhCEqo#rZM+oU(S`*_%y-;tFUw?lPzNuCQRMk9P>gxjnPnhA$)Pu zr+{ycgD5`#ZO#Ul4>$2h_&wRgLt<{nTX-DC8ntko7B*w)P#tp%y7E5xUqHaq8N3Zaz^Vig4&chD&AYA5d+Iii#Wq)Bn@r4Ln>o@L+7NPV!>84g*6PD@)3+L3 z5Ll2G&8y=%LASYTL&z49!M1H>N!Aa@%9UEMF-9M3O--@swAyTroB8C>-Ea^w0!5p5 zTX*;5waxu7f`}-BJw28~!?|JyWEnU$=fKR3;v}2mxLLf|Ku^5|0(bwIENE31WsB}m z)jj)`nAhZ5QVmAVsu3VYg*c%nuNFAYL=)o4jDrpJnMVt{GqR7_nJYM(I{<;73Yy7G zjzNbK$XYeUF-`cP4xeVU14@c_G*~Xxw+V*-FWWLXQi%0#TeFe-F%~9;tP}GC^U)d& zW4P=ZG|V%un}sVDS#*<+!Myw!pB}Qsctz6b*dRcA)^Rm2Y-vJ`aDb>M(~Aejxu>4* zAqk3Jk`u?2Uwr&O{{1hcukjvY+ zk3xhD#_QNw&13i-D?^?{i!*IA61=s1ejKBeGz5IyROe3G529F~qnBJS7t9@$3#>3O z#!mTPj6{_;52Z@CWe_oT+mhy5hUMpApNCkIs4&luz>$<08pn% z+u0x#z;q~2V_VUzEk%_-Bi@T^O1WeTWvXm`x%^D8__;>bUT$azUSo zhWJWT`A$V>FcYheR{m^}o3FSX9!yrv6Z2=&I|ozq%Xi&GmC0)AAV!Tw#HXSpvkdl@ zEyiN00|Hae{B&nE=>|7+F?7}yXvybku-K~w-n>7d0q51kO@OEuec8HI@c@0bIrycH zCgW@i-2Kv}F9q1D}&h4up0OMH}(~!yoewgGPx4e>Fe<^?@ zh#XS-nq*2B&k|839Dn%YjGQDpaq=L)2`5jkXwwY2I&59zAPak?qH7PM+`uE2Wz>k_ zecN@jzLoWFk|lenY0|@G5&U637d6Q1FOy+Rp2b!>i0fteONKF)*SQN*KREL}_py-i z-+KK-vBZQUY!$z<!7V*H*M*PHw`l3rkPj(G^MqVLhA^;gZal#ec8KGyi zvXpr&)l)6$h$RRVaP$ch@FHo(>EmzPkga!#I>(1zd4$0sf!Yb*vVeu$2|E@nk~=5X z$iZ#&X(#clr`&vb)63C{+%5R}p9)s#pp7^gOf;xt4<<|^Sx~g?`G6DQxk}h>_a}0U z4T+oQ$`Zx1v~Z~y73cl3B!hSHJ+Y1Ye780{R}Kq7LOvml|4@T4;Ip{hDiQAB`F8ma zY(#8NvWL+}Bj*m+a@oTYyXXt4)D2x(ha?dqe35$A#Bzx7W!p~2Dus7a6d7&1p9SH-?Q<>%|6OpQeDNN$8M*~K+o;WVx$3{0(e!b=y* zf9&a_&U+@=xr-JhJ|J2F<>ar4BOwPZbCbZqWjY!qiS^mq*~shJ(2jx8V7uoHmI3-; z>k;BLYQ%~1&@EHMTvZm2ZAkidk5Z~4O&|)s*MMi78{A$&EbmVUMTqQ~Sl48>{W5mQd+9WQ-0bX2oXLNMto4T#CEH|}upEdJMn|hnlO`96hs*D`vKGiNa6`Lr7b=3}kM!rZff#r`5-`(E| zTm&aXGed9$66>c^orHAU#`b1wJB5+M)f5yuF*|;PeDycv`6d%v>$~qtlL?Lq_E+r5 znb=(4s0CK#$0}`PXEoMFFLZ9uS`2qkH>qp=b^*HN*&?4O4cfuh!8WW82{(~|(yX^V zAmp5WixEII$;SGm+BQFZ6T)lTeB&4^oL!S!DNStM%aS0DLwveu$=hb#FWgrt$P7%a&ZCaU4unCoy(Hl{q}^Sb<8kOzwHk}`RriQ zb&O4nY=rhJXUqT0)^&Yhex3T3tGcN#Ioz9ob>d~U4$_^Rw)PB_0tU%I7pT9U#!ffj zLyu6YEQ=#Hit=&Ckrb}J&%O1#*_SK6(|LQlCCu!)z@(&}R9iJ6TR}&p^M<%Yw|uIH zW=AwE3_AUqhYg*Mp!bui~(R@?m-wB0K66ehzF1_NKJ%x4N_N<>S|JU zzjZaKt|rwaX91XxT0j2>KD;{Yk^beAX^84UvfxeXMtALM8oFpt@EOy3BD)3`qj^5- zThojH)K<-PS4gTMY}ymjta3XTj-+3EA|XemN>INu&@)s6UTWPWfUyB;#f0hWvWrqv zR-HyU9Vum=BocZgALtc*tZ73B+O4U8pTnV6$YfI4n4k6)$+u9VS8aj*p#YKDIvEJ) zS5f|8eN_%^mD~n6O+azIFxM3dm=p{M`~a}TB>6lf#5PJS37+our=+?z40n3MVmO;d zL8L5>)XT-%LmWe7XhJ5^j-#1^yVW^vU9}DYq%AqHM8`inFl8Ttglv&BPymnD%gRuEt8jvl&;Q|pn@&AicSce=e|VsdJ_T(^E`ROsMC z85N1S0bJqCM|)%J)r&Hv%3tsmDlOeB!x{Pif)h_*n6}Q?=R_0p<;okO zWzs}of|0fa`}4gOz9Z5*eCUCw&k}P3-=E&3?592rn%v?rZ1il^e86&$qq2o|Lhtnh zh13>fZ7~FFkW-nXf{*}d@uR+BWhL|c%sGLmFalBk)rL-lBJi$f3dgO;OIpdUV-d0Z z6tMyr5NIjFL$S7As@z$&(wR7=a&BIRWeyP-`r_t%J&_^X+i{Y;w-fkMXbC*F3|{`w z0CkAUMM|v;XD9op=6eU}hx%JVivWrWcU}02ss08D{=25a$`o%%OdYKEVa0-%N+W$u9k9HrL-o96&H08c2?j~@VqMv#CAoa;s>qkfXvGK0ad7# zh~SEisGLu>t7zE3xJw z3_%C6K~x>_Bd50`w}ktDPz1AQ77IJ9aQZtEqWh!RtT=OhGN9=?XDOq5n?y$&x}tY= zs^?O}Y_-NCHow2;I0UHI4=|0WF?luSE$Ew8a>Hc8@TQa!*_ewAHupV!IVCnb3Z!6d zDy%@AMHvy=7|KEDX`=sBwutpk*N37HPe*_9N=7(+O}$XZEg=*Vmj*oJa{9X2{ua95 z3~D#1>B|%>*>W%8q4Zwb#n@t$3{jJrR$Go&>FX$TERy;9IrQ3M_`Ns!CK4zHlH>_w0ZHa>q*wvrunZ4hw1?D3ysxQU2p?0f zHErONf#eq4J+|l%c;w*09tzD23$e5MqUB_V%HjR03`IXulZGev4W?&b4n-C6jjm<$ zEz4J6M-U7)ISdHHxQ0m(P{}v)f=E2D1s*J9xlYgdu|exiY!E+Dt;c5^v=)PoT+$rK zb7p-&uJU>c1Rd1{E0Wc*2oE&%TxG&#;rVKI&#af6lDr&si%%;Y@C?nW5dcaWbs^8} zkh*i!;BJ(e<|&%Tvg)Z8;brW!DsNVhFS@p$*Hul9X5rB$DbYBj2wa}%|Yk_0T0O?Pec=Qf%`hk1o zS=Q)r`Hz&Z(K2X3mutpIE7W`DXfg~5Mi3>A5E)8UjANrl8!AUrU+nQgVaNe})Ho&z zf!`9}slA)QtX~N0YmaRTiklMR6%yf#7+{Gq%3zaTgk1DMR*;cN^q6(WzuF4g04r?M zw|hf($ztCSWx;%h34zjz;&%63e+!edWq5lZa?{B`Q$1w@RcMnmt+ssNI3iU9V}f+c z2P9wDyAdT#eJ(SdgKxK?2w1HP>4$>nb}RzZJgqibN}W z8O<}oh>|4vK`>!5NZY;PV3f{!qRa!-e`gU}CeDR~O(sILPJm70s`5R`e$$7-)PKWS zeTwrH%#szW>s*G&>XnRg7KB^%TWEd}%OpDT#BBV9rrxRzr(R*#wx(XzCTS^{_q}4L z6rL?@)xM>UzXe|9(c7O6i@~@^#XC|$*=yFV<%qlw7oB4!(1#e|a^khf71U_+l`Kf! z!$W|(JJlMOt!=-8pI>K@=~BNXF_??@D}24nF5j)o8^M=-dAtG4dHB_4__b#F_r1Pa zvsG-IqYvt+L@hDhsFQ&4&+Mej0U;2rgY#$mpe;Gef)pQ+Zb6^QrL4cUrz(=UcA6q~ zICZ^}@S=&_`;Z1_Ym-7D=-><;zAfVkPcvWSW4VEolU4^%w_=5f{>9^!d2}tO zzyba(v`I@LRUAF%99_CQ`{CR^6rJMVHo|{oYVz=HinBq5oWAom-&CxHeqM3z5b1Oh zTH;-Gse?M;oDvER+kOmFXkQ>om*jIaMrtMqv&HU}R0Ucb{u2QN6GlP?r)(<4O7t~X zoo(cO3{tH_w8ES#Os~Nb@m5N6m>or#PF)`^z9#`2S`Kj~$BhVRLa8LLIRWzsF5mjWn8=hF)UA)=l>p(sQi|buo)#m zZ7QBb0JT(cxZ;|~fqsM&_so%;Ga9nFe7mhAcLHSkZBx(O!PB^ z%myk|A-J8SZAcfZ=;}j*5-F-jvMd2?d`xNpA~eo}b-s6!aPVYLp>e&@pS7c`2ofrI zsbgoA3IcF84>1yngr=X&*6o<=lCw`MKEFCq@dJBkk&>g!beSR*a4#7pnKj~LwU?_s zOYh{iuwdhGv4(TlkL2cD7;9GHW$ooUSG0O86w3Ky4qs#w|MwkC`{poV= zf9%)aHX2Ez*-gD5xoj$wfn^qMbs~e}=;5*CngL%xO2c713@+?Uo$&&nuM6aeCo8~A zq?BXzBIC!be9SbaTk@+$)eE#%N03J=eV~F|4;GAP*@ycnZPe!36q$Y^jH&P$#bc@o?3c@uFp2OWCVKcFwlgV22xd zN2d5=OWLsF^%t2LTm;<)|M^z^yf}TH)@)SAXcwOPFQSsQ)g|eTo<%jCp_pQhd9dIN zb(tuj5&jyQfOcqwgX*e|mLXeyJ796e*2%~256dGq{zQ(UQPh;e0yKrHnWm!JQ>ZXp z);EGo2X-b+VJ~DlVyO?eQP)&-(py?_^ltzi?bChY4CSX9>4|V395%k5H@-#RT+)c!5{XbwO zf~~yPV%C*SZgN;?;36q;GVKQSGm~EIFDn8-n()SzcjtwRiA$Ww~1}vU; z!lB4J4luI_NF!{%Ei?}V5*QwTYjXh$Rtr5fg$y`T+s93oCx;*pno62tafNfql5cA8 zYS0E>#KCunt;~}T$3z?(kOD)L9W-=o{9t3_(IemNz-c+9h0QmcY#O6`dZdeIj?5Yx z@XK&lxJ1?bvgYq1Oqem3^Bl8)s@kB`(v5dj8xL7ZJ)SN$H=B@E^?cpbrREg-g5<1Q z1_O&6SpIe-70Q1`${&90vJO5|zN@&LSLg-5HLupq1lyiKRkEewxbPeq5eqboRWazW zh5#w8^JCt1{PQH#j&-x&&*PmW!1r9al|HjBWrIz~C&~9=8~O*ywLqz6D$K?}<_#LzZ@o($A#Ho5urzfVhf+XE zA4XJy0u7clMLUytvhmFi8Ds)MFq;urS@1Vq$p8?)=K-$Is7I(Lte&8532GL6By_%E zoYOy5$GVlu<-enXJi3aN=)HUPjgTFO-~^JI+fyRuo=c; z5*PJ}lwnC+ypN}B_KZ8AoCu(!i)5k8bI|}uOPa>EpPp4w%irnox$$a(KVq0=Jznp= zuaa|HI@kif&2h2yJ6*h1X^^QLCZaVw7ZI;yWW?$WQEn9ivSrkB@c;jwjtNDxv}^N4_B6#!pes^YCMkt z2OUS+@0W4My{`mhX5a>o&+tGY{qzSu|gIbN^k*Xr_Q{z}u8-7WjAnY>$ikvVLSayn@P)iV} zmXjY*q=)5Kdd08oOuNhB$uqVD+n6h#?qREiKY9XRjxj24?$i@)z7UF@uPwOxw@Shj z+Rhj5e%zK!vrzJ=SO`z%Ui?dC2$k;^D_xRRg(U zl?z;GecOi*ph~9EE|hV&%IyOHni!&Q^23QIGW!e+ho!HHv9|a_j<|L|KqZOD3(2P^ z3IsI6Jq~3q<%XCPFr+I7XiQ*GesSN@t%N#8P$_|G4OH!MsL~&2CogywT*Oud7c$D> zqPrTFroy<^Do`sNY9Og^^7$p672C_nJ`;vf)R1LA5iuHQlBlZoV1ZkM_o_ho+6{PTp zz4&Ay!E$KX_KovHliRU;yA8Zm_TqR}Ck`Ow|dW)3yq>1-5<_@GjcErXoZnEB0&_DMrj9nG$O>r7FZGgObqAA0Ae^JJWMB>&I#7A zcn?F^Pjy5WvXL}SxV9!VMdYWN(Om1$9Q~zhRcBZkHV|Hb;K$@b zukba=s(Hg?D?IXqH&5TIehJgqxNn#gDA{$Bv>KJK@nEfMYsgZnKK4YrpE#8u_bS^_ z51kq^7Km;@M`x;;;&g)|UEU6v}|c46nP6I8k9jc)0MDkX&>`ky2NEoO-LMT+~A9EUf|CnIXcdTpR zSj#&CT^oA(i9O}D>I+c@1wU1GgYLi&ONdSOka4SsT!L(9cw5#elNu*h*fAmaQR}@j zdgIz8W3;3$G^dUXF(x8l&;TL!1l`DNs>|b%z(iPpH7fzbGduCc01BU{7nA$Yi9HS{ zp=_45lJM`ja8plrPXMi86e-E-NzK?nc04ST%(*XolxyciNQE(lO75evPAlwSWhCII zED{A7Xe}-Bkx`Ls4$W}3Q!oFYjH-(U)OcrIRuofwBeBi|e%m<`Q zDt6qilRJeP{2jM^{cB0JO@b3qCHn_$0|q;VF|`dC>)5Ckdrs;p!^VK{%*IIE#()+f z2)9#}nP6%?Gp@#lkQ$fGAc}3spcu%e94O;k8ei5Tvny*cbilYBaf6idP1{C`Ztxo< z>;u$r$Sk7>pA`uB=_4)5(ur8ZI5(;|qIpJ#riZ^N6__ikw_D_spkHBRFwY%7%u!@r zuo5MN62fX73LZ!T5XnlSDlwKEf-IYhGLalnxYC$jt&j0JVFL4-q#I1G$iQ=>!Yj%A zw83Bp)K<`Wl|U88;iw_a8-X%?Hah2vZL;SzN2Cq$bVBDiaqra11NkVmYZ~cQZUNL< zdj^c%tYM5Y<|4N4{tmiSLd2TEAdt;WI+mBB8=lXQV!{EBW_xi9CCJrjneCP2b7(i{ z1Q!z9i*BquET>N(_5fh$dxn+NV^ZZY zZwJVux5E|Qj(vWTp_sShU^7e`8uCVsV;t z)WSoO+^GxZK1X_R7D_EW#I5H`kMn#OxmHk#j&b5AMile|{YEK*w|N06(sU;T;&Uei z{6b4(Qbgw+ng8tJ-&%^m=bS_}Xbq(Z$Tum1gcQplD#xS<&6^Zyx)cFrk|IU|nz)e^ zX-bNS1dt+>LYzp7*d&sX00kyM5ZS!Frxs6gj@`s210t%JV!d)#kM1t`(SF#^) zfX&u7TJvd%v?e#z9p`g26_Fh@l_j!^1nKoWO_c(q$clITOh9tLs-HLsIK0gNkk-p z7H>;^50o-;E=_71e&m9Mw$`AIu z2fzCz?${$uUY=~6@J5b{`QRr%*yIzrJdUmdue1zR{Mtm?(S9N5)tbF5LAEZTwTAIh zHG)mdk7vt^hA>@SE{N7-;*!*$oedDM_-BBJkw?oElTn0&XwT;Kf34*#UPj@GKJ-+R zr)tB+j5X8SfPMg;p^5Y z#|&=)ErjH-@-`5(klj;3RDmHPhQ}R+Tb0y?e$Da9%t6;H@n{tDLXxu{B22Y_BuXV0 zK*$Z*7^nu9J;1dcMOe!oVrfVS$sQXJXgyb%HOG`0NwP!n0}q-qGeL>?QEr~(q=_FN zJ*|Rir*MiRejG_a;x9<*6ff(AeH6_HjN%gg`s6_I^jeP`!Fbwk|6oZ;{OV4eXaTs|0y@7@@Z~0lnto8b z7bmQ>Q^nj-4Vwq-nA>EHtfe%k3a7NOSQC_1$C^wIeM6Ln;eZKo9z~4?ilb&U6b&N4 zI**1-e?1c#!U>2p}?gNwt|4i>TXvCjeIG@TC{?&&0vA$+71$AX&qpeH^qD#SQb;3<3h04$G257 z(##-^s8PTcQ6MwOH54pwW)N$i%$I8@%Bz%O;xdB_^-akli&U3tyy9E)!G@mWQQ1Mi zv?Llg446XdP>^u~2`jZSB;XWGJdor%%;p7yiacPLkbgj>I2y^rBy{uqA{wmtP$wiwL$lZ|+ZKjKl@L_kVH>rglrulhqkgC|MR=7|bHOG>3buLK6oGlBCdK3hDlh_3 zL_z0{9+FT}-&^HFP!h3ffKauDaKS$0X1kuzhyh2lNHrrS^EgC$xH6*dtRAtI9bb4s zj5PR%JQ=t_OJJ{~`2t4rDTPdaw5^8{#4CW9@7b9z!-LKM>2;o*?F<#T zi#N9%0o#~_YFqlsdm(H!=3AnyWK_jcyr$gO@+~_#kdTwWhYY0EQSVkB{ibC$zmLA9 z?E#OgDnO(>8*hKRM(jMl#y0DoiTOH)~zT?*{L4Yv0Wib5s)C1)f3dK zMgbH?o(xUCCB@OYK01j~8?$^%e^IzE5a+X3&!7}u;;Uv}&0!{PSPZhaeAyE_0f2?q&-)aD_+$P!yFp%+3N2pu@@ z`dLqWAhSYUJXoY{#0OEGXhX`KVam*qH1h%qFxvms~SRF@Btl&+qtG)2af|t-*eBt#X#-f>i zW8pAD@`jBO4u%tbA!CtEMd#a!*5+8W>;i2nkQh;`R0UBWww(#FAsKNiHF~}XTSG=` zXJ%w7!nvX=Yh*25)u!UbmnCac@tM<=$Xz+Ey=d)QDt2N{n_GEe%OVq99T}S3W~L8=8u7#t1F=8X+_1F$})T zSX+vDK+>3{czz5+UrvxJz+9411)ang^Mu5J7>sUt2vt2t;pw5FI0|88ZYUz7JX{7! zt*Re2sh~lvG}Z>)31}&6*7FcN=-xCl5m_RHBh%m}!KX+D&6}N=#f5!|_S#M~DKCh+WKIXT#5X}+5__PU8v$=)Sj<3 z(=d;p-jh)^9$%jpf7{I(hwYfsGc2j~NZMQTXlsJ`Zt zIX70#y;`c2d+=&9WEGEDu`e_q8Vo;mNx7S<@w->eO8K*BFjk(H#_nEajb`ylbwt*B zJg0W=nr?1fbLZ6>W7T8?qj1NXzDpmwjraQeB(sDyeHTBCyW(SpuuQQ*mwb$Q;gJhF z*cf+hZA+k@*6s7TygQ=P+pM`eG2&_PPTSxCN%p1#|Q85LI2s!+E)A(udgRZ;#FclzEDf56Aie2-@2#1We3=5mFZ+GBvQ zoUXnhdXX=u9?=gM&>ASbiw4^e0rLqu4WS~2+4ox^#B>09Pv3=Gr8(z0pE%mj7`=r^$a@mg=O+e@qtMYRB7X4%aEoypM@1y?sW+@|I2WHv5&GHT zz|Kps20y);g=In~{vRI{AII`dYh(?Aj;>T=cz84t=T45X_ZgNry=je1u^Q9?UkD8e z7V{|>#hvw0_3WGH_BHzRs#)G6?14BF!RB{qV*LIl-M{wYrQEw&je}b@-n+oyYGQOy z$M53cYD8#U7ste_>$H#N_@J^lsIuAvrN~hJ?rt2nhPFnz@WuaE*sjRDysB&V~=5QTS*v{KU#(1s?3% z^o!w+mBVbVM`G?Bwhamx{N&iA-dK&_ou|$0OMCfVIv>Ygt?q>C8){RgJoa~hyNR(Lj`TUN-kZEgb=Rbm=W0)L6OVA}{IEW(WeV{k z%}>@7;-AM|W%XC#6aDM$Wgl?VENy9)_E5957f}^_*7A{zX|xY%icyD?t26ZdLz}2E z5Wrz6d)d?z+v=#Tj<uh1G#??G-K)y3TzU#vf(dO#lQp25E7 zf!9B#`r44z45xWcl_ybrR`*PLeq9bnAJu&<9oAj-x_pe&>z=wm-IL>W9~sp>&U1iM z-w)UIPg;FG6)-krisc|@e7MNp5jYQ`=6B}D*-)$Bds3;m0{Kqk=}jjN4q;tM7v@v2 zIckW5c$5kVJ04cmHxAY_3>~z@cd63BbR5%)!E_L=`@7F4hXxxkwCSNYHg|l%^5|f* zo;MB;h_UK+Mz?HksW#kng1=MfT$;UIZLSx7t7-loJa|xJU9Yl}hY!+qNjZ+ z*c&HVK1Jbizec})d*y1oR7OB`^hlyn- zk(sh1n@9a%>j3JosomDpt=7~nz&dOS@kUcv+A}oQJEW7;O>*l{l?#caRNt*`xh+(P z5PBj6tkil?SKe8*%!C0_O}GGTg?BD@S(Dddq1*oZ+;zVEFt$WohH%NLtlfyi&F>a(VaFi;@@0LNPE41&D7gil= z!2cr+73*NlSRG>Cx@veGDpRMLK*@|5R}-?@AQEjND^8_&rgriWIRH9=g`-HDHC46m z#5hYN4*0akym*9R>$p{{s%iaZI=Y;J&aXU~9PDc}FFk6@ANHJP%w?D}~fW;HE%d3P>MkUxNwW$LNmhYrznYfK38j{kw z7|~rR(U>%TKqqHJ8h}1EId8dX=1J+Ctn5unKh91FiXRzd;ZL1j*grT1MR?yzN->e) z!3di=7Q^UlEcwS&s9`gESnK+L@go+oxP(9foty{7|I6OnfLT^n_n!OXoT^i`PgU*e zZn_(~L-skrn^wD%&K(3pn8(^Zf+%s~Joy;sPVNleCo^-W3X?$8$@5&K3vH!EJ{ly7 zfQpDVm^Kn)0xD{2&=6@27m2n?6s1+rHlkuA5pjP1wcfqYKK0erh{oJ&7o4-te!thd z-u3macfH8GGz^Xw@&Ch4{?GrBX;j=0w6N{i+ZJpG?I3>3Y}3E;NSSU9_7lcN(2vHRoWm0Wipwu&}gA1p|;ObQK)a!7XpU!EaZtk|vV z9BWx_v2e!@%~1$vUl-vZ?()ab&UX z`PGa;Z=Sb=WCwXo3)$uf)Vqvf1Hq1Ps_bf+oOlK(LR~YaBOs^r1F`B{CNn%Pmy0 zSAhNJBYz;nld)B7q?6)}suEpX#FjY4h#(5ecMOS$4`TRaH5m*zVzDHT3NVr0)5Lm8 zMLf_lZFoh~CM``F`=5e;xa43xH}S!Udy5gTqousqU@duRBm>8+{n5*vWGnujhuxfn z%Rx_I?6Mq)=c;9X82f|bPx6CMz(AA-II`GoFl;P^=@lb~FPGxONc@}(hC3KDo@7QT zj=#)E&5r3KXIqRp!%mf>W6T@C5YxgQWlaK)p1w;0hMo$2^gpA=f&F4Ggj4+eSS3_TLfl|S%9mpd@`L_1D3 zOAmn-Nr9y&GrUu;^$+S0?YJOxsPi98u!zrd_T|c-(mJ{>L_jYR(wJ(S1FzwSqramd zS@5cN6zO@)km|>pBRihp8++NRC)MDwiqeZI&1kE9?84Y>p5c|cs(}=U%ml{bcqS4O zEc-bo#zZbom_X<~@&50Rb}5WjB0DKEsgPVf0pBH_iow$f0lSZ|1WY1&3erDI?{a;Z zjqe-;{swrY1rNa|0$1(i3)uqP96ltxyg(LcDr$ ziAYt^t`BDSrU(Oep(4}XvWyOJrhSy252n4dx1W|5Kqt!|*yh;ij$?Q41vQultvR1% zvjTU1%dNqkz`;eBOj1GGQ1VG$IFf?bh&^FL&w*^%fxkIM1-V|zdGi7ufn z{BLeeIJ&6H$tQ)%`+cio_F;} zpXZZft3cx?KBvK9A$&%|`^E49HWX|j(biD%+umB$^s*hMEc0yKrR9bfor^Qh2eS8e z@qcg;RdY-4*@)AOm7mlcmUq1x8_Oka)&`!vf0AuUBF8!WEHKQK|1z0>XdFb-sH5`k z`1e^JcgMu1CU9U!1o*~sUmPMe;n~6q#V64GMP*y4lFYDukbpN((Ya%?cfS&aP4K=JG4UDS5`>-+6rlhS4hKzv20%+St0GQ z71CZNZQF@4tKv8fyrazvf>@mrO{%{9wYcs%Q^EQIL2n_?(USRiz(^p>vB*9~ zJ3`q&;dNXV9ugDDM!G9LAy^smt1?|k4zcH_TyCjZu}`)C=oXeBnbMUp`a`>~%Ov*3 z1tLiD;tcr#&oF-T@$9U{Lw3B_6z8_#w{kMsPAO%f{EX;EgkdWW@M*qSAM!yi%)e)D@x$XJ-?6`2NugTkF zk%h}-_mFyP?3deOLxMr4GYRamXmd#s4|JVaFZv>8#XrK{xQojuD9ab;bn*HK0M`jrlvo3O zTL8y5Ua;0uqk0B01ZaCnXE#bCvlv+ONNy;#j6YJtn>j21^#%lq6lzwycs>jDTo;?Lk~C_k_AcM%lHgU@(-JUk|eJHvbE$ANItG;-(w&QlaNx+R-R#$0VNrl^~Fmz&*bu z%Wt(%v90_)*>Oe=Jcn8vYN#B^-wO~Iyv^U2fxc4sIMQGl0yT-Ub8AI824#mp%+zW8 z>SUCEG&_!d#oHpgq-bHj{5B$JAe0VQP{!7lYRLbFUMZdc#sMvW@}A2(`GZ}%%zJnQ zv}&$-o(+mc?kwjce*-6L`5^MwA6X*Pn7=>Uj~`mB$W8>Z$C(Y^I-a4gq!t9lj-G|5 zM`p;R{2vhYs+S%6bm!(bbZxOfQBJE9gtn}*>?x|6A6@7-Uv}7(u27RN!zl(87Tk#| zWECwTD;)}}v??U(i%(&;!M=BBzOi3e_4)LZqwMPPe85?heD6&Xq4c2V!;u ze1xbmfH=_D-_eISvT6c^g8`;Sf?LedY#^$Wxq`Y@&HAnT6&2tu?m-XrG=?cgXw%{ zm&8m+GNb-;Y_PfLnOh^SixOBSODB-CoX5jwxzvpV{9jb5F9OHrD=#yof4;k29zbAa zcI3+MOhYS>Fn?NZ&T;Bj=CId=Nk zvAED{May8=5PH5g!#XG*!zT0-0ExznI*2rhjfgS}j+Td&oqx~)V@CzE>;*$?PUu6A zoj~Zvw#a->6Oe-U@6Kp7&hJEm$v@`RG;u1>2$h3IfPY3JjGTjwmXkYar(2QBB#&IS zluYu8A(^C^XL*_A&H+nYAZ3IVzoL|Zu=O|ujk`qyfVW7$iGWO}KMMMmMCt;`0}5Db zN0F$E9GzWS@Tg^qPi6>w%)HAGG-A_F)wLk8m1Y81mk}g%5dne(n33Hw0MbBiu=^rO z-iU#puYue^iBR)EXfU&dcYYu=5VJ$@bGgAqwjsH}>b2kjRM~Ik1~*05!%U@y2f_n2 zE7Xp{hBSnSG<$y_oXC(X@HK2AFc_por#s&JfoQ-o8G7Xc!NOPhr=UCVY0;fz<_Tnx z2b@J3?|YMY-BQT~44U19})qhhRh^J+P%p5fkIokplnjW|s{V zGuwC0AIvm+^i4u&{t&Q8^NSSACO^z`OuE_q83_R;w4D$?IkA@5;?7?!9*Sx=rDenY zQ2E7XAcRxfIir>igGQ<%1^_yF6btD2*HCT9ZxqZpx}Cp(NZWd{Lk`aAdBM>Iy->VH zzBbm92UsuoWL+w>C7B1sb2<}hE8+XNY?fm3a{GPNzr%F&k?-_hd_qjR#? z3rO^sLFJcq8~Q4u{r99rVg4k!m0zwXz^JDJ1ScRwoJ>}2#2c*du z=l?XJu15J+$%i`{^Z#~kYfv5V=lpvUK*w-_GEyTA9V(?S&~3_6(JQC2Y!XbRFe(#F za}z%ePhCkp$EARKeO*_&A4s}cvgSP+5CyNgTr94!0=6VG7E2*6Zy`kr7z`KwEurgS z=@Zrl)ktJT;LE?8Vj zIYxlm>uS_yR=kg~QMLR#B57*(i|u$M5DBVHX4DVBgd|05P>X5H&)?ORlaj6+1o4PUtI4RpDp-6=yRRFhK!&6PsPaa(P#`aARN*S#n>N0gkeZl%2pk>;ZazBE=%E zMLwPFCQ`Nl8s47Dzzj52#vmpHZvctD6w#BDGftKfi(ZwiT0P8!5!#Pu_K6@xg_eV{ z=|m%0tVzu2dR?ekdBOk!yt9s-s^$rGt7K4d_M(Bvmh^MS4#66O2Zs`}3nVBqykP+x4wT?>_HR7wNpVXsKoH!aflw&?j~ZUF$| z{nmYmu5d(ZfCl8bHLfC-VXTNb0=6@|pf$8AgLL4{Zi{|5RB0o&F?+X8>?ho{tWK~f z9jhZXD)_Um!0kDfu6%;*_0zTNlzwWJVm%TR4+;1scWkj}$*@kgT!^duGi{)@ej$?! z*0Go4eHaYlcK&6bM@*U2^DJYFjqdTTWCm13>987o&*b0aBpb153|aK1Fwvp}{p{vQ z-aIpKC7UO^QV>x{G*G!KggY^y;}49u(||ZDaSan znQyPGtF32Qja*Af_pJ%_Vq>6_08T&G%>fGr}%hmg*n5IPbD*YYb&@_M!#Mp_ybwIDN`Ci z7UTsd32wVL%r7nY2e-<|)~`3JLQDA_=kGu?EV&Aq&ObP&B|pey?a$uo~qsvOI1f4@#Qhns@-o!g@gnyoL03nD-a9vJ84 zeWg5O)`^UEq^ae9rt`}J-b{A#!N_DIdO4!Jev?qf67HbN@Ls*Lb|k#ZZe6{ z5Ch^V`F>8f*7QH_~@1eAI&X3A+8B8uL!ewDduGF4I?D?}9a(m&0j0d|wFCaXxz3NB4p_$AA&GO27BJ)=oQ&-~r>TdR6o4Z=*h{jo>P0~i|xm<-NJY$Y=5+$J-VBke^CSphC6}B*M)G@Nu6J$ji^VbL4%=ikNzuUnB-vi5Yk1k(!&t7B{7JmMK*=|Q4p^X%7dfsiY>={hLBs# z990Zw;*Ek2X#%xxk%l-C3eLh@OPCv^7f_(q5J+wwx}H^wHUbrS^ORX%43b7~e7Ryo-)a;}vm-tcvx(SL52Djl z-0Th*o3d#Z1!HC9@!w`PN){Erch$wWs`!m@?cQKgSANfUFKGxcphm+OmsG~M#Eo%g z+;9nH8Dm^)p)oEoW1LocBFd18)42e)_nS}ofKvNpYMMie4X#*09K{}=x*u7Df3}sE-+`sn5&G45S-t3ba^O1 zH6~-a?eiXStDU*0kOI-Rtl@im_&$|yrqr3sTaCFqgIU!SSN2!`)rEb&?7I2+`w;y^ zo#WGN1h|tzE4Jvqd28*a$?SD8#yZ4=gtdd@CRWOd{dJB|k*U0xSzHIq@fEkla!E2fBgXEl$cUY{k=~ zCv_wHi&$p)pnCs0@U#2frOD{VGE`h+DCs#8zyvGpjq=q&4Ap?K?y5cZ`6JVD@`Iw; zG+>*RKtbL%DS=)hDA zpj+Q|YhlxcyRK@Nw_eq*ZeAlq;%*l@GnYzm#elQj2OA(k>`C-xQ^54T@m??aA=Pxp! zU1M*lj)I8FkDOhO%)Ll=GSgQYjzuzG(uax7F{^2L+>2+=Ek{)cTg+l3cI$m&Ju8{^ z(6$jryDV;7lqe%DKf_v98|?C(Yt3prWm=a)ZH)YGxNT8tr4lOz+n3s=L8%WTFOn-* zj`t0M0j5(>I@SP>Y9-CiifHv!I$F@%mTY&#b$ytyt+~iH^NoEozs&Dvh3xeow zS{jLNo)o`}=JG$4(bpG@Eerve$wllC<_Xyn`Gn=Lf(UBB_5*b`Y80YUBp@mfVlvsO zv4Sj~gG4^k#tp0ce}-4=1nE!`kfOz~Z1ofxY;{dv3W+C+bx=D!^oFUin=uLOMc<+A zq^IuP;x$oEqb506uuqiV*fm`jM!H$&5EA!6$0rRCL3`%Y+BSyi1GvJg&+6gZUBi|A zc;E`@2yhiJ89GZ&=Zf^Cq~`@vL)2IO%Iq^lE-0paT!9O8IRkArXQ4 z1`4<+n2beAvCnnfM8$*|LGc#6K{&9t04AsfAu~`hfKm7a_7&I!2o;i;0u&J>*N=mUK&d!tVkk zk;&SMoS-jsx>KU9VT9Q)8wrzP|1V6yFAunvWxh(9zOd64Se06QVkEz!ZG`h90 zcXu^B|}Q8_Z$oWN+40YKQx682z@=85%snCgEv%+**!__`OY$ zV@IPaG9{XEVz4yhTp~pQYN&CY5@E@cx9oP%FPTxsr-h9cU0-8FugGu01r@XdeG!bM zH!=<8A(?EAHsV!d2fd6B=>R*w6uq#`Oa8_aGwnHPT>}Dw}!2|C3Ge0e~^I-XF zmEsJT%qkdSu1>Oz=M-7Rsb6!7>&}X6+3xrs7P zIw0b>@swzTU@3s4fDA4|pUEX#wA$9K*YZU&Al=wCQVUTsRUHs*AguzIp6y%`go_>} zPGr+c>u0vF70++5Bt#nR#4=Z!bj`Bb*^XeO*SHcgvmmFfhJhm{!^m0UQ}Q;I3?v;fpVSO=xm(UU3-`Rz~P#vkbJmf z>q<>iipo3^$uv}uK@y3$B@LviyTxx~ObnL|7@?pqWN93lFKhv}ezht$0No+jYO!g7 zS{7TZ$SiCZv7n?h+whSyWp)8$Xw!iB%`rMiTdW*fJu^@a4Ox6yt$|xrR<3tY2C9QT zl3lV86VTlC31}4*t4}oP^(|d#e~vLnL$B}XW(tCkTDmoCw+oGqNUu}TKHV{| zk@p#f=@#HdzRxbcN>DHaVtyjswuM8cN{wKUsA#){ZY>_8?b4o1-7~_jUpP`YuWQ#bSfVNyQuSnrs*6a7ALzrVx@0hZ zLW<;mvudgyZZ8DU#8$w7imDUy8pZ_;T9&G-ZBcax&jOMTaMo2&T4!StWze|nP;OEY zb5P-$A1^V#b4g;(0$fDPjV=C^(efY0&2y|n8pS}5mK`EHjo9l@+@QZL)H9T1-Yao! zoH&j75Qj}>Kw8t)u)Bc*CLMo2i0hD7nGe`pNB9C!F=7yj){1x}1cg9wZiSfCP#eG~ z<6(O10=?psOQE2q%DNGWzjs92-NZ30%}e}RnpHIkkF%=(dv&aWriHFc@CnYSEanqt zlM!dC_{2>|;uFrc#j%W(Riudq18D+A`8$j_$@&2;_ZK3+fFUySguW_~Z)J8t@cq^h zyU@v~rPu|Mh1dnI1tJ>8E?DQ~Vs-%;TbfLV5L-3-gwLdsB>zBjE$wgO|-xhpxO6!g8cKDmREN zLcSpE8xS!d%Mf(}Qd&uHy!x}&$@ELEQ@2zRwaE86DgQb$H50v7yhqfEcJu!_u6ELL z|6>u))^kv{yz;6xOiFoG8EXmiQ~A&(9neeuAIy!aWcy3yjmg5IY@^}?Z9SOdqACe4 zsmj_11+l2JP#7alG19`R!z)FJ)svaf#jq$^kb17kOiA{OU^WL~_`rPjEZu#LDb2ng zzNBN{7hlSE_EFgmNu5M)DDS)}E-!mcY-@6pS;X@f2a13NkW1?^1tKD7^zG*eOg#9p z8?;7*y!YJ@b7MQ>e%0sVUIdIQ9}AFUZn7Q4trmJBodvVfa{di%SAu>8JS+F`%f!|c zvuJtOo7!eO6fpph!fa-yNA==Kv`p(%gAK|=lqh>+EaU9cdT~Nl>@jXY=JZ23GFy)R zAs0sS_4}FwnbE!l=^FjRGJUoX9BtuxhAx(+>`zRjpp~j z{F&jWX_M9RekasN<|q*^!|%uia+I-z@i=?S+GKiXOToHi$QzgI1qPm-DdlS@p*Tfc zP4y)8r#%rDV}4V#>gdo6$ua8Rwzq0F zZ26jX>o;!Le0-rF+n9uZH`3nLNw#I%wsj}BO>KM9^x9*#9lPo0etsJvqY*5b*pcT> z^t(?P{5*5w$pGfU`Oa*&Z*MvNT4rZXY~k&tddu`uG`#&q-d?S@1#eGG*6lbvdESmg z(azrb?k{BENsl`Nc;DrBFDt+PPf>58`}3Za7?x!2tp}Xc$JvfDk#Z*|4kGO9tuIp|I2}(mhUag(o2;)baw0ZNNyLuI2R<8HzH;w;r+nLd zNBKKt_MA=Kby<1I6){6xFSO6WAk@}1tU7^)k)B_y0m*w46#%<(M&v@GvirjRB#a0h zRgw?etBQWd2nfbREWO!%#d-jh73+5-FWs>_Rw%Odd&zryq~k5UNkBNk3e$}&B3+YE z3*tCUKrTx2sO5?68EhM@-gY_v)m>9(lWG1f?Xzdg`A@y`{?XZe0`huh?xn==TEAmY zy0gEL&+}i(EIs4Gy~W18vuZ|v#RfIK2P;sU>4<)FQ@`C}ABc+Y@Zj9#zJzfBOyceE zJO@!=I`rd?cuwuK%R|wejq?8JIsKe_1fV-*WG*)CV#4hnT$cBe-dgf9Cf2Hkpa7>b z@u{a8#QDYAf=jYAmM=zU&(fi}eLEP{`NR@@`+NU7JumC62e=7APGIn2i46WNx=6QJ z1A*c48d78Mz)(ep2biZ$Z-c&Cy^Z>cddD(nram7F+KlWwj~>NUGmL-FWi<`+V*4@GB#>Rk1>`Rut5m8ZV&Ll~eaN~9fei9g*ejmMrdk8U}*_6*aXL`2ZqBII9Oww;3*7Ch9-;(@Pzq!&LHU0n-QVo z47)o@oMUfcR0d2Ojy#(MU05zx3Kp0`I@e3BLoo_O62=TeR}2g+rSe{5r(3+}f|uM zvVJJdnPKHUK%W4ctkD&?@I)K+J_EP@h(u6zn?bPBBz}4Sr2#KDhPcq;gFtA)C;%Ce zn}t%NwiOUi1OZR#6Un$Q08nlBA6ImQTGFaU<>-JSLd&>E zjGaq&4P`n|pOvzDM#q{ktT2(jAn0Q79nkCv8DT%wjD=SPg3~atv^H)1+lujp!;&dd zR!&u&JThbiiD$`**y>?Vz=1E>=;@q5|QR#7wwhEmd#+017wkPfQ#NRIj|i= z8;qv)BGFX!b0@(p%8f7KBJ?8qBX!9ef`(_m1vm`bm*}yrVHx1*xOxmf8}yiEs~*ds zhxn_-3SgG)@fW*QkDCW)hXOq@;quj!w@)$y*?ZZPW|@aqcMI66@Y#IzTKUV7e`fPt zQ|j6(56-@F5?Ygr$comm2-!y?K&=6hn*HGH%#y%l_(uSy!9c+Lc1#US7W-TH@-o9v zhRqCyeuChpxvdKgjXjKHW=;ook*7ps#}jY{xQ&%x zj-+vp$@GUkka+pUc>Z;KfyOa?V2ffX7}v1L@t|5Tau6J-M1^;lz$juUWT7hH()XfF0w_ZP-{3tsaw*G zVSjZ=wns&fCh~9SRAsMAjU&*EE_@hS`!H}adu2>dy?z;@M@!qaqJ9KrVVgI|y;y2d zn%CkMX;b9@EdE8^es`0wX((TT*e}6b*M;@Qyr1D)jll?e<+az+39W?>tFu=w6b(3IPHm;FkKIpy>e_IbdBr6+lwE)d74AA|gHsWf9 zlfD|e@-C(Zon+?#tVM$X;HOo-Frd_1Q(x@!SUw{s%_k*~(4-o86fDcX)$Q@KB;Xz^ zJu1Hk(fT&Dth|+nFJ!Exl=JlYKZ@t4oLl)uR}QN0Rt*vyT!4ULbxdH1%15auDj%V+ zg|nig8^9XBJwTGFk7pdlE8zhBRsQcZ_qg4sU7NSM?f?NGSkho{xt2(Zp zkcQ!M{?>N>oi6y}#X|6`WQO02P{2_d6d5k3Qgh{-Vi~icB9L2+#z-CJPPiJo#mdV7 zT1?o(U89KxDQ}Q!p#0wzw3@?aS#q|4*$vB5bvzm~t0}|@|1ax_Kh5iQ3i$mmMe3pm z@W&#~l4zBe`*pc&srw_r7}TvYN5a;=!g%%!pH!?`Y?lKtj8(BnD^2j6f0@1b{Q3!D zvk>qt6aE@{>%1g;So<-~ug9riy!IHR7sg4MEiFR#3hWkRIQ77`%cr(cfBA8&y0c9- z`qWfS0fuhUAWMWgMk+wd#Um2yFKjCW%YXwMcOc-S*Q`&$9gR$pSxj?~JTk`n<7S~= z1YfvlLdxG*x#2ldppAs$Ng^*Ln2+#cj0Eu>K%`!emFv&o%SD0$Dk#>GV4{1Do*)Mz zPw35wb*$w|4Lkz^p^k8`w9sglTpAFZ4E&_GFb~h576uurxwbUb2nZS#OT!HQhzH^% ztVs3l#b82{{YehH09Au4`^w%3=5c{E$|pg@aGnUE8u= z!74QZPs3r0X{@=gKS?=bM587g{_$@DCclw!^tbi6SA^3u`Y|L@BT|kt0qu{)wu5(N zob8Kk??}tJ#grpE&XsM!-FD(wtofZ2stbwP2$c3@$UN{*!_!L`K$VZ@{O=Uf`JN=PJUl{ME;O;jSvMyvY*jG3nFMx{!!`R z_qbU{(R+?6ylq%DfQY*7^n(lJ`Rlw>`k z2dK4LNp3bR=RQ-#rF5{}NHZv)Qj#NFo%k3*A>>Q9u%ajb9nV{%Pw0&X=|Y>7Ml(gQ z=|$Q32|AKu|3kB*v!PG6bAec%m>3p|C61O)#rRe2Q;wRyTPc^hQEeb zh3*BukUQd!(QS+5#Dt3+#$AexR7KbiOfqs>2N|DwY~F~)uo*W{-@q_4|7DtKF0 zD}9|I8Z0@9KJjz}z2<-=^Q~T6*L=8+4#>ijYwJ=q)%yzSvN34)1`B(2-VDhVp`g;r z^`yAI=#1sHx1zx07ow3{23OVJY^u6!3`0u0l|yL{cT;^Qm~zniafU(>2eJH^AB_oX zG(7^CCNM%7miijB)4uFtl6;XBkQ(MT~tG)5}Zom#dIG9v*1^3F2= zWaTlkL~tQBWjz@HD@h#Gjxu&Do53wcj9==u8ao>iCSo~@f#*b~r2|^f*ub41b>I6M8*Z#85HZRrnx-*PZ9rm?9MtBmcDJq zj?te{-2d(0<3Op<_=|=-3UFk@fvzzQuaQ!OHuLFMq*4KM%t(p+lCM zWrdFYG1WvIq4D#4jF9kR5;{1UW|u29|lMc)UW#eiJ&V(uEEV zkVfTt7dlMD*cyF-{%wsu&!-JiJ>^kh0d!8uM!b~JL7#r|LWcyPTIkqN3muzH=pgi1 zy-DCg$7UBgbZrG>v0#W>68hcBUok=0(lnAIlO8N~9Ng6HWtwV-f_w~vB+{G|@Nm(- z!Nm#8rIJL{O_xdb*uFti646xDlE|MYTz75pa@pi%qcX5iYH~ZX0{`|VV7yuvzIw(^ zFoU!IU{k;!6zED8_6`$QCgLNR#>Z{nda&`qS~R}Q3IDh!j}<&v@|Y(FBlwsnYk#y4 z(+qh4ovIk~DmvU8NDF**Si9<~BB9X-fsJhmY{2sEu-(I&BQY@yMZBq7Olb9bZrE96 z11?6WZB*7e#3h>%wTh#gokGhl57O20`hl-Tnl|~_wzBn9Np@Ew*|{i(Rc)h{+V8LdY5R;P;n?C0G)YFb z5ytrkHtZ5M9D6Yv6jBtNTC&N9@boHnkwG!U3p2Y@-zql7Dg+-H7PD(d7GG_&Urdh? ztonNi;gph@@~SPO8X1 zwuIEY$oDzU*_8hsDuxgz_0ylEf}*845&+4&6bo9XX^^Z{mmbTF`FDt>h&VZTt&la< zYvjW6hD+t3L|OU}%LSSPIO+n;)1ulNYKZLSKT&c%M_ECB@??6f8s@QXfn3#V6{s5C zD8~Z#E~2+jPKag+tI*TNlkrZlr<{wr%wW@lh9$NJ40PWeE3e#xdl=0cP~XFbBQNMk zc1Eq=*sh~^nA9(GClg@=bSOHnp3wev`K6B-2kqpKj2i{JSeuY08^+oHFjSFs4FOzu zIhTKXtZz@7@*5@?TPRaGW6+KKGj4~oh!gzw-BR8j_tW6o^6AB{EthJQ9Gz>+WfM!f zw!CX8*B0|(xzc@D_WtYnryNAj8um{)s2B{7&p+ieL;fk;hO>JAl+XPH{ZsZ#fPV}9 zQ{MP*!9PVtCvzGRMa*tSrCy}BLA<27P= zkJDr1fXStIP|Ly0jbTf8jEvIMG9Du&Ijd6?A!l_|nSVxdizrdW>cqir*Nef%rC8ob zex*!b1h=6O*aK0_k{Qod35BvhIh!1afgF)K7R|49B zAX&Om^j@=@9mFniwWLgK$1Q6Vy$v0bJgeV{z1M`#gAL)6Di+#VR=X2>n;Au^Qo`r( zPV8+O#Fpe<`nM%H$fpgmX?T%Kv&_KxHH&v*>C;c%D9S8U^6%r_iKX9zomkDP54f=t z+l2p8a`3%LuQCrA$byOJzD4#=L0!^&bi|$5ARhZpEaGw4i8ZPB%_jBwPHaQ|U9c1T z{j?Up!%l3Fe?h)~yF0NDAvJe{)XY|FB)NI%{aB{)zu=`_9*kt`18Ws32RPbx%75!S zvOgnW|Gg2gYGd;!NWhw#hYvOR{eDLzS`e)4>h4i5O_ z-$&Ry96+J5dDxtkrI_d8Ci7G`ee>|4Ma)xEQ8UkKCv1Nc?`{ovcbo8Txt*|v z;mIw9a944ByRD%z4>otHl2z=4-Da3~YXkEz4=%*KquU9iN-%FVJ7K{zr~<(>`1p6i zngdyCwr(5DR<#qh-)Cy^PS|$a3Hy(=8BQBA92VEkEXRrp){U9Hl5m8Swr_*N~ zq>;&xg_7uyY#CYLaYDB(*l}rGSKH;*xB9|js>=0y=y>cp9go#fL~DCC`)uqY5}R=5 z45!Va&B=^9SsgM~R&2}iQ=)S^bKBwQBj#6gcw>sMch@(33dKg$FLHdv zqLYOmU&ZjQ2o2xGBHlD1ldyh-aHZkIW&ZYw%&zL@@THw>(hE0WGc>__05bRT%AQoqjWH9Z!>^RQ zS_eUy5sCo^3Eb@ad^2-GJ)H)#_{?ePF+8xz>m;Ma4X1l0hZzA)Vt$?FQ{`dDC_qH*&d=N3 zAW``Xjn_<`T=496Ldp+PY`?UpBf~&F*;#&5dxUB#_BM_~DlH$;%Xw}A+eCIEmvexP z$VuO&1Dh0Uh$jKI_&Y81kEi?f^0*-DI)F=PgL}@3#*qG=k5+Mgii7%sYh9l4AaCj;Y%sD2GwM1U~ZU>+g z9c(Q0QOKtQ@xV=QSmT0o7^jYXOXC|Yx*DefAQ?dAe?9kX;u5NPxvVNSjXEvZ8iWY* zW+jRArjj~F%Kn%iBNv*=J4_K22t;9BWbrD32d<-+C0*QauW&rV@|My*oF zYMrpe``T|?q^{BYAIK4VO?&`Fkfo6i8J}F&&|^ zmZ`-m07-Q9QYb@9s#~tabUlBc2q41;85PGsBq@8ZPJgmx_)rwim5WIIXBIVkFQQW4 zJ+Ks&3XV`Hn#c!a+z1St zIA9j9<9TGck}PT#1XRQh9AH$+oJ8B@@kF9BPP;@$$XUfgx|ZgJpw^B2uLga<<)$1; zlu+_l6U19|UnA<+qOpD*MAw5ThH!mkwlC5L*B++^g%(j)xm>#0)sbYzOZ9cygiebI z*+4uT4FOqRB!3{{g+Ur11a&Krv#2~ZtS|^8BvjqM-InLfoF(SBNDMeNtSyqcyj35f z|6yT`Sm+CV(5l5!lMrXIF0#Aqka!}Yzr`FY*(*GbOVQhh$3=f74M4(SA^k{`Mn-;$aj{s)2gB(~4go=e3^LMFcnxHd z`e6S4c09h4xG|omO9IPP2VV)2z;Zb{3jW68Plb1c%H;z#+#9tR38VS9v;h_!iiWP!{cMai#7&RtBj1`j-A-enx2_F)8kb_|NLHL-eCPo2rg(HNyR7saQ z@T6sg3Rjb5=}ed<#H5*Gq&KR8n2dr9Ky5mX#iC$PZ;V_(z&4MBH; zTv@C}zCq-rWr*qWyiZ#e=0Pel zj$#)?*>R*T0*2H21F=L`=DQf3?T2rY=Y^-Z$u3QI=lpCs)U~}J^0bRKnKnzuk&P)g4n?_1k?yO*fay zNMI(J$7#BG|B*~L?^@{+Il*y*Hb3vOSrP=#px6cS#W}&+o;fTW|;jGmbKDt7MWo_cSY-H^G!&wFAn5L+@q;V8@nD^wNC1uNt@ zYIA`G>inKiMUr!Bw!J!wfe#gnfrfenivj(vWQzWzV;W)QZM*ph76a=g+-_;30oVUl z@p6_k8fYVTCA)#rS2P{`?LyN5iw@c{FdbM8yl0uS!n;Y>BFiZzqs>mNch)= z{J@Y7t|PVSx;z#rH8;11_1z#E-4(QtFUR$r_oGYc zyCH0PT!l?vLf>6FYo%VuS0>t=GP1AZG1a@rNgq_WJbNhYHSn<3oiR< zG70nYH?Wc*4RQcWyU1VVK$iW4UiDSdUbCYu&sDmpHnP>U&|0pA2dKtdfRZiO!r!Ny zqILj!By&5)YXQv_$QtF;PPpqywh^qndcro+vY-JNBx9q#*pze$U2J#TbmY;X!~GWg z8IZW0HvjlU`6Mkb(da&k1D+^UFeU;{7Tp9u7VO`4H(VLB-4XlcHgXz>J)SogNNGES zvMIO!V8zn*vC5&}#uu4759Q(fU;cf*6FtyGO zEv^pC%Y`<0H&m~bjl2d_`ZXLPLIbv{3^hkG88`qQpJCLkC~L8G!Y+0doXUd!?|AE; z2XDIjZ$ELxCnE(xpbTAfn2pdBa6qy=AUm0!*fwovzhYI_**ta_pyp;E+=2SRt`dwZ zDxCfHaGQQ$+^YAB05m4Q3qVic7R@L)2(kaMjc7UMcXJY2Lll3ve#F@f3z@Dq+K;S# z-rNW+(`_w8aiTJ~YPmPoWp<)!-4~Xle*hK89$&X){Tp=ap4D`#Rdwq+ljob=dXwF; z7rNE;ZvE!bLaQzPw$Z6iE$-BgdSc5~{%QHMq}w7)Pj<@#{Ga=dv|+`?M#3wcWS+f= zua9u+9q;B0S|13yI)^<6dswXAIAM+8fCC3-)>sCL_kLWdt9SN;DXa>NO#t z`+Fw38+fmE$}$%T0Mh^_j9r(tiQ4#5j@{vdHK~gdv?k#<+=^&W>q(}r+9J3M=)n%A z=ue`7Lvk<*9e*YinBZQzE(!7qXeBx7dR@QxK$q){?s)5G-+$AG58rvkKSN9e;u`B% zjia=}>h`8}4dsrvzUwbUUBG1x!0r}i;kqk$WJk5>GNSiMd(8kf)e31;Tg%8He)FvXTVO+)0kcuVb zNs0wsFntqgtI81=kLac|9;r@9@J5I;FfnKit?XzdZnU(cmADl=gHa%8(v|$PwZx4M zuvp^uEVablT1Mg~N>`A$J1%j1xyK=K2aU_6YO7@+anr+r#O-N|ByL96khnjS<)0l$ z+||hi#%>}tsc$riTXnrLNZjgxC%Yp*q{2f~ttfF@44b2pxKEr$;tr8uaeg;pyL{k1 zZ33U2oNfdi?+ed4&j-V^LKfc@o}qRPLZLgauzGyPC2?~=Z)YbC=V`37B_wfaw3J_! z)C<~4&|Xd$|NLSBa|ZqfO>1;v31OUYMn94;zNlNn!uWlw>DCg$c-5`PD~u0yYoRdy zrNx~Z62|ZU@e1Rj1`T2SGZMzNWP&jM*?}<5a)2#1g>ehRGc1hP<%fjv&tflHEQ}wd zndOA>Zv8VV2qpnF_FCS^t z_E4j?2O72Ax0>3T^8AVeJt}#A#hQ**p06uQmw^A#$@6tpHkCiJJU?9B0?b&QJiqk_ z^1Lm4m*)eAh0)Xp-(X7;!F0^LP+=4JOa8I9;of=NnSPXhUikZAcBQ?iD&zui~b> zU-v6s0>OVw^8PAl;6UWBI+%ZHSmdwXW5{yK_ymglTWgWO;+qorwFU+v|L20pU$eI* zMgFZW@^6>Pw3S_+1V0z4@4S%+iz}pz{w6Uc=nA~*y8G8i{uTBHWbI6A^@IncNb@w8 zhN}X7{Iv4jQ*ccT2L!_9l#BbCZ)RsF?sb|PyLqLf*P7yvoHi=Uww*iF6~8*-i1)Zm z-pXiNI~yp{!ELEuG{v`>(Zs)KD9>NTUMzb6`mxToHQk#1f4q z*6*} z1XlR_t4_`lF|s~y7#JTM5*0LTveF$0^||HMQF@dP&5x{OD3PKd`Ri=Eji=s7J*V`D zjpcv>rf70nfU#3Kn1B>SCHX-))s4upKY(x)YxYhIAmzQ^i1H7O%fv|$O#8NtPoX`& z3HOu2AB_$_OW_X++>af9e0Ma?+Pdn`Z#w-#c3jqlLzUb`$?>-E<7Ka$FHXW|y+cO+ zjSjN>Em_X2(T|x=SPS`s8PR!#Bv?|zhTW5s$Rg(EU$bzKo@hB*`JZBA(=4One>?Tc zmXGd!Df29!ovUoK_B#7yZgCEedCP=xy6$=*0*{pkG7I9en4WPlG1~^NTv<;1$(Zt} zyo_RU?X^QoeD30K`nM)@MkFe~wl_A5)rCsFe{XCit9i2wYX$Q1BK!QO$lRLU1zbI} z`-+8W>Kwd{C%e{>Wqc)zj>(=Y?~gbKB|}!@9c}+WcNfdt5t%!&Pw|ky8i7PcI&GC>19GIN|K!n# z5?v2!zS!F$ySc-gVUB1`{zF-L_ldS%s@r!3)+!D@y>lmy##OBsCn6d)C2UE>?t#81 z1m65!?uTpku>0!4(Z^3pc5};!wiPaJY2FBhelc66f7J+oYsShlvI{;)7Fzr|MKYb1 zM1}a^C`wjtv8M^1 zHrrFq)4h>ye$L9z@x7Ms&+(SvTk4*H_{GTUq*k^)Tte`64UpVn% z&-s@arFMaJW;K-hY8Nk7d)Z7}OMQN+&9rnnI~N-YaQ0};;sPP@D{>E7R9l*V-_Fv7 zOppFlca&>xHZla`np_CZWJA{*P0j?z=3Ba32b)jqU;F*qyoKN~`{S zI*W7`RyNs=qgL9+=9`w>_AOg-%tEnkXy#Lq`1$#5uIw(dtx=x8b4qdX1D+315#K;7 zKa$a%M%#9FxvK9pE)!p>LOCnYb1n~;QNeO+$G(`v0B?t_wPby#Z^T#jB(zM~%lOPq z?B0#2_{75E9P(aV+^&(A*Mzb+i&w2z)hrq!)W-4v70+W=fZ8Jz32H(g5;~fe++rRT zYYpz=XvyhCwk`TU%jj9>oHjurt`+d05)O<^iqJLP9#d4L8h^@7=-Z}6Y{-23j~B^oU#Ly^J8@$V>dhOC2I8BboHYAacsbNLT2 z;@E5SBXzG@-0LK0<(Ev6+R_)=6Zex}f@r2vgskU6`gM+>(=v@$gX6@z^_34qxodRu zf;K})SC<&e(8xI4BXPy@+Ta=}q^Z9pGlbAUz}W#h7&OA5*Pb>3pGY^vm-LyibGW!?RX*84j^MPO+5#orfq^Of@o@MUl)g{ zd8;R0R8I|Hz$<)NRExmLNL0mQh$9Nn55~`x-eh9W!NCq_Bo%;OYBj|$C@diZ-x zlW>qJH?zQ+K?<)Bo45s@Y&o;n1P{}#YP5RAG$-tH(muQPxyC-HB-^lAl?Z!Mbs=?F zWaXZg^d@SMMkCQF|3J3iwHkiNYb|oE=3@ijJE@CNey!c|!trnMc?|=33p0G`V)3)- zDJ{K7J=~db(G5SIy9q_o#50^a$c!M^Mp#h*?+D40H}o!_&-yxCsT66GQT|=za8{E} z6RI~-1Z^vp1&2J-&L6{5R#H@KRiNc@Y*Y)+WLqlrRcHih%6%V~8_TLjQld!xqz59{ z0KxOlSv;2a>*~p%Sl0WEyMcvCjC`9oxQ=hT7O9x!2~$!nhF2;AIA*?5prKS|)B{Ps za30CZ(#Kspz@Nv(efCe$4bUsTHNoBTWO8M91oC!Vf@Y24!|d6G+H9eFrFxi}%`cX6 z9dV*i^w5%|n7K@)$vt z6huF;i*o&Yk-#IW`;{xf-8(I0R;PRHOmX*SPn-G-JHM>k=hU~-aBm48__(lmpa&OE zi2x#h!ST-2F!hAfdod>P#Q8s&H9-zV@{O6zU#AdLEeC=g0uabMHk*G>(&s>KM!l!` zuWN`V<)OLvbs>(Cp?u#I->h}52-6b7OxfwdA*CP*`^8(5i{-PbX_OC~xdfZ~!N8O3 z?zleRh5J=9>ff~;h$!{<;`Q6z=O0LnP~) zx7J%k9sG1D#*8d~4cWjU>=1l)jb?Z5gW`FACbiw_Vl`t{COToTabFN2qz{$~Eb5wdP;HOJ0ma?()k22al}$Q`O^A{(U$Mgi*-jGtoT{k*on6 z!+5bYq=C7CNoD7MNjrdm%o!_SXj>YAZ4XxE;g+pRW%2rX7IzE-Tmplp5>+9Ht6(fbI4qJHQF{G{MtGdurMN4hB2GJuBJ)E}T4~ z9bk7*`Ry2}C`y_S>;TO~w*zR2xg9`HL5p9d9iUm;0z1H~eyTf)9bjF>As(k4Kzk8o zBqek3$HZdRDOR!r*w!5++0?TrzhF{!04QAk7e`?SpzX>I5Vitk2SDFjP~jpw0Flop z;YbiySNY^#fH0vIxv~X-f)k4i{uJr{P5tzUy1&OQkUotnJ*4{s8TZ6MBk}kIPyn|s zpn!`h0X!Yg<4`tg!$AG_Dpg_0Dw@kLn(QgV`?Wo~YV{uxbp;E6-RmgvUDrP^VFBo* zprUnGozdOORo)>BfDji%VMaBSAyhDUgkjg({}Pogq4h1${?*7p`^P~g2CSg{^4dQd zdQLtN2~QejCid+G_`&Qw;M#n^VG1k{&lYDqWV4oT7P5s()jIyw&h?D zAh0@(zl+tnwgmtuEPAf-E8gZZ8o$`%M6S_DFUd(#-Lc*oWBB}c?s>V zQ<{I*D<|n-OBN$3jfxIu<0LyHZm5;=g;OdNUp@IETA=G9v1yhpBc0#q#XbOw^FbXW z`L0RM>PtE9r*pCr+da8zpVz5+fJK)xROrWKPpO_pae_59h|XIMbD4elq*Q(Bdp05v zKn5WI$Rhf4fF9z0Cc@yRW-CQRA-?-s~kXaz{(mG zlE^##K{=sNE6jIzN1NjhiZGQp27qk7D3clGKE0p9wp+vmwy}Y zG|TFEAMh&=hUjbep|4>)t5jS|L;nVuQJ6h#+#huSm4$XF!i=KR)u_rkOe^k@N8qF_O z4Fb+~zPI@BQ4@g-N8HqrYoRU0=owIr478z3$sFb)EVuk(Q7eOtX`&03Vdy;=+LPPB zc693^CxoUfQC*}_2ZmkRje%a~Lvo!UB7tF(J}|WywHXbD<#(nv zx{kAy#sms_p0N9^{n#Sr$GDSww!%|Qr)`CYcWi}+u+Z#w>z!H`ghKkIlZ(rs880pa zIiXSCB3EE`-y#pSpc->ZS+zG>shVJm++$b|B_?5uJjoyZw?7b6X9?tHJ^kt+?#nSu z80etH)V9+%AjPg{>zp|YJHtF3!?T6|C+{(kw=!m*ly`g0wJyppQy3C$vM6Nx6j9nK z1KufiyKj@Q(V-4xlvWSg1Kk_^=oIT`S*DZiC{B|W8^d6zNoCqh9{fPcDHP}uTd<|~ zhr@Jgt7n2x?Hp;TH@uh4%hr9Dyrgf?j^q^oC#LW5F*GRQp*qvsXeQczt2dR-(C2nB z^;}5!h_*?mwno*?Ge-N_-V}vU*y*2wcUksUF(re1E>VbX&#}(QI@h0K+-w|&0j;65 zW@1e-jcRYTlJnlQLC7bh>e96BLQ-VfsT?}VY=50( zsl2yV`Lkl3Zye%wM$d@a+jvc*J)GJH@X4zo58#t)tZJ^8yQV`-a%PD@vKiRR>-7S` zux)#bY}@z8b%X{F9*HBUc_!LM5p4c4;ylXvlhE?I%c3>dqG03SEZxu%1Qq;8^BWC2 z2?r^GKn{k8D_C>n>nW$ru$4hQ`EWfZDq2<)Wl0N{PMPBYVu39W=$&QJDNIVQ;|>wE zpmUuxLknqWA$7M<1T1Z}gwxqc_Lejr)$Z8MV3=9b#nKRGuJ1y-#ogHR8fW|PuvB~S z%I5;=pp7Q&%b(r@ffF$eE9n+to%TD(&X8xK3NoDSSm&L$)j$kk`+V3wAF|IwR2L+*gZ^kzr9W!o?%?r?BS~s^q(_j{s0Bh|)Jn)! zOKN(*oTN5@$I8MQ;+mxQAg|dFwbE2hr2~2Gjx>MGQt}!Bf@*n9mXMCwK&A}q zSa=M7fxLEINB#~+l-Djqvu5$ET3%xx!6YjBAULf`UTc)8m$`(t0bW?9V+(3Si65NhiD7dX_2yW|KaJz^Aso1xj zUtZZ1+%S*0;5NF1;O4$<3kA1hRxP+;T|ygjIbjOgtErx{c(w}!H#09To3|3&MqO|l zooEPdLxU1R)`Hu5&JQTCJjhM#j9PG$7e&}MP}o8Xy{dj$lv91|BRx^l+}ndRcVA_aF7Jg82Hwh}49!E*oUI_}=r-as zHY7Qf!lGlJ_t@uM_IbN=PRS;>`lBSdef}uv<3=89e!8M0cVjv%%H5bQFUwIY)2U@T zEX?Ws^3vRZ!>(SSGgj*|osE7=a*wgvyV8M7cVm;)HiSA@Z7tM^)sBQs2RDrf`XeKdP%+e_Pl8fnYa@Ukh^ zS=2)w<;SbTEq#i3pPnf)DD9w~*P;HPG73L0YSY0+Z5~8==b`@E7TO;BHS#|)I~G#6 zA2J{2RaD!fL1QGU54W`}5l=eU^h6%)@zY(zE&k&VJ1yHzl12CYqvtL6f5acmvgsRw zQTAVI$16X62h9xT2b29#P430(qXV^ijF9H-j0=yVdc1Z4UPat73_C-9 z1=AGge}W!I9WwuuY&1jn3d&fY7mr21^ECDS!zsB}JT1*O^)D9mfn0I1wr1}vUuJ_ABpb^`iLy-BNDQO5YeYWz~ zO|j?F!T(NMjuxmkEAf54THh(NgkiNLm8|3VRA&QB}7v8b?)v~jiT(7m_ z9U8Qp_6@MwxTkMw3-@3n1RNk$0lu)%7|v5$-+f3yB_8-~YmUA_frPJMH$hByNjC4ww(CA856W4PgtXy=;-_YJ!ouaNLy@M8SR=a|p0jIOkM{y0yB^1=-VW zrGX;onGc9W2!OIh=m!`eXin*euQYW-vj7=VyQwb>KsFeSW$YkG0m^!T(1D1tYQKd( z(R)?Plhwng5bLTb)<9jlA!~V)8?upKr+Yz_v3kz0XKP># zw?q}Nmu?NUjZl`05QZwPOUfEds7Qh8n^UQ5QjMZ#$B!LPFSDQXpZN`wcDU4`LH5ox z0L|Ve(S`hvyeAM!g0aPb#@C!2YwON6pRJ>bBp`FVqk=sUZupSnn4P)RqK-l6zThCT zseY&V8&D#7hAi@_rRWanmJ1-qtTTlZYze3}UCA^=2oWO^Q5ok~{+7x7hvV4^+Cw*N z#vh)lr z4H1P+Kk{27XxFQU9Je)d@S~Z-4?T;nsdlY^ZvJ|J5J2qJ$jT?nTtDG_F*BDsDM*CA zkOH>p&*L2ko%rRkKtwOcy|lPh0&Oaf2hEJafc;_ufU`Va^n$HuX1LE<7XPv(&5JGq zP@(2q1-j>ZIrlUjq_!G&#`8;eBTWaZMGB*ffMGhyzLsuAcHEe`h;Ok zY;PWhF}!gyf74`ndzF4`m996B*69aAIsxw(RM@SgYvsl7wfd5BzaDVtE|v8j0PGdt zTUGpsv-7yrn*(+Fp(=gP--M3o&AoN{;gC+lL5fhIZEs0whw7YloyQ}o8{x+oR&BJy2o+^F*&XBG*yRN84dR0iLr+;=Z`n6cldBg=D zv3hJyETB@kF0RYmT$kDLXY=#(``af2!lb@yfc`fl#bGSk0E+>|*oR zfqqYwe%D>0t9o;BoqlhXe#6}%U2m?e(+^eYd+rJ8dUI`^ez;11_;Vp$Z{*_b?LSwP;X3_>D*fL3L%QBPTBq*|=}a{QAuaFthGk32gMV)iX}SAT zp`fzfP#3&)LBYdS!9$-81+P393M%Wqy5Q~2g83UD7v(*l2|1Pa?mFjPi*r8w*^pCd zx79iC4LQqQUk>SdvujTULtd2`Ov?UoLS*Vvv{v1io={pe0@>Mo13-k6RhVAMc9*kn`Y0+iOZFl@#~2Ch^4V~k)Oh0Q2+md_HAcog*j|vRT6Mv&(P)%hYz~6XxmZcw zG51ZTGYP_b!TDaAwXRzgGjOv(6|`-8>?-Q4Hd(IdnZ_fBipoATaE^i#9xt|I9W4*N zNg5tMVFWywA5KZ9#PG!vV;`4-F#wP{J6Y=zwv9SGtVRP5{pnFPP-Q-;KIT3Ks5FV0?dr=jA0lz z2D1jx%e4^`av|bTrc%@W70*OBkF%450Op5rZ1Yo-mq=Epc4SSH{U5>WG?J|DUx6moY3(T*!;mSBa!O*_lo&VxVWx{VDlRNqIx1#c^qjfgI7B6PF>kGD zwWbN#5&Sjk7wJWNQ*Qz=uhpo>a4={Q(_7=tzdzm|_Yg8Wv6y0>9)pxkl)99m7%wKy zvq#7e+zUh@5qoy7wZJ8<$3zIU1?A&}VgT*ev*Mp&eHsV9}a%&~~#^YPTkjU8G3OEJx7E><6F|HY@a= z?~nH)WOZgC2=P(&iII3B;QgBA@t&bO-ZQ)<@ZPWPK~h!SsjxKz+!h3kFg1Znwp7-Ovyoz zw>;X)wb(u5y-5QijwkemfGhbwX}NOSj@!0??YOO!k%)3#(+IT$>xkCCN!@0x>h>bS zvIrA(B#cFA$Mz=~0tNnm*1iNFs;ce(u!`VcH7zYIE3M4`?>Xn*nLB{h_x-=#SMJ%D z=RDha&U4Pt`3N5?r)?xkc$oqu8^lSLn&4F10Pv@i*ia1oZbFzQzGN#n2|z6KKZRs* z1(km6jI%%xFJDq{1}rnDvptRQqv!sk8U@s2{+Nf1>{yB*`mHjM9jJ#>9*r_c9IMDA z-I$;(2%b|ltN=1OgSc^93B75dmMHxYe6{|x%A!6IBIgz|UBXgWgDxB5X>E?@^iVLz za}_~q{Rnt!k|ZyVy95D-K>H+;rt%MYNKx1dxiI4XFx(6XQiS}$FhSK=VrV6S1YOxE z7!Wqg&!@fs5MHJxpBet}hr+HfS>OgdNAAb05yACta2Fb2DG>dBUL1BTdgJGD{;Ln5 zeA#kFx&p~lz=~KGRR+`pXwCr*{D{?ug<)WxF&SV97ZmI-DA*5(fldj{$WDPjLT35X z&za+azU6qrPOurpONczD$Ss=mBQ8PwC>FjKSehEvSG>oD8|tEA=xj9_Mx$E4*02(d z#Qa(iGb5nMjr)hqrne7>d@#chIy1#=Aaw~9#kgx*Z+%t-z8zErvKDP#oetAN3tAia zK6uxLV|0CvyZ-)ukTmrPV+Eo>T7(j*3;gA3L1@@LLbUi!H|&^vYXg&ovO@l+fE`}h z=D0{oN~9l`g47+T3!{R487wFS=m(~c+wYjAe#Ew(K0F$_FlEZkz0WlVZ+ii? z+iOq(pX)odht51r{+IsNQGa~8v{G7h2kPkL=MOeH@kRg!w>}^Z%7Hwfuu^Rxl?c_| zt~VO94|VZU2yL%78j3`y%i+LN7!MCX6@VWLD@XzilZR++F+yS!5F*;EKGUFOr{W~= z16|rU>Hvirk9No)sy&}jYOOI9OMKR)}`n@}XcL=(_>1kcI-jOGCL1B?X*L84B#M{jlBHt@%fWc?Lz=CzvHq5AXpQSGGW9 zxJiTo5%?nM4s5Us6tVrm(U?jD(9{{=w4W9v<)^(1lOdYg$!ISDh=V#nY(Vw(0hlFe z^Vlj>XalG&F45GdL7;Mo%Ykh`@6o8d{WgAOZsJNR4qN~#Mu1+zWKm6G639t7go$y* zIGyWKh-v-*6+f2-;50)ZUnEXdF*6nx0Q8fvRV1YlXEl%=oF$V#B~$@{cO*>(viaf5 zkqwwa=d%64J5bKg1589QLa~+{twcd|#S7vm3duv$FCwT;yb2O{g&huU4uUvd(Rna} zw1m(x862$1F-0nvdn8VZBD>T&7XMUu2|aR>c1OThv2O&T3T#BX+KJ`h1uID}z>*6~9!V20 z93kr9!3*I@#tId8m!%zwtA!_RLWoB|RD0OAe{JEZ&h+8wa*x>16N$hpf&??juy&iZ z_`15yx&){?-=|NQEQpu*4*9N{f=yi=eS2C!J+2R^^Z#@A9?2r_h51tRh5C1)ayYOq zp#s|X2o-F=|C>;e{K=9g9v=z;nPcljG9^UD5loF}%}<*oq>7=YPyt%`30}+@mn>N7 z6XHWv5Mm_)OjfjF7s?9JWeuTHpHp9mEL1{dp;F&V{BRPe58?+Y)6eMC|2LsR3Ij&K znK4)^4G6<=I4~Ajthj_!k;eihmP-|4M4>bmc|1NMB~;A~xJbccq>4xhRYVG!@`#j% z9&Uh3UMi8I0v3lL2UtUeQ-pXq1y_7Hr+^rer3g3yfG&RX2)l1T+>I35HhNn~-qCS% z0s}~opyfmCKgfdFDp}yCmIZ*3kOkcLk_^a^Fmn5i2Fu0;Rq!m9Me=|VmQa+i1WSxI zxHRzdkp==6n3ixs6ylNqh49ndWS#blU>x{CGBO0o$iTeF07-z$eSkcd1Wb_xxXzX$%3Hiv9^iJVNE=nBb zCF-G#XciJCzV+o>#(Dqt-uJ?|#$^ZhWW$y$){JxN-+Kd_&0p2nER{Om=Yd z=MHWpP5jBbEr4u0*r`J@z~F%>JXml$UKs4qx_C-UY|h2N-#_7<#33;WJ+|x^onQE& zP`+En!)eeD;0Fuq14xDNksc0%V-NMZ3^+!7Dtt0s2oqr`pcF?Qq!mFVhA)F#%6ER4 zy>`(omHz`G!n*+(7w4!l5D^)aOs8|&?XyF)XB&i{ZKVAip-VjU6+*jt=o~`(c<3rZ zTY2a&gs$??lsO^VV>~nmp|!giHM0o8vwL{(T?9Y;ng`b-xZyev?m}>1Gb&n*(DMB} z@dSczX(;iPS-|1hw1uHL@i8I^8=$b3cou3-NCXQ2khBd-fn?wTD2f+t!osd{C@fP$ z0TB-r=Dnzb0wOXLC`3@WitazZfD1g0w0|LZQ3R*V#bM}oJarC&Z;Id|1V0zScM-fQ zg6k2SdXbmih2TmNtVVFV2%bQ&S_Cg5ct!-TBY0H=C%zb>op_12FcrZWBKRi2fzc5- zXg)MpB+1~w@V($zP2fOL4vq;5q7jteWERvl`pysa69Kc{M0R6I_Jp?+PVkco(5fJhUF6^#=t4 zA$a3+9;`<2caDK45So07Ctjp{Ug;@qyd=i=^gK|F81)PU7kR=+gl%AXAM`$n=!HFWc86!asjfC2w zf=E&*e}QTw91T#^JCZ%>ks#t3$$Irj5RpehA?jcex?d&$@h*aEL~s`&q!_;~wXq^^yK zTzd{`9|NyJ-;_wTkwmre@%Ft^T^kX(_M50Z!t;(h8v_o9Oi$UN?)fND64B-JtedE5x#R#kCJ!w0sK-MsAdE%yR_E&^KwXq3FO@Ok{Aha5-0^RU?>1yuNVhPCyy=f@9xN5r0A(FPJ#q@FP7!AC83~qr?x?ti_u-(K2lCm?+dqte@~G zrkfu)I>5Obnk0>zaFBZ<%eNB z8jGPc7zJ`d;Xv}@3TsVofdd6-B$3=}0s}$@^jc{7qCZY@W%d9b-Y zf3O*nF_0|t*j0)Lo8hU0<79fUIT#(m41;^|xPTzP;4B4=imV5W1Ih8<0pt1nLFZ7o zP|${z3d#>UhsqB+*B850>O)+|f^iu|aZ44uRtyhVNWTY$p7<#7KDc-*3=i(`C!aa` z%a1(+KO%q={KYCi(SDehs0B0dCoW11RL~2-i)?QEpc>#Qr3T1)AW%l;k`p|(Vh{a> z&!m_6upg)T@)b0Hu^ik?0?J4FEb`)^x3B;64xP#`Rd}R4$?={ghrs}NPWzxMVUg$> zTb#%M{xloChQya1$pJt$4s9A6VtC{YTc98zLEuP%)esUyYeC??@X;HELKIu>O2zYy3P@lO+X^ z!@n>72QCJjiVP%QG-2TQp1an_&&C1A2>@Y{m?meI=mbHG>9>Y_5%?njM2MgpVlh;K zs1Kr-UsmMc@}%L(a+-(u5jaJ(10(6-27o6(ei&aKbvSk3Xc(9xk#yayk)ur^Bw zz={9=6-$sGumelL19o>{3G_Z4X9+MVDO`cl;4o5)E6~XtJOSx7d2WA#YXdNVf@Gc| z2Eh+QL*;kw{*^(HY^GmZp%yrgz`p*!@(BKvUf8-?cz`y61-^LTM~etF3hot&`)A~=MphTRxQ~@1j!ne~Z3Unu zItSqVm~4JTlq4m9qOhRTc<`JINeMm%Ele@t@6eM0oCcwce}0uN>gmFwn1A2!we-sh za#HwW`jH&*lO2>qvY63*_aK@ZZeEI;Uf{HNbPB>2tG5u2kkJwSpRPQf1(jfAq$QP>lH!oFN5d~oleIb$j7G+*4mB{=y}HS{g^Fp8@bAGvBDLo0-`D96F{RwzKj znWwj^KSu-%oK#uQ$awL$skk49e~q5_{R(Y09#*;)N+0}?lH||fPSD1-EijeTJg&=X zxi6TK9=<S z0TOofJP~a*f}wIFgBFKw%c9`2pCH}PCZLNHJiP&6(zQ}VaN8Ku?Tc0cqyYTv9`reK zLifY3%YdG|d1#*w66v==BSU0rrB54)({8l*G(`dQjGqgoPQ`|Y-&f_yy;10iiQ+%M z?*3gcSgZDx^`IT8bv(sZ0QpWU=MO#HM14ML?JQBH;QUv>j@j)?M6* z2_mH`5bvR30zGH~@SRCy1Mqpgo4*8h26(r`2b+VYl-JEa1#k_-jL{tL5fs(32{vtD zDbe7*d~3yBS=#_%s8hHn!bKpEa2O*A0@4O*e_6tpCQy5x?>YjtH+Fi+rGm2rKq4}L zqdRTx=_ymxp!X>7X@eNL?SU~h<{mv1!!ylDf;Ef2;o{+9gznS&6KFs?XoU!d=GP4$ zxzzy9U)qF)-H(cd`%uV%%$zEry@hXsiM;cjvZy^G0#pRebMAsTfrEIIaQO_x)g>H$ zLR!&5Vs`-`Tqku$!fyi57YhMyxs#t9Q4Xb(#|$-&|HJ>a2L%Ho2;cnaX+Ye3BI*?V zV&ee^BS6)EbPKr(9|G+|aXyHGVdb>#L!^%Bi8(Zo?{r{Ld@A8P1W$wy3~8=`+5q@x z0~>%T5iFoDwM8>VF`893f-nR(1{8=2aDJWdht3JqUHxTt7|54~lDZ%X!w-)X>`Ylv zV1j3vu`1+Nf7qe0L_lS#6cB-IQI=}?d#YdzoT9+H+9*p8 z{fl7$7%(6zqYDU%u9$EnX&Dx_l74UsF#;Flyb2pWX{;a|XOnU!HAgtdEfY|0fQ*6& zX%^r@G(!n+2E7nbAwQaauM$ImU;xB1k_H^W0Rese@jnTxg}>mZ{}gX12!|>7yz#k^cM^~# z2opgS&aR>ACZHI29NWp|iwC+G7s^~2(S|G29JJrKQ19D6g&GQ8T zUnGR_fCh8AW1ld^U|PiR{HQ`Z&LP@)2F^q)U@Hi5ZW4wcMJDhec_Q#RLS7py*ZMgd9udkqAl4 z(Uh+MM=DyGE?|CiBLs>j(CnXK&KE*vG4T4pA!6Y4;0tInSRoBR3>)w&>~LN31JRv{NZa1dBtt7aIipxQ0F$r!3Vb%TFaA7K1qf!b~veo$B~ z0SkMB2wV8MIr<@w~0TI zOE#zyFS@@5oYB6I{DcR^6%Ph7ci_PL1!yK045`3)YB8r$@jxj8k|Fzhh?xG?~ zp~Y--NoD3TJ93ikZmUVM*Nd!~P1rE0n1^OFp{A)9tO_Iq{=(5;tlwNGr zml#cEN0Nm{3yqFE`xs_&mzAN8+d78n-Hsv}n#pc<+S zNJ9$jRZ_OiEaln@O92?0NtNEYTbw$b#yrUEaG9&L4u_EjfUZrxDJd4GvA}AU6J0Kc zr9dgHv(=sB1!=L_CF#;KFiB^*6&>W2xE)Rt1>9!-9c(t)L`ZLRxgC_HciZTbY3H9* zhlR(GqABa7F?G_6VU<;4iL3Y$S22xKDl%HE0485EtJ&x@OJ#0M%QwqdINEJ-C|Q*S zRjjfj{-k9XbVKqCn54~QD6`ngj8!bIN)y|qs+0Jzn2wSp#SMw8Vli<;I>rq_I3}*D zV_cPlq{@!GI06X zja*FJ>_DE;N*F&zGCH01LJLU2gd(mIrJRC(|5D7&(Sp{(Sz@mg*eS`qTWpfiCS~hm zY(|#_$SaQ^-Bw|=TBtWZpu7?yLUW;|$ijy}iIRn*Jk>5Y+kjJYS*OWrbek;pSckEa zDUle9jmL|vX=Ycd)oyfE0J#xXqj8QMbZvIXIq3)&Q!L9arzF|!KqZ?T<1}nhN3sh> znG0R+I?|M+Jabi!kzkK*cv`Il8lHD?v@Vyiu%ry!$+sFxi8T^Xtd*I>m$p{2;3mpo z@@*EZd6^Q;aoCH|vl3MUhNsEJyQm|b)sX~sB%VhwPW23n2wJrgP)Kf@=Oe1_o2SY7 znMPoDRTp)Vh^Q<0WQ!V|)ip#!UBf3^)JRa*5D|3^pX_*ER-H{LZi5Td>2{b6b)iVN zF11rFln92Xs_JGPHE!ZZ**d*JCRD50=`atMRM5@N3w8&=wBak{`#SiXlZ zml;dVYCMn%-3|v8sgv=R7@cCoX0uHygM#8Io@G~16RSsyDi7u1nUKDO` zbQHUZ*+EBhx~(o|G8Y-?E6W)tWVq8McTK2Q3Jf&49Tr=$Q~)Gml}7wAK_EiiW25Y2 zFbEMYG4mw7y~vfzL#A?42IVq5NO>8QrZ?N1KxYh`#3diQ9RdbjjWN4~c1Rh;&}5u0 z&`KG!zal5Himf?z>zHD@EnCF%ZKXDQr44e=U05QS%oP?aCS;n%6fG4RZKPpho~US% zg&n3~b{MUlfZ)Zh5~rljD+C=$>I}EsdIxfqln{Bthu-YUp&_L5Vda2(xLoFT?WJ<4Dp)Eb0z64_l^9(f{TMUAQn;W^ z$YY|WJZyqUS>3HlGoq%-grrCkmX4(3i^*)4Oi<=PP9_jH-#40o zfa;P$Go|j5OU#9(Dg{sP!Y;=N6;sw;IlnBj7a|QS1|?orz|B>lW+y8r4V4cYBh*>V z#4MdG2dY1j0f=2nF*_~A#H^ssncRiQwYkfPw4EG(eb7K8_qUI6LfVu{cAIq!?_XoW z2NlXmBZRiWAT+R{q<#TFwc_c8pl>Q|@hoNFu{1y^_I4X5K@J^x-6dykT9V{M-{vy) zenjp?1tV`KH4^~@q3JpqB#OS$Sgu6*NWBrU%HBA1OrctvO#+deOkqR0gYD(s7=TxR zmBs$P!0mEDbh0|ZrDVG7FbmMq3r;OTjwoyxQ!Oj7TLD#KTTUo-I(>pcfGrn1oO3gp zswy&cP<%qPln(lcma=#_YfwVGB(p=OSTO~jMQ*Frvza5|==6|-(`9!6B?>525h84i z`3{pYRw2i;UnC2P1$(ivW~tm&0(l4A=9_+Or{%TE6N;{PojeIHY)#RYkp!m0JQ{m^ z7Z|gH8kC$yLJ+a^N*N<4r|x{dptR+}=Ga5FN<5n|w-P1~r_i6!w8G&Ph=5#CRW=A< z4tBT83EHKVRoHw1lqQptwT5i2FmiH{bc1wRd5Mz7sc}Lq8Z{RFMHIGxXoT~z1Lv~T zgk7!8<*-|=W`_ipLU@mAs6>A~z{K2OiLmkEIqYS1Q+8#nb~ZhYXLGNf;M5Z=Y0L|$kYM~i3Xzg4< zhW_d-#~;P`Xtj{}##I874z>?e61yB>OymqB#ZqCRRAtZVyDv4^>;|*Lf&4PN%{<0H z`n8A`2s@RCKvIf;tb2<{o*BGP1j%gUuz|mbXqpnxo6V(i+F%D1Z8=;-QdSft#w!Ph zSuF)}&}4KO<)EVb0>R{z>*LVG7^B9x4yHqJ}1I0SZmO(7P(}SzBkb_PF);LDUIy5UppRhA{ z5;3DZNDFidICz;U%duCQ9a@QRSsX?wUAE~<;DR#0<$Ie{GSbZeS2+;i_Kf#K0ay`KmXz^Bzg9Q)K{j_QGs1ujVXBGmWrc>7;J897RXA?knWV%&uFzvgCX{$ zggVRc#e9M6!+(vqgl)K$W&bjJd!CS_Few5-bNmz|p~>8)f* zSEcgRwGdIabxJx@aqUbqR^AGzsw!#AjANniX29yLPUdZ4b1LazbuV-!N?Mx zEhVs>57BcHplUozr&l-XnTk(pj=qb!5cQk{oegFViy22-zM1;YK4nG!scuplIIbl4 zWTUA(3(N{dm^M~aH8Rgo#CrMU)f_>*x*}!r%7lTc21ygP>Q)w1gtP>8Xe4HcNz+CY?hcsv(li163g6O1wg;iC?0!t?{=fWUYK^AD&m~u1DWbLtq<>f54 zQ+bKqWsfZ=qcA_oGGSX_FP2jv{ft(FPZEvCkVJpDfHlO&#l`c|S@L0RCG;d{A5d2u z(7(r8%4vcaI(DrvthvmYmhv(qCFsE=3oX{{a?iF8BX;1(6}V(GK_k$VGfjG;CNoi^ zr!dN!!L0eooZf||+)gRQZD&Te%g#uhAPJ42le1myo0(w1V7AO=_cgvH8_Q~>V_8;=* z+GB!smOw!AGB{Gj0kVxbU8clDb5$YG0QAm`hH|?TlR?mpb45EHXHf(=O-6U!Xg623 zIYgB+n+!T47lp*G8t1{PG$IBdusX4(8eizyrC`Ha2!us@1y}=l>p};=%!_7B=fOB% zxI)!588PcL2h7b3NA@;m!@ogpYbic-KI+8Ij?UT{xUR)r#`3`(u>bQMAG$z`IQ3W9 z3KSW#=6LrU;D}tk!O69YRC}g@ZB>}$aTqC?q5DD{QyomH$Wn~MAC8Zttick%O+yt> zx#^Ic@KiRkOO&rx$E0=|XM3vQ>4u9gYI>EZ!$&Et?s2a>^ zE@LXq-eN0Nw0bNl9r0oP(w#s}ISlJvsW&D}CEmDTDBk!WI+q14c~byJCBku)aWz<~ z^pJ%_I<(N&g(1z#i2kT?(%mzSJS_Ji$5KEt zC2|<-MX`8zY=C5q06L3PY;L@diIK{%fugB_mSXHhG29+QXApd=D+H7Xl6Vp!l8)(F z{qyyC>B%}Nl@2fTWUb@4ujs7+zsQojd6@&?L%_?+i9}oAi-qtK0fd35g=CAw7?ot% zW>qtpZ-7LiM^uyMl?z`Jo0MdQ@xYf5bHGDgPR8bm7bsq$6Hu|#==T8mRNjrxw+Z7iBgukjBk>hQXdJa1TK&h*@gjbaGE@a+f~8} zj3$GTOwI7$s5A(uvr3BzS;bZ|r4N?FsaCg>(o$iAL!bnU&u|KAC@0;XL9)srWj!5* zgkgNgD1hnl_W-QGOU6ia8Vds@RfizQU!2mS12Ar(A&_9nu**p@Q7dW6?pGXV$>&)7 z0E?s_19ibw2CN%l2x?2A0TfRW(Yy#l`j#V2z@J;9ASy~_;vox)OPCVHL0aW;yl5)LuEGqOA+m)LO_oy-|D9Vx)( z2bS-I>x^;$3eH^vd>mqETwQ`r%2iD<=#H2wrjnyLcoc!QD2;O{&Mzp&1GyNHxrk|E z<1+9U|GcSs?5$cGkJoHwFxydd4il7Uo#U4FmP4IU;zP320tYwX!C^3 zo{-I{ZWYU#S ztziQI-z-3a%K?)agb(bu;9p>8Zs@Nj37Vd#EY}5nQc%gvjZWm$RZbXda~bUAMs&`= zpYhk1uaWXZiUg3SMpmZ9WFrn-Bg?Z<^UX*5Xh62}yKUIO;Antc|BwoIHwY_nlq%~V z*r7p7f>j+FPPq%`Oe*W9e3?k;rf*`|Y5uzTuF@}vJ{u&I0RYpTG zoE}XEvVB0O_jo^mqSvSl{B#pQ(~ErG4?|46bPjZYD6VY z{|q=N1LJ2}9+T2VOg%K&Kae@$8$d<|k3bhEDYTzqRvcrPNtrgYDtKDLcFAZr3kk{S z^rObgK!YYD12of`S-JKxFe2r+9XJ%>>Kg_M7AFbo8W>|4yhUh-LKaK;NQK*pc^qa@ zCwUq02u?-8v8X;24U#*mD#(H=EK-ysFEyr-9|i1ph1lc6iO{n>l9#eZuGlPLjZ%b9 zC_=&olnyk7VG`oo1)eS$6~&hg<}Q8eBR`K4?V}-+cI}&>CAU5a{w`!2ZmV&&t&xvT zOMp?_9At!P4Auh9E3g^lrgNui6nRk9xsN1F-IAh$sSBVnU?$`lpvA>zjq^bo?wao5T^3qS}l=DhL`ts-7QHmECQU1i%F&O z$awX^l>-Ob1~i6gaw$R0T={Jm`+@hMmEZiB$} zN_`}Wr%lC~g%nQiagrlEXR`7$aI~P3J?a{%vX>pNFx2iAdK&M9Hd{*38vQGBK$#A@ zhE&pvsK<2&u77d?j}xK~bbxB9a3^w+r5WL59C!1eksK|P;dXCQEFr+-GLrM$h6!KW z61$1f7@_}z6Ts+!-9Z`gMy84DV721I|8~?+*aif&7@Z|#DrK6Ev0d=trdo@Mc~m>W zeY|T63=%y;8R7dSdCf`f;7rPUif&?qxX*~wU7)hh5ToNJOm#sd#*pBGS&L!A6FxkVxG?x_4z@PlJ?& z<1Q1PA&H5j;GiVmy3Z(C_lY}+FYE7=0wbQY>beTf2hbwDO4g#o!rjRN7yLk-DawhaZ>@S<|>Z`CMKS64OC6NaMhJ|6me1vHRfCN4uxdJlnWnE zvp!|z)&MN0m_~semyTfI5(gCAU`87_;F7#2rJW{W7Fl8CuxAI#is`t=Qpj+oRmU+^ zAx_WCoyhgx*$LN!5;}p%V8-COSxiD~=Y-feerhF@txn3`kBVWhN;?UIvof}>mW4d$ z2VffHrAZsdpMR_NBO*lwrkxM2M^GRR^h8;DC3MpkMdYn|-tkq5=yz=p$I2lqPD z2+kmL(ue3WQnPb2wRwj8p@W7BuBppP(d8QS$=VE^VPL*CBRy{@Y%zxH{5(T;sv%RC znVl<2YIAZ78QFtXDY{I3a&CG~o-WIv)ep@|PEQpj2c@UzvJJG+&}N{9Aum^(rO(mk z>avoDasyM6HpP&VuFuKPiV6r1(B`M4XQ${WNn?~W1sJxZ>8Bhm4rMvn`t%_zFFO~_ zJV|^svRjiVMs8R=O$`FVW7t_UOV2|~aviN+ zugewH$>W9E%+1co0EVZhWo75;3@N%nI3UvF;%c%kM;^YwMBWjfkE&xHPfgF&=Xta9 z(SwGfA zK;?9qHE<1DY`tYSG6jtJxjJn!=B1Y#*mtK&JL2ZSsJ$-0b`;Oq{?X>I$^TOwUTs zOdqB*WM_GoRL_@RpU=ndp&UAk7Wgx_0wjh zV39?#XFUDVQ?xnhhC#rHbnrI=G6)|l3Lww6bcB4O$TtMQu{1GH63m1|Xi1 zuFq4D+c$e~Kb;OVD)8PnD>WlMtzVv4ygCbLbCb0xpeX{-i#6cq;h)icGxsU|8 zJVi(vZ=9p1Dqo z_kP+u-vsTDbiFFY+e3{EF%eZsnhNkomBM>h#l3AQqg7?fs*%8PI9vkJuxc16a40=% z5OlN@15hegBoZ%3CEQEOPfdkHA;t+_=*^TVKp-Jqrh(i|&d!El%E{Fwr|T6EkQh(W zrKJmicyzMV^bDPxre0Gp*A!hA%hF~EB+0Cyh^fY^%gWDWIhhQiGEbMuw3&iVSw=F6 z47r}lxa_sBxT@p`{)sswE;zbhYmk{+NA)r<0GB_4;xN{E3psI2) zz{rOc7@eG+?m>E}#L4|w3P6~~tC41+OF{W85hvXjqz&-}u*zvQ5Q;QtB};~Q61A$N ziPg-=P6L2Nqe?hKiv*Q^l$tK`eVHsUhB82Xwa6<&2mW+t@B?A;b)F8id3m|%peG$~ zhSoeeJ2NK(oQo$2`6`4hPw--D?W~OS9IoN0ij#gr(mexy2(sc0)gxOkT2~{GNCjg} zQgTzUe54NPN$T>>GxIa@(tQ%RO2cJ$vNp$4&KFd9Lv!TnwH2Ve^h}ZGTSY+EK)CLK zi#MWdPk4&2+kt#p151dSbsBcmS+%S?B9m~p20A6@=R(gh3<7yVdlSImv+=NSK}}-k zrpkwwn+aVyx_RRYG|ql$U~C=^e5>)v!C(3Ej0;HB}abAIrf%S~fLC zLsbOKYNuyHUXa#XM~1Jmq|p_&b!TLz}-t$vV{fJCv-cz2Bi2 zXQnDO-nUq84c_6K>p@yA6bi9EH5c8Rqe56!BDXSWGhhb*uNd49Ox!?hBMHsbee!^0 zy5NXyb$S`R2NI~9PeeJKGMj27^GdMF`PB1?`&3osC=#AF7Rj8JWJWfKY-ensHY-Uh zc>V^|!#*BP$}?joob%z`4Z6!o7bMBE#G?}O z(^fokW0%I@SY3X{tq4|bIz5Wv2a#~3La9Qj0_VTn6`>LiU^Sb-(LL;jCb}CAi#?8V zl{OyseZs7dhz=1inhog#?^2s9k-;B=yS67Xa*;^H^~AzN78jq;xl7k>-Fx(`ds%wa zN={14?a`xlGH(3Wm5kCukX~o`x-+z*gW5HqW>FWlGf+WWX9g;WjO5t-ywsQ;tlZg^ z<>aWfWf?u5(s8DwXY9!R|0L777?(8hjrZZ;Knf1ddvR&%TJck@|ZbGej z4$U8$z=qULN4uRn*G{Gv6l%3W_6oVn1i7Pl2G8ljcs4Yi4T-N+fhLdDshvTSuQP+* zX<+fOonzzWj^ep@Ag;J^??C$2b2Eds@Ly-LBerD%>E~kuoC~)^U!*fS|7{O-0&J3 zi~BB8atUq|z>z=KZIiOhF1oiM<(UghY`FSROt)lXqooX&Db{=5>P=E!+LY35g|R;B zaBPhe4Y(@U%y=;&TEIE6Aiis~K<9XbyUF1MguBb(&ItFA!(9;W84b7c!qUWoF45wm z6Veh8q^lALc1Dn2s6&`axXTfUkLDLCL}M2otx7b; z@xYiwV|+Bn3ACe(RXsj=Ovc25xab0uiRK=1i3MFnAOF;+Zzn$20MSrfH2Ay&bLtjd zl~|AvJtncBa~<%J`}YE|u0awI72r~Z9?`6h0oNXZND*-A5zS*BKy?*yOd>&q0IJS+ z9W&9t^t|TrtUYQ=k#4Lm_3*) zpN)!`RI>xZQcOVuFm#IkBPWxYt4yj8U_J{5nZ@HZa8F*uo+^2vS~_J`-8_>b)RE_; z(E7g%Lz%9QVRL{(tbQ4%}5u`+w20?@|grsVpA!0}e9p{IR+| zivs}EHKG#SmMynLcc_JLv-f(QFhd# z5xBXfz}yEHXvFJ>6r#)Tbd!U!@ie>=gkPfE7`gxT;kRmh<|X{Uc(d)9j=w7~ny#>s zyElJwt{uk4-y3k&9y?qK?6}!VeaiE26Cm)ED*b`SGoF+(4Caxe$+RNy=SBcqIPgg?w^`Q>wu)>pxdR7w!0! z58UlQSa?83)5^dFkz0{$!pV#LDrv%0;Z94yujml$OmMx6@1rT_fdmBFvvxMO)mjS% zK6oj6iz{gAgNb4g1b+{z{&QmjiIuiIl_V1nnmDd=r*_=ZL9?|Q^I*23_0qgVqZINs z_@5dffDDft!SRQJ@!nv9H`v)5?BWe}rQn^%hYO>4w@iWhKXuX`9a_y9W=OUv`C=+_s|DYXm84_%Wb9ZV(IHe*~djRr?@0cMO@o*|l zMP{3IG@+UUXJf=HW$F@S2I{I^O?GOgrfby_ButgW!+yX46I}PvE|E5VLShJrHKRRC z0$#asL%@bt0`MFqu5U(3xG^ApX~7vyMwNE3H@9c9|B2MDz+L<>NTjOF{4l26TH}t8 z+9gq1D%@IhNUM-v6_+CVNbTBH*e#|G?c>_x6d)J&Yw^TrJBo@YD?pgI$>noKphUd} zex&>ZKk_VBdv4J3IY!IM&eBQk^7^IgCHxzIf+GJV4^H)bkfH%%%vYHQ~yIggXFb=#`!*a7muYuq>PdrfXrJbI`qD ze#eAWzgfMqdPDUl3HHCW^oL?=$Q&qDuO@3?qQt7_?SB?2n^h@l`(gD~mt}uqd&p;6GVRk0`bSspNapLl`$5CU@-pG!@m&xt54r5Keh&WeJlM~ zmfqFbU`R-aGZ=8;0=L8rhJ?>KipGsx+#1)JDxN&D@CI(ueFV z_O51G#LS4<5wjv@L_8QdCt|f`vqoYO_?5ZV_@OBci(+kAJJz0cU>#XBegrUdd16T&jWLYem z<*^t^7`+;3#Kd~R# zWwwib%syoo*eC2d`;Gm~{$w}VZFYp6U~jO+Yzccyn&tNmyTX29f3Rz8KYNF5WZPJH z>v!1}wwb-oma|Q4re>CAw#Hx6Mq|_zXa;HWHHDgin!%b8nnyIlHQ}13nl74XO-l{a z^wvD8F=&Qq^6+eNk!GYOM`P6#Yf3aGjaf5PGencC(Q8UIqcrzv8fd0yp4Lp&%+O5K ztO_{IW(RB!SRAl3U@hAfury#^z}o?90v?F`Bw%eo`$%KtDrSx}MM|wBTK~@aMXqGc zBiFI}BOjMmvqhRk91ZOE3v6i7jWIt2yY>*@`{nO4xu%5)Q;s)!bNz`i4_rEYX3DVxFLliLu>O{Dt0vTo zS^wS4R@-Kn!q>I>Sz0-&-{=j$oYHQ6diEKg?=2`FFzO2+V z_GZDY%b%K`%YMYK=`m|?VPT)ffBf1oWZE9d*6Y!5OU60v$it4&#c%9C7tlNHP~d=D zlNuf^1? z*Cx8y=EY~@HXYI~Io<#0+^_nS?b`q5pVyBZ9CgW({MRvCm((f6E2`Iz{Ms24m~y^V zKxacn=sTZ|Yk0Ev=%Ac;wEk_w!^5^tmKuDjSz9vrgGqL&{-L4`ubne~+34n}N9TQd ztbOFX>XmDj9o>CzpAUvU(Qr*{uSd45TVdU}U3zN$l@CAIHow8y4+G{OSmo-OcKG}E zD-XPSPt@_ir<$E`-W68(?bE$Xa~>L1)^ORdQDejQH9Gg|?fSFZzQ;mWEvz>_Wp?AM z2Ns7sQ}VOl1Ap%bwu~5D@cZ6k^Tg5Jtj)g*F11y(IP~|Kjt8F|HumfA&-pAWo%z~cmzin>QvFp#i*KyTjJz9L& zV8QeQvl?zae16?eC&opbJ|1@Hz`@B$XAfPw@xjRw+f!dZ_(ij=PYjRR@Y^?)EA5qO z>+ZWSEM!XgsK&QH>lIw|NSI%f+Y8MvSl%nRaqxDjQMb?9tms_8 z?X__&f8Mg?xg8rni<|v{e(B;hZGyU0Z=4-`^o#a`PvvbZKGr&RY|#hn`x|%pw0Y@A47~FwO6ruYQ>kIeU|z5`$K=YlJ#Kqa~%)A+WP6) zOH;mCedPG7*RO28@zA1s23IX`B>d2)+rbsV13xStaHDxd`D^1e%Rf0&IOFw6Z=Ve5 z@Y4l*_PD+s-%ETfWAD{&=S?3reA4fw@vX-1PaS(-i?D<1M#QZ-@a2nFJ5O2h(x9X> z58VtrKJ=BaoWJhREM4&UGf@fEAGOL~o4ct=Uek#c@u$8xy>Q-d>;K#^x$QHzxAZ;R z_3EWe=ice<&Xj%j>C!5?Rwm~4`=6Bh96xM-*M&s zKZ}}A*fL^5i&tX4DgL_IWdHEtomLDQ*>BIspEPLy)UDEt^p!ilZT$R_$;}qs=$fDy0@{((hzuP#pS9QM#*cihmG+s0pg@Mh{uV@I7ixFGuYn!hi+*lOUS6=S z-4~vWX}G-OlLKaCeD_tikl=+4?S*-LKl%Kw$6kNC)z!dG!}k{UpE>!n^GCO=n3&Sy zlF?t99=NBh?egh^`hNL-)aliiTCG3YI;TmMxwN9yZ(k(*weq+8m&b1Ut6T4h3-mpP z@7OnCGcKGe96`8Z|I&-df-tnh~?jFB;{S&E+P7VmG?`RljySM%i-Jj2{&iQfDt2ebf zmo99R!@mBwS+6aNPE<5)JU`PpYEz%f&29xh@9aJx^2F$J-G;MA{D!=FrKpc>(Y{&j z7A*U{ZFs}c#*U+!E-%`->B@*VPfhsq%)>plKQrv-X|cbq`7nLP+)s{NK6q=@v&~oD z7iD<<@#N2AdcE;nvqyIK9sX-c@W@#W{WtBMnKJR+>(jpo8ouYZf`^9ZM4fI`s@-@r z>f${!TfI=evMjv8Z-Xi=y<436WURDd@ukVPlHT7kzpWW)*m`f?mBcgkA02nx*6YI; zch9-HV$rq2uyf&>xToAdjqmXF+o_q`rgS^7^UH>7mj?E2SwHEq$E^ELK0NKE3qvlB zSbi<7#f%pt9~`i6>(KIL$7lEPa~%#YYLdDr@+w=PoBP?3%ZXF3Ja1U>YSY#~EOn+v z{P6Xq;_59^uUFhGTb;Quq>6Qa>!DsbJK|UVno{}vtcWe2^qT(Xtw(++8Gc`A?8wLM z=VFd*f1}x|B~KN_9{YGi`sT*rXYNk#_)Nvu({{e}%7<_MJm}AcBf__j>d~}C=Qneu zypQIU-Ljn;G(Rl!>Z$L;_HKCLqsigYGg~TkOTW0-^UQBAJknuP)GyYF+81v}1yycn zRdAOxXYZD-rSE=4^gm?c*`wEj*SOxEJZSORh9#FaPJ8a5yTeYrI^g+-`cG>0di|5H zCZBS(xMzIyg5TdM4*&Gb!!tT|f3ey4IbXi`T5@Qwq`PxBE!y>GpWliXZ)v*nVz&-| zto(3KO!K&f)3qzd4SgZ%+xw3$_4{IiG}sokXzhlwj?e$nb-AU@D=`m0vunl4oTe2| zM`iq0bnSe3T<(^u2PXaY*yVli{n_ZgdgF&|GTho|omr~s^yv?~Z;ULPIlRXe=Tv7= z<|iF5yx-)>kvCU=eWr!^fy__3rhd`p>`wz6+I4$py!cn&_fEXIJtM4P>ix^|Ke_Sv zf}G;sJF6%CFlx}jehEk7UmG)`@!^P*SNx|8-}HL*@u3y%E{9~6Tfd)w?EB3H+;XZa@ z>`RRzkM@6b?BHe39^C(Thvx^jytV!7$aV9EZ66tb;>DeoM_f(c`s|0nxBJ(hIOuaj z>qZ${uIqL`wY626(X!^F?w?)O9&Xip{?t;_{kF|tywc;rxh=ombLypYPfor!IKR`( zoZl*&td7|5OiaNy_4cjp_r%N1!u=lmX!vuw=L16DdgPs{*KYsZ;O=(aUjMSn77_ja z?zhG^c&+Wcf|I&*4tN~-3ayUvgAa5dqB&Gykh^q#gfY2)#r`xAQ}7`Uq5y!!Fy zvlp%V;PQ>`1AFCs)ntCikY6%iKegn?n~$dTTzzv0>lppY<LPMp5uKtUrZsQsh|vPTE~HSepZ-sv?lpx@=HF3pchYyM=(EG-!)2BM!H+0I>zQ;xl56jJKqCfEACx7IfF~4!he|6EA(`O&L*{ADE zkC(o<@Ak9Wr(Ns9PF&AF;dTT(9`o}z%f2;D_+itzS9;%7@Y!qq&$jF5XKCg?^wRai zSM6_9Ec>bN>qP(Ge3<*wQ>BN33QkV`KKSUeu^BYG8+h-P`vPvf z@bRR(Y|f*%LdV=}`NO{DzdURu! z`q`^zPD|qkP21P>=bwB2nzHD~OD{+DuIS`Cc$a2a!Y{K!PR`7l-o5)DoBhW@M~`jZur@GJpSQYXbMI#N_CL8uw`AM+o!O7>ow+FSqix#b zl~>-|@J?yUkd{4{w>x*<`DyODSC+pJU(vs3;mfg|GpqJZdhn$cLtY-A@#EfEZThb< zef-yj=iiDLX-s`7VS41NE$uryW=(wkw>_i!_MJazWcjp>PkeGZ|JxQrxB0IK%PD$G zv+9{9m5-kP{Mwqpv5SXWPn}pXtz>%APisS#H3}G(HmbgB>GRv7(k~S(S{!od=Zvc8 z*f}rHANSawX@AVT|Jt$%6aJk1+H0AI%5Tlco!>Hwxm`~_{?yzqG1lKNEuY-XaMR+* zKRRXhx08ymJrpo4e9FLroIQKLTQ%Y3kb{dKJezP&X2U@b7G7TWc6`8L*SbqxcAO7> zq-g%tE!BG-Jl!zs*M~N>ynooLgg-ac8`<>O*BAcoVO`Ut-<*<9-;PX-+IxHR=N;02 zY@L<7eaHL1&Wib>UDMss3sc*rB=$VDWNK;r?txd1M}4=gOVX8@hZhgunfTFUU9}W< z@54`AD1C2aPEW1>v~A13?R6#PnfRScik_L-KXBN+i_TxxWl!suxWW2&$)HB9f86}j z+|ByuUz@dhRQv5CLawK-yOh*)$jck|Osr}!-+ur8mXrQ0&KmVv*~sT798WN{3|=$+ z*2)XUxlLbw$@RwGs%DR8&ieh+2glFe8UKpIUFZy7cK+pS53H+L^=Qm5ITs&qnb7s- zZwH@R-hAD&lWq)p_~^Y|&JMhFI4|I?Emy~#dn7eB?4bqAzBwK9N25(`5B)T3=493* zgMEMOkKCZQ{imPox8_7b2g|Up_MQ&u{{G>pBUy#6p3z%>KKMn*qTWm1J^fkA{nIp2 zyTkVF9z9fA{8;5jNndDUrSQeOK3aOM<2Nr}Xv)9<3T`Ddd1}DOzrWLFJsA9Z%d4gi z^Y5SZ%AQ}Z^jH_rVEXyXHhp363+Ll6{qWO+A)!MvzbkoqZ^LI3UOs#CGhO0+iu@hcDGHxc(fAZd? z&+MMj`_R+F=j->i4RKDr{NDADbzR;XFm9H#FgyIh$)`Uw4m};6aDUV1)($MWZ|+@- zx8C*QjW*iDouB+<{L2IHeJJ<$85`@D?Yy~TZ_4VeLrvG*x4(7Anpbu^zq9+dN3_=# zwfe52P3m|}@wDS_L|;pP(w_KJ&<{rUpk?nI-2X?y;@Ay0gWm4*#%q5}u=E_?^`7M; zDo!>0`sYb6J-aF^zL9DC2YcFncu)4?D=)M>6V-mf@?o1cU7XpfxAn7U?4A4~E&q(vS4&3qoBBupu(U_Mc%kJd3qLr~jQ+p4A> z+4=pub3-yZHqjrc%AHq!`?@)G#Jcy+eBJrivCo!2bfQtOq^#JgXD`0}*8#^L+nOI5 zKdQr^P3^zA+Iz*uQT884e|~XE!$3g58xi2<#z?3g%d)V&|ndpED@^^Vo8dsWT8`0DMi<}^ON!0`5v2Ln5Y zJ+g1^)JB8PJ2PKNzW(X%V{bjz;Bo1r@+<7gO#_|@KC}Oju4AQs#(lreJ$O)m*Wf9i zYMUn8KQTOf>q5)x!;SOa|0vyX+Zz}6PTjbib?DP+ z_)42~Mzc$8FF*aMscmG|nQ`k|EnfG){EDYvd8BK0;_+2Y7ft#3ba3Mhi|2Iuqa~o{hxVgC}R~&iyu@1RAz8TY`e%jx|+=ov!-|8It>iJ8dr((0Gg|+%(K))lU zpMO5>+G{VQ4!&SInxmLI>;GLV7`x*_UcirqXXJEp!cOSOg-S@>e*6u!es_l0R z?|EY6{aGzK51q7S&D0MccI+Gf@~;D;0+xncSrU;vv%4Py19;jm?C|c-R^-}8PIxMM z`B#CH;kFTU2vW?p@6&)II4aX$-2=O4hL`So16K`0Y{^Tu3w)U^yAV`U+ouR?7rY?wa-tEFG zmQR-q-j@~8Apifd_Z?tSEbF%a5Qpf1h@hZjLP0@-qKL|1Kt(ZN#sC8%62yQR1Be;3 zm@%N3F=G}`6fGvyak0=j^4L#kgsBXW=?fKuHjkz|qzPrW!%^59QfBQb;;rIg|hV}j6aWi-50G}By zJ71Jrsogm5*2UGm`!3efuiAgzoNm<}w^w|&#BR|Z!?BmgZv8{syG~=T*tr>*cg$YK zn(PTbH(1_&=Ei9kj7qH5baXvz!N>pfjptilZ#w^U*A;!HL`iF3`mp2W>`e_0NaYL1 zw=a}+TCLna<(_lB`@Q$gGOM)MVo(>;^!28mH9s#oHQ6PnVwdF;=6~{SeqylR;a2A} zzYOS|zULtu`F2;Z!^lP_9=pEvyzy|<6YI6LCV16cmpdn9a=W+nv|l$F(qp9Z#g%JY zH#@9%{<=l`%b~Ap)-{{p7CN!twh9gJ80C$cxpe9~W2cV0&+MHrpi_nYwXNp8TEEiP zCjZD0zimye7d#y@{anP;YLfbH@3u`(?-p?K)kSwj*q}F>-d|_8&FIPg=xV}-F7xf@75w2&{*D7P$9;4$zT14L zL&p~GTb|Aw^L6;u?-QvSDmxAo$W z7V}NJUc2Ubc1F)rLt2^@mU#Fp`+Tr+KE89=zK{XA15z(WJv7yJ+%=C|w>TC?5dbnd^apRoSW zX6Hd)zioDzINtbkv+ehM7u!WIzcKbfrtcqZ^i1+{M*8)RO1IR1_ITBtP7ZnPv#kv- zgx_ep=Ixvd7CpV@HO^{sG9&2i^p{_@YKHqO6$$mfn3kXE+(l77H0SibbxWSq&bt>7 zTVb_J<&Kq7)28+w?y-ON$K?|)ZPc`BUv0xHsie_@meUsaQI3IRitqMwr{g9D4AHu^ ztzOR-Z#G|k)n@&j7TSNvgVcDmQqo{~EcCQlo0 zcRZ(XSZiO!VV&VuPx*WtVPw3qsK=~oZC9Orv$BzLbhGc(Yi`=KalItsaoi%=4y}f{ zuX^r`3B9b>-p)LJ3|nBo_h{yUr;S^i)QAp_^LH$$l@PT%KaUE~%jJdI1 zFU{^`hVLlorm$CZqw_SQ+X>U5ScvA8phxL6ej=z2WrS9lP zD^J#n9aqaBzRJ1Y&6xat{;ErJdW?5__s;Cb+EyQ%+ALpsZAAT1&VIE_?@1TEZ#1{# zf?Ib#5AEl5&~cBM@s(Z+ukAf>EZDb4(Gb@|M{nQk+C*#L(LsB-Vx}o*jd!0^9 z$XL7Je1Ff3<4tzF8lBrJeCwfYZdSdb9zUv+c)<7UD5rVbmIt|ckMVJFSXy-|ri@>=>dJVB!RXwI--4kJFij$_UP$&-185+?2{;AlE-jyGA zHrTGQyVjPi)b--(45WEeXra2X&P@Fp%>Q9CL@0R+Q4TW z-d&d_IMf>xJ$}XV1z+2Io4EOHr8U#OO&ogNXUz)V`6VOC#wu>oo2#ScHE<) zqkKnrVXUWH=YVY)b2M7La(}qtgwu5I1=9zvt>~xKsrAdphnlpV(__#d5l4$^7LN#+x(p8b^QbYf8y9&}s&c(ZKOfhup`+xOpXHR);R;x7%IEw{y8 z`#g2#fr>XhdX#i2Xke<@E$7krH)#eAUVR^IUfJCEtNs1g*J~dkoB*CvhsN5zUvJ-= ztFguTZfe_GexY`ar1#I?u*uo!HX^9wwRh?Dny!^*pSz#3q1K#Atu7gywvqQ9cKZ0} z==Bb@vRj;7FO%1OyYaYL;gSd6QsrdgToU+4K>N6=9X+4CvHGM_X@%W@k7p96Y946( z>gD6PhB`rABcC}vo+qvP`o$BU-ug!8rwl4s?mV+e>vLanDvr1CSdcXC@`;KoonBe9 zyo_yC8n}%bpBsK`mA%=3kC|Rq&FUO0H|q4lLrZOr?tOo@NZYi=pj$&PG>Kf$Zmq+W zjqjE@b{NsxcfHN~y)C3)Zf^JMs_1nsr90N>gawM-Fx@U zJ#6rxN#{9Ddu808btpu0_}LjdtKu+csQ^`%>N^bkfBR)9lA=AL@HI zYYm0f969ZP*NW?sP0?QsP9$tjt3J^oK(S!_4dMF#WHFZuDUm&Lgf)#Kdr2ne^wUKsP24^gbC(LTCQ1gv3v`6{gZ2t z_=XfW`?kw0ZT(j}*QfSp_V1dz+R?K2_+6fr9@@;ymTbHk*;798(7v@c@8jzZt{J+m z;dBrC#LoA&pR}1W%IxjH;tsx!LmyAQ`X=qt%jjYY<8M2T^qQa>ak#|4ey#8YpHIIy z+h@VxfZ0*68lUnR7-h1vuaw z>UQ+`?V|o+vB?1s&P7dDF1&pGiMy_ANKmUSZ?`XMKkTEU^{2j1*l4Zo$G>+PS7Us| z+atfG8!sJK*x&nR^_iP{jG!vFX-Y&Ts4{3>$KE@5VVzUufqZZgJJENu_1FySsFH?42d~c#HIm1S3SIHOS^Ai$U~7ku7tUQ6nQ(ORj#lBL9jwk& z+q|#pi8`;km#p77xoV9+sF)-dx;qOv4K1xj~CE3}eeb@yb}1vY?;E2WNxT{T@H7qP=m{jPt`1q>HX* z&TXPCHxBGnWvcD6@7lxMx5nLi*;X^=re%XMgcHE}?anhtblP*J`7pN?&lVlZ^v?1K zUsXH9CGVhZiJsq<4O?*oa6-|}ZjCP2teWqf+@|G#>O~3D*6lypr`+)JhvwPsdaV~1 zVl*??-bG{n*DI6H^q#JzoEtpFE&HqKr%DzJcOL3!rW2Wx(7)!wsukW3UE|Z)#`4kh zlgp33UDYDOW>RK@skW_F`JO+SW%04oT-^S<5#iZx(vkINYkzL)|EzxA{oS)?^tR{| zc3WZ6&DY@6{;OSs^SgcBqj7y*!TqrV8#epWd`bAErJgg{C4&ParrhoR;qD~O;UhOc zcxV4&;(&)u6CWK}b1u-dZJh#d4f9Y*&WC5cN39$3CQ0#nGoSy1L)^X2T^u!g=N6xH z9bdiZU3b>ys#9vL%6ZUgTvb>^OrI(u$#e#-V98#T2mM+^*-+kI{F&0$TyV}l$&%vslc(f&uN zH)W%*?5gWD(Q@Fo$`kvgg*>oN)R<;|XM6oVvNLT1de|DC%IXka68A83SG#E&;>$Js zyw<$)nw6cI>x~sFy1cp@U7>xaD#M5B?apm>;`&jYshewzO3rTOQxN!y>gdjLk1V{n zsw8g9#v}FU#jtiEmmB3YH*ne2+i_&oHxn|(E%o}c@>+h_AE~+Zx>zqMY%p&7+P07H z#oA9UJUzMYHlrsU=C{|8y50&JVzm0gDMhy}NztbDwcc2J2c7Tp_}sJwG27E_DxXzu zr8QTsv90#tGZz&-=I*&~v-9Rb>t|z3I@hos6(0QEIlFjy_u^fy-;a#zx-zEerOZB! zw{8fSsBLJU8W3*&F1G$I<)gOowc9^9^~zyd$u?ihIkOr~+<#%&&2Ks-yN)TWJ`B7z zc2U2@H=4-&_x7u68U9vL&v;36Sdxe9+LOJE3Ts(y8>xt%@ACTUy)U!&6=oFMEm^(D zXZx+DkMd1>$K`fAh%W%|t@Vl>u4mA`Vx*%{e4`h7MV&8q^8B)DYR%OfPh{Pp&TG@$ z&C8jMx*Hbdv%>skvm;UQIwg0jw{LW)_0VCxBsU704Sbcn@Y34IPn%cP8D=D_Z5CEn zdE~^vZF$N4UU}qyo9H+FSmTclbKcEww?FmejZ=$f?k>4zW3kJ!<)nE3b?){TPWLsR zHRxj>h0($QodxHQXnaVCY1KzNdv5c<;xqScI`=v38E#$Ssm;xy^Q;#b$_DQW9o?h& zR9@w#>krAtwJ4ePtoDkuoikkC1i$KbzD9q&{3h;^x#JT~FWLWg?e;gaM+QM7;~Z<< zv77KZ!^dmOiL0(NHtsXJsAr|niinPGF~{THm8ZQ5m$rGktzY#e^DC!cYF{;X^U&TS zB+V9?4AjYaQ+=)1;?^sv$;%t({NrEEu3@%nyI0i47tijzs5U$8a>(E>qdrJi`|R1& zh{j}gc5mM5<1VLa3*$%6bw8E%qHoDJeTzPWhD-`@ICjJS(T3gT>ux&?j62${Usm~i zS-DZu>$Y2ZV$Pj+$@>%g8GY-~IP91#*`>1C@osY8$dbX!3|92Wd!F~kXWpUn26EZ7 zk(#zc(Pwqd4$)`!y0caFN15-vP3G+NhjNs+O#-g3Pz zhjj;^v>Y1tVcxT#4GmWhSiIgicZT!Wy9bl=bDmXMdiC}Uz5N~PPTV~{?a4uV-T4{T z3#<>w288XBzk7dZSlcP-o_Uq-T%R!b-lG>EuJ7v-cWvtF@)65=3<%$RtR(QuxLLtx zUz$n!b_&voxc#+Uv!FRrqmS;9@-rPmW&LvkJRhwK88*DB=A$d^wXV0hYBaTEgZ{qo zhWj>uZLw!rMDCHZH&Tv%Q8?d&aUOM@kPo98|-US=^V z%;<=8a5MV_10t3d2KAMMhj;m4g;y$04R*ZsE|5A#=q!F!S+XH|vh>68kL6DG4BmD7 zl<9$Io#WFFKL37b#`wT{*7qyiv2Qo~+W7b1u6GFb*`w^$WM7wy>yOfi>qi_5yzg)D zY<6q$&EzX52VcAK;akhlXJHK@Z-3t&GQ;amz`@I{wCtl?G_4p5s&E%}hCdk+n~u6I%SXifjTFUGdF&o0|_d0F+-H#evD-rKCA zL#k2ifwaEv#|}qqe|0cUz9M7qe$D*_h9h=gUGY4pjoYfLqjzfM+Ej?TYaaJ7$iOsV zfcq4q!C}qEh52oMWPHhBkse#6PdjQ)&|SUzO}Ry_rc2jfts;3hC{!o&k57R;`^5x@ zoVSc{9Tpj`^W=}~l}F9IRySXEXPjTiJ?{%&4&5IzH~saOiU-nL2JD)fbK}PPr%6{9 zO>BHC^JJ&{?|iQu33u3>(tyS7dJti$fo-r0-{Tc4;gc#(dhp3asR#;zX2 zbwj3VQ_u2?GrT7k92{pBy}RxX!~K;TFT6T;<>Q=mqw#lNA27(hUv1j8tJmLNFK997 z-rmnu@5DvMrkiIMAF}B)WY_2i76;mlo+0%sWaYw!4%Bf!XCg7^J1=-O`y99v!|$%*zQMpo zx7^=sIl7~3-jUT=ZT4K6Fzwz*8SMBVZI*YpH^|Y;V zJ0xT8z;O;ImEH&Y4XUhRH>7StszG|A6NYn>{Iu^^w%2$)r}Rf6_$uJf!4akwK2pF* z(Ap$}RjPGJj!&u9Lc9#m#PVl-WkS4K$54zaUJgYP9?zAAgtSVvh6Gy1wK~YigiK*b z@$|4Bo+8%A)5HcSgCU-nG{RGt#(3hfoH{W$KzPWwGaO`OCXFIf-Kx+-0UUweF_P)( zLk9qI*lWRXlEwfE*!kFwCzYkW0Ne`In@{C+-J!<-jbUFV6I~PNK|meYyTHgmIs<46 z`wjfHpt}KPR6+U>{&k^801dGH4E*tsr*r^N6ZU2>Pd^1{1^X%dd47EXE7;4(Ot&la zc%UilTR5JI&=CM0-qbq?HUwq^9bkWkKb|C&`U0ld|9b4d2J~~3 zUNRU@u1Y5ZEnq)_KPph_2jC%6y#(yPCGf4Q^CAGX93=@KfoVP zdrNx&=A^)(l-G5E9tGebRlN(?KUzyV5U_!r0_OES4e)~f68?BPT-qO~0y`1=4}zWu zG>3f``>zZg3E*K@y`x}bU@p)R_IFkLcY$q!4Ia515yCCeRM{JNWbV><&~QnN&kk+WsS9 zV`|kqr)vLT*tKA91@rov3bcm(9R9rh`vKOlSE$;50&G0It9M7${)1uTQ9ZrGVBVkR z06wt4!k@Q4?=$6b{3lfH9|arjpm$2u{=80Wz}^Vv>EnQwunXbO+rJNhde&Q_YX4~1 z?yzsD+CLmN`nBGEFz-+CKzrE5@aMWV9_&M4Ltr-00rnU8^Y;9!@t>t?|3IXv zj`SPA8o*?r1?d40|TykUQYKX3oP8vog< z_8*8eHb}o6%%kHr7Vw1q5ZifqdIOfQ7yUH;uc_KU6x(gFeJ_}ocP7vd_IvpA_WY~y ze_qx8!AMgJ>9>J-eN6>g!+rsO-v0dnYuGDQ?LPr_GuXMR_8$z}9`+Hi5ikevf&C5s zy#4=b{GV2}e-P5tK>AH!o<0s}3Hu5BdHeSPD#Ko?YX4~1?yzsF+CLn2UDyY}20%Q} z9`+~r^W*ue@qbCx{vk+H8|im~`TnK@ZD7BKKd(>q_+O)HfA#pkuWJ7xNK+r_Gr;A5 zc|a%FjAYsps;DiIl-D+)%Gwf{iMBRbYD=^#XnT^iwnQP*)+7sUiH4bWHL}u{$W68N zsFJosYOWni3KU(YtpWd7_*-&+3lnW!?yplpTgm+cWZGKXU(-z6iTgX6Y8!EXLv!up zg1;u#CfZo1=;Fkpht-M!Rw?DMhAB@KsWMf?UlP^DUkkb8FM_(_uX>^=j@Hu&ddSy6 zLf~sB@y7(d{9~&6lt)hdW2X94pwf?w&f_nN_}_nMU}eP1z}HJg@U+BVFgf9`kdzcl z$4MfIm0*#jDbbSXNTd=&iA-W4kxLvU3P}JjfO_BReX94x_hODuMSLvqvBakmK9%vY z!p9mP1wJIv(A3h>*49DLMUbk3o+{}76bya}hJO=`{w5gz7el%KVn7X=n3|R^Z-!6- z!CVz8s)EH&!Sbh2>2E^izX?|V#bEtk3_|;B>!98B^z`)&40v<$CgaV*t5&88CaPen z3guOS*PA%-Iur+WeX3bquWJ6OdjG-vsk;Bc{F~~p^mo;NY$MUJZ5Rd^&s6}Nok#&& zk-|q8;s74U!!cD{d1#ykg?XqyQ1XOTY?91o{GZfu_JwU_9_0&;TX_ zEr3j*Ie{BoC0isjle*l5HJUp06l;kfGe;c7zGpq#=u;lBXALL0CoV8KoL*{SPk?C z@_^<*IxrFV1CRi*fG2Pqs0JhfO5g!t0xST!09ODfU^g%fcnjzOGl6!%S-=+90)zt3 z083yw&>Of7xB-WNvA`EV8<+~T2C{%!zy=@~cnnkk76aXZ9H1ev4;Tr21dM<=fDe!j z*aO>v!N4oP8dwGN1MUIMfHYtNPy&?45tNtc(IW67a940w@HOx?unX7)ycfI|90iU7 zzX!hu8-NYK@!)uHdvJU3dGL8~U2t9SHt;rZI5-^q0{jA88C)5>61)=J2iymo3(f_* zgWbVLz(>H*;ArqS@Ha4@wRFML!PCKQz-_>%!KcBs!L`Agz?;A!;1KW=@Dp%Fa7FM^ z@KSJ3a8K|}@J(@M!QS@F#FNa5?Zi@H}uQa3}C3@Fj44aDDJj@J{d$ z@DT88@M~~Ya8>Xc@EWi`*dKf!d>`xq_5f#qGr*I;lfVqj!2C?00OUXbAOkuBj=)fW z-v?<6)By$o7CLw$}T?3v!&s%-|#_W$Jt)7m)wt<$RrjdrRM18hLB30mJQ~UAq@Up1O z!1vAf$@haR8?*(X4GC>QsDC0kPzS)>EVMb10_Y3`07HQoU@dSA$OnEEe%?RdH{UPc zC*L36mmJ{xPyhiy3~&tKZ4~pL$$JK0Fu5V}&^6!_)rAi|3Ct*aOe~M>_R(b-vtJy`87!K0+MI!_)pL z9rnf3iqlC@Z|!YxKMkl4T*mDr{V<~1ZHYGH()R@50yII~OE0t);x%wda ztquJGx)O9|YvkvRz60&xiF#{KG^YhoJLt`bn*s3PkIU{Ixb(C{2cN7%Gz)eA1h>*+ zQ19JqBY&W6HS8C756r4TwBML$0dNMl0geGZ0XHBVm&HSyl;*4ce~=y89_4ip<xpsaEg4^eGzEk}RD zqAQ~+(IQ|DE~|NPQ*o(P_P-J`5C{SW0KvdOAOsi$pqN+-;aGqOU@#B~3<3D~!<|N~ zr3mvX;e1P&*9mJI!aRdA17m@40IE>97w!VaaKJi%uofcBPo?A94a~0|;wD!g(BZ2%tGA0H_Bz0QCXnr9ibSuw8+>NDBBWP*n;KKmm9HXnI9U zpcR0wp+J=?+5qTA3N(WPT}6Q|qL_sIe83$6bP+{opbLO%S9Ars0cd6gnp=UUQlR-1 zy#YS}Rf?3SD?-nsB;DC zT!A`Qpw1Pja|P;LfjU>9&K0P01?pUZI#;016{vFs>Rb^Gj0YwF69F8HA_j;B_1#Bn+PUjeKH5`k5~YG4hp7Dxit0qcQeK$0)n1=CdNr9%rQmE94w&!HPI1S+HWxnHEfFr~(UCIy&Txf5$~~Ig@c#$e9IarJTt* z$I6*4=Oj6E;+!dGZk!9`%#$BRWO2o*T7EY9S{vN_A$SPo}} z8_VOYbYq2_W8GL0=Oi~)%sJDIG0p{UOt`8dPsYC^B)KP(aaMRT3(iVUCg&XM$!s|% zc`_%?nV!szbAc!GCS>ea>I4k{F zA?H{>R>V2Uj}>#y^kYJYFYsf+6(t2S{v9RB1DTAoB9K{dRt7RT=h#4I%Q-2KIdRSm zWNw@b0+}ag3S-`!nYZ8OEYH7lg4m&J@MsIm@G1 z0%t`OOXRGKV#%CiqgV>(q$rlkIWvl-aW05rS)3`FWpkECvmDNfXqLxW8O;hg$40Xv z&Pma%m~&<{W1I`3@of~C;uxMqfqxvsH6Q%rm<4BL9Fud7jbpZ)lj4{Y=gc_f#{F9lCvm%*Ua8@QWIp^49X3IG#nK^OJOlEGJ3zC^9XG&q- zoaHIZm$M>;`EgdJut3hSDJ+b0QVNUWoSDL+ITxg`IL?&H;yKGxSpsK8Dof<7Ol8TO zV^diQ=cH7Y$~iNYrExAuWm%jljb(F|r?DK)c=$Mvvoek0PsQP%#)>#6rLkhpnQ4r1 zE=Xg-ofOJq{8<8$XE7OPMHaK*tjuC^&aqj{mUB`TbK;zt#oRa-WHC?9l+C<3%d?p; zXGJ#iamdII|!;(42=CBmb zNjWT)b7l@p<6Mx#vN%&7%jPW4V>z4^c`T2!GLIEce=S=k z=l)twOwRqa+?ZVO$J_{$w7i+EoU<>pRdDuWwt_$A4#7W+*$Vzq%vSJ^X10Pq&Z$UF zTJg+D&N+cODL5xGC&3@*9Kk<@ISKx$%t`Q1V@`rU#v+oFRyK2!bIxII3eI`VP4Guw z75s~so8Vu}+ysBd+_=9~wT6>QnWvoFGUln^Y{5LazZ7d6?k}}vp4?yR#5}pb)Qx!x z{+^|4KPlD#avtx?ycL}Nn77~`$h-xA%#nhB6!RARqnWqhA6L3&lw$4>{1ce3;Gf8R z1^;B`EBNEwD)^@|U%@|(`3nA7rE5(o&N+gA4)YWI^O&FDU&#Cfe~d}NznJ+6{*3u? ze?ux=qZ(qZ%KZ&xEKtGOf(3GaLpclN{)Sk~aeqT67Rdb#-B_UD?^(LGHN+Z6&f|Sq zn1Zt(3lsbUS(xCDHGtqB#li&tXci{;$Ca*$4KX(g{s}Bf@K0n>f`2lL68tfD2>z)o zO7Kr(QG$O~=~~(l=TyNzheZqic`RD+FJ#ezKh8OVe=&;|{27bp{xT|EgUhfM=l(Jo zi{t(>3l_)yWpWnB{bg9Ia(|fHx?)OdzP-RE zSiInmwT|E)&Ef_BxY9MhES@C@{#XMD{)sF>@K0t5f`1B25d1Mm3jS#B)9&B6W6ELbx4HRKY))r3(HjELHHw8bI(*W2u6FR_V2nSvE@({4qBQ{&_4- z@GoR(f`1W96Z|oE2>y(vaeoUcy@s-ovMlazfom%6Z(+f*xW9#*WpRHCTb9NBEpW}j z{Vm*Bmf-JMdhKQ5&9db@-j`)7IAcvN_y@9V!9R>;3;t0oTkyx4Rq&51y=JqBXE}m@ z0?QHnv6d73lUa`7pTcqk|5TPE_+zaj_-B<~>se&8Ji$MQv~QLISt$C_O5k1M?!5?b?_^T%W z-!}k$-vB_T{e1)A_YDBP8vlI*;P(vxepU7R2Ef1j4FEKbI$y! z1fJk~IsT9GA%zUacbNSYYT)hMp^?Gz!NCJUM-CpUueJx_g>Pk6#E{Wt z2HvXX->r48mYq8Jw({@n+qz}DuI)N?RApTwbRcr%W%2U$Y~$0qW4E#-{%zZ}Y5QXj zzs^Rk+Hr71RPf&={ZZ!N$N`}P_4P~NV9TpQwM9NKVu*5tyZETp$M+X|S7-UJWF^$( z-{e<%H2);Gk&&SThYTMqAFLeFKt9qR?>!6)4&v_;bl3m!7E<}B;2>wY(tqfXsL)?* zYJg2aLn4L@|Ah-)4%u?Zkl_Q|^+zd(kLB;h6Y?76|H};xGL;NqEw-gb!_#c z_2md&YD*9P7!Q92{-kg`5RvytlP$ z=s5l|Lu@FGSCvNCo$3fD{M3Whhox?DzN>$F6xf&7aAinKUSY`i#{sJ{R<}nKUMd|C zJlwezjs-``-^5o|hriyLx+s6qwf>>ve^JFh6;8Ed=T>!o6r!G}8Omy}?1=1sI;8*E z802a;JKHK0){)poD3nH2UZNv40_;5H1ZG2u@B8jT$-sGao01 z29D0~gHI!;QXf7S{o;%)I)k~$$Bslb^PTbaP-$HZ55cKNh{IvFK}GTR&hmN_-gO)$ z7dFAqfgj*6PkrKv)mAo!xhcIk2BXiM9PH<(>%eWI>?*YmLB_`&J{wJX;25* zVEX^t>5HF1{z;$z=L6#Z+wp=v=jiI(s6j&~N2f-A9xZ>i{xf68!O67&h9FMWDxp?F zE0qqEpZ^yRAUCJRd^kBfplp9Lf*QKHmX4stPA=R>{(A)de>j4EkDve0+@l^g|H<*= z?Bv3y6^tJzC+7zLdG$~gJ$}lrNB_fDlfTz%d=mPfT(AAr^6TdX zo3d=h_~`WvkX+ZQ8c;Zr{PDW2eqte7kn*-lJ!)-hTXf zTK>!}4_c-4<9{iXRZBdd+z~%243^*r#$xbXZdHK)o%7`mc(&F9zed;&<->Ej5zx0< z6Fo(|wdap)1hJ9`9;IQVO7r~n)REwRh&K}1s0KwofNBtaXcWJ-p%88UldSwFtJIK# z+QSFMSNH%Zw(x_bI1J&(NxOhcQmDG5L05(pgx3;=?Gfj|f_2nYqjfN&rJ7z{)LLx7>cFkm zSacHwHVHqD%9#i3_h0&P)$T~wQ{~?SjIs(p)Y=4$<5DyQa9n@;qp&!h|Im-IO8ARt zgrAYcTSo$fBA5Pm0nsA!Pm&iF9YqMdl4D`V0O)f3zTXbH3h+5rAQ0H6fWaemZY ze`s_lyafS2MFjAA4Fu4!2oN6wgM&30$hORv3lOFB~UD)6}NeIp64I~bN0tC}j2?&UIl<=o&O@q;uvXsgqd zlSls0iB^(%JdA8){_h|R;Q^V(se}IOrtD~S@|-p5mct7H19_~BOS}MkyDw*TaU`A_vItf z{vsVF(vc!PRivkh^bCT$?&X}Rr zmC+}wtNNia`k`8%)b60I)>$HbL9Z-+twEXYJh`#1I{lQmG95FeOvj3}%-GaWoxZ$C zR}g8rNEeH>Rhh4>N}1L~UsC6(E7JNR-5qVJPSanc2a5C*k)AHnvqU;kq}Ph{D`-CV z@K7X*x000Yw}wauiu3?zwXZ~R%tT#IO`UKvb-b2HYm2mwNb8BT#3xi^e zr1eBv_7}RmC|=W~EPsiXa|QLj@IKccT1%vLMOrG-dLpea(qvMWkKNcC@*nx5&;QWq z^J=XLt*$FV|NjvWt&TT0n(C~MuPD-5lGY>D@il4MGIjb|(CYX?!w%YfEx^M&qcZJp zT&DHV-_&V>(57lVMWhXIjOutpkv0`+3zSWr#!{rUB(oZ-<8|MyZAETj2 z8;P{JNLLo=*&>~*(x=cdtDw)T^K>+8EaUny29uLW2kb44=Vg1-{j7;Py%udVRcnc6 znbs8PwHl6Q>NIWJlxfLlk;eH@orXLfRZwevk(P<{>vRWmbs8#}`9n)Yn*Jz@ucXz^ zlBeed*P!i{)xMe{ZT_Y#-a@1;MY@_u*AVGiB3)ag>xi_2NV|%3W07_f=_VrGOr)EO zw1-Hy5a}3^mV7KbE)9{^6lpDy))r|Uk)|(Y`A9@sL!>oDT1%vLL|XE-EFUT<(-M)U z&Zlas+lacBX-$#V7wJkOy;P*Bdzr69q%}lZQ>1l7+DN30MOrG-GLfb}W&6?)X-$#V z>Q|QL>(?^y*nouq%qANK6bIsqZb5Er6ReAy{^`T1l zLYn8I_!5z3D$VmDgVH>u$XHvX^;OyfX$(c$RHeIPU*$zwuF|{=)kNv5t2EDF;@wym zBm_5{Z@G5FIn!OG^KkBMqS8E3Yn3*@%>^%&UWIdSAC=}mG~8FEH$wMQ>ANVize<0B z4p3=^{FN$Q6E_$FReBN91gUgoTij4mr$GUORr(cG3s*)~R$e%wOwOdKwlT$ttal8yXu_dNATQ zs`N?Zvq`02qCA^bn)_~1X}+(mD$Vz`O{Mw1QdGJMZhCB2X}+%=D$Vz`Q>FR7cBwSq z*KU>O``WA0ynXkn^l%*Sew9XbQJPA-<0ehIO7na&RGOFbm`d|999L;xhD?>_WjLYI z{8&z^G%tUaO7r|rsWd;v(<;r&c}Arxqi>v5=^jXPPNg@MBRVhA*(yCBH=-`8G=CZN zC6$(AUpXr6iazFr^#Jc1i;$-m)&OdKN0p`x>gR?^pG2RztN@^t3w~cho&K0e`>N&m-y%&IQ7>fu;A)xi-;eCUPziw6Io}3kt8l!dhLew}`ZXsGM^( zwpUiCSu4`iy)6E9_ie&CfoH2H>gSzW_O zt|h7msYpxSm!(;&QMRrK8eXOw<2qEmUt3&nsB+?bpht&Pc+V`>+IE;OcdAxNRInJv=NF>0)Sgn!C`LCWR1#I#j2R73nD= zJyoQqL96qbE{dNa(pyFQHQ97SuFl_7q|1x6nMhX*bOW>Wh76)&{JB(IJ}Y4J%z zq_ss_N2D1vrWPTz5XDPO^Xh1-^ATxnXf0KI87c7H(Q|f{4a0X=?eV4Q6LtZ=rpT7x@1*liH4>Yf1SLZzJZ~UaXGwRx4c;e^NJRhl`30VSE(wmR=q~eS~j)o*xJ>t zXYWwI>>KeW?oFFD_fY)x7vp{U_UrE-pbQMcPc(%L3JnX77#uld=&<2YBSwxIJ!b5< z=$a5bJ9h5cy=QOgzWoOd9y)yFXj*#4vE!L1PG+4tedg@B^B1x&Ub=kc>b2`RH*Vg# zeJA(sy}bMR4+9glAUcM@N{pRhv_a8nMfBO98>$mSEf8b}t|7Sy|BTDU% zlzSc)_N}^otM<%eWpV6PgQ(Xk`-?|GaQ*6&>W*uw+t8nNYBiTh<8NyyRD7(gGYBfCG@YJ8#m92XwetWn9-TK=0P6HHh*JQ^8V9{r1#u`tQKCO7uJ7}?QSc2+I$mz zY&e-(9dV$)*ROd??eXi<`_oXbQa?9{)?E0@s z-!Gm9R~<~3Cc2W|`P$^w=>V-B=t1_+{poP+k@Wb*X=)bzmOi=Z(n8-^^ey~3Ro(4R z(tdNuQL_g{fA^v{+rmkH^b)y#SV0fBSW|!H0+LoPq^Zk;X|0(*&B2RPV{S339pyth zI!<)1M+G{&If|kS0w{d;F|s__hO$FWklxd~)H}|O;zymNjaEyj)y{il+4Bl*XpR?m z>oRhg=s}szPia}FJUTMLnQWS!peo_7Y0c;U)Uaw3n)L1*y`64Np|`}ZqueIjj3jh^K@g@X!7fZ zE1Rl^=&gQbvb=bo);KX5SS5^>_f%5Kw>C6!(k-eUe1M#v&ZNSO0D65gn<8BGsGrAm zGS9n7z1;ICZ{o$0;xCbG!yLk{H|P@HKX z#kG~t$GLrI`>sh;<=H!G>)n!MA=hZ@y<4=yzXgRUFOq(pWV*IIm2@_~qrRgj(fZ6d zQZ}7Iv!ce(&e?u6}#?)9zxyEwWf2oU8&CItCXpnL#Ag(la`Gc znR>0Hlf6&UnXFdivu6RGFnCYbTW%-Yc8{rqzmhBcJ5@=zKtnGUQTgT{>E+uP+WX`L zo&H>h7HKEY@nOx$L2oY^w0=)BOcQCFJenN#t)VsxGb!4+J{fi&Ov5+Lr|>6L$?5zO z8f)%No?{E>!~L1`G+`-T#59GLJ1wOdufoaS-<6J(7*pF7sT7hNLBoc(pgH}VX-$QL zbo8+v&2g$lpGLTmqqY?p;oYz8rGuzmQ7>wWBZA;Cuk7eYwnLHK{RRV%t_SU*OnR$I7WkS$;i2_Gxg~( zk~$8%POZB|l7ZfFvilfHW&?Amw(ctGr`4HK-E-;rs4SZPr6RQppFq~N57UxRTRL?i zg|?e@qxl74G~@P6syDndX(gxAXx#*Q?>H2{yjYu_58F%wGuzRC{ARTDUL39WSV}Du zO2}y1Y;y9kX~sYAlqO^ytX@o+OQ@R_T>(K2- z*3@ioGWD!Hk6g3$sAG#~R6aeKTx#s2H(M)Fr{K+W_4o!d@F+)p#$;2CFQX_LuVb89 zaX6jY*p-Gv7SQV#c%Q9zFFJYW0Bs$3m_}W?gd2?3wEL|+&0c<-PHZ1d)7svlPyN=? zshAIx@}@rBd%1!<`W~grd4p;G>8fOxyPwwA!kvwsD`G@bP?{Q9fl8(`s?%JTlp!u; zXEBX@(w<{H?WB2wBWZDn8#!h4p(!`plH+}II&I&QYAGAi*`XK7@%%x`h$x|CT1VOu zkI3)dTBDu-kzlLk^a=r@exgR*h1EO zPEeAwD@hL|)AQXpM}4YB^Fkj{Z8n+=HDhpIx2I0oYe~LgIqh9{jq3N)r_?Vk$mGs> znvi~(R^}e3Z57k#+`3qjhV>sa zx*(U(uzS3`o!6qcp4X4?=QfSYy%haWNTdMNSm=+H|LF;wg>6oG+>D-N` z{MHw!qwQC^aqbK~eeX%*2jtPp0k`OOx)UWYJwc;;U8m58S@h;kc{<#rDS26VQTLJl zbT#cGMJ_x=DGvR}xYaANYTkmBC#REb$uoL#<2_X$e~yMMXh_ohEMhn3P-IvE?J7A% zi=@YCe7_MCzI_j6N3Npg!=vexNf>>)w1sS=?$f@rhv@)yp@Ka|G~#egdORV3M%=J&2=A4 z1=H%$v+Gmnd+HW?U37&U8lI*4c+FVjYOSd9?K2enU7x;rhf#g2Thujm3UypQo4QrM zKz7~l(y>!F$iQ+5RT_GbLKhDp8@~YZ@GYWACgteEJ`?(W{v$OwY7Z3A(|#A|UjG0J znY)q}y1b^d6%UfK*GhWO^C)$RJ4Lse%jn*)wq$R0k9OjGrr~w7T0d z>NM>u_0aiFkH_wynblpX@%HKzvgj^#f4Y?>+cc(gPgYVFqhwm{vYWQtG^SAPwiLYQ z4NaP{iDq^ekKOub6fGQ*T+*vzLfO=r^PlaJ_e zZZw^2l1Vlnp3|og^nryL6uiDJHCwcs(#9K5a+kYQ`(6-*KDb9K5-e%6?P3~qu@33I zN~Kn7>`NGSP=NSazX(U$)WY`!{IG zJtdjDYG9vhC~jR64SzM5+~$m<$p^PkxN~3fs*OkM8oZ*bG@8DD=uVQ}K9oN!1}oVg zLGi8H7Y}aPw;ItL6tm3hb5n3YmkVR?bp@XGsr<$btdQ3l#~)~osXqB3e@>9B--kBj z{D0az^Z2N$vjN|mnFIz9kwqga9g!d+C;>#ERM{mO7D+&`YM9JS$jD?S&H|(^q;9Qs zLyK!cacj}KP{pOLQ{%qx#i)pDT@W|it@)n!-g9P7h6##afBonC&M(i*z3+X`d)~9o zz31M0awAuM!c84u9@pFMx7|<2(Q<81zHchBukO*zlXx@Y{%|6}3Zs#jET|TcWm~O^ zXf(W#<#=nGQel6R6?wz4VAz@*msM6>b!&DwnU1FXv3QClds#L%$!d9l+GrSqDSyD9 zN;O%t!ik1R(pm906pls0A!}x1IN_w=#ABx+l1d@RiDWuh@2`tQ!+v}Tu>x=~6;Cu} zkFeZqFq}+UQ$-`ZG?Gjut+|0{I_yuyDBJrk1@xz~N35i0*eEYsFUf67^~>93~e$TUSv&5#FNRPZgT!;B({k7fzZ%+j7UxnUDMWN zolB=QuuPdvipOH^vbq$jEN58TiST5pj-oPG;3ls9$ch~ zQm@sVt3Or5ZWG8=Vnvb`k=w0im0GtToI;7qnq<$Z z@px>ZRn^o`8;?eUP9d{UNW9T$AF)7#Y8IkYP5WpF#G3r^Mlvep?_^%p0XcQ5Bos~t z6Ol&R9KL3&bz&fte^}a8us#wE`E`>NC0#sD^USu$T-wqKk`h&l&rBiP{z5bnr)-zR z(-@BjgXx4-l?u=S-98qKFQ)TI51W;sCCAfAKXn|I&eE=D1q1ZeD59z9n6o~!6F(x0 z1WQ@Ey{&;Jz{1!4hN+EYm^_ijtVBE&XK6=O|5BpLL$|}{YDd~_ zEr*j*GWa25O_DMVr*Jfxip1REMb$^Hg-%x)&ecse%_Rw%iIaV21X0$qho$s$`D`an zrW+Xzq)4kA7hEF}A$LSv%7Z0n3GGEKKBRe z7++O=`IGhOlrv1_eiZ^ynpdbvD!DNcUnm2WG4PpEdImoPPS>pu#6t9n*|b+WOKuQ5 zJRRq^AiOjf4u^1#thh^VQOoIA$U4HQb|rFtF{bl_7O9Un`dQChMq?t)c2}bh`4@%V z%E}eMVMwGQhnF@=|FQJG)3E8GjH|9tRvJx&WwCU68N+!poN#`KbK79`=-bx|ZB+pKCAkJm%fkYAw0Rn&_F~dDZUj?PFb0vV*;%sB6*a zl2FmzMQue#d;aC^+Ue<{$BREMex>-0qJAY)icYgmE{b~M-cPO1J*CAjTdkhTlIo)4 z?Ny$8n0Gte>Qi)=b&IFLYO_!C?qB?kcQns3Otmk!ZZBD5CyT0V`_7_0v$Mnda~867 zIKX>|cWzckA78zdgj?Ii3yNdK0VeyNwzb})CGVGfQ_`=~m`)X)j^Q?UEbUTj%!d{JD=F*#{E4i+&r`_y-B zZRg+T{*y>VypYk=+I81mWwTg5xGg0g@?M7%cD1^6;kc(uC+<)9x?;{(!ojXqiNsMc zm9F#EUGHFd2RY6i{vyjKVxPPw(%s&(n^xhwmux#9K3B|VH+xSeiLzlww!HFT`CKud zJ?z2qnu-oP$%gacbH#k}*B5EuzJ2ZPYQt6c*?Y<>Fgola8_tK%74zBKez%9b>Y_s* z*>FC5u9#2$a+CM&to?RRee=Aex?7;4c6`&oRrs;v+wH-BHUjzacJh>{mPEZ<8QNur zR-ZwZp^ax~&6&D86HB(aEB+uUFi&!bqjr|h4foUzlHQ$NWX>jTS&i!^jk>3h4foU zzlHQ$NdI}#Zz25_n&4fw)s6Vwh~JI)-Cij@$L*cc+p+2N7U`MNQ;6%dK556&lJLcn zyW?dbcj)$o{XsgST;co*Ccz<40W+Zr=0gC&un-nO14!px2B*Loa3)*;7r`pH3jP8& zz%6hq+z0=F2jO9O9wZ0lvdc>)wis_!<}#! z+zt1@y>K67;2&^5NF#Uv9t7&$3Dwwmi2aA*YkGhnvPal|6jmN$TWdj&)+;&o81l#A zdvpbnJ;DBy@C3RWLBfzjZJutDrH`M4eY-T`nIHf+)JpAYsK}w)Hl$ci>%Mj@x<<-iHrB zm*0nMOZjaADZh_E!ba?DX8U94ywtWfvA+?UGpbS}YHEg$sSP9}!J0@sSrMF3Ra0Kh zC03$_waFtXBvS}tV~K6~DL)mb`~WwSduGhJ)i$D9A<~QzSAu+sKb|dZZQ9ld<$!Cf zV@qOZ-H+Sh(oxRtJGLW!Y{AYal*gy4Of0F7f@QK~t1?+)l*vfq>3nQeCLKq0%A}dN z6690-*+!XkXi3WCksr6C%cMg)QO6U@nnxLYMwxsLE9f(V$hNTm1$fyW2eY6QbUf*c zx_|0;BGdg-+Fb~Jk?Hapsp`G%M=DI>u9ozSxT?*_ne&gdKH3{`zr^>iK-%$p>?U@NdWtYtod7Z)Ry&O-(Wtio~4!IGv6kwdrmeKM=PK%rxXTO?Q2B=(Lf`f3=cg zD$*&&d0nu#yNsIFQwFLW0vQERS!nC|)^ zIx{OPCseb`_Vk%Erc_UuJ>S`$QdKqKkSX%Ro(s(z23gIIOy~D{G4rICSB zY*{DmVmBW(-fn(>A?^CIm%4%|D}(I03v=1nP%HCw%wNhkwp;-Q z-Hi#;ty$B#G376-^_PYHW!3(&`BquO{$-*4%bKjRX=BT#k1eaR$|~Fqe_10Xl0BX~ z58uj!jwuCr%&(i~AI)cM#?e+&IBCV=ytH$;ZGXdC`f`!tp4iEcYB6xKXmtYlQTBmc zY01eGCyUMrA18~>EAMhmB9|U=;n54^BBBp)vg(`+$`zPgE6FtoC#%k@_Hu&A$*Oab z=;wP+=ns3r04Rfjur~~XePA%`3qxQiNb8W3%3)9r!(jxBgacp{90;Rf42%Ui`IM=4 zIRTZa_k&?POn`|%a1wp>P;f0`1qD0dnFx3l4|bAZ@)G=D=Jy0_K67 z*d7VLhNIwUI0kB90sObpKc2KsfD_>)SY{W^`~UiPFFI-|k068~40W&&>LCKh!Xl6# z=>~`a9ca7O1nH>$1K9a*q`!6j-&2wsJlsd?+)MeT^Y$IuI4e>Sn_&(*&On5(W{|!r zOxnNnS*@$LMOS3fzodW4_H<)g`ja0-E+d`<*_J+O>Wf^5LdUhP z*po1<&bIn_7=OSI5>_DFlkNUWwin+6pbQ4W-Y^LEfx)1ImyI8zxX2w-i_z8mSe&1F z+=K0tvHNqGXfyWx1h!>=F!2k5Uovk0r|8Is;iO*>(w5(a{}lP@d+m?PH-&9$U)sYE zkhU}w_JjRl7?i_sa2{>Mmq%!4BiTOyM1K?<2%}*Pj0Fjs(EBCZ<3RL&1qZ>wFdimA z3cUoRAq)~^+zNnnr@|pH z4JzPJI1DObI?RBXFbm`&u^Jl^ia`93?|NkNt2jau}0zQ1--iHH&@lZIpI8_l0mUDvNQ0v?wt4U=i zA-tiSPs5e6=~X4irHto;_;e)v8jb=U^s|nE8dw10Qxts(X1R3a)8u3Ur-++TX$G(< zY1Tqe>_ZspU?J3lq`7gs(wv;$x+G{5^kKt!81EtjToR7@mKSIXY$`Y9icA4e-E1NAq>6 ze7n`VX~^dQwXJNAsj10Ycgj}At|92?v1?>j!5k^b7dn#fb3yXG9L|ID;g7HaE`ST+ zBDfeXflER1y+-+A=6h3n-?I63X5I?syMsA7m2Yq4r{p`=7-pd_dHNGbo>sytxC}0b z)o=w|30HySqfw<{=3||bnf2G0*7X$dCc4rNbL>Nu~tIvcRa zwr;?`8$t4M6Rd^5!Od_Btbw|b9l2w}nHki{)dZRFgp3pc5s+{)Tva;r<~uO7YjI_<}uJCskak(Sii26!Dd!W-}=yajK= zJMb=uPwTher*il98`o-aw;cY3ElKk|cppB14`CC01e@Vw_yi=)O5$x#IV@4-AaPc! zG(W|br1=?q4qM<0_!7Q?ui+c`79`Eg_NST6=hrID@319leh>dvc1s%zHIu7<+&Oi`JMd%#LqU6Nfjsm1^n!Moa_76e*V0HM*Qr7 z&4PaBh8JrZI^w5|Z{lYW-yY>>z4FQIBWnx#`SS-E@$-&CemW*|<@t&7)2sX}=DS4s z*(0%az0Xs!_T?!?f8JmtelEb~R^{oK%=x(z9VyRF%FoVx`=E>R_3i?`zJSaacSfs+ zLY=$o(wHReSB78`b?W)r4#`g};U8Osc;}Xoe>@Z!`K4flD=3!)BI0ONZ z`A-QlrzvyAg^tPn0zH2t^ELT#_;d#4@Rn5>S8osQBm%M~@J9z<8tlc38$`(>7u z9M}1mdXb>_bs3svA;-=9%f6XU**Ehg`(_?wU+jrb66AiH-j;ni|K8U5yXeSy>9)>m zMMvfhcl7dTCF}$;jtl@jhH>4S!tObp{65V?M}mBc4GB697h@{Ul5k*A zE~3nloQm%5zrntoDF&A=4b(;!mzR%{7?Fk=nLMnK*KekXJ<(r>{!(bKe;{$Afn+i- z0&&)$+lzekhCZ+}>;k2*EA#~kgRm`nyMd{i8a~W9m`DVgYGUCfHPLWvVM-4x z)>3pl#My_m21~+(?~%#9^L^PL0+QCL$lSEb%cJpyJT&IKbLHr-Q8tDu8=}7snb@vM zl@E7QG$Ih|RTXDHBhGt99G+9DiPzO60Td41A^UY0Jez$Pmn1Yyu!|m@Y~NP2X0j{LpUY&lF@m4% zXHF0k7|YZ3<>~$somnTky1&cQos*~A3ElB0xw<~5%S#GwcqUJ`2=P%$_pVB<<$iya zrz>_FmF|amK3topD|XLPy3st{@;qI6fMT`M-Fu3?uAf9+vCPc?o0cq|FAJ2*;@`5E zyevK|i_XfzbjN}$M915jJIdm-*MTf@B@1oKqO-EtvMiP@3(m;`r?NPyEJP}cj>_UV zvIwXw+9``~S}YnZ3#ZHC(XwcC5qMygb&Pi{tb<`JcsvEB!7QkUBwPbGgT+EcU0NEv zudjaD+rv7xcqixyy`VSrft_I&D1}|&S?KOLws>Z7tFK4zR^Oyyt-f2!TYVReY4x3X zaI0_2;jO+i=Cu0yAK&U5x~$c=yt&mkVtK2t4wgd(dVbRC8~k~zuh*BYz5y_9x7~O1 z+;GGmhwgV`zo8RX`+vcrSc9N*^UGczoPXuZ-akTJ(eOSe!aaVKK9T_8xof4b0t+lEsT;5hBskp=8(MuJhon(&Db~KxyCNu6<#5@QSS~ zM@!quh7fhR0=pN$#c&B+3V(u`umEHcwOXi$2qd5ZVo(PQ!Na0!N8dKn+W<@8LWn^e zM0N~>AOg$aJUAcv7oXytbJZzc+q#{T^xL}^LkV<(oxl$l*|&E;$8&pkPj_T2WVW`= z*Yn67p4qtu7C->3&qoZf!2>0-?b&%`5pa$=RKSJP2A(9+#Ey5NMhFYDjn(vNEOjh#~u2ln9T4){{p}B|HYM zY;M+<#|@eGAhsgv@icOWlC?oBb(cNm+X~?uMZ<#Ws_qHL^zPw|~l-|2qX4KKY44L-jJyWLQzHi91FCUmP zrT3vB)4psnWlHZOk>Q85U)_&38#3+7$EHlhm18=t_T^Jkru05DWZD<`)^T+|+LD#! z>gWqYrhWO+l&LhnGGyA9uT7cK`^J!IU%oYEO7A-@GwSGjL#BQCw<%L`e=ua)mo`(T z^yDW5~2G4Aj_j_4HU*Y{;}PC8kWJ(aDf$UpkvIrRU4a za&^?jkZE7Knlcr)n<3M_>|n~2UUx&Lec92JDZL(AX4KJ6hD`g?)0C;Wy$qT5rMD?l zdVLI;_GM>Nru24kWQ*I?QK=!*zU*qsRNTIXO#8B%DN}m88#3+79;Qs`^~=g~b@U5E zrhW07G8K1EL#BP{Z_1P&Cpok=$?x23+Z|xalwO&Z8Fe(!kZE7`Hf1XAAVa2o*~gSA zy}^b|m&?AUOz91AWT&^QqoIaO`?8-YQ*rkgbn-O#3pyL9W`qi64(OZ)EL&)^E%q$Wf!m zjyq`l#K}{q9a=eK*6ixJ^Nu{~m<6?=y82_IvBpGd@zUR%a8mQhr=I@%Kb&>W^7B_* zc=4qxFI#=()qh@d-Ss!Fy?NbjciegRy_x$Tc<7PGo_Ok+=U#Yeee0_mHop1xyYGFl zY4azaZTa%+Z@+J|yq&xC=v}(If54z2!$yuCH-7T8%2{*f9~}rs8jedho%q|+&N%zL z3oco8#WmO6c=K&{-h2N;k3IF=ORXE;eD{ORpMCjlo7K5TsehmHF%u4*ePr#i$>UEs zbH&Q5uU~i1gHOJ=;oZ$&wply%A2E4O-ICv5a@}1|ytcW`8ZfQlyxUsatU1@UapG^S zJ%cB8{=k3qJd-CrU^%RYHE=!L2uIO=rq6Z%IiNTDo9q52%2;I&I~|R;_jBK;ka-XH z7nqSuemVW_=pdR!J^J)1+Obz3`&#=PnY+&mXJO`SI0w#!Ku=C0qqp!!__{_zSFoYvDThD_jpZfLsX4l*+YCseHn|1lz73jZcCz z2jl09e#JygHe9aySyrGnRv}*rsjrnSCC^va*I)L0S+q!kY5mrGb!A1Y-v(>GC5}{! z3hmQ!Gu6c&EAKsz-_heP3!qdBIewW+P8`4E2Qh7X#X;LIZ^C6?)nR@s`!)~TJ#pZF E0HNs6J^%m! literal 733634 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≀Uw-1-8S$;y0R2Sd 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

ZS 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

!TJF!_@tvfW(LH7{L4DqdFP2sYY~ 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 VC;6Z_9tYoNXLjVDZf%%i{D0h-7~}u| diff --git a/main.cpp b/main.cpp index ff56a4a..6574e45 100755 --- a/main.cpp +++ b/main.cpp @@ -11,9 +11,37 @@ int main(int argc, char* argv[]) { ZL::Environment::width = CONST_WIDTH; ZL::Environment::height = CONST_HEIGHT; - game.setup(); #ifdef EMSCRIPTEN + SDL_Init(SDL_INIT_VIDEO); + SDL_Window* win = nullptr; + SDL_Renderer* ren = nullptr; + SDL_CreateWindowAndRenderer(CONST_WIDTH, CONST_HEIGHT, SDL_WINDOW_OPENGL, &win, &ren); + ZL::Environment::window = win; +#else + if (SDL_Init(SDL_INIT_VIDEO | SDL_INIT_EVENTS) != 0) { + SDL_Log("SDL init failed: %s", SDL_GetError()); + return 1; + } + + SDL_GL_SetAttribute(SDL_GL_CONTEXT_MAJOR_VERSION, 3); + SDL_GL_SetAttribute(SDL_GL_CONTEXT_MINOR_VERSION, 3); + SDL_GL_SetAttribute(SDL_GL_CONTEXT_PROFILE_MASK, SDL_GL_CONTEXT_PROFILE_CORE); + + ZL::Environment::window = SDL_CreateWindow( + "Jumping Bird", + SDL_WINDOWPOS_CENTERED, SDL_WINDOWPOS_CENTERED, + CONST_WIDTH, CONST_HEIGHT, + SDL_WINDOW_OPENGL | SDL_WINDOW_SHOWN + ); + + SDL_GLContext ctx = SDL_GL_CreateContext(ZL::Environment::window); + SDL_GL_MakeCurrent(ZL::Environment::window, ctx); +#endif + + game.setup(); + +#ifdef EMSCRIPTEN emscripten_set_main_loop(MainLoop, 0, 1); #else while (!game.shouldExit()) { diff --git a/thirdparty/libzip-1.11.3/CMakeLists.txt b/thirdparty/libzip-1.11.3/CMakeLists.txt index 472a7a2..b5fa1ec 100644 --- a/thirdparty/libzip-1.11.3/CMakeLists.txt +++ b/thirdparty/libzip-1.11.3/CMakeLists.txt @@ -5,6 +5,7 @@ if (${CMAKE_VERSION} VERSION_LESS "3.17.0") list(APPEND CMAKE_MODULE_PATH ${CMAKE_CURRENT_SOURCE_DIR}/cmake-compat) endif() + project(libzip VERSION 1.11.3 LANGUAGES C) diff --git a/thirdparty/libzip-1.11.3/build-emcmake/CMakeCache.txt b/thirdparty/libzip-1.11.3/build-emcmake/CMakeCache.txt new file mode 100644 index 0000000..7900cae --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/CMakeCache.txt @@ -0,0 +1,887 @@ +# This is the CMakeCache file. +# For build in directory: /home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake +# It was generated by CMake: /usr/bin/cmake +# You can edit this file to change values found and used by cmake. +# If you do not want to change any of the values, simply exit the editor. +# If you do want to change a value, simply edit, save, and exit the editor. +# The syntax for the file is as follows: +# KEY:TYPE=VALUE +# KEY is the name of a variable in the cache. +# TYPE is a hint to GUIs for the type of VALUE, DO NOT EDIT TYPE!. +# VALUE is the current value for the KEY. + +######################## +# EXTERNAL cache entries +######################## + +//Build documentation +BUILD_DOC:BOOL=ON + +//Build examples +BUILD_EXAMPLES:BOOL=ON + +//Build fuzzers for ossfuzz +BUILD_OSSFUZZ:BOOL=ON + +//Build regression tests +BUILD_REGRESS:BOOL=ON + +//Build shared libraries +BUILD_SHARED_LIBS:BOOL=ON + +//Build tools in the src directory (zipcmp, zipmerge, ziptool) +BUILD_TOOLS:BOOL=ON + +//Path to a file. +BZIP2_INCLUDE_DIR:PATH=BZIP2_INCLUDE_DIR-NOTFOUND + +//Path to a library. +BZIP2_LIBRARY_DEBUG:FILEPATH=BZIP2_LIBRARY_DEBUG-NOTFOUND + +//Path to a library. +BZIP2_LIBRARY_RELEASE:FILEPATH=BZIP2_LIBRARY_RELEASE-NOTFOUND + +//Path to a program. +CMAKE_ADDR2LINE:FILEPATH=/usr/bin/addr2line + +//Choose the type of build, options are: None Debug Release RelWithDebInfo +// MinSizeRel ... +CMAKE_BUILD_TYPE:STRING= + +//Enable/Disable color output during build. +CMAKE_COLOR_MAKEFILE:BOOL=ON + +//No help, variable specified on the command line. +CMAKE_CROSSCOMPILING_EMULATOR:UNINITIALIZED=/home/romazan/Рабочий Ñтол/emsdk/node/20.18.0_64bit/bin/node + +//`clang-scan-deps` dependency scanner +CMAKE_C_COMPILER_CLANG_SCAN_DEPS:FILEPATH=CMAKE_C_COMPILER_CLANG_SCAN_DEPS-NOTFOUND + +//Flags used by the C compiler during all build types. +CMAKE_C_FLAGS:STRING= + +//Flags used by the C compiler during DEBUG builds. +CMAKE_C_FLAGS_DEBUG:STRING=-g + +//Flags used by the C compiler during MINSIZEREL builds. +CMAKE_C_FLAGS_MINSIZEREL:STRING=-Os -DNDEBUG + +//Flags used by the C compiler during RELEASE builds. +CMAKE_C_FLAGS_RELEASE:STRING=-O3 -DNDEBUG + +//Flags used by the C compiler during RELWITHDEBINFO builds. +CMAKE_C_FLAGS_RELWITHDEBINFO:STRING=-O2 -g -DNDEBUG + +//Path to a program. +CMAKE_DLLTOOL:FILEPATH=CMAKE_DLLTOOL-NOTFOUND + +//Flags used by the linker during all build types. +CMAKE_EXE_LINKER_FLAGS:STRING= + +//Flags used by the linker during DEBUG builds. +CMAKE_EXE_LINKER_FLAGS_DEBUG:STRING= + +//Flags used by the linker during MINSIZEREL builds. +CMAKE_EXE_LINKER_FLAGS_MINSIZEREL:STRING= + +//Flags used by the linker during RELEASE builds. +CMAKE_EXE_LINKER_FLAGS_RELEASE:STRING= + +//Flags used by the linker during RELWITHDEBINFO builds. +CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO:STRING= + +//Enable/Disable output of compile commands during generation. +CMAKE_EXPORT_COMPILE_COMMANDS:BOOL= + +//Value Computed by CMake. +CMAKE_FIND_PACKAGE_REDIRECTS_DIR:STATIC=/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/pkgRedirects + +//User executables (bin) +CMAKE_INSTALL_BINDIR:PATH=bin + +//Read-only architecture-independent data (DATAROOTDIR) +CMAKE_INSTALL_DATADIR:PATH= + +//Read-only architecture-independent data root (share) +CMAKE_INSTALL_DATAROOTDIR:PATH=share + +//Documentation root (DATAROOTDIR/doc/PROJECT_NAME) +CMAKE_INSTALL_DOCDIR:PATH= + +//C header files (include) +CMAKE_INSTALL_INCLUDEDIR:PATH=include + +//Info documentation (DATAROOTDIR/info) +CMAKE_INSTALL_INFODIR:PATH= + +//Object code libraries (lib) +CMAKE_INSTALL_LIBDIR:PATH=lib + +//Program executables (libexec) +CMAKE_INSTALL_LIBEXECDIR:PATH=libexec + +//Locale-dependent data (DATAROOTDIR/locale) +CMAKE_INSTALL_LOCALEDIR:PATH= + +//Modifiable single-machine data (var) +CMAKE_INSTALL_LOCALSTATEDIR:PATH=var + +//Man documentation (DATAROOTDIR/man) +CMAKE_INSTALL_MANDIR:PATH= + +//C header files for non-gcc (/usr/include) +CMAKE_INSTALL_OLDINCLUDEDIR:PATH=/usr/include + +//Install path prefix, prepended onto install directories. +CMAKE_INSTALL_PREFIX:PATH=/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/install + +//Run-time variable data (LOCALSTATEDIR/run) +CMAKE_INSTALL_RUNSTATEDIR:PATH= + +//System admin executables (sbin) +CMAKE_INSTALL_SBINDIR:PATH=sbin + +//Modifiable architecture-independent data (com) +CMAKE_INSTALL_SHAREDSTATEDIR:PATH=com + +//Read-only single-machine data (etc) +CMAKE_INSTALL_SYSCONFDIR:PATH=etc + +//Path to a program. +CMAKE_LINKER:FILEPATH=/usr/bin/ld + +//Path to a program. +CMAKE_MAKE_PROGRAM:FILEPATH=/usr/bin/gmake + +//Flags used by the linker during the creation of modules during +// all build types. +CMAKE_MODULE_LINKER_FLAGS:STRING= + +//Flags used by the linker during the creation of modules during +// DEBUG builds. +CMAKE_MODULE_LINKER_FLAGS_DEBUG:STRING= + +//Flags used by the linker during the creation of modules during +// MINSIZEREL builds. +CMAKE_MODULE_LINKER_FLAGS_MINSIZEREL:STRING= + +//Flags used by the linker during the creation of modules during +// RELEASE builds. +CMAKE_MODULE_LINKER_FLAGS_RELEASE:STRING= + +//Flags used by the linker during the creation of modules during +// RELWITHDEBINFO builds. +CMAKE_MODULE_LINKER_FLAGS_RELWITHDEBINFO:STRING= + +//Path to a program. +CMAKE_OBJCOPY:FILEPATH=/usr/bin/objcopy + +//Path to a program. +CMAKE_OBJDUMP:FILEPATH=/usr/bin/objdump + +//Value Computed by CMake +CMAKE_PROJECT_DESCRIPTION:STATIC= + +//Value Computed by CMake +CMAKE_PROJECT_HOMEPAGE_URL:STATIC= + +//Value Computed by CMake +CMAKE_PROJECT_NAME:STATIC=libzip + +//Value Computed by CMake +CMAKE_PROJECT_VERSION:STATIC=1.11.3 + +//Value Computed by CMake +CMAKE_PROJECT_VERSION_MAJOR:STATIC=1 + +//Value Computed by CMake +CMAKE_PROJECT_VERSION_MINOR:STATIC=11 + +//Value Computed by CMake +CMAKE_PROJECT_VERSION_PATCH:STATIC=3 + +//Value Computed by CMake +CMAKE_PROJECT_VERSION_TWEAK:STATIC= + +//Path to a program. +CMAKE_READELF:FILEPATH=/usr/bin/readelf + +//Flags used by the linker during the creation of shared libraries +// during all build types. +CMAKE_SHARED_LINKER_FLAGS:STRING= + +//Flags used by the linker during the creation of shared libraries +// during DEBUG builds. +CMAKE_SHARED_LINKER_FLAGS_DEBUG:STRING= + +//Flags used by the linker during the creation of shared libraries +// during MINSIZEREL builds. +CMAKE_SHARED_LINKER_FLAGS_MINSIZEREL:STRING= + +//Flags used by the linker during the creation of shared libraries +// during RELEASE builds. +CMAKE_SHARED_LINKER_FLAGS_RELEASE:STRING= + +//Flags used by the linker during the creation of shared libraries +// during RELWITHDEBINFO builds. +CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO:STRING= + +//If set, runtime paths are not added when installing shared libraries, +// but are added when building. +CMAKE_SKIP_INSTALL_RPATH:BOOL=NO + +//If set, runtime paths are not added when using shared libraries. +CMAKE_SKIP_RPATH:BOOL=NO + +//Flags used by the linker during the creation of static libraries +// during all build types. +CMAKE_STATIC_LINKER_FLAGS:STRING= + +//Flags used by the linker during the creation of static libraries +// during DEBUG builds. +CMAKE_STATIC_LINKER_FLAGS_DEBUG:STRING= + +//Flags used by the linker during the creation of static libraries +// during MINSIZEREL builds. +CMAKE_STATIC_LINKER_FLAGS_MINSIZEREL:STRING= + +//Flags used by the linker during the creation of static libraries +// during RELEASE builds. +CMAKE_STATIC_LINKER_FLAGS_RELEASE:STRING= + +//Flags used by the linker during the creation of static libraries +// during RELWITHDEBINFO builds. +CMAKE_STATIC_LINKER_FLAGS_RELWITHDEBINFO:STRING= + +//Path to a program. +CMAKE_STRIP:FILEPATH=/usr/bin/strip + +//Path to a program. +CMAKE_TAPI:FILEPATH=CMAKE_TAPI-NOTFOUND + +//The CMake toolchain file +CMAKE_TOOLCHAIN_FILE:FILEPATH=/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/cmake/Modules/Platform/Emscripten.cmake + +//If this value is on, makefiles will be generated without the +// .SILENT directive, and all commands will be echoed to the console +// during the make. This is useful for debugging only. With Visual +// Studio IDE projects all commands are done without /nologo. +CMAKE_VERBOSE_MAKEFILE:BOOL=FALSE + +//Documentation format +DOCUMENTATION_FORMAT:STRING=mdoc + +//Force C/C++ compiler +EMSCRIPTEN_FORCE_COMPILERS:BOOL=OFF + +//If set, static library targets generate LLVM bitcode files (.bc). +// If disabled (default), UNIX ar archives (.a) are generated. +EMSCRIPTEN_GENERATE_BITCODE_STATIC_LIBRARIES:BOOL=OFF + +//Enable use of BZip2 +ENABLE_BZIP2:BOOL=ON + +//Enable use of CommonCrypto +ENABLE_COMMONCRYPTO:BOOL=ON + +//Enable zip_fdopen, which is not allowed in Microsoft CRT secure +// libraries +ENABLE_FDOPEN:BOOL=ON + +//Enable use of GnuTLS +ENABLE_GNUTLS:BOOL=ON + +//Enable use of LZMA +ENABLE_LZMA:BOOL=ON + +//Enable use of mbed TLS +ENABLE_MBEDTLS:BOOL=ON + +//Enable use of OpenSSL +ENABLE_OPENSSL:BOOL=ON + +//Enable use of Windows cryptography libraries +ENABLE_WINDOWS_CRYPTO:BOOL=ON + +//Enable use of Zstandard +ENABLE_ZSTD:BOOL=ON + +//Path to a file. +GNUTLS_INCLUDE_DIR:PATH=GNUTLS_INCLUDE_DIR-NOTFOUND + +//Path to a library. +GNUTLS_LIBRARY:FILEPATH=GNUTLS_LIBRARY-NOTFOUND + +//Path to a file. +LIBLZMA_INCLUDE_DIR:PATH=LIBLZMA_INCLUDE_DIR-NOTFOUND + +//Path to a library. +LIBLZMA_LIBRARY_DEBUG:FILEPATH=LIBLZMA_LIBRARY_DEBUG-NOTFOUND + +//Path to a library. +LIBLZMA_LIBRARY_RELEASE:FILEPATH=LIBLZMA_LIBRARY_RELEASE-NOTFOUND + +//Install libzip and the related files +LIBZIP_DO_INSTALL:BOOL=ON + +//Path to a program. +MDOCTOOL:FILEPATH=/usr/bin/groff + +//Path to a file. +MbedTLS_INCLUDE_DIR:PATH=MbedTLS_INCLUDE_DIR-NOTFOUND + +//Path to a library. +MbedTLS_LIBRARY:FILEPATH=MbedTLS_LIBRARY-NOTFOUND + +//Path to a program. +NIHTEST:FILEPATH=NIHTEST-NOTFOUND + +//Path to a file. +Nettle_INCLUDE_DIR:PATH=Nettle_INCLUDE_DIR-NOTFOUND + +//Path to a library. +Nettle_LIBRARY:FILEPATH=Nettle_LIBRARY-NOTFOUND + +//Path to a library. +OPENSSL_CRYPTO_LIBRARY:FILEPATH=OPENSSL_CRYPTO_LIBRARY-NOTFOUND + +//Path to a file. +OPENSSL_INCLUDE_DIR:PATH=OPENSSL_INCLUDE_DIR-NOTFOUND + +//Path to a library. +OPENSSL_SSL_LIBRARY:FILEPATH=OPENSSL_SSL_LIBRARY-NOTFOUND + +//Arguments to supply to pkg-config +PKG_CONFIG_ARGN:STRING= + +//pkg-config executable +PKG_CONFIG_EXECUTABLE:FILEPATH=/usr/bin/pkg-config + +//Add SO version in .so build +SHARED_LIB_VERSIONNING:BOOL=ON + +//Path to a file. +ZLIB_INCLUDE_DIR:PATH=/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/install/include + +//No help, variable specified on the command line. +ZLIB_LIBRARY:UNINITIALIZED=/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/install/lib/libz.a + +//Value Computed by CMake +libzip_BINARY_DIR:STATIC=/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake + +//Value Computed by CMake +libzip_IS_TOP_LEVEL:STATIC=ON + +//Value Computed by CMake +libzip_SOURCE_DIR:STATIC=/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3 + +//Dependencies for the target +zip_LIB_DEPENDS:STATIC=general;ZLIB::ZLIB; + +//Path to a file. +zstd_DLL:FILEPATH=zstd_DLL-NOTFOUND + +//Path to a file. +zstd_INCLUDE_DIR:PATH=zstd_INCLUDE_DIR-NOTFOUND + +//Path to a library. +zstd_SHARED_LIBRARY:FILEPATH=zstd_SHARED_LIBRARY-NOTFOUND + +//Path to a library. +zstd_STATIC_LIBRARY:FILEPATH=zstd_STATIC_LIBRARY-NOTFOUND + + +######################## +# INTERNAL cache entries +######################## + +//ADVANCED property for variable: BZIP2_INCLUDE_DIR +BZIP2_INCLUDE_DIR-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: BZIP2_LIBRARY_DEBUG +BZIP2_LIBRARY_DEBUG-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: BZIP2_LIBRARY_RELEASE +BZIP2_LIBRARY_RELEASE-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_ADDR2LINE +CMAKE_ADDR2LINE-ADVANCED:INTERNAL=1 +//This is the directory where this CMakeCache.txt was created +CMAKE_CACHEFILE_DIR:INTERNAL=/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake +//Major version of cmake used to create the current loaded cache +CMAKE_CACHE_MAJOR_VERSION:INTERNAL=3 +//Minor version of cmake used to create the current loaded cache +CMAKE_CACHE_MINOR_VERSION:INTERNAL=28 +//Patch version of cmake used to create the current loaded cache +CMAKE_CACHE_PATCH_VERSION:INTERNAL=3 +//ADVANCED property for variable: CMAKE_COLOR_MAKEFILE +CMAKE_COLOR_MAKEFILE-ADVANCED:INTERNAL=1 +//Path to CMake executable. +CMAKE_COMMAND:INTERNAL=/usr/bin/cmake +//Path to cpack program executable. +CMAKE_CPACK_COMMAND:INTERNAL=/usr/bin/cpack +//Path to ctest program executable. +CMAKE_CTEST_COMMAND:INTERNAL=/usr/bin/ctest +//ADVANCED property for variable: CMAKE_C_COMPILER_CLANG_SCAN_DEPS +CMAKE_C_COMPILER_CLANG_SCAN_DEPS-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_C_FLAGS +CMAKE_C_FLAGS-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_C_FLAGS_DEBUG +CMAKE_C_FLAGS_DEBUG-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_C_FLAGS_MINSIZEREL +CMAKE_C_FLAGS_MINSIZEREL-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_C_FLAGS_RELEASE +CMAKE_C_FLAGS_RELEASE-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_C_FLAGS_RELWITHDEBINFO +CMAKE_C_FLAGS_RELWITHDEBINFO-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_DLLTOOL +CMAKE_DLLTOOL-ADVANCED:INTERNAL=1 +//Executable file format +CMAKE_EXECUTABLE_FORMAT:INTERNAL=Unknown +//ADVANCED property for variable: CMAKE_EXE_LINKER_FLAGS +CMAKE_EXE_LINKER_FLAGS-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_EXE_LINKER_FLAGS_DEBUG +CMAKE_EXE_LINKER_FLAGS_DEBUG-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_EXE_LINKER_FLAGS_MINSIZEREL +CMAKE_EXE_LINKER_FLAGS_MINSIZEREL-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_EXE_LINKER_FLAGS_RELEASE +CMAKE_EXE_LINKER_FLAGS_RELEASE-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO +CMAKE_EXE_LINKER_FLAGS_RELWITHDEBINFO-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_EXPORT_COMPILE_COMMANDS +CMAKE_EXPORT_COMPILE_COMMANDS-ADVANCED:INTERNAL=1 +//Name of external makefile project generator. +CMAKE_EXTRA_GENERATOR:INTERNAL= +//Name of generator. +CMAKE_GENERATOR:INTERNAL=Unix Makefiles +//Generator instance identifier. +CMAKE_GENERATOR_INSTANCE:INTERNAL= +//Name of generator platform. +CMAKE_GENERATOR_PLATFORM:INTERNAL= +//Name of generator toolset. +CMAKE_GENERATOR_TOOLSET:INTERNAL= +//Source directory with the top level CMakeLists.txt file for this +// project +CMAKE_HOME_DIRECTORY:INTERNAL=/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3 +//ADVANCED property for variable: CMAKE_INSTALL_BINDIR +CMAKE_INSTALL_BINDIR-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_INSTALL_DATADIR +CMAKE_INSTALL_DATADIR-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_INSTALL_DATAROOTDIR +CMAKE_INSTALL_DATAROOTDIR-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_INSTALL_DOCDIR +CMAKE_INSTALL_DOCDIR-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_INSTALL_INCLUDEDIR +CMAKE_INSTALL_INCLUDEDIR-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_INSTALL_INFODIR +CMAKE_INSTALL_INFODIR-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_INSTALL_LIBDIR +CMAKE_INSTALL_LIBDIR-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_INSTALL_LIBEXECDIR +CMAKE_INSTALL_LIBEXECDIR-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_INSTALL_LOCALEDIR +CMAKE_INSTALL_LOCALEDIR-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_INSTALL_LOCALSTATEDIR +CMAKE_INSTALL_LOCALSTATEDIR-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_INSTALL_MANDIR +CMAKE_INSTALL_MANDIR-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_INSTALL_OLDINCLUDEDIR +CMAKE_INSTALL_OLDINCLUDEDIR-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_INSTALL_RUNSTATEDIR +CMAKE_INSTALL_RUNSTATEDIR-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_INSTALL_SBINDIR +CMAKE_INSTALL_SBINDIR-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_INSTALL_SHAREDSTATEDIR +CMAKE_INSTALL_SHAREDSTATEDIR-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_INSTALL_SYSCONFDIR +CMAKE_INSTALL_SYSCONFDIR-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_LINKER +CMAKE_LINKER-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_MAKE_PROGRAM +CMAKE_MAKE_PROGRAM-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_MODULE_LINKER_FLAGS +CMAKE_MODULE_LINKER_FLAGS-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_MODULE_LINKER_FLAGS_DEBUG +CMAKE_MODULE_LINKER_FLAGS_DEBUG-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_MODULE_LINKER_FLAGS_MINSIZEREL +CMAKE_MODULE_LINKER_FLAGS_MINSIZEREL-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_MODULE_LINKER_FLAGS_RELEASE +CMAKE_MODULE_LINKER_FLAGS_RELEASE-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_MODULE_LINKER_FLAGS_RELWITHDEBINFO +CMAKE_MODULE_LINKER_FLAGS_RELWITHDEBINFO-ADVANCED:INTERNAL=1 +//number of local generators +CMAKE_NUMBER_OF_MAKEFILES:INTERNAL=6 +//ADVANCED property for variable: CMAKE_OBJCOPY +CMAKE_OBJCOPY-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_OBJDUMP +CMAKE_OBJDUMP-ADVANCED:INTERNAL=1 +//Platform information initialized +CMAKE_PLATFORM_INFO_INITIALIZED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_READELF +CMAKE_READELF-ADVANCED:INTERNAL=1 +//Path to CMake installation. +CMAKE_ROOT:INTERNAL=/usr/share/cmake-3.28 +//ADVANCED property for variable: CMAKE_SHARED_LINKER_FLAGS +CMAKE_SHARED_LINKER_FLAGS-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_SHARED_LINKER_FLAGS_DEBUG +CMAKE_SHARED_LINKER_FLAGS_DEBUG-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_SHARED_LINKER_FLAGS_MINSIZEREL +CMAKE_SHARED_LINKER_FLAGS_MINSIZEREL-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_SHARED_LINKER_FLAGS_RELEASE +CMAKE_SHARED_LINKER_FLAGS_RELEASE-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO +CMAKE_SHARED_LINKER_FLAGS_RELWITHDEBINFO-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_SKIP_INSTALL_RPATH +CMAKE_SKIP_INSTALL_RPATH-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_SKIP_RPATH +CMAKE_SKIP_RPATH-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_STATIC_LINKER_FLAGS +CMAKE_STATIC_LINKER_FLAGS-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_STATIC_LINKER_FLAGS_DEBUG +CMAKE_STATIC_LINKER_FLAGS_DEBUG-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_STATIC_LINKER_FLAGS_MINSIZEREL +CMAKE_STATIC_LINKER_FLAGS_MINSIZEREL-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_STATIC_LINKER_FLAGS_RELEASE +CMAKE_STATIC_LINKER_FLAGS_RELEASE-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_STATIC_LINKER_FLAGS_RELWITHDEBINFO +CMAKE_STATIC_LINKER_FLAGS_RELWITHDEBINFO-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_STRIP +CMAKE_STRIP-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: CMAKE_TAPI +CMAKE_TAPI-ADVANCED:INTERNAL=1 +//uname command +CMAKE_UNAME:INTERNAL=/usr/bin/uname +//ADVANCED property for variable: CMAKE_VERBOSE_MAKEFILE +CMAKE_VERBOSE_MAKEFILE-ADVANCED:INTERNAL=1 +//Have includes CommonCrypto/CommonCrypto.h +COMMONCRYPTO_FOUND:INTERNAL= +//If true, we are targeting Emscripten output. +EMSCRIPTEN:INTERNAL=1 +//Details about finding PkgConfig +FIND_PACKAGE_MESSAGE_DETAILS_PkgConfig:INTERNAL=[/usr/bin/pkg-config][v1.8.1()] +//Details about finding ZLIB +FIND_PACKAGE_MESSAGE_DETAILS_ZLIB:INTERNAL=[/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/install/lib/libz.a][/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/install/include][c ][v1.3.1(1.1.2)] +FTS_LIB:INTERNAL= +//ADVANCED property for variable: GNUTLS_INCLUDE_DIR +GNUTLS_INCLUDE_DIR-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: GNUTLS_LIBRARY +GNUTLS_LIBRARY-ADVANCED:INTERNAL=1 +//Have function arc4random +HAVE_ARC4RANDOM:INTERNAL= +//Have function clonefile +HAVE_CLONEFILE:INTERNAL= +//Have function explicit_bzero +HAVE_EXPLICIT_BZERO:INTERNAL=1 +//Have function explicit_memset +HAVE_EXPLICIT_MEMSET:INTERNAL= +//Have function fchmod +HAVE_FCHMOD:INTERNAL=1 +//Test HAVE_FICLONERANGE +HAVE_FICLONERANGE:INTERNAL= +//Have function fileno +HAVE_FILENO:INTERNAL=1 +//Have function fseeko +HAVE_FSEEKO:INTERNAL=1 +//Have function ftello +HAVE_FTELLO:INTERNAL=1 +//Have includes sys/types.h;sys/stat.h;fts.h +HAVE_FTS_H:INTERNAL= +//Have function getopt +HAVE_GETOPT:INTERNAL=1 +//Have function getprogname +HAVE_GETPROGNAME:INTERNAL= +//Have function GetSecurityInfo +HAVE_GETSECURITYINFO:INTERNAL= +//Result of TRY_COMPILE +HAVE_INT16_T_LIBZIP:INTERNAL=TRUE +//Result of TRY_COMPILE +HAVE_INT32_T_LIBZIP:INTERNAL=TRUE +//Result of TRY_COMPILE +HAVE_INT64_T_LIBZIP:INTERNAL=TRUE +//Result of TRY_COMPILE +HAVE_INT8_T_LIBZIP:INTERNAL=TRUE +//Have include inttypes.h +HAVE_INTTYPES_H_LIBZIP:INTERNAL=1 +//Result of TRY_COMPILE +HAVE_INT_LIBZIP:INTERNAL=TRUE +HAVE_LIB_FTS:INTERNAL= +//Have symbol localtime_r +HAVE_LOCALTIME_R:INTERNAL=1 +//Have symbol localtime_s +HAVE_LOCALTIME_S:INTERNAL= +//Result of TRY_COMPILE +HAVE_LONG_LIBZIP:INTERNAL=TRUE +//Result of TRY_COMPILE +HAVE_LONG_LONG_LIBZIP:INTERNAL=TRUE +//Have function memcpy_s +HAVE_MEMCPY_S:INTERNAL= +//Have function random +HAVE_RANDOM:INTERNAL=1 +//Have function setmode +HAVE_SETMODE:INTERNAL= +//Result of TRY_COMPILE +HAVE_SHORT_LIBZIP:INTERNAL=TRUE +//Result of TRY_COMPILE +HAVE_SIZEOF_OFF_T:INTERNAL=TRUE +//Result of TRY_COMPILE +HAVE_SIZEOF_SIZE_T:INTERNAL=TRUE +//Have symbol snprintf +HAVE_SNPRINTF:INTERNAL=1 +//Have symbol snprintf_s +HAVE_SNPRINTF_S:INTERNAL= +//Have include stdbool.h +HAVE_STDBOOL_H:INTERNAL=1 +//Have include stddef.h +HAVE_STDDEF_H:INTERNAL=1 +//Have include stdint.h +HAVE_STDINT_H:INTERNAL=1 +//Have include stdint.h +HAVE_STDINT_H_LIBZIP:INTERNAL=1 +//Have symbol strcasecmp +HAVE_STRCASECMP:INTERNAL=1 +//Have function strdup +HAVE_STRDUP:INTERNAL=1 +//Have function strerrorlen_s +HAVE_STRERRORLEN_S:INTERNAL= +//Have function strerror_s +HAVE_STRERROR_S:INTERNAL= +//Have function stricmp +HAVE_STRICMP:INTERNAL= +//Have include strings.h +HAVE_STRINGS_H:INTERNAL=1 +//Have function strncpy_s +HAVE_STRNCPY_S:INTERNAL= +//Have function strtoll +HAVE_STRTOLL:INTERNAL=1 +//Have function strtoull +HAVE_STRTOULL:INTERNAL=1 +//Have include sys/types.h +HAVE_SYS_TYPES_H:INTERNAL=1 +//Have include sys/types.h +HAVE_SYS_TYPES_H_LIBZIP:INTERNAL=1 +//Result of TRY_COMPILE +HAVE_UINT16_T_LIBZIP:INTERNAL=TRUE +//Result of TRY_COMPILE +HAVE_UINT32_T_LIBZIP:INTERNAL=TRUE +//Result of TRY_COMPILE +HAVE_UINT64_T_LIBZIP:INTERNAL=TRUE +//Result of TRY_COMPILE +HAVE_UINT8_T_LIBZIP:INTERNAL=TRUE +//Have include unistd.h +HAVE_UNISTD_H:INTERNAL=1 +//Have function _close +HAVE__CLOSE:INTERNAL= +//Have function _dup +HAVE__DUP:INTERNAL= +//Have function _fdopen +HAVE__FDOPEN:INTERNAL= +//Have function _fileno +HAVE__FILENO:INTERNAL= +//Have function _fseeki64 +HAVE__FSEEKI64:INTERNAL= +//Have function _fstat64 +HAVE__FSTAT64:INTERNAL= +//Have function _setmode +HAVE__SETMODE:INTERNAL= +//Have symbol _snprintf +HAVE__SNPRINTF:INTERNAL= +//Have symbol _snprintf_s +HAVE__SNPRINTF_S:INTERNAL= +//Have symbol _snwprintf_s +HAVE__SNWPRINTF_S:INTERNAL= +//Have function _stat64 +HAVE__STAT64:INTERNAL= +//Have function _strdup +HAVE__STRDUP:INTERNAL= +//Have symbol _stricmp +HAVE__STRICMP:INTERNAL= +//Have function _strtoi64 +HAVE__STRTOI64:INTERNAL= +//Have function _strtoui64 +HAVE__STRTOUI64:INTERNAL= +//Have function _unlink +HAVE__UNLINK:INTERNAL= +//Result of TRY_COMPILE +HAVE___INT16_LIBZIP:INTERNAL=FALSE +//Result of TRY_COMPILE +HAVE___INT32_LIBZIP:INTERNAL=FALSE +//Result of TRY_COMPILE +HAVE___INT64_LIBZIP:INTERNAL=FALSE +//Result of TRY_COMPILE +HAVE___INT8_LIBZIP:INTERNAL=FALSE +//CHECK_TYPE_SIZE: sizeof(int16_t) +INT16_T_LIBZIP:INTERNAL=2 +//CHECK_TYPE_SIZE: sizeof(int32_t) +INT32_T_LIBZIP:INTERNAL=4 +//CHECK_TYPE_SIZE: sizeof(int64_t) +INT64_T_LIBZIP:INTERNAL=8 +//CHECK_TYPE_SIZE: sizeof(int8_t) +INT8_T_LIBZIP:INTERNAL=1 +//CHECK_TYPE_SIZE: sizeof(int) +INT_LIBZIP:INTERNAL=4 +//ADVANCED property for variable: LIBLZMA_INCLUDE_DIR +LIBLZMA_INCLUDE_DIR-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: LIBLZMA_LIBRARY_DEBUG +LIBLZMA_LIBRARY_DEBUG-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: LIBLZMA_LIBRARY_RELEASE +LIBLZMA_LIBRARY_RELEASE-ADVANCED:INTERNAL=1 +//CHECK_TYPE_SIZE: sizeof(long) +LONG_LIBZIP:INTERNAL=4 +//CHECK_TYPE_SIZE: sizeof(long long) +LONG_LONG_LIBZIP:INTERNAL=8 +//ADVANCED property for variable: MbedTLS_INCLUDE_DIR +MbedTLS_INCLUDE_DIR-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: MbedTLS_LIBRARY +MbedTLS_LIBRARY-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: Nettle_INCLUDE_DIR +Nettle_INCLUDE_DIR-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: Nettle_LIBRARY +Nettle_LIBRARY-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: OPENSSL_CRYPTO_LIBRARY +OPENSSL_CRYPTO_LIBRARY-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: OPENSSL_INCLUDE_DIR +OPENSSL_INCLUDE_DIR-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: OPENSSL_SSL_LIBRARY +OPENSSL_SSL_LIBRARY-ADVANCED:INTERNAL=1 +PC_GNUTLS_CFLAGS:INTERNAL= +PC_GNUTLS_CFLAGS_I:INTERNAL= +PC_GNUTLS_CFLAGS_OTHER:INTERNAL= +PC_GNUTLS_FOUND:INTERNAL= +PC_GNUTLS_INCLUDEDIR:INTERNAL= +PC_GNUTLS_LIBDIR:INTERNAL= +PC_GNUTLS_LIBS:INTERNAL= +PC_GNUTLS_LIBS_L:INTERNAL= +PC_GNUTLS_LIBS_OTHER:INTERNAL= +PC_GNUTLS_LIBS_PATHS:INTERNAL= +PC_GNUTLS_MODULE_NAME:INTERNAL= +PC_GNUTLS_PREFIX:INTERNAL= +PC_GNUTLS_STATIC_CFLAGS:INTERNAL= +PC_GNUTLS_STATIC_CFLAGS_I:INTERNAL= +PC_GNUTLS_STATIC_CFLAGS_OTHER:INTERNAL= +PC_GNUTLS_STATIC_LIBDIR:INTERNAL= +PC_GNUTLS_STATIC_LIBS:INTERNAL= +PC_GNUTLS_STATIC_LIBS_L:INTERNAL= +PC_GNUTLS_STATIC_LIBS_OTHER:INTERNAL= +PC_GNUTLS_STATIC_LIBS_PATHS:INTERNAL= +PC_GNUTLS_VERSION:INTERNAL= +PC_GNUTLS_gnutls_INCLUDEDIR:INTERNAL= +PC_GNUTLS_gnutls_LIBDIR:INTERNAL= +PC_GNUTLS_gnutls_PREFIX:INTERNAL= +PC_GNUTLS_gnutls_VERSION:INTERNAL= +PC_Nettle_CFLAGS:INTERNAL= +PC_Nettle_CFLAGS_I:INTERNAL= +PC_Nettle_CFLAGS_OTHER:INTERNAL= +PC_Nettle_FOUND:INTERNAL= +PC_Nettle_INCLUDEDIR:INTERNAL= +PC_Nettle_LIBDIR:INTERNAL= +PC_Nettle_LIBS:INTERNAL= +PC_Nettle_LIBS_L:INTERNAL= +PC_Nettle_LIBS_OTHER:INTERNAL= +PC_Nettle_LIBS_PATHS:INTERNAL= +PC_Nettle_MODULE_NAME:INTERNAL= +PC_Nettle_PREFIX:INTERNAL= +PC_Nettle_STATIC_CFLAGS:INTERNAL= +PC_Nettle_STATIC_CFLAGS_I:INTERNAL= +PC_Nettle_STATIC_CFLAGS_OTHER:INTERNAL= +PC_Nettle_STATIC_LIBDIR:INTERNAL= +PC_Nettle_STATIC_LIBS:INTERNAL= +PC_Nettle_STATIC_LIBS_L:INTERNAL= +PC_Nettle_STATIC_LIBS_OTHER:INTERNAL= +PC_Nettle_STATIC_LIBS_PATHS:INTERNAL= +PC_Nettle_VERSION:INTERNAL= +PC_Nettle_nettle_INCLUDEDIR:INTERNAL= +PC_Nettle_nettle_LIBDIR:INTERNAL= +PC_Nettle_nettle_PREFIX:INTERNAL= +PC_Nettle_nettle_VERSION:INTERNAL= +PC_zstd_CFLAGS:INTERNAL= +PC_zstd_CFLAGS_I:INTERNAL= +PC_zstd_CFLAGS_OTHER:INTERNAL= +PC_zstd_FOUND:INTERNAL= +PC_zstd_INCLUDEDIR:INTERNAL= +PC_zstd_LIBDIR:INTERNAL= +PC_zstd_LIBS:INTERNAL= +PC_zstd_LIBS_L:INTERNAL= +PC_zstd_LIBS_OTHER:INTERNAL= +PC_zstd_LIBS_PATHS:INTERNAL= +PC_zstd_MODULE_NAME:INTERNAL= +PC_zstd_PREFIX:INTERNAL= +PC_zstd_STATIC_CFLAGS:INTERNAL= +PC_zstd_STATIC_CFLAGS_I:INTERNAL= +PC_zstd_STATIC_CFLAGS_OTHER:INTERNAL= +PC_zstd_STATIC_LIBDIR:INTERNAL= +PC_zstd_STATIC_LIBS:INTERNAL= +PC_zstd_STATIC_LIBS_L:INTERNAL= +PC_zstd_STATIC_LIBS_OTHER:INTERNAL= +PC_zstd_STATIC_LIBS_PATHS:INTERNAL= +PC_zstd_VERSION:INTERNAL= +PC_zstd_libzstd_INCLUDEDIR:INTERNAL= +PC_zstd_libzstd_LIBDIR:INTERNAL= +PC_zstd_libzstd_PREFIX:INTERNAL= +PC_zstd_libzstd_VERSION:INTERNAL= +//ADVANCED property for variable: PKG_CONFIG_ARGN +PKG_CONFIG_ARGN-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: PKG_CONFIG_EXECUTABLE +PKG_CONFIG_EXECUTABLE-ADVANCED:INTERNAL=1 +//CHECK_TYPE_SIZE: sizeof(short) +SHORT_LIBZIP:INTERNAL=2 +//CHECK_TYPE_SIZE: sizeof(off_t) +SIZEOF_OFF_T:INTERNAL=8 +//CHECK_TYPE_SIZE: sizeof(size_t) +SIZEOF_SIZE_T:INTERNAL=4 +//CHECK_TYPE_SIZE: sizeof(uint16_t) +UINT16_T_LIBZIP:INTERNAL=2 +//CHECK_TYPE_SIZE: sizeof(uint32_t) +UINT32_T_LIBZIP:INTERNAL=4 +//CHECK_TYPE_SIZE: sizeof(uint64_t) +UINT64_T_LIBZIP:INTERNAL=8 +//CHECK_TYPE_SIZE: sizeof(uint8_t) +UINT8_T_LIBZIP:INTERNAL=1 +//Result of TEST_BIG_ENDIAN +WORDS_BIGENDIAN:INTERNAL=0 +//ADVANCED property for variable: ZLIB_INCLUDE_DIR +ZLIB_INCLUDE_DIR-ADVANCED:INTERNAL=1 +//CMAKE_INSTALL_PREFIX during last run +_GNUInstallDirs_LAST_CMAKE_INSTALL_PREFIX:INTERNAL=/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/install +_OPENSSL_CFLAGS:INTERNAL= +_OPENSSL_CFLAGS_I:INTERNAL= +_OPENSSL_CFLAGS_OTHER:INTERNAL= +_OPENSSL_FOUND:INTERNAL= +_OPENSSL_INCLUDEDIR:INTERNAL= +_OPENSSL_LIBDIR:INTERNAL= +_OPENSSL_LIBS:INTERNAL= +_OPENSSL_LIBS_L:INTERNAL= +_OPENSSL_LIBS_OTHER:INTERNAL= +_OPENSSL_LIBS_PATHS:INTERNAL= +_OPENSSL_MODULE_NAME:INTERNAL= +_OPENSSL_PREFIX:INTERNAL= +_OPENSSL_STATIC_CFLAGS:INTERNAL= +_OPENSSL_STATIC_CFLAGS_I:INTERNAL= +_OPENSSL_STATIC_CFLAGS_OTHER:INTERNAL= +_OPENSSL_STATIC_LIBDIR:INTERNAL= +_OPENSSL_STATIC_LIBS:INTERNAL= +_OPENSSL_STATIC_LIBS_L:INTERNAL= +_OPENSSL_STATIC_LIBS_OTHER:INTERNAL= +_OPENSSL_STATIC_LIBS_PATHS:INTERNAL= +_OPENSSL_VERSION:INTERNAL= +_OPENSSL_openssl_INCLUDEDIR:INTERNAL= +_OPENSSL_openssl_LIBDIR:INTERNAL= +_OPENSSL_openssl_PREFIX:INTERNAL= +_OPENSSL_openssl_VERSION:INTERNAL= +//CHECK_TYPE_SIZE: __int16 unknown +__INT16_LIBZIP:INTERNAL= +//CHECK_TYPE_SIZE: __int32 unknown +__INT32_LIBZIP:INTERNAL= +//CHECK_TYPE_SIZE: __int64 unknown +__INT64_LIBZIP:INTERNAL= +//CHECK_TYPE_SIZE: __int8 unknown +__INT8_LIBZIP:INTERNAL= +__pkg_config_checked_PC_GNUTLS:INTERNAL=1 +__pkg_config_checked_PC_Nettle:INTERNAL=1 +__pkg_config_checked_PC_zstd:INTERNAL=1 +__pkg_config_checked__OPENSSL:INTERNAL=1 +//ADVANCED property for variable: zstd_DLL +zstd_DLL-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: zstd_INCLUDE_DIR +zstd_INCLUDE_DIR-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: zstd_SHARED_LIBRARY +zstd_SHARED_LIBRARY-ADVANCED:INTERNAL=1 +//ADVANCED property for variable: zstd_STATIC_LIBRARY +zstd_STATIC_LIBRARY-ADVANCED:INTERNAL=1 + diff --git a/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/3.28.3/CMakeCCompiler.cmake b/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/3.28.3/CMakeCCompiler.cmake new file mode 100644 index 0000000..1a8c15d --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/3.28.3/CMakeCCompiler.cmake @@ -0,0 +1,74 @@ +set(CMAKE_C_COMPILER "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc") +set(CMAKE_C_COMPILER_ARG1 "") +set(CMAKE_C_COMPILER_ID "Clang") +set(CMAKE_C_COMPILER_VERSION "21.0.0") +set(CMAKE_C_COMPILER_VERSION_INTERNAL "") +set(CMAKE_C_COMPILER_WRAPPER "") +set(CMAKE_C_STANDARD_COMPUTED_DEFAULT "17") +set(CMAKE_C_EXTENSIONS_COMPUTED_DEFAULT "ON") +set(CMAKE_C_COMPILE_FEATURES "c_std_90;c_function_prototypes;c_std_99;c_restrict;c_variadic_macros;c_std_11;c_static_assert;c_std_17;c_std_23") +set(CMAKE_C90_COMPILE_FEATURES "c_std_90;c_function_prototypes") +set(CMAKE_C99_COMPILE_FEATURES "c_std_99;c_restrict;c_variadic_macros") +set(CMAKE_C11_COMPILE_FEATURES "c_std_11;c_static_assert") +set(CMAKE_C17_COMPILE_FEATURES "c_std_17") +set(CMAKE_C23_COMPILE_FEATURES "c_std_23") + +set(CMAKE_C_PLATFORM_ID "") +set(CMAKE_C_SIMULATE_ID "") +set(CMAKE_C_COMPILER_FRONTEND_VARIANT "GNU") +set(CMAKE_C_SIMULATE_VERSION "") + + + + +set(CMAKE_AR "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emar") +set(CMAKE_C_COMPILER_AR "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emar") +set(CMAKE_RANLIB "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emranlib") +set(CMAKE_C_COMPILER_RANLIB "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emranlib") +set(CMAKE_LINKER "/usr/bin/ld") +set(CMAKE_MT "") +set(CMAKE_TAPI "CMAKE_TAPI-NOTFOUND") +set(CMAKE_COMPILER_IS_GNUCC ) +set(CMAKE_C_COMPILER_LOADED 1) +set(CMAKE_C_COMPILER_WORKS TRUE) +set(CMAKE_C_ABI_COMPILED TRUE) + +set(CMAKE_C_COMPILER_ENV_VAR "CC") + +set(CMAKE_C_COMPILER_ID_RUN 1) +set(CMAKE_C_SOURCE_FILE_EXTENSIONS c;m) +set(CMAKE_C_IGNORE_EXTENSIONS h;H;o;O;obj;OBJ;def;DEF;rc;RC) +set(CMAKE_C_LINKER_PREFERENCE 10) +set(CMAKE_C_LINKER_DEPFILE_SUPPORTED FALSE) + +# Save compiler ABI information. +set(CMAKE_C_SIZEOF_DATA_PTR "4") +set(CMAKE_C_COMPILER_ABI "") +set(CMAKE_C_BYTE_ORDER "LITTLE_ENDIAN") +set(CMAKE_C_LIBRARY_ARCHITECTURE "") + +if(CMAKE_C_SIZEOF_DATA_PTR) + set(CMAKE_SIZEOF_VOID_P "${CMAKE_C_SIZEOF_DATA_PTR}") +endif() + +if(CMAKE_C_COMPILER_ABI) + set(CMAKE_INTERNAL_PLATFORM_ABI "${CMAKE_C_COMPILER_ABI}") +endif() + +if(CMAKE_C_LIBRARY_ARCHITECTURE) + set(CMAKE_LIBRARY_ARCHITECTURE "") +endif() + +set(CMAKE_C_CL_SHOWINCLUDES_PREFIX "") +if(CMAKE_C_CL_SHOWINCLUDES_PREFIX) + set(CMAKE_CL_SHOWINCLUDES_PREFIX "${CMAKE_C_CL_SHOWINCLUDES_PREFIX}") +endif() + + + + + +set(CMAKE_C_IMPLICIT_INCLUDE_DIRECTORIES "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/fakesdl;/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat;/home/romazan/Рабочий Ñтол/emsdk/upstream/lib/clang/21/include;/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/cache/sysroot/include") +set(CMAKE_C_IMPLICIT_LINK_LIBRARIES "GL-getprocaddr;al;html5;stubs-debug;noexit;c-debug;dlmalloc-debug;compiler_rt;c++-noexcept;c++abi-debug-noexcept;sockets") +set(CMAKE_C_IMPLICIT_LINK_DIRECTORIES "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/cache/sysroot/lib/wasm32-emscripten;/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/src/lib") +set(CMAKE_C_IMPLICIT_LINK_FRAMEWORK_DIRECTORIES "") diff --git a/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/3.28.3/CMakeDetermineCompilerABI_C.bin b/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/3.28.3/CMakeDetermineCompilerABI_C.bin new file mode 100644 index 0000000..3b0b3e8 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/3.28.3/CMakeDetermineCompilerABI_C.bin @@ -0,0 +1,1521 @@ +// include: shell.js +// The Module object: Our interface to the outside world. We import +// and export values on it. There are various ways Module can be used: +// 1. Not defined. We create it here +// 2. A function parameter, function(moduleArg) => Promise +// 3. pre-run appended it, var Module = {}; ..generated code.. +// 4. External script tag defines var Module. +// We need to check if Module already exists (e.g. case 3 above). +// Substitution will be replaced with actual code on later stage of the build, +// this way Closure Compiler will not mangle it (e.g. case 4. above). +// Note that if you want to run closure, and also to use Module +// after the generated code, you will need to define var Module = {}; +// before the code. Then that object will be used in the code, and you +// can continue to use Module afterwards as well. +var Module = typeof Module != 'undefined' ? Module : {}; + +// Determine the runtime environment we are in. You can customize this by +// setting the ENVIRONMENT setting at compile time (see settings.js). + +// Attempt to auto-detect the environment +var ENVIRONMENT_IS_WEB = typeof window == 'object'; +var ENVIRONMENT_IS_WORKER = typeof WorkerGlobalScope != 'undefined'; +// N.b. Electron.js environment is simultaneously a NODE-environment, but +// also a web environment. +var ENVIRONMENT_IS_NODE = typeof process == 'object' && typeof process.versions == 'object' && typeof process.versions.node == 'string' && process.type != 'renderer'; +var ENVIRONMENT_IS_SHELL = !ENVIRONMENT_IS_WEB && !ENVIRONMENT_IS_NODE && !ENVIRONMENT_IS_WORKER; + +if (ENVIRONMENT_IS_NODE) { + +} + +// --pre-jses are emitted after the Module integration code, so that they can +// refer to Module (if they choose; they can also define Module) + + +// Sometimes an existing Module object exists with properties +// meant to overwrite the default module functionality. Here +// we collect those properties and reapply _after_ we configure +// the current environment's defaults to avoid having to be so +// defensive during initialization. +var moduleOverrides = {...Module}; + +var arguments_ = []; +var thisProgram = './this.program'; +var quit_ = (status, toThrow) => { + throw toThrow; +}; + +// `/` should be present at the end if `scriptDirectory` is not empty +var scriptDirectory = ''; +function locateFile(path) { + if (Module['locateFile']) { + return Module['locateFile'](path, scriptDirectory); + } + return scriptDirectory + path; +} + +// Hooks that are implemented differently in different runtime environments. +var readAsync, readBinary; + +if (ENVIRONMENT_IS_NODE) { + if (typeof process == 'undefined' || !process.release || process.release.name !== 'node') throw new Error('not compiled for this environment (did you build to HTML and try to run it not on the web, or set ENVIRONMENT to something - like node - and run it someplace else - like on the web?)'); + + var nodeVersion = process.versions.node; + var numericVersion = nodeVersion.split('.').slice(0, 3); + numericVersion = (numericVersion[0] * 10000) + (numericVersion[1] * 100) + (numericVersion[2].split('-')[0] * 1); + var minVersion = 160000; + if (numericVersion < 160000) { + throw new Error('This emscripten-generated code requires node v16.0.0 (detected v' + nodeVersion + ')'); + } + + // These modules will usually be used on Node.js. Load them eagerly to avoid + // the complexity of lazy-loading. + var fs = require('fs'); + var nodePath = require('path'); + + scriptDirectory = __dirname + '/'; + +// include: node_shell_read.js +readBinary = (filename) => { + // We need to re-wrap `file://` strings to URLs. + filename = isFileURI(filename) ? new URL(filename) : filename; + var ret = fs.readFileSync(filename); + assert(Buffer.isBuffer(ret)); + return ret; +}; + +readAsync = async (filename, binary = true) => { + // See the comment in the `readBinary` function. + filename = isFileURI(filename) ? new URL(filename) : filename; + var ret = fs.readFileSync(filename, binary ? undefined : 'utf8'); + assert(binary ? Buffer.isBuffer(ret) : typeof ret == 'string'); + return ret; +}; +// end include: node_shell_read.js + if (!Module['thisProgram'] && process.argv.length > 1) { + thisProgram = process.argv[1].replace(/\\/g, '/'); + } + + arguments_ = process.argv.slice(2); + + if (typeof module != 'undefined') { + module['exports'] = Module; + } + + quit_ = (status, toThrow) => { + process.exitCode = status; + throw toThrow; + }; + +} else +if (ENVIRONMENT_IS_SHELL) { + + if ((typeof process == 'object' && typeof require === 'function') || typeof window == 'object' || typeof WorkerGlobalScope != 'undefined') throw new Error('not compiled for this environment (did you build to HTML and try to run it not on the web, or set ENVIRONMENT to something - like node - and run it someplace else - like on the web?)'); + +} else + +// Note that this includes Node.js workers when relevant (pthreads is enabled). +// Node.js workers are detected as a combination of ENVIRONMENT_IS_WORKER and +// ENVIRONMENT_IS_NODE. +if (ENVIRONMENT_IS_WEB || ENVIRONMENT_IS_WORKER) { + if (ENVIRONMENT_IS_WORKER) { // Check worker, not web, since window could be polyfilled + scriptDirectory = self.location.href; + } else if (typeof document != 'undefined' && document.currentScript) { // web + scriptDirectory = document.currentScript.src; + } + // blob urls look like blob:http://site.com/etc/etc and we cannot infer anything from them. + // otherwise, slice off the final part of the url to find the script directory. + // if scriptDirectory does not contain a slash, lastIndexOf will return -1, + // and scriptDirectory will correctly be replaced with an empty string. + // If scriptDirectory contains a query (starting with ?) or a fragment (starting with #), + // they are removed because they could contain a slash. + if (scriptDirectory.startsWith('blob:')) { + scriptDirectory = ''; + } else { + scriptDirectory = scriptDirectory.slice(0, scriptDirectory.replace(/[?#].*/, '').lastIndexOf('/')+1); + } + + if (!(typeof window == 'object' || typeof WorkerGlobalScope != 'undefined')) throw new Error('not compiled for this environment (did you build to HTML and try to run it not on the web, or set ENVIRONMENT to something - like node - and run it someplace else - like on the web?)'); + + { +// include: web_or_worker_shell_read.js +if (ENVIRONMENT_IS_WORKER) { + readBinary = (url) => { + var xhr = new XMLHttpRequest(); + xhr.open('GET', url, false); + xhr.responseType = 'arraybuffer'; + xhr.send(null); + return new Uint8Array(/** @type{!ArrayBuffer} */(xhr.response)); + }; + } + + readAsync = async (url) => { + // Fetch has some additional restrictions over XHR, like it can't be used on a file:// url. + // See https://github.com/github/fetch/pull/92#issuecomment-140665932 + // Cordova or Electron apps are typically loaded from a file:// url. + // So use XHR on webview if URL is a file URL. + if (isFileURI(url)) { + return new Promise((resolve, reject) => { + var xhr = new XMLHttpRequest(); + xhr.open('GET', url, true); + xhr.responseType = 'arraybuffer'; + xhr.onload = () => { + if (xhr.status == 200 || (xhr.status == 0 && xhr.response)) { // file URLs can return 0 + resolve(xhr.response); + return; + } + reject(xhr.status); + }; + xhr.onerror = reject; + xhr.send(null); + }); + } + var response = await fetch(url, { credentials: 'same-origin' }); + if (response.ok) { + return response.arrayBuffer(); + } + throw new Error(response.status + ' : ' + response.url); + }; +// end include: web_or_worker_shell_read.js + } +} else +{ + throw new Error('environment detection error'); +} + +var out = Module['print'] || console.log.bind(console); +var err = Module['printErr'] || console.error.bind(console); + +// Merge back in the overrides +Object.assign(Module, moduleOverrides); +// Free the object hierarchy contained in the overrides, this lets the GC +// reclaim data used. +moduleOverrides = null; +checkIncomingModuleAPI(); + +// Emit code to handle expected values on the Module object. This applies Module.x +// to the proper local x. This has two benefits: first, we only emit it if it is +// expected to arrive, and second, by using a local everywhere else that can be +// minified. + +if (Module['arguments']) arguments_ = Module['arguments'];legacyModuleProp('arguments', 'arguments_'); + +if (Module['thisProgram']) thisProgram = Module['thisProgram'];legacyModuleProp('thisProgram', 'thisProgram'); + +// perform assertions in shell.js after we set up out() and err(), as otherwise if an assertion fails it cannot print the message +// Assertions on removed incoming Module JS APIs. +assert(typeof Module['memoryInitializerPrefixURL'] == 'undefined', 'Module.memoryInitializerPrefixURL option was removed, use Module.locateFile instead'); +assert(typeof Module['pthreadMainPrefixURL'] == 'undefined', 'Module.pthreadMainPrefixURL option was removed, use Module.locateFile instead'); +assert(typeof Module['cdInitializerPrefixURL'] == 'undefined', 'Module.cdInitializerPrefixURL option was removed, use Module.locateFile instead'); +assert(typeof Module['filePackagePrefixURL'] == 'undefined', 'Module.filePackagePrefixURL option was removed, use Module.locateFile instead'); +assert(typeof Module['read'] == 'undefined', 'Module.read option was removed'); +assert(typeof Module['readAsync'] == 'undefined', 'Module.readAsync option was removed (modify readAsync in JS)'); +assert(typeof Module['readBinary'] == 'undefined', 'Module.readBinary option was removed (modify readBinary in JS)'); +assert(typeof Module['setWindowTitle'] == 'undefined', 'Module.setWindowTitle option was removed (modify emscripten_set_window_title in JS)'); +assert(typeof Module['TOTAL_MEMORY'] == 'undefined', 'Module.TOTAL_MEMORY has been renamed Module.INITIAL_MEMORY'); +legacyModuleProp('asm', 'wasmExports'); +legacyModuleProp('readAsync', 'readAsync'); +legacyModuleProp('readBinary', 'readBinary'); +legacyModuleProp('setWindowTitle', 'setWindowTitle'); +var IDBFS = 'IDBFS is no longer included by default; build with -lidbfs.js'; +var PROXYFS = 'PROXYFS is no longer included by default; build with -lproxyfs.js'; +var WORKERFS = 'WORKERFS is no longer included by default; build with -lworkerfs.js'; +var FETCHFS = 'FETCHFS is no longer included by default; build with -lfetchfs.js'; +var ICASEFS = 'ICASEFS is no longer included by default; build with -licasefs.js'; +var JSFILEFS = 'JSFILEFS is no longer included by default; build with -ljsfilefs.js'; +var OPFS = 'OPFS is no longer included by default; build with -lopfs.js'; + +var NODEFS = 'NODEFS is no longer included by default; build with -lnodefs.js'; + +assert(!ENVIRONMENT_IS_SHELL, 'shell environment detected but not enabled at build time. Add `shell` to `-sENVIRONMENT` to enable.'); + +// end include: shell.js + +// include: preamble.js +// === Preamble library stuff === + +// Documentation for the public APIs defined in this file must be updated in: +// site/source/docs/api_reference/preamble.js.rst +// A prebuilt local version of the documentation is available at: +// site/build/text/docs/api_reference/preamble.js.txt +// You can also build docs locally as HTML or other formats in site/ +// An online HTML version (which may be of a different version of Emscripten) +// is up at http://kripken.github.io/emscripten-site/docs/api_reference/preamble.js.html + +var wasmBinary = Module['wasmBinary'];legacyModuleProp('wasmBinary', 'wasmBinary'); + +if (typeof WebAssembly != 'object') { + err('no native wasm support detected'); +} + +// Wasm globals + +var wasmMemory; + +//======================================== +// Runtime essentials +//======================================== + +// whether we are quitting the application. no code should run after this. +// set in exit() and abort() +var ABORT = false; + +// set by exit() and abort(). Passed to 'onExit' handler. +// NOTE: This is also used as the process return code code in shell environments +// but only when noExitRuntime is false. +var EXITSTATUS; + +// In STRICT mode, we only define assert() when ASSERTIONS is set. i.e. we +// don't define it at all in release modes. This matches the behaviour of +// MINIMAL_RUNTIME. +// TODO(sbc): Make this the default even without STRICT enabled. +/** @type {function(*, string=)} */ +function assert(condition, text) { + if (!condition) { + abort('Assertion failed' + (text ? ': ' + text : '')); + } +} + +// We used to include malloc/free by default in the past. Show a helpful error in +// builds with assertions. +function _malloc() { + abort('malloc() called but not included in the build - add `_malloc` to EXPORTED_FUNCTIONS'); +} +function _free() { + // Show a helpful error since we used to include free by default in the past. + abort('free() called but not included in the build - add `_free` to EXPORTED_FUNCTIONS'); +} + +// Memory management + +var HEAP, +/** @type {!Int8Array} */ + HEAP8, +/** @type {!Uint8Array} */ + HEAPU8, +/** @type {!Int16Array} */ + HEAP16, +/** @type {!Uint16Array} */ + HEAPU16, +/** @type {!Int32Array} */ + HEAP32, +/** @type {!Uint32Array} */ + HEAPU32, +/** @type {!Float32Array} */ + HEAPF32, +/* BigInt64Array type is not correctly defined in closure +/** not-@type {!BigInt64Array} */ + HEAP64, +/* BigUint64Array type is not correctly defined in closure +/** not-t@type {!BigUint64Array} */ + HEAPU64, +/** @type {!Float64Array} */ + HEAPF64; + +var runtimeInitialized = false; + +/** + * Indicates whether filename is delivered via file protocol (as opposed to http/https) + * @noinline + */ +var isFileURI = (filename) => filename.startsWith('file://'); + +// include: runtime_shared.js +// include: runtime_stack_check.js +// Initializes the stack cookie. Called at the startup of main and at the startup of each thread in pthreads mode. +function writeStackCookie() { + var max = _emscripten_stack_get_end(); + assert((max & 3) == 0); + // If the stack ends at address zero we write our cookies 4 bytes into the + // stack. This prevents interference with SAFE_HEAP and ASAN which also + // monitor writes to address zero. + if (max == 0) { + max += 4; + } + // The stack grow downwards towards _emscripten_stack_get_end. + // We write cookies to the final two words in the stack and detect if they are + // ever overwritten. + HEAPU32[((max)>>2)] = 0x02135467; + HEAPU32[(((max)+(4))>>2)] = 0x89BACDFE; + // Also test the global address 0 for integrity. + HEAPU32[((0)>>2)] = 1668509029; +} + +function checkStackCookie() { + if (ABORT) return; + var max = _emscripten_stack_get_end(); + // See writeStackCookie(). + if (max == 0) { + max += 4; + } + var cookie1 = HEAPU32[((max)>>2)]; + var cookie2 = HEAPU32[(((max)+(4))>>2)]; + if (cookie1 != 0x02135467 || cookie2 != 0x89BACDFE) { + abort(`Stack overflow! Stack cookie has been overwritten at ${ptrToString(max)}, expected hex dwords 0x89BACDFE and 0x2135467, but received ${ptrToString(cookie2)} ${ptrToString(cookie1)}`); + } + // Also test the global address 0 for integrity. + if (HEAPU32[((0)>>2)] != 0x63736d65 /* 'emsc' */) { + abort('Runtime error: The application has corrupted its heap memory area (address zero)!'); + } +} +// end include: runtime_stack_check.js +// include: runtime_exceptions.js +// end include: runtime_exceptions.js +// include: runtime_debug.js +// Endianness check +(() => { + var h16 = new Int16Array(1); + var h8 = new Int8Array(h16.buffer); + h16[0] = 0x6373; + if (h8[0] !== 0x73 || h8[1] !== 0x63) throw 'Runtime error: expected the system to be little-endian! (Run with -sSUPPORT_BIG_ENDIAN to bypass)'; +})(); + +if (Module['ENVIRONMENT']) { + throw new Error('Module.ENVIRONMENT has been deprecated. To force the environment, use the ENVIRONMENT compile-time option (for example, -sENVIRONMENT=web or -sENVIRONMENT=node)'); +} + +function legacyModuleProp(prop, newName, incoming=true) { + if (!Object.getOwnPropertyDescriptor(Module, prop)) { + Object.defineProperty(Module, prop, { + configurable: true, + get() { + let extra = incoming ? ' (the initial value can be provided on Module, but after startup the value is only looked for on a local variable of that name)' : ''; + abort(`\`Module.${prop}\` has been replaced by \`${newName}\`` + extra); + + } + }); + } +} + +function consumedModuleProp(prop) { + if (!Object.getOwnPropertyDescriptor(Module, prop)) { + Object.defineProperty(Module, prop, { + configurable: true, + set() { + abort(`Attempt to set \`Module.${prop}\` after it has already been processed. This can happen, for example, when code is injected via '--post-js' rather than '--pre-js'`); + + } + }); + } +} + +function ignoredModuleProp(prop) { + if (Object.getOwnPropertyDescriptor(Module, prop)) { + abort(`\`Module.${prop}\` was supplied but \`${prop}\` not included in INCOMING_MODULE_JS_API`); + } +} + +// forcing the filesystem exports a few things by default +function isExportedByForceFilesystem(name) { + return name === 'FS_createPath' || + name === 'FS_createDataFile' || + name === 'FS_createPreloadedFile' || + name === 'FS_unlink' || + name === 'addRunDependency' || + // The old FS has some functionality that WasmFS lacks. + name === 'FS_createLazyFile' || + name === 'FS_createDevice' || + name === 'removeRunDependency'; +} + +/** + * Intercept access to a global symbol. This enables us to give informative + * warnings/errors when folks attempt to use symbols they did not include in + * their build, or no symbols that no longer exist. + */ +function hookGlobalSymbolAccess(sym, func) { + if (typeof globalThis != 'undefined' && !Object.getOwnPropertyDescriptor(globalThis, sym)) { + Object.defineProperty(globalThis, sym, { + configurable: true, + get() { + func(); + return undefined; + } + }); + } +} + +function missingGlobal(sym, msg) { + hookGlobalSymbolAccess(sym, () => { + warnOnce(`\`${sym}\` is not longer defined by emscripten. ${msg}`); + }); +} + +missingGlobal('buffer', 'Please use HEAP8.buffer or wasmMemory.buffer'); +missingGlobal('asm', 'Please use wasmExports instead'); + +function missingLibrarySymbol(sym) { + hookGlobalSymbolAccess(sym, () => { + // Can't `abort()` here because it would break code that does runtime + // checks. e.g. `if (typeof SDL === 'undefined')`. + var msg = `\`${sym}\` is a library symbol and not included by default; add it to your library.js __deps or to DEFAULT_LIBRARY_FUNCS_TO_INCLUDE on the command line`; + // DEFAULT_LIBRARY_FUNCS_TO_INCLUDE requires the name as it appears in + // library.js, which means $name for a JS name with no prefix, or name + // for a JS name like _name. + var librarySymbol = sym; + if (!librarySymbol.startsWith('_')) { + librarySymbol = '$' + sym; + } + msg += ` (e.g. -sDEFAULT_LIBRARY_FUNCS_TO_INCLUDE='${librarySymbol}')`; + if (isExportedByForceFilesystem(sym)) { + msg += '. Alternatively, forcing filesystem support (-sFORCE_FILESYSTEM) can export this for you'; + } + warnOnce(msg); + }); + + // Any symbol that is not included from the JS library is also (by definition) + // not exported on the Module object. + unexportedRuntimeSymbol(sym); +} + +function unexportedRuntimeSymbol(sym) { + if (!Object.getOwnPropertyDescriptor(Module, sym)) { + Object.defineProperty(Module, sym, { + configurable: true, + get() { + var msg = `'${sym}' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the Emscripten FAQ)`; + if (isExportedByForceFilesystem(sym)) { + msg += '. Alternatively, forcing filesystem support (-sFORCE_FILESYSTEM) can export this for you'; + } + abort(msg); + } + }); + } +} + +var runtimeDebug = true; // Switch to false at runtime to disable logging at the right times + +// Used by XXXXX_DEBUG settings to output debug messages. +function dbg(...args) { + if (!runtimeDebug && typeof runtimeDebug != 'undefined') return; + // TODO(sbc): Make this configurable somehow. Its not always convenient for + // logging to show up as warnings. + console.warn(...args); +} +// end include: runtime_debug.js +// include: memoryprofiler.js +// end include: memoryprofiler.js + + +function updateMemoryViews() { + var b = wasmMemory.buffer; + Module['HEAP8'] = HEAP8 = new Int8Array(b); + Module['HEAP16'] = HEAP16 = new Int16Array(b); + Module['HEAPU8'] = HEAPU8 = new Uint8Array(b); + Module['HEAPU16'] = HEAPU16 = new Uint16Array(b); + Module['HEAP32'] = HEAP32 = new Int32Array(b); + Module['HEAPU32'] = HEAPU32 = new Uint32Array(b); + Module['HEAPF32'] = HEAPF32 = new Float32Array(b); + Module['HEAPF64'] = HEAPF64 = new Float64Array(b); + Module['HEAP64'] = HEAP64 = new BigInt64Array(b); + Module['HEAPU64'] = HEAPU64 = new BigUint64Array(b); +} + +// end include: runtime_shared.js +assert(!Module['STACK_SIZE'], 'STACK_SIZE can no longer be set at runtime. Use -sSTACK_SIZE at link time') + +assert(typeof Int32Array != 'undefined' && typeof Float64Array !== 'undefined' && Int32Array.prototype.subarray != undefined && Int32Array.prototype.set != undefined, + 'JS engine does not provide full typed array support'); + +// If memory is defined in wasm, the user can't provide it, or set INITIAL_MEMORY +assert(!Module['wasmMemory'], 'Use of `wasmMemory` detected. Use -sIMPORTED_MEMORY to define wasmMemory externally'); +assert(!Module['INITIAL_MEMORY'], 'Detected runtime INITIAL_MEMORY setting. Use -sIMPORTED_MEMORY to define wasmMemory dynamically'); + +function preRun() { + if (Module['preRun']) { + if (typeof Module['preRun'] == 'function') Module['preRun'] = [Module['preRun']]; + while (Module['preRun'].length) { + addOnPreRun(Module['preRun'].shift()); + } + } + consumedModuleProp('preRun'); + callRuntimeCallbacks(onPreRuns); +} + +function initRuntime() { + assert(!runtimeInitialized); + runtimeInitialized = true; + + checkStackCookie(); + + + + wasmExports['__wasm_call_ctors'](); + + +} + +function preMain() { + checkStackCookie(); + +} + +function postRun() { + checkStackCookie(); + + if (Module['postRun']) { + if (typeof Module['postRun'] == 'function') Module['postRun'] = [Module['postRun']]; + while (Module['postRun'].length) { + addOnPostRun(Module['postRun'].shift()); + } + } + consumedModuleProp('postRun'); + + callRuntimeCallbacks(onPostRuns); +} + +// A counter of dependencies for calling run(). If we need to +// do asynchronous work before running, increment this and +// decrement it. Incrementing must happen in a place like +// Module.preRun (used by emcc to add file preloading). +// Note that you can add dependencies in preRun, even though +// it happens right before run - run will be postponed until +// the dependencies are met. +var runDependencies = 0; +var dependenciesFulfilled = null; // overridden to take different actions when all run dependencies are fulfilled +var runDependencyTracking = {}; +var runDependencyWatcher = null; + +function getUniqueRunDependency(id) { + var orig = id; + while (1) { + if (!runDependencyTracking[id]) return id; + id = orig + Math.random(); + } +} + +function addRunDependency(id) { + runDependencies++; + + Module['monitorRunDependencies']?.(runDependencies); + + if (id) { + assert(!runDependencyTracking[id]); + runDependencyTracking[id] = 1; + if (runDependencyWatcher === null && typeof setInterval != 'undefined') { + // Check for missing dependencies every few seconds + runDependencyWatcher = setInterval(() => { + if (ABORT) { + clearInterval(runDependencyWatcher); + runDependencyWatcher = null; + return; + } + var shown = false; + for (var dep in runDependencyTracking) { + if (!shown) { + shown = true; + err('still waiting on run dependencies:'); + } + err(`dependency: ${dep}`); + } + if (shown) { + err('(end of list)'); + } + }, 10000); + } + } else { + err('warning: run dependency added without ID'); + } +} + +function removeRunDependency(id) { + runDependencies--; + + Module['monitorRunDependencies']?.(runDependencies); + + if (id) { + assert(runDependencyTracking[id]); + delete runDependencyTracking[id]; + } else { + err('warning: run dependency removed without ID'); + } + if (runDependencies == 0) { + if (runDependencyWatcher !== null) { + clearInterval(runDependencyWatcher); + runDependencyWatcher = null; + } + if (dependenciesFulfilled) { + var callback = dependenciesFulfilled; + dependenciesFulfilled = null; + callback(); // can add another dependenciesFulfilled + } + } +} + +/** @param {string|number=} what */ +function abort(what) { + Module['onAbort']?.(what); + + what = 'Aborted(' + what + ')'; + // TODO(sbc): Should we remove printing and leave it up to whoever + // catches the exception? + err(what); + + ABORT = true; + + // Use a wasm runtime error, because a JS error might be seen as a foreign + // exception, which means we'd run destructors on it. We need the error to + // simply make the program stop. + // FIXME This approach does not work in Wasm EH because it currently does not assume + // all RuntimeErrors are from traps; it decides whether a RuntimeError is from + // a trap or not based on a hidden field within the object. So at the moment + // we don't have a way of throwing a wasm trap from JS. TODO Make a JS API that + // allows this in the wasm spec. + + // Suppress closure compiler warning here. Closure compiler's builtin extern + // definition for WebAssembly.RuntimeError claims it takes no arguments even + // though it can. + // TODO(https://github.com/google/closure-compiler/pull/3913): Remove if/when upstream closure gets fixed. + /** @suppress {checkTypes} */ + var e = new WebAssembly.RuntimeError(what); + + // Throw the error whether or not MODULARIZE is set because abort is used + // in code paths apart from instantiation where an exception is expected + // to be thrown when abort is called. + throw e; +} + +// show errors on likely calls to FS when it was not included +var FS = { + error() { + abort('Filesystem support (FS) was not included. The problem is that you are using files from JS, but files were not used from C/C++, so filesystem support was not auto-included. You can force-include filesystem support with -sFORCE_FILESYSTEM'); + }, + init() { FS.error() }, + createDataFile() { FS.error() }, + createPreloadedFile() { FS.error() }, + createLazyFile() { FS.error() }, + open() { FS.error() }, + mkdev() { FS.error() }, + registerDevice() { FS.error() }, + analyzePath() { FS.error() }, + + ErrnoError() { FS.error() }, +}; +Module['FS_createDataFile'] = FS.createDataFile; +Module['FS_createPreloadedFile'] = FS.createPreloadedFile; + +function createExportWrapper(name, nargs) { + return (...args) => { + assert(runtimeInitialized, `native function \`${name}\` called before runtime initialization`); + var f = wasmExports[name]; + assert(f, `exported native function \`${name}\` not found`); + // Only assert for too many arguments. Too few can be valid since the missing arguments will be zero filled. + assert(args.length <= nargs, `native function \`${name}\` called with ${args.length} args but expects ${nargs}`); + return f(...args); + }; +} + +var wasmBinaryFile; + +function findWasmBinary() { + return locateFile('cmTC_063d1.wasm'); +} + +function getBinarySync(file) { + if (file == wasmBinaryFile && wasmBinary) { + return new Uint8Array(wasmBinary); + } + if (readBinary) { + return readBinary(file); + } + throw 'both async and sync fetching of the wasm failed'; +} + +async function getWasmBinary(binaryFile) { + // If we don't have the binary yet, load it asynchronously using readAsync. + if (!wasmBinary) { + // Fetch the binary using readAsync + try { + var response = await readAsync(binaryFile); + return new Uint8Array(response); + } catch { + // Fall back to getBinarySync below; + } + } + + // Otherwise, getBinarySync should be able to get it synchronously + return getBinarySync(binaryFile); +} + +async function instantiateArrayBuffer(binaryFile, imports) { + try { + var binary = await getWasmBinary(binaryFile); + var instance = await WebAssembly.instantiate(binary, imports); + return instance; + } catch (reason) { + err(`failed to asynchronously prepare wasm: ${reason}`); + + // Warn on some common problems. + if (isFileURI(wasmBinaryFile)) { + err(`warning: Loading from a file URI (${wasmBinaryFile}) is not supported in most browsers. See https://emscripten.org/docs/getting_started/FAQ.html#how-do-i-run-a-local-webserver-for-testing-why-does-my-program-stall-in-downloading-or-preparing`); + } + abort(reason); + } +} + +async function instantiateAsync(binary, binaryFile, imports) { + if (!binary && typeof WebAssembly.instantiateStreaming == 'function' + // Don't use streaming for file:// delivered objects in a webview, fetch them synchronously. + && !isFileURI(binaryFile) + // Avoid instantiateStreaming() on Node.js environment for now, as while + // Node.js v18.1.0 implements it, it does not have a full fetch() + // implementation yet. + // + // Reference: + // https://github.com/emscripten-core/emscripten/pull/16917 + && !ENVIRONMENT_IS_NODE + ) { + try { + var response = fetch(binaryFile, { credentials: 'same-origin' }); + var instantiationResult = await WebAssembly.instantiateStreaming(response, imports); + return instantiationResult; + } catch (reason) { + // We expect the most common failure cause to be a bad MIME type for the binary, + // in which case falling back to ArrayBuffer instantiation should work. + err(`wasm streaming compile failed: ${reason}`); + err('falling back to ArrayBuffer instantiation'); + // fall back of instantiateArrayBuffer below + }; + } + return instantiateArrayBuffer(binaryFile, imports); +} + +function getWasmImports() { + // prepare imports + return { + 'env': wasmImports, + 'wasi_snapshot_preview1': wasmImports, + } +} + +// Create the wasm instance. +// Receives the wasm imports, returns the exports. +async function createWasm() { + // Load the wasm module and create an instance of using native support in the JS engine. + // handle a generated wasm instance, receiving its exports and + // performing other necessary setup + /** @param {WebAssembly.Module=} module*/ + function receiveInstance(instance, module) { + wasmExports = instance.exports; + + + + wasmMemory = wasmExports['memory']; + + assert(wasmMemory, 'memory not found in wasm exports'); + updateMemoryViews(); + + removeRunDependency('wasm-instantiate'); + return wasmExports; + } + // wait for the pthread pool (if any) + addRunDependency('wasm-instantiate'); + + // Prefer streaming instantiation if available. + // Async compilation can be confusing when an error on the page overwrites Module + // (for example, if the order of elements is wrong, and the one defining Module is + // later), so we save Module and check it later. + var trueModule = Module; + function receiveInstantiationResult(result) { + // 'result' is a ResultObject object which has both the module and instance. + // receiveInstance() will swap in the exports (to Module.asm) so they can be called + assert(Module === trueModule, 'the Module object should not be replaced during async compilation - perhaps the order of HTML elements is wrong?'); + trueModule = null; + // TODO: Due to Closure regression https://github.com/google/closure-compiler/issues/3193, the above line no longer optimizes out down to the following line. + // When the regression is fixed, can restore the above PTHREADS-enabled path. + return receiveInstance(result['instance']); + } + + var info = getWasmImports(); + + // User shell pages can write their own Module.instantiateWasm = function(imports, successCallback) callback + // to manually instantiate the Wasm module themselves. This allows pages to + // run the instantiation parallel to any other async startup actions they are + // performing. + // Also pthreads and wasm workers initialize the wasm instance through this + // path. + if (Module['instantiateWasm']) { + return new Promise((resolve, reject) => { + try { + Module['instantiateWasm'](info, (mod, inst) => { + receiveInstance(mod, inst); + resolve(mod.exports); + }); + } catch(e) { + err(`Module.instantiateWasm callback failed with error: ${e}`); + reject(e); + } + }); + } + + wasmBinaryFile ??= findWasmBinary(); + var result = await instantiateAsync(wasmBinary, wasmBinaryFile, info); + var exports = receiveInstantiationResult(result); + return exports; +} + +// end include: preamble.js + +// Begin JS library code + + + class ExitStatus { + name = 'ExitStatus'; + constructor(status) { + this.message = `Program terminated with exit(${status})`; + this.status = status; + } + } + + var callRuntimeCallbacks = (callbacks) => { + while (callbacks.length > 0) { + // Pass the module as the first argument. + callbacks.shift()(Module); + } + }; + var onPostRuns = []; + var addOnPostRun = (cb) => onPostRuns.unshift(cb); + + var onPreRuns = []; + var addOnPreRun = (cb) => onPreRuns.unshift(cb); + + + + /** + * @param {number} ptr + * @param {string} type + */ + function getValue(ptr, type = 'i8') { + if (type.endsWith('*')) type = '*'; + switch (type) { + case 'i1': return HEAP8[ptr]; + case 'i8': return HEAP8[ptr]; + case 'i16': return HEAP16[((ptr)>>1)]; + case 'i32': return HEAP32[((ptr)>>2)]; + case 'i64': return HEAP64[((ptr)>>3)]; + case 'float': return HEAPF32[((ptr)>>2)]; + case 'double': return HEAPF64[((ptr)>>3)]; + case '*': return HEAPU32[((ptr)>>2)]; + default: abort(`invalid type for getValue: ${type}`); + } + } + + var noExitRuntime = Module['noExitRuntime'] || true; + + var ptrToString = (ptr) => { + assert(typeof ptr === 'number'); + // With CAN_ADDRESS_2GB or MEMORY64, pointers are already unsigned. + ptr >>>= 0; + return '0x' + ptr.toString(16).padStart(8, '0'); + }; + + + /** + * @param {number} ptr + * @param {number} value + * @param {string} type + */ + function setValue(ptr, value, type = 'i8') { + if (type.endsWith('*')) type = '*'; + switch (type) { + case 'i1': HEAP8[ptr] = value; break; + case 'i8': HEAP8[ptr] = value; break; + case 'i16': HEAP16[((ptr)>>1)] = value; break; + case 'i32': HEAP32[((ptr)>>2)] = value; break; + case 'i64': HEAP64[((ptr)>>3)] = BigInt(value); break; + case 'float': HEAPF32[((ptr)>>2)] = value; break; + case 'double': HEAPF64[((ptr)>>3)] = value; break; + case '*': HEAPU32[((ptr)>>2)] = value; break; + default: abort(`invalid type for setValue: ${type}`); + } + } + + var stackRestore = (val) => __emscripten_stack_restore(val); + + var stackSave = () => _emscripten_stack_get_current(); + + var warnOnce = (text) => { + warnOnce.shown ||= {}; + if (!warnOnce.shown[text]) { + warnOnce.shown[text] = 1; + if (ENVIRONMENT_IS_NODE) text = 'warning: ' + text; + err(text); + } + }; + + + var runtimeKeepaliveCounter = 0; + var keepRuntimeAlive = () => noExitRuntime || runtimeKeepaliveCounter > 0; + var _proc_exit = (code) => { + EXITSTATUS = code; + if (!keepRuntimeAlive()) { + Module['onExit']?.(code); + ABORT = true; + } + quit_(code, new ExitStatus(code)); + }; + + + /** @param {boolean|number=} implicit */ + var exitJS = (status, implicit) => { + EXITSTATUS = status; + + checkUnflushedContent(); + + // if exit() was called explicitly, warn the user if the runtime isn't actually being shut down + if (keepRuntimeAlive() && !implicit) { + var msg = `program exited (with status: ${status}), but keepRuntimeAlive() is set (counter=${runtimeKeepaliveCounter}) due to an async operation, so halting execution but not exiting the runtime or preventing further async execution (you can use emscripten_force_exit, if you want to force a true shutdown)`; + err(msg); + } + + _proc_exit(status); + }; + + var handleException = (e) => { + // Certain exception types we do not treat as errors since they are used for + // internal control flow. + // 1. ExitStatus, which is thrown by exit() + // 2. "unwind", which is thrown by emscripten_unwind_to_js_event_loop() and others + // that wish to return to JS event loop. + if (e instanceof ExitStatus || e == 'unwind') { + return EXITSTATUS; + } + checkStackCookie(); + if (e instanceof WebAssembly.RuntimeError) { + if (_emscripten_stack_get_current() <= 0) { + err('Stack overflow detected. You can try increasing -sSTACK_SIZE (currently set to 65536)'); + } + } + quit_(1, e); + }; + + var lengthBytesUTF8 = (str) => { + var len = 0; + for (var i = 0; i < str.length; ++i) { + // Gotcha: charCodeAt returns a 16-bit word that is a UTF-16 encoded code + // unit, not a Unicode code point of the character! So decode + // UTF16->UTF32->UTF8. + // See http://unicode.org/faq/utf_bom.html#utf16-3 + var c = str.charCodeAt(i); // possibly a lead surrogate + if (c <= 0x7F) { + len++; + } else if (c <= 0x7FF) { + len += 2; + } else if (c >= 0xD800 && c <= 0xDFFF) { + len += 4; ++i; + } else { + len += 3; + } + } + return len; + }; + + var stringToUTF8Array = (str, heap, outIdx, maxBytesToWrite) => { + assert(typeof str === 'string', `stringToUTF8Array expects a string (got ${typeof str})`); + // Parameter maxBytesToWrite is not optional. Negative values, 0, null, + // undefined and false each don't write out any bytes. + if (!(maxBytesToWrite > 0)) + return 0; + + var startIdx = outIdx; + var endIdx = outIdx + maxBytesToWrite - 1; // -1 for string null terminator. + for (var i = 0; i < str.length; ++i) { + // Gotcha: charCodeAt returns a 16-bit word that is a UTF-16 encoded code + // unit, not a Unicode code point of the character! So decode + // UTF16->UTF32->UTF8. + // See http://unicode.org/faq/utf_bom.html#utf16-3 + // For UTF8 byte structure, see http://en.wikipedia.org/wiki/UTF-8#Description + // and https://www.ietf.org/rfc/rfc2279.txt + // and https://tools.ietf.org/html/rfc3629 + var u = str.charCodeAt(i); // possibly a lead surrogate + if (u >= 0xD800 && u <= 0xDFFF) { + var u1 = str.charCodeAt(++i); + u = 0x10000 + ((u & 0x3FF) << 10) | (u1 & 0x3FF); + } + if (u <= 0x7F) { + if (outIdx >= endIdx) break; + heap[outIdx++] = u; + } else if (u <= 0x7FF) { + if (outIdx + 1 >= endIdx) break; + heap[outIdx++] = 0xC0 | (u >> 6); + heap[outIdx++] = 0x80 | (u & 63); + } else if (u <= 0xFFFF) { + if (outIdx + 2 >= endIdx) break; + heap[outIdx++] = 0xE0 | (u >> 12); + heap[outIdx++] = 0x80 | ((u >> 6) & 63); + heap[outIdx++] = 0x80 | (u & 63); + } else { + if (outIdx + 3 >= endIdx) break; + if (u > 0x10FFFF) warnOnce('Invalid Unicode code point ' + ptrToString(u) + ' encountered when serializing a JS string to a UTF-8 string in wasm memory! (Valid unicode code points should be in range 0-0x10FFFF).'); + heap[outIdx++] = 0xF0 | (u >> 18); + heap[outIdx++] = 0x80 | ((u >> 12) & 63); + heap[outIdx++] = 0x80 | ((u >> 6) & 63); + heap[outIdx++] = 0x80 | (u & 63); + } + } + // Null-terminate the pointer to the buffer. + heap[outIdx] = 0; + return outIdx - startIdx; + }; + var stringToUTF8 = (str, outPtr, maxBytesToWrite) => { + assert(typeof maxBytesToWrite == 'number', 'stringToUTF8(str, outPtr, maxBytesToWrite) is missing the third parameter that specifies the length of the output buffer!'); + return stringToUTF8Array(str, HEAPU8, outPtr, maxBytesToWrite); + }; + + var stackAlloc = (sz) => __emscripten_stack_alloc(sz); + var stringToUTF8OnStack = (str) => { + var size = lengthBytesUTF8(str) + 1; + var ret = stackAlloc(size); + stringToUTF8(str, ret, size); + return ret; + }; +// End JS library code + +function checkIncomingModuleAPI() { + ignoredModuleProp('fetchSettings'); +} +var wasmImports = { + +}; +var wasmExports; +createWasm(); +var ___wasm_call_ctors = createExportWrapper('__wasm_call_ctors', 0); +var _main = Module['_main'] = createExportWrapper('__main_argc_argv', 2); +var _fflush = createExportWrapper('fflush', 1); +var _emscripten_stack_init = () => (_emscripten_stack_init = wasmExports['emscripten_stack_init'])(); +var _emscripten_stack_get_free = () => (_emscripten_stack_get_free = wasmExports['emscripten_stack_get_free'])(); +var _emscripten_stack_get_base = () => (_emscripten_stack_get_base = wasmExports['emscripten_stack_get_base'])(); +var _emscripten_stack_get_end = () => (_emscripten_stack_get_end = wasmExports['emscripten_stack_get_end'])(); +var __emscripten_stack_restore = (a0) => (__emscripten_stack_restore = wasmExports['_emscripten_stack_restore'])(a0); +var __emscripten_stack_alloc = (a0) => (__emscripten_stack_alloc = wasmExports['_emscripten_stack_alloc'])(a0); +var _emscripten_stack_get_current = () => (_emscripten_stack_get_current = wasmExports['emscripten_stack_get_current'])(); + + +// include: postamble.js +// === Auto-generated postamble setup entry stuff === + +var missingLibrarySymbols = [ + 'writeI53ToI64', + 'writeI53ToI64Clamped', + 'writeI53ToI64Signaling', + 'writeI53ToU64Clamped', + 'writeI53ToU64Signaling', + 'readI53FromI64', + 'readI53FromU64', + 'convertI32PairToI53', + 'convertI32PairToI53Checked', + 'convertU32PairToI53', + 'bigintToI53Checked', + 'getTempRet0', + 'setTempRet0', + 'zeroMemory', + 'getHeapMax', + 'abortOnCannotGrowMemory', + 'growMemory', + 'strError', + 'inetPton4', + 'inetNtop4', + 'inetPton6', + 'inetNtop6', + 'readSockaddr', + 'writeSockaddr', + 'emscriptenLog', + 'readEmAsmArgs', + 'jstoi_q', + 'getExecutableName', + 'listenOnce', + 'autoResumeAudioContext', + 'getDynCaller', + 'dynCall', + 'runtimeKeepalivePush', + 'runtimeKeepalivePop', + 'callUserCallback', + 'maybeExit', + 'asmjsMangle', + 'asyncLoad', + 'alignMemory', + 'mmapAlloc', + 'HandleAllocator', + 'getNativeTypeSize', + 'addOnInit', + 'addOnPostCtor', + 'addOnPreMain', + 'addOnExit', + 'STACK_SIZE', + 'STACK_ALIGN', + 'POINTER_SIZE', + 'ASSERTIONS', + 'getCFunc', + 'ccall', + 'cwrap', + 'uleb128Encode', + 'sigToWasmTypes', + 'generateFuncType', + 'convertJsFunctionToWasm', + 'getEmptyTableSlot', + 'updateTableMap', + 'getFunctionAddress', + 'addFunction', + 'removeFunction', + 'reallyNegative', + 'unSign', + 'strLen', + 'reSign', + 'formatString', + 'UTF8ArrayToString', + 'UTF8ToString', + 'intArrayFromString', + 'intArrayToString', + 'AsciiToString', + 'stringToAscii', + 'UTF16ToString', + 'stringToUTF16', + 'lengthBytesUTF16', + 'UTF32ToString', + 'stringToUTF32', + 'lengthBytesUTF32', + 'stringToNewUTF8', + 'writeArrayToMemory', + 'registerKeyEventCallback', + 'maybeCStringToJsString', + 'findEventTarget', + 'getBoundingClientRect', + 'fillMouseEventData', + 'registerMouseEventCallback', + 'registerWheelEventCallback', + 'registerUiEventCallback', + 'registerFocusEventCallback', + 'fillDeviceOrientationEventData', + 'registerDeviceOrientationEventCallback', + 'fillDeviceMotionEventData', + 'registerDeviceMotionEventCallback', + 'screenOrientation', + 'fillOrientationChangeEventData', + 'registerOrientationChangeEventCallback', + 'fillFullscreenChangeEventData', + 'registerFullscreenChangeEventCallback', + 'JSEvents_requestFullscreen', + 'JSEvents_resizeCanvasForFullscreen', + 'registerRestoreOldStyle', + 'hideEverythingExceptGivenElement', + 'restoreHiddenElements', + 'setLetterbox', + 'softFullscreenResizeWebGLRenderTarget', + 'doRequestFullscreen', + 'fillPointerlockChangeEventData', + 'registerPointerlockChangeEventCallback', + 'registerPointerlockErrorEventCallback', + 'requestPointerLock', + 'fillVisibilityChangeEventData', + 'registerVisibilityChangeEventCallback', + 'registerTouchEventCallback', + 'fillGamepadEventData', + 'registerGamepadEventCallback', + 'registerBeforeUnloadEventCallback', + 'fillBatteryEventData', + 'battery', + 'registerBatteryEventCallback', + 'setCanvasElementSize', + 'getCanvasElementSize', + 'jsStackTrace', + 'getCallstack', + 'convertPCtoSourceLocation', + 'getEnvStrings', + 'checkWasiClock', + 'flush_NO_FILESYSTEM', + 'wasiRightsToMuslOFlags', + 'wasiOFlagsToMuslOFlags', + 'initRandomFill', + 'randomFill', + 'safeSetTimeout', + 'setImmediateWrapped', + 'safeRequestAnimationFrame', + 'clearImmediateWrapped', + 'registerPostMainLoop', + 'registerPreMainLoop', + 'getPromise', + 'makePromise', + 'idsToPromises', + 'makePromiseCallback', + 'ExceptionInfo', + 'findMatchingCatch', + 'Browser_asyncPrepareDataCounter', + 'isLeapYear', + 'ydayFromDate', + 'arraySum', + 'addDays', + 'getSocketFromFD', + 'getSocketAddress', + 'FS_createPreloadedFile', + 'FS_modeStringToFlags', + 'FS_getMode', + 'FS_stdin_getChar', + 'FS_unlink', + 'FS_createDataFile', + 'FS_mkdirTree', + '_setNetworkCallback', + 'heapObjectForWebGLType', + 'toTypedArrayIndex', + 'webgl_enable_ANGLE_instanced_arrays', + 'webgl_enable_OES_vertex_array_object', + 'webgl_enable_WEBGL_draw_buffers', + 'webgl_enable_WEBGL_multi_draw', + 'webgl_enable_EXT_polygon_offset_clamp', + 'webgl_enable_EXT_clip_control', + 'webgl_enable_WEBGL_polygon_mode', + 'emscriptenWebGLGet', + 'computeUnpackAlignedImageSize', + 'colorChannelsInGlTextureFormat', + 'emscriptenWebGLGetTexPixelData', + 'emscriptenWebGLGetUniform', + 'webglGetUniformLocation', + 'webglPrepareUniformLocationsBeforeFirstUse', + 'webglGetLeftBracePos', + 'emscriptenWebGLGetVertexAttrib', + '__glGetActiveAttribOrUniform', + 'writeGLArray', + 'registerWebGlEventCallback', + 'runAndAbortIfError', + 'ALLOC_NORMAL', + 'ALLOC_STACK', + 'allocate', + 'writeStringToMemory', + 'writeAsciiToMemory', + 'demangle', + 'stackTrace', +]; +missingLibrarySymbols.forEach(missingLibrarySymbol) + +var unexportedSymbols = [ + 'run', + 'addRunDependency', + 'removeRunDependency', + 'out', + 'err', + 'callMain', + 'abort', + 'wasmMemory', + 'wasmExports', + 'writeStackCookie', + 'checkStackCookie', + 'INT53_MAX', + 'INT53_MIN', + 'stackSave', + 'stackRestore', + 'stackAlloc', + 'ptrToString', + 'exitJS', + 'ENV', + 'ERRNO_CODES', + 'DNS', + 'Protocols', + 'Sockets', + 'timers', + 'warnOnce', + 'readEmAsmArgsArray', + 'jstoi_s', + 'handleException', + 'keepRuntimeAlive', + 'wasmTable', + 'noExitRuntime', + 'addOnPreRun', + 'addOnPostRun', + 'freeTableIndexes', + 'functionsInTableMap', + 'setValue', + 'getValue', + 'PATH', + 'PATH_FS', + 'UTF8Decoder', + 'stringToUTF8Array', + 'stringToUTF8', + 'lengthBytesUTF8', + 'UTF16Decoder', + 'stringToUTF8OnStack', + 'JSEvents', + 'specialHTMLTargets', + 'findCanvasEventTarget', + 'currentFullscreenStrategy', + 'restoreOldWindowedStyle', + 'UNWIND_CACHE', + 'ExitStatus', + 'emSetImmediate', + 'emClearImmediate_deps', + 'emClearImmediate', + 'promiseMap', + 'uncaughtExceptionCount', + 'exceptionLast', + 'exceptionCaught', + 'Browser', + 'getPreloadedImageData__data', + 'wget', + 'MONTH_DAYS_REGULAR', + 'MONTH_DAYS_LEAP', + 'MONTH_DAYS_REGULAR_CUMULATIVE', + 'MONTH_DAYS_LEAP_CUMULATIVE', + 'SYSCALLS', + 'preloadPlugins', + 'FS_stdin_getChar_buffer', + 'FS_createPath', + 'FS_createDevice', + 'FS_readFile', + 'FS', + 'FS_createLazyFile', + 'MEMFS', + 'TTY', + 'PIPEFS', + 'SOCKFS', + 'tempFixedLengthArray', + 'miniTempWebGLFloatBuffers', + 'miniTempWebGLIntBuffers', + 'GL', + 'AL', + 'GLUT', + 'EGL', + 'GLEW', + 'IDBStore', + 'SDL', + 'SDL_gfx', + 'allocateUTF8', + 'allocateUTF8OnStack', + 'print', + 'printErr', +]; +unexportedSymbols.forEach(unexportedRuntimeSymbol); + + + +var calledRun; + +function callMain(args = []) { + assert(runDependencies == 0, 'cannot call main when async dependencies remain! (listen on Module["onRuntimeInitialized"])'); + assert(typeof onPreRuns === 'undefined' || onPreRuns.length == 0, 'cannot call main when preRun functions remain to be called'); + + var entryFunction = _main; + + args.unshift(thisProgram); + + var argc = args.length; + var argv = stackAlloc((argc + 1) * 4); + var argv_ptr = argv; + args.forEach((arg) => { + HEAPU32[((argv_ptr)>>2)] = stringToUTF8OnStack(arg); + argv_ptr += 4; + }); + HEAPU32[((argv_ptr)>>2)] = 0; + + try { + + var ret = entryFunction(argc, argv); + + // if we're not running an evented main loop, it's time to exit + exitJS(ret, /* implicit = */ true); + return ret; + } catch (e) { + return handleException(e); + } +} + +function stackCheckInit() { + // This is normally called automatically during __wasm_call_ctors but need to + // get these values before even running any of the ctors so we call it redundantly + // here. + _emscripten_stack_init(); + // TODO(sbc): Move writeStackCookie to native to to avoid this. + writeStackCookie(); +} + +function run(args = arguments_) { + + if (runDependencies > 0) { + dependenciesFulfilled = run; + return; + } + + stackCheckInit(); + + preRun(); + + // a preRun added a dependency, run will be called later + if (runDependencies > 0) { + dependenciesFulfilled = run; + return; + } + + function doRun() { + // run may have just been called through dependencies being fulfilled just in this very frame, + // or while the async setStatus time below was happening + assert(!calledRun); + calledRun = true; + Module['calledRun'] = true; + + if (ABORT) return; + + initRuntime(); + + preMain(); + + Module['onRuntimeInitialized']?.(); + consumedModuleProp('onRuntimeInitialized'); + + var noInitialRun = Module['noInitialRun'];legacyModuleProp('noInitialRun', 'noInitialRun'); + if (!noInitialRun) callMain(args); + + postRun(); + } + + if (Module['setStatus']) { + Module['setStatus']('Running...'); + setTimeout(() => { + setTimeout(() => Module['setStatus'](''), 1); + doRun(); + }, 1); + } else + { + doRun(); + } + checkStackCookie(); +} + +function checkUnflushedContent() { + // Compiler settings do not allow exiting the runtime, so flushing + // the streams is not possible. but in ASSERTIONS mode we check + // if there was something to flush, and if so tell the user they + // should request that the runtime be exitable. + // Normally we would not even include flush() at all, but in ASSERTIONS + // builds we do so just for this check, and here we see if there is any + // content to flush, that is, we check if there would have been + // something a non-ASSERTIONS build would have not seen. + // How we flush the streams depends on whether we are in SYSCALLS_REQUIRE_FILESYSTEM=0 + // mode (which has its own special function for this; otherwise, all + // the code is inside libc) + var oldOut = out; + var oldErr = err; + var has = false; + out = err = (x) => { + has = true; + } + try { // it doesn't matter if it fails + _fflush(0); + } catch(e) {} + out = oldOut; + err = oldErr; + if (has) { + warnOnce('stdio streams had content in them that was not flushed. you should set EXIT_RUNTIME to 1 (see the Emscripten FAQ), or make sure to emit a newline when you printf etc.'); + warnOnce('(this may also be due to not including full filesystem support - try building with -sFORCE_FILESYSTEM)'); + } +} + +if (Module['preInit']) { + if (typeof Module['preInit'] == 'function') Module['preInit'] = [Module['preInit']]; + while (Module['preInit'].length > 0) { + Module['preInit'].pop()(); + } +} +consumedModuleProp('preInit'); + +run(); + +// end include: postamble.js + diff --git a/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/3.28.3/CMakeSystem.cmake b/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/3.28.3/CMakeSystem.cmake new file mode 100644 index 0000000..196df84 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/3.28.3/CMakeSystem.cmake @@ -0,0 +1,15 @@ +set(CMAKE_HOST_SYSTEM "Linux-6.8.0-53-generic") +set(CMAKE_HOST_SYSTEM_NAME "Linux") +set(CMAKE_HOST_SYSTEM_VERSION "6.8.0-53-generic") +set(CMAKE_HOST_SYSTEM_PROCESSOR "x86_64") + +include("/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/cmake/Modules/Platform/Emscripten.cmake") + +set(CMAKE_SYSTEM "Emscripten-1") +set(CMAKE_SYSTEM_NAME "Emscripten") +set(CMAKE_SYSTEM_VERSION "1") +set(CMAKE_SYSTEM_PROCESSOR "x86") + +set(CMAKE_CROSSCOMPILING "TRUE") + +set(CMAKE_SYSTEM_LOADED 1) diff --git a/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/3.28.3/CompilerIdC/CMakeCCompilerId.c b/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/3.28.3/CompilerIdC/CMakeCCompilerId.c new file mode 100644 index 0000000..0a0ec9b --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/3.28.3/CompilerIdC/CMakeCCompilerId.c @@ -0,0 +1,880 @@ +#ifdef __cplusplus +# error "A C++ compiler has been selected for C." +#endif + +#if defined(__18CXX) +# define ID_VOID_MAIN +#endif +#if defined(__CLASSIC_C__) +/* cv-qualifiers did not exist in K&R C */ +# define const +# define volatile +#endif + +#if !defined(__has_include) +/* If the compiler does not have __has_include, pretend the answer is + always no. */ +# define __has_include(x) 0 +#endif + + +/* Version number components: V=Version, R=Revision, P=Patch + Version date components: YYYY=Year, MM=Month, DD=Day */ + +#if defined(__INTEL_COMPILER) || defined(__ICC) +# define COMPILER_ID "Intel" +# if defined(_MSC_VER) +# define SIMULATE_ID "MSVC" +# endif +# if defined(__GNUC__) +# define SIMULATE_ID "GNU" +# endif + /* __INTEL_COMPILER = VRP prior to 2021, and then VVVV for 2021 and later, + except that a few beta releases use the old format with V=2021. */ +# if __INTEL_COMPILER < 2021 || __INTEL_COMPILER == 202110 || __INTEL_COMPILER == 202111 +# define COMPILER_VERSION_MAJOR DEC(__INTEL_COMPILER/100) +# define COMPILER_VERSION_MINOR DEC(__INTEL_COMPILER/10 % 10) +# if defined(__INTEL_COMPILER_UPDATE) +# define COMPILER_VERSION_PATCH DEC(__INTEL_COMPILER_UPDATE) +# else +# define COMPILER_VERSION_PATCH DEC(__INTEL_COMPILER % 10) +# endif +# else +# define COMPILER_VERSION_MAJOR DEC(__INTEL_COMPILER) +# define COMPILER_VERSION_MINOR DEC(__INTEL_COMPILER_UPDATE) + /* The third version component from --version is an update index, + but no macro is provided for it. */ +# define COMPILER_VERSION_PATCH DEC(0) +# endif +# if defined(__INTEL_COMPILER_BUILD_DATE) + /* __INTEL_COMPILER_BUILD_DATE = YYYYMMDD */ +# define COMPILER_VERSION_TWEAK DEC(__INTEL_COMPILER_BUILD_DATE) +# endif +# if defined(_MSC_VER) + /* _MSC_VER = VVRR */ +# define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100) +# define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100) +# endif +# if defined(__GNUC__) +# define SIMULATE_VERSION_MAJOR DEC(__GNUC__) +# elif defined(__GNUG__) +# define SIMULATE_VERSION_MAJOR DEC(__GNUG__) +# endif +# if defined(__GNUC_MINOR__) +# define SIMULATE_VERSION_MINOR DEC(__GNUC_MINOR__) +# endif +# if defined(__GNUC_PATCHLEVEL__) +# define SIMULATE_VERSION_PATCH DEC(__GNUC_PATCHLEVEL__) +# endif + +#elif (defined(__clang__) && defined(__INTEL_CLANG_COMPILER)) || defined(__INTEL_LLVM_COMPILER) +# define COMPILER_ID "IntelLLVM" +#if defined(_MSC_VER) +# define SIMULATE_ID "MSVC" +#endif +#if defined(__GNUC__) +# define SIMULATE_ID "GNU" +#endif +/* __INTEL_LLVM_COMPILER = VVVVRP prior to 2021.2.0, VVVVRRPP for 2021.2.0 and + * later. Look for 6 digit vs. 8 digit version number to decide encoding. + * VVVV is no smaller than the current year when a version is released. + */ +#if __INTEL_LLVM_COMPILER < 1000000L +# define COMPILER_VERSION_MAJOR DEC(__INTEL_LLVM_COMPILER/100) +# define COMPILER_VERSION_MINOR DEC(__INTEL_LLVM_COMPILER/10 % 10) +# define COMPILER_VERSION_PATCH DEC(__INTEL_LLVM_COMPILER % 10) +#else +# define COMPILER_VERSION_MAJOR DEC(__INTEL_LLVM_COMPILER/10000) +# define COMPILER_VERSION_MINOR DEC(__INTEL_LLVM_COMPILER/100 % 100) +# define COMPILER_VERSION_PATCH DEC(__INTEL_LLVM_COMPILER % 100) +#endif +#if defined(_MSC_VER) + /* _MSC_VER = VVRR */ +# define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100) +# define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100) +#endif +#if defined(__GNUC__) +# define SIMULATE_VERSION_MAJOR DEC(__GNUC__) +#elif defined(__GNUG__) +# define SIMULATE_VERSION_MAJOR DEC(__GNUG__) +#endif +#if defined(__GNUC_MINOR__) +# define SIMULATE_VERSION_MINOR DEC(__GNUC_MINOR__) +#endif +#if defined(__GNUC_PATCHLEVEL__) +# define SIMULATE_VERSION_PATCH DEC(__GNUC_PATCHLEVEL__) +#endif + +#elif defined(__PATHCC__) +# define COMPILER_ID "PathScale" +# define COMPILER_VERSION_MAJOR DEC(__PATHCC__) +# define COMPILER_VERSION_MINOR DEC(__PATHCC_MINOR__) +# if defined(__PATHCC_PATCHLEVEL__) +# define COMPILER_VERSION_PATCH DEC(__PATHCC_PATCHLEVEL__) +# endif + +#elif defined(__BORLANDC__) && defined(__CODEGEARC_VERSION__) +# define COMPILER_ID "Embarcadero" +# define COMPILER_VERSION_MAJOR HEX(__CODEGEARC_VERSION__>>24 & 0x00FF) +# define COMPILER_VERSION_MINOR HEX(__CODEGEARC_VERSION__>>16 & 0x00FF) +# define COMPILER_VERSION_PATCH DEC(__CODEGEARC_VERSION__ & 0xFFFF) + +#elif defined(__BORLANDC__) +# define COMPILER_ID "Borland" + /* __BORLANDC__ = 0xVRR */ +# define COMPILER_VERSION_MAJOR HEX(__BORLANDC__>>8) +# define COMPILER_VERSION_MINOR HEX(__BORLANDC__ & 0xFF) + +#elif defined(__WATCOMC__) && __WATCOMC__ < 1200 +# define COMPILER_ID "Watcom" + /* __WATCOMC__ = VVRR */ +# define COMPILER_VERSION_MAJOR DEC(__WATCOMC__ / 100) +# define COMPILER_VERSION_MINOR DEC((__WATCOMC__ / 10) % 10) +# if (__WATCOMC__ % 10) > 0 +# define COMPILER_VERSION_PATCH DEC(__WATCOMC__ % 10) +# endif + +#elif defined(__WATCOMC__) +# define COMPILER_ID "OpenWatcom" + /* __WATCOMC__ = VVRP + 1100 */ +# define COMPILER_VERSION_MAJOR DEC((__WATCOMC__ - 1100) / 100) +# define COMPILER_VERSION_MINOR DEC((__WATCOMC__ / 10) % 10) +# if (__WATCOMC__ % 10) > 0 +# define COMPILER_VERSION_PATCH DEC(__WATCOMC__ % 10) +# endif + +#elif defined(__SUNPRO_C) +# define COMPILER_ID "SunPro" +# if __SUNPRO_C >= 0x5100 + /* __SUNPRO_C = 0xVRRP */ +# define COMPILER_VERSION_MAJOR HEX(__SUNPRO_C>>12) +# define COMPILER_VERSION_MINOR HEX(__SUNPRO_C>>4 & 0xFF) +# define COMPILER_VERSION_PATCH HEX(__SUNPRO_C & 0xF) +# else + /* __SUNPRO_CC = 0xVRP */ +# define COMPILER_VERSION_MAJOR HEX(__SUNPRO_C>>8) +# define COMPILER_VERSION_MINOR HEX(__SUNPRO_C>>4 & 0xF) +# define COMPILER_VERSION_PATCH HEX(__SUNPRO_C & 0xF) +# endif + +#elif defined(__HP_cc) +# define COMPILER_ID "HP" + /* __HP_cc = VVRRPP */ +# define COMPILER_VERSION_MAJOR DEC(__HP_cc/10000) +# define COMPILER_VERSION_MINOR DEC(__HP_cc/100 % 100) +# define COMPILER_VERSION_PATCH DEC(__HP_cc % 100) + +#elif defined(__DECC) +# define COMPILER_ID "Compaq" + /* __DECC_VER = VVRRTPPPP */ +# define COMPILER_VERSION_MAJOR DEC(__DECC_VER/10000000) +# define COMPILER_VERSION_MINOR DEC(__DECC_VER/100000 % 100) +# define COMPILER_VERSION_PATCH DEC(__DECC_VER % 10000) + +#elif defined(__IBMC__) && defined(__COMPILER_VER__) +# define COMPILER_ID "zOS" + /* __IBMC__ = VRP */ +# define COMPILER_VERSION_MAJOR DEC(__IBMC__/100) +# define COMPILER_VERSION_MINOR DEC(__IBMC__/10 % 10) +# define COMPILER_VERSION_PATCH DEC(__IBMC__ % 10) + +#elif defined(__open_xl__) && defined(__clang__) +# define COMPILER_ID "IBMClang" +# define COMPILER_VERSION_MAJOR DEC(__open_xl_version__) +# define COMPILER_VERSION_MINOR DEC(__open_xl_release__) +# define COMPILER_VERSION_PATCH DEC(__open_xl_modification__) +# define COMPILER_VERSION_TWEAK DEC(__open_xl_ptf_fix_level__) + + +#elif defined(__ibmxl__) && defined(__clang__) +# define COMPILER_ID "XLClang" +# define COMPILER_VERSION_MAJOR DEC(__ibmxl_version__) +# define COMPILER_VERSION_MINOR DEC(__ibmxl_release__) +# define COMPILER_VERSION_PATCH DEC(__ibmxl_modification__) +# define COMPILER_VERSION_TWEAK DEC(__ibmxl_ptf_fix_level__) + + +#elif defined(__IBMC__) && !defined(__COMPILER_VER__) && __IBMC__ >= 800 +# define COMPILER_ID "XL" + /* __IBMC__ = VRP */ +# define COMPILER_VERSION_MAJOR DEC(__IBMC__/100) +# define COMPILER_VERSION_MINOR DEC(__IBMC__/10 % 10) +# define COMPILER_VERSION_PATCH DEC(__IBMC__ % 10) + +#elif defined(__IBMC__) && !defined(__COMPILER_VER__) && __IBMC__ < 800 +# define COMPILER_ID "VisualAge" + /* __IBMC__ = VRP */ +# define COMPILER_VERSION_MAJOR DEC(__IBMC__/100) +# define COMPILER_VERSION_MINOR DEC(__IBMC__/10 % 10) +# define COMPILER_VERSION_PATCH DEC(__IBMC__ % 10) + +#elif defined(__NVCOMPILER) +# define COMPILER_ID "NVHPC" +# define COMPILER_VERSION_MAJOR DEC(__NVCOMPILER_MAJOR__) +# define COMPILER_VERSION_MINOR DEC(__NVCOMPILER_MINOR__) +# if defined(__NVCOMPILER_PATCHLEVEL__) +# define COMPILER_VERSION_PATCH DEC(__NVCOMPILER_PATCHLEVEL__) +# endif + +#elif defined(__PGI) +# define COMPILER_ID "PGI" +# define COMPILER_VERSION_MAJOR DEC(__PGIC__) +# define COMPILER_VERSION_MINOR DEC(__PGIC_MINOR__) +# if defined(__PGIC_PATCHLEVEL__) +# define COMPILER_VERSION_PATCH DEC(__PGIC_PATCHLEVEL__) +# endif + +#elif defined(__clang__) && defined(__cray__) +# define COMPILER_ID "CrayClang" +# define COMPILER_VERSION_MAJOR DEC(__cray_major__) +# define COMPILER_VERSION_MINOR DEC(__cray_minor__) +# define COMPILER_VERSION_PATCH DEC(__cray_patchlevel__) +# define COMPILER_VERSION_INTERNAL_STR __clang_version__ + + +#elif defined(_CRAYC) +# define COMPILER_ID "Cray" +# define COMPILER_VERSION_MAJOR DEC(_RELEASE_MAJOR) +# define COMPILER_VERSION_MINOR DEC(_RELEASE_MINOR) + +#elif defined(__TI_COMPILER_VERSION__) +# define COMPILER_ID "TI" + /* __TI_COMPILER_VERSION__ = VVVRRRPPP */ +# define COMPILER_VERSION_MAJOR DEC(__TI_COMPILER_VERSION__/1000000) +# define COMPILER_VERSION_MINOR DEC(__TI_COMPILER_VERSION__/1000 % 1000) +# define COMPILER_VERSION_PATCH DEC(__TI_COMPILER_VERSION__ % 1000) + +#elif defined(__CLANG_FUJITSU) +# define COMPILER_ID "FujitsuClang" +# define COMPILER_VERSION_MAJOR DEC(__FCC_major__) +# define COMPILER_VERSION_MINOR DEC(__FCC_minor__) +# define COMPILER_VERSION_PATCH DEC(__FCC_patchlevel__) +# define COMPILER_VERSION_INTERNAL_STR __clang_version__ + + +#elif defined(__FUJITSU) +# define COMPILER_ID "Fujitsu" +# if defined(__FCC_version__) +# define COMPILER_VERSION __FCC_version__ +# elif defined(__FCC_major__) +# define COMPILER_VERSION_MAJOR DEC(__FCC_major__) +# define COMPILER_VERSION_MINOR DEC(__FCC_minor__) +# define COMPILER_VERSION_PATCH DEC(__FCC_patchlevel__) +# endif +# if defined(__fcc_version) +# define COMPILER_VERSION_INTERNAL DEC(__fcc_version) +# elif defined(__FCC_VERSION) +# define COMPILER_VERSION_INTERNAL DEC(__FCC_VERSION) +# endif + + +#elif defined(__ghs__) +# define COMPILER_ID "GHS" +/* __GHS_VERSION_NUMBER = VVVVRP */ +# ifdef __GHS_VERSION_NUMBER +# define COMPILER_VERSION_MAJOR DEC(__GHS_VERSION_NUMBER / 100) +# define COMPILER_VERSION_MINOR DEC(__GHS_VERSION_NUMBER / 10 % 10) +# define COMPILER_VERSION_PATCH DEC(__GHS_VERSION_NUMBER % 10) +# endif + +#elif defined(__TASKING__) +# define COMPILER_ID "Tasking" + # define COMPILER_VERSION_MAJOR DEC(__VERSION__/1000) + # define COMPILER_VERSION_MINOR DEC(__VERSION__ % 100) +# define COMPILER_VERSION_INTERNAL DEC(__VERSION__) + +#elif defined(__ORANGEC__) +# define COMPILER_ID "OrangeC" +# define COMPILER_VERSION_MAJOR DEC(__ORANGEC_MAJOR__) +# define COMPILER_VERSION_MINOR DEC(__ORANGEC_MINOR__) +# define COMPILER_VERSION_PATCH DEC(__ORANGEC_PATCHLEVEL__) + +#elif defined(__TINYC__) +# define COMPILER_ID "TinyCC" + +#elif defined(__BCC__) +# define COMPILER_ID "Bruce" + +#elif defined(__SCO_VERSION__) +# define COMPILER_ID "SCO" + +#elif defined(__ARMCC_VERSION) && !defined(__clang__) +# define COMPILER_ID "ARMCC" +#if __ARMCC_VERSION >= 1000000 + /* __ARMCC_VERSION = VRRPPPP */ + # define COMPILER_VERSION_MAJOR DEC(__ARMCC_VERSION/1000000) + # define COMPILER_VERSION_MINOR DEC(__ARMCC_VERSION/10000 % 100) + # define COMPILER_VERSION_PATCH DEC(__ARMCC_VERSION % 10000) +#else + /* __ARMCC_VERSION = VRPPPP */ + # define COMPILER_VERSION_MAJOR DEC(__ARMCC_VERSION/100000) + # define COMPILER_VERSION_MINOR DEC(__ARMCC_VERSION/10000 % 10) + # define COMPILER_VERSION_PATCH DEC(__ARMCC_VERSION % 10000) +#endif + + +#elif defined(__clang__) && defined(__apple_build_version__) +# define COMPILER_ID "AppleClang" +# if defined(_MSC_VER) +# define SIMULATE_ID "MSVC" +# endif +# define COMPILER_VERSION_MAJOR DEC(__clang_major__) +# define COMPILER_VERSION_MINOR DEC(__clang_minor__) +# define COMPILER_VERSION_PATCH DEC(__clang_patchlevel__) +# if defined(_MSC_VER) + /* _MSC_VER = VVRR */ +# define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100) +# define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100) +# endif +# define COMPILER_VERSION_TWEAK DEC(__apple_build_version__) + +#elif defined(__clang__) && defined(__ARMCOMPILER_VERSION) +# define COMPILER_ID "ARMClang" + # define COMPILER_VERSION_MAJOR DEC(__ARMCOMPILER_VERSION/1000000) + # define COMPILER_VERSION_MINOR DEC(__ARMCOMPILER_VERSION/10000 % 100) + # define COMPILER_VERSION_PATCH DEC(__ARMCOMPILER_VERSION/100 % 100) +# define COMPILER_VERSION_INTERNAL DEC(__ARMCOMPILER_VERSION) + +#elif defined(__clang__) +# define COMPILER_ID "Clang" +# if defined(_MSC_VER) +# define SIMULATE_ID "MSVC" +# endif +# define COMPILER_VERSION_MAJOR DEC(__clang_major__) +# define COMPILER_VERSION_MINOR DEC(__clang_minor__) +# define COMPILER_VERSION_PATCH DEC(__clang_patchlevel__) +# if defined(_MSC_VER) + /* _MSC_VER = VVRR */ +# define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100) +# define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100) +# endif + +#elif defined(__LCC__) && (defined(__GNUC__) || defined(__GNUG__) || defined(__MCST__)) +# define COMPILER_ID "LCC" +# define COMPILER_VERSION_MAJOR DEC(__LCC__ / 100) +# define COMPILER_VERSION_MINOR DEC(__LCC__ % 100) +# if defined(__LCC_MINOR__) +# define COMPILER_VERSION_PATCH DEC(__LCC_MINOR__) +# endif +# if defined(__GNUC__) && defined(__GNUC_MINOR__) +# define SIMULATE_ID "GNU" +# define SIMULATE_VERSION_MAJOR DEC(__GNUC__) +# define SIMULATE_VERSION_MINOR DEC(__GNUC_MINOR__) +# if defined(__GNUC_PATCHLEVEL__) +# define SIMULATE_VERSION_PATCH DEC(__GNUC_PATCHLEVEL__) +# endif +# endif + +#elif defined(__GNUC__) +# define COMPILER_ID "GNU" +# define COMPILER_VERSION_MAJOR DEC(__GNUC__) +# if defined(__GNUC_MINOR__) +# define COMPILER_VERSION_MINOR DEC(__GNUC_MINOR__) +# endif +# if defined(__GNUC_PATCHLEVEL__) +# define COMPILER_VERSION_PATCH DEC(__GNUC_PATCHLEVEL__) +# endif + +#elif defined(_MSC_VER) +# define COMPILER_ID "MSVC" + /* _MSC_VER = VVRR */ +# define COMPILER_VERSION_MAJOR DEC(_MSC_VER / 100) +# define COMPILER_VERSION_MINOR DEC(_MSC_VER % 100) +# if defined(_MSC_FULL_VER) +# if _MSC_VER >= 1400 + /* _MSC_FULL_VER = VVRRPPPPP */ +# define COMPILER_VERSION_PATCH DEC(_MSC_FULL_VER % 100000) +# else + /* _MSC_FULL_VER = VVRRPPPP */ +# define COMPILER_VERSION_PATCH DEC(_MSC_FULL_VER % 10000) +# endif +# endif +# if defined(_MSC_BUILD) +# define COMPILER_VERSION_TWEAK DEC(_MSC_BUILD) +# endif + +#elif defined(_ADI_COMPILER) +# define COMPILER_ID "ADSP" +#if defined(__VERSIONNUM__) + /* __VERSIONNUM__ = 0xVVRRPPTT */ +# define COMPILER_VERSION_MAJOR DEC(__VERSIONNUM__ >> 24 & 0xFF) +# define COMPILER_VERSION_MINOR DEC(__VERSIONNUM__ >> 16 & 0xFF) +# define COMPILER_VERSION_PATCH DEC(__VERSIONNUM__ >> 8 & 0xFF) +# define COMPILER_VERSION_TWEAK DEC(__VERSIONNUM__ & 0xFF) +#endif + +#elif defined(__IAR_SYSTEMS_ICC__) || defined(__IAR_SYSTEMS_ICC) +# define COMPILER_ID "IAR" +# if defined(__VER__) && defined(__ICCARM__) +# define COMPILER_VERSION_MAJOR DEC((__VER__) / 1000000) +# define COMPILER_VERSION_MINOR DEC(((__VER__) / 1000) % 1000) +# define COMPILER_VERSION_PATCH DEC((__VER__) % 1000) +# define COMPILER_VERSION_INTERNAL DEC(__IAR_SYSTEMS_ICC__) +# elif defined(__VER__) && (defined(__ICCAVR__) || defined(__ICCRX__) || defined(__ICCRH850__) || defined(__ICCRL78__) || defined(__ICC430__) || defined(__ICCRISCV__) || defined(__ICCV850__) || defined(__ICC8051__) || defined(__ICCSTM8__)) +# define COMPILER_VERSION_MAJOR DEC((__VER__) / 100) +# define COMPILER_VERSION_MINOR DEC((__VER__) - (((__VER__) / 100)*100)) +# define COMPILER_VERSION_PATCH DEC(__SUBVERSION__) +# define COMPILER_VERSION_INTERNAL DEC(__IAR_SYSTEMS_ICC__) +# endif + +#elif defined(__SDCC_VERSION_MAJOR) || defined(SDCC) +# define COMPILER_ID "SDCC" +# if defined(__SDCC_VERSION_MAJOR) +# define COMPILER_VERSION_MAJOR DEC(__SDCC_VERSION_MAJOR) +# define COMPILER_VERSION_MINOR DEC(__SDCC_VERSION_MINOR) +# define COMPILER_VERSION_PATCH DEC(__SDCC_VERSION_PATCH) +# else + /* SDCC = VRP */ +# define COMPILER_VERSION_MAJOR DEC(SDCC/100) +# define COMPILER_VERSION_MINOR DEC(SDCC/10 % 10) +# define COMPILER_VERSION_PATCH DEC(SDCC % 10) +# endif + + +/* These compilers are either not known or too old to define an + identification macro. Try to identify the platform and guess that + it is the native compiler. */ +#elif defined(__hpux) || defined(__hpua) +# define COMPILER_ID "HP" + +#else /* unknown compiler */ +# define COMPILER_ID "" +#endif + +/* Construct the string literal in pieces to prevent the source from + getting matched. Store it in a pointer rather than an array + because some compilers will just produce instructions to fill the + array rather than assigning a pointer to a static array. */ +char const* info_compiler = "INFO" ":" "compiler[" COMPILER_ID "]"; +#ifdef SIMULATE_ID +char const* info_simulate = "INFO" ":" "simulate[" SIMULATE_ID "]"; +#endif + +#ifdef __QNXNTO__ +char const* qnxnto = "INFO" ":" "qnxnto[]"; +#endif + +#if defined(__CRAYXT_COMPUTE_LINUX_TARGET) +char const *info_cray = "INFO" ":" "compiler_wrapper[CrayPrgEnv]"; +#endif + +#define STRINGIFY_HELPER(X) #X +#define STRINGIFY(X) STRINGIFY_HELPER(X) + +/* Identify known platforms by name. */ +#if defined(__linux) || defined(__linux__) || defined(linux) +# define PLATFORM_ID "Linux" + +#elif defined(__MSYS__) +# define PLATFORM_ID "MSYS" + +#elif defined(__CYGWIN__) +# define PLATFORM_ID "Cygwin" + +#elif defined(__MINGW32__) +# define PLATFORM_ID "MinGW" + +#elif defined(__APPLE__) +# define PLATFORM_ID "Darwin" + +#elif defined(_WIN32) || defined(__WIN32__) || defined(WIN32) +# define PLATFORM_ID "Windows" + +#elif defined(__FreeBSD__) || defined(__FreeBSD) +# define PLATFORM_ID "FreeBSD" + +#elif defined(__NetBSD__) || defined(__NetBSD) +# define PLATFORM_ID "NetBSD" + +#elif defined(__OpenBSD__) || defined(__OPENBSD) +# define PLATFORM_ID "OpenBSD" + +#elif defined(__sun) || defined(sun) +# define PLATFORM_ID "SunOS" + +#elif defined(_AIX) || defined(__AIX) || defined(__AIX__) || defined(__aix) || defined(__aix__) +# define PLATFORM_ID "AIX" + +#elif defined(__hpux) || defined(__hpux__) +# define PLATFORM_ID "HP-UX" + +#elif defined(__HAIKU__) +# define PLATFORM_ID "Haiku" + +#elif defined(__BeOS) || defined(__BEOS__) || defined(_BEOS) +# define PLATFORM_ID "BeOS" + +#elif defined(__QNX__) || defined(__QNXNTO__) +# define PLATFORM_ID "QNX" + +#elif defined(__tru64) || defined(_tru64) || defined(__TRU64__) +# define PLATFORM_ID "Tru64" + +#elif defined(__riscos) || defined(__riscos__) +# define PLATFORM_ID "RISCos" + +#elif defined(__sinix) || defined(__sinix__) || defined(__SINIX__) +# define PLATFORM_ID "SINIX" + +#elif defined(__UNIX_SV__) +# define PLATFORM_ID "UNIX_SV" + +#elif defined(__bsdos__) +# define PLATFORM_ID "BSDOS" + +#elif defined(_MPRAS) || defined(MPRAS) +# define PLATFORM_ID "MP-RAS" + +#elif defined(__osf) || defined(__osf__) +# define PLATFORM_ID "OSF1" + +#elif defined(_SCO_SV) || defined(SCO_SV) || defined(sco_sv) +# define PLATFORM_ID "SCO_SV" + +#elif defined(__ultrix) || defined(__ultrix__) || defined(_ULTRIX) +# define PLATFORM_ID "ULTRIX" + +#elif defined(__XENIX__) || defined(_XENIX) || defined(XENIX) +# define PLATFORM_ID "Xenix" + +#elif defined(__WATCOMC__) +# if defined(__LINUX__) +# define PLATFORM_ID "Linux" + +# elif defined(__DOS__) +# define PLATFORM_ID "DOS" + +# elif defined(__OS2__) +# define PLATFORM_ID "OS2" + +# elif defined(__WINDOWS__) +# define PLATFORM_ID "Windows3x" + +# elif defined(__VXWORKS__) +# define PLATFORM_ID "VxWorks" + +# else /* unknown platform */ +# define PLATFORM_ID +# endif + +#elif defined(__INTEGRITY) +# if defined(INT_178B) +# define PLATFORM_ID "Integrity178" + +# else /* regular Integrity */ +# define PLATFORM_ID "Integrity" +# endif + +# elif defined(_ADI_COMPILER) +# define PLATFORM_ID "ADSP" + +#else /* unknown platform */ +# define PLATFORM_ID + +#endif + +/* For windows compilers MSVC and Intel we can determine + the architecture of the compiler being used. This is because + the compilers do not have flags that can change the architecture, + but rather depend on which compiler is being used +*/ +#if defined(_WIN32) && defined(_MSC_VER) +# if defined(_M_IA64) +# define ARCHITECTURE_ID "IA64" + +# elif defined(_M_ARM64EC) +# define ARCHITECTURE_ID "ARM64EC" + +# elif defined(_M_X64) || defined(_M_AMD64) +# define ARCHITECTURE_ID "x64" + +# elif defined(_M_IX86) +# define ARCHITECTURE_ID "X86" + +# elif defined(_M_ARM64) +# define ARCHITECTURE_ID "ARM64" + +# elif defined(_M_ARM) +# if _M_ARM == 4 +# define ARCHITECTURE_ID "ARMV4I" +# elif _M_ARM == 5 +# define ARCHITECTURE_ID "ARMV5I" +# else +# define ARCHITECTURE_ID "ARMV" STRINGIFY(_M_ARM) +# endif + +# elif defined(_M_MIPS) +# define ARCHITECTURE_ID "MIPS" + +# elif defined(_M_SH) +# define ARCHITECTURE_ID "SHx" + +# else /* unknown architecture */ +# define ARCHITECTURE_ID "" +# endif + +#elif defined(__WATCOMC__) +# if defined(_M_I86) +# define ARCHITECTURE_ID "I86" + +# elif defined(_M_IX86) +# define ARCHITECTURE_ID "X86" + +# else /* unknown architecture */ +# define ARCHITECTURE_ID "" +# endif + +#elif defined(__IAR_SYSTEMS_ICC__) || defined(__IAR_SYSTEMS_ICC) +# if defined(__ICCARM__) +# define ARCHITECTURE_ID "ARM" + +# elif defined(__ICCRX__) +# define ARCHITECTURE_ID "RX" + +# elif defined(__ICCRH850__) +# define ARCHITECTURE_ID "RH850" + +# elif defined(__ICCRL78__) +# define ARCHITECTURE_ID "RL78" + +# elif defined(__ICCRISCV__) +# define ARCHITECTURE_ID "RISCV" + +# elif defined(__ICCAVR__) +# define ARCHITECTURE_ID "AVR" + +# elif defined(__ICC430__) +# define ARCHITECTURE_ID "MSP430" + +# elif defined(__ICCV850__) +# define ARCHITECTURE_ID "V850" + +# elif defined(__ICC8051__) +# define ARCHITECTURE_ID "8051" + +# elif defined(__ICCSTM8__) +# define ARCHITECTURE_ID "STM8" + +# else /* unknown architecture */ +# define ARCHITECTURE_ID "" +# endif + +#elif defined(__ghs__) +# if defined(__PPC64__) +# define ARCHITECTURE_ID "PPC64" + +# elif defined(__ppc__) +# define ARCHITECTURE_ID "PPC" + +# elif defined(__ARM__) +# define ARCHITECTURE_ID "ARM" + +# elif defined(__x86_64__) +# define ARCHITECTURE_ID "x64" + +# elif defined(__i386__) +# define ARCHITECTURE_ID "X86" + +# else /* unknown architecture */ +# define ARCHITECTURE_ID "" +# endif + +#elif defined(__TI_COMPILER_VERSION__) +# if defined(__TI_ARM__) +# define ARCHITECTURE_ID "ARM" + +# elif defined(__MSP430__) +# define ARCHITECTURE_ID "MSP430" + +# elif defined(__TMS320C28XX__) +# define ARCHITECTURE_ID "TMS320C28x" + +# elif defined(__TMS320C6X__) || defined(_TMS320C6X) +# define ARCHITECTURE_ID "TMS320C6x" + +# else /* unknown architecture */ +# define ARCHITECTURE_ID "" +# endif + +# elif defined(__ADSPSHARC__) +# define ARCHITECTURE_ID "SHARC" + +# elif defined(__ADSPBLACKFIN__) +# define ARCHITECTURE_ID "Blackfin" + +#elif defined(__TASKING__) + +# if defined(__CTC__) || defined(__CPTC__) +# define ARCHITECTURE_ID "TriCore" + +# elif defined(__CMCS__) +# define ARCHITECTURE_ID "MCS" + +# elif defined(__CARM__) +# define ARCHITECTURE_ID "ARM" + +# elif defined(__CARC__) +# define ARCHITECTURE_ID "ARC" + +# elif defined(__C51__) +# define ARCHITECTURE_ID "8051" + +# elif defined(__CPCP__) +# define ARCHITECTURE_ID "PCP" + +# else +# define ARCHITECTURE_ID "" +# endif + +#else +# define ARCHITECTURE_ID +#endif + +/* Convert integer to decimal digit literals. */ +#define DEC(n) \ + ('0' + (((n) / 10000000)%10)), \ + ('0' + (((n) / 1000000)%10)), \ + ('0' + (((n) / 100000)%10)), \ + ('0' + (((n) / 10000)%10)), \ + ('0' + (((n) / 1000)%10)), \ + ('0' + (((n) / 100)%10)), \ + ('0' + (((n) / 10)%10)), \ + ('0' + ((n) % 10)) + +/* Convert integer to hex digit literals. */ +#define HEX(n) \ + ('0' + ((n)>>28 & 0xF)), \ + ('0' + ((n)>>24 & 0xF)), \ + ('0' + ((n)>>20 & 0xF)), \ + ('0' + ((n)>>16 & 0xF)), \ + ('0' + ((n)>>12 & 0xF)), \ + ('0' + ((n)>>8 & 0xF)), \ + ('0' + ((n)>>4 & 0xF)), \ + ('0' + ((n) & 0xF)) + +/* Construct a string literal encoding the version number. */ +#ifdef COMPILER_VERSION +char const* info_version = "INFO" ":" "compiler_version[" COMPILER_VERSION "]"; + +/* Construct a string literal encoding the version number components. */ +#elif defined(COMPILER_VERSION_MAJOR) +char const info_version[] = { + 'I', 'N', 'F', 'O', ':', + 'c','o','m','p','i','l','e','r','_','v','e','r','s','i','o','n','[', + COMPILER_VERSION_MAJOR, +# ifdef COMPILER_VERSION_MINOR + '.', COMPILER_VERSION_MINOR, +# ifdef COMPILER_VERSION_PATCH + '.', COMPILER_VERSION_PATCH, +# ifdef COMPILER_VERSION_TWEAK + '.', COMPILER_VERSION_TWEAK, +# endif +# endif +# endif + ']','\0'}; +#endif + +/* Construct a string literal encoding the internal version number. */ +#ifdef COMPILER_VERSION_INTERNAL +char const info_version_internal[] = { + 'I', 'N', 'F', 'O', ':', + 'c','o','m','p','i','l','e','r','_','v','e','r','s','i','o','n','_', + 'i','n','t','e','r','n','a','l','[', + COMPILER_VERSION_INTERNAL,']','\0'}; +#elif defined(COMPILER_VERSION_INTERNAL_STR) +char const* info_version_internal = "INFO" ":" "compiler_version_internal[" COMPILER_VERSION_INTERNAL_STR "]"; +#endif + +/* Construct a string literal encoding the version number components. */ +#ifdef SIMULATE_VERSION_MAJOR +char const info_simulate_version[] = { + 'I', 'N', 'F', 'O', ':', + 's','i','m','u','l','a','t','e','_','v','e','r','s','i','o','n','[', + SIMULATE_VERSION_MAJOR, +# ifdef SIMULATE_VERSION_MINOR + '.', SIMULATE_VERSION_MINOR, +# ifdef SIMULATE_VERSION_PATCH + '.', SIMULATE_VERSION_PATCH, +# ifdef SIMULATE_VERSION_TWEAK + '.', SIMULATE_VERSION_TWEAK, +# endif +# endif +# endif + ']','\0'}; +#endif + +/* Construct the string literal in pieces to prevent the source from + getting matched. Store it in a pointer rather than an array + because some compilers will just produce instructions to fill the + array rather than assigning a pointer to a static array. */ +char const* info_platform = "INFO" ":" "platform[" PLATFORM_ID "]"; +char const* info_arch = "INFO" ":" "arch[" ARCHITECTURE_ID "]"; + + + +#if !defined(__STDC__) && !defined(__clang__) +# if defined(_MSC_VER) || defined(__ibmxl__) || defined(__IBMC__) +# define C_VERSION "90" +# else +# define C_VERSION +# endif +#elif __STDC_VERSION__ > 201710L +# define C_VERSION "23" +#elif __STDC_VERSION__ >= 201710L +# define C_VERSION "17" +#elif __STDC_VERSION__ >= 201000L +# define C_VERSION "11" +#elif __STDC_VERSION__ >= 199901L +# define C_VERSION "99" +#else +# define C_VERSION "90" +#endif +const char* info_language_standard_default = + "INFO" ":" "standard_default[" C_VERSION "]"; + +const char* info_language_extensions_default = "INFO" ":" "extensions_default[" +#if (defined(__clang__) || defined(__GNUC__) || defined(__xlC__) || \ + defined(__TI_COMPILER_VERSION__)) && \ + !defined(__STRICT_ANSI__) + "ON" +#else + "OFF" +#endif +"]"; + +/*--------------------------------------------------------------------------*/ + +#ifdef ID_VOID_MAIN +void main() {} +#else +# if defined(__CLASSIC_C__) +int main(argc, argv) int argc; char *argv[]; +# else +int main(int argc, char* argv[]) +# endif +{ + int require = 0; + require += info_compiler[argc]; + require += info_platform[argc]; + require += info_arch[argc]; +#ifdef COMPILER_VERSION_MAJOR + require += info_version[argc]; +#endif +#ifdef COMPILER_VERSION_INTERNAL + require += info_version_internal[argc]; +#endif +#ifdef SIMULATE_ID + require += info_simulate[argc]; +#endif +#ifdef SIMULATE_VERSION_MAJOR + require += info_simulate_version[argc]; +#endif +#if defined(__CRAYXT_COMPUTE_LINUX_TARGET) + require += info_cray[argc]; +#endif + require += info_language_standard_default[argc]; + require += info_language_extensions_default[argc]; + (void)argv; + return require; +} +#endif diff --git a/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/3.28.3/CompilerIdC/a.out.js b/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/3.28.3/CompilerIdC/a.out.js new file mode 100644 index 0000000..9281774 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/3.28.3/CompilerIdC/a.out.js @@ -0,0 +1,1521 @@ +// include: shell.js +// The Module object: Our interface to the outside world. We import +// and export values on it. There are various ways Module can be used: +// 1. Not defined. We create it here +// 2. A function parameter, function(moduleArg) => Promise +// 3. pre-run appended it, var Module = {}; ..generated code.. +// 4. External script tag defines var Module. +// We need to check if Module already exists (e.g. case 3 above). +// Substitution will be replaced with actual code on later stage of the build, +// this way Closure Compiler will not mangle it (e.g. case 4. above). +// Note that if you want to run closure, and also to use Module +// after the generated code, you will need to define var Module = {}; +// before the code. Then that object will be used in the code, and you +// can continue to use Module afterwards as well. +var Module = typeof Module != 'undefined' ? Module : {}; + +// Determine the runtime environment we are in. You can customize this by +// setting the ENVIRONMENT setting at compile time (see settings.js). + +// Attempt to auto-detect the environment +var ENVIRONMENT_IS_WEB = typeof window == 'object'; +var ENVIRONMENT_IS_WORKER = typeof WorkerGlobalScope != 'undefined'; +// N.b. Electron.js environment is simultaneously a NODE-environment, but +// also a web environment. +var ENVIRONMENT_IS_NODE = typeof process == 'object' && typeof process.versions == 'object' && typeof process.versions.node == 'string' && process.type != 'renderer'; +var ENVIRONMENT_IS_SHELL = !ENVIRONMENT_IS_WEB && !ENVIRONMENT_IS_NODE && !ENVIRONMENT_IS_WORKER; + +if (ENVIRONMENT_IS_NODE) { + +} + +// --pre-jses are emitted after the Module integration code, so that they can +// refer to Module (if they choose; they can also define Module) + + +// Sometimes an existing Module object exists with properties +// meant to overwrite the default module functionality. Here +// we collect those properties and reapply _after_ we configure +// the current environment's defaults to avoid having to be so +// defensive during initialization. +var moduleOverrides = {...Module}; + +var arguments_ = []; +var thisProgram = './this.program'; +var quit_ = (status, toThrow) => { + throw toThrow; +}; + +// `/` should be present at the end if `scriptDirectory` is not empty +var scriptDirectory = ''; +function locateFile(path) { + if (Module['locateFile']) { + return Module['locateFile'](path, scriptDirectory); + } + return scriptDirectory + path; +} + +// Hooks that are implemented differently in different runtime environments. +var readAsync, readBinary; + +if (ENVIRONMENT_IS_NODE) { + if (typeof process == 'undefined' || !process.release || process.release.name !== 'node') throw new Error('not compiled for this environment (did you build to HTML and try to run it not on the web, or set ENVIRONMENT to something - like node - and run it someplace else - like on the web?)'); + + var nodeVersion = process.versions.node; + var numericVersion = nodeVersion.split('.').slice(0, 3); + numericVersion = (numericVersion[0] * 10000) + (numericVersion[1] * 100) + (numericVersion[2].split('-')[0] * 1); + var minVersion = 160000; + if (numericVersion < 160000) { + throw new Error('This emscripten-generated code requires node v16.0.0 (detected v' + nodeVersion + ')'); + } + + // These modules will usually be used on Node.js. Load them eagerly to avoid + // the complexity of lazy-loading. + var fs = require('fs'); + var nodePath = require('path'); + + scriptDirectory = __dirname + '/'; + +// include: node_shell_read.js +readBinary = (filename) => { + // We need to re-wrap `file://` strings to URLs. + filename = isFileURI(filename) ? new URL(filename) : filename; + var ret = fs.readFileSync(filename); + assert(Buffer.isBuffer(ret)); + return ret; +}; + +readAsync = async (filename, binary = true) => { + // See the comment in the `readBinary` function. + filename = isFileURI(filename) ? new URL(filename) : filename; + var ret = fs.readFileSync(filename, binary ? undefined : 'utf8'); + assert(binary ? Buffer.isBuffer(ret) : typeof ret == 'string'); + return ret; +}; +// end include: node_shell_read.js + if (!Module['thisProgram'] && process.argv.length > 1) { + thisProgram = process.argv[1].replace(/\\/g, '/'); + } + + arguments_ = process.argv.slice(2); + + if (typeof module != 'undefined') { + module['exports'] = Module; + } + + quit_ = (status, toThrow) => { + process.exitCode = status; + throw toThrow; + }; + +} else +if (ENVIRONMENT_IS_SHELL) { + + if ((typeof process == 'object' && typeof require === 'function') || typeof window == 'object' || typeof WorkerGlobalScope != 'undefined') throw new Error('not compiled for this environment (did you build to HTML and try to run it not on the web, or set ENVIRONMENT to something - like node - and run it someplace else - like on the web?)'); + +} else + +// Note that this includes Node.js workers when relevant (pthreads is enabled). +// Node.js workers are detected as a combination of ENVIRONMENT_IS_WORKER and +// ENVIRONMENT_IS_NODE. +if (ENVIRONMENT_IS_WEB || ENVIRONMENT_IS_WORKER) { + if (ENVIRONMENT_IS_WORKER) { // Check worker, not web, since window could be polyfilled + scriptDirectory = self.location.href; + } else if (typeof document != 'undefined' && document.currentScript) { // web + scriptDirectory = document.currentScript.src; + } + // blob urls look like blob:http://site.com/etc/etc and we cannot infer anything from them. + // otherwise, slice off the final part of the url to find the script directory. + // if scriptDirectory does not contain a slash, lastIndexOf will return -1, + // and scriptDirectory will correctly be replaced with an empty string. + // If scriptDirectory contains a query (starting with ?) or a fragment (starting with #), + // they are removed because they could contain a slash. + if (scriptDirectory.startsWith('blob:')) { + scriptDirectory = ''; + } else { + scriptDirectory = scriptDirectory.slice(0, scriptDirectory.replace(/[?#].*/, '').lastIndexOf('/')+1); + } + + if (!(typeof window == 'object' || typeof WorkerGlobalScope != 'undefined')) throw new Error('not compiled for this environment (did you build to HTML and try to run it not on the web, or set ENVIRONMENT to something - like node - and run it someplace else - like on the web?)'); + + { +// include: web_or_worker_shell_read.js +if (ENVIRONMENT_IS_WORKER) { + readBinary = (url) => { + var xhr = new XMLHttpRequest(); + xhr.open('GET', url, false); + xhr.responseType = 'arraybuffer'; + xhr.send(null); + return new Uint8Array(/** @type{!ArrayBuffer} */(xhr.response)); + }; + } + + readAsync = async (url) => { + // Fetch has some additional restrictions over XHR, like it can't be used on a file:// url. + // See https://github.com/github/fetch/pull/92#issuecomment-140665932 + // Cordova or Electron apps are typically loaded from a file:// url. + // So use XHR on webview if URL is a file URL. + if (isFileURI(url)) { + return new Promise((resolve, reject) => { + var xhr = new XMLHttpRequest(); + xhr.open('GET', url, true); + xhr.responseType = 'arraybuffer'; + xhr.onload = () => { + if (xhr.status == 200 || (xhr.status == 0 && xhr.response)) { // file URLs can return 0 + resolve(xhr.response); + return; + } + reject(xhr.status); + }; + xhr.onerror = reject; + xhr.send(null); + }); + } + var response = await fetch(url, { credentials: 'same-origin' }); + if (response.ok) { + return response.arrayBuffer(); + } + throw new Error(response.status + ' : ' + response.url); + }; +// end include: web_or_worker_shell_read.js + } +} else +{ + throw new Error('environment detection error'); +} + +var out = Module['print'] || console.log.bind(console); +var err = Module['printErr'] || console.error.bind(console); + +// Merge back in the overrides +Object.assign(Module, moduleOverrides); +// Free the object hierarchy contained in the overrides, this lets the GC +// reclaim data used. +moduleOverrides = null; +checkIncomingModuleAPI(); + +// Emit code to handle expected values on the Module object. This applies Module.x +// to the proper local x. This has two benefits: first, we only emit it if it is +// expected to arrive, and second, by using a local everywhere else that can be +// minified. + +if (Module['arguments']) arguments_ = Module['arguments'];legacyModuleProp('arguments', 'arguments_'); + +if (Module['thisProgram']) thisProgram = Module['thisProgram'];legacyModuleProp('thisProgram', 'thisProgram'); + +// perform assertions in shell.js after we set up out() and err(), as otherwise if an assertion fails it cannot print the message +// Assertions on removed incoming Module JS APIs. +assert(typeof Module['memoryInitializerPrefixURL'] == 'undefined', 'Module.memoryInitializerPrefixURL option was removed, use Module.locateFile instead'); +assert(typeof Module['pthreadMainPrefixURL'] == 'undefined', 'Module.pthreadMainPrefixURL option was removed, use Module.locateFile instead'); +assert(typeof Module['cdInitializerPrefixURL'] == 'undefined', 'Module.cdInitializerPrefixURL option was removed, use Module.locateFile instead'); +assert(typeof Module['filePackagePrefixURL'] == 'undefined', 'Module.filePackagePrefixURL option was removed, use Module.locateFile instead'); +assert(typeof Module['read'] == 'undefined', 'Module.read option was removed'); +assert(typeof Module['readAsync'] == 'undefined', 'Module.readAsync option was removed (modify readAsync in JS)'); +assert(typeof Module['readBinary'] == 'undefined', 'Module.readBinary option was removed (modify readBinary in JS)'); +assert(typeof Module['setWindowTitle'] == 'undefined', 'Module.setWindowTitle option was removed (modify emscripten_set_window_title in JS)'); +assert(typeof Module['TOTAL_MEMORY'] == 'undefined', 'Module.TOTAL_MEMORY has been renamed Module.INITIAL_MEMORY'); +legacyModuleProp('asm', 'wasmExports'); +legacyModuleProp('readAsync', 'readAsync'); +legacyModuleProp('readBinary', 'readBinary'); +legacyModuleProp('setWindowTitle', 'setWindowTitle'); +var IDBFS = 'IDBFS is no longer included by default; build with -lidbfs.js'; +var PROXYFS = 'PROXYFS is no longer included by default; build with -lproxyfs.js'; +var WORKERFS = 'WORKERFS is no longer included by default; build with -lworkerfs.js'; +var FETCHFS = 'FETCHFS is no longer included by default; build with -lfetchfs.js'; +var ICASEFS = 'ICASEFS is no longer included by default; build with -licasefs.js'; +var JSFILEFS = 'JSFILEFS is no longer included by default; build with -ljsfilefs.js'; +var OPFS = 'OPFS is no longer included by default; build with -lopfs.js'; + +var NODEFS = 'NODEFS is no longer included by default; build with -lnodefs.js'; + +assert(!ENVIRONMENT_IS_SHELL, 'shell environment detected but not enabled at build time. Add `shell` to `-sENVIRONMENT` to enable.'); + +// end include: shell.js + +// include: preamble.js +// === Preamble library stuff === + +// Documentation for the public APIs defined in this file must be updated in: +// site/source/docs/api_reference/preamble.js.rst +// A prebuilt local version of the documentation is available at: +// site/build/text/docs/api_reference/preamble.js.txt +// You can also build docs locally as HTML or other formats in site/ +// An online HTML version (which may be of a different version of Emscripten) +// is up at http://kripken.github.io/emscripten-site/docs/api_reference/preamble.js.html + +var wasmBinary = Module['wasmBinary'];legacyModuleProp('wasmBinary', 'wasmBinary'); + +if (typeof WebAssembly != 'object') { + err('no native wasm support detected'); +} + +// Wasm globals + +var wasmMemory; + +//======================================== +// Runtime essentials +//======================================== + +// whether we are quitting the application. no code should run after this. +// set in exit() and abort() +var ABORT = false; + +// set by exit() and abort(). Passed to 'onExit' handler. +// NOTE: This is also used as the process return code code in shell environments +// but only when noExitRuntime is false. +var EXITSTATUS; + +// In STRICT mode, we only define assert() when ASSERTIONS is set. i.e. we +// don't define it at all in release modes. This matches the behaviour of +// MINIMAL_RUNTIME. +// TODO(sbc): Make this the default even without STRICT enabled. +/** @type {function(*, string=)} */ +function assert(condition, text) { + if (!condition) { + abort('Assertion failed' + (text ? ': ' + text : '')); + } +} + +// We used to include malloc/free by default in the past. Show a helpful error in +// builds with assertions. +function _malloc() { + abort('malloc() called but not included in the build - add `_malloc` to EXPORTED_FUNCTIONS'); +} +function _free() { + // Show a helpful error since we used to include free by default in the past. + abort('free() called but not included in the build - add `_free` to EXPORTED_FUNCTIONS'); +} + +// Memory management + +var HEAP, +/** @type {!Int8Array} */ + HEAP8, +/** @type {!Uint8Array} */ + HEAPU8, +/** @type {!Int16Array} */ + HEAP16, +/** @type {!Uint16Array} */ + HEAPU16, +/** @type {!Int32Array} */ + HEAP32, +/** @type {!Uint32Array} */ + HEAPU32, +/** @type {!Float32Array} */ + HEAPF32, +/* BigInt64Array type is not correctly defined in closure +/** not-@type {!BigInt64Array} */ + HEAP64, +/* BigUint64Array type is not correctly defined in closure +/** not-t@type {!BigUint64Array} */ + HEAPU64, +/** @type {!Float64Array} */ + HEAPF64; + +var runtimeInitialized = false; + +/** + * Indicates whether filename is delivered via file protocol (as opposed to http/https) + * @noinline + */ +var isFileURI = (filename) => filename.startsWith('file://'); + +// include: runtime_shared.js +// include: runtime_stack_check.js +// Initializes the stack cookie. Called at the startup of main and at the startup of each thread in pthreads mode. +function writeStackCookie() { + var max = _emscripten_stack_get_end(); + assert((max & 3) == 0); + // If the stack ends at address zero we write our cookies 4 bytes into the + // stack. This prevents interference with SAFE_HEAP and ASAN which also + // monitor writes to address zero. + if (max == 0) { + max += 4; + } + // The stack grow downwards towards _emscripten_stack_get_end. + // We write cookies to the final two words in the stack and detect if they are + // ever overwritten. + HEAPU32[((max)>>2)] = 0x02135467; + HEAPU32[(((max)+(4))>>2)] = 0x89BACDFE; + // Also test the global address 0 for integrity. + HEAPU32[((0)>>2)] = 1668509029; +} + +function checkStackCookie() { + if (ABORT) return; + var max = _emscripten_stack_get_end(); + // See writeStackCookie(). + if (max == 0) { + max += 4; + } + var cookie1 = HEAPU32[((max)>>2)]; + var cookie2 = HEAPU32[(((max)+(4))>>2)]; + if (cookie1 != 0x02135467 || cookie2 != 0x89BACDFE) { + abort(`Stack overflow! Stack cookie has been overwritten at ${ptrToString(max)}, expected hex dwords 0x89BACDFE and 0x2135467, but received ${ptrToString(cookie2)} ${ptrToString(cookie1)}`); + } + // Also test the global address 0 for integrity. + if (HEAPU32[((0)>>2)] != 0x63736d65 /* 'emsc' */) { + abort('Runtime error: The application has corrupted its heap memory area (address zero)!'); + } +} +// end include: runtime_stack_check.js +// include: runtime_exceptions.js +// end include: runtime_exceptions.js +// include: runtime_debug.js +// Endianness check +(() => { + var h16 = new Int16Array(1); + var h8 = new Int8Array(h16.buffer); + h16[0] = 0x6373; + if (h8[0] !== 0x73 || h8[1] !== 0x63) throw 'Runtime error: expected the system to be little-endian! (Run with -sSUPPORT_BIG_ENDIAN to bypass)'; +})(); + +if (Module['ENVIRONMENT']) { + throw new Error('Module.ENVIRONMENT has been deprecated. To force the environment, use the ENVIRONMENT compile-time option (for example, -sENVIRONMENT=web or -sENVIRONMENT=node)'); +} + +function legacyModuleProp(prop, newName, incoming=true) { + if (!Object.getOwnPropertyDescriptor(Module, prop)) { + Object.defineProperty(Module, prop, { + configurable: true, + get() { + let extra = incoming ? ' (the initial value can be provided on Module, but after startup the value is only looked for on a local variable of that name)' : ''; + abort(`\`Module.${prop}\` has been replaced by \`${newName}\`` + extra); + + } + }); + } +} + +function consumedModuleProp(prop) { + if (!Object.getOwnPropertyDescriptor(Module, prop)) { + Object.defineProperty(Module, prop, { + configurable: true, + set() { + abort(`Attempt to set \`Module.${prop}\` after it has already been processed. This can happen, for example, when code is injected via '--post-js' rather than '--pre-js'`); + + } + }); + } +} + +function ignoredModuleProp(prop) { + if (Object.getOwnPropertyDescriptor(Module, prop)) { + abort(`\`Module.${prop}\` was supplied but \`${prop}\` not included in INCOMING_MODULE_JS_API`); + } +} + +// forcing the filesystem exports a few things by default +function isExportedByForceFilesystem(name) { + return name === 'FS_createPath' || + name === 'FS_createDataFile' || + name === 'FS_createPreloadedFile' || + name === 'FS_unlink' || + name === 'addRunDependency' || + // The old FS has some functionality that WasmFS lacks. + name === 'FS_createLazyFile' || + name === 'FS_createDevice' || + name === 'removeRunDependency'; +} + +/** + * Intercept access to a global symbol. This enables us to give informative + * warnings/errors when folks attempt to use symbols they did not include in + * their build, or no symbols that no longer exist. + */ +function hookGlobalSymbolAccess(sym, func) { + if (typeof globalThis != 'undefined' && !Object.getOwnPropertyDescriptor(globalThis, sym)) { + Object.defineProperty(globalThis, sym, { + configurable: true, + get() { + func(); + return undefined; + } + }); + } +} + +function missingGlobal(sym, msg) { + hookGlobalSymbolAccess(sym, () => { + warnOnce(`\`${sym}\` is not longer defined by emscripten. ${msg}`); + }); +} + +missingGlobal('buffer', 'Please use HEAP8.buffer or wasmMemory.buffer'); +missingGlobal('asm', 'Please use wasmExports instead'); + +function missingLibrarySymbol(sym) { + hookGlobalSymbolAccess(sym, () => { + // Can't `abort()` here because it would break code that does runtime + // checks. e.g. `if (typeof SDL === 'undefined')`. + var msg = `\`${sym}\` is a library symbol and not included by default; add it to your library.js __deps or to DEFAULT_LIBRARY_FUNCS_TO_INCLUDE on the command line`; + // DEFAULT_LIBRARY_FUNCS_TO_INCLUDE requires the name as it appears in + // library.js, which means $name for a JS name with no prefix, or name + // for a JS name like _name. + var librarySymbol = sym; + if (!librarySymbol.startsWith('_')) { + librarySymbol = '$' + sym; + } + msg += ` (e.g. -sDEFAULT_LIBRARY_FUNCS_TO_INCLUDE='${librarySymbol}')`; + if (isExportedByForceFilesystem(sym)) { + msg += '. Alternatively, forcing filesystem support (-sFORCE_FILESYSTEM) can export this for you'; + } + warnOnce(msg); + }); + + // Any symbol that is not included from the JS library is also (by definition) + // not exported on the Module object. + unexportedRuntimeSymbol(sym); +} + +function unexportedRuntimeSymbol(sym) { + if (!Object.getOwnPropertyDescriptor(Module, sym)) { + Object.defineProperty(Module, sym, { + configurable: true, + get() { + var msg = `'${sym}' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the Emscripten FAQ)`; + if (isExportedByForceFilesystem(sym)) { + msg += '. Alternatively, forcing filesystem support (-sFORCE_FILESYSTEM) can export this for you'; + } + abort(msg); + } + }); + } +} + +var runtimeDebug = true; // Switch to false at runtime to disable logging at the right times + +// Used by XXXXX_DEBUG settings to output debug messages. +function dbg(...args) { + if (!runtimeDebug && typeof runtimeDebug != 'undefined') return; + // TODO(sbc): Make this configurable somehow. Its not always convenient for + // logging to show up as warnings. + console.warn(...args); +} +// end include: runtime_debug.js +// include: memoryprofiler.js +// end include: memoryprofiler.js + + +function updateMemoryViews() { + var b = wasmMemory.buffer; + Module['HEAP8'] = HEAP8 = new Int8Array(b); + Module['HEAP16'] = HEAP16 = new Int16Array(b); + Module['HEAPU8'] = HEAPU8 = new Uint8Array(b); + Module['HEAPU16'] = HEAPU16 = new Uint16Array(b); + Module['HEAP32'] = HEAP32 = new Int32Array(b); + Module['HEAPU32'] = HEAPU32 = new Uint32Array(b); + Module['HEAPF32'] = HEAPF32 = new Float32Array(b); + Module['HEAPF64'] = HEAPF64 = new Float64Array(b); + Module['HEAP64'] = HEAP64 = new BigInt64Array(b); + Module['HEAPU64'] = HEAPU64 = new BigUint64Array(b); +} + +// end include: runtime_shared.js +assert(!Module['STACK_SIZE'], 'STACK_SIZE can no longer be set at runtime. Use -sSTACK_SIZE at link time') + +assert(typeof Int32Array != 'undefined' && typeof Float64Array !== 'undefined' && Int32Array.prototype.subarray != undefined && Int32Array.prototype.set != undefined, + 'JS engine does not provide full typed array support'); + +// If memory is defined in wasm, the user can't provide it, or set INITIAL_MEMORY +assert(!Module['wasmMemory'], 'Use of `wasmMemory` detected. Use -sIMPORTED_MEMORY to define wasmMemory externally'); +assert(!Module['INITIAL_MEMORY'], 'Detected runtime INITIAL_MEMORY setting. Use -sIMPORTED_MEMORY to define wasmMemory dynamically'); + +function preRun() { + if (Module['preRun']) { + if (typeof Module['preRun'] == 'function') Module['preRun'] = [Module['preRun']]; + while (Module['preRun'].length) { + addOnPreRun(Module['preRun'].shift()); + } + } + consumedModuleProp('preRun'); + callRuntimeCallbacks(onPreRuns); +} + +function initRuntime() { + assert(!runtimeInitialized); + runtimeInitialized = true; + + checkStackCookie(); + + + + wasmExports['__wasm_call_ctors'](); + + +} + +function preMain() { + checkStackCookie(); + +} + +function postRun() { + checkStackCookie(); + + if (Module['postRun']) { + if (typeof Module['postRun'] == 'function') Module['postRun'] = [Module['postRun']]; + while (Module['postRun'].length) { + addOnPostRun(Module['postRun'].shift()); + } + } + consumedModuleProp('postRun'); + + callRuntimeCallbacks(onPostRuns); +} + +// A counter of dependencies for calling run(). If we need to +// do asynchronous work before running, increment this and +// decrement it. Incrementing must happen in a place like +// Module.preRun (used by emcc to add file preloading). +// Note that you can add dependencies in preRun, even though +// it happens right before run - run will be postponed until +// the dependencies are met. +var runDependencies = 0; +var dependenciesFulfilled = null; // overridden to take different actions when all run dependencies are fulfilled +var runDependencyTracking = {}; +var runDependencyWatcher = null; + +function getUniqueRunDependency(id) { + var orig = id; + while (1) { + if (!runDependencyTracking[id]) return id; + id = orig + Math.random(); + } +} + +function addRunDependency(id) { + runDependencies++; + + Module['monitorRunDependencies']?.(runDependencies); + + if (id) { + assert(!runDependencyTracking[id]); + runDependencyTracking[id] = 1; + if (runDependencyWatcher === null && typeof setInterval != 'undefined') { + // Check for missing dependencies every few seconds + runDependencyWatcher = setInterval(() => { + if (ABORT) { + clearInterval(runDependencyWatcher); + runDependencyWatcher = null; + return; + } + var shown = false; + for (var dep in runDependencyTracking) { + if (!shown) { + shown = true; + err('still waiting on run dependencies:'); + } + err(`dependency: ${dep}`); + } + if (shown) { + err('(end of list)'); + } + }, 10000); + } + } else { + err('warning: run dependency added without ID'); + } +} + +function removeRunDependency(id) { + runDependencies--; + + Module['monitorRunDependencies']?.(runDependencies); + + if (id) { + assert(runDependencyTracking[id]); + delete runDependencyTracking[id]; + } else { + err('warning: run dependency removed without ID'); + } + if (runDependencies == 0) { + if (runDependencyWatcher !== null) { + clearInterval(runDependencyWatcher); + runDependencyWatcher = null; + } + if (dependenciesFulfilled) { + var callback = dependenciesFulfilled; + dependenciesFulfilled = null; + callback(); // can add another dependenciesFulfilled + } + } +} + +/** @param {string|number=} what */ +function abort(what) { + Module['onAbort']?.(what); + + what = 'Aborted(' + what + ')'; + // TODO(sbc): Should we remove printing and leave it up to whoever + // catches the exception? + err(what); + + ABORT = true; + + // Use a wasm runtime error, because a JS error might be seen as a foreign + // exception, which means we'd run destructors on it. We need the error to + // simply make the program stop. + // FIXME This approach does not work in Wasm EH because it currently does not assume + // all RuntimeErrors are from traps; it decides whether a RuntimeError is from + // a trap or not based on a hidden field within the object. So at the moment + // we don't have a way of throwing a wasm trap from JS. TODO Make a JS API that + // allows this in the wasm spec. + + // Suppress closure compiler warning here. Closure compiler's builtin extern + // definition for WebAssembly.RuntimeError claims it takes no arguments even + // though it can. + // TODO(https://github.com/google/closure-compiler/pull/3913): Remove if/when upstream closure gets fixed. + /** @suppress {checkTypes} */ + var e = new WebAssembly.RuntimeError(what); + + // Throw the error whether or not MODULARIZE is set because abort is used + // in code paths apart from instantiation where an exception is expected + // to be thrown when abort is called. + throw e; +} + +// show errors on likely calls to FS when it was not included +var FS = { + error() { + abort('Filesystem support (FS) was not included. The problem is that you are using files from JS, but files were not used from C/C++, so filesystem support was not auto-included. You can force-include filesystem support with -sFORCE_FILESYSTEM'); + }, + init() { FS.error() }, + createDataFile() { FS.error() }, + createPreloadedFile() { FS.error() }, + createLazyFile() { FS.error() }, + open() { FS.error() }, + mkdev() { FS.error() }, + registerDevice() { FS.error() }, + analyzePath() { FS.error() }, + + ErrnoError() { FS.error() }, +}; +Module['FS_createDataFile'] = FS.createDataFile; +Module['FS_createPreloadedFile'] = FS.createPreloadedFile; + +function createExportWrapper(name, nargs) { + return (...args) => { + assert(runtimeInitialized, `native function \`${name}\` called before runtime initialization`); + var f = wasmExports[name]; + assert(f, `exported native function \`${name}\` not found`); + // Only assert for too many arguments. Too few can be valid since the missing arguments will be zero filled. + assert(args.length <= nargs, `native function \`${name}\` called with ${args.length} args but expects ${nargs}`); + return f(...args); + }; +} + +var wasmBinaryFile; + +function findWasmBinary() { + return locateFile('a.out.wasm'); +} + +function getBinarySync(file) { + if (file == wasmBinaryFile && wasmBinary) { + return new Uint8Array(wasmBinary); + } + if (readBinary) { + return readBinary(file); + } + throw 'both async and sync fetching of the wasm failed'; +} + +async function getWasmBinary(binaryFile) { + // If we don't have the binary yet, load it asynchronously using readAsync. + if (!wasmBinary) { + // Fetch the binary using readAsync + try { + var response = await readAsync(binaryFile); + return new Uint8Array(response); + } catch { + // Fall back to getBinarySync below; + } + } + + // Otherwise, getBinarySync should be able to get it synchronously + return getBinarySync(binaryFile); +} + +async function instantiateArrayBuffer(binaryFile, imports) { + try { + var binary = await getWasmBinary(binaryFile); + var instance = await WebAssembly.instantiate(binary, imports); + return instance; + } catch (reason) { + err(`failed to asynchronously prepare wasm: ${reason}`); + + // Warn on some common problems. + if (isFileURI(wasmBinaryFile)) { + err(`warning: Loading from a file URI (${wasmBinaryFile}) is not supported in most browsers. See https://emscripten.org/docs/getting_started/FAQ.html#how-do-i-run-a-local-webserver-for-testing-why-does-my-program-stall-in-downloading-or-preparing`); + } + abort(reason); + } +} + +async function instantiateAsync(binary, binaryFile, imports) { + if (!binary && typeof WebAssembly.instantiateStreaming == 'function' + // Don't use streaming for file:// delivered objects in a webview, fetch them synchronously. + && !isFileURI(binaryFile) + // Avoid instantiateStreaming() on Node.js environment for now, as while + // Node.js v18.1.0 implements it, it does not have a full fetch() + // implementation yet. + // + // Reference: + // https://github.com/emscripten-core/emscripten/pull/16917 + && !ENVIRONMENT_IS_NODE + ) { + try { + var response = fetch(binaryFile, { credentials: 'same-origin' }); + var instantiationResult = await WebAssembly.instantiateStreaming(response, imports); + return instantiationResult; + } catch (reason) { + // We expect the most common failure cause to be a bad MIME type for the binary, + // in which case falling back to ArrayBuffer instantiation should work. + err(`wasm streaming compile failed: ${reason}`); + err('falling back to ArrayBuffer instantiation'); + // fall back of instantiateArrayBuffer below + }; + } + return instantiateArrayBuffer(binaryFile, imports); +} + +function getWasmImports() { + // prepare imports + return { + 'env': wasmImports, + 'wasi_snapshot_preview1': wasmImports, + } +} + +// Create the wasm instance. +// Receives the wasm imports, returns the exports. +async function createWasm() { + // Load the wasm module and create an instance of using native support in the JS engine. + // handle a generated wasm instance, receiving its exports and + // performing other necessary setup + /** @param {WebAssembly.Module=} module*/ + function receiveInstance(instance, module) { + wasmExports = instance.exports; + + + + wasmMemory = wasmExports['memory']; + + assert(wasmMemory, 'memory not found in wasm exports'); + updateMemoryViews(); + + removeRunDependency('wasm-instantiate'); + return wasmExports; + } + // wait for the pthread pool (if any) + addRunDependency('wasm-instantiate'); + + // Prefer streaming instantiation if available. + // Async compilation can be confusing when an error on the page overwrites Module + // (for example, if the order of elements is wrong, and the one defining Module is + // later), so we save Module and check it later. + var trueModule = Module; + function receiveInstantiationResult(result) { + // 'result' is a ResultObject object which has both the module and instance. + // receiveInstance() will swap in the exports (to Module.asm) so they can be called + assert(Module === trueModule, 'the Module object should not be replaced during async compilation - perhaps the order of HTML elements is wrong?'); + trueModule = null; + // TODO: Due to Closure regression https://github.com/google/closure-compiler/issues/3193, the above line no longer optimizes out down to the following line. + // When the regression is fixed, can restore the above PTHREADS-enabled path. + return receiveInstance(result['instance']); + } + + var info = getWasmImports(); + + // User shell pages can write their own Module.instantiateWasm = function(imports, successCallback) callback + // to manually instantiate the Wasm module themselves. This allows pages to + // run the instantiation parallel to any other async startup actions they are + // performing. + // Also pthreads and wasm workers initialize the wasm instance through this + // path. + if (Module['instantiateWasm']) { + return new Promise((resolve, reject) => { + try { + Module['instantiateWasm'](info, (mod, inst) => { + receiveInstance(mod, inst); + resolve(mod.exports); + }); + } catch(e) { + err(`Module.instantiateWasm callback failed with error: ${e}`); + reject(e); + } + }); + } + + wasmBinaryFile ??= findWasmBinary(); + var result = await instantiateAsync(wasmBinary, wasmBinaryFile, info); + var exports = receiveInstantiationResult(result); + return exports; +} + +// end include: preamble.js + +// Begin JS library code + + + class ExitStatus { + name = 'ExitStatus'; + constructor(status) { + this.message = `Program terminated with exit(${status})`; + this.status = status; + } + } + + var callRuntimeCallbacks = (callbacks) => { + while (callbacks.length > 0) { + // Pass the module as the first argument. + callbacks.shift()(Module); + } + }; + var onPostRuns = []; + var addOnPostRun = (cb) => onPostRuns.unshift(cb); + + var onPreRuns = []; + var addOnPreRun = (cb) => onPreRuns.unshift(cb); + + + + /** + * @param {number} ptr + * @param {string} type + */ + function getValue(ptr, type = 'i8') { + if (type.endsWith('*')) type = '*'; + switch (type) { + case 'i1': return HEAP8[ptr]; + case 'i8': return HEAP8[ptr]; + case 'i16': return HEAP16[((ptr)>>1)]; + case 'i32': return HEAP32[((ptr)>>2)]; + case 'i64': return HEAP64[((ptr)>>3)]; + case 'float': return HEAPF32[((ptr)>>2)]; + case 'double': return HEAPF64[((ptr)>>3)]; + case '*': return HEAPU32[((ptr)>>2)]; + default: abort(`invalid type for getValue: ${type}`); + } + } + + var noExitRuntime = Module['noExitRuntime'] || true; + + var ptrToString = (ptr) => { + assert(typeof ptr === 'number'); + // With CAN_ADDRESS_2GB or MEMORY64, pointers are already unsigned. + ptr >>>= 0; + return '0x' + ptr.toString(16).padStart(8, '0'); + }; + + + /** + * @param {number} ptr + * @param {number} value + * @param {string} type + */ + function setValue(ptr, value, type = 'i8') { + if (type.endsWith('*')) type = '*'; + switch (type) { + case 'i1': HEAP8[ptr] = value; break; + case 'i8': HEAP8[ptr] = value; break; + case 'i16': HEAP16[((ptr)>>1)] = value; break; + case 'i32': HEAP32[((ptr)>>2)] = value; break; + case 'i64': HEAP64[((ptr)>>3)] = BigInt(value); break; + case 'float': HEAPF32[((ptr)>>2)] = value; break; + case 'double': HEAPF64[((ptr)>>3)] = value; break; + case '*': HEAPU32[((ptr)>>2)] = value; break; + default: abort(`invalid type for setValue: ${type}`); + } + } + + var stackRestore = (val) => __emscripten_stack_restore(val); + + var stackSave = () => _emscripten_stack_get_current(); + + var warnOnce = (text) => { + warnOnce.shown ||= {}; + if (!warnOnce.shown[text]) { + warnOnce.shown[text] = 1; + if (ENVIRONMENT_IS_NODE) text = 'warning: ' + text; + err(text); + } + }; + + + var runtimeKeepaliveCounter = 0; + var keepRuntimeAlive = () => noExitRuntime || runtimeKeepaliveCounter > 0; + var _proc_exit = (code) => { + EXITSTATUS = code; + if (!keepRuntimeAlive()) { + Module['onExit']?.(code); + ABORT = true; + } + quit_(code, new ExitStatus(code)); + }; + + + /** @param {boolean|number=} implicit */ + var exitJS = (status, implicit) => { + EXITSTATUS = status; + + checkUnflushedContent(); + + // if exit() was called explicitly, warn the user if the runtime isn't actually being shut down + if (keepRuntimeAlive() && !implicit) { + var msg = `program exited (with status: ${status}), but keepRuntimeAlive() is set (counter=${runtimeKeepaliveCounter}) due to an async operation, so halting execution but not exiting the runtime or preventing further async execution (you can use emscripten_force_exit, if you want to force a true shutdown)`; + err(msg); + } + + _proc_exit(status); + }; + + var handleException = (e) => { + // Certain exception types we do not treat as errors since they are used for + // internal control flow. + // 1. ExitStatus, which is thrown by exit() + // 2. "unwind", which is thrown by emscripten_unwind_to_js_event_loop() and others + // that wish to return to JS event loop. + if (e instanceof ExitStatus || e == 'unwind') { + return EXITSTATUS; + } + checkStackCookie(); + if (e instanceof WebAssembly.RuntimeError) { + if (_emscripten_stack_get_current() <= 0) { + err('Stack overflow detected. You can try increasing -sSTACK_SIZE (currently set to 65536)'); + } + } + quit_(1, e); + }; + + var lengthBytesUTF8 = (str) => { + var len = 0; + for (var i = 0; i < str.length; ++i) { + // Gotcha: charCodeAt returns a 16-bit word that is a UTF-16 encoded code + // unit, not a Unicode code point of the character! So decode + // UTF16->UTF32->UTF8. + // See http://unicode.org/faq/utf_bom.html#utf16-3 + var c = str.charCodeAt(i); // possibly a lead surrogate + if (c <= 0x7F) { + len++; + } else if (c <= 0x7FF) { + len += 2; + } else if (c >= 0xD800 && c <= 0xDFFF) { + len += 4; ++i; + } else { + len += 3; + } + } + return len; + }; + + var stringToUTF8Array = (str, heap, outIdx, maxBytesToWrite) => { + assert(typeof str === 'string', `stringToUTF8Array expects a string (got ${typeof str})`); + // Parameter maxBytesToWrite is not optional. Negative values, 0, null, + // undefined and false each don't write out any bytes. + if (!(maxBytesToWrite > 0)) + return 0; + + var startIdx = outIdx; + var endIdx = outIdx + maxBytesToWrite - 1; // -1 for string null terminator. + for (var i = 0; i < str.length; ++i) { + // Gotcha: charCodeAt returns a 16-bit word that is a UTF-16 encoded code + // unit, not a Unicode code point of the character! So decode + // UTF16->UTF32->UTF8. + // See http://unicode.org/faq/utf_bom.html#utf16-3 + // For UTF8 byte structure, see http://en.wikipedia.org/wiki/UTF-8#Description + // and https://www.ietf.org/rfc/rfc2279.txt + // and https://tools.ietf.org/html/rfc3629 + var u = str.charCodeAt(i); // possibly a lead surrogate + if (u >= 0xD800 && u <= 0xDFFF) { + var u1 = str.charCodeAt(++i); + u = 0x10000 + ((u & 0x3FF) << 10) | (u1 & 0x3FF); + } + if (u <= 0x7F) { + if (outIdx >= endIdx) break; + heap[outIdx++] = u; + } else if (u <= 0x7FF) { + if (outIdx + 1 >= endIdx) break; + heap[outIdx++] = 0xC0 | (u >> 6); + heap[outIdx++] = 0x80 | (u & 63); + } else if (u <= 0xFFFF) { + if (outIdx + 2 >= endIdx) break; + heap[outIdx++] = 0xE0 | (u >> 12); + heap[outIdx++] = 0x80 | ((u >> 6) & 63); + heap[outIdx++] = 0x80 | (u & 63); + } else { + if (outIdx + 3 >= endIdx) break; + if (u > 0x10FFFF) warnOnce('Invalid Unicode code point ' + ptrToString(u) + ' encountered when serializing a JS string to a UTF-8 string in wasm memory! (Valid unicode code points should be in range 0-0x10FFFF).'); + heap[outIdx++] = 0xF0 | (u >> 18); + heap[outIdx++] = 0x80 | ((u >> 12) & 63); + heap[outIdx++] = 0x80 | ((u >> 6) & 63); + heap[outIdx++] = 0x80 | (u & 63); + } + } + // Null-terminate the pointer to the buffer. + heap[outIdx] = 0; + return outIdx - startIdx; + }; + var stringToUTF8 = (str, outPtr, maxBytesToWrite) => { + assert(typeof maxBytesToWrite == 'number', 'stringToUTF8(str, outPtr, maxBytesToWrite) is missing the third parameter that specifies the length of the output buffer!'); + return stringToUTF8Array(str, HEAPU8, outPtr, maxBytesToWrite); + }; + + var stackAlloc = (sz) => __emscripten_stack_alloc(sz); + var stringToUTF8OnStack = (str) => { + var size = lengthBytesUTF8(str) + 1; + var ret = stackAlloc(size); + stringToUTF8(str, ret, size); + return ret; + }; +// End JS library code + +function checkIncomingModuleAPI() { + ignoredModuleProp('fetchSettings'); +} +var wasmImports = { + +}; +var wasmExports; +createWasm(); +var ___wasm_call_ctors = createExportWrapper('__wasm_call_ctors', 0); +var _main = Module['_main'] = createExportWrapper('__main_argc_argv', 2); +var _fflush = createExportWrapper('fflush', 1); +var _emscripten_stack_init = () => (_emscripten_stack_init = wasmExports['emscripten_stack_init'])(); +var _emscripten_stack_get_free = () => (_emscripten_stack_get_free = wasmExports['emscripten_stack_get_free'])(); +var _emscripten_stack_get_base = () => (_emscripten_stack_get_base = wasmExports['emscripten_stack_get_base'])(); +var _emscripten_stack_get_end = () => (_emscripten_stack_get_end = wasmExports['emscripten_stack_get_end'])(); +var __emscripten_stack_restore = (a0) => (__emscripten_stack_restore = wasmExports['_emscripten_stack_restore'])(a0); +var __emscripten_stack_alloc = (a0) => (__emscripten_stack_alloc = wasmExports['_emscripten_stack_alloc'])(a0); +var _emscripten_stack_get_current = () => (_emscripten_stack_get_current = wasmExports['emscripten_stack_get_current'])(); + + +// include: postamble.js +// === Auto-generated postamble setup entry stuff === + +var missingLibrarySymbols = [ + 'writeI53ToI64', + 'writeI53ToI64Clamped', + 'writeI53ToI64Signaling', + 'writeI53ToU64Clamped', + 'writeI53ToU64Signaling', + 'readI53FromI64', + 'readI53FromU64', + 'convertI32PairToI53', + 'convertI32PairToI53Checked', + 'convertU32PairToI53', + 'bigintToI53Checked', + 'getTempRet0', + 'setTempRet0', + 'zeroMemory', + 'getHeapMax', + 'abortOnCannotGrowMemory', + 'growMemory', + 'strError', + 'inetPton4', + 'inetNtop4', + 'inetPton6', + 'inetNtop6', + 'readSockaddr', + 'writeSockaddr', + 'emscriptenLog', + 'readEmAsmArgs', + 'jstoi_q', + 'getExecutableName', + 'listenOnce', + 'autoResumeAudioContext', + 'getDynCaller', + 'dynCall', + 'runtimeKeepalivePush', + 'runtimeKeepalivePop', + 'callUserCallback', + 'maybeExit', + 'asmjsMangle', + 'asyncLoad', + 'alignMemory', + 'mmapAlloc', + 'HandleAllocator', + 'getNativeTypeSize', + 'addOnInit', + 'addOnPostCtor', + 'addOnPreMain', + 'addOnExit', + 'STACK_SIZE', + 'STACK_ALIGN', + 'POINTER_SIZE', + 'ASSERTIONS', + 'getCFunc', + 'ccall', + 'cwrap', + 'uleb128Encode', + 'sigToWasmTypes', + 'generateFuncType', + 'convertJsFunctionToWasm', + 'getEmptyTableSlot', + 'updateTableMap', + 'getFunctionAddress', + 'addFunction', + 'removeFunction', + 'reallyNegative', + 'unSign', + 'strLen', + 'reSign', + 'formatString', + 'UTF8ArrayToString', + 'UTF8ToString', + 'intArrayFromString', + 'intArrayToString', + 'AsciiToString', + 'stringToAscii', + 'UTF16ToString', + 'stringToUTF16', + 'lengthBytesUTF16', + 'UTF32ToString', + 'stringToUTF32', + 'lengthBytesUTF32', + 'stringToNewUTF8', + 'writeArrayToMemory', + 'registerKeyEventCallback', + 'maybeCStringToJsString', + 'findEventTarget', + 'getBoundingClientRect', + 'fillMouseEventData', + 'registerMouseEventCallback', + 'registerWheelEventCallback', + 'registerUiEventCallback', + 'registerFocusEventCallback', + 'fillDeviceOrientationEventData', + 'registerDeviceOrientationEventCallback', + 'fillDeviceMotionEventData', + 'registerDeviceMotionEventCallback', + 'screenOrientation', + 'fillOrientationChangeEventData', + 'registerOrientationChangeEventCallback', + 'fillFullscreenChangeEventData', + 'registerFullscreenChangeEventCallback', + 'JSEvents_requestFullscreen', + 'JSEvents_resizeCanvasForFullscreen', + 'registerRestoreOldStyle', + 'hideEverythingExceptGivenElement', + 'restoreHiddenElements', + 'setLetterbox', + 'softFullscreenResizeWebGLRenderTarget', + 'doRequestFullscreen', + 'fillPointerlockChangeEventData', + 'registerPointerlockChangeEventCallback', + 'registerPointerlockErrorEventCallback', + 'requestPointerLock', + 'fillVisibilityChangeEventData', + 'registerVisibilityChangeEventCallback', + 'registerTouchEventCallback', + 'fillGamepadEventData', + 'registerGamepadEventCallback', + 'registerBeforeUnloadEventCallback', + 'fillBatteryEventData', + 'battery', + 'registerBatteryEventCallback', + 'setCanvasElementSize', + 'getCanvasElementSize', + 'jsStackTrace', + 'getCallstack', + 'convertPCtoSourceLocation', + 'getEnvStrings', + 'checkWasiClock', + 'flush_NO_FILESYSTEM', + 'wasiRightsToMuslOFlags', + 'wasiOFlagsToMuslOFlags', + 'initRandomFill', + 'randomFill', + 'safeSetTimeout', + 'setImmediateWrapped', + 'safeRequestAnimationFrame', + 'clearImmediateWrapped', + 'registerPostMainLoop', + 'registerPreMainLoop', + 'getPromise', + 'makePromise', + 'idsToPromises', + 'makePromiseCallback', + 'ExceptionInfo', + 'findMatchingCatch', + 'Browser_asyncPrepareDataCounter', + 'isLeapYear', + 'ydayFromDate', + 'arraySum', + 'addDays', + 'getSocketFromFD', + 'getSocketAddress', + 'FS_createPreloadedFile', + 'FS_modeStringToFlags', + 'FS_getMode', + 'FS_stdin_getChar', + 'FS_unlink', + 'FS_createDataFile', + 'FS_mkdirTree', + '_setNetworkCallback', + 'heapObjectForWebGLType', + 'toTypedArrayIndex', + 'webgl_enable_ANGLE_instanced_arrays', + 'webgl_enable_OES_vertex_array_object', + 'webgl_enable_WEBGL_draw_buffers', + 'webgl_enable_WEBGL_multi_draw', + 'webgl_enable_EXT_polygon_offset_clamp', + 'webgl_enable_EXT_clip_control', + 'webgl_enable_WEBGL_polygon_mode', + 'emscriptenWebGLGet', + 'computeUnpackAlignedImageSize', + 'colorChannelsInGlTextureFormat', + 'emscriptenWebGLGetTexPixelData', + 'emscriptenWebGLGetUniform', + 'webglGetUniformLocation', + 'webglPrepareUniformLocationsBeforeFirstUse', + 'webglGetLeftBracePos', + 'emscriptenWebGLGetVertexAttrib', + '__glGetActiveAttribOrUniform', + 'writeGLArray', + 'registerWebGlEventCallback', + 'runAndAbortIfError', + 'ALLOC_NORMAL', + 'ALLOC_STACK', + 'allocate', + 'writeStringToMemory', + 'writeAsciiToMemory', + 'demangle', + 'stackTrace', +]; +missingLibrarySymbols.forEach(missingLibrarySymbol) + +var unexportedSymbols = [ + 'run', + 'addRunDependency', + 'removeRunDependency', + 'out', + 'err', + 'callMain', + 'abort', + 'wasmMemory', + 'wasmExports', + 'writeStackCookie', + 'checkStackCookie', + 'INT53_MAX', + 'INT53_MIN', + 'stackSave', + 'stackRestore', + 'stackAlloc', + 'ptrToString', + 'exitJS', + 'ENV', + 'ERRNO_CODES', + 'DNS', + 'Protocols', + 'Sockets', + 'timers', + 'warnOnce', + 'readEmAsmArgsArray', + 'jstoi_s', + 'handleException', + 'keepRuntimeAlive', + 'wasmTable', + 'noExitRuntime', + 'addOnPreRun', + 'addOnPostRun', + 'freeTableIndexes', + 'functionsInTableMap', + 'setValue', + 'getValue', + 'PATH', + 'PATH_FS', + 'UTF8Decoder', + 'stringToUTF8Array', + 'stringToUTF8', + 'lengthBytesUTF8', + 'UTF16Decoder', + 'stringToUTF8OnStack', + 'JSEvents', + 'specialHTMLTargets', + 'findCanvasEventTarget', + 'currentFullscreenStrategy', + 'restoreOldWindowedStyle', + 'UNWIND_CACHE', + 'ExitStatus', + 'emSetImmediate', + 'emClearImmediate_deps', + 'emClearImmediate', + 'promiseMap', + 'uncaughtExceptionCount', + 'exceptionLast', + 'exceptionCaught', + 'Browser', + 'getPreloadedImageData__data', + 'wget', + 'MONTH_DAYS_REGULAR', + 'MONTH_DAYS_LEAP', + 'MONTH_DAYS_REGULAR_CUMULATIVE', + 'MONTH_DAYS_LEAP_CUMULATIVE', + 'SYSCALLS', + 'preloadPlugins', + 'FS_stdin_getChar_buffer', + 'FS_createPath', + 'FS_createDevice', + 'FS_readFile', + 'FS', + 'FS_createLazyFile', + 'MEMFS', + 'TTY', + 'PIPEFS', + 'SOCKFS', + 'tempFixedLengthArray', + 'miniTempWebGLFloatBuffers', + 'miniTempWebGLIntBuffers', + 'GL', + 'AL', + 'GLUT', + 'EGL', + 'GLEW', + 'IDBStore', + 'SDL', + 'SDL_gfx', + 'allocateUTF8', + 'allocateUTF8OnStack', + 'print', + 'printErr', +]; +unexportedSymbols.forEach(unexportedRuntimeSymbol); + + + +var calledRun; + +function callMain(args = []) { + assert(runDependencies == 0, 'cannot call main when async dependencies remain! (listen on Module["onRuntimeInitialized"])'); + assert(typeof onPreRuns === 'undefined' || onPreRuns.length == 0, 'cannot call main when preRun functions remain to be called'); + + var entryFunction = _main; + + args.unshift(thisProgram); + + var argc = args.length; + var argv = stackAlloc((argc + 1) * 4); + var argv_ptr = argv; + args.forEach((arg) => { + HEAPU32[((argv_ptr)>>2)] = stringToUTF8OnStack(arg); + argv_ptr += 4; + }); + HEAPU32[((argv_ptr)>>2)] = 0; + + try { + + var ret = entryFunction(argc, argv); + + // if we're not running an evented main loop, it's time to exit + exitJS(ret, /* implicit = */ true); + return ret; + } catch (e) { + return handleException(e); + } +} + +function stackCheckInit() { + // This is normally called automatically during __wasm_call_ctors but need to + // get these values before even running any of the ctors so we call it redundantly + // here. + _emscripten_stack_init(); + // TODO(sbc): Move writeStackCookie to native to to avoid this. + writeStackCookie(); +} + +function run(args = arguments_) { + + if (runDependencies > 0) { + dependenciesFulfilled = run; + return; + } + + stackCheckInit(); + + preRun(); + + // a preRun added a dependency, run will be called later + if (runDependencies > 0) { + dependenciesFulfilled = run; + return; + } + + function doRun() { + // run may have just been called through dependencies being fulfilled just in this very frame, + // or while the async setStatus time below was happening + assert(!calledRun); + calledRun = true; + Module['calledRun'] = true; + + if (ABORT) return; + + initRuntime(); + + preMain(); + + Module['onRuntimeInitialized']?.(); + consumedModuleProp('onRuntimeInitialized'); + + var noInitialRun = Module['noInitialRun'];legacyModuleProp('noInitialRun', 'noInitialRun'); + if (!noInitialRun) callMain(args); + + postRun(); + } + + if (Module['setStatus']) { + Module['setStatus']('Running...'); + setTimeout(() => { + setTimeout(() => Module['setStatus'](''), 1); + doRun(); + }, 1); + } else + { + doRun(); + } + checkStackCookie(); +} + +function checkUnflushedContent() { + // Compiler settings do not allow exiting the runtime, so flushing + // the streams is not possible. but in ASSERTIONS mode we check + // if there was something to flush, and if so tell the user they + // should request that the runtime be exitable. + // Normally we would not even include flush() at all, but in ASSERTIONS + // builds we do so just for this check, and here we see if there is any + // content to flush, that is, we check if there would have been + // something a non-ASSERTIONS build would have not seen. + // How we flush the streams depends on whether we are in SYSCALLS_REQUIRE_FILESYSTEM=0 + // mode (which has its own special function for this; otherwise, all + // the code is inside libc) + var oldOut = out; + var oldErr = err; + var has = false; + out = err = (x) => { + has = true; + } + try { // it doesn't matter if it fails + _fflush(0); + } catch(e) {} + out = oldOut; + err = oldErr; + if (has) { + warnOnce('stdio streams had content in them that was not flushed. you should set EXIT_RUNTIME to 1 (see the Emscripten FAQ), or make sure to emit a newline when you printf etc.'); + warnOnce('(this may also be due to not including full filesystem support - try building with -sFORCE_FILESYSTEM)'); + } +} + +if (Module['preInit']) { + if (typeof Module['preInit'] == 'function') Module['preInit'] = [Module['preInit']]; + while (Module['preInit'].length > 0) { + Module['preInit'].pop()(); + } +} +consumedModuleProp('preInit'); + +run(); + +// end include: postamble.js + diff --git a/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/3.28.3/CompilerIdC/a.out.wasm b/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/3.28.3/CompilerIdC/a.out.wasm new file mode 100755 index 0000000000000000000000000000000000000000..15fd07e3924a8dfd418f55f4d9dbd30871d7f973 GIT binary patch literal 1791 zcmai#J9FDc5P|JmEV&lRhsMpq{bO}5`ehdyWRb6_jp)<-EA`fU`s;> zO0U;rJ?dWd*sBA81D=do4-S}A0P87ZI#<+8mS?kBRn78@N;m5;#xhyP&iOgdjw?N8 zo}Q{2b&xhg-}8L7?X-jNC5JJ~`h*s>>bB=u^(Y9t0J>$h?UrxZVY4oq6JXg!!;8Bw zpfKgMyY;Zui5%bRMt1$!YWb}QGIN*an@(gkLdSvZyLE?l*MXtgcltU05#;8qOS;hM zQiu-lnaes#AgF_~aLGvqQjf#X@gq>@EDHFj6*_f_F81qDEAXwzKJ*+0!$0J774(eu zm%_Gti>Gvf;HEAVYS6nfS!v=uR%vq5~4fBy0!4b^IVpN)eC}06cU7-_7Pf=qyR^~q?sPPmvf#W#g zibKZQKHCJ56>k@T? zP>44WBO#EaSQJy#A}(Ul6(vHI2$lLS;gSJ=p2{3=lH)So#N|kov5d>HxRpBI#@l$y z6%}%Y@t!Ll5b8mS zs$s3ne@Rg5DQW}Pal;i4@u5U*5^4)KaVrv!@DXms;&F<4f=}?VE4B%>-A@O^4(=4R zVL&J)|GGBMc>e$(9Gjhwi!4b?HpXTA^>bm<*4l zXJRUa)PjRXzezBEm5Jz|Cy3vqtc?yPzerdrm`vLK&6(2UI|w84q%po@LYeqy#0dG)A0LNSgU15{j}X81mf_ zmLG(t7MaxLib@h9GJ1vIn8{puEZP1PpviqiLf7~L!h5i;=t;*_$|K3Up9s^mKN!8> zvYP(LKG=KuY_lG;J1x%%_uuzyzxf=J$&P17jUa6A_s4cve=(4qPpNQrspfR8Bd1}< zUbO#guWv`?)IYMrqYF)S{W)A*|60#FaY9MiUrnyH>PjlCu3iY_YQ8>G>2LvqDSDRZ z`G}q>J@6eXL{!;jiFWKLrn;J|Xosz?M|oVH;qOo3R-?tDTGeLp=w-rjOb;@=~i;x KR?|0VYyJW1zny*n literal 0 HcmV?d00001 diff --git a/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeConfigureLog.yaml b/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeConfigureLog.yaml new file mode 100644 index 0000000..b8b88b5 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeConfigureLog.yaml @@ -0,0 +1,2887 @@ + +--- +events: + - + kind: "message-v1" + backtrace: + - "/usr/share/cmake-3.28/Modules/CMakeDetermineSystem.cmake:228 (message)" + - "CMakeLists.txt:9 (project)" + message: | + The target system is: Emscripten - 1 - x86 + The host system is: Linux - 6.8.0-53-generic - x86_64 + - + kind: "message-v1" + backtrace: + - "/usr/share/cmake-3.28/Modules/CMakeDetermineCompilerId.cmake:17 (message)" + - "/usr/share/cmake-3.28/Modules/CMakeDetermineCompilerId.cmake:64 (__determine_compiler_id_test)" + - "/usr/share/cmake-3.28/Modules/CMakeDetermineCCompiler.cmake:123 (CMAKE_DETERMINE_COMPILER_ID)" + - "CMakeLists.txt:9 (project)" + message: | + Compiling the C compiler identification source file "CMakeCCompilerId.c" succeeded. + Compiler: /home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc + Build flags: + Id flags: + + The output was: + 0 + + + Compilation of the C compiler identification source "CMakeCCompilerId.c" produced "a.out.js" + + Compilation of the C compiler identification source "CMakeCCompilerId.c" produced "a.out.wasm" + + The C compiler identification could not be found in: + /home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/3.28.3/CompilerIdC/a.out.js + + The C compiler identification is Clang, found in: + /home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/3.28.3/CompilerIdC/a.out.wasm + + - + kind: "try_compile-v1" + backtrace: + - "/usr/share/cmake-3.28/Modules/CMakeDetermineCompilerABI.cmake:57 (try_compile)" + - "/usr/share/cmake-3.28/Modules/CMakeTestCCompiler.cmake:26 (CMAKE_DETERMINE_COMPILER_ABI)" + - "CMakeLists.txt:9 (project)" + checks: + - "Detecting C compiler ABI info" + directories: + source: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-dnAlwb" + binary: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-dnAlwb" + cmakeVariables: + CMAKE_CXX_COMPILER_CLANG_SCAN_DEPS: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/emscan-deps" + CMAKE_C_FLAGS: "" + CMAKE_C_FLAGS_DEBUG: "-g" + CMAKE_EXE_LINKER_FLAGS: "" + CMAKE_MODULE_PATH: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/cproject/thirdparty/libzip-1.11.3/cmake;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules" + buildResult: + variable: "CMAKE_C_ABI_COMPILED" + cached: true + stdout: | + Change Dir: '/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-dnAlwb' + + Run Build Command(s): /usr/bin/cmake -E env VERBOSE=1 /usr/bin/gmake -f Makefile cmTC_063d1/fast + /usr/bin/gmake -f CMakeFiles/cmTC_063d1.dir/build.make CMakeFiles/cmTC_063d1.dir/build + gmake[1]: Entering directory '/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-dnAlwb' + Building C object CMakeFiles/cmTC_063d1.dir/CMakeCCompilerABI.c.o + "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" -v -MD -MT CMakeFiles/cmTC_063d1.dir/CMakeCCompilerABI.c.o -MF CMakeFiles/cmTC_063d1.dir/CMakeCCompilerABI.c.o.d -o CMakeFiles/cmTC_063d1.dir/CMakeCCompilerABI.c.o -c /usr/share/cmake-3.28/Modules/CMakeCCompilerABI.c + "/home/romazan/Рабочий Ñтол/emsdk/upstream/bin/clang" -target wasm32-unknown-emscripten -fignore-exceptions -mllvm -combiner-global-alias-analysis=false -mllvm -enable-emscripten-sjlj -mllvm -disable-lsr "--sysroot=/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/cache/sysroot" -DEMSCRIPTEN -Xclang -iwithsysroot/include/fakesdl -Xclang -iwithsysroot/include/compat -v -MD -MT CMakeFiles/cmTC_063d1.dir/CMakeCCompilerABI.c.o -MF CMakeFiles/cmTC_063d1.dir/CMakeCCompilerABI.c.o.d -oCMakeFiles/cmTC_063d1.dir/CMakeCCompilerABI.c.o -c /usr/share/cmake-3.28/Modules/CMakeCCompilerABI.c + clang version 21.0.0git (https:/github.com/llvm/llvm-project 4775e6d9099467df9363e1a3cd5950cc3d2fde05) + Target: wasm32-unknown-emscripten + Thread model: posix + InstalledDir: /home/romazan/Рабочий Ñтол/emsdk/upstream/bin + (in-process) + "/home/romazan/Рабочий Ñтол/emsdk/upstream/bin/clang-21" -cc1 -triple wasm32-unknown-emscripten -emit-obj -disable-free -clear-ast-before-backend -disable-llvm-verifier -discard-value-names -main-file-name CMakeCCompilerABI.c -mrelocation-model static -mframe-pointer=none -ffp-contract=on -fno-rounding-math -mconstructor-aliases -target-cpu generic -fvisibility=hidden -debugger-tuning=gdb "-fdebug-compilation-dir=/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-dnAlwb" -v "-fcoverage-compilation-dir=/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-dnAlwb" -resource-dir "/home/romazan/Рабочий Ñтол/emsdk/upstream/lib/clang/21" -dependency-file CMakeFiles/cmTC_063d1.dir/CMakeCCompilerABI.c.o.d -MT CMakeFiles/cmTC_063d1.dir/CMakeCCompilerABI.c.o -sys-header-deps -D EMSCRIPTEN -isysroot "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/cache/sysroot" -internal-isystem "/home/romazan/Рабочий Ñтол/emsdk/upstream/lib/clang/21/include" -internal-isystem "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/wasm32-emscripten" -internal-isystem "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/cache/sysroot/include" -ferror-limit 19 -fgnuc-version=4.2.1 -fskip-odr-check-in-gmf -fignore-exceptions -iwithsysroot/include/fakesdl -iwithsysroot/include/compat -mllvm -combiner-global-alias-analysis=false -mllvm -enable-emscripten-sjlj -mllvm -disable-lsr -o CMakeFiles/cmTC_063d1.dir/CMakeCCompilerABI.c.o -x c /usr/share/cmake-3.28/Modules/CMakeCCompilerABI.c + clang -cc1 version 21.0.0git based upon LLVM 21.0.0git default target x86_64-unknown-linux-gnu + ignoring nonexistent directory "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/wasm32-emscripten" + #include "..." search starts here: + #include <...> search starts here: + /home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/fakesdl + /home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat + /home/romazan/Рабочий Ñтол/emsdk/upstream/lib/clang/21/include + /home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/cache/sysroot/include + End of search list. + Linking C executable cmTC_063d1.js + /usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_063d1.dir/link.txt --verbose=1 + "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" -v @CMakeFiles/cmTC_063d1.dir/objects1.rsp -o cmTC_063d1.js + "/home/romazan/Рабочий Ñтол/emsdk/upstream/bin/clang" --version + "/home/romazan/Рабочий Ñтол/emsdk/upstream/bin/wasm-ld" -o cmTC_063d1.wasm CMakeFiles/cmTC_063d1.dir/CMakeCCompilerABI.c.o "-L/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/cache/sysroot/lib/wasm32-emscripten" "-L/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/src/lib" -lGL-getprocaddr -lal -lhtml5 -lstubs-debug -lnoexit -lc-debug -ldlmalloc-debug -lcompiler_rt -lc++-noexcept -lc++abi-debug-noexcept -lsockets -mllvm -combiner-global-alias-analysis=false -mllvm -enable-emscripten-sjlj -mllvm -disable-lsr /tmp/tmp0d70qforlibemscripten_js_symbols.so --strip-debug --export=emscripten_stack_get_end --export=emscripten_stack_get_free --export=emscripten_stack_get_base --export=emscripten_stack_get_current --export=emscripten_stack_init --export=_emscripten_stack_alloc --export=__wasm_call_ctors --export=_emscripten_stack_restore --export-if-defined=__start_em_asm --export-if-defined=__stop_em_asm --export-if-defined=__start_em_lib_deps --export-if-defined=__stop_em_lib_deps --export-if-defined=__start_em_js --export-if-defined=__stop_em_js --export-if-defined=main --export-if-defined=__main_argc_argv --export-if-defined=fflush --export-table -z stack-size=65536 --no-growable-memory --initial-heap=16777216 --no-entry --stack-first --table-base=1 + "/home/romazan/Рабочий Ñтол/emsdk/upstream/bin/llvm-objcopy" cmTC_063d1.wasm cmTC_063d1.wasm --remove-section=.debug* --remove-section=producers --remove-section=name + "/home/romazan/Рабочий Ñтол/emsdk/node/20.18.0_64bit/bin/node" "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/tools/compiler.mjs" - + gmake[1]: Leaving directory '/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-dnAlwb' + + exitCode: 0 + - + kind: "message-v1" + backtrace: + - "/usr/share/cmake-3.28/Modules/CMakeDetermineCompilerABI.cmake:127 (message)" + - "/usr/share/cmake-3.28/Modules/CMakeTestCCompiler.cmake:26 (CMAKE_DETERMINE_COMPILER_ABI)" + - "CMakeLists.txt:9 (project)" + message: | + Parsed C implicit include dir info: rv=done + found start of include info + found start of implicit include info + add: [/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/fakesdl] + add: [/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat] + add: [/home/romazan/Рабочий Ñтол/emsdk/upstream/lib/clang/21/include] + add: [/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/cache/sysroot/include] + end of search list found + collapse include dir [/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/fakesdl] ==> [/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/fakesdl] + collapse include dir [/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat] ==> [/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat] + collapse include dir [/home/romazan/Рабочий Ñтол/emsdk/upstream/lib/clang/21/include] ==> [/home/romazan/Рабочий Ñтол/emsdk/upstream/lib/clang/21/include] + collapse include dir [/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/cache/sysroot/include] ==> [/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/cache/sysroot/include] + implicit include dirs: [/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/fakesdl;/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat;/home/romazan/Рабочий Ñтол/emsdk/upstream/lib/clang/21/include;/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/cache/sysroot/include] + + + - + kind: "message-v1" + backtrace: + - "/usr/share/cmake-3.28/Modules/CMakeDetermineCompilerABI.cmake:159 (message)" + - "/usr/share/cmake-3.28/Modules/CMakeTestCCompiler.cmake:26 (CMAKE_DETERMINE_COMPILER_ABI)" + - "CMakeLists.txt:9 (project)" + message: | + Parsed C implicit link information: + link line regex: [^( *|.*[/\\])(ld|CMAKE_LINK_STARTFILE-NOTFOUND|([^/\\]+-)?ld|collect2)[^/\\]*( |$)] + ignore line: [Change Dir: '/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-dnAlwb'] + ignore line: [] + ignore line: [Run Build Command(s): /usr/bin/cmake -E env VERBOSE=1 /usr/bin/gmake -f Makefile cmTC_063d1/fast] + ignore line: [/usr/bin/gmake -f CMakeFiles/cmTC_063d1.dir/build.make CMakeFiles/cmTC_063d1.dir/build] + ignore line: [gmake[1]: Entering directory '/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-dnAlwb'] + ignore line: [Building C object CMakeFiles/cmTC_063d1.dir/CMakeCCompilerABI.c.o] + ignore line: ["/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" -v -MD -MT CMakeFiles/cmTC_063d1.dir/CMakeCCompilerABI.c.o -MF CMakeFiles/cmTC_063d1.dir/CMakeCCompilerABI.c.o.d -o CMakeFiles/cmTC_063d1.dir/CMakeCCompilerABI.c.o -c /usr/share/cmake-3.28/Modules/CMakeCCompilerABI.c] + ignore line: [ "/home/romazan/Рабочий Ñтол/emsdk/upstream/bin/clang" -target wasm32-unknown-emscripten -fignore-exceptions -mllvm -combiner-global-alias-analysis=false -mllvm -enable-emscripten-sjlj -mllvm -disable-lsr "--sysroot=/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/cache/sysroot" -DEMSCRIPTEN -Xclang -iwithsysroot/include/fakesdl -Xclang -iwithsysroot/include/compat -v -MD -MT CMakeFiles/cmTC_063d1.dir/CMakeCCompilerABI.c.o -MF CMakeFiles/cmTC_063d1.dir/CMakeCCompilerABI.c.o.d -oCMakeFiles/cmTC_063d1.dir/CMakeCCompilerABI.c.o -c /usr/share/cmake-3.28/Modules/CMakeCCompilerABI.c] + ignore line: [clang version 21.0.0git (https:/github.com/llvm/llvm-project 4775e6d9099467df9363e1a3cd5950cc3d2fde05)] + ignore line: [Target: wasm32-unknown-emscripten] + ignore line: [Thread model: posix] + ignore line: [InstalledDir: /home/romazan/Рабочий Ñтол/emsdk/upstream/bin] + ignore line: [ (in-process)] + ignore line: [ "/home/romazan/Рабочий Ñтол/emsdk/upstream/bin/clang-21" -cc1 -triple wasm32-unknown-emscripten -emit-obj -disable-free -clear-ast-before-backend -disable-llvm-verifier -discard-value-names -main-file-name CMakeCCompilerABI.c -mrelocation-model static -mframe-pointer=none -ffp-contract=on -fno-rounding-math -mconstructor-aliases -target-cpu generic -fvisibility=hidden -debugger-tuning=gdb "-fdebug-compilation-dir=/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-dnAlwb" -v "-fcoverage-compilation-dir=/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-dnAlwb" -resource-dir "/home/romazan/Рабочий Ñтол/emsdk/upstream/lib/clang/21" -dependency-file CMakeFiles/cmTC_063d1.dir/CMakeCCompilerABI.c.o.d -MT CMakeFiles/cmTC_063d1.dir/CMakeCCompilerABI.c.o -sys-header-deps -D EMSCRIPTEN -isysroot "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/cache/sysroot" -internal-isystem "/home/romazan/Рабочий Ñтол/emsdk/upstream/lib/clang/21/include" -internal-isystem "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/wasm32-emscripten" -internal-isystem "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/cache/sysroot/include" -ferror-limit 19 -fgnuc-version=4.2.1 -fskip-odr-check-in-gmf -fignore-exceptions -iwithsysroot/include/fakesdl -iwithsysroot/include/compat -mllvm -combiner-global-alias-analysis=false -mllvm -enable-emscripten-sjlj -mllvm -disable-lsr -o CMakeFiles/cmTC_063d1.dir/CMakeCCompilerABI.c.o -x c /usr/share/cmake-3.28/Modules/CMakeCCompilerABI.c] + ignore line: [clang -cc1 version 21.0.0git based upon LLVM 21.0.0git default target x86_64-unknown-linux-gnu] + ignore line: [ignoring nonexistent directory "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/wasm32-emscripten"] + ignore line: [#include "..." search starts here:] + ignore line: [#include <...> search starts here:] + ignore line: [ /home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/fakesdl] + ignore line: [ /home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat] + ignore line: [ /home/romazan/Рабочий Ñтол/emsdk/upstream/lib/clang/21/include] + ignore line: [ /home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/cache/sysroot/include] + ignore line: [End of search list.] + ignore line: [Linking C executable cmTC_063d1.js] + ignore line: [/usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_063d1.dir/link.txt --verbose=1] + ignore line: ["/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" -v @CMakeFiles/cmTC_063d1.dir/objects1.rsp -o cmTC_063d1.js ] + ignore line: [ "/home/romazan/Рабочий Ñтол/emsdk/upstream/bin/clang" --version] + link line: [ "/home/romazan/Рабочий Ñтол/emsdk/upstream/bin/wasm-ld" -o cmTC_063d1.wasm CMakeFiles/cmTC_063d1.dir/CMakeCCompilerABI.c.o "-L/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/cache/sysroot/lib/wasm32-emscripten" "-L/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/src/lib" -lGL-getprocaddr -lal -lhtml5 -lstubs-debug -lnoexit -lc-debug -ldlmalloc-debug -lcompiler_rt -lc++-noexcept -lc++abi-debug-noexcept -lsockets -mllvm -combiner-global-alias-analysis=false -mllvm -enable-emscripten-sjlj -mllvm -disable-lsr /tmp/tmp0d70qforlibemscripten_js_symbols.so --strip-debug --export=emscripten_stack_get_end --export=emscripten_stack_get_free --export=emscripten_stack_get_base --export=emscripten_stack_get_current --export=emscripten_stack_init --export=_emscripten_stack_alloc --export=__wasm_call_ctors --export=_emscripten_stack_restore --export-if-defined=__start_em_asm --export-if-defined=__stop_em_asm --export-if-defined=__start_em_lib_deps --export-if-defined=__stop_em_lib_deps --export-if-defined=__start_em_js --export-if-defined=__stop_em_js --export-if-defined=main --export-if-defined=__main_argc_argv --export-if-defined=fflush --export-table -z stack-size=65536 --no-growable-memory --initial-heap=16777216 --no-entry --stack-first --table-base=1] + arg [/home/romazan/Рабочий Ñтол/emsdk/upstream/bin/wasm-ld] ==> ignore + arg [-o] ==> ignore + arg [cmTC_063d1.wasm] ==> ignore + arg [CMakeFiles/cmTC_063d1.dir/CMakeCCompilerABI.c.o] ==> ignore + arg [-L/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/cache/sysroot/lib/wasm32-emscripten] ==> dir [/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/cache/sysroot/lib/wasm32-emscripten] + arg [-L/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/src/lib] ==> dir [/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/src/lib] + arg [-lGL-getprocaddr] ==> lib [GL-getprocaddr] + arg [-lal] ==> lib [al] + arg [-lhtml5] ==> lib [html5] + arg [-lstubs-debug] ==> lib [stubs-debug] + arg [-lnoexit] ==> lib [noexit] + arg [-lc-debug] ==> lib [c-debug] + arg [-ldlmalloc-debug] ==> lib [dlmalloc-debug] + arg [-lcompiler_rt] ==> lib [compiler_rt] + arg [-lc++-noexcept] ==> lib [c++-noexcept] + arg [-lc++abi-debug-noexcept] ==> lib [c++abi-debug-noexcept] + arg [-lsockets] ==> lib [sockets] + arg [-mllvm] ==> ignore + arg [-combiner-global-alias-analysis=false] ==> ignore + arg [-mllvm] ==> ignore + arg [-enable-emscripten-sjlj] ==> ignore + arg [-mllvm] ==> ignore + arg [-disable-lsr] ==> ignore + arg [/tmp/tmp0d70qforlibemscripten_js_symbols.so] ==> ignore + arg [--strip-debug] ==> ignore + arg [--export=emscripten_stack_get_end] ==> ignore + arg [--export=emscripten_stack_get_free] ==> ignore + arg [--export=emscripten_stack_get_base] ==> ignore + arg [--export=emscripten_stack_get_current] ==> ignore + arg [--export=emscripten_stack_init] ==> ignore + arg [--export=_emscripten_stack_alloc] ==> ignore + arg [--export=__wasm_call_ctors] ==> ignore + arg [--export=_emscripten_stack_restore] ==> ignore + arg [--export-if-defined=__start_em_asm] ==> ignore + arg [--export-if-defined=__stop_em_asm] ==> ignore + arg [--export-if-defined=__start_em_lib_deps] ==> ignore + arg [--export-if-defined=__stop_em_lib_deps] ==> ignore + arg [--export-if-defined=__start_em_js] ==> ignore + arg [--export-if-defined=__stop_em_js] ==> ignore + arg [--export-if-defined=main] ==> ignore + arg [--export-if-defined=__main_argc_argv] ==> ignore + arg [--export-if-defined=fflush] ==> ignore + arg [--export-table] ==> ignore + arg [-zstack-size=65536] ==> ignore + arg [--no-growable-memory] ==> ignore + arg [--initial-heap=16777216] ==> ignore + arg [--no-entry] ==> ignore + arg [--stack-first] ==> ignore + arg [--table-base=1] ==> ignore + collapse library dir [/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/cache/sysroot/lib/wasm32-emscripten] ==> [/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/cache/sysroot/lib/wasm32-emscripten] + collapse library dir [/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/src/lib] ==> [/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/src/lib] + implicit libs: [GL-getprocaddr;al;html5;stubs-debug;noexit;c-debug;dlmalloc-debug;compiler_rt;c++-noexcept;c++abi-debug-noexcept;sockets] + implicit objs: [] + implicit dirs: [/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/cache/sysroot/lib/wasm32-emscripten;/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/src/lib] + implicit fwks: [] + + + - + kind: "try_compile-v1" + backtrace: + - "/usr/share/cmake-3.28/Modules/CheckIncludeFiles.cmake:132 (try_compile)" + - "CMakeLists.txt:47 (check_include_files)" + checks: + - "Looking for include file CommonCrypto/CommonCrypto.h" + directories: + source: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-5kuHDw" + binary: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-5kuHDw" + cmakeVariables: + CMAKE_CXX_COMPILER_CLANG_SCAN_DEPS: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/emscan-deps" + CMAKE_C_FLAGS: "" + CMAKE_C_FLAGS_DEBUG: "-g" + CMAKE_EXE_LINKER_FLAGS: "" + CMAKE_MODULE_PATH: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/cproject/thirdparty/libzip-1.11.3/cmake;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules" + buildResult: + variable: "COMMONCRYPTO_FOUND" + cached: true + stdout: | + Change Dir: '/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-5kuHDw' + + Run Build Command(s): /usr/bin/cmake -E env VERBOSE=1 /usr/bin/gmake -f Makefile cmTC_90e2a/fast + /usr/bin/gmake -f CMakeFiles/cmTC_90e2a.dir/build.make CMakeFiles/cmTC_90e2a.dir/build + gmake[1]: вход в каталог «/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-5kuHDw» + Building C object CMakeFiles/cmTC_90e2a.dir/COMMONCRYPTO_FOUND.c.o + "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" -MD -MT CMakeFiles/cmTC_90e2a.dir/COMMONCRYPTO_FOUND.c.o -MF CMakeFiles/cmTC_90e2a.dir/COMMONCRYPTO_FOUND.c.o.d -o CMakeFiles/cmTC_90e2a.dir/COMMONCRYPTO_FOUND.c.o -c "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-5kuHDw/COMMONCRYPTO_FOUND.c" + /home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-5kuHDw/COMMONCRYPTO_FOUND.c:2:10: fatal error: 'CommonCrypto/CommonCrypto.h' file not found + 2 | #include + | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + 1 error generated. + gmake[1]: *** [CMakeFiles/cmTC_90e2a.dir/build.make:79: CMakeFiles/cmTC_90e2a.dir/COMMONCRYPTO_FOUND.c.o] Ошибка 1 + gmake[1]: выход из каталога «/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-5kuHDw» + gmake: *** [Makefile:127: cmTC_90e2a/fast] Ошибка 2 + + exitCode: 2 + - + kind: "try_compile-v1" + backtrace: + - "/usr/share/cmake-3.28/Modules/CheckFunctionExists.cmake:86 (try_compile)" + - "CMakeLists.txt:101 (check_function_exists)" + checks: + - "Looking for _close" + directories: + source: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-IIcX28" + binary: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-IIcX28" + cmakeVariables: + CMAKE_CXX_COMPILER_CLANG_SCAN_DEPS: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/emscan-deps" + CMAKE_C_FLAGS: "" + CMAKE_C_FLAGS_DEBUG: "-g" + CMAKE_EXE_LINKER_FLAGS: "" + CMAKE_MODULE_PATH: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/cproject/thirdparty/libzip-1.11.3/cmake;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules" + buildResult: + variable: "HAVE__CLOSE" + cached: true + stdout: | + Change Dir: '/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-IIcX28' + + Run Build Command(s): /usr/bin/cmake -E env VERBOSE=1 /usr/bin/gmake -f Makefile cmTC_6a8cb/fast + /usr/bin/gmake -f CMakeFiles/cmTC_6a8cb.dir/build.make CMakeFiles/cmTC_6a8cb.dir/build + gmake[1]: вход в каталог «/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-IIcX28» + Building C object CMakeFiles/cmTC_6a8cb.dir/CheckFunctionExists.c.o + "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" -D__STDC_WANT_LIB_EXT1__=1 -DCHECK_FUNCTION_EXISTS=_close -MD -MT CMakeFiles/cmTC_6a8cb.dir/CheckFunctionExists.c.o -MF CMakeFiles/cmTC_6a8cb.dir/CheckFunctionExists.c.o.d -o CMakeFiles/cmTC_6a8cb.dir/CheckFunctionExists.c.o -c "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-IIcX28/CheckFunctionExists.c" + Linking C executable cmTC_6a8cb.js + /usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_6a8cb.dir/link.txt --verbose=1 + "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" -DCHECK_FUNCTION_EXISTS=_close @CMakeFiles/cmTC_6a8cb.dir/objects1.rsp -o cmTC_6a8cb.js + wasm-ld: error: CMakeFiles/cmTC_6a8cb.dir/CheckFunctionExists.c.o: undefined symbol: _close + emcc: error: '"/home/romazan/Рабочий Ñтол/emsdk/upstream/bin/wasm-ld" -o cmTC_6a8cb.wasm CMakeFiles/cmTC_6a8cb.dir/CheckFunctionExists.c.o "-L/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/cache/sysroot/lib/wasm32-emscripten" "-L/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/src/lib" -lGL-getprocaddr -lal -lhtml5 -lstubs-debug -lnoexit -lc-debug -ldlmalloc-debug -lcompiler_rt -lc++-noexcept -lc++abi-debug-noexcept -lsockets -mllvm -combiner-global-alias-analysis=false -mllvm -enable-emscripten-sjlj -mllvm -disable-lsr /tmp/tmpk7f326k9libemscripten_js_symbols.so --strip-debug --export=emscripten_stack_get_end --export=emscripten_stack_get_free --export=emscripten_stack_get_base --export=emscripten_stack_get_current --export=emscripten_stack_init --export=_emscripten_stack_alloc --export=__wasm_call_ctors --export=_emscripten_stack_restore --export-if-defined=__start_em_asm --export-if-defined=__stop_em_asm --export-if-defined=__start_em_lib_deps --export-if-defined=__stop_em_lib_deps --export-if-defined=__start_em_js --export-if-defined=__stop_em_js --export-if-defined=main --export-if-defined=__main_argc_argv --export-if-defined=fflush --export-table -z stack-size=65536 --no-growable-memory --initial-heap=16777216 --no-entry --stack-first --table-base=1' failed (returned 1) + gmake[1]: *** [CMakeFiles/cmTC_6a8cb.dir/build.make:101: cmTC_6a8cb.js] Ошибка 1 + gmake[1]: выход из каталога «/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-IIcX28» + gmake: *** [Makefile:127: cmTC_6a8cb/fast] Ошибка 2 + + exitCode: 2 + - + kind: "try_compile-v1" + backtrace: + - "/usr/share/cmake-3.28/Modules/CheckFunctionExists.cmake:86 (try_compile)" + - "CMakeLists.txt:102 (check_function_exists)" + checks: + - "Looking for _dup" + directories: + source: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-7k65n8" + binary: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-7k65n8" + cmakeVariables: + CMAKE_CXX_COMPILER_CLANG_SCAN_DEPS: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/emscan-deps" + CMAKE_C_FLAGS: "" + CMAKE_C_FLAGS_DEBUG: "-g" + CMAKE_EXE_LINKER_FLAGS: "" + CMAKE_MODULE_PATH: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/cproject/thirdparty/libzip-1.11.3/cmake;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules" + buildResult: + variable: "HAVE__DUP" + cached: true + stdout: | + Change Dir: '/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-7k65n8' + + Run Build Command(s): /usr/bin/cmake -E env VERBOSE=1 /usr/bin/gmake -f Makefile cmTC_671b4/fast + /usr/bin/gmake -f CMakeFiles/cmTC_671b4.dir/build.make CMakeFiles/cmTC_671b4.dir/build + gmake[1]: вход в каталог «/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-7k65n8» + Building C object CMakeFiles/cmTC_671b4.dir/CheckFunctionExists.c.o + "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" -D__STDC_WANT_LIB_EXT1__=1 -DCHECK_FUNCTION_EXISTS=_dup -MD -MT CMakeFiles/cmTC_671b4.dir/CheckFunctionExists.c.o -MF CMakeFiles/cmTC_671b4.dir/CheckFunctionExists.c.o.d -o CMakeFiles/cmTC_671b4.dir/CheckFunctionExists.c.o -c "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-7k65n8/CheckFunctionExists.c" + Linking C executable cmTC_671b4.js + /usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_671b4.dir/link.txt --verbose=1 + "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" -DCHECK_FUNCTION_EXISTS=_dup @CMakeFiles/cmTC_671b4.dir/objects1.rsp -o cmTC_671b4.js + wasm-ld: error: CMakeFiles/cmTC_671b4.dir/CheckFunctionExists.c.o: undefined symbol: _dup + emcc: error: '"/home/romazan/Рабочий Ñтол/emsdk/upstream/bin/wasm-ld" -o cmTC_671b4.wasm CMakeFiles/cmTC_671b4.dir/CheckFunctionExists.c.o "-L/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/cache/sysroot/lib/wasm32-emscripten" "-L/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/src/lib" -lGL-getprocaddr -lal -lhtml5 -lstubs-debug -lnoexit -lc-debug -ldlmalloc-debug -lcompiler_rt -lc++-noexcept -lc++abi-debug-noexcept -lsockets -mllvm -combiner-global-alias-analysis=false -mllvm -enable-emscripten-sjlj -mllvm -disable-lsr /tmp/tmphrt6ork7libemscripten_js_symbols.so --strip-debug --export=emscripten_stack_get_end --export=emscripten_stack_get_free --export=emscripten_stack_get_base --export=emscripten_stack_get_current --export=emscripten_stack_init --export=_emscripten_stack_alloc --export=__wasm_call_ctors --export=_emscripten_stack_restore --export-if-defined=__start_em_asm --export-if-defined=__stop_em_asm --export-if-defined=__start_em_lib_deps --export-if-defined=__stop_em_lib_deps --export-if-defined=__start_em_js --export-if-defined=__stop_em_js --export-if-defined=main --export-if-defined=__main_argc_argv --export-if-defined=fflush --export-table -z stack-size=65536 --no-growable-memory --initial-heap=16777216 --no-entry --stack-first --table-base=1' failed (returned 1) + gmake[1]: *** [CMakeFiles/cmTC_671b4.dir/build.make:101: cmTC_671b4.js] Ошибка 1 + gmake[1]: выход из каталога «/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-7k65n8» + gmake: *** [Makefile:127: cmTC_671b4/fast] Ошибка 2 + + exitCode: 2 + - + kind: "try_compile-v1" + backtrace: + - "/usr/share/cmake-3.28/Modules/CheckFunctionExists.cmake:86 (try_compile)" + - "CMakeLists.txt:103 (check_function_exists)" + checks: + - "Looking for _fdopen" + directories: + source: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-9SKv4h" + binary: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-9SKv4h" + cmakeVariables: + CMAKE_CXX_COMPILER_CLANG_SCAN_DEPS: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/emscan-deps" + CMAKE_C_FLAGS: "" + CMAKE_C_FLAGS_DEBUG: "-g" + CMAKE_EXE_LINKER_FLAGS: "" + CMAKE_MODULE_PATH: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/cproject/thirdparty/libzip-1.11.3/cmake;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules" + buildResult: + variable: "HAVE__FDOPEN" + cached: true + stdout: | + Change Dir: '/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-9SKv4h' + + Run Build Command(s): /usr/bin/cmake -E env VERBOSE=1 /usr/bin/gmake -f Makefile cmTC_13fc1/fast + /usr/bin/gmake -f CMakeFiles/cmTC_13fc1.dir/build.make CMakeFiles/cmTC_13fc1.dir/build + gmake[1]: вход в каталог «/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-9SKv4h» + Building C object CMakeFiles/cmTC_13fc1.dir/CheckFunctionExists.c.o + "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" -D__STDC_WANT_LIB_EXT1__=1 -DCHECK_FUNCTION_EXISTS=_fdopen -MD -MT CMakeFiles/cmTC_13fc1.dir/CheckFunctionExists.c.o -MF CMakeFiles/cmTC_13fc1.dir/CheckFunctionExists.c.o.d -o CMakeFiles/cmTC_13fc1.dir/CheckFunctionExists.c.o -c "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-9SKv4h/CheckFunctionExists.c" + Linking C executable cmTC_13fc1.js + /usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_13fc1.dir/link.txt --verbose=1 + "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" -DCHECK_FUNCTION_EXISTS=_fdopen @CMakeFiles/cmTC_13fc1.dir/objects1.rsp -o cmTC_13fc1.js + wasm-ld: error: CMakeFiles/cmTC_13fc1.dir/CheckFunctionExists.c.o: undefined symbol: _fdopen + emcc: error: '"/home/romazan/Рабочий Ñтол/emsdk/upstream/bin/wasm-ld" -o cmTC_13fc1.wasm CMakeFiles/cmTC_13fc1.dir/CheckFunctionExists.c.o "-L/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/cache/sysroot/lib/wasm32-emscripten" "-L/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/src/lib" -lGL-getprocaddr -lal -lhtml5 -lstubs-debug -lnoexit -lc-debug -ldlmalloc-debug -lcompiler_rt -lc++-noexcept -lc++abi-debug-noexcept -lsockets -mllvm -combiner-global-alias-analysis=false -mllvm -enable-emscripten-sjlj -mllvm -disable-lsr /tmp/tmp1uvj2lgxlibemscripten_js_symbols.so --strip-debug --export=emscripten_stack_get_end --export=emscripten_stack_get_free --export=emscripten_stack_get_base --export=emscripten_stack_get_current --export=emscripten_stack_init --export=_emscripten_stack_alloc --export=__wasm_call_ctors --export=_emscripten_stack_restore --export-if-defined=__start_em_asm --export-if-defined=__stop_em_asm --export-if-defined=__start_em_lib_deps --export-if-defined=__stop_em_lib_deps --export-if-defined=__start_em_js --export-if-defined=__stop_em_js --export-if-defined=main --export-if-defined=__main_argc_argv --export-if-defined=fflush --export-table -z stack-size=65536 --no-growable-memory --initial-heap=16777216 --no-entry --stack-first --table-base=1' failed (returned 1) + gmake[1]: *** [CMakeFiles/cmTC_13fc1.dir/build.make:101: cmTC_13fc1.js] Ошибка 1 + gmake[1]: выход из каталога «/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-9SKv4h» + gmake: *** [Makefile:127: cmTC_13fc1/fast] Ошибка 2 + + exitCode: 2 + - + kind: "try_compile-v1" + backtrace: + - "/usr/share/cmake-3.28/Modules/CheckFunctionExists.cmake:86 (try_compile)" + - "CMakeLists.txt:104 (check_function_exists)" + checks: + - "Looking for _fileno" + directories: + source: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-ZYZpdB" + binary: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-ZYZpdB" + cmakeVariables: + CMAKE_CXX_COMPILER_CLANG_SCAN_DEPS: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/emscan-deps" + CMAKE_C_FLAGS: "" + CMAKE_C_FLAGS_DEBUG: "-g" + CMAKE_EXE_LINKER_FLAGS: "" + CMAKE_MODULE_PATH: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/cproject/thirdparty/libzip-1.11.3/cmake;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules" + buildResult: + variable: "HAVE__FILENO" + cached: true + stdout: | + Change Dir: '/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-ZYZpdB' + + Run Build Command(s): /usr/bin/cmake -E env VERBOSE=1 /usr/bin/gmake -f Makefile cmTC_aead7/fast + /usr/bin/gmake -f CMakeFiles/cmTC_aead7.dir/build.make CMakeFiles/cmTC_aead7.dir/build + gmake[1]: вход в каталог «/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-ZYZpdB» + Building C object CMakeFiles/cmTC_aead7.dir/CheckFunctionExists.c.o + "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" -D__STDC_WANT_LIB_EXT1__=1 -DCHECK_FUNCTION_EXISTS=_fileno -MD -MT CMakeFiles/cmTC_aead7.dir/CheckFunctionExists.c.o -MF CMakeFiles/cmTC_aead7.dir/CheckFunctionExists.c.o.d -o CMakeFiles/cmTC_aead7.dir/CheckFunctionExists.c.o -c "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-ZYZpdB/CheckFunctionExists.c" + Linking C executable cmTC_aead7.js + /usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_aead7.dir/link.txt --verbose=1 + "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" -DCHECK_FUNCTION_EXISTS=_fileno @CMakeFiles/cmTC_aead7.dir/objects1.rsp -o cmTC_aead7.js + wasm-ld: error: CMakeFiles/cmTC_aead7.dir/CheckFunctionExists.c.o: undefined symbol: _fileno + emcc: error: '"/home/romazan/Рабочий Ñтол/emsdk/upstream/bin/wasm-ld" -o cmTC_aead7.wasm CMakeFiles/cmTC_aead7.dir/CheckFunctionExists.c.o "-L/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/cache/sysroot/lib/wasm32-emscripten" "-L/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/src/lib" -lGL-getprocaddr -lal -lhtml5 -lstubs-debug -lnoexit -lc-debug -ldlmalloc-debug -lcompiler_rt -lc++-noexcept -lc++abi-debug-noexcept -lsockets -mllvm -combiner-global-alias-analysis=false -mllvm -enable-emscripten-sjlj -mllvm -disable-lsr /tmp/tmpix0qrse_libemscripten_js_symbols.so --strip-debug --export=emscripten_stack_get_end --export=emscripten_stack_get_free --export=emscripten_stack_get_base --export=emscripten_stack_get_current --export=emscripten_stack_init --export=_emscripten_stack_alloc --export=__wasm_call_ctors --export=_emscripten_stack_restore --export-if-defined=__start_em_asm --export-if-defined=__stop_em_asm --export-if-defined=__start_em_lib_deps --export-if-defined=__stop_em_lib_deps --export-if-defined=__start_em_js --export-if-defined=__stop_em_js --export-if-defined=main --export-if-defined=__main_argc_argv --export-if-defined=fflush --export-table -z stack-size=65536 --no-growable-memory --initial-heap=16777216 --no-entry --stack-first --table-base=1' failed (returned 1) + gmake[1]: *** [CMakeFiles/cmTC_aead7.dir/build.make:101: cmTC_aead7.js] Ошибка 1 + gmake[1]: выход из каталога «/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-ZYZpdB» + gmake: *** [Makefile:127: cmTC_aead7/fast] Ошибка 2 + + exitCode: 2 + - + kind: "try_compile-v1" + backtrace: + - "/usr/share/cmake-3.28/Modules/CheckFunctionExists.cmake:86 (try_compile)" + - "CMakeLists.txt:105 (check_function_exists)" + checks: + - "Looking for _fseeki64" + directories: + source: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-NbmOwX" + binary: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-NbmOwX" + cmakeVariables: + CMAKE_CXX_COMPILER_CLANG_SCAN_DEPS: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/emscan-deps" + CMAKE_C_FLAGS: "" + CMAKE_C_FLAGS_DEBUG: "-g" + CMAKE_EXE_LINKER_FLAGS: "" + CMAKE_MODULE_PATH: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/cproject/thirdparty/libzip-1.11.3/cmake;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules" + buildResult: + variable: "HAVE__FSEEKI64" + cached: true + stdout: | + Change Dir: '/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-NbmOwX' + + Run Build Command(s): /usr/bin/cmake -E env VERBOSE=1 /usr/bin/gmake -f Makefile cmTC_f3c64/fast + /usr/bin/gmake -f CMakeFiles/cmTC_f3c64.dir/build.make CMakeFiles/cmTC_f3c64.dir/build + gmake[1]: вход в каталог «/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-NbmOwX» + Building C object CMakeFiles/cmTC_f3c64.dir/CheckFunctionExists.c.o + "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" -D__STDC_WANT_LIB_EXT1__=1 -DCHECK_FUNCTION_EXISTS=_fseeki64 -MD -MT CMakeFiles/cmTC_f3c64.dir/CheckFunctionExists.c.o -MF CMakeFiles/cmTC_f3c64.dir/CheckFunctionExists.c.o.d -o CMakeFiles/cmTC_f3c64.dir/CheckFunctionExists.c.o -c "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-NbmOwX/CheckFunctionExists.c" + Linking C executable cmTC_f3c64.js + /usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_f3c64.dir/link.txt --verbose=1 + "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" -DCHECK_FUNCTION_EXISTS=_fseeki64 @CMakeFiles/cmTC_f3c64.dir/objects1.rsp -o cmTC_f3c64.js + wasm-ld: error: CMakeFiles/cmTC_f3c64.dir/CheckFunctionExists.c.o: undefined symbol: _fseeki64 + emcc: error: '"/home/romazan/Рабочий Ñтол/emsdk/upstream/bin/wasm-ld" -o cmTC_f3c64.wasm CMakeFiles/cmTC_f3c64.dir/CheckFunctionExists.c.o "-L/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/cache/sysroot/lib/wasm32-emscripten" "-L/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/src/lib" -lGL-getprocaddr -lal -lhtml5 -lstubs-debug -lnoexit -lc-debug -ldlmalloc-debug -lcompiler_rt -lc++-noexcept -lc++abi-debug-noexcept -lsockets -mllvm -combiner-global-alias-analysis=false -mllvm -enable-emscripten-sjlj -mllvm -disable-lsr /tmp/tmpf3w8q8q_libemscripten_js_symbols.so --strip-debug --export=emscripten_stack_get_end --export=emscripten_stack_get_free --export=emscripten_stack_get_base --export=emscripten_stack_get_current --export=emscripten_stack_init --export=_emscripten_stack_alloc --export=__wasm_call_ctors --export=_emscripten_stack_restore --export-if-defined=__start_em_asm --export-if-defined=__stop_em_asm --export-if-defined=__start_em_lib_deps --export-if-defined=__stop_em_lib_deps --export-if-defined=__start_em_js --export-if-defined=__stop_em_js --export-if-defined=main --export-if-defined=__main_argc_argv --export-if-defined=fflush --export-table -z stack-size=65536 --no-growable-memory --initial-heap=16777216 --no-entry --stack-first --table-base=1' failed (returned 1) + gmake[1]: *** [CMakeFiles/cmTC_f3c64.dir/build.make:101: cmTC_f3c64.js] Ошибка 1 + gmake[1]: выход из каталога «/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-NbmOwX» + gmake: *** [Makefile:127: cmTC_f3c64/fast] Ошибка 2 + + exitCode: 2 + - + kind: "try_compile-v1" + backtrace: + - "/usr/share/cmake-3.28/Modules/CheckFunctionExists.cmake:86 (try_compile)" + - "CMakeLists.txt:106 (check_function_exists)" + checks: + - "Looking for _fstat64" + directories: + source: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-eAYCyW" + binary: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-eAYCyW" + cmakeVariables: + CMAKE_CXX_COMPILER_CLANG_SCAN_DEPS: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/emscan-deps" + CMAKE_C_FLAGS: "" + CMAKE_C_FLAGS_DEBUG: "-g" + CMAKE_EXE_LINKER_FLAGS: "" + CMAKE_MODULE_PATH: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/cproject/thirdparty/libzip-1.11.3/cmake;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules" + buildResult: + variable: "HAVE__FSTAT64" + cached: true + stdout: | + Change Dir: '/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-eAYCyW' + + Run Build Command(s): /usr/bin/cmake -E env VERBOSE=1 /usr/bin/gmake -f Makefile cmTC_3f76b/fast + /usr/bin/gmake -f CMakeFiles/cmTC_3f76b.dir/build.make CMakeFiles/cmTC_3f76b.dir/build + gmake[1]: вход в каталог «/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-eAYCyW» + Building C object CMakeFiles/cmTC_3f76b.dir/CheckFunctionExists.c.o + "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" -D__STDC_WANT_LIB_EXT1__=1 -DCHECK_FUNCTION_EXISTS=_fstat64 -MD -MT CMakeFiles/cmTC_3f76b.dir/CheckFunctionExists.c.o -MF CMakeFiles/cmTC_3f76b.dir/CheckFunctionExists.c.o.d -o CMakeFiles/cmTC_3f76b.dir/CheckFunctionExists.c.o -c "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-eAYCyW/CheckFunctionExists.c" + Linking C executable cmTC_3f76b.js + /usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_3f76b.dir/link.txt --verbose=1 + "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" -DCHECK_FUNCTION_EXISTS=_fstat64 @CMakeFiles/cmTC_3f76b.dir/objects1.rsp -o cmTC_3f76b.js + wasm-ld: error: CMakeFiles/cmTC_3f76b.dir/CheckFunctionExists.c.o: undefined symbol: _fstat64 + emcc: error: '"/home/romazan/Рабочий Ñтол/emsdk/upstream/bin/wasm-ld" -o cmTC_3f76b.wasm CMakeFiles/cmTC_3f76b.dir/CheckFunctionExists.c.o "-L/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/cache/sysroot/lib/wasm32-emscripten" "-L/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/src/lib" -lGL-getprocaddr -lal -lhtml5 -lstubs-debug -lnoexit -lc-debug -ldlmalloc-debug -lcompiler_rt -lc++-noexcept -lc++abi-debug-noexcept -lsockets -mllvm -combiner-global-alias-analysis=false -mllvm -enable-emscripten-sjlj -mllvm -disable-lsr /tmp/tmpnsfzktgulibemscripten_js_symbols.so --strip-debug --export=emscripten_stack_get_end --export=emscripten_stack_get_free --export=emscripten_stack_get_base --export=emscripten_stack_get_current --export=emscripten_stack_init --export=_emscripten_stack_alloc --export=__wasm_call_ctors --export=_emscripten_stack_restore --export-if-defined=__start_em_asm --export-if-defined=__stop_em_asm --export-if-defined=__start_em_lib_deps --export-if-defined=__stop_em_lib_deps --export-if-defined=__start_em_js --export-if-defined=__stop_em_js --export-if-defined=main --export-if-defined=__main_argc_argv --export-if-defined=fflush --export-table -z stack-size=65536 --no-growable-memory --initial-heap=16777216 --no-entry --stack-first --table-base=1' failed (returned 1) + gmake[1]: *** [CMakeFiles/cmTC_3f76b.dir/build.make:101: cmTC_3f76b.js] Ошибка 1 + gmake[1]: выход из каталога «/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-eAYCyW» + gmake: *** [Makefile:127: cmTC_3f76b/fast] Ошибка 2 + + exitCode: 2 + - + kind: "try_compile-v1" + backtrace: + - "/usr/share/cmake-3.28/Modules/CheckFunctionExists.cmake:86 (try_compile)" + - "CMakeLists.txt:107 (check_function_exists)" + checks: + - "Looking for _setmode" + directories: + source: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-zr5Hp7" + binary: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-zr5Hp7" + cmakeVariables: + CMAKE_CXX_COMPILER_CLANG_SCAN_DEPS: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/emscan-deps" + CMAKE_C_FLAGS: "" + CMAKE_C_FLAGS_DEBUG: "-g" + CMAKE_EXE_LINKER_FLAGS: "" + CMAKE_MODULE_PATH: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/cproject/thirdparty/libzip-1.11.3/cmake;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules" + buildResult: + variable: "HAVE__SETMODE" + cached: true + stdout: | + Change Dir: '/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-zr5Hp7' + + Run Build Command(s): /usr/bin/cmake -E env VERBOSE=1 /usr/bin/gmake -f Makefile cmTC_7cd20/fast + /usr/bin/gmake -f CMakeFiles/cmTC_7cd20.dir/build.make CMakeFiles/cmTC_7cd20.dir/build + gmake[1]: вход в каталог «/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-zr5Hp7» + Building C object CMakeFiles/cmTC_7cd20.dir/CheckFunctionExists.c.o + "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" -D__STDC_WANT_LIB_EXT1__=1 -DCHECK_FUNCTION_EXISTS=_setmode -MD -MT CMakeFiles/cmTC_7cd20.dir/CheckFunctionExists.c.o -MF CMakeFiles/cmTC_7cd20.dir/CheckFunctionExists.c.o.d -o CMakeFiles/cmTC_7cd20.dir/CheckFunctionExists.c.o -c "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-zr5Hp7/CheckFunctionExists.c" + Linking C executable cmTC_7cd20.js + /usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_7cd20.dir/link.txt --verbose=1 + "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" -DCHECK_FUNCTION_EXISTS=_setmode @CMakeFiles/cmTC_7cd20.dir/objects1.rsp -o cmTC_7cd20.js + wasm-ld: error: CMakeFiles/cmTC_7cd20.dir/CheckFunctionExists.c.o: undefined symbol: _setmode + emcc: error: '"/home/romazan/Рабочий Ñтол/emsdk/upstream/bin/wasm-ld" -o cmTC_7cd20.wasm CMakeFiles/cmTC_7cd20.dir/CheckFunctionExists.c.o "-L/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/cache/sysroot/lib/wasm32-emscripten" "-L/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/src/lib" -lGL-getprocaddr -lal -lhtml5 -lstubs-debug -lnoexit -lc-debug -ldlmalloc-debug -lcompiler_rt -lc++-noexcept -lc++abi-debug-noexcept -lsockets -mllvm -combiner-global-alias-analysis=false -mllvm -enable-emscripten-sjlj -mllvm -disable-lsr /tmp/tmp7iuye7j2libemscripten_js_symbols.so --strip-debug --export=emscripten_stack_get_end --export=emscripten_stack_get_free --export=emscripten_stack_get_base --export=emscripten_stack_get_current --export=emscripten_stack_init --export=_emscripten_stack_alloc --export=__wasm_call_ctors --export=_emscripten_stack_restore --export-if-defined=__start_em_asm --export-if-defined=__stop_em_asm --export-if-defined=__start_em_lib_deps --export-if-defined=__stop_em_lib_deps --export-if-defined=__start_em_js --export-if-defined=__stop_em_js --export-if-defined=main --export-if-defined=__main_argc_argv --export-if-defined=fflush --export-table -z stack-size=65536 --no-growable-memory --initial-heap=16777216 --no-entry --stack-first --table-base=1' failed (returned 1) + gmake[1]: *** [CMakeFiles/cmTC_7cd20.dir/build.make:101: cmTC_7cd20.js] Ошибка 1 + gmake[1]: выход из каталога «/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-zr5Hp7» + gmake: *** [Makefile:127: cmTC_7cd20/fast] Ошибка 2 + + exitCode: 2 + - + kind: "try_compile-v1" + backtrace: + - "/usr/share/cmake-3.28/Modules/CheckFunctionExists.cmake:86 (try_compile)" + - "CMakeLists.txt:108 (check_function_exists)" + checks: + - "Looking for _stat64" + directories: + source: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-uaspt7" + binary: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-uaspt7" + cmakeVariables: + CMAKE_CXX_COMPILER_CLANG_SCAN_DEPS: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/emscan-deps" + CMAKE_C_FLAGS: "" + CMAKE_C_FLAGS_DEBUG: "-g" + CMAKE_EXE_LINKER_FLAGS: "" + CMAKE_MODULE_PATH: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/cproject/thirdparty/libzip-1.11.3/cmake;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules" + buildResult: + variable: "HAVE__STAT64" + cached: true + stdout: | + Change Dir: '/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-uaspt7' + + Run Build Command(s): /usr/bin/cmake -E env VERBOSE=1 /usr/bin/gmake -f Makefile cmTC_1ed91/fast + /usr/bin/gmake -f CMakeFiles/cmTC_1ed91.dir/build.make CMakeFiles/cmTC_1ed91.dir/build + gmake[1]: вход в каталог «/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-uaspt7» + Building C object CMakeFiles/cmTC_1ed91.dir/CheckFunctionExists.c.o + "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" -D__STDC_WANT_LIB_EXT1__=1 -DCHECK_FUNCTION_EXISTS=_stat64 -MD -MT CMakeFiles/cmTC_1ed91.dir/CheckFunctionExists.c.o -MF CMakeFiles/cmTC_1ed91.dir/CheckFunctionExists.c.o.d -o CMakeFiles/cmTC_1ed91.dir/CheckFunctionExists.c.o -c "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-uaspt7/CheckFunctionExists.c" + Linking C executable cmTC_1ed91.js + /usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_1ed91.dir/link.txt --verbose=1 + "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" -DCHECK_FUNCTION_EXISTS=_stat64 @CMakeFiles/cmTC_1ed91.dir/objects1.rsp -o cmTC_1ed91.js + wasm-ld: error: CMakeFiles/cmTC_1ed91.dir/CheckFunctionExists.c.o: undefined symbol: _stat64 + emcc: error: '"/home/romazan/Рабочий Ñтол/emsdk/upstream/bin/wasm-ld" -o cmTC_1ed91.wasm CMakeFiles/cmTC_1ed91.dir/CheckFunctionExists.c.o "-L/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/cache/sysroot/lib/wasm32-emscripten" "-L/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/src/lib" -lGL-getprocaddr -lal -lhtml5 -lstubs-debug -lnoexit -lc-debug -ldlmalloc-debug -lcompiler_rt -lc++-noexcept -lc++abi-debug-noexcept -lsockets -mllvm -combiner-global-alias-analysis=false -mllvm -enable-emscripten-sjlj -mllvm -disable-lsr /tmp/tmp6b3t1euylibemscripten_js_symbols.so --strip-debug --export=emscripten_stack_get_end --export=emscripten_stack_get_free --export=emscripten_stack_get_base --export=emscripten_stack_get_current --export=emscripten_stack_init --export=_emscripten_stack_alloc --export=__wasm_call_ctors --export=_emscripten_stack_restore --export-if-defined=__start_em_asm --export-if-defined=__stop_em_asm --export-if-defined=__start_em_lib_deps --export-if-defined=__stop_em_lib_deps --export-if-defined=__start_em_js --export-if-defined=__stop_em_js --export-if-defined=main --export-if-defined=__main_argc_argv --export-if-defined=fflush --export-table -z stack-size=65536 --no-growable-memory --initial-heap=16777216 --no-entry --stack-first --table-base=1' failed (returned 1) + gmake[1]: *** [CMakeFiles/cmTC_1ed91.dir/build.make:101: cmTC_1ed91.js] Ошибка 1 + gmake[1]: выход из каталога «/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-uaspt7» + gmake: *** [Makefile:127: cmTC_1ed91/fast] Ошибка 2 + + exitCode: 2 + - + kind: "try_compile-v1" + backtrace: + - "/usr/share/cmake-3.28/Modules/CheckSymbolExists.cmake:140 (try_compile)" + - "/usr/share/cmake-3.28/Modules/CheckSymbolExists.cmake:66 (__CHECK_SYMBOL_EXISTS_IMPL)" + - "CMakeLists.txt:109 (check_symbol_exists)" + checks: + - "Looking for _snprintf" + directories: + source: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-t3f4RA" + binary: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-t3f4RA" + cmakeVariables: + CMAKE_CXX_COMPILER_CLANG_SCAN_DEPS: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/emscan-deps" + CMAKE_C_FLAGS: "" + CMAKE_C_FLAGS_DEBUG: "-g" + CMAKE_EXE_LINKER_FLAGS: "" + CMAKE_MODULE_PATH: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/cproject/thirdparty/libzip-1.11.3/cmake;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules" + buildResult: + variable: "HAVE__SNPRINTF" + cached: true + stdout: | + Change Dir: '/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-t3f4RA' + + Run Build Command(s): /usr/bin/cmake -E env VERBOSE=1 /usr/bin/gmake -f Makefile cmTC_fa096/fast + /usr/bin/gmake -f CMakeFiles/cmTC_fa096.dir/build.make CMakeFiles/cmTC_fa096.dir/build + gmake[1]: вход в каталог «/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-t3f4RA» + Building C object CMakeFiles/cmTC_fa096.dir/CheckSymbolExists.c.o + "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" -D__STDC_WANT_LIB_EXT1__=1 -MD -MT CMakeFiles/cmTC_fa096.dir/CheckSymbolExists.c.o -MF CMakeFiles/cmTC_fa096.dir/CheckSymbolExists.c.o.d -o CMakeFiles/cmTC_fa096.dir/CheckSymbolExists.c.o -c "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-t3f4RA/CheckSymbolExists.c" + /home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-t3f4RA/CheckSymbolExists.c:8:19: error: use of undeclared identifier '_snprintf' + 8 | return ((int*)(&_snprintf))[argc]; + | ^ + 1 error generated. + gmake[1]: *** [CMakeFiles/cmTC_fa096.dir/build.make:79: CMakeFiles/cmTC_fa096.dir/CheckSymbolExists.c.o] Ошибка 1 + gmake[1]: выход из каталога «/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-t3f4RA» + gmake: *** [Makefile:127: cmTC_fa096/fast] Ошибка 2 + + exitCode: 2 + - + kind: "try_compile-v1" + backtrace: + - "/usr/share/cmake-3.28/Modules/CheckSymbolExists.cmake:140 (try_compile)" + - "/usr/share/cmake-3.28/Modules/CheckSymbolExists.cmake:66 (__CHECK_SYMBOL_EXISTS_IMPL)" + - "CMakeLists.txt:110 (check_symbol_exists)" + checks: + - "Looking for _snprintf_s" + directories: + source: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-H0eGil" + binary: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-H0eGil" + cmakeVariables: + CMAKE_CXX_COMPILER_CLANG_SCAN_DEPS: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/emscan-deps" + CMAKE_C_FLAGS: "" + CMAKE_C_FLAGS_DEBUG: "-g" + CMAKE_EXE_LINKER_FLAGS: "" + CMAKE_MODULE_PATH: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/cproject/thirdparty/libzip-1.11.3/cmake;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules" + buildResult: + variable: "HAVE__SNPRINTF_S" + cached: true + stdout: | + Change Dir: '/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-H0eGil' + + Run Build Command(s): /usr/bin/cmake -E env VERBOSE=1 /usr/bin/gmake -f Makefile cmTC_9bd51/fast + /usr/bin/gmake -f CMakeFiles/cmTC_9bd51.dir/build.make CMakeFiles/cmTC_9bd51.dir/build + gmake[1]: вход в каталог «/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-H0eGil» + Building C object CMakeFiles/cmTC_9bd51.dir/CheckSymbolExists.c.o + "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" -D__STDC_WANT_LIB_EXT1__=1 -MD -MT CMakeFiles/cmTC_9bd51.dir/CheckSymbolExists.c.o -MF CMakeFiles/cmTC_9bd51.dir/CheckSymbolExists.c.o.d -o CMakeFiles/cmTC_9bd51.dir/CheckSymbolExists.c.o -c "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-H0eGil/CheckSymbolExists.c" + /home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-H0eGil/CheckSymbolExists.c:8:19: error: use of undeclared identifier '_snprintf_s' + 8 | return ((int*)(&_snprintf_s))[argc]; + | ^ + 1 error generated. + gmake[1]: *** [CMakeFiles/cmTC_9bd51.dir/build.make:79: CMakeFiles/cmTC_9bd51.dir/CheckSymbolExists.c.o] Ошибка 1 + gmake[1]: выход из каталога «/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-H0eGil» + gmake: *** [Makefile:127: cmTC_9bd51/fast] Ошибка 2 + + exitCode: 2 + - + kind: "try_compile-v1" + backtrace: + - "/usr/share/cmake-3.28/Modules/CheckSymbolExists.cmake:140 (try_compile)" + - "/usr/share/cmake-3.28/Modules/CheckSymbolExists.cmake:66 (__CHECK_SYMBOL_EXISTS_IMPL)" + - "CMakeLists.txt:111 (check_symbol_exists)" + checks: + - "Looking for _snwprintf_s" + directories: + source: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-KYGPxJ" + binary: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-KYGPxJ" + cmakeVariables: + CMAKE_CXX_COMPILER_CLANG_SCAN_DEPS: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/emscan-deps" + CMAKE_C_FLAGS: "" + CMAKE_C_FLAGS_DEBUG: "-g" + CMAKE_EXE_LINKER_FLAGS: "" + CMAKE_MODULE_PATH: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/cproject/thirdparty/libzip-1.11.3/cmake;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules" + buildResult: + variable: "HAVE__SNWPRINTF_S" + cached: true + stdout: | + Change Dir: '/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-KYGPxJ' + + Run Build Command(s): /usr/bin/cmake -E env VERBOSE=1 /usr/bin/gmake -f Makefile cmTC_86ebf/fast + /usr/bin/gmake -f CMakeFiles/cmTC_86ebf.dir/build.make CMakeFiles/cmTC_86ebf.dir/build + gmake[1]: вход в каталог «/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-KYGPxJ» + Building C object CMakeFiles/cmTC_86ebf.dir/CheckSymbolExists.c.o + "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" -D__STDC_WANT_LIB_EXT1__=1 -MD -MT CMakeFiles/cmTC_86ebf.dir/CheckSymbolExists.c.o -MF CMakeFiles/cmTC_86ebf.dir/CheckSymbolExists.c.o.d -o CMakeFiles/cmTC_86ebf.dir/CheckSymbolExists.c.o -c "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-KYGPxJ/CheckSymbolExists.c" + /home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-KYGPxJ/CheckSymbolExists.c:8:19: error: use of undeclared identifier '_snwprintf_s' + 8 | return ((int*)(&_snwprintf_s))[argc]; + | ^ + 1 error generated. + gmake[1]: *** [CMakeFiles/cmTC_86ebf.dir/build.make:79: CMakeFiles/cmTC_86ebf.dir/CheckSymbolExists.c.o] Ошибка 1 + gmake[1]: выход из каталога «/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-KYGPxJ» + gmake: *** [Makefile:127: cmTC_86ebf/fast] Ошибка 2 + + exitCode: 2 + - + kind: "try_compile-v1" + backtrace: + - "/usr/share/cmake-3.28/Modules/CheckFunctionExists.cmake:86 (try_compile)" + - "CMakeLists.txt:112 (check_function_exists)" + checks: + - "Looking for _strdup" + directories: + source: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-OAMulf" + binary: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-OAMulf" + cmakeVariables: + CMAKE_CXX_COMPILER_CLANG_SCAN_DEPS: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/emscan-deps" + CMAKE_C_FLAGS: "" + CMAKE_C_FLAGS_DEBUG: "-g" + CMAKE_EXE_LINKER_FLAGS: "" + CMAKE_MODULE_PATH: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/cproject/thirdparty/libzip-1.11.3/cmake;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules" + buildResult: + variable: "HAVE__STRDUP" + cached: true + stdout: | + Change Dir: '/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-OAMulf' + + Run Build Command(s): /usr/bin/cmake -E env VERBOSE=1 /usr/bin/gmake -f Makefile cmTC_1c2f2/fast + /usr/bin/gmake -f CMakeFiles/cmTC_1c2f2.dir/build.make CMakeFiles/cmTC_1c2f2.dir/build + gmake[1]: вход в каталог «/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-OAMulf» + Building C object CMakeFiles/cmTC_1c2f2.dir/CheckFunctionExists.c.o + "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" -D__STDC_WANT_LIB_EXT1__=1 -DCHECK_FUNCTION_EXISTS=_strdup -MD -MT CMakeFiles/cmTC_1c2f2.dir/CheckFunctionExists.c.o -MF CMakeFiles/cmTC_1c2f2.dir/CheckFunctionExists.c.o.d -o CMakeFiles/cmTC_1c2f2.dir/CheckFunctionExists.c.o -c "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-OAMulf/CheckFunctionExists.c" + Linking C executable cmTC_1c2f2.js + /usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_1c2f2.dir/link.txt --verbose=1 + "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" -DCHECK_FUNCTION_EXISTS=_strdup @CMakeFiles/cmTC_1c2f2.dir/objects1.rsp -o cmTC_1c2f2.js + wasm-ld: error: CMakeFiles/cmTC_1c2f2.dir/CheckFunctionExists.c.o: undefined symbol: _strdup + emcc: error: '"/home/romazan/Рабочий Ñтол/emsdk/upstream/bin/wasm-ld" -o cmTC_1c2f2.wasm CMakeFiles/cmTC_1c2f2.dir/CheckFunctionExists.c.o "-L/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/cache/sysroot/lib/wasm32-emscripten" "-L/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/src/lib" -lGL-getprocaddr -lal -lhtml5 -lstubs-debug -lnoexit -lc-debug -ldlmalloc-debug -lcompiler_rt -lc++-noexcept -lc++abi-debug-noexcept -lsockets -mllvm -combiner-global-alias-analysis=false -mllvm -enable-emscripten-sjlj -mllvm -disable-lsr /tmp/tmpf9l3dofolibemscripten_js_symbols.so --strip-debug --export=emscripten_stack_get_end --export=emscripten_stack_get_free --export=emscripten_stack_get_base --export=emscripten_stack_get_current --export=emscripten_stack_init --export=_emscripten_stack_alloc --export=__wasm_call_ctors --export=_emscripten_stack_restore --export-if-defined=__start_em_asm --export-if-defined=__stop_em_asm --export-if-defined=__start_em_lib_deps --export-if-defined=__stop_em_lib_deps --export-if-defined=__start_em_js --export-if-defined=__stop_em_js --export-if-defined=main --export-if-defined=__main_argc_argv --export-if-defined=fflush --export-table -z stack-size=65536 --no-growable-memory --initial-heap=16777216 --no-entry --stack-first --table-base=1' failed (returned 1) + gmake[1]: *** [CMakeFiles/cmTC_1c2f2.dir/build.make:101: cmTC_1c2f2.js] Ошибка 1 + gmake[1]: выход из каталога «/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-OAMulf» + gmake: *** [Makefile:127: cmTC_1c2f2/fast] Ошибка 2 + + exitCode: 2 + - + kind: "try_compile-v1" + backtrace: + - "/usr/share/cmake-3.28/Modules/CheckSymbolExists.cmake:140 (try_compile)" + - "/usr/share/cmake-3.28/Modules/CheckSymbolExists.cmake:66 (__CHECK_SYMBOL_EXISTS_IMPL)" + - "CMakeLists.txt:113 (check_symbol_exists)" + checks: + - "Looking for _stricmp" + directories: + source: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-7YahIY" + binary: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-7YahIY" + cmakeVariables: + CMAKE_CXX_COMPILER_CLANG_SCAN_DEPS: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/emscan-deps" + CMAKE_C_FLAGS: "" + CMAKE_C_FLAGS_DEBUG: "-g" + CMAKE_EXE_LINKER_FLAGS: "" + CMAKE_MODULE_PATH: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/cproject/thirdparty/libzip-1.11.3/cmake;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules" + buildResult: + variable: "HAVE__STRICMP" + cached: true + stdout: | + Change Dir: '/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-7YahIY' + + Run Build Command(s): /usr/bin/cmake -E env VERBOSE=1 /usr/bin/gmake -f Makefile cmTC_22c49/fast + /usr/bin/gmake -f CMakeFiles/cmTC_22c49.dir/build.make CMakeFiles/cmTC_22c49.dir/build + gmake[1]: вход в каталог «/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-7YahIY» + Building C object CMakeFiles/cmTC_22c49.dir/CheckSymbolExists.c.o + "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" -D__STDC_WANT_LIB_EXT1__=1 -MD -MT CMakeFiles/cmTC_22c49.dir/CheckSymbolExists.c.o -MF CMakeFiles/cmTC_22c49.dir/CheckSymbolExists.c.o.d -o CMakeFiles/cmTC_22c49.dir/CheckSymbolExists.c.o -c "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-7YahIY/CheckSymbolExists.c" + /home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-7YahIY/CheckSymbolExists.c:8:19: error: use of undeclared identifier '_stricmp' + 8 | return ((int*)(&_stricmp))[argc]; + | ^ + 1 error generated. + gmake[1]: *** [CMakeFiles/cmTC_22c49.dir/build.make:79: CMakeFiles/cmTC_22c49.dir/CheckSymbolExists.c.o] Ошибка 1 + gmake[1]: выход из каталога «/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-7YahIY» + gmake: *** [Makefile:127: cmTC_22c49/fast] Ошибка 2 + + exitCode: 2 + - + kind: "try_compile-v1" + backtrace: + - "/usr/share/cmake-3.28/Modules/CheckFunctionExists.cmake:86 (try_compile)" + - "CMakeLists.txt:114 (check_function_exists)" + checks: + - "Looking for _strtoi64" + directories: + source: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-KUIvrC" + binary: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-KUIvrC" + cmakeVariables: + CMAKE_CXX_COMPILER_CLANG_SCAN_DEPS: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/emscan-deps" + CMAKE_C_FLAGS: "" + CMAKE_C_FLAGS_DEBUG: "-g" + CMAKE_EXE_LINKER_FLAGS: "" + CMAKE_MODULE_PATH: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/cproject/thirdparty/libzip-1.11.3/cmake;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules" + buildResult: + variable: "HAVE__STRTOI64" + cached: true + stdout: | + Change Dir: '/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-KUIvrC' + + Run Build Command(s): /usr/bin/cmake -E env VERBOSE=1 /usr/bin/gmake -f Makefile cmTC_3e273/fast + /usr/bin/gmake -f CMakeFiles/cmTC_3e273.dir/build.make CMakeFiles/cmTC_3e273.dir/build + gmake[1]: вход в каталог «/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-KUIvrC» + Building C object CMakeFiles/cmTC_3e273.dir/CheckFunctionExists.c.o + "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" -D__STDC_WANT_LIB_EXT1__=1 -DCHECK_FUNCTION_EXISTS=_strtoi64 -MD -MT CMakeFiles/cmTC_3e273.dir/CheckFunctionExists.c.o -MF CMakeFiles/cmTC_3e273.dir/CheckFunctionExists.c.o.d -o CMakeFiles/cmTC_3e273.dir/CheckFunctionExists.c.o -c "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-KUIvrC/CheckFunctionExists.c" + Linking C executable cmTC_3e273.js + /usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_3e273.dir/link.txt --verbose=1 + "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" -DCHECK_FUNCTION_EXISTS=_strtoi64 @CMakeFiles/cmTC_3e273.dir/objects1.rsp -o cmTC_3e273.js + wasm-ld: error: CMakeFiles/cmTC_3e273.dir/CheckFunctionExists.c.o: undefined symbol: _strtoi64 + emcc: error: '"/home/romazan/Рабочий Ñтол/emsdk/upstream/bin/wasm-ld" -o cmTC_3e273.wasm CMakeFiles/cmTC_3e273.dir/CheckFunctionExists.c.o "-L/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/cache/sysroot/lib/wasm32-emscripten" "-L/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/src/lib" -lGL-getprocaddr -lal -lhtml5 -lstubs-debug -lnoexit -lc-debug -ldlmalloc-debug -lcompiler_rt -lc++-noexcept -lc++abi-debug-noexcept -lsockets -mllvm -combiner-global-alias-analysis=false -mllvm -enable-emscripten-sjlj -mllvm -disable-lsr /tmp/tmpfgc4vou0libemscripten_js_symbols.so --strip-debug --export=emscripten_stack_get_end --export=emscripten_stack_get_free --export=emscripten_stack_get_base --export=emscripten_stack_get_current --export=emscripten_stack_init --export=_emscripten_stack_alloc --export=__wasm_call_ctors --export=_emscripten_stack_restore --export-if-defined=__start_em_asm --export-if-defined=__stop_em_asm --export-if-defined=__start_em_lib_deps --export-if-defined=__stop_em_lib_deps --export-if-defined=__start_em_js --export-if-defined=__stop_em_js --export-if-defined=main --export-if-defined=__main_argc_argv --export-if-defined=fflush --export-table -z stack-size=65536 --no-growable-memory --initial-heap=16777216 --no-entry --stack-first --table-base=1' failed (returned 1) + gmake[1]: *** [CMakeFiles/cmTC_3e273.dir/build.make:101: cmTC_3e273.js] Ошибка 1 + gmake[1]: выход из каталога «/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-KUIvrC» + gmake: *** [Makefile:127: cmTC_3e273/fast] Ошибка 2 + + exitCode: 2 + - + kind: "try_compile-v1" + backtrace: + - "/usr/share/cmake-3.28/Modules/CheckFunctionExists.cmake:86 (try_compile)" + - "CMakeLists.txt:115 (check_function_exists)" + checks: + - "Looking for _strtoui64" + directories: + source: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-87YCq4" + binary: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-87YCq4" + cmakeVariables: + CMAKE_CXX_COMPILER_CLANG_SCAN_DEPS: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/emscan-deps" + CMAKE_C_FLAGS: "" + CMAKE_C_FLAGS_DEBUG: "-g" + CMAKE_EXE_LINKER_FLAGS: "" + CMAKE_MODULE_PATH: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/cproject/thirdparty/libzip-1.11.3/cmake;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules" + buildResult: + variable: "HAVE__STRTOUI64" + cached: true + stdout: | + Change Dir: '/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-87YCq4' + + Run Build Command(s): /usr/bin/cmake -E env VERBOSE=1 /usr/bin/gmake -f Makefile cmTC_dccc4/fast + /usr/bin/gmake -f CMakeFiles/cmTC_dccc4.dir/build.make CMakeFiles/cmTC_dccc4.dir/build + gmake[1]: вход в каталог «/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-87YCq4» + Building C object CMakeFiles/cmTC_dccc4.dir/CheckFunctionExists.c.o + "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" -D__STDC_WANT_LIB_EXT1__=1 -DCHECK_FUNCTION_EXISTS=_strtoui64 -MD -MT CMakeFiles/cmTC_dccc4.dir/CheckFunctionExists.c.o -MF CMakeFiles/cmTC_dccc4.dir/CheckFunctionExists.c.o.d -o CMakeFiles/cmTC_dccc4.dir/CheckFunctionExists.c.o -c "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-87YCq4/CheckFunctionExists.c" + Linking C executable cmTC_dccc4.js + /usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_dccc4.dir/link.txt --verbose=1 + "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" -DCHECK_FUNCTION_EXISTS=_strtoui64 @CMakeFiles/cmTC_dccc4.dir/objects1.rsp -o cmTC_dccc4.js + wasm-ld: error: CMakeFiles/cmTC_dccc4.dir/CheckFunctionExists.c.o: undefined symbol: _strtoui64 + emcc: error: '"/home/romazan/Рабочий Ñтол/emsdk/upstream/bin/wasm-ld" -o cmTC_dccc4.wasm CMakeFiles/cmTC_dccc4.dir/CheckFunctionExists.c.o "-L/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/cache/sysroot/lib/wasm32-emscripten" "-L/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/src/lib" -lGL-getprocaddr -lal -lhtml5 -lstubs-debug -lnoexit -lc-debug -ldlmalloc-debug -lcompiler_rt -lc++-noexcept -lc++abi-debug-noexcept -lsockets -mllvm -combiner-global-alias-analysis=false -mllvm -enable-emscripten-sjlj -mllvm -disable-lsr /tmp/tmpw0lcjt0ilibemscripten_js_symbols.so --strip-debug --export=emscripten_stack_get_end --export=emscripten_stack_get_free --export=emscripten_stack_get_base --export=emscripten_stack_get_current --export=emscripten_stack_init --export=_emscripten_stack_alloc --export=__wasm_call_ctors --export=_emscripten_stack_restore --export-if-defined=__start_em_asm --export-if-defined=__stop_em_asm --export-if-defined=__start_em_lib_deps --export-if-defined=__stop_em_lib_deps --export-if-defined=__start_em_js --export-if-defined=__stop_em_js --export-if-defined=main --export-if-defined=__main_argc_argv --export-if-defined=fflush --export-table -z stack-size=65536 --no-growable-memory --initial-heap=16777216 --no-entry --stack-first --table-base=1' failed (returned 1) + gmake[1]: *** [CMakeFiles/cmTC_dccc4.dir/build.make:101: cmTC_dccc4.js] Ошибка 1 + gmake[1]: выход из каталога «/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-87YCq4» + gmake: *** [Makefile:127: cmTC_dccc4/fast] Ошибка 2 + + exitCode: 2 + - + kind: "try_compile-v1" + backtrace: + - "/usr/share/cmake-3.28/Modules/CheckFunctionExists.cmake:86 (try_compile)" + - "CMakeLists.txt:116 (check_function_exists)" + checks: + - "Looking for _unlink" + directories: + source: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-HoJWlH" + binary: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-HoJWlH" + cmakeVariables: + CMAKE_CXX_COMPILER_CLANG_SCAN_DEPS: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/emscan-deps" + CMAKE_C_FLAGS: "" + CMAKE_C_FLAGS_DEBUG: "-g" + CMAKE_EXE_LINKER_FLAGS: "" + CMAKE_MODULE_PATH: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/cproject/thirdparty/libzip-1.11.3/cmake;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules" + buildResult: + variable: "HAVE__UNLINK" + cached: true + stdout: | + Change Dir: '/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-HoJWlH' + + Run Build Command(s): /usr/bin/cmake -E env VERBOSE=1 /usr/bin/gmake -f Makefile cmTC_6ded9/fast + /usr/bin/gmake -f CMakeFiles/cmTC_6ded9.dir/build.make CMakeFiles/cmTC_6ded9.dir/build + gmake[1]: вход в каталог «/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-HoJWlH» + Building C object CMakeFiles/cmTC_6ded9.dir/CheckFunctionExists.c.o + "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" -D__STDC_WANT_LIB_EXT1__=1 -DCHECK_FUNCTION_EXISTS=_unlink -MD -MT CMakeFiles/cmTC_6ded9.dir/CheckFunctionExists.c.o -MF CMakeFiles/cmTC_6ded9.dir/CheckFunctionExists.c.o.d -o CMakeFiles/cmTC_6ded9.dir/CheckFunctionExists.c.o -c "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-HoJWlH/CheckFunctionExists.c" + Linking C executable cmTC_6ded9.js + /usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_6ded9.dir/link.txt --verbose=1 + "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" -DCHECK_FUNCTION_EXISTS=_unlink @CMakeFiles/cmTC_6ded9.dir/objects1.rsp -o cmTC_6ded9.js + wasm-ld: error: CMakeFiles/cmTC_6ded9.dir/CheckFunctionExists.c.o: undefined symbol: _unlink + emcc: error: '"/home/romazan/Рабочий Ñтол/emsdk/upstream/bin/wasm-ld" -o cmTC_6ded9.wasm CMakeFiles/cmTC_6ded9.dir/CheckFunctionExists.c.o "-L/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/cache/sysroot/lib/wasm32-emscripten" "-L/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/src/lib" -lGL-getprocaddr -lal -lhtml5 -lstubs-debug -lnoexit -lc-debug -ldlmalloc-debug -lcompiler_rt -lc++-noexcept -lc++abi-debug-noexcept -lsockets -mllvm -combiner-global-alias-analysis=false -mllvm -enable-emscripten-sjlj -mllvm -disable-lsr /tmp/tmpd74l0nbjlibemscripten_js_symbols.so --strip-debug --export=emscripten_stack_get_end --export=emscripten_stack_get_free --export=emscripten_stack_get_base --export=emscripten_stack_get_current --export=emscripten_stack_init --export=_emscripten_stack_alloc --export=__wasm_call_ctors --export=_emscripten_stack_restore --export-if-defined=__start_em_asm --export-if-defined=__stop_em_asm --export-if-defined=__start_em_lib_deps --export-if-defined=__stop_em_lib_deps --export-if-defined=__start_em_js --export-if-defined=__stop_em_js --export-if-defined=main --export-if-defined=__main_argc_argv --export-if-defined=fflush --export-table -z stack-size=65536 --no-growable-memory --initial-heap=16777216 --no-entry --stack-first --table-base=1' failed (returned 1) + gmake[1]: *** [CMakeFiles/cmTC_6ded9.dir/build.make:101: cmTC_6ded9.js] Ошибка 1 + gmake[1]: выход из каталога «/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-HoJWlH» + gmake: *** [Makefile:127: cmTC_6ded9/fast] Ошибка 2 + + exitCode: 2 + - + kind: "try_compile-v1" + backtrace: + - "/usr/share/cmake-3.28/Modules/CheckFunctionExists.cmake:86 (try_compile)" + - "CMakeLists.txt:117 (check_function_exists)" + checks: + - "Looking for arc4random" + directories: + source: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-01CLon" + binary: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-01CLon" + cmakeVariables: + CMAKE_CXX_COMPILER_CLANG_SCAN_DEPS: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/emscan-deps" + CMAKE_C_FLAGS: "" + CMAKE_C_FLAGS_DEBUG: "-g" + CMAKE_EXE_LINKER_FLAGS: "" + CMAKE_MODULE_PATH: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/cproject/thirdparty/libzip-1.11.3/cmake;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules" + buildResult: + variable: "HAVE_ARC4RANDOM" + cached: true + stdout: | + Change Dir: '/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-01CLon' + + Run Build Command(s): /usr/bin/cmake -E env VERBOSE=1 /usr/bin/gmake -f Makefile cmTC_77506/fast + /usr/bin/gmake -f CMakeFiles/cmTC_77506.dir/build.make CMakeFiles/cmTC_77506.dir/build + gmake[1]: вход в каталог «/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-01CLon» + Building C object CMakeFiles/cmTC_77506.dir/CheckFunctionExists.c.o + "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" -D__STDC_WANT_LIB_EXT1__=1 -DCHECK_FUNCTION_EXISTS=arc4random -MD -MT CMakeFiles/cmTC_77506.dir/CheckFunctionExists.c.o -MF CMakeFiles/cmTC_77506.dir/CheckFunctionExists.c.o.d -o CMakeFiles/cmTC_77506.dir/CheckFunctionExists.c.o -c "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-01CLon/CheckFunctionExists.c" + Linking C executable cmTC_77506.js + /usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_77506.dir/link.txt --verbose=1 + "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" -DCHECK_FUNCTION_EXISTS=arc4random @CMakeFiles/cmTC_77506.dir/objects1.rsp -o cmTC_77506.js + wasm-ld: error: CMakeFiles/cmTC_77506.dir/CheckFunctionExists.c.o: undefined symbol: arc4random + emcc: error: '"/home/romazan/Рабочий Ñтол/emsdk/upstream/bin/wasm-ld" -o cmTC_77506.wasm CMakeFiles/cmTC_77506.dir/CheckFunctionExists.c.o "-L/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/cache/sysroot/lib/wasm32-emscripten" "-L/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/src/lib" -lGL-getprocaddr -lal -lhtml5 -lstubs-debug -lnoexit -lc-debug -ldlmalloc-debug -lcompiler_rt -lc++-noexcept -lc++abi-debug-noexcept -lsockets -mllvm -combiner-global-alias-analysis=false -mllvm -enable-emscripten-sjlj -mllvm -disable-lsr /tmp/tmp23y4ff0llibemscripten_js_symbols.so --strip-debug --export=emscripten_stack_get_end --export=emscripten_stack_get_free --export=emscripten_stack_get_base --export=emscripten_stack_get_current --export=emscripten_stack_init --export=_emscripten_stack_alloc --export=__wasm_call_ctors --export=_emscripten_stack_restore --export-if-defined=__start_em_asm --export-if-defined=__stop_em_asm --export-if-defined=__start_em_lib_deps --export-if-defined=__stop_em_lib_deps --export-if-defined=__start_em_js --export-if-defined=__stop_em_js --export-if-defined=main --export-if-defined=__main_argc_argv --export-if-defined=fflush --export-table -z stack-size=65536 --no-growable-memory --initial-heap=16777216 --no-entry --stack-first --table-base=1' failed (returned 1) + gmake[1]: *** [CMakeFiles/cmTC_77506.dir/build.make:101: cmTC_77506.js] Ошибка 1 + gmake[1]: выход из каталога «/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-01CLon» + gmake: *** [Makefile:127: cmTC_77506/fast] Ошибка 2 + + exitCode: 2 + - + kind: "try_compile-v1" + backtrace: + - "/usr/share/cmake-3.28/Modules/CheckFunctionExists.cmake:86 (try_compile)" + - "CMakeLists.txt:118 (check_function_exists)" + checks: + - "Looking for clonefile" + directories: + source: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-6bd1sC" + binary: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-6bd1sC" + cmakeVariables: + CMAKE_CXX_COMPILER_CLANG_SCAN_DEPS: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/emscan-deps" + CMAKE_C_FLAGS: "" + CMAKE_C_FLAGS_DEBUG: "-g" + CMAKE_EXE_LINKER_FLAGS: "" + CMAKE_MODULE_PATH: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/cproject/thirdparty/libzip-1.11.3/cmake;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules" + buildResult: + variable: "HAVE_CLONEFILE" + cached: true + stdout: | + Change Dir: '/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-6bd1sC' + + Run Build Command(s): /usr/bin/cmake -E env VERBOSE=1 /usr/bin/gmake -f Makefile cmTC_4ac66/fast + /usr/bin/gmake -f CMakeFiles/cmTC_4ac66.dir/build.make CMakeFiles/cmTC_4ac66.dir/build + gmake[1]: вход в каталог «/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-6bd1sC» + Building C object CMakeFiles/cmTC_4ac66.dir/CheckFunctionExists.c.o + "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" -D__STDC_WANT_LIB_EXT1__=1 -DCHECK_FUNCTION_EXISTS=clonefile -MD -MT CMakeFiles/cmTC_4ac66.dir/CheckFunctionExists.c.o -MF CMakeFiles/cmTC_4ac66.dir/CheckFunctionExists.c.o.d -o CMakeFiles/cmTC_4ac66.dir/CheckFunctionExists.c.o -c "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-6bd1sC/CheckFunctionExists.c" + Linking C executable cmTC_4ac66.js + /usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_4ac66.dir/link.txt --verbose=1 + "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" -DCHECK_FUNCTION_EXISTS=clonefile @CMakeFiles/cmTC_4ac66.dir/objects1.rsp -o cmTC_4ac66.js + wasm-ld: error: CMakeFiles/cmTC_4ac66.dir/CheckFunctionExists.c.o: undefined symbol: clonefile + emcc: error: '"/home/romazan/Рабочий Ñтол/emsdk/upstream/bin/wasm-ld" -o cmTC_4ac66.wasm CMakeFiles/cmTC_4ac66.dir/CheckFunctionExists.c.o "-L/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/cache/sysroot/lib/wasm32-emscripten" "-L/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/src/lib" -lGL-getprocaddr -lal -lhtml5 -lstubs-debug -lnoexit -lc-debug -ldlmalloc-debug -lcompiler_rt -lc++-noexcept -lc++abi-debug-noexcept -lsockets -mllvm -combiner-global-alias-analysis=false -mllvm -enable-emscripten-sjlj -mllvm -disable-lsr /tmp/tmp0blgrmq_libemscripten_js_symbols.so --strip-debug --export=emscripten_stack_get_end --export=emscripten_stack_get_free --export=emscripten_stack_get_base --export=emscripten_stack_get_current --export=emscripten_stack_init --export=_emscripten_stack_alloc --export=__wasm_call_ctors --export=_emscripten_stack_restore --export-if-defined=__start_em_asm --export-if-defined=__stop_em_asm --export-if-defined=__start_em_lib_deps --export-if-defined=__stop_em_lib_deps --export-if-defined=__start_em_js --export-if-defined=__stop_em_js --export-if-defined=main --export-if-defined=__main_argc_argv --export-if-defined=fflush --export-table -z stack-size=65536 --no-growable-memory --initial-heap=16777216 --no-entry --stack-first --table-base=1' failed (returned 1) + gmake[1]: *** [CMakeFiles/cmTC_4ac66.dir/build.make:101: cmTC_4ac66.js] Ошибка 1 + gmake[1]: выход из каталога «/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-6bd1sC» + gmake: *** [Makefile:127: cmTC_4ac66/fast] Ошибка 2 + + exitCode: 2 + - + kind: "try_compile-v1" + backtrace: + - "/usr/share/cmake-3.28/Modules/CheckFunctionExists.cmake:86 (try_compile)" + - "CMakeLists.txt:119 (check_function_exists)" + checks: + - "Looking for explicit_bzero" + directories: + source: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-ZKHMsS" + binary: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-ZKHMsS" + cmakeVariables: + CMAKE_CXX_COMPILER_CLANG_SCAN_DEPS: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/emscan-deps" + CMAKE_C_FLAGS: "" + CMAKE_C_FLAGS_DEBUG: "-g" + CMAKE_EXE_LINKER_FLAGS: "" + CMAKE_MODULE_PATH: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/cproject/thirdparty/libzip-1.11.3/cmake;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules" + buildResult: + variable: "HAVE_EXPLICIT_BZERO" + cached: true + stdout: | + Change Dir: '/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-ZKHMsS' + + Run Build Command(s): /usr/bin/cmake -E env VERBOSE=1 /usr/bin/gmake -f Makefile cmTC_95d77/fast + /usr/bin/gmake -f CMakeFiles/cmTC_95d77.dir/build.make CMakeFiles/cmTC_95d77.dir/build + gmake[1]: вход в каталог «/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-ZKHMsS» + Building C object CMakeFiles/cmTC_95d77.dir/CheckFunctionExists.c.o + "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" -D__STDC_WANT_LIB_EXT1__=1 -DCHECK_FUNCTION_EXISTS=explicit_bzero -MD -MT CMakeFiles/cmTC_95d77.dir/CheckFunctionExists.c.o -MF CMakeFiles/cmTC_95d77.dir/CheckFunctionExists.c.o.d -o CMakeFiles/cmTC_95d77.dir/CheckFunctionExists.c.o -c "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-ZKHMsS/CheckFunctionExists.c" + Linking C executable cmTC_95d77.js + /usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_95d77.dir/link.txt --verbose=1 + "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" -DCHECK_FUNCTION_EXISTS=explicit_bzero @CMakeFiles/cmTC_95d77.dir/objects1.rsp -o cmTC_95d77.js + wasm-ld: warning: function signature mismatch: explicit_bzero + >>> defined as () -> i32 in CMakeFiles/cmTC_95d77.dir/CheckFunctionExists.c.o + >>> defined as (i32, i32) -> void in /home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/cache/sysroot/lib/wasm32-emscripten/libc-debug.a(explicit_bzero.o) + gmake[1]: выход из каталога «/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-ZKHMsS» + + exitCode: 0 + - + kind: "try_compile-v1" + backtrace: + - "/usr/share/cmake-3.28/Modules/CheckFunctionExists.cmake:86 (try_compile)" + - "CMakeLists.txt:120 (check_function_exists)" + checks: + - "Looking for explicit_memset" + directories: + source: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-yY89KG" + binary: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-yY89KG" + cmakeVariables: + CMAKE_CXX_COMPILER_CLANG_SCAN_DEPS: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/emscan-deps" + CMAKE_C_FLAGS: "" + CMAKE_C_FLAGS_DEBUG: "-g" + CMAKE_EXE_LINKER_FLAGS: "" + CMAKE_MODULE_PATH: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/cproject/thirdparty/libzip-1.11.3/cmake;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules" + buildResult: + variable: "HAVE_EXPLICIT_MEMSET" + cached: true + stdout: | + Change Dir: '/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-yY89KG' + + Run Build Command(s): /usr/bin/cmake -E env VERBOSE=1 /usr/bin/gmake -f Makefile cmTC_d9903/fast + /usr/bin/gmake -f CMakeFiles/cmTC_d9903.dir/build.make CMakeFiles/cmTC_d9903.dir/build + gmake[1]: вход в каталог «/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-yY89KG» + Building C object CMakeFiles/cmTC_d9903.dir/CheckFunctionExists.c.o + "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" -D__STDC_WANT_LIB_EXT1__=1 -DCHECK_FUNCTION_EXISTS=explicit_memset -MD -MT CMakeFiles/cmTC_d9903.dir/CheckFunctionExists.c.o -MF CMakeFiles/cmTC_d9903.dir/CheckFunctionExists.c.o.d -o CMakeFiles/cmTC_d9903.dir/CheckFunctionExists.c.o -c "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-yY89KG/CheckFunctionExists.c" + Linking C executable cmTC_d9903.js + /usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_d9903.dir/link.txt --verbose=1 + "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" -DCHECK_FUNCTION_EXISTS=explicit_memset @CMakeFiles/cmTC_d9903.dir/objects1.rsp -o cmTC_d9903.js + wasm-ld: error: CMakeFiles/cmTC_d9903.dir/CheckFunctionExists.c.o: undefined symbol: explicit_memset + emcc: error: '"/home/romazan/Рабочий Ñтол/emsdk/upstream/bin/wasm-ld" -o cmTC_d9903.wasm CMakeFiles/cmTC_d9903.dir/CheckFunctionExists.c.o "-L/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/cache/sysroot/lib/wasm32-emscripten" "-L/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/src/lib" -lGL-getprocaddr -lal -lhtml5 -lstubs-debug -lnoexit -lc-debug -ldlmalloc-debug -lcompiler_rt -lc++-noexcept -lc++abi-debug-noexcept -lsockets -mllvm -combiner-global-alias-analysis=false -mllvm -enable-emscripten-sjlj -mllvm -disable-lsr /tmp/tmp58yl2hlclibemscripten_js_symbols.so --strip-debug --export=emscripten_stack_get_end --export=emscripten_stack_get_free --export=emscripten_stack_get_base --export=emscripten_stack_get_current --export=emscripten_stack_init --export=_emscripten_stack_alloc --export=__wasm_call_ctors --export=_emscripten_stack_restore --export-if-defined=__start_em_asm --export-if-defined=__stop_em_asm --export-if-defined=__start_em_lib_deps --export-if-defined=__stop_em_lib_deps --export-if-defined=__start_em_js --export-if-defined=__stop_em_js --export-if-defined=main --export-if-defined=__main_argc_argv --export-if-defined=fflush --export-table -z stack-size=65536 --no-growable-memory --initial-heap=16777216 --no-entry --stack-first --table-base=1' failed (returned 1) + gmake[1]: *** [CMakeFiles/cmTC_d9903.dir/build.make:101: cmTC_d9903.js] Ошибка 1 + gmake[1]: выход из каталога «/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-yY89KG» + gmake: *** [Makefile:127: cmTC_d9903/fast] Ошибка 2 + + exitCode: 2 + - + kind: "try_compile-v1" + backtrace: + - "/usr/share/cmake-3.28/Modules/CheckFunctionExists.cmake:86 (try_compile)" + - "CMakeLists.txt:121 (check_function_exists)" + checks: + - "Looking for fchmod" + directories: + source: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-HarISf" + binary: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-HarISf" + cmakeVariables: + CMAKE_CXX_COMPILER_CLANG_SCAN_DEPS: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/emscan-deps" + CMAKE_C_FLAGS: "" + CMAKE_C_FLAGS_DEBUG: "-g" + CMAKE_EXE_LINKER_FLAGS: "" + CMAKE_MODULE_PATH: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/cproject/thirdparty/libzip-1.11.3/cmake;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules" + buildResult: + variable: "HAVE_FCHMOD" + cached: true + stdout: | + Change Dir: '/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-HarISf' + + Run Build Command(s): /usr/bin/cmake -E env VERBOSE=1 /usr/bin/gmake -f Makefile cmTC_557c5/fast + /usr/bin/gmake -f CMakeFiles/cmTC_557c5.dir/build.make CMakeFiles/cmTC_557c5.dir/build + gmake[1]: вход в каталог «/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-HarISf» + Building C object CMakeFiles/cmTC_557c5.dir/CheckFunctionExists.c.o + "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" -D__STDC_WANT_LIB_EXT1__=1 -DCHECK_FUNCTION_EXISTS=fchmod -MD -MT CMakeFiles/cmTC_557c5.dir/CheckFunctionExists.c.o -MF CMakeFiles/cmTC_557c5.dir/CheckFunctionExists.c.o.d -o CMakeFiles/cmTC_557c5.dir/CheckFunctionExists.c.o -c "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-HarISf/CheckFunctionExists.c" + Linking C executable cmTC_557c5.js + /usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_557c5.dir/link.txt --verbose=1 + "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" -DCHECK_FUNCTION_EXISTS=fchmod @CMakeFiles/cmTC_557c5.dir/objects1.rsp -o cmTC_557c5.js + wasm-ld: warning: function signature mismatch: fchmod + >>> defined as () -> i32 in CMakeFiles/cmTC_557c5.dir/CheckFunctionExists.c.o + >>> defined as (i32, i32) -> i32 in /home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/cache/sysroot/lib/wasm32-emscripten/libc-debug.a(fchmod.o) + gmake[1]: выход из каталога «/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-HarISf» + + exitCode: 0 + - + kind: "try_compile-v1" + backtrace: + - "/usr/share/cmake-3.28/Modules/CheckFunctionExists.cmake:86 (try_compile)" + - "CMakeLists.txt:122 (check_function_exists)" + checks: + - "Looking for fileno" + directories: + source: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-ThZUKa" + binary: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-ThZUKa" + cmakeVariables: + CMAKE_CXX_COMPILER_CLANG_SCAN_DEPS: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/emscan-deps" + CMAKE_C_FLAGS: "" + CMAKE_C_FLAGS_DEBUG: "-g" + CMAKE_EXE_LINKER_FLAGS: "" + CMAKE_MODULE_PATH: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/cproject/thirdparty/libzip-1.11.3/cmake;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules" + buildResult: + variable: "HAVE_FILENO" + cached: true + stdout: | + Change Dir: '/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-ThZUKa' + + Run Build Command(s): /usr/bin/cmake -E env VERBOSE=1 /usr/bin/gmake -f Makefile cmTC_892c4/fast + /usr/bin/gmake -f CMakeFiles/cmTC_892c4.dir/build.make CMakeFiles/cmTC_892c4.dir/build + gmake[1]: вход в каталог «/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-ThZUKa» + Building C object CMakeFiles/cmTC_892c4.dir/CheckFunctionExists.c.o + "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" -D__STDC_WANT_LIB_EXT1__=1 -DCHECK_FUNCTION_EXISTS=fileno -MD -MT CMakeFiles/cmTC_892c4.dir/CheckFunctionExists.c.o -MF CMakeFiles/cmTC_892c4.dir/CheckFunctionExists.c.o.d -o CMakeFiles/cmTC_892c4.dir/CheckFunctionExists.c.o -c "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-ThZUKa/CheckFunctionExists.c" + Linking C executable cmTC_892c4.js + /usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_892c4.dir/link.txt --verbose=1 + "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" -DCHECK_FUNCTION_EXISTS=fileno @CMakeFiles/cmTC_892c4.dir/objects1.rsp -o cmTC_892c4.js + wasm-ld: warning: function signature mismatch: fileno + >>> defined as () -> i32 in CMakeFiles/cmTC_892c4.dir/CheckFunctionExists.c.o + >>> defined as (i32) -> i32 in /home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/cache/sysroot/lib/wasm32-emscripten/libc-debug.a(fileno.o) + gmake[1]: выход из каталога «/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-ThZUKa» + + exitCode: 0 + - + kind: "try_compile-v1" + backtrace: + - "/usr/share/cmake-3.28/Modules/CheckFunctionExists.cmake:86 (try_compile)" + - "CMakeLists.txt:123 (check_function_exists)" + checks: + - "Looking for fseeko" + directories: + source: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-s3bz6P" + binary: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-s3bz6P" + cmakeVariables: + CMAKE_CXX_COMPILER_CLANG_SCAN_DEPS: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/emscan-deps" + CMAKE_C_FLAGS: "" + CMAKE_C_FLAGS_DEBUG: "-g" + CMAKE_EXE_LINKER_FLAGS: "" + CMAKE_MODULE_PATH: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/cproject/thirdparty/libzip-1.11.3/cmake;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules" + buildResult: + variable: "HAVE_FSEEKO" + cached: true + stdout: | + Change Dir: '/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-s3bz6P' + + Run Build Command(s): /usr/bin/cmake -E env VERBOSE=1 /usr/bin/gmake -f Makefile cmTC_0ad28/fast + /usr/bin/gmake -f CMakeFiles/cmTC_0ad28.dir/build.make CMakeFiles/cmTC_0ad28.dir/build + gmake[1]: вход в каталог «/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-s3bz6P» + Building C object CMakeFiles/cmTC_0ad28.dir/CheckFunctionExists.c.o + "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" -D__STDC_WANT_LIB_EXT1__=1 -DCHECK_FUNCTION_EXISTS=fseeko -MD -MT CMakeFiles/cmTC_0ad28.dir/CheckFunctionExists.c.o -MF CMakeFiles/cmTC_0ad28.dir/CheckFunctionExists.c.o.d -o CMakeFiles/cmTC_0ad28.dir/CheckFunctionExists.c.o -c "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-s3bz6P/CheckFunctionExists.c" + Linking C executable cmTC_0ad28.js + /usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_0ad28.dir/link.txt --verbose=1 + "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" -DCHECK_FUNCTION_EXISTS=fseeko @CMakeFiles/cmTC_0ad28.dir/objects1.rsp -o cmTC_0ad28.js + wasm-ld: warning: function signature mismatch: fseeko + >>> defined as () -> i32 in CMakeFiles/cmTC_0ad28.dir/CheckFunctionExists.c.o + >>> defined as (i32, i64, i32) -> i32 in /home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/cache/sysroot/lib/wasm32-emscripten/libc-debug.a(fseek.o) + gmake[1]: выход из каталога «/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-s3bz6P» + + exitCode: 0 + - + kind: "try_compile-v1" + backtrace: + - "/usr/share/cmake-3.28/Modules/CheckFunctionExists.cmake:86 (try_compile)" + - "CMakeLists.txt:124 (check_function_exists)" + checks: + - "Looking for ftello" + directories: + source: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-CRFZdJ" + binary: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-CRFZdJ" + cmakeVariables: + CMAKE_CXX_COMPILER_CLANG_SCAN_DEPS: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/emscan-deps" + CMAKE_C_FLAGS: "" + CMAKE_C_FLAGS_DEBUG: "-g" + CMAKE_EXE_LINKER_FLAGS: "" + CMAKE_MODULE_PATH: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/cproject/thirdparty/libzip-1.11.3/cmake;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules" + buildResult: + variable: "HAVE_FTELLO" + cached: true + stdout: | + Change Dir: '/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-CRFZdJ' + + Run Build Command(s): /usr/bin/cmake -E env VERBOSE=1 /usr/bin/gmake -f Makefile cmTC_a26f1/fast + /usr/bin/gmake -f CMakeFiles/cmTC_a26f1.dir/build.make CMakeFiles/cmTC_a26f1.dir/build + gmake[1]: вход в каталог «/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-CRFZdJ» + Building C object CMakeFiles/cmTC_a26f1.dir/CheckFunctionExists.c.o + "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" -D__STDC_WANT_LIB_EXT1__=1 -DCHECK_FUNCTION_EXISTS=ftello -MD -MT CMakeFiles/cmTC_a26f1.dir/CheckFunctionExists.c.o -MF CMakeFiles/cmTC_a26f1.dir/CheckFunctionExists.c.o.d -o CMakeFiles/cmTC_a26f1.dir/CheckFunctionExists.c.o -c "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-CRFZdJ/CheckFunctionExists.c" + Linking C executable cmTC_a26f1.js + /usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_a26f1.dir/link.txt --verbose=1 + "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" -DCHECK_FUNCTION_EXISTS=ftello @CMakeFiles/cmTC_a26f1.dir/objects1.rsp -o cmTC_a26f1.js + wasm-ld: warning: function signature mismatch: ftello + >>> defined as () -> i32 in CMakeFiles/cmTC_a26f1.dir/CheckFunctionExists.c.o + >>> defined as (i32) -> i64 in /home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/cache/sysroot/lib/wasm32-emscripten/libc-debug.a(ftell.o) + gmake[1]: выход из каталога «/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-CRFZdJ» + + exitCode: 0 + - + kind: "try_compile-v1" + backtrace: + - "/usr/share/cmake-3.28/Modules/CheckFunctionExists.cmake:86 (try_compile)" + - "CMakeLists.txt:125 (check_function_exists)" + checks: + - "Looking for getprogname" + directories: + source: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-Acm089" + binary: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-Acm089" + cmakeVariables: + CMAKE_CXX_COMPILER_CLANG_SCAN_DEPS: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/emscan-deps" + CMAKE_C_FLAGS: "" + CMAKE_C_FLAGS_DEBUG: "-g" + CMAKE_EXE_LINKER_FLAGS: "" + CMAKE_MODULE_PATH: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/cproject/thirdparty/libzip-1.11.3/cmake;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules" + buildResult: + variable: "HAVE_GETPROGNAME" + cached: true + stdout: | + Change Dir: '/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-Acm089' + + Run Build Command(s): /usr/bin/cmake -E env VERBOSE=1 /usr/bin/gmake -f Makefile cmTC_bca76/fast + /usr/bin/gmake -f CMakeFiles/cmTC_bca76.dir/build.make CMakeFiles/cmTC_bca76.dir/build + gmake[1]: вход в каталог «/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-Acm089» + Building C object CMakeFiles/cmTC_bca76.dir/CheckFunctionExists.c.o + "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" -D__STDC_WANT_LIB_EXT1__=1 -DCHECK_FUNCTION_EXISTS=getprogname -MD -MT CMakeFiles/cmTC_bca76.dir/CheckFunctionExists.c.o -MF CMakeFiles/cmTC_bca76.dir/CheckFunctionExists.c.o.d -o CMakeFiles/cmTC_bca76.dir/CheckFunctionExists.c.o -c "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-Acm089/CheckFunctionExists.c" + Linking C executable cmTC_bca76.js + /usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_bca76.dir/link.txt --verbose=1 + "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" -DCHECK_FUNCTION_EXISTS=getprogname @CMakeFiles/cmTC_bca76.dir/objects1.rsp -o cmTC_bca76.js + wasm-ld: error: CMakeFiles/cmTC_bca76.dir/CheckFunctionExists.c.o: undefined symbol: getprogname + emcc: error: '"/home/romazan/Рабочий Ñтол/emsdk/upstream/bin/wasm-ld" -o cmTC_bca76.wasm CMakeFiles/cmTC_bca76.dir/CheckFunctionExists.c.o "-L/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/cache/sysroot/lib/wasm32-emscripten" "-L/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/src/lib" -lGL-getprocaddr -lal -lhtml5 -lstubs-debug -lnoexit -lc-debug -ldlmalloc-debug -lcompiler_rt -lc++-noexcept -lc++abi-debug-noexcept -lsockets -mllvm -combiner-global-alias-analysis=false -mllvm -enable-emscripten-sjlj -mllvm -disable-lsr /tmp/tmpx5iuwsdalibemscripten_js_symbols.so --strip-debug --export=emscripten_stack_get_end --export=emscripten_stack_get_free --export=emscripten_stack_get_base --export=emscripten_stack_get_current --export=emscripten_stack_init --export=_emscripten_stack_alloc --export=__wasm_call_ctors --export=_emscripten_stack_restore --export-if-defined=__start_em_asm --export-if-defined=__stop_em_asm --export-if-defined=__start_em_lib_deps --export-if-defined=__stop_em_lib_deps --export-if-defined=__start_em_js --export-if-defined=__stop_em_js --export-if-defined=main --export-if-defined=__main_argc_argv --export-if-defined=fflush --export-table -z stack-size=65536 --no-growable-memory --initial-heap=16777216 --no-entry --stack-first --table-base=1' failed (returned 1) + gmake[1]: *** [CMakeFiles/cmTC_bca76.dir/build.make:101: cmTC_bca76.js] Ошибка 1 + gmake[1]: выход из каталога «/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-Acm089» + gmake: *** [Makefile:127: cmTC_bca76/fast] Ошибка 2 + + exitCode: 2 + - + kind: "try_compile-v1" + backtrace: + - "/usr/share/cmake-3.28/Modules/CheckFunctionExists.cmake:86 (try_compile)" + - "CMakeLists.txt:126 (check_function_exists)" + checks: + - "Looking for GetSecurityInfo" + directories: + source: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-b8C5E9" + binary: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-b8C5E9" + cmakeVariables: + CMAKE_CXX_COMPILER_CLANG_SCAN_DEPS: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/emscan-deps" + CMAKE_C_FLAGS: "" + CMAKE_C_FLAGS_DEBUG: "-g" + CMAKE_EXE_LINKER_FLAGS: "" + CMAKE_MODULE_PATH: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/cproject/thirdparty/libzip-1.11.3/cmake;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules" + buildResult: + variable: "HAVE_GETSECURITYINFO" + cached: true + stdout: | + Change Dir: '/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-b8C5E9' + + Run Build Command(s): /usr/bin/cmake -E env VERBOSE=1 /usr/bin/gmake -f Makefile cmTC_72f16/fast + /usr/bin/gmake -f CMakeFiles/cmTC_72f16.dir/build.make CMakeFiles/cmTC_72f16.dir/build + gmake[1]: вход в каталог «/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-b8C5E9» + Building C object CMakeFiles/cmTC_72f16.dir/CheckFunctionExists.c.o + "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" -D__STDC_WANT_LIB_EXT1__=1 -DCHECK_FUNCTION_EXISTS=GetSecurityInfo -MD -MT CMakeFiles/cmTC_72f16.dir/CheckFunctionExists.c.o -MF CMakeFiles/cmTC_72f16.dir/CheckFunctionExists.c.o.d -o CMakeFiles/cmTC_72f16.dir/CheckFunctionExists.c.o -c "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-b8C5E9/CheckFunctionExists.c" + Linking C executable cmTC_72f16.js + /usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_72f16.dir/link.txt --verbose=1 + "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" -DCHECK_FUNCTION_EXISTS=GetSecurityInfo @CMakeFiles/cmTC_72f16.dir/objects1.rsp -o cmTC_72f16.js + wasm-ld: error: CMakeFiles/cmTC_72f16.dir/CheckFunctionExists.c.o: undefined symbol: GetSecurityInfo + emcc: error: '"/home/romazan/Рабочий Ñтол/emsdk/upstream/bin/wasm-ld" -o cmTC_72f16.wasm CMakeFiles/cmTC_72f16.dir/CheckFunctionExists.c.o "-L/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/cache/sysroot/lib/wasm32-emscripten" "-L/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/src/lib" -lGL-getprocaddr -lal -lhtml5 -lstubs-debug -lnoexit -lc-debug -ldlmalloc-debug -lcompiler_rt -lc++-noexcept -lc++abi-debug-noexcept -lsockets -mllvm -combiner-global-alias-analysis=false -mllvm -enable-emscripten-sjlj -mllvm -disable-lsr /tmp/tmps6rkv_awlibemscripten_js_symbols.so --strip-debug --export=emscripten_stack_get_end --export=emscripten_stack_get_free --export=emscripten_stack_get_base --export=emscripten_stack_get_current --export=emscripten_stack_init --export=_emscripten_stack_alloc --export=__wasm_call_ctors --export=_emscripten_stack_restore --export-if-defined=__start_em_asm --export-if-defined=__stop_em_asm --export-if-defined=__start_em_lib_deps --export-if-defined=__stop_em_lib_deps --export-if-defined=__start_em_js --export-if-defined=__stop_em_js --export-if-defined=main --export-if-defined=__main_argc_argv --export-if-defined=fflush --export-table -z stack-size=65536 --no-growable-memory --initial-heap=16777216 --no-entry --stack-first --table-base=1' failed (returned 1) + gmake[1]: *** [CMakeFiles/cmTC_72f16.dir/build.make:101: cmTC_72f16.js] Ошибка 1 + gmake[1]: выход из каталога «/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-b8C5E9» + gmake: *** [Makefile:127: cmTC_72f16/fast] Ошибка 2 + + exitCode: 2 + - + kind: "try_compile-v1" + backtrace: + - "/usr/share/cmake-3.28/Modules/CheckSymbolExists.cmake:140 (try_compile)" + - "/usr/share/cmake-3.28/Modules/CheckSymbolExists.cmake:66 (__CHECK_SYMBOL_EXISTS_IMPL)" + - "CMakeLists.txt:127 (check_symbol_exists)" + checks: + - "Looking for localtime_r" + directories: + source: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-c4VH6h" + binary: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-c4VH6h" + cmakeVariables: + CMAKE_CXX_COMPILER_CLANG_SCAN_DEPS: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/emscan-deps" + CMAKE_C_FLAGS: "" + CMAKE_C_FLAGS_DEBUG: "-g" + CMAKE_EXE_LINKER_FLAGS: "" + CMAKE_MODULE_PATH: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/cproject/thirdparty/libzip-1.11.3/cmake;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules" + buildResult: + variable: "HAVE_LOCALTIME_R" + cached: true + stdout: | + Change Dir: '/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-c4VH6h' + + Run Build Command(s): /usr/bin/cmake -E env VERBOSE=1 /usr/bin/gmake -f Makefile cmTC_06441/fast + /usr/bin/gmake -f CMakeFiles/cmTC_06441.dir/build.make CMakeFiles/cmTC_06441.dir/build + gmake[1]: вход в каталог «/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-c4VH6h» + Building C object CMakeFiles/cmTC_06441.dir/CheckSymbolExists.c.o + "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" -D__STDC_WANT_LIB_EXT1__=1 -MD -MT CMakeFiles/cmTC_06441.dir/CheckSymbolExists.c.o -MF CMakeFiles/cmTC_06441.dir/CheckSymbolExists.c.o.d -o CMakeFiles/cmTC_06441.dir/CheckSymbolExists.c.o -c "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-c4VH6h/CheckSymbolExists.c" + Linking C executable cmTC_06441.js + /usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_06441.dir/link.txt --verbose=1 + "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" @CMakeFiles/cmTC_06441.dir/objects1.rsp -o cmTC_06441.js + gmake[1]: выход из каталога «/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-c4VH6h» + + exitCode: 0 + - + kind: "try_compile-v1" + backtrace: + - "/usr/share/cmake-3.28/Modules/CheckSymbolExists.cmake:140 (try_compile)" + - "/usr/share/cmake-3.28/Modules/CheckSymbolExists.cmake:66 (__CHECK_SYMBOL_EXISTS_IMPL)" + - "CMakeLists.txt:128 (check_symbol_exists)" + checks: + - "Looking for localtime_s" + directories: + source: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-wleEdB" + binary: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-wleEdB" + cmakeVariables: + CMAKE_CXX_COMPILER_CLANG_SCAN_DEPS: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/emscan-deps" + CMAKE_C_FLAGS: "" + CMAKE_C_FLAGS_DEBUG: "-g" + CMAKE_EXE_LINKER_FLAGS: "" + CMAKE_MODULE_PATH: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/cproject/thirdparty/libzip-1.11.3/cmake;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules" + buildResult: + variable: "HAVE_LOCALTIME_S" + cached: true + stdout: | + Change Dir: '/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-wleEdB' + + Run Build Command(s): /usr/bin/cmake -E env VERBOSE=1 /usr/bin/gmake -f Makefile cmTC_b956f/fast + /usr/bin/gmake -f CMakeFiles/cmTC_b956f.dir/build.make CMakeFiles/cmTC_b956f.dir/build + gmake[1]: вход в каталог «/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-wleEdB» + Building C object CMakeFiles/cmTC_b956f.dir/CheckSymbolExists.c.o + "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" -D__STDC_WANT_LIB_EXT1__=1 -MD -MT CMakeFiles/cmTC_b956f.dir/CheckSymbolExists.c.o -MF CMakeFiles/cmTC_b956f.dir/CheckSymbolExists.c.o.d -o CMakeFiles/cmTC_b956f.dir/CheckSymbolExists.c.o -c "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-wleEdB/CheckSymbolExists.c" + /home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-wleEdB/CheckSymbolExists.c:8:19: error: use of undeclared identifier 'localtime_s'; did you mean 'localtime_r'? + 8 | return ((int*)(&localtime_s))[argc]; + | ^~~~~~~~~~~ + | localtime_r + /home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/time.h:76:12: note: 'localtime_r' declared here + 76 | struct tm *localtime_r (const time_t *__restrict, struct tm *__restrict); + | ^ + 1 error generated. + gmake[1]: *** [CMakeFiles/cmTC_b956f.dir/build.make:79: CMakeFiles/cmTC_b956f.dir/CheckSymbolExists.c.o] Ошибка 1 + gmake[1]: выход из каталога «/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-wleEdB» + gmake: *** [Makefile:127: cmTC_b956f/fast] Ошибка 2 + + exitCode: 2 + - + kind: "try_compile-v1" + backtrace: + - "/usr/share/cmake-3.28/Modules/CheckFunctionExists.cmake:86 (try_compile)" + - "CMakeLists.txt:129 (check_function_exists)" + checks: + - "Looking for memcpy_s" + directories: + source: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-xFJ5uy" + binary: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-xFJ5uy" + cmakeVariables: + CMAKE_CXX_COMPILER_CLANG_SCAN_DEPS: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/emscan-deps" + CMAKE_C_FLAGS: "" + CMAKE_C_FLAGS_DEBUG: "-g" + CMAKE_EXE_LINKER_FLAGS: "" + CMAKE_MODULE_PATH: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/cproject/thirdparty/libzip-1.11.3/cmake;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules" + buildResult: + variable: "HAVE_MEMCPY_S" + cached: true + stdout: | + Change Dir: '/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-xFJ5uy' + + Run Build Command(s): /usr/bin/cmake -E env VERBOSE=1 /usr/bin/gmake -f Makefile cmTC_97120/fast + /usr/bin/gmake -f CMakeFiles/cmTC_97120.dir/build.make CMakeFiles/cmTC_97120.dir/build + gmake[1]: вход в каталог «/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-xFJ5uy» + Building C object CMakeFiles/cmTC_97120.dir/CheckFunctionExists.c.o + "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" -D__STDC_WANT_LIB_EXT1__=1 -DCHECK_FUNCTION_EXISTS=memcpy_s -MD -MT CMakeFiles/cmTC_97120.dir/CheckFunctionExists.c.o -MF CMakeFiles/cmTC_97120.dir/CheckFunctionExists.c.o.d -o CMakeFiles/cmTC_97120.dir/CheckFunctionExists.c.o -c "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-xFJ5uy/CheckFunctionExists.c" + Linking C executable cmTC_97120.js + /usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_97120.dir/link.txt --verbose=1 + "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" -DCHECK_FUNCTION_EXISTS=memcpy_s @CMakeFiles/cmTC_97120.dir/objects1.rsp -o cmTC_97120.js + wasm-ld: error: CMakeFiles/cmTC_97120.dir/CheckFunctionExists.c.o: undefined symbol: memcpy_s + emcc: error: '"/home/romazan/Рабочий Ñтол/emsdk/upstream/bin/wasm-ld" -o cmTC_97120.wasm CMakeFiles/cmTC_97120.dir/CheckFunctionExists.c.o "-L/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/cache/sysroot/lib/wasm32-emscripten" "-L/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/src/lib" -lGL-getprocaddr -lal -lhtml5 -lstubs-debug -lnoexit -lc-debug -ldlmalloc-debug -lcompiler_rt -lc++-noexcept -lc++abi-debug-noexcept -lsockets -mllvm -combiner-global-alias-analysis=false -mllvm -enable-emscripten-sjlj -mllvm -disable-lsr /tmp/tmpsvyp1ydylibemscripten_js_symbols.so --strip-debug --export=emscripten_stack_get_end --export=emscripten_stack_get_free --export=emscripten_stack_get_base --export=emscripten_stack_get_current --export=emscripten_stack_init --export=_emscripten_stack_alloc --export=__wasm_call_ctors --export=_emscripten_stack_restore --export-if-defined=__start_em_asm --export-if-defined=__stop_em_asm --export-if-defined=__start_em_lib_deps --export-if-defined=__stop_em_lib_deps --export-if-defined=__start_em_js --export-if-defined=__stop_em_js --export-if-defined=main --export-if-defined=__main_argc_argv --export-if-defined=fflush --export-table -z stack-size=65536 --no-growable-memory --initial-heap=16777216 --no-entry --stack-first --table-base=1' failed (returned 1) + gmake[1]: *** [CMakeFiles/cmTC_97120.dir/build.make:101: cmTC_97120.js] Ошибка 1 + gmake[1]: выход из каталога «/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-xFJ5uy» + gmake: *** [Makefile:127: cmTC_97120/fast] Ошибка 2 + + exitCode: 2 + - + kind: "try_compile-v1" + backtrace: + - "/usr/share/cmake-3.28/Modules/CheckFunctionExists.cmake:86 (try_compile)" + - "CMakeLists.txt:130 (check_function_exists)" + checks: + - "Looking for random" + directories: + source: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-gi5P92" + binary: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-gi5P92" + cmakeVariables: + CMAKE_CXX_COMPILER_CLANG_SCAN_DEPS: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/emscan-deps" + CMAKE_C_FLAGS: "" + CMAKE_C_FLAGS_DEBUG: "-g" + CMAKE_EXE_LINKER_FLAGS: "" + CMAKE_MODULE_PATH: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/cproject/thirdparty/libzip-1.11.3/cmake;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules" + buildResult: + variable: "HAVE_RANDOM" + cached: true + stdout: | + Change Dir: '/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-gi5P92' + + Run Build Command(s): /usr/bin/cmake -E env VERBOSE=1 /usr/bin/gmake -f Makefile cmTC_da325/fast + /usr/bin/gmake -f CMakeFiles/cmTC_da325.dir/build.make CMakeFiles/cmTC_da325.dir/build + gmake[1]: вход в каталог «/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-gi5P92» + Building C object CMakeFiles/cmTC_da325.dir/CheckFunctionExists.c.o + "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" -D__STDC_WANT_LIB_EXT1__=1 -DCHECK_FUNCTION_EXISTS=random -MD -MT CMakeFiles/cmTC_da325.dir/CheckFunctionExists.c.o -MF CMakeFiles/cmTC_da325.dir/CheckFunctionExists.c.o.d -o CMakeFiles/cmTC_da325.dir/CheckFunctionExists.c.o -c "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-gi5P92/CheckFunctionExists.c" + Linking C executable cmTC_da325.js + /usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_da325.dir/link.txt --verbose=1 + "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" -DCHECK_FUNCTION_EXISTS=random @CMakeFiles/cmTC_da325.dir/objects1.rsp -o cmTC_da325.js + gmake[1]: выход из каталога «/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-gi5P92» + + exitCode: 0 + - + kind: "try_compile-v1" + backtrace: + - "/usr/share/cmake-3.28/Modules/CheckFunctionExists.cmake:86 (try_compile)" + - "CMakeLists.txt:131 (check_function_exists)" + checks: + - "Looking for setmode" + directories: + source: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-EYghVJ" + binary: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-EYghVJ" + cmakeVariables: + CMAKE_CXX_COMPILER_CLANG_SCAN_DEPS: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/emscan-deps" + CMAKE_C_FLAGS: "" + CMAKE_C_FLAGS_DEBUG: "-g" + CMAKE_EXE_LINKER_FLAGS: "" + CMAKE_MODULE_PATH: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/cproject/thirdparty/libzip-1.11.3/cmake;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules" + buildResult: + variable: "HAVE_SETMODE" + cached: true + stdout: | + Change Dir: '/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-EYghVJ' + + Run Build Command(s): /usr/bin/cmake -E env VERBOSE=1 /usr/bin/gmake -f Makefile cmTC_17a08/fast + /usr/bin/gmake -f CMakeFiles/cmTC_17a08.dir/build.make CMakeFiles/cmTC_17a08.dir/build + gmake[1]: вход в каталог «/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-EYghVJ» + Building C object CMakeFiles/cmTC_17a08.dir/CheckFunctionExists.c.o + "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" -D__STDC_WANT_LIB_EXT1__=1 -DCHECK_FUNCTION_EXISTS=setmode -MD -MT CMakeFiles/cmTC_17a08.dir/CheckFunctionExists.c.o -MF CMakeFiles/cmTC_17a08.dir/CheckFunctionExists.c.o.d -o CMakeFiles/cmTC_17a08.dir/CheckFunctionExists.c.o -c "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-EYghVJ/CheckFunctionExists.c" + Linking C executable cmTC_17a08.js + /usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_17a08.dir/link.txt --verbose=1 + "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" -DCHECK_FUNCTION_EXISTS=setmode @CMakeFiles/cmTC_17a08.dir/objects1.rsp -o cmTC_17a08.js + wasm-ld: error: CMakeFiles/cmTC_17a08.dir/CheckFunctionExists.c.o: undefined symbol: setmode + emcc: error: '"/home/romazan/Рабочий Ñтол/emsdk/upstream/bin/wasm-ld" -o cmTC_17a08.wasm CMakeFiles/cmTC_17a08.dir/CheckFunctionExists.c.o "-L/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/cache/sysroot/lib/wasm32-emscripten" "-L/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/src/lib" -lGL-getprocaddr -lal -lhtml5 -lstubs-debug -lnoexit -lc-debug -ldlmalloc-debug -lcompiler_rt -lc++-noexcept -lc++abi-debug-noexcept -lsockets -mllvm -combiner-global-alias-analysis=false -mllvm -enable-emscripten-sjlj -mllvm -disable-lsr /tmp/tmpxmc9y9sblibemscripten_js_symbols.so --strip-debug --export=emscripten_stack_get_end --export=emscripten_stack_get_free --export=emscripten_stack_get_base --export=emscripten_stack_get_current --export=emscripten_stack_init --export=_emscripten_stack_alloc --export=__wasm_call_ctors --export=_emscripten_stack_restore --export-if-defined=__start_em_asm --export-if-defined=__stop_em_asm --export-if-defined=__start_em_lib_deps --export-if-defined=__stop_em_lib_deps --export-if-defined=__start_em_js --export-if-defined=__stop_em_js --export-if-defined=main --export-if-defined=__main_argc_argv --export-if-defined=fflush --export-table -z stack-size=65536 --no-growable-memory --initial-heap=16777216 --no-entry --stack-first --table-base=1' failed (returned 1) + gmake[1]: *** [CMakeFiles/cmTC_17a08.dir/build.make:101: cmTC_17a08.js] Ошибка 1 + gmake[1]: выход из каталога «/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-EYghVJ» + gmake: *** [Makefile:127: cmTC_17a08/fast] Ошибка 2 + + exitCode: 2 + - + kind: "try_compile-v1" + backtrace: + - "/usr/share/cmake-3.28/Modules/CheckSymbolExists.cmake:140 (try_compile)" + - "/usr/share/cmake-3.28/Modules/CheckSymbolExists.cmake:66 (__CHECK_SYMBOL_EXISTS_IMPL)" + - "CMakeLists.txt:132 (check_symbol_exists)" + checks: + - "Looking for snprintf" + directories: + source: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-InlniA" + binary: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-InlniA" + cmakeVariables: + CMAKE_CXX_COMPILER_CLANG_SCAN_DEPS: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/emscan-deps" + CMAKE_C_FLAGS: "" + CMAKE_C_FLAGS_DEBUG: "-g" + CMAKE_EXE_LINKER_FLAGS: "" + CMAKE_MODULE_PATH: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/cproject/thirdparty/libzip-1.11.3/cmake;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules" + buildResult: + variable: "HAVE_SNPRINTF" + cached: true + stdout: | + Change Dir: '/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-InlniA' + + Run Build Command(s): /usr/bin/cmake -E env VERBOSE=1 /usr/bin/gmake -f Makefile cmTC_d59fc/fast + /usr/bin/gmake -f CMakeFiles/cmTC_d59fc.dir/build.make CMakeFiles/cmTC_d59fc.dir/build + gmake[1]: вход в каталог «/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-InlniA» + Building C object CMakeFiles/cmTC_d59fc.dir/CheckSymbolExists.c.o + "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" -D__STDC_WANT_LIB_EXT1__=1 -MD -MT CMakeFiles/cmTC_d59fc.dir/CheckSymbolExists.c.o -MF CMakeFiles/cmTC_d59fc.dir/CheckSymbolExists.c.o.d -o CMakeFiles/cmTC_d59fc.dir/CheckSymbolExists.c.o -c "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-InlniA/CheckSymbolExists.c" + Linking C executable cmTC_d59fc.js + /usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_d59fc.dir/link.txt --verbose=1 + "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" @CMakeFiles/cmTC_d59fc.dir/objects1.rsp -o cmTC_d59fc.js + gmake[1]: выход из каталога «/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-InlniA» + + exitCode: 0 + - + kind: "try_compile-v1" + backtrace: + - "/usr/share/cmake-3.28/Modules/CheckSymbolExists.cmake:140 (try_compile)" + - "/usr/share/cmake-3.28/Modules/CheckSymbolExists.cmake:66 (__CHECK_SYMBOL_EXISTS_IMPL)" + - "CMakeLists.txt:133 (check_symbol_exists)" + checks: + - "Looking for snprintf_s" + directories: + source: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-njF5zg" + binary: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-njF5zg" + cmakeVariables: + CMAKE_CXX_COMPILER_CLANG_SCAN_DEPS: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/emscan-deps" + CMAKE_C_FLAGS: "" + CMAKE_C_FLAGS_DEBUG: "-g" + CMAKE_EXE_LINKER_FLAGS: "" + CMAKE_MODULE_PATH: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/cproject/thirdparty/libzip-1.11.3/cmake;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules" + buildResult: + variable: "HAVE_SNPRINTF_S" + cached: true + stdout: | + Change Dir: '/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-njF5zg' + + Run Build Command(s): /usr/bin/cmake -E env VERBOSE=1 /usr/bin/gmake -f Makefile cmTC_57041/fast + /usr/bin/gmake -f CMakeFiles/cmTC_57041.dir/build.make CMakeFiles/cmTC_57041.dir/build + gmake[1]: вход в каталог «/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-njF5zg» + Building C object CMakeFiles/cmTC_57041.dir/CheckSymbolExists.c.o + "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" -D__STDC_WANT_LIB_EXT1__=1 -MD -MT CMakeFiles/cmTC_57041.dir/CheckSymbolExists.c.o -MF CMakeFiles/cmTC_57041.dir/CheckSymbolExists.c.o.d -o CMakeFiles/cmTC_57041.dir/CheckSymbolExists.c.o -c "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-njF5zg/CheckSymbolExists.c" + /home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-njF5zg/CheckSymbolExists.c:8:19: error: use of undeclared identifier 'snprintf_s'; did you mean 'snprintf'? + 8 | return ((int*)(&snprintf_s))[argc]; + | ^~~~~~~~~~ + | snprintf + /home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdio.h:122:5: note: 'snprintf' declared here + 122 | int snprintf(char *__restrict, size_t, const char *__restrict, ...); + | ^ + 1 error generated. + gmake[1]: *** [CMakeFiles/cmTC_57041.dir/build.make:79: CMakeFiles/cmTC_57041.dir/CheckSymbolExists.c.o] Ошибка 1 + gmake[1]: выход из каталога «/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-njF5zg» + gmake: *** [Makefile:127: cmTC_57041/fast] Ошибка 2 + + exitCode: 2 + - + kind: "try_compile-v1" + backtrace: + - "/usr/share/cmake-3.28/Modules/CheckSymbolExists.cmake:140 (try_compile)" + - "/usr/share/cmake-3.28/Modules/CheckSymbolExists.cmake:66 (__CHECK_SYMBOL_EXISTS_IMPL)" + - "CMakeLists.txt:134 (check_symbol_exists)" + checks: + - "Looking for strcasecmp" + directories: + source: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-4lt0Mo" + binary: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-4lt0Mo" + cmakeVariables: + CMAKE_CXX_COMPILER_CLANG_SCAN_DEPS: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/emscan-deps" + CMAKE_C_FLAGS: "" + CMAKE_C_FLAGS_DEBUG: "-g" + CMAKE_EXE_LINKER_FLAGS: "" + CMAKE_MODULE_PATH: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/cproject/thirdparty/libzip-1.11.3/cmake;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules" + buildResult: + variable: "HAVE_STRCASECMP" + cached: true + stdout: | + Change Dir: '/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-4lt0Mo' + + Run Build Command(s): /usr/bin/cmake -E env VERBOSE=1 /usr/bin/gmake -f Makefile cmTC_ea2a0/fast + /usr/bin/gmake -f CMakeFiles/cmTC_ea2a0.dir/build.make CMakeFiles/cmTC_ea2a0.dir/build + gmake[1]: вход в каталог «/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-4lt0Mo» + Building C object CMakeFiles/cmTC_ea2a0.dir/CheckSymbolExists.c.o + "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" -D__STDC_WANT_LIB_EXT1__=1 -MD -MT CMakeFiles/cmTC_ea2a0.dir/CheckSymbolExists.c.o -MF CMakeFiles/cmTC_ea2a0.dir/CheckSymbolExists.c.o.d -o CMakeFiles/cmTC_ea2a0.dir/CheckSymbolExists.c.o -c "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-4lt0Mo/CheckSymbolExists.c" + Linking C executable cmTC_ea2a0.js + /usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_ea2a0.dir/link.txt --verbose=1 + "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" @CMakeFiles/cmTC_ea2a0.dir/objects1.rsp -o cmTC_ea2a0.js + gmake[1]: выход из каталога «/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-4lt0Mo» + + exitCode: 0 + - + kind: "try_compile-v1" + backtrace: + - "/usr/share/cmake-3.28/Modules/CheckFunctionExists.cmake:86 (try_compile)" + - "CMakeLists.txt:135 (check_function_exists)" + checks: + - "Looking for strdup" + directories: + source: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-qE7h5M" + binary: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-qE7h5M" + cmakeVariables: + CMAKE_CXX_COMPILER_CLANG_SCAN_DEPS: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/emscan-deps" + CMAKE_C_FLAGS: "" + CMAKE_C_FLAGS_DEBUG: "-g" + CMAKE_EXE_LINKER_FLAGS: "" + CMAKE_MODULE_PATH: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/cproject/thirdparty/libzip-1.11.3/cmake;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules" + buildResult: + variable: "HAVE_STRDUP" + cached: true + stdout: | + Change Dir: '/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-qE7h5M' + + Run Build Command(s): /usr/bin/cmake -E env VERBOSE=1 /usr/bin/gmake -f Makefile cmTC_26521/fast + /usr/bin/gmake -f CMakeFiles/cmTC_26521.dir/build.make CMakeFiles/cmTC_26521.dir/build + gmake[1]: вход в каталог «/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-qE7h5M» + Building C object CMakeFiles/cmTC_26521.dir/CheckFunctionExists.c.o + "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" -D__STDC_WANT_LIB_EXT1__=1 -DCHECK_FUNCTION_EXISTS=strdup -MD -MT CMakeFiles/cmTC_26521.dir/CheckFunctionExists.c.o -MF CMakeFiles/cmTC_26521.dir/CheckFunctionExists.c.o.d -o CMakeFiles/cmTC_26521.dir/CheckFunctionExists.c.o -c "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-qE7h5M/CheckFunctionExists.c" + /home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-qE7h5M/CheckFunctionExists.c:7:3: warning: incompatible redeclaration of library function 'strdup' [-Wincompatible-library-redeclaration] + 7 | CHECK_FUNCTION_EXISTS(void); + | ^ + :3:31: note: expanded from macro 'CHECK_FUNCTION_EXISTS' + 3 | #define CHECK_FUNCTION_EXISTS strdup + | ^ + /home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-qE7h5M/CheckFunctionExists.c:7:3: note: 'strdup' is a builtin with type 'char *(const char *)' + :3:31: note: expanded from macro 'CHECK_FUNCTION_EXISTS' + 3 | #define CHECK_FUNCTION_EXISTS strdup + | ^ + 1 warning generated. + Linking C executable cmTC_26521.js + /usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_26521.dir/link.txt --verbose=1 + "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" -DCHECK_FUNCTION_EXISTS=strdup @CMakeFiles/cmTC_26521.dir/objects1.rsp -o cmTC_26521.js + wasm-ld: warning: function signature mismatch: strdup + >>> defined as () -> i32 in CMakeFiles/cmTC_26521.dir/CheckFunctionExists.c.o + >>> defined as (i32) -> i32 in /home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/cache/sysroot/lib/wasm32-emscripten/libc-debug.a(strdup.o) + gmake[1]: выход из каталога «/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-qE7h5M» + + exitCode: 0 + - + kind: "try_compile-v1" + backtrace: + - "/usr/share/cmake-3.28/Modules/CheckFunctionExists.cmake:86 (try_compile)" + - "CMakeLists.txt:136 (check_function_exists)" + checks: + - "Looking for strerror_s" + directories: + source: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-IsCTYq" + binary: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-IsCTYq" + cmakeVariables: + CMAKE_CXX_COMPILER_CLANG_SCAN_DEPS: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/emscan-deps" + CMAKE_C_FLAGS: "" + CMAKE_C_FLAGS_DEBUG: "-g" + CMAKE_EXE_LINKER_FLAGS: "" + CMAKE_MODULE_PATH: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/cproject/thirdparty/libzip-1.11.3/cmake;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules" + buildResult: + variable: "HAVE_STRERROR_S" + cached: true + stdout: | + Change Dir: '/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-IsCTYq' + + Run Build Command(s): /usr/bin/cmake -E env VERBOSE=1 /usr/bin/gmake -f Makefile cmTC_f96e0/fast + /usr/bin/gmake -f CMakeFiles/cmTC_f96e0.dir/build.make CMakeFiles/cmTC_f96e0.dir/build + gmake[1]: вход в каталог «/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-IsCTYq» + Building C object CMakeFiles/cmTC_f96e0.dir/CheckFunctionExists.c.o + "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" -D__STDC_WANT_LIB_EXT1__=1 -DCHECK_FUNCTION_EXISTS=strerror_s -MD -MT CMakeFiles/cmTC_f96e0.dir/CheckFunctionExists.c.o -MF CMakeFiles/cmTC_f96e0.dir/CheckFunctionExists.c.o.d -o CMakeFiles/cmTC_f96e0.dir/CheckFunctionExists.c.o -c "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-IsCTYq/CheckFunctionExists.c" + Linking C executable cmTC_f96e0.js + /usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_f96e0.dir/link.txt --verbose=1 + "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" -DCHECK_FUNCTION_EXISTS=strerror_s @CMakeFiles/cmTC_f96e0.dir/objects1.rsp -o cmTC_f96e0.js + wasm-ld: error: CMakeFiles/cmTC_f96e0.dir/CheckFunctionExists.c.o: undefined symbol: strerror_s + emcc: error: '"/home/romazan/Рабочий Ñтол/emsdk/upstream/bin/wasm-ld" -o cmTC_f96e0.wasm CMakeFiles/cmTC_f96e0.dir/CheckFunctionExists.c.o "-L/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/cache/sysroot/lib/wasm32-emscripten" "-L/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/src/lib" -lGL-getprocaddr -lal -lhtml5 -lstubs-debug -lnoexit -lc-debug -ldlmalloc-debug -lcompiler_rt -lc++-noexcept -lc++abi-debug-noexcept -lsockets -mllvm -combiner-global-alias-analysis=false -mllvm -enable-emscripten-sjlj -mllvm -disable-lsr /tmp/tmp2lesyyr5libemscripten_js_symbols.so --strip-debug --export=emscripten_stack_get_end --export=emscripten_stack_get_free --export=emscripten_stack_get_base --export=emscripten_stack_get_current --export=emscripten_stack_init --export=_emscripten_stack_alloc --export=__wasm_call_ctors --export=_emscripten_stack_restore --export-if-defined=__start_em_asm --export-if-defined=__stop_em_asm --export-if-defined=__start_em_lib_deps --export-if-defined=__stop_em_lib_deps --export-if-defined=__start_em_js --export-if-defined=__stop_em_js --export-if-defined=main --export-if-defined=__main_argc_argv --export-if-defined=fflush --export-table -z stack-size=65536 --no-growable-memory --initial-heap=16777216 --no-entry --stack-first --table-base=1' failed (returned 1) + gmake[1]: *** [CMakeFiles/cmTC_f96e0.dir/build.make:101: cmTC_f96e0.js] Ошибка 1 + gmake[1]: выход из каталога «/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-IsCTYq» + gmake: *** [Makefile:127: cmTC_f96e0/fast] Ошибка 2 + + exitCode: 2 + - + kind: "try_compile-v1" + backtrace: + - "/usr/share/cmake-3.28/Modules/CheckFunctionExists.cmake:86 (try_compile)" + - "CMakeLists.txt:137 (check_function_exists)" + checks: + - "Looking for strerrorlen_s" + directories: + source: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-tZfxMd" + binary: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-tZfxMd" + cmakeVariables: + CMAKE_CXX_COMPILER_CLANG_SCAN_DEPS: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/emscan-deps" + CMAKE_C_FLAGS: "" + CMAKE_C_FLAGS_DEBUG: "-g" + CMAKE_EXE_LINKER_FLAGS: "" + CMAKE_MODULE_PATH: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/cproject/thirdparty/libzip-1.11.3/cmake;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules" + buildResult: + variable: "HAVE_STRERRORLEN_S" + cached: true + stdout: | + Change Dir: '/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-tZfxMd' + + Run Build Command(s): /usr/bin/cmake -E env VERBOSE=1 /usr/bin/gmake -f Makefile cmTC_243af/fast + /usr/bin/gmake -f CMakeFiles/cmTC_243af.dir/build.make CMakeFiles/cmTC_243af.dir/build + gmake[1]: вход в каталог «/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-tZfxMd» + Building C object CMakeFiles/cmTC_243af.dir/CheckFunctionExists.c.o + "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" -D__STDC_WANT_LIB_EXT1__=1 -DCHECK_FUNCTION_EXISTS=strerrorlen_s -MD -MT CMakeFiles/cmTC_243af.dir/CheckFunctionExists.c.o -MF CMakeFiles/cmTC_243af.dir/CheckFunctionExists.c.o.d -o CMakeFiles/cmTC_243af.dir/CheckFunctionExists.c.o -c "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-tZfxMd/CheckFunctionExists.c" + Linking C executable cmTC_243af.js + /usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_243af.dir/link.txt --verbose=1 + "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" -DCHECK_FUNCTION_EXISTS=strerrorlen_s @CMakeFiles/cmTC_243af.dir/objects1.rsp -o cmTC_243af.js + wasm-ld: error: CMakeFiles/cmTC_243af.dir/CheckFunctionExists.c.o: undefined symbol: strerrorlen_s + emcc: error: '"/home/romazan/Рабочий Ñтол/emsdk/upstream/bin/wasm-ld" -o cmTC_243af.wasm CMakeFiles/cmTC_243af.dir/CheckFunctionExists.c.o "-L/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/cache/sysroot/lib/wasm32-emscripten" "-L/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/src/lib" -lGL-getprocaddr -lal -lhtml5 -lstubs-debug -lnoexit -lc-debug -ldlmalloc-debug -lcompiler_rt -lc++-noexcept -lc++abi-debug-noexcept -lsockets -mllvm -combiner-global-alias-analysis=false -mllvm -enable-emscripten-sjlj -mllvm -disable-lsr /tmp/tmp70ffs9qulibemscripten_js_symbols.so --strip-debug --export=emscripten_stack_get_end --export=emscripten_stack_get_free --export=emscripten_stack_get_base --export=emscripten_stack_get_current --export=emscripten_stack_init --export=_emscripten_stack_alloc --export=__wasm_call_ctors --export=_emscripten_stack_restore --export-if-defined=__start_em_asm --export-if-defined=__stop_em_asm --export-if-defined=__start_em_lib_deps --export-if-defined=__stop_em_lib_deps --export-if-defined=__start_em_js --export-if-defined=__stop_em_js --export-if-defined=main --export-if-defined=__main_argc_argv --export-if-defined=fflush --export-table -z stack-size=65536 --no-growable-memory --initial-heap=16777216 --no-entry --stack-first --table-base=1' failed (returned 1) + gmake[1]: *** [CMakeFiles/cmTC_243af.dir/build.make:101: cmTC_243af.js] Ошибка 1 + gmake[1]: выход из каталога «/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-tZfxMd» + gmake: *** [Makefile:127: cmTC_243af/fast] Ошибка 2 + + exitCode: 2 + - + kind: "try_compile-v1" + backtrace: + - "/usr/share/cmake-3.28/Modules/CheckFunctionExists.cmake:86 (try_compile)" + - "CMakeLists.txt:138 (check_function_exists)" + checks: + - "Looking for stricmp" + directories: + source: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-7iPcpc" + binary: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-7iPcpc" + cmakeVariables: + CMAKE_CXX_COMPILER_CLANG_SCAN_DEPS: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/emscan-deps" + CMAKE_C_FLAGS: "" + CMAKE_C_FLAGS_DEBUG: "-g" + CMAKE_EXE_LINKER_FLAGS: "" + CMAKE_MODULE_PATH: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/cproject/thirdparty/libzip-1.11.3/cmake;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules" + buildResult: + variable: "HAVE_STRICMP" + cached: true + stdout: | + Change Dir: '/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-7iPcpc' + + Run Build Command(s): /usr/bin/cmake -E env VERBOSE=1 /usr/bin/gmake -f Makefile cmTC_f7780/fast + /usr/bin/gmake -f CMakeFiles/cmTC_f7780.dir/build.make CMakeFiles/cmTC_f7780.dir/build + gmake[1]: вход в каталог «/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-7iPcpc» + Building C object CMakeFiles/cmTC_f7780.dir/CheckFunctionExists.c.o + "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" -D__STDC_WANT_LIB_EXT1__=1 -DCHECK_FUNCTION_EXISTS=stricmp -MD -MT CMakeFiles/cmTC_f7780.dir/CheckFunctionExists.c.o -MF CMakeFiles/cmTC_f7780.dir/CheckFunctionExists.c.o.d -o CMakeFiles/cmTC_f7780.dir/CheckFunctionExists.c.o -c "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-7iPcpc/CheckFunctionExists.c" + Linking C executable cmTC_f7780.js + /usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_f7780.dir/link.txt --verbose=1 + "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" -DCHECK_FUNCTION_EXISTS=stricmp @CMakeFiles/cmTC_f7780.dir/objects1.rsp -o cmTC_f7780.js + wasm-ld: error: CMakeFiles/cmTC_f7780.dir/CheckFunctionExists.c.o: undefined symbol: stricmp + emcc: error: '"/home/romazan/Рабочий Ñтол/emsdk/upstream/bin/wasm-ld" -o cmTC_f7780.wasm CMakeFiles/cmTC_f7780.dir/CheckFunctionExists.c.o "-L/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/cache/sysroot/lib/wasm32-emscripten" "-L/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/src/lib" -lGL-getprocaddr -lal -lhtml5 -lstubs-debug -lnoexit -lc-debug -ldlmalloc-debug -lcompiler_rt -lc++-noexcept -lc++abi-debug-noexcept -lsockets -mllvm -combiner-global-alias-analysis=false -mllvm -enable-emscripten-sjlj -mllvm -disable-lsr /tmp/tmp65w94iodlibemscripten_js_symbols.so --strip-debug --export=emscripten_stack_get_end --export=emscripten_stack_get_free --export=emscripten_stack_get_base --export=emscripten_stack_get_current --export=emscripten_stack_init --export=_emscripten_stack_alloc --export=__wasm_call_ctors --export=_emscripten_stack_restore --export-if-defined=__start_em_asm --export-if-defined=__stop_em_asm --export-if-defined=__start_em_lib_deps --export-if-defined=__stop_em_lib_deps --export-if-defined=__start_em_js --export-if-defined=__stop_em_js --export-if-defined=main --export-if-defined=__main_argc_argv --export-if-defined=fflush --export-table -z stack-size=65536 --no-growable-memory --initial-heap=16777216 --no-entry --stack-first --table-base=1' failed (returned 1) + gmake[1]: *** [CMakeFiles/cmTC_f7780.dir/build.make:101: cmTC_f7780.js] Ошибка 1 + gmake[1]: выход из каталога «/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-7iPcpc» + gmake: *** [Makefile:127: cmTC_f7780/fast] Ошибка 2 + + exitCode: 2 + - + kind: "try_compile-v1" + backtrace: + - "/usr/share/cmake-3.28/Modules/CheckFunctionExists.cmake:86 (try_compile)" + - "CMakeLists.txt:139 (check_function_exists)" + checks: + - "Looking for strncpy_s" + directories: + source: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-XSyvBl" + binary: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-XSyvBl" + cmakeVariables: + CMAKE_CXX_COMPILER_CLANG_SCAN_DEPS: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/emscan-deps" + CMAKE_C_FLAGS: "" + CMAKE_C_FLAGS_DEBUG: "-g" + CMAKE_EXE_LINKER_FLAGS: "" + CMAKE_MODULE_PATH: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/cproject/thirdparty/libzip-1.11.3/cmake;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules" + buildResult: + variable: "HAVE_STRNCPY_S" + cached: true + stdout: | + Change Dir: '/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-XSyvBl' + + Run Build Command(s): /usr/bin/cmake -E env VERBOSE=1 /usr/bin/gmake -f Makefile cmTC_5af36/fast + /usr/bin/gmake -f CMakeFiles/cmTC_5af36.dir/build.make CMakeFiles/cmTC_5af36.dir/build + gmake[1]: вход в каталог «/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-XSyvBl» + Building C object CMakeFiles/cmTC_5af36.dir/CheckFunctionExists.c.o + "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" -D__STDC_WANT_LIB_EXT1__=1 -DCHECK_FUNCTION_EXISTS=strncpy_s -MD -MT CMakeFiles/cmTC_5af36.dir/CheckFunctionExists.c.o -MF CMakeFiles/cmTC_5af36.dir/CheckFunctionExists.c.o.d -o CMakeFiles/cmTC_5af36.dir/CheckFunctionExists.c.o -c "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-XSyvBl/CheckFunctionExists.c" + Linking C executable cmTC_5af36.js + /usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_5af36.dir/link.txt --verbose=1 + "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" -DCHECK_FUNCTION_EXISTS=strncpy_s @CMakeFiles/cmTC_5af36.dir/objects1.rsp -o cmTC_5af36.js + wasm-ld: error: CMakeFiles/cmTC_5af36.dir/CheckFunctionExists.c.o: undefined symbol: strncpy_s + emcc: error: '"/home/romazan/Рабочий Ñтол/emsdk/upstream/bin/wasm-ld" -o cmTC_5af36.wasm CMakeFiles/cmTC_5af36.dir/CheckFunctionExists.c.o "-L/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/cache/sysroot/lib/wasm32-emscripten" "-L/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/src/lib" -lGL-getprocaddr -lal -lhtml5 -lstubs-debug -lnoexit -lc-debug -ldlmalloc-debug -lcompiler_rt -lc++-noexcept -lc++abi-debug-noexcept -lsockets -mllvm -combiner-global-alias-analysis=false -mllvm -enable-emscripten-sjlj -mllvm -disable-lsr /tmp/tmpk9a0f8x4libemscripten_js_symbols.so --strip-debug --export=emscripten_stack_get_end --export=emscripten_stack_get_free --export=emscripten_stack_get_base --export=emscripten_stack_get_current --export=emscripten_stack_init --export=_emscripten_stack_alloc --export=__wasm_call_ctors --export=_emscripten_stack_restore --export-if-defined=__start_em_asm --export-if-defined=__stop_em_asm --export-if-defined=__start_em_lib_deps --export-if-defined=__stop_em_lib_deps --export-if-defined=__start_em_js --export-if-defined=__stop_em_js --export-if-defined=main --export-if-defined=__main_argc_argv --export-if-defined=fflush --export-table -z stack-size=65536 --no-growable-memory --initial-heap=16777216 --no-entry --stack-first --table-base=1' failed (returned 1) + gmake[1]: *** [CMakeFiles/cmTC_5af36.dir/build.make:101: cmTC_5af36.js] Ошибка 1 + gmake[1]: выход из каталога «/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-XSyvBl» + gmake: *** [Makefile:127: cmTC_5af36/fast] Ошибка 2 + + exitCode: 2 + - + kind: "try_compile-v1" + backtrace: + - "/usr/share/cmake-3.28/Modules/CheckFunctionExists.cmake:86 (try_compile)" + - "CMakeLists.txt:140 (check_function_exists)" + checks: + - "Looking for strtoll" + directories: + source: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-zBWVDs" + binary: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-zBWVDs" + cmakeVariables: + CMAKE_CXX_COMPILER_CLANG_SCAN_DEPS: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/emscan-deps" + CMAKE_C_FLAGS: "" + CMAKE_C_FLAGS_DEBUG: "-g" + CMAKE_EXE_LINKER_FLAGS: "" + CMAKE_MODULE_PATH: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/cproject/thirdparty/libzip-1.11.3/cmake;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules" + buildResult: + variable: "HAVE_STRTOLL" + cached: true + stdout: | + Change Dir: '/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-zBWVDs' + + Run Build Command(s): /usr/bin/cmake -E env VERBOSE=1 /usr/bin/gmake -f Makefile cmTC_9f1eb/fast + /usr/bin/gmake -f CMakeFiles/cmTC_9f1eb.dir/build.make CMakeFiles/cmTC_9f1eb.dir/build + gmake[1]: вход в каталог «/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-zBWVDs» + Building C object CMakeFiles/cmTC_9f1eb.dir/CheckFunctionExists.c.o + "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" -D__STDC_WANT_LIB_EXT1__=1 -DCHECK_FUNCTION_EXISTS=strtoll -MD -MT CMakeFiles/cmTC_9f1eb.dir/CheckFunctionExists.c.o -MF CMakeFiles/cmTC_9f1eb.dir/CheckFunctionExists.c.o.d -o CMakeFiles/cmTC_9f1eb.dir/CheckFunctionExists.c.o -c "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-zBWVDs/CheckFunctionExists.c" + /home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-zBWVDs/CheckFunctionExists.c:7:3: warning: incompatible redeclaration of library function 'strtoll' [-Wincompatible-library-redeclaration] + 7 | CHECK_FUNCTION_EXISTS(void); + | ^ + :3:31: note: expanded from macro 'CHECK_FUNCTION_EXISTS' + 3 | #define CHECK_FUNCTION_EXISTS strtoll + | ^ + /home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-zBWVDs/CheckFunctionExists.c:7:3: note: 'strtoll' is a builtin with type 'long long (const char *, char **, int)' + :3:31: note: expanded from macro 'CHECK_FUNCTION_EXISTS' + 3 | #define CHECK_FUNCTION_EXISTS strtoll + | ^ + 1 warning generated. + Linking C executable cmTC_9f1eb.js + /usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_9f1eb.dir/link.txt --verbose=1 + "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" -DCHECK_FUNCTION_EXISTS=strtoll @CMakeFiles/cmTC_9f1eb.dir/objects1.rsp -o cmTC_9f1eb.js + wasm-ld: warning: function signature mismatch: strtoll + >>> defined as () -> i32 in CMakeFiles/cmTC_9f1eb.dir/CheckFunctionExists.c.o + >>> defined as (i32, i32, i32) -> i64 in /home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/cache/sysroot/lib/wasm32-emscripten/libc-debug.a(strtol.o) + gmake[1]: выход из каталога «/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-zBWVDs» + + exitCode: 0 + - + kind: "try_compile-v1" + backtrace: + - "/usr/share/cmake-3.28/Modules/CheckFunctionExists.cmake:86 (try_compile)" + - "CMakeLists.txt:141 (check_function_exists)" + checks: + - "Looking for strtoull" + directories: + source: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-p3ATJE" + binary: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-p3ATJE" + cmakeVariables: + CMAKE_CXX_COMPILER_CLANG_SCAN_DEPS: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/emscan-deps" + CMAKE_C_FLAGS: "" + CMAKE_C_FLAGS_DEBUG: "-g" + CMAKE_EXE_LINKER_FLAGS: "" + CMAKE_MODULE_PATH: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/cproject/thirdparty/libzip-1.11.3/cmake;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules" + buildResult: + variable: "HAVE_STRTOULL" + cached: true + stdout: | + Change Dir: '/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-p3ATJE' + + Run Build Command(s): /usr/bin/cmake -E env VERBOSE=1 /usr/bin/gmake -f Makefile cmTC_f333d/fast + /usr/bin/gmake -f CMakeFiles/cmTC_f333d.dir/build.make CMakeFiles/cmTC_f333d.dir/build + gmake[1]: вход в каталог «/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-p3ATJE» + Building C object CMakeFiles/cmTC_f333d.dir/CheckFunctionExists.c.o + "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" -D__STDC_WANT_LIB_EXT1__=1 -DCHECK_FUNCTION_EXISTS=strtoull -MD -MT CMakeFiles/cmTC_f333d.dir/CheckFunctionExists.c.o -MF CMakeFiles/cmTC_f333d.dir/CheckFunctionExists.c.o.d -o CMakeFiles/cmTC_f333d.dir/CheckFunctionExists.c.o -c "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-p3ATJE/CheckFunctionExists.c" + /home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-p3ATJE/CheckFunctionExists.c:7:3: warning: incompatible redeclaration of library function 'strtoull' [-Wincompatible-library-redeclaration] + 7 | CHECK_FUNCTION_EXISTS(void); + | ^ + :3:31: note: expanded from macro 'CHECK_FUNCTION_EXISTS' + 3 | #define CHECK_FUNCTION_EXISTS strtoull + | ^ + /home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-p3ATJE/CheckFunctionExists.c:7:3: note: 'strtoull' is a builtin with type 'unsigned long long (const char *, char **, int)' + :3:31: note: expanded from macro 'CHECK_FUNCTION_EXISTS' + 3 | #define CHECK_FUNCTION_EXISTS strtoull + | ^ + 1 warning generated. + Linking C executable cmTC_f333d.js + /usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_f333d.dir/link.txt --verbose=1 + "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" -DCHECK_FUNCTION_EXISTS=strtoull @CMakeFiles/cmTC_f333d.dir/objects1.rsp -o cmTC_f333d.js + wasm-ld: warning: function signature mismatch: strtoull + >>> defined as () -> i32 in CMakeFiles/cmTC_f333d.dir/CheckFunctionExists.c.o + >>> defined as (i32, i32, i32) -> i64 in /home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/cache/sysroot/lib/wasm32-emscripten/libc-debug.a(strtol.o) + gmake[1]: выход из каталога «/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-p3ATJE» + + exitCode: 0 + - + kind: "try_compile-v1" + backtrace: + - "/usr/share/cmake-3.28/Modules/CheckIncludeFiles.cmake:132 (try_compile)" + - "CMakeLists.txt:143 (check_include_files)" + checks: + - "Looking for 3 include files sys/types.h, ..., fts.h" + directories: + source: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-wsYza1" + binary: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-wsYza1" + cmakeVariables: + CMAKE_CXX_COMPILER_CLANG_SCAN_DEPS: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/emscan-deps" + CMAKE_C_FLAGS: "" + CMAKE_C_FLAGS_DEBUG: "-g" + CMAKE_EXE_LINKER_FLAGS: "" + CMAKE_MODULE_PATH: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/cproject/thirdparty/libzip-1.11.3/cmake;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules" + buildResult: + variable: "HAVE_FTS_H" + cached: true + stdout: | + Change Dir: '/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-wsYza1' + + Run Build Command(s): /usr/bin/cmake -E env VERBOSE=1 /usr/bin/gmake -f Makefile cmTC_eb004/fast + /usr/bin/gmake -f CMakeFiles/cmTC_eb004.dir/build.make CMakeFiles/cmTC_eb004.dir/build + gmake[1]: вход в каталог «/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-wsYza1» + Building C object CMakeFiles/cmTC_eb004.dir/HAVE_FTS_H.c.o + "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" -D__STDC_WANT_LIB_EXT1__=1 -MD -MT CMakeFiles/cmTC_eb004.dir/HAVE_FTS_H.c.o -MF CMakeFiles/cmTC_eb004.dir/HAVE_FTS_H.c.o.d -o CMakeFiles/cmTC_eb004.dir/HAVE_FTS_H.c.o -c "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-wsYza1/HAVE_FTS_H.c" + /home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-wsYza1/HAVE_FTS_H.c:4:10: fatal error: 'fts.h' file not found + 4 | #include + | ^~~~~~~ + 1 error generated. + gmake[1]: *** [CMakeFiles/cmTC_eb004.dir/build.make:79: CMakeFiles/cmTC_eb004.dir/HAVE_FTS_H.c.o] Ошибка 1 + gmake[1]: выход из каталога «/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-wsYza1» + gmake: *** [Makefile:127: cmTC_eb004/fast] Ошибка 2 + + exitCode: 2 + - + kind: "try_compile-v1" + backtrace: + - "/usr/share/cmake-3.28/Modules/CheckIncludeFiles.cmake:132 (try_compile)" + - "CMakeLists.txt:162 (check_include_files)" + checks: + - "Looking for include file stdbool.h" + directories: + source: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-IauMRK" + binary: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-IauMRK" + cmakeVariables: + CMAKE_CXX_COMPILER_CLANG_SCAN_DEPS: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/emscan-deps" + CMAKE_C_FLAGS: "" + CMAKE_C_FLAGS_DEBUG: "-g" + CMAKE_EXE_LINKER_FLAGS: "" + CMAKE_MODULE_PATH: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/cproject/thirdparty/libzip-1.11.3/cmake;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules" + buildResult: + variable: "HAVE_STDBOOL_H" + cached: true + stdout: | + Change Dir: '/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-IauMRK' + + Run Build Command(s): /usr/bin/cmake -E env VERBOSE=1 /usr/bin/gmake -f Makefile cmTC_c6159/fast + /usr/bin/gmake -f CMakeFiles/cmTC_c6159.dir/build.make CMakeFiles/cmTC_c6159.dir/build + gmake[1]: вход в каталог «/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-IauMRK» + Building C object CMakeFiles/cmTC_c6159.dir/HAVE_STDBOOL_H.c.o + "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" -D__STDC_WANT_LIB_EXT1__=1 -MD -MT CMakeFiles/cmTC_c6159.dir/HAVE_STDBOOL_H.c.o -MF CMakeFiles/cmTC_c6159.dir/HAVE_STDBOOL_H.c.o.d -o CMakeFiles/cmTC_c6159.dir/HAVE_STDBOOL_H.c.o -c "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-IauMRK/HAVE_STDBOOL_H.c" + Linking C executable cmTC_c6159.js + /usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_c6159.dir/link.txt --verbose=1 + "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" @CMakeFiles/cmTC_c6159.dir/objects1.rsp -o cmTC_c6159.js + gmake[1]: выход из каталога «/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-IauMRK» + + exitCode: 0 + - + kind: "try_compile-v1" + backtrace: + - "/usr/share/cmake-3.28/Modules/CheckIncludeFiles.cmake:132 (try_compile)" + - "CMakeLists.txt:163 (check_include_files)" + checks: + - "Looking for include file strings.h" + directories: + source: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-kDlfia" + binary: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-kDlfia" + cmakeVariables: + CMAKE_CXX_COMPILER_CLANG_SCAN_DEPS: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/emscan-deps" + CMAKE_C_FLAGS: "" + CMAKE_C_FLAGS_DEBUG: "-g" + CMAKE_EXE_LINKER_FLAGS: "" + CMAKE_MODULE_PATH: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/cproject/thirdparty/libzip-1.11.3/cmake;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules" + buildResult: + variable: "HAVE_STRINGS_H" + cached: true + stdout: | + Change Dir: '/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-kDlfia' + + Run Build Command(s): /usr/bin/cmake -E env VERBOSE=1 /usr/bin/gmake -f Makefile cmTC_25521/fast + /usr/bin/gmake -f CMakeFiles/cmTC_25521.dir/build.make CMakeFiles/cmTC_25521.dir/build + gmake[1]: вход в каталог «/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-kDlfia» + Building C object CMakeFiles/cmTC_25521.dir/HAVE_STRINGS_H.c.o + "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" -D__STDC_WANT_LIB_EXT1__=1 -MD -MT CMakeFiles/cmTC_25521.dir/HAVE_STRINGS_H.c.o -MF CMakeFiles/cmTC_25521.dir/HAVE_STRINGS_H.c.o.d -o CMakeFiles/cmTC_25521.dir/HAVE_STRINGS_H.c.o -c "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-kDlfia/HAVE_STRINGS_H.c" + Linking C executable cmTC_25521.js + /usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_25521.dir/link.txt --verbose=1 + "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" @CMakeFiles/cmTC_25521.dir/objects1.rsp -o cmTC_25521.js + gmake[1]: выход из каталога «/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-kDlfia» + + exitCode: 0 + - + kind: "try_compile-v1" + backtrace: + - "/usr/share/cmake-3.28/Modules/CheckIncludeFiles.cmake:132 (try_compile)" + - "CMakeLists.txt:164 (check_include_files)" + checks: + - "Looking for include file unistd.h" + directories: + source: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-O7hXCY" + binary: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-O7hXCY" + cmakeVariables: + CMAKE_CXX_COMPILER_CLANG_SCAN_DEPS: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/emscan-deps" + CMAKE_C_FLAGS: "" + CMAKE_C_FLAGS_DEBUG: "-g" + CMAKE_EXE_LINKER_FLAGS: "" + CMAKE_MODULE_PATH: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/cproject/thirdparty/libzip-1.11.3/cmake;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules" + buildResult: + variable: "HAVE_UNISTD_H" + cached: true + stdout: | + Change Dir: '/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-O7hXCY' + + Run Build Command(s): /usr/bin/cmake -E env VERBOSE=1 /usr/bin/gmake -f Makefile cmTC_2f4f3/fast + /usr/bin/gmake -f CMakeFiles/cmTC_2f4f3.dir/build.make CMakeFiles/cmTC_2f4f3.dir/build + gmake[1]: вход в каталог «/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-O7hXCY» + Building C object CMakeFiles/cmTC_2f4f3.dir/HAVE_UNISTD_H.c.o + "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" -D__STDC_WANT_LIB_EXT1__=1 -MD -MT CMakeFiles/cmTC_2f4f3.dir/HAVE_UNISTD_H.c.o -MF CMakeFiles/cmTC_2f4f3.dir/HAVE_UNISTD_H.c.o.d -o CMakeFiles/cmTC_2f4f3.dir/HAVE_UNISTD_H.c.o -c "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-O7hXCY/HAVE_UNISTD_H.c" + Linking C executable cmTC_2f4f3.js + /usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_2f4f3.dir/link.txt --verbose=1 + "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" @CMakeFiles/cmTC_2f4f3.dir/objects1.rsp -o cmTC_2f4f3.js + gmake[1]: выход из каталога «/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-O7hXCY» + + exitCode: 0 + - + kind: "try_compile-v1" + backtrace: + - "/usr/share/cmake-3.28/Modules/CheckIncludeFiles.cmake:132 (try_compile)" + - "CMakeLists.txt:166 (check_include_files)" + checks: + - "Looking for include file inttypes.h" + directories: + source: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-VgSXxN" + binary: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-VgSXxN" + cmakeVariables: + CMAKE_CXX_COMPILER_CLANG_SCAN_DEPS: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/emscan-deps" + CMAKE_C_FLAGS: "" + CMAKE_C_FLAGS_DEBUG: "-g" + CMAKE_EXE_LINKER_FLAGS: "" + CMAKE_MODULE_PATH: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/cproject/thirdparty/libzip-1.11.3/cmake;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules" + buildResult: + variable: "HAVE_INTTYPES_H_LIBZIP" + cached: true + stdout: | + Change Dir: '/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-VgSXxN' + + Run Build Command(s): /usr/bin/cmake -E env VERBOSE=1 /usr/bin/gmake -f Makefile cmTC_873f4/fast + /usr/bin/gmake -f CMakeFiles/cmTC_873f4.dir/build.make CMakeFiles/cmTC_873f4.dir/build + gmake[1]: вход в каталог «/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-VgSXxN» + Building C object CMakeFiles/cmTC_873f4.dir/HAVE_INTTYPES_H_LIBZIP.c.o + "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" -D__STDC_WANT_LIB_EXT1__=1 -MD -MT CMakeFiles/cmTC_873f4.dir/HAVE_INTTYPES_H_LIBZIP.c.o -MF CMakeFiles/cmTC_873f4.dir/HAVE_INTTYPES_H_LIBZIP.c.o.d -o CMakeFiles/cmTC_873f4.dir/HAVE_INTTYPES_H_LIBZIP.c.o -c "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-VgSXxN/HAVE_INTTYPES_H_LIBZIP.c" + Linking C executable cmTC_873f4.js + /usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_873f4.dir/link.txt --verbose=1 + "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" @CMakeFiles/cmTC_873f4.dir/objects1.rsp -o cmTC_873f4.js + gmake[1]: выход из каталога «/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-VgSXxN» + + exitCode: 0 + - + kind: "try_compile-v1" + backtrace: + - "/usr/share/cmake-3.28/Modules/CheckIncludeFiles.cmake:132 (try_compile)" + - "CMakeLists.txt:167 (check_include_files)" + checks: + - "Looking for include file stdint.h" + directories: + source: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-I1AziN" + binary: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-I1AziN" + cmakeVariables: + CMAKE_CXX_COMPILER_CLANG_SCAN_DEPS: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/emscan-deps" + CMAKE_C_FLAGS: "" + CMAKE_C_FLAGS_DEBUG: "-g" + CMAKE_EXE_LINKER_FLAGS: "" + CMAKE_MODULE_PATH: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/cproject/thirdparty/libzip-1.11.3/cmake;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules" + buildResult: + variable: "HAVE_STDINT_H_LIBZIP" + cached: true + stdout: | + Change Dir: '/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-I1AziN' + + Run Build Command(s): /usr/bin/cmake -E env VERBOSE=1 /usr/bin/gmake -f Makefile cmTC_f7532/fast + /usr/bin/gmake -f CMakeFiles/cmTC_f7532.dir/build.make CMakeFiles/cmTC_f7532.dir/build + gmake[1]: вход в каталог «/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-I1AziN» + Building C object CMakeFiles/cmTC_f7532.dir/HAVE_STDINT_H_LIBZIP.c.o + "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" -D__STDC_WANT_LIB_EXT1__=1 -MD -MT CMakeFiles/cmTC_f7532.dir/HAVE_STDINT_H_LIBZIP.c.o -MF CMakeFiles/cmTC_f7532.dir/HAVE_STDINT_H_LIBZIP.c.o.d -o CMakeFiles/cmTC_f7532.dir/HAVE_STDINT_H_LIBZIP.c.o -c "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-I1AziN/HAVE_STDINT_H_LIBZIP.c" + Linking C executable cmTC_f7532.js + /usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_f7532.dir/link.txt --verbose=1 + "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" @CMakeFiles/cmTC_f7532.dir/objects1.rsp -o cmTC_f7532.js + gmake[1]: выход из каталога «/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-I1AziN» + + exitCode: 0 + - + kind: "try_compile-v1" + backtrace: + - "/usr/share/cmake-3.28/Modules/CheckIncludeFiles.cmake:132 (try_compile)" + - "CMakeLists.txt:168 (check_include_files)" + checks: + - "Looking for include file sys/types.h" + directories: + source: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-liBlXd" + binary: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-liBlXd" + cmakeVariables: + CMAKE_CXX_COMPILER_CLANG_SCAN_DEPS: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/emscan-deps" + CMAKE_C_FLAGS: "" + CMAKE_C_FLAGS_DEBUG: "-g" + CMAKE_EXE_LINKER_FLAGS: "" + CMAKE_MODULE_PATH: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/cproject/thirdparty/libzip-1.11.3/cmake;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules" + buildResult: + variable: "HAVE_SYS_TYPES_H_LIBZIP" + cached: true + stdout: | + Change Dir: '/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-liBlXd' + + Run Build Command(s): /usr/bin/cmake -E env VERBOSE=1 /usr/bin/gmake -f Makefile cmTC_d60aa/fast + /usr/bin/gmake -f CMakeFiles/cmTC_d60aa.dir/build.make CMakeFiles/cmTC_d60aa.dir/build + gmake[1]: вход в каталог «/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-liBlXd» + Building C object CMakeFiles/cmTC_d60aa.dir/HAVE_SYS_TYPES_H_LIBZIP.c.o + "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" -D__STDC_WANT_LIB_EXT1__=1 -MD -MT CMakeFiles/cmTC_d60aa.dir/HAVE_SYS_TYPES_H_LIBZIP.c.o -MF CMakeFiles/cmTC_d60aa.dir/HAVE_SYS_TYPES_H_LIBZIP.c.o.d -o CMakeFiles/cmTC_d60aa.dir/HAVE_SYS_TYPES_H_LIBZIP.c.o -c "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-liBlXd/HAVE_SYS_TYPES_H_LIBZIP.c" + Linking C executable cmTC_d60aa.js + /usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_d60aa.dir/link.txt --verbose=1 + "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" @CMakeFiles/cmTC_d60aa.dir/objects1.rsp -o cmTC_d60aa.js + gmake[1]: выход из каталога «/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-liBlXd» + + exitCode: 0 + - + kind: "try_compile-v1" + backtrace: + - "/usr/share/cmake-3.28/Modules/CheckIncludeFile.cmake:90 (try_compile)" + - "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules/CheckTypeSize.cmake:223 (check_include_file)" + - "CMakeLists.txt:174 (check_type_size)" + checks: + - "Looking for sys/types.h" + directories: + source: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-MgkrcO" + binary: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-MgkrcO" + cmakeVariables: + CMAKE_CXX_COMPILER_CLANG_SCAN_DEPS: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/emscan-deps" + CMAKE_C_FLAGS: "" + CMAKE_C_FLAGS_DEBUG: "-g" + CMAKE_EXE_LINKER_FLAGS: "" + CMAKE_MODULE_PATH: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/cproject/thirdparty/libzip-1.11.3/cmake;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules" + buildResult: + variable: "HAVE_SYS_TYPES_H" + cached: true + stdout: | + Change Dir: '/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-MgkrcO' + + Run Build Command(s): /usr/bin/cmake -E env VERBOSE=1 /usr/bin/gmake -f Makefile cmTC_64c45/fast + /usr/bin/gmake -f CMakeFiles/cmTC_64c45.dir/build.make CMakeFiles/cmTC_64c45.dir/build + gmake[1]: вход в каталог «/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-MgkrcO» + Building C object CMakeFiles/cmTC_64c45.dir/CheckIncludeFile.c.o + "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" -D__STDC_WANT_LIB_EXT1__=1 -MD -MT CMakeFiles/cmTC_64c45.dir/CheckIncludeFile.c.o -MF CMakeFiles/cmTC_64c45.dir/CheckIncludeFile.c.o.d -o CMakeFiles/cmTC_64c45.dir/CheckIncludeFile.c.o -c "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-MgkrcO/CheckIncludeFile.c" + Linking C executable cmTC_64c45.js + /usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_64c45.dir/link.txt --verbose=1 + "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" @CMakeFiles/cmTC_64c45.dir/objects1.rsp -o cmTC_64c45.js + gmake[1]: выход из каталога «/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-MgkrcO» + + exitCode: 0 + - + kind: "try_compile-v1" + backtrace: + - "/usr/share/cmake-3.28/Modules/CheckIncludeFile.cmake:90 (try_compile)" + - "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules/CheckTypeSize.cmake:224 (check_include_file)" + - "CMakeLists.txt:174 (check_type_size)" + checks: + - "Looking for stdint.h" + directories: + source: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-MEMX0T" + binary: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-MEMX0T" + cmakeVariables: + CMAKE_CXX_COMPILER_CLANG_SCAN_DEPS: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/emscan-deps" + CMAKE_C_FLAGS: "" + CMAKE_C_FLAGS_DEBUG: "-g" + CMAKE_EXE_LINKER_FLAGS: "" + CMAKE_MODULE_PATH: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/cproject/thirdparty/libzip-1.11.3/cmake;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules" + buildResult: + variable: "HAVE_STDINT_H" + cached: true + stdout: | + Change Dir: '/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-MEMX0T' + + Run Build Command(s): /usr/bin/cmake -E env VERBOSE=1 /usr/bin/gmake -f Makefile cmTC_86452/fast + /usr/bin/gmake -f CMakeFiles/cmTC_86452.dir/build.make CMakeFiles/cmTC_86452.dir/build + gmake[1]: вход в каталог «/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-MEMX0T» + Building C object CMakeFiles/cmTC_86452.dir/CheckIncludeFile.c.o + "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" -D__STDC_WANT_LIB_EXT1__=1 -MD -MT CMakeFiles/cmTC_86452.dir/CheckIncludeFile.c.o -MF CMakeFiles/cmTC_86452.dir/CheckIncludeFile.c.o.d -o CMakeFiles/cmTC_86452.dir/CheckIncludeFile.c.o -c "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-MEMX0T/CheckIncludeFile.c" + Linking C executable cmTC_86452.js + /usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_86452.dir/link.txt --verbose=1 + "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" @CMakeFiles/cmTC_86452.dir/objects1.rsp -o cmTC_86452.js + gmake[1]: выход из каталога «/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-MEMX0T» + + exitCode: 0 + - + kind: "try_compile-v1" + backtrace: + - "/usr/share/cmake-3.28/Modules/CheckIncludeFile.cmake:90 (try_compile)" + - "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules/CheckTypeSize.cmake:225 (check_include_file)" + - "CMakeLists.txt:174 (check_type_size)" + checks: + - "Looking for stddef.h" + directories: + source: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-hJ6tJ8" + binary: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-hJ6tJ8" + cmakeVariables: + CMAKE_CXX_COMPILER_CLANG_SCAN_DEPS: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/emscan-deps" + CMAKE_C_FLAGS: "" + CMAKE_C_FLAGS_DEBUG: "-g" + CMAKE_EXE_LINKER_FLAGS: "" + CMAKE_MODULE_PATH: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/cproject/thirdparty/libzip-1.11.3/cmake;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules" + buildResult: + variable: "HAVE_STDDEF_H" + cached: true + stdout: | + Change Dir: '/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-hJ6tJ8' + + Run Build Command(s): /usr/bin/cmake -E env VERBOSE=1 /usr/bin/gmake -f Makefile cmTC_4f3c7/fast + /usr/bin/gmake -f CMakeFiles/cmTC_4f3c7.dir/build.make CMakeFiles/cmTC_4f3c7.dir/build + gmake[1]: вход в каталог «/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-hJ6tJ8» + Building C object CMakeFiles/cmTC_4f3c7.dir/CheckIncludeFile.c.o + "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" -D__STDC_WANT_LIB_EXT1__=1 -MD -MT CMakeFiles/cmTC_4f3c7.dir/CheckIncludeFile.c.o -MF CMakeFiles/cmTC_4f3c7.dir/CheckIncludeFile.c.o.d -o CMakeFiles/cmTC_4f3c7.dir/CheckIncludeFile.c.o -c "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-hJ6tJ8/CheckIncludeFile.c" + Linking C executable cmTC_4f3c7.js + /usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_4f3c7.dir/link.txt --verbose=1 + "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" @CMakeFiles/cmTC_4f3c7.dir/objects1.rsp -o cmTC_4f3c7.js + gmake[1]: выход из каталога «/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-hJ6tJ8» + + exitCode: 0 + - + kind: "try_compile-v1" + backtrace: + - "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules/CheckTypeSize.cmake:114 (try_compile)" + - "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules/CheckTypeSize.cmake:239 (__check_type_size_impl)" + - "CMakeLists.txt:174 (check_type_size)" + directories: + source: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeTmp" + binary: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeTmp" + cmakeVariables: + CMAKE_CXX_COMPILER_CLANG_SCAN_DEPS: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/emscan-deps" + CMAKE_C_FLAGS: "" + CMAKE_C_FLAGS_DEBUG: "-g" + CMAKE_EXE_LINKER_FLAGS: "" + CMAKE_MODULE_PATH: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/cproject/thirdparty/libzip-1.11.3/cmake;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules" + buildResult: + variable: "HAVE___INT8_LIBZIP" + cached: true + stdout: | + Change Dir: '/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeTmp' + + Run Build Command(s): /usr/bin/cmake -E env VERBOSE=1 /usr/bin/gmake -f Makefile cmTC_2fa54/fast + /usr/bin/gmake -f CMakeFiles/cmTC_2fa54.dir/build.make CMakeFiles/cmTC_2fa54.dir/build + gmake[1]: вход в каталог «/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeTmp» + Building C object CMakeFiles/cmTC_2fa54.dir/__INT8_LIBZIP.c.o + "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" -D__STDC_WANT_LIB_EXT1__=1 -MD -MT CMakeFiles/cmTC_2fa54.dir/__INT8_LIBZIP.c.o -MF CMakeFiles/cmTC_2fa54.dir/__INT8_LIBZIP.c.o.d -o CMakeFiles/cmTC_2fa54.dir/__INT8_LIBZIP.c.o -c "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CheckTypeSize/__INT8_LIBZIP.c" + /home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CheckTypeSize/__INT8_LIBZIP.c:25:12: error: use of undeclared identifier '__int8' + 25 | ('0' + ((SIZE / 10000)%10)), + | ^ + /home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CheckTypeSize/__INT8_LIBZIP.c:23:22: note: expanded from macro 'SIZE' + 23 | #define SIZE (sizeof(__int8)) + | ^ + /home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CheckTypeSize/__INT8_LIBZIP.c:26:12: error: use of undeclared identifier '__int8' + 26 | ('0' + ((SIZE / 1000)%10)), + | ^ + /home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CheckTypeSize/__INT8_LIBZIP.c:23:22: note: expanded from macro 'SIZE' + 23 | #define SIZE (sizeof(__int8)) + | ^ + /home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CheckTypeSize/__INT8_LIBZIP.c:27:12: error: use of undeclared identifier '__int8' + 27 | ('0' + ((SIZE / 100)%10)), + | ^ + /home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CheckTypeSize/__INT8_LIBZIP.c:23:22: note: expanded from macro 'SIZE' + 23 | #define SIZE (sizeof(__int8)) + | ^ + /home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CheckTypeSize/__INT8_LIBZIP.c:28:12: error: use of undeclared identifier '__int8' + 28 | ('0' + ((SIZE / 10)%10)), + | ^ + /home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CheckTypeSize/__INT8_LIBZIP.c:23:22: note: expanded from macro 'SIZE' + 23 | #define SIZE (sizeof(__int8)) + | ^ + /home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CheckTypeSize/__INT8_LIBZIP.c:29:12: error: use of undeclared identifier '__int8' + 29 | ('0' + (SIZE % 10)), + | ^ + /home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CheckTypeSize/__INT8_LIBZIP.c:23:22: note: expanded from macro 'SIZE' + 23 | #define SIZE (sizeof(__int8)) + | ^ + 5 errors generated. + gmake[1]: *** [CMakeFiles/cmTC_2fa54.dir/build.make:79: CMakeFiles/cmTC_2fa54.dir/__INT8_LIBZIP.c.o] Ошибка 1 + gmake[1]: выход из каталога «/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeTmp» + gmake: *** [Makefile:127: cmTC_2fa54/fast] Ошибка 2 + + exitCode: 2 + - + kind: "try_compile-v1" + backtrace: + - "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules/CheckTypeSize.cmake:114 (try_compile)" + - "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules/CheckTypeSize.cmake:239 (__check_type_size_impl)" + - "CMakeLists.txt:175 (check_type_size)" + directories: + source: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeTmp" + binary: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeTmp" + cmakeVariables: + CMAKE_CXX_COMPILER_CLANG_SCAN_DEPS: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/emscan-deps" + CMAKE_C_FLAGS: "" + CMAKE_C_FLAGS_DEBUG: "-g" + CMAKE_EXE_LINKER_FLAGS: "" + CMAKE_MODULE_PATH: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/cproject/thirdparty/libzip-1.11.3/cmake;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules" + buildResult: + variable: "HAVE_INT8_T_LIBZIP" + cached: true + stdout: | + Change Dir: '/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeTmp' + + Run Build Command(s): /usr/bin/cmake -E env VERBOSE=1 /usr/bin/gmake -f Makefile cmTC_e9d62/fast + /usr/bin/gmake -f CMakeFiles/cmTC_e9d62.dir/build.make CMakeFiles/cmTC_e9d62.dir/build + gmake[1]: вход в каталог «/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeTmp» + Building C object CMakeFiles/cmTC_e9d62.dir/INT8_T_LIBZIP.c.o + "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" -D__STDC_WANT_LIB_EXT1__=1 -MD -MT CMakeFiles/cmTC_e9d62.dir/INT8_T_LIBZIP.c.o -MF CMakeFiles/cmTC_e9d62.dir/INT8_T_LIBZIP.c.o.d -o CMakeFiles/cmTC_e9d62.dir/INT8_T_LIBZIP.c.o -c "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CheckTypeSize/INT8_T_LIBZIP.c" + Linking C executable cmTC_e9d62.js + /usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_e9d62.dir/link.txt --verbose=1 + "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" @CMakeFiles/cmTC_e9d62.dir/objects1.rsp -o cmTC_e9d62.js @CMakeFiles/cmTC_e9d62.dir/linkLibs.rsp + gmake[1]: выход из каталога «/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeTmp» + + exitCode: 0 + - + kind: "try_compile-v1" + backtrace: + - "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules/CheckTypeSize.cmake:114 (try_compile)" + - "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules/CheckTypeSize.cmake:239 (__check_type_size_impl)" + - "CMakeLists.txt:176 (check_type_size)" + directories: + source: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeTmp" + binary: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeTmp" + cmakeVariables: + CMAKE_CXX_COMPILER_CLANG_SCAN_DEPS: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/emscan-deps" + CMAKE_C_FLAGS: "" + CMAKE_C_FLAGS_DEBUG: "-g" + CMAKE_EXE_LINKER_FLAGS: "" + CMAKE_MODULE_PATH: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/cproject/thirdparty/libzip-1.11.3/cmake;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules" + buildResult: + variable: "HAVE_UINT8_T_LIBZIP" + cached: true + stdout: | + Change Dir: '/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeTmp' + + Run Build Command(s): /usr/bin/cmake -E env VERBOSE=1 /usr/bin/gmake -f Makefile cmTC_3ba88/fast + /usr/bin/gmake -f CMakeFiles/cmTC_3ba88.dir/build.make CMakeFiles/cmTC_3ba88.dir/build + gmake[1]: вход в каталог «/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeTmp» + Building C object CMakeFiles/cmTC_3ba88.dir/UINT8_T_LIBZIP.c.o + "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" -D__STDC_WANT_LIB_EXT1__=1 -MD -MT CMakeFiles/cmTC_3ba88.dir/UINT8_T_LIBZIP.c.o -MF CMakeFiles/cmTC_3ba88.dir/UINT8_T_LIBZIP.c.o.d -o CMakeFiles/cmTC_3ba88.dir/UINT8_T_LIBZIP.c.o -c "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CheckTypeSize/UINT8_T_LIBZIP.c" + Linking C executable cmTC_3ba88.js + /usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_3ba88.dir/link.txt --verbose=1 + "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" @CMakeFiles/cmTC_3ba88.dir/objects1.rsp -o cmTC_3ba88.js @CMakeFiles/cmTC_3ba88.dir/linkLibs.rsp + gmake[1]: выход из каталога «/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeTmp» + + exitCode: 0 + - + kind: "try_compile-v1" + backtrace: + - "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules/CheckTypeSize.cmake:114 (try_compile)" + - "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules/CheckTypeSize.cmake:239 (__check_type_size_impl)" + - "CMakeLists.txt:177 (check_type_size)" + directories: + source: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeTmp" + binary: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeTmp" + cmakeVariables: + CMAKE_CXX_COMPILER_CLANG_SCAN_DEPS: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/emscan-deps" + CMAKE_C_FLAGS: "" + CMAKE_C_FLAGS_DEBUG: "-g" + CMAKE_EXE_LINKER_FLAGS: "" + CMAKE_MODULE_PATH: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/cproject/thirdparty/libzip-1.11.3/cmake;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules" + buildResult: + variable: "HAVE___INT16_LIBZIP" + cached: true + stdout: | + Change Dir: '/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeTmp' + + Run Build Command(s): /usr/bin/cmake -E env VERBOSE=1 /usr/bin/gmake -f Makefile cmTC_166e7/fast + /usr/bin/gmake -f CMakeFiles/cmTC_166e7.dir/build.make CMakeFiles/cmTC_166e7.dir/build + gmake[1]: вход в каталог «/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeTmp» + Building C object CMakeFiles/cmTC_166e7.dir/__INT16_LIBZIP.c.o + "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" -D__STDC_WANT_LIB_EXT1__=1 -MD -MT CMakeFiles/cmTC_166e7.dir/__INT16_LIBZIP.c.o -MF CMakeFiles/cmTC_166e7.dir/__INT16_LIBZIP.c.o.d -o CMakeFiles/cmTC_166e7.dir/__INT16_LIBZIP.c.o -c "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CheckTypeSize/__INT16_LIBZIP.c" + /home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CheckTypeSize/__INT16_LIBZIP.c:25:12: error: use of undeclared identifier '__int16' + 25 | ('0' + ((SIZE / 10000)%10)), + | ^ + /home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CheckTypeSize/__INT16_LIBZIP.c:23:22: note: expanded from macro 'SIZE' + 23 | #define SIZE (sizeof(__int16)) + | ^ + /home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CheckTypeSize/__INT16_LIBZIP.c:26:12: error: use of undeclared identifier '__int16' + 26 | ('0' + ((SIZE / 1000)%10)), + | ^ + /home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CheckTypeSize/__INT16_LIBZIP.c:23:22: note: expanded from macro 'SIZE' + 23 | #define SIZE (sizeof(__int16)) + | ^ + /home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CheckTypeSize/__INT16_LIBZIP.c:27:12: error: use of undeclared identifier '__int16' + 27 | ('0' + ((SIZE / 100)%10)), + | ^ + /home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CheckTypeSize/__INT16_LIBZIP.c:23:22: note: expanded from macro 'SIZE' + 23 | #define SIZE (sizeof(__int16)) + | ^ + /home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CheckTypeSize/__INT16_LIBZIP.c:28:12: error: use of undeclared identifier '__int16' + 28 | ('0' + ((SIZE / 10)%10)), + | ^ + /home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CheckTypeSize/__INT16_LIBZIP.c:23:22: note: expanded from macro 'SIZE' + 23 | #define SIZE (sizeof(__int16)) + | ^ + /home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CheckTypeSize/__INT16_LIBZIP.c:29:12: error: use of undeclared identifier '__int16' + 29 | ('0' + (SIZE % 10)), + | ^ + /home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CheckTypeSize/__INT16_LIBZIP.c:23:22: note: expanded from macro 'SIZE' + 23 | #define SIZE (sizeof(__int16)) + | ^ + 5 errors generated. + gmake[1]: *** [CMakeFiles/cmTC_166e7.dir/build.make:79: CMakeFiles/cmTC_166e7.dir/__INT16_LIBZIP.c.o] Ошибка 1 + gmake[1]: выход из каталога «/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeTmp» + gmake: *** [Makefile:127: cmTC_166e7/fast] Ошибка 2 + + exitCode: 2 + - + kind: "try_compile-v1" + backtrace: + - "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules/CheckTypeSize.cmake:114 (try_compile)" + - "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules/CheckTypeSize.cmake:239 (__check_type_size_impl)" + - "CMakeLists.txt:178 (check_type_size)" + directories: + source: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeTmp" + binary: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeTmp" + cmakeVariables: + CMAKE_CXX_COMPILER_CLANG_SCAN_DEPS: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/emscan-deps" + CMAKE_C_FLAGS: "" + CMAKE_C_FLAGS_DEBUG: "-g" + CMAKE_EXE_LINKER_FLAGS: "" + CMAKE_MODULE_PATH: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/cproject/thirdparty/libzip-1.11.3/cmake;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules" + buildResult: + variable: "HAVE_INT16_T_LIBZIP" + cached: true + stdout: | + Change Dir: '/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeTmp' + + Run Build Command(s): /usr/bin/cmake -E env VERBOSE=1 /usr/bin/gmake -f Makefile cmTC_d8d32/fast + /usr/bin/gmake -f CMakeFiles/cmTC_d8d32.dir/build.make CMakeFiles/cmTC_d8d32.dir/build + gmake[1]: вход в каталог «/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeTmp» + Building C object CMakeFiles/cmTC_d8d32.dir/INT16_T_LIBZIP.c.o + "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" -D__STDC_WANT_LIB_EXT1__=1 -MD -MT CMakeFiles/cmTC_d8d32.dir/INT16_T_LIBZIP.c.o -MF CMakeFiles/cmTC_d8d32.dir/INT16_T_LIBZIP.c.o.d -o CMakeFiles/cmTC_d8d32.dir/INT16_T_LIBZIP.c.o -c "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CheckTypeSize/INT16_T_LIBZIP.c" + Linking C executable cmTC_d8d32.js + /usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_d8d32.dir/link.txt --verbose=1 + "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" @CMakeFiles/cmTC_d8d32.dir/objects1.rsp -o cmTC_d8d32.js @CMakeFiles/cmTC_d8d32.dir/linkLibs.rsp + gmake[1]: выход из каталога «/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeTmp» + + exitCode: 0 + - + kind: "try_compile-v1" + backtrace: + - "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules/CheckTypeSize.cmake:114 (try_compile)" + - "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules/CheckTypeSize.cmake:239 (__check_type_size_impl)" + - "CMakeLists.txt:179 (check_type_size)" + directories: + source: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeTmp" + binary: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeTmp" + cmakeVariables: + CMAKE_CXX_COMPILER_CLANG_SCAN_DEPS: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/emscan-deps" + CMAKE_C_FLAGS: "" + CMAKE_C_FLAGS_DEBUG: "-g" + CMAKE_EXE_LINKER_FLAGS: "" + CMAKE_MODULE_PATH: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/cproject/thirdparty/libzip-1.11.3/cmake;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules" + buildResult: + variable: "HAVE_UINT16_T_LIBZIP" + cached: true + stdout: | + Change Dir: '/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeTmp' + + Run Build Command(s): /usr/bin/cmake -E env VERBOSE=1 /usr/bin/gmake -f Makefile cmTC_f212a/fast + /usr/bin/gmake -f CMakeFiles/cmTC_f212a.dir/build.make CMakeFiles/cmTC_f212a.dir/build + gmake[1]: вход в каталог «/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeTmp» + Building C object CMakeFiles/cmTC_f212a.dir/UINT16_T_LIBZIP.c.o + "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" -D__STDC_WANT_LIB_EXT1__=1 -MD -MT CMakeFiles/cmTC_f212a.dir/UINT16_T_LIBZIP.c.o -MF CMakeFiles/cmTC_f212a.dir/UINT16_T_LIBZIP.c.o.d -o CMakeFiles/cmTC_f212a.dir/UINT16_T_LIBZIP.c.o -c "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CheckTypeSize/UINT16_T_LIBZIP.c" + Linking C executable cmTC_f212a.js + /usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_f212a.dir/link.txt --verbose=1 + "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" @CMakeFiles/cmTC_f212a.dir/objects1.rsp -o cmTC_f212a.js @CMakeFiles/cmTC_f212a.dir/linkLibs.rsp + gmake[1]: выход из каталога «/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeTmp» + + exitCode: 0 + - + kind: "try_compile-v1" + backtrace: + - "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules/CheckTypeSize.cmake:114 (try_compile)" + - "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules/CheckTypeSize.cmake:239 (__check_type_size_impl)" + - "CMakeLists.txt:180 (check_type_size)" + directories: + source: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeTmp" + binary: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeTmp" + cmakeVariables: + CMAKE_CXX_COMPILER_CLANG_SCAN_DEPS: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/emscan-deps" + CMAKE_C_FLAGS: "" + CMAKE_C_FLAGS_DEBUG: "-g" + CMAKE_EXE_LINKER_FLAGS: "" + CMAKE_MODULE_PATH: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/cproject/thirdparty/libzip-1.11.3/cmake;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules" + buildResult: + variable: "HAVE___INT32_LIBZIP" + cached: true + stdout: | + Change Dir: '/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeTmp' + + Run Build Command(s): /usr/bin/cmake -E env VERBOSE=1 /usr/bin/gmake -f Makefile cmTC_4c735/fast + /usr/bin/gmake -f CMakeFiles/cmTC_4c735.dir/build.make CMakeFiles/cmTC_4c735.dir/build + gmake[1]: вход в каталог «/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeTmp» + Building C object CMakeFiles/cmTC_4c735.dir/__INT32_LIBZIP.c.o + "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" -D__STDC_WANT_LIB_EXT1__=1 -MD -MT CMakeFiles/cmTC_4c735.dir/__INT32_LIBZIP.c.o -MF CMakeFiles/cmTC_4c735.dir/__INT32_LIBZIP.c.o.d -o CMakeFiles/cmTC_4c735.dir/__INT32_LIBZIP.c.o -c "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CheckTypeSize/__INT32_LIBZIP.c" + /home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CheckTypeSize/__INT32_LIBZIP.c:25:12: error: use of undeclared identifier '__int32' + 25 | ('0' + ((SIZE / 10000)%10)), + | ^ + /home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CheckTypeSize/__INT32_LIBZIP.c:23:22: note: expanded from macro 'SIZE' + 23 | #define SIZE (sizeof(__int32)) + | ^ + /home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CheckTypeSize/__INT32_LIBZIP.c:26:12: error: use of undeclared identifier '__int32' + 26 | ('0' + ((SIZE / 1000)%10)), + | ^ + /home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CheckTypeSize/__INT32_LIBZIP.c:23:22: note: expanded from macro 'SIZE' + 23 | #define SIZE (sizeof(__int32)) + | ^ + /home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CheckTypeSize/__INT32_LIBZIP.c:27:12: error: use of undeclared identifier '__int32' + 27 | ('0' + ((SIZE / 100)%10)), + | ^ + /home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CheckTypeSize/__INT32_LIBZIP.c:23:22: note: expanded from macro 'SIZE' + 23 | #define SIZE (sizeof(__int32)) + | ^ + /home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CheckTypeSize/__INT32_LIBZIP.c:28:12: error: use of undeclared identifier '__int32' + 28 | ('0' + ((SIZE / 10)%10)), + | ^ + /home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CheckTypeSize/__INT32_LIBZIP.c:23:22: note: expanded from macro 'SIZE' + 23 | #define SIZE (sizeof(__int32)) + | ^ + /home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CheckTypeSize/__INT32_LIBZIP.c:29:12: error: use of undeclared identifier '__int32' + 29 | ('0' + (SIZE % 10)), + | ^ + /home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CheckTypeSize/__INT32_LIBZIP.c:23:22: note: expanded from macro 'SIZE' + 23 | #define SIZE (sizeof(__int32)) + | ^ + 5 errors generated. + gmake[1]: *** [CMakeFiles/cmTC_4c735.dir/build.make:79: CMakeFiles/cmTC_4c735.dir/__INT32_LIBZIP.c.o] Ошибка 1 + gmake[1]: выход из каталога «/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeTmp» + gmake: *** [Makefile:127: cmTC_4c735/fast] Ошибка 2 + + exitCode: 2 + - + kind: "try_compile-v1" + backtrace: + - "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules/CheckTypeSize.cmake:114 (try_compile)" + - "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules/CheckTypeSize.cmake:239 (__check_type_size_impl)" + - "CMakeLists.txt:181 (check_type_size)" + directories: + source: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeTmp" + binary: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeTmp" + cmakeVariables: + CMAKE_CXX_COMPILER_CLANG_SCAN_DEPS: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/emscan-deps" + CMAKE_C_FLAGS: "" + CMAKE_C_FLAGS_DEBUG: "-g" + CMAKE_EXE_LINKER_FLAGS: "" + CMAKE_MODULE_PATH: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/cproject/thirdparty/libzip-1.11.3/cmake;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules" + buildResult: + variable: "HAVE_INT32_T_LIBZIP" + cached: true + stdout: | + Change Dir: '/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeTmp' + + Run Build Command(s): /usr/bin/cmake -E env VERBOSE=1 /usr/bin/gmake -f Makefile cmTC_8eb1c/fast + /usr/bin/gmake -f CMakeFiles/cmTC_8eb1c.dir/build.make CMakeFiles/cmTC_8eb1c.dir/build + gmake[1]: вход в каталог «/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeTmp» + Building C object CMakeFiles/cmTC_8eb1c.dir/INT32_T_LIBZIP.c.o + "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" -D__STDC_WANT_LIB_EXT1__=1 -MD -MT CMakeFiles/cmTC_8eb1c.dir/INT32_T_LIBZIP.c.o -MF CMakeFiles/cmTC_8eb1c.dir/INT32_T_LIBZIP.c.o.d -o CMakeFiles/cmTC_8eb1c.dir/INT32_T_LIBZIP.c.o -c "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CheckTypeSize/INT32_T_LIBZIP.c" + Linking C executable cmTC_8eb1c.js + /usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_8eb1c.dir/link.txt --verbose=1 + "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" @CMakeFiles/cmTC_8eb1c.dir/objects1.rsp -o cmTC_8eb1c.js @CMakeFiles/cmTC_8eb1c.dir/linkLibs.rsp + gmake[1]: выход из каталога «/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeTmp» + + exitCode: 0 + - + kind: "try_compile-v1" + backtrace: + - "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules/CheckTypeSize.cmake:114 (try_compile)" + - "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules/CheckTypeSize.cmake:239 (__check_type_size_impl)" + - "CMakeLists.txt:182 (check_type_size)" + directories: + source: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeTmp" + binary: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeTmp" + cmakeVariables: + CMAKE_CXX_COMPILER_CLANG_SCAN_DEPS: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/emscan-deps" + CMAKE_C_FLAGS: "" + CMAKE_C_FLAGS_DEBUG: "-g" + CMAKE_EXE_LINKER_FLAGS: "" + CMAKE_MODULE_PATH: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/cproject/thirdparty/libzip-1.11.3/cmake;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules" + buildResult: + variable: "HAVE_UINT32_T_LIBZIP" + cached: true + stdout: | + Change Dir: '/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeTmp' + + Run Build Command(s): /usr/bin/cmake -E env VERBOSE=1 /usr/bin/gmake -f Makefile cmTC_a4925/fast + /usr/bin/gmake -f CMakeFiles/cmTC_a4925.dir/build.make CMakeFiles/cmTC_a4925.dir/build + gmake[1]: вход в каталог «/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeTmp» + Building C object CMakeFiles/cmTC_a4925.dir/UINT32_T_LIBZIP.c.o + "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" -D__STDC_WANT_LIB_EXT1__=1 -MD -MT CMakeFiles/cmTC_a4925.dir/UINT32_T_LIBZIP.c.o -MF CMakeFiles/cmTC_a4925.dir/UINT32_T_LIBZIP.c.o.d -o CMakeFiles/cmTC_a4925.dir/UINT32_T_LIBZIP.c.o -c "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CheckTypeSize/UINT32_T_LIBZIP.c" + Linking C executable cmTC_a4925.js + /usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_a4925.dir/link.txt --verbose=1 + "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" @CMakeFiles/cmTC_a4925.dir/objects1.rsp -o cmTC_a4925.js @CMakeFiles/cmTC_a4925.dir/linkLibs.rsp + gmake[1]: выход из каталога «/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeTmp» + + exitCode: 0 + - + kind: "try_compile-v1" + backtrace: + - "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules/CheckTypeSize.cmake:114 (try_compile)" + - "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules/CheckTypeSize.cmake:239 (__check_type_size_impl)" + - "CMakeLists.txt:183 (check_type_size)" + directories: + source: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeTmp" + binary: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeTmp" + cmakeVariables: + CMAKE_CXX_COMPILER_CLANG_SCAN_DEPS: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/emscan-deps" + CMAKE_C_FLAGS: "" + CMAKE_C_FLAGS_DEBUG: "-g" + CMAKE_EXE_LINKER_FLAGS: "" + CMAKE_MODULE_PATH: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/cproject/thirdparty/libzip-1.11.3/cmake;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules" + buildResult: + variable: "HAVE___INT64_LIBZIP" + cached: true + stdout: | + Change Dir: '/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeTmp' + + Run Build Command(s): /usr/bin/cmake -E env VERBOSE=1 /usr/bin/gmake -f Makefile cmTC_5875b/fast + /usr/bin/gmake -f CMakeFiles/cmTC_5875b.dir/build.make CMakeFiles/cmTC_5875b.dir/build + gmake[1]: вход в каталог «/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeTmp» + Building C object CMakeFiles/cmTC_5875b.dir/__INT64_LIBZIP.c.o + "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" -D__STDC_WANT_LIB_EXT1__=1 -MD -MT CMakeFiles/cmTC_5875b.dir/__INT64_LIBZIP.c.o -MF CMakeFiles/cmTC_5875b.dir/__INT64_LIBZIP.c.o.d -o CMakeFiles/cmTC_5875b.dir/__INT64_LIBZIP.c.o -c "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CheckTypeSize/__INT64_LIBZIP.c" + /home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CheckTypeSize/__INT64_LIBZIP.c:25:12: error: use of undeclared identifier '__int64' + 25 | ('0' + ((SIZE / 10000)%10)), + | ^ + /home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CheckTypeSize/__INT64_LIBZIP.c:23:22: note: expanded from macro 'SIZE' + 23 | #define SIZE (sizeof(__int64)) + | ^ + /home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CheckTypeSize/__INT64_LIBZIP.c:26:12: error: use of undeclared identifier '__int64' + 26 | ('0' + ((SIZE / 1000)%10)), + | ^ + /home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CheckTypeSize/__INT64_LIBZIP.c:23:22: note: expanded from macro 'SIZE' + 23 | #define SIZE (sizeof(__int64)) + | ^ + /home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CheckTypeSize/__INT64_LIBZIP.c:27:12: error: use of undeclared identifier '__int64' + 27 | ('0' + ((SIZE / 100)%10)), + | ^ + /home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CheckTypeSize/__INT64_LIBZIP.c:23:22: note: expanded from macro 'SIZE' + 23 | #define SIZE (sizeof(__int64)) + | ^ + /home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CheckTypeSize/__INT64_LIBZIP.c:28:12: error: use of undeclared identifier '__int64' + 28 | ('0' + ((SIZE / 10)%10)), + | ^ + /home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CheckTypeSize/__INT64_LIBZIP.c:23:22: note: expanded from macro 'SIZE' + 23 | #define SIZE (sizeof(__int64)) + | ^ + /home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CheckTypeSize/__INT64_LIBZIP.c:29:12: error: use of undeclared identifier '__int64' + 29 | ('0' + (SIZE % 10)), + | ^ + /home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CheckTypeSize/__INT64_LIBZIP.c:23:22: note: expanded from macro 'SIZE' + 23 | #define SIZE (sizeof(__int64)) + | ^ + 5 errors generated. + gmake[1]: *** [CMakeFiles/cmTC_5875b.dir/build.make:79: CMakeFiles/cmTC_5875b.dir/__INT64_LIBZIP.c.o] Ошибка 1 + gmake[1]: выход из каталога «/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeTmp» + gmake: *** [Makefile:127: cmTC_5875b/fast] Ошибка 2 + + exitCode: 2 + - + kind: "try_compile-v1" + backtrace: + - "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules/CheckTypeSize.cmake:114 (try_compile)" + - "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules/CheckTypeSize.cmake:239 (__check_type_size_impl)" + - "CMakeLists.txt:184 (check_type_size)" + directories: + source: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeTmp" + binary: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeTmp" + cmakeVariables: + CMAKE_CXX_COMPILER_CLANG_SCAN_DEPS: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/emscan-deps" + CMAKE_C_FLAGS: "" + CMAKE_C_FLAGS_DEBUG: "-g" + CMAKE_EXE_LINKER_FLAGS: "" + CMAKE_MODULE_PATH: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/cproject/thirdparty/libzip-1.11.3/cmake;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules" + buildResult: + variable: "HAVE_INT64_T_LIBZIP" + cached: true + stdout: | + Change Dir: '/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeTmp' + + Run Build Command(s): /usr/bin/cmake -E env VERBOSE=1 /usr/bin/gmake -f Makefile cmTC_87ee4/fast + /usr/bin/gmake -f CMakeFiles/cmTC_87ee4.dir/build.make CMakeFiles/cmTC_87ee4.dir/build + gmake[1]: вход в каталог «/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeTmp» + Building C object CMakeFiles/cmTC_87ee4.dir/INT64_T_LIBZIP.c.o + "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" -D__STDC_WANT_LIB_EXT1__=1 -MD -MT CMakeFiles/cmTC_87ee4.dir/INT64_T_LIBZIP.c.o -MF CMakeFiles/cmTC_87ee4.dir/INT64_T_LIBZIP.c.o.d -o CMakeFiles/cmTC_87ee4.dir/INT64_T_LIBZIP.c.o -c "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CheckTypeSize/INT64_T_LIBZIP.c" + Linking C executable cmTC_87ee4.js + /usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_87ee4.dir/link.txt --verbose=1 + "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" @CMakeFiles/cmTC_87ee4.dir/objects1.rsp -o cmTC_87ee4.js @CMakeFiles/cmTC_87ee4.dir/linkLibs.rsp + gmake[1]: выход из каталога «/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeTmp» + + exitCode: 0 + - + kind: "try_compile-v1" + backtrace: + - "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules/CheckTypeSize.cmake:114 (try_compile)" + - "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules/CheckTypeSize.cmake:239 (__check_type_size_impl)" + - "CMakeLists.txt:185 (check_type_size)" + directories: + source: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeTmp" + binary: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeTmp" + cmakeVariables: + CMAKE_CXX_COMPILER_CLANG_SCAN_DEPS: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/emscan-deps" + CMAKE_C_FLAGS: "" + CMAKE_C_FLAGS_DEBUG: "-g" + CMAKE_EXE_LINKER_FLAGS: "" + CMAKE_MODULE_PATH: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/cproject/thirdparty/libzip-1.11.3/cmake;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules" + buildResult: + variable: "HAVE_UINT64_T_LIBZIP" + cached: true + stdout: | + Change Dir: '/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeTmp' + + Run Build Command(s): /usr/bin/cmake -E env VERBOSE=1 /usr/bin/gmake -f Makefile cmTC_0376b/fast + /usr/bin/gmake -f CMakeFiles/cmTC_0376b.dir/build.make CMakeFiles/cmTC_0376b.dir/build + gmake[1]: вход в каталог «/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeTmp» + Building C object CMakeFiles/cmTC_0376b.dir/UINT64_T_LIBZIP.c.o + "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" -D__STDC_WANT_LIB_EXT1__=1 -MD -MT CMakeFiles/cmTC_0376b.dir/UINT64_T_LIBZIP.c.o -MF CMakeFiles/cmTC_0376b.dir/UINT64_T_LIBZIP.c.o.d -o CMakeFiles/cmTC_0376b.dir/UINT64_T_LIBZIP.c.o -c "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CheckTypeSize/UINT64_T_LIBZIP.c" + Linking C executable cmTC_0376b.js + /usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_0376b.dir/link.txt --verbose=1 + "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" @CMakeFiles/cmTC_0376b.dir/objects1.rsp -o cmTC_0376b.js @CMakeFiles/cmTC_0376b.dir/linkLibs.rsp + gmake[1]: выход из каталога «/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeTmp» + + exitCode: 0 + - + kind: "try_compile-v1" + backtrace: + - "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules/CheckTypeSize.cmake:114 (try_compile)" + - "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules/CheckTypeSize.cmake:239 (__check_type_size_impl)" + - "CMakeLists.txt:186 (check_type_size)" + directories: + source: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeTmp" + binary: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeTmp" + cmakeVariables: + CMAKE_CXX_COMPILER_CLANG_SCAN_DEPS: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/emscan-deps" + CMAKE_C_FLAGS: "" + CMAKE_C_FLAGS_DEBUG: "-g" + CMAKE_EXE_LINKER_FLAGS: "" + CMAKE_MODULE_PATH: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/cproject/thirdparty/libzip-1.11.3/cmake;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules" + buildResult: + variable: "HAVE_SHORT_LIBZIP" + cached: true + stdout: | + Change Dir: '/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeTmp' + + Run Build Command(s): /usr/bin/cmake -E env VERBOSE=1 /usr/bin/gmake -f Makefile cmTC_55aea/fast + /usr/bin/gmake -f CMakeFiles/cmTC_55aea.dir/build.make CMakeFiles/cmTC_55aea.dir/build + gmake[1]: вход в каталог «/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeTmp» + Building C object CMakeFiles/cmTC_55aea.dir/SHORT_LIBZIP.c.o + "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" -D__STDC_WANT_LIB_EXT1__=1 -MD -MT CMakeFiles/cmTC_55aea.dir/SHORT_LIBZIP.c.o -MF CMakeFiles/cmTC_55aea.dir/SHORT_LIBZIP.c.o.d -o CMakeFiles/cmTC_55aea.dir/SHORT_LIBZIP.c.o -c "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CheckTypeSize/SHORT_LIBZIP.c" + Linking C executable cmTC_55aea.js + /usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_55aea.dir/link.txt --verbose=1 + "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" @CMakeFiles/cmTC_55aea.dir/objects1.rsp -o cmTC_55aea.js @CMakeFiles/cmTC_55aea.dir/linkLibs.rsp + gmake[1]: выход из каталога «/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeTmp» + + exitCode: 0 + - + kind: "try_compile-v1" + backtrace: + - "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules/CheckTypeSize.cmake:114 (try_compile)" + - "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules/CheckTypeSize.cmake:239 (__check_type_size_impl)" + - "CMakeLists.txt:187 (check_type_size)" + directories: + source: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeTmp" + binary: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeTmp" + cmakeVariables: + CMAKE_CXX_COMPILER_CLANG_SCAN_DEPS: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/emscan-deps" + CMAKE_C_FLAGS: "" + CMAKE_C_FLAGS_DEBUG: "-g" + CMAKE_EXE_LINKER_FLAGS: "" + CMAKE_MODULE_PATH: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/cproject/thirdparty/libzip-1.11.3/cmake;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules" + buildResult: + variable: "HAVE_INT_LIBZIP" + cached: true + stdout: | + Change Dir: '/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeTmp' + + Run Build Command(s): /usr/bin/cmake -E env VERBOSE=1 /usr/bin/gmake -f Makefile cmTC_23885/fast + /usr/bin/gmake -f CMakeFiles/cmTC_23885.dir/build.make CMakeFiles/cmTC_23885.dir/build + gmake[1]: вход в каталог «/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeTmp» + Building C object CMakeFiles/cmTC_23885.dir/INT_LIBZIP.c.o + "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" -D__STDC_WANT_LIB_EXT1__=1 -MD -MT CMakeFiles/cmTC_23885.dir/INT_LIBZIP.c.o -MF CMakeFiles/cmTC_23885.dir/INT_LIBZIP.c.o.d -o CMakeFiles/cmTC_23885.dir/INT_LIBZIP.c.o -c "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CheckTypeSize/INT_LIBZIP.c" + Linking C executable cmTC_23885.js + /usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_23885.dir/link.txt --verbose=1 + "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" @CMakeFiles/cmTC_23885.dir/objects1.rsp -o cmTC_23885.js @CMakeFiles/cmTC_23885.dir/linkLibs.rsp + gmake[1]: выход из каталога «/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeTmp» + + exitCode: 0 + - + kind: "try_compile-v1" + backtrace: + - "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules/CheckTypeSize.cmake:114 (try_compile)" + - "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules/CheckTypeSize.cmake:239 (__check_type_size_impl)" + - "CMakeLists.txt:188 (check_type_size)" + directories: + source: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeTmp" + binary: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeTmp" + cmakeVariables: + CMAKE_CXX_COMPILER_CLANG_SCAN_DEPS: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/emscan-deps" + CMAKE_C_FLAGS: "" + CMAKE_C_FLAGS_DEBUG: "-g" + CMAKE_EXE_LINKER_FLAGS: "" + CMAKE_MODULE_PATH: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/cproject/thirdparty/libzip-1.11.3/cmake;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules" + buildResult: + variable: "HAVE_LONG_LIBZIP" + cached: true + stdout: | + Change Dir: '/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeTmp' + + Run Build Command(s): /usr/bin/cmake -E env VERBOSE=1 /usr/bin/gmake -f Makefile cmTC_ff5dc/fast + /usr/bin/gmake -f CMakeFiles/cmTC_ff5dc.dir/build.make CMakeFiles/cmTC_ff5dc.dir/build + gmake[1]: вход в каталог «/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeTmp» + Building C object CMakeFiles/cmTC_ff5dc.dir/LONG_LIBZIP.c.o + "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" -D__STDC_WANT_LIB_EXT1__=1 -MD -MT CMakeFiles/cmTC_ff5dc.dir/LONG_LIBZIP.c.o -MF CMakeFiles/cmTC_ff5dc.dir/LONG_LIBZIP.c.o.d -o CMakeFiles/cmTC_ff5dc.dir/LONG_LIBZIP.c.o -c "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CheckTypeSize/LONG_LIBZIP.c" + Linking C executable cmTC_ff5dc.js + /usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_ff5dc.dir/link.txt --verbose=1 + "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" @CMakeFiles/cmTC_ff5dc.dir/objects1.rsp -o cmTC_ff5dc.js @CMakeFiles/cmTC_ff5dc.dir/linkLibs.rsp + gmake[1]: выход из каталога «/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeTmp» + + exitCode: 0 + - + kind: "try_compile-v1" + backtrace: + - "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules/CheckTypeSize.cmake:114 (try_compile)" + - "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules/CheckTypeSize.cmake:239 (__check_type_size_impl)" + - "CMakeLists.txt:189 (check_type_size)" + directories: + source: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeTmp" + binary: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeTmp" + cmakeVariables: + CMAKE_CXX_COMPILER_CLANG_SCAN_DEPS: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/emscan-deps" + CMAKE_C_FLAGS: "" + CMAKE_C_FLAGS_DEBUG: "-g" + CMAKE_EXE_LINKER_FLAGS: "" + CMAKE_MODULE_PATH: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/cproject/thirdparty/libzip-1.11.3/cmake;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules" + buildResult: + variable: "HAVE_LONG_LONG_LIBZIP" + cached: true + stdout: | + Change Dir: '/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeTmp' + + Run Build Command(s): /usr/bin/cmake -E env VERBOSE=1 /usr/bin/gmake -f Makefile cmTC_c0c7a/fast + /usr/bin/gmake -f CMakeFiles/cmTC_c0c7a.dir/build.make CMakeFiles/cmTC_c0c7a.dir/build + gmake[1]: вход в каталог «/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeTmp» + Building C object CMakeFiles/cmTC_c0c7a.dir/LONG_LONG_LIBZIP.c.o + "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" -D__STDC_WANT_LIB_EXT1__=1 -MD -MT CMakeFiles/cmTC_c0c7a.dir/LONG_LONG_LIBZIP.c.o -MF CMakeFiles/cmTC_c0c7a.dir/LONG_LONG_LIBZIP.c.o.d -o CMakeFiles/cmTC_c0c7a.dir/LONG_LONG_LIBZIP.c.o -c "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CheckTypeSize/LONG_LONG_LIBZIP.c" + Linking C executable cmTC_c0c7a.js + /usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_c0c7a.dir/link.txt --verbose=1 + "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" @CMakeFiles/cmTC_c0c7a.dir/objects1.rsp -o cmTC_c0c7a.js @CMakeFiles/cmTC_c0c7a.dir/linkLibs.rsp + gmake[1]: выход из каталога «/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeTmp» + + exitCode: 0 + - + kind: "try_compile-v1" + backtrace: + - "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules/CheckTypeSize.cmake:114 (try_compile)" + - "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules/CheckTypeSize.cmake:239 (__check_type_size_impl)" + - "CMakeLists.txt:190 (check_type_size)" + directories: + source: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeTmp" + binary: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeTmp" + cmakeVariables: + CMAKE_CXX_COMPILER_CLANG_SCAN_DEPS: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/emscan-deps" + CMAKE_C_FLAGS: "" + CMAKE_C_FLAGS_DEBUG: "-g" + CMAKE_EXE_LINKER_FLAGS: "" + CMAKE_MODULE_PATH: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/cproject/thirdparty/libzip-1.11.3/cmake;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules" + buildResult: + variable: "HAVE_SIZEOF_OFF_T" + cached: true + stdout: | + Change Dir: '/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeTmp' + + Run Build Command(s): /usr/bin/cmake -E env VERBOSE=1 /usr/bin/gmake -f Makefile cmTC_a77c3/fast + /usr/bin/gmake -f CMakeFiles/cmTC_a77c3.dir/build.make CMakeFiles/cmTC_a77c3.dir/build + gmake[1]: вход в каталог «/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeTmp» + Building C object CMakeFiles/cmTC_a77c3.dir/SIZEOF_OFF_T.c.o + "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" -D__STDC_WANT_LIB_EXT1__=1 -MD -MT CMakeFiles/cmTC_a77c3.dir/SIZEOF_OFF_T.c.o -MF CMakeFiles/cmTC_a77c3.dir/SIZEOF_OFF_T.c.o.d -o CMakeFiles/cmTC_a77c3.dir/SIZEOF_OFF_T.c.o -c "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CheckTypeSize/SIZEOF_OFF_T.c" + Linking C executable cmTC_a77c3.js + /usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_a77c3.dir/link.txt --verbose=1 + "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" @CMakeFiles/cmTC_a77c3.dir/objects1.rsp -o cmTC_a77c3.js @CMakeFiles/cmTC_a77c3.dir/linkLibs.rsp + gmake[1]: выход из каталога «/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeTmp» + + exitCode: 0 + - + kind: "try_compile-v1" + backtrace: + - "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules/CheckTypeSize.cmake:114 (try_compile)" + - "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules/CheckTypeSize.cmake:239 (__check_type_size_impl)" + - "CMakeLists.txt:191 (check_type_size)" + directories: + source: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeTmp" + binary: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeTmp" + cmakeVariables: + CMAKE_CXX_COMPILER_CLANG_SCAN_DEPS: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/emscan-deps" + CMAKE_C_FLAGS: "" + CMAKE_C_FLAGS_DEBUG: "-g" + CMAKE_EXE_LINKER_FLAGS: "" + CMAKE_MODULE_PATH: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/cproject/thirdparty/libzip-1.11.3/cmake;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules" + buildResult: + variable: "HAVE_SIZEOF_SIZE_T" + cached: true + stdout: | + Change Dir: '/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeTmp' + + Run Build Command(s): /usr/bin/cmake -E env VERBOSE=1 /usr/bin/gmake -f Makefile cmTC_a0644/fast + /usr/bin/gmake -f CMakeFiles/cmTC_a0644.dir/build.make CMakeFiles/cmTC_a0644.dir/build + gmake[1]: вход в каталог «/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeTmp» + Building C object CMakeFiles/cmTC_a0644.dir/SIZEOF_SIZE_T.c.o + "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" -D__STDC_WANT_LIB_EXT1__=1 -MD -MT CMakeFiles/cmTC_a0644.dir/SIZEOF_SIZE_T.c.o -MF CMakeFiles/cmTC_a0644.dir/SIZEOF_SIZE_T.c.o.d -o CMakeFiles/cmTC_a0644.dir/SIZEOF_SIZE_T.c.o -c "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CheckTypeSize/SIZEOF_SIZE_T.c" + Linking C executable cmTC_a0644.js + /usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_a0644.dir/link.txt --verbose=1 + "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" @CMakeFiles/cmTC_a0644.dir/objects1.rsp -o cmTC_a0644.js @CMakeFiles/cmTC_a0644.dir/linkLibs.rsp + gmake[1]: выход из каталога «/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeTmp» + + exitCode: 0 + - + kind: "try_compile-v1" + backtrace: + - "/usr/share/cmake-3.28/Modules/Internal/CheckSourceCompiles.cmake:101 (try_compile)" + - "/usr/share/cmake-3.28/Modules/CheckCSourceCompiles.cmake:52 (cmake_check_source_compiles)" + - "CMakeLists.txt:193 (check_c_source_compiles)" + checks: + - "Performing Test HAVE_FICLONERANGE" + directories: + source: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-KWMEJA" + binary: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-KWMEJA" + cmakeVariables: + CMAKE_CXX_COMPILER_CLANG_SCAN_DEPS: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/emscan-deps" + CMAKE_C_FLAGS: "" + CMAKE_C_FLAGS_DEBUG: "-g" + CMAKE_EXE_LINKER_FLAGS: "" + CMAKE_MODULE_PATH: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/cproject/thirdparty/libzip-1.11.3/cmake;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules" + buildResult: + variable: "HAVE_FICLONERANGE" + cached: true + stdout: | + Change Dir: '/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-KWMEJA' + + Run Build Command(s): /usr/bin/cmake -E env VERBOSE=1 /usr/bin/gmake -f Makefile cmTC_8cfda/fast + /usr/bin/gmake -f CMakeFiles/cmTC_8cfda.dir/build.make CMakeFiles/cmTC_8cfda.dir/build + gmake[1]: вход в каталог «/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-KWMEJA» + Building C object CMakeFiles/cmTC_8cfda.dir/src.c.o + "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" -DHAVE_FICLONERANGE -D__STDC_WANT_LIB_EXT1__=1 -MD -MT CMakeFiles/cmTC_8cfda.dir/src.c.o -MF CMakeFiles/cmTC_8cfda.dir/src.c.o.d -o CMakeFiles/cmTC_8cfda.dir/src.c.o -c "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-KWMEJA/src.c" + /home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-KWMEJA/src.c:2:10: fatal error: 'linux/fs.h' file not found + 2 | #include + | ^~~~~~~~~~~~ + 1 error generated. + gmake[1]: *** [CMakeFiles/cmTC_8cfda.dir/build.make:79: CMakeFiles/cmTC_8cfda.dir/src.c.o] Ошибка 1 + gmake[1]: выход из каталога «/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-KWMEJA» + gmake: *** [Makefile:127: cmTC_8cfda/fast] Ошибка 2 + + exitCode: 2 + - + kind: "try_compile-v1" + backtrace: + - "/usr/share/cmake-3.28/Modules/CheckFunctionExists.cmake:86 (try_compile)" + - "src/CMakeLists.txt:1 (check_function_exists)" + checks: + - "Looking for getopt" + directories: + source: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-e6ui2R" + binary: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-e6ui2R" + cmakeVariables: + CMAKE_CXX_COMPILER_CLANG_SCAN_DEPS: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/emscan-deps" + CMAKE_C_FLAGS: "" + CMAKE_C_FLAGS_DEBUG: "-g" + CMAKE_EXE_LINKER_FLAGS: "" + CMAKE_MODULE_PATH: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/cproject/thirdparty/libzip-1.11.3/cmake;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules" + buildResult: + variable: "HAVE_GETOPT" + cached: true + stdout: | + Change Dir: '/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-e6ui2R' + + Run Build Command(s): /usr/bin/cmake -E env VERBOSE=1 /usr/bin/gmake -f Makefile cmTC_ade70/fast + /usr/bin/gmake -f CMakeFiles/cmTC_ade70.dir/build.make CMakeFiles/cmTC_ade70.dir/build + gmake[1]: вход в каталог «/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-e6ui2R» + Building C object CMakeFiles/cmTC_ade70.dir/CheckFunctionExists.c.o + "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" -D__STDC_WANT_LIB_EXT1__=1 -DCHECK_FUNCTION_EXISTS=getopt -MD -MT CMakeFiles/cmTC_ade70.dir/CheckFunctionExists.c.o -MF CMakeFiles/cmTC_ade70.dir/CheckFunctionExists.c.o.d -o CMakeFiles/cmTC_ade70.dir/CheckFunctionExists.c.o -c "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-e6ui2R/CheckFunctionExists.c" + Linking C executable cmTC_ade70.js + /usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_ade70.dir/link.txt --verbose=1 + "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" -DCHECK_FUNCTION_EXISTS=getopt @CMakeFiles/cmTC_ade70.dir/objects1.rsp -o cmTC_ade70.js + wasm-ld: warning: function signature mismatch: getopt + >>> defined as () -> i32 in CMakeFiles/cmTC_ade70.dir/CheckFunctionExists.c.o + >>> defined as (i32, i32, i32) -> i32 in /home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/cache/sysroot/lib/wasm32-emscripten/libc-debug.a(getopt.o) + gmake[1]: выход из каталога «/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-e6ui2R» + + exitCode: 0 +... diff --git a/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeDirectoryInformation.cmake b/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeDirectoryInformation.cmake new file mode 100644 index 0000000..ea55061 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeDirectoryInformation.cmake @@ -0,0 +1,16 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.28 + +# Relative path conversion top directories. +set(CMAKE_RELATIVE_PATH_TOP_SOURCE "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3") +set(CMAKE_RELATIVE_PATH_TOP_BINARY "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake") + +# Force unix paths in dependencies. +set(CMAKE_FORCE_UNIX_PATHS 1) + + +# The C and CXX include file regular expressions for this directory. +set(CMAKE_C_INCLUDE_REGEX_SCAN "^.*$") +set(CMAKE_C_INCLUDE_REGEX_COMPLAIN "^$") +set(CMAKE_CXX_INCLUDE_REGEX_SCAN ${CMAKE_C_INCLUDE_REGEX_SCAN}) +set(CMAKE_CXX_INCLUDE_REGEX_COMPLAIN ${CMAKE_C_INCLUDE_REGEX_COMPLAIN}) diff --git a/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeRuleHashes.txt b/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeRuleHashes.txt new file mode 100644 index 0000000..d471369 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CMakeRuleHashes.txt @@ -0,0 +1,324 @@ +# Hashes of file build rules. +fe079431874bb5fcf98e6127380d9915 CMakeFiles/dist +9b6bf55f9963fcde040964803255f01e CMakeFiles/distcheck +8115c1d2692ccedb887651f3561eff6f lib/zip_err_str.c +0294d9259a337993e4dc0847a4eb94eb man/CMakeFiles/man +0294d9259a337993e4dc0847a4eb94eb man/CMakeFiles/update-html +0294d9259a337993e4dc0847a4eb94eb man/CMakeFiles/update-man +0316b03f8ec2c16e60838065eebd441f man/CMakeFiles/update_zip_errors +d159ddf2c2d73a4e2ec0b77217306397 man/ZIP_SOURCE_GET_ARGS.3 +3c2cdfb10713a65a707342fd8b543f9d man/ZIP_SOURCE_GET_ARGS.html +24bbd5b7c58a1a012d3def4f089c20fc man/ZIP_SOURCE_GET_ARGS.man +42273a05e248870f09470c0a8d1ab4d8 man/libzip.3 +beff02be812b943e5137b8dee3c7cbeb man/libzip.html +8fc1a91b88f81ca9cff6c4c51ba74e07 man/libzip.man +fdd5c85b90e8035f69409a418d05d840 man/zip_add.3 +d14e461ea0b1c56df20efae0b354a090 man/zip_add.html +79c17569bf49c7bf09791496ca98a6ab man/zip_add.man +7b16b30c91cc789b760b0771144752e2 man/zip_add_dir.3 +66f107ca4ba186f08593aed2c9599704 man/zip_add_dir.html +4e712df7a5460e8856c541958226d2e5 man/zip_add_dir.man +092c953c43a8a7708ba9a37fab0b6473 man/zip_close.3 +9706e4a4b67a1f2bed60a8d52efee130 man/zip_close.html +10c4dc15c9e0664644c696472379b25e man/zip_close.man +0f7556f52f43ac6add41f8a7ab6c2274 man/zip_compression_method_supported.3 +4190436e2f0936a92b764ae24c536771 man/zip_compression_method_supported.html +4faa7d9eba28dde2088b234ab5dedfcf man/zip_compression_method_supported.man +1bdffaef4935bbb3c5f45160fb3ba065 man/zip_delete.3 +da5730c8a1d6f7f94e862c97280f1d26 man/zip_delete.html +d1bd4dfd2ce79d869260d771c1f8d430 man/zip_delete.man +cbb0caf9b6493a3ddb4459abd6ebdf64 man/zip_dir_add.3 +67c1b6050a1e61879f88fe30f4e56b3d man/zip_dir_add.html +911fab9ca855f89dcedcb9559bf3c608 man/zip_dir_add.man +73b01c40b94c1c221280c43a618ede62 man/zip_discard.3 +d95f0f05ac4ba90750b38e3020cf26fa man/zip_discard.html +4c0ba145a251867e922a369119879617 man/zip_discard.man +a1effc9165f97dfbfdc0335c6802c541 man/zip_encryption_method_supported.3 +37cb98b50257af95f292054ff14210f6 man/zip_encryption_method_supported.html +ed58a1a1431ae705d17370292392353b man/zip_encryption_method_supported.man +0ccf5c543cd6466ad36701a1797e2150 man/zip_error_clear.3 +40408650dcadbe6ea70f01a369a045f0 man/zip_error_clear.html +d47926a18f4019793cef93a1eb540c07 man/zip_error_clear.man +ab91b656ced50a87e7bef67d8626875b man/zip_error_code_system.3 +ccdf3ba48c5ab8b4e5eab2283e2f959e man/zip_error_code_system.html +8a11aa2fe7d1042716302ac4bd63c99b man/zip_error_code_system.man +5b7dd4e72620bfdd2c0626563699c0b1 man/zip_error_code_zip.3 +a2ee3aea90618df8e9243b3a0ba8d540 man/zip_error_code_zip.html +846e89d92de3624332a5b5ac239083aa man/zip_error_code_zip.man +7341f93e94eaa68417ae93d98ecd2187 man/zip_error_fini.3 +c16e9d25d2ac33c9e8e5a7f778d09e1d man/zip_error_fini.html +6eee166beb19524b9f7712ffc55f21e5 man/zip_error_fini.man +f0daae402067bdfa09a933f4eb9b8c11 man/zip_error_get.3 +1dbe3708fedca4e4be038c6598f44c4a man/zip_error_get.html +076e27c2d314588847288299bfef01f4 man/zip_error_get.man +d1078525de898dea808276a402828e85 man/zip_error_get_sys_type.3 +9c52a32947c0c673376afc75baf8d2c2 man/zip_error_get_sys_type.html +61feb8423737870266931cd13eec9954 man/zip_error_get_sys_type.man +daa3cc499f0ff2f831deb1ddedc26105 man/zip_error_init.3 +ee262460403b267002b0def7f06619fe man/zip_error_init.html +bd1b5ec45fd5d09d7ba59917061a262c man/zip_error_init.man +b1741b37334a3e44960fbc593c13da54 man/zip_error_set.3 +a69702c7fea7974f6e759d9c37d952c7 man/zip_error_set.html +7f756947c4497a3335fa1f32a1893c49 man/zip_error_set.man +fc45be7d661ecdd02f8c23eda6cd39f9 man/zip_error_set_from_source.3 +dbda9b64eeaf5a9a2bb2860740945680 man/zip_error_set_from_source.html +2e604e44adc6fc042455c0c45b68a1fe man/zip_error_set_from_source.man +9520eb7ef3d97d21a2f886def2c6a9c5 man/zip_error_strerror.3 +7425cce562a54a2e95754bc74512795f man/zip_error_strerror.html +fa8d5d8a4ed266f607a04b766dfc7fd0 man/zip_error_strerror.man +f96c88d229ade4e770e7345d4fb3f0d5 man/zip_error_system_type.3 +4f95b4ef6383d9aaab879576370e76c7 man/zip_error_system_type.html +b330460476f4d4d6beecb09feaf6c5b3 man/zip_error_system_type.man +a4ef761313728475ce333b1cff908e77 man/zip_error_to_data.3 +e3dd7efa659e26c80a9c77e60e92f75f man/zip_error_to_data.html +f27bbbe8d48487a75d0ae37161a5c3b2 man/zip_error_to_data.man +01ec765896e6bb6bed40aae97db1cf03 man/zip_error_to_str.3 +a744d386715c4c83bd2d8567a7366f0e man/zip_error_to_str.html +4ef4d3c68090ea63aa24c82924e498ce man/zip_error_to_str.man +21000f889abf4a81891bb21432fd6398 man/zip_errors.3 +ec7a64407c9b335b543efea5e346527e man/zip_errors.html +0bb8cb829219c4be01c5f969c72e25f9 man/zip_errors.man +94e63061d23034c4d58d6b97d5a16c20 man/zip_fclose.3 +6d026bb55dc0f36a56f9b10ab6067127 man/zip_fclose.html +41d4aee9a2cb184bc9279940dc797618 man/zip_fclose.man +3e45e125209f0945aeea4027e76618b0 man/zip_fdopen.3 +61a7c57dc3eb352d997790ea2bdee80f man/zip_fdopen.html +3b629c2305b86cda59c32afa9175ac1e man/zip_fdopen.man +d79bad67de1ba03f87cd62b5b600f8c7 man/zip_file_add.3 +e74dbe1017f5a276ca54a1666c8c41f9 man/zip_file_add.html +c3f4975cdb310d0a0302785f0379d817 man/zip_file_add.man +990fd92227b243f043c1412c320c329c man/zip_file_attributes_init.3 +82a9c7e7b9a133ac8b4564b5000b8254 man/zip_file_attributes_init.html +974d171bc077be252b6db0050b31350c man/zip_file_attributes_init.man +94ae53ba0bfec342cff096d2007e8b16 man/zip_file_extra_field_delete.3 +3f025b3ff464cd847b9d9c5c6e7b9172 man/zip_file_extra_field_delete.html +d103bf5581c1f4963018becb5a7745a1 man/zip_file_extra_field_delete.man +37902b6dbe02634393155e612112f890 man/zip_file_extra_field_get.3 +5a189309f96e8277ef52c8279e6a9bb4 man/zip_file_extra_field_get.html +17e416b0ab5cb24061d668d918ec5047 man/zip_file_extra_field_get.man +2c3ec84aabc0a028703a77a769a4749d man/zip_file_extra_field_set.3 +12d2911434a46edac7dd9c30e253fe16 man/zip_file_extra_field_set.html +f4b94e74e113aeab9ef319c9fd980ae6 man/zip_file_extra_field_set.man +a4b2254d5fdcfce6d3871355a4055e1a man/zip_file_extra_fields_count.3 +3047681a825f39b26419614fb1930309 man/zip_file_extra_fields_count.html +8f02fc52194a23339986d39e102f0ec8 man/zip_file_extra_fields_count.man +e2e969ce5a70c82d3f7d2ae8bd797cfe man/zip_file_get_comment.3 +c3e8b568750f4f6763119e3582078f4b man/zip_file_get_comment.html +51f33a7364edc8e8c84c5a87beff4fe1 man/zip_file_get_comment.man +439d0ea26e1c2680a66bbbeffb904466 man/zip_file_get_error.3 +af1ce940225d06b8f42941cc63983699 man/zip_file_get_error.html +3ba7de4a4e6215c96be0d078b6e67e00 man/zip_file_get_error.man +61231dcb024825dff2d3360c66a4762f man/zip_file_get_external_attributes.3 +c968ce8e530cc5c3db979dcb5bb4afce man/zip_file_get_external_attributes.html +12892e9c4053b041813b85d88cdfabbc man/zip_file_get_external_attributes.man +d40340f6b434e18da29c754bc8b7ba45 man/zip_file_rename.3 +a15006364919a987adebbd57ca189e6f man/zip_file_rename.html +837a062241bb85fd7ce1b999033b7e56 man/zip_file_rename.man +269565770f0faa35f0d5ef07b0c35c72 man/zip_file_set_comment.3 +de4892ccf24634949a825b00b50990a2 man/zip_file_set_comment.html +0c33781477a3fb62b33028ae1d4d6993 man/zip_file_set_comment.man +16ff951f7c92d4c9d13b269abe8bd099 man/zip_file_set_encryption.3 +ed131e12dd9f37b860351c00d6513856 man/zip_file_set_encryption.html +189fef372d2357ec97e53aab878262f7 man/zip_file_set_encryption.man +6de0589dad11cdbf08a99faa54f5294b man/zip_file_set_external_attributes.3 +7db55ab9263cf470bc64de5c0a1da90e man/zip_file_set_external_attributes.html +d7f3cfe56559fbc139bea9a26f314594 man/zip_file_set_external_attributes.man +0005689a5df959efcebc4f46e03b6e9b man/zip_file_set_mtime.3 +8fc84ff2fb8d16fc4996d9f0b30c87ce man/zip_file_set_mtime.html +28f4e8dc8372e0874cc5b819c883e852 man/zip_file_set_mtime.man +bf13c0cb662335066625d8a71ebc9024 man/zip_file_strerror.3 +631f0eb6b32e754ea6d4cdb2fb114d92 man/zip_file_strerror.html +297e9a51f53cee9dfa83f7028f1fc1a4 man/zip_file_strerror.man +8d2888512abc14611f3f207ea72d0413 man/zip_fopen.3 +21561ac488e779411f3498106537832f man/zip_fopen.html +7e829c97824e257a8267acceeac868df man/zip_fopen.man +199e0f1ecfaf6ec3c00e3a10dbebb08a man/zip_fopen_encrypted.3 +bf0254f0253ee098f770d3afdf6cbaf2 man/zip_fopen_encrypted.html +6afefd4d1a35467069dd3b808e735fc4 man/zip_fopen_encrypted.man +f21edcc370396b514b94d4eaa604905c man/zip_fread.3 +b0248a8e7b92efaba52d80459dcfd8c2 man/zip_fread.html +b0a03949bed997236a58981a23e36b84 man/zip_fread.man +5bd694a85d2dc21c9f1623012288b61d man/zip_fseek.3 +99abe355a1f5470d2c14f0e08dd64625 man/zip_fseek.html +02c480aba599d3e79cd9e38a65b47829 man/zip_fseek.man +2eeb9b42642ca6b3bcbcc8dac65f53a4 man/zip_ftell.3 +b73d962894dfff2296756b755033c58d man/zip_ftell.html +d2d0a72f8d46b580be23f0bb762a078c man/zip_ftell.man +3b2aee434752084774c2a72702120a1d man/zip_get_archive_comment.3 +3816dd1d97fb5d1c64aa9516e84ebfbb man/zip_get_archive_comment.html +aaa4173e40fbc17981229dcfe6c5f204 man/zip_get_archive_comment.man +7abcfcbaf617cb71fe32f276e1562347 man/zip_get_archive_flag.3 +5c02c35084e476bb92d2556d5fcb218e man/zip_get_archive_flag.html +c55c7d93e16a9427b4911bfe2a22d42b man/zip_get_archive_flag.man +a17b9d64e5005e6ef0cb416b4097bfe4 man/zip_get_error.3 +ff01adb6af5daad514207b6974f9a064 man/zip_get_error.html +c0470c21995f62648980ae8788127b83 man/zip_get_error.man +c04c60080b093051df8c66fbf3ff3938 man/zip_get_file_comment.3 +937dca7f39b6e89997c71d23185950a2 man/zip_get_file_comment.html +921d65e87672074174e56176946e3cd8 man/zip_get_file_comment.man +90cdced489b360fda30ab108aacb143a man/zip_get_name.3 +d71eef2d220cdeafb277479043a45d57 man/zip_get_name.html +162cad6767f2e383652fa2b5a846ad32 man/zip_get_name.man +89817348b21f405da1a8de81c7cd9d80 man/zip_get_num_entries.3 +a681e117cada11e65414645a442f7082 man/zip_get_num_entries.html +61c0088de93892ff9fb9d8480c72e91f man/zip_get_num_entries.man +588f486cc27d11234452aa9af6af7418 man/zip_get_num_files.3 +ce44b480050aef035abc713b9cc2fad9 man/zip_get_num_files.html +7170270f2ec4e44f9cbe35fade04b218 man/zip_get_num_files.man +2425ebb73bebaf899680fdc34f3ccc43 man/zip_libzip_version.3 +afd5d1f893a959f07759112a42e2f5ff man/zip_libzip_version.html +e2424374811d6d9427ea218dd07cc121 man/zip_libzip_version.man +3f04d1b17a656428d725fafe3620c4e5 man/zip_name_locate.3 +f75ccbc1c32917b6d228918a45de7952 man/zip_name_locate.html +fdcb0caa7e9c59965d516f3410192566 man/zip_name_locate.man +b6355123807c159ad2003209de9185e2 man/zip_open.3 +d8a38c4cf97a263e0f58814ea0d62608 man/zip_open.html +3acc7cd72f10f92d5d18f5f450168300 man/zip_open.man +9e8bf0beea93fc0184c8d2cd31164d5b man/zip_register_cancel_callback_with_state.3 +c60ea6e3db77863d44a5cb461039bf98 man/zip_register_cancel_callback_with_state.html +7887dc19309d7a74f979c2f6eb3fc579 man/zip_register_cancel_callback_with_state.man +0d0f662a406323d2508fb351f8407907 man/zip_register_progress_callback.3 +f5c7fdfc4b24c6eba8ce5417d401a3f1 man/zip_register_progress_callback.html +0093e65f5cf81685fed89d8844535013 man/zip_register_progress_callback.man +c3044f0509aea200eb849b1872a91d21 man/zip_register_progress_callback_with_state.3 +1d6769f867fdde788b41d91c9e5933bf man/zip_register_progress_callback_with_state.html +bbb87f5379837f32fde31e0efe546821 man/zip_register_progress_callback_with_state.man +aaae480df7a76e473634be19a4268b42 man/zip_rename.3 +4e2cb263e2edb15f209468bfd87977f6 man/zip_rename.html +d8f6a59f1aa00f397be41bdca0437da6 man/zip_rename.man +bd863a689a782a887f8c59d97155589e man/zip_set_archive_comment.3 +5dddb5f511761b2cbc5b1abed9aeb23c man/zip_set_archive_comment.html +2810299df9fb34af1920df3dd1ecf09f man/zip_set_archive_comment.man +e62145c1b446f79d9fa601b6f70edebd man/zip_set_archive_flag.3 +c9c0830a531f966b681b84553eccffdc man/zip_set_archive_flag.html +f2556d5278b5d2d031c3ed20574a8901 man/zip_set_archive_flag.man +54fcefbbc31e6d5806a80aa90d30e480 man/zip_set_default_password.3 +8fd1ce5ef877e4c0c76f70431ac850a4 man/zip_set_default_password.html +30984467b6fb53cd37261109affe2caa man/zip_set_default_password.man +b86f8fe26ec033fe66014dc9234f0c5c man/zip_set_file_comment.3 +cd974bf3e748e239e974dccab27d5cc8 man/zip_set_file_comment.html +6ddbfd73b251111e749611eb0cf382fa man/zip_set_file_comment.man +59db870679dda4761277fa3d781f2cb0 man/zip_set_file_compression.3 +f0496874c3f266fb933808016f40ba7b man/zip_set_file_compression.html +6a446cdc0efa7f9c54921d71ef1de4dd man/zip_set_file_compression.man +ae3a0ff79727afe83b8b21417f595abd man/zip_source.3 +add7c3b66b1161ebd2a44f2a73189a1b man/zip_source.html +e8da3d1d0dc86b2d6ff830c9a513da72 man/zip_source.man +e0413a2558ac2144e146fccc5d37854a man/zip_source_begin_write.3 +b9425034328f68350586230d45b2430c man/zip_source_begin_write.html +a82177023a8650e0a4dba947a22e5469 man/zip_source_begin_write.man +91113bc75bee538369f6d0e074432b9a man/zip_source_buffer.3 +95e3e3b82429a4c570aa89925563121e man/zip_source_buffer.html +752b5c58a794944057826f31a5240663 man/zip_source_buffer.man +83af792dc37964f3549695f4088821f9 man/zip_source_buffer_fragment.3 +2ecd9d4754995d865c7b72accfea99d9 man/zip_source_buffer_fragment.html +00f764e111dcb3b62e6880b9251c69eb man/zip_source_buffer_fragment.man +10c937eafdb8ffbb2b21e3551b6d25c6 man/zip_source_close.3 +4478ef881b32b1d86bb1cf338ac620ff man/zip_source_close.html +520fd6ee47133d27ddbb70e52de0602c man/zip_source_close.man +946d7b3784a77bde0bf691d5a3013945 man/zip_source_commit_write.3 +def67301615520dda9f4dc568042bc09 man/zip_source_commit_write.html +a4d41b7ffd42279ee3fc14738154d7af man/zip_source_commit_write.man +1477842d2d6b68cff1e2496cacb30f2d man/zip_source_error.3 +2156c72f4de0f63079b3014f564cd9ee man/zip_source_error.html +5e29bc7c509d5bf8edb4778534fea206 man/zip_source_error.man +51bba96f9177499da725b3391144490c man/zip_source_file.3 +4d855ae1ce404591ac77a77bd13fa1ae man/zip_source_file.html +4c06ffb2d7cfeeae64298b9be4189042 man/zip_source_file.man +85d60252a12865a9d1cf372e8ddc116f man/zip_source_filep.3 +7dc4ddd1d8fb8c31619f2c1afe528828 man/zip_source_filep.html +3060a1e9a88d7cb75480caf03da58923 man/zip_source_filep.man +ba2371763698fc7a28e9b647fc0460f0 man/zip_source_free.3 +0537950e9ce14b77c503be2674301cc6 man/zip_source_free.html +bb305b6799ff957dda51bc6b87c28973 man/zip_source_free.man +4dbfd5341fcb6f29647cc6f1f8396900 man/zip_source_function.3 +47da973de0cc944abe3012c870124c67 man/zip_source_function.html +ec0fce03599b9ee22c7ed90476d47dd5 man/zip_source_function.man +d44cbec10a35995d4937016eb5b37e87 man/zip_source_is_deleted.3 +642e3c3456a26644a4c09c360354810c man/zip_source_is_deleted.html +479bffe9e356958b9a6926152ebb510c man/zip_source_is_deleted.man +e20e60e29944fc5875f984706bf958ca man/zip_source_is_seekable.3 +821aa59b632684fd5d1a5eb6fe92b2d0 man/zip_source_is_seekable.html +57f836064e02a6a20fda3e2fb6bd99bf man/zip_source_is_seekable.man +7f2d4f6d3dfc3cd4c07f6c8f169316b8 man/zip_source_keep.3 +8f69112d11dee9bedae0d0c93a8be3c2 man/zip_source_keep.html +782a5e4822adb395af2f993021637d51 man/zip_source_keep.man +aa78734a998df4e68e2ae20bd3fee61d man/zip_source_layered.3 +96c4f8f035cfb9ade5110e0a0e55a287 man/zip_source_layered.html +99cd96d25355d5bdb9c9a1066eafe9d6 man/zip_source_layered.man +7285f7ed4a2b65ae363d3dd982abaf97 man/zip_source_make_command_bitmap.3 +2da74d06580a4cc2bd342f3ce269dbe0 man/zip_source_make_command_bitmap.html +4c3d752cfffa9e5332b4dc9b093fedd3 man/zip_source_make_command_bitmap.man +0a8c1b38dc721d19298b286374034640 man/zip_source_open.3 +b8809b73e7c4558c33e4df4c0b909d75 man/zip_source_open.html +c9ba8c8753dab04c8b1bd94e187ae92b man/zip_source_open.man +8e5342bb18cf7a112d56097229cf7165 man/zip_source_read.3 +c21dc49ae87579616edc0204034358eb man/zip_source_read.html +1e37a53b0d910f572f9fe890ae65ac8c man/zip_source_read.man +27f6839f4b756e4abe570bd0e714029a man/zip_source_rollback_write.3 +3ef1fb8233ff3cc7e3c3e993e2d83333 man/zip_source_rollback_write.html +4d114d1a9b1497d34c92e946e0915b8a man/zip_source_rollback_write.man +1a380a824745648ed37ad9bc14b0edd2 man/zip_source_seek.3 +d7ef841daea9504b4b0f36725ed3fa45 man/zip_source_seek.html +4c2a024ea0444c5a0e51041eca7a1e25 man/zip_source_seek.man +7e1c252aab5caeacf25a8a0d49808da0 man/zip_source_seek_compute_offset.3 +b73cc54ac3e1bad0db4cf145d00d33a8 man/zip_source_seek_compute_offset.html +f3fb15e7d30849c3dbe268d8a7f0c46e man/zip_source_seek_compute_offset.man +2c0441a3cd69a3f1841aa66aadd89bec man/zip_source_seek_write.3 +a78c9a8de236c64502135b9e81c6f60d man/zip_source_seek_write.html +696dc86eecdca2a1fe88a6d037dc0903 man/zip_source_seek_write.man +9793a8d3251b8e67479f62475ebca6e7 man/zip_source_stat.3 +1fdd397f2f3150a2cc4c57066b218ebf man/zip_source_stat.html +7064bc1c1f4731330d00bf7eebe8a9ae man/zip_source_stat.man +a152d4f908dba7f5be7c9d6f9911e11e man/zip_source_tell.3 +23808f0272b6147fd268d78906ade152 man/zip_source_tell.html +64a7c39b656a853a3b9e5acabac5c291 man/zip_source_tell.man +ac02d18ae6f01537e14676bd195531a9 man/zip_source_tell_write.3 +ea0ff3a4eb0b327ed1c8fe4547ea6f38 man/zip_source_tell_write.html +9f3a9f522c473662dfb86c83cce08966 man/zip_source_tell_write.man +b98dfedd043a50e8cb96d8764a5c5b78 man/zip_source_win32a.3 +626b5bb229bb031ce3b99ece293f93a6 man/zip_source_win32a.html +f6d9264140db79f0170113de9c8b55e8 man/zip_source_win32a.man +891ff4708b88131cbdea911e776b7a54 man/zip_source_win32handle.3 +d24024cbb46faa1f4da9cd442a0d8362 man/zip_source_win32handle.html +912de020c1d58528bca0ef0bbecf6c9a man/zip_source_win32handle.man +d8ac1b191a4f14f443247ab64c201c66 man/zip_source_win32w.3 +2716abe5efd61230a2f1542f43ad70b6 man/zip_source_win32w.html +950ab82a2fe37087c34774db089e3d99 man/zip_source_win32w.man +03550611ce3629acc8d097a5bbe06c98 man/zip_source_window_create.3 +a20e3462fb22aa17d0c8ae2d5b5f70ee man/zip_source_window_create.html +644a8eb996950aad0dc059e5ffdc5285 man/zip_source_window_create.man +042ce586ec3f4241dcd138c3ca058f58 man/zip_source_write.3 +a30b1f83ae1e991e1bedf05c965346bc man/zip_source_write.html +4de2e7af74db76a71cbed0d6b28b5af0 man/zip_source_write.man +ac8b50d248b458981214caf687bbe980 man/zip_source_zip.3 +0175fb4f814f12baed55a1b18f832f45 man/zip_source_zip.html +a44a3c5bdedb62047e69c7b29b181d9c man/zip_source_zip.man +5183f855dffbea9b2f18e3fe49f0ff0d man/zip_source_zip_file.3 +8c62774132656aef2ce10849fb3eb933 man/zip_source_zip_file.html +67bd970e3997af7600f56d36eab68a14 man/zip_source_zip_file.man +7b1cb628704acecb18c351143eb88b4a man/zip_stat.3 +913e7269347a85de88476ba253fb2844 man/zip_stat.html +74ca748c4879aa04c7af78921e031024 man/zip_stat.man +c6344020ab0f86434b3a644d07fd3b17 man/zip_stat_init.3 +26cb7bb3d459c7280196866df43b02b0 man/zip_stat_init.html +5af4a860ee9a38415fe2a43e8c57fabc man/zip_stat_init.man +a38c818d1d96cd49304cc6c71ee8f7aa man/zip_unchange.3 +d3e596aeef2d8fb1ec0b2ccfe10cee41 man/zip_unchange.html +3cad0fc26336abe29405f74c6bbc70b5 man/zip_unchange.man +e8487c5515b0b9e2e2e58293ed0e24bd man/zip_unchange_all.3 +f4deced7b7e4ec288d2a1b140d354983 man/zip_unchange_all.html +a1cc2a9a8a5dfaaa6100aa3d5a240c90 man/zip_unchange_all.man +1ba5ccbae608caee379aed02e9e4749d man/zip_unchange_archive.3 +14890fc68fdf63b20e842e8413ac28d9 man/zip_unchange_archive.html +b7bfe339e0155ce2767f4da306a5532a man/zip_unchange_archive.man +46e62c01c08734f0d2e12020919182dd man/zipcmp.1 +e15be517c1210d684c2f90e90777d46c man/zipcmp.html +644605d026594ac61818c7198e0e98ae man/zipcmp.man +3dd3e5ac99602e62f239afc86f7b7f36 man/zipmerge.1 +9f0722da1ffa82861698be3bd9c2825e man/zipmerge.html +355a7d8a710ae3ae95c7dad5ace7312b man/zipmerge.man +f0fa92e007957d83297fd3e5b901cc2f man/ziptool.1 +1f565dc36cbef96afd2e467b39eb7809 man/ziptool.html +df359c96eb34e16c97b56b05bd6cece2 man/ziptool.man +b8981b63665bad1e01674cb95066a3ec ossfuzz/CMakeFiles/list-fuzzers diff --git a/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CheckTypeSize/INT16_T_LIBZIP.bin b/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CheckTypeSize/INT16_T_LIBZIP.bin new file mode 100755 index 0000000000000000000000000000000000000000..569e5eac7b9de85df4dc31925533241ae13ffeff GIT binary patch literal 1166 zcmaJ=&2G~`5T0E-iIcTsw-r?*fwWG0s1#WO4mohD4}cH?9snW7Nw>j?V;g(ZAB1pP zD*nzq40jGZ0q?`Col2Eju;iWDnQvykv1cGG76bsural4~(Xu4vh?Fn_Qqn}*J_(B` zD3UNM-lj6ha&a7qlLy@}pB6z8y%$9=6%xola7KmuAEKS*=_C-Rkp!yQT_B(VPzsu+ zQB7}knx+7h;j-XB3)2A;VlkqZb5Gav0@eB7>u4 zGLcc51Tq}Qg1{ZIC?&)_%yW@QaM~>bK4C=b{M5TTIE;NHR=K;v2VCkquEr_X=C1C8+u%BH z45^6%hSWeohEzG4s5XZbxV}#fx5Zl?tX7wp!0>n6HaB=%x*gu(?WM~U23(VyoXuPd z1Fdx+xLw}0nG5v5KUd`+Ti|?B3UfXy;e1mkuwR7eYlglv@53INR~SVPIP{5c&N%Un znNwM<+D`VV*{2pDSBfu~gmK{1r?OA|t(l*_!#sVh&crp2c*D1A`;`^(Gavf~jMSWp zp+yzabScA+1kR=6;R2R-X6sa7GygX@7s>(6@xujT7AB-K*MJI53@et z*V?FD)q%!JKDU4|=L_n +#include +#include + + +#undef KEY +#if defined(__i386) +# define KEY '_','_','i','3','8','6' +#elif defined(__x86_64) +# define KEY '_','_','x','8','6','_','6','4' +#elif defined(__ppc__) +# define KEY '_','_','p','p','c','_','_' +#elif defined(__ppc64__) +# define KEY '_','_','p','p','c','6','4','_','_' +#elif defined(__aarch64__) +# define KEY '_','_','a','a','r','c','h','6','4','_','_' +#elif defined(__ARM_ARCH_7A__) +# define KEY '_','_','A','R','M','_','A','R','C','H','_','7','A','_','_' +#elif defined(__ARM_ARCH_7S__) +# define KEY '_','_','A','R','M','_','A','R','C','H','_','7','S','_','_' +#endif + +#define SIZE (sizeof(int16_t)) +char info_size[] = {'I', 'N', 'F', 'O', ':', 's','i','z','e','[', + ('0' + ((SIZE / 10000)%10)), + ('0' + ((SIZE / 1000)%10)), + ('0' + ((SIZE / 100)%10)), + ('0' + ((SIZE / 10)%10)), + ('0' + (SIZE % 10)), + ']', +#ifdef KEY + ' ','k','e','y','[', KEY, ']', +#endif + '\0'}; + +#ifdef __CLASSIC_C__ +int main(argc, argv) int argc; char *argv[]; +#else +int main(int argc, char *argv[]) +#endif +{ + int require = 0; + require += info_size[argc]; + (void)argv; + return require; +} diff --git a/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CheckTypeSize/INT32_T_LIBZIP.bin b/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CheckTypeSize/INT32_T_LIBZIP.bin new file mode 100755 index 0000000000000000000000000000000000000000..cd05fe337c0f81343b73b6d96a009a400c380208 GIT binary patch literal 1166 zcmaJ=&2G~`5T0E-iIcTsw-r?*fwWG0s1#WO3FW}4J^(@pcmRYPC*1}oj&1Bse-OfH zsrWndFx)xt1iTNkb}ChB!IF1oXTF*F#-4$&SP%dpoB9Y~M9Y$tBT~W$NJ$fI`y?!) zph&{3c$>-~%f)ddP9Ai_d|CuW^j;LfR7fEIz!??pe~5OLr;|XOMiQuIcY%NgKq+XN zMm4=bGD2yiNyr7gpv_IKB>rlpGZauCtv{sQT!=-QpHXNAg$#2Ejb0E$$zha>i42aG z$wWqJ63B2I3j%kj^N+uY!7>2`RBx0fzc7;sH)ayD}< z47ApP;C6Y}W-ibJ|6G-SY=QGhDa`q-g!4_Ez;uNnHzybpV5USSkH;Ls<&Ipf4P zW=>_bYCGAdW}jMsTq(X_62^g3pUOV4=oG+*Yy9c%6d{x(4M>gNp4N=JVs(uxHxq`il&$?pO=H7Xg%7*&S z?^f42GhnxZDy2qrFkRi7vSAPsU_G26wJsaaUOsvCNUiJZ`}jP31Mq{`xGL3zi%>3c zER6vhFXOpaFVn!jcJb0o4z?#@9D7%5<)z0WkJDs2=q#48jE=*2DF*gpS#6m&jni=$ q7lW-NO=KQsS(Hq@qfDkzA_sOZjs%YRM0oNn6UD$NqG{rZQ~4KeVK}z{ literal 0 HcmV?d00001 diff --git a/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CheckTypeSize/INT32_T_LIBZIP.c b/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CheckTypeSize/INT32_T_LIBZIP.c new file mode 100644 index 0000000..b2f010f --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CheckTypeSize/INT32_T_LIBZIP.c @@ -0,0 +1,46 @@ +#include +#include +#include + + +#undef KEY +#if defined(__i386) +# define KEY '_','_','i','3','8','6' +#elif defined(__x86_64) +# define KEY '_','_','x','8','6','_','6','4' +#elif defined(__ppc__) +# define KEY '_','_','p','p','c','_','_' +#elif defined(__ppc64__) +# define KEY '_','_','p','p','c','6','4','_','_' +#elif defined(__aarch64__) +# define KEY '_','_','a','a','r','c','h','6','4','_','_' +#elif defined(__ARM_ARCH_7A__) +# define KEY '_','_','A','R','M','_','A','R','C','H','_','7','A','_','_' +#elif defined(__ARM_ARCH_7S__) +# define KEY '_','_','A','R','M','_','A','R','C','H','_','7','S','_','_' +#endif + +#define SIZE (sizeof(int32_t)) +char info_size[] = {'I', 'N', 'F', 'O', ':', 's','i','z','e','[', + ('0' + ((SIZE / 10000)%10)), + ('0' + ((SIZE / 1000)%10)), + ('0' + ((SIZE / 100)%10)), + ('0' + ((SIZE / 10)%10)), + ('0' + (SIZE % 10)), + ']', +#ifdef KEY + ' ','k','e','y','[', KEY, ']', +#endif + '\0'}; + +#ifdef __CLASSIC_C__ +int main(argc, argv) int argc; char *argv[]; +#else +int main(int argc, char *argv[]) +#endif +{ + int require = 0; + require += info_size[argc]; + (void)argv; + return require; +} diff --git a/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CheckTypeSize/INT64_T_LIBZIP.bin b/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CheckTypeSize/INT64_T_LIBZIP.bin new file mode 100755 index 0000000000000000000000000000000000000000..517ed5ae5708da750a0c39f6388e1d169cb899e8 GIT binary patch literal 1166 zcmaJ=&2G~`5T0E-iIcTsw-r?*fwWG0s1#X(ON2Pp2S5k`4}g&4q}$-cv5md%4?-j@ z6@Oa2Iej=Y1TTnI34_l?6sfVFdLoJbC#+Y4^^ za#6@M7hvDL;Zo%$WuA*fg41ph@ChSY=cnG)!C~wpv6j0le88o?<7%98ZSLwmxDBrJ z#*msQU`P!VWJr~xiE495f$RI!a9h0P!D@Ah2@HS7ZF7USrQ6{h-Y#9HFyNZpq4btbNH#2da{+pnyMpZVA~V5H_$ z3@xgVrb`)qBycVj4;Qe!Gh3$uoB6-NxlkUsu2Nu630dNlRWaCerPb#P3p8xT|1j$V zeyxqlRUK%o>kvL^Hp7I9oc+WH$)-dtNK;+O)Vgdud->$mBekxt@8k3E4Zsg#E<#!2 zSQ-O1F5|gZFVn!jcJb0o4z?#@9D7%5<)z0WkJDs2=q$=uM#o`Xih;c-t1a`UaXJp; qVz8B@iOj<+i;}5#l*u$o +#include +#include + + +#undef KEY +#if defined(__i386) +# define KEY '_','_','i','3','8','6' +#elif defined(__x86_64) +# define KEY '_','_','x','8','6','_','6','4' +#elif defined(__ppc__) +# define KEY '_','_','p','p','c','_','_' +#elif defined(__ppc64__) +# define KEY '_','_','p','p','c','6','4','_','_' +#elif defined(__aarch64__) +# define KEY '_','_','a','a','r','c','h','6','4','_','_' +#elif defined(__ARM_ARCH_7A__) +# define KEY '_','_','A','R','M','_','A','R','C','H','_','7','A','_','_' +#elif defined(__ARM_ARCH_7S__) +# define KEY '_','_','A','R','M','_','A','R','C','H','_','7','S','_','_' +#endif + +#define SIZE (sizeof(int64_t)) +char info_size[] = {'I', 'N', 'F', 'O', ':', 's','i','z','e','[', + ('0' + ((SIZE / 10000)%10)), + ('0' + ((SIZE / 1000)%10)), + ('0' + ((SIZE / 100)%10)), + ('0' + ((SIZE / 10)%10)), + ('0' + (SIZE % 10)), + ']', +#ifdef KEY + ' ','k','e','y','[', KEY, ']', +#endif + '\0'}; + +#ifdef __CLASSIC_C__ +int main(argc, argv) int argc; char *argv[]; +#else +int main(int argc, char *argv[]) +#endif +{ + int require = 0; + require += info_size[argc]; + (void)argv; + return require; +} diff --git a/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CheckTypeSize/INT8_T_LIBZIP.bin b/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CheckTypeSize/INT8_T_LIBZIP.bin new file mode 100755 index 0000000000000000000000000000000000000000..e69defdcd65525f04edfa1e0cf45e06e8ca4ab46 GIT binary patch literal 1166 zcmaJ=&2G~`5T0E-iIcTsw-r?*fwWG0s1#YEmmE0N2S5k`4}g&Cq?_Qxv5mdy4?;LC z6@OrlpGZauCtv{sQT!=-QpHpZCg$#2Ejb0E$$#Im6u?!~5 zWGtgJ31m2m1%Z2FQH=8_lOj>@@f@L8o%L?nk#{i3g#hzz-zY2uSUY#diR2i%z2KHF z7lll70rve{E>&*4%yW@QaM~>bK4C=b{M5TTIE;NHR=K;v2VCkquEr_X=C1C8+u%BH z45^6%hSWeohEzG4s5XZbxV}#fx5Zl?tX5Z;!0>n6HaB=%x*gu(?WM~U23(VyoXuPd z1Fdx+xLw}0nG5vLzfk2LTi|?B3UfXy;e1mkuwR7eYlglv@53INR~SVPIrNEd&N%Un znNwM<+D`VV*{2pDSBfu~gmK{1r?OA|t(l*_!#sVh&crp2c*D1A`?VGEGavf~jMSWp zp+yzabScA+1kRP>;R2R-X6sa7GygX@m&yY-RSN7WAtg>(6@xujT7AB-K*MJI53@et z*V?FD)q%!JKDU4|=L_n<9zd-)U)8nNkv#waRxpz^evZ4O- zyVZ5h4A`xpN~sYYOjq}&Y#4+DSPy4Nt;@!WmWjy!lWg6HwE?%0+!S* +#include +#include + + +#undef KEY +#if defined(__i386) +# define KEY '_','_','i','3','8','6' +#elif defined(__x86_64) +# define KEY '_','_','x','8','6','_','6','4' +#elif defined(__ppc__) +# define KEY '_','_','p','p','c','_','_' +#elif defined(__ppc64__) +# define KEY '_','_','p','p','c','6','4','_','_' +#elif defined(__aarch64__) +# define KEY '_','_','a','a','r','c','h','6','4','_','_' +#elif defined(__ARM_ARCH_7A__) +# define KEY '_','_','A','R','M','_','A','R','C','H','_','7','A','_','_' +#elif defined(__ARM_ARCH_7S__) +# define KEY '_','_','A','R','M','_','A','R','C','H','_','7','S','_','_' +#endif + +#define SIZE (sizeof(int8_t)) +char info_size[] = {'I', 'N', 'F', 'O', ':', 's','i','z','e','[', + ('0' + ((SIZE / 10000)%10)), + ('0' + ((SIZE / 1000)%10)), + ('0' + ((SIZE / 100)%10)), + ('0' + ((SIZE / 10)%10)), + ('0' + (SIZE % 10)), + ']', +#ifdef KEY + ' ','k','e','y','[', KEY, ']', +#endif + '\0'}; + +#ifdef __CLASSIC_C__ +int main(argc, argv) int argc; char *argv[]; +#else +int main(int argc, char *argv[]) +#endif +{ + int require = 0; + require += info_size[argc]; + (void)argv; + return require; +} diff --git a/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CheckTypeSize/INT_LIBZIP.bin b/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CheckTypeSize/INT_LIBZIP.bin new file mode 100755 index 0000000000000000000000000000000000000000..cd05fe337c0f81343b73b6d96a009a400c380208 GIT binary patch literal 1166 zcmaJ=&2G~`5T0E-iIcTsw-r?*fwWG0s1#WO3FW}4J^(@pcmRYPC*1}oj&1Bse-OfH zsrWndFx)xt1iTNkb}ChB!IF1oXTF*F#-4$&SP%dpoB9Y~M9Y$tBT~W$NJ$fI`y?!) zph&{3c$>-~%f)ddP9Ai_d|CuW^j;LfR7fEIz!??pe~5OLr;|XOMiQuIcY%NgKq+XN zMm4=bGD2yiNyr7gpv_IKB>rlpGZauCtv{sQT!=-QpHXNAg$#2Ejb0E$$zha>i42aG z$wWqJ63B2I3j%kj^N+uY!7>2`RBx0fzc7;sH)ayD}< z47ApP;C6Y}W-ibJ|6G-SY=QGhDa`q-g!4_Ez;uNnHzybpV5USSkH;Ls<&Ipf4P zW=>_bYCGAdW}jMsTq(X_62^g3pUOV4=oG+*Yy9c%6d{x(4M>gNp4N=JVs(uxHxq`il&$?pO=H7Xg%7*&S z?^f42GhnxZDy2qrFkRi7vSAPsU_G26wJsaaUOsvCNUiJZ`}jP31Mq{`xGL3zi%>3c zER6vhFXOpaFVn!jcJb0o4z?#@9D7%5<)z0WkJDs2=q#48jE=*2DF*gpS#6m&jni=$ q7lW-NO=KQsS(Hq@qfDkzA_sOZjs%YRM0oNn6UD$NqG{rZQ~4KeVK}z{ literal 0 HcmV?d00001 diff --git a/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CheckTypeSize/INT_LIBZIP.c b/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CheckTypeSize/INT_LIBZIP.c new file mode 100644 index 0000000..f04c822 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CheckTypeSize/INT_LIBZIP.c @@ -0,0 +1,46 @@ +#include +#include +#include + + +#undef KEY +#if defined(__i386) +# define KEY '_','_','i','3','8','6' +#elif defined(__x86_64) +# define KEY '_','_','x','8','6','_','6','4' +#elif defined(__ppc__) +# define KEY '_','_','p','p','c','_','_' +#elif defined(__ppc64__) +# define KEY '_','_','p','p','c','6','4','_','_' +#elif defined(__aarch64__) +# define KEY '_','_','a','a','r','c','h','6','4','_','_' +#elif defined(__ARM_ARCH_7A__) +# define KEY '_','_','A','R','M','_','A','R','C','H','_','7','A','_','_' +#elif defined(__ARM_ARCH_7S__) +# define KEY '_','_','A','R','M','_','A','R','C','H','_','7','S','_','_' +#endif + +#define SIZE (sizeof(int)) +char info_size[] = {'I', 'N', 'F', 'O', ':', 's','i','z','e','[', + ('0' + ((SIZE / 10000)%10)), + ('0' + ((SIZE / 1000)%10)), + ('0' + ((SIZE / 100)%10)), + ('0' + ((SIZE / 10)%10)), + ('0' + (SIZE % 10)), + ']', +#ifdef KEY + ' ','k','e','y','[', KEY, ']', +#endif + '\0'}; + +#ifdef __CLASSIC_C__ +int main(argc, argv) int argc; char *argv[]; +#else +int main(int argc, char *argv[]) +#endif +{ + int require = 0; + require += info_size[argc]; + (void)argv; + return require; +} diff --git a/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CheckTypeSize/LONG_LIBZIP.bin b/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CheckTypeSize/LONG_LIBZIP.bin new file mode 100755 index 0000000000000000000000000000000000000000..cd05fe337c0f81343b73b6d96a009a400c380208 GIT binary patch literal 1166 zcmaJ=&2G~`5T0E-iIcTsw-r?*fwWG0s1#WO3FW}4J^(@pcmRYPC*1}oj&1Bse-OfH zsrWndFx)xt1iTNkb}ChB!IF1oXTF*F#-4$&SP%dpoB9Y~M9Y$tBT~W$NJ$fI`y?!) zph&{3c$>-~%f)ddP9Ai_d|CuW^j;LfR7fEIz!??pe~5OLr;|XOMiQuIcY%NgKq+XN zMm4=bGD2yiNyr7gpv_IKB>rlpGZauCtv{sQT!=-QpHXNAg$#2Ejb0E$$zha>i42aG z$wWqJ63B2I3j%kj^N+uY!7>2`RBx0fzc7;sH)ayD}< z47ApP;C6Y}W-ibJ|6G-SY=QGhDa`q-g!4_Ez;uNnHzybpV5USSkH;Ls<&Ipf4P zW=>_bYCGAdW}jMsTq(X_62^g3pUOV4=oG+*Yy9c%6d{x(4M>gNp4N=JVs(uxHxq`il&$?pO=H7Xg%7*&S z?^f42GhnxZDy2qrFkRi7vSAPsU_G26wJsaaUOsvCNUiJZ`}jP31Mq{`xGL3zi%>3c zER6vhFXOpaFVn!jcJb0o4z?#@9D7%5<)z0WkJDs2=q#48jE=*2DF*gpS#6m&jni=$ q7lW-NO=KQsS(Hq@qfDkzA_sOZjs%YRM0oNn6UD$NqG{rZQ~4KeVK}z{ literal 0 HcmV?d00001 diff --git a/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CheckTypeSize/LONG_LIBZIP.c b/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CheckTypeSize/LONG_LIBZIP.c new file mode 100644 index 0000000..7af5b7f --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CheckTypeSize/LONG_LIBZIP.c @@ -0,0 +1,46 @@ +#include +#include +#include + + +#undef KEY +#if defined(__i386) +# define KEY '_','_','i','3','8','6' +#elif defined(__x86_64) +# define KEY '_','_','x','8','6','_','6','4' +#elif defined(__ppc__) +# define KEY '_','_','p','p','c','_','_' +#elif defined(__ppc64__) +# define KEY '_','_','p','p','c','6','4','_','_' +#elif defined(__aarch64__) +# define KEY '_','_','a','a','r','c','h','6','4','_','_' +#elif defined(__ARM_ARCH_7A__) +# define KEY '_','_','A','R','M','_','A','R','C','H','_','7','A','_','_' +#elif defined(__ARM_ARCH_7S__) +# define KEY '_','_','A','R','M','_','A','R','C','H','_','7','S','_','_' +#endif + +#define SIZE (sizeof(long)) +char info_size[] = {'I', 'N', 'F', 'O', ':', 's','i','z','e','[', + ('0' + ((SIZE / 10000)%10)), + ('0' + ((SIZE / 1000)%10)), + ('0' + ((SIZE / 100)%10)), + ('0' + ((SIZE / 10)%10)), + ('0' + (SIZE % 10)), + ']', +#ifdef KEY + ' ','k','e','y','[', KEY, ']', +#endif + '\0'}; + +#ifdef __CLASSIC_C__ +int main(argc, argv) int argc; char *argv[]; +#else +int main(int argc, char *argv[]) +#endif +{ + int require = 0; + require += info_size[argc]; + (void)argv; + return require; +} diff --git a/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CheckTypeSize/LONG_LONG_LIBZIP.bin b/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CheckTypeSize/LONG_LONG_LIBZIP.bin new file mode 100755 index 0000000000000000000000000000000000000000..517ed5ae5708da750a0c39f6388e1d169cb899e8 GIT binary patch literal 1166 zcmaJ=&2G~`5T0E-iIcTsw-r?*fwWG0s1#X(ON2Pp2S5k`4}g&4q}$-cv5md%4?-j@ z6@Oa2Iej=Y1TTnI34_l?6sfVFdLoJbC#+Y4^^ za#6@M7hvDL;Zo%$WuA*fg41ph@ChSY=cnG)!C~wpv6j0le88o?<7%98ZSLwmxDBrJ z#*msQU`P!VWJr~xiE495f$RI!a9h0P!D@Ah2@HS7ZF7USrQ6{h-Y#9HFyNZpq4btbNH#2da{+pnyMpZVA~V5H_$ z3@xgVrb`)qBycVj4;Qe!Gh3$uoB6-NxlkUsu2Nu630dNlRWaCerPb#P3p8xT|1j$V zeyxqlRUK%o>kvL^Hp7I9oc+WH$)-dtNK;+O)Vgdud->$mBekxt@8k3E4Zsg#E<#!2 zSQ-O1F5|gZFVn!jcJb0o4z?#@9D7%5<)z0WkJDs2=q$=uM#o`Xih;c-t1a`UaXJp; qVz8B@iOj<+i;}5#l*u$o +#include +#include + + +#undef KEY +#if defined(__i386) +# define KEY '_','_','i','3','8','6' +#elif defined(__x86_64) +# define KEY '_','_','x','8','6','_','6','4' +#elif defined(__ppc__) +# define KEY '_','_','p','p','c','_','_' +#elif defined(__ppc64__) +# define KEY '_','_','p','p','c','6','4','_','_' +#elif defined(__aarch64__) +# define KEY '_','_','a','a','r','c','h','6','4','_','_' +#elif defined(__ARM_ARCH_7A__) +# define KEY '_','_','A','R','M','_','A','R','C','H','_','7','A','_','_' +#elif defined(__ARM_ARCH_7S__) +# define KEY '_','_','A','R','M','_','A','R','C','H','_','7','S','_','_' +#endif + +#define SIZE (sizeof(long long)) +char info_size[] = {'I', 'N', 'F', 'O', ':', 's','i','z','e','[', + ('0' + ((SIZE / 10000)%10)), + ('0' + ((SIZE / 1000)%10)), + ('0' + ((SIZE / 100)%10)), + ('0' + ((SIZE / 10)%10)), + ('0' + (SIZE % 10)), + ']', +#ifdef KEY + ' ','k','e','y','[', KEY, ']', +#endif + '\0'}; + +#ifdef __CLASSIC_C__ +int main(argc, argv) int argc; char *argv[]; +#else +int main(int argc, char *argv[]) +#endif +{ + int require = 0; + require += info_size[argc]; + (void)argv; + return require; +} diff --git a/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CheckTypeSize/SHORT_LIBZIP.bin b/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CheckTypeSize/SHORT_LIBZIP.bin new file mode 100755 index 0000000000000000000000000000000000000000..569e5eac7b9de85df4dc31925533241ae13ffeff GIT binary patch literal 1166 zcmaJ=&2G~`5T0E-iIcTsw-r?*fwWG0s1#WO4mohD4}cH?9snW7Nw>j?V;g(ZAB1pP zD*nzq40jGZ0q?`Col2Eju;iWDnQvykv1cGG76bsural4~(Xu4vh?Fn_Qqn}*J_(B` zD3UNM-lj6ha&a7qlLy@}pB6z8y%$9=6%xola7KmuAEKS*=_C-Rkp!yQT_B(VPzsu+ zQB7}knx+7h;j-XB3)2A;VlkqZb5Gav0@eB7>u4 zGLcc51Tq}Qg1{ZIC?&)_%yW@QaM~>bK4C=b{M5TTIE;NHR=K;v2VCkquEr_X=C1C8+u%BH z45^6%hSWeohEzG4s5XZbxV}#fx5Zl?tX7wp!0>n6HaB=%x*gu(?WM~U23(VyoXuPd z1Fdx+xLw}0nG5v5KUd`+Ti|?B3UfXy;e1mkuwR7eYlglv@53INR~SVPIP{5c&N%Un znNwM<+D`VV*{2pDSBfu~gmK{1r?OA|t(l*_!#sVh&crp2c*D1A`;`^(Gavf~jMSWp zp+yzabScA+1kR=6;R2R-X6sa7GygX@7s>(6@xujT7AB-K*MJI53@et z*V?FD)q%!JKDU4|=L_n +#include +#include + + +#undef KEY +#if defined(__i386) +# define KEY '_','_','i','3','8','6' +#elif defined(__x86_64) +# define KEY '_','_','x','8','6','_','6','4' +#elif defined(__ppc__) +# define KEY '_','_','p','p','c','_','_' +#elif defined(__ppc64__) +# define KEY '_','_','p','p','c','6','4','_','_' +#elif defined(__aarch64__) +# define KEY '_','_','a','a','r','c','h','6','4','_','_' +#elif defined(__ARM_ARCH_7A__) +# define KEY '_','_','A','R','M','_','A','R','C','H','_','7','A','_','_' +#elif defined(__ARM_ARCH_7S__) +# define KEY '_','_','A','R','M','_','A','R','C','H','_','7','S','_','_' +#endif + +#define SIZE (sizeof(short)) +char info_size[] = {'I', 'N', 'F', 'O', ':', 's','i','z','e','[', + ('0' + ((SIZE / 10000)%10)), + ('0' + ((SIZE / 1000)%10)), + ('0' + ((SIZE / 100)%10)), + ('0' + ((SIZE / 10)%10)), + ('0' + (SIZE % 10)), + ']', +#ifdef KEY + ' ','k','e','y','[', KEY, ']', +#endif + '\0'}; + +#ifdef __CLASSIC_C__ +int main(argc, argv) int argc; char *argv[]; +#else +int main(int argc, char *argv[]) +#endif +{ + int require = 0; + require += info_size[argc]; + (void)argv; + return require; +} diff --git a/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CheckTypeSize/SIZEOF_OFF_T.bin b/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CheckTypeSize/SIZEOF_OFF_T.bin new file mode 100755 index 0000000000000000000000000000000000000000..517ed5ae5708da750a0c39f6388e1d169cb899e8 GIT binary patch literal 1166 zcmaJ=&2G~`5T0E-iIcTsw-r?*fwWG0s1#X(ON2Pp2S5k`4}g&4q}$-cv5md%4?-j@ z6@Oa2Iej=Y1TTnI34_l?6sfVFdLoJbC#+Y4^^ za#6@M7hvDL;Zo%$WuA*fg41ph@ChSY=cnG)!C~wpv6j0le88o?<7%98ZSLwmxDBrJ z#*msQU`P!VWJr~xiE495f$RI!a9h0P!D@Ah2@HS7ZF7USrQ6{h-Y#9HFyNZpq4btbNH#2da{+pnyMpZVA~V5H_$ z3@xgVrb`)qBycVj4;Qe!Gh3$uoB6-NxlkUsu2Nu630dNlRWaCerPb#P3p8xT|1j$V zeyxqlRUK%o>kvL^Hp7I9oc+WH$)-dtNK;+O)Vgdud->$mBekxt@8k3E4Zsg#E<#!2 zSQ-O1F5|gZFVn!jcJb0o4z?#@9D7%5<)z0WkJDs2=q$=uM#o`Xih;c-t1a`UaXJp; qVz8B@iOj<+i;}5#l*u$o +#include +#include + + +#undef KEY +#if defined(__i386) +# define KEY '_','_','i','3','8','6' +#elif defined(__x86_64) +# define KEY '_','_','x','8','6','_','6','4' +#elif defined(__ppc__) +# define KEY '_','_','p','p','c','_','_' +#elif defined(__ppc64__) +# define KEY '_','_','p','p','c','6','4','_','_' +#elif defined(__aarch64__) +# define KEY '_','_','a','a','r','c','h','6','4','_','_' +#elif defined(__ARM_ARCH_7A__) +# define KEY '_','_','A','R','M','_','A','R','C','H','_','7','A','_','_' +#elif defined(__ARM_ARCH_7S__) +# define KEY '_','_','A','R','M','_','A','R','C','H','_','7','S','_','_' +#endif + +#define SIZE (sizeof(off_t)) +char info_size[] = {'I', 'N', 'F', 'O', ':', 's','i','z','e','[', + ('0' + ((SIZE / 10000)%10)), + ('0' + ((SIZE / 1000)%10)), + ('0' + ((SIZE / 100)%10)), + ('0' + ((SIZE / 10)%10)), + ('0' + (SIZE % 10)), + ']', +#ifdef KEY + ' ','k','e','y','[', KEY, ']', +#endif + '\0'}; + +#ifdef __CLASSIC_C__ +int main(argc, argv) int argc; char *argv[]; +#else +int main(int argc, char *argv[]) +#endif +{ + int require = 0; + require += info_size[argc]; + (void)argv; + return require; +} diff --git a/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CheckTypeSize/SIZEOF_SIZE_T.bin b/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CheckTypeSize/SIZEOF_SIZE_T.bin new file mode 100755 index 0000000000000000000000000000000000000000..cd05fe337c0f81343b73b6d96a009a400c380208 GIT binary patch literal 1166 zcmaJ=&2G~`5T0E-iIcTsw-r?*fwWG0s1#WO3FW}4J^(@pcmRYPC*1}oj&1Bse-OfH zsrWndFx)xt1iTNkb}ChB!IF1oXTF*F#-4$&SP%dpoB9Y~M9Y$tBT~W$NJ$fI`y?!) zph&{3c$>-~%f)ddP9Ai_d|CuW^j;LfR7fEIz!??pe~5OLr;|XOMiQuIcY%NgKq+XN zMm4=bGD2yiNyr7gpv_IKB>rlpGZauCtv{sQT!=-QpHXNAg$#2Ejb0E$$zha>i42aG z$wWqJ63B2I3j%kj^N+uY!7>2`RBx0fzc7;sH)ayD}< z47ApP;C6Y}W-ibJ|6G-SY=QGhDa`q-g!4_Ez;uNnHzybpV5USSkH;Ls<&Ipf4P zW=>_bYCGAdW}jMsTq(X_62^g3pUOV4=oG+*Yy9c%6d{x(4M>gNp4N=JVs(uxHxq`il&$?pO=H7Xg%7*&S z?^f42GhnxZDy2qrFkRi7vSAPsU_G26wJsaaUOsvCNUiJZ`}jP31Mq{`xGL3zi%>3c zER6vhFXOpaFVn!jcJb0o4z?#@9D7%5<)z0WkJDs2=q#48jE=*2DF*gpS#6m&jni=$ q7lW-NO=KQsS(Hq@qfDkzA_sOZjs%YRM0oNn6UD$NqG{rZQ~4KeVK}z{ literal 0 HcmV?d00001 diff --git a/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CheckTypeSize/SIZEOF_SIZE_T.c b/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CheckTypeSize/SIZEOF_SIZE_T.c new file mode 100644 index 0000000..f7d214a --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CheckTypeSize/SIZEOF_SIZE_T.c @@ -0,0 +1,46 @@ +#include +#include +#include + + +#undef KEY +#if defined(__i386) +# define KEY '_','_','i','3','8','6' +#elif defined(__x86_64) +# define KEY '_','_','x','8','6','_','6','4' +#elif defined(__ppc__) +# define KEY '_','_','p','p','c','_','_' +#elif defined(__ppc64__) +# define KEY '_','_','p','p','c','6','4','_','_' +#elif defined(__aarch64__) +# define KEY '_','_','a','a','r','c','h','6','4','_','_' +#elif defined(__ARM_ARCH_7A__) +# define KEY '_','_','A','R','M','_','A','R','C','H','_','7','A','_','_' +#elif defined(__ARM_ARCH_7S__) +# define KEY '_','_','A','R','M','_','A','R','C','H','_','7','S','_','_' +#endif + +#define SIZE (sizeof(size_t)) +char info_size[] = {'I', 'N', 'F', 'O', ':', 's','i','z','e','[', + ('0' + ((SIZE / 10000)%10)), + ('0' + ((SIZE / 1000)%10)), + ('0' + ((SIZE / 100)%10)), + ('0' + ((SIZE / 10)%10)), + ('0' + (SIZE % 10)), + ']', +#ifdef KEY + ' ','k','e','y','[', KEY, ']', +#endif + '\0'}; + +#ifdef __CLASSIC_C__ +int main(argc, argv) int argc; char *argv[]; +#else +int main(int argc, char *argv[]) +#endif +{ + int require = 0; + require += info_size[argc]; + (void)argv; + return require; +} diff --git a/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CheckTypeSize/UINT16_T_LIBZIP.bin b/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CheckTypeSize/UINT16_T_LIBZIP.bin new file mode 100755 index 0000000000000000000000000000000000000000..569e5eac7b9de85df4dc31925533241ae13ffeff GIT binary patch literal 1166 zcmaJ=&2G~`5T0E-iIcTsw-r?*fwWG0s1#WO4mohD4}cH?9snW7Nw>j?V;g(ZAB1pP zD*nzq40jGZ0q?`Col2Eju;iWDnQvykv1cGG76bsural4~(Xu4vh?Fn_Qqn}*J_(B` zD3UNM-lj6ha&a7qlLy@}pB6z8y%$9=6%xola7KmuAEKS*=_C-Rkp!yQT_B(VPzsu+ zQB7}knx+7h;j-XB3)2A;VlkqZb5Gav0@eB7>u4 zGLcc51Tq}Qg1{ZIC?&)_%yW@QaM~>bK4C=b{M5TTIE;NHR=K;v2VCkquEr_X=C1C8+u%BH z45^6%hSWeohEzG4s5XZbxV}#fx5Zl?tX7wp!0>n6HaB=%x*gu(?WM~U23(VyoXuPd z1Fdx+xLw}0nG5v5KUd`+Ti|?B3UfXy;e1mkuwR7eYlglv@53INR~SVPIP{5c&N%Un znNwM<+D`VV*{2pDSBfu~gmK{1r?OA|t(l*_!#sVh&crp2c*D1A`;`^(Gavf~jMSWp zp+yzabScA+1kR=6;R2R-X6sa7GygX@7s>(6@xujT7AB-K*MJI53@et z*V?FD)q%!JKDU4|=L_n +#include +#include + + +#undef KEY +#if defined(__i386) +# define KEY '_','_','i','3','8','6' +#elif defined(__x86_64) +# define KEY '_','_','x','8','6','_','6','4' +#elif defined(__ppc__) +# define KEY '_','_','p','p','c','_','_' +#elif defined(__ppc64__) +# define KEY '_','_','p','p','c','6','4','_','_' +#elif defined(__aarch64__) +# define KEY '_','_','a','a','r','c','h','6','4','_','_' +#elif defined(__ARM_ARCH_7A__) +# define KEY '_','_','A','R','M','_','A','R','C','H','_','7','A','_','_' +#elif defined(__ARM_ARCH_7S__) +# define KEY '_','_','A','R','M','_','A','R','C','H','_','7','S','_','_' +#endif + +#define SIZE (sizeof(uint16_t)) +char info_size[] = {'I', 'N', 'F', 'O', ':', 's','i','z','e','[', + ('0' + ((SIZE / 10000)%10)), + ('0' + ((SIZE / 1000)%10)), + ('0' + ((SIZE / 100)%10)), + ('0' + ((SIZE / 10)%10)), + ('0' + (SIZE % 10)), + ']', +#ifdef KEY + ' ','k','e','y','[', KEY, ']', +#endif + '\0'}; + +#ifdef __CLASSIC_C__ +int main(argc, argv) int argc; char *argv[]; +#else +int main(int argc, char *argv[]) +#endif +{ + int require = 0; + require += info_size[argc]; + (void)argv; + return require; +} diff --git a/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CheckTypeSize/UINT32_T_LIBZIP.bin b/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CheckTypeSize/UINT32_T_LIBZIP.bin new file mode 100755 index 0000000000000000000000000000000000000000..cd05fe337c0f81343b73b6d96a009a400c380208 GIT binary patch literal 1166 zcmaJ=&2G~`5T0E-iIcTsw-r?*fwWG0s1#WO3FW}4J^(@pcmRYPC*1}oj&1Bse-OfH zsrWndFx)xt1iTNkb}ChB!IF1oXTF*F#-4$&SP%dpoB9Y~M9Y$tBT~W$NJ$fI`y?!) zph&{3c$>-~%f)ddP9Ai_d|CuW^j;LfR7fEIz!??pe~5OLr;|XOMiQuIcY%NgKq+XN zMm4=bGD2yiNyr7gpv_IKB>rlpGZauCtv{sQT!=-QpHXNAg$#2Ejb0E$$zha>i42aG z$wWqJ63B2I3j%kj^N+uY!7>2`RBx0fzc7;sH)ayD}< z47ApP;C6Y}W-ibJ|6G-SY=QGhDa`q-g!4_Ez;uNnHzybpV5USSkH;Ls<&Ipf4P zW=>_bYCGAdW}jMsTq(X_62^g3pUOV4=oG+*Yy9c%6d{x(4M>gNp4N=JVs(uxHxq`il&$?pO=H7Xg%7*&S z?^f42GhnxZDy2qrFkRi7vSAPsU_G26wJsaaUOsvCNUiJZ`}jP31Mq{`xGL3zi%>3c zER6vhFXOpaFVn!jcJb0o4z?#@9D7%5<)z0WkJDs2=q#48jE=*2DF*gpS#6m&jni=$ q7lW-NO=KQsS(Hq@qfDkzA_sOZjs%YRM0oNn6UD$NqG{rZQ~4KeVK}z{ literal 0 HcmV?d00001 diff --git a/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CheckTypeSize/UINT32_T_LIBZIP.c b/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CheckTypeSize/UINT32_T_LIBZIP.c new file mode 100644 index 0000000..8a51cda --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CheckTypeSize/UINT32_T_LIBZIP.c @@ -0,0 +1,46 @@ +#include +#include +#include + + +#undef KEY +#if defined(__i386) +# define KEY '_','_','i','3','8','6' +#elif defined(__x86_64) +# define KEY '_','_','x','8','6','_','6','4' +#elif defined(__ppc__) +# define KEY '_','_','p','p','c','_','_' +#elif defined(__ppc64__) +# define KEY '_','_','p','p','c','6','4','_','_' +#elif defined(__aarch64__) +# define KEY '_','_','a','a','r','c','h','6','4','_','_' +#elif defined(__ARM_ARCH_7A__) +# define KEY '_','_','A','R','M','_','A','R','C','H','_','7','A','_','_' +#elif defined(__ARM_ARCH_7S__) +# define KEY '_','_','A','R','M','_','A','R','C','H','_','7','S','_','_' +#endif + +#define SIZE (sizeof(uint32_t)) +char info_size[] = {'I', 'N', 'F', 'O', ':', 's','i','z','e','[', + ('0' + ((SIZE / 10000)%10)), + ('0' + ((SIZE / 1000)%10)), + ('0' + ((SIZE / 100)%10)), + ('0' + ((SIZE / 10)%10)), + ('0' + (SIZE % 10)), + ']', +#ifdef KEY + ' ','k','e','y','[', KEY, ']', +#endif + '\0'}; + +#ifdef __CLASSIC_C__ +int main(argc, argv) int argc; char *argv[]; +#else +int main(int argc, char *argv[]) +#endif +{ + int require = 0; + require += info_size[argc]; + (void)argv; + return require; +} diff --git a/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CheckTypeSize/UINT64_T_LIBZIP.bin b/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CheckTypeSize/UINT64_T_LIBZIP.bin new file mode 100755 index 0000000000000000000000000000000000000000..517ed5ae5708da750a0c39f6388e1d169cb899e8 GIT binary patch literal 1166 zcmaJ=&2G~`5T0E-iIcTsw-r?*fwWG0s1#X(ON2Pp2S5k`4}g&4q}$-cv5md%4?-j@ z6@Oa2Iej=Y1TTnI34_l?6sfVFdLoJbC#+Y4^^ za#6@M7hvDL;Zo%$WuA*fg41ph@ChSY=cnG)!C~wpv6j0le88o?<7%98ZSLwmxDBrJ z#*msQU`P!VWJr~xiE495f$RI!a9h0P!D@Ah2@HS7ZF7USrQ6{h-Y#9HFyNZpq4btbNH#2da{+pnyMpZVA~V5H_$ z3@xgVrb`)qBycVj4;Qe!Gh3$uoB6-NxlkUsu2Nu630dNlRWaCerPb#P3p8xT|1j$V zeyxqlRUK%o>kvL^Hp7I9oc+WH$)-dtNK;+O)Vgdud->$mBekxt@8k3E4Zsg#E<#!2 zSQ-O1F5|gZFVn!jcJb0o4z?#@9D7%5<)z0WkJDs2=q$=uM#o`Xih;c-t1a`UaXJp; qVz8B@iOj<+i;}5#l*u$o +#include +#include + + +#undef KEY +#if defined(__i386) +# define KEY '_','_','i','3','8','6' +#elif defined(__x86_64) +# define KEY '_','_','x','8','6','_','6','4' +#elif defined(__ppc__) +# define KEY '_','_','p','p','c','_','_' +#elif defined(__ppc64__) +# define KEY '_','_','p','p','c','6','4','_','_' +#elif defined(__aarch64__) +# define KEY '_','_','a','a','r','c','h','6','4','_','_' +#elif defined(__ARM_ARCH_7A__) +# define KEY '_','_','A','R','M','_','A','R','C','H','_','7','A','_','_' +#elif defined(__ARM_ARCH_7S__) +# define KEY '_','_','A','R','M','_','A','R','C','H','_','7','S','_','_' +#endif + +#define SIZE (sizeof(uint64_t)) +char info_size[] = {'I', 'N', 'F', 'O', ':', 's','i','z','e','[', + ('0' + ((SIZE / 10000)%10)), + ('0' + ((SIZE / 1000)%10)), + ('0' + ((SIZE / 100)%10)), + ('0' + ((SIZE / 10)%10)), + ('0' + (SIZE % 10)), + ']', +#ifdef KEY + ' ','k','e','y','[', KEY, ']', +#endif + '\0'}; + +#ifdef __CLASSIC_C__ +int main(argc, argv) int argc; char *argv[]; +#else +int main(int argc, char *argv[]) +#endif +{ + int require = 0; + require += info_size[argc]; + (void)argv; + return require; +} diff --git a/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CheckTypeSize/UINT8_T_LIBZIP.bin b/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CheckTypeSize/UINT8_T_LIBZIP.bin new file mode 100755 index 0000000000000000000000000000000000000000..e69defdcd65525f04edfa1e0cf45e06e8ca4ab46 GIT binary patch literal 1166 zcmaJ=&2G~`5T0E-iIcTsw-r?*fwWG0s1#YEmmE0N2S5k`4}g&Cq?_Qxv5mdy4?;LC z6@OrlpGZauCtv{sQT!=-QpHpZCg$#2Ejb0E$$#Im6u?!~5 zWGtgJ31m2m1%Z2FQH=8_lOj>@@f@L8o%L?nk#{i3g#hzz-zY2uSUY#diR2i%z2KHF z7lll70rve{E>&*4%yW@QaM~>bK4C=b{M5TTIE;NHR=K;v2VCkquEr_X=C1C8+u%BH z45^6%hSWeohEzG4s5XZbxV}#fx5Zl?tX5Z;!0>n6HaB=%x*gu(?WM~U23(VyoXuPd z1Fdx+xLw}0nG5vLzfk2LTi|?B3UfXy;e1mkuwR7eYlglv@53INR~SVPIrNEd&N%Un znNwM<+D`VV*{2pDSBfu~gmK{1r?OA|t(l*_!#sVh&crp2c*D1A`?VGEGavf~jMSWp zp+yzabScA+1kRP>;R2R-X6sa7GygX@m&yY-RSN7WAtg>(6@xujT7AB-K*MJI53@et z*V?FD)q%!JKDU4|=L_n<9zd-)U)8nNkv#waRxpz^evZ4O- zyVZ5h4A`xpN~sYYOjq}&Y#4+DSPy4Nt;@!WmWjy!lWg6HwE?%0+!S* +#include +#include + + +#undef KEY +#if defined(__i386) +# define KEY '_','_','i','3','8','6' +#elif defined(__x86_64) +# define KEY '_','_','x','8','6','_','6','4' +#elif defined(__ppc__) +# define KEY '_','_','p','p','c','_','_' +#elif defined(__ppc64__) +# define KEY '_','_','p','p','c','6','4','_','_' +#elif defined(__aarch64__) +# define KEY '_','_','a','a','r','c','h','6','4','_','_' +#elif defined(__ARM_ARCH_7A__) +# define KEY '_','_','A','R','M','_','A','R','C','H','_','7','A','_','_' +#elif defined(__ARM_ARCH_7S__) +# define KEY '_','_','A','R','M','_','A','R','C','H','_','7','S','_','_' +#endif + +#define SIZE (sizeof(uint8_t)) +char info_size[] = {'I', 'N', 'F', 'O', ':', 's','i','z','e','[', + ('0' + ((SIZE / 10000)%10)), + ('0' + ((SIZE / 1000)%10)), + ('0' + ((SIZE / 100)%10)), + ('0' + ((SIZE / 10)%10)), + ('0' + (SIZE % 10)), + ']', +#ifdef KEY + ' ','k','e','y','[', KEY, ']', +#endif + '\0'}; + +#ifdef __CLASSIC_C__ +int main(argc, argv) int argc; char *argv[]; +#else +int main(int argc, char *argv[]) +#endif +{ + int require = 0; + require += info_size[argc]; + (void)argv; + return require; +} diff --git a/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CheckTypeSize/__INT16_LIBZIP.c b/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CheckTypeSize/__INT16_LIBZIP.c new file mode 100644 index 0000000..fe73818 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CheckTypeSize/__INT16_LIBZIP.c @@ -0,0 +1,46 @@ +#include +#include +#include + + +#undef KEY +#if defined(__i386) +# define KEY '_','_','i','3','8','6' +#elif defined(__x86_64) +# define KEY '_','_','x','8','6','_','6','4' +#elif defined(__ppc__) +# define KEY '_','_','p','p','c','_','_' +#elif defined(__ppc64__) +# define KEY '_','_','p','p','c','6','4','_','_' +#elif defined(__aarch64__) +# define KEY '_','_','a','a','r','c','h','6','4','_','_' +#elif defined(__ARM_ARCH_7A__) +# define KEY '_','_','A','R','M','_','A','R','C','H','_','7','A','_','_' +#elif defined(__ARM_ARCH_7S__) +# define KEY '_','_','A','R','M','_','A','R','C','H','_','7','S','_','_' +#endif + +#define SIZE (sizeof(__int16)) +char info_size[] = {'I', 'N', 'F', 'O', ':', 's','i','z','e','[', + ('0' + ((SIZE / 10000)%10)), + ('0' + ((SIZE / 1000)%10)), + ('0' + ((SIZE / 100)%10)), + ('0' + ((SIZE / 10)%10)), + ('0' + (SIZE % 10)), + ']', +#ifdef KEY + ' ','k','e','y','[', KEY, ']', +#endif + '\0'}; + +#ifdef __CLASSIC_C__ +int main(argc, argv) int argc; char *argv[]; +#else +int main(int argc, char *argv[]) +#endif +{ + int require = 0; + require += info_size[argc]; + (void)argv; + return require; +} diff --git a/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CheckTypeSize/__INT32_LIBZIP.c b/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CheckTypeSize/__INT32_LIBZIP.c new file mode 100644 index 0000000..5bbafc9 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CheckTypeSize/__INT32_LIBZIP.c @@ -0,0 +1,46 @@ +#include +#include +#include + + +#undef KEY +#if defined(__i386) +# define KEY '_','_','i','3','8','6' +#elif defined(__x86_64) +# define KEY '_','_','x','8','6','_','6','4' +#elif defined(__ppc__) +# define KEY '_','_','p','p','c','_','_' +#elif defined(__ppc64__) +# define KEY '_','_','p','p','c','6','4','_','_' +#elif defined(__aarch64__) +# define KEY '_','_','a','a','r','c','h','6','4','_','_' +#elif defined(__ARM_ARCH_7A__) +# define KEY '_','_','A','R','M','_','A','R','C','H','_','7','A','_','_' +#elif defined(__ARM_ARCH_7S__) +# define KEY '_','_','A','R','M','_','A','R','C','H','_','7','S','_','_' +#endif + +#define SIZE (sizeof(__int32)) +char info_size[] = {'I', 'N', 'F', 'O', ':', 's','i','z','e','[', + ('0' + ((SIZE / 10000)%10)), + ('0' + ((SIZE / 1000)%10)), + ('0' + ((SIZE / 100)%10)), + ('0' + ((SIZE / 10)%10)), + ('0' + (SIZE % 10)), + ']', +#ifdef KEY + ' ','k','e','y','[', KEY, ']', +#endif + '\0'}; + +#ifdef __CLASSIC_C__ +int main(argc, argv) int argc; char *argv[]; +#else +int main(int argc, char *argv[]) +#endif +{ + int require = 0; + require += info_size[argc]; + (void)argv; + return require; +} diff --git a/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CheckTypeSize/__INT64_LIBZIP.c b/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CheckTypeSize/__INT64_LIBZIP.c new file mode 100644 index 0000000..6bce82c --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CheckTypeSize/__INT64_LIBZIP.c @@ -0,0 +1,46 @@ +#include +#include +#include + + +#undef KEY +#if defined(__i386) +# define KEY '_','_','i','3','8','6' +#elif defined(__x86_64) +# define KEY '_','_','x','8','6','_','6','4' +#elif defined(__ppc__) +# define KEY '_','_','p','p','c','_','_' +#elif defined(__ppc64__) +# define KEY '_','_','p','p','c','6','4','_','_' +#elif defined(__aarch64__) +# define KEY '_','_','a','a','r','c','h','6','4','_','_' +#elif defined(__ARM_ARCH_7A__) +# define KEY '_','_','A','R','M','_','A','R','C','H','_','7','A','_','_' +#elif defined(__ARM_ARCH_7S__) +# define KEY '_','_','A','R','M','_','A','R','C','H','_','7','S','_','_' +#endif + +#define SIZE (sizeof(__int64)) +char info_size[] = {'I', 'N', 'F', 'O', ':', 's','i','z','e','[', + ('0' + ((SIZE / 10000)%10)), + ('0' + ((SIZE / 1000)%10)), + ('0' + ((SIZE / 100)%10)), + ('0' + ((SIZE / 10)%10)), + ('0' + (SIZE % 10)), + ']', +#ifdef KEY + ' ','k','e','y','[', KEY, ']', +#endif + '\0'}; + +#ifdef __CLASSIC_C__ +int main(argc, argv) int argc; char *argv[]; +#else +int main(int argc, char *argv[]) +#endif +{ + int require = 0; + require += info_size[argc]; + (void)argv; + return require; +} diff --git a/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CheckTypeSize/__INT8_LIBZIP.c b/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CheckTypeSize/__INT8_LIBZIP.c new file mode 100644 index 0000000..f239fef --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/CheckTypeSize/__INT8_LIBZIP.c @@ -0,0 +1,46 @@ +#include +#include +#include + + +#undef KEY +#if defined(__i386) +# define KEY '_','_','i','3','8','6' +#elif defined(__x86_64) +# define KEY '_','_','x','8','6','_','6','4' +#elif defined(__ppc__) +# define KEY '_','_','p','p','c','_','_' +#elif defined(__ppc64__) +# define KEY '_','_','p','p','c','6','4','_','_' +#elif defined(__aarch64__) +# define KEY '_','_','a','a','r','c','h','6','4','_','_' +#elif defined(__ARM_ARCH_7A__) +# define KEY '_','_','A','R','M','_','A','R','C','H','_','7','A','_','_' +#elif defined(__ARM_ARCH_7S__) +# define KEY '_','_','A','R','M','_','A','R','C','H','_','7','S','_','_' +#endif + +#define SIZE (sizeof(__int8)) +char info_size[] = {'I', 'N', 'F', 'O', ':', 's','i','z','e','[', + ('0' + ((SIZE / 10000)%10)), + ('0' + ((SIZE / 1000)%10)), + ('0' + ((SIZE / 100)%10)), + ('0' + ((SIZE / 10)%10)), + ('0' + (SIZE % 10)), + ']', +#ifdef KEY + ' ','k','e','y','[', KEY, ']', +#endif + '\0'}; + +#ifdef __CLASSIC_C__ +int main(argc, argv) int argc; char *argv[]; +#else +int main(int argc, char *argv[]) +#endif +{ + int require = 0; + require += info_size[argc]; + (void)argv; + return require; +} diff --git a/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/Export/ab63c3a9eda5ec24a2943b813039874c/libzip-targets-noconfig.cmake b/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/Export/ab63c3a9eda5ec24a2943b813039874c/libzip-targets-noconfig.cmake new file mode 100644 index 0000000..8316d31 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/Export/ab63c3a9eda5ec24a2943b813039874c/libzip-targets-noconfig.cmake @@ -0,0 +1,46 @@ +#---------------------------------------------------------------- +# Generated CMake target import file. +#---------------------------------------------------------------- + +# Commands may need to know the format version. +set(CMAKE_IMPORT_FILE_VERSION 1) + +# Import target "libzip::zip" for configuration "" +set_property(TARGET libzip::zip APPEND PROPERTY IMPORTED_CONFIGURATIONS NOCONFIG) +set_target_properties(libzip::zip PROPERTIES + IMPORTED_LINK_INTERFACE_LANGUAGES_NOCONFIG "C" + IMPORTED_LOCATION_NOCONFIG "${_IMPORT_PREFIX}/lib/libzip.a" + ) + +list(APPEND _cmake_import_check_targets libzip::zip ) +list(APPEND _cmake_import_check_files_for_libzip::zip "${_IMPORT_PREFIX}/lib/libzip.a" ) + +# Import target "libzip::zipcmp" for configuration "" +set_property(TARGET libzip::zipcmp APPEND PROPERTY IMPORTED_CONFIGURATIONS NOCONFIG) +set_target_properties(libzip::zipcmp PROPERTIES + IMPORTED_LOCATION_NOCONFIG "${_IMPORT_PREFIX}/bin/zipcmp.js" + ) + +list(APPEND _cmake_import_check_targets libzip::zipcmp ) +list(APPEND _cmake_import_check_files_for_libzip::zipcmp "${_IMPORT_PREFIX}/bin/zipcmp.js" ) + +# Import target "libzip::zipmerge" for configuration "" +set_property(TARGET libzip::zipmerge APPEND PROPERTY IMPORTED_CONFIGURATIONS NOCONFIG) +set_target_properties(libzip::zipmerge PROPERTIES + IMPORTED_LOCATION_NOCONFIG "${_IMPORT_PREFIX}/bin/zipmerge.js" + ) + +list(APPEND _cmake_import_check_targets libzip::zipmerge ) +list(APPEND _cmake_import_check_files_for_libzip::zipmerge "${_IMPORT_PREFIX}/bin/zipmerge.js" ) + +# Import target "libzip::ziptool" for configuration "" +set_property(TARGET libzip::ziptool APPEND PROPERTY IMPORTED_CONFIGURATIONS NOCONFIG) +set_target_properties(libzip::ziptool PROPERTIES + IMPORTED_LOCATION_NOCONFIG "${_IMPORT_PREFIX}/bin/ziptool.js" + ) + +list(APPEND _cmake_import_check_targets libzip::ziptool ) +list(APPEND _cmake_import_check_files_for_libzip::ziptool "${_IMPORT_PREFIX}/bin/ziptool.js" ) + +# Commands beyond this point should not need to know the version. +set(CMAKE_IMPORT_FILE_VERSION) diff --git a/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/Export/ab63c3a9eda5ec24a2943b813039874c/libzip-targets.cmake b/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/Export/ab63c3a9eda5ec24a2943b813039874c/libzip-targets.cmake new file mode 100644 index 0000000..187c985 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/Export/ab63c3a9eda5ec24a2943b813039874c/libzip-targets.cmake @@ -0,0 +1,116 @@ +# Generated by CMake + +if("${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}" LESS 2.8) + message(FATAL_ERROR "CMake >= 2.8.0 required") +endif() +if(CMAKE_VERSION VERSION_LESS "2.8.3") + message(FATAL_ERROR "CMake >= 2.8.3 required") +endif() +cmake_policy(PUSH) +cmake_policy(VERSION 2.8.3...3.26) +#---------------------------------------------------------------- +# Generated CMake target import file. +#---------------------------------------------------------------- + +# Commands may need to know the format version. +set(CMAKE_IMPORT_FILE_VERSION 1) + +# Protect against multiple inclusion, which would fail when already imported targets are added once more. +set(_cmake_targets_defined "") +set(_cmake_targets_not_defined "") +set(_cmake_expected_targets "") +foreach(_cmake_expected_target IN ITEMS libzip::zip libzip::zipcmp libzip::zipmerge libzip::ziptool) + list(APPEND _cmake_expected_targets "${_cmake_expected_target}") + if(TARGET "${_cmake_expected_target}") + list(APPEND _cmake_targets_defined "${_cmake_expected_target}") + else() + list(APPEND _cmake_targets_not_defined "${_cmake_expected_target}") + endif() +endforeach() +unset(_cmake_expected_target) +if(_cmake_targets_defined STREQUAL _cmake_expected_targets) + unset(_cmake_targets_defined) + unset(_cmake_targets_not_defined) + unset(_cmake_expected_targets) + unset(CMAKE_IMPORT_FILE_VERSION) + cmake_policy(POP) + return() +endif() +if(NOT _cmake_targets_defined STREQUAL "") + string(REPLACE ";" ", " _cmake_targets_defined_text "${_cmake_targets_defined}") + string(REPLACE ";" ", " _cmake_targets_not_defined_text "${_cmake_targets_not_defined}") + message(FATAL_ERROR "Some (but not all) targets in this export set were already defined.\nTargets Defined: ${_cmake_targets_defined_text}\nTargets not yet defined: ${_cmake_targets_not_defined_text}\n") +endif() +unset(_cmake_targets_defined) +unset(_cmake_targets_not_defined) +unset(_cmake_expected_targets) + + +# Compute the installation prefix relative to this file. +get_filename_component(_IMPORT_PREFIX "${CMAKE_CURRENT_LIST_FILE}" PATH) +get_filename_component(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH) +get_filename_component(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH) +get_filename_component(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH) +if(_IMPORT_PREFIX STREQUAL "/") + set(_IMPORT_PREFIX "") +endif() + +# Create imported target libzip::zip +add_library(libzip::zip STATIC IMPORTED) + +set_target_properties(libzip::zip PROPERTIES + INTERFACE_INCLUDE_DIRECTORIES "${_IMPORT_PREFIX}/include;${_IMPORT_PREFIX}/include" + INTERFACE_LINK_LIBRARIES "\$" +) + +# Create imported target libzip::zipcmp +add_executable(libzip::zipcmp IMPORTED) + +# Create imported target libzip::zipmerge +add_executable(libzip::zipmerge IMPORTED) + +# Create imported target libzip::ziptool +add_executable(libzip::ziptool IMPORTED) + +if(CMAKE_VERSION VERSION_LESS 2.8.12) + message(FATAL_ERROR "This file relies on consumers using CMake 2.8.12 or greater.") +endif() + +# Load information for each installed configuration. +file(GLOB _cmake_config_files "${CMAKE_CURRENT_LIST_DIR}/libzip-targets-*.cmake") +foreach(_cmake_config_file IN LISTS _cmake_config_files) + include("${_cmake_config_file}") +endforeach() +unset(_cmake_config_file) +unset(_cmake_config_files) + +# Cleanup temporary variables. +set(_IMPORT_PREFIX) + +# Loop over all imported files and verify that they actually exist +foreach(_cmake_target IN LISTS _cmake_import_check_targets) + foreach(_cmake_file IN LISTS "_cmake_import_check_files_for_${_cmake_target}") + if(NOT EXISTS "${_cmake_file}") + message(FATAL_ERROR "The imported target \"${_cmake_target}\" references the file + \"${_cmake_file}\" +but this file does not exist. Possible reasons include: +* The file was deleted, renamed, or moved to another location. +* An install or uninstall procedure did not complete successfully. +* The installation package was faulty and contained + \"${CMAKE_CURRENT_LIST_FILE}\" +but not all the files it references. +") + endif() + endforeach() + unset(_cmake_file) + unset("_cmake_import_check_files_for_${_cmake_target}") +endforeach() +unset(_cmake_target) +unset(_cmake_import_check_targets) + +# This file does not depend on other imported targets which have +# been exported from the same project but in a separate export set. + +# Commands beyond this point should not need to know the version. +set(CMAKE_IMPORT_FILE_VERSION) +cmake_policy(POP) diff --git a/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/Makefile.cmake b/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/Makefile.cmake new file mode 100644 index 0000000..37fc2d7 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/Makefile.cmake @@ -0,0 +1,209 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.28 + +# The generator used is: +set(CMAKE_DEPENDS_GENERATOR "Unix Makefiles") + +# The top level Makefile was generated from the following files: +set(CMAKE_MAKEFILE_DEPENDS + "CMakeCache.txt" + "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/CMakeLists.txt" + "CMakeFiles/3.28.3/CMakeCCompiler.cmake" + "CMakeFiles/3.28.3/CMakeSystem.cmake" + "CMakeFiles/CheckTypeSize/INT16_T_LIBZIP.c" + "CMakeFiles/CheckTypeSize/INT32_T_LIBZIP.c" + "CMakeFiles/CheckTypeSize/INT64_T_LIBZIP.c" + "CMakeFiles/CheckTypeSize/INT8_T_LIBZIP.c" + "CMakeFiles/CheckTypeSize/INT_LIBZIP.c" + "CMakeFiles/CheckTypeSize/LONG_LIBZIP.c" + "CMakeFiles/CheckTypeSize/LONG_LONG_LIBZIP.c" + "CMakeFiles/CheckTypeSize/SHORT_LIBZIP.c" + "CMakeFiles/CheckTypeSize/SIZEOF_OFF_T.c" + "CMakeFiles/CheckTypeSize/SIZEOF_SIZE_T.c" + "CMakeFiles/CheckTypeSize/UINT16_T_LIBZIP.c" + "CMakeFiles/CheckTypeSize/UINT32_T_LIBZIP.c" + "CMakeFiles/CheckTypeSize/UINT64_T_LIBZIP.c" + "CMakeFiles/CheckTypeSize/UINT8_T_LIBZIP.c" + "CMakeFiles/CheckTypeSize/__INT16_LIBZIP.c" + "CMakeFiles/CheckTypeSize/__INT32_LIBZIP.c" + "CMakeFiles/CheckTypeSize/__INT64_LIBZIP.c" + "CMakeFiles/CheckTypeSize/__INT8_LIBZIP.c" + "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/cmake/Dist.cmake" + "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/cmake/FindMbedTLS.cmake" + "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/cmake/FindNettle.cmake" + "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/cmake/Findzstd.cmake" + "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/config.h.in" + "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/examples/CMakeLists.txt" + "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/CMakeLists.txt" + "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/libzip-config.cmake.in" + "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/libzip.pc.in" + "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/man/CMakeLists.txt" + "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/ossfuzz/CMakeLists.txt" + "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/src/CMakeLists.txt" + "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/zipconf.h.in" + "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/cmake/Modules/CheckTypeSize.c.in" + "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/cmake/Modules/CheckTypeSize.cmake" + "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/cmake/Modules/Platform/Emscripten.cmake" + "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/cmake/Modules/TestBigEndian.cmake" + "/usr/share/cmake-3.28/Modules/BasicConfigVersion-AnyNewerVersion.cmake.in" + "/usr/share/cmake-3.28/Modules/CMakeCCompiler.cmake.in" + "/usr/share/cmake-3.28/Modules/CMakeCCompilerABI.c" + "/usr/share/cmake-3.28/Modules/CMakeCInformation.cmake" + "/usr/share/cmake-3.28/Modules/CMakeCommonLanguageInclude.cmake" + "/usr/share/cmake-3.28/Modules/CMakeCompilerIdDetection.cmake" + "/usr/share/cmake-3.28/Modules/CMakeDetermineCCompiler.cmake" + "/usr/share/cmake-3.28/Modules/CMakeDetermineCompileFeatures.cmake" + "/usr/share/cmake-3.28/Modules/CMakeDetermineCompiler.cmake" + "/usr/share/cmake-3.28/Modules/CMakeDetermineCompilerABI.cmake" + "/usr/share/cmake-3.28/Modules/CMakeDetermineCompilerId.cmake" + "/usr/share/cmake-3.28/Modules/CMakeDetermineSystem.cmake" + "/usr/share/cmake-3.28/Modules/CMakeFindBinUtils.cmake" + "/usr/share/cmake-3.28/Modules/CMakeGenericSystem.cmake" + "/usr/share/cmake-3.28/Modules/CMakeInitializeConfigs.cmake" + "/usr/share/cmake-3.28/Modules/CMakeLanguageInformation.cmake" + "/usr/share/cmake-3.28/Modules/CMakePackageConfigHelpers.cmake" + "/usr/share/cmake-3.28/Modules/CMakeParseImplicitIncludeInfo.cmake" + "/usr/share/cmake-3.28/Modules/CMakeParseImplicitLinkInfo.cmake" + "/usr/share/cmake-3.28/Modules/CMakeParseLibraryArchitecture.cmake" + "/usr/share/cmake-3.28/Modules/CMakeSystem.cmake.in" + "/usr/share/cmake-3.28/Modules/CMakeSystemSpecificInformation.cmake" + "/usr/share/cmake-3.28/Modules/CMakeSystemSpecificInitialize.cmake" + "/usr/share/cmake-3.28/Modules/CMakeTestCCompiler.cmake" + "/usr/share/cmake-3.28/Modules/CMakeTestCompilerCommon.cmake" + "/usr/share/cmake-3.28/Modules/CMakeUnixFindMake.cmake" + "/usr/share/cmake-3.28/Modules/CheckCSourceCompiles.cmake" + "/usr/share/cmake-3.28/Modules/CheckCSourceRuns.cmake" + "/usr/share/cmake-3.28/Modules/CheckCXXSourceCompiles.cmake" + "/usr/share/cmake-3.28/Modules/CheckFunctionExists.cmake" + "/usr/share/cmake-3.28/Modules/CheckIncludeFile.cmake" + "/usr/share/cmake-3.28/Modules/CheckIncludeFileCXX.cmake" + "/usr/share/cmake-3.28/Modules/CheckIncludeFiles.cmake" + "/usr/share/cmake-3.28/Modules/CheckLibraryExists.cmake" + "/usr/share/cmake-3.28/Modules/CheckSourceCompiles.cmake" + "/usr/share/cmake-3.28/Modules/CheckStructHasMember.cmake" + "/usr/share/cmake-3.28/Modules/CheckSymbolExists.cmake" + "/usr/share/cmake-3.28/Modules/Compiler/ADSP-DetermineCompiler.cmake" + "/usr/share/cmake-3.28/Modules/Compiler/ARMCC-DetermineCompiler.cmake" + "/usr/share/cmake-3.28/Modules/Compiler/ARMClang-DetermineCompiler.cmake" + "/usr/share/cmake-3.28/Modules/Compiler/AppleClang-DetermineCompiler.cmake" + "/usr/share/cmake-3.28/Modules/Compiler/Borland-DetermineCompiler.cmake" + "/usr/share/cmake-3.28/Modules/Compiler/Bruce-C-DetermineCompiler.cmake" + "/usr/share/cmake-3.28/Modules/Compiler/CMakeCommonCompilerMacros.cmake" + "/usr/share/cmake-3.28/Modules/Compiler/Clang-C.cmake" + "/usr/share/cmake-3.28/Modules/Compiler/Clang-DetermineCompiler.cmake" + "/usr/share/cmake-3.28/Modules/Compiler/Clang-DetermineCompilerInternal.cmake" + "/usr/share/cmake-3.28/Modules/Compiler/Clang-FindBinUtils.cmake" + "/usr/share/cmake-3.28/Modules/Compiler/Clang.cmake" + "/usr/share/cmake-3.28/Modules/Compiler/Compaq-C-DetermineCompiler.cmake" + "/usr/share/cmake-3.28/Modules/Compiler/Cray-DetermineCompiler.cmake" + "/usr/share/cmake-3.28/Modules/Compiler/CrayClang-DetermineCompiler.cmake" + "/usr/share/cmake-3.28/Modules/Compiler/Embarcadero-DetermineCompiler.cmake" + "/usr/share/cmake-3.28/Modules/Compiler/Fujitsu-DetermineCompiler.cmake" + "/usr/share/cmake-3.28/Modules/Compiler/FujitsuClang-DetermineCompiler.cmake" + "/usr/share/cmake-3.28/Modules/Compiler/GHS-DetermineCompiler.cmake" + "/usr/share/cmake-3.28/Modules/Compiler/GNU-C-DetermineCompiler.cmake" + "/usr/share/cmake-3.28/Modules/Compiler/GNU.cmake" + "/usr/share/cmake-3.28/Modules/Compiler/HP-C-DetermineCompiler.cmake" + "/usr/share/cmake-3.28/Modules/Compiler/IAR-DetermineCompiler.cmake" + "/usr/share/cmake-3.28/Modules/Compiler/IBMCPP-C-DetermineVersionInternal.cmake" + "/usr/share/cmake-3.28/Modules/Compiler/IBMClang-C-DetermineCompiler.cmake" + "/usr/share/cmake-3.28/Modules/Compiler/Intel-DetermineCompiler.cmake" + "/usr/share/cmake-3.28/Modules/Compiler/IntelLLVM-DetermineCompiler.cmake" + "/usr/share/cmake-3.28/Modules/Compiler/LCC-C-DetermineCompiler.cmake" + "/usr/share/cmake-3.28/Modules/Compiler/MSVC-DetermineCompiler.cmake" + "/usr/share/cmake-3.28/Modules/Compiler/NVHPC-DetermineCompiler.cmake" + "/usr/share/cmake-3.28/Modules/Compiler/NVIDIA-DetermineCompiler.cmake" + "/usr/share/cmake-3.28/Modules/Compiler/OpenWatcom-DetermineCompiler.cmake" + "/usr/share/cmake-3.28/Modules/Compiler/OrangeC-DetermineCompiler.cmake" + "/usr/share/cmake-3.28/Modules/Compiler/PGI-DetermineCompiler.cmake" + "/usr/share/cmake-3.28/Modules/Compiler/PathScale-DetermineCompiler.cmake" + "/usr/share/cmake-3.28/Modules/Compiler/SCO-DetermineCompiler.cmake" + "/usr/share/cmake-3.28/Modules/Compiler/SDCC-C-DetermineCompiler.cmake" + "/usr/share/cmake-3.28/Modules/Compiler/SunPro-C-DetermineCompiler.cmake" + "/usr/share/cmake-3.28/Modules/Compiler/TI-DetermineCompiler.cmake" + "/usr/share/cmake-3.28/Modules/Compiler/Tasking-DetermineCompiler.cmake" + "/usr/share/cmake-3.28/Modules/Compiler/TinyCC-C-DetermineCompiler.cmake" + "/usr/share/cmake-3.28/Modules/Compiler/VisualAge-C-DetermineCompiler.cmake" + "/usr/share/cmake-3.28/Modules/Compiler/Watcom-DetermineCompiler.cmake" + "/usr/share/cmake-3.28/Modules/Compiler/XL-C-DetermineCompiler.cmake" + "/usr/share/cmake-3.28/Modules/Compiler/XLClang-C-DetermineCompiler.cmake" + "/usr/share/cmake-3.28/Modules/Compiler/zOS-C-DetermineCompiler.cmake" + "/usr/share/cmake-3.28/Modules/FindBZip2.cmake" + "/usr/share/cmake-3.28/Modules/FindGnuTLS.cmake" + "/usr/share/cmake-3.28/Modules/FindLibLZMA.cmake" + "/usr/share/cmake-3.28/Modules/FindOpenSSL.cmake" + "/usr/share/cmake-3.28/Modules/FindPackageHandleStandardArgs.cmake" + "/usr/share/cmake-3.28/Modules/FindPackageMessage.cmake" + "/usr/share/cmake-3.28/Modules/FindPkgConfig.cmake" + "/usr/share/cmake-3.28/Modules/FindZLIB.cmake" + "/usr/share/cmake-3.28/Modules/GNUInstallDirs.cmake" + "/usr/share/cmake-3.28/Modules/Internal/CheckSourceCompiles.cmake" + "/usr/share/cmake-3.28/Modules/Internal/CheckSourceRuns.cmake" + "/usr/share/cmake-3.28/Modules/Internal/FeatureTesting.cmake" + "/usr/share/cmake-3.28/Modules/SelectLibraryConfigurations.cmake" + "/usr/share/cmake-3.28/Modules/WriteBasicConfigVersionFile.cmake" + ) + +# The corresponding makefile is: +set(CMAKE_MAKEFILE_OUTPUTS + "Makefile" + "CMakeFiles/cmake.check_cache" + ) + +# Byproducts of CMake generate step: +set(CMAKE_MAKEFILE_PRODUCTS + "CMakeFiles/3.28.3/CMakeSystem.cmake" + "CMakeFiles/3.28.3/CMakeCCompiler.cmake" + "CMakeFiles/3.28.3/CMakeCCompiler.cmake" + "CMakeFiles/CheckTypeSize/__INT8_LIBZIP.c" + "CMakeFiles/CheckTypeSize/INT8_T_LIBZIP.c" + "CMakeFiles/CheckTypeSize/UINT8_T_LIBZIP.c" + "CMakeFiles/CheckTypeSize/__INT16_LIBZIP.c" + "CMakeFiles/CheckTypeSize/INT16_T_LIBZIP.c" + "CMakeFiles/CheckTypeSize/UINT16_T_LIBZIP.c" + "CMakeFiles/CheckTypeSize/__INT32_LIBZIP.c" + "CMakeFiles/CheckTypeSize/INT32_T_LIBZIP.c" + "CMakeFiles/CheckTypeSize/UINT32_T_LIBZIP.c" + "CMakeFiles/CheckTypeSize/__INT64_LIBZIP.c" + "CMakeFiles/CheckTypeSize/INT64_T_LIBZIP.c" + "CMakeFiles/CheckTypeSize/UINT64_T_LIBZIP.c" + "CMakeFiles/CheckTypeSize/SHORT_LIBZIP.c" + "CMakeFiles/CheckTypeSize/INT_LIBZIP.c" + "CMakeFiles/CheckTypeSize/LONG_LIBZIP.c" + "CMakeFiles/CheckTypeSize/LONG_LONG_LIBZIP.c" + "CMakeFiles/CheckTypeSize/SIZEOF_OFF_T.c" + "CMakeFiles/CheckTypeSize/SIZEOF_SIZE_T.c" + "libzip.pc" + "config.h" + "zipconf.h" + "libzip-config-version.cmake" + "libzip-config.cmake" + "CMakeFiles/CMakeDirectoryInformation.cmake" + "lib/CMakeFiles/CMakeDirectoryInformation.cmake" + "man/CMakeFiles/CMakeDirectoryInformation.cmake" + "src/CMakeFiles/CMakeDirectoryInformation.cmake" + "ossfuzz/CMakeFiles/CMakeDirectoryInformation.cmake" + "examples/CMakeFiles/CMakeDirectoryInformation.cmake" + ) + +# Dependency information for all targets: +set(CMAKE_DEPEND_INFO_FILES + "CMakeFiles/dist.dir/DependInfo.cmake" + "CMakeFiles/distcheck.dir/DependInfo.cmake" + "lib/CMakeFiles/zip.dir/DependInfo.cmake" + "man/CMakeFiles/man.dir/DependInfo.cmake" + "man/CMakeFiles/update-man.dir/DependInfo.cmake" + "man/CMakeFiles/update-html.dir/DependInfo.cmake" + "man/CMakeFiles/update_zip_errors.dir/DependInfo.cmake" + "src/CMakeFiles/zipcmp.dir/DependInfo.cmake" + "src/CMakeFiles/zipmerge.dir/DependInfo.cmake" + "src/CMakeFiles/ziptool.dir/DependInfo.cmake" + "ossfuzz/CMakeFiles/zip_read_file_fuzzer.dir/DependInfo.cmake" + "ossfuzz/CMakeFiles/zip_read_fuzzer.dir/DependInfo.cmake" + "ossfuzz/CMakeFiles/zip_write_encrypt_aes256_file_fuzzer.dir/DependInfo.cmake" + "ossfuzz/CMakeFiles/zip_write_encrypt_pkware_file_fuzzer.dir/DependInfo.cmake" + "ossfuzz/CMakeFiles/list-fuzzers.dir/DependInfo.cmake" + "examples/CMakeFiles/add-compressed-data.dir/DependInfo.cmake" + "examples/CMakeFiles/autoclose-archive.dir/DependInfo.cmake" + "examples/CMakeFiles/in-memory.dir/DependInfo.cmake" + ) diff --git a/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/Makefile2 b/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/Makefile2 new file mode 100644 index 0000000..91955ce --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/Makefile2 @@ -0,0 +1,661 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.28 + +# Default target executed when no arguments are given to make. +default_target: all +.PHONY : default_target + +#============================================================================= +# Special targets provided by cmake. + +# Disable implicit rules so canonical targets will work. +.SUFFIXES: + +# Disable VCS-based implicit rules. +% : %,v + +# Disable VCS-based implicit rules. +% : RCS/% + +# Disable VCS-based implicit rules. +% : RCS/%,v + +# Disable VCS-based implicit rules. +% : SCCS/s.% + +# Disable VCS-based implicit rules. +% : s.% + +.SUFFIXES: .hpux_make_needs_suffix_list + +# Command-line flag to silence nested $(MAKE). +$(VERBOSE)MAKESILENT = -s + +#Suppress display of executed commands. +$(VERBOSE).SILENT: + +# A target that is always out of date. +cmake_force: +.PHONY : cmake_force + +#============================================================================= +# Set environment variables for the build. + +# The shell in which to execute make rules. +SHELL = /bin/sh + +# The CMake executable. +CMAKE_COMMAND = /usr/bin/cmake + +# The command to remove a file. +RM = /usr/bin/cmake -E rm -f + +# Escaping for special characters. +EQUALS = = + +# The top-level source directory on which CMake was run. +CMAKE_SOURCE_DIR = "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3" + +# The top-level build directory on which CMake was run. +CMAKE_BINARY_DIR = "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" + +#============================================================================= +# Directory level rules for the build root directory + +# The main recursive "all" target. +all: lib/all +all: man/all +all: src/all +all: ossfuzz/all +all: examples/all +.PHONY : all + +# The main recursive "preinstall" target. +preinstall: lib/preinstall +preinstall: man/preinstall +preinstall: src/preinstall +preinstall: ossfuzz/preinstall +preinstall: examples/preinstall +.PHONY : preinstall + +# The main recursive "clean" target. +clean: CMakeFiles/dist.dir/clean +clean: CMakeFiles/distcheck.dir/clean +clean: lib/clean +clean: man/clean +clean: src/clean +clean: ossfuzz/clean +clean: examples/clean +.PHONY : clean + +#============================================================================= +# Directory level rules for directory examples + +# Recursive "all" directory target. +examples/all: examples/CMakeFiles/add-compressed-data.dir/all +examples/all: examples/CMakeFiles/autoclose-archive.dir/all +examples/all: examples/CMakeFiles/in-memory.dir/all +.PHONY : examples/all + +# Recursive "preinstall" directory target. +examples/preinstall: +.PHONY : examples/preinstall + +# Recursive "clean" directory target. +examples/clean: examples/CMakeFiles/add-compressed-data.dir/clean +examples/clean: examples/CMakeFiles/autoclose-archive.dir/clean +examples/clean: examples/CMakeFiles/in-memory.dir/clean +.PHONY : examples/clean + +#============================================================================= +# Directory level rules for directory lib + +# Recursive "all" directory target. +lib/all: lib/CMakeFiles/zip.dir/all +.PHONY : lib/all + +# Recursive "preinstall" directory target. +lib/preinstall: +.PHONY : lib/preinstall + +# Recursive "clean" directory target. +lib/clean: lib/CMakeFiles/zip.dir/clean +.PHONY : lib/clean + +#============================================================================= +# Directory level rules for directory man + +# Recursive "all" directory target. +man/all: man/CMakeFiles/man.dir/all +.PHONY : man/all + +# Recursive "preinstall" directory target. +man/preinstall: +.PHONY : man/preinstall + +# Recursive "clean" directory target. +man/clean: man/CMakeFiles/man.dir/clean +man/clean: man/CMakeFiles/update-man.dir/clean +man/clean: man/CMakeFiles/update-html.dir/clean +man/clean: man/CMakeFiles/update_zip_errors.dir/clean +.PHONY : man/clean + +#============================================================================= +# Directory level rules for directory ossfuzz + +# Recursive "all" directory target. +ossfuzz/all: ossfuzz/CMakeFiles/zip_read_file_fuzzer.dir/all +ossfuzz/all: ossfuzz/CMakeFiles/zip_read_fuzzer.dir/all +ossfuzz/all: ossfuzz/CMakeFiles/zip_write_encrypt_aes256_file_fuzzer.dir/all +ossfuzz/all: ossfuzz/CMakeFiles/zip_write_encrypt_pkware_file_fuzzer.dir/all +.PHONY : ossfuzz/all + +# Recursive "preinstall" directory target. +ossfuzz/preinstall: +.PHONY : ossfuzz/preinstall + +# Recursive "clean" directory target. +ossfuzz/clean: ossfuzz/CMakeFiles/zip_read_file_fuzzer.dir/clean +ossfuzz/clean: ossfuzz/CMakeFiles/zip_read_fuzzer.dir/clean +ossfuzz/clean: ossfuzz/CMakeFiles/zip_write_encrypt_aes256_file_fuzzer.dir/clean +ossfuzz/clean: ossfuzz/CMakeFiles/zip_write_encrypt_pkware_file_fuzzer.dir/clean +ossfuzz/clean: ossfuzz/CMakeFiles/list-fuzzers.dir/clean +.PHONY : ossfuzz/clean + +#============================================================================= +# Directory level rules for directory src + +# Recursive "all" directory target. +src/all: src/CMakeFiles/zipcmp.dir/all +src/all: src/CMakeFiles/zipmerge.dir/all +src/all: src/CMakeFiles/ziptool.dir/all +.PHONY : src/all + +# Recursive "preinstall" directory target. +src/preinstall: +.PHONY : src/preinstall + +# Recursive "clean" directory target. +src/clean: src/CMakeFiles/zipcmp.dir/clean +src/clean: src/CMakeFiles/zipmerge.dir/clean +src/clean: src/CMakeFiles/ziptool.dir/clean +.PHONY : src/clean + +#============================================================================= +# Target rules for target CMakeFiles/dist.dir + +# All Build rule for target. +CMakeFiles/dist.dir/all: + $(MAKE) $(MAKESILENT) -f CMakeFiles/dist.dir/build.make CMakeFiles/dist.dir/depend + $(MAKE) $(MAKESILENT) -f CMakeFiles/dist.dir/build.make CMakeFiles/dist.dir/build + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num= "Built target dist" +.PHONY : CMakeFiles/dist.dir/all + +# Build rule for subdir invocation for target. +CMakeFiles/dist.dir/rule: cmake_check_build_system + $(CMAKE_COMMAND) -E cmake_progress_start "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" 0 + $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 CMakeFiles/dist.dir/all + $(CMAKE_COMMAND) -E cmake_progress_start "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" 0 +.PHONY : CMakeFiles/dist.dir/rule + +# Convenience name for target. +dist: CMakeFiles/dist.dir/rule +.PHONY : dist + +# clean rule for target. +CMakeFiles/dist.dir/clean: + $(MAKE) $(MAKESILENT) -f CMakeFiles/dist.dir/build.make CMakeFiles/dist.dir/clean +.PHONY : CMakeFiles/dist.dir/clean + +#============================================================================= +# Target rules for target CMakeFiles/distcheck.dir + +# All Build rule for target. +CMakeFiles/distcheck.dir/all: CMakeFiles/dist.dir/all + $(MAKE) $(MAKESILENT) -f CMakeFiles/distcheck.dir/build.make CMakeFiles/distcheck.dir/depend + $(MAKE) $(MAKESILENT) -f CMakeFiles/distcheck.dir/build.make CMakeFiles/distcheck.dir/build + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num= "Built target distcheck" +.PHONY : CMakeFiles/distcheck.dir/all + +# Build rule for subdir invocation for target. +CMakeFiles/distcheck.dir/rule: cmake_check_build_system + $(CMAKE_COMMAND) -E cmake_progress_start "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" 0 + $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 CMakeFiles/distcheck.dir/all + $(CMAKE_COMMAND) -E cmake_progress_start "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" 0 +.PHONY : CMakeFiles/distcheck.dir/rule + +# Convenience name for target. +distcheck: CMakeFiles/distcheck.dir/rule +.PHONY : distcheck + +# clean rule for target. +CMakeFiles/distcheck.dir/clean: + $(MAKE) $(MAKESILENT) -f CMakeFiles/distcheck.dir/build.make CMakeFiles/distcheck.dir/clean +.PHONY : CMakeFiles/distcheck.dir/clean + +#============================================================================= +# Target rules for target lib/CMakeFiles/zip.dir + +# All Build rule for target. +lib/CMakeFiles/zip.dir/all: + $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/depend + $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/build + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=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 "Built target zip" +.PHONY : lib/CMakeFiles/zip.dir/all + +# Build rule for subdir invocation for target. +lib/CMakeFiles/zip.dir/rule: cmake_check_build_system + $(CMAKE_COMMAND) -E cmake_progress_start "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" 25 + $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 lib/CMakeFiles/zip.dir/all + $(CMAKE_COMMAND) -E cmake_progress_start "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" 0 +.PHONY : lib/CMakeFiles/zip.dir/rule + +# Convenience name for target. +zip: lib/CMakeFiles/zip.dir/rule +.PHONY : zip + +# clean rule for target. +lib/CMakeFiles/zip.dir/clean: + $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/clean +.PHONY : lib/CMakeFiles/zip.dir/clean + +#============================================================================= +# Target rules for target man/CMakeFiles/man.dir + +# All Build rule for target. +man/CMakeFiles/man.dir/all: + $(MAKE) $(MAKESILENT) -f man/CMakeFiles/man.dir/build.make man/CMakeFiles/man.dir/depend + $(MAKE) $(MAKESILENT) -f man/CMakeFiles/man.dir/build.make man/CMakeFiles/man.dir/build + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24 "Built target man" +.PHONY : man/CMakeFiles/man.dir/all + +# Build rule for subdir invocation for target. +man/CMakeFiles/man.dir/rule: cmake_check_build_system + $(CMAKE_COMMAND) -E cmake_progress_start "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" 23 + $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 man/CMakeFiles/man.dir/all + $(CMAKE_COMMAND) -E cmake_progress_start "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" 0 +.PHONY : man/CMakeFiles/man.dir/rule + +# Convenience name for target. +man: man/CMakeFiles/man.dir/rule +.PHONY : man + +# clean rule for target. +man/CMakeFiles/man.dir/clean: + $(MAKE) $(MAKESILENT) -f man/CMakeFiles/man.dir/build.make man/CMakeFiles/man.dir/clean +.PHONY : man/CMakeFiles/man.dir/clean + +#============================================================================= +# Target rules for target man/CMakeFiles/update-man.dir + +# All Build rule for target. +man/CMakeFiles/update-man.dir/all: + $(MAKE) $(MAKESILENT) -f man/CMakeFiles/update-man.dir/build.make man/CMakeFiles/update-man.dir/depend + $(MAKE) $(MAKESILENT) -f man/CMakeFiles/update-man.dir/build.make man/CMakeFiles/update-man.dir/build + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70 "Built target update-man" +.PHONY : man/CMakeFiles/update-man.dir/all + +# Build rule for subdir invocation for target. +man/CMakeFiles/update-man.dir/rule: cmake_check_build_system + $(CMAKE_COMMAND) -E cmake_progress_start "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" 23 + $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 man/CMakeFiles/update-man.dir/all + $(CMAKE_COMMAND) -E cmake_progress_start "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" 0 +.PHONY : man/CMakeFiles/update-man.dir/rule + +# Convenience name for target. +update-man: man/CMakeFiles/update-man.dir/rule +.PHONY : update-man + +# clean rule for target. +man/CMakeFiles/update-man.dir/clean: + $(MAKE) $(MAKESILENT) -f man/CMakeFiles/update-man.dir/build.make man/CMakeFiles/update-man.dir/clean +.PHONY : man/CMakeFiles/update-man.dir/clean + +#============================================================================= +# Target rules for target man/CMakeFiles/update-html.dir + +# All Build rule for target. +man/CMakeFiles/update-html.dir/all: + $(MAKE) $(MAKESILENT) -f man/CMakeFiles/update-html.dir/build.make man/CMakeFiles/update-html.dir/depend + $(MAKE) $(MAKESILENT) -f man/CMakeFiles/update-html.dir/build.make man/CMakeFiles/update-html.dir/build + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47 "Built target update-html" +.PHONY : man/CMakeFiles/update-html.dir/all + +# Build rule for subdir invocation for target. +man/CMakeFiles/update-html.dir/rule: cmake_check_build_system + $(CMAKE_COMMAND) -E cmake_progress_start "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" 23 + $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 man/CMakeFiles/update-html.dir/all + $(CMAKE_COMMAND) -E cmake_progress_start "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" 0 +.PHONY : man/CMakeFiles/update-html.dir/rule + +# Convenience name for target. +update-html: man/CMakeFiles/update-html.dir/rule +.PHONY : update-html + +# clean rule for target. +man/CMakeFiles/update-html.dir/clean: + $(MAKE) $(MAKESILENT) -f man/CMakeFiles/update-html.dir/build.make man/CMakeFiles/update-html.dir/clean +.PHONY : man/CMakeFiles/update-html.dir/clean + +#============================================================================= +# Target rules for target man/CMakeFiles/update_zip_errors.dir + +# All Build rule for target. +man/CMakeFiles/update_zip_errors.dir/all: + $(MAKE) $(MAKESILENT) -f man/CMakeFiles/update_zip_errors.dir/build.make man/CMakeFiles/update_zip_errors.dir/depend + $(MAKE) $(MAKESILENT) -f man/CMakeFiles/update_zip_errors.dir/build.make man/CMakeFiles/update_zip_errors.dir/build + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num= "Built target update_zip_errors" +.PHONY : man/CMakeFiles/update_zip_errors.dir/all + +# Build rule for subdir invocation for target. +man/CMakeFiles/update_zip_errors.dir/rule: cmake_check_build_system + $(CMAKE_COMMAND) -E cmake_progress_start "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" 0 + $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 man/CMakeFiles/update_zip_errors.dir/all + $(CMAKE_COMMAND) -E cmake_progress_start "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" 0 +.PHONY : man/CMakeFiles/update_zip_errors.dir/rule + +# Convenience name for target. +update_zip_errors: man/CMakeFiles/update_zip_errors.dir/rule +.PHONY : update_zip_errors + +# clean rule for target. +man/CMakeFiles/update_zip_errors.dir/clean: + $(MAKE) $(MAKESILENT) -f man/CMakeFiles/update_zip_errors.dir/build.make man/CMakeFiles/update_zip_errors.dir/clean +.PHONY : man/CMakeFiles/update_zip_errors.dir/clean + +#============================================================================= +# Target rules for target src/CMakeFiles/zipcmp.dir + +# All Build rule for target. +src/CMakeFiles/zipcmp.dir/all: lib/CMakeFiles/zip.dir/all + $(MAKE) $(MAKESILENT) -f src/CMakeFiles/zipcmp.dir/build.make src/CMakeFiles/zipcmp.dir/depend + $(MAKE) $(MAKESILENT) -f src/CMakeFiles/zipcmp.dir/build.make src/CMakeFiles/zipcmp.dir/build + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=99 "Built target zipcmp" +.PHONY : src/CMakeFiles/zipcmp.dir/all + +# Build rule for subdir invocation for target. +src/CMakeFiles/zipcmp.dir/rule: cmake_check_build_system + $(CMAKE_COMMAND) -E cmake_progress_start "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" 26 + $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 src/CMakeFiles/zipcmp.dir/all + $(CMAKE_COMMAND) -E cmake_progress_start "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" 0 +.PHONY : src/CMakeFiles/zipcmp.dir/rule + +# Convenience name for target. +zipcmp: src/CMakeFiles/zipcmp.dir/rule +.PHONY : zipcmp + +# clean rule for target. +src/CMakeFiles/zipcmp.dir/clean: + $(MAKE) $(MAKESILENT) -f src/CMakeFiles/zipcmp.dir/build.make src/CMakeFiles/zipcmp.dir/clean +.PHONY : src/CMakeFiles/zipcmp.dir/clean + +#============================================================================= +# Target rules for target src/CMakeFiles/zipmerge.dir + +# All Build rule for target. +src/CMakeFiles/zipmerge.dir/all: lib/CMakeFiles/zip.dir/all + $(MAKE) $(MAKESILENT) -f src/CMakeFiles/zipmerge.dir/build.make src/CMakeFiles/zipmerge.dir/depend + $(MAKE) $(MAKESILENT) -f src/CMakeFiles/zipmerge.dir/build.make src/CMakeFiles/zipmerge.dir/build + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num= "Built target zipmerge" +.PHONY : src/CMakeFiles/zipmerge.dir/all + +# Build rule for subdir invocation for target. +src/CMakeFiles/zipmerge.dir/rule: cmake_check_build_system + $(CMAKE_COMMAND) -E cmake_progress_start "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" 25 + $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 src/CMakeFiles/zipmerge.dir/all + $(CMAKE_COMMAND) -E cmake_progress_start "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" 0 +.PHONY : src/CMakeFiles/zipmerge.dir/rule + +# Convenience name for target. +zipmerge: src/CMakeFiles/zipmerge.dir/rule +.PHONY : zipmerge + +# clean rule for target. +src/CMakeFiles/zipmerge.dir/clean: + $(MAKE) $(MAKESILENT) -f src/CMakeFiles/zipmerge.dir/build.make src/CMakeFiles/zipmerge.dir/clean +.PHONY : src/CMakeFiles/zipmerge.dir/clean + +#============================================================================= +# Target rules for target src/CMakeFiles/ziptool.dir + +# All Build rule for target. +src/CMakeFiles/ziptool.dir/all: lib/CMakeFiles/zip.dir/all + $(MAKE) $(MAKESILENT) -f src/CMakeFiles/ziptool.dir/build.make src/CMakeFiles/ziptool.dir/depend + $(MAKE) $(MAKESILENT) -f src/CMakeFiles/ziptool.dir/build.make src/CMakeFiles/ziptool.dir/build + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=100 "Built target ziptool" +.PHONY : src/CMakeFiles/ziptool.dir/all + +# Build rule for subdir invocation for target. +src/CMakeFiles/ziptool.dir/rule: cmake_check_build_system + $(CMAKE_COMMAND) -E cmake_progress_start "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" 26 + $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 src/CMakeFiles/ziptool.dir/all + $(CMAKE_COMMAND) -E cmake_progress_start "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" 0 +.PHONY : src/CMakeFiles/ziptool.dir/rule + +# Convenience name for target. +ziptool: src/CMakeFiles/ziptool.dir/rule +.PHONY : ziptool + +# clean rule for target. +src/CMakeFiles/ziptool.dir/clean: + $(MAKE) $(MAKESILENT) -f src/CMakeFiles/ziptool.dir/build.make src/CMakeFiles/ziptool.dir/clean +.PHONY : src/CMakeFiles/ziptool.dir/clean + +#============================================================================= +# Target rules for target ossfuzz/CMakeFiles/zip_read_file_fuzzer.dir + +# All Build rule for target. +ossfuzz/CMakeFiles/zip_read_file_fuzzer.dir/all: lib/CMakeFiles/zip.dir/all + $(MAKE) $(MAKESILENT) -f ossfuzz/CMakeFiles/zip_read_file_fuzzer.dir/build.make ossfuzz/CMakeFiles/zip_read_file_fuzzer.dir/depend + $(MAKE) $(MAKESILENT) -f ossfuzz/CMakeFiles/zip_read_file_fuzzer.dir/build.make ossfuzz/CMakeFiles/zip_read_file_fuzzer.dir/build + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=96 "Built target zip_read_file_fuzzer" +.PHONY : ossfuzz/CMakeFiles/zip_read_file_fuzzer.dir/all + +# Build rule for subdir invocation for target. +ossfuzz/CMakeFiles/zip_read_file_fuzzer.dir/rule: cmake_check_build_system + $(CMAKE_COMMAND) -E cmake_progress_start "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" 26 + $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 ossfuzz/CMakeFiles/zip_read_file_fuzzer.dir/all + $(CMAKE_COMMAND) -E cmake_progress_start "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" 0 +.PHONY : ossfuzz/CMakeFiles/zip_read_file_fuzzer.dir/rule + +# Convenience name for target. +zip_read_file_fuzzer: ossfuzz/CMakeFiles/zip_read_file_fuzzer.dir/rule +.PHONY : zip_read_file_fuzzer + +# clean rule for target. +ossfuzz/CMakeFiles/zip_read_file_fuzzer.dir/clean: + $(MAKE) $(MAKESILENT) -f ossfuzz/CMakeFiles/zip_read_file_fuzzer.dir/build.make ossfuzz/CMakeFiles/zip_read_file_fuzzer.dir/clean +.PHONY : ossfuzz/CMakeFiles/zip_read_file_fuzzer.dir/clean + +#============================================================================= +# Target rules for target ossfuzz/CMakeFiles/zip_read_fuzzer.dir + +# All Build rule for target. +ossfuzz/CMakeFiles/zip_read_fuzzer.dir/all: lib/CMakeFiles/zip.dir/all + $(MAKE) $(MAKESILENT) -f ossfuzz/CMakeFiles/zip_read_fuzzer.dir/build.make ossfuzz/CMakeFiles/zip_read_fuzzer.dir/depend + $(MAKE) $(MAKESILENT) -f ossfuzz/CMakeFiles/zip_read_fuzzer.dir/build.make ossfuzz/CMakeFiles/zip_read_fuzzer.dir/build + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=97 "Built target zip_read_fuzzer" +.PHONY : ossfuzz/CMakeFiles/zip_read_fuzzer.dir/all + +# Build rule for subdir invocation for target. +ossfuzz/CMakeFiles/zip_read_fuzzer.dir/rule: cmake_check_build_system + $(CMAKE_COMMAND) -E cmake_progress_start "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" 26 + $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 ossfuzz/CMakeFiles/zip_read_fuzzer.dir/all + $(CMAKE_COMMAND) -E cmake_progress_start "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" 0 +.PHONY : ossfuzz/CMakeFiles/zip_read_fuzzer.dir/rule + +# Convenience name for target. +zip_read_fuzzer: ossfuzz/CMakeFiles/zip_read_fuzzer.dir/rule +.PHONY : zip_read_fuzzer + +# clean rule for target. +ossfuzz/CMakeFiles/zip_read_fuzzer.dir/clean: + $(MAKE) $(MAKESILENT) -f ossfuzz/CMakeFiles/zip_read_fuzzer.dir/build.make ossfuzz/CMakeFiles/zip_read_fuzzer.dir/clean +.PHONY : ossfuzz/CMakeFiles/zip_read_fuzzer.dir/clean + +#============================================================================= +# Target rules for target ossfuzz/CMakeFiles/zip_write_encrypt_aes256_file_fuzzer.dir + +# All Build rule for target. +ossfuzz/CMakeFiles/zip_write_encrypt_aes256_file_fuzzer.dir/all: lib/CMakeFiles/zip.dir/all + $(MAKE) $(MAKESILENT) -f ossfuzz/CMakeFiles/zip_write_encrypt_aes256_file_fuzzer.dir/build.make ossfuzz/CMakeFiles/zip_write_encrypt_aes256_file_fuzzer.dir/depend + $(MAKE) $(MAKESILENT) -f ossfuzz/CMakeFiles/zip_write_encrypt_aes256_file_fuzzer.dir/build.make ossfuzz/CMakeFiles/zip_write_encrypt_aes256_file_fuzzer.dir/build + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num= "Built target zip_write_encrypt_aes256_file_fuzzer" +.PHONY : ossfuzz/CMakeFiles/zip_write_encrypt_aes256_file_fuzzer.dir/all + +# Build rule for subdir invocation for target. +ossfuzz/CMakeFiles/zip_write_encrypt_aes256_file_fuzzer.dir/rule: cmake_check_build_system + $(CMAKE_COMMAND) -E cmake_progress_start "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" 25 + $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 ossfuzz/CMakeFiles/zip_write_encrypt_aes256_file_fuzzer.dir/all + $(CMAKE_COMMAND) -E cmake_progress_start "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" 0 +.PHONY : ossfuzz/CMakeFiles/zip_write_encrypt_aes256_file_fuzzer.dir/rule + +# Convenience name for target. +zip_write_encrypt_aes256_file_fuzzer: ossfuzz/CMakeFiles/zip_write_encrypt_aes256_file_fuzzer.dir/rule +.PHONY : zip_write_encrypt_aes256_file_fuzzer + +# clean rule for target. +ossfuzz/CMakeFiles/zip_write_encrypt_aes256_file_fuzzer.dir/clean: + $(MAKE) $(MAKESILENT) -f ossfuzz/CMakeFiles/zip_write_encrypt_aes256_file_fuzzer.dir/build.make ossfuzz/CMakeFiles/zip_write_encrypt_aes256_file_fuzzer.dir/clean +.PHONY : ossfuzz/CMakeFiles/zip_write_encrypt_aes256_file_fuzzer.dir/clean + +#============================================================================= +# Target rules for target ossfuzz/CMakeFiles/zip_write_encrypt_pkware_file_fuzzer.dir + +# All Build rule for target. +ossfuzz/CMakeFiles/zip_write_encrypt_pkware_file_fuzzer.dir/all: lib/CMakeFiles/zip.dir/all + $(MAKE) $(MAKESILENT) -f ossfuzz/CMakeFiles/zip_write_encrypt_pkware_file_fuzzer.dir/build.make ossfuzz/CMakeFiles/zip_write_encrypt_pkware_file_fuzzer.dir/depend + $(MAKE) $(MAKESILENT) -f ossfuzz/CMakeFiles/zip_write_encrypt_pkware_file_fuzzer.dir/build.make ossfuzz/CMakeFiles/zip_write_encrypt_pkware_file_fuzzer.dir/build + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=98 "Built target zip_write_encrypt_pkware_file_fuzzer" +.PHONY : ossfuzz/CMakeFiles/zip_write_encrypt_pkware_file_fuzzer.dir/all + +# Build rule for subdir invocation for target. +ossfuzz/CMakeFiles/zip_write_encrypt_pkware_file_fuzzer.dir/rule: cmake_check_build_system + $(CMAKE_COMMAND) -E cmake_progress_start "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" 26 + $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 ossfuzz/CMakeFiles/zip_write_encrypt_pkware_file_fuzzer.dir/all + $(CMAKE_COMMAND) -E cmake_progress_start "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" 0 +.PHONY : ossfuzz/CMakeFiles/zip_write_encrypt_pkware_file_fuzzer.dir/rule + +# Convenience name for target. +zip_write_encrypt_pkware_file_fuzzer: ossfuzz/CMakeFiles/zip_write_encrypt_pkware_file_fuzzer.dir/rule +.PHONY : zip_write_encrypt_pkware_file_fuzzer + +# clean rule for target. +ossfuzz/CMakeFiles/zip_write_encrypt_pkware_file_fuzzer.dir/clean: + $(MAKE) $(MAKESILENT) -f ossfuzz/CMakeFiles/zip_write_encrypt_pkware_file_fuzzer.dir/build.make ossfuzz/CMakeFiles/zip_write_encrypt_pkware_file_fuzzer.dir/clean +.PHONY : ossfuzz/CMakeFiles/zip_write_encrypt_pkware_file_fuzzer.dir/clean + +#============================================================================= +# Target rules for target ossfuzz/CMakeFiles/list-fuzzers.dir + +# All Build rule for target. +ossfuzz/CMakeFiles/list-fuzzers.dir/all: + $(MAKE) $(MAKESILENT) -f ossfuzz/CMakeFiles/list-fuzzers.dir/build.make ossfuzz/CMakeFiles/list-fuzzers.dir/depend + $(MAKE) $(MAKESILENT) -f ossfuzz/CMakeFiles/list-fuzzers.dir/build.make ossfuzz/CMakeFiles/list-fuzzers.dir/build + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num= "Built target list-fuzzers" +.PHONY : ossfuzz/CMakeFiles/list-fuzzers.dir/all + +# Build rule for subdir invocation for target. +ossfuzz/CMakeFiles/list-fuzzers.dir/rule: cmake_check_build_system + $(CMAKE_COMMAND) -E cmake_progress_start "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" 0 + $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 ossfuzz/CMakeFiles/list-fuzzers.dir/all + $(CMAKE_COMMAND) -E cmake_progress_start "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" 0 +.PHONY : ossfuzz/CMakeFiles/list-fuzzers.dir/rule + +# Convenience name for target. +list-fuzzers: ossfuzz/CMakeFiles/list-fuzzers.dir/rule +.PHONY : list-fuzzers + +# clean rule for target. +ossfuzz/CMakeFiles/list-fuzzers.dir/clean: + $(MAKE) $(MAKESILENT) -f ossfuzz/CMakeFiles/list-fuzzers.dir/build.make ossfuzz/CMakeFiles/list-fuzzers.dir/clean +.PHONY : ossfuzz/CMakeFiles/list-fuzzers.dir/clean + +#============================================================================= +# Target rules for target examples/CMakeFiles/add-compressed-data.dir + +# All Build rule for target. +examples/CMakeFiles/add-compressed-data.dir/all: lib/CMakeFiles/zip.dir/all + $(MAKE) $(MAKESILENT) -f examples/CMakeFiles/add-compressed-data.dir/build.make examples/CMakeFiles/add-compressed-data.dir/depend + $(MAKE) $(MAKESILENT) -f examples/CMakeFiles/add-compressed-data.dir/build.make examples/CMakeFiles/add-compressed-data.dir/build + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num= "Built target add-compressed-data" +.PHONY : examples/CMakeFiles/add-compressed-data.dir/all + +# Build rule for subdir invocation for target. +examples/CMakeFiles/add-compressed-data.dir/rule: cmake_check_build_system + $(CMAKE_COMMAND) -E cmake_progress_start "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" 25 + $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 examples/CMakeFiles/add-compressed-data.dir/all + $(CMAKE_COMMAND) -E cmake_progress_start "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" 0 +.PHONY : examples/CMakeFiles/add-compressed-data.dir/rule + +# Convenience name for target. +add-compressed-data: examples/CMakeFiles/add-compressed-data.dir/rule +.PHONY : add-compressed-data + +# clean rule for target. +examples/CMakeFiles/add-compressed-data.dir/clean: + $(MAKE) $(MAKESILENT) -f examples/CMakeFiles/add-compressed-data.dir/build.make examples/CMakeFiles/add-compressed-data.dir/clean +.PHONY : examples/CMakeFiles/add-compressed-data.dir/clean + +#============================================================================= +# Target rules for target examples/CMakeFiles/autoclose-archive.dir + +# All Build rule for target. +examples/CMakeFiles/autoclose-archive.dir/all: lib/CMakeFiles/zip.dir/all + $(MAKE) $(MAKESILENT) -f examples/CMakeFiles/autoclose-archive.dir/build.make examples/CMakeFiles/autoclose-archive.dir/depend + $(MAKE) $(MAKESILENT) -f examples/CMakeFiles/autoclose-archive.dir/build.make examples/CMakeFiles/autoclose-archive.dir/build + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num= "Built target autoclose-archive" +.PHONY : examples/CMakeFiles/autoclose-archive.dir/all + +# Build rule for subdir invocation for target. +examples/CMakeFiles/autoclose-archive.dir/rule: cmake_check_build_system + $(CMAKE_COMMAND) -E cmake_progress_start "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" 25 + $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 examples/CMakeFiles/autoclose-archive.dir/all + $(CMAKE_COMMAND) -E cmake_progress_start "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" 0 +.PHONY : examples/CMakeFiles/autoclose-archive.dir/rule + +# Convenience name for target. +autoclose-archive: examples/CMakeFiles/autoclose-archive.dir/rule +.PHONY : autoclose-archive + +# clean rule for target. +examples/CMakeFiles/autoclose-archive.dir/clean: + $(MAKE) $(MAKESILENT) -f examples/CMakeFiles/autoclose-archive.dir/build.make examples/CMakeFiles/autoclose-archive.dir/clean +.PHONY : examples/CMakeFiles/autoclose-archive.dir/clean + +#============================================================================= +# Target rules for target examples/CMakeFiles/in-memory.dir + +# All Build rule for target. +examples/CMakeFiles/in-memory.dir/all: lib/CMakeFiles/zip.dir/all + $(MAKE) $(MAKESILENT) -f examples/CMakeFiles/in-memory.dir/build.make examples/CMakeFiles/in-memory.dir/depend + $(MAKE) $(MAKESILENT) -f examples/CMakeFiles/in-memory.dir/build.make examples/CMakeFiles/in-memory.dir/build + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=1 "Built target in-memory" +.PHONY : examples/CMakeFiles/in-memory.dir/all + +# Build rule for subdir invocation for target. +examples/CMakeFiles/in-memory.dir/rule: cmake_check_build_system + $(CMAKE_COMMAND) -E cmake_progress_start "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" 26 + $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 examples/CMakeFiles/in-memory.dir/all + $(CMAKE_COMMAND) -E cmake_progress_start "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" 0 +.PHONY : examples/CMakeFiles/in-memory.dir/rule + +# Convenience name for target. +in-memory: examples/CMakeFiles/in-memory.dir/rule +.PHONY : in-memory + +# clean rule for target. +examples/CMakeFiles/in-memory.dir/clean: + $(MAKE) $(MAKESILENT) -f examples/CMakeFiles/in-memory.dir/build.make examples/CMakeFiles/in-memory.dir/clean +.PHONY : examples/CMakeFiles/in-memory.dir/clean + +#============================================================================= +# Special targets to cleanup operation of make. + +# Special rule to run CMake to check the build system integrity. +# No rule that depends on this can have commands that come from listfiles +# because they might be regenerated. +cmake_check_build_system: + $(CMAKE_COMMAND) -S$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles/Makefile.cmake 0 +.PHONY : cmake_check_build_system + diff --git a/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/TargetDirectories.txt b/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/TargetDirectories.txt new file mode 100644 index 0000000..5f2122c --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/TargetDirectories.txt @@ -0,0 +1,60 @@ +/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/dist.dir +/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/distcheck.dir +/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/test.dir +/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/edit_cache.dir +/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/rebuild_cache.dir +/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/list_install_components.dir +/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/install.dir +/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/install/local.dir +/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/install/strip.dir +/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir +/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/test.dir +/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/edit_cache.dir +/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/rebuild_cache.dir +/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/list_install_components.dir +/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/install.dir +/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/install/local.dir +/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/install/strip.dir +/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/CMakeFiles/man.dir +/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/CMakeFiles/update-man.dir +/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/CMakeFiles/update-html.dir +/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/CMakeFiles/update_zip_errors.dir +/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/CMakeFiles/test.dir +/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/CMakeFiles/edit_cache.dir +/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/CMakeFiles/rebuild_cache.dir +/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/CMakeFiles/list_install_components.dir +/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/CMakeFiles/install.dir +/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/CMakeFiles/install/local.dir +/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/CMakeFiles/install/strip.dir +/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/src/CMakeFiles/zipcmp.dir +/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/src/CMakeFiles/zipmerge.dir +/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/src/CMakeFiles/ziptool.dir +/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/src/CMakeFiles/test.dir +/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/src/CMakeFiles/edit_cache.dir +/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/src/CMakeFiles/rebuild_cache.dir +/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/src/CMakeFiles/list_install_components.dir +/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/src/CMakeFiles/install.dir +/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/src/CMakeFiles/install/local.dir +/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/src/CMakeFiles/install/strip.dir +/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/ossfuzz/CMakeFiles/zip_read_file_fuzzer.dir +/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/ossfuzz/CMakeFiles/zip_read_fuzzer.dir +/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/ossfuzz/CMakeFiles/zip_write_encrypt_aes256_file_fuzzer.dir +/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/ossfuzz/CMakeFiles/zip_write_encrypt_pkware_file_fuzzer.dir +/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/ossfuzz/CMakeFiles/list-fuzzers.dir +/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/ossfuzz/CMakeFiles/test.dir +/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/ossfuzz/CMakeFiles/edit_cache.dir +/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/ossfuzz/CMakeFiles/rebuild_cache.dir +/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/ossfuzz/CMakeFiles/list_install_components.dir +/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/ossfuzz/CMakeFiles/install.dir +/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/ossfuzz/CMakeFiles/install/local.dir +/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/ossfuzz/CMakeFiles/install/strip.dir +/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/examples/CMakeFiles/add-compressed-data.dir +/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/examples/CMakeFiles/autoclose-archive.dir +/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/examples/CMakeFiles/in-memory.dir +/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/examples/CMakeFiles/test.dir +/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/examples/CMakeFiles/edit_cache.dir +/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/examples/CMakeFiles/rebuild_cache.dir +/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/examples/CMakeFiles/list_install_components.dir +/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/examples/CMakeFiles/install.dir +/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/examples/CMakeFiles/install/local.dir +/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/examples/CMakeFiles/install/strip.dir diff --git a/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/cmake.check_cache b/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/cmake.check_cache new file mode 100644 index 0000000..3dccd73 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/cmake.check_cache @@ -0,0 +1 @@ +# This file is generated by cmake for dependency checking of the CMakeCache.txt file diff --git a/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/dist.dir/DependInfo.cmake b/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/dist.dir/DependInfo.cmake new file mode 100644 index 0000000..29b95a5 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/dist.dir/DependInfo.cmake @@ -0,0 +1,22 @@ + +# Consider dependencies only in project. +set(CMAKE_DEPENDS_IN_PROJECT_ONLY OFF) + +# The set of languages for which implicit dependencies are needed: +set(CMAKE_DEPENDS_LANGUAGES + ) + +# The set of dependency files which are needed: +set(CMAKE_DEPENDS_DEPENDENCY_FILES + ) + +# Targets to which this target links which contain Fortran sources. +set(CMAKE_Fortran_TARGET_LINKED_INFO_FILES + ) + +# Targets to which this target links which contain Fortran sources. +set(CMAKE_Fortran_TARGET_FORWARD_LINKED_INFO_FILES + ) + +# Fortran module output directory. +set(CMAKE_Fortran_TARGET_MODULE_DIR "") diff --git a/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/dist.dir/build.make b/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/dist.dir/build.make new file mode 100644 index 0000000..29b8f38 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/dist.dir/build.make @@ -0,0 +1,89 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.28 + +# Delete rule output on recipe failure. +.DELETE_ON_ERROR: + +#============================================================================= +# Special targets provided by cmake. + +# Disable implicit rules so canonical targets will work. +.SUFFIXES: + +# Disable VCS-based implicit rules. +% : %,v + +# Disable VCS-based implicit rules. +% : RCS/% + +# Disable VCS-based implicit rules. +% : RCS/%,v + +# Disable VCS-based implicit rules. +% : SCCS/s.% + +# Disable VCS-based implicit rules. +% : s.% + +.SUFFIXES: .hpux_make_needs_suffix_list + +# Command-line flag to silence nested $(MAKE). +$(VERBOSE)MAKESILENT = -s + +#Suppress display of executed commands. +$(VERBOSE).SILENT: + +# A target that is always out of date. +cmake_force: +.PHONY : cmake_force + +#============================================================================= +# Set environment variables for the build. + +# The shell in which to execute make rules. +SHELL = /bin/sh + +# The CMake executable. +CMAKE_COMMAND = /usr/bin/cmake + +# The command to remove a file. +RM = /usr/bin/cmake -E rm -f + +# Escaping for special characters. +EQUALS = = + +# The top-level source directory on which CMake was run. +CMAKE_SOURCE_DIR = "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3" + +# The top-level build directory on which CMake was run. +CMAKE_BINARY_DIR = "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" + +# Utility rule file for dist. + +# Include any custom commands dependencies for this target. +include CMakeFiles/dist.dir/compiler_depend.make + +# Include the progress variables for this target. +include CMakeFiles/dist.dir/progress.make + +CMakeFiles/dist: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3" && git config tar.tar.xz.command xz\ -c + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3" && git archive --prefix=libzip-1.11.3/ -o /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/libzip-1.11.3.tar.gz HEAD + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3" && git archive --prefix=libzip-1.11.3/ -o /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/libzip-1.11.3.tar.xz HEAD + +dist: CMakeFiles/dist +dist: CMakeFiles/dist.dir/build.make +.PHONY : dist + +# Rule to build all files generated by this target. +CMakeFiles/dist.dir/build: dist +.PHONY : CMakeFiles/dist.dir/build + +CMakeFiles/dist.dir/clean: + $(CMAKE_COMMAND) -P CMakeFiles/dist.dir/cmake_clean.cmake +.PHONY : CMakeFiles/dist.dir/clean + +CMakeFiles/dist.dir/depend: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(CMAKE_COMMAND) -E cmake_depends "Unix Makefiles" "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3" "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3" "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/dist.dir/DependInfo.cmake" "--color=$(COLOR)" +.PHONY : CMakeFiles/dist.dir/depend + diff --git a/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/dist.dir/cmake_clean.cmake b/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/dist.dir/cmake_clean.cmake new file mode 100644 index 0000000..656ce9f --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/dist.dir/cmake_clean.cmake @@ -0,0 +1,8 @@ +file(REMOVE_RECURSE + "CMakeFiles/dist" +) + +# Per-language clean rules from dependency scanning. +foreach(lang ) + include(CMakeFiles/dist.dir/cmake_clean_${lang}.cmake OPTIONAL) +endforeach() diff --git a/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/dist.dir/compiler_depend.make b/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/dist.dir/compiler_depend.make new file mode 100644 index 0000000..f6b1322 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/dist.dir/compiler_depend.make @@ -0,0 +1,2 @@ +# Empty custom commands generated dependencies file for dist. +# This may be replaced when dependencies are built. diff --git a/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/dist.dir/compiler_depend.ts b/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/dist.dir/compiler_depend.ts new file mode 100644 index 0000000..0b47ca4 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/dist.dir/compiler_depend.ts @@ -0,0 +1,2 @@ +# CMAKE generated file: DO NOT EDIT! +# Timestamp file for custom commands dependencies management for dist. diff --git a/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/dist.dir/progress.make b/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/dist.dir/progress.make new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/dist.dir/progress.make @@ -0,0 +1 @@ + diff --git a/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/distcheck.dir/DependInfo.cmake b/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/distcheck.dir/DependInfo.cmake new file mode 100644 index 0000000..29b95a5 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/distcheck.dir/DependInfo.cmake @@ -0,0 +1,22 @@ + +# Consider dependencies only in project. +set(CMAKE_DEPENDS_IN_PROJECT_ONLY OFF) + +# The set of languages for which implicit dependencies are needed: +set(CMAKE_DEPENDS_LANGUAGES + ) + +# The set of dependency files which are needed: +set(CMAKE_DEPENDS_DEPENDENCY_FILES + ) + +# Targets to which this target links which contain Fortran sources. +set(CMAKE_Fortran_TARGET_LINKED_INFO_FILES + ) + +# Targets to which this target links which contain Fortran sources. +set(CMAKE_Fortran_TARGET_FORWARD_LINKED_INFO_FILES + ) + +# Fortran module output directory. +set(CMAKE_Fortran_TARGET_MODULE_DIR "") diff --git a/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/distcheck.dir/build.make b/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/distcheck.dir/build.make new file mode 100644 index 0000000..3a2987b --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/distcheck.dir/build.make @@ -0,0 +1,100 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.28 + +# Delete rule output on recipe failure. +.DELETE_ON_ERROR: + +#============================================================================= +# Special targets provided by cmake. + +# Disable implicit rules so canonical targets will work. +.SUFFIXES: + +# Disable VCS-based implicit rules. +% : %,v + +# Disable VCS-based implicit rules. +% : RCS/% + +# Disable VCS-based implicit rules. +% : RCS/%,v + +# Disable VCS-based implicit rules. +% : SCCS/s.% + +# Disable VCS-based implicit rules. +% : s.% + +.SUFFIXES: .hpux_make_needs_suffix_list + +# Command-line flag to silence nested $(MAKE). +$(VERBOSE)MAKESILENT = -s + +#Suppress display of executed commands. +$(VERBOSE).SILENT: + +# A target that is always out of date. +cmake_force: +.PHONY : cmake_force + +#============================================================================= +# Set environment variables for the build. + +# The shell in which to execute make rules. +SHELL = /bin/sh + +# The CMake executable. +CMAKE_COMMAND = /usr/bin/cmake + +# The command to remove a file. +RM = /usr/bin/cmake -E rm -f + +# Escaping for special characters. +EQUALS = = + +# The top-level source directory on which CMake was run. +CMAKE_SOURCE_DIR = "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3" + +# The top-level build directory on which CMake was run. +CMAKE_BINARY_DIR = "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" + +# Utility rule file for distcheck. + +# Include any custom commands dependencies for this target. +include CMakeFiles/distcheck.dir/compiler_depend.make + +# Include the progress variables for this target. +include CMakeFiles/distcheck.dir/progress.make + +CMakeFiles/distcheck: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3" && chmod -R u+w libzip-1.11.3 libzip-1.11.3-build libzip-1.11.3-dest 2>/dev/null || true + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3" && rm -rf libzip-1.11.3 libzip-1.11.3-build libzip-1.11.3-dest + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3" && /usr/bin/cmake -E tar xf /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/libzip-1.11.3.tar.gz + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3" && chmod -R u-w libzip-1.11.3 + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3" && mkdir libzip-1.11.3-build + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3" && mkdir libzip-1.11.3-dest + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3" && /usr/bin/cmake -DCMAKE_INSTALL_PREFIX=libzip-1.11.3-dest libzip-1.11.3 -B libzip-1.11.3-build + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3" && make -C libzip-1.11.3-build -j4 + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3" && make -C libzip-1.11.3-build test + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3" && make -C libzip-1.11.3-build install + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3" && make -C libzip-1.11.3-build clean + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3" && chmod -R u+w libzip-1.11.3 libzip-1.11.3-build libzip-1.11.3-dest + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3" && rm -rf libzip-1.11.3 libzip-1.11.3-build libzip-1.11.3-dest + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3" && echo libzip-1.11.3.tar.gz\ is\ ready\ for\ distribution. + +distcheck: CMakeFiles/distcheck +distcheck: CMakeFiles/distcheck.dir/build.make +.PHONY : distcheck + +# Rule to build all files generated by this target. +CMakeFiles/distcheck.dir/build: distcheck +.PHONY : CMakeFiles/distcheck.dir/build + +CMakeFiles/distcheck.dir/clean: + $(CMAKE_COMMAND) -P CMakeFiles/distcheck.dir/cmake_clean.cmake +.PHONY : CMakeFiles/distcheck.dir/clean + +CMakeFiles/distcheck.dir/depend: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(CMAKE_COMMAND) -E cmake_depends "Unix Makefiles" "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3" "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3" "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/distcheck.dir/DependInfo.cmake" "--color=$(COLOR)" +.PHONY : CMakeFiles/distcheck.dir/depend + diff --git a/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/distcheck.dir/cmake_clean.cmake b/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/distcheck.dir/cmake_clean.cmake new file mode 100644 index 0000000..599552a --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/distcheck.dir/cmake_clean.cmake @@ -0,0 +1,8 @@ +file(REMOVE_RECURSE + "CMakeFiles/distcheck" +) + +# Per-language clean rules from dependency scanning. +foreach(lang ) + include(CMakeFiles/distcheck.dir/cmake_clean_${lang}.cmake OPTIONAL) +endforeach() diff --git a/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/distcheck.dir/compiler_depend.make b/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/distcheck.dir/compiler_depend.make new file mode 100644 index 0000000..a6ffafe --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/distcheck.dir/compiler_depend.make @@ -0,0 +1,2 @@ +# Empty custom commands generated dependencies file for distcheck. +# This may be replaced when dependencies are built. diff --git a/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/distcheck.dir/compiler_depend.ts b/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/distcheck.dir/compiler_depend.ts new file mode 100644 index 0000000..d481b07 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/distcheck.dir/compiler_depend.ts @@ -0,0 +1,2 @@ +# CMAKE generated file: DO NOT EDIT! +# Timestamp file for custom commands dependencies management for distcheck. diff --git a/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/distcheck.dir/progress.make b/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/distcheck.dir/progress.make new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/distcheck.dir/progress.make @@ -0,0 +1 @@ + diff --git a/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/progress.marks b/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/progress.marks new file mode 100644 index 0000000..fb1e7bc --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/progress.marks @@ -0,0 +1 @@ +54 diff --git a/thirdparty/libzip-1.11.3/build-emcmake/CTestTestfile.cmake b/thirdparty/libzip-1.11.3/build-emcmake/CTestTestfile.cmake new file mode 100644 index 0000000..c8a0112 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/CTestTestfile.cmake @@ -0,0 +1,11 @@ +# CMake generated Testfile for +# Source directory: /home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3 +# Build directory: /home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake +# +# This file includes the relevant testing commands required for +# testing this directory and lists subdirectories to be tested as well. +subdirs("lib") +subdirs("man") +subdirs("src") +subdirs("ossfuzz") +subdirs("examples") diff --git a/thirdparty/libzip-1.11.3/build-emcmake/Makefile b/thirdparty/libzip-1.11.3/build-emcmake/Makefile new file mode 100644 index 0000000..883b607 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/Makefile @@ -0,0 +1,452 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.28 + +# Default target executed when no arguments are given to make. +default_target: all +.PHONY : default_target + +# Allow only one "make -f Makefile2" at a time, but pass parallelism. +.NOTPARALLEL: + +#============================================================================= +# Special targets provided by cmake. + +# Disable implicit rules so canonical targets will work. +.SUFFIXES: + +# Disable VCS-based implicit rules. +% : %,v + +# Disable VCS-based implicit rules. +% : RCS/% + +# Disable VCS-based implicit rules. +% : RCS/%,v + +# Disable VCS-based implicit rules. +% : SCCS/s.% + +# Disable VCS-based implicit rules. +% : s.% + +.SUFFIXES: .hpux_make_needs_suffix_list + +# Command-line flag to silence nested $(MAKE). +$(VERBOSE)MAKESILENT = -s + +#Suppress display of executed commands. +$(VERBOSE).SILENT: + +# A target that is always out of date. +cmake_force: +.PHONY : cmake_force + +#============================================================================= +# Set environment variables for the build. + +# The shell in which to execute make rules. +SHELL = /bin/sh + +# The CMake executable. +CMAKE_COMMAND = /usr/bin/cmake + +# The command to remove a file. +RM = /usr/bin/cmake -E rm -f + +# Escaping for special characters. +EQUALS = = + +# The top-level source directory on which CMake was run. +CMAKE_SOURCE_DIR = "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3" + +# The top-level build directory on which CMake was run. +CMAKE_BINARY_DIR = "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" + +#============================================================================= +# Targets provided globally by CMake. + +# Special rule for the target test +test: + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --cyan "Running tests..." + /usr/bin/ctest --force-new-ctest-process $(ARGS) +.PHONY : test + +# Special rule for the target test +test/fast: test +.PHONY : test/fast + +# Special rule for the target edit_cache +edit_cache: + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --cyan "No interactive CMake dialog available..." + /usr/bin/cmake -E echo No\ interactive\ CMake\ dialog\ available. +.PHONY : edit_cache + +# Special rule for the target edit_cache +edit_cache/fast: edit_cache +.PHONY : edit_cache/fast + +# Special rule for the target rebuild_cache +rebuild_cache: + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --cyan "Running CMake to regenerate build system..." + /usr/bin/cmake --regenerate-during-build -S$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) +.PHONY : rebuild_cache + +# Special rule for the target rebuild_cache +rebuild_cache/fast: rebuild_cache +.PHONY : rebuild_cache/fast + +# Special rule for the target list_install_components +list_install_components: + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --cyan "Available install components are: \"Unspecified\"" +.PHONY : list_install_components + +# Special rule for the target list_install_components +list_install_components/fast: list_install_components +.PHONY : list_install_components/fast + +# Special rule for the target install +install: preinstall + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --cyan "Install the project..." + /usr/bin/cmake -P cmake_install.cmake +.PHONY : install + +# Special rule for the target install +install/fast: preinstall/fast + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --cyan "Install the project..." + /usr/bin/cmake -P cmake_install.cmake +.PHONY : install/fast + +# Special rule for the target install/local +install/local: preinstall + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --cyan "Installing only the local directory..." + /usr/bin/cmake -DCMAKE_INSTALL_LOCAL_ONLY=1 -P cmake_install.cmake +.PHONY : install/local + +# Special rule for the target install/local +install/local/fast: preinstall/fast + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --cyan "Installing only the local directory..." + /usr/bin/cmake -DCMAKE_INSTALL_LOCAL_ONLY=1 -P cmake_install.cmake +.PHONY : install/local/fast + +# Special rule for the target install/strip +install/strip: preinstall + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --cyan "Installing the project stripped..." + /usr/bin/cmake -DCMAKE_INSTALL_DO_STRIP=1 -P cmake_install.cmake +.PHONY : install/strip + +# Special rule for the target install/strip +install/strip/fast: preinstall/fast + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --cyan "Installing the project stripped..." + /usr/bin/cmake -DCMAKE_INSTALL_DO_STRIP=1 -P cmake_install.cmake +.PHONY : install/strip/fast + +# The main all target +all: cmake_check_build_system + $(CMAKE_COMMAND) -E cmake_progress_start "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake//CMakeFiles/progress.marks" + $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 all + $(CMAKE_COMMAND) -E cmake_progress_start "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" 0 +.PHONY : all + +# The main clean target +clean: + $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 clean +.PHONY : clean + +# The main clean target +clean/fast: clean +.PHONY : clean/fast + +# Prepare targets for installation. +preinstall: all + $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 preinstall +.PHONY : preinstall + +# Prepare targets for installation. +preinstall/fast: + $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 preinstall +.PHONY : preinstall/fast + +# clear depends +depend: + $(CMAKE_COMMAND) -S$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles/Makefile.cmake 1 +.PHONY : depend + +#============================================================================= +# Target rules for targets named dist + +# Build rule for target. +dist: cmake_check_build_system + $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 dist +.PHONY : dist + +# fast build rule for target. +dist/fast: + $(MAKE) $(MAKESILENT) -f CMakeFiles/dist.dir/build.make CMakeFiles/dist.dir/build +.PHONY : dist/fast + +#============================================================================= +# Target rules for targets named distcheck + +# Build rule for target. +distcheck: cmake_check_build_system + $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 distcheck +.PHONY : distcheck + +# fast build rule for target. +distcheck/fast: + $(MAKE) $(MAKESILENT) -f CMakeFiles/distcheck.dir/build.make CMakeFiles/distcheck.dir/build +.PHONY : distcheck/fast + +#============================================================================= +# Target rules for targets named zip + +# Build rule for target. +zip: cmake_check_build_system + $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 zip +.PHONY : zip + +# fast build rule for target. +zip/fast: + $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/build +.PHONY : zip/fast + +#============================================================================= +# Target rules for targets named man + +# Build rule for target. +man: cmake_check_build_system + $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 man +.PHONY : man + +# fast build rule for target. +man/fast: + $(MAKE) $(MAKESILENT) -f man/CMakeFiles/man.dir/build.make man/CMakeFiles/man.dir/build +.PHONY : man/fast + +#============================================================================= +# Target rules for targets named update-man + +# Build rule for target. +update-man: cmake_check_build_system + $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 update-man +.PHONY : update-man + +# fast build rule for target. +update-man/fast: + $(MAKE) $(MAKESILENT) -f man/CMakeFiles/update-man.dir/build.make man/CMakeFiles/update-man.dir/build +.PHONY : update-man/fast + +#============================================================================= +# Target rules for targets named update-html + +# Build rule for target. +update-html: cmake_check_build_system + $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 update-html +.PHONY : update-html + +# fast build rule for target. +update-html/fast: + $(MAKE) $(MAKESILENT) -f man/CMakeFiles/update-html.dir/build.make man/CMakeFiles/update-html.dir/build +.PHONY : update-html/fast + +#============================================================================= +# Target rules for targets named update_zip_errors + +# Build rule for target. +update_zip_errors: cmake_check_build_system + $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 update_zip_errors +.PHONY : update_zip_errors + +# fast build rule for target. +update_zip_errors/fast: + $(MAKE) $(MAKESILENT) -f man/CMakeFiles/update_zip_errors.dir/build.make man/CMakeFiles/update_zip_errors.dir/build +.PHONY : update_zip_errors/fast + +#============================================================================= +# Target rules for targets named zipcmp + +# Build rule for target. +zipcmp: cmake_check_build_system + $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 zipcmp +.PHONY : zipcmp + +# fast build rule for target. +zipcmp/fast: + $(MAKE) $(MAKESILENT) -f src/CMakeFiles/zipcmp.dir/build.make src/CMakeFiles/zipcmp.dir/build +.PHONY : zipcmp/fast + +#============================================================================= +# Target rules for targets named zipmerge + +# Build rule for target. +zipmerge: cmake_check_build_system + $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 zipmerge +.PHONY : zipmerge + +# fast build rule for target. +zipmerge/fast: + $(MAKE) $(MAKESILENT) -f src/CMakeFiles/zipmerge.dir/build.make src/CMakeFiles/zipmerge.dir/build +.PHONY : zipmerge/fast + +#============================================================================= +# Target rules for targets named ziptool + +# Build rule for target. +ziptool: cmake_check_build_system + $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 ziptool +.PHONY : ziptool + +# fast build rule for target. +ziptool/fast: + $(MAKE) $(MAKESILENT) -f src/CMakeFiles/ziptool.dir/build.make src/CMakeFiles/ziptool.dir/build +.PHONY : ziptool/fast + +#============================================================================= +# Target rules for targets named zip_read_file_fuzzer + +# Build rule for target. +zip_read_file_fuzzer: cmake_check_build_system + $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 zip_read_file_fuzzer +.PHONY : zip_read_file_fuzzer + +# fast build rule for target. +zip_read_file_fuzzer/fast: + $(MAKE) $(MAKESILENT) -f ossfuzz/CMakeFiles/zip_read_file_fuzzer.dir/build.make ossfuzz/CMakeFiles/zip_read_file_fuzzer.dir/build +.PHONY : zip_read_file_fuzzer/fast + +#============================================================================= +# Target rules for targets named zip_read_fuzzer + +# Build rule for target. +zip_read_fuzzer: cmake_check_build_system + $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 zip_read_fuzzer +.PHONY : zip_read_fuzzer + +# fast build rule for target. +zip_read_fuzzer/fast: + $(MAKE) $(MAKESILENT) -f ossfuzz/CMakeFiles/zip_read_fuzzer.dir/build.make ossfuzz/CMakeFiles/zip_read_fuzzer.dir/build +.PHONY : zip_read_fuzzer/fast + +#============================================================================= +# Target rules for targets named zip_write_encrypt_aes256_file_fuzzer + +# Build rule for target. +zip_write_encrypt_aes256_file_fuzzer: cmake_check_build_system + $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 zip_write_encrypt_aes256_file_fuzzer +.PHONY : zip_write_encrypt_aes256_file_fuzzer + +# fast build rule for target. +zip_write_encrypt_aes256_file_fuzzer/fast: + $(MAKE) $(MAKESILENT) -f ossfuzz/CMakeFiles/zip_write_encrypt_aes256_file_fuzzer.dir/build.make ossfuzz/CMakeFiles/zip_write_encrypt_aes256_file_fuzzer.dir/build +.PHONY : zip_write_encrypt_aes256_file_fuzzer/fast + +#============================================================================= +# Target rules for targets named zip_write_encrypt_pkware_file_fuzzer + +# Build rule for target. +zip_write_encrypt_pkware_file_fuzzer: cmake_check_build_system + $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 zip_write_encrypt_pkware_file_fuzzer +.PHONY : zip_write_encrypt_pkware_file_fuzzer + +# fast build rule for target. +zip_write_encrypt_pkware_file_fuzzer/fast: + $(MAKE) $(MAKESILENT) -f ossfuzz/CMakeFiles/zip_write_encrypt_pkware_file_fuzzer.dir/build.make ossfuzz/CMakeFiles/zip_write_encrypt_pkware_file_fuzzer.dir/build +.PHONY : zip_write_encrypt_pkware_file_fuzzer/fast + +#============================================================================= +# Target rules for targets named list-fuzzers + +# Build rule for target. +list-fuzzers: cmake_check_build_system + $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 list-fuzzers +.PHONY : list-fuzzers + +# fast build rule for target. +list-fuzzers/fast: + $(MAKE) $(MAKESILENT) -f ossfuzz/CMakeFiles/list-fuzzers.dir/build.make ossfuzz/CMakeFiles/list-fuzzers.dir/build +.PHONY : list-fuzzers/fast + +#============================================================================= +# Target rules for targets named add-compressed-data + +# Build rule for target. +add-compressed-data: cmake_check_build_system + $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 add-compressed-data +.PHONY : add-compressed-data + +# fast build rule for target. +add-compressed-data/fast: + $(MAKE) $(MAKESILENT) -f examples/CMakeFiles/add-compressed-data.dir/build.make examples/CMakeFiles/add-compressed-data.dir/build +.PHONY : add-compressed-data/fast + +#============================================================================= +# Target rules for targets named autoclose-archive + +# Build rule for target. +autoclose-archive: cmake_check_build_system + $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 autoclose-archive +.PHONY : autoclose-archive + +# fast build rule for target. +autoclose-archive/fast: + $(MAKE) $(MAKESILENT) -f examples/CMakeFiles/autoclose-archive.dir/build.make examples/CMakeFiles/autoclose-archive.dir/build +.PHONY : autoclose-archive/fast + +#============================================================================= +# Target rules for targets named in-memory + +# Build rule for target. +in-memory: cmake_check_build_system + $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 in-memory +.PHONY : in-memory + +# fast build rule for target. +in-memory/fast: + $(MAKE) $(MAKESILENT) -f examples/CMakeFiles/in-memory.dir/build.make examples/CMakeFiles/in-memory.dir/build +.PHONY : in-memory/fast + +# Help Target +help: + @echo "The following are some of the valid targets for this Makefile:" + @echo "... all (the default if no target is provided)" + @echo "... clean" + @echo "... depend" + @echo "... edit_cache" + @echo "... install" + @echo "... install/local" + @echo "... install/strip" + @echo "... list_install_components" + @echo "... rebuild_cache" + @echo "... test" + @echo "... dist" + @echo "... distcheck" + @echo "... list-fuzzers" + @echo "... man" + @echo "... update-html" + @echo "... update-man" + @echo "... update_zip_errors" + @echo "... add-compressed-data" + @echo "... autoclose-archive" + @echo "... in-memory" + @echo "... zip" + @echo "... zip_read_file_fuzzer" + @echo "... zip_read_fuzzer" + @echo "... zip_write_encrypt_aes256_file_fuzzer" + @echo "... zip_write_encrypt_pkware_file_fuzzer" + @echo "... zipcmp" + @echo "... zipmerge" + @echo "... ziptool" +.PHONY : help + + + +#============================================================================= +# Special targets to cleanup operation of make. + +# Special rule to run CMake to check the build system integrity. +# No rule that depends on this can have commands that come from listfiles +# because they might be regenerated. +cmake_check_build_system: + $(CMAKE_COMMAND) -S$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles/Makefile.cmake 0 +.PHONY : cmake_check_build_system + diff --git a/thirdparty/libzip-1.11.3/build-emcmake/cmake_install.cmake b/thirdparty/libzip-1.11.3/build-emcmake/cmake_install.cmake new file mode 100644 index 0000000..d3fe8c1 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/cmake_install.cmake @@ -0,0 +1,105 @@ +# Install script for directory: /home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3 + +# Set the install prefix +if(NOT DEFINED CMAKE_INSTALL_PREFIX) + set(CMAKE_INSTALL_PREFIX "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/install") +endif() +string(REGEX REPLACE "/$" "" CMAKE_INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX}") + +# Set the install configuration name. +if(NOT DEFINED CMAKE_INSTALL_CONFIG_NAME) + if(BUILD_TYPE) + string(REGEX REPLACE "^[^A-Za-z0-9_]+" "" + CMAKE_INSTALL_CONFIG_NAME "${BUILD_TYPE}") + else() + set(CMAKE_INSTALL_CONFIG_NAME "") + endif() + message(STATUS "Install configuration: \"${CMAKE_INSTALL_CONFIG_NAME}\"") +endif() + +# Set the component getting installed. +if(NOT CMAKE_INSTALL_COMPONENT) + if(COMPONENT) + message(STATUS "Install component: \"${COMPONENT}\"") + set(CMAKE_INSTALL_COMPONENT "${COMPONENT}") + else() + set(CMAKE_INSTALL_COMPONENT) + endif() +endif() + +# Is this installation the result of a crosscompile? +if(NOT DEFINED CMAKE_CROSSCOMPILING) + set(CMAKE_CROSSCOMPILING "TRUE") +endif() + +# Set default install directory permissions. +if(NOT DEFINED CMAKE_OBJDUMP) + set(CMAKE_OBJDUMP "/usr/bin/objdump") +endif() + +if(CMAKE_INSTALL_COMPONENT STREQUAL "Unspecified" OR NOT CMAKE_INSTALL_COMPONENT) + file(INSTALL DESTINATION "${CMAKE_INSTALL_PREFIX}/lib/pkgconfig" TYPE FILE FILES "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/libzip.pc") +endif() + +if(CMAKE_INSTALL_COMPONENT STREQUAL "Unspecified" OR NOT CMAKE_INSTALL_COMPONENT) + file(INSTALL DESTINATION "${CMAKE_INSTALL_PREFIX}/lib/cmake/libzip/modules" TYPE FILE FILES + "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/cmake/FindNettle.cmake" + "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/cmake/Findzstd.cmake" + "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/cmake/FindMbedTLS.cmake" + ) +endif() + +if(CMAKE_INSTALL_COMPONENT STREQUAL "Unspecified" OR NOT CMAKE_INSTALL_COMPONENT) + file(INSTALL DESTINATION "${CMAKE_INSTALL_PREFIX}/include" TYPE FILE FILES "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/zipconf.h") +endif() + +if(CMAKE_INSTALL_COMPONENT STREQUAL "Unspecified" OR NOT CMAKE_INSTALL_COMPONENT) + file(INSTALL DESTINATION "${CMAKE_INSTALL_PREFIX}/lib/cmake/libzip" TYPE FILE FILES + "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/libzip-config.cmake" + "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/libzip-config-version.cmake" + ) +endif() + +if(CMAKE_INSTALL_COMPONENT STREQUAL "Unspecified" OR NOT CMAKE_INSTALL_COMPONENT) + if(EXISTS "$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/lib/cmake/libzip/libzip-targets.cmake") + file(DIFFERENT _cmake_export_file_changed FILES + "$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/lib/cmake/libzip/libzip-targets.cmake" + "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/Export/ab63c3a9eda5ec24a2943b813039874c/libzip-targets.cmake") + if(_cmake_export_file_changed) + file(GLOB _cmake_old_config_files "$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/lib/cmake/libzip/libzip-targets-*.cmake") + if(_cmake_old_config_files) + string(REPLACE ";" ", " _cmake_old_config_files_text "${_cmake_old_config_files}") + message(STATUS "Old export file \"$ENV{DESTDIR}${CMAKE_INSTALL_PREFIX}/lib/cmake/libzip/libzip-targets.cmake\" will be replaced. Removing files [${_cmake_old_config_files_text}].") + unset(_cmake_old_config_files_text) + file(REMOVE ${_cmake_old_config_files}) + endif() + unset(_cmake_old_config_files) + endif() + unset(_cmake_export_file_changed) + endif() + file(INSTALL DESTINATION "${CMAKE_INSTALL_PREFIX}/lib/cmake/libzip" TYPE FILE FILES "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/Export/ab63c3a9eda5ec24a2943b813039874c/libzip-targets.cmake") + if(CMAKE_INSTALL_CONFIG_NAME MATCHES "^()$") + file(INSTALL DESTINATION "${CMAKE_INSTALL_PREFIX}/lib/cmake/libzip" TYPE FILE FILES "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles/Export/ab63c3a9eda5ec24a2943b813039874c/libzip-targets-noconfig.cmake") + endif() +endif() + +if(NOT CMAKE_INSTALL_LOCAL_ONLY) + # Include the install script for each subdirectory. + include("/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib/cmake_install.cmake") + include("/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/cmake_install.cmake") + include("/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/src/cmake_install.cmake") + include("/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/ossfuzz/cmake_install.cmake") + include("/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/examples/cmake_install.cmake") + +endif() + +if(CMAKE_INSTALL_COMPONENT) + set(CMAKE_INSTALL_MANIFEST "install_manifest_${CMAKE_INSTALL_COMPONENT}.txt") +else() + set(CMAKE_INSTALL_MANIFEST "install_manifest.txt") +endif() + +string(REPLACE ";" "\n" CMAKE_INSTALL_MANIFEST_CONTENT + "${CMAKE_INSTALL_MANIFEST_FILES}") +file(WRITE "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/${CMAKE_INSTALL_MANIFEST}" + "${CMAKE_INSTALL_MANIFEST_CONTENT}") diff --git a/thirdparty/libzip-1.11.3/build-emcmake/compile_commands.json b/thirdparty/libzip-1.11.3/build-emcmake/compile_commands.json new file mode 100644 index 0000000..bcd2b69 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/compile_commands.json @@ -0,0 +1,770 @@ +[ +{ + "directory": "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib", + "command": "\"/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc\" @CMakeFiles/zip.dir/includes_C.rsp -fvisibility=hidden -o CMakeFiles/zip.dir/zip_add.c.o -c \"/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_add.c\"", + "file": "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_add.c", + "output": "lib/CMakeFiles/zip.dir/zip_add.c.o" +}, +{ + "directory": "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib", + "command": "\"/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc\" @CMakeFiles/zip.dir/includes_C.rsp -fvisibility=hidden -o CMakeFiles/zip.dir/zip_add_dir.c.o -c \"/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_add_dir.c\"", + "file": "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_add_dir.c", + "output": "lib/CMakeFiles/zip.dir/zip_add_dir.c.o" +}, +{ + "directory": "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib", + "command": "\"/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc\" @CMakeFiles/zip.dir/includes_C.rsp -fvisibility=hidden -o CMakeFiles/zip.dir/zip_add_entry.c.o -c \"/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_add_entry.c\"", + "file": "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_add_entry.c", + "output": "lib/CMakeFiles/zip.dir/zip_add_entry.c.o" +}, +{ + "directory": "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib", + "command": "\"/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc\" @CMakeFiles/zip.dir/includes_C.rsp -fvisibility=hidden -o CMakeFiles/zip.dir/zip_algorithm_deflate.c.o -c \"/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_algorithm_deflate.c\"", + "file": "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_algorithm_deflate.c", + "output": "lib/CMakeFiles/zip.dir/zip_algorithm_deflate.c.o" +}, +{ + "directory": "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib", + "command": "\"/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc\" @CMakeFiles/zip.dir/includes_C.rsp -fvisibility=hidden -o CMakeFiles/zip.dir/zip_buffer.c.o -c \"/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_buffer.c\"", + "file": "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_buffer.c", + "output": "lib/CMakeFiles/zip.dir/zip_buffer.c.o" +}, +{ + "directory": "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib", + "command": "\"/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc\" @CMakeFiles/zip.dir/includes_C.rsp -fvisibility=hidden -o CMakeFiles/zip.dir/zip_close.c.o -c \"/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_close.c\"", + "file": "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_close.c", + "output": "lib/CMakeFiles/zip.dir/zip_close.c.o" +}, +{ + "directory": "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib", + "command": "\"/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc\" @CMakeFiles/zip.dir/includes_C.rsp -fvisibility=hidden -o CMakeFiles/zip.dir/zip_delete.c.o -c \"/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_delete.c\"", + "file": "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_delete.c", + "output": "lib/CMakeFiles/zip.dir/zip_delete.c.o" +}, +{ + "directory": "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib", + "command": "\"/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc\" @CMakeFiles/zip.dir/includes_C.rsp -fvisibility=hidden -o CMakeFiles/zip.dir/zip_dir_add.c.o -c \"/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_dir_add.c\"", + "file": "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_dir_add.c", + "output": "lib/CMakeFiles/zip.dir/zip_dir_add.c.o" +}, +{ + "directory": "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib", + "command": "\"/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc\" @CMakeFiles/zip.dir/includes_C.rsp -fvisibility=hidden -o CMakeFiles/zip.dir/zip_dirent.c.o -c \"/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_dirent.c\"", + "file": "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_dirent.c", + "output": "lib/CMakeFiles/zip.dir/zip_dirent.c.o" +}, +{ + "directory": "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib", + "command": "\"/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc\" @CMakeFiles/zip.dir/includes_C.rsp -fvisibility=hidden -o CMakeFiles/zip.dir/zip_discard.c.o -c \"/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_discard.c\"", + "file": "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_discard.c", + "output": "lib/CMakeFiles/zip.dir/zip_discard.c.o" +}, +{ + "directory": "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib", + "command": "\"/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc\" @CMakeFiles/zip.dir/includes_C.rsp -fvisibility=hidden -o CMakeFiles/zip.dir/zip_entry.c.o -c \"/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_entry.c\"", + "file": "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_entry.c", + "output": "lib/CMakeFiles/zip.dir/zip_entry.c.o" +}, +{ + "directory": "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib", + "command": "\"/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc\" @CMakeFiles/zip.dir/includes_C.rsp -fvisibility=hidden -o CMakeFiles/zip.dir/zip_error.c.o -c \"/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_error.c\"", + "file": "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_error.c", + "output": "lib/CMakeFiles/zip.dir/zip_error.c.o" +}, +{ + "directory": "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib", + "command": "\"/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc\" @CMakeFiles/zip.dir/includes_C.rsp -fvisibility=hidden -o CMakeFiles/zip.dir/zip_error_clear.c.o -c \"/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_error_clear.c\"", + "file": "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_error_clear.c", + "output": "lib/CMakeFiles/zip.dir/zip_error_clear.c.o" +}, +{ + "directory": "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib", + "command": "\"/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc\" @CMakeFiles/zip.dir/includes_C.rsp -fvisibility=hidden -o CMakeFiles/zip.dir/zip_error_get.c.o -c \"/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_error_get.c\"", + "file": "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_error_get.c", + "output": "lib/CMakeFiles/zip.dir/zip_error_get.c.o" +}, +{ + "directory": "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib", + "command": "\"/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc\" @CMakeFiles/zip.dir/includes_C.rsp -fvisibility=hidden -o CMakeFiles/zip.dir/zip_error_get_sys_type.c.o -c \"/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_error_get_sys_type.c\"", + "file": "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_error_get_sys_type.c", + "output": "lib/CMakeFiles/zip.dir/zip_error_get_sys_type.c.o" +}, +{ + "directory": "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib", + "command": "\"/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc\" @CMakeFiles/zip.dir/includes_C.rsp -fvisibility=hidden -o CMakeFiles/zip.dir/zip_error_strerror.c.o -c \"/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_error_strerror.c\"", + "file": "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_error_strerror.c", + "output": "lib/CMakeFiles/zip.dir/zip_error_strerror.c.o" +}, +{ + "directory": "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib", + "command": "\"/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc\" @CMakeFiles/zip.dir/includes_C.rsp -fvisibility=hidden -o CMakeFiles/zip.dir/zip_error_to_str.c.o -c \"/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_error_to_str.c\"", + "file": "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_error_to_str.c", + "output": "lib/CMakeFiles/zip.dir/zip_error_to_str.c.o" +}, +{ + "directory": "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib", + "command": "\"/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc\" @CMakeFiles/zip.dir/includes_C.rsp -fvisibility=hidden -o CMakeFiles/zip.dir/zip_extra_field.c.o -c \"/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_extra_field.c\"", + "file": "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_extra_field.c", + "output": "lib/CMakeFiles/zip.dir/zip_extra_field.c.o" +}, +{ + "directory": "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib", + "command": "\"/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc\" @CMakeFiles/zip.dir/includes_C.rsp -fvisibility=hidden -o CMakeFiles/zip.dir/zip_extra_field_api.c.o -c \"/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_extra_field_api.c\"", + "file": "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_extra_field_api.c", + "output": "lib/CMakeFiles/zip.dir/zip_extra_field_api.c.o" +}, +{ + "directory": "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib", + "command": "\"/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc\" @CMakeFiles/zip.dir/includes_C.rsp -fvisibility=hidden -o CMakeFiles/zip.dir/zip_fclose.c.o -c \"/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_fclose.c\"", + "file": "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_fclose.c", + "output": "lib/CMakeFiles/zip.dir/zip_fclose.c.o" +}, +{ + "directory": "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib", + "command": "\"/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc\" @CMakeFiles/zip.dir/includes_C.rsp -fvisibility=hidden -o CMakeFiles/zip.dir/zip_fdopen.c.o -c \"/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_fdopen.c\"", + "file": "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_fdopen.c", + "output": "lib/CMakeFiles/zip.dir/zip_fdopen.c.o" +}, +{ + "directory": "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib", + "command": "\"/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc\" @CMakeFiles/zip.dir/includes_C.rsp -fvisibility=hidden -o CMakeFiles/zip.dir/zip_file_add.c.o -c \"/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_file_add.c\"", + "file": "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_file_add.c", + "output": "lib/CMakeFiles/zip.dir/zip_file_add.c.o" +}, +{ + "directory": "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib", + "command": "\"/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc\" @CMakeFiles/zip.dir/includes_C.rsp -fvisibility=hidden -o CMakeFiles/zip.dir/zip_file_error_clear.c.o -c \"/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_file_error_clear.c\"", + "file": "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_file_error_clear.c", + "output": "lib/CMakeFiles/zip.dir/zip_file_error_clear.c.o" +}, +{ + "directory": "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib", + "command": "\"/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc\" @CMakeFiles/zip.dir/includes_C.rsp -fvisibility=hidden -o CMakeFiles/zip.dir/zip_file_error_get.c.o -c \"/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_file_error_get.c\"", + "file": "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_file_error_get.c", + "output": "lib/CMakeFiles/zip.dir/zip_file_error_get.c.o" +}, +{ + "directory": "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib", + "command": "\"/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc\" @CMakeFiles/zip.dir/includes_C.rsp -fvisibility=hidden -o CMakeFiles/zip.dir/zip_file_get_comment.c.o -c \"/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_file_get_comment.c\"", + "file": "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_file_get_comment.c", + "output": "lib/CMakeFiles/zip.dir/zip_file_get_comment.c.o" +}, +{ + "directory": "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib", + "command": "\"/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc\" @CMakeFiles/zip.dir/includes_C.rsp -fvisibility=hidden -o CMakeFiles/zip.dir/zip_file_get_external_attributes.c.o -c \"/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_file_get_external_attributes.c\"", + "file": "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_file_get_external_attributes.c", + "output": "lib/CMakeFiles/zip.dir/zip_file_get_external_attributes.c.o" +}, +{ + "directory": "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib", + "command": "\"/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc\" @CMakeFiles/zip.dir/includes_C.rsp -fvisibility=hidden -o CMakeFiles/zip.dir/zip_file_get_offset.c.o -c \"/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_file_get_offset.c\"", + "file": "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_file_get_offset.c", + "output": "lib/CMakeFiles/zip.dir/zip_file_get_offset.c.o" +}, +{ + "directory": "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib", + "command": "\"/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc\" @CMakeFiles/zip.dir/includes_C.rsp -fvisibility=hidden -o CMakeFiles/zip.dir/zip_file_rename.c.o -c \"/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_file_rename.c\"", + "file": "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_file_rename.c", + "output": "lib/CMakeFiles/zip.dir/zip_file_rename.c.o" +}, +{ + "directory": "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib", + "command": "\"/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc\" @CMakeFiles/zip.dir/includes_C.rsp -fvisibility=hidden -o CMakeFiles/zip.dir/zip_file_replace.c.o -c \"/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_file_replace.c\"", + "file": "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_file_replace.c", + "output": "lib/CMakeFiles/zip.dir/zip_file_replace.c.o" +}, +{ + "directory": "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib", + "command": "\"/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc\" @CMakeFiles/zip.dir/includes_C.rsp -fvisibility=hidden -o CMakeFiles/zip.dir/zip_file_set_comment.c.o -c \"/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_file_set_comment.c\"", + "file": "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_file_set_comment.c", + "output": "lib/CMakeFiles/zip.dir/zip_file_set_comment.c.o" +}, +{ + "directory": "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib", + "command": "\"/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc\" @CMakeFiles/zip.dir/includes_C.rsp -fvisibility=hidden -o CMakeFiles/zip.dir/zip_file_set_encryption.c.o -c \"/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_file_set_encryption.c\"", + "file": "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_file_set_encryption.c", + "output": "lib/CMakeFiles/zip.dir/zip_file_set_encryption.c.o" +}, +{ + "directory": "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib", + "command": "\"/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc\" @CMakeFiles/zip.dir/includes_C.rsp -fvisibility=hidden -o CMakeFiles/zip.dir/zip_file_set_external_attributes.c.o -c \"/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_file_set_external_attributes.c\"", + "file": "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_file_set_external_attributes.c", + "output": "lib/CMakeFiles/zip.dir/zip_file_set_external_attributes.c.o" +}, +{ + "directory": "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib", + "command": "\"/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc\" @CMakeFiles/zip.dir/includes_C.rsp -fvisibility=hidden -o CMakeFiles/zip.dir/zip_file_set_mtime.c.o -c \"/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_file_set_mtime.c\"", + "file": "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_file_set_mtime.c", + "output": "lib/CMakeFiles/zip.dir/zip_file_set_mtime.c.o" +}, +{ + "directory": "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib", + "command": "\"/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc\" @CMakeFiles/zip.dir/includes_C.rsp -fvisibility=hidden -o CMakeFiles/zip.dir/zip_file_strerror.c.o -c \"/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_file_strerror.c\"", + "file": "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_file_strerror.c", + "output": "lib/CMakeFiles/zip.dir/zip_file_strerror.c.o" +}, +{ + "directory": "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib", + "command": "\"/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc\" @CMakeFiles/zip.dir/includes_C.rsp -fvisibility=hidden -o CMakeFiles/zip.dir/zip_fopen.c.o -c \"/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_fopen.c\"", + "file": "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_fopen.c", + "output": "lib/CMakeFiles/zip.dir/zip_fopen.c.o" +}, +{ + "directory": "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib", + "command": "\"/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc\" @CMakeFiles/zip.dir/includes_C.rsp -fvisibility=hidden -o CMakeFiles/zip.dir/zip_fopen_encrypted.c.o -c \"/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_fopen_encrypted.c\"", + "file": "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_fopen_encrypted.c", + "output": "lib/CMakeFiles/zip.dir/zip_fopen_encrypted.c.o" +}, +{ + "directory": "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib", + "command": "\"/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc\" @CMakeFiles/zip.dir/includes_C.rsp -fvisibility=hidden -o CMakeFiles/zip.dir/zip_fopen_index.c.o -c \"/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_fopen_index.c\"", + "file": "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_fopen_index.c", + "output": "lib/CMakeFiles/zip.dir/zip_fopen_index.c.o" +}, +{ + "directory": "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib", + "command": "\"/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc\" @CMakeFiles/zip.dir/includes_C.rsp -fvisibility=hidden -o CMakeFiles/zip.dir/zip_fopen_index_encrypted.c.o -c \"/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_fopen_index_encrypted.c\"", + "file": "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_fopen_index_encrypted.c", + "output": "lib/CMakeFiles/zip.dir/zip_fopen_index_encrypted.c.o" +}, +{ + "directory": "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib", + "command": "\"/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc\" @CMakeFiles/zip.dir/includes_C.rsp -fvisibility=hidden -o CMakeFiles/zip.dir/zip_fread.c.o -c \"/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_fread.c\"", + "file": "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_fread.c", + "output": "lib/CMakeFiles/zip.dir/zip_fread.c.o" +}, +{ + "directory": "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib", + "command": "\"/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc\" @CMakeFiles/zip.dir/includes_C.rsp -fvisibility=hidden -o CMakeFiles/zip.dir/zip_fseek.c.o -c \"/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_fseek.c\"", + "file": "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_fseek.c", + "output": "lib/CMakeFiles/zip.dir/zip_fseek.c.o" +}, +{ + "directory": "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib", + "command": "\"/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc\" @CMakeFiles/zip.dir/includes_C.rsp -fvisibility=hidden -o CMakeFiles/zip.dir/zip_ftell.c.o -c \"/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_ftell.c\"", + "file": "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_ftell.c", + "output": "lib/CMakeFiles/zip.dir/zip_ftell.c.o" +}, +{ + "directory": "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib", + "command": "\"/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc\" @CMakeFiles/zip.dir/includes_C.rsp -fvisibility=hidden -o CMakeFiles/zip.dir/zip_get_archive_comment.c.o -c \"/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_get_archive_comment.c\"", + "file": "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_get_archive_comment.c", + "output": "lib/CMakeFiles/zip.dir/zip_get_archive_comment.c.o" +}, +{ + "directory": "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib", + "command": "\"/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc\" @CMakeFiles/zip.dir/includes_C.rsp -fvisibility=hidden -o CMakeFiles/zip.dir/zip_get_archive_flag.c.o -c \"/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_get_archive_flag.c\"", + "file": "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_get_archive_flag.c", + "output": "lib/CMakeFiles/zip.dir/zip_get_archive_flag.c.o" +}, +{ + "directory": "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib", + "command": "\"/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc\" @CMakeFiles/zip.dir/includes_C.rsp -fvisibility=hidden -o CMakeFiles/zip.dir/zip_get_encryption_implementation.c.o -c \"/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_get_encryption_implementation.c\"", + "file": "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_get_encryption_implementation.c", + "output": "lib/CMakeFiles/zip.dir/zip_get_encryption_implementation.c.o" +}, +{ + "directory": "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib", + "command": "\"/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc\" @CMakeFiles/zip.dir/includes_C.rsp -fvisibility=hidden -o CMakeFiles/zip.dir/zip_get_file_comment.c.o -c \"/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_get_file_comment.c\"", + "file": "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_get_file_comment.c", + "output": "lib/CMakeFiles/zip.dir/zip_get_file_comment.c.o" +}, +{ + "directory": "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib", + "command": "\"/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc\" @CMakeFiles/zip.dir/includes_C.rsp -fvisibility=hidden -o CMakeFiles/zip.dir/zip_get_name.c.o -c \"/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_get_name.c\"", + "file": "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_get_name.c", + "output": "lib/CMakeFiles/zip.dir/zip_get_name.c.o" +}, +{ + "directory": "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib", + "command": "\"/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc\" @CMakeFiles/zip.dir/includes_C.rsp -fvisibility=hidden -o CMakeFiles/zip.dir/zip_get_num_entries.c.o -c \"/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_get_num_entries.c\"", + "file": "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_get_num_entries.c", + "output": "lib/CMakeFiles/zip.dir/zip_get_num_entries.c.o" +}, +{ + "directory": "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib", + "command": "\"/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc\" @CMakeFiles/zip.dir/includes_C.rsp -fvisibility=hidden -o CMakeFiles/zip.dir/zip_get_num_files.c.o -c \"/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_get_num_files.c\"", + "file": "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_get_num_files.c", + "output": "lib/CMakeFiles/zip.dir/zip_get_num_files.c.o" +}, +{ + "directory": "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib", + "command": "\"/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc\" @CMakeFiles/zip.dir/includes_C.rsp -fvisibility=hidden -o CMakeFiles/zip.dir/zip_hash.c.o -c \"/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_hash.c\"", + "file": "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_hash.c", + "output": "lib/CMakeFiles/zip.dir/zip_hash.c.o" +}, +{ + "directory": "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib", + "command": "\"/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc\" @CMakeFiles/zip.dir/includes_C.rsp -fvisibility=hidden -o CMakeFiles/zip.dir/zip_io_util.c.o -c \"/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_io_util.c\"", + "file": "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_io_util.c", + "output": "lib/CMakeFiles/zip.dir/zip_io_util.c.o" +}, +{ + "directory": "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib", + "command": "\"/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc\" @CMakeFiles/zip.dir/includes_C.rsp -fvisibility=hidden -o CMakeFiles/zip.dir/zip_libzip_version.c.o -c \"/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_libzip_version.c\"", + "file": "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_libzip_version.c", + "output": "lib/CMakeFiles/zip.dir/zip_libzip_version.c.o" +}, +{ + "directory": "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib", + "command": "\"/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc\" @CMakeFiles/zip.dir/includes_C.rsp -fvisibility=hidden -o CMakeFiles/zip.dir/zip_memdup.c.o -c \"/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_memdup.c\"", + "file": "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_memdup.c", + "output": "lib/CMakeFiles/zip.dir/zip_memdup.c.o" +}, +{ + "directory": "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib", + "command": "\"/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc\" @CMakeFiles/zip.dir/includes_C.rsp -fvisibility=hidden -o CMakeFiles/zip.dir/zip_name_locate.c.o -c \"/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_name_locate.c\"", + "file": "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_name_locate.c", + "output": "lib/CMakeFiles/zip.dir/zip_name_locate.c.o" +}, +{ + "directory": "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib", + "command": "\"/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc\" @CMakeFiles/zip.dir/includes_C.rsp -fvisibility=hidden -o CMakeFiles/zip.dir/zip_new.c.o -c \"/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_new.c\"", + "file": "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_new.c", + "output": "lib/CMakeFiles/zip.dir/zip_new.c.o" +}, +{ + "directory": "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib", + "command": "\"/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc\" @CMakeFiles/zip.dir/includes_C.rsp -fvisibility=hidden -o CMakeFiles/zip.dir/zip_open.c.o -c \"/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_open.c\"", + "file": "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_open.c", + "output": "lib/CMakeFiles/zip.dir/zip_open.c.o" +}, +{ + "directory": "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib", + "command": "\"/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc\" @CMakeFiles/zip.dir/includes_C.rsp -fvisibility=hidden -o CMakeFiles/zip.dir/zip_pkware.c.o -c \"/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_pkware.c\"", + "file": "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_pkware.c", + "output": "lib/CMakeFiles/zip.dir/zip_pkware.c.o" +}, +{ + "directory": "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib", + "command": "\"/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc\" @CMakeFiles/zip.dir/includes_C.rsp -fvisibility=hidden -o CMakeFiles/zip.dir/zip_progress.c.o -c \"/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_progress.c\"", + "file": "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_progress.c", + "output": "lib/CMakeFiles/zip.dir/zip_progress.c.o" +}, +{ + "directory": "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib", + "command": "\"/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc\" @CMakeFiles/zip.dir/includes_C.rsp -fvisibility=hidden -o CMakeFiles/zip.dir/zip_rename.c.o -c \"/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_rename.c\"", + "file": "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_rename.c", + "output": "lib/CMakeFiles/zip.dir/zip_rename.c.o" +}, +{ + "directory": "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib", + "command": "\"/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc\" @CMakeFiles/zip.dir/includes_C.rsp -fvisibility=hidden -o CMakeFiles/zip.dir/zip_replace.c.o -c \"/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_replace.c\"", + "file": "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_replace.c", + "output": "lib/CMakeFiles/zip.dir/zip_replace.c.o" +}, +{ + "directory": "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib", + "command": "\"/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc\" @CMakeFiles/zip.dir/includes_C.rsp -fvisibility=hidden -o CMakeFiles/zip.dir/zip_set_archive_comment.c.o -c \"/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_set_archive_comment.c\"", + "file": "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_set_archive_comment.c", + "output": "lib/CMakeFiles/zip.dir/zip_set_archive_comment.c.o" +}, +{ + "directory": "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib", + "command": "\"/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc\" @CMakeFiles/zip.dir/includes_C.rsp -fvisibility=hidden -o CMakeFiles/zip.dir/zip_set_archive_flag.c.o -c \"/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_set_archive_flag.c\"", + "file": "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_set_archive_flag.c", + "output": "lib/CMakeFiles/zip.dir/zip_set_archive_flag.c.o" +}, +{ + "directory": "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib", + "command": "\"/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc\" @CMakeFiles/zip.dir/includes_C.rsp -fvisibility=hidden -o CMakeFiles/zip.dir/zip_set_default_password.c.o -c \"/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_set_default_password.c\"", + "file": "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_set_default_password.c", + "output": "lib/CMakeFiles/zip.dir/zip_set_default_password.c.o" +}, +{ + "directory": "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib", + "command": "\"/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc\" @CMakeFiles/zip.dir/includes_C.rsp -fvisibility=hidden -o CMakeFiles/zip.dir/zip_set_file_comment.c.o -c \"/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_set_file_comment.c\"", + "file": "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_set_file_comment.c", + "output": "lib/CMakeFiles/zip.dir/zip_set_file_comment.c.o" +}, +{ + "directory": "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib", + "command": "\"/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc\" @CMakeFiles/zip.dir/includes_C.rsp -fvisibility=hidden -o CMakeFiles/zip.dir/zip_set_file_compression.c.o -c \"/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_set_file_compression.c\"", + "file": "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_set_file_compression.c", + "output": "lib/CMakeFiles/zip.dir/zip_set_file_compression.c.o" +}, +{ + "directory": "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib", + "command": "\"/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc\" @CMakeFiles/zip.dir/includes_C.rsp -fvisibility=hidden -o CMakeFiles/zip.dir/zip_set_name.c.o -c \"/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_set_name.c\"", + "file": "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_set_name.c", + "output": "lib/CMakeFiles/zip.dir/zip_set_name.c.o" +}, +{ + "directory": "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib", + "command": "\"/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc\" @CMakeFiles/zip.dir/includes_C.rsp -fvisibility=hidden -o CMakeFiles/zip.dir/zip_source_accept_empty.c.o -c \"/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_source_accept_empty.c\"", + "file": "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_source_accept_empty.c", + "output": "lib/CMakeFiles/zip.dir/zip_source_accept_empty.c.o" +}, +{ + "directory": "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib", + "command": "\"/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc\" @CMakeFiles/zip.dir/includes_C.rsp -fvisibility=hidden -o CMakeFiles/zip.dir/zip_source_begin_write.c.o -c \"/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_source_begin_write.c\"", + "file": "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_source_begin_write.c", + "output": "lib/CMakeFiles/zip.dir/zip_source_begin_write.c.o" +}, +{ + "directory": "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib", + "command": "\"/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc\" @CMakeFiles/zip.dir/includes_C.rsp -fvisibility=hidden -o CMakeFiles/zip.dir/zip_source_begin_write_cloning.c.o -c \"/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_source_begin_write_cloning.c\"", + "file": "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_source_begin_write_cloning.c", + "output": "lib/CMakeFiles/zip.dir/zip_source_begin_write_cloning.c.o" +}, +{ + "directory": "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib", + "command": "\"/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc\" @CMakeFiles/zip.dir/includes_C.rsp -fvisibility=hidden -o CMakeFiles/zip.dir/zip_source_buffer.c.o -c \"/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_source_buffer.c\"", + "file": "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_source_buffer.c", + "output": "lib/CMakeFiles/zip.dir/zip_source_buffer.c.o" +}, +{ + "directory": "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib", + "command": "\"/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc\" @CMakeFiles/zip.dir/includes_C.rsp -fvisibility=hidden -o CMakeFiles/zip.dir/zip_source_call.c.o -c \"/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_source_call.c\"", + "file": "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_source_call.c", + "output": "lib/CMakeFiles/zip.dir/zip_source_call.c.o" +}, +{ + "directory": "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib", + "command": "\"/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc\" @CMakeFiles/zip.dir/includes_C.rsp -fvisibility=hidden -o CMakeFiles/zip.dir/zip_source_close.c.o -c \"/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_source_close.c\"", + "file": "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_source_close.c", + "output": "lib/CMakeFiles/zip.dir/zip_source_close.c.o" +}, +{ + "directory": "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib", + "command": "\"/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc\" @CMakeFiles/zip.dir/includes_C.rsp -fvisibility=hidden -o CMakeFiles/zip.dir/zip_source_commit_write.c.o -c \"/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_source_commit_write.c\"", + "file": "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_source_commit_write.c", + "output": "lib/CMakeFiles/zip.dir/zip_source_commit_write.c.o" +}, +{ + "directory": "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib", + "command": "\"/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc\" @CMakeFiles/zip.dir/includes_C.rsp -fvisibility=hidden -o CMakeFiles/zip.dir/zip_source_compress.c.o -c \"/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_source_compress.c\"", + "file": "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_source_compress.c", + "output": "lib/CMakeFiles/zip.dir/zip_source_compress.c.o" +}, +{ + "directory": "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib", + "command": "\"/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc\" @CMakeFiles/zip.dir/includes_C.rsp -fvisibility=hidden -o CMakeFiles/zip.dir/zip_source_crc.c.o -c \"/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_source_crc.c\"", + "file": "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_source_crc.c", + "output": "lib/CMakeFiles/zip.dir/zip_source_crc.c.o" +}, +{ + "directory": "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib", + "command": "\"/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc\" @CMakeFiles/zip.dir/includes_C.rsp -fvisibility=hidden -o CMakeFiles/zip.dir/zip_source_error.c.o -c \"/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_source_error.c\"", + "file": "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_source_error.c", + "output": "lib/CMakeFiles/zip.dir/zip_source_error.c.o" +}, +{ + "directory": "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib", + "command": "\"/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc\" @CMakeFiles/zip.dir/includes_C.rsp -fvisibility=hidden -o CMakeFiles/zip.dir/zip_source_file_common.c.o -c \"/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_source_file_common.c\"", + "file": "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_source_file_common.c", + "output": "lib/CMakeFiles/zip.dir/zip_source_file_common.c.o" +}, +{ + "directory": "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib", + "command": "\"/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc\" @CMakeFiles/zip.dir/includes_C.rsp -fvisibility=hidden -o CMakeFiles/zip.dir/zip_source_file_stdio.c.o -c \"/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_source_file_stdio.c\"", + "file": "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_source_file_stdio.c", + "output": "lib/CMakeFiles/zip.dir/zip_source_file_stdio.c.o" +}, +{ + "directory": "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib", + "command": "\"/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc\" @CMakeFiles/zip.dir/includes_C.rsp -fvisibility=hidden -o CMakeFiles/zip.dir/zip_source_free.c.o -c \"/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_source_free.c\"", + "file": "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_source_free.c", + "output": "lib/CMakeFiles/zip.dir/zip_source_free.c.o" +}, +{ + "directory": "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib", + "command": "\"/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc\" @CMakeFiles/zip.dir/includes_C.rsp -fvisibility=hidden -o CMakeFiles/zip.dir/zip_source_function.c.o -c \"/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_source_function.c\"", + "file": "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_source_function.c", + "output": "lib/CMakeFiles/zip.dir/zip_source_function.c.o" +}, +{ + "directory": "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib", + "command": "\"/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc\" @CMakeFiles/zip.dir/includes_C.rsp -fvisibility=hidden -o CMakeFiles/zip.dir/zip_source_get_dostime.c.o -c \"/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_source_get_dostime.c\"", + "file": "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_source_get_dostime.c", + "output": "lib/CMakeFiles/zip.dir/zip_source_get_dostime.c.o" +}, +{ + "directory": "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib", + "command": "\"/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc\" @CMakeFiles/zip.dir/includes_C.rsp -fvisibility=hidden -o CMakeFiles/zip.dir/zip_source_get_file_attributes.c.o -c \"/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_source_get_file_attributes.c\"", + "file": "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_source_get_file_attributes.c", + "output": "lib/CMakeFiles/zip.dir/zip_source_get_file_attributes.c.o" +}, +{ + "directory": "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib", + "command": "\"/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc\" @CMakeFiles/zip.dir/includes_C.rsp -fvisibility=hidden -o CMakeFiles/zip.dir/zip_source_is_deleted.c.o -c \"/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_source_is_deleted.c\"", + "file": "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_source_is_deleted.c", + "output": "lib/CMakeFiles/zip.dir/zip_source_is_deleted.c.o" +}, +{ + "directory": "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib", + "command": "\"/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc\" @CMakeFiles/zip.dir/includes_C.rsp -fvisibility=hidden -o CMakeFiles/zip.dir/zip_source_layered.c.o -c \"/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_source_layered.c\"", + "file": "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_source_layered.c", + "output": "lib/CMakeFiles/zip.dir/zip_source_layered.c.o" +}, +{ + "directory": "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib", + "command": "\"/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc\" @CMakeFiles/zip.dir/includes_C.rsp -fvisibility=hidden -o CMakeFiles/zip.dir/zip_source_open.c.o -c \"/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_source_open.c\"", + "file": "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_source_open.c", + "output": "lib/CMakeFiles/zip.dir/zip_source_open.c.o" +}, +{ + "directory": "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib", + "command": "\"/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc\" @CMakeFiles/zip.dir/includes_C.rsp -fvisibility=hidden -o CMakeFiles/zip.dir/zip_source_pass_to_lower_layer.c.o -c \"/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_source_pass_to_lower_layer.c\"", + "file": "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_source_pass_to_lower_layer.c", + "output": "lib/CMakeFiles/zip.dir/zip_source_pass_to_lower_layer.c.o" +}, +{ + "directory": "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib", + "command": "\"/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc\" @CMakeFiles/zip.dir/includes_C.rsp -fvisibility=hidden -o CMakeFiles/zip.dir/zip_source_pkware_decode.c.o -c \"/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_source_pkware_decode.c\"", + "file": "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_source_pkware_decode.c", + "output": "lib/CMakeFiles/zip.dir/zip_source_pkware_decode.c.o" +}, +{ + "directory": "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib", + "command": "\"/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc\" @CMakeFiles/zip.dir/includes_C.rsp -fvisibility=hidden -o CMakeFiles/zip.dir/zip_source_pkware_encode.c.o -c \"/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_source_pkware_encode.c\"", + "file": "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_source_pkware_encode.c", + "output": "lib/CMakeFiles/zip.dir/zip_source_pkware_encode.c.o" +}, +{ + "directory": "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib", + "command": "\"/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc\" @CMakeFiles/zip.dir/includes_C.rsp -fvisibility=hidden -o CMakeFiles/zip.dir/zip_source_read.c.o -c \"/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_source_read.c\"", + "file": "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_source_read.c", + "output": "lib/CMakeFiles/zip.dir/zip_source_read.c.o" +}, +{ + "directory": "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib", + "command": "\"/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc\" @CMakeFiles/zip.dir/includes_C.rsp -fvisibility=hidden -o CMakeFiles/zip.dir/zip_source_remove.c.o -c \"/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_source_remove.c\"", + "file": "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_source_remove.c", + "output": "lib/CMakeFiles/zip.dir/zip_source_remove.c.o" +}, +{ + "directory": "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib", + "command": "\"/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc\" @CMakeFiles/zip.dir/includes_C.rsp -fvisibility=hidden -o CMakeFiles/zip.dir/zip_source_rollback_write.c.o -c \"/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_source_rollback_write.c\"", + "file": "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_source_rollback_write.c", + "output": "lib/CMakeFiles/zip.dir/zip_source_rollback_write.c.o" +}, +{ + "directory": "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib", + "command": "\"/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc\" @CMakeFiles/zip.dir/includes_C.rsp -fvisibility=hidden -o CMakeFiles/zip.dir/zip_source_seek.c.o -c \"/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_source_seek.c\"", + "file": "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_source_seek.c", + "output": "lib/CMakeFiles/zip.dir/zip_source_seek.c.o" +}, +{ + "directory": "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib", + "command": "\"/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc\" @CMakeFiles/zip.dir/includes_C.rsp -fvisibility=hidden -o CMakeFiles/zip.dir/zip_source_seek_write.c.o -c \"/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_source_seek_write.c\"", + "file": "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_source_seek_write.c", + "output": "lib/CMakeFiles/zip.dir/zip_source_seek_write.c.o" +}, +{ + "directory": "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib", + "command": "\"/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc\" @CMakeFiles/zip.dir/includes_C.rsp -fvisibility=hidden -o CMakeFiles/zip.dir/zip_source_stat.c.o -c \"/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_source_stat.c\"", + "file": "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_source_stat.c", + "output": "lib/CMakeFiles/zip.dir/zip_source_stat.c.o" +}, +{ + "directory": "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib", + "command": "\"/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc\" @CMakeFiles/zip.dir/includes_C.rsp -fvisibility=hidden -o CMakeFiles/zip.dir/zip_source_supports.c.o -c \"/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_source_supports.c\"", + "file": "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_source_supports.c", + "output": "lib/CMakeFiles/zip.dir/zip_source_supports.c.o" +}, +{ + "directory": "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib", + "command": "\"/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc\" @CMakeFiles/zip.dir/includes_C.rsp -fvisibility=hidden -o CMakeFiles/zip.dir/zip_source_tell.c.o -c \"/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_source_tell.c\"", + "file": "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_source_tell.c", + "output": "lib/CMakeFiles/zip.dir/zip_source_tell.c.o" +}, +{ + "directory": "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib", + "command": "\"/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc\" @CMakeFiles/zip.dir/includes_C.rsp -fvisibility=hidden -o CMakeFiles/zip.dir/zip_source_tell_write.c.o -c \"/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_source_tell_write.c\"", + "file": "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_source_tell_write.c", + "output": "lib/CMakeFiles/zip.dir/zip_source_tell_write.c.o" +}, +{ + "directory": "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib", + "command": "\"/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc\" @CMakeFiles/zip.dir/includes_C.rsp -fvisibility=hidden -o CMakeFiles/zip.dir/zip_source_window.c.o -c \"/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_source_window.c\"", + "file": "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_source_window.c", + "output": "lib/CMakeFiles/zip.dir/zip_source_window.c.o" +}, +{ + "directory": "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib", + "command": "\"/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc\" @CMakeFiles/zip.dir/includes_C.rsp -fvisibility=hidden -o CMakeFiles/zip.dir/zip_source_write.c.o -c \"/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_source_write.c\"", + "file": "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_source_write.c", + "output": "lib/CMakeFiles/zip.dir/zip_source_write.c.o" +}, +{ + "directory": "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib", + "command": "\"/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc\" @CMakeFiles/zip.dir/includes_C.rsp -fvisibility=hidden -o CMakeFiles/zip.dir/zip_source_zip.c.o -c \"/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_source_zip.c\"", + "file": "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_source_zip.c", + "output": "lib/CMakeFiles/zip.dir/zip_source_zip.c.o" +}, +{ + "directory": "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib", + "command": "\"/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc\" @CMakeFiles/zip.dir/includes_C.rsp -fvisibility=hidden -o CMakeFiles/zip.dir/zip_source_zip_new.c.o -c \"/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_source_zip_new.c\"", + "file": "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_source_zip_new.c", + "output": "lib/CMakeFiles/zip.dir/zip_source_zip_new.c.o" +}, +{ + "directory": "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib", + "command": "\"/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc\" @CMakeFiles/zip.dir/includes_C.rsp -fvisibility=hidden -o CMakeFiles/zip.dir/zip_stat.c.o -c \"/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_stat.c\"", + "file": "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_stat.c", + "output": "lib/CMakeFiles/zip.dir/zip_stat.c.o" +}, +{ + "directory": "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib", + "command": "\"/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc\" @CMakeFiles/zip.dir/includes_C.rsp -fvisibility=hidden -o CMakeFiles/zip.dir/zip_stat_index.c.o -c \"/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_stat_index.c\"", + "file": "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_stat_index.c", + "output": "lib/CMakeFiles/zip.dir/zip_stat_index.c.o" +}, +{ + "directory": "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib", + "command": "\"/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc\" @CMakeFiles/zip.dir/includes_C.rsp -fvisibility=hidden -o CMakeFiles/zip.dir/zip_stat_init.c.o -c \"/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_stat_init.c\"", + "file": "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_stat_init.c", + "output": "lib/CMakeFiles/zip.dir/zip_stat_init.c.o" +}, +{ + "directory": "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib", + "command": "\"/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc\" @CMakeFiles/zip.dir/includes_C.rsp -fvisibility=hidden -o CMakeFiles/zip.dir/zip_strerror.c.o -c \"/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_strerror.c\"", + "file": "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_strerror.c", + "output": "lib/CMakeFiles/zip.dir/zip_strerror.c.o" +}, +{ + "directory": "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib", + "command": "\"/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc\" @CMakeFiles/zip.dir/includes_C.rsp -fvisibility=hidden -o CMakeFiles/zip.dir/zip_string.c.o -c \"/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_string.c\"", + "file": "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_string.c", + "output": "lib/CMakeFiles/zip.dir/zip_string.c.o" +}, +{ + "directory": "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib", + "command": "\"/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc\" @CMakeFiles/zip.dir/includes_C.rsp -fvisibility=hidden -o CMakeFiles/zip.dir/zip_unchange.c.o -c \"/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_unchange.c\"", + "file": "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_unchange.c", + "output": "lib/CMakeFiles/zip.dir/zip_unchange.c.o" +}, +{ + "directory": "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib", + "command": "\"/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc\" @CMakeFiles/zip.dir/includes_C.rsp -fvisibility=hidden -o CMakeFiles/zip.dir/zip_unchange_all.c.o -c \"/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_unchange_all.c\"", + "file": "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_unchange_all.c", + "output": "lib/CMakeFiles/zip.dir/zip_unchange_all.c.o" +}, +{ + "directory": "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib", + "command": "\"/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc\" @CMakeFiles/zip.dir/includes_C.rsp -fvisibility=hidden -o CMakeFiles/zip.dir/zip_unchange_archive.c.o -c \"/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_unchange_archive.c\"", + "file": "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_unchange_archive.c", + "output": "lib/CMakeFiles/zip.dir/zip_unchange_archive.c.o" +}, +{ + "directory": "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib", + "command": "\"/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc\" @CMakeFiles/zip.dir/includes_C.rsp -fvisibility=hidden -o CMakeFiles/zip.dir/zip_unchange_data.c.o -c \"/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_unchange_data.c\"", + "file": "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_unchange_data.c", + "output": "lib/CMakeFiles/zip.dir/zip_unchange_data.c.o" +}, +{ + "directory": "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib", + "command": "\"/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc\" @CMakeFiles/zip.dir/includes_C.rsp -fvisibility=hidden -o CMakeFiles/zip.dir/zip_utf-8.c.o -c \"/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_utf-8.c\"", + "file": "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_utf-8.c", + "output": "lib/CMakeFiles/zip.dir/zip_utf-8.c.o" +}, +{ + "directory": "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib", + "command": "\"/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc\" @CMakeFiles/zip.dir/includes_C.rsp -fvisibility=hidden -o CMakeFiles/zip.dir/zip_err_str.c.o -c \"/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib/zip_err_str.c\"", + "file": "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib/zip_err_str.c", + "output": "lib/CMakeFiles/zip.dir/zip_err_str.c.o" +}, +{ + "directory": "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib", + "command": "\"/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc\" @CMakeFiles/zip.dir/includes_C.rsp -fvisibility=hidden -o CMakeFiles/zip.dir/zip_source_file_stdio_named.c.o -c \"/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_source_file_stdio_named.c\"", + "file": "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_source_file_stdio_named.c", + "output": "lib/CMakeFiles/zip.dir/zip_source_file_stdio_named.c.o" +}, +{ + "directory": "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib", + "command": "\"/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc\" @CMakeFiles/zip.dir/includes_C.rsp -fvisibility=hidden -o CMakeFiles/zip.dir/zip_random_unix.c.o -c \"/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_random_unix.c\"", + "file": "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_random_unix.c", + "output": "lib/CMakeFiles/zip.dir/zip_random_unix.c.o" +}, +{ + "directory": "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/src", + "command": "\"/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc\" @CMakeFiles/zipcmp.dir/includes_C.rsp -o CMakeFiles/zipcmp.dir/zipcmp.c.o -c \"/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/src/zipcmp.c\"", + "file": "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/src/zipcmp.c", + "output": "src/CMakeFiles/zipcmp.dir/zipcmp.c.o" +}, +{ + "directory": "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/src", + "command": "\"/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc\" @CMakeFiles/zipcmp.dir/includes_C.rsp -o CMakeFiles/zipcmp.dir/diff_output.c.o -c \"/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/src/diff_output.c\"", + "file": "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/src/diff_output.c", + "output": "src/CMakeFiles/zipcmp.dir/diff_output.c.o" +}, +{ + "directory": "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/src", + "command": "\"/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc\" @CMakeFiles/zipmerge.dir/includes_C.rsp -o CMakeFiles/zipmerge.dir/zipmerge.c.o -c \"/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/src/zipmerge.c\"", + "file": "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/src/zipmerge.c", + "output": "src/CMakeFiles/zipmerge.dir/zipmerge.c.o" +}, +{ + "directory": "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/src", + "command": "\"/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc\" @CMakeFiles/ziptool.dir/includes_C.rsp -o CMakeFiles/ziptool.dir/ziptool.c.o -c \"/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/src/ziptool.c\"", + "file": "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/src/ziptool.c", + "output": "src/CMakeFiles/ziptool.dir/ziptool.c.o" +}, +{ + "directory": "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/ossfuzz", + "command": "\"/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc\" @CMakeFiles/zip_read_file_fuzzer.dir/includes_C.rsp -o CMakeFiles/zip_read_file_fuzzer.dir/zip_read_file_fuzzer.c.o -c \"/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/ossfuzz/zip_read_file_fuzzer.c\"", + "file": "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/ossfuzz/zip_read_file_fuzzer.c", + "output": "ossfuzz/CMakeFiles/zip_read_file_fuzzer.dir/zip_read_file_fuzzer.c.o" +}, +{ + "directory": "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/ossfuzz", + "command": "\"/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc\" @CMakeFiles/zip_read_file_fuzzer.dir/includes_C.rsp -o CMakeFiles/zip_read_file_fuzzer.dir/fuzz_main.c.o -c \"/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/ossfuzz/fuzz_main.c\"", + "file": "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/ossfuzz/fuzz_main.c", + "output": "ossfuzz/CMakeFiles/zip_read_file_fuzzer.dir/fuzz_main.c.o" +}, +{ + "directory": "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/ossfuzz", + "command": "\"/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc\" @CMakeFiles/zip_read_fuzzer.dir/includes_C.rsp -o CMakeFiles/zip_read_fuzzer.dir/zip_read_fuzzer.c.o -c \"/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/ossfuzz/zip_read_fuzzer.c\"", + "file": "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/ossfuzz/zip_read_fuzzer.c", + "output": "ossfuzz/CMakeFiles/zip_read_fuzzer.dir/zip_read_fuzzer.c.o" +}, +{ + "directory": "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/ossfuzz", + "command": "\"/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc\" @CMakeFiles/zip_read_fuzzer.dir/includes_C.rsp -o CMakeFiles/zip_read_fuzzer.dir/fuzz_main.c.o -c \"/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/ossfuzz/fuzz_main.c\"", + "file": "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/ossfuzz/fuzz_main.c", + "output": "ossfuzz/CMakeFiles/zip_read_fuzzer.dir/fuzz_main.c.o" +}, +{ + "directory": "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/ossfuzz", + "command": "\"/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc\" @CMakeFiles/zip_write_encrypt_aes256_file_fuzzer.dir/includes_C.rsp -o CMakeFiles/zip_write_encrypt_aes256_file_fuzzer.dir/zip_write_encrypt_aes256_file_fuzzer.c.o -c \"/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/ossfuzz/zip_write_encrypt_aes256_file_fuzzer.c\"", + "file": "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/ossfuzz/zip_write_encrypt_aes256_file_fuzzer.c", + "output": "ossfuzz/CMakeFiles/zip_write_encrypt_aes256_file_fuzzer.dir/zip_write_encrypt_aes256_file_fuzzer.c.o" +}, +{ + "directory": "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/ossfuzz", + "command": "\"/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc\" @CMakeFiles/zip_write_encrypt_aes256_file_fuzzer.dir/includes_C.rsp -o CMakeFiles/zip_write_encrypt_aes256_file_fuzzer.dir/fuzz_main.c.o -c \"/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/ossfuzz/fuzz_main.c\"", + "file": "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/ossfuzz/fuzz_main.c", + "output": "ossfuzz/CMakeFiles/zip_write_encrypt_aes256_file_fuzzer.dir/fuzz_main.c.o" +}, +{ + "directory": "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/ossfuzz", + "command": "\"/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc\" @CMakeFiles/zip_write_encrypt_pkware_file_fuzzer.dir/includes_C.rsp -o CMakeFiles/zip_write_encrypt_pkware_file_fuzzer.dir/zip_write_encrypt_pkware_file_fuzzer.c.o -c \"/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/ossfuzz/zip_write_encrypt_pkware_file_fuzzer.c\"", + "file": "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/ossfuzz/zip_write_encrypt_pkware_file_fuzzer.c", + "output": "ossfuzz/CMakeFiles/zip_write_encrypt_pkware_file_fuzzer.dir/zip_write_encrypt_pkware_file_fuzzer.c.o" +}, +{ + "directory": "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/ossfuzz", + "command": "\"/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc\" @CMakeFiles/zip_write_encrypt_pkware_file_fuzzer.dir/includes_C.rsp -o CMakeFiles/zip_write_encrypt_pkware_file_fuzzer.dir/fuzz_main.c.o -c \"/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/ossfuzz/fuzz_main.c\"", + "file": "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/ossfuzz/fuzz_main.c", + "output": "ossfuzz/CMakeFiles/zip_write_encrypt_pkware_file_fuzzer.dir/fuzz_main.c.o" +}, +{ + "directory": "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/examples", + "command": "\"/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc\" @CMakeFiles/add-compressed-data.dir/includes_C.rsp -o CMakeFiles/add-compressed-data.dir/add-compressed-data.c.o -c \"/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/examples/add-compressed-data.c\"", + "file": "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/examples/add-compressed-data.c", + "output": "examples/CMakeFiles/add-compressed-data.dir/add-compressed-data.c.o" +}, +{ + "directory": "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/examples", + "command": "\"/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc\" @CMakeFiles/autoclose-archive.dir/includes_C.rsp -o CMakeFiles/autoclose-archive.dir/autoclose-archive.c.o -c \"/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/examples/autoclose-archive.c\"", + "file": "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/examples/autoclose-archive.c", + "output": "examples/CMakeFiles/autoclose-archive.dir/autoclose-archive.c.o" +}, +{ + "directory": "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/examples", + "command": "\"/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc\" @CMakeFiles/in-memory.dir/includes_C.rsp -o CMakeFiles/in-memory.dir/in-memory.c.o -c \"/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/examples/in-memory.c\"", + "file": "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/examples/in-memory.c", + "output": "examples/CMakeFiles/in-memory.dir/in-memory.c.o" +} +] \ No newline at end of file diff --git a/thirdparty/libzip-1.11.3/build-emcmake/config.h b/thirdparty/libzip-1.11.3/build-emcmake/config.h new file mode 100644 index 0000000..2180487 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/config.h @@ -0,0 +1,75 @@ +#ifndef HAD_CONFIG_H +#define HAD_CONFIG_H +#ifndef _HAD_ZIPCONF_H +#include "zipconf.h" +#endif +/* BEGIN DEFINES */ +#define ENABLE_FDOPEN +/* #undef HAVE___PROGNAME */ +/* #undef HAVE__CLOSE */ +/* #undef HAVE__DUP */ +/* #undef HAVE__FDOPEN */ +/* #undef HAVE__FILENO */ +/* #undef HAVE__FSEEKI64 */ +/* #undef HAVE__FSTAT64 */ +/* #undef HAVE__SETMODE */ +/* #undef HAVE__SNPRINTF */ +/* #undef HAVE__SNPRINTF_S */ +/* #undef HAVE__SNWPRINTF_S */ +/* #undef HAVE__STAT64 */ +/* #undef HAVE__STRDUP */ +/* #undef HAVE__STRICMP */ +/* #undef HAVE__STRTOI64 */ +/* #undef HAVE__STRTOUI64 */ +/* #undef HAVE__UNLINK */ +/* #undef HAVE_ARC4RANDOM */ +/* #undef HAVE_CLONEFILE */ +/* #undef HAVE_COMMONCRYPTO */ +/* #undef HAVE_CRYPTO */ +/* #undef HAVE_FICLONERANGE */ +#define HAVE_FILENO +#define HAVE_FCHMOD +#define HAVE_FSEEKO +#define HAVE_FTELLO +/* #undef HAVE_GETPROGNAME */ +/* #undef HAVE_GETSECURITYINFO */ +/* #undef HAVE_GNUTLS */ +/* #undef HAVE_LIBBZ2 */ +/* #undef HAVE_LIBLZMA */ +/* #undef HAVE_LIBZSTD */ +#define HAVE_LOCALTIME_R +/* #undef HAVE_LOCALTIME_S */ +/* #undef HAVE_MEMCPY_S */ +/* #undef HAVE_MBEDTLS */ +/* #undef HAVE_MKSTEMP */ +/* #undef HAVE_OPENSSL */ +/* #undef HAVE_SETMODE */ +#define HAVE_SNPRINTF +/* #undef HAVE_SNPRINTF_S */ +#define HAVE_STRCASECMP +#define HAVE_STRDUP +/* #undef HAVE_STRERROR_S */ +/* #undef HAVE_STRERRORLEN_S */ +/* #undef HAVE_STRICMP */ +/* #undef HAVE_STRNCPY_S */ +#define HAVE_STRTOLL +#define HAVE_STRTOULL +/* #undef HAVE_STRUCT_TM_TM_ZONE */ +#define HAVE_STDBOOL_H +#define HAVE_STRINGS_H +#define HAVE_UNISTD_H +/* #undef HAVE_WINDOWS_CRYPTO */ +#define SIZEOF_OFF_T 8 +#define SIZEOF_SIZE_T 4 +/* #undef HAVE_DIRENT_H */ +/* #undef HAVE_FTS_H */ +/* #undef HAVE_NDIR_H */ +/* #undef HAVE_SYS_DIR_H */ +/* #undef HAVE_SYS_NDIR_H */ +/* #undef WORDS_BIGENDIAN */ +#define HAVE_SHARED +/* END DEFINES */ +#define PACKAGE "libzip" +#define VERSION "1.11.3" + +#endif /* HAD_CONFIG_H */ diff --git a/thirdparty/libzip-1.11.3/build-emcmake/examples/CMakeFiles/CMakeDirectoryInformation.cmake b/thirdparty/libzip-1.11.3/build-emcmake/examples/CMakeFiles/CMakeDirectoryInformation.cmake new file mode 100644 index 0000000..ea55061 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/examples/CMakeFiles/CMakeDirectoryInformation.cmake @@ -0,0 +1,16 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.28 + +# Relative path conversion top directories. +set(CMAKE_RELATIVE_PATH_TOP_SOURCE "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3") +set(CMAKE_RELATIVE_PATH_TOP_BINARY "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake") + +# Force unix paths in dependencies. +set(CMAKE_FORCE_UNIX_PATHS 1) + + +# The C and CXX include file regular expressions for this directory. +set(CMAKE_C_INCLUDE_REGEX_SCAN "^.*$") +set(CMAKE_C_INCLUDE_REGEX_COMPLAIN "^$") +set(CMAKE_CXX_INCLUDE_REGEX_SCAN ${CMAKE_C_INCLUDE_REGEX_SCAN}) +set(CMAKE_CXX_INCLUDE_REGEX_COMPLAIN ${CMAKE_C_INCLUDE_REGEX_COMPLAIN}) diff --git a/thirdparty/libzip-1.11.3/build-emcmake/examples/CMakeFiles/add-compressed-data.dir/DependInfo.cmake b/thirdparty/libzip-1.11.3/build-emcmake/examples/CMakeFiles/add-compressed-data.dir/DependInfo.cmake new file mode 100644 index 0000000..f05b574 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/examples/CMakeFiles/add-compressed-data.dir/DependInfo.cmake @@ -0,0 +1,23 @@ + +# Consider dependencies only in project. +set(CMAKE_DEPENDS_IN_PROJECT_ONLY OFF) + +# The set of languages for which implicit dependencies are needed: +set(CMAKE_DEPENDS_LANGUAGES + ) + +# The set of dependency files which are needed: +set(CMAKE_DEPENDS_DEPENDENCY_FILES + "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/examples/add-compressed-data.c" "examples/CMakeFiles/add-compressed-data.dir/add-compressed-data.c.o" "gcc" "examples/CMakeFiles/add-compressed-data.dir/add-compressed-data.c.o.d" + ) + +# Targets to which this target links which contain Fortran sources. +set(CMAKE_Fortran_TARGET_LINKED_INFO_FILES + ) + +# Targets to which this target links which contain Fortran sources. +set(CMAKE_Fortran_TARGET_FORWARD_LINKED_INFO_FILES + ) + +# Fortran module output directory. +set(CMAKE_Fortran_TARGET_MODULE_DIR "") diff --git a/thirdparty/libzip-1.11.3/build-emcmake/examples/CMakeFiles/add-compressed-data.dir/add-compressed-data.c.o b/thirdparty/libzip-1.11.3/build-emcmake/examples/CMakeFiles/add-compressed-data.dir/add-compressed-data.c.o new file mode 100644 index 0000000000000000000000000000000000000000..6d6d885adbb2dbfa46f37588fb9a0f8dcd3423ae GIT binary patch literal 4318 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 CMakeFiles/add-compressed-data.dir/add-compressed-data.c.i + +examples/CMakeFiles/add-compressed-data.dir/add-compressed-data.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Compiling C source to assembly CMakeFiles/add-compressed-data.dir/add-compressed-data.c.s" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/examples" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/examples/add-compressed-data.c" -o CMakeFiles/add-compressed-data.dir/add-compressed-data.c.s + +# Object files for target add-compressed-data +add__compressed__data_OBJECTS = \ +"CMakeFiles/add-compressed-data.dir/add-compressed-data.c.o" + +# External object files for target add-compressed-data +add__compressed__data_EXTERNAL_OBJECTS = + +examples/add-compressed-data.js: examples/CMakeFiles/add-compressed-data.dir/add-compressed-data.c.o +examples/add-compressed-data.js: examples/CMakeFiles/add-compressed-data.dir/build.make +examples/add-compressed-data.js: lib/libzip.a +examples/add-compressed-data.js: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/zlib-1.3.1/install/lib/libz.a +examples/add-compressed-data.js: examples/CMakeFiles/add-compressed-data.dir/linkLibs.rsp +examples/add-compressed-data.js: examples/CMakeFiles/add-compressed-data.dir/objects1.rsp +examples/add-compressed-data.js: examples/CMakeFiles/add-compressed-data.dir/link.txt + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_2) "Linking C executable add-compressed-data.js" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/examples" && $(CMAKE_COMMAND) -E cmake_link_script CMakeFiles/add-compressed-data.dir/link.txt --verbose=$(VERBOSE) + +# Rule to build all files generated by this target. +examples/CMakeFiles/add-compressed-data.dir/build: examples/add-compressed-data.js +.PHONY : examples/CMakeFiles/add-compressed-data.dir/build + +examples/CMakeFiles/add-compressed-data.dir/clean: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/examples" && $(CMAKE_COMMAND) -P CMakeFiles/add-compressed-data.dir/cmake_clean.cmake +.PHONY : examples/CMakeFiles/add-compressed-data.dir/clean + +examples/CMakeFiles/add-compressed-data.dir/depend: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(CMAKE_COMMAND) -E cmake_depends "Unix Makefiles" "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3" "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/examples" "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/examples" "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/examples/CMakeFiles/add-compressed-data.dir/DependInfo.cmake" "--color=$(COLOR)" +.PHONY : examples/CMakeFiles/add-compressed-data.dir/depend + diff --git a/thirdparty/libzip-1.11.3/build-emcmake/examples/CMakeFiles/add-compressed-data.dir/cmake_clean.cmake b/thirdparty/libzip-1.11.3/build-emcmake/examples/CMakeFiles/add-compressed-data.dir/cmake_clean.cmake new file mode 100644 index 0000000..a5dcade --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/examples/CMakeFiles/add-compressed-data.dir/cmake_clean.cmake @@ -0,0 +1,11 @@ +file(REMOVE_RECURSE + "CMakeFiles/add-compressed-data.dir/add-compressed-data.c.o" + "CMakeFiles/add-compressed-data.dir/add-compressed-data.c.o.d" + "add-compressed-data.js" + "add-compressed-data.pdb" +) + +# Per-language clean rules from dependency scanning. +foreach(lang C) + include(CMakeFiles/add-compressed-data.dir/cmake_clean_${lang}.cmake OPTIONAL) +endforeach() diff --git a/thirdparty/libzip-1.11.3/build-emcmake/examples/CMakeFiles/add-compressed-data.dir/compiler_depend.make b/thirdparty/libzip-1.11.3/build-emcmake/examples/CMakeFiles/add-compressed-data.dir/compiler_depend.make new file mode 100644 index 0000000..9dbf38e --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/examples/CMakeFiles/add-compressed-data.dir/compiler_depend.make @@ -0,0 +1,2 @@ +# Empty compiler generated dependencies file for add-compressed-data. +# This may be replaced when dependencies are built. diff --git a/thirdparty/libzip-1.11.3/build-emcmake/examples/CMakeFiles/add-compressed-data.dir/compiler_depend.ts b/thirdparty/libzip-1.11.3/build-emcmake/examples/CMakeFiles/add-compressed-data.dir/compiler_depend.ts new file mode 100644 index 0000000..dcfb961 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/examples/CMakeFiles/add-compressed-data.dir/compiler_depend.ts @@ -0,0 +1,2 @@ +# CMAKE generated file: DO NOT EDIT! +# Timestamp file for compiler generated dependencies management for add-compressed-data. diff --git a/thirdparty/libzip-1.11.3/build-emcmake/examples/CMakeFiles/add-compressed-data.dir/depend.make b/thirdparty/libzip-1.11.3/build-emcmake/examples/CMakeFiles/add-compressed-data.dir/depend.make new file mode 100644 index 0000000..427a796 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/examples/CMakeFiles/add-compressed-data.dir/depend.make @@ -0,0 +1,2 @@ +# Empty dependencies file for add-compressed-data. +# This may be replaced when dependencies are built. diff --git a/thirdparty/libzip-1.11.3/build-emcmake/examples/CMakeFiles/add-compressed-data.dir/flags.make b/thirdparty/libzip-1.11.3/build-emcmake/examples/CMakeFiles/add-compressed-data.dir/flags.make new file mode 100644 index 0000000..a6d6e23 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/examples/CMakeFiles/add-compressed-data.dir/flags.make @@ -0,0 +1,10 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.28 + +# compile C with /home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc +C_DEFINES = + +C_INCLUDES = @CMakeFiles/add-compressed-data.dir/includes_C.rsp + +C_FLAGS = + diff --git a/thirdparty/libzip-1.11.3/build-emcmake/examples/CMakeFiles/add-compressed-data.dir/link.txt b/thirdparty/libzip-1.11.3/build-emcmake/examples/CMakeFiles/add-compressed-data.dir/link.txt new file mode 100644 index 0000000..7828bc2 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/examples/CMakeFiles/add-compressed-data.dir/link.txt @@ -0,0 +1 @@ +"/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" @CMakeFiles/add-compressed-data.dir/objects1.rsp -o add-compressed-data.js @CMakeFiles/add-compressed-data.dir/linkLibs.rsp diff --git a/thirdparty/libzip-1.11.3/build-emcmake/examples/CMakeFiles/add-compressed-data.dir/progress.make b/thirdparty/libzip-1.11.3/build-emcmake/examples/CMakeFiles/add-compressed-data.dir/progress.make new file mode 100644 index 0000000..6c287f1 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/examples/CMakeFiles/add-compressed-data.dir/progress.make @@ -0,0 +1,3 @@ +CMAKE_PROGRESS_1 = +CMAKE_PROGRESS_2 = + diff --git a/thirdparty/libzip-1.11.3/build-emcmake/examples/CMakeFiles/autoclose-archive.dir/DependInfo.cmake b/thirdparty/libzip-1.11.3/build-emcmake/examples/CMakeFiles/autoclose-archive.dir/DependInfo.cmake new file mode 100644 index 0000000..3005dc8 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/examples/CMakeFiles/autoclose-archive.dir/DependInfo.cmake @@ -0,0 +1,23 @@ + +# Consider dependencies only in project. +set(CMAKE_DEPENDS_IN_PROJECT_ONLY OFF) + +# The set of languages for which implicit dependencies are needed: +set(CMAKE_DEPENDS_LANGUAGES + ) + +# The set of dependency files which are needed: +set(CMAKE_DEPENDS_DEPENDENCY_FILES + "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/examples/autoclose-archive.c" "examples/CMakeFiles/autoclose-archive.dir/autoclose-archive.c.o" "gcc" "examples/CMakeFiles/autoclose-archive.dir/autoclose-archive.c.o.d" + ) + +# Targets to which this target links which contain Fortran sources. +set(CMAKE_Fortran_TARGET_LINKED_INFO_FILES + ) + +# Targets to which this target links which contain Fortran sources. +set(CMAKE_Fortran_TARGET_FORWARD_LINKED_INFO_FILES + ) + +# Fortran module output directory. +set(CMAKE_Fortran_TARGET_MODULE_DIR "") diff --git a/thirdparty/libzip-1.11.3/build-emcmake/examples/CMakeFiles/autoclose-archive.dir/autoclose-archive.c.o b/thirdparty/libzip-1.11.3/build-emcmake/examples/CMakeFiles/autoclose-archive.dir/autoclose-archive.c.o new file mode 100644 index 0000000000000000000000000000000000000000..d283bda191c5957c9054edee26cf075211e8eca3 GIT binary patch literal 4566 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 CMakeFiles/autoclose-archive.dir/autoclose-archive.c.i + +examples/CMakeFiles/autoclose-archive.dir/autoclose-archive.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Compiling C source to assembly CMakeFiles/autoclose-archive.dir/autoclose-archive.c.s" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/examples" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/examples/autoclose-archive.c" -o CMakeFiles/autoclose-archive.dir/autoclose-archive.c.s + +# Object files for target autoclose-archive +autoclose__archive_OBJECTS = \ +"CMakeFiles/autoclose-archive.dir/autoclose-archive.c.o" + +# External object files for target autoclose-archive +autoclose__archive_EXTERNAL_OBJECTS = + +examples/autoclose-archive.js: examples/CMakeFiles/autoclose-archive.dir/autoclose-archive.c.o +examples/autoclose-archive.js: examples/CMakeFiles/autoclose-archive.dir/build.make +examples/autoclose-archive.js: lib/libzip.a +examples/autoclose-archive.js: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/zlib-1.3.1/install/lib/libz.a +examples/autoclose-archive.js: examples/CMakeFiles/autoclose-archive.dir/linkLibs.rsp +examples/autoclose-archive.js: examples/CMakeFiles/autoclose-archive.dir/objects1.rsp +examples/autoclose-archive.js: examples/CMakeFiles/autoclose-archive.dir/link.txt + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_2) "Linking C executable autoclose-archive.js" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/examples" && $(CMAKE_COMMAND) -E cmake_link_script CMakeFiles/autoclose-archive.dir/link.txt --verbose=$(VERBOSE) + +# Rule to build all files generated by this target. +examples/CMakeFiles/autoclose-archive.dir/build: examples/autoclose-archive.js +.PHONY : examples/CMakeFiles/autoclose-archive.dir/build + +examples/CMakeFiles/autoclose-archive.dir/clean: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/examples" && $(CMAKE_COMMAND) -P CMakeFiles/autoclose-archive.dir/cmake_clean.cmake +.PHONY : examples/CMakeFiles/autoclose-archive.dir/clean + +examples/CMakeFiles/autoclose-archive.dir/depend: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(CMAKE_COMMAND) -E cmake_depends "Unix Makefiles" "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3" "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/examples" "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/examples" "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/examples/CMakeFiles/autoclose-archive.dir/DependInfo.cmake" "--color=$(COLOR)" +.PHONY : examples/CMakeFiles/autoclose-archive.dir/depend + diff --git a/thirdparty/libzip-1.11.3/build-emcmake/examples/CMakeFiles/autoclose-archive.dir/cmake_clean.cmake b/thirdparty/libzip-1.11.3/build-emcmake/examples/CMakeFiles/autoclose-archive.dir/cmake_clean.cmake new file mode 100644 index 0000000..e4330c3 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/examples/CMakeFiles/autoclose-archive.dir/cmake_clean.cmake @@ -0,0 +1,11 @@ +file(REMOVE_RECURSE + "CMakeFiles/autoclose-archive.dir/autoclose-archive.c.o" + "CMakeFiles/autoclose-archive.dir/autoclose-archive.c.o.d" + "autoclose-archive.js" + "autoclose-archive.pdb" +) + +# Per-language clean rules from dependency scanning. +foreach(lang C) + include(CMakeFiles/autoclose-archive.dir/cmake_clean_${lang}.cmake OPTIONAL) +endforeach() diff --git a/thirdparty/libzip-1.11.3/build-emcmake/examples/CMakeFiles/autoclose-archive.dir/compiler_depend.make b/thirdparty/libzip-1.11.3/build-emcmake/examples/CMakeFiles/autoclose-archive.dir/compiler_depend.make new file mode 100644 index 0000000..f18e269 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/examples/CMakeFiles/autoclose-archive.dir/compiler_depend.make @@ -0,0 +1,2 @@ +# Empty compiler generated dependencies file for autoclose-archive. +# This may be replaced when dependencies are built. diff --git a/thirdparty/libzip-1.11.3/build-emcmake/examples/CMakeFiles/autoclose-archive.dir/compiler_depend.ts b/thirdparty/libzip-1.11.3/build-emcmake/examples/CMakeFiles/autoclose-archive.dir/compiler_depend.ts new file mode 100644 index 0000000..e1976b1 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/examples/CMakeFiles/autoclose-archive.dir/compiler_depend.ts @@ -0,0 +1,2 @@ +# CMAKE generated file: DO NOT EDIT! +# Timestamp file for compiler generated dependencies management for autoclose-archive. diff --git a/thirdparty/libzip-1.11.3/build-emcmake/examples/CMakeFiles/autoclose-archive.dir/depend.make b/thirdparty/libzip-1.11.3/build-emcmake/examples/CMakeFiles/autoclose-archive.dir/depend.make new file mode 100644 index 0000000..59d6052 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/examples/CMakeFiles/autoclose-archive.dir/depend.make @@ -0,0 +1,2 @@ +# Empty dependencies file for autoclose-archive. +# This may be replaced when dependencies are built. diff --git a/thirdparty/libzip-1.11.3/build-emcmake/examples/CMakeFiles/autoclose-archive.dir/flags.make b/thirdparty/libzip-1.11.3/build-emcmake/examples/CMakeFiles/autoclose-archive.dir/flags.make new file mode 100644 index 0000000..c0f26ae --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/examples/CMakeFiles/autoclose-archive.dir/flags.make @@ -0,0 +1,10 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.28 + +# compile C with /home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc +C_DEFINES = + +C_INCLUDES = @CMakeFiles/autoclose-archive.dir/includes_C.rsp + +C_FLAGS = + diff --git a/thirdparty/libzip-1.11.3/build-emcmake/examples/CMakeFiles/autoclose-archive.dir/link.txt b/thirdparty/libzip-1.11.3/build-emcmake/examples/CMakeFiles/autoclose-archive.dir/link.txt new file mode 100644 index 0000000..5f4f5b9 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/examples/CMakeFiles/autoclose-archive.dir/link.txt @@ -0,0 +1 @@ +"/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" @CMakeFiles/autoclose-archive.dir/objects1.rsp -o autoclose-archive.js @CMakeFiles/autoclose-archive.dir/linkLibs.rsp diff --git a/thirdparty/libzip-1.11.3/build-emcmake/examples/CMakeFiles/autoclose-archive.dir/progress.make b/thirdparty/libzip-1.11.3/build-emcmake/examples/CMakeFiles/autoclose-archive.dir/progress.make new file mode 100644 index 0000000..6c287f1 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/examples/CMakeFiles/autoclose-archive.dir/progress.make @@ -0,0 +1,3 @@ +CMAKE_PROGRESS_1 = +CMAKE_PROGRESS_2 = + diff --git a/thirdparty/libzip-1.11.3/build-emcmake/examples/CMakeFiles/in-memory.dir/DependInfo.cmake b/thirdparty/libzip-1.11.3/build-emcmake/examples/CMakeFiles/in-memory.dir/DependInfo.cmake new file mode 100644 index 0000000..1dc43a1 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/examples/CMakeFiles/in-memory.dir/DependInfo.cmake @@ -0,0 +1,23 @@ + +# Consider dependencies only in project. +set(CMAKE_DEPENDS_IN_PROJECT_ONLY OFF) + +# The set of languages for which implicit dependencies are needed: +set(CMAKE_DEPENDS_LANGUAGES + ) + +# The set of dependency files which are needed: +set(CMAKE_DEPENDS_DEPENDENCY_FILES + "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/examples/in-memory.c" "examples/CMakeFiles/in-memory.dir/in-memory.c.o" "gcc" "examples/CMakeFiles/in-memory.dir/in-memory.c.o.d" + ) + +# Targets to which this target links which contain Fortran sources. +set(CMAKE_Fortran_TARGET_LINKED_INFO_FILES + ) + +# Targets to which this target links which contain Fortran sources. +set(CMAKE_Fortran_TARGET_FORWARD_LINKED_INFO_FILES + ) + +# Fortran module output directory. +set(CMAKE_Fortran_TARGET_MODULE_DIR "") diff --git a/thirdparty/libzip-1.11.3/build-emcmake/examples/CMakeFiles/in-memory.dir/build.make b/thirdparty/libzip-1.11.3/build-emcmake/examples/CMakeFiles/in-memory.dir/build.make new file mode 100644 index 0000000..10ef4ca --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/examples/CMakeFiles/in-memory.dir/build.make @@ -0,0 +1,115 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.28 + +# Delete rule output on recipe failure. +.DELETE_ON_ERROR: + +#============================================================================= +# Special targets provided by cmake. + +# Disable implicit rules so canonical targets will work. +.SUFFIXES: + +# Disable VCS-based implicit rules. +% : %,v + +# Disable VCS-based implicit rules. +% : RCS/% + +# Disable VCS-based implicit rules. +% : RCS/%,v + +# Disable VCS-based implicit rules. +% : SCCS/s.% + +# Disable VCS-based implicit rules. +% : s.% + +.SUFFIXES: .hpux_make_needs_suffix_list + +# Command-line flag to silence nested $(MAKE). +$(VERBOSE)MAKESILENT = -s + +#Suppress display of executed commands. +$(VERBOSE).SILENT: + +# A target that is always out of date. +cmake_force: +.PHONY : cmake_force + +#============================================================================= +# Set environment variables for the build. + +# The shell in which to execute make rules. +SHELL = /bin/sh + +# The CMake executable. +CMAKE_COMMAND = /usr/bin/cmake + +# The command to remove a file. +RM = /usr/bin/cmake -E rm -f + +# Escaping for special characters. +EQUALS = = + +# The top-level source directory on which CMake was run. +CMAKE_SOURCE_DIR = "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3" + +# The top-level build directory on which CMake was run. +CMAKE_BINARY_DIR = "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" + +# Include any dependencies generated for this target. +include examples/CMakeFiles/in-memory.dir/depend.make +# Include any dependencies generated by the compiler for this target. +include examples/CMakeFiles/in-memory.dir/compiler_depend.make + +# Include the progress variables for this target. +include examples/CMakeFiles/in-memory.dir/progress.make + +# Include the compile flags for this target's objects. +include examples/CMakeFiles/in-memory.dir/flags.make + +examples/CMakeFiles/in-memory.dir/in-memory.c.o: examples/CMakeFiles/in-memory.dir/flags.make +examples/CMakeFiles/in-memory.dir/in-memory.c.o: examples/CMakeFiles/in-memory.dir/includes_C.rsp +examples/CMakeFiles/in-memory.dir/in-memory.c.o: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/examples/in-memory.c +examples/CMakeFiles/in-memory.dir/in-memory.c.o: examples/CMakeFiles/in-memory.dir/compiler_depend.ts + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_1) "Building C object examples/CMakeFiles/in-memory.dir/in-memory.c.o" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/examples" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -MD -MT examples/CMakeFiles/in-memory.dir/in-memory.c.o -MF CMakeFiles/in-memory.dir/in-memory.c.o.d -o CMakeFiles/in-memory.dir/in-memory.c.o -c "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/examples/in-memory.c" + +examples/CMakeFiles/in-memory.dir/in-memory.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Preprocessing C source to CMakeFiles/in-memory.dir/in-memory.c.i" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/examples" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/examples/in-memory.c" > CMakeFiles/in-memory.dir/in-memory.c.i + +examples/CMakeFiles/in-memory.dir/in-memory.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Compiling C source to assembly CMakeFiles/in-memory.dir/in-memory.c.s" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/examples" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/examples/in-memory.c" -o CMakeFiles/in-memory.dir/in-memory.c.s + +# Object files for target in-memory +in__memory_OBJECTS = \ +"CMakeFiles/in-memory.dir/in-memory.c.o" + +# External object files for target in-memory +in__memory_EXTERNAL_OBJECTS = + +examples/in-memory.js: examples/CMakeFiles/in-memory.dir/in-memory.c.o +examples/in-memory.js: examples/CMakeFiles/in-memory.dir/build.make +examples/in-memory.js: lib/libzip.a +examples/in-memory.js: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/zlib-1.3.1/install/lib/libz.a +examples/in-memory.js: examples/CMakeFiles/in-memory.dir/linkLibs.rsp +examples/in-memory.js: examples/CMakeFiles/in-memory.dir/objects1.rsp +examples/in-memory.js: examples/CMakeFiles/in-memory.dir/link.txt + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_2) "Linking C executable in-memory.js" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/examples" && $(CMAKE_COMMAND) -E cmake_link_script CMakeFiles/in-memory.dir/link.txt --verbose=$(VERBOSE) + +# Rule to build all files generated by this target. +examples/CMakeFiles/in-memory.dir/build: examples/in-memory.js +.PHONY : examples/CMakeFiles/in-memory.dir/build + +examples/CMakeFiles/in-memory.dir/clean: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/examples" && $(CMAKE_COMMAND) -P CMakeFiles/in-memory.dir/cmake_clean.cmake +.PHONY : examples/CMakeFiles/in-memory.dir/clean + +examples/CMakeFiles/in-memory.dir/depend: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(CMAKE_COMMAND) -E cmake_depends "Unix Makefiles" "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3" "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/examples" "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/examples" "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/examples/CMakeFiles/in-memory.dir/DependInfo.cmake" "--color=$(COLOR)" +.PHONY : examples/CMakeFiles/in-memory.dir/depend + diff --git a/thirdparty/libzip-1.11.3/build-emcmake/examples/CMakeFiles/in-memory.dir/cmake_clean.cmake b/thirdparty/libzip-1.11.3/build-emcmake/examples/CMakeFiles/in-memory.dir/cmake_clean.cmake new file mode 100644 index 0000000..0ddc3ca --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/examples/CMakeFiles/in-memory.dir/cmake_clean.cmake @@ -0,0 +1,11 @@ +file(REMOVE_RECURSE + "CMakeFiles/in-memory.dir/in-memory.c.o" + "CMakeFiles/in-memory.dir/in-memory.c.o.d" + "in-memory.js" + "in-memory.pdb" +) + +# Per-language clean rules from dependency scanning. +foreach(lang C) + include(CMakeFiles/in-memory.dir/cmake_clean_${lang}.cmake OPTIONAL) +endforeach() diff --git a/thirdparty/libzip-1.11.3/build-emcmake/examples/CMakeFiles/in-memory.dir/compiler_depend.make b/thirdparty/libzip-1.11.3/build-emcmake/examples/CMakeFiles/in-memory.dir/compiler_depend.make new file mode 100644 index 0000000..68570ef --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/examples/CMakeFiles/in-memory.dir/compiler_depend.make @@ -0,0 +1,2 @@ +# Empty compiler generated dependencies file for in-memory. +# This may be replaced when dependencies are built. diff --git a/thirdparty/libzip-1.11.3/build-emcmake/examples/CMakeFiles/in-memory.dir/compiler_depend.ts b/thirdparty/libzip-1.11.3/build-emcmake/examples/CMakeFiles/in-memory.dir/compiler_depend.ts new file mode 100644 index 0000000..0e5790e --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/examples/CMakeFiles/in-memory.dir/compiler_depend.ts @@ -0,0 +1,2 @@ +# CMAKE generated file: DO NOT EDIT! +# Timestamp file for compiler generated dependencies management for in-memory. diff --git a/thirdparty/libzip-1.11.3/build-emcmake/examples/CMakeFiles/in-memory.dir/depend.make b/thirdparty/libzip-1.11.3/build-emcmake/examples/CMakeFiles/in-memory.dir/depend.make new file mode 100644 index 0000000..a9dbac9 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/examples/CMakeFiles/in-memory.dir/depend.make @@ -0,0 +1,2 @@ +# Empty dependencies file for in-memory. +# This may be replaced when dependencies are built. diff --git a/thirdparty/libzip-1.11.3/build-emcmake/examples/CMakeFiles/in-memory.dir/flags.make b/thirdparty/libzip-1.11.3/build-emcmake/examples/CMakeFiles/in-memory.dir/flags.make new file mode 100644 index 0000000..7528ea1 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/examples/CMakeFiles/in-memory.dir/flags.make @@ -0,0 +1,10 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.28 + +# compile C with /home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc +C_DEFINES = + +C_INCLUDES = @CMakeFiles/in-memory.dir/includes_C.rsp + +C_FLAGS = + diff --git a/thirdparty/libzip-1.11.3/build-emcmake/examples/CMakeFiles/in-memory.dir/in-memory.c.o b/thirdparty/libzip-1.11.3/build-emcmake/examples/CMakeFiles/in-memory.dir/in-memory.c.o new file mode 100644 index 0000000000000000000000000000000000000000..2537fa7d8911f1da734a25fd2fd09297634bb654 GIT binary patch literal 6533 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 HTju`(SBL|S literal 0 HcmV?d00001 diff --git a/thirdparty/libzip-1.11.3/build-emcmake/examples/CMakeFiles/in-memory.dir/in-memory.c.o.d b/thirdparty/libzip-1.11.3/build-emcmake/examples/CMakeFiles/in-memory.dir/in-memory.c.o.d new file mode 100644 index 0000000..840c1cd --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/examples/CMakeFiles/in-memory.dir/in-memory.c.o.d @@ -0,0 +1,38 @@ +examples/CMakeFiles/in-memory.dir/in-memory.c.o: \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/examples/in-memory.c \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/errno.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/features.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/errno.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/wasi/api.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stddef.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stddef.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_header_macro.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_ptrdiff_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_size_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_wchar_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_null.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_max_align_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_offsetof.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stdint.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdint.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/alltypes.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/stdint.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdio.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/stdlib.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdlib.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/alloca.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/string.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/string.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/strings.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/sys/stat.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/sys/stat.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/stat.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/zipconf.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/inttypes.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/inttypes.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/sys/types.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/endian.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/sys/select.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/time.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/time.h diff --git a/thirdparty/libzip-1.11.3/build-emcmake/examples/CMakeFiles/in-memory.dir/link.txt b/thirdparty/libzip-1.11.3/build-emcmake/examples/CMakeFiles/in-memory.dir/link.txt new file mode 100644 index 0000000..f970bf3 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/examples/CMakeFiles/in-memory.dir/link.txt @@ -0,0 +1 @@ +"/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" @CMakeFiles/in-memory.dir/objects1.rsp -o in-memory.js @CMakeFiles/in-memory.dir/linkLibs.rsp diff --git a/thirdparty/libzip-1.11.3/build-emcmake/examples/CMakeFiles/in-memory.dir/progress.make b/thirdparty/libzip-1.11.3/build-emcmake/examples/CMakeFiles/in-memory.dir/progress.make new file mode 100644 index 0000000..b8573d0 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/examples/CMakeFiles/in-memory.dir/progress.make @@ -0,0 +1,3 @@ +CMAKE_PROGRESS_1 = 1 +CMAKE_PROGRESS_2 = + diff --git a/thirdparty/libzip-1.11.3/build-emcmake/examples/CMakeFiles/progress.marks b/thirdparty/libzip-1.11.3/build-emcmake/examples/CMakeFiles/progress.marks new file mode 100644 index 0000000..6f4247a --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/examples/CMakeFiles/progress.marks @@ -0,0 +1 @@ +26 diff --git a/thirdparty/libzip-1.11.3/build-emcmake/examples/CTestTestfile.cmake b/thirdparty/libzip-1.11.3/build-emcmake/examples/CTestTestfile.cmake new file mode 100644 index 0000000..ba8055e --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/examples/CTestTestfile.cmake @@ -0,0 +1,6 @@ +# CMake generated Testfile for +# Source directory: /home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/examples +# Build directory: /home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/examples +# +# This file includes the relevant testing commands required for +# testing this directory and lists subdirectories to be tested as well. diff --git a/thirdparty/libzip-1.11.3/build-emcmake/examples/Makefile b/thirdparty/libzip-1.11.3/build-emcmake/examples/Makefile new file mode 100644 index 0000000..644623b --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/examples/Makefile @@ -0,0 +1,326 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.28 + +# Default target executed when no arguments are given to make. +default_target: all +.PHONY : default_target + +# Allow only one "make -f Makefile2" at a time, but pass parallelism. +.NOTPARALLEL: + +#============================================================================= +# Special targets provided by cmake. + +# Disable implicit rules so canonical targets will work. +.SUFFIXES: + +# Disable VCS-based implicit rules. +% : %,v + +# Disable VCS-based implicit rules. +% : RCS/% + +# Disable VCS-based implicit rules. +% : RCS/%,v + +# Disable VCS-based implicit rules. +% : SCCS/s.% + +# Disable VCS-based implicit rules. +% : s.% + +.SUFFIXES: .hpux_make_needs_suffix_list + +# Command-line flag to silence nested $(MAKE). +$(VERBOSE)MAKESILENT = -s + +#Suppress display of executed commands. +$(VERBOSE).SILENT: + +# A target that is always out of date. +cmake_force: +.PHONY : cmake_force + +#============================================================================= +# Set environment variables for the build. + +# The shell in which to execute make rules. +SHELL = /bin/sh + +# The CMake executable. +CMAKE_COMMAND = /usr/bin/cmake + +# The command to remove a file. +RM = /usr/bin/cmake -E rm -f + +# Escaping for special characters. +EQUALS = = + +# The top-level source directory on which CMake was run. +CMAKE_SOURCE_DIR = "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3" + +# The top-level build directory on which CMake was run. +CMAKE_BINARY_DIR = "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" + +#============================================================================= +# Targets provided globally by CMake. + +# Special rule for the target test +test: + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --cyan "Running tests..." + /usr/bin/ctest --force-new-ctest-process $(ARGS) +.PHONY : test + +# Special rule for the target test +test/fast: test +.PHONY : test/fast + +# Special rule for the target edit_cache +edit_cache: + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --cyan "No interactive CMake dialog available..." + /usr/bin/cmake -E echo No\ interactive\ CMake\ dialog\ available. +.PHONY : edit_cache + +# Special rule for the target edit_cache +edit_cache/fast: edit_cache +.PHONY : edit_cache/fast + +# Special rule for the target rebuild_cache +rebuild_cache: + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --cyan "Running CMake to regenerate build system..." + /usr/bin/cmake --regenerate-during-build -S$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) +.PHONY : rebuild_cache + +# Special rule for the target rebuild_cache +rebuild_cache/fast: rebuild_cache +.PHONY : rebuild_cache/fast + +# Special rule for the target list_install_components +list_install_components: + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --cyan "Available install components are: \"Unspecified\"" +.PHONY : list_install_components + +# Special rule for the target list_install_components +list_install_components/fast: list_install_components +.PHONY : list_install_components/fast + +# Special rule for the target install +install: preinstall + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --cyan "Install the project..." + /usr/bin/cmake -P cmake_install.cmake +.PHONY : install + +# Special rule for the target install +install/fast: preinstall/fast + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --cyan "Install the project..." + /usr/bin/cmake -P cmake_install.cmake +.PHONY : install/fast + +# Special rule for the target install/local +install/local: preinstall + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --cyan "Installing only the local directory..." + /usr/bin/cmake -DCMAKE_INSTALL_LOCAL_ONLY=1 -P cmake_install.cmake +.PHONY : install/local + +# Special rule for the target install/local +install/local/fast: preinstall/fast + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --cyan "Installing only the local directory..." + /usr/bin/cmake -DCMAKE_INSTALL_LOCAL_ONLY=1 -P cmake_install.cmake +.PHONY : install/local/fast + +# Special rule for the target install/strip +install/strip: preinstall + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --cyan "Installing the project stripped..." + /usr/bin/cmake -DCMAKE_INSTALL_DO_STRIP=1 -P cmake_install.cmake +.PHONY : install/strip + +# Special rule for the target install/strip +install/strip/fast: preinstall/fast + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --cyan "Installing the project stripped..." + /usr/bin/cmake -DCMAKE_INSTALL_DO_STRIP=1 -P cmake_install.cmake +.PHONY : install/strip/fast + +# The main all target +all: cmake_check_build_system + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(CMAKE_COMMAND) -E cmake_progress_start "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/examples//CMakeFiles/progress.marks" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 examples/all + $(CMAKE_COMMAND) -E cmake_progress_start "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" 0 +.PHONY : all + +# The main clean target +clean: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 examples/clean +.PHONY : clean + +# The main clean target +clean/fast: clean +.PHONY : clean/fast + +# Prepare targets for installation. +preinstall: all + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 examples/preinstall +.PHONY : preinstall + +# Prepare targets for installation. +preinstall/fast: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 examples/preinstall +.PHONY : preinstall/fast + +# clear depends +depend: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(CMAKE_COMMAND) -S$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles/Makefile.cmake 1 +.PHONY : depend + +# Convenience name for target. +examples/CMakeFiles/add-compressed-data.dir/rule: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 examples/CMakeFiles/add-compressed-data.dir/rule +.PHONY : examples/CMakeFiles/add-compressed-data.dir/rule + +# Convenience name for target. +add-compressed-data: examples/CMakeFiles/add-compressed-data.dir/rule +.PHONY : add-compressed-data + +# fast build rule for target. +add-compressed-data/fast: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f examples/CMakeFiles/add-compressed-data.dir/build.make examples/CMakeFiles/add-compressed-data.dir/build +.PHONY : add-compressed-data/fast + +# Convenience name for target. +examples/CMakeFiles/autoclose-archive.dir/rule: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 examples/CMakeFiles/autoclose-archive.dir/rule +.PHONY : examples/CMakeFiles/autoclose-archive.dir/rule + +# Convenience name for target. +autoclose-archive: examples/CMakeFiles/autoclose-archive.dir/rule +.PHONY : autoclose-archive + +# fast build rule for target. +autoclose-archive/fast: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f examples/CMakeFiles/autoclose-archive.dir/build.make examples/CMakeFiles/autoclose-archive.dir/build +.PHONY : autoclose-archive/fast + +# Convenience name for target. +examples/CMakeFiles/in-memory.dir/rule: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 examples/CMakeFiles/in-memory.dir/rule +.PHONY : examples/CMakeFiles/in-memory.dir/rule + +# Convenience name for target. +in-memory: examples/CMakeFiles/in-memory.dir/rule +.PHONY : in-memory + +# fast build rule for target. +in-memory/fast: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f examples/CMakeFiles/in-memory.dir/build.make examples/CMakeFiles/in-memory.dir/build +.PHONY : in-memory/fast + +add-compressed-data.o: add-compressed-data.c.o +.PHONY : add-compressed-data.o + +# target to build an object file +add-compressed-data.c.o: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f examples/CMakeFiles/add-compressed-data.dir/build.make examples/CMakeFiles/add-compressed-data.dir/add-compressed-data.c.o +.PHONY : add-compressed-data.c.o + +add-compressed-data.i: add-compressed-data.c.i +.PHONY : add-compressed-data.i + +# target to preprocess a source file +add-compressed-data.c.i: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f examples/CMakeFiles/add-compressed-data.dir/build.make examples/CMakeFiles/add-compressed-data.dir/add-compressed-data.c.i +.PHONY : add-compressed-data.c.i + +add-compressed-data.s: add-compressed-data.c.s +.PHONY : add-compressed-data.s + +# target to generate assembly for a file +add-compressed-data.c.s: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f examples/CMakeFiles/add-compressed-data.dir/build.make examples/CMakeFiles/add-compressed-data.dir/add-compressed-data.c.s +.PHONY : add-compressed-data.c.s + +autoclose-archive.o: autoclose-archive.c.o +.PHONY : autoclose-archive.o + +# target to build an object file +autoclose-archive.c.o: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f examples/CMakeFiles/autoclose-archive.dir/build.make examples/CMakeFiles/autoclose-archive.dir/autoclose-archive.c.o +.PHONY : autoclose-archive.c.o + +autoclose-archive.i: autoclose-archive.c.i +.PHONY : autoclose-archive.i + +# target to preprocess a source file +autoclose-archive.c.i: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f examples/CMakeFiles/autoclose-archive.dir/build.make examples/CMakeFiles/autoclose-archive.dir/autoclose-archive.c.i +.PHONY : autoclose-archive.c.i + +autoclose-archive.s: autoclose-archive.c.s +.PHONY : autoclose-archive.s + +# target to generate assembly for a file +autoclose-archive.c.s: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f examples/CMakeFiles/autoclose-archive.dir/build.make examples/CMakeFiles/autoclose-archive.dir/autoclose-archive.c.s +.PHONY : autoclose-archive.c.s + +in-memory.o: in-memory.c.o +.PHONY : in-memory.o + +# target to build an object file +in-memory.c.o: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f examples/CMakeFiles/in-memory.dir/build.make examples/CMakeFiles/in-memory.dir/in-memory.c.o +.PHONY : in-memory.c.o + +in-memory.i: in-memory.c.i +.PHONY : in-memory.i + +# target to preprocess a source file +in-memory.c.i: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f examples/CMakeFiles/in-memory.dir/build.make examples/CMakeFiles/in-memory.dir/in-memory.c.i +.PHONY : in-memory.c.i + +in-memory.s: in-memory.c.s +.PHONY : in-memory.s + +# target to generate assembly for a file +in-memory.c.s: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f examples/CMakeFiles/in-memory.dir/build.make examples/CMakeFiles/in-memory.dir/in-memory.c.s +.PHONY : in-memory.c.s + +# Help Target +help: + @echo "The following are some of the valid targets for this Makefile:" + @echo "... all (the default if no target is provided)" + @echo "... clean" + @echo "... depend" + @echo "... edit_cache" + @echo "... install" + @echo "... install/local" + @echo "... install/strip" + @echo "... list_install_components" + @echo "... rebuild_cache" + @echo "... test" + @echo "... add-compressed-data" + @echo "... autoclose-archive" + @echo "... in-memory" + @echo "... add-compressed-data.o" + @echo "... add-compressed-data.i" + @echo "... add-compressed-data.s" + @echo "... autoclose-archive.o" + @echo "... autoclose-archive.i" + @echo "... autoclose-archive.s" + @echo "... in-memory.o" + @echo "... in-memory.i" + @echo "... in-memory.s" +.PHONY : help + + + +#============================================================================= +# Special targets to cleanup operation of make. + +# Special rule to run CMake to check the build system integrity. +# No rule that depends on this can have commands that come from listfiles +# because they might be regenerated. +cmake_check_build_system: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(CMAKE_COMMAND) -S$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles/Makefile.cmake 0 +.PHONY : cmake_check_build_system + diff --git a/thirdparty/libzip-1.11.3/build-emcmake/examples/add-compressed-data.js b/thirdparty/libzip-1.11.3/build-emcmake/examples/add-compressed-data.js new file mode 100644 index 0000000..df50f4b --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/examples/add-compressed-data.js @@ -0,0 +1,4814 @@ +// include: shell.js +// The Module object: Our interface to the outside world. We import +// and export values on it. There are various ways Module can be used: +// 1. Not defined. We create it here +// 2. A function parameter, function(moduleArg) => Promise +// 3. pre-run appended it, var Module = {}; ..generated code.. +// 4. External script tag defines var Module. +// We need to check if Module already exists (e.g. case 3 above). +// Substitution will be replaced with actual code on later stage of the build, +// this way Closure Compiler will not mangle it (e.g. case 4. above). +// Note that if you want to run closure, and also to use Module +// after the generated code, you will need to define var Module = {}; +// before the code. Then that object will be used in the code, and you +// can continue to use Module afterwards as well. +var Module = typeof Module != 'undefined' ? Module : {}; + +// Determine the runtime environment we are in. You can customize this by +// setting the ENVIRONMENT setting at compile time (see settings.js). + +// Attempt to auto-detect the environment +var ENVIRONMENT_IS_WEB = typeof window == 'object'; +var ENVIRONMENT_IS_WORKER = typeof WorkerGlobalScope != 'undefined'; +// N.b. Electron.js environment is simultaneously a NODE-environment, but +// also a web environment. +var ENVIRONMENT_IS_NODE = typeof process == 'object' && typeof process.versions == 'object' && typeof process.versions.node == 'string' && process.type != 'renderer'; +var ENVIRONMENT_IS_SHELL = !ENVIRONMENT_IS_WEB && !ENVIRONMENT_IS_NODE && !ENVIRONMENT_IS_WORKER; + +if (ENVIRONMENT_IS_NODE) { + +} + +// --pre-jses are emitted after the Module integration code, so that they can +// refer to Module (if they choose; they can also define Module) + + +// Sometimes an existing Module object exists with properties +// meant to overwrite the default module functionality. Here +// we collect those properties and reapply _after_ we configure +// the current environment's defaults to avoid having to be so +// defensive during initialization. +var moduleOverrides = {...Module}; + +var arguments_ = []; +var thisProgram = './this.program'; +var quit_ = (status, toThrow) => { + throw toThrow; +}; + +// `/` should be present at the end if `scriptDirectory` is not empty +var scriptDirectory = ''; +function locateFile(path) { + if (Module['locateFile']) { + return Module['locateFile'](path, scriptDirectory); + } + return scriptDirectory + path; +} + +// Hooks that are implemented differently in different runtime environments. +var readAsync, readBinary; + +if (ENVIRONMENT_IS_NODE) { + if (typeof process == 'undefined' || !process.release || process.release.name !== 'node') throw new Error('not compiled for this environment (did you build to HTML and try to run it not on the web, or set ENVIRONMENT to something - like node - and run it someplace else - like on the web?)'); + + var nodeVersion = process.versions.node; + var numericVersion = nodeVersion.split('.').slice(0, 3); + numericVersion = (numericVersion[0] * 10000) + (numericVersion[1] * 100) + (numericVersion[2].split('-')[0] * 1); + var minVersion = 160000; + if (numericVersion < 160000) { + throw new Error('This emscripten-generated code requires node v16.0.0 (detected v' + nodeVersion + ')'); + } + + // These modules will usually be used on Node.js. Load them eagerly to avoid + // the complexity of lazy-loading. + var fs = require('fs'); + var nodePath = require('path'); + + scriptDirectory = __dirname + '/'; + +// include: node_shell_read.js +readBinary = (filename) => { + // We need to re-wrap `file://` strings to URLs. + filename = isFileURI(filename) ? new URL(filename) : filename; + var ret = fs.readFileSync(filename); + assert(Buffer.isBuffer(ret)); + return ret; +}; + +readAsync = async (filename, binary = true) => { + // See the comment in the `readBinary` function. + filename = isFileURI(filename) ? new URL(filename) : filename; + var ret = fs.readFileSync(filename, binary ? undefined : 'utf8'); + assert(binary ? Buffer.isBuffer(ret) : typeof ret == 'string'); + return ret; +}; +// end include: node_shell_read.js + if (!Module['thisProgram'] && process.argv.length > 1) { + thisProgram = process.argv[1].replace(/\\/g, '/'); + } + + arguments_ = process.argv.slice(2); + + if (typeof module != 'undefined') { + module['exports'] = Module; + } + + quit_ = (status, toThrow) => { + process.exitCode = status; + throw toThrow; + }; + +} else +if (ENVIRONMENT_IS_SHELL) { + + if ((typeof process == 'object' && typeof require === 'function') || typeof window == 'object' || typeof WorkerGlobalScope != 'undefined') throw new Error('not compiled for this environment (did you build to HTML and try to run it not on the web, or set ENVIRONMENT to something - like node - and run it someplace else - like on the web?)'); + +} else + +// Note that this includes Node.js workers when relevant (pthreads is enabled). +// Node.js workers are detected as a combination of ENVIRONMENT_IS_WORKER and +// ENVIRONMENT_IS_NODE. +if (ENVIRONMENT_IS_WEB || ENVIRONMENT_IS_WORKER) { + if (ENVIRONMENT_IS_WORKER) { // Check worker, not web, since window could be polyfilled + scriptDirectory = self.location.href; + } else if (typeof document != 'undefined' && document.currentScript) { // web + scriptDirectory = document.currentScript.src; + } + // blob urls look like blob:http://site.com/etc/etc and we cannot infer anything from them. + // otherwise, slice off the final part of the url to find the script directory. + // if scriptDirectory does not contain a slash, lastIndexOf will return -1, + // and scriptDirectory will correctly be replaced with an empty string. + // If scriptDirectory contains a query (starting with ?) or a fragment (starting with #), + // they are removed because they could contain a slash. + if (scriptDirectory.startsWith('blob:')) { + scriptDirectory = ''; + } else { + scriptDirectory = scriptDirectory.slice(0, scriptDirectory.replace(/[?#].*/, '').lastIndexOf('/')+1); + } + + if (!(typeof window == 'object' || typeof WorkerGlobalScope != 'undefined')) throw new Error('not compiled for this environment (did you build to HTML and try to run it not on the web, or set ENVIRONMENT to something - like node - and run it someplace else - like on the web?)'); + + { +// include: web_or_worker_shell_read.js +if (ENVIRONMENT_IS_WORKER) { + readBinary = (url) => { + var xhr = new XMLHttpRequest(); + xhr.open('GET', url, false); + xhr.responseType = 'arraybuffer'; + xhr.send(null); + return new Uint8Array(/** @type{!ArrayBuffer} */(xhr.response)); + }; + } + + readAsync = async (url) => { + // Fetch has some additional restrictions over XHR, like it can't be used on a file:// url. + // See https://github.com/github/fetch/pull/92#issuecomment-140665932 + // Cordova or Electron apps are typically loaded from a file:// url. + // So use XHR on webview if URL is a file URL. + if (isFileURI(url)) { + return new Promise((resolve, reject) => { + var xhr = new XMLHttpRequest(); + xhr.open('GET', url, true); + xhr.responseType = 'arraybuffer'; + xhr.onload = () => { + if (xhr.status == 200 || (xhr.status == 0 && xhr.response)) { // file URLs can return 0 + resolve(xhr.response); + return; + } + reject(xhr.status); + }; + xhr.onerror = reject; + xhr.send(null); + }); + } + var response = await fetch(url, { credentials: 'same-origin' }); + if (response.ok) { + return response.arrayBuffer(); + } + throw new Error(response.status + ' : ' + response.url); + }; +// end include: web_or_worker_shell_read.js + } +} else +{ + throw new Error('environment detection error'); +} + +var out = Module['print'] || console.log.bind(console); +var err = Module['printErr'] || console.error.bind(console); + +// Merge back in the overrides +Object.assign(Module, moduleOverrides); +// Free the object hierarchy contained in the overrides, this lets the GC +// reclaim data used. +moduleOverrides = null; +checkIncomingModuleAPI(); + +// Emit code to handle expected values on the Module object. This applies Module.x +// to the proper local x. This has two benefits: first, we only emit it if it is +// expected to arrive, and second, by using a local everywhere else that can be +// minified. + +if (Module['arguments']) arguments_ = Module['arguments'];legacyModuleProp('arguments', 'arguments_'); + +if (Module['thisProgram']) thisProgram = Module['thisProgram'];legacyModuleProp('thisProgram', 'thisProgram'); + +// perform assertions in shell.js after we set up out() and err(), as otherwise if an assertion fails it cannot print the message +// Assertions on removed incoming Module JS APIs. +assert(typeof Module['memoryInitializerPrefixURL'] == 'undefined', 'Module.memoryInitializerPrefixURL option was removed, use Module.locateFile instead'); +assert(typeof Module['pthreadMainPrefixURL'] == 'undefined', 'Module.pthreadMainPrefixURL option was removed, use Module.locateFile instead'); +assert(typeof Module['cdInitializerPrefixURL'] == 'undefined', 'Module.cdInitializerPrefixURL option was removed, use Module.locateFile instead'); +assert(typeof Module['filePackagePrefixURL'] == 'undefined', 'Module.filePackagePrefixURL option was removed, use Module.locateFile instead'); +assert(typeof Module['read'] == 'undefined', 'Module.read option was removed'); +assert(typeof Module['readAsync'] == 'undefined', 'Module.readAsync option was removed (modify readAsync in JS)'); +assert(typeof Module['readBinary'] == 'undefined', 'Module.readBinary option was removed (modify readBinary in JS)'); +assert(typeof Module['setWindowTitle'] == 'undefined', 'Module.setWindowTitle option was removed (modify emscripten_set_window_title in JS)'); +assert(typeof Module['TOTAL_MEMORY'] == 'undefined', 'Module.TOTAL_MEMORY has been renamed Module.INITIAL_MEMORY'); +legacyModuleProp('asm', 'wasmExports'); +legacyModuleProp('readAsync', 'readAsync'); +legacyModuleProp('readBinary', 'readBinary'); +legacyModuleProp('setWindowTitle', 'setWindowTitle'); +var IDBFS = 'IDBFS is no longer included by default; build with -lidbfs.js'; +var PROXYFS = 'PROXYFS is no longer included by default; build with -lproxyfs.js'; +var WORKERFS = 'WORKERFS is no longer included by default; build with -lworkerfs.js'; +var FETCHFS = 'FETCHFS is no longer included by default; build with -lfetchfs.js'; +var ICASEFS = 'ICASEFS is no longer included by default; build with -licasefs.js'; +var JSFILEFS = 'JSFILEFS is no longer included by default; build with -ljsfilefs.js'; +var OPFS = 'OPFS is no longer included by default; build with -lopfs.js'; + +var NODEFS = 'NODEFS is no longer included by default; build with -lnodefs.js'; + +assert(!ENVIRONMENT_IS_SHELL, 'shell environment detected but not enabled at build time. Add `shell` to `-sENVIRONMENT` to enable.'); + +// end include: shell.js + +// include: preamble.js +// === Preamble library stuff === + +// Documentation for the public APIs defined in this file must be updated in: +// site/source/docs/api_reference/preamble.js.rst +// A prebuilt local version of the documentation is available at: +// site/build/text/docs/api_reference/preamble.js.txt +// You can also build docs locally as HTML or other formats in site/ +// An online HTML version (which may be of a different version of Emscripten) +// is up at http://kripken.github.io/emscripten-site/docs/api_reference/preamble.js.html + +var wasmBinary = Module['wasmBinary'];legacyModuleProp('wasmBinary', 'wasmBinary'); + +if (typeof WebAssembly != 'object') { + err('no native wasm support detected'); +} + +// Wasm globals + +var wasmMemory; + +//======================================== +// Runtime essentials +//======================================== + +// whether we are quitting the application. no code should run after this. +// set in exit() and abort() +var ABORT = false; + +// set by exit() and abort(). Passed to 'onExit' handler. +// NOTE: This is also used as the process return code code in shell environments +// but only when noExitRuntime is false. +var EXITSTATUS; + +// In STRICT mode, we only define assert() when ASSERTIONS is set. i.e. we +// don't define it at all in release modes. This matches the behaviour of +// MINIMAL_RUNTIME. +// TODO(sbc): Make this the default even without STRICT enabled. +/** @type {function(*, string=)} */ +function assert(condition, text) { + if (!condition) { + abort('Assertion failed' + (text ? ': ' + text : '')); + } +} + +// We used to include malloc/free by default in the past. Show a helpful error in +// builds with assertions. +function _malloc() { + abort('malloc() called but not included in the build - add `_malloc` to EXPORTED_FUNCTIONS'); +} +function _free() { + // Show a helpful error since we used to include free by default in the past. + abort('free() called but not included in the build - add `_free` to EXPORTED_FUNCTIONS'); +} + +// Memory management + +var HEAP, +/** @type {!Int8Array} */ + HEAP8, +/** @type {!Uint8Array} */ + HEAPU8, +/** @type {!Int16Array} */ + HEAP16, +/** @type {!Uint16Array} */ + HEAPU16, +/** @type {!Int32Array} */ + HEAP32, +/** @type {!Uint32Array} */ + HEAPU32, +/** @type {!Float32Array} */ + HEAPF32, +/* BigInt64Array type is not correctly defined in closure +/** not-@type {!BigInt64Array} */ + HEAP64, +/* BigUint64Array type is not correctly defined in closure +/** not-t@type {!BigUint64Array} */ + HEAPU64, +/** @type {!Float64Array} */ + HEAPF64; + +var runtimeInitialized = false; + +/** + * Indicates whether filename is delivered via file protocol (as opposed to http/https) + * @noinline + */ +var isFileURI = (filename) => filename.startsWith('file://'); + +// include: runtime_shared.js +// include: runtime_stack_check.js +// Initializes the stack cookie. Called at the startup of main and at the startup of each thread in pthreads mode. +function writeStackCookie() { + var max = _emscripten_stack_get_end(); + assert((max & 3) == 0); + // If the stack ends at address zero we write our cookies 4 bytes into the + // stack. This prevents interference with SAFE_HEAP and ASAN which also + // monitor writes to address zero. + if (max == 0) { + max += 4; + } + // The stack grow downwards towards _emscripten_stack_get_end. + // We write cookies to the final two words in the stack and detect if they are + // ever overwritten. + HEAPU32[((max)>>2)] = 0x02135467; + HEAPU32[(((max)+(4))>>2)] = 0x89BACDFE; + // Also test the global address 0 for integrity. + HEAPU32[((0)>>2)] = 1668509029; +} + +function checkStackCookie() { + if (ABORT) return; + var max = _emscripten_stack_get_end(); + // See writeStackCookie(). + if (max == 0) { + max += 4; + } + var cookie1 = HEAPU32[((max)>>2)]; + var cookie2 = HEAPU32[(((max)+(4))>>2)]; + if (cookie1 != 0x02135467 || cookie2 != 0x89BACDFE) { + abort(`Stack overflow! Stack cookie has been overwritten at ${ptrToString(max)}, expected hex dwords 0x89BACDFE and 0x2135467, but received ${ptrToString(cookie2)} ${ptrToString(cookie1)}`); + } + // Also test the global address 0 for integrity. + if (HEAPU32[((0)>>2)] != 0x63736d65 /* 'emsc' */) { + abort('Runtime error: The application has corrupted its heap memory area (address zero)!'); + } +} +// end include: runtime_stack_check.js +// include: runtime_exceptions.js +// end include: runtime_exceptions.js +// include: runtime_debug.js +// Endianness check +(() => { + var h16 = new Int16Array(1); + var h8 = new Int8Array(h16.buffer); + h16[0] = 0x6373; + if (h8[0] !== 0x73 || h8[1] !== 0x63) throw 'Runtime error: expected the system to be little-endian! (Run with -sSUPPORT_BIG_ENDIAN to bypass)'; +})(); + +if (Module['ENVIRONMENT']) { + throw new Error('Module.ENVIRONMENT has been deprecated. To force the environment, use the ENVIRONMENT compile-time option (for example, -sENVIRONMENT=web or -sENVIRONMENT=node)'); +} + +function legacyModuleProp(prop, newName, incoming=true) { + if (!Object.getOwnPropertyDescriptor(Module, prop)) { + Object.defineProperty(Module, prop, { + configurable: true, + get() { + let extra = incoming ? ' (the initial value can be provided on Module, but after startup the value is only looked for on a local variable of that name)' : ''; + abort(`\`Module.${prop}\` has been replaced by \`${newName}\`` + extra); + + } + }); + } +} + +function consumedModuleProp(prop) { + if (!Object.getOwnPropertyDescriptor(Module, prop)) { + Object.defineProperty(Module, prop, { + configurable: true, + set() { + abort(`Attempt to set \`Module.${prop}\` after it has already been processed. This can happen, for example, when code is injected via '--post-js' rather than '--pre-js'`); + + } + }); + } +} + +function ignoredModuleProp(prop) { + if (Object.getOwnPropertyDescriptor(Module, prop)) { + abort(`\`Module.${prop}\` was supplied but \`${prop}\` not included in INCOMING_MODULE_JS_API`); + } +} + +// forcing the filesystem exports a few things by default +function isExportedByForceFilesystem(name) { + return name === 'FS_createPath' || + name === 'FS_createDataFile' || + name === 'FS_createPreloadedFile' || + name === 'FS_unlink' || + name === 'addRunDependency' || + // The old FS has some functionality that WasmFS lacks. + name === 'FS_createLazyFile' || + name === 'FS_createDevice' || + name === 'removeRunDependency'; +} + +/** + * Intercept access to a global symbol. This enables us to give informative + * warnings/errors when folks attempt to use symbols they did not include in + * their build, or no symbols that no longer exist. + */ +function hookGlobalSymbolAccess(sym, func) { + if (typeof globalThis != 'undefined' && !Object.getOwnPropertyDescriptor(globalThis, sym)) { + Object.defineProperty(globalThis, sym, { + configurable: true, + get() { + func(); + return undefined; + } + }); + } +} + +function missingGlobal(sym, msg) { + hookGlobalSymbolAccess(sym, () => { + warnOnce(`\`${sym}\` is not longer defined by emscripten. ${msg}`); + }); +} + +missingGlobal('buffer', 'Please use HEAP8.buffer or wasmMemory.buffer'); +missingGlobal('asm', 'Please use wasmExports instead'); + +function missingLibrarySymbol(sym) { + hookGlobalSymbolAccess(sym, () => { + // Can't `abort()` here because it would break code that does runtime + // checks. e.g. `if (typeof SDL === 'undefined')`. + var msg = `\`${sym}\` is a library symbol and not included by default; add it to your library.js __deps or to DEFAULT_LIBRARY_FUNCS_TO_INCLUDE on the command line`; + // DEFAULT_LIBRARY_FUNCS_TO_INCLUDE requires the name as it appears in + // library.js, which means $name for a JS name with no prefix, or name + // for a JS name like _name. + var librarySymbol = sym; + if (!librarySymbol.startsWith('_')) { + librarySymbol = '$' + sym; + } + msg += ` (e.g. -sDEFAULT_LIBRARY_FUNCS_TO_INCLUDE='${librarySymbol}')`; + if (isExportedByForceFilesystem(sym)) { + msg += '. Alternatively, forcing filesystem support (-sFORCE_FILESYSTEM) can export this for you'; + } + warnOnce(msg); + }); + + // Any symbol that is not included from the JS library is also (by definition) + // not exported on the Module object. + unexportedRuntimeSymbol(sym); +} + +function unexportedRuntimeSymbol(sym) { + if (!Object.getOwnPropertyDescriptor(Module, sym)) { + Object.defineProperty(Module, sym, { + configurable: true, + get() { + var msg = `'${sym}' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the Emscripten FAQ)`; + if (isExportedByForceFilesystem(sym)) { + msg += '. Alternatively, forcing filesystem support (-sFORCE_FILESYSTEM) can export this for you'; + } + abort(msg); + } + }); + } +} + +var runtimeDebug = true; // Switch to false at runtime to disable logging at the right times + +// Used by XXXXX_DEBUG settings to output debug messages. +function dbg(...args) { + if (!runtimeDebug && typeof runtimeDebug != 'undefined') return; + // TODO(sbc): Make this configurable somehow. Its not always convenient for + // logging to show up as warnings. + console.warn(...args); +} +// end include: runtime_debug.js +// include: memoryprofiler.js +// end include: memoryprofiler.js + + +function updateMemoryViews() { + var b = wasmMemory.buffer; + Module['HEAP8'] = HEAP8 = new Int8Array(b); + Module['HEAP16'] = HEAP16 = new Int16Array(b); + Module['HEAPU8'] = HEAPU8 = new Uint8Array(b); + Module['HEAPU16'] = HEAPU16 = new Uint16Array(b); + Module['HEAP32'] = HEAP32 = new Int32Array(b); + Module['HEAPU32'] = HEAPU32 = new Uint32Array(b); + Module['HEAPF32'] = HEAPF32 = new Float32Array(b); + Module['HEAPF64'] = HEAPF64 = new Float64Array(b); + Module['HEAP64'] = HEAP64 = new BigInt64Array(b); + Module['HEAPU64'] = HEAPU64 = new BigUint64Array(b); +} + +// end include: runtime_shared.js +assert(!Module['STACK_SIZE'], 'STACK_SIZE can no longer be set at runtime. Use -sSTACK_SIZE at link time') + +assert(typeof Int32Array != 'undefined' && typeof Float64Array !== 'undefined' && Int32Array.prototype.subarray != undefined && Int32Array.prototype.set != undefined, + 'JS engine does not provide full typed array support'); + +// If memory is defined in wasm, the user can't provide it, or set INITIAL_MEMORY +assert(!Module['wasmMemory'], 'Use of `wasmMemory` detected. Use -sIMPORTED_MEMORY to define wasmMemory externally'); +assert(!Module['INITIAL_MEMORY'], 'Detected runtime INITIAL_MEMORY setting. Use -sIMPORTED_MEMORY to define wasmMemory dynamically'); + +function preRun() { + if (Module['preRun']) { + if (typeof Module['preRun'] == 'function') Module['preRun'] = [Module['preRun']]; + while (Module['preRun'].length) { + addOnPreRun(Module['preRun'].shift()); + } + } + consumedModuleProp('preRun'); + callRuntimeCallbacks(onPreRuns); +} + +function initRuntime() { + assert(!runtimeInitialized); + runtimeInitialized = true; + + checkStackCookie(); + + if (!Module['noFSInit'] && !FS.initialized) FS.init(); +TTY.init(); + + wasmExports['__wasm_call_ctors'](); + + FS.ignorePermissions = false; +} + +function preMain() { + checkStackCookie(); + +} + +function postRun() { + checkStackCookie(); + + if (Module['postRun']) { + if (typeof Module['postRun'] == 'function') Module['postRun'] = [Module['postRun']]; + while (Module['postRun'].length) { + addOnPostRun(Module['postRun'].shift()); + } + } + consumedModuleProp('postRun'); + + callRuntimeCallbacks(onPostRuns); +} + +// A counter of dependencies for calling run(). If we need to +// do asynchronous work before running, increment this and +// decrement it. Incrementing must happen in a place like +// Module.preRun (used by emcc to add file preloading). +// Note that you can add dependencies in preRun, even though +// it happens right before run - run will be postponed until +// the dependencies are met. +var runDependencies = 0; +var dependenciesFulfilled = null; // overridden to take different actions when all run dependencies are fulfilled +var runDependencyTracking = {}; +var runDependencyWatcher = null; + +function getUniqueRunDependency(id) { + var orig = id; + while (1) { + if (!runDependencyTracking[id]) return id; + id = orig + Math.random(); + } +} + +function addRunDependency(id) { + runDependencies++; + + Module['monitorRunDependencies']?.(runDependencies); + + if (id) { + assert(!runDependencyTracking[id]); + runDependencyTracking[id] = 1; + if (runDependencyWatcher === null && typeof setInterval != 'undefined') { + // Check for missing dependencies every few seconds + runDependencyWatcher = setInterval(() => { + if (ABORT) { + clearInterval(runDependencyWatcher); + runDependencyWatcher = null; + return; + } + var shown = false; + for (var dep in runDependencyTracking) { + if (!shown) { + shown = true; + err('still waiting on run dependencies:'); + } + err(`dependency: ${dep}`); + } + if (shown) { + err('(end of list)'); + } + }, 10000); + } + } else { + err('warning: run dependency added without ID'); + } +} + +function removeRunDependency(id) { + runDependencies--; + + Module['monitorRunDependencies']?.(runDependencies); + + if (id) { + assert(runDependencyTracking[id]); + delete runDependencyTracking[id]; + } else { + err('warning: run dependency removed without ID'); + } + if (runDependencies == 0) { + if (runDependencyWatcher !== null) { + clearInterval(runDependencyWatcher); + runDependencyWatcher = null; + } + if (dependenciesFulfilled) { + var callback = dependenciesFulfilled; + dependenciesFulfilled = null; + callback(); // can add another dependenciesFulfilled + } + } +} + +/** @param {string|number=} what */ +function abort(what) { + Module['onAbort']?.(what); + + what = 'Aborted(' + what + ')'; + // TODO(sbc): Should we remove printing and leave it up to whoever + // catches the exception? + err(what); + + ABORT = true; + + // Use a wasm runtime error, because a JS error might be seen as a foreign + // exception, which means we'd run destructors on it. We need the error to + // simply make the program stop. + // FIXME This approach does not work in Wasm EH because it currently does not assume + // all RuntimeErrors are from traps; it decides whether a RuntimeError is from + // a trap or not based on a hidden field within the object. So at the moment + // we don't have a way of throwing a wasm trap from JS. TODO Make a JS API that + // allows this in the wasm spec. + + // Suppress closure compiler warning here. Closure compiler's builtin extern + // definition for WebAssembly.RuntimeError claims it takes no arguments even + // though it can. + // TODO(https://github.com/google/closure-compiler/pull/3913): Remove if/when upstream closure gets fixed. + /** @suppress {checkTypes} */ + var e = new WebAssembly.RuntimeError(what); + + // Throw the error whether or not MODULARIZE is set because abort is used + // in code paths apart from instantiation where an exception is expected + // to be thrown when abort is called. + throw e; +} + +function createExportWrapper(name, nargs) { + return (...args) => { + assert(runtimeInitialized, `native function \`${name}\` called before runtime initialization`); + var f = wasmExports[name]; + assert(f, `exported native function \`${name}\` not found`); + // Only assert for too many arguments. Too few can be valid since the missing arguments will be zero filled. + assert(args.length <= nargs, `native function \`${name}\` called with ${args.length} args but expects ${nargs}`); + return f(...args); + }; +} + +var wasmBinaryFile; + +function findWasmBinary() { + return locateFile('add-compressed-data.wasm'); +} + +function getBinarySync(file) { + if (file == wasmBinaryFile && wasmBinary) { + return new Uint8Array(wasmBinary); + } + if (readBinary) { + return readBinary(file); + } + throw 'both async and sync fetching of the wasm failed'; +} + +async function getWasmBinary(binaryFile) { + // If we don't have the binary yet, load it asynchronously using readAsync. + if (!wasmBinary) { + // Fetch the binary using readAsync + try { + var response = await readAsync(binaryFile); + return new Uint8Array(response); + } catch { + // Fall back to getBinarySync below; + } + } + + // Otherwise, getBinarySync should be able to get it synchronously + return getBinarySync(binaryFile); +} + +async function instantiateArrayBuffer(binaryFile, imports) { + try { + var binary = await getWasmBinary(binaryFile); + var instance = await WebAssembly.instantiate(binary, imports); + return instance; + } catch (reason) { + err(`failed to asynchronously prepare wasm: ${reason}`); + + // Warn on some common problems. + if (isFileURI(wasmBinaryFile)) { + err(`warning: Loading from a file URI (${wasmBinaryFile}) is not supported in most browsers. See https://emscripten.org/docs/getting_started/FAQ.html#how-do-i-run-a-local-webserver-for-testing-why-does-my-program-stall-in-downloading-or-preparing`); + } + abort(reason); + } +} + +async function instantiateAsync(binary, binaryFile, imports) { + if (!binary && typeof WebAssembly.instantiateStreaming == 'function' + // Don't use streaming for file:// delivered objects in a webview, fetch them synchronously. + && !isFileURI(binaryFile) + // Avoid instantiateStreaming() on Node.js environment for now, as while + // Node.js v18.1.0 implements it, it does not have a full fetch() + // implementation yet. + // + // Reference: + // https://github.com/emscripten-core/emscripten/pull/16917 + && !ENVIRONMENT_IS_NODE + ) { + try { + var response = fetch(binaryFile, { credentials: 'same-origin' }); + var instantiationResult = await WebAssembly.instantiateStreaming(response, imports); + return instantiationResult; + } catch (reason) { + // We expect the most common failure cause to be a bad MIME type for the binary, + // in which case falling back to ArrayBuffer instantiation should work. + err(`wasm streaming compile failed: ${reason}`); + err('falling back to ArrayBuffer instantiation'); + // fall back of instantiateArrayBuffer below + }; + } + return instantiateArrayBuffer(binaryFile, imports); +} + +function getWasmImports() { + // prepare imports + return { + 'env': wasmImports, + 'wasi_snapshot_preview1': wasmImports, + } +} + +// Create the wasm instance. +// Receives the wasm imports, returns the exports. +async function createWasm() { + // Load the wasm module and create an instance of using native support in the JS engine. + // handle a generated wasm instance, receiving its exports and + // performing other necessary setup + /** @param {WebAssembly.Module=} module*/ + function receiveInstance(instance, module) { + wasmExports = instance.exports; + + + + wasmMemory = wasmExports['memory']; + + assert(wasmMemory, 'memory not found in wasm exports'); + updateMemoryViews(); + + removeRunDependency('wasm-instantiate'); + return wasmExports; + } + // wait for the pthread pool (if any) + addRunDependency('wasm-instantiate'); + + // Prefer streaming instantiation if available. + // Async compilation can be confusing when an error on the page overwrites Module + // (for example, if the order of elements is wrong, and the one defining Module is + // later), so we save Module and check it later. + var trueModule = Module; + function receiveInstantiationResult(result) { + // 'result' is a ResultObject object which has both the module and instance. + // receiveInstance() will swap in the exports (to Module.asm) so they can be called + assert(Module === trueModule, 'the Module object should not be replaced during async compilation - perhaps the order of HTML elements is wrong?'); + trueModule = null; + // TODO: Due to Closure regression https://github.com/google/closure-compiler/issues/3193, the above line no longer optimizes out down to the following line. + // When the regression is fixed, can restore the above PTHREADS-enabled path. + return receiveInstance(result['instance']); + } + + var info = getWasmImports(); + + // User shell pages can write their own Module.instantiateWasm = function(imports, successCallback) callback + // to manually instantiate the Wasm module themselves. This allows pages to + // run the instantiation parallel to any other async startup actions they are + // performing. + // Also pthreads and wasm workers initialize the wasm instance through this + // path. + if (Module['instantiateWasm']) { + return new Promise((resolve, reject) => { + try { + Module['instantiateWasm'](info, (mod, inst) => { + receiveInstance(mod, inst); + resolve(mod.exports); + }); + } catch(e) { + err(`Module.instantiateWasm callback failed with error: ${e}`); + reject(e); + } + }); + } + + wasmBinaryFile ??= findWasmBinary(); + var result = await instantiateAsync(wasmBinary, wasmBinaryFile, info); + var exports = receiveInstantiationResult(result); + return exports; +} + +// end include: preamble.js + +// Begin JS library code + + + class ExitStatus { + name = 'ExitStatus'; + constructor(status) { + this.message = `Program terminated with exit(${status})`; + this.status = status; + } + } + + var callRuntimeCallbacks = (callbacks) => { + while (callbacks.length > 0) { + // Pass the module as the first argument. + callbacks.shift()(Module); + } + }; + var onPostRuns = []; + var addOnPostRun = (cb) => onPostRuns.unshift(cb); + + var onPreRuns = []; + var addOnPreRun = (cb) => onPreRuns.unshift(cb); + + + + /** + * @param {number} ptr + * @param {string} type + */ + function getValue(ptr, type = 'i8') { + if (type.endsWith('*')) type = '*'; + switch (type) { + case 'i1': return HEAP8[ptr]; + case 'i8': return HEAP8[ptr]; + case 'i16': return HEAP16[((ptr)>>1)]; + case 'i32': return HEAP32[((ptr)>>2)]; + case 'i64': return HEAP64[((ptr)>>3)]; + case 'float': return HEAPF32[((ptr)>>2)]; + case 'double': return HEAPF64[((ptr)>>3)]; + case '*': return HEAPU32[((ptr)>>2)]; + default: abort(`invalid type for getValue: ${type}`); + } + } + + var noExitRuntime = Module['noExitRuntime'] || true; + + var ptrToString = (ptr) => { + assert(typeof ptr === 'number'); + // With CAN_ADDRESS_2GB or MEMORY64, pointers are already unsigned. + ptr >>>= 0; + return '0x' + ptr.toString(16).padStart(8, '0'); + }; + + + /** + * @param {number} ptr + * @param {number} value + * @param {string} type + */ + function setValue(ptr, value, type = 'i8') { + if (type.endsWith('*')) type = '*'; + switch (type) { + case 'i1': HEAP8[ptr] = value; break; + case 'i8': HEAP8[ptr] = value; break; + case 'i16': HEAP16[((ptr)>>1)] = value; break; + case 'i32': HEAP32[((ptr)>>2)] = value; break; + case 'i64': HEAP64[((ptr)>>3)] = BigInt(value); break; + case 'float': HEAPF32[((ptr)>>2)] = value; break; + case 'double': HEAPF64[((ptr)>>3)] = value; break; + case '*': HEAPU32[((ptr)>>2)] = value; break; + default: abort(`invalid type for setValue: ${type}`); + } + } + + var stackRestore = (val) => __emscripten_stack_restore(val); + + var stackSave = () => _emscripten_stack_get_current(); + + var warnOnce = (text) => { + warnOnce.shown ||= {}; + if (!warnOnce.shown[text]) { + warnOnce.shown[text] = 1; + if (ENVIRONMENT_IS_NODE) text = 'warning: ' + text; + err(text); + } + }; + + var PATH = { + isAbs:(path) => path.charAt(0) === '/', + splitPath:(filename) => { + var splitPathRe = /^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/; + return splitPathRe.exec(filename).slice(1); + }, + normalizeArray:(parts, allowAboveRoot) => { + // if the path tries to go above the root, `up` ends up > 0 + var up = 0; + for (var i = parts.length - 1; i >= 0; i--) { + var last = parts[i]; + if (last === '.') { + parts.splice(i, 1); + } else if (last === '..') { + parts.splice(i, 1); + up++; + } else if (up) { + parts.splice(i, 1); + up--; + } + } + // if the path is allowed to go above the root, restore leading ..s + if (allowAboveRoot) { + for (; up; up--) { + parts.unshift('..'); + } + } + return parts; + }, + normalize:(path) => { + var isAbsolute = PATH.isAbs(path), + trailingSlash = path.slice(-1) === '/'; + // Normalize the path + path = PATH.normalizeArray(path.split('/').filter((p) => !!p), !isAbsolute).join('/'); + if (!path && !isAbsolute) { + path = '.'; + } + if (path && trailingSlash) { + path += '/'; + } + return (isAbsolute ? '/' : '') + path; + }, + dirname:(path) => { + var result = PATH.splitPath(path), + root = result[0], + dir = result[1]; + if (!root && !dir) { + // No dirname whatsoever + return '.'; + } + if (dir) { + // It has a dirname, strip trailing slash + dir = dir.slice(0, -1); + } + return root + dir; + }, + basename:(path) => path && path.match(/([^\/]+|\/)\/*$/)[1], + join:(...paths) => PATH.normalize(paths.join('/')), + join2:(l, r) => PATH.normalize(l + '/' + r), + }; + + var initRandomFill = () => { + // This block is not needed on v19+ since crypto.getRandomValues is builtin + if (ENVIRONMENT_IS_NODE) { + var nodeCrypto = require('crypto'); + return (view) => nodeCrypto.randomFillSync(view); + } + + return (view) => crypto.getRandomValues(view); + }; + var randomFill = (view) => { + // Lazily init on the first invocation. + (randomFill = initRandomFill())(view); + }; + + + + var PATH_FS = { + resolve:(...args) => { + var resolvedPath = '', + resolvedAbsolute = false; + for (var i = args.length - 1; i >= -1 && !resolvedAbsolute; i--) { + var path = (i >= 0) ? args[i] : FS.cwd(); + // Skip empty and invalid entries + if (typeof path != 'string') { + throw new TypeError('Arguments to path.resolve must be strings'); + } else if (!path) { + return ''; // an invalid portion invalidates the whole thing + } + resolvedPath = path + '/' + resolvedPath; + resolvedAbsolute = PATH.isAbs(path); + } + // At this point the path should be resolved to a full absolute path, but + // handle relative paths to be safe (might happen when process.cwd() fails) + resolvedPath = PATH.normalizeArray(resolvedPath.split('/').filter((p) => !!p), !resolvedAbsolute).join('/'); + return ((resolvedAbsolute ? '/' : '') + resolvedPath) || '.'; + }, + relative:(from, to) => { + from = PATH_FS.resolve(from).slice(1); + to = PATH_FS.resolve(to).slice(1); + function trim(arr) { + var start = 0; + for (; start < arr.length; start++) { + if (arr[start] !== '') break; + } + var end = arr.length - 1; + for (; end >= 0; end--) { + if (arr[end] !== '') break; + } + if (start > end) return []; + return arr.slice(start, end - start + 1); + } + var fromParts = trim(from.split('/')); + var toParts = trim(to.split('/')); + var length = Math.min(fromParts.length, toParts.length); + var samePartsLength = length; + for (var i = 0; i < length; i++) { + if (fromParts[i] !== toParts[i]) { + samePartsLength = i; + break; + } + } + var outputParts = []; + for (var i = samePartsLength; i < fromParts.length; i++) { + outputParts.push('..'); + } + outputParts = outputParts.concat(toParts.slice(samePartsLength)); + return outputParts.join('/'); + }, + }; + + + var UTF8Decoder = typeof TextDecoder != 'undefined' ? new TextDecoder() : undefined; + + /** + * Given a pointer 'idx' to a null-terminated UTF8-encoded string in the given + * array that contains uint8 values, returns a copy of that string as a + * Javascript String object. + * heapOrArray is either a regular array, or a JavaScript typed array view. + * @param {number=} idx + * @param {number=} maxBytesToRead + * @return {string} + */ + var UTF8ArrayToString = (heapOrArray, idx = 0, maxBytesToRead = NaN) => { + var endIdx = idx + maxBytesToRead; + var endPtr = idx; + // TextDecoder needs to know the byte length in advance, it doesn't stop on + // null terminator by itself. Also, use the length info to avoid running tiny + // strings through TextDecoder, since .subarray() allocates garbage. + // (As a tiny code save trick, compare endPtr against endIdx using a negation, + // so that undefined/NaN means Infinity) + while (heapOrArray[endPtr] && !(endPtr >= endIdx)) ++endPtr; + + if (endPtr - idx > 16 && heapOrArray.buffer && UTF8Decoder) { + return UTF8Decoder.decode(heapOrArray.subarray(idx, endPtr)); + } + var str = ''; + // If building with TextDecoder, we have already computed the string length + // above, so test loop end condition against that + while (idx < endPtr) { + // For UTF8 byte structure, see: + // http://en.wikipedia.org/wiki/UTF-8#Description + // https://www.ietf.org/rfc/rfc2279.txt + // https://tools.ietf.org/html/rfc3629 + var u0 = heapOrArray[idx++]; + if (!(u0 & 0x80)) { str += String.fromCharCode(u0); continue; } + var u1 = heapOrArray[idx++] & 63; + if ((u0 & 0xE0) == 0xC0) { str += String.fromCharCode(((u0 & 31) << 6) | u1); continue; } + var u2 = heapOrArray[idx++] & 63; + if ((u0 & 0xF0) == 0xE0) { + u0 = ((u0 & 15) << 12) | (u1 << 6) | u2; + } else { + if ((u0 & 0xF8) != 0xF0) warnOnce('Invalid UTF-8 leading byte ' + ptrToString(u0) + ' encountered when deserializing a UTF-8 string in wasm memory to a JS string!'); + u0 = ((u0 & 7) << 18) | (u1 << 12) | (u2 << 6) | (heapOrArray[idx++] & 63); + } + + if (u0 < 0x10000) { + str += String.fromCharCode(u0); + } else { + var ch = u0 - 0x10000; + str += String.fromCharCode(0xD800 | (ch >> 10), 0xDC00 | (ch & 0x3FF)); + } + } + return str; + }; + + var FS_stdin_getChar_buffer = []; + + var lengthBytesUTF8 = (str) => { + var len = 0; + for (var i = 0; i < str.length; ++i) { + // Gotcha: charCodeAt returns a 16-bit word that is a UTF-16 encoded code + // unit, not a Unicode code point of the character! So decode + // UTF16->UTF32->UTF8. + // See http://unicode.org/faq/utf_bom.html#utf16-3 + var c = str.charCodeAt(i); // possibly a lead surrogate + if (c <= 0x7F) { + len++; + } else if (c <= 0x7FF) { + len += 2; + } else if (c >= 0xD800 && c <= 0xDFFF) { + len += 4; ++i; + } else { + len += 3; + } + } + return len; + }; + + var stringToUTF8Array = (str, heap, outIdx, maxBytesToWrite) => { + assert(typeof str === 'string', `stringToUTF8Array expects a string (got ${typeof str})`); + // Parameter maxBytesToWrite is not optional. Negative values, 0, null, + // undefined and false each don't write out any bytes. + if (!(maxBytesToWrite > 0)) + return 0; + + var startIdx = outIdx; + var endIdx = outIdx + maxBytesToWrite - 1; // -1 for string null terminator. + for (var i = 0; i < str.length; ++i) { + // Gotcha: charCodeAt returns a 16-bit word that is a UTF-16 encoded code + // unit, not a Unicode code point of the character! So decode + // UTF16->UTF32->UTF8. + // See http://unicode.org/faq/utf_bom.html#utf16-3 + // For UTF8 byte structure, see http://en.wikipedia.org/wiki/UTF-8#Description + // and https://www.ietf.org/rfc/rfc2279.txt + // and https://tools.ietf.org/html/rfc3629 + var u = str.charCodeAt(i); // possibly a lead surrogate + if (u >= 0xD800 && u <= 0xDFFF) { + var u1 = str.charCodeAt(++i); + u = 0x10000 + ((u & 0x3FF) << 10) | (u1 & 0x3FF); + } + if (u <= 0x7F) { + if (outIdx >= endIdx) break; + heap[outIdx++] = u; + } else if (u <= 0x7FF) { + if (outIdx + 1 >= endIdx) break; + heap[outIdx++] = 0xC0 | (u >> 6); + heap[outIdx++] = 0x80 | (u & 63); + } else if (u <= 0xFFFF) { + if (outIdx + 2 >= endIdx) break; + heap[outIdx++] = 0xE0 | (u >> 12); + heap[outIdx++] = 0x80 | ((u >> 6) & 63); + heap[outIdx++] = 0x80 | (u & 63); + } else { + if (outIdx + 3 >= endIdx) break; + if (u > 0x10FFFF) warnOnce('Invalid Unicode code point ' + ptrToString(u) + ' encountered when serializing a JS string to a UTF-8 string in wasm memory! (Valid unicode code points should be in range 0-0x10FFFF).'); + heap[outIdx++] = 0xF0 | (u >> 18); + heap[outIdx++] = 0x80 | ((u >> 12) & 63); + heap[outIdx++] = 0x80 | ((u >> 6) & 63); + heap[outIdx++] = 0x80 | (u & 63); + } + } + // Null-terminate the pointer to the buffer. + heap[outIdx] = 0; + return outIdx - startIdx; + }; + /** @type {function(string, boolean=, number=)} */ + var intArrayFromString = (stringy, dontAddNull, length) => { + var len = length > 0 ? length : lengthBytesUTF8(stringy)+1; + var u8array = new Array(len); + var numBytesWritten = stringToUTF8Array(stringy, u8array, 0, u8array.length); + if (dontAddNull) u8array.length = numBytesWritten; + return u8array; + }; + var FS_stdin_getChar = () => { + if (!FS_stdin_getChar_buffer.length) { + var result = null; + if (ENVIRONMENT_IS_NODE) { + // we will read data by chunks of BUFSIZE + var BUFSIZE = 256; + var buf = Buffer.alloc(BUFSIZE); + var bytesRead = 0; + + // For some reason we must suppress a closure warning here, even though + // fd definitely exists on process.stdin, and is even the proper way to + // get the fd of stdin, + // https://github.com/nodejs/help/issues/2136#issuecomment-523649904 + // This started to happen after moving this logic out of library_tty.js, + // so it is related to the surrounding code in some unclear manner. + /** @suppress {missingProperties} */ + var fd = process.stdin.fd; + + try { + bytesRead = fs.readSync(fd, buf, 0, BUFSIZE); + } catch(e) { + // Cross-platform differences: on Windows, reading EOF throws an + // exception, but on other OSes, reading EOF returns 0. Uniformize + // behavior by treating the EOF exception to return 0. + if (e.toString().includes('EOF')) bytesRead = 0; + else throw e; + } + + if (bytesRead > 0) { + result = buf.slice(0, bytesRead).toString('utf-8'); + } + } else + if (typeof window != 'undefined' && + typeof window.prompt == 'function') { + // Browser. + result = window.prompt('Input: '); // returns null on cancel + if (result !== null) { + result += '\n'; + } + } else + {} + if (!result) { + return null; + } + FS_stdin_getChar_buffer = intArrayFromString(result, true); + } + return FS_stdin_getChar_buffer.shift(); + }; + var TTY = { + ttys:[], + init() { + // https://github.com/emscripten-core/emscripten/pull/1555 + // if (ENVIRONMENT_IS_NODE) { + // // currently, FS.init does not distinguish if process.stdin is a file or TTY + // // device, it always assumes it's a TTY device. because of this, we're forcing + // // process.stdin to UTF8 encoding to at least make stdin reading compatible + // // with text files until FS.init can be refactored. + // process.stdin.setEncoding('utf8'); + // } + }, + shutdown() { + // https://github.com/emscripten-core/emscripten/pull/1555 + // if (ENVIRONMENT_IS_NODE) { + // // inolen: any idea as to why node -e 'process.stdin.read()' wouldn't exit immediately (with process.stdin being a tty)? + // // isaacs: because now it's reading from the stream, you've expressed interest in it, so that read() kicks off a _read() which creates a ReadReq operation + // // inolen: I thought read() in that case was a synchronous operation that just grabbed some amount of buffered data if it exists? + // // isaacs: it is. but it also triggers a _read() call, which calls readStart() on the handle + // // isaacs: do process.stdin.pause() and i'd think it'd probably close the pending call + // process.stdin.pause(); + // } + }, + register(dev, ops) { + TTY.ttys[dev] = { input: [], output: [], ops: ops }; + FS.registerDevice(dev, TTY.stream_ops); + }, + stream_ops:{ + open(stream) { + var tty = TTY.ttys[stream.node.rdev]; + if (!tty) { + throw new FS.ErrnoError(43); + } + stream.tty = tty; + stream.seekable = false; + }, + close(stream) { + // flush any pending line data + stream.tty.ops.fsync(stream.tty); + }, + fsync(stream) { + stream.tty.ops.fsync(stream.tty); + }, + read(stream, buffer, offset, length, pos /* ignored */) { + if (!stream.tty || !stream.tty.ops.get_char) { + throw new FS.ErrnoError(60); + } + var bytesRead = 0; + for (var i = 0; i < length; i++) { + var result; + try { + result = stream.tty.ops.get_char(stream.tty); + } catch (e) { + throw new FS.ErrnoError(29); + } + if (result === undefined && bytesRead === 0) { + throw new FS.ErrnoError(6); + } + if (result === null || result === undefined) break; + bytesRead++; + buffer[offset+i] = result; + } + if (bytesRead) { + stream.node.atime = Date.now(); + } + return bytesRead; + }, + write(stream, buffer, offset, length, pos) { + if (!stream.tty || !stream.tty.ops.put_char) { + throw new FS.ErrnoError(60); + } + try { + for (var i = 0; i < length; i++) { + stream.tty.ops.put_char(stream.tty, buffer[offset+i]); + } + } catch (e) { + throw new FS.ErrnoError(29); + } + if (length) { + stream.node.mtime = stream.node.ctime = Date.now(); + } + return i; + }, + }, + default_tty_ops:{ + get_char(tty) { + return FS_stdin_getChar(); + }, + put_char(tty, val) { + if (val === null || val === 10) { + out(UTF8ArrayToString(tty.output)); + tty.output = []; + } else { + if (val != 0) tty.output.push(val); // val == 0 would cut text output off in the middle. + } + }, + fsync(tty) { + if (tty.output?.length > 0) { + out(UTF8ArrayToString(tty.output)); + tty.output = []; + } + }, + ioctl_tcgets(tty) { + // typical setting + return { + c_iflag: 25856, + c_oflag: 5, + c_cflag: 191, + c_lflag: 35387, + c_cc: [ + 0x03, 0x1c, 0x7f, 0x15, 0x04, 0x00, 0x01, 0x00, 0x11, 0x13, 0x1a, 0x00, + 0x12, 0x0f, 0x17, 0x16, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + ] + }; + }, + ioctl_tcsets(tty, optional_actions, data) { + // currently just ignore + return 0; + }, + ioctl_tiocgwinsz(tty) { + return [24, 80]; + }, + }, + default_tty1_ops:{ + put_char(tty, val) { + if (val === null || val === 10) { + err(UTF8ArrayToString(tty.output)); + tty.output = []; + } else { + if (val != 0) tty.output.push(val); + } + }, + fsync(tty) { + if (tty.output?.length > 0) { + err(UTF8ArrayToString(tty.output)); + tty.output = []; + } + }, + }, + }; + + + var mmapAlloc = (size) => { + abort('internal error: mmapAlloc called but `emscripten_builtin_memalign` native symbol not exported'); + }; + var MEMFS = { + ops_table:null, + mount(mount) { + return MEMFS.createNode(null, '/', 16895, 0); + }, + createNode(parent, name, mode, dev) { + if (FS.isBlkdev(mode) || FS.isFIFO(mode)) { + // no supported + throw new FS.ErrnoError(63); + } + MEMFS.ops_table ||= { + dir: { + node: { + getattr: MEMFS.node_ops.getattr, + setattr: MEMFS.node_ops.setattr, + lookup: MEMFS.node_ops.lookup, + mknod: MEMFS.node_ops.mknod, + rename: MEMFS.node_ops.rename, + unlink: MEMFS.node_ops.unlink, + rmdir: MEMFS.node_ops.rmdir, + readdir: MEMFS.node_ops.readdir, + symlink: MEMFS.node_ops.symlink + }, + stream: { + llseek: MEMFS.stream_ops.llseek + } + }, + file: { + node: { + getattr: MEMFS.node_ops.getattr, + setattr: MEMFS.node_ops.setattr + }, + stream: { + llseek: MEMFS.stream_ops.llseek, + read: MEMFS.stream_ops.read, + write: MEMFS.stream_ops.write, + mmap: MEMFS.stream_ops.mmap, + msync: MEMFS.stream_ops.msync + } + }, + link: { + node: { + getattr: MEMFS.node_ops.getattr, + setattr: MEMFS.node_ops.setattr, + readlink: MEMFS.node_ops.readlink + }, + stream: {} + }, + chrdev: { + node: { + getattr: MEMFS.node_ops.getattr, + setattr: MEMFS.node_ops.setattr + }, + stream: FS.chrdev_stream_ops + } + }; + var node = FS.createNode(parent, name, mode, dev); + if (FS.isDir(node.mode)) { + node.node_ops = MEMFS.ops_table.dir.node; + node.stream_ops = MEMFS.ops_table.dir.stream; + node.contents = {}; + } else if (FS.isFile(node.mode)) { + node.node_ops = MEMFS.ops_table.file.node; + node.stream_ops = MEMFS.ops_table.file.stream; + node.usedBytes = 0; // The actual number of bytes used in the typed array, as opposed to contents.length which gives the whole capacity. + // When the byte data of the file is populated, this will point to either a typed array, or a normal JS array. Typed arrays are preferred + // for performance, and used by default. However, typed arrays are not resizable like normal JS arrays are, so there is a small disk size + // penalty involved for appending file writes that continuously grow a file similar to std::vector capacity vs used -scheme. + node.contents = null; + } else if (FS.isLink(node.mode)) { + node.node_ops = MEMFS.ops_table.link.node; + node.stream_ops = MEMFS.ops_table.link.stream; + } else if (FS.isChrdev(node.mode)) { + node.node_ops = MEMFS.ops_table.chrdev.node; + node.stream_ops = MEMFS.ops_table.chrdev.stream; + } + node.atime = node.mtime = node.ctime = Date.now(); + // add the new node to the parent + if (parent) { + parent.contents[name] = node; + parent.atime = parent.mtime = parent.ctime = node.atime; + } + return node; + }, + getFileDataAsTypedArray(node) { + if (!node.contents) return new Uint8Array(0); + if (node.contents.subarray) return node.contents.subarray(0, node.usedBytes); // Make sure to not return excess unused bytes. + return new Uint8Array(node.contents); + }, + expandFileStorage(node, newCapacity) { + var prevCapacity = node.contents ? node.contents.length : 0; + if (prevCapacity >= newCapacity) return; // No need to expand, the storage was already large enough. + // Don't expand strictly to the given requested limit if it's only a very small increase, but instead geometrically grow capacity. + // For small filesizes (<1MB), perform size*2 geometric increase, but for large sizes, do a much more conservative size*1.125 increase to + // avoid overshooting the allocation cap by a very large margin. + var CAPACITY_DOUBLING_MAX = 1024 * 1024; + newCapacity = Math.max(newCapacity, (prevCapacity * (prevCapacity < CAPACITY_DOUBLING_MAX ? 2.0 : 1.125)) >>> 0); + if (prevCapacity != 0) newCapacity = Math.max(newCapacity, 256); // At minimum allocate 256b for each file when expanding. + var oldContents = node.contents; + node.contents = new Uint8Array(newCapacity); // Allocate new storage. + if (node.usedBytes > 0) node.contents.set(oldContents.subarray(0, node.usedBytes), 0); // Copy old data over to the new storage. + }, + resizeFileStorage(node, newSize) { + if (node.usedBytes == newSize) return; + if (newSize == 0) { + node.contents = null; // Fully decommit when requesting a resize to zero. + node.usedBytes = 0; + } else { + var oldContents = node.contents; + node.contents = new Uint8Array(newSize); // Allocate new storage. + if (oldContents) { + node.contents.set(oldContents.subarray(0, Math.min(newSize, node.usedBytes))); // Copy old data over to the new storage. + } + node.usedBytes = newSize; + } + }, + node_ops:{ + getattr(node) { + var attr = {}; + // device numbers reuse inode numbers. + attr.dev = FS.isChrdev(node.mode) ? node.id : 1; + attr.ino = node.id; + attr.mode = node.mode; + attr.nlink = 1; + attr.uid = 0; + attr.gid = 0; + attr.rdev = node.rdev; + if (FS.isDir(node.mode)) { + attr.size = 4096; + } else if (FS.isFile(node.mode)) { + attr.size = node.usedBytes; + } else if (FS.isLink(node.mode)) { + attr.size = node.link.length; + } else { + attr.size = 0; + } + attr.atime = new Date(node.atime); + attr.mtime = new Date(node.mtime); + attr.ctime = new Date(node.ctime); + // NOTE: In our implementation, st_blocks = Math.ceil(st_size/st_blksize), + // but this is not required by the standard. + attr.blksize = 4096; + attr.blocks = Math.ceil(attr.size / attr.blksize); + return attr; + }, + setattr(node, attr) { + for (const key of ["mode", "atime", "mtime", "ctime"]) { + if (attr[key] != null) { + node[key] = attr[key]; + } + } + if (attr.size !== undefined) { + MEMFS.resizeFileStorage(node, attr.size); + } + }, + lookup(parent, name) { + throw new FS.ErrnoError(44); + }, + mknod(parent, name, mode, dev) { + return MEMFS.createNode(parent, name, mode, dev); + }, + rename(old_node, new_dir, new_name) { + var new_node; + try { + new_node = FS.lookupNode(new_dir, new_name); + } catch (e) {} + if (new_node) { + if (FS.isDir(old_node.mode)) { + // if we're overwriting a directory at new_name, make sure it's empty. + for (var i in new_node.contents) { + throw new FS.ErrnoError(55); + } + } + FS.hashRemoveNode(new_node); + } + // do the internal rewiring + delete old_node.parent.contents[old_node.name]; + new_dir.contents[new_name] = old_node; + old_node.name = new_name; + new_dir.ctime = new_dir.mtime = old_node.parent.ctime = old_node.parent.mtime = Date.now(); + }, + unlink(parent, name) { + delete parent.contents[name]; + parent.ctime = parent.mtime = Date.now(); + }, + rmdir(parent, name) { + var node = FS.lookupNode(parent, name); + for (var i in node.contents) { + throw new FS.ErrnoError(55); + } + delete parent.contents[name]; + parent.ctime = parent.mtime = Date.now(); + }, + readdir(node) { + return ['.', '..', ...Object.keys(node.contents)]; + }, + symlink(parent, newname, oldpath) { + var node = MEMFS.createNode(parent, newname, 0o777 | 40960, 0); + node.link = oldpath; + return node; + }, + readlink(node) { + if (!FS.isLink(node.mode)) { + throw new FS.ErrnoError(28); + } + return node.link; + }, + }, + stream_ops:{ + read(stream, buffer, offset, length, position) { + var contents = stream.node.contents; + if (position >= stream.node.usedBytes) return 0; + var size = Math.min(stream.node.usedBytes - position, length); + assert(size >= 0); + if (size > 8 && contents.subarray) { // non-trivial, and typed array + buffer.set(contents.subarray(position, position + size), offset); + } else { + for (var i = 0; i < size; i++) buffer[offset + i] = contents[position + i]; + } + return size; + }, + write(stream, buffer, offset, length, position, canOwn) { + // The data buffer should be a typed array view + assert(!(buffer instanceof ArrayBuffer)); + + if (!length) return 0; + var node = stream.node; + node.mtime = node.ctime = Date.now(); + + if (buffer.subarray && (!node.contents || node.contents.subarray)) { // This write is from a typed array to a typed array? + if (canOwn) { + assert(position === 0, 'canOwn must imply no weird position inside the file'); + node.contents = buffer.subarray(offset, offset + length); + node.usedBytes = length; + return length; + } else if (node.usedBytes === 0 && position === 0) { // If this is a simple first write to an empty file, do a fast set since we don't need to care about old data. + node.contents = buffer.slice(offset, offset + length); + node.usedBytes = length; + return length; + } else if (position + length <= node.usedBytes) { // Writing to an already allocated and used subrange of the file? + node.contents.set(buffer.subarray(offset, offset + length), position); + return length; + } + } + + // Appending to an existing file and we need to reallocate, or source data did not come as a typed array. + MEMFS.expandFileStorage(node, position+length); + if (node.contents.subarray && buffer.subarray) { + // Use typed array write which is available. + node.contents.set(buffer.subarray(offset, offset + length), position); + } else { + for (var i = 0; i < length; i++) { + node.contents[position + i] = buffer[offset + i]; // Or fall back to manual write if not. + } + } + node.usedBytes = Math.max(node.usedBytes, position + length); + return length; + }, + llseek(stream, offset, whence) { + var position = offset; + if (whence === 1) { + position += stream.position; + } else if (whence === 2) { + if (FS.isFile(stream.node.mode)) { + position += stream.node.usedBytes; + } + } + if (position < 0) { + throw new FS.ErrnoError(28); + } + return position; + }, + mmap(stream, length, position, prot, flags) { + if (!FS.isFile(stream.node.mode)) { + throw new FS.ErrnoError(43); + } + var ptr; + var allocated; + var contents = stream.node.contents; + // Only make a new copy when MAP_PRIVATE is specified. + if (!(flags & 2) && contents && contents.buffer === HEAP8.buffer) { + // We can't emulate MAP_SHARED when the file is not backed by the + // buffer we're mapping to (e.g. the HEAP buffer). + allocated = false; + ptr = contents.byteOffset; + } else { + allocated = true; + ptr = mmapAlloc(length); + if (!ptr) { + throw new FS.ErrnoError(48); + } + if (contents) { + // Try to avoid unnecessary slices. + if (position > 0 || position + length < contents.length) { + if (contents.subarray) { + contents = contents.subarray(position, position + length); + } else { + contents = Array.prototype.slice.call(contents, position, position + length); + } + } + HEAP8.set(contents, ptr); + } + } + return { ptr, allocated }; + }, + msync(stream, buffer, offset, length, mmapFlags) { + MEMFS.stream_ops.write(stream, buffer, 0, length, offset, false); + // should we check if bytesWritten and length are the same? + return 0; + }, + }, + }; + + var asyncLoad = async (url) => { + var arrayBuffer = await readAsync(url); + assert(arrayBuffer, `Loading data file "${url}" failed (no arrayBuffer).`); + return new Uint8Array(arrayBuffer); + }; + + + var FS_createDataFile = (parent, name, fileData, canRead, canWrite, canOwn) => { + FS.createDataFile(parent, name, fileData, canRead, canWrite, canOwn); + }; + + var preloadPlugins = Module['preloadPlugins'] || []; + var FS_handledByPreloadPlugin = (byteArray, fullname, finish, onerror) => { + // Ensure plugins are ready. + if (typeof Browser != 'undefined') Browser.init(); + + var handled = false; + preloadPlugins.forEach((plugin) => { + if (handled) return; + if (plugin['canHandle'](fullname)) { + plugin['handle'](byteArray, fullname, finish, onerror); + handled = true; + } + }); + return handled; + }; + var FS_createPreloadedFile = (parent, name, url, canRead, canWrite, onload, onerror, dontCreateFile, canOwn, preFinish) => { + // TODO we should allow people to just pass in a complete filename instead + // of parent and name being that we just join them anyways + var fullname = name ? PATH_FS.resolve(PATH.join2(parent, name)) : parent; + var dep = getUniqueRunDependency(`cp ${fullname}`); // might have several active requests for the same fullname + function processData(byteArray) { + function finish(byteArray) { + preFinish?.(); + if (!dontCreateFile) { + FS_createDataFile(parent, name, byteArray, canRead, canWrite, canOwn); + } + onload?.(); + removeRunDependency(dep); + } + if (FS_handledByPreloadPlugin(byteArray, fullname, finish, () => { + onerror?.(); + removeRunDependency(dep); + })) { + return; + } + finish(byteArray); + } + addRunDependency(dep); + if (typeof url == 'string') { + asyncLoad(url).then(processData, onerror); + } else { + processData(url); + } + }; + + var FS_modeStringToFlags = (str) => { + var flagModes = { + 'r': 0, + 'r+': 2, + 'w': 512 | 64 | 1, + 'w+': 512 | 64 | 2, + 'a': 1024 | 64 | 1, + 'a+': 1024 | 64 | 2, + }; + var flags = flagModes[str]; + if (typeof flags == 'undefined') { + throw new Error(`Unknown file open mode: ${str}`); + } + return flags; + }; + + var FS_getMode = (canRead, canWrite) => { + var mode = 0; + if (canRead) mode |= 292 | 73; + if (canWrite) mode |= 146; + return mode; + }; + + + + + + + /** + * Given a pointer 'ptr' to a null-terminated UTF8-encoded string in the + * emscripten HEAP, returns a copy of that string as a Javascript String object. + * + * @param {number} ptr + * @param {number=} maxBytesToRead - An optional length that specifies the + * maximum number of bytes to read. You can omit this parameter to scan the + * string until the first 0 byte. If maxBytesToRead is passed, and the string + * at [ptr, ptr+maxBytesToReadr[ contains a null byte in the middle, then the + * string will cut short at that byte index (i.e. maxBytesToRead will not + * produce a string of exact length [ptr, ptr+maxBytesToRead[) N.B. mixing + * frequent uses of UTF8ToString() with and without maxBytesToRead may throw + * JS JIT optimizations off, so it is worth to consider consistently using one + * @return {string} + */ + var UTF8ToString = (ptr, maxBytesToRead) => { + assert(typeof ptr == 'number', `UTF8ToString expects a number (got ${typeof ptr})`); + return ptr ? UTF8ArrayToString(HEAPU8, ptr, maxBytesToRead) : ''; + }; + + var strError = (errno) => UTF8ToString(_strerror(errno)); + + var ERRNO_CODES = { + 'EPERM': 63, + 'ENOENT': 44, + 'ESRCH': 71, + 'EINTR': 27, + 'EIO': 29, + 'ENXIO': 60, + 'E2BIG': 1, + 'ENOEXEC': 45, + 'EBADF': 8, + 'ECHILD': 12, + 'EAGAIN': 6, + 'EWOULDBLOCK': 6, + 'ENOMEM': 48, + 'EACCES': 2, + 'EFAULT': 21, + 'ENOTBLK': 105, + 'EBUSY': 10, + 'EEXIST': 20, + 'EXDEV': 75, + 'ENODEV': 43, + 'ENOTDIR': 54, + 'EISDIR': 31, + 'EINVAL': 28, + 'ENFILE': 41, + 'EMFILE': 33, + 'ENOTTY': 59, + 'ETXTBSY': 74, + 'EFBIG': 22, + 'ENOSPC': 51, + 'ESPIPE': 70, + 'EROFS': 69, + 'EMLINK': 34, + 'EPIPE': 64, + 'EDOM': 18, + 'ERANGE': 68, + 'ENOMSG': 49, + 'EIDRM': 24, + 'ECHRNG': 106, + 'EL2NSYNC': 156, + 'EL3HLT': 107, + 'EL3RST': 108, + 'ELNRNG': 109, + 'EUNATCH': 110, + 'ENOCSI': 111, + 'EL2HLT': 112, + 'EDEADLK': 16, + 'ENOLCK': 46, + 'EBADE': 113, + 'EBADR': 114, + 'EXFULL': 115, + 'ENOANO': 104, + 'EBADRQC': 103, + 'EBADSLT': 102, + 'EDEADLOCK': 16, + 'EBFONT': 101, + 'ENOSTR': 100, + 'ENODATA': 116, + 'ETIME': 117, + 'ENOSR': 118, + 'ENONET': 119, + 'ENOPKG': 120, + 'EREMOTE': 121, + 'ENOLINK': 47, + 'EADV': 122, + 'ESRMNT': 123, + 'ECOMM': 124, + 'EPROTO': 65, + 'EMULTIHOP': 36, + 'EDOTDOT': 125, + 'EBADMSG': 9, + 'ENOTUNIQ': 126, + 'EBADFD': 127, + 'EREMCHG': 128, + 'ELIBACC': 129, + 'ELIBBAD': 130, + 'ELIBSCN': 131, + 'ELIBMAX': 132, + 'ELIBEXEC': 133, + 'ENOSYS': 52, + 'ENOTEMPTY': 55, + 'ENAMETOOLONG': 37, + 'ELOOP': 32, + 'EOPNOTSUPP': 138, + 'EPFNOSUPPORT': 139, + 'ECONNRESET': 15, + 'ENOBUFS': 42, + 'EAFNOSUPPORT': 5, + 'EPROTOTYPE': 67, + 'ENOTSOCK': 57, + 'ENOPROTOOPT': 50, + 'ESHUTDOWN': 140, + 'ECONNREFUSED': 14, + 'EADDRINUSE': 3, + 'ECONNABORTED': 13, + 'ENETUNREACH': 40, + 'ENETDOWN': 38, + 'ETIMEDOUT': 73, + 'EHOSTDOWN': 142, + 'EHOSTUNREACH': 23, + 'EINPROGRESS': 26, + 'EALREADY': 7, + 'EDESTADDRREQ': 17, + 'EMSGSIZE': 35, + 'EPROTONOSUPPORT': 66, + 'ESOCKTNOSUPPORT': 137, + 'EADDRNOTAVAIL': 4, + 'ENETRESET': 39, + 'EISCONN': 30, + 'ENOTCONN': 53, + 'ETOOMANYREFS': 141, + 'EUSERS': 136, + 'EDQUOT': 19, + 'ESTALE': 72, + 'ENOTSUP': 138, + 'ENOMEDIUM': 148, + 'EILSEQ': 25, + 'EOVERFLOW': 61, + 'ECANCELED': 11, + 'ENOTRECOVERABLE': 56, + 'EOWNERDEAD': 62, + 'ESTRPIPE': 135, + }; + var FS = { + root:null, + mounts:[], + devices:{ + }, + streams:[], + nextInode:1, + nameTable:null, + currentPath:"/", + initialized:false, + ignorePermissions:true, + filesystems:null, + syncFSRequests:0, + readFiles:{ + }, + ErrnoError:class extends Error { + name = 'ErrnoError'; + // We set the `name` property to be able to identify `FS.ErrnoError` + // - the `name` is a standard ECMA-262 property of error objects. Kind of good to have it anyway. + // - when using PROXYFS, an error can come from an underlying FS + // as different FS objects have their own FS.ErrnoError each, + // the test `err instanceof FS.ErrnoError` won't detect an error coming from another filesystem, causing bugs. + // we'll use the reliable test `err.name == "ErrnoError"` instead + constructor(errno) { + super(runtimeInitialized ? strError(errno) : ''); + this.errno = errno; + for (var key in ERRNO_CODES) { + if (ERRNO_CODES[key] === errno) { + this.code = key; + break; + } + } + } + }, + FSStream:class { + shared = {}; + get object() { + return this.node; + } + set object(val) { + this.node = val; + } + get isRead() { + return (this.flags & 2097155) !== 1; + } + get isWrite() { + return (this.flags & 2097155) !== 0; + } + get isAppend() { + return (this.flags & 1024); + } + get flags() { + return this.shared.flags; + } + set flags(val) { + this.shared.flags = val; + } + get position() { + return this.shared.position; + } + set position(val) { + this.shared.position = val; + } + }, + FSNode:class { + node_ops = {}; + stream_ops = {}; + readMode = 292 | 73; + writeMode = 146; + mounted = null; + constructor(parent, name, mode, rdev) { + if (!parent) { + parent = this; // root node sets parent to itself + } + this.parent = parent; + this.mount = parent.mount; + this.id = FS.nextInode++; + this.name = name; + this.mode = mode; + this.rdev = rdev; + this.atime = this.mtime = this.ctime = Date.now(); + } + get read() { + return (this.mode & this.readMode) === this.readMode; + } + set read(val) { + val ? this.mode |= this.readMode : this.mode &= ~this.readMode; + } + get write() { + return (this.mode & this.writeMode) === this.writeMode; + } + set write(val) { + val ? this.mode |= this.writeMode : this.mode &= ~this.writeMode; + } + get isFolder() { + return FS.isDir(this.mode); + } + get isDevice() { + return FS.isChrdev(this.mode); + } + }, + lookupPath(path, opts = {}) { + if (!path) { + throw new FS.ErrnoError(44); + } + opts.follow_mount ??= true + + if (!PATH.isAbs(path)) { + path = FS.cwd() + '/' + path; + } + + // limit max consecutive symlinks to 40 (SYMLOOP_MAX). + linkloop: for (var nlinks = 0; nlinks < 40; nlinks++) { + // split the absolute path + var parts = path.split('/').filter((p) => !!p); + + // start at the root + var current = FS.root; + var current_path = '/'; + + for (var i = 0; i < parts.length; i++) { + var islast = (i === parts.length-1); + if (islast && opts.parent) { + // stop resolving + break; + } + + if (parts[i] === '.') { + continue; + } + + if (parts[i] === '..') { + current_path = PATH.dirname(current_path); + current = current.parent; + continue; + } + + current_path = PATH.join2(current_path, parts[i]); + try { + current = FS.lookupNode(current, parts[i]); + } catch (e) { + // if noent_okay is true, suppress a ENOENT in the last component + // and return an object with an undefined node. This is needed for + // resolving symlinks in the path when creating a file. + if ((e?.errno === 44) && islast && opts.noent_okay) { + return { path: current_path }; + } + throw e; + } + + // jump to the mount's root node if this is a mountpoint + if (FS.isMountpoint(current) && (!islast || opts.follow_mount)) { + current = current.mounted.root; + } + + // by default, lookupPath will not follow a symlink if it is the final path component. + // setting opts.follow = true will override this behavior. + if (FS.isLink(current.mode) && (!islast || opts.follow)) { + if (!current.node_ops.readlink) { + throw new FS.ErrnoError(52); + } + var link = current.node_ops.readlink(current); + if (!PATH.isAbs(link)) { + link = PATH.dirname(current_path) + '/' + link; + } + path = link + '/' + parts.slice(i + 1).join('/'); + continue linkloop; + } + } + return { path: current_path, node: current }; + } + throw new FS.ErrnoError(32); + }, + getPath(node) { + var path; + while (true) { + if (FS.isRoot(node)) { + var mount = node.mount.mountpoint; + if (!path) return mount; + return mount[mount.length-1] !== '/' ? `${mount}/${path}` : mount + path; + } + path = path ? `${node.name}/${path}` : node.name; + node = node.parent; + } + }, + hashName(parentid, name) { + var hash = 0; + + for (var i = 0; i < name.length; i++) { + hash = ((hash << 5) - hash + name.charCodeAt(i)) | 0; + } + return ((parentid + hash) >>> 0) % FS.nameTable.length; + }, + hashAddNode(node) { + var hash = FS.hashName(node.parent.id, node.name); + node.name_next = FS.nameTable[hash]; + FS.nameTable[hash] = node; + }, + hashRemoveNode(node) { + var hash = FS.hashName(node.parent.id, node.name); + if (FS.nameTable[hash] === node) { + FS.nameTable[hash] = node.name_next; + } else { + var current = FS.nameTable[hash]; + while (current) { + if (current.name_next === node) { + current.name_next = node.name_next; + break; + } + current = current.name_next; + } + } + }, + lookupNode(parent, name) { + var errCode = FS.mayLookup(parent); + if (errCode) { + throw new FS.ErrnoError(errCode); + } + var hash = FS.hashName(parent.id, name); + for (var node = FS.nameTable[hash]; node; node = node.name_next) { + var nodeName = node.name; + if (node.parent.id === parent.id && nodeName === name) { + return node; + } + } + // if we failed to find it in the cache, call into the VFS + return FS.lookup(parent, name); + }, + createNode(parent, name, mode, rdev) { + assert(typeof parent == 'object') + var node = new FS.FSNode(parent, name, mode, rdev); + + FS.hashAddNode(node); + + return node; + }, + destroyNode(node) { + FS.hashRemoveNode(node); + }, + isRoot(node) { + return node === node.parent; + }, + isMountpoint(node) { + return !!node.mounted; + }, + isFile(mode) { + return (mode & 61440) === 32768; + }, + isDir(mode) { + return (mode & 61440) === 16384; + }, + isLink(mode) { + return (mode & 61440) === 40960; + }, + isChrdev(mode) { + return (mode & 61440) === 8192; + }, + isBlkdev(mode) { + return (mode & 61440) === 24576; + }, + isFIFO(mode) { + return (mode & 61440) === 4096; + }, + isSocket(mode) { + return (mode & 49152) === 49152; + }, + flagsToPermissionString(flag) { + var perms = ['r', 'w', 'rw'][flag & 3]; + if ((flag & 512)) { + perms += 'w'; + } + return perms; + }, + nodePermissions(node, perms) { + if (FS.ignorePermissions) { + return 0; + } + // return 0 if any user, group or owner bits are set. + if (perms.includes('r') && !(node.mode & 292)) { + return 2; + } else if (perms.includes('w') && !(node.mode & 146)) { + return 2; + } else if (perms.includes('x') && !(node.mode & 73)) { + return 2; + } + return 0; + }, + mayLookup(dir) { + if (!FS.isDir(dir.mode)) return 54; + var errCode = FS.nodePermissions(dir, 'x'); + if (errCode) return errCode; + if (!dir.node_ops.lookup) return 2; + return 0; + }, + mayCreate(dir, name) { + if (!FS.isDir(dir.mode)) { + return 54; + } + try { + var node = FS.lookupNode(dir, name); + return 20; + } catch (e) { + } + return FS.nodePermissions(dir, 'wx'); + }, + mayDelete(dir, name, isdir) { + var node; + try { + node = FS.lookupNode(dir, name); + } catch (e) { + return e.errno; + } + var errCode = FS.nodePermissions(dir, 'wx'); + if (errCode) { + return errCode; + } + if (isdir) { + if (!FS.isDir(node.mode)) { + return 54; + } + if (FS.isRoot(node) || FS.getPath(node) === FS.cwd()) { + return 10; + } + } else { + if (FS.isDir(node.mode)) { + return 31; + } + } + return 0; + }, + mayOpen(node, flags) { + if (!node) { + return 44; + } + if (FS.isLink(node.mode)) { + return 32; + } else if (FS.isDir(node.mode)) { + if (FS.flagsToPermissionString(flags) !== 'r' // opening for write + || (flags & (512 | 64))) { // TODO: check for O_SEARCH? (== search for dir only) + return 31; + } + } + return FS.nodePermissions(node, FS.flagsToPermissionString(flags)); + }, + checkOpExists(op, err) { + if (!op) { + throw new FS.ErrnoError(err); + } + return op; + }, + MAX_OPEN_FDS:4096, + nextfd() { + for (var fd = 0; fd <= FS.MAX_OPEN_FDS; fd++) { + if (!FS.streams[fd]) { + return fd; + } + } + throw new FS.ErrnoError(33); + }, + getStreamChecked(fd) { + var stream = FS.getStream(fd); + if (!stream) { + throw new FS.ErrnoError(8); + } + return stream; + }, + getStream:(fd) => FS.streams[fd], + createStream(stream, fd = -1) { + assert(fd >= -1); + + // clone it, so we can return an instance of FSStream + stream = Object.assign(new FS.FSStream(), stream); + if (fd == -1) { + fd = FS.nextfd(); + } + stream.fd = fd; + FS.streams[fd] = stream; + return stream; + }, + closeStream(fd) { + FS.streams[fd] = null; + }, + dupStream(origStream, fd = -1) { + var stream = FS.createStream(origStream, fd); + stream.stream_ops?.dup?.(stream); + return stream; + }, + doSetAttr(stream, node, attr) { + var setattr = stream?.stream_ops.setattr; + var arg = setattr ? stream : node; + setattr ??= node.node_ops.setattr; + FS.checkOpExists(setattr, 63) + setattr(arg, attr); + }, + chrdev_stream_ops:{ + open(stream) { + var device = FS.getDevice(stream.node.rdev); + // override node's stream ops with the device's + stream.stream_ops = device.stream_ops; + // forward the open call + stream.stream_ops.open?.(stream); + }, + llseek() { + throw new FS.ErrnoError(70); + }, + }, + major:(dev) => ((dev) >> 8), + minor:(dev) => ((dev) & 0xff), + makedev:(ma, mi) => ((ma) << 8 | (mi)), + registerDevice(dev, ops) { + FS.devices[dev] = { stream_ops: ops }; + }, + getDevice:(dev) => FS.devices[dev], + getMounts(mount) { + var mounts = []; + var check = [mount]; + + while (check.length) { + var m = check.pop(); + + mounts.push(m); + + check.push(...m.mounts); + } + + return mounts; + }, + syncfs(populate, callback) { + if (typeof populate == 'function') { + callback = populate; + populate = false; + } + + FS.syncFSRequests++; + + if (FS.syncFSRequests > 1) { + err(`warning: ${FS.syncFSRequests} FS.syncfs operations in flight at once, probably just doing extra work`); + } + + var mounts = FS.getMounts(FS.root.mount); + var completed = 0; + + function doCallback(errCode) { + assert(FS.syncFSRequests > 0); + FS.syncFSRequests--; + return callback(errCode); + } + + function done(errCode) { + if (errCode) { + if (!done.errored) { + done.errored = true; + return doCallback(errCode); + } + return; + } + if (++completed >= mounts.length) { + doCallback(null); + } + }; + + // sync all mounts + mounts.forEach((mount) => { + if (!mount.type.syncfs) { + return done(null); + } + mount.type.syncfs(mount, populate, done); + }); + }, + mount(type, opts, mountpoint) { + if (typeof type == 'string') { + // The filesystem was not included, and instead we have an error + // message stored in the variable. + throw type; + } + var root = mountpoint === '/'; + var pseudo = !mountpoint; + var node; + + if (root && FS.root) { + throw new FS.ErrnoError(10); + } else if (!root && !pseudo) { + var lookup = FS.lookupPath(mountpoint, { follow_mount: false }); + + mountpoint = lookup.path; // use the absolute path + node = lookup.node; + + if (FS.isMountpoint(node)) { + throw new FS.ErrnoError(10); + } + + if (!FS.isDir(node.mode)) { + throw new FS.ErrnoError(54); + } + } + + var mount = { + type, + opts, + mountpoint, + mounts: [] + }; + + // create a root node for the fs + var mountRoot = type.mount(mount); + mountRoot.mount = mount; + mount.root = mountRoot; + + if (root) { + FS.root = mountRoot; + } else if (node) { + // set as a mountpoint + node.mounted = mount; + + // add the new mount to the current mount's children + if (node.mount) { + node.mount.mounts.push(mount); + } + } + + return mountRoot; + }, + unmount(mountpoint) { + var lookup = FS.lookupPath(mountpoint, { follow_mount: false }); + + if (!FS.isMountpoint(lookup.node)) { + throw new FS.ErrnoError(28); + } + + // destroy the nodes for this mount, and all its child mounts + var node = lookup.node; + var mount = node.mounted; + var mounts = FS.getMounts(mount); + + Object.keys(FS.nameTable).forEach((hash) => { + var current = FS.nameTable[hash]; + + while (current) { + var next = current.name_next; + + if (mounts.includes(current.mount)) { + FS.destroyNode(current); + } + + current = next; + } + }); + + // no longer a mountpoint + node.mounted = null; + + // remove this mount from the child mounts + var idx = node.mount.mounts.indexOf(mount); + assert(idx !== -1); + node.mount.mounts.splice(idx, 1); + }, + lookup(parent, name) { + return parent.node_ops.lookup(parent, name); + }, + mknod(path, mode, dev) { + var lookup = FS.lookupPath(path, { parent: true }); + var parent = lookup.node; + var name = PATH.basename(path); + if (!name) { + throw new FS.ErrnoError(28); + } + if (name === '.' || name === '..') { + throw new FS.ErrnoError(20); + } + var errCode = FS.mayCreate(parent, name); + if (errCode) { + throw new FS.ErrnoError(errCode); + } + if (!parent.node_ops.mknod) { + throw new FS.ErrnoError(63); + } + return parent.node_ops.mknod(parent, name, mode, dev); + }, + statfs(path) { + return FS.statfsNode(FS.lookupPath(path, {follow: true}).node); + }, + statfsStream(stream) { + // We keep a separate statfsStream function because noderawfs overrides + // it. In noderawfs, stream.node is sometimes null. Instead, we need to + // look at stream.path. + return FS.statfsNode(stream.node); + }, + statfsNode(node) { + // NOTE: None of the defaults here are true. We're just returning safe and + // sane values. Currently nodefs and rawfs replace these defaults, + // other file systems leave them alone. + var rtn = { + bsize: 4096, + frsize: 4096, + blocks: 1e6, + bfree: 5e5, + bavail: 5e5, + files: FS.nextInode, + ffree: FS.nextInode - 1, + fsid: 42, + flags: 2, + namelen: 255, + }; + + if (node.node_ops.statfs) { + Object.assign(rtn, node.node_ops.statfs(node.mount.opts.root)); + } + return rtn; + }, + create(path, mode = 0o666) { + mode &= 4095; + mode |= 32768; + return FS.mknod(path, mode, 0); + }, + mkdir(path, mode = 0o777) { + mode &= 511 | 512; + mode |= 16384; + return FS.mknod(path, mode, 0); + }, + mkdirTree(path, mode) { + var dirs = path.split('/'); + var d = ''; + for (var dir of dirs) { + if (!dir) continue; + if (d || PATH.isAbs(path)) d += '/'; + d += dir; + try { + FS.mkdir(d, mode); + } catch(e) { + if (e.errno != 20) throw e; + } + } + }, + mkdev(path, mode, dev) { + if (typeof dev == 'undefined') { + dev = mode; + mode = 0o666; + } + mode |= 8192; + return FS.mknod(path, mode, dev); + }, + symlink(oldpath, newpath) { + if (!PATH_FS.resolve(oldpath)) { + throw new FS.ErrnoError(44); + } + var lookup = FS.lookupPath(newpath, { parent: true }); + var parent = lookup.node; + if (!parent) { + throw new FS.ErrnoError(44); + } + var newname = PATH.basename(newpath); + var errCode = FS.mayCreate(parent, newname); + if (errCode) { + throw new FS.ErrnoError(errCode); + } + if (!parent.node_ops.symlink) { + throw new FS.ErrnoError(63); + } + return parent.node_ops.symlink(parent, newname, oldpath); + }, + rename(old_path, new_path) { + var old_dirname = PATH.dirname(old_path); + var new_dirname = PATH.dirname(new_path); + var old_name = PATH.basename(old_path); + var new_name = PATH.basename(new_path); + // parents must exist + var lookup, old_dir, new_dir; + + // let the errors from non existent directories percolate up + lookup = FS.lookupPath(old_path, { parent: true }); + old_dir = lookup.node; + lookup = FS.lookupPath(new_path, { parent: true }); + new_dir = lookup.node; + + if (!old_dir || !new_dir) throw new FS.ErrnoError(44); + // need to be part of the same mount + if (old_dir.mount !== new_dir.mount) { + throw new FS.ErrnoError(75); + } + // source must exist + var old_node = FS.lookupNode(old_dir, old_name); + // old path should not be an ancestor of the new path + var relative = PATH_FS.relative(old_path, new_dirname); + if (relative.charAt(0) !== '.') { + throw new FS.ErrnoError(28); + } + // new path should not be an ancestor of the old path + relative = PATH_FS.relative(new_path, old_dirname); + if (relative.charAt(0) !== '.') { + throw new FS.ErrnoError(55); + } + // see if the new path already exists + var new_node; + try { + new_node = FS.lookupNode(new_dir, new_name); + } catch (e) { + // not fatal + } + // early out if nothing needs to change + if (old_node === new_node) { + return; + } + // we'll need to delete the old entry + var isdir = FS.isDir(old_node.mode); + var errCode = FS.mayDelete(old_dir, old_name, isdir); + if (errCode) { + throw new FS.ErrnoError(errCode); + } + // need delete permissions if we'll be overwriting. + // need create permissions if new doesn't already exist. + errCode = new_node ? + FS.mayDelete(new_dir, new_name, isdir) : + FS.mayCreate(new_dir, new_name); + if (errCode) { + throw new FS.ErrnoError(errCode); + } + if (!old_dir.node_ops.rename) { + throw new FS.ErrnoError(63); + } + if (FS.isMountpoint(old_node) || (new_node && FS.isMountpoint(new_node))) { + throw new FS.ErrnoError(10); + } + // if we are going to change the parent, check write permissions + if (new_dir !== old_dir) { + errCode = FS.nodePermissions(old_dir, 'w'); + if (errCode) { + throw new FS.ErrnoError(errCode); + } + } + // remove the node from the lookup hash + FS.hashRemoveNode(old_node); + // do the underlying fs rename + try { + old_dir.node_ops.rename(old_node, new_dir, new_name); + // update old node (we do this here to avoid each backend + // needing to) + old_node.parent = new_dir; + } catch (e) { + throw e; + } finally { + // add the node back to the hash (in case node_ops.rename + // changed its name) + FS.hashAddNode(old_node); + } + }, + rmdir(path) { + var lookup = FS.lookupPath(path, { parent: true }); + var parent = lookup.node; + var name = PATH.basename(path); + var node = FS.lookupNode(parent, name); + var errCode = FS.mayDelete(parent, name, true); + if (errCode) { + throw new FS.ErrnoError(errCode); + } + if (!parent.node_ops.rmdir) { + throw new FS.ErrnoError(63); + } + if (FS.isMountpoint(node)) { + throw new FS.ErrnoError(10); + } + parent.node_ops.rmdir(parent, name); + FS.destroyNode(node); + }, + readdir(path) { + var lookup = FS.lookupPath(path, { follow: true }); + var node = lookup.node; + var readdir = FS.checkOpExists(node.node_ops.readdir, 54); + return readdir(node); + }, + unlink(path) { + var lookup = FS.lookupPath(path, { parent: true }); + var parent = lookup.node; + if (!parent) { + throw new FS.ErrnoError(44); + } + var name = PATH.basename(path); + var node = FS.lookupNode(parent, name); + var errCode = FS.mayDelete(parent, name, false); + if (errCode) { + // According to POSIX, we should map EISDIR to EPERM, but + // we instead do what Linux does (and we must, as we use + // the musl linux libc). + throw new FS.ErrnoError(errCode); + } + if (!parent.node_ops.unlink) { + throw new FS.ErrnoError(63); + } + if (FS.isMountpoint(node)) { + throw new FS.ErrnoError(10); + } + parent.node_ops.unlink(parent, name); + FS.destroyNode(node); + }, + readlink(path) { + var lookup = FS.lookupPath(path); + var link = lookup.node; + if (!link) { + throw new FS.ErrnoError(44); + } + if (!link.node_ops.readlink) { + throw new FS.ErrnoError(28); + } + return link.node_ops.readlink(link); + }, + stat(path, dontFollow) { + var lookup = FS.lookupPath(path, { follow: !dontFollow }); + var node = lookup.node; + var getattr = FS.checkOpExists(node.node_ops.getattr, 63); + return getattr(node); + }, + fstat(fd) { + var stream = FS.getStreamChecked(fd); + var node = stream.node; + var getattr = stream.stream_ops.getattr; + var arg = getattr ? stream : node; + getattr ??= node.node_ops.getattr; + FS.checkOpExists(getattr, 63) + return getattr(arg); + }, + lstat(path) { + return FS.stat(path, true); + }, + doChmod(stream, node, mode, dontFollow) { + FS.doSetAttr(stream, node, { + mode: (mode & 4095) | (node.mode & ~4095), + ctime: Date.now(), + dontFollow + }); + }, + chmod(path, mode, dontFollow) { + var node; + if (typeof path == 'string') { + var lookup = FS.lookupPath(path, { follow: !dontFollow }); + node = lookup.node; + } else { + node = path; + } + FS.doChmod(null, node, mode, dontFollow); + }, + lchmod(path, mode) { + FS.chmod(path, mode, true); + }, + fchmod(fd, mode) { + var stream = FS.getStreamChecked(fd); + FS.doChmod(stream, stream.node, mode, false); + }, + doChown(stream, node, dontFollow) { + FS.doSetAttr(stream, node, { + timestamp: Date.now(), + dontFollow + // we ignore the uid / gid for now + }); + }, + chown(path, uid, gid, dontFollow) { + var node; + if (typeof path == 'string') { + var lookup = FS.lookupPath(path, { follow: !dontFollow }); + node = lookup.node; + } else { + node = path; + } + FS.doChown(null, node, dontFollow); + }, + lchown(path, uid, gid) { + FS.chown(path, uid, gid, true); + }, + fchown(fd, uid, gid) { + var stream = FS.getStreamChecked(fd); + FS.doChown(stream, stream.node, false); + }, + doTruncate(stream, node, len) { + if (FS.isDir(node.mode)) { + throw new FS.ErrnoError(31); + } + if (!FS.isFile(node.mode)) { + throw new FS.ErrnoError(28); + } + var errCode = FS.nodePermissions(node, 'w'); + if (errCode) { + throw new FS.ErrnoError(errCode); + } + FS.doSetAttr(stream, node, { + size: len, + timestamp: Date.now() + }); + }, + truncate(path, len) { + if (len < 0) { + throw new FS.ErrnoError(28); + } + var node; + if (typeof path == 'string') { + var lookup = FS.lookupPath(path, { follow: true }); + node = lookup.node; + } else { + node = path; + } + FS.doTruncate(null, node, len); + }, + ftruncate(fd, len) { + var stream = FS.getStreamChecked(fd); + if (len < 0 || (stream.flags & 2097155) === 0) { + throw new FS.ErrnoError(28); + } + FS.doTruncate(stream, stream.node, len); + }, + utime(path, atime, mtime) { + var lookup = FS.lookupPath(path, { follow: true }); + var node = lookup.node; + var setattr = FS.checkOpExists(node.node_ops.setattr, 63); + setattr(node, { + atime: atime, + mtime: mtime + }); + }, + open(path, flags, mode = 0o666) { + if (path === "") { + throw new FS.ErrnoError(44); + } + flags = typeof flags == 'string' ? FS_modeStringToFlags(flags) : flags; + if ((flags & 64)) { + mode = (mode & 4095) | 32768; + } else { + mode = 0; + } + var node; + var isDirPath; + if (typeof path == 'object') { + node = path; + } else { + isDirPath = path.endsWith("/"); + // noent_okay makes it so that if the final component of the path + // doesn't exist, lookupPath returns `node: undefined`. `path` will be + // updated to point to the target of all symlinks. + var lookup = FS.lookupPath(path, { + follow: !(flags & 131072), + noent_okay: true + }); + node = lookup.node; + path = lookup.path; + } + // perhaps we need to create the node + var created = false; + if ((flags & 64)) { + if (node) { + // if O_CREAT and O_EXCL are set, error out if the node already exists + if ((flags & 128)) { + throw new FS.ErrnoError(20); + } + } else if (isDirPath) { + throw new FS.ErrnoError(31); + } else { + // node doesn't exist, try to create it + // Ignore the permission bits here to ensure we can `open` this new + // file below. We use chmod below the apply the permissions once the + // file is open. + node = FS.mknod(path, mode | 0o777, 0); + created = true; + } + } + if (!node) { + throw new FS.ErrnoError(44); + } + // can't truncate a device + if (FS.isChrdev(node.mode)) { + flags &= ~512; + } + // if asked only for a directory, then this must be one + if ((flags & 65536) && !FS.isDir(node.mode)) { + throw new FS.ErrnoError(54); + } + // check permissions, if this is not a file we just created now (it is ok to + // create and write to a file with read-only permissions; it is read-only + // for later use) + if (!created) { + var errCode = FS.mayOpen(node, flags); + if (errCode) { + throw new FS.ErrnoError(errCode); + } + } + // do truncation if necessary + if ((flags & 512) && !created) { + FS.truncate(node, 0); + } + // we've already handled these, don't pass down to the underlying vfs + flags &= ~(128 | 512 | 131072); + + // register the stream with the filesystem + var stream = FS.createStream({ + node, + path: FS.getPath(node), // we want the absolute path to the node + flags, + seekable: true, + position: 0, + stream_ops: node.stream_ops, + // used by the file family libc calls (fopen, fwrite, ferror, etc.) + ungotten: [], + error: false + }); + // call the new stream's open function + if (stream.stream_ops.open) { + stream.stream_ops.open(stream); + } + if (created) { + FS.chmod(node, mode & 0o777); + } + if (Module['logReadFiles'] && !(flags & 1)) { + if (!(path in FS.readFiles)) { + FS.readFiles[path] = 1; + } + } + return stream; + }, + close(stream) { + if (FS.isClosed(stream)) { + throw new FS.ErrnoError(8); + } + if (stream.getdents) stream.getdents = null; // free readdir state + try { + if (stream.stream_ops.close) { + stream.stream_ops.close(stream); + } + } catch (e) { + throw e; + } finally { + FS.closeStream(stream.fd); + } + stream.fd = null; + }, + isClosed(stream) { + return stream.fd === null; + }, + llseek(stream, offset, whence) { + if (FS.isClosed(stream)) { + throw new FS.ErrnoError(8); + } + if (!stream.seekable || !stream.stream_ops.llseek) { + throw new FS.ErrnoError(70); + } + if (whence != 0 && whence != 1 && whence != 2) { + throw new FS.ErrnoError(28); + } + stream.position = stream.stream_ops.llseek(stream, offset, whence); + stream.ungotten = []; + return stream.position; + }, + read(stream, buffer, offset, length, position) { + assert(offset >= 0); + if (length < 0 || position < 0) { + throw new FS.ErrnoError(28); + } + if (FS.isClosed(stream)) { + throw new FS.ErrnoError(8); + } + if ((stream.flags & 2097155) === 1) { + throw new FS.ErrnoError(8); + } + if (FS.isDir(stream.node.mode)) { + throw new FS.ErrnoError(31); + } + if (!stream.stream_ops.read) { + throw new FS.ErrnoError(28); + } + var seeking = typeof position != 'undefined'; + if (!seeking) { + position = stream.position; + } else if (!stream.seekable) { + throw new FS.ErrnoError(70); + } + var bytesRead = stream.stream_ops.read(stream, buffer, offset, length, position); + if (!seeking) stream.position += bytesRead; + return bytesRead; + }, + write(stream, buffer, offset, length, position, canOwn) { + assert(offset >= 0); + if (length < 0 || position < 0) { + throw new FS.ErrnoError(28); + } + if (FS.isClosed(stream)) { + throw new FS.ErrnoError(8); + } + if ((stream.flags & 2097155) === 0) { + throw new FS.ErrnoError(8); + } + if (FS.isDir(stream.node.mode)) { + throw new FS.ErrnoError(31); + } + if (!stream.stream_ops.write) { + throw new FS.ErrnoError(28); + } + if (stream.seekable && stream.flags & 1024) { + // seek to the end before writing in append mode + FS.llseek(stream, 0, 2); + } + var seeking = typeof position != 'undefined'; + if (!seeking) { + position = stream.position; + } else if (!stream.seekable) { + throw new FS.ErrnoError(70); + } + var bytesWritten = stream.stream_ops.write(stream, buffer, offset, length, position, canOwn); + if (!seeking) stream.position += bytesWritten; + return bytesWritten; + }, + mmap(stream, length, position, prot, flags) { + // User requests writing to file (prot & PROT_WRITE != 0). + // Checking if we have permissions to write to the file unless + // MAP_PRIVATE flag is set. According to POSIX spec it is possible + // to write to file opened in read-only mode with MAP_PRIVATE flag, + // as all modifications will be visible only in the memory of + // the current process. + if ((prot & 2) !== 0 + && (flags & 2) === 0 + && (stream.flags & 2097155) !== 2) { + throw new FS.ErrnoError(2); + } + if ((stream.flags & 2097155) === 1) { + throw new FS.ErrnoError(2); + } + if (!stream.stream_ops.mmap) { + throw new FS.ErrnoError(43); + } + if (!length) { + throw new FS.ErrnoError(28); + } + return stream.stream_ops.mmap(stream, length, position, prot, flags); + }, + msync(stream, buffer, offset, length, mmapFlags) { + assert(offset >= 0); + if (!stream.stream_ops.msync) { + return 0; + } + return stream.stream_ops.msync(stream, buffer, offset, length, mmapFlags); + }, + ioctl(stream, cmd, arg) { + if (!stream.stream_ops.ioctl) { + throw new FS.ErrnoError(59); + } + return stream.stream_ops.ioctl(stream, cmd, arg); + }, + readFile(path, opts = {}) { + opts.flags = opts.flags || 0; + opts.encoding = opts.encoding || 'binary'; + if (opts.encoding !== 'utf8' && opts.encoding !== 'binary') { + throw new Error(`Invalid encoding type "${opts.encoding}"`); + } + var ret; + var stream = FS.open(path, opts.flags); + var stat = FS.stat(path); + var length = stat.size; + var buf = new Uint8Array(length); + FS.read(stream, buf, 0, length, 0); + if (opts.encoding === 'utf8') { + ret = UTF8ArrayToString(buf); + } else if (opts.encoding === 'binary') { + ret = buf; + } + FS.close(stream); + return ret; + }, + writeFile(path, data, opts = {}) { + opts.flags = opts.flags || 577; + var stream = FS.open(path, opts.flags, opts.mode); + if (typeof data == 'string') { + var buf = new Uint8Array(lengthBytesUTF8(data)+1); + var actualNumBytes = stringToUTF8Array(data, buf, 0, buf.length); + FS.write(stream, buf, 0, actualNumBytes, undefined, opts.canOwn); + } else if (ArrayBuffer.isView(data)) { + FS.write(stream, data, 0, data.byteLength, undefined, opts.canOwn); + } else { + throw new Error('Unsupported data type'); + } + FS.close(stream); + }, + cwd:() => FS.currentPath, + chdir(path) { + var lookup = FS.lookupPath(path, { follow: true }); + if (lookup.node === null) { + throw new FS.ErrnoError(44); + } + if (!FS.isDir(lookup.node.mode)) { + throw new FS.ErrnoError(54); + } + var errCode = FS.nodePermissions(lookup.node, 'x'); + if (errCode) { + throw new FS.ErrnoError(errCode); + } + FS.currentPath = lookup.path; + }, + createDefaultDirectories() { + FS.mkdir('/tmp'); + FS.mkdir('/home'); + FS.mkdir('/home/web_user'); + }, + createDefaultDevices() { + // create /dev + FS.mkdir('/dev'); + // setup /dev/null + FS.registerDevice(FS.makedev(1, 3), { + read: () => 0, + write: (stream, buffer, offset, length, pos) => length, + llseek: () => 0, + }); + FS.mkdev('/dev/null', FS.makedev(1, 3)); + // setup /dev/tty and /dev/tty1 + // stderr needs to print output using err() rather than out() + // so we register a second tty just for it. + TTY.register(FS.makedev(5, 0), TTY.default_tty_ops); + TTY.register(FS.makedev(6, 0), TTY.default_tty1_ops); + FS.mkdev('/dev/tty', FS.makedev(5, 0)); + FS.mkdev('/dev/tty1', FS.makedev(6, 0)); + // setup /dev/[u]random + // use a buffer to avoid overhead of individual crypto calls per byte + var randomBuffer = new Uint8Array(1024), randomLeft = 0; + var randomByte = () => { + if (randomLeft === 0) { + randomFill(randomBuffer); + randomLeft = randomBuffer.byteLength; + } + return randomBuffer[--randomLeft]; + }; + FS.createDevice('/dev', 'random', randomByte); + FS.createDevice('/dev', 'urandom', randomByte); + // we're not going to emulate the actual shm device, + // just create the tmp dirs that reside in it commonly + FS.mkdir('/dev/shm'); + FS.mkdir('/dev/shm/tmp'); + }, + createSpecialDirectories() { + // create /proc/self/fd which allows /proc/self/fd/6 => readlink gives the + // name of the stream for fd 6 (see test_unistd_ttyname) + FS.mkdir('/proc'); + var proc_self = FS.mkdir('/proc/self'); + FS.mkdir('/proc/self/fd'); + FS.mount({ + mount() { + var node = FS.createNode(proc_self, 'fd', 16895, 73); + node.stream_ops = { + llseek: MEMFS.stream_ops.llseek, + }; + node.node_ops = { + lookup(parent, name) { + var fd = +name; + var stream = FS.getStreamChecked(fd); + var ret = { + parent: null, + mount: { mountpoint: 'fake' }, + node_ops: { readlink: () => stream.path }, + id: fd + 1, + }; + ret.parent = ret; // make it look like a simple root node + return ret; + }, + readdir() { + return Array.from(FS.streams.entries()) + .filter(([k, v]) => v) + .map(([k, v]) => k.toString()); + } + }; + return node; + } + }, {}, '/proc/self/fd'); + }, + createStandardStreams(input, output, error) { + // TODO deprecate the old functionality of a single + // input / output callback and that utilizes FS.createDevice + // and instead require a unique set of stream ops + + // by default, we symlink the standard streams to the + // default tty devices. however, if the standard streams + // have been overwritten we create a unique device for + // them instead. + if (input) { + FS.createDevice('/dev', 'stdin', input); + } else { + FS.symlink('/dev/tty', '/dev/stdin'); + } + if (output) { + FS.createDevice('/dev', 'stdout', null, output); + } else { + FS.symlink('/dev/tty', '/dev/stdout'); + } + if (error) { + FS.createDevice('/dev', 'stderr', null, error); + } else { + FS.symlink('/dev/tty1', '/dev/stderr'); + } + + // open default streams for the stdin, stdout and stderr devices + var stdin = FS.open('/dev/stdin', 0); + var stdout = FS.open('/dev/stdout', 1); + var stderr = FS.open('/dev/stderr', 1); + assert(stdin.fd === 0, `invalid handle for stdin (${stdin.fd})`); + assert(stdout.fd === 1, `invalid handle for stdout (${stdout.fd})`); + assert(stderr.fd === 2, `invalid handle for stderr (${stderr.fd})`); + }, + staticInit() { + FS.nameTable = new Array(4096); + + FS.mount(MEMFS, {}, '/'); + + FS.createDefaultDirectories(); + FS.createDefaultDevices(); + FS.createSpecialDirectories(); + + FS.filesystems = { + 'MEMFS': MEMFS, + }; + }, + init(input, output, error) { + assert(!FS.initialized, 'FS.init was previously called. If you want to initialize later with custom parameters, remove any earlier calls (note that one is automatically added to the generated code)'); + FS.initialized = true; + + // Allow Module.stdin etc. to provide defaults, if none explicitly passed to us here + input ??= Module['stdin']; + output ??= Module['stdout']; + error ??= Module['stderr']; + + FS.createStandardStreams(input, output, error); + }, + quit() { + FS.initialized = false; + // force-flush all streams, so we get musl std streams printed out + _fflush(0); + // close all of our streams + for (var stream of FS.streams) { + if (stream) { + FS.close(stream); + } + } + }, + findObject(path, dontResolveLastLink) { + var ret = FS.analyzePath(path, dontResolveLastLink); + if (!ret.exists) { + return null; + } + return ret.object; + }, + analyzePath(path, dontResolveLastLink) { + // operate from within the context of the symlink's target + try { + var lookup = FS.lookupPath(path, { follow: !dontResolveLastLink }); + path = lookup.path; + } catch (e) { + } + var ret = { + isRoot: false, exists: false, error: 0, name: null, path: null, object: null, + parentExists: false, parentPath: null, parentObject: null + }; + try { + var lookup = FS.lookupPath(path, { parent: true }); + ret.parentExists = true; + ret.parentPath = lookup.path; + ret.parentObject = lookup.node; + ret.name = PATH.basename(path); + lookup = FS.lookupPath(path, { follow: !dontResolveLastLink }); + ret.exists = true; + ret.path = lookup.path; + ret.object = lookup.node; + ret.name = lookup.node.name; + ret.isRoot = lookup.path === '/'; + } catch (e) { + ret.error = e.errno; + }; + return ret; + }, + createPath(parent, path, canRead, canWrite) { + parent = typeof parent == 'string' ? parent : FS.getPath(parent); + var parts = path.split('/').reverse(); + while (parts.length) { + var part = parts.pop(); + if (!part) continue; + var current = PATH.join2(parent, part); + try { + FS.mkdir(current); + } catch (e) { + if (e.errno != 20) throw e; + } + parent = current; + } + return current; + }, + createFile(parent, name, properties, canRead, canWrite) { + var path = PATH.join2(typeof parent == 'string' ? parent : FS.getPath(parent), name); + var mode = FS_getMode(canRead, canWrite); + return FS.create(path, mode); + }, + createDataFile(parent, name, data, canRead, canWrite, canOwn) { + var path = name; + if (parent) { + parent = typeof parent == 'string' ? parent : FS.getPath(parent); + path = name ? PATH.join2(parent, name) : parent; + } + var mode = FS_getMode(canRead, canWrite); + var node = FS.create(path, mode); + if (data) { + if (typeof data == 'string') { + var arr = new Array(data.length); + for (var i = 0, len = data.length; i < len; ++i) arr[i] = data.charCodeAt(i); + data = arr; + } + // make sure we can write to the file + FS.chmod(node, mode | 146); + var stream = FS.open(node, 577); + FS.write(stream, data, 0, data.length, 0, canOwn); + FS.close(stream); + FS.chmod(node, mode); + } + }, + createDevice(parent, name, input, output) { + var path = PATH.join2(typeof parent == 'string' ? parent : FS.getPath(parent), name); + var mode = FS_getMode(!!input, !!output); + FS.createDevice.major ??= 64; + var dev = FS.makedev(FS.createDevice.major++, 0); + // Create a fake device that a set of stream ops to emulate + // the old behavior. + FS.registerDevice(dev, { + open(stream) { + stream.seekable = false; + }, + close(stream) { + // flush any pending line data + if (output?.buffer?.length) { + output(10); + } + }, + read(stream, buffer, offset, length, pos /* ignored */) { + var bytesRead = 0; + for (var i = 0; i < length; i++) { + var result; + try { + result = input(); + } catch (e) { + throw new FS.ErrnoError(29); + } + if (result === undefined && bytesRead === 0) { + throw new FS.ErrnoError(6); + } + if (result === null || result === undefined) break; + bytesRead++; + buffer[offset+i] = result; + } + if (bytesRead) { + stream.node.atime = Date.now(); + } + return bytesRead; + }, + write(stream, buffer, offset, length, pos) { + for (var i = 0; i < length; i++) { + try { + output(buffer[offset+i]); + } catch (e) { + throw new FS.ErrnoError(29); + } + } + if (length) { + stream.node.mtime = stream.node.ctime = Date.now(); + } + return i; + } + }); + return FS.mkdev(path, mode, dev); + }, + forceLoadFile(obj) { + if (obj.isDevice || obj.isFolder || obj.link || obj.contents) return true; + if (typeof XMLHttpRequest != 'undefined') { + throw new Error("Lazy loading should have been performed (contents set) in createLazyFile, but it was not. Lazy loading only works in web workers. Use --embed-file or --preload-file in emcc on the main thread."); + } else { // Command-line. + try { + obj.contents = readBinary(obj.url); + obj.usedBytes = obj.contents.length; + } catch (e) { + throw new FS.ErrnoError(29); + } + } + }, + createLazyFile(parent, name, url, canRead, canWrite) { + // Lazy chunked Uint8Array (implements get and length from Uint8Array). + // Actual getting is abstracted away for eventual reuse. + class LazyUint8Array { + lengthKnown = false; + chunks = []; // Loaded chunks. Index is the chunk number + get(idx) { + if (idx > this.length-1 || idx < 0) { + return undefined; + } + var chunkOffset = idx % this.chunkSize; + var chunkNum = (idx / this.chunkSize)|0; + return this.getter(chunkNum)[chunkOffset]; + } + setDataGetter(getter) { + this.getter = getter; + } + cacheLength() { + // Find length + var xhr = new XMLHttpRequest(); + xhr.open('HEAD', url, false); + xhr.send(null); + if (!(xhr.status >= 200 && xhr.status < 300 || xhr.status === 304)) throw new Error("Couldn't load " + url + ". Status: " + xhr.status); + var datalength = Number(xhr.getResponseHeader("Content-length")); + var header; + var hasByteServing = (header = xhr.getResponseHeader("Accept-Ranges")) && header === "bytes"; + var usesGzip = (header = xhr.getResponseHeader("Content-Encoding")) && header === "gzip"; + + var chunkSize = 1024*1024; // Chunk size in bytes + + if (!hasByteServing) chunkSize = datalength; + + // Function to get a range from the remote URL. + var doXHR = (from, to) => { + if (from > to) throw new Error("invalid range (" + from + ", " + to + ") or no bytes requested!"); + if (to > datalength-1) throw new Error("only " + datalength + " bytes available! programmer error!"); + + // TODO: Use mozResponseArrayBuffer, responseStream, etc. if available. + var xhr = new XMLHttpRequest(); + xhr.open('GET', url, false); + if (datalength !== chunkSize) xhr.setRequestHeader("Range", "bytes=" + from + "-" + to); + + // Some hints to the browser that we want binary data. + xhr.responseType = 'arraybuffer'; + if (xhr.overrideMimeType) { + xhr.overrideMimeType('text/plain; charset=x-user-defined'); + } + + xhr.send(null); + if (!(xhr.status >= 200 && xhr.status < 300 || xhr.status === 304)) throw new Error("Couldn't load " + url + ". Status: " + xhr.status); + if (xhr.response !== undefined) { + return new Uint8Array(/** @type{Array} */(xhr.response || [])); + } + return intArrayFromString(xhr.responseText || '', true); + }; + var lazyArray = this; + lazyArray.setDataGetter((chunkNum) => { + var start = chunkNum * chunkSize; + var end = (chunkNum+1) * chunkSize - 1; // including this byte + end = Math.min(end, datalength-1); // if datalength-1 is selected, this is the last block + if (typeof lazyArray.chunks[chunkNum] == 'undefined') { + lazyArray.chunks[chunkNum] = doXHR(start, end); + } + if (typeof lazyArray.chunks[chunkNum] == 'undefined') throw new Error('doXHR failed!'); + return lazyArray.chunks[chunkNum]; + }); + + if (usesGzip || !datalength) { + // if the server uses gzip or doesn't supply the length, we have to download the whole file to get the (uncompressed) length + chunkSize = datalength = 1; // this will force getter(0)/doXHR do download the whole file + datalength = this.getter(0).length; + chunkSize = datalength; + out("LazyFiles on gzip forces download of the whole file when length is accessed"); + } + + this._length = datalength; + this._chunkSize = chunkSize; + this.lengthKnown = true; + } + get length() { + if (!this.lengthKnown) { + this.cacheLength(); + } + return this._length; + } + get chunkSize() { + if (!this.lengthKnown) { + this.cacheLength(); + } + return this._chunkSize; + } + } + + if (typeof XMLHttpRequest != 'undefined') { + if (!ENVIRONMENT_IS_WORKER) throw 'Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc'; + var lazyArray = new LazyUint8Array(); + var properties = { isDevice: false, contents: lazyArray }; + } else { + var properties = { isDevice: false, url: url }; + } + + var node = FS.createFile(parent, name, properties, canRead, canWrite); + // This is a total hack, but I want to get this lazy file code out of the + // core of MEMFS. If we want to keep this lazy file concept I feel it should + // be its own thin LAZYFS proxying calls to MEMFS. + if (properties.contents) { + node.contents = properties.contents; + } else if (properties.url) { + node.contents = null; + node.url = properties.url; + } + // Add a function that defers querying the file size until it is asked the first time. + Object.defineProperties(node, { + usedBytes: { + get: function() { return this.contents.length; } + } + }); + // override each stream op with one that tries to force load the lazy file first + var stream_ops = {}; + var keys = Object.keys(node.stream_ops); + keys.forEach((key) => { + var fn = node.stream_ops[key]; + stream_ops[key] = (...args) => { + FS.forceLoadFile(node); + return fn(...args); + }; + }); + function writeChunks(stream, buffer, offset, length, position) { + var contents = stream.node.contents; + if (position >= contents.length) + return 0; + var size = Math.min(contents.length - position, length); + assert(size >= 0); + if (contents.slice) { // normal array + for (var i = 0; i < size; i++) { + buffer[offset + i] = contents[position + i]; + } + } else { + for (var i = 0; i < size; i++) { // LazyUint8Array from sync binary XHR + buffer[offset + i] = contents.get(position + i); + } + } + return size; + } + // use a custom read function + stream_ops.read = (stream, buffer, offset, length, position) => { + FS.forceLoadFile(node); + return writeChunks(stream, buffer, offset, length, position) + }; + // use a custom mmap function + stream_ops.mmap = (stream, length, position, prot, flags) => { + FS.forceLoadFile(node); + var ptr = mmapAlloc(length); + if (!ptr) { + throw new FS.ErrnoError(48); + } + writeChunks(stream, HEAP8, ptr, length, position); + return { ptr, allocated: true }; + }; + node.stream_ops = stream_ops; + return node; + }, + absolutePath() { + abort('FS.absolutePath has been removed; use PATH_FS.resolve instead'); + }, + createFolder() { + abort('FS.createFolder has been removed; use FS.mkdir instead'); + }, + createLink() { + abort('FS.createLink has been removed; use FS.symlink instead'); + }, + joinPath() { + abort('FS.joinPath has been removed; use PATH.join instead'); + }, + mmapAlloc() { + abort('FS.mmapAlloc has been replaced by the top level function mmapAlloc'); + }, + standardizePath() { + abort('FS.standardizePath has been removed; use PATH.normalize instead'); + }, + }; + + var SYSCALLS = { + DEFAULT_POLLMASK:5, + calculateAt(dirfd, path, allowEmpty) { + if (PATH.isAbs(path)) { + return path; + } + // relative path + var dir; + if (dirfd === -100) { + dir = FS.cwd(); + } else { + var dirstream = SYSCALLS.getStreamFromFD(dirfd); + dir = dirstream.path; + } + if (path.length == 0) { + if (!allowEmpty) { + throw new FS.ErrnoError(44);; + } + return dir; + } + return dir + '/' + path; + }, + writeStat(buf, stat) { + HEAP32[((buf)>>2)] = stat.dev; + HEAP32[(((buf)+(4))>>2)] = stat.mode; + HEAPU32[(((buf)+(8))>>2)] = stat.nlink; + HEAP32[(((buf)+(12))>>2)] = stat.uid; + HEAP32[(((buf)+(16))>>2)] = stat.gid; + HEAP32[(((buf)+(20))>>2)] = stat.rdev; + HEAP64[(((buf)+(24))>>3)] = BigInt(stat.size); + HEAP32[(((buf)+(32))>>2)] = 4096; + HEAP32[(((buf)+(36))>>2)] = stat.blocks; + var atime = stat.atime.getTime(); + var mtime = stat.mtime.getTime(); + var ctime = stat.ctime.getTime(); + HEAP64[(((buf)+(40))>>3)] = BigInt(Math.floor(atime / 1000)); + HEAPU32[(((buf)+(48))>>2)] = (atime % 1000) * 1000 * 1000; + HEAP64[(((buf)+(56))>>3)] = BigInt(Math.floor(mtime / 1000)); + HEAPU32[(((buf)+(64))>>2)] = (mtime % 1000) * 1000 * 1000; + HEAP64[(((buf)+(72))>>3)] = BigInt(Math.floor(ctime / 1000)); + HEAPU32[(((buf)+(80))>>2)] = (ctime % 1000) * 1000 * 1000; + HEAP64[(((buf)+(88))>>3)] = BigInt(stat.ino); + return 0; + }, + writeStatFs(buf, stats) { + HEAP32[(((buf)+(4))>>2)] = stats.bsize; + HEAP32[(((buf)+(40))>>2)] = stats.bsize; + HEAP32[(((buf)+(8))>>2)] = stats.blocks; + HEAP32[(((buf)+(12))>>2)] = stats.bfree; + HEAP32[(((buf)+(16))>>2)] = stats.bavail; + HEAP32[(((buf)+(20))>>2)] = stats.files; + HEAP32[(((buf)+(24))>>2)] = stats.ffree; + HEAP32[(((buf)+(28))>>2)] = stats.fsid; + HEAP32[(((buf)+(44))>>2)] = stats.flags; // ST_NOSUID + HEAP32[(((buf)+(36))>>2)] = stats.namelen; + }, + doMsync(addr, stream, len, flags, offset) { + if (!FS.isFile(stream.node.mode)) { + throw new FS.ErrnoError(43); + } + if (flags & 2) { + // MAP_PRIVATE calls need not to be synced back to underlying fs + return 0; + } + var buffer = HEAPU8.slice(addr, addr + len); + FS.msync(stream, buffer, offset, len, flags); + }, + getStreamFromFD(fd) { + var stream = FS.getStreamChecked(fd); + return stream; + }, + varargs:undefined, + getStr(ptr) { + var ret = UTF8ToString(ptr); + return ret; + }, + }; + function ___syscall_chmod(path, mode) { + try { + + path = SYSCALLS.getStr(path); + FS.chmod(path, mode); + return 0; + } catch (e) { + if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + return -e.errno; + } + } + + function ___syscall_fchmod(fd, mode) { + try { + + FS.fchmod(fd, mode); + return 0; + } catch (e) { + if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + return -e.errno; + } + } + + /** @suppress {duplicate } */ + var syscallGetVarargI = () => { + assert(SYSCALLS.varargs != undefined); + // the `+` prepended here is necessary to convince the JSCompiler that varargs is indeed a number. + var ret = HEAP32[((+SYSCALLS.varargs)>>2)]; + SYSCALLS.varargs += 4; + return ret; + }; + var syscallGetVarargP = syscallGetVarargI; + + + function ___syscall_fcntl64(fd, cmd, varargs) { + SYSCALLS.varargs = varargs; + try { + + var stream = SYSCALLS.getStreamFromFD(fd); + switch (cmd) { + case 0: { + var arg = syscallGetVarargI(); + if (arg < 0) { + return -28; + } + while (FS.streams[arg]) { + arg++; + } + var newStream; + newStream = FS.dupStream(stream, arg); + return newStream.fd; + } + case 1: + case 2: + return 0; // FD_CLOEXEC makes no sense for a single process. + case 3: + return stream.flags; + case 4: { + var arg = syscallGetVarargI(); + stream.flags |= arg; + return 0; + } + case 12: { + var arg = syscallGetVarargP(); + var offset = 0; + // We're always unlocked. + HEAP16[(((arg)+(offset))>>1)] = 2; + return 0; + } + case 13: + case 14: + // Pretend that the locking is successful. These are process-level locks, + // and Emscripten programs are a single process. If we supported linking a + // filesystem between programs, we'd need to do more here. + // See https://github.com/emscripten-core/emscripten/issues/23697 + return 0; + } + return -28; + } catch (e) { + if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + return -e.errno; + } + } + + function ___syscall_fstat64(fd, buf) { + try { + + return SYSCALLS.writeStat(buf, FS.fstat(fd)); + } catch (e) { + if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + return -e.errno; + } + } + + + function ___syscall_ioctl(fd, op, varargs) { + SYSCALLS.varargs = varargs; + try { + + var stream = SYSCALLS.getStreamFromFD(fd); + switch (op) { + case 21509: { + if (!stream.tty) return -59; + return 0; + } + case 21505: { + if (!stream.tty) return -59; + if (stream.tty.ops.ioctl_tcgets) { + var termios = stream.tty.ops.ioctl_tcgets(stream); + var argp = syscallGetVarargP(); + HEAP32[((argp)>>2)] = termios.c_iflag || 0; + HEAP32[(((argp)+(4))>>2)] = termios.c_oflag || 0; + HEAP32[(((argp)+(8))>>2)] = termios.c_cflag || 0; + HEAP32[(((argp)+(12))>>2)] = termios.c_lflag || 0; + for (var i = 0; i < 32; i++) { + HEAP8[(argp + i)+(17)] = termios.c_cc[i] || 0; + } + return 0; + } + return 0; + } + case 21510: + case 21511: + case 21512: { + if (!stream.tty) return -59; + return 0; // no-op, not actually adjusting terminal settings + } + case 21506: + case 21507: + case 21508: { + if (!stream.tty) return -59; + if (stream.tty.ops.ioctl_tcsets) { + var argp = syscallGetVarargP(); + var c_iflag = HEAP32[((argp)>>2)]; + var c_oflag = HEAP32[(((argp)+(4))>>2)]; + var c_cflag = HEAP32[(((argp)+(8))>>2)]; + var c_lflag = HEAP32[(((argp)+(12))>>2)]; + var c_cc = [] + for (var i = 0; i < 32; i++) { + c_cc.push(HEAP8[(argp + i)+(17)]); + } + return stream.tty.ops.ioctl_tcsets(stream.tty, op, { c_iflag, c_oflag, c_cflag, c_lflag, c_cc }); + } + return 0; // no-op, not actually adjusting terminal settings + } + case 21519: { + if (!stream.tty) return -59; + var argp = syscallGetVarargP(); + HEAP32[((argp)>>2)] = 0; + return 0; + } + case 21520: { + if (!stream.tty) return -59; + return -28; // not supported + } + case 21531: { + var argp = syscallGetVarargP(); + return FS.ioctl(stream, op, argp); + } + case 21523: { + // TODO: in theory we should write to the winsize struct that gets + // passed in, but for now musl doesn't read anything on it + if (!stream.tty) return -59; + if (stream.tty.ops.ioctl_tiocgwinsz) { + var winsize = stream.tty.ops.ioctl_tiocgwinsz(stream.tty); + var argp = syscallGetVarargP(); + HEAP16[((argp)>>1)] = winsize[0]; + HEAP16[(((argp)+(2))>>1)] = winsize[1]; + } + return 0; + } + case 21524: { + // TODO: technically, this ioctl call should change the window size. + // but, since emscripten doesn't have any concept of a terminal window + // yet, we'll just silently throw it away as we do TIOCGWINSZ + if (!stream.tty) return -59; + return 0; + } + case 21515: { + if (!stream.tty) return -59; + return 0; + } + default: return -28; // not supported + } + } catch (e) { + if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + return -e.errno; + } + } + + function ___syscall_lstat64(path, buf) { + try { + + path = SYSCALLS.getStr(path); + return SYSCALLS.writeStat(buf, FS.lstat(path)); + } catch (e) { + if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + return -e.errno; + } + } + + function ___syscall_newfstatat(dirfd, path, buf, flags) { + try { + + path = SYSCALLS.getStr(path); + var nofollow = flags & 256; + var allowEmpty = flags & 4096; + flags = flags & (~6400); + assert(!flags, `unknown flags in __syscall_newfstatat: ${flags}`); + path = SYSCALLS.calculateAt(dirfd, path, allowEmpty); + return SYSCALLS.writeStat(buf, nofollow ? FS.lstat(path) : FS.stat(path)); + } catch (e) { + if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + return -e.errno; + } + } + + + function ___syscall_openat(dirfd, path, flags, varargs) { + SYSCALLS.varargs = varargs; + try { + + path = SYSCALLS.getStr(path); + path = SYSCALLS.calculateAt(dirfd, path); + var mode = varargs ? syscallGetVarargI() : 0; + return FS.open(path, flags, mode).fd; + } catch (e) { + if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + return -e.errno; + } + } + + function ___syscall_renameat(olddirfd, oldpath, newdirfd, newpath) { + try { + + oldpath = SYSCALLS.getStr(oldpath); + newpath = SYSCALLS.getStr(newpath); + oldpath = SYSCALLS.calculateAt(olddirfd, oldpath); + newpath = SYSCALLS.calculateAt(newdirfd, newpath); + FS.rename(oldpath, newpath); + return 0; + } catch (e) { + if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + return -e.errno; + } + } + + function ___syscall_rmdir(path) { + try { + + path = SYSCALLS.getStr(path); + FS.rmdir(path); + return 0; + } catch (e) { + if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + return -e.errno; + } + } + + function ___syscall_stat64(path, buf) { + try { + + path = SYSCALLS.getStr(path); + return SYSCALLS.writeStat(buf, FS.stat(path)); + } catch (e) { + if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + return -e.errno; + } + } + + function ___syscall_unlinkat(dirfd, path, flags) { + try { + + path = SYSCALLS.getStr(path); + path = SYSCALLS.calculateAt(dirfd, path); + if (flags === 0) { + FS.unlink(path); + } else if (flags === 512) { + FS.rmdir(path); + } else { + abort('Invalid flags passed to unlinkat'); + } + return 0; + } catch (e) { + if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + return -e.errno; + } + } + + var __abort_js = () => + abort('native code called abort()'); + + var isLeapYear = (year) => year%4 === 0 && (year%100 !== 0 || year%400 === 0); + + var MONTH_DAYS_LEAP_CUMULATIVE = [0,31,60,91,121,152,182,213,244,274,305,335]; + + var MONTH_DAYS_REGULAR_CUMULATIVE = [0,31,59,90,120,151,181,212,243,273,304,334]; + var ydayFromDate = (date) => { + var leap = isLeapYear(date.getFullYear()); + var monthDaysCumulative = (leap ? MONTH_DAYS_LEAP_CUMULATIVE : MONTH_DAYS_REGULAR_CUMULATIVE); + var yday = monthDaysCumulative[date.getMonth()] + date.getDate() - 1; // -1 since it's days since Jan 1 + + return yday; + }; + + var INT53_MAX = 9007199254740992; + + var INT53_MIN = -9007199254740992; + var bigintToI53Checked = (num) => (num < INT53_MIN || num > INT53_MAX) ? NaN : Number(num); + function __localtime_js(time, tmPtr) { + time = bigintToI53Checked(time); + + + var date = new Date(time*1000); + HEAP32[((tmPtr)>>2)] = date.getSeconds(); + HEAP32[(((tmPtr)+(4))>>2)] = date.getMinutes(); + HEAP32[(((tmPtr)+(8))>>2)] = date.getHours(); + HEAP32[(((tmPtr)+(12))>>2)] = date.getDate(); + HEAP32[(((tmPtr)+(16))>>2)] = date.getMonth(); + HEAP32[(((tmPtr)+(20))>>2)] = date.getFullYear()-1900; + HEAP32[(((tmPtr)+(24))>>2)] = date.getDay(); + + var yday = ydayFromDate(date)|0; + HEAP32[(((tmPtr)+(28))>>2)] = yday; + HEAP32[(((tmPtr)+(36))>>2)] = -(date.getTimezoneOffset() * 60); + + // Attention: DST is in December in South, and some regions don't have DST at all. + var start = new Date(date.getFullYear(), 0, 1); + var summerOffset = new Date(date.getFullYear(), 6, 1).getTimezoneOffset(); + var winterOffset = start.getTimezoneOffset(); + var dst = (summerOffset != winterOffset && date.getTimezoneOffset() == Math.min(winterOffset, summerOffset))|0; + HEAP32[(((tmPtr)+(32))>>2)] = dst; + ; + } + + + var __mktime_js = function(tmPtr) { + + var ret = (() => { + var date = new Date(HEAP32[(((tmPtr)+(20))>>2)] + 1900, + HEAP32[(((tmPtr)+(16))>>2)], + HEAP32[(((tmPtr)+(12))>>2)], + HEAP32[(((tmPtr)+(8))>>2)], + HEAP32[(((tmPtr)+(4))>>2)], + HEAP32[((tmPtr)>>2)], + 0); + + // There's an ambiguous hour when the time goes back; the tm_isdst field is + // used to disambiguate it. Date() basically guesses, so we fix it up if it + // guessed wrong, or fill in tm_isdst with the guess if it's -1. + var dst = HEAP32[(((tmPtr)+(32))>>2)]; + var guessedOffset = date.getTimezoneOffset(); + var start = new Date(date.getFullYear(), 0, 1); + var summerOffset = new Date(date.getFullYear(), 6, 1).getTimezoneOffset(); + var winterOffset = start.getTimezoneOffset(); + var dstOffset = Math.min(winterOffset, summerOffset); // DST is in December in South + if (dst < 0) { + // Attention: some regions don't have DST at all. + HEAP32[(((tmPtr)+(32))>>2)] = Number(summerOffset != winterOffset && dstOffset == guessedOffset); + } else if ((dst > 0) != (dstOffset == guessedOffset)) { + var nonDstOffset = Math.max(winterOffset, summerOffset); + var trueOffset = dst > 0 ? dstOffset : nonDstOffset; + // Don't try setMinutes(date.getMinutes() + ...) -- it's messed up. + date.setTime(date.getTime() + (trueOffset - guessedOffset)*60000); + } + + HEAP32[(((tmPtr)+(24))>>2)] = date.getDay(); + var yday = ydayFromDate(date)|0; + HEAP32[(((tmPtr)+(28))>>2)] = yday; + // To match expected behavior, update fields from date + HEAP32[((tmPtr)>>2)] = date.getSeconds(); + HEAP32[(((tmPtr)+(4))>>2)] = date.getMinutes(); + HEAP32[(((tmPtr)+(8))>>2)] = date.getHours(); + HEAP32[(((tmPtr)+(12))>>2)] = date.getDate(); + HEAP32[(((tmPtr)+(16))>>2)] = date.getMonth(); + HEAP32[(((tmPtr)+(20))>>2)] = date.getYear(); + + var timeMs = date.getTime(); + if (isNaN(timeMs)) { + return -1; + } + // Return time in microseconds + return timeMs / 1000; + })(); + return BigInt(ret); + }; + + var stringToUTF8 = (str, outPtr, maxBytesToWrite) => { + assert(typeof maxBytesToWrite == 'number', 'stringToUTF8(str, outPtr, maxBytesToWrite) is missing the third parameter that specifies the length of the output buffer!'); + return stringToUTF8Array(str, HEAPU8, outPtr, maxBytesToWrite); + }; + + var __tzset_js = (timezone, daylight, std_name, dst_name) => { + // TODO: Use (malleable) environment variables instead of system settings. + var currentYear = new Date().getFullYear(); + var winter = new Date(currentYear, 0, 1); + var summer = new Date(currentYear, 6, 1); + var winterOffset = winter.getTimezoneOffset(); + var summerOffset = summer.getTimezoneOffset(); + + // Local standard timezone offset. Local standard time is not adjusted for + // daylight savings. This code uses the fact that getTimezoneOffset returns + // a greater value during Standard Time versus Daylight Saving Time (DST). + // Thus it determines the expected output during Standard Time, and it + // compares whether the output of the given date the same (Standard) or less + // (DST). + var stdTimezoneOffset = Math.max(winterOffset, summerOffset); + + // timezone is specified as seconds west of UTC ("The external variable + // `timezone` shall be set to the difference, in seconds, between + // Coordinated Universal Time (UTC) and local standard time."), the same + // as returned by stdTimezoneOffset. + // See http://pubs.opengroup.org/onlinepubs/009695399/functions/tzset.html + HEAPU32[((timezone)>>2)] = stdTimezoneOffset * 60; + + HEAP32[((daylight)>>2)] = Number(winterOffset != summerOffset); + + var extractZone = (timezoneOffset) => { + // Why inverse sign? + // Read here https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/getTimezoneOffset + var sign = timezoneOffset >= 0 ? "-" : "+"; + + var absOffset = Math.abs(timezoneOffset) + var hours = String(Math.floor(absOffset / 60)).padStart(2, "0"); + var minutes = String(absOffset % 60).padStart(2, "0"); + + return `UTC${sign}${hours}${minutes}`; + } + + var winterName = extractZone(winterOffset); + var summerName = extractZone(summerOffset); + assert(winterName); + assert(summerName); + assert(lengthBytesUTF8(winterName) <= 16, `timezone name truncated to fit in TZNAME_MAX (${winterName})`); + assert(lengthBytesUTF8(summerName) <= 16, `timezone name truncated to fit in TZNAME_MAX (${summerName})`); + if (summerOffset < winterOffset) { + // Northern hemisphere + stringToUTF8(winterName, std_name, 17); + stringToUTF8(summerName, dst_name, 17); + } else { + stringToUTF8(winterName, dst_name, 17); + stringToUTF8(summerName, std_name, 17); + } + }; + + var _emscripten_date_now = () => Date.now(); + + var abortOnCannotGrowMemory = (requestedSize) => { + abort(`Cannot enlarge memory arrays to size ${requestedSize} bytes (OOM). Either (1) compile with -sINITIAL_MEMORY=X with X higher than the current value ${HEAP8.length}, (2) compile with -sALLOW_MEMORY_GROWTH which allows increasing the size at runtime, or (3) if you want malloc to return NULL (0) instead of this abort, compile with -sABORTING_MALLOC=0`); + }; + var _emscripten_resize_heap = (requestedSize) => { + var oldSize = HEAPU8.length; + // With CAN_ADDRESS_2GB or MEMORY64, pointers are already unsigned. + requestedSize >>>= 0; + abortOnCannotGrowMemory(requestedSize); + }; + + + var runtimeKeepaliveCounter = 0; + var keepRuntimeAlive = () => noExitRuntime || runtimeKeepaliveCounter > 0; + var _proc_exit = (code) => { + EXITSTATUS = code; + if (!keepRuntimeAlive()) { + Module['onExit']?.(code); + ABORT = true; + } + quit_(code, new ExitStatus(code)); + }; + + + /** @suppress {duplicate } */ + /** @param {boolean|number=} implicit */ + var exitJS = (status, implicit) => { + EXITSTATUS = status; + + checkUnflushedContent(); + + // if exit() was called explicitly, warn the user if the runtime isn't actually being shut down + if (keepRuntimeAlive() && !implicit) { + var msg = `program exited (with status: ${status}), but keepRuntimeAlive() is set (counter=${runtimeKeepaliveCounter}) due to an async operation, so halting execution but not exiting the runtime or preventing further async execution (you can use emscripten_force_exit, if you want to force a true shutdown)`; + err(msg); + } + + _proc_exit(status); + }; + var _exit = exitJS; + + function _fd_close(fd) { + try { + + var stream = SYSCALLS.getStreamFromFD(fd); + FS.close(stream); + return 0; + } catch (e) { + if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + return e.errno; + } + } + + function _fd_fdstat_get(fd, pbuf) { + try { + + var rightsBase = 0; + var rightsInheriting = 0; + var flags = 0; + { + var stream = SYSCALLS.getStreamFromFD(fd); + // All character devices are terminals (other things a Linux system would + // assume is a character device, like the mouse, we have special APIs for). + var type = stream.tty ? 2 : + FS.isDir(stream.mode) ? 3 : + FS.isLink(stream.mode) ? 7 : + 4; + } + HEAP8[pbuf] = type; + HEAP16[(((pbuf)+(2))>>1)] = flags; + HEAP64[(((pbuf)+(8))>>3)] = BigInt(rightsBase); + HEAP64[(((pbuf)+(16))>>3)] = BigInt(rightsInheriting); + return 0; + } catch (e) { + if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + return e.errno; + } + } + + /** @param {number=} offset */ + var doReadv = (stream, iov, iovcnt, offset) => { + var ret = 0; + for (var i = 0; i < iovcnt; i++) { + var ptr = HEAPU32[((iov)>>2)]; + var len = HEAPU32[(((iov)+(4))>>2)]; + iov += 8; + var curr = FS.read(stream, HEAP8, ptr, len, offset); + if (curr < 0) return -1; + ret += curr; + if (curr < len) break; // nothing more to read + if (typeof offset != 'undefined') { + offset += curr; + } + } + return ret; + }; + + function _fd_read(fd, iov, iovcnt, pnum) { + try { + + var stream = SYSCALLS.getStreamFromFD(fd); + var num = doReadv(stream, iov, iovcnt); + HEAPU32[((pnum)>>2)] = num; + return 0; + } catch (e) { + if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + return e.errno; + } + } + + + function _fd_seek(fd, offset, whence, newOffset) { + offset = bigintToI53Checked(offset); + + + try { + + if (isNaN(offset)) return 61; + var stream = SYSCALLS.getStreamFromFD(fd); + FS.llseek(stream, offset, whence); + HEAP64[((newOffset)>>3)] = BigInt(stream.position); + if (stream.getdents && offset === 0 && whence === 0) stream.getdents = null; // reset readdir state + return 0; + } catch (e) { + if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + return e.errno; + } + ; + } + + /** @param {number=} offset */ + var doWritev = (stream, iov, iovcnt, offset) => { + var ret = 0; + for (var i = 0; i < iovcnt; i++) { + var ptr = HEAPU32[((iov)>>2)]; + var len = HEAPU32[(((iov)+(4))>>2)]; + iov += 8; + var curr = FS.write(stream, HEAP8, ptr, len, offset); + if (curr < 0) return -1; + ret += curr; + if (curr < len) { + // No more space to write. + break; + } + if (typeof offset != 'undefined') { + offset += curr; + } + } + return ret; + }; + + function _fd_write(fd, iov, iovcnt, pnum) { + try { + + var stream = SYSCALLS.getStreamFromFD(fd); + var num = doWritev(stream, iov, iovcnt); + HEAPU32[((pnum)>>2)] = num; + return 0; + } catch (e) { + if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + return e.errno; + } + } + + + var handleException = (e) => { + // Certain exception types we do not treat as errors since they are used for + // internal control flow. + // 1. ExitStatus, which is thrown by exit() + // 2. "unwind", which is thrown by emscripten_unwind_to_js_event_loop() and others + // that wish to return to JS event loop. + if (e instanceof ExitStatus || e == 'unwind') { + return EXITSTATUS; + } + checkStackCookie(); + if (e instanceof WebAssembly.RuntimeError) { + if (_emscripten_stack_get_current() <= 0) { + err('Stack overflow detected. You can try increasing -sSTACK_SIZE (currently set to 65536)'); + } + } + quit_(1, e); + }; + + + + var stackAlloc = (sz) => __emscripten_stack_alloc(sz); + var stringToUTF8OnStack = (str) => { + var size = lengthBytesUTF8(str) + 1; + var ret = stackAlloc(size); + stringToUTF8(str, ret, size); + return ret; + }; + + FS.createPreloadedFile = FS_createPreloadedFile; + FS.staticInit(); + // Set module methods based on EXPORTED_RUNTIME_METHODS + ; +// End JS library code + +function checkIncomingModuleAPI() { + ignoredModuleProp('fetchSettings'); +} +var wasmImports = { + /** @export */ + __syscall_chmod: ___syscall_chmod, + /** @export */ + __syscall_fchmod: ___syscall_fchmod, + /** @export */ + __syscall_fcntl64: ___syscall_fcntl64, + /** @export */ + __syscall_fstat64: ___syscall_fstat64, + /** @export */ + __syscall_ioctl: ___syscall_ioctl, + /** @export */ + __syscall_lstat64: ___syscall_lstat64, + /** @export */ + __syscall_newfstatat: ___syscall_newfstatat, + /** @export */ + __syscall_openat: ___syscall_openat, + /** @export */ + __syscall_renameat: ___syscall_renameat, + /** @export */ + __syscall_rmdir: ___syscall_rmdir, + /** @export */ + __syscall_stat64: ___syscall_stat64, + /** @export */ + __syscall_unlinkat: ___syscall_unlinkat, + /** @export */ + _abort_js: __abort_js, + /** @export */ + _localtime_js: __localtime_js, + /** @export */ + _mktime_js: __mktime_js, + /** @export */ + _tzset_js: __tzset_js, + /** @export */ + emscripten_date_now: _emscripten_date_now, + /** @export */ + emscripten_resize_heap: _emscripten_resize_heap, + /** @export */ + exit: _exit, + /** @export */ + fd_close: _fd_close, + /** @export */ + fd_fdstat_get: _fd_fdstat_get, + /** @export */ + fd_read: _fd_read, + /** @export */ + fd_seek: _fd_seek, + /** @export */ + fd_write: _fd_write +}; +var wasmExports; +createWasm(); +var ___wasm_call_ctors = createExportWrapper('__wasm_call_ctors', 0); +var _main = Module['_main'] = createExportWrapper('__main_argc_argv', 2); +var _strerror = createExportWrapper('strerror', 1); +var _fflush = createExportWrapper('fflush', 1); +var _emscripten_stack_init = () => (_emscripten_stack_init = wasmExports['emscripten_stack_init'])(); +var _emscripten_stack_get_free = () => (_emscripten_stack_get_free = wasmExports['emscripten_stack_get_free'])(); +var _emscripten_stack_get_base = () => (_emscripten_stack_get_base = wasmExports['emscripten_stack_get_base'])(); +var _emscripten_stack_get_end = () => (_emscripten_stack_get_end = wasmExports['emscripten_stack_get_end'])(); +var __emscripten_stack_restore = (a0) => (__emscripten_stack_restore = wasmExports['_emscripten_stack_restore'])(a0); +var __emscripten_stack_alloc = (a0) => (__emscripten_stack_alloc = wasmExports['_emscripten_stack_alloc'])(a0); +var _emscripten_stack_get_current = () => (_emscripten_stack_get_current = wasmExports['emscripten_stack_get_current'])(); + + +// include: postamble.js +// === Auto-generated postamble setup entry stuff === + +var missingLibrarySymbols = [ + 'writeI53ToI64', + 'writeI53ToI64Clamped', + 'writeI53ToI64Signaling', + 'writeI53ToU64Clamped', + 'writeI53ToU64Signaling', + 'readI53FromI64', + 'readI53FromU64', + 'convertI32PairToI53', + 'convertI32PairToI53Checked', + 'convertU32PairToI53', + 'getTempRet0', + 'setTempRet0', + 'zeroMemory', + 'getHeapMax', + 'growMemory', + 'inetPton4', + 'inetNtop4', + 'inetPton6', + 'inetNtop6', + 'readSockaddr', + 'writeSockaddr', + 'emscriptenLog', + 'readEmAsmArgs', + 'jstoi_q', + 'getExecutableName', + 'listenOnce', + 'autoResumeAudioContext', + 'getDynCaller', + 'dynCall', + 'runtimeKeepalivePush', + 'runtimeKeepalivePop', + 'callUserCallback', + 'maybeExit', + 'asmjsMangle', + 'alignMemory', + 'HandleAllocator', + 'getNativeTypeSize', + 'addOnInit', + 'addOnPostCtor', + 'addOnPreMain', + 'addOnExit', + 'STACK_SIZE', + 'STACK_ALIGN', + 'POINTER_SIZE', + 'ASSERTIONS', + 'getCFunc', + 'ccall', + 'cwrap', + 'uleb128Encode', + 'sigToWasmTypes', + 'generateFuncType', + 'convertJsFunctionToWasm', + 'getEmptyTableSlot', + 'updateTableMap', + 'getFunctionAddress', + 'addFunction', + 'removeFunction', + 'reallyNegative', + 'unSign', + 'strLen', + 'reSign', + 'formatString', + 'intArrayToString', + 'AsciiToString', + 'stringToAscii', + 'UTF16ToString', + 'stringToUTF16', + 'lengthBytesUTF16', + 'UTF32ToString', + 'stringToUTF32', + 'lengthBytesUTF32', + 'stringToNewUTF8', + 'writeArrayToMemory', + 'registerKeyEventCallback', + 'maybeCStringToJsString', + 'findEventTarget', + 'getBoundingClientRect', + 'fillMouseEventData', + 'registerMouseEventCallback', + 'registerWheelEventCallback', + 'registerUiEventCallback', + 'registerFocusEventCallback', + 'fillDeviceOrientationEventData', + 'registerDeviceOrientationEventCallback', + 'fillDeviceMotionEventData', + 'registerDeviceMotionEventCallback', + 'screenOrientation', + 'fillOrientationChangeEventData', + 'registerOrientationChangeEventCallback', + 'fillFullscreenChangeEventData', + 'registerFullscreenChangeEventCallback', + 'JSEvents_requestFullscreen', + 'JSEvents_resizeCanvasForFullscreen', + 'registerRestoreOldStyle', + 'hideEverythingExceptGivenElement', + 'restoreHiddenElements', + 'setLetterbox', + 'softFullscreenResizeWebGLRenderTarget', + 'doRequestFullscreen', + 'fillPointerlockChangeEventData', + 'registerPointerlockChangeEventCallback', + 'registerPointerlockErrorEventCallback', + 'requestPointerLock', + 'fillVisibilityChangeEventData', + 'registerVisibilityChangeEventCallback', + 'registerTouchEventCallback', + 'fillGamepadEventData', + 'registerGamepadEventCallback', + 'registerBeforeUnloadEventCallback', + 'fillBatteryEventData', + 'battery', + 'registerBatteryEventCallback', + 'setCanvasElementSize', + 'getCanvasElementSize', + 'jsStackTrace', + 'getCallstack', + 'convertPCtoSourceLocation', + 'getEnvStrings', + 'checkWasiClock', + 'wasiRightsToMuslOFlags', + 'wasiOFlagsToMuslOFlags', + 'safeSetTimeout', + 'setImmediateWrapped', + 'safeRequestAnimationFrame', + 'clearImmediateWrapped', + 'registerPostMainLoop', + 'registerPreMainLoop', + 'getPromise', + 'makePromise', + 'idsToPromises', + 'makePromiseCallback', + 'ExceptionInfo', + 'findMatchingCatch', + 'Browser_asyncPrepareDataCounter', + 'arraySum', + 'addDays', + 'getSocketFromFD', + 'getSocketAddress', + 'FS_unlink', + 'FS_mkdirTree', + '_setNetworkCallback', + 'heapObjectForWebGLType', + 'toTypedArrayIndex', + 'webgl_enable_ANGLE_instanced_arrays', + 'webgl_enable_OES_vertex_array_object', + 'webgl_enable_WEBGL_draw_buffers', + 'webgl_enable_WEBGL_multi_draw', + 'webgl_enable_EXT_polygon_offset_clamp', + 'webgl_enable_EXT_clip_control', + 'webgl_enable_WEBGL_polygon_mode', + 'emscriptenWebGLGet', + 'computeUnpackAlignedImageSize', + 'colorChannelsInGlTextureFormat', + 'emscriptenWebGLGetTexPixelData', + 'emscriptenWebGLGetUniform', + 'webglGetUniformLocation', + 'webglPrepareUniformLocationsBeforeFirstUse', + 'webglGetLeftBracePos', + 'emscriptenWebGLGetVertexAttrib', + '__glGetActiveAttribOrUniform', + 'writeGLArray', + 'registerWebGlEventCallback', + 'runAndAbortIfError', + 'ALLOC_NORMAL', + 'ALLOC_STACK', + 'allocate', + 'writeStringToMemory', + 'writeAsciiToMemory', + 'demangle', + 'stackTrace', +]; +missingLibrarySymbols.forEach(missingLibrarySymbol) + +var unexportedSymbols = [ + 'run', + 'addRunDependency', + 'removeRunDependency', + 'out', + 'err', + 'callMain', + 'abort', + 'wasmMemory', + 'wasmExports', + 'writeStackCookie', + 'checkStackCookie', + 'INT53_MAX', + 'INT53_MIN', + 'bigintToI53Checked', + 'stackSave', + 'stackRestore', + 'stackAlloc', + 'ptrToString', + 'exitJS', + 'abortOnCannotGrowMemory', + 'ENV', + 'ERRNO_CODES', + 'strError', + 'DNS', + 'Protocols', + 'Sockets', + 'timers', + 'warnOnce', + 'readEmAsmArgsArray', + 'jstoi_s', + 'handleException', + 'keepRuntimeAlive', + 'asyncLoad', + 'mmapAlloc', + 'wasmTable', + 'noExitRuntime', + 'addOnPreRun', + 'addOnPostRun', + 'freeTableIndexes', + 'functionsInTableMap', + 'setValue', + 'getValue', + 'PATH', + 'PATH_FS', + 'UTF8Decoder', + 'UTF8ArrayToString', + 'UTF8ToString', + 'stringToUTF8Array', + 'stringToUTF8', + 'lengthBytesUTF8', + 'intArrayFromString', + 'UTF16Decoder', + 'stringToUTF8OnStack', + 'JSEvents', + 'specialHTMLTargets', + 'findCanvasEventTarget', + 'currentFullscreenStrategy', + 'restoreOldWindowedStyle', + 'UNWIND_CACHE', + 'ExitStatus', + 'doReadv', + 'doWritev', + 'initRandomFill', + 'randomFill', + 'emSetImmediate', + 'emClearImmediate_deps', + 'emClearImmediate', + 'promiseMap', + 'uncaughtExceptionCount', + 'exceptionLast', + 'exceptionCaught', + 'Browser', + 'getPreloadedImageData__data', + 'wget', + 'MONTH_DAYS_REGULAR', + 'MONTH_DAYS_LEAP', + 'MONTH_DAYS_REGULAR_CUMULATIVE', + 'MONTH_DAYS_LEAP_CUMULATIVE', + 'isLeapYear', + 'ydayFromDate', + 'SYSCALLS', + 'preloadPlugins', + 'FS_createPreloadedFile', + 'FS_modeStringToFlags', + 'FS_getMode', + 'FS_stdin_getChar_buffer', + 'FS_stdin_getChar', + 'FS_createPath', + 'FS_createDevice', + 'FS_readFile', + 'FS', + 'FS_createDataFile', + 'FS_createLazyFile', + 'MEMFS', + 'TTY', + 'PIPEFS', + 'SOCKFS', + 'tempFixedLengthArray', + 'miniTempWebGLFloatBuffers', + 'miniTempWebGLIntBuffers', + 'GL', + 'AL', + 'GLUT', + 'EGL', + 'GLEW', + 'IDBStore', + 'SDL', + 'SDL_gfx', + 'allocateUTF8', + 'allocateUTF8OnStack', + 'print', + 'printErr', +]; +unexportedSymbols.forEach(unexportedRuntimeSymbol); + + + +var calledRun; + +function callMain(args = []) { + assert(runDependencies == 0, 'cannot call main when async dependencies remain! (listen on Module["onRuntimeInitialized"])'); + assert(typeof onPreRuns === 'undefined' || onPreRuns.length == 0, 'cannot call main when preRun functions remain to be called'); + + var entryFunction = _main; + + args.unshift(thisProgram); + + var argc = args.length; + var argv = stackAlloc((argc + 1) * 4); + var argv_ptr = argv; + args.forEach((arg) => { + HEAPU32[((argv_ptr)>>2)] = stringToUTF8OnStack(arg); + argv_ptr += 4; + }); + HEAPU32[((argv_ptr)>>2)] = 0; + + try { + + var ret = entryFunction(argc, argv); + + // if we're not running an evented main loop, it's time to exit + exitJS(ret, /* implicit = */ true); + return ret; + } catch (e) { + return handleException(e); + } +} + +function stackCheckInit() { + // This is normally called automatically during __wasm_call_ctors but need to + // get these values before even running any of the ctors so we call it redundantly + // here. + _emscripten_stack_init(); + // TODO(sbc): Move writeStackCookie to native to to avoid this. + writeStackCookie(); +} + +function run(args = arguments_) { + + if (runDependencies > 0) { + dependenciesFulfilled = run; + return; + } + + stackCheckInit(); + + preRun(); + + // a preRun added a dependency, run will be called later + if (runDependencies > 0) { + dependenciesFulfilled = run; + return; + } + + function doRun() { + // run may have just been called through dependencies being fulfilled just in this very frame, + // or while the async setStatus time below was happening + assert(!calledRun); + calledRun = true; + Module['calledRun'] = true; + + if (ABORT) return; + + initRuntime(); + + preMain(); + + Module['onRuntimeInitialized']?.(); + consumedModuleProp('onRuntimeInitialized'); + + var noInitialRun = Module['noInitialRun'];legacyModuleProp('noInitialRun', 'noInitialRun'); + if (!noInitialRun) callMain(args); + + postRun(); + } + + if (Module['setStatus']) { + Module['setStatus']('Running...'); + setTimeout(() => { + setTimeout(() => Module['setStatus'](''), 1); + doRun(); + }, 1); + } else + { + doRun(); + } + checkStackCookie(); +} + +function checkUnflushedContent() { + // Compiler settings do not allow exiting the runtime, so flushing + // the streams is not possible. but in ASSERTIONS mode we check + // if there was something to flush, and if so tell the user they + // should request that the runtime be exitable. + // Normally we would not even include flush() at all, but in ASSERTIONS + // builds we do so just for this check, and here we see if there is any + // content to flush, that is, we check if there would have been + // something a non-ASSERTIONS build would have not seen. + // How we flush the streams depends on whether we are in SYSCALLS_REQUIRE_FILESYSTEM=0 + // mode (which has its own special function for this; otherwise, all + // the code is inside libc) + var oldOut = out; + var oldErr = err; + var has = false; + out = err = (x) => { + has = true; + } + try { // it doesn't matter if it fails + _fflush(0); + // also flush in the JS FS layer + ['stdout', 'stderr'].forEach((name) => { + var info = FS.analyzePath('/dev/' + name); + if (!info) return; + var stream = info.object; + var rdev = stream.rdev; + var tty = TTY.ttys[rdev]; + if (tty?.output?.length) { + has = true; + } + }); + } catch(e) {} + out = oldOut; + err = oldErr; + if (has) { + warnOnce('stdio streams had content in them that was not flushed. you should set EXIT_RUNTIME to 1 (see the Emscripten FAQ), or make sure to emit a newline when you printf etc.'); + } +} + +if (Module['preInit']) { + if (typeof Module['preInit'] == 'function') Module['preInit'] = [Module['preInit']]; + while (Module['preInit'].length > 0) { + Module['preInit'].pop()(); + } +} +consumedModuleProp('preInit'); + +run(); + +// end include: postamble.js + diff --git a/thirdparty/libzip-1.11.3/build-emcmake/examples/add-compressed-data.wasm b/thirdparty/libzip-1.11.3/build-emcmake/examples/add-compressed-data.wasm new file mode 100755 index 0000000000000000000000000000000000000000..754b4f72593752c47d5235e88bdb40bab3b9b2bb GIT binary patch literal 398069 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 %s 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

KXVKwn=xM%Cm zeiED6r!Yr-N>(WlH-Cy@X0{txv+mWgy)|L`zD6}HQh&m9@@d;)=oY3E`)ne%9$)1) zpaEbuhi>WBz7u1u4hZJXsJ$}>rE&;Dj}{CjHNnj#9a}S(v>yeSrk{PWZ;4$g0hfYo zCUl8pv|4Kmr|wDg8B8V};VX0t^a(boJA4(R!B=H8@T^~JKTnp~1imlskL3)9(;|z|_$#JI5II2p65 z9VKfKYC4aJ1$n-j{imQ7&-wvMn5bWK8gBsbh<1Vdgw4|cmf8EGf8N{{TLn2 zPPN}MFkr&KxN)|-9-oogcD$Yv{^#+-qR|hthW1gEE@IlCBhO7?-N2;LA%n)2_6$bh z99mM-&T)&1o=?$oLyEF)xDNAV%5XCWQ>Jv8?-zGxP9Nt>29DEc(rZq`$bBEkQu2BI@99TWB1;BG%EO31c5hEuoBs9v8xgfepY#leU zEyc#+g0XP$xe38PND{DfEJ2eWVCg{cQg>s%8BK191u$>$QRveHk^;9SgpvoyzEL%A zbjiHoH7t+j4S7_1!kr0!Jnd&pR=A0 zj2oV?TE-2v;-y$*jcgin2FIq6#`_t2hrR6X&o6FK#j7zt_6R!mBStSyhDaDKKSYce zqh-p#Zzi3TaC-)p4Xw^y#If>&7W!gbn%0h&OEe~p4s00=uHzyPBxc~Wzgs4zlPR<) zlg9Cs6B8umFlU^gurD3req_3g+>iLo$j!N2#!VRVf5(JTBfsa#vS4&z!Jy1kkNYx} zO~*8`G?vRum%&1JV}{C{7DK#rgws_9BL$X=Gbn?_;!N3T{QW4>$M(~6GFqG^y9Kik zWiecwgQT~oAKT09=>5?mpJqNY$>Q@+i(H$}O_%0srMUxBA-0QtSTFicg%~g7-dvP> zvv=Y7vR!zm&vov{x$ME_#cT7O-BA{e89oe{C}qm<+!v||*e@=WXLFYf7#X=VyZvH> z>=!P5p+|PP1PSN4gl5?>{K}=y@F;`ESRW4!vSj!b>==A5C!x3Szk>ij2Sf6yOFsv%`zIxMn5bYo$_(MF5T>J7pxxr>z>J_4lbWp zZh7n;Gi7vcS;hXB=6fwUA4zyK)UbYnbV*BXXC(7eStn;{;>fh9mv0Ok%gL)c9GVvG zE*#6tkv8|#SK&iHvi1P;k^b63g zq%~W!qsY=n<2@{uiyqzBm-7vsAJ&?+&e0+FGe}pbb=|Urwqa z{HiJ)l>Bne`X(`(N!o6J3wN_Gf3#A^88)#>|GMUbJ*bpmthVP+=v7h)y$T#>RQkY`@AWC0Tposo``R!q*P&<7aN$(5CRwj{uwMU1_&zxfMEQg406VCggUs*4!}5ax z9A#!a{&Gaa|A>Y5k4gG*C(HALK|GJ}7b^r7DE{EH&Z0Ukzd?SfXWE}T-IxL?I z$9j(H3u+L9yL6%Q#vzt?1Q7k>LmmN}v#FnKU4gz27HxD#kPf^7s-zlv$f&wlei8t~ z>)q3j+&tVLrqr-)%K4njs2OJfcoGd~fDZPrsbv4!t^KR7b>#(63ACKt41bK8$}SfE zz-Do=fKbW^Ro<}`j=-eGtU$Q((SV0b56D(`w&kq;^kmu4?#iRnY@Z*x#fDa=|L(h! z6+MK;!>;Y$NS>CVp_Nut=m5W5$>1o#d}4D9lxVKWN~3ZBll?6*-F5OU=d>$xw%K%2H%h(l53+9*DhDt1wbTVE$J`{@ty#}EdnlP>FztU`WXrijlkXrD|`w;gi%l9xHQelilB#5E^@`-A1-u3>= z-}MLZt`}_wY!hA8cYP1;U;V7q2`_*mJagB-mGakqeR9|LPVRcW?z*-C72mtAs_R!z z`GvkuXrg1Am}nYcu-Rc#T{1V(7i ztsCDY?+GU>-6MTMl;!VqWPL5l+6`H|+t+OO5xl^6v#)n@yZ87?N|Bu<%UzPXxzjGo zNz(R6W5e*DK4BqiaFq3JWPJzUr0bS9kKtt`EGjWn%k# zB5EJ*1rgQdi8LZf8A^)tl?uS@)m0)s%jeWn_9u@ASl=Uk`M@OU`#eGi>U}LAZqIZO zDej5{7$r&hA;p{+K;Q_^^J7xn!Uk%;f87ZUsnaSJ;Z(bYw55!dcE&P&XE0wpGzEA& ze0(y#d3~2MLnN|^v6@#TH6N>SUE0ICv|zO|EqfLpq$2`5Dy#2eoDwN3PC!k}THA<< z0k%t7j(z57N|vRqyjjP|VG+}C7h|=QI4t(JPajkrtKH6HQKq+y%g{Cq#9lF8idtNG z14<0lriAs=tMUn|fw8)ySr=n9>=Slki0{M@-+}QPHuV$ToM(l9Q7!dF>EVHBO15)X z_yUvF7vxjyS$0XXv{;K;!|T;{=}N|KywN3wuuE}E@gdAz1MN#)jNw-Ma=i0R3}u$3 zmk&(VrA?Z^B+c0__7A)9j1xu4cJB^fN71jx$+t-ZS=shX34mF^j#>|*fzTEzF4hcvFg8kY1)>I zb8N@9x3qBn3whgl7Jn`GFuq~Hkei*?y&um95t2$5`}Dg%D(oL$WQ~k+FXu1m9>qwq z13Gz4e_uvqe;BYJ+Yf~IV2!Gq!VBBG?8h(!YJJKc@h3)j^Mk@q=`VM$>kdDozkXKf zFXy=!f$7)<5DCcz9D;}4AzgUaW$ZuVoZKWQI}M=!Qr7z59(J7phKqqUHAFz-KqHi|WBauTFImz$Bf7C6ciPC2*pOWSzH?&m7-c;+svGY)PlVvl{)`&wA?1hExh)u2 z#5#%#p(gSCNxi=(Wr%kq^^U^6d{htg7A}a1xfg>=8+K(S)MHwvf5*5V-56{;n3Rc{ zA&)ss%3X4rBjY$OU{{vAT+PWKY?4`70gVn0lia>M37heW@e)R5w<}jV zl==8%^6oABvge&yBS$ojKh?@B@$f>mE+s3DT>u$Q4Y6B+%-Q+{t;T2Fs%P@CTJc;Ii*rj62KW4X7A zScTO#Y{Hm_-=QF;U#~YBg}L>c%i;c`$Q%)gZZj4^mTg$H8`PNZQDJ}!|q(G9~Bk%k?Z zShm;<%Qpi%@CjsUlTFxlI8nx6*8#IIi6>!7#4OCUEKz~DEm(n1N$-O_m=2ke=C*Lv z)5^CcD<3zPg^^ehf#?i361%q>7Gjd8qr&2WJiqNkxs^_l9pkigvebheev9pF-^HLd zDO+6x#wp2{fCp#^XodJDk1N5wWues0upd3?b`@b&YOTJrybO%%NFgnbN{|+vS_Nv; z3d^8o?ho&P&K*o<4Y3&UD289tWN zAi?uyD;OMY5VDMpoJNN`J!wyiBTR|W0UT%l>gebW_1w35wZpG}fK1@u#Gnp zTO3bCe=hZBTxzZ%Z#|=iKaI)WK>R``npS90*haFw39i!5W8iP@M5CaDZL}*QF+1Ucd z?46^{p*c}RTZv{&4Y3W4Y%0E>MXhgy8`%e^*-Bv7?%1kb+ZA-X_8|5VUfEZY$_Ck& z<#`e!vJDmrLu$;uO1to3&0Q}^CDIdap~=0yNf-~yT6`+<5@fmYf(E1+q09A zLl_Ue0l8Ms0LsY%Qub^b%-HxgNguX=%=?ejg4*%`O1CerVUx)$)TLczb8=*o)d*^{ ztVWPi(YI-M#Y2(2`k0|1Q!(4n-2o-$7(}4P_6vO}I6d}+XQ&*13}b4EATBW`a`=G} z=qSbs0Wz?vsP8GzrV*pQkMzH-Ng@_qwer&pxQ}I_PgK&TlR-ihAk=irm`iob7_od2 z;KQW@3rUJ0!mhKMArf>XN5)ph$xbT0v+R;?CF#H})+fTtE?T&I%UU@5+{$r>4m;eu zgQ|2VsCiHviy}c>6cX^2HL-)C@rH3OD*J~I( z=hor)sJPh5?(+BQhE5G4XO{2yIA-}a zwwQlZUf^0uRZbo+|y<~?roWKp@h7-7f7KLMd zQRsz^)y7jdX`CF1#z$|aE^Rxr6_8dBu1s8I$2n1ZOd+)R$$s+$!LfR@--N@0Stkxu zHk~ISbV5qbOzDa<(}6fMq0AKRIdNkGSb#D+ zCEdZ4yqDm%*g_JU%-M;g^CW3bq*m-;D@uX6j?S8kLh}+y^ITF|UP~}tL`m!qFVJs6 zvzoO7q^ZsFU&?DU%Kr2sI&lFxG!a}J9hZ*4V~H}_j>c|{yU`KsM!AWL$~UnkT$*Y( z;j=E)hV%$Fq?Ef{<-DdAHmB`7%5mum?Me@4bIQ-FBRZ=~=q#`JTHk_R!|lCJ0sl*PIt*R}BJ@A$k zyHdMl3t_j$GPfljOoQaXB;)cOeIZ(8S{6&`EMmEDPyOGxHelz925s87@)3H=XVq5i zUwLfqjvH7lYCPXPf^1c%&{iCsd?VYyMwT|+SMKOmT%MRn+05Rr&1^E4K1gN0q3tt? z#7%7$Qb!JF${X5_t!-#QZzYq*6WYrrpSbFHGB$%vt?z3q&3IbOj@s_Bm-ViGR(o14 zl~!m>u8g}{xHXi{wpPnu@~+_4KCgSfN<@$BXunw#pE~xk@^yk`BT8i7y4oeOtxYA{ zS~jws>}<8Aec2_F_a%~GeLOx@+0Ir(zNW3LM6#!KCF4%ELGDfPne}mRVu#C4R!Wlh zbwsY$^s>Q2*KVjP$2RmBiy&G{`-Qhj%8F%fy>RsEEuss&F zt94b_oxbm_`#?o|K_W0+vT0;9%caq5^cvXwk_s9jO}_2l zK277;HUe`^Ba!VaTiXdpWJAlP<6I(n$CETs64}(U!#%z#F>Y#^RinhXscpd335jf2 z+1s8>aa^3Zbc#!id)+OZohmxAqg9k!yhEcz-_S}&7#>sF!m_W8dsr@=<`R9M3mKYp zEc-rHB)SWfB;xbrt;YT7Y;W~Bk~mZDPma%;Bg~aRT%7QCnuqh%{IuWG`7#~wR&Wm|fLfL59v>%BH}b;4$0=R$ zaXJtmC*&;DKln7^@U#eFcr`6do933xGGAxEZRiTe_{>+p7h zq>;BGK1L{!mtNnJHXc{H#_9*O*gr>0pnnr{z_kgs^DS4;E zvhH+Y2*;y zg0AX-uaTcnH5Q?2MDPZOU2Q<{TamfZ-a_z3XL%H)>g^~PXw^F|?_H5HYMB5l!yE+{4do0?2Q1Gp)w1u``y17-?bzLPgj^=ipGg`@;GbyBrj;8WARTJTac zyxP-57YB7C7^>5uivuWy7G)S~D{?)3ul-Ey|#%P7yY8X|`)Y z-dSjo;G@o}Y5`1Yj%xuv>U`H?u5e59B8lTDA)?Tt42bF$Aj&JfNC+tP1yCqY00?!l zYjKIRSme6Dov#w+QIt6Yn# zMd=8aV>eumNu{tkUh7&w;^3&W4ITQ&^MMR@cTs1=$hOw2@i<25w^x* zVrzU*x$9tegtC!G{ozb|O?X5y9~FJ0J&Mf7#NY^RBOHwb!s8ixT+DXX&IBN{5zF{YKtrNLuNmG%GP)jXG7vJV+Lu-BD;d}rAzox^Qab#Ls+PPjlk}Q% zFuqu=c5TMidbQ5UDEr~->Weob9pg~w7?HU?10y30jNK41(#IQg(~`R1%D{vuwKs}a zQA$9_$XI_TGBS3Hk|V@&#(J|-o4oI%_UNqf zdAF+eFxu92*50eVJ0;%yuhD?UTs z+UY?2AWmRvX|Yv&*-8)kZrSy`KzwOQGYaIP9Xn;mWz z+D2jpNc;23+P8)|VsBJ8pD)HnjgGmhc%HL1&dUykzmf76h`|x|M&>n@zpz>!2FHsi z)({rZ5_lUcn!@6Eu?xOL{E5o3kQ>InZjqBREfr&X_sRnze3Wk zKw49JNM=Zq?MhKOO3+nauBk%j2-!%KbZyqIB?~Mgkj4Df|%2HGzaGA8dMU0NRy|>0Pw`HMqlwP-s=n*zY z7_{T1W#V&G?=BaYqk8wwc;%lWaa5b{62&7ljv#ORQlnTM@5$~1r6WCkZ)he3D`}k5XmPb#3)sc_r9tnS>956jT$QMpq#j&WAhb8dg>aBz6@ewXGi1m@b zCeBB`K9=1-K=ufuc3-Z?C(Gs9;CqDWQ3L+zSobrccvO!(8wIU!rpFbuX=TjvT*CO+ zAjU_pYn5mpA$;r#FNie~T1coK<3sVH=V=q^BcB&(Q}R$W1~?ok-5S=2`B5srEdEER z9i0M_RB=H1qtX^$75QV|W$bHNs36tewd#nqi3&v;f>;nL{yVlBKfSR8L&i(CsJoC9QY?{LKwM`Y#hUS_SOJD&-D+;+w7Nj{!BG+Xt3N8Z;)yP(d2k zj>%PqN>do?d0U~5ge+3cALm?=V-Zv4kE{%u3F45H;K(A`3X3G7Ckj`QD094+Bqas% zNLLEFNWMmA(LWjR9-8JCss>~hc37Vdk$zsoG6zpdRtMUiQix z!YdGe!>r2~cvZE(ma|uL_8RK1g|4Ywt}U#CcZ70-!s}7#H{fa_p%~tbg4V-3lC$+F zxglnGD`#(cT^nPTw{ynVw;2QPF&*2ub-@s&MU()c^jR#WAYtgOrG|Q&D)r~jm<-}%h{mL9P08D-NS`X{Q>)Ua z0U{FI3sU-JtMz=I8(CE%G;TFI}6!o=k4rr zxwddl-p--ipfEEkH!E+mNGOJLqoCP&PTuBtUFXLvbMwa6x%sXzFK-AU zYPYBeuc3U7NS-=)~()-SuQG>XsJ64N>-udAkwW z#c)$hSe&=TBs7F2s_f>xEy>%>NM5RRTZ)7RBkvNDZpj;;8}jk#W&xVFTRGZ~4Z1CF zw;`!1+@81F`O+HhP&eIC?WSdUTjq5w_sZ+Toq6Nyos5Bhs`k6`_RqZCh5C2r?e229 zws240?xEbEaBo!lzP#N>LNVMQ1wD{AzCM7G55_DH*1K?k-YKs5yrryc|#Bx zA1#l8$2?D4csy@>9;4CnxA14-iG2HuHQ~v;J(0I3xln$NpUT@)$j^qSJ;O73dpd8= z@T5GemaNFzvw2%VOIE56R+ih+8lKDBbCkn6n78No(i&DN$Es?M7xMOkYyM&$o5Je6 zy_mPvwCttWvNd^I!}a>`a^6ULncjOvb-tRnSMv5Mb-pHvuazaXg|&HGyTw3Wm$!9Z z#p}xXdO2rnctZpE&Ah#lw>N352J(8Uwe|dvLDf5@Eo{i!2Fec#Z~3s>n76m`wvn3O zjyk@Rw|B?@CwWYGFK_R8jhm$E=Dcmn+h!W|zS8Y|#5WjuH<9!~-uS#-9%gN!w_v>> z39|xZDDf3CKvinB2x-B#g#d=K;NHQsLb$F3-tZ8f=w;hG|H>*r&F6v z=SSt7uPw|d*bK^N!)cU9!fA!_()jd(oz9h>a7Mw-h^aV67wk+bi5t$d3U-#4KD!`q zgL4XYcEQdm3=K2YHM0sfvtYC6%X15Mu1dwHV0OV~Q;ai{^O9Q6tJFHjdt~=;e!=*9 zexY>fF}=MtVQ#_Z7Q(zj#o9K%VDk}ywe5lek8reY7I9O?1rQpZY)Gp(M^T+`mnfQHx_Jh zVMJI`u$v0DgpqV}!EPomt56rtzCBiQYr*)+ze@|-QcZ6S|I=Z&73?-uR%h22!tDjS zU2UtgOCh@}*d6N1I-6Gr%aCHr%Ht~=ma8-GEZFjb-APmbsixjluzwcpE}D9G($u@- z-O7f0)HC-M?4E+%OZNMe{r-a8SFroZ{y@PV=yTT}^fB^K!5%EwL#on81GdaW>ciy@ z%!Ws##iIp#q+pLC_A!ZlykL(N>~X|CQLrZ}V%x%#1$&a7DTSwyV^38^($jhXo+;SV z1$#yhfcCx5s=3d`CqR#PHms2Fl?7W-u$9#HoPIuEu;&W)Jaw&-%vEL0b`LM;@{0v~ zpHwyN8!T8rdrQ0M=>hB)j)E!t~ur~{~9)&hY*jokLP_VZU zwo$@1R)xJ?u(#=}y~8_k6un!pcS$%Pyr+Vj3ie*XHWhH5*3b6~wz**M7ka`61*60V zjKkg{>WnU0Z_!2<X&nVjIMLVN7G@PkcpH;Lo zi*{C#C8>m-U1X}J{5dLrj+ZY_k28xlliC}@EUA2M(PkCx+~NUYw#1xQwAn>F4>5Bj zW{!&iRU$FxZy{!G(dN3Cc|{(l`9+&owE4x3aDl{JShNd@b|GReLJWc~k|6a|TUb!E z1r!_7VU+iy@=@5O1ITs8+l(K>7}CaSy`=ZP0`l4u$Og{Un$zl zMSF#&zUq~~RsY3MSHVo>#1pj(rtrRPTn_3 zdaG!B)>bRuShS5U>}}oTci>De+B;PKu2=qE(cUfEdsMzD*0s54n?3*gG2w%vec+Y% z%FTFmt@YO0=vq8$YDu?aYBjvc+e^}zTH~{+TKU*o8w;xhM?JONe-r5YvXHe0?{art4*eb$jWv18KbT2al zWjX6Ot=4AL+G%KedaaS^^jIpcPIeJt zMxM>2zIOD^$x7(eWpc_xR+!Z3UlOpSZ9K-tQH= z?|KP%Kfj9N@!2PAkJ#;z`YDJWwo5GQe$i

Jt(l!DM!@#!g@|pRoZ#YK@AfAzqu>yVxPBN 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 z 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 literal 0 HcmV?d00001 diff --git a/thirdparty/libzip-1.11.3/build-emcmake/examples/autoclose-archive.js b/thirdparty/libzip-1.11.3/build-emcmake/examples/autoclose-archive.js new file mode 100644 index 0000000..470d192 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/examples/autoclose-archive.js @@ -0,0 +1,4814 @@ +// include: shell.js +// The Module object: Our interface to the outside world. We import +// and export values on it. There are various ways Module can be used: +// 1. Not defined. We create it here +// 2. A function parameter, function(moduleArg) => Promise +// 3. pre-run appended it, var Module = {}; ..generated code.. +// 4. External script tag defines var Module. +// We need to check if Module already exists (e.g. case 3 above). +// Substitution will be replaced with actual code on later stage of the build, +// this way Closure Compiler will not mangle it (e.g. case 4. above). +// Note that if you want to run closure, and also to use Module +// after the generated code, you will need to define var Module = {}; +// before the code. Then that object will be used in the code, and you +// can continue to use Module afterwards as well. +var Module = typeof Module != 'undefined' ? Module : {}; + +// Determine the runtime environment we are in. You can customize this by +// setting the ENVIRONMENT setting at compile time (see settings.js). + +// Attempt to auto-detect the environment +var ENVIRONMENT_IS_WEB = typeof window == 'object'; +var ENVIRONMENT_IS_WORKER = typeof WorkerGlobalScope != 'undefined'; +// N.b. Electron.js environment is simultaneously a NODE-environment, but +// also a web environment. +var ENVIRONMENT_IS_NODE = typeof process == 'object' && typeof process.versions == 'object' && typeof process.versions.node == 'string' && process.type != 'renderer'; +var ENVIRONMENT_IS_SHELL = !ENVIRONMENT_IS_WEB && !ENVIRONMENT_IS_NODE && !ENVIRONMENT_IS_WORKER; + +if (ENVIRONMENT_IS_NODE) { + +} + +// --pre-jses are emitted after the Module integration code, so that they can +// refer to Module (if they choose; they can also define Module) + + +// Sometimes an existing Module object exists with properties +// meant to overwrite the default module functionality. Here +// we collect those properties and reapply _after_ we configure +// the current environment's defaults to avoid having to be so +// defensive during initialization. +var moduleOverrides = {...Module}; + +var arguments_ = []; +var thisProgram = './this.program'; +var quit_ = (status, toThrow) => { + throw toThrow; +}; + +// `/` should be present at the end if `scriptDirectory` is not empty +var scriptDirectory = ''; +function locateFile(path) { + if (Module['locateFile']) { + return Module['locateFile'](path, scriptDirectory); + } + return scriptDirectory + path; +} + +// Hooks that are implemented differently in different runtime environments. +var readAsync, readBinary; + +if (ENVIRONMENT_IS_NODE) { + if (typeof process == 'undefined' || !process.release || process.release.name !== 'node') throw new Error('not compiled for this environment (did you build to HTML and try to run it not on the web, or set ENVIRONMENT to something - like node - and run it someplace else - like on the web?)'); + + var nodeVersion = process.versions.node; + var numericVersion = nodeVersion.split('.').slice(0, 3); + numericVersion = (numericVersion[0] * 10000) + (numericVersion[1] * 100) + (numericVersion[2].split('-')[0] * 1); + var minVersion = 160000; + if (numericVersion < 160000) { + throw new Error('This emscripten-generated code requires node v16.0.0 (detected v' + nodeVersion + ')'); + } + + // These modules will usually be used on Node.js. Load them eagerly to avoid + // the complexity of lazy-loading. + var fs = require('fs'); + var nodePath = require('path'); + + scriptDirectory = __dirname + '/'; + +// include: node_shell_read.js +readBinary = (filename) => { + // We need to re-wrap `file://` strings to URLs. + filename = isFileURI(filename) ? new URL(filename) : filename; + var ret = fs.readFileSync(filename); + assert(Buffer.isBuffer(ret)); + return ret; +}; + +readAsync = async (filename, binary = true) => { + // See the comment in the `readBinary` function. + filename = isFileURI(filename) ? new URL(filename) : filename; + var ret = fs.readFileSync(filename, binary ? undefined : 'utf8'); + assert(binary ? Buffer.isBuffer(ret) : typeof ret == 'string'); + return ret; +}; +// end include: node_shell_read.js + if (!Module['thisProgram'] && process.argv.length > 1) { + thisProgram = process.argv[1].replace(/\\/g, '/'); + } + + arguments_ = process.argv.slice(2); + + if (typeof module != 'undefined') { + module['exports'] = Module; + } + + quit_ = (status, toThrow) => { + process.exitCode = status; + throw toThrow; + }; + +} else +if (ENVIRONMENT_IS_SHELL) { + + if ((typeof process == 'object' && typeof require === 'function') || typeof window == 'object' || typeof WorkerGlobalScope != 'undefined') throw new Error('not compiled for this environment (did you build to HTML and try to run it not on the web, or set ENVIRONMENT to something - like node - and run it someplace else - like on the web?)'); + +} else + +// Note that this includes Node.js workers when relevant (pthreads is enabled). +// Node.js workers are detected as a combination of ENVIRONMENT_IS_WORKER and +// ENVIRONMENT_IS_NODE. +if (ENVIRONMENT_IS_WEB || ENVIRONMENT_IS_WORKER) { + if (ENVIRONMENT_IS_WORKER) { // Check worker, not web, since window could be polyfilled + scriptDirectory = self.location.href; + } else if (typeof document != 'undefined' && document.currentScript) { // web + scriptDirectory = document.currentScript.src; + } + // blob urls look like blob:http://site.com/etc/etc and we cannot infer anything from them. + // otherwise, slice off the final part of the url to find the script directory. + // if scriptDirectory does not contain a slash, lastIndexOf will return -1, + // and scriptDirectory will correctly be replaced with an empty string. + // If scriptDirectory contains a query (starting with ?) or a fragment (starting with #), + // they are removed because they could contain a slash. + if (scriptDirectory.startsWith('blob:')) { + scriptDirectory = ''; + } else { + scriptDirectory = scriptDirectory.slice(0, scriptDirectory.replace(/[?#].*/, '').lastIndexOf('/')+1); + } + + if (!(typeof window == 'object' || typeof WorkerGlobalScope != 'undefined')) throw new Error('not compiled for this environment (did you build to HTML and try to run it not on the web, or set ENVIRONMENT to something - like node - and run it someplace else - like on the web?)'); + + { +// include: web_or_worker_shell_read.js +if (ENVIRONMENT_IS_WORKER) { + readBinary = (url) => { + var xhr = new XMLHttpRequest(); + xhr.open('GET', url, false); + xhr.responseType = 'arraybuffer'; + xhr.send(null); + return new Uint8Array(/** @type{!ArrayBuffer} */(xhr.response)); + }; + } + + readAsync = async (url) => { + // Fetch has some additional restrictions over XHR, like it can't be used on a file:// url. + // See https://github.com/github/fetch/pull/92#issuecomment-140665932 + // Cordova or Electron apps are typically loaded from a file:// url. + // So use XHR on webview if URL is a file URL. + if (isFileURI(url)) { + return new Promise((resolve, reject) => { + var xhr = new XMLHttpRequest(); + xhr.open('GET', url, true); + xhr.responseType = 'arraybuffer'; + xhr.onload = () => { + if (xhr.status == 200 || (xhr.status == 0 && xhr.response)) { // file URLs can return 0 + resolve(xhr.response); + return; + } + reject(xhr.status); + }; + xhr.onerror = reject; + xhr.send(null); + }); + } + var response = await fetch(url, { credentials: 'same-origin' }); + if (response.ok) { + return response.arrayBuffer(); + } + throw new Error(response.status + ' : ' + response.url); + }; +// end include: web_or_worker_shell_read.js + } +} else +{ + throw new Error('environment detection error'); +} + +var out = Module['print'] || console.log.bind(console); +var err = Module['printErr'] || console.error.bind(console); + +// Merge back in the overrides +Object.assign(Module, moduleOverrides); +// Free the object hierarchy contained in the overrides, this lets the GC +// reclaim data used. +moduleOverrides = null; +checkIncomingModuleAPI(); + +// Emit code to handle expected values on the Module object. This applies Module.x +// to the proper local x. This has two benefits: first, we only emit it if it is +// expected to arrive, and second, by using a local everywhere else that can be +// minified. + +if (Module['arguments']) arguments_ = Module['arguments'];legacyModuleProp('arguments', 'arguments_'); + +if (Module['thisProgram']) thisProgram = Module['thisProgram'];legacyModuleProp('thisProgram', 'thisProgram'); + +// perform assertions in shell.js after we set up out() and err(), as otherwise if an assertion fails it cannot print the message +// Assertions on removed incoming Module JS APIs. +assert(typeof Module['memoryInitializerPrefixURL'] == 'undefined', 'Module.memoryInitializerPrefixURL option was removed, use Module.locateFile instead'); +assert(typeof Module['pthreadMainPrefixURL'] == 'undefined', 'Module.pthreadMainPrefixURL option was removed, use Module.locateFile instead'); +assert(typeof Module['cdInitializerPrefixURL'] == 'undefined', 'Module.cdInitializerPrefixURL option was removed, use Module.locateFile instead'); +assert(typeof Module['filePackagePrefixURL'] == 'undefined', 'Module.filePackagePrefixURL option was removed, use Module.locateFile instead'); +assert(typeof Module['read'] == 'undefined', 'Module.read option was removed'); +assert(typeof Module['readAsync'] == 'undefined', 'Module.readAsync option was removed (modify readAsync in JS)'); +assert(typeof Module['readBinary'] == 'undefined', 'Module.readBinary option was removed (modify readBinary in JS)'); +assert(typeof Module['setWindowTitle'] == 'undefined', 'Module.setWindowTitle option was removed (modify emscripten_set_window_title in JS)'); +assert(typeof Module['TOTAL_MEMORY'] == 'undefined', 'Module.TOTAL_MEMORY has been renamed Module.INITIAL_MEMORY'); +legacyModuleProp('asm', 'wasmExports'); +legacyModuleProp('readAsync', 'readAsync'); +legacyModuleProp('readBinary', 'readBinary'); +legacyModuleProp('setWindowTitle', 'setWindowTitle'); +var IDBFS = 'IDBFS is no longer included by default; build with -lidbfs.js'; +var PROXYFS = 'PROXYFS is no longer included by default; build with -lproxyfs.js'; +var WORKERFS = 'WORKERFS is no longer included by default; build with -lworkerfs.js'; +var FETCHFS = 'FETCHFS is no longer included by default; build with -lfetchfs.js'; +var ICASEFS = 'ICASEFS is no longer included by default; build with -licasefs.js'; +var JSFILEFS = 'JSFILEFS is no longer included by default; build with -ljsfilefs.js'; +var OPFS = 'OPFS is no longer included by default; build with -lopfs.js'; + +var NODEFS = 'NODEFS is no longer included by default; build with -lnodefs.js'; + +assert(!ENVIRONMENT_IS_SHELL, 'shell environment detected but not enabled at build time. Add `shell` to `-sENVIRONMENT` to enable.'); + +// end include: shell.js + +// include: preamble.js +// === Preamble library stuff === + +// Documentation for the public APIs defined in this file must be updated in: +// site/source/docs/api_reference/preamble.js.rst +// A prebuilt local version of the documentation is available at: +// site/build/text/docs/api_reference/preamble.js.txt +// You can also build docs locally as HTML or other formats in site/ +// An online HTML version (which may be of a different version of Emscripten) +// is up at http://kripken.github.io/emscripten-site/docs/api_reference/preamble.js.html + +var wasmBinary = Module['wasmBinary'];legacyModuleProp('wasmBinary', 'wasmBinary'); + +if (typeof WebAssembly != 'object') { + err('no native wasm support detected'); +} + +// Wasm globals + +var wasmMemory; + +//======================================== +// Runtime essentials +//======================================== + +// whether we are quitting the application. no code should run after this. +// set in exit() and abort() +var ABORT = false; + +// set by exit() and abort(). Passed to 'onExit' handler. +// NOTE: This is also used as the process return code code in shell environments +// but only when noExitRuntime is false. +var EXITSTATUS; + +// In STRICT mode, we only define assert() when ASSERTIONS is set. i.e. we +// don't define it at all in release modes. This matches the behaviour of +// MINIMAL_RUNTIME. +// TODO(sbc): Make this the default even without STRICT enabled. +/** @type {function(*, string=)} */ +function assert(condition, text) { + if (!condition) { + abort('Assertion failed' + (text ? ': ' + text : '')); + } +} + +// We used to include malloc/free by default in the past. Show a helpful error in +// builds with assertions. +function _malloc() { + abort('malloc() called but not included in the build - add `_malloc` to EXPORTED_FUNCTIONS'); +} +function _free() { + // Show a helpful error since we used to include free by default in the past. + abort('free() called but not included in the build - add `_free` to EXPORTED_FUNCTIONS'); +} + +// Memory management + +var HEAP, +/** @type {!Int8Array} */ + HEAP8, +/** @type {!Uint8Array} */ + HEAPU8, +/** @type {!Int16Array} */ + HEAP16, +/** @type {!Uint16Array} */ + HEAPU16, +/** @type {!Int32Array} */ + HEAP32, +/** @type {!Uint32Array} */ + HEAPU32, +/** @type {!Float32Array} */ + HEAPF32, +/* BigInt64Array type is not correctly defined in closure +/** not-@type {!BigInt64Array} */ + HEAP64, +/* BigUint64Array type is not correctly defined in closure +/** not-t@type {!BigUint64Array} */ + HEAPU64, +/** @type {!Float64Array} */ + HEAPF64; + +var runtimeInitialized = false; + +/** + * Indicates whether filename is delivered via file protocol (as opposed to http/https) + * @noinline + */ +var isFileURI = (filename) => filename.startsWith('file://'); + +// include: runtime_shared.js +// include: runtime_stack_check.js +// Initializes the stack cookie. Called at the startup of main and at the startup of each thread in pthreads mode. +function writeStackCookie() { + var max = _emscripten_stack_get_end(); + assert((max & 3) == 0); + // If the stack ends at address zero we write our cookies 4 bytes into the + // stack. This prevents interference with SAFE_HEAP and ASAN which also + // monitor writes to address zero. + if (max == 0) { + max += 4; + } + // The stack grow downwards towards _emscripten_stack_get_end. + // We write cookies to the final two words in the stack and detect if they are + // ever overwritten. + HEAPU32[((max)>>2)] = 0x02135467; + HEAPU32[(((max)+(4))>>2)] = 0x89BACDFE; + // Also test the global address 0 for integrity. + HEAPU32[((0)>>2)] = 1668509029; +} + +function checkStackCookie() { + if (ABORT) return; + var max = _emscripten_stack_get_end(); + // See writeStackCookie(). + if (max == 0) { + max += 4; + } + var cookie1 = HEAPU32[((max)>>2)]; + var cookie2 = HEAPU32[(((max)+(4))>>2)]; + if (cookie1 != 0x02135467 || cookie2 != 0x89BACDFE) { + abort(`Stack overflow! Stack cookie has been overwritten at ${ptrToString(max)}, expected hex dwords 0x89BACDFE and 0x2135467, but received ${ptrToString(cookie2)} ${ptrToString(cookie1)}`); + } + // Also test the global address 0 for integrity. + if (HEAPU32[((0)>>2)] != 0x63736d65 /* 'emsc' */) { + abort('Runtime error: The application has corrupted its heap memory area (address zero)!'); + } +} +// end include: runtime_stack_check.js +// include: runtime_exceptions.js +// end include: runtime_exceptions.js +// include: runtime_debug.js +// Endianness check +(() => { + var h16 = new Int16Array(1); + var h8 = new Int8Array(h16.buffer); + h16[0] = 0x6373; + if (h8[0] !== 0x73 || h8[1] !== 0x63) throw 'Runtime error: expected the system to be little-endian! (Run with -sSUPPORT_BIG_ENDIAN to bypass)'; +})(); + +if (Module['ENVIRONMENT']) { + throw new Error('Module.ENVIRONMENT has been deprecated. To force the environment, use the ENVIRONMENT compile-time option (for example, -sENVIRONMENT=web or -sENVIRONMENT=node)'); +} + +function legacyModuleProp(prop, newName, incoming=true) { + if (!Object.getOwnPropertyDescriptor(Module, prop)) { + Object.defineProperty(Module, prop, { + configurable: true, + get() { + let extra = incoming ? ' (the initial value can be provided on Module, but after startup the value is only looked for on a local variable of that name)' : ''; + abort(`\`Module.${prop}\` has been replaced by \`${newName}\`` + extra); + + } + }); + } +} + +function consumedModuleProp(prop) { + if (!Object.getOwnPropertyDescriptor(Module, prop)) { + Object.defineProperty(Module, prop, { + configurable: true, + set() { + abort(`Attempt to set \`Module.${prop}\` after it has already been processed. This can happen, for example, when code is injected via '--post-js' rather than '--pre-js'`); + + } + }); + } +} + +function ignoredModuleProp(prop) { + if (Object.getOwnPropertyDescriptor(Module, prop)) { + abort(`\`Module.${prop}\` was supplied but \`${prop}\` not included in INCOMING_MODULE_JS_API`); + } +} + +// forcing the filesystem exports a few things by default +function isExportedByForceFilesystem(name) { + return name === 'FS_createPath' || + name === 'FS_createDataFile' || + name === 'FS_createPreloadedFile' || + name === 'FS_unlink' || + name === 'addRunDependency' || + // The old FS has some functionality that WasmFS lacks. + name === 'FS_createLazyFile' || + name === 'FS_createDevice' || + name === 'removeRunDependency'; +} + +/** + * Intercept access to a global symbol. This enables us to give informative + * warnings/errors when folks attempt to use symbols they did not include in + * their build, or no symbols that no longer exist. + */ +function hookGlobalSymbolAccess(sym, func) { + if (typeof globalThis != 'undefined' && !Object.getOwnPropertyDescriptor(globalThis, sym)) { + Object.defineProperty(globalThis, sym, { + configurable: true, + get() { + func(); + return undefined; + } + }); + } +} + +function missingGlobal(sym, msg) { + hookGlobalSymbolAccess(sym, () => { + warnOnce(`\`${sym}\` is not longer defined by emscripten. ${msg}`); + }); +} + +missingGlobal('buffer', 'Please use HEAP8.buffer or wasmMemory.buffer'); +missingGlobal('asm', 'Please use wasmExports instead'); + +function missingLibrarySymbol(sym) { + hookGlobalSymbolAccess(sym, () => { + // Can't `abort()` here because it would break code that does runtime + // checks. e.g. `if (typeof SDL === 'undefined')`. + var msg = `\`${sym}\` is a library symbol and not included by default; add it to your library.js __deps or to DEFAULT_LIBRARY_FUNCS_TO_INCLUDE on the command line`; + // DEFAULT_LIBRARY_FUNCS_TO_INCLUDE requires the name as it appears in + // library.js, which means $name for a JS name with no prefix, or name + // for a JS name like _name. + var librarySymbol = sym; + if (!librarySymbol.startsWith('_')) { + librarySymbol = '$' + sym; + } + msg += ` (e.g. -sDEFAULT_LIBRARY_FUNCS_TO_INCLUDE='${librarySymbol}')`; + if (isExportedByForceFilesystem(sym)) { + msg += '. Alternatively, forcing filesystem support (-sFORCE_FILESYSTEM) can export this for you'; + } + warnOnce(msg); + }); + + // Any symbol that is not included from the JS library is also (by definition) + // not exported on the Module object. + unexportedRuntimeSymbol(sym); +} + +function unexportedRuntimeSymbol(sym) { + if (!Object.getOwnPropertyDescriptor(Module, sym)) { + Object.defineProperty(Module, sym, { + configurable: true, + get() { + var msg = `'${sym}' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the Emscripten FAQ)`; + if (isExportedByForceFilesystem(sym)) { + msg += '. Alternatively, forcing filesystem support (-sFORCE_FILESYSTEM) can export this for you'; + } + abort(msg); + } + }); + } +} + +var runtimeDebug = true; // Switch to false at runtime to disable logging at the right times + +// Used by XXXXX_DEBUG settings to output debug messages. +function dbg(...args) { + if (!runtimeDebug && typeof runtimeDebug != 'undefined') return; + // TODO(sbc): Make this configurable somehow. Its not always convenient for + // logging to show up as warnings. + console.warn(...args); +} +// end include: runtime_debug.js +// include: memoryprofiler.js +// end include: memoryprofiler.js + + +function updateMemoryViews() { + var b = wasmMemory.buffer; + Module['HEAP8'] = HEAP8 = new Int8Array(b); + Module['HEAP16'] = HEAP16 = new Int16Array(b); + Module['HEAPU8'] = HEAPU8 = new Uint8Array(b); + Module['HEAPU16'] = HEAPU16 = new Uint16Array(b); + Module['HEAP32'] = HEAP32 = new Int32Array(b); + Module['HEAPU32'] = HEAPU32 = new Uint32Array(b); + Module['HEAPF32'] = HEAPF32 = new Float32Array(b); + Module['HEAPF64'] = HEAPF64 = new Float64Array(b); + Module['HEAP64'] = HEAP64 = new BigInt64Array(b); + Module['HEAPU64'] = HEAPU64 = new BigUint64Array(b); +} + +// end include: runtime_shared.js +assert(!Module['STACK_SIZE'], 'STACK_SIZE can no longer be set at runtime. Use -sSTACK_SIZE at link time') + +assert(typeof Int32Array != 'undefined' && typeof Float64Array !== 'undefined' && Int32Array.prototype.subarray != undefined && Int32Array.prototype.set != undefined, + 'JS engine does not provide full typed array support'); + +// If memory is defined in wasm, the user can't provide it, or set INITIAL_MEMORY +assert(!Module['wasmMemory'], 'Use of `wasmMemory` detected. Use -sIMPORTED_MEMORY to define wasmMemory externally'); +assert(!Module['INITIAL_MEMORY'], 'Detected runtime INITIAL_MEMORY setting. Use -sIMPORTED_MEMORY to define wasmMemory dynamically'); + +function preRun() { + if (Module['preRun']) { + if (typeof Module['preRun'] == 'function') Module['preRun'] = [Module['preRun']]; + while (Module['preRun'].length) { + addOnPreRun(Module['preRun'].shift()); + } + } + consumedModuleProp('preRun'); + callRuntimeCallbacks(onPreRuns); +} + +function initRuntime() { + assert(!runtimeInitialized); + runtimeInitialized = true; + + checkStackCookie(); + + if (!Module['noFSInit'] && !FS.initialized) FS.init(); +TTY.init(); + + wasmExports['__wasm_call_ctors'](); + + FS.ignorePermissions = false; +} + +function preMain() { + checkStackCookie(); + +} + +function postRun() { + checkStackCookie(); + + if (Module['postRun']) { + if (typeof Module['postRun'] == 'function') Module['postRun'] = [Module['postRun']]; + while (Module['postRun'].length) { + addOnPostRun(Module['postRun'].shift()); + } + } + consumedModuleProp('postRun'); + + callRuntimeCallbacks(onPostRuns); +} + +// A counter of dependencies for calling run(). If we need to +// do asynchronous work before running, increment this and +// decrement it. Incrementing must happen in a place like +// Module.preRun (used by emcc to add file preloading). +// Note that you can add dependencies in preRun, even though +// it happens right before run - run will be postponed until +// the dependencies are met. +var runDependencies = 0; +var dependenciesFulfilled = null; // overridden to take different actions when all run dependencies are fulfilled +var runDependencyTracking = {}; +var runDependencyWatcher = null; + +function getUniqueRunDependency(id) { + var orig = id; + while (1) { + if (!runDependencyTracking[id]) return id; + id = orig + Math.random(); + } +} + +function addRunDependency(id) { + runDependencies++; + + Module['monitorRunDependencies']?.(runDependencies); + + if (id) { + assert(!runDependencyTracking[id]); + runDependencyTracking[id] = 1; + if (runDependencyWatcher === null && typeof setInterval != 'undefined') { + // Check for missing dependencies every few seconds + runDependencyWatcher = setInterval(() => { + if (ABORT) { + clearInterval(runDependencyWatcher); + runDependencyWatcher = null; + return; + } + var shown = false; + for (var dep in runDependencyTracking) { + if (!shown) { + shown = true; + err('still waiting on run dependencies:'); + } + err(`dependency: ${dep}`); + } + if (shown) { + err('(end of list)'); + } + }, 10000); + } + } else { + err('warning: run dependency added without ID'); + } +} + +function removeRunDependency(id) { + runDependencies--; + + Module['monitorRunDependencies']?.(runDependencies); + + if (id) { + assert(runDependencyTracking[id]); + delete runDependencyTracking[id]; + } else { + err('warning: run dependency removed without ID'); + } + if (runDependencies == 0) { + if (runDependencyWatcher !== null) { + clearInterval(runDependencyWatcher); + runDependencyWatcher = null; + } + if (dependenciesFulfilled) { + var callback = dependenciesFulfilled; + dependenciesFulfilled = null; + callback(); // can add another dependenciesFulfilled + } + } +} + +/** @param {string|number=} what */ +function abort(what) { + Module['onAbort']?.(what); + + what = 'Aborted(' + what + ')'; + // TODO(sbc): Should we remove printing and leave it up to whoever + // catches the exception? + err(what); + + ABORT = true; + + // Use a wasm runtime error, because a JS error might be seen as a foreign + // exception, which means we'd run destructors on it. We need the error to + // simply make the program stop. + // FIXME This approach does not work in Wasm EH because it currently does not assume + // all RuntimeErrors are from traps; it decides whether a RuntimeError is from + // a trap or not based on a hidden field within the object. So at the moment + // we don't have a way of throwing a wasm trap from JS. TODO Make a JS API that + // allows this in the wasm spec. + + // Suppress closure compiler warning here. Closure compiler's builtin extern + // definition for WebAssembly.RuntimeError claims it takes no arguments even + // though it can. + // TODO(https://github.com/google/closure-compiler/pull/3913): Remove if/when upstream closure gets fixed. + /** @suppress {checkTypes} */ + var e = new WebAssembly.RuntimeError(what); + + // Throw the error whether or not MODULARIZE is set because abort is used + // in code paths apart from instantiation where an exception is expected + // to be thrown when abort is called. + throw e; +} + +function createExportWrapper(name, nargs) { + return (...args) => { + assert(runtimeInitialized, `native function \`${name}\` called before runtime initialization`); + var f = wasmExports[name]; + assert(f, `exported native function \`${name}\` not found`); + // Only assert for too many arguments. Too few can be valid since the missing arguments will be zero filled. + assert(args.length <= nargs, `native function \`${name}\` called with ${args.length} args but expects ${nargs}`); + return f(...args); + }; +} + +var wasmBinaryFile; + +function findWasmBinary() { + return locateFile('autoclose-archive.wasm'); +} + +function getBinarySync(file) { + if (file == wasmBinaryFile && wasmBinary) { + return new Uint8Array(wasmBinary); + } + if (readBinary) { + return readBinary(file); + } + throw 'both async and sync fetching of the wasm failed'; +} + +async function getWasmBinary(binaryFile) { + // If we don't have the binary yet, load it asynchronously using readAsync. + if (!wasmBinary) { + // Fetch the binary using readAsync + try { + var response = await readAsync(binaryFile); + return new Uint8Array(response); + } catch { + // Fall back to getBinarySync below; + } + } + + // Otherwise, getBinarySync should be able to get it synchronously + return getBinarySync(binaryFile); +} + +async function instantiateArrayBuffer(binaryFile, imports) { + try { + var binary = await getWasmBinary(binaryFile); + var instance = await WebAssembly.instantiate(binary, imports); + return instance; + } catch (reason) { + err(`failed to asynchronously prepare wasm: ${reason}`); + + // Warn on some common problems. + if (isFileURI(wasmBinaryFile)) { + err(`warning: Loading from a file URI (${wasmBinaryFile}) is not supported in most browsers. See https://emscripten.org/docs/getting_started/FAQ.html#how-do-i-run-a-local-webserver-for-testing-why-does-my-program-stall-in-downloading-or-preparing`); + } + abort(reason); + } +} + +async function instantiateAsync(binary, binaryFile, imports) { + if (!binary && typeof WebAssembly.instantiateStreaming == 'function' + // Don't use streaming for file:// delivered objects in a webview, fetch them synchronously. + && !isFileURI(binaryFile) + // Avoid instantiateStreaming() on Node.js environment for now, as while + // Node.js v18.1.0 implements it, it does not have a full fetch() + // implementation yet. + // + // Reference: + // https://github.com/emscripten-core/emscripten/pull/16917 + && !ENVIRONMENT_IS_NODE + ) { + try { + var response = fetch(binaryFile, { credentials: 'same-origin' }); + var instantiationResult = await WebAssembly.instantiateStreaming(response, imports); + return instantiationResult; + } catch (reason) { + // We expect the most common failure cause to be a bad MIME type for the binary, + // in which case falling back to ArrayBuffer instantiation should work. + err(`wasm streaming compile failed: ${reason}`); + err('falling back to ArrayBuffer instantiation'); + // fall back of instantiateArrayBuffer below + }; + } + return instantiateArrayBuffer(binaryFile, imports); +} + +function getWasmImports() { + // prepare imports + return { + 'env': wasmImports, + 'wasi_snapshot_preview1': wasmImports, + } +} + +// Create the wasm instance. +// Receives the wasm imports, returns the exports. +async function createWasm() { + // Load the wasm module and create an instance of using native support in the JS engine. + // handle a generated wasm instance, receiving its exports and + // performing other necessary setup + /** @param {WebAssembly.Module=} module*/ + function receiveInstance(instance, module) { + wasmExports = instance.exports; + + + + wasmMemory = wasmExports['memory']; + + assert(wasmMemory, 'memory not found in wasm exports'); + updateMemoryViews(); + + removeRunDependency('wasm-instantiate'); + return wasmExports; + } + // wait for the pthread pool (if any) + addRunDependency('wasm-instantiate'); + + // Prefer streaming instantiation if available. + // Async compilation can be confusing when an error on the page overwrites Module + // (for example, if the order of elements is wrong, and the one defining Module is + // later), so we save Module and check it later. + var trueModule = Module; + function receiveInstantiationResult(result) { + // 'result' is a ResultObject object which has both the module and instance. + // receiveInstance() will swap in the exports (to Module.asm) so they can be called + assert(Module === trueModule, 'the Module object should not be replaced during async compilation - perhaps the order of HTML elements is wrong?'); + trueModule = null; + // TODO: Due to Closure regression https://github.com/google/closure-compiler/issues/3193, the above line no longer optimizes out down to the following line. + // When the regression is fixed, can restore the above PTHREADS-enabled path. + return receiveInstance(result['instance']); + } + + var info = getWasmImports(); + + // User shell pages can write their own Module.instantiateWasm = function(imports, successCallback) callback + // to manually instantiate the Wasm module themselves. This allows pages to + // run the instantiation parallel to any other async startup actions they are + // performing. + // Also pthreads and wasm workers initialize the wasm instance through this + // path. + if (Module['instantiateWasm']) { + return new Promise((resolve, reject) => { + try { + Module['instantiateWasm'](info, (mod, inst) => { + receiveInstance(mod, inst); + resolve(mod.exports); + }); + } catch(e) { + err(`Module.instantiateWasm callback failed with error: ${e}`); + reject(e); + } + }); + } + + wasmBinaryFile ??= findWasmBinary(); + var result = await instantiateAsync(wasmBinary, wasmBinaryFile, info); + var exports = receiveInstantiationResult(result); + return exports; +} + +// end include: preamble.js + +// Begin JS library code + + + class ExitStatus { + name = 'ExitStatus'; + constructor(status) { + this.message = `Program terminated with exit(${status})`; + this.status = status; + } + } + + var callRuntimeCallbacks = (callbacks) => { + while (callbacks.length > 0) { + // Pass the module as the first argument. + callbacks.shift()(Module); + } + }; + var onPostRuns = []; + var addOnPostRun = (cb) => onPostRuns.unshift(cb); + + var onPreRuns = []; + var addOnPreRun = (cb) => onPreRuns.unshift(cb); + + + + /** + * @param {number} ptr + * @param {string} type + */ + function getValue(ptr, type = 'i8') { + if (type.endsWith('*')) type = '*'; + switch (type) { + case 'i1': return HEAP8[ptr]; + case 'i8': return HEAP8[ptr]; + case 'i16': return HEAP16[((ptr)>>1)]; + case 'i32': return HEAP32[((ptr)>>2)]; + case 'i64': return HEAP64[((ptr)>>3)]; + case 'float': return HEAPF32[((ptr)>>2)]; + case 'double': return HEAPF64[((ptr)>>3)]; + case '*': return HEAPU32[((ptr)>>2)]; + default: abort(`invalid type for getValue: ${type}`); + } + } + + var noExitRuntime = Module['noExitRuntime'] || true; + + var ptrToString = (ptr) => { + assert(typeof ptr === 'number'); + // With CAN_ADDRESS_2GB or MEMORY64, pointers are already unsigned. + ptr >>>= 0; + return '0x' + ptr.toString(16).padStart(8, '0'); + }; + + + /** + * @param {number} ptr + * @param {number} value + * @param {string} type + */ + function setValue(ptr, value, type = 'i8') { + if (type.endsWith('*')) type = '*'; + switch (type) { + case 'i1': HEAP8[ptr] = value; break; + case 'i8': HEAP8[ptr] = value; break; + case 'i16': HEAP16[((ptr)>>1)] = value; break; + case 'i32': HEAP32[((ptr)>>2)] = value; break; + case 'i64': HEAP64[((ptr)>>3)] = BigInt(value); break; + case 'float': HEAPF32[((ptr)>>2)] = value; break; + case 'double': HEAPF64[((ptr)>>3)] = value; break; + case '*': HEAPU32[((ptr)>>2)] = value; break; + default: abort(`invalid type for setValue: ${type}`); + } + } + + var stackRestore = (val) => __emscripten_stack_restore(val); + + var stackSave = () => _emscripten_stack_get_current(); + + var warnOnce = (text) => { + warnOnce.shown ||= {}; + if (!warnOnce.shown[text]) { + warnOnce.shown[text] = 1; + if (ENVIRONMENT_IS_NODE) text = 'warning: ' + text; + err(text); + } + }; + + var PATH = { + isAbs:(path) => path.charAt(0) === '/', + splitPath:(filename) => { + var splitPathRe = /^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/; + return splitPathRe.exec(filename).slice(1); + }, + normalizeArray:(parts, allowAboveRoot) => { + // if the path tries to go above the root, `up` ends up > 0 + var up = 0; + for (var i = parts.length - 1; i >= 0; i--) { + var last = parts[i]; + if (last === '.') { + parts.splice(i, 1); + } else if (last === '..') { + parts.splice(i, 1); + up++; + } else if (up) { + parts.splice(i, 1); + up--; + } + } + // if the path is allowed to go above the root, restore leading ..s + if (allowAboveRoot) { + for (; up; up--) { + parts.unshift('..'); + } + } + return parts; + }, + normalize:(path) => { + var isAbsolute = PATH.isAbs(path), + trailingSlash = path.slice(-1) === '/'; + // Normalize the path + path = PATH.normalizeArray(path.split('/').filter((p) => !!p), !isAbsolute).join('/'); + if (!path && !isAbsolute) { + path = '.'; + } + if (path && trailingSlash) { + path += '/'; + } + return (isAbsolute ? '/' : '') + path; + }, + dirname:(path) => { + var result = PATH.splitPath(path), + root = result[0], + dir = result[1]; + if (!root && !dir) { + // No dirname whatsoever + return '.'; + } + if (dir) { + // It has a dirname, strip trailing slash + dir = dir.slice(0, -1); + } + return root + dir; + }, + basename:(path) => path && path.match(/([^\/]+|\/)\/*$/)[1], + join:(...paths) => PATH.normalize(paths.join('/')), + join2:(l, r) => PATH.normalize(l + '/' + r), + }; + + var initRandomFill = () => { + // This block is not needed on v19+ since crypto.getRandomValues is builtin + if (ENVIRONMENT_IS_NODE) { + var nodeCrypto = require('crypto'); + return (view) => nodeCrypto.randomFillSync(view); + } + + return (view) => crypto.getRandomValues(view); + }; + var randomFill = (view) => { + // Lazily init on the first invocation. + (randomFill = initRandomFill())(view); + }; + + + + var PATH_FS = { + resolve:(...args) => { + var resolvedPath = '', + resolvedAbsolute = false; + for (var i = args.length - 1; i >= -1 && !resolvedAbsolute; i--) { + var path = (i >= 0) ? args[i] : FS.cwd(); + // Skip empty and invalid entries + if (typeof path != 'string') { + throw new TypeError('Arguments to path.resolve must be strings'); + } else if (!path) { + return ''; // an invalid portion invalidates the whole thing + } + resolvedPath = path + '/' + resolvedPath; + resolvedAbsolute = PATH.isAbs(path); + } + // At this point the path should be resolved to a full absolute path, but + // handle relative paths to be safe (might happen when process.cwd() fails) + resolvedPath = PATH.normalizeArray(resolvedPath.split('/').filter((p) => !!p), !resolvedAbsolute).join('/'); + return ((resolvedAbsolute ? '/' : '') + resolvedPath) || '.'; + }, + relative:(from, to) => { + from = PATH_FS.resolve(from).slice(1); + to = PATH_FS.resolve(to).slice(1); + function trim(arr) { + var start = 0; + for (; start < arr.length; start++) { + if (arr[start] !== '') break; + } + var end = arr.length - 1; + for (; end >= 0; end--) { + if (arr[end] !== '') break; + } + if (start > end) return []; + return arr.slice(start, end - start + 1); + } + var fromParts = trim(from.split('/')); + var toParts = trim(to.split('/')); + var length = Math.min(fromParts.length, toParts.length); + var samePartsLength = length; + for (var i = 0; i < length; i++) { + if (fromParts[i] !== toParts[i]) { + samePartsLength = i; + break; + } + } + var outputParts = []; + for (var i = samePartsLength; i < fromParts.length; i++) { + outputParts.push('..'); + } + outputParts = outputParts.concat(toParts.slice(samePartsLength)); + return outputParts.join('/'); + }, + }; + + + var UTF8Decoder = typeof TextDecoder != 'undefined' ? new TextDecoder() : undefined; + + /** + * Given a pointer 'idx' to a null-terminated UTF8-encoded string in the given + * array that contains uint8 values, returns a copy of that string as a + * Javascript String object. + * heapOrArray is either a regular array, or a JavaScript typed array view. + * @param {number=} idx + * @param {number=} maxBytesToRead + * @return {string} + */ + var UTF8ArrayToString = (heapOrArray, idx = 0, maxBytesToRead = NaN) => { + var endIdx = idx + maxBytesToRead; + var endPtr = idx; + // TextDecoder needs to know the byte length in advance, it doesn't stop on + // null terminator by itself. Also, use the length info to avoid running tiny + // strings through TextDecoder, since .subarray() allocates garbage. + // (As a tiny code save trick, compare endPtr against endIdx using a negation, + // so that undefined/NaN means Infinity) + while (heapOrArray[endPtr] && !(endPtr >= endIdx)) ++endPtr; + + if (endPtr - idx > 16 && heapOrArray.buffer && UTF8Decoder) { + return UTF8Decoder.decode(heapOrArray.subarray(idx, endPtr)); + } + var str = ''; + // If building with TextDecoder, we have already computed the string length + // above, so test loop end condition against that + while (idx < endPtr) { + // For UTF8 byte structure, see: + // http://en.wikipedia.org/wiki/UTF-8#Description + // https://www.ietf.org/rfc/rfc2279.txt + // https://tools.ietf.org/html/rfc3629 + var u0 = heapOrArray[idx++]; + if (!(u0 & 0x80)) { str += String.fromCharCode(u0); continue; } + var u1 = heapOrArray[idx++] & 63; + if ((u0 & 0xE0) == 0xC0) { str += String.fromCharCode(((u0 & 31) << 6) | u1); continue; } + var u2 = heapOrArray[idx++] & 63; + if ((u0 & 0xF0) == 0xE0) { + u0 = ((u0 & 15) << 12) | (u1 << 6) | u2; + } else { + if ((u0 & 0xF8) != 0xF0) warnOnce('Invalid UTF-8 leading byte ' + ptrToString(u0) + ' encountered when deserializing a UTF-8 string in wasm memory to a JS string!'); + u0 = ((u0 & 7) << 18) | (u1 << 12) | (u2 << 6) | (heapOrArray[idx++] & 63); + } + + if (u0 < 0x10000) { + str += String.fromCharCode(u0); + } else { + var ch = u0 - 0x10000; + str += String.fromCharCode(0xD800 | (ch >> 10), 0xDC00 | (ch & 0x3FF)); + } + } + return str; + }; + + var FS_stdin_getChar_buffer = []; + + var lengthBytesUTF8 = (str) => { + var len = 0; + for (var i = 0; i < str.length; ++i) { + // Gotcha: charCodeAt returns a 16-bit word that is a UTF-16 encoded code + // unit, not a Unicode code point of the character! So decode + // UTF16->UTF32->UTF8. + // See http://unicode.org/faq/utf_bom.html#utf16-3 + var c = str.charCodeAt(i); // possibly a lead surrogate + if (c <= 0x7F) { + len++; + } else if (c <= 0x7FF) { + len += 2; + } else if (c >= 0xD800 && c <= 0xDFFF) { + len += 4; ++i; + } else { + len += 3; + } + } + return len; + }; + + var stringToUTF8Array = (str, heap, outIdx, maxBytesToWrite) => { + assert(typeof str === 'string', `stringToUTF8Array expects a string (got ${typeof str})`); + // Parameter maxBytesToWrite is not optional. Negative values, 0, null, + // undefined and false each don't write out any bytes. + if (!(maxBytesToWrite > 0)) + return 0; + + var startIdx = outIdx; + var endIdx = outIdx + maxBytesToWrite - 1; // -1 for string null terminator. + for (var i = 0; i < str.length; ++i) { + // Gotcha: charCodeAt returns a 16-bit word that is a UTF-16 encoded code + // unit, not a Unicode code point of the character! So decode + // UTF16->UTF32->UTF8. + // See http://unicode.org/faq/utf_bom.html#utf16-3 + // For UTF8 byte structure, see http://en.wikipedia.org/wiki/UTF-8#Description + // and https://www.ietf.org/rfc/rfc2279.txt + // and https://tools.ietf.org/html/rfc3629 + var u = str.charCodeAt(i); // possibly a lead surrogate + if (u >= 0xD800 && u <= 0xDFFF) { + var u1 = str.charCodeAt(++i); + u = 0x10000 + ((u & 0x3FF) << 10) | (u1 & 0x3FF); + } + if (u <= 0x7F) { + if (outIdx >= endIdx) break; + heap[outIdx++] = u; + } else if (u <= 0x7FF) { + if (outIdx + 1 >= endIdx) break; + heap[outIdx++] = 0xC0 | (u >> 6); + heap[outIdx++] = 0x80 | (u & 63); + } else if (u <= 0xFFFF) { + if (outIdx + 2 >= endIdx) break; + heap[outIdx++] = 0xE0 | (u >> 12); + heap[outIdx++] = 0x80 | ((u >> 6) & 63); + heap[outIdx++] = 0x80 | (u & 63); + } else { + if (outIdx + 3 >= endIdx) break; + if (u > 0x10FFFF) warnOnce('Invalid Unicode code point ' + ptrToString(u) + ' encountered when serializing a JS string to a UTF-8 string in wasm memory! (Valid unicode code points should be in range 0-0x10FFFF).'); + heap[outIdx++] = 0xF0 | (u >> 18); + heap[outIdx++] = 0x80 | ((u >> 12) & 63); + heap[outIdx++] = 0x80 | ((u >> 6) & 63); + heap[outIdx++] = 0x80 | (u & 63); + } + } + // Null-terminate the pointer to the buffer. + heap[outIdx] = 0; + return outIdx - startIdx; + }; + /** @type {function(string, boolean=, number=)} */ + var intArrayFromString = (stringy, dontAddNull, length) => { + var len = length > 0 ? length : lengthBytesUTF8(stringy)+1; + var u8array = new Array(len); + var numBytesWritten = stringToUTF8Array(stringy, u8array, 0, u8array.length); + if (dontAddNull) u8array.length = numBytesWritten; + return u8array; + }; + var FS_stdin_getChar = () => { + if (!FS_stdin_getChar_buffer.length) { + var result = null; + if (ENVIRONMENT_IS_NODE) { + // we will read data by chunks of BUFSIZE + var BUFSIZE = 256; + var buf = Buffer.alloc(BUFSIZE); + var bytesRead = 0; + + // For some reason we must suppress a closure warning here, even though + // fd definitely exists on process.stdin, and is even the proper way to + // get the fd of stdin, + // https://github.com/nodejs/help/issues/2136#issuecomment-523649904 + // This started to happen after moving this logic out of library_tty.js, + // so it is related to the surrounding code in some unclear manner. + /** @suppress {missingProperties} */ + var fd = process.stdin.fd; + + try { + bytesRead = fs.readSync(fd, buf, 0, BUFSIZE); + } catch(e) { + // Cross-platform differences: on Windows, reading EOF throws an + // exception, but on other OSes, reading EOF returns 0. Uniformize + // behavior by treating the EOF exception to return 0. + if (e.toString().includes('EOF')) bytesRead = 0; + else throw e; + } + + if (bytesRead > 0) { + result = buf.slice(0, bytesRead).toString('utf-8'); + } + } else + if (typeof window != 'undefined' && + typeof window.prompt == 'function') { + // Browser. + result = window.prompt('Input: '); // returns null on cancel + if (result !== null) { + result += '\n'; + } + } else + {} + if (!result) { + return null; + } + FS_stdin_getChar_buffer = intArrayFromString(result, true); + } + return FS_stdin_getChar_buffer.shift(); + }; + var TTY = { + ttys:[], + init() { + // https://github.com/emscripten-core/emscripten/pull/1555 + // if (ENVIRONMENT_IS_NODE) { + // // currently, FS.init does not distinguish if process.stdin is a file or TTY + // // device, it always assumes it's a TTY device. because of this, we're forcing + // // process.stdin to UTF8 encoding to at least make stdin reading compatible + // // with text files until FS.init can be refactored. + // process.stdin.setEncoding('utf8'); + // } + }, + shutdown() { + // https://github.com/emscripten-core/emscripten/pull/1555 + // if (ENVIRONMENT_IS_NODE) { + // // inolen: any idea as to why node -e 'process.stdin.read()' wouldn't exit immediately (with process.stdin being a tty)? + // // isaacs: because now it's reading from the stream, you've expressed interest in it, so that read() kicks off a _read() which creates a ReadReq operation + // // inolen: I thought read() in that case was a synchronous operation that just grabbed some amount of buffered data if it exists? + // // isaacs: it is. but it also triggers a _read() call, which calls readStart() on the handle + // // isaacs: do process.stdin.pause() and i'd think it'd probably close the pending call + // process.stdin.pause(); + // } + }, + register(dev, ops) { + TTY.ttys[dev] = { input: [], output: [], ops: ops }; + FS.registerDevice(dev, TTY.stream_ops); + }, + stream_ops:{ + open(stream) { + var tty = TTY.ttys[stream.node.rdev]; + if (!tty) { + throw new FS.ErrnoError(43); + } + stream.tty = tty; + stream.seekable = false; + }, + close(stream) { + // flush any pending line data + stream.tty.ops.fsync(stream.tty); + }, + fsync(stream) { + stream.tty.ops.fsync(stream.tty); + }, + read(stream, buffer, offset, length, pos /* ignored */) { + if (!stream.tty || !stream.tty.ops.get_char) { + throw new FS.ErrnoError(60); + } + var bytesRead = 0; + for (var i = 0; i < length; i++) { + var result; + try { + result = stream.tty.ops.get_char(stream.tty); + } catch (e) { + throw new FS.ErrnoError(29); + } + if (result === undefined && bytesRead === 0) { + throw new FS.ErrnoError(6); + } + if (result === null || result === undefined) break; + bytesRead++; + buffer[offset+i] = result; + } + if (bytesRead) { + stream.node.atime = Date.now(); + } + return bytesRead; + }, + write(stream, buffer, offset, length, pos) { + if (!stream.tty || !stream.tty.ops.put_char) { + throw new FS.ErrnoError(60); + } + try { + for (var i = 0; i < length; i++) { + stream.tty.ops.put_char(stream.tty, buffer[offset+i]); + } + } catch (e) { + throw new FS.ErrnoError(29); + } + if (length) { + stream.node.mtime = stream.node.ctime = Date.now(); + } + return i; + }, + }, + default_tty_ops:{ + get_char(tty) { + return FS_stdin_getChar(); + }, + put_char(tty, val) { + if (val === null || val === 10) { + out(UTF8ArrayToString(tty.output)); + tty.output = []; + } else { + if (val != 0) tty.output.push(val); // val == 0 would cut text output off in the middle. + } + }, + fsync(tty) { + if (tty.output?.length > 0) { + out(UTF8ArrayToString(tty.output)); + tty.output = []; + } + }, + ioctl_tcgets(tty) { + // typical setting + return { + c_iflag: 25856, + c_oflag: 5, + c_cflag: 191, + c_lflag: 35387, + c_cc: [ + 0x03, 0x1c, 0x7f, 0x15, 0x04, 0x00, 0x01, 0x00, 0x11, 0x13, 0x1a, 0x00, + 0x12, 0x0f, 0x17, 0x16, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + ] + }; + }, + ioctl_tcsets(tty, optional_actions, data) { + // currently just ignore + return 0; + }, + ioctl_tiocgwinsz(tty) { + return [24, 80]; + }, + }, + default_tty1_ops:{ + put_char(tty, val) { + if (val === null || val === 10) { + err(UTF8ArrayToString(tty.output)); + tty.output = []; + } else { + if (val != 0) tty.output.push(val); + } + }, + fsync(tty) { + if (tty.output?.length > 0) { + err(UTF8ArrayToString(tty.output)); + tty.output = []; + } + }, + }, + }; + + + var mmapAlloc = (size) => { + abort('internal error: mmapAlloc called but `emscripten_builtin_memalign` native symbol not exported'); + }; + var MEMFS = { + ops_table:null, + mount(mount) { + return MEMFS.createNode(null, '/', 16895, 0); + }, + createNode(parent, name, mode, dev) { + if (FS.isBlkdev(mode) || FS.isFIFO(mode)) { + // no supported + throw new FS.ErrnoError(63); + } + MEMFS.ops_table ||= { + dir: { + node: { + getattr: MEMFS.node_ops.getattr, + setattr: MEMFS.node_ops.setattr, + lookup: MEMFS.node_ops.lookup, + mknod: MEMFS.node_ops.mknod, + rename: MEMFS.node_ops.rename, + unlink: MEMFS.node_ops.unlink, + rmdir: MEMFS.node_ops.rmdir, + readdir: MEMFS.node_ops.readdir, + symlink: MEMFS.node_ops.symlink + }, + stream: { + llseek: MEMFS.stream_ops.llseek + } + }, + file: { + node: { + getattr: MEMFS.node_ops.getattr, + setattr: MEMFS.node_ops.setattr + }, + stream: { + llseek: MEMFS.stream_ops.llseek, + read: MEMFS.stream_ops.read, + write: MEMFS.stream_ops.write, + mmap: MEMFS.stream_ops.mmap, + msync: MEMFS.stream_ops.msync + } + }, + link: { + node: { + getattr: MEMFS.node_ops.getattr, + setattr: MEMFS.node_ops.setattr, + readlink: MEMFS.node_ops.readlink + }, + stream: {} + }, + chrdev: { + node: { + getattr: MEMFS.node_ops.getattr, + setattr: MEMFS.node_ops.setattr + }, + stream: FS.chrdev_stream_ops + } + }; + var node = FS.createNode(parent, name, mode, dev); + if (FS.isDir(node.mode)) { + node.node_ops = MEMFS.ops_table.dir.node; + node.stream_ops = MEMFS.ops_table.dir.stream; + node.contents = {}; + } else if (FS.isFile(node.mode)) { + node.node_ops = MEMFS.ops_table.file.node; + node.stream_ops = MEMFS.ops_table.file.stream; + node.usedBytes = 0; // The actual number of bytes used in the typed array, as opposed to contents.length which gives the whole capacity. + // When the byte data of the file is populated, this will point to either a typed array, or a normal JS array. Typed arrays are preferred + // for performance, and used by default. However, typed arrays are not resizable like normal JS arrays are, so there is a small disk size + // penalty involved for appending file writes that continuously grow a file similar to std::vector capacity vs used -scheme. + node.contents = null; + } else if (FS.isLink(node.mode)) { + node.node_ops = MEMFS.ops_table.link.node; + node.stream_ops = MEMFS.ops_table.link.stream; + } else if (FS.isChrdev(node.mode)) { + node.node_ops = MEMFS.ops_table.chrdev.node; + node.stream_ops = MEMFS.ops_table.chrdev.stream; + } + node.atime = node.mtime = node.ctime = Date.now(); + // add the new node to the parent + if (parent) { + parent.contents[name] = node; + parent.atime = parent.mtime = parent.ctime = node.atime; + } + return node; + }, + getFileDataAsTypedArray(node) { + if (!node.contents) return new Uint8Array(0); + if (node.contents.subarray) return node.contents.subarray(0, node.usedBytes); // Make sure to not return excess unused bytes. + return new Uint8Array(node.contents); + }, + expandFileStorage(node, newCapacity) { + var prevCapacity = node.contents ? node.contents.length : 0; + if (prevCapacity >= newCapacity) return; // No need to expand, the storage was already large enough. + // Don't expand strictly to the given requested limit if it's only a very small increase, but instead geometrically grow capacity. + // For small filesizes (<1MB), perform size*2 geometric increase, but for large sizes, do a much more conservative size*1.125 increase to + // avoid overshooting the allocation cap by a very large margin. + var CAPACITY_DOUBLING_MAX = 1024 * 1024; + newCapacity = Math.max(newCapacity, (prevCapacity * (prevCapacity < CAPACITY_DOUBLING_MAX ? 2.0 : 1.125)) >>> 0); + if (prevCapacity != 0) newCapacity = Math.max(newCapacity, 256); // At minimum allocate 256b for each file when expanding. + var oldContents = node.contents; + node.contents = new Uint8Array(newCapacity); // Allocate new storage. + if (node.usedBytes > 0) node.contents.set(oldContents.subarray(0, node.usedBytes), 0); // Copy old data over to the new storage. + }, + resizeFileStorage(node, newSize) { + if (node.usedBytes == newSize) return; + if (newSize == 0) { + node.contents = null; // Fully decommit when requesting a resize to zero. + node.usedBytes = 0; + } else { + var oldContents = node.contents; + node.contents = new Uint8Array(newSize); // Allocate new storage. + if (oldContents) { + node.contents.set(oldContents.subarray(0, Math.min(newSize, node.usedBytes))); // Copy old data over to the new storage. + } + node.usedBytes = newSize; + } + }, + node_ops:{ + getattr(node) { + var attr = {}; + // device numbers reuse inode numbers. + attr.dev = FS.isChrdev(node.mode) ? node.id : 1; + attr.ino = node.id; + attr.mode = node.mode; + attr.nlink = 1; + attr.uid = 0; + attr.gid = 0; + attr.rdev = node.rdev; + if (FS.isDir(node.mode)) { + attr.size = 4096; + } else if (FS.isFile(node.mode)) { + attr.size = node.usedBytes; + } else if (FS.isLink(node.mode)) { + attr.size = node.link.length; + } else { + attr.size = 0; + } + attr.atime = new Date(node.atime); + attr.mtime = new Date(node.mtime); + attr.ctime = new Date(node.ctime); + // NOTE: In our implementation, st_blocks = Math.ceil(st_size/st_blksize), + // but this is not required by the standard. + attr.blksize = 4096; + attr.blocks = Math.ceil(attr.size / attr.blksize); + return attr; + }, + setattr(node, attr) { + for (const key of ["mode", "atime", "mtime", "ctime"]) { + if (attr[key] != null) { + node[key] = attr[key]; + } + } + if (attr.size !== undefined) { + MEMFS.resizeFileStorage(node, attr.size); + } + }, + lookup(parent, name) { + throw new FS.ErrnoError(44); + }, + mknod(parent, name, mode, dev) { + return MEMFS.createNode(parent, name, mode, dev); + }, + rename(old_node, new_dir, new_name) { + var new_node; + try { + new_node = FS.lookupNode(new_dir, new_name); + } catch (e) {} + if (new_node) { + if (FS.isDir(old_node.mode)) { + // if we're overwriting a directory at new_name, make sure it's empty. + for (var i in new_node.contents) { + throw new FS.ErrnoError(55); + } + } + FS.hashRemoveNode(new_node); + } + // do the internal rewiring + delete old_node.parent.contents[old_node.name]; + new_dir.contents[new_name] = old_node; + old_node.name = new_name; + new_dir.ctime = new_dir.mtime = old_node.parent.ctime = old_node.parent.mtime = Date.now(); + }, + unlink(parent, name) { + delete parent.contents[name]; + parent.ctime = parent.mtime = Date.now(); + }, + rmdir(parent, name) { + var node = FS.lookupNode(parent, name); + for (var i in node.contents) { + throw new FS.ErrnoError(55); + } + delete parent.contents[name]; + parent.ctime = parent.mtime = Date.now(); + }, + readdir(node) { + return ['.', '..', ...Object.keys(node.contents)]; + }, + symlink(parent, newname, oldpath) { + var node = MEMFS.createNode(parent, newname, 0o777 | 40960, 0); + node.link = oldpath; + return node; + }, + readlink(node) { + if (!FS.isLink(node.mode)) { + throw new FS.ErrnoError(28); + } + return node.link; + }, + }, + stream_ops:{ + read(stream, buffer, offset, length, position) { + var contents = stream.node.contents; + if (position >= stream.node.usedBytes) return 0; + var size = Math.min(stream.node.usedBytes - position, length); + assert(size >= 0); + if (size > 8 && contents.subarray) { // non-trivial, and typed array + buffer.set(contents.subarray(position, position + size), offset); + } else { + for (var i = 0; i < size; i++) buffer[offset + i] = contents[position + i]; + } + return size; + }, + write(stream, buffer, offset, length, position, canOwn) { + // The data buffer should be a typed array view + assert(!(buffer instanceof ArrayBuffer)); + + if (!length) return 0; + var node = stream.node; + node.mtime = node.ctime = Date.now(); + + if (buffer.subarray && (!node.contents || node.contents.subarray)) { // This write is from a typed array to a typed array? + if (canOwn) { + assert(position === 0, 'canOwn must imply no weird position inside the file'); + node.contents = buffer.subarray(offset, offset + length); + node.usedBytes = length; + return length; + } else if (node.usedBytes === 0 && position === 0) { // If this is a simple first write to an empty file, do a fast set since we don't need to care about old data. + node.contents = buffer.slice(offset, offset + length); + node.usedBytes = length; + return length; + } else if (position + length <= node.usedBytes) { // Writing to an already allocated and used subrange of the file? + node.contents.set(buffer.subarray(offset, offset + length), position); + return length; + } + } + + // Appending to an existing file and we need to reallocate, or source data did not come as a typed array. + MEMFS.expandFileStorage(node, position+length); + if (node.contents.subarray && buffer.subarray) { + // Use typed array write which is available. + node.contents.set(buffer.subarray(offset, offset + length), position); + } else { + for (var i = 0; i < length; i++) { + node.contents[position + i] = buffer[offset + i]; // Or fall back to manual write if not. + } + } + node.usedBytes = Math.max(node.usedBytes, position + length); + return length; + }, + llseek(stream, offset, whence) { + var position = offset; + if (whence === 1) { + position += stream.position; + } else if (whence === 2) { + if (FS.isFile(stream.node.mode)) { + position += stream.node.usedBytes; + } + } + if (position < 0) { + throw new FS.ErrnoError(28); + } + return position; + }, + mmap(stream, length, position, prot, flags) { + if (!FS.isFile(stream.node.mode)) { + throw new FS.ErrnoError(43); + } + var ptr; + var allocated; + var contents = stream.node.contents; + // Only make a new copy when MAP_PRIVATE is specified. + if (!(flags & 2) && contents && contents.buffer === HEAP8.buffer) { + // We can't emulate MAP_SHARED when the file is not backed by the + // buffer we're mapping to (e.g. the HEAP buffer). + allocated = false; + ptr = contents.byteOffset; + } else { + allocated = true; + ptr = mmapAlloc(length); + if (!ptr) { + throw new FS.ErrnoError(48); + } + if (contents) { + // Try to avoid unnecessary slices. + if (position > 0 || position + length < contents.length) { + if (contents.subarray) { + contents = contents.subarray(position, position + length); + } else { + contents = Array.prototype.slice.call(contents, position, position + length); + } + } + HEAP8.set(contents, ptr); + } + } + return { ptr, allocated }; + }, + msync(stream, buffer, offset, length, mmapFlags) { + MEMFS.stream_ops.write(stream, buffer, 0, length, offset, false); + // should we check if bytesWritten and length are the same? + return 0; + }, + }, + }; + + var asyncLoad = async (url) => { + var arrayBuffer = await readAsync(url); + assert(arrayBuffer, `Loading data file "${url}" failed (no arrayBuffer).`); + return new Uint8Array(arrayBuffer); + }; + + + var FS_createDataFile = (parent, name, fileData, canRead, canWrite, canOwn) => { + FS.createDataFile(parent, name, fileData, canRead, canWrite, canOwn); + }; + + var preloadPlugins = Module['preloadPlugins'] || []; + var FS_handledByPreloadPlugin = (byteArray, fullname, finish, onerror) => { + // Ensure plugins are ready. + if (typeof Browser != 'undefined') Browser.init(); + + var handled = false; + preloadPlugins.forEach((plugin) => { + if (handled) return; + if (plugin['canHandle'](fullname)) { + plugin['handle'](byteArray, fullname, finish, onerror); + handled = true; + } + }); + return handled; + }; + var FS_createPreloadedFile = (parent, name, url, canRead, canWrite, onload, onerror, dontCreateFile, canOwn, preFinish) => { + // TODO we should allow people to just pass in a complete filename instead + // of parent and name being that we just join them anyways + var fullname = name ? PATH_FS.resolve(PATH.join2(parent, name)) : parent; + var dep = getUniqueRunDependency(`cp ${fullname}`); // might have several active requests for the same fullname + function processData(byteArray) { + function finish(byteArray) { + preFinish?.(); + if (!dontCreateFile) { + FS_createDataFile(parent, name, byteArray, canRead, canWrite, canOwn); + } + onload?.(); + removeRunDependency(dep); + } + if (FS_handledByPreloadPlugin(byteArray, fullname, finish, () => { + onerror?.(); + removeRunDependency(dep); + })) { + return; + } + finish(byteArray); + } + addRunDependency(dep); + if (typeof url == 'string') { + asyncLoad(url).then(processData, onerror); + } else { + processData(url); + } + }; + + var FS_modeStringToFlags = (str) => { + var flagModes = { + 'r': 0, + 'r+': 2, + 'w': 512 | 64 | 1, + 'w+': 512 | 64 | 2, + 'a': 1024 | 64 | 1, + 'a+': 1024 | 64 | 2, + }; + var flags = flagModes[str]; + if (typeof flags == 'undefined') { + throw new Error(`Unknown file open mode: ${str}`); + } + return flags; + }; + + var FS_getMode = (canRead, canWrite) => { + var mode = 0; + if (canRead) mode |= 292 | 73; + if (canWrite) mode |= 146; + return mode; + }; + + + + + + + /** + * Given a pointer 'ptr' to a null-terminated UTF8-encoded string in the + * emscripten HEAP, returns a copy of that string as a Javascript String object. + * + * @param {number} ptr + * @param {number=} maxBytesToRead - An optional length that specifies the + * maximum number of bytes to read. You can omit this parameter to scan the + * string until the first 0 byte. If maxBytesToRead is passed, and the string + * at [ptr, ptr+maxBytesToReadr[ contains a null byte in the middle, then the + * string will cut short at that byte index (i.e. maxBytesToRead will not + * produce a string of exact length [ptr, ptr+maxBytesToRead[) N.B. mixing + * frequent uses of UTF8ToString() with and without maxBytesToRead may throw + * JS JIT optimizations off, so it is worth to consider consistently using one + * @return {string} + */ + var UTF8ToString = (ptr, maxBytesToRead) => { + assert(typeof ptr == 'number', `UTF8ToString expects a number (got ${typeof ptr})`); + return ptr ? UTF8ArrayToString(HEAPU8, ptr, maxBytesToRead) : ''; + }; + + var strError = (errno) => UTF8ToString(_strerror(errno)); + + var ERRNO_CODES = { + 'EPERM': 63, + 'ENOENT': 44, + 'ESRCH': 71, + 'EINTR': 27, + 'EIO': 29, + 'ENXIO': 60, + 'E2BIG': 1, + 'ENOEXEC': 45, + 'EBADF': 8, + 'ECHILD': 12, + 'EAGAIN': 6, + 'EWOULDBLOCK': 6, + 'ENOMEM': 48, + 'EACCES': 2, + 'EFAULT': 21, + 'ENOTBLK': 105, + 'EBUSY': 10, + 'EEXIST': 20, + 'EXDEV': 75, + 'ENODEV': 43, + 'ENOTDIR': 54, + 'EISDIR': 31, + 'EINVAL': 28, + 'ENFILE': 41, + 'EMFILE': 33, + 'ENOTTY': 59, + 'ETXTBSY': 74, + 'EFBIG': 22, + 'ENOSPC': 51, + 'ESPIPE': 70, + 'EROFS': 69, + 'EMLINK': 34, + 'EPIPE': 64, + 'EDOM': 18, + 'ERANGE': 68, + 'ENOMSG': 49, + 'EIDRM': 24, + 'ECHRNG': 106, + 'EL2NSYNC': 156, + 'EL3HLT': 107, + 'EL3RST': 108, + 'ELNRNG': 109, + 'EUNATCH': 110, + 'ENOCSI': 111, + 'EL2HLT': 112, + 'EDEADLK': 16, + 'ENOLCK': 46, + 'EBADE': 113, + 'EBADR': 114, + 'EXFULL': 115, + 'ENOANO': 104, + 'EBADRQC': 103, + 'EBADSLT': 102, + 'EDEADLOCK': 16, + 'EBFONT': 101, + 'ENOSTR': 100, + 'ENODATA': 116, + 'ETIME': 117, + 'ENOSR': 118, + 'ENONET': 119, + 'ENOPKG': 120, + 'EREMOTE': 121, + 'ENOLINK': 47, + 'EADV': 122, + 'ESRMNT': 123, + 'ECOMM': 124, + 'EPROTO': 65, + 'EMULTIHOP': 36, + 'EDOTDOT': 125, + 'EBADMSG': 9, + 'ENOTUNIQ': 126, + 'EBADFD': 127, + 'EREMCHG': 128, + 'ELIBACC': 129, + 'ELIBBAD': 130, + 'ELIBSCN': 131, + 'ELIBMAX': 132, + 'ELIBEXEC': 133, + 'ENOSYS': 52, + 'ENOTEMPTY': 55, + 'ENAMETOOLONG': 37, + 'ELOOP': 32, + 'EOPNOTSUPP': 138, + 'EPFNOSUPPORT': 139, + 'ECONNRESET': 15, + 'ENOBUFS': 42, + 'EAFNOSUPPORT': 5, + 'EPROTOTYPE': 67, + 'ENOTSOCK': 57, + 'ENOPROTOOPT': 50, + 'ESHUTDOWN': 140, + 'ECONNREFUSED': 14, + 'EADDRINUSE': 3, + 'ECONNABORTED': 13, + 'ENETUNREACH': 40, + 'ENETDOWN': 38, + 'ETIMEDOUT': 73, + 'EHOSTDOWN': 142, + 'EHOSTUNREACH': 23, + 'EINPROGRESS': 26, + 'EALREADY': 7, + 'EDESTADDRREQ': 17, + 'EMSGSIZE': 35, + 'EPROTONOSUPPORT': 66, + 'ESOCKTNOSUPPORT': 137, + 'EADDRNOTAVAIL': 4, + 'ENETRESET': 39, + 'EISCONN': 30, + 'ENOTCONN': 53, + 'ETOOMANYREFS': 141, + 'EUSERS': 136, + 'EDQUOT': 19, + 'ESTALE': 72, + 'ENOTSUP': 138, + 'ENOMEDIUM': 148, + 'EILSEQ': 25, + 'EOVERFLOW': 61, + 'ECANCELED': 11, + 'ENOTRECOVERABLE': 56, + 'EOWNERDEAD': 62, + 'ESTRPIPE': 135, + }; + var FS = { + root:null, + mounts:[], + devices:{ + }, + streams:[], + nextInode:1, + nameTable:null, + currentPath:"/", + initialized:false, + ignorePermissions:true, + filesystems:null, + syncFSRequests:0, + readFiles:{ + }, + ErrnoError:class extends Error { + name = 'ErrnoError'; + // We set the `name` property to be able to identify `FS.ErrnoError` + // - the `name` is a standard ECMA-262 property of error objects. Kind of good to have it anyway. + // - when using PROXYFS, an error can come from an underlying FS + // as different FS objects have their own FS.ErrnoError each, + // the test `err instanceof FS.ErrnoError` won't detect an error coming from another filesystem, causing bugs. + // we'll use the reliable test `err.name == "ErrnoError"` instead + constructor(errno) { + super(runtimeInitialized ? strError(errno) : ''); + this.errno = errno; + for (var key in ERRNO_CODES) { + if (ERRNO_CODES[key] === errno) { + this.code = key; + break; + } + } + } + }, + FSStream:class { + shared = {}; + get object() { + return this.node; + } + set object(val) { + this.node = val; + } + get isRead() { + return (this.flags & 2097155) !== 1; + } + get isWrite() { + return (this.flags & 2097155) !== 0; + } + get isAppend() { + return (this.flags & 1024); + } + get flags() { + return this.shared.flags; + } + set flags(val) { + this.shared.flags = val; + } + get position() { + return this.shared.position; + } + set position(val) { + this.shared.position = val; + } + }, + FSNode:class { + node_ops = {}; + stream_ops = {}; + readMode = 292 | 73; + writeMode = 146; + mounted = null; + constructor(parent, name, mode, rdev) { + if (!parent) { + parent = this; // root node sets parent to itself + } + this.parent = parent; + this.mount = parent.mount; + this.id = FS.nextInode++; + this.name = name; + this.mode = mode; + this.rdev = rdev; + this.atime = this.mtime = this.ctime = Date.now(); + } + get read() { + return (this.mode & this.readMode) === this.readMode; + } + set read(val) { + val ? this.mode |= this.readMode : this.mode &= ~this.readMode; + } + get write() { + return (this.mode & this.writeMode) === this.writeMode; + } + set write(val) { + val ? this.mode |= this.writeMode : this.mode &= ~this.writeMode; + } + get isFolder() { + return FS.isDir(this.mode); + } + get isDevice() { + return FS.isChrdev(this.mode); + } + }, + lookupPath(path, opts = {}) { + if (!path) { + throw new FS.ErrnoError(44); + } + opts.follow_mount ??= true + + if (!PATH.isAbs(path)) { + path = FS.cwd() + '/' + path; + } + + // limit max consecutive symlinks to 40 (SYMLOOP_MAX). + linkloop: for (var nlinks = 0; nlinks < 40; nlinks++) { + // split the absolute path + var parts = path.split('/').filter((p) => !!p); + + // start at the root + var current = FS.root; + var current_path = '/'; + + for (var i = 0; i < parts.length; i++) { + var islast = (i === parts.length-1); + if (islast && opts.parent) { + // stop resolving + break; + } + + if (parts[i] === '.') { + continue; + } + + if (parts[i] === '..') { + current_path = PATH.dirname(current_path); + current = current.parent; + continue; + } + + current_path = PATH.join2(current_path, parts[i]); + try { + current = FS.lookupNode(current, parts[i]); + } catch (e) { + // if noent_okay is true, suppress a ENOENT in the last component + // and return an object with an undefined node. This is needed for + // resolving symlinks in the path when creating a file. + if ((e?.errno === 44) && islast && opts.noent_okay) { + return { path: current_path }; + } + throw e; + } + + // jump to the mount's root node if this is a mountpoint + if (FS.isMountpoint(current) && (!islast || opts.follow_mount)) { + current = current.mounted.root; + } + + // by default, lookupPath will not follow a symlink if it is the final path component. + // setting opts.follow = true will override this behavior. + if (FS.isLink(current.mode) && (!islast || opts.follow)) { + if (!current.node_ops.readlink) { + throw new FS.ErrnoError(52); + } + var link = current.node_ops.readlink(current); + if (!PATH.isAbs(link)) { + link = PATH.dirname(current_path) + '/' + link; + } + path = link + '/' + parts.slice(i + 1).join('/'); + continue linkloop; + } + } + return { path: current_path, node: current }; + } + throw new FS.ErrnoError(32); + }, + getPath(node) { + var path; + while (true) { + if (FS.isRoot(node)) { + var mount = node.mount.mountpoint; + if (!path) return mount; + return mount[mount.length-1] !== '/' ? `${mount}/${path}` : mount + path; + } + path = path ? `${node.name}/${path}` : node.name; + node = node.parent; + } + }, + hashName(parentid, name) { + var hash = 0; + + for (var i = 0; i < name.length; i++) { + hash = ((hash << 5) - hash + name.charCodeAt(i)) | 0; + } + return ((parentid + hash) >>> 0) % FS.nameTable.length; + }, + hashAddNode(node) { + var hash = FS.hashName(node.parent.id, node.name); + node.name_next = FS.nameTable[hash]; + FS.nameTable[hash] = node; + }, + hashRemoveNode(node) { + var hash = FS.hashName(node.parent.id, node.name); + if (FS.nameTable[hash] === node) { + FS.nameTable[hash] = node.name_next; + } else { + var current = FS.nameTable[hash]; + while (current) { + if (current.name_next === node) { + current.name_next = node.name_next; + break; + } + current = current.name_next; + } + } + }, + lookupNode(parent, name) { + var errCode = FS.mayLookup(parent); + if (errCode) { + throw new FS.ErrnoError(errCode); + } + var hash = FS.hashName(parent.id, name); + for (var node = FS.nameTable[hash]; node; node = node.name_next) { + var nodeName = node.name; + if (node.parent.id === parent.id && nodeName === name) { + return node; + } + } + // if we failed to find it in the cache, call into the VFS + return FS.lookup(parent, name); + }, + createNode(parent, name, mode, rdev) { + assert(typeof parent == 'object') + var node = new FS.FSNode(parent, name, mode, rdev); + + FS.hashAddNode(node); + + return node; + }, + destroyNode(node) { + FS.hashRemoveNode(node); + }, + isRoot(node) { + return node === node.parent; + }, + isMountpoint(node) { + return !!node.mounted; + }, + isFile(mode) { + return (mode & 61440) === 32768; + }, + isDir(mode) { + return (mode & 61440) === 16384; + }, + isLink(mode) { + return (mode & 61440) === 40960; + }, + isChrdev(mode) { + return (mode & 61440) === 8192; + }, + isBlkdev(mode) { + return (mode & 61440) === 24576; + }, + isFIFO(mode) { + return (mode & 61440) === 4096; + }, + isSocket(mode) { + return (mode & 49152) === 49152; + }, + flagsToPermissionString(flag) { + var perms = ['r', 'w', 'rw'][flag & 3]; + if ((flag & 512)) { + perms += 'w'; + } + return perms; + }, + nodePermissions(node, perms) { + if (FS.ignorePermissions) { + return 0; + } + // return 0 if any user, group or owner bits are set. + if (perms.includes('r') && !(node.mode & 292)) { + return 2; + } else if (perms.includes('w') && !(node.mode & 146)) { + return 2; + } else if (perms.includes('x') && !(node.mode & 73)) { + return 2; + } + return 0; + }, + mayLookup(dir) { + if (!FS.isDir(dir.mode)) return 54; + var errCode = FS.nodePermissions(dir, 'x'); + if (errCode) return errCode; + if (!dir.node_ops.lookup) return 2; + return 0; + }, + mayCreate(dir, name) { + if (!FS.isDir(dir.mode)) { + return 54; + } + try { + var node = FS.lookupNode(dir, name); + return 20; + } catch (e) { + } + return FS.nodePermissions(dir, 'wx'); + }, + mayDelete(dir, name, isdir) { + var node; + try { + node = FS.lookupNode(dir, name); + } catch (e) { + return e.errno; + } + var errCode = FS.nodePermissions(dir, 'wx'); + if (errCode) { + return errCode; + } + if (isdir) { + if (!FS.isDir(node.mode)) { + return 54; + } + if (FS.isRoot(node) || FS.getPath(node) === FS.cwd()) { + return 10; + } + } else { + if (FS.isDir(node.mode)) { + return 31; + } + } + return 0; + }, + mayOpen(node, flags) { + if (!node) { + return 44; + } + if (FS.isLink(node.mode)) { + return 32; + } else if (FS.isDir(node.mode)) { + if (FS.flagsToPermissionString(flags) !== 'r' // opening for write + || (flags & (512 | 64))) { // TODO: check for O_SEARCH? (== search for dir only) + return 31; + } + } + return FS.nodePermissions(node, FS.flagsToPermissionString(flags)); + }, + checkOpExists(op, err) { + if (!op) { + throw new FS.ErrnoError(err); + } + return op; + }, + MAX_OPEN_FDS:4096, + nextfd() { + for (var fd = 0; fd <= FS.MAX_OPEN_FDS; fd++) { + if (!FS.streams[fd]) { + return fd; + } + } + throw new FS.ErrnoError(33); + }, + getStreamChecked(fd) { + var stream = FS.getStream(fd); + if (!stream) { + throw new FS.ErrnoError(8); + } + return stream; + }, + getStream:(fd) => FS.streams[fd], + createStream(stream, fd = -1) { + assert(fd >= -1); + + // clone it, so we can return an instance of FSStream + stream = Object.assign(new FS.FSStream(), stream); + if (fd == -1) { + fd = FS.nextfd(); + } + stream.fd = fd; + FS.streams[fd] = stream; + return stream; + }, + closeStream(fd) { + FS.streams[fd] = null; + }, + dupStream(origStream, fd = -1) { + var stream = FS.createStream(origStream, fd); + stream.stream_ops?.dup?.(stream); + return stream; + }, + doSetAttr(stream, node, attr) { + var setattr = stream?.stream_ops.setattr; + var arg = setattr ? stream : node; + setattr ??= node.node_ops.setattr; + FS.checkOpExists(setattr, 63) + setattr(arg, attr); + }, + chrdev_stream_ops:{ + open(stream) { + var device = FS.getDevice(stream.node.rdev); + // override node's stream ops with the device's + stream.stream_ops = device.stream_ops; + // forward the open call + stream.stream_ops.open?.(stream); + }, + llseek() { + throw new FS.ErrnoError(70); + }, + }, + major:(dev) => ((dev) >> 8), + minor:(dev) => ((dev) & 0xff), + makedev:(ma, mi) => ((ma) << 8 | (mi)), + registerDevice(dev, ops) { + FS.devices[dev] = { stream_ops: ops }; + }, + getDevice:(dev) => FS.devices[dev], + getMounts(mount) { + var mounts = []; + var check = [mount]; + + while (check.length) { + var m = check.pop(); + + mounts.push(m); + + check.push(...m.mounts); + } + + return mounts; + }, + syncfs(populate, callback) { + if (typeof populate == 'function') { + callback = populate; + populate = false; + } + + FS.syncFSRequests++; + + if (FS.syncFSRequests > 1) { + err(`warning: ${FS.syncFSRequests} FS.syncfs operations in flight at once, probably just doing extra work`); + } + + var mounts = FS.getMounts(FS.root.mount); + var completed = 0; + + function doCallback(errCode) { + assert(FS.syncFSRequests > 0); + FS.syncFSRequests--; + return callback(errCode); + } + + function done(errCode) { + if (errCode) { + if (!done.errored) { + done.errored = true; + return doCallback(errCode); + } + return; + } + if (++completed >= mounts.length) { + doCallback(null); + } + }; + + // sync all mounts + mounts.forEach((mount) => { + if (!mount.type.syncfs) { + return done(null); + } + mount.type.syncfs(mount, populate, done); + }); + }, + mount(type, opts, mountpoint) { + if (typeof type == 'string') { + // The filesystem was not included, and instead we have an error + // message stored in the variable. + throw type; + } + var root = mountpoint === '/'; + var pseudo = !mountpoint; + var node; + + if (root && FS.root) { + throw new FS.ErrnoError(10); + } else if (!root && !pseudo) { + var lookup = FS.lookupPath(mountpoint, { follow_mount: false }); + + mountpoint = lookup.path; // use the absolute path + node = lookup.node; + + if (FS.isMountpoint(node)) { + throw new FS.ErrnoError(10); + } + + if (!FS.isDir(node.mode)) { + throw new FS.ErrnoError(54); + } + } + + var mount = { + type, + opts, + mountpoint, + mounts: [] + }; + + // create a root node for the fs + var mountRoot = type.mount(mount); + mountRoot.mount = mount; + mount.root = mountRoot; + + if (root) { + FS.root = mountRoot; + } else if (node) { + // set as a mountpoint + node.mounted = mount; + + // add the new mount to the current mount's children + if (node.mount) { + node.mount.mounts.push(mount); + } + } + + return mountRoot; + }, + unmount(mountpoint) { + var lookup = FS.lookupPath(mountpoint, { follow_mount: false }); + + if (!FS.isMountpoint(lookup.node)) { + throw new FS.ErrnoError(28); + } + + // destroy the nodes for this mount, and all its child mounts + var node = lookup.node; + var mount = node.mounted; + var mounts = FS.getMounts(mount); + + Object.keys(FS.nameTable).forEach((hash) => { + var current = FS.nameTable[hash]; + + while (current) { + var next = current.name_next; + + if (mounts.includes(current.mount)) { + FS.destroyNode(current); + } + + current = next; + } + }); + + // no longer a mountpoint + node.mounted = null; + + // remove this mount from the child mounts + var idx = node.mount.mounts.indexOf(mount); + assert(idx !== -1); + node.mount.mounts.splice(idx, 1); + }, + lookup(parent, name) { + return parent.node_ops.lookup(parent, name); + }, + mknod(path, mode, dev) { + var lookup = FS.lookupPath(path, { parent: true }); + var parent = lookup.node; + var name = PATH.basename(path); + if (!name) { + throw new FS.ErrnoError(28); + } + if (name === '.' || name === '..') { + throw new FS.ErrnoError(20); + } + var errCode = FS.mayCreate(parent, name); + if (errCode) { + throw new FS.ErrnoError(errCode); + } + if (!parent.node_ops.mknod) { + throw new FS.ErrnoError(63); + } + return parent.node_ops.mknod(parent, name, mode, dev); + }, + statfs(path) { + return FS.statfsNode(FS.lookupPath(path, {follow: true}).node); + }, + statfsStream(stream) { + // We keep a separate statfsStream function because noderawfs overrides + // it. In noderawfs, stream.node is sometimes null. Instead, we need to + // look at stream.path. + return FS.statfsNode(stream.node); + }, + statfsNode(node) { + // NOTE: None of the defaults here are true. We're just returning safe and + // sane values. Currently nodefs and rawfs replace these defaults, + // other file systems leave them alone. + var rtn = { + bsize: 4096, + frsize: 4096, + blocks: 1e6, + bfree: 5e5, + bavail: 5e5, + files: FS.nextInode, + ffree: FS.nextInode - 1, + fsid: 42, + flags: 2, + namelen: 255, + }; + + if (node.node_ops.statfs) { + Object.assign(rtn, node.node_ops.statfs(node.mount.opts.root)); + } + return rtn; + }, + create(path, mode = 0o666) { + mode &= 4095; + mode |= 32768; + return FS.mknod(path, mode, 0); + }, + mkdir(path, mode = 0o777) { + mode &= 511 | 512; + mode |= 16384; + return FS.mknod(path, mode, 0); + }, + mkdirTree(path, mode) { + var dirs = path.split('/'); + var d = ''; + for (var dir of dirs) { + if (!dir) continue; + if (d || PATH.isAbs(path)) d += '/'; + d += dir; + try { + FS.mkdir(d, mode); + } catch(e) { + if (e.errno != 20) throw e; + } + } + }, + mkdev(path, mode, dev) { + if (typeof dev == 'undefined') { + dev = mode; + mode = 0o666; + } + mode |= 8192; + return FS.mknod(path, mode, dev); + }, + symlink(oldpath, newpath) { + if (!PATH_FS.resolve(oldpath)) { + throw new FS.ErrnoError(44); + } + var lookup = FS.lookupPath(newpath, { parent: true }); + var parent = lookup.node; + if (!parent) { + throw new FS.ErrnoError(44); + } + var newname = PATH.basename(newpath); + var errCode = FS.mayCreate(parent, newname); + if (errCode) { + throw new FS.ErrnoError(errCode); + } + if (!parent.node_ops.symlink) { + throw new FS.ErrnoError(63); + } + return parent.node_ops.symlink(parent, newname, oldpath); + }, + rename(old_path, new_path) { + var old_dirname = PATH.dirname(old_path); + var new_dirname = PATH.dirname(new_path); + var old_name = PATH.basename(old_path); + var new_name = PATH.basename(new_path); + // parents must exist + var lookup, old_dir, new_dir; + + // let the errors from non existent directories percolate up + lookup = FS.lookupPath(old_path, { parent: true }); + old_dir = lookup.node; + lookup = FS.lookupPath(new_path, { parent: true }); + new_dir = lookup.node; + + if (!old_dir || !new_dir) throw new FS.ErrnoError(44); + // need to be part of the same mount + if (old_dir.mount !== new_dir.mount) { + throw new FS.ErrnoError(75); + } + // source must exist + var old_node = FS.lookupNode(old_dir, old_name); + // old path should not be an ancestor of the new path + var relative = PATH_FS.relative(old_path, new_dirname); + if (relative.charAt(0) !== '.') { + throw new FS.ErrnoError(28); + } + // new path should not be an ancestor of the old path + relative = PATH_FS.relative(new_path, old_dirname); + if (relative.charAt(0) !== '.') { + throw new FS.ErrnoError(55); + } + // see if the new path already exists + var new_node; + try { + new_node = FS.lookupNode(new_dir, new_name); + } catch (e) { + // not fatal + } + // early out if nothing needs to change + if (old_node === new_node) { + return; + } + // we'll need to delete the old entry + var isdir = FS.isDir(old_node.mode); + var errCode = FS.mayDelete(old_dir, old_name, isdir); + if (errCode) { + throw new FS.ErrnoError(errCode); + } + // need delete permissions if we'll be overwriting. + // need create permissions if new doesn't already exist. + errCode = new_node ? + FS.mayDelete(new_dir, new_name, isdir) : + FS.mayCreate(new_dir, new_name); + if (errCode) { + throw new FS.ErrnoError(errCode); + } + if (!old_dir.node_ops.rename) { + throw new FS.ErrnoError(63); + } + if (FS.isMountpoint(old_node) || (new_node && FS.isMountpoint(new_node))) { + throw new FS.ErrnoError(10); + } + // if we are going to change the parent, check write permissions + if (new_dir !== old_dir) { + errCode = FS.nodePermissions(old_dir, 'w'); + if (errCode) { + throw new FS.ErrnoError(errCode); + } + } + // remove the node from the lookup hash + FS.hashRemoveNode(old_node); + // do the underlying fs rename + try { + old_dir.node_ops.rename(old_node, new_dir, new_name); + // update old node (we do this here to avoid each backend + // needing to) + old_node.parent = new_dir; + } catch (e) { + throw e; + } finally { + // add the node back to the hash (in case node_ops.rename + // changed its name) + FS.hashAddNode(old_node); + } + }, + rmdir(path) { + var lookup = FS.lookupPath(path, { parent: true }); + var parent = lookup.node; + var name = PATH.basename(path); + var node = FS.lookupNode(parent, name); + var errCode = FS.mayDelete(parent, name, true); + if (errCode) { + throw new FS.ErrnoError(errCode); + } + if (!parent.node_ops.rmdir) { + throw new FS.ErrnoError(63); + } + if (FS.isMountpoint(node)) { + throw new FS.ErrnoError(10); + } + parent.node_ops.rmdir(parent, name); + FS.destroyNode(node); + }, + readdir(path) { + var lookup = FS.lookupPath(path, { follow: true }); + var node = lookup.node; + var readdir = FS.checkOpExists(node.node_ops.readdir, 54); + return readdir(node); + }, + unlink(path) { + var lookup = FS.lookupPath(path, { parent: true }); + var parent = lookup.node; + if (!parent) { + throw new FS.ErrnoError(44); + } + var name = PATH.basename(path); + var node = FS.lookupNode(parent, name); + var errCode = FS.mayDelete(parent, name, false); + if (errCode) { + // According to POSIX, we should map EISDIR to EPERM, but + // we instead do what Linux does (and we must, as we use + // the musl linux libc). + throw new FS.ErrnoError(errCode); + } + if (!parent.node_ops.unlink) { + throw new FS.ErrnoError(63); + } + if (FS.isMountpoint(node)) { + throw new FS.ErrnoError(10); + } + parent.node_ops.unlink(parent, name); + FS.destroyNode(node); + }, + readlink(path) { + var lookup = FS.lookupPath(path); + var link = lookup.node; + if (!link) { + throw new FS.ErrnoError(44); + } + if (!link.node_ops.readlink) { + throw new FS.ErrnoError(28); + } + return link.node_ops.readlink(link); + }, + stat(path, dontFollow) { + var lookup = FS.lookupPath(path, { follow: !dontFollow }); + var node = lookup.node; + var getattr = FS.checkOpExists(node.node_ops.getattr, 63); + return getattr(node); + }, + fstat(fd) { + var stream = FS.getStreamChecked(fd); + var node = stream.node; + var getattr = stream.stream_ops.getattr; + var arg = getattr ? stream : node; + getattr ??= node.node_ops.getattr; + FS.checkOpExists(getattr, 63) + return getattr(arg); + }, + lstat(path) { + return FS.stat(path, true); + }, + doChmod(stream, node, mode, dontFollow) { + FS.doSetAttr(stream, node, { + mode: (mode & 4095) | (node.mode & ~4095), + ctime: Date.now(), + dontFollow + }); + }, + chmod(path, mode, dontFollow) { + var node; + if (typeof path == 'string') { + var lookup = FS.lookupPath(path, { follow: !dontFollow }); + node = lookup.node; + } else { + node = path; + } + FS.doChmod(null, node, mode, dontFollow); + }, + lchmod(path, mode) { + FS.chmod(path, mode, true); + }, + fchmod(fd, mode) { + var stream = FS.getStreamChecked(fd); + FS.doChmod(stream, stream.node, mode, false); + }, + doChown(stream, node, dontFollow) { + FS.doSetAttr(stream, node, { + timestamp: Date.now(), + dontFollow + // we ignore the uid / gid for now + }); + }, + chown(path, uid, gid, dontFollow) { + var node; + if (typeof path == 'string') { + var lookup = FS.lookupPath(path, { follow: !dontFollow }); + node = lookup.node; + } else { + node = path; + } + FS.doChown(null, node, dontFollow); + }, + lchown(path, uid, gid) { + FS.chown(path, uid, gid, true); + }, + fchown(fd, uid, gid) { + var stream = FS.getStreamChecked(fd); + FS.doChown(stream, stream.node, false); + }, + doTruncate(stream, node, len) { + if (FS.isDir(node.mode)) { + throw new FS.ErrnoError(31); + } + if (!FS.isFile(node.mode)) { + throw new FS.ErrnoError(28); + } + var errCode = FS.nodePermissions(node, 'w'); + if (errCode) { + throw new FS.ErrnoError(errCode); + } + FS.doSetAttr(stream, node, { + size: len, + timestamp: Date.now() + }); + }, + truncate(path, len) { + if (len < 0) { + throw new FS.ErrnoError(28); + } + var node; + if (typeof path == 'string') { + var lookup = FS.lookupPath(path, { follow: true }); + node = lookup.node; + } else { + node = path; + } + FS.doTruncate(null, node, len); + }, + ftruncate(fd, len) { + var stream = FS.getStreamChecked(fd); + if (len < 0 || (stream.flags & 2097155) === 0) { + throw new FS.ErrnoError(28); + } + FS.doTruncate(stream, stream.node, len); + }, + utime(path, atime, mtime) { + var lookup = FS.lookupPath(path, { follow: true }); + var node = lookup.node; + var setattr = FS.checkOpExists(node.node_ops.setattr, 63); + setattr(node, { + atime: atime, + mtime: mtime + }); + }, + open(path, flags, mode = 0o666) { + if (path === "") { + throw new FS.ErrnoError(44); + } + flags = typeof flags == 'string' ? FS_modeStringToFlags(flags) : flags; + if ((flags & 64)) { + mode = (mode & 4095) | 32768; + } else { + mode = 0; + } + var node; + var isDirPath; + if (typeof path == 'object') { + node = path; + } else { + isDirPath = path.endsWith("/"); + // noent_okay makes it so that if the final component of the path + // doesn't exist, lookupPath returns `node: undefined`. `path` will be + // updated to point to the target of all symlinks. + var lookup = FS.lookupPath(path, { + follow: !(flags & 131072), + noent_okay: true + }); + node = lookup.node; + path = lookup.path; + } + // perhaps we need to create the node + var created = false; + if ((flags & 64)) { + if (node) { + // if O_CREAT and O_EXCL are set, error out if the node already exists + if ((flags & 128)) { + throw new FS.ErrnoError(20); + } + } else if (isDirPath) { + throw new FS.ErrnoError(31); + } else { + // node doesn't exist, try to create it + // Ignore the permission bits here to ensure we can `open` this new + // file below. We use chmod below the apply the permissions once the + // file is open. + node = FS.mknod(path, mode | 0o777, 0); + created = true; + } + } + if (!node) { + throw new FS.ErrnoError(44); + } + // can't truncate a device + if (FS.isChrdev(node.mode)) { + flags &= ~512; + } + // if asked only for a directory, then this must be one + if ((flags & 65536) && !FS.isDir(node.mode)) { + throw new FS.ErrnoError(54); + } + // check permissions, if this is not a file we just created now (it is ok to + // create and write to a file with read-only permissions; it is read-only + // for later use) + if (!created) { + var errCode = FS.mayOpen(node, flags); + if (errCode) { + throw new FS.ErrnoError(errCode); + } + } + // do truncation if necessary + if ((flags & 512) && !created) { + FS.truncate(node, 0); + } + // we've already handled these, don't pass down to the underlying vfs + flags &= ~(128 | 512 | 131072); + + // register the stream with the filesystem + var stream = FS.createStream({ + node, + path: FS.getPath(node), // we want the absolute path to the node + flags, + seekable: true, + position: 0, + stream_ops: node.stream_ops, + // used by the file family libc calls (fopen, fwrite, ferror, etc.) + ungotten: [], + error: false + }); + // call the new stream's open function + if (stream.stream_ops.open) { + stream.stream_ops.open(stream); + } + if (created) { + FS.chmod(node, mode & 0o777); + } + if (Module['logReadFiles'] && !(flags & 1)) { + if (!(path in FS.readFiles)) { + FS.readFiles[path] = 1; + } + } + return stream; + }, + close(stream) { + if (FS.isClosed(stream)) { + throw new FS.ErrnoError(8); + } + if (stream.getdents) stream.getdents = null; // free readdir state + try { + if (stream.stream_ops.close) { + stream.stream_ops.close(stream); + } + } catch (e) { + throw e; + } finally { + FS.closeStream(stream.fd); + } + stream.fd = null; + }, + isClosed(stream) { + return stream.fd === null; + }, + llseek(stream, offset, whence) { + if (FS.isClosed(stream)) { + throw new FS.ErrnoError(8); + } + if (!stream.seekable || !stream.stream_ops.llseek) { + throw new FS.ErrnoError(70); + } + if (whence != 0 && whence != 1 && whence != 2) { + throw new FS.ErrnoError(28); + } + stream.position = stream.stream_ops.llseek(stream, offset, whence); + stream.ungotten = []; + return stream.position; + }, + read(stream, buffer, offset, length, position) { + assert(offset >= 0); + if (length < 0 || position < 0) { + throw new FS.ErrnoError(28); + } + if (FS.isClosed(stream)) { + throw new FS.ErrnoError(8); + } + if ((stream.flags & 2097155) === 1) { + throw new FS.ErrnoError(8); + } + if (FS.isDir(stream.node.mode)) { + throw new FS.ErrnoError(31); + } + if (!stream.stream_ops.read) { + throw new FS.ErrnoError(28); + } + var seeking = typeof position != 'undefined'; + if (!seeking) { + position = stream.position; + } else if (!stream.seekable) { + throw new FS.ErrnoError(70); + } + var bytesRead = stream.stream_ops.read(stream, buffer, offset, length, position); + if (!seeking) stream.position += bytesRead; + return bytesRead; + }, + write(stream, buffer, offset, length, position, canOwn) { + assert(offset >= 0); + if (length < 0 || position < 0) { + throw new FS.ErrnoError(28); + } + if (FS.isClosed(stream)) { + throw new FS.ErrnoError(8); + } + if ((stream.flags & 2097155) === 0) { + throw new FS.ErrnoError(8); + } + if (FS.isDir(stream.node.mode)) { + throw new FS.ErrnoError(31); + } + if (!stream.stream_ops.write) { + throw new FS.ErrnoError(28); + } + if (stream.seekable && stream.flags & 1024) { + // seek to the end before writing in append mode + FS.llseek(stream, 0, 2); + } + var seeking = typeof position != 'undefined'; + if (!seeking) { + position = stream.position; + } else if (!stream.seekable) { + throw new FS.ErrnoError(70); + } + var bytesWritten = stream.stream_ops.write(stream, buffer, offset, length, position, canOwn); + if (!seeking) stream.position += bytesWritten; + return bytesWritten; + }, + mmap(stream, length, position, prot, flags) { + // User requests writing to file (prot & PROT_WRITE != 0). + // Checking if we have permissions to write to the file unless + // MAP_PRIVATE flag is set. According to POSIX spec it is possible + // to write to file opened in read-only mode with MAP_PRIVATE flag, + // as all modifications will be visible only in the memory of + // the current process. + if ((prot & 2) !== 0 + && (flags & 2) === 0 + && (stream.flags & 2097155) !== 2) { + throw new FS.ErrnoError(2); + } + if ((stream.flags & 2097155) === 1) { + throw new FS.ErrnoError(2); + } + if (!stream.stream_ops.mmap) { + throw new FS.ErrnoError(43); + } + if (!length) { + throw new FS.ErrnoError(28); + } + return stream.stream_ops.mmap(stream, length, position, prot, flags); + }, + msync(stream, buffer, offset, length, mmapFlags) { + assert(offset >= 0); + if (!stream.stream_ops.msync) { + return 0; + } + return stream.stream_ops.msync(stream, buffer, offset, length, mmapFlags); + }, + ioctl(stream, cmd, arg) { + if (!stream.stream_ops.ioctl) { + throw new FS.ErrnoError(59); + } + return stream.stream_ops.ioctl(stream, cmd, arg); + }, + readFile(path, opts = {}) { + opts.flags = opts.flags || 0; + opts.encoding = opts.encoding || 'binary'; + if (opts.encoding !== 'utf8' && opts.encoding !== 'binary') { + throw new Error(`Invalid encoding type "${opts.encoding}"`); + } + var ret; + var stream = FS.open(path, opts.flags); + var stat = FS.stat(path); + var length = stat.size; + var buf = new Uint8Array(length); + FS.read(stream, buf, 0, length, 0); + if (opts.encoding === 'utf8') { + ret = UTF8ArrayToString(buf); + } else if (opts.encoding === 'binary') { + ret = buf; + } + FS.close(stream); + return ret; + }, + writeFile(path, data, opts = {}) { + opts.flags = opts.flags || 577; + var stream = FS.open(path, opts.flags, opts.mode); + if (typeof data == 'string') { + var buf = new Uint8Array(lengthBytesUTF8(data)+1); + var actualNumBytes = stringToUTF8Array(data, buf, 0, buf.length); + FS.write(stream, buf, 0, actualNumBytes, undefined, opts.canOwn); + } else if (ArrayBuffer.isView(data)) { + FS.write(stream, data, 0, data.byteLength, undefined, opts.canOwn); + } else { + throw new Error('Unsupported data type'); + } + FS.close(stream); + }, + cwd:() => FS.currentPath, + chdir(path) { + var lookup = FS.lookupPath(path, { follow: true }); + if (lookup.node === null) { + throw new FS.ErrnoError(44); + } + if (!FS.isDir(lookup.node.mode)) { + throw new FS.ErrnoError(54); + } + var errCode = FS.nodePermissions(lookup.node, 'x'); + if (errCode) { + throw new FS.ErrnoError(errCode); + } + FS.currentPath = lookup.path; + }, + createDefaultDirectories() { + FS.mkdir('/tmp'); + FS.mkdir('/home'); + FS.mkdir('/home/web_user'); + }, + createDefaultDevices() { + // create /dev + FS.mkdir('/dev'); + // setup /dev/null + FS.registerDevice(FS.makedev(1, 3), { + read: () => 0, + write: (stream, buffer, offset, length, pos) => length, + llseek: () => 0, + }); + FS.mkdev('/dev/null', FS.makedev(1, 3)); + // setup /dev/tty and /dev/tty1 + // stderr needs to print output using err() rather than out() + // so we register a second tty just for it. + TTY.register(FS.makedev(5, 0), TTY.default_tty_ops); + TTY.register(FS.makedev(6, 0), TTY.default_tty1_ops); + FS.mkdev('/dev/tty', FS.makedev(5, 0)); + FS.mkdev('/dev/tty1', FS.makedev(6, 0)); + // setup /dev/[u]random + // use a buffer to avoid overhead of individual crypto calls per byte + var randomBuffer = new Uint8Array(1024), randomLeft = 0; + var randomByte = () => { + if (randomLeft === 0) { + randomFill(randomBuffer); + randomLeft = randomBuffer.byteLength; + } + return randomBuffer[--randomLeft]; + }; + FS.createDevice('/dev', 'random', randomByte); + FS.createDevice('/dev', 'urandom', randomByte); + // we're not going to emulate the actual shm device, + // just create the tmp dirs that reside in it commonly + FS.mkdir('/dev/shm'); + FS.mkdir('/dev/shm/tmp'); + }, + createSpecialDirectories() { + // create /proc/self/fd which allows /proc/self/fd/6 => readlink gives the + // name of the stream for fd 6 (see test_unistd_ttyname) + FS.mkdir('/proc'); + var proc_self = FS.mkdir('/proc/self'); + FS.mkdir('/proc/self/fd'); + FS.mount({ + mount() { + var node = FS.createNode(proc_self, 'fd', 16895, 73); + node.stream_ops = { + llseek: MEMFS.stream_ops.llseek, + }; + node.node_ops = { + lookup(parent, name) { + var fd = +name; + var stream = FS.getStreamChecked(fd); + var ret = { + parent: null, + mount: { mountpoint: 'fake' }, + node_ops: { readlink: () => stream.path }, + id: fd + 1, + }; + ret.parent = ret; // make it look like a simple root node + return ret; + }, + readdir() { + return Array.from(FS.streams.entries()) + .filter(([k, v]) => v) + .map(([k, v]) => k.toString()); + } + }; + return node; + } + }, {}, '/proc/self/fd'); + }, + createStandardStreams(input, output, error) { + // TODO deprecate the old functionality of a single + // input / output callback and that utilizes FS.createDevice + // and instead require a unique set of stream ops + + // by default, we symlink the standard streams to the + // default tty devices. however, if the standard streams + // have been overwritten we create a unique device for + // them instead. + if (input) { + FS.createDevice('/dev', 'stdin', input); + } else { + FS.symlink('/dev/tty', '/dev/stdin'); + } + if (output) { + FS.createDevice('/dev', 'stdout', null, output); + } else { + FS.symlink('/dev/tty', '/dev/stdout'); + } + if (error) { + FS.createDevice('/dev', 'stderr', null, error); + } else { + FS.symlink('/dev/tty1', '/dev/stderr'); + } + + // open default streams for the stdin, stdout and stderr devices + var stdin = FS.open('/dev/stdin', 0); + var stdout = FS.open('/dev/stdout', 1); + var stderr = FS.open('/dev/stderr', 1); + assert(stdin.fd === 0, `invalid handle for stdin (${stdin.fd})`); + assert(stdout.fd === 1, `invalid handle for stdout (${stdout.fd})`); + assert(stderr.fd === 2, `invalid handle for stderr (${stderr.fd})`); + }, + staticInit() { + FS.nameTable = new Array(4096); + + FS.mount(MEMFS, {}, '/'); + + FS.createDefaultDirectories(); + FS.createDefaultDevices(); + FS.createSpecialDirectories(); + + FS.filesystems = { + 'MEMFS': MEMFS, + }; + }, + init(input, output, error) { + assert(!FS.initialized, 'FS.init was previously called. If you want to initialize later with custom parameters, remove any earlier calls (note that one is automatically added to the generated code)'); + FS.initialized = true; + + // Allow Module.stdin etc. to provide defaults, if none explicitly passed to us here + input ??= Module['stdin']; + output ??= Module['stdout']; + error ??= Module['stderr']; + + FS.createStandardStreams(input, output, error); + }, + quit() { + FS.initialized = false; + // force-flush all streams, so we get musl std streams printed out + _fflush(0); + // close all of our streams + for (var stream of FS.streams) { + if (stream) { + FS.close(stream); + } + } + }, + findObject(path, dontResolveLastLink) { + var ret = FS.analyzePath(path, dontResolveLastLink); + if (!ret.exists) { + return null; + } + return ret.object; + }, + analyzePath(path, dontResolveLastLink) { + // operate from within the context of the symlink's target + try { + var lookup = FS.lookupPath(path, { follow: !dontResolveLastLink }); + path = lookup.path; + } catch (e) { + } + var ret = { + isRoot: false, exists: false, error: 0, name: null, path: null, object: null, + parentExists: false, parentPath: null, parentObject: null + }; + try { + var lookup = FS.lookupPath(path, { parent: true }); + ret.parentExists = true; + ret.parentPath = lookup.path; + ret.parentObject = lookup.node; + ret.name = PATH.basename(path); + lookup = FS.lookupPath(path, { follow: !dontResolveLastLink }); + ret.exists = true; + ret.path = lookup.path; + ret.object = lookup.node; + ret.name = lookup.node.name; + ret.isRoot = lookup.path === '/'; + } catch (e) { + ret.error = e.errno; + }; + return ret; + }, + createPath(parent, path, canRead, canWrite) { + parent = typeof parent == 'string' ? parent : FS.getPath(parent); + var parts = path.split('/').reverse(); + while (parts.length) { + var part = parts.pop(); + if (!part) continue; + var current = PATH.join2(parent, part); + try { + FS.mkdir(current); + } catch (e) { + if (e.errno != 20) throw e; + } + parent = current; + } + return current; + }, + createFile(parent, name, properties, canRead, canWrite) { + var path = PATH.join2(typeof parent == 'string' ? parent : FS.getPath(parent), name); + var mode = FS_getMode(canRead, canWrite); + return FS.create(path, mode); + }, + createDataFile(parent, name, data, canRead, canWrite, canOwn) { + var path = name; + if (parent) { + parent = typeof parent == 'string' ? parent : FS.getPath(parent); + path = name ? PATH.join2(parent, name) : parent; + } + var mode = FS_getMode(canRead, canWrite); + var node = FS.create(path, mode); + if (data) { + if (typeof data == 'string') { + var arr = new Array(data.length); + for (var i = 0, len = data.length; i < len; ++i) arr[i] = data.charCodeAt(i); + data = arr; + } + // make sure we can write to the file + FS.chmod(node, mode | 146); + var stream = FS.open(node, 577); + FS.write(stream, data, 0, data.length, 0, canOwn); + FS.close(stream); + FS.chmod(node, mode); + } + }, + createDevice(parent, name, input, output) { + var path = PATH.join2(typeof parent == 'string' ? parent : FS.getPath(parent), name); + var mode = FS_getMode(!!input, !!output); + FS.createDevice.major ??= 64; + var dev = FS.makedev(FS.createDevice.major++, 0); + // Create a fake device that a set of stream ops to emulate + // the old behavior. + FS.registerDevice(dev, { + open(stream) { + stream.seekable = false; + }, + close(stream) { + // flush any pending line data + if (output?.buffer?.length) { + output(10); + } + }, + read(stream, buffer, offset, length, pos /* ignored */) { + var bytesRead = 0; + for (var i = 0; i < length; i++) { + var result; + try { + result = input(); + } catch (e) { + throw new FS.ErrnoError(29); + } + if (result === undefined && bytesRead === 0) { + throw new FS.ErrnoError(6); + } + if (result === null || result === undefined) break; + bytesRead++; + buffer[offset+i] = result; + } + if (bytesRead) { + stream.node.atime = Date.now(); + } + return bytesRead; + }, + write(stream, buffer, offset, length, pos) { + for (var i = 0; i < length; i++) { + try { + output(buffer[offset+i]); + } catch (e) { + throw new FS.ErrnoError(29); + } + } + if (length) { + stream.node.mtime = stream.node.ctime = Date.now(); + } + return i; + } + }); + return FS.mkdev(path, mode, dev); + }, + forceLoadFile(obj) { + if (obj.isDevice || obj.isFolder || obj.link || obj.contents) return true; + if (typeof XMLHttpRequest != 'undefined') { + throw new Error("Lazy loading should have been performed (contents set) in createLazyFile, but it was not. Lazy loading only works in web workers. Use --embed-file or --preload-file in emcc on the main thread."); + } else { // Command-line. + try { + obj.contents = readBinary(obj.url); + obj.usedBytes = obj.contents.length; + } catch (e) { + throw new FS.ErrnoError(29); + } + } + }, + createLazyFile(parent, name, url, canRead, canWrite) { + // Lazy chunked Uint8Array (implements get and length from Uint8Array). + // Actual getting is abstracted away for eventual reuse. + class LazyUint8Array { + lengthKnown = false; + chunks = []; // Loaded chunks. Index is the chunk number + get(idx) { + if (idx > this.length-1 || idx < 0) { + return undefined; + } + var chunkOffset = idx % this.chunkSize; + var chunkNum = (idx / this.chunkSize)|0; + return this.getter(chunkNum)[chunkOffset]; + } + setDataGetter(getter) { + this.getter = getter; + } + cacheLength() { + // Find length + var xhr = new XMLHttpRequest(); + xhr.open('HEAD', url, false); + xhr.send(null); + if (!(xhr.status >= 200 && xhr.status < 300 || xhr.status === 304)) throw new Error("Couldn't load " + url + ". Status: " + xhr.status); + var datalength = Number(xhr.getResponseHeader("Content-length")); + var header; + var hasByteServing = (header = xhr.getResponseHeader("Accept-Ranges")) && header === "bytes"; + var usesGzip = (header = xhr.getResponseHeader("Content-Encoding")) && header === "gzip"; + + var chunkSize = 1024*1024; // Chunk size in bytes + + if (!hasByteServing) chunkSize = datalength; + + // Function to get a range from the remote URL. + var doXHR = (from, to) => { + if (from > to) throw new Error("invalid range (" + from + ", " + to + ") or no bytes requested!"); + if (to > datalength-1) throw new Error("only " + datalength + " bytes available! programmer error!"); + + // TODO: Use mozResponseArrayBuffer, responseStream, etc. if available. + var xhr = new XMLHttpRequest(); + xhr.open('GET', url, false); + if (datalength !== chunkSize) xhr.setRequestHeader("Range", "bytes=" + from + "-" + to); + + // Some hints to the browser that we want binary data. + xhr.responseType = 'arraybuffer'; + if (xhr.overrideMimeType) { + xhr.overrideMimeType('text/plain; charset=x-user-defined'); + } + + xhr.send(null); + if (!(xhr.status >= 200 && xhr.status < 300 || xhr.status === 304)) throw new Error("Couldn't load " + url + ". Status: " + xhr.status); + if (xhr.response !== undefined) { + return new Uint8Array(/** @type{Array} */(xhr.response || [])); + } + return intArrayFromString(xhr.responseText || '', true); + }; + var lazyArray = this; + lazyArray.setDataGetter((chunkNum) => { + var start = chunkNum * chunkSize; + var end = (chunkNum+1) * chunkSize - 1; // including this byte + end = Math.min(end, datalength-1); // if datalength-1 is selected, this is the last block + if (typeof lazyArray.chunks[chunkNum] == 'undefined') { + lazyArray.chunks[chunkNum] = doXHR(start, end); + } + if (typeof lazyArray.chunks[chunkNum] == 'undefined') throw new Error('doXHR failed!'); + return lazyArray.chunks[chunkNum]; + }); + + if (usesGzip || !datalength) { + // if the server uses gzip or doesn't supply the length, we have to download the whole file to get the (uncompressed) length + chunkSize = datalength = 1; // this will force getter(0)/doXHR do download the whole file + datalength = this.getter(0).length; + chunkSize = datalength; + out("LazyFiles on gzip forces download of the whole file when length is accessed"); + } + + this._length = datalength; + this._chunkSize = chunkSize; + this.lengthKnown = true; + } + get length() { + if (!this.lengthKnown) { + this.cacheLength(); + } + return this._length; + } + get chunkSize() { + if (!this.lengthKnown) { + this.cacheLength(); + } + return this._chunkSize; + } + } + + if (typeof XMLHttpRequest != 'undefined') { + if (!ENVIRONMENT_IS_WORKER) throw 'Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc'; + var lazyArray = new LazyUint8Array(); + var properties = { isDevice: false, contents: lazyArray }; + } else { + var properties = { isDevice: false, url: url }; + } + + var node = FS.createFile(parent, name, properties, canRead, canWrite); + // This is a total hack, but I want to get this lazy file code out of the + // core of MEMFS. If we want to keep this lazy file concept I feel it should + // be its own thin LAZYFS proxying calls to MEMFS. + if (properties.contents) { + node.contents = properties.contents; + } else if (properties.url) { + node.contents = null; + node.url = properties.url; + } + // Add a function that defers querying the file size until it is asked the first time. + Object.defineProperties(node, { + usedBytes: { + get: function() { return this.contents.length; } + } + }); + // override each stream op with one that tries to force load the lazy file first + var stream_ops = {}; + var keys = Object.keys(node.stream_ops); + keys.forEach((key) => { + var fn = node.stream_ops[key]; + stream_ops[key] = (...args) => { + FS.forceLoadFile(node); + return fn(...args); + }; + }); + function writeChunks(stream, buffer, offset, length, position) { + var contents = stream.node.contents; + if (position >= contents.length) + return 0; + var size = Math.min(contents.length - position, length); + assert(size >= 0); + if (contents.slice) { // normal array + for (var i = 0; i < size; i++) { + buffer[offset + i] = contents[position + i]; + } + } else { + for (var i = 0; i < size; i++) { // LazyUint8Array from sync binary XHR + buffer[offset + i] = contents.get(position + i); + } + } + return size; + } + // use a custom read function + stream_ops.read = (stream, buffer, offset, length, position) => { + FS.forceLoadFile(node); + return writeChunks(stream, buffer, offset, length, position) + }; + // use a custom mmap function + stream_ops.mmap = (stream, length, position, prot, flags) => { + FS.forceLoadFile(node); + var ptr = mmapAlloc(length); + if (!ptr) { + throw new FS.ErrnoError(48); + } + writeChunks(stream, HEAP8, ptr, length, position); + return { ptr, allocated: true }; + }; + node.stream_ops = stream_ops; + return node; + }, + absolutePath() { + abort('FS.absolutePath has been removed; use PATH_FS.resolve instead'); + }, + createFolder() { + abort('FS.createFolder has been removed; use FS.mkdir instead'); + }, + createLink() { + abort('FS.createLink has been removed; use FS.symlink instead'); + }, + joinPath() { + abort('FS.joinPath has been removed; use PATH.join instead'); + }, + mmapAlloc() { + abort('FS.mmapAlloc has been replaced by the top level function mmapAlloc'); + }, + standardizePath() { + abort('FS.standardizePath has been removed; use PATH.normalize instead'); + }, + }; + + var SYSCALLS = { + DEFAULT_POLLMASK:5, + calculateAt(dirfd, path, allowEmpty) { + if (PATH.isAbs(path)) { + return path; + } + // relative path + var dir; + if (dirfd === -100) { + dir = FS.cwd(); + } else { + var dirstream = SYSCALLS.getStreamFromFD(dirfd); + dir = dirstream.path; + } + if (path.length == 0) { + if (!allowEmpty) { + throw new FS.ErrnoError(44);; + } + return dir; + } + return dir + '/' + path; + }, + writeStat(buf, stat) { + HEAP32[((buf)>>2)] = stat.dev; + HEAP32[(((buf)+(4))>>2)] = stat.mode; + HEAPU32[(((buf)+(8))>>2)] = stat.nlink; + HEAP32[(((buf)+(12))>>2)] = stat.uid; + HEAP32[(((buf)+(16))>>2)] = stat.gid; + HEAP32[(((buf)+(20))>>2)] = stat.rdev; + HEAP64[(((buf)+(24))>>3)] = BigInt(stat.size); + HEAP32[(((buf)+(32))>>2)] = 4096; + HEAP32[(((buf)+(36))>>2)] = stat.blocks; + var atime = stat.atime.getTime(); + var mtime = stat.mtime.getTime(); + var ctime = stat.ctime.getTime(); + HEAP64[(((buf)+(40))>>3)] = BigInt(Math.floor(atime / 1000)); + HEAPU32[(((buf)+(48))>>2)] = (atime % 1000) * 1000 * 1000; + HEAP64[(((buf)+(56))>>3)] = BigInt(Math.floor(mtime / 1000)); + HEAPU32[(((buf)+(64))>>2)] = (mtime % 1000) * 1000 * 1000; + HEAP64[(((buf)+(72))>>3)] = BigInt(Math.floor(ctime / 1000)); + HEAPU32[(((buf)+(80))>>2)] = (ctime % 1000) * 1000 * 1000; + HEAP64[(((buf)+(88))>>3)] = BigInt(stat.ino); + return 0; + }, + writeStatFs(buf, stats) { + HEAP32[(((buf)+(4))>>2)] = stats.bsize; + HEAP32[(((buf)+(40))>>2)] = stats.bsize; + HEAP32[(((buf)+(8))>>2)] = stats.blocks; + HEAP32[(((buf)+(12))>>2)] = stats.bfree; + HEAP32[(((buf)+(16))>>2)] = stats.bavail; + HEAP32[(((buf)+(20))>>2)] = stats.files; + HEAP32[(((buf)+(24))>>2)] = stats.ffree; + HEAP32[(((buf)+(28))>>2)] = stats.fsid; + HEAP32[(((buf)+(44))>>2)] = stats.flags; // ST_NOSUID + HEAP32[(((buf)+(36))>>2)] = stats.namelen; + }, + doMsync(addr, stream, len, flags, offset) { + if (!FS.isFile(stream.node.mode)) { + throw new FS.ErrnoError(43); + } + if (flags & 2) { + // MAP_PRIVATE calls need not to be synced back to underlying fs + return 0; + } + var buffer = HEAPU8.slice(addr, addr + len); + FS.msync(stream, buffer, offset, len, flags); + }, + getStreamFromFD(fd) { + var stream = FS.getStreamChecked(fd); + return stream; + }, + varargs:undefined, + getStr(ptr) { + var ret = UTF8ToString(ptr); + return ret; + }, + }; + function ___syscall_chmod(path, mode) { + try { + + path = SYSCALLS.getStr(path); + FS.chmod(path, mode); + return 0; + } catch (e) { + if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + return -e.errno; + } + } + + function ___syscall_fchmod(fd, mode) { + try { + + FS.fchmod(fd, mode); + return 0; + } catch (e) { + if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + return -e.errno; + } + } + + /** @suppress {duplicate } */ + var syscallGetVarargI = () => { + assert(SYSCALLS.varargs != undefined); + // the `+` prepended here is necessary to convince the JSCompiler that varargs is indeed a number. + var ret = HEAP32[((+SYSCALLS.varargs)>>2)]; + SYSCALLS.varargs += 4; + return ret; + }; + var syscallGetVarargP = syscallGetVarargI; + + + function ___syscall_fcntl64(fd, cmd, varargs) { + SYSCALLS.varargs = varargs; + try { + + var stream = SYSCALLS.getStreamFromFD(fd); + switch (cmd) { + case 0: { + var arg = syscallGetVarargI(); + if (arg < 0) { + return -28; + } + while (FS.streams[arg]) { + arg++; + } + var newStream; + newStream = FS.dupStream(stream, arg); + return newStream.fd; + } + case 1: + case 2: + return 0; // FD_CLOEXEC makes no sense for a single process. + case 3: + return stream.flags; + case 4: { + var arg = syscallGetVarargI(); + stream.flags |= arg; + return 0; + } + case 12: { + var arg = syscallGetVarargP(); + var offset = 0; + // We're always unlocked. + HEAP16[(((arg)+(offset))>>1)] = 2; + return 0; + } + case 13: + case 14: + // Pretend that the locking is successful. These are process-level locks, + // and Emscripten programs are a single process. If we supported linking a + // filesystem between programs, we'd need to do more here. + // See https://github.com/emscripten-core/emscripten/issues/23697 + return 0; + } + return -28; + } catch (e) { + if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + return -e.errno; + } + } + + function ___syscall_fstat64(fd, buf) { + try { + + return SYSCALLS.writeStat(buf, FS.fstat(fd)); + } catch (e) { + if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + return -e.errno; + } + } + + + function ___syscall_ioctl(fd, op, varargs) { + SYSCALLS.varargs = varargs; + try { + + var stream = SYSCALLS.getStreamFromFD(fd); + switch (op) { + case 21509: { + if (!stream.tty) return -59; + return 0; + } + case 21505: { + if (!stream.tty) return -59; + if (stream.tty.ops.ioctl_tcgets) { + var termios = stream.tty.ops.ioctl_tcgets(stream); + var argp = syscallGetVarargP(); + HEAP32[((argp)>>2)] = termios.c_iflag || 0; + HEAP32[(((argp)+(4))>>2)] = termios.c_oflag || 0; + HEAP32[(((argp)+(8))>>2)] = termios.c_cflag || 0; + HEAP32[(((argp)+(12))>>2)] = termios.c_lflag || 0; + for (var i = 0; i < 32; i++) { + HEAP8[(argp + i)+(17)] = termios.c_cc[i] || 0; + } + return 0; + } + return 0; + } + case 21510: + case 21511: + case 21512: { + if (!stream.tty) return -59; + return 0; // no-op, not actually adjusting terminal settings + } + case 21506: + case 21507: + case 21508: { + if (!stream.tty) return -59; + if (stream.tty.ops.ioctl_tcsets) { + var argp = syscallGetVarargP(); + var c_iflag = HEAP32[((argp)>>2)]; + var c_oflag = HEAP32[(((argp)+(4))>>2)]; + var c_cflag = HEAP32[(((argp)+(8))>>2)]; + var c_lflag = HEAP32[(((argp)+(12))>>2)]; + var c_cc = [] + for (var i = 0; i < 32; i++) { + c_cc.push(HEAP8[(argp + i)+(17)]); + } + return stream.tty.ops.ioctl_tcsets(stream.tty, op, { c_iflag, c_oflag, c_cflag, c_lflag, c_cc }); + } + return 0; // no-op, not actually adjusting terminal settings + } + case 21519: { + if (!stream.tty) return -59; + var argp = syscallGetVarargP(); + HEAP32[((argp)>>2)] = 0; + return 0; + } + case 21520: { + if (!stream.tty) return -59; + return -28; // not supported + } + case 21531: { + var argp = syscallGetVarargP(); + return FS.ioctl(stream, op, argp); + } + case 21523: { + // TODO: in theory we should write to the winsize struct that gets + // passed in, but for now musl doesn't read anything on it + if (!stream.tty) return -59; + if (stream.tty.ops.ioctl_tiocgwinsz) { + var winsize = stream.tty.ops.ioctl_tiocgwinsz(stream.tty); + var argp = syscallGetVarargP(); + HEAP16[((argp)>>1)] = winsize[0]; + HEAP16[(((argp)+(2))>>1)] = winsize[1]; + } + return 0; + } + case 21524: { + // TODO: technically, this ioctl call should change the window size. + // but, since emscripten doesn't have any concept of a terminal window + // yet, we'll just silently throw it away as we do TIOCGWINSZ + if (!stream.tty) return -59; + return 0; + } + case 21515: { + if (!stream.tty) return -59; + return 0; + } + default: return -28; // not supported + } + } catch (e) { + if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + return -e.errno; + } + } + + function ___syscall_lstat64(path, buf) { + try { + + path = SYSCALLS.getStr(path); + return SYSCALLS.writeStat(buf, FS.lstat(path)); + } catch (e) { + if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + return -e.errno; + } + } + + function ___syscall_newfstatat(dirfd, path, buf, flags) { + try { + + path = SYSCALLS.getStr(path); + var nofollow = flags & 256; + var allowEmpty = flags & 4096; + flags = flags & (~6400); + assert(!flags, `unknown flags in __syscall_newfstatat: ${flags}`); + path = SYSCALLS.calculateAt(dirfd, path, allowEmpty); + return SYSCALLS.writeStat(buf, nofollow ? FS.lstat(path) : FS.stat(path)); + } catch (e) { + if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + return -e.errno; + } + } + + + function ___syscall_openat(dirfd, path, flags, varargs) { + SYSCALLS.varargs = varargs; + try { + + path = SYSCALLS.getStr(path); + path = SYSCALLS.calculateAt(dirfd, path); + var mode = varargs ? syscallGetVarargI() : 0; + return FS.open(path, flags, mode).fd; + } catch (e) { + if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + return -e.errno; + } + } + + function ___syscall_renameat(olddirfd, oldpath, newdirfd, newpath) { + try { + + oldpath = SYSCALLS.getStr(oldpath); + newpath = SYSCALLS.getStr(newpath); + oldpath = SYSCALLS.calculateAt(olddirfd, oldpath); + newpath = SYSCALLS.calculateAt(newdirfd, newpath); + FS.rename(oldpath, newpath); + return 0; + } catch (e) { + if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + return -e.errno; + } + } + + function ___syscall_rmdir(path) { + try { + + path = SYSCALLS.getStr(path); + FS.rmdir(path); + return 0; + } catch (e) { + if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + return -e.errno; + } + } + + function ___syscall_stat64(path, buf) { + try { + + path = SYSCALLS.getStr(path); + return SYSCALLS.writeStat(buf, FS.stat(path)); + } catch (e) { + if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + return -e.errno; + } + } + + function ___syscall_unlinkat(dirfd, path, flags) { + try { + + path = SYSCALLS.getStr(path); + path = SYSCALLS.calculateAt(dirfd, path); + if (flags === 0) { + FS.unlink(path); + } else if (flags === 512) { + FS.rmdir(path); + } else { + abort('Invalid flags passed to unlinkat'); + } + return 0; + } catch (e) { + if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + return -e.errno; + } + } + + var __abort_js = () => + abort('native code called abort()'); + + var isLeapYear = (year) => year%4 === 0 && (year%100 !== 0 || year%400 === 0); + + var MONTH_DAYS_LEAP_CUMULATIVE = [0,31,60,91,121,152,182,213,244,274,305,335]; + + var MONTH_DAYS_REGULAR_CUMULATIVE = [0,31,59,90,120,151,181,212,243,273,304,334]; + var ydayFromDate = (date) => { + var leap = isLeapYear(date.getFullYear()); + var monthDaysCumulative = (leap ? MONTH_DAYS_LEAP_CUMULATIVE : MONTH_DAYS_REGULAR_CUMULATIVE); + var yday = monthDaysCumulative[date.getMonth()] + date.getDate() - 1; // -1 since it's days since Jan 1 + + return yday; + }; + + var INT53_MAX = 9007199254740992; + + var INT53_MIN = -9007199254740992; + var bigintToI53Checked = (num) => (num < INT53_MIN || num > INT53_MAX) ? NaN : Number(num); + function __localtime_js(time, tmPtr) { + time = bigintToI53Checked(time); + + + var date = new Date(time*1000); + HEAP32[((tmPtr)>>2)] = date.getSeconds(); + HEAP32[(((tmPtr)+(4))>>2)] = date.getMinutes(); + HEAP32[(((tmPtr)+(8))>>2)] = date.getHours(); + HEAP32[(((tmPtr)+(12))>>2)] = date.getDate(); + HEAP32[(((tmPtr)+(16))>>2)] = date.getMonth(); + HEAP32[(((tmPtr)+(20))>>2)] = date.getFullYear()-1900; + HEAP32[(((tmPtr)+(24))>>2)] = date.getDay(); + + var yday = ydayFromDate(date)|0; + HEAP32[(((tmPtr)+(28))>>2)] = yday; + HEAP32[(((tmPtr)+(36))>>2)] = -(date.getTimezoneOffset() * 60); + + // Attention: DST is in December in South, and some regions don't have DST at all. + var start = new Date(date.getFullYear(), 0, 1); + var summerOffset = new Date(date.getFullYear(), 6, 1).getTimezoneOffset(); + var winterOffset = start.getTimezoneOffset(); + var dst = (summerOffset != winterOffset && date.getTimezoneOffset() == Math.min(winterOffset, summerOffset))|0; + HEAP32[(((tmPtr)+(32))>>2)] = dst; + ; + } + + + var __mktime_js = function(tmPtr) { + + var ret = (() => { + var date = new Date(HEAP32[(((tmPtr)+(20))>>2)] + 1900, + HEAP32[(((tmPtr)+(16))>>2)], + HEAP32[(((tmPtr)+(12))>>2)], + HEAP32[(((tmPtr)+(8))>>2)], + HEAP32[(((tmPtr)+(4))>>2)], + HEAP32[((tmPtr)>>2)], + 0); + + // There's an ambiguous hour when the time goes back; the tm_isdst field is + // used to disambiguate it. Date() basically guesses, so we fix it up if it + // guessed wrong, or fill in tm_isdst with the guess if it's -1. + var dst = HEAP32[(((tmPtr)+(32))>>2)]; + var guessedOffset = date.getTimezoneOffset(); + var start = new Date(date.getFullYear(), 0, 1); + var summerOffset = new Date(date.getFullYear(), 6, 1).getTimezoneOffset(); + var winterOffset = start.getTimezoneOffset(); + var dstOffset = Math.min(winterOffset, summerOffset); // DST is in December in South + if (dst < 0) { + // Attention: some regions don't have DST at all. + HEAP32[(((tmPtr)+(32))>>2)] = Number(summerOffset != winterOffset && dstOffset == guessedOffset); + } else if ((dst > 0) != (dstOffset == guessedOffset)) { + var nonDstOffset = Math.max(winterOffset, summerOffset); + var trueOffset = dst > 0 ? dstOffset : nonDstOffset; + // Don't try setMinutes(date.getMinutes() + ...) -- it's messed up. + date.setTime(date.getTime() + (trueOffset - guessedOffset)*60000); + } + + HEAP32[(((tmPtr)+(24))>>2)] = date.getDay(); + var yday = ydayFromDate(date)|0; + HEAP32[(((tmPtr)+(28))>>2)] = yday; + // To match expected behavior, update fields from date + HEAP32[((tmPtr)>>2)] = date.getSeconds(); + HEAP32[(((tmPtr)+(4))>>2)] = date.getMinutes(); + HEAP32[(((tmPtr)+(8))>>2)] = date.getHours(); + HEAP32[(((tmPtr)+(12))>>2)] = date.getDate(); + HEAP32[(((tmPtr)+(16))>>2)] = date.getMonth(); + HEAP32[(((tmPtr)+(20))>>2)] = date.getYear(); + + var timeMs = date.getTime(); + if (isNaN(timeMs)) { + return -1; + } + // Return time in microseconds + return timeMs / 1000; + })(); + return BigInt(ret); + }; + + var stringToUTF8 = (str, outPtr, maxBytesToWrite) => { + assert(typeof maxBytesToWrite == 'number', 'stringToUTF8(str, outPtr, maxBytesToWrite) is missing the third parameter that specifies the length of the output buffer!'); + return stringToUTF8Array(str, HEAPU8, outPtr, maxBytesToWrite); + }; + + var __tzset_js = (timezone, daylight, std_name, dst_name) => { + // TODO: Use (malleable) environment variables instead of system settings. + var currentYear = new Date().getFullYear(); + var winter = new Date(currentYear, 0, 1); + var summer = new Date(currentYear, 6, 1); + var winterOffset = winter.getTimezoneOffset(); + var summerOffset = summer.getTimezoneOffset(); + + // Local standard timezone offset. Local standard time is not adjusted for + // daylight savings. This code uses the fact that getTimezoneOffset returns + // a greater value during Standard Time versus Daylight Saving Time (DST). + // Thus it determines the expected output during Standard Time, and it + // compares whether the output of the given date the same (Standard) or less + // (DST). + var stdTimezoneOffset = Math.max(winterOffset, summerOffset); + + // timezone is specified as seconds west of UTC ("The external variable + // `timezone` shall be set to the difference, in seconds, between + // Coordinated Universal Time (UTC) and local standard time."), the same + // as returned by stdTimezoneOffset. + // See http://pubs.opengroup.org/onlinepubs/009695399/functions/tzset.html + HEAPU32[((timezone)>>2)] = stdTimezoneOffset * 60; + + HEAP32[((daylight)>>2)] = Number(winterOffset != summerOffset); + + var extractZone = (timezoneOffset) => { + // Why inverse sign? + // Read here https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/getTimezoneOffset + var sign = timezoneOffset >= 0 ? "-" : "+"; + + var absOffset = Math.abs(timezoneOffset) + var hours = String(Math.floor(absOffset / 60)).padStart(2, "0"); + var minutes = String(absOffset % 60).padStart(2, "0"); + + return `UTC${sign}${hours}${minutes}`; + } + + var winterName = extractZone(winterOffset); + var summerName = extractZone(summerOffset); + assert(winterName); + assert(summerName); + assert(lengthBytesUTF8(winterName) <= 16, `timezone name truncated to fit in TZNAME_MAX (${winterName})`); + assert(lengthBytesUTF8(summerName) <= 16, `timezone name truncated to fit in TZNAME_MAX (${summerName})`); + if (summerOffset < winterOffset) { + // Northern hemisphere + stringToUTF8(winterName, std_name, 17); + stringToUTF8(summerName, dst_name, 17); + } else { + stringToUTF8(winterName, dst_name, 17); + stringToUTF8(summerName, std_name, 17); + } + }; + + var _emscripten_date_now = () => Date.now(); + + var abortOnCannotGrowMemory = (requestedSize) => { + abort(`Cannot enlarge memory arrays to size ${requestedSize} bytes (OOM). Either (1) compile with -sINITIAL_MEMORY=X with X higher than the current value ${HEAP8.length}, (2) compile with -sALLOW_MEMORY_GROWTH which allows increasing the size at runtime, or (3) if you want malloc to return NULL (0) instead of this abort, compile with -sABORTING_MALLOC=0`); + }; + var _emscripten_resize_heap = (requestedSize) => { + var oldSize = HEAPU8.length; + // With CAN_ADDRESS_2GB or MEMORY64, pointers are already unsigned. + requestedSize >>>= 0; + abortOnCannotGrowMemory(requestedSize); + }; + + + var runtimeKeepaliveCounter = 0; + var keepRuntimeAlive = () => noExitRuntime || runtimeKeepaliveCounter > 0; + var _proc_exit = (code) => { + EXITSTATUS = code; + if (!keepRuntimeAlive()) { + Module['onExit']?.(code); + ABORT = true; + } + quit_(code, new ExitStatus(code)); + }; + + + /** @suppress {duplicate } */ + /** @param {boolean|number=} implicit */ + var exitJS = (status, implicit) => { + EXITSTATUS = status; + + checkUnflushedContent(); + + // if exit() was called explicitly, warn the user if the runtime isn't actually being shut down + if (keepRuntimeAlive() && !implicit) { + var msg = `program exited (with status: ${status}), but keepRuntimeAlive() is set (counter=${runtimeKeepaliveCounter}) due to an async operation, so halting execution but not exiting the runtime or preventing further async execution (you can use emscripten_force_exit, if you want to force a true shutdown)`; + err(msg); + } + + _proc_exit(status); + }; + var _exit = exitJS; + + function _fd_close(fd) { + try { + + var stream = SYSCALLS.getStreamFromFD(fd); + FS.close(stream); + return 0; + } catch (e) { + if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + return e.errno; + } + } + + function _fd_fdstat_get(fd, pbuf) { + try { + + var rightsBase = 0; + var rightsInheriting = 0; + var flags = 0; + { + var stream = SYSCALLS.getStreamFromFD(fd); + // All character devices are terminals (other things a Linux system would + // assume is a character device, like the mouse, we have special APIs for). + var type = stream.tty ? 2 : + FS.isDir(stream.mode) ? 3 : + FS.isLink(stream.mode) ? 7 : + 4; + } + HEAP8[pbuf] = type; + HEAP16[(((pbuf)+(2))>>1)] = flags; + HEAP64[(((pbuf)+(8))>>3)] = BigInt(rightsBase); + HEAP64[(((pbuf)+(16))>>3)] = BigInt(rightsInheriting); + return 0; + } catch (e) { + if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + return e.errno; + } + } + + /** @param {number=} offset */ + var doReadv = (stream, iov, iovcnt, offset) => { + var ret = 0; + for (var i = 0; i < iovcnt; i++) { + var ptr = HEAPU32[((iov)>>2)]; + var len = HEAPU32[(((iov)+(4))>>2)]; + iov += 8; + var curr = FS.read(stream, HEAP8, ptr, len, offset); + if (curr < 0) return -1; + ret += curr; + if (curr < len) break; // nothing more to read + if (typeof offset != 'undefined') { + offset += curr; + } + } + return ret; + }; + + function _fd_read(fd, iov, iovcnt, pnum) { + try { + + var stream = SYSCALLS.getStreamFromFD(fd); + var num = doReadv(stream, iov, iovcnt); + HEAPU32[((pnum)>>2)] = num; + return 0; + } catch (e) { + if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + return e.errno; + } + } + + + function _fd_seek(fd, offset, whence, newOffset) { + offset = bigintToI53Checked(offset); + + + try { + + if (isNaN(offset)) return 61; + var stream = SYSCALLS.getStreamFromFD(fd); + FS.llseek(stream, offset, whence); + HEAP64[((newOffset)>>3)] = BigInt(stream.position); + if (stream.getdents && offset === 0 && whence === 0) stream.getdents = null; // reset readdir state + return 0; + } catch (e) { + if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + return e.errno; + } + ; + } + + /** @param {number=} offset */ + var doWritev = (stream, iov, iovcnt, offset) => { + var ret = 0; + for (var i = 0; i < iovcnt; i++) { + var ptr = HEAPU32[((iov)>>2)]; + var len = HEAPU32[(((iov)+(4))>>2)]; + iov += 8; + var curr = FS.write(stream, HEAP8, ptr, len, offset); + if (curr < 0) return -1; + ret += curr; + if (curr < len) { + // No more space to write. + break; + } + if (typeof offset != 'undefined') { + offset += curr; + } + } + return ret; + }; + + function _fd_write(fd, iov, iovcnt, pnum) { + try { + + var stream = SYSCALLS.getStreamFromFD(fd); + var num = doWritev(stream, iov, iovcnt); + HEAPU32[((pnum)>>2)] = num; + return 0; + } catch (e) { + if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + return e.errno; + } + } + + + var handleException = (e) => { + // Certain exception types we do not treat as errors since they are used for + // internal control flow. + // 1. ExitStatus, which is thrown by exit() + // 2. "unwind", which is thrown by emscripten_unwind_to_js_event_loop() and others + // that wish to return to JS event loop. + if (e instanceof ExitStatus || e == 'unwind') { + return EXITSTATUS; + } + checkStackCookie(); + if (e instanceof WebAssembly.RuntimeError) { + if (_emscripten_stack_get_current() <= 0) { + err('Stack overflow detected. You can try increasing -sSTACK_SIZE (currently set to 65536)'); + } + } + quit_(1, e); + }; + + + + var stackAlloc = (sz) => __emscripten_stack_alloc(sz); + var stringToUTF8OnStack = (str) => { + var size = lengthBytesUTF8(str) + 1; + var ret = stackAlloc(size); + stringToUTF8(str, ret, size); + return ret; + }; + + FS.createPreloadedFile = FS_createPreloadedFile; + FS.staticInit(); + // Set module methods based on EXPORTED_RUNTIME_METHODS + ; +// End JS library code + +function checkIncomingModuleAPI() { + ignoredModuleProp('fetchSettings'); +} +var wasmImports = { + /** @export */ + __syscall_chmod: ___syscall_chmod, + /** @export */ + __syscall_fchmod: ___syscall_fchmod, + /** @export */ + __syscall_fcntl64: ___syscall_fcntl64, + /** @export */ + __syscall_fstat64: ___syscall_fstat64, + /** @export */ + __syscall_ioctl: ___syscall_ioctl, + /** @export */ + __syscall_lstat64: ___syscall_lstat64, + /** @export */ + __syscall_newfstatat: ___syscall_newfstatat, + /** @export */ + __syscall_openat: ___syscall_openat, + /** @export */ + __syscall_renameat: ___syscall_renameat, + /** @export */ + __syscall_rmdir: ___syscall_rmdir, + /** @export */ + __syscall_stat64: ___syscall_stat64, + /** @export */ + __syscall_unlinkat: ___syscall_unlinkat, + /** @export */ + _abort_js: __abort_js, + /** @export */ + _localtime_js: __localtime_js, + /** @export */ + _mktime_js: __mktime_js, + /** @export */ + _tzset_js: __tzset_js, + /** @export */ + emscripten_date_now: _emscripten_date_now, + /** @export */ + emscripten_resize_heap: _emscripten_resize_heap, + /** @export */ + exit: _exit, + /** @export */ + fd_close: _fd_close, + /** @export */ + fd_fdstat_get: _fd_fdstat_get, + /** @export */ + fd_read: _fd_read, + /** @export */ + fd_seek: _fd_seek, + /** @export */ + fd_write: _fd_write +}; +var wasmExports; +createWasm(); +var ___wasm_call_ctors = createExportWrapper('__wasm_call_ctors', 0); +var _main = Module['_main'] = createExportWrapper('__main_argc_argv', 2); +var _strerror = createExportWrapper('strerror', 1); +var _fflush = createExportWrapper('fflush', 1); +var _emscripten_stack_init = () => (_emscripten_stack_init = wasmExports['emscripten_stack_init'])(); +var _emscripten_stack_get_free = () => (_emscripten_stack_get_free = wasmExports['emscripten_stack_get_free'])(); +var _emscripten_stack_get_base = () => (_emscripten_stack_get_base = wasmExports['emscripten_stack_get_base'])(); +var _emscripten_stack_get_end = () => (_emscripten_stack_get_end = wasmExports['emscripten_stack_get_end'])(); +var __emscripten_stack_restore = (a0) => (__emscripten_stack_restore = wasmExports['_emscripten_stack_restore'])(a0); +var __emscripten_stack_alloc = (a0) => (__emscripten_stack_alloc = wasmExports['_emscripten_stack_alloc'])(a0); +var _emscripten_stack_get_current = () => (_emscripten_stack_get_current = wasmExports['emscripten_stack_get_current'])(); + + +// include: postamble.js +// === Auto-generated postamble setup entry stuff === + +var missingLibrarySymbols = [ + 'writeI53ToI64', + 'writeI53ToI64Clamped', + 'writeI53ToI64Signaling', + 'writeI53ToU64Clamped', + 'writeI53ToU64Signaling', + 'readI53FromI64', + 'readI53FromU64', + 'convertI32PairToI53', + 'convertI32PairToI53Checked', + 'convertU32PairToI53', + 'getTempRet0', + 'setTempRet0', + 'zeroMemory', + 'getHeapMax', + 'growMemory', + 'inetPton4', + 'inetNtop4', + 'inetPton6', + 'inetNtop6', + 'readSockaddr', + 'writeSockaddr', + 'emscriptenLog', + 'readEmAsmArgs', + 'jstoi_q', + 'getExecutableName', + 'listenOnce', + 'autoResumeAudioContext', + 'getDynCaller', + 'dynCall', + 'runtimeKeepalivePush', + 'runtimeKeepalivePop', + 'callUserCallback', + 'maybeExit', + 'asmjsMangle', + 'alignMemory', + 'HandleAllocator', + 'getNativeTypeSize', + 'addOnInit', + 'addOnPostCtor', + 'addOnPreMain', + 'addOnExit', + 'STACK_SIZE', + 'STACK_ALIGN', + 'POINTER_SIZE', + 'ASSERTIONS', + 'getCFunc', + 'ccall', + 'cwrap', + 'uleb128Encode', + 'sigToWasmTypes', + 'generateFuncType', + 'convertJsFunctionToWasm', + 'getEmptyTableSlot', + 'updateTableMap', + 'getFunctionAddress', + 'addFunction', + 'removeFunction', + 'reallyNegative', + 'unSign', + 'strLen', + 'reSign', + 'formatString', + 'intArrayToString', + 'AsciiToString', + 'stringToAscii', + 'UTF16ToString', + 'stringToUTF16', + 'lengthBytesUTF16', + 'UTF32ToString', + 'stringToUTF32', + 'lengthBytesUTF32', + 'stringToNewUTF8', + 'writeArrayToMemory', + 'registerKeyEventCallback', + 'maybeCStringToJsString', + 'findEventTarget', + 'getBoundingClientRect', + 'fillMouseEventData', + 'registerMouseEventCallback', + 'registerWheelEventCallback', + 'registerUiEventCallback', + 'registerFocusEventCallback', + 'fillDeviceOrientationEventData', + 'registerDeviceOrientationEventCallback', + 'fillDeviceMotionEventData', + 'registerDeviceMotionEventCallback', + 'screenOrientation', + 'fillOrientationChangeEventData', + 'registerOrientationChangeEventCallback', + 'fillFullscreenChangeEventData', + 'registerFullscreenChangeEventCallback', + 'JSEvents_requestFullscreen', + 'JSEvents_resizeCanvasForFullscreen', + 'registerRestoreOldStyle', + 'hideEverythingExceptGivenElement', + 'restoreHiddenElements', + 'setLetterbox', + 'softFullscreenResizeWebGLRenderTarget', + 'doRequestFullscreen', + 'fillPointerlockChangeEventData', + 'registerPointerlockChangeEventCallback', + 'registerPointerlockErrorEventCallback', + 'requestPointerLock', + 'fillVisibilityChangeEventData', + 'registerVisibilityChangeEventCallback', + 'registerTouchEventCallback', + 'fillGamepadEventData', + 'registerGamepadEventCallback', + 'registerBeforeUnloadEventCallback', + 'fillBatteryEventData', + 'battery', + 'registerBatteryEventCallback', + 'setCanvasElementSize', + 'getCanvasElementSize', + 'jsStackTrace', + 'getCallstack', + 'convertPCtoSourceLocation', + 'getEnvStrings', + 'checkWasiClock', + 'wasiRightsToMuslOFlags', + 'wasiOFlagsToMuslOFlags', + 'safeSetTimeout', + 'setImmediateWrapped', + 'safeRequestAnimationFrame', + 'clearImmediateWrapped', + 'registerPostMainLoop', + 'registerPreMainLoop', + 'getPromise', + 'makePromise', + 'idsToPromises', + 'makePromiseCallback', + 'ExceptionInfo', + 'findMatchingCatch', + 'Browser_asyncPrepareDataCounter', + 'arraySum', + 'addDays', + 'getSocketFromFD', + 'getSocketAddress', + 'FS_unlink', + 'FS_mkdirTree', + '_setNetworkCallback', + 'heapObjectForWebGLType', + 'toTypedArrayIndex', + 'webgl_enable_ANGLE_instanced_arrays', + 'webgl_enable_OES_vertex_array_object', + 'webgl_enable_WEBGL_draw_buffers', + 'webgl_enable_WEBGL_multi_draw', + 'webgl_enable_EXT_polygon_offset_clamp', + 'webgl_enable_EXT_clip_control', + 'webgl_enable_WEBGL_polygon_mode', + 'emscriptenWebGLGet', + 'computeUnpackAlignedImageSize', + 'colorChannelsInGlTextureFormat', + 'emscriptenWebGLGetTexPixelData', + 'emscriptenWebGLGetUniform', + 'webglGetUniformLocation', + 'webglPrepareUniformLocationsBeforeFirstUse', + 'webglGetLeftBracePos', + 'emscriptenWebGLGetVertexAttrib', + '__glGetActiveAttribOrUniform', + 'writeGLArray', + 'registerWebGlEventCallback', + 'runAndAbortIfError', + 'ALLOC_NORMAL', + 'ALLOC_STACK', + 'allocate', + 'writeStringToMemory', + 'writeAsciiToMemory', + 'demangle', + 'stackTrace', +]; +missingLibrarySymbols.forEach(missingLibrarySymbol) + +var unexportedSymbols = [ + 'run', + 'addRunDependency', + 'removeRunDependency', + 'out', + 'err', + 'callMain', + 'abort', + 'wasmMemory', + 'wasmExports', + 'writeStackCookie', + 'checkStackCookie', + 'INT53_MAX', + 'INT53_MIN', + 'bigintToI53Checked', + 'stackSave', + 'stackRestore', + 'stackAlloc', + 'ptrToString', + 'exitJS', + 'abortOnCannotGrowMemory', + 'ENV', + 'ERRNO_CODES', + 'strError', + 'DNS', + 'Protocols', + 'Sockets', + 'timers', + 'warnOnce', + 'readEmAsmArgsArray', + 'jstoi_s', + 'handleException', + 'keepRuntimeAlive', + 'asyncLoad', + 'mmapAlloc', + 'wasmTable', + 'noExitRuntime', + 'addOnPreRun', + 'addOnPostRun', + 'freeTableIndexes', + 'functionsInTableMap', + 'setValue', + 'getValue', + 'PATH', + 'PATH_FS', + 'UTF8Decoder', + 'UTF8ArrayToString', + 'UTF8ToString', + 'stringToUTF8Array', + 'stringToUTF8', + 'lengthBytesUTF8', + 'intArrayFromString', + 'UTF16Decoder', + 'stringToUTF8OnStack', + 'JSEvents', + 'specialHTMLTargets', + 'findCanvasEventTarget', + 'currentFullscreenStrategy', + 'restoreOldWindowedStyle', + 'UNWIND_CACHE', + 'ExitStatus', + 'doReadv', + 'doWritev', + 'initRandomFill', + 'randomFill', + 'emSetImmediate', + 'emClearImmediate_deps', + 'emClearImmediate', + 'promiseMap', + 'uncaughtExceptionCount', + 'exceptionLast', + 'exceptionCaught', + 'Browser', + 'getPreloadedImageData__data', + 'wget', + 'MONTH_DAYS_REGULAR', + 'MONTH_DAYS_LEAP', + 'MONTH_DAYS_REGULAR_CUMULATIVE', + 'MONTH_DAYS_LEAP_CUMULATIVE', + 'isLeapYear', + 'ydayFromDate', + 'SYSCALLS', + 'preloadPlugins', + 'FS_createPreloadedFile', + 'FS_modeStringToFlags', + 'FS_getMode', + 'FS_stdin_getChar_buffer', + 'FS_stdin_getChar', + 'FS_createPath', + 'FS_createDevice', + 'FS_readFile', + 'FS', + 'FS_createDataFile', + 'FS_createLazyFile', + 'MEMFS', + 'TTY', + 'PIPEFS', + 'SOCKFS', + 'tempFixedLengthArray', + 'miniTempWebGLFloatBuffers', + 'miniTempWebGLIntBuffers', + 'GL', + 'AL', + 'GLUT', + 'EGL', + 'GLEW', + 'IDBStore', + 'SDL', + 'SDL_gfx', + 'allocateUTF8', + 'allocateUTF8OnStack', + 'print', + 'printErr', +]; +unexportedSymbols.forEach(unexportedRuntimeSymbol); + + + +var calledRun; + +function callMain(args = []) { + assert(runDependencies == 0, 'cannot call main when async dependencies remain! (listen on Module["onRuntimeInitialized"])'); + assert(typeof onPreRuns === 'undefined' || onPreRuns.length == 0, 'cannot call main when preRun functions remain to be called'); + + var entryFunction = _main; + + args.unshift(thisProgram); + + var argc = args.length; + var argv = stackAlloc((argc + 1) * 4); + var argv_ptr = argv; + args.forEach((arg) => { + HEAPU32[((argv_ptr)>>2)] = stringToUTF8OnStack(arg); + argv_ptr += 4; + }); + HEAPU32[((argv_ptr)>>2)] = 0; + + try { + + var ret = entryFunction(argc, argv); + + // if we're not running an evented main loop, it's time to exit + exitJS(ret, /* implicit = */ true); + return ret; + } catch (e) { + return handleException(e); + } +} + +function stackCheckInit() { + // This is normally called automatically during __wasm_call_ctors but need to + // get these values before even running any of the ctors so we call it redundantly + // here. + _emscripten_stack_init(); + // TODO(sbc): Move writeStackCookie to native to to avoid this. + writeStackCookie(); +} + +function run(args = arguments_) { + + if (runDependencies > 0) { + dependenciesFulfilled = run; + return; + } + + stackCheckInit(); + + preRun(); + + // a preRun added a dependency, run will be called later + if (runDependencies > 0) { + dependenciesFulfilled = run; + return; + } + + function doRun() { + // run may have just been called through dependencies being fulfilled just in this very frame, + // or while the async setStatus time below was happening + assert(!calledRun); + calledRun = true; + Module['calledRun'] = true; + + if (ABORT) return; + + initRuntime(); + + preMain(); + + Module['onRuntimeInitialized']?.(); + consumedModuleProp('onRuntimeInitialized'); + + var noInitialRun = Module['noInitialRun'];legacyModuleProp('noInitialRun', 'noInitialRun'); + if (!noInitialRun) callMain(args); + + postRun(); + } + + if (Module['setStatus']) { + Module['setStatus']('Running...'); + setTimeout(() => { + setTimeout(() => Module['setStatus'](''), 1); + doRun(); + }, 1); + } else + { + doRun(); + } + checkStackCookie(); +} + +function checkUnflushedContent() { + // Compiler settings do not allow exiting the runtime, so flushing + // the streams is not possible. but in ASSERTIONS mode we check + // if there was something to flush, and if so tell the user they + // should request that the runtime be exitable. + // Normally we would not even include flush() at all, but in ASSERTIONS + // builds we do so just for this check, and here we see if there is any + // content to flush, that is, we check if there would have been + // something a non-ASSERTIONS build would have not seen. + // How we flush the streams depends on whether we are in SYSCALLS_REQUIRE_FILESYSTEM=0 + // mode (which has its own special function for this; otherwise, all + // the code is inside libc) + var oldOut = out; + var oldErr = err; + var has = false; + out = err = (x) => { + has = true; + } + try { // it doesn't matter if it fails + _fflush(0); + // also flush in the JS FS layer + ['stdout', 'stderr'].forEach((name) => { + var info = FS.analyzePath('/dev/' + name); + if (!info) return; + var stream = info.object; + var rdev = stream.rdev; + var tty = TTY.ttys[rdev]; + if (tty?.output?.length) { + has = true; + } + }); + } catch(e) {} + out = oldOut; + err = oldErr; + if (has) { + warnOnce('stdio streams had content in them that was not flushed. you should set EXIT_RUNTIME to 1 (see the Emscripten FAQ), or make sure to emit a newline when you printf etc.'); + } +} + +if (Module['preInit']) { + if (typeof Module['preInit'] == 'function') Module['preInit'] = [Module['preInit']]; + while (Module['preInit'].length > 0) { + Module['preInit'].pop()(); + } +} +consumedModuleProp('preInit'); + +run(); + +// end include: postamble.js + diff --git a/thirdparty/libzip-1.11.3/build-emcmake/examples/autoclose-archive.wasm b/thirdparty/libzip-1.11.3/build-emcmake/examples/autoclose-archive.wasm new file mode 100755 index 0000000000000000000000000000000000000000..4b03118f75afb948c38b1226b8c5251852a03df8 GIT binary patch literal 398520 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�PLE|96HN9aDbYv# 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�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%0DF#`~E0@J4WEsGw{e2_Q@Oj|k3_r=P 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 n3C?{2_F%~A Promise +// 3. pre-run appended it, var Module = {}; ..generated code.. +// 4. External script tag defines var Module. +// We need to check if Module already exists (e.g. case 3 above). +// Substitution will be replaced with actual code on later stage of the build, +// this way Closure Compiler will not mangle it (e.g. case 4. above). +// Note that if you want to run closure, and also to use Module +// after the generated code, you will need to define var Module = {}; +// before the code. Then that object will be used in the code, and you +// can continue to use Module afterwards as well. +var Module = typeof Module != 'undefined' ? Module : {}; + +// Determine the runtime environment we are in. You can customize this by +// setting the ENVIRONMENT setting at compile time (see settings.js). + +// Attempt to auto-detect the environment +var ENVIRONMENT_IS_WEB = typeof window == 'object'; +var ENVIRONMENT_IS_WORKER = typeof WorkerGlobalScope != 'undefined'; +// N.b. Electron.js environment is simultaneously a NODE-environment, but +// also a web environment. +var ENVIRONMENT_IS_NODE = typeof process == 'object' && typeof process.versions == 'object' && typeof process.versions.node == 'string' && process.type != 'renderer'; +var ENVIRONMENT_IS_SHELL = !ENVIRONMENT_IS_WEB && !ENVIRONMENT_IS_NODE && !ENVIRONMENT_IS_WORKER; + +if (ENVIRONMENT_IS_NODE) { + +} + +// --pre-jses are emitted after the Module integration code, so that they can +// refer to Module (if they choose; they can also define Module) + + +// Sometimes an existing Module object exists with properties +// meant to overwrite the default module functionality. Here +// we collect those properties and reapply _after_ we configure +// the current environment's defaults to avoid having to be so +// defensive during initialization. +var moduleOverrides = {...Module}; + +var arguments_ = []; +var thisProgram = './this.program'; +var quit_ = (status, toThrow) => { + throw toThrow; +}; + +// `/` should be present at the end if `scriptDirectory` is not empty +var scriptDirectory = ''; +function locateFile(path) { + if (Module['locateFile']) { + return Module['locateFile'](path, scriptDirectory); + } + return scriptDirectory + path; +} + +// Hooks that are implemented differently in different runtime environments. +var readAsync, readBinary; + +if (ENVIRONMENT_IS_NODE) { + if (typeof process == 'undefined' || !process.release || process.release.name !== 'node') throw new Error('not compiled for this environment (did you build to HTML and try to run it not on the web, or set ENVIRONMENT to something - like node - and run it someplace else - like on the web?)'); + + var nodeVersion = process.versions.node; + var numericVersion = nodeVersion.split('.').slice(0, 3); + numericVersion = (numericVersion[0] * 10000) + (numericVersion[1] * 100) + (numericVersion[2].split('-')[0] * 1); + var minVersion = 160000; + if (numericVersion < 160000) { + throw new Error('This emscripten-generated code requires node v16.0.0 (detected v' + nodeVersion + ')'); + } + + // These modules will usually be used on Node.js. Load them eagerly to avoid + // the complexity of lazy-loading. + var fs = require('fs'); + var nodePath = require('path'); + + scriptDirectory = __dirname + '/'; + +// include: node_shell_read.js +readBinary = (filename) => { + // We need to re-wrap `file://` strings to URLs. + filename = isFileURI(filename) ? new URL(filename) : filename; + var ret = fs.readFileSync(filename); + assert(Buffer.isBuffer(ret)); + return ret; +}; + +readAsync = async (filename, binary = true) => { + // See the comment in the `readBinary` function. + filename = isFileURI(filename) ? new URL(filename) : filename; + var ret = fs.readFileSync(filename, binary ? undefined : 'utf8'); + assert(binary ? Buffer.isBuffer(ret) : typeof ret == 'string'); + return ret; +}; +// end include: node_shell_read.js + if (!Module['thisProgram'] && process.argv.length > 1) { + thisProgram = process.argv[1].replace(/\\/g, '/'); + } + + arguments_ = process.argv.slice(2); + + if (typeof module != 'undefined') { + module['exports'] = Module; + } + + quit_ = (status, toThrow) => { + process.exitCode = status; + throw toThrow; + }; + +} else +if (ENVIRONMENT_IS_SHELL) { + + if ((typeof process == 'object' && typeof require === 'function') || typeof window == 'object' || typeof WorkerGlobalScope != 'undefined') throw new Error('not compiled for this environment (did you build to HTML and try to run it not on the web, or set ENVIRONMENT to something - like node - and run it someplace else - like on the web?)'); + +} else + +// Note that this includes Node.js workers when relevant (pthreads is enabled). +// Node.js workers are detected as a combination of ENVIRONMENT_IS_WORKER and +// ENVIRONMENT_IS_NODE. +if (ENVIRONMENT_IS_WEB || ENVIRONMENT_IS_WORKER) { + if (ENVIRONMENT_IS_WORKER) { // Check worker, not web, since window could be polyfilled + scriptDirectory = self.location.href; + } else if (typeof document != 'undefined' && document.currentScript) { // web + scriptDirectory = document.currentScript.src; + } + // blob urls look like blob:http://site.com/etc/etc and we cannot infer anything from them. + // otherwise, slice off the final part of the url to find the script directory. + // if scriptDirectory does not contain a slash, lastIndexOf will return -1, + // and scriptDirectory will correctly be replaced with an empty string. + // If scriptDirectory contains a query (starting with ?) or a fragment (starting with #), + // they are removed because they could contain a slash. + if (scriptDirectory.startsWith('blob:')) { + scriptDirectory = ''; + } else { + scriptDirectory = scriptDirectory.slice(0, scriptDirectory.replace(/[?#].*/, '').lastIndexOf('/')+1); + } + + if (!(typeof window == 'object' || typeof WorkerGlobalScope != 'undefined')) throw new Error('not compiled for this environment (did you build to HTML and try to run it not on the web, or set ENVIRONMENT to something - like node - and run it someplace else - like on the web?)'); + + { +// include: web_or_worker_shell_read.js +if (ENVIRONMENT_IS_WORKER) { + readBinary = (url) => { + var xhr = new XMLHttpRequest(); + xhr.open('GET', url, false); + xhr.responseType = 'arraybuffer'; + xhr.send(null); + return new Uint8Array(/** @type{!ArrayBuffer} */(xhr.response)); + }; + } + + readAsync = async (url) => { + // Fetch has some additional restrictions over XHR, like it can't be used on a file:// url. + // See https://github.com/github/fetch/pull/92#issuecomment-140665932 + // Cordova or Electron apps are typically loaded from a file:// url. + // So use XHR on webview if URL is a file URL. + if (isFileURI(url)) { + return new Promise((resolve, reject) => { + var xhr = new XMLHttpRequest(); + xhr.open('GET', url, true); + xhr.responseType = 'arraybuffer'; + xhr.onload = () => { + if (xhr.status == 200 || (xhr.status == 0 && xhr.response)) { // file URLs can return 0 + resolve(xhr.response); + return; + } + reject(xhr.status); + }; + xhr.onerror = reject; + xhr.send(null); + }); + } + var response = await fetch(url, { credentials: 'same-origin' }); + if (response.ok) { + return response.arrayBuffer(); + } + throw new Error(response.status + ' : ' + response.url); + }; +// end include: web_or_worker_shell_read.js + } +} else +{ + throw new Error('environment detection error'); +} + +var out = Module['print'] || console.log.bind(console); +var err = Module['printErr'] || console.error.bind(console); + +// Merge back in the overrides +Object.assign(Module, moduleOverrides); +// Free the object hierarchy contained in the overrides, this lets the GC +// reclaim data used. +moduleOverrides = null; +checkIncomingModuleAPI(); + +// Emit code to handle expected values on the Module object. This applies Module.x +// to the proper local x. This has two benefits: first, we only emit it if it is +// expected to arrive, and second, by using a local everywhere else that can be +// minified. + +if (Module['arguments']) arguments_ = Module['arguments'];legacyModuleProp('arguments', 'arguments_'); + +if (Module['thisProgram']) thisProgram = Module['thisProgram'];legacyModuleProp('thisProgram', 'thisProgram'); + +// perform assertions in shell.js after we set up out() and err(), as otherwise if an assertion fails it cannot print the message +// Assertions on removed incoming Module JS APIs. +assert(typeof Module['memoryInitializerPrefixURL'] == 'undefined', 'Module.memoryInitializerPrefixURL option was removed, use Module.locateFile instead'); +assert(typeof Module['pthreadMainPrefixURL'] == 'undefined', 'Module.pthreadMainPrefixURL option was removed, use Module.locateFile instead'); +assert(typeof Module['cdInitializerPrefixURL'] == 'undefined', 'Module.cdInitializerPrefixURL option was removed, use Module.locateFile instead'); +assert(typeof Module['filePackagePrefixURL'] == 'undefined', 'Module.filePackagePrefixURL option was removed, use Module.locateFile instead'); +assert(typeof Module['read'] == 'undefined', 'Module.read option was removed'); +assert(typeof Module['readAsync'] == 'undefined', 'Module.readAsync option was removed (modify readAsync in JS)'); +assert(typeof Module['readBinary'] == 'undefined', 'Module.readBinary option was removed (modify readBinary in JS)'); +assert(typeof Module['setWindowTitle'] == 'undefined', 'Module.setWindowTitle option was removed (modify emscripten_set_window_title in JS)'); +assert(typeof Module['TOTAL_MEMORY'] == 'undefined', 'Module.TOTAL_MEMORY has been renamed Module.INITIAL_MEMORY'); +legacyModuleProp('asm', 'wasmExports'); +legacyModuleProp('readAsync', 'readAsync'); +legacyModuleProp('readBinary', 'readBinary'); +legacyModuleProp('setWindowTitle', 'setWindowTitle'); +var IDBFS = 'IDBFS is no longer included by default; build with -lidbfs.js'; +var PROXYFS = 'PROXYFS is no longer included by default; build with -lproxyfs.js'; +var WORKERFS = 'WORKERFS is no longer included by default; build with -lworkerfs.js'; +var FETCHFS = 'FETCHFS is no longer included by default; build with -lfetchfs.js'; +var ICASEFS = 'ICASEFS is no longer included by default; build with -licasefs.js'; +var JSFILEFS = 'JSFILEFS is no longer included by default; build with -ljsfilefs.js'; +var OPFS = 'OPFS is no longer included by default; build with -lopfs.js'; + +var NODEFS = 'NODEFS is no longer included by default; build with -lnodefs.js'; + +assert(!ENVIRONMENT_IS_SHELL, 'shell environment detected but not enabled at build time. Add `shell` to `-sENVIRONMENT` to enable.'); + +// end include: shell.js + +// include: preamble.js +// === Preamble library stuff === + +// Documentation for the public APIs defined in this file must be updated in: +// site/source/docs/api_reference/preamble.js.rst +// A prebuilt local version of the documentation is available at: +// site/build/text/docs/api_reference/preamble.js.txt +// You can also build docs locally as HTML or other formats in site/ +// An online HTML version (which may be of a different version of Emscripten) +// is up at http://kripken.github.io/emscripten-site/docs/api_reference/preamble.js.html + +var wasmBinary = Module['wasmBinary'];legacyModuleProp('wasmBinary', 'wasmBinary'); + +if (typeof WebAssembly != 'object') { + err('no native wasm support detected'); +} + +// Wasm globals + +var wasmMemory; + +//======================================== +// Runtime essentials +//======================================== + +// whether we are quitting the application. no code should run after this. +// set in exit() and abort() +var ABORT = false; + +// set by exit() and abort(). Passed to 'onExit' handler. +// NOTE: This is also used as the process return code code in shell environments +// but only when noExitRuntime is false. +var EXITSTATUS; + +// In STRICT mode, we only define assert() when ASSERTIONS is set. i.e. we +// don't define it at all in release modes. This matches the behaviour of +// MINIMAL_RUNTIME. +// TODO(sbc): Make this the default even without STRICT enabled. +/** @type {function(*, string=)} */ +function assert(condition, text) { + if (!condition) { + abort('Assertion failed' + (text ? ': ' + text : '')); + } +} + +// We used to include malloc/free by default in the past. Show a helpful error in +// builds with assertions. +function _malloc() { + abort('malloc() called but not included in the build - add `_malloc` to EXPORTED_FUNCTIONS'); +} +function _free() { + // Show a helpful error since we used to include free by default in the past. + abort('free() called but not included in the build - add `_free` to EXPORTED_FUNCTIONS'); +} + +// Memory management + +var HEAP, +/** @type {!Int8Array} */ + HEAP8, +/** @type {!Uint8Array} */ + HEAPU8, +/** @type {!Int16Array} */ + HEAP16, +/** @type {!Uint16Array} */ + HEAPU16, +/** @type {!Int32Array} */ + HEAP32, +/** @type {!Uint32Array} */ + HEAPU32, +/** @type {!Float32Array} */ + HEAPF32, +/* BigInt64Array type is not correctly defined in closure +/** not-@type {!BigInt64Array} */ + HEAP64, +/* BigUint64Array type is not correctly defined in closure +/** not-t@type {!BigUint64Array} */ + HEAPU64, +/** @type {!Float64Array} */ + HEAPF64; + +var runtimeInitialized = false; + +/** + * Indicates whether filename is delivered via file protocol (as opposed to http/https) + * @noinline + */ +var isFileURI = (filename) => filename.startsWith('file://'); + +// include: runtime_shared.js +// include: runtime_stack_check.js +// Initializes the stack cookie. Called at the startup of main and at the startup of each thread in pthreads mode. +function writeStackCookie() { + var max = _emscripten_stack_get_end(); + assert((max & 3) == 0); + // If the stack ends at address zero we write our cookies 4 bytes into the + // stack. This prevents interference with SAFE_HEAP and ASAN which also + // monitor writes to address zero. + if (max == 0) { + max += 4; + } + // The stack grow downwards towards _emscripten_stack_get_end. + // We write cookies to the final two words in the stack and detect if they are + // ever overwritten. + HEAPU32[((max)>>2)] = 0x02135467; + HEAPU32[(((max)+(4))>>2)] = 0x89BACDFE; + // Also test the global address 0 for integrity. + HEAPU32[((0)>>2)] = 1668509029; +} + +function checkStackCookie() { + if (ABORT) return; + var max = _emscripten_stack_get_end(); + // See writeStackCookie(). + if (max == 0) { + max += 4; + } + var cookie1 = HEAPU32[((max)>>2)]; + var cookie2 = HEAPU32[(((max)+(4))>>2)]; + if (cookie1 != 0x02135467 || cookie2 != 0x89BACDFE) { + abort(`Stack overflow! Stack cookie has been overwritten at ${ptrToString(max)}, expected hex dwords 0x89BACDFE and 0x2135467, but received ${ptrToString(cookie2)} ${ptrToString(cookie1)}`); + } + // Also test the global address 0 for integrity. + if (HEAPU32[((0)>>2)] != 0x63736d65 /* 'emsc' */) { + abort('Runtime error: The application has corrupted its heap memory area (address zero)!'); + } +} +// end include: runtime_stack_check.js +// include: runtime_exceptions.js +// end include: runtime_exceptions.js +// include: runtime_debug.js +// Endianness check +(() => { + var h16 = new Int16Array(1); + var h8 = new Int8Array(h16.buffer); + h16[0] = 0x6373; + if (h8[0] !== 0x73 || h8[1] !== 0x63) throw 'Runtime error: expected the system to be little-endian! (Run with -sSUPPORT_BIG_ENDIAN to bypass)'; +})(); + +if (Module['ENVIRONMENT']) { + throw new Error('Module.ENVIRONMENT has been deprecated. To force the environment, use the ENVIRONMENT compile-time option (for example, -sENVIRONMENT=web or -sENVIRONMENT=node)'); +} + +function legacyModuleProp(prop, newName, incoming=true) { + if (!Object.getOwnPropertyDescriptor(Module, prop)) { + Object.defineProperty(Module, prop, { + configurable: true, + get() { + let extra = incoming ? ' (the initial value can be provided on Module, but after startup the value is only looked for on a local variable of that name)' : ''; + abort(`\`Module.${prop}\` has been replaced by \`${newName}\`` + extra); + + } + }); + } +} + +function consumedModuleProp(prop) { + if (!Object.getOwnPropertyDescriptor(Module, prop)) { + Object.defineProperty(Module, prop, { + configurable: true, + set() { + abort(`Attempt to set \`Module.${prop}\` after it has already been processed. This can happen, for example, when code is injected via '--post-js' rather than '--pre-js'`); + + } + }); + } +} + +function ignoredModuleProp(prop) { + if (Object.getOwnPropertyDescriptor(Module, prop)) { + abort(`\`Module.${prop}\` was supplied but \`${prop}\` not included in INCOMING_MODULE_JS_API`); + } +} + +// forcing the filesystem exports a few things by default +function isExportedByForceFilesystem(name) { + return name === 'FS_createPath' || + name === 'FS_createDataFile' || + name === 'FS_createPreloadedFile' || + name === 'FS_unlink' || + name === 'addRunDependency' || + // The old FS has some functionality that WasmFS lacks. + name === 'FS_createLazyFile' || + name === 'FS_createDevice' || + name === 'removeRunDependency'; +} + +/** + * Intercept access to a global symbol. This enables us to give informative + * warnings/errors when folks attempt to use symbols they did not include in + * their build, or no symbols that no longer exist. + */ +function hookGlobalSymbolAccess(sym, func) { + if (typeof globalThis != 'undefined' && !Object.getOwnPropertyDescriptor(globalThis, sym)) { + Object.defineProperty(globalThis, sym, { + configurable: true, + get() { + func(); + return undefined; + } + }); + } +} + +function missingGlobal(sym, msg) { + hookGlobalSymbolAccess(sym, () => { + warnOnce(`\`${sym}\` is not longer defined by emscripten. ${msg}`); + }); +} + +missingGlobal('buffer', 'Please use HEAP8.buffer or wasmMemory.buffer'); +missingGlobal('asm', 'Please use wasmExports instead'); + +function missingLibrarySymbol(sym) { + hookGlobalSymbolAccess(sym, () => { + // Can't `abort()` here because it would break code that does runtime + // checks. e.g. `if (typeof SDL === 'undefined')`. + var msg = `\`${sym}\` is a library symbol and not included by default; add it to your library.js __deps or to DEFAULT_LIBRARY_FUNCS_TO_INCLUDE on the command line`; + // DEFAULT_LIBRARY_FUNCS_TO_INCLUDE requires the name as it appears in + // library.js, which means $name for a JS name with no prefix, or name + // for a JS name like _name. + var librarySymbol = sym; + if (!librarySymbol.startsWith('_')) { + librarySymbol = '$' + sym; + } + msg += ` (e.g. -sDEFAULT_LIBRARY_FUNCS_TO_INCLUDE='${librarySymbol}')`; + if (isExportedByForceFilesystem(sym)) { + msg += '. Alternatively, forcing filesystem support (-sFORCE_FILESYSTEM) can export this for you'; + } + warnOnce(msg); + }); + + // Any symbol that is not included from the JS library is also (by definition) + // not exported on the Module object. + unexportedRuntimeSymbol(sym); +} + +function unexportedRuntimeSymbol(sym) { + if (!Object.getOwnPropertyDescriptor(Module, sym)) { + Object.defineProperty(Module, sym, { + configurable: true, + get() { + var msg = `'${sym}' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the Emscripten FAQ)`; + if (isExportedByForceFilesystem(sym)) { + msg += '. Alternatively, forcing filesystem support (-sFORCE_FILESYSTEM) can export this for you'; + } + abort(msg); + } + }); + } +} + +var runtimeDebug = true; // Switch to false at runtime to disable logging at the right times + +// Used by XXXXX_DEBUG settings to output debug messages. +function dbg(...args) { + if (!runtimeDebug && typeof runtimeDebug != 'undefined') return; + // TODO(sbc): Make this configurable somehow. Its not always convenient for + // logging to show up as warnings. + console.warn(...args); +} +// end include: runtime_debug.js +// include: memoryprofiler.js +// end include: memoryprofiler.js + + +function updateMemoryViews() { + var b = wasmMemory.buffer; + Module['HEAP8'] = HEAP8 = new Int8Array(b); + Module['HEAP16'] = HEAP16 = new Int16Array(b); + Module['HEAPU8'] = HEAPU8 = new Uint8Array(b); + Module['HEAPU16'] = HEAPU16 = new Uint16Array(b); + Module['HEAP32'] = HEAP32 = new Int32Array(b); + Module['HEAPU32'] = HEAPU32 = new Uint32Array(b); + Module['HEAPF32'] = HEAPF32 = new Float32Array(b); + Module['HEAPF64'] = HEAPF64 = new Float64Array(b); + Module['HEAP64'] = HEAP64 = new BigInt64Array(b); + Module['HEAPU64'] = HEAPU64 = new BigUint64Array(b); +} + +// end include: runtime_shared.js +assert(!Module['STACK_SIZE'], 'STACK_SIZE can no longer be set at runtime. Use -sSTACK_SIZE at link time') + +assert(typeof Int32Array != 'undefined' && typeof Float64Array !== 'undefined' && Int32Array.prototype.subarray != undefined && Int32Array.prototype.set != undefined, + 'JS engine does not provide full typed array support'); + +// If memory is defined in wasm, the user can't provide it, or set INITIAL_MEMORY +assert(!Module['wasmMemory'], 'Use of `wasmMemory` detected. Use -sIMPORTED_MEMORY to define wasmMemory externally'); +assert(!Module['INITIAL_MEMORY'], 'Detected runtime INITIAL_MEMORY setting. Use -sIMPORTED_MEMORY to define wasmMemory dynamically'); + +function preRun() { + if (Module['preRun']) { + if (typeof Module['preRun'] == 'function') Module['preRun'] = [Module['preRun']]; + while (Module['preRun'].length) { + addOnPreRun(Module['preRun'].shift()); + } + } + consumedModuleProp('preRun'); + callRuntimeCallbacks(onPreRuns); +} + +function initRuntime() { + assert(!runtimeInitialized); + runtimeInitialized = true; + + checkStackCookie(); + + if (!Module['noFSInit'] && !FS.initialized) FS.init(); +TTY.init(); + + wasmExports['__wasm_call_ctors'](); + + FS.ignorePermissions = false; +} + +function preMain() { + checkStackCookie(); + +} + +function postRun() { + checkStackCookie(); + + if (Module['postRun']) { + if (typeof Module['postRun'] == 'function') Module['postRun'] = [Module['postRun']]; + while (Module['postRun'].length) { + addOnPostRun(Module['postRun'].shift()); + } + } + consumedModuleProp('postRun'); + + callRuntimeCallbacks(onPostRuns); +} + +// A counter of dependencies for calling run(). If we need to +// do asynchronous work before running, increment this and +// decrement it. Incrementing must happen in a place like +// Module.preRun (used by emcc to add file preloading). +// Note that you can add dependencies in preRun, even though +// it happens right before run - run will be postponed until +// the dependencies are met. +var runDependencies = 0; +var dependenciesFulfilled = null; // overridden to take different actions when all run dependencies are fulfilled +var runDependencyTracking = {}; +var runDependencyWatcher = null; + +function getUniqueRunDependency(id) { + var orig = id; + while (1) { + if (!runDependencyTracking[id]) return id; + id = orig + Math.random(); + } +} + +function addRunDependency(id) { + runDependencies++; + + Module['monitorRunDependencies']?.(runDependencies); + + if (id) { + assert(!runDependencyTracking[id]); + runDependencyTracking[id] = 1; + if (runDependencyWatcher === null && typeof setInterval != 'undefined') { + // Check for missing dependencies every few seconds + runDependencyWatcher = setInterval(() => { + if (ABORT) { + clearInterval(runDependencyWatcher); + runDependencyWatcher = null; + return; + } + var shown = false; + for (var dep in runDependencyTracking) { + if (!shown) { + shown = true; + err('still waiting on run dependencies:'); + } + err(`dependency: ${dep}`); + } + if (shown) { + err('(end of list)'); + } + }, 10000); + } + } else { + err('warning: run dependency added without ID'); + } +} + +function removeRunDependency(id) { + runDependencies--; + + Module['monitorRunDependencies']?.(runDependencies); + + if (id) { + assert(runDependencyTracking[id]); + delete runDependencyTracking[id]; + } else { + err('warning: run dependency removed without ID'); + } + if (runDependencies == 0) { + if (runDependencyWatcher !== null) { + clearInterval(runDependencyWatcher); + runDependencyWatcher = null; + } + if (dependenciesFulfilled) { + var callback = dependenciesFulfilled; + dependenciesFulfilled = null; + callback(); // can add another dependenciesFulfilled + } + } +} + +/** @param {string|number=} what */ +function abort(what) { + Module['onAbort']?.(what); + + what = 'Aborted(' + what + ')'; + // TODO(sbc): Should we remove printing and leave it up to whoever + // catches the exception? + err(what); + + ABORT = true; + + // Use a wasm runtime error, because a JS error might be seen as a foreign + // exception, which means we'd run destructors on it. We need the error to + // simply make the program stop. + // FIXME This approach does not work in Wasm EH because it currently does not assume + // all RuntimeErrors are from traps; it decides whether a RuntimeError is from + // a trap or not based on a hidden field within the object. So at the moment + // we don't have a way of throwing a wasm trap from JS. TODO Make a JS API that + // allows this in the wasm spec. + + // Suppress closure compiler warning here. Closure compiler's builtin extern + // definition for WebAssembly.RuntimeError claims it takes no arguments even + // though it can. + // TODO(https://github.com/google/closure-compiler/pull/3913): Remove if/when upstream closure gets fixed. + /** @suppress {checkTypes} */ + var e = new WebAssembly.RuntimeError(what); + + // Throw the error whether or not MODULARIZE is set because abort is used + // in code paths apart from instantiation where an exception is expected + // to be thrown when abort is called. + throw e; +} + +function createExportWrapper(name, nargs) { + return (...args) => { + assert(runtimeInitialized, `native function \`${name}\` called before runtime initialization`); + var f = wasmExports[name]; + assert(f, `exported native function \`${name}\` not found`); + // Only assert for too many arguments. Too few can be valid since the missing arguments will be zero filled. + assert(args.length <= nargs, `native function \`${name}\` called with ${args.length} args but expects ${nargs}`); + return f(...args); + }; +} + +var wasmBinaryFile; + +function findWasmBinary() { + return locateFile('in-memory.wasm'); +} + +function getBinarySync(file) { + if (file == wasmBinaryFile && wasmBinary) { + return new Uint8Array(wasmBinary); + } + if (readBinary) { + return readBinary(file); + } + throw 'both async and sync fetching of the wasm failed'; +} + +async function getWasmBinary(binaryFile) { + // If we don't have the binary yet, load it asynchronously using readAsync. + if (!wasmBinary) { + // Fetch the binary using readAsync + try { + var response = await readAsync(binaryFile); + return new Uint8Array(response); + } catch { + // Fall back to getBinarySync below; + } + } + + // Otherwise, getBinarySync should be able to get it synchronously + return getBinarySync(binaryFile); +} + +async function instantiateArrayBuffer(binaryFile, imports) { + try { + var binary = await getWasmBinary(binaryFile); + var instance = await WebAssembly.instantiate(binary, imports); + return instance; + } catch (reason) { + err(`failed to asynchronously prepare wasm: ${reason}`); + + // Warn on some common problems. + if (isFileURI(wasmBinaryFile)) { + err(`warning: Loading from a file URI (${wasmBinaryFile}) is not supported in most browsers. See https://emscripten.org/docs/getting_started/FAQ.html#how-do-i-run-a-local-webserver-for-testing-why-does-my-program-stall-in-downloading-or-preparing`); + } + abort(reason); + } +} + +async function instantiateAsync(binary, binaryFile, imports) { + if (!binary && typeof WebAssembly.instantiateStreaming == 'function' + // Don't use streaming for file:// delivered objects in a webview, fetch them synchronously. + && !isFileURI(binaryFile) + // Avoid instantiateStreaming() on Node.js environment for now, as while + // Node.js v18.1.0 implements it, it does not have a full fetch() + // implementation yet. + // + // Reference: + // https://github.com/emscripten-core/emscripten/pull/16917 + && !ENVIRONMENT_IS_NODE + ) { + try { + var response = fetch(binaryFile, { credentials: 'same-origin' }); + var instantiationResult = await WebAssembly.instantiateStreaming(response, imports); + return instantiationResult; + } catch (reason) { + // We expect the most common failure cause to be a bad MIME type for the binary, + // in which case falling back to ArrayBuffer instantiation should work. + err(`wasm streaming compile failed: ${reason}`); + err('falling back to ArrayBuffer instantiation'); + // fall back of instantiateArrayBuffer below + }; + } + return instantiateArrayBuffer(binaryFile, imports); +} + +function getWasmImports() { + // prepare imports + return { + 'env': wasmImports, + 'wasi_snapshot_preview1': wasmImports, + } +} + +// Create the wasm instance. +// Receives the wasm imports, returns the exports. +async function createWasm() { + // Load the wasm module and create an instance of using native support in the JS engine. + // handle a generated wasm instance, receiving its exports and + // performing other necessary setup + /** @param {WebAssembly.Module=} module*/ + function receiveInstance(instance, module) { + wasmExports = instance.exports; + + + + wasmMemory = wasmExports['memory']; + + assert(wasmMemory, 'memory not found in wasm exports'); + updateMemoryViews(); + + removeRunDependency('wasm-instantiate'); + return wasmExports; + } + // wait for the pthread pool (if any) + addRunDependency('wasm-instantiate'); + + // Prefer streaming instantiation if available. + // Async compilation can be confusing when an error on the page overwrites Module + // (for example, if the order of elements is wrong, and the one defining Module is + // later), so we save Module and check it later. + var trueModule = Module; + function receiveInstantiationResult(result) { + // 'result' is a ResultObject object which has both the module and instance. + // receiveInstance() will swap in the exports (to Module.asm) so they can be called + assert(Module === trueModule, 'the Module object should not be replaced during async compilation - perhaps the order of HTML elements is wrong?'); + trueModule = null; + // TODO: Due to Closure regression https://github.com/google/closure-compiler/issues/3193, the above line no longer optimizes out down to the following line. + // When the regression is fixed, can restore the above PTHREADS-enabled path. + return receiveInstance(result['instance']); + } + + var info = getWasmImports(); + + // User shell pages can write their own Module.instantiateWasm = function(imports, successCallback) callback + // to manually instantiate the Wasm module themselves. This allows pages to + // run the instantiation parallel to any other async startup actions they are + // performing. + // Also pthreads and wasm workers initialize the wasm instance through this + // path. + if (Module['instantiateWasm']) { + return new Promise((resolve, reject) => { + try { + Module['instantiateWasm'](info, (mod, inst) => { + receiveInstance(mod, inst); + resolve(mod.exports); + }); + } catch(e) { + err(`Module.instantiateWasm callback failed with error: ${e}`); + reject(e); + } + }); + } + + wasmBinaryFile ??= findWasmBinary(); + var result = await instantiateAsync(wasmBinary, wasmBinaryFile, info); + var exports = receiveInstantiationResult(result); + return exports; +} + +// end include: preamble.js + +// Begin JS library code + + + class ExitStatus { + name = 'ExitStatus'; + constructor(status) { + this.message = `Program terminated with exit(${status})`; + this.status = status; + } + } + + var callRuntimeCallbacks = (callbacks) => { + while (callbacks.length > 0) { + // Pass the module as the first argument. + callbacks.shift()(Module); + } + }; + var onPostRuns = []; + var addOnPostRun = (cb) => onPostRuns.unshift(cb); + + var onPreRuns = []; + var addOnPreRun = (cb) => onPreRuns.unshift(cb); + + + + /** + * @param {number} ptr + * @param {string} type + */ + function getValue(ptr, type = 'i8') { + if (type.endsWith('*')) type = '*'; + switch (type) { + case 'i1': return HEAP8[ptr]; + case 'i8': return HEAP8[ptr]; + case 'i16': return HEAP16[((ptr)>>1)]; + case 'i32': return HEAP32[((ptr)>>2)]; + case 'i64': return HEAP64[((ptr)>>3)]; + case 'float': return HEAPF32[((ptr)>>2)]; + case 'double': return HEAPF64[((ptr)>>3)]; + case '*': return HEAPU32[((ptr)>>2)]; + default: abort(`invalid type for getValue: ${type}`); + } + } + + var noExitRuntime = Module['noExitRuntime'] || true; + + var ptrToString = (ptr) => { + assert(typeof ptr === 'number'); + // With CAN_ADDRESS_2GB or MEMORY64, pointers are already unsigned. + ptr >>>= 0; + return '0x' + ptr.toString(16).padStart(8, '0'); + }; + + + /** + * @param {number} ptr + * @param {number} value + * @param {string} type + */ + function setValue(ptr, value, type = 'i8') { + if (type.endsWith('*')) type = '*'; + switch (type) { + case 'i1': HEAP8[ptr] = value; break; + case 'i8': HEAP8[ptr] = value; break; + case 'i16': HEAP16[((ptr)>>1)] = value; break; + case 'i32': HEAP32[((ptr)>>2)] = value; break; + case 'i64': HEAP64[((ptr)>>3)] = BigInt(value); break; + case 'float': HEAPF32[((ptr)>>2)] = value; break; + case 'double': HEAPF64[((ptr)>>3)] = value; break; + case '*': HEAPU32[((ptr)>>2)] = value; break; + default: abort(`invalid type for setValue: ${type}`); + } + } + + var stackRestore = (val) => __emscripten_stack_restore(val); + + var stackSave = () => _emscripten_stack_get_current(); + + var warnOnce = (text) => { + warnOnce.shown ||= {}; + if (!warnOnce.shown[text]) { + warnOnce.shown[text] = 1; + if (ENVIRONMENT_IS_NODE) text = 'warning: ' + text; + err(text); + } + }; + + /** @suppress {duplicate } */ + var syscallGetVarargI = () => { + assert(SYSCALLS.varargs != undefined); + // the `+` prepended here is necessary to convince the JSCompiler that varargs is indeed a number. + var ret = HEAP32[((+SYSCALLS.varargs)>>2)]; + SYSCALLS.varargs += 4; + return ret; + }; + var syscallGetVarargP = syscallGetVarargI; + + + var PATH = { + isAbs:(path) => path.charAt(0) === '/', + splitPath:(filename) => { + var splitPathRe = /^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/; + return splitPathRe.exec(filename).slice(1); + }, + normalizeArray:(parts, allowAboveRoot) => { + // if the path tries to go above the root, `up` ends up > 0 + var up = 0; + for (var i = parts.length - 1; i >= 0; i--) { + var last = parts[i]; + if (last === '.') { + parts.splice(i, 1); + } else if (last === '..') { + parts.splice(i, 1); + up++; + } else if (up) { + parts.splice(i, 1); + up--; + } + } + // if the path is allowed to go above the root, restore leading ..s + if (allowAboveRoot) { + for (; up; up--) { + parts.unshift('..'); + } + } + return parts; + }, + normalize:(path) => { + var isAbsolute = PATH.isAbs(path), + trailingSlash = path.slice(-1) === '/'; + // Normalize the path + path = PATH.normalizeArray(path.split('/').filter((p) => !!p), !isAbsolute).join('/'); + if (!path && !isAbsolute) { + path = '.'; + } + if (path && trailingSlash) { + path += '/'; + } + return (isAbsolute ? '/' : '') + path; + }, + dirname:(path) => { + var result = PATH.splitPath(path), + root = result[0], + dir = result[1]; + if (!root && !dir) { + // No dirname whatsoever + return '.'; + } + if (dir) { + // It has a dirname, strip trailing slash + dir = dir.slice(0, -1); + } + return root + dir; + }, + basename:(path) => path && path.match(/([^\/]+|\/)\/*$/)[1], + join:(...paths) => PATH.normalize(paths.join('/')), + join2:(l, r) => PATH.normalize(l + '/' + r), + }; + + var initRandomFill = () => { + // This block is not needed on v19+ since crypto.getRandomValues is builtin + if (ENVIRONMENT_IS_NODE) { + var nodeCrypto = require('crypto'); + return (view) => nodeCrypto.randomFillSync(view); + } + + return (view) => crypto.getRandomValues(view); + }; + var randomFill = (view) => { + // Lazily init on the first invocation. + (randomFill = initRandomFill())(view); + }; + + + + var PATH_FS = { + resolve:(...args) => { + var resolvedPath = '', + resolvedAbsolute = false; + for (var i = args.length - 1; i >= -1 && !resolvedAbsolute; i--) { + var path = (i >= 0) ? args[i] : FS.cwd(); + // Skip empty and invalid entries + if (typeof path != 'string') { + throw new TypeError('Arguments to path.resolve must be strings'); + } else if (!path) { + return ''; // an invalid portion invalidates the whole thing + } + resolvedPath = path + '/' + resolvedPath; + resolvedAbsolute = PATH.isAbs(path); + } + // At this point the path should be resolved to a full absolute path, but + // handle relative paths to be safe (might happen when process.cwd() fails) + resolvedPath = PATH.normalizeArray(resolvedPath.split('/').filter((p) => !!p), !resolvedAbsolute).join('/'); + return ((resolvedAbsolute ? '/' : '') + resolvedPath) || '.'; + }, + relative:(from, to) => { + from = PATH_FS.resolve(from).slice(1); + to = PATH_FS.resolve(to).slice(1); + function trim(arr) { + var start = 0; + for (; start < arr.length; start++) { + if (arr[start] !== '') break; + } + var end = arr.length - 1; + for (; end >= 0; end--) { + if (arr[end] !== '') break; + } + if (start > end) return []; + return arr.slice(start, end - start + 1); + } + var fromParts = trim(from.split('/')); + var toParts = trim(to.split('/')); + var length = Math.min(fromParts.length, toParts.length); + var samePartsLength = length; + for (var i = 0; i < length; i++) { + if (fromParts[i] !== toParts[i]) { + samePartsLength = i; + break; + } + } + var outputParts = []; + for (var i = samePartsLength; i < fromParts.length; i++) { + outputParts.push('..'); + } + outputParts = outputParts.concat(toParts.slice(samePartsLength)); + return outputParts.join('/'); + }, + }; + + + var UTF8Decoder = typeof TextDecoder != 'undefined' ? new TextDecoder() : undefined; + + /** + * Given a pointer 'idx' to a null-terminated UTF8-encoded string in the given + * array that contains uint8 values, returns a copy of that string as a + * Javascript String object. + * heapOrArray is either a regular array, or a JavaScript typed array view. + * @param {number=} idx + * @param {number=} maxBytesToRead + * @return {string} + */ + var UTF8ArrayToString = (heapOrArray, idx = 0, maxBytesToRead = NaN) => { + var endIdx = idx + maxBytesToRead; + var endPtr = idx; + // TextDecoder needs to know the byte length in advance, it doesn't stop on + // null terminator by itself. Also, use the length info to avoid running tiny + // strings through TextDecoder, since .subarray() allocates garbage. + // (As a tiny code save trick, compare endPtr against endIdx using a negation, + // so that undefined/NaN means Infinity) + while (heapOrArray[endPtr] && !(endPtr >= endIdx)) ++endPtr; + + if (endPtr - idx > 16 && heapOrArray.buffer && UTF8Decoder) { + return UTF8Decoder.decode(heapOrArray.subarray(idx, endPtr)); + } + var str = ''; + // If building with TextDecoder, we have already computed the string length + // above, so test loop end condition against that + while (idx < endPtr) { + // For UTF8 byte structure, see: + // http://en.wikipedia.org/wiki/UTF-8#Description + // https://www.ietf.org/rfc/rfc2279.txt + // https://tools.ietf.org/html/rfc3629 + var u0 = heapOrArray[idx++]; + if (!(u0 & 0x80)) { str += String.fromCharCode(u0); continue; } + var u1 = heapOrArray[idx++] & 63; + if ((u0 & 0xE0) == 0xC0) { str += String.fromCharCode(((u0 & 31) << 6) | u1); continue; } + var u2 = heapOrArray[idx++] & 63; + if ((u0 & 0xF0) == 0xE0) { + u0 = ((u0 & 15) << 12) | (u1 << 6) | u2; + } else { + if ((u0 & 0xF8) != 0xF0) warnOnce('Invalid UTF-8 leading byte ' + ptrToString(u0) + ' encountered when deserializing a UTF-8 string in wasm memory to a JS string!'); + u0 = ((u0 & 7) << 18) | (u1 << 12) | (u2 << 6) | (heapOrArray[idx++] & 63); + } + + if (u0 < 0x10000) { + str += String.fromCharCode(u0); + } else { + var ch = u0 - 0x10000; + str += String.fromCharCode(0xD800 | (ch >> 10), 0xDC00 | (ch & 0x3FF)); + } + } + return str; + }; + + var FS_stdin_getChar_buffer = []; + + var lengthBytesUTF8 = (str) => { + var len = 0; + for (var i = 0; i < str.length; ++i) { + // Gotcha: charCodeAt returns a 16-bit word that is a UTF-16 encoded code + // unit, not a Unicode code point of the character! So decode + // UTF16->UTF32->UTF8. + // See http://unicode.org/faq/utf_bom.html#utf16-3 + var c = str.charCodeAt(i); // possibly a lead surrogate + if (c <= 0x7F) { + len++; + } else if (c <= 0x7FF) { + len += 2; + } else if (c >= 0xD800 && c <= 0xDFFF) { + len += 4; ++i; + } else { + len += 3; + } + } + return len; + }; + + var stringToUTF8Array = (str, heap, outIdx, maxBytesToWrite) => { + assert(typeof str === 'string', `stringToUTF8Array expects a string (got ${typeof str})`); + // Parameter maxBytesToWrite is not optional. Negative values, 0, null, + // undefined and false each don't write out any bytes. + if (!(maxBytesToWrite > 0)) + return 0; + + var startIdx = outIdx; + var endIdx = outIdx + maxBytesToWrite - 1; // -1 for string null terminator. + for (var i = 0; i < str.length; ++i) { + // Gotcha: charCodeAt returns a 16-bit word that is a UTF-16 encoded code + // unit, not a Unicode code point of the character! So decode + // UTF16->UTF32->UTF8. + // See http://unicode.org/faq/utf_bom.html#utf16-3 + // For UTF8 byte structure, see http://en.wikipedia.org/wiki/UTF-8#Description + // and https://www.ietf.org/rfc/rfc2279.txt + // and https://tools.ietf.org/html/rfc3629 + var u = str.charCodeAt(i); // possibly a lead surrogate + if (u >= 0xD800 && u <= 0xDFFF) { + var u1 = str.charCodeAt(++i); + u = 0x10000 + ((u & 0x3FF) << 10) | (u1 & 0x3FF); + } + if (u <= 0x7F) { + if (outIdx >= endIdx) break; + heap[outIdx++] = u; + } else if (u <= 0x7FF) { + if (outIdx + 1 >= endIdx) break; + heap[outIdx++] = 0xC0 | (u >> 6); + heap[outIdx++] = 0x80 | (u & 63); + } else if (u <= 0xFFFF) { + if (outIdx + 2 >= endIdx) break; + heap[outIdx++] = 0xE0 | (u >> 12); + heap[outIdx++] = 0x80 | ((u >> 6) & 63); + heap[outIdx++] = 0x80 | (u & 63); + } else { + if (outIdx + 3 >= endIdx) break; + if (u > 0x10FFFF) warnOnce('Invalid Unicode code point ' + ptrToString(u) + ' encountered when serializing a JS string to a UTF-8 string in wasm memory! (Valid unicode code points should be in range 0-0x10FFFF).'); + heap[outIdx++] = 0xF0 | (u >> 18); + heap[outIdx++] = 0x80 | ((u >> 12) & 63); + heap[outIdx++] = 0x80 | ((u >> 6) & 63); + heap[outIdx++] = 0x80 | (u & 63); + } + } + // Null-terminate the pointer to the buffer. + heap[outIdx] = 0; + return outIdx - startIdx; + }; + /** @type {function(string, boolean=, number=)} */ + var intArrayFromString = (stringy, dontAddNull, length) => { + var len = length > 0 ? length : lengthBytesUTF8(stringy)+1; + var u8array = new Array(len); + var numBytesWritten = stringToUTF8Array(stringy, u8array, 0, u8array.length); + if (dontAddNull) u8array.length = numBytesWritten; + return u8array; + }; + var FS_stdin_getChar = () => { + if (!FS_stdin_getChar_buffer.length) { + var result = null; + if (ENVIRONMENT_IS_NODE) { + // we will read data by chunks of BUFSIZE + var BUFSIZE = 256; + var buf = Buffer.alloc(BUFSIZE); + var bytesRead = 0; + + // For some reason we must suppress a closure warning here, even though + // fd definitely exists on process.stdin, and is even the proper way to + // get the fd of stdin, + // https://github.com/nodejs/help/issues/2136#issuecomment-523649904 + // This started to happen after moving this logic out of library_tty.js, + // so it is related to the surrounding code in some unclear manner. + /** @suppress {missingProperties} */ + var fd = process.stdin.fd; + + try { + bytesRead = fs.readSync(fd, buf, 0, BUFSIZE); + } catch(e) { + // Cross-platform differences: on Windows, reading EOF throws an + // exception, but on other OSes, reading EOF returns 0. Uniformize + // behavior by treating the EOF exception to return 0. + if (e.toString().includes('EOF')) bytesRead = 0; + else throw e; + } + + if (bytesRead > 0) { + result = buf.slice(0, bytesRead).toString('utf-8'); + } + } else + if (typeof window != 'undefined' && + typeof window.prompt == 'function') { + // Browser. + result = window.prompt('Input: '); // returns null on cancel + if (result !== null) { + result += '\n'; + } + } else + {} + if (!result) { + return null; + } + FS_stdin_getChar_buffer = intArrayFromString(result, true); + } + return FS_stdin_getChar_buffer.shift(); + }; + var TTY = { + ttys:[], + init() { + // https://github.com/emscripten-core/emscripten/pull/1555 + // if (ENVIRONMENT_IS_NODE) { + // // currently, FS.init does not distinguish if process.stdin is a file or TTY + // // device, it always assumes it's a TTY device. because of this, we're forcing + // // process.stdin to UTF8 encoding to at least make stdin reading compatible + // // with text files until FS.init can be refactored. + // process.stdin.setEncoding('utf8'); + // } + }, + shutdown() { + // https://github.com/emscripten-core/emscripten/pull/1555 + // if (ENVIRONMENT_IS_NODE) { + // // inolen: any idea as to why node -e 'process.stdin.read()' wouldn't exit immediately (with process.stdin being a tty)? + // // isaacs: because now it's reading from the stream, you've expressed interest in it, so that read() kicks off a _read() which creates a ReadReq operation + // // inolen: I thought read() in that case was a synchronous operation that just grabbed some amount of buffered data if it exists? + // // isaacs: it is. but it also triggers a _read() call, which calls readStart() on the handle + // // isaacs: do process.stdin.pause() and i'd think it'd probably close the pending call + // process.stdin.pause(); + // } + }, + register(dev, ops) { + TTY.ttys[dev] = { input: [], output: [], ops: ops }; + FS.registerDevice(dev, TTY.stream_ops); + }, + stream_ops:{ + open(stream) { + var tty = TTY.ttys[stream.node.rdev]; + if (!tty) { + throw new FS.ErrnoError(43); + } + stream.tty = tty; + stream.seekable = false; + }, + close(stream) { + // flush any pending line data + stream.tty.ops.fsync(stream.tty); + }, + fsync(stream) { + stream.tty.ops.fsync(stream.tty); + }, + read(stream, buffer, offset, length, pos /* ignored */) { + if (!stream.tty || !stream.tty.ops.get_char) { + throw new FS.ErrnoError(60); + } + var bytesRead = 0; + for (var i = 0; i < length; i++) { + var result; + try { + result = stream.tty.ops.get_char(stream.tty); + } catch (e) { + throw new FS.ErrnoError(29); + } + if (result === undefined && bytesRead === 0) { + throw new FS.ErrnoError(6); + } + if (result === null || result === undefined) break; + bytesRead++; + buffer[offset+i] = result; + } + if (bytesRead) { + stream.node.atime = Date.now(); + } + return bytesRead; + }, + write(stream, buffer, offset, length, pos) { + if (!stream.tty || !stream.tty.ops.put_char) { + throw new FS.ErrnoError(60); + } + try { + for (var i = 0; i < length; i++) { + stream.tty.ops.put_char(stream.tty, buffer[offset+i]); + } + } catch (e) { + throw new FS.ErrnoError(29); + } + if (length) { + stream.node.mtime = stream.node.ctime = Date.now(); + } + return i; + }, + }, + default_tty_ops:{ + get_char(tty) { + return FS_stdin_getChar(); + }, + put_char(tty, val) { + if (val === null || val === 10) { + out(UTF8ArrayToString(tty.output)); + tty.output = []; + } else { + if (val != 0) tty.output.push(val); // val == 0 would cut text output off in the middle. + } + }, + fsync(tty) { + if (tty.output?.length > 0) { + out(UTF8ArrayToString(tty.output)); + tty.output = []; + } + }, + ioctl_tcgets(tty) { + // typical setting + return { + c_iflag: 25856, + c_oflag: 5, + c_cflag: 191, + c_lflag: 35387, + c_cc: [ + 0x03, 0x1c, 0x7f, 0x15, 0x04, 0x00, 0x01, 0x00, 0x11, 0x13, 0x1a, 0x00, + 0x12, 0x0f, 0x17, 0x16, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + ] + }; + }, + ioctl_tcsets(tty, optional_actions, data) { + // currently just ignore + return 0; + }, + ioctl_tiocgwinsz(tty) { + return [24, 80]; + }, + }, + default_tty1_ops:{ + put_char(tty, val) { + if (val === null || val === 10) { + err(UTF8ArrayToString(tty.output)); + tty.output = []; + } else { + if (val != 0) tty.output.push(val); + } + }, + fsync(tty) { + if (tty.output?.length > 0) { + err(UTF8ArrayToString(tty.output)); + tty.output = []; + } + }, + }, + }; + + + var mmapAlloc = (size) => { + abort('internal error: mmapAlloc called but `emscripten_builtin_memalign` native symbol not exported'); + }; + var MEMFS = { + ops_table:null, + mount(mount) { + return MEMFS.createNode(null, '/', 16895, 0); + }, + createNode(parent, name, mode, dev) { + if (FS.isBlkdev(mode) || FS.isFIFO(mode)) { + // no supported + throw new FS.ErrnoError(63); + } + MEMFS.ops_table ||= { + dir: { + node: { + getattr: MEMFS.node_ops.getattr, + setattr: MEMFS.node_ops.setattr, + lookup: MEMFS.node_ops.lookup, + mknod: MEMFS.node_ops.mknod, + rename: MEMFS.node_ops.rename, + unlink: MEMFS.node_ops.unlink, + rmdir: MEMFS.node_ops.rmdir, + readdir: MEMFS.node_ops.readdir, + symlink: MEMFS.node_ops.symlink + }, + stream: { + llseek: MEMFS.stream_ops.llseek + } + }, + file: { + node: { + getattr: MEMFS.node_ops.getattr, + setattr: MEMFS.node_ops.setattr + }, + stream: { + llseek: MEMFS.stream_ops.llseek, + read: MEMFS.stream_ops.read, + write: MEMFS.stream_ops.write, + mmap: MEMFS.stream_ops.mmap, + msync: MEMFS.stream_ops.msync + } + }, + link: { + node: { + getattr: MEMFS.node_ops.getattr, + setattr: MEMFS.node_ops.setattr, + readlink: MEMFS.node_ops.readlink + }, + stream: {} + }, + chrdev: { + node: { + getattr: MEMFS.node_ops.getattr, + setattr: MEMFS.node_ops.setattr + }, + stream: FS.chrdev_stream_ops + } + }; + var node = FS.createNode(parent, name, mode, dev); + if (FS.isDir(node.mode)) { + node.node_ops = MEMFS.ops_table.dir.node; + node.stream_ops = MEMFS.ops_table.dir.stream; + node.contents = {}; + } else if (FS.isFile(node.mode)) { + node.node_ops = MEMFS.ops_table.file.node; + node.stream_ops = MEMFS.ops_table.file.stream; + node.usedBytes = 0; // The actual number of bytes used in the typed array, as opposed to contents.length which gives the whole capacity. + // When the byte data of the file is populated, this will point to either a typed array, or a normal JS array. Typed arrays are preferred + // for performance, and used by default. However, typed arrays are not resizable like normal JS arrays are, so there is a small disk size + // penalty involved for appending file writes that continuously grow a file similar to std::vector capacity vs used -scheme. + node.contents = null; + } else if (FS.isLink(node.mode)) { + node.node_ops = MEMFS.ops_table.link.node; + node.stream_ops = MEMFS.ops_table.link.stream; + } else if (FS.isChrdev(node.mode)) { + node.node_ops = MEMFS.ops_table.chrdev.node; + node.stream_ops = MEMFS.ops_table.chrdev.stream; + } + node.atime = node.mtime = node.ctime = Date.now(); + // add the new node to the parent + if (parent) { + parent.contents[name] = node; + parent.atime = parent.mtime = parent.ctime = node.atime; + } + return node; + }, + getFileDataAsTypedArray(node) { + if (!node.contents) return new Uint8Array(0); + if (node.contents.subarray) return node.contents.subarray(0, node.usedBytes); // Make sure to not return excess unused bytes. + return new Uint8Array(node.contents); + }, + expandFileStorage(node, newCapacity) { + var prevCapacity = node.contents ? node.contents.length : 0; + if (prevCapacity >= newCapacity) return; // No need to expand, the storage was already large enough. + // Don't expand strictly to the given requested limit if it's only a very small increase, but instead geometrically grow capacity. + // For small filesizes (<1MB), perform size*2 geometric increase, but for large sizes, do a much more conservative size*1.125 increase to + // avoid overshooting the allocation cap by a very large margin. + var CAPACITY_DOUBLING_MAX = 1024 * 1024; + newCapacity = Math.max(newCapacity, (prevCapacity * (prevCapacity < CAPACITY_DOUBLING_MAX ? 2.0 : 1.125)) >>> 0); + if (prevCapacity != 0) newCapacity = Math.max(newCapacity, 256); // At minimum allocate 256b for each file when expanding. + var oldContents = node.contents; + node.contents = new Uint8Array(newCapacity); // Allocate new storage. + if (node.usedBytes > 0) node.contents.set(oldContents.subarray(0, node.usedBytes), 0); // Copy old data over to the new storage. + }, + resizeFileStorage(node, newSize) { + if (node.usedBytes == newSize) return; + if (newSize == 0) { + node.contents = null; // Fully decommit when requesting a resize to zero. + node.usedBytes = 0; + } else { + var oldContents = node.contents; + node.contents = new Uint8Array(newSize); // Allocate new storage. + if (oldContents) { + node.contents.set(oldContents.subarray(0, Math.min(newSize, node.usedBytes))); // Copy old data over to the new storage. + } + node.usedBytes = newSize; + } + }, + node_ops:{ + getattr(node) { + var attr = {}; + // device numbers reuse inode numbers. + attr.dev = FS.isChrdev(node.mode) ? node.id : 1; + attr.ino = node.id; + attr.mode = node.mode; + attr.nlink = 1; + attr.uid = 0; + attr.gid = 0; + attr.rdev = node.rdev; + if (FS.isDir(node.mode)) { + attr.size = 4096; + } else if (FS.isFile(node.mode)) { + attr.size = node.usedBytes; + } else if (FS.isLink(node.mode)) { + attr.size = node.link.length; + } else { + attr.size = 0; + } + attr.atime = new Date(node.atime); + attr.mtime = new Date(node.mtime); + attr.ctime = new Date(node.ctime); + // NOTE: In our implementation, st_blocks = Math.ceil(st_size/st_blksize), + // but this is not required by the standard. + attr.blksize = 4096; + attr.blocks = Math.ceil(attr.size / attr.blksize); + return attr; + }, + setattr(node, attr) { + for (const key of ["mode", "atime", "mtime", "ctime"]) { + if (attr[key] != null) { + node[key] = attr[key]; + } + } + if (attr.size !== undefined) { + MEMFS.resizeFileStorage(node, attr.size); + } + }, + lookup(parent, name) { + throw new FS.ErrnoError(44); + }, + mknod(parent, name, mode, dev) { + return MEMFS.createNode(parent, name, mode, dev); + }, + rename(old_node, new_dir, new_name) { + var new_node; + try { + new_node = FS.lookupNode(new_dir, new_name); + } catch (e) {} + if (new_node) { + if (FS.isDir(old_node.mode)) { + // if we're overwriting a directory at new_name, make sure it's empty. + for (var i in new_node.contents) { + throw new FS.ErrnoError(55); + } + } + FS.hashRemoveNode(new_node); + } + // do the internal rewiring + delete old_node.parent.contents[old_node.name]; + new_dir.contents[new_name] = old_node; + old_node.name = new_name; + new_dir.ctime = new_dir.mtime = old_node.parent.ctime = old_node.parent.mtime = Date.now(); + }, + unlink(parent, name) { + delete parent.contents[name]; + parent.ctime = parent.mtime = Date.now(); + }, + rmdir(parent, name) { + var node = FS.lookupNode(parent, name); + for (var i in node.contents) { + throw new FS.ErrnoError(55); + } + delete parent.contents[name]; + parent.ctime = parent.mtime = Date.now(); + }, + readdir(node) { + return ['.', '..', ...Object.keys(node.contents)]; + }, + symlink(parent, newname, oldpath) { + var node = MEMFS.createNode(parent, newname, 0o777 | 40960, 0); + node.link = oldpath; + return node; + }, + readlink(node) { + if (!FS.isLink(node.mode)) { + throw new FS.ErrnoError(28); + } + return node.link; + }, + }, + stream_ops:{ + read(stream, buffer, offset, length, position) { + var contents = stream.node.contents; + if (position >= stream.node.usedBytes) return 0; + var size = Math.min(stream.node.usedBytes - position, length); + assert(size >= 0); + if (size > 8 && contents.subarray) { // non-trivial, and typed array + buffer.set(contents.subarray(position, position + size), offset); + } else { + for (var i = 0; i < size; i++) buffer[offset + i] = contents[position + i]; + } + return size; + }, + write(stream, buffer, offset, length, position, canOwn) { + // The data buffer should be a typed array view + assert(!(buffer instanceof ArrayBuffer)); + + if (!length) return 0; + var node = stream.node; + node.mtime = node.ctime = Date.now(); + + if (buffer.subarray && (!node.contents || node.contents.subarray)) { // This write is from a typed array to a typed array? + if (canOwn) { + assert(position === 0, 'canOwn must imply no weird position inside the file'); + node.contents = buffer.subarray(offset, offset + length); + node.usedBytes = length; + return length; + } else if (node.usedBytes === 0 && position === 0) { // If this is a simple first write to an empty file, do a fast set since we don't need to care about old data. + node.contents = buffer.slice(offset, offset + length); + node.usedBytes = length; + return length; + } else if (position + length <= node.usedBytes) { // Writing to an already allocated and used subrange of the file? + node.contents.set(buffer.subarray(offset, offset + length), position); + return length; + } + } + + // Appending to an existing file and we need to reallocate, or source data did not come as a typed array. + MEMFS.expandFileStorage(node, position+length); + if (node.contents.subarray && buffer.subarray) { + // Use typed array write which is available. + node.contents.set(buffer.subarray(offset, offset + length), position); + } else { + for (var i = 0; i < length; i++) { + node.contents[position + i] = buffer[offset + i]; // Or fall back to manual write if not. + } + } + node.usedBytes = Math.max(node.usedBytes, position + length); + return length; + }, + llseek(stream, offset, whence) { + var position = offset; + if (whence === 1) { + position += stream.position; + } else if (whence === 2) { + if (FS.isFile(stream.node.mode)) { + position += stream.node.usedBytes; + } + } + if (position < 0) { + throw new FS.ErrnoError(28); + } + return position; + }, + mmap(stream, length, position, prot, flags) { + if (!FS.isFile(stream.node.mode)) { + throw new FS.ErrnoError(43); + } + var ptr; + var allocated; + var contents = stream.node.contents; + // Only make a new copy when MAP_PRIVATE is specified. + if (!(flags & 2) && contents && contents.buffer === HEAP8.buffer) { + // We can't emulate MAP_SHARED when the file is not backed by the + // buffer we're mapping to (e.g. the HEAP buffer). + allocated = false; + ptr = contents.byteOffset; + } else { + allocated = true; + ptr = mmapAlloc(length); + if (!ptr) { + throw new FS.ErrnoError(48); + } + if (contents) { + // Try to avoid unnecessary slices. + if (position > 0 || position + length < contents.length) { + if (contents.subarray) { + contents = contents.subarray(position, position + length); + } else { + contents = Array.prototype.slice.call(contents, position, position + length); + } + } + HEAP8.set(contents, ptr); + } + } + return { ptr, allocated }; + }, + msync(stream, buffer, offset, length, mmapFlags) { + MEMFS.stream_ops.write(stream, buffer, 0, length, offset, false); + // should we check if bytesWritten and length are the same? + return 0; + }, + }, + }; + + var asyncLoad = async (url) => { + var arrayBuffer = await readAsync(url); + assert(arrayBuffer, `Loading data file "${url}" failed (no arrayBuffer).`); + return new Uint8Array(arrayBuffer); + }; + + + var FS_createDataFile = (parent, name, fileData, canRead, canWrite, canOwn) => { + FS.createDataFile(parent, name, fileData, canRead, canWrite, canOwn); + }; + + var preloadPlugins = Module['preloadPlugins'] || []; + var FS_handledByPreloadPlugin = (byteArray, fullname, finish, onerror) => { + // Ensure plugins are ready. + if (typeof Browser != 'undefined') Browser.init(); + + var handled = false; + preloadPlugins.forEach((plugin) => { + if (handled) return; + if (plugin['canHandle'](fullname)) { + plugin['handle'](byteArray, fullname, finish, onerror); + handled = true; + } + }); + return handled; + }; + var FS_createPreloadedFile = (parent, name, url, canRead, canWrite, onload, onerror, dontCreateFile, canOwn, preFinish) => { + // TODO we should allow people to just pass in a complete filename instead + // of parent and name being that we just join them anyways + var fullname = name ? PATH_FS.resolve(PATH.join2(parent, name)) : parent; + var dep = getUniqueRunDependency(`cp ${fullname}`); // might have several active requests for the same fullname + function processData(byteArray) { + function finish(byteArray) { + preFinish?.(); + if (!dontCreateFile) { + FS_createDataFile(parent, name, byteArray, canRead, canWrite, canOwn); + } + onload?.(); + removeRunDependency(dep); + } + if (FS_handledByPreloadPlugin(byteArray, fullname, finish, () => { + onerror?.(); + removeRunDependency(dep); + })) { + return; + } + finish(byteArray); + } + addRunDependency(dep); + if (typeof url == 'string') { + asyncLoad(url).then(processData, onerror); + } else { + processData(url); + } + }; + + var FS_modeStringToFlags = (str) => { + var flagModes = { + 'r': 0, + 'r+': 2, + 'w': 512 | 64 | 1, + 'w+': 512 | 64 | 2, + 'a': 1024 | 64 | 1, + 'a+': 1024 | 64 | 2, + }; + var flags = flagModes[str]; + if (typeof flags == 'undefined') { + throw new Error(`Unknown file open mode: ${str}`); + } + return flags; + }; + + var FS_getMode = (canRead, canWrite) => { + var mode = 0; + if (canRead) mode |= 292 | 73; + if (canWrite) mode |= 146; + return mode; + }; + + + + + + + /** + * Given a pointer 'ptr' to a null-terminated UTF8-encoded string in the + * emscripten HEAP, returns a copy of that string as a Javascript String object. + * + * @param {number} ptr + * @param {number=} maxBytesToRead - An optional length that specifies the + * maximum number of bytes to read. You can omit this parameter to scan the + * string until the first 0 byte. If maxBytesToRead is passed, and the string + * at [ptr, ptr+maxBytesToReadr[ contains a null byte in the middle, then the + * string will cut short at that byte index (i.e. maxBytesToRead will not + * produce a string of exact length [ptr, ptr+maxBytesToRead[) N.B. mixing + * frequent uses of UTF8ToString() with and without maxBytesToRead may throw + * JS JIT optimizations off, so it is worth to consider consistently using one + * @return {string} + */ + var UTF8ToString = (ptr, maxBytesToRead) => { + assert(typeof ptr == 'number', `UTF8ToString expects a number (got ${typeof ptr})`); + return ptr ? UTF8ArrayToString(HEAPU8, ptr, maxBytesToRead) : ''; + }; + + var strError = (errno) => UTF8ToString(_strerror(errno)); + + var ERRNO_CODES = { + 'EPERM': 63, + 'ENOENT': 44, + 'ESRCH': 71, + 'EINTR': 27, + 'EIO': 29, + 'ENXIO': 60, + 'E2BIG': 1, + 'ENOEXEC': 45, + 'EBADF': 8, + 'ECHILD': 12, + 'EAGAIN': 6, + 'EWOULDBLOCK': 6, + 'ENOMEM': 48, + 'EACCES': 2, + 'EFAULT': 21, + 'ENOTBLK': 105, + 'EBUSY': 10, + 'EEXIST': 20, + 'EXDEV': 75, + 'ENODEV': 43, + 'ENOTDIR': 54, + 'EISDIR': 31, + 'EINVAL': 28, + 'ENFILE': 41, + 'EMFILE': 33, + 'ENOTTY': 59, + 'ETXTBSY': 74, + 'EFBIG': 22, + 'ENOSPC': 51, + 'ESPIPE': 70, + 'EROFS': 69, + 'EMLINK': 34, + 'EPIPE': 64, + 'EDOM': 18, + 'ERANGE': 68, + 'ENOMSG': 49, + 'EIDRM': 24, + 'ECHRNG': 106, + 'EL2NSYNC': 156, + 'EL3HLT': 107, + 'EL3RST': 108, + 'ELNRNG': 109, + 'EUNATCH': 110, + 'ENOCSI': 111, + 'EL2HLT': 112, + 'EDEADLK': 16, + 'ENOLCK': 46, + 'EBADE': 113, + 'EBADR': 114, + 'EXFULL': 115, + 'ENOANO': 104, + 'EBADRQC': 103, + 'EBADSLT': 102, + 'EDEADLOCK': 16, + 'EBFONT': 101, + 'ENOSTR': 100, + 'ENODATA': 116, + 'ETIME': 117, + 'ENOSR': 118, + 'ENONET': 119, + 'ENOPKG': 120, + 'EREMOTE': 121, + 'ENOLINK': 47, + 'EADV': 122, + 'ESRMNT': 123, + 'ECOMM': 124, + 'EPROTO': 65, + 'EMULTIHOP': 36, + 'EDOTDOT': 125, + 'EBADMSG': 9, + 'ENOTUNIQ': 126, + 'EBADFD': 127, + 'EREMCHG': 128, + 'ELIBACC': 129, + 'ELIBBAD': 130, + 'ELIBSCN': 131, + 'ELIBMAX': 132, + 'ELIBEXEC': 133, + 'ENOSYS': 52, + 'ENOTEMPTY': 55, + 'ENAMETOOLONG': 37, + 'ELOOP': 32, + 'EOPNOTSUPP': 138, + 'EPFNOSUPPORT': 139, + 'ECONNRESET': 15, + 'ENOBUFS': 42, + 'EAFNOSUPPORT': 5, + 'EPROTOTYPE': 67, + 'ENOTSOCK': 57, + 'ENOPROTOOPT': 50, + 'ESHUTDOWN': 140, + 'ECONNREFUSED': 14, + 'EADDRINUSE': 3, + 'ECONNABORTED': 13, + 'ENETUNREACH': 40, + 'ENETDOWN': 38, + 'ETIMEDOUT': 73, + 'EHOSTDOWN': 142, + 'EHOSTUNREACH': 23, + 'EINPROGRESS': 26, + 'EALREADY': 7, + 'EDESTADDRREQ': 17, + 'EMSGSIZE': 35, + 'EPROTONOSUPPORT': 66, + 'ESOCKTNOSUPPORT': 137, + 'EADDRNOTAVAIL': 4, + 'ENETRESET': 39, + 'EISCONN': 30, + 'ENOTCONN': 53, + 'ETOOMANYREFS': 141, + 'EUSERS': 136, + 'EDQUOT': 19, + 'ESTALE': 72, + 'ENOTSUP': 138, + 'ENOMEDIUM': 148, + 'EILSEQ': 25, + 'EOVERFLOW': 61, + 'ECANCELED': 11, + 'ENOTRECOVERABLE': 56, + 'EOWNERDEAD': 62, + 'ESTRPIPE': 135, + }; + var FS = { + root:null, + mounts:[], + devices:{ + }, + streams:[], + nextInode:1, + nameTable:null, + currentPath:"/", + initialized:false, + ignorePermissions:true, + filesystems:null, + syncFSRequests:0, + readFiles:{ + }, + ErrnoError:class extends Error { + name = 'ErrnoError'; + // We set the `name` property to be able to identify `FS.ErrnoError` + // - the `name` is a standard ECMA-262 property of error objects. Kind of good to have it anyway. + // - when using PROXYFS, an error can come from an underlying FS + // as different FS objects have their own FS.ErrnoError each, + // the test `err instanceof FS.ErrnoError` won't detect an error coming from another filesystem, causing bugs. + // we'll use the reliable test `err.name == "ErrnoError"` instead + constructor(errno) { + super(runtimeInitialized ? strError(errno) : ''); + this.errno = errno; + for (var key in ERRNO_CODES) { + if (ERRNO_CODES[key] === errno) { + this.code = key; + break; + } + } + } + }, + FSStream:class { + shared = {}; + get object() { + return this.node; + } + set object(val) { + this.node = val; + } + get isRead() { + return (this.flags & 2097155) !== 1; + } + get isWrite() { + return (this.flags & 2097155) !== 0; + } + get isAppend() { + return (this.flags & 1024); + } + get flags() { + return this.shared.flags; + } + set flags(val) { + this.shared.flags = val; + } + get position() { + return this.shared.position; + } + set position(val) { + this.shared.position = val; + } + }, + FSNode:class { + node_ops = {}; + stream_ops = {}; + readMode = 292 | 73; + writeMode = 146; + mounted = null; + constructor(parent, name, mode, rdev) { + if (!parent) { + parent = this; // root node sets parent to itself + } + this.parent = parent; + this.mount = parent.mount; + this.id = FS.nextInode++; + this.name = name; + this.mode = mode; + this.rdev = rdev; + this.atime = this.mtime = this.ctime = Date.now(); + } + get read() { + return (this.mode & this.readMode) === this.readMode; + } + set read(val) { + val ? this.mode |= this.readMode : this.mode &= ~this.readMode; + } + get write() { + return (this.mode & this.writeMode) === this.writeMode; + } + set write(val) { + val ? this.mode |= this.writeMode : this.mode &= ~this.writeMode; + } + get isFolder() { + return FS.isDir(this.mode); + } + get isDevice() { + return FS.isChrdev(this.mode); + } + }, + lookupPath(path, opts = {}) { + if (!path) { + throw new FS.ErrnoError(44); + } + opts.follow_mount ??= true + + if (!PATH.isAbs(path)) { + path = FS.cwd() + '/' + path; + } + + // limit max consecutive symlinks to 40 (SYMLOOP_MAX). + linkloop: for (var nlinks = 0; nlinks < 40; nlinks++) { + // split the absolute path + var parts = path.split('/').filter((p) => !!p); + + // start at the root + var current = FS.root; + var current_path = '/'; + + for (var i = 0; i < parts.length; i++) { + var islast = (i === parts.length-1); + if (islast && opts.parent) { + // stop resolving + break; + } + + if (parts[i] === '.') { + continue; + } + + if (parts[i] === '..') { + current_path = PATH.dirname(current_path); + current = current.parent; + continue; + } + + current_path = PATH.join2(current_path, parts[i]); + try { + current = FS.lookupNode(current, parts[i]); + } catch (e) { + // if noent_okay is true, suppress a ENOENT in the last component + // and return an object with an undefined node. This is needed for + // resolving symlinks in the path when creating a file. + if ((e?.errno === 44) && islast && opts.noent_okay) { + return { path: current_path }; + } + throw e; + } + + // jump to the mount's root node if this is a mountpoint + if (FS.isMountpoint(current) && (!islast || opts.follow_mount)) { + current = current.mounted.root; + } + + // by default, lookupPath will not follow a symlink if it is the final path component. + // setting opts.follow = true will override this behavior. + if (FS.isLink(current.mode) && (!islast || opts.follow)) { + if (!current.node_ops.readlink) { + throw new FS.ErrnoError(52); + } + var link = current.node_ops.readlink(current); + if (!PATH.isAbs(link)) { + link = PATH.dirname(current_path) + '/' + link; + } + path = link + '/' + parts.slice(i + 1).join('/'); + continue linkloop; + } + } + return { path: current_path, node: current }; + } + throw new FS.ErrnoError(32); + }, + getPath(node) { + var path; + while (true) { + if (FS.isRoot(node)) { + var mount = node.mount.mountpoint; + if (!path) return mount; + return mount[mount.length-1] !== '/' ? `${mount}/${path}` : mount + path; + } + path = path ? `${node.name}/${path}` : node.name; + node = node.parent; + } + }, + hashName(parentid, name) { + var hash = 0; + + for (var i = 0; i < name.length; i++) { + hash = ((hash << 5) - hash + name.charCodeAt(i)) | 0; + } + return ((parentid + hash) >>> 0) % FS.nameTable.length; + }, + hashAddNode(node) { + var hash = FS.hashName(node.parent.id, node.name); + node.name_next = FS.nameTable[hash]; + FS.nameTable[hash] = node; + }, + hashRemoveNode(node) { + var hash = FS.hashName(node.parent.id, node.name); + if (FS.nameTable[hash] === node) { + FS.nameTable[hash] = node.name_next; + } else { + var current = FS.nameTable[hash]; + while (current) { + if (current.name_next === node) { + current.name_next = node.name_next; + break; + } + current = current.name_next; + } + } + }, + lookupNode(parent, name) { + var errCode = FS.mayLookup(parent); + if (errCode) { + throw new FS.ErrnoError(errCode); + } + var hash = FS.hashName(parent.id, name); + for (var node = FS.nameTable[hash]; node; node = node.name_next) { + var nodeName = node.name; + if (node.parent.id === parent.id && nodeName === name) { + return node; + } + } + // if we failed to find it in the cache, call into the VFS + return FS.lookup(parent, name); + }, + createNode(parent, name, mode, rdev) { + assert(typeof parent == 'object') + var node = new FS.FSNode(parent, name, mode, rdev); + + FS.hashAddNode(node); + + return node; + }, + destroyNode(node) { + FS.hashRemoveNode(node); + }, + isRoot(node) { + return node === node.parent; + }, + isMountpoint(node) { + return !!node.mounted; + }, + isFile(mode) { + return (mode & 61440) === 32768; + }, + isDir(mode) { + return (mode & 61440) === 16384; + }, + isLink(mode) { + return (mode & 61440) === 40960; + }, + isChrdev(mode) { + return (mode & 61440) === 8192; + }, + isBlkdev(mode) { + return (mode & 61440) === 24576; + }, + isFIFO(mode) { + return (mode & 61440) === 4096; + }, + isSocket(mode) { + return (mode & 49152) === 49152; + }, + flagsToPermissionString(flag) { + var perms = ['r', 'w', 'rw'][flag & 3]; + if ((flag & 512)) { + perms += 'w'; + } + return perms; + }, + nodePermissions(node, perms) { + if (FS.ignorePermissions) { + return 0; + } + // return 0 if any user, group or owner bits are set. + if (perms.includes('r') && !(node.mode & 292)) { + return 2; + } else if (perms.includes('w') && !(node.mode & 146)) { + return 2; + } else if (perms.includes('x') && !(node.mode & 73)) { + return 2; + } + return 0; + }, + mayLookup(dir) { + if (!FS.isDir(dir.mode)) return 54; + var errCode = FS.nodePermissions(dir, 'x'); + if (errCode) return errCode; + if (!dir.node_ops.lookup) return 2; + return 0; + }, + mayCreate(dir, name) { + if (!FS.isDir(dir.mode)) { + return 54; + } + try { + var node = FS.lookupNode(dir, name); + return 20; + } catch (e) { + } + return FS.nodePermissions(dir, 'wx'); + }, + mayDelete(dir, name, isdir) { + var node; + try { + node = FS.lookupNode(dir, name); + } catch (e) { + return e.errno; + } + var errCode = FS.nodePermissions(dir, 'wx'); + if (errCode) { + return errCode; + } + if (isdir) { + if (!FS.isDir(node.mode)) { + return 54; + } + if (FS.isRoot(node) || FS.getPath(node) === FS.cwd()) { + return 10; + } + } else { + if (FS.isDir(node.mode)) { + return 31; + } + } + return 0; + }, + mayOpen(node, flags) { + if (!node) { + return 44; + } + if (FS.isLink(node.mode)) { + return 32; + } else if (FS.isDir(node.mode)) { + if (FS.flagsToPermissionString(flags) !== 'r' // opening for write + || (flags & (512 | 64))) { // TODO: check for O_SEARCH? (== search for dir only) + return 31; + } + } + return FS.nodePermissions(node, FS.flagsToPermissionString(flags)); + }, + checkOpExists(op, err) { + if (!op) { + throw new FS.ErrnoError(err); + } + return op; + }, + MAX_OPEN_FDS:4096, + nextfd() { + for (var fd = 0; fd <= FS.MAX_OPEN_FDS; fd++) { + if (!FS.streams[fd]) { + return fd; + } + } + throw new FS.ErrnoError(33); + }, + getStreamChecked(fd) { + var stream = FS.getStream(fd); + if (!stream) { + throw new FS.ErrnoError(8); + } + return stream; + }, + getStream:(fd) => FS.streams[fd], + createStream(stream, fd = -1) { + assert(fd >= -1); + + // clone it, so we can return an instance of FSStream + stream = Object.assign(new FS.FSStream(), stream); + if (fd == -1) { + fd = FS.nextfd(); + } + stream.fd = fd; + FS.streams[fd] = stream; + return stream; + }, + closeStream(fd) { + FS.streams[fd] = null; + }, + dupStream(origStream, fd = -1) { + var stream = FS.createStream(origStream, fd); + stream.stream_ops?.dup?.(stream); + return stream; + }, + doSetAttr(stream, node, attr) { + var setattr = stream?.stream_ops.setattr; + var arg = setattr ? stream : node; + setattr ??= node.node_ops.setattr; + FS.checkOpExists(setattr, 63) + setattr(arg, attr); + }, + chrdev_stream_ops:{ + open(stream) { + var device = FS.getDevice(stream.node.rdev); + // override node's stream ops with the device's + stream.stream_ops = device.stream_ops; + // forward the open call + stream.stream_ops.open?.(stream); + }, + llseek() { + throw new FS.ErrnoError(70); + }, + }, + major:(dev) => ((dev) >> 8), + minor:(dev) => ((dev) & 0xff), + makedev:(ma, mi) => ((ma) << 8 | (mi)), + registerDevice(dev, ops) { + FS.devices[dev] = { stream_ops: ops }; + }, + getDevice:(dev) => FS.devices[dev], + getMounts(mount) { + var mounts = []; + var check = [mount]; + + while (check.length) { + var m = check.pop(); + + mounts.push(m); + + check.push(...m.mounts); + } + + return mounts; + }, + syncfs(populate, callback) { + if (typeof populate == 'function') { + callback = populate; + populate = false; + } + + FS.syncFSRequests++; + + if (FS.syncFSRequests > 1) { + err(`warning: ${FS.syncFSRequests} FS.syncfs operations in flight at once, probably just doing extra work`); + } + + var mounts = FS.getMounts(FS.root.mount); + var completed = 0; + + function doCallback(errCode) { + assert(FS.syncFSRequests > 0); + FS.syncFSRequests--; + return callback(errCode); + } + + function done(errCode) { + if (errCode) { + if (!done.errored) { + done.errored = true; + return doCallback(errCode); + } + return; + } + if (++completed >= mounts.length) { + doCallback(null); + } + }; + + // sync all mounts + mounts.forEach((mount) => { + if (!mount.type.syncfs) { + return done(null); + } + mount.type.syncfs(mount, populate, done); + }); + }, + mount(type, opts, mountpoint) { + if (typeof type == 'string') { + // The filesystem was not included, and instead we have an error + // message stored in the variable. + throw type; + } + var root = mountpoint === '/'; + var pseudo = !mountpoint; + var node; + + if (root && FS.root) { + throw new FS.ErrnoError(10); + } else if (!root && !pseudo) { + var lookup = FS.lookupPath(mountpoint, { follow_mount: false }); + + mountpoint = lookup.path; // use the absolute path + node = lookup.node; + + if (FS.isMountpoint(node)) { + throw new FS.ErrnoError(10); + } + + if (!FS.isDir(node.mode)) { + throw new FS.ErrnoError(54); + } + } + + var mount = { + type, + opts, + mountpoint, + mounts: [] + }; + + // create a root node for the fs + var mountRoot = type.mount(mount); + mountRoot.mount = mount; + mount.root = mountRoot; + + if (root) { + FS.root = mountRoot; + } else if (node) { + // set as a mountpoint + node.mounted = mount; + + // add the new mount to the current mount's children + if (node.mount) { + node.mount.mounts.push(mount); + } + } + + return mountRoot; + }, + unmount(mountpoint) { + var lookup = FS.lookupPath(mountpoint, { follow_mount: false }); + + if (!FS.isMountpoint(lookup.node)) { + throw new FS.ErrnoError(28); + } + + // destroy the nodes for this mount, and all its child mounts + var node = lookup.node; + var mount = node.mounted; + var mounts = FS.getMounts(mount); + + Object.keys(FS.nameTable).forEach((hash) => { + var current = FS.nameTable[hash]; + + while (current) { + var next = current.name_next; + + if (mounts.includes(current.mount)) { + FS.destroyNode(current); + } + + current = next; + } + }); + + // no longer a mountpoint + node.mounted = null; + + // remove this mount from the child mounts + var idx = node.mount.mounts.indexOf(mount); + assert(idx !== -1); + node.mount.mounts.splice(idx, 1); + }, + lookup(parent, name) { + return parent.node_ops.lookup(parent, name); + }, + mknod(path, mode, dev) { + var lookup = FS.lookupPath(path, { parent: true }); + var parent = lookup.node; + var name = PATH.basename(path); + if (!name) { + throw new FS.ErrnoError(28); + } + if (name === '.' || name === '..') { + throw new FS.ErrnoError(20); + } + var errCode = FS.mayCreate(parent, name); + if (errCode) { + throw new FS.ErrnoError(errCode); + } + if (!parent.node_ops.mknod) { + throw new FS.ErrnoError(63); + } + return parent.node_ops.mknod(parent, name, mode, dev); + }, + statfs(path) { + return FS.statfsNode(FS.lookupPath(path, {follow: true}).node); + }, + statfsStream(stream) { + // We keep a separate statfsStream function because noderawfs overrides + // it. In noderawfs, stream.node is sometimes null. Instead, we need to + // look at stream.path. + return FS.statfsNode(stream.node); + }, + statfsNode(node) { + // NOTE: None of the defaults here are true. We're just returning safe and + // sane values. Currently nodefs and rawfs replace these defaults, + // other file systems leave them alone. + var rtn = { + bsize: 4096, + frsize: 4096, + blocks: 1e6, + bfree: 5e5, + bavail: 5e5, + files: FS.nextInode, + ffree: FS.nextInode - 1, + fsid: 42, + flags: 2, + namelen: 255, + }; + + if (node.node_ops.statfs) { + Object.assign(rtn, node.node_ops.statfs(node.mount.opts.root)); + } + return rtn; + }, + create(path, mode = 0o666) { + mode &= 4095; + mode |= 32768; + return FS.mknod(path, mode, 0); + }, + mkdir(path, mode = 0o777) { + mode &= 511 | 512; + mode |= 16384; + return FS.mknod(path, mode, 0); + }, + mkdirTree(path, mode) { + var dirs = path.split('/'); + var d = ''; + for (var dir of dirs) { + if (!dir) continue; + if (d || PATH.isAbs(path)) d += '/'; + d += dir; + try { + FS.mkdir(d, mode); + } catch(e) { + if (e.errno != 20) throw e; + } + } + }, + mkdev(path, mode, dev) { + if (typeof dev == 'undefined') { + dev = mode; + mode = 0o666; + } + mode |= 8192; + return FS.mknod(path, mode, dev); + }, + symlink(oldpath, newpath) { + if (!PATH_FS.resolve(oldpath)) { + throw new FS.ErrnoError(44); + } + var lookup = FS.lookupPath(newpath, { parent: true }); + var parent = lookup.node; + if (!parent) { + throw new FS.ErrnoError(44); + } + var newname = PATH.basename(newpath); + var errCode = FS.mayCreate(parent, newname); + if (errCode) { + throw new FS.ErrnoError(errCode); + } + if (!parent.node_ops.symlink) { + throw new FS.ErrnoError(63); + } + return parent.node_ops.symlink(parent, newname, oldpath); + }, + rename(old_path, new_path) { + var old_dirname = PATH.dirname(old_path); + var new_dirname = PATH.dirname(new_path); + var old_name = PATH.basename(old_path); + var new_name = PATH.basename(new_path); + // parents must exist + var lookup, old_dir, new_dir; + + // let the errors from non existent directories percolate up + lookup = FS.lookupPath(old_path, { parent: true }); + old_dir = lookup.node; + lookup = FS.lookupPath(new_path, { parent: true }); + new_dir = lookup.node; + + if (!old_dir || !new_dir) throw new FS.ErrnoError(44); + // need to be part of the same mount + if (old_dir.mount !== new_dir.mount) { + throw new FS.ErrnoError(75); + } + // source must exist + var old_node = FS.lookupNode(old_dir, old_name); + // old path should not be an ancestor of the new path + var relative = PATH_FS.relative(old_path, new_dirname); + if (relative.charAt(0) !== '.') { + throw new FS.ErrnoError(28); + } + // new path should not be an ancestor of the old path + relative = PATH_FS.relative(new_path, old_dirname); + if (relative.charAt(0) !== '.') { + throw new FS.ErrnoError(55); + } + // see if the new path already exists + var new_node; + try { + new_node = FS.lookupNode(new_dir, new_name); + } catch (e) { + // not fatal + } + // early out if nothing needs to change + if (old_node === new_node) { + return; + } + // we'll need to delete the old entry + var isdir = FS.isDir(old_node.mode); + var errCode = FS.mayDelete(old_dir, old_name, isdir); + if (errCode) { + throw new FS.ErrnoError(errCode); + } + // need delete permissions if we'll be overwriting. + // need create permissions if new doesn't already exist. + errCode = new_node ? + FS.mayDelete(new_dir, new_name, isdir) : + FS.mayCreate(new_dir, new_name); + if (errCode) { + throw new FS.ErrnoError(errCode); + } + if (!old_dir.node_ops.rename) { + throw new FS.ErrnoError(63); + } + if (FS.isMountpoint(old_node) || (new_node && FS.isMountpoint(new_node))) { + throw new FS.ErrnoError(10); + } + // if we are going to change the parent, check write permissions + if (new_dir !== old_dir) { + errCode = FS.nodePermissions(old_dir, 'w'); + if (errCode) { + throw new FS.ErrnoError(errCode); + } + } + // remove the node from the lookup hash + FS.hashRemoveNode(old_node); + // do the underlying fs rename + try { + old_dir.node_ops.rename(old_node, new_dir, new_name); + // update old node (we do this here to avoid each backend + // needing to) + old_node.parent = new_dir; + } catch (e) { + throw e; + } finally { + // add the node back to the hash (in case node_ops.rename + // changed its name) + FS.hashAddNode(old_node); + } + }, + rmdir(path) { + var lookup = FS.lookupPath(path, { parent: true }); + var parent = lookup.node; + var name = PATH.basename(path); + var node = FS.lookupNode(parent, name); + var errCode = FS.mayDelete(parent, name, true); + if (errCode) { + throw new FS.ErrnoError(errCode); + } + if (!parent.node_ops.rmdir) { + throw new FS.ErrnoError(63); + } + if (FS.isMountpoint(node)) { + throw new FS.ErrnoError(10); + } + parent.node_ops.rmdir(parent, name); + FS.destroyNode(node); + }, + readdir(path) { + var lookup = FS.lookupPath(path, { follow: true }); + var node = lookup.node; + var readdir = FS.checkOpExists(node.node_ops.readdir, 54); + return readdir(node); + }, + unlink(path) { + var lookup = FS.lookupPath(path, { parent: true }); + var parent = lookup.node; + if (!parent) { + throw new FS.ErrnoError(44); + } + var name = PATH.basename(path); + var node = FS.lookupNode(parent, name); + var errCode = FS.mayDelete(parent, name, false); + if (errCode) { + // According to POSIX, we should map EISDIR to EPERM, but + // we instead do what Linux does (and we must, as we use + // the musl linux libc). + throw new FS.ErrnoError(errCode); + } + if (!parent.node_ops.unlink) { + throw new FS.ErrnoError(63); + } + if (FS.isMountpoint(node)) { + throw new FS.ErrnoError(10); + } + parent.node_ops.unlink(parent, name); + FS.destroyNode(node); + }, + readlink(path) { + var lookup = FS.lookupPath(path); + var link = lookup.node; + if (!link) { + throw new FS.ErrnoError(44); + } + if (!link.node_ops.readlink) { + throw new FS.ErrnoError(28); + } + return link.node_ops.readlink(link); + }, + stat(path, dontFollow) { + var lookup = FS.lookupPath(path, { follow: !dontFollow }); + var node = lookup.node; + var getattr = FS.checkOpExists(node.node_ops.getattr, 63); + return getattr(node); + }, + fstat(fd) { + var stream = FS.getStreamChecked(fd); + var node = stream.node; + var getattr = stream.stream_ops.getattr; + var arg = getattr ? stream : node; + getattr ??= node.node_ops.getattr; + FS.checkOpExists(getattr, 63) + return getattr(arg); + }, + lstat(path) { + return FS.stat(path, true); + }, + doChmod(stream, node, mode, dontFollow) { + FS.doSetAttr(stream, node, { + mode: (mode & 4095) | (node.mode & ~4095), + ctime: Date.now(), + dontFollow + }); + }, + chmod(path, mode, dontFollow) { + var node; + if (typeof path == 'string') { + var lookup = FS.lookupPath(path, { follow: !dontFollow }); + node = lookup.node; + } else { + node = path; + } + FS.doChmod(null, node, mode, dontFollow); + }, + lchmod(path, mode) { + FS.chmod(path, mode, true); + }, + fchmod(fd, mode) { + var stream = FS.getStreamChecked(fd); + FS.doChmod(stream, stream.node, mode, false); + }, + doChown(stream, node, dontFollow) { + FS.doSetAttr(stream, node, { + timestamp: Date.now(), + dontFollow + // we ignore the uid / gid for now + }); + }, + chown(path, uid, gid, dontFollow) { + var node; + if (typeof path == 'string') { + var lookup = FS.lookupPath(path, { follow: !dontFollow }); + node = lookup.node; + } else { + node = path; + } + FS.doChown(null, node, dontFollow); + }, + lchown(path, uid, gid) { + FS.chown(path, uid, gid, true); + }, + fchown(fd, uid, gid) { + var stream = FS.getStreamChecked(fd); + FS.doChown(stream, stream.node, false); + }, + doTruncate(stream, node, len) { + if (FS.isDir(node.mode)) { + throw new FS.ErrnoError(31); + } + if (!FS.isFile(node.mode)) { + throw new FS.ErrnoError(28); + } + var errCode = FS.nodePermissions(node, 'w'); + if (errCode) { + throw new FS.ErrnoError(errCode); + } + FS.doSetAttr(stream, node, { + size: len, + timestamp: Date.now() + }); + }, + truncate(path, len) { + if (len < 0) { + throw new FS.ErrnoError(28); + } + var node; + if (typeof path == 'string') { + var lookup = FS.lookupPath(path, { follow: true }); + node = lookup.node; + } else { + node = path; + } + FS.doTruncate(null, node, len); + }, + ftruncate(fd, len) { + var stream = FS.getStreamChecked(fd); + if (len < 0 || (stream.flags & 2097155) === 0) { + throw new FS.ErrnoError(28); + } + FS.doTruncate(stream, stream.node, len); + }, + utime(path, atime, mtime) { + var lookup = FS.lookupPath(path, { follow: true }); + var node = lookup.node; + var setattr = FS.checkOpExists(node.node_ops.setattr, 63); + setattr(node, { + atime: atime, + mtime: mtime + }); + }, + open(path, flags, mode = 0o666) { + if (path === "") { + throw new FS.ErrnoError(44); + } + flags = typeof flags == 'string' ? FS_modeStringToFlags(flags) : flags; + if ((flags & 64)) { + mode = (mode & 4095) | 32768; + } else { + mode = 0; + } + var node; + var isDirPath; + if (typeof path == 'object') { + node = path; + } else { + isDirPath = path.endsWith("/"); + // noent_okay makes it so that if the final component of the path + // doesn't exist, lookupPath returns `node: undefined`. `path` will be + // updated to point to the target of all symlinks. + var lookup = FS.lookupPath(path, { + follow: !(flags & 131072), + noent_okay: true + }); + node = lookup.node; + path = lookup.path; + } + // perhaps we need to create the node + var created = false; + if ((flags & 64)) { + if (node) { + // if O_CREAT and O_EXCL are set, error out if the node already exists + if ((flags & 128)) { + throw new FS.ErrnoError(20); + } + } else if (isDirPath) { + throw new FS.ErrnoError(31); + } else { + // node doesn't exist, try to create it + // Ignore the permission bits here to ensure we can `open` this new + // file below. We use chmod below the apply the permissions once the + // file is open. + node = FS.mknod(path, mode | 0o777, 0); + created = true; + } + } + if (!node) { + throw new FS.ErrnoError(44); + } + // can't truncate a device + if (FS.isChrdev(node.mode)) { + flags &= ~512; + } + // if asked only for a directory, then this must be one + if ((flags & 65536) && !FS.isDir(node.mode)) { + throw new FS.ErrnoError(54); + } + // check permissions, if this is not a file we just created now (it is ok to + // create and write to a file with read-only permissions; it is read-only + // for later use) + if (!created) { + var errCode = FS.mayOpen(node, flags); + if (errCode) { + throw new FS.ErrnoError(errCode); + } + } + // do truncation if necessary + if ((flags & 512) && !created) { + FS.truncate(node, 0); + } + // we've already handled these, don't pass down to the underlying vfs + flags &= ~(128 | 512 | 131072); + + // register the stream with the filesystem + var stream = FS.createStream({ + node, + path: FS.getPath(node), // we want the absolute path to the node + flags, + seekable: true, + position: 0, + stream_ops: node.stream_ops, + // used by the file family libc calls (fopen, fwrite, ferror, etc.) + ungotten: [], + error: false + }); + // call the new stream's open function + if (stream.stream_ops.open) { + stream.stream_ops.open(stream); + } + if (created) { + FS.chmod(node, mode & 0o777); + } + if (Module['logReadFiles'] && !(flags & 1)) { + if (!(path in FS.readFiles)) { + FS.readFiles[path] = 1; + } + } + return stream; + }, + close(stream) { + if (FS.isClosed(stream)) { + throw new FS.ErrnoError(8); + } + if (stream.getdents) stream.getdents = null; // free readdir state + try { + if (stream.stream_ops.close) { + stream.stream_ops.close(stream); + } + } catch (e) { + throw e; + } finally { + FS.closeStream(stream.fd); + } + stream.fd = null; + }, + isClosed(stream) { + return stream.fd === null; + }, + llseek(stream, offset, whence) { + if (FS.isClosed(stream)) { + throw new FS.ErrnoError(8); + } + if (!stream.seekable || !stream.stream_ops.llseek) { + throw new FS.ErrnoError(70); + } + if (whence != 0 && whence != 1 && whence != 2) { + throw new FS.ErrnoError(28); + } + stream.position = stream.stream_ops.llseek(stream, offset, whence); + stream.ungotten = []; + return stream.position; + }, + read(stream, buffer, offset, length, position) { + assert(offset >= 0); + if (length < 0 || position < 0) { + throw new FS.ErrnoError(28); + } + if (FS.isClosed(stream)) { + throw new FS.ErrnoError(8); + } + if ((stream.flags & 2097155) === 1) { + throw new FS.ErrnoError(8); + } + if (FS.isDir(stream.node.mode)) { + throw new FS.ErrnoError(31); + } + if (!stream.stream_ops.read) { + throw new FS.ErrnoError(28); + } + var seeking = typeof position != 'undefined'; + if (!seeking) { + position = stream.position; + } else if (!stream.seekable) { + throw new FS.ErrnoError(70); + } + var bytesRead = stream.stream_ops.read(stream, buffer, offset, length, position); + if (!seeking) stream.position += bytesRead; + return bytesRead; + }, + write(stream, buffer, offset, length, position, canOwn) { + assert(offset >= 0); + if (length < 0 || position < 0) { + throw new FS.ErrnoError(28); + } + if (FS.isClosed(stream)) { + throw new FS.ErrnoError(8); + } + if ((stream.flags & 2097155) === 0) { + throw new FS.ErrnoError(8); + } + if (FS.isDir(stream.node.mode)) { + throw new FS.ErrnoError(31); + } + if (!stream.stream_ops.write) { + throw new FS.ErrnoError(28); + } + if (stream.seekable && stream.flags & 1024) { + // seek to the end before writing in append mode + FS.llseek(stream, 0, 2); + } + var seeking = typeof position != 'undefined'; + if (!seeking) { + position = stream.position; + } else if (!stream.seekable) { + throw new FS.ErrnoError(70); + } + var bytesWritten = stream.stream_ops.write(stream, buffer, offset, length, position, canOwn); + if (!seeking) stream.position += bytesWritten; + return bytesWritten; + }, + mmap(stream, length, position, prot, flags) { + // User requests writing to file (prot & PROT_WRITE != 0). + // Checking if we have permissions to write to the file unless + // MAP_PRIVATE flag is set. According to POSIX spec it is possible + // to write to file opened in read-only mode with MAP_PRIVATE flag, + // as all modifications will be visible only in the memory of + // the current process. + if ((prot & 2) !== 0 + && (flags & 2) === 0 + && (stream.flags & 2097155) !== 2) { + throw new FS.ErrnoError(2); + } + if ((stream.flags & 2097155) === 1) { + throw new FS.ErrnoError(2); + } + if (!stream.stream_ops.mmap) { + throw new FS.ErrnoError(43); + } + if (!length) { + throw new FS.ErrnoError(28); + } + return stream.stream_ops.mmap(stream, length, position, prot, flags); + }, + msync(stream, buffer, offset, length, mmapFlags) { + assert(offset >= 0); + if (!stream.stream_ops.msync) { + return 0; + } + return stream.stream_ops.msync(stream, buffer, offset, length, mmapFlags); + }, + ioctl(stream, cmd, arg) { + if (!stream.stream_ops.ioctl) { + throw new FS.ErrnoError(59); + } + return stream.stream_ops.ioctl(stream, cmd, arg); + }, + readFile(path, opts = {}) { + opts.flags = opts.flags || 0; + opts.encoding = opts.encoding || 'binary'; + if (opts.encoding !== 'utf8' && opts.encoding !== 'binary') { + throw new Error(`Invalid encoding type "${opts.encoding}"`); + } + var ret; + var stream = FS.open(path, opts.flags); + var stat = FS.stat(path); + var length = stat.size; + var buf = new Uint8Array(length); + FS.read(stream, buf, 0, length, 0); + if (opts.encoding === 'utf8') { + ret = UTF8ArrayToString(buf); + } else if (opts.encoding === 'binary') { + ret = buf; + } + FS.close(stream); + return ret; + }, + writeFile(path, data, opts = {}) { + opts.flags = opts.flags || 577; + var stream = FS.open(path, opts.flags, opts.mode); + if (typeof data == 'string') { + var buf = new Uint8Array(lengthBytesUTF8(data)+1); + var actualNumBytes = stringToUTF8Array(data, buf, 0, buf.length); + FS.write(stream, buf, 0, actualNumBytes, undefined, opts.canOwn); + } else if (ArrayBuffer.isView(data)) { + FS.write(stream, data, 0, data.byteLength, undefined, opts.canOwn); + } else { + throw new Error('Unsupported data type'); + } + FS.close(stream); + }, + cwd:() => FS.currentPath, + chdir(path) { + var lookup = FS.lookupPath(path, { follow: true }); + if (lookup.node === null) { + throw new FS.ErrnoError(44); + } + if (!FS.isDir(lookup.node.mode)) { + throw new FS.ErrnoError(54); + } + var errCode = FS.nodePermissions(lookup.node, 'x'); + if (errCode) { + throw new FS.ErrnoError(errCode); + } + FS.currentPath = lookup.path; + }, + createDefaultDirectories() { + FS.mkdir('/tmp'); + FS.mkdir('/home'); + FS.mkdir('/home/web_user'); + }, + createDefaultDevices() { + // create /dev + FS.mkdir('/dev'); + // setup /dev/null + FS.registerDevice(FS.makedev(1, 3), { + read: () => 0, + write: (stream, buffer, offset, length, pos) => length, + llseek: () => 0, + }); + FS.mkdev('/dev/null', FS.makedev(1, 3)); + // setup /dev/tty and /dev/tty1 + // stderr needs to print output using err() rather than out() + // so we register a second tty just for it. + TTY.register(FS.makedev(5, 0), TTY.default_tty_ops); + TTY.register(FS.makedev(6, 0), TTY.default_tty1_ops); + FS.mkdev('/dev/tty', FS.makedev(5, 0)); + FS.mkdev('/dev/tty1', FS.makedev(6, 0)); + // setup /dev/[u]random + // use a buffer to avoid overhead of individual crypto calls per byte + var randomBuffer = new Uint8Array(1024), randomLeft = 0; + var randomByte = () => { + if (randomLeft === 0) { + randomFill(randomBuffer); + randomLeft = randomBuffer.byteLength; + } + return randomBuffer[--randomLeft]; + }; + FS.createDevice('/dev', 'random', randomByte); + FS.createDevice('/dev', 'urandom', randomByte); + // we're not going to emulate the actual shm device, + // just create the tmp dirs that reside in it commonly + FS.mkdir('/dev/shm'); + FS.mkdir('/dev/shm/tmp'); + }, + createSpecialDirectories() { + // create /proc/self/fd which allows /proc/self/fd/6 => readlink gives the + // name of the stream for fd 6 (see test_unistd_ttyname) + FS.mkdir('/proc'); + var proc_self = FS.mkdir('/proc/self'); + FS.mkdir('/proc/self/fd'); + FS.mount({ + mount() { + var node = FS.createNode(proc_self, 'fd', 16895, 73); + node.stream_ops = { + llseek: MEMFS.stream_ops.llseek, + }; + node.node_ops = { + lookup(parent, name) { + var fd = +name; + var stream = FS.getStreamChecked(fd); + var ret = { + parent: null, + mount: { mountpoint: 'fake' }, + node_ops: { readlink: () => stream.path }, + id: fd + 1, + }; + ret.parent = ret; // make it look like a simple root node + return ret; + }, + readdir() { + return Array.from(FS.streams.entries()) + .filter(([k, v]) => v) + .map(([k, v]) => k.toString()); + } + }; + return node; + } + }, {}, '/proc/self/fd'); + }, + createStandardStreams(input, output, error) { + // TODO deprecate the old functionality of a single + // input / output callback and that utilizes FS.createDevice + // and instead require a unique set of stream ops + + // by default, we symlink the standard streams to the + // default tty devices. however, if the standard streams + // have been overwritten we create a unique device for + // them instead. + if (input) { + FS.createDevice('/dev', 'stdin', input); + } else { + FS.symlink('/dev/tty', '/dev/stdin'); + } + if (output) { + FS.createDevice('/dev', 'stdout', null, output); + } else { + FS.symlink('/dev/tty', '/dev/stdout'); + } + if (error) { + FS.createDevice('/dev', 'stderr', null, error); + } else { + FS.symlink('/dev/tty1', '/dev/stderr'); + } + + // open default streams for the stdin, stdout and stderr devices + var stdin = FS.open('/dev/stdin', 0); + var stdout = FS.open('/dev/stdout', 1); + var stderr = FS.open('/dev/stderr', 1); + assert(stdin.fd === 0, `invalid handle for stdin (${stdin.fd})`); + assert(stdout.fd === 1, `invalid handle for stdout (${stdout.fd})`); + assert(stderr.fd === 2, `invalid handle for stderr (${stderr.fd})`); + }, + staticInit() { + FS.nameTable = new Array(4096); + + FS.mount(MEMFS, {}, '/'); + + FS.createDefaultDirectories(); + FS.createDefaultDevices(); + FS.createSpecialDirectories(); + + FS.filesystems = { + 'MEMFS': MEMFS, + }; + }, + init(input, output, error) { + assert(!FS.initialized, 'FS.init was previously called. If you want to initialize later with custom parameters, remove any earlier calls (note that one is automatically added to the generated code)'); + FS.initialized = true; + + // Allow Module.stdin etc. to provide defaults, if none explicitly passed to us here + input ??= Module['stdin']; + output ??= Module['stdout']; + error ??= Module['stderr']; + + FS.createStandardStreams(input, output, error); + }, + quit() { + FS.initialized = false; + // force-flush all streams, so we get musl std streams printed out + _fflush(0); + // close all of our streams + for (var stream of FS.streams) { + if (stream) { + FS.close(stream); + } + } + }, + findObject(path, dontResolveLastLink) { + var ret = FS.analyzePath(path, dontResolveLastLink); + if (!ret.exists) { + return null; + } + return ret.object; + }, + analyzePath(path, dontResolveLastLink) { + // operate from within the context of the symlink's target + try { + var lookup = FS.lookupPath(path, { follow: !dontResolveLastLink }); + path = lookup.path; + } catch (e) { + } + var ret = { + isRoot: false, exists: false, error: 0, name: null, path: null, object: null, + parentExists: false, parentPath: null, parentObject: null + }; + try { + var lookup = FS.lookupPath(path, { parent: true }); + ret.parentExists = true; + ret.parentPath = lookup.path; + ret.parentObject = lookup.node; + ret.name = PATH.basename(path); + lookup = FS.lookupPath(path, { follow: !dontResolveLastLink }); + ret.exists = true; + ret.path = lookup.path; + ret.object = lookup.node; + ret.name = lookup.node.name; + ret.isRoot = lookup.path === '/'; + } catch (e) { + ret.error = e.errno; + }; + return ret; + }, + createPath(parent, path, canRead, canWrite) { + parent = typeof parent == 'string' ? parent : FS.getPath(parent); + var parts = path.split('/').reverse(); + while (parts.length) { + var part = parts.pop(); + if (!part) continue; + var current = PATH.join2(parent, part); + try { + FS.mkdir(current); + } catch (e) { + if (e.errno != 20) throw e; + } + parent = current; + } + return current; + }, + createFile(parent, name, properties, canRead, canWrite) { + var path = PATH.join2(typeof parent == 'string' ? parent : FS.getPath(parent), name); + var mode = FS_getMode(canRead, canWrite); + return FS.create(path, mode); + }, + createDataFile(parent, name, data, canRead, canWrite, canOwn) { + var path = name; + if (parent) { + parent = typeof parent == 'string' ? parent : FS.getPath(parent); + path = name ? PATH.join2(parent, name) : parent; + } + var mode = FS_getMode(canRead, canWrite); + var node = FS.create(path, mode); + if (data) { + if (typeof data == 'string') { + var arr = new Array(data.length); + for (var i = 0, len = data.length; i < len; ++i) arr[i] = data.charCodeAt(i); + data = arr; + } + // make sure we can write to the file + FS.chmod(node, mode | 146); + var stream = FS.open(node, 577); + FS.write(stream, data, 0, data.length, 0, canOwn); + FS.close(stream); + FS.chmod(node, mode); + } + }, + createDevice(parent, name, input, output) { + var path = PATH.join2(typeof parent == 'string' ? parent : FS.getPath(parent), name); + var mode = FS_getMode(!!input, !!output); + FS.createDevice.major ??= 64; + var dev = FS.makedev(FS.createDevice.major++, 0); + // Create a fake device that a set of stream ops to emulate + // the old behavior. + FS.registerDevice(dev, { + open(stream) { + stream.seekable = false; + }, + close(stream) { + // flush any pending line data + if (output?.buffer?.length) { + output(10); + } + }, + read(stream, buffer, offset, length, pos /* ignored */) { + var bytesRead = 0; + for (var i = 0; i < length; i++) { + var result; + try { + result = input(); + } catch (e) { + throw new FS.ErrnoError(29); + } + if (result === undefined && bytesRead === 0) { + throw new FS.ErrnoError(6); + } + if (result === null || result === undefined) break; + bytesRead++; + buffer[offset+i] = result; + } + if (bytesRead) { + stream.node.atime = Date.now(); + } + return bytesRead; + }, + write(stream, buffer, offset, length, pos) { + for (var i = 0; i < length; i++) { + try { + output(buffer[offset+i]); + } catch (e) { + throw new FS.ErrnoError(29); + } + } + if (length) { + stream.node.mtime = stream.node.ctime = Date.now(); + } + return i; + } + }); + return FS.mkdev(path, mode, dev); + }, + forceLoadFile(obj) { + if (obj.isDevice || obj.isFolder || obj.link || obj.contents) return true; + if (typeof XMLHttpRequest != 'undefined') { + throw new Error("Lazy loading should have been performed (contents set) in createLazyFile, but it was not. Lazy loading only works in web workers. Use --embed-file or --preload-file in emcc on the main thread."); + } else { // Command-line. + try { + obj.contents = readBinary(obj.url); + obj.usedBytes = obj.contents.length; + } catch (e) { + throw new FS.ErrnoError(29); + } + } + }, + createLazyFile(parent, name, url, canRead, canWrite) { + // Lazy chunked Uint8Array (implements get and length from Uint8Array). + // Actual getting is abstracted away for eventual reuse. + class LazyUint8Array { + lengthKnown = false; + chunks = []; // Loaded chunks. Index is the chunk number + get(idx) { + if (idx > this.length-1 || idx < 0) { + return undefined; + } + var chunkOffset = idx % this.chunkSize; + var chunkNum = (idx / this.chunkSize)|0; + return this.getter(chunkNum)[chunkOffset]; + } + setDataGetter(getter) { + this.getter = getter; + } + cacheLength() { + // Find length + var xhr = new XMLHttpRequest(); + xhr.open('HEAD', url, false); + xhr.send(null); + if (!(xhr.status >= 200 && xhr.status < 300 || xhr.status === 304)) throw new Error("Couldn't load " + url + ". Status: " + xhr.status); + var datalength = Number(xhr.getResponseHeader("Content-length")); + var header; + var hasByteServing = (header = xhr.getResponseHeader("Accept-Ranges")) && header === "bytes"; + var usesGzip = (header = xhr.getResponseHeader("Content-Encoding")) && header === "gzip"; + + var chunkSize = 1024*1024; // Chunk size in bytes + + if (!hasByteServing) chunkSize = datalength; + + // Function to get a range from the remote URL. + var doXHR = (from, to) => { + if (from > to) throw new Error("invalid range (" + from + ", " + to + ") or no bytes requested!"); + if (to > datalength-1) throw new Error("only " + datalength + " bytes available! programmer error!"); + + // TODO: Use mozResponseArrayBuffer, responseStream, etc. if available. + var xhr = new XMLHttpRequest(); + xhr.open('GET', url, false); + if (datalength !== chunkSize) xhr.setRequestHeader("Range", "bytes=" + from + "-" + to); + + // Some hints to the browser that we want binary data. + xhr.responseType = 'arraybuffer'; + if (xhr.overrideMimeType) { + xhr.overrideMimeType('text/plain; charset=x-user-defined'); + } + + xhr.send(null); + if (!(xhr.status >= 200 && xhr.status < 300 || xhr.status === 304)) throw new Error("Couldn't load " + url + ". Status: " + xhr.status); + if (xhr.response !== undefined) { + return new Uint8Array(/** @type{Array} */(xhr.response || [])); + } + return intArrayFromString(xhr.responseText || '', true); + }; + var lazyArray = this; + lazyArray.setDataGetter((chunkNum) => { + var start = chunkNum * chunkSize; + var end = (chunkNum+1) * chunkSize - 1; // including this byte + end = Math.min(end, datalength-1); // if datalength-1 is selected, this is the last block + if (typeof lazyArray.chunks[chunkNum] == 'undefined') { + lazyArray.chunks[chunkNum] = doXHR(start, end); + } + if (typeof lazyArray.chunks[chunkNum] == 'undefined') throw new Error('doXHR failed!'); + return lazyArray.chunks[chunkNum]; + }); + + if (usesGzip || !datalength) { + // if the server uses gzip or doesn't supply the length, we have to download the whole file to get the (uncompressed) length + chunkSize = datalength = 1; // this will force getter(0)/doXHR do download the whole file + datalength = this.getter(0).length; + chunkSize = datalength; + out("LazyFiles on gzip forces download of the whole file when length is accessed"); + } + + this._length = datalength; + this._chunkSize = chunkSize; + this.lengthKnown = true; + } + get length() { + if (!this.lengthKnown) { + this.cacheLength(); + } + return this._length; + } + get chunkSize() { + if (!this.lengthKnown) { + this.cacheLength(); + } + return this._chunkSize; + } + } + + if (typeof XMLHttpRequest != 'undefined') { + if (!ENVIRONMENT_IS_WORKER) throw 'Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc'; + var lazyArray = new LazyUint8Array(); + var properties = { isDevice: false, contents: lazyArray }; + } else { + var properties = { isDevice: false, url: url }; + } + + var node = FS.createFile(parent, name, properties, canRead, canWrite); + // This is a total hack, but I want to get this lazy file code out of the + // core of MEMFS. If we want to keep this lazy file concept I feel it should + // be its own thin LAZYFS proxying calls to MEMFS. + if (properties.contents) { + node.contents = properties.contents; + } else if (properties.url) { + node.contents = null; + node.url = properties.url; + } + // Add a function that defers querying the file size until it is asked the first time. + Object.defineProperties(node, { + usedBytes: { + get: function() { return this.contents.length; } + } + }); + // override each stream op with one that tries to force load the lazy file first + var stream_ops = {}; + var keys = Object.keys(node.stream_ops); + keys.forEach((key) => { + var fn = node.stream_ops[key]; + stream_ops[key] = (...args) => { + FS.forceLoadFile(node); + return fn(...args); + }; + }); + function writeChunks(stream, buffer, offset, length, position) { + var contents = stream.node.contents; + if (position >= contents.length) + return 0; + var size = Math.min(contents.length - position, length); + assert(size >= 0); + if (contents.slice) { // normal array + for (var i = 0; i < size; i++) { + buffer[offset + i] = contents[position + i]; + } + } else { + for (var i = 0; i < size; i++) { // LazyUint8Array from sync binary XHR + buffer[offset + i] = contents.get(position + i); + } + } + return size; + } + // use a custom read function + stream_ops.read = (stream, buffer, offset, length, position) => { + FS.forceLoadFile(node); + return writeChunks(stream, buffer, offset, length, position) + }; + // use a custom mmap function + stream_ops.mmap = (stream, length, position, prot, flags) => { + FS.forceLoadFile(node); + var ptr = mmapAlloc(length); + if (!ptr) { + throw new FS.ErrnoError(48); + } + writeChunks(stream, HEAP8, ptr, length, position); + return { ptr, allocated: true }; + }; + node.stream_ops = stream_ops; + return node; + }, + absolutePath() { + abort('FS.absolutePath has been removed; use PATH_FS.resolve instead'); + }, + createFolder() { + abort('FS.createFolder has been removed; use FS.mkdir instead'); + }, + createLink() { + abort('FS.createLink has been removed; use FS.symlink instead'); + }, + joinPath() { + abort('FS.joinPath has been removed; use PATH.join instead'); + }, + mmapAlloc() { + abort('FS.mmapAlloc has been replaced by the top level function mmapAlloc'); + }, + standardizePath() { + abort('FS.standardizePath has been removed; use PATH.normalize instead'); + }, + }; + + var SYSCALLS = { + DEFAULT_POLLMASK:5, + calculateAt(dirfd, path, allowEmpty) { + if (PATH.isAbs(path)) { + return path; + } + // relative path + var dir; + if (dirfd === -100) { + dir = FS.cwd(); + } else { + var dirstream = SYSCALLS.getStreamFromFD(dirfd); + dir = dirstream.path; + } + if (path.length == 0) { + if (!allowEmpty) { + throw new FS.ErrnoError(44);; + } + return dir; + } + return dir + '/' + path; + }, + writeStat(buf, stat) { + HEAP32[((buf)>>2)] = stat.dev; + HEAP32[(((buf)+(4))>>2)] = stat.mode; + HEAPU32[(((buf)+(8))>>2)] = stat.nlink; + HEAP32[(((buf)+(12))>>2)] = stat.uid; + HEAP32[(((buf)+(16))>>2)] = stat.gid; + HEAP32[(((buf)+(20))>>2)] = stat.rdev; + HEAP64[(((buf)+(24))>>3)] = BigInt(stat.size); + HEAP32[(((buf)+(32))>>2)] = 4096; + HEAP32[(((buf)+(36))>>2)] = stat.blocks; + var atime = stat.atime.getTime(); + var mtime = stat.mtime.getTime(); + var ctime = stat.ctime.getTime(); + HEAP64[(((buf)+(40))>>3)] = BigInt(Math.floor(atime / 1000)); + HEAPU32[(((buf)+(48))>>2)] = (atime % 1000) * 1000 * 1000; + HEAP64[(((buf)+(56))>>3)] = BigInt(Math.floor(mtime / 1000)); + HEAPU32[(((buf)+(64))>>2)] = (mtime % 1000) * 1000 * 1000; + HEAP64[(((buf)+(72))>>3)] = BigInt(Math.floor(ctime / 1000)); + HEAPU32[(((buf)+(80))>>2)] = (ctime % 1000) * 1000 * 1000; + HEAP64[(((buf)+(88))>>3)] = BigInt(stat.ino); + return 0; + }, + writeStatFs(buf, stats) { + HEAP32[(((buf)+(4))>>2)] = stats.bsize; + HEAP32[(((buf)+(40))>>2)] = stats.bsize; + HEAP32[(((buf)+(8))>>2)] = stats.blocks; + HEAP32[(((buf)+(12))>>2)] = stats.bfree; + HEAP32[(((buf)+(16))>>2)] = stats.bavail; + HEAP32[(((buf)+(20))>>2)] = stats.files; + HEAP32[(((buf)+(24))>>2)] = stats.ffree; + HEAP32[(((buf)+(28))>>2)] = stats.fsid; + HEAP32[(((buf)+(44))>>2)] = stats.flags; // ST_NOSUID + HEAP32[(((buf)+(36))>>2)] = stats.namelen; + }, + doMsync(addr, stream, len, flags, offset) { + if (!FS.isFile(stream.node.mode)) { + throw new FS.ErrnoError(43); + } + if (flags & 2) { + // MAP_PRIVATE calls need not to be synced back to underlying fs + return 0; + } + var buffer = HEAPU8.slice(addr, addr + len); + FS.msync(stream, buffer, offset, len, flags); + }, + getStreamFromFD(fd) { + var stream = FS.getStreamChecked(fd); + return stream; + }, + varargs:undefined, + getStr(ptr) { + var ret = UTF8ToString(ptr); + return ret; + }, + }; + function ___syscall_fcntl64(fd, cmd, varargs) { + SYSCALLS.varargs = varargs; + try { + + var stream = SYSCALLS.getStreamFromFD(fd); + switch (cmd) { + case 0: { + var arg = syscallGetVarargI(); + if (arg < 0) { + return -28; + } + while (FS.streams[arg]) { + arg++; + } + var newStream; + newStream = FS.dupStream(stream, arg); + return newStream.fd; + } + case 1: + case 2: + return 0; // FD_CLOEXEC makes no sense for a single process. + case 3: + return stream.flags; + case 4: { + var arg = syscallGetVarargI(); + stream.flags |= arg; + return 0; + } + case 12: { + var arg = syscallGetVarargP(); + var offset = 0; + // We're always unlocked. + HEAP16[(((arg)+(offset))>>1)] = 2; + return 0; + } + case 13: + case 14: + // Pretend that the locking is successful. These are process-level locks, + // and Emscripten programs are a single process. If we supported linking a + // filesystem between programs, we'd need to do more here. + // See https://github.com/emscripten-core/emscripten/issues/23697 + return 0; + } + return -28; + } catch (e) { + if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + return -e.errno; + } + } + + function ___syscall_fstat64(fd, buf) { + try { + + return SYSCALLS.writeStat(buf, FS.fstat(fd)); + } catch (e) { + if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + return -e.errno; + } + } + + + function ___syscall_ioctl(fd, op, varargs) { + SYSCALLS.varargs = varargs; + try { + + var stream = SYSCALLS.getStreamFromFD(fd); + switch (op) { + case 21509: { + if (!stream.tty) return -59; + return 0; + } + case 21505: { + if (!stream.tty) return -59; + if (stream.tty.ops.ioctl_tcgets) { + var termios = stream.tty.ops.ioctl_tcgets(stream); + var argp = syscallGetVarargP(); + HEAP32[((argp)>>2)] = termios.c_iflag || 0; + HEAP32[(((argp)+(4))>>2)] = termios.c_oflag || 0; + HEAP32[(((argp)+(8))>>2)] = termios.c_cflag || 0; + HEAP32[(((argp)+(12))>>2)] = termios.c_lflag || 0; + for (var i = 0; i < 32; i++) { + HEAP8[(argp + i)+(17)] = termios.c_cc[i] || 0; + } + return 0; + } + return 0; + } + case 21510: + case 21511: + case 21512: { + if (!stream.tty) return -59; + return 0; // no-op, not actually adjusting terminal settings + } + case 21506: + case 21507: + case 21508: { + if (!stream.tty) return -59; + if (stream.tty.ops.ioctl_tcsets) { + var argp = syscallGetVarargP(); + var c_iflag = HEAP32[((argp)>>2)]; + var c_oflag = HEAP32[(((argp)+(4))>>2)]; + var c_cflag = HEAP32[(((argp)+(8))>>2)]; + var c_lflag = HEAP32[(((argp)+(12))>>2)]; + var c_cc = [] + for (var i = 0; i < 32; i++) { + c_cc.push(HEAP8[(argp + i)+(17)]); + } + return stream.tty.ops.ioctl_tcsets(stream.tty, op, { c_iflag, c_oflag, c_cflag, c_lflag, c_cc }); + } + return 0; // no-op, not actually adjusting terminal settings + } + case 21519: { + if (!stream.tty) return -59; + var argp = syscallGetVarargP(); + HEAP32[((argp)>>2)] = 0; + return 0; + } + case 21520: { + if (!stream.tty) return -59; + return -28; // not supported + } + case 21531: { + var argp = syscallGetVarargP(); + return FS.ioctl(stream, op, argp); + } + case 21523: { + // TODO: in theory we should write to the winsize struct that gets + // passed in, but for now musl doesn't read anything on it + if (!stream.tty) return -59; + if (stream.tty.ops.ioctl_tiocgwinsz) { + var winsize = stream.tty.ops.ioctl_tiocgwinsz(stream.tty); + var argp = syscallGetVarargP(); + HEAP16[((argp)>>1)] = winsize[0]; + HEAP16[(((argp)+(2))>>1)] = winsize[1]; + } + return 0; + } + case 21524: { + // TODO: technically, this ioctl call should change the window size. + // but, since emscripten doesn't have any concept of a terminal window + // yet, we'll just silently throw it away as we do TIOCGWINSZ + if (!stream.tty) return -59; + return 0; + } + case 21515: { + if (!stream.tty) return -59; + return 0; + } + default: return -28; // not supported + } + } catch (e) { + if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + return -e.errno; + } + } + + function ___syscall_lstat64(path, buf) { + try { + + path = SYSCALLS.getStr(path); + return SYSCALLS.writeStat(buf, FS.lstat(path)); + } catch (e) { + if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + return -e.errno; + } + } + + function ___syscall_newfstatat(dirfd, path, buf, flags) { + try { + + path = SYSCALLS.getStr(path); + var nofollow = flags & 256; + var allowEmpty = flags & 4096; + flags = flags & (~6400); + assert(!flags, `unknown flags in __syscall_newfstatat: ${flags}`); + path = SYSCALLS.calculateAt(dirfd, path, allowEmpty); + return SYSCALLS.writeStat(buf, nofollow ? FS.lstat(path) : FS.stat(path)); + } catch (e) { + if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + return -e.errno; + } + } + + + function ___syscall_openat(dirfd, path, flags, varargs) { + SYSCALLS.varargs = varargs; + try { + + path = SYSCALLS.getStr(path); + path = SYSCALLS.calculateAt(dirfd, path); + var mode = varargs ? syscallGetVarargI() : 0; + return FS.open(path, flags, mode).fd; + } catch (e) { + if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + return -e.errno; + } + } + + function ___syscall_rmdir(path) { + try { + + path = SYSCALLS.getStr(path); + FS.rmdir(path); + return 0; + } catch (e) { + if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + return -e.errno; + } + } + + function ___syscall_stat64(path, buf) { + try { + + path = SYSCALLS.getStr(path); + return SYSCALLS.writeStat(buf, FS.stat(path)); + } catch (e) { + if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + return -e.errno; + } + } + + function ___syscall_unlinkat(dirfd, path, flags) { + try { + + path = SYSCALLS.getStr(path); + path = SYSCALLS.calculateAt(dirfd, path); + if (flags === 0) { + FS.unlink(path); + } else if (flags === 512) { + FS.rmdir(path); + } else { + abort('Invalid flags passed to unlinkat'); + } + return 0; + } catch (e) { + if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + return -e.errno; + } + } + + var __abort_js = () => + abort('native code called abort()'); + + var isLeapYear = (year) => year%4 === 0 && (year%100 !== 0 || year%400 === 0); + + var MONTH_DAYS_LEAP_CUMULATIVE = [0,31,60,91,121,152,182,213,244,274,305,335]; + + var MONTH_DAYS_REGULAR_CUMULATIVE = [0,31,59,90,120,151,181,212,243,273,304,334]; + var ydayFromDate = (date) => { + var leap = isLeapYear(date.getFullYear()); + var monthDaysCumulative = (leap ? MONTH_DAYS_LEAP_CUMULATIVE : MONTH_DAYS_REGULAR_CUMULATIVE); + var yday = monthDaysCumulative[date.getMonth()] + date.getDate() - 1; // -1 since it's days since Jan 1 + + return yday; + }; + + var INT53_MAX = 9007199254740992; + + var INT53_MIN = -9007199254740992; + var bigintToI53Checked = (num) => (num < INT53_MIN || num > INT53_MAX) ? NaN : Number(num); + function __localtime_js(time, tmPtr) { + time = bigintToI53Checked(time); + + + var date = new Date(time*1000); + HEAP32[((tmPtr)>>2)] = date.getSeconds(); + HEAP32[(((tmPtr)+(4))>>2)] = date.getMinutes(); + HEAP32[(((tmPtr)+(8))>>2)] = date.getHours(); + HEAP32[(((tmPtr)+(12))>>2)] = date.getDate(); + HEAP32[(((tmPtr)+(16))>>2)] = date.getMonth(); + HEAP32[(((tmPtr)+(20))>>2)] = date.getFullYear()-1900; + HEAP32[(((tmPtr)+(24))>>2)] = date.getDay(); + + var yday = ydayFromDate(date)|0; + HEAP32[(((tmPtr)+(28))>>2)] = yday; + HEAP32[(((tmPtr)+(36))>>2)] = -(date.getTimezoneOffset() * 60); + + // Attention: DST is in December in South, and some regions don't have DST at all. + var start = new Date(date.getFullYear(), 0, 1); + var summerOffset = new Date(date.getFullYear(), 6, 1).getTimezoneOffset(); + var winterOffset = start.getTimezoneOffset(); + var dst = (summerOffset != winterOffset && date.getTimezoneOffset() == Math.min(winterOffset, summerOffset))|0; + HEAP32[(((tmPtr)+(32))>>2)] = dst; + ; + } + + + var __mktime_js = function(tmPtr) { + + var ret = (() => { + var date = new Date(HEAP32[(((tmPtr)+(20))>>2)] + 1900, + HEAP32[(((tmPtr)+(16))>>2)], + HEAP32[(((tmPtr)+(12))>>2)], + HEAP32[(((tmPtr)+(8))>>2)], + HEAP32[(((tmPtr)+(4))>>2)], + HEAP32[((tmPtr)>>2)], + 0); + + // There's an ambiguous hour when the time goes back; the tm_isdst field is + // used to disambiguate it. Date() basically guesses, so we fix it up if it + // guessed wrong, or fill in tm_isdst with the guess if it's -1. + var dst = HEAP32[(((tmPtr)+(32))>>2)]; + var guessedOffset = date.getTimezoneOffset(); + var start = new Date(date.getFullYear(), 0, 1); + var summerOffset = new Date(date.getFullYear(), 6, 1).getTimezoneOffset(); + var winterOffset = start.getTimezoneOffset(); + var dstOffset = Math.min(winterOffset, summerOffset); // DST is in December in South + if (dst < 0) { + // Attention: some regions don't have DST at all. + HEAP32[(((tmPtr)+(32))>>2)] = Number(summerOffset != winterOffset && dstOffset == guessedOffset); + } else if ((dst > 0) != (dstOffset == guessedOffset)) { + var nonDstOffset = Math.max(winterOffset, summerOffset); + var trueOffset = dst > 0 ? dstOffset : nonDstOffset; + // Don't try setMinutes(date.getMinutes() + ...) -- it's messed up. + date.setTime(date.getTime() + (trueOffset - guessedOffset)*60000); + } + + HEAP32[(((tmPtr)+(24))>>2)] = date.getDay(); + var yday = ydayFromDate(date)|0; + HEAP32[(((tmPtr)+(28))>>2)] = yday; + // To match expected behavior, update fields from date + HEAP32[((tmPtr)>>2)] = date.getSeconds(); + HEAP32[(((tmPtr)+(4))>>2)] = date.getMinutes(); + HEAP32[(((tmPtr)+(8))>>2)] = date.getHours(); + HEAP32[(((tmPtr)+(12))>>2)] = date.getDate(); + HEAP32[(((tmPtr)+(16))>>2)] = date.getMonth(); + HEAP32[(((tmPtr)+(20))>>2)] = date.getYear(); + + var timeMs = date.getTime(); + if (isNaN(timeMs)) { + return -1; + } + // Return time in microseconds + return timeMs / 1000; + })(); + return BigInt(ret); + }; + + var stringToUTF8 = (str, outPtr, maxBytesToWrite) => { + assert(typeof maxBytesToWrite == 'number', 'stringToUTF8(str, outPtr, maxBytesToWrite) is missing the third parameter that specifies the length of the output buffer!'); + return stringToUTF8Array(str, HEAPU8, outPtr, maxBytesToWrite); + }; + + var __tzset_js = (timezone, daylight, std_name, dst_name) => { + // TODO: Use (malleable) environment variables instead of system settings. + var currentYear = new Date().getFullYear(); + var winter = new Date(currentYear, 0, 1); + var summer = new Date(currentYear, 6, 1); + var winterOffset = winter.getTimezoneOffset(); + var summerOffset = summer.getTimezoneOffset(); + + // Local standard timezone offset. Local standard time is not adjusted for + // daylight savings. This code uses the fact that getTimezoneOffset returns + // a greater value during Standard Time versus Daylight Saving Time (DST). + // Thus it determines the expected output during Standard Time, and it + // compares whether the output of the given date the same (Standard) or less + // (DST). + var stdTimezoneOffset = Math.max(winterOffset, summerOffset); + + // timezone is specified as seconds west of UTC ("The external variable + // `timezone` shall be set to the difference, in seconds, between + // Coordinated Universal Time (UTC) and local standard time."), the same + // as returned by stdTimezoneOffset. + // See http://pubs.opengroup.org/onlinepubs/009695399/functions/tzset.html + HEAPU32[((timezone)>>2)] = stdTimezoneOffset * 60; + + HEAP32[((daylight)>>2)] = Number(winterOffset != summerOffset); + + var extractZone = (timezoneOffset) => { + // Why inverse sign? + // Read here https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/getTimezoneOffset + var sign = timezoneOffset >= 0 ? "-" : "+"; + + var absOffset = Math.abs(timezoneOffset) + var hours = String(Math.floor(absOffset / 60)).padStart(2, "0"); + var minutes = String(absOffset % 60).padStart(2, "0"); + + return `UTC${sign}${hours}${minutes}`; + } + + var winterName = extractZone(winterOffset); + var summerName = extractZone(summerOffset); + assert(winterName); + assert(summerName); + assert(lengthBytesUTF8(winterName) <= 16, `timezone name truncated to fit in TZNAME_MAX (${winterName})`); + assert(lengthBytesUTF8(summerName) <= 16, `timezone name truncated to fit in TZNAME_MAX (${summerName})`); + if (summerOffset < winterOffset) { + // Northern hemisphere + stringToUTF8(winterName, std_name, 17); + stringToUTF8(summerName, dst_name, 17); + } else { + stringToUTF8(winterName, dst_name, 17); + stringToUTF8(summerName, std_name, 17); + } + }; + + var _emscripten_date_now = () => Date.now(); + + var abortOnCannotGrowMemory = (requestedSize) => { + abort(`Cannot enlarge memory arrays to size ${requestedSize} bytes (OOM). Either (1) compile with -sINITIAL_MEMORY=X with X higher than the current value ${HEAP8.length}, (2) compile with -sALLOW_MEMORY_GROWTH which allows increasing the size at runtime, or (3) if you want malloc to return NULL (0) instead of this abort, compile with -sABORTING_MALLOC=0`); + }; + var _emscripten_resize_heap = (requestedSize) => { + var oldSize = HEAPU8.length; + // With CAN_ADDRESS_2GB or MEMORY64, pointers are already unsigned. + requestedSize >>>= 0; + abortOnCannotGrowMemory(requestedSize); + }; + + function _fd_close(fd) { + try { + + var stream = SYSCALLS.getStreamFromFD(fd); + FS.close(stream); + return 0; + } catch (e) { + if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + return e.errno; + } + } + + /** @param {number=} offset */ + var doReadv = (stream, iov, iovcnt, offset) => { + var ret = 0; + for (var i = 0; i < iovcnt; i++) { + var ptr = HEAPU32[((iov)>>2)]; + var len = HEAPU32[(((iov)+(4))>>2)]; + iov += 8; + var curr = FS.read(stream, HEAP8, ptr, len, offset); + if (curr < 0) return -1; + ret += curr; + if (curr < len) break; // nothing more to read + if (typeof offset != 'undefined') { + offset += curr; + } + } + return ret; + }; + + function _fd_read(fd, iov, iovcnt, pnum) { + try { + + var stream = SYSCALLS.getStreamFromFD(fd); + var num = doReadv(stream, iov, iovcnt); + HEAPU32[((pnum)>>2)] = num; + return 0; + } catch (e) { + if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + return e.errno; + } + } + + + function _fd_seek(fd, offset, whence, newOffset) { + offset = bigintToI53Checked(offset); + + + try { + + if (isNaN(offset)) return 61; + var stream = SYSCALLS.getStreamFromFD(fd); + FS.llseek(stream, offset, whence); + HEAP64[((newOffset)>>3)] = BigInt(stream.position); + if (stream.getdents && offset === 0 && whence === 0) stream.getdents = null; // reset readdir state + return 0; + } catch (e) { + if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + return e.errno; + } + ; + } + + /** @param {number=} offset */ + var doWritev = (stream, iov, iovcnt, offset) => { + var ret = 0; + for (var i = 0; i < iovcnt; i++) { + var ptr = HEAPU32[((iov)>>2)]; + var len = HEAPU32[(((iov)+(4))>>2)]; + iov += 8; + var curr = FS.write(stream, HEAP8, ptr, len, offset); + if (curr < 0) return -1; + ret += curr; + if (curr < len) { + // No more space to write. + break; + } + if (typeof offset != 'undefined') { + offset += curr; + } + } + return ret; + }; + + function _fd_write(fd, iov, iovcnt, pnum) { + try { + + var stream = SYSCALLS.getStreamFromFD(fd); + var num = doWritev(stream, iov, iovcnt); + HEAPU32[((pnum)>>2)] = num; + return 0; + } catch (e) { + if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + return e.errno; + } + } + + + var runtimeKeepaliveCounter = 0; + var keepRuntimeAlive = () => noExitRuntime || runtimeKeepaliveCounter > 0; + var _proc_exit = (code) => { + EXITSTATUS = code; + if (!keepRuntimeAlive()) { + Module['onExit']?.(code); + ABORT = true; + } + quit_(code, new ExitStatus(code)); + }; + + + /** @param {boolean|number=} implicit */ + var exitJS = (status, implicit) => { + EXITSTATUS = status; + + checkUnflushedContent(); + + // if exit() was called explicitly, warn the user if the runtime isn't actually being shut down + if (keepRuntimeAlive() && !implicit) { + var msg = `program exited (with status: ${status}), but keepRuntimeAlive() is set (counter=${runtimeKeepaliveCounter}) due to an async operation, so halting execution but not exiting the runtime or preventing further async execution (you can use emscripten_force_exit, if you want to force a true shutdown)`; + err(msg); + } + + _proc_exit(status); + }; + + var handleException = (e) => { + // Certain exception types we do not treat as errors since they are used for + // internal control flow. + // 1. ExitStatus, which is thrown by exit() + // 2. "unwind", which is thrown by emscripten_unwind_to_js_event_loop() and others + // that wish to return to JS event loop. + if (e instanceof ExitStatus || e == 'unwind') { + return EXITSTATUS; + } + checkStackCookie(); + if (e instanceof WebAssembly.RuntimeError) { + if (_emscripten_stack_get_current() <= 0) { + err('Stack overflow detected. You can try increasing -sSTACK_SIZE (currently set to 65536)'); + } + } + quit_(1, e); + }; + + + + var stackAlloc = (sz) => __emscripten_stack_alloc(sz); + var stringToUTF8OnStack = (str) => { + var size = lengthBytesUTF8(str) + 1; + var ret = stackAlloc(size); + stringToUTF8(str, ret, size); + return ret; + }; + + FS.createPreloadedFile = FS_createPreloadedFile; + FS.staticInit(); + // Set module methods based on EXPORTED_RUNTIME_METHODS + ; +// End JS library code + +function checkIncomingModuleAPI() { + ignoredModuleProp('fetchSettings'); +} +var wasmImports = { + /** @export */ + __syscall_fcntl64: ___syscall_fcntl64, + /** @export */ + __syscall_fstat64: ___syscall_fstat64, + /** @export */ + __syscall_ioctl: ___syscall_ioctl, + /** @export */ + __syscall_lstat64: ___syscall_lstat64, + /** @export */ + __syscall_newfstatat: ___syscall_newfstatat, + /** @export */ + __syscall_openat: ___syscall_openat, + /** @export */ + __syscall_rmdir: ___syscall_rmdir, + /** @export */ + __syscall_stat64: ___syscall_stat64, + /** @export */ + __syscall_unlinkat: ___syscall_unlinkat, + /** @export */ + _abort_js: __abort_js, + /** @export */ + _localtime_js: __localtime_js, + /** @export */ + _mktime_js: __mktime_js, + /** @export */ + _tzset_js: __tzset_js, + /** @export */ + emscripten_date_now: _emscripten_date_now, + /** @export */ + emscripten_resize_heap: _emscripten_resize_heap, + /** @export */ + fd_close: _fd_close, + /** @export */ + fd_read: _fd_read, + /** @export */ + fd_seek: _fd_seek, + /** @export */ + fd_write: _fd_write +}; +var wasmExports; +createWasm(); +var ___wasm_call_ctors = createExportWrapper('__wasm_call_ctors', 0); +var _main = Module['_main'] = createExportWrapper('__main_argc_argv', 2); +var _strerror = createExportWrapper('strerror', 1); +var _fflush = createExportWrapper('fflush', 1); +var _emscripten_stack_init = () => (_emscripten_stack_init = wasmExports['emscripten_stack_init'])(); +var _emscripten_stack_get_free = () => (_emscripten_stack_get_free = wasmExports['emscripten_stack_get_free'])(); +var _emscripten_stack_get_base = () => (_emscripten_stack_get_base = wasmExports['emscripten_stack_get_base'])(); +var _emscripten_stack_get_end = () => (_emscripten_stack_get_end = wasmExports['emscripten_stack_get_end'])(); +var __emscripten_stack_restore = (a0) => (__emscripten_stack_restore = wasmExports['_emscripten_stack_restore'])(a0); +var __emscripten_stack_alloc = (a0) => (__emscripten_stack_alloc = wasmExports['_emscripten_stack_alloc'])(a0); +var _emscripten_stack_get_current = () => (_emscripten_stack_get_current = wasmExports['emscripten_stack_get_current'])(); + + +// include: postamble.js +// === Auto-generated postamble setup entry stuff === + +var missingLibrarySymbols = [ + 'writeI53ToI64', + 'writeI53ToI64Clamped', + 'writeI53ToI64Signaling', + 'writeI53ToU64Clamped', + 'writeI53ToU64Signaling', + 'readI53FromI64', + 'readI53FromU64', + 'convertI32PairToI53', + 'convertI32PairToI53Checked', + 'convertU32PairToI53', + 'getTempRet0', + 'setTempRet0', + 'zeroMemory', + 'getHeapMax', + 'growMemory', + 'inetPton4', + 'inetNtop4', + 'inetPton6', + 'inetNtop6', + 'readSockaddr', + 'writeSockaddr', + 'emscriptenLog', + 'readEmAsmArgs', + 'jstoi_q', + 'getExecutableName', + 'listenOnce', + 'autoResumeAudioContext', + 'getDynCaller', + 'dynCall', + 'runtimeKeepalivePush', + 'runtimeKeepalivePop', + 'callUserCallback', + 'maybeExit', + 'asmjsMangle', + 'alignMemory', + 'HandleAllocator', + 'getNativeTypeSize', + 'addOnInit', + 'addOnPostCtor', + 'addOnPreMain', + 'addOnExit', + 'STACK_SIZE', + 'STACK_ALIGN', + 'POINTER_SIZE', + 'ASSERTIONS', + 'getCFunc', + 'ccall', + 'cwrap', + 'uleb128Encode', + 'sigToWasmTypes', + 'generateFuncType', + 'convertJsFunctionToWasm', + 'getEmptyTableSlot', + 'updateTableMap', + 'getFunctionAddress', + 'addFunction', + 'removeFunction', + 'reallyNegative', + 'unSign', + 'strLen', + 'reSign', + 'formatString', + 'intArrayToString', + 'AsciiToString', + 'stringToAscii', + 'UTF16ToString', + 'stringToUTF16', + 'lengthBytesUTF16', + 'UTF32ToString', + 'stringToUTF32', + 'lengthBytesUTF32', + 'stringToNewUTF8', + 'writeArrayToMemory', + 'registerKeyEventCallback', + 'maybeCStringToJsString', + 'findEventTarget', + 'getBoundingClientRect', + 'fillMouseEventData', + 'registerMouseEventCallback', + 'registerWheelEventCallback', + 'registerUiEventCallback', + 'registerFocusEventCallback', + 'fillDeviceOrientationEventData', + 'registerDeviceOrientationEventCallback', + 'fillDeviceMotionEventData', + 'registerDeviceMotionEventCallback', + 'screenOrientation', + 'fillOrientationChangeEventData', + 'registerOrientationChangeEventCallback', + 'fillFullscreenChangeEventData', + 'registerFullscreenChangeEventCallback', + 'JSEvents_requestFullscreen', + 'JSEvents_resizeCanvasForFullscreen', + 'registerRestoreOldStyle', + 'hideEverythingExceptGivenElement', + 'restoreHiddenElements', + 'setLetterbox', + 'softFullscreenResizeWebGLRenderTarget', + 'doRequestFullscreen', + 'fillPointerlockChangeEventData', + 'registerPointerlockChangeEventCallback', + 'registerPointerlockErrorEventCallback', + 'requestPointerLock', + 'fillVisibilityChangeEventData', + 'registerVisibilityChangeEventCallback', + 'registerTouchEventCallback', + 'fillGamepadEventData', + 'registerGamepadEventCallback', + 'registerBeforeUnloadEventCallback', + 'fillBatteryEventData', + 'battery', + 'registerBatteryEventCallback', + 'setCanvasElementSize', + 'getCanvasElementSize', + 'jsStackTrace', + 'getCallstack', + 'convertPCtoSourceLocation', + 'getEnvStrings', + 'checkWasiClock', + 'wasiRightsToMuslOFlags', + 'wasiOFlagsToMuslOFlags', + 'safeSetTimeout', + 'setImmediateWrapped', + 'safeRequestAnimationFrame', + 'clearImmediateWrapped', + 'registerPostMainLoop', + 'registerPreMainLoop', + 'getPromise', + 'makePromise', + 'idsToPromises', + 'makePromiseCallback', + 'ExceptionInfo', + 'findMatchingCatch', + 'Browser_asyncPrepareDataCounter', + 'arraySum', + 'addDays', + 'getSocketFromFD', + 'getSocketAddress', + 'FS_unlink', + 'FS_mkdirTree', + '_setNetworkCallback', + 'heapObjectForWebGLType', + 'toTypedArrayIndex', + 'webgl_enable_ANGLE_instanced_arrays', + 'webgl_enable_OES_vertex_array_object', + 'webgl_enable_WEBGL_draw_buffers', + 'webgl_enable_WEBGL_multi_draw', + 'webgl_enable_EXT_polygon_offset_clamp', + 'webgl_enable_EXT_clip_control', + 'webgl_enable_WEBGL_polygon_mode', + 'emscriptenWebGLGet', + 'computeUnpackAlignedImageSize', + 'colorChannelsInGlTextureFormat', + 'emscriptenWebGLGetTexPixelData', + 'emscriptenWebGLGetUniform', + 'webglGetUniformLocation', + 'webglPrepareUniformLocationsBeforeFirstUse', + 'webglGetLeftBracePos', + 'emscriptenWebGLGetVertexAttrib', + '__glGetActiveAttribOrUniform', + 'writeGLArray', + 'registerWebGlEventCallback', + 'runAndAbortIfError', + 'ALLOC_NORMAL', + 'ALLOC_STACK', + 'allocate', + 'writeStringToMemory', + 'writeAsciiToMemory', + 'demangle', + 'stackTrace', +]; +missingLibrarySymbols.forEach(missingLibrarySymbol) + +var unexportedSymbols = [ + 'run', + 'addRunDependency', + 'removeRunDependency', + 'out', + 'err', + 'callMain', + 'abort', + 'wasmMemory', + 'wasmExports', + 'writeStackCookie', + 'checkStackCookie', + 'INT53_MAX', + 'INT53_MIN', + 'bigintToI53Checked', + 'stackSave', + 'stackRestore', + 'stackAlloc', + 'ptrToString', + 'exitJS', + 'abortOnCannotGrowMemory', + 'ENV', + 'ERRNO_CODES', + 'strError', + 'DNS', + 'Protocols', + 'Sockets', + 'timers', + 'warnOnce', + 'readEmAsmArgsArray', + 'jstoi_s', + 'handleException', + 'keepRuntimeAlive', + 'asyncLoad', + 'mmapAlloc', + 'wasmTable', + 'noExitRuntime', + 'addOnPreRun', + 'addOnPostRun', + 'freeTableIndexes', + 'functionsInTableMap', + 'setValue', + 'getValue', + 'PATH', + 'PATH_FS', + 'UTF8Decoder', + 'UTF8ArrayToString', + 'UTF8ToString', + 'stringToUTF8Array', + 'stringToUTF8', + 'lengthBytesUTF8', + 'intArrayFromString', + 'UTF16Decoder', + 'stringToUTF8OnStack', + 'JSEvents', + 'specialHTMLTargets', + 'findCanvasEventTarget', + 'currentFullscreenStrategy', + 'restoreOldWindowedStyle', + 'UNWIND_CACHE', + 'ExitStatus', + 'doReadv', + 'doWritev', + 'initRandomFill', + 'randomFill', + 'emSetImmediate', + 'emClearImmediate_deps', + 'emClearImmediate', + 'promiseMap', + 'uncaughtExceptionCount', + 'exceptionLast', + 'exceptionCaught', + 'Browser', + 'getPreloadedImageData__data', + 'wget', + 'MONTH_DAYS_REGULAR', + 'MONTH_DAYS_LEAP', + 'MONTH_DAYS_REGULAR_CUMULATIVE', + 'MONTH_DAYS_LEAP_CUMULATIVE', + 'isLeapYear', + 'ydayFromDate', + 'SYSCALLS', + 'preloadPlugins', + 'FS_createPreloadedFile', + 'FS_modeStringToFlags', + 'FS_getMode', + 'FS_stdin_getChar_buffer', + 'FS_stdin_getChar', + 'FS_createPath', + 'FS_createDevice', + 'FS_readFile', + 'FS', + 'FS_createDataFile', + 'FS_createLazyFile', + 'MEMFS', + 'TTY', + 'PIPEFS', + 'SOCKFS', + 'tempFixedLengthArray', + 'miniTempWebGLFloatBuffers', + 'miniTempWebGLIntBuffers', + 'GL', + 'AL', + 'GLUT', + 'EGL', + 'GLEW', + 'IDBStore', + 'SDL', + 'SDL_gfx', + 'allocateUTF8', + 'allocateUTF8OnStack', + 'print', + 'printErr', +]; +unexportedSymbols.forEach(unexportedRuntimeSymbol); + + + +var calledRun; + +function callMain(args = []) { + assert(runDependencies == 0, 'cannot call main when async dependencies remain! (listen on Module["onRuntimeInitialized"])'); + assert(typeof onPreRuns === 'undefined' || onPreRuns.length == 0, 'cannot call main when preRun functions remain to be called'); + + var entryFunction = _main; + + args.unshift(thisProgram); + + var argc = args.length; + var argv = stackAlloc((argc + 1) * 4); + var argv_ptr = argv; + args.forEach((arg) => { + HEAPU32[((argv_ptr)>>2)] = stringToUTF8OnStack(arg); + argv_ptr += 4; + }); + HEAPU32[((argv_ptr)>>2)] = 0; + + try { + + var ret = entryFunction(argc, argv); + + // if we're not running an evented main loop, it's time to exit + exitJS(ret, /* implicit = */ true); + return ret; + } catch (e) { + return handleException(e); + } +} + +function stackCheckInit() { + // This is normally called automatically during __wasm_call_ctors but need to + // get these values before even running any of the ctors so we call it redundantly + // here. + _emscripten_stack_init(); + // TODO(sbc): Move writeStackCookie to native to to avoid this. + writeStackCookie(); +} + +function run(args = arguments_) { + + if (runDependencies > 0) { + dependenciesFulfilled = run; + return; + } + + stackCheckInit(); + + preRun(); + + // a preRun added a dependency, run will be called later + if (runDependencies > 0) { + dependenciesFulfilled = run; + return; + } + + function doRun() { + // run may have just been called through dependencies being fulfilled just in this very frame, + // or while the async setStatus time below was happening + assert(!calledRun); + calledRun = true; + Module['calledRun'] = true; + + if (ABORT) return; + + initRuntime(); + + preMain(); + + Module['onRuntimeInitialized']?.(); + consumedModuleProp('onRuntimeInitialized'); + + var noInitialRun = Module['noInitialRun'];legacyModuleProp('noInitialRun', 'noInitialRun'); + if (!noInitialRun) callMain(args); + + postRun(); + } + + if (Module['setStatus']) { + Module['setStatus']('Running...'); + setTimeout(() => { + setTimeout(() => Module['setStatus'](''), 1); + doRun(); + }, 1); + } else + { + doRun(); + } + checkStackCookie(); +} + +function checkUnflushedContent() { + // Compiler settings do not allow exiting the runtime, so flushing + // the streams is not possible. but in ASSERTIONS mode we check + // if there was something to flush, and if so tell the user they + // should request that the runtime be exitable. + // Normally we would not even include flush() at all, but in ASSERTIONS + // builds we do so just for this check, and here we see if there is any + // content to flush, that is, we check if there would have been + // something a non-ASSERTIONS build would have not seen. + // How we flush the streams depends on whether we are in SYSCALLS_REQUIRE_FILESYSTEM=0 + // mode (which has its own special function for this; otherwise, all + // the code is inside libc) + var oldOut = out; + var oldErr = err; + var has = false; + out = err = (x) => { + has = true; + } + try { // it doesn't matter if it fails + _fflush(0); + // also flush in the JS FS layer + ['stdout', 'stderr'].forEach((name) => { + var info = FS.analyzePath('/dev/' + name); + if (!info) return; + var stream = info.object; + var rdev = stream.rdev; + var tty = TTY.ttys[rdev]; + if (tty?.output?.length) { + has = true; + } + }); + } catch(e) {} + out = oldOut; + err = oldErr; + if (has) { + warnOnce('stdio streams had content in them that was not flushed. you should set EXIT_RUNTIME to 1 (see the Emscripten FAQ), or make sure to emit a newline when you printf etc.'); + } +} + +if (Module['preInit']) { + if (typeof Module['preInit'] == 'function') Module['preInit'] = [Module['preInit']]; + while (Module['preInit'].length > 0) { + Module['preInit'].pop()(); + } +} +consumedModuleProp('preInit'); + +run(); + +// end include: postamble.js + diff --git a/thirdparty/libzip-1.11.3/build-emcmake/examples/in-memory.wasm b/thirdparty/libzip-1.11.3/build-emcmake/examples/in-memory.wasm new file mode 100755 index 0000000000000000000000000000000000000000..65e500e716ca8b7ce7e3396e098564ad14288492 GIT binary patch literal 371069 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]BE)zlboy`cmy`9^# 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

9QMvoCXQSH^871!o?>zutg$t21;OImciWFT~k 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 W5i4H;D&$ESEl-bzn!**# + + Redistribution and use in source and binary forms, with or without + modification, are permitted provided that the following conditions + are met: + 1. Redistributions of source code must retain the above copyright + notice, this list of conditions and the following disclaimer. + 2. Redistributions in binary form must reproduce the above copyright + notice, this list of conditions and the following disclaimer in + the documentation and/or other materials provided with the + distribution. + 3. The names of the authors may not be used to endorse or promote + products derived from this software without specific prior + written permission. + + THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS + OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE + ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY + DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE + GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS + INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER + IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR + OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN + IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +#if defined(__has_feature) + #if !__has_feature(nullability) + #define _Nullable + #define _Nonnull + #endif +#else + #define _Nullable + #define _Nonnull +#endif + +#ifdef __cplusplus +extern "C" { +#if 0 +} /* fix autoindent */ +#endif +#endif + +#include + +#ifndef ZIP_EXTERN +#ifndef ZIP_STATIC +#ifdef _WIN32 +#define ZIP_EXTERN __declspec(dllimport) +#elif defined(__GNUC__) && __GNUC__ >= 4 +#define ZIP_EXTERN __attribute__((visibility("default"))) +#else +#define ZIP_EXTERN +#endif +#else +#define ZIP_EXTERN +#endif +#endif + +#ifndef ZIP_DEPRECATED +#if defined(__GNUC__) || defined(__clang__) +#define ZIP_DEPRECATED(x) __attribute__((deprecated(x))) +#elif defined(_MSC_VER) +#define ZIP_DEPRECATED(x) __declspec(deprecated(x)) +#else +#define ZIP_DEPRECATED(x) +#endif +#endif + +#include +#include +#include + +/* flags for zip_open */ + +#define ZIP_CREATE 1 +#define ZIP_EXCL 2 +#define ZIP_CHECKCONS 4 +#define ZIP_TRUNCATE 8 +#define ZIP_RDONLY 16 + + +/* flags for zip_name_locate, zip_fopen, zip_stat, ... */ + +#define ZIP_FL_NOCASE 1u /* ignore case on name lookup */ +#define ZIP_FL_NODIR 2u /* ignore directory component */ +#define ZIP_FL_COMPRESSED 4u /* read compressed data */ +#define ZIP_FL_UNCHANGED 8u /* use original data, ignoring changes */ +/* 16u was ZIP_FL_RECOMPRESS, which is deprecated */ +#define ZIP_FL_ENCRYPTED 32u /* read encrypted data (implies ZIP_FL_COMPRESSED) */ +#define ZIP_FL_ENC_GUESS 0u /* guess string encoding (is default) */ +#define ZIP_FL_ENC_RAW 64u /* get unmodified string */ +#define ZIP_FL_ENC_STRICT 128u /* follow specification strictly */ +#define ZIP_FL_LOCAL 256u /* in local header */ +#define ZIP_FL_CENTRAL 512u /* in central directory */ +/* 1024u reserved for internal use */ +#define ZIP_FL_ENC_UTF_8 2048u /* string is UTF-8 encoded */ +#define ZIP_FL_ENC_CP437 4096u /* string is CP437 encoded */ +#define ZIP_FL_OVERWRITE 8192u /* zip_file_add: if file with name exists, overwrite (replace) it */ + +/* archive global flags flags */ + +#define ZIP_AFL_RDONLY 2u /* read only -- cannot be cleared */ +#define ZIP_AFL_IS_TORRENTZIP 4u /* current archive is torrentzipped */ +#define ZIP_AFL_WANT_TORRENTZIP 8u /* write archive in torrentzip format */ +#define ZIP_AFL_CREATE_OR_KEEP_FILE_FOR_EMPTY_ARCHIVE 16u /* don't remove file if archive is empty */ + + +/* create a new extra field */ + +#define ZIP_EXTRA_FIELD_ALL ZIP_UINT16_MAX +#define ZIP_EXTRA_FIELD_NEW ZIP_UINT16_MAX + +/* length parameter to various functions */ + +#define ZIP_LENGTH_TO_END 0 +#define ZIP_LENGTH_UNCHECKED (-2) /* only supported by zip_source_file and its variants */ + +/* libzip error codes */ + +#define ZIP_ER_OK 0 /* N No error */ +#define ZIP_ER_MULTIDISK 1 /* N Multi-disk zip archives not supported */ +#define ZIP_ER_RENAME 2 /* S Renaming temporary file failed */ +#define ZIP_ER_CLOSE 3 /* S Closing zip archive failed */ +#define ZIP_ER_SEEK 4 /* S Seek error */ +#define ZIP_ER_READ 5 /* S Read error */ +#define ZIP_ER_WRITE 6 /* S Write error */ +#define ZIP_ER_CRC 7 /* N CRC error */ +#define ZIP_ER_ZIPCLOSED 8 /* N Containing zip archive was closed */ +#define ZIP_ER_NOENT 9 /* N No such file */ +#define ZIP_ER_EXISTS 10 /* N File already exists */ +#define ZIP_ER_OPEN 11 /* S Can't open file */ +#define ZIP_ER_TMPOPEN 12 /* S Failure to create temporary file */ +#define ZIP_ER_ZLIB 13 /* Z Zlib error */ +#define ZIP_ER_MEMORY 14 /* N Malloc failure */ +#define ZIP_ER_CHANGED 15 /* N Entry has been changed */ +#define ZIP_ER_COMPNOTSUPP 16 /* N Compression method not supported */ +#define ZIP_ER_EOF 17 /* N Premature end of file */ +#define ZIP_ER_INVAL 18 /* N Invalid argument */ +#define ZIP_ER_NOZIP 19 /* N Not a zip archive */ +#define ZIP_ER_INTERNAL 20 /* N Internal error */ +#define ZIP_ER_INCONS 21 /* L Zip archive inconsistent */ +#define ZIP_ER_REMOVE 22 /* S Can't remove file */ +#define ZIP_ER_DELETED 23 /* N Entry has been deleted */ +#define ZIP_ER_ENCRNOTSUPP 24 /* N Encryption method not supported */ +#define ZIP_ER_RDONLY 25 /* N Read-only archive */ +#define ZIP_ER_NOPASSWD 26 /* N No password provided */ +#define ZIP_ER_WRONGPASSWD 27 /* N Wrong password provided */ +#define ZIP_ER_OPNOTSUPP 28 /* N Operation not supported */ +#define ZIP_ER_INUSE 29 /* N Resource still in use */ +#define ZIP_ER_TELL 30 /* S Tell error */ +#define ZIP_ER_COMPRESSED_DATA 31 /* N Compressed data invalid */ +#define ZIP_ER_CANCELLED 32 /* N Operation cancelled */ +#define ZIP_ER_DATA_LENGTH 33 /* N Unexpected length of data */ +#define ZIP_ER_NOT_ALLOWED 34 /* N Not allowed in torrentzip */ +#define ZIP_ER_TRUNCATED_ZIP 35 /* N Possibly truncated or corrupted zip archive */ + +/* type of system error value */ + +#define ZIP_ET_NONE 0 /* sys_err unused */ +#define ZIP_ET_SYS 1 /* sys_err is errno */ +#define ZIP_ET_ZLIB 2 /* sys_err is zlib error code */ +#define ZIP_ET_LIBZIP 3 /* sys_err is libzip error code */ + +/* compression methods */ + +#define ZIP_CM_DEFAULT -1 /* better of deflate or store */ +#define ZIP_CM_STORE 0 /* stored (uncompressed) */ +#define ZIP_CM_SHRINK 1 /* shrunk */ +#define ZIP_CM_REDUCE_1 2 /* reduced with factor 1 */ +#define ZIP_CM_REDUCE_2 3 /* reduced with factor 2 */ +#define ZIP_CM_REDUCE_3 4 /* reduced with factor 3 */ +#define ZIP_CM_REDUCE_4 5 /* reduced with factor 4 */ +#define ZIP_CM_IMPLODE 6 /* imploded */ +/* 7 - Reserved for Tokenizing compression algorithm */ +#define ZIP_CM_DEFLATE 8 /* deflated */ +#define ZIP_CM_DEFLATE64 9 /* deflate64 */ +#define ZIP_CM_PKWARE_IMPLODE 10 /* PKWARE imploding */ +/* 11 - Reserved by PKWARE */ +#define ZIP_CM_BZIP2 12 /* compressed using BZIP2 algorithm */ +/* 13 - Reserved by PKWARE */ +#define ZIP_CM_LZMA 14 /* LZMA (EFS) */ +/* 15-17 - Reserved by PKWARE */ +#define ZIP_CM_TERSE 18 /* compressed using IBM TERSE (new) */ +#define ZIP_CM_LZ77 19 /* IBM LZ77 z Architecture (PFS) */ +/* 20 - old value for Zstandard */ +#define ZIP_CM_LZMA2 33 +#define ZIP_CM_ZSTD 93 /* Zstandard compressed data */ +#define ZIP_CM_XZ 95 /* XZ compressed data */ +#define ZIP_CM_JPEG 96 /* Compressed Jpeg data */ +#define ZIP_CM_WAVPACK 97 /* WavPack compressed data */ +#define ZIP_CM_PPMD 98 /* PPMd version I, Rev 1 */ + +/* encryption methods */ + +#define ZIP_EM_NONE 0 /* not encrypted */ +#define ZIP_EM_TRAD_PKWARE 1 /* traditional PKWARE encryption */ +#if 0 /* Strong Encryption Header not parsed yet */ +#define ZIP_EM_DES 0x6601 /* strong encryption: DES */ +#define ZIP_EM_RC2_OLD 0x6602 /* strong encryption: RC2, version < 5.2 */ +#define ZIP_EM_3DES_168 0x6603 +#define ZIP_EM_3DES_112 0x6609 +#define ZIP_EM_PKZIP_AES_128 0x660e +#define ZIP_EM_PKZIP_AES_192 0x660f +#define ZIP_EM_PKZIP_AES_256 0x6610 +#define ZIP_EM_RC2 0x6702 /* strong encryption: RC2, version >= 5.2 */ +#define ZIP_EM_RC4 0x6801 +#endif +#define ZIP_EM_AES_128 0x0101 /* Winzip AES encryption */ +#define ZIP_EM_AES_192 0x0102 +#define ZIP_EM_AES_256 0x0103 +#define ZIP_EM_UNKNOWN 0xffff /* unknown algorithm */ + +#define ZIP_OPSYS_DOS 0x00u +#define ZIP_OPSYS_AMIGA 0x01u +#define ZIP_OPSYS_OPENVMS 0x02u +#define ZIP_OPSYS_UNIX 0x03u +#define ZIP_OPSYS_VM_CMS 0x04u +#define ZIP_OPSYS_ATARI_ST 0x05u +#define ZIP_OPSYS_OS_2 0x06u +#define ZIP_OPSYS_MACINTOSH 0x07u +#define ZIP_OPSYS_Z_SYSTEM 0x08u +#define ZIP_OPSYS_CPM 0x09u +#define ZIP_OPSYS_WINDOWS_NTFS 0x0au +#define ZIP_OPSYS_MVS 0x0bu +#define ZIP_OPSYS_VSE 0x0cu +#define ZIP_OPSYS_ACORN_RISC 0x0du +#define ZIP_OPSYS_VFAT 0x0eu +#define ZIP_OPSYS_ALTERNATE_MVS 0x0fu +#define ZIP_OPSYS_BEOS 0x10u +#define ZIP_OPSYS_TANDEM 0x11u +#define ZIP_OPSYS_OS_400 0x12u +#define ZIP_OPSYS_OS_X 0x13u + +#define ZIP_OPSYS_DEFAULT ZIP_OPSYS_UNIX + + +enum zip_source_cmd { + ZIP_SOURCE_OPEN, /* prepare for reading */ + ZIP_SOURCE_READ, /* read data */ + ZIP_SOURCE_CLOSE, /* reading is done */ + ZIP_SOURCE_STAT, /* get meta information */ + ZIP_SOURCE_ERROR, /* get error information */ + ZIP_SOURCE_FREE, /* cleanup and free resources */ + ZIP_SOURCE_SEEK, /* set position for reading */ + ZIP_SOURCE_TELL, /* get read position */ + ZIP_SOURCE_BEGIN_WRITE, /* prepare for writing */ + ZIP_SOURCE_COMMIT_WRITE, /* writing is done */ + ZIP_SOURCE_ROLLBACK_WRITE, /* discard written changes */ + ZIP_SOURCE_WRITE, /* write data */ + ZIP_SOURCE_SEEK_WRITE, /* set position for writing */ + ZIP_SOURCE_TELL_WRITE, /* get write position */ + ZIP_SOURCE_SUPPORTS, /* check whether source supports command */ + ZIP_SOURCE_REMOVE, /* remove file */ + ZIP_SOURCE_RESERVED_1, /* previously used internally */ + ZIP_SOURCE_BEGIN_WRITE_CLONING, /* like ZIP_SOURCE_BEGIN_WRITE, but keep part of original file */ + ZIP_SOURCE_ACCEPT_EMPTY, /* whether empty files are valid archives */ + ZIP_SOURCE_GET_FILE_ATTRIBUTES, /* get additional file attributes */ + ZIP_SOURCE_SUPPORTS_REOPEN, /* allow reading from changed entry */ + ZIP_SOURCE_GET_DOS_TIME /* get last modification time in DOS format */ +}; +typedef enum zip_source_cmd zip_source_cmd_t; + +#define ZIP_SOURCE_MAKE_COMMAND_BITMASK(cmd) (((zip_int64_t)1) << (cmd)) + +#define ZIP_SOURCE_CHECK_SUPPORTED(supported, cmd) (((supported) & ZIP_SOURCE_MAKE_COMMAND_BITMASK(cmd)) != 0) + +/* clang-format off */ + +#define ZIP_SOURCE_SUPPORTS_READABLE (ZIP_SOURCE_MAKE_COMMAND_BITMASK(ZIP_SOURCE_OPEN) \ + | ZIP_SOURCE_MAKE_COMMAND_BITMASK(ZIP_SOURCE_READ) \ + | ZIP_SOURCE_MAKE_COMMAND_BITMASK(ZIP_SOURCE_CLOSE) \ + | ZIP_SOURCE_MAKE_COMMAND_BITMASK(ZIP_SOURCE_STAT) \ + | ZIP_SOURCE_MAKE_COMMAND_BITMASK(ZIP_SOURCE_ERROR) \ + | ZIP_SOURCE_MAKE_COMMAND_BITMASK(ZIP_SOURCE_FREE)) + +#define ZIP_SOURCE_SUPPORTS_SEEKABLE (ZIP_SOURCE_SUPPORTS_READABLE \ + | ZIP_SOURCE_MAKE_COMMAND_BITMASK(ZIP_SOURCE_SEEK) \ + | ZIP_SOURCE_MAKE_COMMAND_BITMASK(ZIP_SOURCE_TELL) \ + | ZIP_SOURCE_MAKE_COMMAND_BITMASK(ZIP_SOURCE_SUPPORTS)) + +#define ZIP_SOURCE_SUPPORTS_WRITABLE (ZIP_SOURCE_SUPPORTS_SEEKABLE \ + | ZIP_SOURCE_MAKE_COMMAND_BITMASK(ZIP_SOURCE_BEGIN_WRITE) \ + | ZIP_SOURCE_MAKE_COMMAND_BITMASK(ZIP_SOURCE_COMMIT_WRITE) \ + | ZIP_SOURCE_MAKE_COMMAND_BITMASK(ZIP_SOURCE_ROLLBACK_WRITE) \ + | ZIP_SOURCE_MAKE_COMMAND_BITMASK(ZIP_SOURCE_WRITE) \ + | ZIP_SOURCE_MAKE_COMMAND_BITMASK(ZIP_SOURCE_SEEK_WRITE) \ + | ZIP_SOURCE_MAKE_COMMAND_BITMASK(ZIP_SOURCE_TELL_WRITE) \ + | ZIP_SOURCE_MAKE_COMMAND_BITMASK(ZIP_SOURCE_REMOVE)) + +/* clang-format on */ + +/* for use by sources */ +struct zip_source_args_seek { + zip_int64_t offset; + int whence; +}; + +typedef struct zip_source_args_seek zip_source_args_seek_t; +#define ZIP_SOURCE_GET_ARGS(type, data, len, error) ((len) < sizeof(type) ? zip_error_set((error), ZIP_ER_INVAL, 0), (type *)NULL : (type *)(data)) + + +/* error information */ +/* use zip_error_*() to access */ +struct zip_error { + int zip_err; /* libzip error code (ZIP_ER_*) */ + int sys_err; /* copy of errno (E*) or zlib error code */ + char *_Nullable str; /* string representation or NULL */ +}; + +#define ZIP_STAT_NAME 0x0001u +#define ZIP_STAT_INDEX 0x0002u +#define ZIP_STAT_SIZE 0x0004u +#define ZIP_STAT_COMP_SIZE 0x0008u +#define ZIP_STAT_MTIME 0x0010u +#define ZIP_STAT_CRC 0x0020u +#define ZIP_STAT_COMP_METHOD 0x0040u +#define ZIP_STAT_ENCRYPTION_METHOD 0x0080u +#define ZIP_STAT_FLAGS 0x0100u + +struct zip_stat { + zip_uint64_t valid; /* which fields have valid values */ + const char *_Nullable name; /* name of the file */ + zip_uint64_t index; /* index within archive */ + zip_uint64_t size; /* size of file (uncompressed) */ + zip_uint64_t comp_size; /* size of file (compressed) */ + time_t mtime; /* modification time */ + zip_uint32_t crc; /* crc of file data */ + zip_uint16_t comp_method; /* compression method used */ + zip_uint16_t encryption_method; /* encryption method used */ + zip_uint32_t flags; /* reserved for future use */ +}; + +struct zip_buffer_fragment { + zip_uint8_t *_Nonnull data; + zip_uint64_t length; +}; + +struct zip_file_attributes { + zip_uint64_t valid; /* which fields have valid values */ + zip_uint8_t version; /* version of this struct, currently 1 */ + zip_uint8_t host_system; /* host system on which file was created */ + zip_uint8_t ascii; /* flag whether file is ASCII text */ + zip_uint8_t version_needed; /* minimum version needed to extract file */ + zip_uint32_t external_file_attributes; /* external file attributes (host-system specific) */ + zip_uint16_t general_purpose_bit_flags; /* general purpose big flags, only some bits are honored */ + zip_uint16_t general_purpose_bit_mask; /* which bits in general_purpose_bit_flags are valid */ +}; + +#define ZIP_FILE_ATTRIBUTES_HOST_SYSTEM 0x0001u +#define ZIP_FILE_ATTRIBUTES_ASCII 0x0002u +#define ZIP_FILE_ATTRIBUTES_VERSION_NEEDED 0x0004u +#define ZIP_FILE_ATTRIBUTES_EXTERNAL_FILE_ATTRIBUTES 0x0008u +#define ZIP_FILE_ATTRIBUTES_GENERAL_PURPOSE_BIT_FLAGS 0x0010u + +struct zip; +struct zip_file; +struct zip_source; + +typedef struct zip zip_t; +typedef struct zip_error zip_error_t; +typedef struct zip_file zip_file_t; +typedef struct zip_file_attributes zip_file_attributes_t; +typedef struct zip_source zip_source_t; +typedef struct zip_stat zip_stat_t; +typedef struct zip_buffer_fragment zip_buffer_fragment_t; + +typedef zip_uint32_t zip_flags_t; + +typedef zip_int64_t (*zip_source_callback)(void *_Nullable, void *_Nullable, zip_uint64_t, zip_source_cmd_t); +typedef zip_int64_t (*zip_source_layered_callback)(zip_source_t *_Nonnull, void *_Nullable, void *_Nullable, zip_uint64_t, enum zip_source_cmd); +typedef void (*zip_progress_callback)(zip_t *_Nonnull, double, void *_Nullable); +typedef int (*zip_cancel_callback)(zip_t *_Nonnull, void *_Nullable); + +#ifndef ZIP_DISABLE_DEPRECATED +#define ZIP_FL_RECOMPRESS 16u /* force recompression of data */ + +typedef void (*zip_progress_callback_t)(double); +ZIP_DEPRECATED("use 'zip_register_progress_callback_with_state' instead") ZIP_EXTERN void zip_register_progress_callback(zip_t *_Nonnull, zip_progress_callback_t _Nullable); + +ZIP_DEPRECATED("use 'zip_file_add' instead") ZIP_EXTERN zip_int64_t zip_add(zip_t *_Nonnull, const char *_Nonnull, zip_source_t *_Nonnull); +ZIP_DEPRECATED("use 'zip_dir_add' instead") ZIP_EXTERN zip_int64_t zip_add_dir(zip_t *_Nonnull, const char *_Nonnull); +ZIP_DEPRECATED("use 'zip_file_get_comment' instead") ZIP_EXTERN const char *_Nullable zip_get_file_comment(zip_t *_Nonnull, zip_uint64_t, int *_Nullable, int); +ZIP_DEPRECATED("use 'zip_get_num_entries' instead") ZIP_EXTERN int zip_get_num_files(zip_t *_Nonnull); +ZIP_DEPRECATED("use 'zip_file_rename' instead") ZIP_EXTERN int zip_rename(zip_t *_Nonnull, zip_uint64_t, const char *_Nonnull); +ZIP_DEPRECATED("use 'zip_file_replace' instead") ZIP_EXTERN int zip_replace(zip_t *_Nonnull, zip_uint64_t, zip_source_t *_Nonnull); +ZIP_DEPRECATED("use 'zip_file_set_comment' instead") ZIP_EXTERN int zip_set_file_comment(zip_t *_Nonnull, zip_uint64_t, const char *_Nullable, int); +ZIP_DEPRECATED("use 'zip_error_init_with_code' and 'zip_error_system_type' instead") ZIP_EXTERN int zip_error_get_sys_type(int); +ZIP_DEPRECATED("use 'zip_get_error' instead") ZIP_EXTERN void zip_error_get(zip_t *_Nonnull, int *_Nullable, int *_Nullable); +ZIP_DEPRECATED("use 'zip_error_strerror' instead") ZIP_EXTERN int zip_error_to_str(char *_Nonnull, zip_uint64_t, int, int); +ZIP_DEPRECATED("use 'zip_file_get_error' instead") ZIP_EXTERN void zip_file_error_get(zip_file_t *_Nonnull, int *_Nullable, int *_Nullable); +ZIP_DEPRECATED("use 'zip_source_zip_file' instead") ZIP_EXTERN zip_source_t *_Nullable zip_source_zip(zip_t *_Nonnull, zip_t *_Nonnull, zip_uint64_t, zip_flags_t, zip_uint64_t, zip_int64_t); +ZIP_DEPRECATED("use 'zip_source_zip_file_create' instead") ZIP_EXTERN zip_source_t *_Nullable zip_source_zip_create(zip_t *_Nonnull, zip_uint64_t, zip_flags_t, zip_uint64_t, zip_int64_t, zip_error_t *_Nullable); +#endif + +ZIP_EXTERN int zip_close(zip_t *_Nonnull); +ZIP_EXTERN int zip_delete(zip_t *_Nonnull, zip_uint64_t); +ZIP_EXTERN zip_int64_t zip_dir_add(zip_t *_Nonnull, const char *_Nonnull, zip_flags_t); +ZIP_EXTERN void zip_discard(zip_t *_Nonnull); + +ZIP_EXTERN zip_error_t *_Nonnull zip_get_error(zip_t *_Nonnull); +ZIP_EXTERN void zip_error_clear(zip_t *_Nonnull); +ZIP_EXTERN int zip_error_code_zip(const zip_error_t *_Nonnull); +ZIP_EXTERN int zip_error_code_system(const zip_error_t *_Nonnull); +ZIP_EXTERN void zip_error_fini(zip_error_t *_Nonnull); +ZIP_EXTERN void zip_error_init(zip_error_t *_Nonnull); +ZIP_EXTERN void zip_error_init_with_code(zip_error_t *_Nonnull, int); +ZIP_EXTERN void zip_error_set(zip_error_t *_Nullable, int, int); +ZIP_EXTERN void zip_error_set_from_source(zip_error_t *_Nonnull, zip_source_t *_Nullable); +ZIP_EXTERN const char *_Nonnull zip_error_strerror(zip_error_t *_Nonnull); +ZIP_EXTERN int zip_error_system_type(const zip_error_t *_Nonnull); +ZIP_EXTERN zip_int64_t zip_error_to_data(const zip_error_t *_Nonnull, void *_Nonnull, zip_uint64_t); + +ZIP_EXTERN int zip_fclose(zip_file_t *_Nonnull); +ZIP_EXTERN zip_t *_Nullable zip_fdopen(int, int, int *_Nullable); +ZIP_EXTERN zip_int64_t zip_file_add(zip_t *_Nonnull, const char *_Nonnull, zip_source_t *_Nonnull, zip_flags_t); +ZIP_EXTERN void zip_file_attributes_init(zip_file_attributes_t *_Nonnull); +ZIP_EXTERN void zip_file_error_clear(zip_file_t *_Nonnull); +ZIP_EXTERN int zip_file_extra_field_delete(zip_t *_Nonnull, zip_uint64_t, zip_uint16_t, zip_flags_t); +ZIP_EXTERN int zip_file_extra_field_delete_by_id(zip_t *_Nonnull, zip_uint64_t, zip_uint16_t, zip_uint16_t, zip_flags_t); +ZIP_EXTERN int zip_file_extra_field_set(zip_t *_Nonnull, zip_uint64_t, zip_uint16_t, zip_uint16_t, const zip_uint8_t *_Nullable, zip_uint16_t, zip_flags_t); +ZIP_EXTERN zip_int16_t zip_file_extra_fields_count(zip_t *_Nonnull, zip_uint64_t, zip_flags_t); +ZIP_EXTERN zip_int16_t zip_file_extra_fields_count_by_id(zip_t *_Nonnull, zip_uint64_t, zip_uint16_t, zip_flags_t); +ZIP_EXTERN const zip_uint8_t *_Nullable zip_file_extra_field_get(zip_t *_Nonnull, zip_uint64_t, zip_uint16_t, zip_uint16_t *_Nullable, zip_uint16_t *_Nullable, zip_flags_t); +ZIP_EXTERN const zip_uint8_t *_Nullable zip_file_extra_field_get_by_id(zip_t *_Nonnull, zip_uint64_t, zip_uint16_t, zip_uint16_t, zip_uint16_t *_Nullable, zip_flags_t); +ZIP_EXTERN const char *_Nullable zip_file_get_comment(zip_t *_Nonnull, zip_uint64_t, zip_uint32_t *_Nullable, zip_flags_t); +ZIP_EXTERN zip_error_t *_Nonnull zip_file_get_error(zip_file_t *_Nonnull); +ZIP_EXTERN int zip_file_get_external_attributes(zip_t *_Nonnull, zip_uint64_t, zip_flags_t, zip_uint8_t *_Nullable, zip_uint32_t *_Nullable); +ZIP_EXTERN int zip_file_is_seekable(zip_file_t *_Nonnull); +ZIP_EXTERN int zip_file_rename(zip_t *_Nonnull, zip_uint64_t, const char *_Nonnull, zip_flags_t); +ZIP_EXTERN int zip_file_replace(zip_t *_Nonnull, zip_uint64_t, zip_source_t *_Nonnull, zip_flags_t); +ZIP_EXTERN int zip_file_set_comment(zip_t *_Nonnull, zip_uint64_t, const char *_Nullable, zip_uint16_t, zip_flags_t); +ZIP_EXTERN int zip_file_set_dostime(zip_t *_Nonnull, zip_uint64_t, zip_uint16_t, zip_uint16_t, zip_flags_t); +ZIP_EXTERN int zip_file_set_encryption(zip_t *_Nonnull, zip_uint64_t, zip_uint16_t, const char *_Nullable); +ZIP_EXTERN int zip_file_set_external_attributes(zip_t *_Nonnull, zip_uint64_t, zip_flags_t, zip_uint8_t, zip_uint32_t); +ZIP_EXTERN int zip_file_set_mtime(zip_t *_Nonnull, zip_uint64_t, time_t, zip_flags_t); +ZIP_EXTERN const char *_Nonnull zip_file_strerror(zip_file_t *_Nonnull); +ZIP_EXTERN zip_file_t *_Nullable zip_fopen(zip_t *_Nonnull, const char *_Nonnull, zip_flags_t); +ZIP_EXTERN zip_file_t *_Nullable zip_fopen_encrypted(zip_t *_Nonnull, const char *_Nonnull, zip_flags_t, const char *_Nullable); +ZIP_EXTERN zip_file_t *_Nullable zip_fopen_index(zip_t *_Nonnull, zip_uint64_t, zip_flags_t); +ZIP_EXTERN zip_file_t *_Nullable zip_fopen_index_encrypted(zip_t *_Nonnull, zip_uint64_t, zip_flags_t, const char *_Nullable); +ZIP_EXTERN zip_int64_t zip_fread(zip_file_t *_Nonnull, void *_Nonnull, zip_uint64_t); +ZIP_EXTERN zip_int8_t zip_fseek(zip_file_t *_Nonnull, zip_int64_t, int); +ZIP_EXTERN zip_int64_t zip_ftell(zip_file_t *_Nonnull); +ZIP_EXTERN const char *_Nullable zip_get_archive_comment(zip_t *_Nonnull, int *_Nullable, zip_flags_t); +ZIP_EXTERN int zip_get_archive_flag(zip_t *_Nonnull, zip_flags_t, zip_flags_t); +ZIP_EXTERN const char *_Nullable zip_get_name(zip_t *_Nonnull, zip_uint64_t, zip_flags_t); +ZIP_EXTERN zip_int64_t zip_get_num_entries(zip_t *_Nonnull, zip_flags_t); +ZIP_EXTERN const char *_Nonnull zip_libzip_version(void); +ZIP_EXTERN zip_int64_t zip_name_locate(zip_t *_Nonnull, const char *_Nonnull, zip_flags_t); +ZIP_EXTERN zip_t *_Nullable zip_open(const char *_Nonnull, int, int *_Nullable); +ZIP_EXTERN zip_t *_Nullable zip_open_from_source(zip_source_t *_Nonnull, int, zip_error_t *_Nullable); +ZIP_EXTERN int zip_register_progress_callback_with_state(zip_t *_Nonnull, double, zip_progress_callback _Nullable, void (*_Nullable)(void *_Nullable), void *_Nullable); +ZIP_EXTERN int zip_register_cancel_callback_with_state(zip_t *_Nonnull, zip_cancel_callback _Nullable, void (*_Nullable)(void *_Nullable), void *_Nullable); +ZIP_EXTERN int zip_set_archive_comment(zip_t *_Nonnull, const char *_Nullable, zip_uint16_t); +ZIP_EXTERN int zip_set_archive_flag(zip_t *_Nonnull, zip_flags_t, int); +ZIP_EXTERN int zip_set_default_password(zip_t *_Nonnull, const char *_Nullable); +ZIP_EXTERN int zip_set_file_compression(zip_t *_Nonnull, zip_uint64_t, zip_int32_t, zip_uint32_t); +ZIP_EXTERN int zip_source_begin_write(zip_source_t *_Nonnull); +ZIP_EXTERN int zip_source_begin_write_cloning(zip_source_t *_Nonnull, zip_uint64_t); +ZIP_EXTERN zip_source_t *_Nullable zip_source_buffer(zip_t *_Nonnull, const void *_Nullable, zip_uint64_t, int); +ZIP_EXTERN zip_source_t *_Nullable zip_source_buffer_create(const void *_Nullable, zip_uint64_t, int, zip_error_t *_Nullable); +ZIP_EXTERN zip_source_t *_Nullable zip_source_buffer_fragment(zip_t *_Nonnull, const zip_buffer_fragment_t *_Nonnull, zip_uint64_t, int); +ZIP_EXTERN zip_source_t *_Nullable zip_source_buffer_fragment_create(const zip_buffer_fragment_t *_Nullable, zip_uint64_t, int, zip_error_t *_Nullable); +ZIP_EXTERN int zip_source_close(zip_source_t *_Nonnull); +ZIP_EXTERN int zip_source_commit_write(zip_source_t *_Nonnull); +ZIP_EXTERN zip_error_t *_Nonnull zip_source_error(zip_source_t *_Nonnull); +ZIP_EXTERN zip_source_t *_Nullable zip_source_file(zip_t *_Nonnull, const char *_Nonnull, zip_uint64_t, zip_int64_t); +ZIP_EXTERN zip_source_t *_Nullable zip_source_file_create(const char *_Nonnull, zip_uint64_t, zip_int64_t, zip_error_t *_Nullable); +ZIP_EXTERN zip_source_t *_Nullable zip_source_filep(zip_t *_Nonnull, FILE *_Nonnull, zip_uint64_t, zip_int64_t); +ZIP_EXTERN zip_source_t *_Nullable zip_source_filep_create(FILE *_Nonnull, zip_uint64_t, zip_int64_t, zip_error_t *_Nullable); +ZIP_EXTERN void zip_source_free(zip_source_t *_Nullable); +ZIP_EXTERN zip_source_t *_Nullable zip_source_function(zip_t *_Nonnull, zip_source_callback _Nonnull, void *_Nullable); +ZIP_EXTERN zip_source_t *_Nullable zip_source_function_create(zip_source_callback _Nonnull, void *_Nullable, zip_error_t *_Nullable); +ZIP_EXTERN int zip_source_get_file_attributes(zip_source_t *_Nonnull, zip_file_attributes_t *_Nonnull); +ZIP_EXTERN int zip_source_is_deleted(zip_source_t *_Nonnull); +ZIP_EXTERN int zip_source_is_seekable(zip_source_t *_Nonnull); +ZIP_EXTERN void zip_source_keep(zip_source_t *_Nonnull); +ZIP_EXTERN zip_source_t *_Nullable zip_source_layered(zip_t *_Nullable, zip_source_t *_Nonnull, zip_source_layered_callback _Nonnull, void *_Nullable); +ZIP_EXTERN zip_source_t *_Nullable zip_source_layered_create(zip_source_t *_Nonnull, zip_source_layered_callback _Nonnull, void *_Nullable, zip_error_t *_Nullable); +ZIP_EXTERN zip_int64_t zip_source_make_command_bitmap(zip_source_cmd_t, ...); +ZIP_EXTERN int zip_source_open(zip_source_t *_Nonnull); +ZIP_EXTERN zip_int64_t zip_source_pass_to_lower_layer(zip_source_t *_Nonnull, void *_Nullable, zip_uint64_t, zip_source_cmd_t); +ZIP_EXTERN zip_int64_t zip_source_read(zip_source_t *_Nonnull, void *_Nonnull, zip_uint64_t); +ZIP_EXTERN void zip_source_rollback_write(zip_source_t *_Nonnull); +ZIP_EXTERN int zip_source_seek(zip_source_t *_Nonnull, zip_int64_t, int); +ZIP_EXTERN zip_int64_t zip_source_seek_compute_offset(zip_uint64_t, zip_uint64_t, void *_Nonnull, zip_uint64_t, zip_error_t *_Nullable); +ZIP_EXTERN int zip_source_seek_write(zip_source_t *_Nonnull, zip_int64_t, int); +ZIP_EXTERN int zip_source_stat(zip_source_t *_Nonnull, zip_stat_t *_Nonnull); +ZIP_EXTERN zip_int64_t zip_source_tell(zip_source_t *_Nonnull); +ZIP_EXTERN zip_int64_t zip_source_tell_write(zip_source_t *_Nonnull); +#ifdef _WIN32 +ZIP_EXTERN zip_source_t *_Nullable zip_source_win32a(zip_t *_Nonnull, const char *_Nonnull, zip_uint64_t, zip_int64_t); +ZIP_EXTERN zip_source_t *_Nullable zip_source_win32a_create(const char *_Nonnull, zip_uint64_t, zip_int64_t, zip_error_t *_Nullable); +ZIP_EXTERN zip_source_t *_Nullable zip_source_win32handle(zip_t *_Nonnull, void *_Nonnull, zip_uint64_t, zip_int64_t); +ZIP_EXTERN zip_source_t *_Nullable zip_source_win32handle_create(void *_Nonnull, zip_uint64_t, zip_int64_t, zip_error_t *_Nullable); +ZIP_EXTERN zip_source_t *_Nullable zip_source_win32w(zip_t *_Nonnull, const wchar_t *_Nonnull, zip_uint64_t, zip_int64_t); +ZIP_EXTERN zip_source_t *_Nullable zip_source_win32w_create(const wchar_t *_Nonnull, zip_uint64_t, zip_int64_t, zip_error_t *_Nullable); +#endif +ZIP_EXTERN zip_source_t *_Nullable zip_source_window_create(zip_source_t *_Nonnull, zip_uint64_t, zip_int64_t, zip_error_t *_Nullable); +ZIP_EXTERN zip_int64_t zip_source_write(zip_source_t *_Nonnull, const void *_Nullable, zip_uint64_t); +ZIP_EXTERN zip_source_t *_Nullable zip_source_zip_file(zip_t *_Nonnull, zip_t *_Nonnull, zip_uint64_t, zip_flags_t, zip_uint64_t, zip_int64_t, const char *_Nullable); +ZIP_EXTERN zip_source_t *_Nullable zip_source_zip_file_create(zip_t *_Nonnull, zip_uint64_t, zip_flags_t, zip_uint64_t, zip_int64_t, const char *_Nullable, zip_error_t *_Nullable); +ZIP_EXTERN int zip_stat(zip_t *_Nonnull, const char *_Nonnull, zip_flags_t, zip_stat_t *_Nonnull); +ZIP_EXTERN int zip_stat_index(zip_t *_Nonnull, zip_uint64_t, zip_flags_t, zip_stat_t *_Nonnull); +ZIP_EXTERN void zip_stat_init(zip_stat_t *_Nonnull); +ZIP_EXTERN const char *_Nonnull zip_strerror(zip_t *_Nonnull); +ZIP_EXTERN int zip_unchange(zip_t *_Nonnull, zip_uint64_t); +ZIP_EXTERN int zip_unchange_all(zip_t *_Nonnull); +ZIP_EXTERN int zip_unchange_archive(zip_t *_Nonnull); +ZIP_EXTERN int zip_compression_method_supported(zip_int32_t method, int compress); +ZIP_EXTERN int zip_encryption_method_supported(zip_uint16_t method, int encode); + +#ifdef __cplusplus +} +#endif + +#endif /* _HAD_ZIP_H */ diff --git a/thirdparty/libzip-1.11.3/build-emcmake/install/include/zipconf.h b/thirdparty/libzip-1.11.3/build-emcmake/install/include/zipconf.h new file mode 100644 index 0000000..4d5f205 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/install/include/zipconf.h @@ -0,0 +1,48 @@ +#ifndef _HAD_ZIPCONF_H +#define _HAD_ZIPCONF_H + +/* + zipconf.h -- platform specific include file + + This file was generated automatically by CMake + based on ../cmake-zipconf.h.in. + */ + +#define LIBZIP_VERSION "1.11.3" +#define LIBZIP_VERSION_MAJOR 1 +#define LIBZIP_VERSION_MINOR 11 +#define LIBZIP_VERSION_MICRO 3 + +/* #undef ZIP_STATIC */ + +#if !defined(__STDC_FORMAT_MACROS) +#define __STDC_FORMAT_MACROS 1 +#endif +#include + +typedef int8_t zip_int8_t; +typedef uint8_t zip_uint8_t; +typedef int16_t zip_int16_t; +typedef uint16_t zip_uint16_t; +typedef int32_t zip_int32_t; +typedef uint32_t zip_uint32_t; +typedef int64_t zip_int64_t; +typedef uint64_t zip_uint64_t; + +#define ZIP_INT8_MIN (-ZIP_INT8_MAX-1) +#define ZIP_INT8_MAX 0x7f +#define ZIP_UINT8_MAX 0xff + +#define ZIP_INT16_MIN (-ZIP_INT16_MAX-1) +#define ZIP_INT16_MAX 0x7fff +#define ZIP_UINT16_MAX 0xffff + +#define ZIP_INT32_MIN (-ZIP_INT32_MAX-1L) +#define ZIP_INT32_MAX 0x7fffffffL +#define ZIP_UINT32_MAX 0xffffffffLU + +#define ZIP_INT64_MIN (-ZIP_INT64_MAX-1LL) +#define ZIP_INT64_MAX 0x7fffffffffffffffLL +#define ZIP_UINT64_MAX 0xffffffffffffffffULL + +#endif /* zipconf.h */ diff --git a/thirdparty/libzip-1.11.3/build-emcmake/install/lib/cmake/libzip/libzip-config-version.cmake b/thirdparty/libzip-1.11.3/build-emcmake/install/lib/cmake/libzip/libzip-config-version.cmake new file mode 100644 index 0000000..b026896 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/install/lib/cmake/libzip/libzip-config-version.cmake @@ -0,0 +1,43 @@ +# This is a basic version file for the Config-mode of find_package(). +# It is used by write_basic_package_version_file() as input file for configure_file() +# to create a version-file which can be installed along a config.cmake file. +# +# The created file sets PACKAGE_VERSION_EXACT if the current version string and +# the requested version string are exactly the same and it sets +# PACKAGE_VERSION_COMPATIBLE if the current version is >= requested version. +# The variable CVF_VERSION must be set before calling configure_file(). + +set(PACKAGE_VERSION "1.11.3") + +if (PACKAGE_FIND_VERSION_RANGE) + # Package version must be in the requested version range + if ((PACKAGE_FIND_VERSION_RANGE_MIN STREQUAL "INCLUDE" AND PACKAGE_VERSION VERSION_LESS PACKAGE_FIND_VERSION_MIN) + OR ((PACKAGE_FIND_VERSION_RANGE_MAX STREQUAL "INCLUDE" AND PACKAGE_VERSION VERSION_GREATER PACKAGE_FIND_VERSION_MAX) + OR (PACKAGE_FIND_VERSION_RANGE_MAX STREQUAL "EXCLUDE" AND PACKAGE_VERSION VERSION_GREATER_EQUAL PACKAGE_FIND_VERSION_MAX))) + set(PACKAGE_VERSION_COMPATIBLE FALSE) + else() + set(PACKAGE_VERSION_COMPATIBLE TRUE) + endif() +else() + if(PACKAGE_VERSION VERSION_LESS PACKAGE_FIND_VERSION) + set(PACKAGE_VERSION_COMPATIBLE FALSE) + else() + set(PACKAGE_VERSION_COMPATIBLE TRUE) + if(PACKAGE_FIND_VERSION STREQUAL PACKAGE_VERSION) + set(PACKAGE_VERSION_EXACT TRUE) + endif() + endif() +endif() + + +# if the installed or the using project don't have CMAKE_SIZEOF_VOID_P set, ignore it: +if("${CMAKE_SIZEOF_VOID_P}" STREQUAL "" OR "4" STREQUAL "") + return() +endif() + +# check that the installed version has the same 32/64bit-ness as the one which is currently searching: +if(NOT CMAKE_SIZEOF_VOID_P STREQUAL "4") + math(EXPR installedBits "4 * 8") + set(PACKAGE_VERSION "${PACKAGE_VERSION} (${installedBits}bit)") + set(PACKAGE_VERSION_UNSUITABLE TRUE) +endif() diff --git a/thirdparty/libzip-1.11.3/build-emcmake/install/lib/cmake/libzip/libzip-config.cmake b/thirdparty/libzip-1.11.3/build-emcmake/install/lib/cmake/libzip/libzip-config.cmake new file mode 100644 index 0000000..f0b8af7 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/install/lib/cmake/libzip/libzip-config.cmake @@ -0,0 +1,69 @@ + +####### Expanded from @PACKAGE_INIT@ by configure_package_config_file() ####### +####### Any changes to this file will be overwritten by the next CMake run #### +####### The input file was libzip-config.cmake.in ######## + +get_filename_component(PACKAGE_PREFIX_DIR "${CMAKE_CURRENT_LIST_DIR}/../../../" ABSOLUTE) + +macro(set_and_check _var _file) + set(${_var} "${_file}") + if(NOT EXISTS "${_file}") + message(FATAL_ERROR "File or directory ${_file} referenced by variable ${_var} does not exist !") + endif() +endmacro() + +macro(check_required_components _NAME) + foreach(comp ${${_NAME}_FIND_COMPONENTS}) + if(NOT ${_NAME}_${comp}_FOUND) + if(${_NAME}_FIND_REQUIRED_${comp}) + set(${_NAME}_FOUND FALSE) + endif() + endif() + endforeach() +endmacro() + +#################################################################################### + +# We need to supply transitive dependencies if this config is for a static library +set(IS_SHARED ON) +if (NOT IS_SHARED) + include(CMakeFindDependencyMacro) + set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_CURRENT_LIST_DIR}/modules") + + set(ENABLE_BZIP2 FALSE) + set(ENABLE_LZMA FALSE) + set(ENABLE_ZSTD FALSE) + set(ENABLE_GNUTLS FALSE) + set(ENABLE_MBEDTLS FALSE) + set(ENABLE_OPENSSL FALSE) + + find_dependency(ZLIB 1.1.2) + if(ENABLE_BZIP2) + find_dependency(BZip2) + endif() + + if(ENABLE_LZMA) + find_dependency(LibLZMA 5.2) + endif() + + if(ENABLE_ZSTD) + find_dependency(zstd 1.3.6) + endif() + + if(ENABLE_GNUTLS) + find_dependency(Nettle 3.0) + find_dependency(GnuTLS) + endif() + if(ENABLE_MBEDTLS) + find_dependency(MbedTLS 1.0) + endif() + if(ENABLE_OPENSSL) + find_dependency(OpenSSL) + endif() +endif() + +# Provide all our library targets to users. +include("${CMAKE_CURRENT_LIST_DIR}/libzip-targets.cmake") + +check_required_components(libzip) + diff --git a/thirdparty/libzip-1.11.3/build-emcmake/install/lib/cmake/libzip/libzip-targets-noconfig.cmake b/thirdparty/libzip-1.11.3/build-emcmake/install/lib/cmake/libzip/libzip-targets-noconfig.cmake new file mode 100644 index 0000000..8316d31 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/install/lib/cmake/libzip/libzip-targets-noconfig.cmake @@ -0,0 +1,46 @@ +#---------------------------------------------------------------- +# Generated CMake target import file. +#---------------------------------------------------------------- + +# Commands may need to know the format version. +set(CMAKE_IMPORT_FILE_VERSION 1) + +# Import target "libzip::zip" for configuration "" +set_property(TARGET libzip::zip APPEND PROPERTY IMPORTED_CONFIGURATIONS NOCONFIG) +set_target_properties(libzip::zip PROPERTIES + IMPORTED_LINK_INTERFACE_LANGUAGES_NOCONFIG "C" + IMPORTED_LOCATION_NOCONFIG "${_IMPORT_PREFIX}/lib/libzip.a" + ) + +list(APPEND _cmake_import_check_targets libzip::zip ) +list(APPEND _cmake_import_check_files_for_libzip::zip "${_IMPORT_PREFIX}/lib/libzip.a" ) + +# Import target "libzip::zipcmp" for configuration "" +set_property(TARGET libzip::zipcmp APPEND PROPERTY IMPORTED_CONFIGURATIONS NOCONFIG) +set_target_properties(libzip::zipcmp PROPERTIES + IMPORTED_LOCATION_NOCONFIG "${_IMPORT_PREFIX}/bin/zipcmp.js" + ) + +list(APPEND _cmake_import_check_targets libzip::zipcmp ) +list(APPEND _cmake_import_check_files_for_libzip::zipcmp "${_IMPORT_PREFIX}/bin/zipcmp.js" ) + +# Import target "libzip::zipmerge" for configuration "" +set_property(TARGET libzip::zipmerge APPEND PROPERTY IMPORTED_CONFIGURATIONS NOCONFIG) +set_target_properties(libzip::zipmerge PROPERTIES + IMPORTED_LOCATION_NOCONFIG "${_IMPORT_PREFIX}/bin/zipmerge.js" + ) + +list(APPEND _cmake_import_check_targets libzip::zipmerge ) +list(APPEND _cmake_import_check_files_for_libzip::zipmerge "${_IMPORT_PREFIX}/bin/zipmerge.js" ) + +# Import target "libzip::ziptool" for configuration "" +set_property(TARGET libzip::ziptool APPEND PROPERTY IMPORTED_CONFIGURATIONS NOCONFIG) +set_target_properties(libzip::ziptool PROPERTIES + IMPORTED_LOCATION_NOCONFIG "${_IMPORT_PREFIX}/bin/ziptool.js" + ) + +list(APPEND _cmake_import_check_targets libzip::ziptool ) +list(APPEND _cmake_import_check_files_for_libzip::ziptool "${_IMPORT_PREFIX}/bin/ziptool.js" ) + +# Commands beyond this point should not need to know the version. +set(CMAKE_IMPORT_FILE_VERSION) diff --git a/thirdparty/libzip-1.11.3/build-emcmake/install/lib/cmake/libzip/libzip-targets.cmake b/thirdparty/libzip-1.11.3/build-emcmake/install/lib/cmake/libzip/libzip-targets.cmake new file mode 100644 index 0000000..187c985 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/install/lib/cmake/libzip/libzip-targets.cmake @@ -0,0 +1,116 @@ +# Generated by CMake + +if("${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}" LESS 2.8) + message(FATAL_ERROR "CMake >= 2.8.0 required") +endif() +if(CMAKE_VERSION VERSION_LESS "2.8.3") + message(FATAL_ERROR "CMake >= 2.8.3 required") +endif() +cmake_policy(PUSH) +cmake_policy(VERSION 2.8.3...3.26) +#---------------------------------------------------------------- +# Generated CMake target import file. +#---------------------------------------------------------------- + +# Commands may need to know the format version. +set(CMAKE_IMPORT_FILE_VERSION 1) + +# Protect against multiple inclusion, which would fail when already imported targets are added once more. +set(_cmake_targets_defined "") +set(_cmake_targets_not_defined "") +set(_cmake_expected_targets "") +foreach(_cmake_expected_target IN ITEMS libzip::zip libzip::zipcmp libzip::zipmerge libzip::ziptool) + list(APPEND _cmake_expected_targets "${_cmake_expected_target}") + if(TARGET "${_cmake_expected_target}") + list(APPEND _cmake_targets_defined "${_cmake_expected_target}") + else() + list(APPEND _cmake_targets_not_defined "${_cmake_expected_target}") + endif() +endforeach() +unset(_cmake_expected_target) +if(_cmake_targets_defined STREQUAL _cmake_expected_targets) + unset(_cmake_targets_defined) + unset(_cmake_targets_not_defined) + unset(_cmake_expected_targets) + unset(CMAKE_IMPORT_FILE_VERSION) + cmake_policy(POP) + return() +endif() +if(NOT _cmake_targets_defined STREQUAL "") + string(REPLACE ";" ", " _cmake_targets_defined_text "${_cmake_targets_defined}") + string(REPLACE ";" ", " _cmake_targets_not_defined_text "${_cmake_targets_not_defined}") + message(FATAL_ERROR "Some (but not all) targets in this export set were already defined.\nTargets Defined: ${_cmake_targets_defined_text}\nTargets not yet defined: ${_cmake_targets_not_defined_text}\n") +endif() +unset(_cmake_targets_defined) +unset(_cmake_targets_not_defined) +unset(_cmake_expected_targets) + + +# Compute the installation prefix relative to this file. +get_filename_component(_IMPORT_PREFIX "${CMAKE_CURRENT_LIST_FILE}" PATH) +get_filename_component(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH) +get_filename_component(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH) +get_filename_component(_IMPORT_PREFIX "${_IMPORT_PREFIX}" PATH) +if(_IMPORT_PREFIX STREQUAL "/") + set(_IMPORT_PREFIX "") +endif() + +# Create imported target libzip::zip +add_library(libzip::zip STATIC IMPORTED) + +set_target_properties(libzip::zip PROPERTIES + INTERFACE_INCLUDE_DIRECTORIES "${_IMPORT_PREFIX}/include;${_IMPORT_PREFIX}/include" + INTERFACE_LINK_LIBRARIES "\$" +) + +# Create imported target libzip::zipcmp +add_executable(libzip::zipcmp IMPORTED) + +# Create imported target libzip::zipmerge +add_executable(libzip::zipmerge IMPORTED) + +# Create imported target libzip::ziptool +add_executable(libzip::ziptool IMPORTED) + +if(CMAKE_VERSION VERSION_LESS 2.8.12) + message(FATAL_ERROR "This file relies on consumers using CMake 2.8.12 or greater.") +endif() + +# Load information for each installed configuration. +file(GLOB _cmake_config_files "${CMAKE_CURRENT_LIST_DIR}/libzip-targets-*.cmake") +foreach(_cmake_config_file IN LISTS _cmake_config_files) + include("${_cmake_config_file}") +endforeach() +unset(_cmake_config_file) +unset(_cmake_config_files) + +# Cleanup temporary variables. +set(_IMPORT_PREFIX) + +# Loop over all imported files and verify that they actually exist +foreach(_cmake_target IN LISTS _cmake_import_check_targets) + foreach(_cmake_file IN LISTS "_cmake_import_check_files_for_${_cmake_target}") + if(NOT EXISTS "${_cmake_file}") + message(FATAL_ERROR "The imported target \"${_cmake_target}\" references the file + \"${_cmake_file}\" +but this file does not exist. Possible reasons include: +* The file was deleted, renamed, or moved to another location. +* An install or uninstall procedure did not complete successfully. +* The installation package was faulty and contained + \"${CMAKE_CURRENT_LIST_FILE}\" +but not all the files it references. +") + endif() + endforeach() + unset(_cmake_file) + unset("_cmake_import_check_files_for_${_cmake_target}") +endforeach() +unset(_cmake_target) +unset(_cmake_import_check_targets) + +# This file does not depend on other imported targets which have +# been exported from the same project but in a separate export set. + +# Commands beyond this point should not need to know the version. +set(CMAKE_IMPORT_FILE_VERSION) +cmake_policy(POP) diff --git a/thirdparty/libzip-1.11.3/build-emcmake/install/lib/cmake/libzip/modules/FindMbedTLS.cmake b/thirdparty/libzip-1.11.3/build-emcmake/install/lib/cmake/libzip/modules/FindMbedTLS.cmake new file mode 100644 index 0000000..5a6ef9d --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/install/lib/cmake/libzip/modules/FindMbedTLS.cmake @@ -0,0 +1,141 @@ +# Copyright (C) 2020 Dieter Baron and Thomas Klausner +# +# The authors can be contacted at +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in +# the documentation and/or other materials provided with the +# distribution. +# +# 3. The names of the authors may not be used to endorse or promote +# products derived from this software without specific prior +# written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS +# OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +# ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE +# GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN +# IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#[=======================================================================[.rst: +FindMbedTLS +------- + +Finds the Mbed TLS library. + +Imported Targets +^^^^^^^^^^^^^^^^ + +This module provides the following imported targets, if found: + +``MbedTLS::MbedTLS`` + The Mbed TLS library + +Result Variables +^^^^^^^^^^^^^^^^ + +This will define the following variables: + +``MbedTLS_FOUND`` + True if the system has the Mbed TLS library. +``MbedTLS_VERSION`` + The version of the Mbed TLS library which was found. +``MbedTLS_INCLUDE_DIRS`` + Include directories needed to use Mbed TLS. +``MbedTLS_LIBRARIES`` + Libraries needed to link to Mbed TLS. + +Cache Variables +^^^^^^^^^^^^^^^ + +The following cache variables may also be set: + +``MbedTLS_INCLUDE_DIR`` + The directory containing ``mbedtls/aes.h``. +``MbedTLS_LIBRARY`` + The path to the Mbed TLS library. + +#]=======================================================================] + +# I'm not aware of a pkg-config file for mbedtls as of 2020/07/08. +#find_package(PkgConfig) +#pkg_check_modules(PC_MbedTLS QUIET mbedtls) + +find_path(MbedTLS_INCLUDE_DIR + NAMES mbedtls/aes.h +# PATHS ${PC_MbedTLS_INCLUDE_DIRS} +) +find_library(MbedTLS_LIBRARY + NAMES mbedcrypto +# PATHS ${PC_MbedTLS_LIBRARY_DIRS} +) + +# Extract version information from the header file +if(MbedTLS_INCLUDE_DIR) + # for major version 3 + if(EXISTS ${MbedTLS_INCLUDE_DIR}/mbedtls/build_info.h) + file(STRINGS ${MbedTLS_INCLUDE_DIR}/mbedtls/build_info.h _ver_line + REGEX "^#define MBEDTLS_VERSION_STRING *\"[0-9]+\\.[0-9]+\\.[0-9]+\"" + LIMIT_COUNT 1) + string(REGEX MATCH "[0-9]+\\.[0-9]+\\.[0-9]+" + MbedTLS_VERSION "${_ver_line}") + unset(_ver_line) + # for major version 2 + elseif(EXISTS ${MbedTLS_INCLUDE_DIR}/mbedtls/version.h) + file(STRINGS ${MbedTLS_INCLUDE_DIR}/mbedtls/version.h _ver_line + REGEX "^#define MBEDTLS_VERSION_STRING *\"[0-9]+\\.[0-9]+\\.[0-9]+\"" + LIMIT_COUNT 1) + string(REGEX MATCH "[0-9]+\\.[0-9]+\\.[0-9]+" + MbedTLS_VERSION "${_ver_line}") + unset(_ver_line) + else() + if(PC_MbedTLS_VERSION) + set(MbedTLS_VERSION ${PC_MbedTLS_VERSION}) + else() + # version unknown + set(MbedTLS_VERSION "0.0") + endif() + endif() +endif() + +include(FindPackageHandleStandardArgs) +find_package_handle_standard_args(MbedTLS + FOUND_VAR MbedTLS_FOUND + REQUIRED_VARS + MbedTLS_LIBRARY + MbedTLS_INCLUDE_DIR + VERSION_VAR MbedTLS_VERSION +) + +if(MbedTLS_FOUND) + set(MbedTLS_LIBRARIES ${MbedTLS_LIBRARY}) + set(MbedTLS_INCLUDE_DIRS ${MbedTLS_INCLUDE_DIR}) +# set(MbedTLS_DEFINITIONS ${PC_MbedTLS_CFLAGS_OTHER}) +endif() + +if(MbedTLS_FOUND AND NOT TARGET MbedTLS::MbedTLS) + add_library(MbedTLS::MbedTLS UNKNOWN IMPORTED) + set_target_properties(MbedTLS::MbedTLS PROPERTIES + IMPORTED_LOCATION "${MbedTLS_LIBRARY}" +# INTERFACE_COMPILE_OPTIONS "${PC_MbedTLS_CFLAGS_OTHER}" + INTERFACE_INCLUDE_DIRECTORIES "${MbedTLS_INCLUDE_DIR}" + ) +endif() + +mark_as_advanced( + MbedTLS_INCLUDE_DIR + MbedTLS_LIBRARY + ) diff --git a/thirdparty/libzip-1.11.3/build-emcmake/install/lib/cmake/libzip/modules/FindNettle.cmake b/thirdparty/libzip-1.11.3/build-emcmake/install/lib/cmake/libzip/modules/FindNettle.cmake new file mode 100644 index 0000000..8f0deb0 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/install/lib/cmake/libzip/modules/FindNettle.cmake @@ -0,0 +1,141 @@ +# Copyright (C) 2020 Dieter Baron and Thomas Klausner +# +# The authors can be contacted at +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in +# the documentation and/or other materials provided with the +# distribution. +# +# 3. The names of the authors may not be used to endorse or promote +# products derived from this software without specific prior +# written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS +# OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +# ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE +# GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN +# IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#[=======================================================================[.rst: +FindNettle +------- + +Finds the Nettle library. + +Imported Targets +^^^^^^^^^^^^^^^^ + +This module provides the following imported targets, if found: + +``Nettle::Nettle`` + The Nettle library + +Result Variables +^^^^^^^^^^^^^^^^ + +This will define the following variables: + +``Nettle_FOUND`` + True if the system has the Nettle library. +``Nettle_VERSION`` + The version of the Nettle library which was found. +``Nettle_INCLUDE_DIRS`` + Include directories needed to use Nettle. +``Nettle_LIBRARIES`` + Libraries needed to link to Nettle. + +Cache Variables +^^^^^^^^^^^^^^^ + +The following cache variables may also be set: + +``Nettle_INCLUDE_DIR`` + The directory containing ``nettle/aes.h``. +``Nettle_LIBRARY`` + The path to the Nettle library. + +#]=======================================================================] + +find_package(PkgConfig) +pkg_check_modules(PC_Nettle QUIET nettle) + +find_path(Nettle_INCLUDE_DIR + NAMES nettle/aes.h nettle/md5.h nettle/pbkdf2.h nettle/ripemd160.h nettle/sha.h + PATHS ${PC_Nettle_INCLUDE_DIRS} +) +find_library(Nettle_LIBRARY + NAMES nettle + PATHS ${PC_Nettle_LIBRARY_DIRS} +) + +# Extract version information from the header file +if(Nettle_INCLUDE_DIR) + # This file only exists in nettle>=3.0 + if(EXISTS ${Nettle_INCLUDE_DIR}/nettle/version.h) + file(STRINGS ${Nettle_INCLUDE_DIR}/nettle/version.h _ver_major_line + REGEX "^#define NETTLE_VERSION_MAJOR *[0-9]+" + LIMIT_COUNT 1) + string(REGEX MATCH "[0-9]+" + Nettle_MAJOR_VERSION "${_ver_major_line}") + file(STRINGS ${Nettle_INCLUDE_DIR}/nettle/version.h _ver_minor_line + REGEX "^#define NETTLE_VERSION_MINOR *[0-9]+" + LIMIT_COUNT 1) + string(REGEX MATCH "[0-9]+" + Nettle_MINOR_VERSION "${_ver_minor_line}") + set(Nettle_VERSION "${Nettle_MAJOR_VERSION}.${Nettle_MINOR_VERSION}") + unset(_ver_major_line) + unset(_ver_minor_line) + else() + if(PC_Nettle_VERSION) + set(Nettle_VERSION ${PC_Nettle_VERSION}) + else() + set(Nettle_VERSION "1.0") + endif() + endif() +endif() + +include(FindPackageHandleStandardArgs) +find_package_handle_standard_args(Nettle + FOUND_VAR Nettle_FOUND + REQUIRED_VARS + Nettle_LIBRARY + Nettle_INCLUDE_DIR + VERSION_VAR Nettle_VERSION +) + +if(Nettle_FOUND) + set(Nettle_LIBRARIES ${Nettle_LIBRARY}) + set(Nettle_INCLUDE_DIRS ${Nettle_INCLUDE_DIR}) + set(Nettle_DEFINITIONS ${PC_Nettle_CFLAGS_OTHER}) +endif() + +if(Nettle_FOUND AND NOT TARGET Nettle::Nettle) + add_library(Nettle::Nettle UNKNOWN IMPORTED) + set_target_properties(Nettle::Nettle PROPERTIES + IMPORTED_LOCATION "${Nettle_LIBRARY}" + INTERFACE_COMPILE_OPTIONS "${PC_Nettle_CFLAGS_OTHER}" + INTERFACE_INCLUDE_DIRECTORIES "${Nettle_INCLUDE_DIR}" + ) +endif() + +mark_as_advanced( + Nettle_INCLUDE_DIR + Nettle_LIBRARY +) + +# compatibility variables +set(Nettle_VERSION_STRING ${Nettle_VERSION}) diff --git a/thirdparty/libzip-1.11.3/build-emcmake/install/lib/cmake/libzip/modules/Findzstd.cmake b/thirdparty/libzip-1.11.3/build-emcmake/install/lib/cmake/libzip/modules/Findzstd.cmake new file mode 100644 index 0000000..b389c6b --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/install/lib/cmake/libzip/modules/Findzstd.cmake @@ -0,0 +1,186 @@ +# Copyright (C) 2020 Dieter Baron and Thomas Klausner +# +# The authors can be contacted at +# +# Redistribution and use in source and binary forms, with or without +# modification, are permitted provided that the following conditions +# are met: +# +# 1. Redistributions of source code must retain the above copyright +# notice, this list of conditions and the following disclaimer. +# +# 2. Redistributions in binary form must reproduce the above copyright +# notice, this list of conditions and the following disclaimer in +# the documentation and/or other materials provided with the +# distribution. +# +# 3. The names of the authors may not be used to endorse or promote +# products derived from this software without specific prior +# written permission. +# +# THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS +# OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +# WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +# ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +# DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE +# GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +# INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +# IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN +# IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +#[=======================================================================[.rst: +Findzstd +------- + +Finds the Zstandard (zstd) library. + +Imported Targets +^^^^^^^^^^^^^^^^ + +This module provides the following imported targets, if found: + +``zstd::libzstd_shared`` + The shared Zstandard library +``zstd::libzstd_static`` + The shared Zstandard library + +Result Variables +^^^^^^^^^^^^^^^^ + +This will define the following variables: + +``zstd_FOUND`` + True if the system has the Zstandard library. +``zstd_VERSION`` + The version of the Zstandard library which was found. + +Cache Variables +^^^^^^^^^^^^^^^ + +The following cache variables may also be set: + +``zstd_INCLUDE_DIR`` + The directory containing ``zstd.h``. +``zstd_STATIC_LIBRARY`` + The path to the Zstandard static library. +``zstd_SHARED_LIBRARY`` + The path to the Zstandard shared library. +``zstd_DLL`` + The path to the Zstandard DLL. + +#]=======================================================================] + +find_package(PkgConfig) +pkg_check_modules(PC_zstd QUIET libzstd) + +find_path(zstd_INCLUDE_DIR + NAMES zstd.h + HINTS ${PC_zstd_INCLUDE_DIRS} +) + +find_file(zstd_DLL + NAMES libzstd.dll zstd.dll + PATH_SUFFIXES bin + HINTS ${PC_zstd_PREFIX} +) + +# On Windows, we manually define the library names to avoid mistaking the +# implib for the static library +if(zstd_DLL) + set(_zstd_win_static_name zstd-static) + set(_zstd_win_shared_name zstd) +else() + # vcpkg removes the -static suffix in static builds + set(_zstd_win_static_name zstd zstd_static) + set(_zstd_win_shared_name) +endif() + +set(_previous_suffixes ${CMAKE_FIND_LIBRARY_SUFFIXES}) +set(CMAKE_FIND_LIBRARY_SUFFIXES ".so" ".dylib" ".dll.a" ".lib") +find_library(zstd_SHARED_LIBRARY + NAMES zstd ${_zstd_win_shared_name} + HINTS ${PC_zstd_LIBDIR} +) + +set(CMAKE_FIND_LIBRARY_SUFFIXES ".a" ".lib") +find_library(zstd_STATIC_LIBRARY + NAMES zstd ${_zstd_win_static_name} + HINTS ${PC_zstd_LIBDIR} +) +set(CMAKE_FIND_LIBRARY_SUFFIXES ${_previous_suffixes}) + +# Set zstd_LIBRARY to the shared library or fall back to the static library +if(zstd_SHARED_LIBRARY) + set(_zstd_LIBRARY ${zstd_SHARED_LIBRARY}) +else() + set(_zstd_LIBRARY ${zstd_STATIC_LIBRARY}) +endif() + +# Extract version information from the header file +if(zstd_INCLUDE_DIR) + file(STRINGS ${zstd_INCLUDE_DIR}/zstd.h _ver_major_line + REGEX "^#define ZSTD_VERSION_MAJOR *[0-9]+" + LIMIT_COUNT 1) + string(REGEX MATCH "[0-9]+" + zstd_MAJOR_VERSION "${_ver_major_line}") + file(STRINGS ${zstd_INCLUDE_DIR}/zstd.h _ver_minor_line + REGEX "^#define ZSTD_VERSION_MINOR *[0-9]+" + LIMIT_COUNT 1) + string(REGEX MATCH "[0-9]+" + zstd_MINOR_VERSION "${_ver_minor_line}") + file(STRINGS ${zstd_INCLUDE_DIR}/zstd.h _ver_release_line + REGEX "^#define ZSTD_VERSION_RELEASE *[0-9]+" + LIMIT_COUNT 1) + string(REGEX MATCH "[0-9]+" + zstd_RELEASE_VERSION "${_ver_release_line}") + set(Zstd_VERSION "${zstd_MAJOR_VERSION}.${zstd_MINOR_VERSION}.${zstd_RELEASE_VERSION}") + unset(_ver_major_line) + unset(_ver_minor_line) + unset(_ver_release_line) +endif() + +include(FindPackageHandleStandardArgs) +find_package_handle_standard_args(zstd + FOUND_VAR zstd_FOUND + REQUIRED_VARS + _zstd_LIBRARY + zstd_INCLUDE_DIR + VERSION_VAR zstd_VERSION +) + +if(zstd_FOUND AND zstd_SHARED_LIBRARY AND NOT TARGET zstd::libzstd_shared) + add_library(zstd::libzstd_shared SHARED IMPORTED) + if(WIN32) + set_target_properties(zstd::libzstd_shared PROPERTIES + IMPORTED_LOCATION "${zstd_DLL}" + IMPORTED_IMPLIB "${zstd_SHARED_LIBRARY}" + ) + else() + set_target_properties(zstd::libzstd_shared PROPERTIES + IMPORTED_LOCATION "${zstd_SHARED_LIBRARY}" + ) + endif() + + set_target_properties(zstd::libzstd_shared PROPERTIES + INTERFACE_COMPILE_OPTIONS "${PC_zstd_CFLAGS_OTHER}" + INTERFACE_INCLUDE_DIRECTORIES "${zstd_INCLUDE_DIR}" + ) +endif() + +if(zstd_FOUND AND zstd_STATIC_LIBRARY AND NOT TARGET zstd::libzstd_static) + add_library(zstd::libzstd_static STATIC IMPORTED) + set_target_properties(zstd::libzstd_static PROPERTIES + IMPORTED_LOCATION "${zstd_STATIC_LIBRARY}" + INTERFACE_COMPILE_OPTIONS "${PC_zstd_CFLAGS_OTHER}" + INTERFACE_INCLUDE_DIRECTORIES "${zstd_INCLUDE_DIR}" + ) +endif() + +mark_as_advanced( + zstd_INCLUDE_DIR + zstd_DLL + zstd_SHARED_LIBRARY + zstd_STATIC_LIBRARY +) diff --git a/thirdparty/libzip-1.11.3/build-emcmake/install/lib/libzip.a b/thirdparty/libzip-1.11.3/build-emcmake/install/lib/libzip.a new file mode 100644 index 0000000000000000000000000000000000000000..d529d3f85e1de2037e0144e9441c358d6fd55bf8 GIT binary patch literal 353784 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
JN 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
  • 1V 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 literal 0 HcmV?d00001 diff --git a/thirdparty/libzip-1.11.3/build-emcmake/install/lib/pkgconfig/libzip.pc b/thirdparty/libzip-1.11.3/build-emcmake/install/lib/pkgconfig/libzip.pc new file mode 100644 index 0000000..e3676c3 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/install/lib/pkgconfig/libzip.pc @@ -0,0 +1,14 @@ +prefix=/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/install +exec_prefix=${prefix} +bindir=${prefix}/bin +libdir=${prefix}/lib +includedir=${prefix}/include + +zipcmp=${bindir}/zipcmp + +Name: libzip +Description: library for handling zip archives +Version: 1.11.3 +Libs: -L${libdir} -lzip +Libs.private: -lz +Cflags: -I${includedir} diff --git a/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man1/zipcmp.1 b/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man1/zipcmp.1 new file mode 100644 index 0000000..d3d69e6 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man1/zipcmp.1 @@ -0,0 +1,99 @@ +.\" zipcmp.mdoc -- compare zip archives +.\" Copyright (C) 2003-2024 Dieter Baron and Thomas Klausner +.\" +.\" This file is part of libzip, a library to manipulate ZIP archives. +.\" The authors can be contacted at +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in +.\" the documentation and/or other materials provided with the +.\" distribution. +.\" 3. The names of the authors may not be used to endorse or promote +.\" products derived from this software without specific prior +.\" written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS +.\" OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +.\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +.\" DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE +.\" GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +.\" IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +.\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN +.\" IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.\" +.Dd March 15, 2024 +.Dt ZIPCMP 1 +.Os +.Sh NAME +.Nm zipcmp +.Nd compare contents of zip archives +.Sh SYNOPSIS +.Nm +.Op Fl ChipqsTtVv +.Ar archive1 archive2 +.Sh DESCRIPTION +.Nm +compares the zip archives or directories +.Ar archive1 +and +.Ar archive2 +and checks if they contain the same files, comparing their names, +uncompressed sizes, and CRCs. +File order and compressed size differences are ignored. +.Pp +Supported options: +.Bl -tag -width MMM +.It Fl C +Check consistency of archives. +Results in an error if archive is inconsistent or not valid +according to the zip specification. +.It Fl h +Display a short help message and exit. +.It Fl i +Compare names ignoring case distinctions. +.It Fl p +Enable paranoid checks. +Compares extra fields, comments, and other meta data. +(Automatically disabled if one of the archives is a directory.) +These checks are skipped for files where the data differs. +.It Fl q +Quiet mode. +Compare +.Fl v . +.It Fl s +Print a summary of how many files where added and removed. +.It Fl T +Additionally compare the time stamps of the entries. +.It Fl t +Test zip files by comparing the contents to their checksums. +.It Fl V +Display version information and exit. +.It Fl v +Verbose mode. +Print details about differences to stdout. +(This is the default.) +.El +.Sh EXIT STATUS +.Nm +exits 0 if the two archives contain the same files, 1 if they differ, +and >1 if an error occurred. +.Sh SEE ALSO +.Xr zipmerge 1 , +.Xr ziptool 1 , +.Xr libzip 3 +.Sh HISTORY +.Nm +was added in libzip 0.6. +.Sh AUTHORS +.An -nosplit +.An Dieter Baron Aq Mt dillo@nih.at +and +.An Thomas Klausner Aq Mt wiz@gatalith.at diff --git a/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man1/zipmerge.1 b/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man1/zipmerge.1 new file mode 100644 index 0000000..f7c535b --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man1/zipmerge.1 @@ -0,0 +1,105 @@ +.\" zipmerge.mdoc -- merge zip archives +.\" Copyright (C) 2004-2022 Dieter Baron and Thomas Klausner +.\" +.\" This file is part of libzip, a library to manipulate ZIP archives. +.\" The authors can be contacted at +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in +.\" the documentation and/or other materials provided with the +.\" distribution. +.\" 3. The names of the authors may not be used to endorse or promote +.\" products derived from this software without specific prior +.\" written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS +.\" OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +.\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +.\" DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE +.\" GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +.\" IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +.\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN +.\" IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.\" +.Dd November 7, 2023 +.Dt ZIPMERGE 1 +.Os +.Sh NAME +.Nm zipmerge +.Nd merge zip archives +.Sh SYNOPSIS +.Nm +.Op Fl DhIiSsV +.Ar target-zip +.Ar source-zip Op Ar source-zip ... +.Sh DESCRIPTION +.Nm +copies files from the source zip archives +.Ar source-zip +to the target zip archive +.Ar target-zip . +By default, files in the source zip archives overwrite +existing files of the same name in the target zip archive. +By default, compressed files in the source archive are +copied directly without recompression, uncompressed files +are compressed using the default compression algorithm. +.Pp +Supported options: +.Bl -tag -width MMM +.It Fl D +Ignore directory components in file name comparisons. +This option is slow for archives with many files. +.It Fl h +Display a short help message and exit. +.It Fl I +Ignore case in file name comparisons +This option is slow for archives with many files. +.It Fl i +Ask before overwriting files. +See also +.Fl s . +.It Fl k +Do not compress files that were uncompressed in +.Ar source-zip , +otherwise they are compressed with the default compression method. +.It Fl S +Do not overwrite files that have the same name, size, and +CRC32 in both the source and target archives. +.It Fl s +When +.Fl i +is given, do not ask before overwriting files that have the same name, size, +and CRC32. +.It Fl V +Display version information and exit. +.El +.Sh EXIT STATUS +.Nm +exits 0 on success and >1 if an error occurred. +.Sh SEE ALSO +.Xr zipcmp 1 , +.Xr ziptool 1 , +.Xr libzip 3 +.Sh HISTORY +.Nm +was added in libzip 0.6. +.Sh AUTHORS +.An -nosplit +.An Dieter Baron Aq Mt dillo@nih.at +and +.An Thomas Klausner Aq Mt wiz@gatalith.at +.Sh CAVEATS +.Nm +uses one open file descriptor per zip archive. +If you need to merge a lot of zip archives, check your shell's +file descriptor ulimit and either increase it or run +.Nm +multiple times with e.g. 1000 source zip archives each time. diff --git a/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man1/ziptool.1 b/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man1/ziptool.1 new file mode 100644 index 0000000..05f57bd --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man1/ziptool.1 @@ -0,0 +1,364 @@ +.\" ziptool.mdoc -- modify zip archives in multiple ways +.\" Copyright (C) 2016-2022 Dieter Baron and Thomas Klausner +.\" +.\" This file is part of libzip, a library to manipulate ZIP archives. +.\" The authors can be contacted at +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in +.\" the documentation and/or other materials provided with the +.\" distribution. +.\" 3. The names of the authors may not be used to endorse or promote +.\" products derived from this software without specific prior +.\" written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS +.\" OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +.\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +.\" DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE +.\" GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +.\" IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +.\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN +.\" IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.\" +.Dd January 23, 2023 +.Dt ZIPTOOL 1 +.Os +.Sh NAME +.Nm ziptool +.Nd modify zip archives +.Sh SYNOPSIS +.Nm +.Op Fl ceghnrst +.Op Fl l Ar length +.Op Fl o Ar offset +.Ar zip-archive +.Cm command Op Ar command-args ... +.Op Cm command Oo Ar command-args ... Oc ... +.Sh DESCRIPTION +.Nm +modifies the zip archive +.Ar zip-archive +according to the +.Ar commands +given. +.Pp +Supported options: +.Bl -tag -width MoMoffsetMM +.It Fl c +Check zip archive consistency when opening it. +.It Fl e +Error if archive already exists (only useful with +.Fl n ) . +.It Fl g +Guess file name encoding (for +.Cm stat +command). +.It Fl h +Display help. +.It Fl l Ar length +Only read +.Ar length +bytes of archive. +See also +.Fl o . +.It Fl n +Create archive if it doesn't exist. +See also +.Fl e . +.It Fl o Ar offset +Start reading input archive from +.Ar offset . +See also +.Fl l . +.It Fl r +Print raw file name encoding without translation (for +.Cm stat +command). +.It Fl s +Follow file name convention strictly (for +.Cm stat +command). +.It Fl t +Disregard current file contents, if any. +.Em Note : +use this with care, it deletes all existing file contents when +you modify the archive. +.El +.Ss Commands +For all commands below, the index is zero-based. +In other words, the first entry in the zip archive has index 0. +.Pp +Supported commands and arguments are: +.Bl -tag -width 10n +.It Cm add Ar name content +Add file called +.Ar name +using the string +.Ar content +from the command line as data. +.It Cm add_dir Ar name +Add directory +.Ar name . +.It Cm add_file Ar name file_to_add offset len +Add file +.Ar name +to archive, using +.Ar len +bytes from the file +.Ar file_to_add +as input data, starting at +.Ar offset . +.It Cm add_from_zip Ar name archivename index offset len +Add file called +.Ar name +to archive using data from another zip archive +.Ar archivename +using the entry with index +.Ar index +and reading +.Ar len +bytes from +.Ar offset . +.It Cm cat Ar index +Output file contents for entry +.Ar index +to stdout. +.It Cm count_extra Ar index flags +Print the number of extra fields for archive entry +.Ar index +using +.Ar flags . +.It Cm count_extra_by_id Ar index extra_id flags +Print number of extra fields of type +.Ar extra_id +for archive entry +.Ar index +using +.Ar flags . +.It Cm delete Ar index +Remove entry at +.Ar index +from zip archive. +.It Cm delete_extra Ar index extra_idx flags +Remove extra field number +.Ar extra_idx +from archive entry +.Ar index +using +.Ar flags . +.It Cm delete_extra_by_id Ar index extra_id extra_index flags +Remove extra field number +.Ar extra_index +of type +.Ar extra_id +from archive entry +.Ar index +using +.Ar flags . +.It Cm get_archive_comment +Print archive comment. +.It Cm get_archive_flag Ar flag +Print state of archive flag +.Ar flag . +.It Cm get_extra Ar index extra_index flags +Print extra field +.Ar extra_index +for archive entry +.Ar index +using +.Ar flags . +.It Cm get_extra_by_id Ar index extra_id extra_index flags +Print extra field +.Ar extra_index +of type +.Ar extra_id +for archive entry +.Ar index +using +.Ar flags . +.It Cm get_file_comment Ar index +Get file comment for archive entry +.Ar index . +.It Cm get_num_entries Ar flags +Print number of entries in archive using +.Ar flags . +.It Cm name_locate Ar name flags +Find entry in archive with the filename +.Ar name +using +.Ar flags +and print its index. +.It Cm rename Ar index name +Rename archive entry +.Ar index +to +.Ar name . +.It Cm replace_file_contents Ar index data +Replace file contents for archive entry +.Ar index +with the string +.Ar data . +.It Cm set_archive_comment Ar comment +Set archive comment to +.Ar comment . +.It Cm get_archive_flag Ar flag Ar value +Set archive flag +.Ar flag +to +.Ar value . +.It Cm set_extra Ar index extra_id extra_index flags value +Set extra field number +.Ar extra_index +of type +.Ar extra_id +for archive entry +.Ar index +using +.Ar flags +to +.Ar value . +.It Cm set_file_comment Ar index comment +Set file comment for archive entry +.Ar index +to string +.Ar comment . +.It Cm set_file_compression Ar index method compression_flags +Set file compression method for archive entry +.Ar index +to +.Ar method +using +.Ar compression_flags . +.Em Note : +Currently, +.Ar compression_flags +are ignored. +.It Cm set_file_encryption Ar index method password +Set file encryption method for archive entry +.Ar index +to +.Ar method +with password +.Ar password . +.It Cm set_file_mtime Ar index timestamp +Set file modification time for archive entry +.Ar index +to UNIX mtime +.Ar timestamp . +.It Cm set_file_mtime_all Ar timestamp +Set file modification time for all archive entries to UNIX mtime +.Ar timestamp . +.It Cm set_password Ar password +Set default password for encryption/decryption to +.Ar password . +.It Cm stat Ar index +Print information about archive entry +.Ar index . +.El +.Ss Flags +Some commands take flag arguments. +Each character in the argument sets the corresponding flag. +Use 0 or the empty string for no flags. +.Pp +Supported flags are: +.Bl -tag -width MMM -compact -offset indent +.It Ar 4 +.Dv ZIP_FL_ENC_CP437 +.It Ar 8 +.Dv ZIP_FL_ENC_UTF_8 +.It Ar C +.Dv ZIP_FL_NOCASE +.It Ar c +.Dv ZIP_FL_CENTRAL +.It Ar d +.Dv ZIP_FL_NODIR +.It Ar l +.Dv ZIP_FL_LOCAL +.It Ar r +.Dv ZIP_FL_ENC_RAW +.It Ar s +.Dv ZIP_FL_ENC_STRICT +.It Ar u +.Dv ZIP_FL_UNCHANGED +.El +.Ss Archive flags +.Cm get_archive_flag +and +.Cm set_archive_flag +work on the following flags: +.Bl -bullet -compact -offset indent +.It +.Dv create-or-keep-empty-file-for-archive +.It +.Dv is-torrentzip +.It +.Dv rdonly +.It +.Dv want-torrentzip +.El +.Ss Compression Methods +Some commands take compression method arguments. +Supported methods are: +.Bl -bullet -compact -offset indent +.It +.Dv default +.It +.Dv deflate +.It +.Dv store +.El +.Ss Encryption Methods +Some commands take encryption method arguments. +Supported methods are: +.Bl -bullet -compact -offset indent +.It +.Dv none +.It +.Dv AES-128 +.It +.Dv AES-192 +.It +.Dv AES-256 +.El +.Sh EXIT STATUS +.Ex -std +.Sh EXAMPLES +Add a file called +.Pa teststring.txt +to the zip archive +.Pa testbuffer.zip +with data +.Dq This is a test.\en +where +.Dq \en +is replaced with a newline character: +.Bd -literal -offset indent +ziptool testbuffer.zip add teststring.txt \\"This is a test.\en\\" +.Ed +.Pp +Delete the first file from the zip archive +.Pa testfile.zip : +.Bd -literal -offset indent +ziptool testfile.zip delete 0 +.Ed +.Sh SEE ALSO +.Xr zipcmp 1 , +.Xr zipmerge 1 , +.Xr libzip 3 +.Sh HISTORY +.Nm +was added in libzip 1.1. +.Sh AUTHORS +.An -nosplit +.An Dieter Baron Aq Mt dillo@nih.at +and +.An Thomas Klausner Aq Mt wiz@gatalith.at diff --git a/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/ZIP_SOURCE_GET_ARGS.3 b/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/ZIP_SOURCE_GET_ARGS.3 new file mode 100644 index 0000000..25b8193 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/ZIP_SOURCE_GET_ARGS.3 @@ -0,0 +1,79 @@ +.\" ZIP_SOURCE_GET_ARGS -- validate and cast arguments to source callback +.\" Copyright (C) 2014-2017 Dieter Baron and Thomas Klausner +.\" +.\" This file is part of libzip, a library to manipulate ZIP archives. +.\" The authors can be contacted at +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in +.\" the documentation and/or other materials provided with the +.\" distribution. +.\" 3. The names of the authors may not be used to endorse or promote +.\" products derived from this software without specific prior +.\" written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS +.\" OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +.\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +.\" DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE +.\" GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +.\" IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +.\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN +.\" IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.\" +.Dd December 18, 2017 +.Dt ZIP_SOURCE_GET_ARGS 3 +.Os +.Sh NAME +.Nm ZIP_SOURCE_GET_ARGS +.Nd validate and cast arguments to source callback +.Sh LIBRARY +libzip (-lzip) +.Sh SYNOPSIS +.In zip.h +.Ft type * +.Fn ZIP_SOURCE_GET_ARGS "type" "void *data" "zip_uint64_t len" "zip_error_t *error" +.Sh DESCRIPTION +The +.Fn ZIP_SOURCE_GET_ARGS +macro casts +.Ar data +to a pointer to +.Ar type . +.Sh RETURN VALUES +On success, +.Fn ZIP_SOURCE_GET_ARGS +returns +.Ar data . +In case of error, it returns +.Dv NULL +and sets +.Ar error . +.Sh ERRORS +.Fn ZIP_SOURCE_GET_ARGS +fails if: +.Bl -tag -width Er +.It Bq Er ZIP_ER_INVAL +.Ar len +is less than the size of +.Ar type +.El +.Sh SEE ALSO +.Xr libzip 3 , +.Xr zip_source_function 3 +.Sh HISTORY +.Fn ZIP_SOURCE_GET_ARGS +was added in libzip 1.0. +.Sh AUTHORS +.An -nosplit +.An Dieter Baron Aq Mt dillo@nih.at +and +.An Thomas Klausner Aq Mt wiz@gatalith.at diff --git a/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/libzip.3 b/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/libzip.3 new file mode 100644 index 0000000..0490f37 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/libzip.3 @@ -0,0 +1,299 @@ +.\" libzip.mdoc -- general overview of available functions +.\" Copyright (C) 2005-2024 Dieter Baron and Thomas Klausner +.\" +.\" This file is part of libzip, a library to manipulate ZIP archives. +.\" The authors can be contacted at +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in +.\" the documentation and/or other materials provided with the +.\" distribution. +.\" 3. The names of the authors may not be used to endorse or promote +.\" products derived from this software without specific prior +.\" written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS +.\" OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +.\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +.\" DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE +.\" GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +.\" IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +.\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN +.\" IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.\" +.Dd August 21, 2024 +.Dt LIBZIP 3 +.Os +.Sh NAME +.Nm libzip +.Nd library for manipulating zip archives +.Sh LIBRARY +libzip (-lzip) +.Sh SYNOPSIS +.In zip.h +.Sh DESCRIPTION +.Nm +is a library for reading, creating, and modifying zip archives. +.Pp +The main design criteria for +.Nm +were: +.Bl -bullet -compact +.It +Do not create corrupt files, even in case of errors. +.It +Do not delete data. +.It +Be efficient. +.El +.Pp +For this reason, when modifying zip archives, +.Nm +writes to a temporary file and replaces the original +zip archive atomically. +.Pp +Below there are two sections listing functions: one for how to read +from zip archives and one for how to create/modify them. +.Sh GENERAL NOTES +Unless explicitly documented, functions should not be passed +.Dv NULL +pointers as arguments. +.Sh FILE NAMES +.Ss Encoding +Names of files in the host file system are expected in UTF-8 encoding. +On Windows, variants for ASCII and UTF-16 are also available. +.Pp +Names of files inside archives are by default expected in UTF-8 encoding. +Other encodings can be requested by using the flags +.Dv ZIP_FL_ENC_CP437 +and +.Dv ZIP_FL_ENC_RAW . +.Pp +For details see the relevant man pages. +.Ss Directory Separator +The zip format requires the use of forward slash +.Pq Sq / +as directory separator. +Since backslash +.Pq Sq \e +can be part of a valid file name on Unix systems, +.Nm +does not automatically convert them, even on Windows. +It is the responsibility of the programmer to ensure that all +directory separators are passed as forward slashes to +.Nm . +.Sh THREAD SAFETY +In general, different zip archives opened by +.Nm +are independent of each other and can be used by parallel-running +threads without locking. +If you want to use an archive from multiple threads, you have to +synchronize access to it yourself. +If you use an archive as a source for +.Xr zip_file_add 3 +or +.Xr zip_file_replace 3 , +access to the target archive must be synchronized with access to the +source archive as well. +.Sh READING ZIP ARCHIVES +.Ss Open Archive +.Bl -bullet -compact +.It +.Xr zip_open 3 +.It +.Xr zip_fdopen 3 +.El +.Ss Find Files +.Bl -bullet -compact +.It +.Xr zip_name_locate 3 +.El +.Ss Read Files +.Bl -bullet -compact +.It +.Xr zip_fopen 3 +.It +.Xr zip_fopen_encrypted 3 +.It +.Xr zip_fopen_index 3 +.It +.Xr zip_fopen_index_encrypted 3 +.It +.Xr zip_fread 3 +.It +.Xr zip_file_is_seekable 3 +.It +.Xr zip_fseek 3 +(uncompressed files only) +.It +.Xr zip_ftell 3 +.It +.Xr zip_fclose 3 +.El +.Ss Close Archive +.Bl -bullet -compact +.It +.Xr zip_close 3 +.El +.Ss Miscellaneous +.Bl -bullet -compact +.It +.Xr zip_stat 3 +.It +.Xr zip_compression_method_supported 3 +.It +.Xr zip_encryption_method_supported 3 +.It +.Xr zip_file_get_comment 3 +.It +.Xr zip_file_get_external_attributes 3 +.It +.Xr zip_get_archive_comment 3 +.It +.Xr zip_get_archive_flag 3 +.It +.Xr zip_get_name 3 +.It +.Xr zip_get_num_entries 3 +.It +.Xr zip_set_default_password 3 +.It +.Xr zip_source_pass_to_lower_layer 3 +.El +.Sh CREATING/MODIFYING ZIP ARCHIVES +.Ss Create/Open Archive +.Bl -bullet -compact +.It +.Xr zip_open 3 +.El +.Ss Add/Change Files and Directories +.Bl -bullet -compact +.It +.Xr zip_dir_add 3 +.It +.Xr zip_file_add 3 +.It +.Xr zip_file_replace 3 +.It +.Xr zip_file_set_comment 3 +.It +.Xr zip_file_set_dostime 3 +.It +.Xr zip_file_set_external_attributes 3 +.It +.Xr zip_file_set_encryption 3 +.It +.Xr zip_file_set_mtime 3 +.It +.Xr zip_set_file_compression 3 +.It +.Xr zip_source_buffer 3 +.It +.Xr zip_source_file 3 +.It +.Xr zip_source_filep 3 +.It +.Xr zip_source_free 3 +.It +.Xr zip_source_function 3 +.It +.Xr zip_source_layered 3 +.It +.Xr zip_source_zip 3 +.El +.Ss Rename Files +.Bl -bullet -compact +.It +.Xr zip_rename 3 +.El +.Ss Delete Files +.Bl -bullet -compact +.It +.Xr zip_delete 3 +.El +.Ss Revert Changes +.Bl -bullet -compact +.It +.Xr zip_unchange 3 +.It +.Xr zip_unchange_all 3 +.It +.Xr zip_unchange_archive 3 +.El +.Ss Read/Modify Extra Fields +.Bl -bullet -compact +.It +.Xr zip_file_extra_field_delete 3 +.It +.Xr zip_file_extra_field_delete_by_id 3 +.It +.Xr zip_file_extra_field_get 3 +.It +.Xr zip_file_extra_field_get_by_id 3 +.It +.Xr zip_file_extra_field_set 3 +.It +.Xr zip_file_extra_fields_count 3 +.It +.Xr zip_file_extra_fields_count_by_id 3 +.El +.Ss Close Archive (Writing) +.Bl -bullet -compact +.It +.Xr zip_close 3 +.It +.Xr zip_discard 3 +.El +.Ss Miscellaneous (Writing) +.Bl -bullet -compact +.It +.Xr zip_file_attributes_init 3 +.It +.Xr zip_libzip_version 3 +.It +.Xr zip_register_cancel_callback_with_state 3 +.It +.Xr zip_register_progress_callback_with_state 3 +.It +.Xr zip_set_archive_comment 3 +.It +.Xr zip_set_archive_flag 3 +.It +.Xr zip_source 3 +.El +.Sh ERROR HANDLING +.Bl -bullet -compact +.It +.Xr zip_error_strerror 3 +.It +.Xr zip_strerror 3 +.It +.Xr zip_file_strerror 3 +.It +.Xr zip_file_get_error 3 +.It +.Xr zip_get_error 3 +.It +.Xr zip_error_init_with_code 3 +.It +.Xr zip_error_set 3 +.It +.Xr zip_error_set_from_source 3 +.It +.Xr zip_error_system_type 3 +.It +.Xr zip_errors 3 +.El +.Sh AUTHORS +.An -nosplit +.An Dieter Baron Aq Mt dillo@nih.at +and +.An Thomas Klausner Aq Mt wiz@gatalith.at diff --git a/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_add.3 b/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_add.3 new file mode 100644 index 0000000..71bc4c8 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_add.3 @@ -0,0 +1,96 @@ +.\" zip_add.mdoc -- add files to zip archive +.\" Copyright (C) 2004-2017 Dieter Baron and Thomas Klausner +.\" +.\" This file is part of libzip, a library to manipulate ZIP archives. +.\" The authors can be contacted at +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in +.\" the documentation and/or other materials provided with the +.\" distribution. +.\" 3. The names of the authors may not be used to endorse or promote +.\" products derived from this software without specific prior +.\" written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS +.\" OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +.\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +.\" DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE +.\" GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +.\" IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +.\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN +.\" IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.\" +.Dd December 18, 2017 +.Dt ZIP_ADD 3 +.Os +.Sh NAME +.Nm zip_add , +.Nm zip_replace +.Nd add file to zip archive or replace file in zip archive (obsolete interface) +.Sh LIBRARY +libzip (-lzip) +.Sh SYNOPSIS +.In zip.h +.Ft zip_int64_t +.Fn zip_add "zip_t *archive" "const char *name" "zip_source_t *source" +.Ft int +.Fn zip_replace "zip_t *archive" "zip_uint64_t index" "zip_source_t *source" +.Sh DESCRIPTION +The function +.Fn zip_add +is the obsolete version of +.Xr zip_file_add 3 . +It is the same as calling +.Xr zip_file_add 3 +with an empty +.Ar flags +argument. +Similarly, the +.Fn zip_replace +function is the obsolete version of +.Xr zip_file_replace 3 . +It is the same as calling +.Xr zip_file_replace 3 +with an empty +.Ar flags +argument. +.Sh SEE ALSO +.Xr libzip 3 , +.Xr zip_file_add 3 , +.Xr zip_file_replace 3 +.Sh HISTORY +.Fn zip_add +was added in libzip 0.6. +In libzip 0.10 the return type was changed from +.Vt int +to +.Vt zip_int64_t . +It was deprecated in libzip 0.11, use +.Fn zip_file_add +instead. +.Pp +.Fn zip_replace +was added in libzip 0.6. +In libzip 0.10 the type of +.Ar index +was changed from +.Vt int +to +.Vt zip_uint64_t . +It was deprecated in libzip 0.11, use +.Fn zip_file_replace +instead. +.Sh AUTHORS +.An -nosplit +.An Dieter Baron Aq Mt dillo@nih.at +and +.An Thomas Klausner Aq Mt wiz@gatalith.at diff --git a/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_add_dir.3 b/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_add_dir.3 new file mode 100644 index 0000000..4a6801b --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_add_dir.3 @@ -0,0 +1,69 @@ +.\" zip_add_dir.mdoc -- add directory to zip archive +.\" Copyright (C) 2006-2017 Dieter Baron and Thomas Klausner +.\" +.\" This file is part of libzip, a library to manipulate ZIP archives. +.\" The authors can be contacted at +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in +.\" the documentation and/or other materials provided with the +.\" distribution. +.\" 3. The names of the authors may not be used to endorse or promote +.\" products derived from this software without specific prior +.\" written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS +.\" OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +.\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +.\" DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE +.\" GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +.\" IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +.\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN +.\" IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.\" +.Dd December 18, 2017 +.Dt ZIP_ADD_DIR 3 +.Os +.Sh NAME +.Nm zip_add_dir +.Nd add directory to zip archive (obsolete interface) +.Sh LIBRARY +libzip (-lzip) +.Sh SYNOPSIS +.In zip.h +.Ft zip_int64_t +.Fn zip_add_dir "zip_t *archive" "const char *name" +.Sh DESCRIPTION +The function +.Fn zip_add_dir +is the obsolete version of +.Xr zip_dir_add 3 . +It is the same as calling +.Xr zip_dir_add 3 +with an empty flags argument. +.Sh SEE ALSO +.Xr libzip 3 , +.Xr zip_dir_add 3 +.Sh HISTORY +.Fn zip_add_dir +was added in libzip 0.8. +In libzip 0.10 the return type was changed from +.Vt int +to +.Vt zip_int64_t . +It was deprecated in libzip 0.11, use +.Fn zip_dir_add +instead. +.Sh AUTHORS +.An -nosplit +.An Dieter Baron Aq Mt dillo@nih.at +and +.An Thomas Klausner Aq Mt wiz@gatalith.at diff --git a/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_close.3 b/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_close.3 new file mode 100644 index 0000000..4716b9d --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_close.3 @@ -0,0 +1,136 @@ +.\" zip_close.mdoc -- close zip archive +.\" Copyright (C) 2003-2022 Dieter Baron and Thomas Klausner +.\" +.\" This file is part of libzip, a library to manipulate ZIP archives. +.\" The authors can be contacted at +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in +.\" the documentation and/or other materials provided with the +.\" distribution. +.\" 3. The names of the authors may not be used to endorse or promote +.\" products derived from this software without specific prior +.\" written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS +.\" OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +.\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +.\" DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE +.\" GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +.\" IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +.\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN +.\" IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.\" +.Dd January 23, 2023 +.Dt ZIP_CLOSE 3 +.Os +.Sh NAME +.Nm zip_close +.Nd close zip archive +.Sh LIBRARY +libzip (-lzip) +.Sh SYNOPSIS +.In zip.h +.Ft int +.Fn zip_close "zip_t *archive" +.Sh DESCRIPTION +The +.Fn zip_close +function writes any changes made to +.Ar archive +to disk. +If +.Ar archive +contains no files, the file is completely removed (no empty archive is +written), unless the archive flag +.Dv ZIP_AFL_CREATE_OR_KEEP_FILE_FOR_EMPTY_ARCHIVE +is set. +If successful, +.Ar archive +is freed. +Otherwise +.Ar archive +is left unchanged and must still be freed. +.Pp +To close and free a zip archive without saving changes, use +.Xr zip_discard 3 . +.Pp +Progress updates for GUIs can be implemented using +.Xr zip_register_progress_callback_with_state 3 . +Cancelling the write of an archive during +.Nm +can be implemented using +.Xr zip_register_cancel_callback_with_state 3 . +.Sh RETURN VALUES +Upon successful completion 0 is returned. +Otherwise, \-1 is returned and the error code in +.Ar archive +is set to indicate the error. +.Sh ERRORS +.Fn zip_close +will fail if: +.Bl -tag -width Er +.It Bq Er ZIP_ER_EOF +Unexpected end-of-file found while reading from a file. +.It Bq Er ZIP_ER_INTERNAL +The callback function of an added or replaced file returned an +error but failed to report which. +.It Bq Er ZIP_ER_INVAL +The +.Ar path +argument is +.Dv NULL . +.It Bq Er ZIP_ER_MEMORY +Required memory could not be allocated. +.It Bq Er ZIP_ER_NOZIP +File is not a zip archive. +.It Bq Er ZIP_ER_READ +A file read failed. +.It Bq Er ZIP_ER_RENAME +A temporary file could not be renamed to its final name. +.It Bq Er ZIP_ER_SEEK +A file seek failed. +.It Bq Er ZIP_ER_TMPOPEN +A temporary file could not be created. +.It Bq Er ZIP_ER_WRITE +A file write failed. +.It Bq Er ZIP_ER_ZLIB +An error occurred while (de)compressing a stream with +.Xr zlib 3 . +.El +Additionally, any errors returned by the callback function +for added or replaced files will be passed back. +.Sh SEE ALSO +.Xr libzip 3 , +.Xr zip_discard 3 , +.Xr zip_fdopen 3 , +.Xr zip_get_error 3 , +.Xr zip_open 3 , +.Xr zip_register_cancel_callback_with_state 3 , +.Xr zip_register_progress_callback_with_state 3 , +.Xr zip_set_archive_flag 3 , +.Xr zip_strerror 3 +.Sh HISTORY +.Fn zip_close +was added in libzip 0.6. +.Sh AUTHORS +.An -nosplit +.An Dieter Baron Aq Mt dillo@nih.at +and +.An Thomas Klausner Aq Mt wiz@gatalith.at +.Sh CAVEATS +Please note that all indices, +.Xr zip_stat 3 +information and other data about the archive is invalid after +.Nm . +When you open the same file again, it will be a completely new +.Vt zip_t +structure. diff --git a/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_compression_method_supported.3 b/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_compression_method_supported.3 new file mode 100644 index 0000000..77553cf --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_compression_method_supported.3 @@ -0,0 +1,65 @@ +.\" zip_compression_method_supported.mdoc -- return if compression method is supported +.\" Copyright (C) 2020 Dieter Baron and Thomas Klausner +.\" +.\" This file is part of libzip, a library to manipulate ZIP files. +.\" The authors can be contacted at +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in +.\" the documentation and/or other materials provided with the +.\" distribution. +.\" 3. The names of the authors may not be used to endorse or promote +.\" products derived from this software without specific prior +.\" written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS +.\" OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +.\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +.\" DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE +.\" GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +.\" IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +.\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN +.\" IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.\" +.Dd April 2, 2020 +.Dt ZIP_COMPRESSION_METHOD_SUPPORTED 3 +.Os +.Sh NAME +.Nm zip_compression_method_supported +.Nd return if a compression method is supported +.Sh LIBRARY +libzip (-lzip) +.Sh SYNOPSIS +.In zip.h +.Ft int +.Fn zip_compression_method_supported "zip_int32_t method" "int compress" +.Sh DESCRIPTION +The +.Fn zip_compression_method_supported +returns if the compression method +.Ar method +is supported for compression (if +.Ar compress +is zero) or decompression (otherwise). +.Sh RETURN VALUES +Returns 1 if the method is supported, 0 otherwise. +.Sh SEE ALSO +.Xr libzip 3 , +.Xr zip_encryption_method_supported 3 , +.Xr zip_set_file_compression 3 +.Sh HISTORY +.Fn zip_compression_method_supported +was added in libzip 1.7.0. +.Sh AUTHORS +.An -nosplit +.An Dieter Baron Aq Mt dillo@nih.at +and +.An Thomas Klausner Aq Mt wiz@gatalith.at diff --git a/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_delete.3 b/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_delete.3 new file mode 100644 index 0000000..0b622fe --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_delete.3 @@ -0,0 +1,80 @@ +.\" zip_delete.mdoc -- delete files from zip archive +.\" Copyright (C) 2003-2017 Dieter Baron and Thomas Klausner +.\" +.\" This file is part of libzip, a library to manipulate ZIP archives. +.\" The authors can be contacted at +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in +.\" the documentation and/or other materials provided with the +.\" distribution. +.\" 3. The names of the authors may not be used to endorse or promote +.\" products derived from this software without specific prior +.\" written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS +.\" OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +.\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +.\" DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE +.\" GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +.\" IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +.\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN +.\" IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.\" +.Dd December 18, 2017 +.Dt ZIP_DELETE 3 +.Os +.Sh NAME +.Nm zip_delete +.Nd delete file from zip archive +.Sh LIBRARY +libzip (-lzip) +.Sh SYNOPSIS +.In zip.h +.Ft int +.Fn zip_delete "zip_t *archive" "zip_uint64_t index" +.Sh DESCRIPTION +The file at position +.Ar index +in the zip archive +.Ar archive +is marked as deleted. +.Sh RETURN VALUES +Upon successful completion 0 is returned. +Otherwise, \-1 is returned and the error code in +.Ar archive +is set to indicate the error. +.Sh ERRORS +.Fn zip_delete +fails if: +.Bl -tag -width Er +.It Bq Er ZIP_ER_INVAL +.Ar index +is not a valid file index in +.Ar archive . +.El +.Sh SEE ALSO +.Xr libzip 3 , +.Xr zip_unchange 3 +.Sh HISTORY +.Fn zip_delete +was added in libzip 0.6. +In libzip 0.10 the type of +.Ar index +was changed from +.Vt int +to +.Vt zip_uint64_t . +.Sh AUTHORS +.An -nosplit +.An Dieter Baron Aq Mt dillo@nih.at +and +.An Thomas Klausner Aq Mt wiz@gatalith.at diff --git a/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_dir_add.3 b/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_dir_add.3 new file mode 100644 index 0000000..c4b697b --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_dir_add.3 @@ -0,0 +1,109 @@ +.\" zip_dir_add.mdoc -- add directory to zip archive +.\" Copyright (C) 2006-2020 Dieter Baron and Thomas Klausner +.\" +.\" This file is part of libzip, a library to manipulate ZIP archives. +.\" The authors can be contacted at +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in +.\" the documentation and/or other materials provided with the +.\" distribution. +.\" 3. The names of the authors may not be used to endorse or promote +.\" products derived from this software without specific prior +.\" written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS +.\" OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +.\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +.\" DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE +.\" GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +.\" IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +.\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN +.\" IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.\" +.Dd September 20, 2020 +.Dt ZIP_DIR_ADD 3 +.Os +.Sh NAME +.Nm zip_dir_add +.Nd add directory to zip archive +.Sh LIBRARY +libzip (-lzip) +.Sh SYNOPSIS +.In zip.h +.Ft zip_int64_t +.Fn zip_dir_add "zip_t *archive" "const char *name" "zip_flags_t flags" +.Sh DESCRIPTION +The function +.Fn zip_dir_add +adds a directory to a zip archive. +The argument +.Ar archive +specifies the zip archive to which the directory should be added. +.Ar name +is the directory's name in the zip archive. +.Pp +This function adds an entry to the archive. +It does not check whether a directory with that name exists in the +file system, nor does it add its contents if it does. +The +.Ar flags +argument can be any of: +.Bl -tag -width XZIPXFLXENCXSTRICTXX +.It Dv ZIP_FL_ENC_GUESS +Guess encoding of +.Ar name +(default). +(Only CP-437 and UTF-8 are recognized.) +.It Dv ZIP_FL_ENC_UTF_8 +Interpret +.Ar name +as UTF-8. +.It Dv ZIP_FL_ENC_CP437 +Interpret +.Ar name +as code page 437 (CP-437). +.El +.Sh RETURN VALUES +Upon successful completion, the index of the new entry in the archive +is returned. +Otherwise, \-1 is returned and the error code in +.Ar archive +is set to indicate the error. +.Sh ERRORS +.Fn zip_dir_add +fails if: +.Bl -tag -width Er +.It Bq Er ZIP_ER_EXISTS +There is already an entry called +.Ar name +in the archive. +.It Bq Er ZIP_ER_INVAL +.Ar archive +or +.Ar name +are +.Dv NULL , +or invalid UTF-8 encoded file names. +.It Bq Er ZIP_ER_MEMORY +Required memory could not be allocated. +.El +.Sh SEE ALSO +.Xr libzip 3 , +.Xr zip_file_add 3 +.Sh HISTORY +.Fn zip_dir_add +was added in libzip 0.11. +.Sh AUTHORS +.An -nosplit +.An Dieter Baron Aq Mt dillo@nih.at +and +.An Thomas Klausner Aq Mt wiz@gatalith.at diff --git a/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_discard.3 b/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_discard.3 new file mode 100644 index 0000000..5c4f3f4 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_discard.3 @@ -0,0 +1,61 @@ +.\" zip_discard.mdoc -- close zip archive and discard changes +.\" Copyright (C) 2012-2017 Dieter Baron and Thomas Klausner +.\" +.\" This file is part of libzip, a library to manipulate ZIP archives. +.\" The authors can be contacted at +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in +.\" the documentation and/or other materials provided with the +.\" distribution. +.\" 3. The names of the authors may not be used to endorse or promote +.\" products derived from this software without specific prior +.\" written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS +.\" OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +.\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +.\" DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE +.\" GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +.\" IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +.\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN +.\" IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.\" +.Dd December 18, 2017 +.Dt ZIP_DISCARD 3 +.Os +.Sh NAME +.Nm zip_discard +.Nd close zip archive and discard changes +.Sh LIBRARY +libzip (-lzip) +.Sh SYNOPSIS +.In zip.h +.Ft void +.Fn zip_discard "zip_t *archive" +.Sh DESCRIPTION +The +.Fn zip_discard +function closes +.Ar archive +and frees the memory allocated for it. +Any changes to the archive are not written to disk and discarded. +.Sh SEE ALSO +.Xr libzip 3 , +.Xr zip_close 3 +.Sh HISTORY +.Fn zip_discard +was added in libzip 0.11. +.Sh AUTHORS +.An -nosplit +.An Dieter Baron Aq Mt dillo@nih.at +and +.An Thomas Klausner Aq Mt wiz@gatalith.at diff --git a/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_encryption_method_supported.3 b/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_encryption_method_supported.3 new file mode 100644 index 0000000..84c0ae8 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_encryption_method_supported.3 @@ -0,0 +1,65 @@ +.\" zip_encryption_method_supported.mdoc -- return if encryption method is supported +.\" Copyright (C) 2020 Dieter Baron and Thomas Klausner +.\" +.\" This file is part of libzip, a library to manipulate ZIP files. +.\" The authors can be contacted at +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in +.\" the documentation and/or other materials provided with the +.\" distribution. +.\" 3. The names of the authors may not be used to endorse or promote +.\" products derived from this software without specific prior +.\" written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS +.\" OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +.\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +.\" DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE +.\" GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +.\" IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +.\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN +.\" IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.\" +.Dd April 2, 2020 +.Dt ZIP_ENCRYPTION_METHOD_SUPPORTED 3 +.Os +.Sh NAME +.Nm zip_encryption_method_supported +.Nd return if an encryption method is supported +.Sh LIBRARY +libzip (-lzip) +.Sh SYNOPSIS +.In zip.h +.Ft int +.Fn zip_encryption_method_supported "zip_int16_t method" "int encrypt" +.Sh DESCRIPTION +The +.Fn zip_encryption_method_supported +returns if the encryption method +.Ar method +is supported for encryption (if +.Ar encrypt +is zero) or decryption (otherwise). +.Sh RETURN VALUES +Returns 1 if the method is supported, 0 otherwise. +.Sh SEE ALSO +.Xr libzip 3 , +.Xr zip_compression_method_supported 3 , +.Xr zip_file_set_encryption 3 +.Sh HISTORY +.Fn zip_encryption_method_supported +was added in libzip 1.7.0. +.Sh AUTHORS +.An -nosplit +.An Dieter Baron Aq Mt dillo@nih.at +and +.An Thomas Klausner Aq Mt wiz@gatalith.at diff --git a/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_error_clear.3 b/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_error_clear.3 new file mode 100644 index 0000000..5b2bc6e --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_error_clear.3 @@ -0,0 +1,69 @@ +.\" zip_error_clear.mdoc -- clear error state for archive or file +.\" Copyright (C) 2006-2021 Dieter Baron and Thomas Klausner +.\" +.\" This file is part of libzip, a library to manipulate ZIP archives. +.\" The authors can be contacted at +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in +.\" the documentation and/or other materials provided with the +.\" distribution. +.\" 3. The names of the authors may not be used to endorse or promote +.\" products derived from this software without specific prior +.\" written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS +.\" OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +.\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +.\" DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE +.\" GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +.\" IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +.\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN +.\" IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.\" +.Dd December 18, 2017 +.Dt ZIP_ERROR_CLEAR 3 +.Os +.Sh NAME +.Nm zip_error_clear , +.Nm zip_file_error_clear +.Nd clear error state for archive or file +.Sh LIBRARY +libzip (-lzip) +.Sh SYNOPSIS +.In zip.h +.Ft void +.Fn zip_error_clear "zip_t *archive" +.Ft void +.Fn zip_file_error_clear "zip_file_t *file" +.Sh DESCRIPTION +The +.Fn zip_error_clear +function clears the error state for the zip archive +.Ar archive . +.Pp +The +.Fn zip_file_error_clear +function does the same for the zip file +.Ar file . +.Sh SEE ALSO +.Xr libzip 3 , +.Xr zip_get_error 3 +.Sh HISTORY +.Fn zip_error_clear +and +.Fn zip_file_error_clear +were added in libzip 0.8. +.Sh AUTHORS +.An -nosplit +.An Dieter Baron Aq Mt dillo@nih.at +and +.An Thomas Klausner Aq Mt wiz@gatalith.at diff --git a/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_error_code_system.3 b/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_error_code_system.3 new file mode 100644 index 0000000..54a4f63 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_error_code_system.3 @@ -0,0 +1,63 @@ +.\" zip_error_code_system.mdoc -- get system error part of zip_error +.\" Copyright (C) 2014-2017 Dieter Baron and Thomas Klausner +.\" +.\" This file is part of libzip, a library to manipulate ZIP archives. +.\" The authors can be contacted at +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in +.\" the documentation and/or other materials provided with the +.\" distribution. +.\" 3. The names of the authors may not be used to endorse or promote +.\" products derived from this software without specific prior +.\" written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS +.\" OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +.\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +.\" DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE +.\" GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +.\" IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +.\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN +.\" IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.\" +.Dd December 18, 2017 +.Dt ZIP_ERROR_CODE_SYSTEM 3 +.Os +.Sh NAME +.Nm zip_error_code_system +.Nd get operating system error part of zip_error +.Sh LIBRARY +libzip (-lzip) +.Sh SYNOPSIS +.In zip.h +.Ft int +.Fn zip_error_code_system "const zip_error_t *ze" +.Sh DESCRIPTION +The +.Fn zip_error_code_system +function returns the system specific part of the error from the +zip_error error +.Ar ze . +For finding out what system reported the error, use +.Xr zip_error_system_type 3 . +.Sh SEE ALSO +.Xr libzip 3 , +.Xr zip_error_code_zip 3 , +.Xr zip_error_system_type 3 +.Sh HISTORY +.Fn zip_error_code_system +was added in libzip 1.0. +.Sh AUTHORS +.An -nosplit +.An Dieter Baron Aq Mt dillo@nih.at +and +.An Thomas Klausner Aq Mt wiz@gatalith.at diff --git a/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_error_code_zip.3 b/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_error_code_zip.3 new file mode 100644 index 0000000..a07c90e --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_error_code_zip.3 @@ -0,0 +1,60 @@ +.\" zip_error_code_zip.mdoc -- get libzip error part of zip_error +.\" Copyright (C) 2014-2017 Dieter Baron and Thomas Klausner +.\" +.\" This file is part of libzip, a library to manipulate ZIP archives. +.\" The authors can be contacted at +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in +.\" the documentation and/or other materials provided with the +.\" distribution. +.\" 3. The names of the authors may not be used to endorse or promote +.\" products derived from this software without specific prior +.\" written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS +.\" OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +.\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +.\" DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE +.\" GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +.\" IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +.\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN +.\" IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.\" +.Dd December 18, 2017 +.Dt ZIP_ERROR_CODE_ZIP 3 +.Os +.Sh NAME +.Nm zip_error_code_zip +.Nd get libzip error part of zip_error +.Sh LIBRARY +libzip (-lzip) +.Sh SYNOPSIS +.In zip.h +.Ft int +.Fn zip_error_code_zip "const zip_error_t *ze" +.Sh DESCRIPTION +The +.Fn zip_error_code_zip +function returns the libzip specific part of the error from the +zip_error error +.Ar ze . +.Sh SEE ALSO +.Xr libzip 3 , +.Xr zip_error_code_system 3 +.Sh HISTORY +.Fn zip_error_code_zip +was added in libzip 1.0. +.Sh AUTHORS +.An -nosplit +.An Dieter Baron Aq Mt dillo@nih.at +and +.An Thomas Klausner Aq Mt wiz@gatalith.at diff --git a/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_error_fini.3 b/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_error_fini.3 new file mode 100644 index 0000000..80395aa --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_error_fini.3 @@ -0,0 +1,60 @@ +.\" zip_error_fini.mdoc -- clean up zip_error +.\" Copyright (C) 2014-2017 Dieter Baron and Thomas Klausner +.\" +.\" This file is part of libzip, a library to manipulate ZIP archives. +.\" The authors can be contacted at +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in +.\" the documentation and/or other materials provided with the +.\" distribution. +.\" 3. The names of the authors may not be used to endorse or promote +.\" products derived from this software without specific prior +.\" written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS +.\" OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +.\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +.\" DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE +.\" GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +.\" IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +.\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN +.\" IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.\" +.Dd December 18, 2017 +.Dt ZIP_ERROR_FINI 3 +.Os +.Sh NAME +.Nm zip_error_fini +.Nd clean up zip_error structure +.Sh LIBRARY +libzip (-lzip) +.Sh SYNOPSIS +.In zip.h +.Ft void +.Fn zip_error_fini "zip_error_t *ze" +.Sh DESCRIPTION +The +.Fn zip_error_fini +function cleans up and frees internally allocated memory of the +zip_error pointed to by +.Ar ze . +.Sh SEE ALSO +.Xr libzip 3 , +.Xr zip_error_init 3 +.Sh HISTORY +.Fn zip_error_fini +was added in libzip 1.0. +.Sh AUTHORS +.An -nosplit +.An Dieter Baron Aq Mt dillo@nih.at +and +.An Thomas Klausner Aq Mt wiz@gatalith.at diff --git a/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_error_get.3 b/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_error_get.3 new file mode 100644 index 0000000..55b0979 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_error_get.3 @@ -0,0 +1,117 @@ +.\" zip_error_get.mdoc -- get error codes for archive or file +.\" Copyright (C) 2004-2017 Dieter Baron and Thomas Klausner +.\" +.\" This file is part of libzip, a library to manipulate ZIP archives. +.\" The authors can be contacted at +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in +.\" the documentation and/or other materials provided with the +.\" distribution. +.\" 3. The names of the authors may not be used to endorse or promote +.\" products derived from this software without specific prior +.\" written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS +.\" OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +.\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +.\" DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE +.\" GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +.\" IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +.\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN +.\" IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.\" +.Dd December 18, 2017 +.Dt ZIP_ERROR_GET 3 +.Os +.Sh NAME +.Nm zip_error_get , +.Nm zip_file_error_get +.Nd get error codes for archive or file (obsolete interface) +.Sh LIBRARY +libzip (-lzip) +.Sh SYNOPSIS +.In zip.h +.Ft void +.Fn zip_error_get "zip_t *archive" "int *zep" "int *sep" +.Ft void +.Fn zip_file_error_get "zip_file_t *file" "int *zep" "int *sep" +.Sh DESCRIPTION +The functions +.Fn zip_error_get +and +.Fn zip_file_error_get +are deprecated. +Use +.Xr zip_error_code_system 3 , +.Xr zip_error_code_zip 3 , +.Xr zip_file_get_error 3 , +and +.Xr zip_get_error 3 +instead. +.Pp +For +.Fn zip_error_get , +replace +.Bd -literal -offset indent +int ze, se; +zip_error_get(za, &ze, &se); +.Ed +with +.Bd -literal -offset indent +int ze, se; +zip_error_t *error = zip_get_error(za); +ze = zip_error_code_zip(error); +se = zip_error_code_system(error); +.Ed +For +.Fn zip_file_error_get , +replace +.Bd -literal -offset indent +int ze, se; +zip_file_error_get(zf, &ze, &se); +.Ed +with +.Bd -literal -offset indent +int ze, se; +zip_error_t *error = zip_file_get_error(zf); +ze = zip_error_code_zip(error); +se = zip_error_code_system(error); +.Ed +.Sh SEE ALSO +.Xr libzip 3 , +.Xr zip_error_code_system 3 , +.Xr zip_error_code_zip 3 , +.Xr zip_file_get_error 3 , +.Xr zip_get_error 3 +.Sh HISTORY +.Fn zip_error_get +was added in libzip 0.6. +It was deprecated in libzip 1.0, use +.Fn zip_get_error , +.Fn zip_error_code_zip , +/ +.Fn zip_error_code_system +instead. +.Pp +.Fn zip_file_error_get +was added in libzip 0.6. +It was deprecated in libzip 1.0, use +.Fn zip_file_get_error , +.Fn zip_error_code_zip , +/ +.Fn zip_error_code_system +instead. +.Sh AUTHORS +.An -nosplit +.An Dieter Baron Aq Mt dillo@nih.at +and +.An Thomas Klausner Aq Mt wiz@gatalith.at diff --git a/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_error_get_sys_type.3 b/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_error_get_sys_type.3 new file mode 100644 index 0000000..43219a3 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_error_get_sys_type.3 @@ -0,0 +1,77 @@ +.\" zip_error_get_sys_type.mdoc -- get type of error +.\" Copyright (C) 2004-2017 Dieter Baron and Thomas Klausner +.\" +.\" This file is part of libzip, a library to manipulate ZIP archives. +.\" The authors can be contacted at +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in +.\" the documentation and/or other materials provided with the +.\" distribution. +.\" 3. The names of the authors may not be used to endorse or promote +.\" products derived from this software without specific prior +.\" written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS +.\" OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +.\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +.\" DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE +.\" GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +.\" IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +.\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN +.\" IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.\" +.Dd December 18, 2017 +.Dt ZIP_ERROR_GET_SYS_TYPE 3 +.Os +.Sh NAME +.Nm zip_error_get_sys_type +.Nd get type of system error code (obsolete interface) +.Sh LIBRARY +libzip (-lzip) +.Sh SYNOPSIS +.In zip.h +.Ft int +.Fn zip_error_get_sys_type "int ze" +.Sh DESCRIPTION +The function +.Fn zip_error_get_sys_type +is deprecated; use +.Xr zip_error_init_with_code 3 +and +.Xr zip_error_system_type 3 +instead. +.Pp +Replace +.Bd -literal -offset indent +int i = zip_error_get_sys_type(ze); +.Ed +with +.Bd -literal -offset indent +zip_error_t error; +zip_error_init_with_code(&error, ze); +int i = zip_error_system_type(&error); +.Ed +.Sh SEE ALSO +.Xr libzip 3 , +.Xr zip_error_init_with_code 3 , +.Xr zip_error_system_type 3 +.Sh HISTORY +.Fn zip_error_get_sys_type +was added in libzip 0.6. +It was deprecated in libzip 1.0, use +.Fn zip_error_system_type +instead. +.Sh AUTHORS +.An -nosplit +.An Dieter Baron Aq Mt dillo@nih.at +and +.An Thomas Klausner Aq Mt wiz@gatalith.at diff --git a/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_error_init.3 b/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_error_init.3 new file mode 100644 index 0000000..3f2e3b7 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_error_init.3 @@ -0,0 +1,76 @@ +.\" zip_error_init.mdoc -- initialize zip_error +.\" Copyright (C) 2014-2017 Dieter Baron and Thomas Klausner +.\" +.\" This file is part of libzip, a library to manipulate ZIP archives. +.\" The authors can be contacted at +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in +.\" the documentation and/or other materials provided with the +.\" distribution. +.\" 3. The names of the authors may not be used to endorse or promote +.\" products derived from this software without specific prior +.\" written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS +.\" OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +.\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +.\" DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE +.\" GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +.\" IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +.\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN +.\" IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.\" +.Dd December 18, 2017 +.Dt ZIP_ERROR_INIT 3 +.Os +.Sh NAME +.Nm zip_error_init , +.Nm zip_error_init_with_code +.Nd initialize zip_error structure +.Sh LIBRARY +libzip (-lzip) +.Sh SYNOPSIS +.In zip.h +.Ft void +.Fn zip_error_init "zip_error_t *error" +.Ft void +.Fn zip_error_init_with_code "zip_error_t *error" "int ze" +.Sh DESCRIPTION +The +.Fn zip_error_init +function initializes the zip_error pointed to by +.Ar error . +.Ar *error +must be allocated before calling +.Fn zip_error_init . +.Pp +The +.Fn zip_error_init_with_code +function does the same, but additionally sets the zip error code to +.Ar ze +and sets the system error code to the current +.Xr errno 3 +value, if appropriate. +.\" TODO: describe when you would need to call this at all +.Sh SEE ALSO +.Xr libzip 3 , +.Xr zip_error_fini 3 +.Sh HISTORY +.Fn zip_error_init +and +.Fn zip_error_init_with_code +were added in libzip 1.0. +.Sh AUTHORS +.An -nosplit +.An Dieter Baron Aq Mt dillo@nih.at +and +.An Thomas Klausner Aq Mt wiz@gatalith.at diff --git a/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_error_init_with_code.3 b/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_error_init_with_code.3 new file mode 100644 index 0000000..3f2e3b7 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_error_init_with_code.3 @@ -0,0 +1,76 @@ +.\" zip_error_init.mdoc -- initialize zip_error +.\" Copyright (C) 2014-2017 Dieter Baron and Thomas Klausner +.\" +.\" This file is part of libzip, a library to manipulate ZIP archives. +.\" The authors can be contacted at +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in +.\" the documentation and/or other materials provided with the +.\" distribution. +.\" 3. The names of the authors may not be used to endorse or promote +.\" products derived from this software without specific prior +.\" written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS +.\" OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +.\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +.\" DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE +.\" GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +.\" IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +.\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN +.\" IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.\" +.Dd December 18, 2017 +.Dt ZIP_ERROR_INIT 3 +.Os +.Sh NAME +.Nm zip_error_init , +.Nm zip_error_init_with_code +.Nd initialize zip_error structure +.Sh LIBRARY +libzip (-lzip) +.Sh SYNOPSIS +.In zip.h +.Ft void +.Fn zip_error_init "zip_error_t *error" +.Ft void +.Fn zip_error_init_with_code "zip_error_t *error" "int ze" +.Sh DESCRIPTION +The +.Fn zip_error_init +function initializes the zip_error pointed to by +.Ar error . +.Ar *error +must be allocated before calling +.Fn zip_error_init . +.Pp +The +.Fn zip_error_init_with_code +function does the same, but additionally sets the zip error code to +.Ar ze +and sets the system error code to the current +.Xr errno 3 +value, if appropriate. +.\" TODO: describe when you would need to call this at all +.Sh SEE ALSO +.Xr libzip 3 , +.Xr zip_error_fini 3 +.Sh HISTORY +.Fn zip_error_init +and +.Fn zip_error_init_with_code +were added in libzip 1.0. +.Sh AUTHORS +.An -nosplit +.An Dieter Baron Aq Mt dillo@nih.at +and +.An Thomas Klausner Aq Mt wiz@gatalith.at diff --git a/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_error_set.3 b/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_error_set.3 new file mode 100644 index 0000000..d421867 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_error_set.3 @@ -0,0 +1,70 @@ +.\" zip_error_set.mdoc -- set zip_error +.\" Copyright (C) 2014-2021 Dieter Baron and Thomas Klausner +.\" +.\" This file is part of libzip, a library to manipulate ZIP archives. +.\" The authors can be contacted at +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in +.\" the documentation and/or other materials provided with the +.\" distribution. +.\" 3. The names of the authors may not be used to endorse or promote +.\" products derived from this software without specific prior +.\" written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS +.\" OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +.\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +.\" DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE +.\" GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +.\" IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +.\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN +.\" IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.\" +.Dd December 5, 2022 +.Dt ZIP_ERROR_SET 3 +.Os +.Sh NAME +.Nm zip_error_set +.Nd fill in zip_error structure +.Sh LIBRARY +libzip (-lzip) +.Sh SYNOPSIS +.In zip.h +.Ft void +.Fn zip_error_set "zip_error_t *ze" "int le" "int se" +.Sh DESCRIPTION +The +.Fn zip_error_set +function sets the zip_error pointed to by +.Ar ze +to the libzip error code +.Ar le +and the system error code +.Ar se . +.Pp +.Ar ze +must be allocated and initialized with +.Xr zip_error_init 3 +before calling +.Fn zip_error_set . +.Sh SEE ALSO +.Xr libzip 3 , +.Xr zip_error_init 3 , +.Xr zip_error_set_from_source 3 +.Sh HISTORY +.Fn zip_error_set +was added in libzip 1.0. +.Sh AUTHORS +.An -nosplit +.An Dieter Baron Aq Mt dillo@nih.at +and +.An Thomas Klausner Aq Mt wiz@gatalith.at diff --git a/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_error_set_from_source.3 b/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_error_set_from_source.3 new file mode 100644 index 0000000..48f974f --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_error_set_from_source.3 @@ -0,0 +1,69 @@ +.\" zip_error_set_from_source.mdoc -- set zip_error from source +.\" Copyright (C) 2022 Dieter Baron and Thomas Klausner +.\" +.\" This file is part of libzip, a library to manipulate ZIP archives. +.\" The authors can be contacted at +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in +.\" the documentation and/or other materials provided with the +.\" distribution. +.\" 3. The names of the authors may not be used to endorse or promote +.\" products derived from this software without specific prior +.\" written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS +.\" OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +.\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +.\" DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE +.\" GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +.\" IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +.\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN +.\" IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.\" +.Dd December 5, 2022 +.Dt ZIP_ERROR_SET_FROM_SOURCE 3 +.Os +.Sh NAME +.Nm zip_error_set_from_source +.Nd fill in zip_error structure from source +.Sh LIBRARY +libzip (-lzip) +.Sh SYNOPSIS +.In zip.h +.Ft void +.Fn zip_error_set_from_source "zip_error_t *ze" "zip_source_t *src" +.Sh DESCRIPTION +The +.Fn zip_error_set_from_source +function sets the zip_error pointed to by +.Ar ze +to the error reported by +.Ar src +as returned by +.Xr zip_error_source 3 . +.Ar ze +must be allocated and initialized with +.Xr zip_error_init 3 +before calling +.Fn zip_error_set_from_source . +.Sh SEE ALSO +.Xr libzip 3 , +.Xr zip_error_init 3 , +.Xr zip_error_set 3 +.Sh HISTORY +.Fn zip_error_set_from_source +was added in libzip 1.10. +.Sh AUTHORS +.An -nosplit +.An Dieter Baron Aq Mt dillo@nih.at +and +.An Thomas Klausner Aq Mt wiz@gatalith.at diff --git a/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_error_strerror.3 b/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_error_strerror.3 new file mode 100644 index 0000000..40d5865 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_error_strerror.3 @@ -0,0 +1,67 @@ +.\" zip_error_strerror.mdoc -- create human-readable version of zip_error +.\" Copyright (C) 2014-2017 Dieter Baron and Thomas Klausner +.\" +.\" This file is part of libzip, a library to manipulate ZIP archives. +.\" The authors can be contacted at +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in +.\" the documentation and/or other materials provided with the +.\" distribution. +.\" 3. The names of the authors may not be used to endorse or promote +.\" products derived from this software without specific prior +.\" written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS +.\" OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +.\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +.\" DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE +.\" GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +.\" IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +.\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN +.\" IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.\" +.Dd December 18, 2017 +.Dt ZIP_ERROR_STRERROR 3 +.Os +.Sh NAME +.Nm zip_error_strerror +.Nd create human-readable string for zip_error +.Sh LIBRARY +libzip (-lzip) +.Sh SYNOPSIS +.In zip.h +.Ft const char * +.Fn zip_error_strerror "zip_error_t *ze" +.Sh DESCRIPTION +The +.Fn zip_error_strerror +function returns an error message string corresponding to +.Ar ze +like +.Xr strerror 3 . +This string will stay valid until the next call to +.Fn zip_error_strerror +or until +.Xr zip_error_fini 3 +is called. +.Sh SEE ALSO +.Xr libzip 3 , +.Xr strerror 3 , +.Xr zip_error_fini 3 +.Sh HISTORY +.Fn zip_error_strerror +was added in libzip 1.0. +.Sh AUTHORS +.An -nosplit +.An Dieter Baron Aq Mt dillo@nih.at +and +.An Thomas Klausner Aq Mt wiz@gatalith.at diff --git a/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_error_system_type.3 b/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_error_system_type.3 new file mode 100644 index 0000000..5a74dc0 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_error_system_type.3 @@ -0,0 +1,77 @@ +.\" zip_error_system_type.mdoc -- return system type for error +.\" Copyright (C) 2014-2017 Dieter Baron and Thomas Klausner +.\" +.\" This file is part of libzip, a library to manipulate ZIP archives. +.\" The authors can be contacted at +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in +.\" the documentation and/or other materials provided with the +.\" distribution. +.\" 3. The names of the authors may not be used to endorse or promote +.\" products derived from this software without specific prior +.\" written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS +.\" OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +.\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +.\" DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE +.\" GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +.\" IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +.\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN +.\" IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.\" +.Dd December 18, 2017 +.Dt ZIP_ERROR_SYSTEM_TYPE 3 +.Os +.Sh NAME +.Nm zip_error_system_type +.Nd return type of system error +.Sh LIBRARY +libzip (-lzip) +.Sh SYNOPSIS +.In zip.h +.Ft int +.Fn zip_error_system_type "const zip_error_t *ze" +.Sh DESCRIPTION +The +.Fn zip_error_system_type +function returns the type of the system specific part for the zip_error +.Ar ze . +Currently, the following system types are defined: +.Bl -tag -width ZIP_ET_NONE +.It Dv ZIP_ET_NONE +System specific part of +.Ar ze +is unused. +.It Dv ZIP_ET_SYS +System specific part of +.Ar ze +is an +.Xr errno 2 . +.It Dv ZIP_ET_ZLIB +System specific part of +.Ar ze +is a +.Xr zlib 3 +error. +.El +.Sh SEE ALSO +.Xr libzip 3 , +.Xr zip_error_code_system 3 +.Sh HISTORY +.Fn zip_error_system_type +was added in libzip 1.0. +.Sh AUTHORS +.An -nosplit +.An Dieter Baron Aq Mt dillo@nih.at +and +.An Thomas Klausner Aq Mt wiz@gatalith.at diff --git a/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_error_to_data.3 b/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_error_to_data.3 new file mode 100644 index 0000000..6fdb2a3 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_error_to_data.3 @@ -0,0 +1,69 @@ +.\" zip_error_to_data.mdoc -- create error data for ZIP_SOURCE_ERROR +.\" Copyright (C) 2014-2017 Dieter Baron and Thomas Klausner +.\" +.\" This file is part of libzip, a library to manipulate ZIP archives. +.\" The authors can be contacted at +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in +.\" the documentation and/or other materials provided with the +.\" distribution. +.\" 3. The names of the authors may not be used to endorse or promote +.\" products derived from this software without specific prior +.\" written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS +.\" OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +.\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +.\" DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE +.\" GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +.\" IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +.\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN +.\" IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.\" +.Dd December 18, 2017 +.Dt ZIP_ERROR_TO_DATA 3 +.Os +.Sh NAME +.Nm zip_error_to_data +.Nd convert zip_error to return value suitable for ZIP_SOURCE_ERROR +.Sh LIBRARY +libzip (-lzip) +.Sh SYNOPSIS +.In zip.h +.Ft zip_int64_t +.Fn zip_error_to_data "const zip_error_t *ze" "void *data" "zip_uint64_t len" +.Sh DESCRIPTION +.Fn zip_error_to_data +function converts the zip_error +.Ar ze +into data suitable as return value for +.Dv ZIP_SOURCE_ERROR . +The data is written into the buffer +.Ar data +of size +.Ar len . +If the buffer is not large enough to hold 2 ints, an error is +returned. +.Sh RETURN VALUES +.Fn zip_error_to_data +returns 2*(sizeof int) on success, and \-1 on error. +.Sh SEE ALSO +.Xr libzip 3 , +.Xr zip_source_function 3 +.Sh HISTORY +.Fn zip_error_to_data +was added in libzip 1.0. +.Sh AUTHORS +.An -nosplit +.An Dieter Baron Aq Mt dillo@nih.at +and +.An Thomas Klausner Aq Mt wiz@gatalith.at diff --git a/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_error_to_str.3 b/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_error_to_str.3 new file mode 100644 index 0000000..62b5a32 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_error_to_str.3 @@ -0,0 +1,88 @@ +.\" zip_error_to_str.mdoc -- get string representation of zip error code +.\" Copyright (C) 2003-2017 Dieter Baron and Thomas Klausner +.\" +.\" This file is part of libzip, a library to manipulate ZIP archives. +.\" The authors can be contacted at +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in +.\" the documentation and/or other materials provided with the +.\" distribution. +.\" 3. The names of the authors may not be used to endorse or promote +.\" products derived from this software without specific prior +.\" written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS +.\" OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +.\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +.\" DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE +.\" GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +.\" IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +.\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN +.\" IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.\" +.Dd December 18, 2017 +.Dt ZIP_ERROR_TO_STR 3 +.Os +.Sh NAME +.Nm zip_error_to_str +.Nd get string representation of zip error (obsolete interface) +.Sh LIBRARY +libzip (-lzip) +.Sh SYNOPSIS +.In zip.h +.Ft int +.Fn zip_error_to_str "char *buf" "zip_uint64_t len" "int ze" "int se" +.Sh DESCRIPTION +The function +.Fn zip_error_to_str +is deprecated; use +.Xr zip_error_init_with_code 3 +and +.Xr zip_error_strerror 3 +instead. +.Pp +Replace +.Bd -literal -offset indent +char buf[BUFSIZE]; +zip_error_to_str(buf, sizeof(buf), ze, se); +printf("%s", buf); +.Ed +with +.Bd -literal -offset indent +zip_error_t error; +zip_error_init_with_code(&error, ze); +printf("%s", zip_error_strerror(&error)); +zip_error_fini(&error); +.Ed +.Sh SEE ALSO +.Xr libzip 3 , +.Xr zip_error_init_with_code 3 , +.Xr zip_error_strerror 3 +.Sh HISTORY +.Fn zip_error_to_str +was added in libzip 0.6. +In libzip 0.10 the type of +.Ar len +was changed from +.Vt size_t +to +.Vt zip_uint64_t . +It was deprecated in libzip 1.0, use +.Fn zip_error_init_with_code +and +.Fn zip_error_strerror +instead. +.Sh AUTHORS +.An -nosplit +.An Dieter Baron Aq Mt dillo@nih.at +and +.An Thomas Klausner Aq Mt wiz@gatalith.at diff --git a/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_errors.3 b/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_errors.3 new file mode 100644 index 0000000..117e2e9 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_errors.3 @@ -0,0 +1,125 @@ +.\" zip_errors.mdoc -- list of all libzip error codes +.\" Copyright (C) 1999-2024 Dieter Baron and Thomas Klausner +.\" +.\" This file is part of libzip, a library to manipulate ZIP archives. +.\" The authors can be contacted at +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in +.\" the documentation and/or other materials provided with the +.\" distribution. +.\" 3. The names of the authors may not be used to endorse or promote +.\" products derived from this software without specific prior +.\" written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS +.\" OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +.\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +.\" DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE +.\" GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +.\" IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +.\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN +.\" IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.\" +.\" This file was generated automatically by ./make_zip_errors.sh +.\" from ../lib/zip.h; make changes there. +.\" +.Dd March 15, 2024 +.Dt ZIP_ERRORS 3 +.Os +.Sh NAME +.Nm zip_errors +.Nd list of all libzip error codes +.Sh LIBRARY +libzip (-lzip) +.Sh SYNOPSIS +.In zip.h +.Sh DESCRIPTION +The following error codes are used by libzip: +.Bl -tag -width XZIPXERXCOMPNOTSUPPXX +.It Bq Er ZIP_ER_CANCELLED +Operation cancelled. +.It Bq Er ZIP_ER_CHANGED +Entry has been changed. +.It Bq Er ZIP_ER_CLOSE +Closing zip archive failed. +.It Bq Er ZIP_ER_COMPNOTSUPP +Compression method not supported. +.It Bq Er ZIP_ER_COMPRESSED_DATA +Compressed data invalid. +.It Bq Er ZIP_ER_CRC +CRC error. +.It Bq Er ZIP_ER_DATA_LENGTH +Unexpected length of data. +.It Bq Er ZIP_ER_DELETED +Entry has been deleted. +.It Bq Er ZIP_ER_ENCRNOTSUPP +Encryption method not supported. +.It Bq Er ZIP_ER_EOF +Premature end of file. +.It Bq Er ZIP_ER_EXISTS +File already exists. +.It Bq Er ZIP_ER_INCONS +Zip archive inconsistent. +.It Bq Er ZIP_ER_INTERNAL +Internal error. +.It Bq Er ZIP_ER_INUSE +Resource still in use. +.It Bq Er ZIP_ER_INVAL +Invalid argument. +.It Bq Er ZIP_ER_MEMORY +Malloc failure. +.It Bq Er ZIP_ER_MULTIDISK +Multi-disk zip archives not supported. +.It Bq Er ZIP_ER_NOENT +No such file. +.It Bq Er ZIP_ER_NOPASSWD +No password provided. +.It Bq Er ZIP_ER_NOT_ALLOWED +Not allowed in torrentzip. +.It Bq Er ZIP_ER_NOZIP +Not a zip archive. +.It Bq Er ZIP_ER_OK +No error. +.It Bq Er ZIP_ER_OPEN +Can't open file. +.It Bq Er ZIP_ER_OPNOTSUPP +Operation not supported. +.It Bq Er ZIP_ER_RDONLY +Read-only archive. +.It Bq Er ZIP_ER_READ +Read error. +.It Bq Er ZIP_ER_REMOVE +Can't remove file. +.It Bq Er ZIP_ER_RENAME +Renaming temporary file failed. +.It Bq Er ZIP_ER_SEEK +Seek error. +.It Bq Er ZIP_ER_TELL +Tell error. +.It Bq Er ZIP_ER_TMPOPEN +Failure to create temporary file. +.It Bq Er ZIP_ER_TRUNCATED_ZIP +Possibly truncated or corrupted zip archive. +.It Bq Er ZIP_ER_WRITE +Write error. +.It Bq Er ZIP_ER_WRONGPASSWD +Wrong password provided. +.It Bq Er ZIP_ER_ZIPCLOSED +Containing zip archive was closed. +.It Bq Er ZIP_ER_ZLIB +Zlib error. +.El +.Sh AUTHORS +.An -nosplit +.An Dieter Baron Aq Mt dillo@nih.at +and +.An Thomas Klausner Aq Mt wiz@gatalith.at diff --git a/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_fclose.3 b/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_fclose.3 new file mode 100644 index 0000000..42e5e80 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_fclose.3 @@ -0,0 +1,65 @@ +.\" zip_fclose.mdoc -- close file in zip archive +.\" Copyright (C) 2003-2017 Dieter Baron and Thomas Klausner +.\" +.\" This file is part of libzip, a library to manipulate ZIP archives. +.\" The authors can be contacted at +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in +.\" the documentation and/or other materials provided with the +.\" distribution. +.\" 3. The names of the authors may not be used to endorse or promote +.\" products derived from this software without specific prior +.\" written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS +.\" OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +.\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +.\" DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE +.\" GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +.\" IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +.\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN +.\" IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.\" +.Dd December 18, 2017 +.Dt ZIP_FCLOSE 3 +.Os +.Sh NAME +.Nm zip_fclose +.Nd close file in zip archive +.Sh LIBRARY +libzip (-lzip) +.Sh SYNOPSIS +.In zip.h +.Ft int +.Fn zip_fclose "zip_file_t *file" +.Sh DESCRIPTION +The +.Fn zip_fclose +function closes +.Ar file +and frees the memory allocated for it. +.Sh RETURN VALUES +Upon successful completion 0 is returned. +Otherwise, the error code is returned. +.Sh SEE ALSO +.Xr libzip 3 , +.Xr zip_fopen 3 , +.Xr zip_fread 3 , +.Xr zip_fseek 3 +.Sh HISTORY +.Fn zip_fclose +was added in libzip 0.6. +.Sh AUTHORS +.An -nosplit +.An Dieter Baron Aq Mt dillo@nih.at +and +.An Thomas Klausner Aq Mt wiz@gatalith.at diff --git a/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_fdopen.3 b/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_fdopen.3 new file mode 100644 index 0000000..ee249e5 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_fdopen.3 @@ -0,0 +1,149 @@ +.\" zip_fdopen.mdoc -- open zip archive using existing file descriptor +.\" Copyright (C) 2009-2021 Dieter Baron and Thomas Klausner +.\" +.\" This file is part of libzip, a library to manipulate ZIP archives. +.\" The authors can be contacted at +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in +.\" the documentation and/or other materials provided with the +.\" distribution. +.\" 3. The names of the authors may not be used to endorse or promote +.\" products derived from this software without specific prior +.\" written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS +.\" OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +.\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +.\" DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE +.\" GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +.\" IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +.\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN +.\" IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.\" +.Dd September 23, 2022 +.Dt ZIP_FDOPEN 3 +.Os +.Sh NAME +.Nm zip_fdopen +.Nd open zip archive using open file descriptor +.Sh LIBRARY +libzip (-lzip) +.Sh SYNOPSIS +.In zip.h +.Ft zip_t * +.Fn zip_fdopen "int fd" "int flags" "int *errorp" +.Sh DESCRIPTION +The zip archive specified by the open file descriptor +.Ar fd +is opened and a pointer to a +.Ft struct zip , +used to manipulate the archive, is returned. +In contrast to +.Xr zip_open 3 , +using +.Nm zip_fdopen +the archive can only be opened in read-only mode. +The +.Ar fd +argument may not be used any longer after calling +.Nm zip_fdopen . +The +.Fa flags +are specified by +.Em or Ns No 'ing +the following values, or 0 for none of them. +.Bl -tag -offset indent -width ZIP_CHECKCONS +.It Dv ZIP_CHECKCONS +Perform additional stricter consistency checks on the archive, and +error if they fail. +.El +.Pp +If an error occurs and +.Ar errorp +is +.No non- Ns Dv NULL , +it will be set to the corresponding error code. +.Sh RETURN VALUES +Upon successful completion +.Fn zip_fdopen +returns a +.Ft struct zip +pointer, and +.Ar fd +should not be used any longer, nor passed to +.Xr close 2 . +Otherwise, +.Dv NULL +is returned and +.Ar *errorp +is set to indicate the error. +In the error case, +.Ar fd +remains unchanged. +.Sh ERRORS +The file specified by +.Ar fd +is prepared for use by +.Xr libzip 3 +unless: +.Bl -tag -width Er +.It Bq Er ZIP_ER_INCONS +Inconsistencies were found in the file specified by +.Ar path . +This error is often caused by specifying +.Dv ZIP_CHECKCONS +but can also happen without it. +.It Bq Er ZIP_ER_INVAL +The +.Ar flags +argument is invalid. +Not all +.Xr zip_open 3 +flags are allowed for +.Nm zip_fdopen , +see +.Sx DESCRIPTION . +.It Bq Er ZIP_ER_MEMORY +Required memory could not be allocated. +.It Bq Er ZIP_ER_NOZIP +The file specified by +.Ar fd +is not a zip archive. +.It Bq Er ZIP_ER_OPEN +The file specified by +.Ar fd +could not be prepared for use by +.Xr libzip 3 . +.It Bq Er ZIP_ER_OPNOTSUPP +This functionality has been disabled at compile time. +.It Bq Er ZIP_ER_READ +A read error occurred; see +.Va errno +for details. +.It Bq Er ZIP_ER_SEEK +The file specified by +.Ar fd +does not allow seeks. +.El +.Sh SEE ALSO +.Xr libzip 3 , +.Xr zip_close 3 , +.Xr zip_error_strerror 3 , +.Xr zip_open 3 +.Sh HISTORY +.Fn zip_fdopen +was added in libzip 1.0. +.Sh AUTHORS +.An -nosplit +.An Dieter Baron Aq Mt dillo@nih.at +and +.An Thomas Klausner Aq Mt wiz@gatalith.at diff --git a/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_file_add.3 b/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_file_add.3 new file mode 100644 index 0000000..8a6ceb7 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_file_add.3 @@ -0,0 +1,175 @@ +.\" zip_file_add.mdoc -- add files to zip archive +.\" Copyright (C) 2004-2021 Dieter Baron and Thomas Klausner +.\" +.\" This file is part of libzip, a library to manipulate ZIP archives. +.\" The authors can be contacted at +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in +.\" the documentation and/or other materials provided with the +.\" distribution. +.\" 3. The names of the authors may not be used to endorse or promote +.\" products derived from this software without specific prior +.\" written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS +.\" OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +.\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +.\" DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE +.\" GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +.\" IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +.\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN +.\" IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.\" +.Dd March 18, 2024 +.Dt ZIP_FILE_ADD 3 +.Os +.Sh NAME +.Nm zip_file_add , +.Nm zip_file_replace +.Nd add file to zip archive or replace file in zip archive +.Sh LIBRARY +libzip (-lzip) +.Sh SYNOPSIS +.In zip.h +.Ft zip_int64_t +.Fn zip_file_add "zip_t *archive" "const char *name" "zip_source_t *source" "zip_flags_t flags" +.Ft int +.Fn zip_file_replace "zip_t *archive" "zip_uint64_t index" "zip_source_t *source" "zip_flags_t flags" +.Sh DESCRIPTION +The function +.Fn zip_file_add +adds a file to a zip archive, while +.Fn zip_file_replace +replaces an existing file in a zip archive. +The argument +.Ar archive +specifies the zip archive to which the file should be added. +.Ar name +is the file's name in the zip archive (for +.Fn zip_file_add ) , +while +.Ar index +specifies which file should be replaced (for +.Fn zip_file_replace ) . +The +.Ar flags +argument can be any combination of +.Dv ZIP_FL_OVERWRITE +with one of +.Dv ZIP_FL_ENC_* : +.Bl -tag -width XZIPXFLXENCXSTRICTXX +.It Dv ZIP_FL_OVERWRITE +Overwrite any existing file of the same name. +For +.Nm zip_file_add +only. +.It Dv ZIP_FL_ENC_GUESS +Guess encoding of +.Ar name +(default). +(Only CP-437 and UTF-8 are recognized.) +.It Dv ZIP_FL_ENC_UTF_8 +Interpret +.Ar name +as UTF-8. +.It Dv ZIP_FL_ENC_CP437 +Interpret +.Ar name +as code page 437 (CP-437). +.El +The data is obtained from the +.Ar source +argument, see +.Xr zip_source 3 . +.Pp +.Em NOTE : +.Xr zip_source_free 3 +should not be called on a +.Ar source +after it was used successfully in a +.Nm zip_file_add +or +.Nm zip_file_replace +call. +.Pp +Please also note that when using +.Nm zip_replace , +the target file's extra field information will be deleted since this +usually is dependent on the file contents. +If you want to keep them, query them beforehand with +.Xr zip_file_extra_field_get 3 +and restore them after +.Nm zip_replace +with +.Xr zip_file_extra_field_set 3 . +.Sh RETURN VALUES +Upon successful completion, +.Fn zip_file_add +returns the index of the new file in the archive, and +.Fn zip_file_replace +returns 0. +Otherwise, \-1 is returned and the error code in +.Ar archive +is set to indicate the error. +.Sh EXAMPLES +.Bd -literal -offset indent +zip_source_t *s; +const char buf[]="teststring"; + +if ((s=zip_source_buffer(archive, buf, sizeof(buf), 0)) == NULL || + zip_file_add(archive, name, s, ZIP_FL_ENC_UTF_8) < 0) { + zip_source_free(s); + printf("error adding file: %s\en", zip_strerror(archive)); +} +.Ed +.Sh ERRORS +.Fn zip_file_add +and +.Fn zip_file_replace +fail if: +.Bl -tag -width Er +.It Bq Er ZIP_ER_EXISTS +There is already a file called +.Ar name +in the archive. +(Only applies to +.Fn zip_file_add , +and only if +.Dv ZIP_FL_OVERWRITE +is not provided). +.It Bq Er ZIP_ER_INVAL +.Ar source +or +.Ar name +are +.Dv NULL , +or +.Ar index +is invalid. +.It Bq Er ZIP_ER_MEMORY +Required memory could not be allocated. +.It Bq Er ZIP_ER_RDONLY +Archive was opened in read-only mode. +.El +.Sh SEE ALSO +.Xr libzip 3 , +.Xr zip_source 3 +.Sh HISTORY +.Fn zip_file_add +and +.Fn zip_file_replace +were added in libzip 0.11. +.Sh AUTHORS +.An -nosplit +.An Dieter Baron Aq Mt dillo@nih.at +and +.An Thomas Klausner Aq Mt wiz@gatalith.at diff --git a/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_file_attributes_init.3 b/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_file_attributes_init.3 new file mode 100644 index 0000000..27ca205 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_file_attributes_init.3 @@ -0,0 +1,61 @@ +.\" zip_file_attributes_init.mdoc -- initialize attributes structure +.\" Copyright (C) 2020 Dieter Baron and Thomas Klausner +.\" +.\" This file is part of libzip, a library to manipulate ZIP files. +.\" The authors can be contacted at +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in +.\" the documentation and/or other materials provided with the +.\" distribution. +.\" 3. The names of the authors may not be used to endorse or promote +.\" products derived from this software without specific prior +.\" written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS +.\" OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +.\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +.\" DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE +.\" GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +.\" IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +.\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN +.\" IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.\" +.Dd April 17, 2020 +.Dt ZIP_FILE_ATTRIBUTES_INIT 3 +.Os +.Sh NAME +.Nm zip_file_attributes_init +.Nd initialize zip file attributes structure +.Sh LIBRARY +libzip (-lzip) +.Sh SYNOPSIS +.In zip.h +.Ft void +.Fn zip_file_attributes_init "zip_file_attributes_t *attributes" +.Sh DESCRIPTION +The +.Fn zip_file_attributes_init +initializes a +.Vt zip_file_attributes_t +structure with default values. +It must be called before modifying such a structure for the first time. +.Sh SEE ALSO +.Xr libzip 3 , +.Xr zip_source_function 3 +.Sh HISTORY +.Fn zip_file_attributes_init +was added in libzip 1.7.0. +.Sh AUTHORS +.An -nosplit +.An Dieter Baron Aq Mt dillo@nih.at +and +.An Thomas Klausner Aq Mt wiz@gatalith.at diff --git a/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_file_error_clear.3 b/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_file_error_clear.3 new file mode 100644 index 0000000..5b2bc6e --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_file_error_clear.3 @@ -0,0 +1,69 @@ +.\" zip_error_clear.mdoc -- clear error state for archive or file +.\" Copyright (C) 2006-2021 Dieter Baron and Thomas Klausner +.\" +.\" This file is part of libzip, a library to manipulate ZIP archives. +.\" The authors can be contacted at +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in +.\" the documentation and/or other materials provided with the +.\" distribution. +.\" 3. The names of the authors may not be used to endorse or promote +.\" products derived from this software without specific prior +.\" written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS +.\" OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +.\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +.\" DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE +.\" GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +.\" IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +.\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN +.\" IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.\" +.Dd December 18, 2017 +.Dt ZIP_ERROR_CLEAR 3 +.Os +.Sh NAME +.Nm zip_error_clear , +.Nm zip_file_error_clear +.Nd clear error state for archive or file +.Sh LIBRARY +libzip (-lzip) +.Sh SYNOPSIS +.In zip.h +.Ft void +.Fn zip_error_clear "zip_t *archive" +.Ft void +.Fn zip_file_error_clear "zip_file_t *file" +.Sh DESCRIPTION +The +.Fn zip_error_clear +function clears the error state for the zip archive +.Ar archive . +.Pp +The +.Fn zip_file_error_clear +function does the same for the zip file +.Ar file . +.Sh SEE ALSO +.Xr libzip 3 , +.Xr zip_get_error 3 +.Sh HISTORY +.Fn zip_error_clear +and +.Fn zip_file_error_clear +were added in libzip 0.8. +.Sh AUTHORS +.An -nosplit +.An Dieter Baron Aq Mt dillo@nih.at +and +.An Thomas Klausner Aq Mt wiz@gatalith.at diff --git a/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_file_error_get.3 b/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_file_error_get.3 new file mode 100644 index 0000000..55b0979 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_file_error_get.3 @@ -0,0 +1,117 @@ +.\" zip_error_get.mdoc -- get error codes for archive or file +.\" Copyright (C) 2004-2017 Dieter Baron and Thomas Klausner +.\" +.\" This file is part of libzip, a library to manipulate ZIP archives. +.\" The authors can be contacted at +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in +.\" the documentation and/or other materials provided with the +.\" distribution. +.\" 3. The names of the authors may not be used to endorse or promote +.\" products derived from this software without specific prior +.\" written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS +.\" OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +.\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +.\" DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE +.\" GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +.\" IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +.\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN +.\" IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.\" +.Dd December 18, 2017 +.Dt ZIP_ERROR_GET 3 +.Os +.Sh NAME +.Nm zip_error_get , +.Nm zip_file_error_get +.Nd get error codes for archive or file (obsolete interface) +.Sh LIBRARY +libzip (-lzip) +.Sh SYNOPSIS +.In zip.h +.Ft void +.Fn zip_error_get "zip_t *archive" "int *zep" "int *sep" +.Ft void +.Fn zip_file_error_get "zip_file_t *file" "int *zep" "int *sep" +.Sh DESCRIPTION +The functions +.Fn zip_error_get +and +.Fn zip_file_error_get +are deprecated. +Use +.Xr zip_error_code_system 3 , +.Xr zip_error_code_zip 3 , +.Xr zip_file_get_error 3 , +and +.Xr zip_get_error 3 +instead. +.Pp +For +.Fn zip_error_get , +replace +.Bd -literal -offset indent +int ze, se; +zip_error_get(za, &ze, &se); +.Ed +with +.Bd -literal -offset indent +int ze, se; +zip_error_t *error = zip_get_error(za); +ze = zip_error_code_zip(error); +se = zip_error_code_system(error); +.Ed +For +.Fn zip_file_error_get , +replace +.Bd -literal -offset indent +int ze, se; +zip_file_error_get(zf, &ze, &se); +.Ed +with +.Bd -literal -offset indent +int ze, se; +zip_error_t *error = zip_file_get_error(zf); +ze = zip_error_code_zip(error); +se = zip_error_code_system(error); +.Ed +.Sh SEE ALSO +.Xr libzip 3 , +.Xr zip_error_code_system 3 , +.Xr zip_error_code_zip 3 , +.Xr zip_file_get_error 3 , +.Xr zip_get_error 3 +.Sh HISTORY +.Fn zip_error_get +was added in libzip 0.6. +It was deprecated in libzip 1.0, use +.Fn zip_get_error , +.Fn zip_error_code_zip , +/ +.Fn zip_error_code_system +instead. +.Pp +.Fn zip_file_error_get +was added in libzip 0.6. +It was deprecated in libzip 1.0, use +.Fn zip_file_get_error , +.Fn zip_error_code_zip , +/ +.Fn zip_error_code_system +instead. +.Sh AUTHORS +.An -nosplit +.An Dieter Baron Aq Mt dillo@nih.at +and +.An Thomas Klausner Aq Mt wiz@gatalith.at diff --git a/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_file_extra_field_delete.3 b/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_file_extra_field_delete.3 new file mode 100644 index 0000000..a194161 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_file_extra_field_delete.3 @@ -0,0 +1,130 @@ +.\" zip_file_extra_field_delete.mdoc -- delete extra field for file in zip +.\" Copyright (C) 2012-2017 Dieter Baron and Thomas Klausner +.\" +.\" This file is part of libzip, a library to manipulate ZIP files. +.\" The authors can be contacted at +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in +.\" the documentation and/or other materials provided with the +.\" distribution. +.\" 3. The names of the authors may not be used to endorse or promote +.\" products derived from this software without specific prior +.\" written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS +.\" OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +.\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +.\" DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE +.\" GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +.\" IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +.\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN +.\" IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.\" +.Dd December 18, 2017 +.Dt ZIP_FILE_EXTRA_FIELD_DELETE 3 +.Os +.Sh NAME +.Nm zip_file_extra_field_delete , +.Nm zip_file_extra_field_delete_by_id +.Nd delete extra field for file in zip +.Sh LIBRARY +libzip (-lzip) +.Sh SYNOPSIS +.In zip.h +.Ft int +.Fn zip_file_extra_field_delete "zip_t *archive" "zip_uint64_t index" "zip_uint16_t extra_field_index" "zip_flags_t flags" +.Ft int +.Fn zip_file_extra_field_delete_by_id "zip_t *archive" "zip_uint64_t index" "zip_uint16_t extra_field_id" "zip_uint16_t extra_field_index" "zip_flags_t flags" +.Sh DESCRIPTION +The +.Fn zip_file_extra_field_delete +function deletes the extra field with index +.Ar extra_field_index +for the file at position +.Ar index +in the zip archive. +.Pp +If +.Ar extra_field_index +is +.Dv ZIP_EXTRA_FIELD_ALL , +then all extra fields will be deleted. +.Pp +The following +.Ar flags +are supported: +.Bl -tag -width ZIP_FL_CENTRALXX -offset indent +.It Dv ZIP_FL_CENTRAL +Delete extra fields from the archive's central directory. +.It Dv ZIP_FL_LOCAL +Delete extra fields from the local file headers. +.El +.Pp +The +.Fn zip_file_extra_field_delete_by_id +function deletes the extra field with ID (two-byte signature) +.Ar extra_field_id +and index +.Ar extra_field_index +(in other words, the +.Ar extra_field_index Ns No 'th +extra field with ID +.Ar extra_field_id ) +The other arguments are the same as for +.Fn zip_file_extra_field_delete +.Dv ( ZIP_EXTRA_FIELD_ALL +will delete all extra fields of the specified ID). +.Pp +Please note that due to the library design, the index of an extra +field may be different between central directory and local file +headers. +For this reason, it is not allowed to specify both +.Dv ZIP_FL_CENTRAL +and +.Dv ZIP_FL_LOCAL +in +.Ar flags , +except when deleting all extra fields (i.e., +.Ar extra_field_index +being +.Dv ZIP_EXTRA_FIELD_ALL ) . +.Sh RETURN VALUES +Upon successful completion 0 is returned. +Otherwise, \-1 is returned and the error code in +.Ar archive +is set to indicate the error. +.Sh ERRORS +.Fn zip_file_extra_field_delete +and +.Fn zip_file_extra_field_delete_by_id +fail if: +.Bl -tag -width Er +.It Bq Er ZIP_ER_NOENT +.Ar index +is not a valid file index in +.Ar archive . +.El +.Sh SEE ALSO +.Xr libzip 3 , +.Xr zip_file_extra_field_get 3 , +.Xr zip_file_extra_field_set 3 , +.Xr zip_file_extra_fields_count 3 +.Sh HISTORY +.Fn zip_file_extra_field_delete +and +.Fn zip_file_extra_field_delete_by_id +were added in libzip 0.11. +.Sh AUTHORS +.An -nosplit +.An Dieter Baron Aq Mt dillo@nih.at +and +.An Thomas Klausner Aq Mt wiz@gatalith.at diff --git a/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_file_extra_field_delete_by_id.3 b/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_file_extra_field_delete_by_id.3 new file mode 100644 index 0000000..a194161 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_file_extra_field_delete_by_id.3 @@ -0,0 +1,130 @@ +.\" zip_file_extra_field_delete.mdoc -- delete extra field for file in zip +.\" Copyright (C) 2012-2017 Dieter Baron and Thomas Klausner +.\" +.\" This file is part of libzip, a library to manipulate ZIP files. +.\" The authors can be contacted at +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in +.\" the documentation and/or other materials provided with the +.\" distribution. +.\" 3. The names of the authors may not be used to endorse or promote +.\" products derived from this software without specific prior +.\" written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS +.\" OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +.\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +.\" DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE +.\" GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +.\" IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +.\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN +.\" IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.\" +.Dd December 18, 2017 +.Dt ZIP_FILE_EXTRA_FIELD_DELETE 3 +.Os +.Sh NAME +.Nm zip_file_extra_field_delete , +.Nm zip_file_extra_field_delete_by_id +.Nd delete extra field for file in zip +.Sh LIBRARY +libzip (-lzip) +.Sh SYNOPSIS +.In zip.h +.Ft int +.Fn zip_file_extra_field_delete "zip_t *archive" "zip_uint64_t index" "zip_uint16_t extra_field_index" "zip_flags_t flags" +.Ft int +.Fn zip_file_extra_field_delete_by_id "zip_t *archive" "zip_uint64_t index" "zip_uint16_t extra_field_id" "zip_uint16_t extra_field_index" "zip_flags_t flags" +.Sh DESCRIPTION +The +.Fn zip_file_extra_field_delete +function deletes the extra field with index +.Ar extra_field_index +for the file at position +.Ar index +in the zip archive. +.Pp +If +.Ar extra_field_index +is +.Dv ZIP_EXTRA_FIELD_ALL , +then all extra fields will be deleted. +.Pp +The following +.Ar flags +are supported: +.Bl -tag -width ZIP_FL_CENTRALXX -offset indent +.It Dv ZIP_FL_CENTRAL +Delete extra fields from the archive's central directory. +.It Dv ZIP_FL_LOCAL +Delete extra fields from the local file headers. +.El +.Pp +The +.Fn zip_file_extra_field_delete_by_id +function deletes the extra field with ID (two-byte signature) +.Ar extra_field_id +and index +.Ar extra_field_index +(in other words, the +.Ar extra_field_index Ns No 'th +extra field with ID +.Ar extra_field_id ) +The other arguments are the same as for +.Fn zip_file_extra_field_delete +.Dv ( ZIP_EXTRA_FIELD_ALL +will delete all extra fields of the specified ID). +.Pp +Please note that due to the library design, the index of an extra +field may be different between central directory and local file +headers. +For this reason, it is not allowed to specify both +.Dv ZIP_FL_CENTRAL +and +.Dv ZIP_FL_LOCAL +in +.Ar flags , +except when deleting all extra fields (i.e., +.Ar extra_field_index +being +.Dv ZIP_EXTRA_FIELD_ALL ) . +.Sh RETURN VALUES +Upon successful completion 0 is returned. +Otherwise, \-1 is returned and the error code in +.Ar archive +is set to indicate the error. +.Sh ERRORS +.Fn zip_file_extra_field_delete +and +.Fn zip_file_extra_field_delete_by_id +fail if: +.Bl -tag -width Er +.It Bq Er ZIP_ER_NOENT +.Ar index +is not a valid file index in +.Ar archive . +.El +.Sh SEE ALSO +.Xr libzip 3 , +.Xr zip_file_extra_field_get 3 , +.Xr zip_file_extra_field_set 3 , +.Xr zip_file_extra_fields_count 3 +.Sh HISTORY +.Fn zip_file_extra_field_delete +and +.Fn zip_file_extra_field_delete_by_id +were added in libzip 0.11. +.Sh AUTHORS +.An -nosplit +.An Dieter Baron Aq Mt dillo@nih.at +and +.An Thomas Klausner Aq Mt wiz@gatalith.at diff --git a/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_file_extra_field_get.3 b/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_file_extra_field_get.3 new file mode 100644 index 0000000..b1fa8a8 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_file_extra_field_get.3 @@ -0,0 +1,157 @@ +.\" zip_file_extra_field_get.mdoc -- get extra field for file in zip +.\" Copyright (C) 2012-2017 Dieter Baron and Thomas Klausner +.\" +.\" This file is part of libzip, a library to manipulate ZIP files. +.\" The authors can be contacted at +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in +.\" the documentation and/or other materials provided with the +.\" distribution. +.\" 3. The names of the authors may not be used to endorse or promote +.\" products derived from this software without specific prior +.\" written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS +.\" OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +.\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +.\" DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE +.\" GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +.\" IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +.\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN +.\" IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.\" +.Dd December 18, 2017 +.Dt ZIP_FILE_EXTRA_FIELD_GET 3 +.Os +.Sh NAME +.Nm zip_file_extra_field_get , +.Nm zip_file_extra_field_get_by_id +.Nd get extra field for file in zip +.Sh LIBRARY +libzip (-lzip) +.Sh SYNOPSIS +.In zip.h +.Ft const zip_uint8_t * +.Fn zip_file_extra_field_get "zip_t *archive" "zip_uint64_t index" "zip_uint16_t extra_field_index" "zip_uint16_t *idp" "zip_uint16_t *lenp" "zip_flags_t flags" +.Ft const zip_uint8_t * +.Fn zip_file_extra_field_get_by_id "zip_t *archive" "zip_uint64_t index" "zip_uint16_t extra_field_id" "zip_uint16_t extra_field_index" "zip_uint16_t *lenp" "zip_flags_t flags" +.Sh DESCRIPTION +The +.Fn zip_file_extra_field_get +function returns the extra field with index +.Ar extra_field_index +for the file at position +.Ar index +in the zip archive. +This pointer should not be modified or +.Xr free 3 Ap d , +and becomes invalid when +.Ar archive +is closed. +If +.Ar idp +is not +.Dv NULL , +the integer to which it points will be set to the ID (two-byte +signature) of the selected extra field. +If +.Ar lenp +is not +.Dv NULL , +the integer to which it points will be set to the length of the +extra field. +Generally speaking, +.Ar lenp +and +.Ar idp +should be passed since only the extra field data is returned (i.e., +neither the ID nor the length, if the +.Ar idp +and +.Ar lenp +arguments are not provided). +.Pp +The following +.Ar flags +are supported: +.Bl -tag -width ZIP_FL_UNCHANGEDXX -offset indent +.It Dv ZIP_FL_CENTRAL +Return extra fields from the archive's central directory. +.It Dv ZIP_FL_LOCAL +Return extra fields from the local file headers. +.It Dv ZIP_FL_UNCHANGED +Return the original unchanged extra fields, ignoring any changes made. +.El +.Pp +The +.Fn zip_file_extra_field_get_by_id +function returns the extra field with ID (two-byte signature) +.Ar extra_field_id +and index +.Ar extra_field_index +(in other words, the +.Ar extra_field_index Ns No 'th +extra field with ID +.Ar extra_field_id ) +The other arguments are the same as for +.Fn zip_file_extra_field_get . +.Sh RETURN VALUES +Upon successful completion, a pointer to an extra field is returned, +or +.Dv NULL +if there is no extra field with that +.Ar extra_field_index +for the file with index +.Ar index . +In case of an error, +.Dv NULL +is returned and the error code in +.Ar archive +is set to indicate the error. +.Sh ERRORS +.Fn zip_file_extra_field_get +and +.Fn zip_file_extra_field_get_by_id +fail if: +.Bl -tag -width Er +.It Bq Er ZIP_ER_NOENT +.Ar index +is not a valid file index in +.Ar archive , +or +.Ar extra_field_index +is not a valid extra file index (for ID +.Ar extra_field_id ) . +.El +.Sh SEE ALSO +.Xr libzip 3 , +.Xr zip_file_extra_field_delete 3 , +.Xr zip_file_extra_field_set 3 , +.Xr zip_file_extra_fields_count 3 +.Sh HISTORY +.Fn zip_file_extra_field_get +and +.Fn zip_file_extra_field_get_by_id +were added in libzip 0.11. +.Sh AUTHORS +.An -nosplit +.An Dieter Baron Aq Mt dillo@nih.at +and +.An Thomas Klausner Aq Mt wiz@gatalith.at +.Sh CAVEATS +Please note that the extra field IDs 0x0001 (ZIP64 extension), +0x6375 (Infozip UTF-8 comment), and +0x7075 (Infozip UTF-8 file name) can not be read using +.Fn zip_file_extra_field_get +since they are used by +.Xr libzip 3 +internally. diff --git a/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_file_extra_field_get_by_id.3 b/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_file_extra_field_get_by_id.3 new file mode 100644 index 0000000..b1fa8a8 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_file_extra_field_get_by_id.3 @@ -0,0 +1,157 @@ +.\" zip_file_extra_field_get.mdoc -- get extra field for file in zip +.\" Copyright (C) 2012-2017 Dieter Baron and Thomas Klausner +.\" +.\" This file is part of libzip, a library to manipulate ZIP files. +.\" The authors can be contacted at +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in +.\" the documentation and/or other materials provided with the +.\" distribution. +.\" 3. The names of the authors may not be used to endorse or promote +.\" products derived from this software without specific prior +.\" written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS +.\" OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +.\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +.\" DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE +.\" GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +.\" IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +.\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN +.\" IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.\" +.Dd December 18, 2017 +.Dt ZIP_FILE_EXTRA_FIELD_GET 3 +.Os +.Sh NAME +.Nm zip_file_extra_field_get , +.Nm zip_file_extra_field_get_by_id +.Nd get extra field for file in zip +.Sh LIBRARY +libzip (-lzip) +.Sh SYNOPSIS +.In zip.h +.Ft const zip_uint8_t * +.Fn zip_file_extra_field_get "zip_t *archive" "zip_uint64_t index" "zip_uint16_t extra_field_index" "zip_uint16_t *idp" "zip_uint16_t *lenp" "zip_flags_t flags" +.Ft const zip_uint8_t * +.Fn zip_file_extra_field_get_by_id "zip_t *archive" "zip_uint64_t index" "zip_uint16_t extra_field_id" "zip_uint16_t extra_field_index" "zip_uint16_t *lenp" "zip_flags_t flags" +.Sh DESCRIPTION +The +.Fn zip_file_extra_field_get +function returns the extra field with index +.Ar extra_field_index +for the file at position +.Ar index +in the zip archive. +This pointer should not be modified or +.Xr free 3 Ap d , +and becomes invalid when +.Ar archive +is closed. +If +.Ar idp +is not +.Dv NULL , +the integer to which it points will be set to the ID (two-byte +signature) of the selected extra field. +If +.Ar lenp +is not +.Dv NULL , +the integer to which it points will be set to the length of the +extra field. +Generally speaking, +.Ar lenp +and +.Ar idp +should be passed since only the extra field data is returned (i.e., +neither the ID nor the length, if the +.Ar idp +and +.Ar lenp +arguments are not provided). +.Pp +The following +.Ar flags +are supported: +.Bl -tag -width ZIP_FL_UNCHANGEDXX -offset indent +.It Dv ZIP_FL_CENTRAL +Return extra fields from the archive's central directory. +.It Dv ZIP_FL_LOCAL +Return extra fields from the local file headers. +.It Dv ZIP_FL_UNCHANGED +Return the original unchanged extra fields, ignoring any changes made. +.El +.Pp +The +.Fn zip_file_extra_field_get_by_id +function returns the extra field with ID (two-byte signature) +.Ar extra_field_id +and index +.Ar extra_field_index +(in other words, the +.Ar extra_field_index Ns No 'th +extra field with ID +.Ar extra_field_id ) +The other arguments are the same as for +.Fn zip_file_extra_field_get . +.Sh RETURN VALUES +Upon successful completion, a pointer to an extra field is returned, +or +.Dv NULL +if there is no extra field with that +.Ar extra_field_index +for the file with index +.Ar index . +In case of an error, +.Dv NULL +is returned and the error code in +.Ar archive +is set to indicate the error. +.Sh ERRORS +.Fn zip_file_extra_field_get +and +.Fn zip_file_extra_field_get_by_id +fail if: +.Bl -tag -width Er +.It Bq Er ZIP_ER_NOENT +.Ar index +is not a valid file index in +.Ar archive , +or +.Ar extra_field_index +is not a valid extra file index (for ID +.Ar extra_field_id ) . +.El +.Sh SEE ALSO +.Xr libzip 3 , +.Xr zip_file_extra_field_delete 3 , +.Xr zip_file_extra_field_set 3 , +.Xr zip_file_extra_fields_count 3 +.Sh HISTORY +.Fn zip_file_extra_field_get +and +.Fn zip_file_extra_field_get_by_id +were added in libzip 0.11. +.Sh AUTHORS +.An -nosplit +.An Dieter Baron Aq Mt dillo@nih.at +and +.An Thomas Klausner Aq Mt wiz@gatalith.at +.Sh CAVEATS +Please note that the extra field IDs 0x0001 (ZIP64 extension), +0x6375 (Infozip UTF-8 comment), and +0x7075 (Infozip UTF-8 file name) can not be read using +.Fn zip_file_extra_field_get +since they are used by +.Xr libzip 3 +internally. diff --git a/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_file_extra_field_set.3 b/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_file_extra_field_set.3 new file mode 100644 index 0000000..8646c64 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_file_extra_field_set.3 @@ -0,0 +1,115 @@ +.\" zip_file_extra_field_set.mdoc -- set extra field for file in zip +.\" Copyright (C) 2012-2017 Dieter Baron and Thomas Klausner +.\" +.\" This file is part of libzip, a library to manipulate ZIP files. +.\" The authors can be contacted at +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in +.\" the documentation and/or other materials provided with the +.\" distribution. +.\" 3. The names of the authors may not be used to endorse or promote +.\" products derived from this software without specific prior +.\" written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS +.\" OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +.\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +.\" DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE +.\" GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +.\" IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +.\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN +.\" IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.\" +.Dd December 18, 2017 +.Dt ZIP_FILE_EXTRA_FIELD_SET 3 +.Os +.Sh NAME +.Nm zip_file_extra_field_set +.Nd set extra field for file in zip +.Sh LIBRARY +libzip (-lzip) +.Sh SYNOPSIS +.In zip.h +.Ft int +.Fn zip_file_extra_field_set "zip_t *archive" "zip_uint64_t index" "zip_uint16_t extra_field_id" "zip_uint16_t extra_field_index" "const zip_uint8_t *extra_field_data" "zip_uint16_t len" "zip_flags_t flags" +.Sh DESCRIPTION +The +.Fn zip_file_extra_field_set +function sets the extra field with ID (two-byte signature) +.Ar extra_field_id +and index +.Ar extra_field_index +for the file at position +.Ar index +in the zip archive. +The extra field's data will be set to +.Ar extra_field_data +and length +.Ar len . +If a new entry shall be appended, set +.Ar extra_field_index +to +.Dv ZIP_EXTRA_FIELD_NEW . +.Pp +At least one of the following +.Ar flags +must be set: +.Bl -tag -width ZIP_FL_CENTRALXX -offset indent +.It Dv ZIP_FL_CENTRAL +Set extra field in the archive's central directory. +.It Dv ZIP_FL_LOCAL +Set extra field in the local file headers. +.El +.Pp +Please note that the extra field IDs 0x0001 (ZIP64 extension), +0x6375 (Infozip UTF-8 comment), and +0x7075 (Infozip UTF-8 file name) can not be set using +.Fn zip_file_extra_field_set +since they are set by +.Xr libzip 3 +automatically when needed. +.Sh RETURN VALUES +Upon successful completion 0 is returned. +Otherwise, \-1 is returned and the error code in +.Ar archive +is set to indicate the error. +.Sh ERRORS +.Fn zip_file_extra_field_set +fails if: +.Bl -tag -width Er +.It Bq Er ZIP_ER_INVAL +The extra field size is too large (ID and length need 4 bytes; the +maximum length of all extra fields for one file combined is 65536 +bytes). +This error also occurs if +.Ar extra_field_index +is too large. +.It Bq Er ZIP_ER_MEMORY +Required memory could not be allocated. +.It Bq Er ZIP_ER_NOENT +.Ar index +is not a valid file index in +.Ar archive . +.El +.Sh SEE ALSO +.Xr libzip 3 , +.Xr zip_file_extra_field_delete 3 , +.Xr zip_file_extra_field_get 3 , +.Xr zip_file_extra_fields_count 3 +.Sh HISTORY +.Fn zip_file_extra_field_set +was added in libzip 0.11. +.Sh AUTHORS +.An -nosplit +.An Dieter Baron Aq Mt dillo@nih.at +and +.An Thomas Klausner Aq Mt wiz@gatalith.at diff --git a/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_file_extra_fields_count.3 b/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_file_extra_fields_count.3 new file mode 100644 index 0000000..1b40f5e --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_file_extra_fields_count.3 @@ -0,0 +1,113 @@ +.\" zip_file_extra_fields_count.mdoc -- count extra field for file in zip +.\" Copyright (C) 2012-2017 Dieter Baron and Thomas Klausner +.\" +.\" This file is part of libzip, a library to manipulate ZIP files. +.\" The authors can be contacted at +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in +.\" the documentation and/or other materials provided with the +.\" distribution. +.\" 3. The names of the authors may not be used to endorse or promote +.\" products derived from this software without specific prior +.\" written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS +.\" OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +.\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +.\" DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE +.\" GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +.\" IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +.\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN +.\" IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.\" +.Dd December 18, 2017 +.Dt ZIP_FILE_EXTRA_FIELDS_COUNT 3 +.Os +.Sh NAME +.Nm zip_file_extra_fields_count , +.Nm zip_file_extra_fields_count_by_id +.Nd count extra fields for file in zip +.Sh LIBRARY +libzip (-lzip) +.Sh SYNOPSIS +.In zip.h +.Ft zip_int16_t +.Fn zip_file_extra_fields_count "zip_t *archive" "zip_uint64_t index" "zip_flags_t flags" +.Ft zip_int16_t +.Fn zip_file_extra_fields_count_by_id "zip_t *archive" "zip_uint64_t index" "zip_uint16_t extra_field_id" "zip_flags_t flags" +.Sh DESCRIPTION +The +.Fn zip_file_extra_fields_count +function counts the extra fields for the file at position +.Ar index +in the zip archive. +.Pp +The following +.Ar flags +are supported: +.Bl -tag -width ZIP_FL_CENTRALXX -offset indent +.It Dv ZIP_FL_CENTRAL +Count extra fields from the archive's central directory. +.It Dv ZIP_FL_LOCAL +Count extra fields from the local file headers. +.It Dv ZIP_FL_UNCHANGED +Count the original unchanged extra fields, ignoring any changes made. +.El +.Pp +The +.Fn zip_file_extra_fields_count_by_id +function counts the extra fields with ID (two-byte signature) +.Ar extra_field_id . +The other arguments are the same as for +.Fn zip_file_extra_fields_count . +.Pp +Extra fields that are the same in the central directory and the local file +header are merged into one. +Therefore, the counts with +.Dv ZIP_FL_CENTRAL +and +.Dv ZIP_FL_LOCAL +do not need to add up to the same value as when given +.Dv ZIP_FL_CENTRAL|ZIP_FL_LOCAL +at the same time. +.Sh RETURN VALUES +Upon successful completion, the requested number of extra fields is returned. +Otherwise, \-1 is returned and the error code in +.Ar archive +is set to indicate the error. +.Sh ERRORS +.Fn zip_file_extra_fields_count +and +.Fn zip_file_extra_fields_count_by_id +fail if: +.Bl -tag -width Er +.It Bq Er ZIP_ER_NOENT +.Ar index +is not a valid file index in +.Ar archive . +.\" TODO: _zip_read_local_ef errors +.El +.Sh SEE ALSO +.Xr libzip 3 , +.Xr zip_file_extra_field_delete 3 , +.Xr zip_file_extra_field_get 3 , +.Xr zip_file_extra_field_set 3 +.Sh HISTORY +.Fn zip_file_extra_fields_count +and +.Fn zip_file_extra_fields_count_by_id +were added in libzip 0.11. +.Sh AUTHORS +.An -nosplit +.An Dieter Baron Aq Mt dillo@nih.at +and +.An Thomas Klausner Aq Mt wiz@gatalith.at diff --git a/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_file_extra_fields_count_by_id.3 b/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_file_extra_fields_count_by_id.3 new file mode 100644 index 0000000..1b40f5e --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_file_extra_fields_count_by_id.3 @@ -0,0 +1,113 @@ +.\" zip_file_extra_fields_count.mdoc -- count extra field for file in zip +.\" Copyright (C) 2012-2017 Dieter Baron and Thomas Klausner +.\" +.\" This file is part of libzip, a library to manipulate ZIP files. +.\" The authors can be contacted at +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in +.\" the documentation and/or other materials provided with the +.\" distribution. +.\" 3. The names of the authors may not be used to endorse or promote +.\" products derived from this software without specific prior +.\" written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS +.\" OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +.\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +.\" DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE +.\" GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +.\" IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +.\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN +.\" IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.\" +.Dd December 18, 2017 +.Dt ZIP_FILE_EXTRA_FIELDS_COUNT 3 +.Os +.Sh NAME +.Nm zip_file_extra_fields_count , +.Nm zip_file_extra_fields_count_by_id +.Nd count extra fields for file in zip +.Sh LIBRARY +libzip (-lzip) +.Sh SYNOPSIS +.In zip.h +.Ft zip_int16_t +.Fn zip_file_extra_fields_count "zip_t *archive" "zip_uint64_t index" "zip_flags_t flags" +.Ft zip_int16_t +.Fn zip_file_extra_fields_count_by_id "zip_t *archive" "zip_uint64_t index" "zip_uint16_t extra_field_id" "zip_flags_t flags" +.Sh DESCRIPTION +The +.Fn zip_file_extra_fields_count +function counts the extra fields for the file at position +.Ar index +in the zip archive. +.Pp +The following +.Ar flags +are supported: +.Bl -tag -width ZIP_FL_CENTRALXX -offset indent +.It Dv ZIP_FL_CENTRAL +Count extra fields from the archive's central directory. +.It Dv ZIP_FL_LOCAL +Count extra fields from the local file headers. +.It Dv ZIP_FL_UNCHANGED +Count the original unchanged extra fields, ignoring any changes made. +.El +.Pp +The +.Fn zip_file_extra_fields_count_by_id +function counts the extra fields with ID (two-byte signature) +.Ar extra_field_id . +The other arguments are the same as for +.Fn zip_file_extra_fields_count . +.Pp +Extra fields that are the same in the central directory and the local file +header are merged into one. +Therefore, the counts with +.Dv ZIP_FL_CENTRAL +and +.Dv ZIP_FL_LOCAL +do not need to add up to the same value as when given +.Dv ZIP_FL_CENTRAL|ZIP_FL_LOCAL +at the same time. +.Sh RETURN VALUES +Upon successful completion, the requested number of extra fields is returned. +Otherwise, \-1 is returned and the error code in +.Ar archive +is set to indicate the error. +.Sh ERRORS +.Fn zip_file_extra_fields_count +and +.Fn zip_file_extra_fields_count_by_id +fail if: +.Bl -tag -width Er +.It Bq Er ZIP_ER_NOENT +.Ar index +is not a valid file index in +.Ar archive . +.\" TODO: _zip_read_local_ef errors +.El +.Sh SEE ALSO +.Xr libzip 3 , +.Xr zip_file_extra_field_delete 3 , +.Xr zip_file_extra_field_get 3 , +.Xr zip_file_extra_field_set 3 +.Sh HISTORY +.Fn zip_file_extra_fields_count +and +.Fn zip_file_extra_fields_count_by_id +were added in libzip 0.11. +.Sh AUTHORS +.An -nosplit +.An Dieter Baron Aq Mt dillo@nih.at +and +.An Thomas Klausner Aq Mt wiz@gatalith.at diff --git a/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_file_get_comment.3 b/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_file_get_comment.3 new file mode 100644 index 0000000..dc1461c --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_file_get_comment.3 @@ -0,0 +1,119 @@ +.\" zip_file_get_comment.mdoc -- get comment for file in zip +.\" Copyright (C) 2006-2021 Dieter Baron and Thomas Klausner +.\" +.\" This file is part of libzip, a library to manipulate ZIP files. +.\" The authors can be contacted at +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in +.\" the documentation and/or other materials provided with the +.\" distribution. +.\" 3. The names of the authors may not be used to endorse or promote +.\" products derived from this software without specific prior +.\" written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS +.\" OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +.\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +.\" DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE +.\" GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +.\" IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +.\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN +.\" IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.\" +.Dd September 22, 2020 +.Dt ZIP_FILE_GET_COMMENT 3 +.Os +.Sh NAME +.Nm zip_file_get_comment +.Nd get comment for file in zip +.Sh LIBRARY +libzip (-lzip) +.Sh SYNOPSIS +.In zip.h +.Ft const char * +.Fn zip_file_get_comment "zip_t *archive" "zip_uint64_t index" "zip_uint32_t *lenp" "zip_flags_t flags" +.Sh DESCRIPTION +The +.Fn zip_file_get_comment +function returns the comment for the file at position +.Ar index +in the zip archive. +The name is in UTF-8 encoding unless +.Dv ZIP_FL_ENC_RAW +was specified (see below). +This pointer should not be modified or +.Xr free 3 Ap d , +and becomes invalid when +.Ar archive +is closed. +If +.Ar lenp +is not +.Dv NULL , +the integer to which it points will be set to the length of the +comment. +If +.Ar flags +is set to +.Dv ZIP_FL_UNCHANGED , +the original unchanged comment is returned. +.Pp +Additionally, the following +.Ar flags +are supported: +.Bl -tag -width ZIP_FL_ENC_STRICTXX -offset indent +.It Dv ZIP_FL_ENC_RAW +Return the unmodified comment as it is in the ZIP archive. +.It Dv ZIP_FL_ENC_GUESS +(Default.) +Guess the encoding of the comment in the ZIP archive and convert it +to UTF-8, if necessary. +(Only CP-437 and UTF-8 are recognized.) +.It Dv ZIP_FL_ENC_STRICT +Follow the ZIP specification for file names and extend it to file +comments, expecting them to be encoded in CP-437 in the ZIP archive +(except if it is a UTF-8 comment from the special extra field). +Convert it to UTF-8. +.El +.Em Note : +ASCII is a subset of both CP-437 and UTF-8. +.Sh RETURN VALUES +Upon successful completion, a pointer to the comment is returned, +or +.Dv NULL +if there is no comment. +In case of an error, +.Dv NULL +is returned and the error code in +.Ar archive +is set to indicate the error. +.Sh ERRORS +.Fn zip_file_get_comment +fails if: +.Bl -tag -width Er +.It Bq Er ZIP_ER_INVAL +.Ar index +is not a valid file index in +.Ar archive . +.El +.Sh SEE ALSO +.Xr libzip 3 , +.Xr zip_file_set_comment 3 , +.Xr zip_get_archive_comment 3 +.Sh HISTORY +.Fn zip_file_get_comment +was added in libzip 0.11. +.Sh AUTHORS +.An -nosplit +.An Dieter Baron Aq Mt dillo@nih.at +and +.An Thomas Klausner Aq Mt wiz@gatalith.at diff --git a/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_file_get_error.3 b/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_file_get_error.3 new file mode 100644 index 0000000..5680a5e --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_file_get_error.3 @@ -0,0 +1,57 @@ +.\" zip_file_get_error.mdoc -- extract zip_error from zip_file +.\" Copyright (C) 2014-2017 Dieter Baron and Thomas Klausner +.\" +.\" This file is part of libzip, a library to manipulate ZIP archives. +.\" The authors can be contacted at +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in +.\" the documentation and/or other materials provided with the +.\" distribution. +.\" 3. The names of the authors may not be used to endorse or promote +.\" products derived from this software without specific prior +.\" written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS +.\" OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +.\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +.\" DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE +.\" GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +.\" IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +.\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN +.\" IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.\" +.Dd December 18, 2017 +.Dt ZIP_FILE_GET_ERROR 3 +.Os +.Sh NAME +.Nm zip_file_get_error +.Nd extract zip_error from zip_file +.Sh LIBRARY +libzip (-lzip) +.Sh SYNOPSIS +.In zip.h +.Ft zip_error_t * +.Fn zip_file_get_error "zip_file_t *zf" +.Sh DESCRIPTION +.Fn zip_file_get_error +function returns the zip_error associated with the zip_file +.Ar zf . +.Sh SEE ALSO +.Xr libzip 3 +.Sh HISTORY +.Fn zip_file_get_error +was added in libzip 1.0. +.Sh AUTHORS +.An -nosplit +.An Dieter Baron Aq Mt dillo@nih.at +and +.An Thomas Klausner Aq Mt wiz@gatalith.at diff --git a/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_file_get_external_attributes.3 b/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_file_get_external_attributes.3 new file mode 100644 index 0000000..fe5293a --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_file_get_external_attributes.3 @@ -0,0 +1,165 @@ +.\" zip_file_get_external_attributes.mdoc -- get external attributes for file in zip +.\" Copyright (C) 2013-2017 Dieter Baron and Thomas Klausner +.\" +.\" This file is part of libzip, a library to manipulate ZIP files. +.\" The authors can be contacted at +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in +.\" the documentation and/or other materials provided with the +.\" distribution. +.\" 3. The names of the authors may not be used to endorse or promote +.\" products derived from this software without specific prior +.\" written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS +.\" OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +.\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +.\" DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE +.\" GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +.\" IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +.\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN +.\" IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.\" +.Dd December 18, 2017 +.Dt ZIP_FILE_GET_EXTERNAL_ATTRIBUTES 3 +.Os +.Sh NAME +.Nm zip_file_get_external_attributes +.Nd get external attributes for file in zip +.Sh LIBRARY +libzip (-lzip) +.Sh SYNOPSIS +.In zip.h +.Ft int +.Fn zip_file_get_external_attributes "zip_t *archive" "zip_uint64_t index" "zip_flags_t flags" "zip_uint8_t *opsys" "zip_uint32_t *attributes" +.Sh DESCRIPTION +The +.Fn zip_file_get_external_attributes +function returns the operating system and external attributes for the +file at position +.Ar index +in the zip archive. +The external attributes usually contain the operating system-specific +file permissions. +If +.Ar flags +is set to +.Dv ZIP_FL_UNCHANGED , +the original unchanged values are returned. +If +.Ar opsys +or +.Ar attributes +are +.Dv NULL , +they are not filled in. +.Pp +The following operating systems are defined by the zip specification: +.Bl -item -compact -offset indent +.It +.Dv ZIP_OPSYS_ACORN_RISC +.It +.Dv ZIP_OPSYS_ALTERNATE_MVS +.It +.Dv ZIP_OPSYS_AMIGA +.It +.Dv ZIP_OPSYS_ATARI_ST +.It +.Dv ZIP_OPSYS_BEOS +.It +.Dv ZIP_OPSYS_CPM +.It +.Dv ZIP_OPSYS_DOS +.It +.Dv ZIP_OPSYS_MACINTOSH +.It +.Dv ZIP_OPSYS_MVS +.It +.Dv ZIP_OPSYS_OPENVMS +.It +.Dv ZIP_OPSYS_OS_2 +.It +.Dv ZIP_OPSYS_OS_400 +.It +.Dv ZIP_OPSYS_OS_X +.It +.Dv ZIP_OPSYS_TANDEM +.It +.Dv ZIP_OPSYS_UNIX +.It +.Dv ZIP_OPSYS_VFAT +.It +.Dv ZIP_OPSYS_VM_CMS +.It +.Dv ZIP_OPSYS_VSE +.It +.Dv ZIP_OPSYS_WINDOWS_NTFS +(uncommon, use +.Dv ZIP_OPSYS_DOS +instead) +.It +.Dv ZIP_OPSYS_Z_SYSTEM +.El +.Pp +The defines above follow the PKWARE Inc. Appnote; please note that +the InfoZIP Appnote has a slightly different mapping. +.Sh RETURN VALUES +Upon successful completion, 0 is returned. +In case of an error, +.Dv \-1 +is returned and the error code in +.Ar archive +is set to indicate the error. +.Sh EXAMPLES +The following code can be used to expand +.Ar attributes +if the operating system is +.Dv ZIP_OPSYS_DOS . +.Bd -literal +#include + +#define FA_RDONLY 0x01 // FILE_ATTRIBUTE_READONLY +#define FA_DIREC 0x10 // FILE_ATTRIBUTE_DIRECTORY + +static mode_t +_zip_dos_attr2mode(zip_uint32_t attr) +{ + mode_t m = S_IRUSR | S_IRGRP | S_IROTH; + if (0 == (attr & FA_RDONLY)) + m |= S_IWUSR | S_IWGRP | S_IWOTH; + + if (attr & FA_DIREC) + m = (S_IFDIR | (m & ~S_IFMT)) | S_IXUSR | S_IXGRP | S_IXOTH; + + return m; +} +.Ed +.Sh ERRORS +.Fn zip_file_get_external_attributes +fails if: +.Bl -tag -width Er +.It Bq Er ZIP_ER_INVAL +.Ar index +is not a valid file index in +.Ar archive . +.El +.Sh SEE ALSO +.Xr libzip 3 , +.Xr zip_file_set_external_attributes 3 +.Sh HISTORY +.Fn zip_file_get_external_attributes +was added in libzip 0.11.2. +.Sh AUTHORS +.An -nosplit +.An Dieter Baron Aq Mt dillo@nih.at +and +.An Thomas Klausner Aq Mt wiz@gatalith.at diff --git a/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_file_is_seekable.3 b/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_file_is_seekable.3 new file mode 100644 index 0000000..3ba5a9e --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_file_is_seekable.3 @@ -0,0 +1,89 @@ +.\" zip_fseek.mdoc -- seek in file +.\" Copyright (C) 2016-2022 Dieter Baron and Thomas Klausner +.\" +.\" This file is part of libzip, a library to manipulate ZIP archives. +.\" The authors can be contacted at +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in +.\" the documentation and/or other materials provided with the +.\" distribution. +.\" 3. The names of the authors may not be used to endorse or promote +.\" products derived from this software without specific prior +.\" written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS +.\" OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +.\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +.\" DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE +.\" GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +.\" IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +.\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN +.\" IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.\" +.Dd September 11, 2024 +.Dt ZIP_FSEEK 3 +.Os +.Sh NAME +.Nm zip_fseek , +.Nm zip_file_is_seekable +.Nd seek in file +.Sh LIBRARY +libzip (-lzip) +.Sh SYNOPSIS +.In zip.h +.Ft zip_int8_t +.Fn zip_fseek "zip_file_t *file" "zip_int64_t offset" "int whence" +.Ft int +.Fn zip_file_is_seekable "zip_file_t *file" +.Sh DESCRIPTION +The +.Fn zip_fseek +function seeks to the specified +.Ar offset +relative to +.Ar whence , +just like +.Xr fseek 3 . +.Pp +.Nm +only works on uncompressed (stored), unencrypted data. +When called on compressed or encrypted data it will return an error. +.Pp +The +.Fn zip_file_is_seekable +function returns 1 if a file is seekable. +.Sh RETURN VALUES +If successful, +.Fn zip_fseek +returns 0. +Otherwise, \-1 is returned. +.Pp +.Fn zip_file_is_seekable +returns 1 if a file is seekable and 0 if not. +On an invalid argument, it returns \-1. +.Sh SEE ALSO +.Xr libzip 3 , +.Xr zip_fclose 3 , +.Xr zip_file_get_error 3 , +.Xr zip_fopen 3 , +.Xr zip_fread 3 , +.Xr zip_ftell 3 +.Sh HISTORY +.Fn zip_fseek +was added in libzip 1.2.0. +.Fn zip_file_is_seekable +was added in libzip 1.9.0. +.Sh AUTHORS +.An -nosplit +.An Dieter Baron Aq Mt dillo@nih.at +and +.An Thomas Klausner Aq Mt wiz@gatalith.at diff --git a/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_file_rename.3 b/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_file_rename.3 new file mode 100644 index 0000000..c4fad6b --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_file_rename.3 @@ -0,0 +1,104 @@ +.\" zip_file_rename.mdoc -- rename file in zip archive +.\" Copyright (C) 2003-2021 Dieter Baron and Thomas Klausner +.\" +.\" This file is part of libzip, a library to manipulate ZIP archives. +.\" The authors can be contacted at +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in +.\" the documentation and/or other materials provided with the +.\" distribution. +.\" 3. The names of the authors may not be used to endorse or promote +.\" products derived from this software without specific prior +.\" written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS +.\" OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +.\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +.\" DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE +.\" GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +.\" IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +.\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN +.\" IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.\" +.Dd September 22, 2020 +.Dt ZIP_FILE_RENAME 3 +.Os +.Sh NAME +.Nm zip_file_rename +.Nd rename file in zip archive +.Sh LIBRARY +libzip (-lzip) +.Sh SYNOPSIS +.In zip.h +.Ft int +.Fn zip_file_rename "zip_t *archive" "zip_uint64_t index" "const char *name" "zip_flags_t flags" +.Sh DESCRIPTION +The file at position +.Ar index +in the zip archive +.Ar archive +is renamed to +.Ar name . +The +.Ar flags +argument can be any of: +.Bl -tag -width XZIPXFLXENCXSTRICTXX +.It Dv ZIP_FL_ENC_GUESS +Guess encoding of +.Ar name +(default). +(Only CP-437 and UTF-8 are recognized.) +.It Dv ZIP_FL_ENC_UTF_8 +Interpret +.Ar name +as UTF-8. +.It Dv ZIP_FL_ENC_CP437 +Interpret +.Ar name +as code page 437 (CP-437). +.El +.Sh RETURN VALUES +Upon successful completion 0 is returned. +Otherwise, \-1 is returned and the error code in +.Ar archive +is set to indicate the error. +.Sh ERRORS +.Fn zip_file_rename +fails if: +.Bl -tag -width Er +.It Bq Er ZIP_ER_DELETED +The file to be renamed has been deleted from the archive. +.It Bq Er ZIP_ER_EXISTS +There is already a file called +.Ar name +in the archive. +.It Bq Er ZIP_ER_INVAL +.Ar index +is not a valid file index in +.Ar archive , +.Ar name is +.Dv NULL , +the empty string, or not a valid UTF-8 encoded string. +Also a file cannot be renamed to a directory or vice versa. +Directories are denoted by a trailing slash. +.El +.Sh SEE ALSO +.Xr libzip 3 , +.Xr zip_unchange 3 +.Sh HISTORY +.Fn zip_file_rename +was added in libzip 0.11. +.Sh AUTHORS +.An -nosplit +.An Dieter Baron Aq Mt dillo@nih.at +and +.An Thomas Klausner Aq Mt wiz@gatalith.at diff --git a/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_file_replace.3 b/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_file_replace.3 new file mode 100644 index 0000000..8a6ceb7 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_file_replace.3 @@ -0,0 +1,175 @@ +.\" zip_file_add.mdoc -- add files to zip archive +.\" Copyright (C) 2004-2021 Dieter Baron and Thomas Klausner +.\" +.\" This file is part of libzip, a library to manipulate ZIP archives. +.\" The authors can be contacted at +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in +.\" the documentation and/or other materials provided with the +.\" distribution. +.\" 3. The names of the authors may not be used to endorse or promote +.\" products derived from this software without specific prior +.\" written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS +.\" OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +.\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +.\" DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE +.\" GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +.\" IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +.\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN +.\" IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.\" +.Dd March 18, 2024 +.Dt ZIP_FILE_ADD 3 +.Os +.Sh NAME +.Nm zip_file_add , +.Nm zip_file_replace +.Nd add file to zip archive or replace file in zip archive +.Sh LIBRARY +libzip (-lzip) +.Sh SYNOPSIS +.In zip.h +.Ft zip_int64_t +.Fn zip_file_add "zip_t *archive" "const char *name" "zip_source_t *source" "zip_flags_t flags" +.Ft int +.Fn zip_file_replace "zip_t *archive" "zip_uint64_t index" "zip_source_t *source" "zip_flags_t flags" +.Sh DESCRIPTION +The function +.Fn zip_file_add +adds a file to a zip archive, while +.Fn zip_file_replace +replaces an existing file in a zip archive. +The argument +.Ar archive +specifies the zip archive to which the file should be added. +.Ar name +is the file's name in the zip archive (for +.Fn zip_file_add ) , +while +.Ar index +specifies which file should be replaced (for +.Fn zip_file_replace ) . +The +.Ar flags +argument can be any combination of +.Dv ZIP_FL_OVERWRITE +with one of +.Dv ZIP_FL_ENC_* : +.Bl -tag -width XZIPXFLXENCXSTRICTXX +.It Dv ZIP_FL_OVERWRITE +Overwrite any existing file of the same name. +For +.Nm zip_file_add +only. +.It Dv ZIP_FL_ENC_GUESS +Guess encoding of +.Ar name +(default). +(Only CP-437 and UTF-8 are recognized.) +.It Dv ZIP_FL_ENC_UTF_8 +Interpret +.Ar name +as UTF-8. +.It Dv ZIP_FL_ENC_CP437 +Interpret +.Ar name +as code page 437 (CP-437). +.El +The data is obtained from the +.Ar source +argument, see +.Xr zip_source 3 . +.Pp +.Em NOTE : +.Xr zip_source_free 3 +should not be called on a +.Ar source +after it was used successfully in a +.Nm zip_file_add +or +.Nm zip_file_replace +call. +.Pp +Please also note that when using +.Nm zip_replace , +the target file's extra field information will be deleted since this +usually is dependent on the file contents. +If you want to keep them, query them beforehand with +.Xr zip_file_extra_field_get 3 +and restore them after +.Nm zip_replace +with +.Xr zip_file_extra_field_set 3 . +.Sh RETURN VALUES +Upon successful completion, +.Fn zip_file_add +returns the index of the new file in the archive, and +.Fn zip_file_replace +returns 0. +Otherwise, \-1 is returned and the error code in +.Ar archive +is set to indicate the error. +.Sh EXAMPLES +.Bd -literal -offset indent +zip_source_t *s; +const char buf[]="teststring"; + +if ((s=zip_source_buffer(archive, buf, sizeof(buf), 0)) == NULL || + zip_file_add(archive, name, s, ZIP_FL_ENC_UTF_8) < 0) { + zip_source_free(s); + printf("error adding file: %s\en", zip_strerror(archive)); +} +.Ed +.Sh ERRORS +.Fn zip_file_add +and +.Fn zip_file_replace +fail if: +.Bl -tag -width Er +.It Bq Er ZIP_ER_EXISTS +There is already a file called +.Ar name +in the archive. +(Only applies to +.Fn zip_file_add , +and only if +.Dv ZIP_FL_OVERWRITE +is not provided). +.It Bq Er ZIP_ER_INVAL +.Ar source +or +.Ar name +are +.Dv NULL , +or +.Ar index +is invalid. +.It Bq Er ZIP_ER_MEMORY +Required memory could not be allocated. +.It Bq Er ZIP_ER_RDONLY +Archive was opened in read-only mode. +.El +.Sh SEE ALSO +.Xr libzip 3 , +.Xr zip_source 3 +.Sh HISTORY +.Fn zip_file_add +and +.Fn zip_file_replace +were added in libzip 0.11. +.Sh AUTHORS +.An -nosplit +.An Dieter Baron Aq Mt dillo@nih.at +and +.An Thomas Klausner Aq Mt wiz@gatalith.at diff --git a/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_file_set_comment.3 b/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_file_set_comment.3 new file mode 100644 index 0000000..dbc1f14 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_file_set_comment.3 @@ -0,0 +1,116 @@ +.\" zip_file_set_comment.mdoc -- set comment for file in zip +.\" Copyright (C) 2006-2021 Dieter Baron and Thomas Klausner +.\" +.\" This file is part of libzip, a library to manipulate ZIP files. +.\" The authors can be contacted at +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in +.\" the documentation and/or other materials provided with the +.\" distribution. +.\" 3. The names of the authors may not be used to endorse or promote +.\" products derived from this software without specific prior +.\" written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS +.\" OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +.\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +.\" DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE +.\" GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +.\" IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +.\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN +.\" IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.\" +.Dd September 22, 2020 +.Dt ZIP_FILE_SET_COMMENT 3 +.Os +.Sh NAME +.Nm zip_file_set_comment +.Nd set comment for file in zip +.Sh LIBRARY +libzip (-lzip) +.Sh SYNOPSIS +.In zip.h +.Ft int +.Fn zip_file_set_comment "zip_t *archive" "zip_uint64_t index" "const char *comment" "zip_uint16_t len" "zip_flags_t flags" +.Sh DESCRIPTION +The +.Fn zip_file_set_comment +function sets the comment for the file at position +.Ar index +in the zip archive to +.Ar comment +of length +.Ar len . +If +.Ar comment +is +.Dv NULL +and +.Ar len +is 0, the file comment will be removed. +The +.Ar flags +argument can be any of: +.Bl -tag -width XZIPXFLXENCXSTRICTXX +.It Dv ZIP_FL_ENC_GUESS +Guess encoding of +.Ar comment +(default). +(Only CP-437 and UTF-8 are recognized.) +.It Dv ZIP_FL_ENC_UTF_8 +Interpret +.Ar comment +as UTF-8. +.It Dv ZIP_FL_ENC_CP437 +Interpret +.Ar comment +as code page 437 (CP-437). +.El +.Sh RETURN VALUES +Upon successful completion 0 is returned. +Otherwise, \-1 is returned and the error information in +.Ar archive +is set to indicate the error. +.Sh ERRORS +.Fn zip_file_set_comment +fails if: +.Bl -tag -width Er +.It Bq Er ZIP_ER_INVAL +.Ar index +is not a valid file index in +.Ar archive , +or +.Ar len +is less than 0 or longer than the maximum comment length in a zip file +(65535), or +.Ar comment +is not a valid UTF-8 encoded string. +.It Bq Er ZIP_ER_MEMORY +Required memory could not be allocated. +.It Bq Er ZIP_ER_RDONLY +The +.Ar archive +was opened in read-only mode. +.El +.Sh SEE ALSO +.Xr libzip 3 , +.Xr zip_file_get_comment 3 , +.Xr zip_get_archive_comment 3 , +.Xr zip_set_archive_comment 3 +.Sh HISTORY +.Fn zip_file_set_comment +was added in libzip 0.11. +.Sh AUTHORS +.An -nosplit +.An Dieter Baron Aq Mt dillo@nih.at +and +.An Thomas Klausner Aq Mt wiz@gatalith.at diff --git a/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_file_set_dostime.3 b/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_file_set_dostime.3 new file mode 100644 index 0000000..f1a63bd --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_file_set_dostime.3 @@ -0,0 +1,126 @@ +.\" zip_file_set_mtime.mdoc -- set mtime for file in zip +.\" Copyright (C) 2014-2022 Dieter Baron and Thomas Klausner +.\" +.\" This file is part of libzip, a library to manipulate ZIP files. +.\" The authors can be contacted at +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in +.\" the documentation and/or other materials provided with the +.\" distribution. +.\" 3. The names of the authors may not be used to endorse or promote +.\" products derived from this software without specific prior +.\" written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS +.\" OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +.\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +.\" DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE +.\" GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +.\" IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +.\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN +.\" IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.\" +.Dd June 18, 2022 +.Dt ZIP_FILE_SET_MTIME 3 +.Os +.Sh NAME +.Nm zip_file_set_dostime , +.Nm zip_file_set_mtime +.Nd set last modification time (mtime) for file in zip +.Sh LIBRARY +libzip (-lzip) +.Sh SYNOPSIS +.In zip.h +.Ft int +.Fn zip_file_set_dostime "zip_t *archive" "zip_uint64_t index" "zip_uint16_t dostime" "zip_uint16_t dosdate" "zip_flags_t flags" +.Ft int +.Fn zip_file_set_mtime "zip_t *archive" "zip_uint64_t index" "time_t mtime" "zip_flags_t flags" +.Sh DESCRIPTION +The +.Fn zip_file_set_mtime +function sets the last modification time (mtime) for the file at +position +.Ar index +in the zip archive to +.Ar mtime . +Currently, no support for any +.Ar flags +is implemented. +.Pp +In the zip archive, the time and date are saved as two 16-bit integers. +To set the values directly, call the +.Fn zip_file_set_dostime +function. +The values of the time bytes are defined as follows: +.Bl -tag -width 5n -offset indent +.It 0-4 +seconds divided by two (1-2 = 1, 3-4 = 2, ...) +.It 5-10 +minute (0-59) +.It 11-15 +hour (0-23) +.El +.Pp +The values of the date bytes are defined as follows: +.Bl -tag -width 5n -offset indent +.It 0-4 +day of the month (1-31) +.It 5-8 +month (January = 1, February = 2, ...) +.It 9-15 +year offset from 1980 (1980 = 0, 1981 = 1, ...) +.El +.Sh RETURN VALUES +Upon successful completion 0 is returned. +Otherwise, \-1 is returned and the error information in +.Ar archive +is set to indicate the error. +.Sh ERRORS +.Fn zip_file_set_dostime +and +.Fn zip_file_set_mtime +fail if: +.Bl -tag -width Er +.It Bq Er ZIP_ER_INVAL +.Ar index +is not a valid file index in +.Ar archive . +.It Bq Er ZIP_ER_MEMORY +Required memory could not be allocated. +.It Bq Er ZIP_ER_OPNOTSUPP +Traditional PKWare encryption uses the file's mtime, therefore it cannot be changed without re-encrypting the data. +.It Bq Er ZIP_ER_RDONLY +The +.Ar archive +was opened in read-only mode. +.El +.Sh SEE ALSO +.Xr libzip 3 , +.Xr zip_stat 3 +.Sh HISTORY +.Fn zip_file_set_mtime +was added in libzip 1.0. +.Fn zip_file_set_dostime +was added in libzip 1.6. +.Sh AUTHORS +.An -nosplit +.An Dieter Baron Aq Mt dillo@nih.at +and +.An Thomas Klausner Aq Mt wiz@gatalith.at +.Sh CAVEATS +Following historical practice, the +.Fn zip_file_set_mtime +function translates the time from the zip archive into the local time +zone. +If you want to avoid this, use the +.Fn zip_file_set_dostime +function instead. diff --git a/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_file_set_encryption.3 b/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_file_set_encryption.3 new file mode 100644 index 0000000..9071947 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_file_set_encryption.3 @@ -0,0 +1,121 @@ +.\" zip_file_set_encryption.mdoc -- set encryption method for file +.\" Copyright (C) 2016-2021 Dieter Baron and Thomas Klausner +.\" +.\" This file is part of libzip, a library to manipulate ZIP files. +.\" The authors can be contacted at +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in +.\" the documentation and/or other materials provided with the +.\" distribution. +.\" 3. The names of the authors may not be used to endorse or promote +.\" products derived from this software without specific prior +.\" written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS +.\" OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +.\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +.\" DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE +.\" GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +.\" IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +.\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN +.\" IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.\" +.Dd April 2, 2020 +.Dt ZIP_FILE_SET_ENCRYPTION 3 +.Os +.Sh NAME +.Nm zip_file_set_encryption +.Nd set encryption method for file in zip +.Sh LIBRARY +libzip (-lzip) +.Sh SYNOPSIS +.In zip.h +.Ft int +.Fn zip_file_set_encryption "zip_t *archive" "zip_uint64_t index" "zip_uint16_t method" "const char *password" +.Sh DESCRIPTION +The +.Fn zip_file_set_encryption +function sets the encryption method for the file at position +.Ar index +in the zip archive to +.Ar method +using the password +.Ar password . +The +.Ar method +is the same as returned by +.Xr zip_stat 3 . +For the +.Ar method +argument, currently only the following values are supported: +.Bl -tag -width ZIP_CM_DEFLATE_XX +.It Dv ZIP_EM_NONE +No encryption. +.It Dv ZIP_EM_AES_128 +Winzip AES-128 encryption. +.It Dv ZIP_EM_AES_192 +Winzip AES-192 encryption. +.It Dv ZIP_EM_AES_256 +Winzip AES-256 encryption. +.It Dv ZIP_EM_TRAD_PKWARE +Traditional PKWare encryption. +Do not use this method, it is not secure. +It is only provided for backwards compatibility. +.El +.Pp +If +.Ar password +is +.Dv NULL , +the default password provided by +.Xr zip_set_default_password 3 +is used. +.Pp +The current encryption method for a file in a zip archive can be +determined using +.Xr zip_stat 3 . +.Sh RETURN VALUES +Upon successful completion 0 is returned. +Otherwise, \-1 is returned and the error information in +.Ar archive +is set to indicate the error. +.Sh ERRORS +.Fn zip_file_set_encryption +fails if: +.Bl -tag -width Er +.It Bq Er ZIP_ER_ENCRNOTSUPP +Unsupported compression method requested. +.It Bq Er ZIP_ER_INVAL +.Ar index +is not a valid file index in +.Ar archive , +or the argument combination is invalid. +.It Bq Er ZIP_ER_MEMORY +Required memory could not be allocated. +.It Bq Er ZIP_ER_RDONLY +Read-only zip file, no changes allowed. +.El +.Sh SEE ALSO +.Xr libzip 3 , +.Xr zip_encryption_method_supported 3 , +.Xr zip_fopen_encrypted 3 , +.Xr zip_fopen_index_encrypted 3 , +.Xr zip_set_default_password 3 , +.Xr zip_stat 3 +.Sh HISTORY +.Fn zip_file_set_encryption +was added in libzip 1.2.0. +.Sh AUTHORS +.An -nosplit +.An Dieter Baron Aq Mt dillo@nih.at +and +.An Thomas Klausner Aq Mt wiz@gatalith.at diff --git a/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_file_set_external_attributes.3 b/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_file_set_external_attributes.3 new file mode 100644 index 0000000..1043df6 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_file_set_external_attributes.3 @@ -0,0 +1,89 @@ +.\" zip_file_set_external_attributes.mdoc -- set external attributes for file in zip +.\" Copyright (C) 2013-2017 Dieter Baron and Thomas Klausner +.\" +.\" This file is part of libzip, a library to manipulate ZIP files. +.\" The authors can be contacted at +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in +.\" the documentation and/or other materials provided with the +.\" distribution. +.\" 3. The names of the authors may not be used to endorse or promote +.\" products derived from this software without specific prior +.\" written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS +.\" OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +.\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +.\" DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE +.\" GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +.\" IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +.\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN +.\" IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.\" +.Dd December 18, 2017 +.Dt ZIP_FILE_SET_EXTERNAL_ATTRIBUTES 3 +.Os +.Sh NAME +.Nm zip_file_set_external_attributes +.Nd set external attributes for file in zip +.Sh LIBRARY +libzip (-lzip) +.Sh SYNOPSIS +.In zip.h +.Ft int +.Fn zip_file_set_external_attributes "zip_t *archive" "zip_uint64_t index" "zip_flags_t flags" "zip_uint8_t opsys" "zip_uint32_t attributes" +.Sh DESCRIPTION +The +.Fn zip_file_set_external_attributes +function sets the operating system and external attributes for the +file at position +.Ar index +in the zip archive. +Currently, no +.Ar flags +are supported. +.Pp +For a list of known +.Ar opsys +values, see +.Xr zip_file_get_external_attributes 3 . +.Sh RETURN VALUES +Upon successful completion 0 is returned. +Otherwise, \-1 is returned and the error information in +.Ar archive +is set to indicate the error. +.Sh ERRORS +.Fn zip_file_set_external_attributes +fails if: +.Bl -tag -width Er +.It Bq Er ZIP_ER_INVAL +.Ar index +is not a valid file index in +.Ar archive . +.It Bq Er ZIP_ER_MEMORY +Required memory could not be allocated. +.It Bq Er ZIP_ER_RDONLY +The +.Ar archive +was opened in read-only mode. +.El +.Sh SEE ALSO +.Xr libzip 3 , +.Xr zip_file_get_external_attributes 3 +.Sh HISTORY +.Fn zip_file_set_external_attributes +was added in libzip 0.11.2. +.Sh AUTHORS +.An -nosplit +.An Dieter Baron Aq Mt dillo@nih.at +and +.An Thomas Klausner Aq Mt wiz@gatalith.at diff --git a/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_file_set_mtime.3 b/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_file_set_mtime.3 new file mode 100644 index 0000000..f1a63bd --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_file_set_mtime.3 @@ -0,0 +1,126 @@ +.\" zip_file_set_mtime.mdoc -- set mtime for file in zip +.\" Copyright (C) 2014-2022 Dieter Baron and Thomas Klausner +.\" +.\" This file is part of libzip, a library to manipulate ZIP files. +.\" The authors can be contacted at +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in +.\" the documentation and/or other materials provided with the +.\" distribution. +.\" 3. The names of the authors may not be used to endorse or promote +.\" products derived from this software without specific prior +.\" written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS +.\" OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +.\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +.\" DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE +.\" GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +.\" IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +.\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN +.\" IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.\" +.Dd June 18, 2022 +.Dt ZIP_FILE_SET_MTIME 3 +.Os +.Sh NAME +.Nm zip_file_set_dostime , +.Nm zip_file_set_mtime +.Nd set last modification time (mtime) for file in zip +.Sh LIBRARY +libzip (-lzip) +.Sh SYNOPSIS +.In zip.h +.Ft int +.Fn zip_file_set_dostime "zip_t *archive" "zip_uint64_t index" "zip_uint16_t dostime" "zip_uint16_t dosdate" "zip_flags_t flags" +.Ft int +.Fn zip_file_set_mtime "zip_t *archive" "zip_uint64_t index" "time_t mtime" "zip_flags_t flags" +.Sh DESCRIPTION +The +.Fn zip_file_set_mtime +function sets the last modification time (mtime) for the file at +position +.Ar index +in the zip archive to +.Ar mtime . +Currently, no support for any +.Ar flags +is implemented. +.Pp +In the zip archive, the time and date are saved as two 16-bit integers. +To set the values directly, call the +.Fn zip_file_set_dostime +function. +The values of the time bytes are defined as follows: +.Bl -tag -width 5n -offset indent +.It 0-4 +seconds divided by two (1-2 = 1, 3-4 = 2, ...) +.It 5-10 +minute (0-59) +.It 11-15 +hour (0-23) +.El +.Pp +The values of the date bytes are defined as follows: +.Bl -tag -width 5n -offset indent +.It 0-4 +day of the month (1-31) +.It 5-8 +month (January = 1, February = 2, ...) +.It 9-15 +year offset from 1980 (1980 = 0, 1981 = 1, ...) +.El +.Sh RETURN VALUES +Upon successful completion 0 is returned. +Otherwise, \-1 is returned and the error information in +.Ar archive +is set to indicate the error. +.Sh ERRORS +.Fn zip_file_set_dostime +and +.Fn zip_file_set_mtime +fail if: +.Bl -tag -width Er +.It Bq Er ZIP_ER_INVAL +.Ar index +is not a valid file index in +.Ar archive . +.It Bq Er ZIP_ER_MEMORY +Required memory could not be allocated. +.It Bq Er ZIP_ER_OPNOTSUPP +Traditional PKWare encryption uses the file's mtime, therefore it cannot be changed without re-encrypting the data. +.It Bq Er ZIP_ER_RDONLY +The +.Ar archive +was opened in read-only mode. +.El +.Sh SEE ALSO +.Xr libzip 3 , +.Xr zip_stat 3 +.Sh HISTORY +.Fn zip_file_set_mtime +was added in libzip 1.0. +.Fn zip_file_set_dostime +was added in libzip 1.6. +.Sh AUTHORS +.An -nosplit +.An Dieter Baron Aq Mt dillo@nih.at +and +.An Thomas Klausner Aq Mt wiz@gatalith.at +.Sh CAVEATS +Following historical practice, the +.Fn zip_file_set_mtime +function translates the time from the zip archive into the local time +zone. +If you want to avoid this, use the +.Fn zip_file_set_dostime +function instead. diff --git a/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_file_strerror.3 b/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_file_strerror.3 new file mode 100644 index 0000000..498fcc2 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_file_strerror.3 @@ -0,0 +1,85 @@ +.\" zip_file_strerror.mdoc -- get string representation for a zip error +.\" Copyright (C) 2003-2021 Dieter Baron and Thomas Klausner +.\" +.\" This file is part of libzip, a library to manipulate ZIP archives. +.\" The authors can be contacted at +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in +.\" the documentation and/or other materials provided with the +.\" distribution. +.\" 3. The names of the authors may not be used to endorse or promote +.\" products derived from this software without specific prior +.\" written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS +.\" OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +.\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +.\" DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE +.\" GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +.\" IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +.\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN +.\" IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.\" +.Dd December 18, 2017 +.Dt ZIP_FILE_STRERROR 3 +.Os +.Sh NAME +.Nm zip_file_strerror , +.Nm zip_strerror +.Nd get string representation for a zip error +.Sh LIBRARY +libzip (-lzip) +.Sh SYNOPSIS +.In zip.h +.Ft const char * +.Fn zip_file_strerror "zip_file_t *file" +.Ft const char * +.Fn zip_strerror "zip_t *archive" +.Sh DESCRIPTION +The +.Fn zip_strerror +function returns a string describing the last error for the zip archive +.Ar archive , +while the +.Fn zip_file_strerror +function does the same for a zip file +.Ar file +(one file in an archive). +The returned string must not be modified or freed, and becomes invalid when +.Ar archive +or +.Ar file , +respectively, +is closed or on the next call to +.Fn zip_strerror +or +.Fn zip_file_strerror , +respectively, +for the same archive. +.Sh RETURN VALUES +.Fn zip_file_strerror +and +.Fn zip_strerror +return a pointer to the error string. +.Sh SEE ALSO +.Xr libzip 3 , +.Xr zip_error_strerror 3 +.Sh HISTORY +.Fn zip_file_strerror +and +.Fn zip_strerror +were added in libzip 0.6. +.Sh AUTHORS +.An -nosplit +.An Dieter Baron Aq Mt dillo@nih.at +and +.An Thomas Klausner Aq Mt wiz@gatalith.at diff --git a/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_fopen.3 b/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_fopen.3 new file mode 100644 index 0000000..d86bdb9 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_fopen.3 @@ -0,0 +1,148 @@ +.\" zip_fopen.mdoc -- open file in zip archive for reading +.\" Copyright (C) 2003-2017 Dieter Baron and Thomas Klausner +.\" +.\" This file is part of libzip, a library to manipulate ZIP archives. +.\" The authors can be contacted at +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in +.\" the documentation and/or other materials provided with the +.\" distribution. +.\" 3. The names of the authors may not be used to endorse or promote +.\" products derived from this software without specific prior +.\" written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS +.\" OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +.\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +.\" DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE +.\" GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +.\" IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +.\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN +.\" IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.\" +.Dd December 18, 2017 +.Dt ZIP_FOPEN 3 +.Os +.Sh NAME +.Nm zip_fopen , +.Nm zip_fopen_index +.Nd open file in zip archive for reading +.Sh LIBRARY +libzip (-lzip) +.Sh SYNOPSIS +.In zip.h +.Ft zip_file_t * +.Fn zip_fopen "zip_t *archive" "const char *fname" "zip_flags_t flags" +.Ft zip_file_t * +.Fn zip_fopen_index "zip_t *archive" "zip_uint64_t index" "zip_flags_t flags" +.Sh DESCRIPTION +The +.Fn zip_fopen +function opens the file name +.Ar fname +in +.Ar archive . +The +.Ar flags +argument specifies how the name lookup should be done, according to +the values are described in +.Xr zip_name_locate 3 . +Also, the following values may be +.Em or Ns No 'ed +to it. +.Bl -tag -offset indent -width ZIP_FL_COMPRESSED +.It Dv ZIP_FL_COMPRESSED +Read the compressed data. +Otherwise the data is uncompressed by +.Fn zip_fread . +.It Dv ZIP_FL_UNCHANGED +Read the original data from the zip archive, ignoring any changes made +to the file; this is not supported by all data sources. +.El +.Pp +The +.Fn zip_fopen_index +function opens the file at position +.Ar index . +.Pp +If encrypted data is encountered, the functions call +.Xr zip_fopen_encrypted 3 +or +.Xr zip_fopen_index_encrypted 3 +respectively, using the default password set with +.Xr zip_set_default_password 3 . +.Sh RETURN VALUES +Upon successful completion, a +.Ft struct zip_file +pointer is returned. +Otherwise, +.Dv NULL +is returned and the error code in +.Ar archive +is set to indicate the error. +.Sh ERRORS +.Bl -tag -width Er +.It Bq Er ZIP_ER_CHANGED +The file data has been changed and the data source does +not support rereading data. +.It Bq Er ZIP_ER_COMPNOTSUPP +The compression method used is not supported. +.It Bq Er ZIP_ER_ENCRNOTSUPP +The encryption method used is not supported. +.It Bq Er ZIP_ER_MEMORY +Required memory could not be allocated. +.It Bq Er ZIP_ER_NOPASSWD +The file is encrypted, but no password has been provided. +.It Bq Er ZIP_ER_READ +A file read error occurred. +.It Bq Er ZIP_ER_SEEK +A file seek error occurred. +.It Bq Er ZIP_ER_WRONGPASSWD +The provided password does not match the password used for encryption. +Note that some incorrect passwords are not detected by the check done by +.Fn zip_fopen . +.It Bq Er ZIP_ER_ZLIB +Initializing the zlib stream failed. +.El +.Pp +The function +.Fn zip_fopen +may also fail and set +.Va zip_err +for any of the errors specified for the routine +.Xr zip_name_locate 3 . +.Pp +The function +.Fn zip_fopen_index +may also fail with +.Er ZIP_ER_INVAL +if +.Ar index +is invalid. +.Sh SEE ALSO +.Xr libzip 3 , +.Xr zip_fclose 3 , +.Xr zip_fread 3 , +.Xr zip_fseek 3 , +.Xr zip_get_num_entries 3 , +.Xr zip_name_locate 3 , +.Xr zip_set_default_password 3 +.Sh HISTORY +.Fn zip_fopen +and +.Fn zip_fopen_index +were added in libzip 1.0. +.Sh AUTHORS +.An -nosplit +.An Dieter Baron Aq Mt dillo@nih.at +and +.An Thomas Klausner Aq Mt wiz@gatalith.at diff --git a/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_fopen_encrypted.3 b/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_fopen_encrypted.3 new file mode 100644 index 0000000..9428798 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_fopen_encrypted.3 @@ -0,0 +1,135 @@ +.\" zip_fopen_encrypted.mdoc -- open encrypted file in zip archive for reading +.\" Copyright (C) 2011-2021 Dieter Baron and Thomas Klausner +.\" +.\" This file is part of libzip, a library to manipulate ZIP archives. +.\" The authors can be contacted at +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in +.\" the documentation and/or other materials provided with the +.\" distribution. +.\" 3. The names of the authors may not be used to endorse or promote +.\" products derived from this software without specific prior +.\" written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS +.\" OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +.\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +.\" DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE +.\" GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +.\" IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +.\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN +.\" IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.\" +.Dd September 15, 2020 +.Dt ZIP_FOPEN_ENCRYPTED 3 +.Os +.Sh NAME +.Nm zip_fopen_encrypted , +.Nm zip_fopen_index_encrypted +.Nd open encrypted file in zip archive for reading +.Sh LIBRARY +libzip (-lzip) +.Sh SYNOPSIS +.In zip.h +.Ft zip_file_t * +.Fn zip_fopen_encrypted "zip_t *archive" "const char *fname" "zip_flags_t flags" "const char *password" +.Ft zip_file_t * +.Fn zip_fopen_index_encrypted "zip_t *archive" "zip_uint64_t index" "zip_flags_t flags" "const char *password" +.Sh DESCRIPTION +The +.Fn zip_fopen_encrypted +function opens the encrypted file name +.Ar fname +in +.Ar archive +using the password given in the +.Ar password +argument. +If +.Ar password +is +.Dv NULL +or the empty string, the default password is used (see +.Xr zip_set_default_password 3 ) . +The +.Ar flags +argument are the same as for +.Xr zip_fopen 3 . +.Pp +The +.Fn zip_fopen_index_encrypted +function opens the file at position +.Ar index , +see +.Xr zip_fopen_index 3 . +These functions are called automatically by +.Xr zip_fopen 3 ; +you only need to call them if you want to specify a non-default password +(see +.Xr zip_set_default_password 3 ) . +.Sh RETURN VALUES +Upon successful completion, a +.Ft struct zip_file +pointer is returned. +Otherwise, +.Dv NULL +is returned and the error code in +.Ar archive +is set to indicate the error. +.Sh ERRORS +.Bl -tag -width ZIP_ER_ENCRNOTSUPPXX +.It Bq Er ZIP_ER_NOPASSWD +No password was provided. +.El +.Pp +The function +.Fn zip_fopen_encrypted +may also fail and set +.Va zip_err +for any of the errors specified for the routine +.Xr zip_fopen 3 . +.Pp +The function +.Fn zip_fopen_index_encrypted +may also fail and set +.Va zip_err +for any of the errors specified for the routine +.Xr zip_fopen_index 3 . +.Sh SEE ALSO +.Xr libzip 3 , +.Xr zip_fclose 3 , +.Xr zip_fopen 3 , +.Xr zip_fread 3 , +.Xr zip_get_num_entries 3 , +.Xr zip_name_locate 3 +.Sh HISTORY +.Fn zip_fopen_encrypted +and +.Fn zip_fopen_index_encrypted +were added in libzip 1.0. +.Sh AUTHORS +.An -nosplit +.An Dieter Baron Aq Mt dillo@nih.at +and +.An Thomas Klausner Aq Mt wiz@gatalith.at +.Sh CAVEATS +The zip file format provides very limited possibility for password +verification (a short hash of is compared against one byte in the zip +archive). +For this reason, reading a file while using an incorrect password may +immediately fail with +.Er ZIP_ER_WRONGPASSWD , +but if the mismatch is not detected, a zlib error may be returned +later instead. +Since zlib errors can also be caused by broken compressed data, there +is no way to make sure if the password was incorrect or if it was +correct, but the compressed data was invalid. diff --git a/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_fopen_index.3 b/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_fopen_index.3 new file mode 100644 index 0000000..d86bdb9 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_fopen_index.3 @@ -0,0 +1,148 @@ +.\" zip_fopen.mdoc -- open file in zip archive for reading +.\" Copyright (C) 2003-2017 Dieter Baron and Thomas Klausner +.\" +.\" This file is part of libzip, a library to manipulate ZIP archives. +.\" The authors can be contacted at +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in +.\" the documentation and/or other materials provided with the +.\" distribution. +.\" 3. The names of the authors may not be used to endorse or promote +.\" products derived from this software without specific prior +.\" written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS +.\" OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +.\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +.\" DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE +.\" GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +.\" IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +.\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN +.\" IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.\" +.Dd December 18, 2017 +.Dt ZIP_FOPEN 3 +.Os +.Sh NAME +.Nm zip_fopen , +.Nm zip_fopen_index +.Nd open file in zip archive for reading +.Sh LIBRARY +libzip (-lzip) +.Sh SYNOPSIS +.In zip.h +.Ft zip_file_t * +.Fn zip_fopen "zip_t *archive" "const char *fname" "zip_flags_t flags" +.Ft zip_file_t * +.Fn zip_fopen_index "zip_t *archive" "zip_uint64_t index" "zip_flags_t flags" +.Sh DESCRIPTION +The +.Fn zip_fopen +function opens the file name +.Ar fname +in +.Ar archive . +The +.Ar flags +argument specifies how the name lookup should be done, according to +the values are described in +.Xr zip_name_locate 3 . +Also, the following values may be +.Em or Ns No 'ed +to it. +.Bl -tag -offset indent -width ZIP_FL_COMPRESSED +.It Dv ZIP_FL_COMPRESSED +Read the compressed data. +Otherwise the data is uncompressed by +.Fn zip_fread . +.It Dv ZIP_FL_UNCHANGED +Read the original data from the zip archive, ignoring any changes made +to the file; this is not supported by all data sources. +.El +.Pp +The +.Fn zip_fopen_index +function opens the file at position +.Ar index . +.Pp +If encrypted data is encountered, the functions call +.Xr zip_fopen_encrypted 3 +or +.Xr zip_fopen_index_encrypted 3 +respectively, using the default password set with +.Xr zip_set_default_password 3 . +.Sh RETURN VALUES +Upon successful completion, a +.Ft struct zip_file +pointer is returned. +Otherwise, +.Dv NULL +is returned and the error code in +.Ar archive +is set to indicate the error. +.Sh ERRORS +.Bl -tag -width Er +.It Bq Er ZIP_ER_CHANGED +The file data has been changed and the data source does +not support rereading data. +.It Bq Er ZIP_ER_COMPNOTSUPP +The compression method used is not supported. +.It Bq Er ZIP_ER_ENCRNOTSUPP +The encryption method used is not supported. +.It Bq Er ZIP_ER_MEMORY +Required memory could not be allocated. +.It Bq Er ZIP_ER_NOPASSWD +The file is encrypted, but no password has been provided. +.It Bq Er ZIP_ER_READ +A file read error occurred. +.It Bq Er ZIP_ER_SEEK +A file seek error occurred. +.It Bq Er ZIP_ER_WRONGPASSWD +The provided password does not match the password used for encryption. +Note that some incorrect passwords are not detected by the check done by +.Fn zip_fopen . +.It Bq Er ZIP_ER_ZLIB +Initializing the zlib stream failed. +.El +.Pp +The function +.Fn zip_fopen +may also fail and set +.Va zip_err +for any of the errors specified for the routine +.Xr zip_name_locate 3 . +.Pp +The function +.Fn zip_fopen_index +may also fail with +.Er ZIP_ER_INVAL +if +.Ar index +is invalid. +.Sh SEE ALSO +.Xr libzip 3 , +.Xr zip_fclose 3 , +.Xr zip_fread 3 , +.Xr zip_fseek 3 , +.Xr zip_get_num_entries 3 , +.Xr zip_name_locate 3 , +.Xr zip_set_default_password 3 +.Sh HISTORY +.Fn zip_fopen +and +.Fn zip_fopen_index +were added in libzip 1.0. +.Sh AUTHORS +.An -nosplit +.An Dieter Baron Aq Mt dillo@nih.at +and +.An Thomas Klausner Aq Mt wiz@gatalith.at diff --git a/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_fopen_index_encrypted.3 b/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_fopen_index_encrypted.3 new file mode 100644 index 0000000..9428798 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_fopen_index_encrypted.3 @@ -0,0 +1,135 @@ +.\" zip_fopen_encrypted.mdoc -- open encrypted file in zip archive for reading +.\" Copyright (C) 2011-2021 Dieter Baron and Thomas Klausner +.\" +.\" This file is part of libzip, a library to manipulate ZIP archives. +.\" The authors can be contacted at +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in +.\" the documentation and/or other materials provided with the +.\" distribution. +.\" 3. The names of the authors may not be used to endorse or promote +.\" products derived from this software without specific prior +.\" written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS +.\" OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +.\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +.\" DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE +.\" GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +.\" IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +.\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN +.\" IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.\" +.Dd September 15, 2020 +.Dt ZIP_FOPEN_ENCRYPTED 3 +.Os +.Sh NAME +.Nm zip_fopen_encrypted , +.Nm zip_fopen_index_encrypted +.Nd open encrypted file in zip archive for reading +.Sh LIBRARY +libzip (-lzip) +.Sh SYNOPSIS +.In zip.h +.Ft zip_file_t * +.Fn zip_fopen_encrypted "zip_t *archive" "const char *fname" "zip_flags_t flags" "const char *password" +.Ft zip_file_t * +.Fn zip_fopen_index_encrypted "zip_t *archive" "zip_uint64_t index" "zip_flags_t flags" "const char *password" +.Sh DESCRIPTION +The +.Fn zip_fopen_encrypted +function opens the encrypted file name +.Ar fname +in +.Ar archive +using the password given in the +.Ar password +argument. +If +.Ar password +is +.Dv NULL +or the empty string, the default password is used (see +.Xr zip_set_default_password 3 ) . +The +.Ar flags +argument are the same as for +.Xr zip_fopen 3 . +.Pp +The +.Fn zip_fopen_index_encrypted +function opens the file at position +.Ar index , +see +.Xr zip_fopen_index 3 . +These functions are called automatically by +.Xr zip_fopen 3 ; +you only need to call them if you want to specify a non-default password +(see +.Xr zip_set_default_password 3 ) . +.Sh RETURN VALUES +Upon successful completion, a +.Ft struct zip_file +pointer is returned. +Otherwise, +.Dv NULL +is returned and the error code in +.Ar archive +is set to indicate the error. +.Sh ERRORS +.Bl -tag -width ZIP_ER_ENCRNOTSUPPXX +.It Bq Er ZIP_ER_NOPASSWD +No password was provided. +.El +.Pp +The function +.Fn zip_fopen_encrypted +may also fail and set +.Va zip_err +for any of the errors specified for the routine +.Xr zip_fopen 3 . +.Pp +The function +.Fn zip_fopen_index_encrypted +may also fail and set +.Va zip_err +for any of the errors specified for the routine +.Xr zip_fopen_index 3 . +.Sh SEE ALSO +.Xr libzip 3 , +.Xr zip_fclose 3 , +.Xr zip_fopen 3 , +.Xr zip_fread 3 , +.Xr zip_get_num_entries 3 , +.Xr zip_name_locate 3 +.Sh HISTORY +.Fn zip_fopen_encrypted +and +.Fn zip_fopen_index_encrypted +were added in libzip 1.0. +.Sh AUTHORS +.An -nosplit +.An Dieter Baron Aq Mt dillo@nih.at +and +.An Thomas Klausner Aq Mt wiz@gatalith.at +.Sh CAVEATS +The zip file format provides very limited possibility for password +verification (a short hash of is compared against one byte in the zip +archive). +For this reason, reading a file while using an incorrect password may +immediately fail with +.Er ZIP_ER_WRONGPASSWD , +but if the mismatch is not detected, a zlib error may be returned +later instead. +Since zlib errors can also be caused by broken compressed data, there +is no way to make sure if the password was incorrect or if it was +correct, but the compressed data was invalid. diff --git a/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_fread.3 b/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_fread.3 new file mode 100644 index 0000000..3371298 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_fread.3 @@ -0,0 +1,85 @@ +.\" zip_fread.mdoc -- read from file +.\" Copyright (C) 2003-2022 Dieter Baron and Thomas Klausner +.\" +.\" This file is part of libzip, a library to manipulate ZIP archives. +.\" The authors can be contacted at +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in +.\" the documentation and/or other materials provided with the +.\" distribution. +.\" 3. The names of the authors may not be used to endorse or promote +.\" products derived from this software without specific prior +.\" written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS +.\" OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +.\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +.\" DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE +.\" GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +.\" IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +.\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN +.\" IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.\" +.Dd September 11, 2024 +.Dt ZIP_FREAD 3 +.Os +.Sh NAME +.Nm zip_fread +.Nd read from file +.Sh LIBRARY +libzip (-lzip) +.Sh SYNOPSIS +.In zip.h +.Ft zip_int64_t +.Fn zip_fread "zip_file_t *file" "void *buf" "zip_uint64_t nbytes" +.Sh DESCRIPTION +The +.Fn zip_fread +function reads up to +.Ar nbytes +bytes from +.Ar file +into +.Ar buf +from the current position in the file (see +.Xr zip_fseek 3 ) . +After reading, the current position is updated by the number of bytes read. +.Sh RETURN VALUES +If successful, the number of bytes actually read is returned. +When +.Fn zip_fread +is called after reaching the end of the file, 0 is returned. +In case of error, \-1 is returned. +.Sh SEE ALSO +.Xr libzip 3 , +.Xr zip_fclose 3 , +.Xr zip_file_get_error 3 , +.Xr zip_fopen 3 , +.Xr zip_fseek 3 +.Sh HISTORY +.Fn zip_fread +was added in libzip 0.6. +In libzip 0.10 the return type was changed from +.Vt ssize_t +to +.Vt zip_int64_t . +In libzip 0.10 the type of +.Ar nbytes +was changed from +.Vt size_t +to +.Vt zip_uint64_t . +.Sh AUTHORS +.An -nosplit +.An Dieter Baron Aq Mt dillo@nih.at +and +.An Thomas Klausner Aq Mt wiz@gatalith.at diff --git a/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_fseek.3 b/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_fseek.3 new file mode 100644 index 0000000..3ba5a9e --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_fseek.3 @@ -0,0 +1,89 @@ +.\" zip_fseek.mdoc -- seek in file +.\" Copyright (C) 2016-2022 Dieter Baron and Thomas Klausner +.\" +.\" This file is part of libzip, a library to manipulate ZIP archives. +.\" The authors can be contacted at +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in +.\" the documentation and/or other materials provided with the +.\" distribution. +.\" 3. The names of the authors may not be used to endorse or promote +.\" products derived from this software without specific prior +.\" written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS +.\" OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +.\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +.\" DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE +.\" GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +.\" IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +.\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN +.\" IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.\" +.Dd September 11, 2024 +.Dt ZIP_FSEEK 3 +.Os +.Sh NAME +.Nm zip_fseek , +.Nm zip_file_is_seekable +.Nd seek in file +.Sh LIBRARY +libzip (-lzip) +.Sh SYNOPSIS +.In zip.h +.Ft zip_int8_t +.Fn zip_fseek "zip_file_t *file" "zip_int64_t offset" "int whence" +.Ft int +.Fn zip_file_is_seekable "zip_file_t *file" +.Sh DESCRIPTION +The +.Fn zip_fseek +function seeks to the specified +.Ar offset +relative to +.Ar whence , +just like +.Xr fseek 3 . +.Pp +.Nm +only works on uncompressed (stored), unencrypted data. +When called on compressed or encrypted data it will return an error. +.Pp +The +.Fn zip_file_is_seekable +function returns 1 if a file is seekable. +.Sh RETURN VALUES +If successful, +.Fn zip_fseek +returns 0. +Otherwise, \-1 is returned. +.Pp +.Fn zip_file_is_seekable +returns 1 if a file is seekable and 0 if not. +On an invalid argument, it returns \-1. +.Sh SEE ALSO +.Xr libzip 3 , +.Xr zip_fclose 3 , +.Xr zip_file_get_error 3 , +.Xr zip_fopen 3 , +.Xr zip_fread 3 , +.Xr zip_ftell 3 +.Sh HISTORY +.Fn zip_fseek +was added in libzip 1.2.0. +.Fn zip_file_is_seekable +was added in libzip 1.9.0. +.Sh AUTHORS +.An -nosplit +.An Dieter Baron Aq Mt dillo@nih.at +and +.An Thomas Klausner Aq Mt wiz@gatalith.at diff --git a/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_ftell.3 b/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_ftell.3 new file mode 100644 index 0000000..e045634 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_ftell.3 @@ -0,0 +1,67 @@ +.\" zip_ftell.mdoc -- tell position in file +.\" Copyright (C) 2016-2021 Dieter Baron and Thomas Klausner +.\" +.\" This file is part of libzip, a library to manipulate ZIP archives. +.\" The authors can be contacted at +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in +.\" the documentation and/or other materials provided with the +.\" distribution. +.\" 3. The names of the authors may not be used to endorse or promote +.\" products derived from this software without specific prior +.\" written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS +.\" OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +.\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +.\" DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE +.\" GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +.\" IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +.\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN +.\" IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.\" +.Dd September 11, 2024 +.Dt ZIP_FTELL 3 +.Os +.Sh NAME +.Nm zip_ftell +.Nd tell position in file +.Sh LIBRARY +libzip (-lzip) +.Sh SYNOPSIS +.In zip.h +.Ft zip_int64_t +.Fn zip_ftell "zip_file_t *file" +.Sh DESCRIPTION +The +.Fn zip_ftell +function reports the current offset in the file. +.Sh RETURN VALUES +If successful, +.Nm +returns the current file position. +Otherwise, \-1 is returned. +.Sh SEE ALSO +.Xr libzip 3 , +.Xr zip_fclose 3 , +.Xr zip_file_get_error 3 , +.Xr zip_fopen 3 , +.Xr zip_fread 3 , +.Xr zip_fseek 3 +.Sh HISTORY +.Fn zip_ftell +was added in libzip 1.2.0. +.Sh AUTHORS +.An -nosplit +.An Dieter Baron Aq Mt dillo@nih.at +and +.An Thomas Klausner Aq Mt wiz@gatalith.at diff --git a/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_get_archive_comment.3 b/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_get_archive_comment.3 new file mode 100644 index 0000000..d8f2e9b --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_get_archive_comment.3 @@ -0,0 +1,112 @@ +.\" zip_get_archive_comment.mdoc -- get zip archive comment +.\" Copyright (C) 2006-2021 Dieter Baron and Thomas Klausner +.\" +.\" This file is part of libzip, a library to manipulate ZIP archives. +.\" The authors can be contacted at +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in +.\" the documentation and/or other materials provided with the +.\" distribution. +.\" 3. The names of the authors may not be used to endorse or promote +.\" products derived from this software without specific prior +.\" written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS +.\" OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +.\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +.\" DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE +.\" GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +.\" IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +.\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN +.\" IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.\" +.Dd September 22, 2020 +.Dt ZIP_GET_ARCHIVE_COMMENT 3 +.Os +.Sh NAME +.Nm zip_get_archive_comment +.Nd get zip archive comment +.Sh LIBRARY +libzip (-lzip) +.Sh SYNOPSIS +.In zip.h +.Ft const char * +.Fn zip_get_archive_comment "zip_t *archive" "int *lenp" "zip_flags_t flags" +.Sh DESCRIPTION +The +.Fn zip_get_archive_comment +function returns the comment for the entire zip archive. +The return value is in UTF-8 encoding unless +.Dv ZIP_FL_ENC_RAW +was specified (see below). +This pointer should not be modified or +.Xr free 3 Ap d , +and becomes invalid when +.Ar archive +is closed. +If +.Ar lenp +is not +.Dv NULL , +the integer to which it points will be set to the length of the +comment. +If +.Ar flags +is set to +.Dv ZIP_FL_UNCHANGED , +the original unchanged comment is returned. +.Pp +Additionally, the following +.Ar flags +are supported: +.Bl -tag -width ZIP_FL_ENC_STRICTXX -offset indent +.It Dv ZIP_FL_ENC_RAW +Return the unmodified archive comment as it is in the ZIP archive. +.It Dv ZIP_FL_ENC_GUESS +(Default.) +Guess the encoding of the archive comment in the ZIP archive and convert it +to UTF-8, if necessary. +(Only CP-437 and UTF-8 are recognized.) +.It Dv ZIP_FL_ENC_STRICT +Follow the ZIP specification for file names and extend it to the +archive comment, thus also expecting it in CP-437 encoding. +Convert it to UTF-8. +.El +.Em Note : +ASCII is a subset of both CP-437 and UTF-8. +.Sh RETURN VALUES +Upon successful completion, a pointer to the comment is returned, +or +.Dv NULL +if there is no comment. +.\" In case of an error, +.\" .Dv NULL +.\" is returned and the error code in +.\" .Ar archive +.\" is set to indicate the error. +.Sh SEE ALSO +.Xr libzip 3 , +.Xr zip_file_get_comment 3 +.Sh HISTORY +.Fn zip_get_archive_comment +was added in libzip 0.7. +In libzip 0.11 the type of +.Ar flags +was changed from +.Vt int +to +.Vt zip_flags_t . +.Sh AUTHORS +.An -nosplit +.An Dieter Baron Aq Mt dillo@nih.at +and +.An Thomas Klausner Aq Mt wiz@gatalith.at diff --git a/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_get_archive_flag.3 b/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_get_archive_flag.3 new file mode 100644 index 0000000..2edf7cf --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_get_archive_flag.3 @@ -0,0 +1,110 @@ +.\" zip_get_archive_flag.mdoc -- get comment for file in zip +.\" Copyright (C) 2008-2017 Dieter Baron and Thomas Klausner +.\" +.\" This file is part of libzip, a library to manipulate ZIP files. +.\" The authors can be contacted at +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in +.\" the documentation and/or other materials provided with the +.\" distribution. +.\" 3. The names of the authors may not be used to endorse or promote +.\" products derived from this software without specific prior +.\" written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS +.\" OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +.\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +.\" DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE +.\" GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +.\" IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +.\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN +.\" IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.\" +.Dd January 23, 2023 +.Dt ZIP_GET_ARCHIVE_FLAG 3 +.Os +.Sh NAME +.Nm zip_get_archive_flag +.Nd get status flags for zip +.Sh LIBRARY +libzip (-lzip) +.Sh SYNOPSIS +.In zip.h +.Ft int +.Fn zip_get_archive_flag "zip_t *archive" "zip_flags_t flag" "zip_flags_t flags" +.Sh DESCRIPTION +The +.Fn zip_get_archive_flag +function returns if the flag +.Ar flag +is set for the archive +.Ar archive . +The archive flags might have been changed with +.Fn zip_set_archive_flag ; +if +.Ar flags +is set to +.Dv ZIP_FL_UNCHANGED , +the original unchanged flags are tested. +.Pp +Supported flags are: +.Bl -tag -width XZIPXAFLXRDONLYXXX +.It Dv ZIP_AFL_CREATE_OR_KEEP_FILE_FOR_EMPTY_ARCHIVE +If this flag is cleared, the archive file will be removed if the archive is empty. +If it is set, an empty archive will be created, which is not recommended by the zip specification. +This flag is always cleared unless explicitly set by the user with +.Xr zip_set_archive_flag 3 . +.It Dv ZIP_AFL_IS_TORRENTZIP +The archive is in torrentzip format. +.It Dv ZIP_AFL_RDONLY +The archive is read-only. +.It Dv ZIP_AFL_WANT_TORRENTZIP +If the flag is set, the archive will be written in torrentzip format. +This flag is always cleared unless explicitly set by the user with +.Xr zip_set_archive_flag 3 . +.El +.Sh RETURN VALUES +.Fn zip_get_archive_flag +returns 1 if +.Ar flag +is set for +.Ar archive , +0 if not, +and \-1 if an error occurred. +.Sh SEE ALSO +.Xr libzip 3 , +.Xr zip_set_archive_flag 3 +.Sh HISTORY +.Fn zip_get_archive_flag +was added in libzip 0.9. +In libzip 0.11 the type of +.Ar flag +was changed from +.Vt int +to +.Vt zip_flags_t m +and the type of +.Ar flags +was changed from +.Vt int +to +.Vt zip_flags_t . +.Dv ZIP_AFL_CREATE_OR_KEEP_FILE_FOR_EMPTY_ARCHIVE , +.Dv ZIP_AFL_IS_TORRENTZIP , +and +.Dv ZIP_AFL_WANT_TORRENTZIP +were added in libzip 1.10.0. +.Sh AUTHORS +.An -nosplit +.An Dieter Baron Aq Mt dillo@nih.at +and +.An Thomas Klausner Aq Mt wiz@gatalith.at diff --git a/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_get_error.3 b/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_get_error.3 new file mode 100644 index 0000000..6af6f21 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_get_error.3 @@ -0,0 +1,60 @@ +.\" zip_get_error.mdoc -- get zip_error for archive +.\" Copyright (C) 2014-2017 Dieter Baron and Thomas Klausner +.\" +.\" This file is part of libzip, a library to manipulate ZIP archives. +.\" The authors can be contacted at +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in +.\" the documentation and/or other materials provided with the +.\" distribution. +.\" 3. The names of the authors may not be used to endorse or promote +.\" products derived from this software without specific prior +.\" written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS +.\" OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +.\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +.\" DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE +.\" GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +.\" IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +.\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN +.\" IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.\" +.Dd December 18, 2017 +.Dt ZIP_GET_ERROR 3 +.Os +.Sh NAME +.Nm zip_get_error +.Nd get zip error for archive +.Sh LIBRARY +libzip (-lzip) +.Sh SYNOPSIS +.In zip.h +.Ft zip_error_t * +.Fn zip_get_error "zip_t *archive" +.Sh DESCRIPTION +The +.Fn zip_get_error +function returns the zip error for the zip archive +.Ar archive . +.Sh SEE ALSO +.Xr libzip 3 , +.Xr zip_error_code_system 3 , +.Xr zip_error_code_zip 3 +.Sh HISTORY +.Fn zip_get_error +was added in libzip 1.0. +.Sh AUTHORS +.An -nosplit +.An Dieter Baron Aq Mt dillo@nih.at +and +.An Thomas Klausner Aq Mt wiz@gatalith.at diff --git a/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_get_file_comment.3 b/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_get_file_comment.3 new file mode 100644 index 0000000..1b9676b --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_get_file_comment.3 @@ -0,0 +1,73 @@ +.\" zip_get_file_comment.mdoc -- get comment for file in zip +.\" Copyright (C) 2006-2017 Dieter Baron and Thomas Klausner +.\" +.\" This file is part of libzip, a library to manipulate ZIP files. +.\" The authors can be contacted at +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in +.\" the documentation and/or other materials provided with the +.\" distribution. +.\" 3. The names of the authors may not be used to endorse or promote +.\" products derived from this software without specific prior +.\" written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS +.\" OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +.\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +.\" DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE +.\" GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +.\" IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +.\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN +.\" IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.\" +.Dd December 18, 2017 +.Dt ZIP_GET_FILE_COMMENT 3 +.Os +.Sh NAME +.Nm zip_get_file_comment +.Nd get comment for file in zip (obsolete interface) +.Sh LIBRARY +libzip (-lzip) +.Sh SYNOPSIS +.In zip.h +.Ft const char * +.Fn zip_get_file_comment "zip_t *archive" "zip_uint64_t index" "int *lenp" "int flags" +.Sh DESCRIPTION +The +.Fn zip_get_file_comment +function is the obsolete version of +.Xr zip_file_get_comment 3 . +The only differences are the types of the +.Ar lenp +and +.Ar flags +arguments. +.Sh SEE ALSO +.Xr libzip 3 , +.Xr zip_file_get_comment 3 +.Sh HISTORY +.Fn zip_get_file_comment +was added in libzip 0.7. +In libzip 0.10 the type of +.Ar index +was changed from +.Vt int +to +.Vt zip_uint64_t . +It was deprecated in libzip 0.11, use +.Fn zip_file_get_comment +instead. +.Sh AUTHORS +.An -nosplit +.An Dieter Baron Aq Mt dillo@nih.at +and +.An Thomas Klausner Aq Mt wiz@gatalith.at diff --git a/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_get_name.3 b/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_get_name.3 new file mode 100644 index 0000000..9b4fea6 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_get_name.3 @@ -0,0 +1,132 @@ +.\" zip_get_name.mdoc -- get name of file by index +.\" Copyright (C) 2003-2021 Dieter Baron and Thomas Klausner +.\" +.\" This file is part of libzip, a library to manipulate ZIP archives. +.\" The authors can be contacted at +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in +.\" the documentation and/or other materials provided with the +.\" distribution. +.\" 3. The names of the authors may not be used to endorse or promote +.\" products derived from this software without specific prior +.\" written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS +.\" OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +.\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +.\" DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE +.\" GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +.\" IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +.\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN +.\" IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.\" +.Dd September 22, 2020 +.Dt ZIP_GET_NAME 3 +.Os +.Sh NAME +.Nm zip_get_name +.Nd get name of file by index +.Sh LIBRARY +libzip (-lzip) +.Sh SYNOPSIS +.In zip.h +.Ft const char * +.Fn zip_get_name "zip_t *archive" "zip_uint64_t index" "zip_flags_t flags" +.Sh DESCRIPTION +The +.Fn zip_get_name +function returns the name of the file at position +.Ar index +in +.Ar archive . +The name is in UTF-8 encoding unless +.Dv ZIP_FL_ENC_RAW +was specified (see below). +.Pp +If +.Ar flags +is set to +.Dv ZIP_FL_UNCHANGED , +the original unchanged filename is returned. +The returned string must not be modified or freed, and becomes invalid when +.Ar archive +is closed. +.Pp +Additionally, the following +.Ar flags +are supported: +.Bl -tag -width ZIP_FL_ENC_STRICTXX -offset indent +.It Dv ZIP_FL_ENC_RAW +Return the unmodified names as it is in the ZIP archive. +.It Dv ZIP_FL_ENC_GUESS +(Default.) +Guess the encoding of the name in the ZIP archive and convert it +to UTF-8, if necessary. +(Only CP-437 and UTF-8 are recognized.) +.It Dv ZIP_FL_ENC_STRICT +Follow the ZIP specification and expect CP-437 encoded names in +the ZIP archive (except if they are explicitly marked as UTF-8). +Convert it to UTF-8. +.El +.Em Note : +ASCII is a subset of both CP-437 and UTF-8. +.Sh RETURN VALUES +Upon successful completion, a pointer to the name is returned. +Otherwise, +.Dv NULL +and the error code in +.Ar archive +is set to indicate the error. +.Sh ERRORS +.Fn zip_get_name +fails if: +.Bl -tag -width Er +.It Bq Er ZIP_ER_DELETED +.Ar index +refers to a file that has been deleted +(see +.Xr zip_delete 3 ) . +.It Bq Er ZIP_ER_INVAL +.Ar index +is not a valid file index in +.Ar archive , +or +.Ar index +points to an added file and +.Dv ZIP_FL_UNCHANGED +is set. +.It Bq Er ZIP_ER_MEMORY +Required memory could not be allocated. +.El +.Sh SEE ALSO +.Xr libzip 3 , +.Xr zip_name_locate 3 +.Sh HISTORY +.Fn zip_get_name +was added in libzip 0.6. +In libzip 0.10 the type of +.Ar index +was changed from +.Vt int +to +.Vt zip_uint64_t . +In libzip 0.11 the type of +.Ar flags +was changed from +.Vt int +to +.Vt zip_flags_t . +.Sh AUTHORS +.An -nosplit +.An Dieter Baron Aq Mt dillo@nih.at +and +.An Thomas Klausner Aq Mt wiz@gatalith.at diff --git a/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_get_num_entries.3 b/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_get_num_entries.3 new file mode 100644 index 0000000..1bc6072 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_get_num_entries.3 @@ -0,0 +1,88 @@ +.\" zip_get_num_entries.mdoc -- get number of files in archive +.\" Copyright (C) 2011-2017 Dieter Baron and Thomas Klausner +.\" +.\" This file is part of libzip, a library to manipulate ZIP archives. +.\" The authors can be contacted at +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in +.\" the documentation and/or other materials provided with the +.\" distribution. +.\" 3. The names of the authors may not be used to endorse or promote +.\" products derived from this software without specific prior +.\" written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS +.\" OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +.\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +.\" DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE +.\" GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +.\" IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +.\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN +.\" IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.\" +.Dd August 19, 2022 +.Dt ZIP_GET_NUM_ENTRIES 3 +.Os +.Sh NAME +.Nm zip_get_num_entries +.Nd get number of entries in archive +.Sh LIBRARY +libzip (-lzip) +.Sh SYNOPSIS +.In zip.h +.Ft zip_int64_t +.Fn zip_get_num_entries "zip_t *archive" "zip_flags_t flags" +.Sh DESCRIPTION +The +.Fn zip_get_num_entries +function returns the number of entries in +.Ar archive . +Entries are all files that are present in the original archive or that +were added while the archive is open. +This includes deleted files, since +indices are not renumbered until the archive is closed. +(This allows one to refer to deleted files, e. g. to undelete them.) +.Pp +If +.Ar flags +is set to +.Dv ZIP_FL_UNCHANGED , +the original number of files is returned. +.Sh RETURN VALUES +.Fn zip_get_num_entries +returns the number of entries in the zip archive, +or \-1 if +.Ar archive +is +.Dv NULL . +.Sh SEE ALSO +.Xr libzip 3 , +.Xr zip_fopen_index 3 , +.Xr zip_stat_index 3 +.Sh HISTORY +.Fn zip_get_num_entries +was added in libzip 0.10. +In libzip 0.11 the return type was changed from +.Vt zip_uint64_t +to +.Vt zip_int64_t . +In libzip 0.11 the type of +.Ar flags +was changed from +.Vt int +to +.Vt zip_flags_t . +.Sh AUTHORS +.An -nosplit +.An Dieter Baron Aq Mt dillo@nih.at +and +.An Thomas Klausner Aq Mt wiz@gatalith.at diff --git a/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_get_num_files.3 b/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_get_num_files.3 new file mode 100644 index 0000000..b18c06d --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_get_num_files.3 @@ -0,0 +1,75 @@ +.\" zip_get_num_files.mdoc -- get number of files in archive +.\" Copyright (C) 2003-2017 Dieter Baron and Thomas Klausner +.\" +.\" This file is part of libzip, a library to manipulate ZIP archives. +.\" The authors can be contacted at +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in +.\" the documentation and/or other materials provided with the +.\" distribution. +.\" 3. The names of the authors may not be used to endorse or promote +.\" products derived from this software without specific prior +.\" written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS +.\" OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +.\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +.\" DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE +.\" GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +.\" IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +.\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN +.\" IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.\" +.Dd December 18, 2017 +.Dt ZIP_GET_NUM_FILES 3 +.Os +.Sh NAME +.Nm zip_get_num_files +.Nd get number of files in archive (obsolete interface) +.Sh LIBRARY +libzip (-lzip) +.Sh SYNOPSIS +.In zip.h +.Ft int +.Fn zip_get_num_files "zip_t *archive" +.Sh DESCRIPTION +.Em This function is deprecated . +.Em Use +.Xr zip_get_num_entries 3 +.Em instead . +.Pp +The +.Fn zip_get_num_files +function returns the number of files in +.Ar archive . +.Sh RETURN VALUES +.Fn zip_get_num_files +returns the number of files in the zip archive, +or \-1 if +.Ar archive +is +.Dv NULL . +.Sh SEE ALSO +.Xr libzip 3 , +.Xr zip_fopen_index 3 , +.Xr zip_stat_index 3 +.Sh HISTORY +.Fn zip_get_num_files +was added in libzip 0.6. +It was deprecated in libzip 0.11, use +.Fn zip_get_num_entries instead +instead. +.Sh AUTHORS +.An -nosplit +.An Dieter Baron Aq Mt dillo@nih.at +and +.An Thomas Klausner Aq Mt wiz@gatalith.at diff --git a/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_libzip_version.3 b/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_libzip_version.3 new file mode 100644 index 0000000..04af461 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_libzip_version.3 @@ -0,0 +1,66 @@ +.\" zip_libzip_version.mdoc -- return run-time version of library +.\" Copyright (C) 2017 Dieter Baron and Thomas Klausner +.\" +.\" This file is part of libzip, a library to manipulate ZIP archives. +.\" The authors can be contacted at +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in +.\" the documentation and/or other materials provided with the +.\" distribution. +.\" 3. The names of the authors may not be used to endorse or promote +.\" products derived from this software without specific prior +.\" written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS +.\" OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +.\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +.\" DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE +.\" GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +.\" IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +.\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN +.\" IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.\" +.Dd December 18, 2017 +.Dt ZIP_LIBZIP_VERSION 3 +.Os +.Sh NAME +.Nm zip_libzip_version +.Nd return run-time version of library +.Sh LIBRARY +libzip (-lzip) +.Sh SYNOPSIS +.In zip.h +.Ft const char * +.Fn zip_libzip_version void +.Sh DESCRIPTION +.Nm +returns the version number of the library as string in the format +.Dq $MAJOR.$MINOR.$MICRO$SUFFIX +where +.Ar $MAJOR +is the major version, +.Ar $MINOR +the minor, +.Ar $MICRO +the micro, and +.Ar $SUFFIX +a suffix that's only set for development versions. +.Sh SEE ALSO +.Xr libzip 3 +.Sh HISTORY +.Fn zip_libzip_version +was added in libzip 1.3.1. +.Sh AUTHORS +.An -nosplit +.An Dieter Baron Aq Mt dillo@nih.at +and +.An Thomas Klausner Aq Mt wiz@gatalith.at diff --git a/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_name_locate.3 b/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_name_locate.3 new file mode 100644 index 0000000..612c2a6 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_name_locate.3 @@ -0,0 +1,148 @@ +.\" zip_name_locate.mdoc -- get index of file by name +.\" Copyright (C) 2003-2022 Dieter Baron and Thomas Klausner +.\" +.\" This file is part of libzip, a library to manipulate ZIP archives. +.\" The authors can be contacted at +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in +.\" the documentation and/or other materials provided with the +.\" distribution. +.\" 3. The names of the authors may not be used to endorse or promote +.\" products derived from this software without specific prior +.\" written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS +.\" OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +.\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +.\" DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE +.\" GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +.\" IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +.\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN +.\" IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.\" +.Dd March 15, 2022 +.Dt ZIP_NAME_LOCATE 3 +.Os +.Sh NAME +.Nm zip_name_locate +.Nd get index of file by name +.Sh LIBRARY +libzip (-lzip) +.Sh SYNOPSIS +.In zip.h +.Ft zip_int64_t +.Fn zip_name_locate "zip_t *archive" "const char *fname" "zip_flags_t flags" +.Sh DESCRIPTION +The +.Fn zip_name_locate +function returns the index of the file named +.Ar fname +in +.Ar archive . +If +.Ar archive +does not contain a file with that name, \-1 is returned. +.Pp +If neither +.Dv ZIP_FL_ENC_RAW +nor +.Dv ZIP_FL_ENC_STRICT +are specified, guess the encoding of the name in the ZIP archive and convert it +to UTF-8, if necessary, before comparing. +.Pp +If neither +.Dv ZIP_FL_ENC_CP437 +nor +.Dv ZIP_FL_ENC_UTF_8 +are specified, guess the encoding of +.Ar fname . +.Pp +Only CP-437 and UTF-8 are recognized. +.Pp +The +.Fa flags +are specified by +.Em or Ns No 'ing +the following values, or 0 for none of them. +.Bl -tag -offset indent -width ZIP_FL_ENC_STRICT +.It Dv ZIP_FL_NOCASE +Ignore case distinctions. +(Will only work well if the file names are ASCII.) +With this flag, +.Fn zip_name_locate +will be slow for archives with many files. +.It Dv ZIP_FL_NODIR +Ignore directory part of file name in archive. +With this flag, +.Fn zip_name_locate +will be slow for archives with many files. +.It Dv ZIP_FL_ENC_GUESS +This flag has no effect (its value is 0); it can be used to explicitly denote the absence of encoding flags. +.It Dv ZIP_FL_ENC_RAW +Compare +.Ar fname +against the unmodified names as they are in the ZIP archive, without converting them to UTF-8. +.It Dv ZIP_FL_ENC_STRICT +Follow the ZIP specification and expect CP-437 encoded names in +the ZIP archive (except if they are explicitly marked as UTF-8). +Convert them to UTF-8 before comparing. +.It Dv ZIP_FL_ENC_CP437 +.Ar fname +is encoded as CP-437. +.It Dv ZIP_FL_ENC_UTF_8 +.Ar fname +is encoded as UTF-8. +.El +.Pp +.Em Note : +ASCII is a subset of both CP-437 and UTF-8. +.Sh RETURN VALUES +.Fn zip_name_locate +returns the index of the file named +.Ar fname +or \-1, if +.Ar archive +does not contain an entry of that name. +.Sh ERRORS +.Fn zip_name_locate +fails if: +.Bl -tag -width Er +.It Bq Er ZIP_ER_INVAL +One of the arguments is invalid. +.It Bq Er ZIP_ER_MEMORY +Required memory could not be allocated. +.It Bq Er ZIP_ER_NOENT +No entry of the name +.Ar fname +is found in the archive. +.El +.Sh SEE ALSO +.Xr libzip 3 , +.Xr zip_get_name 3 +.Sh HISTORY +.Fn zip_name_locate +was added in libzip 0.6. +In libzip 0.11 the return type was changed from +.Vt int +to +.Vt zip_int64_t . +In libzip 0.11 the type of +.Ar flags +was changed from +.Vt int +to +.Vt zip_flags_t . +.Sh AUTHORS +.An -nosplit +.An Dieter Baron Aq Mt dillo@nih.at +and +.An Thomas Klausner Aq Mt wiz@gatalith.at diff --git a/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_open.3 b/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_open.3 new file mode 100644 index 0000000..5a8357a --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_open.3 @@ -0,0 +1,192 @@ +.\" zip_open.mdoc -- open zip archive +.\" Copyright (C) 2003-2022 Dieter Baron and Thomas Klausner +.\" +.\" This file is part of libzip, a library to manipulate ZIP archives. +.\" The authors can be contacted at +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in +.\" the documentation and/or other materials provided with the +.\" distribution. +.\" 3. The names of the authors may not be used to endorse or promote +.\" products derived from this software without specific prior +.\" written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS +.\" OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +.\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +.\" DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE +.\" GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +.\" IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +.\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN +.\" IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.\" +.Dd October 9, 2022 +.Dt ZIP_OPEN 3 +.Os +.Sh NAME +.Nm zip_open , +.Nm zip_open_from_source +.Nd open zip archive +.Sh LIBRARY +libzip (-lzip) +.Sh SYNOPSIS +.In zip.h +.Ft zip_t * +.Fn zip_open "const char *path" "int flags" "int *errorp" +.Ft zip_t * +.Fn zip_open_from_source "zip_source_t *zs" "int flags" "zip_error_t *ze" +.Sh DESCRIPTION +The +.Fn zip_open +function opens the zip archive specified by +.Ar path +and returns a pointer to a +.Ft struct zip , +used to manipulate the archive. +The +.Fa flags +are specified by +.Em or Ns No 'ing +the following values, or 0 for none of them. +.Bl -tag -offset indent -width ZIP_CHECKCONS +.It Dv ZIP_CHECKCONS +Perform additional stricter consistency checks on the archive, and +error if they fail. +.It Dv ZIP_CREATE +Create the archive if it does not exist. +.It Dv ZIP_EXCL +Error if archive already exists. +.It Dv ZIP_TRUNCATE +If archive exists, ignore its current contents. +In other words, handle it the same way as an empty archive. +.It Dv ZIP_RDONLY +Open archive in read-only mode. +.El +.Pp +If an error occurs and +.Ar errorp +is +.Pf non- Dv NULL , +it will be set to the corresponding error code. +.Pp +The +.Fn zip_open_from_source +function opens a zip archive encapsulated by the zip_source +.Fa zs +using the provided +.Fa flags . +In case of error, the zip_error +.Fa ze +is filled in. +.Sh RETURN VALUES +Upon successful completion +.Fn zip_open +and +.Fn zip_open_from_source +return a +.Ft struct zip +pointer. +Otherwise, +.Dv NULL +is returned and +.Fn zip_open +sets +.Ar *errorp +to indicate the error, while +.Fn zip_open_from source +sets +.Ar ze +to indicate the error. +.Sh EXAMPLES +Here's an example of how you could report errors during +.Nm : +.Bd -literal + zip_t *za; + int err; + + if ((za = zip_open(name, 0, &err)) == NULL) { + zip_error_t error; + zip_error_init_with_code(&error, err); + fprintf(stderr, "%s: cannot open zip archive '%s': %s\en", + progname, name, zip_error_strerror(&error)); + zip_error_fini(&error); + return -1; + } +.Ed +.Sh ERRORS +The archive specified by +.Ar path +is opened unless: +.Bl -tag -width Er +.It Bq Er ZIP_ER_EXISTS +The file specified by +.Ar path +exists and +.Dv ZIP_EXCL +is set. +.It Bq Er ZIP_ER_INCONS +Inconsistencies were found in the file specified by +.Ar path . +This error is often caused by specifying +.Dv ZIP_CHECKCONS +but can also happen without it. +.It Bq Er ZIP_ER_INVAL +The +.Ar path +argument is +.Dv NULL . +.It Bq Er ZIP_ER_MEMORY +Required memory could not be allocated. +.It Bq Er ZIP_ER_NOENT +The file specified by +.Ar path +does not exist and +.Dv ZIP_CREATE +is not set. +.It Bq Er ZIP_ER_NOZIP +The file specified by +.Ar path +is not a zip archive. +.It Bq Er ZIP_ER_OPEN +The file specified by +.Ar path +could not be opened. +.It Bq Er ZIP_ER_READ +A read error occurred; see +.Va errno +for details. +.It Bq Er ZIP_ER_SEEK +The file specified by +.Ar path +does not allow seeks. +.El +For newly created archives, +.Fn zip_open +does not try to create the file; this is done when calling +.Xr zip_close 3 +and any errors, like missing write permissions, will +be reported then. +.Sh SEE ALSO +.Xr libzip 3 , +.Xr zip_close 3 , +.Xr zip_error_strerror 3 , +.Xr zip_fdopen 3 +.Sh HISTORY +.Fn zip_open +and +.Fn zip_open_from_source +were added in libzip 1.0. +.Sh AUTHORS +.An -nosplit +.An Dieter Baron Aq Mt dillo@nih.at +and +.An Thomas Klausner Aq Mt wiz@gatalith.at diff --git a/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_open_from_source.3 b/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_open_from_source.3 new file mode 100644 index 0000000..5a8357a --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_open_from_source.3 @@ -0,0 +1,192 @@ +.\" zip_open.mdoc -- open zip archive +.\" Copyright (C) 2003-2022 Dieter Baron and Thomas Klausner +.\" +.\" This file is part of libzip, a library to manipulate ZIP archives. +.\" The authors can be contacted at +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in +.\" the documentation and/or other materials provided with the +.\" distribution. +.\" 3. The names of the authors may not be used to endorse or promote +.\" products derived from this software without specific prior +.\" written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS +.\" OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +.\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +.\" DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE +.\" GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +.\" IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +.\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN +.\" IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.\" +.Dd October 9, 2022 +.Dt ZIP_OPEN 3 +.Os +.Sh NAME +.Nm zip_open , +.Nm zip_open_from_source +.Nd open zip archive +.Sh LIBRARY +libzip (-lzip) +.Sh SYNOPSIS +.In zip.h +.Ft zip_t * +.Fn zip_open "const char *path" "int flags" "int *errorp" +.Ft zip_t * +.Fn zip_open_from_source "zip_source_t *zs" "int flags" "zip_error_t *ze" +.Sh DESCRIPTION +The +.Fn zip_open +function opens the zip archive specified by +.Ar path +and returns a pointer to a +.Ft struct zip , +used to manipulate the archive. +The +.Fa flags +are specified by +.Em or Ns No 'ing +the following values, or 0 for none of them. +.Bl -tag -offset indent -width ZIP_CHECKCONS +.It Dv ZIP_CHECKCONS +Perform additional stricter consistency checks on the archive, and +error if they fail. +.It Dv ZIP_CREATE +Create the archive if it does not exist. +.It Dv ZIP_EXCL +Error if archive already exists. +.It Dv ZIP_TRUNCATE +If archive exists, ignore its current contents. +In other words, handle it the same way as an empty archive. +.It Dv ZIP_RDONLY +Open archive in read-only mode. +.El +.Pp +If an error occurs and +.Ar errorp +is +.Pf non- Dv NULL , +it will be set to the corresponding error code. +.Pp +The +.Fn zip_open_from_source +function opens a zip archive encapsulated by the zip_source +.Fa zs +using the provided +.Fa flags . +In case of error, the zip_error +.Fa ze +is filled in. +.Sh RETURN VALUES +Upon successful completion +.Fn zip_open +and +.Fn zip_open_from_source +return a +.Ft struct zip +pointer. +Otherwise, +.Dv NULL +is returned and +.Fn zip_open +sets +.Ar *errorp +to indicate the error, while +.Fn zip_open_from source +sets +.Ar ze +to indicate the error. +.Sh EXAMPLES +Here's an example of how you could report errors during +.Nm : +.Bd -literal + zip_t *za; + int err; + + if ((za = zip_open(name, 0, &err)) == NULL) { + zip_error_t error; + zip_error_init_with_code(&error, err); + fprintf(stderr, "%s: cannot open zip archive '%s': %s\en", + progname, name, zip_error_strerror(&error)); + zip_error_fini(&error); + return -1; + } +.Ed +.Sh ERRORS +The archive specified by +.Ar path +is opened unless: +.Bl -tag -width Er +.It Bq Er ZIP_ER_EXISTS +The file specified by +.Ar path +exists and +.Dv ZIP_EXCL +is set. +.It Bq Er ZIP_ER_INCONS +Inconsistencies were found in the file specified by +.Ar path . +This error is often caused by specifying +.Dv ZIP_CHECKCONS +but can also happen without it. +.It Bq Er ZIP_ER_INVAL +The +.Ar path +argument is +.Dv NULL . +.It Bq Er ZIP_ER_MEMORY +Required memory could not be allocated. +.It Bq Er ZIP_ER_NOENT +The file specified by +.Ar path +does not exist and +.Dv ZIP_CREATE +is not set. +.It Bq Er ZIP_ER_NOZIP +The file specified by +.Ar path +is not a zip archive. +.It Bq Er ZIP_ER_OPEN +The file specified by +.Ar path +could not be opened. +.It Bq Er ZIP_ER_READ +A read error occurred; see +.Va errno +for details. +.It Bq Er ZIP_ER_SEEK +The file specified by +.Ar path +does not allow seeks. +.El +For newly created archives, +.Fn zip_open +does not try to create the file; this is done when calling +.Xr zip_close 3 +and any errors, like missing write permissions, will +be reported then. +.Sh SEE ALSO +.Xr libzip 3 , +.Xr zip_close 3 , +.Xr zip_error_strerror 3 , +.Xr zip_fdopen 3 +.Sh HISTORY +.Fn zip_open +and +.Fn zip_open_from_source +were added in libzip 1.0. +.Sh AUTHORS +.An -nosplit +.An Dieter Baron Aq Mt dillo@nih.at +and +.An Thomas Klausner Aq Mt wiz@gatalith.at diff --git a/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_register_cancel_callback_with_state.3 b/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_register_cancel_callback_with_state.3 new file mode 100644 index 0000000..59705ae --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_register_cancel_callback_with_state.3 @@ -0,0 +1,84 @@ +.\" zip_register_cancel_callback_with_state.mdoc -- allow cancelling during zip_close +.\" Copyright (C) 2021-2022 Dieter Baron and Thomas Klausner +.\" +.\" This file is part of libzip, a library to manipulate ZIP archives. +.\" The authors can be contacted at +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in +.\" the documentation and/or other materials provided with the +.\" distribution. +.\" 3. The names of the authors may not be used to endorse or promote +.\" products derived from this software without specific prior +.\" written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS +.\" OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +.\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +.\" DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE +.\" GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +.\" IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +.\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN +.\" IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.\" +.Dd June 18, 2022 +.Dt ZIP_REGISTER_CANCEL_CALLBACK_WITH_STATE 3 +.Os +.Sh NAME +.Nm zip_register_cancel_callback_with_state +.Nd allow cancelling during zip_close +.Sh LIBRARY +libzip (-lzip) +.Sh SYNOPSIS +.In zip.h +.Vt typedef int (*zip_cancel_callback)(zip_t *, void *); +.Ft void +.Fn zip_register_cancel_callback_with_state "zip_t *archive" "zip_cancel_callback callback" "void (*ud_free)(void *)" "void *ud" +.Sh DESCRIPTION +This function can be used to cancel writing of a zip archive during +.Xr zip_close 3 . +.Pp +The +.Fn zip_register_cancel_callback_with_state +function registers a callback function +.Ar callback +for the zip archive +.Ar archive . +The +.Ar ud_free +function is called during cleanup for deleting the userdata supplied in +.Ar ud . +.Pp +The callback function is called during +.Xr zip_close 3 +in regular intervals (after every zip archive entry that's completely +written to disk, and while writing data for entries) with zip archive +.Ar archive +and the user-provided user-data +.Ar ud +as arguments. +When the callback function returns a non-zero value, writing is cancelled and +.Xr zip_close 3 +returns an error. +.Pp +The callback function should be fast, since it will be called often. +.Sh SEE ALSO +.Xr libzip 3 , +.Xr zip_close 3 , +.Xr zip_register_progress_callback_with_state 3 +.Sh HISTORY +.Fn zip_register_cancel_callback_with_state +was added in libzip 1.6.0. +.Sh AUTHORS +.An -nosplit +.An Dieter Baron Aq Mt dillo@nih.at +and +.An Thomas Klausner Aq Mt wiz@gatalith.at diff --git a/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_register_progress_callback.3 b/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_register_progress_callback.3 new file mode 100644 index 0000000..69cc4f5 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_register_progress_callback.3 @@ -0,0 +1,77 @@ +.\" zip_register_progress_callback.mdoc -- provide updates during zip_close +.\" Copyright (C) 2016-2017 Dieter Baron and Thomas Klausner +.\" +.\" This file is part of libzip, a library to manipulate ZIP archives. +.\" The authors can be contacted at +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in +.\" the documentation and/or other materials provided with the +.\" distribution. +.\" 3. The names of the authors may not be used to endorse or promote +.\" products derived from this software without specific prior +.\" written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS +.\" OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +.\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +.\" DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE +.\" GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +.\" IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +.\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN +.\" IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.\" +.Dd December 18, 2017 +.Dt ZIP_REGISTER_PROGRESS_CALLBACK 3 +.Os +.Sh NAME +.Nm zip_register_progress_callback +.Nd provide updates during zip_close (obsolete interface) +.Sh LIBRARY +libzip (-lzip) +.Sh SYNOPSIS +.In zip.h +.Vt typedef void (*zip_progress_callback_t)(double); +.Ft void +.Fn zip_register_progress_callback "zip_t *archive" "zip_progress_callback_t progress_callback" +.Sh DESCRIPTION +The function +.Fn zip_register_progress_callback +is the obsolete version of +.Xr zip_register_progress_callback_with_state 3 . +.Pp +The +.Fn zip_register_progress_callback +function registers a callback function +.Ar progress_callback +for the zip archive +.Ar archive . +This function is called during +.Xr zip_close 3 +after every zip archive entry that's completely written to disk. +The value is a +.Vt double +in the range from 0.0 to 1.0. +This can be used to provide progress indicators for user interfaces. +.Sh SEE ALSO +.Xr libzip 3 , +.Xr zip_close 3 +.Sh HISTORY +.Fn zip_register_progress_callback +was added in libzip 1.2.0. +It was deprecated in libzip 1.3.0, use +.Fn zip_register_progress_callback_with_state +instead. +.Sh AUTHORS +.An -nosplit +.An Dieter Baron Aq Mt dillo@nih.at +and +.An Thomas Klausner Aq Mt wiz@gatalith.at diff --git a/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_register_progress_callback_with_state.3 b/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_register_progress_callback_with_state.3 new file mode 100644 index 0000000..4ee88e6 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_register_progress_callback_with_state.3 @@ -0,0 +1,87 @@ +.\" zip_register_progress_callback_with_state.mdoc -- provide updates during zip_close +.\" Copyright (C) 2017-2021 Dieter Baron and Thomas Klausner +.\" +.\" This file is part of libzip, a library to manipulate ZIP archives. +.\" The authors can be contacted at +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in +.\" the documentation and/or other materials provided with the +.\" distribution. +.\" 3. The names of the authors may not be used to endorse or promote +.\" products derived from this software without specific prior +.\" written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS +.\" OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +.\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +.\" DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE +.\" GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +.\" IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +.\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN +.\" IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.\" +.Dd December 18, 2017 +.Dt ZIP_REGISTER_PROGRESS_CALLBACK_WITH_STATE 3 +.Os +.Sh NAME +.Nm zip_register_progress_callback_with_state +.Nd provide updates during zip_close +.Sh LIBRARY +libzip (-lzip) +.Sh SYNOPSIS +.In zip.h +.Vt typedef void (*zip_progress_callback)(zip_t *, double, void *); +.Ft void +.Fn zip_register_progress_callback_with_state "zip_t *archive" "double precision" "zip_progress_callback callback" "void (*ud_free)(void *)" "void *ud" +.Sh DESCRIPTION +The +.Fn zip_register_progress_callback_with_state +function registers a callback function +.Ar callback +for the zip archive +.Ar archive . +The +.Ar precision +argument is a double in the range from 0.00 to 1.0 that defines the +smallest change for which the callback should be called (to avoid too +frequent calls). +The +.Ar ud_free +function is called during cleanup for deleting the userdata supplied in +.Ar ud . +.Pp +The callback function is called during +.Xr zip_close 3 +in regular intervals (after every zip archive entry that's completely +written to disk, and while writing data for entries) with zip archive +.Ar archive , +the current progression state as a +.Vt double , +and the user-provided user-data +.Ar ud +as arguments. +The progression state is a +.Vt double +in the range from 0.0 to 1.0. +This can be used to provide progress indicators for user interfaces. +.Sh SEE ALSO +.Xr libzip 3 , +.Xr zip_close 3 , +.Xr zip_register_cancel_callback_with_state 3 +.Sh HISTORY +.Fn zip_register_progress_callback_with_state +was added in libzip 1.3.0. +.Sh AUTHORS +.An -nosplit +.An Dieter Baron Aq Mt dillo@nih.at +and +.An Thomas Klausner Aq Mt wiz@gatalith.at diff --git a/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_rename.3 b/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_rename.3 new file mode 100644 index 0000000..5a53880 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_rename.3 @@ -0,0 +1,70 @@ +.\" zip_rename.mdoc -- rename file in zip archive +.\" Copyright (C) 2003-2017 Dieter Baron and Thomas Klausner +.\" +.\" This file is part of libzip, a library to manipulate ZIP archives. +.\" The authors can be contacted at +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in +.\" the documentation and/or other materials provided with the +.\" distribution. +.\" 3. The names of the authors may not be used to endorse or promote +.\" products derived from this software without specific prior +.\" written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS +.\" OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +.\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +.\" DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE +.\" GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +.\" IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +.\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN +.\" IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.\" +.Dd December 18, 2017 +.Dt ZIP_RENAME 3 +.Os +.Sh NAME +.Nm zip_rename +.Nd rename file in zip archive (obsolete interface) +.Sh LIBRARY +libzip (-lzip) +.Sh SYNOPSIS +.In zip.h +.Ft int +.Fn zip_rename "zip_t *archive" "zip_uint64_t index" "const char *name" +.Sh DESCRIPTION +.Fn zip_rename +is the obsolete version of +.Xr zip_file_rename 3 . +It is the same as calling +.Xr zip_file_rename 3 +with an empty flags argument. +.Sh SEE ALSO +.Xr libzip 3 , +.Xr zip_file_rename 3 +.Sh HISTORY +.Fn zip_rename +was added in libzip 0.6. +In libzip 0.10 the type of +.Ar index +was changed from +.Vt int +to +.Vt zip_uint64_t . +It was deprecated in libzip 0.11, use +.Fn zip_file_rename +instead. +.Sh AUTHORS +.An -nosplit +.An Dieter Baron Aq Mt dillo@nih.at +and +.An Thomas Klausner Aq Mt wiz@gatalith.at diff --git a/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_replace.3 b/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_replace.3 new file mode 100644 index 0000000..71bc4c8 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_replace.3 @@ -0,0 +1,96 @@ +.\" zip_add.mdoc -- add files to zip archive +.\" Copyright (C) 2004-2017 Dieter Baron and Thomas Klausner +.\" +.\" This file is part of libzip, a library to manipulate ZIP archives. +.\" The authors can be contacted at +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in +.\" the documentation and/or other materials provided with the +.\" distribution. +.\" 3. The names of the authors may not be used to endorse or promote +.\" products derived from this software without specific prior +.\" written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS +.\" OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +.\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +.\" DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE +.\" GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +.\" IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +.\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN +.\" IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.\" +.Dd December 18, 2017 +.Dt ZIP_ADD 3 +.Os +.Sh NAME +.Nm zip_add , +.Nm zip_replace +.Nd add file to zip archive or replace file in zip archive (obsolete interface) +.Sh LIBRARY +libzip (-lzip) +.Sh SYNOPSIS +.In zip.h +.Ft zip_int64_t +.Fn zip_add "zip_t *archive" "const char *name" "zip_source_t *source" +.Ft int +.Fn zip_replace "zip_t *archive" "zip_uint64_t index" "zip_source_t *source" +.Sh DESCRIPTION +The function +.Fn zip_add +is the obsolete version of +.Xr zip_file_add 3 . +It is the same as calling +.Xr zip_file_add 3 +with an empty +.Ar flags +argument. +Similarly, the +.Fn zip_replace +function is the obsolete version of +.Xr zip_file_replace 3 . +It is the same as calling +.Xr zip_file_replace 3 +with an empty +.Ar flags +argument. +.Sh SEE ALSO +.Xr libzip 3 , +.Xr zip_file_add 3 , +.Xr zip_file_replace 3 +.Sh HISTORY +.Fn zip_add +was added in libzip 0.6. +In libzip 0.10 the return type was changed from +.Vt int +to +.Vt zip_int64_t . +It was deprecated in libzip 0.11, use +.Fn zip_file_add +instead. +.Pp +.Fn zip_replace +was added in libzip 0.6. +In libzip 0.10 the type of +.Ar index +was changed from +.Vt int +to +.Vt zip_uint64_t . +It was deprecated in libzip 0.11, use +.Fn zip_file_replace +instead. +.Sh AUTHORS +.An -nosplit +.An Dieter Baron Aq Mt dillo@nih.at +and +.An Thomas Klausner Aq Mt wiz@gatalith.at diff --git a/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_set_archive_comment.3 b/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_set_archive_comment.3 new file mode 100644 index 0000000..a6aaea1 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_set_archive_comment.3 @@ -0,0 +1,93 @@ +.\" zip_set_archive_comment.mdoc -- set zip archive comment +.\" Copyright (C) 2006-2021 Dieter Baron and Thomas Klausner +.\" +.\" This file is part of libzip, a library to manipulate ZIP archives. +.\" The authors can be contacted at +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in +.\" the documentation and/or other materials provided with the +.\" distribution. +.\" 3. The names of the authors may not be used to endorse or promote +.\" products derived from this software without specific prior +.\" written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS +.\" OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +.\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +.\" DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE +.\" GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +.\" IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +.\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN +.\" IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.\" +.Dd December 18, 2017 +.Dt ZIP_SET_ARCHIVE_COMMENT 3 +.Os +.Sh NAME +.Nm zip_set_archive_comment +.Nd set zip archive comment +.Sh LIBRARY +libzip (-lzip) +.Sh SYNOPSIS +.In zip.h +.Ft int +.Fn zip_set_archive_comment "zip_t *archive" "const char *comment" "zip_uint16_t len" +.Sh DESCRIPTION +The +.Fn zip_set_archive_comment +function sets the comment for the entire zip archive. +If +.Ar comment +is +.Dv NULL +and +.Ar len +is 0, the archive comment will be removed. +.Ar comment +must be encoded in ASCII or UTF-8. +.Sh RETURN VALUES +Upon successful completion 0 is returned. +Otherwise, \-1 is returned and the error information in +.Ar archive +is set to indicate the error. +.Sh ERRORS +.Fn zip_set_archive_comment +fails if: +.Bl -tag -width Er +.It Bq Er ZIP_ER_INVAL +.Ar len +is less than 0 or longer than the maximum comment length in a zip file +(65535), or +.Ar comment +is not a valid UTF-8 encoded string. +.It Bq Er ZIP_ER_MEMORY +Required memory could not be allocated. +.El +.Sh SEE ALSO +.Xr libzip 3 , +.Xr zip_file_get_comment 3 , +.Xr zip_file_set_comment 3 , +.Xr zip_get_archive_comment 3 +.Sh HISTORY +.Fn zip_set_archive_comment +was added in libzip 0.7. +In libzip 0.11 the type of +.Ar len +was changed from +.Vt int +to +.Vt zip_uint16_t . +.Sh AUTHORS +.An -nosplit +.An Dieter Baron Aq Mt dillo@nih.at +and +.An Thomas Klausner Aq Mt wiz@gatalith.at diff --git a/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_set_archive_flag.3 b/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_set_archive_flag.3 new file mode 100644 index 0000000..ee0a246 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_set_archive_flag.3 @@ -0,0 +1,90 @@ +.\" zip_set_archive_flag.mdoc -- set zip archive flag +.\" Copyright (C) 2008-2017 Dieter Baron and Thomas Klausner +.\" +.\" This file is part of libzip, a library to manipulate ZIP archives. +.\" The authors can be contacted at +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in +.\" the documentation and/or other materials provided with the +.\" distribution. +.\" 3. The names of the authors may not be used to endorse or promote +.\" products derived from this software without specific prior +.\" written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS +.\" OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +.\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +.\" DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE +.\" GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +.\" IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +.\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN +.\" IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.\" +.Dd July 19, 2023 +.Dt ZIP_SET_ARCHIVE_FLAG 3 +.Os +.Sh NAME +.Nm zip_set_archive_flag +.Nd set zip archive flag +.Sh LIBRARY +libzip (-lzip) +.Sh SYNOPSIS +.In zip.h +.Ft int +.Fn zip_set_archive_flag "zip_t *archive" "zip_flags_t flag" "int value" +.Sh DESCRIPTION +The +.Fn zip_set_archive_flag +function sets the flag +.Ar flag +for the archive +.Ar archive +to the value +.Ar value . +.Pp +Supported flags are: +.Bl -tag -width XZIPXAFLXRDONLYXXX +.It Dv ZIP_AFL_CREATE_OR_KEEP_FILE_FOR_EMPTY_ARCHIVE +If this flag is cleared, the archive file will be removed if the archive is empty. +If it is set, an empty archive will be created, which is not recommended by the zip specification. +.It Dv ZIP_AFL_RDONLY +If this flag is set, no modification to the archive are allowed. +This flag can only be cleared if it was manually set with +.Nm , +not if the archive was opened read-only. +.It Dv ZIP_AFL_WANT_TORRENTZIP +If this flag is set, the archive will be written in torrentzip format. +.El +.Sh RETURN VALUES +Upon successful completion 0 is returned, and \-1 if an error +occurred. +.Sh SEE ALSO +.Xr libzip 3 , +.Xr zip_get_archive_flag 3 +.Sh HISTORY +.Fn zip_set_archive_flag +was added in libzip 0.9. +In libzip 0.11 the type of +.Ar flag +was changed from +.Vt int +to +.Vt zip_flags_t . +.Dv ZIP_AFL_CREATE_OR_KEEP_FILE_FOR_EMPTY_ARCHIVE +and +.Dv ZIP_AFL_WANT_TORRENTZIP +were added in libzip 1.10.0. +.Sh AUTHORS +.An -nosplit +.An Dieter Baron Aq Mt dillo@nih.at +and +.An Thomas Klausner Aq Mt wiz@gatalith.at diff --git a/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_set_default_password.3 b/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_set_default_password.3 new file mode 100644 index 0000000..f2574ca --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_set_default_password.3 @@ -0,0 +1,90 @@ +.\" zip_set_default_password.mdoc -- set default password for zip +.\" Copyright (C) 2011-2021 Dieter Baron and Thomas Klausner +.\" +.\" This file is part of libzip, a library to manipulate ZIP files. +.\" The authors can be contacted at +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in +.\" the documentation and/or other materials provided with the +.\" distribution. +.\" 3. The names of the authors may not be used to endorse or promote +.\" products derived from this software without specific prior +.\" written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS +.\" OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +.\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +.\" DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE +.\" GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +.\" IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +.\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN +.\" IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.\" +.Dd September 15, 2020 +.Dt ZIP_SET_DEFAULT_PASSWORD 3 +.Os +.Sh NAME +.Nm zip_set_default_password +.Nd set default password for encrypted files in zip +.Sh LIBRARY +libzip (-lzip) +.Sh SYNOPSIS +.In zip.h +.Ft int +.Fn zip_set_default_password "zip_t *archive" "const char *password" +.Sh DESCRIPTION +The +.Fn zip_set_default_password +function sets the default password used when accessing encrypted files. +If +.Ar password +is +.Dv NULL +or the empty string, the default password is unset. +.Pp +If you prefer a different password for single files, use +.Xr zip_fopen_encrypted 3 +instead of +.Xr zip_fopen 3 . +Usually, however, the same password is used for every file in an +zip archive. +.Pp +The password is not verified when calling this function. +See the +.Sx CAVEATS +section in +.Xr zip_fopen_encrypted 3 +for more details about password handling. +.Sh RETURN VALUES +Upon successful completion 0 is returned. +Otherwise, \-1 is returned and the error information in +.Ar archive +is set to indicate the error. +.Sh ERRORS +.Fn zip_set_default_password +fails if: +.Bl -tag -width Er +.It Bq Er ZIP_ER_MEMORY +Required memory could not be allocated. +.El +.Sh SEE ALSO +.Xr libzip 3 , +.Xr zip_fopen 3 , +.Xr zip_fopen_encrypted 3 +.Sh HISTORY +.Fn zip_set_default_password +was added in libzip 0.10. +.Sh AUTHORS +.An -nosplit +.An Dieter Baron Aq Mt dillo@nih.at +and +.An Thomas Klausner Aq Mt wiz@gatalith.at diff --git a/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_set_file_comment.3 b/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_set_file_comment.3 new file mode 100644 index 0000000..242597d --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_set_file_comment.3 @@ -0,0 +1,79 @@ +.\" zip_set_file_comment.mdoc -- set comment for file in zip +.\" Copyright (C) 2006-2017 Dieter Baron and Thomas Klausner +.\" +.\" This file is part of libzip, a library to manipulate ZIP files. +.\" The authors can be contacted at +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in +.\" the documentation and/or other materials provided with the +.\" distribution. +.\" 3. The names of the authors may not be used to endorse or promote +.\" products derived from this software without specific prior +.\" written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS +.\" OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +.\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +.\" DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE +.\" GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +.\" IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +.\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN +.\" IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.\" +.Dd December 18, 2017 +.Dt ZIP_SET_FILE_COMMENT 3 +.Os +.Sh NAME +.Nm zip_set_file_comment +.Nd set comment for file in zip (obsolete interface) +.Sh LIBRARY +libzip (-lzip) +.Sh SYNOPSIS +.In zip.h +.Ft int +.Fn zip_set_file_comment "zip_t *archive" "zip_uint64_t index" "const char *comment" "int len" +.Sh DESCRIPTION +The +.Fn zip_set_file_comment +function is the obsolete version of +.Xr zip_file_set_comment 3 . +The only differences are the type of the +.Ar len +argument and the additional +.Ar flags +argument. +.Fn zip_set_file_comment +is the same as calling +.Xr zip_file_set_comment 3 +with an empty +.Ar flags +argument. +.Sh SEE ALSO +.Xr libzip 3 , +.Xr zip_file_set_comment 3 +.Sh HISTORY +.Fn zip_set_file_comment +was added in libzip 0.7. +In libzip 0.10 the type of +.Ar index +was changed from +.Vt int +to +.Vt zip_uint64_t . +It was deprecated in libzip 0.11, use +.Fn zip_file_set_comment +instead. +.Sh AUTHORS +.An -nosplit +.An Dieter Baron Aq Mt dillo@nih.at +and +.An Thomas Klausner Aq Mt wiz@gatalith.at diff --git a/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_set_file_compression.3 b/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_set_file_compression.3 new file mode 100644 index 0000000..b58dcb6 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_set_file_compression.3 @@ -0,0 +1,146 @@ +.\" zip_set_file_compression.mdoc -- set compression method and its flags +.\" Copyright (C) 2012-2021 Dieter Baron and Thomas Klausner +.\" +.\" This file is part of libzip, a library to manipulate ZIP files. +.\" The authors can be contacted at +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in +.\" the documentation and/or other materials provided with the +.\" distribution. +.\" 3. The names of the authors may not be used to endorse or promote +.\" products derived from this software without specific prior +.\" written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS +.\" OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +.\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +.\" DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE +.\" GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +.\" IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +.\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN +.\" IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.\" +.Dd February 2, 2023 +.Dt ZIP_SET_FILE_COMPRESSION 3 +.Os +.Sh NAME +.Nm zip_set_file_compression +.Nd set compression method for file in zip +.Sh LIBRARY +libzip (-lzip) +.Sh SYNOPSIS +.In zip.h +.Ft int +.Fn zip_set_file_compression "zip_t *archive" "zip_uint64_t index" "zip_int32_t comp" "zip_uint32_t comp_flags" +.Sh DESCRIPTION +The +.Fn zip_set_file_compression +function sets the compression method for the file at position +.Ar index +in the zip archive to +.Ar comp +with the compression method specific +.Ar comp_flags . +The +.Ar comp +is the same as returned by +.Xr zip_stat 3 . +For the +.Ar comp +argument, currently only the following values are supported: +.Bl -tag -width ZIP_CM_DEFLATE_XX +.It Dv ZIP_CM_DEFAULT +default compression; currently the same as +.Dv ZIP_CM_DEFLATE , +but +.Ar flags +are ignored. +.It Dv ZIP_CM_STORE +Store the file uncompressed. +.It Dv ZIP_CM_BZIP2 +Compress the file using the +.Xr bzip2 1 +algorithm. +.It Dv ZIP_CM_DEFLATE +Deflate the file with the +.Xr zlib 3 +algorithm and default options. +.It Dv ZIP_CM_XZ +Use the +.Xr xz 1 +algorithm for compression +.It Dv ZIP_CM_ZSTD +Use the +.Xr zstd 1 +algorithm for compression +.El +.Pp +.Em NOTE : +Only the deflate and store methods can be assumed to be universally +supported. +.Pp +The +.Ar comp_flags +argument defines the compression level. +This value is dependent on the compression algorithm. +In general, lower numbers mean faster de/compression and higher +numbers mean slower de/compression. +For +.Dv ZIP_CM_BZIP , +.Dv ZIP_CM_DEFLATE , +and +.Dv ZIP_CM_XZ +1 is the fastest compression and 9 the best, 0 chooses the default. +For +.Dv ZIP_CM_ZSTD +possible values are +.Xr ZSTD_minCLevel 3 +to +.Xr ZSTD_maxCLevel 3 ; negative values must be cast to +.Ft zip_uint32_t . +.Pp +Further compression method specific flags might be added over time. +.Pp +The current compression method for a file in a zip archive can be +determined using +.Xr zip_stat 3 . +.Sh RETURN VALUES +Upon successful completion 0 is returned. +Otherwise, \-1 is returned and the error information in +.Ar archive +is set to indicate the error. +.Sh ERRORS +.Fn zip_set_file_compression +fails if: +.Bl -tag -width Er +.It Bq Er ZIP_ER_COMPNOTSUPP +Unsupported compression method requested. +.It Bq Er ZIP_ER_INVAL +.Ar index +is not a valid file index in +.Ar archive , +or the argument combination is invalid. +.It Bq Er ZIP_ER_RDONLY +Read-only zip file, no changes allowed. +.El +.Sh SEE ALSO +.Xr libzip 3 , +.Xr zip_compression_method_supported 3 , +.Xr zip_stat 3 +.Sh HISTORY +.Fn zip_set_file_compression +was added in libzip 0.11. +.Sh AUTHORS +.An -nosplit +.An Dieter Baron Aq Mt dillo@nih.at +and +.An Thomas Klausner Aq Mt wiz@gatalith.at diff --git a/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_source.3 b/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_source.3 new file mode 100644 index 0000000..fd748fd --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_source.3 @@ -0,0 +1,90 @@ +.\" zip_source.mdoc -- description of zip data source +.\" Copyright (C) 2014-2021 Dieter Baron and Thomas Klausner +.\" +.\" This file is part of libzip, a library to manipulate ZIP archives. +.\" The authors can be contacted at +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in +.\" the documentation and/or other materials provided with the +.\" distribution. +.\" 3. The names of the authors may not be used to endorse or promote +.\" products derived from this software without specific prior +.\" written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS +.\" OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +.\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +.\" DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE +.\" GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +.\" IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +.\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN +.\" IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.\" +.Dd December 18, 2017 +.Dt ZIP_SOURCE 3 +.Os +.Sh NAME +.Nm zip_source +.Nd zip data source structure +.Sh LIBRARY +libzip (-lzip) +.Sh SYNOPSIS +.In zip.h +.Vt zip_source_t *zs ; +.Sh DESCRIPTION +A +.Vt struct zip_source +is a data source used by +.Xr libzip 3 +for adding or replacing file contents for a file in a zip archive. +If the source supports seeking, it can also be used to open zip archives from. +It is created by calling one of +.Xr zip_source_buffer 3 , +.Xr zip_source_buffer_create 3 , +.Xr zip_source_file 3 , +.Xr zip_source_file_create 3 , +.Xr zip_source_filep 3 , +.Xr zip_source_filep_create 3 , +.Xr zip_source_function 3 , +.Xr zip_source_function_create 3 , +.Xr zip_source_window 3 , +or +.Xr zip_source_zip 3 . +.Vt zip_source_t +is reference counted, and created with a reference count of 1. +.Xr zip_open_from_source 3 , +.Xr zip_file_add 3 , +and +.Xr zip_file_replace 3 +will decrement the reference count of the +.Vt zip_source_t +when they are done using it, so +.Xr zip_source_free 3 +only needs to be called when these functions return an error. +Use +.Xr zip_source_keep 3 +to increase the reference count, for example if you need the source after +.Xr zip_close 3 . +.Sh SEE ALSO +.Xr libzip 3 , +.Xr zip_source_buffer 3 , +.Xr zip_source_file 3 , +.Xr zip_source_filep 3 , +.Xr zip_source_free 3 , +.Xr zip_source_function 3 , +.Xr zip_source_window 3 , +.Xr zip_source_zip 3 +.Sh AUTHORS +.An -nosplit +.An Dieter Baron Aq Mt dillo@nih.at +and +.An Thomas Klausner Aq Mt wiz@gatalith.at diff --git a/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_source_begin_write.3 b/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_source_begin_write.3 new file mode 100644 index 0000000..8bcd555 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_source_begin_write.3 @@ -0,0 +1,89 @@ +.\" zip_source_begin_write.mdoc -- prepare zip source for writing +.\" Copyright (C) 2014-2017 Dieter Baron and Thomas Klausner +.\" +.\" This file is part of libzip, a library to manipulate ZIP archives. +.\" The authors can be contacted at +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in +.\" the documentation and/or other materials provided with the +.\" distribution. +.\" 3. The names of the authors may not be used to endorse or promote +.\" products derived from this software without specific prior +.\" written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS +.\" OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +.\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +.\" DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE +.\" GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +.\" IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +.\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN +.\" IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.\" +.Dd December 18, 2017 +.Dt ZIP_SOURCE_BEGIN_WRITE 3 +.Os +.Sh NAME +.Nm zip_source_begin_write , +.Nm zip_source_begin_write_cloning +.Nd prepare zip source for writing +.Sh LIBRARY +libzip (-lzip) +.Sh SYNOPSIS +.In zip.h +.Ft int +.Fn zip_source_begin_write "zip_source_t *source" +.Ft int +.Fn zip_source_begin_write_cloning "zip_source_t *source" "zip_uint64_t offset" +.Sh DESCRIPTION +The functions +.Fn zip_source_begin_write +and +.Fn zip_source_begin_write_cloning +prepare +.Fa source +for writing. +Usually this involves creating temporary files or allocating buffers. +.Pp +.Fn zip_source_begin_write_cloning +preserves the first +.Ar offset +bytes of the original file. +This is done efficiently, and writes to +.Ar source +won't overwrite the original data until +.Fn zip_commit_write +is called. +.Sh RETURN VALUES +Upon successful completion 0 is returned. +Otherwise, \-1 is returned and the error information in +.Ar source +is set to indicate the error. +.Sh SEE ALSO +.Xr libzip 3 , +.Xr zip_source 3 , +.Xr zip_source_commit_write 3 , +.Xr zip_source_rollback_write 3 , +.Xr zip_source_seek_write 3 , +.Xr zip_source_tell_write 3 , +.Xr zip_source_write 3 +.Sh HISTORY +.Fn zip_source_begin_write +was added in libzip 1.0. +.Pp +.Fn zip_source_begin_write_cloning +was added in libzip 1.4.0. +.Sh AUTHORS +.An -nosplit +.An Dieter Baron Aq Mt dillo@nih.at +and +.An Thomas Klausner Aq Mt wiz@gatalith.at diff --git a/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_source_begin_write_cloning.3 b/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_source_begin_write_cloning.3 new file mode 100644 index 0000000..8bcd555 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_source_begin_write_cloning.3 @@ -0,0 +1,89 @@ +.\" zip_source_begin_write.mdoc -- prepare zip source for writing +.\" Copyright (C) 2014-2017 Dieter Baron and Thomas Klausner +.\" +.\" This file is part of libzip, a library to manipulate ZIP archives. +.\" The authors can be contacted at +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in +.\" the documentation and/or other materials provided with the +.\" distribution. +.\" 3. The names of the authors may not be used to endorse or promote +.\" products derived from this software without specific prior +.\" written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS +.\" OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +.\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +.\" DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE +.\" GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +.\" IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +.\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN +.\" IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.\" +.Dd December 18, 2017 +.Dt ZIP_SOURCE_BEGIN_WRITE 3 +.Os +.Sh NAME +.Nm zip_source_begin_write , +.Nm zip_source_begin_write_cloning +.Nd prepare zip source for writing +.Sh LIBRARY +libzip (-lzip) +.Sh SYNOPSIS +.In zip.h +.Ft int +.Fn zip_source_begin_write "zip_source_t *source" +.Ft int +.Fn zip_source_begin_write_cloning "zip_source_t *source" "zip_uint64_t offset" +.Sh DESCRIPTION +The functions +.Fn zip_source_begin_write +and +.Fn zip_source_begin_write_cloning +prepare +.Fa source +for writing. +Usually this involves creating temporary files or allocating buffers. +.Pp +.Fn zip_source_begin_write_cloning +preserves the first +.Ar offset +bytes of the original file. +This is done efficiently, and writes to +.Ar source +won't overwrite the original data until +.Fn zip_commit_write +is called. +.Sh RETURN VALUES +Upon successful completion 0 is returned. +Otherwise, \-1 is returned and the error information in +.Ar source +is set to indicate the error. +.Sh SEE ALSO +.Xr libzip 3 , +.Xr zip_source 3 , +.Xr zip_source_commit_write 3 , +.Xr zip_source_rollback_write 3 , +.Xr zip_source_seek_write 3 , +.Xr zip_source_tell_write 3 , +.Xr zip_source_write 3 +.Sh HISTORY +.Fn zip_source_begin_write +was added in libzip 1.0. +.Pp +.Fn zip_source_begin_write_cloning +was added in libzip 1.4.0. +.Sh AUTHORS +.An -nosplit +.An Dieter Baron Aq Mt dillo@nih.at +and +.An Thomas Klausner Aq Mt wiz@gatalith.at diff --git a/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_source_buffer.3 b/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_source_buffer.3 new file mode 100644 index 0000000..148ceed --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_source_buffer.3 @@ -0,0 +1,102 @@ +.\" zip_source_buffer.mdoc -- create zip data source from buffer +.\" Copyright (C) 2004-2021 Dieter Baron and Thomas Klausner +.\" +.\" This file is part of libzip, a library to manipulate ZIP archives. +.\" The authors can be contacted at +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in +.\" the documentation and/or other materials provided with the +.\" distribution. +.\" 3. The names of the authors may not be used to endorse or promote +.\" products derived from this software without specific prior +.\" written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS +.\" OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +.\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +.\" DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE +.\" GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +.\" IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +.\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN +.\" IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.\" +.Dd December 18, 2017 +.Dt ZIP_SOURCE_BUFFER 3 +.Os +.Sh NAME +.Nm zip_source_buffer , +.Nm zip_source_buffer_create +.Nd create zip data source from buffer +.Sh LIBRARY +libzip (-lzip) +.Sh SYNOPSIS +.In zip.h +.Ft zip_source_t * +.Fn zip_source_buffer "zip_t *archive" "const void *data" "zip_uint64_t len" "int freep" +.Ft zip_source_t * +.Fn zip_source_buffer_create "const void *data" "zip_uint64_t len" "int freep" "zip_error_t *error" +.Sh DESCRIPTION +The functions +.Fn zip_source_buffer +and +.Fn zip_source_buffer_create +create a zip source from the buffer +.Ar data +of size +.Ar len . +If +.Ar freep +is non-zero, the buffer will be freed when it is no longer needed. +.Ar data +must remain valid for the lifetime of the created source. +.Pp +The source can be used to open a zip archive from. +.Sh RETURN VALUES +Upon successful completion, the created source is returned. +Otherwise, +.Dv NULL +is returned and the error code in +.Ar archive +or +.Ar error +is set to indicate the error. +.Sh ERRORS +.Fn zip_source_buffer +and +.Fn zip_source_buffer_create +fail if: +.Bl -tag -width Er +.It Bq Er ZIP_ER_INVAL +.Ar len +is greater than zero and +.Ar data +is +.Dv NULL . +.It Bq Er ZIP_ER_MEMORY +Required memory could not be allocated. +.El +.Sh SEE ALSO +.Xr libzip 3 , +.Xr zip_file_add 3 , +.Xr zip_file_replace 3 , +.Xr zip_open_from_source 3 , +.Xr zip_source 3 +.Sh HISTORY +.Fn zip_source_buffer +and +.Fn zip_source_buffer_create +were added in libzip 1.0. +.Sh AUTHORS +.An -nosplit +.An Dieter Baron Aq Mt dillo@nih.at +and +.An Thomas Klausner Aq Mt wiz@gatalith.at diff --git a/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_source_buffer_create.3 b/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_source_buffer_create.3 new file mode 100644 index 0000000..148ceed --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_source_buffer_create.3 @@ -0,0 +1,102 @@ +.\" zip_source_buffer.mdoc -- create zip data source from buffer +.\" Copyright (C) 2004-2021 Dieter Baron and Thomas Klausner +.\" +.\" This file is part of libzip, a library to manipulate ZIP archives. +.\" The authors can be contacted at +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in +.\" the documentation and/or other materials provided with the +.\" distribution. +.\" 3. The names of the authors may not be used to endorse or promote +.\" products derived from this software without specific prior +.\" written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS +.\" OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +.\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +.\" DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE +.\" GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +.\" IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +.\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN +.\" IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.\" +.Dd December 18, 2017 +.Dt ZIP_SOURCE_BUFFER 3 +.Os +.Sh NAME +.Nm zip_source_buffer , +.Nm zip_source_buffer_create +.Nd create zip data source from buffer +.Sh LIBRARY +libzip (-lzip) +.Sh SYNOPSIS +.In zip.h +.Ft zip_source_t * +.Fn zip_source_buffer "zip_t *archive" "const void *data" "zip_uint64_t len" "int freep" +.Ft zip_source_t * +.Fn zip_source_buffer_create "const void *data" "zip_uint64_t len" "int freep" "zip_error_t *error" +.Sh DESCRIPTION +The functions +.Fn zip_source_buffer +and +.Fn zip_source_buffer_create +create a zip source from the buffer +.Ar data +of size +.Ar len . +If +.Ar freep +is non-zero, the buffer will be freed when it is no longer needed. +.Ar data +must remain valid for the lifetime of the created source. +.Pp +The source can be used to open a zip archive from. +.Sh RETURN VALUES +Upon successful completion, the created source is returned. +Otherwise, +.Dv NULL +is returned and the error code in +.Ar archive +or +.Ar error +is set to indicate the error. +.Sh ERRORS +.Fn zip_source_buffer +and +.Fn zip_source_buffer_create +fail if: +.Bl -tag -width Er +.It Bq Er ZIP_ER_INVAL +.Ar len +is greater than zero and +.Ar data +is +.Dv NULL . +.It Bq Er ZIP_ER_MEMORY +Required memory could not be allocated. +.El +.Sh SEE ALSO +.Xr libzip 3 , +.Xr zip_file_add 3 , +.Xr zip_file_replace 3 , +.Xr zip_open_from_source 3 , +.Xr zip_source 3 +.Sh HISTORY +.Fn zip_source_buffer +and +.Fn zip_source_buffer_create +were added in libzip 1.0. +.Sh AUTHORS +.An -nosplit +.An Dieter Baron Aq Mt dillo@nih.at +and +.An Thomas Klausner Aq Mt wiz@gatalith.at diff --git a/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_source_buffer_fragment.3 b/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_source_buffer_fragment.3 new file mode 100644 index 0000000..c452ef7 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_source_buffer_fragment.3 @@ -0,0 +1,112 @@ +.\" zip_source_buffer_fragment.mdoc -- create zip data source from multiple buffers +.\" Copyright (C) 2004-2021 Dieter Baron and Thomas Klausner +.\" +.\" This file is part of libzip, a library to manipulate ZIP archives. +.\" The authors can be contacted at +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in +.\" the documentation and/or other materials provided with the +.\" distribution. +.\" 3. The names of the authors may not be used to endorse or promote +.\" products derived from this software without specific prior +.\" written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS +.\" OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +.\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +.\" DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE +.\" GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +.\" IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +.\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN +.\" IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.\" +.Dd December 18, 2017 +.Dt ZIP_SOURCE_BUFFER_FRAGMENT 3 +.Os +.Sh NAME +.Nm zip_source_buffer_fragment , +.Nm zip_source_buffer_fragment_create +.Nd create zip data source from multiple buffer +.Sh LIBRARY +libzip (-lzip) +.Sh SYNOPSIS +.In zip.h +.Ft zip_source_t * +.Fn zip_source_buffer_fragment "zip_t *archive" "zip_buffer_fragment_t *fragments" "zip_uint64_t nfragments" "int freep" +.Ft zip_source_t * +.Fn zip_source_buffer_fragment_create "zip_buffer_fragment_t *fragments" "zip_uint64_t nfragments" "int freep" "zip_error_t *error" +.Sh DESCRIPTION +The functions +.Fn zip_source_buffer_fragment +and +.Fn zip_source_buffer_fragment_create +create a zip source from the data in +.Ar fragments . +.Ar nfragments +specifies the number of fragments. +If +.Ar freep +is non-zero, the data will be freed when it is no longer needed. +.Bd -literal +struct zip_stat { + zip_uint8_t *data; /* pointer to the actual data */ + zip_uint64_t length; /* length of this fragment */ +}; +.Ed +.Pp +The data +.Ar fragments +point to must remain valid for the lifetime of the created source. +.Ar fragments +itself can be discarded once the source is created. +.Pp +The source can be used to open a zip archive from. +.Sh RETURN VALUES +Upon successful completion, the created source is returned. +Otherwise, +.Dv NULL +is returned and the error code in +.Ar archive +or +.Ar error +is set to indicate the error. +.Sh ERRORS +.Fn zip_source_buffer +and +.Fn zip_source_buffer_create +fail if: +.Bl -tag -width Er +.It Bq Er ZIP_ER_INVAL +.Ar nfragments +is greater than zero and +.Ar fragments +is +.Dv NULL . +.It Bq Er ZIP_ER_MEMORY +Required memory could not be allocated. +.El +.Sh SEE ALSO +.Xr libzip 3 , +.Xr zip_file_add 3 , +.Xr zip_file_replace 3 , +.Xr zip_open_from_source 3 , +.Xr zip_source 3 +.Sh HISTORY +.Fn zip_source_buffer_fragment +and +.Fn zip_source_buffer_fragment_create +were added in libzip 1.4.0. +.Sh AUTHORS +.An -nosplit +.An Dieter Baron Aq Mt dillo@nih.at +and +.An Thomas Klausner Aq Mt wiz@gatalith.at diff --git a/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_source_buffer_fragment_create.3 b/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_source_buffer_fragment_create.3 new file mode 100644 index 0000000..c452ef7 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_source_buffer_fragment_create.3 @@ -0,0 +1,112 @@ +.\" zip_source_buffer_fragment.mdoc -- create zip data source from multiple buffers +.\" Copyright (C) 2004-2021 Dieter Baron and Thomas Klausner +.\" +.\" This file is part of libzip, a library to manipulate ZIP archives. +.\" The authors can be contacted at +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in +.\" the documentation and/or other materials provided with the +.\" distribution. +.\" 3. The names of the authors may not be used to endorse or promote +.\" products derived from this software without specific prior +.\" written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS +.\" OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +.\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +.\" DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE +.\" GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +.\" IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +.\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN +.\" IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.\" +.Dd December 18, 2017 +.Dt ZIP_SOURCE_BUFFER_FRAGMENT 3 +.Os +.Sh NAME +.Nm zip_source_buffer_fragment , +.Nm zip_source_buffer_fragment_create +.Nd create zip data source from multiple buffer +.Sh LIBRARY +libzip (-lzip) +.Sh SYNOPSIS +.In zip.h +.Ft zip_source_t * +.Fn zip_source_buffer_fragment "zip_t *archive" "zip_buffer_fragment_t *fragments" "zip_uint64_t nfragments" "int freep" +.Ft zip_source_t * +.Fn zip_source_buffer_fragment_create "zip_buffer_fragment_t *fragments" "zip_uint64_t nfragments" "int freep" "zip_error_t *error" +.Sh DESCRIPTION +The functions +.Fn zip_source_buffer_fragment +and +.Fn zip_source_buffer_fragment_create +create a zip source from the data in +.Ar fragments . +.Ar nfragments +specifies the number of fragments. +If +.Ar freep +is non-zero, the data will be freed when it is no longer needed. +.Bd -literal +struct zip_stat { + zip_uint8_t *data; /* pointer to the actual data */ + zip_uint64_t length; /* length of this fragment */ +}; +.Ed +.Pp +The data +.Ar fragments +point to must remain valid for the lifetime of the created source. +.Ar fragments +itself can be discarded once the source is created. +.Pp +The source can be used to open a zip archive from. +.Sh RETURN VALUES +Upon successful completion, the created source is returned. +Otherwise, +.Dv NULL +is returned and the error code in +.Ar archive +or +.Ar error +is set to indicate the error. +.Sh ERRORS +.Fn zip_source_buffer +and +.Fn zip_source_buffer_create +fail if: +.Bl -tag -width Er +.It Bq Er ZIP_ER_INVAL +.Ar nfragments +is greater than zero and +.Ar fragments +is +.Dv NULL . +.It Bq Er ZIP_ER_MEMORY +Required memory could not be allocated. +.El +.Sh SEE ALSO +.Xr libzip 3 , +.Xr zip_file_add 3 , +.Xr zip_file_replace 3 , +.Xr zip_open_from_source 3 , +.Xr zip_source 3 +.Sh HISTORY +.Fn zip_source_buffer_fragment +and +.Fn zip_source_buffer_fragment_create +were added in libzip 1.4.0. +.Sh AUTHORS +.An -nosplit +.An Dieter Baron Aq Mt dillo@nih.at +and +.An Thomas Klausner Aq Mt wiz@gatalith.at diff --git a/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_source_close.3 b/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_source_close.3 new file mode 100644 index 0000000..05c7ed1 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_source_close.3 @@ -0,0 +1,67 @@ +.\" zip_source_close.mdoc -- close zip source (open for reading) +.\" Copyright (C) 2014-2021 Dieter Baron and Thomas Klausner +.\" +.\" This file is part of libzip, a library to manipulate ZIP archives. +.\" The authors can be contacted at +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in +.\" the documentation and/or other materials provided with the +.\" distribution. +.\" 3. The names of the authors may not be used to endorse or promote +.\" products derived from this software without specific prior +.\" written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS +.\" OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +.\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +.\" DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE +.\" GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +.\" IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +.\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN +.\" IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.\" +.Dd December 18, 2017 +.Dt ZIP_SOURCE_CLOSE 3 +.Os +.Sh NAME +.Nm zip_source_close +.Nd close zip_source (which was open for reading) +.Sh LIBRARY +libzip (-lzip) +.Sh SYNOPSIS +.In zip.h +.Ft int +.Fn zip_source_close "zip_source_t *source" +.Sh DESCRIPTION +The function +.Fn zip_source_close +closes +.Fa source , +indicating that no more data will be read. +.Sh RETURN VALUES +Upon successful completion 0 is returned. +Otherwise, \-1 is returned and the error information in +.Ar source +is set to indicate the error. +.Sh SEE ALSO +.Xr libzip 3 , +.Xr zip_source 3 , +.Xr zip_source_free 3 , +.Xr zip_source_open 3 +.Sh HISTORY +.Fn zip_source_close +was added in libzip 1.0. +.Sh AUTHORS +.An -nosplit +.An Dieter Baron Aq Mt dillo@nih.at +and +.An Thomas Klausner Aq Mt wiz@gatalith.at diff --git a/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_source_commit_write.3 b/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_source_commit_write.3 new file mode 100644 index 0000000..9deae6b --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_source_commit_write.3 @@ -0,0 +1,70 @@ +.\" zip_source_commit_write.mdoc -- finalize changes to zip source +.\" Copyright (C) 2014-2017 Dieter Baron and Thomas Klausner +.\" +.\" This file is part of libzip, a library to manipulate ZIP archives. +.\" The authors can be contacted at +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in +.\" the documentation and/or other materials provided with the +.\" distribution. +.\" 3. The names of the authors may not be used to endorse or promote +.\" products derived from this software without specific prior +.\" written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS +.\" OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +.\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +.\" DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE +.\" GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +.\" IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +.\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN +.\" IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.\" +.Dd December 18, 2017 +.Dt ZIP_SOURCE_COMMIT_WRITE 3 +.Os +.Sh NAME +.Nm zip_source_commit_write +.Nd finalize changes to zip source +.Sh LIBRARY +libzip (-lzip) +.Sh SYNOPSIS +.In zip.h +.Ft int +.Fn zip_source_commit_write "zip_source_t *source" +.Sh DESCRIPTION +The function +.Fn zip_source_commit_write +finishes writing data to +.Fa source +and replaces the original with the newly written data. +.Sh RETURN VALUES +Upon successful completion 0 is returned. +Otherwise, \-1 is returned and the error information in +.Ar source +is set to indicate the error. +.Sh SEE ALSO +.Xr libzip 3 , +.Xr zip_source 3 , +.Xr zip_source_begin_write 3 , +.Xr zip_source_rollback_write 3 , +.Xr zip_source_seek_write 3 , +.Xr zip_source_tell_write 3 , +.Xr zip_source_write 3 +.Sh HISTORY +.Fn zip_source_commit_write +was added in libzip 1.0. +.Sh AUTHORS +.An -nosplit +.An Dieter Baron Aq Mt dillo@nih.at +and +.An Thomas Klausner Aq Mt wiz@gatalith.at diff --git a/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_source_error.3 b/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_source_error.3 new file mode 100644 index 0000000..291a144 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_source_error.3 @@ -0,0 +1,60 @@ +.\" zip_source_error.mdoc -- get zip_error for data source +.\" Copyright (C) 2014-2017 Dieter Baron and Thomas Klausner +.\" +.\" This file is part of libzip, a library to manipulate ZIP archives. +.\" The authors can be contacted at +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in +.\" the documentation and/or other materials provided with the +.\" distribution. +.\" 3. The names of the authors may not be used to endorse or promote +.\" products derived from this software without specific prior +.\" written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS +.\" OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +.\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +.\" DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE +.\" GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +.\" IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +.\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN +.\" IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.\" +.Dd December 18, 2017 +.Dt ZIP_SOURCE_ERROR 3 +.Os +.Sh NAME +.Nm zip_source_error +.Nd get zip error for data source +.Sh LIBRARY +libzip (-lzip) +.Sh SYNOPSIS +.In zip.h +.Ft zip_error_t * +.Fn zip_source_error "zip_source_t *source" +.Sh DESCRIPTION +The +.Fn zip_source_error +function returns the zip error for the data source +.Ar source . +.Sh SEE ALSO +.Xr libzip 3 , +.Xr zip_error_code_system 3 , +.Xr zip_error_code_zip 3 +.Sh HISTORY +.Fn zip_source_error +was added in libzip 1.0. +.Sh AUTHORS +.An -nosplit +.An Dieter Baron Aq Mt dillo@nih.at +and +.An Thomas Klausner Aq Mt wiz@gatalith.at diff --git a/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_source_file.3 b/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_source_file.3 new file mode 100644 index 0000000..15b7c00 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_source_file.3 @@ -0,0 +1,147 @@ +.\" zip_source_file.mdoc -- create data source from a file +.\" Copyright (C) 2004-2021 Dieter Baron and Thomas Klausner +.\" +.\" This file is part of libzip, a library to manipulate ZIP archives. +.\" The authors can be contacted at +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in +.\" the documentation and/or other materials provided with the +.\" distribution. +.\" 3. The names of the authors may not be used to endorse or promote +.\" products derived from this software without specific prior +.\" written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS +.\" OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +.\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +.\" DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE +.\" GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +.\" IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +.\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN +.\" IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.\" +.Dd June 30, 2023 +.Dt ZIP_SOURCE_FILE 3 +.Os +.Sh NAME +.Nm zip_source_file , +.Nm zip_source_file_create +.Nd create data source from a file +.Sh LIBRARY +libzip (-lzip) +.Sh SYNOPSIS +.In zip.h +.Ft zip_source_t * +.Fn zip_source_file "zip_t *archive" "const char *fname" "zip_uint64_t start" "zip_int64_t len" +.Ft zip_source_t * +.Fn zip_source_file_create "const char *fname" "zip_uint64_t start" "zip_int64_t len" "zip_error_t *error" +.Sh DESCRIPTION +The functions +.Fn zip_source_file +and +.Fn zip_source_file_create +create a zip source from a file. +They open +.Ar fname +and read +.Ar len +bytes from offset +.Ar start +from it. +.Pp +When passing +.Dv ZIP_LENGTH_TO_END +(or \-1, which is deprecated) as +.Ar len , +.Nm +determines the file size when it is called and uses that as the +expected file size. +If the file size grows between creating and reading from the source, +the additional data is ignored. +If the file shrinks, +.Nm libzip +treats it as an error +.Dv ( ZIP_ER_DATA_LENGTH ) . +.Pp +When passing +.Dv ZIP_LENGTH_UNCHECKED +as +.Ar len , +.Nm +assumes the file's size is unknown. +Reading from the source returns as much data as is there at that time +(usually when calling +.Xr zip_close 3 ) . +.Pp +.Nm libzip +can do various optimizations if the size of a source is known when +it's created, so +.Dv ZIP_LENGTH_TO_END +is preferable. +If you deal with files that are likely to change while you are +processing them, you can use the less efficient +.Dv ZIP_LENGTH_UNCHECKED . +.Pp +If the file supports seek, the source can be used to open a zip archive from. +.Pp +The file is opened and read when the data from the source is used, usually by +.Fn zip_close +or +.Fn zip_open_from_source . +.Sh RETURN VALUES +Upon successful completion, the created source is returned. +Otherwise, +.Dv NULL +is returned and the error code in +.Ar archive +or +.Ar error +is set to indicate the error. +.Sh ERRORS +.Fn zip_source_file +and +.Fn zip_source_file_create +fail if: +.Bl -tag -width Er +.It Bq Er ZIP_ER_INVAL +.Ar fname , +.Ar start , +or +.Ar len +are invalid. +.It Bq Er ZIP_ER_MEMORY +Required memory could not be allocated. +.It Bq Er ZIP_ER_OPEN +Opening +.Ar fname +failed. +.El +.Sh SEE ALSO +.Xr libzip 3 , +.Xr zip_file_add 3 , +.Xr zip_file_replace 3 , +.Xr zip_source 3 +.Sh HISTORY +.Fn zip_source_file +and +.Fn zip_source_file_create +were added in libzip 1.0. +.Pp +.Dv ZIP_LENGTH_TO_END +and +.Dv ZIP_LENGTH_UNCHECKED +were added in libzip 1.10.1. +.Sh AUTHORS +.An -nosplit +.An Dieter Baron Aq Mt dillo@nih.at +and +.An Thomas Klausner Aq Mt wiz@gatalith.at diff --git a/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_source_file_create.3 b/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_source_file_create.3 new file mode 100644 index 0000000..15b7c00 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_source_file_create.3 @@ -0,0 +1,147 @@ +.\" zip_source_file.mdoc -- create data source from a file +.\" Copyright (C) 2004-2021 Dieter Baron and Thomas Klausner +.\" +.\" This file is part of libzip, a library to manipulate ZIP archives. +.\" The authors can be contacted at +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in +.\" the documentation and/or other materials provided with the +.\" distribution. +.\" 3. The names of the authors may not be used to endorse or promote +.\" products derived from this software without specific prior +.\" written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS +.\" OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +.\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +.\" DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE +.\" GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +.\" IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +.\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN +.\" IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.\" +.Dd June 30, 2023 +.Dt ZIP_SOURCE_FILE 3 +.Os +.Sh NAME +.Nm zip_source_file , +.Nm zip_source_file_create +.Nd create data source from a file +.Sh LIBRARY +libzip (-lzip) +.Sh SYNOPSIS +.In zip.h +.Ft zip_source_t * +.Fn zip_source_file "zip_t *archive" "const char *fname" "zip_uint64_t start" "zip_int64_t len" +.Ft zip_source_t * +.Fn zip_source_file_create "const char *fname" "zip_uint64_t start" "zip_int64_t len" "zip_error_t *error" +.Sh DESCRIPTION +The functions +.Fn zip_source_file +and +.Fn zip_source_file_create +create a zip source from a file. +They open +.Ar fname +and read +.Ar len +bytes from offset +.Ar start +from it. +.Pp +When passing +.Dv ZIP_LENGTH_TO_END +(or \-1, which is deprecated) as +.Ar len , +.Nm +determines the file size when it is called and uses that as the +expected file size. +If the file size grows between creating and reading from the source, +the additional data is ignored. +If the file shrinks, +.Nm libzip +treats it as an error +.Dv ( ZIP_ER_DATA_LENGTH ) . +.Pp +When passing +.Dv ZIP_LENGTH_UNCHECKED +as +.Ar len , +.Nm +assumes the file's size is unknown. +Reading from the source returns as much data as is there at that time +(usually when calling +.Xr zip_close 3 ) . +.Pp +.Nm libzip +can do various optimizations if the size of a source is known when +it's created, so +.Dv ZIP_LENGTH_TO_END +is preferable. +If you deal with files that are likely to change while you are +processing them, you can use the less efficient +.Dv ZIP_LENGTH_UNCHECKED . +.Pp +If the file supports seek, the source can be used to open a zip archive from. +.Pp +The file is opened and read when the data from the source is used, usually by +.Fn zip_close +or +.Fn zip_open_from_source . +.Sh RETURN VALUES +Upon successful completion, the created source is returned. +Otherwise, +.Dv NULL +is returned and the error code in +.Ar archive +or +.Ar error +is set to indicate the error. +.Sh ERRORS +.Fn zip_source_file +and +.Fn zip_source_file_create +fail if: +.Bl -tag -width Er +.It Bq Er ZIP_ER_INVAL +.Ar fname , +.Ar start , +or +.Ar len +are invalid. +.It Bq Er ZIP_ER_MEMORY +Required memory could not be allocated. +.It Bq Er ZIP_ER_OPEN +Opening +.Ar fname +failed. +.El +.Sh SEE ALSO +.Xr libzip 3 , +.Xr zip_file_add 3 , +.Xr zip_file_replace 3 , +.Xr zip_source 3 +.Sh HISTORY +.Fn zip_source_file +and +.Fn zip_source_file_create +were added in libzip 1.0. +.Pp +.Dv ZIP_LENGTH_TO_END +and +.Dv ZIP_LENGTH_UNCHECKED +were added in libzip 1.10.1. +.Sh AUTHORS +.An -nosplit +.An Dieter Baron Aq Mt dillo@nih.at +and +.An Thomas Klausner Aq Mt wiz@gatalith.at diff --git a/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_source_filep.3 b/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_source_filep.3 new file mode 100644 index 0000000..341f2db --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_source_filep.3 @@ -0,0 +1,112 @@ +.\" zip_source_filep.mdoc -- create data source from a file stream +.\" Copyright (C) 2004-2021 Dieter Baron and Thomas Klausner +.\" +.\" This file is part of libzip, a library to manipulate ZIP archives. +.\" The authors can be contacted at +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in +.\" the documentation and/or other materials provided with the +.\" distribution. +.\" 3. The names of the authors may not be used to endorse or promote +.\" products derived from this software without specific prior +.\" written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS +.\" OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +.\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +.\" DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE +.\" GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +.\" IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +.\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN +.\" IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.\" +.Dd June 30, 2023 +.Dt ZIP_SOURCE_FILEP 3 +.Os +.Sh NAME +.Nm zip_source_filep , +.Nm zip_source_filep_create +.Nd create data source from FILE * +.Sh LIBRARY +libzip (-lzip) +.Sh SYNOPSIS +.In zip.h +.Ft zip_source_t * +.Fn zip_source_filep "zip_t *archive" "FILE *file" "zip_uint64_t start" "zip_int64_t len" +.Ft zip_source_t * +.Fn zip_source_filep_create "FILE *file" "zip_uint64_t start" "zip_int64_t len" "zip_error_t *error" +.Sh DESCRIPTION +The functions +.Fn zip_source_filep +and +.Fn zip_source_filep_create +create a zip source from a file stream. +They read +.Ar len +bytes from offset +.Ar start +from the open file stream +.Ar file . +For a description of the +.Ar len +argument, see +.Xr zip_source_file 3 . +.Pp +If the file stream supports seeking, the source can be used to open +a read-only zip archive from. +.Pp +The file stream is closed when the source is being freed, usually +by +.Xr zip_close 3 . +.Sh RETURN VALUES +Upon successful completion, the created source is returned. +Otherwise, +.Dv NULL +is returned and the error code in +.Ar archive +or +.Ar error +is set to indicate the error. +.Sh ERRORS +.Fn zip_source_filep +fails if: +.Bl -tag -width Er +.It Bq Er ZIP_ER_INVAL +.Ar file , +.Ar start , +or +.Ar len +are invalid. +.It Bq Er ZIP_ER_MEMORY +Required memory could not be allocated. +.El +.Sh SEE ALSO +.Xr libzip 3 , +.Xr zip_file_add 3 , +.Xr zip_file_replace 3 , +.Xr zip_source 3 , +.Xr zip_source_file 3 +.Sh HISTORY +.Fn zip_source_filep +and +.Fn zip_source_filep_create +were added in libzip 1.0. +.Pp +.Dv ZIP_LENGTH_TO_END +and +.Dv ZIP_LENGTH_UNCHECKED +were added in libzip 1.10.1. +.Sh AUTHORS +.An -nosplit +.An Dieter Baron Aq Mt dillo@nih.at +and +.An Thomas Klausner Aq Mt wiz@gatalith.at diff --git a/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_source_filep_create.3 b/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_source_filep_create.3 new file mode 100644 index 0000000..341f2db --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_source_filep_create.3 @@ -0,0 +1,112 @@ +.\" zip_source_filep.mdoc -- create data source from a file stream +.\" Copyright (C) 2004-2021 Dieter Baron and Thomas Klausner +.\" +.\" This file is part of libzip, a library to manipulate ZIP archives. +.\" The authors can be contacted at +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in +.\" the documentation and/or other materials provided with the +.\" distribution. +.\" 3. The names of the authors may not be used to endorse or promote +.\" products derived from this software without specific prior +.\" written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS +.\" OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +.\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +.\" DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE +.\" GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +.\" IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +.\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN +.\" IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.\" +.Dd June 30, 2023 +.Dt ZIP_SOURCE_FILEP 3 +.Os +.Sh NAME +.Nm zip_source_filep , +.Nm zip_source_filep_create +.Nd create data source from FILE * +.Sh LIBRARY +libzip (-lzip) +.Sh SYNOPSIS +.In zip.h +.Ft zip_source_t * +.Fn zip_source_filep "zip_t *archive" "FILE *file" "zip_uint64_t start" "zip_int64_t len" +.Ft zip_source_t * +.Fn zip_source_filep_create "FILE *file" "zip_uint64_t start" "zip_int64_t len" "zip_error_t *error" +.Sh DESCRIPTION +The functions +.Fn zip_source_filep +and +.Fn zip_source_filep_create +create a zip source from a file stream. +They read +.Ar len +bytes from offset +.Ar start +from the open file stream +.Ar file . +For a description of the +.Ar len +argument, see +.Xr zip_source_file 3 . +.Pp +If the file stream supports seeking, the source can be used to open +a read-only zip archive from. +.Pp +The file stream is closed when the source is being freed, usually +by +.Xr zip_close 3 . +.Sh RETURN VALUES +Upon successful completion, the created source is returned. +Otherwise, +.Dv NULL +is returned and the error code in +.Ar archive +or +.Ar error +is set to indicate the error. +.Sh ERRORS +.Fn zip_source_filep +fails if: +.Bl -tag -width Er +.It Bq Er ZIP_ER_INVAL +.Ar file , +.Ar start , +or +.Ar len +are invalid. +.It Bq Er ZIP_ER_MEMORY +Required memory could not be allocated. +.El +.Sh SEE ALSO +.Xr libzip 3 , +.Xr zip_file_add 3 , +.Xr zip_file_replace 3 , +.Xr zip_source 3 , +.Xr zip_source_file 3 +.Sh HISTORY +.Fn zip_source_filep +and +.Fn zip_source_filep_create +were added in libzip 1.0. +.Pp +.Dv ZIP_LENGTH_TO_END +and +.Dv ZIP_LENGTH_UNCHECKED +were added in libzip 1.10.1. +.Sh AUTHORS +.An -nosplit +.An Dieter Baron Aq Mt dillo@nih.at +and +.An Thomas Klausner Aq Mt wiz@gatalith.at diff --git a/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_source_free.3 b/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_source_free.3 new file mode 100644 index 0000000..3f17792 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_source_free.3 @@ -0,0 +1,76 @@ +.\" zip_source_free.mdoc -- free zip data source +.\" Copyright (C) 2004-2017 Dieter Baron and Thomas Klausner +.\" +.\" This file is part of libzip, a library to manipulate ZIP archives. +.\" The authors can be contacted at +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in +.\" the documentation and/or other materials provided with the +.\" distribution. +.\" 3. The names of the authors may not be used to endorse or promote +.\" products derived from this software without specific prior +.\" written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS +.\" OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +.\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +.\" DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE +.\" GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +.\" IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +.\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN +.\" IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.\" +.Dd December 18, 2017 +.Dt ZIP_SOURCE_FREE 3 +.Os +.Sh NAME +.Nm zip_source_free +.Nd free zip data source +.Sh LIBRARY +libzip (-lzip) +.Sh SYNOPSIS +.In zip.h +.Ft void +.Fn zip_source_free "zip_source_t *source" +.Sh DESCRIPTION +The function +.Fn zip_source_free +decrements the reference count of +.Ar source +and frees it if the reference count drops to 0. +If +.Ar source +is +.Dv NULL , +it does nothing. +.Pp +.Em NOTE : +This function should not be called on a +.Ar source +after it was used successfully in a +.Xr zip_open_from_source 3 , +.Xr zip_file_add 3 , +or +.Xr zip_file_replace 3 +call. +.Sh SEE ALSO +.Xr libzip 3 , +.Xr zip_source 3 , +.Xr zip_source_keep 3 +.Sh HISTORY +.Fn zip_source_free +was added in libzip 0.6. +.Sh AUTHORS +.An -nosplit +.An Dieter Baron Aq Mt dillo@nih.at +and +.An Thomas Klausner Aq Mt wiz@gatalith.at diff --git a/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_source_function.3 b/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_source_function.3 new file mode 100644 index 0000000..cfd595d --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_source_function.3 @@ -0,0 +1,415 @@ +.\" zip_source_function.mdoc -- create data source from function +.\" Copyright (C) 2004-2022 Dieter Baron and Thomas Klausner +.\" +.\" This file is part of libzip, a library to manipulate ZIP archives. +.\" The authors can be contacted at +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in +.\" the documentation and/or other materials provided with the +.\" distribution. +.\" 3. The names of the authors may not be used to endorse or promote +.\" products derived from this software without specific prior +.\" written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS +.\" OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +.\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +.\" DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE +.\" GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +.\" IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +.\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN +.\" IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.\" +.Dd January 5, 2023 +.Dt ZIP_SOURCE_FUNCTION 3 +.Os +.Sh NAME +.Nm zip_source_function , +.Nm zip_source_function_create +.Nd create data source from function +.Sh LIBRARY +libzip (-lzip) +.Sh SYNOPSIS +.In zip.h +.Ft zip_source_t * +.Fn zip_source_function "zip_t *archive" "zip_source_callback fn" "void *userdata" +.Ft zip_source_t * +.Fn zip_source_function_create "zip_source_callback fn" "void *userdata" "zip_error_t *error" +.Sh DESCRIPTION +The functions +.Fn zip_source_function +and +.Fn zip_source_function_create +create a zip source from the user-provided function +.Ar fn , +which must be of the following type: +.Pp +.Ft typedef zip_int64_t +.Fo \fR(*\fPzip_source_callback\fR)\fP +.Fa "void *userdata" "void *data" "zip_uint64_t len" "zip_source_cmd_t cmd" +.Fc +.Pp +.Ar archive +or +.Ar error +are used for reporting errors and can be +.Dv NULL . +.Pp +When called by the library, the first argument is the +.Ar userdata +argument supplied to the function. +The next two arguments are a buffer +.Ar data +of size +.Ar len +when data is passed in or expected to be returned, or else +.Dv NULL +and 0. +The last argument, +.Ar cmd , +specifies which action the function should perform. +.Pp +Depending on the uses, there are three useful sets of commands to be supported by a +.Fn zip_source_callback : +.Bl -tag -width seekable-read-sourceXX +.It read source +Providing streamed data (for file data added to archives). +Must support +.Dv ZIP_SOURCE_OPEN , +.Dv ZIP_SOURCE_READ , +.Dv ZIP_SOURCE_CLOSE , +.Dv ZIP_SOURCE_STAT , +and +.Dv ZIP_SOURCE_ERROR . +.Pp +If your source uses any allocated memory (including +.Ar userdata ) +it should also implement +.Dv ZIP_SOURCE_FREE +to avoid memory leaks. +.It seekable read source +Same as previous, but from a source allowing reading from arbitrary +offsets (also for read-only zip archive). +Must additionally support +.Dv ZIP_SOURCE_SEEK , +.Dv ZIP_SOURCE_TELL , +and +.Dv ZIP_SOURCE_SUPPORTS . +.It read/write source +Same as previous, but additionally allowing writing (also for writable +zip archives). +Must additionally support +.Dv ZIP_SOURCE_BEGIN_WRITE , +.Dv ZIP_SOURCE_COMMIT_WRITE , +.Dv ZIP_SOURCE_ROLLBACK_WRITE , +.Dv ZIP_SOURCE_SEEK_WRITE , +.Dv ZIP_SOURCE_TELL_WRITE , +and +.Dv ZIP_SOURCE_REMOVE . +.Pp +On top of the above, supporting the pseudo-command +.Dv ZIP_SOURCE_SUPPORTS_REOPEN +allows calling +.Fn zip_source_open +again after calling +.Fn zip_source_close . +.El +.Ss Dv ZIP_SOURCE_ACCEPT_EMPTY +Return 1 if an empty source should be accepted as a valid zip archive. +This is the default if this command is not supported by a source. +File system backed sources should return 0. +.Ss Dv ZIP_SOURCE_BEGIN_WRITE +Prepare the source for writing. +Use this to create any temporary file(s). +.Ss Dv ZIP_SOURCE_BEGIN_WRITE_CLONING +Prepare the source for writing, keeping the first +.Ar len +bytes of the original file. +Only implement this command if it is more efficient than copying the +data, and if it does not destructively overwrite the original file +(you still have to be able to execute +.Dv ZIP_SOURCE_ROLLBACK_WRITE ) . +.Pp +The next write should happen at byte +.Ar offset . +.Ss Dv ZIP_SOURCE_CLOSE +Reading is done. +.Ss Dv ZIP_SOURCE_COMMIT_WRITE +Finish writing to the source. +Replace the original data with the newly written data. +Clean up temporary files or internal buffers. +Subsequently opening and reading from the source should return the +newly written data. +.Ss Dv ZIP_SOURCE_ERROR +Get error information. +.Ar data +points to an array of two ints, which should be filled with the libzip +error code and the corresponding system error code for the error that +occurred. +See +.Xr zip_errors 3 +for details on the error codes. +If the source stores error information in a zip_error_t, use +.Xr zip_error_to_data 3 +and return its return value. +Otherwise, return 2 * sizeof(int). +.Ss Dv ZIP_SOURCE_FREE +Clean up and free all resources, including +.Ar userdata . +The callback function will not be called again. +.Ss Dv ZIP_SOURCE_GET_FILE_ATTRIBUTES +Provide information about various data. +Then the data should be put in the appropriate entry in the passed +.Vt zip_file_attributes_t +argument, and the appropriate +.Dv ZIP_FILE_ATTRIBUTES_* +value must be or'ed into the +.Ar valid +member to denote that the corresponding data has been provided. +A +.Vt zip_file_attributes_t +structure can be initialized using +.Xr zip_file_attributes_init 3 . +.Bl -tag -width 10n +.It ASCII mode +If a file is a plaintext file in ASCII. +Can be used by extraction tools to automatically convert line endings +(part of the internal file attributes). +Member +.Ar ascii , +flag +.Dv ZIP_FILE_ATTRIBUTES_ASCII . +.It General Purpose Bit Flags (limited to Compression Flags) +The general purpose bit flag in the zip in the local and central +directory headers contain information about the compression method. +Member +.Ar general_purpose_bit_flags +and +.Ar general_purpose_bit_mask +to denote which members have been set; +flag +.Dv ZIP_FILE_ATTRIBUTES_GENERAL_PURPOSE_BIT_FLAGS . +.It External File Attributes +The external file attributes (usually operating system-specific). +Member +.Ar external_file_attributes , +flag +.Dv ZIP_FILE_ATTRIBUTES_EXTERNAL_FILE_ATTRIBUTES . +.It Version Needed +A minimum version needed required to unpack this entry (in the usual +"major * 10 + minor" format). +Member +.Ar version_needed , +flag +.Dv ZIP_FILE_ATTRIBUTES_VERSION_NEEDED . +.It Operating System +One of the operating systems as defined by the +.Dv ZIP_OPSYS_* +variables (see +.Pa zip.h ) . +This value affects the interpretation of the external file attributes. +Member +.Ar host_system , +flag +.Dv ZIP_FILE_ATTRIBUTES_HOST_SYSTEM . +.El +.Ss Dv ZIP_SOURCE_OPEN +Prepare for reading. +.Ss Dv ZIP_SOURCE_READ +Read data into the buffer +.Ar data +of size +.Ar len . +Return the number of bytes placed into +.Ar data +on success, and zero for end-of-file. +.Ss Dv ZIP_SOURCE_REMOVE +Remove the underlying file. +This is called if a zip archive is empty when closed. +.Ss Dv ZIP_SOURCE_ROLLBACK_WRITE +Abort writing to the source. +Discard written data. +Clean up temporary files or internal buffers. +Subsequently opening and reading from the source should return the +original data. +.Ss Dv ZIP_SOURCE_SEEK +Specify position to read next byte from, like +.Xr fseek 3 . +Use +.Xr ZIP_SOURCE_GET_ARGS 3 +to decode the arguments into the following struct: +.Bd -literal +struct zip_source_args_seek { + zip_int64_t offset; + int whence; +}; +.Ed +.Pp +If the size of the source's data is known, use +.Xr zip_source_seek_compute_offset 3 +to validate the arguments and compute the new offset. +.Ss Dv ZIP_SOURCE_SEEK_WRITE +Specify position to write next byte to, like +.Xr fseek 3 . +See +.Dv ZIP_SOURCE_SEEK +for details. +.Ss Dv ZIP_SOURCE_STAT +Get meta information for the input data. +.Ar data +points to an allocated +.Vt struct zip_stat , +which should be initialized using +.Xr zip_stat_init 3 +and then filled in. +.Pp +For uncompressed, unencrypted data, all information is optional. +However, fill in as much information as is readily available. +.Pp +If the data is compressed, +.Dv ZIP_STAT_COMP_METHOD , +.Dv ZIP_STAT_SIZE , +and +.Dv ZIP_STAT_CRC +must be filled in. +.Pp +If the data is encrypted, +.Dv ZIP_STAT_ENCRYPTION_METHOD , +.Dv ZIP_STAT_COMP_METHOD , +.Dv ZIP_STAT_SIZE , +and +.Dv ZIP_STAT_CRC +must be filled in. +.Pp +Information only available after the source has been read (e.g., size) +can be omitted in an earlier call. +.Em NOTE : +.Fn zip_source_function +may be called with this argument even after being called with +.Dv ZIP_SOURCE_CLOSE . +.Pp +Return sizeof(struct zip_stat) on success. +.Ss Dv ZIP_SOURCE_SUPPORTS +Return bitmap specifying which commands are supported. +Use +.Xr zip_source_make_command_bitmap 3 . +If this command is not implemented, the source is assumed to be a +read source without seek support. +.Ss Dv ZIP_SOURCE_TELL +Return the current read offset in the source, like +.Xr ftell 3 . +.Ss Dv ZIP_SOURCE_TELL_WRITE +Return the current write offset in the source, like +.Xr ftell 3 . +.Ss Dv ZIP_SOURCE_WRITE +Write data to the source. +Return number of bytes written. +.Ss Dv ZIP_SOURCE_SUPPORTS_REOPEN +This command is never actually invoked, support for it signals the +ability to handle multiple open/read/close cycles. +.Ss Return Values +Commands should return \-1 on error. +.Dv ZIP_SOURCE_ERROR +will be called to retrieve the error code. +On success, commands return 0, unless specified otherwise in the +description above. +.Ss Calling Conventions +The library will always issue +.Dv ZIP_SOURCE_OPEN +before issuing +.Dv ZIP_SOURCE_READ , +.Dv ZIP_SOURCE_SEEK , +or +.Dv ZIP_SOURCE_TELL . +When it no longer wishes to read from this source, it will issue +.Dv ZIP_SOURCE_CLOSE . +If the library wishes to read the data again, it will issue +.Dv ZIP_SOURCE_OPEN +a second time. +If the function is unable to provide the data again, it should +return \-1. +.Pp +.Dv ZIP_SOURCE_BEGIN_WRITE +or +.Dv ZIP_SOURCE_BEGIN_WRITE_CLONING +will be called before +.Dv ZIP_SOURCE_WRITE , +.Dv ZIP_SOURCE_SEEK_WRITE , +or +.Dv ZIP_SOURCE_TELL_WRITE . +When writing is complete, either +.Dv ZIP_SOURCE_COMMIT_WRITE +or +.Dv ZIP_SOURCE_ROLLBACK_WRITE +will be called. +.Pp +.Dv ZIP_SOURCE_ACCEPT_EMPTY , +.Dv ZIP_SOURCE_GET_FILE_ATTRIBUTES , +and +.Dv ZIP_SOURCE_STAT +can be issued at any time. +.Pp +.Dv ZIP_SOURCE_ERROR +will only be issued in response to the function +returning \-1. +.Pp +.Dv ZIP_SOURCE_FREE +will be the last command issued; +if +.Dv ZIP_SOURCE_OPEN +was called and succeeded, +.Dv ZIP_SOURCE_CLOSE +will be called before +.Dv ZIP_SOURCE_FREE , +and similarly for +.Dv ZIP_SOURCE_BEGIN_WRITE +or +.Dv ZIP_SOURCE_BEGIN_WRITE_CLONING +and +.Dv ZIP_SOURCE_COMMIT_WRITE +or +.Dv ZIP_SOURCE_ROLLBACK_WRITE . +.Sh RETURN VALUES +Upon successful completion, the created source is returned. +Otherwise, +.Dv NULL +is returned and the error code in +.Ar archive +or +.Ar error +is set to indicate the error (unless +it is +.Dv NULL ) . +.Sh ERRORS +.Fn zip_source_function +fails if: +.Bl -tag -width Er +.It Bq Er ZIP_ER_MEMORY +Required memory could not be allocated. +.El +.Sh SEE ALSO +.Xr libzip 3 , +.Xr zip_file_add 3 , +.Xr zip_file_attributes_init 3 , +.Xr zip_file_replace 3 , +.Xr zip_source 3 , +.Xr zip_stat_init 3 +.Sh HISTORY +.Fn zip_source_function +and +.Fn zip_source_function_create +were added in libzip 1.0. +.Sh AUTHORS +.An -nosplit +.An Dieter Baron Aq Mt dillo@nih.at +and +.An Thomas Klausner Aq Mt wiz@gatalith.at diff --git a/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_source_function_create.3 b/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_source_function_create.3 new file mode 100644 index 0000000..cfd595d --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_source_function_create.3 @@ -0,0 +1,415 @@ +.\" zip_source_function.mdoc -- create data source from function +.\" Copyright (C) 2004-2022 Dieter Baron and Thomas Klausner +.\" +.\" This file is part of libzip, a library to manipulate ZIP archives. +.\" The authors can be contacted at +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in +.\" the documentation and/or other materials provided with the +.\" distribution. +.\" 3. The names of the authors may not be used to endorse or promote +.\" products derived from this software without specific prior +.\" written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS +.\" OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +.\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +.\" DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE +.\" GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +.\" IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +.\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN +.\" IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.\" +.Dd January 5, 2023 +.Dt ZIP_SOURCE_FUNCTION 3 +.Os +.Sh NAME +.Nm zip_source_function , +.Nm zip_source_function_create +.Nd create data source from function +.Sh LIBRARY +libzip (-lzip) +.Sh SYNOPSIS +.In zip.h +.Ft zip_source_t * +.Fn zip_source_function "zip_t *archive" "zip_source_callback fn" "void *userdata" +.Ft zip_source_t * +.Fn zip_source_function_create "zip_source_callback fn" "void *userdata" "zip_error_t *error" +.Sh DESCRIPTION +The functions +.Fn zip_source_function +and +.Fn zip_source_function_create +create a zip source from the user-provided function +.Ar fn , +which must be of the following type: +.Pp +.Ft typedef zip_int64_t +.Fo \fR(*\fPzip_source_callback\fR)\fP +.Fa "void *userdata" "void *data" "zip_uint64_t len" "zip_source_cmd_t cmd" +.Fc +.Pp +.Ar archive +or +.Ar error +are used for reporting errors and can be +.Dv NULL . +.Pp +When called by the library, the first argument is the +.Ar userdata +argument supplied to the function. +The next two arguments are a buffer +.Ar data +of size +.Ar len +when data is passed in or expected to be returned, or else +.Dv NULL +and 0. +The last argument, +.Ar cmd , +specifies which action the function should perform. +.Pp +Depending on the uses, there are three useful sets of commands to be supported by a +.Fn zip_source_callback : +.Bl -tag -width seekable-read-sourceXX +.It read source +Providing streamed data (for file data added to archives). +Must support +.Dv ZIP_SOURCE_OPEN , +.Dv ZIP_SOURCE_READ , +.Dv ZIP_SOURCE_CLOSE , +.Dv ZIP_SOURCE_STAT , +and +.Dv ZIP_SOURCE_ERROR . +.Pp +If your source uses any allocated memory (including +.Ar userdata ) +it should also implement +.Dv ZIP_SOURCE_FREE +to avoid memory leaks. +.It seekable read source +Same as previous, but from a source allowing reading from arbitrary +offsets (also for read-only zip archive). +Must additionally support +.Dv ZIP_SOURCE_SEEK , +.Dv ZIP_SOURCE_TELL , +and +.Dv ZIP_SOURCE_SUPPORTS . +.It read/write source +Same as previous, but additionally allowing writing (also for writable +zip archives). +Must additionally support +.Dv ZIP_SOURCE_BEGIN_WRITE , +.Dv ZIP_SOURCE_COMMIT_WRITE , +.Dv ZIP_SOURCE_ROLLBACK_WRITE , +.Dv ZIP_SOURCE_SEEK_WRITE , +.Dv ZIP_SOURCE_TELL_WRITE , +and +.Dv ZIP_SOURCE_REMOVE . +.Pp +On top of the above, supporting the pseudo-command +.Dv ZIP_SOURCE_SUPPORTS_REOPEN +allows calling +.Fn zip_source_open +again after calling +.Fn zip_source_close . +.El +.Ss Dv ZIP_SOURCE_ACCEPT_EMPTY +Return 1 if an empty source should be accepted as a valid zip archive. +This is the default if this command is not supported by a source. +File system backed sources should return 0. +.Ss Dv ZIP_SOURCE_BEGIN_WRITE +Prepare the source for writing. +Use this to create any temporary file(s). +.Ss Dv ZIP_SOURCE_BEGIN_WRITE_CLONING +Prepare the source for writing, keeping the first +.Ar len +bytes of the original file. +Only implement this command if it is more efficient than copying the +data, and if it does not destructively overwrite the original file +(you still have to be able to execute +.Dv ZIP_SOURCE_ROLLBACK_WRITE ) . +.Pp +The next write should happen at byte +.Ar offset . +.Ss Dv ZIP_SOURCE_CLOSE +Reading is done. +.Ss Dv ZIP_SOURCE_COMMIT_WRITE +Finish writing to the source. +Replace the original data with the newly written data. +Clean up temporary files or internal buffers. +Subsequently opening and reading from the source should return the +newly written data. +.Ss Dv ZIP_SOURCE_ERROR +Get error information. +.Ar data +points to an array of two ints, which should be filled with the libzip +error code and the corresponding system error code for the error that +occurred. +See +.Xr zip_errors 3 +for details on the error codes. +If the source stores error information in a zip_error_t, use +.Xr zip_error_to_data 3 +and return its return value. +Otherwise, return 2 * sizeof(int). +.Ss Dv ZIP_SOURCE_FREE +Clean up and free all resources, including +.Ar userdata . +The callback function will not be called again. +.Ss Dv ZIP_SOURCE_GET_FILE_ATTRIBUTES +Provide information about various data. +Then the data should be put in the appropriate entry in the passed +.Vt zip_file_attributes_t +argument, and the appropriate +.Dv ZIP_FILE_ATTRIBUTES_* +value must be or'ed into the +.Ar valid +member to denote that the corresponding data has been provided. +A +.Vt zip_file_attributes_t +structure can be initialized using +.Xr zip_file_attributes_init 3 . +.Bl -tag -width 10n +.It ASCII mode +If a file is a plaintext file in ASCII. +Can be used by extraction tools to automatically convert line endings +(part of the internal file attributes). +Member +.Ar ascii , +flag +.Dv ZIP_FILE_ATTRIBUTES_ASCII . +.It General Purpose Bit Flags (limited to Compression Flags) +The general purpose bit flag in the zip in the local and central +directory headers contain information about the compression method. +Member +.Ar general_purpose_bit_flags +and +.Ar general_purpose_bit_mask +to denote which members have been set; +flag +.Dv ZIP_FILE_ATTRIBUTES_GENERAL_PURPOSE_BIT_FLAGS . +.It External File Attributes +The external file attributes (usually operating system-specific). +Member +.Ar external_file_attributes , +flag +.Dv ZIP_FILE_ATTRIBUTES_EXTERNAL_FILE_ATTRIBUTES . +.It Version Needed +A minimum version needed required to unpack this entry (in the usual +"major * 10 + minor" format). +Member +.Ar version_needed , +flag +.Dv ZIP_FILE_ATTRIBUTES_VERSION_NEEDED . +.It Operating System +One of the operating systems as defined by the +.Dv ZIP_OPSYS_* +variables (see +.Pa zip.h ) . +This value affects the interpretation of the external file attributes. +Member +.Ar host_system , +flag +.Dv ZIP_FILE_ATTRIBUTES_HOST_SYSTEM . +.El +.Ss Dv ZIP_SOURCE_OPEN +Prepare for reading. +.Ss Dv ZIP_SOURCE_READ +Read data into the buffer +.Ar data +of size +.Ar len . +Return the number of bytes placed into +.Ar data +on success, and zero for end-of-file. +.Ss Dv ZIP_SOURCE_REMOVE +Remove the underlying file. +This is called if a zip archive is empty when closed. +.Ss Dv ZIP_SOURCE_ROLLBACK_WRITE +Abort writing to the source. +Discard written data. +Clean up temporary files or internal buffers. +Subsequently opening and reading from the source should return the +original data. +.Ss Dv ZIP_SOURCE_SEEK +Specify position to read next byte from, like +.Xr fseek 3 . +Use +.Xr ZIP_SOURCE_GET_ARGS 3 +to decode the arguments into the following struct: +.Bd -literal +struct zip_source_args_seek { + zip_int64_t offset; + int whence; +}; +.Ed +.Pp +If the size of the source's data is known, use +.Xr zip_source_seek_compute_offset 3 +to validate the arguments and compute the new offset. +.Ss Dv ZIP_SOURCE_SEEK_WRITE +Specify position to write next byte to, like +.Xr fseek 3 . +See +.Dv ZIP_SOURCE_SEEK +for details. +.Ss Dv ZIP_SOURCE_STAT +Get meta information for the input data. +.Ar data +points to an allocated +.Vt struct zip_stat , +which should be initialized using +.Xr zip_stat_init 3 +and then filled in. +.Pp +For uncompressed, unencrypted data, all information is optional. +However, fill in as much information as is readily available. +.Pp +If the data is compressed, +.Dv ZIP_STAT_COMP_METHOD , +.Dv ZIP_STAT_SIZE , +and +.Dv ZIP_STAT_CRC +must be filled in. +.Pp +If the data is encrypted, +.Dv ZIP_STAT_ENCRYPTION_METHOD , +.Dv ZIP_STAT_COMP_METHOD , +.Dv ZIP_STAT_SIZE , +and +.Dv ZIP_STAT_CRC +must be filled in. +.Pp +Information only available after the source has been read (e.g., size) +can be omitted in an earlier call. +.Em NOTE : +.Fn zip_source_function +may be called with this argument even after being called with +.Dv ZIP_SOURCE_CLOSE . +.Pp +Return sizeof(struct zip_stat) on success. +.Ss Dv ZIP_SOURCE_SUPPORTS +Return bitmap specifying which commands are supported. +Use +.Xr zip_source_make_command_bitmap 3 . +If this command is not implemented, the source is assumed to be a +read source without seek support. +.Ss Dv ZIP_SOURCE_TELL +Return the current read offset in the source, like +.Xr ftell 3 . +.Ss Dv ZIP_SOURCE_TELL_WRITE +Return the current write offset in the source, like +.Xr ftell 3 . +.Ss Dv ZIP_SOURCE_WRITE +Write data to the source. +Return number of bytes written. +.Ss Dv ZIP_SOURCE_SUPPORTS_REOPEN +This command is never actually invoked, support for it signals the +ability to handle multiple open/read/close cycles. +.Ss Return Values +Commands should return \-1 on error. +.Dv ZIP_SOURCE_ERROR +will be called to retrieve the error code. +On success, commands return 0, unless specified otherwise in the +description above. +.Ss Calling Conventions +The library will always issue +.Dv ZIP_SOURCE_OPEN +before issuing +.Dv ZIP_SOURCE_READ , +.Dv ZIP_SOURCE_SEEK , +or +.Dv ZIP_SOURCE_TELL . +When it no longer wishes to read from this source, it will issue +.Dv ZIP_SOURCE_CLOSE . +If the library wishes to read the data again, it will issue +.Dv ZIP_SOURCE_OPEN +a second time. +If the function is unable to provide the data again, it should +return \-1. +.Pp +.Dv ZIP_SOURCE_BEGIN_WRITE +or +.Dv ZIP_SOURCE_BEGIN_WRITE_CLONING +will be called before +.Dv ZIP_SOURCE_WRITE , +.Dv ZIP_SOURCE_SEEK_WRITE , +or +.Dv ZIP_SOURCE_TELL_WRITE . +When writing is complete, either +.Dv ZIP_SOURCE_COMMIT_WRITE +or +.Dv ZIP_SOURCE_ROLLBACK_WRITE +will be called. +.Pp +.Dv ZIP_SOURCE_ACCEPT_EMPTY , +.Dv ZIP_SOURCE_GET_FILE_ATTRIBUTES , +and +.Dv ZIP_SOURCE_STAT +can be issued at any time. +.Pp +.Dv ZIP_SOURCE_ERROR +will only be issued in response to the function +returning \-1. +.Pp +.Dv ZIP_SOURCE_FREE +will be the last command issued; +if +.Dv ZIP_SOURCE_OPEN +was called and succeeded, +.Dv ZIP_SOURCE_CLOSE +will be called before +.Dv ZIP_SOURCE_FREE , +and similarly for +.Dv ZIP_SOURCE_BEGIN_WRITE +or +.Dv ZIP_SOURCE_BEGIN_WRITE_CLONING +and +.Dv ZIP_SOURCE_COMMIT_WRITE +or +.Dv ZIP_SOURCE_ROLLBACK_WRITE . +.Sh RETURN VALUES +Upon successful completion, the created source is returned. +Otherwise, +.Dv NULL +is returned and the error code in +.Ar archive +or +.Ar error +is set to indicate the error (unless +it is +.Dv NULL ) . +.Sh ERRORS +.Fn zip_source_function +fails if: +.Bl -tag -width Er +.It Bq Er ZIP_ER_MEMORY +Required memory could not be allocated. +.El +.Sh SEE ALSO +.Xr libzip 3 , +.Xr zip_file_add 3 , +.Xr zip_file_attributes_init 3 , +.Xr zip_file_replace 3 , +.Xr zip_source 3 , +.Xr zip_stat_init 3 +.Sh HISTORY +.Fn zip_source_function +and +.Fn zip_source_function_create +were added in libzip 1.0. +.Sh AUTHORS +.An -nosplit +.An Dieter Baron Aq Mt dillo@nih.at +and +.An Thomas Klausner Aq Mt wiz@gatalith.at diff --git a/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_source_is_deleted.3 b/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_source_is_deleted.3 new file mode 100644 index 0000000..af1c93b --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_source_is_deleted.3 @@ -0,0 +1,62 @@ +.\" zip_source_is_deleted.mdoc -- check if zip source is deleted +.\" Copyright (C) 2014-2017 Dieter Baron and Thomas Klausner +.\" +.\" This file is part of libzip, a library to manipulate ZIP archives. +.\" The authors can be contacted at +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in +.\" the documentation and/or other materials provided with the +.\" distribution. +.\" 3. The names of the authors may not be used to endorse or promote +.\" products derived from this software without specific prior +.\" written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS +.\" OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +.\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +.\" DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE +.\" GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +.\" IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +.\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN +.\" IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.\" +.Dd December 18, 2017 +.Dt ZIP_SOURCE_IS_DELETED 3 +.Os +.Sh NAME +.Nm zip_source_is_deleted +.Nd check if zip_source is deleted +.Sh LIBRARY +libzip (-lzip) +.Sh SYNOPSIS +.In zip.h +.Ft int +.Fn zip_source_is_deleted "zip_source_t *source" +.Sh DESCRIPTION +The function +.Fn zip_source_is_deleted +returns whether the zip_source was deleted. +This can for example happen when all entries are removed from a zip archive. +.Sh RETURN VALUES +.Fn zip_source_is_deleted +returns 1 if the zip_source is deleted and 0 otherwise. +.Sh SEE ALSO +.Xr libzip 3 , +.Xr zip_source 3 +.Sh HISTORY +.Fn zip_source_is_deleted +was added in libzip 1.0. +.Sh AUTHORS +.An -nosplit +.An Dieter Baron Aq Mt dillo@nih.at +and +.An Thomas Klausner Aq Mt wiz@gatalith.at diff --git a/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_source_is_seekable.3 b/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_source_is_seekable.3 new file mode 100644 index 0000000..c0d781b --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_source_is_seekable.3 @@ -0,0 +1,65 @@ +.\" zip_source_seek.mdoc -- set read offset in source +.\" Copyright (C) 2023 Dieter Baron and Thomas Klausner +.\" +.\" This file is part of libzip, a library to manipulate ZIP archives. +.\" The authors can be contacted at +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in +.\" the documentation and/or other materials provided with the +.\" distribution. +.\" 3. The names of the authors may not be used to endorse or promote +.\" products derived from this software without specific prior +.\" written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS +.\" OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +.\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +.\" DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE +.\" GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +.\" IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +.\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN +.\" IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.\" +.Dd March 10, 2023 +.Dt ZIP_SOURCE_IS_SEEKABLE 3 +.Os +.Sh NAME +.Nm zip_source_is_seekable +.Nd check if a source supports seeking +.Sh LIBRARY +libzip (-lzip) +.Sh SYNOPSIS +.In zip.h +.Ft int +.Fn zip_source_is_seekable "zip_source_t *source" +.Sh DESCRIPTION +The function +.Fn zip_source_is_seekable +checks if +.Fa source +supports seeking via +.Xr zip_source_seek 3 . +.Sh RETURN VALUES +If the source supports seeking, 1 is returned. +Otherwise, 0 is returned. +.Sh SEE ALSO +.Xr libzip 3 , +.Xr zip_source 3 , +.Xr zip_source_seek 3 +.Sh HISTORY +.Fn zip_source_is_seekable +was added in libzip 1.10.0. +.Sh AUTHORS +.An -nosplit +.An Dieter Baron Aq Mt dillo@nih.at +and +.An Thomas Klausner Aq Mt wiz@gatalith.at diff --git a/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_source_keep.3 b/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_source_keep.3 new file mode 100644 index 0000000..ac3bef5 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_source_keep.3 @@ -0,0 +1,60 @@ +.\" zip_source_keep.mdoc -- increment reference count of zip data source +.\" Copyright (C) 2014-2017 Dieter Baron and Thomas Klausner +.\" +.\" This file is part of libzip, a library to manipulate ZIP archives. +.\" The authors can be contacted at +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in +.\" the documentation and/or other materials provided with the +.\" distribution. +.\" 3. The names of the authors may not be used to endorse or promote +.\" products derived from this software without specific prior +.\" written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS +.\" OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +.\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +.\" DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE +.\" GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +.\" IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +.\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN +.\" IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.\" +.Dd December 18, 2017 +.Dt ZIP_SOURCE_KEEP 3 +.Os +.Sh NAME +.Nm zip_source_keep +.Nd increment reference count of zip data source +.Sh LIBRARY +libzip (-lzip) +.Sh SYNOPSIS +.In zip.h +.Ft void +.Fn zip_source_keep "zip_source_t *source" +.Sh DESCRIPTION +The function +.Fn zip_source_keep +increments the reference count of +.Ar source . +.Sh SEE ALSO +.Xr libzip 3 , +.Xr zip_source 3 , +.Xr zip_source_free 3 +.Sh HISTORY +.Fn zip_source_keep +was added in libzip 1.0. +.Sh AUTHORS +.An -nosplit +.An Dieter Baron Aq Mt dillo@nih.at +and +.An Thomas Klausner Aq Mt wiz@gatalith.at diff --git a/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_source_layered.3 b/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_source_layered.3 new file mode 100644 index 0000000..4281dc5 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_source_layered.3 @@ -0,0 +1,166 @@ +.\" zip_source_layered.mdoc -- create layered source from function +.\" Copyright (C) 2004-2022 Dieter Baron and Thomas Klausner +.\" +.\" This file is part of libzip, a library to manipulate ZIP archives. +.\" The authors can be contacted at +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in +.\" the documentation and/or other materials provided with the +.\" distribution. +.\" 3. The names of the authors may not be used to endorse or promote +.\" products derived from this software without specific prior +.\" written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS +.\" OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +.\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +.\" DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE +.\" GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +.\" IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +.\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN +.\" IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.\" +.Dd January 20, 2023 +.Dt ZIP_SOURCE_LAYERED 3 +.Os +.Sh NAME +.Nm zip_source_layered , +.Nm zip_source_layered_create +.Nd create layered data source from function +.Sh LIBRARY +libzip (-lzip) +.Sh SYNOPSIS +.In zip.h +.Ft zip_source_t * +.Fn zip_source_layered "zip_t *archive" "zip_source_t *source" "zip_source_layered_callback fn" "void *userdata" +.Ft zip_source_t * +.Fn zip_source_layered_create "zip_source_t *source" "zip_source_layered_callback fn" "void *userdata" "zip_error_t *error" +.Sh DESCRIPTION +The functions +.Fn zip_source_layered +and +.Fn zip_source_layered_create +create a layered zip source from the user-provided function +.Ar fn , +which must be of the following type: +.Pp +.Ft typedef zip_int64_t +.Fo \fR(*\zip_source_layered_callback\fR)\fP +.Fa "zip_source_t *source" "void *userdata" "void *data" "zip_uint64_t length" "zip_source_cmd_t cmd" +.Fc +.Pp +.Ar archive +or +.Ar error +are used for reporting errors and can be +.Dv NULL . +.Pp +When called by the library, the first argument is the +.Ar source +of the lower layer, the second argument is the +.Ar userdata +argument supplied to the function. +The next two arguments are a buffer +.Ar data +of size +.Ar length +when data is passed in or expected to be returned, or else +.Dv NULL +and 0. +The last argument, +.Ar cmd , +specifies which action the function should perform. +.Pp +See +.Xr zip_source_function 3 +for a description of the commands. +.Pp +A layered source transforms the data or metadata of the source below in some way. +Layered sources can't support writing and are not sufficient to cleanly add support for additional compression or encryption methods. +This may be revised in a later release of libzip. +.Pp +On success, the layered source takes ownership of +.Ar source . +The caller should not free it. +.Pp +The interaction with the lower layer depends on the command: +.Ss Dv ZIP_SOURCE_ACCEPT_EMPTY +If the layered source supports this command, the lower layer is not called automatically. +Otherwise, the return value of the lower source is used. +.Ss Dv ZIP_SOURCE_CLOSE +The lower layer is closed after the callback returns. +.Ss Dv ZIP_SOURCE_ERROR +The lower layer is not called automatically. +If you need to retrieve error information from the lower layer, use +.Xr zip_error_set_from_source 3 +or +.Xr zip_source_pass_to_lower_layer 3 . +.Ss Dv ZIP_SOURCE_FREE +The lower layer is freed after the callback returns. +.Ss Dv ZIP_SOURCE_GET_FILE_ATTRIBUTES +The attributes of the lower layer are merged with the attributes returned by the callback: information set by the callback wins over the lower layer, with the following exceptions: the higher +.Ar version_needed +is used, and +.Ar general_purpose_bit_flags +are only overwritten if the corresponding bit is set in +.Ar general_purpose_bit_mask . +.Ss Dv ZIP_SOURCE_OPEN +The lower layer is opened before the callback is called. +.Ss Dv ZIP_SOURCE_READ +The lower layer is not called automatically. +.Ss Dv ZIP_SOURCE_SEEK +The lower layer is not called automatically. +.Ss Dv ZIP_SOURCE_STAT +.Ar data +contains the stat information from the lower layer when the callback is called. +.Ss Dv ZIP_SOURCE_SUPPORTS +.Ar data +contains the bitmap of commands supported by the lower layer when the callback is called. +Since layered sources can't support writing, all commands related to writing are stripped from the returned support bitmap. +.Ss Dv ZIP_SOURCE_TELL +The lower layer is not called automatically. +.Sh RETURN VALUES +Upon successful completion, the created source is returned. +Otherwise, +.Dv NULL +is returned and the error code in +.Ar archive +or +.Ar error +is set to indicate the error (unless +it is +.Dv NULL ) . +.Sh ERRORS +.Fn zip_source_layered +fails if: +.Bl -tag -width Er +.It Bq Er ZIP_ER_MEMORY +Required memory could not be allocated. +.El +.Sh SEE ALSO +.Xr libzip 3 , +.Xr zip_file_add 3 , +.Xr zip_file_attributes_init 3 , +.Xr zip_file_replace 3 , +.Xr zip_source 3 , +.Xr zip_source_function 3 , +.Xr zip_source_pass_to_lower_layer 3 +.Sh HISTORY +.Fn zip_source_layered +and +.Fn zip_source_layered_create +were added in libzip 1.10. +.Sh AUTHORS +.An -nosplit +.An Dieter Baron Aq Mt dillo@nih.at +and +.An Thomas Klausner Aq Mt wiz@gatalith.at diff --git a/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_source_layered_create.3 b/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_source_layered_create.3 new file mode 100644 index 0000000..4281dc5 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_source_layered_create.3 @@ -0,0 +1,166 @@ +.\" zip_source_layered.mdoc -- create layered source from function +.\" Copyright (C) 2004-2022 Dieter Baron and Thomas Klausner +.\" +.\" This file is part of libzip, a library to manipulate ZIP archives. +.\" The authors can be contacted at +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in +.\" the documentation and/or other materials provided with the +.\" distribution. +.\" 3. The names of the authors may not be used to endorse or promote +.\" products derived from this software without specific prior +.\" written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS +.\" OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +.\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +.\" DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE +.\" GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +.\" IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +.\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN +.\" IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.\" +.Dd January 20, 2023 +.Dt ZIP_SOURCE_LAYERED 3 +.Os +.Sh NAME +.Nm zip_source_layered , +.Nm zip_source_layered_create +.Nd create layered data source from function +.Sh LIBRARY +libzip (-lzip) +.Sh SYNOPSIS +.In zip.h +.Ft zip_source_t * +.Fn zip_source_layered "zip_t *archive" "zip_source_t *source" "zip_source_layered_callback fn" "void *userdata" +.Ft zip_source_t * +.Fn zip_source_layered_create "zip_source_t *source" "zip_source_layered_callback fn" "void *userdata" "zip_error_t *error" +.Sh DESCRIPTION +The functions +.Fn zip_source_layered +and +.Fn zip_source_layered_create +create a layered zip source from the user-provided function +.Ar fn , +which must be of the following type: +.Pp +.Ft typedef zip_int64_t +.Fo \fR(*\zip_source_layered_callback\fR)\fP +.Fa "zip_source_t *source" "void *userdata" "void *data" "zip_uint64_t length" "zip_source_cmd_t cmd" +.Fc +.Pp +.Ar archive +or +.Ar error +are used for reporting errors and can be +.Dv NULL . +.Pp +When called by the library, the first argument is the +.Ar source +of the lower layer, the second argument is the +.Ar userdata +argument supplied to the function. +The next two arguments are a buffer +.Ar data +of size +.Ar length +when data is passed in or expected to be returned, or else +.Dv NULL +and 0. +The last argument, +.Ar cmd , +specifies which action the function should perform. +.Pp +See +.Xr zip_source_function 3 +for a description of the commands. +.Pp +A layered source transforms the data or metadata of the source below in some way. +Layered sources can't support writing and are not sufficient to cleanly add support for additional compression or encryption methods. +This may be revised in a later release of libzip. +.Pp +On success, the layered source takes ownership of +.Ar source . +The caller should not free it. +.Pp +The interaction with the lower layer depends on the command: +.Ss Dv ZIP_SOURCE_ACCEPT_EMPTY +If the layered source supports this command, the lower layer is not called automatically. +Otherwise, the return value of the lower source is used. +.Ss Dv ZIP_SOURCE_CLOSE +The lower layer is closed after the callback returns. +.Ss Dv ZIP_SOURCE_ERROR +The lower layer is not called automatically. +If you need to retrieve error information from the lower layer, use +.Xr zip_error_set_from_source 3 +or +.Xr zip_source_pass_to_lower_layer 3 . +.Ss Dv ZIP_SOURCE_FREE +The lower layer is freed after the callback returns. +.Ss Dv ZIP_SOURCE_GET_FILE_ATTRIBUTES +The attributes of the lower layer are merged with the attributes returned by the callback: information set by the callback wins over the lower layer, with the following exceptions: the higher +.Ar version_needed +is used, and +.Ar general_purpose_bit_flags +are only overwritten if the corresponding bit is set in +.Ar general_purpose_bit_mask . +.Ss Dv ZIP_SOURCE_OPEN +The lower layer is opened before the callback is called. +.Ss Dv ZIP_SOURCE_READ +The lower layer is not called automatically. +.Ss Dv ZIP_SOURCE_SEEK +The lower layer is not called automatically. +.Ss Dv ZIP_SOURCE_STAT +.Ar data +contains the stat information from the lower layer when the callback is called. +.Ss Dv ZIP_SOURCE_SUPPORTS +.Ar data +contains the bitmap of commands supported by the lower layer when the callback is called. +Since layered sources can't support writing, all commands related to writing are stripped from the returned support bitmap. +.Ss Dv ZIP_SOURCE_TELL +The lower layer is not called automatically. +.Sh RETURN VALUES +Upon successful completion, the created source is returned. +Otherwise, +.Dv NULL +is returned and the error code in +.Ar archive +or +.Ar error +is set to indicate the error (unless +it is +.Dv NULL ) . +.Sh ERRORS +.Fn zip_source_layered +fails if: +.Bl -tag -width Er +.It Bq Er ZIP_ER_MEMORY +Required memory could not be allocated. +.El +.Sh SEE ALSO +.Xr libzip 3 , +.Xr zip_file_add 3 , +.Xr zip_file_attributes_init 3 , +.Xr zip_file_replace 3 , +.Xr zip_source 3 , +.Xr zip_source_function 3 , +.Xr zip_source_pass_to_lower_layer 3 +.Sh HISTORY +.Fn zip_source_layered +and +.Fn zip_source_layered_create +were added in libzip 1.10. +.Sh AUTHORS +.An -nosplit +.An Dieter Baron Aq Mt dillo@nih.at +and +.An Thomas Klausner Aq Mt wiz@gatalith.at diff --git a/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_source_make_command_bitmap.3 b/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_source_make_command_bitmap.3 new file mode 100644 index 0000000..825f3aa --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_source_make_command_bitmap.3 @@ -0,0 +1,62 @@ +.\" zip_source_make_command_bitmap -- create bitmap of supported source operations +.\" Copyright (C) 2014-2017 Dieter Baron and Thomas Klausner +.\" +.\" This file is part of libzip, a library to manipulate ZIP archives. +.\" The authors can be contacted at +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in +.\" the documentation and/or other materials provided with the +.\" distribution. +.\" 3. The names of the authors may not be used to endorse or promote +.\" products derived from this software without specific prior +.\" written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS +.\" OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +.\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +.\" DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE +.\" GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +.\" IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +.\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN +.\" IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.\" +.Dd December 18, 2017 +.Dt ZIP_SOURCE_MAKE_COMMAND_BITMAP 3 +.Os +.Sh NAME +.Nm zip_source_make_command_bitmap +.Nd create bitmap of supported source operations +.Sh LIBRARY +libzip (-lzip) +.Sh SYNOPSIS +.In zip.h +.Ft zip_int64_t +.Fn zip_source_make_command_bitmap "zip_source_cmd_t command" "..." +.Sh DESCRIPTION +The +.Fn zip_source_make_command_bitmap +function returns a bitmap of source commands suitable as return value +for +.Dv ZIP_SOURCE_SUPPORTS . +It includes all the commands from the argument list, which must be +terminated by \-1. +.Sh SEE ALSO +.Xr libzip 3 , +.Xr zip_source_function 3 +.Sh HISTORY +.Fn zip_source_make_command_bitmap +was added in libzip 1.0. +.Sh AUTHORS +.An -nosplit +.An Dieter Baron Aq Mt dillo@nih.at +and +.An Thomas Klausner Aq Mt wiz@gatalith.at diff --git a/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_source_open.3 b/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_source_open.3 new file mode 100644 index 0000000..827f90a --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_source_open.3 @@ -0,0 +1,70 @@ +.\" zip_source_open.mdoc -- open zip source for reading +.\" Copyright (C) 2014-2017 Dieter Baron and Thomas Klausner +.\" +.\" This file is part of libzip, a library to manipulate ZIP archives. +.\" The authors can be contacted at +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in +.\" the documentation and/or other materials provided with the +.\" distribution. +.\" 3. The names of the authors may not be used to endorse or promote +.\" products derived from this software without specific prior +.\" written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS +.\" OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +.\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +.\" DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE +.\" GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +.\" IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +.\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN +.\" IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.\" +.Dd December 18, 2017 +.Dt ZIP_SOURCE_OPEN 3 +.Os +.Sh NAME +.Nm zip_source_open +.Nd open zip_source for reading +.Sh LIBRARY +libzip (-lzip) +.Sh SYNOPSIS +.In zip.h +.Ft int +.Fn zip_source_open "zip_source_t *source" +.Sh DESCRIPTION +The function +.Fn zip_source_open +opens +.Fa source +for reading. +.Sh RETURN VALUES +Upon successful completion 0 is returned. +Otherwise, \-1 is returned and the error information in +.Ar source +is set to indicate the error. +.Sh SEE ALSO +.Xr libzip 3 , +.Xr zip_source 3 , +.Xr zip_source_begin_write 3 , +.Xr zip_source_close 3 , +.Xr zip_source_read 3 , +.Xr zip_source_seek 3 , +.Xr zip_source_tell 3 +.Sh HISTORY +.Fn zip_source_open +was added in libzip 1.0. +.Sh AUTHORS +.An -nosplit +.An Dieter Baron Aq Mt dillo@nih.at +and +.An Thomas Klausner Aq Mt wiz@gatalith.at diff --git a/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_source_read.3 b/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_source_read.3 new file mode 100644 index 0000000..8f04871 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_source_read.3 @@ -0,0 +1,80 @@ +.\" zip_source_read.mdoc -- read data from zip source +.\" Copyright (C) 2014-2022 Dieter Baron and Thomas Klausner +.\" +.\" This file is part of libzip, a library to manipulate ZIP archives. +.\" The authors can be contacted at +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in +.\" the documentation and/or other materials provided with the +.\" distribution. +.\" 3. The names of the authors may not be used to endorse or promote +.\" products derived from this software without specific prior +.\" written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS +.\" OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +.\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +.\" DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE +.\" GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +.\" IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +.\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN +.\" IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.\" +.Dd September 28, 2021 +.Dt ZIP_SOURCE_READ 3 +.Os +.Sh NAME +.Nm zip_source_read +.Nd read data from zip source +.Sh LIBRARY +libzip (-lzip) +.Sh SYNOPSIS +.In zip.h +.Ft zip_int64_t +.Fn zip_source_read "zip_source_t *source" "void *data" "zip_uint64_t len" +.Sh DESCRIPTION +The function +.Fn zip_source_read +reads up to +.Ar len +bytes of data from +.Ar source +at the current read offset into the buffer +.Ar data . +.Pp +The zip source +.Ar source +has to be opened for reading by calling +.Xr zip_source_open 3 +first. +.Sh RETURN VALUES +Upon successful completion the number of bytes read is returned. +When +.Fn zip_source_read +is called after reaching the end of the file, 0 is returned. +Otherwise, \-1 is returned and the error information in +.Ar source +is set to indicate the error. +.Sh SEE ALSO +.Xr libzip 3 , +.Xr zip_source 3 , +.Xr zip_source_seek 3 , +.Xr zip_source_tell 3 , +.Xr zip_source_write 3 +.Sh HISTORY +.Fn zip_source_read +was added in libzip 1.0. +.Sh AUTHORS +.An -nosplit +.An Dieter Baron Aq Mt dillo@nih.at +and +.An Thomas Klausner Aq Mt wiz@gatalith.at diff --git a/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_source_rollback_write.3 b/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_source_rollback_write.3 new file mode 100644 index 0000000..d749885 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_source_rollback_write.3 @@ -0,0 +1,68 @@ +.\" zip_source_rollback_write.mdoc -- undo changes to zip source +.\" Copyright (C) 2014-2022 Dieter Baron and Thomas Klausner +.\" +.\" This file is part of libzip, a library to manipulate ZIP archives. +.\" The authors can be contacted at +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in +.\" the documentation and/or other materials provided with the +.\" distribution. +.\" 3. The names of the authors may not be used to endorse or promote +.\" products derived from this software without specific prior +.\" written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS +.\" OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +.\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +.\" DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE +.\" GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +.\" IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +.\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN +.\" IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.\" +.Dd November 3, 2021 +.Dt ZIP_SOURCE_ROLLBACK_WRITE 3 +.Os +.Sh NAME +.Nm zip_source_rollback_write +.Nd undo changes to zip source +.Sh LIBRARY +libzip (-lzip) +.Sh SYNOPSIS +.In zip.h +.Ft void +.Fn zip_source_rollback_write "zip_source_t *source" +.Sh DESCRIPTION +The function +.Fn zip_source_rollback_write +reverts changes written to +.Fa source , +restoring the data before +.Xr zip_source_begin_write 3 +was called. +Usually this removes temporary files or frees buffers. +.Sh SEE ALSO +.Xr libzip 3 , +.Xr zip_source 3 , +.Xr zip_source_begin_write 3 , +.Xr zip_source_commit_write 3 , +.Xr zip_source_seek_write 3 , +.Xr zip_source_tell_write 3 , +.Xr zip_source_write 3 +.Sh HISTORY +.Fn zip_source_rollback_write +was added in libzip 1.0. +.Sh AUTHORS +.An -nosplit +.An Dieter Baron Aq Mt dillo@nih.at +and +.An Thomas Klausner Aq Mt wiz@gatalith.at diff --git a/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_source_seek.3 b/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_source_seek.3 new file mode 100644 index 0000000..face17c --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_source_seek.3 @@ -0,0 +1,82 @@ +.\" zip_source_seek.mdoc -- set read offset in source +.\" Copyright (C) 2014-2017 Dieter Baron and Thomas Klausner +.\" +.\" This file is part of libzip, a library to manipulate ZIP archives. +.\" The authors can be contacted at +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in +.\" the documentation and/or other materials provided with the +.\" distribution. +.\" 3. The names of the authors may not be used to endorse or promote +.\" products derived from this software without specific prior +.\" written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS +.\" OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +.\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +.\" DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE +.\" GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +.\" IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +.\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN +.\" IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.\" +.Dd March 10, 2023 +.Dt ZIP_SOURCE_SEEK 3 +.Os +.Sh NAME +.Nm zip_source_seek +.Nd set read offset in zip source +.Sh LIBRARY +libzip (-lzip) +.Sh SYNOPSIS +.In zip.h +.Ft int +.Fn zip_source_seek "zip_source_t *source" "zip_int64_t offset" "int whence" +.Sh DESCRIPTION +The function +.Fn zip_source_seek +sets the current read offset for +.Fa source . +Just like in +.Xr fseek 3 , +depending on the +.Ar whence +argument, the +.Ar offset +is counted relative from: +.Bl -tag -width SEEK_CURXX -offset indent +.It Dv SEEK_SET +start of file +.It Dv SEEK_CUR +current read offset in file +.It Dv SEEK_END +end of file +.El +.Sh RETURN VALUES +Upon successful completion 0 is returned. +Otherwise, \-1 is returned and the error information in +.Ar source +is set to indicate the error. +.Sh SEE ALSO +.Xr libzip 3 , +.Xr zip_source 3 , +.Xr zip_source_is_seekable 3 , +.Xr zip_source_read 3 , +.Xr zip_source_tell 3 +.Sh HISTORY +.Fn zip_source_seek +was added in libzip 1.0. +.Sh AUTHORS +.An -nosplit +.An Dieter Baron Aq Mt dillo@nih.at +and +.An Thomas Klausner Aq Mt wiz@gatalith.at diff --git a/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_source_seek_compute_offset.3 b/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_source_seek_compute_offset.3 new file mode 100644 index 0000000..e849886 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_source_seek_compute_offset.3 @@ -0,0 +1,81 @@ +.\" zip_source_seek_compute_offset.mdoc - validate arguments and compute offset +.\" Copyright (C) 2014-2017 Dieter Baron and Thomas Klausner +.\" +.\" This file is part of libzip, a library to manipulate ZIP archives. +.\" The authors can be contacted at +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in +.\" the documentation and/or other materials provided with the +.\" distribution. +.\" 3. The names of the authors may not be used to endorse or promote +.\" products derived from this software without specific prior +.\" written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS +.\" OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +.\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +.\" DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE +.\" GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +.\" IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +.\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN +.\" IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.\" +.Dd December 18, 2017 +.Dt ZIP_SOURCE_SEEK_COMPUTE_OFFSET 3 +.Os +.Sh NAME +.Nm zip_source_seek_compute_offset +.Nd validate arguments and compute offset +.Sh LIBRARY +libzip (-lzip) +.Sh SYNOPSIS +.In zip.h +.Ft zip_int64_t +.Fn zip_source_seek_compute_offset "zip_uint64_t offset" "zip_uint64_t length" "void *data" "zip_uint64_t data_length" "zip_error_t *error" +.Sh DESCRIPTION +Use this function to compute the offset for a +.Dv ZIP_SOURCE_SEEK +or +.Dv ZIP_SOURCE_SEEK_WRITE +command. +.Ar data +and +.Ar data_length +are the arguments to the source callback, +.Ar offset +is the current offset and +.Ar length +is the length of the source data or, for +.Dv ZIP_SOURCE_SEEK_WRITE , +the amount of data written. +.Sh RETURN VALUES +On success, it returns the new offset, on error it returns \-1 and +sets +.Ar error . +.Sh ERRORS +.Fn zip_source_seek_compute_offset +fails if: +.Bl -tag -width Er +.It Bq Er ZIP_ER_INVAL +One of the arguments is invalid or the seek would place the offset +outside the data. +.El +.Sh SEE ALSO +.Xr zip_source_function 3 +.Sh HISTORY +.Fn zip_source_seek_compute_offset +was added in libzip 1.0. +.Sh AUTHORS +.An -nosplit +.An Dieter Baron Aq Mt dillo@nih.at +and +.An Thomas Klausner Aq Mt wiz@gatalith.at diff --git a/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_source_seek_write.3 b/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_source_seek_write.3 new file mode 100644 index 0000000..832c31e --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_source_seek_write.3 @@ -0,0 +1,84 @@ +.\" zip_source_seek_write.mdoc -- set write offset in source +.\" Copyright (C) 2014-2017 Dieter Baron and Thomas Klausner +.\" +.\" This file is part of libzip, a library to manipulate ZIP archives. +.\" The authors can be contacted at +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in +.\" the documentation and/or other materials provided with the +.\" distribution. +.\" 3. The names of the authors may not be used to endorse or promote +.\" products derived from this software without specific prior +.\" written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS +.\" OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +.\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +.\" DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE +.\" GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +.\" IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +.\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN +.\" IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.\" +.Dd December 18, 2017 +.Dt ZIP_SOURCE_SEEK_WRITE 3 +.Os +.Sh NAME +.Nm zip_source_seek_write +.Nd set write offset in zip source +.Sh LIBRARY +libzip (-lzip) +.Sh SYNOPSIS +.In zip.h +.Ft int +.Fn zip_source_seek_write "zip_source_t *source" "zip_int64_t offset" "int whence" +.Sh DESCRIPTION +The function +.Fn zip_source_seek_write +sets the current write offset for +.Fa source . +Just like in +.Xr fseek 3 , +depending on the +.Ar whence +argument, the +.Ar offset +is counted relative from: +.Bl -tag -width SEEK_CURXX -offset indent +.It Dv SEEK_SET +start of file +.It Dv SEEK_CUR +current write offset in file +.It Dv SEEK_END +end of file +.El +.Sh RETURN VALUES +Upon successful completion 0 is returned. +Otherwise, \-1 is returned and the error information in +.Ar source +is set to indicate the error. +.Sh SEE ALSO +.Xr libzip 3 , +.Xr zip_source 3 , +.Xr zip_source_begin_write 3 , +.Xr zip_source_commit_write 3 , +.Xr zip_source_rollback_write 3 , +.Xr zip_source_tell_write 3 , +.Xr zip_source_write 3 +.Sh HISTORY +.Fn zip_source_seek_write +was added in libzip 1.0. +.Sh AUTHORS +.An -nosplit +.An Dieter Baron Aq Mt dillo@nih.at +and +.An Thomas Klausner Aq Mt wiz@gatalith.at diff --git a/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_source_stat.3 b/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_source_stat.3 new file mode 100644 index 0000000..8b13bef --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_source_stat.3 @@ -0,0 +1,125 @@ +.\" zip_source_stat.mdoc -- get information about zip source +.\" Copyright (C) 2014-2021 Dieter Baron and Thomas Klausner +.\" +.\" This file is part of libzip, a library to manipulate ZIP archives. +.\" The authors can be contacted at +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in +.\" the documentation and/or other materials provided with the +.\" distribution. +.\" 3. The names of the authors may not be used to endorse or promote +.\" products derived from this software without specific prior +.\" written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS +.\" OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +.\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +.\" DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE +.\" GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +.\" IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +.\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN +.\" IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.\" +.Dd December 18, 2017 +.Dt ZIP_SOURCE_STAT 3 +.Os +.Sh NAME +.Nm zip_source_stat +.Nd get information about zip_source +.Sh LIBRARY +libzip (-lzip) +.Sh SYNOPSIS +.In zip.h +.Ft int +.Fn zip_source_stat "zip_source_t *source" "zip_stat_t *sb" +.Sh DESCRIPTION +The +.Fn zip_source_stat +function obtains information about the zip source +.Ar source +.Pp +The +.Ar sb +argument is a pointer to a +.Ft struct zip_source_stat +(shown below), into which information about the zip source is placed. +.Bd -literal +struct zip_source_stat { + zip_uint64_t valid; /* which fields have valid values */ + const char *name; /* name of the file */ + zip_uint64_t index; /* index within archive */ + zip_uint64_t size; /* size of file (uncompressed) */ + zip_uint64_t comp_size; /* size of file (compressed) */ + time_t mtime; /* modification time */ + zip_uint32_t crc; /* crc of file data */ + zip_uint16_t comp_method; /* compression method used */ + zip_uint16_t encryption_method; /* encryption method used */ + zip_uint32_t flags; /* reserved for future use */ +}; +.Ed +The structure pointed to by +.Ar sb +must be initialized with +.Fn zip_stat_init 3 +before calling +.Fn zip_source_stat . +.Pp +The +.Ar valid +field of the structure specifies which other fields are valid. +Check if the flag defined by the following defines are in +.Ar valid +before accessing the fields: +.Bl -tag -width ZIP_STAT_ENCRYPTION_METHODXX -compact -offset indent +.It Dv ZIP_STAT_NAME +.Ar name +.It Dv ZIP_STAT_INDEX +.Ar index +.It Dv ZIP_STAT_SIZE +.Ar size +.It Dv ZIP_STAT_COMP_SIZE +.Ar comp_size +.It Dv ZIP_STAT_MTIME +.Ar mtime +.It Dv ZIP_STAT_CRC +.Ar crc +.It Dv ZIP_STAT_COMP_METHOD +.Ar comp_method +.It Dv ZIP_STAT_ENCRYPTION_METHOD +.Ar encryption_method +.It Dv ZIP_STAT_FLAGS +.Ar flags +.El +.Pp +.Em NOTE : +Some fields may only be filled out after all data has been read from +the source, for example the +.Ar crc +or +.Ar size +fields. +.Sh RETURN VALUES +Upon successful completion 0 is returned. +Otherwise, \-1 is returned and the error information in +.Ar source +is set to indicate the error. +.Sh SEE ALSO +.Xr libzip 3 , +.Xr zip_source 3 +.Sh HISTORY +.Fn zip_source_stat +was added in libzip 1.0. +.Sh AUTHORS +.An -nosplit +.An Dieter Baron Aq Mt dillo@nih.at +and +.An Thomas Klausner Aq Mt wiz@gatalith.at diff --git a/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_source_tell.3 b/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_source_tell.3 new file mode 100644 index 0000000..168220c --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_source_tell.3 @@ -0,0 +1,74 @@ +.\" zip_source_tell.mdoc -- report current read offset in source +.\" Copyright (C) 2014-2017 Dieter Baron and Thomas Klausner +.\" +.\" This file is part of libzip, a library to manipulate ZIP archives. +.\" The authors can be contacted at +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in +.\" the documentation and/or other materials provided with the +.\" distribution. +.\" 3. The names of the authors may not be used to endorse or promote +.\" products derived from this software without specific prior +.\" written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS +.\" OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +.\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +.\" DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE +.\" GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +.\" IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +.\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN +.\" IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.\" +.Dd December 18, 2017 +.Dt ZIP_SOURCE_TELL 3 +.Os +.Sh NAME +.Nm zip_source_tell +.Nd report current read offset in zip source +.Sh LIBRARY +libzip (-lzip) +.Sh SYNOPSIS +.In zip.h +.Ft zip_int64_t +.Fn zip_source_tell "zip_source_t *source" +.Sh DESCRIPTION +The function +.Fn zip_source_tell +returns the current read offset +for +.Fa source . +The return value can be passed to +.Xr zip_source_seek 3 +with +.Ar whence +set to +.Dv SEEK_SET +to return to the same location in the source. +.Sh RETURN VALUES +Upon successful completion the current read offset is returned. +Otherwise, \-1 is returned and the error information in +.Ar source +is set to indicate the error. +.Sh SEE ALSO +.Xr libzip 3 , +.Xr zip_source 3 , +.Xr zip_source_read 3 , +.Xr zip_source_tell_write 3 +.Sh HISTORY +.Fn zip_source_tell +was added in libzip 1.0. +.Sh AUTHORS +.An -nosplit +.An Dieter Baron Aq Mt dillo@nih.at +and +.An Thomas Klausner Aq Mt wiz@gatalith.at diff --git a/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_source_tell_write.3 b/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_source_tell_write.3 new file mode 100644 index 0000000..202478c --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_source_tell_write.3 @@ -0,0 +1,77 @@ +.\" zip_source_tell_write.mdoc -- report current write offset in source +.\" Copyright (C) 2014-2017 Dieter Baron and Thomas Klausner +.\" +.\" This file is part of libzip, a library to manipulate ZIP archives. +.\" The authors can be contacted at +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in +.\" the documentation and/or other materials provided with the +.\" distribution. +.\" 3. The names of the authors may not be used to endorse or promote +.\" products derived from this software without specific prior +.\" written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS +.\" OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +.\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +.\" DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE +.\" GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +.\" IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +.\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN +.\" IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.\" +.Dd December 18, 2017 +.Dt ZIP_SOURCE_TELL_WRITE 3 +.Os +.Sh NAME +.Nm zip_source_tell_write +.Nd report current write offset in zip source +.Sh LIBRARY +libzip (-lzip) +.Sh SYNOPSIS +.In zip.h +.Ft zip_int64_t +.Fn zip_source_tell_write "zip_source_t *source" +.Sh DESCRIPTION +The function +.Fn zip_source_tell_write +returns the current write offset +for +.Fa source . +The return value can be passed to +.Xr zip_source_seek_write 3 +with +.Ar whence +set to +.Dv SEEK_SET +to return to the same location in the source. +.Sh RETURN VALUES +Upon successful completion the current write offset is returned. +Otherwise, \-1 is returned and the error information in +.Ar source +is set to indicate the error. +.Sh SEE ALSO +.Xr libzip 3 , +.Xr zip_source 3 , +.Xr zip_source_begin_write 3 , +.Xr zip_source_commit_write 3 , +.Xr zip_source_rollback_write 3 , +.Xr zip_source_tell 3 , +.Xr zip_source_write 3 +.Sh HISTORY +.Fn zip_source_tell_write +was added in libzip 1.0. +.Sh AUTHORS +.An -nosplit +.An Dieter Baron Aq Mt dillo@nih.at +and +.An Thomas Klausner Aq Mt wiz@gatalith.at diff --git a/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_source_win32a.3 b/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_source_win32a.3 new file mode 100644 index 0000000..5bdc045 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_source_win32a.3 @@ -0,0 +1,121 @@ +.\" zip_source_win32a.mdoc -- create data source using a win32 ANSI name +.\" Copyright (C) 2015-2021 Dieter Baron and Thomas Klausner +.\" +.\" This file is part of libzip, a library to manipulate ZIP archives. +.\" The authors can be contacted at +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in +.\" the documentation and/or other materials provided with the +.\" distribution. +.\" 3. The names of the authors may not be used to endorse or promote +.\" products derived from this software without specific prior +.\" written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS +.\" OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +.\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +.\" DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE +.\" GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +.\" IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +.\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN +.\" IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.\" +.Dd June 30, 2023 +.Dt ZIP_SOURCE_WIN32A 3 +.Os +.Sh NAME +.Nm zip_source_win32a , +.Nm zip_source_win32a_create +.Nd create data source from a Windows ANSI file name +.Sh LIBRARY +libzip (-lzip) +.Sh SYNOPSIS +.In zip.h +.Ft zip_source_t * +.Fn zip_source_win32a "zip_t *archive" "const char *fname" "zip_uint64_t start" "zip_int64_t len" +.Ft zip_source_t * +.Fn zip_source_win32a_create "const char *fname" "zip_uint64_t start" "zip_int64_t len" "zip_error_t *error" +.Sh DESCRIPTION +The functions +.Fn zip_source_win32a +and +.Fn zip_source_win32a_create +create a zip source on Windows using a Windows ANSI name. +They open +.Ar fname +and read +.Ar len +bytes from offset +.Ar start +from it. +For a description of the +.Ar len +argument, see +.Xr zip_source_file 3 . +.Pp +If the file supports seek, the source can be used to open a zip archive from. +.Pp +The file is opened and read when the data from the source is used, usually by +.Fn zip_close +or +.Fn zip_open_from_source . +.Sh RETURN VALUES +Upon successful completion, the created source is returned. +Otherwise, +.Dv NULL +is returned and the error code in +.Ar archive +or +.Ar error +is set to indicate the error. +.Sh ERRORS +.Fn zip_source_win32a +and +.Fn zip_source_win32a_create +fail if: +.Bl -tag -width Er +.It Bq Er ZIP_ER_INVAL +.Ar fname , +.Ar start , +or +.Ar len +are invalid. +.It Bq Er ZIP_ER_MEMORY +Required memory could not be allocated. +.It Bq Er ZIP_ER_OPEN +Opening +.Ar fname +failed. +.El +.Sh SEE ALSO +.Xr libzip 3 , +.Xr zip_file_add 3 , +.Xr zip_file_replace 3 , +.Xr zip_source 3 , +.Xr zip_source_file 3 , +.Xr zip_source_win32handle 3 , +.Xr zip_source_win32w 3 +.Sh HISTORY +.Fn zip_source_win32a +and +.Fn zip_source_win32a_create +were added in libzip 1.0. +.Pp +.Dv ZIP_LENGTH_TO_END +and +.Dv ZIP_LENGTH_UNCHECKED +were added in libzip 1.10.1. +.Sh AUTHORS +.An -nosplit +.An Dieter Baron Aq Mt dillo@nih.at +and +.An Thomas Klausner Aq Mt wiz@gatalith.at diff --git a/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_source_win32a_create.3 b/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_source_win32a_create.3 new file mode 100644 index 0000000..5bdc045 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_source_win32a_create.3 @@ -0,0 +1,121 @@ +.\" zip_source_win32a.mdoc -- create data source using a win32 ANSI name +.\" Copyright (C) 2015-2021 Dieter Baron and Thomas Klausner +.\" +.\" This file is part of libzip, a library to manipulate ZIP archives. +.\" The authors can be contacted at +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in +.\" the documentation and/or other materials provided with the +.\" distribution. +.\" 3. The names of the authors may not be used to endorse or promote +.\" products derived from this software without specific prior +.\" written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS +.\" OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +.\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +.\" DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE +.\" GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +.\" IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +.\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN +.\" IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.\" +.Dd June 30, 2023 +.Dt ZIP_SOURCE_WIN32A 3 +.Os +.Sh NAME +.Nm zip_source_win32a , +.Nm zip_source_win32a_create +.Nd create data source from a Windows ANSI file name +.Sh LIBRARY +libzip (-lzip) +.Sh SYNOPSIS +.In zip.h +.Ft zip_source_t * +.Fn zip_source_win32a "zip_t *archive" "const char *fname" "zip_uint64_t start" "zip_int64_t len" +.Ft zip_source_t * +.Fn zip_source_win32a_create "const char *fname" "zip_uint64_t start" "zip_int64_t len" "zip_error_t *error" +.Sh DESCRIPTION +The functions +.Fn zip_source_win32a +and +.Fn zip_source_win32a_create +create a zip source on Windows using a Windows ANSI name. +They open +.Ar fname +and read +.Ar len +bytes from offset +.Ar start +from it. +For a description of the +.Ar len +argument, see +.Xr zip_source_file 3 . +.Pp +If the file supports seek, the source can be used to open a zip archive from. +.Pp +The file is opened and read when the data from the source is used, usually by +.Fn zip_close +or +.Fn zip_open_from_source . +.Sh RETURN VALUES +Upon successful completion, the created source is returned. +Otherwise, +.Dv NULL +is returned and the error code in +.Ar archive +or +.Ar error +is set to indicate the error. +.Sh ERRORS +.Fn zip_source_win32a +and +.Fn zip_source_win32a_create +fail if: +.Bl -tag -width Er +.It Bq Er ZIP_ER_INVAL +.Ar fname , +.Ar start , +or +.Ar len +are invalid. +.It Bq Er ZIP_ER_MEMORY +Required memory could not be allocated. +.It Bq Er ZIP_ER_OPEN +Opening +.Ar fname +failed. +.El +.Sh SEE ALSO +.Xr libzip 3 , +.Xr zip_file_add 3 , +.Xr zip_file_replace 3 , +.Xr zip_source 3 , +.Xr zip_source_file 3 , +.Xr zip_source_win32handle 3 , +.Xr zip_source_win32w 3 +.Sh HISTORY +.Fn zip_source_win32a +and +.Fn zip_source_win32a_create +were added in libzip 1.0. +.Pp +.Dv ZIP_LENGTH_TO_END +and +.Dv ZIP_LENGTH_UNCHECKED +were added in libzip 1.10.1. +.Sh AUTHORS +.An -nosplit +.An Dieter Baron Aq Mt dillo@nih.at +and +.An Thomas Klausner Aq Mt wiz@gatalith.at diff --git a/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_source_win32handle.3 b/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_source_win32handle.3 new file mode 100644 index 0000000..c0c47b6 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_source_win32handle.3 @@ -0,0 +1,110 @@ +.\" zip_source_handle.mdoc -- create data source from a Windows file handle +.\" Copyright (C) 2015-2021 Dieter Baron and Thomas Klausner +.\" +.\" This file is part of libzip, a library to manipulate ZIP archives. +.\" The authors can be contacted at +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in +.\" the documentation and/or other materials provided with the +.\" distribution. +.\" 3. The names of the authors may not be used to endorse or promote +.\" products derived from this software without specific prior +.\" written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS +.\" OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +.\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +.\" DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE +.\" GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +.\" IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +.\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN +.\" IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.\" +.Dd May 14, 2024 +.Dt ZIP_SOURCE_WIN32HANDLE 3 +.Os +.Sh NAME +.Nm zip_source_win32handle , +.Nm zip_source_win32handle_create +.Nd create data source from a Windows file handle +.Sh LIBRARY +libzip (-lzip) +.Sh SYNOPSIS +.In zip.h +.Ft zip_source_t * +.Fn zip_source_win32handle "zip_t *archive" "HANDLE h" "zip_uint64_t start" "zip_int64_t len" +.Ft zip_source_t * +.Fn zip_source_win32handle_create "HANDLE h" "zip_uint64_t start" "zip_int64_t len" "zip_error_t *error" +.Sh DESCRIPTION +The functions +.Fn zip_source_win32handle +and +.Fn zip_source_win32handle_create +create a zip source from a Windows file handle. +They read +.Ar len +bytes from offset +.Ar start +from it. +If +.Ar len +is 0 or \-1, the whole file (starting from +.Ar start ) +is used. +.Pp +If the file supports seek, the source can be used to open a zip archive from. +.Pp +The file is opened and read when the data from the source is used, usually by +.Fn zip_close +or +.Fn zip_open_from_source . +.Sh RETURN VALUES +Upon successful completion, the created source is returned. +Otherwise, +.Dv NULL +is returned and the error code in +.Ar archive +or +.Ar error +is set to indicate the error. +.Sh ERRORS +.Fn zip_source_w32handle +and +.Fn zip_source_w32handle_create +fail if: +.Bl -tag -width Er +.It Bq Er ZIP_ER_INVAL +.Ar h , +.Ar start , +or +.Ar len +are invalid. +.It Bq Er ZIP_ER_MEMORY +Required memory could not be allocated. +.El +.Sh SEE ALSO +.Xr libzip 3 , +.Xr zip_file_add 3 , +.Xr zip_file_replace 3 , +.Xr zip_source 3 , +.Xr zip_source_win32a 3 , +.Xr zip_source_win32w 3 +.Sh HISTORY +.Fn zip_source_win32handle +and +.Fn zip_source_win32handle_create +were added in libzip 1.0. +.Sh AUTHORS +.An -nosplit +.An Dieter Baron Aq Mt dillo@nih.at +and +.An Thomas Klausner Aq Mt wiz@gatalith.at diff --git a/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_source_win32handle_create.3 b/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_source_win32handle_create.3 new file mode 100644 index 0000000..c0c47b6 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_source_win32handle_create.3 @@ -0,0 +1,110 @@ +.\" zip_source_handle.mdoc -- create data source from a Windows file handle +.\" Copyright (C) 2015-2021 Dieter Baron and Thomas Klausner +.\" +.\" This file is part of libzip, a library to manipulate ZIP archives. +.\" The authors can be contacted at +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in +.\" the documentation and/or other materials provided with the +.\" distribution. +.\" 3. The names of the authors may not be used to endorse or promote +.\" products derived from this software without specific prior +.\" written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS +.\" OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +.\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +.\" DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE +.\" GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +.\" IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +.\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN +.\" IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.\" +.Dd May 14, 2024 +.Dt ZIP_SOURCE_WIN32HANDLE 3 +.Os +.Sh NAME +.Nm zip_source_win32handle , +.Nm zip_source_win32handle_create +.Nd create data source from a Windows file handle +.Sh LIBRARY +libzip (-lzip) +.Sh SYNOPSIS +.In zip.h +.Ft zip_source_t * +.Fn zip_source_win32handle "zip_t *archive" "HANDLE h" "zip_uint64_t start" "zip_int64_t len" +.Ft zip_source_t * +.Fn zip_source_win32handle_create "HANDLE h" "zip_uint64_t start" "zip_int64_t len" "zip_error_t *error" +.Sh DESCRIPTION +The functions +.Fn zip_source_win32handle +and +.Fn zip_source_win32handle_create +create a zip source from a Windows file handle. +They read +.Ar len +bytes from offset +.Ar start +from it. +If +.Ar len +is 0 or \-1, the whole file (starting from +.Ar start ) +is used. +.Pp +If the file supports seek, the source can be used to open a zip archive from. +.Pp +The file is opened and read when the data from the source is used, usually by +.Fn zip_close +or +.Fn zip_open_from_source . +.Sh RETURN VALUES +Upon successful completion, the created source is returned. +Otherwise, +.Dv NULL +is returned and the error code in +.Ar archive +or +.Ar error +is set to indicate the error. +.Sh ERRORS +.Fn zip_source_w32handle +and +.Fn zip_source_w32handle_create +fail if: +.Bl -tag -width Er +.It Bq Er ZIP_ER_INVAL +.Ar h , +.Ar start , +or +.Ar len +are invalid. +.It Bq Er ZIP_ER_MEMORY +Required memory could not be allocated. +.El +.Sh SEE ALSO +.Xr libzip 3 , +.Xr zip_file_add 3 , +.Xr zip_file_replace 3 , +.Xr zip_source 3 , +.Xr zip_source_win32a 3 , +.Xr zip_source_win32w 3 +.Sh HISTORY +.Fn zip_source_win32handle +and +.Fn zip_source_win32handle_create +were added in libzip 1.0. +.Sh AUTHORS +.An -nosplit +.An Dieter Baron Aq Mt dillo@nih.at +and +.An Thomas Klausner Aq Mt wiz@gatalith.at diff --git a/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_source_win32w.3 b/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_source_win32w.3 new file mode 100644 index 0000000..6f33fd7 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_source_win32w.3 @@ -0,0 +1,119 @@ +.\" zip_source_win32w.mdoc -- create data source using a win32 Unicode name +.\" Copyright (C) 2015-2021 Dieter Baron and Thomas Klausner +.\" +.\" This file is part of libzip, a library to manipulate ZIP archives. +.\" The authors can be contacted at +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in +.\" the documentation and/or other materials provided with the +.\" distribution. +.\" 3. The names of the authors may not be used to endorse or promote +.\" products derived from this software without specific prior +.\" written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS +.\" OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +.\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +.\" DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE +.\" GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +.\" IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +.\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN +.\" IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.\" +.Dd June 30, 2023 +.Dt ZIP_SOURCE_WIN32W 3 +.Os +.Sh NAME +.Nm zip_source_win32w , +.Nm zip_source_win32w_create +.Nd create data source from a Windows Unicode file name +.Sh LIBRARY +libzip (-lzip) +.Sh SYNOPSIS +.In zip.h +.Ft zip_source_t * +.Fn zip_source_win32w "zip_t *archive" "const wchar_t *fname" "zip_uint64_t start" "zip_int64_t len" +.Ft zip_source_t * +.Fn zip_source_win32w_create "const wchar_t *fname" "zip_uint64_t start" "zip_int64_t len" "zip_error_t *error" +.Sh DESCRIPTION +The functions +.Fn zip_source_win32w +and +.Fn zip_source_win32w_create +create a zip source on Windows using a Windows Unicode name. +They open +.Ar fname +and read +.Ar len +bytes from offset +.Ar start +from it. +For a description of the +.Ar len +argument, see +.Xr zip_source_file 3 . +.Pp +If the file supports seek, the source can be used to open a zip archive from. +.Pp +The file is opened and read when the data from the source is used, usually by +.Fn zip_close +or +.Fn zip_open_from_source . +.Sh RETURN VALUES +Upon successful completion, the created source is returned. +Otherwise, +.Dv NULL +is returned and the error code in +.Ar archive +or +.Ar error +is set to indicate the error. +.Sh ERRORS +.Fn zip_source_win32w +and +.Fn zip_source_win32w_create +fail if: +.Bl -tag -width Er +.It Bq Er ZIP_ER_INVAL +.Ar fname , +.Ar start , +or +.Ar len +are invalid. +.It Bq Er ZIP_ER_MEMORY +Required memory could not be allocated. +.It Bq Er ZIP_ER_OPEN +Opening +.Ar fname +failed. +.El +.Sh SEE ALSO +.Xr libzip 3 , +.Xr zip_file_add 3 , +.Xr zip_file_replace 3 , +.Xr zip_source 3 , +.Xr zip_source_file 3 , +.Xr zip_source_win32a 3 , +.Xr zip_source_win32handle 3 +.Sh HISTORY +.Fn zip_source_win32w +was added in libzip 1.0. +.Pp +.Dv ZIP_LENGTH_TO_END +and +.Dv ZIP_LENGTH_UNCHECKED +were added in libzip 1.10.1. +.Sh AUTHORS +.An -nosplit +.An Dieter Baron Aq Mt dillo@nih.at +and +.An Thomas Klausner Aq Mt wiz@gatalith.at diff --git a/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_source_win32w_create.3 b/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_source_win32w_create.3 new file mode 100644 index 0000000..6f33fd7 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_source_win32w_create.3 @@ -0,0 +1,119 @@ +.\" zip_source_win32w.mdoc -- create data source using a win32 Unicode name +.\" Copyright (C) 2015-2021 Dieter Baron and Thomas Klausner +.\" +.\" This file is part of libzip, a library to manipulate ZIP archives. +.\" The authors can be contacted at +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in +.\" the documentation and/or other materials provided with the +.\" distribution. +.\" 3. The names of the authors may not be used to endorse or promote +.\" products derived from this software without specific prior +.\" written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS +.\" OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +.\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +.\" DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE +.\" GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +.\" IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +.\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN +.\" IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.\" +.Dd June 30, 2023 +.Dt ZIP_SOURCE_WIN32W 3 +.Os +.Sh NAME +.Nm zip_source_win32w , +.Nm zip_source_win32w_create +.Nd create data source from a Windows Unicode file name +.Sh LIBRARY +libzip (-lzip) +.Sh SYNOPSIS +.In zip.h +.Ft zip_source_t * +.Fn zip_source_win32w "zip_t *archive" "const wchar_t *fname" "zip_uint64_t start" "zip_int64_t len" +.Ft zip_source_t * +.Fn zip_source_win32w_create "const wchar_t *fname" "zip_uint64_t start" "zip_int64_t len" "zip_error_t *error" +.Sh DESCRIPTION +The functions +.Fn zip_source_win32w +and +.Fn zip_source_win32w_create +create a zip source on Windows using a Windows Unicode name. +They open +.Ar fname +and read +.Ar len +bytes from offset +.Ar start +from it. +For a description of the +.Ar len +argument, see +.Xr zip_source_file 3 . +.Pp +If the file supports seek, the source can be used to open a zip archive from. +.Pp +The file is opened and read when the data from the source is used, usually by +.Fn zip_close +or +.Fn zip_open_from_source . +.Sh RETURN VALUES +Upon successful completion, the created source is returned. +Otherwise, +.Dv NULL +is returned and the error code in +.Ar archive +or +.Ar error +is set to indicate the error. +.Sh ERRORS +.Fn zip_source_win32w +and +.Fn zip_source_win32w_create +fail if: +.Bl -tag -width Er +.It Bq Er ZIP_ER_INVAL +.Ar fname , +.Ar start , +or +.Ar len +are invalid. +.It Bq Er ZIP_ER_MEMORY +Required memory could not be allocated. +.It Bq Er ZIP_ER_OPEN +Opening +.Ar fname +failed. +.El +.Sh SEE ALSO +.Xr libzip 3 , +.Xr zip_file_add 3 , +.Xr zip_file_replace 3 , +.Xr zip_source 3 , +.Xr zip_source_file 3 , +.Xr zip_source_win32a 3 , +.Xr zip_source_win32handle 3 +.Sh HISTORY +.Fn zip_source_win32w +was added in libzip 1.0. +.Pp +.Dv ZIP_LENGTH_TO_END +and +.Dv ZIP_LENGTH_UNCHECKED +were added in libzip 1.10.1. +.Sh AUTHORS +.An -nosplit +.An Dieter Baron Aq Mt dillo@nih.at +and +.An Thomas Klausner Aq Mt wiz@gatalith.at diff --git a/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_source_window_create.3 b/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_source_window_create.3 new file mode 100644 index 0000000..4774491 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_source_window_create.3 @@ -0,0 +1,98 @@ +.\" zip_source_window_create.mdoc -- create zip data source overlay +.\" Copyright (C) 2021 Dieter Baron and Thomas Klausner +.\" +.\" This file is part of libzip, a library to manipulate ZIP archives. +.\" The authors can be contacted at +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in +.\" the documentation and/or other materials provided with the +.\" distribution. +.\" 3. The names of the authors may not be used to endorse or promote +.\" products derived from this software without specific prior +.\" written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS +.\" OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +.\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +.\" DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE +.\" GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +.\" IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +.\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN +.\" IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.\" +.Dd April 29, 2021 +.Dt ZIP_SOURCE_WINDOW_CREATE 3 +.Os +.Sh NAME +.Nm zip_source_window_create +.Nd create zip data source overlay +.Sh LIBRARY +libzip (-lzip) +.Sh SYNOPSIS +.In zip.h +.Ft zip_source_t * +.Fn zip_source_window_create "zip_source_t *source" "zip_uint64_t start" "zip_int64_t len" "zip_error_t *error" +.Sh DESCRIPTION +The +.Fn zip_source_window_create +function create a zip source from an underlying zip source, +restricting access to a particular window starting at byte +.Ar start +and having size +.Ar len . +If +.Ar len +is \-1, the window spans to the end of the underlying source. +.Pp +.Fn zip_source_window +and +.Fn zip_source_window_create +don't take ownership of +.Ar source . +The caller is responsible for freeing it. +(This is different to other layered sources.) +.Sh RETURN VALUES +Upon successful completion, the created source is returned. +Otherwise, +.Dv NULL +is returned and the error code in +.Ar error +is set to indicate the error. +.Sh ERRORS +.Fn zip_source_window_create +fails if: +.Bl -tag -width Er +.It Bq Er ZIP_ER_INVAL +.Ar src +is +.Dv NULL ; +there is an integer overflow adding +.Ar start +and +.Ar len ; +or +.Ar len +is less than \-1. +.It Bq Er ZIP_ER_MEMORY +Required memory could not be allocated. +.El +.Sh SEE ALSO +.Xr libzip 3 , +.Xr zip_source 3 +.Sh HISTORY +.Fn zip_source_window_create +was added in libzip 1.8.0. +.Sh AUTHORS +.An -nosplit +.An Dieter Baron Aq Mt dillo@nih.at +and +.An Thomas Klausner Aq Mt wiz@gatalith.at diff --git a/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_source_write.3 b/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_source_write.3 new file mode 100644 index 0000000..9b47082 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_source_write.3 @@ -0,0 +1,80 @@ +.\" zip_source_write.mdoc -- write data to zip source +.\" Copyright (C) 2014-2017 Dieter Baron and Thomas Klausner +.\" +.\" This file is part of libzip, a library to manipulate ZIP archives. +.\" The authors can be contacted at +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in +.\" the documentation and/or other materials provided with the +.\" distribution. +.\" 3. The names of the authors may not be used to endorse or promote +.\" products derived from this software without specific prior +.\" written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS +.\" OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +.\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +.\" DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE +.\" GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +.\" IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +.\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN +.\" IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.\" +.Dd December 18, 2017 +.Dt ZIP_SOURCE_WRITE 3 +.Os +.Sh NAME +.Nm zip_source_write +.Nd write data to zip source +.Sh LIBRARY +libzip (-lzip) +.Sh SYNOPSIS +.In zip.h +.Ft zip_int64_t +.Fn zip_source_write "zip_source_t *source" "const void *data" "zip_uint64_t len" +.Sh DESCRIPTION +The function +.Fn zip_source_write +writes +.Ar len +bytes from the buffer +.Ar data +to the zip source +.Ar source +at the current write offset. +.Pp +The zip source +.Ar source +has to be prepared for writing by calling +.Xr zip_source_begin_write 3 +first. +.Sh RETURN VALUES +Upon successful completion the number of bytes written is returned. +Otherwise, \-1 is returned and the error information in +.Ar source +is set to indicate the error. +.Sh SEE ALSO +.Xr libzip 3 , +.Xr zip_source 3 , +.Xr zip_source_begin_write 3 , +.Xr zip_source_commit_write 3 , +.Xr zip_source_rollback_write 3 , +.Xr zip_source_seek_write 3 , +.Xr zip_source_tell_write 3 +.Sh HISTORY +.Fn zip_source_write +was added in libzip 1.0. +.Sh AUTHORS +.An -nosplit +.An Dieter Baron Aq Mt dillo@nih.at +and +.An Thomas Klausner Aq Mt wiz@gatalith.at diff --git a/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_source_zip.3 b/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_source_zip.3 new file mode 100644 index 0000000..acc96bf --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_source_zip.3 @@ -0,0 +1,144 @@ +.\" zip_source_zip.mdoc -- create data source from zip file +.\" Copyright (C) 2004-2021 Dieter Baron and Thomas Klausner +.\" +.\" This file is part of libzip, a library to manipulate ZIP archives. +.\" The authors can be contacted at +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in +.\" the documentation and/or other materials provided with the +.\" distribution. +.\" 3. The names of the authors may not be used to endorse or promote +.\" products derived from this software without specific prior +.\" written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS +.\" OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +.\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +.\" DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE +.\" GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +.\" IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +.\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN +.\" IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.\" +.Dd January 23, 2023 +.Dt ZIP_SOURCE_ZIP 3 +.Os +.Sh NAME +.Nm zip_source_zip , +.Nm zip_source_zip_create +.Nd create data source from zip file (obsolete interface) +.Sh LIBRARY +libzip (-lzip) +.Sh SYNOPSIS +.In zip.h +.Ft zip_source_t * +.Fn zip_source_zip "zip_t *archive" "zip_t *srcarchive" "zip_uint64_t srcidx" "zip_flags_t flags" "zip_uint64_t start" "zip_int64_t len" +.Ft zip_source_t * +.Fn zip_source_zip_create "zip_t *srcarchive" "zip_uint64_t srcidx" "zip_flags_t flags" "zip_uint64_t start" "zip_int64_t len" "zip_error_t *error" +.Sh DESCRIPTION +The functions +.Fn zip_source_zip +and +.Fn zip_source_zip_create +are the obsolete versions of +.Xr zip_source_zip_file 3 +or +.Xr zip_source_zip_file_create 3 +respectively. +If you want to get the compressed data of the complete file, use +.Dl zip_source_zip_file(za, source_archive, source_index, ZIP_FL_COMPRESSED, 0, -1, NULL) +.Pp +The functions +.Fn zip_source_zip +and +.Fn zip_source_zip_create +create a zip source from a file in a zip archive. +The +.Ar srcarchive +argument is the (open) zip archive containing the source zip file +at index +.Ar srcidx . +.Ar len +bytes from offset +.Ar start +will be used in the zip_source. +If +.Ar len +is 0 or \-1, the rest of the file, starting from +.Ar start , +is used. +If +.Ar start +is zero and +.Ar len +is \-1, the whole file will be copied without decompressing it. +.Pp +Supported flags are: +.Bl -tag -width Dv +.It Dv ZIP_FL_UNCHANGED +Try to get the original data without any changes that may have been +made to +.Ar srcarchive +after opening it. +.El +.Sh RETURN VALUES +Upon successful completion, the created source is returned. +Otherwise, +.Dv NULL +is returned and the error code in +.Ar archive +or +.Ar error +is set to indicate the error. +.Sh ERRORS +.Fn zip_source_zip +and +.Fn zip_source_zip_create +fail if: +.Bl -tag -width Er +.It Bq Er ZIP_ER_CHANGED +Unchanged data was requested, but it is not available. +.It Bq Er ZIP_ER_INVAL +.Ar srcarchive , +.Ar srcidx , +.Ar start , +or +.Ar len +are invalid. +.It Bq Er ZIP_ER_MEMORY +Required memory could not be allocated. +.El +Additionally, it can return all error codes from +.Fn zip_stat_index +and +.Fn zip_fopen_index . +.Sh SEE ALSO +.Xr libzip 3 , +.Xr zip_file_add 3 , +.Xr zip_file_replace 3 , +.Xr zip_source 3 +.Sh HISTORY +.Fn zip_source_zip +was added in libzip 1.0. +.Fn zip_source_zip_create +was added in libzip 1.8.0. +Both were deprecated in libzip 1.10.0. +Use +.Fn zip_source_zip_file +or +.Fn zip_source_zip_file_create +instead. +.Sh AUTHORS +.An -nosplit +.An Dieter Baron Aq Mt dillo@nih.at +and +.An Thomas Klausner Aq Mt wiz@gatalith.at diff --git a/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_source_zip_create.3 b/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_source_zip_create.3 new file mode 100644 index 0000000..acc96bf --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_source_zip_create.3 @@ -0,0 +1,144 @@ +.\" zip_source_zip.mdoc -- create data source from zip file +.\" Copyright (C) 2004-2021 Dieter Baron and Thomas Klausner +.\" +.\" This file is part of libzip, a library to manipulate ZIP archives. +.\" The authors can be contacted at +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in +.\" the documentation and/or other materials provided with the +.\" distribution. +.\" 3. The names of the authors may not be used to endorse or promote +.\" products derived from this software without specific prior +.\" written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS +.\" OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +.\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +.\" DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE +.\" GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +.\" IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +.\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN +.\" IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.\" +.Dd January 23, 2023 +.Dt ZIP_SOURCE_ZIP 3 +.Os +.Sh NAME +.Nm zip_source_zip , +.Nm zip_source_zip_create +.Nd create data source from zip file (obsolete interface) +.Sh LIBRARY +libzip (-lzip) +.Sh SYNOPSIS +.In zip.h +.Ft zip_source_t * +.Fn zip_source_zip "zip_t *archive" "zip_t *srcarchive" "zip_uint64_t srcidx" "zip_flags_t flags" "zip_uint64_t start" "zip_int64_t len" +.Ft zip_source_t * +.Fn zip_source_zip_create "zip_t *srcarchive" "zip_uint64_t srcidx" "zip_flags_t flags" "zip_uint64_t start" "zip_int64_t len" "zip_error_t *error" +.Sh DESCRIPTION +The functions +.Fn zip_source_zip +and +.Fn zip_source_zip_create +are the obsolete versions of +.Xr zip_source_zip_file 3 +or +.Xr zip_source_zip_file_create 3 +respectively. +If you want to get the compressed data of the complete file, use +.Dl zip_source_zip_file(za, source_archive, source_index, ZIP_FL_COMPRESSED, 0, -1, NULL) +.Pp +The functions +.Fn zip_source_zip +and +.Fn zip_source_zip_create +create a zip source from a file in a zip archive. +The +.Ar srcarchive +argument is the (open) zip archive containing the source zip file +at index +.Ar srcidx . +.Ar len +bytes from offset +.Ar start +will be used in the zip_source. +If +.Ar len +is 0 or \-1, the rest of the file, starting from +.Ar start , +is used. +If +.Ar start +is zero and +.Ar len +is \-1, the whole file will be copied without decompressing it. +.Pp +Supported flags are: +.Bl -tag -width Dv +.It Dv ZIP_FL_UNCHANGED +Try to get the original data without any changes that may have been +made to +.Ar srcarchive +after opening it. +.El +.Sh RETURN VALUES +Upon successful completion, the created source is returned. +Otherwise, +.Dv NULL +is returned and the error code in +.Ar archive +or +.Ar error +is set to indicate the error. +.Sh ERRORS +.Fn zip_source_zip +and +.Fn zip_source_zip_create +fail if: +.Bl -tag -width Er +.It Bq Er ZIP_ER_CHANGED +Unchanged data was requested, but it is not available. +.It Bq Er ZIP_ER_INVAL +.Ar srcarchive , +.Ar srcidx , +.Ar start , +or +.Ar len +are invalid. +.It Bq Er ZIP_ER_MEMORY +Required memory could not be allocated. +.El +Additionally, it can return all error codes from +.Fn zip_stat_index +and +.Fn zip_fopen_index . +.Sh SEE ALSO +.Xr libzip 3 , +.Xr zip_file_add 3 , +.Xr zip_file_replace 3 , +.Xr zip_source 3 +.Sh HISTORY +.Fn zip_source_zip +was added in libzip 1.0. +.Fn zip_source_zip_create +was added in libzip 1.8.0. +Both were deprecated in libzip 1.10.0. +Use +.Fn zip_source_zip_file +or +.Fn zip_source_zip_file_create +instead. +.Sh AUTHORS +.An -nosplit +.An Dieter Baron Aq Mt dillo@nih.at +and +.An Thomas Klausner Aq Mt wiz@gatalith.at diff --git a/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_source_zip_file.3 b/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_source_zip_file.3 new file mode 100644 index 0000000..fee9d49 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_source_zip_file.3 @@ -0,0 +1,144 @@ +.\" zip_source_zip_file.mdoc -- create data source from zip file +.\" Copyright (C) 2004-2021 Dieter Baron and Thomas Klausner +.\" +.\" This file is part of libzip, a library to manipulate ZIP archives. +.\" The authors can be contacted at +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in +.\" the documentation and/or other materials provided with the +.\" distribution. +.\" 3. The names of the authors may not be used to endorse or promote +.\" products derived from this software without specific prior +.\" written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS +.\" OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +.\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +.\" DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE +.\" GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +.\" IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +.\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN +.\" IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.\" +.Dd March 10, 2023 +.Dt ZIP_SOURCE_ZIP_FILE 3 +.Os +.Sh NAME +.Nm zip_source_zip_file , +.Nm zip_source_zip_file_create +.Nd create data source from zip file +.Sh LIBRARY +libzip (-lzip) +.Sh SYNOPSIS +.In zip.h +.Ft zip_source_t * +.Fn zip_source_zip_file "zip_t *archive" "zip_t *srcarchive" "zip_uint64_t srcidx" "zip_flags_t flags" "zip_uint64_t start" "zip_int64_t length" "const char *password" +.Ft zip_source_t * +.Fn zip_source_zip_file_create "zip_t *srcarchive" "zip_uint64_t srcidx" "zip_flags_t flags" "zip_uint64_t start" "zip_int64_t length" "const char *password" "zip_error_t *error" +.Sh DESCRIPTION +The functions +.Fn zip_source_zip_file +and +.Fn zip_source_zip_file_create +create a zip source from a file in a zip archive. +The +.Ar srcarchive +argument is the (open) zip archive containing the source zip file +at index +.Ar srcidx . +.Ar length +bytes from offset +.Ar start +will be used in the zip_source. +If +.Ar length +is \-1, the rest of the file, starting from +.Ar start , +is used. +.Pp +If you intend to copy a file from one archive to another, using the flag +.Dv ZIP_FL_COMPRESSED +is more efficient, as it avoids recompressing the file data. +.Pp +Supported flags are: +.Bl -tag -width 20n +.It Dv ZIP_FL_COMPRESSED +Get the compressed data. +This is only supported if the complete file data is requested +.Ar ( start +== 0 and +.Ar length +== \-1). +This is not supported for changed data. +Default is uncompressed. +.It Dv ZIP_FL_ENCRYPTED +Get the encrypted data. +(This flag implies +.Dv ZIP_FL_COMPRESSED . ) +This is only supported if the complete file data is requested +.Ar ( start +== 0 and +.Ar length +== \-1). +Default is decrypted. +.It Dv ZIP_FL_UNCHANGED +Try to get the original data without any changes that may have been +made to +.Ar srcarchive +after opening it. +.El +.Sh RETURN VALUES +Upon successful completion, the created source is returned. +Otherwise, +.Dv NULL +is returned and the error code in +.Ar archive +or +.Ar error +is set to indicate the error. +.Sh ERRORS +.Fn zip_source_zip_file +and +.Fn zip_source_zip_file_create +fail if: +.Bl -tag -width Er +.It Bq Er ZIP_ER_CHANGED +Unchanged data was requested, but it is not available. +.It Bq Er ZIP_ER_INVAL +.Ar srcarchive , +.Ar srcidx , +.Ar start , +or +.Ar length +are invalid. +.It Bq Er ZIP_ER_MEMORY +Required memory could not be allocated. +.El +Additionally, it can return all error codes from +.Fn zip_stat_index +and +.Fn zip_fopen_index . +.Sh SEE ALSO +.Xr libzip 3 , +.Xr zip_file_add 3 , +.Xr zip_file_replace 3 , +.Xr zip_source 3 +.Sh HISTORY +.Fn zip_source_zip_file +and +.Fn zip_source_zip_file_create +were added in libzip 1.10.0. +.Sh AUTHORS +.An -nosplit +.An Dieter Baron Aq Mt dillo@nih.at +and +.An Thomas Klausner Aq Mt wiz@gatalith.at diff --git a/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_source_zip_file_create.3 b/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_source_zip_file_create.3 new file mode 100644 index 0000000..fee9d49 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_source_zip_file_create.3 @@ -0,0 +1,144 @@ +.\" zip_source_zip_file.mdoc -- create data source from zip file +.\" Copyright (C) 2004-2021 Dieter Baron and Thomas Klausner +.\" +.\" This file is part of libzip, a library to manipulate ZIP archives. +.\" The authors can be contacted at +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in +.\" the documentation and/or other materials provided with the +.\" distribution. +.\" 3. The names of the authors may not be used to endorse or promote +.\" products derived from this software without specific prior +.\" written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS +.\" OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +.\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +.\" DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE +.\" GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +.\" IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +.\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN +.\" IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.\" +.Dd March 10, 2023 +.Dt ZIP_SOURCE_ZIP_FILE 3 +.Os +.Sh NAME +.Nm zip_source_zip_file , +.Nm zip_source_zip_file_create +.Nd create data source from zip file +.Sh LIBRARY +libzip (-lzip) +.Sh SYNOPSIS +.In zip.h +.Ft zip_source_t * +.Fn zip_source_zip_file "zip_t *archive" "zip_t *srcarchive" "zip_uint64_t srcidx" "zip_flags_t flags" "zip_uint64_t start" "zip_int64_t length" "const char *password" +.Ft zip_source_t * +.Fn zip_source_zip_file_create "zip_t *srcarchive" "zip_uint64_t srcidx" "zip_flags_t flags" "zip_uint64_t start" "zip_int64_t length" "const char *password" "zip_error_t *error" +.Sh DESCRIPTION +The functions +.Fn zip_source_zip_file +and +.Fn zip_source_zip_file_create +create a zip source from a file in a zip archive. +The +.Ar srcarchive +argument is the (open) zip archive containing the source zip file +at index +.Ar srcidx . +.Ar length +bytes from offset +.Ar start +will be used in the zip_source. +If +.Ar length +is \-1, the rest of the file, starting from +.Ar start , +is used. +.Pp +If you intend to copy a file from one archive to another, using the flag +.Dv ZIP_FL_COMPRESSED +is more efficient, as it avoids recompressing the file data. +.Pp +Supported flags are: +.Bl -tag -width 20n +.It Dv ZIP_FL_COMPRESSED +Get the compressed data. +This is only supported if the complete file data is requested +.Ar ( start +== 0 and +.Ar length +== \-1). +This is not supported for changed data. +Default is uncompressed. +.It Dv ZIP_FL_ENCRYPTED +Get the encrypted data. +(This flag implies +.Dv ZIP_FL_COMPRESSED . ) +This is only supported if the complete file data is requested +.Ar ( start +== 0 and +.Ar length +== \-1). +Default is decrypted. +.It Dv ZIP_FL_UNCHANGED +Try to get the original data without any changes that may have been +made to +.Ar srcarchive +after opening it. +.El +.Sh RETURN VALUES +Upon successful completion, the created source is returned. +Otherwise, +.Dv NULL +is returned and the error code in +.Ar archive +or +.Ar error +is set to indicate the error. +.Sh ERRORS +.Fn zip_source_zip_file +and +.Fn zip_source_zip_file_create +fail if: +.Bl -tag -width Er +.It Bq Er ZIP_ER_CHANGED +Unchanged data was requested, but it is not available. +.It Bq Er ZIP_ER_INVAL +.Ar srcarchive , +.Ar srcidx , +.Ar start , +or +.Ar length +are invalid. +.It Bq Er ZIP_ER_MEMORY +Required memory could not be allocated. +.El +Additionally, it can return all error codes from +.Fn zip_stat_index +and +.Fn zip_fopen_index . +.Sh SEE ALSO +.Xr libzip 3 , +.Xr zip_file_add 3 , +.Xr zip_file_replace 3 , +.Xr zip_source 3 +.Sh HISTORY +.Fn zip_source_zip_file +and +.Fn zip_source_zip_file_create +were added in libzip 1.10.0. +.Sh AUTHORS +.An -nosplit +.An Dieter Baron Aq Mt dillo@nih.at +and +.An Thomas Klausner Aq Mt wiz@gatalith.at diff --git a/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_stat.3 b/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_stat.3 new file mode 100644 index 0000000..3ee9bbe --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_stat.3 @@ -0,0 +1,179 @@ +.\" zip_stat.mdoc -- get information about file +.\" Copyright (C) 2003-2017 Dieter Baron and Thomas Klausner +.\" +.\" This file is part of libzip, a library to manipulate ZIP archives. +.\" The authors can be contacted at +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in +.\" the documentation and/or other materials provided with the +.\" distribution. +.\" 3. The names of the authors may not be used to endorse or promote +.\" products derived from this software without specific prior +.\" written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS +.\" OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +.\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +.\" DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE +.\" GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +.\" IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +.\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN +.\" IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.\" +.Dd December 18, 2017 +.Dt ZIP_STAT 3 +.Os +.Sh NAME +.Nm zip_stat , +.Nm zip_stat_index +.Nd get information about file +.Sh LIBRARY +libzip (-lzip) +.Sh SYNOPSIS +.In zip.h +.Ft int +.Fn zip_stat "zip_t *archive" "const char *fname" "zip_flags_t flags" "zip_stat_t *sb" +.Ft int +.Fn zip_stat_index "zip_t *archive" "zip_uint64_t index" "zip_flags_t flags" "zip_stat_t *sb" +.Sh DESCRIPTION +The +.Fn zip_stat +function obtains information about the file named +.Ar fname +in +.Ar archive . +The +.Ar flags +argument specifies how the name lookup should be done. +Its values are described in +.Xr zip_name_locate 3 . +Also, +.Dv ZIP_FL_UNCHANGED +may be +.Em or Ns No 'ed +to it to request information about the original file in the archive, +ignoring any changes made. +.Pp +The +.Fn zip_stat_index +function obtains information about the file at position +.Ar index . +.Pp +The +.Ar sb +argument is a pointer to a +.Ft struct zip_stat +(shown below), into which information about the file is placed. +.Bd -literal +struct zip_stat { + zip_uint64_t valid; /* which fields have valid values */ + const char *name; /* name of the file */ + zip_uint64_t index; /* index within archive */ + zip_uint64_t size; /* size of file (uncompressed) */ + zip_uint64_t comp_size; /* size of file (compressed) */ + time_t mtime; /* modification time */ + zip_uint32_t crc; /* crc of file data */ + zip_uint16_t comp_method; /* compression method used */ + zip_uint16_t encryption_method; /* encryption method used */ + zip_uint32_t flags; /* reserved for future use */ +}; +.Ed +The structure pointed to by +.Ar sb +must be allocated before calling +.Fn zip_stat +or +.Fn zip_stat_index . +.Pp +The +.Ar valid +field of the structure specifies which other fields are valid. +Check if the flag defined by the following defines are in +.Ar valid +before accessing the fields: +.Bl -tag -width ZIP_STAT_ENCRYPTION_METHODXX -compact -offset indent +.It Dv ZIP_STAT_NAME +.Ar name +.It Dv ZIP_STAT_INDEX +.Ar index +.It Dv ZIP_STAT_SIZE +.Ar size +.It Dv ZIP_STAT_COMP_SIZE +.Ar comp_size +.It Dv ZIP_STAT_MTIME +.Ar mtime +.It Dv ZIP_STAT_CRC +.Ar crc +.It Dv ZIP_STAT_COMP_METHOD +.Ar comp_method +.It Dv ZIP_STAT_ENCRYPTION_METHOD +.Ar encryption_method +.It Dv ZIP_STAT_FLAGS +.Ar flags +.El +.Sh RETURN VALUES +Upon successful completion 0 is returned. +Otherwise, \-1 is returned and the error information in +.Ar archive +is set to indicate the error. +.Sh ERRORS +The function +.Fn zip_stat +can fail for any of the errors specified for the routine +.Xr zip_name_locate 3 . +.Pp +The function +.Fn zip_stat_index +fails and sets the error information to +.Er ZIP_ER_INVAL +if +.Ar index +is invalid. +If +.Dv ZIP_FL_UNCHANGED +is not set and no information can be obtained from the source +callback, the error information is set to +.Er ZIP_ER_CHANGED . +.Sh SEE ALSO +.Xr libzip 3 , +.Xr zip_get_num_entries 3 , +.Xr zip_name_locate 3 , +.Xr zip_stat_init 3 +.Sh HISTORY +.Fn zip_stat +was added in libzip 0.6. +In libzip 0.11 the type of +.Ar flags +was changed from +.Vt int +to +.Vt zip_flags_t . +.Pp +.Fn zip_stat_index +was added in libzip 0.6. +In libzip 0.10 the type of +.Ar index +was changed from +.Vt int +to +.Vt zip_uint64_t . +In libzip 0.11 the type of +.Ar flags +was changed from +.Vt int +to +.Vt zip_flags_t . +.Sh AUTHORS +.An -nosplit +.An Dieter Baron Aq Mt dillo@nih.at +and +.An Thomas Klausner Aq Mt wiz@gatalith.at diff --git a/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_stat_index.3 b/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_stat_index.3 new file mode 100644 index 0000000..3ee9bbe --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_stat_index.3 @@ -0,0 +1,179 @@ +.\" zip_stat.mdoc -- get information about file +.\" Copyright (C) 2003-2017 Dieter Baron and Thomas Klausner +.\" +.\" This file is part of libzip, a library to manipulate ZIP archives. +.\" The authors can be contacted at +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in +.\" the documentation and/or other materials provided with the +.\" distribution. +.\" 3. The names of the authors may not be used to endorse or promote +.\" products derived from this software without specific prior +.\" written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS +.\" OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +.\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +.\" DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE +.\" GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +.\" IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +.\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN +.\" IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.\" +.Dd December 18, 2017 +.Dt ZIP_STAT 3 +.Os +.Sh NAME +.Nm zip_stat , +.Nm zip_stat_index +.Nd get information about file +.Sh LIBRARY +libzip (-lzip) +.Sh SYNOPSIS +.In zip.h +.Ft int +.Fn zip_stat "zip_t *archive" "const char *fname" "zip_flags_t flags" "zip_stat_t *sb" +.Ft int +.Fn zip_stat_index "zip_t *archive" "zip_uint64_t index" "zip_flags_t flags" "zip_stat_t *sb" +.Sh DESCRIPTION +The +.Fn zip_stat +function obtains information about the file named +.Ar fname +in +.Ar archive . +The +.Ar flags +argument specifies how the name lookup should be done. +Its values are described in +.Xr zip_name_locate 3 . +Also, +.Dv ZIP_FL_UNCHANGED +may be +.Em or Ns No 'ed +to it to request information about the original file in the archive, +ignoring any changes made. +.Pp +The +.Fn zip_stat_index +function obtains information about the file at position +.Ar index . +.Pp +The +.Ar sb +argument is a pointer to a +.Ft struct zip_stat +(shown below), into which information about the file is placed. +.Bd -literal +struct zip_stat { + zip_uint64_t valid; /* which fields have valid values */ + const char *name; /* name of the file */ + zip_uint64_t index; /* index within archive */ + zip_uint64_t size; /* size of file (uncompressed) */ + zip_uint64_t comp_size; /* size of file (compressed) */ + time_t mtime; /* modification time */ + zip_uint32_t crc; /* crc of file data */ + zip_uint16_t comp_method; /* compression method used */ + zip_uint16_t encryption_method; /* encryption method used */ + zip_uint32_t flags; /* reserved for future use */ +}; +.Ed +The structure pointed to by +.Ar sb +must be allocated before calling +.Fn zip_stat +or +.Fn zip_stat_index . +.Pp +The +.Ar valid +field of the structure specifies which other fields are valid. +Check if the flag defined by the following defines are in +.Ar valid +before accessing the fields: +.Bl -tag -width ZIP_STAT_ENCRYPTION_METHODXX -compact -offset indent +.It Dv ZIP_STAT_NAME +.Ar name +.It Dv ZIP_STAT_INDEX +.Ar index +.It Dv ZIP_STAT_SIZE +.Ar size +.It Dv ZIP_STAT_COMP_SIZE +.Ar comp_size +.It Dv ZIP_STAT_MTIME +.Ar mtime +.It Dv ZIP_STAT_CRC +.Ar crc +.It Dv ZIP_STAT_COMP_METHOD +.Ar comp_method +.It Dv ZIP_STAT_ENCRYPTION_METHOD +.Ar encryption_method +.It Dv ZIP_STAT_FLAGS +.Ar flags +.El +.Sh RETURN VALUES +Upon successful completion 0 is returned. +Otherwise, \-1 is returned and the error information in +.Ar archive +is set to indicate the error. +.Sh ERRORS +The function +.Fn zip_stat +can fail for any of the errors specified for the routine +.Xr zip_name_locate 3 . +.Pp +The function +.Fn zip_stat_index +fails and sets the error information to +.Er ZIP_ER_INVAL +if +.Ar index +is invalid. +If +.Dv ZIP_FL_UNCHANGED +is not set and no information can be obtained from the source +callback, the error information is set to +.Er ZIP_ER_CHANGED . +.Sh SEE ALSO +.Xr libzip 3 , +.Xr zip_get_num_entries 3 , +.Xr zip_name_locate 3 , +.Xr zip_stat_init 3 +.Sh HISTORY +.Fn zip_stat +was added in libzip 0.6. +In libzip 0.11 the type of +.Ar flags +was changed from +.Vt int +to +.Vt zip_flags_t . +.Pp +.Fn zip_stat_index +was added in libzip 0.6. +In libzip 0.10 the type of +.Ar index +was changed from +.Vt int +to +.Vt zip_uint64_t . +In libzip 0.11 the type of +.Ar flags +was changed from +.Vt int +to +.Vt zip_flags_t . +.Sh AUTHORS +.An -nosplit +.An Dieter Baron Aq Mt dillo@nih.at +and +.An Thomas Klausner Aq Mt wiz@gatalith.at diff --git a/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_stat_init.3 b/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_stat_init.3 new file mode 100644 index 0000000..afa38ec --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_stat_init.3 @@ -0,0 +1,76 @@ +.\" zip_stat_init.mdoc -- init zip_stat structure +.\" Copyright (C) 2006-2017 Dieter Baron and Thomas Klausner +.\" +.\" This file is part of libzip, a library to manipulate ZIP archives. +.\" The authors can be contacted at +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in +.\" the documentation and/or other materials provided with the +.\" distribution. +.\" 3. The names of the authors may not be used to endorse or promote +.\" products derived from this software without specific prior +.\" written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS +.\" OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +.\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +.\" DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE +.\" GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +.\" IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +.\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN +.\" IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.\" +.Dd December 18, 2017 +.Dt ZIP_STAT_INIT 3 +.Os +.Sh NAME +.Nm zip_stat_init +.Nd initialize zip_stat structure +.Sh LIBRARY +libzip (-lzip) +.Sh SYNOPSIS +.In zip.h +.Ft void +.Fn zip_stat_init "zip_stat_t *sb" +.Sh DESCRIPTION +The +.Fn zip_stat_init +function initializes the members of a struct zip_stat. +The current members are described in +.Xr zip_stat 3 , +but this function should be used to initialize it to +make sure none are missed. +The structure pointed to by +.Ar sb +must be allocated before calling +.Fn zip_stat_init . +.Pp +This function should be used by functions provided to +.Xr zip_source_function 3 +when returning +.Dv ZIP_SOURCE_STAT +information to make sure all fields are initialized. +.Sh RETURN VALUES +If +.Ar sb +is valid, the function is always successful. +.Sh SEE ALSO +.Xr libzip 3 , +.Xr zip_stat 3 +.Sh HISTORY +.Fn zip_stat_init +was added in libzip 0.8. +.Sh AUTHORS +.An -nosplit +.An Dieter Baron Aq Mt dillo@nih.at +and +.An Thomas Klausner Aq Mt wiz@gatalith.at diff --git a/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_strerror.3 b/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_strerror.3 new file mode 100644 index 0000000..498fcc2 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_strerror.3 @@ -0,0 +1,85 @@ +.\" zip_file_strerror.mdoc -- get string representation for a zip error +.\" Copyright (C) 2003-2021 Dieter Baron and Thomas Klausner +.\" +.\" This file is part of libzip, a library to manipulate ZIP archives. +.\" The authors can be contacted at +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in +.\" the documentation and/or other materials provided with the +.\" distribution. +.\" 3. The names of the authors may not be used to endorse or promote +.\" products derived from this software without specific prior +.\" written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS +.\" OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +.\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +.\" DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE +.\" GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +.\" IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +.\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN +.\" IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.\" +.Dd December 18, 2017 +.Dt ZIP_FILE_STRERROR 3 +.Os +.Sh NAME +.Nm zip_file_strerror , +.Nm zip_strerror +.Nd get string representation for a zip error +.Sh LIBRARY +libzip (-lzip) +.Sh SYNOPSIS +.In zip.h +.Ft const char * +.Fn zip_file_strerror "zip_file_t *file" +.Ft const char * +.Fn zip_strerror "zip_t *archive" +.Sh DESCRIPTION +The +.Fn zip_strerror +function returns a string describing the last error for the zip archive +.Ar archive , +while the +.Fn zip_file_strerror +function does the same for a zip file +.Ar file +(one file in an archive). +The returned string must not be modified or freed, and becomes invalid when +.Ar archive +or +.Ar file , +respectively, +is closed or on the next call to +.Fn zip_strerror +or +.Fn zip_file_strerror , +respectively, +for the same archive. +.Sh RETURN VALUES +.Fn zip_file_strerror +and +.Fn zip_strerror +return a pointer to the error string. +.Sh SEE ALSO +.Xr libzip 3 , +.Xr zip_error_strerror 3 +.Sh HISTORY +.Fn zip_file_strerror +and +.Fn zip_strerror +were added in libzip 0.6. +.Sh AUTHORS +.An -nosplit +.An Dieter Baron Aq Mt dillo@nih.at +and +.An Thomas Klausner Aq Mt wiz@gatalith.at diff --git a/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_unchange.3 b/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_unchange.3 new file mode 100644 index 0000000..4867243 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_unchange.3 @@ -0,0 +1,81 @@ +.\" zip_unchange.mdoc -- undo changes to file in zip archive +.\" Copyright (C) 2003-2017 Dieter Baron and Thomas Klausner +.\" +.\" This file is part of libzip, a library to manipulate ZIP archives. +.\" The authors can be contacted at +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in +.\" the documentation and/or other materials provided with the +.\" distribution. +.\" 3. The names of the authors may not be used to endorse or promote +.\" products derived from this software without specific prior +.\" written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS +.\" OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +.\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +.\" DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE +.\" GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +.\" IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +.\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN +.\" IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.\" +.Dd December 18, 2017 +.Dt ZIP_UNCHANGE 3 +.Os +.Sh NAME +.Nm zip_unchange +.Nd undo changes to file in zip archive +.Sh LIBRARY +libzip (-lzip) +.Sh SYNOPSIS +.In zip.h +.Ft int +.Fn zip_unchange "zip_t *archive" "zip_uint64_t index" +.Sh DESCRIPTION +Changes to the file at position +.Ar index +are reverted. +.Sh RETURN VALUES +Upon successful completion 0 is returned. +Otherwise, \-1 is returned and the error code in +.Ar archive +is set to indicate the error. +.Sh ERRORS +.Fn zip_unchange +fails if: +.Bl -tag -width Er +.It Bq Er ZIP_ER_EXISTS +Unchanging the name would result in a duplicate name in the archive. +.It Bq Er ZIP_ER_INVAL +.Ar index +is not a valid file index in +.Ar zip . +.El +.Sh SEE ALSO +.Xr libzip 3 , +.Xr zip_unchange_all 3 , +.Xr zip_unchange_archive 3 +.Sh HISTORY +.Fn zip_unchange +was added in libzip 0.6. +In libzip 0.10 the type of +.Ar index +was changed from +.Vt int +to +.Vt zip_uint64_t . +.Sh AUTHORS +.An -nosplit +.An Dieter Baron Aq Mt dillo@nih.at +and +.An Thomas Klausner Aq Mt wiz@gatalith.at diff --git a/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_unchange_all.3 b/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_unchange_all.3 new file mode 100644 index 0000000..7604165 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_unchange_all.3 @@ -0,0 +1,64 @@ +.\" zip_unchange_all.mdoc -- undo changes to all files in zip archive +.\" Copyright (C) 2003-2017 Dieter Baron and Thomas Klausner +.\" +.\" This file is part of libzip, a library to manipulate ZIP archives. +.\" The authors can be contacted at +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in +.\" the documentation and/or other materials provided with the +.\" distribution. +.\" 3. The names of the authors may not be used to endorse or promote +.\" products derived from this software without specific prior +.\" written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS +.\" OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +.\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +.\" DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE +.\" GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +.\" IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +.\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN +.\" IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.\" +.Dd December 18, 2017 +.Dt ZIP_UNCHANGE_ALL 3 +.Os +.Sh NAME +.Nm zip_unchange_all +.Nd undo all changes in a zip archive +.Sh LIBRARY +libzip (-lzip) +.Sh SYNOPSIS +.In zip.h +.Ft int +.Fn zip_unchange_all "zip_t *archive" +.Sh DESCRIPTION +All changes to files and global information in +.Ar archive +are reverted. +.Sh RETURN VALUES +Upon successful completion 0 is returned. +Otherwise, \-1 is returned and the error code in +.Ar archive +is set to indicate the error. +.Sh SEE ALSO +.Xr libzip 3 , +.Xr zip_unchange 3 , +.Xr zip_unchange_archive 3 +.Sh HISTORY +.Fn zip_unchange_all +was added in libzip 0.6. +.Sh AUTHORS +.An -nosplit +.An Dieter Baron Aq Mt dillo@nih.at +and +.An Thomas Klausner Aq Mt wiz@gatalith.at diff --git a/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_unchange_archive.3 b/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_unchange_archive.3 new file mode 100644 index 0000000..45a3c82 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_unchange_archive.3 @@ -0,0 +1,64 @@ +.\" zip_unchange_archive.mdoc -- undo changes to all files in zip archive +.\" Copyright (C) 2006-2017 Dieter Baron and Thomas Klausner +.\" +.\" This file is part of libzip, a library to manipulate ZIP archives. +.\" The authors can be contacted at +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in +.\" the documentation and/or other materials provided with the +.\" distribution. +.\" 3. The names of the authors may not be used to endorse or promote +.\" products derived from this software without specific prior +.\" written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS +.\" OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +.\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +.\" DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE +.\" GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +.\" IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +.\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN +.\" IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.\" +.Dd December 18, 2017 +.Dt ZIP_UNCHANGE_ARCHIVE 3 +.Os +.Sh NAME +.Nm zip_unchange_archive +.Nd undo global changes to zip archive +.Sh LIBRARY +libzip (-lzip) +.Sh SYNOPSIS +.In zip.h +.Ft int +.Fn zip_unchange_archive "zip_t *archive" +.Sh DESCRIPTION +Revert all global changes to the archive +.Ar archive . +This reverts changes to the archive comment and global flags. +.Sh RETURN VALUES +Upon successful completion 0 is returned. +Otherwise, \-1 is returned and the error code in +.Ar archive +is set to indicate the error. +.Sh SEE ALSO +.Xr libzip 3 , +.Xr zip_unchange 3 , +.Xr zip_unchange_all 3 +.Sh HISTORY +.Fn zip_unchange_archive +was added in libzip 0.7. +.Sh AUTHORS +.An -nosplit +.An Dieter Baron Aq Mt dillo@nih.at +and +.An Thomas Klausner Aq Mt wiz@gatalith.at diff --git a/thirdparty/libzip-1.11.3/build-emcmake/install_manifest.txt b/thirdparty/libzip-1.11.3/build-emcmake/install_manifest.txt new file mode 100644 index 0000000..4b20be1 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/install_manifest.txt @@ -0,0 +1,146 @@ +/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/install/lib/pkgconfig/libzip.pc +/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/install/lib/cmake/libzip/modules/FindNettle.cmake +/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/install/lib/cmake/libzip/modules/Findzstd.cmake +/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/install/lib/cmake/libzip/modules/FindMbedTLS.cmake +/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/install/include/zipconf.h +/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/install/lib/cmake/libzip/libzip-config.cmake +/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/install/lib/cmake/libzip/libzip-config-version.cmake +/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/install/lib/cmake/libzip/libzip-targets.cmake +/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/install/lib/cmake/libzip/libzip-targets-noconfig.cmake +/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/install/lib/libzip.a +/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/install/include/zip.h +/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/ZIP_SOURCE_GET_ARGS.3 +/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/libzip.3 +/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_add.3 +/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_add_dir.3 +/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_close.3 +/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_compression_method_supported.3 +/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_delete.3 +/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_dir_add.3 +/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_discard.3 +/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_encryption_method_supported.3 +/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_error_clear.3 +/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_error_code_system.3 +/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_error_code_zip.3 +/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_error_fini.3 +/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_error_get.3 +/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_error_get_sys_type.3 +/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_error_init.3 +/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_error_set.3 +/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_error_set_from_source.3 +/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_error_strerror.3 +/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_error_system_type.3 +/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_error_to_data.3 +/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_error_to_str.3 +/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_errors.3 +/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_fclose.3 +/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_fdopen.3 +/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_file_add.3 +/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_file_attributes_init.3 +/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_file_extra_field_delete.3 +/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_file_extra_field_get.3 +/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_file_extra_field_set.3 +/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_file_extra_fields_count.3 +/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_file_get_comment.3 +/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_file_get_error.3 +/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_file_get_external_attributes.3 +/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_file_rename.3 +/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_file_set_comment.3 +/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_file_set_encryption.3 +/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_file_set_external_attributes.3 +/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_file_set_mtime.3 +/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_file_strerror.3 +/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_fopen.3 +/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_fopen_encrypted.3 +/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_fread.3 +/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_fseek.3 +/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_ftell.3 +/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_get_archive_comment.3 +/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_get_archive_flag.3 +/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_get_error.3 +/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_get_file_comment.3 +/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_get_name.3 +/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_get_num_entries.3 +/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_get_num_files.3 +/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_libzip_version.3 +/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_name_locate.3 +/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_open.3 +/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_register_cancel_callback_with_state.3 +/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_register_progress_callback.3 +/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_register_progress_callback_with_state.3 +/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_rename.3 +/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_set_archive_comment.3 +/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_set_archive_flag.3 +/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_set_default_password.3 +/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_set_file_comment.3 +/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_set_file_compression.3 +/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_source.3 +/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_source_begin_write.3 +/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_source_buffer.3 +/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_source_buffer_fragment.3 +/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_source_close.3 +/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_source_commit_write.3 +/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_source_error.3 +/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_source_file.3 +/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_source_filep.3 +/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_source_free.3 +/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_source_function.3 +/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_source_is_deleted.3 +/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_source_is_seekable.3 +/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_source_layered.3 +/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_source_keep.3 +/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_source_make_command_bitmap.3 +/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_source_open.3 +/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_source_read.3 +/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_source_rollback_write.3 +/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_source_seek.3 +/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_source_seek_compute_offset.3 +/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_source_seek_write.3 +/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_source_stat.3 +/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_source_tell.3 +/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_source_tell_write.3 +/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_source_win32a.3 +/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_source_win32handle.3 +/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_source_win32w.3 +/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_source_window_create.3 +/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_source_write.3 +/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_source_zip.3 +/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_source_zip_file.3 +/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_stat.3 +/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_stat_init.3 +/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_unchange.3 +/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_unchange_all.3 +/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_unchange_archive.3 +/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man1/zipcmp.1 +/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man1/zipmerge.1 +/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man1/ziptool.1 +/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_replace.3 +/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_file_error_clear.3 +/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_file_error_get.3 +/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_error_init_with_code.3 +/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_file_replace.3 +/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_file_extra_field_delete_by_id.3 +/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_file_extra_field_get_by_id.3 +/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_file_extra_fields_count_by_id.3 +/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_file_set_dostime.3 +/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_strerror.3 +/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_fopen_index.3 +/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_fopen_index_encrypted.3 +/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_file_is_seekable.3 +/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_open_from_source.3 +/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_source_begin_write_cloning.3 +/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_source_buffer_create.3 +/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_source_buffer_fragment_create.3 +/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_source_file_create.3 +/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_source_filep_create.3 +/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_source_function_create.3 +/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_source_layered_create.3 +/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_source_win32a_create.3 +/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_source_win32handle_create.3 +/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_source_win32w_create.3 +/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_source_zip_create.3 +/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_source_zip_file_create.3 +/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/install/share/man/man3/zip_stat_index.3 +/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/install/bin/zipcmp.js +/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/install/bin/zipmerge.js +/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/install/bin/ziptool.js \ No newline at end of file diff --git a/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/CMakeDirectoryInformation.cmake b/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/CMakeDirectoryInformation.cmake new file mode 100644 index 0000000..ea55061 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/CMakeDirectoryInformation.cmake @@ -0,0 +1,16 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.28 + +# Relative path conversion top directories. +set(CMAKE_RELATIVE_PATH_TOP_SOURCE "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3") +set(CMAKE_RELATIVE_PATH_TOP_BINARY "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake") + +# Force unix paths in dependencies. +set(CMAKE_FORCE_UNIX_PATHS 1) + + +# The C and CXX include file regular expressions for this directory. +set(CMAKE_C_INCLUDE_REGEX_SCAN "^.*$") +set(CMAKE_C_INCLUDE_REGEX_COMPLAIN "^$") +set(CMAKE_CXX_INCLUDE_REGEX_SCAN ${CMAKE_C_INCLUDE_REGEX_SCAN}) +set(CMAKE_CXX_INCLUDE_REGEX_COMPLAIN ${CMAKE_C_INCLUDE_REGEX_COMPLAIN}) diff --git a/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/progress.marks b/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/progress.marks new file mode 100644 index 0000000..7273c0f --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/progress.marks @@ -0,0 +1 @@ +25 diff --git a/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/DependInfo.cmake b/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/DependInfo.cmake new file mode 100644 index 0000000..7329606 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/DependInfo.cmake @@ -0,0 +1,135 @@ + +# Consider dependencies only in project. +set(CMAKE_DEPENDS_IN_PROJECT_ONLY OFF) + +# The set of languages for which implicit dependencies are needed: +set(CMAKE_DEPENDS_LANGUAGES + ) + +# The set of dependency files which are needed: +set(CMAKE_DEPENDS_DEPENDENCY_FILES + "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_add.c" "lib/CMakeFiles/zip.dir/zip_add.c.o" "gcc" "lib/CMakeFiles/zip.dir/zip_add.c.o.d" + "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_add_dir.c" "lib/CMakeFiles/zip.dir/zip_add_dir.c.o" "gcc" "lib/CMakeFiles/zip.dir/zip_add_dir.c.o.d" + "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_add_entry.c" "lib/CMakeFiles/zip.dir/zip_add_entry.c.o" "gcc" "lib/CMakeFiles/zip.dir/zip_add_entry.c.o.d" + "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_algorithm_deflate.c" "lib/CMakeFiles/zip.dir/zip_algorithm_deflate.c.o" "gcc" "lib/CMakeFiles/zip.dir/zip_algorithm_deflate.c.o.d" + "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_buffer.c" "lib/CMakeFiles/zip.dir/zip_buffer.c.o" "gcc" "lib/CMakeFiles/zip.dir/zip_buffer.c.o.d" + "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_close.c" "lib/CMakeFiles/zip.dir/zip_close.c.o" "gcc" "lib/CMakeFiles/zip.dir/zip_close.c.o.d" + "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_delete.c" "lib/CMakeFiles/zip.dir/zip_delete.c.o" "gcc" "lib/CMakeFiles/zip.dir/zip_delete.c.o.d" + "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_dir_add.c" "lib/CMakeFiles/zip.dir/zip_dir_add.c.o" "gcc" "lib/CMakeFiles/zip.dir/zip_dir_add.c.o.d" + "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_dirent.c" "lib/CMakeFiles/zip.dir/zip_dirent.c.o" "gcc" "lib/CMakeFiles/zip.dir/zip_dirent.c.o.d" + "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_discard.c" "lib/CMakeFiles/zip.dir/zip_discard.c.o" "gcc" "lib/CMakeFiles/zip.dir/zip_discard.c.o.d" + "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_entry.c" "lib/CMakeFiles/zip.dir/zip_entry.c.o" "gcc" "lib/CMakeFiles/zip.dir/zip_entry.c.o.d" + "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib/zip_err_str.c" "lib/CMakeFiles/zip.dir/zip_err_str.c.o" "gcc" "lib/CMakeFiles/zip.dir/zip_err_str.c.o.d" + "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_error.c" "lib/CMakeFiles/zip.dir/zip_error.c.o" "gcc" "lib/CMakeFiles/zip.dir/zip_error.c.o.d" + "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_error_clear.c" "lib/CMakeFiles/zip.dir/zip_error_clear.c.o" "gcc" "lib/CMakeFiles/zip.dir/zip_error_clear.c.o.d" + "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_error_get.c" "lib/CMakeFiles/zip.dir/zip_error_get.c.o" "gcc" "lib/CMakeFiles/zip.dir/zip_error_get.c.o.d" + "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_error_get_sys_type.c" "lib/CMakeFiles/zip.dir/zip_error_get_sys_type.c.o" "gcc" "lib/CMakeFiles/zip.dir/zip_error_get_sys_type.c.o.d" + "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_error_strerror.c" "lib/CMakeFiles/zip.dir/zip_error_strerror.c.o" "gcc" "lib/CMakeFiles/zip.dir/zip_error_strerror.c.o.d" + "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_error_to_str.c" "lib/CMakeFiles/zip.dir/zip_error_to_str.c.o" "gcc" "lib/CMakeFiles/zip.dir/zip_error_to_str.c.o.d" + "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_extra_field.c" "lib/CMakeFiles/zip.dir/zip_extra_field.c.o" "gcc" "lib/CMakeFiles/zip.dir/zip_extra_field.c.o.d" + "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_extra_field_api.c" "lib/CMakeFiles/zip.dir/zip_extra_field_api.c.o" "gcc" "lib/CMakeFiles/zip.dir/zip_extra_field_api.c.o.d" + "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_fclose.c" "lib/CMakeFiles/zip.dir/zip_fclose.c.o" "gcc" "lib/CMakeFiles/zip.dir/zip_fclose.c.o.d" + "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_fdopen.c" "lib/CMakeFiles/zip.dir/zip_fdopen.c.o" "gcc" "lib/CMakeFiles/zip.dir/zip_fdopen.c.o.d" + "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_file_add.c" "lib/CMakeFiles/zip.dir/zip_file_add.c.o" "gcc" "lib/CMakeFiles/zip.dir/zip_file_add.c.o.d" + "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_file_error_clear.c" "lib/CMakeFiles/zip.dir/zip_file_error_clear.c.o" "gcc" "lib/CMakeFiles/zip.dir/zip_file_error_clear.c.o.d" + "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_file_error_get.c" "lib/CMakeFiles/zip.dir/zip_file_error_get.c.o" "gcc" "lib/CMakeFiles/zip.dir/zip_file_error_get.c.o.d" + "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_file_get_comment.c" "lib/CMakeFiles/zip.dir/zip_file_get_comment.c.o" "gcc" "lib/CMakeFiles/zip.dir/zip_file_get_comment.c.o.d" + "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_file_get_external_attributes.c" "lib/CMakeFiles/zip.dir/zip_file_get_external_attributes.c.o" "gcc" "lib/CMakeFiles/zip.dir/zip_file_get_external_attributes.c.o.d" + "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_file_get_offset.c" "lib/CMakeFiles/zip.dir/zip_file_get_offset.c.o" "gcc" "lib/CMakeFiles/zip.dir/zip_file_get_offset.c.o.d" + "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_file_rename.c" "lib/CMakeFiles/zip.dir/zip_file_rename.c.o" "gcc" "lib/CMakeFiles/zip.dir/zip_file_rename.c.o.d" + "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_file_replace.c" "lib/CMakeFiles/zip.dir/zip_file_replace.c.o" "gcc" "lib/CMakeFiles/zip.dir/zip_file_replace.c.o.d" + "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_file_set_comment.c" "lib/CMakeFiles/zip.dir/zip_file_set_comment.c.o" "gcc" "lib/CMakeFiles/zip.dir/zip_file_set_comment.c.o.d" + "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_file_set_encryption.c" "lib/CMakeFiles/zip.dir/zip_file_set_encryption.c.o" "gcc" "lib/CMakeFiles/zip.dir/zip_file_set_encryption.c.o.d" + "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_file_set_external_attributes.c" "lib/CMakeFiles/zip.dir/zip_file_set_external_attributes.c.o" "gcc" "lib/CMakeFiles/zip.dir/zip_file_set_external_attributes.c.o.d" + "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_file_set_mtime.c" "lib/CMakeFiles/zip.dir/zip_file_set_mtime.c.o" "gcc" "lib/CMakeFiles/zip.dir/zip_file_set_mtime.c.o.d" + "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_file_strerror.c" "lib/CMakeFiles/zip.dir/zip_file_strerror.c.o" "gcc" "lib/CMakeFiles/zip.dir/zip_file_strerror.c.o.d" + "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_fopen.c" "lib/CMakeFiles/zip.dir/zip_fopen.c.o" "gcc" "lib/CMakeFiles/zip.dir/zip_fopen.c.o.d" + "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_fopen_encrypted.c" "lib/CMakeFiles/zip.dir/zip_fopen_encrypted.c.o" "gcc" "lib/CMakeFiles/zip.dir/zip_fopen_encrypted.c.o.d" + "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_fopen_index.c" "lib/CMakeFiles/zip.dir/zip_fopen_index.c.o" "gcc" "lib/CMakeFiles/zip.dir/zip_fopen_index.c.o.d" + "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_fopen_index_encrypted.c" "lib/CMakeFiles/zip.dir/zip_fopen_index_encrypted.c.o" "gcc" "lib/CMakeFiles/zip.dir/zip_fopen_index_encrypted.c.o.d" + "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_fread.c" "lib/CMakeFiles/zip.dir/zip_fread.c.o" "gcc" "lib/CMakeFiles/zip.dir/zip_fread.c.o.d" + "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_fseek.c" "lib/CMakeFiles/zip.dir/zip_fseek.c.o" "gcc" "lib/CMakeFiles/zip.dir/zip_fseek.c.o.d" + "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_ftell.c" "lib/CMakeFiles/zip.dir/zip_ftell.c.o" "gcc" "lib/CMakeFiles/zip.dir/zip_ftell.c.o.d" + "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_get_archive_comment.c" "lib/CMakeFiles/zip.dir/zip_get_archive_comment.c.o" "gcc" "lib/CMakeFiles/zip.dir/zip_get_archive_comment.c.o.d" + "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_get_archive_flag.c" "lib/CMakeFiles/zip.dir/zip_get_archive_flag.c.o" "gcc" "lib/CMakeFiles/zip.dir/zip_get_archive_flag.c.o.d" + "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_get_encryption_implementation.c" "lib/CMakeFiles/zip.dir/zip_get_encryption_implementation.c.o" "gcc" "lib/CMakeFiles/zip.dir/zip_get_encryption_implementation.c.o.d" + "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_get_file_comment.c" "lib/CMakeFiles/zip.dir/zip_get_file_comment.c.o" "gcc" "lib/CMakeFiles/zip.dir/zip_get_file_comment.c.o.d" + "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_get_name.c" "lib/CMakeFiles/zip.dir/zip_get_name.c.o" "gcc" "lib/CMakeFiles/zip.dir/zip_get_name.c.o.d" + "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_get_num_entries.c" "lib/CMakeFiles/zip.dir/zip_get_num_entries.c.o" "gcc" "lib/CMakeFiles/zip.dir/zip_get_num_entries.c.o.d" + "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_get_num_files.c" "lib/CMakeFiles/zip.dir/zip_get_num_files.c.o" "gcc" "lib/CMakeFiles/zip.dir/zip_get_num_files.c.o.d" + "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_hash.c" "lib/CMakeFiles/zip.dir/zip_hash.c.o" "gcc" "lib/CMakeFiles/zip.dir/zip_hash.c.o.d" + "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_io_util.c" "lib/CMakeFiles/zip.dir/zip_io_util.c.o" "gcc" "lib/CMakeFiles/zip.dir/zip_io_util.c.o.d" + "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_libzip_version.c" "lib/CMakeFiles/zip.dir/zip_libzip_version.c.o" "gcc" "lib/CMakeFiles/zip.dir/zip_libzip_version.c.o.d" + "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_memdup.c" "lib/CMakeFiles/zip.dir/zip_memdup.c.o" "gcc" "lib/CMakeFiles/zip.dir/zip_memdup.c.o.d" + "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_name_locate.c" "lib/CMakeFiles/zip.dir/zip_name_locate.c.o" "gcc" "lib/CMakeFiles/zip.dir/zip_name_locate.c.o.d" + "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_new.c" "lib/CMakeFiles/zip.dir/zip_new.c.o" "gcc" "lib/CMakeFiles/zip.dir/zip_new.c.o.d" + "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_open.c" "lib/CMakeFiles/zip.dir/zip_open.c.o" "gcc" "lib/CMakeFiles/zip.dir/zip_open.c.o.d" + "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_pkware.c" "lib/CMakeFiles/zip.dir/zip_pkware.c.o" "gcc" "lib/CMakeFiles/zip.dir/zip_pkware.c.o.d" + "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_progress.c" "lib/CMakeFiles/zip.dir/zip_progress.c.o" "gcc" "lib/CMakeFiles/zip.dir/zip_progress.c.o.d" + "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_random_unix.c" "lib/CMakeFiles/zip.dir/zip_random_unix.c.o" "gcc" "lib/CMakeFiles/zip.dir/zip_random_unix.c.o.d" + "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_rename.c" "lib/CMakeFiles/zip.dir/zip_rename.c.o" "gcc" "lib/CMakeFiles/zip.dir/zip_rename.c.o.d" + "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_replace.c" "lib/CMakeFiles/zip.dir/zip_replace.c.o" "gcc" "lib/CMakeFiles/zip.dir/zip_replace.c.o.d" + "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_set_archive_comment.c" "lib/CMakeFiles/zip.dir/zip_set_archive_comment.c.o" "gcc" "lib/CMakeFiles/zip.dir/zip_set_archive_comment.c.o.d" + "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_set_archive_flag.c" "lib/CMakeFiles/zip.dir/zip_set_archive_flag.c.o" "gcc" "lib/CMakeFiles/zip.dir/zip_set_archive_flag.c.o.d" + "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_set_default_password.c" "lib/CMakeFiles/zip.dir/zip_set_default_password.c.o" "gcc" "lib/CMakeFiles/zip.dir/zip_set_default_password.c.o.d" + "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_set_file_comment.c" "lib/CMakeFiles/zip.dir/zip_set_file_comment.c.o" "gcc" "lib/CMakeFiles/zip.dir/zip_set_file_comment.c.o.d" + "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_set_file_compression.c" "lib/CMakeFiles/zip.dir/zip_set_file_compression.c.o" "gcc" "lib/CMakeFiles/zip.dir/zip_set_file_compression.c.o.d" + "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_set_name.c" "lib/CMakeFiles/zip.dir/zip_set_name.c.o" "gcc" "lib/CMakeFiles/zip.dir/zip_set_name.c.o.d" + "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_source_accept_empty.c" "lib/CMakeFiles/zip.dir/zip_source_accept_empty.c.o" "gcc" "lib/CMakeFiles/zip.dir/zip_source_accept_empty.c.o.d" + "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_source_begin_write.c" "lib/CMakeFiles/zip.dir/zip_source_begin_write.c.o" "gcc" "lib/CMakeFiles/zip.dir/zip_source_begin_write.c.o.d" + "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_source_begin_write_cloning.c" "lib/CMakeFiles/zip.dir/zip_source_begin_write_cloning.c.o" "gcc" "lib/CMakeFiles/zip.dir/zip_source_begin_write_cloning.c.o.d" + "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_source_buffer.c" "lib/CMakeFiles/zip.dir/zip_source_buffer.c.o" "gcc" "lib/CMakeFiles/zip.dir/zip_source_buffer.c.o.d" + "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_source_call.c" "lib/CMakeFiles/zip.dir/zip_source_call.c.o" "gcc" "lib/CMakeFiles/zip.dir/zip_source_call.c.o.d" + "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_source_close.c" "lib/CMakeFiles/zip.dir/zip_source_close.c.o" "gcc" "lib/CMakeFiles/zip.dir/zip_source_close.c.o.d" + "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_source_commit_write.c" "lib/CMakeFiles/zip.dir/zip_source_commit_write.c.o" "gcc" "lib/CMakeFiles/zip.dir/zip_source_commit_write.c.o.d" + "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_source_compress.c" "lib/CMakeFiles/zip.dir/zip_source_compress.c.o" "gcc" "lib/CMakeFiles/zip.dir/zip_source_compress.c.o.d" + "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_source_crc.c" "lib/CMakeFiles/zip.dir/zip_source_crc.c.o" "gcc" "lib/CMakeFiles/zip.dir/zip_source_crc.c.o.d" + "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_source_error.c" "lib/CMakeFiles/zip.dir/zip_source_error.c.o" "gcc" "lib/CMakeFiles/zip.dir/zip_source_error.c.o.d" + "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_source_file_common.c" "lib/CMakeFiles/zip.dir/zip_source_file_common.c.o" "gcc" "lib/CMakeFiles/zip.dir/zip_source_file_common.c.o.d" + "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_source_file_stdio.c" "lib/CMakeFiles/zip.dir/zip_source_file_stdio.c.o" "gcc" "lib/CMakeFiles/zip.dir/zip_source_file_stdio.c.o.d" + "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_source_file_stdio_named.c" "lib/CMakeFiles/zip.dir/zip_source_file_stdio_named.c.o" "gcc" "lib/CMakeFiles/zip.dir/zip_source_file_stdio_named.c.o.d" + "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_source_free.c" "lib/CMakeFiles/zip.dir/zip_source_free.c.o" "gcc" "lib/CMakeFiles/zip.dir/zip_source_free.c.o.d" + "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_source_function.c" "lib/CMakeFiles/zip.dir/zip_source_function.c.o" "gcc" "lib/CMakeFiles/zip.dir/zip_source_function.c.o.d" + "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_source_get_dostime.c" "lib/CMakeFiles/zip.dir/zip_source_get_dostime.c.o" "gcc" "lib/CMakeFiles/zip.dir/zip_source_get_dostime.c.o.d" + "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_source_get_file_attributes.c" "lib/CMakeFiles/zip.dir/zip_source_get_file_attributes.c.o" "gcc" "lib/CMakeFiles/zip.dir/zip_source_get_file_attributes.c.o.d" + "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_source_is_deleted.c" "lib/CMakeFiles/zip.dir/zip_source_is_deleted.c.o" "gcc" "lib/CMakeFiles/zip.dir/zip_source_is_deleted.c.o.d" + "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_source_layered.c" "lib/CMakeFiles/zip.dir/zip_source_layered.c.o" "gcc" "lib/CMakeFiles/zip.dir/zip_source_layered.c.o.d" + "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_source_open.c" "lib/CMakeFiles/zip.dir/zip_source_open.c.o" "gcc" "lib/CMakeFiles/zip.dir/zip_source_open.c.o.d" + "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_source_pass_to_lower_layer.c" "lib/CMakeFiles/zip.dir/zip_source_pass_to_lower_layer.c.o" "gcc" "lib/CMakeFiles/zip.dir/zip_source_pass_to_lower_layer.c.o.d" + "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_source_pkware_decode.c" "lib/CMakeFiles/zip.dir/zip_source_pkware_decode.c.o" "gcc" "lib/CMakeFiles/zip.dir/zip_source_pkware_decode.c.o.d" + "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_source_pkware_encode.c" "lib/CMakeFiles/zip.dir/zip_source_pkware_encode.c.o" "gcc" "lib/CMakeFiles/zip.dir/zip_source_pkware_encode.c.o.d" + "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_source_read.c" "lib/CMakeFiles/zip.dir/zip_source_read.c.o" "gcc" "lib/CMakeFiles/zip.dir/zip_source_read.c.o.d" + "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_source_remove.c" "lib/CMakeFiles/zip.dir/zip_source_remove.c.o" "gcc" "lib/CMakeFiles/zip.dir/zip_source_remove.c.o.d" + "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_source_rollback_write.c" "lib/CMakeFiles/zip.dir/zip_source_rollback_write.c.o" "gcc" "lib/CMakeFiles/zip.dir/zip_source_rollback_write.c.o.d" + "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_source_seek.c" "lib/CMakeFiles/zip.dir/zip_source_seek.c.o" "gcc" "lib/CMakeFiles/zip.dir/zip_source_seek.c.o.d" + "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_source_seek_write.c" "lib/CMakeFiles/zip.dir/zip_source_seek_write.c.o" "gcc" "lib/CMakeFiles/zip.dir/zip_source_seek_write.c.o.d" + "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_source_stat.c" "lib/CMakeFiles/zip.dir/zip_source_stat.c.o" "gcc" "lib/CMakeFiles/zip.dir/zip_source_stat.c.o.d" + "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_source_supports.c" "lib/CMakeFiles/zip.dir/zip_source_supports.c.o" "gcc" "lib/CMakeFiles/zip.dir/zip_source_supports.c.o.d" + "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_source_tell.c" "lib/CMakeFiles/zip.dir/zip_source_tell.c.o" "gcc" "lib/CMakeFiles/zip.dir/zip_source_tell.c.o.d" + "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_source_tell_write.c" "lib/CMakeFiles/zip.dir/zip_source_tell_write.c.o" "gcc" "lib/CMakeFiles/zip.dir/zip_source_tell_write.c.o.d" + "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_source_window.c" "lib/CMakeFiles/zip.dir/zip_source_window.c.o" "gcc" "lib/CMakeFiles/zip.dir/zip_source_window.c.o.d" + "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_source_write.c" "lib/CMakeFiles/zip.dir/zip_source_write.c.o" "gcc" "lib/CMakeFiles/zip.dir/zip_source_write.c.o.d" + "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_source_zip.c" "lib/CMakeFiles/zip.dir/zip_source_zip.c.o" "gcc" "lib/CMakeFiles/zip.dir/zip_source_zip.c.o.d" + "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_source_zip_new.c" "lib/CMakeFiles/zip.dir/zip_source_zip_new.c.o" "gcc" "lib/CMakeFiles/zip.dir/zip_source_zip_new.c.o.d" + "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_stat.c" "lib/CMakeFiles/zip.dir/zip_stat.c.o" "gcc" "lib/CMakeFiles/zip.dir/zip_stat.c.o.d" + "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_stat_index.c" "lib/CMakeFiles/zip.dir/zip_stat_index.c.o" "gcc" "lib/CMakeFiles/zip.dir/zip_stat_index.c.o.d" + "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_stat_init.c" "lib/CMakeFiles/zip.dir/zip_stat_init.c.o" "gcc" "lib/CMakeFiles/zip.dir/zip_stat_init.c.o.d" + "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_strerror.c" "lib/CMakeFiles/zip.dir/zip_strerror.c.o" "gcc" "lib/CMakeFiles/zip.dir/zip_strerror.c.o.d" + "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_string.c" "lib/CMakeFiles/zip.dir/zip_string.c.o" "gcc" "lib/CMakeFiles/zip.dir/zip_string.c.o.d" + "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_unchange.c" "lib/CMakeFiles/zip.dir/zip_unchange.c.o" "gcc" "lib/CMakeFiles/zip.dir/zip_unchange.c.o.d" + "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_unchange_all.c" "lib/CMakeFiles/zip.dir/zip_unchange_all.c.o" "gcc" "lib/CMakeFiles/zip.dir/zip_unchange_all.c.o.d" + "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_unchange_archive.c" "lib/CMakeFiles/zip.dir/zip_unchange_archive.c.o" "gcc" "lib/CMakeFiles/zip.dir/zip_unchange_archive.c.o.d" + "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_unchange_data.c" "lib/CMakeFiles/zip.dir/zip_unchange_data.c.o" "gcc" "lib/CMakeFiles/zip.dir/zip_unchange_data.c.o.d" + "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_utf-8.c" "lib/CMakeFiles/zip.dir/zip_utf-8.c.o" "gcc" "lib/CMakeFiles/zip.dir/zip_utf-8.c.o.d" + ) + +# Targets to which this target links which contain Fortran sources. +set(CMAKE_Fortran_TARGET_LINKED_INFO_FILES + ) + +# Targets to which this target links which contain Fortran sources. +set(CMAKE_Fortran_TARGET_FORWARD_LINKED_INFO_FILES + ) + +# Fortran module output directory. +set(CMAKE_Fortran_TARGET_MODULE_DIR "") diff --git a/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/build.make b/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/build.make new file mode 100644 index 0000000..6543ced --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/build.make @@ -0,0 +1,2022 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.28 + +# Delete rule output on recipe failure. +.DELETE_ON_ERROR: + +#============================================================================= +# Special targets provided by cmake. + +# Disable implicit rules so canonical targets will work. +.SUFFIXES: + +# Disable VCS-based implicit rules. +% : %,v + +# Disable VCS-based implicit rules. +% : RCS/% + +# Disable VCS-based implicit rules. +% : RCS/%,v + +# Disable VCS-based implicit rules. +% : SCCS/s.% + +# Disable VCS-based implicit rules. +% : s.% + +.SUFFIXES: .hpux_make_needs_suffix_list + +# Command-line flag to silence nested $(MAKE). +$(VERBOSE)MAKESILENT = -s + +#Suppress display of executed commands. +$(VERBOSE).SILENT: + +# A target that is always out of date. +cmake_force: +.PHONY : cmake_force + +#============================================================================= +# Set environment variables for the build. + +# The shell in which to execute make rules. +SHELL = /bin/sh + +# The CMake executable. +CMAKE_COMMAND = /usr/bin/cmake + +# The command to remove a file. +RM = /usr/bin/cmake -E rm -f + +# Escaping for special characters. +EQUALS = = + +# The top-level source directory on which CMake was run. +CMAKE_SOURCE_DIR = "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3" + +# The top-level build directory on which CMake was run. +CMAKE_BINARY_DIR = "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" + +# Include any dependencies generated for this target. +include lib/CMakeFiles/zip.dir/depend.make +# Include any dependencies generated by the compiler for this target. +include lib/CMakeFiles/zip.dir/compiler_depend.make + +# Include the progress variables for this target. +include lib/CMakeFiles/zip.dir/progress.make + +# Include the compile flags for this target's objects. +include lib/CMakeFiles/zip.dir/flags.make + +lib/zip_err_str.c: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/cmake/GenerateZipErrorStrings.cmake +lib/zip_err_str.c: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip.h +lib/zip_err_str.c: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zipint.h + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_1) "Generating zip_err_str.c" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && /usr/bin/cmake -DPROJECT_SOURCE_DIR=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3 -DCMAKE_CURRENT_BINARY_DIR=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib -P /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/cmake/GenerateZipErrorStrings.cmake + +lib/CMakeFiles/zip.dir/zip_add.c.o: lib/CMakeFiles/zip.dir/flags.make +lib/CMakeFiles/zip.dir/zip_add.c.o: lib/CMakeFiles/zip.dir/includes_C.rsp +lib/CMakeFiles/zip.dir/zip_add.c.o: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_add.c +lib/CMakeFiles/zip.dir/zip_add.c.o: lib/CMakeFiles/zip.dir/compiler_depend.ts + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_2) "Building C object lib/CMakeFiles/zip.dir/zip_add.c.o" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -MD -MT lib/CMakeFiles/zip.dir/zip_add.c.o -MF CMakeFiles/zip.dir/zip_add.c.o.d -o CMakeFiles/zip.dir/zip_add.c.o -c "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_add.c" + +lib/CMakeFiles/zip.dir/zip_add.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Preprocessing C source to CMakeFiles/zip.dir/zip_add.c.i" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_add.c" > CMakeFiles/zip.dir/zip_add.c.i + +lib/CMakeFiles/zip.dir/zip_add.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Compiling C source to assembly CMakeFiles/zip.dir/zip_add.c.s" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_add.c" -o CMakeFiles/zip.dir/zip_add.c.s + +lib/CMakeFiles/zip.dir/zip_add_dir.c.o: lib/CMakeFiles/zip.dir/flags.make +lib/CMakeFiles/zip.dir/zip_add_dir.c.o: lib/CMakeFiles/zip.dir/includes_C.rsp +lib/CMakeFiles/zip.dir/zip_add_dir.c.o: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_add_dir.c +lib/CMakeFiles/zip.dir/zip_add_dir.c.o: lib/CMakeFiles/zip.dir/compiler_depend.ts + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_3) "Building C object lib/CMakeFiles/zip.dir/zip_add_dir.c.o" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -MD -MT lib/CMakeFiles/zip.dir/zip_add_dir.c.o -MF CMakeFiles/zip.dir/zip_add_dir.c.o.d -o CMakeFiles/zip.dir/zip_add_dir.c.o -c "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_add_dir.c" + +lib/CMakeFiles/zip.dir/zip_add_dir.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Preprocessing C source to CMakeFiles/zip.dir/zip_add_dir.c.i" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_add_dir.c" > CMakeFiles/zip.dir/zip_add_dir.c.i + +lib/CMakeFiles/zip.dir/zip_add_dir.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Compiling C source to assembly CMakeFiles/zip.dir/zip_add_dir.c.s" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_add_dir.c" -o CMakeFiles/zip.dir/zip_add_dir.c.s + +lib/CMakeFiles/zip.dir/zip_add_entry.c.o: lib/CMakeFiles/zip.dir/flags.make +lib/CMakeFiles/zip.dir/zip_add_entry.c.o: lib/CMakeFiles/zip.dir/includes_C.rsp +lib/CMakeFiles/zip.dir/zip_add_entry.c.o: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_add_entry.c +lib/CMakeFiles/zip.dir/zip_add_entry.c.o: lib/CMakeFiles/zip.dir/compiler_depend.ts + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_4) "Building C object lib/CMakeFiles/zip.dir/zip_add_entry.c.o" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -MD -MT lib/CMakeFiles/zip.dir/zip_add_entry.c.o -MF CMakeFiles/zip.dir/zip_add_entry.c.o.d -o CMakeFiles/zip.dir/zip_add_entry.c.o -c "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_add_entry.c" + +lib/CMakeFiles/zip.dir/zip_add_entry.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Preprocessing C source to CMakeFiles/zip.dir/zip_add_entry.c.i" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_add_entry.c" > CMakeFiles/zip.dir/zip_add_entry.c.i + +lib/CMakeFiles/zip.dir/zip_add_entry.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Compiling C source to assembly CMakeFiles/zip.dir/zip_add_entry.c.s" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_add_entry.c" -o CMakeFiles/zip.dir/zip_add_entry.c.s + +lib/CMakeFiles/zip.dir/zip_algorithm_deflate.c.o: lib/CMakeFiles/zip.dir/flags.make +lib/CMakeFiles/zip.dir/zip_algorithm_deflate.c.o: lib/CMakeFiles/zip.dir/includes_C.rsp +lib/CMakeFiles/zip.dir/zip_algorithm_deflate.c.o: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_algorithm_deflate.c +lib/CMakeFiles/zip.dir/zip_algorithm_deflate.c.o: lib/CMakeFiles/zip.dir/compiler_depend.ts + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_5) "Building C object lib/CMakeFiles/zip.dir/zip_algorithm_deflate.c.o" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -MD -MT lib/CMakeFiles/zip.dir/zip_algorithm_deflate.c.o -MF CMakeFiles/zip.dir/zip_algorithm_deflate.c.o.d -o CMakeFiles/zip.dir/zip_algorithm_deflate.c.o -c "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_algorithm_deflate.c" + +lib/CMakeFiles/zip.dir/zip_algorithm_deflate.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Preprocessing C source to CMakeFiles/zip.dir/zip_algorithm_deflate.c.i" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_algorithm_deflate.c" > CMakeFiles/zip.dir/zip_algorithm_deflate.c.i + +lib/CMakeFiles/zip.dir/zip_algorithm_deflate.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Compiling C source to assembly CMakeFiles/zip.dir/zip_algorithm_deflate.c.s" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_algorithm_deflate.c" -o CMakeFiles/zip.dir/zip_algorithm_deflate.c.s + +lib/CMakeFiles/zip.dir/zip_buffer.c.o: lib/CMakeFiles/zip.dir/flags.make +lib/CMakeFiles/zip.dir/zip_buffer.c.o: lib/CMakeFiles/zip.dir/includes_C.rsp +lib/CMakeFiles/zip.dir/zip_buffer.c.o: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_buffer.c +lib/CMakeFiles/zip.dir/zip_buffer.c.o: lib/CMakeFiles/zip.dir/compiler_depend.ts + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_6) "Building C object lib/CMakeFiles/zip.dir/zip_buffer.c.o" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -MD -MT lib/CMakeFiles/zip.dir/zip_buffer.c.o -MF CMakeFiles/zip.dir/zip_buffer.c.o.d -o CMakeFiles/zip.dir/zip_buffer.c.o -c "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_buffer.c" + +lib/CMakeFiles/zip.dir/zip_buffer.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Preprocessing C source to CMakeFiles/zip.dir/zip_buffer.c.i" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_buffer.c" > CMakeFiles/zip.dir/zip_buffer.c.i + +lib/CMakeFiles/zip.dir/zip_buffer.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Compiling C source to assembly CMakeFiles/zip.dir/zip_buffer.c.s" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_buffer.c" -o CMakeFiles/zip.dir/zip_buffer.c.s + +lib/CMakeFiles/zip.dir/zip_close.c.o: lib/CMakeFiles/zip.dir/flags.make +lib/CMakeFiles/zip.dir/zip_close.c.o: lib/CMakeFiles/zip.dir/includes_C.rsp +lib/CMakeFiles/zip.dir/zip_close.c.o: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_close.c +lib/CMakeFiles/zip.dir/zip_close.c.o: lib/CMakeFiles/zip.dir/compiler_depend.ts + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_7) "Building C object lib/CMakeFiles/zip.dir/zip_close.c.o" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -MD -MT lib/CMakeFiles/zip.dir/zip_close.c.o -MF CMakeFiles/zip.dir/zip_close.c.o.d -o CMakeFiles/zip.dir/zip_close.c.o -c "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_close.c" + +lib/CMakeFiles/zip.dir/zip_close.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Preprocessing C source to CMakeFiles/zip.dir/zip_close.c.i" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_close.c" > CMakeFiles/zip.dir/zip_close.c.i + +lib/CMakeFiles/zip.dir/zip_close.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Compiling C source to assembly CMakeFiles/zip.dir/zip_close.c.s" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_close.c" -o CMakeFiles/zip.dir/zip_close.c.s + +lib/CMakeFiles/zip.dir/zip_delete.c.o: lib/CMakeFiles/zip.dir/flags.make +lib/CMakeFiles/zip.dir/zip_delete.c.o: lib/CMakeFiles/zip.dir/includes_C.rsp +lib/CMakeFiles/zip.dir/zip_delete.c.o: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_delete.c +lib/CMakeFiles/zip.dir/zip_delete.c.o: lib/CMakeFiles/zip.dir/compiler_depend.ts + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_8) "Building C object lib/CMakeFiles/zip.dir/zip_delete.c.o" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -MD -MT lib/CMakeFiles/zip.dir/zip_delete.c.o -MF CMakeFiles/zip.dir/zip_delete.c.o.d -o CMakeFiles/zip.dir/zip_delete.c.o -c "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_delete.c" + +lib/CMakeFiles/zip.dir/zip_delete.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Preprocessing C source to CMakeFiles/zip.dir/zip_delete.c.i" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_delete.c" > CMakeFiles/zip.dir/zip_delete.c.i + +lib/CMakeFiles/zip.dir/zip_delete.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Compiling C source to assembly CMakeFiles/zip.dir/zip_delete.c.s" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_delete.c" -o CMakeFiles/zip.dir/zip_delete.c.s + +lib/CMakeFiles/zip.dir/zip_dir_add.c.o: lib/CMakeFiles/zip.dir/flags.make +lib/CMakeFiles/zip.dir/zip_dir_add.c.o: lib/CMakeFiles/zip.dir/includes_C.rsp +lib/CMakeFiles/zip.dir/zip_dir_add.c.o: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_dir_add.c +lib/CMakeFiles/zip.dir/zip_dir_add.c.o: lib/CMakeFiles/zip.dir/compiler_depend.ts + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_9) "Building C object lib/CMakeFiles/zip.dir/zip_dir_add.c.o" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -MD -MT lib/CMakeFiles/zip.dir/zip_dir_add.c.o -MF CMakeFiles/zip.dir/zip_dir_add.c.o.d -o CMakeFiles/zip.dir/zip_dir_add.c.o -c "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_dir_add.c" + +lib/CMakeFiles/zip.dir/zip_dir_add.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Preprocessing C source to CMakeFiles/zip.dir/zip_dir_add.c.i" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_dir_add.c" > CMakeFiles/zip.dir/zip_dir_add.c.i + +lib/CMakeFiles/zip.dir/zip_dir_add.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Compiling C source to assembly CMakeFiles/zip.dir/zip_dir_add.c.s" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_dir_add.c" -o CMakeFiles/zip.dir/zip_dir_add.c.s + +lib/CMakeFiles/zip.dir/zip_dirent.c.o: lib/CMakeFiles/zip.dir/flags.make +lib/CMakeFiles/zip.dir/zip_dirent.c.o: lib/CMakeFiles/zip.dir/includes_C.rsp +lib/CMakeFiles/zip.dir/zip_dirent.c.o: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_dirent.c +lib/CMakeFiles/zip.dir/zip_dirent.c.o: lib/CMakeFiles/zip.dir/compiler_depend.ts + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_10) "Building C object lib/CMakeFiles/zip.dir/zip_dirent.c.o" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -MD -MT lib/CMakeFiles/zip.dir/zip_dirent.c.o -MF CMakeFiles/zip.dir/zip_dirent.c.o.d -o CMakeFiles/zip.dir/zip_dirent.c.o -c "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_dirent.c" + +lib/CMakeFiles/zip.dir/zip_dirent.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Preprocessing C source to CMakeFiles/zip.dir/zip_dirent.c.i" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_dirent.c" > CMakeFiles/zip.dir/zip_dirent.c.i + +lib/CMakeFiles/zip.dir/zip_dirent.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Compiling C source to assembly CMakeFiles/zip.dir/zip_dirent.c.s" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_dirent.c" -o CMakeFiles/zip.dir/zip_dirent.c.s + +lib/CMakeFiles/zip.dir/zip_discard.c.o: lib/CMakeFiles/zip.dir/flags.make +lib/CMakeFiles/zip.dir/zip_discard.c.o: lib/CMakeFiles/zip.dir/includes_C.rsp +lib/CMakeFiles/zip.dir/zip_discard.c.o: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_discard.c +lib/CMakeFiles/zip.dir/zip_discard.c.o: lib/CMakeFiles/zip.dir/compiler_depend.ts + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_11) "Building C object lib/CMakeFiles/zip.dir/zip_discard.c.o" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -MD -MT lib/CMakeFiles/zip.dir/zip_discard.c.o -MF CMakeFiles/zip.dir/zip_discard.c.o.d -o CMakeFiles/zip.dir/zip_discard.c.o -c "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_discard.c" + +lib/CMakeFiles/zip.dir/zip_discard.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Preprocessing C source to CMakeFiles/zip.dir/zip_discard.c.i" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_discard.c" > CMakeFiles/zip.dir/zip_discard.c.i + +lib/CMakeFiles/zip.dir/zip_discard.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Compiling C source to assembly CMakeFiles/zip.dir/zip_discard.c.s" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_discard.c" -o CMakeFiles/zip.dir/zip_discard.c.s + +lib/CMakeFiles/zip.dir/zip_entry.c.o: lib/CMakeFiles/zip.dir/flags.make +lib/CMakeFiles/zip.dir/zip_entry.c.o: lib/CMakeFiles/zip.dir/includes_C.rsp +lib/CMakeFiles/zip.dir/zip_entry.c.o: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_entry.c +lib/CMakeFiles/zip.dir/zip_entry.c.o: lib/CMakeFiles/zip.dir/compiler_depend.ts + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_12) "Building C object lib/CMakeFiles/zip.dir/zip_entry.c.o" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -MD -MT lib/CMakeFiles/zip.dir/zip_entry.c.o -MF CMakeFiles/zip.dir/zip_entry.c.o.d -o CMakeFiles/zip.dir/zip_entry.c.o -c "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_entry.c" + +lib/CMakeFiles/zip.dir/zip_entry.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Preprocessing C source to CMakeFiles/zip.dir/zip_entry.c.i" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_entry.c" > CMakeFiles/zip.dir/zip_entry.c.i + +lib/CMakeFiles/zip.dir/zip_entry.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Compiling C source to assembly CMakeFiles/zip.dir/zip_entry.c.s" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_entry.c" -o CMakeFiles/zip.dir/zip_entry.c.s + +lib/CMakeFiles/zip.dir/zip_error.c.o: lib/CMakeFiles/zip.dir/flags.make +lib/CMakeFiles/zip.dir/zip_error.c.o: lib/CMakeFiles/zip.dir/includes_C.rsp +lib/CMakeFiles/zip.dir/zip_error.c.o: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_error.c +lib/CMakeFiles/zip.dir/zip_error.c.o: lib/CMakeFiles/zip.dir/compiler_depend.ts + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_13) "Building C object lib/CMakeFiles/zip.dir/zip_error.c.o" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -MD -MT lib/CMakeFiles/zip.dir/zip_error.c.o -MF CMakeFiles/zip.dir/zip_error.c.o.d -o CMakeFiles/zip.dir/zip_error.c.o -c "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_error.c" + +lib/CMakeFiles/zip.dir/zip_error.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Preprocessing C source to CMakeFiles/zip.dir/zip_error.c.i" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_error.c" > CMakeFiles/zip.dir/zip_error.c.i + +lib/CMakeFiles/zip.dir/zip_error.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Compiling C source to assembly CMakeFiles/zip.dir/zip_error.c.s" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_error.c" -o CMakeFiles/zip.dir/zip_error.c.s + +lib/CMakeFiles/zip.dir/zip_error_clear.c.o: lib/CMakeFiles/zip.dir/flags.make +lib/CMakeFiles/zip.dir/zip_error_clear.c.o: lib/CMakeFiles/zip.dir/includes_C.rsp +lib/CMakeFiles/zip.dir/zip_error_clear.c.o: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_error_clear.c +lib/CMakeFiles/zip.dir/zip_error_clear.c.o: lib/CMakeFiles/zip.dir/compiler_depend.ts + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_14) "Building C object lib/CMakeFiles/zip.dir/zip_error_clear.c.o" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -MD -MT lib/CMakeFiles/zip.dir/zip_error_clear.c.o -MF CMakeFiles/zip.dir/zip_error_clear.c.o.d -o CMakeFiles/zip.dir/zip_error_clear.c.o -c "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_error_clear.c" + +lib/CMakeFiles/zip.dir/zip_error_clear.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Preprocessing C source to CMakeFiles/zip.dir/zip_error_clear.c.i" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_error_clear.c" > CMakeFiles/zip.dir/zip_error_clear.c.i + +lib/CMakeFiles/zip.dir/zip_error_clear.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Compiling C source to assembly CMakeFiles/zip.dir/zip_error_clear.c.s" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_error_clear.c" -o CMakeFiles/zip.dir/zip_error_clear.c.s + +lib/CMakeFiles/zip.dir/zip_error_get.c.o: lib/CMakeFiles/zip.dir/flags.make +lib/CMakeFiles/zip.dir/zip_error_get.c.o: lib/CMakeFiles/zip.dir/includes_C.rsp +lib/CMakeFiles/zip.dir/zip_error_get.c.o: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_error_get.c +lib/CMakeFiles/zip.dir/zip_error_get.c.o: lib/CMakeFiles/zip.dir/compiler_depend.ts + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_15) "Building C object lib/CMakeFiles/zip.dir/zip_error_get.c.o" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -MD -MT lib/CMakeFiles/zip.dir/zip_error_get.c.o -MF CMakeFiles/zip.dir/zip_error_get.c.o.d -o CMakeFiles/zip.dir/zip_error_get.c.o -c "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_error_get.c" + +lib/CMakeFiles/zip.dir/zip_error_get.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Preprocessing C source to CMakeFiles/zip.dir/zip_error_get.c.i" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_error_get.c" > CMakeFiles/zip.dir/zip_error_get.c.i + +lib/CMakeFiles/zip.dir/zip_error_get.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Compiling C source to assembly CMakeFiles/zip.dir/zip_error_get.c.s" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_error_get.c" -o CMakeFiles/zip.dir/zip_error_get.c.s + +lib/CMakeFiles/zip.dir/zip_error_get_sys_type.c.o: lib/CMakeFiles/zip.dir/flags.make +lib/CMakeFiles/zip.dir/zip_error_get_sys_type.c.o: lib/CMakeFiles/zip.dir/includes_C.rsp +lib/CMakeFiles/zip.dir/zip_error_get_sys_type.c.o: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_error_get_sys_type.c +lib/CMakeFiles/zip.dir/zip_error_get_sys_type.c.o: lib/CMakeFiles/zip.dir/compiler_depend.ts + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_16) "Building C object lib/CMakeFiles/zip.dir/zip_error_get_sys_type.c.o" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -MD -MT lib/CMakeFiles/zip.dir/zip_error_get_sys_type.c.o -MF CMakeFiles/zip.dir/zip_error_get_sys_type.c.o.d -o CMakeFiles/zip.dir/zip_error_get_sys_type.c.o -c "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_error_get_sys_type.c" + +lib/CMakeFiles/zip.dir/zip_error_get_sys_type.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Preprocessing C source to CMakeFiles/zip.dir/zip_error_get_sys_type.c.i" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_error_get_sys_type.c" > CMakeFiles/zip.dir/zip_error_get_sys_type.c.i + +lib/CMakeFiles/zip.dir/zip_error_get_sys_type.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Compiling C source to assembly CMakeFiles/zip.dir/zip_error_get_sys_type.c.s" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_error_get_sys_type.c" -o CMakeFiles/zip.dir/zip_error_get_sys_type.c.s + +lib/CMakeFiles/zip.dir/zip_error_strerror.c.o: lib/CMakeFiles/zip.dir/flags.make +lib/CMakeFiles/zip.dir/zip_error_strerror.c.o: lib/CMakeFiles/zip.dir/includes_C.rsp +lib/CMakeFiles/zip.dir/zip_error_strerror.c.o: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_error_strerror.c +lib/CMakeFiles/zip.dir/zip_error_strerror.c.o: lib/CMakeFiles/zip.dir/compiler_depend.ts + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_17) "Building C object lib/CMakeFiles/zip.dir/zip_error_strerror.c.o" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -MD -MT lib/CMakeFiles/zip.dir/zip_error_strerror.c.o -MF CMakeFiles/zip.dir/zip_error_strerror.c.o.d -o CMakeFiles/zip.dir/zip_error_strerror.c.o -c "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_error_strerror.c" + +lib/CMakeFiles/zip.dir/zip_error_strerror.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Preprocessing C source to CMakeFiles/zip.dir/zip_error_strerror.c.i" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_error_strerror.c" > CMakeFiles/zip.dir/zip_error_strerror.c.i + +lib/CMakeFiles/zip.dir/zip_error_strerror.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Compiling C source to assembly CMakeFiles/zip.dir/zip_error_strerror.c.s" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_error_strerror.c" -o CMakeFiles/zip.dir/zip_error_strerror.c.s + +lib/CMakeFiles/zip.dir/zip_error_to_str.c.o: lib/CMakeFiles/zip.dir/flags.make +lib/CMakeFiles/zip.dir/zip_error_to_str.c.o: lib/CMakeFiles/zip.dir/includes_C.rsp +lib/CMakeFiles/zip.dir/zip_error_to_str.c.o: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_error_to_str.c +lib/CMakeFiles/zip.dir/zip_error_to_str.c.o: lib/CMakeFiles/zip.dir/compiler_depend.ts + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_18) "Building C object lib/CMakeFiles/zip.dir/zip_error_to_str.c.o" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -MD -MT lib/CMakeFiles/zip.dir/zip_error_to_str.c.o -MF CMakeFiles/zip.dir/zip_error_to_str.c.o.d -o CMakeFiles/zip.dir/zip_error_to_str.c.o -c "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_error_to_str.c" + +lib/CMakeFiles/zip.dir/zip_error_to_str.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Preprocessing C source to CMakeFiles/zip.dir/zip_error_to_str.c.i" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_error_to_str.c" > CMakeFiles/zip.dir/zip_error_to_str.c.i + +lib/CMakeFiles/zip.dir/zip_error_to_str.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Compiling C source to assembly CMakeFiles/zip.dir/zip_error_to_str.c.s" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_error_to_str.c" -o CMakeFiles/zip.dir/zip_error_to_str.c.s + +lib/CMakeFiles/zip.dir/zip_extra_field.c.o: lib/CMakeFiles/zip.dir/flags.make +lib/CMakeFiles/zip.dir/zip_extra_field.c.o: lib/CMakeFiles/zip.dir/includes_C.rsp +lib/CMakeFiles/zip.dir/zip_extra_field.c.o: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_extra_field.c +lib/CMakeFiles/zip.dir/zip_extra_field.c.o: lib/CMakeFiles/zip.dir/compiler_depend.ts + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_19) "Building C object lib/CMakeFiles/zip.dir/zip_extra_field.c.o" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -MD -MT lib/CMakeFiles/zip.dir/zip_extra_field.c.o -MF CMakeFiles/zip.dir/zip_extra_field.c.o.d -o CMakeFiles/zip.dir/zip_extra_field.c.o -c "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_extra_field.c" + +lib/CMakeFiles/zip.dir/zip_extra_field.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Preprocessing C source to CMakeFiles/zip.dir/zip_extra_field.c.i" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_extra_field.c" > CMakeFiles/zip.dir/zip_extra_field.c.i + +lib/CMakeFiles/zip.dir/zip_extra_field.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Compiling C source to assembly CMakeFiles/zip.dir/zip_extra_field.c.s" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_extra_field.c" -o CMakeFiles/zip.dir/zip_extra_field.c.s + +lib/CMakeFiles/zip.dir/zip_extra_field_api.c.o: lib/CMakeFiles/zip.dir/flags.make +lib/CMakeFiles/zip.dir/zip_extra_field_api.c.o: lib/CMakeFiles/zip.dir/includes_C.rsp +lib/CMakeFiles/zip.dir/zip_extra_field_api.c.o: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_extra_field_api.c +lib/CMakeFiles/zip.dir/zip_extra_field_api.c.o: lib/CMakeFiles/zip.dir/compiler_depend.ts + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_20) "Building C object lib/CMakeFiles/zip.dir/zip_extra_field_api.c.o" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -MD -MT lib/CMakeFiles/zip.dir/zip_extra_field_api.c.o -MF CMakeFiles/zip.dir/zip_extra_field_api.c.o.d -o CMakeFiles/zip.dir/zip_extra_field_api.c.o -c "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_extra_field_api.c" + +lib/CMakeFiles/zip.dir/zip_extra_field_api.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Preprocessing C source to CMakeFiles/zip.dir/zip_extra_field_api.c.i" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_extra_field_api.c" > CMakeFiles/zip.dir/zip_extra_field_api.c.i + +lib/CMakeFiles/zip.dir/zip_extra_field_api.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Compiling C source to assembly CMakeFiles/zip.dir/zip_extra_field_api.c.s" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_extra_field_api.c" -o CMakeFiles/zip.dir/zip_extra_field_api.c.s + +lib/CMakeFiles/zip.dir/zip_fclose.c.o: lib/CMakeFiles/zip.dir/flags.make +lib/CMakeFiles/zip.dir/zip_fclose.c.o: lib/CMakeFiles/zip.dir/includes_C.rsp +lib/CMakeFiles/zip.dir/zip_fclose.c.o: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_fclose.c +lib/CMakeFiles/zip.dir/zip_fclose.c.o: lib/CMakeFiles/zip.dir/compiler_depend.ts + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_21) "Building C object lib/CMakeFiles/zip.dir/zip_fclose.c.o" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -MD -MT lib/CMakeFiles/zip.dir/zip_fclose.c.o -MF CMakeFiles/zip.dir/zip_fclose.c.o.d -o CMakeFiles/zip.dir/zip_fclose.c.o -c "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_fclose.c" + +lib/CMakeFiles/zip.dir/zip_fclose.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Preprocessing C source to CMakeFiles/zip.dir/zip_fclose.c.i" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_fclose.c" > CMakeFiles/zip.dir/zip_fclose.c.i + +lib/CMakeFiles/zip.dir/zip_fclose.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Compiling C source to assembly CMakeFiles/zip.dir/zip_fclose.c.s" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_fclose.c" -o CMakeFiles/zip.dir/zip_fclose.c.s + +lib/CMakeFiles/zip.dir/zip_fdopen.c.o: lib/CMakeFiles/zip.dir/flags.make +lib/CMakeFiles/zip.dir/zip_fdopen.c.o: lib/CMakeFiles/zip.dir/includes_C.rsp +lib/CMakeFiles/zip.dir/zip_fdopen.c.o: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_fdopen.c +lib/CMakeFiles/zip.dir/zip_fdopen.c.o: lib/CMakeFiles/zip.dir/compiler_depend.ts + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_22) "Building C object lib/CMakeFiles/zip.dir/zip_fdopen.c.o" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -MD -MT lib/CMakeFiles/zip.dir/zip_fdopen.c.o -MF CMakeFiles/zip.dir/zip_fdopen.c.o.d -o CMakeFiles/zip.dir/zip_fdopen.c.o -c "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_fdopen.c" + +lib/CMakeFiles/zip.dir/zip_fdopen.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Preprocessing C source to CMakeFiles/zip.dir/zip_fdopen.c.i" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_fdopen.c" > CMakeFiles/zip.dir/zip_fdopen.c.i + +lib/CMakeFiles/zip.dir/zip_fdopen.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Compiling C source to assembly CMakeFiles/zip.dir/zip_fdopen.c.s" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_fdopen.c" -o CMakeFiles/zip.dir/zip_fdopen.c.s + +lib/CMakeFiles/zip.dir/zip_file_add.c.o: lib/CMakeFiles/zip.dir/flags.make +lib/CMakeFiles/zip.dir/zip_file_add.c.o: lib/CMakeFiles/zip.dir/includes_C.rsp +lib/CMakeFiles/zip.dir/zip_file_add.c.o: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_file_add.c +lib/CMakeFiles/zip.dir/zip_file_add.c.o: lib/CMakeFiles/zip.dir/compiler_depend.ts + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_23) "Building C object lib/CMakeFiles/zip.dir/zip_file_add.c.o" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -MD -MT lib/CMakeFiles/zip.dir/zip_file_add.c.o -MF CMakeFiles/zip.dir/zip_file_add.c.o.d -o CMakeFiles/zip.dir/zip_file_add.c.o -c "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_file_add.c" + +lib/CMakeFiles/zip.dir/zip_file_add.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Preprocessing C source to CMakeFiles/zip.dir/zip_file_add.c.i" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_file_add.c" > CMakeFiles/zip.dir/zip_file_add.c.i + +lib/CMakeFiles/zip.dir/zip_file_add.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Compiling C source to assembly CMakeFiles/zip.dir/zip_file_add.c.s" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_file_add.c" -o CMakeFiles/zip.dir/zip_file_add.c.s + +lib/CMakeFiles/zip.dir/zip_file_error_clear.c.o: lib/CMakeFiles/zip.dir/flags.make +lib/CMakeFiles/zip.dir/zip_file_error_clear.c.o: lib/CMakeFiles/zip.dir/includes_C.rsp +lib/CMakeFiles/zip.dir/zip_file_error_clear.c.o: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_file_error_clear.c +lib/CMakeFiles/zip.dir/zip_file_error_clear.c.o: lib/CMakeFiles/zip.dir/compiler_depend.ts + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_24) "Building C object lib/CMakeFiles/zip.dir/zip_file_error_clear.c.o" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -MD -MT lib/CMakeFiles/zip.dir/zip_file_error_clear.c.o -MF CMakeFiles/zip.dir/zip_file_error_clear.c.o.d -o CMakeFiles/zip.dir/zip_file_error_clear.c.o -c "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_file_error_clear.c" + +lib/CMakeFiles/zip.dir/zip_file_error_clear.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Preprocessing C source to CMakeFiles/zip.dir/zip_file_error_clear.c.i" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_file_error_clear.c" > CMakeFiles/zip.dir/zip_file_error_clear.c.i + +lib/CMakeFiles/zip.dir/zip_file_error_clear.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Compiling C source to assembly CMakeFiles/zip.dir/zip_file_error_clear.c.s" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_file_error_clear.c" -o CMakeFiles/zip.dir/zip_file_error_clear.c.s + +lib/CMakeFiles/zip.dir/zip_file_error_get.c.o: lib/CMakeFiles/zip.dir/flags.make +lib/CMakeFiles/zip.dir/zip_file_error_get.c.o: lib/CMakeFiles/zip.dir/includes_C.rsp +lib/CMakeFiles/zip.dir/zip_file_error_get.c.o: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_file_error_get.c +lib/CMakeFiles/zip.dir/zip_file_error_get.c.o: lib/CMakeFiles/zip.dir/compiler_depend.ts + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_25) "Building C object lib/CMakeFiles/zip.dir/zip_file_error_get.c.o" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -MD -MT lib/CMakeFiles/zip.dir/zip_file_error_get.c.o -MF CMakeFiles/zip.dir/zip_file_error_get.c.o.d -o CMakeFiles/zip.dir/zip_file_error_get.c.o -c "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_file_error_get.c" + +lib/CMakeFiles/zip.dir/zip_file_error_get.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Preprocessing C source to CMakeFiles/zip.dir/zip_file_error_get.c.i" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_file_error_get.c" > CMakeFiles/zip.dir/zip_file_error_get.c.i + +lib/CMakeFiles/zip.dir/zip_file_error_get.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Compiling C source to assembly CMakeFiles/zip.dir/zip_file_error_get.c.s" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_file_error_get.c" -o CMakeFiles/zip.dir/zip_file_error_get.c.s + +lib/CMakeFiles/zip.dir/zip_file_get_comment.c.o: lib/CMakeFiles/zip.dir/flags.make +lib/CMakeFiles/zip.dir/zip_file_get_comment.c.o: lib/CMakeFiles/zip.dir/includes_C.rsp +lib/CMakeFiles/zip.dir/zip_file_get_comment.c.o: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_file_get_comment.c +lib/CMakeFiles/zip.dir/zip_file_get_comment.c.o: lib/CMakeFiles/zip.dir/compiler_depend.ts + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_26) "Building C object lib/CMakeFiles/zip.dir/zip_file_get_comment.c.o" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -MD -MT lib/CMakeFiles/zip.dir/zip_file_get_comment.c.o -MF CMakeFiles/zip.dir/zip_file_get_comment.c.o.d -o CMakeFiles/zip.dir/zip_file_get_comment.c.o -c "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_file_get_comment.c" + +lib/CMakeFiles/zip.dir/zip_file_get_comment.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Preprocessing C source to CMakeFiles/zip.dir/zip_file_get_comment.c.i" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_file_get_comment.c" > CMakeFiles/zip.dir/zip_file_get_comment.c.i + +lib/CMakeFiles/zip.dir/zip_file_get_comment.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Compiling C source to assembly CMakeFiles/zip.dir/zip_file_get_comment.c.s" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_file_get_comment.c" -o CMakeFiles/zip.dir/zip_file_get_comment.c.s + +lib/CMakeFiles/zip.dir/zip_file_get_external_attributes.c.o: lib/CMakeFiles/zip.dir/flags.make +lib/CMakeFiles/zip.dir/zip_file_get_external_attributes.c.o: lib/CMakeFiles/zip.dir/includes_C.rsp +lib/CMakeFiles/zip.dir/zip_file_get_external_attributes.c.o: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_file_get_external_attributes.c +lib/CMakeFiles/zip.dir/zip_file_get_external_attributes.c.o: lib/CMakeFiles/zip.dir/compiler_depend.ts + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_27) "Building C object lib/CMakeFiles/zip.dir/zip_file_get_external_attributes.c.o" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -MD -MT lib/CMakeFiles/zip.dir/zip_file_get_external_attributes.c.o -MF CMakeFiles/zip.dir/zip_file_get_external_attributes.c.o.d -o CMakeFiles/zip.dir/zip_file_get_external_attributes.c.o -c "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_file_get_external_attributes.c" + +lib/CMakeFiles/zip.dir/zip_file_get_external_attributes.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Preprocessing C source to CMakeFiles/zip.dir/zip_file_get_external_attributes.c.i" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_file_get_external_attributes.c" > CMakeFiles/zip.dir/zip_file_get_external_attributes.c.i + +lib/CMakeFiles/zip.dir/zip_file_get_external_attributes.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Compiling C source to assembly CMakeFiles/zip.dir/zip_file_get_external_attributes.c.s" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_file_get_external_attributes.c" -o CMakeFiles/zip.dir/zip_file_get_external_attributes.c.s + +lib/CMakeFiles/zip.dir/zip_file_get_offset.c.o: lib/CMakeFiles/zip.dir/flags.make +lib/CMakeFiles/zip.dir/zip_file_get_offset.c.o: lib/CMakeFiles/zip.dir/includes_C.rsp +lib/CMakeFiles/zip.dir/zip_file_get_offset.c.o: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_file_get_offset.c +lib/CMakeFiles/zip.dir/zip_file_get_offset.c.o: lib/CMakeFiles/zip.dir/compiler_depend.ts + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_28) "Building C object lib/CMakeFiles/zip.dir/zip_file_get_offset.c.o" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -MD -MT lib/CMakeFiles/zip.dir/zip_file_get_offset.c.o -MF CMakeFiles/zip.dir/zip_file_get_offset.c.o.d -o CMakeFiles/zip.dir/zip_file_get_offset.c.o -c "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_file_get_offset.c" + +lib/CMakeFiles/zip.dir/zip_file_get_offset.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Preprocessing C source to CMakeFiles/zip.dir/zip_file_get_offset.c.i" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_file_get_offset.c" > CMakeFiles/zip.dir/zip_file_get_offset.c.i + +lib/CMakeFiles/zip.dir/zip_file_get_offset.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Compiling C source to assembly CMakeFiles/zip.dir/zip_file_get_offset.c.s" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_file_get_offset.c" -o CMakeFiles/zip.dir/zip_file_get_offset.c.s + +lib/CMakeFiles/zip.dir/zip_file_rename.c.o: lib/CMakeFiles/zip.dir/flags.make +lib/CMakeFiles/zip.dir/zip_file_rename.c.o: lib/CMakeFiles/zip.dir/includes_C.rsp +lib/CMakeFiles/zip.dir/zip_file_rename.c.o: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_file_rename.c +lib/CMakeFiles/zip.dir/zip_file_rename.c.o: lib/CMakeFiles/zip.dir/compiler_depend.ts + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_29) "Building C object lib/CMakeFiles/zip.dir/zip_file_rename.c.o" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -MD -MT lib/CMakeFiles/zip.dir/zip_file_rename.c.o -MF CMakeFiles/zip.dir/zip_file_rename.c.o.d -o CMakeFiles/zip.dir/zip_file_rename.c.o -c "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_file_rename.c" + +lib/CMakeFiles/zip.dir/zip_file_rename.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Preprocessing C source to CMakeFiles/zip.dir/zip_file_rename.c.i" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_file_rename.c" > CMakeFiles/zip.dir/zip_file_rename.c.i + +lib/CMakeFiles/zip.dir/zip_file_rename.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Compiling C source to assembly CMakeFiles/zip.dir/zip_file_rename.c.s" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_file_rename.c" -o CMakeFiles/zip.dir/zip_file_rename.c.s + +lib/CMakeFiles/zip.dir/zip_file_replace.c.o: lib/CMakeFiles/zip.dir/flags.make +lib/CMakeFiles/zip.dir/zip_file_replace.c.o: lib/CMakeFiles/zip.dir/includes_C.rsp +lib/CMakeFiles/zip.dir/zip_file_replace.c.o: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_file_replace.c +lib/CMakeFiles/zip.dir/zip_file_replace.c.o: lib/CMakeFiles/zip.dir/compiler_depend.ts + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_30) "Building C object lib/CMakeFiles/zip.dir/zip_file_replace.c.o" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -MD -MT lib/CMakeFiles/zip.dir/zip_file_replace.c.o -MF CMakeFiles/zip.dir/zip_file_replace.c.o.d -o CMakeFiles/zip.dir/zip_file_replace.c.o -c "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_file_replace.c" + +lib/CMakeFiles/zip.dir/zip_file_replace.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Preprocessing C source to CMakeFiles/zip.dir/zip_file_replace.c.i" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_file_replace.c" > CMakeFiles/zip.dir/zip_file_replace.c.i + +lib/CMakeFiles/zip.dir/zip_file_replace.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Compiling C source to assembly CMakeFiles/zip.dir/zip_file_replace.c.s" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_file_replace.c" -o CMakeFiles/zip.dir/zip_file_replace.c.s + +lib/CMakeFiles/zip.dir/zip_file_set_comment.c.o: lib/CMakeFiles/zip.dir/flags.make +lib/CMakeFiles/zip.dir/zip_file_set_comment.c.o: lib/CMakeFiles/zip.dir/includes_C.rsp +lib/CMakeFiles/zip.dir/zip_file_set_comment.c.o: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_file_set_comment.c +lib/CMakeFiles/zip.dir/zip_file_set_comment.c.o: lib/CMakeFiles/zip.dir/compiler_depend.ts + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_31) "Building C object lib/CMakeFiles/zip.dir/zip_file_set_comment.c.o" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -MD -MT lib/CMakeFiles/zip.dir/zip_file_set_comment.c.o -MF CMakeFiles/zip.dir/zip_file_set_comment.c.o.d -o CMakeFiles/zip.dir/zip_file_set_comment.c.o -c "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_file_set_comment.c" + +lib/CMakeFiles/zip.dir/zip_file_set_comment.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Preprocessing C source to CMakeFiles/zip.dir/zip_file_set_comment.c.i" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_file_set_comment.c" > CMakeFiles/zip.dir/zip_file_set_comment.c.i + +lib/CMakeFiles/zip.dir/zip_file_set_comment.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Compiling C source to assembly CMakeFiles/zip.dir/zip_file_set_comment.c.s" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_file_set_comment.c" -o CMakeFiles/zip.dir/zip_file_set_comment.c.s + +lib/CMakeFiles/zip.dir/zip_file_set_encryption.c.o: lib/CMakeFiles/zip.dir/flags.make +lib/CMakeFiles/zip.dir/zip_file_set_encryption.c.o: lib/CMakeFiles/zip.dir/includes_C.rsp +lib/CMakeFiles/zip.dir/zip_file_set_encryption.c.o: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_file_set_encryption.c +lib/CMakeFiles/zip.dir/zip_file_set_encryption.c.o: lib/CMakeFiles/zip.dir/compiler_depend.ts + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_32) "Building C object lib/CMakeFiles/zip.dir/zip_file_set_encryption.c.o" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -MD -MT lib/CMakeFiles/zip.dir/zip_file_set_encryption.c.o -MF CMakeFiles/zip.dir/zip_file_set_encryption.c.o.d -o CMakeFiles/zip.dir/zip_file_set_encryption.c.o -c "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_file_set_encryption.c" + +lib/CMakeFiles/zip.dir/zip_file_set_encryption.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Preprocessing C source to CMakeFiles/zip.dir/zip_file_set_encryption.c.i" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_file_set_encryption.c" > CMakeFiles/zip.dir/zip_file_set_encryption.c.i + +lib/CMakeFiles/zip.dir/zip_file_set_encryption.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Compiling C source to assembly CMakeFiles/zip.dir/zip_file_set_encryption.c.s" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_file_set_encryption.c" -o CMakeFiles/zip.dir/zip_file_set_encryption.c.s + +lib/CMakeFiles/zip.dir/zip_file_set_external_attributes.c.o: lib/CMakeFiles/zip.dir/flags.make +lib/CMakeFiles/zip.dir/zip_file_set_external_attributes.c.o: lib/CMakeFiles/zip.dir/includes_C.rsp +lib/CMakeFiles/zip.dir/zip_file_set_external_attributes.c.o: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_file_set_external_attributes.c +lib/CMakeFiles/zip.dir/zip_file_set_external_attributes.c.o: lib/CMakeFiles/zip.dir/compiler_depend.ts + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_33) "Building C object lib/CMakeFiles/zip.dir/zip_file_set_external_attributes.c.o" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -MD -MT lib/CMakeFiles/zip.dir/zip_file_set_external_attributes.c.o -MF CMakeFiles/zip.dir/zip_file_set_external_attributes.c.o.d -o CMakeFiles/zip.dir/zip_file_set_external_attributes.c.o -c "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_file_set_external_attributes.c" + +lib/CMakeFiles/zip.dir/zip_file_set_external_attributes.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Preprocessing C source to CMakeFiles/zip.dir/zip_file_set_external_attributes.c.i" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_file_set_external_attributes.c" > CMakeFiles/zip.dir/zip_file_set_external_attributes.c.i + +lib/CMakeFiles/zip.dir/zip_file_set_external_attributes.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Compiling C source to assembly CMakeFiles/zip.dir/zip_file_set_external_attributes.c.s" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_file_set_external_attributes.c" -o CMakeFiles/zip.dir/zip_file_set_external_attributes.c.s + +lib/CMakeFiles/zip.dir/zip_file_set_mtime.c.o: lib/CMakeFiles/zip.dir/flags.make +lib/CMakeFiles/zip.dir/zip_file_set_mtime.c.o: lib/CMakeFiles/zip.dir/includes_C.rsp +lib/CMakeFiles/zip.dir/zip_file_set_mtime.c.o: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_file_set_mtime.c +lib/CMakeFiles/zip.dir/zip_file_set_mtime.c.o: lib/CMakeFiles/zip.dir/compiler_depend.ts + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_34) "Building C object lib/CMakeFiles/zip.dir/zip_file_set_mtime.c.o" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -MD -MT lib/CMakeFiles/zip.dir/zip_file_set_mtime.c.o -MF CMakeFiles/zip.dir/zip_file_set_mtime.c.o.d -o CMakeFiles/zip.dir/zip_file_set_mtime.c.o -c "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_file_set_mtime.c" + +lib/CMakeFiles/zip.dir/zip_file_set_mtime.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Preprocessing C source to CMakeFiles/zip.dir/zip_file_set_mtime.c.i" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_file_set_mtime.c" > CMakeFiles/zip.dir/zip_file_set_mtime.c.i + +lib/CMakeFiles/zip.dir/zip_file_set_mtime.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Compiling C source to assembly CMakeFiles/zip.dir/zip_file_set_mtime.c.s" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_file_set_mtime.c" -o CMakeFiles/zip.dir/zip_file_set_mtime.c.s + +lib/CMakeFiles/zip.dir/zip_file_strerror.c.o: lib/CMakeFiles/zip.dir/flags.make +lib/CMakeFiles/zip.dir/zip_file_strerror.c.o: lib/CMakeFiles/zip.dir/includes_C.rsp +lib/CMakeFiles/zip.dir/zip_file_strerror.c.o: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_file_strerror.c +lib/CMakeFiles/zip.dir/zip_file_strerror.c.o: lib/CMakeFiles/zip.dir/compiler_depend.ts + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_35) "Building C object lib/CMakeFiles/zip.dir/zip_file_strerror.c.o" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -MD -MT lib/CMakeFiles/zip.dir/zip_file_strerror.c.o -MF CMakeFiles/zip.dir/zip_file_strerror.c.o.d -o CMakeFiles/zip.dir/zip_file_strerror.c.o -c "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_file_strerror.c" + +lib/CMakeFiles/zip.dir/zip_file_strerror.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Preprocessing C source to CMakeFiles/zip.dir/zip_file_strerror.c.i" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_file_strerror.c" > CMakeFiles/zip.dir/zip_file_strerror.c.i + +lib/CMakeFiles/zip.dir/zip_file_strerror.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Compiling C source to assembly CMakeFiles/zip.dir/zip_file_strerror.c.s" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_file_strerror.c" -o CMakeFiles/zip.dir/zip_file_strerror.c.s + +lib/CMakeFiles/zip.dir/zip_fopen.c.o: lib/CMakeFiles/zip.dir/flags.make +lib/CMakeFiles/zip.dir/zip_fopen.c.o: lib/CMakeFiles/zip.dir/includes_C.rsp +lib/CMakeFiles/zip.dir/zip_fopen.c.o: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_fopen.c +lib/CMakeFiles/zip.dir/zip_fopen.c.o: lib/CMakeFiles/zip.dir/compiler_depend.ts + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_36) "Building C object lib/CMakeFiles/zip.dir/zip_fopen.c.o" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -MD -MT lib/CMakeFiles/zip.dir/zip_fopen.c.o -MF CMakeFiles/zip.dir/zip_fopen.c.o.d -o CMakeFiles/zip.dir/zip_fopen.c.o -c "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_fopen.c" + +lib/CMakeFiles/zip.dir/zip_fopen.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Preprocessing C source to CMakeFiles/zip.dir/zip_fopen.c.i" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_fopen.c" > CMakeFiles/zip.dir/zip_fopen.c.i + +lib/CMakeFiles/zip.dir/zip_fopen.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Compiling C source to assembly CMakeFiles/zip.dir/zip_fopen.c.s" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_fopen.c" -o CMakeFiles/zip.dir/zip_fopen.c.s + +lib/CMakeFiles/zip.dir/zip_fopen_encrypted.c.o: lib/CMakeFiles/zip.dir/flags.make +lib/CMakeFiles/zip.dir/zip_fopen_encrypted.c.o: lib/CMakeFiles/zip.dir/includes_C.rsp +lib/CMakeFiles/zip.dir/zip_fopen_encrypted.c.o: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_fopen_encrypted.c +lib/CMakeFiles/zip.dir/zip_fopen_encrypted.c.o: lib/CMakeFiles/zip.dir/compiler_depend.ts + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_37) "Building C object lib/CMakeFiles/zip.dir/zip_fopen_encrypted.c.o" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -MD -MT lib/CMakeFiles/zip.dir/zip_fopen_encrypted.c.o -MF CMakeFiles/zip.dir/zip_fopen_encrypted.c.o.d -o CMakeFiles/zip.dir/zip_fopen_encrypted.c.o -c "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_fopen_encrypted.c" + +lib/CMakeFiles/zip.dir/zip_fopen_encrypted.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Preprocessing C source to CMakeFiles/zip.dir/zip_fopen_encrypted.c.i" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_fopen_encrypted.c" > CMakeFiles/zip.dir/zip_fopen_encrypted.c.i + +lib/CMakeFiles/zip.dir/zip_fopen_encrypted.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Compiling C source to assembly CMakeFiles/zip.dir/zip_fopen_encrypted.c.s" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_fopen_encrypted.c" -o CMakeFiles/zip.dir/zip_fopen_encrypted.c.s + +lib/CMakeFiles/zip.dir/zip_fopen_index.c.o: lib/CMakeFiles/zip.dir/flags.make +lib/CMakeFiles/zip.dir/zip_fopen_index.c.o: lib/CMakeFiles/zip.dir/includes_C.rsp +lib/CMakeFiles/zip.dir/zip_fopen_index.c.o: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_fopen_index.c +lib/CMakeFiles/zip.dir/zip_fopen_index.c.o: lib/CMakeFiles/zip.dir/compiler_depend.ts + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_38) "Building C object lib/CMakeFiles/zip.dir/zip_fopen_index.c.o" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -MD -MT lib/CMakeFiles/zip.dir/zip_fopen_index.c.o -MF CMakeFiles/zip.dir/zip_fopen_index.c.o.d -o CMakeFiles/zip.dir/zip_fopen_index.c.o -c "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_fopen_index.c" + +lib/CMakeFiles/zip.dir/zip_fopen_index.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Preprocessing C source to CMakeFiles/zip.dir/zip_fopen_index.c.i" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_fopen_index.c" > CMakeFiles/zip.dir/zip_fopen_index.c.i + +lib/CMakeFiles/zip.dir/zip_fopen_index.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Compiling C source to assembly CMakeFiles/zip.dir/zip_fopen_index.c.s" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_fopen_index.c" -o CMakeFiles/zip.dir/zip_fopen_index.c.s + +lib/CMakeFiles/zip.dir/zip_fopen_index_encrypted.c.o: lib/CMakeFiles/zip.dir/flags.make +lib/CMakeFiles/zip.dir/zip_fopen_index_encrypted.c.o: lib/CMakeFiles/zip.dir/includes_C.rsp +lib/CMakeFiles/zip.dir/zip_fopen_index_encrypted.c.o: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_fopen_index_encrypted.c +lib/CMakeFiles/zip.dir/zip_fopen_index_encrypted.c.o: lib/CMakeFiles/zip.dir/compiler_depend.ts + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_39) "Building C object lib/CMakeFiles/zip.dir/zip_fopen_index_encrypted.c.o" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -MD -MT lib/CMakeFiles/zip.dir/zip_fopen_index_encrypted.c.o -MF CMakeFiles/zip.dir/zip_fopen_index_encrypted.c.o.d -o CMakeFiles/zip.dir/zip_fopen_index_encrypted.c.o -c "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_fopen_index_encrypted.c" + +lib/CMakeFiles/zip.dir/zip_fopen_index_encrypted.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Preprocessing C source to CMakeFiles/zip.dir/zip_fopen_index_encrypted.c.i" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_fopen_index_encrypted.c" > CMakeFiles/zip.dir/zip_fopen_index_encrypted.c.i + +lib/CMakeFiles/zip.dir/zip_fopen_index_encrypted.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Compiling C source to assembly CMakeFiles/zip.dir/zip_fopen_index_encrypted.c.s" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_fopen_index_encrypted.c" -o CMakeFiles/zip.dir/zip_fopen_index_encrypted.c.s + +lib/CMakeFiles/zip.dir/zip_fread.c.o: lib/CMakeFiles/zip.dir/flags.make +lib/CMakeFiles/zip.dir/zip_fread.c.o: lib/CMakeFiles/zip.dir/includes_C.rsp +lib/CMakeFiles/zip.dir/zip_fread.c.o: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_fread.c +lib/CMakeFiles/zip.dir/zip_fread.c.o: lib/CMakeFiles/zip.dir/compiler_depend.ts + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_40) "Building C object lib/CMakeFiles/zip.dir/zip_fread.c.o" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -MD -MT lib/CMakeFiles/zip.dir/zip_fread.c.o -MF CMakeFiles/zip.dir/zip_fread.c.o.d -o CMakeFiles/zip.dir/zip_fread.c.o -c "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_fread.c" + +lib/CMakeFiles/zip.dir/zip_fread.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Preprocessing C source to CMakeFiles/zip.dir/zip_fread.c.i" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_fread.c" > CMakeFiles/zip.dir/zip_fread.c.i + +lib/CMakeFiles/zip.dir/zip_fread.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Compiling C source to assembly CMakeFiles/zip.dir/zip_fread.c.s" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_fread.c" -o CMakeFiles/zip.dir/zip_fread.c.s + +lib/CMakeFiles/zip.dir/zip_fseek.c.o: lib/CMakeFiles/zip.dir/flags.make +lib/CMakeFiles/zip.dir/zip_fseek.c.o: lib/CMakeFiles/zip.dir/includes_C.rsp +lib/CMakeFiles/zip.dir/zip_fseek.c.o: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_fseek.c +lib/CMakeFiles/zip.dir/zip_fseek.c.o: lib/CMakeFiles/zip.dir/compiler_depend.ts + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_41) "Building C object lib/CMakeFiles/zip.dir/zip_fseek.c.o" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -MD -MT lib/CMakeFiles/zip.dir/zip_fseek.c.o -MF CMakeFiles/zip.dir/zip_fseek.c.o.d -o CMakeFiles/zip.dir/zip_fseek.c.o -c "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_fseek.c" + +lib/CMakeFiles/zip.dir/zip_fseek.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Preprocessing C source to CMakeFiles/zip.dir/zip_fseek.c.i" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_fseek.c" > CMakeFiles/zip.dir/zip_fseek.c.i + +lib/CMakeFiles/zip.dir/zip_fseek.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Compiling C source to assembly CMakeFiles/zip.dir/zip_fseek.c.s" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_fseek.c" -o CMakeFiles/zip.dir/zip_fseek.c.s + +lib/CMakeFiles/zip.dir/zip_ftell.c.o: lib/CMakeFiles/zip.dir/flags.make +lib/CMakeFiles/zip.dir/zip_ftell.c.o: lib/CMakeFiles/zip.dir/includes_C.rsp +lib/CMakeFiles/zip.dir/zip_ftell.c.o: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_ftell.c +lib/CMakeFiles/zip.dir/zip_ftell.c.o: lib/CMakeFiles/zip.dir/compiler_depend.ts + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_42) "Building C object lib/CMakeFiles/zip.dir/zip_ftell.c.o" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -MD -MT lib/CMakeFiles/zip.dir/zip_ftell.c.o -MF CMakeFiles/zip.dir/zip_ftell.c.o.d -o CMakeFiles/zip.dir/zip_ftell.c.o -c "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_ftell.c" + +lib/CMakeFiles/zip.dir/zip_ftell.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Preprocessing C source to CMakeFiles/zip.dir/zip_ftell.c.i" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_ftell.c" > CMakeFiles/zip.dir/zip_ftell.c.i + +lib/CMakeFiles/zip.dir/zip_ftell.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Compiling C source to assembly CMakeFiles/zip.dir/zip_ftell.c.s" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_ftell.c" -o CMakeFiles/zip.dir/zip_ftell.c.s + +lib/CMakeFiles/zip.dir/zip_get_archive_comment.c.o: lib/CMakeFiles/zip.dir/flags.make +lib/CMakeFiles/zip.dir/zip_get_archive_comment.c.o: lib/CMakeFiles/zip.dir/includes_C.rsp +lib/CMakeFiles/zip.dir/zip_get_archive_comment.c.o: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_get_archive_comment.c +lib/CMakeFiles/zip.dir/zip_get_archive_comment.c.o: lib/CMakeFiles/zip.dir/compiler_depend.ts + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_43) "Building C object lib/CMakeFiles/zip.dir/zip_get_archive_comment.c.o" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -MD -MT lib/CMakeFiles/zip.dir/zip_get_archive_comment.c.o -MF CMakeFiles/zip.dir/zip_get_archive_comment.c.o.d -o CMakeFiles/zip.dir/zip_get_archive_comment.c.o -c "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_get_archive_comment.c" + +lib/CMakeFiles/zip.dir/zip_get_archive_comment.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Preprocessing C source to CMakeFiles/zip.dir/zip_get_archive_comment.c.i" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_get_archive_comment.c" > CMakeFiles/zip.dir/zip_get_archive_comment.c.i + +lib/CMakeFiles/zip.dir/zip_get_archive_comment.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Compiling C source to assembly CMakeFiles/zip.dir/zip_get_archive_comment.c.s" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_get_archive_comment.c" -o CMakeFiles/zip.dir/zip_get_archive_comment.c.s + +lib/CMakeFiles/zip.dir/zip_get_archive_flag.c.o: lib/CMakeFiles/zip.dir/flags.make +lib/CMakeFiles/zip.dir/zip_get_archive_flag.c.o: lib/CMakeFiles/zip.dir/includes_C.rsp +lib/CMakeFiles/zip.dir/zip_get_archive_flag.c.o: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_get_archive_flag.c +lib/CMakeFiles/zip.dir/zip_get_archive_flag.c.o: lib/CMakeFiles/zip.dir/compiler_depend.ts + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_44) "Building C object lib/CMakeFiles/zip.dir/zip_get_archive_flag.c.o" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -MD -MT lib/CMakeFiles/zip.dir/zip_get_archive_flag.c.o -MF CMakeFiles/zip.dir/zip_get_archive_flag.c.o.d -o CMakeFiles/zip.dir/zip_get_archive_flag.c.o -c "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_get_archive_flag.c" + +lib/CMakeFiles/zip.dir/zip_get_archive_flag.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Preprocessing C source to CMakeFiles/zip.dir/zip_get_archive_flag.c.i" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_get_archive_flag.c" > CMakeFiles/zip.dir/zip_get_archive_flag.c.i + +lib/CMakeFiles/zip.dir/zip_get_archive_flag.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Compiling C source to assembly CMakeFiles/zip.dir/zip_get_archive_flag.c.s" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_get_archive_flag.c" -o CMakeFiles/zip.dir/zip_get_archive_flag.c.s + +lib/CMakeFiles/zip.dir/zip_get_encryption_implementation.c.o: lib/CMakeFiles/zip.dir/flags.make +lib/CMakeFiles/zip.dir/zip_get_encryption_implementation.c.o: lib/CMakeFiles/zip.dir/includes_C.rsp +lib/CMakeFiles/zip.dir/zip_get_encryption_implementation.c.o: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_get_encryption_implementation.c +lib/CMakeFiles/zip.dir/zip_get_encryption_implementation.c.o: lib/CMakeFiles/zip.dir/compiler_depend.ts + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_45) "Building C object lib/CMakeFiles/zip.dir/zip_get_encryption_implementation.c.o" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -MD -MT lib/CMakeFiles/zip.dir/zip_get_encryption_implementation.c.o -MF CMakeFiles/zip.dir/zip_get_encryption_implementation.c.o.d -o CMakeFiles/zip.dir/zip_get_encryption_implementation.c.o -c "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_get_encryption_implementation.c" + +lib/CMakeFiles/zip.dir/zip_get_encryption_implementation.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Preprocessing C source to CMakeFiles/zip.dir/zip_get_encryption_implementation.c.i" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_get_encryption_implementation.c" > CMakeFiles/zip.dir/zip_get_encryption_implementation.c.i + +lib/CMakeFiles/zip.dir/zip_get_encryption_implementation.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Compiling C source to assembly CMakeFiles/zip.dir/zip_get_encryption_implementation.c.s" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_get_encryption_implementation.c" -o CMakeFiles/zip.dir/zip_get_encryption_implementation.c.s + +lib/CMakeFiles/zip.dir/zip_get_file_comment.c.o: lib/CMakeFiles/zip.dir/flags.make +lib/CMakeFiles/zip.dir/zip_get_file_comment.c.o: lib/CMakeFiles/zip.dir/includes_C.rsp +lib/CMakeFiles/zip.dir/zip_get_file_comment.c.o: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_get_file_comment.c +lib/CMakeFiles/zip.dir/zip_get_file_comment.c.o: lib/CMakeFiles/zip.dir/compiler_depend.ts + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_46) "Building C object lib/CMakeFiles/zip.dir/zip_get_file_comment.c.o" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -MD -MT lib/CMakeFiles/zip.dir/zip_get_file_comment.c.o -MF CMakeFiles/zip.dir/zip_get_file_comment.c.o.d -o CMakeFiles/zip.dir/zip_get_file_comment.c.o -c "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_get_file_comment.c" + +lib/CMakeFiles/zip.dir/zip_get_file_comment.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Preprocessing C source to CMakeFiles/zip.dir/zip_get_file_comment.c.i" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_get_file_comment.c" > CMakeFiles/zip.dir/zip_get_file_comment.c.i + +lib/CMakeFiles/zip.dir/zip_get_file_comment.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Compiling C source to assembly CMakeFiles/zip.dir/zip_get_file_comment.c.s" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_get_file_comment.c" -o CMakeFiles/zip.dir/zip_get_file_comment.c.s + +lib/CMakeFiles/zip.dir/zip_get_name.c.o: lib/CMakeFiles/zip.dir/flags.make +lib/CMakeFiles/zip.dir/zip_get_name.c.o: lib/CMakeFiles/zip.dir/includes_C.rsp +lib/CMakeFiles/zip.dir/zip_get_name.c.o: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_get_name.c +lib/CMakeFiles/zip.dir/zip_get_name.c.o: lib/CMakeFiles/zip.dir/compiler_depend.ts + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_47) "Building C object lib/CMakeFiles/zip.dir/zip_get_name.c.o" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -MD -MT lib/CMakeFiles/zip.dir/zip_get_name.c.o -MF CMakeFiles/zip.dir/zip_get_name.c.o.d -o CMakeFiles/zip.dir/zip_get_name.c.o -c "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_get_name.c" + +lib/CMakeFiles/zip.dir/zip_get_name.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Preprocessing C source to CMakeFiles/zip.dir/zip_get_name.c.i" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_get_name.c" > CMakeFiles/zip.dir/zip_get_name.c.i + +lib/CMakeFiles/zip.dir/zip_get_name.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Compiling C source to assembly CMakeFiles/zip.dir/zip_get_name.c.s" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_get_name.c" -o CMakeFiles/zip.dir/zip_get_name.c.s + +lib/CMakeFiles/zip.dir/zip_get_num_entries.c.o: lib/CMakeFiles/zip.dir/flags.make +lib/CMakeFiles/zip.dir/zip_get_num_entries.c.o: lib/CMakeFiles/zip.dir/includes_C.rsp +lib/CMakeFiles/zip.dir/zip_get_num_entries.c.o: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_get_num_entries.c +lib/CMakeFiles/zip.dir/zip_get_num_entries.c.o: lib/CMakeFiles/zip.dir/compiler_depend.ts + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_48) "Building C object lib/CMakeFiles/zip.dir/zip_get_num_entries.c.o" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -MD -MT lib/CMakeFiles/zip.dir/zip_get_num_entries.c.o -MF CMakeFiles/zip.dir/zip_get_num_entries.c.o.d -o CMakeFiles/zip.dir/zip_get_num_entries.c.o -c "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_get_num_entries.c" + +lib/CMakeFiles/zip.dir/zip_get_num_entries.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Preprocessing C source to CMakeFiles/zip.dir/zip_get_num_entries.c.i" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_get_num_entries.c" > CMakeFiles/zip.dir/zip_get_num_entries.c.i + +lib/CMakeFiles/zip.dir/zip_get_num_entries.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Compiling C source to assembly CMakeFiles/zip.dir/zip_get_num_entries.c.s" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_get_num_entries.c" -o CMakeFiles/zip.dir/zip_get_num_entries.c.s + +lib/CMakeFiles/zip.dir/zip_get_num_files.c.o: lib/CMakeFiles/zip.dir/flags.make +lib/CMakeFiles/zip.dir/zip_get_num_files.c.o: lib/CMakeFiles/zip.dir/includes_C.rsp +lib/CMakeFiles/zip.dir/zip_get_num_files.c.o: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_get_num_files.c +lib/CMakeFiles/zip.dir/zip_get_num_files.c.o: lib/CMakeFiles/zip.dir/compiler_depend.ts + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_49) "Building C object lib/CMakeFiles/zip.dir/zip_get_num_files.c.o" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -MD -MT lib/CMakeFiles/zip.dir/zip_get_num_files.c.o -MF CMakeFiles/zip.dir/zip_get_num_files.c.o.d -o CMakeFiles/zip.dir/zip_get_num_files.c.o -c "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_get_num_files.c" + +lib/CMakeFiles/zip.dir/zip_get_num_files.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Preprocessing C source to CMakeFiles/zip.dir/zip_get_num_files.c.i" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_get_num_files.c" > CMakeFiles/zip.dir/zip_get_num_files.c.i + +lib/CMakeFiles/zip.dir/zip_get_num_files.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Compiling C source to assembly CMakeFiles/zip.dir/zip_get_num_files.c.s" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_get_num_files.c" -o CMakeFiles/zip.dir/zip_get_num_files.c.s + +lib/CMakeFiles/zip.dir/zip_hash.c.o: lib/CMakeFiles/zip.dir/flags.make +lib/CMakeFiles/zip.dir/zip_hash.c.o: lib/CMakeFiles/zip.dir/includes_C.rsp +lib/CMakeFiles/zip.dir/zip_hash.c.o: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_hash.c +lib/CMakeFiles/zip.dir/zip_hash.c.o: lib/CMakeFiles/zip.dir/compiler_depend.ts + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_50) "Building C object lib/CMakeFiles/zip.dir/zip_hash.c.o" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -MD -MT lib/CMakeFiles/zip.dir/zip_hash.c.o -MF CMakeFiles/zip.dir/zip_hash.c.o.d -o CMakeFiles/zip.dir/zip_hash.c.o -c "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_hash.c" + +lib/CMakeFiles/zip.dir/zip_hash.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Preprocessing C source to CMakeFiles/zip.dir/zip_hash.c.i" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_hash.c" > CMakeFiles/zip.dir/zip_hash.c.i + +lib/CMakeFiles/zip.dir/zip_hash.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Compiling C source to assembly CMakeFiles/zip.dir/zip_hash.c.s" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_hash.c" -o CMakeFiles/zip.dir/zip_hash.c.s + +lib/CMakeFiles/zip.dir/zip_io_util.c.o: lib/CMakeFiles/zip.dir/flags.make +lib/CMakeFiles/zip.dir/zip_io_util.c.o: lib/CMakeFiles/zip.dir/includes_C.rsp +lib/CMakeFiles/zip.dir/zip_io_util.c.o: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_io_util.c +lib/CMakeFiles/zip.dir/zip_io_util.c.o: lib/CMakeFiles/zip.dir/compiler_depend.ts + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_51) "Building C object lib/CMakeFiles/zip.dir/zip_io_util.c.o" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -MD -MT lib/CMakeFiles/zip.dir/zip_io_util.c.o -MF CMakeFiles/zip.dir/zip_io_util.c.o.d -o CMakeFiles/zip.dir/zip_io_util.c.o -c "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_io_util.c" + +lib/CMakeFiles/zip.dir/zip_io_util.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Preprocessing C source to CMakeFiles/zip.dir/zip_io_util.c.i" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_io_util.c" > CMakeFiles/zip.dir/zip_io_util.c.i + +lib/CMakeFiles/zip.dir/zip_io_util.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Compiling C source to assembly CMakeFiles/zip.dir/zip_io_util.c.s" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_io_util.c" -o CMakeFiles/zip.dir/zip_io_util.c.s + +lib/CMakeFiles/zip.dir/zip_libzip_version.c.o: lib/CMakeFiles/zip.dir/flags.make +lib/CMakeFiles/zip.dir/zip_libzip_version.c.o: lib/CMakeFiles/zip.dir/includes_C.rsp +lib/CMakeFiles/zip.dir/zip_libzip_version.c.o: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_libzip_version.c +lib/CMakeFiles/zip.dir/zip_libzip_version.c.o: lib/CMakeFiles/zip.dir/compiler_depend.ts + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_52) "Building C object lib/CMakeFiles/zip.dir/zip_libzip_version.c.o" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -MD -MT lib/CMakeFiles/zip.dir/zip_libzip_version.c.o -MF CMakeFiles/zip.dir/zip_libzip_version.c.o.d -o CMakeFiles/zip.dir/zip_libzip_version.c.o -c "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_libzip_version.c" + +lib/CMakeFiles/zip.dir/zip_libzip_version.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Preprocessing C source to CMakeFiles/zip.dir/zip_libzip_version.c.i" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_libzip_version.c" > CMakeFiles/zip.dir/zip_libzip_version.c.i + +lib/CMakeFiles/zip.dir/zip_libzip_version.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Compiling C source to assembly CMakeFiles/zip.dir/zip_libzip_version.c.s" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_libzip_version.c" -o CMakeFiles/zip.dir/zip_libzip_version.c.s + +lib/CMakeFiles/zip.dir/zip_memdup.c.o: lib/CMakeFiles/zip.dir/flags.make +lib/CMakeFiles/zip.dir/zip_memdup.c.o: lib/CMakeFiles/zip.dir/includes_C.rsp +lib/CMakeFiles/zip.dir/zip_memdup.c.o: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_memdup.c +lib/CMakeFiles/zip.dir/zip_memdup.c.o: lib/CMakeFiles/zip.dir/compiler_depend.ts + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_53) "Building C object lib/CMakeFiles/zip.dir/zip_memdup.c.o" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -MD -MT lib/CMakeFiles/zip.dir/zip_memdup.c.o -MF CMakeFiles/zip.dir/zip_memdup.c.o.d -o CMakeFiles/zip.dir/zip_memdup.c.o -c "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_memdup.c" + +lib/CMakeFiles/zip.dir/zip_memdup.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Preprocessing C source to CMakeFiles/zip.dir/zip_memdup.c.i" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_memdup.c" > CMakeFiles/zip.dir/zip_memdup.c.i + +lib/CMakeFiles/zip.dir/zip_memdup.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Compiling C source to assembly CMakeFiles/zip.dir/zip_memdup.c.s" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_memdup.c" -o CMakeFiles/zip.dir/zip_memdup.c.s + +lib/CMakeFiles/zip.dir/zip_name_locate.c.o: lib/CMakeFiles/zip.dir/flags.make +lib/CMakeFiles/zip.dir/zip_name_locate.c.o: lib/CMakeFiles/zip.dir/includes_C.rsp +lib/CMakeFiles/zip.dir/zip_name_locate.c.o: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_name_locate.c +lib/CMakeFiles/zip.dir/zip_name_locate.c.o: lib/CMakeFiles/zip.dir/compiler_depend.ts + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_54) "Building C object lib/CMakeFiles/zip.dir/zip_name_locate.c.o" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -MD -MT lib/CMakeFiles/zip.dir/zip_name_locate.c.o -MF CMakeFiles/zip.dir/zip_name_locate.c.o.d -o CMakeFiles/zip.dir/zip_name_locate.c.o -c "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_name_locate.c" + +lib/CMakeFiles/zip.dir/zip_name_locate.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Preprocessing C source to CMakeFiles/zip.dir/zip_name_locate.c.i" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_name_locate.c" > CMakeFiles/zip.dir/zip_name_locate.c.i + +lib/CMakeFiles/zip.dir/zip_name_locate.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Compiling C source to assembly CMakeFiles/zip.dir/zip_name_locate.c.s" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_name_locate.c" -o CMakeFiles/zip.dir/zip_name_locate.c.s + +lib/CMakeFiles/zip.dir/zip_new.c.o: lib/CMakeFiles/zip.dir/flags.make +lib/CMakeFiles/zip.dir/zip_new.c.o: lib/CMakeFiles/zip.dir/includes_C.rsp +lib/CMakeFiles/zip.dir/zip_new.c.o: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_new.c +lib/CMakeFiles/zip.dir/zip_new.c.o: lib/CMakeFiles/zip.dir/compiler_depend.ts + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_55) "Building C object lib/CMakeFiles/zip.dir/zip_new.c.o" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -MD -MT lib/CMakeFiles/zip.dir/zip_new.c.o -MF CMakeFiles/zip.dir/zip_new.c.o.d -o CMakeFiles/zip.dir/zip_new.c.o -c "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_new.c" + +lib/CMakeFiles/zip.dir/zip_new.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Preprocessing C source to CMakeFiles/zip.dir/zip_new.c.i" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_new.c" > CMakeFiles/zip.dir/zip_new.c.i + +lib/CMakeFiles/zip.dir/zip_new.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Compiling C source to assembly CMakeFiles/zip.dir/zip_new.c.s" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_new.c" -o CMakeFiles/zip.dir/zip_new.c.s + +lib/CMakeFiles/zip.dir/zip_open.c.o: lib/CMakeFiles/zip.dir/flags.make +lib/CMakeFiles/zip.dir/zip_open.c.o: lib/CMakeFiles/zip.dir/includes_C.rsp +lib/CMakeFiles/zip.dir/zip_open.c.o: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_open.c +lib/CMakeFiles/zip.dir/zip_open.c.o: lib/CMakeFiles/zip.dir/compiler_depend.ts + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_56) "Building C object lib/CMakeFiles/zip.dir/zip_open.c.o" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -MD -MT lib/CMakeFiles/zip.dir/zip_open.c.o -MF CMakeFiles/zip.dir/zip_open.c.o.d -o CMakeFiles/zip.dir/zip_open.c.o -c "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_open.c" + +lib/CMakeFiles/zip.dir/zip_open.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Preprocessing C source to CMakeFiles/zip.dir/zip_open.c.i" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_open.c" > CMakeFiles/zip.dir/zip_open.c.i + +lib/CMakeFiles/zip.dir/zip_open.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Compiling C source to assembly CMakeFiles/zip.dir/zip_open.c.s" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_open.c" -o CMakeFiles/zip.dir/zip_open.c.s + +lib/CMakeFiles/zip.dir/zip_pkware.c.o: lib/CMakeFiles/zip.dir/flags.make +lib/CMakeFiles/zip.dir/zip_pkware.c.o: lib/CMakeFiles/zip.dir/includes_C.rsp +lib/CMakeFiles/zip.dir/zip_pkware.c.o: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_pkware.c +lib/CMakeFiles/zip.dir/zip_pkware.c.o: lib/CMakeFiles/zip.dir/compiler_depend.ts + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_57) "Building C object lib/CMakeFiles/zip.dir/zip_pkware.c.o" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -MD -MT lib/CMakeFiles/zip.dir/zip_pkware.c.o -MF CMakeFiles/zip.dir/zip_pkware.c.o.d -o CMakeFiles/zip.dir/zip_pkware.c.o -c "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_pkware.c" + +lib/CMakeFiles/zip.dir/zip_pkware.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Preprocessing C source to CMakeFiles/zip.dir/zip_pkware.c.i" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_pkware.c" > CMakeFiles/zip.dir/zip_pkware.c.i + +lib/CMakeFiles/zip.dir/zip_pkware.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Compiling C source to assembly CMakeFiles/zip.dir/zip_pkware.c.s" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_pkware.c" -o CMakeFiles/zip.dir/zip_pkware.c.s + +lib/CMakeFiles/zip.dir/zip_progress.c.o: lib/CMakeFiles/zip.dir/flags.make +lib/CMakeFiles/zip.dir/zip_progress.c.o: lib/CMakeFiles/zip.dir/includes_C.rsp +lib/CMakeFiles/zip.dir/zip_progress.c.o: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_progress.c +lib/CMakeFiles/zip.dir/zip_progress.c.o: lib/CMakeFiles/zip.dir/compiler_depend.ts + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_58) "Building C object lib/CMakeFiles/zip.dir/zip_progress.c.o" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -MD -MT lib/CMakeFiles/zip.dir/zip_progress.c.o -MF CMakeFiles/zip.dir/zip_progress.c.o.d -o CMakeFiles/zip.dir/zip_progress.c.o -c "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_progress.c" + +lib/CMakeFiles/zip.dir/zip_progress.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Preprocessing C source to CMakeFiles/zip.dir/zip_progress.c.i" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_progress.c" > CMakeFiles/zip.dir/zip_progress.c.i + +lib/CMakeFiles/zip.dir/zip_progress.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Compiling C source to assembly CMakeFiles/zip.dir/zip_progress.c.s" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_progress.c" -o CMakeFiles/zip.dir/zip_progress.c.s + +lib/CMakeFiles/zip.dir/zip_rename.c.o: lib/CMakeFiles/zip.dir/flags.make +lib/CMakeFiles/zip.dir/zip_rename.c.o: lib/CMakeFiles/zip.dir/includes_C.rsp +lib/CMakeFiles/zip.dir/zip_rename.c.o: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_rename.c +lib/CMakeFiles/zip.dir/zip_rename.c.o: lib/CMakeFiles/zip.dir/compiler_depend.ts + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_59) "Building C object lib/CMakeFiles/zip.dir/zip_rename.c.o" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -MD -MT lib/CMakeFiles/zip.dir/zip_rename.c.o -MF CMakeFiles/zip.dir/zip_rename.c.o.d -o CMakeFiles/zip.dir/zip_rename.c.o -c "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_rename.c" + +lib/CMakeFiles/zip.dir/zip_rename.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Preprocessing C source to CMakeFiles/zip.dir/zip_rename.c.i" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_rename.c" > CMakeFiles/zip.dir/zip_rename.c.i + +lib/CMakeFiles/zip.dir/zip_rename.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Compiling C source to assembly CMakeFiles/zip.dir/zip_rename.c.s" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_rename.c" -o CMakeFiles/zip.dir/zip_rename.c.s + +lib/CMakeFiles/zip.dir/zip_replace.c.o: lib/CMakeFiles/zip.dir/flags.make +lib/CMakeFiles/zip.dir/zip_replace.c.o: lib/CMakeFiles/zip.dir/includes_C.rsp +lib/CMakeFiles/zip.dir/zip_replace.c.o: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_replace.c +lib/CMakeFiles/zip.dir/zip_replace.c.o: lib/CMakeFiles/zip.dir/compiler_depend.ts + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_60) "Building C object lib/CMakeFiles/zip.dir/zip_replace.c.o" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -MD -MT lib/CMakeFiles/zip.dir/zip_replace.c.o -MF CMakeFiles/zip.dir/zip_replace.c.o.d -o CMakeFiles/zip.dir/zip_replace.c.o -c "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_replace.c" + +lib/CMakeFiles/zip.dir/zip_replace.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Preprocessing C source to CMakeFiles/zip.dir/zip_replace.c.i" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_replace.c" > CMakeFiles/zip.dir/zip_replace.c.i + +lib/CMakeFiles/zip.dir/zip_replace.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Compiling C source to assembly CMakeFiles/zip.dir/zip_replace.c.s" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_replace.c" -o CMakeFiles/zip.dir/zip_replace.c.s + +lib/CMakeFiles/zip.dir/zip_set_archive_comment.c.o: lib/CMakeFiles/zip.dir/flags.make +lib/CMakeFiles/zip.dir/zip_set_archive_comment.c.o: lib/CMakeFiles/zip.dir/includes_C.rsp +lib/CMakeFiles/zip.dir/zip_set_archive_comment.c.o: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_set_archive_comment.c +lib/CMakeFiles/zip.dir/zip_set_archive_comment.c.o: lib/CMakeFiles/zip.dir/compiler_depend.ts + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_61) "Building C object lib/CMakeFiles/zip.dir/zip_set_archive_comment.c.o" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -MD -MT lib/CMakeFiles/zip.dir/zip_set_archive_comment.c.o -MF CMakeFiles/zip.dir/zip_set_archive_comment.c.o.d -o CMakeFiles/zip.dir/zip_set_archive_comment.c.o -c "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_set_archive_comment.c" + +lib/CMakeFiles/zip.dir/zip_set_archive_comment.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Preprocessing C source to CMakeFiles/zip.dir/zip_set_archive_comment.c.i" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_set_archive_comment.c" > CMakeFiles/zip.dir/zip_set_archive_comment.c.i + +lib/CMakeFiles/zip.dir/zip_set_archive_comment.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Compiling C source to assembly CMakeFiles/zip.dir/zip_set_archive_comment.c.s" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_set_archive_comment.c" -o CMakeFiles/zip.dir/zip_set_archive_comment.c.s + +lib/CMakeFiles/zip.dir/zip_set_archive_flag.c.o: lib/CMakeFiles/zip.dir/flags.make +lib/CMakeFiles/zip.dir/zip_set_archive_flag.c.o: lib/CMakeFiles/zip.dir/includes_C.rsp +lib/CMakeFiles/zip.dir/zip_set_archive_flag.c.o: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_set_archive_flag.c +lib/CMakeFiles/zip.dir/zip_set_archive_flag.c.o: lib/CMakeFiles/zip.dir/compiler_depend.ts + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_62) "Building C object lib/CMakeFiles/zip.dir/zip_set_archive_flag.c.o" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -MD -MT lib/CMakeFiles/zip.dir/zip_set_archive_flag.c.o -MF CMakeFiles/zip.dir/zip_set_archive_flag.c.o.d -o CMakeFiles/zip.dir/zip_set_archive_flag.c.o -c "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_set_archive_flag.c" + +lib/CMakeFiles/zip.dir/zip_set_archive_flag.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Preprocessing C source to CMakeFiles/zip.dir/zip_set_archive_flag.c.i" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_set_archive_flag.c" > CMakeFiles/zip.dir/zip_set_archive_flag.c.i + +lib/CMakeFiles/zip.dir/zip_set_archive_flag.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Compiling C source to assembly CMakeFiles/zip.dir/zip_set_archive_flag.c.s" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_set_archive_flag.c" -o CMakeFiles/zip.dir/zip_set_archive_flag.c.s + +lib/CMakeFiles/zip.dir/zip_set_default_password.c.o: lib/CMakeFiles/zip.dir/flags.make +lib/CMakeFiles/zip.dir/zip_set_default_password.c.o: lib/CMakeFiles/zip.dir/includes_C.rsp +lib/CMakeFiles/zip.dir/zip_set_default_password.c.o: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_set_default_password.c +lib/CMakeFiles/zip.dir/zip_set_default_password.c.o: lib/CMakeFiles/zip.dir/compiler_depend.ts + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_63) "Building C object lib/CMakeFiles/zip.dir/zip_set_default_password.c.o" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -MD -MT lib/CMakeFiles/zip.dir/zip_set_default_password.c.o -MF CMakeFiles/zip.dir/zip_set_default_password.c.o.d -o CMakeFiles/zip.dir/zip_set_default_password.c.o -c "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_set_default_password.c" + +lib/CMakeFiles/zip.dir/zip_set_default_password.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Preprocessing C source to CMakeFiles/zip.dir/zip_set_default_password.c.i" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_set_default_password.c" > CMakeFiles/zip.dir/zip_set_default_password.c.i + +lib/CMakeFiles/zip.dir/zip_set_default_password.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Compiling C source to assembly CMakeFiles/zip.dir/zip_set_default_password.c.s" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_set_default_password.c" -o CMakeFiles/zip.dir/zip_set_default_password.c.s + +lib/CMakeFiles/zip.dir/zip_set_file_comment.c.o: lib/CMakeFiles/zip.dir/flags.make +lib/CMakeFiles/zip.dir/zip_set_file_comment.c.o: lib/CMakeFiles/zip.dir/includes_C.rsp +lib/CMakeFiles/zip.dir/zip_set_file_comment.c.o: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_set_file_comment.c +lib/CMakeFiles/zip.dir/zip_set_file_comment.c.o: lib/CMakeFiles/zip.dir/compiler_depend.ts + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_64) "Building C object lib/CMakeFiles/zip.dir/zip_set_file_comment.c.o" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -MD -MT lib/CMakeFiles/zip.dir/zip_set_file_comment.c.o -MF CMakeFiles/zip.dir/zip_set_file_comment.c.o.d -o CMakeFiles/zip.dir/zip_set_file_comment.c.o -c "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_set_file_comment.c" + +lib/CMakeFiles/zip.dir/zip_set_file_comment.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Preprocessing C source to CMakeFiles/zip.dir/zip_set_file_comment.c.i" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_set_file_comment.c" > CMakeFiles/zip.dir/zip_set_file_comment.c.i + +lib/CMakeFiles/zip.dir/zip_set_file_comment.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Compiling C source to assembly CMakeFiles/zip.dir/zip_set_file_comment.c.s" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_set_file_comment.c" -o CMakeFiles/zip.dir/zip_set_file_comment.c.s + +lib/CMakeFiles/zip.dir/zip_set_file_compression.c.o: lib/CMakeFiles/zip.dir/flags.make +lib/CMakeFiles/zip.dir/zip_set_file_compression.c.o: lib/CMakeFiles/zip.dir/includes_C.rsp +lib/CMakeFiles/zip.dir/zip_set_file_compression.c.o: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_set_file_compression.c +lib/CMakeFiles/zip.dir/zip_set_file_compression.c.o: lib/CMakeFiles/zip.dir/compiler_depend.ts + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_65) "Building C object lib/CMakeFiles/zip.dir/zip_set_file_compression.c.o" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -MD -MT lib/CMakeFiles/zip.dir/zip_set_file_compression.c.o -MF CMakeFiles/zip.dir/zip_set_file_compression.c.o.d -o CMakeFiles/zip.dir/zip_set_file_compression.c.o -c "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_set_file_compression.c" + +lib/CMakeFiles/zip.dir/zip_set_file_compression.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Preprocessing C source to CMakeFiles/zip.dir/zip_set_file_compression.c.i" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_set_file_compression.c" > CMakeFiles/zip.dir/zip_set_file_compression.c.i + +lib/CMakeFiles/zip.dir/zip_set_file_compression.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Compiling C source to assembly CMakeFiles/zip.dir/zip_set_file_compression.c.s" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_set_file_compression.c" -o CMakeFiles/zip.dir/zip_set_file_compression.c.s + +lib/CMakeFiles/zip.dir/zip_set_name.c.o: lib/CMakeFiles/zip.dir/flags.make +lib/CMakeFiles/zip.dir/zip_set_name.c.o: lib/CMakeFiles/zip.dir/includes_C.rsp +lib/CMakeFiles/zip.dir/zip_set_name.c.o: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_set_name.c +lib/CMakeFiles/zip.dir/zip_set_name.c.o: lib/CMakeFiles/zip.dir/compiler_depend.ts + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_66) "Building C object lib/CMakeFiles/zip.dir/zip_set_name.c.o" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -MD -MT lib/CMakeFiles/zip.dir/zip_set_name.c.o -MF CMakeFiles/zip.dir/zip_set_name.c.o.d -o CMakeFiles/zip.dir/zip_set_name.c.o -c "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_set_name.c" + +lib/CMakeFiles/zip.dir/zip_set_name.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Preprocessing C source to CMakeFiles/zip.dir/zip_set_name.c.i" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_set_name.c" > CMakeFiles/zip.dir/zip_set_name.c.i + +lib/CMakeFiles/zip.dir/zip_set_name.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Compiling C source to assembly CMakeFiles/zip.dir/zip_set_name.c.s" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_set_name.c" -o CMakeFiles/zip.dir/zip_set_name.c.s + +lib/CMakeFiles/zip.dir/zip_source_accept_empty.c.o: lib/CMakeFiles/zip.dir/flags.make +lib/CMakeFiles/zip.dir/zip_source_accept_empty.c.o: lib/CMakeFiles/zip.dir/includes_C.rsp +lib/CMakeFiles/zip.dir/zip_source_accept_empty.c.o: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_source_accept_empty.c +lib/CMakeFiles/zip.dir/zip_source_accept_empty.c.o: lib/CMakeFiles/zip.dir/compiler_depend.ts + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_67) "Building C object lib/CMakeFiles/zip.dir/zip_source_accept_empty.c.o" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -MD -MT lib/CMakeFiles/zip.dir/zip_source_accept_empty.c.o -MF CMakeFiles/zip.dir/zip_source_accept_empty.c.o.d -o CMakeFiles/zip.dir/zip_source_accept_empty.c.o -c "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_source_accept_empty.c" + +lib/CMakeFiles/zip.dir/zip_source_accept_empty.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Preprocessing C source to CMakeFiles/zip.dir/zip_source_accept_empty.c.i" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_source_accept_empty.c" > CMakeFiles/zip.dir/zip_source_accept_empty.c.i + +lib/CMakeFiles/zip.dir/zip_source_accept_empty.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Compiling C source to assembly CMakeFiles/zip.dir/zip_source_accept_empty.c.s" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_source_accept_empty.c" -o CMakeFiles/zip.dir/zip_source_accept_empty.c.s + +lib/CMakeFiles/zip.dir/zip_source_begin_write.c.o: lib/CMakeFiles/zip.dir/flags.make +lib/CMakeFiles/zip.dir/zip_source_begin_write.c.o: lib/CMakeFiles/zip.dir/includes_C.rsp +lib/CMakeFiles/zip.dir/zip_source_begin_write.c.o: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_source_begin_write.c +lib/CMakeFiles/zip.dir/zip_source_begin_write.c.o: lib/CMakeFiles/zip.dir/compiler_depend.ts + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_68) "Building C object lib/CMakeFiles/zip.dir/zip_source_begin_write.c.o" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -MD -MT lib/CMakeFiles/zip.dir/zip_source_begin_write.c.o -MF CMakeFiles/zip.dir/zip_source_begin_write.c.o.d -o CMakeFiles/zip.dir/zip_source_begin_write.c.o -c "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_source_begin_write.c" + +lib/CMakeFiles/zip.dir/zip_source_begin_write.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Preprocessing C source to CMakeFiles/zip.dir/zip_source_begin_write.c.i" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_source_begin_write.c" > CMakeFiles/zip.dir/zip_source_begin_write.c.i + +lib/CMakeFiles/zip.dir/zip_source_begin_write.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Compiling C source to assembly CMakeFiles/zip.dir/zip_source_begin_write.c.s" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_source_begin_write.c" -o CMakeFiles/zip.dir/zip_source_begin_write.c.s + +lib/CMakeFiles/zip.dir/zip_source_begin_write_cloning.c.o: lib/CMakeFiles/zip.dir/flags.make +lib/CMakeFiles/zip.dir/zip_source_begin_write_cloning.c.o: lib/CMakeFiles/zip.dir/includes_C.rsp +lib/CMakeFiles/zip.dir/zip_source_begin_write_cloning.c.o: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_source_begin_write_cloning.c +lib/CMakeFiles/zip.dir/zip_source_begin_write_cloning.c.o: lib/CMakeFiles/zip.dir/compiler_depend.ts + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_69) "Building C object lib/CMakeFiles/zip.dir/zip_source_begin_write_cloning.c.o" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -MD -MT lib/CMakeFiles/zip.dir/zip_source_begin_write_cloning.c.o -MF CMakeFiles/zip.dir/zip_source_begin_write_cloning.c.o.d -o CMakeFiles/zip.dir/zip_source_begin_write_cloning.c.o -c "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_source_begin_write_cloning.c" + +lib/CMakeFiles/zip.dir/zip_source_begin_write_cloning.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Preprocessing C source to CMakeFiles/zip.dir/zip_source_begin_write_cloning.c.i" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_source_begin_write_cloning.c" > CMakeFiles/zip.dir/zip_source_begin_write_cloning.c.i + +lib/CMakeFiles/zip.dir/zip_source_begin_write_cloning.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Compiling C source to assembly CMakeFiles/zip.dir/zip_source_begin_write_cloning.c.s" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_source_begin_write_cloning.c" -o CMakeFiles/zip.dir/zip_source_begin_write_cloning.c.s + +lib/CMakeFiles/zip.dir/zip_source_buffer.c.o: lib/CMakeFiles/zip.dir/flags.make +lib/CMakeFiles/zip.dir/zip_source_buffer.c.o: lib/CMakeFiles/zip.dir/includes_C.rsp +lib/CMakeFiles/zip.dir/zip_source_buffer.c.o: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_source_buffer.c +lib/CMakeFiles/zip.dir/zip_source_buffer.c.o: lib/CMakeFiles/zip.dir/compiler_depend.ts + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_70) "Building C object lib/CMakeFiles/zip.dir/zip_source_buffer.c.o" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -MD -MT lib/CMakeFiles/zip.dir/zip_source_buffer.c.o -MF CMakeFiles/zip.dir/zip_source_buffer.c.o.d -o CMakeFiles/zip.dir/zip_source_buffer.c.o -c "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_source_buffer.c" + +lib/CMakeFiles/zip.dir/zip_source_buffer.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Preprocessing C source to CMakeFiles/zip.dir/zip_source_buffer.c.i" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_source_buffer.c" > CMakeFiles/zip.dir/zip_source_buffer.c.i + +lib/CMakeFiles/zip.dir/zip_source_buffer.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Compiling C source to assembly CMakeFiles/zip.dir/zip_source_buffer.c.s" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_source_buffer.c" -o CMakeFiles/zip.dir/zip_source_buffer.c.s + +lib/CMakeFiles/zip.dir/zip_source_call.c.o: lib/CMakeFiles/zip.dir/flags.make +lib/CMakeFiles/zip.dir/zip_source_call.c.o: lib/CMakeFiles/zip.dir/includes_C.rsp +lib/CMakeFiles/zip.dir/zip_source_call.c.o: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_source_call.c +lib/CMakeFiles/zip.dir/zip_source_call.c.o: lib/CMakeFiles/zip.dir/compiler_depend.ts + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_71) "Building C object lib/CMakeFiles/zip.dir/zip_source_call.c.o" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -MD -MT lib/CMakeFiles/zip.dir/zip_source_call.c.o -MF CMakeFiles/zip.dir/zip_source_call.c.o.d -o CMakeFiles/zip.dir/zip_source_call.c.o -c "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_source_call.c" + +lib/CMakeFiles/zip.dir/zip_source_call.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Preprocessing C source to CMakeFiles/zip.dir/zip_source_call.c.i" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_source_call.c" > CMakeFiles/zip.dir/zip_source_call.c.i + +lib/CMakeFiles/zip.dir/zip_source_call.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Compiling C source to assembly CMakeFiles/zip.dir/zip_source_call.c.s" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_source_call.c" -o CMakeFiles/zip.dir/zip_source_call.c.s + +lib/CMakeFiles/zip.dir/zip_source_close.c.o: lib/CMakeFiles/zip.dir/flags.make +lib/CMakeFiles/zip.dir/zip_source_close.c.o: lib/CMakeFiles/zip.dir/includes_C.rsp +lib/CMakeFiles/zip.dir/zip_source_close.c.o: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_source_close.c +lib/CMakeFiles/zip.dir/zip_source_close.c.o: lib/CMakeFiles/zip.dir/compiler_depend.ts + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_72) "Building C object lib/CMakeFiles/zip.dir/zip_source_close.c.o" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -MD -MT lib/CMakeFiles/zip.dir/zip_source_close.c.o -MF CMakeFiles/zip.dir/zip_source_close.c.o.d -o CMakeFiles/zip.dir/zip_source_close.c.o -c "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_source_close.c" + +lib/CMakeFiles/zip.dir/zip_source_close.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Preprocessing C source to CMakeFiles/zip.dir/zip_source_close.c.i" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_source_close.c" > CMakeFiles/zip.dir/zip_source_close.c.i + +lib/CMakeFiles/zip.dir/zip_source_close.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Compiling C source to assembly CMakeFiles/zip.dir/zip_source_close.c.s" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_source_close.c" -o CMakeFiles/zip.dir/zip_source_close.c.s + +lib/CMakeFiles/zip.dir/zip_source_commit_write.c.o: lib/CMakeFiles/zip.dir/flags.make +lib/CMakeFiles/zip.dir/zip_source_commit_write.c.o: lib/CMakeFiles/zip.dir/includes_C.rsp +lib/CMakeFiles/zip.dir/zip_source_commit_write.c.o: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_source_commit_write.c +lib/CMakeFiles/zip.dir/zip_source_commit_write.c.o: lib/CMakeFiles/zip.dir/compiler_depend.ts + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_73) "Building C object lib/CMakeFiles/zip.dir/zip_source_commit_write.c.o" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -MD -MT lib/CMakeFiles/zip.dir/zip_source_commit_write.c.o -MF CMakeFiles/zip.dir/zip_source_commit_write.c.o.d -o CMakeFiles/zip.dir/zip_source_commit_write.c.o -c "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_source_commit_write.c" + +lib/CMakeFiles/zip.dir/zip_source_commit_write.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Preprocessing C source to CMakeFiles/zip.dir/zip_source_commit_write.c.i" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_source_commit_write.c" > CMakeFiles/zip.dir/zip_source_commit_write.c.i + +lib/CMakeFiles/zip.dir/zip_source_commit_write.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Compiling C source to assembly CMakeFiles/zip.dir/zip_source_commit_write.c.s" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_source_commit_write.c" -o CMakeFiles/zip.dir/zip_source_commit_write.c.s + +lib/CMakeFiles/zip.dir/zip_source_compress.c.o: lib/CMakeFiles/zip.dir/flags.make +lib/CMakeFiles/zip.dir/zip_source_compress.c.o: lib/CMakeFiles/zip.dir/includes_C.rsp +lib/CMakeFiles/zip.dir/zip_source_compress.c.o: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_source_compress.c +lib/CMakeFiles/zip.dir/zip_source_compress.c.o: lib/CMakeFiles/zip.dir/compiler_depend.ts + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_74) "Building C object lib/CMakeFiles/zip.dir/zip_source_compress.c.o" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -MD -MT lib/CMakeFiles/zip.dir/zip_source_compress.c.o -MF CMakeFiles/zip.dir/zip_source_compress.c.o.d -o CMakeFiles/zip.dir/zip_source_compress.c.o -c "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_source_compress.c" + +lib/CMakeFiles/zip.dir/zip_source_compress.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Preprocessing C source to CMakeFiles/zip.dir/zip_source_compress.c.i" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_source_compress.c" > CMakeFiles/zip.dir/zip_source_compress.c.i + +lib/CMakeFiles/zip.dir/zip_source_compress.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Compiling C source to assembly CMakeFiles/zip.dir/zip_source_compress.c.s" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_source_compress.c" -o CMakeFiles/zip.dir/zip_source_compress.c.s + +lib/CMakeFiles/zip.dir/zip_source_crc.c.o: lib/CMakeFiles/zip.dir/flags.make +lib/CMakeFiles/zip.dir/zip_source_crc.c.o: lib/CMakeFiles/zip.dir/includes_C.rsp +lib/CMakeFiles/zip.dir/zip_source_crc.c.o: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_source_crc.c +lib/CMakeFiles/zip.dir/zip_source_crc.c.o: lib/CMakeFiles/zip.dir/compiler_depend.ts + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_75) "Building C object lib/CMakeFiles/zip.dir/zip_source_crc.c.o" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -MD -MT lib/CMakeFiles/zip.dir/zip_source_crc.c.o -MF CMakeFiles/zip.dir/zip_source_crc.c.o.d -o CMakeFiles/zip.dir/zip_source_crc.c.o -c "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_source_crc.c" + +lib/CMakeFiles/zip.dir/zip_source_crc.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Preprocessing C source to CMakeFiles/zip.dir/zip_source_crc.c.i" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_source_crc.c" > CMakeFiles/zip.dir/zip_source_crc.c.i + +lib/CMakeFiles/zip.dir/zip_source_crc.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Compiling C source to assembly CMakeFiles/zip.dir/zip_source_crc.c.s" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_source_crc.c" -o CMakeFiles/zip.dir/zip_source_crc.c.s + +lib/CMakeFiles/zip.dir/zip_source_error.c.o: lib/CMakeFiles/zip.dir/flags.make +lib/CMakeFiles/zip.dir/zip_source_error.c.o: lib/CMakeFiles/zip.dir/includes_C.rsp +lib/CMakeFiles/zip.dir/zip_source_error.c.o: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_source_error.c +lib/CMakeFiles/zip.dir/zip_source_error.c.o: lib/CMakeFiles/zip.dir/compiler_depend.ts + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_76) "Building C object lib/CMakeFiles/zip.dir/zip_source_error.c.o" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -MD -MT lib/CMakeFiles/zip.dir/zip_source_error.c.o -MF CMakeFiles/zip.dir/zip_source_error.c.o.d -o CMakeFiles/zip.dir/zip_source_error.c.o -c "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_source_error.c" + +lib/CMakeFiles/zip.dir/zip_source_error.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Preprocessing C source to CMakeFiles/zip.dir/zip_source_error.c.i" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_source_error.c" > CMakeFiles/zip.dir/zip_source_error.c.i + +lib/CMakeFiles/zip.dir/zip_source_error.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Compiling C source to assembly CMakeFiles/zip.dir/zip_source_error.c.s" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_source_error.c" -o CMakeFiles/zip.dir/zip_source_error.c.s + +lib/CMakeFiles/zip.dir/zip_source_file_common.c.o: lib/CMakeFiles/zip.dir/flags.make +lib/CMakeFiles/zip.dir/zip_source_file_common.c.o: lib/CMakeFiles/zip.dir/includes_C.rsp +lib/CMakeFiles/zip.dir/zip_source_file_common.c.o: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_source_file_common.c +lib/CMakeFiles/zip.dir/zip_source_file_common.c.o: lib/CMakeFiles/zip.dir/compiler_depend.ts + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_77) "Building C object lib/CMakeFiles/zip.dir/zip_source_file_common.c.o" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -MD -MT lib/CMakeFiles/zip.dir/zip_source_file_common.c.o -MF CMakeFiles/zip.dir/zip_source_file_common.c.o.d -o CMakeFiles/zip.dir/zip_source_file_common.c.o -c "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_source_file_common.c" + +lib/CMakeFiles/zip.dir/zip_source_file_common.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Preprocessing C source to CMakeFiles/zip.dir/zip_source_file_common.c.i" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_source_file_common.c" > CMakeFiles/zip.dir/zip_source_file_common.c.i + +lib/CMakeFiles/zip.dir/zip_source_file_common.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Compiling C source to assembly CMakeFiles/zip.dir/zip_source_file_common.c.s" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_source_file_common.c" -o CMakeFiles/zip.dir/zip_source_file_common.c.s + +lib/CMakeFiles/zip.dir/zip_source_file_stdio.c.o: lib/CMakeFiles/zip.dir/flags.make +lib/CMakeFiles/zip.dir/zip_source_file_stdio.c.o: lib/CMakeFiles/zip.dir/includes_C.rsp +lib/CMakeFiles/zip.dir/zip_source_file_stdio.c.o: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_source_file_stdio.c +lib/CMakeFiles/zip.dir/zip_source_file_stdio.c.o: lib/CMakeFiles/zip.dir/compiler_depend.ts + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_78) "Building C object lib/CMakeFiles/zip.dir/zip_source_file_stdio.c.o" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -MD -MT lib/CMakeFiles/zip.dir/zip_source_file_stdio.c.o -MF CMakeFiles/zip.dir/zip_source_file_stdio.c.o.d -o CMakeFiles/zip.dir/zip_source_file_stdio.c.o -c "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_source_file_stdio.c" + +lib/CMakeFiles/zip.dir/zip_source_file_stdio.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Preprocessing C source to CMakeFiles/zip.dir/zip_source_file_stdio.c.i" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_source_file_stdio.c" > CMakeFiles/zip.dir/zip_source_file_stdio.c.i + +lib/CMakeFiles/zip.dir/zip_source_file_stdio.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Compiling C source to assembly CMakeFiles/zip.dir/zip_source_file_stdio.c.s" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_source_file_stdio.c" -o CMakeFiles/zip.dir/zip_source_file_stdio.c.s + +lib/CMakeFiles/zip.dir/zip_source_free.c.o: lib/CMakeFiles/zip.dir/flags.make +lib/CMakeFiles/zip.dir/zip_source_free.c.o: lib/CMakeFiles/zip.dir/includes_C.rsp +lib/CMakeFiles/zip.dir/zip_source_free.c.o: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_source_free.c +lib/CMakeFiles/zip.dir/zip_source_free.c.o: lib/CMakeFiles/zip.dir/compiler_depend.ts + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_79) "Building C object lib/CMakeFiles/zip.dir/zip_source_free.c.o" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -MD -MT lib/CMakeFiles/zip.dir/zip_source_free.c.o -MF CMakeFiles/zip.dir/zip_source_free.c.o.d -o CMakeFiles/zip.dir/zip_source_free.c.o -c "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_source_free.c" + +lib/CMakeFiles/zip.dir/zip_source_free.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Preprocessing C source to CMakeFiles/zip.dir/zip_source_free.c.i" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_source_free.c" > CMakeFiles/zip.dir/zip_source_free.c.i + +lib/CMakeFiles/zip.dir/zip_source_free.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Compiling C source to assembly CMakeFiles/zip.dir/zip_source_free.c.s" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_source_free.c" -o CMakeFiles/zip.dir/zip_source_free.c.s + +lib/CMakeFiles/zip.dir/zip_source_function.c.o: lib/CMakeFiles/zip.dir/flags.make +lib/CMakeFiles/zip.dir/zip_source_function.c.o: lib/CMakeFiles/zip.dir/includes_C.rsp +lib/CMakeFiles/zip.dir/zip_source_function.c.o: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_source_function.c +lib/CMakeFiles/zip.dir/zip_source_function.c.o: lib/CMakeFiles/zip.dir/compiler_depend.ts + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_80) "Building C object lib/CMakeFiles/zip.dir/zip_source_function.c.o" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -MD -MT lib/CMakeFiles/zip.dir/zip_source_function.c.o -MF CMakeFiles/zip.dir/zip_source_function.c.o.d -o CMakeFiles/zip.dir/zip_source_function.c.o -c "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_source_function.c" + +lib/CMakeFiles/zip.dir/zip_source_function.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Preprocessing C source to CMakeFiles/zip.dir/zip_source_function.c.i" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_source_function.c" > CMakeFiles/zip.dir/zip_source_function.c.i + +lib/CMakeFiles/zip.dir/zip_source_function.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Compiling C source to assembly CMakeFiles/zip.dir/zip_source_function.c.s" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_source_function.c" -o CMakeFiles/zip.dir/zip_source_function.c.s + +lib/CMakeFiles/zip.dir/zip_source_get_dostime.c.o: lib/CMakeFiles/zip.dir/flags.make +lib/CMakeFiles/zip.dir/zip_source_get_dostime.c.o: lib/CMakeFiles/zip.dir/includes_C.rsp +lib/CMakeFiles/zip.dir/zip_source_get_dostime.c.o: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_source_get_dostime.c +lib/CMakeFiles/zip.dir/zip_source_get_dostime.c.o: lib/CMakeFiles/zip.dir/compiler_depend.ts + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_81) "Building C object lib/CMakeFiles/zip.dir/zip_source_get_dostime.c.o" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -MD -MT lib/CMakeFiles/zip.dir/zip_source_get_dostime.c.o -MF CMakeFiles/zip.dir/zip_source_get_dostime.c.o.d -o CMakeFiles/zip.dir/zip_source_get_dostime.c.o -c "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_source_get_dostime.c" + +lib/CMakeFiles/zip.dir/zip_source_get_dostime.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Preprocessing C source to CMakeFiles/zip.dir/zip_source_get_dostime.c.i" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_source_get_dostime.c" > CMakeFiles/zip.dir/zip_source_get_dostime.c.i + +lib/CMakeFiles/zip.dir/zip_source_get_dostime.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Compiling C source to assembly CMakeFiles/zip.dir/zip_source_get_dostime.c.s" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_source_get_dostime.c" -o CMakeFiles/zip.dir/zip_source_get_dostime.c.s + +lib/CMakeFiles/zip.dir/zip_source_get_file_attributes.c.o: lib/CMakeFiles/zip.dir/flags.make +lib/CMakeFiles/zip.dir/zip_source_get_file_attributes.c.o: lib/CMakeFiles/zip.dir/includes_C.rsp +lib/CMakeFiles/zip.dir/zip_source_get_file_attributes.c.o: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_source_get_file_attributes.c +lib/CMakeFiles/zip.dir/zip_source_get_file_attributes.c.o: lib/CMakeFiles/zip.dir/compiler_depend.ts + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_82) "Building C object lib/CMakeFiles/zip.dir/zip_source_get_file_attributes.c.o" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -MD -MT lib/CMakeFiles/zip.dir/zip_source_get_file_attributes.c.o -MF CMakeFiles/zip.dir/zip_source_get_file_attributes.c.o.d -o CMakeFiles/zip.dir/zip_source_get_file_attributes.c.o -c "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_source_get_file_attributes.c" + +lib/CMakeFiles/zip.dir/zip_source_get_file_attributes.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Preprocessing C source to CMakeFiles/zip.dir/zip_source_get_file_attributes.c.i" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_source_get_file_attributes.c" > CMakeFiles/zip.dir/zip_source_get_file_attributes.c.i + +lib/CMakeFiles/zip.dir/zip_source_get_file_attributes.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Compiling C source to assembly CMakeFiles/zip.dir/zip_source_get_file_attributes.c.s" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_source_get_file_attributes.c" -o CMakeFiles/zip.dir/zip_source_get_file_attributes.c.s + +lib/CMakeFiles/zip.dir/zip_source_is_deleted.c.o: lib/CMakeFiles/zip.dir/flags.make +lib/CMakeFiles/zip.dir/zip_source_is_deleted.c.o: lib/CMakeFiles/zip.dir/includes_C.rsp +lib/CMakeFiles/zip.dir/zip_source_is_deleted.c.o: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_source_is_deleted.c +lib/CMakeFiles/zip.dir/zip_source_is_deleted.c.o: lib/CMakeFiles/zip.dir/compiler_depend.ts + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_83) "Building C object lib/CMakeFiles/zip.dir/zip_source_is_deleted.c.o" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -MD -MT lib/CMakeFiles/zip.dir/zip_source_is_deleted.c.o -MF CMakeFiles/zip.dir/zip_source_is_deleted.c.o.d -o CMakeFiles/zip.dir/zip_source_is_deleted.c.o -c "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_source_is_deleted.c" + +lib/CMakeFiles/zip.dir/zip_source_is_deleted.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Preprocessing C source to CMakeFiles/zip.dir/zip_source_is_deleted.c.i" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_source_is_deleted.c" > CMakeFiles/zip.dir/zip_source_is_deleted.c.i + +lib/CMakeFiles/zip.dir/zip_source_is_deleted.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Compiling C source to assembly CMakeFiles/zip.dir/zip_source_is_deleted.c.s" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_source_is_deleted.c" -o CMakeFiles/zip.dir/zip_source_is_deleted.c.s + +lib/CMakeFiles/zip.dir/zip_source_layered.c.o: lib/CMakeFiles/zip.dir/flags.make +lib/CMakeFiles/zip.dir/zip_source_layered.c.o: lib/CMakeFiles/zip.dir/includes_C.rsp +lib/CMakeFiles/zip.dir/zip_source_layered.c.o: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_source_layered.c +lib/CMakeFiles/zip.dir/zip_source_layered.c.o: lib/CMakeFiles/zip.dir/compiler_depend.ts + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_84) "Building C object lib/CMakeFiles/zip.dir/zip_source_layered.c.o" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -MD -MT lib/CMakeFiles/zip.dir/zip_source_layered.c.o -MF CMakeFiles/zip.dir/zip_source_layered.c.o.d -o CMakeFiles/zip.dir/zip_source_layered.c.o -c "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_source_layered.c" + +lib/CMakeFiles/zip.dir/zip_source_layered.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Preprocessing C source to CMakeFiles/zip.dir/zip_source_layered.c.i" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_source_layered.c" > CMakeFiles/zip.dir/zip_source_layered.c.i + +lib/CMakeFiles/zip.dir/zip_source_layered.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Compiling C source to assembly CMakeFiles/zip.dir/zip_source_layered.c.s" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_source_layered.c" -o CMakeFiles/zip.dir/zip_source_layered.c.s + +lib/CMakeFiles/zip.dir/zip_source_open.c.o: lib/CMakeFiles/zip.dir/flags.make +lib/CMakeFiles/zip.dir/zip_source_open.c.o: lib/CMakeFiles/zip.dir/includes_C.rsp +lib/CMakeFiles/zip.dir/zip_source_open.c.o: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_source_open.c +lib/CMakeFiles/zip.dir/zip_source_open.c.o: lib/CMakeFiles/zip.dir/compiler_depend.ts + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_85) "Building C object lib/CMakeFiles/zip.dir/zip_source_open.c.o" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -MD -MT lib/CMakeFiles/zip.dir/zip_source_open.c.o -MF CMakeFiles/zip.dir/zip_source_open.c.o.d -o CMakeFiles/zip.dir/zip_source_open.c.o -c "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_source_open.c" + +lib/CMakeFiles/zip.dir/zip_source_open.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Preprocessing C source to CMakeFiles/zip.dir/zip_source_open.c.i" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_source_open.c" > CMakeFiles/zip.dir/zip_source_open.c.i + +lib/CMakeFiles/zip.dir/zip_source_open.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Compiling C source to assembly CMakeFiles/zip.dir/zip_source_open.c.s" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_source_open.c" -o CMakeFiles/zip.dir/zip_source_open.c.s + +lib/CMakeFiles/zip.dir/zip_source_pass_to_lower_layer.c.o: lib/CMakeFiles/zip.dir/flags.make +lib/CMakeFiles/zip.dir/zip_source_pass_to_lower_layer.c.o: lib/CMakeFiles/zip.dir/includes_C.rsp +lib/CMakeFiles/zip.dir/zip_source_pass_to_lower_layer.c.o: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_source_pass_to_lower_layer.c +lib/CMakeFiles/zip.dir/zip_source_pass_to_lower_layer.c.o: lib/CMakeFiles/zip.dir/compiler_depend.ts + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_86) "Building C object lib/CMakeFiles/zip.dir/zip_source_pass_to_lower_layer.c.o" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -MD -MT lib/CMakeFiles/zip.dir/zip_source_pass_to_lower_layer.c.o -MF CMakeFiles/zip.dir/zip_source_pass_to_lower_layer.c.o.d -o CMakeFiles/zip.dir/zip_source_pass_to_lower_layer.c.o -c "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_source_pass_to_lower_layer.c" + +lib/CMakeFiles/zip.dir/zip_source_pass_to_lower_layer.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Preprocessing C source to CMakeFiles/zip.dir/zip_source_pass_to_lower_layer.c.i" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_source_pass_to_lower_layer.c" > CMakeFiles/zip.dir/zip_source_pass_to_lower_layer.c.i + +lib/CMakeFiles/zip.dir/zip_source_pass_to_lower_layer.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Compiling C source to assembly CMakeFiles/zip.dir/zip_source_pass_to_lower_layer.c.s" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_source_pass_to_lower_layer.c" -o CMakeFiles/zip.dir/zip_source_pass_to_lower_layer.c.s + +lib/CMakeFiles/zip.dir/zip_source_pkware_decode.c.o: lib/CMakeFiles/zip.dir/flags.make +lib/CMakeFiles/zip.dir/zip_source_pkware_decode.c.o: lib/CMakeFiles/zip.dir/includes_C.rsp +lib/CMakeFiles/zip.dir/zip_source_pkware_decode.c.o: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_source_pkware_decode.c +lib/CMakeFiles/zip.dir/zip_source_pkware_decode.c.o: lib/CMakeFiles/zip.dir/compiler_depend.ts + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_87) "Building C object lib/CMakeFiles/zip.dir/zip_source_pkware_decode.c.o" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -MD -MT lib/CMakeFiles/zip.dir/zip_source_pkware_decode.c.o -MF CMakeFiles/zip.dir/zip_source_pkware_decode.c.o.d -o CMakeFiles/zip.dir/zip_source_pkware_decode.c.o -c "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_source_pkware_decode.c" + +lib/CMakeFiles/zip.dir/zip_source_pkware_decode.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Preprocessing C source to CMakeFiles/zip.dir/zip_source_pkware_decode.c.i" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_source_pkware_decode.c" > CMakeFiles/zip.dir/zip_source_pkware_decode.c.i + +lib/CMakeFiles/zip.dir/zip_source_pkware_decode.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Compiling C source to assembly CMakeFiles/zip.dir/zip_source_pkware_decode.c.s" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_source_pkware_decode.c" -o CMakeFiles/zip.dir/zip_source_pkware_decode.c.s + +lib/CMakeFiles/zip.dir/zip_source_pkware_encode.c.o: lib/CMakeFiles/zip.dir/flags.make +lib/CMakeFiles/zip.dir/zip_source_pkware_encode.c.o: lib/CMakeFiles/zip.dir/includes_C.rsp +lib/CMakeFiles/zip.dir/zip_source_pkware_encode.c.o: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_source_pkware_encode.c +lib/CMakeFiles/zip.dir/zip_source_pkware_encode.c.o: lib/CMakeFiles/zip.dir/compiler_depend.ts + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_88) "Building C object lib/CMakeFiles/zip.dir/zip_source_pkware_encode.c.o" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -MD -MT lib/CMakeFiles/zip.dir/zip_source_pkware_encode.c.o -MF CMakeFiles/zip.dir/zip_source_pkware_encode.c.o.d -o CMakeFiles/zip.dir/zip_source_pkware_encode.c.o -c "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_source_pkware_encode.c" + +lib/CMakeFiles/zip.dir/zip_source_pkware_encode.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Preprocessing C source to CMakeFiles/zip.dir/zip_source_pkware_encode.c.i" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_source_pkware_encode.c" > CMakeFiles/zip.dir/zip_source_pkware_encode.c.i + +lib/CMakeFiles/zip.dir/zip_source_pkware_encode.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Compiling C source to assembly CMakeFiles/zip.dir/zip_source_pkware_encode.c.s" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_source_pkware_encode.c" -o CMakeFiles/zip.dir/zip_source_pkware_encode.c.s + +lib/CMakeFiles/zip.dir/zip_source_read.c.o: lib/CMakeFiles/zip.dir/flags.make +lib/CMakeFiles/zip.dir/zip_source_read.c.o: lib/CMakeFiles/zip.dir/includes_C.rsp +lib/CMakeFiles/zip.dir/zip_source_read.c.o: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_source_read.c +lib/CMakeFiles/zip.dir/zip_source_read.c.o: lib/CMakeFiles/zip.dir/compiler_depend.ts + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_89) "Building C object lib/CMakeFiles/zip.dir/zip_source_read.c.o" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -MD -MT lib/CMakeFiles/zip.dir/zip_source_read.c.o -MF CMakeFiles/zip.dir/zip_source_read.c.o.d -o CMakeFiles/zip.dir/zip_source_read.c.o -c "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_source_read.c" + +lib/CMakeFiles/zip.dir/zip_source_read.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Preprocessing C source to CMakeFiles/zip.dir/zip_source_read.c.i" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_source_read.c" > CMakeFiles/zip.dir/zip_source_read.c.i + +lib/CMakeFiles/zip.dir/zip_source_read.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Compiling C source to assembly CMakeFiles/zip.dir/zip_source_read.c.s" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_source_read.c" -o CMakeFiles/zip.dir/zip_source_read.c.s + +lib/CMakeFiles/zip.dir/zip_source_remove.c.o: lib/CMakeFiles/zip.dir/flags.make +lib/CMakeFiles/zip.dir/zip_source_remove.c.o: lib/CMakeFiles/zip.dir/includes_C.rsp +lib/CMakeFiles/zip.dir/zip_source_remove.c.o: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_source_remove.c +lib/CMakeFiles/zip.dir/zip_source_remove.c.o: lib/CMakeFiles/zip.dir/compiler_depend.ts + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_90) "Building C object lib/CMakeFiles/zip.dir/zip_source_remove.c.o" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -MD -MT lib/CMakeFiles/zip.dir/zip_source_remove.c.o -MF CMakeFiles/zip.dir/zip_source_remove.c.o.d -o CMakeFiles/zip.dir/zip_source_remove.c.o -c "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_source_remove.c" + +lib/CMakeFiles/zip.dir/zip_source_remove.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Preprocessing C source to CMakeFiles/zip.dir/zip_source_remove.c.i" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_source_remove.c" > CMakeFiles/zip.dir/zip_source_remove.c.i + +lib/CMakeFiles/zip.dir/zip_source_remove.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Compiling C source to assembly CMakeFiles/zip.dir/zip_source_remove.c.s" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_source_remove.c" -o CMakeFiles/zip.dir/zip_source_remove.c.s + +lib/CMakeFiles/zip.dir/zip_source_rollback_write.c.o: lib/CMakeFiles/zip.dir/flags.make +lib/CMakeFiles/zip.dir/zip_source_rollback_write.c.o: lib/CMakeFiles/zip.dir/includes_C.rsp +lib/CMakeFiles/zip.dir/zip_source_rollback_write.c.o: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_source_rollback_write.c +lib/CMakeFiles/zip.dir/zip_source_rollback_write.c.o: lib/CMakeFiles/zip.dir/compiler_depend.ts + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_91) "Building C object lib/CMakeFiles/zip.dir/zip_source_rollback_write.c.o" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -MD -MT lib/CMakeFiles/zip.dir/zip_source_rollback_write.c.o -MF CMakeFiles/zip.dir/zip_source_rollback_write.c.o.d -o CMakeFiles/zip.dir/zip_source_rollback_write.c.o -c "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_source_rollback_write.c" + +lib/CMakeFiles/zip.dir/zip_source_rollback_write.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Preprocessing C source to CMakeFiles/zip.dir/zip_source_rollback_write.c.i" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_source_rollback_write.c" > CMakeFiles/zip.dir/zip_source_rollback_write.c.i + +lib/CMakeFiles/zip.dir/zip_source_rollback_write.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Compiling C source to assembly CMakeFiles/zip.dir/zip_source_rollback_write.c.s" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_source_rollback_write.c" -o CMakeFiles/zip.dir/zip_source_rollback_write.c.s + +lib/CMakeFiles/zip.dir/zip_source_seek.c.o: lib/CMakeFiles/zip.dir/flags.make +lib/CMakeFiles/zip.dir/zip_source_seek.c.o: lib/CMakeFiles/zip.dir/includes_C.rsp +lib/CMakeFiles/zip.dir/zip_source_seek.c.o: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_source_seek.c +lib/CMakeFiles/zip.dir/zip_source_seek.c.o: lib/CMakeFiles/zip.dir/compiler_depend.ts + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_92) "Building C object lib/CMakeFiles/zip.dir/zip_source_seek.c.o" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -MD -MT lib/CMakeFiles/zip.dir/zip_source_seek.c.o -MF CMakeFiles/zip.dir/zip_source_seek.c.o.d -o CMakeFiles/zip.dir/zip_source_seek.c.o -c "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_source_seek.c" + +lib/CMakeFiles/zip.dir/zip_source_seek.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Preprocessing C source to CMakeFiles/zip.dir/zip_source_seek.c.i" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_source_seek.c" > CMakeFiles/zip.dir/zip_source_seek.c.i + +lib/CMakeFiles/zip.dir/zip_source_seek.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Compiling C source to assembly CMakeFiles/zip.dir/zip_source_seek.c.s" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_source_seek.c" -o CMakeFiles/zip.dir/zip_source_seek.c.s + +lib/CMakeFiles/zip.dir/zip_source_seek_write.c.o: lib/CMakeFiles/zip.dir/flags.make +lib/CMakeFiles/zip.dir/zip_source_seek_write.c.o: lib/CMakeFiles/zip.dir/includes_C.rsp +lib/CMakeFiles/zip.dir/zip_source_seek_write.c.o: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_source_seek_write.c +lib/CMakeFiles/zip.dir/zip_source_seek_write.c.o: lib/CMakeFiles/zip.dir/compiler_depend.ts + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_93) "Building C object lib/CMakeFiles/zip.dir/zip_source_seek_write.c.o" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -MD -MT lib/CMakeFiles/zip.dir/zip_source_seek_write.c.o -MF CMakeFiles/zip.dir/zip_source_seek_write.c.o.d -o CMakeFiles/zip.dir/zip_source_seek_write.c.o -c "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_source_seek_write.c" + +lib/CMakeFiles/zip.dir/zip_source_seek_write.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Preprocessing C source to CMakeFiles/zip.dir/zip_source_seek_write.c.i" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_source_seek_write.c" > CMakeFiles/zip.dir/zip_source_seek_write.c.i + +lib/CMakeFiles/zip.dir/zip_source_seek_write.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Compiling C source to assembly CMakeFiles/zip.dir/zip_source_seek_write.c.s" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_source_seek_write.c" -o CMakeFiles/zip.dir/zip_source_seek_write.c.s + +lib/CMakeFiles/zip.dir/zip_source_stat.c.o: lib/CMakeFiles/zip.dir/flags.make +lib/CMakeFiles/zip.dir/zip_source_stat.c.o: lib/CMakeFiles/zip.dir/includes_C.rsp +lib/CMakeFiles/zip.dir/zip_source_stat.c.o: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_source_stat.c +lib/CMakeFiles/zip.dir/zip_source_stat.c.o: lib/CMakeFiles/zip.dir/compiler_depend.ts + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_94) "Building C object lib/CMakeFiles/zip.dir/zip_source_stat.c.o" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -MD -MT lib/CMakeFiles/zip.dir/zip_source_stat.c.o -MF CMakeFiles/zip.dir/zip_source_stat.c.o.d -o CMakeFiles/zip.dir/zip_source_stat.c.o -c "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_source_stat.c" + +lib/CMakeFiles/zip.dir/zip_source_stat.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Preprocessing C source to CMakeFiles/zip.dir/zip_source_stat.c.i" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_source_stat.c" > CMakeFiles/zip.dir/zip_source_stat.c.i + +lib/CMakeFiles/zip.dir/zip_source_stat.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Compiling C source to assembly CMakeFiles/zip.dir/zip_source_stat.c.s" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_source_stat.c" -o CMakeFiles/zip.dir/zip_source_stat.c.s + +lib/CMakeFiles/zip.dir/zip_source_supports.c.o: lib/CMakeFiles/zip.dir/flags.make +lib/CMakeFiles/zip.dir/zip_source_supports.c.o: lib/CMakeFiles/zip.dir/includes_C.rsp +lib/CMakeFiles/zip.dir/zip_source_supports.c.o: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_source_supports.c +lib/CMakeFiles/zip.dir/zip_source_supports.c.o: lib/CMakeFiles/zip.dir/compiler_depend.ts + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_95) "Building C object lib/CMakeFiles/zip.dir/zip_source_supports.c.o" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -MD -MT lib/CMakeFiles/zip.dir/zip_source_supports.c.o -MF CMakeFiles/zip.dir/zip_source_supports.c.o.d -o CMakeFiles/zip.dir/zip_source_supports.c.o -c "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_source_supports.c" + +lib/CMakeFiles/zip.dir/zip_source_supports.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Preprocessing C source to CMakeFiles/zip.dir/zip_source_supports.c.i" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_source_supports.c" > CMakeFiles/zip.dir/zip_source_supports.c.i + +lib/CMakeFiles/zip.dir/zip_source_supports.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Compiling C source to assembly CMakeFiles/zip.dir/zip_source_supports.c.s" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_source_supports.c" -o CMakeFiles/zip.dir/zip_source_supports.c.s + +lib/CMakeFiles/zip.dir/zip_source_tell.c.o: lib/CMakeFiles/zip.dir/flags.make +lib/CMakeFiles/zip.dir/zip_source_tell.c.o: lib/CMakeFiles/zip.dir/includes_C.rsp +lib/CMakeFiles/zip.dir/zip_source_tell.c.o: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_source_tell.c +lib/CMakeFiles/zip.dir/zip_source_tell.c.o: lib/CMakeFiles/zip.dir/compiler_depend.ts + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_96) "Building C object lib/CMakeFiles/zip.dir/zip_source_tell.c.o" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -MD -MT lib/CMakeFiles/zip.dir/zip_source_tell.c.o -MF CMakeFiles/zip.dir/zip_source_tell.c.o.d -o CMakeFiles/zip.dir/zip_source_tell.c.o -c "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_source_tell.c" + +lib/CMakeFiles/zip.dir/zip_source_tell.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Preprocessing C source to CMakeFiles/zip.dir/zip_source_tell.c.i" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_source_tell.c" > CMakeFiles/zip.dir/zip_source_tell.c.i + +lib/CMakeFiles/zip.dir/zip_source_tell.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Compiling C source to assembly CMakeFiles/zip.dir/zip_source_tell.c.s" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_source_tell.c" -o CMakeFiles/zip.dir/zip_source_tell.c.s + +lib/CMakeFiles/zip.dir/zip_source_tell_write.c.o: lib/CMakeFiles/zip.dir/flags.make +lib/CMakeFiles/zip.dir/zip_source_tell_write.c.o: lib/CMakeFiles/zip.dir/includes_C.rsp +lib/CMakeFiles/zip.dir/zip_source_tell_write.c.o: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_source_tell_write.c +lib/CMakeFiles/zip.dir/zip_source_tell_write.c.o: lib/CMakeFiles/zip.dir/compiler_depend.ts + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_97) "Building C object lib/CMakeFiles/zip.dir/zip_source_tell_write.c.o" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -MD -MT lib/CMakeFiles/zip.dir/zip_source_tell_write.c.o -MF CMakeFiles/zip.dir/zip_source_tell_write.c.o.d -o CMakeFiles/zip.dir/zip_source_tell_write.c.o -c "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_source_tell_write.c" + +lib/CMakeFiles/zip.dir/zip_source_tell_write.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Preprocessing C source to CMakeFiles/zip.dir/zip_source_tell_write.c.i" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_source_tell_write.c" > CMakeFiles/zip.dir/zip_source_tell_write.c.i + +lib/CMakeFiles/zip.dir/zip_source_tell_write.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Compiling C source to assembly CMakeFiles/zip.dir/zip_source_tell_write.c.s" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_source_tell_write.c" -o CMakeFiles/zip.dir/zip_source_tell_write.c.s + +lib/CMakeFiles/zip.dir/zip_source_window.c.o: lib/CMakeFiles/zip.dir/flags.make +lib/CMakeFiles/zip.dir/zip_source_window.c.o: lib/CMakeFiles/zip.dir/includes_C.rsp +lib/CMakeFiles/zip.dir/zip_source_window.c.o: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_source_window.c +lib/CMakeFiles/zip.dir/zip_source_window.c.o: lib/CMakeFiles/zip.dir/compiler_depend.ts + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_98) "Building C object lib/CMakeFiles/zip.dir/zip_source_window.c.o" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -MD -MT lib/CMakeFiles/zip.dir/zip_source_window.c.o -MF CMakeFiles/zip.dir/zip_source_window.c.o.d -o CMakeFiles/zip.dir/zip_source_window.c.o -c "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_source_window.c" + +lib/CMakeFiles/zip.dir/zip_source_window.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Preprocessing C source to CMakeFiles/zip.dir/zip_source_window.c.i" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_source_window.c" > CMakeFiles/zip.dir/zip_source_window.c.i + +lib/CMakeFiles/zip.dir/zip_source_window.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Compiling C source to assembly CMakeFiles/zip.dir/zip_source_window.c.s" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_source_window.c" -o CMakeFiles/zip.dir/zip_source_window.c.s + +lib/CMakeFiles/zip.dir/zip_source_write.c.o: lib/CMakeFiles/zip.dir/flags.make +lib/CMakeFiles/zip.dir/zip_source_write.c.o: lib/CMakeFiles/zip.dir/includes_C.rsp +lib/CMakeFiles/zip.dir/zip_source_write.c.o: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_source_write.c +lib/CMakeFiles/zip.dir/zip_source_write.c.o: lib/CMakeFiles/zip.dir/compiler_depend.ts + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_99) "Building C object lib/CMakeFiles/zip.dir/zip_source_write.c.o" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -MD -MT lib/CMakeFiles/zip.dir/zip_source_write.c.o -MF CMakeFiles/zip.dir/zip_source_write.c.o.d -o CMakeFiles/zip.dir/zip_source_write.c.o -c "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_source_write.c" + +lib/CMakeFiles/zip.dir/zip_source_write.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Preprocessing C source to CMakeFiles/zip.dir/zip_source_write.c.i" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_source_write.c" > CMakeFiles/zip.dir/zip_source_write.c.i + +lib/CMakeFiles/zip.dir/zip_source_write.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Compiling C source to assembly CMakeFiles/zip.dir/zip_source_write.c.s" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_source_write.c" -o CMakeFiles/zip.dir/zip_source_write.c.s + +lib/CMakeFiles/zip.dir/zip_source_zip.c.o: lib/CMakeFiles/zip.dir/flags.make +lib/CMakeFiles/zip.dir/zip_source_zip.c.o: lib/CMakeFiles/zip.dir/includes_C.rsp +lib/CMakeFiles/zip.dir/zip_source_zip.c.o: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_source_zip.c +lib/CMakeFiles/zip.dir/zip_source_zip.c.o: lib/CMakeFiles/zip.dir/compiler_depend.ts + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_100) "Building C object lib/CMakeFiles/zip.dir/zip_source_zip.c.o" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -MD -MT lib/CMakeFiles/zip.dir/zip_source_zip.c.o -MF CMakeFiles/zip.dir/zip_source_zip.c.o.d -o CMakeFiles/zip.dir/zip_source_zip.c.o -c "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_source_zip.c" + +lib/CMakeFiles/zip.dir/zip_source_zip.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Preprocessing C source to CMakeFiles/zip.dir/zip_source_zip.c.i" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_source_zip.c" > CMakeFiles/zip.dir/zip_source_zip.c.i + +lib/CMakeFiles/zip.dir/zip_source_zip.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Compiling C source to assembly CMakeFiles/zip.dir/zip_source_zip.c.s" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_source_zip.c" -o CMakeFiles/zip.dir/zip_source_zip.c.s + +lib/CMakeFiles/zip.dir/zip_source_zip_new.c.o: lib/CMakeFiles/zip.dir/flags.make +lib/CMakeFiles/zip.dir/zip_source_zip_new.c.o: lib/CMakeFiles/zip.dir/includes_C.rsp +lib/CMakeFiles/zip.dir/zip_source_zip_new.c.o: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_source_zip_new.c +lib/CMakeFiles/zip.dir/zip_source_zip_new.c.o: lib/CMakeFiles/zip.dir/compiler_depend.ts + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_101) "Building C object lib/CMakeFiles/zip.dir/zip_source_zip_new.c.o" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -MD -MT lib/CMakeFiles/zip.dir/zip_source_zip_new.c.o -MF CMakeFiles/zip.dir/zip_source_zip_new.c.o.d -o CMakeFiles/zip.dir/zip_source_zip_new.c.o -c "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_source_zip_new.c" + +lib/CMakeFiles/zip.dir/zip_source_zip_new.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Preprocessing C source to CMakeFiles/zip.dir/zip_source_zip_new.c.i" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_source_zip_new.c" > CMakeFiles/zip.dir/zip_source_zip_new.c.i + +lib/CMakeFiles/zip.dir/zip_source_zip_new.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Compiling C source to assembly CMakeFiles/zip.dir/zip_source_zip_new.c.s" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_source_zip_new.c" -o CMakeFiles/zip.dir/zip_source_zip_new.c.s + +lib/CMakeFiles/zip.dir/zip_stat.c.o: lib/CMakeFiles/zip.dir/flags.make +lib/CMakeFiles/zip.dir/zip_stat.c.o: lib/CMakeFiles/zip.dir/includes_C.rsp +lib/CMakeFiles/zip.dir/zip_stat.c.o: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_stat.c +lib/CMakeFiles/zip.dir/zip_stat.c.o: lib/CMakeFiles/zip.dir/compiler_depend.ts + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_102) "Building C object lib/CMakeFiles/zip.dir/zip_stat.c.o" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -MD -MT lib/CMakeFiles/zip.dir/zip_stat.c.o -MF CMakeFiles/zip.dir/zip_stat.c.o.d -o CMakeFiles/zip.dir/zip_stat.c.o -c "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_stat.c" + +lib/CMakeFiles/zip.dir/zip_stat.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Preprocessing C source to CMakeFiles/zip.dir/zip_stat.c.i" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_stat.c" > CMakeFiles/zip.dir/zip_stat.c.i + +lib/CMakeFiles/zip.dir/zip_stat.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Compiling C source to assembly CMakeFiles/zip.dir/zip_stat.c.s" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_stat.c" -o CMakeFiles/zip.dir/zip_stat.c.s + +lib/CMakeFiles/zip.dir/zip_stat_index.c.o: lib/CMakeFiles/zip.dir/flags.make +lib/CMakeFiles/zip.dir/zip_stat_index.c.o: lib/CMakeFiles/zip.dir/includes_C.rsp +lib/CMakeFiles/zip.dir/zip_stat_index.c.o: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_stat_index.c +lib/CMakeFiles/zip.dir/zip_stat_index.c.o: lib/CMakeFiles/zip.dir/compiler_depend.ts + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_103) "Building C object lib/CMakeFiles/zip.dir/zip_stat_index.c.o" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -MD -MT lib/CMakeFiles/zip.dir/zip_stat_index.c.o -MF CMakeFiles/zip.dir/zip_stat_index.c.o.d -o CMakeFiles/zip.dir/zip_stat_index.c.o -c "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_stat_index.c" + +lib/CMakeFiles/zip.dir/zip_stat_index.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Preprocessing C source to CMakeFiles/zip.dir/zip_stat_index.c.i" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_stat_index.c" > CMakeFiles/zip.dir/zip_stat_index.c.i + +lib/CMakeFiles/zip.dir/zip_stat_index.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Compiling C source to assembly CMakeFiles/zip.dir/zip_stat_index.c.s" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_stat_index.c" -o CMakeFiles/zip.dir/zip_stat_index.c.s + +lib/CMakeFiles/zip.dir/zip_stat_init.c.o: lib/CMakeFiles/zip.dir/flags.make +lib/CMakeFiles/zip.dir/zip_stat_init.c.o: lib/CMakeFiles/zip.dir/includes_C.rsp +lib/CMakeFiles/zip.dir/zip_stat_init.c.o: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_stat_init.c +lib/CMakeFiles/zip.dir/zip_stat_init.c.o: lib/CMakeFiles/zip.dir/compiler_depend.ts + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_104) "Building C object lib/CMakeFiles/zip.dir/zip_stat_init.c.o" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -MD -MT lib/CMakeFiles/zip.dir/zip_stat_init.c.o -MF CMakeFiles/zip.dir/zip_stat_init.c.o.d -o CMakeFiles/zip.dir/zip_stat_init.c.o -c "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_stat_init.c" + +lib/CMakeFiles/zip.dir/zip_stat_init.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Preprocessing C source to CMakeFiles/zip.dir/zip_stat_init.c.i" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_stat_init.c" > CMakeFiles/zip.dir/zip_stat_init.c.i + +lib/CMakeFiles/zip.dir/zip_stat_init.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Compiling C source to assembly CMakeFiles/zip.dir/zip_stat_init.c.s" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_stat_init.c" -o CMakeFiles/zip.dir/zip_stat_init.c.s + +lib/CMakeFiles/zip.dir/zip_strerror.c.o: lib/CMakeFiles/zip.dir/flags.make +lib/CMakeFiles/zip.dir/zip_strerror.c.o: lib/CMakeFiles/zip.dir/includes_C.rsp +lib/CMakeFiles/zip.dir/zip_strerror.c.o: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_strerror.c +lib/CMakeFiles/zip.dir/zip_strerror.c.o: lib/CMakeFiles/zip.dir/compiler_depend.ts + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_105) "Building C object lib/CMakeFiles/zip.dir/zip_strerror.c.o" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -MD -MT lib/CMakeFiles/zip.dir/zip_strerror.c.o -MF CMakeFiles/zip.dir/zip_strerror.c.o.d -o CMakeFiles/zip.dir/zip_strerror.c.o -c "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_strerror.c" + +lib/CMakeFiles/zip.dir/zip_strerror.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Preprocessing C source to CMakeFiles/zip.dir/zip_strerror.c.i" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_strerror.c" > CMakeFiles/zip.dir/zip_strerror.c.i + +lib/CMakeFiles/zip.dir/zip_strerror.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Compiling C source to assembly CMakeFiles/zip.dir/zip_strerror.c.s" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_strerror.c" -o CMakeFiles/zip.dir/zip_strerror.c.s + +lib/CMakeFiles/zip.dir/zip_string.c.o: lib/CMakeFiles/zip.dir/flags.make +lib/CMakeFiles/zip.dir/zip_string.c.o: lib/CMakeFiles/zip.dir/includes_C.rsp +lib/CMakeFiles/zip.dir/zip_string.c.o: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_string.c +lib/CMakeFiles/zip.dir/zip_string.c.o: lib/CMakeFiles/zip.dir/compiler_depend.ts + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_106) "Building C object lib/CMakeFiles/zip.dir/zip_string.c.o" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -MD -MT lib/CMakeFiles/zip.dir/zip_string.c.o -MF CMakeFiles/zip.dir/zip_string.c.o.d -o CMakeFiles/zip.dir/zip_string.c.o -c "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_string.c" + +lib/CMakeFiles/zip.dir/zip_string.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Preprocessing C source to CMakeFiles/zip.dir/zip_string.c.i" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_string.c" > CMakeFiles/zip.dir/zip_string.c.i + +lib/CMakeFiles/zip.dir/zip_string.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Compiling C source to assembly CMakeFiles/zip.dir/zip_string.c.s" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_string.c" -o CMakeFiles/zip.dir/zip_string.c.s + +lib/CMakeFiles/zip.dir/zip_unchange.c.o: lib/CMakeFiles/zip.dir/flags.make +lib/CMakeFiles/zip.dir/zip_unchange.c.o: lib/CMakeFiles/zip.dir/includes_C.rsp +lib/CMakeFiles/zip.dir/zip_unchange.c.o: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_unchange.c +lib/CMakeFiles/zip.dir/zip_unchange.c.o: lib/CMakeFiles/zip.dir/compiler_depend.ts + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_107) "Building C object lib/CMakeFiles/zip.dir/zip_unchange.c.o" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -MD -MT lib/CMakeFiles/zip.dir/zip_unchange.c.o -MF CMakeFiles/zip.dir/zip_unchange.c.o.d -o CMakeFiles/zip.dir/zip_unchange.c.o -c "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_unchange.c" + +lib/CMakeFiles/zip.dir/zip_unchange.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Preprocessing C source to CMakeFiles/zip.dir/zip_unchange.c.i" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_unchange.c" > CMakeFiles/zip.dir/zip_unchange.c.i + +lib/CMakeFiles/zip.dir/zip_unchange.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Compiling C source to assembly CMakeFiles/zip.dir/zip_unchange.c.s" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_unchange.c" -o CMakeFiles/zip.dir/zip_unchange.c.s + +lib/CMakeFiles/zip.dir/zip_unchange_all.c.o: lib/CMakeFiles/zip.dir/flags.make +lib/CMakeFiles/zip.dir/zip_unchange_all.c.o: lib/CMakeFiles/zip.dir/includes_C.rsp +lib/CMakeFiles/zip.dir/zip_unchange_all.c.o: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_unchange_all.c +lib/CMakeFiles/zip.dir/zip_unchange_all.c.o: lib/CMakeFiles/zip.dir/compiler_depend.ts + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_108) "Building C object lib/CMakeFiles/zip.dir/zip_unchange_all.c.o" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -MD -MT lib/CMakeFiles/zip.dir/zip_unchange_all.c.o -MF CMakeFiles/zip.dir/zip_unchange_all.c.o.d -o CMakeFiles/zip.dir/zip_unchange_all.c.o -c "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_unchange_all.c" + +lib/CMakeFiles/zip.dir/zip_unchange_all.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Preprocessing C source to CMakeFiles/zip.dir/zip_unchange_all.c.i" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_unchange_all.c" > CMakeFiles/zip.dir/zip_unchange_all.c.i + +lib/CMakeFiles/zip.dir/zip_unchange_all.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Compiling C source to assembly CMakeFiles/zip.dir/zip_unchange_all.c.s" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_unchange_all.c" -o CMakeFiles/zip.dir/zip_unchange_all.c.s + +lib/CMakeFiles/zip.dir/zip_unchange_archive.c.o: lib/CMakeFiles/zip.dir/flags.make +lib/CMakeFiles/zip.dir/zip_unchange_archive.c.o: lib/CMakeFiles/zip.dir/includes_C.rsp +lib/CMakeFiles/zip.dir/zip_unchange_archive.c.o: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_unchange_archive.c +lib/CMakeFiles/zip.dir/zip_unchange_archive.c.o: lib/CMakeFiles/zip.dir/compiler_depend.ts + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_109) "Building C object lib/CMakeFiles/zip.dir/zip_unchange_archive.c.o" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -MD -MT lib/CMakeFiles/zip.dir/zip_unchange_archive.c.o -MF CMakeFiles/zip.dir/zip_unchange_archive.c.o.d -o CMakeFiles/zip.dir/zip_unchange_archive.c.o -c "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_unchange_archive.c" + +lib/CMakeFiles/zip.dir/zip_unchange_archive.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Preprocessing C source to CMakeFiles/zip.dir/zip_unchange_archive.c.i" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_unchange_archive.c" > CMakeFiles/zip.dir/zip_unchange_archive.c.i + +lib/CMakeFiles/zip.dir/zip_unchange_archive.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Compiling C source to assembly CMakeFiles/zip.dir/zip_unchange_archive.c.s" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_unchange_archive.c" -o CMakeFiles/zip.dir/zip_unchange_archive.c.s + +lib/CMakeFiles/zip.dir/zip_unchange_data.c.o: lib/CMakeFiles/zip.dir/flags.make +lib/CMakeFiles/zip.dir/zip_unchange_data.c.o: lib/CMakeFiles/zip.dir/includes_C.rsp +lib/CMakeFiles/zip.dir/zip_unchange_data.c.o: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_unchange_data.c +lib/CMakeFiles/zip.dir/zip_unchange_data.c.o: lib/CMakeFiles/zip.dir/compiler_depend.ts + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_110) "Building C object lib/CMakeFiles/zip.dir/zip_unchange_data.c.o" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -MD -MT lib/CMakeFiles/zip.dir/zip_unchange_data.c.o -MF CMakeFiles/zip.dir/zip_unchange_data.c.o.d -o CMakeFiles/zip.dir/zip_unchange_data.c.o -c "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_unchange_data.c" + +lib/CMakeFiles/zip.dir/zip_unchange_data.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Preprocessing C source to CMakeFiles/zip.dir/zip_unchange_data.c.i" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_unchange_data.c" > CMakeFiles/zip.dir/zip_unchange_data.c.i + +lib/CMakeFiles/zip.dir/zip_unchange_data.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Compiling C source to assembly CMakeFiles/zip.dir/zip_unchange_data.c.s" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_unchange_data.c" -o CMakeFiles/zip.dir/zip_unchange_data.c.s + +lib/CMakeFiles/zip.dir/zip_utf-8.c.o: lib/CMakeFiles/zip.dir/flags.make +lib/CMakeFiles/zip.dir/zip_utf-8.c.o: lib/CMakeFiles/zip.dir/includes_C.rsp +lib/CMakeFiles/zip.dir/zip_utf-8.c.o: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_utf-8.c +lib/CMakeFiles/zip.dir/zip_utf-8.c.o: lib/CMakeFiles/zip.dir/compiler_depend.ts + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_111) "Building C object lib/CMakeFiles/zip.dir/zip_utf-8.c.o" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -MD -MT lib/CMakeFiles/zip.dir/zip_utf-8.c.o -MF CMakeFiles/zip.dir/zip_utf-8.c.o.d -o CMakeFiles/zip.dir/zip_utf-8.c.o -c "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_utf-8.c" + +lib/CMakeFiles/zip.dir/zip_utf-8.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Preprocessing C source to CMakeFiles/zip.dir/zip_utf-8.c.i" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_utf-8.c" > CMakeFiles/zip.dir/zip_utf-8.c.i + +lib/CMakeFiles/zip.dir/zip_utf-8.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Compiling C source to assembly CMakeFiles/zip.dir/zip_utf-8.c.s" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_utf-8.c" -o CMakeFiles/zip.dir/zip_utf-8.c.s + +lib/CMakeFiles/zip.dir/zip_err_str.c.o: lib/CMakeFiles/zip.dir/flags.make +lib/CMakeFiles/zip.dir/zip_err_str.c.o: lib/CMakeFiles/zip.dir/includes_C.rsp +lib/CMakeFiles/zip.dir/zip_err_str.c.o: lib/zip_err_str.c +lib/CMakeFiles/zip.dir/zip_err_str.c.o: lib/CMakeFiles/zip.dir/compiler_depend.ts + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_112) "Building C object lib/CMakeFiles/zip.dir/zip_err_str.c.o" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -MD -MT lib/CMakeFiles/zip.dir/zip_err_str.c.o -MF CMakeFiles/zip.dir/zip_err_str.c.o.d -o CMakeFiles/zip.dir/zip_err_str.c.o -c "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib/zip_err_str.c" + +lib/CMakeFiles/zip.dir/zip_err_str.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Preprocessing C source to CMakeFiles/zip.dir/zip_err_str.c.i" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib/zip_err_str.c" > CMakeFiles/zip.dir/zip_err_str.c.i + +lib/CMakeFiles/zip.dir/zip_err_str.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Compiling C source to assembly CMakeFiles/zip.dir/zip_err_str.c.s" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib/zip_err_str.c" -o CMakeFiles/zip.dir/zip_err_str.c.s + +lib/CMakeFiles/zip.dir/zip_source_file_stdio_named.c.o: lib/CMakeFiles/zip.dir/flags.make +lib/CMakeFiles/zip.dir/zip_source_file_stdio_named.c.o: lib/CMakeFiles/zip.dir/includes_C.rsp +lib/CMakeFiles/zip.dir/zip_source_file_stdio_named.c.o: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_source_file_stdio_named.c +lib/CMakeFiles/zip.dir/zip_source_file_stdio_named.c.o: lib/CMakeFiles/zip.dir/compiler_depend.ts + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_113) "Building C object lib/CMakeFiles/zip.dir/zip_source_file_stdio_named.c.o" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -MD -MT lib/CMakeFiles/zip.dir/zip_source_file_stdio_named.c.o -MF CMakeFiles/zip.dir/zip_source_file_stdio_named.c.o.d -o CMakeFiles/zip.dir/zip_source_file_stdio_named.c.o -c "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_source_file_stdio_named.c" + +lib/CMakeFiles/zip.dir/zip_source_file_stdio_named.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Preprocessing C source to CMakeFiles/zip.dir/zip_source_file_stdio_named.c.i" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_source_file_stdio_named.c" > CMakeFiles/zip.dir/zip_source_file_stdio_named.c.i + +lib/CMakeFiles/zip.dir/zip_source_file_stdio_named.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Compiling C source to assembly CMakeFiles/zip.dir/zip_source_file_stdio_named.c.s" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_source_file_stdio_named.c" -o CMakeFiles/zip.dir/zip_source_file_stdio_named.c.s + +lib/CMakeFiles/zip.dir/zip_random_unix.c.o: lib/CMakeFiles/zip.dir/flags.make +lib/CMakeFiles/zip.dir/zip_random_unix.c.o: lib/CMakeFiles/zip.dir/includes_C.rsp +lib/CMakeFiles/zip.dir/zip_random_unix.c.o: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_random_unix.c +lib/CMakeFiles/zip.dir/zip_random_unix.c.o: lib/CMakeFiles/zip.dir/compiler_depend.ts + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_114) "Building C object lib/CMakeFiles/zip.dir/zip_random_unix.c.o" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -MD -MT lib/CMakeFiles/zip.dir/zip_random_unix.c.o -MF CMakeFiles/zip.dir/zip_random_unix.c.o.d -o CMakeFiles/zip.dir/zip_random_unix.c.o -c "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_random_unix.c" + +lib/CMakeFiles/zip.dir/zip_random_unix.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Preprocessing C source to CMakeFiles/zip.dir/zip_random_unix.c.i" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_random_unix.c" > CMakeFiles/zip.dir/zip_random_unix.c.i + +lib/CMakeFiles/zip.dir/zip_random_unix.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Compiling C source to assembly CMakeFiles/zip.dir/zip_random_unix.c.s" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_random_unix.c" -o CMakeFiles/zip.dir/zip_random_unix.c.s + +# Object files for target zip +zip_OBJECTS = \ +"CMakeFiles/zip.dir/zip_add.c.o" \ +"CMakeFiles/zip.dir/zip_add_dir.c.o" \ +"CMakeFiles/zip.dir/zip_add_entry.c.o" \ +"CMakeFiles/zip.dir/zip_algorithm_deflate.c.o" \ +"CMakeFiles/zip.dir/zip_buffer.c.o" \ +"CMakeFiles/zip.dir/zip_close.c.o" \ +"CMakeFiles/zip.dir/zip_delete.c.o" \ +"CMakeFiles/zip.dir/zip_dir_add.c.o" \ +"CMakeFiles/zip.dir/zip_dirent.c.o" \ +"CMakeFiles/zip.dir/zip_discard.c.o" \ +"CMakeFiles/zip.dir/zip_entry.c.o" \ +"CMakeFiles/zip.dir/zip_error.c.o" \ +"CMakeFiles/zip.dir/zip_error_clear.c.o" \ +"CMakeFiles/zip.dir/zip_error_get.c.o" \ +"CMakeFiles/zip.dir/zip_error_get_sys_type.c.o" \ +"CMakeFiles/zip.dir/zip_error_strerror.c.o" \ +"CMakeFiles/zip.dir/zip_error_to_str.c.o" \ +"CMakeFiles/zip.dir/zip_extra_field.c.o" \ +"CMakeFiles/zip.dir/zip_extra_field_api.c.o" \ +"CMakeFiles/zip.dir/zip_fclose.c.o" \ +"CMakeFiles/zip.dir/zip_fdopen.c.o" \ +"CMakeFiles/zip.dir/zip_file_add.c.o" \ +"CMakeFiles/zip.dir/zip_file_error_clear.c.o" \ +"CMakeFiles/zip.dir/zip_file_error_get.c.o" \ +"CMakeFiles/zip.dir/zip_file_get_comment.c.o" \ +"CMakeFiles/zip.dir/zip_file_get_external_attributes.c.o" \ +"CMakeFiles/zip.dir/zip_file_get_offset.c.o" \ +"CMakeFiles/zip.dir/zip_file_rename.c.o" \ +"CMakeFiles/zip.dir/zip_file_replace.c.o" \ +"CMakeFiles/zip.dir/zip_file_set_comment.c.o" \ +"CMakeFiles/zip.dir/zip_file_set_encryption.c.o" \ +"CMakeFiles/zip.dir/zip_file_set_external_attributes.c.o" \ +"CMakeFiles/zip.dir/zip_file_set_mtime.c.o" \ +"CMakeFiles/zip.dir/zip_file_strerror.c.o" \ +"CMakeFiles/zip.dir/zip_fopen.c.o" \ +"CMakeFiles/zip.dir/zip_fopen_encrypted.c.o" \ +"CMakeFiles/zip.dir/zip_fopen_index.c.o" \ +"CMakeFiles/zip.dir/zip_fopen_index_encrypted.c.o" \ +"CMakeFiles/zip.dir/zip_fread.c.o" \ +"CMakeFiles/zip.dir/zip_fseek.c.o" \ +"CMakeFiles/zip.dir/zip_ftell.c.o" \ +"CMakeFiles/zip.dir/zip_get_archive_comment.c.o" \ +"CMakeFiles/zip.dir/zip_get_archive_flag.c.o" \ +"CMakeFiles/zip.dir/zip_get_encryption_implementation.c.o" \ +"CMakeFiles/zip.dir/zip_get_file_comment.c.o" \ +"CMakeFiles/zip.dir/zip_get_name.c.o" \ +"CMakeFiles/zip.dir/zip_get_num_entries.c.o" \ +"CMakeFiles/zip.dir/zip_get_num_files.c.o" \ +"CMakeFiles/zip.dir/zip_hash.c.o" \ +"CMakeFiles/zip.dir/zip_io_util.c.o" \ +"CMakeFiles/zip.dir/zip_libzip_version.c.o" \ +"CMakeFiles/zip.dir/zip_memdup.c.o" \ +"CMakeFiles/zip.dir/zip_name_locate.c.o" \ +"CMakeFiles/zip.dir/zip_new.c.o" \ +"CMakeFiles/zip.dir/zip_open.c.o" \ +"CMakeFiles/zip.dir/zip_pkware.c.o" \ +"CMakeFiles/zip.dir/zip_progress.c.o" \ +"CMakeFiles/zip.dir/zip_rename.c.o" \ +"CMakeFiles/zip.dir/zip_replace.c.o" \ +"CMakeFiles/zip.dir/zip_set_archive_comment.c.o" \ +"CMakeFiles/zip.dir/zip_set_archive_flag.c.o" \ +"CMakeFiles/zip.dir/zip_set_default_password.c.o" \ +"CMakeFiles/zip.dir/zip_set_file_comment.c.o" \ +"CMakeFiles/zip.dir/zip_set_file_compression.c.o" \ +"CMakeFiles/zip.dir/zip_set_name.c.o" \ +"CMakeFiles/zip.dir/zip_source_accept_empty.c.o" \ +"CMakeFiles/zip.dir/zip_source_begin_write.c.o" \ +"CMakeFiles/zip.dir/zip_source_begin_write_cloning.c.o" \ +"CMakeFiles/zip.dir/zip_source_buffer.c.o" \ +"CMakeFiles/zip.dir/zip_source_call.c.o" \ +"CMakeFiles/zip.dir/zip_source_close.c.o" \ +"CMakeFiles/zip.dir/zip_source_commit_write.c.o" \ +"CMakeFiles/zip.dir/zip_source_compress.c.o" \ +"CMakeFiles/zip.dir/zip_source_crc.c.o" \ +"CMakeFiles/zip.dir/zip_source_error.c.o" \ +"CMakeFiles/zip.dir/zip_source_file_common.c.o" \ +"CMakeFiles/zip.dir/zip_source_file_stdio.c.o" \ +"CMakeFiles/zip.dir/zip_source_free.c.o" \ +"CMakeFiles/zip.dir/zip_source_function.c.o" \ +"CMakeFiles/zip.dir/zip_source_get_dostime.c.o" \ +"CMakeFiles/zip.dir/zip_source_get_file_attributes.c.o" \ +"CMakeFiles/zip.dir/zip_source_is_deleted.c.o" \ +"CMakeFiles/zip.dir/zip_source_layered.c.o" \ +"CMakeFiles/zip.dir/zip_source_open.c.o" \ +"CMakeFiles/zip.dir/zip_source_pass_to_lower_layer.c.o" \ +"CMakeFiles/zip.dir/zip_source_pkware_decode.c.o" \ +"CMakeFiles/zip.dir/zip_source_pkware_encode.c.o" \ +"CMakeFiles/zip.dir/zip_source_read.c.o" \ +"CMakeFiles/zip.dir/zip_source_remove.c.o" \ +"CMakeFiles/zip.dir/zip_source_rollback_write.c.o" \ +"CMakeFiles/zip.dir/zip_source_seek.c.o" \ +"CMakeFiles/zip.dir/zip_source_seek_write.c.o" \ +"CMakeFiles/zip.dir/zip_source_stat.c.o" \ +"CMakeFiles/zip.dir/zip_source_supports.c.o" \ +"CMakeFiles/zip.dir/zip_source_tell.c.o" \ +"CMakeFiles/zip.dir/zip_source_tell_write.c.o" \ +"CMakeFiles/zip.dir/zip_source_window.c.o" \ +"CMakeFiles/zip.dir/zip_source_write.c.o" \ +"CMakeFiles/zip.dir/zip_source_zip.c.o" \ +"CMakeFiles/zip.dir/zip_source_zip_new.c.o" \ +"CMakeFiles/zip.dir/zip_stat.c.o" \ +"CMakeFiles/zip.dir/zip_stat_index.c.o" \ +"CMakeFiles/zip.dir/zip_stat_init.c.o" \ +"CMakeFiles/zip.dir/zip_strerror.c.o" \ +"CMakeFiles/zip.dir/zip_string.c.o" \ +"CMakeFiles/zip.dir/zip_unchange.c.o" \ +"CMakeFiles/zip.dir/zip_unchange_all.c.o" \ +"CMakeFiles/zip.dir/zip_unchange_archive.c.o" \ +"CMakeFiles/zip.dir/zip_unchange_data.c.o" \ +"CMakeFiles/zip.dir/zip_utf-8.c.o" \ +"CMakeFiles/zip.dir/zip_err_str.c.o" \ +"CMakeFiles/zip.dir/zip_source_file_stdio_named.c.o" \ +"CMakeFiles/zip.dir/zip_random_unix.c.o" + +# External object files for target zip +zip_EXTERNAL_OBJECTS = + +lib/libzip.a: lib/CMakeFiles/zip.dir/zip_add.c.o +lib/libzip.a: lib/CMakeFiles/zip.dir/zip_add_dir.c.o +lib/libzip.a: lib/CMakeFiles/zip.dir/zip_add_entry.c.o +lib/libzip.a: lib/CMakeFiles/zip.dir/zip_algorithm_deflate.c.o +lib/libzip.a: lib/CMakeFiles/zip.dir/zip_buffer.c.o +lib/libzip.a: lib/CMakeFiles/zip.dir/zip_close.c.o +lib/libzip.a: lib/CMakeFiles/zip.dir/zip_delete.c.o +lib/libzip.a: lib/CMakeFiles/zip.dir/zip_dir_add.c.o +lib/libzip.a: lib/CMakeFiles/zip.dir/zip_dirent.c.o +lib/libzip.a: lib/CMakeFiles/zip.dir/zip_discard.c.o +lib/libzip.a: lib/CMakeFiles/zip.dir/zip_entry.c.o +lib/libzip.a: lib/CMakeFiles/zip.dir/zip_error.c.o +lib/libzip.a: lib/CMakeFiles/zip.dir/zip_error_clear.c.o +lib/libzip.a: lib/CMakeFiles/zip.dir/zip_error_get.c.o +lib/libzip.a: lib/CMakeFiles/zip.dir/zip_error_get_sys_type.c.o +lib/libzip.a: lib/CMakeFiles/zip.dir/zip_error_strerror.c.o +lib/libzip.a: lib/CMakeFiles/zip.dir/zip_error_to_str.c.o +lib/libzip.a: lib/CMakeFiles/zip.dir/zip_extra_field.c.o +lib/libzip.a: lib/CMakeFiles/zip.dir/zip_extra_field_api.c.o +lib/libzip.a: lib/CMakeFiles/zip.dir/zip_fclose.c.o +lib/libzip.a: lib/CMakeFiles/zip.dir/zip_fdopen.c.o +lib/libzip.a: lib/CMakeFiles/zip.dir/zip_file_add.c.o +lib/libzip.a: lib/CMakeFiles/zip.dir/zip_file_error_clear.c.o +lib/libzip.a: lib/CMakeFiles/zip.dir/zip_file_error_get.c.o +lib/libzip.a: lib/CMakeFiles/zip.dir/zip_file_get_comment.c.o +lib/libzip.a: lib/CMakeFiles/zip.dir/zip_file_get_external_attributes.c.o +lib/libzip.a: lib/CMakeFiles/zip.dir/zip_file_get_offset.c.o +lib/libzip.a: lib/CMakeFiles/zip.dir/zip_file_rename.c.o +lib/libzip.a: lib/CMakeFiles/zip.dir/zip_file_replace.c.o +lib/libzip.a: lib/CMakeFiles/zip.dir/zip_file_set_comment.c.o +lib/libzip.a: lib/CMakeFiles/zip.dir/zip_file_set_encryption.c.o +lib/libzip.a: lib/CMakeFiles/zip.dir/zip_file_set_external_attributes.c.o +lib/libzip.a: lib/CMakeFiles/zip.dir/zip_file_set_mtime.c.o +lib/libzip.a: lib/CMakeFiles/zip.dir/zip_file_strerror.c.o +lib/libzip.a: lib/CMakeFiles/zip.dir/zip_fopen.c.o +lib/libzip.a: lib/CMakeFiles/zip.dir/zip_fopen_encrypted.c.o +lib/libzip.a: lib/CMakeFiles/zip.dir/zip_fopen_index.c.o +lib/libzip.a: lib/CMakeFiles/zip.dir/zip_fopen_index_encrypted.c.o +lib/libzip.a: lib/CMakeFiles/zip.dir/zip_fread.c.o +lib/libzip.a: lib/CMakeFiles/zip.dir/zip_fseek.c.o +lib/libzip.a: lib/CMakeFiles/zip.dir/zip_ftell.c.o +lib/libzip.a: lib/CMakeFiles/zip.dir/zip_get_archive_comment.c.o +lib/libzip.a: lib/CMakeFiles/zip.dir/zip_get_archive_flag.c.o +lib/libzip.a: lib/CMakeFiles/zip.dir/zip_get_encryption_implementation.c.o +lib/libzip.a: lib/CMakeFiles/zip.dir/zip_get_file_comment.c.o +lib/libzip.a: lib/CMakeFiles/zip.dir/zip_get_name.c.o +lib/libzip.a: lib/CMakeFiles/zip.dir/zip_get_num_entries.c.o +lib/libzip.a: lib/CMakeFiles/zip.dir/zip_get_num_files.c.o +lib/libzip.a: lib/CMakeFiles/zip.dir/zip_hash.c.o +lib/libzip.a: lib/CMakeFiles/zip.dir/zip_io_util.c.o +lib/libzip.a: lib/CMakeFiles/zip.dir/zip_libzip_version.c.o +lib/libzip.a: lib/CMakeFiles/zip.dir/zip_memdup.c.o +lib/libzip.a: lib/CMakeFiles/zip.dir/zip_name_locate.c.o +lib/libzip.a: lib/CMakeFiles/zip.dir/zip_new.c.o +lib/libzip.a: lib/CMakeFiles/zip.dir/zip_open.c.o +lib/libzip.a: lib/CMakeFiles/zip.dir/zip_pkware.c.o +lib/libzip.a: lib/CMakeFiles/zip.dir/zip_progress.c.o +lib/libzip.a: lib/CMakeFiles/zip.dir/zip_rename.c.o +lib/libzip.a: lib/CMakeFiles/zip.dir/zip_replace.c.o +lib/libzip.a: lib/CMakeFiles/zip.dir/zip_set_archive_comment.c.o +lib/libzip.a: lib/CMakeFiles/zip.dir/zip_set_archive_flag.c.o +lib/libzip.a: lib/CMakeFiles/zip.dir/zip_set_default_password.c.o +lib/libzip.a: lib/CMakeFiles/zip.dir/zip_set_file_comment.c.o +lib/libzip.a: lib/CMakeFiles/zip.dir/zip_set_file_compression.c.o +lib/libzip.a: lib/CMakeFiles/zip.dir/zip_set_name.c.o +lib/libzip.a: lib/CMakeFiles/zip.dir/zip_source_accept_empty.c.o +lib/libzip.a: lib/CMakeFiles/zip.dir/zip_source_begin_write.c.o +lib/libzip.a: lib/CMakeFiles/zip.dir/zip_source_begin_write_cloning.c.o +lib/libzip.a: lib/CMakeFiles/zip.dir/zip_source_buffer.c.o +lib/libzip.a: lib/CMakeFiles/zip.dir/zip_source_call.c.o +lib/libzip.a: lib/CMakeFiles/zip.dir/zip_source_close.c.o +lib/libzip.a: lib/CMakeFiles/zip.dir/zip_source_commit_write.c.o +lib/libzip.a: lib/CMakeFiles/zip.dir/zip_source_compress.c.o +lib/libzip.a: lib/CMakeFiles/zip.dir/zip_source_crc.c.o +lib/libzip.a: lib/CMakeFiles/zip.dir/zip_source_error.c.o +lib/libzip.a: lib/CMakeFiles/zip.dir/zip_source_file_common.c.o +lib/libzip.a: lib/CMakeFiles/zip.dir/zip_source_file_stdio.c.o +lib/libzip.a: lib/CMakeFiles/zip.dir/zip_source_free.c.o +lib/libzip.a: lib/CMakeFiles/zip.dir/zip_source_function.c.o +lib/libzip.a: lib/CMakeFiles/zip.dir/zip_source_get_dostime.c.o +lib/libzip.a: lib/CMakeFiles/zip.dir/zip_source_get_file_attributes.c.o +lib/libzip.a: lib/CMakeFiles/zip.dir/zip_source_is_deleted.c.o +lib/libzip.a: lib/CMakeFiles/zip.dir/zip_source_layered.c.o +lib/libzip.a: lib/CMakeFiles/zip.dir/zip_source_open.c.o +lib/libzip.a: lib/CMakeFiles/zip.dir/zip_source_pass_to_lower_layer.c.o +lib/libzip.a: lib/CMakeFiles/zip.dir/zip_source_pkware_decode.c.o +lib/libzip.a: lib/CMakeFiles/zip.dir/zip_source_pkware_encode.c.o +lib/libzip.a: lib/CMakeFiles/zip.dir/zip_source_read.c.o +lib/libzip.a: lib/CMakeFiles/zip.dir/zip_source_remove.c.o +lib/libzip.a: lib/CMakeFiles/zip.dir/zip_source_rollback_write.c.o +lib/libzip.a: lib/CMakeFiles/zip.dir/zip_source_seek.c.o +lib/libzip.a: lib/CMakeFiles/zip.dir/zip_source_seek_write.c.o +lib/libzip.a: lib/CMakeFiles/zip.dir/zip_source_stat.c.o +lib/libzip.a: lib/CMakeFiles/zip.dir/zip_source_supports.c.o +lib/libzip.a: lib/CMakeFiles/zip.dir/zip_source_tell.c.o +lib/libzip.a: lib/CMakeFiles/zip.dir/zip_source_tell_write.c.o +lib/libzip.a: lib/CMakeFiles/zip.dir/zip_source_window.c.o +lib/libzip.a: lib/CMakeFiles/zip.dir/zip_source_write.c.o +lib/libzip.a: lib/CMakeFiles/zip.dir/zip_source_zip.c.o +lib/libzip.a: lib/CMakeFiles/zip.dir/zip_source_zip_new.c.o +lib/libzip.a: lib/CMakeFiles/zip.dir/zip_stat.c.o +lib/libzip.a: lib/CMakeFiles/zip.dir/zip_stat_index.c.o +lib/libzip.a: lib/CMakeFiles/zip.dir/zip_stat_init.c.o +lib/libzip.a: lib/CMakeFiles/zip.dir/zip_strerror.c.o +lib/libzip.a: lib/CMakeFiles/zip.dir/zip_string.c.o +lib/libzip.a: lib/CMakeFiles/zip.dir/zip_unchange.c.o +lib/libzip.a: lib/CMakeFiles/zip.dir/zip_unchange_all.c.o +lib/libzip.a: lib/CMakeFiles/zip.dir/zip_unchange_archive.c.o +lib/libzip.a: lib/CMakeFiles/zip.dir/zip_unchange_data.c.o +lib/libzip.a: lib/CMakeFiles/zip.dir/zip_utf-8.c.o +lib/libzip.a: lib/CMakeFiles/zip.dir/zip_err_str.c.o +lib/libzip.a: lib/CMakeFiles/zip.dir/zip_source_file_stdio_named.c.o +lib/libzip.a: lib/CMakeFiles/zip.dir/zip_random_unix.c.o +lib/libzip.a: lib/CMakeFiles/zip.dir/build.make +lib/libzip.a: lib/CMakeFiles/zip.dir/link.txt + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_115) "Linking C static library libzip.a" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && $(CMAKE_COMMAND) -P CMakeFiles/zip.dir/cmake_clean_target.cmake + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && $(CMAKE_COMMAND) -E cmake_link_script CMakeFiles/zip.dir/link.txt --verbose=$(VERBOSE) + +# Rule to build all files generated by this target. +lib/CMakeFiles/zip.dir/build: lib/libzip.a +.PHONY : lib/CMakeFiles/zip.dir/build + +lib/CMakeFiles/zip.dir/clean: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" && $(CMAKE_COMMAND) -P CMakeFiles/zip.dir/cmake_clean.cmake +.PHONY : lib/CMakeFiles/zip.dir/clean + +lib/CMakeFiles/zip.dir/depend: lib/zip_err_str.c + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(CMAKE_COMMAND) -E cmake_depends "Unix Makefiles" "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3" "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib" "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib" "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/DependInfo.cmake" "--color=$(COLOR)" +.PHONY : lib/CMakeFiles/zip.dir/depend + diff --git a/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/cmake_clean.cmake b/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/cmake_clean.cmake new file mode 100644 index 0000000..d2e9f8a --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/cmake_clean.cmake @@ -0,0 +1,236 @@ +file(REMOVE_RECURSE + "CMakeFiles/zip.dir/zip_add.c.o" + "CMakeFiles/zip.dir/zip_add.c.o.d" + "CMakeFiles/zip.dir/zip_add_dir.c.o" + "CMakeFiles/zip.dir/zip_add_dir.c.o.d" + "CMakeFiles/zip.dir/zip_add_entry.c.o" + "CMakeFiles/zip.dir/zip_add_entry.c.o.d" + "CMakeFiles/zip.dir/zip_algorithm_deflate.c.o" + "CMakeFiles/zip.dir/zip_algorithm_deflate.c.o.d" + "CMakeFiles/zip.dir/zip_buffer.c.o" + "CMakeFiles/zip.dir/zip_buffer.c.o.d" + "CMakeFiles/zip.dir/zip_close.c.o" + "CMakeFiles/zip.dir/zip_close.c.o.d" + "CMakeFiles/zip.dir/zip_delete.c.o" + "CMakeFiles/zip.dir/zip_delete.c.o.d" + "CMakeFiles/zip.dir/zip_dir_add.c.o" + "CMakeFiles/zip.dir/zip_dir_add.c.o.d" + "CMakeFiles/zip.dir/zip_dirent.c.o" + "CMakeFiles/zip.dir/zip_dirent.c.o.d" + "CMakeFiles/zip.dir/zip_discard.c.o" + "CMakeFiles/zip.dir/zip_discard.c.o.d" + "CMakeFiles/zip.dir/zip_entry.c.o" + "CMakeFiles/zip.dir/zip_entry.c.o.d" + "CMakeFiles/zip.dir/zip_err_str.c.o" + "CMakeFiles/zip.dir/zip_err_str.c.o.d" + "CMakeFiles/zip.dir/zip_error.c.o" + "CMakeFiles/zip.dir/zip_error.c.o.d" + "CMakeFiles/zip.dir/zip_error_clear.c.o" + "CMakeFiles/zip.dir/zip_error_clear.c.o.d" + "CMakeFiles/zip.dir/zip_error_get.c.o" + "CMakeFiles/zip.dir/zip_error_get.c.o.d" + "CMakeFiles/zip.dir/zip_error_get_sys_type.c.o" + "CMakeFiles/zip.dir/zip_error_get_sys_type.c.o.d" + "CMakeFiles/zip.dir/zip_error_strerror.c.o" + "CMakeFiles/zip.dir/zip_error_strerror.c.o.d" + "CMakeFiles/zip.dir/zip_error_to_str.c.o" + "CMakeFiles/zip.dir/zip_error_to_str.c.o.d" + "CMakeFiles/zip.dir/zip_extra_field.c.o" + "CMakeFiles/zip.dir/zip_extra_field.c.o.d" + "CMakeFiles/zip.dir/zip_extra_field_api.c.o" + "CMakeFiles/zip.dir/zip_extra_field_api.c.o.d" + "CMakeFiles/zip.dir/zip_fclose.c.o" + "CMakeFiles/zip.dir/zip_fclose.c.o.d" + "CMakeFiles/zip.dir/zip_fdopen.c.o" + "CMakeFiles/zip.dir/zip_fdopen.c.o.d" + "CMakeFiles/zip.dir/zip_file_add.c.o" + "CMakeFiles/zip.dir/zip_file_add.c.o.d" + "CMakeFiles/zip.dir/zip_file_error_clear.c.o" + "CMakeFiles/zip.dir/zip_file_error_clear.c.o.d" + "CMakeFiles/zip.dir/zip_file_error_get.c.o" + "CMakeFiles/zip.dir/zip_file_error_get.c.o.d" + "CMakeFiles/zip.dir/zip_file_get_comment.c.o" + "CMakeFiles/zip.dir/zip_file_get_comment.c.o.d" + "CMakeFiles/zip.dir/zip_file_get_external_attributes.c.o" + "CMakeFiles/zip.dir/zip_file_get_external_attributes.c.o.d" + "CMakeFiles/zip.dir/zip_file_get_offset.c.o" + "CMakeFiles/zip.dir/zip_file_get_offset.c.o.d" + "CMakeFiles/zip.dir/zip_file_rename.c.o" + "CMakeFiles/zip.dir/zip_file_rename.c.o.d" + "CMakeFiles/zip.dir/zip_file_replace.c.o" + "CMakeFiles/zip.dir/zip_file_replace.c.o.d" + "CMakeFiles/zip.dir/zip_file_set_comment.c.o" + "CMakeFiles/zip.dir/zip_file_set_comment.c.o.d" + "CMakeFiles/zip.dir/zip_file_set_encryption.c.o" + "CMakeFiles/zip.dir/zip_file_set_encryption.c.o.d" + "CMakeFiles/zip.dir/zip_file_set_external_attributes.c.o" + "CMakeFiles/zip.dir/zip_file_set_external_attributes.c.o.d" + "CMakeFiles/zip.dir/zip_file_set_mtime.c.o" + "CMakeFiles/zip.dir/zip_file_set_mtime.c.o.d" + "CMakeFiles/zip.dir/zip_file_strerror.c.o" + "CMakeFiles/zip.dir/zip_file_strerror.c.o.d" + "CMakeFiles/zip.dir/zip_fopen.c.o" + "CMakeFiles/zip.dir/zip_fopen.c.o.d" + "CMakeFiles/zip.dir/zip_fopen_encrypted.c.o" + "CMakeFiles/zip.dir/zip_fopen_encrypted.c.o.d" + "CMakeFiles/zip.dir/zip_fopen_index.c.o" + "CMakeFiles/zip.dir/zip_fopen_index.c.o.d" + "CMakeFiles/zip.dir/zip_fopen_index_encrypted.c.o" + "CMakeFiles/zip.dir/zip_fopen_index_encrypted.c.o.d" + "CMakeFiles/zip.dir/zip_fread.c.o" + "CMakeFiles/zip.dir/zip_fread.c.o.d" + "CMakeFiles/zip.dir/zip_fseek.c.o" + "CMakeFiles/zip.dir/zip_fseek.c.o.d" + "CMakeFiles/zip.dir/zip_ftell.c.o" + "CMakeFiles/zip.dir/zip_ftell.c.o.d" + "CMakeFiles/zip.dir/zip_get_archive_comment.c.o" + "CMakeFiles/zip.dir/zip_get_archive_comment.c.o.d" + "CMakeFiles/zip.dir/zip_get_archive_flag.c.o" + "CMakeFiles/zip.dir/zip_get_archive_flag.c.o.d" + "CMakeFiles/zip.dir/zip_get_encryption_implementation.c.o" + "CMakeFiles/zip.dir/zip_get_encryption_implementation.c.o.d" + "CMakeFiles/zip.dir/zip_get_file_comment.c.o" + "CMakeFiles/zip.dir/zip_get_file_comment.c.o.d" + "CMakeFiles/zip.dir/zip_get_name.c.o" + "CMakeFiles/zip.dir/zip_get_name.c.o.d" + "CMakeFiles/zip.dir/zip_get_num_entries.c.o" + "CMakeFiles/zip.dir/zip_get_num_entries.c.o.d" + "CMakeFiles/zip.dir/zip_get_num_files.c.o" + "CMakeFiles/zip.dir/zip_get_num_files.c.o.d" + "CMakeFiles/zip.dir/zip_hash.c.o" + "CMakeFiles/zip.dir/zip_hash.c.o.d" + "CMakeFiles/zip.dir/zip_io_util.c.o" + "CMakeFiles/zip.dir/zip_io_util.c.o.d" + "CMakeFiles/zip.dir/zip_libzip_version.c.o" + "CMakeFiles/zip.dir/zip_libzip_version.c.o.d" + "CMakeFiles/zip.dir/zip_memdup.c.o" + "CMakeFiles/zip.dir/zip_memdup.c.o.d" + "CMakeFiles/zip.dir/zip_name_locate.c.o" + "CMakeFiles/zip.dir/zip_name_locate.c.o.d" + "CMakeFiles/zip.dir/zip_new.c.o" + "CMakeFiles/zip.dir/zip_new.c.o.d" + "CMakeFiles/zip.dir/zip_open.c.o" + "CMakeFiles/zip.dir/zip_open.c.o.d" + "CMakeFiles/zip.dir/zip_pkware.c.o" + "CMakeFiles/zip.dir/zip_pkware.c.o.d" + "CMakeFiles/zip.dir/zip_progress.c.o" + "CMakeFiles/zip.dir/zip_progress.c.o.d" + "CMakeFiles/zip.dir/zip_random_unix.c.o" + "CMakeFiles/zip.dir/zip_random_unix.c.o.d" + "CMakeFiles/zip.dir/zip_rename.c.o" + "CMakeFiles/zip.dir/zip_rename.c.o.d" + "CMakeFiles/zip.dir/zip_replace.c.o" + "CMakeFiles/zip.dir/zip_replace.c.o.d" + "CMakeFiles/zip.dir/zip_set_archive_comment.c.o" + "CMakeFiles/zip.dir/zip_set_archive_comment.c.o.d" + "CMakeFiles/zip.dir/zip_set_archive_flag.c.o" + "CMakeFiles/zip.dir/zip_set_archive_flag.c.o.d" + "CMakeFiles/zip.dir/zip_set_default_password.c.o" + "CMakeFiles/zip.dir/zip_set_default_password.c.o.d" + "CMakeFiles/zip.dir/zip_set_file_comment.c.o" + "CMakeFiles/zip.dir/zip_set_file_comment.c.o.d" + "CMakeFiles/zip.dir/zip_set_file_compression.c.o" + "CMakeFiles/zip.dir/zip_set_file_compression.c.o.d" + "CMakeFiles/zip.dir/zip_set_name.c.o" + "CMakeFiles/zip.dir/zip_set_name.c.o.d" + "CMakeFiles/zip.dir/zip_source_accept_empty.c.o" + "CMakeFiles/zip.dir/zip_source_accept_empty.c.o.d" + "CMakeFiles/zip.dir/zip_source_begin_write.c.o" + "CMakeFiles/zip.dir/zip_source_begin_write.c.o.d" + "CMakeFiles/zip.dir/zip_source_begin_write_cloning.c.o" + "CMakeFiles/zip.dir/zip_source_begin_write_cloning.c.o.d" + "CMakeFiles/zip.dir/zip_source_buffer.c.o" + "CMakeFiles/zip.dir/zip_source_buffer.c.o.d" + "CMakeFiles/zip.dir/zip_source_call.c.o" + "CMakeFiles/zip.dir/zip_source_call.c.o.d" + "CMakeFiles/zip.dir/zip_source_close.c.o" + "CMakeFiles/zip.dir/zip_source_close.c.o.d" + "CMakeFiles/zip.dir/zip_source_commit_write.c.o" + "CMakeFiles/zip.dir/zip_source_commit_write.c.o.d" + "CMakeFiles/zip.dir/zip_source_compress.c.o" + "CMakeFiles/zip.dir/zip_source_compress.c.o.d" + "CMakeFiles/zip.dir/zip_source_crc.c.o" + "CMakeFiles/zip.dir/zip_source_crc.c.o.d" + "CMakeFiles/zip.dir/zip_source_error.c.o" + "CMakeFiles/zip.dir/zip_source_error.c.o.d" + "CMakeFiles/zip.dir/zip_source_file_common.c.o" + "CMakeFiles/zip.dir/zip_source_file_common.c.o.d" + "CMakeFiles/zip.dir/zip_source_file_stdio.c.o" + "CMakeFiles/zip.dir/zip_source_file_stdio.c.o.d" + "CMakeFiles/zip.dir/zip_source_file_stdio_named.c.o" + "CMakeFiles/zip.dir/zip_source_file_stdio_named.c.o.d" + "CMakeFiles/zip.dir/zip_source_free.c.o" + "CMakeFiles/zip.dir/zip_source_free.c.o.d" + "CMakeFiles/zip.dir/zip_source_function.c.o" + "CMakeFiles/zip.dir/zip_source_function.c.o.d" + "CMakeFiles/zip.dir/zip_source_get_dostime.c.o" + "CMakeFiles/zip.dir/zip_source_get_dostime.c.o.d" + "CMakeFiles/zip.dir/zip_source_get_file_attributes.c.o" + "CMakeFiles/zip.dir/zip_source_get_file_attributes.c.o.d" + "CMakeFiles/zip.dir/zip_source_is_deleted.c.o" + "CMakeFiles/zip.dir/zip_source_is_deleted.c.o.d" + "CMakeFiles/zip.dir/zip_source_layered.c.o" + "CMakeFiles/zip.dir/zip_source_layered.c.o.d" + "CMakeFiles/zip.dir/zip_source_open.c.o" + "CMakeFiles/zip.dir/zip_source_open.c.o.d" + "CMakeFiles/zip.dir/zip_source_pass_to_lower_layer.c.o" + "CMakeFiles/zip.dir/zip_source_pass_to_lower_layer.c.o.d" + "CMakeFiles/zip.dir/zip_source_pkware_decode.c.o" + "CMakeFiles/zip.dir/zip_source_pkware_decode.c.o.d" + "CMakeFiles/zip.dir/zip_source_pkware_encode.c.o" + "CMakeFiles/zip.dir/zip_source_pkware_encode.c.o.d" + "CMakeFiles/zip.dir/zip_source_read.c.o" + "CMakeFiles/zip.dir/zip_source_read.c.o.d" + "CMakeFiles/zip.dir/zip_source_remove.c.o" + "CMakeFiles/zip.dir/zip_source_remove.c.o.d" + "CMakeFiles/zip.dir/zip_source_rollback_write.c.o" + "CMakeFiles/zip.dir/zip_source_rollback_write.c.o.d" + "CMakeFiles/zip.dir/zip_source_seek.c.o" + "CMakeFiles/zip.dir/zip_source_seek.c.o.d" + "CMakeFiles/zip.dir/zip_source_seek_write.c.o" + "CMakeFiles/zip.dir/zip_source_seek_write.c.o.d" + "CMakeFiles/zip.dir/zip_source_stat.c.o" + "CMakeFiles/zip.dir/zip_source_stat.c.o.d" + "CMakeFiles/zip.dir/zip_source_supports.c.o" + "CMakeFiles/zip.dir/zip_source_supports.c.o.d" + "CMakeFiles/zip.dir/zip_source_tell.c.o" + "CMakeFiles/zip.dir/zip_source_tell.c.o.d" + "CMakeFiles/zip.dir/zip_source_tell_write.c.o" + "CMakeFiles/zip.dir/zip_source_tell_write.c.o.d" + "CMakeFiles/zip.dir/zip_source_window.c.o" + "CMakeFiles/zip.dir/zip_source_window.c.o.d" + "CMakeFiles/zip.dir/zip_source_write.c.o" + "CMakeFiles/zip.dir/zip_source_write.c.o.d" + "CMakeFiles/zip.dir/zip_source_zip.c.o" + "CMakeFiles/zip.dir/zip_source_zip.c.o.d" + "CMakeFiles/zip.dir/zip_source_zip_new.c.o" + "CMakeFiles/zip.dir/zip_source_zip_new.c.o.d" + "CMakeFiles/zip.dir/zip_stat.c.o" + "CMakeFiles/zip.dir/zip_stat.c.o.d" + "CMakeFiles/zip.dir/zip_stat_index.c.o" + "CMakeFiles/zip.dir/zip_stat_index.c.o.d" + "CMakeFiles/zip.dir/zip_stat_init.c.o" + "CMakeFiles/zip.dir/zip_stat_init.c.o.d" + "CMakeFiles/zip.dir/zip_strerror.c.o" + "CMakeFiles/zip.dir/zip_strerror.c.o.d" + "CMakeFiles/zip.dir/zip_string.c.o" + "CMakeFiles/zip.dir/zip_string.c.o.d" + "CMakeFiles/zip.dir/zip_unchange.c.o" + "CMakeFiles/zip.dir/zip_unchange.c.o.d" + "CMakeFiles/zip.dir/zip_unchange_all.c.o" + "CMakeFiles/zip.dir/zip_unchange_all.c.o.d" + "CMakeFiles/zip.dir/zip_unchange_archive.c.o" + "CMakeFiles/zip.dir/zip_unchange_archive.c.o.d" + "CMakeFiles/zip.dir/zip_unchange_data.c.o" + "CMakeFiles/zip.dir/zip_unchange_data.c.o.d" + "CMakeFiles/zip.dir/zip_utf-8.c.o" + "CMakeFiles/zip.dir/zip_utf-8.c.o.d" + "libzip.a" + "libzip.pdb" + "zip_err_str.c" +) + +# Per-language clean rules from dependency scanning. +foreach(lang C) + include(CMakeFiles/zip.dir/cmake_clean_${lang}.cmake OPTIONAL) +endforeach() diff --git a/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/cmake_clean_target.cmake b/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/cmake_clean_target.cmake new file mode 100644 index 0000000..e68a0d9 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/cmake_clean_target.cmake @@ -0,0 +1,3 @@ +file(REMOVE_RECURSE + "libzip.a" +) diff --git a/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/compiler_depend.make b/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/compiler_depend.make new file mode 100644 index 0000000..cd5d6a1 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/compiler_depend.make @@ -0,0 +1,2 @@ +# Empty compiler generated dependencies file for zip. +# This may be replaced when dependencies are built. diff --git a/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/compiler_depend.ts b/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/compiler_depend.ts new file mode 100644 index 0000000..554de6c --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/compiler_depend.ts @@ -0,0 +1,2 @@ +# CMAKE generated file: DO NOT EDIT! +# Timestamp file for compiler generated dependencies management for zip. diff --git a/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/depend.make b/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/depend.make new file mode 100644 index 0000000..4b936e6 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/depend.make @@ -0,0 +1,2 @@ +# Empty dependencies file for zip. +# This may be replaced when dependencies are built. diff --git a/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/flags.make b/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/flags.make new file mode 100644 index 0000000..dccbf94 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/flags.make @@ -0,0 +1,10 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.28 + +# compile C with /home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc +C_DEFINES = + +C_INCLUDES = @CMakeFiles/zip.dir/includes_C.rsp + +C_FLAGS = -fvisibility=hidden + diff --git a/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/link.txt b/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/link.txt new file mode 100644 index 0000000..b67e250 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/link.txt @@ -0,0 +1,2 @@ +"/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emar" qc libzip.a CMakeFiles/zip.dir/zip_add.c.o CMakeFiles/zip.dir/zip_add_dir.c.o CMakeFiles/zip.dir/zip_add_entry.c.o CMakeFiles/zip.dir/zip_algorithm_deflate.c.o CMakeFiles/zip.dir/zip_buffer.c.o CMakeFiles/zip.dir/zip_close.c.o CMakeFiles/zip.dir/zip_delete.c.o CMakeFiles/zip.dir/zip_dir_add.c.o CMakeFiles/zip.dir/zip_dirent.c.o CMakeFiles/zip.dir/zip_discard.c.o CMakeFiles/zip.dir/zip_entry.c.o CMakeFiles/zip.dir/zip_error.c.o CMakeFiles/zip.dir/zip_error_clear.c.o CMakeFiles/zip.dir/zip_error_get.c.o CMakeFiles/zip.dir/zip_error_get_sys_type.c.o CMakeFiles/zip.dir/zip_error_strerror.c.o CMakeFiles/zip.dir/zip_error_to_str.c.o CMakeFiles/zip.dir/zip_extra_field.c.o CMakeFiles/zip.dir/zip_extra_field_api.c.o CMakeFiles/zip.dir/zip_fclose.c.o CMakeFiles/zip.dir/zip_fdopen.c.o CMakeFiles/zip.dir/zip_file_add.c.o CMakeFiles/zip.dir/zip_file_error_clear.c.o CMakeFiles/zip.dir/zip_file_error_get.c.o CMakeFiles/zip.dir/zip_file_get_comment.c.o CMakeFiles/zip.dir/zip_file_get_external_attributes.c.o CMakeFiles/zip.dir/zip_file_get_offset.c.o CMakeFiles/zip.dir/zip_file_rename.c.o CMakeFiles/zip.dir/zip_file_replace.c.o CMakeFiles/zip.dir/zip_file_set_comment.c.o CMakeFiles/zip.dir/zip_file_set_encryption.c.o CMakeFiles/zip.dir/zip_file_set_external_attributes.c.o CMakeFiles/zip.dir/zip_file_set_mtime.c.o CMakeFiles/zip.dir/zip_file_strerror.c.o CMakeFiles/zip.dir/zip_fopen.c.o CMakeFiles/zip.dir/zip_fopen_encrypted.c.o CMakeFiles/zip.dir/zip_fopen_index.c.o CMakeFiles/zip.dir/zip_fopen_index_encrypted.c.o CMakeFiles/zip.dir/zip_fread.c.o CMakeFiles/zip.dir/zip_fseek.c.o CMakeFiles/zip.dir/zip_ftell.c.o CMakeFiles/zip.dir/zip_get_archive_comment.c.o CMakeFiles/zip.dir/zip_get_archive_flag.c.o CMakeFiles/zip.dir/zip_get_encryption_implementation.c.o CMakeFiles/zip.dir/zip_get_file_comment.c.o CMakeFiles/zip.dir/zip_get_name.c.o CMakeFiles/zip.dir/zip_get_num_entries.c.o CMakeFiles/zip.dir/zip_get_num_files.c.o CMakeFiles/zip.dir/zip_hash.c.o CMakeFiles/zip.dir/zip_io_util.c.o CMakeFiles/zip.dir/zip_libzip_version.c.o CMakeFiles/zip.dir/zip_memdup.c.o CMakeFiles/zip.dir/zip_name_locate.c.o CMakeFiles/zip.dir/zip_new.c.o CMakeFiles/zip.dir/zip_open.c.o CMakeFiles/zip.dir/zip_pkware.c.o CMakeFiles/zip.dir/zip_progress.c.o CMakeFiles/zip.dir/zip_rename.c.o CMakeFiles/zip.dir/zip_replace.c.o CMakeFiles/zip.dir/zip_set_archive_comment.c.o CMakeFiles/zip.dir/zip_set_archive_flag.c.o CMakeFiles/zip.dir/zip_set_default_password.c.o CMakeFiles/zip.dir/zip_set_file_comment.c.o CMakeFiles/zip.dir/zip_set_file_compression.c.o CMakeFiles/zip.dir/zip_set_name.c.o CMakeFiles/zip.dir/zip_source_accept_empty.c.o CMakeFiles/zip.dir/zip_source_begin_write.c.o CMakeFiles/zip.dir/zip_source_begin_write_cloning.c.o CMakeFiles/zip.dir/zip_source_buffer.c.o CMakeFiles/zip.dir/zip_source_call.c.o CMakeFiles/zip.dir/zip_source_close.c.o CMakeFiles/zip.dir/zip_source_commit_write.c.o CMakeFiles/zip.dir/zip_source_compress.c.o CMakeFiles/zip.dir/zip_source_crc.c.o CMakeFiles/zip.dir/zip_source_error.c.o CMakeFiles/zip.dir/zip_source_file_common.c.o CMakeFiles/zip.dir/zip_source_file_stdio.c.o CMakeFiles/zip.dir/zip_source_free.c.o CMakeFiles/zip.dir/zip_source_function.c.o CMakeFiles/zip.dir/zip_source_get_dostime.c.o CMakeFiles/zip.dir/zip_source_get_file_attributes.c.o CMakeFiles/zip.dir/zip_source_is_deleted.c.o CMakeFiles/zip.dir/zip_source_layered.c.o CMakeFiles/zip.dir/zip_source_open.c.o CMakeFiles/zip.dir/zip_source_pass_to_lower_layer.c.o CMakeFiles/zip.dir/zip_source_pkware_decode.c.o CMakeFiles/zip.dir/zip_source_pkware_encode.c.o CMakeFiles/zip.dir/zip_source_read.c.o CMakeFiles/zip.dir/zip_source_remove.c.o CMakeFiles/zip.dir/zip_source_rollback_write.c.o CMakeFiles/zip.dir/zip_source_seek.c.o CMakeFiles/zip.dir/zip_source_seek_write.c.o CMakeFiles/zip.dir/zip_source_stat.c.o CMakeFiles/zip.dir/zip_source_supports.c.o CMakeFiles/zip.dir/zip_source_tell.c.o CMakeFiles/zip.dir/zip_source_tell_write.c.o CMakeFiles/zip.dir/zip_source_window.c.o CMakeFiles/zip.dir/zip_source_write.c.o CMakeFiles/zip.dir/zip_source_zip.c.o CMakeFiles/zip.dir/zip_source_zip_new.c.o CMakeFiles/zip.dir/zip_stat.c.o CMakeFiles/zip.dir/zip_stat_index.c.o CMakeFiles/zip.dir/zip_stat_init.c.o CMakeFiles/zip.dir/zip_strerror.c.o CMakeFiles/zip.dir/zip_string.c.o CMakeFiles/zip.dir/zip_unchange.c.o CMakeFiles/zip.dir/zip_unchange_all.c.o CMakeFiles/zip.dir/zip_unchange_archive.c.o CMakeFiles/zip.dir/zip_unchange_data.c.o "CMakeFiles/zip.dir/zip_utf-8.c.o" CMakeFiles/zip.dir/zip_err_str.c.o CMakeFiles/zip.dir/zip_source_file_stdio_named.c.o CMakeFiles/zip.dir/zip_random_unix.c.o +"/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emranlib" libzip.a diff --git a/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/progress.make b/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/progress.make new file mode 100644 index 0000000..072351c --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/progress.make @@ -0,0 +1,116 @@ +CMAKE_PROGRESS_1 = +CMAKE_PROGRESS_2 = +CMAKE_PROGRESS_3 = 71 +CMAKE_PROGRESS_4 = +CMAKE_PROGRESS_5 = +CMAKE_PROGRESS_6 = +CMAKE_PROGRESS_7 = 72 +CMAKE_PROGRESS_8 = +CMAKE_PROGRESS_9 = +CMAKE_PROGRESS_10 = +CMAKE_PROGRESS_11 = +CMAKE_PROGRESS_12 = 73 +CMAKE_PROGRESS_13 = +CMAKE_PROGRESS_14 = +CMAKE_PROGRESS_15 = +CMAKE_PROGRESS_16 = 74 +CMAKE_PROGRESS_17 = +CMAKE_PROGRESS_18 = +CMAKE_PROGRESS_19 = +CMAKE_PROGRESS_20 = +CMAKE_PROGRESS_21 = 75 +CMAKE_PROGRESS_22 = +CMAKE_PROGRESS_23 = +CMAKE_PROGRESS_24 = +CMAKE_PROGRESS_25 = 76 +CMAKE_PROGRESS_26 = +CMAKE_PROGRESS_27 = +CMAKE_PROGRESS_28 = +CMAKE_PROGRESS_29 = +CMAKE_PROGRESS_30 = 77 +CMAKE_PROGRESS_31 = +CMAKE_PROGRESS_32 = +CMAKE_PROGRESS_33 = +CMAKE_PROGRESS_34 = 78 +CMAKE_PROGRESS_35 = +CMAKE_PROGRESS_36 = +CMAKE_PROGRESS_37 = +CMAKE_PROGRESS_38 = +CMAKE_PROGRESS_39 = 79 +CMAKE_PROGRESS_40 = +CMAKE_PROGRESS_41 = +CMAKE_PROGRESS_42 = +CMAKE_PROGRESS_43 = 80 +CMAKE_PROGRESS_44 = +CMAKE_PROGRESS_45 = +CMAKE_PROGRESS_46 = +CMAKE_PROGRESS_47 = +CMAKE_PROGRESS_48 = 81 +CMAKE_PROGRESS_49 = +CMAKE_PROGRESS_50 = +CMAKE_PROGRESS_51 = +CMAKE_PROGRESS_52 = +CMAKE_PROGRESS_53 = 82 +CMAKE_PROGRESS_54 = +CMAKE_PROGRESS_55 = +CMAKE_PROGRESS_56 = +CMAKE_PROGRESS_57 = 83 +CMAKE_PROGRESS_58 = +CMAKE_PROGRESS_59 = +CMAKE_PROGRESS_60 = +CMAKE_PROGRESS_61 = +CMAKE_PROGRESS_62 = 84 +CMAKE_PROGRESS_63 = +CMAKE_PROGRESS_64 = +CMAKE_PROGRESS_65 = +CMAKE_PROGRESS_66 = 85 +CMAKE_PROGRESS_67 = +CMAKE_PROGRESS_68 = +CMAKE_PROGRESS_69 = +CMAKE_PROGRESS_70 = +CMAKE_PROGRESS_71 = 86 +CMAKE_PROGRESS_72 = +CMAKE_PROGRESS_73 = +CMAKE_PROGRESS_74 = +CMAKE_PROGRESS_75 = 87 +CMAKE_PROGRESS_76 = +CMAKE_PROGRESS_77 = +CMAKE_PROGRESS_78 = +CMAKE_PROGRESS_79 = +CMAKE_PROGRESS_80 = 88 +CMAKE_PROGRESS_81 = +CMAKE_PROGRESS_82 = +CMAKE_PROGRESS_83 = +CMAKE_PROGRESS_84 = 89 +CMAKE_PROGRESS_85 = +CMAKE_PROGRESS_86 = +CMAKE_PROGRESS_87 = +CMAKE_PROGRESS_88 = +CMAKE_PROGRESS_89 = 90 +CMAKE_PROGRESS_90 = +CMAKE_PROGRESS_91 = +CMAKE_PROGRESS_92 = +CMAKE_PROGRESS_93 = +CMAKE_PROGRESS_94 = 91 +CMAKE_PROGRESS_95 = +CMAKE_PROGRESS_96 = +CMAKE_PROGRESS_97 = +CMAKE_PROGRESS_98 = 92 +CMAKE_PROGRESS_99 = +CMAKE_PROGRESS_100 = +CMAKE_PROGRESS_101 = +CMAKE_PROGRESS_102 = +CMAKE_PROGRESS_103 = 93 +CMAKE_PROGRESS_104 = +CMAKE_PROGRESS_105 = +CMAKE_PROGRESS_106 = +CMAKE_PROGRESS_107 = 94 +CMAKE_PROGRESS_108 = +CMAKE_PROGRESS_109 = +CMAKE_PROGRESS_110 = +CMAKE_PROGRESS_111 = +CMAKE_PROGRESS_112 = 95 +CMAKE_PROGRESS_113 = +CMAKE_PROGRESS_114 = +CMAKE_PROGRESS_115 = + diff --git a/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_add.c.o b/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_add.c.o new file mode 100644 index 0000000000000000000000000000000000000000..7785297d187e1683b205d9b02aee0d17b57b90d5 GIT binary patch literal 587 zcmYjO!H&}~5Vf6jlctff(n?%$#2yw!>2|lbn4VCN`gDAH6by{u z#MDe4;*f^tN5LSPpr6*yGjnWeSrPx6O&v45XWKQMl2e4t`C<7$foS>k<(pTp9oGx6 z_Y|Xd#OpBnZJ)=TYKwt`>Tzg74t)8z?Xy|~x9>t9@&_CJMvfUH=}R;!zAS(K}JHis)V=fz^Rm~lQYuFC>ui|6S3XX74e zrYg{R2}}km uv$cS<678CaJ~@-E)QWYT`K+|;wB2wLDJVgKt9ap1}=b)0E7TgQnUr=lFTT|R&l zLgEAX5I%=L;E3Js0m<^4d1JqMVVZ9+{9s+d`gXd)(uK$>P)X)nq!E7Nw>acUm{?n@bblb=id1)uj--^Ol&a z_rNv1SuW?W$XCSnRbH>=rV23Ksx^Z9B%<$RW3Z*rKWqmt lekNA#vV9BP@_EY0f!3Gpa4vF43(8hjS7BYd)`X4f`sF45w literal 0 HcmV?d00001 diff --git a/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_add_dir.c.o.d b/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_add_dir.c.o.d new file mode 100644 index 0000000..0554534 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_add_dir.c.o.d @@ -0,0 +1,41 @@ +lib/CMakeFiles/zip.dir/zip_add_dir.c.o: \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_add_dir.c \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zipint.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/config.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/zipconf.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/inttypes.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/inttypes.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/features.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stdint.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdint.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/alltypes.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/stdint.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/compat.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stdbool.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdbool.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/errno.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/errno.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/wasi/api.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stddef.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stddef.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_header_macro.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_ptrdiff_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_size_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_rsize_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_wchar_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_null.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_max_align_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_offsetof.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/sys/stat.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/sys/stat.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/stat.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdio.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/sys/types.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/endian.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/sys/select.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/time.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/time.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/string.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/string.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/strings.h diff --git a/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_add_entry.c.o b/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_add_entry.c.o new file mode 100644 index 0000000000000000000000000000000000000000..631dbb26b69545f11b50024e3714a321eacc467d GIT binary patch literal 1366 zcmYjROH&(15T4!93j|0uHpWl7jciMnR|xb%_=Uv7Z}0PF_$MUC^k`KiRa(tVcYj}hJv}o_Z#NXinDXoK@iFslDz0+0 z$z9iFo2u(7E*Y5mUHbf7So@Jm#jIOGw<`_NXxaxVV?A@*(T&|ot68@kVRKiJ=D{E9 zt%|Vird??Zhjnd1Tj-|QG??lEyCIfiA5`jA-C>;nER!j$|Ibfy{39^tbNP{!<#Pi^ zoaWs1(_HD<)T0p1Rr-c{qe?My?Q>Nc$BFKkp;G#bp$ZD9yU2mZx>n%8@@f`%T+N~n zdkn8YUpUhm)jh@^pKqN+Ha^6l8WVTN=V#iD4eHkb``*+l{h|1??VypM}O)z_yIv5xHmgIR_rvAT#Wq5gruV4vY6?mFRmkT`ZpYQ=6~`4=Il;G7 z;VQg^RR`a}8+f;aYp@pW-U}~kofy`=OtLW>@@&5++xs2-03Uj1dm|ENU**;W>BjEX zt(qG8O)mY+$A>EN+UeD5MaZkCMj4Yog+*0%B7^#EL3cDYw>-bVgTXl^xUR78TxGxe zIQ!eDvd;lu@LND(|H$CJmffs&3}LsG0h$`3-4<1C>p<}vrf${NrY2MARJvAoApX&D zTJ4z$nt$wUrHp1{!Zi22KaHR}!f+s4DC9)GT1*#<*?gh8UCiV&Vp7i-)m$-`HjGSl zYP%}Zxdi)#TF)YmZr6lU*%rFfu|+$S3~zPJUCn!-l9B%{v}Vgmju`a*XmzVvw<(*} z+!walv}(!zM#psO`?}c?$w;H)=v$`HYG!jwH`~c!t4SNBw_3E1+IGv4&s;KMi)~>G U%MhA#&=T!rs9mpFn)t!_7t5eF%K!iX literal 0 HcmV?d00001 diff --git a/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_add_entry.c.o.d b/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_add_entry.c.o.d new file mode 100644 index 0000000..397a999 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_add_entry.c.o.d @@ -0,0 +1,44 @@ +lib/CMakeFiles/zip.dir/zip_add_entry.c.o: \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_add_entry.c \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/stdlib.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdlib.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/features.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/alltypes.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/alloca.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zipint.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/config.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/zipconf.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/inttypes.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/inttypes.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stdint.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdint.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/stdint.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/compat.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stdbool.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdbool.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/errno.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/errno.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/wasi/api.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stddef.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stddef.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_header_macro.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_ptrdiff_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_size_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_rsize_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_wchar_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_null.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_max_align_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_offsetof.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/sys/stat.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/sys/stat.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/stat.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdio.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/sys/types.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/endian.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/sys/select.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/time.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/time.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/string.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/string.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/strings.h diff --git a/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_algorithm_deflate.c.o b/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_algorithm_deflate.c.o new file mode 100644 index 0000000000000000000000000000000000000000..fb1e7638e73055363ff8934914714b7280527999 GIT binary patch literal 4579 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 literal 0 HcmV?d00001 diff --git a/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_algorithm_deflate.c.o.d b/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_algorithm_deflate.c.o.d new file mode 100644 index 0000000..f972f43 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_algorithm_deflate.c.o.d @@ -0,0 +1,60 @@ +lib/CMakeFiles/zip.dir/zip_algorithm_deflate.c.o: \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_algorithm_deflate.c \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zipint.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/config.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/zipconf.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/inttypes.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/inttypes.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/features.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stdint.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdint.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/alltypes.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/stdint.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/compat.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stdbool.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdbool.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/errno.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/errno.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/wasi/api.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stddef.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stddef.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_header_macro.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_ptrdiff_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_size_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_rsize_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_wchar_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_null.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_max_align_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_offsetof.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/sys/stat.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/sys/stat.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/stat.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdio.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/sys/types.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/endian.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/sys/select.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/time.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/time.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/string.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/string.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/strings.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/limits.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/limits.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/limits.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/stdlib.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdlib.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/alloca.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/zlib-1.3.1/install/include/zlib.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/zlib-1.3.1/install/include/zconf.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/stdarg.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stdarg.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdarg.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stdarg_header_macro.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stdarg___gnuc_va_list.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stdarg_va_list.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stdarg_va_arg.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stdarg___va_copy.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stdarg_va_copy.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/unistd.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/posix.h diff --git a/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_buffer.c.o b/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_buffer.c.o new file mode 100644 index 0000000000000000000000000000000000000000..d7661989b86eeba595a30449c5c13b35e3e8ebd0 GIT binary patch literal 7286 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 LcQ=Z`M{0itl^pYy literal 0 HcmV?d00001 diff --git a/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_buffer.c.o.d b/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_buffer.c.o.d new file mode 100644 index 0000000..d608eb0 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_buffer.c.o.d @@ -0,0 +1,44 @@ +lib/CMakeFiles/zip.dir/zip_buffer.c.o: \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_buffer.c \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/stdlib.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdlib.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/features.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/alltypes.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/alloca.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/string.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/string.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/strings.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zipint.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/config.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/zipconf.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/inttypes.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/inttypes.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stdint.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdint.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/stdint.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/compat.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stdbool.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdbool.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/errno.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/errno.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/wasi/api.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stddef.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stddef.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_header_macro.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_ptrdiff_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_size_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_rsize_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_wchar_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_null.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_max_align_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_offsetof.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/sys/stat.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/sys/stat.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/stat.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdio.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/sys/types.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/endian.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/sys/select.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/time.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/time.h diff --git a/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_close.c.o b/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_close.c.o new file mode 100644 index 0000000000000000000000000000000000000000..6325eaeeeb549080ba5766a50d27698da080e0af GIT binary patch literal 22626 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 literal 0 HcmV?d00001 diff --git a/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_close.c.o.d b/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_close.c.o.d new file mode 100644 index 0000000..6d9ec49 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_close.c.o.d @@ -0,0 +1,44 @@ +lib/CMakeFiles/zip.dir/zip_close.c.o: \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_close.c \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zipint.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/config.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/zipconf.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/inttypes.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/inttypes.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/features.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stdint.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdint.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/alltypes.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/stdint.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/compat.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stdbool.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdbool.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/errno.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/errno.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/wasi/api.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stddef.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stddef.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_header_macro.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_ptrdiff_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_size_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_rsize_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_wchar_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_null.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_max_align_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_offsetof.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/sys/stat.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/sys/stat.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/stat.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdio.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/sys/types.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/endian.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/sys/select.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/time.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/time.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/string.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/string.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/strings.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/stdlib.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdlib.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/alloca.h diff --git a/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_delete.c.o b/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_delete.c.o new file mode 100644 index 0000000000000000000000000000000000000000..132cb1ab1685386817502d7f2c1f459a9a39bfb7 GIT binary patch literal 1166 zcmYjROK;mo5MC}ROP1t_@hf)hB(t%TNMR_`mL)~bOGKMo(__&KO_8gYDUv2vM%{zy zCb{>Lb1yx#K+!+ZQ-K2g9sLPCc1Rk504{fTINxJ;XG!dMCJ{oUU#_pON#T?xS5k5+ zCrLt1mE2NXY0th{)KY`IX7VgHmB^4xy`naa~tl! z7Hogvyo;Q77ddxw`@6ZqJ!H5K_u&4NJwPH-jOXb!ZhoJp=|1-?2Sh z;Xdra{yBSuULK(rbp9Cg9xtjqfhTqP4XdXrRo2MGo}!orPeGfqXHbU*JX5o?VLFmF zL5Jo!J3!KdjMG3)W0CVPcYcJ)EjWZDXsI7Fm&b@X&W*GY)LsO2pi`%P*3Gfc;rXwu zXDaLjdT=7x3+Td&DSL^Ouiz!TIw9#&Un9wDB*{);m%YJ?=wqlqWhR(674fE4A%CRm zMXcwfgL_SND z{EO{3DwCgNh5REIihn8+`7Z@5hf(0p9UjF}6^9OwWA5sMOR3;^SmfUx9X5@oF`5Xd zkA(>1lLH)&=Yysb%nm&7B7f-!opMLOakty%9k*xnddHovJM6VOEq-XX9Jk$T8;;X* zkA^Nc+70qKy}~tNN9oNQa$C$J9+$MrVD6pi`CZm(3llvEg|_L~o~KWIcM_qR9$fIq z3;dB*p3OZmxv;%C*J`u5um>L3M_w?ny;xiG17AdT7~)py!%(Du1g#eFA&#@G2kmq^Qy5F%S$&f1H(U0a%-Dw6adl&*)Na)+m)jvv66XFF^>&HdcFQg~+-1Hk>bSPaEhYb!~%}%H3*}+bk^X;i}C!i})@j;Zv=fykzsXsT-U{g+28i z^qn_sI#Vts{+!aZbhD(pu3ay8UGA`$0LO(}g`3>vObLA~)RS2Jw=YEhRvAc=ig9WO zsHLbysUfljI_UJ~kY0POK;xWjmGGujqBL5Pzu11I3*rXZ(??355h_JvO3>7eK{LD92t8qUD1`ianm#LLP_ z)Pkis&|t2CXQ|e6a2C$ZFn@cKI3KJpP*RJq0E-Pg5A$%offp$LMYsSL$<>dR!AoSi zJjd_~T!PDR1um1yn$YTC8yc_zCbYp)>Eoue z+aYfoI$)nihl07_fZM??N!Hy6mBH13_!+FiGxbXW+e1}7ry8CIM}c-nB)&$LHM02A zEWV(N;3b(}Ht-d^$`G!{;6*CIeiow`U8yT|t0pVoi)oUvc*4Jh>UK%5RAiMg@spS; zGd0B2FjFH;jWRXHRE4R1>{kJc+nlb_;j`Dy&4<)jPKwP+?2RO|zp1^EL+r;;n7t0m z?1ylKeHV$c-y<>hHma~cqcQevtdIQ>i?gqlMC=zuV*d!jzP8<}bPaAhQj&%ScN|{H zm)E3-Vd_@x{@CbnVYpDMyO3RW-L^9`LgVFbdDv(*M@(}y_{$Tt!3`HCrlux&u`*ql zo}MU9RjSkD#c@8Wj~kWA>B)j&j91306<(MeV&918CgtjOjV|gc*WIqo9VM42cg>Z2 z@b2VN?@jWpwwv2&&{LAHTa~&^(ekZTZksKumWwyLrdwat%`VTSnq5~fn>=4LTV>sJ qasyV&a&5icCiU~xwkuw*T*~J3+HlL@d3UYNot)y-YgV3KjQ;_KL${Iu literal 0 HcmV?d00001 diff --git a/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_dir_add.c.o.d b/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_dir_add.c.o.d new file mode 100644 index 0000000..53e6a5a --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_dir_add.c.o.d @@ -0,0 +1,44 @@ +lib/CMakeFiles/zip.dir/zip_dir_add.c.o: \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_dir_add.c \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/stdlib.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdlib.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/features.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/alltypes.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/alloca.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/string.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/string.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/strings.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zipint.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/config.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/zipconf.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/inttypes.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/inttypes.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stdint.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdint.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/stdint.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/compat.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stdbool.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdbool.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/errno.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/errno.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/wasi/api.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stddef.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stddef.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_header_macro.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_ptrdiff_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_size_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_rsize_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_wchar_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_null.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_max_align_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_offsetof.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/sys/stat.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/sys/stat.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/stat.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdio.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/sys/types.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/endian.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/sys/select.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/time.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/time.h diff --git a/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_dirent.c.o b/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_dirent.c.o new file mode 100644 index 0000000000000000000000000000000000000000..0a4bb8f06db4909a5a6eafce9e6b603da131b31d GIT binary patch literal 35910 zcmbWg349bq(?8xlGn-A=Kn4g9AVM{w1|i%e5D?iQ2})E%M8xMY1_(+x!iJ#e;{)MF z?)#Ke4wV}b@ZeTaycG{T5bqQ5zLnp%x@UGb!u!7e&tKWiPEU7Lb#-@5SNFGiMA67$ zQV1a@j;p8;HE)$;1wL}@t@hZl_-T(F!xz?AFKLV%!?(w93g6Y~*4Qzo0RM52#+d~^ zLH<1kmt&C3f5+Y$;3WQ$pnrHt=ANzpSTm+Uk{r8u_#G*Qg+m7qFD@!899BH6wCpZR zNH2M0dC`C&g(FG_4=*n+v&ZV>nuT`{9#L34yu9qL!a;+F7Y!YJcd-y$z!_9l?EQ3g zrjg}kgNNT%7)wqVRy1^I=>S8&s-{y`R$5j#vbbDWOd?oTY;rh8f*7m8!v~ieHnli$ zWa+4~0mX&o#Y2Y{-dQ%dyjUb~iMo|&f^+FGFRKXh{lI{-0c~1~#2EGdqXrEsE-M^f ze5Xh{Cw0WAa+9})u8)@&sfAf>P4;tcw8|1%_H%B4t-et$o>b`&qYI-ikA6&Fm68V* zl^2=Zm1vg^8pP_;)vuyy8+}ya+9Zw~J_2n}K1hW4G65|zw0O9oVjA+cQN<%iqB#eY z4n$iS5tB8U;z4mO7xI%>QJPlu_hZx{j4K?fEZ ziA4&NuMz8V&|xu)WAdAZ*7DSzVp#tPkAWtQPr3z941tTia>SA@F#BNnZvJB-4m4q@$ z*|xB{*j>nOVhdHp6c16TiJhpDsR||cR#icv8darg5tTwI-Kt8H$t5?#5~{i>S%Ye9 zR5innN~M~VTCQqQb*fdOYEy036OZZF$(1UN>QLG}sxFw<1@mMP3K@d+s2&rnPxW1` z36q*m=^0jcbpc)Aj_1mo)CSbRWC}qQ4MD15i6SDSij>fPE6Ih@Sb6>@@&8s{V)$jD z9CF+VTFU{D4P;rY%LEEgLY@jj6Nwb0#E44Lx=eyDS)fE!C0tE~kdt*5qGWd>lfZRV z5UGlGfyOzbqpBe>g{o0XmZgh2%0*LDCzq;c+pft|11UAB2Gz{A6HQ7gQfg5u)ylTp zo0Qr}sYA7?PPX0Bq@;mzT}q?6Syp$GQV%KhsUFqO5d|hC9pa=z98cvJKzj|4)Sv`P zZ0L2Q3sOQ)22yNvzTnuv82%fA9;>4RnvUp4!4BDY;uO6y9K=R0q%$y(3s4& z34g3CE1d#OY*Go3S@*^3R3cQFM2VCXQB|}mt3Z`V3*nQ@8jL`70jioKTCnN@8CC{5 zVYMc<3+-uQE~Sur4>T8G%_VYTqN-u;Y321+sUW7c7E!e|liFx5ov%*rS^OtVXY8Zu zB4a(OOZ6h${m{iV$8?pBR=og9Y(VLB0lM5ouT>i&KT$)Xh*IFM;-zdvjkp_MXc#r7 z#v9c|7#A1QMRakwx`ZyIOWaAigRzb>Ob2U18Pp_CT?)EQ=~8MMQO&F_)Qr0qs-CVg zAxLuw(tz)QA=tSQLRC(bxaUPwJ}<2OKqtQcQ&oVcGQmbl!eS$=x=)H zLnE%rHuAQoY--OeUW)sZ^#nAfE{Q75k3Wt`VlovHIibvf$Rg)XNqy3!T*sBYle4P5n@*X@vJ=;l*C<#G4dT)IPbBtgEe?xlM)(NuWJCkm(6Gu z^xgz*M&+2gV;z`NPIu6|rM}0#-1K-krfQtkVC#{9vP{GF%K3kJG;kUIn~9I3^U5)) z_{(X@`ma64ij9_2@_!gE$Dv@7S=P(^*UGk^(F#8pQ+EvW}v z6T1uSPk`;uL0^zmO3kp+R4ov!O|__YMAbnLt;3_1hmro@y;qA^7e!%&+IkG@h1+6O z1*m?Bf-#3BuSXYTS$+8l)Bwp1VAA|<*dAsG{o)yKboEvWb!$Y58bvUmF7)~#DuH2@ zVRca#F^iWa1{X@T$KbkTqsl;s)WfM6` zrfzfvb%V~(QW!BjIM7lyMgrG59|NpA22l5V)Rnk-CG=?qn6A%NDBgpvq8=#jRk45y zShB0>YOhaSgJRd1K6Nc!L)TufdP1D*s3%<)QN18eub4R3qXYD&>#28%y1}E@hx#zR z8|enRG1{ZRjQUpUQ8%%;2c_yqH&MU;s+*DF=4^Yf6yOx+V8Rp$h31 zDsRi(eQ{W)$Lqr9vYB*gnnwIs0fXq zNFP;(oFl1>Mn+UQm7839r5fesx`Rg19evcD$Tgboq|p&|7v1GQTME?OVbl)Q`wx2L zJ#;tyhwgEwb4oo{Yk~T2ZZkE8{!3%r8F8s&!tT-a~@||gt?v*sH@}23h3wof= zkc8heWF;wQ`gdnZ!tYs?@6OhDp{Y5N@Ow_>yL0tjXnUR{{GM0&?tB?G56=Y>dRr)I zzN7_`7RpMxTf}lNmb6IH;>vO_@u@HMg;*vDzn95-)N)CDeJ0ZoxEX6KK4@=sG(vKJ^9*Ih^TheZ+_QXlCR}z|a z52V;5)uWOgg%pn&DIS;fn54%+=Lt#R`9x(Y_W8}RpQSi^Hbotfv|rKz$Z?S6I3x+r zqC+Tu*vN61PcS;@PA6uQ(*kGq^J2th@O<{s3fpBTDbxEDXUG=vp&;f zlAe`x3{0P6rq4@yPSW#W`hsElg2(hlNiRzElFt;q6;JM$!SoeLukei!y(HDElEC8C zc&2!Ey(Z~3nJF^Vac1$lBs~0I2a7ihi#M2sXIbBr^rpr1y|7O`Vjmjqgi3Dd~N1J7u_?^0^hL4`jHu z`p~r2N0L62^bzuXEa?MDAN#H4J>Ck`Cz`=7sXpcY{h6dsC4DCI)#qHPFC={~=?fJ9 z(y;l`XM+M?N%~5*kdFG=@H#E&Ye}b(`5Q^!NOgv537X$Z`j)RkbVjQ0Oy2J$eJAOA z#AHPZZRnl*=MEx$q zsp=1|%b${dm-L6EKczd7DVfpwm!!X>JBJhS6#1JK{Wm-uZ_1?GlX#;UW@LvqM}R#2bzXSV^ov^HQl1=UJkDx%&=&N#rA``r(C6zQ_Wx z#awDJh%K>biKUiu+A>aChP34tEw|Kt7TssL3$+qfShT`YD=k`SZBeT%T4d2ui&ptM zTFp9IW6^4h)<8#VSx5IH#M4phXW@^dLw)#3UZ_)r?AP0+|d9CAHb2%}}0DTl|!*7Hze-6K}Kh!+5(z+br4+ zDmyIN0r_`YgyP7*)0h8YX1>d!hb`I#`5$5CyDfUeqTMLAhnes3aPsJphNb9?8BtOPhp>j{Spfw z{vH3}bm`sq|FR!c3!g6d497j!E5p7J=lAJ#_O99QxhdxBZ2zBpod6wZjQT1cabV6QYFh;;Ag{1Rfg4GB_mr^N~Wq_wra>$ zEz82w9PPJ2s+6z=zX$6Dd8#_JUIU9$H6p4e_k8m|)$|6}5*b@H$WyhESue6g*v0Xd z1wb#lUXZ8iBTG8fr}T)r04;byj7|eEZAcBMVV)vnQdpl-5qL9=VstJ}u%HYgo zQtOUVFG86TZKw^GXsb)K!wNyWh{_6|J!4}XAd9jiaB135dlc~$*a1@L^?*Fp5rTH2 zj?^ilE<=Sc^C}E6I#XwEv&*^615$N?oe5JHy(AF+3B9zd=BC#IB5-NCVbvhl-KX1C zdo_OZ&ygx04XS;byh=*|;MW8E@YF9r3m0Tro7oN0YFLfsfN+JSuA!^xnuxj!}xAAAuXwJ0|=MbOZOKKA!M5LioOPBlRs&H-&$C8eWSQ{$}b& zH%H*E{EPa~O`h=ohAjW)MK{#DySfFUYxgBj-3nesbSo7_RDa0R-{Xe*4WI$;Vy-!= zG7!ZFdR1W(xLs^W4I=n5-qKBXbsO^C#yT<;hQe>B+gr%qYOofqga%VdL=DmAe2A$! z@(iV++|t8z9^bDC|Ba3^f=X#b1kTJ*id53;=dTIu*T7SWz=MHfqbBjQd!l}JXMz&DG5DT@0Wb;ANiH$fb6+9~zDfWNOOBZ0 z8woft(=g%at)`nvgzvIM)Jz#3XDQ!F$y2kL)ExeT=K{QcQc7Sk{)6I0iHr^mIX!cWfvkkHsC|x zi3jc&=$1du;Zb0q$2%0d&p+X_MPJ;9EQt#K!#?&RB5)>jmIE<$A7p=m7o`vRbN|Ea zUeICL2QCFF^(6Zha2+DXpNO`Tb}O3L8E`2)PX%*)xEIf$;ImxN_aP$iA>cmvb~;_b zo4^o2=XpWW3*eoh;6@DBx%Md3Sq$?ii0&I5Yd*M5_yD|it`x!Q?fxzDgu0pGz}nefe(b}Lw`-}yXzr=lO6 z3h?-m-3qu75qJ>b@l%WkoC(9@7YR>-Y5dB*1zd=K@PJ$Kn^wW^J`cDP+NtOV_X0fr zV($X}LEpXVSEVaqJo_WRwMib?Jf8`jQLMj#-lLP@d-Scg!2H;Vj?D!lPnOO zWSO?aD4fi5e&3%cfj^Pbu-FOnl9pVH?3$Fq{W?}kNah`_~w^49Q7JX{N22C}b(^zbz9x8P;u2HCq|wySh`^@+^-aE$fwtMqZ3906KE@XC*=oT; z!l@7nE(N>{?N!9u29?teMzks5X9VD5#5IMh;AvR!G_-c%Ucl#g1f1b(!1dT|#Vr%M za67^~v{v_W88{ewEI1x;GUC?LTzDB?$A_cwINYAza5Oaaee7@0K2YC}1gQ>KwBMow zxIU<_4_S23qC>boY{4O+!l;1fI42wj>DMiK-BNE@;c+`H^`;dLs<(7E zKVho$wncAR^fp9%$0WRK(OVY1i-h+qddDJszhTh{znh7VMPP zUb6bYBK$jrta_;;S$)VwKg2cWioCl15nq1<5kI!*V@rKvPl zEc!N1yHMtL7JU~}=J(9?dvL|$-FPzv>IbCh`Q(q#o~3@W=tqlw0`s4(@LJtff3d{oNvz|IMP`<2x`Olz(Vqe_Hg1MSp_WUtE*FylzsU{?<%k zb+O?lRDH4yolUW6 zqD@m!ZmLa_Y?^G-RJ*>q7uod`V46+S>=v?$nr`^auxYwYGmw9#O~^IVzDmtvLbGj} zWz%fjm}BcX%p6<05t`{-W;&0V&gZ-fY?^D+0_0t2(>$Bz+q4i&7umGPR*P*<#i->H zo0e$qOAYsBHZ8Sj84519X*uT&(PCTOXYQ`B={}oQ;OY}tYKsm3YO76KY}#t)scp<~yG`3{+73E9G(+@* z9d>lqv(u)Xy6D4pc#PU*)5A9HLeWRK=x&=Hv1vDo?y+ePHXT6eGUep&d=L~o6q}#nr44NXJ0ARizfR^Hoa)m zOUVARO}P1TEW2*)S6G9u+VqM|uOicHrZ%tntqoC++jJZ-qzv`CotvuOu<3Q1-mrVC zH@W0nHoa-nTPS(LrW1at0`)fc{&#G8+opGHZ}TeJBi@CKdbqu3(|cN{Cv8IFNk6CW zQoL`otvO}W`!<~dj}P?qhcdWMUBYttE< zzD3dRZ2AsN{U-aK`}YqveQ(nbew9q?{K$8Hvgt>ge)8|c#{bVY{j7!k#pn2|O~2Um zE42L^bNt<=-)#CF9RDy?{ll+nf%?-|>R&efrK$W4(`av0XKlj0v;Sa+dAaME-1iyhGz1Zu1F_r?!a>O>k(U(_2k)AjxEhCOI_OiKr=#wtrI`ZyBXPO$EYD zH}Aa;-K(igb7-2gQB8LU_on;IqWxh8OES};84k_#Z<^_JftuwLo9)nShZnNuI5fv` zm+42%Tt`0+<~cOip?Q#IzC$Q6--(+|;qkV>(Gy#T7C5xfahL0|i%i+Y4lQzMG0H9h zD_Y`YSy;6|1u*89IZ+~kQ_pf+oAsMZ#Tw&-eYr%I(~g zVWD<7w8K$5omdBb*rA6}u)W&l&@R6X9x=l0cIXj@c7x0whxTx}5bbo-UUTxE2lL^$CZb0EbR$pDDNBp?wbRN4WzIA=iP*Kli?i7SJCb;hAHXy=ydTW0>9L*F{|os+M= zXXZaR^u0qrfccNi{70WTs`-;xZw~$H&~K>B?@aFx zhkkeH577IQ>HX=`gC+XQp}%6X|IM=hZDhAhOC!%&CRq`nv#`y9d^IirlH&t3E1)+~fcuWm1492iz4}#3=#Ln;M`g0h$`>8!<>m24%IpBmh8S(t9OgC`yOmg8 zfb{d2+x!5{!$u{zEnsd7d~T3_VSpB*T$)-GK(AdKphei5M8+jB#ewKb$x>ZMG{Z9N zQffBKbqb8$eF4HkX^)YESU|~Vaypd&oAV3=f^Z@cbh*euJ7esw1Ko22Td$oz> z*&Luv0on|WY+-q}V)ZsaTTy5m6WGuY(VHp+JrPI=y%GpCz`kNbe5%Fv7D=5Cb=*;6S%G&JQ}G8* zrCyIo1p+=1+lc`RmH@n+sFK150dz;jLO{hQF>cb`rF$>@Y)Xc^jazyzF;7*4@EWTf zQLdhQxZIeG)&}MnE8?C#1?)H+Fo5k6>>l#sy+$4PsI-3wWu>7w_hJ_th&7Z!X9IK$ z!23j&0F(igW_)&x@&%yWfU(CKp{=loxJ4;s#5N)+ZvpB;6uQvhh|jZ`2)@`(^!R4L zKW~EKmona%E{*bS3KC6Yd>z#cRnO!V9SxR@U{|pjV8^kw8;5a|8CEK`7+bkpwfm07AaVy^;v76vIzr-3l*5~j zvB!x681iN2VS?M8QGw2W1zN~@W*5>?U8sxqcnDK?qsnDb9MzS&dhm=Z*phYAZI*}q z$h-))9=QR#Q!aIn08p6^^fADf-rD0;U~^TLS!Z#8tLzbbnhAeTGF^A=bZkcwb|ZnT zECD+C+Q!gPg`lfbLd&e6zx5u()_Jnutr;C*lSTFr^lpbi^ojU`?u;weABG4|loPyp zvIf%kI|oP)-Bp3^bO{~DK`PlRp?h_|O1+v~lh?t%c!d+)80YP9X=niV%hQrt9u1BC z?WgLXwR9jy1R)1?wId7!JrZ@eK?MESq4XS)f)Rqoxd1nGCyro4+@XfJ5h5p3q$t82 zg-)&X#&}9-xh2zmef-Z+E{WmK|9=E(KoG>YFnqv|#z<5qWCP&_`6@olMGtm_y7&9B*0=U{9`!ub_-zAzwJXJ=<%X-6FqV$e3nQulW;zmsaRi!K zDxQSeG_rBlDYcPDBP=?~+9o9$#?n!ynv`f5OO};pQqptLsW>KsBTO`%21wChi)=f? zq!1|UuEp4Hou?5}E`;5Lt!!&j8YAT*YD^bpSvssHSzU~jO8^_cB+Ke#@?;=I128(u zE+*yDa7D#iGe?_9jV$X5liCatWWq{jX4^XahVd92umLnimetebX^9jauF+BUHYu%< z(uP`dght<#(2I`DJ%6iuy}*udT^>RK#ZOp`o{6ZS?zcg&-=b|PF~b6Y1}pnj_)!!h&Qizi?#Fu)_A0|VNlQ7?+G zQ(UXI_cCTs26Jix?On=`!iZ|BIW>)PLc9QT$_!V;Jq26DD%Fx&W>|eyE3{y1!1`O~ zBU(V3Xn}}o2Mf_IN(zrT&YErNt-}TSa=3s8e9Hlej+E0)bwa65uq)Yk)aCpciiXDF zNyp^@urX0@hE6nmfTJm3Gs3VLCjQ3smXy$VDWi{<|Jj`We-9coe3K~2J*1yzx^b&e z6(beP0PRw!M4@Z>GOUm?#qZOMFq9-n4pA0aCI=f;L@|0ncMcwaa8uYS{ciz`xSfQY zNuDjo))7MRAcwZRq%T9bAJRq@m&t&Lx#;N@RV_h4Of|!rl2bxQ+7GD%W6Gd74iMsi zpd@_Q$X3UP@Nw|ra6&`V>m92@A`_%z0cuj}K(G&oSmf9mr!htx5x zYWQ$@1HdzX6Oh->&wmqfze-$rro;JJ2A0#pHOtOv{MSOjQZ(o&7>1vrgBFKCWl3Je zlh}?dkT43EU(DgZm@i{L)i#DAM@;85C)=*T3KbePi9$JIEdC^9S)-x+Wc*Cd5ltyc zZ?jfKk`58gS1A|+8fq88(;$he=ZH%wDHHTCNp7HOhMRl%x*AjqQF$CJO110b5s*Z6 z*yI{|(Puz@rAY-3P>hgt9#u88>sQaa%o&`_C4GLUzww`v4&w9SvG#wgm@ zD>_`ACB zAPeh>8Xu&mo9>z@DNKpoHM(9sxxOfT9RZ?;>4c|sr1XM#8mos?Un>CZdF5{K$|3xS zZs19WQQM6OLNbK=dKqp)z)@eGgP08csGpbNWLi2YDH8LrBsfp3ImGfbn@5 z2Gd}~CzWhbL%f_o@6iyR&iLfr99 zF1iqqh1ePJkcE89Q}j+wf0!eb5SYYsdn4j5P6ncI7vl%*ps^ORH9&>>#uFT=L{H!b@PoLw4-iR!36Z6(I$*LK~Yh)&n!+E9e*I{eMujnTr4cqRml zFp2Q{E9u^^A6nmOBIu?758~foj!)BUMK*l7S57{V$L~wApBNmYcr9Ler1aP{9fdu|>vuV9;4Qqs>-oN3w4OlVjp0nYr2HX12DLRVS^Dw8=?HN zSWTC6&{3?WzzHS+9q0`Uo_VnmSYe^vR+?%869@p|Dv(-j64r2d65xT@S+!_2hacqw z8wjTB7$68>AXf32>3Uyi=ywCy=)tuSKbXSXE%;bDTU<8Oj z6R!mLAOiw7S?+q>Nw%@@+c0l$%w-z`FNm@L2Ld;^1Df2)R37H|Bf$P5fCECPT}CMG z66X&;igt;;3Zle7Z7^fItTtG$25N z3=KR8q}Cx6&`<5d7LEou!l*zxVwI>Tb^7Qy3?N8*7(g&P%0NQE1c3~6H)st!!%Tqt z103*KRPh*B@tD`xje!IN4$$+Lb>DcNv-?oM2%vz-{$i|eyu@h0Se1bfOaeAAZWJ{3 zz=7kKxmV{`ndWPZ5CkX?_-m$l+;4jH{nz$!2Ow~0tQgS0QDnOH{MqkkbwNW z`kEQ|7{ENn0K$NJ@IM$(7WCU#zx$4F1NR3Y;P+ts1K<83)(F7*{TSB>K>sBH{1?{< z(CN<%_+wK9ARw>R`!K)=V*p`_00PtqK!8`6`X9cQP!s^bKef<*u_^l70t67KKF<`L zWm8lE1PhSY!2FD}At_LQ<7}Y*upMfH)&vcM(L;5j4O0ZbUo`;!80)7&e#Yt=qdSGm zPh}7wpnr%<;qvz~>IcQqU>X4!>ux~*B>@5$XNt6zfeSPZFq1KX+K3`0Q;Y>LPzP1b zG3YDc{^l_H5AiC@7RWyU2j}Awm_X0~7;qLN1Kp?ez*)%576Sa$EG!rvi0ehD@nS9t zY~W&s2LgS~5-;^@4DA6XxJ=8i+(xZbmT|YI-aU*M1X?f;KtU9Jl+l8K17gm}vOMN1 z3c_f#Aj<%xpin+eFdsNUlmjYoKLZ1StY$=Dbl!J})qB_ur!gGxkWGheKmy~{`y`hJ z`VZ*9r%?K7=K6F@y&4c0Q|~h@`ZGqo2)IGtYo?y{l>|5-{ymF|VHMSMOMnEQ)7Z7= zeIyy6f4~dAU|+|;K!n1_!2@k8|PI84(B=AcEr= z3TVa-H1#Hf0eM^MEx#Z@fj|hJKtTWkWfTwy3(9~$y=ZF$_K<*W)k)pZSeNp#fBe|` zfD3=9VSpck>qm?RWDMX(fYAc}2NI(J{tGu^xL*Ag3BdfcP5Mfs z{k{T?uT28*d|xuE4^i%nKLjoipg%zTfG4C+Y}Wvq&oI?9&~G}kN(b-{6oL5z0Ps7E zGr;|TA@SgTz>siL{^)lFsO2XuVY>Pme_O~#>KDV>$M(TKGOTY4qx;Mg`wv}UG$4H- z3^*UI|AK^nGiVS9K>z>&>;tIJeOjB1vz)EM0mKhjz6cG1Io)IY%7|#a) zA10Z6ccQ*)CYcQ6i*>Zg4yrmCD~x)jjgS4B!YNZ6tSaix1rs@yVSL{H@V!hO@IFBO zrh)o&ras-HK3W0TmkMAXv^C2^_W_+3KMH1ZaRB;eGo~-1=5q15G2wvgn-?eCd=_QC z5sr-vPnZDh1Bk>!_C?eprm!eR0qDNPJ_S#^OSlA(eSrHd1_F?Mj&}zRNp73iRT@$R#0^0`$_cP89xIUo!+y`_stpg*l zTIUIe66+oI(l>CeHULAlk+FRY?bH4FK_@qjv3%Hwxg z!e%EAus-nJ%Gf>t`T#6pP#+I5_;lO3$abSSV?WT2I~*)!?qrZ3fO_tOTF8er!cPES z0({q^6%g+chWY{8m#=oSrgq14yNAmI)d#%aUdMfi%h&V!2=IQ7I^N0*5PwMk{OOgo zOwklzKgbE7AK-jXK+b(eFZ+B|LNcKK_B-w-EfH{k2OM?Ki7iYWVyvG>`!M7D)DedI zZDFY2lbkgK#GeA1FA0!7KE4bcrKx(FxgKS>A5eY~^^D>AOdMC>`kwW<0_Jzj0mLuH z6-dA5eXcJ!^n#;+;d>EWUt)A0vW9>JR6zJ)dJ3*M15A%EVEq8}GvQ#s_hDA*;rlQv zWqls^^f_7q)dzSr50*DQXdgg*{$SCx0O)(m>&$3VApGFl|D#QT?|a+J!UDkh0Pgn= zU)F8eX!!wNFW2D8m%+N>h^*R^9r}2CKI>1ki*5gvZ?}1&S0(=iYe*wE+nVpZ^ zivYO?(4PN98Vw8|9^ij6iVyfb{4)&!wFAMI1Pou?+&4`D$7i$x$R7SNq7SRcT)T>Z zcW0ai@Kpr#sxb>P-oG;;05~6@eOM*-l{=9!eEcAt6wm+XYLRdUpUmpcXAMCIP z>BA(JF<oAY4Rjy&VW$Uha16kFfcj0>kUqVYfEobOmjp;(+*}PE0f;_b6gWQo zoE>nF>d^-@9~MOOE|1!+heOv6|$8v3Fp&KIp20Td;Ps!|Q?u;JtjZ-!9|RBG|=2DrE?ioVEGX;8mDJv5@~dBe9J zp6pZxO%GW%|w^u8N7b@n)=^5&bjq}zqMY*b-T3wM;&43}K4RyEaCS1WcF#uk-F zxs>N^_2rvP-PxPH5_P*u=k7t>sYgT=0Fze0XJWeBv<|KY{i_))2H_HM7^VQ+42SsT zpZ5^IgiO&;T@M}UGyEdz21tHGR7ZUbjT^C}cB8vpQ}2rmeT@zi6?W3x9Xh!mNW>1q z@CYRG0e&9tLaP*eX=cU;p$Z{pA?u&lK(u0SrCVc}6IBs16k#lw+o_5-*38PZ&OHFP z2cWzz+)NF`&?-h!aS0Cm8{`eGfhnOEk}l*Sn5_59{e5-bd*|QgZ;E&Dr@zn7d+2;W z{%@K;gahEC;Wa}rLW3Tkpc%qJ-aT(jK|Zk)$RxAPo+IiY1%}z>BWxOD2nU$M?dU}yrgqR+a`!-$TZv8*4R8hnQGF2;8?Aa59WrqO2R@qp`^D54KrjsQ{>q*~t5 zuPBp&ef8S>C^DzqrWmB&bpV~lPPx@gaMG<{A(MgEOZR3$7jQxbMmWYe9uzzrgPEdE zrLm4Kp`t|_%3t#wa=rlvgLH`Ejl zF^_*Hg!i$iDA>Z3%fOa~$H~@V3fzbpkUj>d5^0zL?q2;2>6__h zPo@9D={W!DrT&eoVGo^diKs#?aG~E=81dXEicCQs;HE7GP!SF2g)z-X-wdSU2#;yM z5O&MCg>N^7utn|_Dxuq{q?a0kLi*^=h{EH(yU0HWEllS-cH7}&w;S@v z*JJ>f;(1m|xCVed4!I=&_Eg7AgTvfwLb<6t6VWhNJ!t9x(^CiMW$BB$n0(a5i~=)| z8k7d8J5CPvW+L@LtG>oK^J6O=gfyZvPc?vUG?X)B|&d#a@fS-FV+8rEVT&P(D7#@c*W3^3$jnS-HXjUy5%M)RY`xfAL zngiZ$rX6ii3W!ZM;M&UM{o{0C(q{uhd#S2De60@1mjgS4^R%PpJN_6gP`k{?0Kq!r zsxt#^Q9N1CB@8m6OL#1%66QE9Ocgr!@TO_#z`50646G13AsBT<`K~DMwO=YgK50O> z3s@V#d@#kB$VS3Y$GO|lUfmtMufz=F$_Px4Ls!L=lB{~+1O# zPT(4AP7N+mH)Gje19oE72j82k*-(HT3Xiie1##%#9i;>ORu~5{-Ga+o_!7#QU||;G zP$6HM-kpjwy3$k;Bqwm8SF?gr9Y3~2fe>^13Jz8W9+KH$!Chu4r!!?GdExO}XNFa4QQ6%gW zWPxphof?n5>j?-B07?e}X&iq;pmcD55<_(W&EaE)VWOsRrYW##K;}&KZQ5kmw9|n= zJ=imbS2pu)+W+w;0rr%1Ob>C4`o*wmyz!%r8s2Nc+m8Or1kjZFF!X#NK5_mz9|{-& zHWB9m<_MfZo+;|Xk~P4rs<|?FW>_X11*j)iHS1$W6`)jJe}(DHz{E-ys2#4S>c9mv zK2mLC(dw{0s}G=leV#pSRu_O>1K2lyPk>p6YY18NTLQYna!L3_#%^hwb|H5L@F3OL zu+lJeb9y#N-^DI$!0zV3V&$WqPw|f;F0`Eut0%#{hbrek=@AfcnH5ArU6(Msw4M zrjIz+9tnyzgOzFtD;1!Auu^n$W6-P+bW=)bn-gFJZzp`Bs9b*LTO`l(2A5{x4294P z!ZIyK-)Yw)3&*Y!db_P-*f1s2ojuzYuw6Q&r38H*OBI~r!lke&xrAZ;CWYSsU{f`I z13-#S!IjQB7SD5=T)q6j6~JS?g|wn;2zdVp))2x;CSqe077MU4#z7nA^@ z`*k%81B9^+!AQ{W7tw(m&G10KfC)Cx&FVkWv3!70L28t0gsGN~%|%P;5ikT@-{!8b z<3pM$oQ26GGBgPth7m#MZwM5wc}oT|H^YONf$7b71hkL>aTjbHqUT_S%+kOpEDbb_ zE)Ad@cYae2FU8<;H~}kAgFBx$*fUh(fce6Gvoeet_k3xz4)W<>>3& z=~0s~Kc>sk-#f?pyG>W18Q~;ycYlQY24J==0kgF!zXbFC?p}wcQZoKvPsv*#2!@4mRP$64Wc33>Fg_3( zqSs2&U^)|x>142c0w1Lc{A~g+Gp4ZXo`#O&HnCfx$KWLr{m^5i3G_jK(bg^1qm+nw zVGVQ~?l+kEQ5`eXaLp2?dGUInm<;DM5z|ET3KmVHzAp@{YlhVYokzpYt?E^RcW{8LigIn0+mW)1?80%A47!|>UVs||c zJo9;ihdG@uLwCr~JzfS_Q?C3~Mh3vO;afrm{UVieSk9}wXhp7kPZaJMYoas;XmjCS zrttN2{YKRrg>RtVbVE6;WiRSe!Zwl{qAv>fMPXg{bl66MZA>`FHooo19;{AQq;eyIXZuG387EV+1=&ou|FmrO~1D|FLjN^*lQ5 zReg7lmO=MlcsJ-L4X8e^tC;o);o*wcolrv@y2aB`FmH=qjqs*a%om^wJz?msE`+H5 zIx70YMIM8;2wy-ZFIX+rE3bQZD!d-pWF6Op*PpPh*4=xE%7i(OzWzir)KN@0DcJAc zC8`Z9pZ03X5whEY+LfSd>#SHH<&oN+vZ#Ft&kOWQ2^K>;bd*|CZDA(y(vw6ijfT*n zu{2ta4z0^#sf4>l7tr>tBkW~v2|BaBj|lUYojXpkpoH%;il+sVy z8vlIK?srWuQO`Z z&xV~M)k0!nUO%V&C$1rIkxq*qJl&WsiC}piov@58BsJmiPAvosB@5A1=Z`wi5CSf< zPV=9)lu0e~WBn=KTyo~Nh8!Nb)D|%r&`=imWI>@=LD6;+-HcV*9zLgj08dakP^n&v z>-9e^x~H?F+(LFi2jgeB?qU%b%P}!yscGZkn<=WmR$_0$pJze@y~fT<>eRhHR@|K8B}m>V81$X}z$>-F^r8^{(iL0zZQdLeqHR|MfIJ?Z*<*hOjVVnp@9 znC+umo-^NQst@0mZtN(#Alpsgb5peXE)JS@qbutu`Y*rFU}>Gza!YO^oLIaaXM(yF zYAIs3wU_D-LjD_Z%=>V3qapN!kDM7~6pMv49>2HKAi6ytj;b_{sy;KChD19jVoo^Q zFe51fO=uVbA&|Qil42FjYp8U%uOoPUDFSz+4ACcLd1@qb`3FX8t2zo)F?+fLCGYUO zZY|iIbSIx8Ia;eu9~>RQ3vtF-CbT3^-2+0tcglpIh%rVH=~y=#%VjGJMjRe#1^cD^ z7995XC$NVK-!$)BpA;b@J`MP$QxMS58@{O);a5f%mo=9M30p zl@>Dk8;0Bc+#dRET%%cBPlq07k-L zAzIi>g_w{8#Dv5PyILY5goRzhhcvI1w1(qB^3-|bLBM-`l=lV`57PU*@gO*m#0v+> zLpTVkvDrIOI)XRS&=w<5Dh`r{KwB#bv`x}Bjhx@kVISVfTRS-44&za7 zAn{lMyEqC2K_6G~(b71b#5+|Qr;`{J?_m|2p1hZ%Js3fWu#ZRaLvYlG-i$j>)CXuG z;6tAtJp>^i90YOzOBn|x9hAJgc?kVRa=^zSJ~BGOp&l)wM@HwVr&yS$`8_oBH0~bd zC=PDxRF3XQKzxU3hj0~+^GHCX2d=T`&g<^lP9f~$7!D8?i2BHNqER0caB?)pJfb^Z z;24iy3h^HL%`-1?utx+@9%!XkOpSRF=vC9X5v}p6e>}7y|2l_t@Jjd_x*Gn8&=G}@ zj^iBIaTSh*2I;rGI1ZdyYSj5ojQG2TxPK^ggu^*b@~O}~m(i6tCFzvr@`2{^p`;J^ zAZWnqIEDi`L-amQ)nf&GtQBC|=@X9S;D_6%hQntZ*nyA^U_5ktIf&%YT>%jri0Swe zH@=dDdtV_M1o0ezcIfa86U_mQd=nG;3@B(|osQ->1Flt&|2r1pJISWa-2R?}I{0aY z1EKkO@*{_Ict=8qEB>}Cy;cVH?N<)zpkHMfM{y(|j)NyeU<52Ohh6)T95|+lTj)=3 z9HsFw(0}P>{#)isbyngaXgVt=AeaNqJkFvDj^ya2##<0FK74~FYD_aauZ7?Za6rfg zf;c8yCIesKQ;rH3?1Sz&nn{pjRc&@j9PjMTfk>Hv%(gdLW{iU3_jDD#~2R8XEFW2jBXc2t#;J_RspJDD$9Z1u}y1!!{vo~_N&gViWWQ(?iChyT@}!ep8(J`>`2*^ zfR!WW#Rnw?`LUSD8DjtImj*+vdfh3Hy{xK|pVr#d%2SB;uWIqbw<=t(syH`^s#Udl zwLJybDS5nFP}NBegzzsn8I`m7jjaMefZSAUYuo(hNxU67gl){4xWZc}1)S#GbS%c& zl*(6tjWsesAn9Nwd2YQ4Ms}8{na! zX&_#lcO=PNDN^C*!iOaN3(UnhzK_xJuSI3CHZCapx1-n^9*f!I}Ri}R%j*A;Gc;nomt&DhO0wx}uGRN>YVZf#**7JWJW zsPaMWgZ zKsc9Is@s5}rNfJb)5W~K-QzWQ_~3E@5U76XxtBI*Fy75R_-^FQt(13ASuxVO8f8Xh zy;C?>RLaJ0p%-og;WiX530DcXk#H{*Ze!tIB;1RI)h#`q+laE#0mUOn7UG@s&<9@r z?p`9Cy!!l(caKM04o@i=!fhhlONHB1SosakNA1qR!Ey9+&04LUP!Z=qqjH_9BX&HArP8nWWHq6udHR*9#2HajeU`XMB z(%~Zqk1Q`9KHx6lTzf&>eHLkG(a7?`VWk5Lhq1tc#fVB1iPf5yl@2T_FKX^}Wa(B; zXx>Vklhpd$q&DX!wLLef-ML9w=O$$fDW=baa8=5Rhn5a#-u2omx;ejE!8$V7Op51V zApVxNSYSEge#;K-v1IT#K3`Z;{ADGGgLW|ZlOuzx12XtXK#E1dpg0*!5~~t};y_ZB z;Nw+f@Wqe}ejJiwesZ$-EV-)KUA3BcKP5$ch5`I&^{Qf04OhHcBj|iwv$_yJ*Q_CC zq}CLVq^62f`23z)ODw2WOYE#wQ@o7NH~7q`UDH`!yS5NJYu6CZ*RCc0s$Ekou2aj| zSf`E<`|H#YZ`G+KPNt=bkL#w26ZL9|7wgv&^Damg4>d>?`x>N)DGh^SNyED0NW*&K z&4%^G7Y)H;AiRt>~As-c+KC|$g8VR~?1V;OwxA{l)7A}QuxOkyuS zUo=r-LsKO_YT8IVnt7p^(8?93TLs10R*l4&HZ{efwl&4`SvAG>?3!Xh`TLamDjtC_UWBS(J-Wx+*tAh$Fc*#PY7G zVpX?P@g_d&^HRm>{8X{%%2e?bK6|dJB|gAsR{?Z`&%Uc`iMR1NdQC0yF+S6-Z6Y4J zHdQ=*?WJO8&r8MJ>r%z6UQNXFy;8-*>r=%O_99O#oSe(O_LOurG=H`Wz1`Zg6u`!*8WZfYjJys43x)vu9Qb#pUu_Fqkd zfB#zs7u_O*n{JWf^etD5GlfC1;Z|3Cc56^9D!N!~DasR%7S$5(6x9%46{U%#{e$9x z{&mIk{p*Vl`_~h52Q(HB4yYS^b$|?>#^J{Tdz>PQQ*En)|cM9}2;d=io3`$&S= zQ`S6qs!Rrtl*{0Waw#_5(MEiCM^GHRv#pppx}CFPG+JQ&Xtcohql04EU3JA{cQqHE z+?6F(+?^%%5{wGwxKTFIGL;cNG5 zdAT^d8bZFaMs^X)*J4><+gh0|POpWtJpF$B`sjZA8n+I=_O1hg@7ICA#Puk$M7}jaS&MW zI2i52SMcx0L4MH__}YXo@$Nnd{`!7oS#ki}P8`6m83$#Sc;_H~eR&YYmK=igFCW6? z`-gBj1@F}rza7Tq)FZe&eFVS$JbrxS@|4}r+FGu0jzWWSX z;mothci{5aq=a3ZSaSeaJlkjd_9aW@zyIS@z`tl z+J9UIgC}3djnn)!;SJn9^oHyuo_bSWFHXLRyN|t%8}ISg_xKXqKb9AYiJ!_Q!S}x5 zV*IuDTYSCs17G4xZ23`M6a4N+{Q8yWxJj5}3>-C}xNM|M_NE)f12g;IB?AM777f3x zZ|hdgTQ+Zb+u(A_xV^l5#K@c$_=xJ4r?)V=pE)O6Gcmk2b5FW?Cf^MSpz$? z?9icYR`$R_9ol5IDQ;ENX28I99on@VFrdxA)`JEXw`|u$EZ}E#N_kNkKgS0Z7nP4H zD;}BHG}M38&>@+_iiee!-PJTD?jo~vM0wNN1B!+Y%^WK&GfVF%F2mgJwx(5v zjT%}$_>Q8Xql%lR3>#Hm)PHDk=50eu`xgxz*|g^H(&6Q0n2=zeojGVkdFkNcA3NoNLv;3|R#Uq<0jvRd3@XX@T<^K<)+vCju literal 0 HcmV?d00001 diff --git a/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_dirent.c.o.d b/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_dirent.c.o.d new file mode 100644 index 0000000..528fe67 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_dirent.c.o.d @@ -0,0 +1,59 @@ +lib/CMakeFiles/zip.dir/zip_dirent.c.o: \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_dirent.c \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdio.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/wasi/api.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stddef.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stddef.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_header_macro.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_ptrdiff_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_size_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_wchar_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_null.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_max_align_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_offsetof.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stdint.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdint.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/alltypes.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/stdint.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/features.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/stdlib.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdlib.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/alloca.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/string.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/string.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/strings.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/sys/types.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/endian.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/sys/select.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/time.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/time.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/zlib-1.3.1/install/include/zlib.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/zlib-1.3.1/install/include/zconf.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/limits.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/limits.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/limits.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/stdarg.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stdarg.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdarg.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stdarg_header_macro.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stdarg___gnuc_va_list.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stdarg_va_list.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stdarg_va_arg.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stdarg___va_copy.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stdarg_va_copy.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/unistd.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/posix.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zipint.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/config.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/zipconf.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/inttypes.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/inttypes.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/compat.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stdbool.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdbool.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/errno.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/errno.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/sys/stat.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/sys/stat.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/stat.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip.h diff --git a/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_discard.c.o b/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_discard.c.o new file mode 100644 index 0000000000000000000000000000000000000000..900f8d3e05c0c457ac94fefd6e4be2784f1ad516 GIT binary patch literal 1479 zcmY*Z%~RV(6n|P-*w_XykdTCs1R4U_nLD~$)$&$dh0Edzo7jKa%yKf(;U09nA(}KtbM=z?R&p{Pw#>5H6#F#emXrp z1@fiT2JuL3^66_~CuD9Pr79K6w7Kq98oc4S#{}RE_I%wqs5BkZ_PHy!r2wWc%x1-N zTCTw>hUIu1I&i87uDP6tJ|f*Et#lZ^Yufcn7ar`ud%CyR1CDe+Zu{$qtAzLV+YvR!NdY%D@zipt8>T z$`XrWA4U&ZjFdx4agyS0WYXzl3m1$ zz33&pq>^nmhGX=*F84BCR!NDC3&B@#9ItG!t3vQKyo%Qj84AHD1TO<)A|Gr)22zqs zC{N44u7|-UaAI1{vPry-lRNB&ID8Xt;LSreg;Q$-Qb>3^;F@SaLG+5J$(1AOp?mCA&b zv4mxxE#rM$-e)Vg5>#mwSLqL3$!kLLIu<4BiK4;x4xwBeSx#x+c@;loVZ( z;H^a9cS(jnqzL>iDe#IY@S60&uW}SV$`SY&iNR|n0>3Ez@Ii^gpGqY9mmaYn57TDuv;Y0OyGQTV5c zqx;i^ciELbX=R6>@x5&l%NxF`qSzTy?Hi<=Ol+{2UC$l&`yW?pJDD z_gi9;#L|h~mUWJ9J`*5H(Hi&iV@Y~=~ScT z>$?`$>Xx&sTV8s^cEoton@y2=t=9B|8JkYIyvAK_8(i~`o7_vsJhN_V{44)I89TlP946;gr_ zZ@?4q47>pk(%0a~Zrwupel}5jUFgO;(jcX{en8w)k0gC#tMf{D!FlvYctw)sG(za#4fQ*}4WW_`7Xl z^n&|uHfV8hcxliPMfiFg5sE3(ScDJ+(rQnI?-@g;NkzfKJ9jmObeIxQt~L>H^ifT>ZQc(n)!wd zs80te@jDV2GNb_=UZGJqM1SnVJmcj?sDk*vZQ4UFIeBo#*i!GawNOloJ0N3(?1#+^ z!YAiK35|Z)n?Vh-S5sbYPo>;-zrdm>d^uY# zFVf3=y_~0WIAe33FP4iL=kxr0ox^PL8vV304K=F^Farms+Zq}_9p+iJFwkQB09G1q^^& YjKdn%V3v(TqW2XvvEPV7CGbW613iq%;Q#;t literal 0 HcmV?d00001 diff --git a/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_entry.c.o.d b/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_entry.c.o.d new file mode 100644 index 0000000..20ae08c --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_entry.c.o.d @@ -0,0 +1,41 @@ +lib/CMakeFiles/zip.dir/zip_entry.c.o: \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_entry.c \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zipint.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/config.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/zipconf.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/inttypes.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/inttypes.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/features.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stdint.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdint.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/alltypes.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/stdint.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/compat.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stdbool.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdbool.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/errno.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/errno.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/wasi/api.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stddef.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stddef.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_header_macro.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_ptrdiff_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_size_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_rsize_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_wchar_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_null.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_max_align_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_offsetof.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/sys/stat.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/sys/stat.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/stat.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdio.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/sys/types.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/endian.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/sys/select.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/time.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/time.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/string.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/string.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/strings.h diff --git a/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_err_str.c.o b/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_err_str.c.o new file mode 100644 index 0000000000000000000000000000000000000000..e38d4d8b3308fe4c0423cb5ac24f7f896076fdca GIT binary patch literal 5668 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 literal 0 HcmV?d00001 diff --git a/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_error.c.o.d b/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_error.c.o.d new file mode 100644 index 0000000..52d4a9c --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_error.c.o.d @@ -0,0 +1,44 @@ +lib/CMakeFiles/zip.dir/zip_error.c.o: \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_error.c \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/stdlib.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdlib.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/features.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/alltypes.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/alloca.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zipint.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/config.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/zipconf.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/inttypes.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/inttypes.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stdint.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdint.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/stdint.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/compat.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stdbool.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdbool.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/errno.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/errno.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/wasi/api.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stddef.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stddef.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_header_macro.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_ptrdiff_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_size_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_rsize_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_wchar_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_null.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_max_align_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_offsetof.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/sys/stat.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/sys/stat.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/stat.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdio.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/sys/types.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/endian.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/sys/select.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/time.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/time.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/string.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/string.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/strings.h diff --git a/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_error_clear.c.o b/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_error_clear.c.o new file mode 100644 index 0000000000000000000000000000000000000000..0af21859bfc1319ebc4b3d818088150e611046b0 GIT binary patch literal 595 zcmZ8e&5qMB5VoDRNt;%wgtQkfw&1WRO1Hb+wkoHsV7YST7F=hVP3y$LaVpATTab7I zF7O7t2+zb3r{#cI+4sHi_cTZ)Mz7w! zzIR$~2fI%(0^;s5`rWv@rB+ETKv%eLp@6D_BwFopTS#7{?{2O~_)(vEeoVfn%rd4I&tJU6@^8L#F8Z+ zz#s4lY*@45XINslg9Ixi%hx`>_Z<89qPQtBLI{6491e)w7+u$)8{FZJeAkF!K(+It zh!qvYA}XQeVowmdgBuwq+oTG;mC{_uCVoJ8Yp|p=;hNd?ay+xJQ#8xHYc-kf)8a!0X1eylYaJ|P?!s04_eR(mN zPNsPw>G)R4x_Nf4*0=3?lJN4JvE6A3Rp|y2Nw1d6IV{rEbhWx#EYoZ?Tg>1ho+asg zHJ>KQEWON9n9iS~&-z0>84G>w3}V>|Xxw11ZrL_GbxYv=wF!AGgGWisSXfkPA(UFk zcOV$A@}OU~OcuMCwGen^E8{hTFlT%nvnF_0@k)xgu9d-IR!iM;fhQmX0aXH_+}F?q LZd2q{2yf+Y6CTCN literal 0 HcmV?d00001 diff --git a/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_error_get.c.o.d b/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_error_get.c.o.d new file mode 100644 index 0000000..5a8a0fc --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_error_get.c.o.d @@ -0,0 +1,41 @@ +lib/CMakeFiles/zip.dir/zip_error_get.c.o: \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_error_get.c \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zipint.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/config.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/zipconf.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/inttypes.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/inttypes.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/features.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stdint.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdint.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/alltypes.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/stdint.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/compat.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stdbool.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdbool.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/errno.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/errno.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/wasi/api.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stddef.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stddef.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_header_macro.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_ptrdiff_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_size_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_rsize_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_wchar_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_null.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_max_align_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_offsetof.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/sys/stat.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/sys/stat.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/stat.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdio.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/sys/types.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/endian.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/sys/select.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/time.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/time.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/string.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/string.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/strings.h diff --git a/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_error_get_sys_type.c.o b/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_error_get_sys_type.c.o new file mode 100644 index 0000000000000000000000000000000000000000..ab052d973dcb295a47c452d6c62f152723e0e8f4 GIT binary patch literal 675 zcmYjPPjA{V6t^8H0YXEe;l_imtA++ zr`QLWw8Or^zRiwvN)MGK>;3ute$Vecqfo6eLI{7|@An9Q#5=qrKTDffkZ#-{5J?K5 z4A!vDk^7Z!yrZaMQqCqwh|L(Ue2y=ABLv`-K_GmJCCc)&ZXM|*A) z{Vm^JGo7!JG$!_+(yf>&^*$we08(Z$h(QNxs{*~vfwU2BcY?=cptKBlR-_uYou@(c zqtt0g5E&o5diVO;vT8MKy(g&h4OLXGD(o1OgHjOri!H8l5vK8n%ZtHq zFpLvT`!`zW>czRSZ;Hi$XX|qzHiyeM)LY=1UQMTCm_)PTY<4x7M$6e~GJ=b6#G~7T`nUSj-R9N<=$K!%CfU1gu0NRY_GW}#L7Qx-*cZhewJ&m$3r3fB#jbjs`=Rl zq{!0PYpe^QlT9cJ@Z5Ew!-W7p7TF>c%Il_Cs%4nxX1M+`*X1AbTnS5%kaF9J5ND_aYG=y2ZXLX3+GQ$xbBqEnYAoNU#QX`QNnVEL}Br@OV#kI5wu7f+@4KCLQ;60kQxYD zuhgNBajeiGLRxoNNQ1jZNNa^&t#!)+6qufa8Wy6kS`*U8et!7iZ;?e|lEo-OaYhET zDeeyfrNRv_L5cD&W&bjiRco$-a+IQcmNYrE0wyXlvJ#ckN+}Q?B3Xqh(-AL6u#yp; zl2*AHV~oUR7&%>T&Vi$_IYwpV7TOeSF|Aba+zwj-*cRKFPBBNj5Zg1w7;KL*&0>(dW7&6XNQ=3X zJMd_Skk(#84q><45j!fT>aZ@yp&H|Cxs%6MgBtAABX`Em)tVuL92oRqx@9eDRn&Nl zR}ppWS=S>cV1hDE3=hhBOhkQ;YzS+z5e;bEcXYnwT!w}+U6AHx+$}>0Df~&8WG><~ zh1>aCcJoTVJKJ~PQ2ISM-^thmlc&om92>?I zgfnta=G@aQ{a)BBU;3#WIaQUu&@25kxAfC7UFq2ydwY6XT+SJoh8D~)Pg2snQt#tV z?aN#VPd$VKFxmlKK4 z&`E?vgp7(F<~*OlW_`hYNrxTA)HFn(rt+mL1^SD}@DxV~9_eswCDdL;^X~I*4r+N4v$Du_&L*VW+G($eC*q$RiOL&gi zo>y$o=h<523xpTE+*ss`gcmpLsh1S_OHP*VJvLRotk_;5yi9n7*o7KF-YFN)ZpfSl@$&gxVSYjQobUy!_^)G*$uHG9t|fd)Sj+49mGb(U@D<@}X8y*_<(qtM zWAa z<^Ku%`-h96?$lwz@Fx3yt{l=BbV%cU@2qY@F3{A=Z=o_T)OzG14U07I^|wGP4+K6` z)P?+%3RE1N>`kVQPQrPJVr)!^a7AELJUK6th{q7K>_|M3pX}$!ae-1RX=ex6wHae` zYzYN?V{__<`@08-Klcde%@E=pepCq`zo2{L$u7rH)6^(Pyr~LWoVED-MeSa*r%p41K0o=kAu(Cgmyj;RN;34dRPci^ zmT84T+^6}B#d?7d!@6IbY7~hThM})9cwU@U;1^dH6pJ<7t}7@K7ZnEd2Yn?%tnnH8 za=(Ij)n6*adcV)Or>IPb$BGSoNkG}343r6DK}op~H6QvpUsa*PR#sLBV|8VvFg{nk6;)M2JW}NoYpYD(B_l}uqH0={=92bD zt!$1;xEr-{IV%?I7@&e^B9iQCoj9SkuC}f#Zlk)}w$r)h@!aq3@2HKY`o<>`^W2Xh zhxS-e8x4~tHCmxqQ(aS2LugX0v#CB*Z%v5QM`MjmjdjszeQaW9%&Kb~Czh(xmfMkR zmu0tgS`oWHYvuekfsXz}Z_xcRSW~{qAec(qH6x?^T`w3<#^PCK3#R5-*+eSYRa4y8 zpRnV6p!%(v^1gmM(vh%&U5QjjB$2DBN~ZWYMbc?LBf-wJt-ey$lxM9@D{CdAR?r?u QTe%v4F5Z<4TF2Ob0(U@^qyPW_ literal 0 HcmV?d00001 diff --git a/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_error_strerror.c.o.d b/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_error_strerror.c.o.d new file mode 100644 index 0000000..8586172 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_error_strerror.c.o.d @@ -0,0 +1,59 @@ +lib/CMakeFiles/zip.dir/zip_error_strerror.c.o: \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_error_strerror.c \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdio.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/wasi/api.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stddef.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stddef.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_header_macro.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_ptrdiff_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_size_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_wchar_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_null.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_max_align_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_offsetof.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stdint.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdint.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/alltypes.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/stdint.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/features.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/stdlib.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdlib.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/alloca.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/string.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/string.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/strings.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/zlib-1.3.1/install/include/zlib.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/zlib-1.3.1/install/include/zconf.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/limits.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/limits.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/limits.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/sys/types.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/endian.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/sys/select.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/stdarg.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stdarg.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdarg.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stdarg_header_macro.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stdarg___gnuc_va_list.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stdarg_va_list.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stdarg_va_arg.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stdarg___va_copy.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stdarg_va_copy.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/unistd.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/posix.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zipint.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/config.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/zipconf.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/inttypes.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/inttypes.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/compat.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stdbool.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdbool.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/errno.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/errno.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/sys/stat.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/sys/stat.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/stat.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/time.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/time.h diff --git a/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_error_to_str.c.o b/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_error_to_str.c.o new file mode 100644 index 0000000000000000000000000000000000000000..5f383caeb68b080ee1593e6bc40bcfd7c3912f81 GIT binary patch literal 980 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 S3z@~%(BjnOTzlru{Qm(#UV!re literal 0 HcmV?d00001 diff --git a/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_extra_field.c.o.d b/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_extra_field.c.o.d new file mode 100644 index 0000000..71ffc5a --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_extra_field.c.o.d @@ -0,0 +1,44 @@ +lib/CMakeFiles/zip.dir/zip_extra_field.c.o: \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_extra_field.c \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/stdlib.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdlib.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/features.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/alltypes.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/alloca.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/string.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/string.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/strings.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zipint.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/config.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/zipconf.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/inttypes.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/inttypes.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stdint.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdint.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/stdint.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/compat.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stdbool.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdbool.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/errno.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/errno.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/wasi/api.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stddef.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stddef.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_header_macro.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_ptrdiff_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_size_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_rsize_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_wchar_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_null.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_max_align_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_offsetof.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/sys/stat.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/sys/stat.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/stat.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdio.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/sys/types.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/endian.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/sys/select.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/time.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/time.h diff --git a/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_extra_field_api.c.o b/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_extra_field_api.c.o new file mode 100644 index 0000000000000000000000000000000000000000..e756c6cd5357d8c656265f4e907c4e70dba41ce2 GIT binary patch literal 9231 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 literal 0 HcmV?d00001 diff --git a/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_extra_field_api.c.o.d b/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_extra_field_api.c.o.d new file mode 100644 index 0000000..0e92c70 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_extra_field_api.c.o.d @@ -0,0 +1,41 @@ +lib/CMakeFiles/zip.dir/zip_extra_field_api.c.o: \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_extra_field_api.c \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zipint.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/config.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/zipconf.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/inttypes.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/inttypes.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/features.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stdint.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdint.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/alltypes.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/stdint.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/compat.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stdbool.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdbool.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/errno.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/errno.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/wasi/api.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stddef.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stddef.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_header_macro.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_ptrdiff_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_size_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_rsize_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_wchar_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_null.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_max_align_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_offsetof.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/sys/stat.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/sys/stat.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/stat.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdio.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/sys/types.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/endian.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/sys/select.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/time.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/time.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/string.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/string.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/strings.h diff --git a/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_fclose.c.o b/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_fclose.c.o new file mode 100644 index 0000000000000000000000000000000000000000..9f7ff82dd8c90244ecfe68bd9e42362cde44c1b7 GIT binary patch literal 733 zcmYjPJ#X7E5G5%)l0OnDAMVtFLOY}ov|t;scqUe)DG=-z@(OGDBOq?xapYER$1k$XOFg8Ap00Mi%Y8(Tyv-|2)bWpX*(X|Xa_jeKZ&&uQ+d&UTV(V_s^CBb8SK~Hy zJKLr`DdVC7;vr-fMjk=m452N73)X-6=GC>eXWQ6*j8Q_+1Gdn2+^~OOjQ$v2tCS+C z8OREE^^rkUK@!gHag*`5$lhL@_Xqt!mMeOCqf}WvKhx)%de&!RamM*_YeFr(1*Yib zWHN$rG965(m*Yv2PKV?xQklFGY(}NW{Ii+&RB{`AH>^0wUFJ2ZVygYE_klh}uLg+wo+W7*N;% zQfagsKIp1oS3u}=T}xJK4O@09mMcwPLNw(1e|(JzLi~`z2WD!n)2es@6MzC|KBRV~ zWWcAYMH-~}@p(=D^inNvW0CQmc#-cN;^+oYq+B2!BdD)Z6r-a-5Tgi1F~*Bl6r;R| zqCkv}iBXD`f#Mj$_%bER8ueiU`_?Ea&Z!S3`ynh#l~*Z^DNL_XKlU&7Ybg~+8en*) zyqydjzziBjAjh$7EV8XACemTy7;VSxM&O$UIW<@mBV09vgE+KIJ6L!p?!cXEw2MV| zErzN{!(6kwoT5EAjJt8q7W-bN*!!M+ghtBY!|%fp+-C%RqWxU7zbF*P0o;!VmIzsg z5RumCAnP35)ES{ec*yunb#G7jRHKYJ%(_Q#6c6K(E#0F`c{J25>!kWQ)}(P9r(<}` z_*@Yv{4iw~fF>4tl;f&ASLK^DiIY^oEKXn!3&t0!mZms0RTKuRP2&_!FVPG;oW&WO zU86a6IJfC=n2K05__((m&NK6Ih97TI2}^W>DNf=%p1_lvW_3En=~GQQji>1ho-w{u zXf8X;;j{01XVAIugv-phz`2DcoyYTZ0ncF>FBq=^r;D6eEQ%qZEy~^mTO}d8H=sGjpz$6`gYfCleWJn2f?vGV6{Tv*h1#8X-vHTXso z@PihCzciu05<0*e5rtnx4E_)TzK+Dc)}&rt!tMU(Ik z|6ayo@gHLv{Hs*@IxOC`r0Z#EzO|(1$!c!pxyFOdY}X%7Pvr~wLcQVR*fZbncqbT!9{G2RSONCNtwm4s{m1c@Fa>|^ss&l2ef@RHAr)yPN zm>Y*TYC>mx)2;Kct?@+cy3$KzQ!8D2H5ZQRZ03Va&guBsotA0axkkI%a9J(qtV`E+ z+VyO*)wTV`x@mW1Hq+|*=87$Ib=z4nZ7)06cG|vcb~=1&xmw3p13#N_Wlg%WZONSf Qyd%AA!fVvqIr)+QA10B8V*mgE literal 0 HcmV?d00001 diff --git a/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_fdopen.c.o.d b/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_fdopen.c.o.d new file mode 100644 index 0000000..5ac9259 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_fdopen.c.o.d @@ -0,0 +1,43 @@ +lib/CMakeFiles/zip.dir/zip_fdopen.c.o: \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_fdopen.c \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zipint.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/config.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/zipconf.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/inttypes.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/inttypes.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/features.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stdint.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdint.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/alltypes.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/stdint.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/compat.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stdbool.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdbool.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/errno.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/errno.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/wasi/api.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stddef.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stddef.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_header_macro.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_ptrdiff_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_size_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_rsize_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_wchar_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_null.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_max_align_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_offsetof.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/sys/stat.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/sys/stat.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/stat.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdio.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/sys/types.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/endian.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/sys/select.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/time.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/time.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/string.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/string.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/strings.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/unistd.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/posix.h diff --git a/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_file_add.c.o b/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_file_add.c.o new file mode 100644 index 0000000000000000000000000000000000000000..5a66dbbfcdbc4e69d7973fa2306678269658b432 GIT binary patch literal 796 zcmYjPyK>V&6y06%lhkhHXPiY%=i#cN4ftv!SyHhcm@ z!9YPx$N%sT)Re63z#wUK?mhS1xsP4sCS!~c!k_2!Inr)2Gxgxd8%+Va$<7`ZF8P^8 zGa3u0hU4%cWUg?=Y#fOPg3uG4NY@)VaTJ7-32lZ`y8JGP9VSF1oP zg2mkR7$Vw-v;anhugXx(kZeVDk(p_aWOk%Nb3`*epjpU3c0_ZKJ6@2G1Jou}1-MO2 z1*A<%3bZ!SA$LMdn(ra1Lmu>Ny3)h604q?qr$zESeW6%JsjNgxN>+vvl&|Tkk{PfH z#yvH`yei{jDyh=7o=z*U29-Oy-mB26%GiK)sKSQ1=;g(XZmQCo9j#XSo3piSqP8ru zoq|qxlyVogU>9nz4Lj!h#dv!vcTeT2YNuL_?yG4J6m@V%58?1>+I^#lzNhNEI)YIU z4vGFHbu$Q&(!Zs;zE4bq(hs9=X}lm9kG%TJ*RQU$Y~H~6V~l=af_`Bw|B+zyI~A?O zBJw956A3OU(_=}(e7paEvmSTD;hT%|dZXSL1`{~SAtrM2m~oZCU@2SQb|qbU=pEG;N rqrS@%YdwrYDcm?#tFs5OOs}eC2sU7Xg&wozL(CFOPl91+v$ygO(=pC1 literal 0 HcmV?d00001 diff --git a/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_file_add.c.o.d b/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_file_add.c.o.d new file mode 100644 index 0000000..895e086 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_file_add.c.o.d @@ -0,0 +1,41 @@ +lib/CMakeFiles/zip.dir/zip_file_add.c.o: \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_file_add.c \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zipint.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/config.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/zipconf.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/inttypes.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/inttypes.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/features.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stdint.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdint.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/alltypes.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/stdint.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/compat.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stdbool.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdbool.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/errno.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/errno.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/wasi/api.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stddef.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stddef.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_header_macro.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_ptrdiff_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_size_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_rsize_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_wchar_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_null.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_max_align_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_offsetof.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/sys/stat.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/sys/stat.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/stat.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdio.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/sys/types.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/endian.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/sys/select.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/time.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/time.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/string.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/string.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/strings.h diff --git a/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_file_error_clear.c.o b/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_file_error_clear.c.o new file mode 100644 index 0000000000000000000000000000000000000000..06c3ac9e8d6ea664849e2d506c6c04453ecdfe8f GIT binary patch literal 589 zcmYjO!H&}~5Vf7QNt>cn0&(Hu2o8&)bi3Pat8&^3mMd4pCAiKco2}zyZKtAKT9Ehy zE}ZxSK7&6(;)v67Sjif{8NYcm<3UW97$Jne9S#SCKjJ+izgy@yAh$u1h(ZEWNeN}8 zb_AjSVQm=SBz09t1IpRsHato`7j*(kRVv}aW?A;vqbwTyIo=xk`{x!NP>5HfkWfs? zCUmIt;uxe3MRPKw&KVhoofQhZv_rdZ!`=#qF6~kGKJ>^nxu)LDBQ(VRiP)$8(J|e( zk^`$TxC?#ipCkhx{c7vEc8*OUbK?DMUB^!Rr0q5<1Uzh+j1aQtM@t$g5EUQ4e)s0a z>9{@YKEvn(aV187+vk3*s7g!5^7nWZq9y+q%? z*y@2{DhHEfz)Yh+dy&6x#3nv1DheJraaEh>DQ7~&g-i=&tHsq8l&EAL4a!ECV#`DW xQBXF9tp&unsMbvA=&`J%QLL`*&&647+I2^Pf(#T$4zbzQpd(Kgxs2hH`3GrltaJbX literal 0 HcmV?d00001 diff --git a/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_file_error_clear.c.o.d b/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_file_error_clear.c.o.d new file mode 100644 index 0000000..1bfc288 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_file_error_clear.c.o.d @@ -0,0 +1,41 @@ +lib/CMakeFiles/zip.dir/zip_file_error_clear.c.o: \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_file_error_clear.c \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zipint.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/config.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/zipconf.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/inttypes.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/inttypes.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/features.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stdint.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdint.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/alltypes.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/stdint.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/compat.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stdbool.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdbool.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/errno.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/errno.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/wasi/api.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stddef.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stddef.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_header_macro.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_ptrdiff_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_size_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_rsize_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_wchar_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_null.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_max_align_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_offsetof.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/sys/stat.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/sys/stat.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/stat.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdio.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/sys/types.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/endian.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/sys/select.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/time.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/time.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/string.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/string.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/strings.h diff --git a/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_file_error_get.c.o b/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_file_error_get.c.o new file mode 100644 index 0000000000000000000000000000000000000000..9b6db4002b683613fd0c86087587eec84181c325 GIT binary patch literal 577 zcmYjO&5qMB5Vn)FNxK!PK;pv15qnq^rQ6+ZQ^ZA<}&mh{?7$Jne9FIqY-@AR^Bj@MfxGux3K!{ZnflQRKduM;>vB zw~Iz(bbcbqh@jM&S-`0iSa4FuBclsv7L5l8B7Xoc3dorFB$%I~Y@&(PPVS;9nVz4h z@C^MJs`$3|9ha38d>>rb{`29`VaWyjYtxw{WY4!jGSwgyTfBVp>b2|nW9&b{=&j=y z82uieCyiD`$3VAuW=#fd3q_J2@Q4X2t9RE|i{)ZjaYHU{jcMBFm)5@R@&!}%r4al3 zE3u(>zzn(BY}Sw#+vRq9lWvM~yGmDZMOUm?Z`Vu4R>gH$z;gWzef?yshlXl9)~p0- zIt^_QpXHs{CHJd|!~dK_H70({s1OO41=qG(qV}MLl2tsdJ7M^qiVoti?hMTZB$ZG( n6>a=TDrq!r8aub7Y|OCWIMh&r2FV~XhX&d>Xn7?Q_+b73udb>B literal 0 HcmV?d00001 diff --git a/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_file_error_get.c.o.d b/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_file_error_get.c.o.d new file mode 100644 index 0000000..63e1417 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_file_error_get.c.o.d @@ -0,0 +1,41 @@ +lib/CMakeFiles/zip.dir/zip_file_error_get.c.o: \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_file_error_get.c \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zipint.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/config.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/zipconf.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/inttypes.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/inttypes.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/features.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stdint.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdint.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/alltypes.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/stdint.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/compat.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stdbool.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdbool.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/errno.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/errno.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/wasi/api.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stddef.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stddef.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_header_macro.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_ptrdiff_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_size_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_rsize_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_wchar_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_null.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_max_align_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_offsetof.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/sys/stat.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/sys/stat.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/stat.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdio.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/sys/types.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/endian.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/sys/select.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/time.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/time.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/string.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/string.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/strings.h diff --git a/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_file_get_comment.c.o b/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_file_get_comment.c.o new file mode 100644 index 0000000000000000000000000000000000000000..3329ccfb57240e549ed53c8eff842c04f73714f9 GIT binary patch literal 894 zcmYjQ&2HL25Z+z$7a)NoBq0fDX7dXnCL{z?dJ1Zj9((PL8nY0Cu^oFsO%E~c8&vAK zhrU6dr|MhuP*tkbF{ElO%d_*%eDkemc8TtfC?SM?oKB~Ny@>=5K|lkv_|SlT3*m?& z>`A8GwoF^-UV9`)j(5)pd4zqb8^gBin6?z263{vP&UD*-A=_Qk6Sn-D9HPGTOuHWj z2~|FX0+b|wmuMfnme!qOejuq$>2 znd?P@;VfomHFlb&$SJZMUxwu(d&*bl#aHKwxmJR&K@Qdie7%+B8%Ww1@I2)CCal0F ztipQs{p^pnFtnwyG?w0mE!e){1ytUF0_@!JC#d^muDgqQyZ>|x9FV~QfWPE>$k>NH z*uUck$T&boxQ#473{8O_!4Vv4jLdeN=Eqp-7)#CEQ(nZLmJlip_z9dm_OzHuk+0zf z<2d9Yj)x__gl>comJ5g0Gc7Tjr{Ro7I8c@)Bz!6P9OflGVL3+S`KuS#N;ICLaiGLt z!v~E7eN1Z%QcMO6mH~&TxG@ z?o?3n%(5o)kBZcRFeF?y8g-#{o7HCXQfqX3&6-vd=X%ZP)|>UJVbr=8y{@R%OXL%_ zo@Au%h3By+bUF5fpD3p~V{53+Pjfl*pQAdiEUz27WvQkeo?k<%&O~^YWB1F+(b$sa zM7PGGoEeR!-m!$*x15e{`Q=sHv8AWGE_P7uxiY*H<%}nK0xy9fRC(_Tznt*RzO9P4 F@(+Oj+g|_x literal 0 HcmV?d00001 diff --git a/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_file_get_comment.c.o.d b/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_file_get_comment.c.o.d new file mode 100644 index 0000000..e7c3865 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_file_get_comment.c.o.d @@ -0,0 +1,41 @@ +lib/CMakeFiles/zip.dir/zip_file_get_comment.c.o: \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_file_get_comment.c \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zipint.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/config.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/zipconf.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/inttypes.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/inttypes.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/features.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stdint.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdint.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/alltypes.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/stdint.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/compat.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stdbool.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdbool.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/errno.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/errno.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/wasi/api.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stddef.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stddef.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_header_macro.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_ptrdiff_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_size_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_rsize_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_wchar_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_null.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_max_align_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_offsetof.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/sys/stat.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/sys/stat.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/stat.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdio.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/sys/types.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/endian.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/sys/select.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/time.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/time.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/string.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/string.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/strings.h diff --git a/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_file_get_external_attributes.c.o b/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_file_get_external_attributes.c.o new file mode 100644 index 0000000000000000000000000000000000000000..a62bf8ecce6ae91b2f89dfabd3da01c0e05c9266 GIT binary patch literal 870 zcmYjP%TC)s6rC9-#3Z2!?*IYr@C;ZE;Sr;-A}W++x7`KDo& zw#rvv8CGImZ9h@I3RPGg^0hJRI;_Lm86nRi84f7I0f1le4HVgg4cHv=Efm@MC$bIO zHFm*wQi2TMg2kFEV%u7UP4%e_*8d{0N6LmTfLug}zP zX{n(5kebzVT=DFfc#l4MrrR;444rN)Ma0U4;PW*F)1Z(*`m?hBVRtEdP$mL zx^_Kb$~Y8}sujAid#8_=RxABi=zbuz1$$JvWLNH-Tnhqba=lFqq4k8Rk{q7rU1k z3($`CnbiIC6Y>0oXV62{2+$?dCGN%8MVG%N)4j6iZI5zmgjVh|R5A%vK>>9eJ>UsB zM(_Yj${`x0lyZ~?IVlf-CoG513*N9ik3R53l%uGD_6)l+Dt1E`bld0$ANaR00D-W~ zuqVT?7kZ#~8G{)KbqIpqz&?3io`=4r9ws6V;7geS>?h9wcnSJpKzB08G8`n`!ITmX zNPbs(2!@385m)*s9DRnvBz+8q;h2rb;Rqbx!V_>pNS}n05oHxmQH)b5MRNn3hSOpW zL;wwuG|vD4!WrGEB94$H1S1ey#Zk)lER4e02A-pA&vmj5yP+Zw5uwH)3}gCZQAo-- zN@~%=8IQxb@QS$`jc4{{oXEU*pvPxM@!xT)f;tXXm z3o|g=z$9gnq%24#MSiIR8L^Y|BEE`gNaGyLeTf&~JY3kti`f?kKMXIyMYyz%mnq^E zxC~bsD7rA;*;j@tnavF00%RZy3!N@3lGx&5u_ae*8J2McR=&hlSc27ETqD0V@}piw zlrUZ;s;-gg+7@1i>miq_t3m&B--t>y(plW2v(=$gA~MCZ7`^RLqfwBnv~6n3OGJBU zUZHjWmtF^3qF0coftPsI^p8aUu#3{|B37uv4$ZgFPsIv=9|8^RaiHyS8_-Lhy$3ZB zhaw0;L8k7K*#~{kh-wx41<^Kvt;4_;@jNJC7^1~P)MXb!f?2eVV2&t&!^H6LE)nej zdK`|y@jG~evN#DR;A8_&Ia!<%Cr9-Cw7ZxX7K;&11McFP!(AVNGcdA_Aqp`HAsB5C z)MuA^+!Hl`=P1cAH9Z372;@ko>0^}R*uNW8iR`G57p$*K3pnJz{G?U zz=Xs1BqU(6fm0dHMY(}9MB7Z8wh%!*D{7H+HIQTR$v)cZsRJct-&g+HSj8_UG1n5%tDP|7I9vNYw&VM?G;jcP3tcr)|s zXHUOpcnfaAtrfgY(QY3!?o|@J1FyoJU3`t!zD7lK&W(oa*#N!{>+t$6-ldtlo$|gx z6?qfhfH(CIot)pIMBj$D;Oz$9qtN%9LB7GSd~N`uhIs#;XOUt4#NJK6Qk8<5sO;*hV~lJ>Ik}QvOZYyDe_k^6`Zmi%V+1 zZ$k1dO6+GzX5YyQdoHW&TgAhEQDxuf9?AC?U5~vI`^L-I51Pz=>QdO_Zk2uA?PGt_ z_=jI(zXxRBlOBmZce1aO=1!hlO({UPdERXDLTvMqxwRCrCGMM zoSUHg2Robbe62EJnh)JSFx-GtwqCtxn XIepUPdCY!P=gp|rESIV={*L_*)6^q^ literal 0 HcmV?d00001 diff --git a/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_file_get_offset.c.o.d b/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_file_get_offset.c.o.d new file mode 100644 index 0000000..4fad3af --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_file_get_offset.c.o.d @@ -0,0 +1,40 @@ +lib/CMakeFiles/zip.dir/zip_file_get_offset.c.o: \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_file_get_offset.c \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdio.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/wasi/api.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stddef.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stddef.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_header_macro.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_ptrdiff_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_size_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_wchar_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_null.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_max_align_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_offsetof.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stdint.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdint.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/alltypes.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/stdint.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/features.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/string.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/string.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/strings.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zipint.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/config.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/zipconf.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/inttypes.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/inttypes.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/compat.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stdbool.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdbool.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/errno.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/errno.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/sys/stat.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/sys/stat.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/stat.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/sys/types.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/endian.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/sys/select.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/time.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/time.h diff --git a/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_file_rename.c.o b/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_file_rename.c.o new file mode 100644 index 0000000000000000000000000000000000000000..9eee299b100fa0696393918d854603963fa57257 GIT binary patch literal 1420 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 C!i)_7 literal 0 HcmV?d00001 diff --git a/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_file_replace.c.o.d b/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_file_replace.c.o.d new file mode 100644 index 0000000..78e3d91 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_file_replace.c.o.d @@ -0,0 +1,41 @@ +lib/CMakeFiles/zip.dir/zip_file_replace.c.o: \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_file_replace.c \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zipint.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/config.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/zipconf.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/inttypes.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/inttypes.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/features.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stdint.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdint.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/alltypes.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/stdint.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/compat.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stdbool.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdbool.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/errno.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/errno.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/wasi/api.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stddef.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stddef.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_header_macro.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_ptrdiff_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_size_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_rsize_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_wchar_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_null.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_max_align_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_offsetof.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/sys/stat.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/sys/stat.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/stat.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdio.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/sys/types.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/endian.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/sys/select.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/time.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/time.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/string.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/string.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/strings.h diff --git a/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_file_set_comment.c.o b/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_file_set_comment.c.o new file mode 100644 index 0000000000000000000000000000000000000000..bb483630b495ab7579778a14b006e4f56c584db3 GIT binary patch literal 2439 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 literal 0 HcmV?d00001 diff --git a/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_file_set_external_attributes.c.o.d b/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_file_set_external_attributes.c.o.d new file mode 100644 index 0000000..b32b464 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_file_set_external_attributes.c.o.d @@ -0,0 +1,41 @@ +lib/CMakeFiles/zip.dir/zip_file_set_external_attributes.c.o: \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_file_set_external_attributes.c \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zipint.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/config.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/zipconf.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/inttypes.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/inttypes.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/features.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stdint.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdint.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/alltypes.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/stdint.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/compat.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stdbool.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdbool.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/errno.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/errno.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/wasi/api.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stddef.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stddef.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_header_macro.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_ptrdiff_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_size_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_rsize_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_wchar_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_null.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_max_align_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_offsetof.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/sys/stat.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/sys/stat.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/stat.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdio.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/sys/types.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/endian.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/sys/select.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/time.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/time.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/string.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/string.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/strings.h diff --git a/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_file_set_mtime.c.o b/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_file_set_mtime.c.o new file mode 100644 index 0000000000000000000000000000000000000000..d4eeb3557cd6b7aefe87d1157acbae5e157af6d2 GIT binary patch literal 2264 zcmaJ@J9HaG6rI_XcGr?^$)6Y}QIh-eAvQv`W5+U%Nn(-2&JPkGKp=oDOKU~)>a(kr ziSx0XUq{J-bErbWp`fBkO~s+7;T$>&N*XBW;LWaLLPN2dnfJMK=Xak(p;ePY2>En- zds~<*(au(<(~+GOBj~7JMD@7U*&$YB*R&Ow0+06iKIa;`UEfIL^G>C17rcDUt~I<( zO^B|!Qe62g>dgu2%l-Yg zPW_0X-=#z_NFt7;O9Qabg9HZ9i@xOJfXX0K8DjjQDh*?}OJy(-|IsoP<$e5J7_*Bf!<`8h zpy(}8e@;>Y{Ybc!)E2cxB+vDUTqjt?0Pj?Z4*erJ zi(bG8UZ~P&Za3}bY4>0hyRj$9S7uvb?q%+KpT|rgr7-t#>VE9QewPj~=7Akdu!8_l zl@8_((jmq?jDt9Y!#kKq81u;Um@neRF>R5KhN~aL*f%tui_l9L$4fq?aTMt)z06rJ zXSIO3pbRo&nxF}WpTq3t$htJg zIj>+2uPo6#cTZp*CtO;6i(vQGM(nYMV!W>OF5n=w-fprUQ?lG za7ImcHut@tb2y80E-hiHFFX@L%UD+T@jL@wz}+1=eS8D2 z;W$gFxF5YwLI+MM= zL-u{VuULM750Vdp>wZIB2|*v?L)_r|$Pgdl20mJ%j~OD5kCAt2g&|hD5TjIJhN~!G zwMxZYKb1JeMiC|0I}F#D;hJKo#raCAS6L3Hxrv*KX$2LO7v!+=^-?wTtz%vJ95|>h z$Ps0XP>s>+sG+`04JOn?15KCQ;QG5=N)htljq8G1A&?JWrMA&VYffJYjT_id#!ndJ z7CynP6T z063`NlPrVAq!g?n+-S5*O%|b0Jd8j*Fv{Yg#B~pbvB#yo!61cQNV&8RgDgIKSu94d zyDP5yng0G@pBO7e2YA(B6RNBo)Lr#~L|pu;sGD4~)+_b0X8ojwmJpF)Rd3cRj;(4? zzSL-``l2O;(4qtXaRqgU?MW$;T8;+pwIuM~eN z#yw51QEC@$uO)lATeMp(yOdeol+mJ7sF$x#ADft(m?~F%jNSD8X6wWx_iwgWCyI^Q zq~mOaKN(J~+C?A7=jLYZY-xUKe*SoNuCz8klbx}T6=sU1+46 zs`4lNf~Si3nqBbQp53z2@zu7oo(cZ~q!Z5#GL5F69w`9E(d-A z7bN}xe}o%>q{)qQ@@BQkq?}OZiSthsys4{anV_=za5bOKrn8D$a&cpAV_sZ3eADJrrs_)}wx=y|S8st?a=l(JVO6BFG`(J} zi!xoT7BHs^RxH!yjIl*=RTeN?K1bi~T=&pYU4hL?ptjXuhVfb6icNBwKpg%TB&xCT zV@8EYxGcDK-4eA0EtIU{QQZp5w^XzchjnXdE+DCd%Be8%xm40>+BELllCrVg9OFk literal 0 HcmV?d00001 diff --git a/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_file_strerror.c.o.d b/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_file_strerror.c.o.d new file mode 100644 index 0000000..bce4a20 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_file_strerror.c.o.d @@ -0,0 +1,41 @@ +lib/CMakeFiles/zip.dir/zip_file_strerror.c.o: \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_file_strerror.c \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zipint.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/config.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/zipconf.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/inttypes.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/inttypes.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/features.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stdint.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdint.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/alltypes.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/stdint.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/compat.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stdbool.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdbool.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/errno.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/errno.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/wasi/api.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stddef.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stddef.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_header_macro.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_ptrdiff_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_size_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_rsize_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_wchar_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_null.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_max_align_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_offsetof.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/sys/stat.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/sys/stat.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/stat.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdio.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/sys/types.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/endian.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/sys/select.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/time.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/time.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/string.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/string.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/strings.h diff --git a/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_fopen.c.o b/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_fopen.c.o new file mode 100644 index 0000000000000000000000000000000000000000..fff8db77838b8747b94cf15f738ba80fb1af7d48 GIT binary patch literal 756 zcmYjPyKdVs6eTGuk{^kbcM4=6(F_R$IZhnQaHphg<_=woE{ZH&D~k21L>X}h%k4K5 z=+?3S(T~YgpmWEPc2N`{cz6%b<$drXuS_sP2!CBJmq@u&>bl1D8WwkrdLd2nBrh8Z zq%*^H<0u8Ma1%(fVonhHOPAd9r*57_DThL-@rwQ!5fnPewf4yhZZ z0X({p`o%ow5Fny_mZ30e{rV*FCssFVvQTTh(CX*nYKfR~Ls^3=v@vBWRZmtVRVi}F zkpS$FJpsfaCRI<#5!;Zk$218h)9D7)sBW&GY6@j@sOT>dYtbfcy=Cni%sRA9J0I94 zxhB_i^L7*6AhsoxTMjwy;P(1igQ{nW&Q?K8w!J2I=*}rQX1mm&Cf%mHrYJ&WEEC!j z&MVhrwl4}e5Y)i~JEVsv>jL(THu^5rn&|H|N<*TrzNCQ=Y5r>%F%gmrqi<5%DnK;0 z`|8c>TSe6jtes%=o}eFC(Vj3yzon*`7gb8)_}#$7*4&f|Et-fZFe06wQz!{Gp&VALCpuAE^o8TFk$TzGvy7>ouz z-|q*PlK^^yGxSCNpuxQ&1ny42<5dBrZnei%Jhj);V;TP$c9wJN!1v-h9md(%i%V-a%~D=?c`n*!PjW72&@u{`Kp{p8Y(CGS MwDd9xQyU)nAJYNK9smFU literal 0 HcmV?d00001 diff --git a/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_fopen.c.o.d b/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_fopen.c.o.d new file mode 100644 index 0000000..684f833 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_fopen.c.o.d @@ -0,0 +1,41 @@ +lib/CMakeFiles/zip.dir/zip_fopen.c.o: \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_fopen.c \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zipint.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/config.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/zipconf.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/inttypes.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/inttypes.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/features.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stdint.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdint.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/alltypes.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/stdint.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/compat.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stdbool.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdbool.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/errno.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/errno.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/wasi/api.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stddef.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stddef.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_header_macro.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_ptrdiff_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_size_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_rsize_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_wchar_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_null.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_max_align_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_offsetof.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/sys/stat.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/sys/stat.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/stat.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdio.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/sys/types.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/endian.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/sys/select.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/time.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/time.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/string.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/string.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/strings.h diff --git a/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_fopen_encrypted.c.o b/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_fopen_encrypted.c.o new file mode 100644 index 0000000000000000000000000000000000000000..729c23dc499e2506458e816b3e7579a4d8652476 GIT binary patch literal 767 zcmYjP%Wl&^6rCC8owQDyzL2_@5nZ&hoTg3VD6CqbYZh$SxfA=wbu)fokE4b~6Zi%e ztdRHveu0na3W+sKW|9i9ET6e&?(_H}o<|rVgug78OJv-X7V5!^8$-i`G9R=_9`$X> zfOuxQt_Wk`nHxcrWOIVh6P-)$P2DsJV+onDz$^Mgn7T2Kz!izdC7>1iOtX_Dh1d;a zAMRaMYn0Et%gt?>xOnz z)GFqX?WzIx6t#E9_UZo90J~-reb?SqrSCM115*2@%@RVS^G~q9Qjs=7`o-w0c57sy zB<{X?^ZME-S4~_!!iW>}0~^&xjL~oHQ%|$RFFeR{+)_sm@*I47JjZ2E@HlvPe%9@E zdqF7a@vW3;{^C@fZ;Nr)OQKUDX6uiwLhrzn^kO(1fa8yPqtS&k^e3af(}y$O_x!#=Vuc=U#hL)~k`Cc(oF%m5E!3oX`j8 zp_ldz`ZRr=9=lujPzuX@Gv6@ZFf)r-U0{R|{<7cik#kGh#}>D@9RmiPpOz&A3rtc9n(%Ve)K6F&cb+ zviO8ar^S!m_NAfsC?KzC(4mBOHi1jsvp*ztDOxzE2Jn)M4LA#DMBQ`eH0V$Gbas#)`a|@?cJ|DCn_Om2@4F3&S&IMP z7|s|W^S;^qK!GUv1uVeSSIOewwS>c zoAG46nol{OCD&;J)ARvcpH)0bVZWsFh1W{S(@PsoVB6F%- znQl?J1tm(Eg@d9II^QzUK$mAy^lQu<~%%n@5CWXuF0ZgRK5WL&HZ@=B!-CMAyV+8<|@2{?|Aa$%o zmr+PP-F- z=!GIsBSos$KNwEBQ-2mXqAR!kp)0yhAnZ^;3@~m0{E6^@NwYPn6+z$!-Khw>{lFj3 zSwM}w-LUEhLVzZe!4$Ay0q|m{%onhT3n4eqz=at%(JTTHEE44+QRXGS%$G2=tD1aS zN(H`>kgO(WrA~(5!V=yZ@$z%vYtJLTj!U?VE4YU1xQb;nxy}Z0ZZw&s-^2~vJmR-0 zzB_mu@0{_w>={LPmm;KNBqTQ3WI2HjJv!dPd${!u-zMw(xQ+ME_ye+i zFuz@yKct9u@FDJu_^yl*_#@oKN9IS8AyHJYV#XC9y2s@0@wK-yx6m>_kG)mtsM=&2 zq4uzfdq=!RPWQ2f`)B-soF2@b0!_lh#GOJN zQ%BSlO41c)JR7GvDWwKZ%DaKRFPTaV@jjRum^zp#NXP;~FSGjA zyDwgGZ+Y6^Z*_4JpTlKz&yA2kJj(bDj>o`E0qZ2B)< zfj2U;>?H7eGe-ndr9fLpOsAq}om?oo{4hLh>jJ=(vTom3rv zyyv>-$)820BjJR2*lIOIv)8V*+lS3ouivgW>tf%oJH1A`QFEMn@1WlkwZ<-dC8wYf z+QC2$B^qM0Kuj~0{K?EcwUTjIF>VN!KM5-(ho+K6=^F;*&GOGh;QHR6k{i$5aCmOJ zGf^?dv(P?qg*9;f6Wg6umObAK1A8)|dRYBQD2Hmr2t;25R03gz7ZWk9WTwM`XNlM0 EKX_bK{{R30 literal 0 HcmV?d00001 diff --git a/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_fopen_index_encrypted.c.o.d b/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_fopen_index_encrypted.c.o.d new file mode 100644 index 0000000..4eaef0f --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_fopen_index_encrypted.c.o.d @@ -0,0 +1,43 @@ +lib/CMakeFiles/zip.dir/zip_fopen_index_encrypted.c.o: \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_fopen_index_encrypted.c \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdio.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/wasi/api.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stddef.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stddef.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_header_macro.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_ptrdiff_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_size_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_wchar_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_null.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_max_align_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_offsetof.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stdint.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdint.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/alltypes.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/stdint.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/features.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/stdlib.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdlib.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/alloca.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zipint.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/config.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/zipconf.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/inttypes.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/inttypes.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/compat.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stdbool.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdbool.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/errno.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/errno.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/sys/stat.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/sys/stat.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/stat.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/sys/types.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/endian.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/sys/select.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/time.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/time.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/string.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/string.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/strings.h diff --git a/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_fread.c.o b/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_fread.c.o new file mode 100644 index 0000000000000000000000000000000000000000..5eb22dd7523993c40d0c68185835ed45174f5280 GIT binary patch literal 1011 zcmY*Y&2rN)5SFE;Nz(+Iwv_(TRa+pzIHZ5cgi~86SB7DR;bt6L38s$i%1VcFXbL<6 zaN){{cj3S=!#nT@aDr9RGT^batJQwrej}}jm-P%ni1F_1?2NEyY%n-APPG}3XA~#; zOK;?uh>uOzjlx)X((Q>}B2OqG=iy9w{-K*DVXTB?14D<)ufo(7QYO;Pgd)S3sbg8v zm%ebN@PZM+{C}BlM<%`VBtqF6UEUzY?{BsJ#>$0(aY_g5bQ}kk!ZGscU=35x2xoi1 z$AH1uAeHerskOrMWV>GCRhBjFNauqtm$M*=&!#Lz0@WP(KC!hcmN4!XP=`Iux z%4C1QClN5&WOF40J&h?rsX_@aV@i3HatTu|U8Gc5ft&lkFFwL8Fu{7lFC+gHT!yJ5 zK8?_6gpT-T_NMq1)G-S)a0Oi${D3$(FPZ z!j}=Te1XtXufeqnE%6my$l?GwEsnzq0C4N|@W56Pv)W`Dz6PtX_L#3D_jOo@>qqwZ?dvP%2yx=vct&i^I zwmC^YYZZBHt-~Bq#mH|P zxg#1utKMpDH=04Gwbj@X8{U>5?6h|3zP}Z0 zb^=k~sgn12xWrVR>f&q5Zw>aq9jVBW5==cVb3NxC=lox}?(4WzwhhBQhwdY=o{)rxXYiB7HFd&JukMHdpJk5|GUs6H{{j^%G2tViLyONgY ztSren#fp7+kGREUa^;T4ag@kFjhAwns%u8b2F`U5F2-3JC0Z(8(hB||%EozGs8Eh` zDHm(UJ2qcLM@em$9UPl9N>qko6|Kp=0PcWds7J>uc zaJY%j2Hs`1sG*YuHL%`bc66QHrLe2OY!gO_A#!M7!X~du(}bq!z6CAsgXtXu9Gd#SKog9nm6h#S_evgrHuSddHpv=>%ZgoFGk7F+^YY$U5-Hx7Q9>E2!##IYYG(@3G4pI%87r^&q6To$p8u7bFbJ$G4Xvq}Cu sPA5T}_jZyr(JII?jM$%L+AMF+RdObkOhW1F>rCc7JCEjxFTdCS0jR?Ood5s; literal 0 HcmV?d00001 diff --git a/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_fseek.c.o.d b/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_fseek.c.o.d new file mode 100644 index 0000000..9ddd667 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_fseek.c.o.d @@ -0,0 +1,41 @@ +lib/CMakeFiles/zip.dir/zip_fseek.c.o: \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_fseek.c \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zipint.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/config.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/zipconf.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/inttypes.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/inttypes.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/features.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stdint.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdint.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/alltypes.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/stdint.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/compat.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stdbool.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdbool.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/errno.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/errno.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/wasi/api.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stddef.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stddef.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_header_macro.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_ptrdiff_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_size_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_rsize_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_wchar_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_null.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_max_align_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_offsetof.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/sys/stat.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/sys/stat.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/stat.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdio.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/sys/types.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/endian.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/sys/select.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/time.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/time.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/string.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/string.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/strings.h diff --git a/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_ftell.c.o b/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_ftell.c.o new file mode 100644 index 0000000000000000000000000000000000000000..31e18be452f1776578aad7fc9479745adefb4977 GIT binary patch literal 807 zcmYjP%Wl&^6rD%XIFHt8o3`m=F(X(cGEUQ`NfcIXp=?>OVdpybBy}@>bUcnIizcvT zi^LKnBqSt$iya@pl9{?lmHfDKeC|2-USHs*Ap`)xPs`;Jpi8)bcb90f0O+>{3YbN6 z({XqZF;_St3uAGM0C<2?>3TCKiGxToffw)|ejg-G8fU^|j%1wY$hGeQx81kETW_~|`JFaZP9Ah?AZ zv~UJ!krYVr64qBU6rB>|VilY(XjvtchqzgT)jX#{DlG(PRZ*%rrKTvg z$COpF+CnwDM%L}@P_CO~gKXZ=h7xQj!Q5ple{GX( zt+Ye7$WHx(Zc3HZRBFxtep+x>0lNxN6}EAc?y0u-6|{d%56Hno+k0je{Llg=^>=1L zG)2Z2eJlWg%6i-rJ$_UNKwl7i)gLQ@@!0FUc>VGM7fU;^^bCS;5P?4sm%bwi{%TS= z5wV|nOr)@;LXV{>^X>61EPC9Hrf-jrI^9lp8c5Q*k}^r3AFB8&8+W`oJmh?yKWvqH z%{)m?hQmG^_@nMPIb7dx2 zYFO2A#%FfEe3tp>V8@BHwmp|~JBa*1C^tKvGr{9%YE{CF%V6&Ej9F%wNq5YdJ>~J( p<*Bt9#gP6u!9uL4FJ>{-d6&s9+|DB5~-dOsidX+Z~2*!9Ykta$#yWVA}`iqPy<; z27QRWNS~rJ-Sk|rGo55|&iT&Ych9*YRy0%yA3s|ZO8Qfxs>;2I z)@r$q$E~n6Dvq=Y=fk+AGREASmp@KBv93;2T*v?38YUa!^Tf+*@oSxO?LsGzak#&9S9sk|kgX5+jzRFXaQt zERnu#whYT9T4bpvVQEM~`i^Cq3d=$UvLm(vE4NuCy@=F6D^Xxr6LKcaWd7l+uqrF8 zA-;zAJUYYH7p;+q?6QFjHemxc`)mtU$#T2Tc3_9?!aD3i9=39eqwS$<&!jQrQ-D1v z+_8P+a{&8rFk**u?uWNof^NV_FlphLNS-kSkAT6^8+MF2ML34yh@IeRPcTCgNwQNZ z^6U)G;MAmKPBz9$SgM4j=4OGFalGdUo%fjzdT}w{vX&-4Sk|-$TmqHVNs6u|rfaM_c zJ7b%Nk&;2x=265uM*C5T+pgvH-d$Z*s+DTb5m0&%B8XmGp#Cs!SFqWI>rNIQ15^9l z7I1xYQ|D%68KTz1gH literal 0 HcmV?d00001 diff --git a/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_get_archive_comment.c.o.d b/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_get_archive_comment.c.o.d new file mode 100644 index 0000000..7445726 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_get_archive_comment.c.o.d @@ -0,0 +1,41 @@ +lib/CMakeFiles/zip.dir/zip_get_archive_comment.c.o: \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_get_archive_comment.c \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/string.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/string.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/features.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/alltypes.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/strings.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zipint.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/config.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/zipconf.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/inttypes.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/inttypes.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stdint.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdint.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/stdint.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/compat.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stdbool.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdbool.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/errno.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/errno.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/wasi/api.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stddef.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stddef.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_header_macro.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_ptrdiff_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_size_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_rsize_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_wchar_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_null.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_max_align_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_offsetof.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/sys/stat.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/sys/stat.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/stat.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdio.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/sys/types.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/endian.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/sys/select.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/time.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/time.h diff --git a/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_get_archive_flag.c.o b/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_get_archive_flag.c.o new file mode 100644 index 0000000000000000000000000000000000000000..bf8216e3e0bcc3e02e16e0fb4c2675ff7f6e656a GIT binary patch literal 606 zcmYjOzmw8H6yDvy5lFajz&Os>?2ZjiCLDJhVX!(zueP;|%jP8)+5EW8h7lXk%F@Ep z&KVmE|2<2S!@_3Y`@Vhed%qAbQ;ZP8UyjEk!tad3;eZe1cY}xl+0F?9nPk9KkV2ZP zJwfOnU1~12L6Ik!24x(u@%d2#^?rV8q<&yLJUp+dBVxvSz*^Lxtu1TQHbp+MYlD4a z)`s|`McWh7VrOfUb?6!GJTQ~ol3Qxt^-=R>vo7sU$e8tLk6AXhPNYrk33Ku=-`1}tT7v|5gXAV9np(tY)r?Fg?=^tb?OPXNfs0Hdjsnc z(fDIh1TpAdUV1^D4=wp!iz z%P?Ba{W)Cmxd<1l#Y~8KcpZf>Tf9KunuR->tES-yxULkGrfY2~x%EzGbDjTymlxW7 zBDj=Zl7)$?t9khjl+3f(?WL8}$&SkkTqmtG-$?LcnQyo(-BFfjTJfT&x8+5JZjSFd W3L;RD3Gnp3fYLR~B+fkep#K6u7v_Z9&cuo%FXX_a4Cm$>ue{hwqLevc#gi8{1Iq;` zasmBs8^X)&o0jE;uE)UP)+h}f?nR-+?V%4iMnrnMKt-tfJ{K?=V3i=O{CtyVkl|W( zN7&~`CxeDAQ9`AOUZN$69$-Z*xJQJxgB86z!1@v`)1@O_CWqvZ%5_9b+oYsd1|n|} zp*j#T#i~$+R%vBRS49A|M`|^!4v=0GT1{xex=m_&oz^w=2gc3o0q!oSt_L|kmkN}# zOB6v@5#E*JcLj2_;8Vn20iekO%8|Y*4z1Bu zx^||oi@58T;2WY)O<`)D>YH@)f^$Pt(eFHaS@eD4g=13rm8(mrL~dJof5*Tr(Ka@V z7Y*`)*oOc@Zs#g#Ae6sixTIUT_Z80o_(|kiNgBry~Xq%!g-wB-x2ajI&3*nu;csF;$w=Vr()3P{=q>PdTzhn@9*~x+)=;N>%gwvaoldd z+jg9eyEk&7-MxoC=a)j`Hp>ez0-L7{l8T`YQ-5L>x5Ln`C}tFMqv_bbZ~hx=GnxYP zqi}2}LF#jFYWpb|T97WL+#LJS(DoB!EsR3W>^K(XH%Bqg@0g)67y%RI1e4EVNQ_G2 JjYAV&^1maP0v`YX literal 0 HcmV?d00001 diff --git a/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_get_encryption_implementation.c.o.d b/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_get_encryption_implementation.c.o.d new file mode 100644 index 0000000..747dbe8 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_get_encryption_implementation.c.o.d @@ -0,0 +1,41 @@ +lib/CMakeFiles/zip.dir/zip_get_encryption_implementation.c.o: \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_get_encryption_implementation.c \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zipint.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/config.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/zipconf.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/inttypes.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/inttypes.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/features.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stdint.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdint.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/alltypes.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/stdint.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/compat.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stdbool.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdbool.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/errno.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/errno.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/wasi/api.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stddef.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stddef.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_header_macro.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_ptrdiff_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_size_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_rsize_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_wchar_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_null.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_max_align_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_offsetof.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/sys/stat.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/sys/stat.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/stat.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdio.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/sys/types.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/endian.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/sys/select.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/time.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/time.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/string.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/string.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/strings.h diff --git a/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_get_file_comment.c.o b/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_get_file_comment.c.o new file mode 100644 index 0000000000000000000000000000000000000000..aaee557a692059550ffcf6ed21887f05bb1f381f GIT binary patch literal 723 zcmYjPJ#X7E5G5tWU$P@7cD^$lkq!w2IZhnQaHkq=kg;nwRhDQ)F-0j7Wi%Zkw_Ep4 zUHT9DL;6oT73kEllX$F1))tk6RtORk~rjorfPx9boXPJIJ1yZC!oUd;wYkA$P=Ge?NQ^;r&8uO zRx&2>_Hdy9?8Ds>~A<4IapH<;SdgFS6weLB1dwNW2tofKu+LfGsuyl zqaWp*RcYirMoL-i^EO}X`GmQmlDKH)8oxjcAxebwvt`avk*{9cG8dwD7M_xZFZwJsT3 ztQSijeW0Fzo6%@UZGYS!k8kXeKN}D10ljhuoQy@=qGVO;@+4 zuE>jJrJ5BlXv$(9n2jiBB3!sEr=}6*!ksc| s1uUMrEHgVi<|1{IL|SLf5>Y-l(@5!zrj&cs5>E-u%vu%(+@c@EKO>U9y8r+H literal 0 HcmV?d00001 diff --git a/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_get_file_comment.c.o.d b/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_get_file_comment.c.o.d new file mode 100644 index 0000000..5a2c82e --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_get_file_comment.c.o.d @@ -0,0 +1,41 @@ +lib/CMakeFiles/zip.dir/zip_get_file_comment.c.o: \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_get_file_comment.c \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zipint.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/config.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/zipconf.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/inttypes.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/inttypes.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/features.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stdint.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdint.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/alltypes.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/stdint.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/compat.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stdbool.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdbool.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/errno.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/errno.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/wasi/api.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stddef.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stddef.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_header_macro.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_ptrdiff_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_size_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_rsize_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_wchar_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_null.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_max_align_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_offsetof.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/sys/stat.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/sys/stat.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/stat.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdio.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/sys/types.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/endian.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/sys/select.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/time.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/time.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/string.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/string.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/strings.h diff --git a/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_get_name.c.o b/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_get_name.c.o new file mode 100644 index 0000000000000000000000000000000000000000..6269652b436ae2bd3687e3b88cd7c2183bff3816 GIT binary patch literal 984 zcmYjQ&2G~`5Z+zeaekcIP@1NY!mQvB6uG2LlPa8u__=cBmO9QRIB{%aZz{@x1R-7k zao`O&pmIgxEjaTG+&MBE7txDn=i8b2z8%jHFI!MT2>rZXuZec5t=_Ka>QqOQ+m*8H zm%7z85uMq?VHiZhONR@wh|_aM$R(Uf&z}#IIEbW3wH3|bH$gI-3OO7HsfZ-Gf@U%e zqN%zhOna{g7@_6wcp~fr)$|p8Yp(7hz9w870M|hSea;Oq?rlIYfb>`c4L#8uG_1!g zFq*8v3t-&W9BwMl;>8>+4T`)BB`D8$1qxt75h~7xms?oAiWRCez6D$N^758lxnLU^ zyZ>b97-xVE#vCaMmvIFpqmC6fG77nj0%$!}ghG?mQARUzfei4 z^q4*%+=2>N&v&mnEc3%Gm zM()6M*nw@h;k?^)v4)wo9#chjp$5CpcpW+RpbmSl_)TQEnKRtNxLf}j2yY34b^ap-mYakt-X`+jG9G#QI__dfZAjU~49QZ?ce;mKtxvSO<;T848s zUyzo4#c|_Awrai?hHen4mGGq-pNTY#qiL(WScWn<^TMTQ*^8z0Mxk)0VLbA}thF7* kkxacL!OpsqM5;Aw*{PTa+$&$W@;nh)tC$7T$Q7^UUt&b+R{#J2 literal 0 HcmV?d00001 diff --git a/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_get_name.c.o.d b/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_get_name.c.o.d new file mode 100644 index 0000000..892bbba --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_get_name.c.o.d @@ -0,0 +1,41 @@ +lib/CMakeFiles/zip.dir/zip_get_name.c.o: \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_get_name.c \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/string.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/string.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/features.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/alltypes.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/strings.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zipint.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/config.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/zipconf.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/inttypes.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/inttypes.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stdint.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdint.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/stdint.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/compat.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stdbool.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdbool.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/errno.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/errno.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/wasi/api.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stddef.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stddef.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_header_macro.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_ptrdiff_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_size_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_rsize_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_wchar_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_null.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_max_align_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_offsetof.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/sys/stat.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/sys/stat.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/stat.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdio.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/sys/types.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/endian.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/sys/select.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/time.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/time.h diff --git a/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_get_num_entries.c.o b/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_get_num_entries.c.o new file mode 100644 index 0000000000000000000000000000000000000000..ba7ceeafbfa6ac841b65f74ac025b0d7db3994a7 GIT binary patch literal 818 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 pZ+Yc|11xfG`=BLnpz;}Y7zhd literal 0 HcmV?d00001 diff --git a/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_io_util.c.o.d b/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_io_util.c.o.d new file mode 100644 index 0000000..5ac621f --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_io_util.c.o.d @@ -0,0 +1,59 @@ +lib/CMakeFiles/zip.dir/zip_io_util.c.o: \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_io_util.c \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/limits.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/limits.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/features.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/alltypes.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/limits.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/stdlib.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdlib.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/alloca.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/string.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/string.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/strings.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/zlib-1.3.1/install/include/zlib.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/zlib-1.3.1/install/include/zconf.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stddef.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stddef.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_header_macro.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_ptrdiff_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_size_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_wchar_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_null.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_max_align_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_offsetof.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/sys/types.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/endian.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/sys/select.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/stdarg.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stdarg.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdarg.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stdarg_header_macro.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stdarg___gnuc_va_list.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stdarg_va_list.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stdarg_va_arg.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stdarg___va_copy.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stdarg_va_copy.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/unistd.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/wasi/api.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stdint.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdint.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/stdint.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/posix.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zipint.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/config.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/zipconf.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/inttypes.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/inttypes.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/compat.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stdbool.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdbool.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/errno.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/errno.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/sys/stat.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/sys/stat.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/stat.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdio.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/time.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/time.h diff --git a/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_libzip_version.c.o b/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_libzip_version.c.o new file mode 100644 index 0000000000000000000000000000000000000000..3924cedca0b779fc409f13e3c919c8ff72c31886 GIT binary patch literal 489 zcmYjNJ#X7E6ns=Z?Ak#EG(cu|Yax)4qS%JI1x>dCUAwsy^`x+&NP(n`xJ#S@88f8l z&^`aAzo=trr9&6qy{|j)fV-9e0J-08w?MuCxs84ebPx49UageW$nC1d*4Rx1WbgYh zg`>LxCyxWfgxp>PwuRR)gLpc97}{_F(^1BPbc_HRI7aGqFHMzHsvEw2^-H=F0ody*my3sxO%^?Wt1h=ZA*VuPFTNe7T(C zqAJp&IA1KQy2uwfW;_?wyqKp#cKSL}Kdu|)_s~WlQExK_sEqirMpF>RI z{|ah4pPUG;6qUM?Hn>p}Qcy-W$)xR-mus$iOyaipyi`aVWlFAGa;%N^mUmr9lh&O# YQu`#fSffQPkorxBE*U%7Xo@%fFHrWH8UO$Q literal 0 HcmV?d00001 diff --git a/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_libzip_version.c.o.d b/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_libzip_version.c.o.d new file mode 100644 index 0000000..3f6f88f --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_libzip_version.c.o.d @@ -0,0 +1,41 @@ +lib/CMakeFiles/zip.dir/zip_libzip_version.c.o: \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_libzip_version.c \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zipint.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/config.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/zipconf.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/inttypes.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/inttypes.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/features.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stdint.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdint.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/alltypes.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/stdint.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/compat.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stdbool.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdbool.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/errno.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/errno.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/wasi/api.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stddef.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stddef.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_header_macro.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_ptrdiff_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_size_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_rsize_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_wchar_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_null.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_max_align_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_offsetof.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/sys/stat.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/sys/stat.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/stat.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdio.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/sys/types.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/endian.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/sys/select.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/time.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/time.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/string.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/string.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/strings.h diff --git a/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_memdup.c.o b/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_memdup.c.o new file mode 100644 index 0000000000000000000000000000000000000000..25ce18d134cdd4ada2e6d3ae186fc28c84a53410 GIT binary patch literal 767 zcmYjPO>fgc5S?8ob(%P}`<+%j?1~y^;yQ+Iz){ zp!rD}fIec>Sv-=^5~wyJv_>>io6Yg*fI0}i zsc@4ssdo42i)Xi5UDuI*g5VW~??}@>Uhgg0Tns5mPdc57TEQ)j(Qw)vmqJc#>z4-At=Q#4|ssm~Ez&@W%;rq9h;tNont9c_z4D6jC^6QV6w@w#nIq Uah3(l5%YqTcB71=%wccDAF5!%u>b%7 literal 0 HcmV?d00001 diff --git a/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_memdup.c.o.d b/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_memdup.c.o.d new file mode 100644 index 0000000..b734947 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_memdup.c.o.d @@ -0,0 +1,44 @@ +lib/CMakeFiles/zip.dir/zip_memdup.c.o: \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_memdup.c \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/stdlib.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdlib.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/features.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/alltypes.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/alloca.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/string.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/string.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/strings.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zipint.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/config.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/zipconf.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/inttypes.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/inttypes.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stdint.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdint.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/stdint.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/compat.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stdbool.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdbool.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/errno.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/errno.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/wasi/api.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stddef.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stddef.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_header_macro.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_ptrdiff_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_size_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_rsize_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_wchar_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_null.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_max_align_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_offsetof.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/sys/stat.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/sys/stat.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/stat.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdio.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/sys/types.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/endian.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/sys/select.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/time.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/time.h diff --git a/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_name_locate.c.o b/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_name_locate.c.o new file mode 100644 index 0000000000000000000000000000000000000000..4d1cf69795bf9368f9721c110919f0f213ededc9 GIT binary patch literal 2309 zcmZWrOLH4V5T2RUTe7uDoWw~?=uQlgBgvLyTaE(+uM;~jAOQji= zV~l^jxw*+=i(0qavE;;yHRVFr0X`^Qd@dVC|#uOxwdqe7WgR(($t)4 z$&uGs=zrQOIr>_?^oVW6m6C;(ae}-pvn{Q9lSS?acrfVmod~1kn03jb${bs! z#^dj+4rc~Wif|vx#;ev$xViup<@U%2(4lm!o$82!oZ3mMS>SajD#qP z5QH-#g%KrU7*!&KG^dntBZdixLt+J!5P>MfAgO=k!>0(oj}ZD+upjz|1Nc-rc`v?8 z(TGt?P#d78#__J$plz@bqBhhG`7%s>TK$wS#>aGS9e2gq(aY=Z&VuKVc{*bV~Q@hI3%*s0(0 z3p7YmgGB)f0C1P_@4p)EhF!4x4DO*YL$C*iTKE`+dF(-$y%gqg3Inhg9tU_31_=uv zhRNYR<9i+V!#>#G!eN3K4u}@;33wvU7(QtX;sJOP4tSV>3>@g-2#oZ?6!2h>cowof zu2j#A$YDN6cGTxO200jOVF3<80rD`a($?pMj_0nHC-; z%%eT(L-;H_tG}&?Q1NHUZ8iwu$H<{!{J?Pz447--G4eas^UL9J0-T5AFyF!jBUqpl zMv&1-H~}YNVGo`nyi-LnJjd`fbx%)gF)^!Alo2h4XB7QOd=8!)(F*uHoPp=h;|qj( z7G8j}Ej$P3=KFYH^kU%hk{adk5HGg0@LU4C1Sl`vrIv zE-c_h0(}iG!fP#j-QT#cQx?75n!`(mz{_w6F1PRsWq75R;UHc$#;^oep``n_11=K& zVo?kz`~frxe+f)jI)N79m%)N^3nd}Q9>M@tXrc-gsIK5LIWH5rq+i%!tSOWNt^{OP zVFgy9w&h)w2sPRkHX+&fPfH!@`Ugs_%!kkcCs?zfEDgeLsAUT)bXD8t9LE+kp>-2o znslk~DHepzVB3hJN9;S$1`j&HnFxT_VC}(XxJHiG9v+cNybjkh;vB9A%x@@>!#9-3 z;7wSE8}J6))Iapuze&z-PHR2B8?f<^FT*ZPb_v-hdl)ylx}|Q>Qo}92g10%`=DnM0 zlc$sHSA`g*XKa;T9TEFU4bzMz)9QUu&jj7)mgz~MGZsn(*Zd=DMrxfiT`*l^dWh*^ zrbn0_WqK_9CB3wIoaqVnmqJarlAuP9ojpDu+8s^uC~&qSqFo;Sj`QfxoU=cL#_nh# z_KT*mZ$lyWTPV!F2}jr;;VAzi660S*;_UNig58NFBY(#t1OHInKaTgYPvcScdt768 zNq(E?XFn#Q(R&Hb?y9iyrrRiYEa|p+in^9;w`DoMw9dnpZ93J9hsH+>qlIeCgUqt$ zHQPtVsK4A<8nqhrG231X{_^CyLa!oBPESwCVtJ-8Gc#G7E>~tIiW73&oUqDMGgAf2 znkXNtlx1ORgndHimZd$@RS#}OnqJ41?N~Os)Uj9d!3RS&{m3BSXnNTlmTBAh`)_c* zu_j%+;Z(DUddK!^Yo^_i*>t_*Kgs#3-B>d1c6OW7a6H#+Hfag-m8PdYJF;n4R-`K( TOXj`xrfg?p?ON5z%j@2M4J;3% literal 0 HcmV?d00001 diff --git a/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_name_locate.c.o.d b/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_name_locate.c.o.d new file mode 100644 index 0000000..fa007f0 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_name_locate.c.o.d @@ -0,0 +1,41 @@ +lib/CMakeFiles/zip.dir/zip_name_locate.c.o: \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_name_locate.c \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/string.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/string.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/features.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/alltypes.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/strings.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zipint.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/config.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/zipconf.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/inttypes.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/inttypes.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stdint.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdint.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/stdint.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/compat.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stdbool.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdbool.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/errno.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/errno.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/wasi/api.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stddef.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stddef.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_header_macro.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_ptrdiff_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_size_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_rsize_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_wchar_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_null.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_max_align_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_offsetof.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/sys/stat.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/sys/stat.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/stat.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdio.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/sys/types.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/endian.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/sys/select.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/time.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/time.h diff --git a/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_new.c.o b/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_new.c.o new file mode 100644 index 0000000000000000000000000000000000000000..b6654ee0586fe1abdffabe873b8694764ddfc5e1 GIT binary patch literal 1163 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 QhbuX6Wo~wHApCUYzx-bw6aWAK literal 0 HcmV?d00001 diff --git a/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_progress.c.o.d b/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_progress.c.o.d new file mode 100644 index 0000000..617845f --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_progress.c.o.d @@ -0,0 +1,44 @@ +lib/CMakeFiles/zip.dir/zip_progress.c.o: \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_progress.c \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/stdlib.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdlib.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/features.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/alltypes.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/alloca.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zipint.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/config.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/zipconf.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/inttypes.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/inttypes.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stdint.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdint.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/stdint.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/compat.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stdbool.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdbool.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/errno.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/errno.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/wasi/api.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stddef.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stddef.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_header_macro.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_ptrdiff_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_size_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_rsize_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_wchar_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_null.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_max_align_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_offsetof.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/sys/stat.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/sys/stat.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/stat.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdio.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/sys/types.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/endian.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/sys/select.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/time.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/time.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/string.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/string.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/strings.h diff --git a/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_random_unix.c.o b/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_random_unix.c.o new file mode 100644 index 0000000000000000000000000000000000000000..671ec84070633e34649f5b7c1f7cdfeca6a5b456 GIT binary patch literal 1361 zcmZ`(&2Jk;6n`_j_BviWyUusgqIch?c& zfCCgH4%|3^!~uyz&*h)s+6$-t1BeSqTo4i}Z+26uNN|{$H*bFL>-S~`ymZ6>fPH^? zc?so5d^TgVN7^i3n39182_Mr0{11hyXfistdcANMNiXS*Aoq!$!o$q(aH0#}B5HXKRNl~_s>FAAWPt8-D)K2w1?Xthsrq5AxZ z+P~mzceYKMOAx$k3k^AHXF^APCs(45(BTzY*qf}}Er6vih%%P2jAgsf7z8jn9O$5e z23Fn`b6qB?IEU4VF!_CcAI%4KbzCET9cx&hh$ryN6R|;2Hz;c1{2E@f zKUH;ZP!^kn+QLoTnuzO^#r4;-xPdob0hvGo3PcnWag%^I2}sF0V2N!y*}-kxnTT6N z+%BE&o{HOe`--?*miar=7O3yWD}sS=3<24h;K&PHw^DF^syG*=t}e=XRR*zZOo+`A zR_rfS-v3Q0az$B<+E(lE8c|8r)v@ltSGmnRWoh9&S`%Rt9d_P>1~%;cIuN@HPl?+_ z`-wsmc8ScFiO{9v!hvajp8Hv$04o&0RPkzJl`2^y)!HeMy?#~ks%4trDzv%>W_>S^ z=X+Ci`{EHmw{Frac}D#MgRcGAFdFd6uL^Aflp7xn$Gueg(?s?P3vL7BW%oTd%@Tk* z*Z?*In}crT-~!c~(i>^-Grp!A{7dJiQU)?$Kvo*qI@qPsk9l_UZW0Gx=DAni*_PW+ zQ}_Qo0Kju)S50IX`|jKCzwF^sX!8g2Q{LGp03yr@ygQps3 zFEj(-FRcP!>T}w6I&FT?tHw_{gFltmxiKX(^<|Q>8i~G4QyDn@3r0`div}O;-*sDV zYcS04&f_c_r^kCFKc4noKOXIc;dwDRWO^$74DTHt9>`8`)H*u4*EtMMj@q5Jyz907 z;Na+><@@bm|0IyDgE!!7)e0-~l7Y;6C(_G^`?S(D`_u5uDSo7;_1eaX$60g5_rlN_ zM!_(lXij`ClQ513&FW|xX2WwYoXVy(nr2=|!j_W+fdCB1e9h{R7SqMmPWf literal 0 HcmV?d00001 diff --git a/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_random_unix.c.o.d b/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_random_unix.c.o.d new file mode 100644 index 0000000..5ba9293 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_random_unix.c.o.d @@ -0,0 +1,48 @@ +lib/CMakeFiles/zip.dir/zip_random_unix.c.o: \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_random_unix.c \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zipint.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/config.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/zipconf.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/inttypes.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/inttypes.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/features.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stdint.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdint.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/alltypes.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/stdint.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/compat.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stdbool.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdbool.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/errno.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/errno.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/wasi/api.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stddef.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stddef.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_header_macro.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_ptrdiff_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_size_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_rsize_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_wchar_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_null.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_max_align_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_offsetof.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/sys/stat.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/sys/stat.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/stat.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdio.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/sys/types.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/endian.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/sys/select.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/time.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/time.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/string.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/string.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/strings.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/fcntl.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/fcntl.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/unistd.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/posix.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/stdlib.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdlib.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/alloca.h diff --git a/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_rename.c.o b/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_rename.c.o new file mode 100644 index 0000000000000000000000000000000000000000..2d0f5e83f5391b26df892ef8fc07757e7b7fe2a1 GIT binary patch literal 593 zcmYjOO>fgc5Z(3Kb>c*Fq)MDBu@*hFvYe((lPKIO;LH_?gS%djT{r8swO$9pp$_~4 z4shVkU*SK&jdj8SX|-?OjONW3Voiw=Lip=`zem7F{=-P;BXTEBWPAt1MY9E(B% zQ*jAprFIrV|J;pcd=uAIAvGw{;e-2AQO8*!AXXq*2?&!fy%a{?p96j%c88yw?uB7{ z6p%X_*pyIv6FAg4KRBsF(b76IfLCNRec7!3lLP$s}-lHVy`NC>YWc>e2xn zPL6_}5geJE(PJ>C*;Jd%L`2}9<;8T zmsiGqXp0-T@aXwFPvJ_^E zOZ4rtsqSm0a?o)GOt%V}K{!fUv5Afs3jO~`RMk3s#+eXNA=5&cYEiWXB`TSRUfBv= zY?){w^vhPWL_m~_Dq*4tPh};wVs&ly6=k*V?;QFHGBDfX5b0eFO*m+ZTt@Iw{{@2j BtmFUy literal 0 HcmV?d00001 diff --git a/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_rename.c.o.d b/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_rename.c.o.d new file mode 100644 index 0000000..5a94505 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_rename.c.o.d @@ -0,0 +1,41 @@ +lib/CMakeFiles/zip.dir/zip_rename.c.o: \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_rename.c \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zipint.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/config.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/zipconf.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/inttypes.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/inttypes.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/features.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stdint.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdint.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/alltypes.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/stdint.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/compat.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stdbool.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdbool.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/errno.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/errno.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/wasi/api.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stddef.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stddef.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_header_macro.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_ptrdiff_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_size_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_rsize_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_wchar_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_null.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_max_align_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_offsetof.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/sys/stat.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/sys/stat.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/stat.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdio.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/sys/types.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/endian.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/sys/select.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/time.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/time.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/string.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/string.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/strings.h diff --git a/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_replace.c.o b/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_replace.c.o new file mode 100644 index 0000000000000000000000000000000000000000..691c91aabed34e1e3a6d1e0bfc6c80849f60a9dc GIT binary patch literal 595 zcmYjOv2NQi5G6$`vSkA@P@q$QQfP(*f*dD~ZMa*|cJ5lBgF;g$MKMJY6y??#BBx)_ zp(xM~=&$sf+O1Tap#Z^m?;Y;l@rYPmVuTR>w%_lOb3@vP7PmJ&3l^QkDB^g_A7S4#er_OPBMBOto4!w?z!u~Z12lR+~ zv`+`)gQ0H?hqh*T7mn!YZ!!8$0<{vLFCez6@FAP1s zHAdBM&TV|#tS7uG&xP0?uGp5|0XOt&xtzlyT}@Z3tHm-XF|kz7p0^(d$YbNUGg{-8}OewptI8&zk=_t^Ufdb%7 literal 0 HcmV?d00001 diff --git a/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_replace.c.o.d b/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_replace.c.o.d new file mode 100644 index 0000000..081fd28 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_replace.c.o.d @@ -0,0 +1,41 @@ +lib/CMakeFiles/zip.dir/zip_replace.c.o: \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_replace.c \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zipint.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/config.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/zipconf.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/inttypes.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/inttypes.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/features.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stdint.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdint.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/alltypes.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/stdint.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/compat.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stdbool.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdbool.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/errno.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/errno.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/wasi/api.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stddef.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stddef.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_header_macro.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_ptrdiff_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_size_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_rsize_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_wchar_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_null.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_max_align_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_offsetof.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/sys/stat.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/sys/stat.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/stat.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdio.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/sys/types.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/endian.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/sys/select.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/time.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/time.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/string.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/string.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/strings.h diff --git a/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_set_archive_comment.c.o b/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_set_archive_comment.c.o new file mode 100644 index 0000000000000000000000000000000000000000..219a5da7fb8c8ab6c928f580d4c08e9a6a62f00f GIT binary patch literal 1623 zcmYjR%W@M}5WO>!EMrSZ*ai$3I1L5_Lbm*pk6V5f#pr7P55zhzWBBCV~IrkM>(>aNz3E!%ys3bAAMeBId8+IGY8r5oug zfjRk2qpeBTwO!4Vz6fn8Eiih%+py}ICBG7CfE*32^^WvBO#}PSU&aHCIXz z4b1y?o2ApyO@@CLWTS|oPd^6h-*Lt1o@CRuphyW6MFi1JiXk=`8WDpisN=jS1$B%U zby*ofETfLo00x33UQ%fgaSS@NM_o}@uxB+XdWfOYAPr*(!%a$*4pFisXfF~-VsAPm zFLf!!l&OL`kx+(vK53)_)_v?cf_)fqXp}ie`S0CqOt+rjv}B z#7Rs#bPA{XGETFMGdPViP0Ex;=qx*&Lk4GYt}i3YGP1j6oDXH>a2`2_rr2W|Q=O z;d+@?nW2nTlpVUk3^#UUCg>(^rauH>dpd8i&NbY^T9a;baqckVUEIbU-0c_V9*4cx z3(Hr}fctE?&w6*--~k?F)Jb}Xhr5X%G4L@S;c-Eo?1g%QCm9v=lnFN11^6@A&ixL0@;IJ^$r6Z8hJ@h1I!Sh2TwoBYy+@9-`_X-vBg4eMpnnYIEQ z6^9HMt4XCtP-TQf6|zh&(&p<+awR(WcWqFNezoXf^_0Mf;M?TsDr{*9{Qw^&U4Ffbtg8HmL{#uf2jz_F+8+SQIBT~A5ytHHBN zR&$m2O3W~ItNvnkW-33GuQz;THhjPBElu6*4x&knUZrr+4o&5q2bS{+}nm@-#4?TT)C q*-^{3d{=L`x!So}+YhFDHs#8iba_h4od3Qpz3iaZs9QPtwf{d2DRzVa literal 0 HcmV?d00001 diff --git a/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_set_archive_comment.c.o.d b/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_set_archive_comment.c.o.d new file mode 100644 index 0000000..5773743 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_set_archive_comment.c.o.d @@ -0,0 +1,44 @@ +lib/CMakeFiles/zip.dir/zip_set_archive_comment.c.o: \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_set_archive_comment.c \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/stdlib.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdlib.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/features.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/alltypes.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/alloca.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zipint.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/config.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/zipconf.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/inttypes.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/inttypes.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stdint.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdint.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/stdint.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/compat.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stdbool.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdbool.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/errno.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/errno.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/wasi/api.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stddef.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stddef.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_header_macro.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_ptrdiff_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_size_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_rsize_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_wchar_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_null.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_max_align_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_offsetof.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/sys/stat.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/sys/stat.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/stat.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdio.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/sys/types.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/endian.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/sys/select.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/time.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/time.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/string.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/string.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/strings.h diff --git a/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_set_archive_flag.c.o b/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_set_archive_flag.c.o new file mode 100644 index 0000000000000000000000000000000000000000..c62c64fbba7a14fee31095e5ea45ffc00abb3f20 GIT binary patch literal 1120 zcmYjQU31z-6kV+#V89WviGvf8+#5TI9Yq)$BZBi~#YtZK+BZc=3l|Jn4XEfT~t8>mh_v$Wl(y_uAQ$Al^T`~2OI-k##`C?(8 zxZLwE@=Hz?;Y_pbzz>C!*kdt{l1t9mbvVr&_ri`NKg>j;&J`J6|K5*nkt9)Kry^sE zSjCn>_uL7G!ed@?jiy-8InY>PmV)7a- z+~ifr@9`SmuyR;{8&LR&MN7doD8kwVOZ=3dLg~Xglc+kDts+*S43!bCTN`-OVyMA7 z+yt$ad;SUAO~xCwPwt_lU4aQo+X3-+j0*Sr4EA4?f~UDg@vmzyy)XK(auF9})A> zSA%ujfgRa_U5n#m*oDUvd_w3aE5lEz=skD}dn4Spw(%Kh=&%pZKwlO8oHU<*)vTdG zVoflhIl%)GJGd6BVhdU;;X^o-ZjT7th9hWC@EDH&Yjuaxn9u>U`s3n%c1fnYqP`$c zJ$M1V5uR8Yz9jG~IDwb&YUSxQd3r59@$z+(-YlE+7T&@e8Ux~-66TaJ3qS)cnwfVL zdN;x|INM#$jHQ*?@6tknX7|DmhrIZ!JmwhVH93tmoVJs==l)FCgTNW`Dr53d*l!Y7 zN<LNG><7;N=A8Yhs_d5>FZ_{H*gq1x7AKK6bw!dY723KYO@(Ll zFO|F-(8zy#bl7Y)TSGsCz4I)K(~|?*pHKTuHyR%V!EE_5h&mE(2FKlQN0?r()$1Lb zU2o89n{9FEv|X>$>$F_A?Hvs~(dz88&(vh5Wll1rVg|y=rin<4dbvLhE{x@6)wTZ} zj400ZE!PPG!w)?_p=?Gp6G;$-L%lSf2AMx|f~nB8@icS#fiQ+a)OUhZ-wdNLOPn~S gP8x$alUH8X5-|{o2wh=hm$69oV(Je=LwuM03%9!bg8%>k literal 0 HcmV?d00001 diff --git a/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_set_archive_flag.c.o.d b/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_set_archive_flag.c.o.d new file mode 100644 index 0000000..18e2956 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_set_archive_flag.c.o.d @@ -0,0 +1,41 @@ +lib/CMakeFiles/zip.dir/zip_set_archive_flag.c.o: \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_set_archive_flag.c \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zipint.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/config.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/zipconf.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/inttypes.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/inttypes.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/features.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stdint.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdint.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/alltypes.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/stdint.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/compat.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stdbool.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdbool.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/errno.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/errno.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/wasi/api.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stddef.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stddef.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_header_macro.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_ptrdiff_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_size_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_rsize_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_wchar_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_null.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_max_align_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_offsetof.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/sys/stat.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/sys/stat.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/stat.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdio.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/sys/types.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/endian.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/sys/select.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/time.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/time.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/string.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/string.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/strings.h diff --git a/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_set_default_password.c.o b/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_set_default_password.c.o new file mode 100644 index 0000000000000000000000000000000000000000..b7b8a424451df9f7f744178c6263957b10636152 GIT binary patch literal 901 zcmYjQOH$iF5SSl9-ezX20^_?mLb7!0PI6|Mxb%r-kCOJgG}OJX!~LN;=8hE(>+ zE;q<2a)BHnt5ju?Wm+~xrAnVSZ~Ar5>z0Ta4k;moejbmpgf}X5I`?T1*o<)ssSy37iR)w4;Eqgr9rw z1RWuzFFT=7MAJSd1t`h>K|ttlMl10yQe(ndyT~Qm4ftQ9{@ zY?P)I*I^w>O;*Md8&HCcYrcsk%CHILd%lH7-FnpO{8?M)+wcsw?>MyQIY-G30C3nT zPP&DLcG1voVo1w9dD_Fceb|G2tdc`~fH4OcGqIfKhuF>vQk6S?1V@kUJS^nM_vDxv zobABz`b__pEYmpLQZgzWQpXlOGjdfYFvIYzFKt#NB)KRlGV(PE&r0F?R_(>>msi?M zCPOo2N)#hMs7Ai9ROT0>ZQplQoBz5biilUlu2?>h=A zw@L-!^JB!fQMYFK!(-PSO&P)X$H|C!7T-C{y;)PfwUCk|NZrxo+eRjOq7WE&R7I{6JM#Ez@-k$Fm)Y)eL_m zr0aYAYIca-a7LyZiE3dODYNSeqwo4%(+#Ujp6@AX1_3tH=mjeIE2;%4dO`}%5{7yR OL|D~Br|%i!o%#oXLEMl4 literal 0 HcmV?d00001 diff --git a/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_set_default_password.c.o.d b/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_set_default_password.c.o.d new file mode 100644 index 0000000..d476239 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_set_default_password.c.o.d @@ -0,0 +1,44 @@ +lib/CMakeFiles/zip.dir/zip_set_default_password.c.o: \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_set_default_password.c \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/stdlib.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdlib.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/features.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/alltypes.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/alloca.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/string.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/string.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/strings.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zipint.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/config.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/zipconf.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/inttypes.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/inttypes.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stdint.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdint.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/stdint.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/compat.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stdbool.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdbool.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/errno.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/errno.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/wasi/api.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stddef.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stddef.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_header_macro.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_ptrdiff_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_size_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_rsize_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_wchar_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_null.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_max_align_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_offsetof.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/sys/stat.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/sys/stat.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/stat.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdio.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/sys/types.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/endian.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/sys/select.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/time.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/time.h diff --git a/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_set_file_comment.c.o b/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_set_file_comment.c.o new file mode 100644 index 0000000000000000000000000000000000000000..042b810d395230970bd868a3c6fff739d977454f GIT binary patch literal 818 zcmYjP%Wl&^6rCC8;k@d!P2XvIM`h8VpCmZB(vl=WS6P+G zl>AbEGa3u##$e!k0kipF%BCT|BM3dhv9O)VAPT)eFs>z7!IgJjG+>;Ed=N8%Qmm%1 zk>@i74V-W~Wr09M`=B&1Dt?y>gufB3mf-tBawOpeqM1I>EMy=%p*hGsNkPZ~>X2<2 za969!Ksux>gVrHB^L<2h$b9qsOF*ka{utqIgBl{LpDUfBoW8%jQcs z4;cNx1pUEU{xiYow;~lH9=bD!@fero(qVDTTx)oTvyN{E<2UDLjb@`c_5>VX3lYUn zPv!c0Hf%`EQ{SI2Kb9=LVUB={Znw=kZm-$vU39wcsMqSW*qPmO+;*?sbexuZK5|*J zeS$tpBak6%K2}pOTg*6%b+a^_`4ek-^-SZx#0n!}ZaTK_TVCLLT&h{&oN+%4#%6Ik z^MyCJ{TVZj=}g!|pIKu+9NK3BQ!J!G%zp>vL)L>PA<78 zm*kN5a>^z59CFJgr{v|I$Ti2j+?;Aqu-;?np6aS!Re#e{BXW(3A%rl#UteDrJ@bLq zTB~KW=FL{CCFW&&Zt%=tqx|+G`vgr@U5;h5PN}MLUbdntuD2qE*f2NzoV}E-xuvSF zJhNqJbKh#ImQ|kTdfA5ZMcW2#v)xL~Q;kN+tun}8bo1FpvsQCGU*(0=q4BKt%a=S= z^|J*}DPd~!w#{bSajQxM%rEp74AJ}NS9<(C9OCqAT=-gouesI{US1azus}Tspl6AK z2p(-45roLdejbcTGtPs|$S4nHMurg_G~*OPFd_RXjPRhDrY#6z%X8|r42qx^kvc`? zw46qCrcZPn`>Zf+MIW}7DQ0b_xFu*CVu)i~yq(c%(RNO-JtGIAMx+z713Pq%otC6s z*oj?r+Re<}UFIHU_G1tF%e2?pOZ%9)AA7M6`@75mW)5s-9>4+3JjkJka1e*;1ZJYk zBwjcS!r?L#;gF1V+`XyO<)8QWy)|=CL;q{ zs{l=6G9d+>X8aURV``Spa8+k<250MZuKh61@g`a3^EgizHZ%^9Wot=n5|5$}G(=cos95t<%*u`09pw0lJ23x|r)+#SL7?jjME% zop0eLZq?~F%W}KxdIxv3>m24Z`mVJ`_iz{Y>U1A-xWAD)Ko9UhyFFy$BRs^TjJ(^~ z@MApI3s3Mw$3JEE(~jf;dWL6u={cUq+pj<;-~}UI;ssu^W|2r&fLC~>onP~67O#<= zrFkwnhk4}cw7}SfZpk)mohy%g{LA)(RvmHy1t_L6q6mfJEG;skghiCR}q!6{S4+DcUpaZy1PZud0QSo)ei4Q8bM9z?0$N#nuOl{U~oJtO(8Ovo_#)~8P< zHQ}RKr{#|08@$nuZ}Aq(UAR`G%Lj&Ln&oO_LPw-XOg zi(A9G!M1gyOdkz=G&b5pD;5#IXbD2x^_EK2q746}Z-YVv`gMciww5iF9JRTl$+!^u zXNb5IaZ~)PBYHjMxc1QHxhpefB(%c_B@FSMA;sT({VJvSOPbC?)6tQk^iaB3@{w5d{aWM9FwYm8 z3q#yzhaG3R^Oxe#va)@QPfkv#OnxdoH8q}@%onD{GGl5aH)iK2rY6$1J(eFWU+6bjYUosYQFxCBx9Z`DEkv?d?@%)4heB zLV*g?J%vI+O(!$-%FtZ3b9QGvvZSV$6#nK-1%1aH!Km`sshQQ$XtF(J$Fk8*yEC1g zrIjk0bNN_&Mzky4p32)8JrQ9GMWXQMeguN+%xE}u=>DW%;w;~|#zRBJS4 zpQb#5e5`6xW_;&)TVcG@eYS?Ej;tRRlX~2018gv0Pg;mPjby0HI?`*hyP-_y^2I;GzyG zU9Tcle)~Fey=B;7sZEd6zo)UFdpzvYw2} zDT9>jI4I)hDhxtZ2UkaiuoY1}7}c;a*m4*n1s);v!7Ss2s&LsIg`{r5tGtHN1zb zzE;$YLM=vha4@oEi-$*JBt~a=40gvD?17-=G>uJpLtzaOHWnd_ZQ^kvY&^zce1<1T z!V`p1$}>^?CYn?{PI+oL9O(^l9m1%~aJ~4|yR`;42-GArV3IZ0(Y0s9!;RPzjZM6l zK<|ycuy=;{!9K-Qz>}rK5lluTto;>Ie*xH6==K#^#a`^^CcD3^Ou>HGA5$>Jn&-eb ziDy%t$J$r%R5W4gG(JFB4#WXCFvAClu!9_)ksgZ=c5j|Ta4-%ziVqdH!*D1L%kbei zykE=_IKrB5kli{SDRn#wN8+dsJ~~p)$B2SsaWsy>vHe{>P81y1*JZlX1$Ce5$xbaVnx2o{s7LT4IQ~T7Z1a9WcoRxC0$ETJa2lOJW9+Q@K-!Q|Lr0 z!)fO(Oc%)m+=VXVoI$2Whd65xz&T`*vlcj&&kIa9^5~w*GX>@}%*1IKK3y13pQJ{( zeViq;Su&G82Gs~YL;TLf88|b;XGuBEa_^Y{pN+F?w3mAXv49>Fnz)z5bvB`wFq<+w zhcJiwrOhSGB_nPgVIElv9Xa#KO>zN2j`7Q`ha0+#e) z*7H)5PA?-YB`l*3UQUrJUO|GelCYexg0Pa@mb;Z$MOa0}?i6^nkYlxQHdgA2VzO%t z;W>mggmZ*&tq=<3+CItvuOqB;(pXPeFM|+oAZ#E$mx?bT@OgyujG+SO692==u%6F1 zQZFE!Pq;v&UT9SQlOW4-mg7RQ7C9xk$f&wVRQbi@Vv->)mP%Y=gk4Iwgm9?{yUbML zvOZbh%L$hcWOjwYxWdWIeKQ95O2U;Q*UK9X^Hqe6gsW&OUu|%&AzV$kMsTln6TY?& zIl$Kuu5$vfCtU9&e1k#1!St$_a)56n+$d{`Z!+jN6K*2hEaJDZxG%Tw6_e}TYb6K^V@{C9p(RX zlveUPCj4E3%-bNcd3jy!?^D`Izt# z;bW2Ui3$9a@Co5l3EX64Y#IprjPRKg_Br8m87TgO3%l}|3Ubj@P|MSJW_uW{&c{$5Vpu5 z#J$=LnXNHfn_|t;kfT?2TA>Q};Q-Ion5*4aT>sNKPh*}FFkfT73=}WWQl^C(3p5t$ z3@_4BrbW8{UAR+R=#)&*fLypyseyPG*S;tzLH98cHyiP}Cr@7vk*Xs`6ps_(0cbn^U zb%lD;l+h>q{u#0n*Z#ZBv`Tp^-JP-Q?4xE!t}Ug^LCVs~@+ixztP*9FD$A!Vzp~1d zRj#ZG^^*xN&)TwqAHCn<`%m#~@7tYxdy%@4w3@56+N?e5Dvwt!@s_Af-ct2QiBD}R z(dyY!pZdV(SDXE1>a8-ZzAW>p`4#2ri3*=uR8_8?uJWn-MeZlnKJ|iCsd|U_)Yn4> zspp3J)W)rRzH5h(`q_||b!F3u?zo-JQKbyy@||HPg3Yt2B%X|=T2B}^c64ZTsI@(h znznqtD>rG3jN7`KN5|8hW0J|4?kOmt9d?T$gBR7#|*QkByCw zCnh#b48`N)6XRMEc4*>AwN`ecsyZLb%Ev{t#g65>vv$s3ThZK|oDpy~r{dHoFY@D98p-j#kjIGPrb-E5AYCefbTDy(1gJ)2 zkP1YmDM+bPbmn?IR_QFv!0bnwzD87rG{~>$Tocm_%t5A4v*e0gLH1@IO%LZFS0ISa zHxYdT^YG*aRRpYp0&1Tw2z22;x(JI2nuokPshlneav7FjxldO_MJty`$&svZu8MaJ zR$;AA*M+d22sk@UxFIraiqf{4i*y?{U=y}rTYW$I)g1xv)Fn~ciG=8`pa6COUQ;Rp z?g53pKHV40z6dD7X-J_5LOFy3IPB9S(Wqmg9^caf6doFNq-4?eBzRg}W7l>&ME;s= zQz%7NA6-l_0RD_ZTqb~`X37F%VrDrdn-$=9RJWdxddP>kYF+zW_l>R|5 z`jc>Te&AV=$$}8)glV!cWR}(%;u+I1+|HZxvr@TK?${g(cbxm-<*BgmqE^ZDdZ&&v zm@b+)de2M_7xj9T)vQLj(YUD9t#+eQtFSYpVp`QkwQQOd>%48Ta`gm#7TrS%H-Zl1 zdYc(M3Rox?v#rSKYSXbTDvvgr=kwx9GK8A#T6Q3^Y2JVZj^}oYnO@{@dtf*bD=NK+ x8!d-v9mi`KPFT#lp34Kn_eCSMw$GE{FDe0Rvw*oK)A-P5VNnk4j;pb^{2#Bu-rN8H literal 0 HcmV?d00001 diff --git a/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_source_accept_empty.c.o.d b/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_source_accept_empty.c.o.d new file mode 100644 index 0000000..41353bc --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_source_accept_empty.c.o.d @@ -0,0 +1,41 @@ +lib/CMakeFiles/zip.dir/zip_source_accept_empty.c.o: \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_source_accept_empty.c \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zipint.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/config.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/zipconf.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/inttypes.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/inttypes.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/features.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stdint.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdint.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/alltypes.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/stdint.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/compat.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stdbool.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdbool.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/errno.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/errno.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/wasi/api.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stddef.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stddef.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_header_macro.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_ptrdiff_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_size_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_rsize_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_wchar_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_null.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_max_align_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_offsetof.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/sys/stat.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/sys/stat.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/stat.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdio.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/sys/types.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/endian.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/sys/select.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/time.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/time.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/string.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/string.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/strings.h diff --git a/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_source_begin_write.c.o b/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_source_begin_write.c.o new file mode 100644 index 0000000000000000000000000000000000000000..83c678f55d04506d5adb298698302521df282631 GIT binary patch literal 899 zcmYk5%Wm306ozNU5D1r=+{isSlaPeOG9e)l(N$=hcG*QY-8se##9(Y^JkX{KOuOzf zPf+y@`ZksN5M8zEs$+;EB+EMUpL4$7b7qXpppOwk_+dOABjpB%IJ{B9Fhn=8FdT(= zM1Dq@n8MtlY8Z~~GLsv9*7x{5LFiEqglY8*-?Lr8xDw(>&VI6egK_S0BVYnew44!% zfj8h5Gc40_5K+EFe2h~6WPtD=65p1tI3%M~xGz&Ss(@0Mh@b$fkt8TZ zlB6++6$zs82BLEihq*U2(ZDnb2}s`2d2&UrVE#Ibrp2j7hNd9}=`PJQwrEy1J%bEn z;aP4%ZiG~obhSn@8JwQ>Q=B=TReJgM)wMF0P;sJw(TJd5 zn4qsjN&F@l{f+A8eeSge7UKcV$k1Xzz*>6q9>*=mbUW|Q&r0P|xnm0`-U{Id&rfB1 zJ7|_HuYc+|!|6+xtzBjbxVXHmvRbQNuGcSWm#ucaQme2tvtqTX^=jF&Dy{Q&i9Tvv!>20bk7%BKDwj2?Y3+#-E?orxZ}AUE!7`5 z!XBE=fN5%fAk3!2^p4{-O()QnT+bEU^nE!;z3q$Wuh3M^+Ke;TV!F8ZS)e5YyW{HY GqxcVwY2W1l literal 0 HcmV?d00001 diff --git a/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_source_begin_write.c.o.d b/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_source_begin_write.c.o.d new file mode 100644 index 0000000..2d56a8b --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_source_begin_write.c.o.d @@ -0,0 +1,41 @@ +lib/CMakeFiles/zip.dir/zip_source_begin_write.c.o: \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_source_begin_write.c \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zipint.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/config.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/zipconf.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/inttypes.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/inttypes.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/features.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stdint.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdint.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/alltypes.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/stdint.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/compat.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stdbool.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdbool.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/errno.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/errno.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/wasi/api.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stddef.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stddef.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_header_macro.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_ptrdiff_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_size_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_rsize_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_wchar_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_null.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_max_align_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_offsetof.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/sys/stat.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/sys/stat.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/stat.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdio.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/sys/types.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/endian.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/sys/select.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/time.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/time.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/string.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/string.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/strings.h diff --git a/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_source_begin_write_cloning.c.o b/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_source_begin_write_cloning.c.o new file mode 100644 index 0000000000000000000000000000000000000000..804aafa55d97834f2690afdc358d3ae445fbe3d8 GIT binary patch literal 919 zcmYk5%U0Sz7{@0Q5aiO}{f7FDqJlAqqHyR++S)F==%%|E!hnI0#L0x#E(rGW25n!U z+rB~Hr0YIJ&*`QU^msTY$$ax&e*erjGsy4<5<*D&HXe_We1*f26kf?;7^16K7>+_| zgnvh&m`t6aqU*NhP=o0MI&j%7M(DxqbHnWGo@+UrGC7nYclLwj>69^-=|1IX;>+og z({}@AQr$Fc8)5ll#FtR&^QUOMljHeFHN>M-xGO?qL~t`lWWXTzNep6zi4$UgYB(td zsV*ak6>*ZpAzs9Y%rp^6zzif_kz`XMvyg<@8jJ+4Yp@O*kNCX6=cnC|M<{Saogl*UY$lXoaK%OD80|a*7 zkX<2LfL$oukUb&0CuGI{?hD}lH1I&A72yDiHCzzTl8Bc?e6pGhITUSGg-h*`BRG0! z>!FfHzaqJW*y_IJbaC=$G>svIx286)MZ1=xzhf2`8)>^vl$k>)dL;BCsz@lc^uOhSPNQ0@(i5X< zw$B^q71OM?PdjZ|IWM8FqOVBd2J2F;cc{SwM*XCkZUuHX=mHw;uJ?q;GW{jlSpq0YLHN`2YX_ literal 0 HcmV?d00001 diff --git a/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_source_begin_write_cloning.c.o.d b/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_source_begin_write_cloning.c.o.d new file mode 100644 index 0000000..19ec3f9 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_source_begin_write_cloning.c.o.d @@ -0,0 +1,41 @@ +lib/CMakeFiles/zip.dir/zip_source_begin_write_cloning.c.o: \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_source_begin_write_cloning.c \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zipint.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/config.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/zipconf.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/inttypes.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/inttypes.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/features.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stdint.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdint.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/alltypes.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/stdint.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/compat.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stdbool.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdbool.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/errno.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/errno.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/wasi/api.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stddef.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stddef.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_header_macro.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_ptrdiff_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_size_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_rsize_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_wchar_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_null.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_max_align_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_offsetof.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/sys/stat.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/sys/stat.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/stat.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdio.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/sys/types.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/endian.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/sys/select.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/time.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/time.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/string.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/string.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/strings.h diff --git a/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_source_buffer.c.o b/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_source_buffer.c.o new file mode 100644 index 0000000000000000000000000000000000000000..2596149bd887e8248b48bbd8c317235bbb379776 GIT binary patch literal 16267 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 literal 0 HcmV?d00001 diff --git a/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_source_buffer.c.o.d b/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_source_buffer.c.o.d new file mode 100644 index 0000000..ce91b4e --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_source_buffer.c.o.d @@ -0,0 +1,44 @@ +lib/CMakeFiles/zip.dir/zip_source_buffer.c.o: \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_source_buffer.c \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/stdlib.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdlib.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/features.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/alltypes.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/alloca.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/string.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/string.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/strings.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zipint.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/config.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/zipconf.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/inttypes.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/inttypes.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stdint.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdint.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/stdint.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/compat.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stdbool.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdbool.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/errno.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/errno.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/wasi/api.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stddef.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stddef.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_header_macro.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_ptrdiff_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_size_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_rsize_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_wchar_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_null.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_max_align_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_offsetof.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/sys/stat.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/sys/stat.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/stat.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdio.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/sys/types.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/endian.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/sys/select.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/time.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/time.h diff --git a/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_source_call.c.o b/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_source_call.c.o new file mode 100644 index 0000000000000000000000000000000000000000..9be4ab7884f66b6ec5b4cc6cb87b513263b26dc5 GIT binary patch literal 1311 zcmYjROIO=g5Wc$d3ksp72>bC0A~Jz~ z^fW;-NsmHLJdo;XDvu^2GBS^K#>=7`_6L>>vfU^*jwNSaTmYZ+` zW?>F)0*nRR!GX7k{#Hdz4CrseZHbr-5$9oECUYm$a*&hwcSC$F#LtKL3vdVSf(Ch5 zfb3W>zmTCo3h!`U=fyfu}F0-LlKs{SfaL-&a28`xfa0+l%cYP_sFLT z_n_Lv74lgb_}s5uzz1+29&F)5@_7Ug;ZYYK!{b43Rw0J9dIIZ&wg#(EgF39Gzox7h zu2U8punrr$xJl7lunAjTd=hl`$pGOgjqe#eg=dHOyq3WiG?JI_9A3c7aD0QNy&}hL zcm>;s_*%Au;f@p$d;_mx2i}D4$>eztcBv)1H1j~s;#>Mv-;wFvA-;$A=fCRPRFZv? zxyI?H9kuKxPy8s=2#Y9bUEV0q>A9xRO~bNynz1yC()qLW8Fq!`nEAEs^$j%{Ur^%f z3j0IhvEMn%{K?hWPb$y+qN?n-2xA|koc$W*@xP-A`z(WpI`9ibhL-vF3cf6GadjHVd&znwr!Lp9SL!;0`y4!#iCI(8>MQgV4B6o(m_KMO7rX^jfSOs!)*%M3BvGuuJ97MS7Ov&k&D?OiXZfvT!|I7#s@)4Vi`KN9eZ%r{gG hTeX9ZFSk`L<%$F03fmN#f6@_NF5$JBwkE#x{{>0vEJXkS literal 0 HcmV?d00001 diff --git a/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_source_call.c.o.d b/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_source_call.c.o.d new file mode 100644 index 0000000..2a63075 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_source_call.c.o.d @@ -0,0 +1,41 @@ +lib/CMakeFiles/zip.dir/zip_source_call.c.o: \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_source_call.c \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zipint.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/config.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/zipconf.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/inttypes.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/inttypes.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/features.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stdint.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdint.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/alltypes.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/stdint.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/compat.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stdbool.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdbool.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/errno.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/errno.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/wasi/api.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stddef.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stddef.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_header_macro.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_ptrdiff_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_size_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_rsize_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_wchar_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_null.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_max_align_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_offsetof.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/sys/stat.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/sys/stat.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/stat.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdio.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/sys/types.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/endian.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/sys/select.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/time.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/time.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/string.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/string.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/strings.h diff --git a/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_source_close.c.o b/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_source_close.c.o new file mode 100644 index 0000000000000000000000000000000000000000..7b2c5fa4e1a95f07eea798685dddb5bca1fd2fb4 GIT binary patch literal 924 zcmYjQO>^2X5S3(72!`N%lJBhYN#YntNXXDrXq#zgdg!$`#~48j#&%@EG(E($z4p{e zuQ~SCKh){1f1=0AkaRNRv8A{B-s-K^$O?NHA%yRS!y!^GafG8wC5j?+nTVp>2;Y)l zaU`KIZ;&%h*YTLe%^vId{DvU(0Efb|yJp}!o?u*wa13WZI)TYJ_qiD|fkv2S#$f38 zxy?-5a$Q7}&#^v6>F;0S?>9xs%c}WkOTt4$ab2SXFpw@)K-nIFpa80p6etCfq6tV8 z2+)Z-qR(Igp1q~XI;JT|Lh71Ml5=tnlUX#*P1iG2g*2!gnyJswtmI5V2C^`vjfCqF z%}McGm1Htl9dk6$V*P0un}KPV>CjowV75wN9G`=^I6g1y%s7V(k(`>}SV8x4c>WNQ{HkE|H_n|5xZmvCjE6WQmo^JS)-)P7c*1rqul@e` zs8}wR+m3+3l@LMryd>9G{YKIDdnMN$j9-SNc9<>TUa>C+mCd?MIM4z)TrK^p;+cn06uIHX?3_lS1LOi^N z<24;Fs~P@)ao6|Sdb-zlg)^|+KGSo(zOWiDGup1-u-s6e^?XloD+pv4jaDGy-$l=H W)?%D_HZ#Ocz(PG0I&IHjAH+Y0Sm4Y6 literal 0 HcmV?d00001 diff --git a/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_source_close.c.o.d b/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_source_close.c.o.d new file mode 100644 index 0000000..f8627bd --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_source_close.c.o.d @@ -0,0 +1,41 @@ +lib/CMakeFiles/zip.dir/zip_source_close.c.o: \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_source_close.c \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zipint.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/config.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/zipconf.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/inttypes.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/inttypes.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/features.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stdint.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdint.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/alltypes.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/stdint.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/compat.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stdbool.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdbool.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/errno.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/errno.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/wasi/api.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stddef.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stddef.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_header_macro.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_ptrdiff_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_size_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_rsize_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_wchar_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_null.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_max_align_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_offsetof.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/sys/stat.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/sys/stat.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/stat.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdio.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/sys/types.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/endian.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/sys/select.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/time.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/time.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/string.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/string.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/strings.h diff --git a/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_source_commit_write.c.o b/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_source_commit_write.c.o new file mode 100644 index 0000000000000000000000000000000000000000..a5af81d52d9d9725a4d711b515e78e4a71aadb08 GIT binary patch literal 1150 zcmYk6OLN**6vywqf`9=B#ZK%z?Btx7BshvNHU@(8vixdivdAKv?qne@L|8~53AgUT zavvWdAEMJQ&_zE%SDneaU!uD%djt-{j7B>5JbwTCI9JRH2b?j+KVMy4G3AuUJU&(8 zIA*7*IKGVerT90Aq!sC%7fsW3JZS~yKo0!iLNIpi4kODxGl#z8MKVxgp12o(bcUu3 z0zWWA8L^2^O?;t04s2=Kt{=)NK{e<7mg_R1{G7;gmizK+^8GuNZqQ_SEG`T228FH| zazjM{9K;zapp+&~P=GZ=7L>BcVhU1a!7yzwya8#r@eO7Sj#%pH@C2UD@XrYUY#v{Ra)RHa+~=?f&)=g)_!pqT zixKLC*Jt<&RMej)d%i{4RoH^+x42E&JFpEqBdk$&jk0Nvc1dP8krDapO{!B#|HtTCn#KUlHy#yn@#wd_%Z5Gx4{Ez<2N#-Zeyt1olZ_e|{YX z@eja&gCx%Ikm83FpQsn`h??Y>T*rMpfs^YdIV$GaAIW+$)X!&**Av;_l3|+Kado~G z{lUPA%Q&pWb#}TPS*>rf&vbUI z7+FD2MrK!9(KwJ{R?D}??wLNl%35)5p!>r}Te0aL>W$fd8)RsNpivnvnq&?NU!zlS7XvIKwWgtCU>e0nehFUgsdY&$S Gi2etX;tccv literal 0 HcmV?d00001 diff --git a/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_source_commit_write.c.o.d b/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_source_commit_write.c.o.d new file mode 100644 index 0000000..42c17fd --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_source_commit_write.c.o.d @@ -0,0 +1,41 @@ +lib/CMakeFiles/zip.dir/zip_source_commit_write.c.o: \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_source_commit_write.c \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zipint.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/config.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/zipconf.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/inttypes.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/inttypes.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/features.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stdint.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdint.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/alltypes.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/stdint.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/compat.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stdbool.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdbool.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/errno.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/errno.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/wasi/api.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stddef.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stddef.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_header_macro.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_ptrdiff_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_size_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_rsize_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_wchar_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_null.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_max_align_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_offsetof.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/sys/stat.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/sys/stat.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/stat.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdio.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/sys/types.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/endian.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/sys/select.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/time.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/time.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/string.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/string.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/strings.h diff --git a/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_source_compress.c.o b/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_source_compress.c.o new file mode 100644 index 0000000000000000000000000000000000000000..35c75499ed98dd5ceae239942d669cb6253ec4a3 GIT binary patch literal 8706 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 L;NVCzQu2QRLl6F; literal 0 HcmV?d00001 diff --git a/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_source_compress.c.o.d b/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_source_compress.c.o.d new file mode 100644 index 0000000..998f6f0 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_source_compress.c.o.d @@ -0,0 +1,44 @@ +lib/CMakeFiles/zip.dir/zip_source_compress.c.o: \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_source_compress.c \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/stdlib.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdlib.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/features.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/alltypes.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/alloca.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/string.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/string.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/strings.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zipint.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/config.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/zipconf.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/inttypes.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/inttypes.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stdint.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdint.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/stdint.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/compat.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stdbool.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdbool.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/errno.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/errno.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/wasi/api.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stddef.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stddef.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_header_macro.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_ptrdiff_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_size_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_rsize_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_wchar_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_null.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_max_align_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_offsetof.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/sys/stat.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/sys/stat.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/stat.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdio.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/sys/types.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/endian.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/sys/select.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/time.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/time.h diff --git a/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_source_crc.c.o b/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_source_crc.c.o new file mode 100644 index 0000000000000000000000000000000000000000..c25efa3c6bcbe607018bdc7b09972dc1030d18e1 GIT binary patch literal 4760 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 literal 0 HcmV?d00001 diff --git a/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_source_crc.c.o.d b/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_source_crc.c.o.d new file mode 100644 index 0000000..290fcbc --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_source_crc.c.o.d @@ -0,0 +1,59 @@ +lib/CMakeFiles/zip.dir/zip_source_crc.c.o: \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_source_crc.c \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/limits.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/limits.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/features.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/alltypes.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/limits.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/stdlib.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdlib.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/alloca.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/zlib-1.3.1/install/include/zlib.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/zlib-1.3.1/install/include/zconf.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stddef.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stddef.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_header_macro.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_ptrdiff_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_size_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_wchar_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_null.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_max_align_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_offsetof.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/sys/types.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/endian.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/sys/select.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/stdarg.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stdarg.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdarg.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stdarg_header_macro.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stdarg___gnuc_va_list.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stdarg_va_list.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stdarg_va_arg.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stdarg___va_copy.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stdarg_va_copy.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/unistd.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/wasi/api.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stdint.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdint.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/stdint.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/posix.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zipint.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/config.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/zipconf.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/inttypes.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/inttypes.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/compat.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stdbool.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdbool.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/errno.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/errno.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/sys/stat.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/sys/stat.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/stat.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdio.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/time.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/time.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/string.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/string.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/strings.h diff --git a/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_source_error.c.o b/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_source_error.c.o new file mode 100644 index 0000000000000000000000000000000000000000..6117055043b2fa80d8a229d427a099ef79c8015e GIT binary patch literal 633 zcmZva&yLeD5XSAKN%|*JDj_)Af#{N;2yA^aX6@zMI(#+D6oA0&y$B`}>7 zP$+${5PFa+!}u;KRW1!^`-tt&_Ygw;AD>z}#_sWXBb^Y%%OSN0Cf1JH#3pEF`NSSs zKJ6@h>W~g`w$vqVFxX=M|ICYfqkmb_8J_JO;*2ar-6f(Paf$bqc9)p;NSE~PXuqjF zXu!di`ow?m=?4S!ySeZO5;zEf1d5Icy3*3g9$CRqbBwT7x24pz0;Mdz7@!J{Nnr3s&LCPb9WG}leF zNbNxjC9|+!)WYO@CTa+SqBd+LAj*VVF;Rt2q>@InvTXVptxMDXj4;r!1`U!!WDX@% MVYkXN8Nmnh7gUe3r~m)} literal 0 HcmV?d00001 diff --git a/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_source_error.c.o.d b/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_source_error.c.o.d new file mode 100644 index 0000000..50eabac --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_source_error.c.o.d @@ -0,0 +1,41 @@ +lib/CMakeFiles/zip.dir/zip_source_error.c.o: \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_source_error.c \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zipint.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/config.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/zipconf.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/inttypes.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/inttypes.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/features.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stdint.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdint.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/alltypes.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/stdint.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/compat.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stdbool.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdbool.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/errno.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/errno.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/wasi/api.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stddef.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stddef.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_header_macro.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_ptrdiff_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_size_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_rsize_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_wchar_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_null.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_max_align_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_offsetof.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/sys/stat.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/sys/stat.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/stat.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdio.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/sys/types.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/endian.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/sys/select.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/time.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/time.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/string.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/string.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/strings.h diff --git a/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_source_file_common.c.o b/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_source_file_common.c.o new file mode 100644 index 0000000000000000000000000000000000000000..7df7a01824a68146703d36d58994570863418c51 GIT binary patch literal 10358 zcma)?2YeO9_Q!W-Z*DrdfuKQAesgur|Ho}#GuEFmNpNJzWM1;vtt zUZfX66r~pnB1#dZ*sx%4*ilij_g>%c%^Kh33XSkB0wiSw}QfiXF&hP-Waw0lvD3pdKuSO1@pn15% z);O9Kwca|3jyk&G+Hq;6rPYnzDK)&Kpsi9qk&?U)BI?*? zv%Ib%T*^}~k)8ibL*w|yXt;)LlVy##P9Q#Unv|4Nq>@#7(&T+o{c*P;wavQ8wcj`% z15G)cZ&?*d{Bjomm#^CtV7~x0y4h_?kctiwlcozPNE?{yh^o+p ziaMHfDmx;CbaV_^$2{*uTb=TBb&5*%%w-@WOFO1B+m1kI98qG9q}5CuiOh)UVy$-Z zj1D$O;ixQ~VUDJ@D~?9j5_1f-$Kn_q8!^Y>xR?$=mWDCZ9S?)!OH4QFx}zJqN6cUF zmzeIa_-mH#Zcd;s3nw6}#AH)H}#PmRqfvH}Ug{EgwhRLC<7kVNGy;_HJ5{GkA z`{CpwH%sT5ld0{ElhJ#SIfW)q#VI&7V)`&eef$&+HhIX)(gBlCXt68syN zM9igjo-b`p&1JYOONY$m6qn+1l$My`6qjK*$|7cj6_1DoS&s57onQRUKh>37k zBCTt@for^xx+ogZh-j<5v9vc`@9I69J_3xWeOB`h)^&pRm$g zv)@YhQ}CpfO6e(ur>yj81=c=orCH_~D}9E7XRTC9&nY}-rOzv{_IWFXdBI9wpx{L- zmC{QJFInl!3aowEN;Ay?D?LELD^@C{R~25h($^GN`{R+?ZATIoRw-nLRHy`%7smAF-UFrO-XN`v#1 z`Al)^`dr~Nh0nPWeIe8TrNS2qUvm1tlEwQ~+vI<(@U_?P8-GE4tH94Ubl=yD^*e>{ zY^>j_;(+-<;d_N2)MWFc)Z<5q(+}b&RrI4{epdKN;b(^Vi^4A|WbgGnQ@=_wepC2W z;Ws8@h41orss2OZcZEM#y~eL@(P+`_yHC(XZ#!n9#srOty2?z_n508f?1j~ACTm_; zlXad>;Lp$$Ihn$fKvBGzDkoEU;_ynHrom5AXsUEG({=F~W`@RejTw5fnaLK}vaZwM zXD094LQMQD=|77OXKT#XW{$=j9hxWoMLpQe)tIa0MrWSieZFR|1=4E)do9#hsLdjc z`5OE?Pq*KE7HiJW^%{#cuGbN>M00+Y=-8gS)His828%c7kiA{@VqB)Nj9xR%jT$#< zZ-4PxZqm5PuV7-AOB~BNdhebv$H_G}i_=>)Zq~SkPFK(=-LCN67MPV9E3N5Ong&*D ztkPJm2bnd}Z>`1}jkWBz&g-{M`@azdX1&IGoy|?kY|vbW8#Oj)Y}7-{ta${@E%r|lZsG`6$T4vihLP6g&(&EIR+?9{kdW2elom$Lh`EZzGx?$fxRbGAzt z#hKl@sHfSZu}fpO#vbkcy0%`Fdu^WwH1=vdz&;O3pNFK+!x|52Jf!ik-^X+Eh{hu} zt@||g{b|M?)p)dR#vYRyd(6&Q>m5^pd0gXhW(npAT^us|HJ;GeuP2!&C1+1*JgM;% zbM~|h{~3*^HJ;({pOppmte1dnH_JTduc+rW_<4>Q;6sQk`4==^u;yPB^Dk+2h30+D`=AeG2^`jV zU*iLf!+*;9hZ-N+tbe5O(Vw#ZvBt-3S^q?`{)wM;FDIXBeCh@GnI!phjn6bbXOh2= zn7-8bLgP!u^p(W)RV>Npny+p5$VZD|^Xgmx-L>VzP@V?jSSOW#rRbOm#8MjhN{!BcJa2 zH`K$-43}A%>0*Y9neGsCov3HIxX#5as%N{H?P+C`oa15+UF4d%;$ohQxi03>#eC_s zz{PwQ3)pF)i-oaH1!j?JFW1E`7P(l=fJ4c0%P;HodKcHb*>1=zaf@48V3xXA;$kU> zcZ0Ox2CMe8%Umq8+8ae1GB>%n(Zx;FE|(T87p+JKo10zS%rH~TEfVGm7q_@r!7x`! zn5$f@bg_zIu9i%!ZVPmci#686T6)lCor|?D*140+dP&g+7wcVYaL+Rv#mucPHoCZ# zW^NNRx3!tM-No(J%pDSFg4yKa4i}pk=$+DnJG~TmquT7svC!P*7J2veTU_wN>bu;~ zbo=vmHzl~+&C`83n0s6nagSSKwn`M+Tx@l*jZtiuD7LpnvBSjnORw`2YQn#10t=iEf9uU`j{@k~^lRrzLgLPJE|i z&U!NKC-WyOr4viCnWP{^wyjjou?1x%CXGuwgfxUACY>Rt%VuSz9eG>WiMkAQL?>i; zKjy{FrZa7JZg2Al9Fe6rD03u^6e^VIb?<^M$V|8EjBBmMAuJ2xDCyVHkL73_EwOZ^ zk7Ljk$CQ|38Ow1v7RN;l7zbimS4Bc8|=}w#7+uI~ev$0r`mSRruV#z`< z+wE(zkwuhtLi$XJ#|!F28aPo5r29dUvPn=q=`2Us+91=5L7jwNI4NRs8B}g-P$%PL z>#H|<3o$&!^K~i+*U~4qy6|fI&|V(;Adio#GBNq|n=gJtzTdv+YmN0oKY?)ly>6%B zH1uzu!~*s!;O~&v+zR0ALjcDJa|VrD5I4jWG4Ns(p*UjBWZ-AE20j1-viLAz24bMU zS=k9MVT^-NfKVEP*@ai;lk{#`s564Tj?o+Y#nXN7D=3G9M6Tf`lFG0~kQ zli04kpL1}Ib$>3-ZC^bELj(ez$0*Lnc{qQN8Oi}%AOJ67F600%Y#qQwxX31J7=}sa zFZQzWZ?e0K+hyJl;u2iqxnX85WrUYXgsFCXea&UXndWj_hRcVVQhFPXQVfrnGI}d( z^)`YxOy!KK0wYk4iq^#!rm=9$m?UMS7sn`h>Kctv7+qy5QJL*Hri%2hD&KLqdyZjo zOqHo7^W&igHPT*-YSc=5f~jMBT@?Xer5qxNNP7e7(ZF^_+eojC;x)w|UldVE@>oVV z4r4KHkhy{*xe{04%7_`yk&JI0$yK<@=Iv@+EjaTUFWzg(^{z>`yv4gHn%KV?O=ymg z@XxZ6*1edut3lHBFp0~kx)O9J|E`IROz!?FFG@Zgd%gd%Kvr>>A3Es5=^6X``T4)~W-B3b28eS_HkMxdDke=anZHCt? zqC6YY2H)^T;dRz9;TN1bA`- z>4m#lV4j_@yA)}j{Ikav-ys1WN7Per9&LxrR-fsS;*syAU)MG(+r;WNTFqqkwksA1 z@6IVzo0bPHyW2~K{E*a<;>nCl?3qIIg2Z>S#*_S!6WTrEjhtj}A4{16_3Ruz zX8GNts{IcAxLA1HT1fOQ5c56ZS=g_zpQWxs_^gGegzu5;wcED5hNoqT6Z4V#J>xMR ztAAG5p4~ky?rXn)J}*5;`<_>L!NMZu_(cikMH@_lAIwW0`{TNM*^l9X!U1myy<%$$ z1^U@lLgr_^lJ-%|RyMHibrrIgny|khQJ>s8QlCHqNS|*B1|AeOuw6!rPqJ zcVu4Qk$L52@~(6h?l(9^B9q>Sd~fdw`m@*h`+xe^0`fk7-sf^YZ290}bphcYU3{d7 z|H%3xM1FMfaof`QL=^?d`ilNW%tr)B=10!gx>`v6f`oqUV<7gkBmPqGA0eQ(GUU$b zD@6`yFMzLw0m_a=1Zc(I`p55t@X73c?^paFcg5&8v*{k$so5H8-soL&UQ|v!o)K2vCS$kj#%9QBo5i`(qdKJ~F_$x`e=wzKQh+{^ry70{SNM^H#({>AJ8r za>@B30f08=#C?ldf}lSe>a3doLoY3l*8 zWlN-h4_fI%f(S_j#cG!DK}sK{lt_?LDOn~cR>=Zc`>2(|JZ7bjQSi8xN{Qg_32T)Q zkhS}*G?O4utUgJ>Q&uV^QoyIJlthrV&sb@QR8XYPQa~Qa0HkDzpaekN$J!UHG{F!9 zQu-nVWP+4RiA?ZiYxRIILV`dJOV$gaV315u7E+wQJ-@2S2IW`uHEDazwgvpQ*M$$- z?SyQQ8?SA2{YLV@H@$1+Ey0BHgG@?jr;cFI9^Vl_Xs;ErL00nbL7i^@J%B5s#Sv;4 zBs7$GcsbiX?`gtAdkMZTxKI`=iJ@&GKjg8{e8{6bUVS7a5j|01}?<|Gl9i5)Y_k}9#`$9^F+LMmL+IsSCV$#NOGM`$vXH! ziktCCO2FBds+|L=an8n$LFd^{@y^_gcxQ7)f^#?{(OKU)DR`)}oAF`ifV2FFWM}&k zan57>-q=Mu&+z+EmpJEVejn+oor7KDoG-h^se6u3arPab>dfyJ=d9`$7k{XmivNY* zdEJ$>wR?y7U%RXLul}myr=6gj53_V|d3IvPs_cOCZMF_>IWZ|?`-y?z;vRvFWjzAH zcY7pe9PSZtcK3{PCg-F%>vH0pT{&^VxxE4zi+Tl|HNE1TuX^d=qq#cc$=pD2X77}Y zxxE9y6@8L3*7gZF@AU~elk;?Na(-gQjQl`wUw$BCe}2IEEkDlru5Y@trN0ioa#~8p zo2Lbw!v#8c|LG|i51bxwUOS_sGpDelv!$?;^KhXK?i~=9@yLKcaOuG0jO7CZ&XWUm z{LcfG^P{YQ#QKK1im~P4hDMdbVtKf+Fffyj;f3zYjiYP z-`M{omPd~r(Tl6(r0VK%-k%(Ht>U|FI5j`NPdKllUv9sCr{?8XjO=$x-YMae%T6h; z=+m!HZh84B6}?ARgme33JBwsFrbWvdMuquG9A7LO+YoL{=#e~PZ1tEN@146IY3)vO z>guCCjwt6lbvdy&>2m7Eg&V5tYDe`*su^1ytsGZYJvQ7Ut!Au!u`Xv+b=`=v>c$?O wYU^sF4Q2K9T=zL6>!b4KUXQef@W^mOxVAi;6CGb4ZtRiJSUIXTCwyh}KRDKRm;e9( literal 0 HcmV?d00001 diff --git a/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_source_file_common.c.o.d b/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_source_file_common.c.o.d new file mode 100644 index 0000000..3e1fc4b --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_source_file_common.c.o.d @@ -0,0 +1,44 @@ +lib/CMakeFiles/zip.dir/zip_source_file_common.c.o: \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_source_file_common.c \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdio.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/wasi/api.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stddef.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stddef.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_header_macro.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_ptrdiff_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_size_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_wchar_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_null.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_max_align_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_offsetof.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stdint.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdint.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/alltypes.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/stdint.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/features.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/stdlib.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdlib.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/alloca.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/string.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/string.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/strings.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zipint.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/config.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/zipconf.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/inttypes.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/inttypes.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/compat.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stdbool.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdbool.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/errno.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/errno.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/sys/stat.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/sys/stat.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/stat.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/sys/types.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/endian.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/sys/select.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/time.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/time.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_source_file.h diff --git a/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_source_file_stdio.c.o b/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_source_file_stdio.c.o new file mode 100644 index 0000000000000000000000000000000000000000..85837e7d2b43dda099bd344351747784ba2ccd65 GIT binary patch literal 3298 zcmb7HTWlOj6|L&W^vrb6bkD<&*c0d0CY!b6jN`3vB%T% zXorN4885JGvLM6<5@?q{1V~6Lka$R}goHps;sfys(ju{6eC1<5c>OJ>s@vJDg#?UL zuI_v5-l}`g9DbmWekUd0Uu%>42GEX;c&=qC8ZQkQo`}hW7U8U zq=k|*Wi^bg)TAke{5y~)1MQ73%1v~?ecP>8Tg|p#>s9ysy`XnjV>}l3!&-f}+6kKN z(C_I(CC+@I*{S-yUeK%d{g7#L>4cQ^gZ*CJuWmJ4ezhL#?FH>>+y6Y%<$}aky%qF* zX37_HtLN7m%!(AsRiyB$(s4Vewt{*sYzA$XjMnshe>Y%h`C{NqA+sYnwrU55P9If- zeybI*j9hiBT5Yx)&7NNmt6Tf+y7XHOYnv^fcVK!?Vr?;QBvQ7M`l@{6tio+GlXbnE z^M(?n556H+{ekQ0p*FCFCm}sx!l;li$sluABq(u82`NErSsTa1m$f1$ZADLF(pPjw ziD_+ISQRFcWKr^}NL9E>e+^28l|k$>0B3!GSRBgS6j{XX%0qXBN8Xi86sjR|mAuFUg97C!PX$k* zig$@+@e@qOWk55!hk%slF?kL{jAP}oin0+Cbc{x5l*Ta2=W$PEQ%u6si0M2oU zj_-&mnu@_Gx%LhI5EEYUghrgSU7?d6FVSV99nz;YM;K&GYbB7u^iWm@Yyt+zIVE<4 zMOI|s+P~Lq9Z;i?P}Y3l$TGyccE~3kCoy1U>`G7ZHm2OBNT%eIhe<(iN-z`aALHj@ zhXh%l6-fY^q9modA`Q&bpi;cRhM5f-VxHDKuuGX|DDwj_3Zfzs;mY%SaFIiLa>$G4 zeMwO%592)YtoWHnB9%db3euoRMeoaM*$B2A!IqJF)O%A&$7pO?W5|jrjv*5=2aq4I z^&zrj(!`2B?r63;mw~)YiV~IHLpDr04i)4x`nZ?^EGHm3u_K7+lyX2*uKh9B4L~?@ z2;cuzjxlqK5ByR!MMJiCS8`a?&JAvAUa1>)qa^h*iZM z;4p&PEzqcUUm1@O_T1<8*98OaO^VRPbb1loa$OKp$fcJS65*m9wD86rH## z2&*MeL{~h9^FJojgu{g5B%(Y;C+XB0lRSSM<1{@^r@P__Z2iO<8-j|_xu;|AGc+T; zp8p8Nl{dQ|2kD@JrtKB$z{ovD|DHzbj4L5 zbPawt=o)R%)k*O@U83iE;)TfFi}WJBu&lMP;w6li=_Pu(D_%kLuONEFUS>ma9hz6^ zI=$KzH>B&=pnh#f+@zZ^4R5&i&$wv}b$oK<{TF{rHJt1}Q`Uh8P*x$9l$7<}R)k4F zo`~TEf7j!$>dhlxRrO7k0XV{m(~6r?@0U9(L9(qV@Ji+ zIvS_YXCC8PHt6)L{jkvts;Zk}i_GK9$P}u|N-2U)HEO#&jTzber!~sT)0t;5&t!&s zL@iq`<|UZn9aYHw%d?o5WL}CHxg%=Xc`+|-{+KiK+X}DZT%#7&=01I1VD(cOe!AzQ z*_*p`{qhy_jAe6+IQt>lx2NeTeaQ&e=aS-T0vnG=Hs|)?amQ{SD*3!P)l>%X;77 z)(03L;r$~s#lDqDv-c7<`)xwE-myH=@vYg#_3+y+p&Hn7_)<0d&z9Zv`Pky=bnM%Uc z5(#Z0shxJTGg<9Ip8ZR%NOgKaW54eA`rN@|-S7APMtSotH|wohd;4=2&d<%y&2KkD zntnYDJN>nDcz%6`_S63I8R~lQZ3(E`s`PxFg zv9!80U#~ATE^IaY`K1~5O^K`<)_U7MdR|awzvuUpv-akGYquQr__OXKFXf;U&W_e= ztycN4RW1j&{a!0*Z_lRp_FG}|cCEGV&$@g2s&g)Hw}Q=Dt3O+42ko#|>vTZq@>VC5 f|0&G6J%7vZ`R%%24)1pS{%o?}+-{fsJK?_pEp(+v literal 0 HcmV?d00001 diff --git a/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_source_file_stdio.c.o.d b/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_source_file_stdio.c.o.d new file mode 100644 index 0000000..156be14 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_source_file_stdio.c.o.d @@ -0,0 +1,48 @@ +lib/CMakeFiles/zip.dir/zip_source_file_stdio.c.o: \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_source_file_stdio.c \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zipint.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/config.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/zipconf.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/inttypes.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/inttypes.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/features.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stdint.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdint.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/alltypes.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/stdint.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/compat.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stdbool.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdbool.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/errno.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/errno.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/wasi/api.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stddef.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stddef.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_header_macro.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_ptrdiff_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_size_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_rsize_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_wchar_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_null.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_max_align_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_offsetof.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/sys/stat.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/sys/stat.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/stat.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdio.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/sys/types.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/endian.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/sys/select.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/time.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/time.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/string.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/string.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/strings.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_source_file.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_source_file_stdio.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/fcntl.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/fcntl.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/stdlib.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdlib.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/alloca.h diff --git a/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_source_file_stdio_named.c.o b/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_source_file_stdio_named.c.o new file mode 100644 index 0000000000000000000000000000000000000000..b07fcb51d95e5dc39a4dd49058d690c71256aac8 GIT binary patch literal 6073 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 Sg?iAMc3LaT)tTUd_J0HJ9?-o2 literal 0 HcmV?d00001 diff --git a/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_source_file_stdio_named.c.o.d b/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_source_file_stdio_named.c.o.d new file mode 100644 index 0000000..8406f80 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_source_file_stdio_named.c.o.d @@ -0,0 +1,50 @@ +lib/CMakeFiles/zip.dir/zip_source_file_stdio_named.c.o: \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_source_file_stdio_named.c \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zipint.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/config.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/zipconf.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/inttypes.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/inttypes.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/features.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stdint.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdint.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/alltypes.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/stdint.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/compat.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stdbool.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdbool.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/errno.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/errno.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/wasi/api.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stddef.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stddef.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_header_macro.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_ptrdiff_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_size_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_rsize_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_wchar_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_null.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_max_align_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_offsetof.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/sys/stat.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/sys/stat.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/stat.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdio.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/sys/types.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/endian.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/sys/select.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/time.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/time.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/string.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/string.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/strings.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_source_file.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_source_file_stdio.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/fcntl.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/fcntl.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/stdlib.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdlib.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/alloca.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/unistd.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/posix.h diff --git a/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_source_free.c.o b/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_source_free.c.o new file mode 100644 index 0000000000000000000000000000000000000000..c431eb35d1470ec945cd3476e534954bbe5b9207 GIT binary patch literal 1199 zcmYjRJ9FDc5MCTWks>JrwrtswUwf8pLxw<6qDY$ZOO#~0P?0tr4T47+5(tn0s6;7D z=JgLUNtZ4ulPXQh6q!kzIzJ?(_Xt|U89eTGzwg`K!!E#y`w9RkKTReR(B3Iypj#Qg zV`Exrc-TFDngAFQ8ihSYfa!8)G+gg zFEkaN#Rbd`d5#^h1I)c%f}&DLfs43kvNF#TzJPfwobV#ym#~OSLw<$OR|uU#b<`!) zXpZ?+H1O&vzlJ(qtFiJ-YZ;d%;5upD!0UM9gs+g+OHuyRrH*g&{-tdRC ze1s42(U3nTwa1rgCYlB{!USg2P24ou7JovCSoj33w|tAJHg2IkUr{EnE;Bj60|{+n)A)X_mP0%=sAH%$>X0L9iKA0~ zjK^t*=mq#g`m)seXI{`_xnHMSfQ&xZ%CZBQ0U$303en!Y6gDR0DjXJvVUm`{4Yt1gDC8bToJ`ek(REAW6`nO7fQzU zouK#m?oO#(D)+nu&G$(%i1)W?{eILgxnY0X_s`RZP1IB2Cb(CxS4FMUC^s5=wR)%9 zsMIQA$EmoTYNJ|q-AZS-+Y#mJCj21hT~C~-Cz4iIILRmyan35VNB)_e4!)(&ZR~K6 zSSv0KqwNJ9FQRC6crGG840=|+Kk^gr-0?@k()**tY5T(N`C;4fV{17GgCueW13Ff_ eJ4od3!_p(srQr`;VJ8;@5nH*~>jk#>GWiH3HW~{6 literal 0 HcmV?d00001 diff --git a/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_source_free.c.o.d b/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_source_free.c.o.d new file mode 100644 index 0000000..e0473d6 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_source_free.c.o.d @@ -0,0 +1,44 @@ +lib/CMakeFiles/zip.dir/zip_source_free.c.o: \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_source_free.c \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/stdlib.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdlib.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/features.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/alltypes.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/alloca.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zipint.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/config.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/zipconf.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/inttypes.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/inttypes.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stdint.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdint.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/stdint.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/compat.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stdbool.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdbool.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/errno.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/errno.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/wasi/api.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stddef.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stddef.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_header_macro.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_ptrdiff_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_size_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_rsize_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_wchar_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_null.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_max_align_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_offsetof.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/sys/stat.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/sys/stat.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/stat.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdio.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/sys/types.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/endian.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/sys/select.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/time.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/time.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/string.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/string.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/strings.h diff --git a/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_source_function.c.o b/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_source_function.c.o new file mode 100644 index 0000000000000000000000000000000000000000..bfd1ca3376d18d193cac575cb15b22c28b746208 GIT binary patch literal 1819 zcmZ`)&2Jk;6rY*h_4;F--6U@6Bu@G!aT2G-soOLT$)$CnxpLsbZM#`d+_l$hXT1)T zLmWN@LPA0+Ck|ZT#)ShXF8m9?l`9e_BrXUcA@OE5EkOdw>zVn@dvD(F{pN#s;{hdv z&@V48E=cB)Hl0rC^bwVR`gD3erRR?rLg#9R-~?e`y@jTxCZaRjb;BSMUhEFUU>HAP zgj~Yo#Pj>^Xc$C^h_xw|@S^JmQ74FnpSUNJ$WMY{RlW04SD8qEBI1yPU?Lwiq>(~+f- z|M~;j{g%?X={lkpgllbw>!5+&=LQ&61%d&j#j@DY7Spj|Ek?kou`JKD2{$1F<`K`f zDbGO`a;H4c?z8)le^?|qT|kFIi&+-MUXAJ8k`3X-G{Q_f%WaqeyT=`{pa_nm66CY! zH;aDC%i?pG*gQh>Jzj!RHBD^JE_|jHXHgN<=$uX2xvp9{mi_0X;D1P!F(Q&GVS}U` znUcdZka6Bu)i4n^F$biP1rxGIJclgvkc0dwFDRCUlqHe^tHmmpEXyf9i_ajnqN-Yr zm5?YdU?EWlY*o=3D@&qsZVnfje?WMtJ;SfT9Lz%ruEFf=+cFbHmoKF5*Wo%W>}#02 z3|5BnwpQkg=(+@pu=FZl#vCiK43$&9f;y~VhNpepl2RI+@|-GsPSVok zCd_001+=sv4+XFsRWTeFF$mUP?L0Kp`3!<;ugU$Z5C@T2R0B5}?s{pXWRT^T`Y5D? zHrJ#WEe0vFfCx$e*ITTbB4tDtp$v2@Y$4$-b!0Gci`TH) z+X!v<_)WNZS?!u#xJS)rC*$9ONFgj4%92vlSd$x=vl5_($6S|Zp=lS$Uoue>FS~va zby@aTIm{EH&tJK*p51B8!3)(``i~jckA;^AqGxRP%5)@NH_%7^C~+8ZG(t@Kia}q9 z5&2QA84JAoc3yhr<%imwX;QO7$tRSV-%x7)gx_zJl24hI`CMbAFEpKeq#NcBIyHaB z?@yhQkBtoZ-Z06BX4d=#-G4VJ`9lWIjpAWv;){4pE$sSYJQkhC@e^wJp%-;uyK{S| zxzp?h3Dh1Z$!L6d3;T~J$2)jM-wMOC^sj-gJ-pxH?*9IsXmt*n2M2ds`<;`6-PW$S z?d|%Vy@S1`@9%c*oODEUZ<{=ouZf*_aaZ88faRIQVw|lPjwfNikv=PR`^um(93}My zAK!q+v)80CJQHy^jJoywU=k+5nHNq(-5yNTgc3GRMu~i! b>UJznL@Xj-G?FJHF|KFFK{slMH literal 0 HcmV?d00001 diff --git a/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_source_function.c.o.d b/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_source_function.c.o.d new file mode 100644 index 0000000..cad89f3 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_source_function.c.o.d @@ -0,0 +1,44 @@ +lib/CMakeFiles/zip.dir/zip_source_function.c.o: \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_source_function.c \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/stdlib.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdlib.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/features.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/alltypes.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/alloca.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zipint.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/config.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/zipconf.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/inttypes.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/inttypes.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stdint.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdint.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/stdint.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/compat.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stdbool.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdbool.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/errno.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/errno.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/wasi/api.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stddef.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stddef.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_header_macro.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_ptrdiff_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_size_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_rsize_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_wchar_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_null.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_max_align_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_offsetof.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/sys/stat.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/sys/stat.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/stat.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdio.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/sys/types.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/endian.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/sys/select.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/time.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/time.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/string.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/string.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/strings.h diff --git a/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_source_get_dostime.c.o b/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_source_get_dostime.c.o new file mode 100644 index 0000000000000000000000000000000000000000..3890be48fe7ca299976805a5b8ca93009ceb73fb GIT binary patch literal 1200 zcmYk6+iu%N5QdjaDv~AHQhZcmC!UF&L=H_^wk#=fPNsZF?uxWGy`w2=rBJ3wilmIX z7p8l7gaQTn0xi%7Xm9#Z1qw9iRfkgQ8X&pc+4=sNogI>y;ZS0XNk3g*Uo+*5$FUTj z$#ERBGbxs?&XhR5qLKfVtfyq*UK9+&v0Y&X#!w8s;F2@;$s9(eb#C~c?M5PyV<|Du zer@}P2m&uKLJ_fvZ6UFR-Z-#?5srP|3!;$m#JgzRTCz;XVY2*f5?Nx|f4)z~zm?p2 ztX!oiCn=V%l$cNMxp;%zt{HM2PzDb2IVzxRPK=-cYw!{cQiCsoQsyO0K}us~yrWB) zhC7fRVTK>_L&%)WGCjr_a-M1MwY-!|{1-8+Gt5C2a;KOlW)|`=JHk04=7^YT7W6z8 zp#a4J-qq)Eo{$B&3-hp0oa8~e6de}-*Dc`^ES32tF6%O`z%s0yVu|GMK?&}S@IJ}k zzmZ=h`88ODwE;fRQ}|Hd#&viA4`F>OKgqO&08sp9QVVR;AmJlGc=R1^v>9%~25f$g zk150xcnnWQ_>@9Cy$MmCZg#7!;4^&*RVc$2JOi~jIRxCM?6;e829zy1gBl4|K!eH` zxI=jDYb;C5wQ<7*nf|8A{tPK#t554G!ug1b0VJKCR&uq z0kq)YJ-#5~CA@%_BYZ`~tAvp7H4(4>Ba(xCLsdG2H*h#WU0=jDsUCq2Z8*9)gkxfk zr-wkRCp0^u*`$1HcuEcQmP~I4_zvEEYM|3Xj{TO@G)=94Zo7S+`6ZdAm?E#-YT3Ss zjII|Nkv$Z=$XIeotjO7~iFY;-j%QVlK07{?Fh;rqR0;qcIf@XxKpvb z;f~{6OdlGd17St5-)z=JquZ*sTKkP=x7VsQYGT){S>1Z8UbU=RcdyqK)%q6uff|Sv zA~Q%f)Dvbj4n&wybDgnsu1!CCwQy^qd48lWCm*b4yInh=XqtB+0>^XvYIZnwBKyL0 z#zHL&$C24_gw}Vwj_HKzg6p|aVER54RqOdt^7Bv&f#``qxR%hOOJ9U)CbavmCccXP E1;d0Ic>n+a literal 0 HcmV?d00001 diff --git a/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_source_get_dostime.c.o.d b/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_source_get_dostime.c.o.d new file mode 100644 index 0000000..1bb56a8 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_source_get_dostime.c.o.d @@ -0,0 +1,41 @@ +lib/CMakeFiles/zip.dir/zip_source_get_dostime.c.o: \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_source_get_dostime.c \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zipint.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/config.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/zipconf.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/inttypes.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/inttypes.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/features.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stdint.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdint.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/alltypes.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/stdint.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/compat.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stdbool.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdbool.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/errno.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/errno.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/wasi/api.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stddef.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stddef.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_header_macro.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_ptrdiff_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_size_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_rsize_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_wchar_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_null.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_max_align_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_offsetof.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/sys/stat.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/sys/stat.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/stat.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdio.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/sys/types.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/endian.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/sys/select.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/time.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/time.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/string.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/string.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/strings.h diff --git a/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_source_get_file_attributes.c.o b/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_source_get_file_attributes.c.o new file mode 100644 index 0000000000000000000000000000000000000000..04a55cff5dd6647eebbd3bcd91df90af2faeb8fc GIT binary patch literal 2692 zcmZ8j33pS~7C!qXrKKq*w1A}wejBQ$rfCbMtt}2DjN*VT4mhT1dRx+_8E$SWMQsYH z;)D+s#Q|`hXT^DX=ySx`=Y;dWc;Iicjxotc^cO-W&F2@ahb_cZzPh4C(Wo888Jsv)|jDGDV(*V zvEfKM6;Ilx<;s%|&)6JKM@-8~S&^)1D?`V85gp8?a#qZY#G;9Wa_R8gzd$1cR%)aK zQf^m4>l=zHckR%V)h@SKGx7^1JfWCEJ~luwhS>!dRJ&0Hm*1#jcUW;5+$igCDJL>5 zL|l$(DDP4gUeBlAd9(BG@iHN!yfHpc=5G0$mM{OyXWieP7vx>z6^F!)P>ZMx5_8Llvv8Ou_3$wweJqZ_u^FBx((|UI=Q}Qs3)eD2 zHO!cg;{dR4OL0pU2*pAyz{2%hFBHe49>-_+1fe*=srN+jb)xoVc!~x4*$=Wf2x>hQ$JE6;SICFToOS!(z1g zCX2S(g}ejp=vc!i3wb9_MrVe*guH92vZd10Q?L}L4DqQ>k50pBn)h^^iqm~tHIX!S znJ6rC3V^%8Rl%V!aTpPVM7hwY~>fwt;;u2hpOEP?^7`t@J*k!m(^Ia}k z5nPT)fqNw@ie5y!xlgiU=tC^S{pc?lt7g-&GJpY?U8>S~8pNO`+9*VEY(#vLhcJkt z!^VcgZcbnri2{#^L=q!N_Harh(nukl;fxr|Oc}FaX}+vv*~r2!a89yDk;7;YUm;nW za0NDHc&zxn8Y`Kr;mx5xiLbY(!QxL(O)9Qh1S5U#=mt>rBwR9gvK z2wN$`1uD`NXo_!=blNq9Ny0UPxR!7&@ivRv~j^gq@2xne4CErHqy;4 zZTn6NSMcqGorK$|z;}=|YZu`T!Y=CJJ9U+J5$+`1CC=`aDsi_{qdrvk5bi1J?A9!M z2)hY;gk`U0xtFk)a4&W9eVXNd!hMAMh2;Ul1BWig--N@mR44=jc98VIMz1c%1Nrs6VOIpCUX-cuHz`TB|=pc$)Bxs6VS~ zc=nKfJwHcyt|;@oW_f||JmCdlc~P_MBfLo1CoC^%mX`@H5ndLSSDgKRwdmHPTI;bZaT<4+vy0m3JQ z1A_RJAmbyl_%n^cXCmlxynXIqzaV^0_(HH>me{@`d{wOSYX|WS;cLP-g7`N<#+SnO zt;XP6VXK}x?B5Z-D|Y#N-Q^z$-xGe2&HPcv@uS{Mr__Tbp`Qpc4j#7jb7|ohf{dRv zyT{{^H}$WwfM4a@G!{>PBmYM7WBa>~{!T;u2jLGY{owvaUXMDcU(MxmJsFNC2aSpY z`f-}vPipnmVj!L{BT?J7;(a;W%tqqLxNZ29QttUj+(!mY`|n64ARj58q4sIQO3O^7 zVol4}tyt-*EU%>UZA9g}iPS@eOYJw5+T(Jo?QW&^xefI{cUk#%N&b({oSwE){kfQF zWvNQ0F*BPr`-6RBR2EA_lY<);FKTLOY8i~%@Ncy3bhfKm<{NW;O|jHSb0RV7{0mCz zkQuYFq@$zFZ13-E>Fiw6-qAnM+1lP}E{e9s`rA6&T4J%*{>20RW=mUx+9|)u%4`=Cj0;DB5~^g literal 0 HcmV?d00001 diff --git a/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_source_get_file_attributes.c.o.d b/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_source_get_file_attributes.c.o.d new file mode 100644 index 0000000..615e156 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_source_get_file_attributes.c.o.d @@ -0,0 +1,41 @@ +lib/CMakeFiles/zip.dir/zip_source_get_file_attributes.c.o: \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_source_get_file_attributes.c \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zipint.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/config.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/zipconf.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/inttypes.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/inttypes.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/features.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stdint.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdint.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/alltypes.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/stdint.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/compat.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stdbool.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdbool.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/errno.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/errno.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/wasi/api.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stddef.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stddef.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_header_macro.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_ptrdiff_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_size_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_rsize_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_wchar_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_null.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_max_align_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_offsetof.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/sys/stat.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/sys/stat.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/stat.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdio.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/sys/types.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/endian.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/sys/select.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/time.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/time.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/string.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/string.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/strings.h diff --git a/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_source_is_deleted.c.o b/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_source_is_deleted.c.o new file mode 100644 index 0000000000000000000000000000000000000000..32692d5378f81553acea5a6eab3b0cfe5bf25ade GIT binary patch literal 510 zcmYjOv5wO~5Z$#eiIa=ulMvKvK@nta&Ud*a3S9(8OG{_gyJO#y^{&}nM}#JUf|`Ps zKS1I$_$5m0I|`baH%~L~jb;#YHAV>Gucy-q;dl6mkHN1V2O;QvoaahvU^cIzHuex8 z^pAF)@m<~+sXf^6h{G@U0%-F4KHuW;@o9%nD8bu{Bp{dsyCftbL91X&!dWm)&dAv; zc$N&dVKO8GGJKtkwm6B%h(sTfF&W3_=x47m>Q>lET?NsPzU+2Dk3Y#Kcc!%*a_Mpb z3OtD50-PiyXgOGirybSa7+>@L2dI>AB$u^st)moIB#cBapY{A8Hv&=YO zi0e{7wtSAhf9~94&uj%gFM;{if{W7gqE$QkaM(2dub`&!=@ZVBqEZWKJ2z_fV3pBT zI;mUb<({b)(ztFtD-_U5nSv>oKGH^e%bKP;7cCp#zbB0?lwd(~p#IQ+OCu*MP2r>e E3vND|*#H0l literal 0 HcmV?d00001 diff --git a/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_source_is_deleted.c.o.d b/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_source_is_deleted.c.o.d new file mode 100644 index 0000000..0b0e322 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_source_is_deleted.c.o.d @@ -0,0 +1,41 @@ +lib/CMakeFiles/zip.dir/zip_source_is_deleted.c.o: \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_source_is_deleted.c \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zipint.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/config.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/zipconf.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/inttypes.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/inttypes.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/features.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stdint.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdint.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/alltypes.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/stdint.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/compat.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stdbool.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdbool.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/errno.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/errno.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/wasi/api.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stddef.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stddef.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_header_macro.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_ptrdiff_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_size_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_rsize_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_wchar_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_null.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_max_align_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_offsetof.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/sys/stat.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/sys/stat.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/stat.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdio.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/sys/types.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/endian.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/sys/select.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/time.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/time.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/string.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/string.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/strings.h diff --git a/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_source_layered.c.o b/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_source_layered.c.o new file mode 100644 index 0000000000000000000000000000000000000000..16e0db95c6510a6fab4b567274b3fcc81ee14d9c GIT binary patch literal 1418 zcmZ`(&vV;E6y9CQmg66hVmoP)y6xMOaM!oZVcXl9stMt)E4z5VokZ+9QD!YL($(C@CVuSw=u zp5u?skLjFV9cR$LiX90Z636E3>l>`gO2WNRP16~>!V1i(n0mn_BV-W{Bg;NBeQ)eW zB9P`Z4p%-M`)26P0$Z5j%=f(@3Q3aLFwL<$90$UV%+r}`M`O=5BkRNw)K4Kx@mdiC zUSNhIB2xO9JAkhEn8?zbSOT)h|M_L?{6cAEzKyYK!sP+*49Ji<<5|eolOSY)7;GI4 zHCPo5Gnj@(GFTC^4Ytme0pU4NAor3l4JgmU66DW$fjwu>q41(aFpZT^G+3=j3-OvN zFU3aV%dshPH3iZJIlclKtW05Lk%9lLwE$6cSvj^R;(2awzJru8t1^ZgeTv^)D|89tlEYx*nY|D$n7!I;qf_t zf?NC~-QuTM_w+49gJU=2)6s+`Gz_+2_$&>!pastiCZ|Mq(x47H>=yX`SyK{eANp--kWef5W@bf$o152T0=pX(R__hxY~@ZeYlm@ILex2c@SL z$ggqN6ug;dV|T=IKP9htkIHxMi(_4iKn$6NH(%cPf5Nl_VMT&yB!eXyB^o0MP(Bcj zXSd(~@Pil9vZ7F>M#;C7DL+%H{D#jBqvQuBW&dETddp<;qm;?sO04>qB$IFCtnzz? zlG~Wkk{@`(nJt2l7SXju7>c2Oa!E6`W4WVO`+Mz9yE7U`(0Cn1e)!%l`mbjvZQGmf zI?hGdgn#={HV2NTaKguJEe5*LIjTIj#~NY%!$SqmNOGA zbvjFimOgU46Uzx(71wj4!18_E2mREK;&Iqg196J2cWt3Zm%a#Fxo|vkb@55`54JTz ARR910 literal 0 HcmV?d00001 diff --git a/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_source_layered.c.o.d b/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_source_layered.c.o.d new file mode 100644 index 0000000..f4c7fe3 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_source_layered.c.o.d @@ -0,0 +1,44 @@ +lib/CMakeFiles/zip.dir/zip_source_layered.c.o: \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_source_layered.c \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/stdlib.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdlib.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/features.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/alltypes.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/alloca.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zipint.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/config.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/zipconf.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/inttypes.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/inttypes.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stdint.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdint.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/stdint.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/compat.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stdbool.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdbool.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/errno.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/errno.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/wasi/api.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stddef.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stddef.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_header_macro.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_ptrdiff_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_size_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_rsize_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_wchar_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_null.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_max_align_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_offsetof.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/sys/stat.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/sys/stat.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/stat.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdio.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/sys/types.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/endian.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/sys/select.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/time.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/time.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/string.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/string.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/strings.h diff --git a/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_source_open.c.o b/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_source_open.c.o new file mode 100644 index 0000000000000000000000000000000000000000..634574e20659c5d1b794f0105e810ec28388285b GIT binary patch literal 1467 zcmY*ZO;g)O7+y*K0-IO~1Of!|ZXk(?BV#bOV-ga~cR~_ENC^2FBjmMXBTKR*Go=Sa zo3=lolS>Yr&g9lxZ|$+|wg00(pr=kxeb@4M=!{3+ee^u<^SryOC92a92qD7f)6-KD z+7~>*+m}4gBYb$WFY-~q^G^6g@QC=wSICP<%s7gdN_x#;s$FWZhG`#*gmhrXRkg#C zW!4Or*^(!4xbMrFRbsYn+9ij%q>c4+%rRTG#!61hvP|1`h{)N)|6`Xbw%OXZz-wj)_T7`kMDEklxSV@&6w~;ZZMeGVVzy1K4TAo50tn zgbGEOiXeb^NF|Ua+aO3la$*FegczX#2q+{$gGGUcAPAu*4U3E7B7|4_NYSInf=Et` z#e}HO?}46#I7xep5{*JHMAv8xrF{^Cz9v0~!gDC}sqtcr$`A*+PR|#I=!GJo{cs*G zK)>A1f#nCV{J`1r7vW+;1UiV^AsB?AO?nB-55pxGZqku%rQZl0 zgUc}XfsQW`dIiSe$~FbmQUIV$dKIHx?J6fQ+9XWCWSw3sj?wFAcLT1$b-2-umcVEU z9!-jNo1cQIgh=R3q$lAfB-iOJbWq?HC{3C|hg8>L8m2il4QUxS2qVs*XclH*c7tY6 zGzS@&Ytk%=vRzRQW91(!b48ogiZMyUVkKtX&zykM?8%f?WB2(rJlfJcrs7s{5G}_c?w(bbe?2=WE)$3 z2HWtgPIq8O{+5^X-#o|6FW@=6$V;6?*o9qwC|+W$J$MOwb@~c+;Z;rqEc+VmU!#57 zJ4WB&fq#q8+d6#*?>YzmO*~3|vzYtCc=%G^?gscy?=P9zyUXz7QFfAb~dXC{hixyeC(Cn+_fT(i+lF^`z7n?^O++i2-- z?MT&IEE#XKT=hU_N>w)xRNYDT8>Zpfs%7B{D;3M-_h&M0vkJ4Bp)tihwwRNQIJK&w IurJ*I03pv*j{pDw literal 0 HcmV?d00001 diff --git a/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_source_open.c.o.d b/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_source_open.c.o.d new file mode 100644 index 0000000..fd237b9 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_source_open.c.o.d @@ -0,0 +1,41 @@ +lib/CMakeFiles/zip.dir/zip_source_open.c.o: \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_source_open.c \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zipint.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/config.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/zipconf.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/inttypes.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/inttypes.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/features.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stdint.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdint.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/alltypes.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/stdint.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/compat.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stdbool.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdbool.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/errno.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/errno.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/wasi/api.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stddef.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stddef.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_header_macro.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_ptrdiff_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_size_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_rsize_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_wchar_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_null.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_max_align_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_offsetof.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/sys/stat.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/sys/stat.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/stat.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdio.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/sys/types.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/endian.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/sys/select.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/time.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/time.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/string.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/string.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/strings.h diff --git a/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_source_pass_to_lower_layer.c.o b/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_source_pass_to_lower_layer.c.o new file mode 100644 index 0000000000000000000000000000000000000000..edef197f85ba442f07263c8c9ee87c58fadd47a9 GIT binary patch literal 1004 zcmYjQy>i<|5WXLfgh)z&ElQScS>Cf`n=}S8ZCPZPDpcaiMVb`pU=Tdgpg;gQ9A(Re zASaDGH+hFNeuFf5h7_4h(&RBxW=~W!0&v*dZ}$6c_x6s2#hemC=%@4ZbHZL*WqDT8 zv)8;VOTzv#pv7f+;sikwr!rK*T+TCf$_TlH3mrzsL7v5_mWr3uz;5t9&VwRbs7MA; zm?X>SRf9^UG8Gh36Uu)y`jpiF{>j)sxl<|G8N>A{j!MbT?5nxKcQO2&2x|zU0v1$` zMHQ-h7a&xD^jHfG?J*Y(>vJ0o?=cIiZDxtua6{No1N+q-_SN+lYHOQ>5y}W-{Nk~A zg=2xN(l{bw1yxr1e5;AxZ$#A5tsB>B7~Ph*Fs^7qwZm<(x?F4x8qkDQSaX*tJIHbj zi(j(bVN=`y7jDeN&Ed9K9}>}mo3IWo_k$_&s1zH>*)SZ29HYH?WQ$v{3AerzTSF>t z!xr5BL0~m-=jAF{W^)&Hx8W{q&&0i9OYETTeYgiZaQ{jdP#6B!Z8KL05FJj$1H>N~ zoL=U*i&}fI3wty15OaKlT94r&Jc7qpT5aUCk#mvZmgrz-o*?vOCOq&iJJWF*|@Yl2sDm5mpXR0VC~G?GOj$NuP)R-zyIacgWiFB79K?7 z!@*%UiVnulCu7+??2whbH`Sly+T20UQF0=c TOe5**(_9vwUBuJWm+$m{AkXfO literal 0 HcmV?d00001 diff --git a/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_source_pass_to_lower_layer.c.o.d b/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_source_pass_to_lower_layer.c.o.d new file mode 100644 index 0000000..214929e --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_source_pass_to_lower_layer.c.o.d @@ -0,0 +1,41 @@ +lib/CMakeFiles/zip.dir/zip_source_pass_to_lower_layer.c.o: \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_source_pass_to_lower_layer.c \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zipint.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/config.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/zipconf.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/inttypes.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/inttypes.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/features.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stdint.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdint.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/alltypes.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/stdint.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/compat.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stdbool.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdbool.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/errno.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/errno.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/wasi/api.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stddef.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stddef.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_header_macro.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_ptrdiff_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_size_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_rsize_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_wchar_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_null.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_max_align_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_offsetof.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/sys/stat.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/sys/stat.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/stat.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdio.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/sys/types.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/endian.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/sys/select.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/time.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/time.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/string.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/string.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/strings.h diff --git a/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_source_pkware_decode.c.o b/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_source_pkware_decode.c.o new file mode 100644 index 0000000000000000000000000000000000000000..0529025d5386eb75b7601ae7782943053565751d GIT binary patch literal 4296 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 J_B!{J{} zL*F+$72$b~SLq6$1-4X08oN%Xy7q8T-f12CYo3~FTsW1vCI#Y5`6IuD1IhS)+M2MIh_vMnc)y5 zU}zZ+6Ez8kA?ac&pr(il(J?-PM;89u|6_O*j=<4%947cN7=~jm9*5)m$P)_;Pr?Z} zxsD?QI0Ykc%Ei-gdTB_Jjsee*$Fpz-&fdjygg6i9;Jk|$-~u7`VuNx55dd%tFP4wu zC^6D-5k?`M3d%tFT%vp~9n9x4T-I40uaIO0u0Y1cG0J`{%>F8&uO38aA)5-$53dnH zhijm_I8KCdNnkiZgo%BEtU!*8laPbSRh%NmG)%#?i!;QS2^o1}z!1adB(Vn1 zVQm#(kieG3c=HM0k?uPxV1mW>F2#Fz zKgMVALkO$D2dI3)jqoxXV932HY(RAlO_HyH2{ji*aFN9~&vm*w4X8t-$Y+CAkU4CI zB28#YkuBJQ%}>~ZCbS5(m#0PXSd?e5%wU_E(g$_9BusPew_?)8c_pee;p$ZD9 zE#%b3)VB%X88tyo9nskgMk&exk{EDN11%Y6f5`LG=%H#g?S>lrO)jI1smTLRk0*?p znqrLpBRqNVQ4&s_r4;s6vIae2Ip+ACmBl5lY0HYXp|HPImHo~+`!O2P{?!!i=a|C& zk>Eoe&#CoH;dPY+O-<45ike>is6Nn_fqNSzekFj6q!m^}q zcn#rK>ca4Qp6JH1@oLX%>ET12O&(b2PRGxlkdLq4v};X|yy?!i@GQq}WCzdf=hB-$n%SwUa&uY#psG9;xpU#WfY4*`4cfo)Hx&M3eI#8p89DL#abvUrv_g8 zB}#pvRHFP$XfnqfgJsD~g~AVIl8J@F))K4|DF;UFClzTyn2~b)B|;cTNi6F(Q#2)& ze}6aMf2?8yi={ccsN_2sx+I+T9nOFPJLMKw^*IO@kS;5O)nH{_fI@>2UhEUT0!3K) zj+gqBm!SmZDPLvJ*>hNZwMG`?O25XdP=V?Rul2Y28YW$X8mz%JXRh4OxsB>}m(^;t zy2x?BX|Ot9?_2yjti$!!d;<+`zy{oy@|!4s6Xj886B9R=6K}z-1_OQ@V_R?=wtnDu zF!3(jfxA<_jfvY|>$(T`96TZX-}}gZ0Qcd+_Z*PT0f0~WLu5ZRHaXuxn;m1rs#gWp zp>7I%gq%lT6(7T6XWrc_(i7Bed`tLl-{w!@2{d3Ao;uie^mGw_1};2%!#(tDf(Okh z-$T8XTp{K0HjNTIO4bTbs*$}_yxhBAo9Zx8mHt!8T+X=uFDI?cY> z!}Yt_pcy8UJt@x?FAq~sM5y8L=%^#Q!(OY`JM10}N4<8pE%t+UIPCN~tuSm44@N`L z>g8nu5XVW%jvdR1oG&|{z!CM}LXhLcu>*IC+XflCc2i`DRut2cLQ!thA$GfW z>(;ez(0AzCw<(GO1xm&p0ubcgA3xslj)%N#iV;Hi^J1|;bzwe#nBxcXLraFi z;+f^TJc^ko+$ozT;+`P%U(TfGPuw(#V#$Ot$6BtrAEMOFl3e)A^*zoJHa_WC7*+m$ z)aM^;G*pJ-{F#y$h~i<562L$v)BvOTD1rf~PpV+FNR<|#&?1Nyhls8~5mv5fX^3eV zN>IL|tK@=Q!0P21s$z4=SD?}&O=>Er3MN#q=$bOuVGY*rsHJF2(Mz-jHH~fz3EhMZ z*u0`!3f+b+*uJAXu=6x*UFC1QM09spp?gq=2JFIK?eV$$%V_(GIDmaP=#!?Ysyb9< z9Ny9+I9gU^ndrMNxup6ziQHL#kBB*=XxGF(-r&$5gK&gdQ&eeT8K+tZVFr`-u739TC` z)9l5uvTyQH+fSy)oX?hd5`sjL1!>H>z@bXLAT#!CtlYNdV^la_q)OA zIAERLbM!@jttCAXGU<+)Cv(BFvTcrXK5>?FV_Q!gCrPDU*Yn{-aS#cW%}HiV@FWiH z$~5OPnt42Dwl&SAH{#3*c{1{NW^ctwEQOb*s)5cpm3sPYORzB$EcTfr?^Bl98x6bLlTEjABX1n{jx#ofJ-=yPH~LPu z=Sx?NGzF)===K}Zbse|iNuLE+rlCO38M>BiSWVkzTzsYO=S;+Z{8~+Z7y1U-kJ6)! z_Y>C`7XX2vJ}aZqT4r1<=4Nd=;VwH*f+bOlF{7*DwY;#0EIY zpY!K1d7fhR5ypueukih(mI(O?NEjS2S!bAnB&1&A6dg^&6r=~3365sys3Nc8G)$kT zv~WH{v{{&e*%vrR(Kqqg0Ty525;2xx36=-A0xQHATVJgwaSc{s z?F!fHGq^!s0Ib6XKqd&3JVx>uA3e?qz)b=+t0ES~xcVGv1 z&oXG#Col(D*aZV}nJc;XZk0!akS-EKr&XVVVx;j)O;|Dy>EG>=24@ zc*>4xdPMt2v>$}Ak0sLRn4se;EJHaPYE()m{)o&9(lSk&QgM*3BG6U~)`Bp8KS3CO z)H+)Kg^_|$n7BqA^zlVHu&OAMm?XAA1BsobK~%*e4Ur0;13f1eF-Fl&LJTH9!8k>g zfH))um<%*bDh+jm&tZ!4JVha-A*Dnf=b2#!GB~Zuf>>Fcff<}mz%)s$!)%2|6dWO? zS*Y|!I8P=PU>+6*xEPpNBok*NT%rR@RdF)DDnhz18$5<9R1K@J0;?~V6+QgH%9P;r ziICNtC{if|R@PxXCm3$P8f?6wg3tj-?_|g_s3HQ^CTuF!79ecBL6woLV(}n?2yVl+ z+TJ02N8w>)bGS?K8x%%vToHj-)WXSPNi6VSoogtOqKa zibS&Hgb|j;r+7rX5*$HkK;>{8lsUONhh?%^A)8ewLj|f~&dKHp**tmQW{rRv0YN@a z@Kn{qQ^KBJ;WKzPu7}ffg8ioISf{RZ-R*UF>}R!%GRD*I^%+mfYo1|D{i*GV_5bZP zEa#>_^ku_ow^gV5NnH|mrR`XS4?h0zTqN{aO*b_54d?7HF7#i8rvFRNcM*-fjd1pM zg0sJMuKy6z*gxvl%&#Ojkc6+U^OV&*1R=T#+ z>*V7%L)-7(HtnIzr*DRS^U{`P$9688wwIsnIX&NP_WP7~v)%Vq>(8fM*_N*CS<>|H P`qInCyl$sw%Fq3G1!Pr3 literal 0 HcmV?d00001 diff --git a/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_source_seek.c.o.d b/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_source_seek.c.o.d new file mode 100644 index 0000000..87204ec --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_source_seek.c.o.d @@ -0,0 +1,41 @@ +lib/CMakeFiles/zip.dir/zip_source_seek.c.o: \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_source_seek.c \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zipint.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/config.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/zipconf.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/inttypes.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/inttypes.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/features.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stdint.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdint.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/alltypes.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/stdint.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/compat.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stdbool.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdbool.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/errno.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/errno.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/wasi/api.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stddef.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stddef.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_header_macro.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_ptrdiff_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_size_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_rsize_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_wchar_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_null.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_max_align_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_offsetof.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/sys/stat.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/sys/stat.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/stat.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdio.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/sys/types.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/endian.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/sys/select.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/time.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/time.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/string.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/string.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/strings.h diff --git a/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_source_seek_write.c.o b/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_source_seek_write.c.o new file mode 100644 index 0000000000000000000000000000000000000000..c9bb7f99deda7fe36b1260e72ec4d0976f1bc3cc GIT binary patch literal 1015 zcmYjQ&2rO75S|&?vEv_X5)yu5pqrTBpvZCJSjORk*bO;y;KEJF^4Q3hC3!RsghLeI z1vpS!d*3(MN8mBI?rE#`0rt2fJ4;a|sk^`F?(b923~}NqC4|u5E-x>M_C`xC5}GKJ zB;-vdNuvw)JzdLaJUFY^w(kYp5%!c%LvhXsxq@TqxDz`Hy+CrIB{YT0AH2xsLWIJO zxg-m$YNucv&V|cu*YSPAv`=Y&N(%pcPVL`XZbz|Z)k_n0v6^hF zvh@WBSs*5BC_}p%D8o!vgKUE}a0ONxj9|_pn1>wXPjS_vSb$Y1%&^Fwv1d>`DU)S# z$tqzPN>Co-HLHddRaAv*P=RW7!DA(OU3I^1vb_>5E^F3ct-3$HgWbJSTVv2XOcb+iECBingN^n$QMw zhFv&<4s^HhiR$!3Q7^>qVNY${v4W1r_!OSjms{7X6v>}y)0{d|6E7IC{2ytUA%t!G zbVy>(C-ytxNzST-qz@&F#Dd^{=r(_O`Rj?cl3S;_1|?r8Bi|S!ziV3VFO8Ca(~hf= z2nTbQi+(3}1EYUVv##$1qt}NA%~rED@+36gN*Tq+`^tYi?>F6Wy6^jE%a5T- z$J~{0)a`b-Iq0=|y(6-s@ z3m)h7Vt?*WjO7i|D?bHB7)gCIy%mNR3_PLOjPQ&LKMY2CVLJDvcjowWu2-gW>GXYW tjQp_g__4kogn<-J6sb8H!$_w0P_GC+OrivE@Y{SQ5MRy3Rx;A@88_sz%ISrRWDD})f`$N79t3dc0d zliQTatJF!3CeF+1vx8Fft4w{f{ZK3 z$Tbb8!b~v09I>m;DqBU$8eD}{STh$sQ1=?@UVEpjv+HoZMyqVyQP~YxhZ}F$O_bk& zo3Jruw^07prTlG_zXP}7&WPQ03hbV<&F;fpxCi%h`3t82VB*rvFHA9DHA>h6G_wg0 zVDlqZ#R3nZ3J<635f*rKS>Q1|me5-M#amE=EfX7!U44RV3!Z@WG22GA4clN(SsmH+ zOZE=hYrqaPMr=3l#~$oSy(a8J(_Abac3>YnurE76%L~IgYvuLYM}HC4!9F~N7PO%Q zPtC6v#k)s@9Y7ZjK4s6a_;Yv$&!_AK7Jq@oQSv29zRa77K3`$<3ZsR3g&pERIGA!q z>=XvTYECr6f=gvdi7CMBjyewDyd!o%3FfAGnN zuhr$Ep%kkM`B|alTT00fR3-o59{EMp$lq$A_`9Z%eh($ literal 0 HcmV?d00001 diff --git a/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_source_stat.c.o.d b/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_source_stat.c.o.d new file mode 100644 index 0000000..f3290bb --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_source_stat.c.o.d @@ -0,0 +1,41 @@ +lib/CMakeFiles/zip.dir/zip_source_stat.c.o: \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_source_stat.c \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zipint.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/config.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/zipconf.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/inttypes.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/inttypes.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/features.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stdint.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdint.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/alltypes.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/stdint.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/compat.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stdbool.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdbool.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/errno.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/errno.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/wasi/api.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stddef.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stddef.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_header_macro.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_ptrdiff_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_size_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_rsize_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_wchar_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_null.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_max_align_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_offsetof.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/sys/stat.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/sys/stat.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/stat.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdio.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/sys/types.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/endian.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/sys/select.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/time.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/time.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/string.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/string.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/strings.h diff --git a/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_source_supports.c.o b/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_source_supports.c.o new file mode 100644 index 0000000000000000000000000000000000000000..b487552480934348a0c328b861be8b0c2fa3170f GIT binary patch literal 1089 zcmb7DO>f&q5Zw<_q)5tC;>2-`pqNE^a3Ii;<5-4@9xS&3dMlb!Zwy7Q6k7Z;xisn= zEERTh56~abQ*S}hL+=IpJNh#U6g_peasi{rr3dZ~XJ_WUc{@v@CZ~iD`fjya5&nuU z>7`zluh`I7SQbdo_Rqt4Z} zHusr<#U7)3MFgGn1p^9fAvka#Bjy3$Wu7p=c*3`Z38wG1+*lfy=JJC%AOBP6zq$Q& zdGlno`jvt-3b*Abip|jE>b{H@J>Y!dN<`<-~F8$=8|8!%g(=K z*#wX!1HRDoG}%XB?6OCiC1P~mBLYPP#CR*Z7|}iAecUK^#g6&04)%mIF@y^axTgqf zfTvq_b{Ro*19~H7>o8kvOo;Gd1N<*UAIaW>DTDPjp zq>W|WP!G*mHjPYz=>;|8EGp(-Kil6M?hWUug5B3jRm~?)(SF@d_mJJwEIVH>0j8eH zSi$q7qeD4L#>4UW`RFK_jSof#az8qVlf&`hFpdwBXR|~O51)|lwS2yc>bX?mOh&4$ zWn&NAX`3yA^@AMvw|;`MQiH8H%CaCWlC(y&pgfm#Ru=Ptled{l&!eoB13zz-mL-^H se)lM?B{j zM>5ZIc4X!G1&zet#f&9Yd}e!I6voQe-dK$jeJ&Wgf-~a>CtjL_u~Ay)ynyRJhN-8t zPPCUP!=_lnE5Iz7=sapNsgMRsMQcw13LQ5@oH@$8+n#%Ed)_+9xN|R#3Z6 zl1qlX*FXUr#0g4}8&eP@uzg{HYzhl4uw2%}xgN)Pn1lIKEQy!mC6r#(*(Ot)t(IKHmBZgS-i8&p{SH?T8Qy_axbqtCQl@)w7w(QK7PhgA4TSTT1Em_769mqC8 z+sC*AJ68wNv8(LYf?cBGISJ#DDF0FnEyjd>tsIPsBGF*1csct}P%2tQNznfKyKi2} z`O+pYeaYGHT(EzHU>~I{{UJH~w;(R0IvGp?r88cmZlJPE4cz`Yp9>;C9(}*F-R`tI zqtHO}tubl#VvG83C;fJijJKlbZ1!_WdaMEi&kqjv)c&B`>2{y*9}I@w-Ths)?e7MI zz3yHo2zCcM!-4ATwb*;w2WA^zkCgF-$~P0Ova(a{Pofidc1s-l+Q3axS=c&q^au$waSN&lA15nWPod5s; literal 0 HcmV?d00001 diff --git a/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_source_tell.c.o.d b/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_source_tell.c.o.d new file mode 100644 index 0000000..f1a3155 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_source_tell.c.o.d @@ -0,0 +1,41 @@ +lib/CMakeFiles/zip.dir/zip_source_tell.c.o: \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_source_tell.c \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zipint.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/config.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/zipconf.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/inttypes.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/inttypes.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/features.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stdint.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdint.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/alltypes.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/stdint.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/compat.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stdbool.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdbool.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/errno.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/errno.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/wasi/api.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stddef.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stddef.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_header_macro.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_ptrdiff_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_size_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_rsize_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_wchar_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_null.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_max_align_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_offsetof.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/sys/stat.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/sys/stat.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/stat.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdio.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/sys/types.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/endian.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/sys/select.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/time.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/time.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/string.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/string.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/strings.h diff --git a/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_source_tell_write.c.o b/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_source_tell_write.c.o new file mode 100644 index 0000000000000000000000000000000000000000..b0344a2323705471825f963bf29582951f4e848e GIT binary patch literal 841 zcmYk4%W~5&6ow@^ZSHk?zqdzi7wH(MY11SVR!yO>WXsNV93^$4*sd%G%AyV|cmetb zya5|l%KUIM650YI_yXKRf)xt4R&qHOIAd1^1N&o{HQVq1DsR$aN21$Wd zCMlYNRGA<;*G6<6=3xFcO}8=4KpHZ)G)peX1!S*^XlBl}3p5Wo$PZ|ty+eztXaNdP zgoVK<+(ey4Nn!eb|9r*n|Dj$LYU=GJ`U!4>{H{l&V%7 zDCuB858?2!6;#ioZ;3mtj%nz6eUkZ_q$z~R>XXJx#<}%QxRQ|)Ldk{E)R+^D`%dM> zo0nJGe0m+HpJDVF6ZBiHFGNd!Cm8)nh}l5+-N<1g#03>PEDTxK?A+lwhudEN?b&Ii zTB-J33FR9pgYfx@if^J$#qmccoR4QWQTfV)}tJ){;pxU9am3 zwVUaWnc%+HH*%whOLuJZh#C4Ql6HqPv(NpG%|m0^^F1l-AW(fYdx1=5+t3B;F~K~C Rner}Rp^*vQzGt%c@-ITg*U$g} literal 0 HcmV?d00001 diff --git a/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_source_tell_write.c.o.d b/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_source_tell_write.c.o.d new file mode 100644 index 0000000..2965eb8 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_source_tell_write.c.o.d @@ -0,0 +1,41 @@ +lib/CMakeFiles/zip.dir/zip_source_tell_write.c.o: \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_source_tell_write.c \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zipint.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/config.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/zipconf.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/inttypes.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/inttypes.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/features.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stdint.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdint.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/alltypes.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/stdint.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/compat.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stdbool.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdbool.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/errno.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/errno.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/wasi/api.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stddef.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stddef.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_header_macro.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_ptrdiff_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_size_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_rsize_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_wchar_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_null.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_max_align_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_offsetof.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/sys/stat.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/sys/stat.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/stat.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdio.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/sys/types.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/endian.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/sys/select.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/time.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/time.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/string.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/string.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/strings.h diff --git a/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_source_window.c.o b/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_source_window.c.o new file mode 100644 index 0000000000000000000000000000000000000000..d846b64c2c20d234c513c0a00982fdab26e2bc9a GIT binary patch literal 9541 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 literal 0 HcmV?d00001 diff --git a/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_source_window.c.o.d b/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_source_window.c.o.d new file mode 100644 index 0000000..882b0da --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_source_window.c.o.d @@ -0,0 +1,44 @@ +lib/CMakeFiles/zip.dir/zip_source_window.c.o: \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_source_window.c \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/stdlib.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdlib.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/features.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/alltypes.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/alloca.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/string.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/string.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/strings.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zipint.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/config.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/zipconf.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/inttypes.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/inttypes.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stdint.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdint.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/stdint.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/compat.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stdbool.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdbool.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/errno.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/errno.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/wasi/api.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stddef.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stddef.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_header_macro.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_ptrdiff_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_size_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_rsize_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_wchar_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_null.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_max_align_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_offsetof.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/sys/stat.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/sys/stat.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/stat.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdio.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/sys/types.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/endian.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/sys/select.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/time.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/time.h diff --git a/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_source_write.c.o b/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_source_write.c.o new file mode 100644 index 0000000000000000000000000000000000000000..cd64babc452ec2f68a9203ce310e8c0c31987eac GIT binary patch literal 806 zcmYjP&2G~`5Z+xUjq_K#ZQ7>4niV~?GEUQ`O%zU~P_En%H`lQ@sT;?3*Xuwz#DQl( zT#!IWTzLr|gBO7ttP?8LfAh`f`F3_@2ifr$BZTm$*=&ZCDc;wkx+ z{mUsVm}r*edjYe#HD=?G-w}lV)3LCfkrjnrAQ)FtoYB>HUSu)OLvF=PpgE^o85xHO zcbMhazK@9VAzL4#(sv0E{zi($luXquvwX3{Bz+`9W{4_1pgB+=H==pSAIwR}18S3+ zG`LN4X-G#=A%93}bP1LY$pJ0&Fjb)d>I+(wumnXY-O@67n%z*otRl!CDJrd8{Jp;r ztwIH=ujsNAXs`_0E!9E4tm5)w>6KoEuEGke-q5w)Dy{VpU57QO!MZ-*)kR7-j!^bs^fikqaps3kW*7-$BO4;q3tW%OY-TuN+z*4HQ5q+{@FupO zFhd(B!tVRb9QtA3_G4o$2m`_GD3a|n2a(9e*3dW`FwO#pnc^;Dv7yG^FfiF$@ekGt B*&hG^ literal 0 HcmV?d00001 diff --git a/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_source_write.c.o.d b/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_source_write.c.o.d new file mode 100644 index 0000000..c9e6ec4 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_source_write.c.o.d @@ -0,0 +1,41 @@ +lib/CMakeFiles/zip.dir/zip_source_write.c.o: \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_source_write.c \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zipint.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/config.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/zipconf.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/inttypes.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/inttypes.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/features.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stdint.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdint.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/alltypes.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/stdint.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/compat.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stdbool.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdbool.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/errno.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/errno.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/wasi/api.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stddef.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stddef.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_header_macro.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_ptrdiff_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_size_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_rsize_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_wchar_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_null.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_max_align_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_offsetof.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/sys/stat.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/sys/stat.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/stat.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdio.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/sys/types.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/endian.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/sys/select.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/time.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/time.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/string.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/string.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/strings.h diff --git a/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_source_zip.c.o b/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_source_zip.c.o new file mode 100644 index 0000000000000000000000000000000000000000..b66a8370019ec60ca1e7996a6fd54c0931d1f106 GIT binary patch literal 1216 zcma)6Idj`a6yAdrz)PSgOSWa&dTYrxX%G~3k;7D`6W19{nsgKhE@?<0Kmwp9N@fV< z_z7t<>Cz@men4h2lfRHERoYZ(Ql!XRfJNdeGhDu7-|@Zuc0ufDMhPMGySuwPlDphU zR>^9W(BzUQNkT5Q%vO$#B-Lrceote$^lyye&~trhhr^ki1>r3tWbKY(+qoXj1J{pb z$P=pEl~3LIP=;X;4kH!xfr9oppkQ5AN5Ol%iXzwJ z7z+6=%YokHx+uI(L=g&5{794rRFt6v<%OuQSL_v3-c$(a4VDv|gPJe~L{woD45(Jq zR%mZwt*tI=m1!v}S9?vwHq>DILfpf0J8%zn7Gf8R?P4+PbssbCBZxGY4x*{7x_GIqsxY%jTG`|lPT7VAG~p$f z(1JEt)z8z@Kf+o^ID1;FB|1pPF}jYg#0i|N$>B3NqT_JHuvEmjgNZ%Lf09%N-hBa$fNZIxp@s?2{ zKdWsGZ~L|DPnrIsGV_G6op&y9c6V8o5cR{i#W(*OLB3b1#ZY>I(|-TM58m*CwokP) zO1`Cxe8ai+6Q|m*xc=aj{FWoypE*kYQb~n*7>t*W3?o`b)sayo$JXeU<{i)Wryrjj zw>$05)QzF>Hjd}fdq=3hU5?sLFgxG#jNz44@f+C7!W z_Ng;I@1J)Z=X88B8OzRjlYEWr5+k<5sf>pce4NWrM!H!VExl_id-|sFFT)DvvAOHm zo@crK*bT9p72L?s3;d~BoGrcBy|KNeG>zFZwnv_{rd}|zy~y1513wP!`5aH#n#^PM b0WpnGPGl&3M_TdiTt=oIxl`YgpTz$FdtMrH literal 0 HcmV?d00001 diff --git a/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_source_zip.c.o.d b/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_source_zip.c.o.d new file mode 100644 index 0000000..90ce593 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_source_zip.c.o.d @@ -0,0 +1,44 @@ +lib/CMakeFiles/zip.dir/zip_source_zip.c.o: \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_source_zip.c \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/stdlib.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdlib.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/features.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/alltypes.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/alloca.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zipint.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/config.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/zipconf.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/inttypes.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/inttypes.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stdint.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdint.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/stdint.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/compat.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stdbool.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdbool.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/errno.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/errno.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/wasi/api.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stddef.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stddef.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_header_macro.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_ptrdiff_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_size_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_rsize_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_wchar_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_null.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_max_align_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_offsetof.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/sys/stat.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/sys/stat.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/stat.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdio.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/sys/types.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/endian.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/sys/select.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/time.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/time.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/string.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/string.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/strings.h diff --git a/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_source_zip_new.c.o b/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_source_zip_new.c.o new file mode 100644 index 0000000000000000000000000000000000000000..6afe8824f796bfe04d08ff2adfbb67723b815318 GIT binary patch literal 8276 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 C=f)ZU literal 0 HcmV?d00001 diff --git a/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_stat.c.o.d b/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_stat.c.o.d new file mode 100644 index 0000000..99cb698 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_stat.c.o.d @@ -0,0 +1,41 @@ +lib/CMakeFiles/zip.dir/zip_stat.c.o: \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_stat.c \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zipint.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/config.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/zipconf.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/inttypes.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/inttypes.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/features.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stdint.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdint.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/alltypes.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/stdint.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/compat.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stdbool.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdbool.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/errno.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/errno.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/wasi/api.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stddef.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stddef.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_header_macro.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_ptrdiff_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_size_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_rsize_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_wchar_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_null.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_max_align_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_offsetof.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/sys/stat.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/sys/stat.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/stat.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdio.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/sys/types.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/endian.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/sys/select.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/time.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/time.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/string.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/string.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/strings.h diff --git a/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_stat_index.c.o b/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_stat_index.c.o new file mode 100644 index 0000000000000000000000000000000000000000..b68a6b5c9f59d4cc92ef8b2f429fa0a3fc30b221 GIT binary patch literal 3212 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≦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 literal 0 HcmV?d00001 diff --git a/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_unchange.c.o.d b/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_unchange.c.o.d new file mode 100644 index 0000000..e1cf672 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_unchange.c.o.d @@ -0,0 +1,44 @@ +lib/CMakeFiles/zip.dir/zip_unchange.c.o: \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_unchange.c \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/stdlib.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdlib.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/features.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/alltypes.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/alloca.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zipint.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/config.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/zipconf.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/inttypes.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/inttypes.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stdint.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdint.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/stdint.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/compat.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stdbool.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdbool.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/errno.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/errno.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/wasi/api.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stddef.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stddef.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_header_macro.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_ptrdiff_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_size_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_rsize_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_wchar_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_null.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_max_align_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_offsetof.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/sys/stat.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/sys/stat.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/stat.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdio.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/sys/types.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/endian.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/sys/select.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/time.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/time.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/string.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/string.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/strings.h diff --git a/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_unchange_all.c.o b/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_unchange_all.c.o new file mode 100644 index 0000000000000000000000000000000000000000..3aca76e07bee91d019508535266dddea95eb93d3 GIT binary patch literal 912 zcmY*YOK;Oa5Z+xUjq_^UHhrhH8gzBb_L_g42Q60ys>>_U&VHjJ<`nN>i`^savW-5>zc#Nw+c0KpHZ4G)r2f z1=&1m&uC666T2gCG*AX?JG=6unncR zbVp9?$m}_k&Bltmu&YHqqkADxq#&O?PN`(lNFoIHrMEAa69tv%fo$EOgbr`%5ga|V z?x2uGU&CTja>s|Z+b8O$&`ru+(f;2p#~~U*;fs+*(C3hr;mq-@%9CeLua$+=I!-;p z=oLZVu!6pjMCv=i=y%9V``qh}Eye?!lcvRjfOYlGJx*GVJRUF4&nneQwQmbJ9thzF zk58pN7^p;ryE*gzXR_`{e&E`eD(d{*B^%^@fYgYHNd0DlrTKBxy zW!1|Q^ig&i6@BXRgI`aqqLB MtOj=9)!A$D2My=rzW@LL literal 0 HcmV?d00001 diff --git a/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_unchange_all.c.o.d b/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_unchange_all.c.o.d new file mode 100644 index 0000000..5f8f07b --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_unchange_all.c.o.d @@ -0,0 +1,41 @@ +lib/CMakeFiles/zip.dir/zip_unchange_all.c.o: \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_unchange_all.c \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zipint.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/config.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/zipconf.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/inttypes.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/inttypes.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/features.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stdint.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdint.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/alltypes.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/stdint.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/compat.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stdbool.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdbool.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/errno.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/errno.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/wasi/api.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stddef.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stddef.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_header_macro.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_ptrdiff_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_size_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_rsize_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_wchar_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_null.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_max_align_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_offsetof.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/sys/stat.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/sys/stat.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/stat.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdio.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/sys/types.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/endian.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/sys/select.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/time.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/time.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/string.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/string.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/strings.h diff --git a/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_unchange_archive.c.o b/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_unchange_archive.c.o new file mode 100644 index 0000000000000000000000000000000000000000..e2824d0f636358c769cc0e9a19921b0cb1d1dfa5 GIT binary patch literal 664 zcmYjPJC74F5VpO^ZC-bqyPOaOg;%5qT5T?OxoniHh~R2ks20aN+3dyp!0U|&O#&q~ z6%GFYi3*7yz;B|&CMl4t@ys_5e=}pm$`m7n@aO%0kH}lR!#gby`E6{=f^6f2p-3`d zGE5=O<(43HgiFQvIxO-eQy{G!HgGrmkQ8C5WRk_YuBPy{~t&#iUQK1)_`=}8m;+g;MV8ZJ)w1a^3Ju%b86q8qJzId8w1jJ zo3z^7K2%h@;>!!;Z8Xfm6OI3Gth%Lqo3 zXXuOBh@+T{L4`|Ts*+GPy!N6JYyYrr&-u^r^Fn!#I1|E8vM7=IH9y~g6nPeVt+Wy< z*)UOo=cJWl3juyC@&yy6*UR!uNmdkkbpEnX=F@nNge6GGIQVK?K@Zsx@61FIQArUZpa+>oQFA> z?~?`Yx$xw<2#W$;f+Zazvdpm+Sca88S%uXnXbsi`v<~Y!*2qTlJ=uf}*nCO0IKK^B zu-zv+u=B(NfZz!bVYk=<+>5i14Jg&7`K)-~6!tcH71s$CGDTW!8 z!SkbwOatfE4m#9wZDwN)A@ND*hoJH?^+Tuh{MCzVIjbm=vMC`Kqu*FozQ_{#E12mh z4&BtDaUvCY=+GpguGzYmvX0MvU!R|qDy2%tW1!zM7A03@9^a;|k`wmIzCRfMOuqDv zIt(r@FKe{!HY$zAMg7ukH>&k2J+rHhTWi!Rj#G8d+b*rtj?s5s7^E^g?oi%`)MjZ+ zlblg#rGD2Ox3{7GH!#D98Ox6C`=%F&_H~#U4ruI$LC47VQlEJP+fS*X_EKiId}?<5 sux0y+u@Hm-i|r`l^)uTM6OY7DW7?+t4LHClfGsD0HA8s6aWAK literal 0 HcmV?d00001 diff --git a/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_unchange_data.c.o.d b/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_unchange_data.c.o.d new file mode 100644 index 0000000..d8c60e4 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_unchange_data.c.o.d @@ -0,0 +1,41 @@ +lib/CMakeFiles/zip.dir/zip_unchange_data.c.o: \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_unchange_data.c \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zipint.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/config.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/zipconf.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/inttypes.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/inttypes.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/features.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stdint.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdint.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/alltypes.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/stdint.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/compat.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stdbool.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdbool.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/errno.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/errno.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/wasi/api.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stddef.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stddef.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_header_macro.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_ptrdiff_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_size_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_rsize_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_wchar_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_null.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_max_align_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_offsetof.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/sys/stat.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/sys/stat.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/stat.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdio.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/sys/types.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/endian.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/sys/select.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/time.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/time.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/string.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/string.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/strings.h diff --git a/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_utf-8.c.o b/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_utf-8.c.o new file mode 100644 index 0000000000000000000000000000000000000000..fc94e6646963ae0e5cb2d511bd77e63741ba16cf GIT binary patch literal 4857 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 literal 0 HcmV?d00001 diff --git a/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_utf-8.c.o.d b/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_utf-8.c.o.d new file mode 100644 index 0000000..e654693 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/lib/CMakeFiles/zip.dir/zip_utf-8.c.o.d @@ -0,0 +1,44 @@ +lib/CMakeFiles/zip.dir/zip_utf-8.c.o: \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip_utf-8.c \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zipint.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/config.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/zipconf.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/inttypes.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/inttypes.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/features.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stdint.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdint.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/alltypes.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/stdint.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/compat.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stdbool.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdbool.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/errno.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/errno.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/wasi/api.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stddef.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stddef.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_header_macro.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_ptrdiff_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_size_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_rsize_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_wchar_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_null.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_max_align_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_offsetof.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/sys/stat.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/sys/stat.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/stat.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdio.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/sys/types.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/endian.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/sys/select.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/time.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/time.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/string.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/string.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/strings.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/stdlib.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdlib.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/alloca.h diff --git a/thirdparty/libzip-1.11.3/build-emcmake/lib/CTestTestfile.cmake b/thirdparty/libzip-1.11.3/build-emcmake/lib/CTestTestfile.cmake new file mode 100644 index 0000000..6b1930a --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/lib/CTestTestfile.cmake @@ -0,0 +1,6 @@ +# CMake generated Testfile for +# Source directory: /home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib +# Build directory: /home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib +# +# This file includes the relevant testing commands required for +# testing this directory and lists subdirectories to be tested as well. diff --git a/thirdparty/libzip-1.11.3/build-emcmake/lib/Makefile b/thirdparty/libzip-1.11.3/build-emcmake/lib/Makefile new file mode 100644 index 0000000..bb572c0 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/lib/Makefile @@ -0,0 +1,3266 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.28 + +# Default target executed when no arguments are given to make. +default_target: all +.PHONY : default_target + +# Allow only one "make -f Makefile2" at a time, but pass parallelism. +.NOTPARALLEL: + +#============================================================================= +# Special targets provided by cmake. + +# Disable implicit rules so canonical targets will work. +.SUFFIXES: + +# Disable VCS-based implicit rules. +% : %,v + +# Disable VCS-based implicit rules. +% : RCS/% + +# Disable VCS-based implicit rules. +% : RCS/%,v + +# Disable VCS-based implicit rules. +% : SCCS/s.% + +# Disable VCS-based implicit rules. +% : s.% + +.SUFFIXES: .hpux_make_needs_suffix_list + +# Command-line flag to silence nested $(MAKE). +$(VERBOSE)MAKESILENT = -s + +#Suppress display of executed commands. +$(VERBOSE).SILENT: + +# A target that is always out of date. +cmake_force: +.PHONY : cmake_force + +#============================================================================= +# Set environment variables for the build. + +# The shell in which to execute make rules. +SHELL = /bin/sh + +# The CMake executable. +CMAKE_COMMAND = /usr/bin/cmake + +# The command to remove a file. +RM = /usr/bin/cmake -E rm -f + +# Escaping for special characters. +EQUALS = = + +# The top-level source directory on which CMake was run. +CMAKE_SOURCE_DIR = "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3" + +# The top-level build directory on which CMake was run. +CMAKE_BINARY_DIR = "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" + +#============================================================================= +# Targets provided globally by CMake. + +# Special rule for the target test +test: + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --cyan "Running tests..." + /usr/bin/ctest --force-new-ctest-process $(ARGS) +.PHONY : test + +# Special rule for the target test +test/fast: test +.PHONY : test/fast + +# Special rule for the target edit_cache +edit_cache: + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --cyan "No interactive CMake dialog available..." + /usr/bin/cmake -E echo No\ interactive\ CMake\ dialog\ available. +.PHONY : edit_cache + +# Special rule for the target edit_cache +edit_cache/fast: edit_cache +.PHONY : edit_cache/fast + +# Special rule for the target rebuild_cache +rebuild_cache: + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --cyan "Running CMake to regenerate build system..." + /usr/bin/cmake --regenerate-during-build -S$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) +.PHONY : rebuild_cache + +# Special rule for the target rebuild_cache +rebuild_cache/fast: rebuild_cache +.PHONY : rebuild_cache/fast + +# Special rule for the target list_install_components +list_install_components: + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --cyan "Available install components are: \"Unspecified\"" +.PHONY : list_install_components + +# Special rule for the target list_install_components +list_install_components/fast: list_install_components +.PHONY : list_install_components/fast + +# Special rule for the target install +install: preinstall + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --cyan "Install the project..." + /usr/bin/cmake -P cmake_install.cmake +.PHONY : install + +# Special rule for the target install +install/fast: preinstall/fast + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --cyan "Install the project..." + /usr/bin/cmake -P cmake_install.cmake +.PHONY : install/fast + +# Special rule for the target install/local +install/local: preinstall + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --cyan "Installing only the local directory..." + /usr/bin/cmake -DCMAKE_INSTALL_LOCAL_ONLY=1 -P cmake_install.cmake +.PHONY : install/local + +# Special rule for the target install/local +install/local/fast: preinstall/fast + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --cyan "Installing only the local directory..." + /usr/bin/cmake -DCMAKE_INSTALL_LOCAL_ONLY=1 -P cmake_install.cmake +.PHONY : install/local/fast + +# Special rule for the target install/strip +install/strip: preinstall + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --cyan "Installing the project stripped..." + /usr/bin/cmake -DCMAKE_INSTALL_DO_STRIP=1 -P cmake_install.cmake +.PHONY : install/strip + +# Special rule for the target install/strip +install/strip/fast: preinstall/fast + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --cyan "Installing the project stripped..." + /usr/bin/cmake -DCMAKE_INSTALL_DO_STRIP=1 -P cmake_install.cmake +.PHONY : install/strip/fast + +# The main all target +all: cmake_check_build_system + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(CMAKE_COMMAND) -E cmake_progress_start "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib//CMakeFiles/progress.marks" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 lib/all + $(CMAKE_COMMAND) -E cmake_progress_start "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" 0 +.PHONY : all + +# The main clean target +clean: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 lib/clean +.PHONY : clean + +# The main clean target +clean/fast: clean +.PHONY : clean/fast + +# Prepare targets for installation. +preinstall: all + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 lib/preinstall +.PHONY : preinstall + +# Prepare targets for installation. +preinstall/fast: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 lib/preinstall +.PHONY : preinstall/fast + +# clear depends +depend: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(CMAKE_COMMAND) -S$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles/Makefile.cmake 1 +.PHONY : depend + +# Convenience name for target. +lib/CMakeFiles/zip.dir/rule: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 lib/CMakeFiles/zip.dir/rule +.PHONY : lib/CMakeFiles/zip.dir/rule + +# Convenience name for target. +zip: lib/CMakeFiles/zip.dir/rule +.PHONY : zip + +# fast build rule for target. +zip/fast: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/build +.PHONY : zip/fast + +zip_add.o: zip_add.c.o +.PHONY : zip_add.o + +# target to build an object file +zip_add.c.o: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_add.c.o +.PHONY : zip_add.c.o + +zip_add.i: zip_add.c.i +.PHONY : zip_add.i + +# target to preprocess a source file +zip_add.c.i: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_add.c.i +.PHONY : zip_add.c.i + +zip_add.s: zip_add.c.s +.PHONY : zip_add.s + +# target to generate assembly for a file +zip_add.c.s: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_add.c.s +.PHONY : zip_add.c.s + +zip_add_dir.o: zip_add_dir.c.o +.PHONY : zip_add_dir.o + +# target to build an object file +zip_add_dir.c.o: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_add_dir.c.o +.PHONY : zip_add_dir.c.o + +zip_add_dir.i: zip_add_dir.c.i +.PHONY : zip_add_dir.i + +# target to preprocess a source file +zip_add_dir.c.i: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_add_dir.c.i +.PHONY : zip_add_dir.c.i + +zip_add_dir.s: zip_add_dir.c.s +.PHONY : zip_add_dir.s + +# target to generate assembly for a file +zip_add_dir.c.s: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_add_dir.c.s +.PHONY : zip_add_dir.c.s + +zip_add_entry.o: zip_add_entry.c.o +.PHONY : zip_add_entry.o + +# target to build an object file +zip_add_entry.c.o: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_add_entry.c.o +.PHONY : zip_add_entry.c.o + +zip_add_entry.i: zip_add_entry.c.i +.PHONY : zip_add_entry.i + +# target to preprocess a source file +zip_add_entry.c.i: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_add_entry.c.i +.PHONY : zip_add_entry.c.i + +zip_add_entry.s: zip_add_entry.c.s +.PHONY : zip_add_entry.s + +# target to generate assembly for a file +zip_add_entry.c.s: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_add_entry.c.s +.PHONY : zip_add_entry.c.s + +zip_algorithm_deflate.o: zip_algorithm_deflate.c.o +.PHONY : zip_algorithm_deflate.o + +# target to build an object file +zip_algorithm_deflate.c.o: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_algorithm_deflate.c.o +.PHONY : zip_algorithm_deflate.c.o + +zip_algorithm_deflate.i: zip_algorithm_deflate.c.i +.PHONY : zip_algorithm_deflate.i + +# target to preprocess a source file +zip_algorithm_deflate.c.i: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_algorithm_deflate.c.i +.PHONY : zip_algorithm_deflate.c.i + +zip_algorithm_deflate.s: zip_algorithm_deflate.c.s +.PHONY : zip_algorithm_deflate.s + +# target to generate assembly for a file +zip_algorithm_deflate.c.s: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_algorithm_deflate.c.s +.PHONY : zip_algorithm_deflate.c.s + +zip_buffer.o: zip_buffer.c.o +.PHONY : zip_buffer.o + +# target to build an object file +zip_buffer.c.o: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_buffer.c.o +.PHONY : zip_buffer.c.o + +zip_buffer.i: zip_buffer.c.i +.PHONY : zip_buffer.i + +# target to preprocess a source file +zip_buffer.c.i: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_buffer.c.i +.PHONY : zip_buffer.c.i + +zip_buffer.s: zip_buffer.c.s +.PHONY : zip_buffer.s + +# target to generate assembly for a file +zip_buffer.c.s: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_buffer.c.s +.PHONY : zip_buffer.c.s + +zip_close.o: zip_close.c.o +.PHONY : zip_close.o + +# target to build an object file +zip_close.c.o: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_close.c.o +.PHONY : zip_close.c.o + +zip_close.i: zip_close.c.i +.PHONY : zip_close.i + +# target to preprocess a source file +zip_close.c.i: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_close.c.i +.PHONY : zip_close.c.i + +zip_close.s: zip_close.c.s +.PHONY : zip_close.s + +# target to generate assembly for a file +zip_close.c.s: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_close.c.s +.PHONY : zip_close.c.s + +zip_delete.o: zip_delete.c.o +.PHONY : zip_delete.o + +# target to build an object file +zip_delete.c.o: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_delete.c.o +.PHONY : zip_delete.c.o + +zip_delete.i: zip_delete.c.i +.PHONY : zip_delete.i + +# target to preprocess a source file +zip_delete.c.i: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_delete.c.i +.PHONY : zip_delete.c.i + +zip_delete.s: zip_delete.c.s +.PHONY : zip_delete.s + +# target to generate assembly for a file +zip_delete.c.s: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_delete.c.s +.PHONY : zip_delete.c.s + +zip_dir_add.o: zip_dir_add.c.o +.PHONY : zip_dir_add.o + +# target to build an object file +zip_dir_add.c.o: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_dir_add.c.o +.PHONY : zip_dir_add.c.o + +zip_dir_add.i: zip_dir_add.c.i +.PHONY : zip_dir_add.i + +# target to preprocess a source file +zip_dir_add.c.i: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_dir_add.c.i +.PHONY : zip_dir_add.c.i + +zip_dir_add.s: zip_dir_add.c.s +.PHONY : zip_dir_add.s + +# target to generate assembly for a file +zip_dir_add.c.s: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_dir_add.c.s +.PHONY : zip_dir_add.c.s + +zip_dirent.o: zip_dirent.c.o +.PHONY : zip_dirent.o + +# target to build an object file +zip_dirent.c.o: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_dirent.c.o +.PHONY : zip_dirent.c.o + +zip_dirent.i: zip_dirent.c.i +.PHONY : zip_dirent.i + +# target to preprocess a source file +zip_dirent.c.i: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_dirent.c.i +.PHONY : zip_dirent.c.i + +zip_dirent.s: zip_dirent.c.s +.PHONY : zip_dirent.s + +# target to generate assembly for a file +zip_dirent.c.s: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_dirent.c.s +.PHONY : zip_dirent.c.s + +zip_discard.o: zip_discard.c.o +.PHONY : zip_discard.o + +# target to build an object file +zip_discard.c.o: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_discard.c.o +.PHONY : zip_discard.c.o + +zip_discard.i: zip_discard.c.i +.PHONY : zip_discard.i + +# target to preprocess a source file +zip_discard.c.i: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_discard.c.i +.PHONY : zip_discard.c.i + +zip_discard.s: zip_discard.c.s +.PHONY : zip_discard.s + +# target to generate assembly for a file +zip_discard.c.s: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_discard.c.s +.PHONY : zip_discard.c.s + +zip_entry.o: zip_entry.c.o +.PHONY : zip_entry.o + +# target to build an object file +zip_entry.c.o: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_entry.c.o +.PHONY : zip_entry.c.o + +zip_entry.i: zip_entry.c.i +.PHONY : zip_entry.i + +# target to preprocess a source file +zip_entry.c.i: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_entry.c.i +.PHONY : zip_entry.c.i + +zip_entry.s: zip_entry.c.s +.PHONY : zip_entry.s + +# target to generate assembly for a file +zip_entry.c.s: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_entry.c.s +.PHONY : zip_entry.c.s + +zip_err_str.o: zip_err_str.c.o +.PHONY : zip_err_str.o + +# target to build an object file +zip_err_str.c.o: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_err_str.c.o +.PHONY : zip_err_str.c.o + +zip_err_str.i: zip_err_str.c.i +.PHONY : zip_err_str.i + +# target to preprocess a source file +zip_err_str.c.i: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_err_str.c.i +.PHONY : zip_err_str.c.i + +zip_err_str.s: zip_err_str.c.s +.PHONY : zip_err_str.s + +# target to generate assembly for a file +zip_err_str.c.s: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_err_str.c.s +.PHONY : zip_err_str.c.s + +zip_error.o: zip_error.c.o +.PHONY : zip_error.o + +# target to build an object file +zip_error.c.o: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_error.c.o +.PHONY : zip_error.c.o + +zip_error.i: zip_error.c.i +.PHONY : zip_error.i + +# target to preprocess a source file +zip_error.c.i: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_error.c.i +.PHONY : zip_error.c.i + +zip_error.s: zip_error.c.s +.PHONY : zip_error.s + +# target to generate assembly for a file +zip_error.c.s: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_error.c.s +.PHONY : zip_error.c.s + +zip_error_clear.o: zip_error_clear.c.o +.PHONY : zip_error_clear.o + +# target to build an object file +zip_error_clear.c.o: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_error_clear.c.o +.PHONY : zip_error_clear.c.o + +zip_error_clear.i: zip_error_clear.c.i +.PHONY : zip_error_clear.i + +# target to preprocess a source file +zip_error_clear.c.i: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_error_clear.c.i +.PHONY : zip_error_clear.c.i + +zip_error_clear.s: zip_error_clear.c.s +.PHONY : zip_error_clear.s + +# target to generate assembly for a file +zip_error_clear.c.s: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_error_clear.c.s +.PHONY : zip_error_clear.c.s + +zip_error_get.o: zip_error_get.c.o +.PHONY : zip_error_get.o + +# target to build an object file +zip_error_get.c.o: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_error_get.c.o +.PHONY : zip_error_get.c.o + +zip_error_get.i: zip_error_get.c.i +.PHONY : zip_error_get.i + +# target to preprocess a source file +zip_error_get.c.i: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_error_get.c.i +.PHONY : zip_error_get.c.i + +zip_error_get.s: zip_error_get.c.s +.PHONY : zip_error_get.s + +# target to generate assembly for a file +zip_error_get.c.s: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_error_get.c.s +.PHONY : zip_error_get.c.s + +zip_error_get_sys_type.o: zip_error_get_sys_type.c.o +.PHONY : zip_error_get_sys_type.o + +# target to build an object file +zip_error_get_sys_type.c.o: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_error_get_sys_type.c.o +.PHONY : zip_error_get_sys_type.c.o + +zip_error_get_sys_type.i: zip_error_get_sys_type.c.i +.PHONY : zip_error_get_sys_type.i + +# target to preprocess a source file +zip_error_get_sys_type.c.i: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_error_get_sys_type.c.i +.PHONY : zip_error_get_sys_type.c.i + +zip_error_get_sys_type.s: zip_error_get_sys_type.c.s +.PHONY : zip_error_get_sys_type.s + +# target to generate assembly for a file +zip_error_get_sys_type.c.s: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_error_get_sys_type.c.s +.PHONY : zip_error_get_sys_type.c.s + +zip_error_strerror.o: zip_error_strerror.c.o +.PHONY : zip_error_strerror.o + +# target to build an object file +zip_error_strerror.c.o: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_error_strerror.c.o +.PHONY : zip_error_strerror.c.o + +zip_error_strerror.i: zip_error_strerror.c.i +.PHONY : zip_error_strerror.i + +# target to preprocess a source file +zip_error_strerror.c.i: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_error_strerror.c.i +.PHONY : zip_error_strerror.c.i + +zip_error_strerror.s: zip_error_strerror.c.s +.PHONY : zip_error_strerror.s + +# target to generate assembly for a file +zip_error_strerror.c.s: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_error_strerror.c.s +.PHONY : zip_error_strerror.c.s + +zip_error_to_str.o: zip_error_to_str.c.o +.PHONY : zip_error_to_str.o + +# target to build an object file +zip_error_to_str.c.o: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_error_to_str.c.o +.PHONY : zip_error_to_str.c.o + +zip_error_to_str.i: zip_error_to_str.c.i +.PHONY : zip_error_to_str.i + +# target to preprocess a source file +zip_error_to_str.c.i: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_error_to_str.c.i +.PHONY : zip_error_to_str.c.i + +zip_error_to_str.s: zip_error_to_str.c.s +.PHONY : zip_error_to_str.s + +# target to generate assembly for a file +zip_error_to_str.c.s: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_error_to_str.c.s +.PHONY : zip_error_to_str.c.s + +zip_extra_field.o: zip_extra_field.c.o +.PHONY : zip_extra_field.o + +# target to build an object file +zip_extra_field.c.o: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_extra_field.c.o +.PHONY : zip_extra_field.c.o + +zip_extra_field.i: zip_extra_field.c.i +.PHONY : zip_extra_field.i + +# target to preprocess a source file +zip_extra_field.c.i: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_extra_field.c.i +.PHONY : zip_extra_field.c.i + +zip_extra_field.s: zip_extra_field.c.s +.PHONY : zip_extra_field.s + +# target to generate assembly for a file +zip_extra_field.c.s: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_extra_field.c.s +.PHONY : zip_extra_field.c.s + +zip_extra_field_api.o: zip_extra_field_api.c.o +.PHONY : zip_extra_field_api.o + +# target to build an object file +zip_extra_field_api.c.o: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_extra_field_api.c.o +.PHONY : zip_extra_field_api.c.o + +zip_extra_field_api.i: zip_extra_field_api.c.i +.PHONY : zip_extra_field_api.i + +# target to preprocess a source file +zip_extra_field_api.c.i: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_extra_field_api.c.i +.PHONY : zip_extra_field_api.c.i + +zip_extra_field_api.s: zip_extra_field_api.c.s +.PHONY : zip_extra_field_api.s + +# target to generate assembly for a file +zip_extra_field_api.c.s: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_extra_field_api.c.s +.PHONY : zip_extra_field_api.c.s + +zip_fclose.o: zip_fclose.c.o +.PHONY : zip_fclose.o + +# target to build an object file +zip_fclose.c.o: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_fclose.c.o +.PHONY : zip_fclose.c.o + +zip_fclose.i: zip_fclose.c.i +.PHONY : zip_fclose.i + +# target to preprocess a source file +zip_fclose.c.i: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_fclose.c.i +.PHONY : zip_fclose.c.i + +zip_fclose.s: zip_fclose.c.s +.PHONY : zip_fclose.s + +# target to generate assembly for a file +zip_fclose.c.s: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_fclose.c.s +.PHONY : zip_fclose.c.s + +zip_fdopen.o: zip_fdopen.c.o +.PHONY : zip_fdopen.o + +# target to build an object file +zip_fdopen.c.o: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_fdopen.c.o +.PHONY : zip_fdopen.c.o + +zip_fdopen.i: zip_fdopen.c.i +.PHONY : zip_fdopen.i + +# target to preprocess a source file +zip_fdopen.c.i: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_fdopen.c.i +.PHONY : zip_fdopen.c.i + +zip_fdopen.s: zip_fdopen.c.s +.PHONY : zip_fdopen.s + +# target to generate assembly for a file +zip_fdopen.c.s: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_fdopen.c.s +.PHONY : zip_fdopen.c.s + +zip_file_add.o: zip_file_add.c.o +.PHONY : zip_file_add.o + +# target to build an object file +zip_file_add.c.o: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_file_add.c.o +.PHONY : zip_file_add.c.o + +zip_file_add.i: zip_file_add.c.i +.PHONY : zip_file_add.i + +# target to preprocess a source file +zip_file_add.c.i: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_file_add.c.i +.PHONY : zip_file_add.c.i + +zip_file_add.s: zip_file_add.c.s +.PHONY : zip_file_add.s + +# target to generate assembly for a file +zip_file_add.c.s: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_file_add.c.s +.PHONY : zip_file_add.c.s + +zip_file_error_clear.o: zip_file_error_clear.c.o +.PHONY : zip_file_error_clear.o + +# target to build an object file +zip_file_error_clear.c.o: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_file_error_clear.c.o +.PHONY : zip_file_error_clear.c.o + +zip_file_error_clear.i: zip_file_error_clear.c.i +.PHONY : zip_file_error_clear.i + +# target to preprocess a source file +zip_file_error_clear.c.i: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_file_error_clear.c.i +.PHONY : zip_file_error_clear.c.i + +zip_file_error_clear.s: zip_file_error_clear.c.s +.PHONY : zip_file_error_clear.s + +# target to generate assembly for a file +zip_file_error_clear.c.s: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_file_error_clear.c.s +.PHONY : zip_file_error_clear.c.s + +zip_file_error_get.o: zip_file_error_get.c.o +.PHONY : zip_file_error_get.o + +# target to build an object file +zip_file_error_get.c.o: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_file_error_get.c.o +.PHONY : zip_file_error_get.c.o + +zip_file_error_get.i: zip_file_error_get.c.i +.PHONY : zip_file_error_get.i + +# target to preprocess a source file +zip_file_error_get.c.i: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_file_error_get.c.i +.PHONY : zip_file_error_get.c.i + +zip_file_error_get.s: zip_file_error_get.c.s +.PHONY : zip_file_error_get.s + +# target to generate assembly for a file +zip_file_error_get.c.s: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_file_error_get.c.s +.PHONY : zip_file_error_get.c.s + +zip_file_get_comment.o: zip_file_get_comment.c.o +.PHONY : zip_file_get_comment.o + +# target to build an object file +zip_file_get_comment.c.o: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_file_get_comment.c.o +.PHONY : zip_file_get_comment.c.o + +zip_file_get_comment.i: zip_file_get_comment.c.i +.PHONY : zip_file_get_comment.i + +# target to preprocess a source file +zip_file_get_comment.c.i: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_file_get_comment.c.i +.PHONY : zip_file_get_comment.c.i + +zip_file_get_comment.s: zip_file_get_comment.c.s +.PHONY : zip_file_get_comment.s + +# target to generate assembly for a file +zip_file_get_comment.c.s: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_file_get_comment.c.s +.PHONY : zip_file_get_comment.c.s + +zip_file_get_external_attributes.o: zip_file_get_external_attributes.c.o +.PHONY : zip_file_get_external_attributes.o + +# target to build an object file +zip_file_get_external_attributes.c.o: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_file_get_external_attributes.c.o +.PHONY : zip_file_get_external_attributes.c.o + +zip_file_get_external_attributes.i: zip_file_get_external_attributes.c.i +.PHONY : zip_file_get_external_attributes.i + +# target to preprocess a source file +zip_file_get_external_attributes.c.i: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_file_get_external_attributes.c.i +.PHONY : zip_file_get_external_attributes.c.i + +zip_file_get_external_attributes.s: zip_file_get_external_attributes.c.s +.PHONY : zip_file_get_external_attributes.s + +# target to generate assembly for a file +zip_file_get_external_attributes.c.s: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_file_get_external_attributes.c.s +.PHONY : zip_file_get_external_attributes.c.s + +zip_file_get_offset.o: zip_file_get_offset.c.o +.PHONY : zip_file_get_offset.o + +# target to build an object file +zip_file_get_offset.c.o: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_file_get_offset.c.o +.PHONY : zip_file_get_offset.c.o + +zip_file_get_offset.i: zip_file_get_offset.c.i +.PHONY : zip_file_get_offset.i + +# target to preprocess a source file +zip_file_get_offset.c.i: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_file_get_offset.c.i +.PHONY : zip_file_get_offset.c.i + +zip_file_get_offset.s: zip_file_get_offset.c.s +.PHONY : zip_file_get_offset.s + +# target to generate assembly for a file +zip_file_get_offset.c.s: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_file_get_offset.c.s +.PHONY : zip_file_get_offset.c.s + +zip_file_rename.o: zip_file_rename.c.o +.PHONY : zip_file_rename.o + +# target to build an object file +zip_file_rename.c.o: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_file_rename.c.o +.PHONY : zip_file_rename.c.o + +zip_file_rename.i: zip_file_rename.c.i +.PHONY : zip_file_rename.i + +# target to preprocess a source file +zip_file_rename.c.i: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_file_rename.c.i +.PHONY : zip_file_rename.c.i + +zip_file_rename.s: zip_file_rename.c.s +.PHONY : zip_file_rename.s + +# target to generate assembly for a file +zip_file_rename.c.s: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_file_rename.c.s +.PHONY : zip_file_rename.c.s + +zip_file_replace.o: zip_file_replace.c.o +.PHONY : zip_file_replace.o + +# target to build an object file +zip_file_replace.c.o: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_file_replace.c.o +.PHONY : zip_file_replace.c.o + +zip_file_replace.i: zip_file_replace.c.i +.PHONY : zip_file_replace.i + +# target to preprocess a source file +zip_file_replace.c.i: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_file_replace.c.i +.PHONY : zip_file_replace.c.i + +zip_file_replace.s: zip_file_replace.c.s +.PHONY : zip_file_replace.s + +# target to generate assembly for a file +zip_file_replace.c.s: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_file_replace.c.s +.PHONY : zip_file_replace.c.s + +zip_file_set_comment.o: zip_file_set_comment.c.o +.PHONY : zip_file_set_comment.o + +# target to build an object file +zip_file_set_comment.c.o: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_file_set_comment.c.o +.PHONY : zip_file_set_comment.c.o + +zip_file_set_comment.i: zip_file_set_comment.c.i +.PHONY : zip_file_set_comment.i + +# target to preprocess a source file +zip_file_set_comment.c.i: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_file_set_comment.c.i +.PHONY : zip_file_set_comment.c.i + +zip_file_set_comment.s: zip_file_set_comment.c.s +.PHONY : zip_file_set_comment.s + +# target to generate assembly for a file +zip_file_set_comment.c.s: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_file_set_comment.c.s +.PHONY : zip_file_set_comment.c.s + +zip_file_set_encryption.o: zip_file_set_encryption.c.o +.PHONY : zip_file_set_encryption.o + +# target to build an object file +zip_file_set_encryption.c.o: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_file_set_encryption.c.o +.PHONY : zip_file_set_encryption.c.o + +zip_file_set_encryption.i: zip_file_set_encryption.c.i +.PHONY : zip_file_set_encryption.i + +# target to preprocess a source file +zip_file_set_encryption.c.i: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_file_set_encryption.c.i +.PHONY : zip_file_set_encryption.c.i + +zip_file_set_encryption.s: zip_file_set_encryption.c.s +.PHONY : zip_file_set_encryption.s + +# target to generate assembly for a file +zip_file_set_encryption.c.s: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_file_set_encryption.c.s +.PHONY : zip_file_set_encryption.c.s + +zip_file_set_external_attributes.o: zip_file_set_external_attributes.c.o +.PHONY : zip_file_set_external_attributes.o + +# target to build an object file +zip_file_set_external_attributes.c.o: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_file_set_external_attributes.c.o +.PHONY : zip_file_set_external_attributes.c.o + +zip_file_set_external_attributes.i: zip_file_set_external_attributes.c.i +.PHONY : zip_file_set_external_attributes.i + +# target to preprocess a source file +zip_file_set_external_attributes.c.i: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_file_set_external_attributes.c.i +.PHONY : zip_file_set_external_attributes.c.i + +zip_file_set_external_attributes.s: zip_file_set_external_attributes.c.s +.PHONY : zip_file_set_external_attributes.s + +# target to generate assembly for a file +zip_file_set_external_attributes.c.s: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_file_set_external_attributes.c.s +.PHONY : zip_file_set_external_attributes.c.s + +zip_file_set_mtime.o: zip_file_set_mtime.c.o +.PHONY : zip_file_set_mtime.o + +# target to build an object file +zip_file_set_mtime.c.o: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_file_set_mtime.c.o +.PHONY : zip_file_set_mtime.c.o + +zip_file_set_mtime.i: zip_file_set_mtime.c.i +.PHONY : zip_file_set_mtime.i + +# target to preprocess a source file +zip_file_set_mtime.c.i: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_file_set_mtime.c.i +.PHONY : zip_file_set_mtime.c.i + +zip_file_set_mtime.s: zip_file_set_mtime.c.s +.PHONY : zip_file_set_mtime.s + +# target to generate assembly for a file +zip_file_set_mtime.c.s: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_file_set_mtime.c.s +.PHONY : zip_file_set_mtime.c.s + +zip_file_strerror.o: zip_file_strerror.c.o +.PHONY : zip_file_strerror.o + +# target to build an object file +zip_file_strerror.c.o: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_file_strerror.c.o +.PHONY : zip_file_strerror.c.o + +zip_file_strerror.i: zip_file_strerror.c.i +.PHONY : zip_file_strerror.i + +# target to preprocess a source file +zip_file_strerror.c.i: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_file_strerror.c.i +.PHONY : zip_file_strerror.c.i + +zip_file_strerror.s: zip_file_strerror.c.s +.PHONY : zip_file_strerror.s + +# target to generate assembly for a file +zip_file_strerror.c.s: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_file_strerror.c.s +.PHONY : zip_file_strerror.c.s + +zip_fopen.o: zip_fopen.c.o +.PHONY : zip_fopen.o + +# target to build an object file +zip_fopen.c.o: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_fopen.c.o +.PHONY : zip_fopen.c.o + +zip_fopen.i: zip_fopen.c.i +.PHONY : zip_fopen.i + +# target to preprocess a source file +zip_fopen.c.i: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_fopen.c.i +.PHONY : zip_fopen.c.i + +zip_fopen.s: zip_fopen.c.s +.PHONY : zip_fopen.s + +# target to generate assembly for a file +zip_fopen.c.s: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_fopen.c.s +.PHONY : zip_fopen.c.s + +zip_fopen_encrypted.o: zip_fopen_encrypted.c.o +.PHONY : zip_fopen_encrypted.o + +# target to build an object file +zip_fopen_encrypted.c.o: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_fopen_encrypted.c.o +.PHONY : zip_fopen_encrypted.c.o + +zip_fopen_encrypted.i: zip_fopen_encrypted.c.i +.PHONY : zip_fopen_encrypted.i + +# target to preprocess a source file +zip_fopen_encrypted.c.i: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_fopen_encrypted.c.i +.PHONY : zip_fopen_encrypted.c.i + +zip_fopen_encrypted.s: zip_fopen_encrypted.c.s +.PHONY : zip_fopen_encrypted.s + +# target to generate assembly for a file +zip_fopen_encrypted.c.s: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_fopen_encrypted.c.s +.PHONY : zip_fopen_encrypted.c.s + +zip_fopen_index.o: zip_fopen_index.c.o +.PHONY : zip_fopen_index.o + +# target to build an object file +zip_fopen_index.c.o: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_fopen_index.c.o +.PHONY : zip_fopen_index.c.o + +zip_fopen_index.i: zip_fopen_index.c.i +.PHONY : zip_fopen_index.i + +# target to preprocess a source file +zip_fopen_index.c.i: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_fopen_index.c.i +.PHONY : zip_fopen_index.c.i + +zip_fopen_index.s: zip_fopen_index.c.s +.PHONY : zip_fopen_index.s + +# target to generate assembly for a file +zip_fopen_index.c.s: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_fopen_index.c.s +.PHONY : zip_fopen_index.c.s + +zip_fopen_index_encrypted.o: zip_fopen_index_encrypted.c.o +.PHONY : zip_fopen_index_encrypted.o + +# target to build an object file +zip_fopen_index_encrypted.c.o: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_fopen_index_encrypted.c.o +.PHONY : zip_fopen_index_encrypted.c.o + +zip_fopen_index_encrypted.i: zip_fopen_index_encrypted.c.i +.PHONY : zip_fopen_index_encrypted.i + +# target to preprocess a source file +zip_fopen_index_encrypted.c.i: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_fopen_index_encrypted.c.i +.PHONY : zip_fopen_index_encrypted.c.i + +zip_fopen_index_encrypted.s: zip_fopen_index_encrypted.c.s +.PHONY : zip_fopen_index_encrypted.s + +# target to generate assembly for a file +zip_fopen_index_encrypted.c.s: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_fopen_index_encrypted.c.s +.PHONY : zip_fopen_index_encrypted.c.s + +zip_fread.o: zip_fread.c.o +.PHONY : zip_fread.o + +# target to build an object file +zip_fread.c.o: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_fread.c.o +.PHONY : zip_fread.c.o + +zip_fread.i: zip_fread.c.i +.PHONY : zip_fread.i + +# target to preprocess a source file +zip_fread.c.i: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_fread.c.i +.PHONY : zip_fread.c.i + +zip_fread.s: zip_fread.c.s +.PHONY : zip_fread.s + +# target to generate assembly for a file +zip_fread.c.s: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_fread.c.s +.PHONY : zip_fread.c.s + +zip_fseek.o: zip_fseek.c.o +.PHONY : zip_fseek.o + +# target to build an object file +zip_fseek.c.o: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_fseek.c.o +.PHONY : zip_fseek.c.o + +zip_fseek.i: zip_fseek.c.i +.PHONY : zip_fseek.i + +# target to preprocess a source file +zip_fseek.c.i: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_fseek.c.i +.PHONY : zip_fseek.c.i + +zip_fseek.s: zip_fseek.c.s +.PHONY : zip_fseek.s + +# target to generate assembly for a file +zip_fseek.c.s: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_fseek.c.s +.PHONY : zip_fseek.c.s + +zip_ftell.o: zip_ftell.c.o +.PHONY : zip_ftell.o + +# target to build an object file +zip_ftell.c.o: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_ftell.c.o +.PHONY : zip_ftell.c.o + +zip_ftell.i: zip_ftell.c.i +.PHONY : zip_ftell.i + +# target to preprocess a source file +zip_ftell.c.i: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_ftell.c.i +.PHONY : zip_ftell.c.i + +zip_ftell.s: zip_ftell.c.s +.PHONY : zip_ftell.s + +# target to generate assembly for a file +zip_ftell.c.s: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_ftell.c.s +.PHONY : zip_ftell.c.s + +zip_get_archive_comment.o: zip_get_archive_comment.c.o +.PHONY : zip_get_archive_comment.o + +# target to build an object file +zip_get_archive_comment.c.o: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_get_archive_comment.c.o +.PHONY : zip_get_archive_comment.c.o + +zip_get_archive_comment.i: zip_get_archive_comment.c.i +.PHONY : zip_get_archive_comment.i + +# target to preprocess a source file +zip_get_archive_comment.c.i: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_get_archive_comment.c.i +.PHONY : zip_get_archive_comment.c.i + +zip_get_archive_comment.s: zip_get_archive_comment.c.s +.PHONY : zip_get_archive_comment.s + +# target to generate assembly for a file +zip_get_archive_comment.c.s: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_get_archive_comment.c.s +.PHONY : zip_get_archive_comment.c.s + +zip_get_archive_flag.o: zip_get_archive_flag.c.o +.PHONY : zip_get_archive_flag.o + +# target to build an object file +zip_get_archive_flag.c.o: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_get_archive_flag.c.o +.PHONY : zip_get_archive_flag.c.o + +zip_get_archive_flag.i: zip_get_archive_flag.c.i +.PHONY : zip_get_archive_flag.i + +# target to preprocess a source file +zip_get_archive_flag.c.i: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_get_archive_flag.c.i +.PHONY : zip_get_archive_flag.c.i + +zip_get_archive_flag.s: zip_get_archive_flag.c.s +.PHONY : zip_get_archive_flag.s + +# target to generate assembly for a file +zip_get_archive_flag.c.s: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_get_archive_flag.c.s +.PHONY : zip_get_archive_flag.c.s + +zip_get_encryption_implementation.o: zip_get_encryption_implementation.c.o +.PHONY : zip_get_encryption_implementation.o + +# target to build an object file +zip_get_encryption_implementation.c.o: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_get_encryption_implementation.c.o +.PHONY : zip_get_encryption_implementation.c.o + +zip_get_encryption_implementation.i: zip_get_encryption_implementation.c.i +.PHONY : zip_get_encryption_implementation.i + +# target to preprocess a source file +zip_get_encryption_implementation.c.i: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_get_encryption_implementation.c.i +.PHONY : zip_get_encryption_implementation.c.i + +zip_get_encryption_implementation.s: zip_get_encryption_implementation.c.s +.PHONY : zip_get_encryption_implementation.s + +# target to generate assembly for a file +zip_get_encryption_implementation.c.s: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_get_encryption_implementation.c.s +.PHONY : zip_get_encryption_implementation.c.s + +zip_get_file_comment.o: zip_get_file_comment.c.o +.PHONY : zip_get_file_comment.o + +# target to build an object file +zip_get_file_comment.c.o: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_get_file_comment.c.o +.PHONY : zip_get_file_comment.c.o + +zip_get_file_comment.i: zip_get_file_comment.c.i +.PHONY : zip_get_file_comment.i + +# target to preprocess a source file +zip_get_file_comment.c.i: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_get_file_comment.c.i +.PHONY : zip_get_file_comment.c.i + +zip_get_file_comment.s: zip_get_file_comment.c.s +.PHONY : zip_get_file_comment.s + +# target to generate assembly for a file +zip_get_file_comment.c.s: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_get_file_comment.c.s +.PHONY : zip_get_file_comment.c.s + +zip_get_name.o: zip_get_name.c.o +.PHONY : zip_get_name.o + +# target to build an object file +zip_get_name.c.o: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_get_name.c.o +.PHONY : zip_get_name.c.o + +zip_get_name.i: zip_get_name.c.i +.PHONY : zip_get_name.i + +# target to preprocess a source file +zip_get_name.c.i: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_get_name.c.i +.PHONY : zip_get_name.c.i + +zip_get_name.s: zip_get_name.c.s +.PHONY : zip_get_name.s + +# target to generate assembly for a file +zip_get_name.c.s: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_get_name.c.s +.PHONY : zip_get_name.c.s + +zip_get_num_entries.o: zip_get_num_entries.c.o +.PHONY : zip_get_num_entries.o + +# target to build an object file +zip_get_num_entries.c.o: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_get_num_entries.c.o +.PHONY : zip_get_num_entries.c.o + +zip_get_num_entries.i: zip_get_num_entries.c.i +.PHONY : zip_get_num_entries.i + +# target to preprocess a source file +zip_get_num_entries.c.i: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_get_num_entries.c.i +.PHONY : zip_get_num_entries.c.i + +zip_get_num_entries.s: zip_get_num_entries.c.s +.PHONY : zip_get_num_entries.s + +# target to generate assembly for a file +zip_get_num_entries.c.s: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_get_num_entries.c.s +.PHONY : zip_get_num_entries.c.s + +zip_get_num_files.o: zip_get_num_files.c.o +.PHONY : zip_get_num_files.o + +# target to build an object file +zip_get_num_files.c.o: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_get_num_files.c.o +.PHONY : zip_get_num_files.c.o + +zip_get_num_files.i: zip_get_num_files.c.i +.PHONY : zip_get_num_files.i + +# target to preprocess a source file +zip_get_num_files.c.i: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_get_num_files.c.i +.PHONY : zip_get_num_files.c.i + +zip_get_num_files.s: zip_get_num_files.c.s +.PHONY : zip_get_num_files.s + +# target to generate assembly for a file +zip_get_num_files.c.s: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_get_num_files.c.s +.PHONY : zip_get_num_files.c.s + +zip_hash.o: zip_hash.c.o +.PHONY : zip_hash.o + +# target to build an object file +zip_hash.c.o: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_hash.c.o +.PHONY : zip_hash.c.o + +zip_hash.i: zip_hash.c.i +.PHONY : zip_hash.i + +# target to preprocess a source file +zip_hash.c.i: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_hash.c.i +.PHONY : zip_hash.c.i + +zip_hash.s: zip_hash.c.s +.PHONY : zip_hash.s + +# target to generate assembly for a file +zip_hash.c.s: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_hash.c.s +.PHONY : zip_hash.c.s + +zip_io_util.o: zip_io_util.c.o +.PHONY : zip_io_util.o + +# target to build an object file +zip_io_util.c.o: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_io_util.c.o +.PHONY : zip_io_util.c.o + +zip_io_util.i: zip_io_util.c.i +.PHONY : zip_io_util.i + +# target to preprocess a source file +zip_io_util.c.i: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_io_util.c.i +.PHONY : zip_io_util.c.i + +zip_io_util.s: zip_io_util.c.s +.PHONY : zip_io_util.s + +# target to generate assembly for a file +zip_io_util.c.s: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_io_util.c.s +.PHONY : zip_io_util.c.s + +zip_libzip_version.o: zip_libzip_version.c.o +.PHONY : zip_libzip_version.o + +# target to build an object file +zip_libzip_version.c.o: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_libzip_version.c.o +.PHONY : zip_libzip_version.c.o + +zip_libzip_version.i: zip_libzip_version.c.i +.PHONY : zip_libzip_version.i + +# target to preprocess a source file +zip_libzip_version.c.i: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_libzip_version.c.i +.PHONY : zip_libzip_version.c.i + +zip_libzip_version.s: zip_libzip_version.c.s +.PHONY : zip_libzip_version.s + +# target to generate assembly for a file +zip_libzip_version.c.s: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_libzip_version.c.s +.PHONY : zip_libzip_version.c.s + +zip_memdup.o: zip_memdup.c.o +.PHONY : zip_memdup.o + +# target to build an object file +zip_memdup.c.o: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_memdup.c.o +.PHONY : zip_memdup.c.o + +zip_memdup.i: zip_memdup.c.i +.PHONY : zip_memdup.i + +# target to preprocess a source file +zip_memdup.c.i: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_memdup.c.i +.PHONY : zip_memdup.c.i + +zip_memdup.s: zip_memdup.c.s +.PHONY : zip_memdup.s + +# target to generate assembly for a file +zip_memdup.c.s: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_memdup.c.s +.PHONY : zip_memdup.c.s + +zip_name_locate.o: zip_name_locate.c.o +.PHONY : zip_name_locate.o + +# target to build an object file +zip_name_locate.c.o: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_name_locate.c.o +.PHONY : zip_name_locate.c.o + +zip_name_locate.i: zip_name_locate.c.i +.PHONY : zip_name_locate.i + +# target to preprocess a source file +zip_name_locate.c.i: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_name_locate.c.i +.PHONY : zip_name_locate.c.i + +zip_name_locate.s: zip_name_locate.c.s +.PHONY : zip_name_locate.s + +# target to generate assembly for a file +zip_name_locate.c.s: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_name_locate.c.s +.PHONY : zip_name_locate.c.s + +zip_new.o: zip_new.c.o +.PHONY : zip_new.o + +# target to build an object file +zip_new.c.o: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_new.c.o +.PHONY : zip_new.c.o + +zip_new.i: zip_new.c.i +.PHONY : zip_new.i + +# target to preprocess a source file +zip_new.c.i: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_new.c.i +.PHONY : zip_new.c.i + +zip_new.s: zip_new.c.s +.PHONY : zip_new.s + +# target to generate assembly for a file +zip_new.c.s: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_new.c.s +.PHONY : zip_new.c.s + +zip_open.o: zip_open.c.o +.PHONY : zip_open.o + +# target to build an object file +zip_open.c.o: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_open.c.o +.PHONY : zip_open.c.o + +zip_open.i: zip_open.c.i +.PHONY : zip_open.i + +# target to preprocess a source file +zip_open.c.i: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_open.c.i +.PHONY : zip_open.c.i + +zip_open.s: zip_open.c.s +.PHONY : zip_open.s + +# target to generate assembly for a file +zip_open.c.s: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_open.c.s +.PHONY : zip_open.c.s + +zip_pkware.o: zip_pkware.c.o +.PHONY : zip_pkware.o + +# target to build an object file +zip_pkware.c.o: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_pkware.c.o +.PHONY : zip_pkware.c.o + +zip_pkware.i: zip_pkware.c.i +.PHONY : zip_pkware.i + +# target to preprocess a source file +zip_pkware.c.i: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_pkware.c.i +.PHONY : zip_pkware.c.i + +zip_pkware.s: zip_pkware.c.s +.PHONY : zip_pkware.s + +# target to generate assembly for a file +zip_pkware.c.s: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_pkware.c.s +.PHONY : zip_pkware.c.s + +zip_progress.o: zip_progress.c.o +.PHONY : zip_progress.o + +# target to build an object file +zip_progress.c.o: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_progress.c.o +.PHONY : zip_progress.c.o + +zip_progress.i: zip_progress.c.i +.PHONY : zip_progress.i + +# target to preprocess a source file +zip_progress.c.i: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_progress.c.i +.PHONY : zip_progress.c.i + +zip_progress.s: zip_progress.c.s +.PHONY : zip_progress.s + +# target to generate assembly for a file +zip_progress.c.s: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_progress.c.s +.PHONY : zip_progress.c.s + +zip_random_unix.o: zip_random_unix.c.o +.PHONY : zip_random_unix.o + +# target to build an object file +zip_random_unix.c.o: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_random_unix.c.o +.PHONY : zip_random_unix.c.o + +zip_random_unix.i: zip_random_unix.c.i +.PHONY : zip_random_unix.i + +# target to preprocess a source file +zip_random_unix.c.i: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_random_unix.c.i +.PHONY : zip_random_unix.c.i + +zip_random_unix.s: zip_random_unix.c.s +.PHONY : zip_random_unix.s + +# target to generate assembly for a file +zip_random_unix.c.s: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_random_unix.c.s +.PHONY : zip_random_unix.c.s + +zip_rename.o: zip_rename.c.o +.PHONY : zip_rename.o + +# target to build an object file +zip_rename.c.o: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_rename.c.o +.PHONY : zip_rename.c.o + +zip_rename.i: zip_rename.c.i +.PHONY : zip_rename.i + +# target to preprocess a source file +zip_rename.c.i: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_rename.c.i +.PHONY : zip_rename.c.i + +zip_rename.s: zip_rename.c.s +.PHONY : zip_rename.s + +# target to generate assembly for a file +zip_rename.c.s: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_rename.c.s +.PHONY : zip_rename.c.s + +zip_replace.o: zip_replace.c.o +.PHONY : zip_replace.o + +# target to build an object file +zip_replace.c.o: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_replace.c.o +.PHONY : zip_replace.c.o + +zip_replace.i: zip_replace.c.i +.PHONY : zip_replace.i + +# target to preprocess a source file +zip_replace.c.i: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_replace.c.i +.PHONY : zip_replace.c.i + +zip_replace.s: zip_replace.c.s +.PHONY : zip_replace.s + +# target to generate assembly for a file +zip_replace.c.s: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_replace.c.s +.PHONY : zip_replace.c.s + +zip_set_archive_comment.o: zip_set_archive_comment.c.o +.PHONY : zip_set_archive_comment.o + +# target to build an object file +zip_set_archive_comment.c.o: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_set_archive_comment.c.o +.PHONY : zip_set_archive_comment.c.o + +zip_set_archive_comment.i: zip_set_archive_comment.c.i +.PHONY : zip_set_archive_comment.i + +# target to preprocess a source file +zip_set_archive_comment.c.i: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_set_archive_comment.c.i +.PHONY : zip_set_archive_comment.c.i + +zip_set_archive_comment.s: zip_set_archive_comment.c.s +.PHONY : zip_set_archive_comment.s + +# target to generate assembly for a file +zip_set_archive_comment.c.s: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_set_archive_comment.c.s +.PHONY : zip_set_archive_comment.c.s + +zip_set_archive_flag.o: zip_set_archive_flag.c.o +.PHONY : zip_set_archive_flag.o + +# target to build an object file +zip_set_archive_flag.c.o: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_set_archive_flag.c.o +.PHONY : zip_set_archive_flag.c.o + +zip_set_archive_flag.i: zip_set_archive_flag.c.i +.PHONY : zip_set_archive_flag.i + +# target to preprocess a source file +zip_set_archive_flag.c.i: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_set_archive_flag.c.i +.PHONY : zip_set_archive_flag.c.i + +zip_set_archive_flag.s: zip_set_archive_flag.c.s +.PHONY : zip_set_archive_flag.s + +# target to generate assembly for a file +zip_set_archive_flag.c.s: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_set_archive_flag.c.s +.PHONY : zip_set_archive_flag.c.s + +zip_set_default_password.o: zip_set_default_password.c.o +.PHONY : zip_set_default_password.o + +# target to build an object file +zip_set_default_password.c.o: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_set_default_password.c.o +.PHONY : zip_set_default_password.c.o + +zip_set_default_password.i: zip_set_default_password.c.i +.PHONY : zip_set_default_password.i + +# target to preprocess a source file +zip_set_default_password.c.i: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_set_default_password.c.i +.PHONY : zip_set_default_password.c.i + +zip_set_default_password.s: zip_set_default_password.c.s +.PHONY : zip_set_default_password.s + +# target to generate assembly for a file +zip_set_default_password.c.s: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_set_default_password.c.s +.PHONY : zip_set_default_password.c.s + +zip_set_file_comment.o: zip_set_file_comment.c.o +.PHONY : zip_set_file_comment.o + +# target to build an object file +zip_set_file_comment.c.o: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_set_file_comment.c.o +.PHONY : zip_set_file_comment.c.o + +zip_set_file_comment.i: zip_set_file_comment.c.i +.PHONY : zip_set_file_comment.i + +# target to preprocess a source file +zip_set_file_comment.c.i: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_set_file_comment.c.i +.PHONY : zip_set_file_comment.c.i + +zip_set_file_comment.s: zip_set_file_comment.c.s +.PHONY : zip_set_file_comment.s + +# target to generate assembly for a file +zip_set_file_comment.c.s: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_set_file_comment.c.s +.PHONY : zip_set_file_comment.c.s + +zip_set_file_compression.o: zip_set_file_compression.c.o +.PHONY : zip_set_file_compression.o + +# target to build an object file +zip_set_file_compression.c.o: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_set_file_compression.c.o +.PHONY : zip_set_file_compression.c.o + +zip_set_file_compression.i: zip_set_file_compression.c.i +.PHONY : zip_set_file_compression.i + +# target to preprocess a source file +zip_set_file_compression.c.i: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_set_file_compression.c.i +.PHONY : zip_set_file_compression.c.i + +zip_set_file_compression.s: zip_set_file_compression.c.s +.PHONY : zip_set_file_compression.s + +# target to generate assembly for a file +zip_set_file_compression.c.s: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_set_file_compression.c.s +.PHONY : zip_set_file_compression.c.s + +zip_set_name.o: zip_set_name.c.o +.PHONY : zip_set_name.o + +# target to build an object file +zip_set_name.c.o: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_set_name.c.o +.PHONY : zip_set_name.c.o + +zip_set_name.i: zip_set_name.c.i +.PHONY : zip_set_name.i + +# target to preprocess a source file +zip_set_name.c.i: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_set_name.c.i +.PHONY : zip_set_name.c.i + +zip_set_name.s: zip_set_name.c.s +.PHONY : zip_set_name.s + +# target to generate assembly for a file +zip_set_name.c.s: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_set_name.c.s +.PHONY : zip_set_name.c.s + +zip_source_accept_empty.o: zip_source_accept_empty.c.o +.PHONY : zip_source_accept_empty.o + +# target to build an object file +zip_source_accept_empty.c.o: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_source_accept_empty.c.o +.PHONY : zip_source_accept_empty.c.o + +zip_source_accept_empty.i: zip_source_accept_empty.c.i +.PHONY : zip_source_accept_empty.i + +# target to preprocess a source file +zip_source_accept_empty.c.i: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_source_accept_empty.c.i +.PHONY : zip_source_accept_empty.c.i + +zip_source_accept_empty.s: zip_source_accept_empty.c.s +.PHONY : zip_source_accept_empty.s + +# target to generate assembly for a file +zip_source_accept_empty.c.s: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_source_accept_empty.c.s +.PHONY : zip_source_accept_empty.c.s + +zip_source_begin_write.o: zip_source_begin_write.c.o +.PHONY : zip_source_begin_write.o + +# target to build an object file +zip_source_begin_write.c.o: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_source_begin_write.c.o +.PHONY : zip_source_begin_write.c.o + +zip_source_begin_write.i: zip_source_begin_write.c.i +.PHONY : zip_source_begin_write.i + +# target to preprocess a source file +zip_source_begin_write.c.i: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_source_begin_write.c.i +.PHONY : zip_source_begin_write.c.i + +zip_source_begin_write.s: zip_source_begin_write.c.s +.PHONY : zip_source_begin_write.s + +# target to generate assembly for a file +zip_source_begin_write.c.s: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_source_begin_write.c.s +.PHONY : zip_source_begin_write.c.s + +zip_source_begin_write_cloning.o: zip_source_begin_write_cloning.c.o +.PHONY : zip_source_begin_write_cloning.o + +# target to build an object file +zip_source_begin_write_cloning.c.o: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_source_begin_write_cloning.c.o +.PHONY : zip_source_begin_write_cloning.c.o + +zip_source_begin_write_cloning.i: zip_source_begin_write_cloning.c.i +.PHONY : zip_source_begin_write_cloning.i + +# target to preprocess a source file +zip_source_begin_write_cloning.c.i: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_source_begin_write_cloning.c.i +.PHONY : zip_source_begin_write_cloning.c.i + +zip_source_begin_write_cloning.s: zip_source_begin_write_cloning.c.s +.PHONY : zip_source_begin_write_cloning.s + +# target to generate assembly for a file +zip_source_begin_write_cloning.c.s: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_source_begin_write_cloning.c.s +.PHONY : zip_source_begin_write_cloning.c.s + +zip_source_buffer.o: zip_source_buffer.c.o +.PHONY : zip_source_buffer.o + +# target to build an object file +zip_source_buffer.c.o: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_source_buffer.c.o +.PHONY : zip_source_buffer.c.o + +zip_source_buffer.i: zip_source_buffer.c.i +.PHONY : zip_source_buffer.i + +# target to preprocess a source file +zip_source_buffer.c.i: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_source_buffer.c.i +.PHONY : zip_source_buffer.c.i + +zip_source_buffer.s: zip_source_buffer.c.s +.PHONY : zip_source_buffer.s + +# target to generate assembly for a file +zip_source_buffer.c.s: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_source_buffer.c.s +.PHONY : zip_source_buffer.c.s + +zip_source_call.o: zip_source_call.c.o +.PHONY : zip_source_call.o + +# target to build an object file +zip_source_call.c.o: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_source_call.c.o +.PHONY : zip_source_call.c.o + +zip_source_call.i: zip_source_call.c.i +.PHONY : zip_source_call.i + +# target to preprocess a source file +zip_source_call.c.i: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_source_call.c.i +.PHONY : zip_source_call.c.i + +zip_source_call.s: zip_source_call.c.s +.PHONY : zip_source_call.s + +# target to generate assembly for a file +zip_source_call.c.s: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_source_call.c.s +.PHONY : zip_source_call.c.s + +zip_source_close.o: zip_source_close.c.o +.PHONY : zip_source_close.o + +# target to build an object file +zip_source_close.c.o: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_source_close.c.o +.PHONY : zip_source_close.c.o + +zip_source_close.i: zip_source_close.c.i +.PHONY : zip_source_close.i + +# target to preprocess a source file +zip_source_close.c.i: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_source_close.c.i +.PHONY : zip_source_close.c.i + +zip_source_close.s: zip_source_close.c.s +.PHONY : zip_source_close.s + +# target to generate assembly for a file +zip_source_close.c.s: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_source_close.c.s +.PHONY : zip_source_close.c.s + +zip_source_commit_write.o: zip_source_commit_write.c.o +.PHONY : zip_source_commit_write.o + +# target to build an object file +zip_source_commit_write.c.o: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_source_commit_write.c.o +.PHONY : zip_source_commit_write.c.o + +zip_source_commit_write.i: zip_source_commit_write.c.i +.PHONY : zip_source_commit_write.i + +# target to preprocess a source file +zip_source_commit_write.c.i: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_source_commit_write.c.i +.PHONY : zip_source_commit_write.c.i + +zip_source_commit_write.s: zip_source_commit_write.c.s +.PHONY : zip_source_commit_write.s + +# target to generate assembly for a file +zip_source_commit_write.c.s: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_source_commit_write.c.s +.PHONY : zip_source_commit_write.c.s + +zip_source_compress.o: zip_source_compress.c.o +.PHONY : zip_source_compress.o + +# target to build an object file +zip_source_compress.c.o: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_source_compress.c.o +.PHONY : zip_source_compress.c.o + +zip_source_compress.i: zip_source_compress.c.i +.PHONY : zip_source_compress.i + +# target to preprocess a source file +zip_source_compress.c.i: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_source_compress.c.i +.PHONY : zip_source_compress.c.i + +zip_source_compress.s: zip_source_compress.c.s +.PHONY : zip_source_compress.s + +# target to generate assembly for a file +zip_source_compress.c.s: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_source_compress.c.s +.PHONY : zip_source_compress.c.s + +zip_source_crc.o: zip_source_crc.c.o +.PHONY : zip_source_crc.o + +# target to build an object file +zip_source_crc.c.o: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_source_crc.c.o +.PHONY : zip_source_crc.c.o + +zip_source_crc.i: zip_source_crc.c.i +.PHONY : zip_source_crc.i + +# target to preprocess a source file +zip_source_crc.c.i: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_source_crc.c.i +.PHONY : zip_source_crc.c.i + +zip_source_crc.s: zip_source_crc.c.s +.PHONY : zip_source_crc.s + +# target to generate assembly for a file +zip_source_crc.c.s: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_source_crc.c.s +.PHONY : zip_source_crc.c.s + +zip_source_error.o: zip_source_error.c.o +.PHONY : zip_source_error.o + +# target to build an object file +zip_source_error.c.o: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_source_error.c.o +.PHONY : zip_source_error.c.o + +zip_source_error.i: zip_source_error.c.i +.PHONY : zip_source_error.i + +# target to preprocess a source file +zip_source_error.c.i: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_source_error.c.i +.PHONY : zip_source_error.c.i + +zip_source_error.s: zip_source_error.c.s +.PHONY : zip_source_error.s + +# target to generate assembly for a file +zip_source_error.c.s: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_source_error.c.s +.PHONY : zip_source_error.c.s + +zip_source_file_common.o: zip_source_file_common.c.o +.PHONY : zip_source_file_common.o + +# target to build an object file +zip_source_file_common.c.o: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_source_file_common.c.o +.PHONY : zip_source_file_common.c.o + +zip_source_file_common.i: zip_source_file_common.c.i +.PHONY : zip_source_file_common.i + +# target to preprocess a source file +zip_source_file_common.c.i: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_source_file_common.c.i +.PHONY : zip_source_file_common.c.i + +zip_source_file_common.s: zip_source_file_common.c.s +.PHONY : zip_source_file_common.s + +# target to generate assembly for a file +zip_source_file_common.c.s: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_source_file_common.c.s +.PHONY : zip_source_file_common.c.s + +zip_source_file_stdio.o: zip_source_file_stdio.c.o +.PHONY : zip_source_file_stdio.o + +# target to build an object file +zip_source_file_stdio.c.o: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_source_file_stdio.c.o +.PHONY : zip_source_file_stdio.c.o + +zip_source_file_stdio.i: zip_source_file_stdio.c.i +.PHONY : zip_source_file_stdio.i + +# target to preprocess a source file +zip_source_file_stdio.c.i: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_source_file_stdio.c.i +.PHONY : zip_source_file_stdio.c.i + +zip_source_file_stdio.s: zip_source_file_stdio.c.s +.PHONY : zip_source_file_stdio.s + +# target to generate assembly for a file +zip_source_file_stdio.c.s: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_source_file_stdio.c.s +.PHONY : zip_source_file_stdio.c.s + +zip_source_file_stdio_named.o: zip_source_file_stdio_named.c.o +.PHONY : zip_source_file_stdio_named.o + +# target to build an object file +zip_source_file_stdio_named.c.o: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_source_file_stdio_named.c.o +.PHONY : zip_source_file_stdio_named.c.o + +zip_source_file_stdio_named.i: zip_source_file_stdio_named.c.i +.PHONY : zip_source_file_stdio_named.i + +# target to preprocess a source file +zip_source_file_stdio_named.c.i: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_source_file_stdio_named.c.i +.PHONY : zip_source_file_stdio_named.c.i + +zip_source_file_stdio_named.s: zip_source_file_stdio_named.c.s +.PHONY : zip_source_file_stdio_named.s + +# target to generate assembly for a file +zip_source_file_stdio_named.c.s: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_source_file_stdio_named.c.s +.PHONY : zip_source_file_stdio_named.c.s + +zip_source_free.o: zip_source_free.c.o +.PHONY : zip_source_free.o + +# target to build an object file +zip_source_free.c.o: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_source_free.c.o +.PHONY : zip_source_free.c.o + +zip_source_free.i: zip_source_free.c.i +.PHONY : zip_source_free.i + +# target to preprocess a source file +zip_source_free.c.i: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_source_free.c.i +.PHONY : zip_source_free.c.i + +zip_source_free.s: zip_source_free.c.s +.PHONY : zip_source_free.s + +# target to generate assembly for a file +zip_source_free.c.s: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_source_free.c.s +.PHONY : zip_source_free.c.s + +zip_source_function.o: zip_source_function.c.o +.PHONY : zip_source_function.o + +# target to build an object file +zip_source_function.c.o: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_source_function.c.o +.PHONY : zip_source_function.c.o + +zip_source_function.i: zip_source_function.c.i +.PHONY : zip_source_function.i + +# target to preprocess a source file +zip_source_function.c.i: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_source_function.c.i +.PHONY : zip_source_function.c.i + +zip_source_function.s: zip_source_function.c.s +.PHONY : zip_source_function.s + +# target to generate assembly for a file +zip_source_function.c.s: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_source_function.c.s +.PHONY : zip_source_function.c.s + +zip_source_get_dostime.o: zip_source_get_dostime.c.o +.PHONY : zip_source_get_dostime.o + +# target to build an object file +zip_source_get_dostime.c.o: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_source_get_dostime.c.o +.PHONY : zip_source_get_dostime.c.o + +zip_source_get_dostime.i: zip_source_get_dostime.c.i +.PHONY : zip_source_get_dostime.i + +# target to preprocess a source file +zip_source_get_dostime.c.i: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_source_get_dostime.c.i +.PHONY : zip_source_get_dostime.c.i + +zip_source_get_dostime.s: zip_source_get_dostime.c.s +.PHONY : zip_source_get_dostime.s + +# target to generate assembly for a file +zip_source_get_dostime.c.s: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_source_get_dostime.c.s +.PHONY : zip_source_get_dostime.c.s + +zip_source_get_file_attributes.o: zip_source_get_file_attributes.c.o +.PHONY : zip_source_get_file_attributes.o + +# target to build an object file +zip_source_get_file_attributes.c.o: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_source_get_file_attributes.c.o +.PHONY : zip_source_get_file_attributes.c.o + +zip_source_get_file_attributes.i: zip_source_get_file_attributes.c.i +.PHONY : zip_source_get_file_attributes.i + +# target to preprocess a source file +zip_source_get_file_attributes.c.i: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_source_get_file_attributes.c.i +.PHONY : zip_source_get_file_attributes.c.i + +zip_source_get_file_attributes.s: zip_source_get_file_attributes.c.s +.PHONY : zip_source_get_file_attributes.s + +# target to generate assembly for a file +zip_source_get_file_attributes.c.s: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_source_get_file_attributes.c.s +.PHONY : zip_source_get_file_attributes.c.s + +zip_source_is_deleted.o: zip_source_is_deleted.c.o +.PHONY : zip_source_is_deleted.o + +# target to build an object file +zip_source_is_deleted.c.o: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_source_is_deleted.c.o +.PHONY : zip_source_is_deleted.c.o + +zip_source_is_deleted.i: zip_source_is_deleted.c.i +.PHONY : zip_source_is_deleted.i + +# target to preprocess a source file +zip_source_is_deleted.c.i: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_source_is_deleted.c.i +.PHONY : zip_source_is_deleted.c.i + +zip_source_is_deleted.s: zip_source_is_deleted.c.s +.PHONY : zip_source_is_deleted.s + +# target to generate assembly for a file +zip_source_is_deleted.c.s: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_source_is_deleted.c.s +.PHONY : zip_source_is_deleted.c.s + +zip_source_layered.o: zip_source_layered.c.o +.PHONY : zip_source_layered.o + +# target to build an object file +zip_source_layered.c.o: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_source_layered.c.o +.PHONY : zip_source_layered.c.o + +zip_source_layered.i: zip_source_layered.c.i +.PHONY : zip_source_layered.i + +# target to preprocess a source file +zip_source_layered.c.i: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_source_layered.c.i +.PHONY : zip_source_layered.c.i + +zip_source_layered.s: zip_source_layered.c.s +.PHONY : zip_source_layered.s + +# target to generate assembly for a file +zip_source_layered.c.s: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_source_layered.c.s +.PHONY : zip_source_layered.c.s + +zip_source_open.o: zip_source_open.c.o +.PHONY : zip_source_open.o + +# target to build an object file +zip_source_open.c.o: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_source_open.c.o +.PHONY : zip_source_open.c.o + +zip_source_open.i: zip_source_open.c.i +.PHONY : zip_source_open.i + +# target to preprocess a source file +zip_source_open.c.i: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_source_open.c.i +.PHONY : zip_source_open.c.i + +zip_source_open.s: zip_source_open.c.s +.PHONY : zip_source_open.s + +# target to generate assembly for a file +zip_source_open.c.s: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_source_open.c.s +.PHONY : zip_source_open.c.s + +zip_source_pass_to_lower_layer.o: zip_source_pass_to_lower_layer.c.o +.PHONY : zip_source_pass_to_lower_layer.o + +# target to build an object file +zip_source_pass_to_lower_layer.c.o: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_source_pass_to_lower_layer.c.o +.PHONY : zip_source_pass_to_lower_layer.c.o + +zip_source_pass_to_lower_layer.i: zip_source_pass_to_lower_layer.c.i +.PHONY : zip_source_pass_to_lower_layer.i + +# target to preprocess a source file +zip_source_pass_to_lower_layer.c.i: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_source_pass_to_lower_layer.c.i +.PHONY : zip_source_pass_to_lower_layer.c.i + +zip_source_pass_to_lower_layer.s: zip_source_pass_to_lower_layer.c.s +.PHONY : zip_source_pass_to_lower_layer.s + +# target to generate assembly for a file +zip_source_pass_to_lower_layer.c.s: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_source_pass_to_lower_layer.c.s +.PHONY : zip_source_pass_to_lower_layer.c.s + +zip_source_pkware_decode.o: zip_source_pkware_decode.c.o +.PHONY : zip_source_pkware_decode.o + +# target to build an object file +zip_source_pkware_decode.c.o: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_source_pkware_decode.c.o +.PHONY : zip_source_pkware_decode.c.o + +zip_source_pkware_decode.i: zip_source_pkware_decode.c.i +.PHONY : zip_source_pkware_decode.i + +# target to preprocess a source file +zip_source_pkware_decode.c.i: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_source_pkware_decode.c.i +.PHONY : zip_source_pkware_decode.c.i + +zip_source_pkware_decode.s: zip_source_pkware_decode.c.s +.PHONY : zip_source_pkware_decode.s + +# target to generate assembly for a file +zip_source_pkware_decode.c.s: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_source_pkware_decode.c.s +.PHONY : zip_source_pkware_decode.c.s + +zip_source_pkware_encode.o: zip_source_pkware_encode.c.o +.PHONY : zip_source_pkware_encode.o + +# target to build an object file +zip_source_pkware_encode.c.o: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_source_pkware_encode.c.o +.PHONY : zip_source_pkware_encode.c.o + +zip_source_pkware_encode.i: zip_source_pkware_encode.c.i +.PHONY : zip_source_pkware_encode.i + +# target to preprocess a source file +zip_source_pkware_encode.c.i: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_source_pkware_encode.c.i +.PHONY : zip_source_pkware_encode.c.i + +zip_source_pkware_encode.s: zip_source_pkware_encode.c.s +.PHONY : zip_source_pkware_encode.s + +# target to generate assembly for a file +zip_source_pkware_encode.c.s: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_source_pkware_encode.c.s +.PHONY : zip_source_pkware_encode.c.s + +zip_source_read.o: zip_source_read.c.o +.PHONY : zip_source_read.o + +# target to build an object file +zip_source_read.c.o: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_source_read.c.o +.PHONY : zip_source_read.c.o + +zip_source_read.i: zip_source_read.c.i +.PHONY : zip_source_read.i + +# target to preprocess a source file +zip_source_read.c.i: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_source_read.c.i +.PHONY : zip_source_read.c.i + +zip_source_read.s: zip_source_read.c.s +.PHONY : zip_source_read.s + +# target to generate assembly for a file +zip_source_read.c.s: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_source_read.c.s +.PHONY : zip_source_read.c.s + +zip_source_remove.o: zip_source_remove.c.o +.PHONY : zip_source_remove.o + +# target to build an object file +zip_source_remove.c.o: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_source_remove.c.o +.PHONY : zip_source_remove.c.o + +zip_source_remove.i: zip_source_remove.c.i +.PHONY : zip_source_remove.i + +# target to preprocess a source file +zip_source_remove.c.i: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_source_remove.c.i +.PHONY : zip_source_remove.c.i + +zip_source_remove.s: zip_source_remove.c.s +.PHONY : zip_source_remove.s + +# target to generate assembly for a file +zip_source_remove.c.s: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_source_remove.c.s +.PHONY : zip_source_remove.c.s + +zip_source_rollback_write.o: zip_source_rollback_write.c.o +.PHONY : zip_source_rollback_write.o + +# target to build an object file +zip_source_rollback_write.c.o: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_source_rollback_write.c.o +.PHONY : zip_source_rollback_write.c.o + +zip_source_rollback_write.i: zip_source_rollback_write.c.i +.PHONY : zip_source_rollback_write.i + +# target to preprocess a source file +zip_source_rollback_write.c.i: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_source_rollback_write.c.i +.PHONY : zip_source_rollback_write.c.i + +zip_source_rollback_write.s: zip_source_rollback_write.c.s +.PHONY : zip_source_rollback_write.s + +# target to generate assembly for a file +zip_source_rollback_write.c.s: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_source_rollback_write.c.s +.PHONY : zip_source_rollback_write.c.s + +zip_source_seek.o: zip_source_seek.c.o +.PHONY : zip_source_seek.o + +# target to build an object file +zip_source_seek.c.o: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_source_seek.c.o +.PHONY : zip_source_seek.c.o + +zip_source_seek.i: zip_source_seek.c.i +.PHONY : zip_source_seek.i + +# target to preprocess a source file +zip_source_seek.c.i: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_source_seek.c.i +.PHONY : zip_source_seek.c.i + +zip_source_seek.s: zip_source_seek.c.s +.PHONY : zip_source_seek.s + +# target to generate assembly for a file +zip_source_seek.c.s: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_source_seek.c.s +.PHONY : zip_source_seek.c.s + +zip_source_seek_write.o: zip_source_seek_write.c.o +.PHONY : zip_source_seek_write.o + +# target to build an object file +zip_source_seek_write.c.o: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_source_seek_write.c.o +.PHONY : zip_source_seek_write.c.o + +zip_source_seek_write.i: zip_source_seek_write.c.i +.PHONY : zip_source_seek_write.i + +# target to preprocess a source file +zip_source_seek_write.c.i: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_source_seek_write.c.i +.PHONY : zip_source_seek_write.c.i + +zip_source_seek_write.s: zip_source_seek_write.c.s +.PHONY : zip_source_seek_write.s + +# target to generate assembly for a file +zip_source_seek_write.c.s: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_source_seek_write.c.s +.PHONY : zip_source_seek_write.c.s + +zip_source_stat.o: zip_source_stat.c.o +.PHONY : zip_source_stat.o + +# target to build an object file +zip_source_stat.c.o: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_source_stat.c.o +.PHONY : zip_source_stat.c.o + +zip_source_stat.i: zip_source_stat.c.i +.PHONY : zip_source_stat.i + +# target to preprocess a source file +zip_source_stat.c.i: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_source_stat.c.i +.PHONY : zip_source_stat.c.i + +zip_source_stat.s: zip_source_stat.c.s +.PHONY : zip_source_stat.s + +# target to generate assembly for a file +zip_source_stat.c.s: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_source_stat.c.s +.PHONY : zip_source_stat.c.s + +zip_source_supports.o: zip_source_supports.c.o +.PHONY : zip_source_supports.o + +# target to build an object file +zip_source_supports.c.o: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_source_supports.c.o +.PHONY : zip_source_supports.c.o + +zip_source_supports.i: zip_source_supports.c.i +.PHONY : zip_source_supports.i + +# target to preprocess a source file +zip_source_supports.c.i: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_source_supports.c.i +.PHONY : zip_source_supports.c.i + +zip_source_supports.s: zip_source_supports.c.s +.PHONY : zip_source_supports.s + +# target to generate assembly for a file +zip_source_supports.c.s: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_source_supports.c.s +.PHONY : zip_source_supports.c.s + +zip_source_tell.o: zip_source_tell.c.o +.PHONY : zip_source_tell.o + +# target to build an object file +zip_source_tell.c.o: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_source_tell.c.o +.PHONY : zip_source_tell.c.o + +zip_source_tell.i: zip_source_tell.c.i +.PHONY : zip_source_tell.i + +# target to preprocess a source file +zip_source_tell.c.i: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_source_tell.c.i +.PHONY : zip_source_tell.c.i + +zip_source_tell.s: zip_source_tell.c.s +.PHONY : zip_source_tell.s + +# target to generate assembly for a file +zip_source_tell.c.s: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_source_tell.c.s +.PHONY : zip_source_tell.c.s + +zip_source_tell_write.o: zip_source_tell_write.c.o +.PHONY : zip_source_tell_write.o + +# target to build an object file +zip_source_tell_write.c.o: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_source_tell_write.c.o +.PHONY : zip_source_tell_write.c.o + +zip_source_tell_write.i: zip_source_tell_write.c.i +.PHONY : zip_source_tell_write.i + +# target to preprocess a source file +zip_source_tell_write.c.i: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_source_tell_write.c.i +.PHONY : zip_source_tell_write.c.i + +zip_source_tell_write.s: zip_source_tell_write.c.s +.PHONY : zip_source_tell_write.s + +# target to generate assembly for a file +zip_source_tell_write.c.s: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_source_tell_write.c.s +.PHONY : zip_source_tell_write.c.s + +zip_source_window.o: zip_source_window.c.o +.PHONY : zip_source_window.o + +# target to build an object file +zip_source_window.c.o: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_source_window.c.o +.PHONY : zip_source_window.c.o + +zip_source_window.i: zip_source_window.c.i +.PHONY : zip_source_window.i + +# target to preprocess a source file +zip_source_window.c.i: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_source_window.c.i +.PHONY : zip_source_window.c.i + +zip_source_window.s: zip_source_window.c.s +.PHONY : zip_source_window.s + +# target to generate assembly for a file +zip_source_window.c.s: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_source_window.c.s +.PHONY : zip_source_window.c.s + +zip_source_write.o: zip_source_write.c.o +.PHONY : zip_source_write.o + +# target to build an object file +zip_source_write.c.o: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_source_write.c.o +.PHONY : zip_source_write.c.o + +zip_source_write.i: zip_source_write.c.i +.PHONY : zip_source_write.i + +# target to preprocess a source file +zip_source_write.c.i: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_source_write.c.i +.PHONY : zip_source_write.c.i + +zip_source_write.s: zip_source_write.c.s +.PHONY : zip_source_write.s + +# target to generate assembly for a file +zip_source_write.c.s: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_source_write.c.s +.PHONY : zip_source_write.c.s + +zip_source_zip.o: zip_source_zip.c.o +.PHONY : zip_source_zip.o + +# target to build an object file +zip_source_zip.c.o: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_source_zip.c.o +.PHONY : zip_source_zip.c.o + +zip_source_zip.i: zip_source_zip.c.i +.PHONY : zip_source_zip.i + +# target to preprocess a source file +zip_source_zip.c.i: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_source_zip.c.i +.PHONY : zip_source_zip.c.i + +zip_source_zip.s: zip_source_zip.c.s +.PHONY : zip_source_zip.s + +# target to generate assembly for a file +zip_source_zip.c.s: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_source_zip.c.s +.PHONY : zip_source_zip.c.s + +zip_source_zip_new.o: zip_source_zip_new.c.o +.PHONY : zip_source_zip_new.o + +# target to build an object file +zip_source_zip_new.c.o: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_source_zip_new.c.o +.PHONY : zip_source_zip_new.c.o + +zip_source_zip_new.i: zip_source_zip_new.c.i +.PHONY : zip_source_zip_new.i + +# target to preprocess a source file +zip_source_zip_new.c.i: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_source_zip_new.c.i +.PHONY : zip_source_zip_new.c.i + +zip_source_zip_new.s: zip_source_zip_new.c.s +.PHONY : zip_source_zip_new.s + +# target to generate assembly for a file +zip_source_zip_new.c.s: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_source_zip_new.c.s +.PHONY : zip_source_zip_new.c.s + +zip_stat.o: zip_stat.c.o +.PHONY : zip_stat.o + +# target to build an object file +zip_stat.c.o: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_stat.c.o +.PHONY : zip_stat.c.o + +zip_stat.i: zip_stat.c.i +.PHONY : zip_stat.i + +# target to preprocess a source file +zip_stat.c.i: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_stat.c.i +.PHONY : zip_stat.c.i + +zip_stat.s: zip_stat.c.s +.PHONY : zip_stat.s + +# target to generate assembly for a file +zip_stat.c.s: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_stat.c.s +.PHONY : zip_stat.c.s + +zip_stat_index.o: zip_stat_index.c.o +.PHONY : zip_stat_index.o + +# target to build an object file +zip_stat_index.c.o: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_stat_index.c.o +.PHONY : zip_stat_index.c.o + +zip_stat_index.i: zip_stat_index.c.i +.PHONY : zip_stat_index.i + +# target to preprocess a source file +zip_stat_index.c.i: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_stat_index.c.i +.PHONY : zip_stat_index.c.i + +zip_stat_index.s: zip_stat_index.c.s +.PHONY : zip_stat_index.s + +# target to generate assembly for a file +zip_stat_index.c.s: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_stat_index.c.s +.PHONY : zip_stat_index.c.s + +zip_stat_init.o: zip_stat_init.c.o +.PHONY : zip_stat_init.o + +# target to build an object file +zip_stat_init.c.o: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_stat_init.c.o +.PHONY : zip_stat_init.c.o + +zip_stat_init.i: zip_stat_init.c.i +.PHONY : zip_stat_init.i + +# target to preprocess a source file +zip_stat_init.c.i: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_stat_init.c.i +.PHONY : zip_stat_init.c.i + +zip_stat_init.s: zip_stat_init.c.s +.PHONY : zip_stat_init.s + +# target to generate assembly for a file +zip_stat_init.c.s: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_stat_init.c.s +.PHONY : zip_stat_init.c.s + +zip_strerror.o: zip_strerror.c.o +.PHONY : zip_strerror.o + +# target to build an object file +zip_strerror.c.o: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_strerror.c.o +.PHONY : zip_strerror.c.o + +zip_strerror.i: zip_strerror.c.i +.PHONY : zip_strerror.i + +# target to preprocess a source file +zip_strerror.c.i: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_strerror.c.i +.PHONY : zip_strerror.c.i + +zip_strerror.s: zip_strerror.c.s +.PHONY : zip_strerror.s + +# target to generate assembly for a file +zip_strerror.c.s: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_strerror.c.s +.PHONY : zip_strerror.c.s + +zip_string.o: zip_string.c.o +.PHONY : zip_string.o + +# target to build an object file +zip_string.c.o: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_string.c.o +.PHONY : zip_string.c.o + +zip_string.i: zip_string.c.i +.PHONY : zip_string.i + +# target to preprocess a source file +zip_string.c.i: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_string.c.i +.PHONY : zip_string.c.i + +zip_string.s: zip_string.c.s +.PHONY : zip_string.s + +# target to generate assembly for a file +zip_string.c.s: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_string.c.s +.PHONY : zip_string.c.s + +zip_unchange.o: zip_unchange.c.o +.PHONY : zip_unchange.o + +# target to build an object file +zip_unchange.c.o: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_unchange.c.o +.PHONY : zip_unchange.c.o + +zip_unchange.i: zip_unchange.c.i +.PHONY : zip_unchange.i + +# target to preprocess a source file +zip_unchange.c.i: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_unchange.c.i +.PHONY : zip_unchange.c.i + +zip_unchange.s: zip_unchange.c.s +.PHONY : zip_unchange.s + +# target to generate assembly for a file +zip_unchange.c.s: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_unchange.c.s +.PHONY : zip_unchange.c.s + +zip_unchange_all.o: zip_unchange_all.c.o +.PHONY : zip_unchange_all.o + +# target to build an object file +zip_unchange_all.c.o: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_unchange_all.c.o +.PHONY : zip_unchange_all.c.o + +zip_unchange_all.i: zip_unchange_all.c.i +.PHONY : zip_unchange_all.i + +# target to preprocess a source file +zip_unchange_all.c.i: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_unchange_all.c.i +.PHONY : zip_unchange_all.c.i + +zip_unchange_all.s: zip_unchange_all.c.s +.PHONY : zip_unchange_all.s + +# target to generate assembly for a file +zip_unchange_all.c.s: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_unchange_all.c.s +.PHONY : zip_unchange_all.c.s + +zip_unchange_archive.o: zip_unchange_archive.c.o +.PHONY : zip_unchange_archive.o + +# target to build an object file +zip_unchange_archive.c.o: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_unchange_archive.c.o +.PHONY : zip_unchange_archive.c.o + +zip_unchange_archive.i: zip_unchange_archive.c.i +.PHONY : zip_unchange_archive.i + +# target to preprocess a source file +zip_unchange_archive.c.i: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_unchange_archive.c.i +.PHONY : zip_unchange_archive.c.i + +zip_unchange_archive.s: zip_unchange_archive.c.s +.PHONY : zip_unchange_archive.s + +# target to generate assembly for a file +zip_unchange_archive.c.s: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_unchange_archive.c.s +.PHONY : zip_unchange_archive.c.s + +zip_unchange_data.o: zip_unchange_data.c.o +.PHONY : zip_unchange_data.o + +# target to build an object file +zip_unchange_data.c.o: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_unchange_data.c.o +.PHONY : zip_unchange_data.c.o + +zip_unchange_data.i: zip_unchange_data.c.i +.PHONY : zip_unchange_data.i + +# target to preprocess a source file +zip_unchange_data.c.i: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_unchange_data.c.i +.PHONY : zip_unchange_data.c.i + +zip_unchange_data.s: zip_unchange_data.c.s +.PHONY : zip_unchange_data.s + +# target to generate assembly for a file +zip_unchange_data.c.s: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_unchange_data.c.s +.PHONY : zip_unchange_data.c.s + +zip_utf-8.o: zip_utf-8.c.o +.PHONY : zip_utf-8.o + +# target to build an object file +zip_utf-8.c.o: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_utf-8.c.o +.PHONY : zip_utf-8.c.o + +zip_utf-8.i: zip_utf-8.c.i +.PHONY : zip_utf-8.i + +# target to preprocess a source file +zip_utf-8.c.i: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_utf-8.c.i +.PHONY : zip_utf-8.c.i + +zip_utf-8.s: zip_utf-8.c.s +.PHONY : zip_utf-8.s + +# target to generate assembly for a file +zip_utf-8.c.s: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f lib/CMakeFiles/zip.dir/build.make lib/CMakeFiles/zip.dir/zip_utf-8.c.s +.PHONY : zip_utf-8.c.s + +# Help Target +help: + @echo "The following are some of the valid targets for this Makefile:" + @echo "... all (the default if no target is provided)" + @echo "... clean" + @echo "... depend" + @echo "... edit_cache" + @echo "... install" + @echo "... install/local" + @echo "... install/strip" + @echo "... list_install_components" + @echo "... rebuild_cache" + @echo "... test" + @echo "... zip" + @echo "... zip_add.o" + @echo "... zip_add.i" + @echo "... zip_add.s" + @echo "... zip_add_dir.o" + @echo "... zip_add_dir.i" + @echo "... zip_add_dir.s" + @echo "... zip_add_entry.o" + @echo "... zip_add_entry.i" + @echo "... zip_add_entry.s" + @echo "... zip_algorithm_deflate.o" + @echo "... zip_algorithm_deflate.i" + @echo "... zip_algorithm_deflate.s" + @echo "... zip_buffer.o" + @echo "... zip_buffer.i" + @echo "... zip_buffer.s" + @echo "... zip_close.o" + @echo "... zip_close.i" + @echo "... zip_close.s" + @echo "... zip_delete.o" + @echo "... zip_delete.i" + @echo "... zip_delete.s" + @echo "... zip_dir_add.o" + @echo "... zip_dir_add.i" + @echo "... zip_dir_add.s" + @echo "... zip_dirent.o" + @echo "... zip_dirent.i" + @echo "... zip_dirent.s" + @echo "... zip_discard.o" + @echo "... zip_discard.i" + @echo "... zip_discard.s" + @echo "... zip_entry.o" + @echo "... zip_entry.i" + @echo "... zip_entry.s" + @echo "... zip_err_str.o" + @echo "... zip_err_str.i" + @echo "... zip_err_str.s" + @echo "... zip_error.o" + @echo "... zip_error.i" + @echo "... zip_error.s" + @echo "... zip_error_clear.o" + @echo "... zip_error_clear.i" + @echo "... zip_error_clear.s" + @echo "... zip_error_get.o" + @echo "... zip_error_get.i" + @echo "... zip_error_get.s" + @echo "... zip_error_get_sys_type.o" + @echo "... zip_error_get_sys_type.i" + @echo "... zip_error_get_sys_type.s" + @echo "... zip_error_strerror.o" + @echo "... zip_error_strerror.i" + @echo "... zip_error_strerror.s" + @echo "... zip_error_to_str.o" + @echo "... zip_error_to_str.i" + @echo "... zip_error_to_str.s" + @echo "... zip_extra_field.o" + @echo "... zip_extra_field.i" + @echo "... zip_extra_field.s" + @echo "... zip_extra_field_api.o" + @echo "... zip_extra_field_api.i" + @echo "... zip_extra_field_api.s" + @echo "... zip_fclose.o" + @echo "... zip_fclose.i" + @echo "... zip_fclose.s" + @echo "... zip_fdopen.o" + @echo "... zip_fdopen.i" + @echo "... zip_fdopen.s" + @echo "... zip_file_add.o" + @echo "... zip_file_add.i" + @echo "... zip_file_add.s" + @echo "... zip_file_error_clear.o" + @echo "... zip_file_error_clear.i" + @echo "... zip_file_error_clear.s" + @echo "... zip_file_error_get.o" + @echo "... zip_file_error_get.i" + @echo "... zip_file_error_get.s" + @echo "... zip_file_get_comment.o" + @echo "... zip_file_get_comment.i" + @echo "... zip_file_get_comment.s" + @echo "... zip_file_get_external_attributes.o" + @echo "... zip_file_get_external_attributes.i" + @echo "... zip_file_get_external_attributes.s" + @echo "... zip_file_get_offset.o" + @echo "... zip_file_get_offset.i" + @echo "... zip_file_get_offset.s" + @echo "... zip_file_rename.o" + @echo "... zip_file_rename.i" + @echo "... zip_file_rename.s" + @echo "... zip_file_replace.o" + @echo "... zip_file_replace.i" + @echo "... zip_file_replace.s" + @echo "... zip_file_set_comment.o" + @echo "... zip_file_set_comment.i" + @echo "... zip_file_set_comment.s" + @echo "... zip_file_set_encryption.o" + @echo "... zip_file_set_encryption.i" + @echo "... zip_file_set_encryption.s" + @echo "... zip_file_set_external_attributes.o" + @echo "... zip_file_set_external_attributes.i" + @echo "... zip_file_set_external_attributes.s" + @echo "... zip_file_set_mtime.o" + @echo "... zip_file_set_mtime.i" + @echo "... zip_file_set_mtime.s" + @echo "... zip_file_strerror.o" + @echo "... zip_file_strerror.i" + @echo "... zip_file_strerror.s" + @echo "... zip_fopen.o" + @echo "... zip_fopen.i" + @echo "... zip_fopen.s" + @echo "... zip_fopen_encrypted.o" + @echo "... zip_fopen_encrypted.i" + @echo "... zip_fopen_encrypted.s" + @echo "... zip_fopen_index.o" + @echo "... zip_fopen_index.i" + @echo "... zip_fopen_index.s" + @echo "... zip_fopen_index_encrypted.o" + @echo "... zip_fopen_index_encrypted.i" + @echo "... zip_fopen_index_encrypted.s" + @echo "... zip_fread.o" + @echo "... zip_fread.i" + @echo "... zip_fread.s" + @echo "... zip_fseek.o" + @echo "... zip_fseek.i" + @echo "... zip_fseek.s" + @echo "... zip_ftell.o" + @echo "... zip_ftell.i" + @echo "... zip_ftell.s" + @echo "... zip_get_archive_comment.o" + @echo "... zip_get_archive_comment.i" + @echo "... zip_get_archive_comment.s" + @echo "... zip_get_archive_flag.o" + @echo "... zip_get_archive_flag.i" + @echo "... zip_get_archive_flag.s" + @echo "... zip_get_encryption_implementation.o" + @echo "... zip_get_encryption_implementation.i" + @echo "... zip_get_encryption_implementation.s" + @echo "... zip_get_file_comment.o" + @echo "... zip_get_file_comment.i" + @echo "... zip_get_file_comment.s" + @echo "... zip_get_name.o" + @echo "... zip_get_name.i" + @echo "... zip_get_name.s" + @echo "... zip_get_num_entries.o" + @echo "... zip_get_num_entries.i" + @echo "... zip_get_num_entries.s" + @echo "... zip_get_num_files.o" + @echo "... zip_get_num_files.i" + @echo "... zip_get_num_files.s" + @echo "... zip_hash.o" + @echo "... zip_hash.i" + @echo "... zip_hash.s" + @echo "... zip_io_util.o" + @echo "... zip_io_util.i" + @echo "... zip_io_util.s" + @echo "... zip_libzip_version.o" + @echo "... zip_libzip_version.i" + @echo "... zip_libzip_version.s" + @echo "... zip_memdup.o" + @echo "... zip_memdup.i" + @echo "... zip_memdup.s" + @echo "... zip_name_locate.o" + @echo "... zip_name_locate.i" + @echo "... zip_name_locate.s" + @echo "... zip_new.o" + @echo "... zip_new.i" + @echo "... zip_new.s" + @echo "... zip_open.o" + @echo "... zip_open.i" + @echo "... zip_open.s" + @echo "... zip_pkware.o" + @echo "... zip_pkware.i" + @echo "... zip_pkware.s" + @echo "... zip_progress.o" + @echo "... zip_progress.i" + @echo "... zip_progress.s" + @echo "... zip_random_unix.o" + @echo "... zip_random_unix.i" + @echo "... zip_random_unix.s" + @echo "... zip_rename.o" + @echo "... zip_rename.i" + @echo "... zip_rename.s" + @echo "... zip_replace.o" + @echo "... zip_replace.i" + @echo "... zip_replace.s" + @echo "... zip_set_archive_comment.o" + @echo "... zip_set_archive_comment.i" + @echo "... zip_set_archive_comment.s" + @echo "... zip_set_archive_flag.o" + @echo "... zip_set_archive_flag.i" + @echo "... zip_set_archive_flag.s" + @echo "... zip_set_default_password.o" + @echo "... zip_set_default_password.i" + @echo "... zip_set_default_password.s" + @echo "... zip_set_file_comment.o" + @echo "... zip_set_file_comment.i" + @echo "... zip_set_file_comment.s" + @echo "... zip_set_file_compression.o" + @echo "... zip_set_file_compression.i" + @echo "... zip_set_file_compression.s" + @echo "... zip_set_name.o" + @echo "... zip_set_name.i" + @echo "... zip_set_name.s" + @echo "... zip_source_accept_empty.o" + @echo "... zip_source_accept_empty.i" + @echo "... zip_source_accept_empty.s" + @echo "... zip_source_begin_write.o" + @echo "... zip_source_begin_write.i" + @echo "... zip_source_begin_write.s" + @echo "... zip_source_begin_write_cloning.o" + @echo "... zip_source_begin_write_cloning.i" + @echo "... zip_source_begin_write_cloning.s" + @echo "... zip_source_buffer.o" + @echo "... zip_source_buffer.i" + @echo "... zip_source_buffer.s" + @echo "... zip_source_call.o" + @echo "... zip_source_call.i" + @echo "... zip_source_call.s" + @echo "... zip_source_close.o" + @echo "... zip_source_close.i" + @echo "... zip_source_close.s" + @echo "... zip_source_commit_write.o" + @echo "... zip_source_commit_write.i" + @echo "... zip_source_commit_write.s" + @echo "... zip_source_compress.o" + @echo "... zip_source_compress.i" + @echo "... zip_source_compress.s" + @echo "... zip_source_crc.o" + @echo "... zip_source_crc.i" + @echo "... zip_source_crc.s" + @echo "... zip_source_error.o" + @echo "... zip_source_error.i" + @echo "... zip_source_error.s" + @echo "... zip_source_file_common.o" + @echo "... zip_source_file_common.i" + @echo "... zip_source_file_common.s" + @echo "... zip_source_file_stdio.o" + @echo "... zip_source_file_stdio.i" + @echo "... zip_source_file_stdio.s" + @echo "... zip_source_file_stdio_named.o" + @echo "... zip_source_file_stdio_named.i" + @echo "... zip_source_file_stdio_named.s" + @echo "... zip_source_free.o" + @echo "... zip_source_free.i" + @echo "... zip_source_free.s" + @echo "... zip_source_function.o" + @echo "... zip_source_function.i" + @echo "... zip_source_function.s" + @echo "... zip_source_get_dostime.o" + @echo "... zip_source_get_dostime.i" + @echo "... zip_source_get_dostime.s" + @echo "... zip_source_get_file_attributes.o" + @echo "... zip_source_get_file_attributes.i" + @echo "... zip_source_get_file_attributes.s" + @echo "... zip_source_is_deleted.o" + @echo "... zip_source_is_deleted.i" + @echo "... zip_source_is_deleted.s" + @echo "... zip_source_layered.o" + @echo "... zip_source_layered.i" + @echo "... zip_source_layered.s" + @echo "... zip_source_open.o" + @echo "... zip_source_open.i" + @echo "... zip_source_open.s" + @echo "... zip_source_pass_to_lower_layer.o" + @echo "... zip_source_pass_to_lower_layer.i" + @echo "... zip_source_pass_to_lower_layer.s" + @echo "... zip_source_pkware_decode.o" + @echo "... zip_source_pkware_decode.i" + @echo "... zip_source_pkware_decode.s" + @echo "... zip_source_pkware_encode.o" + @echo "... zip_source_pkware_encode.i" + @echo "... zip_source_pkware_encode.s" + @echo "... zip_source_read.o" + @echo "... zip_source_read.i" + @echo "... zip_source_read.s" + @echo "... zip_source_remove.o" + @echo "... zip_source_remove.i" + @echo "... zip_source_remove.s" + @echo "... zip_source_rollback_write.o" + @echo "... zip_source_rollback_write.i" + @echo "... zip_source_rollback_write.s" + @echo "... zip_source_seek.o" + @echo "... zip_source_seek.i" + @echo "... zip_source_seek.s" + @echo "... zip_source_seek_write.o" + @echo "... zip_source_seek_write.i" + @echo "... zip_source_seek_write.s" + @echo "... zip_source_stat.o" + @echo "... zip_source_stat.i" + @echo "... zip_source_stat.s" + @echo "... zip_source_supports.o" + @echo "... zip_source_supports.i" + @echo "... zip_source_supports.s" + @echo "... zip_source_tell.o" + @echo "... zip_source_tell.i" + @echo "... zip_source_tell.s" + @echo "... zip_source_tell_write.o" + @echo "... zip_source_tell_write.i" + @echo "... zip_source_tell_write.s" + @echo "... zip_source_window.o" + @echo "... zip_source_window.i" + @echo "... zip_source_window.s" + @echo "... zip_source_write.o" + @echo "... zip_source_write.i" + @echo "... zip_source_write.s" + @echo "... zip_source_zip.o" + @echo "... zip_source_zip.i" + @echo "... zip_source_zip.s" + @echo "... zip_source_zip_new.o" + @echo "... zip_source_zip_new.i" + @echo "... zip_source_zip_new.s" + @echo "... zip_stat.o" + @echo "... zip_stat.i" + @echo "... zip_stat.s" + @echo "... zip_stat_index.o" + @echo "... zip_stat_index.i" + @echo "... zip_stat_index.s" + @echo "... zip_stat_init.o" + @echo "... zip_stat_init.i" + @echo "... zip_stat_init.s" + @echo "... zip_strerror.o" + @echo "... zip_strerror.i" + @echo "... zip_strerror.s" + @echo "... zip_string.o" + @echo "... zip_string.i" + @echo "... zip_string.s" + @echo "... zip_unchange.o" + @echo "... zip_unchange.i" + @echo "... zip_unchange.s" + @echo "... zip_unchange_all.o" + @echo "... zip_unchange_all.i" + @echo "... zip_unchange_all.s" + @echo "... zip_unchange_archive.o" + @echo "... zip_unchange_archive.i" + @echo "... zip_unchange_archive.s" + @echo "... zip_unchange_data.o" + @echo "... zip_unchange_data.i" + @echo "... zip_unchange_data.s" + @echo "... zip_utf-8.o" + @echo "... zip_utf-8.i" + @echo "... zip_utf-8.s" +.PHONY : help + + + +#============================================================================= +# Special targets to cleanup operation of make. + +# Special rule to run CMake to check the build system integrity. +# No rule that depends on this can have commands that come from listfiles +# because they might be regenerated. +cmake_check_build_system: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(CMAKE_COMMAND) -S$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles/Makefile.cmake 0 +.PHONY : cmake_check_build_system + diff --git a/thirdparty/libzip-1.11.3/build-emcmake/lib/cmake_install.cmake b/thirdparty/libzip-1.11.3/build-emcmake/lib/cmake_install.cmake new file mode 100644 index 0000000..89e4c5c --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/lib/cmake_install.cmake @@ -0,0 +1,47 @@ +# Install script for directory: /home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib + +# Set the install prefix +if(NOT DEFINED CMAKE_INSTALL_PREFIX) + set(CMAKE_INSTALL_PREFIX "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/install") +endif() +string(REGEX REPLACE "/$" "" CMAKE_INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX}") + +# Set the install configuration name. +if(NOT DEFINED CMAKE_INSTALL_CONFIG_NAME) + if(BUILD_TYPE) + string(REGEX REPLACE "^[^A-Za-z0-9_]+" "" + CMAKE_INSTALL_CONFIG_NAME "${BUILD_TYPE}") + else() + set(CMAKE_INSTALL_CONFIG_NAME "") + endif() + message(STATUS "Install configuration: \"${CMAKE_INSTALL_CONFIG_NAME}\"") +endif() + +# Set the component getting installed. +if(NOT CMAKE_INSTALL_COMPONENT) + if(COMPONENT) + message(STATUS "Install component: \"${COMPONENT}\"") + set(CMAKE_INSTALL_COMPONENT "${COMPONENT}") + else() + set(CMAKE_INSTALL_COMPONENT) + endif() +endif() + +# Is this installation the result of a crosscompile? +if(NOT DEFINED CMAKE_CROSSCOMPILING) + set(CMAKE_CROSSCOMPILING "TRUE") +endif() + +# Set default install directory permissions. +if(NOT DEFINED CMAKE_OBJDUMP) + set(CMAKE_OBJDUMP "/usr/bin/objdump") +endif() + +if(CMAKE_INSTALL_COMPONENT STREQUAL "Unspecified" OR NOT CMAKE_INSTALL_COMPONENT) + file(INSTALL DESTINATION "${CMAKE_INSTALL_PREFIX}/lib" TYPE STATIC_LIBRARY FILES "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib/libzip.a") +endif() + +if(CMAKE_INSTALL_COMPONENT STREQUAL "Unspecified" OR NOT CMAKE_INSTALL_COMPONENT) + file(INSTALL DESTINATION "${CMAKE_INSTALL_PREFIX}/include" TYPE FILE FILES "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip.h") +endif() + diff --git a/thirdparty/libzip-1.11.3/build-emcmake/lib/libzip.a b/thirdparty/libzip-1.11.3/build-emcmake/lib/libzip.a new file mode 100644 index 0000000000000000000000000000000000000000..d529d3f85e1de2037e0144e9441c358d6fd55bf8 GIT binary patch literal 353784 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
    JN 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
  • 1V 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 literal 0 HcmV?d00001 diff --git a/thirdparty/libzip-1.11.3/build-emcmake/lib/zip_err_str.c b/thirdparty/libzip-1.11.3/build-emcmake/lib/zip_err_str.c new file mode 100644 index 0000000..7e3616b --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/lib/zip_err_str.c @@ -0,0 +1,86 @@ +/* + This file was generated automatically by CMake + from zip.h and zipint.h; make changes there. +*/ + +#include "zipint.h" + +#define L ZIP_ET_LIBZIP +#define N ZIP_ET_NONE +#define S ZIP_ET_SYS +#define Z ZIP_ET_ZLIB + +#define E ZIP_DETAIL_ET_ENTRY +#define G ZIP_DETAIL_ET_GLOBAL + +const struct _zip_err_info _zip_err_str[] = { + { N, "No error" }, + { N, "Multi-disk zip archives not supported" }, + { S, "Renaming temporary file failed" }, + { S, "Closing zip archive failed" }, + { S, "Seek error" }, + { S, "Read error" }, + { S, "Write error" }, + { N, "CRC error" }, + { N, "Containing zip archive was closed" }, + { N, "No such file" }, + { N, "File already exists" }, + { S, "Can't open file" }, + { S, "Failure to create temporary file" }, + { Z, "Zlib error" }, + { N, "Malloc failure" }, + { N, "Entry has been changed" }, + { N, "Compression method not supported" }, + { N, "Premature end of file" }, + { N, "Invalid argument" }, + { N, "Not a zip archive" }, + { N, "Internal error" }, + { L, "Zip archive inconsistent" }, + { S, "Can't remove file" }, + { N, "Entry has been deleted" }, + { N, "Encryption method not supported" }, + { N, "Read-only archive" }, + { N, "No password provided" }, + { N, "Wrong password provided" }, + { N, "Operation not supported" }, + { N, "Resource still in use" }, + { S, "Tell error" }, + { N, "Compressed data invalid" }, + { N, "Operation cancelled" }, + { N, "Unexpected length of data" }, + { N, "Not allowed in torrentzip" }, + { N, "Possibly truncated or corrupted zip archive" }, +}; + +const int _zip_err_str_count = sizeof(_zip_err_str)/sizeof(_zip_err_str[0]); + +const struct _zip_err_info _zip_err_details[] = { + { G, "no detail" }, + { G, "central directory overlaps EOCD, or there is space between them" }, + { G, "archive comment length incorrect" }, + { G, "central directory length invalid" }, + { E, "central header invalid" }, + { G, "central directory count of entries is incorrect" }, + { E, "local and central headers do not match" }, + { G, "wrong EOCD length" }, + { G, "EOCD64 overlaps EOCD, or there is space between them" }, + { G, "EOCD64 magic incorrect" }, + { G, "EOCD64 and EOCD do not match" }, + { G, "invalid value in central directory" }, + { E, "variable size fields overflow header" }, + { E, "invalid UTF-8 in filename" }, + { E, "invalid UTF-8 in comment" }, + { E, "invalid Zip64 extra field" }, + { E, "invalid WinZip AES extra field" }, + { E, "garbage at end of extra fields" }, + { E, "extra field length is invalid" }, + { E, "file length in header doesn't match actual file length" }, + { E, "compressed and uncompressed sizes don't match for stored file" }, + { E, "local header and data descriptor do not match" }, + { G, "EOCD64 and EOCD64 locator do not match" }, + { E, "UTF-8 filename is ASCII and doesn't match filename" }, + { E, "UTF-8 comment is ASCII and doesn't match comment" }, + { G, "garbage at end of compressed data" }, +}; + +const int _zip_err_details_count = sizeof(_zip_err_details)/sizeof(_zip_err_details[0]); diff --git a/thirdparty/libzip-1.11.3/build-emcmake/libzip-config-version.cmake b/thirdparty/libzip-1.11.3/build-emcmake/libzip-config-version.cmake new file mode 100644 index 0000000..b026896 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/libzip-config-version.cmake @@ -0,0 +1,43 @@ +# This is a basic version file for the Config-mode of find_package(). +# It is used by write_basic_package_version_file() as input file for configure_file() +# to create a version-file which can be installed along a config.cmake file. +# +# The created file sets PACKAGE_VERSION_EXACT if the current version string and +# the requested version string are exactly the same and it sets +# PACKAGE_VERSION_COMPATIBLE if the current version is >= requested version. +# The variable CVF_VERSION must be set before calling configure_file(). + +set(PACKAGE_VERSION "1.11.3") + +if (PACKAGE_FIND_VERSION_RANGE) + # Package version must be in the requested version range + if ((PACKAGE_FIND_VERSION_RANGE_MIN STREQUAL "INCLUDE" AND PACKAGE_VERSION VERSION_LESS PACKAGE_FIND_VERSION_MIN) + OR ((PACKAGE_FIND_VERSION_RANGE_MAX STREQUAL "INCLUDE" AND PACKAGE_VERSION VERSION_GREATER PACKAGE_FIND_VERSION_MAX) + OR (PACKAGE_FIND_VERSION_RANGE_MAX STREQUAL "EXCLUDE" AND PACKAGE_VERSION VERSION_GREATER_EQUAL PACKAGE_FIND_VERSION_MAX))) + set(PACKAGE_VERSION_COMPATIBLE FALSE) + else() + set(PACKAGE_VERSION_COMPATIBLE TRUE) + endif() +else() + if(PACKAGE_VERSION VERSION_LESS PACKAGE_FIND_VERSION) + set(PACKAGE_VERSION_COMPATIBLE FALSE) + else() + set(PACKAGE_VERSION_COMPATIBLE TRUE) + if(PACKAGE_FIND_VERSION STREQUAL PACKAGE_VERSION) + set(PACKAGE_VERSION_EXACT TRUE) + endif() + endif() +endif() + + +# if the installed or the using project don't have CMAKE_SIZEOF_VOID_P set, ignore it: +if("${CMAKE_SIZEOF_VOID_P}" STREQUAL "" OR "4" STREQUAL "") + return() +endif() + +# check that the installed version has the same 32/64bit-ness as the one which is currently searching: +if(NOT CMAKE_SIZEOF_VOID_P STREQUAL "4") + math(EXPR installedBits "4 * 8") + set(PACKAGE_VERSION "${PACKAGE_VERSION} (${installedBits}bit)") + set(PACKAGE_VERSION_UNSUITABLE TRUE) +endif() diff --git a/thirdparty/libzip-1.11.3/build-emcmake/libzip-config.cmake b/thirdparty/libzip-1.11.3/build-emcmake/libzip-config.cmake new file mode 100644 index 0000000..f0b8af7 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/libzip-config.cmake @@ -0,0 +1,69 @@ + +####### Expanded from @PACKAGE_INIT@ by configure_package_config_file() ####### +####### Any changes to this file will be overwritten by the next CMake run #### +####### The input file was libzip-config.cmake.in ######## + +get_filename_component(PACKAGE_PREFIX_DIR "${CMAKE_CURRENT_LIST_DIR}/../../../" ABSOLUTE) + +macro(set_and_check _var _file) + set(${_var} "${_file}") + if(NOT EXISTS "${_file}") + message(FATAL_ERROR "File or directory ${_file} referenced by variable ${_var} does not exist !") + endif() +endmacro() + +macro(check_required_components _NAME) + foreach(comp ${${_NAME}_FIND_COMPONENTS}) + if(NOT ${_NAME}_${comp}_FOUND) + if(${_NAME}_FIND_REQUIRED_${comp}) + set(${_NAME}_FOUND FALSE) + endif() + endif() + endforeach() +endmacro() + +#################################################################################### + +# We need to supply transitive dependencies if this config is for a static library +set(IS_SHARED ON) +if (NOT IS_SHARED) + include(CMakeFindDependencyMacro) + set(CMAKE_MODULE_PATH ${CMAKE_MODULE_PATH} "${CMAKE_CURRENT_LIST_DIR}/modules") + + set(ENABLE_BZIP2 FALSE) + set(ENABLE_LZMA FALSE) + set(ENABLE_ZSTD FALSE) + set(ENABLE_GNUTLS FALSE) + set(ENABLE_MBEDTLS FALSE) + set(ENABLE_OPENSSL FALSE) + + find_dependency(ZLIB 1.1.2) + if(ENABLE_BZIP2) + find_dependency(BZip2) + endif() + + if(ENABLE_LZMA) + find_dependency(LibLZMA 5.2) + endif() + + if(ENABLE_ZSTD) + find_dependency(zstd 1.3.6) + endif() + + if(ENABLE_GNUTLS) + find_dependency(Nettle 3.0) + find_dependency(GnuTLS) + endif() + if(ENABLE_MBEDTLS) + find_dependency(MbedTLS 1.0) + endif() + if(ENABLE_OPENSSL) + find_dependency(OpenSSL) + endif() +endif() + +# Provide all our library targets to users. +include("${CMAKE_CURRENT_LIST_DIR}/libzip-targets.cmake") + +check_required_components(libzip) + diff --git a/thirdparty/libzip-1.11.3/build-emcmake/libzip-targets.cmake b/thirdparty/libzip-1.11.3/build-emcmake/libzip-targets.cmake new file mode 100644 index 0000000..2dfeb58 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/libzip-targets.cmake @@ -0,0 +1,69 @@ +# Generated by CMake + +if("${CMAKE_MAJOR_VERSION}.${CMAKE_MINOR_VERSION}" LESS 2.8) + message(FATAL_ERROR "CMake >= 2.8.0 required") +endif() +if(CMAKE_VERSION VERSION_LESS "2.8.3") + message(FATAL_ERROR "CMake >= 2.8.3 required") +endif() +cmake_policy(PUSH) +cmake_policy(VERSION 2.8.3...3.26) +#---------------------------------------------------------------- +# Generated CMake target import file. +#---------------------------------------------------------------- + +# Commands may need to know the format version. +set(CMAKE_IMPORT_FILE_VERSION 1) + +# Protect against multiple inclusion, which would fail when already imported targets are added once more. +set(_cmake_targets_defined "") +set(_cmake_targets_not_defined "") +set(_cmake_expected_targets "") +foreach(_cmake_expected_target IN ITEMS zip) + list(APPEND _cmake_expected_targets "${_cmake_expected_target}") + if(TARGET "${_cmake_expected_target}") + list(APPEND _cmake_targets_defined "${_cmake_expected_target}") + else() + list(APPEND _cmake_targets_not_defined "${_cmake_expected_target}") + endif() +endforeach() +unset(_cmake_expected_target) +if(_cmake_targets_defined STREQUAL _cmake_expected_targets) + unset(_cmake_targets_defined) + unset(_cmake_targets_not_defined) + unset(_cmake_expected_targets) + unset(CMAKE_IMPORT_FILE_VERSION) + cmake_policy(POP) + return() +endif() +if(NOT _cmake_targets_defined STREQUAL "") + string(REPLACE ";" ", " _cmake_targets_defined_text "${_cmake_targets_defined}") + string(REPLACE ";" ", " _cmake_targets_not_defined_text "${_cmake_targets_not_defined}") + message(FATAL_ERROR "Some (but not all) targets in this export set were already defined.\nTargets Defined: ${_cmake_targets_defined_text}\nTargets not yet defined: ${_cmake_targets_not_defined_text}\n") +endif() +unset(_cmake_targets_defined) +unset(_cmake_targets_not_defined) +unset(_cmake_expected_targets) + + +# Create imported target zip +add_library(zip STATIC IMPORTED) + +set_target_properties(zip PROPERTIES + INTERFACE_INCLUDE_DIRECTORIES "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/lib;/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" + INTERFACE_LINK_LIBRARIES "\$" +) + +# Import target "zip" for configuration "" +set_property(TARGET zip APPEND PROPERTY IMPORTED_CONFIGURATIONS NOCONFIG) +set_target_properties(zip PROPERTIES + IMPORTED_LINK_INTERFACE_LANGUAGES_NOCONFIG "C" + IMPORTED_LOCATION_NOCONFIG "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/lib/libzip.a" + ) + +# This file does not depend on other imported targets which have +# been exported from the same project but in a separate export set. + +# Commands beyond this point should not need to know the version. +set(CMAKE_IMPORT_FILE_VERSION) +cmake_policy(POP) diff --git a/thirdparty/libzip-1.11.3/build-emcmake/libzip.pc b/thirdparty/libzip-1.11.3/build-emcmake/libzip.pc new file mode 100644 index 0000000..e3676c3 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/libzip.pc @@ -0,0 +1,14 @@ +prefix=/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/install +exec_prefix=${prefix} +bindir=${prefix}/bin +libdir=${prefix}/lib +includedir=${prefix}/include + +zipcmp=${bindir}/zipcmp + +Name: libzip +Description: library for handling zip archives +Version: 1.11.3 +Libs: -L${libdir} -lzip +Libs.private: -lz +Cflags: -I${includedir} diff --git a/thirdparty/libzip-1.11.3/build-emcmake/man/CMakeFiles/CMakeDirectoryInformation.cmake b/thirdparty/libzip-1.11.3/build-emcmake/man/CMakeFiles/CMakeDirectoryInformation.cmake new file mode 100644 index 0000000..ea55061 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/man/CMakeFiles/CMakeDirectoryInformation.cmake @@ -0,0 +1,16 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.28 + +# Relative path conversion top directories. +set(CMAKE_RELATIVE_PATH_TOP_SOURCE "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3") +set(CMAKE_RELATIVE_PATH_TOP_BINARY "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake") + +# Force unix paths in dependencies. +set(CMAKE_FORCE_UNIX_PATHS 1) + + +# The C and CXX include file regular expressions for this directory. +set(CMAKE_C_INCLUDE_REGEX_SCAN "^.*$") +set(CMAKE_C_INCLUDE_REGEX_COMPLAIN "^$") +set(CMAKE_CXX_INCLUDE_REGEX_SCAN ${CMAKE_C_INCLUDE_REGEX_SCAN}) +set(CMAKE_CXX_INCLUDE_REGEX_COMPLAIN ${CMAKE_C_INCLUDE_REGEX_COMPLAIN}) diff --git a/thirdparty/libzip-1.11.3/build-emcmake/man/CMakeFiles/man.dir/DependInfo.cmake b/thirdparty/libzip-1.11.3/build-emcmake/man/CMakeFiles/man.dir/DependInfo.cmake new file mode 100644 index 0000000..29b95a5 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/man/CMakeFiles/man.dir/DependInfo.cmake @@ -0,0 +1,22 @@ + +# Consider dependencies only in project. +set(CMAKE_DEPENDS_IN_PROJECT_ONLY OFF) + +# The set of languages for which implicit dependencies are needed: +set(CMAKE_DEPENDS_LANGUAGES + ) + +# The set of dependency files which are needed: +set(CMAKE_DEPENDS_DEPENDENCY_FILES + ) + +# Targets to which this target links which contain Fortran sources. +set(CMAKE_Fortran_TARGET_LINKED_INFO_FILES + ) + +# Targets to which this target links which contain Fortran sources. +set(CMAKE_Fortran_TARGET_FORWARD_LINKED_INFO_FILES + ) + +# Fortran module output directory. +set(CMAKE_Fortran_TARGET_MODULE_DIR "") diff --git a/thirdparty/libzip-1.11.3/build-emcmake/man/CMakeFiles/man.dir/build.make b/thirdparty/libzip-1.11.3/build-emcmake/man/CMakeFiles/man.dir/build.make new file mode 100644 index 0000000..f90eb34 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/man/CMakeFiles/man.dir/build.make @@ -0,0 +1,715 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.28 + +# Delete rule output on recipe failure. +.DELETE_ON_ERROR: + +#============================================================================= +# Special targets provided by cmake. + +# Disable implicit rules so canonical targets will work. +.SUFFIXES: + +# Disable VCS-based implicit rules. +% : %,v + +# Disable VCS-based implicit rules. +% : RCS/% + +# Disable VCS-based implicit rules. +% : RCS/%,v + +# Disable VCS-based implicit rules. +% : SCCS/s.% + +# Disable VCS-based implicit rules. +% : s.% + +.SUFFIXES: .hpux_make_needs_suffix_list + +# Command-line flag to silence nested $(MAKE). +$(VERBOSE)MAKESILENT = -s + +#Suppress display of executed commands. +$(VERBOSE).SILENT: + +# A target that is always out of date. +cmake_force: +.PHONY : cmake_force + +#============================================================================= +# Set environment variables for the build. + +# The shell in which to execute make rules. +SHELL = /bin/sh + +# The CMake executable. +CMAKE_COMMAND = /usr/bin/cmake + +# The command to remove a file. +RM = /usr/bin/cmake -E rm -f + +# Escaping for special characters. +EQUALS = = + +# The top-level source directory on which CMake was run. +CMAKE_SOURCE_DIR = "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3" + +# The top-level build directory on which CMake was run. +CMAKE_BINARY_DIR = "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" + +# Utility rule file for man. + +# Include any custom commands dependencies for this target. +include man/CMakeFiles/man.dir/compiler_depend.make + +# Include the progress variables for this target. +include man/CMakeFiles/man.dir/progress.make + +man/CMakeFiles/man: man/ZIP_SOURCE_GET_ARGS.3 +man/CMakeFiles/man: man/libzip.3 +man/CMakeFiles/man: man/zip_add.3 +man/CMakeFiles/man: man/zip_add_dir.3 +man/CMakeFiles/man: man/zip_close.3 +man/CMakeFiles/man: man/zip_compression_method_supported.3 +man/CMakeFiles/man: man/zip_delete.3 +man/CMakeFiles/man: man/zip_dir_add.3 +man/CMakeFiles/man: man/zip_discard.3 +man/CMakeFiles/man: man/zip_encryption_method_supported.3 +man/CMakeFiles/man: man/zip_error_clear.3 +man/CMakeFiles/man: man/zip_error_code_system.3 +man/CMakeFiles/man: man/zip_error_code_zip.3 +man/CMakeFiles/man: man/zip_error_fini.3 +man/CMakeFiles/man: man/zip_error_get.3 +man/CMakeFiles/man: man/zip_error_get_sys_type.3 +man/CMakeFiles/man: man/zip_error_init.3 +man/CMakeFiles/man: man/zip_error_set.3 +man/CMakeFiles/man: man/zip_error_set_from_source.3 +man/CMakeFiles/man: man/zip_error_strerror.3 +man/CMakeFiles/man: man/zip_error_system_type.3 +man/CMakeFiles/man: man/zip_error_to_data.3 +man/CMakeFiles/man: man/zip_error_to_str.3 +man/CMakeFiles/man: man/zip_errors.3 +man/CMakeFiles/man: man/zip_fclose.3 +man/CMakeFiles/man: man/zip_fdopen.3 +man/CMakeFiles/man: man/zip_file_add.3 +man/CMakeFiles/man: man/zip_file_attributes_init.3 +man/CMakeFiles/man: man/zip_file_extra_field_delete.3 +man/CMakeFiles/man: man/zip_file_extra_field_get.3 +man/CMakeFiles/man: man/zip_file_extra_field_set.3 +man/CMakeFiles/man: man/zip_file_extra_fields_count.3 +man/CMakeFiles/man: man/zip_file_get_comment.3 +man/CMakeFiles/man: man/zip_file_get_error.3 +man/CMakeFiles/man: man/zip_file_get_external_attributes.3 +man/CMakeFiles/man: man/zip_file_rename.3 +man/CMakeFiles/man: man/zip_file_set_comment.3 +man/CMakeFiles/man: man/zip_file_set_encryption.3 +man/CMakeFiles/man: man/zip_file_set_external_attributes.3 +man/CMakeFiles/man: man/zip_file_set_mtime.3 +man/CMakeFiles/man: man/zip_file_strerror.3 +man/CMakeFiles/man: man/zip_fopen.3 +man/CMakeFiles/man: man/zip_fopen_encrypted.3 +man/CMakeFiles/man: man/zip_fread.3 +man/CMakeFiles/man: man/zip_fseek.3 +man/CMakeFiles/man: man/zip_ftell.3 +man/CMakeFiles/man: man/zip_get_archive_comment.3 +man/CMakeFiles/man: man/zip_get_archive_flag.3 +man/CMakeFiles/man: man/zip_get_error.3 +man/CMakeFiles/man: man/zip_get_file_comment.3 +man/CMakeFiles/man: man/zip_get_name.3 +man/CMakeFiles/man: man/zip_get_num_entries.3 +man/CMakeFiles/man: man/zip_get_num_files.3 +man/CMakeFiles/man: man/zip_libzip_version.3 +man/CMakeFiles/man: man/zip_name_locate.3 +man/CMakeFiles/man: man/zip_open.3 +man/CMakeFiles/man: man/zip_register_cancel_callback_with_state.3 +man/CMakeFiles/man: man/zip_register_progress_callback.3 +man/CMakeFiles/man: man/zip_register_progress_callback_with_state.3 +man/CMakeFiles/man: man/zip_rename.3 +man/CMakeFiles/man: man/zip_set_archive_comment.3 +man/CMakeFiles/man: man/zip_set_archive_flag.3 +man/CMakeFiles/man: man/zip_set_default_password.3 +man/CMakeFiles/man: man/zip_set_file_comment.3 +man/CMakeFiles/man: man/zip_set_file_compression.3 +man/CMakeFiles/man: man/zip_source.3 +man/CMakeFiles/man: man/zip_source_begin_write.3 +man/CMakeFiles/man: man/zip_source_buffer.3 +man/CMakeFiles/man: man/zip_source_buffer_fragment.3 +man/CMakeFiles/man: man/zip_source_close.3 +man/CMakeFiles/man: man/zip_source_commit_write.3 +man/CMakeFiles/man: man/zip_source_error.3 +man/CMakeFiles/man: man/zip_source_file.3 +man/CMakeFiles/man: man/zip_source_filep.3 +man/CMakeFiles/man: man/zip_source_free.3 +man/CMakeFiles/man: man/zip_source_function.3 +man/CMakeFiles/man: man/zip_source_is_deleted.3 +man/CMakeFiles/man: man/zip_source_is_seekable.3 +man/CMakeFiles/man: man/zip_source_layered.3 +man/CMakeFiles/man: man/zip_source_keep.3 +man/CMakeFiles/man: man/zip_source_make_command_bitmap.3 +man/CMakeFiles/man: man/zip_source_open.3 +man/CMakeFiles/man: man/zip_source_read.3 +man/CMakeFiles/man: man/zip_source_rollback_write.3 +man/CMakeFiles/man: man/zip_source_seek.3 +man/CMakeFiles/man: man/zip_source_seek_compute_offset.3 +man/CMakeFiles/man: man/zip_source_seek_write.3 +man/CMakeFiles/man: man/zip_source_stat.3 +man/CMakeFiles/man: man/zip_source_tell.3 +man/CMakeFiles/man: man/zip_source_tell_write.3 +man/CMakeFiles/man: man/zip_source_win32a.3 +man/CMakeFiles/man: man/zip_source_win32handle.3 +man/CMakeFiles/man: man/zip_source_win32w.3 +man/CMakeFiles/man: man/zip_source_window_create.3 +man/CMakeFiles/man: man/zip_source_write.3 +man/CMakeFiles/man: man/zip_source_zip.3 +man/CMakeFiles/man: man/zip_source_zip_file.3 +man/CMakeFiles/man: man/zip_stat.3 +man/CMakeFiles/man: man/zip_stat_init.3 +man/CMakeFiles/man: man/zip_unchange.3 +man/CMakeFiles/man: man/zip_unchange_all.3 +man/CMakeFiles/man: man/zip_unchange_archive.3 +man/CMakeFiles/man: man/zipcmp.1 +man/CMakeFiles/man: man/zipmerge.1 +man/CMakeFiles/man: man/ziptool.1 + +man/ZIP_SOURCE_GET_ARGS.3: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/ZIP_SOURCE_GET_ARGS.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_1) "Preparing ZIP_SOURCE_GET_ARGS.3" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/ZIP_SOURCE_GET_ARGS.mdoc /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/ZIP_SOURCE_GET_ARGS.3 + +man/libzip.3: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/libzip.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_2) "Preparing libzip.3" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/libzip.mdoc /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/libzip.3 + +man/zip_add.3: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_add.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_3) "Preparing zip_add.3" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_add.mdoc /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_add.3 + +man/zip_add_dir.3: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_add_dir.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_4) "Preparing zip_add_dir.3" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_add_dir.mdoc /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_add_dir.3 + +man/zip_close.3: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_close.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_5) "Preparing zip_close.3" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_close.mdoc /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_close.3 + +man/zip_compression_method_supported.3: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_compression_method_supported.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_6) "Preparing zip_compression_method_supported.3" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_compression_method_supported.mdoc /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_compression_method_supported.3 + +man/zip_delete.3: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_delete.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_7) "Preparing zip_delete.3" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_delete.mdoc /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_delete.3 + +man/zip_dir_add.3: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_dir_add.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_8) "Preparing zip_dir_add.3" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_dir_add.mdoc /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_dir_add.3 + +man/zip_discard.3: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_discard.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_9) "Preparing zip_discard.3" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_discard.mdoc /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_discard.3 + +man/zip_encryption_method_supported.3: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_encryption_method_supported.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_10) "Preparing zip_encryption_method_supported.3" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_encryption_method_supported.mdoc /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_encryption_method_supported.3 + +man/zip_error_clear.3: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_error_clear.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_11) "Preparing zip_error_clear.3" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_error_clear.mdoc /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_error_clear.3 + +man/zip_error_code_system.3: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_error_code_system.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_12) "Preparing zip_error_code_system.3" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_error_code_system.mdoc /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_error_code_system.3 + +man/zip_error_code_zip.3: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_error_code_zip.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_13) "Preparing zip_error_code_zip.3" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_error_code_zip.mdoc /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_error_code_zip.3 + +man/zip_error_fini.3: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_error_fini.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_14) "Preparing zip_error_fini.3" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_error_fini.mdoc /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_error_fini.3 + +man/zip_error_get.3: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_error_get.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_15) "Preparing zip_error_get.3" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_error_get.mdoc /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_error_get.3 + +man/zip_error_get_sys_type.3: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_error_get_sys_type.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_16) "Preparing zip_error_get_sys_type.3" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_error_get_sys_type.mdoc /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_error_get_sys_type.3 + +man/zip_error_init.3: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_error_init.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_17) "Preparing zip_error_init.3" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_error_init.mdoc /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_error_init.3 + +man/zip_error_set.3: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_error_set.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_18) "Preparing zip_error_set.3" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_error_set.mdoc /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_error_set.3 + +man/zip_error_set_from_source.3: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_error_set_from_source.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_19) "Preparing zip_error_set_from_source.3" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_error_set_from_source.mdoc /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_error_set_from_source.3 + +man/zip_error_strerror.3: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_error_strerror.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_20) "Preparing zip_error_strerror.3" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_error_strerror.mdoc /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_error_strerror.3 + +man/zip_error_system_type.3: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_error_system_type.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_21) "Preparing zip_error_system_type.3" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_error_system_type.mdoc /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_error_system_type.3 + +man/zip_error_to_data.3: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_error_to_data.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_22) "Preparing zip_error_to_data.3" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_error_to_data.mdoc /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_error_to_data.3 + +man/zip_error_to_str.3: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_error_to_str.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_23) "Preparing zip_error_to_str.3" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_error_to_str.mdoc /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_error_to_str.3 + +man/zip_errors.3: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_errors.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_24) "Preparing zip_errors.3" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_errors.mdoc /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_errors.3 + +man/zip_fclose.3: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_fclose.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_25) "Preparing zip_fclose.3" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_fclose.mdoc /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_fclose.3 + +man/zip_fdopen.3: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_fdopen.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_26) "Preparing zip_fdopen.3" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_fdopen.mdoc /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_fdopen.3 + +man/zip_file_add.3: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_file_add.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_27) "Preparing zip_file_add.3" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_file_add.mdoc /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_file_add.3 + +man/zip_file_attributes_init.3: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_file_attributes_init.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_28) "Preparing zip_file_attributes_init.3" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_file_attributes_init.mdoc /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_file_attributes_init.3 + +man/zip_file_extra_field_delete.3: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_file_extra_field_delete.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_29) "Preparing zip_file_extra_field_delete.3" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_file_extra_field_delete.mdoc /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_file_extra_field_delete.3 + +man/zip_file_extra_field_get.3: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_file_extra_field_get.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_30) "Preparing zip_file_extra_field_get.3" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_file_extra_field_get.mdoc /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_file_extra_field_get.3 + +man/zip_file_extra_field_set.3: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_file_extra_field_set.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_31) "Preparing zip_file_extra_field_set.3" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_file_extra_field_set.mdoc /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_file_extra_field_set.3 + +man/zip_file_extra_fields_count.3: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_file_extra_fields_count.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_32) "Preparing zip_file_extra_fields_count.3" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_file_extra_fields_count.mdoc /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_file_extra_fields_count.3 + +man/zip_file_get_comment.3: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_file_get_comment.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_33) "Preparing zip_file_get_comment.3" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_file_get_comment.mdoc /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_file_get_comment.3 + +man/zip_file_get_error.3: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_file_get_error.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_34) "Preparing zip_file_get_error.3" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_file_get_error.mdoc /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_file_get_error.3 + +man/zip_file_get_external_attributes.3: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_file_get_external_attributes.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_35) "Preparing zip_file_get_external_attributes.3" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_file_get_external_attributes.mdoc /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_file_get_external_attributes.3 + +man/zip_file_rename.3: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_file_rename.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_36) "Preparing zip_file_rename.3" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_file_rename.mdoc /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_file_rename.3 + +man/zip_file_set_comment.3: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_file_set_comment.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_37) "Preparing zip_file_set_comment.3" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_file_set_comment.mdoc /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_file_set_comment.3 + +man/zip_file_set_encryption.3: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_file_set_encryption.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_38) "Preparing zip_file_set_encryption.3" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_file_set_encryption.mdoc /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_file_set_encryption.3 + +man/zip_file_set_external_attributes.3: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_file_set_external_attributes.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_39) "Preparing zip_file_set_external_attributes.3" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_file_set_external_attributes.mdoc /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_file_set_external_attributes.3 + +man/zip_file_set_mtime.3: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_file_set_mtime.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_40) "Preparing zip_file_set_mtime.3" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_file_set_mtime.mdoc /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_file_set_mtime.3 + +man/zip_file_strerror.3: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_file_strerror.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_41) "Preparing zip_file_strerror.3" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_file_strerror.mdoc /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_file_strerror.3 + +man/zip_fopen.3: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_fopen.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_42) "Preparing zip_fopen.3" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_fopen.mdoc /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_fopen.3 + +man/zip_fopen_encrypted.3: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_fopen_encrypted.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_43) "Preparing zip_fopen_encrypted.3" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_fopen_encrypted.mdoc /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_fopen_encrypted.3 + +man/zip_fread.3: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_fread.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_44) "Preparing zip_fread.3" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_fread.mdoc /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_fread.3 + +man/zip_fseek.3: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_fseek.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_45) "Preparing zip_fseek.3" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_fseek.mdoc /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_fseek.3 + +man/zip_ftell.3: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_ftell.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_46) "Preparing zip_ftell.3" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_ftell.mdoc /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_ftell.3 + +man/zip_get_archive_comment.3: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_get_archive_comment.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_47) "Preparing zip_get_archive_comment.3" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_get_archive_comment.mdoc /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_get_archive_comment.3 + +man/zip_get_archive_flag.3: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_get_archive_flag.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_48) "Preparing zip_get_archive_flag.3" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_get_archive_flag.mdoc /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_get_archive_flag.3 + +man/zip_get_error.3: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_get_error.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_49) "Preparing zip_get_error.3" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_get_error.mdoc /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_get_error.3 + +man/zip_get_file_comment.3: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_get_file_comment.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_50) "Preparing zip_get_file_comment.3" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_get_file_comment.mdoc /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_get_file_comment.3 + +man/zip_get_name.3: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_get_name.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_51) "Preparing zip_get_name.3" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_get_name.mdoc /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_get_name.3 + +man/zip_get_num_entries.3: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_get_num_entries.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_52) "Preparing zip_get_num_entries.3" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_get_num_entries.mdoc /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_get_num_entries.3 + +man/zip_get_num_files.3: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_get_num_files.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_53) "Preparing zip_get_num_files.3" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_get_num_files.mdoc /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_get_num_files.3 + +man/zip_libzip_version.3: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_libzip_version.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_54) "Preparing zip_libzip_version.3" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_libzip_version.mdoc /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_libzip_version.3 + +man/zip_name_locate.3: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_name_locate.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_55) "Preparing zip_name_locate.3" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_name_locate.mdoc /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_name_locate.3 + +man/zip_open.3: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_open.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_56) "Preparing zip_open.3" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_open.mdoc /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_open.3 + +man/zip_register_cancel_callback_with_state.3: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_register_cancel_callback_with_state.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_57) "Preparing zip_register_cancel_callback_with_state.3" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_register_cancel_callback_with_state.mdoc /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_register_cancel_callback_with_state.3 + +man/zip_register_progress_callback.3: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_register_progress_callback.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_58) "Preparing zip_register_progress_callback.3" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_register_progress_callback.mdoc /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_register_progress_callback.3 + +man/zip_register_progress_callback_with_state.3: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_register_progress_callback_with_state.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_59) "Preparing zip_register_progress_callback_with_state.3" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_register_progress_callback_with_state.mdoc /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_register_progress_callback_with_state.3 + +man/zip_rename.3: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_rename.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_60) "Preparing zip_rename.3" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_rename.mdoc /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_rename.3 + +man/zip_set_archive_comment.3: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_set_archive_comment.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_61) "Preparing zip_set_archive_comment.3" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_set_archive_comment.mdoc /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_set_archive_comment.3 + +man/zip_set_archive_flag.3: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_set_archive_flag.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_62) "Preparing zip_set_archive_flag.3" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_set_archive_flag.mdoc /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_set_archive_flag.3 + +man/zip_set_default_password.3: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_set_default_password.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_63) "Preparing zip_set_default_password.3" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_set_default_password.mdoc /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_set_default_password.3 + +man/zip_set_file_comment.3: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_set_file_comment.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_64) "Preparing zip_set_file_comment.3" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_set_file_comment.mdoc /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_set_file_comment.3 + +man/zip_set_file_compression.3: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_set_file_compression.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_65) "Preparing zip_set_file_compression.3" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_set_file_compression.mdoc /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_set_file_compression.3 + +man/zip_source.3: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_source.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_66) "Preparing zip_source.3" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_source.mdoc /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source.3 + +man/zip_source_begin_write.3: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_source_begin_write.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_67) "Preparing zip_source_begin_write.3" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_source_begin_write.mdoc /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_begin_write.3 + +man/zip_source_buffer.3: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_source_buffer.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_68) "Preparing zip_source_buffer.3" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_source_buffer.mdoc /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_buffer.3 + +man/zip_source_buffer_fragment.3: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_source_buffer_fragment.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_69) "Preparing zip_source_buffer_fragment.3" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_source_buffer_fragment.mdoc /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_buffer_fragment.3 + +man/zip_source_close.3: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_source_close.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_70) "Preparing zip_source_close.3" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_source_close.mdoc /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_close.3 + +man/zip_source_commit_write.3: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_source_commit_write.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_71) "Preparing zip_source_commit_write.3" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_source_commit_write.mdoc /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_commit_write.3 + +man/zip_source_error.3: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_source_error.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_72) "Preparing zip_source_error.3" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_source_error.mdoc /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_error.3 + +man/zip_source_file.3: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_source_file.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_73) "Preparing zip_source_file.3" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_source_file.mdoc /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_file.3 + +man/zip_source_filep.3: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_source_filep.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_74) "Preparing zip_source_filep.3" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_source_filep.mdoc /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_filep.3 + +man/zip_source_free.3: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_source_free.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_75) "Preparing zip_source_free.3" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_source_free.mdoc /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_free.3 + +man/zip_source_function.3: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_source_function.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_76) "Preparing zip_source_function.3" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_source_function.mdoc /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_function.3 + +man/zip_source_is_deleted.3: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_source_is_deleted.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_77) "Preparing zip_source_is_deleted.3" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_source_is_deleted.mdoc /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_is_deleted.3 + +man/zip_source_is_seekable.3: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_source_is_seekable.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_78) "Preparing zip_source_is_seekable.3" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_source_is_seekable.mdoc /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_is_seekable.3 + +man/zip_source_keep.3: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_source_keep.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_79) "Preparing zip_source_keep.3" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_source_keep.mdoc /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_keep.3 + +man/zip_source_layered.3: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_source_layered.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_80) "Preparing zip_source_layered.3" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_source_layered.mdoc /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_layered.3 + +man/zip_source_make_command_bitmap.3: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_source_make_command_bitmap.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_81) "Preparing zip_source_make_command_bitmap.3" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_source_make_command_bitmap.mdoc /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_make_command_bitmap.3 + +man/zip_source_open.3: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_source_open.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_82) "Preparing zip_source_open.3" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_source_open.mdoc /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_open.3 + +man/zip_source_read.3: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_source_read.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_83) "Preparing zip_source_read.3" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_source_read.mdoc /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_read.3 + +man/zip_source_rollback_write.3: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_source_rollback_write.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_84) "Preparing zip_source_rollback_write.3" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_source_rollback_write.mdoc /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_rollback_write.3 + +man/zip_source_seek.3: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_source_seek.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_85) "Preparing zip_source_seek.3" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_source_seek.mdoc /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_seek.3 + +man/zip_source_seek_compute_offset.3: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_source_seek_compute_offset.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_86) "Preparing zip_source_seek_compute_offset.3" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_source_seek_compute_offset.mdoc /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_seek_compute_offset.3 + +man/zip_source_seek_write.3: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_source_seek_write.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_87) "Preparing zip_source_seek_write.3" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_source_seek_write.mdoc /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_seek_write.3 + +man/zip_source_stat.3: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_source_stat.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_88) "Preparing zip_source_stat.3" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_source_stat.mdoc /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_stat.3 + +man/zip_source_tell.3: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_source_tell.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_89) "Preparing zip_source_tell.3" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_source_tell.mdoc /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_tell.3 + +man/zip_source_tell_write.3: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_source_tell_write.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_90) "Preparing zip_source_tell_write.3" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_source_tell_write.mdoc /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_tell_write.3 + +man/zip_source_win32a.3: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_source_win32a.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_91) "Preparing zip_source_win32a.3" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_source_win32a.mdoc /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_win32a.3 + +man/zip_source_win32handle.3: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_source_win32handle.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_92) "Preparing zip_source_win32handle.3" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_source_win32handle.mdoc /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_win32handle.3 + +man/zip_source_win32w.3: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_source_win32w.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_93) "Preparing zip_source_win32w.3" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_source_win32w.mdoc /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_win32w.3 + +man/zip_source_window_create.3: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_source_window_create.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_94) "Preparing zip_source_window_create.3" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_source_window_create.mdoc /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_window_create.3 + +man/zip_source_write.3: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_source_write.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_95) "Preparing zip_source_write.3" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_source_write.mdoc /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_write.3 + +man/zip_source_zip.3: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_source_zip.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_96) "Preparing zip_source_zip.3" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_source_zip.mdoc /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_zip.3 + +man/zip_source_zip_file.3: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_source_zip_file.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_97) "Preparing zip_source_zip_file.3" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_source_zip_file.mdoc /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_zip_file.3 + +man/zip_stat.3: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_stat.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_98) "Preparing zip_stat.3" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_stat.mdoc /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_stat.3 + +man/zip_stat_init.3: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_stat_init.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_99) "Preparing zip_stat_init.3" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_stat_init.mdoc /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_stat_init.3 + +man/zip_unchange.3: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_unchange.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_100) "Preparing zip_unchange.3" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_unchange.mdoc /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_unchange.3 + +man/zip_unchange_all.3: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_unchange_all.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_101) "Preparing zip_unchange_all.3" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_unchange_all.mdoc /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_unchange_all.3 + +man/zip_unchange_archive.3: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_unchange_archive.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_102) "Preparing zip_unchange_archive.3" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_unchange_archive.mdoc /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_unchange_archive.3 + +man/zipcmp.1: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zipcmp.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_103) "Preparing zipcmp.1" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zipcmp.mdoc /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zipcmp.1 + +man/zipmerge.1: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zipmerge.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_104) "Preparing zipmerge.1" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zipmerge.mdoc /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zipmerge.1 + +man/ziptool.1: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/ziptool.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_105) "Preparing ziptool.1" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/ziptool.mdoc /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/ziptool.1 + +man: man/CMakeFiles/man +man: man/ZIP_SOURCE_GET_ARGS.3 +man: man/libzip.3 +man: man/zip_add.3 +man: man/zip_add_dir.3 +man: man/zip_close.3 +man: man/zip_compression_method_supported.3 +man: man/zip_delete.3 +man: man/zip_dir_add.3 +man: man/zip_discard.3 +man: man/zip_encryption_method_supported.3 +man: man/zip_error_clear.3 +man: man/zip_error_code_system.3 +man: man/zip_error_code_zip.3 +man: man/zip_error_fini.3 +man: man/zip_error_get.3 +man: man/zip_error_get_sys_type.3 +man: man/zip_error_init.3 +man: man/zip_error_set.3 +man: man/zip_error_set_from_source.3 +man: man/zip_error_strerror.3 +man: man/zip_error_system_type.3 +man: man/zip_error_to_data.3 +man: man/zip_error_to_str.3 +man: man/zip_errors.3 +man: man/zip_fclose.3 +man: man/zip_fdopen.3 +man: man/zip_file_add.3 +man: man/zip_file_attributes_init.3 +man: man/zip_file_extra_field_delete.3 +man: man/zip_file_extra_field_get.3 +man: man/zip_file_extra_field_set.3 +man: man/zip_file_extra_fields_count.3 +man: man/zip_file_get_comment.3 +man: man/zip_file_get_error.3 +man: man/zip_file_get_external_attributes.3 +man: man/zip_file_rename.3 +man: man/zip_file_set_comment.3 +man: man/zip_file_set_encryption.3 +man: man/zip_file_set_external_attributes.3 +man: man/zip_file_set_mtime.3 +man: man/zip_file_strerror.3 +man: man/zip_fopen.3 +man: man/zip_fopen_encrypted.3 +man: man/zip_fread.3 +man: man/zip_fseek.3 +man: man/zip_ftell.3 +man: man/zip_get_archive_comment.3 +man: man/zip_get_archive_flag.3 +man: man/zip_get_error.3 +man: man/zip_get_file_comment.3 +man: man/zip_get_name.3 +man: man/zip_get_num_entries.3 +man: man/zip_get_num_files.3 +man: man/zip_libzip_version.3 +man: man/zip_name_locate.3 +man: man/zip_open.3 +man: man/zip_register_cancel_callback_with_state.3 +man: man/zip_register_progress_callback.3 +man: man/zip_register_progress_callback_with_state.3 +man: man/zip_rename.3 +man: man/zip_set_archive_comment.3 +man: man/zip_set_archive_flag.3 +man: man/zip_set_default_password.3 +man: man/zip_set_file_comment.3 +man: man/zip_set_file_compression.3 +man: man/zip_source.3 +man: man/zip_source_begin_write.3 +man: man/zip_source_buffer.3 +man: man/zip_source_buffer_fragment.3 +man: man/zip_source_close.3 +man: man/zip_source_commit_write.3 +man: man/zip_source_error.3 +man: man/zip_source_file.3 +man: man/zip_source_filep.3 +man: man/zip_source_free.3 +man: man/zip_source_function.3 +man: man/zip_source_is_deleted.3 +man: man/zip_source_is_seekable.3 +man: man/zip_source_keep.3 +man: man/zip_source_layered.3 +man: man/zip_source_make_command_bitmap.3 +man: man/zip_source_open.3 +man: man/zip_source_read.3 +man: man/zip_source_rollback_write.3 +man: man/zip_source_seek.3 +man: man/zip_source_seek_compute_offset.3 +man: man/zip_source_seek_write.3 +man: man/zip_source_stat.3 +man: man/zip_source_tell.3 +man: man/zip_source_tell_write.3 +man: man/zip_source_win32a.3 +man: man/zip_source_win32handle.3 +man: man/zip_source_win32w.3 +man: man/zip_source_window_create.3 +man: man/zip_source_write.3 +man: man/zip_source_zip.3 +man: man/zip_source_zip_file.3 +man: man/zip_stat.3 +man: man/zip_stat_init.3 +man: man/zip_unchange.3 +man: man/zip_unchange_all.3 +man: man/zip_unchange_archive.3 +man: man/zipcmp.1 +man: man/zipmerge.1 +man: man/ziptool.1 +man: man/CMakeFiles/man.dir/build.make +.PHONY : man + +# Rule to build all files generated by this target. +man/CMakeFiles/man.dir/build: man +.PHONY : man/CMakeFiles/man.dir/build + +man/CMakeFiles/man.dir/clean: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && $(CMAKE_COMMAND) -P CMakeFiles/man.dir/cmake_clean.cmake +.PHONY : man/CMakeFiles/man.dir/clean + +man/CMakeFiles/man.dir/depend: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(CMAKE_COMMAND) -E cmake_depends "Unix Makefiles" "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3" "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/man" "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/CMakeFiles/man.dir/DependInfo.cmake" "--color=$(COLOR)" +.PHONY : man/CMakeFiles/man.dir/depend + diff --git a/thirdparty/libzip-1.11.3/build-emcmake/man/CMakeFiles/man.dir/cmake_clean.cmake b/thirdparty/libzip-1.11.3/build-emcmake/man/CMakeFiles/man.dir/cmake_clean.cmake new file mode 100644 index 0000000..3eab722 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/man/CMakeFiles/man.dir/cmake_clean.cmake @@ -0,0 +1,113 @@ +file(REMOVE_RECURSE + "CMakeFiles/man" + "ZIP_SOURCE_GET_ARGS.3" + "libzip.3" + "zip_add.3" + "zip_add_dir.3" + "zip_close.3" + "zip_compression_method_supported.3" + "zip_delete.3" + "zip_dir_add.3" + "zip_discard.3" + "zip_encryption_method_supported.3" + "zip_error_clear.3" + "zip_error_code_system.3" + "zip_error_code_zip.3" + "zip_error_fini.3" + "zip_error_get.3" + "zip_error_get_sys_type.3" + "zip_error_init.3" + "zip_error_set.3" + "zip_error_set_from_source.3" + "zip_error_strerror.3" + "zip_error_system_type.3" + "zip_error_to_data.3" + "zip_error_to_str.3" + "zip_errors.3" + "zip_fclose.3" + "zip_fdopen.3" + "zip_file_add.3" + "zip_file_attributes_init.3" + "zip_file_extra_field_delete.3" + "zip_file_extra_field_get.3" + "zip_file_extra_field_set.3" + "zip_file_extra_fields_count.3" + "zip_file_get_comment.3" + "zip_file_get_error.3" + "zip_file_get_external_attributes.3" + "zip_file_rename.3" + "zip_file_set_comment.3" + "zip_file_set_encryption.3" + "zip_file_set_external_attributes.3" + "zip_file_set_mtime.3" + "zip_file_strerror.3" + "zip_fopen.3" + "zip_fopen_encrypted.3" + "zip_fread.3" + "zip_fseek.3" + "zip_ftell.3" + "zip_get_archive_comment.3" + "zip_get_archive_flag.3" + "zip_get_error.3" + "zip_get_file_comment.3" + "zip_get_name.3" + "zip_get_num_entries.3" + "zip_get_num_files.3" + "zip_libzip_version.3" + "zip_name_locate.3" + "zip_open.3" + "zip_register_cancel_callback_with_state.3" + "zip_register_progress_callback.3" + "zip_register_progress_callback_with_state.3" + "zip_rename.3" + "zip_set_archive_comment.3" + "zip_set_archive_flag.3" + "zip_set_default_password.3" + "zip_set_file_comment.3" + "zip_set_file_compression.3" + "zip_source.3" + "zip_source_begin_write.3" + "zip_source_buffer.3" + "zip_source_buffer_fragment.3" + "zip_source_close.3" + "zip_source_commit_write.3" + "zip_source_error.3" + "zip_source_file.3" + "zip_source_filep.3" + "zip_source_free.3" + "zip_source_function.3" + "zip_source_is_deleted.3" + "zip_source_is_seekable.3" + "zip_source_keep.3" + "zip_source_layered.3" + "zip_source_make_command_bitmap.3" + "zip_source_open.3" + "zip_source_read.3" + "zip_source_rollback_write.3" + "zip_source_seek.3" + "zip_source_seek_compute_offset.3" + "zip_source_seek_write.3" + "zip_source_stat.3" + "zip_source_tell.3" + "zip_source_tell_write.3" + "zip_source_win32a.3" + "zip_source_win32handle.3" + "zip_source_win32w.3" + "zip_source_window_create.3" + "zip_source_write.3" + "zip_source_zip.3" + "zip_source_zip_file.3" + "zip_stat.3" + "zip_stat_init.3" + "zip_unchange.3" + "zip_unchange_all.3" + "zip_unchange_archive.3" + "zipcmp.1" + "zipmerge.1" + "ziptool.1" +) + +# Per-language clean rules from dependency scanning. +foreach(lang ) + include(CMakeFiles/man.dir/cmake_clean_${lang}.cmake OPTIONAL) +endforeach() diff --git a/thirdparty/libzip-1.11.3/build-emcmake/man/CMakeFiles/man.dir/compiler_depend.make b/thirdparty/libzip-1.11.3/build-emcmake/man/CMakeFiles/man.dir/compiler_depend.make new file mode 100644 index 0000000..bd58c46 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/man/CMakeFiles/man.dir/compiler_depend.make @@ -0,0 +1,2 @@ +# Empty custom commands generated dependencies file for man. +# This may be replaced when dependencies are built. diff --git a/thirdparty/libzip-1.11.3/build-emcmake/man/CMakeFiles/man.dir/compiler_depend.ts b/thirdparty/libzip-1.11.3/build-emcmake/man/CMakeFiles/man.dir/compiler_depend.ts new file mode 100644 index 0000000..b61e3b0 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/man/CMakeFiles/man.dir/compiler_depend.ts @@ -0,0 +1,2 @@ +# CMAKE generated file: DO NOT EDIT! +# Timestamp file for custom commands dependencies management for man. diff --git a/thirdparty/libzip-1.11.3/build-emcmake/man/CMakeFiles/man.dir/progress.make b/thirdparty/libzip-1.11.3/build-emcmake/man/CMakeFiles/man.dir/progress.make new file mode 100644 index 0000000..832c34c --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/man/CMakeFiles/man.dir/progress.make @@ -0,0 +1,106 @@ +CMAKE_PROGRESS_1 = +CMAKE_PROGRESS_2 = +CMAKE_PROGRESS_3 = +CMAKE_PROGRESS_4 = 2 +CMAKE_PROGRESS_5 = +CMAKE_PROGRESS_6 = +CMAKE_PROGRESS_7 = +CMAKE_PROGRESS_8 = 3 +CMAKE_PROGRESS_9 = +CMAKE_PROGRESS_10 = +CMAKE_PROGRESS_11 = +CMAKE_PROGRESS_12 = +CMAKE_PROGRESS_13 = 4 +CMAKE_PROGRESS_14 = +CMAKE_PROGRESS_15 = +CMAKE_PROGRESS_16 = +CMAKE_PROGRESS_17 = 5 +CMAKE_PROGRESS_18 = +CMAKE_PROGRESS_19 = +CMAKE_PROGRESS_20 = +CMAKE_PROGRESS_21 = +CMAKE_PROGRESS_22 = 6 +CMAKE_PROGRESS_23 = +CMAKE_PROGRESS_24 = +CMAKE_PROGRESS_25 = +CMAKE_PROGRESS_26 = 7 +CMAKE_PROGRESS_27 = +CMAKE_PROGRESS_28 = +CMAKE_PROGRESS_29 = +CMAKE_PROGRESS_30 = +CMAKE_PROGRESS_31 = 8 +CMAKE_PROGRESS_32 = +CMAKE_PROGRESS_33 = +CMAKE_PROGRESS_34 = +CMAKE_PROGRESS_35 = 9 +CMAKE_PROGRESS_36 = +CMAKE_PROGRESS_37 = +CMAKE_PROGRESS_38 = +CMAKE_PROGRESS_39 = +CMAKE_PROGRESS_40 = 10 +CMAKE_PROGRESS_41 = +CMAKE_PROGRESS_42 = +CMAKE_PROGRESS_43 = +CMAKE_PROGRESS_44 = +CMAKE_PROGRESS_45 = 11 +CMAKE_PROGRESS_46 = +CMAKE_PROGRESS_47 = +CMAKE_PROGRESS_48 = +CMAKE_PROGRESS_49 = 12 +CMAKE_PROGRESS_50 = +CMAKE_PROGRESS_51 = +CMAKE_PROGRESS_52 = +CMAKE_PROGRESS_53 = +CMAKE_PROGRESS_54 = 13 +CMAKE_PROGRESS_55 = +CMAKE_PROGRESS_56 = +CMAKE_PROGRESS_57 = +CMAKE_PROGRESS_58 = 14 +CMAKE_PROGRESS_59 = +CMAKE_PROGRESS_60 = +CMAKE_PROGRESS_61 = +CMAKE_PROGRESS_62 = +CMAKE_PROGRESS_63 = 15 +CMAKE_PROGRESS_64 = +CMAKE_PROGRESS_65 = +CMAKE_PROGRESS_66 = +CMAKE_PROGRESS_67 = 16 +CMAKE_PROGRESS_68 = +CMAKE_PROGRESS_69 = +CMAKE_PROGRESS_70 = +CMAKE_PROGRESS_71 = +CMAKE_PROGRESS_72 = 17 +CMAKE_PROGRESS_73 = +CMAKE_PROGRESS_74 = +CMAKE_PROGRESS_75 = +CMAKE_PROGRESS_76 = 18 +CMAKE_PROGRESS_77 = +CMAKE_PROGRESS_78 = +CMAKE_PROGRESS_79 = +CMAKE_PROGRESS_80 = +CMAKE_PROGRESS_81 = 19 +CMAKE_PROGRESS_82 = +CMAKE_PROGRESS_83 = +CMAKE_PROGRESS_84 = +CMAKE_PROGRESS_85 = 20 +CMAKE_PROGRESS_86 = +CMAKE_PROGRESS_87 = +CMAKE_PROGRESS_88 = +CMAKE_PROGRESS_89 = +CMAKE_PROGRESS_90 = 21 +CMAKE_PROGRESS_91 = +CMAKE_PROGRESS_92 = +CMAKE_PROGRESS_93 = +CMAKE_PROGRESS_94 = +CMAKE_PROGRESS_95 = 22 +CMAKE_PROGRESS_96 = +CMAKE_PROGRESS_97 = +CMAKE_PROGRESS_98 = +CMAKE_PROGRESS_99 = 23 +CMAKE_PROGRESS_100 = +CMAKE_PROGRESS_101 = +CMAKE_PROGRESS_102 = +CMAKE_PROGRESS_103 = +CMAKE_PROGRESS_104 = 24 +CMAKE_PROGRESS_105 = + diff --git a/thirdparty/libzip-1.11.3/build-emcmake/man/CMakeFiles/progress.marks b/thirdparty/libzip-1.11.3/build-emcmake/man/CMakeFiles/progress.marks new file mode 100644 index 0000000..4099407 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/man/CMakeFiles/progress.marks @@ -0,0 +1 @@ +23 diff --git a/thirdparty/libzip-1.11.3/build-emcmake/man/CMakeFiles/update-html.dir/DependInfo.cmake b/thirdparty/libzip-1.11.3/build-emcmake/man/CMakeFiles/update-html.dir/DependInfo.cmake new file mode 100644 index 0000000..29b95a5 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/man/CMakeFiles/update-html.dir/DependInfo.cmake @@ -0,0 +1,22 @@ + +# Consider dependencies only in project. +set(CMAKE_DEPENDS_IN_PROJECT_ONLY OFF) + +# The set of languages for which implicit dependencies are needed: +set(CMAKE_DEPENDS_LANGUAGES + ) + +# The set of dependency files which are needed: +set(CMAKE_DEPENDS_DEPENDENCY_FILES + ) + +# Targets to which this target links which contain Fortran sources. +set(CMAKE_Fortran_TARGET_LINKED_INFO_FILES + ) + +# Targets to which this target links which contain Fortran sources. +set(CMAKE_Fortran_TARGET_FORWARD_LINKED_INFO_FILES + ) + +# Fortran module output directory. +set(CMAKE_Fortran_TARGET_MODULE_DIR "") diff --git a/thirdparty/libzip-1.11.3/build-emcmake/man/CMakeFiles/update-html.dir/build.make b/thirdparty/libzip-1.11.3/build-emcmake/man/CMakeFiles/update-html.dir/build.make new file mode 100644 index 0000000..a244951 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/man/CMakeFiles/update-html.dir/build.make @@ -0,0 +1,820 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.28 + +# Delete rule output on recipe failure. +.DELETE_ON_ERROR: + +#============================================================================= +# Special targets provided by cmake. + +# Disable implicit rules so canonical targets will work. +.SUFFIXES: + +# Disable VCS-based implicit rules. +% : %,v + +# Disable VCS-based implicit rules. +% : RCS/% + +# Disable VCS-based implicit rules. +% : RCS/%,v + +# Disable VCS-based implicit rules. +% : SCCS/s.% + +# Disable VCS-based implicit rules. +% : s.% + +.SUFFIXES: .hpux_make_needs_suffix_list + +# Command-line flag to silence nested $(MAKE). +$(VERBOSE)MAKESILENT = -s + +#Suppress display of executed commands. +$(VERBOSE).SILENT: + +# A target that is always out of date. +cmake_force: +.PHONY : cmake_force + +#============================================================================= +# Set environment variables for the build. + +# The shell in which to execute make rules. +SHELL = /bin/sh + +# The CMake executable. +CMAKE_COMMAND = /usr/bin/cmake + +# The command to remove a file. +RM = /usr/bin/cmake -E rm -f + +# Escaping for special characters. +EQUALS = = + +# The top-level source directory on which CMake was run. +CMAKE_SOURCE_DIR = "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3" + +# The top-level build directory on which CMake was run. +CMAKE_BINARY_DIR = "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" + +# Utility rule file for update-html. + +# Include any custom commands dependencies for this target. +include man/CMakeFiles/update-html.dir/compiler_depend.make + +# Include the progress variables for this target. +include man/CMakeFiles/update-html.dir/progress.make + +man/CMakeFiles/update-html: man/ZIP_SOURCE_GET_ARGS.html +man/CMakeFiles/update-html: man/libzip.html +man/CMakeFiles/update-html: man/zip_add.html +man/CMakeFiles/update-html: man/zip_add_dir.html +man/CMakeFiles/update-html: man/zip_close.html +man/CMakeFiles/update-html: man/zip_compression_method_supported.html +man/CMakeFiles/update-html: man/zip_delete.html +man/CMakeFiles/update-html: man/zip_dir_add.html +man/CMakeFiles/update-html: man/zip_discard.html +man/CMakeFiles/update-html: man/zip_encryption_method_supported.html +man/CMakeFiles/update-html: man/zip_error_clear.html +man/CMakeFiles/update-html: man/zip_error_code_system.html +man/CMakeFiles/update-html: man/zip_error_code_zip.html +man/CMakeFiles/update-html: man/zip_error_fini.html +man/CMakeFiles/update-html: man/zip_error_get.html +man/CMakeFiles/update-html: man/zip_error_get_sys_type.html +man/CMakeFiles/update-html: man/zip_error_init.html +man/CMakeFiles/update-html: man/zip_error_set.html +man/CMakeFiles/update-html: man/zip_error_set_from_source.html +man/CMakeFiles/update-html: man/zip_error_strerror.html +man/CMakeFiles/update-html: man/zip_error_system_type.html +man/CMakeFiles/update-html: man/zip_error_to_data.html +man/CMakeFiles/update-html: man/zip_error_to_str.html +man/CMakeFiles/update-html: man/zip_errors.html +man/CMakeFiles/update-html: man/zip_fclose.html +man/CMakeFiles/update-html: man/zip_fdopen.html +man/CMakeFiles/update-html: man/zip_file_add.html +man/CMakeFiles/update-html: man/zip_file_attributes_init.html +man/CMakeFiles/update-html: man/zip_file_extra_field_delete.html +man/CMakeFiles/update-html: man/zip_file_extra_field_get.html +man/CMakeFiles/update-html: man/zip_file_extra_field_set.html +man/CMakeFiles/update-html: man/zip_file_extra_fields_count.html +man/CMakeFiles/update-html: man/zip_file_get_comment.html +man/CMakeFiles/update-html: man/zip_file_get_error.html +man/CMakeFiles/update-html: man/zip_file_get_external_attributes.html +man/CMakeFiles/update-html: man/zip_file_rename.html +man/CMakeFiles/update-html: man/zip_file_set_comment.html +man/CMakeFiles/update-html: man/zip_file_set_encryption.html +man/CMakeFiles/update-html: man/zip_file_set_external_attributes.html +man/CMakeFiles/update-html: man/zip_file_set_mtime.html +man/CMakeFiles/update-html: man/zip_file_strerror.html +man/CMakeFiles/update-html: man/zip_fopen.html +man/CMakeFiles/update-html: man/zip_fopen_encrypted.html +man/CMakeFiles/update-html: man/zip_fread.html +man/CMakeFiles/update-html: man/zip_fseek.html +man/CMakeFiles/update-html: man/zip_ftell.html +man/CMakeFiles/update-html: man/zip_get_archive_comment.html +man/CMakeFiles/update-html: man/zip_get_archive_flag.html +man/CMakeFiles/update-html: man/zip_get_error.html +man/CMakeFiles/update-html: man/zip_get_file_comment.html +man/CMakeFiles/update-html: man/zip_get_name.html +man/CMakeFiles/update-html: man/zip_get_num_entries.html +man/CMakeFiles/update-html: man/zip_get_num_files.html +man/CMakeFiles/update-html: man/zip_libzip_version.html +man/CMakeFiles/update-html: man/zip_name_locate.html +man/CMakeFiles/update-html: man/zip_open.html +man/CMakeFiles/update-html: man/zip_register_cancel_callback_with_state.html +man/CMakeFiles/update-html: man/zip_register_progress_callback.html +man/CMakeFiles/update-html: man/zip_register_progress_callback_with_state.html +man/CMakeFiles/update-html: man/zip_rename.html +man/CMakeFiles/update-html: man/zip_set_archive_comment.html +man/CMakeFiles/update-html: man/zip_set_archive_flag.html +man/CMakeFiles/update-html: man/zip_set_default_password.html +man/CMakeFiles/update-html: man/zip_set_file_comment.html +man/CMakeFiles/update-html: man/zip_set_file_compression.html +man/CMakeFiles/update-html: man/zip_source.html +man/CMakeFiles/update-html: man/zip_source_begin_write.html +man/CMakeFiles/update-html: man/zip_source_buffer.html +man/CMakeFiles/update-html: man/zip_source_buffer_fragment.html +man/CMakeFiles/update-html: man/zip_source_close.html +man/CMakeFiles/update-html: man/zip_source_commit_write.html +man/CMakeFiles/update-html: man/zip_source_error.html +man/CMakeFiles/update-html: man/zip_source_file.html +man/CMakeFiles/update-html: man/zip_source_filep.html +man/CMakeFiles/update-html: man/zip_source_free.html +man/CMakeFiles/update-html: man/zip_source_function.html +man/CMakeFiles/update-html: man/zip_source_is_deleted.html +man/CMakeFiles/update-html: man/zip_source_is_seekable.html +man/CMakeFiles/update-html: man/zip_source_layered.html +man/CMakeFiles/update-html: man/zip_source_keep.html +man/CMakeFiles/update-html: man/zip_source_make_command_bitmap.html +man/CMakeFiles/update-html: man/zip_source_open.html +man/CMakeFiles/update-html: man/zip_source_read.html +man/CMakeFiles/update-html: man/zip_source_rollback_write.html +man/CMakeFiles/update-html: man/zip_source_seek.html +man/CMakeFiles/update-html: man/zip_source_seek_compute_offset.html +man/CMakeFiles/update-html: man/zip_source_seek_write.html +man/CMakeFiles/update-html: man/zip_source_stat.html +man/CMakeFiles/update-html: man/zip_source_tell.html +man/CMakeFiles/update-html: man/zip_source_tell_write.html +man/CMakeFiles/update-html: man/zip_source_win32a.html +man/CMakeFiles/update-html: man/zip_source_win32handle.html +man/CMakeFiles/update-html: man/zip_source_win32w.html +man/CMakeFiles/update-html: man/zip_source_window_create.html +man/CMakeFiles/update-html: man/zip_source_write.html +man/CMakeFiles/update-html: man/zip_source_zip.html +man/CMakeFiles/update-html: man/zip_source_zip_file.html +man/CMakeFiles/update-html: man/zip_stat.html +man/CMakeFiles/update-html: man/zip_stat_init.html +man/CMakeFiles/update-html: man/zip_unchange.html +man/CMakeFiles/update-html: man/zip_unchange_all.html +man/CMakeFiles/update-html: man/zip_unchange_archive.html +man/CMakeFiles/update-html: man/zipcmp.html +man/CMakeFiles/update-html: man/zipmerge.html +man/CMakeFiles/update-html: man/ziptool.html + +man/ZIP_SOURCE_GET_ARGS.html: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/ZIP_SOURCE_GET_ARGS.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_1) "Generating ZIP_SOURCE_GET_ARGS.html" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -DIN=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/ZIP_SOURCE_GET_ARGS.mdoc -DOUT=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/ZIP_SOURCE_GET_ARGS.html -P /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/update-html.cmake + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/ZIP_SOURCE_GET_ARGS.html /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/ZIP_SOURCE_GET_ARGS.html + +man/libzip.html: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/libzip.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_2) "Generating libzip.html" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -DIN=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/libzip.mdoc -DOUT=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/libzip.html -P /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/update-html.cmake + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/libzip.html /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/libzip.html + +man/zip_add.html: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_add.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_3) "Generating zip_add.html" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -DIN=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_add.mdoc -DOUT=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_add.html -P /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/update-html.cmake + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_add.html /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_add.html + +man/zip_add_dir.html: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_add_dir.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_4) "Generating zip_add_dir.html" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -DIN=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_add_dir.mdoc -DOUT=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_add_dir.html -P /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/update-html.cmake + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_add_dir.html /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_add_dir.html + +man/zip_close.html: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_close.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_5) "Generating zip_close.html" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -DIN=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_close.mdoc -DOUT=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_close.html -P /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/update-html.cmake + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_close.html /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_close.html + +man/zip_compression_method_supported.html: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_compression_method_supported.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_6) "Generating zip_compression_method_supported.html" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -DIN=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_compression_method_supported.mdoc -DOUT=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_compression_method_supported.html -P /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/update-html.cmake + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_compression_method_supported.html /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_compression_method_supported.html + +man/zip_delete.html: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_delete.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_7) "Generating zip_delete.html" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -DIN=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_delete.mdoc -DOUT=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_delete.html -P /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/update-html.cmake + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_delete.html /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_delete.html + +man/zip_dir_add.html: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_dir_add.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_8) "Generating zip_dir_add.html" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -DIN=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_dir_add.mdoc -DOUT=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_dir_add.html -P /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/update-html.cmake + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_dir_add.html /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_dir_add.html + +man/zip_discard.html: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_discard.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_9) "Generating zip_discard.html" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -DIN=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_discard.mdoc -DOUT=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_discard.html -P /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/update-html.cmake + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_discard.html /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_discard.html + +man/zip_encryption_method_supported.html: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_encryption_method_supported.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_10) "Generating zip_encryption_method_supported.html" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -DIN=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_encryption_method_supported.mdoc -DOUT=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_encryption_method_supported.html -P /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/update-html.cmake + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_encryption_method_supported.html /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_encryption_method_supported.html + +man/zip_error_clear.html: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_error_clear.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_11) "Generating zip_error_clear.html" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -DIN=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_error_clear.mdoc -DOUT=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_error_clear.html -P /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/update-html.cmake + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_error_clear.html /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_error_clear.html + +man/zip_error_code_system.html: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_error_code_system.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_12) "Generating zip_error_code_system.html" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -DIN=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_error_code_system.mdoc -DOUT=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_error_code_system.html -P /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/update-html.cmake + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_error_code_system.html /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_error_code_system.html + +man/zip_error_code_zip.html: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_error_code_zip.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_13) "Generating zip_error_code_zip.html" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -DIN=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_error_code_zip.mdoc -DOUT=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_error_code_zip.html -P /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/update-html.cmake + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_error_code_zip.html /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_error_code_zip.html + +man/zip_error_fini.html: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_error_fini.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_14) "Generating zip_error_fini.html" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -DIN=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_error_fini.mdoc -DOUT=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_error_fini.html -P /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/update-html.cmake + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_error_fini.html /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_error_fini.html + +man/zip_error_get.html: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_error_get.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_15) "Generating zip_error_get.html" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -DIN=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_error_get.mdoc -DOUT=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_error_get.html -P /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/update-html.cmake + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_error_get.html /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_error_get.html + +man/zip_error_get_sys_type.html: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_error_get_sys_type.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_16) "Generating zip_error_get_sys_type.html" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -DIN=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_error_get_sys_type.mdoc -DOUT=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_error_get_sys_type.html -P /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/update-html.cmake + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_error_get_sys_type.html /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_error_get_sys_type.html + +man/zip_error_init.html: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_error_init.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_17) "Generating zip_error_init.html" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -DIN=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_error_init.mdoc -DOUT=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_error_init.html -P /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/update-html.cmake + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_error_init.html /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_error_init.html + +man/zip_error_set.html: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_error_set.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_18) "Generating zip_error_set.html" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -DIN=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_error_set.mdoc -DOUT=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_error_set.html -P /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/update-html.cmake + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_error_set.html /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_error_set.html + +man/zip_error_set_from_source.html: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_error_set_from_source.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_19) "Generating zip_error_set_from_source.html" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -DIN=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_error_set_from_source.mdoc -DOUT=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_error_set_from_source.html -P /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/update-html.cmake + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_error_set_from_source.html /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_error_set_from_source.html + +man/zip_error_strerror.html: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_error_strerror.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_20) "Generating zip_error_strerror.html" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -DIN=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_error_strerror.mdoc -DOUT=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_error_strerror.html -P /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/update-html.cmake + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_error_strerror.html /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_error_strerror.html + +man/zip_error_system_type.html: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_error_system_type.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_21) "Generating zip_error_system_type.html" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -DIN=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_error_system_type.mdoc -DOUT=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_error_system_type.html -P /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/update-html.cmake + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_error_system_type.html /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_error_system_type.html + +man/zip_error_to_data.html: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_error_to_data.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_22) "Generating zip_error_to_data.html" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -DIN=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_error_to_data.mdoc -DOUT=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_error_to_data.html -P /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/update-html.cmake + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_error_to_data.html /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_error_to_data.html + +man/zip_error_to_str.html: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_error_to_str.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_23) "Generating zip_error_to_str.html" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -DIN=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_error_to_str.mdoc -DOUT=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_error_to_str.html -P /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/update-html.cmake + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_error_to_str.html /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_error_to_str.html + +man/zip_errors.html: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_errors.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_24) "Generating zip_errors.html" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -DIN=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_errors.mdoc -DOUT=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_errors.html -P /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/update-html.cmake + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_errors.html /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_errors.html + +man/zip_fclose.html: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_fclose.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_25) "Generating zip_fclose.html" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -DIN=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_fclose.mdoc -DOUT=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_fclose.html -P /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/update-html.cmake + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_fclose.html /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_fclose.html + +man/zip_fdopen.html: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_fdopen.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_26) "Generating zip_fdopen.html" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -DIN=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_fdopen.mdoc -DOUT=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_fdopen.html -P /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/update-html.cmake + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_fdopen.html /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_fdopen.html + +man/zip_file_add.html: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_file_add.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_27) "Generating zip_file_add.html" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -DIN=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_file_add.mdoc -DOUT=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_file_add.html -P /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/update-html.cmake + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_file_add.html /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_file_add.html + +man/zip_file_attributes_init.html: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_file_attributes_init.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_28) "Generating zip_file_attributes_init.html" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -DIN=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_file_attributes_init.mdoc -DOUT=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_file_attributes_init.html -P /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/update-html.cmake + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_file_attributes_init.html /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_file_attributes_init.html + +man/zip_file_extra_field_delete.html: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_file_extra_field_delete.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_29) "Generating zip_file_extra_field_delete.html" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -DIN=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_file_extra_field_delete.mdoc -DOUT=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_file_extra_field_delete.html -P /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/update-html.cmake + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_file_extra_field_delete.html /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_file_extra_field_delete.html + +man/zip_file_extra_field_get.html: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_file_extra_field_get.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_30) "Generating zip_file_extra_field_get.html" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -DIN=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_file_extra_field_get.mdoc -DOUT=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_file_extra_field_get.html -P /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/update-html.cmake + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_file_extra_field_get.html /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_file_extra_field_get.html + +man/zip_file_extra_field_set.html: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_file_extra_field_set.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_31) "Generating zip_file_extra_field_set.html" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -DIN=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_file_extra_field_set.mdoc -DOUT=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_file_extra_field_set.html -P /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/update-html.cmake + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_file_extra_field_set.html /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_file_extra_field_set.html + +man/zip_file_extra_fields_count.html: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_file_extra_fields_count.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_32) "Generating zip_file_extra_fields_count.html" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -DIN=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_file_extra_fields_count.mdoc -DOUT=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_file_extra_fields_count.html -P /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/update-html.cmake + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_file_extra_fields_count.html /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_file_extra_fields_count.html + +man/zip_file_get_comment.html: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_file_get_comment.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_33) "Generating zip_file_get_comment.html" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -DIN=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_file_get_comment.mdoc -DOUT=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_file_get_comment.html -P /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/update-html.cmake + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_file_get_comment.html /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_file_get_comment.html + +man/zip_file_get_error.html: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_file_get_error.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_34) "Generating zip_file_get_error.html" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -DIN=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_file_get_error.mdoc -DOUT=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_file_get_error.html -P /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/update-html.cmake + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_file_get_error.html /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_file_get_error.html + +man/zip_file_get_external_attributes.html: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_file_get_external_attributes.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_35) "Generating zip_file_get_external_attributes.html" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -DIN=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_file_get_external_attributes.mdoc -DOUT=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_file_get_external_attributes.html -P /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/update-html.cmake + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_file_get_external_attributes.html /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_file_get_external_attributes.html + +man/zip_file_rename.html: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_file_rename.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_36) "Generating zip_file_rename.html" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -DIN=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_file_rename.mdoc -DOUT=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_file_rename.html -P /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/update-html.cmake + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_file_rename.html /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_file_rename.html + +man/zip_file_set_comment.html: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_file_set_comment.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_37) "Generating zip_file_set_comment.html" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -DIN=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_file_set_comment.mdoc -DOUT=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_file_set_comment.html -P /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/update-html.cmake + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_file_set_comment.html /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_file_set_comment.html + +man/zip_file_set_encryption.html: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_file_set_encryption.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_38) "Generating zip_file_set_encryption.html" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -DIN=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_file_set_encryption.mdoc -DOUT=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_file_set_encryption.html -P /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/update-html.cmake + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_file_set_encryption.html /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_file_set_encryption.html + +man/zip_file_set_external_attributes.html: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_file_set_external_attributes.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_39) "Generating zip_file_set_external_attributes.html" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -DIN=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_file_set_external_attributes.mdoc -DOUT=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_file_set_external_attributes.html -P /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/update-html.cmake + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_file_set_external_attributes.html /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_file_set_external_attributes.html + +man/zip_file_set_mtime.html: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_file_set_mtime.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_40) "Generating zip_file_set_mtime.html" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -DIN=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_file_set_mtime.mdoc -DOUT=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_file_set_mtime.html -P /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/update-html.cmake + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_file_set_mtime.html /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_file_set_mtime.html + +man/zip_file_strerror.html: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_file_strerror.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_41) "Generating zip_file_strerror.html" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -DIN=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_file_strerror.mdoc -DOUT=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_file_strerror.html -P /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/update-html.cmake + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_file_strerror.html /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_file_strerror.html + +man/zip_fopen.html: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_fopen.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_42) "Generating zip_fopen.html" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -DIN=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_fopen.mdoc -DOUT=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_fopen.html -P /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/update-html.cmake + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_fopen.html /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_fopen.html + +man/zip_fopen_encrypted.html: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_fopen_encrypted.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_43) "Generating zip_fopen_encrypted.html" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -DIN=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_fopen_encrypted.mdoc -DOUT=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_fopen_encrypted.html -P /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/update-html.cmake + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_fopen_encrypted.html /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_fopen_encrypted.html + +man/zip_fread.html: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_fread.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_44) "Generating zip_fread.html" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -DIN=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_fread.mdoc -DOUT=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_fread.html -P /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/update-html.cmake + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_fread.html /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_fread.html + +man/zip_fseek.html: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_fseek.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_45) "Generating zip_fseek.html" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -DIN=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_fseek.mdoc -DOUT=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_fseek.html -P /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/update-html.cmake + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_fseek.html /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_fseek.html + +man/zip_ftell.html: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_ftell.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_46) "Generating zip_ftell.html" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -DIN=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_ftell.mdoc -DOUT=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_ftell.html -P /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/update-html.cmake + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_ftell.html /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_ftell.html + +man/zip_get_archive_comment.html: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_get_archive_comment.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_47) "Generating zip_get_archive_comment.html" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -DIN=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_get_archive_comment.mdoc -DOUT=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_get_archive_comment.html -P /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/update-html.cmake + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_get_archive_comment.html /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_get_archive_comment.html + +man/zip_get_archive_flag.html: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_get_archive_flag.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_48) "Generating zip_get_archive_flag.html" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -DIN=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_get_archive_flag.mdoc -DOUT=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_get_archive_flag.html -P /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/update-html.cmake + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_get_archive_flag.html /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_get_archive_flag.html + +man/zip_get_error.html: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_get_error.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_49) "Generating zip_get_error.html" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -DIN=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_get_error.mdoc -DOUT=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_get_error.html -P /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/update-html.cmake + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_get_error.html /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_get_error.html + +man/zip_get_file_comment.html: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_get_file_comment.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_50) "Generating zip_get_file_comment.html" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -DIN=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_get_file_comment.mdoc -DOUT=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_get_file_comment.html -P /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/update-html.cmake + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_get_file_comment.html /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_get_file_comment.html + +man/zip_get_name.html: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_get_name.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_51) "Generating zip_get_name.html" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -DIN=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_get_name.mdoc -DOUT=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_get_name.html -P /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/update-html.cmake + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_get_name.html /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_get_name.html + +man/zip_get_num_entries.html: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_get_num_entries.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_52) "Generating zip_get_num_entries.html" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -DIN=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_get_num_entries.mdoc -DOUT=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_get_num_entries.html -P /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/update-html.cmake + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_get_num_entries.html /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_get_num_entries.html + +man/zip_get_num_files.html: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_get_num_files.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_53) "Generating zip_get_num_files.html" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -DIN=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_get_num_files.mdoc -DOUT=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_get_num_files.html -P /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/update-html.cmake + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_get_num_files.html /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_get_num_files.html + +man/zip_libzip_version.html: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_libzip_version.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_54) "Generating zip_libzip_version.html" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -DIN=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_libzip_version.mdoc -DOUT=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_libzip_version.html -P /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/update-html.cmake + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_libzip_version.html /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_libzip_version.html + +man/zip_name_locate.html: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_name_locate.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_55) "Generating zip_name_locate.html" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -DIN=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_name_locate.mdoc -DOUT=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_name_locate.html -P /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/update-html.cmake + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_name_locate.html /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_name_locate.html + +man/zip_open.html: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_open.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_56) "Generating zip_open.html" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -DIN=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_open.mdoc -DOUT=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_open.html -P /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/update-html.cmake + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_open.html /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_open.html + +man/zip_register_cancel_callback_with_state.html: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_register_cancel_callback_with_state.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_57) "Generating zip_register_cancel_callback_with_state.html" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -DIN=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_register_cancel_callback_with_state.mdoc -DOUT=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_register_cancel_callback_with_state.html -P /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/update-html.cmake + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_register_cancel_callback_with_state.html /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_register_cancel_callback_with_state.html + +man/zip_register_progress_callback.html: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_register_progress_callback.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_58) "Generating zip_register_progress_callback.html" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -DIN=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_register_progress_callback.mdoc -DOUT=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_register_progress_callback.html -P /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/update-html.cmake + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_register_progress_callback.html /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_register_progress_callback.html + +man/zip_register_progress_callback_with_state.html: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_register_progress_callback_with_state.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_59) "Generating zip_register_progress_callback_with_state.html" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -DIN=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_register_progress_callback_with_state.mdoc -DOUT=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_register_progress_callback_with_state.html -P /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/update-html.cmake + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_register_progress_callback_with_state.html /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_register_progress_callback_with_state.html + +man/zip_rename.html: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_rename.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_60) "Generating zip_rename.html" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -DIN=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_rename.mdoc -DOUT=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_rename.html -P /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/update-html.cmake + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_rename.html /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_rename.html + +man/zip_set_archive_comment.html: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_set_archive_comment.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_61) "Generating zip_set_archive_comment.html" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -DIN=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_set_archive_comment.mdoc -DOUT=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_set_archive_comment.html -P /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/update-html.cmake + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_set_archive_comment.html /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_set_archive_comment.html + +man/zip_set_archive_flag.html: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_set_archive_flag.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_62) "Generating zip_set_archive_flag.html" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -DIN=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_set_archive_flag.mdoc -DOUT=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_set_archive_flag.html -P /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/update-html.cmake + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_set_archive_flag.html /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_set_archive_flag.html + +man/zip_set_default_password.html: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_set_default_password.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_63) "Generating zip_set_default_password.html" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -DIN=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_set_default_password.mdoc -DOUT=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_set_default_password.html -P /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/update-html.cmake + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_set_default_password.html /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_set_default_password.html + +man/zip_set_file_comment.html: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_set_file_comment.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_64) "Generating zip_set_file_comment.html" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -DIN=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_set_file_comment.mdoc -DOUT=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_set_file_comment.html -P /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/update-html.cmake + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_set_file_comment.html /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_set_file_comment.html + +man/zip_set_file_compression.html: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_set_file_compression.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_65) "Generating zip_set_file_compression.html" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -DIN=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_set_file_compression.mdoc -DOUT=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_set_file_compression.html -P /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/update-html.cmake + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_set_file_compression.html /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_set_file_compression.html + +man/zip_source.html: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_source.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_66) "Generating zip_source.html" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -DIN=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_source.mdoc -DOUT=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source.html -P /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/update-html.cmake + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source.html /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_source.html + +man/zip_source_begin_write.html: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_source_begin_write.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_67) "Generating zip_source_begin_write.html" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -DIN=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_source_begin_write.mdoc -DOUT=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_begin_write.html -P /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/update-html.cmake + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_begin_write.html /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_source_begin_write.html + +man/zip_source_buffer.html: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_source_buffer.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_68) "Generating zip_source_buffer.html" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -DIN=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_source_buffer.mdoc -DOUT=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_buffer.html -P /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/update-html.cmake + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_buffer.html /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_source_buffer.html + +man/zip_source_buffer_fragment.html: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_source_buffer_fragment.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_69) "Generating zip_source_buffer_fragment.html" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -DIN=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_source_buffer_fragment.mdoc -DOUT=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_buffer_fragment.html -P /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/update-html.cmake + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_buffer_fragment.html /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_source_buffer_fragment.html + +man/zip_source_close.html: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_source_close.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_70) "Generating zip_source_close.html" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -DIN=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_source_close.mdoc -DOUT=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_close.html -P /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/update-html.cmake + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_close.html /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_source_close.html + +man/zip_source_commit_write.html: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_source_commit_write.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_71) "Generating zip_source_commit_write.html" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -DIN=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_source_commit_write.mdoc -DOUT=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_commit_write.html -P /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/update-html.cmake + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_commit_write.html /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_source_commit_write.html + +man/zip_source_error.html: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_source_error.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_72) "Generating zip_source_error.html" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -DIN=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_source_error.mdoc -DOUT=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_error.html -P /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/update-html.cmake + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_error.html /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_source_error.html + +man/zip_source_file.html: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_source_file.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_73) "Generating zip_source_file.html" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -DIN=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_source_file.mdoc -DOUT=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_file.html -P /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/update-html.cmake + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_file.html /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_source_file.html + +man/zip_source_filep.html: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_source_filep.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_74) "Generating zip_source_filep.html" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -DIN=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_source_filep.mdoc -DOUT=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_filep.html -P /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/update-html.cmake + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_filep.html /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_source_filep.html + +man/zip_source_free.html: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_source_free.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_75) "Generating zip_source_free.html" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -DIN=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_source_free.mdoc -DOUT=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_free.html -P /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/update-html.cmake + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_free.html /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_source_free.html + +man/zip_source_function.html: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_source_function.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_76) "Generating zip_source_function.html" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -DIN=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_source_function.mdoc -DOUT=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_function.html -P /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/update-html.cmake + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_function.html /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_source_function.html + +man/zip_source_is_deleted.html: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_source_is_deleted.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_77) "Generating zip_source_is_deleted.html" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -DIN=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_source_is_deleted.mdoc -DOUT=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_is_deleted.html -P /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/update-html.cmake + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_is_deleted.html /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_source_is_deleted.html + +man/zip_source_is_seekable.html: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_source_is_seekable.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_78) "Generating zip_source_is_seekable.html" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -DIN=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_source_is_seekable.mdoc -DOUT=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_is_seekable.html -P /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/update-html.cmake + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_is_seekable.html /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_source_is_seekable.html + +man/zip_source_keep.html: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_source_keep.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_79) "Generating zip_source_keep.html" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -DIN=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_source_keep.mdoc -DOUT=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_keep.html -P /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/update-html.cmake + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_keep.html /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_source_keep.html + +man/zip_source_layered.html: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_source_layered.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_80) "Generating zip_source_layered.html" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -DIN=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_source_layered.mdoc -DOUT=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_layered.html -P /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/update-html.cmake + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_layered.html /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_source_layered.html + +man/zip_source_make_command_bitmap.html: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_source_make_command_bitmap.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_81) "Generating zip_source_make_command_bitmap.html" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -DIN=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_source_make_command_bitmap.mdoc -DOUT=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_make_command_bitmap.html -P /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/update-html.cmake + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_make_command_bitmap.html /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_source_make_command_bitmap.html + +man/zip_source_open.html: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_source_open.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_82) "Generating zip_source_open.html" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -DIN=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_source_open.mdoc -DOUT=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_open.html -P /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/update-html.cmake + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_open.html /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_source_open.html + +man/zip_source_read.html: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_source_read.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_83) "Generating zip_source_read.html" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -DIN=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_source_read.mdoc -DOUT=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_read.html -P /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/update-html.cmake + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_read.html /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_source_read.html + +man/zip_source_rollback_write.html: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_source_rollback_write.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_84) "Generating zip_source_rollback_write.html" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -DIN=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_source_rollback_write.mdoc -DOUT=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_rollback_write.html -P /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/update-html.cmake + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_rollback_write.html /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_source_rollback_write.html + +man/zip_source_seek.html: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_source_seek.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_85) "Generating zip_source_seek.html" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -DIN=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_source_seek.mdoc -DOUT=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_seek.html -P /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/update-html.cmake + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_seek.html /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_source_seek.html + +man/zip_source_seek_compute_offset.html: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_source_seek_compute_offset.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_86) "Generating zip_source_seek_compute_offset.html" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -DIN=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_source_seek_compute_offset.mdoc -DOUT=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_seek_compute_offset.html -P /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/update-html.cmake + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_seek_compute_offset.html /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_source_seek_compute_offset.html + +man/zip_source_seek_write.html: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_source_seek_write.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_87) "Generating zip_source_seek_write.html" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -DIN=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_source_seek_write.mdoc -DOUT=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_seek_write.html -P /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/update-html.cmake + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_seek_write.html /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_source_seek_write.html + +man/zip_source_stat.html: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_source_stat.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_88) "Generating zip_source_stat.html" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -DIN=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_source_stat.mdoc -DOUT=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_stat.html -P /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/update-html.cmake + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_stat.html /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_source_stat.html + +man/zip_source_tell.html: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_source_tell.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_89) "Generating zip_source_tell.html" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -DIN=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_source_tell.mdoc -DOUT=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_tell.html -P /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/update-html.cmake + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_tell.html /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_source_tell.html + +man/zip_source_tell_write.html: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_source_tell_write.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_90) "Generating zip_source_tell_write.html" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -DIN=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_source_tell_write.mdoc -DOUT=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_tell_write.html -P /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/update-html.cmake + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_tell_write.html /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_source_tell_write.html + +man/zip_source_win32a.html: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_source_win32a.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_91) "Generating zip_source_win32a.html" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -DIN=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_source_win32a.mdoc -DOUT=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_win32a.html -P /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/update-html.cmake + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_win32a.html /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_source_win32a.html + +man/zip_source_win32handle.html: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_source_win32handle.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_92) "Generating zip_source_win32handle.html" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -DIN=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_source_win32handle.mdoc -DOUT=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_win32handle.html -P /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/update-html.cmake + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_win32handle.html /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_source_win32handle.html + +man/zip_source_win32w.html: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_source_win32w.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_93) "Generating zip_source_win32w.html" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -DIN=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_source_win32w.mdoc -DOUT=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_win32w.html -P /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/update-html.cmake + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_win32w.html /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_source_win32w.html + +man/zip_source_window_create.html: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_source_window_create.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_94) "Generating zip_source_window_create.html" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -DIN=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_source_window_create.mdoc -DOUT=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_window_create.html -P /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/update-html.cmake + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_window_create.html /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_source_window_create.html + +man/zip_source_write.html: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_source_write.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_95) "Generating zip_source_write.html" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -DIN=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_source_write.mdoc -DOUT=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_write.html -P /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/update-html.cmake + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_write.html /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_source_write.html + +man/zip_source_zip.html: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_source_zip.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_96) "Generating zip_source_zip.html" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -DIN=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_source_zip.mdoc -DOUT=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_zip.html -P /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/update-html.cmake + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_zip.html /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_source_zip.html + +man/zip_source_zip_file.html: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_source_zip_file.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_97) "Generating zip_source_zip_file.html" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -DIN=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_source_zip_file.mdoc -DOUT=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_zip_file.html -P /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/update-html.cmake + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_zip_file.html /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_source_zip_file.html + +man/zip_stat.html: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_stat.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_98) "Generating zip_stat.html" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -DIN=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_stat.mdoc -DOUT=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_stat.html -P /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/update-html.cmake + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_stat.html /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_stat.html + +man/zip_stat_init.html: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_stat_init.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_99) "Generating zip_stat_init.html" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -DIN=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_stat_init.mdoc -DOUT=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_stat_init.html -P /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/update-html.cmake + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_stat_init.html /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_stat_init.html + +man/zip_unchange.html: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_unchange.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_100) "Generating zip_unchange.html" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -DIN=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_unchange.mdoc -DOUT=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_unchange.html -P /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/update-html.cmake + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_unchange.html /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_unchange.html + +man/zip_unchange_all.html: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_unchange_all.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_101) "Generating zip_unchange_all.html" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -DIN=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_unchange_all.mdoc -DOUT=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_unchange_all.html -P /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/update-html.cmake + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_unchange_all.html /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_unchange_all.html + +man/zip_unchange_archive.html: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_unchange_archive.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_102) "Generating zip_unchange_archive.html" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -DIN=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_unchange_archive.mdoc -DOUT=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_unchange_archive.html -P /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/update-html.cmake + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_unchange_archive.html /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_unchange_archive.html + +man/zipcmp.html: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zipcmp.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_103) "Generating zipcmp.html" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -DIN=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zipcmp.mdoc -DOUT=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zipcmp.html -P /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/update-html.cmake + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zipcmp.html /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zipcmp.html + +man/zipmerge.html: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zipmerge.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_104) "Generating zipmerge.html" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -DIN=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zipmerge.mdoc -DOUT=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zipmerge.html -P /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/update-html.cmake + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zipmerge.html /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zipmerge.html + +man/ziptool.html: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/ziptool.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_105) "Generating ziptool.html" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -DIN=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/ziptool.mdoc -DOUT=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/ziptool.html -P /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/update-html.cmake + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/ziptool.html /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/ziptool.html + +update-html: man/CMakeFiles/update-html +update-html: man/ZIP_SOURCE_GET_ARGS.html +update-html: man/libzip.html +update-html: man/zip_add.html +update-html: man/zip_add_dir.html +update-html: man/zip_close.html +update-html: man/zip_compression_method_supported.html +update-html: man/zip_delete.html +update-html: man/zip_dir_add.html +update-html: man/zip_discard.html +update-html: man/zip_encryption_method_supported.html +update-html: man/zip_error_clear.html +update-html: man/zip_error_code_system.html +update-html: man/zip_error_code_zip.html +update-html: man/zip_error_fini.html +update-html: man/zip_error_get.html +update-html: man/zip_error_get_sys_type.html +update-html: man/zip_error_init.html +update-html: man/zip_error_set.html +update-html: man/zip_error_set_from_source.html +update-html: man/zip_error_strerror.html +update-html: man/zip_error_system_type.html +update-html: man/zip_error_to_data.html +update-html: man/zip_error_to_str.html +update-html: man/zip_errors.html +update-html: man/zip_fclose.html +update-html: man/zip_fdopen.html +update-html: man/zip_file_add.html +update-html: man/zip_file_attributes_init.html +update-html: man/zip_file_extra_field_delete.html +update-html: man/zip_file_extra_field_get.html +update-html: man/zip_file_extra_field_set.html +update-html: man/zip_file_extra_fields_count.html +update-html: man/zip_file_get_comment.html +update-html: man/zip_file_get_error.html +update-html: man/zip_file_get_external_attributes.html +update-html: man/zip_file_rename.html +update-html: man/zip_file_set_comment.html +update-html: man/zip_file_set_encryption.html +update-html: man/zip_file_set_external_attributes.html +update-html: man/zip_file_set_mtime.html +update-html: man/zip_file_strerror.html +update-html: man/zip_fopen.html +update-html: man/zip_fopen_encrypted.html +update-html: man/zip_fread.html +update-html: man/zip_fseek.html +update-html: man/zip_ftell.html +update-html: man/zip_get_archive_comment.html +update-html: man/zip_get_archive_flag.html +update-html: man/zip_get_error.html +update-html: man/zip_get_file_comment.html +update-html: man/zip_get_name.html +update-html: man/zip_get_num_entries.html +update-html: man/zip_get_num_files.html +update-html: man/zip_libzip_version.html +update-html: man/zip_name_locate.html +update-html: man/zip_open.html +update-html: man/zip_register_cancel_callback_with_state.html +update-html: man/zip_register_progress_callback.html +update-html: man/zip_register_progress_callback_with_state.html +update-html: man/zip_rename.html +update-html: man/zip_set_archive_comment.html +update-html: man/zip_set_archive_flag.html +update-html: man/zip_set_default_password.html +update-html: man/zip_set_file_comment.html +update-html: man/zip_set_file_compression.html +update-html: man/zip_source.html +update-html: man/zip_source_begin_write.html +update-html: man/zip_source_buffer.html +update-html: man/zip_source_buffer_fragment.html +update-html: man/zip_source_close.html +update-html: man/zip_source_commit_write.html +update-html: man/zip_source_error.html +update-html: man/zip_source_file.html +update-html: man/zip_source_filep.html +update-html: man/zip_source_free.html +update-html: man/zip_source_function.html +update-html: man/zip_source_is_deleted.html +update-html: man/zip_source_is_seekable.html +update-html: man/zip_source_keep.html +update-html: man/zip_source_layered.html +update-html: man/zip_source_make_command_bitmap.html +update-html: man/zip_source_open.html +update-html: man/zip_source_read.html +update-html: man/zip_source_rollback_write.html +update-html: man/zip_source_seek.html +update-html: man/zip_source_seek_compute_offset.html +update-html: man/zip_source_seek_write.html +update-html: man/zip_source_stat.html +update-html: man/zip_source_tell.html +update-html: man/zip_source_tell_write.html +update-html: man/zip_source_win32a.html +update-html: man/zip_source_win32handle.html +update-html: man/zip_source_win32w.html +update-html: man/zip_source_window_create.html +update-html: man/zip_source_write.html +update-html: man/zip_source_zip.html +update-html: man/zip_source_zip_file.html +update-html: man/zip_stat.html +update-html: man/zip_stat_init.html +update-html: man/zip_unchange.html +update-html: man/zip_unchange_all.html +update-html: man/zip_unchange_archive.html +update-html: man/zipcmp.html +update-html: man/zipmerge.html +update-html: man/ziptool.html +update-html: man/CMakeFiles/update-html.dir/build.make +.PHONY : update-html + +# Rule to build all files generated by this target. +man/CMakeFiles/update-html.dir/build: update-html +.PHONY : man/CMakeFiles/update-html.dir/build + +man/CMakeFiles/update-html.dir/clean: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && $(CMAKE_COMMAND) -P CMakeFiles/update-html.dir/cmake_clean.cmake +.PHONY : man/CMakeFiles/update-html.dir/clean + +man/CMakeFiles/update-html.dir/depend: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(CMAKE_COMMAND) -E cmake_depends "Unix Makefiles" "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3" "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/man" "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/CMakeFiles/update-html.dir/DependInfo.cmake" "--color=$(COLOR)" +.PHONY : man/CMakeFiles/update-html.dir/depend + diff --git a/thirdparty/libzip-1.11.3/build-emcmake/man/CMakeFiles/update-html.dir/cmake_clean.cmake b/thirdparty/libzip-1.11.3/build-emcmake/man/CMakeFiles/update-html.dir/cmake_clean.cmake new file mode 100644 index 0000000..29f9582 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/man/CMakeFiles/update-html.dir/cmake_clean.cmake @@ -0,0 +1,113 @@ +file(REMOVE_RECURSE + "CMakeFiles/update-html" + "ZIP_SOURCE_GET_ARGS.html" + "libzip.html" + "zip_add.html" + "zip_add_dir.html" + "zip_close.html" + "zip_compression_method_supported.html" + "zip_delete.html" + "zip_dir_add.html" + "zip_discard.html" + "zip_encryption_method_supported.html" + "zip_error_clear.html" + "zip_error_code_system.html" + "zip_error_code_zip.html" + "zip_error_fini.html" + "zip_error_get.html" + "zip_error_get_sys_type.html" + "zip_error_init.html" + "zip_error_set.html" + "zip_error_set_from_source.html" + "zip_error_strerror.html" + "zip_error_system_type.html" + "zip_error_to_data.html" + "zip_error_to_str.html" + "zip_errors.html" + "zip_fclose.html" + "zip_fdopen.html" + "zip_file_add.html" + "zip_file_attributes_init.html" + "zip_file_extra_field_delete.html" + "zip_file_extra_field_get.html" + "zip_file_extra_field_set.html" + "zip_file_extra_fields_count.html" + "zip_file_get_comment.html" + "zip_file_get_error.html" + "zip_file_get_external_attributes.html" + "zip_file_rename.html" + "zip_file_set_comment.html" + "zip_file_set_encryption.html" + "zip_file_set_external_attributes.html" + "zip_file_set_mtime.html" + "zip_file_strerror.html" + "zip_fopen.html" + "zip_fopen_encrypted.html" + "zip_fread.html" + "zip_fseek.html" + "zip_ftell.html" + "zip_get_archive_comment.html" + "zip_get_archive_flag.html" + "zip_get_error.html" + "zip_get_file_comment.html" + "zip_get_name.html" + "zip_get_num_entries.html" + "zip_get_num_files.html" + "zip_libzip_version.html" + "zip_name_locate.html" + "zip_open.html" + "zip_register_cancel_callback_with_state.html" + "zip_register_progress_callback.html" + "zip_register_progress_callback_with_state.html" + "zip_rename.html" + "zip_set_archive_comment.html" + "zip_set_archive_flag.html" + "zip_set_default_password.html" + "zip_set_file_comment.html" + "zip_set_file_compression.html" + "zip_source.html" + "zip_source_begin_write.html" + "zip_source_buffer.html" + "zip_source_buffer_fragment.html" + "zip_source_close.html" + "zip_source_commit_write.html" + "zip_source_error.html" + "zip_source_file.html" + "zip_source_filep.html" + "zip_source_free.html" + "zip_source_function.html" + "zip_source_is_deleted.html" + "zip_source_is_seekable.html" + "zip_source_keep.html" + "zip_source_layered.html" + "zip_source_make_command_bitmap.html" + "zip_source_open.html" + "zip_source_read.html" + "zip_source_rollback_write.html" + "zip_source_seek.html" + "zip_source_seek_compute_offset.html" + "zip_source_seek_write.html" + "zip_source_stat.html" + "zip_source_tell.html" + "zip_source_tell_write.html" + "zip_source_win32a.html" + "zip_source_win32handle.html" + "zip_source_win32w.html" + "zip_source_window_create.html" + "zip_source_write.html" + "zip_source_zip.html" + "zip_source_zip_file.html" + "zip_stat.html" + "zip_stat_init.html" + "zip_unchange.html" + "zip_unchange_all.html" + "zip_unchange_archive.html" + "zipcmp.html" + "zipmerge.html" + "ziptool.html" +) + +# Per-language clean rules from dependency scanning. +foreach(lang ) + include(CMakeFiles/update-html.dir/cmake_clean_${lang}.cmake OPTIONAL) +endforeach() diff --git a/thirdparty/libzip-1.11.3/build-emcmake/man/CMakeFiles/update-html.dir/compiler_depend.make b/thirdparty/libzip-1.11.3/build-emcmake/man/CMakeFiles/update-html.dir/compiler_depend.make new file mode 100644 index 0000000..bc03a28 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/man/CMakeFiles/update-html.dir/compiler_depend.make @@ -0,0 +1,2 @@ +# Empty custom commands generated dependencies file for update-html. +# This may be replaced when dependencies are built. diff --git a/thirdparty/libzip-1.11.3/build-emcmake/man/CMakeFiles/update-html.dir/compiler_depend.ts b/thirdparty/libzip-1.11.3/build-emcmake/man/CMakeFiles/update-html.dir/compiler_depend.ts new file mode 100644 index 0000000..4d94b90 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/man/CMakeFiles/update-html.dir/compiler_depend.ts @@ -0,0 +1,2 @@ +# CMAKE generated file: DO NOT EDIT! +# Timestamp file for custom commands dependencies management for update-html. diff --git a/thirdparty/libzip-1.11.3/build-emcmake/man/CMakeFiles/update-html.dir/progress.make b/thirdparty/libzip-1.11.3/build-emcmake/man/CMakeFiles/update-html.dir/progress.make new file mode 100644 index 0000000..11c26aa --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/man/CMakeFiles/update-html.dir/progress.make @@ -0,0 +1,106 @@ +CMAKE_PROGRESS_1 = +CMAKE_PROGRESS_2 = +CMAKE_PROGRESS_3 = 25 +CMAKE_PROGRESS_4 = +CMAKE_PROGRESS_5 = +CMAKE_PROGRESS_6 = +CMAKE_PROGRESS_7 = +CMAKE_PROGRESS_8 = 26 +CMAKE_PROGRESS_9 = +CMAKE_PROGRESS_10 = +CMAKE_PROGRESS_11 = +CMAKE_PROGRESS_12 = 27 +CMAKE_PROGRESS_13 = +CMAKE_PROGRESS_14 = +CMAKE_PROGRESS_15 = +CMAKE_PROGRESS_16 = +CMAKE_PROGRESS_17 = 28 +CMAKE_PROGRESS_18 = +CMAKE_PROGRESS_19 = +CMAKE_PROGRESS_20 = +CMAKE_PROGRESS_21 = 29 +CMAKE_PROGRESS_22 = +CMAKE_PROGRESS_23 = +CMAKE_PROGRESS_24 = +CMAKE_PROGRESS_25 = +CMAKE_PROGRESS_26 = 30 +CMAKE_PROGRESS_27 = +CMAKE_PROGRESS_28 = +CMAKE_PROGRESS_29 = +CMAKE_PROGRESS_30 = +CMAKE_PROGRESS_31 = 31 +CMAKE_PROGRESS_32 = +CMAKE_PROGRESS_33 = +CMAKE_PROGRESS_34 = +CMAKE_PROGRESS_35 = 32 +CMAKE_PROGRESS_36 = +CMAKE_PROGRESS_37 = +CMAKE_PROGRESS_38 = +CMAKE_PROGRESS_39 = +CMAKE_PROGRESS_40 = 33 +CMAKE_PROGRESS_41 = +CMAKE_PROGRESS_42 = +CMAKE_PROGRESS_43 = +CMAKE_PROGRESS_44 = 34 +CMAKE_PROGRESS_45 = +CMAKE_PROGRESS_46 = +CMAKE_PROGRESS_47 = +CMAKE_PROGRESS_48 = +CMAKE_PROGRESS_49 = 35 +CMAKE_PROGRESS_50 = +CMAKE_PROGRESS_51 = +CMAKE_PROGRESS_52 = +CMAKE_PROGRESS_53 = 36 +CMAKE_PROGRESS_54 = +CMAKE_PROGRESS_55 = +CMAKE_PROGRESS_56 = +CMAKE_PROGRESS_57 = +CMAKE_PROGRESS_58 = 37 +CMAKE_PROGRESS_59 = +CMAKE_PROGRESS_60 = +CMAKE_PROGRESS_61 = +CMAKE_PROGRESS_62 = 38 +CMAKE_PROGRESS_63 = +CMAKE_PROGRESS_64 = +CMAKE_PROGRESS_65 = +CMAKE_PROGRESS_66 = +CMAKE_PROGRESS_67 = 39 +CMAKE_PROGRESS_68 = +CMAKE_PROGRESS_69 = +CMAKE_PROGRESS_70 = +CMAKE_PROGRESS_71 = 40 +CMAKE_PROGRESS_72 = +CMAKE_PROGRESS_73 = +CMAKE_PROGRESS_74 = +CMAKE_PROGRESS_75 = +CMAKE_PROGRESS_76 = 41 +CMAKE_PROGRESS_77 = +CMAKE_PROGRESS_78 = +CMAKE_PROGRESS_79 = +CMAKE_PROGRESS_80 = +CMAKE_PROGRESS_81 = 42 +CMAKE_PROGRESS_82 = +CMAKE_PROGRESS_83 = +CMAKE_PROGRESS_84 = +CMAKE_PROGRESS_85 = 43 +CMAKE_PROGRESS_86 = +CMAKE_PROGRESS_87 = +CMAKE_PROGRESS_88 = +CMAKE_PROGRESS_89 = +CMAKE_PROGRESS_90 = 44 +CMAKE_PROGRESS_91 = +CMAKE_PROGRESS_92 = +CMAKE_PROGRESS_93 = +CMAKE_PROGRESS_94 = 45 +CMAKE_PROGRESS_95 = +CMAKE_PROGRESS_96 = +CMAKE_PROGRESS_97 = +CMAKE_PROGRESS_98 = +CMAKE_PROGRESS_99 = 46 +CMAKE_PROGRESS_100 = +CMAKE_PROGRESS_101 = +CMAKE_PROGRESS_102 = +CMAKE_PROGRESS_103 = 47 +CMAKE_PROGRESS_104 = +CMAKE_PROGRESS_105 = + diff --git a/thirdparty/libzip-1.11.3/build-emcmake/man/CMakeFiles/update-man.dir/DependInfo.cmake b/thirdparty/libzip-1.11.3/build-emcmake/man/CMakeFiles/update-man.dir/DependInfo.cmake new file mode 100644 index 0000000..29b95a5 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/man/CMakeFiles/update-man.dir/DependInfo.cmake @@ -0,0 +1,22 @@ + +# Consider dependencies only in project. +set(CMAKE_DEPENDS_IN_PROJECT_ONLY OFF) + +# The set of languages for which implicit dependencies are needed: +set(CMAKE_DEPENDS_LANGUAGES + ) + +# The set of dependency files which are needed: +set(CMAKE_DEPENDS_DEPENDENCY_FILES + ) + +# Targets to which this target links which contain Fortran sources. +set(CMAKE_Fortran_TARGET_LINKED_INFO_FILES + ) + +# Targets to which this target links which contain Fortran sources. +set(CMAKE_Fortran_TARGET_FORWARD_LINKED_INFO_FILES + ) + +# Fortran module output directory. +set(CMAKE_Fortran_TARGET_MODULE_DIR "") diff --git a/thirdparty/libzip-1.11.3/build-emcmake/man/CMakeFiles/update-man.dir/build.make b/thirdparty/libzip-1.11.3/build-emcmake/man/CMakeFiles/update-man.dir/build.make new file mode 100644 index 0000000..dc8c16e --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/man/CMakeFiles/update-man.dir/build.make @@ -0,0 +1,820 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.28 + +# Delete rule output on recipe failure. +.DELETE_ON_ERROR: + +#============================================================================= +# Special targets provided by cmake. + +# Disable implicit rules so canonical targets will work. +.SUFFIXES: + +# Disable VCS-based implicit rules. +% : %,v + +# Disable VCS-based implicit rules. +% : RCS/% + +# Disable VCS-based implicit rules. +% : RCS/%,v + +# Disable VCS-based implicit rules. +% : SCCS/s.% + +# Disable VCS-based implicit rules. +% : s.% + +.SUFFIXES: .hpux_make_needs_suffix_list + +# Command-line flag to silence nested $(MAKE). +$(VERBOSE)MAKESILENT = -s + +#Suppress display of executed commands. +$(VERBOSE).SILENT: + +# A target that is always out of date. +cmake_force: +.PHONY : cmake_force + +#============================================================================= +# Set environment variables for the build. + +# The shell in which to execute make rules. +SHELL = /bin/sh + +# The CMake executable. +CMAKE_COMMAND = /usr/bin/cmake + +# The command to remove a file. +RM = /usr/bin/cmake -E rm -f + +# Escaping for special characters. +EQUALS = = + +# The top-level source directory on which CMake was run. +CMAKE_SOURCE_DIR = "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3" + +# The top-level build directory on which CMake was run. +CMAKE_BINARY_DIR = "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" + +# Utility rule file for update-man. + +# Include any custom commands dependencies for this target. +include man/CMakeFiles/update-man.dir/compiler_depend.make + +# Include the progress variables for this target. +include man/CMakeFiles/update-man.dir/progress.make + +man/CMakeFiles/update-man: man/ZIP_SOURCE_GET_ARGS.man +man/CMakeFiles/update-man: man/libzip.man +man/CMakeFiles/update-man: man/zip_add.man +man/CMakeFiles/update-man: man/zip_add_dir.man +man/CMakeFiles/update-man: man/zip_close.man +man/CMakeFiles/update-man: man/zip_compression_method_supported.man +man/CMakeFiles/update-man: man/zip_delete.man +man/CMakeFiles/update-man: man/zip_dir_add.man +man/CMakeFiles/update-man: man/zip_discard.man +man/CMakeFiles/update-man: man/zip_encryption_method_supported.man +man/CMakeFiles/update-man: man/zip_error_clear.man +man/CMakeFiles/update-man: man/zip_error_code_system.man +man/CMakeFiles/update-man: man/zip_error_code_zip.man +man/CMakeFiles/update-man: man/zip_error_fini.man +man/CMakeFiles/update-man: man/zip_error_get.man +man/CMakeFiles/update-man: man/zip_error_get_sys_type.man +man/CMakeFiles/update-man: man/zip_error_init.man +man/CMakeFiles/update-man: man/zip_error_set.man +man/CMakeFiles/update-man: man/zip_error_set_from_source.man +man/CMakeFiles/update-man: man/zip_error_strerror.man +man/CMakeFiles/update-man: man/zip_error_system_type.man +man/CMakeFiles/update-man: man/zip_error_to_data.man +man/CMakeFiles/update-man: man/zip_error_to_str.man +man/CMakeFiles/update-man: man/zip_errors.man +man/CMakeFiles/update-man: man/zip_fclose.man +man/CMakeFiles/update-man: man/zip_fdopen.man +man/CMakeFiles/update-man: man/zip_file_add.man +man/CMakeFiles/update-man: man/zip_file_attributes_init.man +man/CMakeFiles/update-man: man/zip_file_extra_field_delete.man +man/CMakeFiles/update-man: man/zip_file_extra_field_get.man +man/CMakeFiles/update-man: man/zip_file_extra_field_set.man +man/CMakeFiles/update-man: man/zip_file_extra_fields_count.man +man/CMakeFiles/update-man: man/zip_file_get_comment.man +man/CMakeFiles/update-man: man/zip_file_get_error.man +man/CMakeFiles/update-man: man/zip_file_get_external_attributes.man +man/CMakeFiles/update-man: man/zip_file_rename.man +man/CMakeFiles/update-man: man/zip_file_set_comment.man +man/CMakeFiles/update-man: man/zip_file_set_encryption.man +man/CMakeFiles/update-man: man/zip_file_set_external_attributes.man +man/CMakeFiles/update-man: man/zip_file_set_mtime.man +man/CMakeFiles/update-man: man/zip_file_strerror.man +man/CMakeFiles/update-man: man/zip_fopen.man +man/CMakeFiles/update-man: man/zip_fopen_encrypted.man +man/CMakeFiles/update-man: man/zip_fread.man +man/CMakeFiles/update-man: man/zip_fseek.man +man/CMakeFiles/update-man: man/zip_ftell.man +man/CMakeFiles/update-man: man/zip_get_archive_comment.man +man/CMakeFiles/update-man: man/zip_get_archive_flag.man +man/CMakeFiles/update-man: man/zip_get_error.man +man/CMakeFiles/update-man: man/zip_get_file_comment.man +man/CMakeFiles/update-man: man/zip_get_name.man +man/CMakeFiles/update-man: man/zip_get_num_entries.man +man/CMakeFiles/update-man: man/zip_get_num_files.man +man/CMakeFiles/update-man: man/zip_libzip_version.man +man/CMakeFiles/update-man: man/zip_name_locate.man +man/CMakeFiles/update-man: man/zip_open.man +man/CMakeFiles/update-man: man/zip_register_cancel_callback_with_state.man +man/CMakeFiles/update-man: man/zip_register_progress_callback.man +man/CMakeFiles/update-man: man/zip_register_progress_callback_with_state.man +man/CMakeFiles/update-man: man/zip_rename.man +man/CMakeFiles/update-man: man/zip_set_archive_comment.man +man/CMakeFiles/update-man: man/zip_set_archive_flag.man +man/CMakeFiles/update-man: man/zip_set_default_password.man +man/CMakeFiles/update-man: man/zip_set_file_comment.man +man/CMakeFiles/update-man: man/zip_set_file_compression.man +man/CMakeFiles/update-man: man/zip_source.man +man/CMakeFiles/update-man: man/zip_source_begin_write.man +man/CMakeFiles/update-man: man/zip_source_buffer.man +man/CMakeFiles/update-man: man/zip_source_buffer_fragment.man +man/CMakeFiles/update-man: man/zip_source_close.man +man/CMakeFiles/update-man: man/zip_source_commit_write.man +man/CMakeFiles/update-man: man/zip_source_error.man +man/CMakeFiles/update-man: man/zip_source_file.man +man/CMakeFiles/update-man: man/zip_source_filep.man +man/CMakeFiles/update-man: man/zip_source_free.man +man/CMakeFiles/update-man: man/zip_source_function.man +man/CMakeFiles/update-man: man/zip_source_is_deleted.man +man/CMakeFiles/update-man: man/zip_source_is_seekable.man +man/CMakeFiles/update-man: man/zip_source_layered.man +man/CMakeFiles/update-man: man/zip_source_keep.man +man/CMakeFiles/update-man: man/zip_source_make_command_bitmap.man +man/CMakeFiles/update-man: man/zip_source_open.man +man/CMakeFiles/update-man: man/zip_source_read.man +man/CMakeFiles/update-man: man/zip_source_rollback_write.man +man/CMakeFiles/update-man: man/zip_source_seek.man +man/CMakeFiles/update-man: man/zip_source_seek_compute_offset.man +man/CMakeFiles/update-man: man/zip_source_seek_write.man +man/CMakeFiles/update-man: man/zip_source_stat.man +man/CMakeFiles/update-man: man/zip_source_tell.man +man/CMakeFiles/update-man: man/zip_source_tell_write.man +man/CMakeFiles/update-man: man/zip_source_win32a.man +man/CMakeFiles/update-man: man/zip_source_win32handle.man +man/CMakeFiles/update-man: man/zip_source_win32w.man +man/CMakeFiles/update-man: man/zip_source_window_create.man +man/CMakeFiles/update-man: man/zip_source_write.man +man/CMakeFiles/update-man: man/zip_source_zip.man +man/CMakeFiles/update-man: man/zip_source_zip_file.man +man/CMakeFiles/update-man: man/zip_stat.man +man/CMakeFiles/update-man: man/zip_stat_init.man +man/CMakeFiles/update-man: man/zip_unchange.man +man/CMakeFiles/update-man: man/zip_unchange_all.man +man/CMakeFiles/update-man: man/zip_unchange_archive.man +man/CMakeFiles/update-man: man/zipcmp.man +man/CMakeFiles/update-man: man/zipmerge.man +man/CMakeFiles/update-man: man/ziptool.man + +man/ZIP_SOURCE_GET_ARGS.man: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/ZIP_SOURCE_GET_ARGS.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_1) "Generating ZIP_SOURCE_GET_ARGS.man" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -DIN=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/ZIP_SOURCE_GET_ARGS.mdoc -DOUT=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/ZIP_SOURCE_GET_ARGS.man -P /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/update-man.cmake + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/ZIP_SOURCE_GET_ARGS.man /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/ZIP_SOURCE_GET_ARGS.man + +man/libzip.man: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/libzip.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_2) "Generating libzip.man" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -DIN=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/libzip.mdoc -DOUT=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/libzip.man -P /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/update-man.cmake + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/libzip.man /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/libzip.man + +man/zip_add.man: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_add.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_3) "Generating zip_add.man" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -DIN=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_add.mdoc -DOUT=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_add.man -P /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/update-man.cmake + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_add.man /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_add.man + +man/zip_add_dir.man: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_add_dir.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_4) "Generating zip_add_dir.man" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -DIN=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_add_dir.mdoc -DOUT=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_add_dir.man -P /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/update-man.cmake + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_add_dir.man /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_add_dir.man + +man/zip_close.man: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_close.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_5) "Generating zip_close.man" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -DIN=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_close.mdoc -DOUT=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_close.man -P /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/update-man.cmake + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_close.man /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_close.man + +man/zip_compression_method_supported.man: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_compression_method_supported.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_6) "Generating zip_compression_method_supported.man" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -DIN=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_compression_method_supported.mdoc -DOUT=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_compression_method_supported.man -P /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/update-man.cmake + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_compression_method_supported.man /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_compression_method_supported.man + +man/zip_delete.man: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_delete.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_7) "Generating zip_delete.man" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -DIN=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_delete.mdoc -DOUT=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_delete.man -P /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/update-man.cmake + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_delete.man /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_delete.man + +man/zip_dir_add.man: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_dir_add.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_8) "Generating zip_dir_add.man" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -DIN=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_dir_add.mdoc -DOUT=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_dir_add.man -P /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/update-man.cmake + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_dir_add.man /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_dir_add.man + +man/zip_discard.man: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_discard.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_9) "Generating zip_discard.man" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -DIN=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_discard.mdoc -DOUT=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_discard.man -P /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/update-man.cmake + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_discard.man /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_discard.man + +man/zip_encryption_method_supported.man: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_encryption_method_supported.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_10) "Generating zip_encryption_method_supported.man" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -DIN=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_encryption_method_supported.mdoc -DOUT=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_encryption_method_supported.man -P /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/update-man.cmake + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_encryption_method_supported.man /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_encryption_method_supported.man + +man/zip_error_clear.man: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_error_clear.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_11) "Generating zip_error_clear.man" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -DIN=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_error_clear.mdoc -DOUT=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_error_clear.man -P /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/update-man.cmake + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_error_clear.man /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_error_clear.man + +man/zip_error_code_system.man: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_error_code_system.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_12) "Generating zip_error_code_system.man" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -DIN=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_error_code_system.mdoc -DOUT=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_error_code_system.man -P /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/update-man.cmake + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_error_code_system.man /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_error_code_system.man + +man/zip_error_code_zip.man: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_error_code_zip.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_13) "Generating zip_error_code_zip.man" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -DIN=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_error_code_zip.mdoc -DOUT=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_error_code_zip.man -P /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/update-man.cmake + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_error_code_zip.man /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_error_code_zip.man + +man/zip_error_fini.man: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_error_fini.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_14) "Generating zip_error_fini.man" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -DIN=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_error_fini.mdoc -DOUT=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_error_fini.man -P /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/update-man.cmake + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_error_fini.man /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_error_fini.man + +man/zip_error_get.man: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_error_get.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_15) "Generating zip_error_get.man" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -DIN=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_error_get.mdoc -DOUT=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_error_get.man -P /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/update-man.cmake + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_error_get.man /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_error_get.man + +man/zip_error_get_sys_type.man: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_error_get_sys_type.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_16) "Generating zip_error_get_sys_type.man" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -DIN=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_error_get_sys_type.mdoc -DOUT=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_error_get_sys_type.man -P /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/update-man.cmake + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_error_get_sys_type.man /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_error_get_sys_type.man + +man/zip_error_init.man: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_error_init.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_17) "Generating zip_error_init.man" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -DIN=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_error_init.mdoc -DOUT=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_error_init.man -P /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/update-man.cmake + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_error_init.man /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_error_init.man + +man/zip_error_set.man: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_error_set.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_18) "Generating zip_error_set.man" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -DIN=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_error_set.mdoc -DOUT=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_error_set.man -P /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/update-man.cmake + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_error_set.man /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_error_set.man + +man/zip_error_set_from_source.man: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_error_set_from_source.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_19) "Generating zip_error_set_from_source.man" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -DIN=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_error_set_from_source.mdoc -DOUT=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_error_set_from_source.man -P /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/update-man.cmake + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_error_set_from_source.man /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_error_set_from_source.man + +man/zip_error_strerror.man: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_error_strerror.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_20) "Generating zip_error_strerror.man" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -DIN=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_error_strerror.mdoc -DOUT=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_error_strerror.man -P /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/update-man.cmake + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_error_strerror.man /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_error_strerror.man + +man/zip_error_system_type.man: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_error_system_type.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_21) "Generating zip_error_system_type.man" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -DIN=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_error_system_type.mdoc -DOUT=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_error_system_type.man -P /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/update-man.cmake + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_error_system_type.man /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_error_system_type.man + +man/zip_error_to_data.man: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_error_to_data.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_22) "Generating zip_error_to_data.man" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -DIN=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_error_to_data.mdoc -DOUT=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_error_to_data.man -P /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/update-man.cmake + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_error_to_data.man /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_error_to_data.man + +man/zip_error_to_str.man: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_error_to_str.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_23) "Generating zip_error_to_str.man" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -DIN=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_error_to_str.mdoc -DOUT=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_error_to_str.man -P /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/update-man.cmake + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_error_to_str.man /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_error_to_str.man + +man/zip_errors.man: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_errors.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_24) "Generating zip_errors.man" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -DIN=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_errors.mdoc -DOUT=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_errors.man -P /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/update-man.cmake + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_errors.man /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_errors.man + +man/zip_fclose.man: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_fclose.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_25) "Generating zip_fclose.man" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -DIN=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_fclose.mdoc -DOUT=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_fclose.man -P /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/update-man.cmake + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_fclose.man /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_fclose.man + +man/zip_fdopen.man: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_fdopen.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_26) "Generating zip_fdopen.man" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -DIN=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_fdopen.mdoc -DOUT=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_fdopen.man -P /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/update-man.cmake + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_fdopen.man /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_fdopen.man + +man/zip_file_add.man: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_file_add.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_27) "Generating zip_file_add.man" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -DIN=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_file_add.mdoc -DOUT=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_file_add.man -P /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/update-man.cmake + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_file_add.man /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_file_add.man + +man/zip_file_attributes_init.man: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_file_attributes_init.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_28) "Generating zip_file_attributes_init.man" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -DIN=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_file_attributes_init.mdoc -DOUT=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_file_attributes_init.man -P /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/update-man.cmake + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_file_attributes_init.man /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_file_attributes_init.man + +man/zip_file_extra_field_delete.man: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_file_extra_field_delete.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_29) "Generating zip_file_extra_field_delete.man" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -DIN=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_file_extra_field_delete.mdoc -DOUT=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_file_extra_field_delete.man -P /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/update-man.cmake + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_file_extra_field_delete.man /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_file_extra_field_delete.man + +man/zip_file_extra_field_get.man: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_file_extra_field_get.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_30) "Generating zip_file_extra_field_get.man" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -DIN=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_file_extra_field_get.mdoc -DOUT=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_file_extra_field_get.man -P /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/update-man.cmake + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_file_extra_field_get.man /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_file_extra_field_get.man + +man/zip_file_extra_field_set.man: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_file_extra_field_set.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_31) "Generating zip_file_extra_field_set.man" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -DIN=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_file_extra_field_set.mdoc -DOUT=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_file_extra_field_set.man -P /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/update-man.cmake + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_file_extra_field_set.man /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_file_extra_field_set.man + +man/zip_file_extra_fields_count.man: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_file_extra_fields_count.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_32) "Generating zip_file_extra_fields_count.man" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -DIN=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_file_extra_fields_count.mdoc -DOUT=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_file_extra_fields_count.man -P /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/update-man.cmake + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_file_extra_fields_count.man /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_file_extra_fields_count.man + +man/zip_file_get_comment.man: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_file_get_comment.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_33) "Generating zip_file_get_comment.man" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -DIN=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_file_get_comment.mdoc -DOUT=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_file_get_comment.man -P /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/update-man.cmake + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_file_get_comment.man /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_file_get_comment.man + +man/zip_file_get_error.man: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_file_get_error.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_34) "Generating zip_file_get_error.man" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -DIN=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_file_get_error.mdoc -DOUT=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_file_get_error.man -P /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/update-man.cmake + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_file_get_error.man /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_file_get_error.man + +man/zip_file_get_external_attributes.man: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_file_get_external_attributes.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_35) "Generating zip_file_get_external_attributes.man" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -DIN=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_file_get_external_attributes.mdoc -DOUT=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_file_get_external_attributes.man -P /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/update-man.cmake + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_file_get_external_attributes.man /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_file_get_external_attributes.man + +man/zip_file_rename.man: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_file_rename.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_36) "Generating zip_file_rename.man" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -DIN=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_file_rename.mdoc -DOUT=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_file_rename.man -P /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/update-man.cmake + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_file_rename.man /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_file_rename.man + +man/zip_file_set_comment.man: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_file_set_comment.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_37) "Generating zip_file_set_comment.man" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -DIN=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_file_set_comment.mdoc -DOUT=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_file_set_comment.man -P /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/update-man.cmake + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_file_set_comment.man /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_file_set_comment.man + +man/zip_file_set_encryption.man: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_file_set_encryption.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_38) "Generating zip_file_set_encryption.man" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -DIN=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_file_set_encryption.mdoc -DOUT=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_file_set_encryption.man -P /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/update-man.cmake + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_file_set_encryption.man /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_file_set_encryption.man + +man/zip_file_set_external_attributes.man: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_file_set_external_attributes.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_39) "Generating zip_file_set_external_attributes.man" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -DIN=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_file_set_external_attributes.mdoc -DOUT=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_file_set_external_attributes.man -P /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/update-man.cmake + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_file_set_external_attributes.man /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_file_set_external_attributes.man + +man/zip_file_set_mtime.man: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_file_set_mtime.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_40) "Generating zip_file_set_mtime.man" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -DIN=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_file_set_mtime.mdoc -DOUT=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_file_set_mtime.man -P /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/update-man.cmake + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_file_set_mtime.man /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_file_set_mtime.man + +man/zip_file_strerror.man: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_file_strerror.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_41) "Generating zip_file_strerror.man" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -DIN=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_file_strerror.mdoc -DOUT=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_file_strerror.man -P /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/update-man.cmake + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_file_strerror.man /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_file_strerror.man + +man/zip_fopen.man: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_fopen.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_42) "Generating zip_fopen.man" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -DIN=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_fopen.mdoc -DOUT=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_fopen.man -P /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/update-man.cmake + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_fopen.man /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_fopen.man + +man/zip_fopen_encrypted.man: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_fopen_encrypted.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_43) "Generating zip_fopen_encrypted.man" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -DIN=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_fopen_encrypted.mdoc -DOUT=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_fopen_encrypted.man -P /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/update-man.cmake + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_fopen_encrypted.man /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_fopen_encrypted.man + +man/zip_fread.man: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_fread.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_44) "Generating zip_fread.man" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -DIN=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_fread.mdoc -DOUT=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_fread.man -P /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/update-man.cmake + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_fread.man /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_fread.man + +man/zip_fseek.man: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_fseek.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_45) "Generating zip_fseek.man" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -DIN=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_fseek.mdoc -DOUT=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_fseek.man -P /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/update-man.cmake + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_fseek.man /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_fseek.man + +man/zip_ftell.man: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_ftell.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_46) "Generating zip_ftell.man" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -DIN=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_ftell.mdoc -DOUT=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_ftell.man -P /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/update-man.cmake + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_ftell.man /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_ftell.man + +man/zip_get_archive_comment.man: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_get_archive_comment.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_47) "Generating zip_get_archive_comment.man" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -DIN=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_get_archive_comment.mdoc -DOUT=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_get_archive_comment.man -P /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/update-man.cmake + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_get_archive_comment.man /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_get_archive_comment.man + +man/zip_get_archive_flag.man: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_get_archive_flag.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_48) "Generating zip_get_archive_flag.man" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -DIN=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_get_archive_flag.mdoc -DOUT=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_get_archive_flag.man -P /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/update-man.cmake + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_get_archive_flag.man /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_get_archive_flag.man + +man/zip_get_error.man: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_get_error.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_49) "Generating zip_get_error.man" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -DIN=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_get_error.mdoc -DOUT=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_get_error.man -P /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/update-man.cmake + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_get_error.man /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_get_error.man + +man/zip_get_file_comment.man: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_get_file_comment.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_50) "Generating zip_get_file_comment.man" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -DIN=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_get_file_comment.mdoc -DOUT=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_get_file_comment.man -P /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/update-man.cmake + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_get_file_comment.man /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_get_file_comment.man + +man/zip_get_name.man: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_get_name.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_51) "Generating zip_get_name.man" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -DIN=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_get_name.mdoc -DOUT=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_get_name.man -P /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/update-man.cmake + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_get_name.man /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_get_name.man + +man/zip_get_num_entries.man: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_get_num_entries.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_52) "Generating zip_get_num_entries.man" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -DIN=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_get_num_entries.mdoc -DOUT=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_get_num_entries.man -P /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/update-man.cmake + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_get_num_entries.man /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_get_num_entries.man + +man/zip_get_num_files.man: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_get_num_files.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_53) "Generating zip_get_num_files.man" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -DIN=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_get_num_files.mdoc -DOUT=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_get_num_files.man -P /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/update-man.cmake + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_get_num_files.man /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_get_num_files.man + +man/zip_libzip_version.man: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_libzip_version.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_54) "Generating zip_libzip_version.man" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -DIN=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_libzip_version.mdoc -DOUT=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_libzip_version.man -P /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/update-man.cmake + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_libzip_version.man /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_libzip_version.man + +man/zip_name_locate.man: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_name_locate.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_55) "Generating zip_name_locate.man" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -DIN=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_name_locate.mdoc -DOUT=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_name_locate.man -P /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/update-man.cmake + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_name_locate.man /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_name_locate.man + +man/zip_open.man: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_open.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_56) "Generating zip_open.man" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -DIN=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_open.mdoc -DOUT=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_open.man -P /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/update-man.cmake + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_open.man /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_open.man + +man/zip_register_cancel_callback_with_state.man: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_register_cancel_callback_with_state.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_57) "Generating zip_register_cancel_callback_with_state.man" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -DIN=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_register_cancel_callback_with_state.mdoc -DOUT=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_register_cancel_callback_with_state.man -P /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/update-man.cmake + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_register_cancel_callback_with_state.man /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_register_cancel_callback_with_state.man + +man/zip_register_progress_callback.man: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_register_progress_callback.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_58) "Generating zip_register_progress_callback.man" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -DIN=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_register_progress_callback.mdoc -DOUT=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_register_progress_callback.man -P /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/update-man.cmake + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_register_progress_callback.man /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_register_progress_callback.man + +man/zip_register_progress_callback_with_state.man: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_register_progress_callback_with_state.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_59) "Generating zip_register_progress_callback_with_state.man" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -DIN=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_register_progress_callback_with_state.mdoc -DOUT=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_register_progress_callback_with_state.man -P /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/update-man.cmake + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_register_progress_callback_with_state.man /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_register_progress_callback_with_state.man + +man/zip_rename.man: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_rename.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_60) "Generating zip_rename.man" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -DIN=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_rename.mdoc -DOUT=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_rename.man -P /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/update-man.cmake + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_rename.man /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_rename.man + +man/zip_set_archive_comment.man: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_set_archive_comment.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_61) "Generating zip_set_archive_comment.man" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -DIN=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_set_archive_comment.mdoc -DOUT=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_set_archive_comment.man -P /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/update-man.cmake + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_set_archive_comment.man /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_set_archive_comment.man + +man/zip_set_archive_flag.man: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_set_archive_flag.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_62) "Generating zip_set_archive_flag.man" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -DIN=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_set_archive_flag.mdoc -DOUT=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_set_archive_flag.man -P /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/update-man.cmake + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_set_archive_flag.man /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_set_archive_flag.man + +man/zip_set_default_password.man: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_set_default_password.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_63) "Generating zip_set_default_password.man" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -DIN=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_set_default_password.mdoc -DOUT=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_set_default_password.man -P /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/update-man.cmake + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_set_default_password.man /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_set_default_password.man + +man/zip_set_file_comment.man: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_set_file_comment.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_64) "Generating zip_set_file_comment.man" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -DIN=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_set_file_comment.mdoc -DOUT=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_set_file_comment.man -P /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/update-man.cmake + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_set_file_comment.man /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_set_file_comment.man + +man/zip_set_file_compression.man: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_set_file_compression.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_65) "Generating zip_set_file_compression.man" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -DIN=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_set_file_compression.mdoc -DOUT=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_set_file_compression.man -P /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/update-man.cmake + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_set_file_compression.man /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_set_file_compression.man + +man/zip_source.man: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_source.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_66) "Generating zip_source.man" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -DIN=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_source.mdoc -DOUT=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source.man -P /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/update-man.cmake + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source.man /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_source.man + +man/zip_source_begin_write.man: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_source_begin_write.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_67) "Generating zip_source_begin_write.man" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -DIN=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_source_begin_write.mdoc -DOUT=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_begin_write.man -P /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/update-man.cmake + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_begin_write.man /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_source_begin_write.man + +man/zip_source_buffer.man: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_source_buffer.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_68) "Generating zip_source_buffer.man" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -DIN=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_source_buffer.mdoc -DOUT=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_buffer.man -P /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/update-man.cmake + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_buffer.man /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_source_buffer.man + +man/zip_source_buffer_fragment.man: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_source_buffer_fragment.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_69) "Generating zip_source_buffer_fragment.man" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -DIN=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_source_buffer_fragment.mdoc -DOUT=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_buffer_fragment.man -P /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/update-man.cmake + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_buffer_fragment.man /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_source_buffer_fragment.man + +man/zip_source_close.man: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_source_close.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_70) "Generating zip_source_close.man" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -DIN=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_source_close.mdoc -DOUT=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_close.man -P /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/update-man.cmake + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_close.man /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_source_close.man + +man/zip_source_commit_write.man: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_source_commit_write.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_71) "Generating zip_source_commit_write.man" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -DIN=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_source_commit_write.mdoc -DOUT=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_commit_write.man -P /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/update-man.cmake + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_commit_write.man /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_source_commit_write.man + +man/zip_source_error.man: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_source_error.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_72) "Generating zip_source_error.man" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -DIN=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_source_error.mdoc -DOUT=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_error.man -P /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/update-man.cmake + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_error.man /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_source_error.man + +man/zip_source_file.man: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_source_file.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_73) "Generating zip_source_file.man" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -DIN=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_source_file.mdoc -DOUT=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_file.man -P /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/update-man.cmake + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_file.man /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_source_file.man + +man/zip_source_filep.man: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_source_filep.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_74) "Generating zip_source_filep.man" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -DIN=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_source_filep.mdoc -DOUT=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_filep.man -P /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/update-man.cmake + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_filep.man /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_source_filep.man + +man/zip_source_free.man: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_source_free.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_75) "Generating zip_source_free.man" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -DIN=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_source_free.mdoc -DOUT=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_free.man -P /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/update-man.cmake + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_free.man /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_source_free.man + +man/zip_source_function.man: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_source_function.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_76) "Generating zip_source_function.man" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -DIN=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_source_function.mdoc -DOUT=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_function.man -P /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/update-man.cmake + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_function.man /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_source_function.man + +man/zip_source_is_deleted.man: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_source_is_deleted.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_77) "Generating zip_source_is_deleted.man" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -DIN=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_source_is_deleted.mdoc -DOUT=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_is_deleted.man -P /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/update-man.cmake + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_is_deleted.man /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_source_is_deleted.man + +man/zip_source_is_seekable.man: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_source_is_seekable.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_78) "Generating zip_source_is_seekable.man" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -DIN=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_source_is_seekable.mdoc -DOUT=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_is_seekable.man -P /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/update-man.cmake + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_is_seekable.man /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_source_is_seekable.man + +man/zip_source_keep.man: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_source_keep.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_79) "Generating zip_source_keep.man" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -DIN=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_source_keep.mdoc -DOUT=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_keep.man -P /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/update-man.cmake + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_keep.man /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_source_keep.man + +man/zip_source_layered.man: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_source_layered.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_80) "Generating zip_source_layered.man" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -DIN=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_source_layered.mdoc -DOUT=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_layered.man -P /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/update-man.cmake + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_layered.man /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_source_layered.man + +man/zip_source_make_command_bitmap.man: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_source_make_command_bitmap.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_81) "Generating zip_source_make_command_bitmap.man" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -DIN=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_source_make_command_bitmap.mdoc -DOUT=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_make_command_bitmap.man -P /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/update-man.cmake + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_make_command_bitmap.man /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_source_make_command_bitmap.man + +man/zip_source_open.man: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_source_open.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_82) "Generating zip_source_open.man" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -DIN=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_source_open.mdoc -DOUT=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_open.man -P /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/update-man.cmake + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_open.man /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_source_open.man + +man/zip_source_read.man: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_source_read.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_83) "Generating zip_source_read.man" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -DIN=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_source_read.mdoc -DOUT=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_read.man -P /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/update-man.cmake + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_read.man /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_source_read.man + +man/zip_source_rollback_write.man: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_source_rollback_write.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_84) "Generating zip_source_rollback_write.man" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -DIN=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_source_rollback_write.mdoc -DOUT=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_rollback_write.man -P /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/update-man.cmake + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_rollback_write.man /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_source_rollback_write.man + +man/zip_source_seek.man: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_source_seek.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_85) "Generating zip_source_seek.man" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -DIN=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_source_seek.mdoc -DOUT=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_seek.man -P /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/update-man.cmake + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_seek.man /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_source_seek.man + +man/zip_source_seek_compute_offset.man: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_source_seek_compute_offset.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_86) "Generating zip_source_seek_compute_offset.man" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -DIN=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_source_seek_compute_offset.mdoc -DOUT=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_seek_compute_offset.man -P /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/update-man.cmake + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_seek_compute_offset.man /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_source_seek_compute_offset.man + +man/zip_source_seek_write.man: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_source_seek_write.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_87) "Generating zip_source_seek_write.man" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -DIN=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_source_seek_write.mdoc -DOUT=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_seek_write.man -P /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/update-man.cmake + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_seek_write.man /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_source_seek_write.man + +man/zip_source_stat.man: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_source_stat.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_88) "Generating zip_source_stat.man" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -DIN=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_source_stat.mdoc -DOUT=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_stat.man -P /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/update-man.cmake + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_stat.man /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_source_stat.man + +man/zip_source_tell.man: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_source_tell.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_89) "Generating zip_source_tell.man" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -DIN=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_source_tell.mdoc -DOUT=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_tell.man -P /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/update-man.cmake + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_tell.man /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_source_tell.man + +man/zip_source_tell_write.man: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_source_tell_write.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_90) "Generating zip_source_tell_write.man" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -DIN=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_source_tell_write.mdoc -DOUT=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_tell_write.man -P /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/update-man.cmake + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_tell_write.man /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_source_tell_write.man + +man/zip_source_win32a.man: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_source_win32a.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_91) "Generating zip_source_win32a.man" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -DIN=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_source_win32a.mdoc -DOUT=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_win32a.man -P /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/update-man.cmake + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_win32a.man /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_source_win32a.man + +man/zip_source_win32handle.man: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_source_win32handle.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_92) "Generating zip_source_win32handle.man" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -DIN=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_source_win32handle.mdoc -DOUT=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_win32handle.man -P /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/update-man.cmake + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_win32handle.man /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_source_win32handle.man + +man/zip_source_win32w.man: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_source_win32w.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_93) "Generating zip_source_win32w.man" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -DIN=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_source_win32w.mdoc -DOUT=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_win32w.man -P /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/update-man.cmake + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_win32w.man /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_source_win32w.man + +man/zip_source_window_create.man: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_source_window_create.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_94) "Generating zip_source_window_create.man" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -DIN=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_source_window_create.mdoc -DOUT=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_window_create.man -P /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/update-man.cmake + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_window_create.man /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_source_window_create.man + +man/zip_source_write.man: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_source_write.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_95) "Generating zip_source_write.man" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -DIN=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_source_write.mdoc -DOUT=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_write.man -P /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/update-man.cmake + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_write.man /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_source_write.man + +man/zip_source_zip.man: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_source_zip.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_96) "Generating zip_source_zip.man" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -DIN=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_source_zip.mdoc -DOUT=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_zip.man -P /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/update-man.cmake + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_zip.man /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_source_zip.man + +man/zip_source_zip_file.man: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_source_zip_file.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_97) "Generating zip_source_zip_file.man" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -DIN=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_source_zip_file.mdoc -DOUT=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_zip_file.man -P /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/update-man.cmake + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_zip_file.man /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_source_zip_file.man + +man/zip_stat.man: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_stat.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_98) "Generating zip_stat.man" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -DIN=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_stat.mdoc -DOUT=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_stat.man -P /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/update-man.cmake + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_stat.man /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_stat.man + +man/zip_stat_init.man: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_stat_init.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_99) "Generating zip_stat_init.man" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -DIN=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_stat_init.mdoc -DOUT=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_stat_init.man -P /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/update-man.cmake + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_stat_init.man /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_stat_init.man + +man/zip_unchange.man: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_unchange.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_100) "Generating zip_unchange.man" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -DIN=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_unchange.mdoc -DOUT=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_unchange.man -P /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/update-man.cmake + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_unchange.man /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_unchange.man + +man/zip_unchange_all.man: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_unchange_all.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_101) "Generating zip_unchange_all.man" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -DIN=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_unchange_all.mdoc -DOUT=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_unchange_all.man -P /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/update-man.cmake + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_unchange_all.man /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_unchange_all.man + +man/zip_unchange_archive.man: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_unchange_archive.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_102) "Generating zip_unchange_archive.man" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -DIN=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_unchange_archive.mdoc -DOUT=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_unchange_archive.man -P /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/update-man.cmake + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_unchange_archive.man /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_unchange_archive.man + +man/zipcmp.man: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zipcmp.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_103) "Generating zipcmp.man" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -DIN=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zipcmp.mdoc -DOUT=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zipcmp.man -P /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/update-man.cmake + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zipcmp.man /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zipcmp.man + +man/zipmerge.man: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zipmerge.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_104) "Generating zipmerge.man" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -DIN=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zipmerge.mdoc -DOUT=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zipmerge.man -P /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/update-man.cmake + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zipmerge.man /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zipmerge.man + +man/ziptool.man: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/ziptool.mdoc + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --blue --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_105) "Generating ziptool.man" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -DIN=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/ziptool.mdoc -DOUT=/home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/ziptool.man -P /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/update-man.cmake + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && /usr/bin/cmake -E copy_if_different /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/ziptool.man /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/ziptool.man + +update-man: man/CMakeFiles/update-man +update-man: man/ZIP_SOURCE_GET_ARGS.man +update-man: man/libzip.man +update-man: man/zip_add.man +update-man: man/zip_add_dir.man +update-man: man/zip_close.man +update-man: man/zip_compression_method_supported.man +update-man: man/zip_delete.man +update-man: man/zip_dir_add.man +update-man: man/zip_discard.man +update-man: man/zip_encryption_method_supported.man +update-man: man/zip_error_clear.man +update-man: man/zip_error_code_system.man +update-man: man/zip_error_code_zip.man +update-man: man/zip_error_fini.man +update-man: man/zip_error_get.man +update-man: man/zip_error_get_sys_type.man +update-man: man/zip_error_init.man +update-man: man/zip_error_set.man +update-man: man/zip_error_set_from_source.man +update-man: man/zip_error_strerror.man +update-man: man/zip_error_system_type.man +update-man: man/zip_error_to_data.man +update-man: man/zip_error_to_str.man +update-man: man/zip_errors.man +update-man: man/zip_fclose.man +update-man: man/zip_fdopen.man +update-man: man/zip_file_add.man +update-man: man/zip_file_attributes_init.man +update-man: man/zip_file_extra_field_delete.man +update-man: man/zip_file_extra_field_get.man +update-man: man/zip_file_extra_field_set.man +update-man: man/zip_file_extra_fields_count.man +update-man: man/zip_file_get_comment.man +update-man: man/zip_file_get_error.man +update-man: man/zip_file_get_external_attributes.man +update-man: man/zip_file_rename.man +update-man: man/zip_file_set_comment.man +update-man: man/zip_file_set_encryption.man +update-man: man/zip_file_set_external_attributes.man +update-man: man/zip_file_set_mtime.man +update-man: man/zip_file_strerror.man +update-man: man/zip_fopen.man +update-man: man/zip_fopen_encrypted.man +update-man: man/zip_fread.man +update-man: man/zip_fseek.man +update-man: man/zip_ftell.man +update-man: man/zip_get_archive_comment.man +update-man: man/zip_get_archive_flag.man +update-man: man/zip_get_error.man +update-man: man/zip_get_file_comment.man +update-man: man/zip_get_name.man +update-man: man/zip_get_num_entries.man +update-man: man/zip_get_num_files.man +update-man: man/zip_libzip_version.man +update-man: man/zip_name_locate.man +update-man: man/zip_open.man +update-man: man/zip_register_cancel_callback_with_state.man +update-man: man/zip_register_progress_callback.man +update-man: man/zip_register_progress_callback_with_state.man +update-man: man/zip_rename.man +update-man: man/zip_set_archive_comment.man +update-man: man/zip_set_archive_flag.man +update-man: man/zip_set_default_password.man +update-man: man/zip_set_file_comment.man +update-man: man/zip_set_file_compression.man +update-man: man/zip_source.man +update-man: man/zip_source_begin_write.man +update-man: man/zip_source_buffer.man +update-man: man/zip_source_buffer_fragment.man +update-man: man/zip_source_close.man +update-man: man/zip_source_commit_write.man +update-man: man/zip_source_error.man +update-man: man/zip_source_file.man +update-man: man/zip_source_filep.man +update-man: man/zip_source_free.man +update-man: man/zip_source_function.man +update-man: man/zip_source_is_deleted.man +update-man: man/zip_source_is_seekable.man +update-man: man/zip_source_keep.man +update-man: man/zip_source_layered.man +update-man: man/zip_source_make_command_bitmap.man +update-man: man/zip_source_open.man +update-man: man/zip_source_read.man +update-man: man/zip_source_rollback_write.man +update-man: man/zip_source_seek.man +update-man: man/zip_source_seek_compute_offset.man +update-man: man/zip_source_seek_write.man +update-man: man/zip_source_stat.man +update-man: man/zip_source_tell.man +update-man: man/zip_source_tell_write.man +update-man: man/zip_source_win32a.man +update-man: man/zip_source_win32handle.man +update-man: man/zip_source_win32w.man +update-man: man/zip_source_window_create.man +update-man: man/zip_source_write.man +update-man: man/zip_source_zip.man +update-man: man/zip_source_zip_file.man +update-man: man/zip_stat.man +update-man: man/zip_stat_init.man +update-man: man/zip_unchange.man +update-man: man/zip_unchange_all.man +update-man: man/zip_unchange_archive.man +update-man: man/zipcmp.man +update-man: man/zipmerge.man +update-man: man/ziptool.man +update-man: man/CMakeFiles/update-man.dir/build.make +.PHONY : update-man + +# Rule to build all files generated by this target. +man/CMakeFiles/update-man.dir/build: update-man +.PHONY : man/CMakeFiles/update-man.dir/build + +man/CMakeFiles/update-man.dir/clean: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && $(CMAKE_COMMAND) -P CMakeFiles/update-man.dir/cmake_clean.cmake +.PHONY : man/CMakeFiles/update-man.dir/clean + +man/CMakeFiles/update-man.dir/depend: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(CMAKE_COMMAND) -E cmake_depends "Unix Makefiles" "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3" "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/man" "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/CMakeFiles/update-man.dir/DependInfo.cmake" "--color=$(COLOR)" +.PHONY : man/CMakeFiles/update-man.dir/depend + diff --git a/thirdparty/libzip-1.11.3/build-emcmake/man/CMakeFiles/update-man.dir/cmake_clean.cmake b/thirdparty/libzip-1.11.3/build-emcmake/man/CMakeFiles/update-man.dir/cmake_clean.cmake new file mode 100644 index 0000000..034488f --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/man/CMakeFiles/update-man.dir/cmake_clean.cmake @@ -0,0 +1,113 @@ +file(REMOVE_RECURSE + "CMakeFiles/update-man" + "ZIP_SOURCE_GET_ARGS.man" + "libzip.man" + "zip_add.man" + "zip_add_dir.man" + "zip_close.man" + "zip_compression_method_supported.man" + "zip_delete.man" + "zip_dir_add.man" + "zip_discard.man" + "zip_encryption_method_supported.man" + "zip_error_clear.man" + "zip_error_code_system.man" + "zip_error_code_zip.man" + "zip_error_fini.man" + "zip_error_get.man" + "zip_error_get_sys_type.man" + "zip_error_init.man" + "zip_error_set.man" + "zip_error_set_from_source.man" + "zip_error_strerror.man" + "zip_error_system_type.man" + "zip_error_to_data.man" + "zip_error_to_str.man" + "zip_errors.man" + "zip_fclose.man" + "zip_fdopen.man" + "zip_file_add.man" + "zip_file_attributes_init.man" + "zip_file_extra_field_delete.man" + "zip_file_extra_field_get.man" + "zip_file_extra_field_set.man" + "zip_file_extra_fields_count.man" + "zip_file_get_comment.man" + "zip_file_get_error.man" + "zip_file_get_external_attributes.man" + "zip_file_rename.man" + "zip_file_set_comment.man" + "zip_file_set_encryption.man" + "zip_file_set_external_attributes.man" + "zip_file_set_mtime.man" + "zip_file_strerror.man" + "zip_fopen.man" + "zip_fopen_encrypted.man" + "zip_fread.man" + "zip_fseek.man" + "zip_ftell.man" + "zip_get_archive_comment.man" + "zip_get_archive_flag.man" + "zip_get_error.man" + "zip_get_file_comment.man" + "zip_get_name.man" + "zip_get_num_entries.man" + "zip_get_num_files.man" + "zip_libzip_version.man" + "zip_name_locate.man" + "zip_open.man" + "zip_register_cancel_callback_with_state.man" + "zip_register_progress_callback.man" + "zip_register_progress_callback_with_state.man" + "zip_rename.man" + "zip_set_archive_comment.man" + "zip_set_archive_flag.man" + "zip_set_default_password.man" + "zip_set_file_comment.man" + "zip_set_file_compression.man" + "zip_source.man" + "zip_source_begin_write.man" + "zip_source_buffer.man" + "zip_source_buffer_fragment.man" + "zip_source_close.man" + "zip_source_commit_write.man" + "zip_source_error.man" + "zip_source_file.man" + "zip_source_filep.man" + "zip_source_free.man" + "zip_source_function.man" + "zip_source_is_deleted.man" + "zip_source_is_seekable.man" + "zip_source_keep.man" + "zip_source_layered.man" + "zip_source_make_command_bitmap.man" + "zip_source_open.man" + "zip_source_read.man" + "zip_source_rollback_write.man" + "zip_source_seek.man" + "zip_source_seek_compute_offset.man" + "zip_source_seek_write.man" + "zip_source_stat.man" + "zip_source_tell.man" + "zip_source_tell_write.man" + "zip_source_win32a.man" + "zip_source_win32handle.man" + "zip_source_win32w.man" + "zip_source_window_create.man" + "zip_source_write.man" + "zip_source_zip.man" + "zip_source_zip_file.man" + "zip_stat.man" + "zip_stat_init.man" + "zip_unchange.man" + "zip_unchange_all.man" + "zip_unchange_archive.man" + "zipcmp.man" + "zipmerge.man" + "ziptool.man" +) + +# Per-language clean rules from dependency scanning. +foreach(lang ) + include(CMakeFiles/update-man.dir/cmake_clean_${lang}.cmake OPTIONAL) +endforeach() diff --git a/thirdparty/libzip-1.11.3/build-emcmake/man/CMakeFiles/update-man.dir/compiler_depend.make b/thirdparty/libzip-1.11.3/build-emcmake/man/CMakeFiles/update-man.dir/compiler_depend.make new file mode 100644 index 0000000..1edaa76 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/man/CMakeFiles/update-man.dir/compiler_depend.make @@ -0,0 +1,2 @@ +# Empty custom commands generated dependencies file for update-man. +# This may be replaced when dependencies are built. diff --git a/thirdparty/libzip-1.11.3/build-emcmake/man/CMakeFiles/update-man.dir/compiler_depend.ts b/thirdparty/libzip-1.11.3/build-emcmake/man/CMakeFiles/update-man.dir/compiler_depend.ts new file mode 100644 index 0000000..92caa70 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/man/CMakeFiles/update-man.dir/compiler_depend.ts @@ -0,0 +1,2 @@ +# CMAKE generated file: DO NOT EDIT! +# Timestamp file for custom commands dependencies management for update-man. diff --git a/thirdparty/libzip-1.11.3/build-emcmake/man/CMakeFiles/update-man.dir/progress.make b/thirdparty/libzip-1.11.3/build-emcmake/man/CMakeFiles/update-man.dir/progress.make new file mode 100644 index 0000000..2dbc2ad --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/man/CMakeFiles/update-man.dir/progress.make @@ -0,0 +1,106 @@ +CMAKE_PROGRESS_1 = +CMAKE_PROGRESS_2 = +CMAKE_PROGRESS_3 = 48 +CMAKE_PROGRESS_4 = +CMAKE_PROGRESS_5 = +CMAKE_PROGRESS_6 = +CMAKE_PROGRESS_7 = 49 +CMAKE_PROGRESS_8 = +CMAKE_PROGRESS_9 = +CMAKE_PROGRESS_10 = +CMAKE_PROGRESS_11 = +CMAKE_PROGRESS_12 = 50 +CMAKE_PROGRESS_13 = +CMAKE_PROGRESS_14 = +CMAKE_PROGRESS_15 = +CMAKE_PROGRESS_16 = +CMAKE_PROGRESS_17 = 51 +CMAKE_PROGRESS_18 = +CMAKE_PROGRESS_19 = +CMAKE_PROGRESS_20 = +CMAKE_PROGRESS_21 = 52 +CMAKE_PROGRESS_22 = +CMAKE_PROGRESS_23 = +CMAKE_PROGRESS_24 = +CMAKE_PROGRESS_25 = +CMAKE_PROGRESS_26 = 53 +CMAKE_PROGRESS_27 = +CMAKE_PROGRESS_28 = +CMAKE_PROGRESS_29 = +CMAKE_PROGRESS_30 = 54 +CMAKE_PROGRESS_31 = +CMAKE_PROGRESS_32 = +CMAKE_PROGRESS_33 = +CMAKE_PROGRESS_34 = +CMAKE_PROGRESS_35 = 55 +CMAKE_PROGRESS_36 = +CMAKE_PROGRESS_37 = +CMAKE_PROGRESS_38 = +CMAKE_PROGRESS_39 = 56 +CMAKE_PROGRESS_40 = +CMAKE_PROGRESS_41 = +CMAKE_PROGRESS_42 = +CMAKE_PROGRESS_43 = +CMAKE_PROGRESS_44 = 57 +CMAKE_PROGRESS_45 = +CMAKE_PROGRESS_46 = +CMAKE_PROGRESS_47 = +CMAKE_PROGRESS_48 = 58 +CMAKE_PROGRESS_49 = +CMAKE_PROGRESS_50 = +CMAKE_PROGRESS_51 = +CMAKE_PROGRESS_52 = +CMAKE_PROGRESS_53 = 59 +CMAKE_PROGRESS_54 = +CMAKE_PROGRESS_55 = +CMAKE_PROGRESS_56 = +CMAKE_PROGRESS_57 = 60 +CMAKE_PROGRESS_58 = +CMAKE_PROGRESS_59 = +CMAKE_PROGRESS_60 = +CMAKE_PROGRESS_61 = +CMAKE_PROGRESS_62 = 61 +CMAKE_PROGRESS_63 = +CMAKE_PROGRESS_64 = +CMAKE_PROGRESS_65 = +CMAKE_PROGRESS_66 = +CMAKE_PROGRESS_67 = 62 +CMAKE_PROGRESS_68 = +CMAKE_PROGRESS_69 = +CMAKE_PROGRESS_70 = +CMAKE_PROGRESS_71 = 63 +CMAKE_PROGRESS_72 = +CMAKE_PROGRESS_73 = +CMAKE_PROGRESS_74 = +CMAKE_PROGRESS_75 = +CMAKE_PROGRESS_76 = 64 +CMAKE_PROGRESS_77 = +CMAKE_PROGRESS_78 = +CMAKE_PROGRESS_79 = +CMAKE_PROGRESS_80 = 65 +CMAKE_PROGRESS_81 = +CMAKE_PROGRESS_82 = +CMAKE_PROGRESS_83 = +CMAKE_PROGRESS_84 = +CMAKE_PROGRESS_85 = 66 +CMAKE_PROGRESS_86 = +CMAKE_PROGRESS_87 = +CMAKE_PROGRESS_88 = +CMAKE_PROGRESS_89 = 67 +CMAKE_PROGRESS_90 = +CMAKE_PROGRESS_91 = +CMAKE_PROGRESS_92 = +CMAKE_PROGRESS_93 = +CMAKE_PROGRESS_94 = 68 +CMAKE_PROGRESS_95 = +CMAKE_PROGRESS_96 = +CMAKE_PROGRESS_97 = +CMAKE_PROGRESS_98 = 69 +CMAKE_PROGRESS_99 = +CMAKE_PROGRESS_100 = +CMAKE_PROGRESS_101 = +CMAKE_PROGRESS_102 = +CMAKE_PROGRESS_103 = 70 +CMAKE_PROGRESS_104 = +CMAKE_PROGRESS_105 = + diff --git a/thirdparty/libzip-1.11.3/build-emcmake/man/CMakeFiles/update_zip_errors.dir/DependInfo.cmake b/thirdparty/libzip-1.11.3/build-emcmake/man/CMakeFiles/update_zip_errors.dir/DependInfo.cmake new file mode 100644 index 0000000..29b95a5 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/man/CMakeFiles/update_zip_errors.dir/DependInfo.cmake @@ -0,0 +1,22 @@ + +# Consider dependencies only in project. +set(CMAKE_DEPENDS_IN_PROJECT_ONLY OFF) + +# The set of languages for which implicit dependencies are needed: +set(CMAKE_DEPENDS_LANGUAGES + ) + +# The set of dependency files which are needed: +set(CMAKE_DEPENDS_DEPENDENCY_FILES + ) + +# Targets to which this target links which contain Fortran sources. +set(CMAKE_Fortran_TARGET_LINKED_INFO_FILES + ) + +# Targets to which this target links which contain Fortran sources. +set(CMAKE_Fortran_TARGET_FORWARD_LINKED_INFO_FILES + ) + +# Fortran module output directory. +set(CMAKE_Fortran_TARGET_MODULE_DIR "") diff --git a/thirdparty/libzip-1.11.3/build-emcmake/man/CMakeFiles/update_zip_errors.dir/build.make b/thirdparty/libzip-1.11.3/build-emcmake/man/CMakeFiles/update_zip_errors.dir/build.make new file mode 100644 index 0000000..bbf657e --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/man/CMakeFiles/update_zip_errors.dir/build.make @@ -0,0 +1,88 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.28 + +# Delete rule output on recipe failure. +.DELETE_ON_ERROR: + +#============================================================================= +# Special targets provided by cmake. + +# Disable implicit rules so canonical targets will work. +.SUFFIXES: + +# Disable VCS-based implicit rules. +% : %,v + +# Disable VCS-based implicit rules. +% : RCS/% + +# Disable VCS-based implicit rules. +% : RCS/%,v + +# Disable VCS-based implicit rules. +% : SCCS/s.% + +# Disable VCS-based implicit rules. +% : s.% + +.SUFFIXES: .hpux_make_needs_suffix_list + +# Command-line flag to silence nested $(MAKE). +$(VERBOSE)MAKESILENT = -s + +#Suppress display of executed commands. +$(VERBOSE).SILENT: + +# A target that is always out of date. +cmake_force: +.PHONY : cmake_force + +#============================================================================= +# Set environment variables for the build. + +# The shell in which to execute make rules. +SHELL = /bin/sh + +# The CMake executable. +CMAKE_COMMAND = /usr/bin/cmake + +# The command to remove a file. +RM = /usr/bin/cmake -E rm -f + +# Escaping for special characters. +EQUALS = = + +# The top-level source directory on which CMake was run. +CMAKE_SOURCE_DIR = "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3" + +# The top-level build directory on which CMake was run. +CMAKE_BINARY_DIR = "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" + +# Utility rule file for update_zip_errors. + +# Include any custom commands dependencies for this target. +include man/CMakeFiles/update_zip_errors.dir/compiler_depend.make + +# Include the progress variables for this target. +include man/CMakeFiles/update_zip_errors.dir/progress.make + +man/CMakeFiles/update_zip_errors: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip.h +man/CMakeFiles/update_zip_errors: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_errors.mdoc + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && sh /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/make_zip_errors.sh /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip.h /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/man/zip_errors.mdoc + +update_zip_errors: man/CMakeFiles/update_zip_errors +update_zip_errors: man/CMakeFiles/update_zip_errors.dir/build.make +.PHONY : update_zip_errors + +# Rule to build all files generated by this target. +man/CMakeFiles/update_zip_errors.dir/build: update_zip_errors +.PHONY : man/CMakeFiles/update_zip_errors.dir/build + +man/CMakeFiles/update_zip_errors.dir/clean: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" && $(CMAKE_COMMAND) -P CMakeFiles/update_zip_errors.dir/cmake_clean.cmake +.PHONY : man/CMakeFiles/update_zip_errors.dir/clean + +man/CMakeFiles/update_zip_errors.dir/depend: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(CMAKE_COMMAND) -E cmake_depends "Unix Makefiles" "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3" "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/man" "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man" "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/CMakeFiles/update_zip_errors.dir/DependInfo.cmake" "--color=$(COLOR)" +.PHONY : man/CMakeFiles/update_zip_errors.dir/depend + diff --git a/thirdparty/libzip-1.11.3/build-emcmake/man/CMakeFiles/update_zip_errors.dir/cmake_clean.cmake b/thirdparty/libzip-1.11.3/build-emcmake/man/CMakeFiles/update_zip_errors.dir/cmake_clean.cmake new file mode 100644 index 0000000..54bb66a --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/man/CMakeFiles/update_zip_errors.dir/cmake_clean.cmake @@ -0,0 +1,8 @@ +file(REMOVE_RECURSE + "CMakeFiles/update_zip_errors" +) + +# Per-language clean rules from dependency scanning. +foreach(lang ) + include(CMakeFiles/update_zip_errors.dir/cmake_clean_${lang}.cmake OPTIONAL) +endforeach() diff --git a/thirdparty/libzip-1.11.3/build-emcmake/man/CMakeFiles/update_zip_errors.dir/compiler_depend.make b/thirdparty/libzip-1.11.3/build-emcmake/man/CMakeFiles/update_zip_errors.dir/compiler_depend.make new file mode 100644 index 0000000..cff0226 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/man/CMakeFiles/update_zip_errors.dir/compiler_depend.make @@ -0,0 +1,2 @@ +# Empty custom commands generated dependencies file for update_zip_errors. +# This may be replaced when dependencies are built. diff --git a/thirdparty/libzip-1.11.3/build-emcmake/man/CMakeFiles/update_zip_errors.dir/compiler_depend.ts b/thirdparty/libzip-1.11.3/build-emcmake/man/CMakeFiles/update_zip_errors.dir/compiler_depend.ts new file mode 100644 index 0000000..fed624b --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/man/CMakeFiles/update_zip_errors.dir/compiler_depend.ts @@ -0,0 +1,2 @@ +# CMAKE generated file: DO NOT EDIT! +# Timestamp file for custom commands dependencies management for update_zip_errors. diff --git a/thirdparty/libzip-1.11.3/build-emcmake/man/CMakeFiles/update_zip_errors.dir/progress.make b/thirdparty/libzip-1.11.3/build-emcmake/man/CMakeFiles/update_zip_errors.dir/progress.make new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/man/CMakeFiles/update_zip_errors.dir/progress.make @@ -0,0 +1 @@ + diff --git a/thirdparty/libzip-1.11.3/build-emcmake/man/CTestTestfile.cmake b/thirdparty/libzip-1.11.3/build-emcmake/man/CTestTestfile.cmake new file mode 100644 index 0000000..b7c0775 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/man/CTestTestfile.cmake @@ -0,0 +1,6 @@ +# CMake generated Testfile for +# Source directory: /home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/man +# Build directory: /home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man +# +# This file includes the relevant testing commands required for +# testing this directory and lists subdirectories to be tested as well. diff --git a/thirdparty/libzip-1.11.3/build-emcmake/man/Makefile b/thirdparty/libzip-1.11.3/build-emcmake/man/Makefile new file mode 100644 index 0000000..0345a00 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/man/Makefile @@ -0,0 +1,260 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.28 + +# Default target executed when no arguments are given to make. +default_target: all +.PHONY : default_target + +# Allow only one "make -f Makefile2" at a time, but pass parallelism. +.NOTPARALLEL: + +#============================================================================= +# Special targets provided by cmake. + +# Disable implicit rules so canonical targets will work. +.SUFFIXES: + +# Disable VCS-based implicit rules. +% : %,v + +# Disable VCS-based implicit rules. +% : RCS/% + +# Disable VCS-based implicit rules. +% : RCS/%,v + +# Disable VCS-based implicit rules. +% : SCCS/s.% + +# Disable VCS-based implicit rules. +% : s.% + +.SUFFIXES: .hpux_make_needs_suffix_list + +# Command-line flag to silence nested $(MAKE). +$(VERBOSE)MAKESILENT = -s + +#Suppress display of executed commands. +$(VERBOSE).SILENT: + +# A target that is always out of date. +cmake_force: +.PHONY : cmake_force + +#============================================================================= +# Set environment variables for the build. + +# The shell in which to execute make rules. +SHELL = /bin/sh + +# The CMake executable. +CMAKE_COMMAND = /usr/bin/cmake + +# The command to remove a file. +RM = /usr/bin/cmake -E rm -f + +# Escaping for special characters. +EQUALS = = + +# The top-level source directory on which CMake was run. +CMAKE_SOURCE_DIR = "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3" + +# The top-level build directory on which CMake was run. +CMAKE_BINARY_DIR = "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" + +#============================================================================= +# Targets provided globally by CMake. + +# Special rule for the target test +test: + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --cyan "Running tests..." + /usr/bin/ctest --force-new-ctest-process $(ARGS) +.PHONY : test + +# Special rule for the target test +test/fast: test +.PHONY : test/fast + +# Special rule for the target edit_cache +edit_cache: + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --cyan "No interactive CMake dialog available..." + /usr/bin/cmake -E echo No\ interactive\ CMake\ dialog\ available. +.PHONY : edit_cache + +# Special rule for the target edit_cache +edit_cache/fast: edit_cache +.PHONY : edit_cache/fast + +# Special rule for the target rebuild_cache +rebuild_cache: + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --cyan "Running CMake to regenerate build system..." + /usr/bin/cmake --regenerate-during-build -S$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) +.PHONY : rebuild_cache + +# Special rule for the target rebuild_cache +rebuild_cache/fast: rebuild_cache +.PHONY : rebuild_cache/fast + +# Special rule for the target list_install_components +list_install_components: + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --cyan "Available install components are: \"Unspecified\"" +.PHONY : list_install_components + +# Special rule for the target list_install_components +list_install_components/fast: list_install_components +.PHONY : list_install_components/fast + +# Special rule for the target install +install: preinstall + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --cyan "Install the project..." + /usr/bin/cmake -P cmake_install.cmake +.PHONY : install + +# Special rule for the target install +install/fast: preinstall/fast + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --cyan "Install the project..." + /usr/bin/cmake -P cmake_install.cmake +.PHONY : install/fast + +# Special rule for the target install/local +install/local: preinstall + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --cyan "Installing only the local directory..." + /usr/bin/cmake -DCMAKE_INSTALL_LOCAL_ONLY=1 -P cmake_install.cmake +.PHONY : install/local + +# Special rule for the target install/local +install/local/fast: preinstall/fast + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --cyan "Installing only the local directory..." + /usr/bin/cmake -DCMAKE_INSTALL_LOCAL_ONLY=1 -P cmake_install.cmake +.PHONY : install/local/fast + +# Special rule for the target install/strip +install/strip: preinstall + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --cyan "Installing the project stripped..." + /usr/bin/cmake -DCMAKE_INSTALL_DO_STRIP=1 -P cmake_install.cmake +.PHONY : install/strip + +# Special rule for the target install/strip +install/strip/fast: preinstall/fast + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --cyan "Installing the project stripped..." + /usr/bin/cmake -DCMAKE_INSTALL_DO_STRIP=1 -P cmake_install.cmake +.PHONY : install/strip/fast + +# The main all target +all: cmake_check_build_system + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(CMAKE_COMMAND) -E cmake_progress_start "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man//CMakeFiles/progress.marks" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 man/all + $(CMAKE_COMMAND) -E cmake_progress_start "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" 0 +.PHONY : all + +# The main clean target +clean: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 man/clean +.PHONY : clean + +# The main clean target +clean/fast: clean +.PHONY : clean/fast + +# Prepare targets for installation. +preinstall: all + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 man/preinstall +.PHONY : preinstall + +# Prepare targets for installation. +preinstall/fast: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 man/preinstall +.PHONY : preinstall/fast + +# clear depends +depend: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(CMAKE_COMMAND) -S$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles/Makefile.cmake 1 +.PHONY : depend + +# Convenience name for target. +man/CMakeFiles/man.dir/rule: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 man/CMakeFiles/man.dir/rule +.PHONY : man/CMakeFiles/man.dir/rule + +# Convenience name for target. +man: man/CMakeFiles/man.dir/rule +.PHONY : man + +# fast build rule for target. +man/fast: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f man/CMakeFiles/man.dir/build.make man/CMakeFiles/man.dir/build +.PHONY : man/fast + +# Convenience name for target. +man/CMakeFiles/update-man.dir/rule: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 man/CMakeFiles/update-man.dir/rule +.PHONY : man/CMakeFiles/update-man.dir/rule + +# Convenience name for target. +update-man: man/CMakeFiles/update-man.dir/rule +.PHONY : update-man + +# fast build rule for target. +update-man/fast: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f man/CMakeFiles/update-man.dir/build.make man/CMakeFiles/update-man.dir/build +.PHONY : update-man/fast + +# Convenience name for target. +man/CMakeFiles/update-html.dir/rule: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 man/CMakeFiles/update-html.dir/rule +.PHONY : man/CMakeFiles/update-html.dir/rule + +# Convenience name for target. +update-html: man/CMakeFiles/update-html.dir/rule +.PHONY : update-html + +# fast build rule for target. +update-html/fast: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f man/CMakeFiles/update-html.dir/build.make man/CMakeFiles/update-html.dir/build +.PHONY : update-html/fast + +# Convenience name for target. +man/CMakeFiles/update_zip_errors.dir/rule: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 man/CMakeFiles/update_zip_errors.dir/rule +.PHONY : man/CMakeFiles/update_zip_errors.dir/rule + +# Convenience name for target. +update_zip_errors: man/CMakeFiles/update_zip_errors.dir/rule +.PHONY : update_zip_errors + +# fast build rule for target. +update_zip_errors/fast: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f man/CMakeFiles/update_zip_errors.dir/build.make man/CMakeFiles/update_zip_errors.dir/build +.PHONY : update_zip_errors/fast + +# Help Target +help: + @echo "The following are some of the valid targets for this Makefile:" + @echo "... all (the default if no target is provided)" + @echo "... clean" + @echo "... depend" + @echo "... edit_cache" + @echo "... install" + @echo "... install/local" + @echo "... install/strip" + @echo "... list_install_components" + @echo "... rebuild_cache" + @echo "... test" + @echo "... man" + @echo "... update-html" + @echo "... update-man" + @echo "... update_zip_errors" +.PHONY : help + + + +#============================================================================= +# Special targets to cleanup operation of make. + +# Special rule to run CMake to check the build system integrity. +# No rule that depends on this can have commands that come from listfiles +# because they might be regenerated. +cmake_check_build_system: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(CMAKE_COMMAND) -S$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles/Makefile.cmake 0 +.PHONY : cmake_check_build_system + diff --git a/thirdparty/libzip-1.11.3/build-emcmake/man/ZIP_SOURCE_GET_ARGS.3 b/thirdparty/libzip-1.11.3/build-emcmake/man/ZIP_SOURCE_GET_ARGS.3 new file mode 100644 index 0000000..25b8193 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/man/ZIP_SOURCE_GET_ARGS.3 @@ -0,0 +1,79 @@ +.\" ZIP_SOURCE_GET_ARGS -- validate and cast arguments to source callback +.\" Copyright (C) 2014-2017 Dieter Baron and Thomas Klausner +.\" +.\" This file is part of libzip, a library to manipulate ZIP archives. +.\" The authors can be contacted at +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in +.\" the documentation and/or other materials provided with the +.\" distribution. +.\" 3. The names of the authors may not be used to endorse or promote +.\" products derived from this software without specific prior +.\" written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS +.\" OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +.\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +.\" DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE +.\" GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +.\" IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +.\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN +.\" IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.\" +.Dd December 18, 2017 +.Dt ZIP_SOURCE_GET_ARGS 3 +.Os +.Sh NAME +.Nm ZIP_SOURCE_GET_ARGS +.Nd validate and cast arguments to source callback +.Sh LIBRARY +libzip (-lzip) +.Sh SYNOPSIS +.In zip.h +.Ft type * +.Fn ZIP_SOURCE_GET_ARGS "type" "void *data" "zip_uint64_t len" "zip_error_t *error" +.Sh DESCRIPTION +The +.Fn ZIP_SOURCE_GET_ARGS +macro casts +.Ar data +to a pointer to +.Ar type . +.Sh RETURN VALUES +On success, +.Fn ZIP_SOURCE_GET_ARGS +returns +.Ar data . +In case of error, it returns +.Dv NULL +and sets +.Ar error . +.Sh ERRORS +.Fn ZIP_SOURCE_GET_ARGS +fails if: +.Bl -tag -width Er +.It Bq Er ZIP_ER_INVAL +.Ar len +is less than the size of +.Ar type +.El +.Sh SEE ALSO +.Xr libzip 3 , +.Xr zip_source_function 3 +.Sh HISTORY +.Fn ZIP_SOURCE_GET_ARGS +was added in libzip 1.0. +.Sh AUTHORS +.An -nosplit +.An Dieter Baron Aq Mt dillo@nih.at +and +.An Thomas Klausner Aq Mt wiz@gatalith.at diff --git a/thirdparty/libzip-1.11.3/build-emcmake/man/cmake_install.cmake b/thirdparty/libzip-1.11.3/build-emcmake/man/cmake_install.cmake new file mode 100644 index 0000000..628eeb4 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/man/cmake_install.cmake @@ -0,0 +1,567 @@ +# Install script for directory: /home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/man + +# Set the install prefix +if(NOT DEFINED CMAKE_INSTALL_PREFIX) + set(CMAKE_INSTALL_PREFIX "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/install") +endif() +string(REGEX REPLACE "/$" "" CMAKE_INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX}") + +# Set the install configuration name. +if(NOT DEFINED CMAKE_INSTALL_CONFIG_NAME) + if(BUILD_TYPE) + string(REGEX REPLACE "^[^A-Za-z0-9_]+" "" + CMAKE_INSTALL_CONFIG_NAME "${BUILD_TYPE}") + else() + set(CMAKE_INSTALL_CONFIG_NAME "") + endif() + message(STATUS "Install configuration: \"${CMAKE_INSTALL_CONFIG_NAME}\"") +endif() + +# Set the component getting installed. +if(NOT CMAKE_INSTALL_COMPONENT) + if(COMPONENT) + message(STATUS "Install component: \"${COMPONENT}\"") + set(CMAKE_INSTALL_COMPONENT "${COMPONENT}") + else() + set(CMAKE_INSTALL_COMPONENT) + endif() +endif() + +# Is this installation the result of a crosscompile? +if(NOT DEFINED CMAKE_CROSSCOMPILING) + set(CMAKE_CROSSCOMPILING "TRUE") +endif() + +# Set default install directory permissions. +if(NOT DEFINED CMAKE_OBJDUMP) + set(CMAKE_OBJDUMP "/usr/bin/objdump") +endif() + +if(CMAKE_INSTALL_COMPONENT STREQUAL "Unspecified" OR NOT CMAKE_INSTALL_COMPONENT) + file(INSTALL DESTINATION "${CMAKE_INSTALL_PREFIX}/share/man/man3" TYPE FILE FILES "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/ZIP_SOURCE_GET_ARGS.3") +endif() + +if(CMAKE_INSTALL_COMPONENT STREQUAL "Unspecified" OR NOT CMAKE_INSTALL_COMPONENT) + file(INSTALL DESTINATION "${CMAKE_INSTALL_PREFIX}/share/man/man3" TYPE FILE FILES "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/libzip.3") +endif() + +if(CMAKE_INSTALL_COMPONENT STREQUAL "Unspecified" OR NOT CMAKE_INSTALL_COMPONENT) + file(INSTALL DESTINATION "${CMAKE_INSTALL_PREFIX}/share/man/man3" TYPE FILE FILES "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_add.3") +endif() + +if(CMAKE_INSTALL_COMPONENT STREQUAL "Unspecified" OR NOT CMAKE_INSTALL_COMPONENT) + file(INSTALL DESTINATION "${CMAKE_INSTALL_PREFIX}/share/man/man3" TYPE FILE FILES "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_add_dir.3") +endif() + +if(CMAKE_INSTALL_COMPONENT STREQUAL "Unspecified" OR NOT CMAKE_INSTALL_COMPONENT) + file(INSTALL DESTINATION "${CMAKE_INSTALL_PREFIX}/share/man/man3" TYPE FILE FILES "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_close.3") +endif() + +if(CMAKE_INSTALL_COMPONENT STREQUAL "Unspecified" OR NOT CMAKE_INSTALL_COMPONENT) + file(INSTALL DESTINATION "${CMAKE_INSTALL_PREFIX}/share/man/man3" TYPE FILE FILES "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_compression_method_supported.3") +endif() + +if(CMAKE_INSTALL_COMPONENT STREQUAL "Unspecified" OR NOT CMAKE_INSTALL_COMPONENT) + file(INSTALL DESTINATION "${CMAKE_INSTALL_PREFIX}/share/man/man3" TYPE FILE FILES "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_delete.3") +endif() + +if(CMAKE_INSTALL_COMPONENT STREQUAL "Unspecified" OR NOT CMAKE_INSTALL_COMPONENT) + file(INSTALL DESTINATION "${CMAKE_INSTALL_PREFIX}/share/man/man3" TYPE FILE FILES "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_dir_add.3") +endif() + +if(CMAKE_INSTALL_COMPONENT STREQUAL "Unspecified" OR NOT CMAKE_INSTALL_COMPONENT) + file(INSTALL DESTINATION "${CMAKE_INSTALL_PREFIX}/share/man/man3" TYPE FILE FILES "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_discard.3") +endif() + +if(CMAKE_INSTALL_COMPONENT STREQUAL "Unspecified" OR NOT CMAKE_INSTALL_COMPONENT) + file(INSTALL DESTINATION "${CMAKE_INSTALL_PREFIX}/share/man/man3" TYPE FILE FILES "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_encryption_method_supported.3") +endif() + +if(CMAKE_INSTALL_COMPONENT STREQUAL "Unspecified" OR NOT CMAKE_INSTALL_COMPONENT) + file(INSTALL DESTINATION "${CMAKE_INSTALL_PREFIX}/share/man/man3" TYPE FILE FILES "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_error_clear.3") +endif() + +if(CMAKE_INSTALL_COMPONENT STREQUAL "Unspecified" OR NOT CMAKE_INSTALL_COMPONENT) + file(INSTALL DESTINATION "${CMAKE_INSTALL_PREFIX}/share/man/man3" TYPE FILE FILES "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_error_code_system.3") +endif() + +if(CMAKE_INSTALL_COMPONENT STREQUAL "Unspecified" OR NOT CMAKE_INSTALL_COMPONENT) + file(INSTALL DESTINATION "${CMAKE_INSTALL_PREFIX}/share/man/man3" TYPE FILE FILES "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_error_code_zip.3") +endif() + +if(CMAKE_INSTALL_COMPONENT STREQUAL "Unspecified" OR NOT CMAKE_INSTALL_COMPONENT) + file(INSTALL DESTINATION "${CMAKE_INSTALL_PREFIX}/share/man/man3" TYPE FILE FILES "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_error_fini.3") +endif() + +if(CMAKE_INSTALL_COMPONENT STREQUAL "Unspecified" OR NOT CMAKE_INSTALL_COMPONENT) + file(INSTALL DESTINATION "${CMAKE_INSTALL_PREFIX}/share/man/man3" TYPE FILE FILES "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_error_get.3") +endif() + +if(CMAKE_INSTALL_COMPONENT STREQUAL "Unspecified" OR NOT CMAKE_INSTALL_COMPONENT) + file(INSTALL DESTINATION "${CMAKE_INSTALL_PREFIX}/share/man/man3" TYPE FILE FILES "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_error_get_sys_type.3") +endif() + +if(CMAKE_INSTALL_COMPONENT STREQUAL "Unspecified" OR NOT CMAKE_INSTALL_COMPONENT) + file(INSTALL DESTINATION "${CMAKE_INSTALL_PREFIX}/share/man/man3" TYPE FILE FILES "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_error_init.3") +endif() + +if(CMAKE_INSTALL_COMPONENT STREQUAL "Unspecified" OR NOT CMAKE_INSTALL_COMPONENT) + file(INSTALL DESTINATION "${CMAKE_INSTALL_PREFIX}/share/man/man3" TYPE FILE FILES "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_error_set.3") +endif() + +if(CMAKE_INSTALL_COMPONENT STREQUAL "Unspecified" OR NOT CMAKE_INSTALL_COMPONENT) + file(INSTALL DESTINATION "${CMAKE_INSTALL_PREFIX}/share/man/man3" TYPE FILE FILES "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_error_set_from_source.3") +endif() + +if(CMAKE_INSTALL_COMPONENT STREQUAL "Unspecified" OR NOT CMAKE_INSTALL_COMPONENT) + file(INSTALL DESTINATION "${CMAKE_INSTALL_PREFIX}/share/man/man3" TYPE FILE FILES "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_error_strerror.3") +endif() + +if(CMAKE_INSTALL_COMPONENT STREQUAL "Unspecified" OR NOT CMAKE_INSTALL_COMPONENT) + file(INSTALL DESTINATION "${CMAKE_INSTALL_PREFIX}/share/man/man3" TYPE FILE FILES "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_error_system_type.3") +endif() + +if(CMAKE_INSTALL_COMPONENT STREQUAL "Unspecified" OR NOT CMAKE_INSTALL_COMPONENT) + file(INSTALL DESTINATION "${CMAKE_INSTALL_PREFIX}/share/man/man3" TYPE FILE FILES "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_error_to_data.3") +endif() + +if(CMAKE_INSTALL_COMPONENT STREQUAL "Unspecified" OR NOT CMAKE_INSTALL_COMPONENT) + file(INSTALL DESTINATION "${CMAKE_INSTALL_PREFIX}/share/man/man3" TYPE FILE FILES "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_error_to_str.3") +endif() + +if(CMAKE_INSTALL_COMPONENT STREQUAL "Unspecified" OR NOT CMAKE_INSTALL_COMPONENT) + file(INSTALL DESTINATION "${CMAKE_INSTALL_PREFIX}/share/man/man3" TYPE FILE FILES "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_errors.3") +endif() + +if(CMAKE_INSTALL_COMPONENT STREQUAL "Unspecified" OR NOT CMAKE_INSTALL_COMPONENT) + file(INSTALL DESTINATION "${CMAKE_INSTALL_PREFIX}/share/man/man3" TYPE FILE FILES "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_fclose.3") +endif() + +if(CMAKE_INSTALL_COMPONENT STREQUAL "Unspecified" OR NOT CMAKE_INSTALL_COMPONENT) + file(INSTALL DESTINATION "${CMAKE_INSTALL_PREFIX}/share/man/man3" TYPE FILE FILES "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_fdopen.3") +endif() + +if(CMAKE_INSTALL_COMPONENT STREQUAL "Unspecified" OR NOT CMAKE_INSTALL_COMPONENT) + file(INSTALL DESTINATION "${CMAKE_INSTALL_PREFIX}/share/man/man3" TYPE FILE FILES "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_file_add.3") +endif() + +if(CMAKE_INSTALL_COMPONENT STREQUAL "Unspecified" OR NOT CMAKE_INSTALL_COMPONENT) + file(INSTALL DESTINATION "${CMAKE_INSTALL_PREFIX}/share/man/man3" TYPE FILE FILES "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_file_attributes_init.3") +endif() + +if(CMAKE_INSTALL_COMPONENT STREQUAL "Unspecified" OR NOT CMAKE_INSTALL_COMPONENT) + file(INSTALL DESTINATION "${CMAKE_INSTALL_PREFIX}/share/man/man3" TYPE FILE FILES "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_file_extra_field_delete.3") +endif() + +if(CMAKE_INSTALL_COMPONENT STREQUAL "Unspecified" OR NOT CMAKE_INSTALL_COMPONENT) + file(INSTALL DESTINATION "${CMAKE_INSTALL_PREFIX}/share/man/man3" TYPE FILE FILES "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_file_extra_field_get.3") +endif() + +if(CMAKE_INSTALL_COMPONENT STREQUAL "Unspecified" OR NOT CMAKE_INSTALL_COMPONENT) + file(INSTALL DESTINATION "${CMAKE_INSTALL_PREFIX}/share/man/man3" TYPE FILE FILES "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_file_extra_field_set.3") +endif() + +if(CMAKE_INSTALL_COMPONENT STREQUAL "Unspecified" OR NOT CMAKE_INSTALL_COMPONENT) + file(INSTALL DESTINATION "${CMAKE_INSTALL_PREFIX}/share/man/man3" TYPE FILE FILES "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_file_extra_fields_count.3") +endif() + +if(CMAKE_INSTALL_COMPONENT STREQUAL "Unspecified" OR NOT CMAKE_INSTALL_COMPONENT) + file(INSTALL DESTINATION "${CMAKE_INSTALL_PREFIX}/share/man/man3" TYPE FILE FILES "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_file_get_comment.3") +endif() + +if(CMAKE_INSTALL_COMPONENT STREQUAL "Unspecified" OR NOT CMAKE_INSTALL_COMPONENT) + file(INSTALL DESTINATION "${CMAKE_INSTALL_PREFIX}/share/man/man3" TYPE FILE FILES "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_file_get_error.3") +endif() + +if(CMAKE_INSTALL_COMPONENT STREQUAL "Unspecified" OR NOT CMAKE_INSTALL_COMPONENT) + file(INSTALL DESTINATION "${CMAKE_INSTALL_PREFIX}/share/man/man3" TYPE FILE FILES "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_file_get_external_attributes.3") +endif() + +if(CMAKE_INSTALL_COMPONENT STREQUAL "Unspecified" OR NOT CMAKE_INSTALL_COMPONENT) + file(INSTALL DESTINATION "${CMAKE_INSTALL_PREFIX}/share/man/man3" TYPE FILE FILES "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_file_rename.3") +endif() + +if(CMAKE_INSTALL_COMPONENT STREQUAL "Unspecified" OR NOT CMAKE_INSTALL_COMPONENT) + file(INSTALL DESTINATION "${CMAKE_INSTALL_PREFIX}/share/man/man3" TYPE FILE FILES "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_file_set_comment.3") +endif() + +if(CMAKE_INSTALL_COMPONENT STREQUAL "Unspecified" OR NOT CMAKE_INSTALL_COMPONENT) + file(INSTALL DESTINATION "${CMAKE_INSTALL_PREFIX}/share/man/man3" TYPE FILE FILES "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_file_set_encryption.3") +endif() + +if(CMAKE_INSTALL_COMPONENT STREQUAL "Unspecified" OR NOT CMAKE_INSTALL_COMPONENT) + file(INSTALL DESTINATION "${CMAKE_INSTALL_PREFIX}/share/man/man3" TYPE FILE FILES "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_file_set_external_attributes.3") +endif() + +if(CMAKE_INSTALL_COMPONENT STREQUAL "Unspecified" OR NOT CMAKE_INSTALL_COMPONENT) + file(INSTALL DESTINATION "${CMAKE_INSTALL_PREFIX}/share/man/man3" TYPE FILE FILES "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_file_set_mtime.3") +endif() + +if(CMAKE_INSTALL_COMPONENT STREQUAL "Unspecified" OR NOT CMAKE_INSTALL_COMPONENT) + file(INSTALL DESTINATION "${CMAKE_INSTALL_PREFIX}/share/man/man3" TYPE FILE FILES "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_file_strerror.3") +endif() + +if(CMAKE_INSTALL_COMPONENT STREQUAL "Unspecified" OR NOT CMAKE_INSTALL_COMPONENT) + file(INSTALL DESTINATION "${CMAKE_INSTALL_PREFIX}/share/man/man3" TYPE FILE FILES "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_fopen.3") +endif() + +if(CMAKE_INSTALL_COMPONENT STREQUAL "Unspecified" OR NOT CMAKE_INSTALL_COMPONENT) + file(INSTALL DESTINATION "${CMAKE_INSTALL_PREFIX}/share/man/man3" TYPE FILE FILES "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_fopen_encrypted.3") +endif() + +if(CMAKE_INSTALL_COMPONENT STREQUAL "Unspecified" OR NOT CMAKE_INSTALL_COMPONENT) + file(INSTALL DESTINATION "${CMAKE_INSTALL_PREFIX}/share/man/man3" TYPE FILE FILES "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_fread.3") +endif() + +if(CMAKE_INSTALL_COMPONENT STREQUAL "Unspecified" OR NOT CMAKE_INSTALL_COMPONENT) + file(INSTALL DESTINATION "${CMAKE_INSTALL_PREFIX}/share/man/man3" TYPE FILE FILES "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_fseek.3") +endif() + +if(CMAKE_INSTALL_COMPONENT STREQUAL "Unspecified" OR NOT CMAKE_INSTALL_COMPONENT) + file(INSTALL DESTINATION "${CMAKE_INSTALL_PREFIX}/share/man/man3" TYPE FILE FILES "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_ftell.3") +endif() + +if(CMAKE_INSTALL_COMPONENT STREQUAL "Unspecified" OR NOT CMAKE_INSTALL_COMPONENT) + file(INSTALL DESTINATION "${CMAKE_INSTALL_PREFIX}/share/man/man3" TYPE FILE FILES "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_get_archive_comment.3") +endif() + +if(CMAKE_INSTALL_COMPONENT STREQUAL "Unspecified" OR NOT CMAKE_INSTALL_COMPONENT) + file(INSTALL DESTINATION "${CMAKE_INSTALL_PREFIX}/share/man/man3" TYPE FILE FILES "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_get_archive_flag.3") +endif() + +if(CMAKE_INSTALL_COMPONENT STREQUAL "Unspecified" OR NOT CMAKE_INSTALL_COMPONENT) + file(INSTALL DESTINATION "${CMAKE_INSTALL_PREFIX}/share/man/man3" TYPE FILE FILES "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_get_error.3") +endif() + +if(CMAKE_INSTALL_COMPONENT STREQUAL "Unspecified" OR NOT CMAKE_INSTALL_COMPONENT) + file(INSTALL DESTINATION "${CMAKE_INSTALL_PREFIX}/share/man/man3" TYPE FILE FILES "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_get_file_comment.3") +endif() + +if(CMAKE_INSTALL_COMPONENT STREQUAL "Unspecified" OR NOT CMAKE_INSTALL_COMPONENT) + file(INSTALL DESTINATION "${CMAKE_INSTALL_PREFIX}/share/man/man3" TYPE FILE FILES "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_get_name.3") +endif() + +if(CMAKE_INSTALL_COMPONENT STREQUAL "Unspecified" OR NOT CMAKE_INSTALL_COMPONENT) + file(INSTALL DESTINATION "${CMAKE_INSTALL_PREFIX}/share/man/man3" TYPE FILE FILES "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_get_num_entries.3") +endif() + +if(CMAKE_INSTALL_COMPONENT STREQUAL "Unspecified" OR NOT CMAKE_INSTALL_COMPONENT) + file(INSTALL DESTINATION "${CMAKE_INSTALL_PREFIX}/share/man/man3" TYPE FILE FILES "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_get_num_files.3") +endif() + +if(CMAKE_INSTALL_COMPONENT STREQUAL "Unspecified" OR NOT CMAKE_INSTALL_COMPONENT) + file(INSTALL DESTINATION "${CMAKE_INSTALL_PREFIX}/share/man/man3" TYPE FILE FILES "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_libzip_version.3") +endif() + +if(CMAKE_INSTALL_COMPONENT STREQUAL "Unspecified" OR NOT CMAKE_INSTALL_COMPONENT) + file(INSTALL DESTINATION "${CMAKE_INSTALL_PREFIX}/share/man/man3" TYPE FILE FILES "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_name_locate.3") +endif() + +if(CMAKE_INSTALL_COMPONENT STREQUAL "Unspecified" OR NOT CMAKE_INSTALL_COMPONENT) + file(INSTALL DESTINATION "${CMAKE_INSTALL_PREFIX}/share/man/man3" TYPE FILE FILES "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_open.3") +endif() + +if(CMAKE_INSTALL_COMPONENT STREQUAL "Unspecified" OR NOT CMAKE_INSTALL_COMPONENT) + file(INSTALL DESTINATION "${CMAKE_INSTALL_PREFIX}/share/man/man3" TYPE FILE FILES "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_register_cancel_callback_with_state.3") +endif() + +if(CMAKE_INSTALL_COMPONENT STREQUAL "Unspecified" OR NOT CMAKE_INSTALL_COMPONENT) + file(INSTALL DESTINATION "${CMAKE_INSTALL_PREFIX}/share/man/man3" TYPE FILE FILES "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_register_progress_callback.3") +endif() + +if(CMAKE_INSTALL_COMPONENT STREQUAL "Unspecified" OR NOT CMAKE_INSTALL_COMPONENT) + file(INSTALL DESTINATION "${CMAKE_INSTALL_PREFIX}/share/man/man3" TYPE FILE FILES "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_register_progress_callback_with_state.3") +endif() + +if(CMAKE_INSTALL_COMPONENT STREQUAL "Unspecified" OR NOT CMAKE_INSTALL_COMPONENT) + file(INSTALL DESTINATION "${CMAKE_INSTALL_PREFIX}/share/man/man3" TYPE FILE FILES "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_rename.3") +endif() + +if(CMAKE_INSTALL_COMPONENT STREQUAL "Unspecified" OR NOT CMAKE_INSTALL_COMPONENT) + file(INSTALL DESTINATION "${CMAKE_INSTALL_PREFIX}/share/man/man3" TYPE FILE FILES "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_set_archive_comment.3") +endif() + +if(CMAKE_INSTALL_COMPONENT STREQUAL "Unspecified" OR NOT CMAKE_INSTALL_COMPONENT) + file(INSTALL DESTINATION "${CMAKE_INSTALL_PREFIX}/share/man/man3" TYPE FILE FILES "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_set_archive_flag.3") +endif() + +if(CMAKE_INSTALL_COMPONENT STREQUAL "Unspecified" OR NOT CMAKE_INSTALL_COMPONENT) + file(INSTALL DESTINATION "${CMAKE_INSTALL_PREFIX}/share/man/man3" TYPE FILE FILES "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_set_default_password.3") +endif() + +if(CMAKE_INSTALL_COMPONENT STREQUAL "Unspecified" OR NOT CMAKE_INSTALL_COMPONENT) + file(INSTALL DESTINATION "${CMAKE_INSTALL_PREFIX}/share/man/man3" TYPE FILE FILES "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_set_file_comment.3") +endif() + +if(CMAKE_INSTALL_COMPONENT STREQUAL "Unspecified" OR NOT CMAKE_INSTALL_COMPONENT) + file(INSTALL DESTINATION "${CMAKE_INSTALL_PREFIX}/share/man/man3" TYPE FILE FILES "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_set_file_compression.3") +endif() + +if(CMAKE_INSTALL_COMPONENT STREQUAL "Unspecified" OR NOT CMAKE_INSTALL_COMPONENT) + file(INSTALL DESTINATION "${CMAKE_INSTALL_PREFIX}/share/man/man3" TYPE FILE FILES "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source.3") +endif() + +if(CMAKE_INSTALL_COMPONENT STREQUAL "Unspecified" OR NOT CMAKE_INSTALL_COMPONENT) + file(INSTALL DESTINATION "${CMAKE_INSTALL_PREFIX}/share/man/man3" TYPE FILE FILES "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_begin_write.3") +endif() + +if(CMAKE_INSTALL_COMPONENT STREQUAL "Unspecified" OR NOT CMAKE_INSTALL_COMPONENT) + file(INSTALL DESTINATION "${CMAKE_INSTALL_PREFIX}/share/man/man3" TYPE FILE FILES "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_buffer.3") +endif() + +if(CMAKE_INSTALL_COMPONENT STREQUAL "Unspecified" OR NOT CMAKE_INSTALL_COMPONENT) + file(INSTALL DESTINATION "${CMAKE_INSTALL_PREFIX}/share/man/man3" TYPE FILE FILES "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_buffer_fragment.3") +endif() + +if(CMAKE_INSTALL_COMPONENT STREQUAL "Unspecified" OR NOT CMAKE_INSTALL_COMPONENT) + file(INSTALL DESTINATION "${CMAKE_INSTALL_PREFIX}/share/man/man3" TYPE FILE FILES "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_close.3") +endif() + +if(CMAKE_INSTALL_COMPONENT STREQUAL "Unspecified" OR NOT CMAKE_INSTALL_COMPONENT) + file(INSTALL DESTINATION "${CMAKE_INSTALL_PREFIX}/share/man/man3" TYPE FILE FILES "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_commit_write.3") +endif() + +if(CMAKE_INSTALL_COMPONENT STREQUAL "Unspecified" OR NOT CMAKE_INSTALL_COMPONENT) + file(INSTALL DESTINATION "${CMAKE_INSTALL_PREFIX}/share/man/man3" TYPE FILE FILES "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_error.3") +endif() + +if(CMAKE_INSTALL_COMPONENT STREQUAL "Unspecified" OR NOT CMAKE_INSTALL_COMPONENT) + file(INSTALL DESTINATION "${CMAKE_INSTALL_PREFIX}/share/man/man3" TYPE FILE FILES "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_file.3") +endif() + +if(CMAKE_INSTALL_COMPONENT STREQUAL "Unspecified" OR NOT CMAKE_INSTALL_COMPONENT) + file(INSTALL DESTINATION "${CMAKE_INSTALL_PREFIX}/share/man/man3" TYPE FILE FILES "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_filep.3") +endif() + +if(CMAKE_INSTALL_COMPONENT STREQUAL "Unspecified" OR NOT CMAKE_INSTALL_COMPONENT) + file(INSTALL DESTINATION "${CMAKE_INSTALL_PREFIX}/share/man/man3" TYPE FILE FILES "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_free.3") +endif() + +if(CMAKE_INSTALL_COMPONENT STREQUAL "Unspecified" OR NOT CMAKE_INSTALL_COMPONENT) + file(INSTALL DESTINATION "${CMAKE_INSTALL_PREFIX}/share/man/man3" TYPE FILE FILES "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_function.3") +endif() + +if(CMAKE_INSTALL_COMPONENT STREQUAL "Unspecified" OR NOT CMAKE_INSTALL_COMPONENT) + file(INSTALL DESTINATION "${CMAKE_INSTALL_PREFIX}/share/man/man3" TYPE FILE FILES "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_is_deleted.3") +endif() + +if(CMAKE_INSTALL_COMPONENT STREQUAL "Unspecified" OR NOT CMAKE_INSTALL_COMPONENT) + file(INSTALL DESTINATION "${CMAKE_INSTALL_PREFIX}/share/man/man3" TYPE FILE FILES "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_is_seekable.3") +endif() + +if(CMAKE_INSTALL_COMPONENT STREQUAL "Unspecified" OR NOT CMAKE_INSTALL_COMPONENT) + file(INSTALL DESTINATION "${CMAKE_INSTALL_PREFIX}/share/man/man3" TYPE FILE FILES "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_layered.3") +endif() + +if(CMAKE_INSTALL_COMPONENT STREQUAL "Unspecified" OR NOT CMAKE_INSTALL_COMPONENT) + file(INSTALL DESTINATION "${CMAKE_INSTALL_PREFIX}/share/man/man3" TYPE FILE FILES "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_keep.3") +endif() + +if(CMAKE_INSTALL_COMPONENT STREQUAL "Unspecified" OR NOT CMAKE_INSTALL_COMPONENT) + file(INSTALL DESTINATION "${CMAKE_INSTALL_PREFIX}/share/man/man3" TYPE FILE FILES "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_make_command_bitmap.3") +endif() + +if(CMAKE_INSTALL_COMPONENT STREQUAL "Unspecified" OR NOT CMAKE_INSTALL_COMPONENT) + file(INSTALL DESTINATION "${CMAKE_INSTALL_PREFIX}/share/man/man3" TYPE FILE FILES "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_open.3") +endif() + +if(CMAKE_INSTALL_COMPONENT STREQUAL "Unspecified" OR NOT CMAKE_INSTALL_COMPONENT) + file(INSTALL DESTINATION "${CMAKE_INSTALL_PREFIX}/share/man/man3" TYPE FILE FILES "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_read.3") +endif() + +if(CMAKE_INSTALL_COMPONENT STREQUAL "Unspecified" OR NOT CMAKE_INSTALL_COMPONENT) + file(INSTALL DESTINATION "${CMAKE_INSTALL_PREFIX}/share/man/man3" TYPE FILE FILES "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_rollback_write.3") +endif() + +if(CMAKE_INSTALL_COMPONENT STREQUAL "Unspecified" OR NOT CMAKE_INSTALL_COMPONENT) + file(INSTALL DESTINATION "${CMAKE_INSTALL_PREFIX}/share/man/man3" TYPE FILE FILES "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_seek.3") +endif() + +if(CMAKE_INSTALL_COMPONENT STREQUAL "Unspecified" OR NOT CMAKE_INSTALL_COMPONENT) + file(INSTALL DESTINATION "${CMAKE_INSTALL_PREFIX}/share/man/man3" TYPE FILE FILES "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_seek_compute_offset.3") +endif() + +if(CMAKE_INSTALL_COMPONENT STREQUAL "Unspecified" OR NOT CMAKE_INSTALL_COMPONENT) + file(INSTALL DESTINATION "${CMAKE_INSTALL_PREFIX}/share/man/man3" TYPE FILE FILES "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_seek_write.3") +endif() + +if(CMAKE_INSTALL_COMPONENT STREQUAL "Unspecified" OR NOT CMAKE_INSTALL_COMPONENT) + file(INSTALL DESTINATION "${CMAKE_INSTALL_PREFIX}/share/man/man3" TYPE FILE FILES "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_stat.3") +endif() + +if(CMAKE_INSTALL_COMPONENT STREQUAL "Unspecified" OR NOT CMAKE_INSTALL_COMPONENT) + file(INSTALL DESTINATION "${CMAKE_INSTALL_PREFIX}/share/man/man3" TYPE FILE FILES "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_tell.3") +endif() + +if(CMAKE_INSTALL_COMPONENT STREQUAL "Unspecified" OR NOT CMAKE_INSTALL_COMPONENT) + file(INSTALL DESTINATION "${CMAKE_INSTALL_PREFIX}/share/man/man3" TYPE FILE FILES "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_tell_write.3") +endif() + +if(CMAKE_INSTALL_COMPONENT STREQUAL "Unspecified" OR NOT CMAKE_INSTALL_COMPONENT) + file(INSTALL DESTINATION "${CMAKE_INSTALL_PREFIX}/share/man/man3" TYPE FILE FILES "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_win32a.3") +endif() + +if(CMAKE_INSTALL_COMPONENT STREQUAL "Unspecified" OR NOT CMAKE_INSTALL_COMPONENT) + file(INSTALL DESTINATION "${CMAKE_INSTALL_PREFIX}/share/man/man3" TYPE FILE FILES "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_win32handle.3") +endif() + +if(CMAKE_INSTALL_COMPONENT STREQUAL "Unspecified" OR NOT CMAKE_INSTALL_COMPONENT) + file(INSTALL DESTINATION "${CMAKE_INSTALL_PREFIX}/share/man/man3" TYPE FILE FILES "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_win32w.3") +endif() + +if(CMAKE_INSTALL_COMPONENT STREQUAL "Unspecified" OR NOT CMAKE_INSTALL_COMPONENT) + file(INSTALL DESTINATION "${CMAKE_INSTALL_PREFIX}/share/man/man3" TYPE FILE FILES "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_window_create.3") +endif() + +if(CMAKE_INSTALL_COMPONENT STREQUAL "Unspecified" OR NOT CMAKE_INSTALL_COMPONENT) + file(INSTALL DESTINATION "${CMAKE_INSTALL_PREFIX}/share/man/man3" TYPE FILE FILES "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_write.3") +endif() + +if(CMAKE_INSTALL_COMPONENT STREQUAL "Unspecified" OR NOT CMAKE_INSTALL_COMPONENT) + file(INSTALL DESTINATION "${CMAKE_INSTALL_PREFIX}/share/man/man3" TYPE FILE FILES "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_zip.3") +endif() + +if(CMAKE_INSTALL_COMPONENT STREQUAL "Unspecified" OR NOT CMAKE_INSTALL_COMPONENT) + file(INSTALL DESTINATION "${CMAKE_INSTALL_PREFIX}/share/man/man3" TYPE FILE FILES "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_zip_file.3") +endif() + +if(CMAKE_INSTALL_COMPONENT STREQUAL "Unspecified" OR NOT CMAKE_INSTALL_COMPONENT) + file(INSTALL DESTINATION "${CMAKE_INSTALL_PREFIX}/share/man/man3" TYPE FILE FILES "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_stat.3") +endif() + +if(CMAKE_INSTALL_COMPONENT STREQUAL "Unspecified" OR NOT CMAKE_INSTALL_COMPONENT) + file(INSTALL DESTINATION "${CMAKE_INSTALL_PREFIX}/share/man/man3" TYPE FILE FILES "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_stat_init.3") +endif() + +if(CMAKE_INSTALL_COMPONENT STREQUAL "Unspecified" OR NOT CMAKE_INSTALL_COMPONENT) + file(INSTALL DESTINATION "${CMAKE_INSTALL_PREFIX}/share/man/man3" TYPE FILE FILES "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_unchange.3") +endif() + +if(CMAKE_INSTALL_COMPONENT STREQUAL "Unspecified" OR NOT CMAKE_INSTALL_COMPONENT) + file(INSTALL DESTINATION "${CMAKE_INSTALL_PREFIX}/share/man/man3" TYPE FILE FILES "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_unchange_all.3") +endif() + +if(CMAKE_INSTALL_COMPONENT STREQUAL "Unspecified" OR NOT CMAKE_INSTALL_COMPONENT) + file(INSTALL DESTINATION "${CMAKE_INSTALL_PREFIX}/share/man/man3" TYPE FILE FILES "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_unchange_archive.3") +endif() + +if(CMAKE_INSTALL_COMPONENT STREQUAL "Unspecified" OR NOT CMAKE_INSTALL_COMPONENT) + file(INSTALL DESTINATION "${CMAKE_INSTALL_PREFIX}/share/man/man1" TYPE FILE FILES "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zipcmp.1") +endif() + +if(CMAKE_INSTALL_COMPONENT STREQUAL "Unspecified" OR NOT CMAKE_INSTALL_COMPONENT) + file(INSTALL DESTINATION "${CMAKE_INSTALL_PREFIX}/share/man/man1" TYPE FILE FILES "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zipmerge.1") +endif() + +if(CMAKE_INSTALL_COMPONENT STREQUAL "Unspecified" OR NOT CMAKE_INSTALL_COMPONENT) + file(INSTALL DESTINATION "${CMAKE_INSTALL_PREFIX}/share/man/man1" TYPE FILE FILES "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/ziptool.1") +endif() + +if(CMAKE_INSTALL_COMPONENT STREQUAL "Unspecified" OR NOT CMAKE_INSTALL_COMPONENT) + file(INSTALL DESTINATION "${CMAKE_INSTALL_PREFIX}/share/man/man3" TYPE FILE RENAME "zip_replace.3" FILES "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_add.3") +endif() + +if(CMAKE_INSTALL_COMPONENT STREQUAL "Unspecified" OR NOT CMAKE_INSTALL_COMPONENT) + file(INSTALL DESTINATION "${CMAKE_INSTALL_PREFIX}/share/man/man3" TYPE FILE RENAME "zip_file_error_clear.3" FILES "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_error_clear.3") +endif() + +if(CMAKE_INSTALL_COMPONENT STREQUAL "Unspecified" OR NOT CMAKE_INSTALL_COMPONENT) + file(INSTALL DESTINATION "${CMAKE_INSTALL_PREFIX}/share/man/man3" TYPE FILE RENAME "zip_file_error_get.3" FILES "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_error_get.3") +endif() + +if(CMAKE_INSTALL_COMPONENT STREQUAL "Unspecified" OR NOT CMAKE_INSTALL_COMPONENT) + file(INSTALL DESTINATION "${CMAKE_INSTALL_PREFIX}/share/man/man3" TYPE FILE RENAME "zip_error_init_with_code.3" FILES "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_error_init.3") +endif() + +if(CMAKE_INSTALL_COMPONENT STREQUAL "Unspecified" OR NOT CMAKE_INSTALL_COMPONENT) + file(INSTALL DESTINATION "${CMAKE_INSTALL_PREFIX}/share/man/man3" TYPE FILE RENAME "zip_file_replace.3" FILES "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_file_add.3") +endif() + +if(CMAKE_INSTALL_COMPONENT STREQUAL "Unspecified" OR NOT CMAKE_INSTALL_COMPONENT) + file(INSTALL DESTINATION "${CMAKE_INSTALL_PREFIX}/share/man/man3" TYPE FILE RENAME "zip_file_extra_field_delete_by_id.3" FILES "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_file_extra_field_delete.3") +endif() + +if(CMAKE_INSTALL_COMPONENT STREQUAL "Unspecified" OR NOT CMAKE_INSTALL_COMPONENT) + file(INSTALL DESTINATION "${CMAKE_INSTALL_PREFIX}/share/man/man3" TYPE FILE RENAME "zip_file_extra_field_get_by_id.3" FILES "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_file_extra_field_get.3") +endif() + +if(CMAKE_INSTALL_COMPONENT STREQUAL "Unspecified" OR NOT CMAKE_INSTALL_COMPONENT) + file(INSTALL DESTINATION "${CMAKE_INSTALL_PREFIX}/share/man/man3" TYPE FILE RENAME "zip_file_extra_fields_count_by_id.3" FILES "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_file_extra_fields_count.3") +endif() + +if(CMAKE_INSTALL_COMPONENT STREQUAL "Unspecified" OR NOT CMAKE_INSTALL_COMPONENT) + file(INSTALL DESTINATION "${CMAKE_INSTALL_PREFIX}/share/man/man3" TYPE FILE RENAME "zip_file_set_dostime.3" FILES "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_file_set_mtime.3") +endif() + +if(CMAKE_INSTALL_COMPONENT STREQUAL "Unspecified" OR NOT CMAKE_INSTALL_COMPONENT) + file(INSTALL DESTINATION "${CMAKE_INSTALL_PREFIX}/share/man/man3" TYPE FILE RENAME "zip_strerror.3" FILES "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_file_strerror.3") +endif() + +if(CMAKE_INSTALL_COMPONENT STREQUAL "Unspecified" OR NOT CMAKE_INSTALL_COMPONENT) + file(INSTALL DESTINATION "${CMAKE_INSTALL_PREFIX}/share/man/man3" TYPE FILE RENAME "zip_fopen_index.3" FILES "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_fopen.3") +endif() + +if(CMAKE_INSTALL_COMPONENT STREQUAL "Unspecified" OR NOT CMAKE_INSTALL_COMPONENT) + file(INSTALL DESTINATION "${CMAKE_INSTALL_PREFIX}/share/man/man3" TYPE FILE RENAME "zip_fopen_index_encrypted.3" FILES "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_fopen_encrypted.3") +endif() + +if(CMAKE_INSTALL_COMPONENT STREQUAL "Unspecified" OR NOT CMAKE_INSTALL_COMPONENT) + file(INSTALL DESTINATION "${CMAKE_INSTALL_PREFIX}/share/man/man3" TYPE FILE RENAME "zip_file_is_seekable.3" FILES "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_fseek.3") +endif() + +if(CMAKE_INSTALL_COMPONENT STREQUAL "Unspecified" OR NOT CMAKE_INSTALL_COMPONENT) + file(INSTALL DESTINATION "${CMAKE_INSTALL_PREFIX}/share/man/man3" TYPE FILE RENAME "zip_open_from_source.3" FILES "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_open.3") +endif() + +if(CMAKE_INSTALL_COMPONENT STREQUAL "Unspecified" OR NOT CMAKE_INSTALL_COMPONENT) + file(INSTALL DESTINATION "${CMAKE_INSTALL_PREFIX}/share/man/man3" TYPE FILE RENAME "zip_source_begin_write_cloning.3" FILES "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_begin_write.3") +endif() + +if(CMAKE_INSTALL_COMPONENT STREQUAL "Unspecified" OR NOT CMAKE_INSTALL_COMPONENT) + file(INSTALL DESTINATION "${CMAKE_INSTALL_PREFIX}/share/man/man3" TYPE FILE RENAME "zip_source_buffer_create.3" FILES "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_buffer.3") +endif() + +if(CMAKE_INSTALL_COMPONENT STREQUAL "Unspecified" OR NOT CMAKE_INSTALL_COMPONENT) + file(INSTALL DESTINATION "${CMAKE_INSTALL_PREFIX}/share/man/man3" TYPE FILE RENAME "zip_source_buffer_fragment_create.3" FILES "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_buffer_fragment.3") +endif() + +if(CMAKE_INSTALL_COMPONENT STREQUAL "Unspecified" OR NOT CMAKE_INSTALL_COMPONENT) + file(INSTALL DESTINATION "${CMAKE_INSTALL_PREFIX}/share/man/man3" TYPE FILE RENAME "zip_source_file_create.3" FILES "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_file.3") +endif() + +if(CMAKE_INSTALL_COMPONENT STREQUAL "Unspecified" OR NOT CMAKE_INSTALL_COMPONENT) + file(INSTALL DESTINATION "${CMAKE_INSTALL_PREFIX}/share/man/man3" TYPE FILE RENAME "zip_source_filep_create.3" FILES "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_filep.3") +endif() + +if(CMAKE_INSTALL_COMPONENT STREQUAL "Unspecified" OR NOT CMAKE_INSTALL_COMPONENT) + file(INSTALL DESTINATION "${CMAKE_INSTALL_PREFIX}/share/man/man3" TYPE FILE RENAME "zip_source_function_create.3" FILES "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_function.3") +endif() + +if(CMAKE_INSTALL_COMPONENT STREQUAL "Unspecified" OR NOT CMAKE_INSTALL_COMPONENT) + file(INSTALL DESTINATION "${CMAKE_INSTALL_PREFIX}/share/man/man3" TYPE FILE RENAME "zip_source_layered_create.3" FILES "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_layered.3") +endif() + +if(CMAKE_INSTALL_COMPONENT STREQUAL "Unspecified" OR NOT CMAKE_INSTALL_COMPONENT) + file(INSTALL DESTINATION "${CMAKE_INSTALL_PREFIX}/share/man/man3" TYPE FILE RENAME "zip_source_win32a_create.3" FILES "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_win32a.3") +endif() + +if(CMAKE_INSTALL_COMPONENT STREQUAL "Unspecified" OR NOT CMAKE_INSTALL_COMPONENT) + file(INSTALL DESTINATION "${CMAKE_INSTALL_PREFIX}/share/man/man3" TYPE FILE RENAME "zip_source_win32handle_create.3" FILES "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_win32handle.3") +endif() + +if(CMAKE_INSTALL_COMPONENT STREQUAL "Unspecified" OR NOT CMAKE_INSTALL_COMPONENT) + file(INSTALL DESTINATION "${CMAKE_INSTALL_PREFIX}/share/man/man3" TYPE FILE RENAME "zip_source_win32w_create.3" FILES "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_win32w.3") +endif() + +if(CMAKE_INSTALL_COMPONENT STREQUAL "Unspecified" OR NOT CMAKE_INSTALL_COMPONENT) + file(INSTALL DESTINATION "${CMAKE_INSTALL_PREFIX}/share/man/man3" TYPE FILE RENAME "zip_source_zip_create.3" FILES "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_zip.3") +endif() + +if(CMAKE_INSTALL_COMPONENT STREQUAL "Unspecified" OR NOT CMAKE_INSTALL_COMPONENT) + file(INSTALL DESTINATION "${CMAKE_INSTALL_PREFIX}/share/man/man3" TYPE FILE RENAME "zip_source_zip_file_create.3" FILES "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_zip_file.3") +endif() + +if(CMAKE_INSTALL_COMPONENT STREQUAL "Unspecified" OR NOT CMAKE_INSTALL_COMPONENT) + file(INSTALL DESTINATION "${CMAKE_INSTALL_PREFIX}/share/man/man3" TYPE FILE RENAME "zip_stat_index.3" FILES "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/man/zip_stat.3") +endif() + diff --git a/thirdparty/libzip-1.11.3/build-emcmake/man/libzip.3 b/thirdparty/libzip-1.11.3/build-emcmake/man/libzip.3 new file mode 100644 index 0000000..0490f37 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/man/libzip.3 @@ -0,0 +1,299 @@ +.\" libzip.mdoc -- general overview of available functions +.\" Copyright (C) 2005-2024 Dieter Baron and Thomas Klausner +.\" +.\" This file is part of libzip, a library to manipulate ZIP archives. +.\" The authors can be contacted at +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in +.\" the documentation and/or other materials provided with the +.\" distribution. +.\" 3. The names of the authors may not be used to endorse or promote +.\" products derived from this software without specific prior +.\" written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS +.\" OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +.\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +.\" DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE +.\" GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +.\" IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +.\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN +.\" IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.\" +.Dd August 21, 2024 +.Dt LIBZIP 3 +.Os +.Sh NAME +.Nm libzip +.Nd library for manipulating zip archives +.Sh LIBRARY +libzip (-lzip) +.Sh SYNOPSIS +.In zip.h +.Sh DESCRIPTION +.Nm +is a library for reading, creating, and modifying zip archives. +.Pp +The main design criteria for +.Nm +were: +.Bl -bullet -compact +.It +Do not create corrupt files, even in case of errors. +.It +Do not delete data. +.It +Be efficient. +.El +.Pp +For this reason, when modifying zip archives, +.Nm +writes to a temporary file and replaces the original +zip archive atomically. +.Pp +Below there are two sections listing functions: one for how to read +from zip archives and one for how to create/modify them. +.Sh GENERAL NOTES +Unless explicitly documented, functions should not be passed +.Dv NULL +pointers as arguments. +.Sh FILE NAMES +.Ss Encoding +Names of files in the host file system are expected in UTF-8 encoding. +On Windows, variants for ASCII and UTF-16 are also available. +.Pp +Names of files inside archives are by default expected in UTF-8 encoding. +Other encodings can be requested by using the flags +.Dv ZIP_FL_ENC_CP437 +and +.Dv ZIP_FL_ENC_RAW . +.Pp +For details see the relevant man pages. +.Ss Directory Separator +The zip format requires the use of forward slash +.Pq Sq / +as directory separator. +Since backslash +.Pq Sq \e +can be part of a valid file name on Unix systems, +.Nm +does not automatically convert them, even on Windows. +It is the responsibility of the programmer to ensure that all +directory separators are passed as forward slashes to +.Nm . +.Sh THREAD SAFETY +In general, different zip archives opened by +.Nm +are independent of each other and can be used by parallel-running +threads without locking. +If you want to use an archive from multiple threads, you have to +synchronize access to it yourself. +If you use an archive as a source for +.Xr zip_file_add 3 +or +.Xr zip_file_replace 3 , +access to the target archive must be synchronized with access to the +source archive as well. +.Sh READING ZIP ARCHIVES +.Ss Open Archive +.Bl -bullet -compact +.It +.Xr zip_open 3 +.It +.Xr zip_fdopen 3 +.El +.Ss Find Files +.Bl -bullet -compact +.It +.Xr zip_name_locate 3 +.El +.Ss Read Files +.Bl -bullet -compact +.It +.Xr zip_fopen 3 +.It +.Xr zip_fopen_encrypted 3 +.It +.Xr zip_fopen_index 3 +.It +.Xr zip_fopen_index_encrypted 3 +.It +.Xr zip_fread 3 +.It +.Xr zip_file_is_seekable 3 +.It +.Xr zip_fseek 3 +(uncompressed files only) +.It +.Xr zip_ftell 3 +.It +.Xr zip_fclose 3 +.El +.Ss Close Archive +.Bl -bullet -compact +.It +.Xr zip_close 3 +.El +.Ss Miscellaneous +.Bl -bullet -compact +.It +.Xr zip_stat 3 +.It +.Xr zip_compression_method_supported 3 +.It +.Xr zip_encryption_method_supported 3 +.It +.Xr zip_file_get_comment 3 +.It +.Xr zip_file_get_external_attributes 3 +.It +.Xr zip_get_archive_comment 3 +.It +.Xr zip_get_archive_flag 3 +.It +.Xr zip_get_name 3 +.It +.Xr zip_get_num_entries 3 +.It +.Xr zip_set_default_password 3 +.It +.Xr zip_source_pass_to_lower_layer 3 +.El +.Sh CREATING/MODIFYING ZIP ARCHIVES +.Ss Create/Open Archive +.Bl -bullet -compact +.It +.Xr zip_open 3 +.El +.Ss Add/Change Files and Directories +.Bl -bullet -compact +.It +.Xr zip_dir_add 3 +.It +.Xr zip_file_add 3 +.It +.Xr zip_file_replace 3 +.It +.Xr zip_file_set_comment 3 +.It +.Xr zip_file_set_dostime 3 +.It +.Xr zip_file_set_external_attributes 3 +.It +.Xr zip_file_set_encryption 3 +.It +.Xr zip_file_set_mtime 3 +.It +.Xr zip_set_file_compression 3 +.It +.Xr zip_source_buffer 3 +.It +.Xr zip_source_file 3 +.It +.Xr zip_source_filep 3 +.It +.Xr zip_source_free 3 +.It +.Xr zip_source_function 3 +.It +.Xr zip_source_layered 3 +.It +.Xr zip_source_zip 3 +.El +.Ss Rename Files +.Bl -bullet -compact +.It +.Xr zip_rename 3 +.El +.Ss Delete Files +.Bl -bullet -compact +.It +.Xr zip_delete 3 +.El +.Ss Revert Changes +.Bl -bullet -compact +.It +.Xr zip_unchange 3 +.It +.Xr zip_unchange_all 3 +.It +.Xr zip_unchange_archive 3 +.El +.Ss Read/Modify Extra Fields +.Bl -bullet -compact +.It +.Xr zip_file_extra_field_delete 3 +.It +.Xr zip_file_extra_field_delete_by_id 3 +.It +.Xr zip_file_extra_field_get 3 +.It +.Xr zip_file_extra_field_get_by_id 3 +.It +.Xr zip_file_extra_field_set 3 +.It +.Xr zip_file_extra_fields_count 3 +.It +.Xr zip_file_extra_fields_count_by_id 3 +.El +.Ss Close Archive (Writing) +.Bl -bullet -compact +.It +.Xr zip_close 3 +.It +.Xr zip_discard 3 +.El +.Ss Miscellaneous (Writing) +.Bl -bullet -compact +.It +.Xr zip_file_attributes_init 3 +.It +.Xr zip_libzip_version 3 +.It +.Xr zip_register_cancel_callback_with_state 3 +.It +.Xr zip_register_progress_callback_with_state 3 +.It +.Xr zip_set_archive_comment 3 +.It +.Xr zip_set_archive_flag 3 +.It +.Xr zip_source 3 +.El +.Sh ERROR HANDLING +.Bl -bullet -compact +.It +.Xr zip_error_strerror 3 +.It +.Xr zip_strerror 3 +.It +.Xr zip_file_strerror 3 +.It +.Xr zip_file_get_error 3 +.It +.Xr zip_get_error 3 +.It +.Xr zip_error_init_with_code 3 +.It +.Xr zip_error_set 3 +.It +.Xr zip_error_set_from_source 3 +.It +.Xr zip_error_system_type 3 +.It +.Xr zip_errors 3 +.El +.Sh AUTHORS +.An -nosplit +.An Dieter Baron Aq Mt dillo@nih.at +and +.An Thomas Klausner Aq Mt wiz@gatalith.at diff --git a/thirdparty/libzip-1.11.3/build-emcmake/man/zip_add.3 b/thirdparty/libzip-1.11.3/build-emcmake/man/zip_add.3 new file mode 100644 index 0000000..71bc4c8 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/man/zip_add.3 @@ -0,0 +1,96 @@ +.\" zip_add.mdoc -- add files to zip archive +.\" Copyright (C) 2004-2017 Dieter Baron and Thomas Klausner +.\" +.\" This file is part of libzip, a library to manipulate ZIP archives. +.\" The authors can be contacted at +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in +.\" the documentation and/or other materials provided with the +.\" distribution. +.\" 3. The names of the authors may not be used to endorse or promote +.\" products derived from this software without specific prior +.\" written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS +.\" OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +.\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +.\" DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE +.\" GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +.\" IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +.\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN +.\" IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.\" +.Dd December 18, 2017 +.Dt ZIP_ADD 3 +.Os +.Sh NAME +.Nm zip_add , +.Nm zip_replace +.Nd add file to zip archive or replace file in zip archive (obsolete interface) +.Sh LIBRARY +libzip (-lzip) +.Sh SYNOPSIS +.In zip.h +.Ft zip_int64_t +.Fn zip_add "zip_t *archive" "const char *name" "zip_source_t *source" +.Ft int +.Fn zip_replace "zip_t *archive" "zip_uint64_t index" "zip_source_t *source" +.Sh DESCRIPTION +The function +.Fn zip_add +is the obsolete version of +.Xr zip_file_add 3 . +It is the same as calling +.Xr zip_file_add 3 +with an empty +.Ar flags +argument. +Similarly, the +.Fn zip_replace +function is the obsolete version of +.Xr zip_file_replace 3 . +It is the same as calling +.Xr zip_file_replace 3 +with an empty +.Ar flags +argument. +.Sh SEE ALSO +.Xr libzip 3 , +.Xr zip_file_add 3 , +.Xr zip_file_replace 3 +.Sh HISTORY +.Fn zip_add +was added in libzip 0.6. +In libzip 0.10 the return type was changed from +.Vt int +to +.Vt zip_int64_t . +It was deprecated in libzip 0.11, use +.Fn zip_file_add +instead. +.Pp +.Fn zip_replace +was added in libzip 0.6. +In libzip 0.10 the type of +.Ar index +was changed from +.Vt int +to +.Vt zip_uint64_t . +It was deprecated in libzip 0.11, use +.Fn zip_file_replace +instead. +.Sh AUTHORS +.An -nosplit +.An Dieter Baron Aq Mt dillo@nih.at +and +.An Thomas Klausner Aq Mt wiz@gatalith.at diff --git a/thirdparty/libzip-1.11.3/build-emcmake/man/zip_add_dir.3 b/thirdparty/libzip-1.11.3/build-emcmake/man/zip_add_dir.3 new file mode 100644 index 0000000..4a6801b --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/man/zip_add_dir.3 @@ -0,0 +1,69 @@ +.\" zip_add_dir.mdoc -- add directory to zip archive +.\" Copyright (C) 2006-2017 Dieter Baron and Thomas Klausner +.\" +.\" This file is part of libzip, a library to manipulate ZIP archives. +.\" The authors can be contacted at +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in +.\" the documentation and/or other materials provided with the +.\" distribution. +.\" 3. The names of the authors may not be used to endorse or promote +.\" products derived from this software without specific prior +.\" written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS +.\" OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +.\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +.\" DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE +.\" GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +.\" IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +.\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN +.\" IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.\" +.Dd December 18, 2017 +.Dt ZIP_ADD_DIR 3 +.Os +.Sh NAME +.Nm zip_add_dir +.Nd add directory to zip archive (obsolete interface) +.Sh LIBRARY +libzip (-lzip) +.Sh SYNOPSIS +.In zip.h +.Ft zip_int64_t +.Fn zip_add_dir "zip_t *archive" "const char *name" +.Sh DESCRIPTION +The function +.Fn zip_add_dir +is the obsolete version of +.Xr zip_dir_add 3 . +It is the same as calling +.Xr zip_dir_add 3 +with an empty flags argument. +.Sh SEE ALSO +.Xr libzip 3 , +.Xr zip_dir_add 3 +.Sh HISTORY +.Fn zip_add_dir +was added in libzip 0.8. +In libzip 0.10 the return type was changed from +.Vt int +to +.Vt zip_int64_t . +It was deprecated in libzip 0.11, use +.Fn zip_dir_add +instead. +.Sh AUTHORS +.An -nosplit +.An Dieter Baron Aq Mt dillo@nih.at +and +.An Thomas Klausner Aq Mt wiz@gatalith.at diff --git a/thirdparty/libzip-1.11.3/build-emcmake/man/zip_close.3 b/thirdparty/libzip-1.11.3/build-emcmake/man/zip_close.3 new file mode 100644 index 0000000..4716b9d --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/man/zip_close.3 @@ -0,0 +1,136 @@ +.\" zip_close.mdoc -- close zip archive +.\" Copyright (C) 2003-2022 Dieter Baron and Thomas Klausner +.\" +.\" This file is part of libzip, a library to manipulate ZIP archives. +.\" The authors can be contacted at +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in +.\" the documentation and/or other materials provided with the +.\" distribution. +.\" 3. The names of the authors may not be used to endorse or promote +.\" products derived from this software without specific prior +.\" written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS +.\" OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +.\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +.\" DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE +.\" GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +.\" IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +.\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN +.\" IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.\" +.Dd January 23, 2023 +.Dt ZIP_CLOSE 3 +.Os +.Sh NAME +.Nm zip_close +.Nd close zip archive +.Sh LIBRARY +libzip (-lzip) +.Sh SYNOPSIS +.In zip.h +.Ft int +.Fn zip_close "zip_t *archive" +.Sh DESCRIPTION +The +.Fn zip_close +function writes any changes made to +.Ar archive +to disk. +If +.Ar archive +contains no files, the file is completely removed (no empty archive is +written), unless the archive flag +.Dv ZIP_AFL_CREATE_OR_KEEP_FILE_FOR_EMPTY_ARCHIVE +is set. +If successful, +.Ar archive +is freed. +Otherwise +.Ar archive +is left unchanged and must still be freed. +.Pp +To close and free a zip archive without saving changes, use +.Xr zip_discard 3 . +.Pp +Progress updates for GUIs can be implemented using +.Xr zip_register_progress_callback_with_state 3 . +Cancelling the write of an archive during +.Nm +can be implemented using +.Xr zip_register_cancel_callback_with_state 3 . +.Sh RETURN VALUES +Upon successful completion 0 is returned. +Otherwise, \-1 is returned and the error code in +.Ar archive +is set to indicate the error. +.Sh ERRORS +.Fn zip_close +will fail if: +.Bl -tag -width Er +.It Bq Er ZIP_ER_EOF +Unexpected end-of-file found while reading from a file. +.It Bq Er ZIP_ER_INTERNAL +The callback function of an added or replaced file returned an +error but failed to report which. +.It Bq Er ZIP_ER_INVAL +The +.Ar path +argument is +.Dv NULL . +.It Bq Er ZIP_ER_MEMORY +Required memory could not be allocated. +.It Bq Er ZIP_ER_NOZIP +File is not a zip archive. +.It Bq Er ZIP_ER_READ +A file read failed. +.It Bq Er ZIP_ER_RENAME +A temporary file could not be renamed to its final name. +.It Bq Er ZIP_ER_SEEK +A file seek failed. +.It Bq Er ZIP_ER_TMPOPEN +A temporary file could not be created. +.It Bq Er ZIP_ER_WRITE +A file write failed. +.It Bq Er ZIP_ER_ZLIB +An error occurred while (de)compressing a stream with +.Xr zlib 3 . +.El +Additionally, any errors returned by the callback function +for added or replaced files will be passed back. +.Sh SEE ALSO +.Xr libzip 3 , +.Xr zip_discard 3 , +.Xr zip_fdopen 3 , +.Xr zip_get_error 3 , +.Xr zip_open 3 , +.Xr zip_register_cancel_callback_with_state 3 , +.Xr zip_register_progress_callback_with_state 3 , +.Xr zip_set_archive_flag 3 , +.Xr zip_strerror 3 +.Sh HISTORY +.Fn zip_close +was added in libzip 0.6. +.Sh AUTHORS +.An -nosplit +.An Dieter Baron Aq Mt dillo@nih.at +and +.An Thomas Klausner Aq Mt wiz@gatalith.at +.Sh CAVEATS +Please note that all indices, +.Xr zip_stat 3 +information and other data about the archive is invalid after +.Nm . +When you open the same file again, it will be a completely new +.Vt zip_t +structure. diff --git a/thirdparty/libzip-1.11.3/build-emcmake/man/zip_compression_method_supported.3 b/thirdparty/libzip-1.11.3/build-emcmake/man/zip_compression_method_supported.3 new file mode 100644 index 0000000..77553cf --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/man/zip_compression_method_supported.3 @@ -0,0 +1,65 @@ +.\" zip_compression_method_supported.mdoc -- return if compression method is supported +.\" Copyright (C) 2020 Dieter Baron and Thomas Klausner +.\" +.\" This file is part of libzip, a library to manipulate ZIP files. +.\" The authors can be contacted at +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in +.\" the documentation and/or other materials provided with the +.\" distribution. +.\" 3. The names of the authors may not be used to endorse or promote +.\" products derived from this software without specific prior +.\" written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS +.\" OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +.\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +.\" DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE +.\" GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +.\" IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +.\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN +.\" IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.\" +.Dd April 2, 2020 +.Dt ZIP_COMPRESSION_METHOD_SUPPORTED 3 +.Os +.Sh NAME +.Nm zip_compression_method_supported +.Nd return if a compression method is supported +.Sh LIBRARY +libzip (-lzip) +.Sh SYNOPSIS +.In zip.h +.Ft int +.Fn zip_compression_method_supported "zip_int32_t method" "int compress" +.Sh DESCRIPTION +The +.Fn zip_compression_method_supported +returns if the compression method +.Ar method +is supported for compression (if +.Ar compress +is zero) or decompression (otherwise). +.Sh RETURN VALUES +Returns 1 if the method is supported, 0 otherwise. +.Sh SEE ALSO +.Xr libzip 3 , +.Xr zip_encryption_method_supported 3 , +.Xr zip_set_file_compression 3 +.Sh HISTORY +.Fn zip_compression_method_supported +was added in libzip 1.7.0. +.Sh AUTHORS +.An -nosplit +.An Dieter Baron Aq Mt dillo@nih.at +and +.An Thomas Klausner Aq Mt wiz@gatalith.at diff --git a/thirdparty/libzip-1.11.3/build-emcmake/man/zip_delete.3 b/thirdparty/libzip-1.11.3/build-emcmake/man/zip_delete.3 new file mode 100644 index 0000000..0b622fe --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/man/zip_delete.3 @@ -0,0 +1,80 @@ +.\" zip_delete.mdoc -- delete files from zip archive +.\" Copyright (C) 2003-2017 Dieter Baron and Thomas Klausner +.\" +.\" This file is part of libzip, a library to manipulate ZIP archives. +.\" The authors can be contacted at +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in +.\" the documentation and/or other materials provided with the +.\" distribution. +.\" 3. The names of the authors may not be used to endorse or promote +.\" products derived from this software without specific prior +.\" written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS +.\" OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +.\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +.\" DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE +.\" GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +.\" IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +.\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN +.\" IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.\" +.Dd December 18, 2017 +.Dt ZIP_DELETE 3 +.Os +.Sh NAME +.Nm zip_delete +.Nd delete file from zip archive +.Sh LIBRARY +libzip (-lzip) +.Sh SYNOPSIS +.In zip.h +.Ft int +.Fn zip_delete "zip_t *archive" "zip_uint64_t index" +.Sh DESCRIPTION +The file at position +.Ar index +in the zip archive +.Ar archive +is marked as deleted. +.Sh RETURN VALUES +Upon successful completion 0 is returned. +Otherwise, \-1 is returned and the error code in +.Ar archive +is set to indicate the error. +.Sh ERRORS +.Fn zip_delete +fails if: +.Bl -tag -width Er +.It Bq Er ZIP_ER_INVAL +.Ar index +is not a valid file index in +.Ar archive . +.El +.Sh SEE ALSO +.Xr libzip 3 , +.Xr zip_unchange 3 +.Sh HISTORY +.Fn zip_delete +was added in libzip 0.6. +In libzip 0.10 the type of +.Ar index +was changed from +.Vt int +to +.Vt zip_uint64_t . +.Sh AUTHORS +.An -nosplit +.An Dieter Baron Aq Mt dillo@nih.at +and +.An Thomas Klausner Aq Mt wiz@gatalith.at diff --git a/thirdparty/libzip-1.11.3/build-emcmake/man/zip_dir_add.3 b/thirdparty/libzip-1.11.3/build-emcmake/man/zip_dir_add.3 new file mode 100644 index 0000000..c4b697b --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/man/zip_dir_add.3 @@ -0,0 +1,109 @@ +.\" zip_dir_add.mdoc -- add directory to zip archive +.\" Copyright (C) 2006-2020 Dieter Baron and Thomas Klausner +.\" +.\" This file is part of libzip, a library to manipulate ZIP archives. +.\" The authors can be contacted at +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in +.\" the documentation and/or other materials provided with the +.\" distribution. +.\" 3. The names of the authors may not be used to endorse or promote +.\" products derived from this software without specific prior +.\" written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS +.\" OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +.\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +.\" DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE +.\" GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +.\" IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +.\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN +.\" IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.\" +.Dd September 20, 2020 +.Dt ZIP_DIR_ADD 3 +.Os +.Sh NAME +.Nm zip_dir_add +.Nd add directory to zip archive +.Sh LIBRARY +libzip (-lzip) +.Sh SYNOPSIS +.In zip.h +.Ft zip_int64_t +.Fn zip_dir_add "zip_t *archive" "const char *name" "zip_flags_t flags" +.Sh DESCRIPTION +The function +.Fn zip_dir_add +adds a directory to a zip archive. +The argument +.Ar archive +specifies the zip archive to which the directory should be added. +.Ar name +is the directory's name in the zip archive. +.Pp +This function adds an entry to the archive. +It does not check whether a directory with that name exists in the +file system, nor does it add its contents if it does. +The +.Ar flags +argument can be any of: +.Bl -tag -width XZIPXFLXENCXSTRICTXX +.It Dv ZIP_FL_ENC_GUESS +Guess encoding of +.Ar name +(default). +(Only CP-437 and UTF-8 are recognized.) +.It Dv ZIP_FL_ENC_UTF_8 +Interpret +.Ar name +as UTF-8. +.It Dv ZIP_FL_ENC_CP437 +Interpret +.Ar name +as code page 437 (CP-437). +.El +.Sh RETURN VALUES +Upon successful completion, the index of the new entry in the archive +is returned. +Otherwise, \-1 is returned and the error code in +.Ar archive +is set to indicate the error. +.Sh ERRORS +.Fn zip_dir_add +fails if: +.Bl -tag -width Er +.It Bq Er ZIP_ER_EXISTS +There is already an entry called +.Ar name +in the archive. +.It Bq Er ZIP_ER_INVAL +.Ar archive +or +.Ar name +are +.Dv NULL , +or invalid UTF-8 encoded file names. +.It Bq Er ZIP_ER_MEMORY +Required memory could not be allocated. +.El +.Sh SEE ALSO +.Xr libzip 3 , +.Xr zip_file_add 3 +.Sh HISTORY +.Fn zip_dir_add +was added in libzip 0.11. +.Sh AUTHORS +.An -nosplit +.An Dieter Baron Aq Mt dillo@nih.at +and +.An Thomas Klausner Aq Mt wiz@gatalith.at diff --git a/thirdparty/libzip-1.11.3/build-emcmake/man/zip_discard.3 b/thirdparty/libzip-1.11.3/build-emcmake/man/zip_discard.3 new file mode 100644 index 0000000..5c4f3f4 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/man/zip_discard.3 @@ -0,0 +1,61 @@ +.\" zip_discard.mdoc -- close zip archive and discard changes +.\" Copyright (C) 2012-2017 Dieter Baron and Thomas Klausner +.\" +.\" This file is part of libzip, a library to manipulate ZIP archives. +.\" The authors can be contacted at +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in +.\" the documentation and/or other materials provided with the +.\" distribution. +.\" 3. The names of the authors may not be used to endorse or promote +.\" products derived from this software without specific prior +.\" written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS +.\" OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +.\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +.\" DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE +.\" GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +.\" IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +.\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN +.\" IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.\" +.Dd December 18, 2017 +.Dt ZIP_DISCARD 3 +.Os +.Sh NAME +.Nm zip_discard +.Nd close zip archive and discard changes +.Sh LIBRARY +libzip (-lzip) +.Sh SYNOPSIS +.In zip.h +.Ft void +.Fn zip_discard "zip_t *archive" +.Sh DESCRIPTION +The +.Fn zip_discard +function closes +.Ar archive +and frees the memory allocated for it. +Any changes to the archive are not written to disk and discarded. +.Sh SEE ALSO +.Xr libzip 3 , +.Xr zip_close 3 +.Sh HISTORY +.Fn zip_discard +was added in libzip 0.11. +.Sh AUTHORS +.An -nosplit +.An Dieter Baron Aq Mt dillo@nih.at +and +.An Thomas Klausner Aq Mt wiz@gatalith.at diff --git a/thirdparty/libzip-1.11.3/build-emcmake/man/zip_encryption_method_supported.3 b/thirdparty/libzip-1.11.3/build-emcmake/man/zip_encryption_method_supported.3 new file mode 100644 index 0000000..84c0ae8 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/man/zip_encryption_method_supported.3 @@ -0,0 +1,65 @@ +.\" zip_encryption_method_supported.mdoc -- return if encryption method is supported +.\" Copyright (C) 2020 Dieter Baron and Thomas Klausner +.\" +.\" This file is part of libzip, a library to manipulate ZIP files. +.\" The authors can be contacted at +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in +.\" the documentation and/or other materials provided with the +.\" distribution. +.\" 3. The names of the authors may not be used to endorse or promote +.\" products derived from this software without specific prior +.\" written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS +.\" OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +.\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +.\" DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE +.\" GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +.\" IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +.\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN +.\" IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.\" +.Dd April 2, 2020 +.Dt ZIP_ENCRYPTION_METHOD_SUPPORTED 3 +.Os +.Sh NAME +.Nm zip_encryption_method_supported +.Nd return if an encryption method is supported +.Sh LIBRARY +libzip (-lzip) +.Sh SYNOPSIS +.In zip.h +.Ft int +.Fn zip_encryption_method_supported "zip_int16_t method" "int encrypt" +.Sh DESCRIPTION +The +.Fn zip_encryption_method_supported +returns if the encryption method +.Ar method +is supported for encryption (if +.Ar encrypt +is zero) or decryption (otherwise). +.Sh RETURN VALUES +Returns 1 if the method is supported, 0 otherwise. +.Sh SEE ALSO +.Xr libzip 3 , +.Xr zip_compression_method_supported 3 , +.Xr zip_file_set_encryption 3 +.Sh HISTORY +.Fn zip_encryption_method_supported +was added in libzip 1.7.0. +.Sh AUTHORS +.An -nosplit +.An Dieter Baron Aq Mt dillo@nih.at +and +.An Thomas Klausner Aq Mt wiz@gatalith.at diff --git a/thirdparty/libzip-1.11.3/build-emcmake/man/zip_error_clear.3 b/thirdparty/libzip-1.11.3/build-emcmake/man/zip_error_clear.3 new file mode 100644 index 0000000..5b2bc6e --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/man/zip_error_clear.3 @@ -0,0 +1,69 @@ +.\" zip_error_clear.mdoc -- clear error state for archive or file +.\" Copyright (C) 2006-2021 Dieter Baron and Thomas Klausner +.\" +.\" This file is part of libzip, a library to manipulate ZIP archives. +.\" The authors can be contacted at +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in +.\" the documentation and/or other materials provided with the +.\" distribution. +.\" 3. The names of the authors may not be used to endorse or promote +.\" products derived from this software without specific prior +.\" written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS +.\" OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +.\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +.\" DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE +.\" GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +.\" IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +.\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN +.\" IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.\" +.Dd December 18, 2017 +.Dt ZIP_ERROR_CLEAR 3 +.Os +.Sh NAME +.Nm zip_error_clear , +.Nm zip_file_error_clear +.Nd clear error state for archive or file +.Sh LIBRARY +libzip (-lzip) +.Sh SYNOPSIS +.In zip.h +.Ft void +.Fn zip_error_clear "zip_t *archive" +.Ft void +.Fn zip_file_error_clear "zip_file_t *file" +.Sh DESCRIPTION +The +.Fn zip_error_clear +function clears the error state for the zip archive +.Ar archive . +.Pp +The +.Fn zip_file_error_clear +function does the same for the zip file +.Ar file . +.Sh SEE ALSO +.Xr libzip 3 , +.Xr zip_get_error 3 +.Sh HISTORY +.Fn zip_error_clear +and +.Fn zip_file_error_clear +were added in libzip 0.8. +.Sh AUTHORS +.An -nosplit +.An Dieter Baron Aq Mt dillo@nih.at +and +.An Thomas Klausner Aq Mt wiz@gatalith.at diff --git a/thirdparty/libzip-1.11.3/build-emcmake/man/zip_error_code_system.3 b/thirdparty/libzip-1.11.3/build-emcmake/man/zip_error_code_system.3 new file mode 100644 index 0000000..54a4f63 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/man/zip_error_code_system.3 @@ -0,0 +1,63 @@ +.\" zip_error_code_system.mdoc -- get system error part of zip_error +.\" Copyright (C) 2014-2017 Dieter Baron and Thomas Klausner +.\" +.\" This file is part of libzip, a library to manipulate ZIP archives. +.\" The authors can be contacted at +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in +.\" the documentation and/or other materials provided with the +.\" distribution. +.\" 3. The names of the authors may not be used to endorse or promote +.\" products derived from this software without specific prior +.\" written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS +.\" OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +.\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +.\" DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE +.\" GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +.\" IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +.\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN +.\" IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.\" +.Dd December 18, 2017 +.Dt ZIP_ERROR_CODE_SYSTEM 3 +.Os +.Sh NAME +.Nm zip_error_code_system +.Nd get operating system error part of zip_error +.Sh LIBRARY +libzip (-lzip) +.Sh SYNOPSIS +.In zip.h +.Ft int +.Fn zip_error_code_system "const zip_error_t *ze" +.Sh DESCRIPTION +The +.Fn zip_error_code_system +function returns the system specific part of the error from the +zip_error error +.Ar ze . +For finding out what system reported the error, use +.Xr zip_error_system_type 3 . +.Sh SEE ALSO +.Xr libzip 3 , +.Xr zip_error_code_zip 3 , +.Xr zip_error_system_type 3 +.Sh HISTORY +.Fn zip_error_code_system +was added in libzip 1.0. +.Sh AUTHORS +.An -nosplit +.An Dieter Baron Aq Mt dillo@nih.at +and +.An Thomas Klausner Aq Mt wiz@gatalith.at diff --git a/thirdparty/libzip-1.11.3/build-emcmake/man/zip_error_code_zip.3 b/thirdparty/libzip-1.11.3/build-emcmake/man/zip_error_code_zip.3 new file mode 100644 index 0000000..a07c90e --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/man/zip_error_code_zip.3 @@ -0,0 +1,60 @@ +.\" zip_error_code_zip.mdoc -- get libzip error part of zip_error +.\" Copyright (C) 2014-2017 Dieter Baron and Thomas Klausner +.\" +.\" This file is part of libzip, a library to manipulate ZIP archives. +.\" The authors can be contacted at +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in +.\" the documentation and/or other materials provided with the +.\" distribution. +.\" 3. The names of the authors may not be used to endorse or promote +.\" products derived from this software without specific prior +.\" written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS +.\" OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +.\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +.\" DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE +.\" GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +.\" IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +.\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN +.\" IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.\" +.Dd December 18, 2017 +.Dt ZIP_ERROR_CODE_ZIP 3 +.Os +.Sh NAME +.Nm zip_error_code_zip +.Nd get libzip error part of zip_error +.Sh LIBRARY +libzip (-lzip) +.Sh SYNOPSIS +.In zip.h +.Ft int +.Fn zip_error_code_zip "const zip_error_t *ze" +.Sh DESCRIPTION +The +.Fn zip_error_code_zip +function returns the libzip specific part of the error from the +zip_error error +.Ar ze . +.Sh SEE ALSO +.Xr libzip 3 , +.Xr zip_error_code_system 3 +.Sh HISTORY +.Fn zip_error_code_zip +was added in libzip 1.0. +.Sh AUTHORS +.An -nosplit +.An Dieter Baron Aq Mt dillo@nih.at +and +.An Thomas Klausner Aq Mt wiz@gatalith.at diff --git a/thirdparty/libzip-1.11.3/build-emcmake/man/zip_error_fini.3 b/thirdparty/libzip-1.11.3/build-emcmake/man/zip_error_fini.3 new file mode 100644 index 0000000..80395aa --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/man/zip_error_fini.3 @@ -0,0 +1,60 @@ +.\" zip_error_fini.mdoc -- clean up zip_error +.\" Copyright (C) 2014-2017 Dieter Baron and Thomas Klausner +.\" +.\" This file is part of libzip, a library to manipulate ZIP archives. +.\" The authors can be contacted at +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in +.\" the documentation and/or other materials provided with the +.\" distribution. +.\" 3. The names of the authors may not be used to endorse or promote +.\" products derived from this software without specific prior +.\" written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS +.\" OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +.\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +.\" DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE +.\" GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +.\" IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +.\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN +.\" IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.\" +.Dd December 18, 2017 +.Dt ZIP_ERROR_FINI 3 +.Os +.Sh NAME +.Nm zip_error_fini +.Nd clean up zip_error structure +.Sh LIBRARY +libzip (-lzip) +.Sh SYNOPSIS +.In zip.h +.Ft void +.Fn zip_error_fini "zip_error_t *ze" +.Sh DESCRIPTION +The +.Fn zip_error_fini +function cleans up and frees internally allocated memory of the +zip_error pointed to by +.Ar ze . +.Sh SEE ALSO +.Xr libzip 3 , +.Xr zip_error_init 3 +.Sh HISTORY +.Fn zip_error_fini +was added in libzip 1.0. +.Sh AUTHORS +.An -nosplit +.An Dieter Baron Aq Mt dillo@nih.at +and +.An Thomas Klausner Aq Mt wiz@gatalith.at diff --git a/thirdparty/libzip-1.11.3/build-emcmake/man/zip_error_get.3 b/thirdparty/libzip-1.11.3/build-emcmake/man/zip_error_get.3 new file mode 100644 index 0000000..55b0979 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/man/zip_error_get.3 @@ -0,0 +1,117 @@ +.\" zip_error_get.mdoc -- get error codes for archive or file +.\" Copyright (C) 2004-2017 Dieter Baron and Thomas Klausner +.\" +.\" This file is part of libzip, a library to manipulate ZIP archives. +.\" The authors can be contacted at +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in +.\" the documentation and/or other materials provided with the +.\" distribution. +.\" 3. The names of the authors may not be used to endorse or promote +.\" products derived from this software without specific prior +.\" written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS +.\" OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +.\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +.\" DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE +.\" GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +.\" IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +.\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN +.\" IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.\" +.Dd December 18, 2017 +.Dt ZIP_ERROR_GET 3 +.Os +.Sh NAME +.Nm zip_error_get , +.Nm zip_file_error_get +.Nd get error codes for archive or file (obsolete interface) +.Sh LIBRARY +libzip (-lzip) +.Sh SYNOPSIS +.In zip.h +.Ft void +.Fn zip_error_get "zip_t *archive" "int *zep" "int *sep" +.Ft void +.Fn zip_file_error_get "zip_file_t *file" "int *zep" "int *sep" +.Sh DESCRIPTION +The functions +.Fn zip_error_get +and +.Fn zip_file_error_get +are deprecated. +Use +.Xr zip_error_code_system 3 , +.Xr zip_error_code_zip 3 , +.Xr zip_file_get_error 3 , +and +.Xr zip_get_error 3 +instead. +.Pp +For +.Fn zip_error_get , +replace +.Bd -literal -offset indent +int ze, se; +zip_error_get(za, &ze, &se); +.Ed +with +.Bd -literal -offset indent +int ze, se; +zip_error_t *error = zip_get_error(za); +ze = zip_error_code_zip(error); +se = zip_error_code_system(error); +.Ed +For +.Fn zip_file_error_get , +replace +.Bd -literal -offset indent +int ze, se; +zip_file_error_get(zf, &ze, &se); +.Ed +with +.Bd -literal -offset indent +int ze, se; +zip_error_t *error = zip_file_get_error(zf); +ze = zip_error_code_zip(error); +se = zip_error_code_system(error); +.Ed +.Sh SEE ALSO +.Xr libzip 3 , +.Xr zip_error_code_system 3 , +.Xr zip_error_code_zip 3 , +.Xr zip_file_get_error 3 , +.Xr zip_get_error 3 +.Sh HISTORY +.Fn zip_error_get +was added in libzip 0.6. +It was deprecated in libzip 1.0, use +.Fn zip_get_error , +.Fn zip_error_code_zip , +/ +.Fn zip_error_code_system +instead. +.Pp +.Fn zip_file_error_get +was added in libzip 0.6. +It was deprecated in libzip 1.0, use +.Fn zip_file_get_error , +.Fn zip_error_code_zip , +/ +.Fn zip_error_code_system +instead. +.Sh AUTHORS +.An -nosplit +.An Dieter Baron Aq Mt dillo@nih.at +and +.An Thomas Klausner Aq Mt wiz@gatalith.at diff --git a/thirdparty/libzip-1.11.3/build-emcmake/man/zip_error_get_sys_type.3 b/thirdparty/libzip-1.11.3/build-emcmake/man/zip_error_get_sys_type.3 new file mode 100644 index 0000000..43219a3 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/man/zip_error_get_sys_type.3 @@ -0,0 +1,77 @@ +.\" zip_error_get_sys_type.mdoc -- get type of error +.\" Copyright (C) 2004-2017 Dieter Baron and Thomas Klausner +.\" +.\" This file is part of libzip, a library to manipulate ZIP archives. +.\" The authors can be contacted at +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in +.\" the documentation and/or other materials provided with the +.\" distribution. +.\" 3. The names of the authors may not be used to endorse or promote +.\" products derived from this software without specific prior +.\" written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS +.\" OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +.\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +.\" DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE +.\" GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +.\" IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +.\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN +.\" IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.\" +.Dd December 18, 2017 +.Dt ZIP_ERROR_GET_SYS_TYPE 3 +.Os +.Sh NAME +.Nm zip_error_get_sys_type +.Nd get type of system error code (obsolete interface) +.Sh LIBRARY +libzip (-lzip) +.Sh SYNOPSIS +.In zip.h +.Ft int +.Fn zip_error_get_sys_type "int ze" +.Sh DESCRIPTION +The function +.Fn zip_error_get_sys_type +is deprecated; use +.Xr zip_error_init_with_code 3 +and +.Xr zip_error_system_type 3 +instead. +.Pp +Replace +.Bd -literal -offset indent +int i = zip_error_get_sys_type(ze); +.Ed +with +.Bd -literal -offset indent +zip_error_t error; +zip_error_init_with_code(&error, ze); +int i = zip_error_system_type(&error); +.Ed +.Sh SEE ALSO +.Xr libzip 3 , +.Xr zip_error_init_with_code 3 , +.Xr zip_error_system_type 3 +.Sh HISTORY +.Fn zip_error_get_sys_type +was added in libzip 0.6. +It was deprecated in libzip 1.0, use +.Fn zip_error_system_type +instead. +.Sh AUTHORS +.An -nosplit +.An Dieter Baron Aq Mt dillo@nih.at +and +.An Thomas Klausner Aq Mt wiz@gatalith.at diff --git a/thirdparty/libzip-1.11.3/build-emcmake/man/zip_error_init.3 b/thirdparty/libzip-1.11.3/build-emcmake/man/zip_error_init.3 new file mode 100644 index 0000000..3f2e3b7 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/man/zip_error_init.3 @@ -0,0 +1,76 @@ +.\" zip_error_init.mdoc -- initialize zip_error +.\" Copyright (C) 2014-2017 Dieter Baron and Thomas Klausner +.\" +.\" This file is part of libzip, a library to manipulate ZIP archives. +.\" The authors can be contacted at +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in +.\" the documentation and/or other materials provided with the +.\" distribution. +.\" 3. The names of the authors may not be used to endorse or promote +.\" products derived from this software without specific prior +.\" written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS +.\" OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +.\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +.\" DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE +.\" GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +.\" IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +.\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN +.\" IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.\" +.Dd December 18, 2017 +.Dt ZIP_ERROR_INIT 3 +.Os +.Sh NAME +.Nm zip_error_init , +.Nm zip_error_init_with_code +.Nd initialize zip_error structure +.Sh LIBRARY +libzip (-lzip) +.Sh SYNOPSIS +.In zip.h +.Ft void +.Fn zip_error_init "zip_error_t *error" +.Ft void +.Fn zip_error_init_with_code "zip_error_t *error" "int ze" +.Sh DESCRIPTION +The +.Fn zip_error_init +function initializes the zip_error pointed to by +.Ar error . +.Ar *error +must be allocated before calling +.Fn zip_error_init . +.Pp +The +.Fn zip_error_init_with_code +function does the same, but additionally sets the zip error code to +.Ar ze +and sets the system error code to the current +.Xr errno 3 +value, if appropriate. +.\" TODO: describe when you would need to call this at all +.Sh SEE ALSO +.Xr libzip 3 , +.Xr zip_error_fini 3 +.Sh HISTORY +.Fn zip_error_init +and +.Fn zip_error_init_with_code +were added in libzip 1.0. +.Sh AUTHORS +.An -nosplit +.An Dieter Baron Aq Mt dillo@nih.at +and +.An Thomas Klausner Aq Mt wiz@gatalith.at diff --git a/thirdparty/libzip-1.11.3/build-emcmake/man/zip_error_set.3 b/thirdparty/libzip-1.11.3/build-emcmake/man/zip_error_set.3 new file mode 100644 index 0000000..d421867 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/man/zip_error_set.3 @@ -0,0 +1,70 @@ +.\" zip_error_set.mdoc -- set zip_error +.\" Copyright (C) 2014-2021 Dieter Baron and Thomas Klausner +.\" +.\" This file is part of libzip, a library to manipulate ZIP archives. +.\" The authors can be contacted at +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in +.\" the documentation and/or other materials provided with the +.\" distribution. +.\" 3. The names of the authors may not be used to endorse or promote +.\" products derived from this software without specific prior +.\" written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS +.\" OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +.\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +.\" DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE +.\" GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +.\" IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +.\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN +.\" IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.\" +.Dd December 5, 2022 +.Dt ZIP_ERROR_SET 3 +.Os +.Sh NAME +.Nm zip_error_set +.Nd fill in zip_error structure +.Sh LIBRARY +libzip (-lzip) +.Sh SYNOPSIS +.In zip.h +.Ft void +.Fn zip_error_set "zip_error_t *ze" "int le" "int se" +.Sh DESCRIPTION +The +.Fn zip_error_set +function sets the zip_error pointed to by +.Ar ze +to the libzip error code +.Ar le +and the system error code +.Ar se . +.Pp +.Ar ze +must be allocated and initialized with +.Xr zip_error_init 3 +before calling +.Fn zip_error_set . +.Sh SEE ALSO +.Xr libzip 3 , +.Xr zip_error_init 3 , +.Xr zip_error_set_from_source 3 +.Sh HISTORY +.Fn zip_error_set +was added in libzip 1.0. +.Sh AUTHORS +.An -nosplit +.An Dieter Baron Aq Mt dillo@nih.at +and +.An Thomas Klausner Aq Mt wiz@gatalith.at diff --git a/thirdparty/libzip-1.11.3/build-emcmake/man/zip_error_set_from_source.3 b/thirdparty/libzip-1.11.3/build-emcmake/man/zip_error_set_from_source.3 new file mode 100644 index 0000000..48f974f --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/man/zip_error_set_from_source.3 @@ -0,0 +1,69 @@ +.\" zip_error_set_from_source.mdoc -- set zip_error from source +.\" Copyright (C) 2022 Dieter Baron and Thomas Klausner +.\" +.\" This file is part of libzip, a library to manipulate ZIP archives. +.\" The authors can be contacted at +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in +.\" the documentation and/or other materials provided with the +.\" distribution. +.\" 3. The names of the authors may not be used to endorse or promote +.\" products derived from this software without specific prior +.\" written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS +.\" OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +.\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +.\" DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE +.\" GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +.\" IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +.\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN +.\" IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.\" +.Dd December 5, 2022 +.Dt ZIP_ERROR_SET_FROM_SOURCE 3 +.Os +.Sh NAME +.Nm zip_error_set_from_source +.Nd fill in zip_error structure from source +.Sh LIBRARY +libzip (-lzip) +.Sh SYNOPSIS +.In zip.h +.Ft void +.Fn zip_error_set_from_source "zip_error_t *ze" "zip_source_t *src" +.Sh DESCRIPTION +The +.Fn zip_error_set_from_source +function sets the zip_error pointed to by +.Ar ze +to the error reported by +.Ar src +as returned by +.Xr zip_error_source 3 . +.Ar ze +must be allocated and initialized with +.Xr zip_error_init 3 +before calling +.Fn zip_error_set_from_source . +.Sh SEE ALSO +.Xr libzip 3 , +.Xr zip_error_init 3 , +.Xr zip_error_set 3 +.Sh HISTORY +.Fn zip_error_set_from_source +was added in libzip 1.10. +.Sh AUTHORS +.An -nosplit +.An Dieter Baron Aq Mt dillo@nih.at +and +.An Thomas Klausner Aq Mt wiz@gatalith.at diff --git a/thirdparty/libzip-1.11.3/build-emcmake/man/zip_error_strerror.3 b/thirdparty/libzip-1.11.3/build-emcmake/man/zip_error_strerror.3 new file mode 100644 index 0000000..40d5865 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/man/zip_error_strerror.3 @@ -0,0 +1,67 @@ +.\" zip_error_strerror.mdoc -- create human-readable version of zip_error +.\" Copyright (C) 2014-2017 Dieter Baron and Thomas Klausner +.\" +.\" This file is part of libzip, a library to manipulate ZIP archives. +.\" The authors can be contacted at +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in +.\" the documentation and/or other materials provided with the +.\" distribution. +.\" 3. The names of the authors may not be used to endorse or promote +.\" products derived from this software without specific prior +.\" written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS +.\" OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +.\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +.\" DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE +.\" GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +.\" IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +.\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN +.\" IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.\" +.Dd December 18, 2017 +.Dt ZIP_ERROR_STRERROR 3 +.Os +.Sh NAME +.Nm zip_error_strerror +.Nd create human-readable string for zip_error +.Sh LIBRARY +libzip (-lzip) +.Sh SYNOPSIS +.In zip.h +.Ft const char * +.Fn zip_error_strerror "zip_error_t *ze" +.Sh DESCRIPTION +The +.Fn zip_error_strerror +function returns an error message string corresponding to +.Ar ze +like +.Xr strerror 3 . +This string will stay valid until the next call to +.Fn zip_error_strerror +or until +.Xr zip_error_fini 3 +is called. +.Sh SEE ALSO +.Xr libzip 3 , +.Xr strerror 3 , +.Xr zip_error_fini 3 +.Sh HISTORY +.Fn zip_error_strerror +was added in libzip 1.0. +.Sh AUTHORS +.An -nosplit +.An Dieter Baron Aq Mt dillo@nih.at +and +.An Thomas Klausner Aq Mt wiz@gatalith.at diff --git a/thirdparty/libzip-1.11.3/build-emcmake/man/zip_error_system_type.3 b/thirdparty/libzip-1.11.3/build-emcmake/man/zip_error_system_type.3 new file mode 100644 index 0000000..5a74dc0 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/man/zip_error_system_type.3 @@ -0,0 +1,77 @@ +.\" zip_error_system_type.mdoc -- return system type for error +.\" Copyright (C) 2014-2017 Dieter Baron and Thomas Klausner +.\" +.\" This file is part of libzip, a library to manipulate ZIP archives. +.\" The authors can be contacted at +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in +.\" the documentation and/or other materials provided with the +.\" distribution. +.\" 3. The names of the authors may not be used to endorse or promote +.\" products derived from this software without specific prior +.\" written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS +.\" OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +.\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +.\" DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE +.\" GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +.\" IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +.\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN +.\" IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.\" +.Dd December 18, 2017 +.Dt ZIP_ERROR_SYSTEM_TYPE 3 +.Os +.Sh NAME +.Nm zip_error_system_type +.Nd return type of system error +.Sh LIBRARY +libzip (-lzip) +.Sh SYNOPSIS +.In zip.h +.Ft int +.Fn zip_error_system_type "const zip_error_t *ze" +.Sh DESCRIPTION +The +.Fn zip_error_system_type +function returns the type of the system specific part for the zip_error +.Ar ze . +Currently, the following system types are defined: +.Bl -tag -width ZIP_ET_NONE +.It Dv ZIP_ET_NONE +System specific part of +.Ar ze +is unused. +.It Dv ZIP_ET_SYS +System specific part of +.Ar ze +is an +.Xr errno 2 . +.It Dv ZIP_ET_ZLIB +System specific part of +.Ar ze +is a +.Xr zlib 3 +error. +.El +.Sh SEE ALSO +.Xr libzip 3 , +.Xr zip_error_code_system 3 +.Sh HISTORY +.Fn zip_error_system_type +was added in libzip 1.0. +.Sh AUTHORS +.An -nosplit +.An Dieter Baron Aq Mt dillo@nih.at +and +.An Thomas Klausner Aq Mt wiz@gatalith.at diff --git a/thirdparty/libzip-1.11.3/build-emcmake/man/zip_error_to_data.3 b/thirdparty/libzip-1.11.3/build-emcmake/man/zip_error_to_data.3 new file mode 100644 index 0000000..6fdb2a3 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/man/zip_error_to_data.3 @@ -0,0 +1,69 @@ +.\" zip_error_to_data.mdoc -- create error data for ZIP_SOURCE_ERROR +.\" Copyright (C) 2014-2017 Dieter Baron and Thomas Klausner +.\" +.\" This file is part of libzip, a library to manipulate ZIP archives. +.\" The authors can be contacted at +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in +.\" the documentation and/or other materials provided with the +.\" distribution. +.\" 3. The names of the authors may not be used to endorse or promote +.\" products derived from this software without specific prior +.\" written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS +.\" OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +.\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +.\" DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE +.\" GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +.\" IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +.\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN +.\" IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.\" +.Dd December 18, 2017 +.Dt ZIP_ERROR_TO_DATA 3 +.Os +.Sh NAME +.Nm zip_error_to_data +.Nd convert zip_error to return value suitable for ZIP_SOURCE_ERROR +.Sh LIBRARY +libzip (-lzip) +.Sh SYNOPSIS +.In zip.h +.Ft zip_int64_t +.Fn zip_error_to_data "const zip_error_t *ze" "void *data" "zip_uint64_t len" +.Sh DESCRIPTION +.Fn zip_error_to_data +function converts the zip_error +.Ar ze +into data suitable as return value for +.Dv ZIP_SOURCE_ERROR . +The data is written into the buffer +.Ar data +of size +.Ar len . +If the buffer is not large enough to hold 2 ints, an error is +returned. +.Sh RETURN VALUES +.Fn zip_error_to_data +returns 2*(sizeof int) on success, and \-1 on error. +.Sh SEE ALSO +.Xr libzip 3 , +.Xr zip_source_function 3 +.Sh HISTORY +.Fn zip_error_to_data +was added in libzip 1.0. +.Sh AUTHORS +.An -nosplit +.An Dieter Baron Aq Mt dillo@nih.at +and +.An Thomas Klausner Aq Mt wiz@gatalith.at diff --git a/thirdparty/libzip-1.11.3/build-emcmake/man/zip_error_to_str.3 b/thirdparty/libzip-1.11.3/build-emcmake/man/zip_error_to_str.3 new file mode 100644 index 0000000..62b5a32 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/man/zip_error_to_str.3 @@ -0,0 +1,88 @@ +.\" zip_error_to_str.mdoc -- get string representation of zip error code +.\" Copyright (C) 2003-2017 Dieter Baron and Thomas Klausner +.\" +.\" This file is part of libzip, a library to manipulate ZIP archives. +.\" The authors can be contacted at +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in +.\" the documentation and/or other materials provided with the +.\" distribution. +.\" 3. The names of the authors may not be used to endorse or promote +.\" products derived from this software without specific prior +.\" written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS +.\" OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +.\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +.\" DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE +.\" GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +.\" IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +.\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN +.\" IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.\" +.Dd December 18, 2017 +.Dt ZIP_ERROR_TO_STR 3 +.Os +.Sh NAME +.Nm zip_error_to_str +.Nd get string representation of zip error (obsolete interface) +.Sh LIBRARY +libzip (-lzip) +.Sh SYNOPSIS +.In zip.h +.Ft int +.Fn zip_error_to_str "char *buf" "zip_uint64_t len" "int ze" "int se" +.Sh DESCRIPTION +The function +.Fn zip_error_to_str +is deprecated; use +.Xr zip_error_init_with_code 3 +and +.Xr zip_error_strerror 3 +instead. +.Pp +Replace +.Bd -literal -offset indent +char buf[BUFSIZE]; +zip_error_to_str(buf, sizeof(buf), ze, se); +printf("%s", buf); +.Ed +with +.Bd -literal -offset indent +zip_error_t error; +zip_error_init_with_code(&error, ze); +printf("%s", zip_error_strerror(&error)); +zip_error_fini(&error); +.Ed +.Sh SEE ALSO +.Xr libzip 3 , +.Xr zip_error_init_with_code 3 , +.Xr zip_error_strerror 3 +.Sh HISTORY +.Fn zip_error_to_str +was added in libzip 0.6. +In libzip 0.10 the type of +.Ar len +was changed from +.Vt size_t +to +.Vt zip_uint64_t . +It was deprecated in libzip 1.0, use +.Fn zip_error_init_with_code +and +.Fn zip_error_strerror +instead. +.Sh AUTHORS +.An -nosplit +.An Dieter Baron Aq Mt dillo@nih.at +and +.An Thomas Klausner Aq Mt wiz@gatalith.at diff --git a/thirdparty/libzip-1.11.3/build-emcmake/man/zip_errors.3 b/thirdparty/libzip-1.11.3/build-emcmake/man/zip_errors.3 new file mode 100644 index 0000000..117e2e9 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/man/zip_errors.3 @@ -0,0 +1,125 @@ +.\" zip_errors.mdoc -- list of all libzip error codes +.\" Copyright (C) 1999-2024 Dieter Baron and Thomas Klausner +.\" +.\" This file is part of libzip, a library to manipulate ZIP archives. +.\" The authors can be contacted at +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in +.\" the documentation and/or other materials provided with the +.\" distribution. +.\" 3. The names of the authors may not be used to endorse or promote +.\" products derived from this software without specific prior +.\" written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS +.\" OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +.\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +.\" DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE +.\" GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +.\" IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +.\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN +.\" IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.\" +.\" This file was generated automatically by ./make_zip_errors.sh +.\" from ../lib/zip.h; make changes there. +.\" +.Dd March 15, 2024 +.Dt ZIP_ERRORS 3 +.Os +.Sh NAME +.Nm zip_errors +.Nd list of all libzip error codes +.Sh LIBRARY +libzip (-lzip) +.Sh SYNOPSIS +.In zip.h +.Sh DESCRIPTION +The following error codes are used by libzip: +.Bl -tag -width XZIPXERXCOMPNOTSUPPXX +.It Bq Er ZIP_ER_CANCELLED +Operation cancelled. +.It Bq Er ZIP_ER_CHANGED +Entry has been changed. +.It Bq Er ZIP_ER_CLOSE +Closing zip archive failed. +.It Bq Er ZIP_ER_COMPNOTSUPP +Compression method not supported. +.It Bq Er ZIP_ER_COMPRESSED_DATA +Compressed data invalid. +.It Bq Er ZIP_ER_CRC +CRC error. +.It Bq Er ZIP_ER_DATA_LENGTH +Unexpected length of data. +.It Bq Er ZIP_ER_DELETED +Entry has been deleted. +.It Bq Er ZIP_ER_ENCRNOTSUPP +Encryption method not supported. +.It Bq Er ZIP_ER_EOF +Premature end of file. +.It Bq Er ZIP_ER_EXISTS +File already exists. +.It Bq Er ZIP_ER_INCONS +Zip archive inconsistent. +.It Bq Er ZIP_ER_INTERNAL +Internal error. +.It Bq Er ZIP_ER_INUSE +Resource still in use. +.It Bq Er ZIP_ER_INVAL +Invalid argument. +.It Bq Er ZIP_ER_MEMORY +Malloc failure. +.It Bq Er ZIP_ER_MULTIDISK +Multi-disk zip archives not supported. +.It Bq Er ZIP_ER_NOENT +No such file. +.It Bq Er ZIP_ER_NOPASSWD +No password provided. +.It Bq Er ZIP_ER_NOT_ALLOWED +Not allowed in torrentzip. +.It Bq Er ZIP_ER_NOZIP +Not a zip archive. +.It Bq Er ZIP_ER_OK +No error. +.It Bq Er ZIP_ER_OPEN +Can't open file. +.It Bq Er ZIP_ER_OPNOTSUPP +Operation not supported. +.It Bq Er ZIP_ER_RDONLY +Read-only archive. +.It Bq Er ZIP_ER_READ +Read error. +.It Bq Er ZIP_ER_REMOVE +Can't remove file. +.It Bq Er ZIP_ER_RENAME +Renaming temporary file failed. +.It Bq Er ZIP_ER_SEEK +Seek error. +.It Bq Er ZIP_ER_TELL +Tell error. +.It Bq Er ZIP_ER_TMPOPEN +Failure to create temporary file. +.It Bq Er ZIP_ER_TRUNCATED_ZIP +Possibly truncated or corrupted zip archive. +.It Bq Er ZIP_ER_WRITE +Write error. +.It Bq Er ZIP_ER_WRONGPASSWD +Wrong password provided. +.It Bq Er ZIP_ER_ZIPCLOSED +Containing zip archive was closed. +.It Bq Er ZIP_ER_ZLIB +Zlib error. +.El +.Sh AUTHORS +.An -nosplit +.An Dieter Baron Aq Mt dillo@nih.at +and +.An Thomas Klausner Aq Mt wiz@gatalith.at diff --git a/thirdparty/libzip-1.11.3/build-emcmake/man/zip_fclose.3 b/thirdparty/libzip-1.11.3/build-emcmake/man/zip_fclose.3 new file mode 100644 index 0000000..42e5e80 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/man/zip_fclose.3 @@ -0,0 +1,65 @@ +.\" zip_fclose.mdoc -- close file in zip archive +.\" Copyright (C) 2003-2017 Dieter Baron and Thomas Klausner +.\" +.\" This file is part of libzip, a library to manipulate ZIP archives. +.\" The authors can be contacted at +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in +.\" the documentation and/or other materials provided with the +.\" distribution. +.\" 3. The names of the authors may not be used to endorse or promote +.\" products derived from this software without specific prior +.\" written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS +.\" OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +.\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +.\" DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE +.\" GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +.\" IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +.\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN +.\" IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.\" +.Dd December 18, 2017 +.Dt ZIP_FCLOSE 3 +.Os +.Sh NAME +.Nm zip_fclose +.Nd close file in zip archive +.Sh LIBRARY +libzip (-lzip) +.Sh SYNOPSIS +.In zip.h +.Ft int +.Fn zip_fclose "zip_file_t *file" +.Sh DESCRIPTION +The +.Fn zip_fclose +function closes +.Ar file +and frees the memory allocated for it. +.Sh RETURN VALUES +Upon successful completion 0 is returned. +Otherwise, the error code is returned. +.Sh SEE ALSO +.Xr libzip 3 , +.Xr zip_fopen 3 , +.Xr zip_fread 3 , +.Xr zip_fseek 3 +.Sh HISTORY +.Fn zip_fclose +was added in libzip 0.6. +.Sh AUTHORS +.An -nosplit +.An Dieter Baron Aq Mt dillo@nih.at +and +.An Thomas Klausner Aq Mt wiz@gatalith.at diff --git a/thirdparty/libzip-1.11.3/build-emcmake/man/zip_fdopen.3 b/thirdparty/libzip-1.11.3/build-emcmake/man/zip_fdopen.3 new file mode 100644 index 0000000..ee249e5 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/man/zip_fdopen.3 @@ -0,0 +1,149 @@ +.\" zip_fdopen.mdoc -- open zip archive using existing file descriptor +.\" Copyright (C) 2009-2021 Dieter Baron and Thomas Klausner +.\" +.\" This file is part of libzip, a library to manipulate ZIP archives. +.\" The authors can be contacted at +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in +.\" the documentation and/or other materials provided with the +.\" distribution. +.\" 3. The names of the authors may not be used to endorse or promote +.\" products derived from this software without specific prior +.\" written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS +.\" OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +.\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +.\" DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE +.\" GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +.\" IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +.\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN +.\" IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.\" +.Dd September 23, 2022 +.Dt ZIP_FDOPEN 3 +.Os +.Sh NAME +.Nm zip_fdopen +.Nd open zip archive using open file descriptor +.Sh LIBRARY +libzip (-lzip) +.Sh SYNOPSIS +.In zip.h +.Ft zip_t * +.Fn zip_fdopen "int fd" "int flags" "int *errorp" +.Sh DESCRIPTION +The zip archive specified by the open file descriptor +.Ar fd +is opened and a pointer to a +.Ft struct zip , +used to manipulate the archive, is returned. +In contrast to +.Xr zip_open 3 , +using +.Nm zip_fdopen +the archive can only be opened in read-only mode. +The +.Ar fd +argument may not be used any longer after calling +.Nm zip_fdopen . +The +.Fa flags +are specified by +.Em or Ns No 'ing +the following values, or 0 for none of them. +.Bl -tag -offset indent -width ZIP_CHECKCONS +.It Dv ZIP_CHECKCONS +Perform additional stricter consistency checks on the archive, and +error if they fail. +.El +.Pp +If an error occurs and +.Ar errorp +is +.No non- Ns Dv NULL , +it will be set to the corresponding error code. +.Sh RETURN VALUES +Upon successful completion +.Fn zip_fdopen +returns a +.Ft struct zip +pointer, and +.Ar fd +should not be used any longer, nor passed to +.Xr close 2 . +Otherwise, +.Dv NULL +is returned and +.Ar *errorp +is set to indicate the error. +In the error case, +.Ar fd +remains unchanged. +.Sh ERRORS +The file specified by +.Ar fd +is prepared for use by +.Xr libzip 3 +unless: +.Bl -tag -width Er +.It Bq Er ZIP_ER_INCONS +Inconsistencies were found in the file specified by +.Ar path . +This error is often caused by specifying +.Dv ZIP_CHECKCONS +but can also happen without it. +.It Bq Er ZIP_ER_INVAL +The +.Ar flags +argument is invalid. +Not all +.Xr zip_open 3 +flags are allowed for +.Nm zip_fdopen , +see +.Sx DESCRIPTION . +.It Bq Er ZIP_ER_MEMORY +Required memory could not be allocated. +.It Bq Er ZIP_ER_NOZIP +The file specified by +.Ar fd +is not a zip archive. +.It Bq Er ZIP_ER_OPEN +The file specified by +.Ar fd +could not be prepared for use by +.Xr libzip 3 . +.It Bq Er ZIP_ER_OPNOTSUPP +This functionality has been disabled at compile time. +.It Bq Er ZIP_ER_READ +A read error occurred; see +.Va errno +for details. +.It Bq Er ZIP_ER_SEEK +The file specified by +.Ar fd +does not allow seeks. +.El +.Sh SEE ALSO +.Xr libzip 3 , +.Xr zip_close 3 , +.Xr zip_error_strerror 3 , +.Xr zip_open 3 +.Sh HISTORY +.Fn zip_fdopen +was added in libzip 1.0. +.Sh AUTHORS +.An -nosplit +.An Dieter Baron Aq Mt dillo@nih.at +and +.An Thomas Klausner Aq Mt wiz@gatalith.at diff --git a/thirdparty/libzip-1.11.3/build-emcmake/man/zip_file_add.3 b/thirdparty/libzip-1.11.3/build-emcmake/man/zip_file_add.3 new file mode 100644 index 0000000..8a6ceb7 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/man/zip_file_add.3 @@ -0,0 +1,175 @@ +.\" zip_file_add.mdoc -- add files to zip archive +.\" Copyright (C) 2004-2021 Dieter Baron and Thomas Klausner +.\" +.\" This file is part of libzip, a library to manipulate ZIP archives. +.\" The authors can be contacted at +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in +.\" the documentation and/or other materials provided with the +.\" distribution. +.\" 3. The names of the authors may not be used to endorse or promote +.\" products derived from this software without specific prior +.\" written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS +.\" OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +.\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +.\" DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE +.\" GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +.\" IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +.\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN +.\" IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.\" +.Dd March 18, 2024 +.Dt ZIP_FILE_ADD 3 +.Os +.Sh NAME +.Nm zip_file_add , +.Nm zip_file_replace +.Nd add file to zip archive or replace file in zip archive +.Sh LIBRARY +libzip (-lzip) +.Sh SYNOPSIS +.In zip.h +.Ft zip_int64_t +.Fn zip_file_add "zip_t *archive" "const char *name" "zip_source_t *source" "zip_flags_t flags" +.Ft int +.Fn zip_file_replace "zip_t *archive" "zip_uint64_t index" "zip_source_t *source" "zip_flags_t flags" +.Sh DESCRIPTION +The function +.Fn zip_file_add +adds a file to a zip archive, while +.Fn zip_file_replace +replaces an existing file in a zip archive. +The argument +.Ar archive +specifies the zip archive to which the file should be added. +.Ar name +is the file's name in the zip archive (for +.Fn zip_file_add ) , +while +.Ar index +specifies which file should be replaced (for +.Fn zip_file_replace ) . +The +.Ar flags +argument can be any combination of +.Dv ZIP_FL_OVERWRITE +with one of +.Dv ZIP_FL_ENC_* : +.Bl -tag -width XZIPXFLXENCXSTRICTXX +.It Dv ZIP_FL_OVERWRITE +Overwrite any existing file of the same name. +For +.Nm zip_file_add +only. +.It Dv ZIP_FL_ENC_GUESS +Guess encoding of +.Ar name +(default). +(Only CP-437 and UTF-8 are recognized.) +.It Dv ZIP_FL_ENC_UTF_8 +Interpret +.Ar name +as UTF-8. +.It Dv ZIP_FL_ENC_CP437 +Interpret +.Ar name +as code page 437 (CP-437). +.El +The data is obtained from the +.Ar source +argument, see +.Xr zip_source 3 . +.Pp +.Em NOTE : +.Xr zip_source_free 3 +should not be called on a +.Ar source +after it was used successfully in a +.Nm zip_file_add +or +.Nm zip_file_replace +call. +.Pp +Please also note that when using +.Nm zip_replace , +the target file's extra field information will be deleted since this +usually is dependent on the file contents. +If you want to keep them, query them beforehand with +.Xr zip_file_extra_field_get 3 +and restore them after +.Nm zip_replace +with +.Xr zip_file_extra_field_set 3 . +.Sh RETURN VALUES +Upon successful completion, +.Fn zip_file_add +returns the index of the new file in the archive, and +.Fn zip_file_replace +returns 0. +Otherwise, \-1 is returned and the error code in +.Ar archive +is set to indicate the error. +.Sh EXAMPLES +.Bd -literal -offset indent +zip_source_t *s; +const char buf[]="teststring"; + +if ((s=zip_source_buffer(archive, buf, sizeof(buf), 0)) == NULL || + zip_file_add(archive, name, s, ZIP_FL_ENC_UTF_8) < 0) { + zip_source_free(s); + printf("error adding file: %s\en", zip_strerror(archive)); +} +.Ed +.Sh ERRORS +.Fn zip_file_add +and +.Fn zip_file_replace +fail if: +.Bl -tag -width Er +.It Bq Er ZIP_ER_EXISTS +There is already a file called +.Ar name +in the archive. +(Only applies to +.Fn zip_file_add , +and only if +.Dv ZIP_FL_OVERWRITE +is not provided). +.It Bq Er ZIP_ER_INVAL +.Ar source +or +.Ar name +are +.Dv NULL , +or +.Ar index +is invalid. +.It Bq Er ZIP_ER_MEMORY +Required memory could not be allocated. +.It Bq Er ZIP_ER_RDONLY +Archive was opened in read-only mode. +.El +.Sh SEE ALSO +.Xr libzip 3 , +.Xr zip_source 3 +.Sh HISTORY +.Fn zip_file_add +and +.Fn zip_file_replace +were added in libzip 0.11. +.Sh AUTHORS +.An -nosplit +.An Dieter Baron Aq Mt dillo@nih.at +and +.An Thomas Klausner Aq Mt wiz@gatalith.at diff --git a/thirdparty/libzip-1.11.3/build-emcmake/man/zip_file_attributes_init.3 b/thirdparty/libzip-1.11.3/build-emcmake/man/zip_file_attributes_init.3 new file mode 100644 index 0000000..27ca205 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/man/zip_file_attributes_init.3 @@ -0,0 +1,61 @@ +.\" zip_file_attributes_init.mdoc -- initialize attributes structure +.\" Copyright (C) 2020 Dieter Baron and Thomas Klausner +.\" +.\" This file is part of libzip, a library to manipulate ZIP files. +.\" The authors can be contacted at +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in +.\" the documentation and/or other materials provided with the +.\" distribution. +.\" 3. The names of the authors may not be used to endorse or promote +.\" products derived from this software without specific prior +.\" written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS +.\" OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +.\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +.\" DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE +.\" GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +.\" IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +.\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN +.\" IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.\" +.Dd April 17, 2020 +.Dt ZIP_FILE_ATTRIBUTES_INIT 3 +.Os +.Sh NAME +.Nm zip_file_attributes_init +.Nd initialize zip file attributes structure +.Sh LIBRARY +libzip (-lzip) +.Sh SYNOPSIS +.In zip.h +.Ft void +.Fn zip_file_attributes_init "zip_file_attributes_t *attributes" +.Sh DESCRIPTION +The +.Fn zip_file_attributes_init +initializes a +.Vt zip_file_attributes_t +structure with default values. +It must be called before modifying such a structure for the first time. +.Sh SEE ALSO +.Xr libzip 3 , +.Xr zip_source_function 3 +.Sh HISTORY +.Fn zip_file_attributes_init +was added in libzip 1.7.0. +.Sh AUTHORS +.An -nosplit +.An Dieter Baron Aq Mt dillo@nih.at +and +.An Thomas Klausner Aq Mt wiz@gatalith.at diff --git a/thirdparty/libzip-1.11.3/build-emcmake/man/zip_file_extra_field_delete.3 b/thirdparty/libzip-1.11.3/build-emcmake/man/zip_file_extra_field_delete.3 new file mode 100644 index 0000000..a194161 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/man/zip_file_extra_field_delete.3 @@ -0,0 +1,130 @@ +.\" zip_file_extra_field_delete.mdoc -- delete extra field for file in zip +.\" Copyright (C) 2012-2017 Dieter Baron and Thomas Klausner +.\" +.\" This file is part of libzip, a library to manipulate ZIP files. +.\" The authors can be contacted at +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in +.\" the documentation and/or other materials provided with the +.\" distribution. +.\" 3. The names of the authors may not be used to endorse or promote +.\" products derived from this software without specific prior +.\" written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS +.\" OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +.\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +.\" DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE +.\" GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +.\" IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +.\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN +.\" IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.\" +.Dd December 18, 2017 +.Dt ZIP_FILE_EXTRA_FIELD_DELETE 3 +.Os +.Sh NAME +.Nm zip_file_extra_field_delete , +.Nm zip_file_extra_field_delete_by_id +.Nd delete extra field for file in zip +.Sh LIBRARY +libzip (-lzip) +.Sh SYNOPSIS +.In zip.h +.Ft int +.Fn zip_file_extra_field_delete "zip_t *archive" "zip_uint64_t index" "zip_uint16_t extra_field_index" "zip_flags_t flags" +.Ft int +.Fn zip_file_extra_field_delete_by_id "zip_t *archive" "zip_uint64_t index" "zip_uint16_t extra_field_id" "zip_uint16_t extra_field_index" "zip_flags_t flags" +.Sh DESCRIPTION +The +.Fn zip_file_extra_field_delete +function deletes the extra field with index +.Ar extra_field_index +for the file at position +.Ar index +in the zip archive. +.Pp +If +.Ar extra_field_index +is +.Dv ZIP_EXTRA_FIELD_ALL , +then all extra fields will be deleted. +.Pp +The following +.Ar flags +are supported: +.Bl -tag -width ZIP_FL_CENTRALXX -offset indent +.It Dv ZIP_FL_CENTRAL +Delete extra fields from the archive's central directory. +.It Dv ZIP_FL_LOCAL +Delete extra fields from the local file headers. +.El +.Pp +The +.Fn zip_file_extra_field_delete_by_id +function deletes the extra field with ID (two-byte signature) +.Ar extra_field_id +and index +.Ar extra_field_index +(in other words, the +.Ar extra_field_index Ns No 'th +extra field with ID +.Ar extra_field_id ) +The other arguments are the same as for +.Fn zip_file_extra_field_delete +.Dv ( ZIP_EXTRA_FIELD_ALL +will delete all extra fields of the specified ID). +.Pp +Please note that due to the library design, the index of an extra +field may be different between central directory and local file +headers. +For this reason, it is not allowed to specify both +.Dv ZIP_FL_CENTRAL +and +.Dv ZIP_FL_LOCAL +in +.Ar flags , +except when deleting all extra fields (i.e., +.Ar extra_field_index +being +.Dv ZIP_EXTRA_FIELD_ALL ) . +.Sh RETURN VALUES +Upon successful completion 0 is returned. +Otherwise, \-1 is returned and the error code in +.Ar archive +is set to indicate the error. +.Sh ERRORS +.Fn zip_file_extra_field_delete +and +.Fn zip_file_extra_field_delete_by_id +fail if: +.Bl -tag -width Er +.It Bq Er ZIP_ER_NOENT +.Ar index +is not a valid file index in +.Ar archive . +.El +.Sh SEE ALSO +.Xr libzip 3 , +.Xr zip_file_extra_field_get 3 , +.Xr zip_file_extra_field_set 3 , +.Xr zip_file_extra_fields_count 3 +.Sh HISTORY +.Fn zip_file_extra_field_delete +and +.Fn zip_file_extra_field_delete_by_id +were added in libzip 0.11. +.Sh AUTHORS +.An -nosplit +.An Dieter Baron Aq Mt dillo@nih.at +and +.An Thomas Klausner Aq Mt wiz@gatalith.at diff --git a/thirdparty/libzip-1.11.3/build-emcmake/man/zip_file_extra_field_get.3 b/thirdparty/libzip-1.11.3/build-emcmake/man/zip_file_extra_field_get.3 new file mode 100644 index 0000000..b1fa8a8 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/man/zip_file_extra_field_get.3 @@ -0,0 +1,157 @@ +.\" zip_file_extra_field_get.mdoc -- get extra field for file in zip +.\" Copyright (C) 2012-2017 Dieter Baron and Thomas Klausner +.\" +.\" This file is part of libzip, a library to manipulate ZIP files. +.\" The authors can be contacted at +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in +.\" the documentation and/or other materials provided with the +.\" distribution. +.\" 3. The names of the authors may not be used to endorse or promote +.\" products derived from this software without specific prior +.\" written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS +.\" OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +.\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +.\" DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE +.\" GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +.\" IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +.\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN +.\" IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.\" +.Dd December 18, 2017 +.Dt ZIP_FILE_EXTRA_FIELD_GET 3 +.Os +.Sh NAME +.Nm zip_file_extra_field_get , +.Nm zip_file_extra_field_get_by_id +.Nd get extra field for file in zip +.Sh LIBRARY +libzip (-lzip) +.Sh SYNOPSIS +.In zip.h +.Ft const zip_uint8_t * +.Fn zip_file_extra_field_get "zip_t *archive" "zip_uint64_t index" "zip_uint16_t extra_field_index" "zip_uint16_t *idp" "zip_uint16_t *lenp" "zip_flags_t flags" +.Ft const zip_uint8_t * +.Fn zip_file_extra_field_get_by_id "zip_t *archive" "zip_uint64_t index" "zip_uint16_t extra_field_id" "zip_uint16_t extra_field_index" "zip_uint16_t *lenp" "zip_flags_t flags" +.Sh DESCRIPTION +The +.Fn zip_file_extra_field_get +function returns the extra field with index +.Ar extra_field_index +for the file at position +.Ar index +in the zip archive. +This pointer should not be modified or +.Xr free 3 Ap d , +and becomes invalid when +.Ar archive +is closed. +If +.Ar idp +is not +.Dv NULL , +the integer to which it points will be set to the ID (two-byte +signature) of the selected extra field. +If +.Ar lenp +is not +.Dv NULL , +the integer to which it points will be set to the length of the +extra field. +Generally speaking, +.Ar lenp +and +.Ar idp +should be passed since only the extra field data is returned (i.e., +neither the ID nor the length, if the +.Ar idp +and +.Ar lenp +arguments are not provided). +.Pp +The following +.Ar flags +are supported: +.Bl -tag -width ZIP_FL_UNCHANGEDXX -offset indent +.It Dv ZIP_FL_CENTRAL +Return extra fields from the archive's central directory. +.It Dv ZIP_FL_LOCAL +Return extra fields from the local file headers. +.It Dv ZIP_FL_UNCHANGED +Return the original unchanged extra fields, ignoring any changes made. +.El +.Pp +The +.Fn zip_file_extra_field_get_by_id +function returns the extra field with ID (two-byte signature) +.Ar extra_field_id +and index +.Ar extra_field_index +(in other words, the +.Ar extra_field_index Ns No 'th +extra field with ID +.Ar extra_field_id ) +The other arguments are the same as for +.Fn zip_file_extra_field_get . +.Sh RETURN VALUES +Upon successful completion, a pointer to an extra field is returned, +or +.Dv NULL +if there is no extra field with that +.Ar extra_field_index +for the file with index +.Ar index . +In case of an error, +.Dv NULL +is returned and the error code in +.Ar archive +is set to indicate the error. +.Sh ERRORS +.Fn zip_file_extra_field_get +and +.Fn zip_file_extra_field_get_by_id +fail if: +.Bl -tag -width Er +.It Bq Er ZIP_ER_NOENT +.Ar index +is not a valid file index in +.Ar archive , +or +.Ar extra_field_index +is not a valid extra file index (for ID +.Ar extra_field_id ) . +.El +.Sh SEE ALSO +.Xr libzip 3 , +.Xr zip_file_extra_field_delete 3 , +.Xr zip_file_extra_field_set 3 , +.Xr zip_file_extra_fields_count 3 +.Sh HISTORY +.Fn zip_file_extra_field_get +and +.Fn zip_file_extra_field_get_by_id +were added in libzip 0.11. +.Sh AUTHORS +.An -nosplit +.An Dieter Baron Aq Mt dillo@nih.at +and +.An Thomas Klausner Aq Mt wiz@gatalith.at +.Sh CAVEATS +Please note that the extra field IDs 0x0001 (ZIP64 extension), +0x6375 (Infozip UTF-8 comment), and +0x7075 (Infozip UTF-8 file name) can not be read using +.Fn zip_file_extra_field_get +since they are used by +.Xr libzip 3 +internally. diff --git a/thirdparty/libzip-1.11.3/build-emcmake/man/zip_file_extra_field_set.3 b/thirdparty/libzip-1.11.3/build-emcmake/man/zip_file_extra_field_set.3 new file mode 100644 index 0000000..8646c64 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/man/zip_file_extra_field_set.3 @@ -0,0 +1,115 @@ +.\" zip_file_extra_field_set.mdoc -- set extra field for file in zip +.\" Copyright (C) 2012-2017 Dieter Baron and Thomas Klausner +.\" +.\" This file is part of libzip, a library to manipulate ZIP files. +.\" The authors can be contacted at +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in +.\" the documentation and/or other materials provided with the +.\" distribution. +.\" 3. The names of the authors may not be used to endorse or promote +.\" products derived from this software without specific prior +.\" written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS +.\" OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +.\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +.\" DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE +.\" GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +.\" IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +.\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN +.\" IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.\" +.Dd December 18, 2017 +.Dt ZIP_FILE_EXTRA_FIELD_SET 3 +.Os +.Sh NAME +.Nm zip_file_extra_field_set +.Nd set extra field for file in zip +.Sh LIBRARY +libzip (-lzip) +.Sh SYNOPSIS +.In zip.h +.Ft int +.Fn zip_file_extra_field_set "zip_t *archive" "zip_uint64_t index" "zip_uint16_t extra_field_id" "zip_uint16_t extra_field_index" "const zip_uint8_t *extra_field_data" "zip_uint16_t len" "zip_flags_t flags" +.Sh DESCRIPTION +The +.Fn zip_file_extra_field_set +function sets the extra field with ID (two-byte signature) +.Ar extra_field_id +and index +.Ar extra_field_index +for the file at position +.Ar index +in the zip archive. +The extra field's data will be set to +.Ar extra_field_data +and length +.Ar len . +If a new entry shall be appended, set +.Ar extra_field_index +to +.Dv ZIP_EXTRA_FIELD_NEW . +.Pp +At least one of the following +.Ar flags +must be set: +.Bl -tag -width ZIP_FL_CENTRALXX -offset indent +.It Dv ZIP_FL_CENTRAL +Set extra field in the archive's central directory. +.It Dv ZIP_FL_LOCAL +Set extra field in the local file headers. +.El +.Pp +Please note that the extra field IDs 0x0001 (ZIP64 extension), +0x6375 (Infozip UTF-8 comment), and +0x7075 (Infozip UTF-8 file name) can not be set using +.Fn zip_file_extra_field_set +since they are set by +.Xr libzip 3 +automatically when needed. +.Sh RETURN VALUES +Upon successful completion 0 is returned. +Otherwise, \-1 is returned and the error code in +.Ar archive +is set to indicate the error. +.Sh ERRORS +.Fn zip_file_extra_field_set +fails if: +.Bl -tag -width Er +.It Bq Er ZIP_ER_INVAL +The extra field size is too large (ID and length need 4 bytes; the +maximum length of all extra fields for one file combined is 65536 +bytes). +This error also occurs if +.Ar extra_field_index +is too large. +.It Bq Er ZIP_ER_MEMORY +Required memory could not be allocated. +.It Bq Er ZIP_ER_NOENT +.Ar index +is not a valid file index in +.Ar archive . +.El +.Sh SEE ALSO +.Xr libzip 3 , +.Xr zip_file_extra_field_delete 3 , +.Xr zip_file_extra_field_get 3 , +.Xr zip_file_extra_fields_count 3 +.Sh HISTORY +.Fn zip_file_extra_field_set +was added in libzip 0.11. +.Sh AUTHORS +.An -nosplit +.An Dieter Baron Aq Mt dillo@nih.at +and +.An Thomas Klausner Aq Mt wiz@gatalith.at diff --git a/thirdparty/libzip-1.11.3/build-emcmake/man/zip_file_extra_fields_count.3 b/thirdparty/libzip-1.11.3/build-emcmake/man/zip_file_extra_fields_count.3 new file mode 100644 index 0000000..1b40f5e --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/man/zip_file_extra_fields_count.3 @@ -0,0 +1,113 @@ +.\" zip_file_extra_fields_count.mdoc -- count extra field for file in zip +.\" Copyright (C) 2012-2017 Dieter Baron and Thomas Klausner +.\" +.\" This file is part of libzip, a library to manipulate ZIP files. +.\" The authors can be contacted at +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in +.\" the documentation and/or other materials provided with the +.\" distribution. +.\" 3. The names of the authors may not be used to endorse or promote +.\" products derived from this software without specific prior +.\" written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS +.\" OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +.\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +.\" DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE +.\" GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +.\" IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +.\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN +.\" IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.\" +.Dd December 18, 2017 +.Dt ZIP_FILE_EXTRA_FIELDS_COUNT 3 +.Os +.Sh NAME +.Nm zip_file_extra_fields_count , +.Nm zip_file_extra_fields_count_by_id +.Nd count extra fields for file in zip +.Sh LIBRARY +libzip (-lzip) +.Sh SYNOPSIS +.In zip.h +.Ft zip_int16_t +.Fn zip_file_extra_fields_count "zip_t *archive" "zip_uint64_t index" "zip_flags_t flags" +.Ft zip_int16_t +.Fn zip_file_extra_fields_count_by_id "zip_t *archive" "zip_uint64_t index" "zip_uint16_t extra_field_id" "zip_flags_t flags" +.Sh DESCRIPTION +The +.Fn zip_file_extra_fields_count +function counts the extra fields for the file at position +.Ar index +in the zip archive. +.Pp +The following +.Ar flags +are supported: +.Bl -tag -width ZIP_FL_CENTRALXX -offset indent +.It Dv ZIP_FL_CENTRAL +Count extra fields from the archive's central directory. +.It Dv ZIP_FL_LOCAL +Count extra fields from the local file headers. +.It Dv ZIP_FL_UNCHANGED +Count the original unchanged extra fields, ignoring any changes made. +.El +.Pp +The +.Fn zip_file_extra_fields_count_by_id +function counts the extra fields with ID (two-byte signature) +.Ar extra_field_id . +The other arguments are the same as for +.Fn zip_file_extra_fields_count . +.Pp +Extra fields that are the same in the central directory and the local file +header are merged into one. +Therefore, the counts with +.Dv ZIP_FL_CENTRAL +and +.Dv ZIP_FL_LOCAL +do not need to add up to the same value as when given +.Dv ZIP_FL_CENTRAL|ZIP_FL_LOCAL +at the same time. +.Sh RETURN VALUES +Upon successful completion, the requested number of extra fields is returned. +Otherwise, \-1 is returned and the error code in +.Ar archive +is set to indicate the error. +.Sh ERRORS +.Fn zip_file_extra_fields_count +and +.Fn zip_file_extra_fields_count_by_id +fail if: +.Bl -tag -width Er +.It Bq Er ZIP_ER_NOENT +.Ar index +is not a valid file index in +.Ar archive . +.\" TODO: _zip_read_local_ef errors +.El +.Sh SEE ALSO +.Xr libzip 3 , +.Xr zip_file_extra_field_delete 3 , +.Xr zip_file_extra_field_get 3 , +.Xr zip_file_extra_field_set 3 +.Sh HISTORY +.Fn zip_file_extra_fields_count +and +.Fn zip_file_extra_fields_count_by_id +were added in libzip 0.11. +.Sh AUTHORS +.An -nosplit +.An Dieter Baron Aq Mt dillo@nih.at +and +.An Thomas Klausner Aq Mt wiz@gatalith.at diff --git a/thirdparty/libzip-1.11.3/build-emcmake/man/zip_file_get_comment.3 b/thirdparty/libzip-1.11.3/build-emcmake/man/zip_file_get_comment.3 new file mode 100644 index 0000000..dc1461c --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/man/zip_file_get_comment.3 @@ -0,0 +1,119 @@ +.\" zip_file_get_comment.mdoc -- get comment for file in zip +.\" Copyright (C) 2006-2021 Dieter Baron and Thomas Klausner +.\" +.\" This file is part of libzip, a library to manipulate ZIP files. +.\" The authors can be contacted at +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in +.\" the documentation and/or other materials provided with the +.\" distribution. +.\" 3. The names of the authors may not be used to endorse or promote +.\" products derived from this software without specific prior +.\" written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS +.\" OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +.\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +.\" DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE +.\" GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +.\" IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +.\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN +.\" IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.\" +.Dd September 22, 2020 +.Dt ZIP_FILE_GET_COMMENT 3 +.Os +.Sh NAME +.Nm zip_file_get_comment +.Nd get comment for file in zip +.Sh LIBRARY +libzip (-lzip) +.Sh SYNOPSIS +.In zip.h +.Ft const char * +.Fn zip_file_get_comment "zip_t *archive" "zip_uint64_t index" "zip_uint32_t *lenp" "zip_flags_t flags" +.Sh DESCRIPTION +The +.Fn zip_file_get_comment +function returns the comment for the file at position +.Ar index +in the zip archive. +The name is in UTF-8 encoding unless +.Dv ZIP_FL_ENC_RAW +was specified (see below). +This pointer should not be modified or +.Xr free 3 Ap d , +and becomes invalid when +.Ar archive +is closed. +If +.Ar lenp +is not +.Dv NULL , +the integer to which it points will be set to the length of the +comment. +If +.Ar flags +is set to +.Dv ZIP_FL_UNCHANGED , +the original unchanged comment is returned. +.Pp +Additionally, the following +.Ar flags +are supported: +.Bl -tag -width ZIP_FL_ENC_STRICTXX -offset indent +.It Dv ZIP_FL_ENC_RAW +Return the unmodified comment as it is in the ZIP archive. +.It Dv ZIP_FL_ENC_GUESS +(Default.) +Guess the encoding of the comment in the ZIP archive and convert it +to UTF-8, if necessary. +(Only CP-437 and UTF-8 are recognized.) +.It Dv ZIP_FL_ENC_STRICT +Follow the ZIP specification for file names and extend it to file +comments, expecting them to be encoded in CP-437 in the ZIP archive +(except if it is a UTF-8 comment from the special extra field). +Convert it to UTF-8. +.El +.Em Note : +ASCII is a subset of both CP-437 and UTF-8. +.Sh RETURN VALUES +Upon successful completion, a pointer to the comment is returned, +or +.Dv NULL +if there is no comment. +In case of an error, +.Dv NULL +is returned and the error code in +.Ar archive +is set to indicate the error. +.Sh ERRORS +.Fn zip_file_get_comment +fails if: +.Bl -tag -width Er +.It Bq Er ZIP_ER_INVAL +.Ar index +is not a valid file index in +.Ar archive . +.El +.Sh SEE ALSO +.Xr libzip 3 , +.Xr zip_file_set_comment 3 , +.Xr zip_get_archive_comment 3 +.Sh HISTORY +.Fn zip_file_get_comment +was added in libzip 0.11. +.Sh AUTHORS +.An -nosplit +.An Dieter Baron Aq Mt dillo@nih.at +and +.An Thomas Klausner Aq Mt wiz@gatalith.at diff --git a/thirdparty/libzip-1.11.3/build-emcmake/man/zip_file_get_error.3 b/thirdparty/libzip-1.11.3/build-emcmake/man/zip_file_get_error.3 new file mode 100644 index 0000000..5680a5e --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/man/zip_file_get_error.3 @@ -0,0 +1,57 @@ +.\" zip_file_get_error.mdoc -- extract zip_error from zip_file +.\" Copyright (C) 2014-2017 Dieter Baron and Thomas Klausner +.\" +.\" This file is part of libzip, a library to manipulate ZIP archives. +.\" The authors can be contacted at +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in +.\" the documentation and/or other materials provided with the +.\" distribution. +.\" 3. The names of the authors may not be used to endorse or promote +.\" products derived from this software without specific prior +.\" written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS +.\" OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +.\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +.\" DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE +.\" GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +.\" IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +.\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN +.\" IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.\" +.Dd December 18, 2017 +.Dt ZIP_FILE_GET_ERROR 3 +.Os +.Sh NAME +.Nm zip_file_get_error +.Nd extract zip_error from zip_file +.Sh LIBRARY +libzip (-lzip) +.Sh SYNOPSIS +.In zip.h +.Ft zip_error_t * +.Fn zip_file_get_error "zip_file_t *zf" +.Sh DESCRIPTION +.Fn zip_file_get_error +function returns the zip_error associated with the zip_file +.Ar zf . +.Sh SEE ALSO +.Xr libzip 3 +.Sh HISTORY +.Fn zip_file_get_error +was added in libzip 1.0. +.Sh AUTHORS +.An -nosplit +.An Dieter Baron Aq Mt dillo@nih.at +and +.An Thomas Klausner Aq Mt wiz@gatalith.at diff --git a/thirdparty/libzip-1.11.3/build-emcmake/man/zip_file_get_external_attributes.3 b/thirdparty/libzip-1.11.3/build-emcmake/man/zip_file_get_external_attributes.3 new file mode 100644 index 0000000..fe5293a --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/man/zip_file_get_external_attributes.3 @@ -0,0 +1,165 @@ +.\" zip_file_get_external_attributes.mdoc -- get external attributes for file in zip +.\" Copyright (C) 2013-2017 Dieter Baron and Thomas Klausner +.\" +.\" This file is part of libzip, a library to manipulate ZIP files. +.\" The authors can be contacted at +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in +.\" the documentation and/or other materials provided with the +.\" distribution. +.\" 3. The names of the authors may not be used to endorse or promote +.\" products derived from this software without specific prior +.\" written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS +.\" OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +.\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +.\" DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE +.\" GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +.\" IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +.\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN +.\" IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.\" +.Dd December 18, 2017 +.Dt ZIP_FILE_GET_EXTERNAL_ATTRIBUTES 3 +.Os +.Sh NAME +.Nm zip_file_get_external_attributes +.Nd get external attributes for file in zip +.Sh LIBRARY +libzip (-lzip) +.Sh SYNOPSIS +.In zip.h +.Ft int +.Fn zip_file_get_external_attributes "zip_t *archive" "zip_uint64_t index" "zip_flags_t flags" "zip_uint8_t *opsys" "zip_uint32_t *attributes" +.Sh DESCRIPTION +The +.Fn zip_file_get_external_attributes +function returns the operating system and external attributes for the +file at position +.Ar index +in the zip archive. +The external attributes usually contain the operating system-specific +file permissions. +If +.Ar flags +is set to +.Dv ZIP_FL_UNCHANGED , +the original unchanged values are returned. +If +.Ar opsys +or +.Ar attributes +are +.Dv NULL , +they are not filled in. +.Pp +The following operating systems are defined by the zip specification: +.Bl -item -compact -offset indent +.It +.Dv ZIP_OPSYS_ACORN_RISC +.It +.Dv ZIP_OPSYS_ALTERNATE_MVS +.It +.Dv ZIP_OPSYS_AMIGA +.It +.Dv ZIP_OPSYS_ATARI_ST +.It +.Dv ZIP_OPSYS_BEOS +.It +.Dv ZIP_OPSYS_CPM +.It +.Dv ZIP_OPSYS_DOS +.It +.Dv ZIP_OPSYS_MACINTOSH +.It +.Dv ZIP_OPSYS_MVS +.It +.Dv ZIP_OPSYS_OPENVMS +.It +.Dv ZIP_OPSYS_OS_2 +.It +.Dv ZIP_OPSYS_OS_400 +.It +.Dv ZIP_OPSYS_OS_X +.It +.Dv ZIP_OPSYS_TANDEM +.It +.Dv ZIP_OPSYS_UNIX +.It +.Dv ZIP_OPSYS_VFAT +.It +.Dv ZIP_OPSYS_VM_CMS +.It +.Dv ZIP_OPSYS_VSE +.It +.Dv ZIP_OPSYS_WINDOWS_NTFS +(uncommon, use +.Dv ZIP_OPSYS_DOS +instead) +.It +.Dv ZIP_OPSYS_Z_SYSTEM +.El +.Pp +The defines above follow the PKWARE Inc. Appnote; please note that +the InfoZIP Appnote has a slightly different mapping. +.Sh RETURN VALUES +Upon successful completion, 0 is returned. +In case of an error, +.Dv \-1 +is returned and the error code in +.Ar archive +is set to indicate the error. +.Sh EXAMPLES +The following code can be used to expand +.Ar attributes +if the operating system is +.Dv ZIP_OPSYS_DOS . +.Bd -literal +#include + +#define FA_RDONLY 0x01 // FILE_ATTRIBUTE_READONLY +#define FA_DIREC 0x10 // FILE_ATTRIBUTE_DIRECTORY + +static mode_t +_zip_dos_attr2mode(zip_uint32_t attr) +{ + mode_t m = S_IRUSR | S_IRGRP | S_IROTH; + if (0 == (attr & FA_RDONLY)) + m |= S_IWUSR | S_IWGRP | S_IWOTH; + + if (attr & FA_DIREC) + m = (S_IFDIR | (m & ~S_IFMT)) | S_IXUSR | S_IXGRP | S_IXOTH; + + return m; +} +.Ed +.Sh ERRORS +.Fn zip_file_get_external_attributes +fails if: +.Bl -tag -width Er +.It Bq Er ZIP_ER_INVAL +.Ar index +is not a valid file index in +.Ar archive . +.El +.Sh SEE ALSO +.Xr libzip 3 , +.Xr zip_file_set_external_attributes 3 +.Sh HISTORY +.Fn zip_file_get_external_attributes +was added in libzip 0.11.2. +.Sh AUTHORS +.An -nosplit +.An Dieter Baron Aq Mt dillo@nih.at +and +.An Thomas Klausner Aq Mt wiz@gatalith.at diff --git a/thirdparty/libzip-1.11.3/build-emcmake/man/zip_file_rename.3 b/thirdparty/libzip-1.11.3/build-emcmake/man/zip_file_rename.3 new file mode 100644 index 0000000..c4fad6b --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/man/zip_file_rename.3 @@ -0,0 +1,104 @@ +.\" zip_file_rename.mdoc -- rename file in zip archive +.\" Copyright (C) 2003-2021 Dieter Baron and Thomas Klausner +.\" +.\" This file is part of libzip, a library to manipulate ZIP archives. +.\" The authors can be contacted at +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in +.\" the documentation and/or other materials provided with the +.\" distribution. +.\" 3. The names of the authors may not be used to endorse or promote +.\" products derived from this software without specific prior +.\" written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS +.\" OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +.\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +.\" DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE +.\" GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +.\" IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +.\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN +.\" IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.\" +.Dd September 22, 2020 +.Dt ZIP_FILE_RENAME 3 +.Os +.Sh NAME +.Nm zip_file_rename +.Nd rename file in zip archive +.Sh LIBRARY +libzip (-lzip) +.Sh SYNOPSIS +.In zip.h +.Ft int +.Fn zip_file_rename "zip_t *archive" "zip_uint64_t index" "const char *name" "zip_flags_t flags" +.Sh DESCRIPTION +The file at position +.Ar index +in the zip archive +.Ar archive +is renamed to +.Ar name . +The +.Ar flags +argument can be any of: +.Bl -tag -width XZIPXFLXENCXSTRICTXX +.It Dv ZIP_FL_ENC_GUESS +Guess encoding of +.Ar name +(default). +(Only CP-437 and UTF-8 are recognized.) +.It Dv ZIP_FL_ENC_UTF_8 +Interpret +.Ar name +as UTF-8. +.It Dv ZIP_FL_ENC_CP437 +Interpret +.Ar name +as code page 437 (CP-437). +.El +.Sh RETURN VALUES +Upon successful completion 0 is returned. +Otherwise, \-1 is returned and the error code in +.Ar archive +is set to indicate the error. +.Sh ERRORS +.Fn zip_file_rename +fails if: +.Bl -tag -width Er +.It Bq Er ZIP_ER_DELETED +The file to be renamed has been deleted from the archive. +.It Bq Er ZIP_ER_EXISTS +There is already a file called +.Ar name +in the archive. +.It Bq Er ZIP_ER_INVAL +.Ar index +is not a valid file index in +.Ar archive , +.Ar name is +.Dv NULL , +the empty string, or not a valid UTF-8 encoded string. +Also a file cannot be renamed to a directory or vice versa. +Directories are denoted by a trailing slash. +.El +.Sh SEE ALSO +.Xr libzip 3 , +.Xr zip_unchange 3 +.Sh HISTORY +.Fn zip_file_rename +was added in libzip 0.11. +.Sh AUTHORS +.An -nosplit +.An Dieter Baron Aq Mt dillo@nih.at +and +.An Thomas Klausner Aq Mt wiz@gatalith.at diff --git a/thirdparty/libzip-1.11.3/build-emcmake/man/zip_file_set_comment.3 b/thirdparty/libzip-1.11.3/build-emcmake/man/zip_file_set_comment.3 new file mode 100644 index 0000000..dbc1f14 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/man/zip_file_set_comment.3 @@ -0,0 +1,116 @@ +.\" zip_file_set_comment.mdoc -- set comment for file in zip +.\" Copyright (C) 2006-2021 Dieter Baron and Thomas Klausner +.\" +.\" This file is part of libzip, a library to manipulate ZIP files. +.\" The authors can be contacted at +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in +.\" the documentation and/or other materials provided with the +.\" distribution. +.\" 3. The names of the authors may not be used to endorse or promote +.\" products derived from this software without specific prior +.\" written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS +.\" OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +.\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +.\" DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE +.\" GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +.\" IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +.\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN +.\" IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.\" +.Dd September 22, 2020 +.Dt ZIP_FILE_SET_COMMENT 3 +.Os +.Sh NAME +.Nm zip_file_set_comment +.Nd set comment for file in zip +.Sh LIBRARY +libzip (-lzip) +.Sh SYNOPSIS +.In zip.h +.Ft int +.Fn zip_file_set_comment "zip_t *archive" "zip_uint64_t index" "const char *comment" "zip_uint16_t len" "zip_flags_t flags" +.Sh DESCRIPTION +The +.Fn zip_file_set_comment +function sets the comment for the file at position +.Ar index +in the zip archive to +.Ar comment +of length +.Ar len . +If +.Ar comment +is +.Dv NULL +and +.Ar len +is 0, the file comment will be removed. +The +.Ar flags +argument can be any of: +.Bl -tag -width XZIPXFLXENCXSTRICTXX +.It Dv ZIP_FL_ENC_GUESS +Guess encoding of +.Ar comment +(default). +(Only CP-437 and UTF-8 are recognized.) +.It Dv ZIP_FL_ENC_UTF_8 +Interpret +.Ar comment +as UTF-8. +.It Dv ZIP_FL_ENC_CP437 +Interpret +.Ar comment +as code page 437 (CP-437). +.El +.Sh RETURN VALUES +Upon successful completion 0 is returned. +Otherwise, \-1 is returned and the error information in +.Ar archive +is set to indicate the error. +.Sh ERRORS +.Fn zip_file_set_comment +fails if: +.Bl -tag -width Er +.It Bq Er ZIP_ER_INVAL +.Ar index +is not a valid file index in +.Ar archive , +or +.Ar len +is less than 0 or longer than the maximum comment length in a zip file +(65535), or +.Ar comment +is not a valid UTF-8 encoded string. +.It Bq Er ZIP_ER_MEMORY +Required memory could not be allocated. +.It Bq Er ZIP_ER_RDONLY +The +.Ar archive +was opened in read-only mode. +.El +.Sh SEE ALSO +.Xr libzip 3 , +.Xr zip_file_get_comment 3 , +.Xr zip_get_archive_comment 3 , +.Xr zip_set_archive_comment 3 +.Sh HISTORY +.Fn zip_file_set_comment +was added in libzip 0.11. +.Sh AUTHORS +.An -nosplit +.An Dieter Baron Aq Mt dillo@nih.at +and +.An Thomas Klausner Aq Mt wiz@gatalith.at diff --git a/thirdparty/libzip-1.11.3/build-emcmake/man/zip_file_set_encryption.3 b/thirdparty/libzip-1.11.3/build-emcmake/man/zip_file_set_encryption.3 new file mode 100644 index 0000000..9071947 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/man/zip_file_set_encryption.3 @@ -0,0 +1,121 @@ +.\" zip_file_set_encryption.mdoc -- set encryption method for file +.\" Copyright (C) 2016-2021 Dieter Baron and Thomas Klausner +.\" +.\" This file is part of libzip, a library to manipulate ZIP files. +.\" The authors can be contacted at +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in +.\" the documentation and/or other materials provided with the +.\" distribution. +.\" 3. The names of the authors may not be used to endorse or promote +.\" products derived from this software without specific prior +.\" written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS +.\" OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +.\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +.\" DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE +.\" GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +.\" IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +.\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN +.\" IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.\" +.Dd April 2, 2020 +.Dt ZIP_FILE_SET_ENCRYPTION 3 +.Os +.Sh NAME +.Nm zip_file_set_encryption +.Nd set encryption method for file in zip +.Sh LIBRARY +libzip (-lzip) +.Sh SYNOPSIS +.In zip.h +.Ft int +.Fn zip_file_set_encryption "zip_t *archive" "zip_uint64_t index" "zip_uint16_t method" "const char *password" +.Sh DESCRIPTION +The +.Fn zip_file_set_encryption +function sets the encryption method for the file at position +.Ar index +in the zip archive to +.Ar method +using the password +.Ar password . +The +.Ar method +is the same as returned by +.Xr zip_stat 3 . +For the +.Ar method +argument, currently only the following values are supported: +.Bl -tag -width ZIP_CM_DEFLATE_XX +.It Dv ZIP_EM_NONE +No encryption. +.It Dv ZIP_EM_AES_128 +Winzip AES-128 encryption. +.It Dv ZIP_EM_AES_192 +Winzip AES-192 encryption. +.It Dv ZIP_EM_AES_256 +Winzip AES-256 encryption. +.It Dv ZIP_EM_TRAD_PKWARE +Traditional PKWare encryption. +Do not use this method, it is not secure. +It is only provided for backwards compatibility. +.El +.Pp +If +.Ar password +is +.Dv NULL , +the default password provided by +.Xr zip_set_default_password 3 +is used. +.Pp +The current encryption method for a file in a zip archive can be +determined using +.Xr zip_stat 3 . +.Sh RETURN VALUES +Upon successful completion 0 is returned. +Otherwise, \-1 is returned and the error information in +.Ar archive +is set to indicate the error. +.Sh ERRORS +.Fn zip_file_set_encryption +fails if: +.Bl -tag -width Er +.It Bq Er ZIP_ER_ENCRNOTSUPP +Unsupported compression method requested. +.It Bq Er ZIP_ER_INVAL +.Ar index +is not a valid file index in +.Ar archive , +or the argument combination is invalid. +.It Bq Er ZIP_ER_MEMORY +Required memory could not be allocated. +.It Bq Er ZIP_ER_RDONLY +Read-only zip file, no changes allowed. +.El +.Sh SEE ALSO +.Xr libzip 3 , +.Xr zip_encryption_method_supported 3 , +.Xr zip_fopen_encrypted 3 , +.Xr zip_fopen_index_encrypted 3 , +.Xr zip_set_default_password 3 , +.Xr zip_stat 3 +.Sh HISTORY +.Fn zip_file_set_encryption +was added in libzip 1.2.0. +.Sh AUTHORS +.An -nosplit +.An Dieter Baron Aq Mt dillo@nih.at +and +.An Thomas Klausner Aq Mt wiz@gatalith.at diff --git a/thirdparty/libzip-1.11.3/build-emcmake/man/zip_file_set_external_attributes.3 b/thirdparty/libzip-1.11.3/build-emcmake/man/zip_file_set_external_attributes.3 new file mode 100644 index 0000000..1043df6 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/man/zip_file_set_external_attributes.3 @@ -0,0 +1,89 @@ +.\" zip_file_set_external_attributes.mdoc -- set external attributes for file in zip +.\" Copyright (C) 2013-2017 Dieter Baron and Thomas Klausner +.\" +.\" This file is part of libzip, a library to manipulate ZIP files. +.\" The authors can be contacted at +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in +.\" the documentation and/or other materials provided with the +.\" distribution. +.\" 3. The names of the authors may not be used to endorse or promote +.\" products derived from this software without specific prior +.\" written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS +.\" OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +.\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +.\" DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE +.\" GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +.\" IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +.\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN +.\" IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.\" +.Dd December 18, 2017 +.Dt ZIP_FILE_SET_EXTERNAL_ATTRIBUTES 3 +.Os +.Sh NAME +.Nm zip_file_set_external_attributes +.Nd set external attributes for file in zip +.Sh LIBRARY +libzip (-lzip) +.Sh SYNOPSIS +.In zip.h +.Ft int +.Fn zip_file_set_external_attributes "zip_t *archive" "zip_uint64_t index" "zip_flags_t flags" "zip_uint8_t opsys" "zip_uint32_t attributes" +.Sh DESCRIPTION +The +.Fn zip_file_set_external_attributes +function sets the operating system and external attributes for the +file at position +.Ar index +in the zip archive. +Currently, no +.Ar flags +are supported. +.Pp +For a list of known +.Ar opsys +values, see +.Xr zip_file_get_external_attributes 3 . +.Sh RETURN VALUES +Upon successful completion 0 is returned. +Otherwise, \-1 is returned and the error information in +.Ar archive +is set to indicate the error. +.Sh ERRORS +.Fn zip_file_set_external_attributes +fails if: +.Bl -tag -width Er +.It Bq Er ZIP_ER_INVAL +.Ar index +is not a valid file index in +.Ar archive . +.It Bq Er ZIP_ER_MEMORY +Required memory could not be allocated. +.It Bq Er ZIP_ER_RDONLY +The +.Ar archive +was opened in read-only mode. +.El +.Sh SEE ALSO +.Xr libzip 3 , +.Xr zip_file_get_external_attributes 3 +.Sh HISTORY +.Fn zip_file_set_external_attributes +was added in libzip 0.11.2. +.Sh AUTHORS +.An -nosplit +.An Dieter Baron Aq Mt dillo@nih.at +and +.An Thomas Klausner Aq Mt wiz@gatalith.at diff --git a/thirdparty/libzip-1.11.3/build-emcmake/man/zip_file_set_mtime.3 b/thirdparty/libzip-1.11.3/build-emcmake/man/zip_file_set_mtime.3 new file mode 100644 index 0000000..f1a63bd --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/man/zip_file_set_mtime.3 @@ -0,0 +1,126 @@ +.\" zip_file_set_mtime.mdoc -- set mtime for file in zip +.\" Copyright (C) 2014-2022 Dieter Baron and Thomas Klausner +.\" +.\" This file is part of libzip, a library to manipulate ZIP files. +.\" The authors can be contacted at +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in +.\" the documentation and/or other materials provided with the +.\" distribution. +.\" 3. The names of the authors may not be used to endorse or promote +.\" products derived from this software without specific prior +.\" written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS +.\" OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +.\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +.\" DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE +.\" GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +.\" IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +.\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN +.\" IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.\" +.Dd June 18, 2022 +.Dt ZIP_FILE_SET_MTIME 3 +.Os +.Sh NAME +.Nm zip_file_set_dostime , +.Nm zip_file_set_mtime +.Nd set last modification time (mtime) for file in zip +.Sh LIBRARY +libzip (-lzip) +.Sh SYNOPSIS +.In zip.h +.Ft int +.Fn zip_file_set_dostime "zip_t *archive" "zip_uint64_t index" "zip_uint16_t dostime" "zip_uint16_t dosdate" "zip_flags_t flags" +.Ft int +.Fn zip_file_set_mtime "zip_t *archive" "zip_uint64_t index" "time_t mtime" "zip_flags_t flags" +.Sh DESCRIPTION +The +.Fn zip_file_set_mtime +function sets the last modification time (mtime) for the file at +position +.Ar index +in the zip archive to +.Ar mtime . +Currently, no support for any +.Ar flags +is implemented. +.Pp +In the zip archive, the time and date are saved as two 16-bit integers. +To set the values directly, call the +.Fn zip_file_set_dostime +function. +The values of the time bytes are defined as follows: +.Bl -tag -width 5n -offset indent +.It 0-4 +seconds divided by two (1-2 = 1, 3-4 = 2, ...) +.It 5-10 +minute (0-59) +.It 11-15 +hour (0-23) +.El +.Pp +The values of the date bytes are defined as follows: +.Bl -tag -width 5n -offset indent +.It 0-4 +day of the month (1-31) +.It 5-8 +month (January = 1, February = 2, ...) +.It 9-15 +year offset from 1980 (1980 = 0, 1981 = 1, ...) +.El +.Sh RETURN VALUES +Upon successful completion 0 is returned. +Otherwise, \-1 is returned and the error information in +.Ar archive +is set to indicate the error. +.Sh ERRORS +.Fn zip_file_set_dostime +and +.Fn zip_file_set_mtime +fail if: +.Bl -tag -width Er +.It Bq Er ZIP_ER_INVAL +.Ar index +is not a valid file index in +.Ar archive . +.It Bq Er ZIP_ER_MEMORY +Required memory could not be allocated. +.It Bq Er ZIP_ER_OPNOTSUPP +Traditional PKWare encryption uses the file's mtime, therefore it cannot be changed without re-encrypting the data. +.It Bq Er ZIP_ER_RDONLY +The +.Ar archive +was opened in read-only mode. +.El +.Sh SEE ALSO +.Xr libzip 3 , +.Xr zip_stat 3 +.Sh HISTORY +.Fn zip_file_set_mtime +was added in libzip 1.0. +.Fn zip_file_set_dostime +was added in libzip 1.6. +.Sh AUTHORS +.An -nosplit +.An Dieter Baron Aq Mt dillo@nih.at +and +.An Thomas Klausner Aq Mt wiz@gatalith.at +.Sh CAVEATS +Following historical practice, the +.Fn zip_file_set_mtime +function translates the time from the zip archive into the local time +zone. +If you want to avoid this, use the +.Fn zip_file_set_dostime +function instead. diff --git a/thirdparty/libzip-1.11.3/build-emcmake/man/zip_file_strerror.3 b/thirdparty/libzip-1.11.3/build-emcmake/man/zip_file_strerror.3 new file mode 100644 index 0000000..498fcc2 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/man/zip_file_strerror.3 @@ -0,0 +1,85 @@ +.\" zip_file_strerror.mdoc -- get string representation for a zip error +.\" Copyright (C) 2003-2021 Dieter Baron and Thomas Klausner +.\" +.\" This file is part of libzip, a library to manipulate ZIP archives. +.\" The authors can be contacted at +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in +.\" the documentation and/or other materials provided with the +.\" distribution. +.\" 3. The names of the authors may not be used to endorse or promote +.\" products derived from this software without specific prior +.\" written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS +.\" OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +.\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +.\" DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE +.\" GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +.\" IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +.\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN +.\" IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.\" +.Dd December 18, 2017 +.Dt ZIP_FILE_STRERROR 3 +.Os +.Sh NAME +.Nm zip_file_strerror , +.Nm zip_strerror +.Nd get string representation for a zip error +.Sh LIBRARY +libzip (-lzip) +.Sh SYNOPSIS +.In zip.h +.Ft const char * +.Fn zip_file_strerror "zip_file_t *file" +.Ft const char * +.Fn zip_strerror "zip_t *archive" +.Sh DESCRIPTION +The +.Fn zip_strerror +function returns a string describing the last error for the zip archive +.Ar archive , +while the +.Fn zip_file_strerror +function does the same for a zip file +.Ar file +(one file in an archive). +The returned string must not be modified or freed, and becomes invalid when +.Ar archive +or +.Ar file , +respectively, +is closed or on the next call to +.Fn zip_strerror +or +.Fn zip_file_strerror , +respectively, +for the same archive. +.Sh RETURN VALUES +.Fn zip_file_strerror +and +.Fn zip_strerror +return a pointer to the error string. +.Sh SEE ALSO +.Xr libzip 3 , +.Xr zip_error_strerror 3 +.Sh HISTORY +.Fn zip_file_strerror +and +.Fn zip_strerror +were added in libzip 0.6. +.Sh AUTHORS +.An -nosplit +.An Dieter Baron Aq Mt dillo@nih.at +and +.An Thomas Klausner Aq Mt wiz@gatalith.at diff --git a/thirdparty/libzip-1.11.3/build-emcmake/man/zip_fopen.3 b/thirdparty/libzip-1.11.3/build-emcmake/man/zip_fopen.3 new file mode 100644 index 0000000..d86bdb9 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/man/zip_fopen.3 @@ -0,0 +1,148 @@ +.\" zip_fopen.mdoc -- open file in zip archive for reading +.\" Copyright (C) 2003-2017 Dieter Baron and Thomas Klausner +.\" +.\" This file is part of libzip, a library to manipulate ZIP archives. +.\" The authors can be contacted at +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in +.\" the documentation and/or other materials provided with the +.\" distribution. +.\" 3. The names of the authors may not be used to endorse or promote +.\" products derived from this software without specific prior +.\" written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS +.\" OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +.\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +.\" DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE +.\" GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +.\" IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +.\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN +.\" IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.\" +.Dd December 18, 2017 +.Dt ZIP_FOPEN 3 +.Os +.Sh NAME +.Nm zip_fopen , +.Nm zip_fopen_index +.Nd open file in zip archive for reading +.Sh LIBRARY +libzip (-lzip) +.Sh SYNOPSIS +.In zip.h +.Ft zip_file_t * +.Fn zip_fopen "zip_t *archive" "const char *fname" "zip_flags_t flags" +.Ft zip_file_t * +.Fn zip_fopen_index "zip_t *archive" "zip_uint64_t index" "zip_flags_t flags" +.Sh DESCRIPTION +The +.Fn zip_fopen +function opens the file name +.Ar fname +in +.Ar archive . +The +.Ar flags +argument specifies how the name lookup should be done, according to +the values are described in +.Xr zip_name_locate 3 . +Also, the following values may be +.Em or Ns No 'ed +to it. +.Bl -tag -offset indent -width ZIP_FL_COMPRESSED +.It Dv ZIP_FL_COMPRESSED +Read the compressed data. +Otherwise the data is uncompressed by +.Fn zip_fread . +.It Dv ZIP_FL_UNCHANGED +Read the original data from the zip archive, ignoring any changes made +to the file; this is not supported by all data sources. +.El +.Pp +The +.Fn zip_fopen_index +function opens the file at position +.Ar index . +.Pp +If encrypted data is encountered, the functions call +.Xr zip_fopen_encrypted 3 +or +.Xr zip_fopen_index_encrypted 3 +respectively, using the default password set with +.Xr zip_set_default_password 3 . +.Sh RETURN VALUES +Upon successful completion, a +.Ft struct zip_file +pointer is returned. +Otherwise, +.Dv NULL +is returned and the error code in +.Ar archive +is set to indicate the error. +.Sh ERRORS +.Bl -tag -width Er +.It Bq Er ZIP_ER_CHANGED +The file data has been changed and the data source does +not support rereading data. +.It Bq Er ZIP_ER_COMPNOTSUPP +The compression method used is not supported. +.It Bq Er ZIP_ER_ENCRNOTSUPP +The encryption method used is not supported. +.It Bq Er ZIP_ER_MEMORY +Required memory could not be allocated. +.It Bq Er ZIP_ER_NOPASSWD +The file is encrypted, but no password has been provided. +.It Bq Er ZIP_ER_READ +A file read error occurred. +.It Bq Er ZIP_ER_SEEK +A file seek error occurred. +.It Bq Er ZIP_ER_WRONGPASSWD +The provided password does not match the password used for encryption. +Note that some incorrect passwords are not detected by the check done by +.Fn zip_fopen . +.It Bq Er ZIP_ER_ZLIB +Initializing the zlib stream failed. +.El +.Pp +The function +.Fn zip_fopen +may also fail and set +.Va zip_err +for any of the errors specified for the routine +.Xr zip_name_locate 3 . +.Pp +The function +.Fn zip_fopen_index +may also fail with +.Er ZIP_ER_INVAL +if +.Ar index +is invalid. +.Sh SEE ALSO +.Xr libzip 3 , +.Xr zip_fclose 3 , +.Xr zip_fread 3 , +.Xr zip_fseek 3 , +.Xr zip_get_num_entries 3 , +.Xr zip_name_locate 3 , +.Xr zip_set_default_password 3 +.Sh HISTORY +.Fn zip_fopen +and +.Fn zip_fopen_index +were added in libzip 1.0. +.Sh AUTHORS +.An -nosplit +.An Dieter Baron Aq Mt dillo@nih.at +and +.An Thomas Klausner Aq Mt wiz@gatalith.at diff --git a/thirdparty/libzip-1.11.3/build-emcmake/man/zip_fopen_encrypted.3 b/thirdparty/libzip-1.11.3/build-emcmake/man/zip_fopen_encrypted.3 new file mode 100644 index 0000000..9428798 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/man/zip_fopen_encrypted.3 @@ -0,0 +1,135 @@ +.\" zip_fopen_encrypted.mdoc -- open encrypted file in zip archive for reading +.\" Copyright (C) 2011-2021 Dieter Baron and Thomas Klausner +.\" +.\" This file is part of libzip, a library to manipulate ZIP archives. +.\" The authors can be contacted at +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in +.\" the documentation and/or other materials provided with the +.\" distribution. +.\" 3. The names of the authors may not be used to endorse or promote +.\" products derived from this software without specific prior +.\" written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS +.\" OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +.\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +.\" DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE +.\" GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +.\" IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +.\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN +.\" IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.\" +.Dd September 15, 2020 +.Dt ZIP_FOPEN_ENCRYPTED 3 +.Os +.Sh NAME +.Nm zip_fopen_encrypted , +.Nm zip_fopen_index_encrypted +.Nd open encrypted file in zip archive for reading +.Sh LIBRARY +libzip (-lzip) +.Sh SYNOPSIS +.In zip.h +.Ft zip_file_t * +.Fn zip_fopen_encrypted "zip_t *archive" "const char *fname" "zip_flags_t flags" "const char *password" +.Ft zip_file_t * +.Fn zip_fopen_index_encrypted "zip_t *archive" "zip_uint64_t index" "zip_flags_t flags" "const char *password" +.Sh DESCRIPTION +The +.Fn zip_fopen_encrypted +function opens the encrypted file name +.Ar fname +in +.Ar archive +using the password given in the +.Ar password +argument. +If +.Ar password +is +.Dv NULL +or the empty string, the default password is used (see +.Xr zip_set_default_password 3 ) . +The +.Ar flags +argument are the same as for +.Xr zip_fopen 3 . +.Pp +The +.Fn zip_fopen_index_encrypted +function opens the file at position +.Ar index , +see +.Xr zip_fopen_index 3 . +These functions are called automatically by +.Xr zip_fopen 3 ; +you only need to call them if you want to specify a non-default password +(see +.Xr zip_set_default_password 3 ) . +.Sh RETURN VALUES +Upon successful completion, a +.Ft struct zip_file +pointer is returned. +Otherwise, +.Dv NULL +is returned and the error code in +.Ar archive +is set to indicate the error. +.Sh ERRORS +.Bl -tag -width ZIP_ER_ENCRNOTSUPPXX +.It Bq Er ZIP_ER_NOPASSWD +No password was provided. +.El +.Pp +The function +.Fn zip_fopen_encrypted +may also fail and set +.Va zip_err +for any of the errors specified for the routine +.Xr zip_fopen 3 . +.Pp +The function +.Fn zip_fopen_index_encrypted +may also fail and set +.Va zip_err +for any of the errors specified for the routine +.Xr zip_fopen_index 3 . +.Sh SEE ALSO +.Xr libzip 3 , +.Xr zip_fclose 3 , +.Xr zip_fopen 3 , +.Xr zip_fread 3 , +.Xr zip_get_num_entries 3 , +.Xr zip_name_locate 3 +.Sh HISTORY +.Fn zip_fopen_encrypted +and +.Fn zip_fopen_index_encrypted +were added in libzip 1.0. +.Sh AUTHORS +.An -nosplit +.An Dieter Baron Aq Mt dillo@nih.at +and +.An Thomas Klausner Aq Mt wiz@gatalith.at +.Sh CAVEATS +The zip file format provides very limited possibility for password +verification (a short hash of is compared against one byte in the zip +archive). +For this reason, reading a file while using an incorrect password may +immediately fail with +.Er ZIP_ER_WRONGPASSWD , +but if the mismatch is not detected, a zlib error may be returned +later instead. +Since zlib errors can also be caused by broken compressed data, there +is no way to make sure if the password was incorrect or if it was +correct, but the compressed data was invalid. diff --git a/thirdparty/libzip-1.11.3/build-emcmake/man/zip_fread.3 b/thirdparty/libzip-1.11.3/build-emcmake/man/zip_fread.3 new file mode 100644 index 0000000..3371298 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/man/zip_fread.3 @@ -0,0 +1,85 @@ +.\" zip_fread.mdoc -- read from file +.\" Copyright (C) 2003-2022 Dieter Baron and Thomas Klausner +.\" +.\" This file is part of libzip, a library to manipulate ZIP archives. +.\" The authors can be contacted at +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in +.\" the documentation and/or other materials provided with the +.\" distribution. +.\" 3. The names of the authors may not be used to endorse or promote +.\" products derived from this software without specific prior +.\" written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS +.\" OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +.\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +.\" DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE +.\" GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +.\" IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +.\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN +.\" IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.\" +.Dd September 11, 2024 +.Dt ZIP_FREAD 3 +.Os +.Sh NAME +.Nm zip_fread +.Nd read from file +.Sh LIBRARY +libzip (-lzip) +.Sh SYNOPSIS +.In zip.h +.Ft zip_int64_t +.Fn zip_fread "zip_file_t *file" "void *buf" "zip_uint64_t nbytes" +.Sh DESCRIPTION +The +.Fn zip_fread +function reads up to +.Ar nbytes +bytes from +.Ar file +into +.Ar buf +from the current position in the file (see +.Xr zip_fseek 3 ) . +After reading, the current position is updated by the number of bytes read. +.Sh RETURN VALUES +If successful, the number of bytes actually read is returned. +When +.Fn zip_fread +is called after reaching the end of the file, 0 is returned. +In case of error, \-1 is returned. +.Sh SEE ALSO +.Xr libzip 3 , +.Xr zip_fclose 3 , +.Xr zip_file_get_error 3 , +.Xr zip_fopen 3 , +.Xr zip_fseek 3 +.Sh HISTORY +.Fn zip_fread +was added in libzip 0.6. +In libzip 0.10 the return type was changed from +.Vt ssize_t +to +.Vt zip_int64_t . +In libzip 0.10 the type of +.Ar nbytes +was changed from +.Vt size_t +to +.Vt zip_uint64_t . +.Sh AUTHORS +.An -nosplit +.An Dieter Baron Aq Mt dillo@nih.at +and +.An Thomas Klausner Aq Mt wiz@gatalith.at diff --git a/thirdparty/libzip-1.11.3/build-emcmake/man/zip_fseek.3 b/thirdparty/libzip-1.11.3/build-emcmake/man/zip_fseek.3 new file mode 100644 index 0000000..3ba5a9e --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/man/zip_fseek.3 @@ -0,0 +1,89 @@ +.\" zip_fseek.mdoc -- seek in file +.\" Copyright (C) 2016-2022 Dieter Baron and Thomas Klausner +.\" +.\" This file is part of libzip, a library to manipulate ZIP archives. +.\" The authors can be contacted at +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in +.\" the documentation and/or other materials provided with the +.\" distribution. +.\" 3. The names of the authors may not be used to endorse or promote +.\" products derived from this software without specific prior +.\" written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS +.\" OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +.\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +.\" DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE +.\" GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +.\" IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +.\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN +.\" IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.\" +.Dd September 11, 2024 +.Dt ZIP_FSEEK 3 +.Os +.Sh NAME +.Nm zip_fseek , +.Nm zip_file_is_seekable +.Nd seek in file +.Sh LIBRARY +libzip (-lzip) +.Sh SYNOPSIS +.In zip.h +.Ft zip_int8_t +.Fn zip_fseek "zip_file_t *file" "zip_int64_t offset" "int whence" +.Ft int +.Fn zip_file_is_seekable "zip_file_t *file" +.Sh DESCRIPTION +The +.Fn zip_fseek +function seeks to the specified +.Ar offset +relative to +.Ar whence , +just like +.Xr fseek 3 . +.Pp +.Nm +only works on uncompressed (stored), unencrypted data. +When called on compressed or encrypted data it will return an error. +.Pp +The +.Fn zip_file_is_seekable +function returns 1 if a file is seekable. +.Sh RETURN VALUES +If successful, +.Fn zip_fseek +returns 0. +Otherwise, \-1 is returned. +.Pp +.Fn zip_file_is_seekable +returns 1 if a file is seekable and 0 if not. +On an invalid argument, it returns \-1. +.Sh SEE ALSO +.Xr libzip 3 , +.Xr zip_fclose 3 , +.Xr zip_file_get_error 3 , +.Xr zip_fopen 3 , +.Xr zip_fread 3 , +.Xr zip_ftell 3 +.Sh HISTORY +.Fn zip_fseek +was added in libzip 1.2.0. +.Fn zip_file_is_seekable +was added in libzip 1.9.0. +.Sh AUTHORS +.An -nosplit +.An Dieter Baron Aq Mt dillo@nih.at +and +.An Thomas Klausner Aq Mt wiz@gatalith.at diff --git a/thirdparty/libzip-1.11.3/build-emcmake/man/zip_ftell.3 b/thirdparty/libzip-1.11.3/build-emcmake/man/zip_ftell.3 new file mode 100644 index 0000000..e045634 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/man/zip_ftell.3 @@ -0,0 +1,67 @@ +.\" zip_ftell.mdoc -- tell position in file +.\" Copyright (C) 2016-2021 Dieter Baron and Thomas Klausner +.\" +.\" This file is part of libzip, a library to manipulate ZIP archives. +.\" The authors can be contacted at +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in +.\" the documentation and/or other materials provided with the +.\" distribution. +.\" 3. The names of the authors may not be used to endorse or promote +.\" products derived from this software without specific prior +.\" written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS +.\" OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +.\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +.\" DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE +.\" GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +.\" IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +.\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN +.\" IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.\" +.Dd September 11, 2024 +.Dt ZIP_FTELL 3 +.Os +.Sh NAME +.Nm zip_ftell +.Nd tell position in file +.Sh LIBRARY +libzip (-lzip) +.Sh SYNOPSIS +.In zip.h +.Ft zip_int64_t +.Fn zip_ftell "zip_file_t *file" +.Sh DESCRIPTION +The +.Fn zip_ftell +function reports the current offset in the file. +.Sh RETURN VALUES +If successful, +.Nm +returns the current file position. +Otherwise, \-1 is returned. +.Sh SEE ALSO +.Xr libzip 3 , +.Xr zip_fclose 3 , +.Xr zip_file_get_error 3 , +.Xr zip_fopen 3 , +.Xr zip_fread 3 , +.Xr zip_fseek 3 +.Sh HISTORY +.Fn zip_ftell +was added in libzip 1.2.0. +.Sh AUTHORS +.An -nosplit +.An Dieter Baron Aq Mt dillo@nih.at +and +.An Thomas Klausner Aq Mt wiz@gatalith.at diff --git a/thirdparty/libzip-1.11.3/build-emcmake/man/zip_get_archive_comment.3 b/thirdparty/libzip-1.11.3/build-emcmake/man/zip_get_archive_comment.3 new file mode 100644 index 0000000..d8f2e9b --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/man/zip_get_archive_comment.3 @@ -0,0 +1,112 @@ +.\" zip_get_archive_comment.mdoc -- get zip archive comment +.\" Copyright (C) 2006-2021 Dieter Baron and Thomas Klausner +.\" +.\" This file is part of libzip, a library to manipulate ZIP archives. +.\" The authors can be contacted at +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in +.\" the documentation and/or other materials provided with the +.\" distribution. +.\" 3. The names of the authors may not be used to endorse or promote +.\" products derived from this software without specific prior +.\" written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS +.\" OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +.\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +.\" DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE +.\" GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +.\" IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +.\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN +.\" IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.\" +.Dd September 22, 2020 +.Dt ZIP_GET_ARCHIVE_COMMENT 3 +.Os +.Sh NAME +.Nm zip_get_archive_comment +.Nd get zip archive comment +.Sh LIBRARY +libzip (-lzip) +.Sh SYNOPSIS +.In zip.h +.Ft const char * +.Fn zip_get_archive_comment "zip_t *archive" "int *lenp" "zip_flags_t flags" +.Sh DESCRIPTION +The +.Fn zip_get_archive_comment +function returns the comment for the entire zip archive. +The return value is in UTF-8 encoding unless +.Dv ZIP_FL_ENC_RAW +was specified (see below). +This pointer should not be modified or +.Xr free 3 Ap d , +and becomes invalid when +.Ar archive +is closed. +If +.Ar lenp +is not +.Dv NULL , +the integer to which it points will be set to the length of the +comment. +If +.Ar flags +is set to +.Dv ZIP_FL_UNCHANGED , +the original unchanged comment is returned. +.Pp +Additionally, the following +.Ar flags +are supported: +.Bl -tag -width ZIP_FL_ENC_STRICTXX -offset indent +.It Dv ZIP_FL_ENC_RAW +Return the unmodified archive comment as it is in the ZIP archive. +.It Dv ZIP_FL_ENC_GUESS +(Default.) +Guess the encoding of the archive comment in the ZIP archive and convert it +to UTF-8, if necessary. +(Only CP-437 and UTF-8 are recognized.) +.It Dv ZIP_FL_ENC_STRICT +Follow the ZIP specification for file names and extend it to the +archive comment, thus also expecting it in CP-437 encoding. +Convert it to UTF-8. +.El +.Em Note : +ASCII is a subset of both CP-437 and UTF-8. +.Sh RETURN VALUES +Upon successful completion, a pointer to the comment is returned, +or +.Dv NULL +if there is no comment. +.\" In case of an error, +.\" .Dv NULL +.\" is returned and the error code in +.\" .Ar archive +.\" is set to indicate the error. +.Sh SEE ALSO +.Xr libzip 3 , +.Xr zip_file_get_comment 3 +.Sh HISTORY +.Fn zip_get_archive_comment +was added in libzip 0.7. +In libzip 0.11 the type of +.Ar flags +was changed from +.Vt int +to +.Vt zip_flags_t . +.Sh AUTHORS +.An -nosplit +.An Dieter Baron Aq Mt dillo@nih.at +and +.An Thomas Klausner Aq Mt wiz@gatalith.at diff --git a/thirdparty/libzip-1.11.3/build-emcmake/man/zip_get_archive_flag.3 b/thirdparty/libzip-1.11.3/build-emcmake/man/zip_get_archive_flag.3 new file mode 100644 index 0000000..2edf7cf --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/man/zip_get_archive_flag.3 @@ -0,0 +1,110 @@ +.\" zip_get_archive_flag.mdoc -- get comment for file in zip +.\" Copyright (C) 2008-2017 Dieter Baron and Thomas Klausner +.\" +.\" This file is part of libzip, a library to manipulate ZIP files. +.\" The authors can be contacted at +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in +.\" the documentation and/or other materials provided with the +.\" distribution. +.\" 3. The names of the authors may not be used to endorse or promote +.\" products derived from this software without specific prior +.\" written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS +.\" OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +.\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +.\" DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE +.\" GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +.\" IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +.\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN +.\" IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.\" +.Dd January 23, 2023 +.Dt ZIP_GET_ARCHIVE_FLAG 3 +.Os +.Sh NAME +.Nm zip_get_archive_flag +.Nd get status flags for zip +.Sh LIBRARY +libzip (-lzip) +.Sh SYNOPSIS +.In zip.h +.Ft int +.Fn zip_get_archive_flag "zip_t *archive" "zip_flags_t flag" "zip_flags_t flags" +.Sh DESCRIPTION +The +.Fn zip_get_archive_flag +function returns if the flag +.Ar flag +is set for the archive +.Ar archive . +The archive flags might have been changed with +.Fn zip_set_archive_flag ; +if +.Ar flags +is set to +.Dv ZIP_FL_UNCHANGED , +the original unchanged flags are tested. +.Pp +Supported flags are: +.Bl -tag -width XZIPXAFLXRDONLYXXX +.It Dv ZIP_AFL_CREATE_OR_KEEP_FILE_FOR_EMPTY_ARCHIVE +If this flag is cleared, the archive file will be removed if the archive is empty. +If it is set, an empty archive will be created, which is not recommended by the zip specification. +This flag is always cleared unless explicitly set by the user with +.Xr zip_set_archive_flag 3 . +.It Dv ZIP_AFL_IS_TORRENTZIP +The archive is in torrentzip format. +.It Dv ZIP_AFL_RDONLY +The archive is read-only. +.It Dv ZIP_AFL_WANT_TORRENTZIP +If the flag is set, the archive will be written in torrentzip format. +This flag is always cleared unless explicitly set by the user with +.Xr zip_set_archive_flag 3 . +.El +.Sh RETURN VALUES +.Fn zip_get_archive_flag +returns 1 if +.Ar flag +is set for +.Ar archive , +0 if not, +and \-1 if an error occurred. +.Sh SEE ALSO +.Xr libzip 3 , +.Xr zip_set_archive_flag 3 +.Sh HISTORY +.Fn zip_get_archive_flag +was added in libzip 0.9. +In libzip 0.11 the type of +.Ar flag +was changed from +.Vt int +to +.Vt zip_flags_t m +and the type of +.Ar flags +was changed from +.Vt int +to +.Vt zip_flags_t . +.Dv ZIP_AFL_CREATE_OR_KEEP_FILE_FOR_EMPTY_ARCHIVE , +.Dv ZIP_AFL_IS_TORRENTZIP , +and +.Dv ZIP_AFL_WANT_TORRENTZIP +were added in libzip 1.10.0. +.Sh AUTHORS +.An -nosplit +.An Dieter Baron Aq Mt dillo@nih.at +and +.An Thomas Klausner Aq Mt wiz@gatalith.at diff --git a/thirdparty/libzip-1.11.3/build-emcmake/man/zip_get_error.3 b/thirdparty/libzip-1.11.3/build-emcmake/man/zip_get_error.3 new file mode 100644 index 0000000..6af6f21 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/man/zip_get_error.3 @@ -0,0 +1,60 @@ +.\" zip_get_error.mdoc -- get zip_error for archive +.\" Copyright (C) 2014-2017 Dieter Baron and Thomas Klausner +.\" +.\" This file is part of libzip, a library to manipulate ZIP archives. +.\" The authors can be contacted at +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in +.\" the documentation and/or other materials provided with the +.\" distribution. +.\" 3. The names of the authors may not be used to endorse or promote +.\" products derived from this software without specific prior +.\" written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS +.\" OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +.\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +.\" DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE +.\" GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +.\" IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +.\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN +.\" IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.\" +.Dd December 18, 2017 +.Dt ZIP_GET_ERROR 3 +.Os +.Sh NAME +.Nm zip_get_error +.Nd get zip error for archive +.Sh LIBRARY +libzip (-lzip) +.Sh SYNOPSIS +.In zip.h +.Ft zip_error_t * +.Fn zip_get_error "zip_t *archive" +.Sh DESCRIPTION +The +.Fn zip_get_error +function returns the zip error for the zip archive +.Ar archive . +.Sh SEE ALSO +.Xr libzip 3 , +.Xr zip_error_code_system 3 , +.Xr zip_error_code_zip 3 +.Sh HISTORY +.Fn zip_get_error +was added in libzip 1.0. +.Sh AUTHORS +.An -nosplit +.An Dieter Baron Aq Mt dillo@nih.at +and +.An Thomas Klausner Aq Mt wiz@gatalith.at diff --git a/thirdparty/libzip-1.11.3/build-emcmake/man/zip_get_file_comment.3 b/thirdparty/libzip-1.11.3/build-emcmake/man/zip_get_file_comment.3 new file mode 100644 index 0000000..1b9676b --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/man/zip_get_file_comment.3 @@ -0,0 +1,73 @@ +.\" zip_get_file_comment.mdoc -- get comment for file in zip +.\" Copyright (C) 2006-2017 Dieter Baron and Thomas Klausner +.\" +.\" This file is part of libzip, a library to manipulate ZIP files. +.\" The authors can be contacted at +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in +.\" the documentation and/or other materials provided with the +.\" distribution. +.\" 3. The names of the authors may not be used to endorse or promote +.\" products derived from this software without specific prior +.\" written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS +.\" OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +.\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +.\" DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE +.\" GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +.\" IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +.\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN +.\" IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.\" +.Dd December 18, 2017 +.Dt ZIP_GET_FILE_COMMENT 3 +.Os +.Sh NAME +.Nm zip_get_file_comment +.Nd get comment for file in zip (obsolete interface) +.Sh LIBRARY +libzip (-lzip) +.Sh SYNOPSIS +.In zip.h +.Ft const char * +.Fn zip_get_file_comment "zip_t *archive" "zip_uint64_t index" "int *lenp" "int flags" +.Sh DESCRIPTION +The +.Fn zip_get_file_comment +function is the obsolete version of +.Xr zip_file_get_comment 3 . +The only differences are the types of the +.Ar lenp +and +.Ar flags +arguments. +.Sh SEE ALSO +.Xr libzip 3 , +.Xr zip_file_get_comment 3 +.Sh HISTORY +.Fn zip_get_file_comment +was added in libzip 0.7. +In libzip 0.10 the type of +.Ar index +was changed from +.Vt int +to +.Vt zip_uint64_t . +It was deprecated in libzip 0.11, use +.Fn zip_file_get_comment +instead. +.Sh AUTHORS +.An -nosplit +.An Dieter Baron Aq Mt dillo@nih.at +and +.An Thomas Klausner Aq Mt wiz@gatalith.at diff --git a/thirdparty/libzip-1.11.3/build-emcmake/man/zip_get_name.3 b/thirdparty/libzip-1.11.3/build-emcmake/man/zip_get_name.3 new file mode 100644 index 0000000..9b4fea6 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/man/zip_get_name.3 @@ -0,0 +1,132 @@ +.\" zip_get_name.mdoc -- get name of file by index +.\" Copyright (C) 2003-2021 Dieter Baron and Thomas Klausner +.\" +.\" This file is part of libzip, a library to manipulate ZIP archives. +.\" The authors can be contacted at +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in +.\" the documentation and/or other materials provided with the +.\" distribution. +.\" 3. The names of the authors may not be used to endorse or promote +.\" products derived from this software without specific prior +.\" written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS +.\" OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +.\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +.\" DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE +.\" GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +.\" IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +.\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN +.\" IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.\" +.Dd September 22, 2020 +.Dt ZIP_GET_NAME 3 +.Os +.Sh NAME +.Nm zip_get_name +.Nd get name of file by index +.Sh LIBRARY +libzip (-lzip) +.Sh SYNOPSIS +.In zip.h +.Ft const char * +.Fn zip_get_name "zip_t *archive" "zip_uint64_t index" "zip_flags_t flags" +.Sh DESCRIPTION +The +.Fn zip_get_name +function returns the name of the file at position +.Ar index +in +.Ar archive . +The name is in UTF-8 encoding unless +.Dv ZIP_FL_ENC_RAW +was specified (see below). +.Pp +If +.Ar flags +is set to +.Dv ZIP_FL_UNCHANGED , +the original unchanged filename is returned. +The returned string must not be modified or freed, and becomes invalid when +.Ar archive +is closed. +.Pp +Additionally, the following +.Ar flags +are supported: +.Bl -tag -width ZIP_FL_ENC_STRICTXX -offset indent +.It Dv ZIP_FL_ENC_RAW +Return the unmodified names as it is in the ZIP archive. +.It Dv ZIP_FL_ENC_GUESS +(Default.) +Guess the encoding of the name in the ZIP archive and convert it +to UTF-8, if necessary. +(Only CP-437 and UTF-8 are recognized.) +.It Dv ZIP_FL_ENC_STRICT +Follow the ZIP specification and expect CP-437 encoded names in +the ZIP archive (except if they are explicitly marked as UTF-8). +Convert it to UTF-8. +.El +.Em Note : +ASCII is a subset of both CP-437 and UTF-8. +.Sh RETURN VALUES +Upon successful completion, a pointer to the name is returned. +Otherwise, +.Dv NULL +and the error code in +.Ar archive +is set to indicate the error. +.Sh ERRORS +.Fn zip_get_name +fails if: +.Bl -tag -width Er +.It Bq Er ZIP_ER_DELETED +.Ar index +refers to a file that has been deleted +(see +.Xr zip_delete 3 ) . +.It Bq Er ZIP_ER_INVAL +.Ar index +is not a valid file index in +.Ar archive , +or +.Ar index +points to an added file and +.Dv ZIP_FL_UNCHANGED +is set. +.It Bq Er ZIP_ER_MEMORY +Required memory could not be allocated. +.El +.Sh SEE ALSO +.Xr libzip 3 , +.Xr zip_name_locate 3 +.Sh HISTORY +.Fn zip_get_name +was added in libzip 0.6. +In libzip 0.10 the type of +.Ar index +was changed from +.Vt int +to +.Vt zip_uint64_t . +In libzip 0.11 the type of +.Ar flags +was changed from +.Vt int +to +.Vt zip_flags_t . +.Sh AUTHORS +.An -nosplit +.An Dieter Baron Aq Mt dillo@nih.at +and +.An Thomas Klausner Aq Mt wiz@gatalith.at diff --git a/thirdparty/libzip-1.11.3/build-emcmake/man/zip_get_num_entries.3 b/thirdparty/libzip-1.11.3/build-emcmake/man/zip_get_num_entries.3 new file mode 100644 index 0000000..1bc6072 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/man/zip_get_num_entries.3 @@ -0,0 +1,88 @@ +.\" zip_get_num_entries.mdoc -- get number of files in archive +.\" Copyright (C) 2011-2017 Dieter Baron and Thomas Klausner +.\" +.\" This file is part of libzip, a library to manipulate ZIP archives. +.\" The authors can be contacted at +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in +.\" the documentation and/or other materials provided with the +.\" distribution. +.\" 3. The names of the authors may not be used to endorse or promote +.\" products derived from this software without specific prior +.\" written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS +.\" OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +.\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +.\" DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE +.\" GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +.\" IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +.\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN +.\" IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.\" +.Dd August 19, 2022 +.Dt ZIP_GET_NUM_ENTRIES 3 +.Os +.Sh NAME +.Nm zip_get_num_entries +.Nd get number of entries in archive +.Sh LIBRARY +libzip (-lzip) +.Sh SYNOPSIS +.In zip.h +.Ft zip_int64_t +.Fn zip_get_num_entries "zip_t *archive" "zip_flags_t flags" +.Sh DESCRIPTION +The +.Fn zip_get_num_entries +function returns the number of entries in +.Ar archive . +Entries are all files that are present in the original archive or that +were added while the archive is open. +This includes deleted files, since +indices are not renumbered until the archive is closed. +(This allows one to refer to deleted files, e. g. to undelete them.) +.Pp +If +.Ar flags +is set to +.Dv ZIP_FL_UNCHANGED , +the original number of files is returned. +.Sh RETURN VALUES +.Fn zip_get_num_entries +returns the number of entries in the zip archive, +or \-1 if +.Ar archive +is +.Dv NULL . +.Sh SEE ALSO +.Xr libzip 3 , +.Xr zip_fopen_index 3 , +.Xr zip_stat_index 3 +.Sh HISTORY +.Fn zip_get_num_entries +was added in libzip 0.10. +In libzip 0.11 the return type was changed from +.Vt zip_uint64_t +to +.Vt zip_int64_t . +In libzip 0.11 the type of +.Ar flags +was changed from +.Vt int +to +.Vt zip_flags_t . +.Sh AUTHORS +.An -nosplit +.An Dieter Baron Aq Mt dillo@nih.at +and +.An Thomas Klausner Aq Mt wiz@gatalith.at diff --git a/thirdparty/libzip-1.11.3/build-emcmake/man/zip_get_num_files.3 b/thirdparty/libzip-1.11.3/build-emcmake/man/zip_get_num_files.3 new file mode 100644 index 0000000..b18c06d --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/man/zip_get_num_files.3 @@ -0,0 +1,75 @@ +.\" zip_get_num_files.mdoc -- get number of files in archive +.\" Copyright (C) 2003-2017 Dieter Baron and Thomas Klausner +.\" +.\" This file is part of libzip, a library to manipulate ZIP archives. +.\" The authors can be contacted at +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in +.\" the documentation and/or other materials provided with the +.\" distribution. +.\" 3. The names of the authors may not be used to endorse or promote +.\" products derived from this software without specific prior +.\" written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS +.\" OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +.\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +.\" DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE +.\" GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +.\" IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +.\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN +.\" IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.\" +.Dd December 18, 2017 +.Dt ZIP_GET_NUM_FILES 3 +.Os +.Sh NAME +.Nm zip_get_num_files +.Nd get number of files in archive (obsolete interface) +.Sh LIBRARY +libzip (-lzip) +.Sh SYNOPSIS +.In zip.h +.Ft int +.Fn zip_get_num_files "zip_t *archive" +.Sh DESCRIPTION +.Em This function is deprecated . +.Em Use +.Xr zip_get_num_entries 3 +.Em instead . +.Pp +The +.Fn zip_get_num_files +function returns the number of files in +.Ar archive . +.Sh RETURN VALUES +.Fn zip_get_num_files +returns the number of files in the zip archive, +or \-1 if +.Ar archive +is +.Dv NULL . +.Sh SEE ALSO +.Xr libzip 3 , +.Xr zip_fopen_index 3 , +.Xr zip_stat_index 3 +.Sh HISTORY +.Fn zip_get_num_files +was added in libzip 0.6. +It was deprecated in libzip 0.11, use +.Fn zip_get_num_entries instead +instead. +.Sh AUTHORS +.An -nosplit +.An Dieter Baron Aq Mt dillo@nih.at +and +.An Thomas Klausner Aq Mt wiz@gatalith.at diff --git a/thirdparty/libzip-1.11.3/build-emcmake/man/zip_libzip_version.3 b/thirdparty/libzip-1.11.3/build-emcmake/man/zip_libzip_version.3 new file mode 100644 index 0000000..04af461 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/man/zip_libzip_version.3 @@ -0,0 +1,66 @@ +.\" zip_libzip_version.mdoc -- return run-time version of library +.\" Copyright (C) 2017 Dieter Baron and Thomas Klausner +.\" +.\" This file is part of libzip, a library to manipulate ZIP archives. +.\" The authors can be contacted at +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in +.\" the documentation and/or other materials provided with the +.\" distribution. +.\" 3. The names of the authors may not be used to endorse or promote +.\" products derived from this software without specific prior +.\" written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS +.\" OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +.\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +.\" DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE +.\" GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +.\" IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +.\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN +.\" IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.\" +.Dd December 18, 2017 +.Dt ZIP_LIBZIP_VERSION 3 +.Os +.Sh NAME +.Nm zip_libzip_version +.Nd return run-time version of library +.Sh LIBRARY +libzip (-lzip) +.Sh SYNOPSIS +.In zip.h +.Ft const char * +.Fn zip_libzip_version void +.Sh DESCRIPTION +.Nm +returns the version number of the library as string in the format +.Dq $MAJOR.$MINOR.$MICRO$SUFFIX +where +.Ar $MAJOR +is the major version, +.Ar $MINOR +the minor, +.Ar $MICRO +the micro, and +.Ar $SUFFIX +a suffix that's only set for development versions. +.Sh SEE ALSO +.Xr libzip 3 +.Sh HISTORY +.Fn zip_libzip_version +was added in libzip 1.3.1. +.Sh AUTHORS +.An -nosplit +.An Dieter Baron Aq Mt dillo@nih.at +and +.An Thomas Klausner Aq Mt wiz@gatalith.at diff --git a/thirdparty/libzip-1.11.3/build-emcmake/man/zip_name_locate.3 b/thirdparty/libzip-1.11.3/build-emcmake/man/zip_name_locate.3 new file mode 100644 index 0000000..612c2a6 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/man/zip_name_locate.3 @@ -0,0 +1,148 @@ +.\" zip_name_locate.mdoc -- get index of file by name +.\" Copyright (C) 2003-2022 Dieter Baron and Thomas Klausner +.\" +.\" This file is part of libzip, a library to manipulate ZIP archives. +.\" The authors can be contacted at +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in +.\" the documentation and/or other materials provided with the +.\" distribution. +.\" 3. The names of the authors may not be used to endorse or promote +.\" products derived from this software without specific prior +.\" written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS +.\" OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +.\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +.\" DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE +.\" GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +.\" IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +.\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN +.\" IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.\" +.Dd March 15, 2022 +.Dt ZIP_NAME_LOCATE 3 +.Os +.Sh NAME +.Nm zip_name_locate +.Nd get index of file by name +.Sh LIBRARY +libzip (-lzip) +.Sh SYNOPSIS +.In zip.h +.Ft zip_int64_t +.Fn zip_name_locate "zip_t *archive" "const char *fname" "zip_flags_t flags" +.Sh DESCRIPTION +The +.Fn zip_name_locate +function returns the index of the file named +.Ar fname +in +.Ar archive . +If +.Ar archive +does not contain a file with that name, \-1 is returned. +.Pp +If neither +.Dv ZIP_FL_ENC_RAW +nor +.Dv ZIP_FL_ENC_STRICT +are specified, guess the encoding of the name in the ZIP archive and convert it +to UTF-8, if necessary, before comparing. +.Pp +If neither +.Dv ZIP_FL_ENC_CP437 +nor +.Dv ZIP_FL_ENC_UTF_8 +are specified, guess the encoding of +.Ar fname . +.Pp +Only CP-437 and UTF-8 are recognized. +.Pp +The +.Fa flags +are specified by +.Em or Ns No 'ing +the following values, or 0 for none of them. +.Bl -tag -offset indent -width ZIP_FL_ENC_STRICT +.It Dv ZIP_FL_NOCASE +Ignore case distinctions. +(Will only work well if the file names are ASCII.) +With this flag, +.Fn zip_name_locate +will be slow for archives with many files. +.It Dv ZIP_FL_NODIR +Ignore directory part of file name in archive. +With this flag, +.Fn zip_name_locate +will be slow for archives with many files. +.It Dv ZIP_FL_ENC_GUESS +This flag has no effect (its value is 0); it can be used to explicitly denote the absence of encoding flags. +.It Dv ZIP_FL_ENC_RAW +Compare +.Ar fname +against the unmodified names as they are in the ZIP archive, without converting them to UTF-8. +.It Dv ZIP_FL_ENC_STRICT +Follow the ZIP specification and expect CP-437 encoded names in +the ZIP archive (except if they are explicitly marked as UTF-8). +Convert them to UTF-8 before comparing. +.It Dv ZIP_FL_ENC_CP437 +.Ar fname +is encoded as CP-437. +.It Dv ZIP_FL_ENC_UTF_8 +.Ar fname +is encoded as UTF-8. +.El +.Pp +.Em Note : +ASCII is a subset of both CP-437 and UTF-8. +.Sh RETURN VALUES +.Fn zip_name_locate +returns the index of the file named +.Ar fname +or \-1, if +.Ar archive +does not contain an entry of that name. +.Sh ERRORS +.Fn zip_name_locate +fails if: +.Bl -tag -width Er +.It Bq Er ZIP_ER_INVAL +One of the arguments is invalid. +.It Bq Er ZIP_ER_MEMORY +Required memory could not be allocated. +.It Bq Er ZIP_ER_NOENT +No entry of the name +.Ar fname +is found in the archive. +.El +.Sh SEE ALSO +.Xr libzip 3 , +.Xr zip_get_name 3 +.Sh HISTORY +.Fn zip_name_locate +was added in libzip 0.6. +In libzip 0.11 the return type was changed from +.Vt int +to +.Vt zip_int64_t . +In libzip 0.11 the type of +.Ar flags +was changed from +.Vt int +to +.Vt zip_flags_t . +.Sh AUTHORS +.An -nosplit +.An Dieter Baron Aq Mt dillo@nih.at +and +.An Thomas Klausner Aq Mt wiz@gatalith.at diff --git a/thirdparty/libzip-1.11.3/build-emcmake/man/zip_open.3 b/thirdparty/libzip-1.11.3/build-emcmake/man/zip_open.3 new file mode 100644 index 0000000..5a8357a --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/man/zip_open.3 @@ -0,0 +1,192 @@ +.\" zip_open.mdoc -- open zip archive +.\" Copyright (C) 2003-2022 Dieter Baron and Thomas Klausner +.\" +.\" This file is part of libzip, a library to manipulate ZIP archives. +.\" The authors can be contacted at +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in +.\" the documentation and/or other materials provided with the +.\" distribution. +.\" 3. The names of the authors may not be used to endorse or promote +.\" products derived from this software without specific prior +.\" written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS +.\" OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +.\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +.\" DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE +.\" GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +.\" IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +.\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN +.\" IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.\" +.Dd October 9, 2022 +.Dt ZIP_OPEN 3 +.Os +.Sh NAME +.Nm zip_open , +.Nm zip_open_from_source +.Nd open zip archive +.Sh LIBRARY +libzip (-lzip) +.Sh SYNOPSIS +.In zip.h +.Ft zip_t * +.Fn zip_open "const char *path" "int flags" "int *errorp" +.Ft zip_t * +.Fn zip_open_from_source "zip_source_t *zs" "int flags" "zip_error_t *ze" +.Sh DESCRIPTION +The +.Fn zip_open +function opens the zip archive specified by +.Ar path +and returns a pointer to a +.Ft struct zip , +used to manipulate the archive. +The +.Fa flags +are specified by +.Em or Ns No 'ing +the following values, or 0 for none of them. +.Bl -tag -offset indent -width ZIP_CHECKCONS +.It Dv ZIP_CHECKCONS +Perform additional stricter consistency checks on the archive, and +error if they fail. +.It Dv ZIP_CREATE +Create the archive if it does not exist. +.It Dv ZIP_EXCL +Error if archive already exists. +.It Dv ZIP_TRUNCATE +If archive exists, ignore its current contents. +In other words, handle it the same way as an empty archive. +.It Dv ZIP_RDONLY +Open archive in read-only mode. +.El +.Pp +If an error occurs and +.Ar errorp +is +.Pf non- Dv NULL , +it will be set to the corresponding error code. +.Pp +The +.Fn zip_open_from_source +function opens a zip archive encapsulated by the zip_source +.Fa zs +using the provided +.Fa flags . +In case of error, the zip_error +.Fa ze +is filled in. +.Sh RETURN VALUES +Upon successful completion +.Fn zip_open +and +.Fn zip_open_from_source +return a +.Ft struct zip +pointer. +Otherwise, +.Dv NULL +is returned and +.Fn zip_open +sets +.Ar *errorp +to indicate the error, while +.Fn zip_open_from source +sets +.Ar ze +to indicate the error. +.Sh EXAMPLES +Here's an example of how you could report errors during +.Nm : +.Bd -literal + zip_t *za; + int err; + + if ((za = zip_open(name, 0, &err)) == NULL) { + zip_error_t error; + zip_error_init_with_code(&error, err); + fprintf(stderr, "%s: cannot open zip archive '%s': %s\en", + progname, name, zip_error_strerror(&error)); + zip_error_fini(&error); + return -1; + } +.Ed +.Sh ERRORS +The archive specified by +.Ar path +is opened unless: +.Bl -tag -width Er +.It Bq Er ZIP_ER_EXISTS +The file specified by +.Ar path +exists and +.Dv ZIP_EXCL +is set. +.It Bq Er ZIP_ER_INCONS +Inconsistencies were found in the file specified by +.Ar path . +This error is often caused by specifying +.Dv ZIP_CHECKCONS +but can also happen without it. +.It Bq Er ZIP_ER_INVAL +The +.Ar path +argument is +.Dv NULL . +.It Bq Er ZIP_ER_MEMORY +Required memory could not be allocated. +.It Bq Er ZIP_ER_NOENT +The file specified by +.Ar path +does not exist and +.Dv ZIP_CREATE +is not set. +.It Bq Er ZIP_ER_NOZIP +The file specified by +.Ar path +is not a zip archive. +.It Bq Er ZIP_ER_OPEN +The file specified by +.Ar path +could not be opened. +.It Bq Er ZIP_ER_READ +A read error occurred; see +.Va errno +for details. +.It Bq Er ZIP_ER_SEEK +The file specified by +.Ar path +does not allow seeks. +.El +For newly created archives, +.Fn zip_open +does not try to create the file; this is done when calling +.Xr zip_close 3 +and any errors, like missing write permissions, will +be reported then. +.Sh SEE ALSO +.Xr libzip 3 , +.Xr zip_close 3 , +.Xr zip_error_strerror 3 , +.Xr zip_fdopen 3 +.Sh HISTORY +.Fn zip_open +and +.Fn zip_open_from_source +were added in libzip 1.0. +.Sh AUTHORS +.An -nosplit +.An Dieter Baron Aq Mt dillo@nih.at +and +.An Thomas Klausner Aq Mt wiz@gatalith.at diff --git a/thirdparty/libzip-1.11.3/build-emcmake/man/zip_register_cancel_callback_with_state.3 b/thirdparty/libzip-1.11.3/build-emcmake/man/zip_register_cancel_callback_with_state.3 new file mode 100644 index 0000000..59705ae --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/man/zip_register_cancel_callback_with_state.3 @@ -0,0 +1,84 @@ +.\" zip_register_cancel_callback_with_state.mdoc -- allow cancelling during zip_close +.\" Copyright (C) 2021-2022 Dieter Baron and Thomas Klausner +.\" +.\" This file is part of libzip, a library to manipulate ZIP archives. +.\" The authors can be contacted at +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in +.\" the documentation and/or other materials provided with the +.\" distribution. +.\" 3. The names of the authors may not be used to endorse or promote +.\" products derived from this software without specific prior +.\" written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS +.\" OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +.\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +.\" DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE +.\" GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +.\" IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +.\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN +.\" IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.\" +.Dd June 18, 2022 +.Dt ZIP_REGISTER_CANCEL_CALLBACK_WITH_STATE 3 +.Os +.Sh NAME +.Nm zip_register_cancel_callback_with_state +.Nd allow cancelling during zip_close +.Sh LIBRARY +libzip (-lzip) +.Sh SYNOPSIS +.In zip.h +.Vt typedef int (*zip_cancel_callback)(zip_t *, void *); +.Ft void +.Fn zip_register_cancel_callback_with_state "zip_t *archive" "zip_cancel_callback callback" "void (*ud_free)(void *)" "void *ud" +.Sh DESCRIPTION +This function can be used to cancel writing of a zip archive during +.Xr zip_close 3 . +.Pp +The +.Fn zip_register_cancel_callback_with_state +function registers a callback function +.Ar callback +for the zip archive +.Ar archive . +The +.Ar ud_free +function is called during cleanup for deleting the userdata supplied in +.Ar ud . +.Pp +The callback function is called during +.Xr zip_close 3 +in regular intervals (after every zip archive entry that's completely +written to disk, and while writing data for entries) with zip archive +.Ar archive +and the user-provided user-data +.Ar ud +as arguments. +When the callback function returns a non-zero value, writing is cancelled and +.Xr zip_close 3 +returns an error. +.Pp +The callback function should be fast, since it will be called often. +.Sh SEE ALSO +.Xr libzip 3 , +.Xr zip_close 3 , +.Xr zip_register_progress_callback_with_state 3 +.Sh HISTORY +.Fn zip_register_cancel_callback_with_state +was added in libzip 1.6.0. +.Sh AUTHORS +.An -nosplit +.An Dieter Baron Aq Mt dillo@nih.at +and +.An Thomas Klausner Aq Mt wiz@gatalith.at diff --git a/thirdparty/libzip-1.11.3/build-emcmake/man/zip_register_progress_callback.3 b/thirdparty/libzip-1.11.3/build-emcmake/man/zip_register_progress_callback.3 new file mode 100644 index 0000000..69cc4f5 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/man/zip_register_progress_callback.3 @@ -0,0 +1,77 @@ +.\" zip_register_progress_callback.mdoc -- provide updates during zip_close +.\" Copyright (C) 2016-2017 Dieter Baron and Thomas Klausner +.\" +.\" This file is part of libzip, a library to manipulate ZIP archives. +.\" The authors can be contacted at +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in +.\" the documentation and/or other materials provided with the +.\" distribution. +.\" 3. The names of the authors may not be used to endorse or promote +.\" products derived from this software without specific prior +.\" written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS +.\" OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +.\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +.\" DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE +.\" GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +.\" IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +.\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN +.\" IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.\" +.Dd December 18, 2017 +.Dt ZIP_REGISTER_PROGRESS_CALLBACK 3 +.Os +.Sh NAME +.Nm zip_register_progress_callback +.Nd provide updates during zip_close (obsolete interface) +.Sh LIBRARY +libzip (-lzip) +.Sh SYNOPSIS +.In zip.h +.Vt typedef void (*zip_progress_callback_t)(double); +.Ft void +.Fn zip_register_progress_callback "zip_t *archive" "zip_progress_callback_t progress_callback" +.Sh DESCRIPTION +The function +.Fn zip_register_progress_callback +is the obsolete version of +.Xr zip_register_progress_callback_with_state 3 . +.Pp +The +.Fn zip_register_progress_callback +function registers a callback function +.Ar progress_callback +for the zip archive +.Ar archive . +This function is called during +.Xr zip_close 3 +after every zip archive entry that's completely written to disk. +The value is a +.Vt double +in the range from 0.0 to 1.0. +This can be used to provide progress indicators for user interfaces. +.Sh SEE ALSO +.Xr libzip 3 , +.Xr zip_close 3 +.Sh HISTORY +.Fn zip_register_progress_callback +was added in libzip 1.2.0. +It was deprecated in libzip 1.3.0, use +.Fn zip_register_progress_callback_with_state +instead. +.Sh AUTHORS +.An -nosplit +.An Dieter Baron Aq Mt dillo@nih.at +and +.An Thomas Klausner Aq Mt wiz@gatalith.at diff --git a/thirdparty/libzip-1.11.3/build-emcmake/man/zip_register_progress_callback_with_state.3 b/thirdparty/libzip-1.11.3/build-emcmake/man/zip_register_progress_callback_with_state.3 new file mode 100644 index 0000000..4ee88e6 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/man/zip_register_progress_callback_with_state.3 @@ -0,0 +1,87 @@ +.\" zip_register_progress_callback_with_state.mdoc -- provide updates during zip_close +.\" Copyright (C) 2017-2021 Dieter Baron and Thomas Klausner +.\" +.\" This file is part of libzip, a library to manipulate ZIP archives. +.\" The authors can be contacted at +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in +.\" the documentation and/or other materials provided with the +.\" distribution. +.\" 3. The names of the authors may not be used to endorse or promote +.\" products derived from this software without specific prior +.\" written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS +.\" OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +.\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +.\" DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE +.\" GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +.\" IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +.\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN +.\" IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.\" +.Dd December 18, 2017 +.Dt ZIP_REGISTER_PROGRESS_CALLBACK_WITH_STATE 3 +.Os +.Sh NAME +.Nm zip_register_progress_callback_with_state +.Nd provide updates during zip_close +.Sh LIBRARY +libzip (-lzip) +.Sh SYNOPSIS +.In zip.h +.Vt typedef void (*zip_progress_callback)(zip_t *, double, void *); +.Ft void +.Fn zip_register_progress_callback_with_state "zip_t *archive" "double precision" "zip_progress_callback callback" "void (*ud_free)(void *)" "void *ud" +.Sh DESCRIPTION +The +.Fn zip_register_progress_callback_with_state +function registers a callback function +.Ar callback +for the zip archive +.Ar archive . +The +.Ar precision +argument is a double in the range from 0.00 to 1.0 that defines the +smallest change for which the callback should be called (to avoid too +frequent calls). +The +.Ar ud_free +function is called during cleanup for deleting the userdata supplied in +.Ar ud . +.Pp +The callback function is called during +.Xr zip_close 3 +in regular intervals (after every zip archive entry that's completely +written to disk, and while writing data for entries) with zip archive +.Ar archive , +the current progression state as a +.Vt double , +and the user-provided user-data +.Ar ud +as arguments. +The progression state is a +.Vt double +in the range from 0.0 to 1.0. +This can be used to provide progress indicators for user interfaces. +.Sh SEE ALSO +.Xr libzip 3 , +.Xr zip_close 3 , +.Xr zip_register_cancel_callback_with_state 3 +.Sh HISTORY +.Fn zip_register_progress_callback_with_state +was added in libzip 1.3.0. +.Sh AUTHORS +.An -nosplit +.An Dieter Baron Aq Mt dillo@nih.at +and +.An Thomas Klausner Aq Mt wiz@gatalith.at diff --git a/thirdparty/libzip-1.11.3/build-emcmake/man/zip_rename.3 b/thirdparty/libzip-1.11.3/build-emcmake/man/zip_rename.3 new file mode 100644 index 0000000..5a53880 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/man/zip_rename.3 @@ -0,0 +1,70 @@ +.\" zip_rename.mdoc -- rename file in zip archive +.\" Copyright (C) 2003-2017 Dieter Baron and Thomas Klausner +.\" +.\" This file is part of libzip, a library to manipulate ZIP archives. +.\" The authors can be contacted at +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in +.\" the documentation and/or other materials provided with the +.\" distribution. +.\" 3. The names of the authors may not be used to endorse or promote +.\" products derived from this software without specific prior +.\" written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS +.\" OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +.\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +.\" DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE +.\" GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +.\" IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +.\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN +.\" IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.\" +.Dd December 18, 2017 +.Dt ZIP_RENAME 3 +.Os +.Sh NAME +.Nm zip_rename +.Nd rename file in zip archive (obsolete interface) +.Sh LIBRARY +libzip (-lzip) +.Sh SYNOPSIS +.In zip.h +.Ft int +.Fn zip_rename "zip_t *archive" "zip_uint64_t index" "const char *name" +.Sh DESCRIPTION +.Fn zip_rename +is the obsolete version of +.Xr zip_file_rename 3 . +It is the same as calling +.Xr zip_file_rename 3 +with an empty flags argument. +.Sh SEE ALSO +.Xr libzip 3 , +.Xr zip_file_rename 3 +.Sh HISTORY +.Fn zip_rename +was added in libzip 0.6. +In libzip 0.10 the type of +.Ar index +was changed from +.Vt int +to +.Vt zip_uint64_t . +It was deprecated in libzip 0.11, use +.Fn zip_file_rename +instead. +.Sh AUTHORS +.An -nosplit +.An Dieter Baron Aq Mt dillo@nih.at +and +.An Thomas Klausner Aq Mt wiz@gatalith.at diff --git a/thirdparty/libzip-1.11.3/build-emcmake/man/zip_set_archive_comment.3 b/thirdparty/libzip-1.11.3/build-emcmake/man/zip_set_archive_comment.3 new file mode 100644 index 0000000..a6aaea1 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/man/zip_set_archive_comment.3 @@ -0,0 +1,93 @@ +.\" zip_set_archive_comment.mdoc -- set zip archive comment +.\" Copyright (C) 2006-2021 Dieter Baron and Thomas Klausner +.\" +.\" This file is part of libzip, a library to manipulate ZIP archives. +.\" The authors can be contacted at +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in +.\" the documentation and/or other materials provided with the +.\" distribution. +.\" 3. The names of the authors may not be used to endorse or promote +.\" products derived from this software without specific prior +.\" written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS +.\" OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +.\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +.\" DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE +.\" GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +.\" IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +.\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN +.\" IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.\" +.Dd December 18, 2017 +.Dt ZIP_SET_ARCHIVE_COMMENT 3 +.Os +.Sh NAME +.Nm zip_set_archive_comment +.Nd set zip archive comment +.Sh LIBRARY +libzip (-lzip) +.Sh SYNOPSIS +.In zip.h +.Ft int +.Fn zip_set_archive_comment "zip_t *archive" "const char *comment" "zip_uint16_t len" +.Sh DESCRIPTION +The +.Fn zip_set_archive_comment +function sets the comment for the entire zip archive. +If +.Ar comment +is +.Dv NULL +and +.Ar len +is 0, the archive comment will be removed. +.Ar comment +must be encoded in ASCII or UTF-8. +.Sh RETURN VALUES +Upon successful completion 0 is returned. +Otherwise, \-1 is returned and the error information in +.Ar archive +is set to indicate the error. +.Sh ERRORS +.Fn zip_set_archive_comment +fails if: +.Bl -tag -width Er +.It Bq Er ZIP_ER_INVAL +.Ar len +is less than 0 or longer than the maximum comment length in a zip file +(65535), or +.Ar comment +is not a valid UTF-8 encoded string. +.It Bq Er ZIP_ER_MEMORY +Required memory could not be allocated. +.El +.Sh SEE ALSO +.Xr libzip 3 , +.Xr zip_file_get_comment 3 , +.Xr zip_file_set_comment 3 , +.Xr zip_get_archive_comment 3 +.Sh HISTORY +.Fn zip_set_archive_comment +was added in libzip 0.7. +In libzip 0.11 the type of +.Ar len +was changed from +.Vt int +to +.Vt zip_uint16_t . +.Sh AUTHORS +.An -nosplit +.An Dieter Baron Aq Mt dillo@nih.at +and +.An Thomas Klausner Aq Mt wiz@gatalith.at diff --git a/thirdparty/libzip-1.11.3/build-emcmake/man/zip_set_archive_flag.3 b/thirdparty/libzip-1.11.3/build-emcmake/man/zip_set_archive_flag.3 new file mode 100644 index 0000000..ee0a246 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/man/zip_set_archive_flag.3 @@ -0,0 +1,90 @@ +.\" zip_set_archive_flag.mdoc -- set zip archive flag +.\" Copyright (C) 2008-2017 Dieter Baron and Thomas Klausner +.\" +.\" This file is part of libzip, a library to manipulate ZIP archives. +.\" The authors can be contacted at +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in +.\" the documentation and/or other materials provided with the +.\" distribution. +.\" 3. The names of the authors may not be used to endorse or promote +.\" products derived from this software without specific prior +.\" written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS +.\" OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +.\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +.\" DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE +.\" GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +.\" IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +.\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN +.\" IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.\" +.Dd July 19, 2023 +.Dt ZIP_SET_ARCHIVE_FLAG 3 +.Os +.Sh NAME +.Nm zip_set_archive_flag +.Nd set zip archive flag +.Sh LIBRARY +libzip (-lzip) +.Sh SYNOPSIS +.In zip.h +.Ft int +.Fn zip_set_archive_flag "zip_t *archive" "zip_flags_t flag" "int value" +.Sh DESCRIPTION +The +.Fn zip_set_archive_flag +function sets the flag +.Ar flag +for the archive +.Ar archive +to the value +.Ar value . +.Pp +Supported flags are: +.Bl -tag -width XZIPXAFLXRDONLYXXX +.It Dv ZIP_AFL_CREATE_OR_KEEP_FILE_FOR_EMPTY_ARCHIVE +If this flag is cleared, the archive file will be removed if the archive is empty. +If it is set, an empty archive will be created, which is not recommended by the zip specification. +.It Dv ZIP_AFL_RDONLY +If this flag is set, no modification to the archive are allowed. +This flag can only be cleared if it was manually set with +.Nm , +not if the archive was opened read-only. +.It Dv ZIP_AFL_WANT_TORRENTZIP +If this flag is set, the archive will be written in torrentzip format. +.El +.Sh RETURN VALUES +Upon successful completion 0 is returned, and \-1 if an error +occurred. +.Sh SEE ALSO +.Xr libzip 3 , +.Xr zip_get_archive_flag 3 +.Sh HISTORY +.Fn zip_set_archive_flag +was added in libzip 0.9. +In libzip 0.11 the type of +.Ar flag +was changed from +.Vt int +to +.Vt zip_flags_t . +.Dv ZIP_AFL_CREATE_OR_KEEP_FILE_FOR_EMPTY_ARCHIVE +and +.Dv ZIP_AFL_WANT_TORRENTZIP +were added in libzip 1.10.0. +.Sh AUTHORS +.An -nosplit +.An Dieter Baron Aq Mt dillo@nih.at +and +.An Thomas Klausner Aq Mt wiz@gatalith.at diff --git a/thirdparty/libzip-1.11.3/build-emcmake/man/zip_set_default_password.3 b/thirdparty/libzip-1.11.3/build-emcmake/man/zip_set_default_password.3 new file mode 100644 index 0000000..f2574ca --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/man/zip_set_default_password.3 @@ -0,0 +1,90 @@ +.\" zip_set_default_password.mdoc -- set default password for zip +.\" Copyright (C) 2011-2021 Dieter Baron and Thomas Klausner +.\" +.\" This file is part of libzip, a library to manipulate ZIP files. +.\" The authors can be contacted at +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in +.\" the documentation and/or other materials provided with the +.\" distribution. +.\" 3. The names of the authors may not be used to endorse or promote +.\" products derived from this software without specific prior +.\" written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS +.\" OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +.\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +.\" DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE +.\" GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +.\" IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +.\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN +.\" IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.\" +.Dd September 15, 2020 +.Dt ZIP_SET_DEFAULT_PASSWORD 3 +.Os +.Sh NAME +.Nm zip_set_default_password +.Nd set default password for encrypted files in zip +.Sh LIBRARY +libzip (-lzip) +.Sh SYNOPSIS +.In zip.h +.Ft int +.Fn zip_set_default_password "zip_t *archive" "const char *password" +.Sh DESCRIPTION +The +.Fn zip_set_default_password +function sets the default password used when accessing encrypted files. +If +.Ar password +is +.Dv NULL +or the empty string, the default password is unset. +.Pp +If you prefer a different password for single files, use +.Xr zip_fopen_encrypted 3 +instead of +.Xr zip_fopen 3 . +Usually, however, the same password is used for every file in an +zip archive. +.Pp +The password is not verified when calling this function. +See the +.Sx CAVEATS +section in +.Xr zip_fopen_encrypted 3 +for more details about password handling. +.Sh RETURN VALUES +Upon successful completion 0 is returned. +Otherwise, \-1 is returned and the error information in +.Ar archive +is set to indicate the error. +.Sh ERRORS +.Fn zip_set_default_password +fails if: +.Bl -tag -width Er +.It Bq Er ZIP_ER_MEMORY +Required memory could not be allocated. +.El +.Sh SEE ALSO +.Xr libzip 3 , +.Xr zip_fopen 3 , +.Xr zip_fopen_encrypted 3 +.Sh HISTORY +.Fn zip_set_default_password +was added in libzip 0.10. +.Sh AUTHORS +.An -nosplit +.An Dieter Baron Aq Mt dillo@nih.at +and +.An Thomas Klausner Aq Mt wiz@gatalith.at diff --git a/thirdparty/libzip-1.11.3/build-emcmake/man/zip_set_file_comment.3 b/thirdparty/libzip-1.11.3/build-emcmake/man/zip_set_file_comment.3 new file mode 100644 index 0000000..242597d --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/man/zip_set_file_comment.3 @@ -0,0 +1,79 @@ +.\" zip_set_file_comment.mdoc -- set comment for file in zip +.\" Copyright (C) 2006-2017 Dieter Baron and Thomas Klausner +.\" +.\" This file is part of libzip, a library to manipulate ZIP files. +.\" The authors can be contacted at +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in +.\" the documentation and/or other materials provided with the +.\" distribution. +.\" 3. The names of the authors may not be used to endorse or promote +.\" products derived from this software without specific prior +.\" written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS +.\" OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +.\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +.\" DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE +.\" GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +.\" IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +.\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN +.\" IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.\" +.Dd December 18, 2017 +.Dt ZIP_SET_FILE_COMMENT 3 +.Os +.Sh NAME +.Nm zip_set_file_comment +.Nd set comment for file in zip (obsolete interface) +.Sh LIBRARY +libzip (-lzip) +.Sh SYNOPSIS +.In zip.h +.Ft int +.Fn zip_set_file_comment "zip_t *archive" "zip_uint64_t index" "const char *comment" "int len" +.Sh DESCRIPTION +The +.Fn zip_set_file_comment +function is the obsolete version of +.Xr zip_file_set_comment 3 . +The only differences are the type of the +.Ar len +argument and the additional +.Ar flags +argument. +.Fn zip_set_file_comment +is the same as calling +.Xr zip_file_set_comment 3 +with an empty +.Ar flags +argument. +.Sh SEE ALSO +.Xr libzip 3 , +.Xr zip_file_set_comment 3 +.Sh HISTORY +.Fn zip_set_file_comment +was added in libzip 0.7. +In libzip 0.10 the type of +.Ar index +was changed from +.Vt int +to +.Vt zip_uint64_t . +It was deprecated in libzip 0.11, use +.Fn zip_file_set_comment +instead. +.Sh AUTHORS +.An -nosplit +.An Dieter Baron Aq Mt dillo@nih.at +and +.An Thomas Klausner Aq Mt wiz@gatalith.at diff --git a/thirdparty/libzip-1.11.3/build-emcmake/man/zip_set_file_compression.3 b/thirdparty/libzip-1.11.3/build-emcmake/man/zip_set_file_compression.3 new file mode 100644 index 0000000..b58dcb6 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/man/zip_set_file_compression.3 @@ -0,0 +1,146 @@ +.\" zip_set_file_compression.mdoc -- set compression method and its flags +.\" Copyright (C) 2012-2021 Dieter Baron and Thomas Klausner +.\" +.\" This file is part of libzip, a library to manipulate ZIP files. +.\" The authors can be contacted at +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in +.\" the documentation and/or other materials provided with the +.\" distribution. +.\" 3. The names of the authors may not be used to endorse or promote +.\" products derived from this software without specific prior +.\" written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS +.\" OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +.\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +.\" DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE +.\" GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +.\" IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +.\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN +.\" IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.\" +.Dd February 2, 2023 +.Dt ZIP_SET_FILE_COMPRESSION 3 +.Os +.Sh NAME +.Nm zip_set_file_compression +.Nd set compression method for file in zip +.Sh LIBRARY +libzip (-lzip) +.Sh SYNOPSIS +.In zip.h +.Ft int +.Fn zip_set_file_compression "zip_t *archive" "zip_uint64_t index" "zip_int32_t comp" "zip_uint32_t comp_flags" +.Sh DESCRIPTION +The +.Fn zip_set_file_compression +function sets the compression method for the file at position +.Ar index +in the zip archive to +.Ar comp +with the compression method specific +.Ar comp_flags . +The +.Ar comp +is the same as returned by +.Xr zip_stat 3 . +For the +.Ar comp +argument, currently only the following values are supported: +.Bl -tag -width ZIP_CM_DEFLATE_XX +.It Dv ZIP_CM_DEFAULT +default compression; currently the same as +.Dv ZIP_CM_DEFLATE , +but +.Ar flags +are ignored. +.It Dv ZIP_CM_STORE +Store the file uncompressed. +.It Dv ZIP_CM_BZIP2 +Compress the file using the +.Xr bzip2 1 +algorithm. +.It Dv ZIP_CM_DEFLATE +Deflate the file with the +.Xr zlib 3 +algorithm and default options. +.It Dv ZIP_CM_XZ +Use the +.Xr xz 1 +algorithm for compression +.It Dv ZIP_CM_ZSTD +Use the +.Xr zstd 1 +algorithm for compression +.El +.Pp +.Em NOTE : +Only the deflate and store methods can be assumed to be universally +supported. +.Pp +The +.Ar comp_flags +argument defines the compression level. +This value is dependent on the compression algorithm. +In general, lower numbers mean faster de/compression and higher +numbers mean slower de/compression. +For +.Dv ZIP_CM_BZIP , +.Dv ZIP_CM_DEFLATE , +and +.Dv ZIP_CM_XZ +1 is the fastest compression and 9 the best, 0 chooses the default. +For +.Dv ZIP_CM_ZSTD +possible values are +.Xr ZSTD_minCLevel 3 +to +.Xr ZSTD_maxCLevel 3 ; negative values must be cast to +.Ft zip_uint32_t . +.Pp +Further compression method specific flags might be added over time. +.Pp +The current compression method for a file in a zip archive can be +determined using +.Xr zip_stat 3 . +.Sh RETURN VALUES +Upon successful completion 0 is returned. +Otherwise, \-1 is returned and the error information in +.Ar archive +is set to indicate the error. +.Sh ERRORS +.Fn zip_set_file_compression +fails if: +.Bl -tag -width Er +.It Bq Er ZIP_ER_COMPNOTSUPP +Unsupported compression method requested. +.It Bq Er ZIP_ER_INVAL +.Ar index +is not a valid file index in +.Ar archive , +or the argument combination is invalid. +.It Bq Er ZIP_ER_RDONLY +Read-only zip file, no changes allowed. +.El +.Sh SEE ALSO +.Xr libzip 3 , +.Xr zip_compression_method_supported 3 , +.Xr zip_stat 3 +.Sh HISTORY +.Fn zip_set_file_compression +was added in libzip 0.11. +.Sh AUTHORS +.An -nosplit +.An Dieter Baron Aq Mt dillo@nih.at +and +.An Thomas Klausner Aq Mt wiz@gatalith.at diff --git a/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source.3 b/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source.3 new file mode 100644 index 0000000..fd748fd --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source.3 @@ -0,0 +1,90 @@ +.\" zip_source.mdoc -- description of zip data source +.\" Copyright (C) 2014-2021 Dieter Baron and Thomas Klausner +.\" +.\" This file is part of libzip, a library to manipulate ZIP archives. +.\" The authors can be contacted at +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in +.\" the documentation and/or other materials provided with the +.\" distribution. +.\" 3. The names of the authors may not be used to endorse or promote +.\" products derived from this software without specific prior +.\" written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS +.\" OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +.\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +.\" DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE +.\" GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +.\" IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +.\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN +.\" IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.\" +.Dd December 18, 2017 +.Dt ZIP_SOURCE 3 +.Os +.Sh NAME +.Nm zip_source +.Nd zip data source structure +.Sh LIBRARY +libzip (-lzip) +.Sh SYNOPSIS +.In zip.h +.Vt zip_source_t *zs ; +.Sh DESCRIPTION +A +.Vt struct zip_source +is a data source used by +.Xr libzip 3 +for adding or replacing file contents for a file in a zip archive. +If the source supports seeking, it can also be used to open zip archives from. +It is created by calling one of +.Xr zip_source_buffer 3 , +.Xr zip_source_buffer_create 3 , +.Xr zip_source_file 3 , +.Xr zip_source_file_create 3 , +.Xr zip_source_filep 3 , +.Xr zip_source_filep_create 3 , +.Xr zip_source_function 3 , +.Xr zip_source_function_create 3 , +.Xr zip_source_window 3 , +or +.Xr zip_source_zip 3 . +.Vt zip_source_t +is reference counted, and created with a reference count of 1. +.Xr zip_open_from_source 3 , +.Xr zip_file_add 3 , +and +.Xr zip_file_replace 3 +will decrement the reference count of the +.Vt zip_source_t +when they are done using it, so +.Xr zip_source_free 3 +only needs to be called when these functions return an error. +Use +.Xr zip_source_keep 3 +to increase the reference count, for example if you need the source after +.Xr zip_close 3 . +.Sh SEE ALSO +.Xr libzip 3 , +.Xr zip_source_buffer 3 , +.Xr zip_source_file 3 , +.Xr zip_source_filep 3 , +.Xr zip_source_free 3 , +.Xr zip_source_function 3 , +.Xr zip_source_window 3 , +.Xr zip_source_zip 3 +.Sh AUTHORS +.An -nosplit +.An Dieter Baron Aq Mt dillo@nih.at +and +.An Thomas Klausner Aq Mt wiz@gatalith.at diff --git a/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_begin_write.3 b/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_begin_write.3 new file mode 100644 index 0000000..8bcd555 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_begin_write.3 @@ -0,0 +1,89 @@ +.\" zip_source_begin_write.mdoc -- prepare zip source for writing +.\" Copyright (C) 2014-2017 Dieter Baron and Thomas Klausner +.\" +.\" This file is part of libzip, a library to manipulate ZIP archives. +.\" The authors can be contacted at +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in +.\" the documentation and/or other materials provided with the +.\" distribution. +.\" 3. The names of the authors may not be used to endorse or promote +.\" products derived from this software without specific prior +.\" written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS +.\" OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +.\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +.\" DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE +.\" GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +.\" IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +.\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN +.\" IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.\" +.Dd December 18, 2017 +.Dt ZIP_SOURCE_BEGIN_WRITE 3 +.Os +.Sh NAME +.Nm zip_source_begin_write , +.Nm zip_source_begin_write_cloning +.Nd prepare zip source for writing +.Sh LIBRARY +libzip (-lzip) +.Sh SYNOPSIS +.In zip.h +.Ft int +.Fn zip_source_begin_write "zip_source_t *source" +.Ft int +.Fn zip_source_begin_write_cloning "zip_source_t *source" "zip_uint64_t offset" +.Sh DESCRIPTION +The functions +.Fn zip_source_begin_write +and +.Fn zip_source_begin_write_cloning +prepare +.Fa source +for writing. +Usually this involves creating temporary files or allocating buffers. +.Pp +.Fn zip_source_begin_write_cloning +preserves the first +.Ar offset +bytes of the original file. +This is done efficiently, and writes to +.Ar source +won't overwrite the original data until +.Fn zip_commit_write +is called. +.Sh RETURN VALUES +Upon successful completion 0 is returned. +Otherwise, \-1 is returned and the error information in +.Ar source +is set to indicate the error. +.Sh SEE ALSO +.Xr libzip 3 , +.Xr zip_source 3 , +.Xr zip_source_commit_write 3 , +.Xr zip_source_rollback_write 3 , +.Xr zip_source_seek_write 3 , +.Xr zip_source_tell_write 3 , +.Xr zip_source_write 3 +.Sh HISTORY +.Fn zip_source_begin_write +was added in libzip 1.0. +.Pp +.Fn zip_source_begin_write_cloning +was added in libzip 1.4.0. +.Sh AUTHORS +.An -nosplit +.An Dieter Baron Aq Mt dillo@nih.at +and +.An Thomas Klausner Aq Mt wiz@gatalith.at diff --git a/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_buffer.3 b/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_buffer.3 new file mode 100644 index 0000000..148ceed --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_buffer.3 @@ -0,0 +1,102 @@ +.\" zip_source_buffer.mdoc -- create zip data source from buffer +.\" Copyright (C) 2004-2021 Dieter Baron and Thomas Klausner +.\" +.\" This file is part of libzip, a library to manipulate ZIP archives. +.\" The authors can be contacted at +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in +.\" the documentation and/or other materials provided with the +.\" distribution. +.\" 3. The names of the authors may not be used to endorse or promote +.\" products derived from this software without specific prior +.\" written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS +.\" OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +.\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +.\" DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE +.\" GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +.\" IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +.\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN +.\" IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.\" +.Dd December 18, 2017 +.Dt ZIP_SOURCE_BUFFER 3 +.Os +.Sh NAME +.Nm zip_source_buffer , +.Nm zip_source_buffer_create +.Nd create zip data source from buffer +.Sh LIBRARY +libzip (-lzip) +.Sh SYNOPSIS +.In zip.h +.Ft zip_source_t * +.Fn zip_source_buffer "zip_t *archive" "const void *data" "zip_uint64_t len" "int freep" +.Ft zip_source_t * +.Fn zip_source_buffer_create "const void *data" "zip_uint64_t len" "int freep" "zip_error_t *error" +.Sh DESCRIPTION +The functions +.Fn zip_source_buffer +and +.Fn zip_source_buffer_create +create a zip source from the buffer +.Ar data +of size +.Ar len . +If +.Ar freep +is non-zero, the buffer will be freed when it is no longer needed. +.Ar data +must remain valid for the lifetime of the created source. +.Pp +The source can be used to open a zip archive from. +.Sh RETURN VALUES +Upon successful completion, the created source is returned. +Otherwise, +.Dv NULL +is returned and the error code in +.Ar archive +or +.Ar error +is set to indicate the error. +.Sh ERRORS +.Fn zip_source_buffer +and +.Fn zip_source_buffer_create +fail if: +.Bl -tag -width Er +.It Bq Er ZIP_ER_INVAL +.Ar len +is greater than zero and +.Ar data +is +.Dv NULL . +.It Bq Er ZIP_ER_MEMORY +Required memory could not be allocated. +.El +.Sh SEE ALSO +.Xr libzip 3 , +.Xr zip_file_add 3 , +.Xr zip_file_replace 3 , +.Xr zip_open_from_source 3 , +.Xr zip_source 3 +.Sh HISTORY +.Fn zip_source_buffer +and +.Fn zip_source_buffer_create +were added in libzip 1.0. +.Sh AUTHORS +.An -nosplit +.An Dieter Baron Aq Mt dillo@nih.at +and +.An Thomas Klausner Aq Mt wiz@gatalith.at diff --git a/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_buffer_fragment.3 b/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_buffer_fragment.3 new file mode 100644 index 0000000..c452ef7 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_buffer_fragment.3 @@ -0,0 +1,112 @@ +.\" zip_source_buffer_fragment.mdoc -- create zip data source from multiple buffers +.\" Copyright (C) 2004-2021 Dieter Baron and Thomas Klausner +.\" +.\" This file is part of libzip, a library to manipulate ZIP archives. +.\" The authors can be contacted at +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in +.\" the documentation and/or other materials provided with the +.\" distribution. +.\" 3. The names of the authors may not be used to endorse or promote +.\" products derived from this software without specific prior +.\" written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS +.\" OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +.\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +.\" DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE +.\" GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +.\" IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +.\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN +.\" IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.\" +.Dd December 18, 2017 +.Dt ZIP_SOURCE_BUFFER_FRAGMENT 3 +.Os +.Sh NAME +.Nm zip_source_buffer_fragment , +.Nm zip_source_buffer_fragment_create +.Nd create zip data source from multiple buffer +.Sh LIBRARY +libzip (-lzip) +.Sh SYNOPSIS +.In zip.h +.Ft zip_source_t * +.Fn zip_source_buffer_fragment "zip_t *archive" "zip_buffer_fragment_t *fragments" "zip_uint64_t nfragments" "int freep" +.Ft zip_source_t * +.Fn zip_source_buffer_fragment_create "zip_buffer_fragment_t *fragments" "zip_uint64_t nfragments" "int freep" "zip_error_t *error" +.Sh DESCRIPTION +The functions +.Fn zip_source_buffer_fragment +and +.Fn zip_source_buffer_fragment_create +create a zip source from the data in +.Ar fragments . +.Ar nfragments +specifies the number of fragments. +If +.Ar freep +is non-zero, the data will be freed when it is no longer needed. +.Bd -literal +struct zip_stat { + zip_uint8_t *data; /* pointer to the actual data */ + zip_uint64_t length; /* length of this fragment */ +}; +.Ed +.Pp +The data +.Ar fragments +point to must remain valid for the lifetime of the created source. +.Ar fragments +itself can be discarded once the source is created. +.Pp +The source can be used to open a zip archive from. +.Sh RETURN VALUES +Upon successful completion, the created source is returned. +Otherwise, +.Dv NULL +is returned and the error code in +.Ar archive +or +.Ar error +is set to indicate the error. +.Sh ERRORS +.Fn zip_source_buffer +and +.Fn zip_source_buffer_create +fail if: +.Bl -tag -width Er +.It Bq Er ZIP_ER_INVAL +.Ar nfragments +is greater than zero and +.Ar fragments +is +.Dv NULL . +.It Bq Er ZIP_ER_MEMORY +Required memory could not be allocated. +.El +.Sh SEE ALSO +.Xr libzip 3 , +.Xr zip_file_add 3 , +.Xr zip_file_replace 3 , +.Xr zip_open_from_source 3 , +.Xr zip_source 3 +.Sh HISTORY +.Fn zip_source_buffer_fragment +and +.Fn zip_source_buffer_fragment_create +were added in libzip 1.4.0. +.Sh AUTHORS +.An -nosplit +.An Dieter Baron Aq Mt dillo@nih.at +and +.An Thomas Klausner Aq Mt wiz@gatalith.at diff --git a/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_close.3 b/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_close.3 new file mode 100644 index 0000000..05c7ed1 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_close.3 @@ -0,0 +1,67 @@ +.\" zip_source_close.mdoc -- close zip source (open for reading) +.\" Copyright (C) 2014-2021 Dieter Baron and Thomas Klausner +.\" +.\" This file is part of libzip, a library to manipulate ZIP archives. +.\" The authors can be contacted at +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in +.\" the documentation and/or other materials provided with the +.\" distribution. +.\" 3. The names of the authors may not be used to endorse or promote +.\" products derived from this software without specific prior +.\" written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS +.\" OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +.\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +.\" DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE +.\" GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +.\" IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +.\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN +.\" IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.\" +.Dd December 18, 2017 +.Dt ZIP_SOURCE_CLOSE 3 +.Os +.Sh NAME +.Nm zip_source_close +.Nd close zip_source (which was open for reading) +.Sh LIBRARY +libzip (-lzip) +.Sh SYNOPSIS +.In zip.h +.Ft int +.Fn zip_source_close "zip_source_t *source" +.Sh DESCRIPTION +The function +.Fn zip_source_close +closes +.Fa source , +indicating that no more data will be read. +.Sh RETURN VALUES +Upon successful completion 0 is returned. +Otherwise, \-1 is returned and the error information in +.Ar source +is set to indicate the error. +.Sh SEE ALSO +.Xr libzip 3 , +.Xr zip_source 3 , +.Xr zip_source_free 3 , +.Xr zip_source_open 3 +.Sh HISTORY +.Fn zip_source_close +was added in libzip 1.0. +.Sh AUTHORS +.An -nosplit +.An Dieter Baron Aq Mt dillo@nih.at +and +.An Thomas Klausner Aq Mt wiz@gatalith.at diff --git a/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_commit_write.3 b/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_commit_write.3 new file mode 100644 index 0000000..9deae6b --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_commit_write.3 @@ -0,0 +1,70 @@ +.\" zip_source_commit_write.mdoc -- finalize changes to zip source +.\" Copyright (C) 2014-2017 Dieter Baron and Thomas Klausner +.\" +.\" This file is part of libzip, a library to manipulate ZIP archives. +.\" The authors can be contacted at +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in +.\" the documentation and/or other materials provided with the +.\" distribution. +.\" 3. The names of the authors may not be used to endorse or promote +.\" products derived from this software without specific prior +.\" written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS +.\" OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +.\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +.\" DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE +.\" GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +.\" IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +.\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN +.\" IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.\" +.Dd December 18, 2017 +.Dt ZIP_SOURCE_COMMIT_WRITE 3 +.Os +.Sh NAME +.Nm zip_source_commit_write +.Nd finalize changes to zip source +.Sh LIBRARY +libzip (-lzip) +.Sh SYNOPSIS +.In zip.h +.Ft int +.Fn zip_source_commit_write "zip_source_t *source" +.Sh DESCRIPTION +The function +.Fn zip_source_commit_write +finishes writing data to +.Fa source +and replaces the original with the newly written data. +.Sh RETURN VALUES +Upon successful completion 0 is returned. +Otherwise, \-1 is returned and the error information in +.Ar source +is set to indicate the error. +.Sh SEE ALSO +.Xr libzip 3 , +.Xr zip_source 3 , +.Xr zip_source_begin_write 3 , +.Xr zip_source_rollback_write 3 , +.Xr zip_source_seek_write 3 , +.Xr zip_source_tell_write 3 , +.Xr zip_source_write 3 +.Sh HISTORY +.Fn zip_source_commit_write +was added in libzip 1.0. +.Sh AUTHORS +.An -nosplit +.An Dieter Baron Aq Mt dillo@nih.at +and +.An Thomas Klausner Aq Mt wiz@gatalith.at diff --git a/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_error.3 b/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_error.3 new file mode 100644 index 0000000..291a144 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_error.3 @@ -0,0 +1,60 @@ +.\" zip_source_error.mdoc -- get zip_error for data source +.\" Copyright (C) 2014-2017 Dieter Baron and Thomas Klausner +.\" +.\" This file is part of libzip, a library to manipulate ZIP archives. +.\" The authors can be contacted at +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in +.\" the documentation and/or other materials provided with the +.\" distribution. +.\" 3. The names of the authors may not be used to endorse or promote +.\" products derived from this software without specific prior +.\" written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS +.\" OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +.\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +.\" DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE +.\" GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +.\" IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +.\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN +.\" IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.\" +.Dd December 18, 2017 +.Dt ZIP_SOURCE_ERROR 3 +.Os +.Sh NAME +.Nm zip_source_error +.Nd get zip error for data source +.Sh LIBRARY +libzip (-lzip) +.Sh SYNOPSIS +.In zip.h +.Ft zip_error_t * +.Fn zip_source_error "zip_source_t *source" +.Sh DESCRIPTION +The +.Fn zip_source_error +function returns the zip error for the data source +.Ar source . +.Sh SEE ALSO +.Xr libzip 3 , +.Xr zip_error_code_system 3 , +.Xr zip_error_code_zip 3 +.Sh HISTORY +.Fn zip_source_error +was added in libzip 1.0. +.Sh AUTHORS +.An -nosplit +.An Dieter Baron Aq Mt dillo@nih.at +and +.An Thomas Klausner Aq Mt wiz@gatalith.at diff --git a/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_file.3 b/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_file.3 new file mode 100644 index 0000000..15b7c00 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_file.3 @@ -0,0 +1,147 @@ +.\" zip_source_file.mdoc -- create data source from a file +.\" Copyright (C) 2004-2021 Dieter Baron and Thomas Klausner +.\" +.\" This file is part of libzip, a library to manipulate ZIP archives. +.\" The authors can be contacted at +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in +.\" the documentation and/or other materials provided with the +.\" distribution. +.\" 3. The names of the authors may not be used to endorse or promote +.\" products derived from this software without specific prior +.\" written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS +.\" OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +.\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +.\" DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE +.\" GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +.\" IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +.\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN +.\" IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.\" +.Dd June 30, 2023 +.Dt ZIP_SOURCE_FILE 3 +.Os +.Sh NAME +.Nm zip_source_file , +.Nm zip_source_file_create +.Nd create data source from a file +.Sh LIBRARY +libzip (-lzip) +.Sh SYNOPSIS +.In zip.h +.Ft zip_source_t * +.Fn zip_source_file "zip_t *archive" "const char *fname" "zip_uint64_t start" "zip_int64_t len" +.Ft zip_source_t * +.Fn zip_source_file_create "const char *fname" "zip_uint64_t start" "zip_int64_t len" "zip_error_t *error" +.Sh DESCRIPTION +The functions +.Fn zip_source_file +and +.Fn zip_source_file_create +create a zip source from a file. +They open +.Ar fname +and read +.Ar len +bytes from offset +.Ar start +from it. +.Pp +When passing +.Dv ZIP_LENGTH_TO_END +(or \-1, which is deprecated) as +.Ar len , +.Nm +determines the file size when it is called and uses that as the +expected file size. +If the file size grows between creating and reading from the source, +the additional data is ignored. +If the file shrinks, +.Nm libzip +treats it as an error +.Dv ( ZIP_ER_DATA_LENGTH ) . +.Pp +When passing +.Dv ZIP_LENGTH_UNCHECKED +as +.Ar len , +.Nm +assumes the file's size is unknown. +Reading from the source returns as much data as is there at that time +(usually when calling +.Xr zip_close 3 ) . +.Pp +.Nm libzip +can do various optimizations if the size of a source is known when +it's created, so +.Dv ZIP_LENGTH_TO_END +is preferable. +If you deal with files that are likely to change while you are +processing them, you can use the less efficient +.Dv ZIP_LENGTH_UNCHECKED . +.Pp +If the file supports seek, the source can be used to open a zip archive from. +.Pp +The file is opened and read when the data from the source is used, usually by +.Fn zip_close +or +.Fn zip_open_from_source . +.Sh RETURN VALUES +Upon successful completion, the created source is returned. +Otherwise, +.Dv NULL +is returned and the error code in +.Ar archive +or +.Ar error +is set to indicate the error. +.Sh ERRORS +.Fn zip_source_file +and +.Fn zip_source_file_create +fail if: +.Bl -tag -width Er +.It Bq Er ZIP_ER_INVAL +.Ar fname , +.Ar start , +or +.Ar len +are invalid. +.It Bq Er ZIP_ER_MEMORY +Required memory could not be allocated. +.It Bq Er ZIP_ER_OPEN +Opening +.Ar fname +failed. +.El +.Sh SEE ALSO +.Xr libzip 3 , +.Xr zip_file_add 3 , +.Xr zip_file_replace 3 , +.Xr zip_source 3 +.Sh HISTORY +.Fn zip_source_file +and +.Fn zip_source_file_create +were added in libzip 1.0. +.Pp +.Dv ZIP_LENGTH_TO_END +and +.Dv ZIP_LENGTH_UNCHECKED +were added in libzip 1.10.1. +.Sh AUTHORS +.An -nosplit +.An Dieter Baron Aq Mt dillo@nih.at +and +.An Thomas Klausner Aq Mt wiz@gatalith.at diff --git a/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_filep.3 b/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_filep.3 new file mode 100644 index 0000000..341f2db --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_filep.3 @@ -0,0 +1,112 @@ +.\" zip_source_filep.mdoc -- create data source from a file stream +.\" Copyright (C) 2004-2021 Dieter Baron and Thomas Klausner +.\" +.\" This file is part of libzip, a library to manipulate ZIP archives. +.\" The authors can be contacted at +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in +.\" the documentation and/or other materials provided with the +.\" distribution. +.\" 3. The names of the authors may not be used to endorse or promote +.\" products derived from this software without specific prior +.\" written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS +.\" OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +.\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +.\" DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE +.\" GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +.\" IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +.\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN +.\" IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.\" +.Dd June 30, 2023 +.Dt ZIP_SOURCE_FILEP 3 +.Os +.Sh NAME +.Nm zip_source_filep , +.Nm zip_source_filep_create +.Nd create data source from FILE * +.Sh LIBRARY +libzip (-lzip) +.Sh SYNOPSIS +.In zip.h +.Ft zip_source_t * +.Fn zip_source_filep "zip_t *archive" "FILE *file" "zip_uint64_t start" "zip_int64_t len" +.Ft zip_source_t * +.Fn zip_source_filep_create "FILE *file" "zip_uint64_t start" "zip_int64_t len" "zip_error_t *error" +.Sh DESCRIPTION +The functions +.Fn zip_source_filep +and +.Fn zip_source_filep_create +create a zip source from a file stream. +They read +.Ar len +bytes from offset +.Ar start +from the open file stream +.Ar file . +For a description of the +.Ar len +argument, see +.Xr zip_source_file 3 . +.Pp +If the file stream supports seeking, the source can be used to open +a read-only zip archive from. +.Pp +The file stream is closed when the source is being freed, usually +by +.Xr zip_close 3 . +.Sh RETURN VALUES +Upon successful completion, the created source is returned. +Otherwise, +.Dv NULL +is returned and the error code in +.Ar archive +or +.Ar error +is set to indicate the error. +.Sh ERRORS +.Fn zip_source_filep +fails if: +.Bl -tag -width Er +.It Bq Er ZIP_ER_INVAL +.Ar file , +.Ar start , +or +.Ar len +are invalid. +.It Bq Er ZIP_ER_MEMORY +Required memory could not be allocated. +.El +.Sh SEE ALSO +.Xr libzip 3 , +.Xr zip_file_add 3 , +.Xr zip_file_replace 3 , +.Xr zip_source 3 , +.Xr zip_source_file 3 +.Sh HISTORY +.Fn zip_source_filep +and +.Fn zip_source_filep_create +were added in libzip 1.0. +.Pp +.Dv ZIP_LENGTH_TO_END +and +.Dv ZIP_LENGTH_UNCHECKED +were added in libzip 1.10.1. +.Sh AUTHORS +.An -nosplit +.An Dieter Baron Aq Mt dillo@nih.at +and +.An Thomas Klausner Aq Mt wiz@gatalith.at diff --git a/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_free.3 b/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_free.3 new file mode 100644 index 0000000..3f17792 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_free.3 @@ -0,0 +1,76 @@ +.\" zip_source_free.mdoc -- free zip data source +.\" Copyright (C) 2004-2017 Dieter Baron and Thomas Klausner +.\" +.\" This file is part of libzip, a library to manipulate ZIP archives. +.\" The authors can be contacted at +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in +.\" the documentation and/or other materials provided with the +.\" distribution. +.\" 3. The names of the authors may not be used to endorse or promote +.\" products derived from this software without specific prior +.\" written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS +.\" OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +.\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +.\" DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE +.\" GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +.\" IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +.\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN +.\" IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.\" +.Dd December 18, 2017 +.Dt ZIP_SOURCE_FREE 3 +.Os +.Sh NAME +.Nm zip_source_free +.Nd free zip data source +.Sh LIBRARY +libzip (-lzip) +.Sh SYNOPSIS +.In zip.h +.Ft void +.Fn zip_source_free "zip_source_t *source" +.Sh DESCRIPTION +The function +.Fn zip_source_free +decrements the reference count of +.Ar source +and frees it if the reference count drops to 0. +If +.Ar source +is +.Dv NULL , +it does nothing. +.Pp +.Em NOTE : +This function should not be called on a +.Ar source +after it was used successfully in a +.Xr zip_open_from_source 3 , +.Xr zip_file_add 3 , +or +.Xr zip_file_replace 3 +call. +.Sh SEE ALSO +.Xr libzip 3 , +.Xr zip_source 3 , +.Xr zip_source_keep 3 +.Sh HISTORY +.Fn zip_source_free +was added in libzip 0.6. +.Sh AUTHORS +.An -nosplit +.An Dieter Baron Aq Mt dillo@nih.at +and +.An Thomas Klausner Aq Mt wiz@gatalith.at diff --git a/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_function.3 b/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_function.3 new file mode 100644 index 0000000..cfd595d --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_function.3 @@ -0,0 +1,415 @@ +.\" zip_source_function.mdoc -- create data source from function +.\" Copyright (C) 2004-2022 Dieter Baron and Thomas Klausner +.\" +.\" This file is part of libzip, a library to manipulate ZIP archives. +.\" The authors can be contacted at +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in +.\" the documentation and/or other materials provided with the +.\" distribution. +.\" 3. The names of the authors may not be used to endorse or promote +.\" products derived from this software without specific prior +.\" written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS +.\" OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +.\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +.\" DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE +.\" GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +.\" IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +.\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN +.\" IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.\" +.Dd January 5, 2023 +.Dt ZIP_SOURCE_FUNCTION 3 +.Os +.Sh NAME +.Nm zip_source_function , +.Nm zip_source_function_create +.Nd create data source from function +.Sh LIBRARY +libzip (-lzip) +.Sh SYNOPSIS +.In zip.h +.Ft zip_source_t * +.Fn zip_source_function "zip_t *archive" "zip_source_callback fn" "void *userdata" +.Ft zip_source_t * +.Fn zip_source_function_create "zip_source_callback fn" "void *userdata" "zip_error_t *error" +.Sh DESCRIPTION +The functions +.Fn zip_source_function +and +.Fn zip_source_function_create +create a zip source from the user-provided function +.Ar fn , +which must be of the following type: +.Pp +.Ft typedef zip_int64_t +.Fo \fR(*\fPzip_source_callback\fR)\fP +.Fa "void *userdata" "void *data" "zip_uint64_t len" "zip_source_cmd_t cmd" +.Fc +.Pp +.Ar archive +or +.Ar error +are used for reporting errors and can be +.Dv NULL . +.Pp +When called by the library, the first argument is the +.Ar userdata +argument supplied to the function. +The next two arguments are a buffer +.Ar data +of size +.Ar len +when data is passed in or expected to be returned, or else +.Dv NULL +and 0. +The last argument, +.Ar cmd , +specifies which action the function should perform. +.Pp +Depending on the uses, there are three useful sets of commands to be supported by a +.Fn zip_source_callback : +.Bl -tag -width seekable-read-sourceXX +.It read source +Providing streamed data (for file data added to archives). +Must support +.Dv ZIP_SOURCE_OPEN , +.Dv ZIP_SOURCE_READ , +.Dv ZIP_SOURCE_CLOSE , +.Dv ZIP_SOURCE_STAT , +and +.Dv ZIP_SOURCE_ERROR . +.Pp +If your source uses any allocated memory (including +.Ar userdata ) +it should also implement +.Dv ZIP_SOURCE_FREE +to avoid memory leaks. +.It seekable read source +Same as previous, but from a source allowing reading from arbitrary +offsets (also for read-only zip archive). +Must additionally support +.Dv ZIP_SOURCE_SEEK , +.Dv ZIP_SOURCE_TELL , +and +.Dv ZIP_SOURCE_SUPPORTS . +.It read/write source +Same as previous, but additionally allowing writing (also for writable +zip archives). +Must additionally support +.Dv ZIP_SOURCE_BEGIN_WRITE , +.Dv ZIP_SOURCE_COMMIT_WRITE , +.Dv ZIP_SOURCE_ROLLBACK_WRITE , +.Dv ZIP_SOURCE_SEEK_WRITE , +.Dv ZIP_SOURCE_TELL_WRITE , +and +.Dv ZIP_SOURCE_REMOVE . +.Pp +On top of the above, supporting the pseudo-command +.Dv ZIP_SOURCE_SUPPORTS_REOPEN +allows calling +.Fn zip_source_open +again after calling +.Fn zip_source_close . +.El +.Ss Dv ZIP_SOURCE_ACCEPT_EMPTY +Return 1 if an empty source should be accepted as a valid zip archive. +This is the default if this command is not supported by a source. +File system backed sources should return 0. +.Ss Dv ZIP_SOURCE_BEGIN_WRITE +Prepare the source for writing. +Use this to create any temporary file(s). +.Ss Dv ZIP_SOURCE_BEGIN_WRITE_CLONING +Prepare the source for writing, keeping the first +.Ar len +bytes of the original file. +Only implement this command if it is more efficient than copying the +data, and if it does not destructively overwrite the original file +(you still have to be able to execute +.Dv ZIP_SOURCE_ROLLBACK_WRITE ) . +.Pp +The next write should happen at byte +.Ar offset . +.Ss Dv ZIP_SOURCE_CLOSE +Reading is done. +.Ss Dv ZIP_SOURCE_COMMIT_WRITE +Finish writing to the source. +Replace the original data with the newly written data. +Clean up temporary files or internal buffers. +Subsequently opening and reading from the source should return the +newly written data. +.Ss Dv ZIP_SOURCE_ERROR +Get error information. +.Ar data +points to an array of two ints, which should be filled with the libzip +error code and the corresponding system error code for the error that +occurred. +See +.Xr zip_errors 3 +for details on the error codes. +If the source stores error information in a zip_error_t, use +.Xr zip_error_to_data 3 +and return its return value. +Otherwise, return 2 * sizeof(int). +.Ss Dv ZIP_SOURCE_FREE +Clean up and free all resources, including +.Ar userdata . +The callback function will not be called again. +.Ss Dv ZIP_SOURCE_GET_FILE_ATTRIBUTES +Provide information about various data. +Then the data should be put in the appropriate entry in the passed +.Vt zip_file_attributes_t +argument, and the appropriate +.Dv ZIP_FILE_ATTRIBUTES_* +value must be or'ed into the +.Ar valid +member to denote that the corresponding data has been provided. +A +.Vt zip_file_attributes_t +structure can be initialized using +.Xr zip_file_attributes_init 3 . +.Bl -tag -width 10n +.It ASCII mode +If a file is a plaintext file in ASCII. +Can be used by extraction tools to automatically convert line endings +(part of the internal file attributes). +Member +.Ar ascii , +flag +.Dv ZIP_FILE_ATTRIBUTES_ASCII . +.It General Purpose Bit Flags (limited to Compression Flags) +The general purpose bit flag in the zip in the local and central +directory headers contain information about the compression method. +Member +.Ar general_purpose_bit_flags +and +.Ar general_purpose_bit_mask +to denote which members have been set; +flag +.Dv ZIP_FILE_ATTRIBUTES_GENERAL_PURPOSE_BIT_FLAGS . +.It External File Attributes +The external file attributes (usually operating system-specific). +Member +.Ar external_file_attributes , +flag +.Dv ZIP_FILE_ATTRIBUTES_EXTERNAL_FILE_ATTRIBUTES . +.It Version Needed +A minimum version needed required to unpack this entry (in the usual +"major * 10 + minor" format). +Member +.Ar version_needed , +flag +.Dv ZIP_FILE_ATTRIBUTES_VERSION_NEEDED . +.It Operating System +One of the operating systems as defined by the +.Dv ZIP_OPSYS_* +variables (see +.Pa zip.h ) . +This value affects the interpretation of the external file attributes. +Member +.Ar host_system , +flag +.Dv ZIP_FILE_ATTRIBUTES_HOST_SYSTEM . +.El +.Ss Dv ZIP_SOURCE_OPEN +Prepare for reading. +.Ss Dv ZIP_SOURCE_READ +Read data into the buffer +.Ar data +of size +.Ar len . +Return the number of bytes placed into +.Ar data +on success, and zero for end-of-file. +.Ss Dv ZIP_SOURCE_REMOVE +Remove the underlying file. +This is called if a zip archive is empty when closed. +.Ss Dv ZIP_SOURCE_ROLLBACK_WRITE +Abort writing to the source. +Discard written data. +Clean up temporary files or internal buffers. +Subsequently opening and reading from the source should return the +original data. +.Ss Dv ZIP_SOURCE_SEEK +Specify position to read next byte from, like +.Xr fseek 3 . +Use +.Xr ZIP_SOURCE_GET_ARGS 3 +to decode the arguments into the following struct: +.Bd -literal +struct zip_source_args_seek { + zip_int64_t offset; + int whence; +}; +.Ed +.Pp +If the size of the source's data is known, use +.Xr zip_source_seek_compute_offset 3 +to validate the arguments and compute the new offset. +.Ss Dv ZIP_SOURCE_SEEK_WRITE +Specify position to write next byte to, like +.Xr fseek 3 . +See +.Dv ZIP_SOURCE_SEEK +for details. +.Ss Dv ZIP_SOURCE_STAT +Get meta information for the input data. +.Ar data +points to an allocated +.Vt struct zip_stat , +which should be initialized using +.Xr zip_stat_init 3 +and then filled in. +.Pp +For uncompressed, unencrypted data, all information is optional. +However, fill in as much information as is readily available. +.Pp +If the data is compressed, +.Dv ZIP_STAT_COMP_METHOD , +.Dv ZIP_STAT_SIZE , +and +.Dv ZIP_STAT_CRC +must be filled in. +.Pp +If the data is encrypted, +.Dv ZIP_STAT_ENCRYPTION_METHOD , +.Dv ZIP_STAT_COMP_METHOD , +.Dv ZIP_STAT_SIZE , +and +.Dv ZIP_STAT_CRC +must be filled in. +.Pp +Information only available after the source has been read (e.g., size) +can be omitted in an earlier call. +.Em NOTE : +.Fn zip_source_function +may be called with this argument even after being called with +.Dv ZIP_SOURCE_CLOSE . +.Pp +Return sizeof(struct zip_stat) on success. +.Ss Dv ZIP_SOURCE_SUPPORTS +Return bitmap specifying which commands are supported. +Use +.Xr zip_source_make_command_bitmap 3 . +If this command is not implemented, the source is assumed to be a +read source without seek support. +.Ss Dv ZIP_SOURCE_TELL +Return the current read offset in the source, like +.Xr ftell 3 . +.Ss Dv ZIP_SOURCE_TELL_WRITE +Return the current write offset in the source, like +.Xr ftell 3 . +.Ss Dv ZIP_SOURCE_WRITE +Write data to the source. +Return number of bytes written. +.Ss Dv ZIP_SOURCE_SUPPORTS_REOPEN +This command is never actually invoked, support for it signals the +ability to handle multiple open/read/close cycles. +.Ss Return Values +Commands should return \-1 on error. +.Dv ZIP_SOURCE_ERROR +will be called to retrieve the error code. +On success, commands return 0, unless specified otherwise in the +description above. +.Ss Calling Conventions +The library will always issue +.Dv ZIP_SOURCE_OPEN +before issuing +.Dv ZIP_SOURCE_READ , +.Dv ZIP_SOURCE_SEEK , +or +.Dv ZIP_SOURCE_TELL . +When it no longer wishes to read from this source, it will issue +.Dv ZIP_SOURCE_CLOSE . +If the library wishes to read the data again, it will issue +.Dv ZIP_SOURCE_OPEN +a second time. +If the function is unable to provide the data again, it should +return \-1. +.Pp +.Dv ZIP_SOURCE_BEGIN_WRITE +or +.Dv ZIP_SOURCE_BEGIN_WRITE_CLONING +will be called before +.Dv ZIP_SOURCE_WRITE , +.Dv ZIP_SOURCE_SEEK_WRITE , +or +.Dv ZIP_SOURCE_TELL_WRITE . +When writing is complete, either +.Dv ZIP_SOURCE_COMMIT_WRITE +or +.Dv ZIP_SOURCE_ROLLBACK_WRITE +will be called. +.Pp +.Dv ZIP_SOURCE_ACCEPT_EMPTY , +.Dv ZIP_SOURCE_GET_FILE_ATTRIBUTES , +and +.Dv ZIP_SOURCE_STAT +can be issued at any time. +.Pp +.Dv ZIP_SOURCE_ERROR +will only be issued in response to the function +returning \-1. +.Pp +.Dv ZIP_SOURCE_FREE +will be the last command issued; +if +.Dv ZIP_SOURCE_OPEN +was called and succeeded, +.Dv ZIP_SOURCE_CLOSE +will be called before +.Dv ZIP_SOURCE_FREE , +and similarly for +.Dv ZIP_SOURCE_BEGIN_WRITE +or +.Dv ZIP_SOURCE_BEGIN_WRITE_CLONING +and +.Dv ZIP_SOURCE_COMMIT_WRITE +or +.Dv ZIP_SOURCE_ROLLBACK_WRITE . +.Sh RETURN VALUES +Upon successful completion, the created source is returned. +Otherwise, +.Dv NULL +is returned and the error code in +.Ar archive +or +.Ar error +is set to indicate the error (unless +it is +.Dv NULL ) . +.Sh ERRORS +.Fn zip_source_function +fails if: +.Bl -tag -width Er +.It Bq Er ZIP_ER_MEMORY +Required memory could not be allocated. +.El +.Sh SEE ALSO +.Xr libzip 3 , +.Xr zip_file_add 3 , +.Xr zip_file_attributes_init 3 , +.Xr zip_file_replace 3 , +.Xr zip_source 3 , +.Xr zip_stat_init 3 +.Sh HISTORY +.Fn zip_source_function +and +.Fn zip_source_function_create +were added in libzip 1.0. +.Sh AUTHORS +.An -nosplit +.An Dieter Baron Aq Mt dillo@nih.at +and +.An Thomas Klausner Aq Mt wiz@gatalith.at diff --git a/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_is_deleted.3 b/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_is_deleted.3 new file mode 100644 index 0000000..af1c93b --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_is_deleted.3 @@ -0,0 +1,62 @@ +.\" zip_source_is_deleted.mdoc -- check if zip source is deleted +.\" Copyright (C) 2014-2017 Dieter Baron and Thomas Klausner +.\" +.\" This file is part of libzip, a library to manipulate ZIP archives. +.\" The authors can be contacted at +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in +.\" the documentation and/or other materials provided with the +.\" distribution. +.\" 3. The names of the authors may not be used to endorse or promote +.\" products derived from this software without specific prior +.\" written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS +.\" OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +.\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +.\" DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE +.\" GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +.\" IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +.\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN +.\" IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.\" +.Dd December 18, 2017 +.Dt ZIP_SOURCE_IS_DELETED 3 +.Os +.Sh NAME +.Nm zip_source_is_deleted +.Nd check if zip_source is deleted +.Sh LIBRARY +libzip (-lzip) +.Sh SYNOPSIS +.In zip.h +.Ft int +.Fn zip_source_is_deleted "zip_source_t *source" +.Sh DESCRIPTION +The function +.Fn zip_source_is_deleted +returns whether the zip_source was deleted. +This can for example happen when all entries are removed from a zip archive. +.Sh RETURN VALUES +.Fn zip_source_is_deleted +returns 1 if the zip_source is deleted and 0 otherwise. +.Sh SEE ALSO +.Xr libzip 3 , +.Xr zip_source 3 +.Sh HISTORY +.Fn zip_source_is_deleted +was added in libzip 1.0. +.Sh AUTHORS +.An -nosplit +.An Dieter Baron Aq Mt dillo@nih.at +and +.An Thomas Klausner Aq Mt wiz@gatalith.at diff --git a/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_is_seekable.3 b/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_is_seekable.3 new file mode 100644 index 0000000..c0d781b --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_is_seekable.3 @@ -0,0 +1,65 @@ +.\" zip_source_seek.mdoc -- set read offset in source +.\" Copyright (C) 2023 Dieter Baron and Thomas Klausner +.\" +.\" This file is part of libzip, a library to manipulate ZIP archives. +.\" The authors can be contacted at +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in +.\" the documentation and/or other materials provided with the +.\" distribution. +.\" 3. The names of the authors may not be used to endorse or promote +.\" products derived from this software without specific prior +.\" written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS +.\" OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +.\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +.\" DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE +.\" GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +.\" IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +.\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN +.\" IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.\" +.Dd March 10, 2023 +.Dt ZIP_SOURCE_IS_SEEKABLE 3 +.Os +.Sh NAME +.Nm zip_source_is_seekable +.Nd check if a source supports seeking +.Sh LIBRARY +libzip (-lzip) +.Sh SYNOPSIS +.In zip.h +.Ft int +.Fn zip_source_is_seekable "zip_source_t *source" +.Sh DESCRIPTION +The function +.Fn zip_source_is_seekable +checks if +.Fa source +supports seeking via +.Xr zip_source_seek 3 . +.Sh RETURN VALUES +If the source supports seeking, 1 is returned. +Otherwise, 0 is returned. +.Sh SEE ALSO +.Xr libzip 3 , +.Xr zip_source 3 , +.Xr zip_source_seek 3 +.Sh HISTORY +.Fn zip_source_is_seekable +was added in libzip 1.10.0. +.Sh AUTHORS +.An -nosplit +.An Dieter Baron Aq Mt dillo@nih.at +and +.An Thomas Klausner Aq Mt wiz@gatalith.at diff --git a/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_keep.3 b/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_keep.3 new file mode 100644 index 0000000..ac3bef5 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_keep.3 @@ -0,0 +1,60 @@ +.\" zip_source_keep.mdoc -- increment reference count of zip data source +.\" Copyright (C) 2014-2017 Dieter Baron and Thomas Klausner +.\" +.\" This file is part of libzip, a library to manipulate ZIP archives. +.\" The authors can be contacted at +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in +.\" the documentation and/or other materials provided with the +.\" distribution. +.\" 3. The names of the authors may not be used to endorse or promote +.\" products derived from this software without specific prior +.\" written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS +.\" OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +.\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +.\" DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE +.\" GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +.\" IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +.\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN +.\" IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.\" +.Dd December 18, 2017 +.Dt ZIP_SOURCE_KEEP 3 +.Os +.Sh NAME +.Nm zip_source_keep +.Nd increment reference count of zip data source +.Sh LIBRARY +libzip (-lzip) +.Sh SYNOPSIS +.In zip.h +.Ft void +.Fn zip_source_keep "zip_source_t *source" +.Sh DESCRIPTION +The function +.Fn zip_source_keep +increments the reference count of +.Ar source . +.Sh SEE ALSO +.Xr libzip 3 , +.Xr zip_source 3 , +.Xr zip_source_free 3 +.Sh HISTORY +.Fn zip_source_keep +was added in libzip 1.0. +.Sh AUTHORS +.An -nosplit +.An Dieter Baron Aq Mt dillo@nih.at +and +.An Thomas Klausner Aq Mt wiz@gatalith.at diff --git a/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_layered.3 b/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_layered.3 new file mode 100644 index 0000000..4281dc5 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_layered.3 @@ -0,0 +1,166 @@ +.\" zip_source_layered.mdoc -- create layered source from function +.\" Copyright (C) 2004-2022 Dieter Baron and Thomas Klausner +.\" +.\" This file is part of libzip, a library to manipulate ZIP archives. +.\" The authors can be contacted at +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in +.\" the documentation and/or other materials provided with the +.\" distribution. +.\" 3. The names of the authors may not be used to endorse or promote +.\" products derived from this software without specific prior +.\" written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS +.\" OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +.\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +.\" DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE +.\" GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +.\" IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +.\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN +.\" IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.\" +.Dd January 20, 2023 +.Dt ZIP_SOURCE_LAYERED 3 +.Os +.Sh NAME +.Nm zip_source_layered , +.Nm zip_source_layered_create +.Nd create layered data source from function +.Sh LIBRARY +libzip (-lzip) +.Sh SYNOPSIS +.In zip.h +.Ft zip_source_t * +.Fn zip_source_layered "zip_t *archive" "zip_source_t *source" "zip_source_layered_callback fn" "void *userdata" +.Ft zip_source_t * +.Fn zip_source_layered_create "zip_source_t *source" "zip_source_layered_callback fn" "void *userdata" "zip_error_t *error" +.Sh DESCRIPTION +The functions +.Fn zip_source_layered +and +.Fn zip_source_layered_create +create a layered zip source from the user-provided function +.Ar fn , +which must be of the following type: +.Pp +.Ft typedef zip_int64_t +.Fo \fR(*\zip_source_layered_callback\fR)\fP +.Fa "zip_source_t *source" "void *userdata" "void *data" "zip_uint64_t length" "zip_source_cmd_t cmd" +.Fc +.Pp +.Ar archive +or +.Ar error +are used for reporting errors and can be +.Dv NULL . +.Pp +When called by the library, the first argument is the +.Ar source +of the lower layer, the second argument is the +.Ar userdata +argument supplied to the function. +The next two arguments are a buffer +.Ar data +of size +.Ar length +when data is passed in or expected to be returned, or else +.Dv NULL +and 0. +The last argument, +.Ar cmd , +specifies which action the function should perform. +.Pp +See +.Xr zip_source_function 3 +for a description of the commands. +.Pp +A layered source transforms the data or metadata of the source below in some way. +Layered sources can't support writing and are not sufficient to cleanly add support for additional compression or encryption methods. +This may be revised in a later release of libzip. +.Pp +On success, the layered source takes ownership of +.Ar source . +The caller should not free it. +.Pp +The interaction with the lower layer depends on the command: +.Ss Dv ZIP_SOURCE_ACCEPT_EMPTY +If the layered source supports this command, the lower layer is not called automatically. +Otherwise, the return value of the lower source is used. +.Ss Dv ZIP_SOURCE_CLOSE +The lower layer is closed after the callback returns. +.Ss Dv ZIP_SOURCE_ERROR +The lower layer is not called automatically. +If you need to retrieve error information from the lower layer, use +.Xr zip_error_set_from_source 3 +or +.Xr zip_source_pass_to_lower_layer 3 . +.Ss Dv ZIP_SOURCE_FREE +The lower layer is freed after the callback returns. +.Ss Dv ZIP_SOURCE_GET_FILE_ATTRIBUTES +The attributes of the lower layer are merged with the attributes returned by the callback: information set by the callback wins over the lower layer, with the following exceptions: the higher +.Ar version_needed +is used, and +.Ar general_purpose_bit_flags +are only overwritten if the corresponding bit is set in +.Ar general_purpose_bit_mask . +.Ss Dv ZIP_SOURCE_OPEN +The lower layer is opened before the callback is called. +.Ss Dv ZIP_SOURCE_READ +The lower layer is not called automatically. +.Ss Dv ZIP_SOURCE_SEEK +The lower layer is not called automatically. +.Ss Dv ZIP_SOURCE_STAT +.Ar data +contains the stat information from the lower layer when the callback is called. +.Ss Dv ZIP_SOURCE_SUPPORTS +.Ar data +contains the bitmap of commands supported by the lower layer when the callback is called. +Since layered sources can't support writing, all commands related to writing are stripped from the returned support bitmap. +.Ss Dv ZIP_SOURCE_TELL +The lower layer is not called automatically. +.Sh RETURN VALUES +Upon successful completion, the created source is returned. +Otherwise, +.Dv NULL +is returned and the error code in +.Ar archive +or +.Ar error +is set to indicate the error (unless +it is +.Dv NULL ) . +.Sh ERRORS +.Fn zip_source_layered +fails if: +.Bl -tag -width Er +.It Bq Er ZIP_ER_MEMORY +Required memory could not be allocated. +.El +.Sh SEE ALSO +.Xr libzip 3 , +.Xr zip_file_add 3 , +.Xr zip_file_attributes_init 3 , +.Xr zip_file_replace 3 , +.Xr zip_source 3 , +.Xr zip_source_function 3 , +.Xr zip_source_pass_to_lower_layer 3 +.Sh HISTORY +.Fn zip_source_layered +and +.Fn zip_source_layered_create +were added in libzip 1.10. +.Sh AUTHORS +.An -nosplit +.An Dieter Baron Aq Mt dillo@nih.at +and +.An Thomas Klausner Aq Mt wiz@gatalith.at diff --git a/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_make_command_bitmap.3 b/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_make_command_bitmap.3 new file mode 100644 index 0000000..825f3aa --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_make_command_bitmap.3 @@ -0,0 +1,62 @@ +.\" zip_source_make_command_bitmap -- create bitmap of supported source operations +.\" Copyright (C) 2014-2017 Dieter Baron and Thomas Klausner +.\" +.\" This file is part of libzip, a library to manipulate ZIP archives. +.\" The authors can be contacted at +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in +.\" the documentation and/or other materials provided with the +.\" distribution. +.\" 3. The names of the authors may not be used to endorse or promote +.\" products derived from this software without specific prior +.\" written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS +.\" OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +.\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +.\" DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE +.\" GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +.\" IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +.\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN +.\" IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.\" +.Dd December 18, 2017 +.Dt ZIP_SOURCE_MAKE_COMMAND_BITMAP 3 +.Os +.Sh NAME +.Nm zip_source_make_command_bitmap +.Nd create bitmap of supported source operations +.Sh LIBRARY +libzip (-lzip) +.Sh SYNOPSIS +.In zip.h +.Ft zip_int64_t +.Fn zip_source_make_command_bitmap "zip_source_cmd_t command" "..." +.Sh DESCRIPTION +The +.Fn zip_source_make_command_bitmap +function returns a bitmap of source commands suitable as return value +for +.Dv ZIP_SOURCE_SUPPORTS . +It includes all the commands from the argument list, which must be +terminated by \-1. +.Sh SEE ALSO +.Xr libzip 3 , +.Xr zip_source_function 3 +.Sh HISTORY +.Fn zip_source_make_command_bitmap +was added in libzip 1.0. +.Sh AUTHORS +.An -nosplit +.An Dieter Baron Aq Mt dillo@nih.at +and +.An Thomas Klausner Aq Mt wiz@gatalith.at diff --git a/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_open.3 b/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_open.3 new file mode 100644 index 0000000..827f90a --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_open.3 @@ -0,0 +1,70 @@ +.\" zip_source_open.mdoc -- open zip source for reading +.\" Copyright (C) 2014-2017 Dieter Baron and Thomas Klausner +.\" +.\" This file is part of libzip, a library to manipulate ZIP archives. +.\" The authors can be contacted at +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in +.\" the documentation and/or other materials provided with the +.\" distribution. +.\" 3. The names of the authors may not be used to endorse or promote +.\" products derived from this software without specific prior +.\" written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS +.\" OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +.\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +.\" DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE +.\" GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +.\" IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +.\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN +.\" IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.\" +.Dd December 18, 2017 +.Dt ZIP_SOURCE_OPEN 3 +.Os +.Sh NAME +.Nm zip_source_open +.Nd open zip_source for reading +.Sh LIBRARY +libzip (-lzip) +.Sh SYNOPSIS +.In zip.h +.Ft int +.Fn zip_source_open "zip_source_t *source" +.Sh DESCRIPTION +The function +.Fn zip_source_open +opens +.Fa source +for reading. +.Sh RETURN VALUES +Upon successful completion 0 is returned. +Otherwise, \-1 is returned and the error information in +.Ar source +is set to indicate the error. +.Sh SEE ALSO +.Xr libzip 3 , +.Xr zip_source 3 , +.Xr zip_source_begin_write 3 , +.Xr zip_source_close 3 , +.Xr zip_source_read 3 , +.Xr zip_source_seek 3 , +.Xr zip_source_tell 3 +.Sh HISTORY +.Fn zip_source_open +was added in libzip 1.0. +.Sh AUTHORS +.An -nosplit +.An Dieter Baron Aq Mt dillo@nih.at +and +.An Thomas Klausner Aq Mt wiz@gatalith.at diff --git a/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_read.3 b/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_read.3 new file mode 100644 index 0000000..8f04871 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_read.3 @@ -0,0 +1,80 @@ +.\" zip_source_read.mdoc -- read data from zip source +.\" Copyright (C) 2014-2022 Dieter Baron and Thomas Klausner +.\" +.\" This file is part of libzip, a library to manipulate ZIP archives. +.\" The authors can be contacted at +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in +.\" the documentation and/or other materials provided with the +.\" distribution. +.\" 3. The names of the authors may not be used to endorse or promote +.\" products derived from this software without specific prior +.\" written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS +.\" OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +.\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +.\" DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE +.\" GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +.\" IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +.\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN +.\" IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.\" +.Dd September 28, 2021 +.Dt ZIP_SOURCE_READ 3 +.Os +.Sh NAME +.Nm zip_source_read +.Nd read data from zip source +.Sh LIBRARY +libzip (-lzip) +.Sh SYNOPSIS +.In zip.h +.Ft zip_int64_t +.Fn zip_source_read "zip_source_t *source" "void *data" "zip_uint64_t len" +.Sh DESCRIPTION +The function +.Fn zip_source_read +reads up to +.Ar len +bytes of data from +.Ar source +at the current read offset into the buffer +.Ar data . +.Pp +The zip source +.Ar source +has to be opened for reading by calling +.Xr zip_source_open 3 +first. +.Sh RETURN VALUES +Upon successful completion the number of bytes read is returned. +When +.Fn zip_source_read +is called after reaching the end of the file, 0 is returned. +Otherwise, \-1 is returned and the error information in +.Ar source +is set to indicate the error. +.Sh SEE ALSO +.Xr libzip 3 , +.Xr zip_source 3 , +.Xr zip_source_seek 3 , +.Xr zip_source_tell 3 , +.Xr zip_source_write 3 +.Sh HISTORY +.Fn zip_source_read +was added in libzip 1.0. +.Sh AUTHORS +.An -nosplit +.An Dieter Baron Aq Mt dillo@nih.at +and +.An Thomas Klausner Aq Mt wiz@gatalith.at diff --git a/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_rollback_write.3 b/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_rollback_write.3 new file mode 100644 index 0000000..d749885 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_rollback_write.3 @@ -0,0 +1,68 @@ +.\" zip_source_rollback_write.mdoc -- undo changes to zip source +.\" Copyright (C) 2014-2022 Dieter Baron and Thomas Klausner +.\" +.\" This file is part of libzip, a library to manipulate ZIP archives. +.\" The authors can be contacted at +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in +.\" the documentation and/or other materials provided with the +.\" distribution. +.\" 3. The names of the authors may not be used to endorse or promote +.\" products derived from this software without specific prior +.\" written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS +.\" OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +.\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +.\" DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE +.\" GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +.\" IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +.\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN +.\" IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.\" +.Dd November 3, 2021 +.Dt ZIP_SOURCE_ROLLBACK_WRITE 3 +.Os +.Sh NAME +.Nm zip_source_rollback_write +.Nd undo changes to zip source +.Sh LIBRARY +libzip (-lzip) +.Sh SYNOPSIS +.In zip.h +.Ft void +.Fn zip_source_rollback_write "zip_source_t *source" +.Sh DESCRIPTION +The function +.Fn zip_source_rollback_write +reverts changes written to +.Fa source , +restoring the data before +.Xr zip_source_begin_write 3 +was called. +Usually this removes temporary files or frees buffers. +.Sh SEE ALSO +.Xr libzip 3 , +.Xr zip_source 3 , +.Xr zip_source_begin_write 3 , +.Xr zip_source_commit_write 3 , +.Xr zip_source_seek_write 3 , +.Xr zip_source_tell_write 3 , +.Xr zip_source_write 3 +.Sh HISTORY +.Fn zip_source_rollback_write +was added in libzip 1.0. +.Sh AUTHORS +.An -nosplit +.An Dieter Baron Aq Mt dillo@nih.at +and +.An Thomas Klausner Aq Mt wiz@gatalith.at diff --git a/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_seek.3 b/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_seek.3 new file mode 100644 index 0000000..face17c --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_seek.3 @@ -0,0 +1,82 @@ +.\" zip_source_seek.mdoc -- set read offset in source +.\" Copyright (C) 2014-2017 Dieter Baron and Thomas Klausner +.\" +.\" This file is part of libzip, a library to manipulate ZIP archives. +.\" The authors can be contacted at +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in +.\" the documentation and/or other materials provided with the +.\" distribution. +.\" 3. The names of the authors may not be used to endorse or promote +.\" products derived from this software without specific prior +.\" written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS +.\" OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +.\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +.\" DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE +.\" GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +.\" IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +.\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN +.\" IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.\" +.Dd March 10, 2023 +.Dt ZIP_SOURCE_SEEK 3 +.Os +.Sh NAME +.Nm zip_source_seek +.Nd set read offset in zip source +.Sh LIBRARY +libzip (-lzip) +.Sh SYNOPSIS +.In zip.h +.Ft int +.Fn zip_source_seek "zip_source_t *source" "zip_int64_t offset" "int whence" +.Sh DESCRIPTION +The function +.Fn zip_source_seek +sets the current read offset for +.Fa source . +Just like in +.Xr fseek 3 , +depending on the +.Ar whence +argument, the +.Ar offset +is counted relative from: +.Bl -tag -width SEEK_CURXX -offset indent +.It Dv SEEK_SET +start of file +.It Dv SEEK_CUR +current read offset in file +.It Dv SEEK_END +end of file +.El +.Sh RETURN VALUES +Upon successful completion 0 is returned. +Otherwise, \-1 is returned and the error information in +.Ar source +is set to indicate the error. +.Sh SEE ALSO +.Xr libzip 3 , +.Xr zip_source 3 , +.Xr zip_source_is_seekable 3 , +.Xr zip_source_read 3 , +.Xr zip_source_tell 3 +.Sh HISTORY +.Fn zip_source_seek +was added in libzip 1.0. +.Sh AUTHORS +.An -nosplit +.An Dieter Baron Aq Mt dillo@nih.at +and +.An Thomas Klausner Aq Mt wiz@gatalith.at diff --git a/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_seek_compute_offset.3 b/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_seek_compute_offset.3 new file mode 100644 index 0000000..e849886 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_seek_compute_offset.3 @@ -0,0 +1,81 @@ +.\" zip_source_seek_compute_offset.mdoc - validate arguments and compute offset +.\" Copyright (C) 2014-2017 Dieter Baron and Thomas Klausner +.\" +.\" This file is part of libzip, a library to manipulate ZIP archives. +.\" The authors can be contacted at +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in +.\" the documentation and/or other materials provided with the +.\" distribution. +.\" 3. The names of the authors may not be used to endorse or promote +.\" products derived from this software without specific prior +.\" written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS +.\" OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +.\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +.\" DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE +.\" GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +.\" IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +.\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN +.\" IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.\" +.Dd December 18, 2017 +.Dt ZIP_SOURCE_SEEK_COMPUTE_OFFSET 3 +.Os +.Sh NAME +.Nm zip_source_seek_compute_offset +.Nd validate arguments and compute offset +.Sh LIBRARY +libzip (-lzip) +.Sh SYNOPSIS +.In zip.h +.Ft zip_int64_t +.Fn zip_source_seek_compute_offset "zip_uint64_t offset" "zip_uint64_t length" "void *data" "zip_uint64_t data_length" "zip_error_t *error" +.Sh DESCRIPTION +Use this function to compute the offset for a +.Dv ZIP_SOURCE_SEEK +or +.Dv ZIP_SOURCE_SEEK_WRITE +command. +.Ar data +and +.Ar data_length +are the arguments to the source callback, +.Ar offset +is the current offset and +.Ar length +is the length of the source data or, for +.Dv ZIP_SOURCE_SEEK_WRITE , +the amount of data written. +.Sh RETURN VALUES +On success, it returns the new offset, on error it returns \-1 and +sets +.Ar error . +.Sh ERRORS +.Fn zip_source_seek_compute_offset +fails if: +.Bl -tag -width Er +.It Bq Er ZIP_ER_INVAL +One of the arguments is invalid or the seek would place the offset +outside the data. +.El +.Sh SEE ALSO +.Xr zip_source_function 3 +.Sh HISTORY +.Fn zip_source_seek_compute_offset +was added in libzip 1.0. +.Sh AUTHORS +.An -nosplit +.An Dieter Baron Aq Mt dillo@nih.at +and +.An Thomas Klausner Aq Mt wiz@gatalith.at diff --git a/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_seek_write.3 b/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_seek_write.3 new file mode 100644 index 0000000..832c31e --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_seek_write.3 @@ -0,0 +1,84 @@ +.\" zip_source_seek_write.mdoc -- set write offset in source +.\" Copyright (C) 2014-2017 Dieter Baron and Thomas Klausner +.\" +.\" This file is part of libzip, a library to manipulate ZIP archives. +.\" The authors can be contacted at +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in +.\" the documentation and/or other materials provided with the +.\" distribution. +.\" 3. The names of the authors may not be used to endorse or promote +.\" products derived from this software without specific prior +.\" written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS +.\" OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +.\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +.\" DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE +.\" GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +.\" IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +.\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN +.\" IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.\" +.Dd December 18, 2017 +.Dt ZIP_SOURCE_SEEK_WRITE 3 +.Os +.Sh NAME +.Nm zip_source_seek_write +.Nd set write offset in zip source +.Sh LIBRARY +libzip (-lzip) +.Sh SYNOPSIS +.In zip.h +.Ft int +.Fn zip_source_seek_write "zip_source_t *source" "zip_int64_t offset" "int whence" +.Sh DESCRIPTION +The function +.Fn zip_source_seek_write +sets the current write offset for +.Fa source . +Just like in +.Xr fseek 3 , +depending on the +.Ar whence +argument, the +.Ar offset +is counted relative from: +.Bl -tag -width SEEK_CURXX -offset indent +.It Dv SEEK_SET +start of file +.It Dv SEEK_CUR +current write offset in file +.It Dv SEEK_END +end of file +.El +.Sh RETURN VALUES +Upon successful completion 0 is returned. +Otherwise, \-1 is returned and the error information in +.Ar source +is set to indicate the error. +.Sh SEE ALSO +.Xr libzip 3 , +.Xr zip_source 3 , +.Xr zip_source_begin_write 3 , +.Xr zip_source_commit_write 3 , +.Xr zip_source_rollback_write 3 , +.Xr zip_source_tell_write 3 , +.Xr zip_source_write 3 +.Sh HISTORY +.Fn zip_source_seek_write +was added in libzip 1.0. +.Sh AUTHORS +.An -nosplit +.An Dieter Baron Aq Mt dillo@nih.at +and +.An Thomas Klausner Aq Mt wiz@gatalith.at diff --git a/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_stat.3 b/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_stat.3 new file mode 100644 index 0000000..8b13bef --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_stat.3 @@ -0,0 +1,125 @@ +.\" zip_source_stat.mdoc -- get information about zip source +.\" Copyright (C) 2014-2021 Dieter Baron and Thomas Klausner +.\" +.\" This file is part of libzip, a library to manipulate ZIP archives. +.\" The authors can be contacted at +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in +.\" the documentation and/or other materials provided with the +.\" distribution. +.\" 3. The names of the authors may not be used to endorse or promote +.\" products derived from this software without specific prior +.\" written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS +.\" OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +.\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +.\" DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE +.\" GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +.\" IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +.\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN +.\" IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.\" +.Dd December 18, 2017 +.Dt ZIP_SOURCE_STAT 3 +.Os +.Sh NAME +.Nm zip_source_stat +.Nd get information about zip_source +.Sh LIBRARY +libzip (-lzip) +.Sh SYNOPSIS +.In zip.h +.Ft int +.Fn zip_source_stat "zip_source_t *source" "zip_stat_t *sb" +.Sh DESCRIPTION +The +.Fn zip_source_stat +function obtains information about the zip source +.Ar source +.Pp +The +.Ar sb +argument is a pointer to a +.Ft struct zip_source_stat +(shown below), into which information about the zip source is placed. +.Bd -literal +struct zip_source_stat { + zip_uint64_t valid; /* which fields have valid values */ + const char *name; /* name of the file */ + zip_uint64_t index; /* index within archive */ + zip_uint64_t size; /* size of file (uncompressed) */ + zip_uint64_t comp_size; /* size of file (compressed) */ + time_t mtime; /* modification time */ + zip_uint32_t crc; /* crc of file data */ + zip_uint16_t comp_method; /* compression method used */ + zip_uint16_t encryption_method; /* encryption method used */ + zip_uint32_t flags; /* reserved for future use */ +}; +.Ed +The structure pointed to by +.Ar sb +must be initialized with +.Fn zip_stat_init 3 +before calling +.Fn zip_source_stat . +.Pp +The +.Ar valid +field of the structure specifies which other fields are valid. +Check if the flag defined by the following defines are in +.Ar valid +before accessing the fields: +.Bl -tag -width ZIP_STAT_ENCRYPTION_METHODXX -compact -offset indent +.It Dv ZIP_STAT_NAME +.Ar name +.It Dv ZIP_STAT_INDEX +.Ar index +.It Dv ZIP_STAT_SIZE +.Ar size +.It Dv ZIP_STAT_COMP_SIZE +.Ar comp_size +.It Dv ZIP_STAT_MTIME +.Ar mtime +.It Dv ZIP_STAT_CRC +.Ar crc +.It Dv ZIP_STAT_COMP_METHOD +.Ar comp_method +.It Dv ZIP_STAT_ENCRYPTION_METHOD +.Ar encryption_method +.It Dv ZIP_STAT_FLAGS +.Ar flags +.El +.Pp +.Em NOTE : +Some fields may only be filled out after all data has been read from +the source, for example the +.Ar crc +or +.Ar size +fields. +.Sh RETURN VALUES +Upon successful completion 0 is returned. +Otherwise, \-1 is returned and the error information in +.Ar source +is set to indicate the error. +.Sh SEE ALSO +.Xr libzip 3 , +.Xr zip_source 3 +.Sh HISTORY +.Fn zip_source_stat +was added in libzip 1.0. +.Sh AUTHORS +.An -nosplit +.An Dieter Baron Aq Mt dillo@nih.at +and +.An Thomas Klausner Aq Mt wiz@gatalith.at diff --git a/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_tell.3 b/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_tell.3 new file mode 100644 index 0000000..168220c --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_tell.3 @@ -0,0 +1,74 @@ +.\" zip_source_tell.mdoc -- report current read offset in source +.\" Copyright (C) 2014-2017 Dieter Baron and Thomas Klausner +.\" +.\" This file is part of libzip, a library to manipulate ZIP archives. +.\" The authors can be contacted at +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in +.\" the documentation and/or other materials provided with the +.\" distribution. +.\" 3. The names of the authors may not be used to endorse or promote +.\" products derived from this software without specific prior +.\" written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS +.\" OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +.\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +.\" DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE +.\" GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +.\" IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +.\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN +.\" IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.\" +.Dd December 18, 2017 +.Dt ZIP_SOURCE_TELL 3 +.Os +.Sh NAME +.Nm zip_source_tell +.Nd report current read offset in zip source +.Sh LIBRARY +libzip (-lzip) +.Sh SYNOPSIS +.In zip.h +.Ft zip_int64_t +.Fn zip_source_tell "zip_source_t *source" +.Sh DESCRIPTION +The function +.Fn zip_source_tell +returns the current read offset +for +.Fa source . +The return value can be passed to +.Xr zip_source_seek 3 +with +.Ar whence +set to +.Dv SEEK_SET +to return to the same location in the source. +.Sh RETURN VALUES +Upon successful completion the current read offset is returned. +Otherwise, \-1 is returned and the error information in +.Ar source +is set to indicate the error. +.Sh SEE ALSO +.Xr libzip 3 , +.Xr zip_source 3 , +.Xr zip_source_read 3 , +.Xr zip_source_tell_write 3 +.Sh HISTORY +.Fn zip_source_tell +was added in libzip 1.0. +.Sh AUTHORS +.An -nosplit +.An Dieter Baron Aq Mt dillo@nih.at +and +.An Thomas Klausner Aq Mt wiz@gatalith.at diff --git a/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_tell_write.3 b/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_tell_write.3 new file mode 100644 index 0000000..202478c --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_tell_write.3 @@ -0,0 +1,77 @@ +.\" zip_source_tell_write.mdoc -- report current write offset in source +.\" Copyright (C) 2014-2017 Dieter Baron and Thomas Klausner +.\" +.\" This file is part of libzip, a library to manipulate ZIP archives. +.\" The authors can be contacted at +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in +.\" the documentation and/or other materials provided with the +.\" distribution. +.\" 3. The names of the authors may not be used to endorse or promote +.\" products derived from this software without specific prior +.\" written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS +.\" OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +.\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +.\" DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE +.\" GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +.\" IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +.\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN +.\" IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.\" +.Dd December 18, 2017 +.Dt ZIP_SOURCE_TELL_WRITE 3 +.Os +.Sh NAME +.Nm zip_source_tell_write +.Nd report current write offset in zip source +.Sh LIBRARY +libzip (-lzip) +.Sh SYNOPSIS +.In zip.h +.Ft zip_int64_t +.Fn zip_source_tell_write "zip_source_t *source" +.Sh DESCRIPTION +The function +.Fn zip_source_tell_write +returns the current write offset +for +.Fa source . +The return value can be passed to +.Xr zip_source_seek_write 3 +with +.Ar whence +set to +.Dv SEEK_SET +to return to the same location in the source. +.Sh RETURN VALUES +Upon successful completion the current write offset is returned. +Otherwise, \-1 is returned and the error information in +.Ar source +is set to indicate the error. +.Sh SEE ALSO +.Xr libzip 3 , +.Xr zip_source 3 , +.Xr zip_source_begin_write 3 , +.Xr zip_source_commit_write 3 , +.Xr zip_source_rollback_write 3 , +.Xr zip_source_tell 3 , +.Xr zip_source_write 3 +.Sh HISTORY +.Fn zip_source_tell_write +was added in libzip 1.0. +.Sh AUTHORS +.An -nosplit +.An Dieter Baron Aq Mt dillo@nih.at +and +.An Thomas Klausner Aq Mt wiz@gatalith.at diff --git a/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_win32a.3 b/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_win32a.3 new file mode 100644 index 0000000..5bdc045 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_win32a.3 @@ -0,0 +1,121 @@ +.\" zip_source_win32a.mdoc -- create data source using a win32 ANSI name +.\" Copyright (C) 2015-2021 Dieter Baron and Thomas Klausner +.\" +.\" This file is part of libzip, a library to manipulate ZIP archives. +.\" The authors can be contacted at +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in +.\" the documentation and/or other materials provided with the +.\" distribution. +.\" 3. The names of the authors may not be used to endorse or promote +.\" products derived from this software without specific prior +.\" written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS +.\" OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +.\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +.\" DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE +.\" GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +.\" IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +.\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN +.\" IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.\" +.Dd June 30, 2023 +.Dt ZIP_SOURCE_WIN32A 3 +.Os +.Sh NAME +.Nm zip_source_win32a , +.Nm zip_source_win32a_create +.Nd create data source from a Windows ANSI file name +.Sh LIBRARY +libzip (-lzip) +.Sh SYNOPSIS +.In zip.h +.Ft zip_source_t * +.Fn zip_source_win32a "zip_t *archive" "const char *fname" "zip_uint64_t start" "zip_int64_t len" +.Ft zip_source_t * +.Fn zip_source_win32a_create "const char *fname" "zip_uint64_t start" "zip_int64_t len" "zip_error_t *error" +.Sh DESCRIPTION +The functions +.Fn zip_source_win32a +and +.Fn zip_source_win32a_create +create a zip source on Windows using a Windows ANSI name. +They open +.Ar fname +and read +.Ar len +bytes from offset +.Ar start +from it. +For a description of the +.Ar len +argument, see +.Xr zip_source_file 3 . +.Pp +If the file supports seek, the source can be used to open a zip archive from. +.Pp +The file is opened and read when the data from the source is used, usually by +.Fn zip_close +or +.Fn zip_open_from_source . +.Sh RETURN VALUES +Upon successful completion, the created source is returned. +Otherwise, +.Dv NULL +is returned and the error code in +.Ar archive +or +.Ar error +is set to indicate the error. +.Sh ERRORS +.Fn zip_source_win32a +and +.Fn zip_source_win32a_create +fail if: +.Bl -tag -width Er +.It Bq Er ZIP_ER_INVAL +.Ar fname , +.Ar start , +or +.Ar len +are invalid. +.It Bq Er ZIP_ER_MEMORY +Required memory could not be allocated. +.It Bq Er ZIP_ER_OPEN +Opening +.Ar fname +failed. +.El +.Sh SEE ALSO +.Xr libzip 3 , +.Xr zip_file_add 3 , +.Xr zip_file_replace 3 , +.Xr zip_source 3 , +.Xr zip_source_file 3 , +.Xr zip_source_win32handle 3 , +.Xr zip_source_win32w 3 +.Sh HISTORY +.Fn zip_source_win32a +and +.Fn zip_source_win32a_create +were added in libzip 1.0. +.Pp +.Dv ZIP_LENGTH_TO_END +and +.Dv ZIP_LENGTH_UNCHECKED +were added in libzip 1.10.1. +.Sh AUTHORS +.An -nosplit +.An Dieter Baron Aq Mt dillo@nih.at +and +.An Thomas Klausner Aq Mt wiz@gatalith.at diff --git a/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_win32handle.3 b/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_win32handle.3 new file mode 100644 index 0000000..c0c47b6 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_win32handle.3 @@ -0,0 +1,110 @@ +.\" zip_source_handle.mdoc -- create data source from a Windows file handle +.\" Copyright (C) 2015-2021 Dieter Baron and Thomas Klausner +.\" +.\" This file is part of libzip, a library to manipulate ZIP archives. +.\" The authors can be contacted at +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in +.\" the documentation and/or other materials provided with the +.\" distribution. +.\" 3. The names of the authors may not be used to endorse or promote +.\" products derived from this software without specific prior +.\" written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS +.\" OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +.\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +.\" DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE +.\" GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +.\" IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +.\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN +.\" IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.\" +.Dd May 14, 2024 +.Dt ZIP_SOURCE_WIN32HANDLE 3 +.Os +.Sh NAME +.Nm zip_source_win32handle , +.Nm zip_source_win32handle_create +.Nd create data source from a Windows file handle +.Sh LIBRARY +libzip (-lzip) +.Sh SYNOPSIS +.In zip.h +.Ft zip_source_t * +.Fn zip_source_win32handle "zip_t *archive" "HANDLE h" "zip_uint64_t start" "zip_int64_t len" +.Ft zip_source_t * +.Fn zip_source_win32handle_create "HANDLE h" "zip_uint64_t start" "zip_int64_t len" "zip_error_t *error" +.Sh DESCRIPTION +The functions +.Fn zip_source_win32handle +and +.Fn zip_source_win32handle_create +create a zip source from a Windows file handle. +They read +.Ar len +bytes from offset +.Ar start +from it. +If +.Ar len +is 0 or \-1, the whole file (starting from +.Ar start ) +is used. +.Pp +If the file supports seek, the source can be used to open a zip archive from. +.Pp +The file is opened and read when the data from the source is used, usually by +.Fn zip_close +or +.Fn zip_open_from_source . +.Sh RETURN VALUES +Upon successful completion, the created source is returned. +Otherwise, +.Dv NULL +is returned and the error code in +.Ar archive +or +.Ar error +is set to indicate the error. +.Sh ERRORS +.Fn zip_source_w32handle +and +.Fn zip_source_w32handle_create +fail if: +.Bl -tag -width Er +.It Bq Er ZIP_ER_INVAL +.Ar h , +.Ar start , +or +.Ar len +are invalid. +.It Bq Er ZIP_ER_MEMORY +Required memory could not be allocated. +.El +.Sh SEE ALSO +.Xr libzip 3 , +.Xr zip_file_add 3 , +.Xr zip_file_replace 3 , +.Xr zip_source 3 , +.Xr zip_source_win32a 3 , +.Xr zip_source_win32w 3 +.Sh HISTORY +.Fn zip_source_win32handle +and +.Fn zip_source_win32handle_create +were added in libzip 1.0. +.Sh AUTHORS +.An -nosplit +.An Dieter Baron Aq Mt dillo@nih.at +and +.An Thomas Klausner Aq Mt wiz@gatalith.at diff --git a/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_win32w.3 b/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_win32w.3 new file mode 100644 index 0000000..6f33fd7 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_win32w.3 @@ -0,0 +1,119 @@ +.\" zip_source_win32w.mdoc -- create data source using a win32 Unicode name +.\" Copyright (C) 2015-2021 Dieter Baron and Thomas Klausner +.\" +.\" This file is part of libzip, a library to manipulate ZIP archives. +.\" The authors can be contacted at +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in +.\" the documentation and/or other materials provided with the +.\" distribution. +.\" 3. The names of the authors may not be used to endorse or promote +.\" products derived from this software without specific prior +.\" written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS +.\" OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +.\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +.\" DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE +.\" GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +.\" IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +.\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN +.\" IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.\" +.Dd June 30, 2023 +.Dt ZIP_SOURCE_WIN32W 3 +.Os +.Sh NAME +.Nm zip_source_win32w , +.Nm zip_source_win32w_create +.Nd create data source from a Windows Unicode file name +.Sh LIBRARY +libzip (-lzip) +.Sh SYNOPSIS +.In zip.h +.Ft zip_source_t * +.Fn zip_source_win32w "zip_t *archive" "const wchar_t *fname" "zip_uint64_t start" "zip_int64_t len" +.Ft zip_source_t * +.Fn zip_source_win32w_create "const wchar_t *fname" "zip_uint64_t start" "zip_int64_t len" "zip_error_t *error" +.Sh DESCRIPTION +The functions +.Fn zip_source_win32w +and +.Fn zip_source_win32w_create +create a zip source on Windows using a Windows Unicode name. +They open +.Ar fname +and read +.Ar len +bytes from offset +.Ar start +from it. +For a description of the +.Ar len +argument, see +.Xr zip_source_file 3 . +.Pp +If the file supports seek, the source can be used to open a zip archive from. +.Pp +The file is opened and read when the data from the source is used, usually by +.Fn zip_close +or +.Fn zip_open_from_source . +.Sh RETURN VALUES +Upon successful completion, the created source is returned. +Otherwise, +.Dv NULL +is returned and the error code in +.Ar archive +or +.Ar error +is set to indicate the error. +.Sh ERRORS +.Fn zip_source_win32w +and +.Fn zip_source_win32w_create +fail if: +.Bl -tag -width Er +.It Bq Er ZIP_ER_INVAL +.Ar fname , +.Ar start , +or +.Ar len +are invalid. +.It Bq Er ZIP_ER_MEMORY +Required memory could not be allocated. +.It Bq Er ZIP_ER_OPEN +Opening +.Ar fname +failed. +.El +.Sh SEE ALSO +.Xr libzip 3 , +.Xr zip_file_add 3 , +.Xr zip_file_replace 3 , +.Xr zip_source 3 , +.Xr zip_source_file 3 , +.Xr zip_source_win32a 3 , +.Xr zip_source_win32handle 3 +.Sh HISTORY +.Fn zip_source_win32w +was added in libzip 1.0. +.Pp +.Dv ZIP_LENGTH_TO_END +and +.Dv ZIP_LENGTH_UNCHECKED +were added in libzip 1.10.1. +.Sh AUTHORS +.An -nosplit +.An Dieter Baron Aq Mt dillo@nih.at +and +.An Thomas Klausner Aq Mt wiz@gatalith.at diff --git a/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_window_create.3 b/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_window_create.3 new file mode 100644 index 0000000..4774491 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_window_create.3 @@ -0,0 +1,98 @@ +.\" zip_source_window_create.mdoc -- create zip data source overlay +.\" Copyright (C) 2021 Dieter Baron and Thomas Klausner +.\" +.\" This file is part of libzip, a library to manipulate ZIP archives. +.\" The authors can be contacted at +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in +.\" the documentation and/or other materials provided with the +.\" distribution. +.\" 3. The names of the authors may not be used to endorse or promote +.\" products derived from this software without specific prior +.\" written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS +.\" OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +.\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +.\" DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE +.\" GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +.\" IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +.\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN +.\" IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.\" +.Dd April 29, 2021 +.Dt ZIP_SOURCE_WINDOW_CREATE 3 +.Os +.Sh NAME +.Nm zip_source_window_create +.Nd create zip data source overlay +.Sh LIBRARY +libzip (-lzip) +.Sh SYNOPSIS +.In zip.h +.Ft zip_source_t * +.Fn zip_source_window_create "zip_source_t *source" "zip_uint64_t start" "zip_int64_t len" "zip_error_t *error" +.Sh DESCRIPTION +The +.Fn zip_source_window_create +function create a zip source from an underlying zip source, +restricting access to a particular window starting at byte +.Ar start +and having size +.Ar len . +If +.Ar len +is \-1, the window spans to the end of the underlying source. +.Pp +.Fn zip_source_window +and +.Fn zip_source_window_create +don't take ownership of +.Ar source . +The caller is responsible for freeing it. +(This is different to other layered sources.) +.Sh RETURN VALUES +Upon successful completion, the created source is returned. +Otherwise, +.Dv NULL +is returned and the error code in +.Ar error +is set to indicate the error. +.Sh ERRORS +.Fn zip_source_window_create +fails if: +.Bl -tag -width Er +.It Bq Er ZIP_ER_INVAL +.Ar src +is +.Dv NULL ; +there is an integer overflow adding +.Ar start +and +.Ar len ; +or +.Ar len +is less than \-1. +.It Bq Er ZIP_ER_MEMORY +Required memory could not be allocated. +.El +.Sh SEE ALSO +.Xr libzip 3 , +.Xr zip_source 3 +.Sh HISTORY +.Fn zip_source_window_create +was added in libzip 1.8.0. +.Sh AUTHORS +.An -nosplit +.An Dieter Baron Aq Mt dillo@nih.at +and +.An Thomas Klausner Aq Mt wiz@gatalith.at diff --git a/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_write.3 b/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_write.3 new file mode 100644 index 0000000..9b47082 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_write.3 @@ -0,0 +1,80 @@ +.\" zip_source_write.mdoc -- write data to zip source +.\" Copyright (C) 2014-2017 Dieter Baron and Thomas Klausner +.\" +.\" This file is part of libzip, a library to manipulate ZIP archives. +.\" The authors can be contacted at +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in +.\" the documentation and/or other materials provided with the +.\" distribution. +.\" 3. The names of the authors may not be used to endorse or promote +.\" products derived from this software without specific prior +.\" written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS +.\" OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +.\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +.\" DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE +.\" GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +.\" IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +.\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN +.\" IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.\" +.Dd December 18, 2017 +.Dt ZIP_SOURCE_WRITE 3 +.Os +.Sh NAME +.Nm zip_source_write +.Nd write data to zip source +.Sh LIBRARY +libzip (-lzip) +.Sh SYNOPSIS +.In zip.h +.Ft zip_int64_t +.Fn zip_source_write "zip_source_t *source" "const void *data" "zip_uint64_t len" +.Sh DESCRIPTION +The function +.Fn zip_source_write +writes +.Ar len +bytes from the buffer +.Ar data +to the zip source +.Ar source +at the current write offset. +.Pp +The zip source +.Ar source +has to be prepared for writing by calling +.Xr zip_source_begin_write 3 +first. +.Sh RETURN VALUES +Upon successful completion the number of bytes written is returned. +Otherwise, \-1 is returned and the error information in +.Ar source +is set to indicate the error. +.Sh SEE ALSO +.Xr libzip 3 , +.Xr zip_source 3 , +.Xr zip_source_begin_write 3 , +.Xr zip_source_commit_write 3 , +.Xr zip_source_rollback_write 3 , +.Xr zip_source_seek_write 3 , +.Xr zip_source_tell_write 3 +.Sh HISTORY +.Fn zip_source_write +was added in libzip 1.0. +.Sh AUTHORS +.An -nosplit +.An Dieter Baron Aq Mt dillo@nih.at +and +.An Thomas Klausner Aq Mt wiz@gatalith.at diff --git a/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_zip.3 b/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_zip.3 new file mode 100644 index 0000000..acc96bf --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_zip.3 @@ -0,0 +1,144 @@ +.\" zip_source_zip.mdoc -- create data source from zip file +.\" Copyright (C) 2004-2021 Dieter Baron and Thomas Klausner +.\" +.\" This file is part of libzip, a library to manipulate ZIP archives. +.\" The authors can be contacted at +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in +.\" the documentation and/or other materials provided with the +.\" distribution. +.\" 3. The names of the authors may not be used to endorse or promote +.\" products derived from this software without specific prior +.\" written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS +.\" OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +.\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +.\" DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE +.\" GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +.\" IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +.\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN +.\" IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.\" +.Dd January 23, 2023 +.Dt ZIP_SOURCE_ZIP 3 +.Os +.Sh NAME +.Nm zip_source_zip , +.Nm zip_source_zip_create +.Nd create data source from zip file (obsolete interface) +.Sh LIBRARY +libzip (-lzip) +.Sh SYNOPSIS +.In zip.h +.Ft zip_source_t * +.Fn zip_source_zip "zip_t *archive" "zip_t *srcarchive" "zip_uint64_t srcidx" "zip_flags_t flags" "zip_uint64_t start" "zip_int64_t len" +.Ft zip_source_t * +.Fn zip_source_zip_create "zip_t *srcarchive" "zip_uint64_t srcidx" "zip_flags_t flags" "zip_uint64_t start" "zip_int64_t len" "zip_error_t *error" +.Sh DESCRIPTION +The functions +.Fn zip_source_zip +and +.Fn zip_source_zip_create +are the obsolete versions of +.Xr zip_source_zip_file 3 +or +.Xr zip_source_zip_file_create 3 +respectively. +If you want to get the compressed data of the complete file, use +.Dl zip_source_zip_file(za, source_archive, source_index, ZIP_FL_COMPRESSED, 0, -1, NULL) +.Pp +The functions +.Fn zip_source_zip +and +.Fn zip_source_zip_create +create a zip source from a file in a zip archive. +The +.Ar srcarchive +argument is the (open) zip archive containing the source zip file +at index +.Ar srcidx . +.Ar len +bytes from offset +.Ar start +will be used in the zip_source. +If +.Ar len +is 0 or \-1, the rest of the file, starting from +.Ar start , +is used. +If +.Ar start +is zero and +.Ar len +is \-1, the whole file will be copied without decompressing it. +.Pp +Supported flags are: +.Bl -tag -width Dv +.It Dv ZIP_FL_UNCHANGED +Try to get the original data without any changes that may have been +made to +.Ar srcarchive +after opening it. +.El +.Sh RETURN VALUES +Upon successful completion, the created source is returned. +Otherwise, +.Dv NULL +is returned and the error code in +.Ar archive +or +.Ar error +is set to indicate the error. +.Sh ERRORS +.Fn zip_source_zip +and +.Fn zip_source_zip_create +fail if: +.Bl -tag -width Er +.It Bq Er ZIP_ER_CHANGED +Unchanged data was requested, but it is not available. +.It Bq Er ZIP_ER_INVAL +.Ar srcarchive , +.Ar srcidx , +.Ar start , +or +.Ar len +are invalid. +.It Bq Er ZIP_ER_MEMORY +Required memory could not be allocated. +.El +Additionally, it can return all error codes from +.Fn zip_stat_index +and +.Fn zip_fopen_index . +.Sh SEE ALSO +.Xr libzip 3 , +.Xr zip_file_add 3 , +.Xr zip_file_replace 3 , +.Xr zip_source 3 +.Sh HISTORY +.Fn zip_source_zip +was added in libzip 1.0. +.Fn zip_source_zip_create +was added in libzip 1.8.0. +Both were deprecated in libzip 1.10.0. +Use +.Fn zip_source_zip_file +or +.Fn zip_source_zip_file_create +instead. +.Sh AUTHORS +.An -nosplit +.An Dieter Baron Aq Mt dillo@nih.at +and +.An Thomas Klausner Aq Mt wiz@gatalith.at diff --git a/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_zip_file.3 b/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_zip_file.3 new file mode 100644 index 0000000..fee9d49 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/man/zip_source_zip_file.3 @@ -0,0 +1,144 @@ +.\" zip_source_zip_file.mdoc -- create data source from zip file +.\" Copyright (C) 2004-2021 Dieter Baron and Thomas Klausner +.\" +.\" This file is part of libzip, a library to manipulate ZIP archives. +.\" The authors can be contacted at +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in +.\" the documentation and/or other materials provided with the +.\" distribution. +.\" 3. The names of the authors may not be used to endorse or promote +.\" products derived from this software without specific prior +.\" written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS +.\" OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +.\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +.\" DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE +.\" GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +.\" IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +.\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN +.\" IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.\" +.Dd March 10, 2023 +.Dt ZIP_SOURCE_ZIP_FILE 3 +.Os +.Sh NAME +.Nm zip_source_zip_file , +.Nm zip_source_zip_file_create +.Nd create data source from zip file +.Sh LIBRARY +libzip (-lzip) +.Sh SYNOPSIS +.In zip.h +.Ft zip_source_t * +.Fn zip_source_zip_file "zip_t *archive" "zip_t *srcarchive" "zip_uint64_t srcidx" "zip_flags_t flags" "zip_uint64_t start" "zip_int64_t length" "const char *password" +.Ft zip_source_t * +.Fn zip_source_zip_file_create "zip_t *srcarchive" "zip_uint64_t srcidx" "zip_flags_t flags" "zip_uint64_t start" "zip_int64_t length" "const char *password" "zip_error_t *error" +.Sh DESCRIPTION +The functions +.Fn zip_source_zip_file +and +.Fn zip_source_zip_file_create +create a zip source from a file in a zip archive. +The +.Ar srcarchive +argument is the (open) zip archive containing the source zip file +at index +.Ar srcidx . +.Ar length +bytes from offset +.Ar start +will be used in the zip_source. +If +.Ar length +is \-1, the rest of the file, starting from +.Ar start , +is used. +.Pp +If you intend to copy a file from one archive to another, using the flag +.Dv ZIP_FL_COMPRESSED +is more efficient, as it avoids recompressing the file data. +.Pp +Supported flags are: +.Bl -tag -width 20n +.It Dv ZIP_FL_COMPRESSED +Get the compressed data. +This is only supported if the complete file data is requested +.Ar ( start +== 0 and +.Ar length +== \-1). +This is not supported for changed data. +Default is uncompressed. +.It Dv ZIP_FL_ENCRYPTED +Get the encrypted data. +(This flag implies +.Dv ZIP_FL_COMPRESSED . ) +This is only supported if the complete file data is requested +.Ar ( start +== 0 and +.Ar length +== \-1). +Default is decrypted. +.It Dv ZIP_FL_UNCHANGED +Try to get the original data without any changes that may have been +made to +.Ar srcarchive +after opening it. +.El +.Sh RETURN VALUES +Upon successful completion, the created source is returned. +Otherwise, +.Dv NULL +is returned and the error code in +.Ar archive +or +.Ar error +is set to indicate the error. +.Sh ERRORS +.Fn zip_source_zip_file +and +.Fn zip_source_zip_file_create +fail if: +.Bl -tag -width Er +.It Bq Er ZIP_ER_CHANGED +Unchanged data was requested, but it is not available. +.It Bq Er ZIP_ER_INVAL +.Ar srcarchive , +.Ar srcidx , +.Ar start , +or +.Ar length +are invalid. +.It Bq Er ZIP_ER_MEMORY +Required memory could not be allocated. +.El +Additionally, it can return all error codes from +.Fn zip_stat_index +and +.Fn zip_fopen_index . +.Sh SEE ALSO +.Xr libzip 3 , +.Xr zip_file_add 3 , +.Xr zip_file_replace 3 , +.Xr zip_source 3 +.Sh HISTORY +.Fn zip_source_zip_file +and +.Fn zip_source_zip_file_create +were added in libzip 1.10.0. +.Sh AUTHORS +.An -nosplit +.An Dieter Baron Aq Mt dillo@nih.at +and +.An Thomas Klausner Aq Mt wiz@gatalith.at diff --git a/thirdparty/libzip-1.11.3/build-emcmake/man/zip_stat.3 b/thirdparty/libzip-1.11.3/build-emcmake/man/zip_stat.3 new file mode 100644 index 0000000..3ee9bbe --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/man/zip_stat.3 @@ -0,0 +1,179 @@ +.\" zip_stat.mdoc -- get information about file +.\" Copyright (C) 2003-2017 Dieter Baron and Thomas Klausner +.\" +.\" This file is part of libzip, a library to manipulate ZIP archives. +.\" The authors can be contacted at +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in +.\" the documentation and/or other materials provided with the +.\" distribution. +.\" 3. The names of the authors may not be used to endorse or promote +.\" products derived from this software without specific prior +.\" written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS +.\" OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +.\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +.\" DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE +.\" GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +.\" IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +.\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN +.\" IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.\" +.Dd December 18, 2017 +.Dt ZIP_STAT 3 +.Os +.Sh NAME +.Nm zip_stat , +.Nm zip_stat_index +.Nd get information about file +.Sh LIBRARY +libzip (-lzip) +.Sh SYNOPSIS +.In zip.h +.Ft int +.Fn zip_stat "zip_t *archive" "const char *fname" "zip_flags_t flags" "zip_stat_t *sb" +.Ft int +.Fn zip_stat_index "zip_t *archive" "zip_uint64_t index" "zip_flags_t flags" "zip_stat_t *sb" +.Sh DESCRIPTION +The +.Fn zip_stat +function obtains information about the file named +.Ar fname +in +.Ar archive . +The +.Ar flags +argument specifies how the name lookup should be done. +Its values are described in +.Xr zip_name_locate 3 . +Also, +.Dv ZIP_FL_UNCHANGED +may be +.Em or Ns No 'ed +to it to request information about the original file in the archive, +ignoring any changes made. +.Pp +The +.Fn zip_stat_index +function obtains information about the file at position +.Ar index . +.Pp +The +.Ar sb +argument is a pointer to a +.Ft struct zip_stat +(shown below), into which information about the file is placed. +.Bd -literal +struct zip_stat { + zip_uint64_t valid; /* which fields have valid values */ + const char *name; /* name of the file */ + zip_uint64_t index; /* index within archive */ + zip_uint64_t size; /* size of file (uncompressed) */ + zip_uint64_t comp_size; /* size of file (compressed) */ + time_t mtime; /* modification time */ + zip_uint32_t crc; /* crc of file data */ + zip_uint16_t comp_method; /* compression method used */ + zip_uint16_t encryption_method; /* encryption method used */ + zip_uint32_t flags; /* reserved for future use */ +}; +.Ed +The structure pointed to by +.Ar sb +must be allocated before calling +.Fn zip_stat +or +.Fn zip_stat_index . +.Pp +The +.Ar valid +field of the structure specifies which other fields are valid. +Check if the flag defined by the following defines are in +.Ar valid +before accessing the fields: +.Bl -tag -width ZIP_STAT_ENCRYPTION_METHODXX -compact -offset indent +.It Dv ZIP_STAT_NAME +.Ar name +.It Dv ZIP_STAT_INDEX +.Ar index +.It Dv ZIP_STAT_SIZE +.Ar size +.It Dv ZIP_STAT_COMP_SIZE +.Ar comp_size +.It Dv ZIP_STAT_MTIME +.Ar mtime +.It Dv ZIP_STAT_CRC +.Ar crc +.It Dv ZIP_STAT_COMP_METHOD +.Ar comp_method +.It Dv ZIP_STAT_ENCRYPTION_METHOD +.Ar encryption_method +.It Dv ZIP_STAT_FLAGS +.Ar flags +.El +.Sh RETURN VALUES +Upon successful completion 0 is returned. +Otherwise, \-1 is returned and the error information in +.Ar archive +is set to indicate the error. +.Sh ERRORS +The function +.Fn zip_stat +can fail for any of the errors specified for the routine +.Xr zip_name_locate 3 . +.Pp +The function +.Fn zip_stat_index +fails and sets the error information to +.Er ZIP_ER_INVAL +if +.Ar index +is invalid. +If +.Dv ZIP_FL_UNCHANGED +is not set and no information can be obtained from the source +callback, the error information is set to +.Er ZIP_ER_CHANGED . +.Sh SEE ALSO +.Xr libzip 3 , +.Xr zip_get_num_entries 3 , +.Xr zip_name_locate 3 , +.Xr zip_stat_init 3 +.Sh HISTORY +.Fn zip_stat +was added in libzip 0.6. +In libzip 0.11 the type of +.Ar flags +was changed from +.Vt int +to +.Vt zip_flags_t . +.Pp +.Fn zip_stat_index +was added in libzip 0.6. +In libzip 0.10 the type of +.Ar index +was changed from +.Vt int +to +.Vt zip_uint64_t . +In libzip 0.11 the type of +.Ar flags +was changed from +.Vt int +to +.Vt zip_flags_t . +.Sh AUTHORS +.An -nosplit +.An Dieter Baron Aq Mt dillo@nih.at +and +.An Thomas Klausner Aq Mt wiz@gatalith.at diff --git a/thirdparty/libzip-1.11.3/build-emcmake/man/zip_stat_init.3 b/thirdparty/libzip-1.11.3/build-emcmake/man/zip_stat_init.3 new file mode 100644 index 0000000..afa38ec --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/man/zip_stat_init.3 @@ -0,0 +1,76 @@ +.\" zip_stat_init.mdoc -- init zip_stat structure +.\" Copyright (C) 2006-2017 Dieter Baron and Thomas Klausner +.\" +.\" This file is part of libzip, a library to manipulate ZIP archives. +.\" The authors can be contacted at +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in +.\" the documentation and/or other materials provided with the +.\" distribution. +.\" 3. The names of the authors may not be used to endorse or promote +.\" products derived from this software without specific prior +.\" written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS +.\" OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +.\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +.\" DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE +.\" GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +.\" IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +.\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN +.\" IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.\" +.Dd December 18, 2017 +.Dt ZIP_STAT_INIT 3 +.Os +.Sh NAME +.Nm zip_stat_init +.Nd initialize zip_stat structure +.Sh LIBRARY +libzip (-lzip) +.Sh SYNOPSIS +.In zip.h +.Ft void +.Fn zip_stat_init "zip_stat_t *sb" +.Sh DESCRIPTION +The +.Fn zip_stat_init +function initializes the members of a struct zip_stat. +The current members are described in +.Xr zip_stat 3 , +but this function should be used to initialize it to +make sure none are missed. +The structure pointed to by +.Ar sb +must be allocated before calling +.Fn zip_stat_init . +.Pp +This function should be used by functions provided to +.Xr zip_source_function 3 +when returning +.Dv ZIP_SOURCE_STAT +information to make sure all fields are initialized. +.Sh RETURN VALUES +If +.Ar sb +is valid, the function is always successful. +.Sh SEE ALSO +.Xr libzip 3 , +.Xr zip_stat 3 +.Sh HISTORY +.Fn zip_stat_init +was added in libzip 0.8. +.Sh AUTHORS +.An -nosplit +.An Dieter Baron Aq Mt dillo@nih.at +and +.An Thomas Klausner Aq Mt wiz@gatalith.at diff --git a/thirdparty/libzip-1.11.3/build-emcmake/man/zip_unchange.3 b/thirdparty/libzip-1.11.3/build-emcmake/man/zip_unchange.3 new file mode 100644 index 0000000..4867243 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/man/zip_unchange.3 @@ -0,0 +1,81 @@ +.\" zip_unchange.mdoc -- undo changes to file in zip archive +.\" Copyright (C) 2003-2017 Dieter Baron and Thomas Klausner +.\" +.\" This file is part of libzip, a library to manipulate ZIP archives. +.\" The authors can be contacted at +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in +.\" the documentation and/or other materials provided with the +.\" distribution. +.\" 3. The names of the authors may not be used to endorse or promote +.\" products derived from this software without specific prior +.\" written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS +.\" OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +.\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +.\" DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE +.\" GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +.\" IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +.\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN +.\" IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.\" +.Dd December 18, 2017 +.Dt ZIP_UNCHANGE 3 +.Os +.Sh NAME +.Nm zip_unchange +.Nd undo changes to file in zip archive +.Sh LIBRARY +libzip (-lzip) +.Sh SYNOPSIS +.In zip.h +.Ft int +.Fn zip_unchange "zip_t *archive" "zip_uint64_t index" +.Sh DESCRIPTION +Changes to the file at position +.Ar index +are reverted. +.Sh RETURN VALUES +Upon successful completion 0 is returned. +Otherwise, \-1 is returned and the error code in +.Ar archive +is set to indicate the error. +.Sh ERRORS +.Fn zip_unchange +fails if: +.Bl -tag -width Er +.It Bq Er ZIP_ER_EXISTS +Unchanging the name would result in a duplicate name in the archive. +.It Bq Er ZIP_ER_INVAL +.Ar index +is not a valid file index in +.Ar zip . +.El +.Sh SEE ALSO +.Xr libzip 3 , +.Xr zip_unchange_all 3 , +.Xr zip_unchange_archive 3 +.Sh HISTORY +.Fn zip_unchange +was added in libzip 0.6. +In libzip 0.10 the type of +.Ar index +was changed from +.Vt int +to +.Vt zip_uint64_t . +.Sh AUTHORS +.An -nosplit +.An Dieter Baron Aq Mt dillo@nih.at +and +.An Thomas Klausner Aq Mt wiz@gatalith.at diff --git a/thirdparty/libzip-1.11.3/build-emcmake/man/zip_unchange_all.3 b/thirdparty/libzip-1.11.3/build-emcmake/man/zip_unchange_all.3 new file mode 100644 index 0000000..7604165 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/man/zip_unchange_all.3 @@ -0,0 +1,64 @@ +.\" zip_unchange_all.mdoc -- undo changes to all files in zip archive +.\" Copyright (C) 2003-2017 Dieter Baron and Thomas Klausner +.\" +.\" This file is part of libzip, a library to manipulate ZIP archives. +.\" The authors can be contacted at +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in +.\" the documentation and/or other materials provided with the +.\" distribution. +.\" 3. The names of the authors may not be used to endorse or promote +.\" products derived from this software without specific prior +.\" written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS +.\" OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +.\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +.\" DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE +.\" GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +.\" IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +.\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN +.\" IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.\" +.Dd December 18, 2017 +.Dt ZIP_UNCHANGE_ALL 3 +.Os +.Sh NAME +.Nm zip_unchange_all +.Nd undo all changes in a zip archive +.Sh LIBRARY +libzip (-lzip) +.Sh SYNOPSIS +.In zip.h +.Ft int +.Fn zip_unchange_all "zip_t *archive" +.Sh DESCRIPTION +All changes to files and global information in +.Ar archive +are reverted. +.Sh RETURN VALUES +Upon successful completion 0 is returned. +Otherwise, \-1 is returned and the error code in +.Ar archive +is set to indicate the error. +.Sh SEE ALSO +.Xr libzip 3 , +.Xr zip_unchange 3 , +.Xr zip_unchange_archive 3 +.Sh HISTORY +.Fn zip_unchange_all +was added in libzip 0.6. +.Sh AUTHORS +.An -nosplit +.An Dieter Baron Aq Mt dillo@nih.at +and +.An Thomas Klausner Aq Mt wiz@gatalith.at diff --git a/thirdparty/libzip-1.11.3/build-emcmake/man/zip_unchange_archive.3 b/thirdparty/libzip-1.11.3/build-emcmake/man/zip_unchange_archive.3 new file mode 100644 index 0000000..45a3c82 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/man/zip_unchange_archive.3 @@ -0,0 +1,64 @@ +.\" zip_unchange_archive.mdoc -- undo changes to all files in zip archive +.\" Copyright (C) 2006-2017 Dieter Baron and Thomas Klausner +.\" +.\" This file is part of libzip, a library to manipulate ZIP archives. +.\" The authors can be contacted at +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in +.\" the documentation and/or other materials provided with the +.\" distribution. +.\" 3. The names of the authors may not be used to endorse or promote +.\" products derived from this software without specific prior +.\" written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS +.\" OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +.\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +.\" DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE +.\" GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +.\" IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +.\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN +.\" IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.\" +.Dd December 18, 2017 +.Dt ZIP_UNCHANGE_ARCHIVE 3 +.Os +.Sh NAME +.Nm zip_unchange_archive +.Nd undo global changes to zip archive +.Sh LIBRARY +libzip (-lzip) +.Sh SYNOPSIS +.In zip.h +.Ft int +.Fn zip_unchange_archive "zip_t *archive" +.Sh DESCRIPTION +Revert all global changes to the archive +.Ar archive . +This reverts changes to the archive comment and global flags. +.Sh RETURN VALUES +Upon successful completion 0 is returned. +Otherwise, \-1 is returned and the error code in +.Ar archive +is set to indicate the error. +.Sh SEE ALSO +.Xr libzip 3 , +.Xr zip_unchange 3 , +.Xr zip_unchange_all 3 +.Sh HISTORY +.Fn zip_unchange_archive +was added in libzip 0.7. +.Sh AUTHORS +.An -nosplit +.An Dieter Baron Aq Mt dillo@nih.at +and +.An Thomas Klausner Aq Mt wiz@gatalith.at diff --git a/thirdparty/libzip-1.11.3/build-emcmake/man/zipcmp.1 b/thirdparty/libzip-1.11.3/build-emcmake/man/zipcmp.1 new file mode 100644 index 0000000..d3d69e6 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/man/zipcmp.1 @@ -0,0 +1,99 @@ +.\" zipcmp.mdoc -- compare zip archives +.\" Copyright (C) 2003-2024 Dieter Baron and Thomas Klausner +.\" +.\" This file is part of libzip, a library to manipulate ZIP archives. +.\" The authors can be contacted at +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in +.\" the documentation and/or other materials provided with the +.\" distribution. +.\" 3. The names of the authors may not be used to endorse or promote +.\" products derived from this software without specific prior +.\" written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS +.\" OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +.\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +.\" DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE +.\" GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +.\" IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +.\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN +.\" IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.\" +.Dd March 15, 2024 +.Dt ZIPCMP 1 +.Os +.Sh NAME +.Nm zipcmp +.Nd compare contents of zip archives +.Sh SYNOPSIS +.Nm +.Op Fl ChipqsTtVv +.Ar archive1 archive2 +.Sh DESCRIPTION +.Nm +compares the zip archives or directories +.Ar archive1 +and +.Ar archive2 +and checks if they contain the same files, comparing their names, +uncompressed sizes, and CRCs. +File order and compressed size differences are ignored. +.Pp +Supported options: +.Bl -tag -width MMM +.It Fl C +Check consistency of archives. +Results in an error if archive is inconsistent or not valid +according to the zip specification. +.It Fl h +Display a short help message and exit. +.It Fl i +Compare names ignoring case distinctions. +.It Fl p +Enable paranoid checks. +Compares extra fields, comments, and other meta data. +(Automatically disabled if one of the archives is a directory.) +These checks are skipped for files where the data differs. +.It Fl q +Quiet mode. +Compare +.Fl v . +.It Fl s +Print a summary of how many files where added and removed. +.It Fl T +Additionally compare the time stamps of the entries. +.It Fl t +Test zip files by comparing the contents to their checksums. +.It Fl V +Display version information and exit. +.It Fl v +Verbose mode. +Print details about differences to stdout. +(This is the default.) +.El +.Sh EXIT STATUS +.Nm +exits 0 if the two archives contain the same files, 1 if they differ, +and >1 if an error occurred. +.Sh SEE ALSO +.Xr zipmerge 1 , +.Xr ziptool 1 , +.Xr libzip 3 +.Sh HISTORY +.Nm +was added in libzip 0.6. +.Sh AUTHORS +.An -nosplit +.An Dieter Baron Aq Mt dillo@nih.at +and +.An Thomas Klausner Aq Mt wiz@gatalith.at diff --git a/thirdparty/libzip-1.11.3/build-emcmake/man/zipmerge.1 b/thirdparty/libzip-1.11.3/build-emcmake/man/zipmerge.1 new file mode 100644 index 0000000..f7c535b --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/man/zipmerge.1 @@ -0,0 +1,105 @@ +.\" zipmerge.mdoc -- merge zip archives +.\" Copyright (C) 2004-2022 Dieter Baron and Thomas Klausner +.\" +.\" This file is part of libzip, a library to manipulate ZIP archives. +.\" The authors can be contacted at +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in +.\" the documentation and/or other materials provided with the +.\" distribution. +.\" 3. The names of the authors may not be used to endorse or promote +.\" products derived from this software without specific prior +.\" written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS +.\" OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +.\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +.\" DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE +.\" GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +.\" IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +.\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN +.\" IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.\" +.Dd November 7, 2023 +.Dt ZIPMERGE 1 +.Os +.Sh NAME +.Nm zipmerge +.Nd merge zip archives +.Sh SYNOPSIS +.Nm +.Op Fl DhIiSsV +.Ar target-zip +.Ar source-zip Op Ar source-zip ... +.Sh DESCRIPTION +.Nm +copies files from the source zip archives +.Ar source-zip +to the target zip archive +.Ar target-zip . +By default, files in the source zip archives overwrite +existing files of the same name in the target zip archive. +By default, compressed files in the source archive are +copied directly without recompression, uncompressed files +are compressed using the default compression algorithm. +.Pp +Supported options: +.Bl -tag -width MMM +.It Fl D +Ignore directory components in file name comparisons. +This option is slow for archives with many files. +.It Fl h +Display a short help message and exit. +.It Fl I +Ignore case in file name comparisons +This option is slow for archives with many files. +.It Fl i +Ask before overwriting files. +See also +.Fl s . +.It Fl k +Do not compress files that were uncompressed in +.Ar source-zip , +otherwise they are compressed with the default compression method. +.It Fl S +Do not overwrite files that have the same name, size, and +CRC32 in both the source and target archives. +.It Fl s +When +.Fl i +is given, do not ask before overwriting files that have the same name, size, +and CRC32. +.It Fl V +Display version information and exit. +.El +.Sh EXIT STATUS +.Nm +exits 0 on success and >1 if an error occurred. +.Sh SEE ALSO +.Xr zipcmp 1 , +.Xr ziptool 1 , +.Xr libzip 3 +.Sh HISTORY +.Nm +was added in libzip 0.6. +.Sh AUTHORS +.An -nosplit +.An Dieter Baron Aq Mt dillo@nih.at +and +.An Thomas Klausner Aq Mt wiz@gatalith.at +.Sh CAVEATS +.Nm +uses one open file descriptor per zip archive. +If you need to merge a lot of zip archives, check your shell's +file descriptor ulimit and either increase it or run +.Nm +multiple times with e.g. 1000 source zip archives each time. diff --git a/thirdparty/libzip-1.11.3/build-emcmake/man/ziptool.1 b/thirdparty/libzip-1.11.3/build-emcmake/man/ziptool.1 new file mode 100644 index 0000000..05f57bd --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/man/ziptool.1 @@ -0,0 +1,364 @@ +.\" ziptool.mdoc -- modify zip archives in multiple ways +.\" Copyright (C) 2016-2022 Dieter Baron and Thomas Klausner +.\" +.\" This file is part of libzip, a library to manipulate ZIP archives. +.\" The authors can be contacted at +.\" +.\" Redistribution and use in source and binary forms, with or without +.\" modification, are permitted provided that the following conditions +.\" are met: +.\" 1. Redistributions of source code must retain the above copyright +.\" notice, this list of conditions and the following disclaimer. +.\" 2. Redistributions in binary form must reproduce the above copyright +.\" notice, this list of conditions and the following disclaimer in +.\" the documentation and/or other materials provided with the +.\" distribution. +.\" 3. The names of the authors may not be used to endorse or promote +.\" products derived from this software without specific prior +.\" written permission. +.\" +.\" THIS SOFTWARE IS PROVIDED BY THE AUTHORS ``AS IS'' AND ANY EXPRESS +.\" OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +.\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE +.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS BE LIABLE FOR ANY +.\" DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE +.\" GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS +.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER +.\" IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR +.\" OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN +.\" IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +.\" +.Dd January 23, 2023 +.Dt ZIPTOOL 1 +.Os +.Sh NAME +.Nm ziptool +.Nd modify zip archives +.Sh SYNOPSIS +.Nm +.Op Fl ceghnrst +.Op Fl l Ar length +.Op Fl o Ar offset +.Ar zip-archive +.Cm command Op Ar command-args ... +.Op Cm command Oo Ar command-args ... Oc ... +.Sh DESCRIPTION +.Nm +modifies the zip archive +.Ar zip-archive +according to the +.Ar commands +given. +.Pp +Supported options: +.Bl -tag -width MoMoffsetMM +.It Fl c +Check zip archive consistency when opening it. +.It Fl e +Error if archive already exists (only useful with +.Fl n ) . +.It Fl g +Guess file name encoding (for +.Cm stat +command). +.It Fl h +Display help. +.It Fl l Ar length +Only read +.Ar length +bytes of archive. +See also +.Fl o . +.It Fl n +Create archive if it doesn't exist. +See also +.Fl e . +.It Fl o Ar offset +Start reading input archive from +.Ar offset . +See also +.Fl l . +.It Fl r +Print raw file name encoding without translation (for +.Cm stat +command). +.It Fl s +Follow file name convention strictly (for +.Cm stat +command). +.It Fl t +Disregard current file contents, if any. +.Em Note : +use this with care, it deletes all existing file contents when +you modify the archive. +.El +.Ss Commands +For all commands below, the index is zero-based. +In other words, the first entry in the zip archive has index 0. +.Pp +Supported commands and arguments are: +.Bl -tag -width 10n +.It Cm add Ar name content +Add file called +.Ar name +using the string +.Ar content +from the command line as data. +.It Cm add_dir Ar name +Add directory +.Ar name . +.It Cm add_file Ar name file_to_add offset len +Add file +.Ar name +to archive, using +.Ar len +bytes from the file +.Ar file_to_add +as input data, starting at +.Ar offset . +.It Cm add_from_zip Ar name archivename index offset len +Add file called +.Ar name +to archive using data from another zip archive +.Ar archivename +using the entry with index +.Ar index +and reading +.Ar len +bytes from +.Ar offset . +.It Cm cat Ar index +Output file contents for entry +.Ar index +to stdout. +.It Cm count_extra Ar index flags +Print the number of extra fields for archive entry +.Ar index +using +.Ar flags . +.It Cm count_extra_by_id Ar index extra_id flags +Print number of extra fields of type +.Ar extra_id +for archive entry +.Ar index +using +.Ar flags . +.It Cm delete Ar index +Remove entry at +.Ar index +from zip archive. +.It Cm delete_extra Ar index extra_idx flags +Remove extra field number +.Ar extra_idx +from archive entry +.Ar index +using +.Ar flags . +.It Cm delete_extra_by_id Ar index extra_id extra_index flags +Remove extra field number +.Ar extra_index +of type +.Ar extra_id +from archive entry +.Ar index +using +.Ar flags . +.It Cm get_archive_comment +Print archive comment. +.It Cm get_archive_flag Ar flag +Print state of archive flag +.Ar flag . +.It Cm get_extra Ar index extra_index flags +Print extra field +.Ar extra_index +for archive entry +.Ar index +using +.Ar flags . +.It Cm get_extra_by_id Ar index extra_id extra_index flags +Print extra field +.Ar extra_index +of type +.Ar extra_id +for archive entry +.Ar index +using +.Ar flags . +.It Cm get_file_comment Ar index +Get file comment for archive entry +.Ar index . +.It Cm get_num_entries Ar flags +Print number of entries in archive using +.Ar flags . +.It Cm name_locate Ar name flags +Find entry in archive with the filename +.Ar name +using +.Ar flags +and print its index. +.It Cm rename Ar index name +Rename archive entry +.Ar index +to +.Ar name . +.It Cm replace_file_contents Ar index data +Replace file contents for archive entry +.Ar index +with the string +.Ar data . +.It Cm set_archive_comment Ar comment +Set archive comment to +.Ar comment . +.It Cm get_archive_flag Ar flag Ar value +Set archive flag +.Ar flag +to +.Ar value . +.It Cm set_extra Ar index extra_id extra_index flags value +Set extra field number +.Ar extra_index +of type +.Ar extra_id +for archive entry +.Ar index +using +.Ar flags +to +.Ar value . +.It Cm set_file_comment Ar index comment +Set file comment for archive entry +.Ar index +to string +.Ar comment . +.It Cm set_file_compression Ar index method compression_flags +Set file compression method for archive entry +.Ar index +to +.Ar method +using +.Ar compression_flags . +.Em Note : +Currently, +.Ar compression_flags +are ignored. +.It Cm set_file_encryption Ar index method password +Set file encryption method for archive entry +.Ar index +to +.Ar method +with password +.Ar password . +.It Cm set_file_mtime Ar index timestamp +Set file modification time for archive entry +.Ar index +to UNIX mtime +.Ar timestamp . +.It Cm set_file_mtime_all Ar timestamp +Set file modification time for all archive entries to UNIX mtime +.Ar timestamp . +.It Cm set_password Ar password +Set default password for encryption/decryption to +.Ar password . +.It Cm stat Ar index +Print information about archive entry +.Ar index . +.El +.Ss Flags +Some commands take flag arguments. +Each character in the argument sets the corresponding flag. +Use 0 or the empty string for no flags. +.Pp +Supported flags are: +.Bl -tag -width MMM -compact -offset indent +.It Ar 4 +.Dv ZIP_FL_ENC_CP437 +.It Ar 8 +.Dv ZIP_FL_ENC_UTF_8 +.It Ar C +.Dv ZIP_FL_NOCASE +.It Ar c +.Dv ZIP_FL_CENTRAL +.It Ar d +.Dv ZIP_FL_NODIR +.It Ar l +.Dv ZIP_FL_LOCAL +.It Ar r +.Dv ZIP_FL_ENC_RAW +.It Ar s +.Dv ZIP_FL_ENC_STRICT +.It Ar u +.Dv ZIP_FL_UNCHANGED +.El +.Ss Archive flags +.Cm get_archive_flag +and +.Cm set_archive_flag +work on the following flags: +.Bl -bullet -compact -offset indent +.It +.Dv create-or-keep-empty-file-for-archive +.It +.Dv is-torrentzip +.It +.Dv rdonly +.It +.Dv want-torrentzip +.El +.Ss Compression Methods +Some commands take compression method arguments. +Supported methods are: +.Bl -bullet -compact -offset indent +.It +.Dv default +.It +.Dv deflate +.It +.Dv store +.El +.Ss Encryption Methods +Some commands take encryption method arguments. +Supported methods are: +.Bl -bullet -compact -offset indent +.It +.Dv none +.It +.Dv AES-128 +.It +.Dv AES-192 +.It +.Dv AES-256 +.El +.Sh EXIT STATUS +.Ex -std +.Sh EXAMPLES +Add a file called +.Pa teststring.txt +to the zip archive +.Pa testbuffer.zip +with data +.Dq This is a test.\en +where +.Dq \en +is replaced with a newline character: +.Bd -literal -offset indent +ziptool testbuffer.zip add teststring.txt \\"This is a test.\en\\" +.Ed +.Pp +Delete the first file from the zip archive +.Pa testfile.zip : +.Bd -literal -offset indent +ziptool testfile.zip delete 0 +.Ed +.Sh SEE ALSO +.Xr zipcmp 1 , +.Xr zipmerge 1 , +.Xr libzip 3 +.Sh HISTORY +.Nm +was added in libzip 1.1. +.Sh AUTHORS +.An -nosplit +.An Dieter Baron Aq Mt dillo@nih.at +and +.An Thomas Klausner Aq Mt wiz@gatalith.at diff --git a/thirdparty/libzip-1.11.3/build-emcmake/ossfuzz/CMakeFiles/CMakeDirectoryInformation.cmake b/thirdparty/libzip-1.11.3/build-emcmake/ossfuzz/CMakeFiles/CMakeDirectoryInformation.cmake new file mode 100644 index 0000000..ea55061 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/ossfuzz/CMakeFiles/CMakeDirectoryInformation.cmake @@ -0,0 +1,16 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.28 + +# Relative path conversion top directories. +set(CMAKE_RELATIVE_PATH_TOP_SOURCE "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3") +set(CMAKE_RELATIVE_PATH_TOP_BINARY "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake") + +# Force unix paths in dependencies. +set(CMAKE_FORCE_UNIX_PATHS 1) + + +# The C and CXX include file regular expressions for this directory. +set(CMAKE_C_INCLUDE_REGEX_SCAN "^.*$") +set(CMAKE_C_INCLUDE_REGEX_COMPLAIN "^$") +set(CMAKE_CXX_INCLUDE_REGEX_SCAN ${CMAKE_C_INCLUDE_REGEX_SCAN}) +set(CMAKE_CXX_INCLUDE_REGEX_COMPLAIN ${CMAKE_C_INCLUDE_REGEX_COMPLAIN}) diff --git a/thirdparty/libzip-1.11.3/build-emcmake/ossfuzz/CMakeFiles/list-fuzzers.dir/DependInfo.cmake b/thirdparty/libzip-1.11.3/build-emcmake/ossfuzz/CMakeFiles/list-fuzzers.dir/DependInfo.cmake new file mode 100644 index 0000000..29b95a5 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/ossfuzz/CMakeFiles/list-fuzzers.dir/DependInfo.cmake @@ -0,0 +1,22 @@ + +# Consider dependencies only in project. +set(CMAKE_DEPENDS_IN_PROJECT_ONLY OFF) + +# The set of languages for which implicit dependencies are needed: +set(CMAKE_DEPENDS_LANGUAGES + ) + +# The set of dependency files which are needed: +set(CMAKE_DEPENDS_DEPENDENCY_FILES + ) + +# Targets to which this target links which contain Fortran sources. +set(CMAKE_Fortran_TARGET_LINKED_INFO_FILES + ) + +# Targets to which this target links which contain Fortran sources. +set(CMAKE_Fortran_TARGET_FORWARD_LINKED_INFO_FILES + ) + +# Fortran module output directory. +set(CMAKE_Fortran_TARGET_MODULE_DIR "") diff --git a/thirdparty/libzip-1.11.3/build-emcmake/ossfuzz/CMakeFiles/list-fuzzers.dir/build.make b/thirdparty/libzip-1.11.3/build-emcmake/ossfuzz/CMakeFiles/list-fuzzers.dir/build.make new file mode 100644 index 0000000..42072c0 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/ossfuzz/CMakeFiles/list-fuzzers.dir/build.make @@ -0,0 +1,87 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.28 + +# Delete rule output on recipe failure. +.DELETE_ON_ERROR: + +#============================================================================= +# Special targets provided by cmake. + +# Disable implicit rules so canonical targets will work. +.SUFFIXES: + +# Disable VCS-based implicit rules. +% : %,v + +# Disable VCS-based implicit rules. +% : RCS/% + +# Disable VCS-based implicit rules. +% : RCS/%,v + +# Disable VCS-based implicit rules. +% : SCCS/s.% + +# Disable VCS-based implicit rules. +% : s.% + +.SUFFIXES: .hpux_make_needs_suffix_list + +# Command-line flag to silence nested $(MAKE). +$(VERBOSE)MAKESILENT = -s + +#Suppress display of executed commands. +$(VERBOSE).SILENT: + +# A target that is always out of date. +cmake_force: +.PHONY : cmake_force + +#============================================================================= +# Set environment variables for the build. + +# The shell in which to execute make rules. +SHELL = /bin/sh + +# The CMake executable. +CMAKE_COMMAND = /usr/bin/cmake + +# The command to remove a file. +RM = /usr/bin/cmake -E rm -f + +# Escaping for special characters. +EQUALS = = + +# The top-level source directory on which CMake was run. +CMAKE_SOURCE_DIR = "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3" + +# The top-level build directory on which CMake was run. +CMAKE_BINARY_DIR = "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" + +# Utility rule file for list-fuzzers. + +# Include any custom commands dependencies for this target. +include ossfuzz/CMakeFiles/list-fuzzers.dir/compiler_depend.make + +# Include the progress variables for this target. +include ossfuzz/CMakeFiles/list-fuzzers.dir/progress.make + +ossfuzz/CMakeFiles/list-fuzzers: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/ossfuzz" && echo FUZZERS: zip_read_file_fuzzer zip_read_fuzzer zip_write_encrypt_aes256_file_fuzzer zip_write_encrypt_pkware_file_fuzzer + +list-fuzzers: ossfuzz/CMakeFiles/list-fuzzers +list-fuzzers: ossfuzz/CMakeFiles/list-fuzzers.dir/build.make +.PHONY : list-fuzzers + +# Rule to build all files generated by this target. +ossfuzz/CMakeFiles/list-fuzzers.dir/build: list-fuzzers +.PHONY : ossfuzz/CMakeFiles/list-fuzzers.dir/build + +ossfuzz/CMakeFiles/list-fuzzers.dir/clean: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/ossfuzz" && $(CMAKE_COMMAND) -P CMakeFiles/list-fuzzers.dir/cmake_clean.cmake +.PHONY : ossfuzz/CMakeFiles/list-fuzzers.dir/clean + +ossfuzz/CMakeFiles/list-fuzzers.dir/depend: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(CMAKE_COMMAND) -E cmake_depends "Unix Makefiles" "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3" "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/ossfuzz" "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/ossfuzz" "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/ossfuzz/CMakeFiles/list-fuzzers.dir/DependInfo.cmake" "--color=$(COLOR)" +.PHONY : ossfuzz/CMakeFiles/list-fuzzers.dir/depend + diff --git a/thirdparty/libzip-1.11.3/build-emcmake/ossfuzz/CMakeFiles/list-fuzzers.dir/cmake_clean.cmake b/thirdparty/libzip-1.11.3/build-emcmake/ossfuzz/CMakeFiles/list-fuzzers.dir/cmake_clean.cmake new file mode 100644 index 0000000..097d441 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/ossfuzz/CMakeFiles/list-fuzzers.dir/cmake_clean.cmake @@ -0,0 +1,8 @@ +file(REMOVE_RECURSE + "CMakeFiles/list-fuzzers" +) + +# Per-language clean rules from dependency scanning. +foreach(lang ) + include(CMakeFiles/list-fuzzers.dir/cmake_clean_${lang}.cmake OPTIONAL) +endforeach() diff --git a/thirdparty/libzip-1.11.3/build-emcmake/ossfuzz/CMakeFiles/list-fuzzers.dir/compiler_depend.make b/thirdparty/libzip-1.11.3/build-emcmake/ossfuzz/CMakeFiles/list-fuzzers.dir/compiler_depend.make new file mode 100644 index 0000000..5cf9982 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/ossfuzz/CMakeFiles/list-fuzzers.dir/compiler_depend.make @@ -0,0 +1,2 @@ +# Empty custom commands generated dependencies file for list-fuzzers. +# This may be replaced when dependencies are built. diff --git a/thirdparty/libzip-1.11.3/build-emcmake/ossfuzz/CMakeFiles/list-fuzzers.dir/compiler_depend.ts b/thirdparty/libzip-1.11.3/build-emcmake/ossfuzz/CMakeFiles/list-fuzzers.dir/compiler_depend.ts new file mode 100644 index 0000000..c5c7028 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/ossfuzz/CMakeFiles/list-fuzzers.dir/compiler_depend.ts @@ -0,0 +1,2 @@ +# CMAKE generated file: DO NOT EDIT! +# Timestamp file for custom commands dependencies management for list-fuzzers. diff --git a/thirdparty/libzip-1.11.3/build-emcmake/ossfuzz/CMakeFiles/list-fuzzers.dir/progress.make b/thirdparty/libzip-1.11.3/build-emcmake/ossfuzz/CMakeFiles/list-fuzzers.dir/progress.make new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/ossfuzz/CMakeFiles/list-fuzzers.dir/progress.make @@ -0,0 +1 @@ + diff --git a/thirdparty/libzip-1.11.3/build-emcmake/ossfuzz/CMakeFiles/progress.marks b/thirdparty/libzip-1.11.3/build-emcmake/ossfuzz/CMakeFiles/progress.marks new file mode 100644 index 0000000..9902f17 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/ossfuzz/CMakeFiles/progress.marks @@ -0,0 +1 @@ +28 diff --git a/thirdparty/libzip-1.11.3/build-emcmake/ossfuzz/CMakeFiles/zip_read_file_fuzzer.dir/DependInfo.cmake b/thirdparty/libzip-1.11.3/build-emcmake/ossfuzz/CMakeFiles/zip_read_file_fuzzer.dir/DependInfo.cmake new file mode 100644 index 0000000..7af017e --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/ossfuzz/CMakeFiles/zip_read_file_fuzzer.dir/DependInfo.cmake @@ -0,0 +1,24 @@ + +# Consider dependencies only in project. +set(CMAKE_DEPENDS_IN_PROJECT_ONLY OFF) + +# The set of languages for which implicit dependencies are needed: +set(CMAKE_DEPENDS_LANGUAGES + ) + +# The set of dependency files which are needed: +set(CMAKE_DEPENDS_DEPENDENCY_FILES + "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/ossfuzz/fuzz_main.c" "ossfuzz/CMakeFiles/zip_read_file_fuzzer.dir/fuzz_main.c.o" "gcc" "ossfuzz/CMakeFiles/zip_read_file_fuzzer.dir/fuzz_main.c.o.d" + "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/ossfuzz/zip_read_file_fuzzer.c" "ossfuzz/CMakeFiles/zip_read_file_fuzzer.dir/zip_read_file_fuzzer.c.o" "gcc" "ossfuzz/CMakeFiles/zip_read_file_fuzzer.dir/zip_read_file_fuzzer.c.o.d" + ) + +# Targets to which this target links which contain Fortran sources. +set(CMAKE_Fortran_TARGET_LINKED_INFO_FILES + ) + +# Targets to which this target links which contain Fortran sources. +set(CMAKE_Fortran_TARGET_FORWARD_LINKED_INFO_FILES + ) + +# Fortran module output directory. +set(CMAKE_Fortran_TARGET_MODULE_DIR "") diff --git a/thirdparty/libzip-1.11.3/build-emcmake/ossfuzz/CMakeFiles/zip_read_file_fuzzer.dir/build.make b/thirdparty/libzip-1.11.3/build-emcmake/ossfuzz/CMakeFiles/zip_read_file_fuzzer.dir/build.make new file mode 100644 index 0000000..dffcb72 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/ossfuzz/CMakeFiles/zip_read_file_fuzzer.dir/build.make @@ -0,0 +1,132 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.28 + +# Delete rule output on recipe failure. +.DELETE_ON_ERROR: + +#============================================================================= +# Special targets provided by cmake. + +# Disable implicit rules so canonical targets will work. +.SUFFIXES: + +# Disable VCS-based implicit rules. +% : %,v + +# Disable VCS-based implicit rules. +% : RCS/% + +# Disable VCS-based implicit rules. +% : RCS/%,v + +# Disable VCS-based implicit rules. +% : SCCS/s.% + +# Disable VCS-based implicit rules. +% : s.% + +.SUFFIXES: .hpux_make_needs_suffix_list + +# Command-line flag to silence nested $(MAKE). +$(VERBOSE)MAKESILENT = -s + +#Suppress display of executed commands. +$(VERBOSE).SILENT: + +# A target that is always out of date. +cmake_force: +.PHONY : cmake_force + +#============================================================================= +# Set environment variables for the build. + +# The shell in which to execute make rules. +SHELL = /bin/sh + +# The CMake executable. +CMAKE_COMMAND = /usr/bin/cmake + +# The command to remove a file. +RM = /usr/bin/cmake -E rm -f + +# Escaping for special characters. +EQUALS = = + +# The top-level source directory on which CMake was run. +CMAKE_SOURCE_DIR = "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3" + +# The top-level build directory on which CMake was run. +CMAKE_BINARY_DIR = "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" + +# Include any dependencies generated for this target. +include ossfuzz/CMakeFiles/zip_read_file_fuzzer.dir/depend.make +# Include any dependencies generated by the compiler for this target. +include ossfuzz/CMakeFiles/zip_read_file_fuzzer.dir/compiler_depend.make + +# Include the progress variables for this target. +include ossfuzz/CMakeFiles/zip_read_file_fuzzer.dir/progress.make + +# Include the compile flags for this target's objects. +include ossfuzz/CMakeFiles/zip_read_file_fuzzer.dir/flags.make + +ossfuzz/CMakeFiles/zip_read_file_fuzzer.dir/zip_read_file_fuzzer.c.o: ossfuzz/CMakeFiles/zip_read_file_fuzzer.dir/flags.make +ossfuzz/CMakeFiles/zip_read_file_fuzzer.dir/zip_read_file_fuzzer.c.o: ossfuzz/CMakeFiles/zip_read_file_fuzzer.dir/includes_C.rsp +ossfuzz/CMakeFiles/zip_read_file_fuzzer.dir/zip_read_file_fuzzer.c.o: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/ossfuzz/zip_read_file_fuzzer.c +ossfuzz/CMakeFiles/zip_read_file_fuzzer.dir/zip_read_file_fuzzer.c.o: ossfuzz/CMakeFiles/zip_read_file_fuzzer.dir/compiler_depend.ts + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_1) "Building C object ossfuzz/CMakeFiles/zip_read_file_fuzzer.dir/zip_read_file_fuzzer.c.o" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/ossfuzz" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -MD -MT ossfuzz/CMakeFiles/zip_read_file_fuzzer.dir/zip_read_file_fuzzer.c.o -MF CMakeFiles/zip_read_file_fuzzer.dir/zip_read_file_fuzzer.c.o.d -o CMakeFiles/zip_read_file_fuzzer.dir/zip_read_file_fuzzer.c.o -c "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/ossfuzz/zip_read_file_fuzzer.c" + +ossfuzz/CMakeFiles/zip_read_file_fuzzer.dir/zip_read_file_fuzzer.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Preprocessing C source to CMakeFiles/zip_read_file_fuzzer.dir/zip_read_file_fuzzer.c.i" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/ossfuzz" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/ossfuzz/zip_read_file_fuzzer.c" > CMakeFiles/zip_read_file_fuzzer.dir/zip_read_file_fuzzer.c.i + +ossfuzz/CMakeFiles/zip_read_file_fuzzer.dir/zip_read_file_fuzzer.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Compiling C source to assembly CMakeFiles/zip_read_file_fuzzer.dir/zip_read_file_fuzzer.c.s" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/ossfuzz" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/ossfuzz/zip_read_file_fuzzer.c" -o CMakeFiles/zip_read_file_fuzzer.dir/zip_read_file_fuzzer.c.s + +ossfuzz/CMakeFiles/zip_read_file_fuzzer.dir/fuzz_main.c.o: ossfuzz/CMakeFiles/zip_read_file_fuzzer.dir/flags.make +ossfuzz/CMakeFiles/zip_read_file_fuzzer.dir/fuzz_main.c.o: ossfuzz/CMakeFiles/zip_read_file_fuzzer.dir/includes_C.rsp +ossfuzz/CMakeFiles/zip_read_file_fuzzer.dir/fuzz_main.c.o: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/ossfuzz/fuzz_main.c +ossfuzz/CMakeFiles/zip_read_file_fuzzer.dir/fuzz_main.c.o: ossfuzz/CMakeFiles/zip_read_file_fuzzer.dir/compiler_depend.ts + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_2) "Building C object ossfuzz/CMakeFiles/zip_read_file_fuzzer.dir/fuzz_main.c.o" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/ossfuzz" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -MD -MT ossfuzz/CMakeFiles/zip_read_file_fuzzer.dir/fuzz_main.c.o -MF CMakeFiles/zip_read_file_fuzzer.dir/fuzz_main.c.o.d -o CMakeFiles/zip_read_file_fuzzer.dir/fuzz_main.c.o -c "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/ossfuzz/fuzz_main.c" + +ossfuzz/CMakeFiles/zip_read_file_fuzzer.dir/fuzz_main.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Preprocessing C source to CMakeFiles/zip_read_file_fuzzer.dir/fuzz_main.c.i" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/ossfuzz" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/ossfuzz/fuzz_main.c" > CMakeFiles/zip_read_file_fuzzer.dir/fuzz_main.c.i + +ossfuzz/CMakeFiles/zip_read_file_fuzzer.dir/fuzz_main.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Compiling C source to assembly CMakeFiles/zip_read_file_fuzzer.dir/fuzz_main.c.s" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/ossfuzz" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/ossfuzz/fuzz_main.c" -o CMakeFiles/zip_read_file_fuzzer.dir/fuzz_main.c.s + +# Object files for target zip_read_file_fuzzer +zip_read_file_fuzzer_OBJECTS = \ +"CMakeFiles/zip_read_file_fuzzer.dir/zip_read_file_fuzzer.c.o" \ +"CMakeFiles/zip_read_file_fuzzer.dir/fuzz_main.c.o" + +# External object files for target zip_read_file_fuzzer +zip_read_file_fuzzer_EXTERNAL_OBJECTS = + +ossfuzz/zip_read_file_fuzzer.js: ossfuzz/CMakeFiles/zip_read_file_fuzzer.dir/zip_read_file_fuzzer.c.o +ossfuzz/zip_read_file_fuzzer.js: ossfuzz/CMakeFiles/zip_read_file_fuzzer.dir/fuzz_main.c.o +ossfuzz/zip_read_file_fuzzer.js: ossfuzz/CMakeFiles/zip_read_file_fuzzer.dir/build.make +ossfuzz/zip_read_file_fuzzer.js: lib/libzip.a +ossfuzz/zip_read_file_fuzzer.js: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/zlib-1.3.1/install/lib/libz.a +ossfuzz/zip_read_file_fuzzer.js: ossfuzz/CMakeFiles/zip_read_file_fuzzer.dir/linkLibs.rsp +ossfuzz/zip_read_file_fuzzer.js: ossfuzz/CMakeFiles/zip_read_file_fuzzer.dir/objects1.rsp +ossfuzz/zip_read_file_fuzzer.js: ossfuzz/CMakeFiles/zip_read_file_fuzzer.dir/link.txt + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_3) "Linking C executable zip_read_file_fuzzer.js" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/ossfuzz" && $(CMAKE_COMMAND) -E cmake_link_script CMakeFiles/zip_read_file_fuzzer.dir/link.txt --verbose=$(VERBOSE) + +# Rule to build all files generated by this target. +ossfuzz/CMakeFiles/zip_read_file_fuzzer.dir/build: ossfuzz/zip_read_file_fuzzer.js +.PHONY : ossfuzz/CMakeFiles/zip_read_file_fuzzer.dir/build + +ossfuzz/CMakeFiles/zip_read_file_fuzzer.dir/clean: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/ossfuzz" && $(CMAKE_COMMAND) -P CMakeFiles/zip_read_file_fuzzer.dir/cmake_clean.cmake +.PHONY : ossfuzz/CMakeFiles/zip_read_file_fuzzer.dir/clean + +ossfuzz/CMakeFiles/zip_read_file_fuzzer.dir/depend: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(CMAKE_COMMAND) -E cmake_depends "Unix Makefiles" "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3" "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/ossfuzz" "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/ossfuzz" "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/ossfuzz/CMakeFiles/zip_read_file_fuzzer.dir/DependInfo.cmake" "--color=$(COLOR)" +.PHONY : ossfuzz/CMakeFiles/zip_read_file_fuzzer.dir/depend + diff --git a/thirdparty/libzip-1.11.3/build-emcmake/ossfuzz/CMakeFiles/zip_read_file_fuzzer.dir/cmake_clean.cmake b/thirdparty/libzip-1.11.3/build-emcmake/ossfuzz/CMakeFiles/zip_read_file_fuzzer.dir/cmake_clean.cmake new file mode 100644 index 0000000..12ebdb5 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/ossfuzz/CMakeFiles/zip_read_file_fuzzer.dir/cmake_clean.cmake @@ -0,0 +1,13 @@ +file(REMOVE_RECURSE + "CMakeFiles/zip_read_file_fuzzer.dir/fuzz_main.c.o" + "CMakeFiles/zip_read_file_fuzzer.dir/fuzz_main.c.o.d" + "CMakeFiles/zip_read_file_fuzzer.dir/zip_read_file_fuzzer.c.o" + "CMakeFiles/zip_read_file_fuzzer.dir/zip_read_file_fuzzer.c.o.d" + "zip_read_file_fuzzer.js" + "zip_read_file_fuzzer.pdb" +) + +# Per-language clean rules from dependency scanning. +foreach(lang C) + include(CMakeFiles/zip_read_file_fuzzer.dir/cmake_clean_${lang}.cmake OPTIONAL) +endforeach() diff --git a/thirdparty/libzip-1.11.3/build-emcmake/ossfuzz/CMakeFiles/zip_read_file_fuzzer.dir/compiler_depend.make b/thirdparty/libzip-1.11.3/build-emcmake/ossfuzz/CMakeFiles/zip_read_file_fuzzer.dir/compiler_depend.make new file mode 100644 index 0000000..7f325fd --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/ossfuzz/CMakeFiles/zip_read_file_fuzzer.dir/compiler_depend.make @@ -0,0 +1,2 @@ +# Empty compiler generated dependencies file for zip_read_file_fuzzer. +# This may be replaced when dependencies are built. diff --git a/thirdparty/libzip-1.11.3/build-emcmake/ossfuzz/CMakeFiles/zip_read_file_fuzzer.dir/compiler_depend.ts b/thirdparty/libzip-1.11.3/build-emcmake/ossfuzz/CMakeFiles/zip_read_file_fuzzer.dir/compiler_depend.ts new file mode 100644 index 0000000..45e7093 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/ossfuzz/CMakeFiles/zip_read_file_fuzzer.dir/compiler_depend.ts @@ -0,0 +1,2 @@ +# CMAKE generated file: DO NOT EDIT! +# Timestamp file for compiler generated dependencies management for zip_read_file_fuzzer. diff --git a/thirdparty/libzip-1.11.3/build-emcmake/ossfuzz/CMakeFiles/zip_read_file_fuzzer.dir/depend.make b/thirdparty/libzip-1.11.3/build-emcmake/ossfuzz/CMakeFiles/zip_read_file_fuzzer.dir/depend.make new file mode 100644 index 0000000..4c8fe6d --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/ossfuzz/CMakeFiles/zip_read_file_fuzzer.dir/depend.make @@ -0,0 +1,2 @@ +# Empty dependencies file for zip_read_file_fuzzer. +# This may be replaced when dependencies are built. diff --git a/thirdparty/libzip-1.11.3/build-emcmake/ossfuzz/CMakeFiles/zip_read_file_fuzzer.dir/flags.make b/thirdparty/libzip-1.11.3/build-emcmake/ossfuzz/CMakeFiles/zip_read_file_fuzzer.dir/flags.make new file mode 100644 index 0000000..fe32f7a --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/ossfuzz/CMakeFiles/zip_read_file_fuzzer.dir/flags.make @@ -0,0 +1,10 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.28 + +# compile C with /home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc +C_DEFINES = + +C_INCLUDES = @CMakeFiles/zip_read_file_fuzzer.dir/includes_C.rsp + +C_FLAGS = + diff --git a/thirdparty/libzip-1.11.3/build-emcmake/ossfuzz/CMakeFiles/zip_read_file_fuzzer.dir/fuzz_main.c.o b/thirdparty/libzip-1.11.3/build-emcmake/ossfuzz/CMakeFiles/zip_read_file_fuzzer.dir/fuzz_main.c.o new file mode 100644 index 0000000000000000000000000000000000000000..a829fe0013eceb8a67e4f5e9c9aae3d8598af89e GIT binary patch literal 1925 zcmZWqNplld5bk+1S}e)d^MWzPHvL#-gk;&WWXuvQzzbk7ODdI{7)wt=cr+u=jGVwB zay9~$1C^yJ%OMnpROOab<;o$Is^mshegWrPxn#MeXT~n$aGBTrz3%?LxAZ*Fou&c+ z%9G8_O$gm)osQDEt#9#~X3yTIpoA*TjbyoOG)$@6<)&;}_B{s57VNls zWv$$@8m234wd2E)TFWNC76gTAR!f=yUP7qmNV&F+yV5X#d3e~C?=;LRsJ_$G4a2Gg zGohL-^(tuoM6F_2jtnLSmzUqVy3oFVU)pa<$6YbyC9~Cb10IdCBvt#sTc!dDTF54Z zV?R9b-0#E6&CVf0HbJlw3KbcuYeGZqun(3%giym!k&Vy*MK(l(Qe*=(5hgQSWSqM%rU?-J*oXbxUxyeV<^dAn1#+>6Y7F8Y99$54iFpY3;?TO- zN4)z2-eDZx=G`CE9>Ec>_9)dEEix#5?o*86ejGz>w-7E4P<^D;2|R#^g8O?q9B?1R zgZx83`4H7QRAkWrKa7X@M;`9EQE`NH9mOMfbV(c|Glj=6wJyd<;&>qOI3C}Ym@fV3 z7d%0<8BF5|%YUW;&oLU}2l4 zSbFYPn4z4LSi~7Txtk^-W&`o3f+d}%if3>ZPvIFn&FLc1p`0b`4Lpl)EQ)hv&fz(n zTNfoFECqz;@%%R7h0+T@=OPi#;|08k^ScSTSilATi5E0XF^jac#jQh5h^0WwC0xQw z{GlJ?-xDq_Q|uMIj8_)LGHJMq%XoENTq6zFNJF4~1y{BT`$-9L9k268UKL8dK`n5T z$Zp;hxA0cb0(c`Ck3aU>KTILn^M{3>gC`CF82SN@HJqRNA&>qu1jNv;ImL z9&x~hv|ZGa>Y&Z2>vom4;t zuIvC)3`T)7-~?+sa9)Km;GrF0T7zET;T@n5qQX1^JPN!k^wQhga8K5@s=BLZx5yQ~ z8^}(Q#Q#B4uS5CQq3PG50x0mv+l`nl>F=4nuyS!;8;wMi$cUo8$3T0ar~qFpn)Z_t z0(ho`)xQ*izhDu7r%Z!iSQP$XUGOK1so$tH^Hhxk{H$v5yP8lpH9{V0-2mTe8vLg9 zs4qR_Uo8pnX-I?bLL7b#^}^pYJ`DFoo`eRj7HvYiB5g-WkXezABdc^9lu*Uc z&HCF@li6H0S8uqOy5qVn=hOt*ciOAjiq)JjjE&%vq13yw;^OqoOhFc_v$@&X>EcYa zHk&Wz<)ogkR133(T&0q)PSvV1R~Uycz0F9vbQh#su1Vc(+tP`qEtU; z#%j6g!3w=S8G4EuHnC-_4QU&eSx?8BZNqJB=tf(nlg+lPuNpE_H>_3NaMJyzWxBTB kYSER<)LO3h7^ai9tVvs%6`67GwWO1dI*q!Sk?*?y0Vk)%&j0`b literal 0 HcmV?d00001 diff --git a/thirdparty/libzip-1.11.3/build-emcmake/ossfuzz/CMakeFiles/zip_read_file_fuzzer.dir/fuzz_main.c.o.d b/thirdparty/libzip-1.11.3/build-emcmake/ossfuzz/CMakeFiles/zip_read_file_fuzzer.dir/fuzz_main.c.o.d new file mode 100644 index 0000000..5c70524 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/ossfuzz/CMakeFiles/zip_read_file_fuzzer.dir/fuzz_main.c.o.d @@ -0,0 +1,21 @@ +ossfuzz/CMakeFiles/zip_read_file_fuzzer.dir/fuzz_main.c.o: \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/ossfuzz/fuzz_main.c \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdio.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/wasi/api.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stddef.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stddef.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_header_macro.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_ptrdiff_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_size_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_wchar_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_null.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_max_align_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_offsetof.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stdint.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdint.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/alltypes.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/stdint.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/features.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/stdlib.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdlib.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/alloca.h diff --git a/thirdparty/libzip-1.11.3/build-emcmake/ossfuzz/CMakeFiles/zip_read_file_fuzzer.dir/link.txt b/thirdparty/libzip-1.11.3/build-emcmake/ossfuzz/CMakeFiles/zip_read_file_fuzzer.dir/link.txt new file mode 100644 index 0000000..8cf9704 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/ossfuzz/CMakeFiles/zip_read_file_fuzzer.dir/link.txt @@ -0,0 +1 @@ +"/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" @CMakeFiles/zip_read_file_fuzzer.dir/objects1.rsp -o zip_read_file_fuzzer.js @CMakeFiles/zip_read_file_fuzzer.dir/linkLibs.rsp diff --git a/thirdparty/libzip-1.11.3/build-emcmake/ossfuzz/CMakeFiles/zip_read_file_fuzzer.dir/progress.make b/thirdparty/libzip-1.11.3/build-emcmake/ossfuzz/CMakeFiles/zip_read_file_fuzzer.dir/progress.make new file mode 100644 index 0000000..4e5cc75 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/ossfuzz/CMakeFiles/zip_read_file_fuzzer.dir/progress.make @@ -0,0 +1,4 @@ +CMAKE_PROGRESS_1 = 96 +CMAKE_PROGRESS_2 = +CMAKE_PROGRESS_3 = + diff --git a/thirdparty/libzip-1.11.3/build-emcmake/ossfuzz/CMakeFiles/zip_read_file_fuzzer.dir/zip_read_file_fuzzer.c.o b/thirdparty/libzip-1.11.3/build-emcmake/ossfuzz/CMakeFiles/zip_read_file_fuzzer.dir/zip_read_file_fuzzer.c.o new file mode 100644 index 0000000000000000000000000000000000000000..fbd61b86d0a0db4ce8ccdc857143e6404169b6c9 GIT binary patch literal 3745 zcmZu!Yit}>6+ZLY$INtO5jHoej!A82_!(`Pg)6q5LEqv5Ji!Y3PLT41n17|bd#7L zyL0b%zI)Dh&fa_W4x}op0ssiV*xK3x?Sizqxd|79O<~g+(nFxRxXA(jy+QCs)w)45 zAY7(3RXd1Zdx`usOJ?y>B$+Jaie}16u9~YQ>xu|M6|UH+^u=Vklq=e%C2cxz!_{0l zX*&k8Mu6ZwrmkG3nE_~uF4+>$Mo&0;cF%$P5LkE0>S-2)de!HQpI#t zI)wY?8Yg6Om2`?!I3j%(RpC;Vt~fzmd3uuPT`VOFrF6>9m5LDHAp#GU!I!;kZ#mviIbj!`OgCNjhpg@ zOuufBKI*2lA#I8q3XQ|`@zGr0?4lK0z@)_1HId0Ep?r}ksB}9pDhP&nZ%d?sV2B?% z1JMxw#RpMtV7>$}Kl;!=#{vm~1u=lZHKvMF;uNa0bwFkfwW#QZ3Grp*hSg!6?m}Vm z9X3QrxYG!RFoKHiWYX@@b=372i2xx%^CH*t0V!b(SdR_5Q-ez+*R&kY;Sc zX8mREhqX}HmNDu5EpZyy4w~#3lm50Pic``QDt&y&TKRwotPNYS?KEqr{5r55JJwhy zcFxubp6{LBid__BH}1q;xLg0U69&mM8sY+{E-*&+J;-p+9P1)y-PncQYplm9R*ze( zy|~vaRm)#LByD6Ny#S&h2 z(>Ptt?kGh+YKUA!!Vm`%KX5e7BnH?lL9=-_hevP*=c?H``(l9|!(;kq9p*e0`#8?y z@p<+riFphk#mCmz0*P60#hkzso|u!Km_=N?#ZGx*9>>S4VxFLoPZ(l1Jx&=SCf;#E zoK7G+L(rK#JBugrG@h-M+9?X(M(3sl_9ULeCqKo`6ZgEc&)llHN9ZYhO8=bW?`e|! z3_gv|%(G`n@^knsKDWl6$LC$aNlbczFL)ADn5s%#BIiqnIF-2T_(~^!4lF}hCeKW~ zfN3=EJ5>DWW-+UOo^v(l@Gld0InP#brJKMlh-h#6ghj7Gh*bo(g@fJXRkeoJ=(^{5A#-?9`8EB#}mjV z2%5-KR~W`|JaC`zNp=tq)`U(HZ?YzIk{u#>hZ9kDgbYXWjJgChi9>i86Z)5&+E0^V zn)W-F7G*~h``8R2GkIzcv(y{r@TmS}PUQ9}c8u(Nqt554DIBMc0MrqV@t&aH^jMQ@ z0T*hLP7wVBNpg0>0z1i1z#?IbdFl|Sswd!NMAL53UlXYGSEqH%@|zCwf9+gx8BhG*v&62AT+`#YZm;MauzL%6$*@Q{M*f)=#RiXErB z1qr$#Xwu~+8r&4L&UC8SYh#*X+ol`2x2MwUX}c|GT`t49uV5x+r_e5KC%!9a9aUHS z8nun^TYi!B(+%<>B_IYqc6JKLjaqj7>Q&Q9^4vuo1l?D$Gj!hp8jHU8LY(eR03DzU zpo^eOpv#~up!)vs+Kn)m{I1sD>BQgh6kegZ-7S5fRb2OZx3N04R z#X2*d}e9uGl7+o9p@(8zXZbUS2hhsL%;x> zKbAw%>k6SiQdIelQU~yXqQHNYu=E`tp}+R2@}GSXfPecGc+0O#zxNaRcfTrs?5_v7 z8BpNOK!gA7fZ+cPeclTQ@`r&YfUgFdm+fS0(Z5Ya8GN7H$pq5UxkSAyHG3qHPj~G3+*D;briF% z8U9$e8(s<{d@l^}!*H|z{jdNZ@$M2V(+|9!Hm!;fqG8&sRLo3l>58DF3#sDr`Juu1 zKzv|1XJd55w#$_R`)Rzgz7$WFR`(YQm)x%yEzO&0n=WNzqo$FW7?_wCF~&04iD6^d z983+TGouru1L^c|W+dcvRUa5RC3G3nE8VJKXL(wcK`qY literal 0 HcmV?d00001 diff --git a/thirdparty/libzip-1.11.3/build-emcmake/ossfuzz/CMakeFiles/zip_read_file_fuzzer.dir/zip_read_file_fuzzer.c.o.d b/thirdparty/libzip-1.11.3/build-emcmake/ossfuzz/CMakeFiles/zip_read_file_fuzzer.dir/zip_read_file_fuzzer.c.o.d new file mode 100644 index 0000000..4e013c0 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/ossfuzz/CMakeFiles/zip_read_file_fuzzer.dir/zip_read_file_fuzzer.c.o.d @@ -0,0 +1,36 @@ +ossfuzz/CMakeFiles/zip_read_file_fuzzer.dir/zip_read_file_fuzzer.c.o: \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/ossfuzz/zip_read_file_fuzzer.c \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/errno.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/features.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/errno.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/wasi/api.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stddef.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stddef.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_header_macro.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_ptrdiff_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_size_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_wchar_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_null.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_max_align_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_offsetof.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stdint.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdint.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/alltypes.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/stdint.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdio.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/stdlib.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdlib.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/alloca.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/string.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/string.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/strings.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/time.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/time.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/zipconf.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/inttypes.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/inttypes.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/sys/types.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/endian.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/sys/select.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/ossfuzz/zip_read_fuzzer_common.h diff --git a/thirdparty/libzip-1.11.3/build-emcmake/ossfuzz/CMakeFiles/zip_read_fuzzer.dir/DependInfo.cmake b/thirdparty/libzip-1.11.3/build-emcmake/ossfuzz/CMakeFiles/zip_read_fuzzer.dir/DependInfo.cmake new file mode 100644 index 0000000..e6a6e6d --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/ossfuzz/CMakeFiles/zip_read_fuzzer.dir/DependInfo.cmake @@ -0,0 +1,24 @@ + +# Consider dependencies only in project. +set(CMAKE_DEPENDS_IN_PROJECT_ONLY OFF) + +# The set of languages for which implicit dependencies are needed: +set(CMAKE_DEPENDS_LANGUAGES + ) + +# The set of dependency files which are needed: +set(CMAKE_DEPENDS_DEPENDENCY_FILES + "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/ossfuzz/fuzz_main.c" "ossfuzz/CMakeFiles/zip_read_fuzzer.dir/fuzz_main.c.o" "gcc" "ossfuzz/CMakeFiles/zip_read_fuzzer.dir/fuzz_main.c.o.d" + "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/ossfuzz/zip_read_fuzzer.c" "ossfuzz/CMakeFiles/zip_read_fuzzer.dir/zip_read_fuzzer.c.o" "gcc" "ossfuzz/CMakeFiles/zip_read_fuzzer.dir/zip_read_fuzzer.c.o.d" + ) + +# Targets to which this target links which contain Fortran sources. +set(CMAKE_Fortran_TARGET_LINKED_INFO_FILES + ) + +# Targets to which this target links which contain Fortran sources. +set(CMAKE_Fortran_TARGET_FORWARD_LINKED_INFO_FILES + ) + +# Fortran module output directory. +set(CMAKE_Fortran_TARGET_MODULE_DIR "") diff --git a/thirdparty/libzip-1.11.3/build-emcmake/ossfuzz/CMakeFiles/zip_read_fuzzer.dir/build.make b/thirdparty/libzip-1.11.3/build-emcmake/ossfuzz/CMakeFiles/zip_read_fuzzer.dir/build.make new file mode 100644 index 0000000..888fdc9 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/ossfuzz/CMakeFiles/zip_read_fuzzer.dir/build.make @@ -0,0 +1,132 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.28 + +# Delete rule output on recipe failure. +.DELETE_ON_ERROR: + +#============================================================================= +# Special targets provided by cmake. + +# Disable implicit rules so canonical targets will work. +.SUFFIXES: + +# Disable VCS-based implicit rules. +% : %,v + +# Disable VCS-based implicit rules. +% : RCS/% + +# Disable VCS-based implicit rules. +% : RCS/%,v + +# Disable VCS-based implicit rules. +% : SCCS/s.% + +# Disable VCS-based implicit rules. +% : s.% + +.SUFFIXES: .hpux_make_needs_suffix_list + +# Command-line flag to silence nested $(MAKE). +$(VERBOSE)MAKESILENT = -s + +#Suppress display of executed commands. +$(VERBOSE).SILENT: + +# A target that is always out of date. +cmake_force: +.PHONY : cmake_force + +#============================================================================= +# Set environment variables for the build. + +# The shell in which to execute make rules. +SHELL = /bin/sh + +# The CMake executable. +CMAKE_COMMAND = /usr/bin/cmake + +# The command to remove a file. +RM = /usr/bin/cmake -E rm -f + +# Escaping for special characters. +EQUALS = = + +# The top-level source directory on which CMake was run. +CMAKE_SOURCE_DIR = "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3" + +# The top-level build directory on which CMake was run. +CMAKE_BINARY_DIR = "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" + +# Include any dependencies generated for this target. +include ossfuzz/CMakeFiles/zip_read_fuzzer.dir/depend.make +# Include any dependencies generated by the compiler for this target. +include ossfuzz/CMakeFiles/zip_read_fuzzer.dir/compiler_depend.make + +# Include the progress variables for this target. +include ossfuzz/CMakeFiles/zip_read_fuzzer.dir/progress.make + +# Include the compile flags for this target's objects. +include ossfuzz/CMakeFiles/zip_read_fuzzer.dir/flags.make + +ossfuzz/CMakeFiles/zip_read_fuzzer.dir/zip_read_fuzzer.c.o: ossfuzz/CMakeFiles/zip_read_fuzzer.dir/flags.make +ossfuzz/CMakeFiles/zip_read_fuzzer.dir/zip_read_fuzzer.c.o: ossfuzz/CMakeFiles/zip_read_fuzzer.dir/includes_C.rsp +ossfuzz/CMakeFiles/zip_read_fuzzer.dir/zip_read_fuzzer.c.o: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/ossfuzz/zip_read_fuzzer.c +ossfuzz/CMakeFiles/zip_read_fuzzer.dir/zip_read_fuzzer.c.o: ossfuzz/CMakeFiles/zip_read_fuzzer.dir/compiler_depend.ts + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_1) "Building C object ossfuzz/CMakeFiles/zip_read_fuzzer.dir/zip_read_fuzzer.c.o" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/ossfuzz" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -MD -MT ossfuzz/CMakeFiles/zip_read_fuzzer.dir/zip_read_fuzzer.c.o -MF CMakeFiles/zip_read_fuzzer.dir/zip_read_fuzzer.c.o.d -o CMakeFiles/zip_read_fuzzer.dir/zip_read_fuzzer.c.o -c "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/ossfuzz/zip_read_fuzzer.c" + +ossfuzz/CMakeFiles/zip_read_fuzzer.dir/zip_read_fuzzer.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Preprocessing C source to CMakeFiles/zip_read_fuzzer.dir/zip_read_fuzzer.c.i" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/ossfuzz" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/ossfuzz/zip_read_fuzzer.c" > CMakeFiles/zip_read_fuzzer.dir/zip_read_fuzzer.c.i + +ossfuzz/CMakeFiles/zip_read_fuzzer.dir/zip_read_fuzzer.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Compiling C source to assembly CMakeFiles/zip_read_fuzzer.dir/zip_read_fuzzer.c.s" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/ossfuzz" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/ossfuzz/zip_read_fuzzer.c" -o CMakeFiles/zip_read_fuzzer.dir/zip_read_fuzzer.c.s + +ossfuzz/CMakeFiles/zip_read_fuzzer.dir/fuzz_main.c.o: ossfuzz/CMakeFiles/zip_read_fuzzer.dir/flags.make +ossfuzz/CMakeFiles/zip_read_fuzzer.dir/fuzz_main.c.o: ossfuzz/CMakeFiles/zip_read_fuzzer.dir/includes_C.rsp +ossfuzz/CMakeFiles/zip_read_fuzzer.dir/fuzz_main.c.o: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/ossfuzz/fuzz_main.c +ossfuzz/CMakeFiles/zip_read_fuzzer.dir/fuzz_main.c.o: ossfuzz/CMakeFiles/zip_read_fuzzer.dir/compiler_depend.ts + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_2) "Building C object ossfuzz/CMakeFiles/zip_read_fuzzer.dir/fuzz_main.c.o" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/ossfuzz" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -MD -MT ossfuzz/CMakeFiles/zip_read_fuzzer.dir/fuzz_main.c.o -MF CMakeFiles/zip_read_fuzzer.dir/fuzz_main.c.o.d -o CMakeFiles/zip_read_fuzzer.dir/fuzz_main.c.o -c "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/ossfuzz/fuzz_main.c" + +ossfuzz/CMakeFiles/zip_read_fuzzer.dir/fuzz_main.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Preprocessing C source to CMakeFiles/zip_read_fuzzer.dir/fuzz_main.c.i" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/ossfuzz" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/ossfuzz/fuzz_main.c" > CMakeFiles/zip_read_fuzzer.dir/fuzz_main.c.i + +ossfuzz/CMakeFiles/zip_read_fuzzer.dir/fuzz_main.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Compiling C source to assembly CMakeFiles/zip_read_fuzzer.dir/fuzz_main.c.s" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/ossfuzz" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/ossfuzz/fuzz_main.c" -o CMakeFiles/zip_read_fuzzer.dir/fuzz_main.c.s + +# Object files for target zip_read_fuzzer +zip_read_fuzzer_OBJECTS = \ +"CMakeFiles/zip_read_fuzzer.dir/zip_read_fuzzer.c.o" \ +"CMakeFiles/zip_read_fuzzer.dir/fuzz_main.c.o" + +# External object files for target zip_read_fuzzer +zip_read_fuzzer_EXTERNAL_OBJECTS = + +ossfuzz/zip_read_fuzzer.js: ossfuzz/CMakeFiles/zip_read_fuzzer.dir/zip_read_fuzzer.c.o +ossfuzz/zip_read_fuzzer.js: ossfuzz/CMakeFiles/zip_read_fuzzer.dir/fuzz_main.c.o +ossfuzz/zip_read_fuzzer.js: ossfuzz/CMakeFiles/zip_read_fuzzer.dir/build.make +ossfuzz/zip_read_fuzzer.js: lib/libzip.a +ossfuzz/zip_read_fuzzer.js: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/zlib-1.3.1/install/lib/libz.a +ossfuzz/zip_read_fuzzer.js: ossfuzz/CMakeFiles/zip_read_fuzzer.dir/linkLibs.rsp +ossfuzz/zip_read_fuzzer.js: ossfuzz/CMakeFiles/zip_read_fuzzer.dir/objects1.rsp +ossfuzz/zip_read_fuzzer.js: ossfuzz/CMakeFiles/zip_read_fuzzer.dir/link.txt + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_3) "Linking C executable zip_read_fuzzer.js" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/ossfuzz" && $(CMAKE_COMMAND) -E cmake_link_script CMakeFiles/zip_read_fuzzer.dir/link.txt --verbose=$(VERBOSE) + +# Rule to build all files generated by this target. +ossfuzz/CMakeFiles/zip_read_fuzzer.dir/build: ossfuzz/zip_read_fuzzer.js +.PHONY : ossfuzz/CMakeFiles/zip_read_fuzzer.dir/build + +ossfuzz/CMakeFiles/zip_read_fuzzer.dir/clean: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/ossfuzz" && $(CMAKE_COMMAND) -P CMakeFiles/zip_read_fuzzer.dir/cmake_clean.cmake +.PHONY : ossfuzz/CMakeFiles/zip_read_fuzzer.dir/clean + +ossfuzz/CMakeFiles/zip_read_fuzzer.dir/depend: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(CMAKE_COMMAND) -E cmake_depends "Unix Makefiles" "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3" "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/ossfuzz" "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/ossfuzz" "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/ossfuzz/CMakeFiles/zip_read_fuzzer.dir/DependInfo.cmake" "--color=$(COLOR)" +.PHONY : ossfuzz/CMakeFiles/zip_read_fuzzer.dir/depend + diff --git a/thirdparty/libzip-1.11.3/build-emcmake/ossfuzz/CMakeFiles/zip_read_fuzzer.dir/cmake_clean.cmake b/thirdparty/libzip-1.11.3/build-emcmake/ossfuzz/CMakeFiles/zip_read_fuzzer.dir/cmake_clean.cmake new file mode 100644 index 0000000..97825b4 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/ossfuzz/CMakeFiles/zip_read_fuzzer.dir/cmake_clean.cmake @@ -0,0 +1,13 @@ +file(REMOVE_RECURSE + "CMakeFiles/zip_read_fuzzer.dir/fuzz_main.c.o" + "CMakeFiles/zip_read_fuzzer.dir/fuzz_main.c.o.d" + "CMakeFiles/zip_read_fuzzer.dir/zip_read_fuzzer.c.o" + "CMakeFiles/zip_read_fuzzer.dir/zip_read_fuzzer.c.o.d" + "zip_read_fuzzer.js" + "zip_read_fuzzer.pdb" +) + +# Per-language clean rules from dependency scanning. +foreach(lang C) + include(CMakeFiles/zip_read_fuzzer.dir/cmake_clean_${lang}.cmake OPTIONAL) +endforeach() diff --git a/thirdparty/libzip-1.11.3/build-emcmake/ossfuzz/CMakeFiles/zip_read_fuzzer.dir/compiler_depend.make b/thirdparty/libzip-1.11.3/build-emcmake/ossfuzz/CMakeFiles/zip_read_fuzzer.dir/compiler_depend.make new file mode 100644 index 0000000..faf109f --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/ossfuzz/CMakeFiles/zip_read_fuzzer.dir/compiler_depend.make @@ -0,0 +1,2 @@ +# Empty compiler generated dependencies file for zip_read_fuzzer. +# This may be replaced when dependencies are built. diff --git a/thirdparty/libzip-1.11.3/build-emcmake/ossfuzz/CMakeFiles/zip_read_fuzzer.dir/compiler_depend.ts b/thirdparty/libzip-1.11.3/build-emcmake/ossfuzz/CMakeFiles/zip_read_fuzzer.dir/compiler_depend.ts new file mode 100644 index 0000000..e796585 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/ossfuzz/CMakeFiles/zip_read_fuzzer.dir/compiler_depend.ts @@ -0,0 +1,2 @@ +# CMAKE generated file: DO NOT EDIT! +# Timestamp file for compiler generated dependencies management for zip_read_fuzzer. diff --git a/thirdparty/libzip-1.11.3/build-emcmake/ossfuzz/CMakeFiles/zip_read_fuzzer.dir/depend.make b/thirdparty/libzip-1.11.3/build-emcmake/ossfuzz/CMakeFiles/zip_read_fuzzer.dir/depend.make new file mode 100644 index 0000000..cb56b1e --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/ossfuzz/CMakeFiles/zip_read_fuzzer.dir/depend.make @@ -0,0 +1,2 @@ +# Empty dependencies file for zip_read_fuzzer. +# This may be replaced when dependencies are built. diff --git a/thirdparty/libzip-1.11.3/build-emcmake/ossfuzz/CMakeFiles/zip_read_fuzzer.dir/flags.make b/thirdparty/libzip-1.11.3/build-emcmake/ossfuzz/CMakeFiles/zip_read_fuzzer.dir/flags.make new file mode 100644 index 0000000..029776b --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/ossfuzz/CMakeFiles/zip_read_fuzzer.dir/flags.make @@ -0,0 +1,10 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.28 + +# compile C with /home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc +C_DEFINES = + +C_INCLUDES = @CMakeFiles/zip_read_fuzzer.dir/includes_C.rsp + +C_FLAGS = + diff --git a/thirdparty/libzip-1.11.3/build-emcmake/ossfuzz/CMakeFiles/zip_read_fuzzer.dir/fuzz_main.c.o b/thirdparty/libzip-1.11.3/build-emcmake/ossfuzz/CMakeFiles/zip_read_fuzzer.dir/fuzz_main.c.o new file mode 100644 index 0000000000000000000000000000000000000000..a829fe0013eceb8a67e4f5e9c9aae3d8598af89e GIT binary patch literal 1925 zcmZWqNplld5bk+1S}e)d^MWzPHvL#-gk;&WWXuvQzzbk7ODdI{7)wt=cr+u=jGVwB zay9~$1C^yJ%OMnpROOab<;o$Is^mshegWrPxn#MeXT~n$aGBTrz3%?LxAZ*Fou&c+ z%9G8_O$gm)osQDEt#9#~X3yTIpoA*TjbyoOG)$@6<)&;}_B{s57VNls zWv$$@8m234wd2E)TFWNC76gTAR!f=yUP7qmNV&F+yV5X#d3e~C?=;LRsJ_$G4a2Gg zGohL-^(tuoM6F_2jtnLSmzUqVy3oFVU)pa<$6YbyC9~Cb10IdCBvt#sTc!dDTF54Z zV?R9b-0#E6&CVf0HbJlw3KbcuYeGZqun(3%giym!k&Vy*MK(l(Qe*=(5hgQSWSqM%rU?-J*oXbxUxyeV<^dAn1#+>6Y7F8Y99$54iFpY3;?TO- zN4)z2-eDZx=G`CE9>Ec>_9)dEEix#5?o*86ejGz>w-7E4P<^D;2|R#^g8O?q9B?1R zgZx83`4H7QRAkWrKa7X@M;`9EQE`NH9mOMfbV(c|Glj=6wJyd<;&>qOI3C}Ym@fV3 z7d%0<8BF5|%YUW;&oLU}2l4 zSbFYPn4z4LSi~7Txtk^-W&`o3f+d}%if3>ZPvIFn&FLc1p`0b`4Lpl)EQ)hv&fz(n zTNfoFECqz;@%%R7h0+T@=OPi#;|08k^ScSTSilATi5E0XF^jac#jQh5h^0WwC0xQw z{GlJ?-xDq_Q|uMIj8_)LGHJMq%XoENTq6zFNJF4~1y{BT`$-9L9k268UKL8dK`n5T z$Zp;hxA0cb0(c`Ck3aU>KTILn^M{3>gC`CF82SN@HJqRNA&>qu1jNv;ImL z9&x~hv|ZGa>Y&Z2>vom4;t zuIvC)3`T)7-~?+sa9)Km;GrF0T7zET;T@n5qQX1^JPN!k^wQhga8K5@s=BLZx5yQ~ z8^}(Q#Q#B4uS5CQq3PG50x0mv+l`nl>F=4nuyS!;8;wMi$cUo8$3T0ar~qFpn)Z_t z0(ho`)xQ*izhDu7r%Z!iSQP$XUGOK1so$tH^Hhxk{H$v5yP8lpH9{V0-2mTe8vLg9 zs4qR_Uo8pnX-I?bLL7b#^}^pYJ`DFoo`eRj7HvYiB5g-WkXezABdc^9lu*Uc z&HCF@li6H0S8uqOy5qVn=hOt*ciOAjiq)JjjE&%vq13yw;^OqoOhFc_v$@&X>EcYa zHk&Wz<)ogkR133(T&0q)PSvV1R~Uycz0F9vbQh#su1Vc(+tP`qEtU; z#%j6g!3w=S8G4EuHnC-_4QU&eSx?8BZNqJB=tf(nlg+lPuNpE_H>_3NaMJyzWxBTB kYSER<)LO3h7^ai9tVvs%6`67GwWO1dI*q!Sk?*?y0Vk)%&j0`b literal 0 HcmV?d00001 diff --git a/thirdparty/libzip-1.11.3/build-emcmake/ossfuzz/CMakeFiles/zip_read_fuzzer.dir/fuzz_main.c.o.d b/thirdparty/libzip-1.11.3/build-emcmake/ossfuzz/CMakeFiles/zip_read_fuzzer.dir/fuzz_main.c.o.d new file mode 100644 index 0000000..eaf3ca9 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/ossfuzz/CMakeFiles/zip_read_fuzzer.dir/fuzz_main.c.o.d @@ -0,0 +1,21 @@ +ossfuzz/CMakeFiles/zip_read_fuzzer.dir/fuzz_main.c.o: \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/ossfuzz/fuzz_main.c \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdio.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/wasi/api.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stddef.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stddef.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_header_macro.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_ptrdiff_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_size_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_wchar_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_null.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_max_align_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_offsetof.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stdint.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdint.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/alltypes.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/stdint.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/features.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/stdlib.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdlib.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/alloca.h diff --git a/thirdparty/libzip-1.11.3/build-emcmake/ossfuzz/CMakeFiles/zip_read_fuzzer.dir/link.txt b/thirdparty/libzip-1.11.3/build-emcmake/ossfuzz/CMakeFiles/zip_read_fuzzer.dir/link.txt new file mode 100644 index 0000000..def90bd --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/ossfuzz/CMakeFiles/zip_read_fuzzer.dir/link.txt @@ -0,0 +1 @@ +"/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" @CMakeFiles/zip_read_fuzzer.dir/objects1.rsp -o zip_read_fuzzer.js @CMakeFiles/zip_read_fuzzer.dir/linkLibs.rsp diff --git a/thirdparty/libzip-1.11.3/build-emcmake/ossfuzz/CMakeFiles/zip_read_fuzzer.dir/progress.make b/thirdparty/libzip-1.11.3/build-emcmake/ossfuzz/CMakeFiles/zip_read_fuzzer.dir/progress.make new file mode 100644 index 0000000..72a20e5 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/ossfuzz/CMakeFiles/zip_read_fuzzer.dir/progress.make @@ -0,0 +1,4 @@ +CMAKE_PROGRESS_1 = +CMAKE_PROGRESS_2 = +CMAKE_PROGRESS_3 = 97 + diff --git a/thirdparty/libzip-1.11.3/build-emcmake/ossfuzz/CMakeFiles/zip_read_fuzzer.dir/zip_read_fuzzer.c.o b/thirdparty/libzip-1.11.3/build-emcmake/ossfuzz/CMakeFiles/zip_read_fuzzer.dir/zip_read_fuzzer.c.o new file mode 100644 index 0000000000000000000000000000000000000000..739cb9fd7eb3adcd71809b93ef87f136619f20c9 GIT binary patch literal 2938 zcmZuzOK==V8UCkdX5Z4b9+oA`kH7V>9_wA}xr&^`(aM%$Cvu#`k2ufuYPVO~)oOP& zGb>^jrClcw1A%aWDxf%V0H0C?2PnXl;g$;r=K>s{3aU5&l`0Afs6au%-!mFZu{q34 z_xHcP|DW!^8*=uh1_0WRTCEm@uj|cb6RvAbt?3TwqtTo-6`to&e2xbC4`rAoNV@783^Q zXlw`*%^?>?6Cut1-C{J*((Ge*z|!n*YA~tPPNS17adN zu>(7~TZ0D%UD)Lr_}bk>3?W3wxBPdIi`l9 zR}Dx(^kFadT@r^VzkWP~{afNN9$sqGeBVcWi=!0e7#_i+c#MD64TIzv(`-elt_VT$ z0Tei}EC$Kh5DwzdmKb)6HS87ZI3D+lHR8J+#nC%r%#SvXEB2B#KFpYCt;xT-TiV%Y+{gN@ICFZG?r*IxmT@sIz-V^vZKCva9 zq^0nrm)&VR?PvFtpWOm3+z}Z+yG2~w&F&0EKa*yPL?+E9GCy!Roy|;$C4!d9Vi}*p zv$(vQox3hp#MAgR|D3CNj*5LA&*AxV;u#|IEIxzJZiy8lv*MAtfERo+&-r97;>A1S zd7sP+_`)uk7b)b6X*NWk=hF-`AG#qfWl&ru=yF+H!RPQ2UfC2-D~bT^Qz`;p_lPx{(0BmD@6HKd<9=UCtf4Uuj6a@`j&VD-|z@$G3yh)?o-TR zZkOUJIbTh)h0I5;uYBfbAPR&P%0l9G%%j}5snpgjVv&DA=|IeY6L>&lAy1l`)Ra892TU;qg!X`GT>;@eV8&2D1PtD@vU2sp zvdiJJw4IApdA?e2IKZR8W5CnsHSWnulUPFla#BgS9#D8Rdh2|qDn`Zr8Me{4pK`(_)!A59bfWwz_z2@v{0 zAY%L`5C`~2z=ZdMT>oW|&_4wu#y^7{0AC52@a<4%@NP&8{+yoQg*134+zt1_2jD;9 z0DLdfWBej=5a9Q;CchT#4c?1t@UbdgxK5R8q+!stU%PoTYApMY>}(ENO=l(bYy}BkA2x6Y+hMWUcNb zdh)qSB}sR~l10&ywQXrtYSpzwWRtF$rR`j$ArtY CMakeFiles/zip_write_encrypt_aes256_file_fuzzer.dir/zip_write_encrypt_aes256_file_fuzzer.c.i + +ossfuzz/CMakeFiles/zip_write_encrypt_aes256_file_fuzzer.dir/zip_write_encrypt_aes256_file_fuzzer.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Compiling C source to assembly CMakeFiles/zip_write_encrypt_aes256_file_fuzzer.dir/zip_write_encrypt_aes256_file_fuzzer.c.s" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/ossfuzz" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/ossfuzz/zip_write_encrypt_aes256_file_fuzzer.c" -o CMakeFiles/zip_write_encrypt_aes256_file_fuzzer.dir/zip_write_encrypt_aes256_file_fuzzer.c.s + +ossfuzz/CMakeFiles/zip_write_encrypt_aes256_file_fuzzer.dir/fuzz_main.c.o: ossfuzz/CMakeFiles/zip_write_encrypt_aes256_file_fuzzer.dir/flags.make +ossfuzz/CMakeFiles/zip_write_encrypt_aes256_file_fuzzer.dir/fuzz_main.c.o: ossfuzz/CMakeFiles/zip_write_encrypt_aes256_file_fuzzer.dir/includes_C.rsp +ossfuzz/CMakeFiles/zip_write_encrypt_aes256_file_fuzzer.dir/fuzz_main.c.o: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/ossfuzz/fuzz_main.c +ossfuzz/CMakeFiles/zip_write_encrypt_aes256_file_fuzzer.dir/fuzz_main.c.o: ossfuzz/CMakeFiles/zip_write_encrypt_aes256_file_fuzzer.dir/compiler_depend.ts + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_2) "Building C object ossfuzz/CMakeFiles/zip_write_encrypt_aes256_file_fuzzer.dir/fuzz_main.c.o" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/ossfuzz" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -MD -MT ossfuzz/CMakeFiles/zip_write_encrypt_aes256_file_fuzzer.dir/fuzz_main.c.o -MF CMakeFiles/zip_write_encrypt_aes256_file_fuzzer.dir/fuzz_main.c.o.d -o CMakeFiles/zip_write_encrypt_aes256_file_fuzzer.dir/fuzz_main.c.o -c "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/ossfuzz/fuzz_main.c" + +ossfuzz/CMakeFiles/zip_write_encrypt_aes256_file_fuzzer.dir/fuzz_main.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Preprocessing C source to CMakeFiles/zip_write_encrypt_aes256_file_fuzzer.dir/fuzz_main.c.i" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/ossfuzz" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/ossfuzz/fuzz_main.c" > CMakeFiles/zip_write_encrypt_aes256_file_fuzzer.dir/fuzz_main.c.i + +ossfuzz/CMakeFiles/zip_write_encrypt_aes256_file_fuzzer.dir/fuzz_main.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Compiling C source to assembly CMakeFiles/zip_write_encrypt_aes256_file_fuzzer.dir/fuzz_main.c.s" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/ossfuzz" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/ossfuzz/fuzz_main.c" -o CMakeFiles/zip_write_encrypt_aes256_file_fuzzer.dir/fuzz_main.c.s + +# Object files for target zip_write_encrypt_aes256_file_fuzzer +zip_write_encrypt_aes256_file_fuzzer_OBJECTS = \ +"CMakeFiles/zip_write_encrypt_aes256_file_fuzzer.dir/zip_write_encrypt_aes256_file_fuzzer.c.o" \ +"CMakeFiles/zip_write_encrypt_aes256_file_fuzzer.dir/fuzz_main.c.o" + +# External object files for target zip_write_encrypt_aes256_file_fuzzer +zip_write_encrypt_aes256_file_fuzzer_EXTERNAL_OBJECTS = + +ossfuzz/zip_write_encrypt_aes256_file_fuzzer.js: ossfuzz/CMakeFiles/zip_write_encrypt_aes256_file_fuzzer.dir/zip_write_encrypt_aes256_file_fuzzer.c.o +ossfuzz/zip_write_encrypt_aes256_file_fuzzer.js: ossfuzz/CMakeFiles/zip_write_encrypt_aes256_file_fuzzer.dir/fuzz_main.c.o +ossfuzz/zip_write_encrypt_aes256_file_fuzzer.js: ossfuzz/CMakeFiles/zip_write_encrypt_aes256_file_fuzzer.dir/build.make +ossfuzz/zip_write_encrypt_aes256_file_fuzzer.js: lib/libzip.a +ossfuzz/zip_write_encrypt_aes256_file_fuzzer.js: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/zlib-1.3.1/install/lib/libz.a +ossfuzz/zip_write_encrypt_aes256_file_fuzzer.js: ossfuzz/CMakeFiles/zip_write_encrypt_aes256_file_fuzzer.dir/linkLibs.rsp +ossfuzz/zip_write_encrypt_aes256_file_fuzzer.js: ossfuzz/CMakeFiles/zip_write_encrypt_aes256_file_fuzzer.dir/objects1.rsp +ossfuzz/zip_write_encrypt_aes256_file_fuzzer.js: ossfuzz/CMakeFiles/zip_write_encrypt_aes256_file_fuzzer.dir/link.txt + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_3) "Linking C executable zip_write_encrypt_aes256_file_fuzzer.js" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/ossfuzz" && $(CMAKE_COMMAND) -E cmake_link_script CMakeFiles/zip_write_encrypt_aes256_file_fuzzer.dir/link.txt --verbose=$(VERBOSE) + +# Rule to build all files generated by this target. +ossfuzz/CMakeFiles/zip_write_encrypt_aes256_file_fuzzer.dir/build: ossfuzz/zip_write_encrypt_aes256_file_fuzzer.js +.PHONY : ossfuzz/CMakeFiles/zip_write_encrypt_aes256_file_fuzzer.dir/build + +ossfuzz/CMakeFiles/zip_write_encrypt_aes256_file_fuzzer.dir/clean: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/ossfuzz" && $(CMAKE_COMMAND) -P CMakeFiles/zip_write_encrypt_aes256_file_fuzzer.dir/cmake_clean.cmake +.PHONY : ossfuzz/CMakeFiles/zip_write_encrypt_aes256_file_fuzzer.dir/clean + +ossfuzz/CMakeFiles/zip_write_encrypt_aes256_file_fuzzer.dir/depend: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(CMAKE_COMMAND) -E cmake_depends "Unix Makefiles" "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3" "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/ossfuzz" "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/ossfuzz" "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/ossfuzz/CMakeFiles/zip_write_encrypt_aes256_file_fuzzer.dir/DependInfo.cmake" "--color=$(COLOR)" +.PHONY : ossfuzz/CMakeFiles/zip_write_encrypt_aes256_file_fuzzer.dir/depend + diff --git a/thirdparty/libzip-1.11.3/build-emcmake/ossfuzz/CMakeFiles/zip_write_encrypt_aes256_file_fuzzer.dir/cmake_clean.cmake b/thirdparty/libzip-1.11.3/build-emcmake/ossfuzz/CMakeFiles/zip_write_encrypt_aes256_file_fuzzer.dir/cmake_clean.cmake new file mode 100644 index 0000000..8349ff9 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/ossfuzz/CMakeFiles/zip_write_encrypt_aes256_file_fuzzer.dir/cmake_clean.cmake @@ -0,0 +1,13 @@ +file(REMOVE_RECURSE + "CMakeFiles/zip_write_encrypt_aes256_file_fuzzer.dir/fuzz_main.c.o" + "CMakeFiles/zip_write_encrypt_aes256_file_fuzzer.dir/fuzz_main.c.o.d" + "CMakeFiles/zip_write_encrypt_aes256_file_fuzzer.dir/zip_write_encrypt_aes256_file_fuzzer.c.o" + "CMakeFiles/zip_write_encrypt_aes256_file_fuzzer.dir/zip_write_encrypt_aes256_file_fuzzer.c.o.d" + "zip_write_encrypt_aes256_file_fuzzer.js" + "zip_write_encrypt_aes256_file_fuzzer.pdb" +) + +# Per-language clean rules from dependency scanning. +foreach(lang C) + include(CMakeFiles/zip_write_encrypt_aes256_file_fuzzer.dir/cmake_clean_${lang}.cmake OPTIONAL) +endforeach() diff --git a/thirdparty/libzip-1.11.3/build-emcmake/ossfuzz/CMakeFiles/zip_write_encrypt_aes256_file_fuzzer.dir/compiler_depend.make b/thirdparty/libzip-1.11.3/build-emcmake/ossfuzz/CMakeFiles/zip_write_encrypt_aes256_file_fuzzer.dir/compiler_depend.make new file mode 100644 index 0000000..254d3c7 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/ossfuzz/CMakeFiles/zip_write_encrypt_aes256_file_fuzzer.dir/compiler_depend.make @@ -0,0 +1,2 @@ +# Empty compiler generated dependencies file for zip_write_encrypt_aes256_file_fuzzer. +# This may be replaced when dependencies are built. diff --git a/thirdparty/libzip-1.11.3/build-emcmake/ossfuzz/CMakeFiles/zip_write_encrypt_aes256_file_fuzzer.dir/compiler_depend.ts b/thirdparty/libzip-1.11.3/build-emcmake/ossfuzz/CMakeFiles/zip_write_encrypt_aes256_file_fuzzer.dir/compiler_depend.ts new file mode 100644 index 0000000..a28ff17 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/ossfuzz/CMakeFiles/zip_write_encrypt_aes256_file_fuzzer.dir/compiler_depend.ts @@ -0,0 +1,2 @@ +# CMAKE generated file: DO NOT EDIT! +# Timestamp file for compiler generated dependencies management for zip_write_encrypt_aes256_file_fuzzer. diff --git a/thirdparty/libzip-1.11.3/build-emcmake/ossfuzz/CMakeFiles/zip_write_encrypt_aes256_file_fuzzer.dir/depend.make b/thirdparty/libzip-1.11.3/build-emcmake/ossfuzz/CMakeFiles/zip_write_encrypt_aes256_file_fuzzer.dir/depend.make new file mode 100644 index 0000000..61108c5 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/ossfuzz/CMakeFiles/zip_write_encrypt_aes256_file_fuzzer.dir/depend.make @@ -0,0 +1,2 @@ +# Empty dependencies file for zip_write_encrypt_aes256_file_fuzzer. +# This may be replaced when dependencies are built. diff --git a/thirdparty/libzip-1.11.3/build-emcmake/ossfuzz/CMakeFiles/zip_write_encrypt_aes256_file_fuzzer.dir/flags.make b/thirdparty/libzip-1.11.3/build-emcmake/ossfuzz/CMakeFiles/zip_write_encrypt_aes256_file_fuzzer.dir/flags.make new file mode 100644 index 0000000..272295e --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/ossfuzz/CMakeFiles/zip_write_encrypt_aes256_file_fuzzer.dir/flags.make @@ -0,0 +1,10 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.28 + +# compile C with /home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc +C_DEFINES = + +C_INCLUDES = @CMakeFiles/zip_write_encrypt_aes256_file_fuzzer.dir/includes_C.rsp + +C_FLAGS = + diff --git a/thirdparty/libzip-1.11.3/build-emcmake/ossfuzz/CMakeFiles/zip_write_encrypt_aes256_file_fuzzer.dir/fuzz_main.c.o b/thirdparty/libzip-1.11.3/build-emcmake/ossfuzz/CMakeFiles/zip_write_encrypt_aes256_file_fuzzer.dir/fuzz_main.c.o new file mode 100644 index 0000000000000000000000000000000000000000..a829fe0013eceb8a67e4f5e9c9aae3d8598af89e GIT binary patch literal 1925 zcmZWqNplld5bk+1S}e)d^MWzPHvL#-gk;&WWXuvQzzbk7ODdI{7)wt=cr+u=jGVwB zay9~$1C^yJ%OMnpROOab<;o$Is^mshegWrPxn#MeXT~n$aGBTrz3%?LxAZ*Fou&c+ z%9G8_O$gm)osQDEt#9#~X3yTIpoA*TjbyoOG)$@6<)&;}_B{s57VNls zWv$$@8m234wd2E)TFWNC76gTAR!f=yUP7qmNV&F+yV5X#d3e~C?=;LRsJ_$G4a2Gg zGohL-^(tuoM6F_2jtnLSmzUqVy3oFVU)pa<$6YbyC9~Cb10IdCBvt#sTc!dDTF54Z zV?R9b-0#E6&CVf0HbJlw3KbcuYeGZqun(3%giym!k&Vy*MK(l(Qe*=(5hgQSWSqM%rU?-J*oXbxUxyeV<^dAn1#+>6Y7F8Y99$54iFpY3;?TO- zN4)z2-eDZx=G`CE9>Ec>_9)dEEix#5?o*86ejGz>w-7E4P<^D;2|R#^g8O?q9B?1R zgZx83`4H7QRAkWrKa7X@M;`9EQE`NH9mOMfbV(c|Glj=6wJyd<;&>qOI3C}Ym@fV3 z7d%0<8BF5|%YUW;&oLU}2l4 zSbFYPn4z4LSi~7Txtk^-W&`o3f+d}%if3>ZPvIFn&FLc1p`0b`4Lpl)EQ)hv&fz(n zTNfoFECqz;@%%R7h0+T@=OPi#;|08k^ScSTSilATi5E0XF^jac#jQh5h^0WwC0xQw z{GlJ?-xDq_Q|uMIj8_)LGHJMq%XoENTq6zFNJF4~1y{BT`$-9L9k268UKL8dK`n5T z$Zp;hxA0cb0(c`Ck3aU>KTILn^M{3>gC`CF82SN@HJqRNA&>qu1jNv;ImL z9&x~hv|ZGa>Y&Z2>vom4;t zuIvC)3`T)7-~?+sa9)Km;GrF0T7zET;T@n5qQX1^JPN!k^wQhga8K5@s=BLZx5yQ~ z8^}(Q#Q#B4uS5CQq3PG50x0mv+l`nl>F=4nuyS!;8;wMi$cUo8$3T0ar~qFpn)Z_t z0(ho`)xQ*izhDu7r%Z!iSQP$XUGOK1so$tH^Hhxk{H$v5yP8lpH9{V0-2mTe8vLg9 zs4qR_Uo8pnX-I?bLL7b#^}^pYJ`DFoo`eRj7HvYiB5g-WkXezABdc^9lu*Uc z&HCF@li6H0S8uqOy5qVn=hOt*ciOAjiq)JjjE&%vq13yw;^OqoOhFc_v$@&X>EcYa zHk&Wz<)ogkR133(T&0q)PSvV1R~Uycz0F9vbQh#su1Vc(+tP`qEtU; z#%j6g!3w=S8G4EuHnC-_4QU&eSx?8BZNqJB=tf(nlg+lPuNpE_H>_3NaMJyzWxBTB kYSER<)LO3h7^ai9tVvs%6`67GwWO1dI*q!Sk?*?y0Vk)%&j0`b literal 0 HcmV?d00001 diff --git a/thirdparty/libzip-1.11.3/build-emcmake/ossfuzz/CMakeFiles/zip_write_encrypt_aes256_file_fuzzer.dir/fuzz_main.c.o.d b/thirdparty/libzip-1.11.3/build-emcmake/ossfuzz/CMakeFiles/zip_write_encrypt_aes256_file_fuzzer.dir/fuzz_main.c.o.d new file mode 100644 index 0000000..1365162 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/ossfuzz/CMakeFiles/zip_write_encrypt_aes256_file_fuzzer.dir/fuzz_main.c.o.d @@ -0,0 +1,21 @@ +ossfuzz/CMakeFiles/zip_write_encrypt_aes256_file_fuzzer.dir/fuzz_main.c.o: \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/ossfuzz/fuzz_main.c \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdio.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/wasi/api.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stddef.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stddef.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_header_macro.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_ptrdiff_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_size_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_wchar_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_null.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_max_align_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_offsetof.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stdint.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdint.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/alltypes.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/stdint.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/features.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/stdlib.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdlib.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/alloca.h diff --git a/thirdparty/libzip-1.11.3/build-emcmake/ossfuzz/CMakeFiles/zip_write_encrypt_aes256_file_fuzzer.dir/link.txt b/thirdparty/libzip-1.11.3/build-emcmake/ossfuzz/CMakeFiles/zip_write_encrypt_aes256_file_fuzzer.dir/link.txt new file mode 100644 index 0000000..77ca0eb --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/ossfuzz/CMakeFiles/zip_write_encrypt_aes256_file_fuzzer.dir/link.txt @@ -0,0 +1 @@ +"/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" @CMakeFiles/zip_write_encrypt_aes256_file_fuzzer.dir/objects1.rsp -o zip_write_encrypt_aes256_file_fuzzer.js @CMakeFiles/zip_write_encrypt_aes256_file_fuzzer.dir/linkLibs.rsp diff --git a/thirdparty/libzip-1.11.3/build-emcmake/ossfuzz/CMakeFiles/zip_write_encrypt_aes256_file_fuzzer.dir/progress.make b/thirdparty/libzip-1.11.3/build-emcmake/ossfuzz/CMakeFiles/zip_write_encrypt_aes256_file_fuzzer.dir/progress.make new file mode 100644 index 0000000..8eb4b49 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/ossfuzz/CMakeFiles/zip_write_encrypt_aes256_file_fuzzer.dir/progress.make @@ -0,0 +1,4 @@ +CMAKE_PROGRESS_1 = +CMAKE_PROGRESS_2 = +CMAKE_PROGRESS_3 = + diff --git a/thirdparty/libzip-1.11.3/build-emcmake/ossfuzz/CMakeFiles/zip_write_encrypt_aes256_file_fuzzer.dir/zip_write_encrypt_aes256_file_fuzzer.c.o b/thirdparty/libzip-1.11.3/build-emcmake/ossfuzz/CMakeFiles/zip_write_encrypt_aes256_file_fuzzer.dir/zip_write_encrypt_aes256_file_fuzzer.c.o new file mode 100644 index 0000000000000000000000000000000000000000..908b24142fbe0c31f7954ea742273bb257706394 GIT binary patch literal 2312 zcmZWrO>7%Q6n;Cq_S#vu-ZrJbP~J3YN$c8me!OW)3)%jJv`uMf(>Bl_XR{usP959X zT?g7j9ccLzJs<%Gdf0+^3sR_p`&WM@1cbS2*0Q-UCUMe=~m0BP?wH3l~k4SSO;v}wA8pV1;)PTv9RWkJJ zP0tm@$!57MJWwT`3h}@bo>%vxOugLjNVXg$8j?_|_^#uXKzoom(WyeGwEz&Gjxff=ayxaha2pvu?HSOT(|oeNrGrmD7H;{rS2K|Iqbyv@fga z(@vjltqz)<2hQx@fUC$*y~H)tIztpS1dEN+L$TPH9Wi4R#w<2!za1vVDU4fe#C|^v zbqaNh4covIG)!3RAZlG~lqWH1h5{R-xXo6$VSf)iMYPm3Ux6$5N^C;|SDK+?o~DVk z#Rf^r#59^id==%a##Oj_mbbG(Hi+$qR)F2&YlykVV&_tdA;kyzBl0oM*UHBjUx(}X zdR+e*-#}6u@ey2$8*rl;?hoHYxtlDuS5o)#M~U$mK8lYG@y)c@c)qx%6wXpV1lIpY=*dK=BR@{PHQ8Ta0D6D#rZ^Lcot1>3nPZ0fyrLMcA z;4t4FS=nLFe*-*&UAP^0V8(nc6y1qCKjB%*%vx->B<|)pvb76yxNDf_$#Xa6v3r*H zkmsJrb1(MZ_uLnGE?{B7vqe&t#Z3EFDBo|JoMdtLG#|h|?8kv6_V@BVxW}YpG!K!? zllbI=YG?y-@6u}aMed%$r})$O^rw7K#v|OeuQ9&gzIRXM2XH?gnB@m?9}eO{w9Pj{ z4~M9pAv}ab!~7YlXBeNs;aPr|>NyN!R>j#&)t+o9I8HuB>H z9iQf-cod(-(Ixc^^5^im2L+rU+KHtFoWzsno1w}WIXZ=7cxsrRCP!!RG@hB|O za`Zetf8Wsyk)yMCcEQm((miLfynREqAb#G?^9uxBnC3-%0ncOcAx9H9@xYNoG-uJ# zD4)d1g*!xsT$*)hHazm@cu8JhL7154Wh^gT;8NN!ew6F#ba)Lj5Pnc}gx^!Ja?~mS zY|}_K9N&MjPMrws4MtM-mYOpoDB5ClmK_R97}U}AgcAsi+8sviE{9wFHX_~vqhpat z9So(4%yK;UVr5S3Ss>nih)5kQA}+SE`@|cHu_v#g~f9tIY00KOob()ajsi|oag20_E$vx~+To0B=W zKC`P@or}J*lsYZk0Q>s;3&JW5BYgT)@xIl zwwY!%sLVOlrpTmcnt?M}71^n3ebTA=nf6+}7I;phK}R`TZUplEBa`+7y-(1^5ZT~z PL-?75Uzw_9#Y@3|p%6kc literal 0 HcmV?d00001 diff --git a/thirdparty/libzip-1.11.3/build-emcmake/ossfuzz/CMakeFiles/zip_write_encrypt_aes256_file_fuzzer.dir/zip_write_encrypt_aes256_file_fuzzer.c.o.d b/thirdparty/libzip-1.11.3/build-emcmake/ossfuzz/CMakeFiles/zip_write_encrypt_aes256_file_fuzzer.dir/zip_write_encrypt_aes256_file_fuzzer.c.o.d new file mode 100644 index 0000000..89ec2a8 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/ossfuzz/CMakeFiles/zip_write_encrypt_aes256_file_fuzzer.dir/zip_write_encrypt_aes256_file_fuzzer.c.o.d @@ -0,0 +1,33 @@ +ossfuzz/CMakeFiles/zip_write_encrypt_aes256_file_fuzzer.dir/zip_write_encrypt_aes256_file_fuzzer.c.o: \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/ossfuzz/zip_write_encrypt_aes256_file_fuzzer.c \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stdint.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdint.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/alltypes.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/stdint.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/stdlib.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdlib.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/features.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/alloca.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/string.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/string.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/strings.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/time.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/time.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/zipconf.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/inttypes.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/inttypes.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdio.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/wasi/api.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stddef.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stddef.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_header_macro.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_ptrdiff_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_size_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_wchar_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_null.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_max_align_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_offsetof.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/sys/types.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/endian.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/sys/select.h diff --git a/thirdparty/libzip-1.11.3/build-emcmake/ossfuzz/CMakeFiles/zip_write_encrypt_pkware_file_fuzzer.dir/DependInfo.cmake b/thirdparty/libzip-1.11.3/build-emcmake/ossfuzz/CMakeFiles/zip_write_encrypt_pkware_file_fuzzer.dir/DependInfo.cmake new file mode 100644 index 0000000..1509418 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/ossfuzz/CMakeFiles/zip_write_encrypt_pkware_file_fuzzer.dir/DependInfo.cmake @@ -0,0 +1,24 @@ + +# Consider dependencies only in project. +set(CMAKE_DEPENDS_IN_PROJECT_ONLY OFF) + +# The set of languages for which implicit dependencies are needed: +set(CMAKE_DEPENDS_LANGUAGES + ) + +# The set of dependency files which are needed: +set(CMAKE_DEPENDS_DEPENDENCY_FILES + "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/ossfuzz/fuzz_main.c" "ossfuzz/CMakeFiles/zip_write_encrypt_pkware_file_fuzzer.dir/fuzz_main.c.o" "gcc" "ossfuzz/CMakeFiles/zip_write_encrypt_pkware_file_fuzzer.dir/fuzz_main.c.o.d" + "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/ossfuzz/zip_write_encrypt_pkware_file_fuzzer.c" "ossfuzz/CMakeFiles/zip_write_encrypt_pkware_file_fuzzer.dir/zip_write_encrypt_pkware_file_fuzzer.c.o" "gcc" "ossfuzz/CMakeFiles/zip_write_encrypt_pkware_file_fuzzer.dir/zip_write_encrypt_pkware_file_fuzzer.c.o.d" + ) + +# Targets to which this target links which contain Fortran sources. +set(CMAKE_Fortran_TARGET_LINKED_INFO_FILES + ) + +# Targets to which this target links which contain Fortran sources. +set(CMAKE_Fortran_TARGET_FORWARD_LINKED_INFO_FILES + ) + +# Fortran module output directory. +set(CMAKE_Fortran_TARGET_MODULE_DIR "") diff --git a/thirdparty/libzip-1.11.3/build-emcmake/ossfuzz/CMakeFiles/zip_write_encrypt_pkware_file_fuzzer.dir/build.make b/thirdparty/libzip-1.11.3/build-emcmake/ossfuzz/CMakeFiles/zip_write_encrypt_pkware_file_fuzzer.dir/build.make new file mode 100644 index 0000000..c90db5e --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/ossfuzz/CMakeFiles/zip_write_encrypt_pkware_file_fuzzer.dir/build.make @@ -0,0 +1,132 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.28 + +# Delete rule output on recipe failure. +.DELETE_ON_ERROR: + +#============================================================================= +# Special targets provided by cmake. + +# Disable implicit rules so canonical targets will work. +.SUFFIXES: + +# Disable VCS-based implicit rules. +% : %,v + +# Disable VCS-based implicit rules. +% : RCS/% + +# Disable VCS-based implicit rules. +% : RCS/%,v + +# Disable VCS-based implicit rules. +% : SCCS/s.% + +# Disable VCS-based implicit rules. +% : s.% + +.SUFFIXES: .hpux_make_needs_suffix_list + +# Command-line flag to silence nested $(MAKE). +$(VERBOSE)MAKESILENT = -s + +#Suppress display of executed commands. +$(VERBOSE).SILENT: + +# A target that is always out of date. +cmake_force: +.PHONY : cmake_force + +#============================================================================= +# Set environment variables for the build. + +# The shell in which to execute make rules. +SHELL = /bin/sh + +# The CMake executable. +CMAKE_COMMAND = /usr/bin/cmake + +# The command to remove a file. +RM = /usr/bin/cmake -E rm -f + +# Escaping for special characters. +EQUALS = = + +# The top-level source directory on which CMake was run. +CMAKE_SOURCE_DIR = "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3" + +# The top-level build directory on which CMake was run. +CMAKE_BINARY_DIR = "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" + +# Include any dependencies generated for this target. +include ossfuzz/CMakeFiles/zip_write_encrypt_pkware_file_fuzzer.dir/depend.make +# Include any dependencies generated by the compiler for this target. +include ossfuzz/CMakeFiles/zip_write_encrypt_pkware_file_fuzzer.dir/compiler_depend.make + +# Include the progress variables for this target. +include ossfuzz/CMakeFiles/zip_write_encrypt_pkware_file_fuzzer.dir/progress.make + +# Include the compile flags for this target's objects. +include ossfuzz/CMakeFiles/zip_write_encrypt_pkware_file_fuzzer.dir/flags.make + +ossfuzz/CMakeFiles/zip_write_encrypt_pkware_file_fuzzer.dir/zip_write_encrypt_pkware_file_fuzzer.c.o: ossfuzz/CMakeFiles/zip_write_encrypt_pkware_file_fuzzer.dir/flags.make +ossfuzz/CMakeFiles/zip_write_encrypt_pkware_file_fuzzer.dir/zip_write_encrypt_pkware_file_fuzzer.c.o: ossfuzz/CMakeFiles/zip_write_encrypt_pkware_file_fuzzer.dir/includes_C.rsp +ossfuzz/CMakeFiles/zip_write_encrypt_pkware_file_fuzzer.dir/zip_write_encrypt_pkware_file_fuzzer.c.o: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/ossfuzz/zip_write_encrypt_pkware_file_fuzzer.c +ossfuzz/CMakeFiles/zip_write_encrypt_pkware_file_fuzzer.dir/zip_write_encrypt_pkware_file_fuzzer.c.o: ossfuzz/CMakeFiles/zip_write_encrypt_pkware_file_fuzzer.dir/compiler_depend.ts + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_1) "Building C object ossfuzz/CMakeFiles/zip_write_encrypt_pkware_file_fuzzer.dir/zip_write_encrypt_pkware_file_fuzzer.c.o" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/ossfuzz" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -MD -MT ossfuzz/CMakeFiles/zip_write_encrypt_pkware_file_fuzzer.dir/zip_write_encrypt_pkware_file_fuzzer.c.o -MF CMakeFiles/zip_write_encrypt_pkware_file_fuzzer.dir/zip_write_encrypt_pkware_file_fuzzer.c.o.d -o CMakeFiles/zip_write_encrypt_pkware_file_fuzzer.dir/zip_write_encrypt_pkware_file_fuzzer.c.o -c "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/ossfuzz/zip_write_encrypt_pkware_file_fuzzer.c" + +ossfuzz/CMakeFiles/zip_write_encrypt_pkware_file_fuzzer.dir/zip_write_encrypt_pkware_file_fuzzer.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Preprocessing C source to CMakeFiles/zip_write_encrypt_pkware_file_fuzzer.dir/zip_write_encrypt_pkware_file_fuzzer.c.i" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/ossfuzz" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/ossfuzz/zip_write_encrypt_pkware_file_fuzzer.c" > CMakeFiles/zip_write_encrypt_pkware_file_fuzzer.dir/zip_write_encrypt_pkware_file_fuzzer.c.i + +ossfuzz/CMakeFiles/zip_write_encrypt_pkware_file_fuzzer.dir/zip_write_encrypt_pkware_file_fuzzer.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Compiling C source to assembly CMakeFiles/zip_write_encrypt_pkware_file_fuzzer.dir/zip_write_encrypt_pkware_file_fuzzer.c.s" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/ossfuzz" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/ossfuzz/zip_write_encrypt_pkware_file_fuzzer.c" -o CMakeFiles/zip_write_encrypt_pkware_file_fuzzer.dir/zip_write_encrypt_pkware_file_fuzzer.c.s + +ossfuzz/CMakeFiles/zip_write_encrypt_pkware_file_fuzzer.dir/fuzz_main.c.o: ossfuzz/CMakeFiles/zip_write_encrypt_pkware_file_fuzzer.dir/flags.make +ossfuzz/CMakeFiles/zip_write_encrypt_pkware_file_fuzzer.dir/fuzz_main.c.o: ossfuzz/CMakeFiles/zip_write_encrypt_pkware_file_fuzzer.dir/includes_C.rsp +ossfuzz/CMakeFiles/zip_write_encrypt_pkware_file_fuzzer.dir/fuzz_main.c.o: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/ossfuzz/fuzz_main.c +ossfuzz/CMakeFiles/zip_write_encrypt_pkware_file_fuzzer.dir/fuzz_main.c.o: ossfuzz/CMakeFiles/zip_write_encrypt_pkware_file_fuzzer.dir/compiler_depend.ts + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_2) "Building C object ossfuzz/CMakeFiles/zip_write_encrypt_pkware_file_fuzzer.dir/fuzz_main.c.o" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/ossfuzz" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -MD -MT ossfuzz/CMakeFiles/zip_write_encrypt_pkware_file_fuzzer.dir/fuzz_main.c.o -MF CMakeFiles/zip_write_encrypt_pkware_file_fuzzer.dir/fuzz_main.c.o.d -o CMakeFiles/zip_write_encrypt_pkware_file_fuzzer.dir/fuzz_main.c.o -c "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/ossfuzz/fuzz_main.c" + +ossfuzz/CMakeFiles/zip_write_encrypt_pkware_file_fuzzer.dir/fuzz_main.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Preprocessing C source to CMakeFiles/zip_write_encrypt_pkware_file_fuzzer.dir/fuzz_main.c.i" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/ossfuzz" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/ossfuzz/fuzz_main.c" > CMakeFiles/zip_write_encrypt_pkware_file_fuzzer.dir/fuzz_main.c.i + +ossfuzz/CMakeFiles/zip_write_encrypt_pkware_file_fuzzer.dir/fuzz_main.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Compiling C source to assembly CMakeFiles/zip_write_encrypt_pkware_file_fuzzer.dir/fuzz_main.c.s" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/ossfuzz" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/ossfuzz/fuzz_main.c" -o CMakeFiles/zip_write_encrypt_pkware_file_fuzzer.dir/fuzz_main.c.s + +# Object files for target zip_write_encrypt_pkware_file_fuzzer +zip_write_encrypt_pkware_file_fuzzer_OBJECTS = \ +"CMakeFiles/zip_write_encrypt_pkware_file_fuzzer.dir/zip_write_encrypt_pkware_file_fuzzer.c.o" \ +"CMakeFiles/zip_write_encrypt_pkware_file_fuzzer.dir/fuzz_main.c.o" + +# External object files for target zip_write_encrypt_pkware_file_fuzzer +zip_write_encrypt_pkware_file_fuzzer_EXTERNAL_OBJECTS = + +ossfuzz/zip_write_encrypt_pkware_file_fuzzer.js: ossfuzz/CMakeFiles/zip_write_encrypt_pkware_file_fuzzer.dir/zip_write_encrypt_pkware_file_fuzzer.c.o +ossfuzz/zip_write_encrypt_pkware_file_fuzzer.js: ossfuzz/CMakeFiles/zip_write_encrypt_pkware_file_fuzzer.dir/fuzz_main.c.o +ossfuzz/zip_write_encrypt_pkware_file_fuzzer.js: ossfuzz/CMakeFiles/zip_write_encrypt_pkware_file_fuzzer.dir/build.make +ossfuzz/zip_write_encrypt_pkware_file_fuzzer.js: lib/libzip.a +ossfuzz/zip_write_encrypt_pkware_file_fuzzer.js: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/zlib-1.3.1/install/lib/libz.a +ossfuzz/zip_write_encrypt_pkware_file_fuzzer.js: ossfuzz/CMakeFiles/zip_write_encrypt_pkware_file_fuzzer.dir/linkLibs.rsp +ossfuzz/zip_write_encrypt_pkware_file_fuzzer.js: ossfuzz/CMakeFiles/zip_write_encrypt_pkware_file_fuzzer.dir/objects1.rsp +ossfuzz/zip_write_encrypt_pkware_file_fuzzer.js: ossfuzz/CMakeFiles/zip_write_encrypt_pkware_file_fuzzer.dir/link.txt + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_3) "Linking C executable zip_write_encrypt_pkware_file_fuzzer.js" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/ossfuzz" && $(CMAKE_COMMAND) -E cmake_link_script CMakeFiles/zip_write_encrypt_pkware_file_fuzzer.dir/link.txt --verbose=$(VERBOSE) + +# Rule to build all files generated by this target. +ossfuzz/CMakeFiles/zip_write_encrypt_pkware_file_fuzzer.dir/build: ossfuzz/zip_write_encrypt_pkware_file_fuzzer.js +.PHONY : ossfuzz/CMakeFiles/zip_write_encrypt_pkware_file_fuzzer.dir/build + +ossfuzz/CMakeFiles/zip_write_encrypt_pkware_file_fuzzer.dir/clean: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/ossfuzz" && $(CMAKE_COMMAND) -P CMakeFiles/zip_write_encrypt_pkware_file_fuzzer.dir/cmake_clean.cmake +.PHONY : ossfuzz/CMakeFiles/zip_write_encrypt_pkware_file_fuzzer.dir/clean + +ossfuzz/CMakeFiles/zip_write_encrypt_pkware_file_fuzzer.dir/depend: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(CMAKE_COMMAND) -E cmake_depends "Unix Makefiles" "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3" "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/ossfuzz" "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/ossfuzz" "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/ossfuzz/CMakeFiles/zip_write_encrypt_pkware_file_fuzzer.dir/DependInfo.cmake" "--color=$(COLOR)" +.PHONY : ossfuzz/CMakeFiles/zip_write_encrypt_pkware_file_fuzzer.dir/depend + diff --git a/thirdparty/libzip-1.11.3/build-emcmake/ossfuzz/CMakeFiles/zip_write_encrypt_pkware_file_fuzzer.dir/cmake_clean.cmake b/thirdparty/libzip-1.11.3/build-emcmake/ossfuzz/CMakeFiles/zip_write_encrypt_pkware_file_fuzzer.dir/cmake_clean.cmake new file mode 100644 index 0000000..342d6ef --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/ossfuzz/CMakeFiles/zip_write_encrypt_pkware_file_fuzzer.dir/cmake_clean.cmake @@ -0,0 +1,13 @@ +file(REMOVE_RECURSE + "CMakeFiles/zip_write_encrypt_pkware_file_fuzzer.dir/fuzz_main.c.o" + "CMakeFiles/zip_write_encrypt_pkware_file_fuzzer.dir/fuzz_main.c.o.d" + "CMakeFiles/zip_write_encrypt_pkware_file_fuzzer.dir/zip_write_encrypt_pkware_file_fuzzer.c.o" + "CMakeFiles/zip_write_encrypt_pkware_file_fuzzer.dir/zip_write_encrypt_pkware_file_fuzzer.c.o.d" + "zip_write_encrypt_pkware_file_fuzzer.js" + "zip_write_encrypt_pkware_file_fuzzer.pdb" +) + +# Per-language clean rules from dependency scanning. +foreach(lang C) + include(CMakeFiles/zip_write_encrypt_pkware_file_fuzzer.dir/cmake_clean_${lang}.cmake OPTIONAL) +endforeach() diff --git a/thirdparty/libzip-1.11.3/build-emcmake/ossfuzz/CMakeFiles/zip_write_encrypt_pkware_file_fuzzer.dir/compiler_depend.make b/thirdparty/libzip-1.11.3/build-emcmake/ossfuzz/CMakeFiles/zip_write_encrypt_pkware_file_fuzzer.dir/compiler_depend.make new file mode 100644 index 0000000..42a0479 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/ossfuzz/CMakeFiles/zip_write_encrypt_pkware_file_fuzzer.dir/compiler_depend.make @@ -0,0 +1,2 @@ +# Empty compiler generated dependencies file for zip_write_encrypt_pkware_file_fuzzer. +# This may be replaced when dependencies are built. diff --git a/thirdparty/libzip-1.11.3/build-emcmake/ossfuzz/CMakeFiles/zip_write_encrypt_pkware_file_fuzzer.dir/compiler_depend.ts b/thirdparty/libzip-1.11.3/build-emcmake/ossfuzz/CMakeFiles/zip_write_encrypt_pkware_file_fuzzer.dir/compiler_depend.ts new file mode 100644 index 0000000..6e6e613 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/ossfuzz/CMakeFiles/zip_write_encrypt_pkware_file_fuzzer.dir/compiler_depend.ts @@ -0,0 +1,2 @@ +# CMAKE generated file: DO NOT EDIT! +# Timestamp file for compiler generated dependencies management for zip_write_encrypt_pkware_file_fuzzer. diff --git a/thirdparty/libzip-1.11.3/build-emcmake/ossfuzz/CMakeFiles/zip_write_encrypt_pkware_file_fuzzer.dir/depend.make b/thirdparty/libzip-1.11.3/build-emcmake/ossfuzz/CMakeFiles/zip_write_encrypt_pkware_file_fuzzer.dir/depend.make new file mode 100644 index 0000000..dc39cf2 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/ossfuzz/CMakeFiles/zip_write_encrypt_pkware_file_fuzzer.dir/depend.make @@ -0,0 +1,2 @@ +# Empty dependencies file for zip_write_encrypt_pkware_file_fuzzer. +# This may be replaced when dependencies are built. diff --git a/thirdparty/libzip-1.11.3/build-emcmake/ossfuzz/CMakeFiles/zip_write_encrypt_pkware_file_fuzzer.dir/flags.make b/thirdparty/libzip-1.11.3/build-emcmake/ossfuzz/CMakeFiles/zip_write_encrypt_pkware_file_fuzzer.dir/flags.make new file mode 100644 index 0000000..48610fa --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/ossfuzz/CMakeFiles/zip_write_encrypt_pkware_file_fuzzer.dir/flags.make @@ -0,0 +1,10 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.28 + +# compile C with /home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc +C_DEFINES = + +C_INCLUDES = @CMakeFiles/zip_write_encrypt_pkware_file_fuzzer.dir/includes_C.rsp + +C_FLAGS = + diff --git a/thirdparty/libzip-1.11.3/build-emcmake/ossfuzz/CMakeFiles/zip_write_encrypt_pkware_file_fuzzer.dir/fuzz_main.c.o b/thirdparty/libzip-1.11.3/build-emcmake/ossfuzz/CMakeFiles/zip_write_encrypt_pkware_file_fuzzer.dir/fuzz_main.c.o new file mode 100644 index 0000000000000000000000000000000000000000..a829fe0013eceb8a67e4f5e9c9aae3d8598af89e GIT binary patch literal 1925 zcmZWqNplld5bk+1S}e)d^MWzPHvL#-gk;&WWXuvQzzbk7ODdI{7)wt=cr+u=jGVwB zay9~$1C^yJ%OMnpROOab<;o$Is^mshegWrPxn#MeXT~n$aGBTrz3%?LxAZ*Fou&c+ z%9G8_O$gm)osQDEt#9#~X3yTIpoA*TjbyoOG)$@6<)&;}_B{s57VNls zWv$$@8m234wd2E)TFWNC76gTAR!f=yUP7qmNV&F+yV5X#d3e~C?=;LRsJ_$G4a2Gg zGohL-^(tuoM6F_2jtnLSmzUqVy3oFVU)pa<$6YbyC9~Cb10IdCBvt#sTc!dDTF54Z zV?R9b-0#E6&CVf0HbJlw3KbcuYeGZqun(3%giym!k&Vy*MK(l(Qe*=(5hgQSWSqM%rU?-J*oXbxUxyeV<^dAn1#+>6Y7F8Y99$54iFpY3;?TO- zN4)z2-eDZx=G`CE9>Ec>_9)dEEix#5?o*86ejGz>w-7E4P<^D;2|R#^g8O?q9B?1R zgZx83`4H7QRAkWrKa7X@M;`9EQE`NH9mOMfbV(c|Glj=6wJyd<;&>qOI3C}Ym@fV3 z7d%0<8BF5|%YUW;&oLU}2l4 zSbFYPn4z4LSi~7Txtk^-W&`o3f+d}%if3>ZPvIFn&FLc1p`0b`4Lpl)EQ)hv&fz(n zTNfoFECqz;@%%R7h0+T@=OPi#;|08k^ScSTSilATi5E0XF^jac#jQh5h^0WwC0xQw z{GlJ?-xDq_Q|uMIj8_)LGHJMq%XoENTq6zFNJF4~1y{BT`$-9L9k268UKL8dK`n5T z$Zp;hxA0cb0(c`Ck3aU>KTILn^M{3>gC`CF82SN@HJqRNA&>qu1jNv;ImL z9&x~hv|ZGa>Y&Z2>vom4;t zuIvC)3`T)7-~?+sa9)Km;GrF0T7zET;T@n5qQX1^JPN!k^wQhga8K5@s=BLZx5yQ~ z8^}(Q#Q#B4uS5CQq3PG50x0mv+l`nl>F=4nuyS!;8;wMi$cUo8$3T0ar~qFpn)Z_t z0(ho`)xQ*izhDu7r%Z!iSQP$XUGOK1so$tH^Hhxk{H$v5yP8lpH9{V0-2mTe8vLg9 zs4qR_Uo8pnX-I?bLL7b#^}^pYJ`DFoo`eRj7HvYiB5g-WkXezABdc^9lu*Uc z&HCF@li6H0S8uqOy5qVn=hOt*ciOAjiq)JjjE&%vq13yw;^OqoOhFc_v$@&X>EcYa zHk&Wz<)ogkR133(T&0q)PSvV1R~Uycz0F9vbQh#su1Vc(+tP`qEtU; z#%j6g!3w=S8G4EuHnC-_4QU&eSx?8BZNqJB=tf(nlg+lPuNpE_H>_3NaMJyzWxBTB kYSER<)LO3h7^ai9tVvs%6`67GwWO1dI*q!Sk?*?y0Vk)%&j0`b literal 0 HcmV?d00001 diff --git a/thirdparty/libzip-1.11.3/build-emcmake/ossfuzz/CMakeFiles/zip_write_encrypt_pkware_file_fuzzer.dir/fuzz_main.c.o.d b/thirdparty/libzip-1.11.3/build-emcmake/ossfuzz/CMakeFiles/zip_write_encrypt_pkware_file_fuzzer.dir/fuzz_main.c.o.d new file mode 100644 index 0000000..cceaff6 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/ossfuzz/CMakeFiles/zip_write_encrypt_pkware_file_fuzzer.dir/fuzz_main.c.o.d @@ -0,0 +1,21 @@ +ossfuzz/CMakeFiles/zip_write_encrypt_pkware_file_fuzzer.dir/fuzz_main.c.o: \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/ossfuzz/fuzz_main.c \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdio.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/wasi/api.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stddef.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stddef.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_header_macro.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_ptrdiff_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_size_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_wchar_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_null.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_max_align_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_offsetof.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stdint.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdint.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/alltypes.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/stdint.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/features.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/stdlib.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdlib.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/alloca.h diff --git a/thirdparty/libzip-1.11.3/build-emcmake/ossfuzz/CMakeFiles/zip_write_encrypt_pkware_file_fuzzer.dir/link.txt b/thirdparty/libzip-1.11.3/build-emcmake/ossfuzz/CMakeFiles/zip_write_encrypt_pkware_file_fuzzer.dir/link.txt new file mode 100644 index 0000000..7409e32 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/ossfuzz/CMakeFiles/zip_write_encrypt_pkware_file_fuzzer.dir/link.txt @@ -0,0 +1 @@ +"/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" @CMakeFiles/zip_write_encrypt_pkware_file_fuzzer.dir/objects1.rsp -o zip_write_encrypt_pkware_file_fuzzer.js @CMakeFiles/zip_write_encrypt_pkware_file_fuzzer.dir/linkLibs.rsp diff --git a/thirdparty/libzip-1.11.3/build-emcmake/ossfuzz/CMakeFiles/zip_write_encrypt_pkware_file_fuzzer.dir/progress.make b/thirdparty/libzip-1.11.3/build-emcmake/ossfuzz/CMakeFiles/zip_write_encrypt_pkware_file_fuzzer.dir/progress.make new file mode 100644 index 0000000..4a17784 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/ossfuzz/CMakeFiles/zip_write_encrypt_pkware_file_fuzzer.dir/progress.make @@ -0,0 +1,4 @@ +CMAKE_PROGRESS_1 = 98 +CMAKE_PROGRESS_2 = +CMAKE_PROGRESS_3 = + diff --git a/thirdparty/libzip-1.11.3/build-emcmake/ossfuzz/CMakeFiles/zip_write_encrypt_pkware_file_fuzzer.dir/zip_write_encrypt_pkware_file_fuzzer.c.o b/thirdparty/libzip-1.11.3/build-emcmake/ossfuzz/CMakeFiles/zip_write_encrypt_pkware_file_fuzzer.dir/zip_write_encrypt_pkware_file_fuzzer.c.o new file mode 100644 index 0000000000000000000000000000000000000000..4c1b3aa4b298f485c8756a19137d46ef81f399da GIT binary patch literal 2267 zcmZXWPiz!b9LIn2W_D+{v#29vw1zzV3Nk9U8n1HnPYd~ph<=*stf5t zp;E32$1BWa@-@+f`~kcYvp>ORu@%Za>^PR`n87V zio#T*R1zMjQcs0?;0e#GdC^S0RQITCDVk_VL$U0;j#mWj@sv`zA_`8i2r(&bl%`Pf zMNkk`*SlH|%C#!QWi~0ZZl&f+v^V9BD3GFiq@8K|{T&(J*Y%CG18ZBKUCj>4E&^xv zec&oGRA;${T4$)DhG4M?x+oSKw<_|;aSG!W8?`?PL!Cn1Vk0*21Pv1w zJBnHt8{br z!7ki`dog3a9Twe(`@Y~=nwhoO0ckwIbA+`YbGUzm=ZU!+^VmJldx*IwV(!J>N6dW@ zb3gXCm@O)0SF1#p2$VuM~VL!9>rrLe3-m1;4r>0&qs)V zB;r4g#~<;Zi1=T`7hC+JL@{bHv>$}EPTI&%k#uT?pT-k-5>GGVAH%W7{Ab8^=1Kmu zc-DM3ta6Ts#_=4EkMQ$EbOF!fg?WCFh%QD%6FBjR=%tA0Wqi3sbcyO-vRK}}C7TPs zZ0GqaB)u}jU&WX3GQPTusDOpXM3ZEjTp}9d4mzzfLqJoMouX{`h+pQeJg`O5iZfiG zXdPHLZ5Y4Gb#;1J4KomaP^izo=6E7UtpUI`jbz>N{nu*LW5C{QBxNtDI&*@e9Y$x# zp|FTS4P8$-fxxJdVbsWSxYKVV;~g+MmYmd^P*#z%9M8Q{UJwUc#s|xc)UhJtQrmiD zyrmdh!^ViRdzGux|Eu&p9ahk(L(fuGMeYr-3+dp%th$E)>5 zz)VnBJU5#20}sGdSRxwdx)n$+MLi6XU`hj+OflnrP$UR2)g?=>3Y}nTV8+0VFUfrx zbbzTZ3H>oCB$fm#4qIb4!k=Pw&Z`xjz{$0M6mz+d>xLCl&q}FxrPQ}l>R%~YpuoqH zq|FnRnwvXv`sgu@>+OoZN6`*5&_-3zE@=SQWAM2Whg(cn@2~{GU6$1TVDyXs%?!Aq zrr>*ZmHMwrnfJ7$_NlfS;9JdrAGH*`A4{v>#VGT0EUDd#(Wd?tGvKXw3OwCDhtt9mZr`KH^9Dufqr2X2lIo2ebzv+G}vqP zif*UZE%p!g=UunA*i$NseE%N!Q0`1RaJ*^yLoLxm-|&Q=$QVS87vE#m}@?Yt_JW l>UDaCv!!|?- literal 0 HcmV?d00001 diff --git a/thirdparty/libzip-1.11.3/build-emcmake/ossfuzz/CMakeFiles/zip_write_encrypt_pkware_file_fuzzer.dir/zip_write_encrypt_pkware_file_fuzzer.c.o.d b/thirdparty/libzip-1.11.3/build-emcmake/ossfuzz/CMakeFiles/zip_write_encrypt_pkware_file_fuzzer.dir/zip_write_encrypt_pkware_file_fuzzer.c.o.d new file mode 100644 index 0000000..d030e4f --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/ossfuzz/CMakeFiles/zip_write_encrypt_pkware_file_fuzzer.dir/zip_write_encrypt_pkware_file_fuzzer.c.o.d @@ -0,0 +1,33 @@ +ossfuzz/CMakeFiles/zip_write_encrypt_pkware_file_fuzzer.dir/zip_write_encrypt_pkware_file_fuzzer.c.o: \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/ossfuzz/zip_write_encrypt_pkware_file_fuzzer.c \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stdint.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdint.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/alltypes.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/stdint.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/stdlib.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdlib.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/features.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/alloca.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/string.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/string.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/strings.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/time.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/time.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/zipconf.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/inttypes.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/inttypes.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdio.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/wasi/api.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stddef.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stddef.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_header_macro.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_ptrdiff_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_size_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_wchar_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_null.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_max_align_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_offsetof.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/sys/types.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/endian.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/sys/select.h diff --git a/thirdparty/libzip-1.11.3/build-emcmake/ossfuzz/CTestTestfile.cmake b/thirdparty/libzip-1.11.3/build-emcmake/ossfuzz/CTestTestfile.cmake new file mode 100644 index 0000000..0c691de --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/ossfuzz/CTestTestfile.cmake @@ -0,0 +1,6 @@ +# CMake generated Testfile for +# Source directory: /home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/ossfuzz +# Build directory: /home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/ossfuzz +# +# This file includes the relevant testing commands required for +# testing this directory and lists subdirectories to be tested as well. diff --git a/thirdparty/libzip-1.11.3/build-emcmake/ossfuzz/Makefile b/thirdparty/libzip-1.11.3/build-emcmake/ossfuzz/Makefile new file mode 100644 index 0000000..8391477 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/ossfuzz/Makefile @@ -0,0 +1,419 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.28 + +# Default target executed when no arguments are given to make. +default_target: all +.PHONY : default_target + +# Allow only one "make -f Makefile2" at a time, but pass parallelism. +.NOTPARALLEL: + +#============================================================================= +# Special targets provided by cmake. + +# Disable implicit rules so canonical targets will work. +.SUFFIXES: + +# Disable VCS-based implicit rules. +% : %,v + +# Disable VCS-based implicit rules. +% : RCS/% + +# Disable VCS-based implicit rules. +% : RCS/%,v + +# Disable VCS-based implicit rules. +% : SCCS/s.% + +# Disable VCS-based implicit rules. +% : s.% + +.SUFFIXES: .hpux_make_needs_suffix_list + +# Command-line flag to silence nested $(MAKE). +$(VERBOSE)MAKESILENT = -s + +#Suppress display of executed commands. +$(VERBOSE).SILENT: + +# A target that is always out of date. +cmake_force: +.PHONY : cmake_force + +#============================================================================= +# Set environment variables for the build. + +# The shell in which to execute make rules. +SHELL = /bin/sh + +# The CMake executable. +CMAKE_COMMAND = /usr/bin/cmake + +# The command to remove a file. +RM = /usr/bin/cmake -E rm -f + +# Escaping for special characters. +EQUALS = = + +# The top-level source directory on which CMake was run. +CMAKE_SOURCE_DIR = "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3" + +# The top-level build directory on which CMake was run. +CMAKE_BINARY_DIR = "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" + +#============================================================================= +# Targets provided globally by CMake. + +# Special rule for the target test +test: + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --cyan "Running tests..." + /usr/bin/ctest --force-new-ctest-process $(ARGS) +.PHONY : test + +# Special rule for the target test +test/fast: test +.PHONY : test/fast + +# Special rule for the target edit_cache +edit_cache: + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --cyan "No interactive CMake dialog available..." + /usr/bin/cmake -E echo No\ interactive\ CMake\ dialog\ available. +.PHONY : edit_cache + +# Special rule for the target edit_cache +edit_cache/fast: edit_cache +.PHONY : edit_cache/fast + +# Special rule for the target rebuild_cache +rebuild_cache: + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --cyan "Running CMake to regenerate build system..." + /usr/bin/cmake --regenerate-during-build -S$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) +.PHONY : rebuild_cache + +# Special rule for the target rebuild_cache +rebuild_cache/fast: rebuild_cache +.PHONY : rebuild_cache/fast + +# Special rule for the target list_install_components +list_install_components: + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --cyan "Available install components are: \"Unspecified\"" +.PHONY : list_install_components + +# Special rule for the target list_install_components +list_install_components/fast: list_install_components +.PHONY : list_install_components/fast + +# Special rule for the target install +install: preinstall + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --cyan "Install the project..." + /usr/bin/cmake -P cmake_install.cmake +.PHONY : install + +# Special rule for the target install +install/fast: preinstall/fast + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --cyan "Install the project..." + /usr/bin/cmake -P cmake_install.cmake +.PHONY : install/fast + +# Special rule for the target install/local +install/local: preinstall + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --cyan "Installing only the local directory..." + /usr/bin/cmake -DCMAKE_INSTALL_LOCAL_ONLY=1 -P cmake_install.cmake +.PHONY : install/local + +# Special rule for the target install/local +install/local/fast: preinstall/fast + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --cyan "Installing only the local directory..." + /usr/bin/cmake -DCMAKE_INSTALL_LOCAL_ONLY=1 -P cmake_install.cmake +.PHONY : install/local/fast + +# Special rule for the target install/strip +install/strip: preinstall + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --cyan "Installing the project stripped..." + /usr/bin/cmake -DCMAKE_INSTALL_DO_STRIP=1 -P cmake_install.cmake +.PHONY : install/strip + +# Special rule for the target install/strip +install/strip/fast: preinstall/fast + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --cyan "Installing the project stripped..." + /usr/bin/cmake -DCMAKE_INSTALL_DO_STRIP=1 -P cmake_install.cmake +.PHONY : install/strip/fast + +# The main all target +all: cmake_check_build_system + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(CMAKE_COMMAND) -E cmake_progress_start "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/ossfuzz//CMakeFiles/progress.marks" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 ossfuzz/all + $(CMAKE_COMMAND) -E cmake_progress_start "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" 0 +.PHONY : all + +# The main clean target +clean: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 ossfuzz/clean +.PHONY : clean + +# The main clean target +clean/fast: clean +.PHONY : clean/fast + +# Prepare targets for installation. +preinstall: all + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 ossfuzz/preinstall +.PHONY : preinstall + +# Prepare targets for installation. +preinstall/fast: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 ossfuzz/preinstall +.PHONY : preinstall/fast + +# clear depends +depend: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(CMAKE_COMMAND) -S$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles/Makefile.cmake 1 +.PHONY : depend + +# Convenience name for target. +ossfuzz/CMakeFiles/zip_read_file_fuzzer.dir/rule: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 ossfuzz/CMakeFiles/zip_read_file_fuzzer.dir/rule +.PHONY : ossfuzz/CMakeFiles/zip_read_file_fuzzer.dir/rule + +# Convenience name for target. +zip_read_file_fuzzer: ossfuzz/CMakeFiles/zip_read_file_fuzzer.dir/rule +.PHONY : zip_read_file_fuzzer + +# fast build rule for target. +zip_read_file_fuzzer/fast: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f ossfuzz/CMakeFiles/zip_read_file_fuzzer.dir/build.make ossfuzz/CMakeFiles/zip_read_file_fuzzer.dir/build +.PHONY : zip_read_file_fuzzer/fast + +# Convenience name for target. +ossfuzz/CMakeFiles/zip_read_fuzzer.dir/rule: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 ossfuzz/CMakeFiles/zip_read_fuzzer.dir/rule +.PHONY : ossfuzz/CMakeFiles/zip_read_fuzzer.dir/rule + +# Convenience name for target. +zip_read_fuzzer: ossfuzz/CMakeFiles/zip_read_fuzzer.dir/rule +.PHONY : zip_read_fuzzer + +# fast build rule for target. +zip_read_fuzzer/fast: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f ossfuzz/CMakeFiles/zip_read_fuzzer.dir/build.make ossfuzz/CMakeFiles/zip_read_fuzzer.dir/build +.PHONY : zip_read_fuzzer/fast + +# Convenience name for target. +ossfuzz/CMakeFiles/zip_write_encrypt_aes256_file_fuzzer.dir/rule: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 ossfuzz/CMakeFiles/zip_write_encrypt_aes256_file_fuzzer.dir/rule +.PHONY : ossfuzz/CMakeFiles/zip_write_encrypt_aes256_file_fuzzer.dir/rule + +# Convenience name for target. +zip_write_encrypt_aes256_file_fuzzer: ossfuzz/CMakeFiles/zip_write_encrypt_aes256_file_fuzzer.dir/rule +.PHONY : zip_write_encrypt_aes256_file_fuzzer + +# fast build rule for target. +zip_write_encrypt_aes256_file_fuzzer/fast: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f ossfuzz/CMakeFiles/zip_write_encrypt_aes256_file_fuzzer.dir/build.make ossfuzz/CMakeFiles/zip_write_encrypt_aes256_file_fuzzer.dir/build +.PHONY : zip_write_encrypt_aes256_file_fuzzer/fast + +# Convenience name for target. +ossfuzz/CMakeFiles/zip_write_encrypt_pkware_file_fuzzer.dir/rule: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 ossfuzz/CMakeFiles/zip_write_encrypt_pkware_file_fuzzer.dir/rule +.PHONY : ossfuzz/CMakeFiles/zip_write_encrypt_pkware_file_fuzzer.dir/rule + +# Convenience name for target. +zip_write_encrypt_pkware_file_fuzzer: ossfuzz/CMakeFiles/zip_write_encrypt_pkware_file_fuzzer.dir/rule +.PHONY : zip_write_encrypt_pkware_file_fuzzer + +# fast build rule for target. +zip_write_encrypt_pkware_file_fuzzer/fast: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f ossfuzz/CMakeFiles/zip_write_encrypt_pkware_file_fuzzer.dir/build.make ossfuzz/CMakeFiles/zip_write_encrypt_pkware_file_fuzzer.dir/build +.PHONY : zip_write_encrypt_pkware_file_fuzzer/fast + +# Convenience name for target. +ossfuzz/CMakeFiles/list-fuzzers.dir/rule: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 ossfuzz/CMakeFiles/list-fuzzers.dir/rule +.PHONY : ossfuzz/CMakeFiles/list-fuzzers.dir/rule + +# Convenience name for target. +list-fuzzers: ossfuzz/CMakeFiles/list-fuzzers.dir/rule +.PHONY : list-fuzzers + +# fast build rule for target. +list-fuzzers/fast: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f ossfuzz/CMakeFiles/list-fuzzers.dir/build.make ossfuzz/CMakeFiles/list-fuzzers.dir/build +.PHONY : list-fuzzers/fast + +fuzz_main.o: fuzz_main.c.o +.PHONY : fuzz_main.o + +# target to build an object file +fuzz_main.c.o: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f ossfuzz/CMakeFiles/zip_read_file_fuzzer.dir/build.make ossfuzz/CMakeFiles/zip_read_file_fuzzer.dir/fuzz_main.c.o + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f ossfuzz/CMakeFiles/zip_read_fuzzer.dir/build.make ossfuzz/CMakeFiles/zip_read_fuzzer.dir/fuzz_main.c.o + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f ossfuzz/CMakeFiles/zip_write_encrypt_aes256_file_fuzzer.dir/build.make ossfuzz/CMakeFiles/zip_write_encrypt_aes256_file_fuzzer.dir/fuzz_main.c.o + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f ossfuzz/CMakeFiles/zip_write_encrypt_pkware_file_fuzzer.dir/build.make ossfuzz/CMakeFiles/zip_write_encrypt_pkware_file_fuzzer.dir/fuzz_main.c.o +.PHONY : fuzz_main.c.o + +fuzz_main.i: fuzz_main.c.i +.PHONY : fuzz_main.i + +# target to preprocess a source file +fuzz_main.c.i: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f ossfuzz/CMakeFiles/zip_read_file_fuzzer.dir/build.make ossfuzz/CMakeFiles/zip_read_file_fuzzer.dir/fuzz_main.c.i + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f ossfuzz/CMakeFiles/zip_read_fuzzer.dir/build.make ossfuzz/CMakeFiles/zip_read_fuzzer.dir/fuzz_main.c.i + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f ossfuzz/CMakeFiles/zip_write_encrypt_aes256_file_fuzzer.dir/build.make ossfuzz/CMakeFiles/zip_write_encrypt_aes256_file_fuzzer.dir/fuzz_main.c.i + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f ossfuzz/CMakeFiles/zip_write_encrypt_pkware_file_fuzzer.dir/build.make ossfuzz/CMakeFiles/zip_write_encrypt_pkware_file_fuzzer.dir/fuzz_main.c.i +.PHONY : fuzz_main.c.i + +fuzz_main.s: fuzz_main.c.s +.PHONY : fuzz_main.s + +# target to generate assembly for a file +fuzz_main.c.s: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f ossfuzz/CMakeFiles/zip_read_file_fuzzer.dir/build.make ossfuzz/CMakeFiles/zip_read_file_fuzzer.dir/fuzz_main.c.s + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f ossfuzz/CMakeFiles/zip_read_fuzzer.dir/build.make ossfuzz/CMakeFiles/zip_read_fuzzer.dir/fuzz_main.c.s + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f ossfuzz/CMakeFiles/zip_write_encrypt_aes256_file_fuzzer.dir/build.make ossfuzz/CMakeFiles/zip_write_encrypt_aes256_file_fuzzer.dir/fuzz_main.c.s + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f ossfuzz/CMakeFiles/zip_write_encrypt_pkware_file_fuzzer.dir/build.make ossfuzz/CMakeFiles/zip_write_encrypt_pkware_file_fuzzer.dir/fuzz_main.c.s +.PHONY : fuzz_main.c.s + +zip_read_file_fuzzer.o: zip_read_file_fuzzer.c.o +.PHONY : zip_read_file_fuzzer.o + +# target to build an object file +zip_read_file_fuzzer.c.o: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f ossfuzz/CMakeFiles/zip_read_file_fuzzer.dir/build.make ossfuzz/CMakeFiles/zip_read_file_fuzzer.dir/zip_read_file_fuzzer.c.o +.PHONY : zip_read_file_fuzzer.c.o + +zip_read_file_fuzzer.i: zip_read_file_fuzzer.c.i +.PHONY : zip_read_file_fuzzer.i + +# target to preprocess a source file +zip_read_file_fuzzer.c.i: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f ossfuzz/CMakeFiles/zip_read_file_fuzzer.dir/build.make ossfuzz/CMakeFiles/zip_read_file_fuzzer.dir/zip_read_file_fuzzer.c.i +.PHONY : zip_read_file_fuzzer.c.i + +zip_read_file_fuzzer.s: zip_read_file_fuzzer.c.s +.PHONY : zip_read_file_fuzzer.s + +# target to generate assembly for a file +zip_read_file_fuzzer.c.s: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f ossfuzz/CMakeFiles/zip_read_file_fuzzer.dir/build.make ossfuzz/CMakeFiles/zip_read_file_fuzzer.dir/zip_read_file_fuzzer.c.s +.PHONY : zip_read_file_fuzzer.c.s + +zip_read_fuzzer.o: zip_read_fuzzer.c.o +.PHONY : zip_read_fuzzer.o + +# target to build an object file +zip_read_fuzzer.c.o: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f ossfuzz/CMakeFiles/zip_read_fuzzer.dir/build.make ossfuzz/CMakeFiles/zip_read_fuzzer.dir/zip_read_fuzzer.c.o +.PHONY : zip_read_fuzzer.c.o + +zip_read_fuzzer.i: zip_read_fuzzer.c.i +.PHONY : zip_read_fuzzer.i + +# target to preprocess a source file +zip_read_fuzzer.c.i: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f ossfuzz/CMakeFiles/zip_read_fuzzer.dir/build.make ossfuzz/CMakeFiles/zip_read_fuzzer.dir/zip_read_fuzzer.c.i +.PHONY : zip_read_fuzzer.c.i + +zip_read_fuzzer.s: zip_read_fuzzer.c.s +.PHONY : zip_read_fuzzer.s + +# target to generate assembly for a file +zip_read_fuzzer.c.s: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f ossfuzz/CMakeFiles/zip_read_fuzzer.dir/build.make ossfuzz/CMakeFiles/zip_read_fuzzer.dir/zip_read_fuzzer.c.s +.PHONY : zip_read_fuzzer.c.s + +zip_write_encrypt_aes256_file_fuzzer.o: zip_write_encrypt_aes256_file_fuzzer.c.o +.PHONY : zip_write_encrypt_aes256_file_fuzzer.o + +# target to build an object file +zip_write_encrypt_aes256_file_fuzzer.c.o: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f ossfuzz/CMakeFiles/zip_write_encrypt_aes256_file_fuzzer.dir/build.make ossfuzz/CMakeFiles/zip_write_encrypt_aes256_file_fuzzer.dir/zip_write_encrypt_aes256_file_fuzzer.c.o +.PHONY : zip_write_encrypt_aes256_file_fuzzer.c.o + +zip_write_encrypt_aes256_file_fuzzer.i: zip_write_encrypt_aes256_file_fuzzer.c.i +.PHONY : zip_write_encrypt_aes256_file_fuzzer.i + +# target to preprocess a source file +zip_write_encrypt_aes256_file_fuzzer.c.i: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f ossfuzz/CMakeFiles/zip_write_encrypt_aes256_file_fuzzer.dir/build.make ossfuzz/CMakeFiles/zip_write_encrypt_aes256_file_fuzzer.dir/zip_write_encrypt_aes256_file_fuzzer.c.i +.PHONY : zip_write_encrypt_aes256_file_fuzzer.c.i + +zip_write_encrypt_aes256_file_fuzzer.s: zip_write_encrypt_aes256_file_fuzzer.c.s +.PHONY : zip_write_encrypt_aes256_file_fuzzer.s + +# target to generate assembly for a file +zip_write_encrypt_aes256_file_fuzzer.c.s: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f ossfuzz/CMakeFiles/zip_write_encrypt_aes256_file_fuzzer.dir/build.make ossfuzz/CMakeFiles/zip_write_encrypt_aes256_file_fuzzer.dir/zip_write_encrypt_aes256_file_fuzzer.c.s +.PHONY : zip_write_encrypt_aes256_file_fuzzer.c.s + +zip_write_encrypt_pkware_file_fuzzer.o: zip_write_encrypt_pkware_file_fuzzer.c.o +.PHONY : zip_write_encrypt_pkware_file_fuzzer.o + +# target to build an object file +zip_write_encrypt_pkware_file_fuzzer.c.o: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f ossfuzz/CMakeFiles/zip_write_encrypt_pkware_file_fuzzer.dir/build.make ossfuzz/CMakeFiles/zip_write_encrypt_pkware_file_fuzzer.dir/zip_write_encrypt_pkware_file_fuzzer.c.o +.PHONY : zip_write_encrypt_pkware_file_fuzzer.c.o + +zip_write_encrypt_pkware_file_fuzzer.i: zip_write_encrypt_pkware_file_fuzzer.c.i +.PHONY : zip_write_encrypt_pkware_file_fuzzer.i + +# target to preprocess a source file +zip_write_encrypt_pkware_file_fuzzer.c.i: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f ossfuzz/CMakeFiles/zip_write_encrypt_pkware_file_fuzzer.dir/build.make ossfuzz/CMakeFiles/zip_write_encrypt_pkware_file_fuzzer.dir/zip_write_encrypt_pkware_file_fuzzer.c.i +.PHONY : zip_write_encrypt_pkware_file_fuzzer.c.i + +zip_write_encrypt_pkware_file_fuzzer.s: zip_write_encrypt_pkware_file_fuzzer.c.s +.PHONY : zip_write_encrypt_pkware_file_fuzzer.s + +# target to generate assembly for a file +zip_write_encrypt_pkware_file_fuzzer.c.s: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(MAKE) $(MAKESILENT) -f ossfuzz/CMakeFiles/zip_write_encrypt_pkware_file_fuzzer.dir/build.make ossfuzz/CMakeFiles/zip_write_encrypt_pkware_file_fuzzer.dir/zip_write_encrypt_pkware_file_fuzzer.c.s +.PHONY : zip_write_encrypt_pkware_file_fuzzer.c.s + +# Help Target +help: + @echo "The following are some of the valid targets for this Makefile:" + @echo "... all (the default if no target is provided)" + @echo "... clean" + @echo "... depend" + @echo "... edit_cache" + @echo "... install" + @echo "... install/local" + @echo "... install/strip" + @echo "... list_install_components" + @echo "... rebuild_cache" + @echo "... test" + @echo "... list-fuzzers" + @echo "... zip_read_file_fuzzer" + @echo "... zip_read_fuzzer" + @echo "... zip_write_encrypt_aes256_file_fuzzer" + @echo "... zip_write_encrypt_pkware_file_fuzzer" + @echo "... fuzz_main.o" + @echo "... fuzz_main.i" + @echo "... fuzz_main.s" + @echo "... zip_read_file_fuzzer.o" + @echo "... zip_read_file_fuzzer.i" + @echo "... zip_read_file_fuzzer.s" + @echo "... zip_read_fuzzer.o" + @echo "... zip_read_fuzzer.i" + @echo "... zip_read_fuzzer.s" + @echo "... zip_write_encrypt_aes256_file_fuzzer.o" + @echo "... zip_write_encrypt_aes256_file_fuzzer.i" + @echo "... zip_write_encrypt_aes256_file_fuzzer.s" + @echo "... zip_write_encrypt_pkware_file_fuzzer.o" + @echo "... zip_write_encrypt_pkware_file_fuzzer.i" + @echo "... zip_write_encrypt_pkware_file_fuzzer.s" +.PHONY : help + + + +#============================================================================= +# Special targets to cleanup operation of make. + +# Special rule to run CMake to check the build system integrity. +# No rule that depends on this can have commands that come from listfiles +# because they might be regenerated. +cmake_check_build_system: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(CMAKE_COMMAND) -S$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles/Makefile.cmake 0 +.PHONY : cmake_check_build_system + diff --git a/thirdparty/libzip-1.11.3/build-emcmake/ossfuzz/cmake_install.cmake b/thirdparty/libzip-1.11.3/build-emcmake/ossfuzz/cmake_install.cmake new file mode 100644 index 0000000..38ff9a6 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/ossfuzz/cmake_install.cmake @@ -0,0 +1,39 @@ +# Install script for directory: /home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/ossfuzz + +# Set the install prefix +if(NOT DEFINED CMAKE_INSTALL_PREFIX) + set(CMAKE_INSTALL_PREFIX "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/install") +endif() +string(REGEX REPLACE "/$" "" CMAKE_INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX}") + +# Set the install configuration name. +if(NOT DEFINED CMAKE_INSTALL_CONFIG_NAME) + if(BUILD_TYPE) + string(REGEX REPLACE "^[^A-Za-z0-9_]+" "" + CMAKE_INSTALL_CONFIG_NAME "${BUILD_TYPE}") + else() + set(CMAKE_INSTALL_CONFIG_NAME "") + endif() + message(STATUS "Install configuration: \"${CMAKE_INSTALL_CONFIG_NAME}\"") +endif() + +# Set the component getting installed. +if(NOT CMAKE_INSTALL_COMPONENT) + if(COMPONENT) + message(STATUS "Install component: \"${COMPONENT}\"") + set(CMAKE_INSTALL_COMPONENT "${COMPONENT}") + else() + set(CMAKE_INSTALL_COMPONENT) + endif() +endif() + +# Is this installation the result of a crosscompile? +if(NOT DEFINED CMAKE_CROSSCOMPILING) + set(CMAKE_CROSSCOMPILING "TRUE") +endif() + +# Set default install directory permissions. +if(NOT DEFINED CMAKE_OBJDUMP) + set(CMAKE_OBJDUMP "/usr/bin/objdump") +endif() + diff --git a/thirdparty/libzip-1.11.3/build-emcmake/ossfuzz/zip_read_file_fuzzer.js b/thirdparty/libzip-1.11.3/build-emcmake/ossfuzz/zip_read_file_fuzzer.js new file mode 100644 index 0000000..31d8f54 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/ossfuzz/zip_read_file_fuzzer.js @@ -0,0 +1,4809 @@ +// include: shell.js +// The Module object: Our interface to the outside world. We import +// and export values on it. There are various ways Module can be used: +// 1. Not defined. We create it here +// 2. A function parameter, function(moduleArg) => Promise +// 3. pre-run appended it, var Module = {}; ..generated code.. +// 4. External script tag defines var Module. +// We need to check if Module already exists (e.g. case 3 above). +// Substitution will be replaced with actual code on later stage of the build, +// this way Closure Compiler will not mangle it (e.g. case 4. above). +// Note that if you want to run closure, and also to use Module +// after the generated code, you will need to define var Module = {}; +// before the code. Then that object will be used in the code, and you +// can continue to use Module afterwards as well. +var Module = typeof Module != 'undefined' ? Module : {}; + +// Determine the runtime environment we are in. You can customize this by +// setting the ENVIRONMENT setting at compile time (see settings.js). + +// Attempt to auto-detect the environment +var ENVIRONMENT_IS_WEB = typeof window == 'object'; +var ENVIRONMENT_IS_WORKER = typeof WorkerGlobalScope != 'undefined'; +// N.b. Electron.js environment is simultaneously a NODE-environment, but +// also a web environment. +var ENVIRONMENT_IS_NODE = typeof process == 'object' && typeof process.versions == 'object' && typeof process.versions.node == 'string' && process.type != 'renderer'; +var ENVIRONMENT_IS_SHELL = !ENVIRONMENT_IS_WEB && !ENVIRONMENT_IS_NODE && !ENVIRONMENT_IS_WORKER; + +if (ENVIRONMENT_IS_NODE) { + +} + +// --pre-jses are emitted after the Module integration code, so that they can +// refer to Module (if they choose; they can also define Module) + + +// Sometimes an existing Module object exists with properties +// meant to overwrite the default module functionality. Here +// we collect those properties and reapply _after_ we configure +// the current environment's defaults to avoid having to be so +// defensive during initialization. +var moduleOverrides = {...Module}; + +var arguments_ = []; +var thisProgram = './this.program'; +var quit_ = (status, toThrow) => { + throw toThrow; +}; + +// `/` should be present at the end if `scriptDirectory` is not empty +var scriptDirectory = ''; +function locateFile(path) { + if (Module['locateFile']) { + return Module['locateFile'](path, scriptDirectory); + } + return scriptDirectory + path; +} + +// Hooks that are implemented differently in different runtime environments. +var readAsync, readBinary; + +if (ENVIRONMENT_IS_NODE) { + if (typeof process == 'undefined' || !process.release || process.release.name !== 'node') throw new Error('not compiled for this environment (did you build to HTML and try to run it not on the web, or set ENVIRONMENT to something - like node - and run it someplace else - like on the web?)'); + + var nodeVersion = process.versions.node; + var numericVersion = nodeVersion.split('.').slice(0, 3); + numericVersion = (numericVersion[0] * 10000) + (numericVersion[1] * 100) + (numericVersion[2].split('-')[0] * 1); + var minVersion = 160000; + if (numericVersion < 160000) { + throw new Error('This emscripten-generated code requires node v16.0.0 (detected v' + nodeVersion + ')'); + } + + // These modules will usually be used on Node.js. Load them eagerly to avoid + // the complexity of lazy-loading. + var fs = require('fs'); + var nodePath = require('path'); + + scriptDirectory = __dirname + '/'; + +// include: node_shell_read.js +readBinary = (filename) => { + // We need to re-wrap `file://` strings to URLs. + filename = isFileURI(filename) ? new URL(filename) : filename; + var ret = fs.readFileSync(filename); + assert(Buffer.isBuffer(ret)); + return ret; +}; + +readAsync = async (filename, binary = true) => { + // See the comment in the `readBinary` function. + filename = isFileURI(filename) ? new URL(filename) : filename; + var ret = fs.readFileSync(filename, binary ? undefined : 'utf8'); + assert(binary ? Buffer.isBuffer(ret) : typeof ret == 'string'); + return ret; +}; +// end include: node_shell_read.js + if (!Module['thisProgram'] && process.argv.length > 1) { + thisProgram = process.argv[1].replace(/\\/g, '/'); + } + + arguments_ = process.argv.slice(2); + + if (typeof module != 'undefined') { + module['exports'] = Module; + } + + quit_ = (status, toThrow) => { + process.exitCode = status; + throw toThrow; + }; + +} else +if (ENVIRONMENT_IS_SHELL) { + + if ((typeof process == 'object' && typeof require === 'function') || typeof window == 'object' || typeof WorkerGlobalScope != 'undefined') throw new Error('not compiled for this environment (did you build to HTML and try to run it not on the web, or set ENVIRONMENT to something - like node - and run it someplace else - like on the web?)'); + +} else + +// Note that this includes Node.js workers when relevant (pthreads is enabled). +// Node.js workers are detected as a combination of ENVIRONMENT_IS_WORKER and +// ENVIRONMENT_IS_NODE. +if (ENVIRONMENT_IS_WEB || ENVIRONMENT_IS_WORKER) { + if (ENVIRONMENT_IS_WORKER) { // Check worker, not web, since window could be polyfilled + scriptDirectory = self.location.href; + } else if (typeof document != 'undefined' && document.currentScript) { // web + scriptDirectory = document.currentScript.src; + } + // blob urls look like blob:http://site.com/etc/etc and we cannot infer anything from them. + // otherwise, slice off the final part of the url to find the script directory. + // if scriptDirectory does not contain a slash, lastIndexOf will return -1, + // and scriptDirectory will correctly be replaced with an empty string. + // If scriptDirectory contains a query (starting with ?) or a fragment (starting with #), + // they are removed because they could contain a slash. + if (scriptDirectory.startsWith('blob:')) { + scriptDirectory = ''; + } else { + scriptDirectory = scriptDirectory.slice(0, scriptDirectory.replace(/[?#].*/, '').lastIndexOf('/')+1); + } + + if (!(typeof window == 'object' || typeof WorkerGlobalScope != 'undefined')) throw new Error('not compiled for this environment (did you build to HTML and try to run it not on the web, or set ENVIRONMENT to something - like node - and run it someplace else - like on the web?)'); + + { +// include: web_or_worker_shell_read.js +if (ENVIRONMENT_IS_WORKER) { + readBinary = (url) => { + var xhr = new XMLHttpRequest(); + xhr.open('GET', url, false); + xhr.responseType = 'arraybuffer'; + xhr.send(null); + return new Uint8Array(/** @type{!ArrayBuffer} */(xhr.response)); + }; + } + + readAsync = async (url) => { + // Fetch has some additional restrictions over XHR, like it can't be used on a file:// url. + // See https://github.com/github/fetch/pull/92#issuecomment-140665932 + // Cordova or Electron apps are typically loaded from a file:// url. + // So use XHR on webview if URL is a file URL. + if (isFileURI(url)) { + return new Promise((resolve, reject) => { + var xhr = new XMLHttpRequest(); + xhr.open('GET', url, true); + xhr.responseType = 'arraybuffer'; + xhr.onload = () => { + if (xhr.status == 200 || (xhr.status == 0 && xhr.response)) { // file URLs can return 0 + resolve(xhr.response); + return; + } + reject(xhr.status); + }; + xhr.onerror = reject; + xhr.send(null); + }); + } + var response = await fetch(url, { credentials: 'same-origin' }); + if (response.ok) { + return response.arrayBuffer(); + } + throw new Error(response.status + ' : ' + response.url); + }; +// end include: web_or_worker_shell_read.js + } +} else +{ + throw new Error('environment detection error'); +} + +var out = Module['print'] || console.log.bind(console); +var err = Module['printErr'] || console.error.bind(console); + +// Merge back in the overrides +Object.assign(Module, moduleOverrides); +// Free the object hierarchy contained in the overrides, this lets the GC +// reclaim data used. +moduleOverrides = null; +checkIncomingModuleAPI(); + +// Emit code to handle expected values on the Module object. This applies Module.x +// to the proper local x. This has two benefits: first, we only emit it if it is +// expected to arrive, and second, by using a local everywhere else that can be +// minified. + +if (Module['arguments']) arguments_ = Module['arguments'];legacyModuleProp('arguments', 'arguments_'); + +if (Module['thisProgram']) thisProgram = Module['thisProgram'];legacyModuleProp('thisProgram', 'thisProgram'); + +// perform assertions in shell.js after we set up out() and err(), as otherwise if an assertion fails it cannot print the message +// Assertions on removed incoming Module JS APIs. +assert(typeof Module['memoryInitializerPrefixURL'] == 'undefined', 'Module.memoryInitializerPrefixURL option was removed, use Module.locateFile instead'); +assert(typeof Module['pthreadMainPrefixURL'] == 'undefined', 'Module.pthreadMainPrefixURL option was removed, use Module.locateFile instead'); +assert(typeof Module['cdInitializerPrefixURL'] == 'undefined', 'Module.cdInitializerPrefixURL option was removed, use Module.locateFile instead'); +assert(typeof Module['filePackagePrefixURL'] == 'undefined', 'Module.filePackagePrefixURL option was removed, use Module.locateFile instead'); +assert(typeof Module['read'] == 'undefined', 'Module.read option was removed'); +assert(typeof Module['readAsync'] == 'undefined', 'Module.readAsync option was removed (modify readAsync in JS)'); +assert(typeof Module['readBinary'] == 'undefined', 'Module.readBinary option was removed (modify readBinary in JS)'); +assert(typeof Module['setWindowTitle'] == 'undefined', 'Module.setWindowTitle option was removed (modify emscripten_set_window_title in JS)'); +assert(typeof Module['TOTAL_MEMORY'] == 'undefined', 'Module.TOTAL_MEMORY has been renamed Module.INITIAL_MEMORY'); +legacyModuleProp('asm', 'wasmExports'); +legacyModuleProp('readAsync', 'readAsync'); +legacyModuleProp('readBinary', 'readBinary'); +legacyModuleProp('setWindowTitle', 'setWindowTitle'); +var IDBFS = 'IDBFS is no longer included by default; build with -lidbfs.js'; +var PROXYFS = 'PROXYFS is no longer included by default; build with -lproxyfs.js'; +var WORKERFS = 'WORKERFS is no longer included by default; build with -lworkerfs.js'; +var FETCHFS = 'FETCHFS is no longer included by default; build with -lfetchfs.js'; +var ICASEFS = 'ICASEFS is no longer included by default; build with -licasefs.js'; +var JSFILEFS = 'JSFILEFS is no longer included by default; build with -ljsfilefs.js'; +var OPFS = 'OPFS is no longer included by default; build with -lopfs.js'; + +var NODEFS = 'NODEFS is no longer included by default; build with -lnodefs.js'; + +assert(!ENVIRONMENT_IS_SHELL, 'shell environment detected but not enabled at build time. Add `shell` to `-sENVIRONMENT` to enable.'); + +// end include: shell.js + +// include: preamble.js +// === Preamble library stuff === + +// Documentation for the public APIs defined in this file must be updated in: +// site/source/docs/api_reference/preamble.js.rst +// A prebuilt local version of the documentation is available at: +// site/build/text/docs/api_reference/preamble.js.txt +// You can also build docs locally as HTML or other formats in site/ +// An online HTML version (which may be of a different version of Emscripten) +// is up at http://kripken.github.io/emscripten-site/docs/api_reference/preamble.js.html + +var wasmBinary = Module['wasmBinary'];legacyModuleProp('wasmBinary', 'wasmBinary'); + +if (typeof WebAssembly != 'object') { + err('no native wasm support detected'); +} + +// Wasm globals + +var wasmMemory; + +//======================================== +// Runtime essentials +//======================================== + +// whether we are quitting the application. no code should run after this. +// set in exit() and abort() +var ABORT = false; + +// set by exit() and abort(). Passed to 'onExit' handler. +// NOTE: This is also used as the process return code code in shell environments +// but only when noExitRuntime is false. +var EXITSTATUS; + +// In STRICT mode, we only define assert() when ASSERTIONS is set. i.e. we +// don't define it at all in release modes. This matches the behaviour of +// MINIMAL_RUNTIME. +// TODO(sbc): Make this the default even without STRICT enabled. +/** @type {function(*, string=)} */ +function assert(condition, text) { + if (!condition) { + abort('Assertion failed' + (text ? ': ' + text : '')); + } +} + +// We used to include malloc/free by default in the past. Show a helpful error in +// builds with assertions. +function _malloc() { + abort('malloc() called but not included in the build - add `_malloc` to EXPORTED_FUNCTIONS'); +} +function _free() { + // Show a helpful error since we used to include free by default in the past. + abort('free() called but not included in the build - add `_free` to EXPORTED_FUNCTIONS'); +} + +// Memory management + +var HEAP, +/** @type {!Int8Array} */ + HEAP8, +/** @type {!Uint8Array} */ + HEAPU8, +/** @type {!Int16Array} */ + HEAP16, +/** @type {!Uint16Array} */ + HEAPU16, +/** @type {!Int32Array} */ + HEAP32, +/** @type {!Uint32Array} */ + HEAPU32, +/** @type {!Float32Array} */ + HEAPF32, +/* BigInt64Array type is not correctly defined in closure +/** not-@type {!BigInt64Array} */ + HEAP64, +/* BigUint64Array type is not correctly defined in closure +/** not-t@type {!BigUint64Array} */ + HEAPU64, +/** @type {!Float64Array} */ + HEAPF64; + +var runtimeInitialized = false; + +/** + * Indicates whether filename is delivered via file protocol (as opposed to http/https) + * @noinline + */ +var isFileURI = (filename) => filename.startsWith('file://'); + +// include: runtime_shared.js +// include: runtime_stack_check.js +// Initializes the stack cookie. Called at the startup of main and at the startup of each thread in pthreads mode. +function writeStackCookie() { + var max = _emscripten_stack_get_end(); + assert((max & 3) == 0); + // If the stack ends at address zero we write our cookies 4 bytes into the + // stack. This prevents interference with SAFE_HEAP and ASAN which also + // monitor writes to address zero. + if (max == 0) { + max += 4; + } + // The stack grow downwards towards _emscripten_stack_get_end. + // We write cookies to the final two words in the stack and detect if they are + // ever overwritten. + HEAPU32[((max)>>2)] = 0x02135467; + HEAPU32[(((max)+(4))>>2)] = 0x89BACDFE; + // Also test the global address 0 for integrity. + HEAPU32[((0)>>2)] = 1668509029; +} + +function checkStackCookie() { + if (ABORT) return; + var max = _emscripten_stack_get_end(); + // See writeStackCookie(). + if (max == 0) { + max += 4; + } + var cookie1 = HEAPU32[((max)>>2)]; + var cookie2 = HEAPU32[(((max)+(4))>>2)]; + if (cookie1 != 0x02135467 || cookie2 != 0x89BACDFE) { + abort(`Stack overflow! Stack cookie has been overwritten at ${ptrToString(max)}, expected hex dwords 0x89BACDFE and 0x2135467, but received ${ptrToString(cookie2)} ${ptrToString(cookie1)}`); + } + // Also test the global address 0 for integrity. + if (HEAPU32[((0)>>2)] != 0x63736d65 /* 'emsc' */) { + abort('Runtime error: The application has corrupted its heap memory area (address zero)!'); + } +} +// end include: runtime_stack_check.js +// include: runtime_exceptions.js +// end include: runtime_exceptions.js +// include: runtime_debug.js +// Endianness check +(() => { + var h16 = new Int16Array(1); + var h8 = new Int8Array(h16.buffer); + h16[0] = 0x6373; + if (h8[0] !== 0x73 || h8[1] !== 0x63) throw 'Runtime error: expected the system to be little-endian! (Run with -sSUPPORT_BIG_ENDIAN to bypass)'; +})(); + +if (Module['ENVIRONMENT']) { + throw new Error('Module.ENVIRONMENT has been deprecated. To force the environment, use the ENVIRONMENT compile-time option (for example, -sENVIRONMENT=web or -sENVIRONMENT=node)'); +} + +function legacyModuleProp(prop, newName, incoming=true) { + if (!Object.getOwnPropertyDescriptor(Module, prop)) { + Object.defineProperty(Module, prop, { + configurable: true, + get() { + let extra = incoming ? ' (the initial value can be provided on Module, but after startup the value is only looked for on a local variable of that name)' : ''; + abort(`\`Module.${prop}\` has been replaced by \`${newName}\`` + extra); + + } + }); + } +} + +function consumedModuleProp(prop) { + if (!Object.getOwnPropertyDescriptor(Module, prop)) { + Object.defineProperty(Module, prop, { + configurable: true, + set() { + abort(`Attempt to set \`Module.${prop}\` after it has already been processed. This can happen, for example, when code is injected via '--post-js' rather than '--pre-js'`); + + } + }); + } +} + +function ignoredModuleProp(prop) { + if (Object.getOwnPropertyDescriptor(Module, prop)) { + abort(`\`Module.${prop}\` was supplied but \`${prop}\` not included in INCOMING_MODULE_JS_API`); + } +} + +// forcing the filesystem exports a few things by default +function isExportedByForceFilesystem(name) { + return name === 'FS_createPath' || + name === 'FS_createDataFile' || + name === 'FS_createPreloadedFile' || + name === 'FS_unlink' || + name === 'addRunDependency' || + // The old FS has some functionality that WasmFS lacks. + name === 'FS_createLazyFile' || + name === 'FS_createDevice' || + name === 'removeRunDependency'; +} + +/** + * Intercept access to a global symbol. This enables us to give informative + * warnings/errors when folks attempt to use symbols they did not include in + * their build, or no symbols that no longer exist. + */ +function hookGlobalSymbolAccess(sym, func) { + if (typeof globalThis != 'undefined' && !Object.getOwnPropertyDescriptor(globalThis, sym)) { + Object.defineProperty(globalThis, sym, { + configurable: true, + get() { + func(); + return undefined; + } + }); + } +} + +function missingGlobal(sym, msg) { + hookGlobalSymbolAccess(sym, () => { + warnOnce(`\`${sym}\` is not longer defined by emscripten. ${msg}`); + }); +} + +missingGlobal('buffer', 'Please use HEAP8.buffer or wasmMemory.buffer'); +missingGlobal('asm', 'Please use wasmExports instead'); + +function missingLibrarySymbol(sym) { + hookGlobalSymbolAccess(sym, () => { + // Can't `abort()` here because it would break code that does runtime + // checks. e.g. `if (typeof SDL === 'undefined')`. + var msg = `\`${sym}\` is a library symbol and not included by default; add it to your library.js __deps or to DEFAULT_LIBRARY_FUNCS_TO_INCLUDE on the command line`; + // DEFAULT_LIBRARY_FUNCS_TO_INCLUDE requires the name as it appears in + // library.js, which means $name for a JS name with no prefix, or name + // for a JS name like _name. + var librarySymbol = sym; + if (!librarySymbol.startsWith('_')) { + librarySymbol = '$' + sym; + } + msg += ` (e.g. -sDEFAULT_LIBRARY_FUNCS_TO_INCLUDE='${librarySymbol}')`; + if (isExportedByForceFilesystem(sym)) { + msg += '. Alternatively, forcing filesystem support (-sFORCE_FILESYSTEM) can export this for you'; + } + warnOnce(msg); + }); + + // Any symbol that is not included from the JS library is also (by definition) + // not exported on the Module object. + unexportedRuntimeSymbol(sym); +} + +function unexportedRuntimeSymbol(sym) { + if (!Object.getOwnPropertyDescriptor(Module, sym)) { + Object.defineProperty(Module, sym, { + configurable: true, + get() { + var msg = `'${sym}' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the Emscripten FAQ)`; + if (isExportedByForceFilesystem(sym)) { + msg += '. Alternatively, forcing filesystem support (-sFORCE_FILESYSTEM) can export this for you'; + } + abort(msg); + } + }); + } +} + +var runtimeDebug = true; // Switch to false at runtime to disable logging at the right times + +// Used by XXXXX_DEBUG settings to output debug messages. +function dbg(...args) { + if (!runtimeDebug && typeof runtimeDebug != 'undefined') return; + // TODO(sbc): Make this configurable somehow. Its not always convenient for + // logging to show up as warnings. + console.warn(...args); +} +// end include: runtime_debug.js +// include: memoryprofiler.js +// end include: memoryprofiler.js + + +function updateMemoryViews() { + var b = wasmMemory.buffer; + Module['HEAP8'] = HEAP8 = new Int8Array(b); + Module['HEAP16'] = HEAP16 = new Int16Array(b); + Module['HEAPU8'] = HEAPU8 = new Uint8Array(b); + Module['HEAPU16'] = HEAPU16 = new Uint16Array(b); + Module['HEAP32'] = HEAP32 = new Int32Array(b); + Module['HEAPU32'] = HEAPU32 = new Uint32Array(b); + Module['HEAPF32'] = HEAPF32 = new Float32Array(b); + Module['HEAPF64'] = HEAPF64 = new Float64Array(b); + Module['HEAP64'] = HEAP64 = new BigInt64Array(b); + Module['HEAPU64'] = HEAPU64 = new BigUint64Array(b); +} + +// end include: runtime_shared.js +assert(!Module['STACK_SIZE'], 'STACK_SIZE can no longer be set at runtime. Use -sSTACK_SIZE at link time') + +assert(typeof Int32Array != 'undefined' && typeof Float64Array !== 'undefined' && Int32Array.prototype.subarray != undefined && Int32Array.prototype.set != undefined, + 'JS engine does not provide full typed array support'); + +// If memory is defined in wasm, the user can't provide it, or set INITIAL_MEMORY +assert(!Module['wasmMemory'], 'Use of `wasmMemory` detected. Use -sIMPORTED_MEMORY to define wasmMemory externally'); +assert(!Module['INITIAL_MEMORY'], 'Detected runtime INITIAL_MEMORY setting. Use -sIMPORTED_MEMORY to define wasmMemory dynamically'); + +function preRun() { + if (Module['preRun']) { + if (typeof Module['preRun'] == 'function') Module['preRun'] = [Module['preRun']]; + while (Module['preRun'].length) { + addOnPreRun(Module['preRun'].shift()); + } + } + consumedModuleProp('preRun'); + callRuntimeCallbacks(onPreRuns); +} + +function initRuntime() { + assert(!runtimeInitialized); + runtimeInitialized = true; + + checkStackCookie(); + + if (!Module['noFSInit'] && !FS.initialized) FS.init(); +TTY.init(); + + wasmExports['__wasm_call_ctors'](); + + FS.ignorePermissions = false; +} + +function preMain() { + checkStackCookie(); + +} + +function postRun() { + checkStackCookie(); + + if (Module['postRun']) { + if (typeof Module['postRun'] == 'function') Module['postRun'] = [Module['postRun']]; + while (Module['postRun'].length) { + addOnPostRun(Module['postRun'].shift()); + } + } + consumedModuleProp('postRun'); + + callRuntimeCallbacks(onPostRuns); +} + +// A counter of dependencies for calling run(). If we need to +// do asynchronous work before running, increment this and +// decrement it. Incrementing must happen in a place like +// Module.preRun (used by emcc to add file preloading). +// Note that you can add dependencies in preRun, even though +// it happens right before run - run will be postponed until +// the dependencies are met. +var runDependencies = 0; +var dependenciesFulfilled = null; // overridden to take different actions when all run dependencies are fulfilled +var runDependencyTracking = {}; +var runDependencyWatcher = null; + +function getUniqueRunDependency(id) { + var orig = id; + while (1) { + if (!runDependencyTracking[id]) return id; + id = orig + Math.random(); + } +} + +function addRunDependency(id) { + runDependencies++; + + Module['monitorRunDependencies']?.(runDependencies); + + if (id) { + assert(!runDependencyTracking[id]); + runDependencyTracking[id] = 1; + if (runDependencyWatcher === null && typeof setInterval != 'undefined') { + // Check for missing dependencies every few seconds + runDependencyWatcher = setInterval(() => { + if (ABORT) { + clearInterval(runDependencyWatcher); + runDependencyWatcher = null; + return; + } + var shown = false; + for (var dep in runDependencyTracking) { + if (!shown) { + shown = true; + err('still waiting on run dependencies:'); + } + err(`dependency: ${dep}`); + } + if (shown) { + err('(end of list)'); + } + }, 10000); + } + } else { + err('warning: run dependency added without ID'); + } +} + +function removeRunDependency(id) { + runDependencies--; + + Module['monitorRunDependencies']?.(runDependencies); + + if (id) { + assert(runDependencyTracking[id]); + delete runDependencyTracking[id]; + } else { + err('warning: run dependency removed without ID'); + } + if (runDependencies == 0) { + if (runDependencyWatcher !== null) { + clearInterval(runDependencyWatcher); + runDependencyWatcher = null; + } + if (dependenciesFulfilled) { + var callback = dependenciesFulfilled; + dependenciesFulfilled = null; + callback(); // can add another dependenciesFulfilled + } + } +} + +/** @param {string|number=} what */ +function abort(what) { + Module['onAbort']?.(what); + + what = 'Aborted(' + what + ')'; + // TODO(sbc): Should we remove printing and leave it up to whoever + // catches the exception? + err(what); + + ABORT = true; + + // Use a wasm runtime error, because a JS error might be seen as a foreign + // exception, which means we'd run destructors on it. We need the error to + // simply make the program stop. + // FIXME This approach does not work in Wasm EH because it currently does not assume + // all RuntimeErrors are from traps; it decides whether a RuntimeError is from + // a trap or not based on a hidden field within the object. So at the moment + // we don't have a way of throwing a wasm trap from JS. TODO Make a JS API that + // allows this in the wasm spec. + + // Suppress closure compiler warning here. Closure compiler's builtin extern + // definition for WebAssembly.RuntimeError claims it takes no arguments even + // though it can. + // TODO(https://github.com/google/closure-compiler/pull/3913): Remove if/when upstream closure gets fixed. + /** @suppress {checkTypes} */ + var e = new WebAssembly.RuntimeError(what); + + // Throw the error whether or not MODULARIZE is set because abort is used + // in code paths apart from instantiation where an exception is expected + // to be thrown when abort is called. + throw e; +} + +function createExportWrapper(name, nargs) { + return (...args) => { + assert(runtimeInitialized, `native function \`${name}\` called before runtime initialization`); + var f = wasmExports[name]; + assert(f, `exported native function \`${name}\` not found`); + // Only assert for too many arguments. Too few can be valid since the missing arguments will be zero filled. + assert(args.length <= nargs, `native function \`${name}\` called with ${args.length} args but expects ${nargs}`); + return f(...args); + }; +} + +var wasmBinaryFile; + +function findWasmBinary() { + return locateFile('zip_read_file_fuzzer.wasm'); +} + +function getBinarySync(file) { + if (file == wasmBinaryFile && wasmBinary) { + return new Uint8Array(wasmBinary); + } + if (readBinary) { + return readBinary(file); + } + throw 'both async and sync fetching of the wasm failed'; +} + +async function getWasmBinary(binaryFile) { + // If we don't have the binary yet, load it asynchronously using readAsync. + if (!wasmBinary) { + // Fetch the binary using readAsync + try { + var response = await readAsync(binaryFile); + return new Uint8Array(response); + } catch { + // Fall back to getBinarySync below; + } + } + + // Otherwise, getBinarySync should be able to get it synchronously + return getBinarySync(binaryFile); +} + +async function instantiateArrayBuffer(binaryFile, imports) { + try { + var binary = await getWasmBinary(binaryFile); + var instance = await WebAssembly.instantiate(binary, imports); + return instance; + } catch (reason) { + err(`failed to asynchronously prepare wasm: ${reason}`); + + // Warn on some common problems. + if (isFileURI(wasmBinaryFile)) { + err(`warning: Loading from a file URI (${wasmBinaryFile}) is not supported in most browsers. See https://emscripten.org/docs/getting_started/FAQ.html#how-do-i-run-a-local-webserver-for-testing-why-does-my-program-stall-in-downloading-or-preparing`); + } + abort(reason); + } +} + +async function instantiateAsync(binary, binaryFile, imports) { + if (!binary && typeof WebAssembly.instantiateStreaming == 'function' + // Don't use streaming for file:// delivered objects in a webview, fetch them synchronously. + && !isFileURI(binaryFile) + // Avoid instantiateStreaming() on Node.js environment for now, as while + // Node.js v18.1.0 implements it, it does not have a full fetch() + // implementation yet. + // + // Reference: + // https://github.com/emscripten-core/emscripten/pull/16917 + && !ENVIRONMENT_IS_NODE + ) { + try { + var response = fetch(binaryFile, { credentials: 'same-origin' }); + var instantiationResult = await WebAssembly.instantiateStreaming(response, imports); + return instantiationResult; + } catch (reason) { + // We expect the most common failure cause to be a bad MIME type for the binary, + // in which case falling back to ArrayBuffer instantiation should work. + err(`wasm streaming compile failed: ${reason}`); + err('falling back to ArrayBuffer instantiation'); + // fall back of instantiateArrayBuffer below + }; + } + return instantiateArrayBuffer(binaryFile, imports); +} + +function getWasmImports() { + // prepare imports + return { + 'env': wasmImports, + 'wasi_snapshot_preview1': wasmImports, + } +} + +// Create the wasm instance. +// Receives the wasm imports, returns the exports. +async function createWasm() { + // Load the wasm module and create an instance of using native support in the JS engine. + // handle a generated wasm instance, receiving its exports and + // performing other necessary setup + /** @param {WebAssembly.Module=} module*/ + function receiveInstance(instance, module) { + wasmExports = instance.exports; + + + + wasmMemory = wasmExports['memory']; + + assert(wasmMemory, 'memory not found in wasm exports'); + updateMemoryViews(); + + removeRunDependency('wasm-instantiate'); + return wasmExports; + } + // wait for the pthread pool (if any) + addRunDependency('wasm-instantiate'); + + // Prefer streaming instantiation if available. + // Async compilation can be confusing when an error on the page overwrites Module + // (for example, if the order of elements is wrong, and the one defining Module is + // later), so we save Module and check it later. + var trueModule = Module; + function receiveInstantiationResult(result) { + // 'result' is a ResultObject object which has both the module and instance. + // receiveInstance() will swap in the exports (to Module.asm) so they can be called + assert(Module === trueModule, 'the Module object should not be replaced during async compilation - perhaps the order of HTML elements is wrong?'); + trueModule = null; + // TODO: Due to Closure regression https://github.com/google/closure-compiler/issues/3193, the above line no longer optimizes out down to the following line. + // When the regression is fixed, can restore the above PTHREADS-enabled path. + return receiveInstance(result['instance']); + } + + var info = getWasmImports(); + + // User shell pages can write their own Module.instantiateWasm = function(imports, successCallback) callback + // to manually instantiate the Wasm module themselves. This allows pages to + // run the instantiation parallel to any other async startup actions they are + // performing. + // Also pthreads and wasm workers initialize the wasm instance through this + // path. + if (Module['instantiateWasm']) { + return new Promise((resolve, reject) => { + try { + Module['instantiateWasm'](info, (mod, inst) => { + receiveInstance(mod, inst); + resolve(mod.exports); + }); + } catch(e) { + err(`Module.instantiateWasm callback failed with error: ${e}`); + reject(e); + } + }); + } + + wasmBinaryFile ??= findWasmBinary(); + var result = await instantiateAsync(wasmBinary, wasmBinaryFile, info); + var exports = receiveInstantiationResult(result); + return exports; +} + +// end include: preamble.js + +// Begin JS library code + + + class ExitStatus { + name = 'ExitStatus'; + constructor(status) { + this.message = `Program terminated with exit(${status})`; + this.status = status; + } + } + + var callRuntimeCallbacks = (callbacks) => { + while (callbacks.length > 0) { + // Pass the module as the first argument. + callbacks.shift()(Module); + } + }; + var onPostRuns = []; + var addOnPostRun = (cb) => onPostRuns.unshift(cb); + + var onPreRuns = []; + var addOnPreRun = (cb) => onPreRuns.unshift(cb); + + + + /** + * @param {number} ptr + * @param {string} type + */ + function getValue(ptr, type = 'i8') { + if (type.endsWith('*')) type = '*'; + switch (type) { + case 'i1': return HEAP8[ptr]; + case 'i8': return HEAP8[ptr]; + case 'i16': return HEAP16[((ptr)>>1)]; + case 'i32': return HEAP32[((ptr)>>2)]; + case 'i64': return HEAP64[((ptr)>>3)]; + case 'float': return HEAPF32[((ptr)>>2)]; + case 'double': return HEAPF64[((ptr)>>3)]; + case '*': return HEAPU32[((ptr)>>2)]; + default: abort(`invalid type for getValue: ${type}`); + } + } + + var noExitRuntime = Module['noExitRuntime'] || true; + + var ptrToString = (ptr) => { + assert(typeof ptr === 'number'); + // With CAN_ADDRESS_2GB or MEMORY64, pointers are already unsigned. + ptr >>>= 0; + return '0x' + ptr.toString(16).padStart(8, '0'); + }; + + + /** + * @param {number} ptr + * @param {number} value + * @param {string} type + */ + function setValue(ptr, value, type = 'i8') { + if (type.endsWith('*')) type = '*'; + switch (type) { + case 'i1': HEAP8[ptr] = value; break; + case 'i8': HEAP8[ptr] = value; break; + case 'i16': HEAP16[((ptr)>>1)] = value; break; + case 'i32': HEAP32[((ptr)>>2)] = value; break; + case 'i64': HEAP64[((ptr)>>3)] = BigInt(value); break; + case 'float': HEAPF32[((ptr)>>2)] = value; break; + case 'double': HEAPF64[((ptr)>>3)] = value; break; + case '*': HEAPU32[((ptr)>>2)] = value; break; + default: abort(`invalid type for setValue: ${type}`); + } + } + + var stackRestore = (val) => __emscripten_stack_restore(val); + + var stackSave = () => _emscripten_stack_get_current(); + + var warnOnce = (text) => { + warnOnce.shown ||= {}; + if (!warnOnce.shown[text]) { + warnOnce.shown[text] = 1; + if (ENVIRONMENT_IS_NODE) text = 'warning: ' + text; + err(text); + } + }; + + var PATH = { + isAbs:(path) => path.charAt(0) === '/', + splitPath:(filename) => { + var splitPathRe = /^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/; + return splitPathRe.exec(filename).slice(1); + }, + normalizeArray:(parts, allowAboveRoot) => { + // if the path tries to go above the root, `up` ends up > 0 + var up = 0; + for (var i = parts.length - 1; i >= 0; i--) { + var last = parts[i]; + if (last === '.') { + parts.splice(i, 1); + } else if (last === '..') { + parts.splice(i, 1); + up++; + } else if (up) { + parts.splice(i, 1); + up--; + } + } + // if the path is allowed to go above the root, restore leading ..s + if (allowAboveRoot) { + for (; up; up--) { + parts.unshift('..'); + } + } + return parts; + }, + normalize:(path) => { + var isAbsolute = PATH.isAbs(path), + trailingSlash = path.slice(-1) === '/'; + // Normalize the path + path = PATH.normalizeArray(path.split('/').filter((p) => !!p), !isAbsolute).join('/'); + if (!path && !isAbsolute) { + path = '.'; + } + if (path && trailingSlash) { + path += '/'; + } + return (isAbsolute ? '/' : '') + path; + }, + dirname:(path) => { + var result = PATH.splitPath(path), + root = result[0], + dir = result[1]; + if (!root && !dir) { + // No dirname whatsoever + return '.'; + } + if (dir) { + // It has a dirname, strip trailing slash + dir = dir.slice(0, -1); + } + return root + dir; + }, + basename:(path) => path && path.match(/([^\/]+|\/)\/*$/)[1], + join:(...paths) => PATH.normalize(paths.join('/')), + join2:(l, r) => PATH.normalize(l + '/' + r), + }; + + var initRandomFill = () => { + // This block is not needed on v19+ since crypto.getRandomValues is builtin + if (ENVIRONMENT_IS_NODE) { + var nodeCrypto = require('crypto'); + return (view) => nodeCrypto.randomFillSync(view); + } + + return (view) => crypto.getRandomValues(view); + }; + var randomFill = (view) => { + // Lazily init on the first invocation. + (randomFill = initRandomFill())(view); + }; + + + + var PATH_FS = { + resolve:(...args) => { + var resolvedPath = '', + resolvedAbsolute = false; + for (var i = args.length - 1; i >= -1 && !resolvedAbsolute; i--) { + var path = (i >= 0) ? args[i] : FS.cwd(); + // Skip empty and invalid entries + if (typeof path != 'string') { + throw new TypeError('Arguments to path.resolve must be strings'); + } else if (!path) { + return ''; // an invalid portion invalidates the whole thing + } + resolvedPath = path + '/' + resolvedPath; + resolvedAbsolute = PATH.isAbs(path); + } + // At this point the path should be resolved to a full absolute path, but + // handle relative paths to be safe (might happen when process.cwd() fails) + resolvedPath = PATH.normalizeArray(resolvedPath.split('/').filter((p) => !!p), !resolvedAbsolute).join('/'); + return ((resolvedAbsolute ? '/' : '') + resolvedPath) || '.'; + }, + relative:(from, to) => { + from = PATH_FS.resolve(from).slice(1); + to = PATH_FS.resolve(to).slice(1); + function trim(arr) { + var start = 0; + for (; start < arr.length; start++) { + if (arr[start] !== '') break; + } + var end = arr.length - 1; + for (; end >= 0; end--) { + if (arr[end] !== '') break; + } + if (start > end) return []; + return arr.slice(start, end - start + 1); + } + var fromParts = trim(from.split('/')); + var toParts = trim(to.split('/')); + var length = Math.min(fromParts.length, toParts.length); + var samePartsLength = length; + for (var i = 0; i < length; i++) { + if (fromParts[i] !== toParts[i]) { + samePartsLength = i; + break; + } + } + var outputParts = []; + for (var i = samePartsLength; i < fromParts.length; i++) { + outputParts.push('..'); + } + outputParts = outputParts.concat(toParts.slice(samePartsLength)); + return outputParts.join('/'); + }, + }; + + + var UTF8Decoder = typeof TextDecoder != 'undefined' ? new TextDecoder() : undefined; + + /** + * Given a pointer 'idx' to a null-terminated UTF8-encoded string in the given + * array that contains uint8 values, returns a copy of that string as a + * Javascript String object. + * heapOrArray is either a regular array, or a JavaScript typed array view. + * @param {number=} idx + * @param {number=} maxBytesToRead + * @return {string} + */ + var UTF8ArrayToString = (heapOrArray, idx = 0, maxBytesToRead = NaN) => { + var endIdx = idx + maxBytesToRead; + var endPtr = idx; + // TextDecoder needs to know the byte length in advance, it doesn't stop on + // null terminator by itself. Also, use the length info to avoid running tiny + // strings through TextDecoder, since .subarray() allocates garbage. + // (As a tiny code save trick, compare endPtr against endIdx using a negation, + // so that undefined/NaN means Infinity) + while (heapOrArray[endPtr] && !(endPtr >= endIdx)) ++endPtr; + + if (endPtr - idx > 16 && heapOrArray.buffer && UTF8Decoder) { + return UTF8Decoder.decode(heapOrArray.subarray(idx, endPtr)); + } + var str = ''; + // If building with TextDecoder, we have already computed the string length + // above, so test loop end condition against that + while (idx < endPtr) { + // For UTF8 byte structure, see: + // http://en.wikipedia.org/wiki/UTF-8#Description + // https://www.ietf.org/rfc/rfc2279.txt + // https://tools.ietf.org/html/rfc3629 + var u0 = heapOrArray[idx++]; + if (!(u0 & 0x80)) { str += String.fromCharCode(u0); continue; } + var u1 = heapOrArray[idx++] & 63; + if ((u0 & 0xE0) == 0xC0) { str += String.fromCharCode(((u0 & 31) << 6) | u1); continue; } + var u2 = heapOrArray[idx++] & 63; + if ((u0 & 0xF0) == 0xE0) { + u0 = ((u0 & 15) << 12) | (u1 << 6) | u2; + } else { + if ((u0 & 0xF8) != 0xF0) warnOnce('Invalid UTF-8 leading byte ' + ptrToString(u0) + ' encountered when deserializing a UTF-8 string in wasm memory to a JS string!'); + u0 = ((u0 & 7) << 18) | (u1 << 12) | (u2 << 6) | (heapOrArray[idx++] & 63); + } + + if (u0 < 0x10000) { + str += String.fromCharCode(u0); + } else { + var ch = u0 - 0x10000; + str += String.fromCharCode(0xD800 | (ch >> 10), 0xDC00 | (ch & 0x3FF)); + } + } + return str; + }; + + var FS_stdin_getChar_buffer = []; + + var lengthBytesUTF8 = (str) => { + var len = 0; + for (var i = 0; i < str.length; ++i) { + // Gotcha: charCodeAt returns a 16-bit word that is a UTF-16 encoded code + // unit, not a Unicode code point of the character! So decode + // UTF16->UTF32->UTF8. + // See http://unicode.org/faq/utf_bom.html#utf16-3 + var c = str.charCodeAt(i); // possibly a lead surrogate + if (c <= 0x7F) { + len++; + } else if (c <= 0x7FF) { + len += 2; + } else if (c >= 0xD800 && c <= 0xDFFF) { + len += 4; ++i; + } else { + len += 3; + } + } + return len; + }; + + var stringToUTF8Array = (str, heap, outIdx, maxBytesToWrite) => { + assert(typeof str === 'string', `stringToUTF8Array expects a string (got ${typeof str})`); + // Parameter maxBytesToWrite is not optional. Negative values, 0, null, + // undefined and false each don't write out any bytes. + if (!(maxBytesToWrite > 0)) + return 0; + + var startIdx = outIdx; + var endIdx = outIdx + maxBytesToWrite - 1; // -1 for string null terminator. + for (var i = 0; i < str.length; ++i) { + // Gotcha: charCodeAt returns a 16-bit word that is a UTF-16 encoded code + // unit, not a Unicode code point of the character! So decode + // UTF16->UTF32->UTF8. + // See http://unicode.org/faq/utf_bom.html#utf16-3 + // For UTF8 byte structure, see http://en.wikipedia.org/wiki/UTF-8#Description + // and https://www.ietf.org/rfc/rfc2279.txt + // and https://tools.ietf.org/html/rfc3629 + var u = str.charCodeAt(i); // possibly a lead surrogate + if (u >= 0xD800 && u <= 0xDFFF) { + var u1 = str.charCodeAt(++i); + u = 0x10000 + ((u & 0x3FF) << 10) | (u1 & 0x3FF); + } + if (u <= 0x7F) { + if (outIdx >= endIdx) break; + heap[outIdx++] = u; + } else if (u <= 0x7FF) { + if (outIdx + 1 >= endIdx) break; + heap[outIdx++] = 0xC0 | (u >> 6); + heap[outIdx++] = 0x80 | (u & 63); + } else if (u <= 0xFFFF) { + if (outIdx + 2 >= endIdx) break; + heap[outIdx++] = 0xE0 | (u >> 12); + heap[outIdx++] = 0x80 | ((u >> 6) & 63); + heap[outIdx++] = 0x80 | (u & 63); + } else { + if (outIdx + 3 >= endIdx) break; + if (u > 0x10FFFF) warnOnce('Invalid Unicode code point ' + ptrToString(u) + ' encountered when serializing a JS string to a UTF-8 string in wasm memory! (Valid unicode code points should be in range 0-0x10FFFF).'); + heap[outIdx++] = 0xF0 | (u >> 18); + heap[outIdx++] = 0x80 | ((u >> 12) & 63); + heap[outIdx++] = 0x80 | ((u >> 6) & 63); + heap[outIdx++] = 0x80 | (u & 63); + } + } + // Null-terminate the pointer to the buffer. + heap[outIdx] = 0; + return outIdx - startIdx; + }; + /** @type {function(string, boolean=, number=)} */ + var intArrayFromString = (stringy, dontAddNull, length) => { + var len = length > 0 ? length : lengthBytesUTF8(stringy)+1; + var u8array = new Array(len); + var numBytesWritten = stringToUTF8Array(stringy, u8array, 0, u8array.length); + if (dontAddNull) u8array.length = numBytesWritten; + return u8array; + }; + var FS_stdin_getChar = () => { + if (!FS_stdin_getChar_buffer.length) { + var result = null; + if (ENVIRONMENT_IS_NODE) { + // we will read data by chunks of BUFSIZE + var BUFSIZE = 256; + var buf = Buffer.alloc(BUFSIZE); + var bytesRead = 0; + + // For some reason we must suppress a closure warning here, even though + // fd definitely exists on process.stdin, and is even the proper way to + // get the fd of stdin, + // https://github.com/nodejs/help/issues/2136#issuecomment-523649904 + // This started to happen after moving this logic out of library_tty.js, + // so it is related to the surrounding code in some unclear manner. + /** @suppress {missingProperties} */ + var fd = process.stdin.fd; + + try { + bytesRead = fs.readSync(fd, buf, 0, BUFSIZE); + } catch(e) { + // Cross-platform differences: on Windows, reading EOF throws an + // exception, but on other OSes, reading EOF returns 0. Uniformize + // behavior by treating the EOF exception to return 0. + if (e.toString().includes('EOF')) bytesRead = 0; + else throw e; + } + + if (bytesRead > 0) { + result = buf.slice(0, bytesRead).toString('utf-8'); + } + } else + if (typeof window != 'undefined' && + typeof window.prompt == 'function') { + // Browser. + result = window.prompt('Input: '); // returns null on cancel + if (result !== null) { + result += '\n'; + } + } else + {} + if (!result) { + return null; + } + FS_stdin_getChar_buffer = intArrayFromString(result, true); + } + return FS_stdin_getChar_buffer.shift(); + }; + var TTY = { + ttys:[], + init() { + // https://github.com/emscripten-core/emscripten/pull/1555 + // if (ENVIRONMENT_IS_NODE) { + // // currently, FS.init does not distinguish if process.stdin is a file or TTY + // // device, it always assumes it's a TTY device. because of this, we're forcing + // // process.stdin to UTF8 encoding to at least make stdin reading compatible + // // with text files until FS.init can be refactored. + // process.stdin.setEncoding('utf8'); + // } + }, + shutdown() { + // https://github.com/emscripten-core/emscripten/pull/1555 + // if (ENVIRONMENT_IS_NODE) { + // // inolen: any idea as to why node -e 'process.stdin.read()' wouldn't exit immediately (with process.stdin being a tty)? + // // isaacs: because now it's reading from the stream, you've expressed interest in it, so that read() kicks off a _read() which creates a ReadReq operation + // // inolen: I thought read() in that case was a synchronous operation that just grabbed some amount of buffered data if it exists? + // // isaacs: it is. but it also triggers a _read() call, which calls readStart() on the handle + // // isaacs: do process.stdin.pause() and i'd think it'd probably close the pending call + // process.stdin.pause(); + // } + }, + register(dev, ops) { + TTY.ttys[dev] = { input: [], output: [], ops: ops }; + FS.registerDevice(dev, TTY.stream_ops); + }, + stream_ops:{ + open(stream) { + var tty = TTY.ttys[stream.node.rdev]; + if (!tty) { + throw new FS.ErrnoError(43); + } + stream.tty = tty; + stream.seekable = false; + }, + close(stream) { + // flush any pending line data + stream.tty.ops.fsync(stream.tty); + }, + fsync(stream) { + stream.tty.ops.fsync(stream.tty); + }, + read(stream, buffer, offset, length, pos /* ignored */) { + if (!stream.tty || !stream.tty.ops.get_char) { + throw new FS.ErrnoError(60); + } + var bytesRead = 0; + for (var i = 0; i < length; i++) { + var result; + try { + result = stream.tty.ops.get_char(stream.tty); + } catch (e) { + throw new FS.ErrnoError(29); + } + if (result === undefined && bytesRead === 0) { + throw new FS.ErrnoError(6); + } + if (result === null || result === undefined) break; + bytesRead++; + buffer[offset+i] = result; + } + if (bytesRead) { + stream.node.atime = Date.now(); + } + return bytesRead; + }, + write(stream, buffer, offset, length, pos) { + if (!stream.tty || !stream.tty.ops.put_char) { + throw new FS.ErrnoError(60); + } + try { + for (var i = 0; i < length; i++) { + stream.tty.ops.put_char(stream.tty, buffer[offset+i]); + } + } catch (e) { + throw new FS.ErrnoError(29); + } + if (length) { + stream.node.mtime = stream.node.ctime = Date.now(); + } + return i; + }, + }, + default_tty_ops:{ + get_char(tty) { + return FS_stdin_getChar(); + }, + put_char(tty, val) { + if (val === null || val === 10) { + out(UTF8ArrayToString(tty.output)); + tty.output = []; + } else { + if (val != 0) tty.output.push(val); // val == 0 would cut text output off in the middle. + } + }, + fsync(tty) { + if (tty.output?.length > 0) { + out(UTF8ArrayToString(tty.output)); + tty.output = []; + } + }, + ioctl_tcgets(tty) { + // typical setting + return { + c_iflag: 25856, + c_oflag: 5, + c_cflag: 191, + c_lflag: 35387, + c_cc: [ + 0x03, 0x1c, 0x7f, 0x15, 0x04, 0x00, 0x01, 0x00, 0x11, 0x13, 0x1a, 0x00, + 0x12, 0x0f, 0x17, 0x16, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + ] + }; + }, + ioctl_tcsets(tty, optional_actions, data) { + // currently just ignore + return 0; + }, + ioctl_tiocgwinsz(tty) { + return [24, 80]; + }, + }, + default_tty1_ops:{ + put_char(tty, val) { + if (val === null || val === 10) { + err(UTF8ArrayToString(tty.output)); + tty.output = []; + } else { + if (val != 0) tty.output.push(val); + } + }, + fsync(tty) { + if (tty.output?.length > 0) { + err(UTF8ArrayToString(tty.output)); + tty.output = []; + } + }, + }, + }; + + + var mmapAlloc = (size) => { + abort('internal error: mmapAlloc called but `emscripten_builtin_memalign` native symbol not exported'); + }; + var MEMFS = { + ops_table:null, + mount(mount) { + return MEMFS.createNode(null, '/', 16895, 0); + }, + createNode(parent, name, mode, dev) { + if (FS.isBlkdev(mode) || FS.isFIFO(mode)) { + // no supported + throw new FS.ErrnoError(63); + } + MEMFS.ops_table ||= { + dir: { + node: { + getattr: MEMFS.node_ops.getattr, + setattr: MEMFS.node_ops.setattr, + lookup: MEMFS.node_ops.lookup, + mknod: MEMFS.node_ops.mknod, + rename: MEMFS.node_ops.rename, + unlink: MEMFS.node_ops.unlink, + rmdir: MEMFS.node_ops.rmdir, + readdir: MEMFS.node_ops.readdir, + symlink: MEMFS.node_ops.symlink + }, + stream: { + llseek: MEMFS.stream_ops.llseek + } + }, + file: { + node: { + getattr: MEMFS.node_ops.getattr, + setattr: MEMFS.node_ops.setattr + }, + stream: { + llseek: MEMFS.stream_ops.llseek, + read: MEMFS.stream_ops.read, + write: MEMFS.stream_ops.write, + mmap: MEMFS.stream_ops.mmap, + msync: MEMFS.stream_ops.msync + } + }, + link: { + node: { + getattr: MEMFS.node_ops.getattr, + setattr: MEMFS.node_ops.setattr, + readlink: MEMFS.node_ops.readlink + }, + stream: {} + }, + chrdev: { + node: { + getattr: MEMFS.node_ops.getattr, + setattr: MEMFS.node_ops.setattr + }, + stream: FS.chrdev_stream_ops + } + }; + var node = FS.createNode(parent, name, mode, dev); + if (FS.isDir(node.mode)) { + node.node_ops = MEMFS.ops_table.dir.node; + node.stream_ops = MEMFS.ops_table.dir.stream; + node.contents = {}; + } else if (FS.isFile(node.mode)) { + node.node_ops = MEMFS.ops_table.file.node; + node.stream_ops = MEMFS.ops_table.file.stream; + node.usedBytes = 0; // The actual number of bytes used in the typed array, as opposed to contents.length which gives the whole capacity. + // When the byte data of the file is populated, this will point to either a typed array, or a normal JS array. Typed arrays are preferred + // for performance, and used by default. However, typed arrays are not resizable like normal JS arrays are, so there is a small disk size + // penalty involved for appending file writes that continuously grow a file similar to std::vector capacity vs used -scheme. + node.contents = null; + } else if (FS.isLink(node.mode)) { + node.node_ops = MEMFS.ops_table.link.node; + node.stream_ops = MEMFS.ops_table.link.stream; + } else if (FS.isChrdev(node.mode)) { + node.node_ops = MEMFS.ops_table.chrdev.node; + node.stream_ops = MEMFS.ops_table.chrdev.stream; + } + node.atime = node.mtime = node.ctime = Date.now(); + // add the new node to the parent + if (parent) { + parent.contents[name] = node; + parent.atime = parent.mtime = parent.ctime = node.atime; + } + return node; + }, + getFileDataAsTypedArray(node) { + if (!node.contents) return new Uint8Array(0); + if (node.contents.subarray) return node.contents.subarray(0, node.usedBytes); // Make sure to not return excess unused bytes. + return new Uint8Array(node.contents); + }, + expandFileStorage(node, newCapacity) { + var prevCapacity = node.contents ? node.contents.length : 0; + if (prevCapacity >= newCapacity) return; // No need to expand, the storage was already large enough. + // Don't expand strictly to the given requested limit if it's only a very small increase, but instead geometrically grow capacity. + // For small filesizes (<1MB), perform size*2 geometric increase, but for large sizes, do a much more conservative size*1.125 increase to + // avoid overshooting the allocation cap by a very large margin. + var CAPACITY_DOUBLING_MAX = 1024 * 1024; + newCapacity = Math.max(newCapacity, (prevCapacity * (prevCapacity < CAPACITY_DOUBLING_MAX ? 2.0 : 1.125)) >>> 0); + if (prevCapacity != 0) newCapacity = Math.max(newCapacity, 256); // At minimum allocate 256b for each file when expanding. + var oldContents = node.contents; + node.contents = new Uint8Array(newCapacity); // Allocate new storage. + if (node.usedBytes > 0) node.contents.set(oldContents.subarray(0, node.usedBytes), 0); // Copy old data over to the new storage. + }, + resizeFileStorage(node, newSize) { + if (node.usedBytes == newSize) return; + if (newSize == 0) { + node.contents = null; // Fully decommit when requesting a resize to zero. + node.usedBytes = 0; + } else { + var oldContents = node.contents; + node.contents = new Uint8Array(newSize); // Allocate new storage. + if (oldContents) { + node.contents.set(oldContents.subarray(0, Math.min(newSize, node.usedBytes))); // Copy old data over to the new storage. + } + node.usedBytes = newSize; + } + }, + node_ops:{ + getattr(node) { + var attr = {}; + // device numbers reuse inode numbers. + attr.dev = FS.isChrdev(node.mode) ? node.id : 1; + attr.ino = node.id; + attr.mode = node.mode; + attr.nlink = 1; + attr.uid = 0; + attr.gid = 0; + attr.rdev = node.rdev; + if (FS.isDir(node.mode)) { + attr.size = 4096; + } else if (FS.isFile(node.mode)) { + attr.size = node.usedBytes; + } else if (FS.isLink(node.mode)) { + attr.size = node.link.length; + } else { + attr.size = 0; + } + attr.atime = new Date(node.atime); + attr.mtime = new Date(node.mtime); + attr.ctime = new Date(node.ctime); + // NOTE: In our implementation, st_blocks = Math.ceil(st_size/st_blksize), + // but this is not required by the standard. + attr.blksize = 4096; + attr.blocks = Math.ceil(attr.size / attr.blksize); + return attr; + }, + setattr(node, attr) { + for (const key of ["mode", "atime", "mtime", "ctime"]) { + if (attr[key] != null) { + node[key] = attr[key]; + } + } + if (attr.size !== undefined) { + MEMFS.resizeFileStorage(node, attr.size); + } + }, + lookup(parent, name) { + throw new FS.ErrnoError(44); + }, + mknod(parent, name, mode, dev) { + return MEMFS.createNode(parent, name, mode, dev); + }, + rename(old_node, new_dir, new_name) { + var new_node; + try { + new_node = FS.lookupNode(new_dir, new_name); + } catch (e) {} + if (new_node) { + if (FS.isDir(old_node.mode)) { + // if we're overwriting a directory at new_name, make sure it's empty. + for (var i in new_node.contents) { + throw new FS.ErrnoError(55); + } + } + FS.hashRemoveNode(new_node); + } + // do the internal rewiring + delete old_node.parent.contents[old_node.name]; + new_dir.contents[new_name] = old_node; + old_node.name = new_name; + new_dir.ctime = new_dir.mtime = old_node.parent.ctime = old_node.parent.mtime = Date.now(); + }, + unlink(parent, name) { + delete parent.contents[name]; + parent.ctime = parent.mtime = Date.now(); + }, + rmdir(parent, name) { + var node = FS.lookupNode(parent, name); + for (var i in node.contents) { + throw new FS.ErrnoError(55); + } + delete parent.contents[name]; + parent.ctime = parent.mtime = Date.now(); + }, + readdir(node) { + return ['.', '..', ...Object.keys(node.contents)]; + }, + symlink(parent, newname, oldpath) { + var node = MEMFS.createNode(parent, newname, 0o777 | 40960, 0); + node.link = oldpath; + return node; + }, + readlink(node) { + if (!FS.isLink(node.mode)) { + throw new FS.ErrnoError(28); + } + return node.link; + }, + }, + stream_ops:{ + read(stream, buffer, offset, length, position) { + var contents = stream.node.contents; + if (position >= stream.node.usedBytes) return 0; + var size = Math.min(stream.node.usedBytes - position, length); + assert(size >= 0); + if (size > 8 && contents.subarray) { // non-trivial, and typed array + buffer.set(contents.subarray(position, position + size), offset); + } else { + for (var i = 0; i < size; i++) buffer[offset + i] = contents[position + i]; + } + return size; + }, + write(stream, buffer, offset, length, position, canOwn) { + // The data buffer should be a typed array view + assert(!(buffer instanceof ArrayBuffer)); + + if (!length) return 0; + var node = stream.node; + node.mtime = node.ctime = Date.now(); + + if (buffer.subarray && (!node.contents || node.contents.subarray)) { // This write is from a typed array to a typed array? + if (canOwn) { + assert(position === 0, 'canOwn must imply no weird position inside the file'); + node.contents = buffer.subarray(offset, offset + length); + node.usedBytes = length; + return length; + } else if (node.usedBytes === 0 && position === 0) { // If this is a simple first write to an empty file, do a fast set since we don't need to care about old data. + node.contents = buffer.slice(offset, offset + length); + node.usedBytes = length; + return length; + } else if (position + length <= node.usedBytes) { // Writing to an already allocated and used subrange of the file? + node.contents.set(buffer.subarray(offset, offset + length), position); + return length; + } + } + + // Appending to an existing file and we need to reallocate, or source data did not come as a typed array. + MEMFS.expandFileStorage(node, position+length); + if (node.contents.subarray && buffer.subarray) { + // Use typed array write which is available. + node.contents.set(buffer.subarray(offset, offset + length), position); + } else { + for (var i = 0; i < length; i++) { + node.contents[position + i] = buffer[offset + i]; // Or fall back to manual write if not. + } + } + node.usedBytes = Math.max(node.usedBytes, position + length); + return length; + }, + llseek(stream, offset, whence) { + var position = offset; + if (whence === 1) { + position += stream.position; + } else if (whence === 2) { + if (FS.isFile(stream.node.mode)) { + position += stream.node.usedBytes; + } + } + if (position < 0) { + throw new FS.ErrnoError(28); + } + return position; + }, + mmap(stream, length, position, prot, flags) { + if (!FS.isFile(stream.node.mode)) { + throw new FS.ErrnoError(43); + } + var ptr; + var allocated; + var contents = stream.node.contents; + // Only make a new copy when MAP_PRIVATE is specified. + if (!(flags & 2) && contents && contents.buffer === HEAP8.buffer) { + // We can't emulate MAP_SHARED when the file is not backed by the + // buffer we're mapping to (e.g. the HEAP buffer). + allocated = false; + ptr = contents.byteOffset; + } else { + allocated = true; + ptr = mmapAlloc(length); + if (!ptr) { + throw new FS.ErrnoError(48); + } + if (contents) { + // Try to avoid unnecessary slices. + if (position > 0 || position + length < contents.length) { + if (contents.subarray) { + contents = contents.subarray(position, position + length); + } else { + contents = Array.prototype.slice.call(contents, position, position + length); + } + } + HEAP8.set(contents, ptr); + } + } + return { ptr, allocated }; + }, + msync(stream, buffer, offset, length, mmapFlags) { + MEMFS.stream_ops.write(stream, buffer, 0, length, offset, false); + // should we check if bytesWritten and length are the same? + return 0; + }, + }, + }; + + var asyncLoad = async (url) => { + var arrayBuffer = await readAsync(url); + assert(arrayBuffer, `Loading data file "${url}" failed (no arrayBuffer).`); + return new Uint8Array(arrayBuffer); + }; + + + var FS_createDataFile = (parent, name, fileData, canRead, canWrite, canOwn) => { + FS.createDataFile(parent, name, fileData, canRead, canWrite, canOwn); + }; + + var preloadPlugins = Module['preloadPlugins'] || []; + var FS_handledByPreloadPlugin = (byteArray, fullname, finish, onerror) => { + // Ensure plugins are ready. + if (typeof Browser != 'undefined') Browser.init(); + + var handled = false; + preloadPlugins.forEach((plugin) => { + if (handled) return; + if (plugin['canHandle'](fullname)) { + plugin['handle'](byteArray, fullname, finish, onerror); + handled = true; + } + }); + return handled; + }; + var FS_createPreloadedFile = (parent, name, url, canRead, canWrite, onload, onerror, dontCreateFile, canOwn, preFinish) => { + // TODO we should allow people to just pass in a complete filename instead + // of parent and name being that we just join them anyways + var fullname = name ? PATH_FS.resolve(PATH.join2(parent, name)) : parent; + var dep = getUniqueRunDependency(`cp ${fullname}`); // might have several active requests for the same fullname + function processData(byteArray) { + function finish(byteArray) { + preFinish?.(); + if (!dontCreateFile) { + FS_createDataFile(parent, name, byteArray, canRead, canWrite, canOwn); + } + onload?.(); + removeRunDependency(dep); + } + if (FS_handledByPreloadPlugin(byteArray, fullname, finish, () => { + onerror?.(); + removeRunDependency(dep); + })) { + return; + } + finish(byteArray); + } + addRunDependency(dep); + if (typeof url == 'string') { + asyncLoad(url).then(processData, onerror); + } else { + processData(url); + } + }; + + var FS_modeStringToFlags = (str) => { + var flagModes = { + 'r': 0, + 'r+': 2, + 'w': 512 | 64 | 1, + 'w+': 512 | 64 | 2, + 'a': 1024 | 64 | 1, + 'a+': 1024 | 64 | 2, + }; + var flags = flagModes[str]; + if (typeof flags == 'undefined') { + throw new Error(`Unknown file open mode: ${str}`); + } + return flags; + }; + + var FS_getMode = (canRead, canWrite) => { + var mode = 0; + if (canRead) mode |= 292 | 73; + if (canWrite) mode |= 146; + return mode; + }; + + + + + + + /** + * Given a pointer 'ptr' to a null-terminated UTF8-encoded string in the + * emscripten HEAP, returns a copy of that string as a Javascript String object. + * + * @param {number} ptr + * @param {number=} maxBytesToRead - An optional length that specifies the + * maximum number of bytes to read. You can omit this parameter to scan the + * string until the first 0 byte. If maxBytesToRead is passed, and the string + * at [ptr, ptr+maxBytesToReadr[ contains a null byte in the middle, then the + * string will cut short at that byte index (i.e. maxBytesToRead will not + * produce a string of exact length [ptr, ptr+maxBytesToRead[) N.B. mixing + * frequent uses of UTF8ToString() with and without maxBytesToRead may throw + * JS JIT optimizations off, so it is worth to consider consistently using one + * @return {string} + */ + var UTF8ToString = (ptr, maxBytesToRead) => { + assert(typeof ptr == 'number', `UTF8ToString expects a number (got ${typeof ptr})`); + return ptr ? UTF8ArrayToString(HEAPU8, ptr, maxBytesToRead) : ''; + }; + + var strError = (errno) => UTF8ToString(_strerror(errno)); + + var ERRNO_CODES = { + 'EPERM': 63, + 'ENOENT': 44, + 'ESRCH': 71, + 'EINTR': 27, + 'EIO': 29, + 'ENXIO': 60, + 'E2BIG': 1, + 'ENOEXEC': 45, + 'EBADF': 8, + 'ECHILD': 12, + 'EAGAIN': 6, + 'EWOULDBLOCK': 6, + 'ENOMEM': 48, + 'EACCES': 2, + 'EFAULT': 21, + 'ENOTBLK': 105, + 'EBUSY': 10, + 'EEXIST': 20, + 'EXDEV': 75, + 'ENODEV': 43, + 'ENOTDIR': 54, + 'EISDIR': 31, + 'EINVAL': 28, + 'ENFILE': 41, + 'EMFILE': 33, + 'ENOTTY': 59, + 'ETXTBSY': 74, + 'EFBIG': 22, + 'ENOSPC': 51, + 'ESPIPE': 70, + 'EROFS': 69, + 'EMLINK': 34, + 'EPIPE': 64, + 'EDOM': 18, + 'ERANGE': 68, + 'ENOMSG': 49, + 'EIDRM': 24, + 'ECHRNG': 106, + 'EL2NSYNC': 156, + 'EL3HLT': 107, + 'EL3RST': 108, + 'ELNRNG': 109, + 'EUNATCH': 110, + 'ENOCSI': 111, + 'EL2HLT': 112, + 'EDEADLK': 16, + 'ENOLCK': 46, + 'EBADE': 113, + 'EBADR': 114, + 'EXFULL': 115, + 'ENOANO': 104, + 'EBADRQC': 103, + 'EBADSLT': 102, + 'EDEADLOCK': 16, + 'EBFONT': 101, + 'ENOSTR': 100, + 'ENODATA': 116, + 'ETIME': 117, + 'ENOSR': 118, + 'ENONET': 119, + 'ENOPKG': 120, + 'EREMOTE': 121, + 'ENOLINK': 47, + 'EADV': 122, + 'ESRMNT': 123, + 'ECOMM': 124, + 'EPROTO': 65, + 'EMULTIHOP': 36, + 'EDOTDOT': 125, + 'EBADMSG': 9, + 'ENOTUNIQ': 126, + 'EBADFD': 127, + 'EREMCHG': 128, + 'ELIBACC': 129, + 'ELIBBAD': 130, + 'ELIBSCN': 131, + 'ELIBMAX': 132, + 'ELIBEXEC': 133, + 'ENOSYS': 52, + 'ENOTEMPTY': 55, + 'ENAMETOOLONG': 37, + 'ELOOP': 32, + 'EOPNOTSUPP': 138, + 'EPFNOSUPPORT': 139, + 'ECONNRESET': 15, + 'ENOBUFS': 42, + 'EAFNOSUPPORT': 5, + 'EPROTOTYPE': 67, + 'ENOTSOCK': 57, + 'ENOPROTOOPT': 50, + 'ESHUTDOWN': 140, + 'ECONNREFUSED': 14, + 'EADDRINUSE': 3, + 'ECONNABORTED': 13, + 'ENETUNREACH': 40, + 'ENETDOWN': 38, + 'ETIMEDOUT': 73, + 'EHOSTDOWN': 142, + 'EHOSTUNREACH': 23, + 'EINPROGRESS': 26, + 'EALREADY': 7, + 'EDESTADDRREQ': 17, + 'EMSGSIZE': 35, + 'EPROTONOSUPPORT': 66, + 'ESOCKTNOSUPPORT': 137, + 'EADDRNOTAVAIL': 4, + 'ENETRESET': 39, + 'EISCONN': 30, + 'ENOTCONN': 53, + 'ETOOMANYREFS': 141, + 'EUSERS': 136, + 'EDQUOT': 19, + 'ESTALE': 72, + 'ENOTSUP': 138, + 'ENOMEDIUM': 148, + 'EILSEQ': 25, + 'EOVERFLOW': 61, + 'ECANCELED': 11, + 'ENOTRECOVERABLE': 56, + 'EOWNERDEAD': 62, + 'ESTRPIPE': 135, + }; + var FS = { + root:null, + mounts:[], + devices:{ + }, + streams:[], + nextInode:1, + nameTable:null, + currentPath:"/", + initialized:false, + ignorePermissions:true, + filesystems:null, + syncFSRequests:0, + readFiles:{ + }, + ErrnoError:class extends Error { + name = 'ErrnoError'; + // We set the `name` property to be able to identify `FS.ErrnoError` + // - the `name` is a standard ECMA-262 property of error objects. Kind of good to have it anyway. + // - when using PROXYFS, an error can come from an underlying FS + // as different FS objects have their own FS.ErrnoError each, + // the test `err instanceof FS.ErrnoError` won't detect an error coming from another filesystem, causing bugs. + // we'll use the reliable test `err.name == "ErrnoError"` instead + constructor(errno) { + super(runtimeInitialized ? strError(errno) : ''); + this.errno = errno; + for (var key in ERRNO_CODES) { + if (ERRNO_CODES[key] === errno) { + this.code = key; + break; + } + } + } + }, + FSStream:class { + shared = {}; + get object() { + return this.node; + } + set object(val) { + this.node = val; + } + get isRead() { + return (this.flags & 2097155) !== 1; + } + get isWrite() { + return (this.flags & 2097155) !== 0; + } + get isAppend() { + return (this.flags & 1024); + } + get flags() { + return this.shared.flags; + } + set flags(val) { + this.shared.flags = val; + } + get position() { + return this.shared.position; + } + set position(val) { + this.shared.position = val; + } + }, + FSNode:class { + node_ops = {}; + stream_ops = {}; + readMode = 292 | 73; + writeMode = 146; + mounted = null; + constructor(parent, name, mode, rdev) { + if (!parent) { + parent = this; // root node sets parent to itself + } + this.parent = parent; + this.mount = parent.mount; + this.id = FS.nextInode++; + this.name = name; + this.mode = mode; + this.rdev = rdev; + this.atime = this.mtime = this.ctime = Date.now(); + } + get read() { + return (this.mode & this.readMode) === this.readMode; + } + set read(val) { + val ? this.mode |= this.readMode : this.mode &= ~this.readMode; + } + get write() { + return (this.mode & this.writeMode) === this.writeMode; + } + set write(val) { + val ? this.mode |= this.writeMode : this.mode &= ~this.writeMode; + } + get isFolder() { + return FS.isDir(this.mode); + } + get isDevice() { + return FS.isChrdev(this.mode); + } + }, + lookupPath(path, opts = {}) { + if (!path) { + throw new FS.ErrnoError(44); + } + opts.follow_mount ??= true + + if (!PATH.isAbs(path)) { + path = FS.cwd() + '/' + path; + } + + // limit max consecutive symlinks to 40 (SYMLOOP_MAX). + linkloop: for (var nlinks = 0; nlinks < 40; nlinks++) { + // split the absolute path + var parts = path.split('/').filter((p) => !!p); + + // start at the root + var current = FS.root; + var current_path = '/'; + + for (var i = 0; i < parts.length; i++) { + var islast = (i === parts.length-1); + if (islast && opts.parent) { + // stop resolving + break; + } + + if (parts[i] === '.') { + continue; + } + + if (parts[i] === '..') { + current_path = PATH.dirname(current_path); + current = current.parent; + continue; + } + + current_path = PATH.join2(current_path, parts[i]); + try { + current = FS.lookupNode(current, parts[i]); + } catch (e) { + // if noent_okay is true, suppress a ENOENT in the last component + // and return an object with an undefined node. This is needed for + // resolving symlinks in the path when creating a file. + if ((e?.errno === 44) && islast && opts.noent_okay) { + return { path: current_path }; + } + throw e; + } + + // jump to the mount's root node if this is a mountpoint + if (FS.isMountpoint(current) && (!islast || opts.follow_mount)) { + current = current.mounted.root; + } + + // by default, lookupPath will not follow a symlink if it is the final path component. + // setting opts.follow = true will override this behavior. + if (FS.isLink(current.mode) && (!islast || opts.follow)) { + if (!current.node_ops.readlink) { + throw new FS.ErrnoError(52); + } + var link = current.node_ops.readlink(current); + if (!PATH.isAbs(link)) { + link = PATH.dirname(current_path) + '/' + link; + } + path = link + '/' + parts.slice(i + 1).join('/'); + continue linkloop; + } + } + return { path: current_path, node: current }; + } + throw new FS.ErrnoError(32); + }, + getPath(node) { + var path; + while (true) { + if (FS.isRoot(node)) { + var mount = node.mount.mountpoint; + if (!path) return mount; + return mount[mount.length-1] !== '/' ? `${mount}/${path}` : mount + path; + } + path = path ? `${node.name}/${path}` : node.name; + node = node.parent; + } + }, + hashName(parentid, name) { + var hash = 0; + + for (var i = 0; i < name.length; i++) { + hash = ((hash << 5) - hash + name.charCodeAt(i)) | 0; + } + return ((parentid + hash) >>> 0) % FS.nameTable.length; + }, + hashAddNode(node) { + var hash = FS.hashName(node.parent.id, node.name); + node.name_next = FS.nameTable[hash]; + FS.nameTable[hash] = node; + }, + hashRemoveNode(node) { + var hash = FS.hashName(node.parent.id, node.name); + if (FS.nameTable[hash] === node) { + FS.nameTable[hash] = node.name_next; + } else { + var current = FS.nameTable[hash]; + while (current) { + if (current.name_next === node) { + current.name_next = node.name_next; + break; + } + current = current.name_next; + } + } + }, + lookupNode(parent, name) { + var errCode = FS.mayLookup(parent); + if (errCode) { + throw new FS.ErrnoError(errCode); + } + var hash = FS.hashName(parent.id, name); + for (var node = FS.nameTable[hash]; node; node = node.name_next) { + var nodeName = node.name; + if (node.parent.id === parent.id && nodeName === name) { + return node; + } + } + // if we failed to find it in the cache, call into the VFS + return FS.lookup(parent, name); + }, + createNode(parent, name, mode, rdev) { + assert(typeof parent == 'object') + var node = new FS.FSNode(parent, name, mode, rdev); + + FS.hashAddNode(node); + + return node; + }, + destroyNode(node) { + FS.hashRemoveNode(node); + }, + isRoot(node) { + return node === node.parent; + }, + isMountpoint(node) { + return !!node.mounted; + }, + isFile(mode) { + return (mode & 61440) === 32768; + }, + isDir(mode) { + return (mode & 61440) === 16384; + }, + isLink(mode) { + return (mode & 61440) === 40960; + }, + isChrdev(mode) { + return (mode & 61440) === 8192; + }, + isBlkdev(mode) { + return (mode & 61440) === 24576; + }, + isFIFO(mode) { + return (mode & 61440) === 4096; + }, + isSocket(mode) { + return (mode & 49152) === 49152; + }, + flagsToPermissionString(flag) { + var perms = ['r', 'w', 'rw'][flag & 3]; + if ((flag & 512)) { + perms += 'w'; + } + return perms; + }, + nodePermissions(node, perms) { + if (FS.ignorePermissions) { + return 0; + } + // return 0 if any user, group or owner bits are set. + if (perms.includes('r') && !(node.mode & 292)) { + return 2; + } else if (perms.includes('w') && !(node.mode & 146)) { + return 2; + } else if (perms.includes('x') && !(node.mode & 73)) { + return 2; + } + return 0; + }, + mayLookup(dir) { + if (!FS.isDir(dir.mode)) return 54; + var errCode = FS.nodePermissions(dir, 'x'); + if (errCode) return errCode; + if (!dir.node_ops.lookup) return 2; + return 0; + }, + mayCreate(dir, name) { + if (!FS.isDir(dir.mode)) { + return 54; + } + try { + var node = FS.lookupNode(dir, name); + return 20; + } catch (e) { + } + return FS.nodePermissions(dir, 'wx'); + }, + mayDelete(dir, name, isdir) { + var node; + try { + node = FS.lookupNode(dir, name); + } catch (e) { + return e.errno; + } + var errCode = FS.nodePermissions(dir, 'wx'); + if (errCode) { + return errCode; + } + if (isdir) { + if (!FS.isDir(node.mode)) { + return 54; + } + if (FS.isRoot(node) || FS.getPath(node) === FS.cwd()) { + return 10; + } + } else { + if (FS.isDir(node.mode)) { + return 31; + } + } + return 0; + }, + mayOpen(node, flags) { + if (!node) { + return 44; + } + if (FS.isLink(node.mode)) { + return 32; + } else if (FS.isDir(node.mode)) { + if (FS.flagsToPermissionString(flags) !== 'r' // opening for write + || (flags & (512 | 64))) { // TODO: check for O_SEARCH? (== search for dir only) + return 31; + } + } + return FS.nodePermissions(node, FS.flagsToPermissionString(flags)); + }, + checkOpExists(op, err) { + if (!op) { + throw new FS.ErrnoError(err); + } + return op; + }, + MAX_OPEN_FDS:4096, + nextfd() { + for (var fd = 0; fd <= FS.MAX_OPEN_FDS; fd++) { + if (!FS.streams[fd]) { + return fd; + } + } + throw new FS.ErrnoError(33); + }, + getStreamChecked(fd) { + var stream = FS.getStream(fd); + if (!stream) { + throw new FS.ErrnoError(8); + } + return stream; + }, + getStream:(fd) => FS.streams[fd], + createStream(stream, fd = -1) { + assert(fd >= -1); + + // clone it, so we can return an instance of FSStream + stream = Object.assign(new FS.FSStream(), stream); + if (fd == -1) { + fd = FS.nextfd(); + } + stream.fd = fd; + FS.streams[fd] = stream; + return stream; + }, + closeStream(fd) { + FS.streams[fd] = null; + }, + dupStream(origStream, fd = -1) { + var stream = FS.createStream(origStream, fd); + stream.stream_ops?.dup?.(stream); + return stream; + }, + doSetAttr(stream, node, attr) { + var setattr = stream?.stream_ops.setattr; + var arg = setattr ? stream : node; + setattr ??= node.node_ops.setattr; + FS.checkOpExists(setattr, 63) + setattr(arg, attr); + }, + chrdev_stream_ops:{ + open(stream) { + var device = FS.getDevice(stream.node.rdev); + // override node's stream ops with the device's + stream.stream_ops = device.stream_ops; + // forward the open call + stream.stream_ops.open?.(stream); + }, + llseek() { + throw new FS.ErrnoError(70); + }, + }, + major:(dev) => ((dev) >> 8), + minor:(dev) => ((dev) & 0xff), + makedev:(ma, mi) => ((ma) << 8 | (mi)), + registerDevice(dev, ops) { + FS.devices[dev] = { stream_ops: ops }; + }, + getDevice:(dev) => FS.devices[dev], + getMounts(mount) { + var mounts = []; + var check = [mount]; + + while (check.length) { + var m = check.pop(); + + mounts.push(m); + + check.push(...m.mounts); + } + + return mounts; + }, + syncfs(populate, callback) { + if (typeof populate == 'function') { + callback = populate; + populate = false; + } + + FS.syncFSRequests++; + + if (FS.syncFSRequests > 1) { + err(`warning: ${FS.syncFSRequests} FS.syncfs operations in flight at once, probably just doing extra work`); + } + + var mounts = FS.getMounts(FS.root.mount); + var completed = 0; + + function doCallback(errCode) { + assert(FS.syncFSRequests > 0); + FS.syncFSRequests--; + return callback(errCode); + } + + function done(errCode) { + if (errCode) { + if (!done.errored) { + done.errored = true; + return doCallback(errCode); + } + return; + } + if (++completed >= mounts.length) { + doCallback(null); + } + }; + + // sync all mounts + mounts.forEach((mount) => { + if (!mount.type.syncfs) { + return done(null); + } + mount.type.syncfs(mount, populate, done); + }); + }, + mount(type, opts, mountpoint) { + if (typeof type == 'string') { + // The filesystem was not included, and instead we have an error + // message stored in the variable. + throw type; + } + var root = mountpoint === '/'; + var pseudo = !mountpoint; + var node; + + if (root && FS.root) { + throw new FS.ErrnoError(10); + } else if (!root && !pseudo) { + var lookup = FS.lookupPath(mountpoint, { follow_mount: false }); + + mountpoint = lookup.path; // use the absolute path + node = lookup.node; + + if (FS.isMountpoint(node)) { + throw new FS.ErrnoError(10); + } + + if (!FS.isDir(node.mode)) { + throw new FS.ErrnoError(54); + } + } + + var mount = { + type, + opts, + mountpoint, + mounts: [] + }; + + // create a root node for the fs + var mountRoot = type.mount(mount); + mountRoot.mount = mount; + mount.root = mountRoot; + + if (root) { + FS.root = mountRoot; + } else if (node) { + // set as a mountpoint + node.mounted = mount; + + // add the new mount to the current mount's children + if (node.mount) { + node.mount.mounts.push(mount); + } + } + + return mountRoot; + }, + unmount(mountpoint) { + var lookup = FS.lookupPath(mountpoint, { follow_mount: false }); + + if (!FS.isMountpoint(lookup.node)) { + throw new FS.ErrnoError(28); + } + + // destroy the nodes for this mount, and all its child mounts + var node = lookup.node; + var mount = node.mounted; + var mounts = FS.getMounts(mount); + + Object.keys(FS.nameTable).forEach((hash) => { + var current = FS.nameTable[hash]; + + while (current) { + var next = current.name_next; + + if (mounts.includes(current.mount)) { + FS.destroyNode(current); + } + + current = next; + } + }); + + // no longer a mountpoint + node.mounted = null; + + // remove this mount from the child mounts + var idx = node.mount.mounts.indexOf(mount); + assert(idx !== -1); + node.mount.mounts.splice(idx, 1); + }, + lookup(parent, name) { + return parent.node_ops.lookup(parent, name); + }, + mknod(path, mode, dev) { + var lookup = FS.lookupPath(path, { parent: true }); + var parent = lookup.node; + var name = PATH.basename(path); + if (!name) { + throw new FS.ErrnoError(28); + } + if (name === '.' || name === '..') { + throw new FS.ErrnoError(20); + } + var errCode = FS.mayCreate(parent, name); + if (errCode) { + throw new FS.ErrnoError(errCode); + } + if (!parent.node_ops.mknod) { + throw new FS.ErrnoError(63); + } + return parent.node_ops.mknod(parent, name, mode, dev); + }, + statfs(path) { + return FS.statfsNode(FS.lookupPath(path, {follow: true}).node); + }, + statfsStream(stream) { + // We keep a separate statfsStream function because noderawfs overrides + // it. In noderawfs, stream.node is sometimes null. Instead, we need to + // look at stream.path. + return FS.statfsNode(stream.node); + }, + statfsNode(node) { + // NOTE: None of the defaults here are true. We're just returning safe and + // sane values. Currently nodefs and rawfs replace these defaults, + // other file systems leave them alone. + var rtn = { + bsize: 4096, + frsize: 4096, + blocks: 1e6, + bfree: 5e5, + bavail: 5e5, + files: FS.nextInode, + ffree: FS.nextInode - 1, + fsid: 42, + flags: 2, + namelen: 255, + }; + + if (node.node_ops.statfs) { + Object.assign(rtn, node.node_ops.statfs(node.mount.opts.root)); + } + return rtn; + }, + create(path, mode = 0o666) { + mode &= 4095; + mode |= 32768; + return FS.mknod(path, mode, 0); + }, + mkdir(path, mode = 0o777) { + mode &= 511 | 512; + mode |= 16384; + return FS.mknod(path, mode, 0); + }, + mkdirTree(path, mode) { + var dirs = path.split('/'); + var d = ''; + for (var dir of dirs) { + if (!dir) continue; + if (d || PATH.isAbs(path)) d += '/'; + d += dir; + try { + FS.mkdir(d, mode); + } catch(e) { + if (e.errno != 20) throw e; + } + } + }, + mkdev(path, mode, dev) { + if (typeof dev == 'undefined') { + dev = mode; + mode = 0o666; + } + mode |= 8192; + return FS.mknod(path, mode, dev); + }, + symlink(oldpath, newpath) { + if (!PATH_FS.resolve(oldpath)) { + throw new FS.ErrnoError(44); + } + var lookup = FS.lookupPath(newpath, { parent: true }); + var parent = lookup.node; + if (!parent) { + throw new FS.ErrnoError(44); + } + var newname = PATH.basename(newpath); + var errCode = FS.mayCreate(parent, newname); + if (errCode) { + throw new FS.ErrnoError(errCode); + } + if (!parent.node_ops.symlink) { + throw new FS.ErrnoError(63); + } + return parent.node_ops.symlink(parent, newname, oldpath); + }, + rename(old_path, new_path) { + var old_dirname = PATH.dirname(old_path); + var new_dirname = PATH.dirname(new_path); + var old_name = PATH.basename(old_path); + var new_name = PATH.basename(new_path); + // parents must exist + var lookup, old_dir, new_dir; + + // let the errors from non existent directories percolate up + lookup = FS.lookupPath(old_path, { parent: true }); + old_dir = lookup.node; + lookup = FS.lookupPath(new_path, { parent: true }); + new_dir = lookup.node; + + if (!old_dir || !new_dir) throw new FS.ErrnoError(44); + // need to be part of the same mount + if (old_dir.mount !== new_dir.mount) { + throw new FS.ErrnoError(75); + } + // source must exist + var old_node = FS.lookupNode(old_dir, old_name); + // old path should not be an ancestor of the new path + var relative = PATH_FS.relative(old_path, new_dirname); + if (relative.charAt(0) !== '.') { + throw new FS.ErrnoError(28); + } + // new path should not be an ancestor of the old path + relative = PATH_FS.relative(new_path, old_dirname); + if (relative.charAt(0) !== '.') { + throw new FS.ErrnoError(55); + } + // see if the new path already exists + var new_node; + try { + new_node = FS.lookupNode(new_dir, new_name); + } catch (e) { + // not fatal + } + // early out if nothing needs to change + if (old_node === new_node) { + return; + } + // we'll need to delete the old entry + var isdir = FS.isDir(old_node.mode); + var errCode = FS.mayDelete(old_dir, old_name, isdir); + if (errCode) { + throw new FS.ErrnoError(errCode); + } + // need delete permissions if we'll be overwriting. + // need create permissions if new doesn't already exist. + errCode = new_node ? + FS.mayDelete(new_dir, new_name, isdir) : + FS.mayCreate(new_dir, new_name); + if (errCode) { + throw new FS.ErrnoError(errCode); + } + if (!old_dir.node_ops.rename) { + throw new FS.ErrnoError(63); + } + if (FS.isMountpoint(old_node) || (new_node && FS.isMountpoint(new_node))) { + throw new FS.ErrnoError(10); + } + // if we are going to change the parent, check write permissions + if (new_dir !== old_dir) { + errCode = FS.nodePermissions(old_dir, 'w'); + if (errCode) { + throw new FS.ErrnoError(errCode); + } + } + // remove the node from the lookup hash + FS.hashRemoveNode(old_node); + // do the underlying fs rename + try { + old_dir.node_ops.rename(old_node, new_dir, new_name); + // update old node (we do this here to avoid each backend + // needing to) + old_node.parent = new_dir; + } catch (e) { + throw e; + } finally { + // add the node back to the hash (in case node_ops.rename + // changed its name) + FS.hashAddNode(old_node); + } + }, + rmdir(path) { + var lookup = FS.lookupPath(path, { parent: true }); + var parent = lookup.node; + var name = PATH.basename(path); + var node = FS.lookupNode(parent, name); + var errCode = FS.mayDelete(parent, name, true); + if (errCode) { + throw new FS.ErrnoError(errCode); + } + if (!parent.node_ops.rmdir) { + throw new FS.ErrnoError(63); + } + if (FS.isMountpoint(node)) { + throw new FS.ErrnoError(10); + } + parent.node_ops.rmdir(parent, name); + FS.destroyNode(node); + }, + readdir(path) { + var lookup = FS.lookupPath(path, { follow: true }); + var node = lookup.node; + var readdir = FS.checkOpExists(node.node_ops.readdir, 54); + return readdir(node); + }, + unlink(path) { + var lookup = FS.lookupPath(path, { parent: true }); + var parent = lookup.node; + if (!parent) { + throw new FS.ErrnoError(44); + } + var name = PATH.basename(path); + var node = FS.lookupNode(parent, name); + var errCode = FS.mayDelete(parent, name, false); + if (errCode) { + // According to POSIX, we should map EISDIR to EPERM, but + // we instead do what Linux does (and we must, as we use + // the musl linux libc). + throw new FS.ErrnoError(errCode); + } + if (!parent.node_ops.unlink) { + throw new FS.ErrnoError(63); + } + if (FS.isMountpoint(node)) { + throw new FS.ErrnoError(10); + } + parent.node_ops.unlink(parent, name); + FS.destroyNode(node); + }, + readlink(path) { + var lookup = FS.lookupPath(path); + var link = lookup.node; + if (!link) { + throw new FS.ErrnoError(44); + } + if (!link.node_ops.readlink) { + throw new FS.ErrnoError(28); + } + return link.node_ops.readlink(link); + }, + stat(path, dontFollow) { + var lookup = FS.lookupPath(path, { follow: !dontFollow }); + var node = lookup.node; + var getattr = FS.checkOpExists(node.node_ops.getattr, 63); + return getattr(node); + }, + fstat(fd) { + var stream = FS.getStreamChecked(fd); + var node = stream.node; + var getattr = stream.stream_ops.getattr; + var arg = getattr ? stream : node; + getattr ??= node.node_ops.getattr; + FS.checkOpExists(getattr, 63) + return getattr(arg); + }, + lstat(path) { + return FS.stat(path, true); + }, + doChmod(stream, node, mode, dontFollow) { + FS.doSetAttr(stream, node, { + mode: (mode & 4095) | (node.mode & ~4095), + ctime: Date.now(), + dontFollow + }); + }, + chmod(path, mode, dontFollow) { + var node; + if (typeof path == 'string') { + var lookup = FS.lookupPath(path, { follow: !dontFollow }); + node = lookup.node; + } else { + node = path; + } + FS.doChmod(null, node, mode, dontFollow); + }, + lchmod(path, mode) { + FS.chmod(path, mode, true); + }, + fchmod(fd, mode) { + var stream = FS.getStreamChecked(fd); + FS.doChmod(stream, stream.node, mode, false); + }, + doChown(stream, node, dontFollow) { + FS.doSetAttr(stream, node, { + timestamp: Date.now(), + dontFollow + // we ignore the uid / gid for now + }); + }, + chown(path, uid, gid, dontFollow) { + var node; + if (typeof path == 'string') { + var lookup = FS.lookupPath(path, { follow: !dontFollow }); + node = lookup.node; + } else { + node = path; + } + FS.doChown(null, node, dontFollow); + }, + lchown(path, uid, gid) { + FS.chown(path, uid, gid, true); + }, + fchown(fd, uid, gid) { + var stream = FS.getStreamChecked(fd); + FS.doChown(stream, stream.node, false); + }, + doTruncate(stream, node, len) { + if (FS.isDir(node.mode)) { + throw new FS.ErrnoError(31); + } + if (!FS.isFile(node.mode)) { + throw new FS.ErrnoError(28); + } + var errCode = FS.nodePermissions(node, 'w'); + if (errCode) { + throw new FS.ErrnoError(errCode); + } + FS.doSetAttr(stream, node, { + size: len, + timestamp: Date.now() + }); + }, + truncate(path, len) { + if (len < 0) { + throw new FS.ErrnoError(28); + } + var node; + if (typeof path == 'string') { + var lookup = FS.lookupPath(path, { follow: true }); + node = lookup.node; + } else { + node = path; + } + FS.doTruncate(null, node, len); + }, + ftruncate(fd, len) { + var stream = FS.getStreamChecked(fd); + if (len < 0 || (stream.flags & 2097155) === 0) { + throw new FS.ErrnoError(28); + } + FS.doTruncate(stream, stream.node, len); + }, + utime(path, atime, mtime) { + var lookup = FS.lookupPath(path, { follow: true }); + var node = lookup.node; + var setattr = FS.checkOpExists(node.node_ops.setattr, 63); + setattr(node, { + atime: atime, + mtime: mtime + }); + }, + open(path, flags, mode = 0o666) { + if (path === "") { + throw new FS.ErrnoError(44); + } + flags = typeof flags == 'string' ? FS_modeStringToFlags(flags) : flags; + if ((flags & 64)) { + mode = (mode & 4095) | 32768; + } else { + mode = 0; + } + var node; + var isDirPath; + if (typeof path == 'object') { + node = path; + } else { + isDirPath = path.endsWith("/"); + // noent_okay makes it so that if the final component of the path + // doesn't exist, lookupPath returns `node: undefined`. `path` will be + // updated to point to the target of all symlinks. + var lookup = FS.lookupPath(path, { + follow: !(flags & 131072), + noent_okay: true + }); + node = lookup.node; + path = lookup.path; + } + // perhaps we need to create the node + var created = false; + if ((flags & 64)) { + if (node) { + // if O_CREAT and O_EXCL are set, error out if the node already exists + if ((flags & 128)) { + throw new FS.ErrnoError(20); + } + } else if (isDirPath) { + throw new FS.ErrnoError(31); + } else { + // node doesn't exist, try to create it + // Ignore the permission bits here to ensure we can `open` this new + // file below. We use chmod below the apply the permissions once the + // file is open. + node = FS.mknod(path, mode | 0o777, 0); + created = true; + } + } + if (!node) { + throw new FS.ErrnoError(44); + } + // can't truncate a device + if (FS.isChrdev(node.mode)) { + flags &= ~512; + } + // if asked only for a directory, then this must be one + if ((flags & 65536) && !FS.isDir(node.mode)) { + throw new FS.ErrnoError(54); + } + // check permissions, if this is not a file we just created now (it is ok to + // create and write to a file with read-only permissions; it is read-only + // for later use) + if (!created) { + var errCode = FS.mayOpen(node, flags); + if (errCode) { + throw new FS.ErrnoError(errCode); + } + } + // do truncation if necessary + if ((flags & 512) && !created) { + FS.truncate(node, 0); + } + // we've already handled these, don't pass down to the underlying vfs + flags &= ~(128 | 512 | 131072); + + // register the stream with the filesystem + var stream = FS.createStream({ + node, + path: FS.getPath(node), // we want the absolute path to the node + flags, + seekable: true, + position: 0, + stream_ops: node.stream_ops, + // used by the file family libc calls (fopen, fwrite, ferror, etc.) + ungotten: [], + error: false + }); + // call the new stream's open function + if (stream.stream_ops.open) { + stream.stream_ops.open(stream); + } + if (created) { + FS.chmod(node, mode & 0o777); + } + if (Module['logReadFiles'] && !(flags & 1)) { + if (!(path in FS.readFiles)) { + FS.readFiles[path] = 1; + } + } + return stream; + }, + close(stream) { + if (FS.isClosed(stream)) { + throw new FS.ErrnoError(8); + } + if (stream.getdents) stream.getdents = null; // free readdir state + try { + if (stream.stream_ops.close) { + stream.stream_ops.close(stream); + } + } catch (e) { + throw e; + } finally { + FS.closeStream(stream.fd); + } + stream.fd = null; + }, + isClosed(stream) { + return stream.fd === null; + }, + llseek(stream, offset, whence) { + if (FS.isClosed(stream)) { + throw new FS.ErrnoError(8); + } + if (!stream.seekable || !stream.stream_ops.llseek) { + throw new FS.ErrnoError(70); + } + if (whence != 0 && whence != 1 && whence != 2) { + throw new FS.ErrnoError(28); + } + stream.position = stream.stream_ops.llseek(stream, offset, whence); + stream.ungotten = []; + return stream.position; + }, + read(stream, buffer, offset, length, position) { + assert(offset >= 0); + if (length < 0 || position < 0) { + throw new FS.ErrnoError(28); + } + if (FS.isClosed(stream)) { + throw new FS.ErrnoError(8); + } + if ((stream.flags & 2097155) === 1) { + throw new FS.ErrnoError(8); + } + if (FS.isDir(stream.node.mode)) { + throw new FS.ErrnoError(31); + } + if (!stream.stream_ops.read) { + throw new FS.ErrnoError(28); + } + var seeking = typeof position != 'undefined'; + if (!seeking) { + position = stream.position; + } else if (!stream.seekable) { + throw new FS.ErrnoError(70); + } + var bytesRead = stream.stream_ops.read(stream, buffer, offset, length, position); + if (!seeking) stream.position += bytesRead; + return bytesRead; + }, + write(stream, buffer, offset, length, position, canOwn) { + assert(offset >= 0); + if (length < 0 || position < 0) { + throw new FS.ErrnoError(28); + } + if (FS.isClosed(stream)) { + throw new FS.ErrnoError(8); + } + if ((stream.flags & 2097155) === 0) { + throw new FS.ErrnoError(8); + } + if (FS.isDir(stream.node.mode)) { + throw new FS.ErrnoError(31); + } + if (!stream.stream_ops.write) { + throw new FS.ErrnoError(28); + } + if (stream.seekable && stream.flags & 1024) { + // seek to the end before writing in append mode + FS.llseek(stream, 0, 2); + } + var seeking = typeof position != 'undefined'; + if (!seeking) { + position = stream.position; + } else if (!stream.seekable) { + throw new FS.ErrnoError(70); + } + var bytesWritten = stream.stream_ops.write(stream, buffer, offset, length, position, canOwn); + if (!seeking) stream.position += bytesWritten; + return bytesWritten; + }, + mmap(stream, length, position, prot, flags) { + // User requests writing to file (prot & PROT_WRITE != 0). + // Checking if we have permissions to write to the file unless + // MAP_PRIVATE flag is set. According to POSIX spec it is possible + // to write to file opened in read-only mode with MAP_PRIVATE flag, + // as all modifications will be visible only in the memory of + // the current process. + if ((prot & 2) !== 0 + && (flags & 2) === 0 + && (stream.flags & 2097155) !== 2) { + throw new FS.ErrnoError(2); + } + if ((stream.flags & 2097155) === 1) { + throw new FS.ErrnoError(2); + } + if (!stream.stream_ops.mmap) { + throw new FS.ErrnoError(43); + } + if (!length) { + throw new FS.ErrnoError(28); + } + return stream.stream_ops.mmap(stream, length, position, prot, flags); + }, + msync(stream, buffer, offset, length, mmapFlags) { + assert(offset >= 0); + if (!stream.stream_ops.msync) { + return 0; + } + return stream.stream_ops.msync(stream, buffer, offset, length, mmapFlags); + }, + ioctl(stream, cmd, arg) { + if (!stream.stream_ops.ioctl) { + throw new FS.ErrnoError(59); + } + return stream.stream_ops.ioctl(stream, cmd, arg); + }, + readFile(path, opts = {}) { + opts.flags = opts.flags || 0; + opts.encoding = opts.encoding || 'binary'; + if (opts.encoding !== 'utf8' && opts.encoding !== 'binary') { + throw new Error(`Invalid encoding type "${opts.encoding}"`); + } + var ret; + var stream = FS.open(path, opts.flags); + var stat = FS.stat(path); + var length = stat.size; + var buf = new Uint8Array(length); + FS.read(stream, buf, 0, length, 0); + if (opts.encoding === 'utf8') { + ret = UTF8ArrayToString(buf); + } else if (opts.encoding === 'binary') { + ret = buf; + } + FS.close(stream); + return ret; + }, + writeFile(path, data, opts = {}) { + opts.flags = opts.flags || 577; + var stream = FS.open(path, opts.flags, opts.mode); + if (typeof data == 'string') { + var buf = new Uint8Array(lengthBytesUTF8(data)+1); + var actualNumBytes = stringToUTF8Array(data, buf, 0, buf.length); + FS.write(stream, buf, 0, actualNumBytes, undefined, opts.canOwn); + } else if (ArrayBuffer.isView(data)) { + FS.write(stream, data, 0, data.byteLength, undefined, opts.canOwn); + } else { + throw new Error('Unsupported data type'); + } + FS.close(stream); + }, + cwd:() => FS.currentPath, + chdir(path) { + var lookup = FS.lookupPath(path, { follow: true }); + if (lookup.node === null) { + throw new FS.ErrnoError(44); + } + if (!FS.isDir(lookup.node.mode)) { + throw new FS.ErrnoError(54); + } + var errCode = FS.nodePermissions(lookup.node, 'x'); + if (errCode) { + throw new FS.ErrnoError(errCode); + } + FS.currentPath = lookup.path; + }, + createDefaultDirectories() { + FS.mkdir('/tmp'); + FS.mkdir('/home'); + FS.mkdir('/home/web_user'); + }, + createDefaultDevices() { + // create /dev + FS.mkdir('/dev'); + // setup /dev/null + FS.registerDevice(FS.makedev(1, 3), { + read: () => 0, + write: (stream, buffer, offset, length, pos) => length, + llseek: () => 0, + }); + FS.mkdev('/dev/null', FS.makedev(1, 3)); + // setup /dev/tty and /dev/tty1 + // stderr needs to print output using err() rather than out() + // so we register a second tty just for it. + TTY.register(FS.makedev(5, 0), TTY.default_tty_ops); + TTY.register(FS.makedev(6, 0), TTY.default_tty1_ops); + FS.mkdev('/dev/tty', FS.makedev(5, 0)); + FS.mkdev('/dev/tty1', FS.makedev(6, 0)); + // setup /dev/[u]random + // use a buffer to avoid overhead of individual crypto calls per byte + var randomBuffer = new Uint8Array(1024), randomLeft = 0; + var randomByte = () => { + if (randomLeft === 0) { + randomFill(randomBuffer); + randomLeft = randomBuffer.byteLength; + } + return randomBuffer[--randomLeft]; + }; + FS.createDevice('/dev', 'random', randomByte); + FS.createDevice('/dev', 'urandom', randomByte); + // we're not going to emulate the actual shm device, + // just create the tmp dirs that reside in it commonly + FS.mkdir('/dev/shm'); + FS.mkdir('/dev/shm/tmp'); + }, + createSpecialDirectories() { + // create /proc/self/fd which allows /proc/self/fd/6 => readlink gives the + // name of the stream for fd 6 (see test_unistd_ttyname) + FS.mkdir('/proc'); + var proc_self = FS.mkdir('/proc/self'); + FS.mkdir('/proc/self/fd'); + FS.mount({ + mount() { + var node = FS.createNode(proc_self, 'fd', 16895, 73); + node.stream_ops = { + llseek: MEMFS.stream_ops.llseek, + }; + node.node_ops = { + lookup(parent, name) { + var fd = +name; + var stream = FS.getStreamChecked(fd); + var ret = { + parent: null, + mount: { mountpoint: 'fake' }, + node_ops: { readlink: () => stream.path }, + id: fd + 1, + }; + ret.parent = ret; // make it look like a simple root node + return ret; + }, + readdir() { + return Array.from(FS.streams.entries()) + .filter(([k, v]) => v) + .map(([k, v]) => k.toString()); + } + }; + return node; + } + }, {}, '/proc/self/fd'); + }, + createStandardStreams(input, output, error) { + // TODO deprecate the old functionality of a single + // input / output callback and that utilizes FS.createDevice + // and instead require a unique set of stream ops + + // by default, we symlink the standard streams to the + // default tty devices. however, if the standard streams + // have been overwritten we create a unique device for + // them instead. + if (input) { + FS.createDevice('/dev', 'stdin', input); + } else { + FS.symlink('/dev/tty', '/dev/stdin'); + } + if (output) { + FS.createDevice('/dev', 'stdout', null, output); + } else { + FS.symlink('/dev/tty', '/dev/stdout'); + } + if (error) { + FS.createDevice('/dev', 'stderr', null, error); + } else { + FS.symlink('/dev/tty1', '/dev/stderr'); + } + + // open default streams for the stdin, stdout and stderr devices + var stdin = FS.open('/dev/stdin', 0); + var stdout = FS.open('/dev/stdout', 1); + var stderr = FS.open('/dev/stderr', 1); + assert(stdin.fd === 0, `invalid handle for stdin (${stdin.fd})`); + assert(stdout.fd === 1, `invalid handle for stdout (${stdout.fd})`); + assert(stderr.fd === 2, `invalid handle for stderr (${stderr.fd})`); + }, + staticInit() { + FS.nameTable = new Array(4096); + + FS.mount(MEMFS, {}, '/'); + + FS.createDefaultDirectories(); + FS.createDefaultDevices(); + FS.createSpecialDirectories(); + + FS.filesystems = { + 'MEMFS': MEMFS, + }; + }, + init(input, output, error) { + assert(!FS.initialized, 'FS.init was previously called. If you want to initialize later with custom parameters, remove any earlier calls (note that one is automatically added to the generated code)'); + FS.initialized = true; + + // Allow Module.stdin etc. to provide defaults, if none explicitly passed to us here + input ??= Module['stdin']; + output ??= Module['stdout']; + error ??= Module['stderr']; + + FS.createStandardStreams(input, output, error); + }, + quit() { + FS.initialized = false; + // force-flush all streams, so we get musl std streams printed out + _fflush(0); + // close all of our streams + for (var stream of FS.streams) { + if (stream) { + FS.close(stream); + } + } + }, + findObject(path, dontResolveLastLink) { + var ret = FS.analyzePath(path, dontResolveLastLink); + if (!ret.exists) { + return null; + } + return ret.object; + }, + analyzePath(path, dontResolveLastLink) { + // operate from within the context of the symlink's target + try { + var lookup = FS.lookupPath(path, { follow: !dontResolveLastLink }); + path = lookup.path; + } catch (e) { + } + var ret = { + isRoot: false, exists: false, error: 0, name: null, path: null, object: null, + parentExists: false, parentPath: null, parentObject: null + }; + try { + var lookup = FS.lookupPath(path, { parent: true }); + ret.parentExists = true; + ret.parentPath = lookup.path; + ret.parentObject = lookup.node; + ret.name = PATH.basename(path); + lookup = FS.lookupPath(path, { follow: !dontResolveLastLink }); + ret.exists = true; + ret.path = lookup.path; + ret.object = lookup.node; + ret.name = lookup.node.name; + ret.isRoot = lookup.path === '/'; + } catch (e) { + ret.error = e.errno; + }; + return ret; + }, + createPath(parent, path, canRead, canWrite) { + parent = typeof parent == 'string' ? parent : FS.getPath(parent); + var parts = path.split('/').reverse(); + while (parts.length) { + var part = parts.pop(); + if (!part) continue; + var current = PATH.join2(parent, part); + try { + FS.mkdir(current); + } catch (e) { + if (e.errno != 20) throw e; + } + parent = current; + } + return current; + }, + createFile(parent, name, properties, canRead, canWrite) { + var path = PATH.join2(typeof parent == 'string' ? parent : FS.getPath(parent), name); + var mode = FS_getMode(canRead, canWrite); + return FS.create(path, mode); + }, + createDataFile(parent, name, data, canRead, canWrite, canOwn) { + var path = name; + if (parent) { + parent = typeof parent == 'string' ? parent : FS.getPath(parent); + path = name ? PATH.join2(parent, name) : parent; + } + var mode = FS_getMode(canRead, canWrite); + var node = FS.create(path, mode); + if (data) { + if (typeof data == 'string') { + var arr = new Array(data.length); + for (var i = 0, len = data.length; i < len; ++i) arr[i] = data.charCodeAt(i); + data = arr; + } + // make sure we can write to the file + FS.chmod(node, mode | 146); + var stream = FS.open(node, 577); + FS.write(stream, data, 0, data.length, 0, canOwn); + FS.close(stream); + FS.chmod(node, mode); + } + }, + createDevice(parent, name, input, output) { + var path = PATH.join2(typeof parent == 'string' ? parent : FS.getPath(parent), name); + var mode = FS_getMode(!!input, !!output); + FS.createDevice.major ??= 64; + var dev = FS.makedev(FS.createDevice.major++, 0); + // Create a fake device that a set of stream ops to emulate + // the old behavior. + FS.registerDevice(dev, { + open(stream) { + stream.seekable = false; + }, + close(stream) { + // flush any pending line data + if (output?.buffer?.length) { + output(10); + } + }, + read(stream, buffer, offset, length, pos /* ignored */) { + var bytesRead = 0; + for (var i = 0; i < length; i++) { + var result; + try { + result = input(); + } catch (e) { + throw new FS.ErrnoError(29); + } + if (result === undefined && bytesRead === 0) { + throw new FS.ErrnoError(6); + } + if (result === null || result === undefined) break; + bytesRead++; + buffer[offset+i] = result; + } + if (bytesRead) { + stream.node.atime = Date.now(); + } + return bytesRead; + }, + write(stream, buffer, offset, length, pos) { + for (var i = 0; i < length; i++) { + try { + output(buffer[offset+i]); + } catch (e) { + throw new FS.ErrnoError(29); + } + } + if (length) { + stream.node.mtime = stream.node.ctime = Date.now(); + } + return i; + } + }); + return FS.mkdev(path, mode, dev); + }, + forceLoadFile(obj) { + if (obj.isDevice || obj.isFolder || obj.link || obj.contents) return true; + if (typeof XMLHttpRequest != 'undefined') { + throw new Error("Lazy loading should have been performed (contents set) in createLazyFile, but it was not. Lazy loading only works in web workers. Use --embed-file or --preload-file in emcc on the main thread."); + } else { // Command-line. + try { + obj.contents = readBinary(obj.url); + obj.usedBytes = obj.contents.length; + } catch (e) { + throw new FS.ErrnoError(29); + } + } + }, + createLazyFile(parent, name, url, canRead, canWrite) { + // Lazy chunked Uint8Array (implements get and length from Uint8Array). + // Actual getting is abstracted away for eventual reuse. + class LazyUint8Array { + lengthKnown = false; + chunks = []; // Loaded chunks. Index is the chunk number + get(idx) { + if (idx > this.length-1 || idx < 0) { + return undefined; + } + var chunkOffset = idx % this.chunkSize; + var chunkNum = (idx / this.chunkSize)|0; + return this.getter(chunkNum)[chunkOffset]; + } + setDataGetter(getter) { + this.getter = getter; + } + cacheLength() { + // Find length + var xhr = new XMLHttpRequest(); + xhr.open('HEAD', url, false); + xhr.send(null); + if (!(xhr.status >= 200 && xhr.status < 300 || xhr.status === 304)) throw new Error("Couldn't load " + url + ". Status: " + xhr.status); + var datalength = Number(xhr.getResponseHeader("Content-length")); + var header; + var hasByteServing = (header = xhr.getResponseHeader("Accept-Ranges")) && header === "bytes"; + var usesGzip = (header = xhr.getResponseHeader("Content-Encoding")) && header === "gzip"; + + var chunkSize = 1024*1024; // Chunk size in bytes + + if (!hasByteServing) chunkSize = datalength; + + // Function to get a range from the remote URL. + var doXHR = (from, to) => { + if (from > to) throw new Error("invalid range (" + from + ", " + to + ") or no bytes requested!"); + if (to > datalength-1) throw new Error("only " + datalength + " bytes available! programmer error!"); + + // TODO: Use mozResponseArrayBuffer, responseStream, etc. if available. + var xhr = new XMLHttpRequest(); + xhr.open('GET', url, false); + if (datalength !== chunkSize) xhr.setRequestHeader("Range", "bytes=" + from + "-" + to); + + // Some hints to the browser that we want binary data. + xhr.responseType = 'arraybuffer'; + if (xhr.overrideMimeType) { + xhr.overrideMimeType('text/plain; charset=x-user-defined'); + } + + xhr.send(null); + if (!(xhr.status >= 200 && xhr.status < 300 || xhr.status === 304)) throw new Error("Couldn't load " + url + ". Status: " + xhr.status); + if (xhr.response !== undefined) { + return new Uint8Array(/** @type{Array} */(xhr.response || [])); + } + return intArrayFromString(xhr.responseText || '', true); + }; + var lazyArray = this; + lazyArray.setDataGetter((chunkNum) => { + var start = chunkNum * chunkSize; + var end = (chunkNum+1) * chunkSize - 1; // including this byte + end = Math.min(end, datalength-1); // if datalength-1 is selected, this is the last block + if (typeof lazyArray.chunks[chunkNum] == 'undefined') { + lazyArray.chunks[chunkNum] = doXHR(start, end); + } + if (typeof lazyArray.chunks[chunkNum] == 'undefined') throw new Error('doXHR failed!'); + return lazyArray.chunks[chunkNum]; + }); + + if (usesGzip || !datalength) { + // if the server uses gzip or doesn't supply the length, we have to download the whole file to get the (uncompressed) length + chunkSize = datalength = 1; // this will force getter(0)/doXHR do download the whole file + datalength = this.getter(0).length; + chunkSize = datalength; + out("LazyFiles on gzip forces download of the whole file when length is accessed"); + } + + this._length = datalength; + this._chunkSize = chunkSize; + this.lengthKnown = true; + } + get length() { + if (!this.lengthKnown) { + this.cacheLength(); + } + return this._length; + } + get chunkSize() { + if (!this.lengthKnown) { + this.cacheLength(); + } + return this._chunkSize; + } + } + + if (typeof XMLHttpRequest != 'undefined') { + if (!ENVIRONMENT_IS_WORKER) throw 'Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc'; + var lazyArray = new LazyUint8Array(); + var properties = { isDevice: false, contents: lazyArray }; + } else { + var properties = { isDevice: false, url: url }; + } + + var node = FS.createFile(parent, name, properties, canRead, canWrite); + // This is a total hack, but I want to get this lazy file code out of the + // core of MEMFS. If we want to keep this lazy file concept I feel it should + // be its own thin LAZYFS proxying calls to MEMFS. + if (properties.contents) { + node.contents = properties.contents; + } else if (properties.url) { + node.contents = null; + node.url = properties.url; + } + // Add a function that defers querying the file size until it is asked the first time. + Object.defineProperties(node, { + usedBytes: { + get: function() { return this.contents.length; } + } + }); + // override each stream op with one that tries to force load the lazy file first + var stream_ops = {}; + var keys = Object.keys(node.stream_ops); + keys.forEach((key) => { + var fn = node.stream_ops[key]; + stream_ops[key] = (...args) => { + FS.forceLoadFile(node); + return fn(...args); + }; + }); + function writeChunks(stream, buffer, offset, length, position) { + var contents = stream.node.contents; + if (position >= contents.length) + return 0; + var size = Math.min(contents.length - position, length); + assert(size >= 0); + if (contents.slice) { // normal array + for (var i = 0; i < size; i++) { + buffer[offset + i] = contents[position + i]; + } + } else { + for (var i = 0; i < size; i++) { // LazyUint8Array from sync binary XHR + buffer[offset + i] = contents.get(position + i); + } + } + return size; + } + // use a custom read function + stream_ops.read = (stream, buffer, offset, length, position) => { + FS.forceLoadFile(node); + return writeChunks(stream, buffer, offset, length, position) + }; + // use a custom mmap function + stream_ops.mmap = (stream, length, position, prot, flags) => { + FS.forceLoadFile(node); + var ptr = mmapAlloc(length); + if (!ptr) { + throw new FS.ErrnoError(48); + } + writeChunks(stream, HEAP8, ptr, length, position); + return { ptr, allocated: true }; + }; + node.stream_ops = stream_ops; + return node; + }, + absolutePath() { + abort('FS.absolutePath has been removed; use PATH_FS.resolve instead'); + }, + createFolder() { + abort('FS.createFolder has been removed; use FS.mkdir instead'); + }, + createLink() { + abort('FS.createLink has been removed; use FS.symlink instead'); + }, + joinPath() { + abort('FS.joinPath has been removed; use PATH.join instead'); + }, + mmapAlloc() { + abort('FS.mmapAlloc has been replaced by the top level function mmapAlloc'); + }, + standardizePath() { + abort('FS.standardizePath has been removed; use PATH.normalize instead'); + }, + }; + + var SYSCALLS = { + DEFAULT_POLLMASK:5, + calculateAt(dirfd, path, allowEmpty) { + if (PATH.isAbs(path)) { + return path; + } + // relative path + var dir; + if (dirfd === -100) { + dir = FS.cwd(); + } else { + var dirstream = SYSCALLS.getStreamFromFD(dirfd); + dir = dirstream.path; + } + if (path.length == 0) { + if (!allowEmpty) { + throw new FS.ErrnoError(44);; + } + return dir; + } + return dir + '/' + path; + }, + writeStat(buf, stat) { + HEAP32[((buf)>>2)] = stat.dev; + HEAP32[(((buf)+(4))>>2)] = stat.mode; + HEAPU32[(((buf)+(8))>>2)] = stat.nlink; + HEAP32[(((buf)+(12))>>2)] = stat.uid; + HEAP32[(((buf)+(16))>>2)] = stat.gid; + HEAP32[(((buf)+(20))>>2)] = stat.rdev; + HEAP64[(((buf)+(24))>>3)] = BigInt(stat.size); + HEAP32[(((buf)+(32))>>2)] = 4096; + HEAP32[(((buf)+(36))>>2)] = stat.blocks; + var atime = stat.atime.getTime(); + var mtime = stat.mtime.getTime(); + var ctime = stat.ctime.getTime(); + HEAP64[(((buf)+(40))>>3)] = BigInt(Math.floor(atime / 1000)); + HEAPU32[(((buf)+(48))>>2)] = (atime % 1000) * 1000 * 1000; + HEAP64[(((buf)+(56))>>3)] = BigInt(Math.floor(mtime / 1000)); + HEAPU32[(((buf)+(64))>>2)] = (mtime % 1000) * 1000 * 1000; + HEAP64[(((buf)+(72))>>3)] = BigInt(Math.floor(ctime / 1000)); + HEAPU32[(((buf)+(80))>>2)] = (ctime % 1000) * 1000 * 1000; + HEAP64[(((buf)+(88))>>3)] = BigInt(stat.ino); + return 0; + }, + writeStatFs(buf, stats) { + HEAP32[(((buf)+(4))>>2)] = stats.bsize; + HEAP32[(((buf)+(40))>>2)] = stats.bsize; + HEAP32[(((buf)+(8))>>2)] = stats.blocks; + HEAP32[(((buf)+(12))>>2)] = stats.bfree; + HEAP32[(((buf)+(16))>>2)] = stats.bavail; + HEAP32[(((buf)+(20))>>2)] = stats.files; + HEAP32[(((buf)+(24))>>2)] = stats.ffree; + HEAP32[(((buf)+(28))>>2)] = stats.fsid; + HEAP32[(((buf)+(44))>>2)] = stats.flags; // ST_NOSUID + HEAP32[(((buf)+(36))>>2)] = stats.namelen; + }, + doMsync(addr, stream, len, flags, offset) { + if (!FS.isFile(stream.node.mode)) { + throw new FS.ErrnoError(43); + } + if (flags & 2) { + // MAP_PRIVATE calls need not to be synced back to underlying fs + return 0; + } + var buffer = HEAPU8.slice(addr, addr + len); + FS.msync(stream, buffer, offset, len, flags); + }, + getStreamFromFD(fd) { + var stream = FS.getStreamChecked(fd); + return stream; + }, + varargs:undefined, + getStr(ptr) { + var ret = UTF8ToString(ptr); + return ret; + }, + }; + function ___syscall_chmod(path, mode) { + try { + + path = SYSCALLS.getStr(path); + FS.chmod(path, mode); + return 0; + } catch (e) { + if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + return -e.errno; + } + } + + function ___syscall_fchmod(fd, mode) { + try { + + FS.fchmod(fd, mode); + return 0; + } catch (e) { + if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + return -e.errno; + } + } + + /** @suppress {duplicate } */ + var syscallGetVarargI = () => { + assert(SYSCALLS.varargs != undefined); + // the `+` prepended here is necessary to convince the JSCompiler that varargs is indeed a number. + var ret = HEAP32[((+SYSCALLS.varargs)>>2)]; + SYSCALLS.varargs += 4; + return ret; + }; + var syscallGetVarargP = syscallGetVarargI; + + + function ___syscall_fcntl64(fd, cmd, varargs) { + SYSCALLS.varargs = varargs; + try { + + var stream = SYSCALLS.getStreamFromFD(fd); + switch (cmd) { + case 0: { + var arg = syscallGetVarargI(); + if (arg < 0) { + return -28; + } + while (FS.streams[arg]) { + arg++; + } + var newStream; + newStream = FS.dupStream(stream, arg); + return newStream.fd; + } + case 1: + case 2: + return 0; // FD_CLOEXEC makes no sense for a single process. + case 3: + return stream.flags; + case 4: { + var arg = syscallGetVarargI(); + stream.flags |= arg; + return 0; + } + case 12: { + var arg = syscallGetVarargP(); + var offset = 0; + // We're always unlocked. + HEAP16[(((arg)+(offset))>>1)] = 2; + return 0; + } + case 13: + case 14: + // Pretend that the locking is successful. These are process-level locks, + // and Emscripten programs are a single process. If we supported linking a + // filesystem between programs, we'd need to do more here. + // See https://github.com/emscripten-core/emscripten/issues/23697 + return 0; + } + return -28; + } catch (e) { + if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + return -e.errno; + } + } + + function ___syscall_fstat64(fd, buf) { + try { + + return SYSCALLS.writeStat(buf, FS.fstat(fd)); + } catch (e) { + if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + return -e.errno; + } + } + + + function ___syscall_ioctl(fd, op, varargs) { + SYSCALLS.varargs = varargs; + try { + + var stream = SYSCALLS.getStreamFromFD(fd); + switch (op) { + case 21509: { + if (!stream.tty) return -59; + return 0; + } + case 21505: { + if (!stream.tty) return -59; + if (stream.tty.ops.ioctl_tcgets) { + var termios = stream.tty.ops.ioctl_tcgets(stream); + var argp = syscallGetVarargP(); + HEAP32[((argp)>>2)] = termios.c_iflag || 0; + HEAP32[(((argp)+(4))>>2)] = termios.c_oflag || 0; + HEAP32[(((argp)+(8))>>2)] = termios.c_cflag || 0; + HEAP32[(((argp)+(12))>>2)] = termios.c_lflag || 0; + for (var i = 0; i < 32; i++) { + HEAP8[(argp + i)+(17)] = termios.c_cc[i] || 0; + } + return 0; + } + return 0; + } + case 21510: + case 21511: + case 21512: { + if (!stream.tty) return -59; + return 0; // no-op, not actually adjusting terminal settings + } + case 21506: + case 21507: + case 21508: { + if (!stream.tty) return -59; + if (stream.tty.ops.ioctl_tcsets) { + var argp = syscallGetVarargP(); + var c_iflag = HEAP32[((argp)>>2)]; + var c_oflag = HEAP32[(((argp)+(4))>>2)]; + var c_cflag = HEAP32[(((argp)+(8))>>2)]; + var c_lflag = HEAP32[(((argp)+(12))>>2)]; + var c_cc = [] + for (var i = 0; i < 32; i++) { + c_cc.push(HEAP8[(argp + i)+(17)]); + } + return stream.tty.ops.ioctl_tcsets(stream.tty, op, { c_iflag, c_oflag, c_cflag, c_lflag, c_cc }); + } + return 0; // no-op, not actually adjusting terminal settings + } + case 21519: { + if (!stream.tty) return -59; + var argp = syscallGetVarargP(); + HEAP32[((argp)>>2)] = 0; + return 0; + } + case 21520: { + if (!stream.tty) return -59; + return -28; // not supported + } + case 21531: { + var argp = syscallGetVarargP(); + return FS.ioctl(stream, op, argp); + } + case 21523: { + // TODO: in theory we should write to the winsize struct that gets + // passed in, but for now musl doesn't read anything on it + if (!stream.tty) return -59; + if (stream.tty.ops.ioctl_tiocgwinsz) { + var winsize = stream.tty.ops.ioctl_tiocgwinsz(stream.tty); + var argp = syscallGetVarargP(); + HEAP16[((argp)>>1)] = winsize[0]; + HEAP16[(((argp)+(2))>>1)] = winsize[1]; + } + return 0; + } + case 21524: { + // TODO: technically, this ioctl call should change the window size. + // but, since emscripten doesn't have any concept of a terminal window + // yet, we'll just silently throw it away as we do TIOCGWINSZ + if (!stream.tty) return -59; + return 0; + } + case 21515: { + if (!stream.tty) return -59; + return 0; + } + default: return -28; // not supported + } + } catch (e) { + if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + return -e.errno; + } + } + + function ___syscall_lstat64(path, buf) { + try { + + path = SYSCALLS.getStr(path); + return SYSCALLS.writeStat(buf, FS.lstat(path)); + } catch (e) { + if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + return -e.errno; + } + } + + function ___syscall_newfstatat(dirfd, path, buf, flags) { + try { + + path = SYSCALLS.getStr(path); + var nofollow = flags & 256; + var allowEmpty = flags & 4096; + flags = flags & (~6400); + assert(!flags, `unknown flags in __syscall_newfstatat: ${flags}`); + path = SYSCALLS.calculateAt(dirfd, path, allowEmpty); + return SYSCALLS.writeStat(buf, nofollow ? FS.lstat(path) : FS.stat(path)); + } catch (e) { + if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + return -e.errno; + } + } + + + function ___syscall_openat(dirfd, path, flags, varargs) { + SYSCALLS.varargs = varargs; + try { + + path = SYSCALLS.getStr(path); + path = SYSCALLS.calculateAt(dirfd, path); + var mode = varargs ? syscallGetVarargI() : 0; + return FS.open(path, flags, mode).fd; + } catch (e) { + if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + return -e.errno; + } + } + + function ___syscall_renameat(olddirfd, oldpath, newdirfd, newpath) { + try { + + oldpath = SYSCALLS.getStr(oldpath); + newpath = SYSCALLS.getStr(newpath); + oldpath = SYSCALLS.calculateAt(olddirfd, oldpath); + newpath = SYSCALLS.calculateAt(newdirfd, newpath); + FS.rename(oldpath, newpath); + return 0; + } catch (e) { + if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + return -e.errno; + } + } + + function ___syscall_rmdir(path) { + try { + + path = SYSCALLS.getStr(path); + FS.rmdir(path); + return 0; + } catch (e) { + if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + return -e.errno; + } + } + + function ___syscall_stat64(path, buf) { + try { + + path = SYSCALLS.getStr(path); + return SYSCALLS.writeStat(buf, FS.stat(path)); + } catch (e) { + if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + return -e.errno; + } + } + + function ___syscall_unlinkat(dirfd, path, flags) { + try { + + path = SYSCALLS.getStr(path); + path = SYSCALLS.calculateAt(dirfd, path); + if (flags === 0) { + FS.unlink(path); + } else if (flags === 512) { + FS.rmdir(path); + } else { + abort('Invalid flags passed to unlinkat'); + } + return 0; + } catch (e) { + if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + return -e.errno; + } + } + + var __abort_js = () => + abort('native code called abort()'); + + var isLeapYear = (year) => year%4 === 0 && (year%100 !== 0 || year%400 === 0); + + var MONTH_DAYS_LEAP_CUMULATIVE = [0,31,60,91,121,152,182,213,244,274,305,335]; + + var MONTH_DAYS_REGULAR_CUMULATIVE = [0,31,59,90,120,151,181,212,243,273,304,334]; + var ydayFromDate = (date) => { + var leap = isLeapYear(date.getFullYear()); + var monthDaysCumulative = (leap ? MONTH_DAYS_LEAP_CUMULATIVE : MONTH_DAYS_REGULAR_CUMULATIVE); + var yday = monthDaysCumulative[date.getMonth()] + date.getDate() - 1; // -1 since it's days since Jan 1 + + return yday; + }; + + var INT53_MAX = 9007199254740992; + + var INT53_MIN = -9007199254740992; + var bigintToI53Checked = (num) => (num < INT53_MIN || num > INT53_MAX) ? NaN : Number(num); + function __localtime_js(time, tmPtr) { + time = bigintToI53Checked(time); + + + var date = new Date(time*1000); + HEAP32[((tmPtr)>>2)] = date.getSeconds(); + HEAP32[(((tmPtr)+(4))>>2)] = date.getMinutes(); + HEAP32[(((tmPtr)+(8))>>2)] = date.getHours(); + HEAP32[(((tmPtr)+(12))>>2)] = date.getDate(); + HEAP32[(((tmPtr)+(16))>>2)] = date.getMonth(); + HEAP32[(((tmPtr)+(20))>>2)] = date.getFullYear()-1900; + HEAP32[(((tmPtr)+(24))>>2)] = date.getDay(); + + var yday = ydayFromDate(date)|0; + HEAP32[(((tmPtr)+(28))>>2)] = yday; + HEAP32[(((tmPtr)+(36))>>2)] = -(date.getTimezoneOffset() * 60); + + // Attention: DST is in December in South, and some regions don't have DST at all. + var start = new Date(date.getFullYear(), 0, 1); + var summerOffset = new Date(date.getFullYear(), 6, 1).getTimezoneOffset(); + var winterOffset = start.getTimezoneOffset(); + var dst = (summerOffset != winterOffset && date.getTimezoneOffset() == Math.min(winterOffset, summerOffset))|0; + HEAP32[(((tmPtr)+(32))>>2)] = dst; + ; + } + + + var __mktime_js = function(tmPtr) { + + var ret = (() => { + var date = new Date(HEAP32[(((tmPtr)+(20))>>2)] + 1900, + HEAP32[(((tmPtr)+(16))>>2)], + HEAP32[(((tmPtr)+(12))>>2)], + HEAP32[(((tmPtr)+(8))>>2)], + HEAP32[(((tmPtr)+(4))>>2)], + HEAP32[((tmPtr)>>2)], + 0); + + // There's an ambiguous hour when the time goes back; the tm_isdst field is + // used to disambiguate it. Date() basically guesses, so we fix it up if it + // guessed wrong, or fill in tm_isdst with the guess if it's -1. + var dst = HEAP32[(((tmPtr)+(32))>>2)]; + var guessedOffset = date.getTimezoneOffset(); + var start = new Date(date.getFullYear(), 0, 1); + var summerOffset = new Date(date.getFullYear(), 6, 1).getTimezoneOffset(); + var winterOffset = start.getTimezoneOffset(); + var dstOffset = Math.min(winterOffset, summerOffset); // DST is in December in South + if (dst < 0) { + // Attention: some regions don't have DST at all. + HEAP32[(((tmPtr)+(32))>>2)] = Number(summerOffset != winterOffset && dstOffset == guessedOffset); + } else if ((dst > 0) != (dstOffset == guessedOffset)) { + var nonDstOffset = Math.max(winterOffset, summerOffset); + var trueOffset = dst > 0 ? dstOffset : nonDstOffset; + // Don't try setMinutes(date.getMinutes() + ...) -- it's messed up. + date.setTime(date.getTime() + (trueOffset - guessedOffset)*60000); + } + + HEAP32[(((tmPtr)+(24))>>2)] = date.getDay(); + var yday = ydayFromDate(date)|0; + HEAP32[(((tmPtr)+(28))>>2)] = yday; + // To match expected behavior, update fields from date + HEAP32[((tmPtr)>>2)] = date.getSeconds(); + HEAP32[(((tmPtr)+(4))>>2)] = date.getMinutes(); + HEAP32[(((tmPtr)+(8))>>2)] = date.getHours(); + HEAP32[(((tmPtr)+(12))>>2)] = date.getDate(); + HEAP32[(((tmPtr)+(16))>>2)] = date.getMonth(); + HEAP32[(((tmPtr)+(20))>>2)] = date.getYear(); + + var timeMs = date.getTime(); + if (isNaN(timeMs)) { + return -1; + } + // Return time in microseconds + return timeMs / 1000; + })(); + return BigInt(ret); + }; + + var stringToUTF8 = (str, outPtr, maxBytesToWrite) => { + assert(typeof maxBytesToWrite == 'number', 'stringToUTF8(str, outPtr, maxBytesToWrite) is missing the third parameter that specifies the length of the output buffer!'); + return stringToUTF8Array(str, HEAPU8, outPtr, maxBytesToWrite); + }; + + var __tzset_js = (timezone, daylight, std_name, dst_name) => { + // TODO: Use (malleable) environment variables instead of system settings. + var currentYear = new Date().getFullYear(); + var winter = new Date(currentYear, 0, 1); + var summer = new Date(currentYear, 6, 1); + var winterOffset = winter.getTimezoneOffset(); + var summerOffset = summer.getTimezoneOffset(); + + // Local standard timezone offset. Local standard time is not adjusted for + // daylight savings. This code uses the fact that getTimezoneOffset returns + // a greater value during Standard Time versus Daylight Saving Time (DST). + // Thus it determines the expected output during Standard Time, and it + // compares whether the output of the given date the same (Standard) or less + // (DST). + var stdTimezoneOffset = Math.max(winterOffset, summerOffset); + + // timezone is specified as seconds west of UTC ("The external variable + // `timezone` shall be set to the difference, in seconds, between + // Coordinated Universal Time (UTC) and local standard time."), the same + // as returned by stdTimezoneOffset. + // See http://pubs.opengroup.org/onlinepubs/009695399/functions/tzset.html + HEAPU32[((timezone)>>2)] = stdTimezoneOffset * 60; + + HEAP32[((daylight)>>2)] = Number(winterOffset != summerOffset); + + var extractZone = (timezoneOffset) => { + // Why inverse sign? + // Read here https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/getTimezoneOffset + var sign = timezoneOffset >= 0 ? "-" : "+"; + + var absOffset = Math.abs(timezoneOffset) + var hours = String(Math.floor(absOffset / 60)).padStart(2, "0"); + var minutes = String(absOffset % 60).padStart(2, "0"); + + return `UTC${sign}${hours}${minutes}`; + } + + var winterName = extractZone(winterOffset); + var summerName = extractZone(summerOffset); + assert(winterName); + assert(summerName); + assert(lengthBytesUTF8(winterName) <= 16, `timezone name truncated to fit in TZNAME_MAX (${winterName})`); + assert(lengthBytesUTF8(summerName) <= 16, `timezone name truncated to fit in TZNAME_MAX (${summerName})`); + if (summerOffset < winterOffset) { + // Northern hemisphere + stringToUTF8(winterName, std_name, 17); + stringToUTF8(summerName, dst_name, 17); + } else { + stringToUTF8(winterName, dst_name, 17); + stringToUTF8(summerName, std_name, 17); + } + }; + + var _emscripten_date_now = () => Date.now(); + + var abortOnCannotGrowMemory = (requestedSize) => { + abort(`Cannot enlarge memory arrays to size ${requestedSize} bytes (OOM). Either (1) compile with -sINITIAL_MEMORY=X with X higher than the current value ${HEAP8.length}, (2) compile with -sALLOW_MEMORY_GROWTH which allows increasing the size at runtime, or (3) if you want malloc to return NULL (0) instead of this abort, compile with -sABORTING_MALLOC=0`); + }; + var _emscripten_resize_heap = (requestedSize) => { + var oldSize = HEAPU8.length; + // With CAN_ADDRESS_2GB or MEMORY64, pointers are already unsigned. + requestedSize >>>= 0; + abortOnCannotGrowMemory(requestedSize); + }; + + function _fd_close(fd) { + try { + + var stream = SYSCALLS.getStreamFromFD(fd); + FS.close(stream); + return 0; + } catch (e) { + if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + return e.errno; + } + } + + function _fd_fdstat_get(fd, pbuf) { + try { + + var rightsBase = 0; + var rightsInheriting = 0; + var flags = 0; + { + var stream = SYSCALLS.getStreamFromFD(fd); + // All character devices are terminals (other things a Linux system would + // assume is a character device, like the mouse, we have special APIs for). + var type = stream.tty ? 2 : + FS.isDir(stream.mode) ? 3 : + FS.isLink(stream.mode) ? 7 : + 4; + } + HEAP8[pbuf] = type; + HEAP16[(((pbuf)+(2))>>1)] = flags; + HEAP64[(((pbuf)+(8))>>3)] = BigInt(rightsBase); + HEAP64[(((pbuf)+(16))>>3)] = BigInt(rightsInheriting); + return 0; + } catch (e) { + if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + return e.errno; + } + } + + /** @param {number=} offset */ + var doReadv = (stream, iov, iovcnt, offset) => { + var ret = 0; + for (var i = 0; i < iovcnt; i++) { + var ptr = HEAPU32[((iov)>>2)]; + var len = HEAPU32[(((iov)+(4))>>2)]; + iov += 8; + var curr = FS.read(stream, HEAP8, ptr, len, offset); + if (curr < 0) return -1; + ret += curr; + if (curr < len) break; // nothing more to read + if (typeof offset != 'undefined') { + offset += curr; + } + } + return ret; + }; + + function _fd_read(fd, iov, iovcnt, pnum) { + try { + + var stream = SYSCALLS.getStreamFromFD(fd); + var num = doReadv(stream, iov, iovcnt); + HEAPU32[((pnum)>>2)] = num; + return 0; + } catch (e) { + if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + return e.errno; + } + } + + + function _fd_seek(fd, offset, whence, newOffset) { + offset = bigintToI53Checked(offset); + + + try { + + if (isNaN(offset)) return 61; + var stream = SYSCALLS.getStreamFromFD(fd); + FS.llseek(stream, offset, whence); + HEAP64[((newOffset)>>3)] = BigInt(stream.position); + if (stream.getdents && offset === 0 && whence === 0) stream.getdents = null; // reset readdir state + return 0; + } catch (e) { + if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + return e.errno; + } + ; + } + + /** @param {number=} offset */ + var doWritev = (stream, iov, iovcnt, offset) => { + var ret = 0; + for (var i = 0; i < iovcnt; i++) { + var ptr = HEAPU32[((iov)>>2)]; + var len = HEAPU32[(((iov)+(4))>>2)]; + iov += 8; + var curr = FS.write(stream, HEAP8, ptr, len, offset); + if (curr < 0) return -1; + ret += curr; + if (curr < len) { + // No more space to write. + break; + } + if (typeof offset != 'undefined') { + offset += curr; + } + } + return ret; + }; + + function _fd_write(fd, iov, iovcnt, pnum) { + try { + + var stream = SYSCALLS.getStreamFromFD(fd); + var num = doWritev(stream, iov, iovcnt); + HEAPU32[((pnum)>>2)] = num; + return 0; + } catch (e) { + if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + return e.errno; + } + } + + + var runtimeKeepaliveCounter = 0; + var keepRuntimeAlive = () => noExitRuntime || runtimeKeepaliveCounter > 0; + var _proc_exit = (code) => { + EXITSTATUS = code; + if (!keepRuntimeAlive()) { + Module['onExit']?.(code); + ABORT = true; + } + quit_(code, new ExitStatus(code)); + }; + + + /** @param {boolean|number=} implicit */ + var exitJS = (status, implicit) => { + EXITSTATUS = status; + + checkUnflushedContent(); + + // if exit() was called explicitly, warn the user if the runtime isn't actually being shut down + if (keepRuntimeAlive() && !implicit) { + var msg = `program exited (with status: ${status}), but keepRuntimeAlive() is set (counter=${runtimeKeepaliveCounter}) due to an async operation, so halting execution but not exiting the runtime or preventing further async execution (you can use emscripten_force_exit, if you want to force a true shutdown)`; + err(msg); + } + + _proc_exit(status); + }; + + var handleException = (e) => { + // Certain exception types we do not treat as errors since they are used for + // internal control flow. + // 1. ExitStatus, which is thrown by exit() + // 2. "unwind", which is thrown by emscripten_unwind_to_js_event_loop() and others + // that wish to return to JS event loop. + if (e instanceof ExitStatus || e == 'unwind') { + return EXITSTATUS; + } + checkStackCookie(); + if (e instanceof WebAssembly.RuntimeError) { + if (_emscripten_stack_get_current() <= 0) { + err('Stack overflow detected. You can try increasing -sSTACK_SIZE (currently set to 65536)'); + } + } + quit_(1, e); + }; + + + + var stackAlloc = (sz) => __emscripten_stack_alloc(sz); + var stringToUTF8OnStack = (str) => { + var size = lengthBytesUTF8(str) + 1; + var ret = stackAlloc(size); + stringToUTF8(str, ret, size); + return ret; + }; + + FS.createPreloadedFile = FS_createPreloadedFile; + FS.staticInit(); + // Set module methods based on EXPORTED_RUNTIME_METHODS + ; +// End JS library code + +function checkIncomingModuleAPI() { + ignoredModuleProp('fetchSettings'); +} +var wasmImports = { + /** @export */ + __syscall_chmod: ___syscall_chmod, + /** @export */ + __syscall_fchmod: ___syscall_fchmod, + /** @export */ + __syscall_fcntl64: ___syscall_fcntl64, + /** @export */ + __syscall_fstat64: ___syscall_fstat64, + /** @export */ + __syscall_ioctl: ___syscall_ioctl, + /** @export */ + __syscall_lstat64: ___syscall_lstat64, + /** @export */ + __syscall_newfstatat: ___syscall_newfstatat, + /** @export */ + __syscall_openat: ___syscall_openat, + /** @export */ + __syscall_renameat: ___syscall_renameat, + /** @export */ + __syscall_rmdir: ___syscall_rmdir, + /** @export */ + __syscall_stat64: ___syscall_stat64, + /** @export */ + __syscall_unlinkat: ___syscall_unlinkat, + /** @export */ + _abort_js: __abort_js, + /** @export */ + _localtime_js: __localtime_js, + /** @export */ + _mktime_js: __mktime_js, + /** @export */ + _tzset_js: __tzset_js, + /** @export */ + emscripten_date_now: _emscripten_date_now, + /** @export */ + emscripten_resize_heap: _emscripten_resize_heap, + /** @export */ + fd_close: _fd_close, + /** @export */ + fd_fdstat_get: _fd_fdstat_get, + /** @export */ + fd_read: _fd_read, + /** @export */ + fd_seek: _fd_seek, + /** @export */ + fd_write: _fd_write +}; +var wasmExports; +createWasm(); +var ___wasm_call_ctors = createExportWrapper('__wasm_call_ctors', 0); +var _strerror = createExportWrapper('strerror', 1); +var _main = Module['_main'] = createExportWrapper('__main_argc_argv', 2); +var _fflush = createExportWrapper('fflush', 1); +var _emscripten_stack_init = () => (_emscripten_stack_init = wasmExports['emscripten_stack_init'])(); +var _emscripten_stack_get_free = () => (_emscripten_stack_get_free = wasmExports['emscripten_stack_get_free'])(); +var _emscripten_stack_get_base = () => (_emscripten_stack_get_base = wasmExports['emscripten_stack_get_base'])(); +var _emscripten_stack_get_end = () => (_emscripten_stack_get_end = wasmExports['emscripten_stack_get_end'])(); +var __emscripten_stack_restore = (a0) => (__emscripten_stack_restore = wasmExports['_emscripten_stack_restore'])(a0); +var __emscripten_stack_alloc = (a0) => (__emscripten_stack_alloc = wasmExports['_emscripten_stack_alloc'])(a0); +var _emscripten_stack_get_current = () => (_emscripten_stack_get_current = wasmExports['emscripten_stack_get_current'])(); + + +// include: postamble.js +// === Auto-generated postamble setup entry stuff === + +var missingLibrarySymbols = [ + 'writeI53ToI64', + 'writeI53ToI64Clamped', + 'writeI53ToI64Signaling', + 'writeI53ToU64Clamped', + 'writeI53ToU64Signaling', + 'readI53FromI64', + 'readI53FromU64', + 'convertI32PairToI53', + 'convertI32PairToI53Checked', + 'convertU32PairToI53', + 'getTempRet0', + 'setTempRet0', + 'zeroMemory', + 'getHeapMax', + 'growMemory', + 'inetPton4', + 'inetNtop4', + 'inetPton6', + 'inetNtop6', + 'readSockaddr', + 'writeSockaddr', + 'emscriptenLog', + 'readEmAsmArgs', + 'jstoi_q', + 'getExecutableName', + 'listenOnce', + 'autoResumeAudioContext', + 'getDynCaller', + 'dynCall', + 'runtimeKeepalivePush', + 'runtimeKeepalivePop', + 'callUserCallback', + 'maybeExit', + 'asmjsMangle', + 'alignMemory', + 'HandleAllocator', + 'getNativeTypeSize', + 'addOnInit', + 'addOnPostCtor', + 'addOnPreMain', + 'addOnExit', + 'STACK_SIZE', + 'STACK_ALIGN', + 'POINTER_SIZE', + 'ASSERTIONS', + 'getCFunc', + 'ccall', + 'cwrap', + 'uleb128Encode', + 'sigToWasmTypes', + 'generateFuncType', + 'convertJsFunctionToWasm', + 'getEmptyTableSlot', + 'updateTableMap', + 'getFunctionAddress', + 'addFunction', + 'removeFunction', + 'reallyNegative', + 'unSign', + 'strLen', + 'reSign', + 'formatString', + 'intArrayToString', + 'AsciiToString', + 'stringToAscii', + 'UTF16ToString', + 'stringToUTF16', + 'lengthBytesUTF16', + 'UTF32ToString', + 'stringToUTF32', + 'lengthBytesUTF32', + 'stringToNewUTF8', + 'writeArrayToMemory', + 'registerKeyEventCallback', + 'maybeCStringToJsString', + 'findEventTarget', + 'getBoundingClientRect', + 'fillMouseEventData', + 'registerMouseEventCallback', + 'registerWheelEventCallback', + 'registerUiEventCallback', + 'registerFocusEventCallback', + 'fillDeviceOrientationEventData', + 'registerDeviceOrientationEventCallback', + 'fillDeviceMotionEventData', + 'registerDeviceMotionEventCallback', + 'screenOrientation', + 'fillOrientationChangeEventData', + 'registerOrientationChangeEventCallback', + 'fillFullscreenChangeEventData', + 'registerFullscreenChangeEventCallback', + 'JSEvents_requestFullscreen', + 'JSEvents_resizeCanvasForFullscreen', + 'registerRestoreOldStyle', + 'hideEverythingExceptGivenElement', + 'restoreHiddenElements', + 'setLetterbox', + 'softFullscreenResizeWebGLRenderTarget', + 'doRequestFullscreen', + 'fillPointerlockChangeEventData', + 'registerPointerlockChangeEventCallback', + 'registerPointerlockErrorEventCallback', + 'requestPointerLock', + 'fillVisibilityChangeEventData', + 'registerVisibilityChangeEventCallback', + 'registerTouchEventCallback', + 'fillGamepadEventData', + 'registerGamepadEventCallback', + 'registerBeforeUnloadEventCallback', + 'fillBatteryEventData', + 'battery', + 'registerBatteryEventCallback', + 'setCanvasElementSize', + 'getCanvasElementSize', + 'jsStackTrace', + 'getCallstack', + 'convertPCtoSourceLocation', + 'getEnvStrings', + 'checkWasiClock', + 'wasiRightsToMuslOFlags', + 'wasiOFlagsToMuslOFlags', + 'safeSetTimeout', + 'setImmediateWrapped', + 'safeRequestAnimationFrame', + 'clearImmediateWrapped', + 'registerPostMainLoop', + 'registerPreMainLoop', + 'getPromise', + 'makePromise', + 'idsToPromises', + 'makePromiseCallback', + 'ExceptionInfo', + 'findMatchingCatch', + 'Browser_asyncPrepareDataCounter', + 'arraySum', + 'addDays', + 'getSocketFromFD', + 'getSocketAddress', + 'FS_unlink', + 'FS_mkdirTree', + '_setNetworkCallback', + 'heapObjectForWebGLType', + 'toTypedArrayIndex', + 'webgl_enable_ANGLE_instanced_arrays', + 'webgl_enable_OES_vertex_array_object', + 'webgl_enable_WEBGL_draw_buffers', + 'webgl_enable_WEBGL_multi_draw', + 'webgl_enable_EXT_polygon_offset_clamp', + 'webgl_enable_EXT_clip_control', + 'webgl_enable_WEBGL_polygon_mode', + 'emscriptenWebGLGet', + 'computeUnpackAlignedImageSize', + 'colorChannelsInGlTextureFormat', + 'emscriptenWebGLGetTexPixelData', + 'emscriptenWebGLGetUniform', + 'webglGetUniformLocation', + 'webglPrepareUniformLocationsBeforeFirstUse', + 'webglGetLeftBracePos', + 'emscriptenWebGLGetVertexAttrib', + '__glGetActiveAttribOrUniform', + 'writeGLArray', + 'registerWebGlEventCallback', + 'runAndAbortIfError', + 'ALLOC_NORMAL', + 'ALLOC_STACK', + 'allocate', + 'writeStringToMemory', + 'writeAsciiToMemory', + 'demangle', + 'stackTrace', +]; +missingLibrarySymbols.forEach(missingLibrarySymbol) + +var unexportedSymbols = [ + 'run', + 'addRunDependency', + 'removeRunDependency', + 'out', + 'err', + 'callMain', + 'abort', + 'wasmMemory', + 'wasmExports', + 'writeStackCookie', + 'checkStackCookie', + 'INT53_MAX', + 'INT53_MIN', + 'bigintToI53Checked', + 'stackSave', + 'stackRestore', + 'stackAlloc', + 'ptrToString', + 'exitJS', + 'abortOnCannotGrowMemory', + 'ENV', + 'ERRNO_CODES', + 'strError', + 'DNS', + 'Protocols', + 'Sockets', + 'timers', + 'warnOnce', + 'readEmAsmArgsArray', + 'jstoi_s', + 'handleException', + 'keepRuntimeAlive', + 'asyncLoad', + 'mmapAlloc', + 'wasmTable', + 'noExitRuntime', + 'addOnPreRun', + 'addOnPostRun', + 'freeTableIndexes', + 'functionsInTableMap', + 'setValue', + 'getValue', + 'PATH', + 'PATH_FS', + 'UTF8Decoder', + 'UTF8ArrayToString', + 'UTF8ToString', + 'stringToUTF8Array', + 'stringToUTF8', + 'lengthBytesUTF8', + 'intArrayFromString', + 'UTF16Decoder', + 'stringToUTF8OnStack', + 'JSEvents', + 'specialHTMLTargets', + 'findCanvasEventTarget', + 'currentFullscreenStrategy', + 'restoreOldWindowedStyle', + 'UNWIND_CACHE', + 'ExitStatus', + 'doReadv', + 'doWritev', + 'initRandomFill', + 'randomFill', + 'emSetImmediate', + 'emClearImmediate_deps', + 'emClearImmediate', + 'promiseMap', + 'uncaughtExceptionCount', + 'exceptionLast', + 'exceptionCaught', + 'Browser', + 'getPreloadedImageData__data', + 'wget', + 'MONTH_DAYS_REGULAR', + 'MONTH_DAYS_LEAP', + 'MONTH_DAYS_REGULAR_CUMULATIVE', + 'MONTH_DAYS_LEAP_CUMULATIVE', + 'isLeapYear', + 'ydayFromDate', + 'SYSCALLS', + 'preloadPlugins', + 'FS_createPreloadedFile', + 'FS_modeStringToFlags', + 'FS_getMode', + 'FS_stdin_getChar_buffer', + 'FS_stdin_getChar', + 'FS_createPath', + 'FS_createDevice', + 'FS_readFile', + 'FS', + 'FS_createDataFile', + 'FS_createLazyFile', + 'MEMFS', + 'TTY', + 'PIPEFS', + 'SOCKFS', + 'tempFixedLengthArray', + 'miniTempWebGLFloatBuffers', + 'miniTempWebGLIntBuffers', + 'GL', + 'AL', + 'GLUT', + 'EGL', + 'GLEW', + 'IDBStore', + 'SDL', + 'SDL_gfx', + 'allocateUTF8', + 'allocateUTF8OnStack', + 'print', + 'printErr', +]; +unexportedSymbols.forEach(unexportedRuntimeSymbol); + + + +var calledRun; + +function callMain(args = []) { + assert(runDependencies == 0, 'cannot call main when async dependencies remain! (listen on Module["onRuntimeInitialized"])'); + assert(typeof onPreRuns === 'undefined' || onPreRuns.length == 0, 'cannot call main when preRun functions remain to be called'); + + var entryFunction = _main; + + args.unshift(thisProgram); + + var argc = args.length; + var argv = stackAlloc((argc + 1) * 4); + var argv_ptr = argv; + args.forEach((arg) => { + HEAPU32[((argv_ptr)>>2)] = stringToUTF8OnStack(arg); + argv_ptr += 4; + }); + HEAPU32[((argv_ptr)>>2)] = 0; + + try { + + var ret = entryFunction(argc, argv); + + // if we're not running an evented main loop, it's time to exit + exitJS(ret, /* implicit = */ true); + return ret; + } catch (e) { + return handleException(e); + } +} + +function stackCheckInit() { + // This is normally called automatically during __wasm_call_ctors but need to + // get these values before even running any of the ctors so we call it redundantly + // here. + _emscripten_stack_init(); + // TODO(sbc): Move writeStackCookie to native to to avoid this. + writeStackCookie(); +} + +function run(args = arguments_) { + + if (runDependencies > 0) { + dependenciesFulfilled = run; + return; + } + + stackCheckInit(); + + preRun(); + + // a preRun added a dependency, run will be called later + if (runDependencies > 0) { + dependenciesFulfilled = run; + return; + } + + function doRun() { + // run may have just been called through dependencies being fulfilled just in this very frame, + // or while the async setStatus time below was happening + assert(!calledRun); + calledRun = true; + Module['calledRun'] = true; + + if (ABORT) return; + + initRuntime(); + + preMain(); + + Module['onRuntimeInitialized']?.(); + consumedModuleProp('onRuntimeInitialized'); + + var noInitialRun = Module['noInitialRun'];legacyModuleProp('noInitialRun', 'noInitialRun'); + if (!noInitialRun) callMain(args); + + postRun(); + } + + if (Module['setStatus']) { + Module['setStatus']('Running...'); + setTimeout(() => { + setTimeout(() => Module['setStatus'](''), 1); + doRun(); + }, 1); + } else + { + doRun(); + } + checkStackCookie(); +} + +function checkUnflushedContent() { + // Compiler settings do not allow exiting the runtime, so flushing + // the streams is not possible. but in ASSERTIONS mode we check + // if there was something to flush, and if so tell the user they + // should request that the runtime be exitable. + // Normally we would not even include flush() at all, but in ASSERTIONS + // builds we do so just for this check, and here we see if there is any + // content to flush, that is, we check if there would have been + // something a non-ASSERTIONS build would have not seen. + // How we flush the streams depends on whether we are in SYSCALLS_REQUIRE_FILESYSTEM=0 + // mode (which has its own special function for this; otherwise, all + // the code is inside libc) + var oldOut = out; + var oldErr = err; + var has = false; + out = err = (x) => { + has = true; + } + try { // it doesn't matter if it fails + _fflush(0); + // also flush in the JS FS layer + ['stdout', 'stderr'].forEach((name) => { + var info = FS.analyzePath('/dev/' + name); + if (!info) return; + var stream = info.object; + var rdev = stream.rdev; + var tty = TTY.ttys[rdev]; + if (tty?.output?.length) { + has = true; + } + }); + } catch(e) {} + out = oldOut; + err = oldErr; + if (has) { + warnOnce('stdio streams had content in them that was not flushed. you should set EXIT_RUNTIME to 1 (see the Emscripten FAQ), or make sure to emit a newline when you printf etc.'); + } +} + +if (Module['preInit']) { + if (typeof Module['preInit'] == 'function') Module['preInit'] = [Module['preInit']]; + while (Module['preInit'].length > 0) { + Module['preInit'].pop()(); + } +} +consumedModuleProp('preInit'); + +run(); + +// end include: postamble.js + diff --git a/thirdparty/libzip-1.11.3/build-emcmake/ossfuzz/zip_read_file_fuzzer.wasm b/thirdparty/libzip-1.11.3/build-emcmake/ossfuzz/zip_read_file_fuzzer.wasm new file mode 100755 index 0000000000000000000000000000000000000000..5de5b09d37d23da2a797cb2a15eb57a7e35149e7 GIT binary patch literal 389285 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%0A!-7Vz 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 literal 0 HcmV?d00001 diff --git a/thirdparty/libzip-1.11.3/build-emcmake/ossfuzz/zip_read_fuzzer.js b/thirdparty/libzip-1.11.3/build-emcmake/ossfuzz/zip_read_fuzzer.js new file mode 100644 index 0000000..86ef38c --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/ossfuzz/zip_read_fuzzer.js @@ -0,0 +1,4646 @@ +// include: shell.js +// The Module object: Our interface to the outside world. We import +// and export values on it. There are various ways Module can be used: +// 1. Not defined. We create it here +// 2. A function parameter, function(moduleArg) => Promise +// 3. pre-run appended it, var Module = {}; ..generated code.. +// 4. External script tag defines var Module. +// We need to check if Module already exists (e.g. case 3 above). +// Substitution will be replaced with actual code on later stage of the build, +// this way Closure Compiler will not mangle it (e.g. case 4. above). +// Note that if you want to run closure, and also to use Module +// after the generated code, you will need to define var Module = {}; +// before the code. Then that object will be used in the code, and you +// can continue to use Module afterwards as well. +var Module = typeof Module != 'undefined' ? Module : {}; + +// Determine the runtime environment we are in. You can customize this by +// setting the ENVIRONMENT setting at compile time (see settings.js). + +// Attempt to auto-detect the environment +var ENVIRONMENT_IS_WEB = typeof window == 'object'; +var ENVIRONMENT_IS_WORKER = typeof WorkerGlobalScope != 'undefined'; +// N.b. Electron.js environment is simultaneously a NODE-environment, but +// also a web environment. +var ENVIRONMENT_IS_NODE = typeof process == 'object' && typeof process.versions == 'object' && typeof process.versions.node == 'string' && process.type != 'renderer'; +var ENVIRONMENT_IS_SHELL = !ENVIRONMENT_IS_WEB && !ENVIRONMENT_IS_NODE && !ENVIRONMENT_IS_WORKER; + +if (ENVIRONMENT_IS_NODE) { + +} + +// --pre-jses are emitted after the Module integration code, so that they can +// refer to Module (if they choose; they can also define Module) + + +// Sometimes an existing Module object exists with properties +// meant to overwrite the default module functionality. Here +// we collect those properties and reapply _after_ we configure +// the current environment's defaults to avoid having to be so +// defensive during initialization. +var moduleOverrides = {...Module}; + +var arguments_ = []; +var thisProgram = './this.program'; +var quit_ = (status, toThrow) => { + throw toThrow; +}; + +// `/` should be present at the end if `scriptDirectory` is not empty +var scriptDirectory = ''; +function locateFile(path) { + if (Module['locateFile']) { + return Module['locateFile'](path, scriptDirectory); + } + return scriptDirectory + path; +} + +// Hooks that are implemented differently in different runtime environments. +var readAsync, readBinary; + +if (ENVIRONMENT_IS_NODE) { + if (typeof process == 'undefined' || !process.release || process.release.name !== 'node') throw new Error('not compiled for this environment (did you build to HTML and try to run it not on the web, or set ENVIRONMENT to something - like node - and run it someplace else - like on the web?)'); + + var nodeVersion = process.versions.node; + var numericVersion = nodeVersion.split('.').slice(0, 3); + numericVersion = (numericVersion[0] * 10000) + (numericVersion[1] * 100) + (numericVersion[2].split('-')[0] * 1); + var minVersion = 160000; + if (numericVersion < 160000) { + throw new Error('This emscripten-generated code requires node v16.0.0 (detected v' + nodeVersion + ')'); + } + + // These modules will usually be used on Node.js. Load them eagerly to avoid + // the complexity of lazy-loading. + var fs = require('fs'); + var nodePath = require('path'); + + scriptDirectory = __dirname + '/'; + +// include: node_shell_read.js +readBinary = (filename) => { + // We need to re-wrap `file://` strings to URLs. + filename = isFileURI(filename) ? new URL(filename) : filename; + var ret = fs.readFileSync(filename); + assert(Buffer.isBuffer(ret)); + return ret; +}; + +readAsync = async (filename, binary = true) => { + // See the comment in the `readBinary` function. + filename = isFileURI(filename) ? new URL(filename) : filename; + var ret = fs.readFileSync(filename, binary ? undefined : 'utf8'); + assert(binary ? Buffer.isBuffer(ret) : typeof ret == 'string'); + return ret; +}; +// end include: node_shell_read.js + if (!Module['thisProgram'] && process.argv.length > 1) { + thisProgram = process.argv[1].replace(/\\/g, '/'); + } + + arguments_ = process.argv.slice(2); + + if (typeof module != 'undefined') { + module['exports'] = Module; + } + + quit_ = (status, toThrow) => { + process.exitCode = status; + throw toThrow; + }; + +} else +if (ENVIRONMENT_IS_SHELL) { + + if ((typeof process == 'object' && typeof require === 'function') || typeof window == 'object' || typeof WorkerGlobalScope != 'undefined') throw new Error('not compiled for this environment (did you build to HTML and try to run it not on the web, or set ENVIRONMENT to something - like node - and run it someplace else - like on the web?)'); + +} else + +// Note that this includes Node.js workers when relevant (pthreads is enabled). +// Node.js workers are detected as a combination of ENVIRONMENT_IS_WORKER and +// ENVIRONMENT_IS_NODE. +if (ENVIRONMENT_IS_WEB || ENVIRONMENT_IS_WORKER) { + if (ENVIRONMENT_IS_WORKER) { // Check worker, not web, since window could be polyfilled + scriptDirectory = self.location.href; + } else if (typeof document != 'undefined' && document.currentScript) { // web + scriptDirectory = document.currentScript.src; + } + // blob urls look like blob:http://site.com/etc/etc and we cannot infer anything from them. + // otherwise, slice off the final part of the url to find the script directory. + // if scriptDirectory does not contain a slash, lastIndexOf will return -1, + // and scriptDirectory will correctly be replaced with an empty string. + // If scriptDirectory contains a query (starting with ?) or a fragment (starting with #), + // they are removed because they could contain a slash. + if (scriptDirectory.startsWith('blob:')) { + scriptDirectory = ''; + } else { + scriptDirectory = scriptDirectory.slice(0, scriptDirectory.replace(/[?#].*/, '').lastIndexOf('/')+1); + } + + if (!(typeof window == 'object' || typeof WorkerGlobalScope != 'undefined')) throw new Error('not compiled for this environment (did you build to HTML and try to run it not on the web, or set ENVIRONMENT to something - like node - and run it someplace else - like on the web?)'); + + { +// include: web_or_worker_shell_read.js +if (ENVIRONMENT_IS_WORKER) { + readBinary = (url) => { + var xhr = new XMLHttpRequest(); + xhr.open('GET', url, false); + xhr.responseType = 'arraybuffer'; + xhr.send(null); + return new Uint8Array(/** @type{!ArrayBuffer} */(xhr.response)); + }; + } + + readAsync = async (url) => { + // Fetch has some additional restrictions over XHR, like it can't be used on a file:// url. + // See https://github.com/github/fetch/pull/92#issuecomment-140665932 + // Cordova or Electron apps are typically loaded from a file:// url. + // So use XHR on webview if URL is a file URL. + if (isFileURI(url)) { + return new Promise((resolve, reject) => { + var xhr = new XMLHttpRequest(); + xhr.open('GET', url, true); + xhr.responseType = 'arraybuffer'; + xhr.onload = () => { + if (xhr.status == 200 || (xhr.status == 0 && xhr.response)) { // file URLs can return 0 + resolve(xhr.response); + return; + } + reject(xhr.status); + }; + xhr.onerror = reject; + xhr.send(null); + }); + } + var response = await fetch(url, { credentials: 'same-origin' }); + if (response.ok) { + return response.arrayBuffer(); + } + throw new Error(response.status + ' : ' + response.url); + }; +// end include: web_or_worker_shell_read.js + } +} else +{ + throw new Error('environment detection error'); +} + +var out = Module['print'] || console.log.bind(console); +var err = Module['printErr'] || console.error.bind(console); + +// Merge back in the overrides +Object.assign(Module, moduleOverrides); +// Free the object hierarchy contained in the overrides, this lets the GC +// reclaim data used. +moduleOverrides = null; +checkIncomingModuleAPI(); + +// Emit code to handle expected values on the Module object. This applies Module.x +// to the proper local x. This has two benefits: first, we only emit it if it is +// expected to arrive, and second, by using a local everywhere else that can be +// minified. + +if (Module['arguments']) arguments_ = Module['arguments'];legacyModuleProp('arguments', 'arguments_'); + +if (Module['thisProgram']) thisProgram = Module['thisProgram'];legacyModuleProp('thisProgram', 'thisProgram'); + +// perform assertions in shell.js after we set up out() and err(), as otherwise if an assertion fails it cannot print the message +// Assertions on removed incoming Module JS APIs. +assert(typeof Module['memoryInitializerPrefixURL'] == 'undefined', 'Module.memoryInitializerPrefixURL option was removed, use Module.locateFile instead'); +assert(typeof Module['pthreadMainPrefixURL'] == 'undefined', 'Module.pthreadMainPrefixURL option was removed, use Module.locateFile instead'); +assert(typeof Module['cdInitializerPrefixURL'] == 'undefined', 'Module.cdInitializerPrefixURL option was removed, use Module.locateFile instead'); +assert(typeof Module['filePackagePrefixURL'] == 'undefined', 'Module.filePackagePrefixURL option was removed, use Module.locateFile instead'); +assert(typeof Module['read'] == 'undefined', 'Module.read option was removed'); +assert(typeof Module['readAsync'] == 'undefined', 'Module.readAsync option was removed (modify readAsync in JS)'); +assert(typeof Module['readBinary'] == 'undefined', 'Module.readBinary option was removed (modify readBinary in JS)'); +assert(typeof Module['setWindowTitle'] == 'undefined', 'Module.setWindowTitle option was removed (modify emscripten_set_window_title in JS)'); +assert(typeof Module['TOTAL_MEMORY'] == 'undefined', 'Module.TOTAL_MEMORY has been renamed Module.INITIAL_MEMORY'); +legacyModuleProp('asm', 'wasmExports'); +legacyModuleProp('readAsync', 'readAsync'); +legacyModuleProp('readBinary', 'readBinary'); +legacyModuleProp('setWindowTitle', 'setWindowTitle'); +var IDBFS = 'IDBFS is no longer included by default; build with -lidbfs.js'; +var PROXYFS = 'PROXYFS is no longer included by default; build with -lproxyfs.js'; +var WORKERFS = 'WORKERFS is no longer included by default; build with -lworkerfs.js'; +var FETCHFS = 'FETCHFS is no longer included by default; build with -lfetchfs.js'; +var ICASEFS = 'ICASEFS is no longer included by default; build with -licasefs.js'; +var JSFILEFS = 'JSFILEFS is no longer included by default; build with -ljsfilefs.js'; +var OPFS = 'OPFS is no longer included by default; build with -lopfs.js'; + +var NODEFS = 'NODEFS is no longer included by default; build with -lnodefs.js'; + +assert(!ENVIRONMENT_IS_SHELL, 'shell environment detected but not enabled at build time. Add `shell` to `-sENVIRONMENT` to enable.'); + +// end include: shell.js + +// include: preamble.js +// === Preamble library stuff === + +// Documentation for the public APIs defined in this file must be updated in: +// site/source/docs/api_reference/preamble.js.rst +// A prebuilt local version of the documentation is available at: +// site/build/text/docs/api_reference/preamble.js.txt +// You can also build docs locally as HTML or other formats in site/ +// An online HTML version (which may be of a different version of Emscripten) +// is up at http://kripken.github.io/emscripten-site/docs/api_reference/preamble.js.html + +var wasmBinary = Module['wasmBinary'];legacyModuleProp('wasmBinary', 'wasmBinary'); + +if (typeof WebAssembly != 'object') { + err('no native wasm support detected'); +} + +// Wasm globals + +var wasmMemory; + +//======================================== +// Runtime essentials +//======================================== + +// whether we are quitting the application. no code should run after this. +// set in exit() and abort() +var ABORT = false; + +// set by exit() and abort(). Passed to 'onExit' handler. +// NOTE: This is also used as the process return code code in shell environments +// but only when noExitRuntime is false. +var EXITSTATUS; + +// In STRICT mode, we only define assert() when ASSERTIONS is set. i.e. we +// don't define it at all in release modes. This matches the behaviour of +// MINIMAL_RUNTIME. +// TODO(sbc): Make this the default even without STRICT enabled. +/** @type {function(*, string=)} */ +function assert(condition, text) { + if (!condition) { + abort('Assertion failed' + (text ? ': ' + text : '')); + } +} + +// We used to include malloc/free by default in the past. Show a helpful error in +// builds with assertions. +function _malloc() { + abort('malloc() called but not included in the build - add `_malloc` to EXPORTED_FUNCTIONS'); +} +function _free() { + // Show a helpful error since we used to include free by default in the past. + abort('free() called but not included in the build - add `_free` to EXPORTED_FUNCTIONS'); +} + +// Memory management + +var HEAP, +/** @type {!Int8Array} */ + HEAP8, +/** @type {!Uint8Array} */ + HEAPU8, +/** @type {!Int16Array} */ + HEAP16, +/** @type {!Uint16Array} */ + HEAPU16, +/** @type {!Int32Array} */ + HEAP32, +/** @type {!Uint32Array} */ + HEAPU32, +/** @type {!Float32Array} */ + HEAPF32, +/* BigInt64Array type is not correctly defined in closure +/** not-@type {!BigInt64Array} */ + HEAP64, +/* BigUint64Array type is not correctly defined in closure +/** not-t@type {!BigUint64Array} */ + HEAPU64, +/** @type {!Float64Array} */ + HEAPF64; + +var runtimeInitialized = false; + +/** + * Indicates whether filename is delivered via file protocol (as opposed to http/https) + * @noinline + */ +var isFileURI = (filename) => filename.startsWith('file://'); + +// include: runtime_shared.js +// include: runtime_stack_check.js +// Initializes the stack cookie. Called at the startup of main and at the startup of each thread in pthreads mode. +function writeStackCookie() { + var max = _emscripten_stack_get_end(); + assert((max & 3) == 0); + // If the stack ends at address zero we write our cookies 4 bytes into the + // stack. This prevents interference with SAFE_HEAP and ASAN which also + // monitor writes to address zero. + if (max == 0) { + max += 4; + } + // The stack grow downwards towards _emscripten_stack_get_end. + // We write cookies to the final two words in the stack and detect if they are + // ever overwritten. + HEAPU32[((max)>>2)] = 0x02135467; + HEAPU32[(((max)+(4))>>2)] = 0x89BACDFE; + // Also test the global address 0 for integrity. + HEAPU32[((0)>>2)] = 1668509029; +} + +function checkStackCookie() { + if (ABORT) return; + var max = _emscripten_stack_get_end(); + // See writeStackCookie(). + if (max == 0) { + max += 4; + } + var cookie1 = HEAPU32[((max)>>2)]; + var cookie2 = HEAPU32[(((max)+(4))>>2)]; + if (cookie1 != 0x02135467 || cookie2 != 0x89BACDFE) { + abort(`Stack overflow! Stack cookie has been overwritten at ${ptrToString(max)}, expected hex dwords 0x89BACDFE and 0x2135467, but received ${ptrToString(cookie2)} ${ptrToString(cookie1)}`); + } + // Also test the global address 0 for integrity. + if (HEAPU32[((0)>>2)] != 0x63736d65 /* 'emsc' */) { + abort('Runtime error: The application has corrupted its heap memory area (address zero)!'); + } +} +// end include: runtime_stack_check.js +// include: runtime_exceptions.js +// end include: runtime_exceptions.js +// include: runtime_debug.js +// Endianness check +(() => { + var h16 = new Int16Array(1); + var h8 = new Int8Array(h16.buffer); + h16[0] = 0x6373; + if (h8[0] !== 0x73 || h8[1] !== 0x63) throw 'Runtime error: expected the system to be little-endian! (Run with -sSUPPORT_BIG_ENDIAN to bypass)'; +})(); + +if (Module['ENVIRONMENT']) { + throw new Error('Module.ENVIRONMENT has been deprecated. To force the environment, use the ENVIRONMENT compile-time option (for example, -sENVIRONMENT=web or -sENVIRONMENT=node)'); +} + +function legacyModuleProp(prop, newName, incoming=true) { + if (!Object.getOwnPropertyDescriptor(Module, prop)) { + Object.defineProperty(Module, prop, { + configurable: true, + get() { + let extra = incoming ? ' (the initial value can be provided on Module, but after startup the value is only looked for on a local variable of that name)' : ''; + abort(`\`Module.${prop}\` has been replaced by \`${newName}\`` + extra); + + } + }); + } +} + +function consumedModuleProp(prop) { + if (!Object.getOwnPropertyDescriptor(Module, prop)) { + Object.defineProperty(Module, prop, { + configurable: true, + set() { + abort(`Attempt to set \`Module.${prop}\` after it has already been processed. This can happen, for example, when code is injected via '--post-js' rather than '--pre-js'`); + + } + }); + } +} + +function ignoredModuleProp(prop) { + if (Object.getOwnPropertyDescriptor(Module, prop)) { + abort(`\`Module.${prop}\` was supplied but \`${prop}\` not included in INCOMING_MODULE_JS_API`); + } +} + +// forcing the filesystem exports a few things by default +function isExportedByForceFilesystem(name) { + return name === 'FS_createPath' || + name === 'FS_createDataFile' || + name === 'FS_createPreloadedFile' || + name === 'FS_unlink' || + name === 'addRunDependency' || + // The old FS has some functionality that WasmFS lacks. + name === 'FS_createLazyFile' || + name === 'FS_createDevice' || + name === 'removeRunDependency'; +} + +/** + * Intercept access to a global symbol. This enables us to give informative + * warnings/errors when folks attempt to use symbols they did not include in + * their build, or no symbols that no longer exist. + */ +function hookGlobalSymbolAccess(sym, func) { + if (typeof globalThis != 'undefined' && !Object.getOwnPropertyDescriptor(globalThis, sym)) { + Object.defineProperty(globalThis, sym, { + configurable: true, + get() { + func(); + return undefined; + } + }); + } +} + +function missingGlobal(sym, msg) { + hookGlobalSymbolAccess(sym, () => { + warnOnce(`\`${sym}\` is not longer defined by emscripten. ${msg}`); + }); +} + +missingGlobal('buffer', 'Please use HEAP8.buffer or wasmMemory.buffer'); +missingGlobal('asm', 'Please use wasmExports instead'); + +function missingLibrarySymbol(sym) { + hookGlobalSymbolAccess(sym, () => { + // Can't `abort()` here because it would break code that does runtime + // checks. e.g. `if (typeof SDL === 'undefined')`. + var msg = `\`${sym}\` is a library symbol and not included by default; add it to your library.js __deps or to DEFAULT_LIBRARY_FUNCS_TO_INCLUDE on the command line`; + // DEFAULT_LIBRARY_FUNCS_TO_INCLUDE requires the name as it appears in + // library.js, which means $name for a JS name with no prefix, or name + // for a JS name like _name. + var librarySymbol = sym; + if (!librarySymbol.startsWith('_')) { + librarySymbol = '$' + sym; + } + msg += ` (e.g. -sDEFAULT_LIBRARY_FUNCS_TO_INCLUDE='${librarySymbol}')`; + if (isExportedByForceFilesystem(sym)) { + msg += '. Alternatively, forcing filesystem support (-sFORCE_FILESYSTEM) can export this for you'; + } + warnOnce(msg); + }); + + // Any symbol that is not included from the JS library is also (by definition) + // not exported on the Module object. + unexportedRuntimeSymbol(sym); +} + +function unexportedRuntimeSymbol(sym) { + if (!Object.getOwnPropertyDescriptor(Module, sym)) { + Object.defineProperty(Module, sym, { + configurable: true, + get() { + var msg = `'${sym}' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the Emscripten FAQ)`; + if (isExportedByForceFilesystem(sym)) { + msg += '. Alternatively, forcing filesystem support (-sFORCE_FILESYSTEM) can export this for you'; + } + abort(msg); + } + }); + } +} + +var runtimeDebug = true; // Switch to false at runtime to disable logging at the right times + +// Used by XXXXX_DEBUG settings to output debug messages. +function dbg(...args) { + if (!runtimeDebug && typeof runtimeDebug != 'undefined') return; + // TODO(sbc): Make this configurable somehow. Its not always convenient for + // logging to show up as warnings. + console.warn(...args); +} +// end include: runtime_debug.js +// include: memoryprofiler.js +// end include: memoryprofiler.js + + +function updateMemoryViews() { + var b = wasmMemory.buffer; + Module['HEAP8'] = HEAP8 = new Int8Array(b); + Module['HEAP16'] = HEAP16 = new Int16Array(b); + Module['HEAPU8'] = HEAPU8 = new Uint8Array(b); + Module['HEAPU16'] = HEAPU16 = new Uint16Array(b); + Module['HEAP32'] = HEAP32 = new Int32Array(b); + Module['HEAPU32'] = HEAPU32 = new Uint32Array(b); + Module['HEAPF32'] = HEAPF32 = new Float32Array(b); + Module['HEAPF64'] = HEAPF64 = new Float64Array(b); + Module['HEAP64'] = HEAP64 = new BigInt64Array(b); + Module['HEAPU64'] = HEAPU64 = new BigUint64Array(b); +} + +// end include: runtime_shared.js +assert(!Module['STACK_SIZE'], 'STACK_SIZE can no longer be set at runtime. Use -sSTACK_SIZE at link time') + +assert(typeof Int32Array != 'undefined' && typeof Float64Array !== 'undefined' && Int32Array.prototype.subarray != undefined && Int32Array.prototype.set != undefined, + 'JS engine does not provide full typed array support'); + +// If memory is defined in wasm, the user can't provide it, or set INITIAL_MEMORY +assert(!Module['wasmMemory'], 'Use of `wasmMemory` detected. Use -sIMPORTED_MEMORY to define wasmMemory externally'); +assert(!Module['INITIAL_MEMORY'], 'Detected runtime INITIAL_MEMORY setting. Use -sIMPORTED_MEMORY to define wasmMemory dynamically'); + +function preRun() { + if (Module['preRun']) { + if (typeof Module['preRun'] == 'function') Module['preRun'] = [Module['preRun']]; + while (Module['preRun'].length) { + addOnPreRun(Module['preRun'].shift()); + } + } + consumedModuleProp('preRun'); + callRuntimeCallbacks(onPreRuns); +} + +function initRuntime() { + assert(!runtimeInitialized); + runtimeInitialized = true; + + checkStackCookie(); + + if (!Module['noFSInit'] && !FS.initialized) FS.init(); +TTY.init(); + + wasmExports['__wasm_call_ctors'](); + + FS.ignorePermissions = false; +} + +function preMain() { + checkStackCookie(); + +} + +function postRun() { + checkStackCookie(); + + if (Module['postRun']) { + if (typeof Module['postRun'] == 'function') Module['postRun'] = [Module['postRun']]; + while (Module['postRun'].length) { + addOnPostRun(Module['postRun'].shift()); + } + } + consumedModuleProp('postRun'); + + callRuntimeCallbacks(onPostRuns); +} + +// A counter of dependencies for calling run(). If we need to +// do asynchronous work before running, increment this and +// decrement it. Incrementing must happen in a place like +// Module.preRun (used by emcc to add file preloading). +// Note that you can add dependencies in preRun, even though +// it happens right before run - run will be postponed until +// the dependencies are met. +var runDependencies = 0; +var dependenciesFulfilled = null; // overridden to take different actions when all run dependencies are fulfilled +var runDependencyTracking = {}; +var runDependencyWatcher = null; + +function getUniqueRunDependency(id) { + var orig = id; + while (1) { + if (!runDependencyTracking[id]) return id; + id = orig + Math.random(); + } +} + +function addRunDependency(id) { + runDependencies++; + + Module['monitorRunDependencies']?.(runDependencies); + + if (id) { + assert(!runDependencyTracking[id]); + runDependencyTracking[id] = 1; + if (runDependencyWatcher === null && typeof setInterval != 'undefined') { + // Check for missing dependencies every few seconds + runDependencyWatcher = setInterval(() => { + if (ABORT) { + clearInterval(runDependencyWatcher); + runDependencyWatcher = null; + return; + } + var shown = false; + for (var dep in runDependencyTracking) { + if (!shown) { + shown = true; + err('still waiting on run dependencies:'); + } + err(`dependency: ${dep}`); + } + if (shown) { + err('(end of list)'); + } + }, 10000); + } + } else { + err('warning: run dependency added without ID'); + } +} + +function removeRunDependency(id) { + runDependencies--; + + Module['monitorRunDependencies']?.(runDependencies); + + if (id) { + assert(runDependencyTracking[id]); + delete runDependencyTracking[id]; + } else { + err('warning: run dependency removed without ID'); + } + if (runDependencies == 0) { + if (runDependencyWatcher !== null) { + clearInterval(runDependencyWatcher); + runDependencyWatcher = null; + } + if (dependenciesFulfilled) { + var callback = dependenciesFulfilled; + dependenciesFulfilled = null; + callback(); // can add another dependenciesFulfilled + } + } +} + +/** @param {string|number=} what */ +function abort(what) { + Module['onAbort']?.(what); + + what = 'Aborted(' + what + ')'; + // TODO(sbc): Should we remove printing and leave it up to whoever + // catches the exception? + err(what); + + ABORT = true; + + // Use a wasm runtime error, because a JS error might be seen as a foreign + // exception, which means we'd run destructors on it. We need the error to + // simply make the program stop. + // FIXME This approach does not work in Wasm EH because it currently does not assume + // all RuntimeErrors are from traps; it decides whether a RuntimeError is from + // a trap or not based on a hidden field within the object. So at the moment + // we don't have a way of throwing a wasm trap from JS. TODO Make a JS API that + // allows this in the wasm spec. + + // Suppress closure compiler warning here. Closure compiler's builtin extern + // definition for WebAssembly.RuntimeError claims it takes no arguments even + // though it can. + // TODO(https://github.com/google/closure-compiler/pull/3913): Remove if/when upstream closure gets fixed. + /** @suppress {checkTypes} */ + var e = new WebAssembly.RuntimeError(what); + + // Throw the error whether or not MODULARIZE is set because abort is used + // in code paths apart from instantiation where an exception is expected + // to be thrown when abort is called. + throw e; +} + +function createExportWrapper(name, nargs) { + return (...args) => { + assert(runtimeInitialized, `native function \`${name}\` called before runtime initialization`); + var f = wasmExports[name]; + assert(f, `exported native function \`${name}\` not found`); + // Only assert for too many arguments. Too few can be valid since the missing arguments will be zero filled. + assert(args.length <= nargs, `native function \`${name}\` called with ${args.length} args but expects ${nargs}`); + return f(...args); + }; +} + +var wasmBinaryFile; + +function findWasmBinary() { + return locateFile('zip_read_fuzzer.wasm'); +} + +function getBinarySync(file) { + if (file == wasmBinaryFile && wasmBinary) { + return new Uint8Array(wasmBinary); + } + if (readBinary) { + return readBinary(file); + } + throw 'both async and sync fetching of the wasm failed'; +} + +async function getWasmBinary(binaryFile) { + // If we don't have the binary yet, load it asynchronously using readAsync. + if (!wasmBinary) { + // Fetch the binary using readAsync + try { + var response = await readAsync(binaryFile); + return new Uint8Array(response); + } catch { + // Fall back to getBinarySync below; + } + } + + // Otherwise, getBinarySync should be able to get it synchronously + return getBinarySync(binaryFile); +} + +async function instantiateArrayBuffer(binaryFile, imports) { + try { + var binary = await getWasmBinary(binaryFile); + var instance = await WebAssembly.instantiate(binary, imports); + return instance; + } catch (reason) { + err(`failed to asynchronously prepare wasm: ${reason}`); + + // Warn on some common problems. + if (isFileURI(wasmBinaryFile)) { + err(`warning: Loading from a file URI (${wasmBinaryFile}) is not supported in most browsers. See https://emscripten.org/docs/getting_started/FAQ.html#how-do-i-run-a-local-webserver-for-testing-why-does-my-program-stall-in-downloading-or-preparing`); + } + abort(reason); + } +} + +async function instantiateAsync(binary, binaryFile, imports) { + if (!binary && typeof WebAssembly.instantiateStreaming == 'function' + // Don't use streaming for file:// delivered objects in a webview, fetch them synchronously. + && !isFileURI(binaryFile) + // Avoid instantiateStreaming() on Node.js environment for now, as while + // Node.js v18.1.0 implements it, it does not have a full fetch() + // implementation yet. + // + // Reference: + // https://github.com/emscripten-core/emscripten/pull/16917 + && !ENVIRONMENT_IS_NODE + ) { + try { + var response = fetch(binaryFile, { credentials: 'same-origin' }); + var instantiationResult = await WebAssembly.instantiateStreaming(response, imports); + return instantiationResult; + } catch (reason) { + // We expect the most common failure cause to be a bad MIME type for the binary, + // in which case falling back to ArrayBuffer instantiation should work. + err(`wasm streaming compile failed: ${reason}`); + err('falling back to ArrayBuffer instantiation'); + // fall back of instantiateArrayBuffer below + }; + } + return instantiateArrayBuffer(binaryFile, imports); +} + +function getWasmImports() { + // prepare imports + return { + 'env': wasmImports, + 'wasi_snapshot_preview1': wasmImports, + } +} + +// Create the wasm instance. +// Receives the wasm imports, returns the exports. +async function createWasm() { + // Load the wasm module and create an instance of using native support in the JS engine. + // handle a generated wasm instance, receiving its exports and + // performing other necessary setup + /** @param {WebAssembly.Module=} module*/ + function receiveInstance(instance, module) { + wasmExports = instance.exports; + + + + wasmMemory = wasmExports['memory']; + + assert(wasmMemory, 'memory not found in wasm exports'); + updateMemoryViews(); + + removeRunDependency('wasm-instantiate'); + return wasmExports; + } + // wait for the pthread pool (if any) + addRunDependency('wasm-instantiate'); + + // Prefer streaming instantiation if available. + // Async compilation can be confusing when an error on the page overwrites Module + // (for example, if the order of elements is wrong, and the one defining Module is + // later), so we save Module and check it later. + var trueModule = Module; + function receiveInstantiationResult(result) { + // 'result' is a ResultObject object which has both the module and instance. + // receiveInstance() will swap in the exports (to Module.asm) so they can be called + assert(Module === trueModule, 'the Module object should not be replaced during async compilation - perhaps the order of HTML elements is wrong?'); + trueModule = null; + // TODO: Due to Closure regression https://github.com/google/closure-compiler/issues/3193, the above line no longer optimizes out down to the following line. + // When the regression is fixed, can restore the above PTHREADS-enabled path. + return receiveInstance(result['instance']); + } + + var info = getWasmImports(); + + // User shell pages can write their own Module.instantiateWasm = function(imports, successCallback) callback + // to manually instantiate the Wasm module themselves. This allows pages to + // run the instantiation parallel to any other async startup actions they are + // performing. + // Also pthreads and wasm workers initialize the wasm instance through this + // path. + if (Module['instantiateWasm']) { + return new Promise((resolve, reject) => { + try { + Module['instantiateWasm'](info, (mod, inst) => { + receiveInstance(mod, inst); + resolve(mod.exports); + }); + } catch(e) { + err(`Module.instantiateWasm callback failed with error: ${e}`); + reject(e); + } + }); + } + + wasmBinaryFile ??= findWasmBinary(); + var result = await instantiateAsync(wasmBinary, wasmBinaryFile, info); + var exports = receiveInstantiationResult(result); + return exports; +} + +// end include: preamble.js + +// Begin JS library code + + + class ExitStatus { + name = 'ExitStatus'; + constructor(status) { + this.message = `Program terminated with exit(${status})`; + this.status = status; + } + } + + var callRuntimeCallbacks = (callbacks) => { + while (callbacks.length > 0) { + // Pass the module as the first argument. + callbacks.shift()(Module); + } + }; + var onPostRuns = []; + var addOnPostRun = (cb) => onPostRuns.unshift(cb); + + var onPreRuns = []; + var addOnPreRun = (cb) => onPreRuns.unshift(cb); + + + + /** + * @param {number} ptr + * @param {string} type + */ + function getValue(ptr, type = 'i8') { + if (type.endsWith('*')) type = '*'; + switch (type) { + case 'i1': return HEAP8[ptr]; + case 'i8': return HEAP8[ptr]; + case 'i16': return HEAP16[((ptr)>>1)]; + case 'i32': return HEAP32[((ptr)>>2)]; + case 'i64': return HEAP64[((ptr)>>3)]; + case 'float': return HEAPF32[((ptr)>>2)]; + case 'double': return HEAPF64[((ptr)>>3)]; + case '*': return HEAPU32[((ptr)>>2)]; + default: abort(`invalid type for getValue: ${type}`); + } + } + + var noExitRuntime = Module['noExitRuntime'] || true; + + var ptrToString = (ptr) => { + assert(typeof ptr === 'number'); + // With CAN_ADDRESS_2GB or MEMORY64, pointers are already unsigned. + ptr >>>= 0; + return '0x' + ptr.toString(16).padStart(8, '0'); + }; + + + /** + * @param {number} ptr + * @param {number} value + * @param {string} type + */ + function setValue(ptr, value, type = 'i8') { + if (type.endsWith('*')) type = '*'; + switch (type) { + case 'i1': HEAP8[ptr] = value; break; + case 'i8': HEAP8[ptr] = value; break; + case 'i16': HEAP16[((ptr)>>1)] = value; break; + case 'i32': HEAP32[((ptr)>>2)] = value; break; + case 'i64': HEAP64[((ptr)>>3)] = BigInt(value); break; + case 'float': HEAPF32[((ptr)>>2)] = value; break; + case 'double': HEAPF64[((ptr)>>3)] = value; break; + case '*': HEAPU32[((ptr)>>2)] = value; break; + default: abort(`invalid type for setValue: ${type}`); + } + } + + var stackRestore = (val) => __emscripten_stack_restore(val); + + var stackSave = () => _emscripten_stack_get_current(); + + var warnOnce = (text) => { + warnOnce.shown ||= {}; + if (!warnOnce.shown[text]) { + warnOnce.shown[text] = 1; + if (ENVIRONMENT_IS_NODE) text = 'warning: ' + text; + err(text); + } + }; + + /** @suppress {duplicate } */ + var syscallGetVarargI = () => { + assert(SYSCALLS.varargs != undefined); + // the `+` prepended here is necessary to convince the JSCompiler that varargs is indeed a number. + var ret = HEAP32[((+SYSCALLS.varargs)>>2)]; + SYSCALLS.varargs += 4; + return ret; + }; + var syscallGetVarargP = syscallGetVarargI; + + + var PATH = { + isAbs:(path) => path.charAt(0) === '/', + splitPath:(filename) => { + var splitPathRe = /^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/; + return splitPathRe.exec(filename).slice(1); + }, + normalizeArray:(parts, allowAboveRoot) => { + // if the path tries to go above the root, `up` ends up > 0 + var up = 0; + for (var i = parts.length - 1; i >= 0; i--) { + var last = parts[i]; + if (last === '.') { + parts.splice(i, 1); + } else if (last === '..') { + parts.splice(i, 1); + up++; + } else if (up) { + parts.splice(i, 1); + up--; + } + } + // if the path is allowed to go above the root, restore leading ..s + if (allowAboveRoot) { + for (; up; up--) { + parts.unshift('..'); + } + } + return parts; + }, + normalize:(path) => { + var isAbsolute = PATH.isAbs(path), + trailingSlash = path.slice(-1) === '/'; + // Normalize the path + path = PATH.normalizeArray(path.split('/').filter((p) => !!p), !isAbsolute).join('/'); + if (!path && !isAbsolute) { + path = '.'; + } + if (path && trailingSlash) { + path += '/'; + } + return (isAbsolute ? '/' : '') + path; + }, + dirname:(path) => { + var result = PATH.splitPath(path), + root = result[0], + dir = result[1]; + if (!root && !dir) { + // No dirname whatsoever + return '.'; + } + if (dir) { + // It has a dirname, strip trailing slash + dir = dir.slice(0, -1); + } + return root + dir; + }, + basename:(path) => path && path.match(/([^\/]+|\/)\/*$/)[1], + join:(...paths) => PATH.normalize(paths.join('/')), + join2:(l, r) => PATH.normalize(l + '/' + r), + }; + + var initRandomFill = () => { + // This block is not needed on v19+ since crypto.getRandomValues is builtin + if (ENVIRONMENT_IS_NODE) { + var nodeCrypto = require('crypto'); + return (view) => nodeCrypto.randomFillSync(view); + } + + return (view) => crypto.getRandomValues(view); + }; + var randomFill = (view) => { + // Lazily init on the first invocation. + (randomFill = initRandomFill())(view); + }; + + + + var PATH_FS = { + resolve:(...args) => { + var resolvedPath = '', + resolvedAbsolute = false; + for (var i = args.length - 1; i >= -1 && !resolvedAbsolute; i--) { + var path = (i >= 0) ? args[i] : FS.cwd(); + // Skip empty and invalid entries + if (typeof path != 'string') { + throw new TypeError('Arguments to path.resolve must be strings'); + } else if (!path) { + return ''; // an invalid portion invalidates the whole thing + } + resolvedPath = path + '/' + resolvedPath; + resolvedAbsolute = PATH.isAbs(path); + } + // At this point the path should be resolved to a full absolute path, but + // handle relative paths to be safe (might happen when process.cwd() fails) + resolvedPath = PATH.normalizeArray(resolvedPath.split('/').filter((p) => !!p), !resolvedAbsolute).join('/'); + return ((resolvedAbsolute ? '/' : '') + resolvedPath) || '.'; + }, + relative:(from, to) => { + from = PATH_FS.resolve(from).slice(1); + to = PATH_FS.resolve(to).slice(1); + function trim(arr) { + var start = 0; + for (; start < arr.length; start++) { + if (arr[start] !== '') break; + } + var end = arr.length - 1; + for (; end >= 0; end--) { + if (arr[end] !== '') break; + } + if (start > end) return []; + return arr.slice(start, end - start + 1); + } + var fromParts = trim(from.split('/')); + var toParts = trim(to.split('/')); + var length = Math.min(fromParts.length, toParts.length); + var samePartsLength = length; + for (var i = 0; i < length; i++) { + if (fromParts[i] !== toParts[i]) { + samePartsLength = i; + break; + } + } + var outputParts = []; + for (var i = samePartsLength; i < fromParts.length; i++) { + outputParts.push('..'); + } + outputParts = outputParts.concat(toParts.slice(samePartsLength)); + return outputParts.join('/'); + }, + }; + + + var UTF8Decoder = typeof TextDecoder != 'undefined' ? new TextDecoder() : undefined; + + /** + * Given a pointer 'idx' to a null-terminated UTF8-encoded string in the given + * array that contains uint8 values, returns a copy of that string as a + * Javascript String object. + * heapOrArray is either a regular array, or a JavaScript typed array view. + * @param {number=} idx + * @param {number=} maxBytesToRead + * @return {string} + */ + var UTF8ArrayToString = (heapOrArray, idx = 0, maxBytesToRead = NaN) => { + var endIdx = idx + maxBytesToRead; + var endPtr = idx; + // TextDecoder needs to know the byte length in advance, it doesn't stop on + // null terminator by itself. Also, use the length info to avoid running tiny + // strings through TextDecoder, since .subarray() allocates garbage. + // (As a tiny code save trick, compare endPtr against endIdx using a negation, + // so that undefined/NaN means Infinity) + while (heapOrArray[endPtr] && !(endPtr >= endIdx)) ++endPtr; + + if (endPtr - idx > 16 && heapOrArray.buffer && UTF8Decoder) { + return UTF8Decoder.decode(heapOrArray.subarray(idx, endPtr)); + } + var str = ''; + // If building with TextDecoder, we have already computed the string length + // above, so test loop end condition against that + while (idx < endPtr) { + // For UTF8 byte structure, see: + // http://en.wikipedia.org/wiki/UTF-8#Description + // https://www.ietf.org/rfc/rfc2279.txt + // https://tools.ietf.org/html/rfc3629 + var u0 = heapOrArray[idx++]; + if (!(u0 & 0x80)) { str += String.fromCharCode(u0); continue; } + var u1 = heapOrArray[idx++] & 63; + if ((u0 & 0xE0) == 0xC0) { str += String.fromCharCode(((u0 & 31) << 6) | u1); continue; } + var u2 = heapOrArray[idx++] & 63; + if ((u0 & 0xF0) == 0xE0) { + u0 = ((u0 & 15) << 12) | (u1 << 6) | u2; + } else { + if ((u0 & 0xF8) != 0xF0) warnOnce('Invalid UTF-8 leading byte ' + ptrToString(u0) + ' encountered when deserializing a UTF-8 string in wasm memory to a JS string!'); + u0 = ((u0 & 7) << 18) | (u1 << 12) | (u2 << 6) | (heapOrArray[idx++] & 63); + } + + if (u0 < 0x10000) { + str += String.fromCharCode(u0); + } else { + var ch = u0 - 0x10000; + str += String.fromCharCode(0xD800 | (ch >> 10), 0xDC00 | (ch & 0x3FF)); + } + } + return str; + }; + + var FS_stdin_getChar_buffer = []; + + var lengthBytesUTF8 = (str) => { + var len = 0; + for (var i = 0; i < str.length; ++i) { + // Gotcha: charCodeAt returns a 16-bit word that is a UTF-16 encoded code + // unit, not a Unicode code point of the character! So decode + // UTF16->UTF32->UTF8. + // See http://unicode.org/faq/utf_bom.html#utf16-3 + var c = str.charCodeAt(i); // possibly a lead surrogate + if (c <= 0x7F) { + len++; + } else if (c <= 0x7FF) { + len += 2; + } else if (c >= 0xD800 && c <= 0xDFFF) { + len += 4; ++i; + } else { + len += 3; + } + } + return len; + }; + + var stringToUTF8Array = (str, heap, outIdx, maxBytesToWrite) => { + assert(typeof str === 'string', `stringToUTF8Array expects a string (got ${typeof str})`); + // Parameter maxBytesToWrite is not optional. Negative values, 0, null, + // undefined and false each don't write out any bytes. + if (!(maxBytesToWrite > 0)) + return 0; + + var startIdx = outIdx; + var endIdx = outIdx + maxBytesToWrite - 1; // -1 for string null terminator. + for (var i = 0; i < str.length; ++i) { + // Gotcha: charCodeAt returns a 16-bit word that is a UTF-16 encoded code + // unit, not a Unicode code point of the character! So decode + // UTF16->UTF32->UTF8. + // See http://unicode.org/faq/utf_bom.html#utf16-3 + // For UTF8 byte structure, see http://en.wikipedia.org/wiki/UTF-8#Description + // and https://www.ietf.org/rfc/rfc2279.txt + // and https://tools.ietf.org/html/rfc3629 + var u = str.charCodeAt(i); // possibly a lead surrogate + if (u >= 0xD800 && u <= 0xDFFF) { + var u1 = str.charCodeAt(++i); + u = 0x10000 + ((u & 0x3FF) << 10) | (u1 & 0x3FF); + } + if (u <= 0x7F) { + if (outIdx >= endIdx) break; + heap[outIdx++] = u; + } else if (u <= 0x7FF) { + if (outIdx + 1 >= endIdx) break; + heap[outIdx++] = 0xC0 | (u >> 6); + heap[outIdx++] = 0x80 | (u & 63); + } else if (u <= 0xFFFF) { + if (outIdx + 2 >= endIdx) break; + heap[outIdx++] = 0xE0 | (u >> 12); + heap[outIdx++] = 0x80 | ((u >> 6) & 63); + heap[outIdx++] = 0x80 | (u & 63); + } else { + if (outIdx + 3 >= endIdx) break; + if (u > 0x10FFFF) warnOnce('Invalid Unicode code point ' + ptrToString(u) + ' encountered when serializing a JS string to a UTF-8 string in wasm memory! (Valid unicode code points should be in range 0-0x10FFFF).'); + heap[outIdx++] = 0xF0 | (u >> 18); + heap[outIdx++] = 0x80 | ((u >> 12) & 63); + heap[outIdx++] = 0x80 | ((u >> 6) & 63); + heap[outIdx++] = 0x80 | (u & 63); + } + } + // Null-terminate the pointer to the buffer. + heap[outIdx] = 0; + return outIdx - startIdx; + }; + /** @type {function(string, boolean=, number=)} */ + var intArrayFromString = (stringy, dontAddNull, length) => { + var len = length > 0 ? length : lengthBytesUTF8(stringy)+1; + var u8array = new Array(len); + var numBytesWritten = stringToUTF8Array(stringy, u8array, 0, u8array.length); + if (dontAddNull) u8array.length = numBytesWritten; + return u8array; + }; + var FS_stdin_getChar = () => { + if (!FS_stdin_getChar_buffer.length) { + var result = null; + if (ENVIRONMENT_IS_NODE) { + // we will read data by chunks of BUFSIZE + var BUFSIZE = 256; + var buf = Buffer.alloc(BUFSIZE); + var bytesRead = 0; + + // For some reason we must suppress a closure warning here, even though + // fd definitely exists on process.stdin, and is even the proper way to + // get the fd of stdin, + // https://github.com/nodejs/help/issues/2136#issuecomment-523649904 + // This started to happen after moving this logic out of library_tty.js, + // so it is related to the surrounding code in some unclear manner. + /** @suppress {missingProperties} */ + var fd = process.stdin.fd; + + try { + bytesRead = fs.readSync(fd, buf, 0, BUFSIZE); + } catch(e) { + // Cross-platform differences: on Windows, reading EOF throws an + // exception, but on other OSes, reading EOF returns 0. Uniformize + // behavior by treating the EOF exception to return 0. + if (e.toString().includes('EOF')) bytesRead = 0; + else throw e; + } + + if (bytesRead > 0) { + result = buf.slice(0, bytesRead).toString('utf-8'); + } + } else + if (typeof window != 'undefined' && + typeof window.prompt == 'function') { + // Browser. + result = window.prompt('Input: '); // returns null on cancel + if (result !== null) { + result += '\n'; + } + } else + {} + if (!result) { + return null; + } + FS_stdin_getChar_buffer = intArrayFromString(result, true); + } + return FS_stdin_getChar_buffer.shift(); + }; + var TTY = { + ttys:[], + init() { + // https://github.com/emscripten-core/emscripten/pull/1555 + // if (ENVIRONMENT_IS_NODE) { + // // currently, FS.init does not distinguish if process.stdin is a file or TTY + // // device, it always assumes it's a TTY device. because of this, we're forcing + // // process.stdin to UTF8 encoding to at least make stdin reading compatible + // // with text files until FS.init can be refactored. + // process.stdin.setEncoding('utf8'); + // } + }, + shutdown() { + // https://github.com/emscripten-core/emscripten/pull/1555 + // if (ENVIRONMENT_IS_NODE) { + // // inolen: any idea as to why node -e 'process.stdin.read()' wouldn't exit immediately (with process.stdin being a tty)? + // // isaacs: because now it's reading from the stream, you've expressed interest in it, so that read() kicks off a _read() which creates a ReadReq operation + // // inolen: I thought read() in that case was a synchronous operation that just grabbed some amount of buffered data if it exists? + // // isaacs: it is. but it also triggers a _read() call, which calls readStart() on the handle + // // isaacs: do process.stdin.pause() and i'd think it'd probably close the pending call + // process.stdin.pause(); + // } + }, + register(dev, ops) { + TTY.ttys[dev] = { input: [], output: [], ops: ops }; + FS.registerDevice(dev, TTY.stream_ops); + }, + stream_ops:{ + open(stream) { + var tty = TTY.ttys[stream.node.rdev]; + if (!tty) { + throw new FS.ErrnoError(43); + } + stream.tty = tty; + stream.seekable = false; + }, + close(stream) { + // flush any pending line data + stream.tty.ops.fsync(stream.tty); + }, + fsync(stream) { + stream.tty.ops.fsync(stream.tty); + }, + read(stream, buffer, offset, length, pos /* ignored */) { + if (!stream.tty || !stream.tty.ops.get_char) { + throw new FS.ErrnoError(60); + } + var bytesRead = 0; + for (var i = 0; i < length; i++) { + var result; + try { + result = stream.tty.ops.get_char(stream.tty); + } catch (e) { + throw new FS.ErrnoError(29); + } + if (result === undefined && bytesRead === 0) { + throw new FS.ErrnoError(6); + } + if (result === null || result === undefined) break; + bytesRead++; + buffer[offset+i] = result; + } + if (bytesRead) { + stream.node.atime = Date.now(); + } + return bytesRead; + }, + write(stream, buffer, offset, length, pos) { + if (!stream.tty || !stream.tty.ops.put_char) { + throw new FS.ErrnoError(60); + } + try { + for (var i = 0; i < length; i++) { + stream.tty.ops.put_char(stream.tty, buffer[offset+i]); + } + } catch (e) { + throw new FS.ErrnoError(29); + } + if (length) { + stream.node.mtime = stream.node.ctime = Date.now(); + } + return i; + }, + }, + default_tty_ops:{ + get_char(tty) { + return FS_stdin_getChar(); + }, + put_char(tty, val) { + if (val === null || val === 10) { + out(UTF8ArrayToString(tty.output)); + tty.output = []; + } else { + if (val != 0) tty.output.push(val); // val == 0 would cut text output off in the middle. + } + }, + fsync(tty) { + if (tty.output?.length > 0) { + out(UTF8ArrayToString(tty.output)); + tty.output = []; + } + }, + ioctl_tcgets(tty) { + // typical setting + return { + c_iflag: 25856, + c_oflag: 5, + c_cflag: 191, + c_lflag: 35387, + c_cc: [ + 0x03, 0x1c, 0x7f, 0x15, 0x04, 0x00, 0x01, 0x00, 0x11, 0x13, 0x1a, 0x00, + 0x12, 0x0f, 0x17, 0x16, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + ] + }; + }, + ioctl_tcsets(tty, optional_actions, data) { + // currently just ignore + return 0; + }, + ioctl_tiocgwinsz(tty) { + return [24, 80]; + }, + }, + default_tty1_ops:{ + put_char(tty, val) { + if (val === null || val === 10) { + err(UTF8ArrayToString(tty.output)); + tty.output = []; + } else { + if (val != 0) tty.output.push(val); + } + }, + fsync(tty) { + if (tty.output?.length > 0) { + err(UTF8ArrayToString(tty.output)); + tty.output = []; + } + }, + }, + }; + + + var mmapAlloc = (size) => { + abort('internal error: mmapAlloc called but `emscripten_builtin_memalign` native symbol not exported'); + }; + var MEMFS = { + ops_table:null, + mount(mount) { + return MEMFS.createNode(null, '/', 16895, 0); + }, + createNode(parent, name, mode, dev) { + if (FS.isBlkdev(mode) || FS.isFIFO(mode)) { + // no supported + throw new FS.ErrnoError(63); + } + MEMFS.ops_table ||= { + dir: { + node: { + getattr: MEMFS.node_ops.getattr, + setattr: MEMFS.node_ops.setattr, + lookup: MEMFS.node_ops.lookup, + mknod: MEMFS.node_ops.mknod, + rename: MEMFS.node_ops.rename, + unlink: MEMFS.node_ops.unlink, + rmdir: MEMFS.node_ops.rmdir, + readdir: MEMFS.node_ops.readdir, + symlink: MEMFS.node_ops.symlink + }, + stream: { + llseek: MEMFS.stream_ops.llseek + } + }, + file: { + node: { + getattr: MEMFS.node_ops.getattr, + setattr: MEMFS.node_ops.setattr + }, + stream: { + llseek: MEMFS.stream_ops.llseek, + read: MEMFS.stream_ops.read, + write: MEMFS.stream_ops.write, + mmap: MEMFS.stream_ops.mmap, + msync: MEMFS.stream_ops.msync + } + }, + link: { + node: { + getattr: MEMFS.node_ops.getattr, + setattr: MEMFS.node_ops.setattr, + readlink: MEMFS.node_ops.readlink + }, + stream: {} + }, + chrdev: { + node: { + getattr: MEMFS.node_ops.getattr, + setattr: MEMFS.node_ops.setattr + }, + stream: FS.chrdev_stream_ops + } + }; + var node = FS.createNode(parent, name, mode, dev); + if (FS.isDir(node.mode)) { + node.node_ops = MEMFS.ops_table.dir.node; + node.stream_ops = MEMFS.ops_table.dir.stream; + node.contents = {}; + } else if (FS.isFile(node.mode)) { + node.node_ops = MEMFS.ops_table.file.node; + node.stream_ops = MEMFS.ops_table.file.stream; + node.usedBytes = 0; // The actual number of bytes used in the typed array, as opposed to contents.length which gives the whole capacity. + // When the byte data of the file is populated, this will point to either a typed array, or a normal JS array. Typed arrays are preferred + // for performance, and used by default. However, typed arrays are not resizable like normal JS arrays are, so there is a small disk size + // penalty involved for appending file writes that continuously grow a file similar to std::vector capacity vs used -scheme. + node.contents = null; + } else if (FS.isLink(node.mode)) { + node.node_ops = MEMFS.ops_table.link.node; + node.stream_ops = MEMFS.ops_table.link.stream; + } else if (FS.isChrdev(node.mode)) { + node.node_ops = MEMFS.ops_table.chrdev.node; + node.stream_ops = MEMFS.ops_table.chrdev.stream; + } + node.atime = node.mtime = node.ctime = Date.now(); + // add the new node to the parent + if (parent) { + parent.contents[name] = node; + parent.atime = parent.mtime = parent.ctime = node.atime; + } + return node; + }, + getFileDataAsTypedArray(node) { + if (!node.contents) return new Uint8Array(0); + if (node.contents.subarray) return node.contents.subarray(0, node.usedBytes); // Make sure to not return excess unused bytes. + return new Uint8Array(node.contents); + }, + expandFileStorage(node, newCapacity) { + var prevCapacity = node.contents ? node.contents.length : 0; + if (prevCapacity >= newCapacity) return; // No need to expand, the storage was already large enough. + // Don't expand strictly to the given requested limit if it's only a very small increase, but instead geometrically grow capacity. + // For small filesizes (<1MB), perform size*2 geometric increase, but for large sizes, do a much more conservative size*1.125 increase to + // avoid overshooting the allocation cap by a very large margin. + var CAPACITY_DOUBLING_MAX = 1024 * 1024; + newCapacity = Math.max(newCapacity, (prevCapacity * (prevCapacity < CAPACITY_DOUBLING_MAX ? 2.0 : 1.125)) >>> 0); + if (prevCapacity != 0) newCapacity = Math.max(newCapacity, 256); // At minimum allocate 256b for each file when expanding. + var oldContents = node.contents; + node.contents = new Uint8Array(newCapacity); // Allocate new storage. + if (node.usedBytes > 0) node.contents.set(oldContents.subarray(0, node.usedBytes), 0); // Copy old data over to the new storage. + }, + resizeFileStorage(node, newSize) { + if (node.usedBytes == newSize) return; + if (newSize == 0) { + node.contents = null; // Fully decommit when requesting a resize to zero. + node.usedBytes = 0; + } else { + var oldContents = node.contents; + node.contents = new Uint8Array(newSize); // Allocate new storage. + if (oldContents) { + node.contents.set(oldContents.subarray(0, Math.min(newSize, node.usedBytes))); // Copy old data over to the new storage. + } + node.usedBytes = newSize; + } + }, + node_ops:{ + getattr(node) { + var attr = {}; + // device numbers reuse inode numbers. + attr.dev = FS.isChrdev(node.mode) ? node.id : 1; + attr.ino = node.id; + attr.mode = node.mode; + attr.nlink = 1; + attr.uid = 0; + attr.gid = 0; + attr.rdev = node.rdev; + if (FS.isDir(node.mode)) { + attr.size = 4096; + } else if (FS.isFile(node.mode)) { + attr.size = node.usedBytes; + } else if (FS.isLink(node.mode)) { + attr.size = node.link.length; + } else { + attr.size = 0; + } + attr.atime = new Date(node.atime); + attr.mtime = new Date(node.mtime); + attr.ctime = new Date(node.ctime); + // NOTE: In our implementation, st_blocks = Math.ceil(st_size/st_blksize), + // but this is not required by the standard. + attr.blksize = 4096; + attr.blocks = Math.ceil(attr.size / attr.blksize); + return attr; + }, + setattr(node, attr) { + for (const key of ["mode", "atime", "mtime", "ctime"]) { + if (attr[key] != null) { + node[key] = attr[key]; + } + } + if (attr.size !== undefined) { + MEMFS.resizeFileStorage(node, attr.size); + } + }, + lookup(parent, name) { + throw new FS.ErrnoError(44); + }, + mknod(parent, name, mode, dev) { + return MEMFS.createNode(parent, name, mode, dev); + }, + rename(old_node, new_dir, new_name) { + var new_node; + try { + new_node = FS.lookupNode(new_dir, new_name); + } catch (e) {} + if (new_node) { + if (FS.isDir(old_node.mode)) { + // if we're overwriting a directory at new_name, make sure it's empty. + for (var i in new_node.contents) { + throw new FS.ErrnoError(55); + } + } + FS.hashRemoveNode(new_node); + } + // do the internal rewiring + delete old_node.parent.contents[old_node.name]; + new_dir.contents[new_name] = old_node; + old_node.name = new_name; + new_dir.ctime = new_dir.mtime = old_node.parent.ctime = old_node.parent.mtime = Date.now(); + }, + unlink(parent, name) { + delete parent.contents[name]; + parent.ctime = parent.mtime = Date.now(); + }, + rmdir(parent, name) { + var node = FS.lookupNode(parent, name); + for (var i in node.contents) { + throw new FS.ErrnoError(55); + } + delete parent.contents[name]; + parent.ctime = parent.mtime = Date.now(); + }, + readdir(node) { + return ['.', '..', ...Object.keys(node.contents)]; + }, + symlink(parent, newname, oldpath) { + var node = MEMFS.createNode(parent, newname, 0o777 | 40960, 0); + node.link = oldpath; + return node; + }, + readlink(node) { + if (!FS.isLink(node.mode)) { + throw new FS.ErrnoError(28); + } + return node.link; + }, + }, + stream_ops:{ + read(stream, buffer, offset, length, position) { + var contents = stream.node.contents; + if (position >= stream.node.usedBytes) return 0; + var size = Math.min(stream.node.usedBytes - position, length); + assert(size >= 0); + if (size > 8 && contents.subarray) { // non-trivial, and typed array + buffer.set(contents.subarray(position, position + size), offset); + } else { + for (var i = 0; i < size; i++) buffer[offset + i] = contents[position + i]; + } + return size; + }, + write(stream, buffer, offset, length, position, canOwn) { + // The data buffer should be a typed array view + assert(!(buffer instanceof ArrayBuffer)); + + if (!length) return 0; + var node = stream.node; + node.mtime = node.ctime = Date.now(); + + if (buffer.subarray && (!node.contents || node.contents.subarray)) { // This write is from a typed array to a typed array? + if (canOwn) { + assert(position === 0, 'canOwn must imply no weird position inside the file'); + node.contents = buffer.subarray(offset, offset + length); + node.usedBytes = length; + return length; + } else if (node.usedBytes === 0 && position === 0) { // If this is a simple first write to an empty file, do a fast set since we don't need to care about old data. + node.contents = buffer.slice(offset, offset + length); + node.usedBytes = length; + return length; + } else if (position + length <= node.usedBytes) { // Writing to an already allocated and used subrange of the file? + node.contents.set(buffer.subarray(offset, offset + length), position); + return length; + } + } + + // Appending to an existing file and we need to reallocate, or source data did not come as a typed array. + MEMFS.expandFileStorage(node, position+length); + if (node.contents.subarray && buffer.subarray) { + // Use typed array write which is available. + node.contents.set(buffer.subarray(offset, offset + length), position); + } else { + for (var i = 0; i < length; i++) { + node.contents[position + i] = buffer[offset + i]; // Or fall back to manual write if not. + } + } + node.usedBytes = Math.max(node.usedBytes, position + length); + return length; + }, + llseek(stream, offset, whence) { + var position = offset; + if (whence === 1) { + position += stream.position; + } else if (whence === 2) { + if (FS.isFile(stream.node.mode)) { + position += stream.node.usedBytes; + } + } + if (position < 0) { + throw new FS.ErrnoError(28); + } + return position; + }, + mmap(stream, length, position, prot, flags) { + if (!FS.isFile(stream.node.mode)) { + throw new FS.ErrnoError(43); + } + var ptr; + var allocated; + var contents = stream.node.contents; + // Only make a new copy when MAP_PRIVATE is specified. + if (!(flags & 2) && contents && contents.buffer === HEAP8.buffer) { + // We can't emulate MAP_SHARED when the file is not backed by the + // buffer we're mapping to (e.g. the HEAP buffer). + allocated = false; + ptr = contents.byteOffset; + } else { + allocated = true; + ptr = mmapAlloc(length); + if (!ptr) { + throw new FS.ErrnoError(48); + } + if (contents) { + // Try to avoid unnecessary slices. + if (position > 0 || position + length < contents.length) { + if (contents.subarray) { + contents = contents.subarray(position, position + length); + } else { + contents = Array.prototype.slice.call(contents, position, position + length); + } + } + HEAP8.set(contents, ptr); + } + } + return { ptr, allocated }; + }, + msync(stream, buffer, offset, length, mmapFlags) { + MEMFS.stream_ops.write(stream, buffer, 0, length, offset, false); + // should we check if bytesWritten and length are the same? + return 0; + }, + }, + }; + + var asyncLoad = async (url) => { + var arrayBuffer = await readAsync(url); + assert(arrayBuffer, `Loading data file "${url}" failed (no arrayBuffer).`); + return new Uint8Array(arrayBuffer); + }; + + + var FS_createDataFile = (parent, name, fileData, canRead, canWrite, canOwn) => { + FS.createDataFile(parent, name, fileData, canRead, canWrite, canOwn); + }; + + var preloadPlugins = Module['preloadPlugins'] || []; + var FS_handledByPreloadPlugin = (byteArray, fullname, finish, onerror) => { + // Ensure plugins are ready. + if (typeof Browser != 'undefined') Browser.init(); + + var handled = false; + preloadPlugins.forEach((plugin) => { + if (handled) return; + if (plugin['canHandle'](fullname)) { + plugin['handle'](byteArray, fullname, finish, onerror); + handled = true; + } + }); + return handled; + }; + var FS_createPreloadedFile = (parent, name, url, canRead, canWrite, onload, onerror, dontCreateFile, canOwn, preFinish) => { + // TODO we should allow people to just pass in a complete filename instead + // of parent and name being that we just join them anyways + var fullname = name ? PATH_FS.resolve(PATH.join2(parent, name)) : parent; + var dep = getUniqueRunDependency(`cp ${fullname}`); // might have several active requests for the same fullname + function processData(byteArray) { + function finish(byteArray) { + preFinish?.(); + if (!dontCreateFile) { + FS_createDataFile(parent, name, byteArray, canRead, canWrite, canOwn); + } + onload?.(); + removeRunDependency(dep); + } + if (FS_handledByPreloadPlugin(byteArray, fullname, finish, () => { + onerror?.(); + removeRunDependency(dep); + })) { + return; + } + finish(byteArray); + } + addRunDependency(dep); + if (typeof url == 'string') { + asyncLoad(url).then(processData, onerror); + } else { + processData(url); + } + }; + + var FS_modeStringToFlags = (str) => { + var flagModes = { + 'r': 0, + 'r+': 2, + 'w': 512 | 64 | 1, + 'w+': 512 | 64 | 2, + 'a': 1024 | 64 | 1, + 'a+': 1024 | 64 | 2, + }; + var flags = flagModes[str]; + if (typeof flags == 'undefined') { + throw new Error(`Unknown file open mode: ${str}`); + } + return flags; + }; + + var FS_getMode = (canRead, canWrite) => { + var mode = 0; + if (canRead) mode |= 292 | 73; + if (canWrite) mode |= 146; + return mode; + }; + + + + + + + /** + * Given a pointer 'ptr' to a null-terminated UTF8-encoded string in the + * emscripten HEAP, returns a copy of that string as a Javascript String object. + * + * @param {number} ptr + * @param {number=} maxBytesToRead - An optional length that specifies the + * maximum number of bytes to read. You can omit this parameter to scan the + * string until the first 0 byte. If maxBytesToRead is passed, and the string + * at [ptr, ptr+maxBytesToReadr[ contains a null byte in the middle, then the + * string will cut short at that byte index (i.e. maxBytesToRead will not + * produce a string of exact length [ptr, ptr+maxBytesToRead[) N.B. mixing + * frequent uses of UTF8ToString() with and without maxBytesToRead may throw + * JS JIT optimizations off, so it is worth to consider consistently using one + * @return {string} + */ + var UTF8ToString = (ptr, maxBytesToRead) => { + assert(typeof ptr == 'number', `UTF8ToString expects a number (got ${typeof ptr})`); + return ptr ? UTF8ArrayToString(HEAPU8, ptr, maxBytesToRead) : ''; + }; + + var strError = (errno) => UTF8ToString(_strerror(errno)); + + var ERRNO_CODES = { + 'EPERM': 63, + 'ENOENT': 44, + 'ESRCH': 71, + 'EINTR': 27, + 'EIO': 29, + 'ENXIO': 60, + 'E2BIG': 1, + 'ENOEXEC': 45, + 'EBADF': 8, + 'ECHILD': 12, + 'EAGAIN': 6, + 'EWOULDBLOCK': 6, + 'ENOMEM': 48, + 'EACCES': 2, + 'EFAULT': 21, + 'ENOTBLK': 105, + 'EBUSY': 10, + 'EEXIST': 20, + 'EXDEV': 75, + 'ENODEV': 43, + 'ENOTDIR': 54, + 'EISDIR': 31, + 'EINVAL': 28, + 'ENFILE': 41, + 'EMFILE': 33, + 'ENOTTY': 59, + 'ETXTBSY': 74, + 'EFBIG': 22, + 'ENOSPC': 51, + 'ESPIPE': 70, + 'EROFS': 69, + 'EMLINK': 34, + 'EPIPE': 64, + 'EDOM': 18, + 'ERANGE': 68, + 'ENOMSG': 49, + 'EIDRM': 24, + 'ECHRNG': 106, + 'EL2NSYNC': 156, + 'EL3HLT': 107, + 'EL3RST': 108, + 'ELNRNG': 109, + 'EUNATCH': 110, + 'ENOCSI': 111, + 'EL2HLT': 112, + 'EDEADLK': 16, + 'ENOLCK': 46, + 'EBADE': 113, + 'EBADR': 114, + 'EXFULL': 115, + 'ENOANO': 104, + 'EBADRQC': 103, + 'EBADSLT': 102, + 'EDEADLOCK': 16, + 'EBFONT': 101, + 'ENOSTR': 100, + 'ENODATA': 116, + 'ETIME': 117, + 'ENOSR': 118, + 'ENONET': 119, + 'ENOPKG': 120, + 'EREMOTE': 121, + 'ENOLINK': 47, + 'EADV': 122, + 'ESRMNT': 123, + 'ECOMM': 124, + 'EPROTO': 65, + 'EMULTIHOP': 36, + 'EDOTDOT': 125, + 'EBADMSG': 9, + 'ENOTUNIQ': 126, + 'EBADFD': 127, + 'EREMCHG': 128, + 'ELIBACC': 129, + 'ELIBBAD': 130, + 'ELIBSCN': 131, + 'ELIBMAX': 132, + 'ELIBEXEC': 133, + 'ENOSYS': 52, + 'ENOTEMPTY': 55, + 'ENAMETOOLONG': 37, + 'ELOOP': 32, + 'EOPNOTSUPP': 138, + 'EPFNOSUPPORT': 139, + 'ECONNRESET': 15, + 'ENOBUFS': 42, + 'EAFNOSUPPORT': 5, + 'EPROTOTYPE': 67, + 'ENOTSOCK': 57, + 'ENOPROTOOPT': 50, + 'ESHUTDOWN': 140, + 'ECONNREFUSED': 14, + 'EADDRINUSE': 3, + 'ECONNABORTED': 13, + 'ENETUNREACH': 40, + 'ENETDOWN': 38, + 'ETIMEDOUT': 73, + 'EHOSTDOWN': 142, + 'EHOSTUNREACH': 23, + 'EINPROGRESS': 26, + 'EALREADY': 7, + 'EDESTADDRREQ': 17, + 'EMSGSIZE': 35, + 'EPROTONOSUPPORT': 66, + 'ESOCKTNOSUPPORT': 137, + 'EADDRNOTAVAIL': 4, + 'ENETRESET': 39, + 'EISCONN': 30, + 'ENOTCONN': 53, + 'ETOOMANYREFS': 141, + 'EUSERS': 136, + 'EDQUOT': 19, + 'ESTALE': 72, + 'ENOTSUP': 138, + 'ENOMEDIUM': 148, + 'EILSEQ': 25, + 'EOVERFLOW': 61, + 'ECANCELED': 11, + 'ENOTRECOVERABLE': 56, + 'EOWNERDEAD': 62, + 'ESTRPIPE': 135, + }; + var FS = { + root:null, + mounts:[], + devices:{ + }, + streams:[], + nextInode:1, + nameTable:null, + currentPath:"/", + initialized:false, + ignorePermissions:true, + filesystems:null, + syncFSRequests:0, + readFiles:{ + }, + ErrnoError:class extends Error { + name = 'ErrnoError'; + // We set the `name` property to be able to identify `FS.ErrnoError` + // - the `name` is a standard ECMA-262 property of error objects. Kind of good to have it anyway. + // - when using PROXYFS, an error can come from an underlying FS + // as different FS objects have their own FS.ErrnoError each, + // the test `err instanceof FS.ErrnoError` won't detect an error coming from another filesystem, causing bugs. + // we'll use the reliable test `err.name == "ErrnoError"` instead + constructor(errno) { + super(runtimeInitialized ? strError(errno) : ''); + this.errno = errno; + for (var key in ERRNO_CODES) { + if (ERRNO_CODES[key] === errno) { + this.code = key; + break; + } + } + } + }, + FSStream:class { + shared = {}; + get object() { + return this.node; + } + set object(val) { + this.node = val; + } + get isRead() { + return (this.flags & 2097155) !== 1; + } + get isWrite() { + return (this.flags & 2097155) !== 0; + } + get isAppend() { + return (this.flags & 1024); + } + get flags() { + return this.shared.flags; + } + set flags(val) { + this.shared.flags = val; + } + get position() { + return this.shared.position; + } + set position(val) { + this.shared.position = val; + } + }, + FSNode:class { + node_ops = {}; + stream_ops = {}; + readMode = 292 | 73; + writeMode = 146; + mounted = null; + constructor(parent, name, mode, rdev) { + if (!parent) { + parent = this; // root node sets parent to itself + } + this.parent = parent; + this.mount = parent.mount; + this.id = FS.nextInode++; + this.name = name; + this.mode = mode; + this.rdev = rdev; + this.atime = this.mtime = this.ctime = Date.now(); + } + get read() { + return (this.mode & this.readMode) === this.readMode; + } + set read(val) { + val ? this.mode |= this.readMode : this.mode &= ~this.readMode; + } + get write() { + return (this.mode & this.writeMode) === this.writeMode; + } + set write(val) { + val ? this.mode |= this.writeMode : this.mode &= ~this.writeMode; + } + get isFolder() { + return FS.isDir(this.mode); + } + get isDevice() { + return FS.isChrdev(this.mode); + } + }, + lookupPath(path, opts = {}) { + if (!path) { + throw new FS.ErrnoError(44); + } + opts.follow_mount ??= true + + if (!PATH.isAbs(path)) { + path = FS.cwd() + '/' + path; + } + + // limit max consecutive symlinks to 40 (SYMLOOP_MAX). + linkloop: for (var nlinks = 0; nlinks < 40; nlinks++) { + // split the absolute path + var parts = path.split('/').filter((p) => !!p); + + // start at the root + var current = FS.root; + var current_path = '/'; + + for (var i = 0; i < parts.length; i++) { + var islast = (i === parts.length-1); + if (islast && opts.parent) { + // stop resolving + break; + } + + if (parts[i] === '.') { + continue; + } + + if (parts[i] === '..') { + current_path = PATH.dirname(current_path); + current = current.parent; + continue; + } + + current_path = PATH.join2(current_path, parts[i]); + try { + current = FS.lookupNode(current, parts[i]); + } catch (e) { + // if noent_okay is true, suppress a ENOENT in the last component + // and return an object with an undefined node. This is needed for + // resolving symlinks in the path when creating a file. + if ((e?.errno === 44) && islast && opts.noent_okay) { + return { path: current_path }; + } + throw e; + } + + // jump to the mount's root node if this is a mountpoint + if (FS.isMountpoint(current) && (!islast || opts.follow_mount)) { + current = current.mounted.root; + } + + // by default, lookupPath will not follow a symlink if it is the final path component. + // setting opts.follow = true will override this behavior. + if (FS.isLink(current.mode) && (!islast || opts.follow)) { + if (!current.node_ops.readlink) { + throw new FS.ErrnoError(52); + } + var link = current.node_ops.readlink(current); + if (!PATH.isAbs(link)) { + link = PATH.dirname(current_path) + '/' + link; + } + path = link + '/' + parts.slice(i + 1).join('/'); + continue linkloop; + } + } + return { path: current_path, node: current }; + } + throw new FS.ErrnoError(32); + }, + getPath(node) { + var path; + while (true) { + if (FS.isRoot(node)) { + var mount = node.mount.mountpoint; + if (!path) return mount; + return mount[mount.length-1] !== '/' ? `${mount}/${path}` : mount + path; + } + path = path ? `${node.name}/${path}` : node.name; + node = node.parent; + } + }, + hashName(parentid, name) { + var hash = 0; + + for (var i = 0; i < name.length; i++) { + hash = ((hash << 5) - hash + name.charCodeAt(i)) | 0; + } + return ((parentid + hash) >>> 0) % FS.nameTable.length; + }, + hashAddNode(node) { + var hash = FS.hashName(node.parent.id, node.name); + node.name_next = FS.nameTable[hash]; + FS.nameTable[hash] = node; + }, + hashRemoveNode(node) { + var hash = FS.hashName(node.parent.id, node.name); + if (FS.nameTable[hash] === node) { + FS.nameTable[hash] = node.name_next; + } else { + var current = FS.nameTable[hash]; + while (current) { + if (current.name_next === node) { + current.name_next = node.name_next; + break; + } + current = current.name_next; + } + } + }, + lookupNode(parent, name) { + var errCode = FS.mayLookup(parent); + if (errCode) { + throw new FS.ErrnoError(errCode); + } + var hash = FS.hashName(parent.id, name); + for (var node = FS.nameTable[hash]; node; node = node.name_next) { + var nodeName = node.name; + if (node.parent.id === parent.id && nodeName === name) { + return node; + } + } + // if we failed to find it in the cache, call into the VFS + return FS.lookup(parent, name); + }, + createNode(parent, name, mode, rdev) { + assert(typeof parent == 'object') + var node = new FS.FSNode(parent, name, mode, rdev); + + FS.hashAddNode(node); + + return node; + }, + destroyNode(node) { + FS.hashRemoveNode(node); + }, + isRoot(node) { + return node === node.parent; + }, + isMountpoint(node) { + return !!node.mounted; + }, + isFile(mode) { + return (mode & 61440) === 32768; + }, + isDir(mode) { + return (mode & 61440) === 16384; + }, + isLink(mode) { + return (mode & 61440) === 40960; + }, + isChrdev(mode) { + return (mode & 61440) === 8192; + }, + isBlkdev(mode) { + return (mode & 61440) === 24576; + }, + isFIFO(mode) { + return (mode & 61440) === 4096; + }, + isSocket(mode) { + return (mode & 49152) === 49152; + }, + flagsToPermissionString(flag) { + var perms = ['r', 'w', 'rw'][flag & 3]; + if ((flag & 512)) { + perms += 'w'; + } + return perms; + }, + nodePermissions(node, perms) { + if (FS.ignorePermissions) { + return 0; + } + // return 0 if any user, group or owner bits are set. + if (perms.includes('r') && !(node.mode & 292)) { + return 2; + } else if (perms.includes('w') && !(node.mode & 146)) { + return 2; + } else if (perms.includes('x') && !(node.mode & 73)) { + return 2; + } + return 0; + }, + mayLookup(dir) { + if (!FS.isDir(dir.mode)) return 54; + var errCode = FS.nodePermissions(dir, 'x'); + if (errCode) return errCode; + if (!dir.node_ops.lookup) return 2; + return 0; + }, + mayCreate(dir, name) { + if (!FS.isDir(dir.mode)) { + return 54; + } + try { + var node = FS.lookupNode(dir, name); + return 20; + } catch (e) { + } + return FS.nodePermissions(dir, 'wx'); + }, + mayDelete(dir, name, isdir) { + var node; + try { + node = FS.lookupNode(dir, name); + } catch (e) { + return e.errno; + } + var errCode = FS.nodePermissions(dir, 'wx'); + if (errCode) { + return errCode; + } + if (isdir) { + if (!FS.isDir(node.mode)) { + return 54; + } + if (FS.isRoot(node) || FS.getPath(node) === FS.cwd()) { + return 10; + } + } else { + if (FS.isDir(node.mode)) { + return 31; + } + } + return 0; + }, + mayOpen(node, flags) { + if (!node) { + return 44; + } + if (FS.isLink(node.mode)) { + return 32; + } else if (FS.isDir(node.mode)) { + if (FS.flagsToPermissionString(flags) !== 'r' // opening for write + || (flags & (512 | 64))) { // TODO: check for O_SEARCH? (== search for dir only) + return 31; + } + } + return FS.nodePermissions(node, FS.flagsToPermissionString(flags)); + }, + checkOpExists(op, err) { + if (!op) { + throw new FS.ErrnoError(err); + } + return op; + }, + MAX_OPEN_FDS:4096, + nextfd() { + for (var fd = 0; fd <= FS.MAX_OPEN_FDS; fd++) { + if (!FS.streams[fd]) { + return fd; + } + } + throw new FS.ErrnoError(33); + }, + getStreamChecked(fd) { + var stream = FS.getStream(fd); + if (!stream) { + throw new FS.ErrnoError(8); + } + return stream; + }, + getStream:(fd) => FS.streams[fd], + createStream(stream, fd = -1) { + assert(fd >= -1); + + // clone it, so we can return an instance of FSStream + stream = Object.assign(new FS.FSStream(), stream); + if (fd == -1) { + fd = FS.nextfd(); + } + stream.fd = fd; + FS.streams[fd] = stream; + return stream; + }, + closeStream(fd) { + FS.streams[fd] = null; + }, + dupStream(origStream, fd = -1) { + var stream = FS.createStream(origStream, fd); + stream.stream_ops?.dup?.(stream); + return stream; + }, + doSetAttr(stream, node, attr) { + var setattr = stream?.stream_ops.setattr; + var arg = setattr ? stream : node; + setattr ??= node.node_ops.setattr; + FS.checkOpExists(setattr, 63) + setattr(arg, attr); + }, + chrdev_stream_ops:{ + open(stream) { + var device = FS.getDevice(stream.node.rdev); + // override node's stream ops with the device's + stream.stream_ops = device.stream_ops; + // forward the open call + stream.stream_ops.open?.(stream); + }, + llseek() { + throw new FS.ErrnoError(70); + }, + }, + major:(dev) => ((dev) >> 8), + minor:(dev) => ((dev) & 0xff), + makedev:(ma, mi) => ((ma) << 8 | (mi)), + registerDevice(dev, ops) { + FS.devices[dev] = { stream_ops: ops }; + }, + getDevice:(dev) => FS.devices[dev], + getMounts(mount) { + var mounts = []; + var check = [mount]; + + while (check.length) { + var m = check.pop(); + + mounts.push(m); + + check.push(...m.mounts); + } + + return mounts; + }, + syncfs(populate, callback) { + if (typeof populate == 'function') { + callback = populate; + populate = false; + } + + FS.syncFSRequests++; + + if (FS.syncFSRequests > 1) { + err(`warning: ${FS.syncFSRequests} FS.syncfs operations in flight at once, probably just doing extra work`); + } + + var mounts = FS.getMounts(FS.root.mount); + var completed = 0; + + function doCallback(errCode) { + assert(FS.syncFSRequests > 0); + FS.syncFSRequests--; + return callback(errCode); + } + + function done(errCode) { + if (errCode) { + if (!done.errored) { + done.errored = true; + return doCallback(errCode); + } + return; + } + if (++completed >= mounts.length) { + doCallback(null); + } + }; + + // sync all mounts + mounts.forEach((mount) => { + if (!mount.type.syncfs) { + return done(null); + } + mount.type.syncfs(mount, populate, done); + }); + }, + mount(type, opts, mountpoint) { + if (typeof type == 'string') { + // The filesystem was not included, and instead we have an error + // message stored in the variable. + throw type; + } + var root = mountpoint === '/'; + var pseudo = !mountpoint; + var node; + + if (root && FS.root) { + throw new FS.ErrnoError(10); + } else if (!root && !pseudo) { + var lookup = FS.lookupPath(mountpoint, { follow_mount: false }); + + mountpoint = lookup.path; // use the absolute path + node = lookup.node; + + if (FS.isMountpoint(node)) { + throw new FS.ErrnoError(10); + } + + if (!FS.isDir(node.mode)) { + throw new FS.ErrnoError(54); + } + } + + var mount = { + type, + opts, + mountpoint, + mounts: [] + }; + + // create a root node for the fs + var mountRoot = type.mount(mount); + mountRoot.mount = mount; + mount.root = mountRoot; + + if (root) { + FS.root = mountRoot; + } else if (node) { + // set as a mountpoint + node.mounted = mount; + + // add the new mount to the current mount's children + if (node.mount) { + node.mount.mounts.push(mount); + } + } + + return mountRoot; + }, + unmount(mountpoint) { + var lookup = FS.lookupPath(mountpoint, { follow_mount: false }); + + if (!FS.isMountpoint(lookup.node)) { + throw new FS.ErrnoError(28); + } + + // destroy the nodes for this mount, and all its child mounts + var node = lookup.node; + var mount = node.mounted; + var mounts = FS.getMounts(mount); + + Object.keys(FS.nameTable).forEach((hash) => { + var current = FS.nameTable[hash]; + + while (current) { + var next = current.name_next; + + if (mounts.includes(current.mount)) { + FS.destroyNode(current); + } + + current = next; + } + }); + + // no longer a mountpoint + node.mounted = null; + + // remove this mount from the child mounts + var idx = node.mount.mounts.indexOf(mount); + assert(idx !== -1); + node.mount.mounts.splice(idx, 1); + }, + lookup(parent, name) { + return parent.node_ops.lookup(parent, name); + }, + mknod(path, mode, dev) { + var lookup = FS.lookupPath(path, { parent: true }); + var parent = lookup.node; + var name = PATH.basename(path); + if (!name) { + throw new FS.ErrnoError(28); + } + if (name === '.' || name === '..') { + throw new FS.ErrnoError(20); + } + var errCode = FS.mayCreate(parent, name); + if (errCode) { + throw new FS.ErrnoError(errCode); + } + if (!parent.node_ops.mknod) { + throw new FS.ErrnoError(63); + } + return parent.node_ops.mknod(parent, name, mode, dev); + }, + statfs(path) { + return FS.statfsNode(FS.lookupPath(path, {follow: true}).node); + }, + statfsStream(stream) { + // We keep a separate statfsStream function because noderawfs overrides + // it. In noderawfs, stream.node is sometimes null. Instead, we need to + // look at stream.path. + return FS.statfsNode(stream.node); + }, + statfsNode(node) { + // NOTE: None of the defaults here are true. We're just returning safe and + // sane values. Currently nodefs and rawfs replace these defaults, + // other file systems leave them alone. + var rtn = { + bsize: 4096, + frsize: 4096, + blocks: 1e6, + bfree: 5e5, + bavail: 5e5, + files: FS.nextInode, + ffree: FS.nextInode - 1, + fsid: 42, + flags: 2, + namelen: 255, + }; + + if (node.node_ops.statfs) { + Object.assign(rtn, node.node_ops.statfs(node.mount.opts.root)); + } + return rtn; + }, + create(path, mode = 0o666) { + mode &= 4095; + mode |= 32768; + return FS.mknod(path, mode, 0); + }, + mkdir(path, mode = 0o777) { + mode &= 511 | 512; + mode |= 16384; + return FS.mknod(path, mode, 0); + }, + mkdirTree(path, mode) { + var dirs = path.split('/'); + var d = ''; + for (var dir of dirs) { + if (!dir) continue; + if (d || PATH.isAbs(path)) d += '/'; + d += dir; + try { + FS.mkdir(d, mode); + } catch(e) { + if (e.errno != 20) throw e; + } + } + }, + mkdev(path, mode, dev) { + if (typeof dev == 'undefined') { + dev = mode; + mode = 0o666; + } + mode |= 8192; + return FS.mknod(path, mode, dev); + }, + symlink(oldpath, newpath) { + if (!PATH_FS.resolve(oldpath)) { + throw new FS.ErrnoError(44); + } + var lookup = FS.lookupPath(newpath, { parent: true }); + var parent = lookup.node; + if (!parent) { + throw new FS.ErrnoError(44); + } + var newname = PATH.basename(newpath); + var errCode = FS.mayCreate(parent, newname); + if (errCode) { + throw new FS.ErrnoError(errCode); + } + if (!parent.node_ops.symlink) { + throw new FS.ErrnoError(63); + } + return parent.node_ops.symlink(parent, newname, oldpath); + }, + rename(old_path, new_path) { + var old_dirname = PATH.dirname(old_path); + var new_dirname = PATH.dirname(new_path); + var old_name = PATH.basename(old_path); + var new_name = PATH.basename(new_path); + // parents must exist + var lookup, old_dir, new_dir; + + // let the errors from non existent directories percolate up + lookup = FS.lookupPath(old_path, { parent: true }); + old_dir = lookup.node; + lookup = FS.lookupPath(new_path, { parent: true }); + new_dir = lookup.node; + + if (!old_dir || !new_dir) throw new FS.ErrnoError(44); + // need to be part of the same mount + if (old_dir.mount !== new_dir.mount) { + throw new FS.ErrnoError(75); + } + // source must exist + var old_node = FS.lookupNode(old_dir, old_name); + // old path should not be an ancestor of the new path + var relative = PATH_FS.relative(old_path, new_dirname); + if (relative.charAt(0) !== '.') { + throw new FS.ErrnoError(28); + } + // new path should not be an ancestor of the old path + relative = PATH_FS.relative(new_path, old_dirname); + if (relative.charAt(0) !== '.') { + throw new FS.ErrnoError(55); + } + // see if the new path already exists + var new_node; + try { + new_node = FS.lookupNode(new_dir, new_name); + } catch (e) { + // not fatal + } + // early out if nothing needs to change + if (old_node === new_node) { + return; + } + // we'll need to delete the old entry + var isdir = FS.isDir(old_node.mode); + var errCode = FS.mayDelete(old_dir, old_name, isdir); + if (errCode) { + throw new FS.ErrnoError(errCode); + } + // need delete permissions if we'll be overwriting. + // need create permissions if new doesn't already exist. + errCode = new_node ? + FS.mayDelete(new_dir, new_name, isdir) : + FS.mayCreate(new_dir, new_name); + if (errCode) { + throw new FS.ErrnoError(errCode); + } + if (!old_dir.node_ops.rename) { + throw new FS.ErrnoError(63); + } + if (FS.isMountpoint(old_node) || (new_node && FS.isMountpoint(new_node))) { + throw new FS.ErrnoError(10); + } + // if we are going to change the parent, check write permissions + if (new_dir !== old_dir) { + errCode = FS.nodePermissions(old_dir, 'w'); + if (errCode) { + throw new FS.ErrnoError(errCode); + } + } + // remove the node from the lookup hash + FS.hashRemoveNode(old_node); + // do the underlying fs rename + try { + old_dir.node_ops.rename(old_node, new_dir, new_name); + // update old node (we do this here to avoid each backend + // needing to) + old_node.parent = new_dir; + } catch (e) { + throw e; + } finally { + // add the node back to the hash (in case node_ops.rename + // changed its name) + FS.hashAddNode(old_node); + } + }, + rmdir(path) { + var lookup = FS.lookupPath(path, { parent: true }); + var parent = lookup.node; + var name = PATH.basename(path); + var node = FS.lookupNode(parent, name); + var errCode = FS.mayDelete(parent, name, true); + if (errCode) { + throw new FS.ErrnoError(errCode); + } + if (!parent.node_ops.rmdir) { + throw new FS.ErrnoError(63); + } + if (FS.isMountpoint(node)) { + throw new FS.ErrnoError(10); + } + parent.node_ops.rmdir(parent, name); + FS.destroyNode(node); + }, + readdir(path) { + var lookup = FS.lookupPath(path, { follow: true }); + var node = lookup.node; + var readdir = FS.checkOpExists(node.node_ops.readdir, 54); + return readdir(node); + }, + unlink(path) { + var lookup = FS.lookupPath(path, { parent: true }); + var parent = lookup.node; + if (!parent) { + throw new FS.ErrnoError(44); + } + var name = PATH.basename(path); + var node = FS.lookupNode(parent, name); + var errCode = FS.mayDelete(parent, name, false); + if (errCode) { + // According to POSIX, we should map EISDIR to EPERM, but + // we instead do what Linux does (and we must, as we use + // the musl linux libc). + throw new FS.ErrnoError(errCode); + } + if (!parent.node_ops.unlink) { + throw new FS.ErrnoError(63); + } + if (FS.isMountpoint(node)) { + throw new FS.ErrnoError(10); + } + parent.node_ops.unlink(parent, name); + FS.destroyNode(node); + }, + readlink(path) { + var lookup = FS.lookupPath(path); + var link = lookup.node; + if (!link) { + throw new FS.ErrnoError(44); + } + if (!link.node_ops.readlink) { + throw new FS.ErrnoError(28); + } + return link.node_ops.readlink(link); + }, + stat(path, dontFollow) { + var lookup = FS.lookupPath(path, { follow: !dontFollow }); + var node = lookup.node; + var getattr = FS.checkOpExists(node.node_ops.getattr, 63); + return getattr(node); + }, + fstat(fd) { + var stream = FS.getStreamChecked(fd); + var node = stream.node; + var getattr = stream.stream_ops.getattr; + var arg = getattr ? stream : node; + getattr ??= node.node_ops.getattr; + FS.checkOpExists(getattr, 63) + return getattr(arg); + }, + lstat(path) { + return FS.stat(path, true); + }, + doChmod(stream, node, mode, dontFollow) { + FS.doSetAttr(stream, node, { + mode: (mode & 4095) | (node.mode & ~4095), + ctime: Date.now(), + dontFollow + }); + }, + chmod(path, mode, dontFollow) { + var node; + if (typeof path == 'string') { + var lookup = FS.lookupPath(path, { follow: !dontFollow }); + node = lookup.node; + } else { + node = path; + } + FS.doChmod(null, node, mode, dontFollow); + }, + lchmod(path, mode) { + FS.chmod(path, mode, true); + }, + fchmod(fd, mode) { + var stream = FS.getStreamChecked(fd); + FS.doChmod(stream, stream.node, mode, false); + }, + doChown(stream, node, dontFollow) { + FS.doSetAttr(stream, node, { + timestamp: Date.now(), + dontFollow + // we ignore the uid / gid for now + }); + }, + chown(path, uid, gid, dontFollow) { + var node; + if (typeof path == 'string') { + var lookup = FS.lookupPath(path, { follow: !dontFollow }); + node = lookup.node; + } else { + node = path; + } + FS.doChown(null, node, dontFollow); + }, + lchown(path, uid, gid) { + FS.chown(path, uid, gid, true); + }, + fchown(fd, uid, gid) { + var stream = FS.getStreamChecked(fd); + FS.doChown(stream, stream.node, false); + }, + doTruncate(stream, node, len) { + if (FS.isDir(node.mode)) { + throw new FS.ErrnoError(31); + } + if (!FS.isFile(node.mode)) { + throw new FS.ErrnoError(28); + } + var errCode = FS.nodePermissions(node, 'w'); + if (errCode) { + throw new FS.ErrnoError(errCode); + } + FS.doSetAttr(stream, node, { + size: len, + timestamp: Date.now() + }); + }, + truncate(path, len) { + if (len < 0) { + throw new FS.ErrnoError(28); + } + var node; + if (typeof path == 'string') { + var lookup = FS.lookupPath(path, { follow: true }); + node = lookup.node; + } else { + node = path; + } + FS.doTruncate(null, node, len); + }, + ftruncate(fd, len) { + var stream = FS.getStreamChecked(fd); + if (len < 0 || (stream.flags & 2097155) === 0) { + throw new FS.ErrnoError(28); + } + FS.doTruncate(stream, stream.node, len); + }, + utime(path, atime, mtime) { + var lookup = FS.lookupPath(path, { follow: true }); + var node = lookup.node; + var setattr = FS.checkOpExists(node.node_ops.setattr, 63); + setattr(node, { + atime: atime, + mtime: mtime + }); + }, + open(path, flags, mode = 0o666) { + if (path === "") { + throw new FS.ErrnoError(44); + } + flags = typeof flags == 'string' ? FS_modeStringToFlags(flags) : flags; + if ((flags & 64)) { + mode = (mode & 4095) | 32768; + } else { + mode = 0; + } + var node; + var isDirPath; + if (typeof path == 'object') { + node = path; + } else { + isDirPath = path.endsWith("/"); + // noent_okay makes it so that if the final component of the path + // doesn't exist, lookupPath returns `node: undefined`. `path` will be + // updated to point to the target of all symlinks. + var lookup = FS.lookupPath(path, { + follow: !(flags & 131072), + noent_okay: true + }); + node = lookup.node; + path = lookup.path; + } + // perhaps we need to create the node + var created = false; + if ((flags & 64)) { + if (node) { + // if O_CREAT and O_EXCL are set, error out if the node already exists + if ((flags & 128)) { + throw new FS.ErrnoError(20); + } + } else if (isDirPath) { + throw new FS.ErrnoError(31); + } else { + // node doesn't exist, try to create it + // Ignore the permission bits here to ensure we can `open` this new + // file below. We use chmod below the apply the permissions once the + // file is open. + node = FS.mknod(path, mode | 0o777, 0); + created = true; + } + } + if (!node) { + throw new FS.ErrnoError(44); + } + // can't truncate a device + if (FS.isChrdev(node.mode)) { + flags &= ~512; + } + // if asked only for a directory, then this must be one + if ((flags & 65536) && !FS.isDir(node.mode)) { + throw new FS.ErrnoError(54); + } + // check permissions, if this is not a file we just created now (it is ok to + // create and write to a file with read-only permissions; it is read-only + // for later use) + if (!created) { + var errCode = FS.mayOpen(node, flags); + if (errCode) { + throw new FS.ErrnoError(errCode); + } + } + // do truncation if necessary + if ((flags & 512) && !created) { + FS.truncate(node, 0); + } + // we've already handled these, don't pass down to the underlying vfs + flags &= ~(128 | 512 | 131072); + + // register the stream with the filesystem + var stream = FS.createStream({ + node, + path: FS.getPath(node), // we want the absolute path to the node + flags, + seekable: true, + position: 0, + stream_ops: node.stream_ops, + // used by the file family libc calls (fopen, fwrite, ferror, etc.) + ungotten: [], + error: false + }); + // call the new stream's open function + if (stream.stream_ops.open) { + stream.stream_ops.open(stream); + } + if (created) { + FS.chmod(node, mode & 0o777); + } + if (Module['logReadFiles'] && !(flags & 1)) { + if (!(path in FS.readFiles)) { + FS.readFiles[path] = 1; + } + } + return stream; + }, + close(stream) { + if (FS.isClosed(stream)) { + throw new FS.ErrnoError(8); + } + if (stream.getdents) stream.getdents = null; // free readdir state + try { + if (stream.stream_ops.close) { + stream.stream_ops.close(stream); + } + } catch (e) { + throw e; + } finally { + FS.closeStream(stream.fd); + } + stream.fd = null; + }, + isClosed(stream) { + return stream.fd === null; + }, + llseek(stream, offset, whence) { + if (FS.isClosed(stream)) { + throw new FS.ErrnoError(8); + } + if (!stream.seekable || !stream.stream_ops.llseek) { + throw new FS.ErrnoError(70); + } + if (whence != 0 && whence != 1 && whence != 2) { + throw new FS.ErrnoError(28); + } + stream.position = stream.stream_ops.llseek(stream, offset, whence); + stream.ungotten = []; + return stream.position; + }, + read(stream, buffer, offset, length, position) { + assert(offset >= 0); + if (length < 0 || position < 0) { + throw new FS.ErrnoError(28); + } + if (FS.isClosed(stream)) { + throw new FS.ErrnoError(8); + } + if ((stream.flags & 2097155) === 1) { + throw new FS.ErrnoError(8); + } + if (FS.isDir(stream.node.mode)) { + throw new FS.ErrnoError(31); + } + if (!stream.stream_ops.read) { + throw new FS.ErrnoError(28); + } + var seeking = typeof position != 'undefined'; + if (!seeking) { + position = stream.position; + } else if (!stream.seekable) { + throw new FS.ErrnoError(70); + } + var bytesRead = stream.stream_ops.read(stream, buffer, offset, length, position); + if (!seeking) stream.position += bytesRead; + return bytesRead; + }, + write(stream, buffer, offset, length, position, canOwn) { + assert(offset >= 0); + if (length < 0 || position < 0) { + throw new FS.ErrnoError(28); + } + if (FS.isClosed(stream)) { + throw new FS.ErrnoError(8); + } + if ((stream.flags & 2097155) === 0) { + throw new FS.ErrnoError(8); + } + if (FS.isDir(stream.node.mode)) { + throw new FS.ErrnoError(31); + } + if (!stream.stream_ops.write) { + throw new FS.ErrnoError(28); + } + if (stream.seekable && stream.flags & 1024) { + // seek to the end before writing in append mode + FS.llseek(stream, 0, 2); + } + var seeking = typeof position != 'undefined'; + if (!seeking) { + position = stream.position; + } else if (!stream.seekable) { + throw new FS.ErrnoError(70); + } + var bytesWritten = stream.stream_ops.write(stream, buffer, offset, length, position, canOwn); + if (!seeking) stream.position += bytesWritten; + return bytesWritten; + }, + mmap(stream, length, position, prot, flags) { + // User requests writing to file (prot & PROT_WRITE != 0). + // Checking if we have permissions to write to the file unless + // MAP_PRIVATE flag is set. According to POSIX spec it is possible + // to write to file opened in read-only mode with MAP_PRIVATE flag, + // as all modifications will be visible only in the memory of + // the current process. + if ((prot & 2) !== 0 + && (flags & 2) === 0 + && (stream.flags & 2097155) !== 2) { + throw new FS.ErrnoError(2); + } + if ((stream.flags & 2097155) === 1) { + throw new FS.ErrnoError(2); + } + if (!stream.stream_ops.mmap) { + throw new FS.ErrnoError(43); + } + if (!length) { + throw new FS.ErrnoError(28); + } + return stream.stream_ops.mmap(stream, length, position, prot, flags); + }, + msync(stream, buffer, offset, length, mmapFlags) { + assert(offset >= 0); + if (!stream.stream_ops.msync) { + return 0; + } + return stream.stream_ops.msync(stream, buffer, offset, length, mmapFlags); + }, + ioctl(stream, cmd, arg) { + if (!stream.stream_ops.ioctl) { + throw new FS.ErrnoError(59); + } + return stream.stream_ops.ioctl(stream, cmd, arg); + }, + readFile(path, opts = {}) { + opts.flags = opts.flags || 0; + opts.encoding = opts.encoding || 'binary'; + if (opts.encoding !== 'utf8' && opts.encoding !== 'binary') { + throw new Error(`Invalid encoding type "${opts.encoding}"`); + } + var ret; + var stream = FS.open(path, opts.flags); + var stat = FS.stat(path); + var length = stat.size; + var buf = new Uint8Array(length); + FS.read(stream, buf, 0, length, 0); + if (opts.encoding === 'utf8') { + ret = UTF8ArrayToString(buf); + } else if (opts.encoding === 'binary') { + ret = buf; + } + FS.close(stream); + return ret; + }, + writeFile(path, data, opts = {}) { + opts.flags = opts.flags || 577; + var stream = FS.open(path, opts.flags, opts.mode); + if (typeof data == 'string') { + var buf = new Uint8Array(lengthBytesUTF8(data)+1); + var actualNumBytes = stringToUTF8Array(data, buf, 0, buf.length); + FS.write(stream, buf, 0, actualNumBytes, undefined, opts.canOwn); + } else if (ArrayBuffer.isView(data)) { + FS.write(stream, data, 0, data.byteLength, undefined, opts.canOwn); + } else { + throw new Error('Unsupported data type'); + } + FS.close(stream); + }, + cwd:() => FS.currentPath, + chdir(path) { + var lookup = FS.lookupPath(path, { follow: true }); + if (lookup.node === null) { + throw new FS.ErrnoError(44); + } + if (!FS.isDir(lookup.node.mode)) { + throw new FS.ErrnoError(54); + } + var errCode = FS.nodePermissions(lookup.node, 'x'); + if (errCode) { + throw new FS.ErrnoError(errCode); + } + FS.currentPath = lookup.path; + }, + createDefaultDirectories() { + FS.mkdir('/tmp'); + FS.mkdir('/home'); + FS.mkdir('/home/web_user'); + }, + createDefaultDevices() { + // create /dev + FS.mkdir('/dev'); + // setup /dev/null + FS.registerDevice(FS.makedev(1, 3), { + read: () => 0, + write: (stream, buffer, offset, length, pos) => length, + llseek: () => 0, + }); + FS.mkdev('/dev/null', FS.makedev(1, 3)); + // setup /dev/tty and /dev/tty1 + // stderr needs to print output using err() rather than out() + // so we register a second tty just for it. + TTY.register(FS.makedev(5, 0), TTY.default_tty_ops); + TTY.register(FS.makedev(6, 0), TTY.default_tty1_ops); + FS.mkdev('/dev/tty', FS.makedev(5, 0)); + FS.mkdev('/dev/tty1', FS.makedev(6, 0)); + // setup /dev/[u]random + // use a buffer to avoid overhead of individual crypto calls per byte + var randomBuffer = new Uint8Array(1024), randomLeft = 0; + var randomByte = () => { + if (randomLeft === 0) { + randomFill(randomBuffer); + randomLeft = randomBuffer.byteLength; + } + return randomBuffer[--randomLeft]; + }; + FS.createDevice('/dev', 'random', randomByte); + FS.createDevice('/dev', 'urandom', randomByte); + // we're not going to emulate the actual shm device, + // just create the tmp dirs that reside in it commonly + FS.mkdir('/dev/shm'); + FS.mkdir('/dev/shm/tmp'); + }, + createSpecialDirectories() { + // create /proc/self/fd which allows /proc/self/fd/6 => readlink gives the + // name of the stream for fd 6 (see test_unistd_ttyname) + FS.mkdir('/proc'); + var proc_self = FS.mkdir('/proc/self'); + FS.mkdir('/proc/self/fd'); + FS.mount({ + mount() { + var node = FS.createNode(proc_self, 'fd', 16895, 73); + node.stream_ops = { + llseek: MEMFS.stream_ops.llseek, + }; + node.node_ops = { + lookup(parent, name) { + var fd = +name; + var stream = FS.getStreamChecked(fd); + var ret = { + parent: null, + mount: { mountpoint: 'fake' }, + node_ops: { readlink: () => stream.path }, + id: fd + 1, + }; + ret.parent = ret; // make it look like a simple root node + return ret; + }, + readdir() { + return Array.from(FS.streams.entries()) + .filter(([k, v]) => v) + .map(([k, v]) => k.toString()); + } + }; + return node; + } + }, {}, '/proc/self/fd'); + }, + createStandardStreams(input, output, error) { + // TODO deprecate the old functionality of a single + // input / output callback and that utilizes FS.createDevice + // and instead require a unique set of stream ops + + // by default, we symlink the standard streams to the + // default tty devices. however, if the standard streams + // have been overwritten we create a unique device for + // them instead. + if (input) { + FS.createDevice('/dev', 'stdin', input); + } else { + FS.symlink('/dev/tty', '/dev/stdin'); + } + if (output) { + FS.createDevice('/dev', 'stdout', null, output); + } else { + FS.symlink('/dev/tty', '/dev/stdout'); + } + if (error) { + FS.createDevice('/dev', 'stderr', null, error); + } else { + FS.symlink('/dev/tty1', '/dev/stderr'); + } + + // open default streams for the stdin, stdout and stderr devices + var stdin = FS.open('/dev/stdin', 0); + var stdout = FS.open('/dev/stdout', 1); + var stderr = FS.open('/dev/stderr', 1); + assert(stdin.fd === 0, `invalid handle for stdin (${stdin.fd})`); + assert(stdout.fd === 1, `invalid handle for stdout (${stdout.fd})`); + assert(stderr.fd === 2, `invalid handle for stderr (${stderr.fd})`); + }, + staticInit() { + FS.nameTable = new Array(4096); + + FS.mount(MEMFS, {}, '/'); + + FS.createDefaultDirectories(); + FS.createDefaultDevices(); + FS.createSpecialDirectories(); + + FS.filesystems = { + 'MEMFS': MEMFS, + }; + }, + init(input, output, error) { + assert(!FS.initialized, 'FS.init was previously called. If you want to initialize later with custom parameters, remove any earlier calls (note that one is automatically added to the generated code)'); + FS.initialized = true; + + // Allow Module.stdin etc. to provide defaults, if none explicitly passed to us here + input ??= Module['stdin']; + output ??= Module['stdout']; + error ??= Module['stderr']; + + FS.createStandardStreams(input, output, error); + }, + quit() { + FS.initialized = false; + // force-flush all streams, so we get musl std streams printed out + _fflush(0); + // close all of our streams + for (var stream of FS.streams) { + if (stream) { + FS.close(stream); + } + } + }, + findObject(path, dontResolveLastLink) { + var ret = FS.analyzePath(path, dontResolveLastLink); + if (!ret.exists) { + return null; + } + return ret.object; + }, + analyzePath(path, dontResolveLastLink) { + // operate from within the context of the symlink's target + try { + var lookup = FS.lookupPath(path, { follow: !dontResolveLastLink }); + path = lookup.path; + } catch (e) { + } + var ret = { + isRoot: false, exists: false, error: 0, name: null, path: null, object: null, + parentExists: false, parentPath: null, parentObject: null + }; + try { + var lookup = FS.lookupPath(path, { parent: true }); + ret.parentExists = true; + ret.parentPath = lookup.path; + ret.parentObject = lookup.node; + ret.name = PATH.basename(path); + lookup = FS.lookupPath(path, { follow: !dontResolveLastLink }); + ret.exists = true; + ret.path = lookup.path; + ret.object = lookup.node; + ret.name = lookup.node.name; + ret.isRoot = lookup.path === '/'; + } catch (e) { + ret.error = e.errno; + }; + return ret; + }, + createPath(parent, path, canRead, canWrite) { + parent = typeof parent == 'string' ? parent : FS.getPath(parent); + var parts = path.split('/').reverse(); + while (parts.length) { + var part = parts.pop(); + if (!part) continue; + var current = PATH.join2(parent, part); + try { + FS.mkdir(current); + } catch (e) { + if (e.errno != 20) throw e; + } + parent = current; + } + return current; + }, + createFile(parent, name, properties, canRead, canWrite) { + var path = PATH.join2(typeof parent == 'string' ? parent : FS.getPath(parent), name); + var mode = FS_getMode(canRead, canWrite); + return FS.create(path, mode); + }, + createDataFile(parent, name, data, canRead, canWrite, canOwn) { + var path = name; + if (parent) { + parent = typeof parent == 'string' ? parent : FS.getPath(parent); + path = name ? PATH.join2(parent, name) : parent; + } + var mode = FS_getMode(canRead, canWrite); + var node = FS.create(path, mode); + if (data) { + if (typeof data == 'string') { + var arr = new Array(data.length); + for (var i = 0, len = data.length; i < len; ++i) arr[i] = data.charCodeAt(i); + data = arr; + } + // make sure we can write to the file + FS.chmod(node, mode | 146); + var stream = FS.open(node, 577); + FS.write(stream, data, 0, data.length, 0, canOwn); + FS.close(stream); + FS.chmod(node, mode); + } + }, + createDevice(parent, name, input, output) { + var path = PATH.join2(typeof parent == 'string' ? parent : FS.getPath(parent), name); + var mode = FS_getMode(!!input, !!output); + FS.createDevice.major ??= 64; + var dev = FS.makedev(FS.createDevice.major++, 0); + // Create a fake device that a set of stream ops to emulate + // the old behavior. + FS.registerDevice(dev, { + open(stream) { + stream.seekable = false; + }, + close(stream) { + // flush any pending line data + if (output?.buffer?.length) { + output(10); + } + }, + read(stream, buffer, offset, length, pos /* ignored */) { + var bytesRead = 0; + for (var i = 0; i < length; i++) { + var result; + try { + result = input(); + } catch (e) { + throw new FS.ErrnoError(29); + } + if (result === undefined && bytesRead === 0) { + throw new FS.ErrnoError(6); + } + if (result === null || result === undefined) break; + bytesRead++; + buffer[offset+i] = result; + } + if (bytesRead) { + stream.node.atime = Date.now(); + } + return bytesRead; + }, + write(stream, buffer, offset, length, pos) { + for (var i = 0; i < length; i++) { + try { + output(buffer[offset+i]); + } catch (e) { + throw new FS.ErrnoError(29); + } + } + if (length) { + stream.node.mtime = stream.node.ctime = Date.now(); + } + return i; + } + }); + return FS.mkdev(path, mode, dev); + }, + forceLoadFile(obj) { + if (obj.isDevice || obj.isFolder || obj.link || obj.contents) return true; + if (typeof XMLHttpRequest != 'undefined') { + throw new Error("Lazy loading should have been performed (contents set) in createLazyFile, but it was not. Lazy loading only works in web workers. Use --embed-file or --preload-file in emcc on the main thread."); + } else { // Command-line. + try { + obj.contents = readBinary(obj.url); + obj.usedBytes = obj.contents.length; + } catch (e) { + throw new FS.ErrnoError(29); + } + } + }, + createLazyFile(parent, name, url, canRead, canWrite) { + // Lazy chunked Uint8Array (implements get and length from Uint8Array). + // Actual getting is abstracted away for eventual reuse. + class LazyUint8Array { + lengthKnown = false; + chunks = []; // Loaded chunks. Index is the chunk number + get(idx) { + if (idx > this.length-1 || idx < 0) { + return undefined; + } + var chunkOffset = idx % this.chunkSize; + var chunkNum = (idx / this.chunkSize)|0; + return this.getter(chunkNum)[chunkOffset]; + } + setDataGetter(getter) { + this.getter = getter; + } + cacheLength() { + // Find length + var xhr = new XMLHttpRequest(); + xhr.open('HEAD', url, false); + xhr.send(null); + if (!(xhr.status >= 200 && xhr.status < 300 || xhr.status === 304)) throw new Error("Couldn't load " + url + ". Status: " + xhr.status); + var datalength = Number(xhr.getResponseHeader("Content-length")); + var header; + var hasByteServing = (header = xhr.getResponseHeader("Accept-Ranges")) && header === "bytes"; + var usesGzip = (header = xhr.getResponseHeader("Content-Encoding")) && header === "gzip"; + + var chunkSize = 1024*1024; // Chunk size in bytes + + if (!hasByteServing) chunkSize = datalength; + + // Function to get a range from the remote URL. + var doXHR = (from, to) => { + if (from > to) throw new Error("invalid range (" + from + ", " + to + ") or no bytes requested!"); + if (to > datalength-1) throw new Error("only " + datalength + " bytes available! programmer error!"); + + // TODO: Use mozResponseArrayBuffer, responseStream, etc. if available. + var xhr = new XMLHttpRequest(); + xhr.open('GET', url, false); + if (datalength !== chunkSize) xhr.setRequestHeader("Range", "bytes=" + from + "-" + to); + + // Some hints to the browser that we want binary data. + xhr.responseType = 'arraybuffer'; + if (xhr.overrideMimeType) { + xhr.overrideMimeType('text/plain; charset=x-user-defined'); + } + + xhr.send(null); + if (!(xhr.status >= 200 && xhr.status < 300 || xhr.status === 304)) throw new Error("Couldn't load " + url + ". Status: " + xhr.status); + if (xhr.response !== undefined) { + return new Uint8Array(/** @type{Array} */(xhr.response || [])); + } + return intArrayFromString(xhr.responseText || '', true); + }; + var lazyArray = this; + lazyArray.setDataGetter((chunkNum) => { + var start = chunkNum * chunkSize; + var end = (chunkNum+1) * chunkSize - 1; // including this byte + end = Math.min(end, datalength-1); // if datalength-1 is selected, this is the last block + if (typeof lazyArray.chunks[chunkNum] == 'undefined') { + lazyArray.chunks[chunkNum] = doXHR(start, end); + } + if (typeof lazyArray.chunks[chunkNum] == 'undefined') throw new Error('doXHR failed!'); + return lazyArray.chunks[chunkNum]; + }); + + if (usesGzip || !datalength) { + // if the server uses gzip or doesn't supply the length, we have to download the whole file to get the (uncompressed) length + chunkSize = datalength = 1; // this will force getter(0)/doXHR do download the whole file + datalength = this.getter(0).length; + chunkSize = datalength; + out("LazyFiles on gzip forces download of the whole file when length is accessed"); + } + + this._length = datalength; + this._chunkSize = chunkSize; + this.lengthKnown = true; + } + get length() { + if (!this.lengthKnown) { + this.cacheLength(); + } + return this._length; + } + get chunkSize() { + if (!this.lengthKnown) { + this.cacheLength(); + } + return this._chunkSize; + } + } + + if (typeof XMLHttpRequest != 'undefined') { + if (!ENVIRONMENT_IS_WORKER) throw 'Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc'; + var lazyArray = new LazyUint8Array(); + var properties = { isDevice: false, contents: lazyArray }; + } else { + var properties = { isDevice: false, url: url }; + } + + var node = FS.createFile(parent, name, properties, canRead, canWrite); + // This is a total hack, but I want to get this lazy file code out of the + // core of MEMFS. If we want to keep this lazy file concept I feel it should + // be its own thin LAZYFS proxying calls to MEMFS. + if (properties.contents) { + node.contents = properties.contents; + } else if (properties.url) { + node.contents = null; + node.url = properties.url; + } + // Add a function that defers querying the file size until it is asked the first time. + Object.defineProperties(node, { + usedBytes: { + get: function() { return this.contents.length; } + } + }); + // override each stream op with one that tries to force load the lazy file first + var stream_ops = {}; + var keys = Object.keys(node.stream_ops); + keys.forEach((key) => { + var fn = node.stream_ops[key]; + stream_ops[key] = (...args) => { + FS.forceLoadFile(node); + return fn(...args); + }; + }); + function writeChunks(stream, buffer, offset, length, position) { + var contents = stream.node.contents; + if (position >= contents.length) + return 0; + var size = Math.min(contents.length - position, length); + assert(size >= 0); + if (contents.slice) { // normal array + for (var i = 0; i < size; i++) { + buffer[offset + i] = contents[position + i]; + } + } else { + for (var i = 0; i < size; i++) { // LazyUint8Array from sync binary XHR + buffer[offset + i] = contents.get(position + i); + } + } + return size; + } + // use a custom read function + stream_ops.read = (stream, buffer, offset, length, position) => { + FS.forceLoadFile(node); + return writeChunks(stream, buffer, offset, length, position) + }; + // use a custom mmap function + stream_ops.mmap = (stream, length, position, prot, flags) => { + FS.forceLoadFile(node); + var ptr = mmapAlloc(length); + if (!ptr) { + throw new FS.ErrnoError(48); + } + writeChunks(stream, HEAP8, ptr, length, position); + return { ptr, allocated: true }; + }; + node.stream_ops = stream_ops; + return node; + }, + absolutePath() { + abort('FS.absolutePath has been removed; use PATH_FS.resolve instead'); + }, + createFolder() { + abort('FS.createFolder has been removed; use FS.mkdir instead'); + }, + createLink() { + abort('FS.createLink has been removed; use FS.symlink instead'); + }, + joinPath() { + abort('FS.joinPath has been removed; use PATH.join instead'); + }, + mmapAlloc() { + abort('FS.mmapAlloc has been replaced by the top level function mmapAlloc'); + }, + standardizePath() { + abort('FS.standardizePath has been removed; use PATH.normalize instead'); + }, + }; + + var SYSCALLS = { + DEFAULT_POLLMASK:5, + calculateAt(dirfd, path, allowEmpty) { + if (PATH.isAbs(path)) { + return path; + } + // relative path + var dir; + if (dirfd === -100) { + dir = FS.cwd(); + } else { + var dirstream = SYSCALLS.getStreamFromFD(dirfd); + dir = dirstream.path; + } + if (path.length == 0) { + if (!allowEmpty) { + throw new FS.ErrnoError(44);; + } + return dir; + } + return dir + '/' + path; + }, + writeStat(buf, stat) { + HEAP32[((buf)>>2)] = stat.dev; + HEAP32[(((buf)+(4))>>2)] = stat.mode; + HEAPU32[(((buf)+(8))>>2)] = stat.nlink; + HEAP32[(((buf)+(12))>>2)] = stat.uid; + HEAP32[(((buf)+(16))>>2)] = stat.gid; + HEAP32[(((buf)+(20))>>2)] = stat.rdev; + HEAP64[(((buf)+(24))>>3)] = BigInt(stat.size); + HEAP32[(((buf)+(32))>>2)] = 4096; + HEAP32[(((buf)+(36))>>2)] = stat.blocks; + var atime = stat.atime.getTime(); + var mtime = stat.mtime.getTime(); + var ctime = stat.ctime.getTime(); + HEAP64[(((buf)+(40))>>3)] = BigInt(Math.floor(atime / 1000)); + HEAPU32[(((buf)+(48))>>2)] = (atime % 1000) * 1000 * 1000; + HEAP64[(((buf)+(56))>>3)] = BigInt(Math.floor(mtime / 1000)); + HEAPU32[(((buf)+(64))>>2)] = (mtime % 1000) * 1000 * 1000; + HEAP64[(((buf)+(72))>>3)] = BigInt(Math.floor(ctime / 1000)); + HEAPU32[(((buf)+(80))>>2)] = (ctime % 1000) * 1000 * 1000; + HEAP64[(((buf)+(88))>>3)] = BigInt(stat.ino); + return 0; + }, + writeStatFs(buf, stats) { + HEAP32[(((buf)+(4))>>2)] = stats.bsize; + HEAP32[(((buf)+(40))>>2)] = stats.bsize; + HEAP32[(((buf)+(8))>>2)] = stats.blocks; + HEAP32[(((buf)+(12))>>2)] = stats.bfree; + HEAP32[(((buf)+(16))>>2)] = stats.bavail; + HEAP32[(((buf)+(20))>>2)] = stats.files; + HEAP32[(((buf)+(24))>>2)] = stats.ffree; + HEAP32[(((buf)+(28))>>2)] = stats.fsid; + HEAP32[(((buf)+(44))>>2)] = stats.flags; // ST_NOSUID + HEAP32[(((buf)+(36))>>2)] = stats.namelen; + }, + doMsync(addr, stream, len, flags, offset) { + if (!FS.isFile(stream.node.mode)) { + throw new FS.ErrnoError(43); + } + if (flags & 2) { + // MAP_PRIVATE calls need not to be synced back to underlying fs + return 0; + } + var buffer = HEAPU8.slice(addr, addr + len); + FS.msync(stream, buffer, offset, len, flags); + }, + getStreamFromFD(fd) { + var stream = FS.getStreamChecked(fd); + return stream; + }, + varargs:undefined, + getStr(ptr) { + var ret = UTF8ToString(ptr); + return ret; + }, + }; + function ___syscall_fcntl64(fd, cmd, varargs) { + SYSCALLS.varargs = varargs; + try { + + var stream = SYSCALLS.getStreamFromFD(fd); + switch (cmd) { + case 0: { + var arg = syscallGetVarargI(); + if (arg < 0) { + return -28; + } + while (FS.streams[arg]) { + arg++; + } + var newStream; + newStream = FS.dupStream(stream, arg); + return newStream.fd; + } + case 1: + case 2: + return 0; // FD_CLOEXEC makes no sense for a single process. + case 3: + return stream.flags; + case 4: { + var arg = syscallGetVarargI(); + stream.flags |= arg; + return 0; + } + case 12: { + var arg = syscallGetVarargP(); + var offset = 0; + // We're always unlocked. + HEAP16[(((arg)+(offset))>>1)] = 2; + return 0; + } + case 13: + case 14: + // Pretend that the locking is successful. These are process-level locks, + // and Emscripten programs are a single process. If we supported linking a + // filesystem between programs, we'd need to do more here. + // See https://github.com/emscripten-core/emscripten/issues/23697 + return 0; + } + return -28; + } catch (e) { + if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + return -e.errno; + } + } + + + function ___syscall_ioctl(fd, op, varargs) { + SYSCALLS.varargs = varargs; + try { + + var stream = SYSCALLS.getStreamFromFD(fd); + switch (op) { + case 21509: { + if (!stream.tty) return -59; + return 0; + } + case 21505: { + if (!stream.tty) return -59; + if (stream.tty.ops.ioctl_tcgets) { + var termios = stream.tty.ops.ioctl_tcgets(stream); + var argp = syscallGetVarargP(); + HEAP32[((argp)>>2)] = termios.c_iflag || 0; + HEAP32[(((argp)+(4))>>2)] = termios.c_oflag || 0; + HEAP32[(((argp)+(8))>>2)] = termios.c_cflag || 0; + HEAP32[(((argp)+(12))>>2)] = termios.c_lflag || 0; + for (var i = 0; i < 32; i++) { + HEAP8[(argp + i)+(17)] = termios.c_cc[i] || 0; + } + return 0; + } + return 0; + } + case 21510: + case 21511: + case 21512: { + if (!stream.tty) return -59; + return 0; // no-op, not actually adjusting terminal settings + } + case 21506: + case 21507: + case 21508: { + if (!stream.tty) return -59; + if (stream.tty.ops.ioctl_tcsets) { + var argp = syscallGetVarargP(); + var c_iflag = HEAP32[((argp)>>2)]; + var c_oflag = HEAP32[(((argp)+(4))>>2)]; + var c_cflag = HEAP32[(((argp)+(8))>>2)]; + var c_lflag = HEAP32[(((argp)+(12))>>2)]; + var c_cc = [] + for (var i = 0; i < 32; i++) { + c_cc.push(HEAP8[(argp + i)+(17)]); + } + return stream.tty.ops.ioctl_tcsets(stream.tty, op, { c_iflag, c_oflag, c_cflag, c_lflag, c_cc }); + } + return 0; // no-op, not actually adjusting terminal settings + } + case 21519: { + if (!stream.tty) return -59; + var argp = syscallGetVarargP(); + HEAP32[((argp)>>2)] = 0; + return 0; + } + case 21520: { + if (!stream.tty) return -59; + return -28; // not supported + } + case 21531: { + var argp = syscallGetVarargP(); + return FS.ioctl(stream, op, argp); + } + case 21523: { + // TODO: in theory we should write to the winsize struct that gets + // passed in, but for now musl doesn't read anything on it + if (!stream.tty) return -59; + if (stream.tty.ops.ioctl_tiocgwinsz) { + var winsize = stream.tty.ops.ioctl_tiocgwinsz(stream.tty); + var argp = syscallGetVarargP(); + HEAP16[((argp)>>1)] = winsize[0]; + HEAP16[(((argp)+(2))>>1)] = winsize[1]; + } + return 0; + } + case 21524: { + // TODO: technically, this ioctl call should change the window size. + // but, since emscripten doesn't have any concept of a terminal window + // yet, we'll just silently throw it away as we do TIOCGWINSZ + if (!stream.tty) return -59; + return 0; + } + case 21515: { + if (!stream.tty) return -59; + return 0; + } + default: return -28; // not supported + } + } catch (e) { + if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + return -e.errno; + } + } + + + function ___syscall_openat(dirfd, path, flags, varargs) { + SYSCALLS.varargs = varargs; + try { + + path = SYSCALLS.getStr(path); + path = SYSCALLS.calculateAt(dirfd, path); + var mode = varargs ? syscallGetVarargI() : 0; + return FS.open(path, flags, mode).fd; + } catch (e) { + if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + return -e.errno; + } + } + + var __abort_js = () => + abort('native code called abort()'); + + var isLeapYear = (year) => year%4 === 0 && (year%100 !== 0 || year%400 === 0); + + var MONTH_DAYS_LEAP_CUMULATIVE = [0,31,60,91,121,152,182,213,244,274,305,335]; + + var MONTH_DAYS_REGULAR_CUMULATIVE = [0,31,59,90,120,151,181,212,243,273,304,334]; + var ydayFromDate = (date) => { + var leap = isLeapYear(date.getFullYear()); + var monthDaysCumulative = (leap ? MONTH_DAYS_LEAP_CUMULATIVE : MONTH_DAYS_REGULAR_CUMULATIVE); + var yday = monthDaysCumulative[date.getMonth()] + date.getDate() - 1; // -1 since it's days since Jan 1 + + return yday; + }; + + var INT53_MAX = 9007199254740992; + + var INT53_MIN = -9007199254740992; + var bigintToI53Checked = (num) => (num < INT53_MIN || num > INT53_MAX) ? NaN : Number(num); + function __localtime_js(time, tmPtr) { + time = bigintToI53Checked(time); + + + var date = new Date(time*1000); + HEAP32[((tmPtr)>>2)] = date.getSeconds(); + HEAP32[(((tmPtr)+(4))>>2)] = date.getMinutes(); + HEAP32[(((tmPtr)+(8))>>2)] = date.getHours(); + HEAP32[(((tmPtr)+(12))>>2)] = date.getDate(); + HEAP32[(((tmPtr)+(16))>>2)] = date.getMonth(); + HEAP32[(((tmPtr)+(20))>>2)] = date.getFullYear()-1900; + HEAP32[(((tmPtr)+(24))>>2)] = date.getDay(); + + var yday = ydayFromDate(date)|0; + HEAP32[(((tmPtr)+(28))>>2)] = yday; + HEAP32[(((tmPtr)+(36))>>2)] = -(date.getTimezoneOffset() * 60); + + // Attention: DST is in December in South, and some regions don't have DST at all. + var start = new Date(date.getFullYear(), 0, 1); + var summerOffset = new Date(date.getFullYear(), 6, 1).getTimezoneOffset(); + var winterOffset = start.getTimezoneOffset(); + var dst = (summerOffset != winterOffset && date.getTimezoneOffset() == Math.min(winterOffset, summerOffset))|0; + HEAP32[(((tmPtr)+(32))>>2)] = dst; + ; + } + + + var __mktime_js = function(tmPtr) { + + var ret = (() => { + var date = new Date(HEAP32[(((tmPtr)+(20))>>2)] + 1900, + HEAP32[(((tmPtr)+(16))>>2)], + HEAP32[(((tmPtr)+(12))>>2)], + HEAP32[(((tmPtr)+(8))>>2)], + HEAP32[(((tmPtr)+(4))>>2)], + HEAP32[((tmPtr)>>2)], + 0); + + // There's an ambiguous hour when the time goes back; the tm_isdst field is + // used to disambiguate it. Date() basically guesses, so we fix it up if it + // guessed wrong, or fill in tm_isdst with the guess if it's -1. + var dst = HEAP32[(((tmPtr)+(32))>>2)]; + var guessedOffset = date.getTimezoneOffset(); + var start = new Date(date.getFullYear(), 0, 1); + var summerOffset = new Date(date.getFullYear(), 6, 1).getTimezoneOffset(); + var winterOffset = start.getTimezoneOffset(); + var dstOffset = Math.min(winterOffset, summerOffset); // DST is in December in South + if (dst < 0) { + // Attention: some regions don't have DST at all. + HEAP32[(((tmPtr)+(32))>>2)] = Number(summerOffset != winterOffset && dstOffset == guessedOffset); + } else if ((dst > 0) != (dstOffset == guessedOffset)) { + var nonDstOffset = Math.max(winterOffset, summerOffset); + var trueOffset = dst > 0 ? dstOffset : nonDstOffset; + // Don't try setMinutes(date.getMinutes() + ...) -- it's messed up. + date.setTime(date.getTime() + (trueOffset - guessedOffset)*60000); + } + + HEAP32[(((tmPtr)+(24))>>2)] = date.getDay(); + var yday = ydayFromDate(date)|0; + HEAP32[(((tmPtr)+(28))>>2)] = yday; + // To match expected behavior, update fields from date + HEAP32[((tmPtr)>>2)] = date.getSeconds(); + HEAP32[(((tmPtr)+(4))>>2)] = date.getMinutes(); + HEAP32[(((tmPtr)+(8))>>2)] = date.getHours(); + HEAP32[(((tmPtr)+(12))>>2)] = date.getDate(); + HEAP32[(((tmPtr)+(16))>>2)] = date.getMonth(); + HEAP32[(((tmPtr)+(20))>>2)] = date.getYear(); + + var timeMs = date.getTime(); + if (isNaN(timeMs)) { + return -1; + } + // Return time in microseconds + return timeMs / 1000; + })(); + return BigInt(ret); + }; + + var stringToUTF8 = (str, outPtr, maxBytesToWrite) => { + assert(typeof maxBytesToWrite == 'number', 'stringToUTF8(str, outPtr, maxBytesToWrite) is missing the third parameter that specifies the length of the output buffer!'); + return stringToUTF8Array(str, HEAPU8, outPtr, maxBytesToWrite); + }; + + var __tzset_js = (timezone, daylight, std_name, dst_name) => { + // TODO: Use (malleable) environment variables instead of system settings. + var currentYear = new Date().getFullYear(); + var winter = new Date(currentYear, 0, 1); + var summer = new Date(currentYear, 6, 1); + var winterOffset = winter.getTimezoneOffset(); + var summerOffset = summer.getTimezoneOffset(); + + // Local standard timezone offset. Local standard time is not adjusted for + // daylight savings. This code uses the fact that getTimezoneOffset returns + // a greater value during Standard Time versus Daylight Saving Time (DST). + // Thus it determines the expected output during Standard Time, and it + // compares whether the output of the given date the same (Standard) or less + // (DST). + var stdTimezoneOffset = Math.max(winterOffset, summerOffset); + + // timezone is specified as seconds west of UTC ("The external variable + // `timezone` shall be set to the difference, in seconds, between + // Coordinated Universal Time (UTC) and local standard time."), the same + // as returned by stdTimezoneOffset. + // See http://pubs.opengroup.org/onlinepubs/009695399/functions/tzset.html + HEAPU32[((timezone)>>2)] = stdTimezoneOffset * 60; + + HEAP32[((daylight)>>2)] = Number(winterOffset != summerOffset); + + var extractZone = (timezoneOffset) => { + // Why inverse sign? + // Read here https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/getTimezoneOffset + var sign = timezoneOffset >= 0 ? "-" : "+"; + + var absOffset = Math.abs(timezoneOffset) + var hours = String(Math.floor(absOffset / 60)).padStart(2, "0"); + var minutes = String(absOffset % 60).padStart(2, "0"); + + return `UTC${sign}${hours}${minutes}`; + } + + var winterName = extractZone(winterOffset); + var summerName = extractZone(summerOffset); + assert(winterName); + assert(summerName); + assert(lengthBytesUTF8(winterName) <= 16, `timezone name truncated to fit in TZNAME_MAX (${winterName})`); + assert(lengthBytesUTF8(summerName) <= 16, `timezone name truncated to fit in TZNAME_MAX (${summerName})`); + if (summerOffset < winterOffset) { + // Northern hemisphere + stringToUTF8(winterName, std_name, 17); + stringToUTF8(summerName, dst_name, 17); + } else { + stringToUTF8(winterName, dst_name, 17); + stringToUTF8(summerName, std_name, 17); + } + }; + + var _emscripten_date_now = () => Date.now(); + + var abortOnCannotGrowMemory = (requestedSize) => { + abort(`Cannot enlarge memory arrays to size ${requestedSize} bytes (OOM). Either (1) compile with -sINITIAL_MEMORY=X with X higher than the current value ${HEAP8.length}, (2) compile with -sALLOW_MEMORY_GROWTH which allows increasing the size at runtime, or (3) if you want malloc to return NULL (0) instead of this abort, compile with -sABORTING_MALLOC=0`); + }; + var _emscripten_resize_heap = (requestedSize) => { + var oldSize = HEAPU8.length; + // With CAN_ADDRESS_2GB or MEMORY64, pointers are already unsigned. + requestedSize >>>= 0; + abortOnCannotGrowMemory(requestedSize); + }; + + function _fd_close(fd) { + try { + + var stream = SYSCALLS.getStreamFromFD(fd); + FS.close(stream); + return 0; + } catch (e) { + if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + return e.errno; + } + } + + /** @param {number=} offset */ + var doReadv = (stream, iov, iovcnt, offset) => { + var ret = 0; + for (var i = 0; i < iovcnt; i++) { + var ptr = HEAPU32[((iov)>>2)]; + var len = HEAPU32[(((iov)+(4))>>2)]; + iov += 8; + var curr = FS.read(stream, HEAP8, ptr, len, offset); + if (curr < 0) return -1; + ret += curr; + if (curr < len) break; // nothing more to read + if (typeof offset != 'undefined') { + offset += curr; + } + } + return ret; + }; + + function _fd_read(fd, iov, iovcnt, pnum) { + try { + + var stream = SYSCALLS.getStreamFromFD(fd); + var num = doReadv(stream, iov, iovcnt); + HEAPU32[((pnum)>>2)] = num; + return 0; + } catch (e) { + if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + return e.errno; + } + } + + + function _fd_seek(fd, offset, whence, newOffset) { + offset = bigintToI53Checked(offset); + + + try { + + if (isNaN(offset)) return 61; + var stream = SYSCALLS.getStreamFromFD(fd); + FS.llseek(stream, offset, whence); + HEAP64[((newOffset)>>3)] = BigInt(stream.position); + if (stream.getdents && offset === 0 && whence === 0) stream.getdents = null; // reset readdir state + return 0; + } catch (e) { + if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + return e.errno; + } + ; + } + + /** @param {number=} offset */ + var doWritev = (stream, iov, iovcnt, offset) => { + var ret = 0; + for (var i = 0; i < iovcnt; i++) { + var ptr = HEAPU32[((iov)>>2)]; + var len = HEAPU32[(((iov)+(4))>>2)]; + iov += 8; + var curr = FS.write(stream, HEAP8, ptr, len, offset); + if (curr < 0) return -1; + ret += curr; + if (curr < len) { + // No more space to write. + break; + } + if (typeof offset != 'undefined') { + offset += curr; + } + } + return ret; + }; + + function _fd_write(fd, iov, iovcnt, pnum) { + try { + + var stream = SYSCALLS.getStreamFromFD(fd); + var num = doWritev(stream, iov, iovcnt); + HEAPU32[((pnum)>>2)] = num; + return 0; + } catch (e) { + if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + return e.errno; + } + } + + + var runtimeKeepaliveCounter = 0; + var keepRuntimeAlive = () => noExitRuntime || runtimeKeepaliveCounter > 0; + var _proc_exit = (code) => { + EXITSTATUS = code; + if (!keepRuntimeAlive()) { + Module['onExit']?.(code); + ABORT = true; + } + quit_(code, new ExitStatus(code)); + }; + + + /** @param {boolean|number=} implicit */ + var exitJS = (status, implicit) => { + EXITSTATUS = status; + + checkUnflushedContent(); + + // if exit() was called explicitly, warn the user if the runtime isn't actually being shut down + if (keepRuntimeAlive() && !implicit) { + var msg = `program exited (with status: ${status}), but keepRuntimeAlive() is set (counter=${runtimeKeepaliveCounter}) due to an async operation, so halting execution but not exiting the runtime or preventing further async execution (you can use emscripten_force_exit, if you want to force a true shutdown)`; + err(msg); + } + + _proc_exit(status); + }; + + var handleException = (e) => { + // Certain exception types we do not treat as errors since they are used for + // internal control flow. + // 1. ExitStatus, which is thrown by exit() + // 2. "unwind", which is thrown by emscripten_unwind_to_js_event_loop() and others + // that wish to return to JS event loop. + if (e instanceof ExitStatus || e == 'unwind') { + return EXITSTATUS; + } + checkStackCookie(); + if (e instanceof WebAssembly.RuntimeError) { + if (_emscripten_stack_get_current() <= 0) { + err('Stack overflow detected. You can try increasing -sSTACK_SIZE (currently set to 65536)'); + } + } + quit_(1, e); + }; + + + + var stackAlloc = (sz) => __emscripten_stack_alloc(sz); + var stringToUTF8OnStack = (str) => { + var size = lengthBytesUTF8(str) + 1; + var ret = stackAlloc(size); + stringToUTF8(str, ret, size); + return ret; + }; + + FS.createPreloadedFile = FS_createPreloadedFile; + FS.staticInit(); + // Set module methods based on EXPORTED_RUNTIME_METHODS + ; +// End JS library code + +function checkIncomingModuleAPI() { + ignoredModuleProp('fetchSettings'); +} +var wasmImports = { + /** @export */ + __syscall_fcntl64: ___syscall_fcntl64, + /** @export */ + __syscall_ioctl: ___syscall_ioctl, + /** @export */ + __syscall_openat: ___syscall_openat, + /** @export */ + _abort_js: __abort_js, + /** @export */ + _localtime_js: __localtime_js, + /** @export */ + _mktime_js: __mktime_js, + /** @export */ + _tzset_js: __tzset_js, + /** @export */ + emscripten_date_now: _emscripten_date_now, + /** @export */ + emscripten_resize_heap: _emscripten_resize_heap, + /** @export */ + fd_close: _fd_close, + /** @export */ + fd_read: _fd_read, + /** @export */ + fd_seek: _fd_seek, + /** @export */ + fd_write: _fd_write +}; +var wasmExports; +createWasm(); +var ___wasm_call_ctors = createExportWrapper('__wasm_call_ctors', 0); +var _main = Module['_main'] = createExportWrapper('__main_argc_argv', 2); +var _strerror = createExportWrapper('strerror', 1); +var _fflush = createExportWrapper('fflush', 1); +var _emscripten_stack_init = () => (_emscripten_stack_init = wasmExports['emscripten_stack_init'])(); +var _emscripten_stack_get_free = () => (_emscripten_stack_get_free = wasmExports['emscripten_stack_get_free'])(); +var _emscripten_stack_get_base = () => (_emscripten_stack_get_base = wasmExports['emscripten_stack_get_base'])(); +var _emscripten_stack_get_end = () => (_emscripten_stack_get_end = wasmExports['emscripten_stack_get_end'])(); +var __emscripten_stack_restore = (a0) => (__emscripten_stack_restore = wasmExports['_emscripten_stack_restore'])(a0); +var __emscripten_stack_alloc = (a0) => (__emscripten_stack_alloc = wasmExports['_emscripten_stack_alloc'])(a0); +var _emscripten_stack_get_current = () => (_emscripten_stack_get_current = wasmExports['emscripten_stack_get_current'])(); + + +// include: postamble.js +// === Auto-generated postamble setup entry stuff === + +var missingLibrarySymbols = [ + 'writeI53ToI64', + 'writeI53ToI64Clamped', + 'writeI53ToI64Signaling', + 'writeI53ToU64Clamped', + 'writeI53ToU64Signaling', + 'readI53FromI64', + 'readI53FromU64', + 'convertI32PairToI53', + 'convertI32PairToI53Checked', + 'convertU32PairToI53', + 'getTempRet0', + 'setTempRet0', + 'zeroMemory', + 'getHeapMax', + 'growMemory', + 'inetPton4', + 'inetNtop4', + 'inetPton6', + 'inetNtop6', + 'readSockaddr', + 'writeSockaddr', + 'emscriptenLog', + 'readEmAsmArgs', + 'jstoi_q', + 'getExecutableName', + 'listenOnce', + 'autoResumeAudioContext', + 'getDynCaller', + 'dynCall', + 'runtimeKeepalivePush', + 'runtimeKeepalivePop', + 'callUserCallback', + 'maybeExit', + 'asmjsMangle', + 'alignMemory', + 'HandleAllocator', + 'getNativeTypeSize', + 'addOnInit', + 'addOnPostCtor', + 'addOnPreMain', + 'addOnExit', + 'STACK_SIZE', + 'STACK_ALIGN', + 'POINTER_SIZE', + 'ASSERTIONS', + 'getCFunc', + 'ccall', + 'cwrap', + 'uleb128Encode', + 'sigToWasmTypes', + 'generateFuncType', + 'convertJsFunctionToWasm', + 'getEmptyTableSlot', + 'updateTableMap', + 'getFunctionAddress', + 'addFunction', + 'removeFunction', + 'reallyNegative', + 'unSign', + 'strLen', + 'reSign', + 'formatString', + 'intArrayToString', + 'AsciiToString', + 'stringToAscii', + 'UTF16ToString', + 'stringToUTF16', + 'lengthBytesUTF16', + 'UTF32ToString', + 'stringToUTF32', + 'lengthBytesUTF32', + 'stringToNewUTF8', + 'writeArrayToMemory', + 'registerKeyEventCallback', + 'maybeCStringToJsString', + 'findEventTarget', + 'getBoundingClientRect', + 'fillMouseEventData', + 'registerMouseEventCallback', + 'registerWheelEventCallback', + 'registerUiEventCallback', + 'registerFocusEventCallback', + 'fillDeviceOrientationEventData', + 'registerDeviceOrientationEventCallback', + 'fillDeviceMotionEventData', + 'registerDeviceMotionEventCallback', + 'screenOrientation', + 'fillOrientationChangeEventData', + 'registerOrientationChangeEventCallback', + 'fillFullscreenChangeEventData', + 'registerFullscreenChangeEventCallback', + 'JSEvents_requestFullscreen', + 'JSEvents_resizeCanvasForFullscreen', + 'registerRestoreOldStyle', + 'hideEverythingExceptGivenElement', + 'restoreHiddenElements', + 'setLetterbox', + 'softFullscreenResizeWebGLRenderTarget', + 'doRequestFullscreen', + 'fillPointerlockChangeEventData', + 'registerPointerlockChangeEventCallback', + 'registerPointerlockErrorEventCallback', + 'requestPointerLock', + 'fillVisibilityChangeEventData', + 'registerVisibilityChangeEventCallback', + 'registerTouchEventCallback', + 'fillGamepadEventData', + 'registerGamepadEventCallback', + 'registerBeforeUnloadEventCallback', + 'fillBatteryEventData', + 'battery', + 'registerBatteryEventCallback', + 'setCanvasElementSize', + 'getCanvasElementSize', + 'jsStackTrace', + 'getCallstack', + 'convertPCtoSourceLocation', + 'getEnvStrings', + 'checkWasiClock', + 'wasiRightsToMuslOFlags', + 'wasiOFlagsToMuslOFlags', + 'safeSetTimeout', + 'setImmediateWrapped', + 'safeRequestAnimationFrame', + 'clearImmediateWrapped', + 'registerPostMainLoop', + 'registerPreMainLoop', + 'getPromise', + 'makePromise', + 'idsToPromises', + 'makePromiseCallback', + 'ExceptionInfo', + 'findMatchingCatch', + 'Browser_asyncPrepareDataCounter', + 'arraySum', + 'addDays', + 'getSocketFromFD', + 'getSocketAddress', + 'FS_unlink', + 'FS_mkdirTree', + '_setNetworkCallback', + 'heapObjectForWebGLType', + 'toTypedArrayIndex', + 'webgl_enable_ANGLE_instanced_arrays', + 'webgl_enable_OES_vertex_array_object', + 'webgl_enable_WEBGL_draw_buffers', + 'webgl_enable_WEBGL_multi_draw', + 'webgl_enable_EXT_polygon_offset_clamp', + 'webgl_enable_EXT_clip_control', + 'webgl_enable_WEBGL_polygon_mode', + 'emscriptenWebGLGet', + 'computeUnpackAlignedImageSize', + 'colorChannelsInGlTextureFormat', + 'emscriptenWebGLGetTexPixelData', + 'emscriptenWebGLGetUniform', + 'webglGetUniformLocation', + 'webglPrepareUniformLocationsBeforeFirstUse', + 'webglGetLeftBracePos', + 'emscriptenWebGLGetVertexAttrib', + '__glGetActiveAttribOrUniform', + 'writeGLArray', + 'registerWebGlEventCallback', + 'runAndAbortIfError', + 'ALLOC_NORMAL', + 'ALLOC_STACK', + 'allocate', + 'writeStringToMemory', + 'writeAsciiToMemory', + 'demangle', + 'stackTrace', +]; +missingLibrarySymbols.forEach(missingLibrarySymbol) + +var unexportedSymbols = [ + 'run', + 'addRunDependency', + 'removeRunDependency', + 'out', + 'err', + 'callMain', + 'abort', + 'wasmMemory', + 'wasmExports', + 'writeStackCookie', + 'checkStackCookie', + 'INT53_MAX', + 'INT53_MIN', + 'bigintToI53Checked', + 'stackSave', + 'stackRestore', + 'stackAlloc', + 'ptrToString', + 'exitJS', + 'abortOnCannotGrowMemory', + 'ENV', + 'ERRNO_CODES', + 'strError', + 'DNS', + 'Protocols', + 'Sockets', + 'timers', + 'warnOnce', + 'readEmAsmArgsArray', + 'jstoi_s', + 'handleException', + 'keepRuntimeAlive', + 'asyncLoad', + 'mmapAlloc', + 'wasmTable', + 'noExitRuntime', + 'addOnPreRun', + 'addOnPostRun', + 'freeTableIndexes', + 'functionsInTableMap', + 'setValue', + 'getValue', + 'PATH', + 'PATH_FS', + 'UTF8Decoder', + 'UTF8ArrayToString', + 'UTF8ToString', + 'stringToUTF8Array', + 'stringToUTF8', + 'lengthBytesUTF8', + 'intArrayFromString', + 'UTF16Decoder', + 'stringToUTF8OnStack', + 'JSEvents', + 'specialHTMLTargets', + 'findCanvasEventTarget', + 'currentFullscreenStrategy', + 'restoreOldWindowedStyle', + 'UNWIND_CACHE', + 'ExitStatus', + 'doReadv', + 'doWritev', + 'initRandomFill', + 'randomFill', + 'emSetImmediate', + 'emClearImmediate_deps', + 'emClearImmediate', + 'promiseMap', + 'uncaughtExceptionCount', + 'exceptionLast', + 'exceptionCaught', + 'Browser', + 'getPreloadedImageData__data', + 'wget', + 'MONTH_DAYS_REGULAR', + 'MONTH_DAYS_LEAP', + 'MONTH_DAYS_REGULAR_CUMULATIVE', + 'MONTH_DAYS_LEAP_CUMULATIVE', + 'isLeapYear', + 'ydayFromDate', + 'SYSCALLS', + 'preloadPlugins', + 'FS_createPreloadedFile', + 'FS_modeStringToFlags', + 'FS_getMode', + 'FS_stdin_getChar_buffer', + 'FS_stdin_getChar', + 'FS_createPath', + 'FS_createDevice', + 'FS_readFile', + 'FS', + 'FS_createDataFile', + 'FS_createLazyFile', + 'MEMFS', + 'TTY', + 'PIPEFS', + 'SOCKFS', + 'tempFixedLengthArray', + 'miniTempWebGLFloatBuffers', + 'miniTempWebGLIntBuffers', + 'GL', + 'AL', + 'GLUT', + 'EGL', + 'GLEW', + 'IDBStore', + 'SDL', + 'SDL_gfx', + 'allocateUTF8', + 'allocateUTF8OnStack', + 'print', + 'printErr', +]; +unexportedSymbols.forEach(unexportedRuntimeSymbol); + + + +var calledRun; + +function callMain(args = []) { + assert(runDependencies == 0, 'cannot call main when async dependencies remain! (listen on Module["onRuntimeInitialized"])'); + assert(typeof onPreRuns === 'undefined' || onPreRuns.length == 0, 'cannot call main when preRun functions remain to be called'); + + var entryFunction = _main; + + args.unshift(thisProgram); + + var argc = args.length; + var argv = stackAlloc((argc + 1) * 4); + var argv_ptr = argv; + args.forEach((arg) => { + HEAPU32[((argv_ptr)>>2)] = stringToUTF8OnStack(arg); + argv_ptr += 4; + }); + HEAPU32[((argv_ptr)>>2)] = 0; + + try { + + var ret = entryFunction(argc, argv); + + // if we're not running an evented main loop, it's time to exit + exitJS(ret, /* implicit = */ true); + return ret; + } catch (e) { + return handleException(e); + } +} + +function stackCheckInit() { + // This is normally called automatically during __wasm_call_ctors but need to + // get these values before even running any of the ctors so we call it redundantly + // here. + _emscripten_stack_init(); + // TODO(sbc): Move writeStackCookie to native to to avoid this. + writeStackCookie(); +} + +function run(args = arguments_) { + + if (runDependencies > 0) { + dependenciesFulfilled = run; + return; + } + + stackCheckInit(); + + preRun(); + + // a preRun added a dependency, run will be called later + if (runDependencies > 0) { + dependenciesFulfilled = run; + return; + } + + function doRun() { + // run may have just been called through dependencies being fulfilled just in this very frame, + // or while the async setStatus time below was happening + assert(!calledRun); + calledRun = true; + Module['calledRun'] = true; + + if (ABORT) return; + + initRuntime(); + + preMain(); + + Module['onRuntimeInitialized']?.(); + consumedModuleProp('onRuntimeInitialized'); + + var noInitialRun = Module['noInitialRun'];legacyModuleProp('noInitialRun', 'noInitialRun'); + if (!noInitialRun) callMain(args); + + postRun(); + } + + if (Module['setStatus']) { + Module['setStatus']('Running...'); + setTimeout(() => { + setTimeout(() => Module['setStatus'](''), 1); + doRun(); + }, 1); + } else + { + doRun(); + } + checkStackCookie(); +} + +function checkUnflushedContent() { + // Compiler settings do not allow exiting the runtime, so flushing + // the streams is not possible. but in ASSERTIONS mode we check + // if there was something to flush, and if so tell the user they + // should request that the runtime be exitable. + // Normally we would not even include flush() at all, but in ASSERTIONS + // builds we do so just for this check, and here we see if there is any + // content to flush, that is, we check if there would have been + // something a non-ASSERTIONS build would have not seen. + // How we flush the streams depends on whether we are in SYSCALLS_REQUIRE_FILESYSTEM=0 + // mode (which has its own special function for this; otherwise, all + // the code is inside libc) + var oldOut = out; + var oldErr = err; + var has = false; + out = err = (x) => { + has = true; + } + try { // it doesn't matter if it fails + _fflush(0); + // also flush in the JS FS layer + ['stdout', 'stderr'].forEach((name) => { + var info = FS.analyzePath('/dev/' + name); + if (!info) return; + var stream = info.object; + var rdev = stream.rdev; + var tty = TTY.ttys[rdev]; + if (tty?.output?.length) { + has = true; + } + }); + } catch(e) {} + out = oldOut; + err = oldErr; + if (has) { + warnOnce('stdio streams had content in them that was not flushed. you should set EXIT_RUNTIME to 1 (see the Emscripten FAQ), or make sure to emit a newline when you printf etc.'); + } +} + +if (Module['preInit']) { + if (typeof Module['preInit'] == 'function') Module['preInit'] = [Module['preInit']]; + while (Module['preInit'].length > 0) { + Module['preInit'].pop()(); + } +} +consumedModuleProp('preInit'); + +run(); + +// end include: postamble.js + diff --git a/thirdparty/libzip-1.11.3/build-emcmake/ossfuzz/zip_read_fuzzer.wasm b/thirdparty/libzip-1.11.3/build-emcmake/ossfuzz/zip_read_fuzzer.wasm new file mode 100755 index 0000000000000000000000000000000000000000..b4b419d4a4fed6436a5e34d4c1e4c9f46ba0ff14 GIT binary patch literal 371655 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 literal 0 HcmV?d00001 diff --git a/thirdparty/libzip-1.11.3/build-emcmake/ossfuzz/zip_write_encrypt_pkware_file_fuzzer.js b/thirdparty/libzip-1.11.3/build-emcmake/ossfuzz/zip_write_encrypt_pkware_file_fuzzer.js new file mode 100644 index 0000000..9007630 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/ossfuzz/zip_write_encrypt_pkware_file_fuzzer.js @@ -0,0 +1,4809 @@ +// include: shell.js +// The Module object: Our interface to the outside world. We import +// and export values on it. There are various ways Module can be used: +// 1. Not defined. We create it here +// 2. A function parameter, function(moduleArg) => Promise +// 3. pre-run appended it, var Module = {}; ..generated code.. +// 4. External script tag defines var Module. +// We need to check if Module already exists (e.g. case 3 above). +// Substitution will be replaced with actual code on later stage of the build, +// this way Closure Compiler will not mangle it (e.g. case 4. above). +// Note that if you want to run closure, and also to use Module +// after the generated code, you will need to define var Module = {}; +// before the code. Then that object will be used in the code, and you +// can continue to use Module afterwards as well. +var Module = typeof Module != 'undefined' ? Module : {}; + +// Determine the runtime environment we are in. You can customize this by +// setting the ENVIRONMENT setting at compile time (see settings.js). + +// Attempt to auto-detect the environment +var ENVIRONMENT_IS_WEB = typeof window == 'object'; +var ENVIRONMENT_IS_WORKER = typeof WorkerGlobalScope != 'undefined'; +// N.b. Electron.js environment is simultaneously a NODE-environment, but +// also a web environment. +var ENVIRONMENT_IS_NODE = typeof process == 'object' && typeof process.versions == 'object' && typeof process.versions.node == 'string' && process.type != 'renderer'; +var ENVIRONMENT_IS_SHELL = !ENVIRONMENT_IS_WEB && !ENVIRONMENT_IS_NODE && !ENVIRONMENT_IS_WORKER; + +if (ENVIRONMENT_IS_NODE) { + +} + +// --pre-jses are emitted after the Module integration code, so that they can +// refer to Module (if they choose; they can also define Module) + + +// Sometimes an existing Module object exists with properties +// meant to overwrite the default module functionality. Here +// we collect those properties and reapply _after_ we configure +// the current environment's defaults to avoid having to be so +// defensive during initialization. +var moduleOverrides = {...Module}; + +var arguments_ = []; +var thisProgram = './this.program'; +var quit_ = (status, toThrow) => { + throw toThrow; +}; + +// `/` should be present at the end if `scriptDirectory` is not empty +var scriptDirectory = ''; +function locateFile(path) { + if (Module['locateFile']) { + return Module['locateFile'](path, scriptDirectory); + } + return scriptDirectory + path; +} + +// Hooks that are implemented differently in different runtime environments. +var readAsync, readBinary; + +if (ENVIRONMENT_IS_NODE) { + if (typeof process == 'undefined' || !process.release || process.release.name !== 'node') throw new Error('not compiled for this environment (did you build to HTML and try to run it not on the web, or set ENVIRONMENT to something - like node - and run it someplace else - like on the web?)'); + + var nodeVersion = process.versions.node; + var numericVersion = nodeVersion.split('.').slice(0, 3); + numericVersion = (numericVersion[0] * 10000) + (numericVersion[1] * 100) + (numericVersion[2].split('-')[0] * 1); + var minVersion = 160000; + if (numericVersion < 160000) { + throw new Error('This emscripten-generated code requires node v16.0.0 (detected v' + nodeVersion + ')'); + } + + // These modules will usually be used on Node.js. Load them eagerly to avoid + // the complexity of lazy-loading. + var fs = require('fs'); + var nodePath = require('path'); + + scriptDirectory = __dirname + '/'; + +// include: node_shell_read.js +readBinary = (filename) => { + // We need to re-wrap `file://` strings to URLs. + filename = isFileURI(filename) ? new URL(filename) : filename; + var ret = fs.readFileSync(filename); + assert(Buffer.isBuffer(ret)); + return ret; +}; + +readAsync = async (filename, binary = true) => { + // See the comment in the `readBinary` function. + filename = isFileURI(filename) ? new URL(filename) : filename; + var ret = fs.readFileSync(filename, binary ? undefined : 'utf8'); + assert(binary ? Buffer.isBuffer(ret) : typeof ret == 'string'); + return ret; +}; +// end include: node_shell_read.js + if (!Module['thisProgram'] && process.argv.length > 1) { + thisProgram = process.argv[1].replace(/\\/g, '/'); + } + + arguments_ = process.argv.slice(2); + + if (typeof module != 'undefined') { + module['exports'] = Module; + } + + quit_ = (status, toThrow) => { + process.exitCode = status; + throw toThrow; + }; + +} else +if (ENVIRONMENT_IS_SHELL) { + + if ((typeof process == 'object' && typeof require === 'function') || typeof window == 'object' || typeof WorkerGlobalScope != 'undefined') throw new Error('not compiled for this environment (did you build to HTML and try to run it not on the web, or set ENVIRONMENT to something - like node - and run it someplace else - like on the web?)'); + +} else + +// Note that this includes Node.js workers when relevant (pthreads is enabled). +// Node.js workers are detected as a combination of ENVIRONMENT_IS_WORKER and +// ENVIRONMENT_IS_NODE. +if (ENVIRONMENT_IS_WEB || ENVIRONMENT_IS_WORKER) { + if (ENVIRONMENT_IS_WORKER) { // Check worker, not web, since window could be polyfilled + scriptDirectory = self.location.href; + } else if (typeof document != 'undefined' && document.currentScript) { // web + scriptDirectory = document.currentScript.src; + } + // blob urls look like blob:http://site.com/etc/etc and we cannot infer anything from them. + // otherwise, slice off the final part of the url to find the script directory. + // if scriptDirectory does not contain a slash, lastIndexOf will return -1, + // and scriptDirectory will correctly be replaced with an empty string. + // If scriptDirectory contains a query (starting with ?) or a fragment (starting with #), + // they are removed because they could contain a slash. + if (scriptDirectory.startsWith('blob:')) { + scriptDirectory = ''; + } else { + scriptDirectory = scriptDirectory.slice(0, scriptDirectory.replace(/[?#].*/, '').lastIndexOf('/')+1); + } + + if (!(typeof window == 'object' || typeof WorkerGlobalScope != 'undefined')) throw new Error('not compiled for this environment (did you build to HTML and try to run it not on the web, or set ENVIRONMENT to something - like node - and run it someplace else - like on the web?)'); + + { +// include: web_or_worker_shell_read.js +if (ENVIRONMENT_IS_WORKER) { + readBinary = (url) => { + var xhr = new XMLHttpRequest(); + xhr.open('GET', url, false); + xhr.responseType = 'arraybuffer'; + xhr.send(null); + return new Uint8Array(/** @type{!ArrayBuffer} */(xhr.response)); + }; + } + + readAsync = async (url) => { + // Fetch has some additional restrictions over XHR, like it can't be used on a file:// url. + // See https://github.com/github/fetch/pull/92#issuecomment-140665932 + // Cordova or Electron apps are typically loaded from a file:// url. + // So use XHR on webview if URL is a file URL. + if (isFileURI(url)) { + return new Promise((resolve, reject) => { + var xhr = new XMLHttpRequest(); + xhr.open('GET', url, true); + xhr.responseType = 'arraybuffer'; + xhr.onload = () => { + if (xhr.status == 200 || (xhr.status == 0 && xhr.response)) { // file URLs can return 0 + resolve(xhr.response); + return; + } + reject(xhr.status); + }; + xhr.onerror = reject; + xhr.send(null); + }); + } + var response = await fetch(url, { credentials: 'same-origin' }); + if (response.ok) { + return response.arrayBuffer(); + } + throw new Error(response.status + ' : ' + response.url); + }; +// end include: web_or_worker_shell_read.js + } +} else +{ + throw new Error('environment detection error'); +} + +var out = Module['print'] || console.log.bind(console); +var err = Module['printErr'] || console.error.bind(console); + +// Merge back in the overrides +Object.assign(Module, moduleOverrides); +// Free the object hierarchy contained in the overrides, this lets the GC +// reclaim data used. +moduleOverrides = null; +checkIncomingModuleAPI(); + +// Emit code to handle expected values on the Module object. This applies Module.x +// to the proper local x. This has two benefits: first, we only emit it if it is +// expected to arrive, and second, by using a local everywhere else that can be +// minified. + +if (Module['arguments']) arguments_ = Module['arguments'];legacyModuleProp('arguments', 'arguments_'); + +if (Module['thisProgram']) thisProgram = Module['thisProgram'];legacyModuleProp('thisProgram', 'thisProgram'); + +// perform assertions in shell.js after we set up out() and err(), as otherwise if an assertion fails it cannot print the message +// Assertions on removed incoming Module JS APIs. +assert(typeof Module['memoryInitializerPrefixURL'] == 'undefined', 'Module.memoryInitializerPrefixURL option was removed, use Module.locateFile instead'); +assert(typeof Module['pthreadMainPrefixURL'] == 'undefined', 'Module.pthreadMainPrefixURL option was removed, use Module.locateFile instead'); +assert(typeof Module['cdInitializerPrefixURL'] == 'undefined', 'Module.cdInitializerPrefixURL option was removed, use Module.locateFile instead'); +assert(typeof Module['filePackagePrefixURL'] == 'undefined', 'Module.filePackagePrefixURL option was removed, use Module.locateFile instead'); +assert(typeof Module['read'] == 'undefined', 'Module.read option was removed'); +assert(typeof Module['readAsync'] == 'undefined', 'Module.readAsync option was removed (modify readAsync in JS)'); +assert(typeof Module['readBinary'] == 'undefined', 'Module.readBinary option was removed (modify readBinary in JS)'); +assert(typeof Module['setWindowTitle'] == 'undefined', 'Module.setWindowTitle option was removed (modify emscripten_set_window_title in JS)'); +assert(typeof Module['TOTAL_MEMORY'] == 'undefined', 'Module.TOTAL_MEMORY has been renamed Module.INITIAL_MEMORY'); +legacyModuleProp('asm', 'wasmExports'); +legacyModuleProp('readAsync', 'readAsync'); +legacyModuleProp('readBinary', 'readBinary'); +legacyModuleProp('setWindowTitle', 'setWindowTitle'); +var IDBFS = 'IDBFS is no longer included by default; build with -lidbfs.js'; +var PROXYFS = 'PROXYFS is no longer included by default; build with -lproxyfs.js'; +var WORKERFS = 'WORKERFS is no longer included by default; build with -lworkerfs.js'; +var FETCHFS = 'FETCHFS is no longer included by default; build with -lfetchfs.js'; +var ICASEFS = 'ICASEFS is no longer included by default; build with -licasefs.js'; +var JSFILEFS = 'JSFILEFS is no longer included by default; build with -ljsfilefs.js'; +var OPFS = 'OPFS is no longer included by default; build with -lopfs.js'; + +var NODEFS = 'NODEFS is no longer included by default; build with -lnodefs.js'; + +assert(!ENVIRONMENT_IS_SHELL, 'shell environment detected but not enabled at build time. Add `shell` to `-sENVIRONMENT` to enable.'); + +// end include: shell.js + +// include: preamble.js +// === Preamble library stuff === + +// Documentation for the public APIs defined in this file must be updated in: +// site/source/docs/api_reference/preamble.js.rst +// A prebuilt local version of the documentation is available at: +// site/build/text/docs/api_reference/preamble.js.txt +// You can also build docs locally as HTML or other formats in site/ +// An online HTML version (which may be of a different version of Emscripten) +// is up at http://kripken.github.io/emscripten-site/docs/api_reference/preamble.js.html + +var wasmBinary = Module['wasmBinary'];legacyModuleProp('wasmBinary', 'wasmBinary'); + +if (typeof WebAssembly != 'object') { + err('no native wasm support detected'); +} + +// Wasm globals + +var wasmMemory; + +//======================================== +// Runtime essentials +//======================================== + +// whether we are quitting the application. no code should run after this. +// set in exit() and abort() +var ABORT = false; + +// set by exit() and abort(). Passed to 'onExit' handler. +// NOTE: This is also used as the process return code code in shell environments +// but only when noExitRuntime is false. +var EXITSTATUS; + +// In STRICT mode, we only define assert() when ASSERTIONS is set. i.e. we +// don't define it at all in release modes. This matches the behaviour of +// MINIMAL_RUNTIME. +// TODO(sbc): Make this the default even without STRICT enabled. +/** @type {function(*, string=)} */ +function assert(condition, text) { + if (!condition) { + abort('Assertion failed' + (text ? ': ' + text : '')); + } +} + +// We used to include malloc/free by default in the past. Show a helpful error in +// builds with assertions. +function _malloc() { + abort('malloc() called but not included in the build - add `_malloc` to EXPORTED_FUNCTIONS'); +} +function _free() { + // Show a helpful error since we used to include free by default in the past. + abort('free() called but not included in the build - add `_free` to EXPORTED_FUNCTIONS'); +} + +// Memory management + +var HEAP, +/** @type {!Int8Array} */ + HEAP8, +/** @type {!Uint8Array} */ + HEAPU8, +/** @type {!Int16Array} */ + HEAP16, +/** @type {!Uint16Array} */ + HEAPU16, +/** @type {!Int32Array} */ + HEAP32, +/** @type {!Uint32Array} */ + HEAPU32, +/** @type {!Float32Array} */ + HEAPF32, +/* BigInt64Array type is not correctly defined in closure +/** not-@type {!BigInt64Array} */ + HEAP64, +/* BigUint64Array type is not correctly defined in closure +/** not-t@type {!BigUint64Array} */ + HEAPU64, +/** @type {!Float64Array} */ + HEAPF64; + +var runtimeInitialized = false; + +/** + * Indicates whether filename is delivered via file protocol (as opposed to http/https) + * @noinline + */ +var isFileURI = (filename) => filename.startsWith('file://'); + +// include: runtime_shared.js +// include: runtime_stack_check.js +// Initializes the stack cookie. Called at the startup of main and at the startup of each thread in pthreads mode. +function writeStackCookie() { + var max = _emscripten_stack_get_end(); + assert((max & 3) == 0); + // If the stack ends at address zero we write our cookies 4 bytes into the + // stack. This prevents interference with SAFE_HEAP and ASAN which also + // monitor writes to address zero. + if (max == 0) { + max += 4; + } + // The stack grow downwards towards _emscripten_stack_get_end. + // We write cookies to the final two words in the stack and detect if they are + // ever overwritten. + HEAPU32[((max)>>2)] = 0x02135467; + HEAPU32[(((max)+(4))>>2)] = 0x89BACDFE; + // Also test the global address 0 for integrity. + HEAPU32[((0)>>2)] = 1668509029; +} + +function checkStackCookie() { + if (ABORT) return; + var max = _emscripten_stack_get_end(); + // See writeStackCookie(). + if (max == 0) { + max += 4; + } + var cookie1 = HEAPU32[((max)>>2)]; + var cookie2 = HEAPU32[(((max)+(4))>>2)]; + if (cookie1 != 0x02135467 || cookie2 != 0x89BACDFE) { + abort(`Stack overflow! Stack cookie has been overwritten at ${ptrToString(max)}, expected hex dwords 0x89BACDFE and 0x2135467, but received ${ptrToString(cookie2)} ${ptrToString(cookie1)}`); + } + // Also test the global address 0 for integrity. + if (HEAPU32[((0)>>2)] != 0x63736d65 /* 'emsc' */) { + abort('Runtime error: The application has corrupted its heap memory area (address zero)!'); + } +} +// end include: runtime_stack_check.js +// include: runtime_exceptions.js +// end include: runtime_exceptions.js +// include: runtime_debug.js +// Endianness check +(() => { + var h16 = new Int16Array(1); + var h8 = new Int8Array(h16.buffer); + h16[0] = 0x6373; + if (h8[0] !== 0x73 || h8[1] !== 0x63) throw 'Runtime error: expected the system to be little-endian! (Run with -sSUPPORT_BIG_ENDIAN to bypass)'; +})(); + +if (Module['ENVIRONMENT']) { + throw new Error('Module.ENVIRONMENT has been deprecated. To force the environment, use the ENVIRONMENT compile-time option (for example, -sENVIRONMENT=web or -sENVIRONMENT=node)'); +} + +function legacyModuleProp(prop, newName, incoming=true) { + if (!Object.getOwnPropertyDescriptor(Module, prop)) { + Object.defineProperty(Module, prop, { + configurable: true, + get() { + let extra = incoming ? ' (the initial value can be provided on Module, but after startup the value is only looked for on a local variable of that name)' : ''; + abort(`\`Module.${prop}\` has been replaced by \`${newName}\`` + extra); + + } + }); + } +} + +function consumedModuleProp(prop) { + if (!Object.getOwnPropertyDescriptor(Module, prop)) { + Object.defineProperty(Module, prop, { + configurable: true, + set() { + abort(`Attempt to set \`Module.${prop}\` after it has already been processed. This can happen, for example, when code is injected via '--post-js' rather than '--pre-js'`); + + } + }); + } +} + +function ignoredModuleProp(prop) { + if (Object.getOwnPropertyDescriptor(Module, prop)) { + abort(`\`Module.${prop}\` was supplied but \`${prop}\` not included in INCOMING_MODULE_JS_API`); + } +} + +// forcing the filesystem exports a few things by default +function isExportedByForceFilesystem(name) { + return name === 'FS_createPath' || + name === 'FS_createDataFile' || + name === 'FS_createPreloadedFile' || + name === 'FS_unlink' || + name === 'addRunDependency' || + // The old FS has some functionality that WasmFS lacks. + name === 'FS_createLazyFile' || + name === 'FS_createDevice' || + name === 'removeRunDependency'; +} + +/** + * Intercept access to a global symbol. This enables us to give informative + * warnings/errors when folks attempt to use symbols they did not include in + * their build, or no symbols that no longer exist. + */ +function hookGlobalSymbolAccess(sym, func) { + if (typeof globalThis != 'undefined' && !Object.getOwnPropertyDescriptor(globalThis, sym)) { + Object.defineProperty(globalThis, sym, { + configurable: true, + get() { + func(); + return undefined; + } + }); + } +} + +function missingGlobal(sym, msg) { + hookGlobalSymbolAccess(sym, () => { + warnOnce(`\`${sym}\` is not longer defined by emscripten. ${msg}`); + }); +} + +missingGlobal('buffer', 'Please use HEAP8.buffer or wasmMemory.buffer'); +missingGlobal('asm', 'Please use wasmExports instead'); + +function missingLibrarySymbol(sym) { + hookGlobalSymbolAccess(sym, () => { + // Can't `abort()` here because it would break code that does runtime + // checks. e.g. `if (typeof SDL === 'undefined')`. + var msg = `\`${sym}\` is a library symbol and not included by default; add it to your library.js __deps or to DEFAULT_LIBRARY_FUNCS_TO_INCLUDE on the command line`; + // DEFAULT_LIBRARY_FUNCS_TO_INCLUDE requires the name as it appears in + // library.js, which means $name for a JS name with no prefix, or name + // for a JS name like _name. + var librarySymbol = sym; + if (!librarySymbol.startsWith('_')) { + librarySymbol = '$' + sym; + } + msg += ` (e.g. -sDEFAULT_LIBRARY_FUNCS_TO_INCLUDE='${librarySymbol}')`; + if (isExportedByForceFilesystem(sym)) { + msg += '. Alternatively, forcing filesystem support (-sFORCE_FILESYSTEM) can export this for you'; + } + warnOnce(msg); + }); + + // Any symbol that is not included from the JS library is also (by definition) + // not exported on the Module object. + unexportedRuntimeSymbol(sym); +} + +function unexportedRuntimeSymbol(sym) { + if (!Object.getOwnPropertyDescriptor(Module, sym)) { + Object.defineProperty(Module, sym, { + configurable: true, + get() { + var msg = `'${sym}' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the Emscripten FAQ)`; + if (isExportedByForceFilesystem(sym)) { + msg += '. Alternatively, forcing filesystem support (-sFORCE_FILESYSTEM) can export this for you'; + } + abort(msg); + } + }); + } +} + +var runtimeDebug = true; // Switch to false at runtime to disable logging at the right times + +// Used by XXXXX_DEBUG settings to output debug messages. +function dbg(...args) { + if (!runtimeDebug && typeof runtimeDebug != 'undefined') return; + // TODO(sbc): Make this configurable somehow. Its not always convenient for + // logging to show up as warnings. + console.warn(...args); +} +// end include: runtime_debug.js +// include: memoryprofiler.js +// end include: memoryprofiler.js + + +function updateMemoryViews() { + var b = wasmMemory.buffer; + Module['HEAP8'] = HEAP8 = new Int8Array(b); + Module['HEAP16'] = HEAP16 = new Int16Array(b); + Module['HEAPU8'] = HEAPU8 = new Uint8Array(b); + Module['HEAPU16'] = HEAPU16 = new Uint16Array(b); + Module['HEAP32'] = HEAP32 = new Int32Array(b); + Module['HEAPU32'] = HEAPU32 = new Uint32Array(b); + Module['HEAPF32'] = HEAPF32 = new Float32Array(b); + Module['HEAPF64'] = HEAPF64 = new Float64Array(b); + Module['HEAP64'] = HEAP64 = new BigInt64Array(b); + Module['HEAPU64'] = HEAPU64 = new BigUint64Array(b); +} + +// end include: runtime_shared.js +assert(!Module['STACK_SIZE'], 'STACK_SIZE can no longer be set at runtime. Use -sSTACK_SIZE at link time') + +assert(typeof Int32Array != 'undefined' && typeof Float64Array !== 'undefined' && Int32Array.prototype.subarray != undefined && Int32Array.prototype.set != undefined, + 'JS engine does not provide full typed array support'); + +// If memory is defined in wasm, the user can't provide it, or set INITIAL_MEMORY +assert(!Module['wasmMemory'], 'Use of `wasmMemory` detected. Use -sIMPORTED_MEMORY to define wasmMemory externally'); +assert(!Module['INITIAL_MEMORY'], 'Detected runtime INITIAL_MEMORY setting. Use -sIMPORTED_MEMORY to define wasmMemory dynamically'); + +function preRun() { + if (Module['preRun']) { + if (typeof Module['preRun'] == 'function') Module['preRun'] = [Module['preRun']]; + while (Module['preRun'].length) { + addOnPreRun(Module['preRun'].shift()); + } + } + consumedModuleProp('preRun'); + callRuntimeCallbacks(onPreRuns); +} + +function initRuntime() { + assert(!runtimeInitialized); + runtimeInitialized = true; + + checkStackCookie(); + + if (!Module['noFSInit'] && !FS.initialized) FS.init(); +TTY.init(); + + wasmExports['__wasm_call_ctors'](); + + FS.ignorePermissions = false; +} + +function preMain() { + checkStackCookie(); + +} + +function postRun() { + checkStackCookie(); + + if (Module['postRun']) { + if (typeof Module['postRun'] == 'function') Module['postRun'] = [Module['postRun']]; + while (Module['postRun'].length) { + addOnPostRun(Module['postRun'].shift()); + } + } + consumedModuleProp('postRun'); + + callRuntimeCallbacks(onPostRuns); +} + +// A counter of dependencies for calling run(). If we need to +// do asynchronous work before running, increment this and +// decrement it. Incrementing must happen in a place like +// Module.preRun (used by emcc to add file preloading). +// Note that you can add dependencies in preRun, even though +// it happens right before run - run will be postponed until +// the dependencies are met. +var runDependencies = 0; +var dependenciesFulfilled = null; // overridden to take different actions when all run dependencies are fulfilled +var runDependencyTracking = {}; +var runDependencyWatcher = null; + +function getUniqueRunDependency(id) { + var orig = id; + while (1) { + if (!runDependencyTracking[id]) return id; + id = orig + Math.random(); + } +} + +function addRunDependency(id) { + runDependencies++; + + Module['monitorRunDependencies']?.(runDependencies); + + if (id) { + assert(!runDependencyTracking[id]); + runDependencyTracking[id] = 1; + if (runDependencyWatcher === null && typeof setInterval != 'undefined') { + // Check for missing dependencies every few seconds + runDependencyWatcher = setInterval(() => { + if (ABORT) { + clearInterval(runDependencyWatcher); + runDependencyWatcher = null; + return; + } + var shown = false; + for (var dep in runDependencyTracking) { + if (!shown) { + shown = true; + err('still waiting on run dependencies:'); + } + err(`dependency: ${dep}`); + } + if (shown) { + err('(end of list)'); + } + }, 10000); + } + } else { + err('warning: run dependency added without ID'); + } +} + +function removeRunDependency(id) { + runDependencies--; + + Module['monitorRunDependencies']?.(runDependencies); + + if (id) { + assert(runDependencyTracking[id]); + delete runDependencyTracking[id]; + } else { + err('warning: run dependency removed without ID'); + } + if (runDependencies == 0) { + if (runDependencyWatcher !== null) { + clearInterval(runDependencyWatcher); + runDependencyWatcher = null; + } + if (dependenciesFulfilled) { + var callback = dependenciesFulfilled; + dependenciesFulfilled = null; + callback(); // can add another dependenciesFulfilled + } + } +} + +/** @param {string|number=} what */ +function abort(what) { + Module['onAbort']?.(what); + + what = 'Aborted(' + what + ')'; + // TODO(sbc): Should we remove printing and leave it up to whoever + // catches the exception? + err(what); + + ABORT = true; + + // Use a wasm runtime error, because a JS error might be seen as a foreign + // exception, which means we'd run destructors on it. We need the error to + // simply make the program stop. + // FIXME This approach does not work in Wasm EH because it currently does not assume + // all RuntimeErrors are from traps; it decides whether a RuntimeError is from + // a trap or not based on a hidden field within the object. So at the moment + // we don't have a way of throwing a wasm trap from JS. TODO Make a JS API that + // allows this in the wasm spec. + + // Suppress closure compiler warning here. Closure compiler's builtin extern + // definition for WebAssembly.RuntimeError claims it takes no arguments even + // though it can. + // TODO(https://github.com/google/closure-compiler/pull/3913): Remove if/when upstream closure gets fixed. + /** @suppress {checkTypes} */ + var e = new WebAssembly.RuntimeError(what); + + // Throw the error whether or not MODULARIZE is set because abort is used + // in code paths apart from instantiation where an exception is expected + // to be thrown when abort is called. + throw e; +} + +function createExportWrapper(name, nargs) { + return (...args) => { + assert(runtimeInitialized, `native function \`${name}\` called before runtime initialization`); + var f = wasmExports[name]; + assert(f, `exported native function \`${name}\` not found`); + // Only assert for too many arguments. Too few can be valid since the missing arguments will be zero filled. + assert(args.length <= nargs, `native function \`${name}\` called with ${args.length} args but expects ${nargs}`); + return f(...args); + }; +} + +var wasmBinaryFile; + +function findWasmBinary() { + return locateFile('zip_write_encrypt_pkware_file_fuzzer.wasm'); +} + +function getBinarySync(file) { + if (file == wasmBinaryFile && wasmBinary) { + return new Uint8Array(wasmBinary); + } + if (readBinary) { + return readBinary(file); + } + throw 'both async and sync fetching of the wasm failed'; +} + +async function getWasmBinary(binaryFile) { + // If we don't have the binary yet, load it asynchronously using readAsync. + if (!wasmBinary) { + // Fetch the binary using readAsync + try { + var response = await readAsync(binaryFile); + return new Uint8Array(response); + } catch { + // Fall back to getBinarySync below; + } + } + + // Otherwise, getBinarySync should be able to get it synchronously + return getBinarySync(binaryFile); +} + +async function instantiateArrayBuffer(binaryFile, imports) { + try { + var binary = await getWasmBinary(binaryFile); + var instance = await WebAssembly.instantiate(binary, imports); + return instance; + } catch (reason) { + err(`failed to asynchronously prepare wasm: ${reason}`); + + // Warn on some common problems. + if (isFileURI(wasmBinaryFile)) { + err(`warning: Loading from a file URI (${wasmBinaryFile}) is not supported in most browsers. See https://emscripten.org/docs/getting_started/FAQ.html#how-do-i-run-a-local-webserver-for-testing-why-does-my-program-stall-in-downloading-or-preparing`); + } + abort(reason); + } +} + +async function instantiateAsync(binary, binaryFile, imports) { + if (!binary && typeof WebAssembly.instantiateStreaming == 'function' + // Don't use streaming for file:// delivered objects in a webview, fetch them synchronously. + && !isFileURI(binaryFile) + // Avoid instantiateStreaming() on Node.js environment for now, as while + // Node.js v18.1.0 implements it, it does not have a full fetch() + // implementation yet. + // + // Reference: + // https://github.com/emscripten-core/emscripten/pull/16917 + && !ENVIRONMENT_IS_NODE + ) { + try { + var response = fetch(binaryFile, { credentials: 'same-origin' }); + var instantiationResult = await WebAssembly.instantiateStreaming(response, imports); + return instantiationResult; + } catch (reason) { + // We expect the most common failure cause to be a bad MIME type for the binary, + // in which case falling back to ArrayBuffer instantiation should work. + err(`wasm streaming compile failed: ${reason}`); + err('falling back to ArrayBuffer instantiation'); + // fall back of instantiateArrayBuffer below + }; + } + return instantiateArrayBuffer(binaryFile, imports); +} + +function getWasmImports() { + // prepare imports + return { + 'env': wasmImports, + 'wasi_snapshot_preview1': wasmImports, + } +} + +// Create the wasm instance. +// Receives the wasm imports, returns the exports. +async function createWasm() { + // Load the wasm module and create an instance of using native support in the JS engine. + // handle a generated wasm instance, receiving its exports and + // performing other necessary setup + /** @param {WebAssembly.Module=} module*/ + function receiveInstance(instance, module) { + wasmExports = instance.exports; + + + + wasmMemory = wasmExports['memory']; + + assert(wasmMemory, 'memory not found in wasm exports'); + updateMemoryViews(); + + removeRunDependency('wasm-instantiate'); + return wasmExports; + } + // wait for the pthread pool (if any) + addRunDependency('wasm-instantiate'); + + // Prefer streaming instantiation if available. + // Async compilation can be confusing when an error on the page overwrites Module + // (for example, if the order of elements is wrong, and the one defining Module is + // later), so we save Module and check it later. + var trueModule = Module; + function receiveInstantiationResult(result) { + // 'result' is a ResultObject object which has both the module and instance. + // receiveInstance() will swap in the exports (to Module.asm) so they can be called + assert(Module === trueModule, 'the Module object should not be replaced during async compilation - perhaps the order of HTML elements is wrong?'); + trueModule = null; + // TODO: Due to Closure regression https://github.com/google/closure-compiler/issues/3193, the above line no longer optimizes out down to the following line. + // When the regression is fixed, can restore the above PTHREADS-enabled path. + return receiveInstance(result['instance']); + } + + var info = getWasmImports(); + + // User shell pages can write their own Module.instantiateWasm = function(imports, successCallback) callback + // to manually instantiate the Wasm module themselves. This allows pages to + // run the instantiation parallel to any other async startup actions they are + // performing. + // Also pthreads and wasm workers initialize the wasm instance through this + // path. + if (Module['instantiateWasm']) { + return new Promise((resolve, reject) => { + try { + Module['instantiateWasm'](info, (mod, inst) => { + receiveInstance(mod, inst); + resolve(mod.exports); + }); + } catch(e) { + err(`Module.instantiateWasm callback failed with error: ${e}`); + reject(e); + } + }); + } + + wasmBinaryFile ??= findWasmBinary(); + var result = await instantiateAsync(wasmBinary, wasmBinaryFile, info); + var exports = receiveInstantiationResult(result); + return exports; +} + +// end include: preamble.js + +// Begin JS library code + + + class ExitStatus { + name = 'ExitStatus'; + constructor(status) { + this.message = `Program terminated with exit(${status})`; + this.status = status; + } + } + + var callRuntimeCallbacks = (callbacks) => { + while (callbacks.length > 0) { + // Pass the module as the first argument. + callbacks.shift()(Module); + } + }; + var onPostRuns = []; + var addOnPostRun = (cb) => onPostRuns.unshift(cb); + + var onPreRuns = []; + var addOnPreRun = (cb) => onPreRuns.unshift(cb); + + + + /** + * @param {number} ptr + * @param {string} type + */ + function getValue(ptr, type = 'i8') { + if (type.endsWith('*')) type = '*'; + switch (type) { + case 'i1': return HEAP8[ptr]; + case 'i8': return HEAP8[ptr]; + case 'i16': return HEAP16[((ptr)>>1)]; + case 'i32': return HEAP32[((ptr)>>2)]; + case 'i64': return HEAP64[((ptr)>>3)]; + case 'float': return HEAPF32[((ptr)>>2)]; + case 'double': return HEAPF64[((ptr)>>3)]; + case '*': return HEAPU32[((ptr)>>2)]; + default: abort(`invalid type for getValue: ${type}`); + } + } + + var noExitRuntime = Module['noExitRuntime'] || true; + + var ptrToString = (ptr) => { + assert(typeof ptr === 'number'); + // With CAN_ADDRESS_2GB or MEMORY64, pointers are already unsigned. + ptr >>>= 0; + return '0x' + ptr.toString(16).padStart(8, '0'); + }; + + + /** + * @param {number} ptr + * @param {number} value + * @param {string} type + */ + function setValue(ptr, value, type = 'i8') { + if (type.endsWith('*')) type = '*'; + switch (type) { + case 'i1': HEAP8[ptr] = value; break; + case 'i8': HEAP8[ptr] = value; break; + case 'i16': HEAP16[((ptr)>>1)] = value; break; + case 'i32': HEAP32[((ptr)>>2)] = value; break; + case 'i64': HEAP64[((ptr)>>3)] = BigInt(value); break; + case 'float': HEAPF32[((ptr)>>2)] = value; break; + case 'double': HEAPF64[((ptr)>>3)] = value; break; + case '*': HEAPU32[((ptr)>>2)] = value; break; + default: abort(`invalid type for setValue: ${type}`); + } + } + + var stackRestore = (val) => __emscripten_stack_restore(val); + + var stackSave = () => _emscripten_stack_get_current(); + + var warnOnce = (text) => { + warnOnce.shown ||= {}; + if (!warnOnce.shown[text]) { + warnOnce.shown[text] = 1; + if (ENVIRONMENT_IS_NODE) text = 'warning: ' + text; + err(text); + } + }; + + var PATH = { + isAbs:(path) => path.charAt(0) === '/', + splitPath:(filename) => { + var splitPathRe = /^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/; + return splitPathRe.exec(filename).slice(1); + }, + normalizeArray:(parts, allowAboveRoot) => { + // if the path tries to go above the root, `up` ends up > 0 + var up = 0; + for (var i = parts.length - 1; i >= 0; i--) { + var last = parts[i]; + if (last === '.') { + parts.splice(i, 1); + } else if (last === '..') { + parts.splice(i, 1); + up++; + } else if (up) { + parts.splice(i, 1); + up--; + } + } + // if the path is allowed to go above the root, restore leading ..s + if (allowAboveRoot) { + for (; up; up--) { + parts.unshift('..'); + } + } + return parts; + }, + normalize:(path) => { + var isAbsolute = PATH.isAbs(path), + trailingSlash = path.slice(-1) === '/'; + // Normalize the path + path = PATH.normalizeArray(path.split('/').filter((p) => !!p), !isAbsolute).join('/'); + if (!path && !isAbsolute) { + path = '.'; + } + if (path && trailingSlash) { + path += '/'; + } + return (isAbsolute ? '/' : '') + path; + }, + dirname:(path) => { + var result = PATH.splitPath(path), + root = result[0], + dir = result[1]; + if (!root && !dir) { + // No dirname whatsoever + return '.'; + } + if (dir) { + // It has a dirname, strip trailing slash + dir = dir.slice(0, -1); + } + return root + dir; + }, + basename:(path) => path && path.match(/([^\/]+|\/)\/*$/)[1], + join:(...paths) => PATH.normalize(paths.join('/')), + join2:(l, r) => PATH.normalize(l + '/' + r), + }; + + var initRandomFill = () => { + // This block is not needed on v19+ since crypto.getRandomValues is builtin + if (ENVIRONMENT_IS_NODE) { + var nodeCrypto = require('crypto'); + return (view) => nodeCrypto.randomFillSync(view); + } + + return (view) => crypto.getRandomValues(view); + }; + var randomFill = (view) => { + // Lazily init on the first invocation. + (randomFill = initRandomFill())(view); + }; + + + + var PATH_FS = { + resolve:(...args) => { + var resolvedPath = '', + resolvedAbsolute = false; + for (var i = args.length - 1; i >= -1 && !resolvedAbsolute; i--) { + var path = (i >= 0) ? args[i] : FS.cwd(); + // Skip empty and invalid entries + if (typeof path != 'string') { + throw new TypeError('Arguments to path.resolve must be strings'); + } else if (!path) { + return ''; // an invalid portion invalidates the whole thing + } + resolvedPath = path + '/' + resolvedPath; + resolvedAbsolute = PATH.isAbs(path); + } + // At this point the path should be resolved to a full absolute path, but + // handle relative paths to be safe (might happen when process.cwd() fails) + resolvedPath = PATH.normalizeArray(resolvedPath.split('/').filter((p) => !!p), !resolvedAbsolute).join('/'); + return ((resolvedAbsolute ? '/' : '') + resolvedPath) || '.'; + }, + relative:(from, to) => { + from = PATH_FS.resolve(from).slice(1); + to = PATH_FS.resolve(to).slice(1); + function trim(arr) { + var start = 0; + for (; start < arr.length; start++) { + if (arr[start] !== '') break; + } + var end = arr.length - 1; + for (; end >= 0; end--) { + if (arr[end] !== '') break; + } + if (start > end) return []; + return arr.slice(start, end - start + 1); + } + var fromParts = trim(from.split('/')); + var toParts = trim(to.split('/')); + var length = Math.min(fromParts.length, toParts.length); + var samePartsLength = length; + for (var i = 0; i < length; i++) { + if (fromParts[i] !== toParts[i]) { + samePartsLength = i; + break; + } + } + var outputParts = []; + for (var i = samePartsLength; i < fromParts.length; i++) { + outputParts.push('..'); + } + outputParts = outputParts.concat(toParts.slice(samePartsLength)); + return outputParts.join('/'); + }, + }; + + + var UTF8Decoder = typeof TextDecoder != 'undefined' ? new TextDecoder() : undefined; + + /** + * Given a pointer 'idx' to a null-terminated UTF8-encoded string in the given + * array that contains uint8 values, returns a copy of that string as a + * Javascript String object. + * heapOrArray is either a regular array, or a JavaScript typed array view. + * @param {number=} idx + * @param {number=} maxBytesToRead + * @return {string} + */ + var UTF8ArrayToString = (heapOrArray, idx = 0, maxBytesToRead = NaN) => { + var endIdx = idx + maxBytesToRead; + var endPtr = idx; + // TextDecoder needs to know the byte length in advance, it doesn't stop on + // null terminator by itself. Also, use the length info to avoid running tiny + // strings through TextDecoder, since .subarray() allocates garbage. + // (As a tiny code save trick, compare endPtr against endIdx using a negation, + // so that undefined/NaN means Infinity) + while (heapOrArray[endPtr] && !(endPtr >= endIdx)) ++endPtr; + + if (endPtr - idx > 16 && heapOrArray.buffer && UTF8Decoder) { + return UTF8Decoder.decode(heapOrArray.subarray(idx, endPtr)); + } + var str = ''; + // If building with TextDecoder, we have already computed the string length + // above, so test loop end condition against that + while (idx < endPtr) { + // For UTF8 byte structure, see: + // http://en.wikipedia.org/wiki/UTF-8#Description + // https://www.ietf.org/rfc/rfc2279.txt + // https://tools.ietf.org/html/rfc3629 + var u0 = heapOrArray[idx++]; + if (!(u0 & 0x80)) { str += String.fromCharCode(u0); continue; } + var u1 = heapOrArray[idx++] & 63; + if ((u0 & 0xE0) == 0xC0) { str += String.fromCharCode(((u0 & 31) << 6) | u1); continue; } + var u2 = heapOrArray[idx++] & 63; + if ((u0 & 0xF0) == 0xE0) { + u0 = ((u0 & 15) << 12) | (u1 << 6) | u2; + } else { + if ((u0 & 0xF8) != 0xF0) warnOnce('Invalid UTF-8 leading byte ' + ptrToString(u0) + ' encountered when deserializing a UTF-8 string in wasm memory to a JS string!'); + u0 = ((u0 & 7) << 18) | (u1 << 12) | (u2 << 6) | (heapOrArray[idx++] & 63); + } + + if (u0 < 0x10000) { + str += String.fromCharCode(u0); + } else { + var ch = u0 - 0x10000; + str += String.fromCharCode(0xD800 | (ch >> 10), 0xDC00 | (ch & 0x3FF)); + } + } + return str; + }; + + var FS_stdin_getChar_buffer = []; + + var lengthBytesUTF8 = (str) => { + var len = 0; + for (var i = 0; i < str.length; ++i) { + // Gotcha: charCodeAt returns a 16-bit word that is a UTF-16 encoded code + // unit, not a Unicode code point of the character! So decode + // UTF16->UTF32->UTF8. + // See http://unicode.org/faq/utf_bom.html#utf16-3 + var c = str.charCodeAt(i); // possibly a lead surrogate + if (c <= 0x7F) { + len++; + } else if (c <= 0x7FF) { + len += 2; + } else if (c >= 0xD800 && c <= 0xDFFF) { + len += 4; ++i; + } else { + len += 3; + } + } + return len; + }; + + var stringToUTF8Array = (str, heap, outIdx, maxBytesToWrite) => { + assert(typeof str === 'string', `stringToUTF8Array expects a string (got ${typeof str})`); + // Parameter maxBytesToWrite is not optional. Negative values, 0, null, + // undefined and false each don't write out any bytes. + if (!(maxBytesToWrite > 0)) + return 0; + + var startIdx = outIdx; + var endIdx = outIdx + maxBytesToWrite - 1; // -1 for string null terminator. + for (var i = 0; i < str.length; ++i) { + // Gotcha: charCodeAt returns a 16-bit word that is a UTF-16 encoded code + // unit, not a Unicode code point of the character! So decode + // UTF16->UTF32->UTF8. + // See http://unicode.org/faq/utf_bom.html#utf16-3 + // For UTF8 byte structure, see http://en.wikipedia.org/wiki/UTF-8#Description + // and https://www.ietf.org/rfc/rfc2279.txt + // and https://tools.ietf.org/html/rfc3629 + var u = str.charCodeAt(i); // possibly a lead surrogate + if (u >= 0xD800 && u <= 0xDFFF) { + var u1 = str.charCodeAt(++i); + u = 0x10000 + ((u & 0x3FF) << 10) | (u1 & 0x3FF); + } + if (u <= 0x7F) { + if (outIdx >= endIdx) break; + heap[outIdx++] = u; + } else if (u <= 0x7FF) { + if (outIdx + 1 >= endIdx) break; + heap[outIdx++] = 0xC0 | (u >> 6); + heap[outIdx++] = 0x80 | (u & 63); + } else if (u <= 0xFFFF) { + if (outIdx + 2 >= endIdx) break; + heap[outIdx++] = 0xE0 | (u >> 12); + heap[outIdx++] = 0x80 | ((u >> 6) & 63); + heap[outIdx++] = 0x80 | (u & 63); + } else { + if (outIdx + 3 >= endIdx) break; + if (u > 0x10FFFF) warnOnce('Invalid Unicode code point ' + ptrToString(u) + ' encountered when serializing a JS string to a UTF-8 string in wasm memory! (Valid unicode code points should be in range 0-0x10FFFF).'); + heap[outIdx++] = 0xF0 | (u >> 18); + heap[outIdx++] = 0x80 | ((u >> 12) & 63); + heap[outIdx++] = 0x80 | ((u >> 6) & 63); + heap[outIdx++] = 0x80 | (u & 63); + } + } + // Null-terminate the pointer to the buffer. + heap[outIdx] = 0; + return outIdx - startIdx; + }; + /** @type {function(string, boolean=, number=)} */ + var intArrayFromString = (stringy, dontAddNull, length) => { + var len = length > 0 ? length : lengthBytesUTF8(stringy)+1; + var u8array = new Array(len); + var numBytesWritten = stringToUTF8Array(stringy, u8array, 0, u8array.length); + if (dontAddNull) u8array.length = numBytesWritten; + return u8array; + }; + var FS_stdin_getChar = () => { + if (!FS_stdin_getChar_buffer.length) { + var result = null; + if (ENVIRONMENT_IS_NODE) { + // we will read data by chunks of BUFSIZE + var BUFSIZE = 256; + var buf = Buffer.alloc(BUFSIZE); + var bytesRead = 0; + + // For some reason we must suppress a closure warning here, even though + // fd definitely exists on process.stdin, and is even the proper way to + // get the fd of stdin, + // https://github.com/nodejs/help/issues/2136#issuecomment-523649904 + // This started to happen after moving this logic out of library_tty.js, + // so it is related to the surrounding code in some unclear manner. + /** @suppress {missingProperties} */ + var fd = process.stdin.fd; + + try { + bytesRead = fs.readSync(fd, buf, 0, BUFSIZE); + } catch(e) { + // Cross-platform differences: on Windows, reading EOF throws an + // exception, but on other OSes, reading EOF returns 0. Uniformize + // behavior by treating the EOF exception to return 0. + if (e.toString().includes('EOF')) bytesRead = 0; + else throw e; + } + + if (bytesRead > 0) { + result = buf.slice(0, bytesRead).toString('utf-8'); + } + } else + if (typeof window != 'undefined' && + typeof window.prompt == 'function') { + // Browser. + result = window.prompt('Input: '); // returns null on cancel + if (result !== null) { + result += '\n'; + } + } else + {} + if (!result) { + return null; + } + FS_stdin_getChar_buffer = intArrayFromString(result, true); + } + return FS_stdin_getChar_buffer.shift(); + }; + var TTY = { + ttys:[], + init() { + // https://github.com/emscripten-core/emscripten/pull/1555 + // if (ENVIRONMENT_IS_NODE) { + // // currently, FS.init does not distinguish if process.stdin is a file or TTY + // // device, it always assumes it's a TTY device. because of this, we're forcing + // // process.stdin to UTF8 encoding to at least make stdin reading compatible + // // with text files until FS.init can be refactored. + // process.stdin.setEncoding('utf8'); + // } + }, + shutdown() { + // https://github.com/emscripten-core/emscripten/pull/1555 + // if (ENVIRONMENT_IS_NODE) { + // // inolen: any idea as to why node -e 'process.stdin.read()' wouldn't exit immediately (with process.stdin being a tty)? + // // isaacs: because now it's reading from the stream, you've expressed interest in it, so that read() kicks off a _read() which creates a ReadReq operation + // // inolen: I thought read() in that case was a synchronous operation that just grabbed some amount of buffered data if it exists? + // // isaacs: it is. but it also triggers a _read() call, which calls readStart() on the handle + // // isaacs: do process.stdin.pause() and i'd think it'd probably close the pending call + // process.stdin.pause(); + // } + }, + register(dev, ops) { + TTY.ttys[dev] = { input: [], output: [], ops: ops }; + FS.registerDevice(dev, TTY.stream_ops); + }, + stream_ops:{ + open(stream) { + var tty = TTY.ttys[stream.node.rdev]; + if (!tty) { + throw new FS.ErrnoError(43); + } + stream.tty = tty; + stream.seekable = false; + }, + close(stream) { + // flush any pending line data + stream.tty.ops.fsync(stream.tty); + }, + fsync(stream) { + stream.tty.ops.fsync(stream.tty); + }, + read(stream, buffer, offset, length, pos /* ignored */) { + if (!stream.tty || !stream.tty.ops.get_char) { + throw new FS.ErrnoError(60); + } + var bytesRead = 0; + for (var i = 0; i < length; i++) { + var result; + try { + result = stream.tty.ops.get_char(stream.tty); + } catch (e) { + throw new FS.ErrnoError(29); + } + if (result === undefined && bytesRead === 0) { + throw new FS.ErrnoError(6); + } + if (result === null || result === undefined) break; + bytesRead++; + buffer[offset+i] = result; + } + if (bytesRead) { + stream.node.atime = Date.now(); + } + return bytesRead; + }, + write(stream, buffer, offset, length, pos) { + if (!stream.tty || !stream.tty.ops.put_char) { + throw new FS.ErrnoError(60); + } + try { + for (var i = 0; i < length; i++) { + stream.tty.ops.put_char(stream.tty, buffer[offset+i]); + } + } catch (e) { + throw new FS.ErrnoError(29); + } + if (length) { + stream.node.mtime = stream.node.ctime = Date.now(); + } + return i; + }, + }, + default_tty_ops:{ + get_char(tty) { + return FS_stdin_getChar(); + }, + put_char(tty, val) { + if (val === null || val === 10) { + out(UTF8ArrayToString(tty.output)); + tty.output = []; + } else { + if (val != 0) tty.output.push(val); // val == 0 would cut text output off in the middle. + } + }, + fsync(tty) { + if (tty.output?.length > 0) { + out(UTF8ArrayToString(tty.output)); + tty.output = []; + } + }, + ioctl_tcgets(tty) { + // typical setting + return { + c_iflag: 25856, + c_oflag: 5, + c_cflag: 191, + c_lflag: 35387, + c_cc: [ + 0x03, 0x1c, 0x7f, 0x15, 0x04, 0x00, 0x01, 0x00, 0x11, 0x13, 0x1a, 0x00, + 0x12, 0x0f, 0x17, 0x16, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + ] + }; + }, + ioctl_tcsets(tty, optional_actions, data) { + // currently just ignore + return 0; + }, + ioctl_tiocgwinsz(tty) { + return [24, 80]; + }, + }, + default_tty1_ops:{ + put_char(tty, val) { + if (val === null || val === 10) { + err(UTF8ArrayToString(tty.output)); + tty.output = []; + } else { + if (val != 0) tty.output.push(val); + } + }, + fsync(tty) { + if (tty.output?.length > 0) { + err(UTF8ArrayToString(tty.output)); + tty.output = []; + } + }, + }, + }; + + + var mmapAlloc = (size) => { + abort('internal error: mmapAlloc called but `emscripten_builtin_memalign` native symbol not exported'); + }; + var MEMFS = { + ops_table:null, + mount(mount) { + return MEMFS.createNode(null, '/', 16895, 0); + }, + createNode(parent, name, mode, dev) { + if (FS.isBlkdev(mode) || FS.isFIFO(mode)) { + // no supported + throw new FS.ErrnoError(63); + } + MEMFS.ops_table ||= { + dir: { + node: { + getattr: MEMFS.node_ops.getattr, + setattr: MEMFS.node_ops.setattr, + lookup: MEMFS.node_ops.lookup, + mknod: MEMFS.node_ops.mknod, + rename: MEMFS.node_ops.rename, + unlink: MEMFS.node_ops.unlink, + rmdir: MEMFS.node_ops.rmdir, + readdir: MEMFS.node_ops.readdir, + symlink: MEMFS.node_ops.symlink + }, + stream: { + llseek: MEMFS.stream_ops.llseek + } + }, + file: { + node: { + getattr: MEMFS.node_ops.getattr, + setattr: MEMFS.node_ops.setattr + }, + stream: { + llseek: MEMFS.stream_ops.llseek, + read: MEMFS.stream_ops.read, + write: MEMFS.stream_ops.write, + mmap: MEMFS.stream_ops.mmap, + msync: MEMFS.stream_ops.msync + } + }, + link: { + node: { + getattr: MEMFS.node_ops.getattr, + setattr: MEMFS.node_ops.setattr, + readlink: MEMFS.node_ops.readlink + }, + stream: {} + }, + chrdev: { + node: { + getattr: MEMFS.node_ops.getattr, + setattr: MEMFS.node_ops.setattr + }, + stream: FS.chrdev_stream_ops + } + }; + var node = FS.createNode(parent, name, mode, dev); + if (FS.isDir(node.mode)) { + node.node_ops = MEMFS.ops_table.dir.node; + node.stream_ops = MEMFS.ops_table.dir.stream; + node.contents = {}; + } else if (FS.isFile(node.mode)) { + node.node_ops = MEMFS.ops_table.file.node; + node.stream_ops = MEMFS.ops_table.file.stream; + node.usedBytes = 0; // The actual number of bytes used in the typed array, as opposed to contents.length which gives the whole capacity. + // When the byte data of the file is populated, this will point to either a typed array, or a normal JS array. Typed arrays are preferred + // for performance, and used by default. However, typed arrays are not resizable like normal JS arrays are, so there is a small disk size + // penalty involved for appending file writes that continuously grow a file similar to std::vector capacity vs used -scheme. + node.contents = null; + } else if (FS.isLink(node.mode)) { + node.node_ops = MEMFS.ops_table.link.node; + node.stream_ops = MEMFS.ops_table.link.stream; + } else if (FS.isChrdev(node.mode)) { + node.node_ops = MEMFS.ops_table.chrdev.node; + node.stream_ops = MEMFS.ops_table.chrdev.stream; + } + node.atime = node.mtime = node.ctime = Date.now(); + // add the new node to the parent + if (parent) { + parent.contents[name] = node; + parent.atime = parent.mtime = parent.ctime = node.atime; + } + return node; + }, + getFileDataAsTypedArray(node) { + if (!node.contents) return new Uint8Array(0); + if (node.contents.subarray) return node.contents.subarray(0, node.usedBytes); // Make sure to not return excess unused bytes. + return new Uint8Array(node.contents); + }, + expandFileStorage(node, newCapacity) { + var prevCapacity = node.contents ? node.contents.length : 0; + if (prevCapacity >= newCapacity) return; // No need to expand, the storage was already large enough. + // Don't expand strictly to the given requested limit if it's only a very small increase, but instead geometrically grow capacity. + // For small filesizes (<1MB), perform size*2 geometric increase, but for large sizes, do a much more conservative size*1.125 increase to + // avoid overshooting the allocation cap by a very large margin. + var CAPACITY_DOUBLING_MAX = 1024 * 1024; + newCapacity = Math.max(newCapacity, (prevCapacity * (prevCapacity < CAPACITY_DOUBLING_MAX ? 2.0 : 1.125)) >>> 0); + if (prevCapacity != 0) newCapacity = Math.max(newCapacity, 256); // At minimum allocate 256b for each file when expanding. + var oldContents = node.contents; + node.contents = new Uint8Array(newCapacity); // Allocate new storage. + if (node.usedBytes > 0) node.contents.set(oldContents.subarray(0, node.usedBytes), 0); // Copy old data over to the new storage. + }, + resizeFileStorage(node, newSize) { + if (node.usedBytes == newSize) return; + if (newSize == 0) { + node.contents = null; // Fully decommit when requesting a resize to zero. + node.usedBytes = 0; + } else { + var oldContents = node.contents; + node.contents = new Uint8Array(newSize); // Allocate new storage. + if (oldContents) { + node.contents.set(oldContents.subarray(0, Math.min(newSize, node.usedBytes))); // Copy old data over to the new storage. + } + node.usedBytes = newSize; + } + }, + node_ops:{ + getattr(node) { + var attr = {}; + // device numbers reuse inode numbers. + attr.dev = FS.isChrdev(node.mode) ? node.id : 1; + attr.ino = node.id; + attr.mode = node.mode; + attr.nlink = 1; + attr.uid = 0; + attr.gid = 0; + attr.rdev = node.rdev; + if (FS.isDir(node.mode)) { + attr.size = 4096; + } else if (FS.isFile(node.mode)) { + attr.size = node.usedBytes; + } else if (FS.isLink(node.mode)) { + attr.size = node.link.length; + } else { + attr.size = 0; + } + attr.atime = new Date(node.atime); + attr.mtime = new Date(node.mtime); + attr.ctime = new Date(node.ctime); + // NOTE: In our implementation, st_blocks = Math.ceil(st_size/st_blksize), + // but this is not required by the standard. + attr.blksize = 4096; + attr.blocks = Math.ceil(attr.size / attr.blksize); + return attr; + }, + setattr(node, attr) { + for (const key of ["mode", "atime", "mtime", "ctime"]) { + if (attr[key] != null) { + node[key] = attr[key]; + } + } + if (attr.size !== undefined) { + MEMFS.resizeFileStorage(node, attr.size); + } + }, + lookup(parent, name) { + throw new FS.ErrnoError(44); + }, + mknod(parent, name, mode, dev) { + return MEMFS.createNode(parent, name, mode, dev); + }, + rename(old_node, new_dir, new_name) { + var new_node; + try { + new_node = FS.lookupNode(new_dir, new_name); + } catch (e) {} + if (new_node) { + if (FS.isDir(old_node.mode)) { + // if we're overwriting a directory at new_name, make sure it's empty. + for (var i in new_node.contents) { + throw new FS.ErrnoError(55); + } + } + FS.hashRemoveNode(new_node); + } + // do the internal rewiring + delete old_node.parent.contents[old_node.name]; + new_dir.contents[new_name] = old_node; + old_node.name = new_name; + new_dir.ctime = new_dir.mtime = old_node.parent.ctime = old_node.parent.mtime = Date.now(); + }, + unlink(parent, name) { + delete parent.contents[name]; + parent.ctime = parent.mtime = Date.now(); + }, + rmdir(parent, name) { + var node = FS.lookupNode(parent, name); + for (var i in node.contents) { + throw new FS.ErrnoError(55); + } + delete parent.contents[name]; + parent.ctime = parent.mtime = Date.now(); + }, + readdir(node) { + return ['.', '..', ...Object.keys(node.contents)]; + }, + symlink(parent, newname, oldpath) { + var node = MEMFS.createNode(parent, newname, 0o777 | 40960, 0); + node.link = oldpath; + return node; + }, + readlink(node) { + if (!FS.isLink(node.mode)) { + throw new FS.ErrnoError(28); + } + return node.link; + }, + }, + stream_ops:{ + read(stream, buffer, offset, length, position) { + var contents = stream.node.contents; + if (position >= stream.node.usedBytes) return 0; + var size = Math.min(stream.node.usedBytes - position, length); + assert(size >= 0); + if (size > 8 && contents.subarray) { // non-trivial, and typed array + buffer.set(contents.subarray(position, position + size), offset); + } else { + for (var i = 0; i < size; i++) buffer[offset + i] = contents[position + i]; + } + return size; + }, + write(stream, buffer, offset, length, position, canOwn) { + // The data buffer should be a typed array view + assert(!(buffer instanceof ArrayBuffer)); + + if (!length) return 0; + var node = stream.node; + node.mtime = node.ctime = Date.now(); + + if (buffer.subarray && (!node.contents || node.contents.subarray)) { // This write is from a typed array to a typed array? + if (canOwn) { + assert(position === 0, 'canOwn must imply no weird position inside the file'); + node.contents = buffer.subarray(offset, offset + length); + node.usedBytes = length; + return length; + } else if (node.usedBytes === 0 && position === 0) { // If this is a simple first write to an empty file, do a fast set since we don't need to care about old data. + node.contents = buffer.slice(offset, offset + length); + node.usedBytes = length; + return length; + } else if (position + length <= node.usedBytes) { // Writing to an already allocated and used subrange of the file? + node.contents.set(buffer.subarray(offset, offset + length), position); + return length; + } + } + + // Appending to an existing file and we need to reallocate, or source data did not come as a typed array. + MEMFS.expandFileStorage(node, position+length); + if (node.contents.subarray && buffer.subarray) { + // Use typed array write which is available. + node.contents.set(buffer.subarray(offset, offset + length), position); + } else { + for (var i = 0; i < length; i++) { + node.contents[position + i] = buffer[offset + i]; // Or fall back to manual write if not. + } + } + node.usedBytes = Math.max(node.usedBytes, position + length); + return length; + }, + llseek(stream, offset, whence) { + var position = offset; + if (whence === 1) { + position += stream.position; + } else if (whence === 2) { + if (FS.isFile(stream.node.mode)) { + position += stream.node.usedBytes; + } + } + if (position < 0) { + throw new FS.ErrnoError(28); + } + return position; + }, + mmap(stream, length, position, prot, flags) { + if (!FS.isFile(stream.node.mode)) { + throw new FS.ErrnoError(43); + } + var ptr; + var allocated; + var contents = stream.node.contents; + // Only make a new copy when MAP_PRIVATE is specified. + if (!(flags & 2) && contents && contents.buffer === HEAP8.buffer) { + // We can't emulate MAP_SHARED when the file is not backed by the + // buffer we're mapping to (e.g. the HEAP buffer). + allocated = false; + ptr = contents.byteOffset; + } else { + allocated = true; + ptr = mmapAlloc(length); + if (!ptr) { + throw new FS.ErrnoError(48); + } + if (contents) { + // Try to avoid unnecessary slices. + if (position > 0 || position + length < contents.length) { + if (contents.subarray) { + contents = contents.subarray(position, position + length); + } else { + contents = Array.prototype.slice.call(contents, position, position + length); + } + } + HEAP8.set(contents, ptr); + } + } + return { ptr, allocated }; + }, + msync(stream, buffer, offset, length, mmapFlags) { + MEMFS.stream_ops.write(stream, buffer, 0, length, offset, false); + // should we check if bytesWritten and length are the same? + return 0; + }, + }, + }; + + var asyncLoad = async (url) => { + var arrayBuffer = await readAsync(url); + assert(arrayBuffer, `Loading data file "${url}" failed (no arrayBuffer).`); + return new Uint8Array(arrayBuffer); + }; + + + var FS_createDataFile = (parent, name, fileData, canRead, canWrite, canOwn) => { + FS.createDataFile(parent, name, fileData, canRead, canWrite, canOwn); + }; + + var preloadPlugins = Module['preloadPlugins'] || []; + var FS_handledByPreloadPlugin = (byteArray, fullname, finish, onerror) => { + // Ensure plugins are ready. + if (typeof Browser != 'undefined') Browser.init(); + + var handled = false; + preloadPlugins.forEach((plugin) => { + if (handled) return; + if (plugin['canHandle'](fullname)) { + plugin['handle'](byteArray, fullname, finish, onerror); + handled = true; + } + }); + return handled; + }; + var FS_createPreloadedFile = (parent, name, url, canRead, canWrite, onload, onerror, dontCreateFile, canOwn, preFinish) => { + // TODO we should allow people to just pass in a complete filename instead + // of parent and name being that we just join them anyways + var fullname = name ? PATH_FS.resolve(PATH.join2(parent, name)) : parent; + var dep = getUniqueRunDependency(`cp ${fullname}`); // might have several active requests for the same fullname + function processData(byteArray) { + function finish(byteArray) { + preFinish?.(); + if (!dontCreateFile) { + FS_createDataFile(parent, name, byteArray, canRead, canWrite, canOwn); + } + onload?.(); + removeRunDependency(dep); + } + if (FS_handledByPreloadPlugin(byteArray, fullname, finish, () => { + onerror?.(); + removeRunDependency(dep); + })) { + return; + } + finish(byteArray); + } + addRunDependency(dep); + if (typeof url == 'string') { + asyncLoad(url).then(processData, onerror); + } else { + processData(url); + } + }; + + var FS_modeStringToFlags = (str) => { + var flagModes = { + 'r': 0, + 'r+': 2, + 'w': 512 | 64 | 1, + 'w+': 512 | 64 | 2, + 'a': 1024 | 64 | 1, + 'a+': 1024 | 64 | 2, + }; + var flags = flagModes[str]; + if (typeof flags == 'undefined') { + throw new Error(`Unknown file open mode: ${str}`); + } + return flags; + }; + + var FS_getMode = (canRead, canWrite) => { + var mode = 0; + if (canRead) mode |= 292 | 73; + if (canWrite) mode |= 146; + return mode; + }; + + + + + + + /** + * Given a pointer 'ptr' to a null-terminated UTF8-encoded string in the + * emscripten HEAP, returns a copy of that string as a Javascript String object. + * + * @param {number} ptr + * @param {number=} maxBytesToRead - An optional length that specifies the + * maximum number of bytes to read. You can omit this parameter to scan the + * string until the first 0 byte. If maxBytesToRead is passed, and the string + * at [ptr, ptr+maxBytesToReadr[ contains a null byte in the middle, then the + * string will cut short at that byte index (i.e. maxBytesToRead will not + * produce a string of exact length [ptr, ptr+maxBytesToRead[) N.B. mixing + * frequent uses of UTF8ToString() with and without maxBytesToRead may throw + * JS JIT optimizations off, so it is worth to consider consistently using one + * @return {string} + */ + var UTF8ToString = (ptr, maxBytesToRead) => { + assert(typeof ptr == 'number', `UTF8ToString expects a number (got ${typeof ptr})`); + return ptr ? UTF8ArrayToString(HEAPU8, ptr, maxBytesToRead) : ''; + }; + + var strError = (errno) => UTF8ToString(_strerror(errno)); + + var ERRNO_CODES = { + 'EPERM': 63, + 'ENOENT': 44, + 'ESRCH': 71, + 'EINTR': 27, + 'EIO': 29, + 'ENXIO': 60, + 'E2BIG': 1, + 'ENOEXEC': 45, + 'EBADF': 8, + 'ECHILD': 12, + 'EAGAIN': 6, + 'EWOULDBLOCK': 6, + 'ENOMEM': 48, + 'EACCES': 2, + 'EFAULT': 21, + 'ENOTBLK': 105, + 'EBUSY': 10, + 'EEXIST': 20, + 'EXDEV': 75, + 'ENODEV': 43, + 'ENOTDIR': 54, + 'EISDIR': 31, + 'EINVAL': 28, + 'ENFILE': 41, + 'EMFILE': 33, + 'ENOTTY': 59, + 'ETXTBSY': 74, + 'EFBIG': 22, + 'ENOSPC': 51, + 'ESPIPE': 70, + 'EROFS': 69, + 'EMLINK': 34, + 'EPIPE': 64, + 'EDOM': 18, + 'ERANGE': 68, + 'ENOMSG': 49, + 'EIDRM': 24, + 'ECHRNG': 106, + 'EL2NSYNC': 156, + 'EL3HLT': 107, + 'EL3RST': 108, + 'ELNRNG': 109, + 'EUNATCH': 110, + 'ENOCSI': 111, + 'EL2HLT': 112, + 'EDEADLK': 16, + 'ENOLCK': 46, + 'EBADE': 113, + 'EBADR': 114, + 'EXFULL': 115, + 'ENOANO': 104, + 'EBADRQC': 103, + 'EBADSLT': 102, + 'EDEADLOCK': 16, + 'EBFONT': 101, + 'ENOSTR': 100, + 'ENODATA': 116, + 'ETIME': 117, + 'ENOSR': 118, + 'ENONET': 119, + 'ENOPKG': 120, + 'EREMOTE': 121, + 'ENOLINK': 47, + 'EADV': 122, + 'ESRMNT': 123, + 'ECOMM': 124, + 'EPROTO': 65, + 'EMULTIHOP': 36, + 'EDOTDOT': 125, + 'EBADMSG': 9, + 'ENOTUNIQ': 126, + 'EBADFD': 127, + 'EREMCHG': 128, + 'ELIBACC': 129, + 'ELIBBAD': 130, + 'ELIBSCN': 131, + 'ELIBMAX': 132, + 'ELIBEXEC': 133, + 'ENOSYS': 52, + 'ENOTEMPTY': 55, + 'ENAMETOOLONG': 37, + 'ELOOP': 32, + 'EOPNOTSUPP': 138, + 'EPFNOSUPPORT': 139, + 'ECONNRESET': 15, + 'ENOBUFS': 42, + 'EAFNOSUPPORT': 5, + 'EPROTOTYPE': 67, + 'ENOTSOCK': 57, + 'ENOPROTOOPT': 50, + 'ESHUTDOWN': 140, + 'ECONNREFUSED': 14, + 'EADDRINUSE': 3, + 'ECONNABORTED': 13, + 'ENETUNREACH': 40, + 'ENETDOWN': 38, + 'ETIMEDOUT': 73, + 'EHOSTDOWN': 142, + 'EHOSTUNREACH': 23, + 'EINPROGRESS': 26, + 'EALREADY': 7, + 'EDESTADDRREQ': 17, + 'EMSGSIZE': 35, + 'EPROTONOSUPPORT': 66, + 'ESOCKTNOSUPPORT': 137, + 'EADDRNOTAVAIL': 4, + 'ENETRESET': 39, + 'EISCONN': 30, + 'ENOTCONN': 53, + 'ETOOMANYREFS': 141, + 'EUSERS': 136, + 'EDQUOT': 19, + 'ESTALE': 72, + 'ENOTSUP': 138, + 'ENOMEDIUM': 148, + 'EILSEQ': 25, + 'EOVERFLOW': 61, + 'ECANCELED': 11, + 'ENOTRECOVERABLE': 56, + 'EOWNERDEAD': 62, + 'ESTRPIPE': 135, + }; + var FS = { + root:null, + mounts:[], + devices:{ + }, + streams:[], + nextInode:1, + nameTable:null, + currentPath:"/", + initialized:false, + ignorePermissions:true, + filesystems:null, + syncFSRequests:0, + readFiles:{ + }, + ErrnoError:class extends Error { + name = 'ErrnoError'; + // We set the `name` property to be able to identify `FS.ErrnoError` + // - the `name` is a standard ECMA-262 property of error objects. Kind of good to have it anyway. + // - when using PROXYFS, an error can come from an underlying FS + // as different FS objects have their own FS.ErrnoError each, + // the test `err instanceof FS.ErrnoError` won't detect an error coming from another filesystem, causing bugs. + // we'll use the reliable test `err.name == "ErrnoError"` instead + constructor(errno) { + super(runtimeInitialized ? strError(errno) : ''); + this.errno = errno; + for (var key in ERRNO_CODES) { + if (ERRNO_CODES[key] === errno) { + this.code = key; + break; + } + } + } + }, + FSStream:class { + shared = {}; + get object() { + return this.node; + } + set object(val) { + this.node = val; + } + get isRead() { + return (this.flags & 2097155) !== 1; + } + get isWrite() { + return (this.flags & 2097155) !== 0; + } + get isAppend() { + return (this.flags & 1024); + } + get flags() { + return this.shared.flags; + } + set flags(val) { + this.shared.flags = val; + } + get position() { + return this.shared.position; + } + set position(val) { + this.shared.position = val; + } + }, + FSNode:class { + node_ops = {}; + stream_ops = {}; + readMode = 292 | 73; + writeMode = 146; + mounted = null; + constructor(parent, name, mode, rdev) { + if (!parent) { + parent = this; // root node sets parent to itself + } + this.parent = parent; + this.mount = parent.mount; + this.id = FS.nextInode++; + this.name = name; + this.mode = mode; + this.rdev = rdev; + this.atime = this.mtime = this.ctime = Date.now(); + } + get read() { + return (this.mode & this.readMode) === this.readMode; + } + set read(val) { + val ? this.mode |= this.readMode : this.mode &= ~this.readMode; + } + get write() { + return (this.mode & this.writeMode) === this.writeMode; + } + set write(val) { + val ? this.mode |= this.writeMode : this.mode &= ~this.writeMode; + } + get isFolder() { + return FS.isDir(this.mode); + } + get isDevice() { + return FS.isChrdev(this.mode); + } + }, + lookupPath(path, opts = {}) { + if (!path) { + throw new FS.ErrnoError(44); + } + opts.follow_mount ??= true + + if (!PATH.isAbs(path)) { + path = FS.cwd() + '/' + path; + } + + // limit max consecutive symlinks to 40 (SYMLOOP_MAX). + linkloop: for (var nlinks = 0; nlinks < 40; nlinks++) { + // split the absolute path + var parts = path.split('/').filter((p) => !!p); + + // start at the root + var current = FS.root; + var current_path = '/'; + + for (var i = 0; i < parts.length; i++) { + var islast = (i === parts.length-1); + if (islast && opts.parent) { + // stop resolving + break; + } + + if (parts[i] === '.') { + continue; + } + + if (parts[i] === '..') { + current_path = PATH.dirname(current_path); + current = current.parent; + continue; + } + + current_path = PATH.join2(current_path, parts[i]); + try { + current = FS.lookupNode(current, parts[i]); + } catch (e) { + // if noent_okay is true, suppress a ENOENT in the last component + // and return an object with an undefined node. This is needed for + // resolving symlinks in the path when creating a file. + if ((e?.errno === 44) && islast && opts.noent_okay) { + return { path: current_path }; + } + throw e; + } + + // jump to the mount's root node if this is a mountpoint + if (FS.isMountpoint(current) && (!islast || opts.follow_mount)) { + current = current.mounted.root; + } + + // by default, lookupPath will not follow a symlink if it is the final path component. + // setting opts.follow = true will override this behavior. + if (FS.isLink(current.mode) && (!islast || opts.follow)) { + if (!current.node_ops.readlink) { + throw new FS.ErrnoError(52); + } + var link = current.node_ops.readlink(current); + if (!PATH.isAbs(link)) { + link = PATH.dirname(current_path) + '/' + link; + } + path = link + '/' + parts.slice(i + 1).join('/'); + continue linkloop; + } + } + return { path: current_path, node: current }; + } + throw new FS.ErrnoError(32); + }, + getPath(node) { + var path; + while (true) { + if (FS.isRoot(node)) { + var mount = node.mount.mountpoint; + if (!path) return mount; + return mount[mount.length-1] !== '/' ? `${mount}/${path}` : mount + path; + } + path = path ? `${node.name}/${path}` : node.name; + node = node.parent; + } + }, + hashName(parentid, name) { + var hash = 0; + + for (var i = 0; i < name.length; i++) { + hash = ((hash << 5) - hash + name.charCodeAt(i)) | 0; + } + return ((parentid + hash) >>> 0) % FS.nameTable.length; + }, + hashAddNode(node) { + var hash = FS.hashName(node.parent.id, node.name); + node.name_next = FS.nameTable[hash]; + FS.nameTable[hash] = node; + }, + hashRemoveNode(node) { + var hash = FS.hashName(node.parent.id, node.name); + if (FS.nameTable[hash] === node) { + FS.nameTable[hash] = node.name_next; + } else { + var current = FS.nameTable[hash]; + while (current) { + if (current.name_next === node) { + current.name_next = node.name_next; + break; + } + current = current.name_next; + } + } + }, + lookupNode(parent, name) { + var errCode = FS.mayLookup(parent); + if (errCode) { + throw new FS.ErrnoError(errCode); + } + var hash = FS.hashName(parent.id, name); + for (var node = FS.nameTable[hash]; node; node = node.name_next) { + var nodeName = node.name; + if (node.parent.id === parent.id && nodeName === name) { + return node; + } + } + // if we failed to find it in the cache, call into the VFS + return FS.lookup(parent, name); + }, + createNode(parent, name, mode, rdev) { + assert(typeof parent == 'object') + var node = new FS.FSNode(parent, name, mode, rdev); + + FS.hashAddNode(node); + + return node; + }, + destroyNode(node) { + FS.hashRemoveNode(node); + }, + isRoot(node) { + return node === node.parent; + }, + isMountpoint(node) { + return !!node.mounted; + }, + isFile(mode) { + return (mode & 61440) === 32768; + }, + isDir(mode) { + return (mode & 61440) === 16384; + }, + isLink(mode) { + return (mode & 61440) === 40960; + }, + isChrdev(mode) { + return (mode & 61440) === 8192; + }, + isBlkdev(mode) { + return (mode & 61440) === 24576; + }, + isFIFO(mode) { + return (mode & 61440) === 4096; + }, + isSocket(mode) { + return (mode & 49152) === 49152; + }, + flagsToPermissionString(flag) { + var perms = ['r', 'w', 'rw'][flag & 3]; + if ((flag & 512)) { + perms += 'w'; + } + return perms; + }, + nodePermissions(node, perms) { + if (FS.ignorePermissions) { + return 0; + } + // return 0 if any user, group or owner bits are set. + if (perms.includes('r') && !(node.mode & 292)) { + return 2; + } else if (perms.includes('w') && !(node.mode & 146)) { + return 2; + } else if (perms.includes('x') && !(node.mode & 73)) { + return 2; + } + return 0; + }, + mayLookup(dir) { + if (!FS.isDir(dir.mode)) return 54; + var errCode = FS.nodePermissions(dir, 'x'); + if (errCode) return errCode; + if (!dir.node_ops.lookup) return 2; + return 0; + }, + mayCreate(dir, name) { + if (!FS.isDir(dir.mode)) { + return 54; + } + try { + var node = FS.lookupNode(dir, name); + return 20; + } catch (e) { + } + return FS.nodePermissions(dir, 'wx'); + }, + mayDelete(dir, name, isdir) { + var node; + try { + node = FS.lookupNode(dir, name); + } catch (e) { + return e.errno; + } + var errCode = FS.nodePermissions(dir, 'wx'); + if (errCode) { + return errCode; + } + if (isdir) { + if (!FS.isDir(node.mode)) { + return 54; + } + if (FS.isRoot(node) || FS.getPath(node) === FS.cwd()) { + return 10; + } + } else { + if (FS.isDir(node.mode)) { + return 31; + } + } + return 0; + }, + mayOpen(node, flags) { + if (!node) { + return 44; + } + if (FS.isLink(node.mode)) { + return 32; + } else if (FS.isDir(node.mode)) { + if (FS.flagsToPermissionString(flags) !== 'r' // opening for write + || (flags & (512 | 64))) { // TODO: check for O_SEARCH? (== search for dir only) + return 31; + } + } + return FS.nodePermissions(node, FS.flagsToPermissionString(flags)); + }, + checkOpExists(op, err) { + if (!op) { + throw new FS.ErrnoError(err); + } + return op; + }, + MAX_OPEN_FDS:4096, + nextfd() { + for (var fd = 0; fd <= FS.MAX_OPEN_FDS; fd++) { + if (!FS.streams[fd]) { + return fd; + } + } + throw new FS.ErrnoError(33); + }, + getStreamChecked(fd) { + var stream = FS.getStream(fd); + if (!stream) { + throw new FS.ErrnoError(8); + } + return stream; + }, + getStream:(fd) => FS.streams[fd], + createStream(stream, fd = -1) { + assert(fd >= -1); + + // clone it, so we can return an instance of FSStream + stream = Object.assign(new FS.FSStream(), stream); + if (fd == -1) { + fd = FS.nextfd(); + } + stream.fd = fd; + FS.streams[fd] = stream; + return stream; + }, + closeStream(fd) { + FS.streams[fd] = null; + }, + dupStream(origStream, fd = -1) { + var stream = FS.createStream(origStream, fd); + stream.stream_ops?.dup?.(stream); + return stream; + }, + doSetAttr(stream, node, attr) { + var setattr = stream?.stream_ops.setattr; + var arg = setattr ? stream : node; + setattr ??= node.node_ops.setattr; + FS.checkOpExists(setattr, 63) + setattr(arg, attr); + }, + chrdev_stream_ops:{ + open(stream) { + var device = FS.getDevice(stream.node.rdev); + // override node's stream ops with the device's + stream.stream_ops = device.stream_ops; + // forward the open call + stream.stream_ops.open?.(stream); + }, + llseek() { + throw new FS.ErrnoError(70); + }, + }, + major:(dev) => ((dev) >> 8), + minor:(dev) => ((dev) & 0xff), + makedev:(ma, mi) => ((ma) << 8 | (mi)), + registerDevice(dev, ops) { + FS.devices[dev] = { stream_ops: ops }; + }, + getDevice:(dev) => FS.devices[dev], + getMounts(mount) { + var mounts = []; + var check = [mount]; + + while (check.length) { + var m = check.pop(); + + mounts.push(m); + + check.push(...m.mounts); + } + + return mounts; + }, + syncfs(populate, callback) { + if (typeof populate == 'function') { + callback = populate; + populate = false; + } + + FS.syncFSRequests++; + + if (FS.syncFSRequests > 1) { + err(`warning: ${FS.syncFSRequests} FS.syncfs operations in flight at once, probably just doing extra work`); + } + + var mounts = FS.getMounts(FS.root.mount); + var completed = 0; + + function doCallback(errCode) { + assert(FS.syncFSRequests > 0); + FS.syncFSRequests--; + return callback(errCode); + } + + function done(errCode) { + if (errCode) { + if (!done.errored) { + done.errored = true; + return doCallback(errCode); + } + return; + } + if (++completed >= mounts.length) { + doCallback(null); + } + }; + + // sync all mounts + mounts.forEach((mount) => { + if (!mount.type.syncfs) { + return done(null); + } + mount.type.syncfs(mount, populate, done); + }); + }, + mount(type, opts, mountpoint) { + if (typeof type == 'string') { + // The filesystem was not included, and instead we have an error + // message stored in the variable. + throw type; + } + var root = mountpoint === '/'; + var pseudo = !mountpoint; + var node; + + if (root && FS.root) { + throw new FS.ErrnoError(10); + } else if (!root && !pseudo) { + var lookup = FS.lookupPath(mountpoint, { follow_mount: false }); + + mountpoint = lookup.path; // use the absolute path + node = lookup.node; + + if (FS.isMountpoint(node)) { + throw new FS.ErrnoError(10); + } + + if (!FS.isDir(node.mode)) { + throw new FS.ErrnoError(54); + } + } + + var mount = { + type, + opts, + mountpoint, + mounts: [] + }; + + // create a root node for the fs + var mountRoot = type.mount(mount); + mountRoot.mount = mount; + mount.root = mountRoot; + + if (root) { + FS.root = mountRoot; + } else if (node) { + // set as a mountpoint + node.mounted = mount; + + // add the new mount to the current mount's children + if (node.mount) { + node.mount.mounts.push(mount); + } + } + + return mountRoot; + }, + unmount(mountpoint) { + var lookup = FS.lookupPath(mountpoint, { follow_mount: false }); + + if (!FS.isMountpoint(lookup.node)) { + throw new FS.ErrnoError(28); + } + + // destroy the nodes for this mount, and all its child mounts + var node = lookup.node; + var mount = node.mounted; + var mounts = FS.getMounts(mount); + + Object.keys(FS.nameTable).forEach((hash) => { + var current = FS.nameTable[hash]; + + while (current) { + var next = current.name_next; + + if (mounts.includes(current.mount)) { + FS.destroyNode(current); + } + + current = next; + } + }); + + // no longer a mountpoint + node.mounted = null; + + // remove this mount from the child mounts + var idx = node.mount.mounts.indexOf(mount); + assert(idx !== -1); + node.mount.mounts.splice(idx, 1); + }, + lookup(parent, name) { + return parent.node_ops.lookup(parent, name); + }, + mknod(path, mode, dev) { + var lookup = FS.lookupPath(path, { parent: true }); + var parent = lookup.node; + var name = PATH.basename(path); + if (!name) { + throw new FS.ErrnoError(28); + } + if (name === '.' || name === '..') { + throw new FS.ErrnoError(20); + } + var errCode = FS.mayCreate(parent, name); + if (errCode) { + throw new FS.ErrnoError(errCode); + } + if (!parent.node_ops.mknod) { + throw new FS.ErrnoError(63); + } + return parent.node_ops.mknod(parent, name, mode, dev); + }, + statfs(path) { + return FS.statfsNode(FS.lookupPath(path, {follow: true}).node); + }, + statfsStream(stream) { + // We keep a separate statfsStream function because noderawfs overrides + // it. In noderawfs, stream.node is sometimes null. Instead, we need to + // look at stream.path. + return FS.statfsNode(stream.node); + }, + statfsNode(node) { + // NOTE: None of the defaults here are true. We're just returning safe and + // sane values. Currently nodefs and rawfs replace these defaults, + // other file systems leave them alone. + var rtn = { + bsize: 4096, + frsize: 4096, + blocks: 1e6, + bfree: 5e5, + bavail: 5e5, + files: FS.nextInode, + ffree: FS.nextInode - 1, + fsid: 42, + flags: 2, + namelen: 255, + }; + + if (node.node_ops.statfs) { + Object.assign(rtn, node.node_ops.statfs(node.mount.opts.root)); + } + return rtn; + }, + create(path, mode = 0o666) { + mode &= 4095; + mode |= 32768; + return FS.mknod(path, mode, 0); + }, + mkdir(path, mode = 0o777) { + mode &= 511 | 512; + mode |= 16384; + return FS.mknod(path, mode, 0); + }, + mkdirTree(path, mode) { + var dirs = path.split('/'); + var d = ''; + for (var dir of dirs) { + if (!dir) continue; + if (d || PATH.isAbs(path)) d += '/'; + d += dir; + try { + FS.mkdir(d, mode); + } catch(e) { + if (e.errno != 20) throw e; + } + } + }, + mkdev(path, mode, dev) { + if (typeof dev == 'undefined') { + dev = mode; + mode = 0o666; + } + mode |= 8192; + return FS.mknod(path, mode, dev); + }, + symlink(oldpath, newpath) { + if (!PATH_FS.resolve(oldpath)) { + throw new FS.ErrnoError(44); + } + var lookup = FS.lookupPath(newpath, { parent: true }); + var parent = lookup.node; + if (!parent) { + throw new FS.ErrnoError(44); + } + var newname = PATH.basename(newpath); + var errCode = FS.mayCreate(parent, newname); + if (errCode) { + throw new FS.ErrnoError(errCode); + } + if (!parent.node_ops.symlink) { + throw new FS.ErrnoError(63); + } + return parent.node_ops.symlink(parent, newname, oldpath); + }, + rename(old_path, new_path) { + var old_dirname = PATH.dirname(old_path); + var new_dirname = PATH.dirname(new_path); + var old_name = PATH.basename(old_path); + var new_name = PATH.basename(new_path); + // parents must exist + var lookup, old_dir, new_dir; + + // let the errors from non existent directories percolate up + lookup = FS.lookupPath(old_path, { parent: true }); + old_dir = lookup.node; + lookup = FS.lookupPath(new_path, { parent: true }); + new_dir = lookup.node; + + if (!old_dir || !new_dir) throw new FS.ErrnoError(44); + // need to be part of the same mount + if (old_dir.mount !== new_dir.mount) { + throw new FS.ErrnoError(75); + } + // source must exist + var old_node = FS.lookupNode(old_dir, old_name); + // old path should not be an ancestor of the new path + var relative = PATH_FS.relative(old_path, new_dirname); + if (relative.charAt(0) !== '.') { + throw new FS.ErrnoError(28); + } + // new path should not be an ancestor of the old path + relative = PATH_FS.relative(new_path, old_dirname); + if (relative.charAt(0) !== '.') { + throw new FS.ErrnoError(55); + } + // see if the new path already exists + var new_node; + try { + new_node = FS.lookupNode(new_dir, new_name); + } catch (e) { + // not fatal + } + // early out if nothing needs to change + if (old_node === new_node) { + return; + } + // we'll need to delete the old entry + var isdir = FS.isDir(old_node.mode); + var errCode = FS.mayDelete(old_dir, old_name, isdir); + if (errCode) { + throw new FS.ErrnoError(errCode); + } + // need delete permissions if we'll be overwriting. + // need create permissions if new doesn't already exist. + errCode = new_node ? + FS.mayDelete(new_dir, new_name, isdir) : + FS.mayCreate(new_dir, new_name); + if (errCode) { + throw new FS.ErrnoError(errCode); + } + if (!old_dir.node_ops.rename) { + throw new FS.ErrnoError(63); + } + if (FS.isMountpoint(old_node) || (new_node && FS.isMountpoint(new_node))) { + throw new FS.ErrnoError(10); + } + // if we are going to change the parent, check write permissions + if (new_dir !== old_dir) { + errCode = FS.nodePermissions(old_dir, 'w'); + if (errCode) { + throw new FS.ErrnoError(errCode); + } + } + // remove the node from the lookup hash + FS.hashRemoveNode(old_node); + // do the underlying fs rename + try { + old_dir.node_ops.rename(old_node, new_dir, new_name); + // update old node (we do this here to avoid each backend + // needing to) + old_node.parent = new_dir; + } catch (e) { + throw e; + } finally { + // add the node back to the hash (in case node_ops.rename + // changed its name) + FS.hashAddNode(old_node); + } + }, + rmdir(path) { + var lookup = FS.lookupPath(path, { parent: true }); + var parent = lookup.node; + var name = PATH.basename(path); + var node = FS.lookupNode(parent, name); + var errCode = FS.mayDelete(parent, name, true); + if (errCode) { + throw new FS.ErrnoError(errCode); + } + if (!parent.node_ops.rmdir) { + throw new FS.ErrnoError(63); + } + if (FS.isMountpoint(node)) { + throw new FS.ErrnoError(10); + } + parent.node_ops.rmdir(parent, name); + FS.destroyNode(node); + }, + readdir(path) { + var lookup = FS.lookupPath(path, { follow: true }); + var node = lookup.node; + var readdir = FS.checkOpExists(node.node_ops.readdir, 54); + return readdir(node); + }, + unlink(path) { + var lookup = FS.lookupPath(path, { parent: true }); + var parent = lookup.node; + if (!parent) { + throw new FS.ErrnoError(44); + } + var name = PATH.basename(path); + var node = FS.lookupNode(parent, name); + var errCode = FS.mayDelete(parent, name, false); + if (errCode) { + // According to POSIX, we should map EISDIR to EPERM, but + // we instead do what Linux does (and we must, as we use + // the musl linux libc). + throw new FS.ErrnoError(errCode); + } + if (!parent.node_ops.unlink) { + throw new FS.ErrnoError(63); + } + if (FS.isMountpoint(node)) { + throw new FS.ErrnoError(10); + } + parent.node_ops.unlink(parent, name); + FS.destroyNode(node); + }, + readlink(path) { + var lookup = FS.lookupPath(path); + var link = lookup.node; + if (!link) { + throw new FS.ErrnoError(44); + } + if (!link.node_ops.readlink) { + throw new FS.ErrnoError(28); + } + return link.node_ops.readlink(link); + }, + stat(path, dontFollow) { + var lookup = FS.lookupPath(path, { follow: !dontFollow }); + var node = lookup.node; + var getattr = FS.checkOpExists(node.node_ops.getattr, 63); + return getattr(node); + }, + fstat(fd) { + var stream = FS.getStreamChecked(fd); + var node = stream.node; + var getattr = stream.stream_ops.getattr; + var arg = getattr ? stream : node; + getattr ??= node.node_ops.getattr; + FS.checkOpExists(getattr, 63) + return getattr(arg); + }, + lstat(path) { + return FS.stat(path, true); + }, + doChmod(stream, node, mode, dontFollow) { + FS.doSetAttr(stream, node, { + mode: (mode & 4095) | (node.mode & ~4095), + ctime: Date.now(), + dontFollow + }); + }, + chmod(path, mode, dontFollow) { + var node; + if (typeof path == 'string') { + var lookup = FS.lookupPath(path, { follow: !dontFollow }); + node = lookup.node; + } else { + node = path; + } + FS.doChmod(null, node, mode, dontFollow); + }, + lchmod(path, mode) { + FS.chmod(path, mode, true); + }, + fchmod(fd, mode) { + var stream = FS.getStreamChecked(fd); + FS.doChmod(stream, stream.node, mode, false); + }, + doChown(stream, node, dontFollow) { + FS.doSetAttr(stream, node, { + timestamp: Date.now(), + dontFollow + // we ignore the uid / gid for now + }); + }, + chown(path, uid, gid, dontFollow) { + var node; + if (typeof path == 'string') { + var lookup = FS.lookupPath(path, { follow: !dontFollow }); + node = lookup.node; + } else { + node = path; + } + FS.doChown(null, node, dontFollow); + }, + lchown(path, uid, gid) { + FS.chown(path, uid, gid, true); + }, + fchown(fd, uid, gid) { + var stream = FS.getStreamChecked(fd); + FS.doChown(stream, stream.node, false); + }, + doTruncate(stream, node, len) { + if (FS.isDir(node.mode)) { + throw new FS.ErrnoError(31); + } + if (!FS.isFile(node.mode)) { + throw new FS.ErrnoError(28); + } + var errCode = FS.nodePermissions(node, 'w'); + if (errCode) { + throw new FS.ErrnoError(errCode); + } + FS.doSetAttr(stream, node, { + size: len, + timestamp: Date.now() + }); + }, + truncate(path, len) { + if (len < 0) { + throw new FS.ErrnoError(28); + } + var node; + if (typeof path == 'string') { + var lookup = FS.lookupPath(path, { follow: true }); + node = lookup.node; + } else { + node = path; + } + FS.doTruncate(null, node, len); + }, + ftruncate(fd, len) { + var stream = FS.getStreamChecked(fd); + if (len < 0 || (stream.flags & 2097155) === 0) { + throw new FS.ErrnoError(28); + } + FS.doTruncate(stream, stream.node, len); + }, + utime(path, atime, mtime) { + var lookup = FS.lookupPath(path, { follow: true }); + var node = lookup.node; + var setattr = FS.checkOpExists(node.node_ops.setattr, 63); + setattr(node, { + atime: atime, + mtime: mtime + }); + }, + open(path, flags, mode = 0o666) { + if (path === "") { + throw new FS.ErrnoError(44); + } + flags = typeof flags == 'string' ? FS_modeStringToFlags(flags) : flags; + if ((flags & 64)) { + mode = (mode & 4095) | 32768; + } else { + mode = 0; + } + var node; + var isDirPath; + if (typeof path == 'object') { + node = path; + } else { + isDirPath = path.endsWith("/"); + // noent_okay makes it so that if the final component of the path + // doesn't exist, lookupPath returns `node: undefined`. `path` will be + // updated to point to the target of all symlinks. + var lookup = FS.lookupPath(path, { + follow: !(flags & 131072), + noent_okay: true + }); + node = lookup.node; + path = lookup.path; + } + // perhaps we need to create the node + var created = false; + if ((flags & 64)) { + if (node) { + // if O_CREAT and O_EXCL are set, error out if the node already exists + if ((flags & 128)) { + throw new FS.ErrnoError(20); + } + } else if (isDirPath) { + throw new FS.ErrnoError(31); + } else { + // node doesn't exist, try to create it + // Ignore the permission bits here to ensure we can `open` this new + // file below. We use chmod below the apply the permissions once the + // file is open. + node = FS.mknod(path, mode | 0o777, 0); + created = true; + } + } + if (!node) { + throw new FS.ErrnoError(44); + } + // can't truncate a device + if (FS.isChrdev(node.mode)) { + flags &= ~512; + } + // if asked only for a directory, then this must be one + if ((flags & 65536) && !FS.isDir(node.mode)) { + throw new FS.ErrnoError(54); + } + // check permissions, if this is not a file we just created now (it is ok to + // create and write to a file with read-only permissions; it is read-only + // for later use) + if (!created) { + var errCode = FS.mayOpen(node, flags); + if (errCode) { + throw new FS.ErrnoError(errCode); + } + } + // do truncation if necessary + if ((flags & 512) && !created) { + FS.truncate(node, 0); + } + // we've already handled these, don't pass down to the underlying vfs + flags &= ~(128 | 512 | 131072); + + // register the stream with the filesystem + var stream = FS.createStream({ + node, + path: FS.getPath(node), // we want the absolute path to the node + flags, + seekable: true, + position: 0, + stream_ops: node.stream_ops, + // used by the file family libc calls (fopen, fwrite, ferror, etc.) + ungotten: [], + error: false + }); + // call the new stream's open function + if (stream.stream_ops.open) { + stream.stream_ops.open(stream); + } + if (created) { + FS.chmod(node, mode & 0o777); + } + if (Module['logReadFiles'] && !(flags & 1)) { + if (!(path in FS.readFiles)) { + FS.readFiles[path] = 1; + } + } + return stream; + }, + close(stream) { + if (FS.isClosed(stream)) { + throw new FS.ErrnoError(8); + } + if (stream.getdents) stream.getdents = null; // free readdir state + try { + if (stream.stream_ops.close) { + stream.stream_ops.close(stream); + } + } catch (e) { + throw e; + } finally { + FS.closeStream(stream.fd); + } + stream.fd = null; + }, + isClosed(stream) { + return stream.fd === null; + }, + llseek(stream, offset, whence) { + if (FS.isClosed(stream)) { + throw new FS.ErrnoError(8); + } + if (!stream.seekable || !stream.stream_ops.llseek) { + throw new FS.ErrnoError(70); + } + if (whence != 0 && whence != 1 && whence != 2) { + throw new FS.ErrnoError(28); + } + stream.position = stream.stream_ops.llseek(stream, offset, whence); + stream.ungotten = []; + return stream.position; + }, + read(stream, buffer, offset, length, position) { + assert(offset >= 0); + if (length < 0 || position < 0) { + throw new FS.ErrnoError(28); + } + if (FS.isClosed(stream)) { + throw new FS.ErrnoError(8); + } + if ((stream.flags & 2097155) === 1) { + throw new FS.ErrnoError(8); + } + if (FS.isDir(stream.node.mode)) { + throw new FS.ErrnoError(31); + } + if (!stream.stream_ops.read) { + throw new FS.ErrnoError(28); + } + var seeking = typeof position != 'undefined'; + if (!seeking) { + position = stream.position; + } else if (!stream.seekable) { + throw new FS.ErrnoError(70); + } + var bytesRead = stream.stream_ops.read(stream, buffer, offset, length, position); + if (!seeking) stream.position += bytesRead; + return bytesRead; + }, + write(stream, buffer, offset, length, position, canOwn) { + assert(offset >= 0); + if (length < 0 || position < 0) { + throw new FS.ErrnoError(28); + } + if (FS.isClosed(stream)) { + throw new FS.ErrnoError(8); + } + if ((stream.flags & 2097155) === 0) { + throw new FS.ErrnoError(8); + } + if (FS.isDir(stream.node.mode)) { + throw new FS.ErrnoError(31); + } + if (!stream.stream_ops.write) { + throw new FS.ErrnoError(28); + } + if (stream.seekable && stream.flags & 1024) { + // seek to the end before writing in append mode + FS.llseek(stream, 0, 2); + } + var seeking = typeof position != 'undefined'; + if (!seeking) { + position = stream.position; + } else if (!stream.seekable) { + throw new FS.ErrnoError(70); + } + var bytesWritten = stream.stream_ops.write(stream, buffer, offset, length, position, canOwn); + if (!seeking) stream.position += bytesWritten; + return bytesWritten; + }, + mmap(stream, length, position, prot, flags) { + // User requests writing to file (prot & PROT_WRITE != 0). + // Checking if we have permissions to write to the file unless + // MAP_PRIVATE flag is set. According to POSIX spec it is possible + // to write to file opened in read-only mode with MAP_PRIVATE flag, + // as all modifications will be visible only in the memory of + // the current process. + if ((prot & 2) !== 0 + && (flags & 2) === 0 + && (stream.flags & 2097155) !== 2) { + throw new FS.ErrnoError(2); + } + if ((stream.flags & 2097155) === 1) { + throw new FS.ErrnoError(2); + } + if (!stream.stream_ops.mmap) { + throw new FS.ErrnoError(43); + } + if (!length) { + throw new FS.ErrnoError(28); + } + return stream.stream_ops.mmap(stream, length, position, prot, flags); + }, + msync(stream, buffer, offset, length, mmapFlags) { + assert(offset >= 0); + if (!stream.stream_ops.msync) { + return 0; + } + return stream.stream_ops.msync(stream, buffer, offset, length, mmapFlags); + }, + ioctl(stream, cmd, arg) { + if (!stream.stream_ops.ioctl) { + throw new FS.ErrnoError(59); + } + return stream.stream_ops.ioctl(stream, cmd, arg); + }, + readFile(path, opts = {}) { + opts.flags = opts.flags || 0; + opts.encoding = opts.encoding || 'binary'; + if (opts.encoding !== 'utf8' && opts.encoding !== 'binary') { + throw new Error(`Invalid encoding type "${opts.encoding}"`); + } + var ret; + var stream = FS.open(path, opts.flags); + var stat = FS.stat(path); + var length = stat.size; + var buf = new Uint8Array(length); + FS.read(stream, buf, 0, length, 0); + if (opts.encoding === 'utf8') { + ret = UTF8ArrayToString(buf); + } else if (opts.encoding === 'binary') { + ret = buf; + } + FS.close(stream); + return ret; + }, + writeFile(path, data, opts = {}) { + opts.flags = opts.flags || 577; + var stream = FS.open(path, opts.flags, opts.mode); + if (typeof data == 'string') { + var buf = new Uint8Array(lengthBytesUTF8(data)+1); + var actualNumBytes = stringToUTF8Array(data, buf, 0, buf.length); + FS.write(stream, buf, 0, actualNumBytes, undefined, opts.canOwn); + } else if (ArrayBuffer.isView(data)) { + FS.write(stream, data, 0, data.byteLength, undefined, opts.canOwn); + } else { + throw new Error('Unsupported data type'); + } + FS.close(stream); + }, + cwd:() => FS.currentPath, + chdir(path) { + var lookup = FS.lookupPath(path, { follow: true }); + if (lookup.node === null) { + throw new FS.ErrnoError(44); + } + if (!FS.isDir(lookup.node.mode)) { + throw new FS.ErrnoError(54); + } + var errCode = FS.nodePermissions(lookup.node, 'x'); + if (errCode) { + throw new FS.ErrnoError(errCode); + } + FS.currentPath = lookup.path; + }, + createDefaultDirectories() { + FS.mkdir('/tmp'); + FS.mkdir('/home'); + FS.mkdir('/home/web_user'); + }, + createDefaultDevices() { + // create /dev + FS.mkdir('/dev'); + // setup /dev/null + FS.registerDevice(FS.makedev(1, 3), { + read: () => 0, + write: (stream, buffer, offset, length, pos) => length, + llseek: () => 0, + }); + FS.mkdev('/dev/null', FS.makedev(1, 3)); + // setup /dev/tty and /dev/tty1 + // stderr needs to print output using err() rather than out() + // so we register a second tty just for it. + TTY.register(FS.makedev(5, 0), TTY.default_tty_ops); + TTY.register(FS.makedev(6, 0), TTY.default_tty1_ops); + FS.mkdev('/dev/tty', FS.makedev(5, 0)); + FS.mkdev('/dev/tty1', FS.makedev(6, 0)); + // setup /dev/[u]random + // use a buffer to avoid overhead of individual crypto calls per byte + var randomBuffer = new Uint8Array(1024), randomLeft = 0; + var randomByte = () => { + if (randomLeft === 0) { + randomFill(randomBuffer); + randomLeft = randomBuffer.byteLength; + } + return randomBuffer[--randomLeft]; + }; + FS.createDevice('/dev', 'random', randomByte); + FS.createDevice('/dev', 'urandom', randomByte); + // we're not going to emulate the actual shm device, + // just create the tmp dirs that reside in it commonly + FS.mkdir('/dev/shm'); + FS.mkdir('/dev/shm/tmp'); + }, + createSpecialDirectories() { + // create /proc/self/fd which allows /proc/self/fd/6 => readlink gives the + // name of the stream for fd 6 (see test_unistd_ttyname) + FS.mkdir('/proc'); + var proc_self = FS.mkdir('/proc/self'); + FS.mkdir('/proc/self/fd'); + FS.mount({ + mount() { + var node = FS.createNode(proc_self, 'fd', 16895, 73); + node.stream_ops = { + llseek: MEMFS.stream_ops.llseek, + }; + node.node_ops = { + lookup(parent, name) { + var fd = +name; + var stream = FS.getStreamChecked(fd); + var ret = { + parent: null, + mount: { mountpoint: 'fake' }, + node_ops: { readlink: () => stream.path }, + id: fd + 1, + }; + ret.parent = ret; // make it look like a simple root node + return ret; + }, + readdir() { + return Array.from(FS.streams.entries()) + .filter(([k, v]) => v) + .map(([k, v]) => k.toString()); + } + }; + return node; + } + }, {}, '/proc/self/fd'); + }, + createStandardStreams(input, output, error) { + // TODO deprecate the old functionality of a single + // input / output callback and that utilizes FS.createDevice + // and instead require a unique set of stream ops + + // by default, we symlink the standard streams to the + // default tty devices. however, if the standard streams + // have been overwritten we create a unique device for + // them instead. + if (input) { + FS.createDevice('/dev', 'stdin', input); + } else { + FS.symlink('/dev/tty', '/dev/stdin'); + } + if (output) { + FS.createDevice('/dev', 'stdout', null, output); + } else { + FS.symlink('/dev/tty', '/dev/stdout'); + } + if (error) { + FS.createDevice('/dev', 'stderr', null, error); + } else { + FS.symlink('/dev/tty1', '/dev/stderr'); + } + + // open default streams for the stdin, stdout and stderr devices + var stdin = FS.open('/dev/stdin', 0); + var stdout = FS.open('/dev/stdout', 1); + var stderr = FS.open('/dev/stderr', 1); + assert(stdin.fd === 0, `invalid handle for stdin (${stdin.fd})`); + assert(stdout.fd === 1, `invalid handle for stdout (${stdout.fd})`); + assert(stderr.fd === 2, `invalid handle for stderr (${stderr.fd})`); + }, + staticInit() { + FS.nameTable = new Array(4096); + + FS.mount(MEMFS, {}, '/'); + + FS.createDefaultDirectories(); + FS.createDefaultDevices(); + FS.createSpecialDirectories(); + + FS.filesystems = { + 'MEMFS': MEMFS, + }; + }, + init(input, output, error) { + assert(!FS.initialized, 'FS.init was previously called. If you want to initialize later with custom parameters, remove any earlier calls (note that one is automatically added to the generated code)'); + FS.initialized = true; + + // Allow Module.stdin etc. to provide defaults, if none explicitly passed to us here + input ??= Module['stdin']; + output ??= Module['stdout']; + error ??= Module['stderr']; + + FS.createStandardStreams(input, output, error); + }, + quit() { + FS.initialized = false; + // force-flush all streams, so we get musl std streams printed out + _fflush(0); + // close all of our streams + for (var stream of FS.streams) { + if (stream) { + FS.close(stream); + } + } + }, + findObject(path, dontResolveLastLink) { + var ret = FS.analyzePath(path, dontResolveLastLink); + if (!ret.exists) { + return null; + } + return ret.object; + }, + analyzePath(path, dontResolveLastLink) { + // operate from within the context of the symlink's target + try { + var lookup = FS.lookupPath(path, { follow: !dontResolveLastLink }); + path = lookup.path; + } catch (e) { + } + var ret = { + isRoot: false, exists: false, error: 0, name: null, path: null, object: null, + parentExists: false, parentPath: null, parentObject: null + }; + try { + var lookup = FS.lookupPath(path, { parent: true }); + ret.parentExists = true; + ret.parentPath = lookup.path; + ret.parentObject = lookup.node; + ret.name = PATH.basename(path); + lookup = FS.lookupPath(path, { follow: !dontResolveLastLink }); + ret.exists = true; + ret.path = lookup.path; + ret.object = lookup.node; + ret.name = lookup.node.name; + ret.isRoot = lookup.path === '/'; + } catch (e) { + ret.error = e.errno; + }; + return ret; + }, + createPath(parent, path, canRead, canWrite) { + parent = typeof parent == 'string' ? parent : FS.getPath(parent); + var parts = path.split('/').reverse(); + while (parts.length) { + var part = parts.pop(); + if (!part) continue; + var current = PATH.join2(parent, part); + try { + FS.mkdir(current); + } catch (e) { + if (e.errno != 20) throw e; + } + parent = current; + } + return current; + }, + createFile(parent, name, properties, canRead, canWrite) { + var path = PATH.join2(typeof parent == 'string' ? parent : FS.getPath(parent), name); + var mode = FS_getMode(canRead, canWrite); + return FS.create(path, mode); + }, + createDataFile(parent, name, data, canRead, canWrite, canOwn) { + var path = name; + if (parent) { + parent = typeof parent == 'string' ? parent : FS.getPath(parent); + path = name ? PATH.join2(parent, name) : parent; + } + var mode = FS_getMode(canRead, canWrite); + var node = FS.create(path, mode); + if (data) { + if (typeof data == 'string') { + var arr = new Array(data.length); + for (var i = 0, len = data.length; i < len; ++i) arr[i] = data.charCodeAt(i); + data = arr; + } + // make sure we can write to the file + FS.chmod(node, mode | 146); + var stream = FS.open(node, 577); + FS.write(stream, data, 0, data.length, 0, canOwn); + FS.close(stream); + FS.chmod(node, mode); + } + }, + createDevice(parent, name, input, output) { + var path = PATH.join2(typeof parent == 'string' ? parent : FS.getPath(parent), name); + var mode = FS_getMode(!!input, !!output); + FS.createDevice.major ??= 64; + var dev = FS.makedev(FS.createDevice.major++, 0); + // Create a fake device that a set of stream ops to emulate + // the old behavior. + FS.registerDevice(dev, { + open(stream) { + stream.seekable = false; + }, + close(stream) { + // flush any pending line data + if (output?.buffer?.length) { + output(10); + } + }, + read(stream, buffer, offset, length, pos /* ignored */) { + var bytesRead = 0; + for (var i = 0; i < length; i++) { + var result; + try { + result = input(); + } catch (e) { + throw new FS.ErrnoError(29); + } + if (result === undefined && bytesRead === 0) { + throw new FS.ErrnoError(6); + } + if (result === null || result === undefined) break; + bytesRead++; + buffer[offset+i] = result; + } + if (bytesRead) { + stream.node.atime = Date.now(); + } + return bytesRead; + }, + write(stream, buffer, offset, length, pos) { + for (var i = 0; i < length; i++) { + try { + output(buffer[offset+i]); + } catch (e) { + throw new FS.ErrnoError(29); + } + } + if (length) { + stream.node.mtime = stream.node.ctime = Date.now(); + } + return i; + } + }); + return FS.mkdev(path, mode, dev); + }, + forceLoadFile(obj) { + if (obj.isDevice || obj.isFolder || obj.link || obj.contents) return true; + if (typeof XMLHttpRequest != 'undefined') { + throw new Error("Lazy loading should have been performed (contents set) in createLazyFile, but it was not. Lazy loading only works in web workers. Use --embed-file or --preload-file in emcc on the main thread."); + } else { // Command-line. + try { + obj.contents = readBinary(obj.url); + obj.usedBytes = obj.contents.length; + } catch (e) { + throw new FS.ErrnoError(29); + } + } + }, + createLazyFile(parent, name, url, canRead, canWrite) { + // Lazy chunked Uint8Array (implements get and length from Uint8Array). + // Actual getting is abstracted away for eventual reuse. + class LazyUint8Array { + lengthKnown = false; + chunks = []; // Loaded chunks. Index is the chunk number + get(idx) { + if (idx > this.length-1 || idx < 0) { + return undefined; + } + var chunkOffset = idx % this.chunkSize; + var chunkNum = (idx / this.chunkSize)|0; + return this.getter(chunkNum)[chunkOffset]; + } + setDataGetter(getter) { + this.getter = getter; + } + cacheLength() { + // Find length + var xhr = new XMLHttpRequest(); + xhr.open('HEAD', url, false); + xhr.send(null); + if (!(xhr.status >= 200 && xhr.status < 300 || xhr.status === 304)) throw new Error("Couldn't load " + url + ". Status: " + xhr.status); + var datalength = Number(xhr.getResponseHeader("Content-length")); + var header; + var hasByteServing = (header = xhr.getResponseHeader("Accept-Ranges")) && header === "bytes"; + var usesGzip = (header = xhr.getResponseHeader("Content-Encoding")) && header === "gzip"; + + var chunkSize = 1024*1024; // Chunk size in bytes + + if (!hasByteServing) chunkSize = datalength; + + // Function to get a range from the remote URL. + var doXHR = (from, to) => { + if (from > to) throw new Error("invalid range (" + from + ", " + to + ") or no bytes requested!"); + if (to > datalength-1) throw new Error("only " + datalength + " bytes available! programmer error!"); + + // TODO: Use mozResponseArrayBuffer, responseStream, etc. if available. + var xhr = new XMLHttpRequest(); + xhr.open('GET', url, false); + if (datalength !== chunkSize) xhr.setRequestHeader("Range", "bytes=" + from + "-" + to); + + // Some hints to the browser that we want binary data. + xhr.responseType = 'arraybuffer'; + if (xhr.overrideMimeType) { + xhr.overrideMimeType('text/plain; charset=x-user-defined'); + } + + xhr.send(null); + if (!(xhr.status >= 200 && xhr.status < 300 || xhr.status === 304)) throw new Error("Couldn't load " + url + ". Status: " + xhr.status); + if (xhr.response !== undefined) { + return new Uint8Array(/** @type{Array} */(xhr.response || [])); + } + return intArrayFromString(xhr.responseText || '', true); + }; + var lazyArray = this; + lazyArray.setDataGetter((chunkNum) => { + var start = chunkNum * chunkSize; + var end = (chunkNum+1) * chunkSize - 1; // including this byte + end = Math.min(end, datalength-1); // if datalength-1 is selected, this is the last block + if (typeof lazyArray.chunks[chunkNum] == 'undefined') { + lazyArray.chunks[chunkNum] = doXHR(start, end); + } + if (typeof lazyArray.chunks[chunkNum] == 'undefined') throw new Error('doXHR failed!'); + return lazyArray.chunks[chunkNum]; + }); + + if (usesGzip || !datalength) { + // if the server uses gzip or doesn't supply the length, we have to download the whole file to get the (uncompressed) length + chunkSize = datalength = 1; // this will force getter(0)/doXHR do download the whole file + datalength = this.getter(0).length; + chunkSize = datalength; + out("LazyFiles on gzip forces download of the whole file when length is accessed"); + } + + this._length = datalength; + this._chunkSize = chunkSize; + this.lengthKnown = true; + } + get length() { + if (!this.lengthKnown) { + this.cacheLength(); + } + return this._length; + } + get chunkSize() { + if (!this.lengthKnown) { + this.cacheLength(); + } + return this._chunkSize; + } + } + + if (typeof XMLHttpRequest != 'undefined') { + if (!ENVIRONMENT_IS_WORKER) throw 'Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc'; + var lazyArray = new LazyUint8Array(); + var properties = { isDevice: false, contents: lazyArray }; + } else { + var properties = { isDevice: false, url: url }; + } + + var node = FS.createFile(parent, name, properties, canRead, canWrite); + // This is a total hack, but I want to get this lazy file code out of the + // core of MEMFS. If we want to keep this lazy file concept I feel it should + // be its own thin LAZYFS proxying calls to MEMFS. + if (properties.contents) { + node.contents = properties.contents; + } else if (properties.url) { + node.contents = null; + node.url = properties.url; + } + // Add a function that defers querying the file size until it is asked the first time. + Object.defineProperties(node, { + usedBytes: { + get: function() { return this.contents.length; } + } + }); + // override each stream op with one that tries to force load the lazy file first + var stream_ops = {}; + var keys = Object.keys(node.stream_ops); + keys.forEach((key) => { + var fn = node.stream_ops[key]; + stream_ops[key] = (...args) => { + FS.forceLoadFile(node); + return fn(...args); + }; + }); + function writeChunks(stream, buffer, offset, length, position) { + var contents = stream.node.contents; + if (position >= contents.length) + return 0; + var size = Math.min(contents.length - position, length); + assert(size >= 0); + if (contents.slice) { // normal array + for (var i = 0; i < size; i++) { + buffer[offset + i] = contents[position + i]; + } + } else { + for (var i = 0; i < size; i++) { // LazyUint8Array from sync binary XHR + buffer[offset + i] = contents.get(position + i); + } + } + return size; + } + // use a custom read function + stream_ops.read = (stream, buffer, offset, length, position) => { + FS.forceLoadFile(node); + return writeChunks(stream, buffer, offset, length, position) + }; + // use a custom mmap function + stream_ops.mmap = (stream, length, position, prot, flags) => { + FS.forceLoadFile(node); + var ptr = mmapAlloc(length); + if (!ptr) { + throw new FS.ErrnoError(48); + } + writeChunks(stream, HEAP8, ptr, length, position); + return { ptr, allocated: true }; + }; + node.stream_ops = stream_ops; + return node; + }, + absolutePath() { + abort('FS.absolutePath has been removed; use PATH_FS.resolve instead'); + }, + createFolder() { + abort('FS.createFolder has been removed; use FS.mkdir instead'); + }, + createLink() { + abort('FS.createLink has been removed; use FS.symlink instead'); + }, + joinPath() { + abort('FS.joinPath has been removed; use PATH.join instead'); + }, + mmapAlloc() { + abort('FS.mmapAlloc has been replaced by the top level function mmapAlloc'); + }, + standardizePath() { + abort('FS.standardizePath has been removed; use PATH.normalize instead'); + }, + }; + + var SYSCALLS = { + DEFAULT_POLLMASK:5, + calculateAt(dirfd, path, allowEmpty) { + if (PATH.isAbs(path)) { + return path; + } + // relative path + var dir; + if (dirfd === -100) { + dir = FS.cwd(); + } else { + var dirstream = SYSCALLS.getStreamFromFD(dirfd); + dir = dirstream.path; + } + if (path.length == 0) { + if (!allowEmpty) { + throw new FS.ErrnoError(44);; + } + return dir; + } + return dir + '/' + path; + }, + writeStat(buf, stat) { + HEAP32[((buf)>>2)] = stat.dev; + HEAP32[(((buf)+(4))>>2)] = stat.mode; + HEAPU32[(((buf)+(8))>>2)] = stat.nlink; + HEAP32[(((buf)+(12))>>2)] = stat.uid; + HEAP32[(((buf)+(16))>>2)] = stat.gid; + HEAP32[(((buf)+(20))>>2)] = stat.rdev; + HEAP64[(((buf)+(24))>>3)] = BigInt(stat.size); + HEAP32[(((buf)+(32))>>2)] = 4096; + HEAP32[(((buf)+(36))>>2)] = stat.blocks; + var atime = stat.atime.getTime(); + var mtime = stat.mtime.getTime(); + var ctime = stat.ctime.getTime(); + HEAP64[(((buf)+(40))>>3)] = BigInt(Math.floor(atime / 1000)); + HEAPU32[(((buf)+(48))>>2)] = (atime % 1000) * 1000 * 1000; + HEAP64[(((buf)+(56))>>3)] = BigInt(Math.floor(mtime / 1000)); + HEAPU32[(((buf)+(64))>>2)] = (mtime % 1000) * 1000 * 1000; + HEAP64[(((buf)+(72))>>3)] = BigInt(Math.floor(ctime / 1000)); + HEAPU32[(((buf)+(80))>>2)] = (ctime % 1000) * 1000 * 1000; + HEAP64[(((buf)+(88))>>3)] = BigInt(stat.ino); + return 0; + }, + writeStatFs(buf, stats) { + HEAP32[(((buf)+(4))>>2)] = stats.bsize; + HEAP32[(((buf)+(40))>>2)] = stats.bsize; + HEAP32[(((buf)+(8))>>2)] = stats.blocks; + HEAP32[(((buf)+(12))>>2)] = stats.bfree; + HEAP32[(((buf)+(16))>>2)] = stats.bavail; + HEAP32[(((buf)+(20))>>2)] = stats.files; + HEAP32[(((buf)+(24))>>2)] = stats.ffree; + HEAP32[(((buf)+(28))>>2)] = stats.fsid; + HEAP32[(((buf)+(44))>>2)] = stats.flags; // ST_NOSUID + HEAP32[(((buf)+(36))>>2)] = stats.namelen; + }, + doMsync(addr, stream, len, flags, offset) { + if (!FS.isFile(stream.node.mode)) { + throw new FS.ErrnoError(43); + } + if (flags & 2) { + // MAP_PRIVATE calls need not to be synced back to underlying fs + return 0; + } + var buffer = HEAPU8.slice(addr, addr + len); + FS.msync(stream, buffer, offset, len, flags); + }, + getStreamFromFD(fd) { + var stream = FS.getStreamChecked(fd); + return stream; + }, + varargs:undefined, + getStr(ptr) { + var ret = UTF8ToString(ptr); + return ret; + }, + }; + function ___syscall_chmod(path, mode) { + try { + + path = SYSCALLS.getStr(path); + FS.chmod(path, mode); + return 0; + } catch (e) { + if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + return -e.errno; + } + } + + function ___syscall_fchmod(fd, mode) { + try { + + FS.fchmod(fd, mode); + return 0; + } catch (e) { + if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + return -e.errno; + } + } + + /** @suppress {duplicate } */ + var syscallGetVarargI = () => { + assert(SYSCALLS.varargs != undefined); + // the `+` prepended here is necessary to convince the JSCompiler that varargs is indeed a number. + var ret = HEAP32[((+SYSCALLS.varargs)>>2)]; + SYSCALLS.varargs += 4; + return ret; + }; + var syscallGetVarargP = syscallGetVarargI; + + + function ___syscall_fcntl64(fd, cmd, varargs) { + SYSCALLS.varargs = varargs; + try { + + var stream = SYSCALLS.getStreamFromFD(fd); + switch (cmd) { + case 0: { + var arg = syscallGetVarargI(); + if (arg < 0) { + return -28; + } + while (FS.streams[arg]) { + arg++; + } + var newStream; + newStream = FS.dupStream(stream, arg); + return newStream.fd; + } + case 1: + case 2: + return 0; // FD_CLOEXEC makes no sense for a single process. + case 3: + return stream.flags; + case 4: { + var arg = syscallGetVarargI(); + stream.flags |= arg; + return 0; + } + case 12: { + var arg = syscallGetVarargP(); + var offset = 0; + // We're always unlocked. + HEAP16[(((arg)+(offset))>>1)] = 2; + return 0; + } + case 13: + case 14: + // Pretend that the locking is successful. These are process-level locks, + // and Emscripten programs are a single process. If we supported linking a + // filesystem between programs, we'd need to do more here. + // See https://github.com/emscripten-core/emscripten/issues/23697 + return 0; + } + return -28; + } catch (e) { + if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + return -e.errno; + } + } + + function ___syscall_fstat64(fd, buf) { + try { + + return SYSCALLS.writeStat(buf, FS.fstat(fd)); + } catch (e) { + if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + return -e.errno; + } + } + + + function ___syscall_ioctl(fd, op, varargs) { + SYSCALLS.varargs = varargs; + try { + + var stream = SYSCALLS.getStreamFromFD(fd); + switch (op) { + case 21509: { + if (!stream.tty) return -59; + return 0; + } + case 21505: { + if (!stream.tty) return -59; + if (stream.tty.ops.ioctl_tcgets) { + var termios = stream.tty.ops.ioctl_tcgets(stream); + var argp = syscallGetVarargP(); + HEAP32[((argp)>>2)] = termios.c_iflag || 0; + HEAP32[(((argp)+(4))>>2)] = termios.c_oflag || 0; + HEAP32[(((argp)+(8))>>2)] = termios.c_cflag || 0; + HEAP32[(((argp)+(12))>>2)] = termios.c_lflag || 0; + for (var i = 0; i < 32; i++) { + HEAP8[(argp + i)+(17)] = termios.c_cc[i] || 0; + } + return 0; + } + return 0; + } + case 21510: + case 21511: + case 21512: { + if (!stream.tty) return -59; + return 0; // no-op, not actually adjusting terminal settings + } + case 21506: + case 21507: + case 21508: { + if (!stream.tty) return -59; + if (stream.tty.ops.ioctl_tcsets) { + var argp = syscallGetVarargP(); + var c_iflag = HEAP32[((argp)>>2)]; + var c_oflag = HEAP32[(((argp)+(4))>>2)]; + var c_cflag = HEAP32[(((argp)+(8))>>2)]; + var c_lflag = HEAP32[(((argp)+(12))>>2)]; + var c_cc = [] + for (var i = 0; i < 32; i++) { + c_cc.push(HEAP8[(argp + i)+(17)]); + } + return stream.tty.ops.ioctl_tcsets(stream.tty, op, { c_iflag, c_oflag, c_cflag, c_lflag, c_cc }); + } + return 0; // no-op, not actually adjusting terminal settings + } + case 21519: { + if (!stream.tty) return -59; + var argp = syscallGetVarargP(); + HEAP32[((argp)>>2)] = 0; + return 0; + } + case 21520: { + if (!stream.tty) return -59; + return -28; // not supported + } + case 21531: { + var argp = syscallGetVarargP(); + return FS.ioctl(stream, op, argp); + } + case 21523: { + // TODO: in theory we should write to the winsize struct that gets + // passed in, but for now musl doesn't read anything on it + if (!stream.tty) return -59; + if (stream.tty.ops.ioctl_tiocgwinsz) { + var winsize = stream.tty.ops.ioctl_tiocgwinsz(stream.tty); + var argp = syscallGetVarargP(); + HEAP16[((argp)>>1)] = winsize[0]; + HEAP16[(((argp)+(2))>>1)] = winsize[1]; + } + return 0; + } + case 21524: { + // TODO: technically, this ioctl call should change the window size. + // but, since emscripten doesn't have any concept of a terminal window + // yet, we'll just silently throw it away as we do TIOCGWINSZ + if (!stream.tty) return -59; + return 0; + } + case 21515: { + if (!stream.tty) return -59; + return 0; + } + default: return -28; // not supported + } + } catch (e) { + if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + return -e.errno; + } + } + + function ___syscall_lstat64(path, buf) { + try { + + path = SYSCALLS.getStr(path); + return SYSCALLS.writeStat(buf, FS.lstat(path)); + } catch (e) { + if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + return -e.errno; + } + } + + function ___syscall_newfstatat(dirfd, path, buf, flags) { + try { + + path = SYSCALLS.getStr(path); + var nofollow = flags & 256; + var allowEmpty = flags & 4096; + flags = flags & (~6400); + assert(!flags, `unknown flags in __syscall_newfstatat: ${flags}`); + path = SYSCALLS.calculateAt(dirfd, path, allowEmpty); + return SYSCALLS.writeStat(buf, nofollow ? FS.lstat(path) : FS.stat(path)); + } catch (e) { + if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + return -e.errno; + } + } + + + function ___syscall_openat(dirfd, path, flags, varargs) { + SYSCALLS.varargs = varargs; + try { + + path = SYSCALLS.getStr(path); + path = SYSCALLS.calculateAt(dirfd, path); + var mode = varargs ? syscallGetVarargI() : 0; + return FS.open(path, flags, mode).fd; + } catch (e) { + if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + return -e.errno; + } + } + + function ___syscall_renameat(olddirfd, oldpath, newdirfd, newpath) { + try { + + oldpath = SYSCALLS.getStr(oldpath); + newpath = SYSCALLS.getStr(newpath); + oldpath = SYSCALLS.calculateAt(olddirfd, oldpath); + newpath = SYSCALLS.calculateAt(newdirfd, newpath); + FS.rename(oldpath, newpath); + return 0; + } catch (e) { + if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + return -e.errno; + } + } + + function ___syscall_rmdir(path) { + try { + + path = SYSCALLS.getStr(path); + FS.rmdir(path); + return 0; + } catch (e) { + if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + return -e.errno; + } + } + + function ___syscall_stat64(path, buf) { + try { + + path = SYSCALLS.getStr(path); + return SYSCALLS.writeStat(buf, FS.stat(path)); + } catch (e) { + if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + return -e.errno; + } + } + + function ___syscall_unlinkat(dirfd, path, flags) { + try { + + path = SYSCALLS.getStr(path); + path = SYSCALLS.calculateAt(dirfd, path); + if (flags === 0) { + FS.unlink(path); + } else if (flags === 512) { + FS.rmdir(path); + } else { + abort('Invalid flags passed to unlinkat'); + } + return 0; + } catch (e) { + if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + return -e.errno; + } + } + + var __abort_js = () => + abort('native code called abort()'); + + var isLeapYear = (year) => year%4 === 0 && (year%100 !== 0 || year%400 === 0); + + var MONTH_DAYS_LEAP_CUMULATIVE = [0,31,60,91,121,152,182,213,244,274,305,335]; + + var MONTH_DAYS_REGULAR_CUMULATIVE = [0,31,59,90,120,151,181,212,243,273,304,334]; + var ydayFromDate = (date) => { + var leap = isLeapYear(date.getFullYear()); + var monthDaysCumulative = (leap ? MONTH_DAYS_LEAP_CUMULATIVE : MONTH_DAYS_REGULAR_CUMULATIVE); + var yday = monthDaysCumulative[date.getMonth()] + date.getDate() - 1; // -1 since it's days since Jan 1 + + return yday; + }; + + var INT53_MAX = 9007199254740992; + + var INT53_MIN = -9007199254740992; + var bigintToI53Checked = (num) => (num < INT53_MIN || num > INT53_MAX) ? NaN : Number(num); + function __localtime_js(time, tmPtr) { + time = bigintToI53Checked(time); + + + var date = new Date(time*1000); + HEAP32[((tmPtr)>>2)] = date.getSeconds(); + HEAP32[(((tmPtr)+(4))>>2)] = date.getMinutes(); + HEAP32[(((tmPtr)+(8))>>2)] = date.getHours(); + HEAP32[(((tmPtr)+(12))>>2)] = date.getDate(); + HEAP32[(((tmPtr)+(16))>>2)] = date.getMonth(); + HEAP32[(((tmPtr)+(20))>>2)] = date.getFullYear()-1900; + HEAP32[(((tmPtr)+(24))>>2)] = date.getDay(); + + var yday = ydayFromDate(date)|0; + HEAP32[(((tmPtr)+(28))>>2)] = yday; + HEAP32[(((tmPtr)+(36))>>2)] = -(date.getTimezoneOffset() * 60); + + // Attention: DST is in December in South, and some regions don't have DST at all. + var start = new Date(date.getFullYear(), 0, 1); + var summerOffset = new Date(date.getFullYear(), 6, 1).getTimezoneOffset(); + var winterOffset = start.getTimezoneOffset(); + var dst = (summerOffset != winterOffset && date.getTimezoneOffset() == Math.min(winterOffset, summerOffset))|0; + HEAP32[(((tmPtr)+(32))>>2)] = dst; + ; + } + + + var __mktime_js = function(tmPtr) { + + var ret = (() => { + var date = new Date(HEAP32[(((tmPtr)+(20))>>2)] + 1900, + HEAP32[(((tmPtr)+(16))>>2)], + HEAP32[(((tmPtr)+(12))>>2)], + HEAP32[(((tmPtr)+(8))>>2)], + HEAP32[(((tmPtr)+(4))>>2)], + HEAP32[((tmPtr)>>2)], + 0); + + // There's an ambiguous hour when the time goes back; the tm_isdst field is + // used to disambiguate it. Date() basically guesses, so we fix it up if it + // guessed wrong, or fill in tm_isdst with the guess if it's -1. + var dst = HEAP32[(((tmPtr)+(32))>>2)]; + var guessedOffset = date.getTimezoneOffset(); + var start = new Date(date.getFullYear(), 0, 1); + var summerOffset = new Date(date.getFullYear(), 6, 1).getTimezoneOffset(); + var winterOffset = start.getTimezoneOffset(); + var dstOffset = Math.min(winterOffset, summerOffset); // DST is in December in South + if (dst < 0) { + // Attention: some regions don't have DST at all. + HEAP32[(((tmPtr)+(32))>>2)] = Number(summerOffset != winterOffset && dstOffset == guessedOffset); + } else if ((dst > 0) != (dstOffset == guessedOffset)) { + var nonDstOffset = Math.max(winterOffset, summerOffset); + var trueOffset = dst > 0 ? dstOffset : nonDstOffset; + // Don't try setMinutes(date.getMinutes() + ...) -- it's messed up. + date.setTime(date.getTime() + (trueOffset - guessedOffset)*60000); + } + + HEAP32[(((tmPtr)+(24))>>2)] = date.getDay(); + var yday = ydayFromDate(date)|0; + HEAP32[(((tmPtr)+(28))>>2)] = yday; + // To match expected behavior, update fields from date + HEAP32[((tmPtr)>>2)] = date.getSeconds(); + HEAP32[(((tmPtr)+(4))>>2)] = date.getMinutes(); + HEAP32[(((tmPtr)+(8))>>2)] = date.getHours(); + HEAP32[(((tmPtr)+(12))>>2)] = date.getDate(); + HEAP32[(((tmPtr)+(16))>>2)] = date.getMonth(); + HEAP32[(((tmPtr)+(20))>>2)] = date.getYear(); + + var timeMs = date.getTime(); + if (isNaN(timeMs)) { + return -1; + } + // Return time in microseconds + return timeMs / 1000; + })(); + return BigInt(ret); + }; + + var stringToUTF8 = (str, outPtr, maxBytesToWrite) => { + assert(typeof maxBytesToWrite == 'number', 'stringToUTF8(str, outPtr, maxBytesToWrite) is missing the third parameter that specifies the length of the output buffer!'); + return stringToUTF8Array(str, HEAPU8, outPtr, maxBytesToWrite); + }; + + var __tzset_js = (timezone, daylight, std_name, dst_name) => { + // TODO: Use (malleable) environment variables instead of system settings. + var currentYear = new Date().getFullYear(); + var winter = new Date(currentYear, 0, 1); + var summer = new Date(currentYear, 6, 1); + var winterOffset = winter.getTimezoneOffset(); + var summerOffset = summer.getTimezoneOffset(); + + // Local standard timezone offset. Local standard time is not adjusted for + // daylight savings. This code uses the fact that getTimezoneOffset returns + // a greater value during Standard Time versus Daylight Saving Time (DST). + // Thus it determines the expected output during Standard Time, and it + // compares whether the output of the given date the same (Standard) or less + // (DST). + var stdTimezoneOffset = Math.max(winterOffset, summerOffset); + + // timezone is specified as seconds west of UTC ("The external variable + // `timezone` shall be set to the difference, in seconds, between + // Coordinated Universal Time (UTC) and local standard time."), the same + // as returned by stdTimezoneOffset. + // See http://pubs.opengroup.org/onlinepubs/009695399/functions/tzset.html + HEAPU32[((timezone)>>2)] = stdTimezoneOffset * 60; + + HEAP32[((daylight)>>2)] = Number(winterOffset != summerOffset); + + var extractZone = (timezoneOffset) => { + // Why inverse sign? + // Read here https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/getTimezoneOffset + var sign = timezoneOffset >= 0 ? "-" : "+"; + + var absOffset = Math.abs(timezoneOffset) + var hours = String(Math.floor(absOffset / 60)).padStart(2, "0"); + var minutes = String(absOffset % 60).padStart(2, "0"); + + return `UTC${sign}${hours}${minutes}`; + } + + var winterName = extractZone(winterOffset); + var summerName = extractZone(summerOffset); + assert(winterName); + assert(summerName); + assert(lengthBytesUTF8(winterName) <= 16, `timezone name truncated to fit in TZNAME_MAX (${winterName})`); + assert(lengthBytesUTF8(summerName) <= 16, `timezone name truncated to fit in TZNAME_MAX (${summerName})`); + if (summerOffset < winterOffset) { + // Northern hemisphere + stringToUTF8(winterName, std_name, 17); + stringToUTF8(summerName, dst_name, 17); + } else { + stringToUTF8(winterName, dst_name, 17); + stringToUTF8(summerName, std_name, 17); + } + }; + + var _emscripten_date_now = () => Date.now(); + + var abortOnCannotGrowMemory = (requestedSize) => { + abort(`Cannot enlarge memory arrays to size ${requestedSize} bytes (OOM). Either (1) compile with -sINITIAL_MEMORY=X with X higher than the current value ${HEAP8.length}, (2) compile with -sALLOW_MEMORY_GROWTH which allows increasing the size at runtime, or (3) if you want malloc to return NULL (0) instead of this abort, compile with -sABORTING_MALLOC=0`); + }; + var _emscripten_resize_heap = (requestedSize) => { + var oldSize = HEAPU8.length; + // With CAN_ADDRESS_2GB or MEMORY64, pointers are already unsigned. + requestedSize >>>= 0; + abortOnCannotGrowMemory(requestedSize); + }; + + function _fd_close(fd) { + try { + + var stream = SYSCALLS.getStreamFromFD(fd); + FS.close(stream); + return 0; + } catch (e) { + if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + return e.errno; + } + } + + function _fd_fdstat_get(fd, pbuf) { + try { + + var rightsBase = 0; + var rightsInheriting = 0; + var flags = 0; + { + var stream = SYSCALLS.getStreamFromFD(fd); + // All character devices are terminals (other things a Linux system would + // assume is a character device, like the mouse, we have special APIs for). + var type = stream.tty ? 2 : + FS.isDir(stream.mode) ? 3 : + FS.isLink(stream.mode) ? 7 : + 4; + } + HEAP8[pbuf] = type; + HEAP16[(((pbuf)+(2))>>1)] = flags; + HEAP64[(((pbuf)+(8))>>3)] = BigInt(rightsBase); + HEAP64[(((pbuf)+(16))>>3)] = BigInt(rightsInheriting); + return 0; + } catch (e) { + if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + return e.errno; + } + } + + /** @param {number=} offset */ + var doReadv = (stream, iov, iovcnt, offset) => { + var ret = 0; + for (var i = 0; i < iovcnt; i++) { + var ptr = HEAPU32[((iov)>>2)]; + var len = HEAPU32[(((iov)+(4))>>2)]; + iov += 8; + var curr = FS.read(stream, HEAP8, ptr, len, offset); + if (curr < 0) return -1; + ret += curr; + if (curr < len) break; // nothing more to read + if (typeof offset != 'undefined') { + offset += curr; + } + } + return ret; + }; + + function _fd_read(fd, iov, iovcnt, pnum) { + try { + + var stream = SYSCALLS.getStreamFromFD(fd); + var num = doReadv(stream, iov, iovcnt); + HEAPU32[((pnum)>>2)] = num; + return 0; + } catch (e) { + if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + return e.errno; + } + } + + + function _fd_seek(fd, offset, whence, newOffset) { + offset = bigintToI53Checked(offset); + + + try { + + if (isNaN(offset)) return 61; + var stream = SYSCALLS.getStreamFromFD(fd); + FS.llseek(stream, offset, whence); + HEAP64[((newOffset)>>3)] = BigInt(stream.position); + if (stream.getdents && offset === 0 && whence === 0) stream.getdents = null; // reset readdir state + return 0; + } catch (e) { + if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + return e.errno; + } + ; + } + + /** @param {number=} offset */ + var doWritev = (stream, iov, iovcnt, offset) => { + var ret = 0; + for (var i = 0; i < iovcnt; i++) { + var ptr = HEAPU32[((iov)>>2)]; + var len = HEAPU32[(((iov)+(4))>>2)]; + iov += 8; + var curr = FS.write(stream, HEAP8, ptr, len, offset); + if (curr < 0) return -1; + ret += curr; + if (curr < len) { + // No more space to write. + break; + } + if (typeof offset != 'undefined') { + offset += curr; + } + } + return ret; + }; + + function _fd_write(fd, iov, iovcnt, pnum) { + try { + + var stream = SYSCALLS.getStreamFromFD(fd); + var num = doWritev(stream, iov, iovcnt); + HEAPU32[((pnum)>>2)] = num; + return 0; + } catch (e) { + if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + return e.errno; + } + } + + + var runtimeKeepaliveCounter = 0; + var keepRuntimeAlive = () => noExitRuntime || runtimeKeepaliveCounter > 0; + var _proc_exit = (code) => { + EXITSTATUS = code; + if (!keepRuntimeAlive()) { + Module['onExit']?.(code); + ABORT = true; + } + quit_(code, new ExitStatus(code)); + }; + + + /** @param {boolean|number=} implicit */ + var exitJS = (status, implicit) => { + EXITSTATUS = status; + + checkUnflushedContent(); + + // if exit() was called explicitly, warn the user if the runtime isn't actually being shut down + if (keepRuntimeAlive() && !implicit) { + var msg = `program exited (with status: ${status}), but keepRuntimeAlive() is set (counter=${runtimeKeepaliveCounter}) due to an async operation, so halting execution but not exiting the runtime or preventing further async execution (you can use emscripten_force_exit, if you want to force a true shutdown)`; + err(msg); + } + + _proc_exit(status); + }; + + var handleException = (e) => { + // Certain exception types we do not treat as errors since they are used for + // internal control flow. + // 1. ExitStatus, which is thrown by exit() + // 2. "unwind", which is thrown by emscripten_unwind_to_js_event_loop() and others + // that wish to return to JS event loop. + if (e instanceof ExitStatus || e == 'unwind') { + return EXITSTATUS; + } + checkStackCookie(); + if (e instanceof WebAssembly.RuntimeError) { + if (_emscripten_stack_get_current() <= 0) { + err('Stack overflow detected. You can try increasing -sSTACK_SIZE (currently set to 65536)'); + } + } + quit_(1, e); + }; + + + + var stackAlloc = (sz) => __emscripten_stack_alloc(sz); + var stringToUTF8OnStack = (str) => { + var size = lengthBytesUTF8(str) + 1; + var ret = stackAlloc(size); + stringToUTF8(str, ret, size); + return ret; + }; + + FS.createPreloadedFile = FS_createPreloadedFile; + FS.staticInit(); + // Set module methods based on EXPORTED_RUNTIME_METHODS + ; +// End JS library code + +function checkIncomingModuleAPI() { + ignoredModuleProp('fetchSettings'); +} +var wasmImports = { + /** @export */ + __syscall_chmod: ___syscall_chmod, + /** @export */ + __syscall_fchmod: ___syscall_fchmod, + /** @export */ + __syscall_fcntl64: ___syscall_fcntl64, + /** @export */ + __syscall_fstat64: ___syscall_fstat64, + /** @export */ + __syscall_ioctl: ___syscall_ioctl, + /** @export */ + __syscall_lstat64: ___syscall_lstat64, + /** @export */ + __syscall_newfstatat: ___syscall_newfstatat, + /** @export */ + __syscall_openat: ___syscall_openat, + /** @export */ + __syscall_renameat: ___syscall_renameat, + /** @export */ + __syscall_rmdir: ___syscall_rmdir, + /** @export */ + __syscall_stat64: ___syscall_stat64, + /** @export */ + __syscall_unlinkat: ___syscall_unlinkat, + /** @export */ + _abort_js: __abort_js, + /** @export */ + _localtime_js: __localtime_js, + /** @export */ + _mktime_js: __mktime_js, + /** @export */ + _tzset_js: __tzset_js, + /** @export */ + emscripten_date_now: _emscripten_date_now, + /** @export */ + emscripten_resize_heap: _emscripten_resize_heap, + /** @export */ + fd_close: _fd_close, + /** @export */ + fd_fdstat_get: _fd_fdstat_get, + /** @export */ + fd_read: _fd_read, + /** @export */ + fd_seek: _fd_seek, + /** @export */ + fd_write: _fd_write +}; +var wasmExports; +createWasm(); +var ___wasm_call_ctors = createExportWrapper('__wasm_call_ctors', 0); +var _main = Module['_main'] = createExportWrapper('__main_argc_argv', 2); +var _strerror = createExportWrapper('strerror', 1); +var _fflush = createExportWrapper('fflush', 1); +var _emscripten_stack_init = () => (_emscripten_stack_init = wasmExports['emscripten_stack_init'])(); +var _emscripten_stack_get_free = () => (_emscripten_stack_get_free = wasmExports['emscripten_stack_get_free'])(); +var _emscripten_stack_get_base = () => (_emscripten_stack_get_base = wasmExports['emscripten_stack_get_base'])(); +var _emscripten_stack_get_end = () => (_emscripten_stack_get_end = wasmExports['emscripten_stack_get_end'])(); +var __emscripten_stack_restore = (a0) => (__emscripten_stack_restore = wasmExports['_emscripten_stack_restore'])(a0); +var __emscripten_stack_alloc = (a0) => (__emscripten_stack_alloc = wasmExports['_emscripten_stack_alloc'])(a0); +var _emscripten_stack_get_current = () => (_emscripten_stack_get_current = wasmExports['emscripten_stack_get_current'])(); + + +// include: postamble.js +// === Auto-generated postamble setup entry stuff === + +var missingLibrarySymbols = [ + 'writeI53ToI64', + 'writeI53ToI64Clamped', + 'writeI53ToI64Signaling', + 'writeI53ToU64Clamped', + 'writeI53ToU64Signaling', + 'readI53FromI64', + 'readI53FromU64', + 'convertI32PairToI53', + 'convertI32PairToI53Checked', + 'convertU32PairToI53', + 'getTempRet0', + 'setTempRet0', + 'zeroMemory', + 'getHeapMax', + 'growMemory', + 'inetPton4', + 'inetNtop4', + 'inetPton6', + 'inetNtop6', + 'readSockaddr', + 'writeSockaddr', + 'emscriptenLog', + 'readEmAsmArgs', + 'jstoi_q', + 'getExecutableName', + 'listenOnce', + 'autoResumeAudioContext', + 'getDynCaller', + 'dynCall', + 'runtimeKeepalivePush', + 'runtimeKeepalivePop', + 'callUserCallback', + 'maybeExit', + 'asmjsMangle', + 'alignMemory', + 'HandleAllocator', + 'getNativeTypeSize', + 'addOnInit', + 'addOnPostCtor', + 'addOnPreMain', + 'addOnExit', + 'STACK_SIZE', + 'STACK_ALIGN', + 'POINTER_SIZE', + 'ASSERTIONS', + 'getCFunc', + 'ccall', + 'cwrap', + 'uleb128Encode', + 'sigToWasmTypes', + 'generateFuncType', + 'convertJsFunctionToWasm', + 'getEmptyTableSlot', + 'updateTableMap', + 'getFunctionAddress', + 'addFunction', + 'removeFunction', + 'reallyNegative', + 'unSign', + 'strLen', + 'reSign', + 'formatString', + 'intArrayToString', + 'AsciiToString', + 'stringToAscii', + 'UTF16ToString', + 'stringToUTF16', + 'lengthBytesUTF16', + 'UTF32ToString', + 'stringToUTF32', + 'lengthBytesUTF32', + 'stringToNewUTF8', + 'writeArrayToMemory', + 'registerKeyEventCallback', + 'maybeCStringToJsString', + 'findEventTarget', + 'getBoundingClientRect', + 'fillMouseEventData', + 'registerMouseEventCallback', + 'registerWheelEventCallback', + 'registerUiEventCallback', + 'registerFocusEventCallback', + 'fillDeviceOrientationEventData', + 'registerDeviceOrientationEventCallback', + 'fillDeviceMotionEventData', + 'registerDeviceMotionEventCallback', + 'screenOrientation', + 'fillOrientationChangeEventData', + 'registerOrientationChangeEventCallback', + 'fillFullscreenChangeEventData', + 'registerFullscreenChangeEventCallback', + 'JSEvents_requestFullscreen', + 'JSEvents_resizeCanvasForFullscreen', + 'registerRestoreOldStyle', + 'hideEverythingExceptGivenElement', + 'restoreHiddenElements', + 'setLetterbox', + 'softFullscreenResizeWebGLRenderTarget', + 'doRequestFullscreen', + 'fillPointerlockChangeEventData', + 'registerPointerlockChangeEventCallback', + 'registerPointerlockErrorEventCallback', + 'requestPointerLock', + 'fillVisibilityChangeEventData', + 'registerVisibilityChangeEventCallback', + 'registerTouchEventCallback', + 'fillGamepadEventData', + 'registerGamepadEventCallback', + 'registerBeforeUnloadEventCallback', + 'fillBatteryEventData', + 'battery', + 'registerBatteryEventCallback', + 'setCanvasElementSize', + 'getCanvasElementSize', + 'jsStackTrace', + 'getCallstack', + 'convertPCtoSourceLocation', + 'getEnvStrings', + 'checkWasiClock', + 'wasiRightsToMuslOFlags', + 'wasiOFlagsToMuslOFlags', + 'safeSetTimeout', + 'setImmediateWrapped', + 'safeRequestAnimationFrame', + 'clearImmediateWrapped', + 'registerPostMainLoop', + 'registerPreMainLoop', + 'getPromise', + 'makePromise', + 'idsToPromises', + 'makePromiseCallback', + 'ExceptionInfo', + 'findMatchingCatch', + 'Browser_asyncPrepareDataCounter', + 'arraySum', + 'addDays', + 'getSocketFromFD', + 'getSocketAddress', + 'FS_unlink', + 'FS_mkdirTree', + '_setNetworkCallback', + 'heapObjectForWebGLType', + 'toTypedArrayIndex', + 'webgl_enable_ANGLE_instanced_arrays', + 'webgl_enable_OES_vertex_array_object', + 'webgl_enable_WEBGL_draw_buffers', + 'webgl_enable_WEBGL_multi_draw', + 'webgl_enable_EXT_polygon_offset_clamp', + 'webgl_enable_EXT_clip_control', + 'webgl_enable_WEBGL_polygon_mode', + 'emscriptenWebGLGet', + 'computeUnpackAlignedImageSize', + 'colorChannelsInGlTextureFormat', + 'emscriptenWebGLGetTexPixelData', + 'emscriptenWebGLGetUniform', + 'webglGetUniformLocation', + 'webglPrepareUniformLocationsBeforeFirstUse', + 'webglGetLeftBracePos', + 'emscriptenWebGLGetVertexAttrib', + '__glGetActiveAttribOrUniform', + 'writeGLArray', + 'registerWebGlEventCallback', + 'runAndAbortIfError', + 'ALLOC_NORMAL', + 'ALLOC_STACK', + 'allocate', + 'writeStringToMemory', + 'writeAsciiToMemory', + 'demangle', + 'stackTrace', +]; +missingLibrarySymbols.forEach(missingLibrarySymbol) + +var unexportedSymbols = [ + 'run', + 'addRunDependency', + 'removeRunDependency', + 'out', + 'err', + 'callMain', + 'abort', + 'wasmMemory', + 'wasmExports', + 'writeStackCookie', + 'checkStackCookie', + 'INT53_MAX', + 'INT53_MIN', + 'bigintToI53Checked', + 'stackSave', + 'stackRestore', + 'stackAlloc', + 'ptrToString', + 'exitJS', + 'abortOnCannotGrowMemory', + 'ENV', + 'ERRNO_CODES', + 'strError', + 'DNS', + 'Protocols', + 'Sockets', + 'timers', + 'warnOnce', + 'readEmAsmArgsArray', + 'jstoi_s', + 'handleException', + 'keepRuntimeAlive', + 'asyncLoad', + 'mmapAlloc', + 'wasmTable', + 'noExitRuntime', + 'addOnPreRun', + 'addOnPostRun', + 'freeTableIndexes', + 'functionsInTableMap', + 'setValue', + 'getValue', + 'PATH', + 'PATH_FS', + 'UTF8Decoder', + 'UTF8ArrayToString', + 'UTF8ToString', + 'stringToUTF8Array', + 'stringToUTF8', + 'lengthBytesUTF8', + 'intArrayFromString', + 'UTF16Decoder', + 'stringToUTF8OnStack', + 'JSEvents', + 'specialHTMLTargets', + 'findCanvasEventTarget', + 'currentFullscreenStrategy', + 'restoreOldWindowedStyle', + 'UNWIND_CACHE', + 'ExitStatus', + 'doReadv', + 'doWritev', + 'initRandomFill', + 'randomFill', + 'emSetImmediate', + 'emClearImmediate_deps', + 'emClearImmediate', + 'promiseMap', + 'uncaughtExceptionCount', + 'exceptionLast', + 'exceptionCaught', + 'Browser', + 'getPreloadedImageData__data', + 'wget', + 'MONTH_DAYS_REGULAR', + 'MONTH_DAYS_LEAP', + 'MONTH_DAYS_REGULAR_CUMULATIVE', + 'MONTH_DAYS_LEAP_CUMULATIVE', + 'isLeapYear', + 'ydayFromDate', + 'SYSCALLS', + 'preloadPlugins', + 'FS_createPreloadedFile', + 'FS_modeStringToFlags', + 'FS_getMode', + 'FS_stdin_getChar_buffer', + 'FS_stdin_getChar', + 'FS_createPath', + 'FS_createDevice', + 'FS_readFile', + 'FS', + 'FS_createDataFile', + 'FS_createLazyFile', + 'MEMFS', + 'TTY', + 'PIPEFS', + 'SOCKFS', + 'tempFixedLengthArray', + 'miniTempWebGLFloatBuffers', + 'miniTempWebGLIntBuffers', + 'GL', + 'AL', + 'GLUT', + 'EGL', + 'GLEW', + 'IDBStore', + 'SDL', + 'SDL_gfx', + 'allocateUTF8', + 'allocateUTF8OnStack', + 'print', + 'printErr', +]; +unexportedSymbols.forEach(unexportedRuntimeSymbol); + + + +var calledRun; + +function callMain(args = []) { + assert(runDependencies == 0, 'cannot call main when async dependencies remain! (listen on Module["onRuntimeInitialized"])'); + assert(typeof onPreRuns === 'undefined' || onPreRuns.length == 0, 'cannot call main when preRun functions remain to be called'); + + var entryFunction = _main; + + args.unshift(thisProgram); + + var argc = args.length; + var argv = stackAlloc((argc + 1) * 4); + var argv_ptr = argv; + args.forEach((arg) => { + HEAPU32[((argv_ptr)>>2)] = stringToUTF8OnStack(arg); + argv_ptr += 4; + }); + HEAPU32[((argv_ptr)>>2)] = 0; + + try { + + var ret = entryFunction(argc, argv); + + // if we're not running an evented main loop, it's time to exit + exitJS(ret, /* implicit = */ true); + return ret; + } catch (e) { + return handleException(e); + } +} + +function stackCheckInit() { + // This is normally called automatically during __wasm_call_ctors but need to + // get these values before even running any of the ctors so we call it redundantly + // here. + _emscripten_stack_init(); + // TODO(sbc): Move writeStackCookie to native to to avoid this. + writeStackCookie(); +} + +function run(args = arguments_) { + + if (runDependencies > 0) { + dependenciesFulfilled = run; + return; + } + + stackCheckInit(); + + preRun(); + + // a preRun added a dependency, run will be called later + if (runDependencies > 0) { + dependenciesFulfilled = run; + return; + } + + function doRun() { + // run may have just been called through dependencies being fulfilled just in this very frame, + // or while the async setStatus time below was happening + assert(!calledRun); + calledRun = true; + Module['calledRun'] = true; + + if (ABORT) return; + + initRuntime(); + + preMain(); + + Module['onRuntimeInitialized']?.(); + consumedModuleProp('onRuntimeInitialized'); + + var noInitialRun = Module['noInitialRun'];legacyModuleProp('noInitialRun', 'noInitialRun'); + if (!noInitialRun) callMain(args); + + postRun(); + } + + if (Module['setStatus']) { + Module['setStatus']('Running...'); + setTimeout(() => { + setTimeout(() => Module['setStatus'](''), 1); + doRun(); + }, 1); + } else + { + doRun(); + } + checkStackCookie(); +} + +function checkUnflushedContent() { + // Compiler settings do not allow exiting the runtime, so flushing + // the streams is not possible. but in ASSERTIONS mode we check + // if there was something to flush, and if so tell the user they + // should request that the runtime be exitable. + // Normally we would not even include flush() at all, but in ASSERTIONS + // builds we do so just for this check, and here we see if there is any + // content to flush, that is, we check if there would have been + // something a non-ASSERTIONS build would have not seen. + // How we flush the streams depends on whether we are in SYSCALLS_REQUIRE_FILESYSTEM=0 + // mode (which has its own special function for this; otherwise, all + // the code is inside libc) + var oldOut = out; + var oldErr = err; + var has = false; + out = err = (x) => { + has = true; + } + try { // it doesn't matter if it fails + _fflush(0); + // also flush in the JS FS layer + ['stdout', 'stderr'].forEach((name) => { + var info = FS.analyzePath('/dev/' + name); + if (!info) return; + var stream = info.object; + var rdev = stream.rdev; + var tty = TTY.ttys[rdev]; + if (tty?.output?.length) { + has = true; + } + }); + } catch(e) {} + out = oldOut; + err = oldErr; + if (has) { + warnOnce('stdio streams had content in them that was not flushed. you should set EXIT_RUNTIME to 1 (see the Emscripten FAQ), or make sure to emit a newline when you printf etc.'); + } +} + +if (Module['preInit']) { + if (typeof Module['preInit'] == 'function') Module['preInit'] = [Module['preInit']]; + while (Module['preInit'].length > 0) { + Module['preInit'].pop()(); + } +} +consumedModuleProp('preInit'); + +run(); + +// end include: postamble.js + diff --git a/thirdparty/libzip-1.11.3/build-emcmake/ossfuzz/zip_write_encrypt_pkware_file_fuzzer.wasm b/thirdparty/libzip-1.11.3/build-emcmake/ossfuzz/zip_write_encrypt_pkware_file_fuzzer.wasm new file mode 100755 index 0000000000000000000000000000000000000000..565b7bc8461aada6f8287febd3c1226e590ede87 GIT binary patch literal 400106 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�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 XPQE&WMI(5Vfg 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�NTu7ktw@{zhdVoh8a-%!ST0( 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 CMakeFiles/zipcmp.dir/zipcmp.c.i + +src/CMakeFiles/zipcmp.dir/zipcmp.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Compiling C source to assembly CMakeFiles/zipcmp.dir/zipcmp.c.s" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/src" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/src/zipcmp.c" -o CMakeFiles/zipcmp.dir/zipcmp.c.s + +src/CMakeFiles/zipcmp.dir/diff_output.c.o: src/CMakeFiles/zipcmp.dir/flags.make +src/CMakeFiles/zipcmp.dir/diff_output.c.o: src/CMakeFiles/zipcmp.dir/includes_C.rsp +src/CMakeFiles/zipcmp.dir/diff_output.c.o: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/src/diff_output.c +src/CMakeFiles/zipcmp.dir/diff_output.c.o: src/CMakeFiles/zipcmp.dir/compiler_depend.ts + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_2) "Building C object src/CMakeFiles/zipcmp.dir/diff_output.c.o" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/src" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -MD -MT src/CMakeFiles/zipcmp.dir/diff_output.c.o -MF CMakeFiles/zipcmp.dir/diff_output.c.o.d -o CMakeFiles/zipcmp.dir/diff_output.c.o -c "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/src/diff_output.c" + +src/CMakeFiles/zipcmp.dir/diff_output.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Preprocessing C source to CMakeFiles/zipcmp.dir/diff_output.c.i" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/src" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/src/diff_output.c" > CMakeFiles/zipcmp.dir/diff_output.c.i + +src/CMakeFiles/zipcmp.dir/diff_output.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Compiling C source to assembly CMakeFiles/zipcmp.dir/diff_output.c.s" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/src" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/src/diff_output.c" -o CMakeFiles/zipcmp.dir/diff_output.c.s + +# Object files for target zipcmp +zipcmp_OBJECTS = \ +"CMakeFiles/zipcmp.dir/zipcmp.c.o" \ +"CMakeFiles/zipcmp.dir/diff_output.c.o" + +# External object files for target zipcmp +zipcmp_EXTERNAL_OBJECTS = + +src/zipcmp.js: src/CMakeFiles/zipcmp.dir/zipcmp.c.o +src/zipcmp.js: src/CMakeFiles/zipcmp.dir/diff_output.c.o +src/zipcmp.js: src/CMakeFiles/zipcmp.dir/build.make +src/zipcmp.js: lib/libzip.a +src/zipcmp.js: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/zlib-1.3.1/install/lib/libz.a +src/zipcmp.js: src/CMakeFiles/zipcmp.dir/linkLibs.rsp +src/zipcmp.js: src/CMakeFiles/zipcmp.dir/objects1.rsp +src/zipcmp.js: src/CMakeFiles/zipcmp.dir/link.txt + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_3) "Linking C executable zipcmp.js" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/src" && $(CMAKE_COMMAND) -E cmake_link_script CMakeFiles/zipcmp.dir/link.txt --verbose=$(VERBOSE) + +# Rule to build all files generated by this target. +src/CMakeFiles/zipcmp.dir/build: src/zipcmp.js +.PHONY : src/CMakeFiles/zipcmp.dir/build + +src/CMakeFiles/zipcmp.dir/clean: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/src" && $(CMAKE_COMMAND) -P CMakeFiles/zipcmp.dir/cmake_clean.cmake +.PHONY : src/CMakeFiles/zipcmp.dir/clean + +src/CMakeFiles/zipcmp.dir/depend: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(CMAKE_COMMAND) -E cmake_depends "Unix Makefiles" "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3" "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/src" "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/src" "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/src/CMakeFiles/zipcmp.dir/DependInfo.cmake" "--color=$(COLOR)" +.PHONY : src/CMakeFiles/zipcmp.dir/depend + diff --git a/thirdparty/libzip-1.11.3/build-emcmake/src/CMakeFiles/zipcmp.dir/cmake_clean.cmake b/thirdparty/libzip-1.11.3/build-emcmake/src/CMakeFiles/zipcmp.dir/cmake_clean.cmake new file mode 100644 index 0000000..54a6c2f --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/src/CMakeFiles/zipcmp.dir/cmake_clean.cmake @@ -0,0 +1,13 @@ +file(REMOVE_RECURSE + "CMakeFiles/zipcmp.dir/diff_output.c.o" + "CMakeFiles/zipcmp.dir/diff_output.c.o.d" + "CMakeFiles/zipcmp.dir/zipcmp.c.o" + "CMakeFiles/zipcmp.dir/zipcmp.c.o.d" + "zipcmp.js" + "zipcmp.pdb" +) + +# Per-language clean rules from dependency scanning. +foreach(lang C) + include(CMakeFiles/zipcmp.dir/cmake_clean_${lang}.cmake OPTIONAL) +endforeach() diff --git a/thirdparty/libzip-1.11.3/build-emcmake/src/CMakeFiles/zipcmp.dir/compiler_depend.make b/thirdparty/libzip-1.11.3/build-emcmake/src/CMakeFiles/zipcmp.dir/compiler_depend.make new file mode 100644 index 0000000..8df6339 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/src/CMakeFiles/zipcmp.dir/compiler_depend.make @@ -0,0 +1,2 @@ +# Empty compiler generated dependencies file for zipcmp. +# This may be replaced when dependencies are built. diff --git a/thirdparty/libzip-1.11.3/build-emcmake/src/CMakeFiles/zipcmp.dir/compiler_depend.ts b/thirdparty/libzip-1.11.3/build-emcmake/src/CMakeFiles/zipcmp.dir/compiler_depend.ts new file mode 100644 index 0000000..c49ce20 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/src/CMakeFiles/zipcmp.dir/compiler_depend.ts @@ -0,0 +1,2 @@ +# CMAKE generated file: DO NOT EDIT! +# Timestamp file for compiler generated dependencies management for zipcmp. diff --git a/thirdparty/libzip-1.11.3/build-emcmake/src/CMakeFiles/zipcmp.dir/depend.make b/thirdparty/libzip-1.11.3/build-emcmake/src/CMakeFiles/zipcmp.dir/depend.make new file mode 100644 index 0000000..228e7b5 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/src/CMakeFiles/zipcmp.dir/depend.make @@ -0,0 +1,2 @@ +# Empty dependencies file for zipcmp. +# This may be replaced when dependencies are built. diff --git a/thirdparty/libzip-1.11.3/build-emcmake/src/CMakeFiles/zipcmp.dir/diff_output.c.o b/thirdparty/libzip-1.11.3/build-emcmake/src/CMakeFiles/zipcmp.dir/diff_output.c.o new file mode 100644 index 0000000000000000000000000000000000000000..63a56ae56ea18f5d68fafac705e0d86a122deb39 GIT binary patch literal 3758 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 a?k#zBuU7K1!L4<#k+B+;Esf?7QI(f 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 Qe|WIMKL~rR5+>vS2YhjbIRF3v literal 0 HcmV?d00001 diff --git a/thirdparty/libzip-1.11.3/build-emcmake/src/CMakeFiles/zipcmp.dir/zipcmp.c.o.d b/thirdparty/libzip-1.11.3/build-emcmake/src/CMakeFiles/zipcmp.dir/zipcmp.c.o.d new file mode 100644 index 0000000..fedd6b3 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/src/CMakeFiles/zipcmp.dir/zipcmp.c.o.d @@ -0,0 +1,60 @@ +src/CMakeFiles/zipcmp.dir/zipcmp.c.o: \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/src/zipcmp.c \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/config.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/zipconf.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/inttypes.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/inttypes.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/features.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stdint.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdint.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/alltypes.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/stdint.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/errno.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/errno.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/wasi/api.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stddef.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stddef.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_header_macro.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_ptrdiff_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_size_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_wchar_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_null.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_max_align_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_offsetof.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdio.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/stdlib.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdlib.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/alloca.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/string.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/string.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/strings.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/sys/stat.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/sys/stat.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/stat.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/zlib-1.3.1/install/include/zlib.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/zlib-1.3.1/install/include/zconf.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/limits.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/limits.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/limits.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/sys/types.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/endian.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/sys/select.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/stdarg.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stdarg.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdarg.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stdarg_header_macro.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stdarg___gnuc_va_list.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stdarg_va_list.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stdarg_va_arg.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stdarg___va_copy.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stdarg_va_copy.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/unistd.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/posix.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/src/getopt.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/zip.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/time.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/time.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/lib/compat.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stdbool.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdbool.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/src/diff_output.h diff --git a/thirdparty/libzip-1.11.3/build-emcmake/src/CMakeFiles/zipmerge.dir/DependInfo.cmake b/thirdparty/libzip-1.11.3/build-emcmake/src/CMakeFiles/zipmerge.dir/DependInfo.cmake new file mode 100644 index 0000000..f099e79 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/src/CMakeFiles/zipmerge.dir/DependInfo.cmake @@ -0,0 +1,23 @@ + +# Consider dependencies only in project. +set(CMAKE_DEPENDS_IN_PROJECT_ONLY OFF) + +# The set of languages for which implicit dependencies are needed: +set(CMAKE_DEPENDS_LANGUAGES + ) + +# The set of dependency files which are needed: +set(CMAKE_DEPENDS_DEPENDENCY_FILES + "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/src/zipmerge.c" "src/CMakeFiles/zipmerge.dir/zipmerge.c.o" "gcc" "src/CMakeFiles/zipmerge.dir/zipmerge.c.o.d" + ) + +# Targets to which this target links which contain Fortran sources. +set(CMAKE_Fortran_TARGET_LINKED_INFO_FILES + ) + +# Targets to which this target links which contain Fortran sources. +set(CMAKE_Fortran_TARGET_FORWARD_LINKED_INFO_FILES + ) + +# Fortran module output directory. +set(CMAKE_Fortran_TARGET_MODULE_DIR "") diff --git a/thirdparty/libzip-1.11.3/build-emcmake/src/CMakeFiles/zipmerge.dir/build.make b/thirdparty/libzip-1.11.3/build-emcmake/src/CMakeFiles/zipmerge.dir/build.make new file mode 100644 index 0000000..009b918 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/src/CMakeFiles/zipmerge.dir/build.make @@ -0,0 +1,115 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.28 + +# Delete rule output on recipe failure. +.DELETE_ON_ERROR: + +#============================================================================= +# Special targets provided by cmake. + +# Disable implicit rules so canonical targets will work. +.SUFFIXES: + +# Disable VCS-based implicit rules. +% : %,v + +# Disable VCS-based implicit rules. +% : RCS/% + +# Disable VCS-based implicit rules. +% : RCS/%,v + +# Disable VCS-based implicit rules. +% : SCCS/s.% + +# Disable VCS-based implicit rules. +% : s.% + +.SUFFIXES: .hpux_make_needs_suffix_list + +# Command-line flag to silence nested $(MAKE). +$(VERBOSE)MAKESILENT = -s + +#Suppress display of executed commands. +$(VERBOSE).SILENT: + +# A target that is always out of date. +cmake_force: +.PHONY : cmake_force + +#============================================================================= +# Set environment variables for the build. + +# The shell in which to execute make rules. +SHELL = /bin/sh + +# The CMake executable. +CMAKE_COMMAND = /usr/bin/cmake + +# The command to remove a file. +RM = /usr/bin/cmake -E rm -f + +# Escaping for special characters. +EQUALS = = + +# The top-level source directory on which CMake was run. +CMAKE_SOURCE_DIR = "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3" + +# The top-level build directory on which CMake was run. +CMAKE_BINARY_DIR = "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" + +# Include any dependencies generated for this target. +include src/CMakeFiles/zipmerge.dir/depend.make +# Include any dependencies generated by the compiler for this target. +include src/CMakeFiles/zipmerge.dir/compiler_depend.make + +# Include the progress variables for this target. +include src/CMakeFiles/zipmerge.dir/progress.make + +# Include the compile flags for this target's objects. +include src/CMakeFiles/zipmerge.dir/flags.make + +src/CMakeFiles/zipmerge.dir/zipmerge.c.o: src/CMakeFiles/zipmerge.dir/flags.make +src/CMakeFiles/zipmerge.dir/zipmerge.c.o: src/CMakeFiles/zipmerge.dir/includes_C.rsp +src/CMakeFiles/zipmerge.dir/zipmerge.c.o: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/libzip-1.11.3/src/zipmerge.c +src/CMakeFiles/zipmerge.dir/zipmerge.c.o: src/CMakeFiles/zipmerge.dir/compiler_depend.ts + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_1) "Building C object src/CMakeFiles/zipmerge.dir/zipmerge.c.o" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/src" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -MD -MT src/CMakeFiles/zipmerge.dir/zipmerge.c.o -MF CMakeFiles/zipmerge.dir/zipmerge.c.o.d -o CMakeFiles/zipmerge.dir/zipmerge.c.o -c "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/src/zipmerge.c" + +src/CMakeFiles/zipmerge.dir/zipmerge.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Preprocessing C source to CMakeFiles/zipmerge.dir/zipmerge.c.i" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/src" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/src/zipmerge.c" > CMakeFiles/zipmerge.dir/zipmerge.c.i + +src/CMakeFiles/zipmerge.dir/zipmerge.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Compiling C source to assembly CMakeFiles/zipmerge.dir/zipmerge.c.s" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/src" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/src/zipmerge.c" -o CMakeFiles/zipmerge.dir/zipmerge.c.s + +# Object files for target zipmerge +zipmerge_OBJECTS = \ +"CMakeFiles/zipmerge.dir/zipmerge.c.o" + +# External object files for target zipmerge +zipmerge_EXTERNAL_OBJECTS = + +src/zipmerge.js: src/CMakeFiles/zipmerge.dir/zipmerge.c.o +src/zipmerge.js: src/CMakeFiles/zipmerge.dir/build.make +src/zipmerge.js: lib/libzip.a +src/zipmerge.js: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/zlib-1.3.1/install/lib/libz.a +src/zipmerge.js: src/CMakeFiles/zipmerge.dir/linkLibs.rsp +src/zipmerge.js: src/CMakeFiles/zipmerge.dir/objects1.rsp +src/zipmerge.js: src/CMakeFiles/zipmerge.dir/link.txt + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_2) "Linking C executable zipmerge.js" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/src" && $(CMAKE_COMMAND) -E cmake_link_script CMakeFiles/zipmerge.dir/link.txt --verbose=$(VERBOSE) + +# Rule to build all files generated by this target. +src/CMakeFiles/zipmerge.dir/build: src/zipmerge.js +.PHONY : src/CMakeFiles/zipmerge.dir/build + +src/CMakeFiles/zipmerge.dir/clean: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/src" && $(CMAKE_COMMAND) -P CMakeFiles/zipmerge.dir/cmake_clean.cmake +.PHONY : src/CMakeFiles/zipmerge.dir/clean + +src/CMakeFiles/zipmerge.dir/depend: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(CMAKE_COMMAND) -E cmake_depends "Unix Makefiles" "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3" "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/src" "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/src" "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/src/CMakeFiles/zipmerge.dir/DependInfo.cmake" "--color=$(COLOR)" +.PHONY : src/CMakeFiles/zipmerge.dir/depend + diff --git a/thirdparty/libzip-1.11.3/build-emcmake/src/CMakeFiles/zipmerge.dir/cmake_clean.cmake b/thirdparty/libzip-1.11.3/build-emcmake/src/CMakeFiles/zipmerge.dir/cmake_clean.cmake new file mode 100644 index 0000000..c560769 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/src/CMakeFiles/zipmerge.dir/cmake_clean.cmake @@ -0,0 +1,11 @@ +file(REMOVE_RECURSE + "CMakeFiles/zipmerge.dir/zipmerge.c.o" + "CMakeFiles/zipmerge.dir/zipmerge.c.o.d" + "zipmerge.js" + "zipmerge.pdb" +) + +# Per-language clean rules from dependency scanning. +foreach(lang C) + include(CMakeFiles/zipmerge.dir/cmake_clean_${lang}.cmake OPTIONAL) +endforeach() diff --git a/thirdparty/libzip-1.11.3/build-emcmake/src/CMakeFiles/zipmerge.dir/compiler_depend.make b/thirdparty/libzip-1.11.3/build-emcmake/src/CMakeFiles/zipmerge.dir/compiler_depend.make new file mode 100644 index 0000000..3fe5a4c --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/src/CMakeFiles/zipmerge.dir/compiler_depend.make @@ -0,0 +1,2 @@ +# Empty compiler generated dependencies file for zipmerge. +# This may be replaced when dependencies are built. diff --git a/thirdparty/libzip-1.11.3/build-emcmake/src/CMakeFiles/zipmerge.dir/compiler_depend.ts b/thirdparty/libzip-1.11.3/build-emcmake/src/CMakeFiles/zipmerge.dir/compiler_depend.ts new file mode 100644 index 0000000..dd6e577 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/src/CMakeFiles/zipmerge.dir/compiler_depend.ts @@ -0,0 +1,2 @@ +# CMAKE generated file: DO NOT EDIT! +# Timestamp file for compiler generated dependencies management for zipmerge. diff --git a/thirdparty/libzip-1.11.3/build-emcmake/src/CMakeFiles/zipmerge.dir/depend.make b/thirdparty/libzip-1.11.3/build-emcmake/src/CMakeFiles/zipmerge.dir/depend.make new file mode 100644 index 0000000..aeeb8a4 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/src/CMakeFiles/zipmerge.dir/depend.make @@ -0,0 +1,2 @@ +# Empty dependencies file for zipmerge. +# This may be replaced when dependencies are built. diff --git a/thirdparty/libzip-1.11.3/build-emcmake/src/CMakeFiles/zipmerge.dir/flags.make b/thirdparty/libzip-1.11.3/build-emcmake/src/CMakeFiles/zipmerge.dir/flags.make new file mode 100644 index 0000000..e256d41 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/src/CMakeFiles/zipmerge.dir/flags.make @@ -0,0 +1,10 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.28 + +# compile C with /home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc +C_DEFINES = + +C_INCLUDES = @CMakeFiles/zipmerge.dir/includes_C.rsp + +C_FLAGS = + diff --git a/thirdparty/libzip-1.11.3/build-emcmake/src/CMakeFiles/zipmerge.dir/link.txt b/thirdparty/libzip-1.11.3/build-emcmake/src/CMakeFiles/zipmerge.dir/link.txt new file mode 100644 index 0000000..5cd89dc --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/src/CMakeFiles/zipmerge.dir/link.txt @@ -0,0 +1 @@ +"/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" @CMakeFiles/zipmerge.dir/objects1.rsp -o zipmerge.js @CMakeFiles/zipmerge.dir/linkLibs.rsp diff --git a/thirdparty/libzip-1.11.3/build-emcmake/src/CMakeFiles/zipmerge.dir/progress.make b/thirdparty/libzip-1.11.3/build-emcmake/src/CMakeFiles/zipmerge.dir/progress.make new file mode 100644 index 0000000..6c287f1 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/src/CMakeFiles/zipmerge.dir/progress.make @@ -0,0 +1,3 @@ +CMAKE_PROGRESS_1 = +CMAKE_PROGRESS_2 = + diff --git a/thirdparty/libzip-1.11.3/build-emcmake/src/CMakeFiles/zipmerge.dir/zipmerge.c.o b/thirdparty/libzip-1.11.3/build-emcmake/src/CMakeFiles/zipmerge.dir/zipmerge.c.o new file mode 100644 index 0000000000000000000000000000000000000000..8d3765fc5c21b7189e05e2dc3b99fb2cd09a3d97 GIT binary patch literal 10717 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

    X-}VxAar*#?@%)T1<}TN6Q<~aTTdI9 zmkmq0VRWo3niyxzx~zYfiTHbPYA8pr78--WE%sn4lcUa|-Yn%(v^19NNiBEgswtJ} zUDm{N@roI`TmJ1-QfpIdYt#Jt;L6nCzD%sQFGqDN>uFv~%Yw#vE%WC8-_z`<;ZWF! z0}P|cime+rT(E8Rh8=YNM!GPvWlQAzZ9C?&Ww}0l#n_wUc^b4c1F>8VF+wsWqIr)weFzzcsu4 zQp!bWl5R zskSCt%Nm&VJ#Pq)nl+iq5hsfMcbSj)Ld~Zz!y-4QS-tzcose{=X*lT{Gln&|pSCp% z=kKmljQNc(w2bBJpC=@dOZqnfi;;@<-a)Jo1UX~phB8S^Q@2e$nbZL8l0C7^0M*rW z*Rw+p_(SRx8#*7{9c6@Yv$>y-~+?n|Wzhd#@cO1MljKDu1 zz~f@!nTnqr3`Aqe4kSbuUv?XokeG3d& z6jz)01%UJvyM>N_mBB`fyQL!z(y;3Q(ObpRoMG3XGHI2Stsr z3WPDOK-X;ksf4hC!U~P^EC`8OVHJ)O78Z(TVHF9hSQyhw+#rnon8KifE>s8o>xl6& z;UZBp{?t}1mW@9xDiKOpCF6v4OVmoEARmU7QgN=ZENOZ5%n7ShSY^U0KZT{WOiUM6 zg|H?FYof3w32U-2RH-)Plpk4Sg*8Q3mBOkLR<-w6_^>R>OPac)xoFeaEO4c`%GfDH# zB+WmQwBStA!ZS(XGf8b{k`|pwY8SHfZ%u9aUudvjT*V74n6dHepQe=?SFQG(kp6)5 zPm|_FhA{h0fp09rJR-4Z9+o~Ko|1m^RRg4d;md#VHoczEW|}Uu@pvFB9f#e)PTVN8bm2 z^c@P6iaP?u=A!}hy~LM4^W_T#WkUR{pxnGQ2=)hqV1F`LA;gb^rQ+RSvG`A;QL#8#TqzzZDHd;)RGG&tu%58M`hr#M z`K>h-%1cYdvC?93ds&rup{&?HS}y%}luPk?`2=xq#YFSb3JiIs0z-aTG0F3v6_9>t zLaDfa!W8ksglXo1iRiv{BDx=$SnYXf;&dV2nOG{GpG4;SlRQHFWs(waPo5!8PMK-` zehPU1a|(EmS5|vYR?dQZm8Ign$|`ZVs>(c3h3==S;O6U9HA4KMs#J_tSBdAUXPSSk zM%RI<82QlDYR_v^XAAMCsioqYX;uCYrb++t>C*qibZP!!IwtNuGKKgv)tdJ!40>E) z&<|C$=kSa=A?}({D&Cw?YaW`3u46ON_4LeY&xbS7b$C{(`5&_|{zMIG^wHXScvM?x zK3y9S;@R3c<~y|wLi}6pT=TvHNdJ5I z8*Px{jfPh7PjlyqqmA>$cN-Uo>zd|^7n>G}zcej0uW9xQ@%83f@kmS9|9Xq`{}F%J zv`X=v);96@{6*r01?~R7ERf?>0ao?pa)a5$&A9Iy>TCjDYEC3}JC{Zbjbopt1#N8$?QnN{OMCl*a9ejz`~2{H zyEQt$t9xPl!j`VC`Q7t+y6u*Q_2MXgcOyz1c+=5iN3pxx*+4_6b12c@=pdSgl2aZU zv4u2D1kOw}VkgnKxsd^8B9-iI2o4M-a CMakeFiles/ziptool.dir/ziptool.c.i + +src/CMakeFiles/ziptool.dir/ziptool.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Compiling C source to assembly CMakeFiles/ziptool.dir/ziptool.c.s" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/src" && "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/src/ziptool.c" -o CMakeFiles/ziptool.dir/ziptool.c.s + +# Object files for target ziptool +ziptool_OBJECTS = \ +"CMakeFiles/ziptool.dir/ziptool.c.o" + +# External object files for target ziptool +ziptool_EXTERNAL_OBJECTS = + +src/ziptool.js: src/CMakeFiles/ziptool.dir/ziptool.c.o +src/ziptool.js: src/CMakeFiles/ziptool.dir/build.make +src/ziptool.js: lib/libzip.a +src/ziptool.js: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/zlib-1.3.1/install/lib/libz.a +src/ziptool.js: src/CMakeFiles/ziptool.dir/linkLibs.rsp +src/ziptool.js: src/CMakeFiles/ziptool.dir/objects1.rsp +src/ziptool.js: src/CMakeFiles/ziptool.dir/link.txt + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_2) "Linking C executable ziptool.js" + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/src" && $(CMAKE_COMMAND) -E cmake_link_script CMakeFiles/ziptool.dir/link.txt --verbose=$(VERBOSE) + +# Rule to build all files generated by this target. +src/CMakeFiles/ziptool.dir/build: src/ziptool.js +.PHONY : src/CMakeFiles/ziptool.dir/build + +src/CMakeFiles/ziptool.dir/clean: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/src" && $(CMAKE_COMMAND) -P CMakeFiles/ziptool.dir/cmake_clean.cmake +.PHONY : src/CMakeFiles/ziptool.dir/clean + +src/CMakeFiles/ziptool.dir/depend: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" && $(CMAKE_COMMAND) -E cmake_depends "Unix Makefiles" "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3" "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/src" "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake" "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/src" "/home/romazan/Рабочий Ñтол/cproject/thirdparty/libzip-1.11.3/build-emcmake/src/CMakeFiles/ziptool.dir/DependInfo.cmake" "--color=$(COLOR)" +.PHONY : src/CMakeFiles/ziptool.dir/depend + diff --git a/thirdparty/libzip-1.11.3/build-emcmake/src/CMakeFiles/ziptool.dir/cmake_clean.cmake b/thirdparty/libzip-1.11.3/build-emcmake/src/CMakeFiles/ziptool.dir/cmake_clean.cmake new file mode 100644 index 0000000..f8f6934 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/src/CMakeFiles/ziptool.dir/cmake_clean.cmake @@ -0,0 +1,11 @@ +file(REMOVE_RECURSE + "CMakeFiles/ziptool.dir/ziptool.c.o" + "CMakeFiles/ziptool.dir/ziptool.c.o.d" + "ziptool.js" + "ziptool.pdb" +) + +# Per-language clean rules from dependency scanning. +foreach(lang C) + include(CMakeFiles/ziptool.dir/cmake_clean_${lang}.cmake OPTIONAL) +endforeach() diff --git a/thirdparty/libzip-1.11.3/build-emcmake/src/CMakeFiles/ziptool.dir/compiler_depend.make b/thirdparty/libzip-1.11.3/build-emcmake/src/CMakeFiles/ziptool.dir/compiler_depend.make new file mode 100644 index 0000000..133bbf5 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/src/CMakeFiles/ziptool.dir/compiler_depend.make @@ -0,0 +1,2 @@ +# Empty compiler generated dependencies file for ziptool. +# This may be replaced when dependencies are built. diff --git a/thirdparty/libzip-1.11.3/build-emcmake/src/CMakeFiles/ziptool.dir/compiler_depend.ts b/thirdparty/libzip-1.11.3/build-emcmake/src/CMakeFiles/ziptool.dir/compiler_depend.ts new file mode 100644 index 0000000..191b4da --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/src/CMakeFiles/ziptool.dir/compiler_depend.ts @@ -0,0 +1,2 @@ +# CMAKE generated file: DO NOT EDIT! +# Timestamp file for compiler generated dependencies management for ziptool. diff --git a/thirdparty/libzip-1.11.3/build-emcmake/src/CMakeFiles/ziptool.dir/depend.make b/thirdparty/libzip-1.11.3/build-emcmake/src/CMakeFiles/ziptool.dir/depend.make new file mode 100644 index 0000000..349b5f5 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/src/CMakeFiles/ziptool.dir/depend.make @@ -0,0 +1,2 @@ +# Empty dependencies file for ziptool. +# This may be replaced when dependencies are built. diff --git a/thirdparty/libzip-1.11.3/build-emcmake/src/CMakeFiles/ziptool.dir/flags.make b/thirdparty/libzip-1.11.3/build-emcmake/src/CMakeFiles/ziptool.dir/flags.make new file mode 100644 index 0000000..5775f14 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/src/CMakeFiles/ziptool.dir/flags.make @@ -0,0 +1,10 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.28 + +# compile C with /home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc +C_DEFINES = + +C_INCLUDES = @CMakeFiles/ziptool.dir/includes_C.rsp + +C_FLAGS = + diff --git a/thirdparty/libzip-1.11.3/build-emcmake/src/CMakeFiles/ziptool.dir/link.txt b/thirdparty/libzip-1.11.3/build-emcmake/src/CMakeFiles/ziptool.dir/link.txt new file mode 100644 index 0000000..b8aa3bf --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/src/CMakeFiles/ziptool.dir/link.txt @@ -0,0 +1 @@ +"/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" @CMakeFiles/ziptool.dir/objects1.rsp -o ziptool.js @CMakeFiles/ziptool.dir/linkLibs.rsp diff --git a/thirdparty/libzip-1.11.3/build-emcmake/src/CMakeFiles/ziptool.dir/progress.make b/thirdparty/libzip-1.11.3/build-emcmake/src/CMakeFiles/ziptool.dir/progress.make new file mode 100644 index 0000000..1f1e9c2 --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/src/CMakeFiles/ziptool.dir/progress.make @@ -0,0 +1,3 @@ +CMAKE_PROGRESS_1 = +CMAKE_PROGRESS_2 = 100 + diff --git a/thirdparty/libzip-1.11.3/build-emcmake/src/CMakeFiles/ziptool.dir/ziptool.c.o b/thirdparty/libzip-1.11.3/build-emcmake/src/CMakeFiles/ziptool.dir/ziptool.c.o new file mode 100644 index 0000000000000000000000000000000000000000..9008f81e00d460f61164ef8d5a99cec1834f730c GIT binary patch literal 181061 zcmeFad3;<)l{Q?}x20~WC97r2`&QSsY{|B4?ThU=zFy@eUgIpzBFj?CR!f%Dt(LbW zwi9Oql8}&nU&%reVnPC0iP-{#kby8^7zjg#u)PqLFu<@4e9t*`Z}*kD9m2f)zVG{^ zoV2=c-KtY{o;r2TsZ(|9iuS?1QV1bmzxe1;F=eMbB9H709yxNDzO5ri+)I2P#yz2v z4(|+jHx3_0K3s{NAu4oOmpjbKmZlQK7m*1Zp}cu?MVI;fL*F3k){zTAB@ci3c1YjW z^=q054?u)f2+xEux z_9qVpgykj=rrJAt+6MZ&`%-r4Ea=cCn?jKxHdGDax1vpdQ8@+c*Y z2Bi9jdV2+5hWOIEqSkfn9T54HGwP>^x&}mul1oM;>(nr%_78wFZr}vE}|Uawsm)kA}Ul!`8s30u~bYHQ$o&qyc}F4 zCuui_OL`Ph8c(Em$5L(W$&NkU`(kM8-n}ujmSHR#dAF;#eYX!`76BitL`jqo-D$a4 zOgOMM@)AK z<2HCQ+zLsK+XrK5S!PcC+5aAp$ScNBt1=i-aStQzI~Hukm05RCz-=~{6ykuwp zV5%EXW_q1VQSn$`NAlo6DqWCANBZtwE>=cuNmtkz>uMkBO|=cQ4-W3{Pj>17%Y%mi z#hB}i9nh_aP?z))jkcuDMjD`tiH;?r`RLOA0axI{gMID*;d{Q}NW)kU$6)M$_ft_9 z`xu7`Ozr9KY#SUJ80b%?Vs68xQ??A3C&|U5tgADlM51k^Li+l(R1rMmslmlejZ|YB z_0j}N8%JrbiqO50jFDh5Y}^qp(9K^>t7uw58g2^~U6Y zu!-^{A7%RKr#^`?`1K*TomIPEdHVF5KQmg`DJBz%{I31UZnTy$r|$8U@DuWBI@Z*C zs7H?OhY^V@c|@9Kzk?dgv96kS4@Uy+4Z{_Dl4>f&Ht1eUezNZ|08BQtU9sIa9| zZ3mQ8fgamZ)+|m`mJ*GD3P;#M6|4xnb3J9uQ&vTw!p>Lu6@j1~(pO;>rmF%~5Y^-g zRiPbGk;m;KlrC0zDx`{3aTLA;NQ?sEQH_CFxK*M?sgl)p)RA_nimK9tJvy)~uuP3! zRV;9Oj2crB&=kvXIaZDJnlVm|i!xXCcu*VP7!c02Hxls)s!UB#R`eKEHOV<*PsII+ zje+?^G6E8l)Fh9@WZm{DYDz^w*i+Ti=oh$o(*yU(&IU20X%~rFcmr-t%pQGk@?XS?aRjNv=Z7y!kQ}ev0%vbYW zZmQ7Qs>VPWzUDRtqRz9-)B-1JFGSM9xLvI()B;tV;jaeiHEI58aaD_}2vs-Vu0yxh zBdI=aH>d`;TkA?9Cko{wGSm0blk|NU&E&oZKh*c!H+h=VFl4||`Hg`hAWOA{Aq^q7 z|HIDFqfy91SQV_d3jtL`6{<+WE&^0Vx^IhBv4_nl=XGYY1l2`JB2?7lkL02>`bnx@ zM4W4HqGpUny`vigL0#z>T#Z5h2bNjOC`H(1s;o*tTAT^?I5k#{OF>4)t8qh+jR~uY zrOq@_O{7edkZH1-q$a0q2!fhCWKRWT)6`ToZ6icLLIlwL3EO7YZMT;Nq+kXWpNZlu z1u45+m8)4p_H3sG-9B5**FALjI%apUhUXJoB)N-{VVXssx(`8qw zRaAC0%C1qX)tZ#us#?{WA$u*=y-uxF>w4_qT^mug_SsI* z-l5J`J5u&Jy64VS=T-@6p9h-ftMk?OkA|L+w%>3A>ZQ z=u9&dQ!y&uh2pzam)f1O_ozK;_mJIYzF>WFI2*E>MTm z1sm-PQQJl8LUmEXKFp0hoUZYRIzr`-N)WhMs-sd}EK~L+QsMuL<&b?$QV(7#)iJ3q zl^g8KBxqeO)n!s$E)(_@Qe7d_#IBU;N=f8CK;%9s)d!^dAjo}4D*XRJkh@A!v#yrv zDygoPJ@z#cUGrh7u951)GHzch)wR;TPNv!Wh*Te8iq{jx8>G5ksvAJ@Myc@s4WM|F zq>jE>s+**`85D0JinmI2i&VFQ;%!phMie9JI%(f7)$P(Ail`y`4yn#jcgUoDClA-4 zeHSryw^VmYbvMf0gJgA&Bqe~9JLMw5+E>{3N+)37C)K@D-G_YlQ@;C=PZWs=YpJ09 zfOLfYQK=q~>Z4T9)hZ8C)(4Tbi1QWM4@qdmtA!h|O5Q7j^((5om=qDnj^ z8rA9$>XPV=#!a@Kx>Be_*T9SgKVw;Wk`5KlbvIpkR6tKg)i}S^bge4sc2I&rRTDDE zOaw5KkTfX{-8tC>WnxL>+5AWdjztikFk=%qJa)K~@pW+$OVdiNZ`H;oZ0DiQdJ)qo?a$a~x=lUv95;3b9FQ6Qo|%dJGaCaN zimZt4oLOp?N2Ofz3m1g=ouk_f&x6`r3HvmMtWoqs+~&EU0~dqZJWtJ4^H#$mNo|o5 z_5!qdfo}6cwa{yGHS)qTd9~H5TDQ%0pjFoxP|gpy&Gn9gp|Vs%9EPeI7OT-S=SS=& zq&HFX0}+y}X4UMGYtfBgq!y6?FIJ0Pe{2b*uY~myuwE@{30W}LA3GKP*fN;1Wm{|q zjbE-DwLD?3K;u`qT5ly8v$Q`3W9IR)TGzHlt)bdlL42)R>osMaTIX`M9?e~^{jt`J zKehn_;56JhEpBgwQQV+5W*FRr^i9MdkDSf8+KemKDI4r94o1LMq-~Ac+tfC9=xiy8 ze4=nn*d01Fd}d(SSojp%3$>z*ilcVU+z>uB=d z)o6DBvRBq*fqiNK52PSGvYOJU4RRny}(#*3OnqeR#?+&6o*Jp%$T6GLTY!k)!LdX_5!8|-qY*`5tH zXUEASw<|CT%A<(?v5(FkIew!$3<+v2JLW+Qhh_{1xZ`nh(BOYBj9$appjA}0R-yB$ z3BTrvQ4IzWd~r_@nr(K);&Gupl`VzHRE!l!`Ahj2lATN%_Xb@w-Qp?cY)NPJ(JTYF5%N1&c zhvrHb%~e2iwOXlGr{L19QfuPm($OebOPXRQoI1d;(uU|$^ES}eX8SbI+6ea${vJ7c z>NLpwwG4+V@HB)rt4(V2YDl?+kZ)026ZST+v5gu@-rnin;M=Z&K0}>Bdg@GF?ODik zwmREu{0_Cl9fRjM%03qyo*TE%gTr?YFvrzdO%|!$Gig+Q;AS#n=VMg1A*n5H?}R&f zzS`+^hOpaJy9dKA7lsbN&{h#@*AZ(pecS_rdvtf9ech_t zYhPUR(4%^&Ot0#7)zw}~Z?*f7yI;lCUe%}iU3E2pUWC7>5?kOgO6@Tw>=YnMX^4i@ zkO$E|O@6=HPvj4P8azj@?nCO3i_HaS-UW>Tn&Ta43{<=G#S7t&UWBBJ;`U*+53c25 z7YW@qc$I0DcvQlx^q{#|y4YMoZWMe<_?*Y!&t1w6=cRCi;88c$yY` z%`{N#YkFkiZ_2d48Hc|KZs1|!{|})A4|Sx#?X=)^f&?qeUh+Pn1X(U8J20%wkd3Nu3KwR;2|;Y`L%tRRMg8!su66$|Ddi&{0Kk zD8*v88Ih96CDO9ciaf6s7KD|xZx5+mH(#C-B&~T$Hd#@81)8j|%B!>{zzxJ#lpLK( zD{N~Y5Pl7+gg_T+MU6JR>$X9m4S88@ct?gjzbkko=to4I#NC=gh)j83h(vW(cDI6A z?v^$TuDcc1S=rqR!`;Gc9)_Wm+$~Jvbyl9dH(88x6fP>@4#Pe$>SN(nm8r2V;^TlM zyP<3-TqMWAR9Yc2m3jD37|Z8@zjp|WEh1{7@D*D`5`*`!h|n&Sl`Ucrj(8;cD)$0Q z0bBx<q!p*bJWkKp zr6ab&eWe3N%33IA+cw%YLm{e_vS%WqHDd@N4NJ`;#rhK_QH~60`w1^H3WG=5QNWa1 zsv;9^s)XKQzcNln)a|m$lE|(3vfUdXG^@%TX{1=8>$tEa6=A4;9-Rb<&yRkNkqjYA zn4Fh2b^!q6A)2rw(4Y~(Mc9WkbETvgX$-SMDS|}4O#vnfFKKe6Ajdtj#vTK5Wh8$I zdo0L}O_Lkv91ZH8NqX}jkKRP*hZIqqs3y7ebk|H)Q`R7iBy|`mVNVCW>1lcjniYMZ z>?A<9)C_c(+q{|1J3>d3Tyo`T-fXz-v)9;jK(2!P_k>*ua+PUvbDg6B?Z7AP`Je}n z#G_Z`{7%4isZtAEdJ931159h|8qlkSzfzm9>p-tAO|RYw!$m=mDGA@*QjHmMP4I^} z*5p!a0W}Udt+5w_8oMV6`xH<+B~5Lqb2JJ!WvMzf={YH0>l~+EJM1pG6(F}#txzl1 z*sDNpH9V8m340C5tx1z>b&e`{DXnU4lDrhPF4Ma8&ToW{LAms_!vZ&DjlBu<*fmMm zTR?A1n%-9Dgn%EuRc%YcJ+aj38G75D{}MVX<x1=!NYzi2Y6^?TnKz;tq|rlE_WL0?+Z!hc+99&-)I_vqr;k z{$FY|FqF&3AN3GvF;%iyLJbh0v541QY0Zp!4G?YXh3b0KNKpx1p z7i84u$!t2?s|oMVrUMo>=-Px75`a-1Yl^;?oQ8P}!Tjah$TE#rqY;-+&zO#Q>UD~qI=c%uQ&>Ar zK}1DiY6#O7C+p_|HK`=>lvUt4KQw^IB`C^(byAl=i#9KA{2iCj^#lHn162Hwwl<3; zv^tF%o*sv3@VKLfy#T%J<&QII;e}taP|m;#7s_JrundpKU?F#ay&?>uC{{lJ+eBc` zMyD07fCLz@Hwk+xcg@`zQBg|U!m|GB7aqtEtan8ktXuNT5PqWvmdm14QPx(NesVAWHs3#!G z3#CHuafeUkewl`@oCbe^FBIY(wD3gk1t7QK=H1NwKLhRJKu4=R3;mB(Csm%XXLJA0 z*8M+x-H~cVw@|HfnKZ}y667vW6RJ3kwOImdP~;+1du>Lv&y|TMH6x(3g|6UHbY7f{!=Y+cod6VDQPZ= z{I`@7G7@nz#Ww{6{VUW?8GJ@8O~x^;3b}JC9aq1F0ff3!g^hs;D8|c@t1~X68(xP| zAEn*NG8)IlX!ApN5L+DV;@OOLf!QFC!w(Hu5tu;cF#0-I!Xn~}vp>(}Au0exmn9rd zHpjW5KwkYm)@O^{wF}Q{21TCPpap1bK8r-YW~2yUSSrLVqRB9p?A^860<6`BwJW{e zjzFS{6oP&UyBH`GYkA@sohDl1uGMNJ^vup(YnMP_w6|6pSY|CFOoD_-l|V4vnE>?$ z2OvcwMU5ST{vW@p7_)oIgmFTdCL$B-wiJZ{)ubVW0E@9UKSfPlZBIknrXw6aJz*=f zO`&bNuni%`vepa~=7EtSwWekc!51jh4)p3_4s_am4q`w^?LCuzV(&TV_Gu6ULuw-* zhmmJl52`9^C2T!8L}?$If_xkR55uFb#*z{(Ho0VqFkIN+b6blrFdAIk8-aUJNB-95 ziu|E75d`=2_!1X)9R}Ay@HFlS1dhaAz~5d*jdh&AWg_Dg7iYxD*Ir4tSJ7?H*+wW4 zYrCqIR(A{a;_gO!Jz(I)-GqG_OVnvD@Dvc-NHjJP4bQ;_4UYZ!*LdTZHQpXx<2}no zha-MOVh52pN9|DOBCxX7Lhl98o+=b&?9& zrP_f$-4}@IVVzfCofm|8p*LagaY_)u+oQS@b{zcmAUxNz(e4GIy{cF3P1t?RUtgNP ze$`Jj28ad+?h**xm81iAw6r;-Qfeq}?*qO42(|6+!9wo=`(TMPPwIFxjC2cmINipE)p$HgfKceQjC@P`m& zdpIDc{(TKR!u3>n(SOw%2vo5{1iFxPWP0-6Y7d{hV=&Y79nC9JMV`PTrbHT*RSzw6 zVn#y2_Sdx@R>jc5KJ(%_SFYvmhs{?X;2C0+9I5@Bowu8>QTx*^R0;~syt7`-Z zTwPt{iV;Ny|G))!OO0Eg5V#crHVRHzDgslS&R*nPeka*0UNd&HW8s*r8s_&dn3?QR z=O)h1d$8Q>*odV@BRdD_Xon4DM?l;)Y~CvQSY%)*?sP&|NIW2?^mm69&1-A?3GVPbIgt`74 zO4mg-3?FNDKZ(PVcjZ2Z&&=C34e)8M{Mfn#_ZcQKrCHN7#=jH-BF(P}v4 zuv-*+gFDX3XQmzq?3beq`Vfn{)Dk%5)RH+|hZhPWv{t^yZZdSv0@S&HEZ9QYSO(=t ztG+bvg_llF+iY^$Uf}MpMyv^_W}LPf+{fOs4J=m+<#M~0Yp+wasxCo>ZJ}IhH*gyE zBdNxO=h$H`PLo{aTzwabVKc@|+P`a7i`>Db%P;2gUib*m@E)ag_Njn|7k3l316gzk zn1`9%a%AGIN@+S3fo2#qZVn6@I>EDOSms(2{TAUEagK9gz0`{kQf7p^p(JmSc0Dc9 zZU6^*JCiHZ>q{ap2jnbIh68}sQUPW4knic{3DSniB8+LdSQe__LRp9qCN+m+n2C%A z+>l!X(g=H!TbZ7JXIeQ5bVn_gVfa;`O!0N1%;C%gCgWV&Xih_HS&d0Rc1u-RD^^`4 zMkrQU6Q0L~&74J0c1&d=mtdbO0iSDvJHIBIg-J;!hKb4{xx#sxo2T$E=%LSa(t;ef zXCm)RG?Z))P@09yS#gMQxkjlZay+w7B+s4vk$#x(VJoQv{$JM*%eCt9=IxNN_n!T^ z`s8G@Khh^7XMfdt_P1Qm{+8+4-%0?z6zT%O`#AjD>9*o7vEl#P2{^UX%QK-wXknWt zgEQdVDoh7&_tb+b*E)rRUc+5o)+rP%Mr*JM(KD`?l9Nv18Q}5}GeE6ps<~dcv#KUR zku1_Pbs&PtpEo%qS5~h)G-ArdQ@S{9=%Ao6*^TswUqqWjNb_LUNSX(;M$$aC>njL zmgbn5I5Nc!V1CKQdRD7}WQU_HBO=K^lh~;kgv_MZ$xjv(g*u>3<6ck{o~e%ab2J4W zFe*hv#p^E&VOm4h9_d}&Qyf`ovJ~~CBCnLbik7>37q>ukF1v@isKmK~zxBTVQM~V8 zQ7mEfWC#uK=OzUaAqDXZ#sNEspdQjb`B==Ga(SKa2J(uqO^Q}g^8Yb@gA_R#&TmBy ze&_1}LTmGd?uHMrN%7ty6{fgJ^lnDNT@hEy>2Zf*HEJ7pmT63b(bEomgRgv z*g}%WkU$|qFfUl+DmN9nl*R5)^1MoHw&%=!&2N%%DN$-2e)A|hrW&+xRIdqWrCb$ARTw&kKqLvP1w!SY-O`;Pe8Ker>s|mV_+V?okWY-&j zpecwJnG8I5Lj!p{4dg#DoKvBlA%dAXhP!LQow>U+ByX~w3q@2kUdZNfjJ5*aFC*mf)s9058fk2dGvAkjx?Rb z0vd0M)bj1BHo~5_8mu1Xo0C$2w=tg0(n!xSOrB#!Ac`d)+WkRm0$BEm-p8Fe6>0p) z%JAhAp5hvBPodu?7x{RIR2?GAkuNV!MaW|TzC!yo)@sMzDZ%su;lf26X^j4Y& zxYzX3<`n3h$*_}}SKdA!#5%z5IXkZfxbzh|3MPv;0;?JJ_=p;B&qQx~kLUq;Op+)U zZ;sd92_Ywp7)iyx9Bq&PDA%u_(8Ip?*7vb5UN?`o#tS`JQtvTYLR&CHA_>B@2yP8c zi=xh-n5QPlL^G0_l`3#}(kHrGZwXm;aC80tK!L4wCeS>Jaojwh7O=~x^{zxQ05V|~qV ziSPhuj+Iup!c;vg%_zJd{lq7z4u9N}+#eXHg|e2$-9kwZ`k~-_a(U`M?9#9TWgWGq9CfhAhVmLm63T(K2df{+}9 zWf{_z#ck{}cctvqlE@!3-cHH?N8S!P%v~+OlRlW3q7T3y`#B68J)bZ-0Uw)YuEkK) zrO}5t%l~2%Cd@Di$OK3e9v%)NfI|itdoHwIK@i974U7xgYf0Eo)!6gS%s(^s{NREg zdv>p3Mm6^CgFc>7o#iMSpB68tq0nF(ykQj$Y@I^%046=?1-)qk9??SxQDPUY*1;p=>=R&bQOPVl z=TR`Zyi$X>`NLe*c(iWmFZ<^i|4Cy*I^j!ZE!OpQUC)QCTp6(BmKDLR%DrfG$#7#u@=Q~CpRszM-q1fF&&cY3eozZ6CQs@8 zT!{XV{J-zGF!|JMsI-V7OhM9!xf5+1#9*RLiX7x(wZtKJJS4~$Qz6*AbcB82uqe|I z0(*o-S|3J$C(&Eq_lnU3y<#-m9=T#f^$*_%ga*S;_p}#`k~=0AqMJB66}RErP;`pM z1UCDSKJzah-NKSki{&F2_RN^5LpGQk*I|K?em@%@pVU)33UQ8@IREqe9=hx&j4uxc z>_pXF?ddW!xH!Ff?VIDlhb>{H6GaY$J7>WL z!F|T=jK9y^Sf|@(?lf>dkK6e;(SV*KMc>CM>5qijv4*1JcgeoRd!Mv|0)}AO0w* zrQCXqLX6O3i{&Vv9=m}H?O$1VqR$>j=sulR#w=kEK%(+ zr|6`Cz)^Z{A04byO$#q%;pXY^_*^`!=ZeX&?fjLz5aVvXJCa_9!2|ia z(grMe@OFp`F-5~ZS75?R;qt1DNj6Ca&+vNO)F3~4Wq4yW=Na&$MO^M%6mTk+q8$g+}*b9 zn*VF1^BDK{90w=9@Z4tjVke6_YMQ&;efsQ}Js&mkfks>H1*i#6#i)e|8|pw+gLh)~ zEeSsoJBpgDqtbbX>DST|Q|u?wzVcc;C-1H}QGU>GSRT}4>6qOF`uzOa))8kNDSgsW zrS(&K3Jv=PnydlmOHBS0dV-jP7;$VGI0f5ehm&8nJd8jF_75DhmxDZSD%xtVMDtf+ z=g_Kzy&BD5?Kc0{63@$9Y7GucaNc0@t<4OeHzGb zRCpY1tDWOpskOEuupd??Ct7wwLNa1;oKvATLSQe{2A)(=*L;!cA&(L#=xtR zMEzClpM`*(i-U8{U5(R`q&^)fVYjg*Z6o>nCAWGfvbC$7s@-iZO2fZ4h=%@d)v0h^l8Qy2pxP%=?jOQoONWlx7l1zRz1@nvw=%u=7F~OUyLO?xG=Ocm>}g#r zu@@Kna1*=-7kg~!srutwB{t($(`H-?M=kMQ++*}G{D^ulm&+m1SGZeok6|k=D*phT zyoBSHwqpM+8t@@HZ3)l5C$R4pjkro5(X>!r9>D%vZpAgU4Hw5QC2aTccZ!?5!mYs2 zR5&pSt+)=YzzIy((jiPET5&yE5lA1%bPNYFp%pjrsZ2Ma6*p5Wa0JuMbP!Vl=P{ub zx9V0vX9nn4CJP5MQCRwIuJm?V*2SSr77k^K)1gea)2T~drS8r;oY5rGXEeF@ka7A_G~0FZ*8UKylwkH{4U2?w780xEGs_%cak2@>@UNUI&t}dL@ycmlOoyXibH& zAY)R6-(8+z2+&ipBe&nT(Tf7%DyR!(sw600Zc-$o|r@sEl4Z3xLZJ`&kbvm zbzuWoglBibAPh!29ufT|u~rnK?6$JKX!ZDIBUqyXX6yz;R3y_N+#`IciMaZ~R zBblNX*kYrZ2zYhZI$@X|Y-LTt^aLq3fx4j!tL+9{^5I2|IAYH|qzHT-6at#IQFgu z>A0dFN=U(G*r&}YoYc2LZHdDkZKWm9ZOE{#G4N}q0bx2Fy5e-$5(x_xq|Iw@0{Y# zzTiF5>v0Lwg}e8nEcY!jj_P2^?vv4XxDEGH)elIVI;b9yt@cN$?GMsXgE(9;fkOq+ z_J_Fbk`5OPs)rdA(s+;1T#()4&qNp^#n+R3_z9kap|7s^9d4!C#5QhpE8Vo!`bv!H8Gg3W^I-Vm2o^u&^o?868X27lV1y z<@gNqM4e8V-jeo9l=>1<{~|f*FVa3C$z*?)ZhRKyJ}1@ZJeS}ET!QZu$Rio!ega23 zt3Zyu_e)S5WSgm;W_{9+!hW*V*asnD$Z>E;!Y*L_P@u(!Pj}J6gO<>GRy7H%JMGgq zig5#R;A(DaH70-{z62ILNKYgw=Uw)YqL3VH!dInnY=am@YmKhV=%%EDTx(#@GyCy@ zC7yv~Jy{JC&8>D#v~a%qFuC26u)z-|B_n~@&gVVsM+K^}cJMEpQ=4l%DygRV>aK>d zzVR`lq`;PqC2FN?j~Xq81?dcudQal&?U~?&!z^oug;^-bg5IGDVX0|#ywW+21JSU^ zjosh#RHd5N%NAPi`XQ-Wpz|$s^Hn1sRuNQ9FZM`O>n*Kyv`_`>OY|Dte0n!|gKFx< ze6LY&g=nF5|3zpkHb4L;GS;M~5wOA5MdofX)HHSfk~sE3RKOsg;sc@HUJBItAd%5+IF1Rn8tD-v_jz!LAAnHxEd3}TR%<+uEKpfISogX47@VnOYbSy#J7X^_B8P`oY%OlKD*=$I=#dr?tBl=UZOCct?Rbz92DlmOt_cN zb-u}k&qKxM)0rmfe6O%>dYkhd&Y+ESo7#yPrQ5QLF`WeQ4xY^LA!`YGAX9ZjpJoiY zP*YdBnY*1!j}v@*P*XQ%n0P|dtI0tGJ`PGfOsN-7Z0a+4RgX)l50vT3)a}84( z0Hp*>HO^W~Q#ux~lb|%nlu|0GQVH1UAvNey+6PMe(rw!B+`^O&fYL#QqkGjskCNv8 zkaHhrxBwY0q=S6bg>D9Y|03s6zJD0^kI>VeICRZLN7%61N2NE4zmQizXFbwq8a@=g zFY|O=9=uV0c&G<+l8`$`3eh~M0@@6!ZWg`*P(%2#C~S$D3!O0*q9A#Axx4tgB`fX+ zUMccN`J#3)^6?J2EyH%mDcYe-`@ONV%RM@kcl1Z~(WzyuN6T~;EZsYY^)v;K8G+>q zm~%`-YbM5_!6spXK@*V4(NA&rPr(h^AqrKi=})DvS=iYXMBFOm9`Fcd1yu%Rbrlzy zfg8|NSVKnMB6}t(VKudSn3@7(6b+_4n2yj_(5{Srnkn$!d`u;v9-ytF&rl+$%m-mC zYR=aus%l88mjBKB=boW-2F^ynYy$eLI$_tKnwoSqwa#c;KO2L|1VUII;RXdOgdnT!d24aul?sS;gYj_7YTl3Z@UIB>CB_|1YX*5@Fz zCDsBv2Awtr$l-nkLeobOn#OSi6q*jw=`?KBWLpfUXr8W~opT&? z;AUTd?0BM6E$oF%;)MXbL{HV%qS4q;7{(Wb8j%t;533r^%dCv*ux3)1aVBW-f^F%1 z%%L@Vf5!;Z<}x&U7H=+FR0=^mD)^7R1n4f&=qmdZx0OrLN{+ksLPnRm+s3Gs%h9_m zm2u2-gK8y79H#L{5O)o#Rdj`55#zHOIr$MSI;J#8vZ>tZ10UF{D_^G@wO*|!#4ycO z8^|-b{1aqWPJ?H#5lI_qw!02C*0ZpvZZpz1vv8xb`8c_>8b&slbv*Cu#Z&X4mg#9l zZ^43o(^0(vEb`Gtg>ih(;-hRvyLqEXOD|RgonL>}mHHm&^n7>dxGRm6ecf2l@xALV=*G=EZ;HMf29{TPP+e!H|Jt358HjEt9XwCuJiRqgnYfB zN-t~7fUci`bN*ZtdBmQH=HT?9cO255AUR;q!dd{Ic5}?04X!zCv~}2979fIic~;0r z_-fIZ@3LG4dI%Tobl%}*lm*UP6fVlw@6?!2Lnu>s4bt)4bGq&;>9D+fRZAU1lLMUT z>rGqhUGfd|{cQ&-9^dE}jvI03wVRioXF$nY?q%ME|qiCInfuH3SRf%GISm) zJ&*KszS@C@%v^@fcN79g`TB^EvvF34cj~W8sU2SFWkd<1eHZfWa`|ARqnq5}9G3_r z<*Uv(d8u~S@}nncy`w{6y(9V=ZpI$m-qU0qcOZG)3Lffq?U&LSA_ueA-JD#IQ8Ii zfw`EXKxt?$k;qJ|9T0k)EKhTF-TGs4`H^%KX$zuAXyN6)H%y?F{Ei98C)PNwL^we= z6agdIR9n-bnAKz*{O>=@k_+{f3GJ0!rZM z7B{+t_|L6rj<71CIYMAbbEJbxT22vE!iord6Lb<{M)?RFH3rVY_wC?lvvUQXEO<9R z+I|n+z6Vi`d+GHTh&3UgG`w%_t;HEnI@#;go z%uYCCBQtSJ(c7~Wy#X%PsW`{bV0RxzN;+S2B#eCY%0d)6AtHH{3qQXoBBO|aepeS> zvxu~Bibw%vCZf1}Q$(gPO@2jJs-NC@sQSCQ@RBgauUvHgAR_gY$gN2AEBBpy^XazQ zbubk}95&USOi`2QRbg&v(0)utin%I!ff!x`hNNd@WCmB~QsLkH;Vu_n>siE&CKtFq=Gr>eF}Sr-B&yc=lNiyIElA;?n5EB zU0+6$zMp3JjbLQl@FpEdx9R7>$QX}8hGp>gSKRQ^Ni%p|Uc??w&1*2d%r8y&$-Ky{ zY{CTXFdk9UxAG!o^t#58ZuB!i72Pv%D^3}b5;H?N=`rs9(e6#8y{B$_6YM(F4Hkr^X1 z=VJWokZwHdfecS~>10o)JyxFx>AE1J>9<-6=cQ02-;=K|h9Wjv=M7>s z`p2P25h(%hC78nbO(+u48p)N^{|QCL;k~AvTB?Q@zdjr(;dd{lUzG`(_k|-fI8k}; z&s3d5coFPw{pLk_^JzsT@_iv33Au00MBq0ZiD<~Fa@_qE^s&C17U#Fak#WfwzfjYA zeI=`E8n%B-m+x#(wIkuug2)6nv)gidcc*gi-cb-Kqt{qw%h~aQNH~N4GdiD#m`~bX zEr1mGD7d2ZJ)N8`;3ogFAW}%VJqi0mL1fM_2?M-(q-R7;?Q8EHA}H=Ij6}&G441bj z3UvcUNX&`C$S6%Y!^LYl>qsg3ej&yZ8s$+)zY0`1zb%YR*HrY|F^O^ScAF<-*GD2# zs9kKDd>NE3gO)!L@wL%=n<#8#Bofus>6M<;C&cF0BaxakxxM|J-Cf-<0(iNl;#}Tqv+ip1#RBHfkDMdpQ_xN~EXr|VoM(ytyB&Z9+<$?3{6r7}%_xhPVS z21mcoR5))G`5O*Xg!c{$=SO~8Sq(>qqs5Ui!)dj_oxqLjiz9`^oJZ--;z(t>Raum@ z4e0G}+~09v>Asnnx~F0G}{EW8L4)_=chu%kWu+kA=@Rd?@d^_#AM5KZfr- ze4fSUyYBCaC`e_e;?GQc^6`5)zKO<0e7EBh!tX2bP4(V@?|bl}`d`C0<$DX?zr&{h zzw40+KbhWQ{4T`rR(w;w?fCA&CxYLH@lEZ!4&P7WQ-t5&!Z-c<8NPpxPcdDfAkizu z_c(k;;dceT@xQ3WpLO_@;P*NB_UQHCcNA$?J-*Mthw$%k(+=YMQhdfC?GAiXy~pwW3_j!W z`&E2XS>oe+_&ou?e~EAEk3ZmhI(|&V?}hlLe9Q2?5uZu;-G*-z6DfROkI!WMe!@*V zf$y*5GX-f9ok#h`;(H!GQ}KH>zKPy;e8=#ahTli=P3^lL-*@6O9lu|8)4qxCH}O$O zqmK9R%foM*(wyUCBE=oC-Ftc$_4O}G4wCeq7~{G2Ul>D9BeW>oC%i3~gt)4_16lrU zOk{Mbzh8C5_Crzc9-^05(|CF(UG&#uB6df6-<%W*!q0~HoYv@b$_M8xQssjXCg-}c z$PAs0UvqoXd{32mZ8}jFSw=1YzxwAK9UCE;8vf6@c5I~5Z4JLknC-28!LXhh==ZgI zjemA*WTMWVcJ=+dy*@V5z;A)?YwuOMr0VV7+l^(USbN8wSm%8B0v-5081rrqb{~on zEZ2^UTzr%UrTJ$NFbEg~3<3rLgMdN6AYc$M2p9wm0tNwtfI+|@U=T0}7z7Lg1_6VB zLBJqj5HJWB1PlTO0fT@+z#w1{FbEg~3<3rLgMdN6AYc$M2p9wm0tNwtfI+|@U=T0} z7z7Lg1_6VBLBJqj5HJWB1PlTO0fT@+z#w1{FbEg~3<3rLgMdN6AYc$M2p9wm0tNwt zfI+|@U=T0}7z7Lg1_6VBLBJqj5HJWB1PlTO0fT@+z#w1{FbEg~3<3rLgMdN6AYc$M z2p9wm0tNwtfI+|@U=T0}7z7Lg1_6VBLBJqj5HJWB1PlTO0fT@+z#w1{FbEg~3<3rL zgMdN6AYc$M2p9wm0tNwtfI+|@U=T0}7z7Lg1_6VBLBJqj5HJWB1PlTO0fT@+z#w1{ zFbEg~3<3rLgMdN6AYc$M2p9wm0tNwtfI+|@U=T0}7z7Lg1_6VBLBJqj5HJWB1PlTO z0fT@+z#w1{FbEg~3<3rLgMdN6AYc$M2p9wm0tNwtfI+|@U=T0}7z7Lg1_6VBLBJqj z5HJWB1PlTO0fT@+z#w1{FbEg~3<3rLgMdN6AYc$M2p9wm0tNwtfI+|@U=T0}7z7Lg z1_6VBLBJqj5HJWB1PlTO0fT@+z#w1{FbEg~3<3rLgMdN6AYc$M2p9wm0tNwtfI+|@ zU=T0}7z7Lg1_6VBLBJqj5HJWB1PlTO0fT@+z#w1{FbEg~3<3rLgMdN6AYc$M2p9wm z0tNwtfI+|@U=T0}7z7Lg1_6VBLBJqj5HJWB1PlTO0fT@+z#w1{FbEg~3<3rLgMdN6 zAYc$M2p9wm0tNwtfI+|@U=T0}7z7Lg1_6VBLBJqj5HJWB1PlTO0fT@+z#w1{FbEg~ z3<3rLgMdN6AYc$M2p9wm0tNwtfI+|@U=T0}7z7Lg1_6VBLBJqj5HJWB1PlTO0fT@+ zz#w1{FbEg~3<3rLgMdN6AYc$M2p9wm0tNwtfI+|@U=T0}7z7Lg1_6VBLBJqj5HJWB z1PlTO0fT@+z#w1{FbEg~3<3rLgMdN6AYc$M2p9wm0tNwtfI+|@U=T0}7z7Lg1_6VB zLBJqj5HJWB1PlTO0fT@+z#w1{FbEg~3<3rLgMdN6AYc$M2p9wm0tNwtfI+|@U=T0} z7z7Lg1_6VBLBJqj5HJWB1PlTO0fT@+z#w1{FbEg~3<3rLgMdN6AYc$M2p9wm0tNwt zfI+|@U=T0}7z7Lg1_6VBLBJqj5HJWB1Y881>uw51rggOU%}J^D&Q8_Yos4y)`jZFM zobtgri&Xhwp%Bg!$P`)F8QZsTFxA=Jhm_}#QlX1=BxCKVm^#!w&^FjVl`y8t-rcub(S7BoPwi9PeVwrbXlifoP`a@v zPc1@QM^<2_qlnMPVg#x2SsY#=C!AEUHJA>SNpqDd(=>0PhbE3J~h~V zC`Q2CbxSx>t_$`L#QJiU^eXv0@=n)z_b0o77_-#T-|LdaSoob@UJQfos6cO*#pIpMb#lRU?am zd?z9CSKM9qzag*M`@kjY?(RhAbf&xU%eSRPrZd(X^YA)J<9>zQTXgkqZa;&a?J4kj z68`27!(v1$PTU@j?EWXx9a$L(Z-(cG?g&T9HukIbWXGQFeKB;*-n|eG!uNUH8t)8G z2lfl*@&J7ucPDrE?Q8Ev`@Pa#z3sa}esB(z{{?acbyvNMpP^)De_!uG-1q~oMs*KX zVbCX07X}UzFTXP!iSBRjOASxH3CXkdc(3YDR`tYU163q4Rlv3?ws#GyN^-JV-=-*-EKIyE)c6V z(ywcuN4Bw$fsyx#fv@A<)YYU3N8Zhd!Y`0#0+8%f=*?vLAX?-}1d+Jx9)Lmpeg%F6 zyJLg+`62vt)n6BM9v3{Q6<%Na-Wbb}8X9CZ%$?y0)r%-teex{eZ3yJjLzY^_vWQ~E zgU#Yvhc{g(5c!|Bx3`;?Hy@TL0#wN`Z994 z)@Kl^&l?{eh9hYH3b_L{faP8M$V(-MV)*@g{0<&uwEmQvT6(lm8_PSry6?R&9ND4y zqPqX@w9@>vNy_MqKcj;BOa+XZ$5|SAZ6QaZ_r(3-$olM}1IgInU^i^#-dJi+zpwv> zQ}IUTobrtA{SzpLJ7Zn#L%k`WcF6yQP=4u%^0B^-Cb2M1yX?@6hJ;XF6L~ z;p%o=g`HK~s%mPRae06GvZWT6k9wE24UM?`BrZpG$=;K5f>DvSdOtx?TeCq*vu|kc zu2@p_ck!6SX!Tlp<%8kKtPHy@E{q3N zezq!aT~vPBqVjFHcQfu4yTv?h@&M9`I+7h!ef0ru(s3kB@@miYBjxDi46h)=#H@bK z+YVoE?m^_CafXCiFJZxg1?LgxUwxR2EnDV)!Oxei!fitX1O3Sq`JgP2gCH7PR9H~e zQBcsaC)UvejovrdJqTa0;~0lv96(Bt*op1 zDp7QILBZ}Jj9{%mS(SolKm7LHs)C%LLHNa#aZf=(XZIkq=0TO((>(}MKm_TGKtX{= zp6%+cgQ?gc$sy?%-Bn!is87wI1>hJCC_m>8w`(Okq?_es~-H`%b z!wRJsfn;oVJBCch5IaC=xINDtN*8_5caS>v#>X)2@pYyv0O(D!bIIL9Vk^Ce(m+3m+A|4tliwUdPCc)jVsz#Y_6|s zDlBOBr)@udbz5^`!3r;JTD=1==4%HZd$o^YhgjJcfA2c za6jo?Q&n4?GYbm_{VCf{-@10i>4gPDUgGwRD_Wh6YgVl!mTvucIMV0i$P)`cXCpjE z?J$x+vH$3nC@dJ}jG|fWsTLNDa7U@qE1n2P7WgX7))d}2a}^{NdK!ho1-szr*3#vR zxGXJj?GjifYeng=Aw93)z#;nmP5cfO9Kw{AuD*k-xxQMn)Q?vwSrRI6>G5!+u)wt* zlyFTZp@kc9OF97-gmT=6gn|NXe(3s9Tu&}MeNW8w05Dt+#ghG1yV?h1oeL<(%gC{e z6mYDse`xm}pES~#cLkL#0Bi_^bswh0?Ynwo^XaND7VC^LbC-W292w_LbN!`I$1gv7 z^r#5+cK7vQ3)M4aq9r04_0z5G6HOvoDgv!mM|(;H z)`s!b*1dP2R|M8Y==T70V|P0)*GIUPHg*$5U_$|%fHodNB0Abnvt>vu@?F=uD7V~7WLa05i1(TeBl#tXqCakoqa?B38TDr!At&{n{r({ud!nr@e(UIaSIh>(}hn~jM;=Qt85aOfqq=?R*MR`{tj z-yy|%5r}1KbLUYaTItKzPd$FlUMXHe<7=K5*W-zUXV5!f>- z-D39XMRcAoS7Y_V%vbm5;knu%68>y8k4UJ`K)i^uc{3Rio$t?6`!OkIi9k;tjB$Gk zs+qpDhCGitrplMOx~^XgD_r-e6h*!ajrEU7QQ}W%cw7o7^mKnWHhx^f21OV6)0&=; z!mm*qn~!5Ois(Xrrj}1gQS3`-s(x~KVMv9j$e@fG{QdG#`D6guv6uB(th@<{N+0^`;6s7)REze8wRq0D< zu6{v^K7T^Zi&88Q(RzPc?Ps9W{Rwq14JX`Oe`2^kXm0qd6d`|+#?MJHS4129X-%J( z!tZ=EH-BM7LdzG2C$v<*EJcBjMoZ0?V1Y!mQAFWOG>d49i25CXmf9~%u`CaQ=r2_F z6)DEa;8++b7zA>*w68?E9f3b6{WU@1#l=Tq<`PlQV`(ED z9wQk^kCE#70Z}WWi~UIr2~jShOGNY(5nU>xr;6w@|Lw-4@LQDXra{W?__H*p#B32= z?n|m^IWi3D+Uldj2WxH3#S(sJre(FYmq_8)#I;RVNZ}W-+U6^VcW7PnM`+vzGlmNj z>?8#fVFi7p>s#&|E-MYycS!;NG!08b&D|q%)ZQ~9q2d1Fl{Yj#FkG4%nm#(BNb`du z5?UVOgnaGTvM~>PPHuoSkatyU3D`vMsxC;9?p@XAk(KkV8uCd8dRL7h5=8H+DJ-UB zu9^!329S5JrI70LB&w!50$q@~tSJ&peV4Vxe(|fR8%5xy%hs2WfTS-QqNKOemyM-j zjPJ5(w162+-)$ZTgzaD+U{bu~)B4M|_t+GKCimvu7)bX)qe zex|?8bq%vf7pCtvmQ&ZJFPmoj`K@c7Ly9SVx1~bBFZV9%t1JDa>T96ae0OW-`TMuN zZvL>$^;N?z8=z}_Wg8dzySu)r+RuJ{bB({t>JehaJk4uWLv@`W*oK;VGU4gFwGIAO zHPkiwyR4zUX&9-7W`CD8G`0+*+_Y#|=H|tIa2i^c_&cSs`V<;aUNahNmJYjHd#WFe z#=2$0F6$kCFElnR_ser*;|f1?jZG_um2F-{gEd`m%WD7Krs_3**=VY1^$)A2+O;&8 zy|PVp>xPxBU+=HCsbPbt@nvp2&Cg&{(?&mZP0gEVx|F8evf1B9&DC4{l$&d|`ZG7z zZu1X~=DO4U;56577w}>|%FPXD_AOv5`NvUn^V$Bf(A=^^Ov}6N9t1I7 zk&_ne8XR1Z(@qA&s0GP>G64&;VihtvJYhjic2aG2QeAdZeRfhqc2Z+@Qd4$Pb9PdT zkfkG=TAd>e?a#^w2C~w?K~@@A$VvkbS!rM*D-B#^rGbsCv>bfY=HR0?2OqUL_^8dn zM{N#1pi8paQk#R1+8lgfnJBw#4nFE~@KKk8kGdRu)aBr#E(afVIrxBL%xYg<4nFE~ z@KKk8kNO;Z)aT%%J_jH5Irym0!AE@#KI(Ju0WF`!TYU~b>T~eXkb{qg9DFq7;G-c2 z9}PM9Xvo0_77nx8+>nD0n5^u4IrwPI!AD~bJ{oiI(U^me#vFV!=HR0-2Oo_&_-M?* z2kdVaZ*UE=({k|9l!K3^9DFq8;G-!AA5A&fX3Enu&NZD=MS6Ufe$gJF1gGQ=eh zwdW|2gY_1$uItLgy%>&Y6oNayGJa z=HjR}7f0l8WECfeBReq{N91y3=gh?sIUU(Kb8$p&M|RF!9FgOZm6JS=?8ICgk?)b6 zGZ#nXePrj%#S!@***SA@L>@?X&RiUk50aIWoRI9qTpW=blASXbN92fP=gh?sxgyy) zb8*y=izD(zvWk;ClAV}~BXUTxbLQfRT$1dZxi})HBs*s=j>s*^%1M4nc497$$TP{# znTsRxO|o<5;)uMH?3}qcBL5^iXD*J&L&?fXE=qP{E{@1a$x zxi}(MB`YU6CE1C&I3gz`J1002-@6m>fx=`AE1?TkY+AW0?|586V^)-*I$wO!Eeiu5I>e->yiLcZVMEMr?LC^?Lfr(bpZLUwvc+Wl^=ZEDiT=k z2#5Y`$wYP<}+gwGq}rTD;vQt=c%-=8pA+%$2r_0fq_MDX#6Q_-wR)2tgN zZD^q4z|1$+O-8&UEJvuc%_|2&^ zg?MLb*!t5{WV&P;GJSN~EbFt=aR1+@6^P$XE41#JjuJ0UN6MF`=Lf$x9c}yl^su;G zMXVbYO5LSU>Qyz%dIwk5we}Pd`iw0@ujBI*TZ(IEl#1gsW{18wLx#SM&o5?3>w%eA zz!Xo-{HhFnWu^@M5T8HJl;XZwrQ&P&`~jc)%4df@T@Et%{G?op+h>=G=Vn)0U!RSJ zyfb^Q^~pJC)>r1>>YH=&ga2pFJR$yjPB{2j#e5+?Ur`nMSp|sVb4{fbpQ`+}6qn7# zpEu~w1M~3bxAf<8^YQ1pD*X9R`tyke5Xs9H%FqM&JiAbeUo0#Yw^Wyk7pg0**Q-(2 zr8Nt!uhyXE-__viZ#DVBJK*_*f@zpt$d-B~9?&*1a5Iw^i%S882VkF0ms z*IHl0>Vfq(UHzgyKX?q*M_kts4!zs}*~I5h4N}~Xi2ZB${HC$ey0Qs5pKEHce%gd` zAE8lnM{|DgSxi*Kmzu+&zckCx-7PZoR0{@QOR2bWQK@(apEnm(TEAIDWfwPFKV6Kn z4=%yg@g@1e?=NXV>%6&R8qXr;k;f2$0A5}z-(O7WxCW!AlGk@GWa9f;7{u=UfmXv)Rw zmItq0w*q5fT~+9{bu#ole15Y|1}|U#?;!Y*^*zB)um28yeICDly#BlR^&9-Ual@PV zb?=6r(DydT&|mQR$Z1kMe_E;dF+LyMSZUp}5!8RTah3J4O#tP)n{f4`P5HqaHm?@q zzRls_FE+114{xaozObbg?b%W#ezRq5@Q+*83GsogRiRI81qk@Ou~i1|-u69I_QbZT z;Ac+%5Bz%N^s3OGPnV%Pw#(3y+okyK_EK^A8KvS=_~QcWXQS%Bo?R9E)DBer@{TI;&W^Rg|Js47kDXH$dh{F_dJUf+ zo+HK8=ayRcp9=!7ox908b{>hwdANG?yv^2g^y3TXvt5RMhR@&HrMP2PrS;@4C1pe0NWN@DF=-32}LMIP`qC z41EiqpLa`fL%h^_DUKZf7PrK2<3a0VJ-B$ar&Ii~Ct_XR3j#OxBIWMh{NTs2Cr-T3 z8xFnOD?>;3%FvB_rS-^O-2IommiXD;-PSFA$p3U7QeNuI55Cd2M~Juk!l7IGW#}P% zUg($N-}{$YHx2-RCkGrMP7H*DZx6(U_|-s9@PnG*L3x#WPb4G!G4U>!EoqDgEDkwN`~%AN%5r=)B!&C4V8+QhbpaihmiZOeU|va zzJzt{ew2T0KT^KEKR&s*MH;JZAazX`1#;b z*%SQAQTapsegnTlAGuh{(9`ti75owZb+IfJcU^)%ui=mNe=Z>};p4~T1=gF#$ZNRm z|7qfCW7@jT@OgKA3tBd1^8K*1{n#dTS|{X`G+&}pRaNT0N&D4F+mA_0z@h0#fM2ex44 z$~RU%uu?jYYK~Gquu?Q$<4{;=Ct=ps1O*jFxaUmd}j#%AllgO{lq{MKdgwt9jYjZM~r&({+^ zXCHtjR5xH|ZVq=jJOk)ft`Ll3Z2bzkNbommvz%_EIuhz60%n?aSN*V}oweO|Ubt+itF{Xd1hJm70h(d#IU& zfQPT|h=xx+SXgFnpBT$YXrrs>&EJN0i)~axLhp6LbKIlrga^5r8}w#EYdhxN%OM63Dmuu6>9lt6%`n?R zEodI^phTU=M=*-9fDffce1tFgc^|;KTU+5yZzt{tCw$(+Qq$>{)++OTT09V@s1iKU)24}Ye z{OW3e;Fn^rxMJ_-N=r9&L+R^A{$w}7C&iY)*={%Wkj@??SfE&Q5XyLvD|dqg3lw|8 zm5Ls&TpWyDrn)Ly6U44XK3`2b+vzFHXc&BeV05Y+q&*4KgDA1Y;VD2j7~)IC)#IMesorkMOcN6Euag zH4{+ACwOAXBt=OWn8a0fZxS2!#UxE5#WscYYMsJno#*h~6wTmPi1IW~lxFdxD~jYu zR7<`WMe=%-_OKh%6eD(FhUW00Im5FDXZUKyW@sMw{|tSJ+S@ZoFP)`5!tyLnc{R%m zmc&r7F-8l>2*;4|RSX5UV|0rI-yF}2&GEdYIpjT`qua=xFh95 zHOpq8MJ|A9l@E$Gxe&2aE&{q_3)BYrh}a|-BlgNAz;^ipRKNVL7?iDuLvkrFESEuz z$nT3$xg7C=Yy&RJ6;PMt55;BqBI3AKcU87SU6cPPZpaR(J2Ibfu2Korto%u|C{<8x zN;S}-IH5X~k3^SJgSbh#1oSAiP`%1u#dgJoIH>TE^(%EyL(1R8uyPr3RH+BXlm@5^ z%HPFB8Ib6XFe}8Mvvqq3$Th#a#6&VvEY>W>q~1Hd)48|sGoZ*fx%BF;7R0L_M8s1`#miB>}&1c#v?=rr7f>@wt&*kBld z;4usWy@n9vc0&P)e!~!iegj|PkYN~d*kB>{A_w~#$I4EpWv80XWYNz+Q{hWDr5TTX zN@8lp(NpPvd1wE=YWzd3m1 z$RX3=w3OtOl!J$lq#aK=aQJ{}|Iq`fX@^n{C8wqyNPFjanko6vADBHCz3=6oTW;pY zUu0y%6Q7v0=U8^eKa3|$C-EN}Nqhe Promise +// 3. pre-run appended it, var Module = {}; ..generated code.. +// 4. External script tag defines var Module. +// We need to check if Module already exists (e.g. case 3 above). +// Substitution will be replaced with actual code on later stage of the build, +// this way Closure Compiler will not mangle it (e.g. case 4. above). +// Note that if you want to run closure, and also to use Module +// after the generated code, you will need to define var Module = {}; +// before the code. Then that object will be used in the code, and you +// can continue to use Module afterwards as well. +var Module = typeof Module != 'undefined' ? Module : {}; + +// Determine the runtime environment we are in. You can customize this by +// setting the ENVIRONMENT setting at compile time (see settings.js). + +// Attempt to auto-detect the environment +var ENVIRONMENT_IS_WEB = typeof window == 'object'; +var ENVIRONMENT_IS_WORKER = typeof WorkerGlobalScope != 'undefined'; +// N.b. Electron.js environment is simultaneously a NODE-environment, but +// also a web environment. +var ENVIRONMENT_IS_NODE = typeof process == 'object' && typeof process.versions == 'object' && typeof process.versions.node == 'string' && process.type != 'renderer'; +var ENVIRONMENT_IS_SHELL = !ENVIRONMENT_IS_WEB && !ENVIRONMENT_IS_NODE && !ENVIRONMENT_IS_WORKER; + +if (ENVIRONMENT_IS_NODE) { + +} + +// --pre-jses are emitted after the Module integration code, so that they can +// refer to Module (if they choose; they can also define Module) + + +// Sometimes an existing Module object exists with properties +// meant to overwrite the default module functionality. Here +// we collect those properties and reapply _after_ we configure +// the current environment's defaults to avoid having to be so +// defensive during initialization. +var moduleOverrides = {...Module}; + +var arguments_ = []; +var thisProgram = './this.program'; +var quit_ = (status, toThrow) => { + throw toThrow; +}; + +// `/` should be present at the end if `scriptDirectory` is not empty +var scriptDirectory = ''; +function locateFile(path) { + if (Module['locateFile']) { + return Module['locateFile'](path, scriptDirectory); + } + return scriptDirectory + path; +} + +// Hooks that are implemented differently in different runtime environments. +var readAsync, readBinary; + +if (ENVIRONMENT_IS_NODE) { + if (typeof process == 'undefined' || !process.release || process.release.name !== 'node') throw new Error('not compiled for this environment (did you build to HTML and try to run it not on the web, or set ENVIRONMENT to something - like node - and run it someplace else - like on the web?)'); + + var nodeVersion = process.versions.node; + var numericVersion = nodeVersion.split('.').slice(0, 3); + numericVersion = (numericVersion[0] * 10000) + (numericVersion[1] * 100) + (numericVersion[2].split('-')[0] * 1); + var minVersion = 160000; + if (numericVersion < 160000) { + throw new Error('This emscripten-generated code requires node v16.0.0 (detected v' + nodeVersion + ')'); + } + + // These modules will usually be used on Node.js. Load them eagerly to avoid + // the complexity of lazy-loading. + var fs = require('fs'); + var nodePath = require('path'); + + scriptDirectory = __dirname + '/'; + +// include: node_shell_read.js +readBinary = (filename) => { + // We need to re-wrap `file://` strings to URLs. + filename = isFileURI(filename) ? new URL(filename) : filename; + var ret = fs.readFileSync(filename); + assert(Buffer.isBuffer(ret)); + return ret; +}; + +readAsync = async (filename, binary = true) => { + // See the comment in the `readBinary` function. + filename = isFileURI(filename) ? new URL(filename) : filename; + var ret = fs.readFileSync(filename, binary ? undefined : 'utf8'); + assert(binary ? Buffer.isBuffer(ret) : typeof ret == 'string'); + return ret; +}; +// end include: node_shell_read.js + if (!Module['thisProgram'] && process.argv.length > 1) { + thisProgram = process.argv[1].replace(/\\/g, '/'); + } + + arguments_ = process.argv.slice(2); + + if (typeof module != 'undefined') { + module['exports'] = Module; + } + + quit_ = (status, toThrow) => { + process.exitCode = status; + throw toThrow; + }; + +} else +if (ENVIRONMENT_IS_SHELL) { + + if ((typeof process == 'object' && typeof require === 'function') || typeof window == 'object' || typeof WorkerGlobalScope != 'undefined') throw new Error('not compiled for this environment (did you build to HTML and try to run it not on the web, or set ENVIRONMENT to something - like node - and run it someplace else - like on the web?)'); + +} else + +// Note that this includes Node.js workers when relevant (pthreads is enabled). +// Node.js workers are detected as a combination of ENVIRONMENT_IS_WORKER and +// ENVIRONMENT_IS_NODE. +if (ENVIRONMENT_IS_WEB || ENVIRONMENT_IS_WORKER) { + if (ENVIRONMENT_IS_WORKER) { // Check worker, not web, since window could be polyfilled + scriptDirectory = self.location.href; + } else if (typeof document != 'undefined' && document.currentScript) { // web + scriptDirectory = document.currentScript.src; + } + // blob urls look like blob:http://site.com/etc/etc and we cannot infer anything from them. + // otherwise, slice off the final part of the url to find the script directory. + // if scriptDirectory does not contain a slash, lastIndexOf will return -1, + // and scriptDirectory will correctly be replaced with an empty string. + // If scriptDirectory contains a query (starting with ?) or a fragment (starting with #), + // they are removed because they could contain a slash. + if (scriptDirectory.startsWith('blob:')) { + scriptDirectory = ''; + } else { + scriptDirectory = scriptDirectory.slice(0, scriptDirectory.replace(/[?#].*/, '').lastIndexOf('/')+1); + } + + if (!(typeof window == 'object' || typeof WorkerGlobalScope != 'undefined')) throw new Error('not compiled for this environment (did you build to HTML and try to run it not on the web, or set ENVIRONMENT to something - like node - and run it someplace else - like on the web?)'); + + { +// include: web_or_worker_shell_read.js +if (ENVIRONMENT_IS_WORKER) { + readBinary = (url) => { + var xhr = new XMLHttpRequest(); + xhr.open('GET', url, false); + xhr.responseType = 'arraybuffer'; + xhr.send(null); + return new Uint8Array(/** @type{!ArrayBuffer} */(xhr.response)); + }; + } + + readAsync = async (url) => { + // Fetch has some additional restrictions over XHR, like it can't be used on a file:// url. + // See https://github.com/github/fetch/pull/92#issuecomment-140665932 + // Cordova or Electron apps are typically loaded from a file:// url. + // So use XHR on webview if URL is a file URL. + if (isFileURI(url)) { + return new Promise((resolve, reject) => { + var xhr = new XMLHttpRequest(); + xhr.open('GET', url, true); + xhr.responseType = 'arraybuffer'; + xhr.onload = () => { + if (xhr.status == 200 || (xhr.status == 0 && xhr.response)) { // file URLs can return 0 + resolve(xhr.response); + return; + } + reject(xhr.status); + }; + xhr.onerror = reject; + xhr.send(null); + }); + } + var response = await fetch(url, { credentials: 'same-origin' }); + if (response.ok) { + return response.arrayBuffer(); + } + throw new Error(response.status + ' : ' + response.url); + }; +// end include: web_or_worker_shell_read.js + } +} else +{ + throw new Error('environment detection error'); +} + +var out = Module['print'] || console.log.bind(console); +var err = Module['printErr'] || console.error.bind(console); + +// Merge back in the overrides +Object.assign(Module, moduleOverrides); +// Free the object hierarchy contained in the overrides, this lets the GC +// reclaim data used. +moduleOverrides = null; +checkIncomingModuleAPI(); + +// Emit code to handle expected values on the Module object. This applies Module.x +// to the proper local x. This has two benefits: first, we only emit it if it is +// expected to arrive, and second, by using a local everywhere else that can be +// minified. + +if (Module['arguments']) arguments_ = Module['arguments'];legacyModuleProp('arguments', 'arguments_'); + +if (Module['thisProgram']) thisProgram = Module['thisProgram'];legacyModuleProp('thisProgram', 'thisProgram'); + +// perform assertions in shell.js after we set up out() and err(), as otherwise if an assertion fails it cannot print the message +// Assertions on removed incoming Module JS APIs. +assert(typeof Module['memoryInitializerPrefixURL'] == 'undefined', 'Module.memoryInitializerPrefixURL option was removed, use Module.locateFile instead'); +assert(typeof Module['pthreadMainPrefixURL'] == 'undefined', 'Module.pthreadMainPrefixURL option was removed, use Module.locateFile instead'); +assert(typeof Module['cdInitializerPrefixURL'] == 'undefined', 'Module.cdInitializerPrefixURL option was removed, use Module.locateFile instead'); +assert(typeof Module['filePackagePrefixURL'] == 'undefined', 'Module.filePackagePrefixURL option was removed, use Module.locateFile instead'); +assert(typeof Module['read'] == 'undefined', 'Module.read option was removed'); +assert(typeof Module['readAsync'] == 'undefined', 'Module.readAsync option was removed (modify readAsync in JS)'); +assert(typeof Module['readBinary'] == 'undefined', 'Module.readBinary option was removed (modify readBinary in JS)'); +assert(typeof Module['setWindowTitle'] == 'undefined', 'Module.setWindowTitle option was removed (modify emscripten_set_window_title in JS)'); +assert(typeof Module['TOTAL_MEMORY'] == 'undefined', 'Module.TOTAL_MEMORY has been renamed Module.INITIAL_MEMORY'); +legacyModuleProp('asm', 'wasmExports'); +legacyModuleProp('readAsync', 'readAsync'); +legacyModuleProp('readBinary', 'readBinary'); +legacyModuleProp('setWindowTitle', 'setWindowTitle'); +var IDBFS = 'IDBFS is no longer included by default; build with -lidbfs.js'; +var PROXYFS = 'PROXYFS is no longer included by default; build with -lproxyfs.js'; +var WORKERFS = 'WORKERFS is no longer included by default; build with -lworkerfs.js'; +var FETCHFS = 'FETCHFS is no longer included by default; build with -lfetchfs.js'; +var ICASEFS = 'ICASEFS is no longer included by default; build with -licasefs.js'; +var JSFILEFS = 'JSFILEFS is no longer included by default; build with -ljsfilefs.js'; +var OPFS = 'OPFS is no longer included by default; build with -lopfs.js'; + +var NODEFS = 'NODEFS is no longer included by default; build with -lnodefs.js'; + +assert(!ENVIRONMENT_IS_SHELL, 'shell environment detected but not enabled at build time. Add `shell` to `-sENVIRONMENT` to enable.'); + +// end include: shell.js + +// include: preamble.js +// === Preamble library stuff === + +// Documentation for the public APIs defined in this file must be updated in: +// site/source/docs/api_reference/preamble.js.rst +// A prebuilt local version of the documentation is available at: +// site/build/text/docs/api_reference/preamble.js.txt +// You can also build docs locally as HTML or other formats in site/ +// An online HTML version (which may be of a different version of Emscripten) +// is up at http://kripken.github.io/emscripten-site/docs/api_reference/preamble.js.html + +var wasmBinary = Module['wasmBinary'];legacyModuleProp('wasmBinary', 'wasmBinary'); + +if (typeof WebAssembly != 'object') { + err('no native wasm support detected'); +} + +// Wasm globals + +var wasmMemory; + +//======================================== +// Runtime essentials +//======================================== + +// whether we are quitting the application. no code should run after this. +// set in exit() and abort() +var ABORT = false; + +// set by exit() and abort(). Passed to 'onExit' handler. +// NOTE: This is also used as the process return code code in shell environments +// but only when noExitRuntime is false. +var EXITSTATUS; + +// In STRICT mode, we only define assert() when ASSERTIONS is set. i.e. we +// don't define it at all in release modes. This matches the behaviour of +// MINIMAL_RUNTIME. +// TODO(sbc): Make this the default even without STRICT enabled. +/** @type {function(*, string=)} */ +function assert(condition, text) { + if (!condition) { + abort('Assertion failed' + (text ? ': ' + text : '')); + } +} + +// We used to include malloc/free by default in the past. Show a helpful error in +// builds with assertions. +function _malloc() { + abort('malloc() called but not included in the build - add `_malloc` to EXPORTED_FUNCTIONS'); +} +function _free() { + // Show a helpful error since we used to include free by default in the past. + abort('free() called but not included in the build - add `_free` to EXPORTED_FUNCTIONS'); +} + +// Memory management + +var HEAP, +/** @type {!Int8Array} */ + HEAP8, +/** @type {!Uint8Array} */ + HEAPU8, +/** @type {!Int16Array} */ + HEAP16, +/** @type {!Uint16Array} */ + HEAPU16, +/** @type {!Int32Array} */ + HEAP32, +/** @type {!Uint32Array} */ + HEAPU32, +/** @type {!Float32Array} */ + HEAPF32, +/* BigInt64Array type is not correctly defined in closure +/** not-@type {!BigInt64Array} */ + HEAP64, +/* BigUint64Array type is not correctly defined in closure +/** not-t@type {!BigUint64Array} */ + HEAPU64, +/** @type {!Float64Array} */ + HEAPF64; + +var runtimeInitialized = false; + +/** + * Indicates whether filename is delivered via file protocol (as opposed to http/https) + * @noinline + */ +var isFileURI = (filename) => filename.startsWith('file://'); + +// include: runtime_shared.js +// include: runtime_stack_check.js +// Initializes the stack cookie. Called at the startup of main and at the startup of each thread in pthreads mode. +function writeStackCookie() { + var max = _emscripten_stack_get_end(); + assert((max & 3) == 0); + // If the stack ends at address zero we write our cookies 4 bytes into the + // stack. This prevents interference with SAFE_HEAP and ASAN which also + // monitor writes to address zero. + if (max == 0) { + max += 4; + } + // The stack grow downwards towards _emscripten_stack_get_end. + // We write cookies to the final two words in the stack and detect if they are + // ever overwritten. + HEAPU32[((max)>>2)] = 0x02135467; + HEAPU32[(((max)+(4))>>2)] = 0x89BACDFE; + // Also test the global address 0 for integrity. + HEAPU32[((0)>>2)] = 1668509029; +} + +function checkStackCookie() { + if (ABORT) return; + var max = _emscripten_stack_get_end(); + // See writeStackCookie(). + if (max == 0) { + max += 4; + } + var cookie1 = HEAPU32[((max)>>2)]; + var cookie2 = HEAPU32[(((max)+(4))>>2)]; + if (cookie1 != 0x02135467 || cookie2 != 0x89BACDFE) { + abort(`Stack overflow! Stack cookie has been overwritten at ${ptrToString(max)}, expected hex dwords 0x89BACDFE and 0x2135467, but received ${ptrToString(cookie2)} ${ptrToString(cookie1)}`); + } + // Also test the global address 0 for integrity. + if (HEAPU32[((0)>>2)] != 0x63736d65 /* 'emsc' */) { + abort('Runtime error: The application has corrupted its heap memory area (address zero)!'); + } +} +// end include: runtime_stack_check.js +// include: runtime_exceptions.js +// end include: runtime_exceptions.js +// include: runtime_debug.js +// Endianness check +(() => { + var h16 = new Int16Array(1); + var h8 = new Int8Array(h16.buffer); + h16[0] = 0x6373; + if (h8[0] !== 0x73 || h8[1] !== 0x63) throw 'Runtime error: expected the system to be little-endian! (Run with -sSUPPORT_BIG_ENDIAN to bypass)'; +})(); + +if (Module['ENVIRONMENT']) { + throw new Error('Module.ENVIRONMENT has been deprecated. To force the environment, use the ENVIRONMENT compile-time option (for example, -sENVIRONMENT=web or -sENVIRONMENT=node)'); +} + +function legacyModuleProp(prop, newName, incoming=true) { + if (!Object.getOwnPropertyDescriptor(Module, prop)) { + Object.defineProperty(Module, prop, { + configurable: true, + get() { + let extra = incoming ? ' (the initial value can be provided on Module, but after startup the value is only looked for on a local variable of that name)' : ''; + abort(`\`Module.${prop}\` has been replaced by \`${newName}\`` + extra); + + } + }); + } +} + +function consumedModuleProp(prop) { + if (!Object.getOwnPropertyDescriptor(Module, prop)) { + Object.defineProperty(Module, prop, { + configurable: true, + set() { + abort(`Attempt to set \`Module.${prop}\` after it has already been processed. This can happen, for example, when code is injected via '--post-js' rather than '--pre-js'`); + + } + }); + } +} + +function ignoredModuleProp(prop) { + if (Object.getOwnPropertyDescriptor(Module, prop)) { + abort(`\`Module.${prop}\` was supplied but \`${prop}\` not included in INCOMING_MODULE_JS_API`); + } +} + +// forcing the filesystem exports a few things by default +function isExportedByForceFilesystem(name) { + return name === 'FS_createPath' || + name === 'FS_createDataFile' || + name === 'FS_createPreloadedFile' || + name === 'FS_unlink' || + name === 'addRunDependency' || + // The old FS has some functionality that WasmFS lacks. + name === 'FS_createLazyFile' || + name === 'FS_createDevice' || + name === 'removeRunDependency'; +} + +/** + * Intercept access to a global symbol. This enables us to give informative + * warnings/errors when folks attempt to use symbols they did not include in + * their build, or no symbols that no longer exist. + */ +function hookGlobalSymbolAccess(sym, func) { + if (typeof globalThis != 'undefined' && !Object.getOwnPropertyDescriptor(globalThis, sym)) { + Object.defineProperty(globalThis, sym, { + configurable: true, + get() { + func(); + return undefined; + } + }); + } +} + +function missingGlobal(sym, msg) { + hookGlobalSymbolAccess(sym, () => { + warnOnce(`\`${sym}\` is not longer defined by emscripten. ${msg}`); + }); +} + +missingGlobal('buffer', 'Please use HEAP8.buffer or wasmMemory.buffer'); +missingGlobal('asm', 'Please use wasmExports instead'); + +function missingLibrarySymbol(sym) { + hookGlobalSymbolAccess(sym, () => { + // Can't `abort()` here because it would break code that does runtime + // checks. e.g. `if (typeof SDL === 'undefined')`. + var msg = `\`${sym}\` is a library symbol and not included by default; add it to your library.js __deps or to DEFAULT_LIBRARY_FUNCS_TO_INCLUDE on the command line`; + // DEFAULT_LIBRARY_FUNCS_TO_INCLUDE requires the name as it appears in + // library.js, which means $name for a JS name with no prefix, or name + // for a JS name like _name. + var librarySymbol = sym; + if (!librarySymbol.startsWith('_')) { + librarySymbol = '$' + sym; + } + msg += ` (e.g. -sDEFAULT_LIBRARY_FUNCS_TO_INCLUDE='${librarySymbol}')`; + if (isExportedByForceFilesystem(sym)) { + msg += '. Alternatively, forcing filesystem support (-sFORCE_FILESYSTEM) can export this for you'; + } + warnOnce(msg); + }); + + // Any symbol that is not included from the JS library is also (by definition) + // not exported on the Module object. + unexportedRuntimeSymbol(sym); +} + +function unexportedRuntimeSymbol(sym) { + if (!Object.getOwnPropertyDescriptor(Module, sym)) { + Object.defineProperty(Module, sym, { + configurable: true, + get() { + var msg = `'${sym}' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the Emscripten FAQ)`; + if (isExportedByForceFilesystem(sym)) { + msg += '. Alternatively, forcing filesystem support (-sFORCE_FILESYSTEM) can export this for you'; + } + abort(msg); + } + }); + } +} + +var runtimeDebug = true; // Switch to false at runtime to disable logging at the right times + +// Used by XXXXX_DEBUG settings to output debug messages. +function dbg(...args) { + if (!runtimeDebug && typeof runtimeDebug != 'undefined') return; + // TODO(sbc): Make this configurable somehow. Its not always convenient for + // logging to show up as warnings. + console.warn(...args); +} +// end include: runtime_debug.js +// include: memoryprofiler.js +// end include: memoryprofiler.js + + +function updateMemoryViews() { + var b = wasmMemory.buffer; + Module['HEAP8'] = HEAP8 = new Int8Array(b); + Module['HEAP16'] = HEAP16 = new Int16Array(b); + Module['HEAPU8'] = HEAPU8 = new Uint8Array(b); + Module['HEAPU16'] = HEAPU16 = new Uint16Array(b); + Module['HEAP32'] = HEAP32 = new Int32Array(b); + Module['HEAPU32'] = HEAPU32 = new Uint32Array(b); + Module['HEAPF32'] = HEAPF32 = new Float32Array(b); + Module['HEAPF64'] = HEAPF64 = new Float64Array(b); + Module['HEAP64'] = HEAP64 = new BigInt64Array(b); + Module['HEAPU64'] = HEAPU64 = new BigUint64Array(b); +} + +// end include: runtime_shared.js +assert(!Module['STACK_SIZE'], 'STACK_SIZE can no longer be set at runtime. Use -sSTACK_SIZE at link time') + +assert(typeof Int32Array != 'undefined' && typeof Float64Array !== 'undefined' && Int32Array.prototype.subarray != undefined && Int32Array.prototype.set != undefined, + 'JS engine does not provide full typed array support'); + +// If memory is defined in wasm, the user can't provide it, or set INITIAL_MEMORY +assert(!Module['wasmMemory'], 'Use of `wasmMemory` detected. Use -sIMPORTED_MEMORY to define wasmMemory externally'); +assert(!Module['INITIAL_MEMORY'], 'Detected runtime INITIAL_MEMORY setting. Use -sIMPORTED_MEMORY to define wasmMemory dynamically'); + +function preRun() { + if (Module['preRun']) { + if (typeof Module['preRun'] == 'function') Module['preRun'] = [Module['preRun']]; + while (Module['preRun'].length) { + addOnPreRun(Module['preRun'].shift()); + } + } + consumedModuleProp('preRun'); + callRuntimeCallbacks(onPreRuns); +} + +function initRuntime() { + assert(!runtimeInitialized); + runtimeInitialized = true; + + checkStackCookie(); + + if (!Module['noFSInit'] && !FS.initialized) FS.init(); +TTY.init(); + + wasmExports['__wasm_call_ctors'](); + + FS.ignorePermissions = false; +} + +function preMain() { + checkStackCookie(); + +} + +function postRun() { + checkStackCookie(); + + if (Module['postRun']) { + if (typeof Module['postRun'] == 'function') Module['postRun'] = [Module['postRun']]; + while (Module['postRun'].length) { + addOnPostRun(Module['postRun'].shift()); + } + } + consumedModuleProp('postRun'); + + callRuntimeCallbacks(onPostRuns); +} + +// A counter of dependencies for calling run(). If we need to +// do asynchronous work before running, increment this and +// decrement it. Incrementing must happen in a place like +// Module.preRun (used by emcc to add file preloading). +// Note that you can add dependencies in preRun, even though +// it happens right before run - run will be postponed until +// the dependencies are met. +var runDependencies = 0; +var dependenciesFulfilled = null; // overridden to take different actions when all run dependencies are fulfilled +var runDependencyTracking = {}; +var runDependencyWatcher = null; + +function getUniqueRunDependency(id) { + var orig = id; + while (1) { + if (!runDependencyTracking[id]) return id; + id = orig + Math.random(); + } +} + +function addRunDependency(id) { + runDependencies++; + + Module['monitorRunDependencies']?.(runDependencies); + + if (id) { + assert(!runDependencyTracking[id]); + runDependencyTracking[id] = 1; + if (runDependencyWatcher === null && typeof setInterval != 'undefined') { + // Check for missing dependencies every few seconds + runDependencyWatcher = setInterval(() => { + if (ABORT) { + clearInterval(runDependencyWatcher); + runDependencyWatcher = null; + return; + } + var shown = false; + for (var dep in runDependencyTracking) { + if (!shown) { + shown = true; + err('still waiting on run dependencies:'); + } + err(`dependency: ${dep}`); + } + if (shown) { + err('(end of list)'); + } + }, 10000); + } + } else { + err('warning: run dependency added without ID'); + } +} + +function removeRunDependency(id) { + runDependencies--; + + Module['monitorRunDependencies']?.(runDependencies); + + if (id) { + assert(runDependencyTracking[id]); + delete runDependencyTracking[id]; + } else { + err('warning: run dependency removed without ID'); + } + if (runDependencies == 0) { + if (runDependencyWatcher !== null) { + clearInterval(runDependencyWatcher); + runDependencyWatcher = null; + } + if (dependenciesFulfilled) { + var callback = dependenciesFulfilled; + dependenciesFulfilled = null; + callback(); // can add another dependenciesFulfilled + } + } +} + +/** @param {string|number=} what */ +function abort(what) { + Module['onAbort']?.(what); + + what = 'Aborted(' + what + ')'; + // TODO(sbc): Should we remove printing and leave it up to whoever + // catches the exception? + err(what); + + ABORT = true; + + // Use a wasm runtime error, because a JS error might be seen as a foreign + // exception, which means we'd run destructors on it. We need the error to + // simply make the program stop. + // FIXME This approach does not work in Wasm EH because it currently does not assume + // all RuntimeErrors are from traps; it decides whether a RuntimeError is from + // a trap or not based on a hidden field within the object. So at the moment + // we don't have a way of throwing a wasm trap from JS. TODO Make a JS API that + // allows this in the wasm spec. + + // Suppress closure compiler warning here. Closure compiler's builtin extern + // definition for WebAssembly.RuntimeError claims it takes no arguments even + // though it can. + // TODO(https://github.com/google/closure-compiler/pull/3913): Remove if/when upstream closure gets fixed. + /** @suppress {checkTypes} */ + var e = new WebAssembly.RuntimeError(what); + + // Throw the error whether or not MODULARIZE is set because abort is used + // in code paths apart from instantiation where an exception is expected + // to be thrown when abort is called. + throw e; +} + +function createExportWrapper(name, nargs) { + return (...args) => { + assert(runtimeInitialized, `native function \`${name}\` called before runtime initialization`); + var f = wasmExports[name]; + assert(f, `exported native function \`${name}\` not found`); + // Only assert for too many arguments. Too few can be valid since the missing arguments will be zero filled. + assert(args.length <= nargs, `native function \`${name}\` called with ${args.length} args but expects ${nargs}`); + return f(...args); + }; +} + +var wasmBinaryFile; + +function findWasmBinary() { + return locateFile('zipcmp.wasm'); +} + +function getBinarySync(file) { + if (file == wasmBinaryFile && wasmBinary) { + return new Uint8Array(wasmBinary); + } + if (readBinary) { + return readBinary(file); + } + throw 'both async and sync fetching of the wasm failed'; +} + +async function getWasmBinary(binaryFile) { + // If we don't have the binary yet, load it asynchronously using readAsync. + if (!wasmBinary) { + // Fetch the binary using readAsync + try { + var response = await readAsync(binaryFile); + return new Uint8Array(response); + } catch { + // Fall back to getBinarySync below; + } + } + + // Otherwise, getBinarySync should be able to get it synchronously + return getBinarySync(binaryFile); +} + +async function instantiateArrayBuffer(binaryFile, imports) { + try { + var binary = await getWasmBinary(binaryFile); + var instance = await WebAssembly.instantiate(binary, imports); + return instance; + } catch (reason) { + err(`failed to asynchronously prepare wasm: ${reason}`); + + // Warn on some common problems. + if (isFileURI(wasmBinaryFile)) { + err(`warning: Loading from a file URI (${wasmBinaryFile}) is not supported in most browsers. See https://emscripten.org/docs/getting_started/FAQ.html#how-do-i-run-a-local-webserver-for-testing-why-does-my-program-stall-in-downloading-or-preparing`); + } + abort(reason); + } +} + +async function instantiateAsync(binary, binaryFile, imports) { + if (!binary && typeof WebAssembly.instantiateStreaming == 'function' + // Don't use streaming for file:// delivered objects in a webview, fetch them synchronously. + && !isFileURI(binaryFile) + // Avoid instantiateStreaming() on Node.js environment for now, as while + // Node.js v18.1.0 implements it, it does not have a full fetch() + // implementation yet. + // + // Reference: + // https://github.com/emscripten-core/emscripten/pull/16917 + && !ENVIRONMENT_IS_NODE + ) { + try { + var response = fetch(binaryFile, { credentials: 'same-origin' }); + var instantiationResult = await WebAssembly.instantiateStreaming(response, imports); + return instantiationResult; + } catch (reason) { + // We expect the most common failure cause to be a bad MIME type for the binary, + // in which case falling back to ArrayBuffer instantiation should work. + err(`wasm streaming compile failed: ${reason}`); + err('falling back to ArrayBuffer instantiation'); + // fall back of instantiateArrayBuffer below + }; + } + return instantiateArrayBuffer(binaryFile, imports); +} + +function getWasmImports() { + // prepare imports + return { + 'env': wasmImports, + 'wasi_snapshot_preview1': wasmImports, + } +} + +// Create the wasm instance. +// Receives the wasm imports, returns the exports. +async function createWasm() { + // Load the wasm module and create an instance of using native support in the JS engine. + // handle a generated wasm instance, receiving its exports and + // performing other necessary setup + /** @param {WebAssembly.Module=} module*/ + function receiveInstance(instance, module) { + wasmExports = instance.exports; + + + + wasmMemory = wasmExports['memory']; + + assert(wasmMemory, 'memory not found in wasm exports'); + updateMemoryViews(); + + removeRunDependency('wasm-instantiate'); + return wasmExports; + } + // wait for the pthread pool (if any) + addRunDependency('wasm-instantiate'); + + // Prefer streaming instantiation if available. + // Async compilation can be confusing when an error on the page overwrites Module + // (for example, if the order of elements is wrong, and the one defining Module is + // later), so we save Module and check it later. + var trueModule = Module; + function receiveInstantiationResult(result) { + // 'result' is a ResultObject object which has both the module and instance. + // receiveInstance() will swap in the exports (to Module.asm) so they can be called + assert(Module === trueModule, 'the Module object should not be replaced during async compilation - perhaps the order of HTML elements is wrong?'); + trueModule = null; + // TODO: Due to Closure regression https://github.com/google/closure-compiler/issues/3193, the above line no longer optimizes out down to the following line. + // When the regression is fixed, can restore the above PTHREADS-enabled path. + return receiveInstance(result['instance']); + } + + var info = getWasmImports(); + + // User shell pages can write their own Module.instantiateWasm = function(imports, successCallback) callback + // to manually instantiate the Wasm module themselves. This allows pages to + // run the instantiation parallel to any other async startup actions they are + // performing. + // Also pthreads and wasm workers initialize the wasm instance through this + // path. + if (Module['instantiateWasm']) { + return new Promise((resolve, reject) => { + try { + Module['instantiateWasm'](info, (mod, inst) => { + receiveInstance(mod, inst); + resolve(mod.exports); + }); + } catch(e) { + err(`Module.instantiateWasm callback failed with error: ${e}`); + reject(e); + } + }); + } + + wasmBinaryFile ??= findWasmBinary(); + var result = await instantiateAsync(wasmBinary, wasmBinaryFile, info); + var exports = receiveInstantiationResult(result); + return exports; +} + +// end include: preamble.js + +// Begin JS library code + + + class ExitStatus { + name = 'ExitStatus'; + constructor(status) { + this.message = `Program terminated with exit(${status})`; + this.status = status; + } + } + + var callRuntimeCallbacks = (callbacks) => { + while (callbacks.length > 0) { + // Pass the module as the first argument. + callbacks.shift()(Module); + } + }; + var onPostRuns = []; + var addOnPostRun = (cb) => onPostRuns.unshift(cb); + + var onPreRuns = []; + var addOnPreRun = (cb) => onPreRuns.unshift(cb); + + + + /** + * @param {number} ptr + * @param {string} type + */ + function getValue(ptr, type = 'i8') { + if (type.endsWith('*')) type = '*'; + switch (type) { + case 'i1': return HEAP8[ptr]; + case 'i8': return HEAP8[ptr]; + case 'i16': return HEAP16[((ptr)>>1)]; + case 'i32': return HEAP32[((ptr)>>2)]; + case 'i64': return HEAP64[((ptr)>>3)]; + case 'float': return HEAPF32[((ptr)>>2)]; + case 'double': return HEAPF64[((ptr)>>3)]; + case '*': return HEAPU32[((ptr)>>2)]; + default: abort(`invalid type for getValue: ${type}`); + } + } + + var noExitRuntime = Module['noExitRuntime'] || true; + + var ptrToString = (ptr) => { + assert(typeof ptr === 'number'); + // With CAN_ADDRESS_2GB or MEMORY64, pointers are already unsigned. + ptr >>>= 0; + return '0x' + ptr.toString(16).padStart(8, '0'); + }; + + + /** + * @param {number} ptr + * @param {number} value + * @param {string} type + */ + function setValue(ptr, value, type = 'i8') { + if (type.endsWith('*')) type = '*'; + switch (type) { + case 'i1': HEAP8[ptr] = value; break; + case 'i8': HEAP8[ptr] = value; break; + case 'i16': HEAP16[((ptr)>>1)] = value; break; + case 'i32': HEAP32[((ptr)>>2)] = value; break; + case 'i64': HEAP64[((ptr)>>3)] = BigInt(value); break; + case 'float': HEAPF32[((ptr)>>2)] = value; break; + case 'double': HEAPF64[((ptr)>>3)] = value; break; + case '*': HEAPU32[((ptr)>>2)] = value; break; + default: abort(`invalid type for setValue: ${type}`); + } + } + + var stackRestore = (val) => __emscripten_stack_restore(val); + + var stackSave = () => _emscripten_stack_get_current(); + + var warnOnce = (text) => { + warnOnce.shown ||= {}; + if (!warnOnce.shown[text]) { + warnOnce.shown[text] = 1; + if (ENVIRONMENT_IS_NODE) text = 'warning: ' + text; + err(text); + } + }; + + var PATH = { + isAbs:(path) => path.charAt(0) === '/', + splitPath:(filename) => { + var splitPathRe = /^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/; + return splitPathRe.exec(filename).slice(1); + }, + normalizeArray:(parts, allowAboveRoot) => { + // if the path tries to go above the root, `up` ends up > 0 + var up = 0; + for (var i = parts.length - 1; i >= 0; i--) { + var last = parts[i]; + if (last === '.') { + parts.splice(i, 1); + } else if (last === '..') { + parts.splice(i, 1); + up++; + } else if (up) { + parts.splice(i, 1); + up--; + } + } + // if the path is allowed to go above the root, restore leading ..s + if (allowAboveRoot) { + for (; up; up--) { + parts.unshift('..'); + } + } + return parts; + }, + normalize:(path) => { + var isAbsolute = PATH.isAbs(path), + trailingSlash = path.slice(-1) === '/'; + // Normalize the path + path = PATH.normalizeArray(path.split('/').filter((p) => !!p), !isAbsolute).join('/'); + if (!path && !isAbsolute) { + path = '.'; + } + if (path && trailingSlash) { + path += '/'; + } + return (isAbsolute ? '/' : '') + path; + }, + dirname:(path) => { + var result = PATH.splitPath(path), + root = result[0], + dir = result[1]; + if (!root && !dir) { + // No dirname whatsoever + return '.'; + } + if (dir) { + // It has a dirname, strip trailing slash + dir = dir.slice(0, -1); + } + return root + dir; + }, + basename:(path) => path && path.match(/([^\/]+|\/)\/*$/)[1], + join:(...paths) => PATH.normalize(paths.join('/')), + join2:(l, r) => PATH.normalize(l + '/' + r), + }; + + var initRandomFill = () => { + // This block is not needed on v19+ since crypto.getRandomValues is builtin + if (ENVIRONMENT_IS_NODE) { + var nodeCrypto = require('crypto'); + return (view) => nodeCrypto.randomFillSync(view); + } + + return (view) => crypto.getRandomValues(view); + }; + var randomFill = (view) => { + // Lazily init on the first invocation. + (randomFill = initRandomFill())(view); + }; + + + + var PATH_FS = { + resolve:(...args) => { + var resolvedPath = '', + resolvedAbsolute = false; + for (var i = args.length - 1; i >= -1 && !resolvedAbsolute; i--) { + var path = (i >= 0) ? args[i] : FS.cwd(); + // Skip empty and invalid entries + if (typeof path != 'string') { + throw new TypeError('Arguments to path.resolve must be strings'); + } else if (!path) { + return ''; // an invalid portion invalidates the whole thing + } + resolvedPath = path + '/' + resolvedPath; + resolvedAbsolute = PATH.isAbs(path); + } + // At this point the path should be resolved to a full absolute path, but + // handle relative paths to be safe (might happen when process.cwd() fails) + resolvedPath = PATH.normalizeArray(resolvedPath.split('/').filter((p) => !!p), !resolvedAbsolute).join('/'); + return ((resolvedAbsolute ? '/' : '') + resolvedPath) || '.'; + }, + relative:(from, to) => { + from = PATH_FS.resolve(from).slice(1); + to = PATH_FS.resolve(to).slice(1); + function trim(arr) { + var start = 0; + for (; start < arr.length; start++) { + if (arr[start] !== '') break; + } + var end = arr.length - 1; + for (; end >= 0; end--) { + if (arr[end] !== '') break; + } + if (start > end) return []; + return arr.slice(start, end - start + 1); + } + var fromParts = trim(from.split('/')); + var toParts = trim(to.split('/')); + var length = Math.min(fromParts.length, toParts.length); + var samePartsLength = length; + for (var i = 0; i < length; i++) { + if (fromParts[i] !== toParts[i]) { + samePartsLength = i; + break; + } + } + var outputParts = []; + for (var i = samePartsLength; i < fromParts.length; i++) { + outputParts.push('..'); + } + outputParts = outputParts.concat(toParts.slice(samePartsLength)); + return outputParts.join('/'); + }, + }; + + + var UTF8Decoder = typeof TextDecoder != 'undefined' ? new TextDecoder() : undefined; + + /** + * Given a pointer 'idx' to a null-terminated UTF8-encoded string in the given + * array that contains uint8 values, returns a copy of that string as a + * Javascript String object. + * heapOrArray is either a regular array, or a JavaScript typed array view. + * @param {number=} idx + * @param {number=} maxBytesToRead + * @return {string} + */ + var UTF8ArrayToString = (heapOrArray, idx = 0, maxBytesToRead = NaN) => { + var endIdx = idx + maxBytesToRead; + var endPtr = idx; + // TextDecoder needs to know the byte length in advance, it doesn't stop on + // null terminator by itself. Also, use the length info to avoid running tiny + // strings through TextDecoder, since .subarray() allocates garbage. + // (As a tiny code save trick, compare endPtr against endIdx using a negation, + // so that undefined/NaN means Infinity) + while (heapOrArray[endPtr] && !(endPtr >= endIdx)) ++endPtr; + + if (endPtr - idx > 16 && heapOrArray.buffer && UTF8Decoder) { + return UTF8Decoder.decode(heapOrArray.subarray(idx, endPtr)); + } + var str = ''; + // If building with TextDecoder, we have already computed the string length + // above, so test loop end condition against that + while (idx < endPtr) { + // For UTF8 byte structure, see: + // http://en.wikipedia.org/wiki/UTF-8#Description + // https://www.ietf.org/rfc/rfc2279.txt + // https://tools.ietf.org/html/rfc3629 + var u0 = heapOrArray[idx++]; + if (!(u0 & 0x80)) { str += String.fromCharCode(u0); continue; } + var u1 = heapOrArray[idx++] & 63; + if ((u0 & 0xE0) == 0xC0) { str += String.fromCharCode(((u0 & 31) << 6) | u1); continue; } + var u2 = heapOrArray[idx++] & 63; + if ((u0 & 0xF0) == 0xE0) { + u0 = ((u0 & 15) << 12) | (u1 << 6) | u2; + } else { + if ((u0 & 0xF8) != 0xF0) warnOnce('Invalid UTF-8 leading byte ' + ptrToString(u0) + ' encountered when deserializing a UTF-8 string in wasm memory to a JS string!'); + u0 = ((u0 & 7) << 18) | (u1 << 12) | (u2 << 6) | (heapOrArray[idx++] & 63); + } + + if (u0 < 0x10000) { + str += String.fromCharCode(u0); + } else { + var ch = u0 - 0x10000; + str += String.fromCharCode(0xD800 | (ch >> 10), 0xDC00 | (ch & 0x3FF)); + } + } + return str; + }; + + var FS_stdin_getChar_buffer = []; + + var lengthBytesUTF8 = (str) => { + var len = 0; + for (var i = 0; i < str.length; ++i) { + // Gotcha: charCodeAt returns a 16-bit word that is a UTF-16 encoded code + // unit, not a Unicode code point of the character! So decode + // UTF16->UTF32->UTF8. + // See http://unicode.org/faq/utf_bom.html#utf16-3 + var c = str.charCodeAt(i); // possibly a lead surrogate + if (c <= 0x7F) { + len++; + } else if (c <= 0x7FF) { + len += 2; + } else if (c >= 0xD800 && c <= 0xDFFF) { + len += 4; ++i; + } else { + len += 3; + } + } + return len; + }; + + var stringToUTF8Array = (str, heap, outIdx, maxBytesToWrite) => { + assert(typeof str === 'string', `stringToUTF8Array expects a string (got ${typeof str})`); + // Parameter maxBytesToWrite is not optional. Negative values, 0, null, + // undefined and false each don't write out any bytes. + if (!(maxBytesToWrite > 0)) + return 0; + + var startIdx = outIdx; + var endIdx = outIdx + maxBytesToWrite - 1; // -1 for string null terminator. + for (var i = 0; i < str.length; ++i) { + // Gotcha: charCodeAt returns a 16-bit word that is a UTF-16 encoded code + // unit, not a Unicode code point of the character! So decode + // UTF16->UTF32->UTF8. + // See http://unicode.org/faq/utf_bom.html#utf16-3 + // For UTF8 byte structure, see http://en.wikipedia.org/wiki/UTF-8#Description + // and https://www.ietf.org/rfc/rfc2279.txt + // and https://tools.ietf.org/html/rfc3629 + var u = str.charCodeAt(i); // possibly a lead surrogate + if (u >= 0xD800 && u <= 0xDFFF) { + var u1 = str.charCodeAt(++i); + u = 0x10000 + ((u & 0x3FF) << 10) | (u1 & 0x3FF); + } + if (u <= 0x7F) { + if (outIdx >= endIdx) break; + heap[outIdx++] = u; + } else if (u <= 0x7FF) { + if (outIdx + 1 >= endIdx) break; + heap[outIdx++] = 0xC0 | (u >> 6); + heap[outIdx++] = 0x80 | (u & 63); + } else if (u <= 0xFFFF) { + if (outIdx + 2 >= endIdx) break; + heap[outIdx++] = 0xE0 | (u >> 12); + heap[outIdx++] = 0x80 | ((u >> 6) & 63); + heap[outIdx++] = 0x80 | (u & 63); + } else { + if (outIdx + 3 >= endIdx) break; + if (u > 0x10FFFF) warnOnce('Invalid Unicode code point ' + ptrToString(u) + ' encountered when serializing a JS string to a UTF-8 string in wasm memory! (Valid unicode code points should be in range 0-0x10FFFF).'); + heap[outIdx++] = 0xF0 | (u >> 18); + heap[outIdx++] = 0x80 | ((u >> 12) & 63); + heap[outIdx++] = 0x80 | ((u >> 6) & 63); + heap[outIdx++] = 0x80 | (u & 63); + } + } + // Null-terminate the pointer to the buffer. + heap[outIdx] = 0; + return outIdx - startIdx; + }; + /** @type {function(string, boolean=, number=)} */ + var intArrayFromString = (stringy, dontAddNull, length) => { + var len = length > 0 ? length : lengthBytesUTF8(stringy)+1; + var u8array = new Array(len); + var numBytesWritten = stringToUTF8Array(stringy, u8array, 0, u8array.length); + if (dontAddNull) u8array.length = numBytesWritten; + return u8array; + }; + var FS_stdin_getChar = () => { + if (!FS_stdin_getChar_buffer.length) { + var result = null; + if (ENVIRONMENT_IS_NODE) { + // we will read data by chunks of BUFSIZE + var BUFSIZE = 256; + var buf = Buffer.alloc(BUFSIZE); + var bytesRead = 0; + + // For some reason we must suppress a closure warning here, even though + // fd definitely exists on process.stdin, and is even the proper way to + // get the fd of stdin, + // https://github.com/nodejs/help/issues/2136#issuecomment-523649904 + // This started to happen after moving this logic out of library_tty.js, + // so it is related to the surrounding code in some unclear manner. + /** @suppress {missingProperties} */ + var fd = process.stdin.fd; + + try { + bytesRead = fs.readSync(fd, buf, 0, BUFSIZE); + } catch(e) { + // Cross-platform differences: on Windows, reading EOF throws an + // exception, but on other OSes, reading EOF returns 0. Uniformize + // behavior by treating the EOF exception to return 0. + if (e.toString().includes('EOF')) bytesRead = 0; + else throw e; + } + + if (bytesRead > 0) { + result = buf.slice(0, bytesRead).toString('utf-8'); + } + } else + if (typeof window != 'undefined' && + typeof window.prompt == 'function') { + // Browser. + result = window.prompt('Input: '); // returns null on cancel + if (result !== null) { + result += '\n'; + } + } else + {} + if (!result) { + return null; + } + FS_stdin_getChar_buffer = intArrayFromString(result, true); + } + return FS_stdin_getChar_buffer.shift(); + }; + var TTY = { + ttys:[], + init() { + // https://github.com/emscripten-core/emscripten/pull/1555 + // if (ENVIRONMENT_IS_NODE) { + // // currently, FS.init does not distinguish if process.stdin is a file or TTY + // // device, it always assumes it's a TTY device. because of this, we're forcing + // // process.stdin to UTF8 encoding to at least make stdin reading compatible + // // with text files until FS.init can be refactored. + // process.stdin.setEncoding('utf8'); + // } + }, + shutdown() { + // https://github.com/emscripten-core/emscripten/pull/1555 + // if (ENVIRONMENT_IS_NODE) { + // // inolen: any idea as to why node -e 'process.stdin.read()' wouldn't exit immediately (with process.stdin being a tty)? + // // isaacs: because now it's reading from the stream, you've expressed interest in it, so that read() kicks off a _read() which creates a ReadReq operation + // // inolen: I thought read() in that case was a synchronous operation that just grabbed some amount of buffered data if it exists? + // // isaacs: it is. but it also triggers a _read() call, which calls readStart() on the handle + // // isaacs: do process.stdin.pause() and i'd think it'd probably close the pending call + // process.stdin.pause(); + // } + }, + register(dev, ops) { + TTY.ttys[dev] = { input: [], output: [], ops: ops }; + FS.registerDevice(dev, TTY.stream_ops); + }, + stream_ops:{ + open(stream) { + var tty = TTY.ttys[stream.node.rdev]; + if (!tty) { + throw new FS.ErrnoError(43); + } + stream.tty = tty; + stream.seekable = false; + }, + close(stream) { + // flush any pending line data + stream.tty.ops.fsync(stream.tty); + }, + fsync(stream) { + stream.tty.ops.fsync(stream.tty); + }, + read(stream, buffer, offset, length, pos /* ignored */) { + if (!stream.tty || !stream.tty.ops.get_char) { + throw new FS.ErrnoError(60); + } + var bytesRead = 0; + for (var i = 0; i < length; i++) { + var result; + try { + result = stream.tty.ops.get_char(stream.tty); + } catch (e) { + throw new FS.ErrnoError(29); + } + if (result === undefined && bytesRead === 0) { + throw new FS.ErrnoError(6); + } + if (result === null || result === undefined) break; + bytesRead++; + buffer[offset+i] = result; + } + if (bytesRead) { + stream.node.atime = Date.now(); + } + return bytesRead; + }, + write(stream, buffer, offset, length, pos) { + if (!stream.tty || !stream.tty.ops.put_char) { + throw new FS.ErrnoError(60); + } + try { + for (var i = 0; i < length; i++) { + stream.tty.ops.put_char(stream.tty, buffer[offset+i]); + } + } catch (e) { + throw new FS.ErrnoError(29); + } + if (length) { + stream.node.mtime = stream.node.ctime = Date.now(); + } + return i; + }, + }, + default_tty_ops:{ + get_char(tty) { + return FS_stdin_getChar(); + }, + put_char(tty, val) { + if (val === null || val === 10) { + out(UTF8ArrayToString(tty.output)); + tty.output = []; + } else { + if (val != 0) tty.output.push(val); // val == 0 would cut text output off in the middle. + } + }, + fsync(tty) { + if (tty.output?.length > 0) { + out(UTF8ArrayToString(tty.output)); + tty.output = []; + } + }, + ioctl_tcgets(tty) { + // typical setting + return { + c_iflag: 25856, + c_oflag: 5, + c_cflag: 191, + c_lflag: 35387, + c_cc: [ + 0x03, 0x1c, 0x7f, 0x15, 0x04, 0x00, 0x01, 0x00, 0x11, 0x13, 0x1a, 0x00, + 0x12, 0x0f, 0x17, 0x16, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + ] + }; + }, + ioctl_tcsets(tty, optional_actions, data) { + // currently just ignore + return 0; + }, + ioctl_tiocgwinsz(tty) { + return [24, 80]; + }, + }, + default_tty1_ops:{ + put_char(tty, val) { + if (val === null || val === 10) { + err(UTF8ArrayToString(tty.output)); + tty.output = []; + } else { + if (val != 0) tty.output.push(val); + } + }, + fsync(tty) { + if (tty.output?.length > 0) { + err(UTF8ArrayToString(tty.output)); + tty.output = []; + } + }, + }, + }; + + + var mmapAlloc = (size) => { + abort('internal error: mmapAlloc called but `emscripten_builtin_memalign` native symbol not exported'); + }; + var MEMFS = { + ops_table:null, + mount(mount) { + return MEMFS.createNode(null, '/', 16895, 0); + }, + createNode(parent, name, mode, dev) { + if (FS.isBlkdev(mode) || FS.isFIFO(mode)) { + // no supported + throw new FS.ErrnoError(63); + } + MEMFS.ops_table ||= { + dir: { + node: { + getattr: MEMFS.node_ops.getattr, + setattr: MEMFS.node_ops.setattr, + lookup: MEMFS.node_ops.lookup, + mknod: MEMFS.node_ops.mknod, + rename: MEMFS.node_ops.rename, + unlink: MEMFS.node_ops.unlink, + rmdir: MEMFS.node_ops.rmdir, + readdir: MEMFS.node_ops.readdir, + symlink: MEMFS.node_ops.symlink + }, + stream: { + llseek: MEMFS.stream_ops.llseek + } + }, + file: { + node: { + getattr: MEMFS.node_ops.getattr, + setattr: MEMFS.node_ops.setattr + }, + stream: { + llseek: MEMFS.stream_ops.llseek, + read: MEMFS.stream_ops.read, + write: MEMFS.stream_ops.write, + mmap: MEMFS.stream_ops.mmap, + msync: MEMFS.stream_ops.msync + } + }, + link: { + node: { + getattr: MEMFS.node_ops.getattr, + setattr: MEMFS.node_ops.setattr, + readlink: MEMFS.node_ops.readlink + }, + stream: {} + }, + chrdev: { + node: { + getattr: MEMFS.node_ops.getattr, + setattr: MEMFS.node_ops.setattr + }, + stream: FS.chrdev_stream_ops + } + }; + var node = FS.createNode(parent, name, mode, dev); + if (FS.isDir(node.mode)) { + node.node_ops = MEMFS.ops_table.dir.node; + node.stream_ops = MEMFS.ops_table.dir.stream; + node.contents = {}; + } else if (FS.isFile(node.mode)) { + node.node_ops = MEMFS.ops_table.file.node; + node.stream_ops = MEMFS.ops_table.file.stream; + node.usedBytes = 0; // The actual number of bytes used in the typed array, as opposed to contents.length which gives the whole capacity. + // When the byte data of the file is populated, this will point to either a typed array, or a normal JS array. Typed arrays are preferred + // for performance, and used by default. However, typed arrays are not resizable like normal JS arrays are, so there is a small disk size + // penalty involved for appending file writes that continuously grow a file similar to std::vector capacity vs used -scheme. + node.contents = null; + } else if (FS.isLink(node.mode)) { + node.node_ops = MEMFS.ops_table.link.node; + node.stream_ops = MEMFS.ops_table.link.stream; + } else if (FS.isChrdev(node.mode)) { + node.node_ops = MEMFS.ops_table.chrdev.node; + node.stream_ops = MEMFS.ops_table.chrdev.stream; + } + node.atime = node.mtime = node.ctime = Date.now(); + // add the new node to the parent + if (parent) { + parent.contents[name] = node; + parent.atime = parent.mtime = parent.ctime = node.atime; + } + return node; + }, + getFileDataAsTypedArray(node) { + if (!node.contents) return new Uint8Array(0); + if (node.contents.subarray) return node.contents.subarray(0, node.usedBytes); // Make sure to not return excess unused bytes. + return new Uint8Array(node.contents); + }, + expandFileStorage(node, newCapacity) { + var prevCapacity = node.contents ? node.contents.length : 0; + if (prevCapacity >= newCapacity) return; // No need to expand, the storage was already large enough. + // Don't expand strictly to the given requested limit if it's only a very small increase, but instead geometrically grow capacity. + // For small filesizes (<1MB), perform size*2 geometric increase, but for large sizes, do a much more conservative size*1.125 increase to + // avoid overshooting the allocation cap by a very large margin. + var CAPACITY_DOUBLING_MAX = 1024 * 1024; + newCapacity = Math.max(newCapacity, (prevCapacity * (prevCapacity < CAPACITY_DOUBLING_MAX ? 2.0 : 1.125)) >>> 0); + if (prevCapacity != 0) newCapacity = Math.max(newCapacity, 256); // At minimum allocate 256b for each file when expanding. + var oldContents = node.contents; + node.contents = new Uint8Array(newCapacity); // Allocate new storage. + if (node.usedBytes > 0) node.contents.set(oldContents.subarray(0, node.usedBytes), 0); // Copy old data over to the new storage. + }, + resizeFileStorage(node, newSize) { + if (node.usedBytes == newSize) return; + if (newSize == 0) { + node.contents = null; // Fully decommit when requesting a resize to zero. + node.usedBytes = 0; + } else { + var oldContents = node.contents; + node.contents = new Uint8Array(newSize); // Allocate new storage. + if (oldContents) { + node.contents.set(oldContents.subarray(0, Math.min(newSize, node.usedBytes))); // Copy old data over to the new storage. + } + node.usedBytes = newSize; + } + }, + node_ops:{ + getattr(node) { + var attr = {}; + // device numbers reuse inode numbers. + attr.dev = FS.isChrdev(node.mode) ? node.id : 1; + attr.ino = node.id; + attr.mode = node.mode; + attr.nlink = 1; + attr.uid = 0; + attr.gid = 0; + attr.rdev = node.rdev; + if (FS.isDir(node.mode)) { + attr.size = 4096; + } else if (FS.isFile(node.mode)) { + attr.size = node.usedBytes; + } else if (FS.isLink(node.mode)) { + attr.size = node.link.length; + } else { + attr.size = 0; + } + attr.atime = new Date(node.atime); + attr.mtime = new Date(node.mtime); + attr.ctime = new Date(node.ctime); + // NOTE: In our implementation, st_blocks = Math.ceil(st_size/st_blksize), + // but this is not required by the standard. + attr.blksize = 4096; + attr.blocks = Math.ceil(attr.size / attr.blksize); + return attr; + }, + setattr(node, attr) { + for (const key of ["mode", "atime", "mtime", "ctime"]) { + if (attr[key] != null) { + node[key] = attr[key]; + } + } + if (attr.size !== undefined) { + MEMFS.resizeFileStorage(node, attr.size); + } + }, + lookup(parent, name) { + throw new FS.ErrnoError(44); + }, + mknod(parent, name, mode, dev) { + return MEMFS.createNode(parent, name, mode, dev); + }, + rename(old_node, new_dir, new_name) { + var new_node; + try { + new_node = FS.lookupNode(new_dir, new_name); + } catch (e) {} + if (new_node) { + if (FS.isDir(old_node.mode)) { + // if we're overwriting a directory at new_name, make sure it's empty. + for (var i in new_node.contents) { + throw new FS.ErrnoError(55); + } + } + FS.hashRemoveNode(new_node); + } + // do the internal rewiring + delete old_node.parent.contents[old_node.name]; + new_dir.contents[new_name] = old_node; + old_node.name = new_name; + new_dir.ctime = new_dir.mtime = old_node.parent.ctime = old_node.parent.mtime = Date.now(); + }, + unlink(parent, name) { + delete parent.contents[name]; + parent.ctime = parent.mtime = Date.now(); + }, + rmdir(parent, name) { + var node = FS.lookupNode(parent, name); + for (var i in node.contents) { + throw new FS.ErrnoError(55); + } + delete parent.contents[name]; + parent.ctime = parent.mtime = Date.now(); + }, + readdir(node) { + return ['.', '..', ...Object.keys(node.contents)]; + }, + symlink(parent, newname, oldpath) { + var node = MEMFS.createNode(parent, newname, 0o777 | 40960, 0); + node.link = oldpath; + return node; + }, + readlink(node) { + if (!FS.isLink(node.mode)) { + throw new FS.ErrnoError(28); + } + return node.link; + }, + }, + stream_ops:{ + read(stream, buffer, offset, length, position) { + var contents = stream.node.contents; + if (position >= stream.node.usedBytes) return 0; + var size = Math.min(stream.node.usedBytes - position, length); + assert(size >= 0); + if (size > 8 && contents.subarray) { // non-trivial, and typed array + buffer.set(contents.subarray(position, position + size), offset); + } else { + for (var i = 0; i < size; i++) buffer[offset + i] = contents[position + i]; + } + return size; + }, + write(stream, buffer, offset, length, position, canOwn) { + // The data buffer should be a typed array view + assert(!(buffer instanceof ArrayBuffer)); + + if (!length) return 0; + var node = stream.node; + node.mtime = node.ctime = Date.now(); + + if (buffer.subarray && (!node.contents || node.contents.subarray)) { // This write is from a typed array to a typed array? + if (canOwn) { + assert(position === 0, 'canOwn must imply no weird position inside the file'); + node.contents = buffer.subarray(offset, offset + length); + node.usedBytes = length; + return length; + } else if (node.usedBytes === 0 && position === 0) { // If this is a simple first write to an empty file, do a fast set since we don't need to care about old data. + node.contents = buffer.slice(offset, offset + length); + node.usedBytes = length; + return length; + } else if (position + length <= node.usedBytes) { // Writing to an already allocated and used subrange of the file? + node.contents.set(buffer.subarray(offset, offset + length), position); + return length; + } + } + + // Appending to an existing file and we need to reallocate, or source data did not come as a typed array. + MEMFS.expandFileStorage(node, position+length); + if (node.contents.subarray && buffer.subarray) { + // Use typed array write which is available. + node.contents.set(buffer.subarray(offset, offset + length), position); + } else { + for (var i = 0; i < length; i++) { + node.contents[position + i] = buffer[offset + i]; // Or fall back to manual write if not. + } + } + node.usedBytes = Math.max(node.usedBytes, position + length); + return length; + }, + llseek(stream, offset, whence) { + var position = offset; + if (whence === 1) { + position += stream.position; + } else if (whence === 2) { + if (FS.isFile(stream.node.mode)) { + position += stream.node.usedBytes; + } + } + if (position < 0) { + throw new FS.ErrnoError(28); + } + return position; + }, + mmap(stream, length, position, prot, flags) { + if (!FS.isFile(stream.node.mode)) { + throw new FS.ErrnoError(43); + } + var ptr; + var allocated; + var contents = stream.node.contents; + // Only make a new copy when MAP_PRIVATE is specified. + if (!(flags & 2) && contents && contents.buffer === HEAP8.buffer) { + // We can't emulate MAP_SHARED when the file is not backed by the + // buffer we're mapping to (e.g. the HEAP buffer). + allocated = false; + ptr = contents.byteOffset; + } else { + allocated = true; + ptr = mmapAlloc(length); + if (!ptr) { + throw new FS.ErrnoError(48); + } + if (contents) { + // Try to avoid unnecessary slices. + if (position > 0 || position + length < contents.length) { + if (contents.subarray) { + contents = contents.subarray(position, position + length); + } else { + contents = Array.prototype.slice.call(contents, position, position + length); + } + } + HEAP8.set(contents, ptr); + } + } + return { ptr, allocated }; + }, + msync(stream, buffer, offset, length, mmapFlags) { + MEMFS.stream_ops.write(stream, buffer, 0, length, offset, false); + // should we check if bytesWritten and length are the same? + return 0; + }, + }, + }; + + var asyncLoad = async (url) => { + var arrayBuffer = await readAsync(url); + assert(arrayBuffer, `Loading data file "${url}" failed (no arrayBuffer).`); + return new Uint8Array(arrayBuffer); + }; + + + var FS_createDataFile = (parent, name, fileData, canRead, canWrite, canOwn) => { + FS.createDataFile(parent, name, fileData, canRead, canWrite, canOwn); + }; + + var preloadPlugins = Module['preloadPlugins'] || []; + var FS_handledByPreloadPlugin = (byteArray, fullname, finish, onerror) => { + // Ensure plugins are ready. + if (typeof Browser != 'undefined') Browser.init(); + + var handled = false; + preloadPlugins.forEach((plugin) => { + if (handled) return; + if (plugin['canHandle'](fullname)) { + plugin['handle'](byteArray, fullname, finish, onerror); + handled = true; + } + }); + return handled; + }; + var FS_createPreloadedFile = (parent, name, url, canRead, canWrite, onload, onerror, dontCreateFile, canOwn, preFinish) => { + // TODO we should allow people to just pass in a complete filename instead + // of parent and name being that we just join them anyways + var fullname = name ? PATH_FS.resolve(PATH.join2(parent, name)) : parent; + var dep = getUniqueRunDependency(`cp ${fullname}`); // might have several active requests for the same fullname + function processData(byteArray) { + function finish(byteArray) { + preFinish?.(); + if (!dontCreateFile) { + FS_createDataFile(parent, name, byteArray, canRead, canWrite, canOwn); + } + onload?.(); + removeRunDependency(dep); + } + if (FS_handledByPreloadPlugin(byteArray, fullname, finish, () => { + onerror?.(); + removeRunDependency(dep); + })) { + return; + } + finish(byteArray); + } + addRunDependency(dep); + if (typeof url == 'string') { + asyncLoad(url).then(processData, onerror); + } else { + processData(url); + } + }; + + var FS_modeStringToFlags = (str) => { + var flagModes = { + 'r': 0, + 'r+': 2, + 'w': 512 | 64 | 1, + 'w+': 512 | 64 | 2, + 'a': 1024 | 64 | 1, + 'a+': 1024 | 64 | 2, + }; + var flags = flagModes[str]; + if (typeof flags == 'undefined') { + throw new Error(`Unknown file open mode: ${str}`); + } + return flags; + }; + + var FS_getMode = (canRead, canWrite) => { + var mode = 0; + if (canRead) mode |= 292 | 73; + if (canWrite) mode |= 146; + return mode; + }; + + + + + + + /** + * Given a pointer 'ptr' to a null-terminated UTF8-encoded string in the + * emscripten HEAP, returns a copy of that string as a Javascript String object. + * + * @param {number} ptr + * @param {number=} maxBytesToRead - An optional length that specifies the + * maximum number of bytes to read. You can omit this parameter to scan the + * string until the first 0 byte. If maxBytesToRead is passed, and the string + * at [ptr, ptr+maxBytesToReadr[ contains a null byte in the middle, then the + * string will cut short at that byte index (i.e. maxBytesToRead will not + * produce a string of exact length [ptr, ptr+maxBytesToRead[) N.B. mixing + * frequent uses of UTF8ToString() with and without maxBytesToRead may throw + * JS JIT optimizations off, so it is worth to consider consistently using one + * @return {string} + */ + var UTF8ToString = (ptr, maxBytesToRead) => { + assert(typeof ptr == 'number', `UTF8ToString expects a number (got ${typeof ptr})`); + return ptr ? UTF8ArrayToString(HEAPU8, ptr, maxBytesToRead) : ''; + }; + + var strError = (errno) => UTF8ToString(_strerror(errno)); + + var ERRNO_CODES = { + 'EPERM': 63, + 'ENOENT': 44, + 'ESRCH': 71, + 'EINTR': 27, + 'EIO': 29, + 'ENXIO': 60, + 'E2BIG': 1, + 'ENOEXEC': 45, + 'EBADF': 8, + 'ECHILD': 12, + 'EAGAIN': 6, + 'EWOULDBLOCK': 6, + 'ENOMEM': 48, + 'EACCES': 2, + 'EFAULT': 21, + 'ENOTBLK': 105, + 'EBUSY': 10, + 'EEXIST': 20, + 'EXDEV': 75, + 'ENODEV': 43, + 'ENOTDIR': 54, + 'EISDIR': 31, + 'EINVAL': 28, + 'ENFILE': 41, + 'EMFILE': 33, + 'ENOTTY': 59, + 'ETXTBSY': 74, + 'EFBIG': 22, + 'ENOSPC': 51, + 'ESPIPE': 70, + 'EROFS': 69, + 'EMLINK': 34, + 'EPIPE': 64, + 'EDOM': 18, + 'ERANGE': 68, + 'ENOMSG': 49, + 'EIDRM': 24, + 'ECHRNG': 106, + 'EL2NSYNC': 156, + 'EL3HLT': 107, + 'EL3RST': 108, + 'ELNRNG': 109, + 'EUNATCH': 110, + 'ENOCSI': 111, + 'EL2HLT': 112, + 'EDEADLK': 16, + 'ENOLCK': 46, + 'EBADE': 113, + 'EBADR': 114, + 'EXFULL': 115, + 'ENOANO': 104, + 'EBADRQC': 103, + 'EBADSLT': 102, + 'EDEADLOCK': 16, + 'EBFONT': 101, + 'ENOSTR': 100, + 'ENODATA': 116, + 'ETIME': 117, + 'ENOSR': 118, + 'ENONET': 119, + 'ENOPKG': 120, + 'EREMOTE': 121, + 'ENOLINK': 47, + 'EADV': 122, + 'ESRMNT': 123, + 'ECOMM': 124, + 'EPROTO': 65, + 'EMULTIHOP': 36, + 'EDOTDOT': 125, + 'EBADMSG': 9, + 'ENOTUNIQ': 126, + 'EBADFD': 127, + 'EREMCHG': 128, + 'ELIBACC': 129, + 'ELIBBAD': 130, + 'ELIBSCN': 131, + 'ELIBMAX': 132, + 'ELIBEXEC': 133, + 'ENOSYS': 52, + 'ENOTEMPTY': 55, + 'ENAMETOOLONG': 37, + 'ELOOP': 32, + 'EOPNOTSUPP': 138, + 'EPFNOSUPPORT': 139, + 'ECONNRESET': 15, + 'ENOBUFS': 42, + 'EAFNOSUPPORT': 5, + 'EPROTOTYPE': 67, + 'ENOTSOCK': 57, + 'ENOPROTOOPT': 50, + 'ESHUTDOWN': 140, + 'ECONNREFUSED': 14, + 'EADDRINUSE': 3, + 'ECONNABORTED': 13, + 'ENETUNREACH': 40, + 'ENETDOWN': 38, + 'ETIMEDOUT': 73, + 'EHOSTDOWN': 142, + 'EHOSTUNREACH': 23, + 'EINPROGRESS': 26, + 'EALREADY': 7, + 'EDESTADDRREQ': 17, + 'EMSGSIZE': 35, + 'EPROTONOSUPPORT': 66, + 'ESOCKTNOSUPPORT': 137, + 'EADDRNOTAVAIL': 4, + 'ENETRESET': 39, + 'EISCONN': 30, + 'ENOTCONN': 53, + 'ETOOMANYREFS': 141, + 'EUSERS': 136, + 'EDQUOT': 19, + 'ESTALE': 72, + 'ENOTSUP': 138, + 'ENOMEDIUM': 148, + 'EILSEQ': 25, + 'EOVERFLOW': 61, + 'ECANCELED': 11, + 'ENOTRECOVERABLE': 56, + 'EOWNERDEAD': 62, + 'ESTRPIPE': 135, + }; + var FS = { + root:null, + mounts:[], + devices:{ + }, + streams:[], + nextInode:1, + nameTable:null, + currentPath:"/", + initialized:false, + ignorePermissions:true, + filesystems:null, + syncFSRequests:0, + readFiles:{ + }, + ErrnoError:class extends Error { + name = 'ErrnoError'; + // We set the `name` property to be able to identify `FS.ErrnoError` + // - the `name` is a standard ECMA-262 property of error objects. Kind of good to have it anyway. + // - when using PROXYFS, an error can come from an underlying FS + // as different FS objects have their own FS.ErrnoError each, + // the test `err instanceof FS.ErrnoError` won't detect an error coming from another filesystem, causing bugs. + // we'll use the reliable test `err.name == "ErrnoError"` instead + constructor(errno) { + super(runtimeInitialized ? strError(errno) : ''); + this.errno = errno; + for (var key in ERRNO_CODES) { + if (ERRNO_CODES[key] === errno) { + this.code = key; + break; + } + } + } + }, + FSStream:class { + shared = {}; + get object() { + return this.node; + } + set object(val) { + this.node = val; + } + get isRead() { + return (this.flags & 2097155) !== 1; + } + get isWrite() { + return (this.flags & 2097155) !== 0; + } + get isAppend() { + return (this.flags & 1024); + } + get flags() { + return this.shared.flags; + } + set flags(val) { + this.shared.flags = val; + } + get position() { + return this.shared.position; + } + set position(val) { + this.shared.position = val; + } + }, + FSNode:class { + node_ops = {}; + stream_ops = {}; + readMode = 292 | 73; + writeMode = 146; + mounted = null; + constructor(parent, name, mode, rdev) { + if (!parent) { + parent = this; // root node sets parent to itself + } + this.parent = parent; + this.mount = parent.mount; + this.id = FS.nextInode++; + this.name = name; + this.mode = mode; + this.rdev = rdev; + this.atime = this.mtime = this.ctime = Date.now(); + } + get read() { + return (this.mode & this.readMode) === this.readMode; + } + set read(val) { + val ? this.mode |= this.readMode : this.mode &= ~this.readMode; + } + get write() { + return (this.mode & this.writeMode) === this.writeMode; + } + set write(val) { + val ? this.mode |= this.writeMode : this.mode &= ~this.writeMode; + } + get isFolder() { + return FS.isDir(this.mode); + } + get isDevice() { + return FS.isChrdev(this.mode); + } + }, + lookupPath(path, opts = {}) { + if (!path) { + throw new FS.ErrnoError(44); + } + opts.follow_mount ??= true + + if (!PATH.isAbs(path)) { + path = FS.cwd() + '/' + path; + } + + // limit max consecutive symlinks to 40 (SYMLOOP_MAX). + linkloop: for (var nlinks = 0; nlinks < 40; nlinks++) { + // split the absolute path + var parts = path.split('/').filter((p) => !!p); + + // start at the root + var current = FS.root; + var current_path = '/'; + + for (var i = 0; i < parts.length; i++) { + var islast = (i === parts.length-1); + if (islast && opts.parent) { + // stop resolving + break; + } + + if (parts[i] === '.') { + continue; + } + + if (parts[i] === '..') { + current_path = PATH.dirname(current_path); + current = current.parent; + continue; + } + + current_path = PATH.join2(current_path, parts[i]); + try { + current = FS.lookupNode(current, parts[i]); + } catch (e) { + // if noent_okay is true, suppress a ENOENT in the last component + // and return an object with an undefined node. This is needed for + // resolving symlinks in the path when creating a file. + if ((e?.errno === 44) && islast && opts.noent_okay) { + return { path: current_path }; + } + throw e; + } + + // jump to the mount's root node if this is a mountpoint + if (FS.isMountpoint(current) && (!islast || opts.follow_mount)) { + current = current.mounted.root; + } + + // by default, lookupPath will not follow a symlink if it is the final path component. + // setting opts.follow = true will override this behavior. + if (FS.isLink(current.mode) && (!islast || opts.follow)) { + if (!current.node_ops.readlink) { + throw new FS.ErrnoError(52); + } + var link = current.node_ops.readlink(current); + if (!PATH.isAbs(link)) { + link = PATH.dirname(current_path) + '/' + link; + } + path = link + '/' + parts.slice(i + 1).join('/'); + continue linkloop; + } + } + return { path: current_path, node: current }; + } + throw new FS.ErrnoError(32); + }, + getPath(node) { + var path; + while (true) { + if (FS.isRoot(node)) { + var mount = node.mount.mountpoint; + if (!path) return mount; + return mount[mount.length-1] !== '/' ? `${mount}/${path}` : mount + path; + } + path = path ? `${node.name}/${path}` : node.name; + node = node.parent; + } + }, + hashName(parentid, name) { + var hash = 0; + + for (var i = 0; i < name.length; i++) { + hash = ((hash << 5) - hash + name.charCodeAt(i)) | 0; + } + return ((parentid + hash) >>> 0) % FS.nameTable.length; + }, + hashAddNode(node) { + var hash = FS.hashName(node.parent.id, node.name); + node.name_next = FS.nameTable[hash]; + FS.nameTable[hash] = node; + }, + hashRemoveNode(node) { + var hash = FS.hashName(node.parent.id, node.name); + if (FS.nameTable[hash] === node) { + FS.nameTable[hash] = node.name_next; + } else { + var current = FS.nameTable[hash]; + while (current) { + if (current.name_next === node) { + current.name_next = node.name_next; + break; + } + current = current.name_next; + } + } + }, + lookupNode(parent, name) { + var errCode = FS.mayLookup(parent); + if (errCode) { + throw new FS.ErrnoError(errCode); + } + var hash = FS.hashName(parent.id, name); + for (var node = FS.nameTable[hash]; node; node = node.name_next) { + var nodeName = node.name; + if (node.parent.id === parent.id && nodeName === name) { + return node; + } + } + // if we failed to find it in the cache, call into the VFS + return FS.lookup(parent, name); + }, + createNode(parent, name, mode, rdev) { + assert(typeof parent == 'object') + var node = new FS.FSNode(parent, name, mode, rdev); + + FS.hashAddNode(node); + + return node; + }, + destroyNode(node) { + FS.hashRemoveNode(node); + }, + isRoot(node) { + return node === node.parent; + }, + isMountpoint(node) { + return !!node.mounted; + }, + isFile(mode) { + return (mode & 61440) === 32768; + }, + isDir(mode) { + return (mode & 61440) === 16384; + }, + isLink(mode) { + return (mode & 61440) === 40960; + }, + isChrdev(mode) { + return (mode & 61440) === 8192; + }, + isBlkdev(mode) { + return (mode & 61440) === 24576; + }, + isFIFO(mode) { + return (mode & 61440) === 4096; + }, + isSocket(mode) { + return (mode & 49152) === 49152; + }, + flagsToPermissionString(flag) { + var perms = ['r', 'w', 'rw'][flag & 3]; + if ((flag & 512)) { + perms += 'w'; + } + return perms; + }, + nodePermissions(node, perms) { + if (FS.ignorePermissions) { + return 0; + } + // return 0 if any user, group or owner bits are set. + if (perms.includes('r') && !(node.mode & 292)) { + return 2; + } else if (perms.includes('w') && !(node.mode & 146)) { + return 2; + } else if (perms.includes('x') && !(node.mode & 73)) { + return 2; + } + return 0; + }, + mayLookup(dir) { + if (!FS.isDir(dir.mode)) return 54; + var errCode = FS.nodePermissions(dir, 'x'); + if (errCode) return errCode; + if (!dir.node_ops.lookup) return 2; + return 0; + }, + mayCreate(dir, name) { + if (!FS.isDir(dir.mode)) { + return 54; + } + try { + var node = FS.lookupNode(dir, name); + return 20; + } catch (e) { + } + return FS.nodePermissions(dir, 'wx'); + }, + mayDelete(dir, name, isdir) { + var node; + try { + node = FS.lookupNode(dir, name); + } catch (e) { + return e.errno; + } + var errCode = FS.nodePermissions(dir, 'wx'); + if (errCode) { + return errCode; + } + if (isdir) { + if (!FS.isDir(node.mode)) { + return 54; + } + if (FS.isRoot(node) || FS.getPath(node) === FS.cwd()) { + return 10; + } + } else { + if (FS.isDir(node.mode)) { + return 31; + } + } + return 0; + }, + mayOpen(node, flags) { + if (!node) { + return 44; + } + if (FS.isLink(node.mode)) { + return 32; + } else if (FS.isDir(node.mode)) { + if (FS.flagsToPermissionString(flags) !== 'r' // opening for write + || (flags & (512 | 64))) { // TODO: check for O_SEARCH? (== search for dir only) + return 31; + } + } + return FS.nodePermissions(node, FS.flagsToPermissionString(flags)); + }, + checkOpExists(op, err) { + if (!op) { + throw new FS.ErrnoError(err); + } + return op; + }, + MAX_OPEN_FDS:4096, + nextfd() { + for (var fd = 0; fd <= FS.MAX_OPEN_FDS; fd++) { + if (!FS.streams[fd]) { + return fd; + } + } + throw new FS.ErrnoError(33); + }, + getStreamChecked(fd) { + var stream = FS.getStream(fd); + if (!stream) { + throw new FS.ErrnoError(8); + } + return stream; + }, + getStream:(fd) => FS.streams[fd], + createStream(stream, fd = -1) { + assert(fd >= -1); + + // clone it, so we can return an instance of FSStream + stream = Object.assign(new FS.FSStream(), stream); + if (fd == -1) { + fd = FS.nextfd(); + } + stream.fd = fd; + FS.streams[fd] = stream; + return stream; + }, + closeStream(fd) { + FS.streams[fd] = null; + }, + dupStream(origStream, fd = -1) { + var stream = FS.createStream(origStream, fd); + stream.stream_ops?.dup?.(stream); + return stream; + }, + doSetAttr(stream, node, attr) { + var setattr = stream?.stream_ops.setattr; + var arg = setattr ? stream : node; + setattr ??= node.node_ops.setattr; + FS.checkOpExists(setattr, 63) + setattr(arg, attr); + }, + chrdev_stream_ops:{ + open(stream) { + var device = FS.getDevice(stream.node.rdev); + // override node's stream ops with the device's + stream.stream_ops = device.stream_ops; + // forward the open call + stream.stream_ops.open?.(stream); + }, + llseek() { + throw new FS.ErrnoError(70); + }, + }, + major:(dev) => ((dev) >> 8), + minor:(dev) => ((dev) & 0xff), + makedev:(ma, mi) => ((ma) << 8 | (mi)), + registerDevice(dev, ops) { + FS.devices[dev] = { stream_ops: ops }; + }, + getDevice:(dev) => FS.devices[dev], + getMounts(mount) { + var mounts = []; + var check = [mount]; + + while (check.length) { + var m = check.pop(); + + mounts.push(m); + + check.push(...m.mounts); + } + + return mounts; + }, + syncfs(populate, callback) { + if (typeof populate == 'function') { + callback = populate; + populate = false; + } + + FS.syncFSRequests++; + + if (FS.syncFSRequests > 1) { + err(`warning: ${FS.syncFSRequests} FS.syncfs operations in flight at once, probably just doing extra work`); + } + + var mounts = FS.getMounts(FS.root.mount); + var completed = 0; + + function doCallback(errCode) { + assert(FS.syncFSRequests > 0); + FS.syncFSRequests--; + return callback(errCode); + } + + function done(errCode) { + if (errCode) { + if (!done.errored) { + done.errored = true; + return doCallback(errCode); + } + return; + } + if (++completed >= mounts.length) { + doCallback(null); + } + }; + + // sync all mounts + mounts.forEach((mount) => { + if (!mount.type.syncfs) { + return done(null); + } + mount.type.syncfs(mount, populate, done); + }); + }, + mount(type, opts, mountpoint) { + if (typeof type == 'string') { + // The filesystem was not included, and instead we have an error + // message stored in the variable. + throw type; + } + var root = mountpoint === '/'; + var pseudo = !mountpoint; + var node; + + if (root && FS.root) { + throw new FS.ErrnoError(10); + } else if (!root && !pseudo) { + var lookup = FS.lookupPath(mountpoint, { follow_mount: false }); + + mountpoint = lookup.path; // use the absolute path + node = lookup.node; + + if (FS.isMountpoint(node)) { + throw new FS.ErrnoError(10); + } + + if (!FS.isDir(node.mode)) { + throw new FS.ErrnoError(54); + } + } + + var mount = { + type, + opts, + mountpoint, + mounts: [] + }; + + // create a root node for the fs + var mountRoot = type.mount(mount); + mountRoot.mount = mount; + mount.root = mountRoot; + + if (root) { + FS.root = mountRoot; + } else if (node) { + // set as a mountpoint + node.mounted = mount; + + // add the new mount to the current mount's children + if (node.mount) { + node.mount.mounts.push(mount); + } + } + + return mountRoot; + }, + unmount(mountpoint) { + var lookup = FS.lookupPath(mountpoint, { follow_mount: false }); + + if (!FS.isMountpoint(lookup.node)) { + throw new FS.ErrnoError(28); + } + + // destroy the nodes for this mount, and all its child mounts + var node = lookup.node; + var mount = node.mounted; + var mounts = FS.getMounts(mount); + + Object.keys(FS.nameTable).forEach((hash) => { + var current = FS.nameTable[hash]; + + while (current) { + var next = current.name_next; + + if (mounts.includes(current.mount)) { + FS.destroyNode(current); + } + + current = next; + } + }); + + // no longer a mountpoint + node.mounted = null; + + // remove this mount from the child mounts + var idx = node.mount.mounts.indexOf(mount); + assert(idx !== -1); + node.mount.mounts.splice(idx, 1); + }, + lookup(parent, name) { + return parent.node_ops.lookup(parent, name); + }, + mknod(path, mode, dev) { + var lookup = FS.lookupPath(path, { parent: true }); + var parent = lookup.node; + var name = PATH.basename(path); + if (!name) { + throw new FS.ErrnoError(28); + } + if (name === '.' || name === '..') { + throw new FS.ErrnoError(20); + } + var errCode = FS.mayCreate(parent, name); + if (errCode) { + throw new FS.ErrnoError(errCode); + } + if (!parent.node_ops.mknod) { + throw new FS.ErrnoError(63); + } + return parent.node_ops.mknod(parent, name, mode, dev); + }, + statfs(path) { + return FS.statfsNode(FS.lookupPath(path, {follow: true}).node); + }, + statfsStream(stream) { + // We keep a separate statfsStream function because noderawfs overrides + // it. In noderawfs, stream.node is sometimes null. Instead, we need to + // look at stream.path. + return FS.statfsNode(stream.node); + }, + statfsNode(node) { + // NOTE: None of the defaults here are true. We're just returning safe and + // sane values. Currently nodefs and rawfs replace these defaults, + // other file systems leave them alone. + var rtn = { + bsize: 4096, + frsize: 4096, + blocks: 1e6, + bfree: 5e5, + bavail: 5e5, + files: FS.nextInode, + ffree: FS.nextInode - 1, + fsid: 42, + flags: 2, + namelen: 255, + }; + + if (node.node_ops.statfs) { + Object.assign(rtn, node.node_ops.statfs(node.mount.opts.root)); + } + return rtn; + }, + create(path, mode = 0o666) { + mode &= 4095; + mode |= 32768; + return FS.mknod(path, mode, 0); + }, + mkdir(path, mode = 0o777) { + mode &= 511 | 512; + mode |= 16384; + return FS.mknod(path, mode, 0); + }, + mkdirTree(path, mode) { + var dirs = path.split('/'); + var d = ''; + for (var dir of dirs) { + if (!dir) continue; + if (d || PATH.isAbs(path)) d += '/'; + d += dir; + try { + FS.mkdir(d, mode); + } catch(e) { + if (e.errno != 20) throw e; + } + } + }, + mkdev(path, mode, dev) { + if (typeof dev == 'undefined') { + dev = mode; + mode = 0o666; + } + mode |= 8192; + return FS.mknod(path, mode, dev); + }, + symlink(oldpath, newpath) { + if (!PATH_FS.resolve(oldpath)) { + throw new FS.ErrnoError(44); + } + var lookup = FS.lookupPath(newpath, { parent: true }); + var parent = lookup.node; + if (!parent) { + throw new FS.ErrnoError(44); + } + var newname = PATH.basename(newpath); + var errCode = FS.mayCreate(parent, newname); + if (errCode) { + throw new FS.ErrnoError(errCode); + } + if (!parent.node_ops.symlink) { + throw new FS.ErrnoError(63); + } + return parent.node_ops.symlink(parent, newname, oldpath); + }, + rename(old_path, new_path) { + var old_dirname = PATH.dirname(old_path); + var new_dirname = PATH.dirname(new_path); + var old_name = PATH.basename(old_path); + var new_name = PATH.basename(new_path); + // parents must exist + var lookup, old_dir, new_dir; + + // let the errors from non existent directories percolate up + lookup = FS.lookupPath(old_path, { parent: true }); + old_dir = lookup.node; + lookup = FS.lookupPath(new_path, { parent: true }); + new_dir = lookup.node; + + if (!old_dir || !new_dir) throw new FS.ErrnoError(44); + // need to be part of the same mount + if (old_dir.mount !== new_dir.mount) { + throw new FS.ErrnoError(75); + } + // source must exist + var old_node = FS.lookupNode(old_dir, old_name); + // old path should not be an ancestor of the new path + var relative = PATH_FS.relative(old_path, new_dirname); + if (relative.charAt(0) !== '.') { + throw new FS.ErrnoError(28); + } + // new path should not be an ancestor of the old path + relative = PATH_FS.relative(new_path, old_dirname); + if (relative.charAt(0) !== '.') { + throw new FS.ErrnoError(55); + } + // see if the new path already exists + var new_node; + try { + new_node = FS.lookupNode(new_dir, new_name); + } catch (e) { + // not fatal + } + // early out if nothing needs to change + if (old_node === new_node) { + return; + } + // we'll need to delete the old entry + var isdir = FS.isDir(old_node.mode); + var errCode = FS.mayDelete(old_dir, old_name, isdir); + if (errCode) { + throw new FS.ErrnoError(errCode); + } + // need delete permissions if we'll be overwriting. + // need create permissions if new doesn't already exist. + errCode = new_node ? + FS.mayDelete(new_dir, new_name, isdir) : + FS.mayCreate(new_dir, new_name); + if (errCode) { + throw new FS.ErrnoError(errCode); + } + if (!old_dir.node_ops.rename) { + throw new FS.ErrnoError(63); + } + if (FS.isMountpoint(old_node) || (new_node && FS.isMountpoint(new_node))) { + throw new FS.ErrnoError(10); + } + // if we are going to change the parent, check write permissions + if (new_dir !== old_dir) { + errCode = FS.nodePermissions(old_dir, 'w'); + if (errCode) { + throw new FS.ErrnoError(errCode); + } + } + // remove the node from the lookup hash + FS.hashRemoveNode(old_node); + // do the underlying fs rename + try { + old_dir.node_ops.rename(old_node, new_dir, new_name); + // update old node (we do this here to avoid each backend + // needing to) + old_node.parent = new_dir; + } catch (e) { + throw e; + } finally { + // add the node back to the hash (in case node_ops.rename + // changed its name) + FS.hashAddNode(old_node); + } + }, + rmdir(path) { + var lookup = FS.lookupPath(path, { parent: true }); + var parent = lookup.node; + var name = PATH.basename(path); + var node = FS.lookupNode(parent, name); + var errCode = FS.mayDelete(parent, name, true); + if (errCode) { + throw new FS.ErrnoError(errCode); + } + if (!parent.node_ops.rmdir) { + throw new FS.ErrnoError(63); + } + if (FS.isMountpoint(node)) { + throw new FS.ErrnoError(10); + } + parent.node_ops.rmdir(parent, name); + FS.destroyNode(node); + }, + readdir(path) { + var lookup = FS.lookupPath(path, { follow: true }); + var node = lookup.node; + var readdir = FS.checkOpExists(node.node_ops.readdir, 54); + return readdir(node); + }, + unlink(path) { + var lookup = FS.lookupPath(path, { parent: true }); + var parent = lookup.node; + if (!parent) { + throw new FS.ErrnoError(44); + } + var name = PATH.basename(path); + var node = FS.lookupNode(parent, name); + var errCode = FS.mayDelete(parent, name, false); + if (errCode) { + // According to POSIX, we should map EISDIR to EPERM, but + // we instead do what Linux does (and we must, as we use + // the musl linux libc). + throw new FS.ErrnoError(errCode); + } + if (!parent.node_ops.unlink) { + throw new FS.ErrnoError(63); + } + if (FS.isMountpoint(node)) { + throw new FS.ErrnoError(10); + } + parent.node_ops.unlink(parent, name); + FS.destroyNode(node); + }, + readlink(path) { + var lookup = FS.lookupPath(path); + var link = lookup.node; + if (!link) { + throw new FS.ErrnoError(44); + } + if (!link.node_ops.readlink) { + throw new FS.ErrnoError(28); + } + return link.node_ops.readlink(link); + }, + stat(path, dontFollow) { + var lookup = FS.lookupPath(path, { follow: !dontFollow }); + var node = lookup.node; + var getattr = FS.checkOpExists(node.node_ops.getattr, 63); + return getattr(node); + }, + fstat(fd) { + var stream = FS.getStreamChecked(fd); + var node = stream.node; + var getattr = stream.stream_ops.getattr; + var arg = getattr ? stream : node; + getattr ??= node.node_ops.getattr; + FS.checkOpExists(getattr, 63) + return getattr(arg); + }, + lstat(path) { + return FS.stat(path, true); + }, + doChmod(stream, node, mode, dontFollow) { + FS.doSetAttr(stream, node, { + mode: (mode & 4095) | (node.mode & ~4095), + ctime: Date.now(), + dontFollow + }); + }, + chmod(path, mode, dontFollow) { + var node; + if (typeof path == 'string') { + var lookup = FS.lookupPath(path, { follow: !dontFollow }); + node = lookup.node; + } else { + node = path; + } + FS.doChmod(null, node, mode, dontFollow); + }, + lchmod(path, mode) { + FS.chmod(path, mode, true); + }, + fchmod(fd, mode) { + var stream = FS.getStreamChecked(fd); + FS.doChmod(stream, stream.node, mode, false); + }, + doChown(stream, node, dontFollow) { + FS.doSetAttr(stream, node, { + timestamp: Date.now(), + dontFollow + // we ignore the uid / gid for now + }); + }, + chown(path, uid, gid, dontFollow) { + var node; + if (typeof path == 'string') { + var lookup = FS.lookupPath(path, { follow: !dontFollow }); + node = lookup.node; + } else { + node = path; + } + FS.doChown(null, node, dontFollow); + }, + lchown(path, uid, gid) { + FS.chown(path, uid, gid, true); + }, + fchown(fd, uid, gid) { + var stream = FS.getStreamChecked(fd); + FS.doChown(stream, stream.node, false); + }, + doTruncate(stream, node, len) { + if (FS.isDir(node.mode)) { + throw new FS.ErrnoError(31); + } + if (!FS.isFile(node.mode)) { + throw new FS.ErrnoError(28); + } + var errCode = FS.nodePermissions(node, 'w'); + if (errCode) { + throw new FS.ErrnoError(errCode); + } + FS.doSetAttr(stream, node, { + size: len, + timestamp: Date.now() + }); + }, + truncate(path, len) { + if (len < 0) { + throw new FS.ErrnoError(28); + } + var node; + if (typeof path == 'string') { + var lookup = FS.lookupPath(path, { follow: true }); + node = lookup.node; + } else { + node = path; + } + FS.doTruncate(null, node, len); + }, + ftruncate(fd, len) { + var stream = FS.getStreamChecked(fd); + if (len < 0 || (stream.flags & 2097155) === 0) { + throw new FS.ErrnoError(28); + } + FS.doTruncate(stream, stream.node, len); + }, + utime(path, atime, mtime) { + var lookup = FS.lookupPath(path, { follow: true }); + var node = lookup.node; + var setattr = FS.checkOpExists(node.node_ops.setattr, 63); + setattr(node, { + atime: atime, + mtime: mtime + }); + }, + open(path, flags, mode = 0o666) { + if (path === "") { + throw new FS.ErrnoError(44); + } + flags = typeof flags == 'string' ? FS_modeStringToFlags(flags) : flags; + if ((flags & 64)) { + mode = (mode & 4095) | 32768; + } else { + mode = 0; + } + var node; + var isDirPath; + if (typeof path == 'object') { + node = path; + } else { + isDirPath = path.endsWith("/"); + // noent_okay makes it so that if the final component of the path + // doesn't exist, lookupPath returns `node: undefined`. `path` will be + // updated to point to the target of all symlinks. + var lookup = FS.lookupPath(path, { + follow: !(flags & 131072), + noent_okay: true + }); + node = lookup.node; + path = lookup.path; + } + // perhaps we need to create the node + var created = false; + if ((flags & 64)) { + if (node) { + // if O_CREAT and O_EXCL are set, error out if the node already exists + if ((flags & 128)) { + throw new FS.ErrnoError(20); + } + } else if (isDirPath) { + throw new FS.ErrnoError(31); + } else { + // node doesn't exist, try to create it + // Ignore the permission bits here to ensure we can `open` this new + // file below. We use chmod below the apply the permissions once the + // file is open. + node = FS.mknod(path, mode | 0o777, 0); + created = true; + } + } + if (!node) { + throw new FS.ErrnoError(44); + } + // can't truncate a device + if (FS.isChrdev(node.mode)) { + flags &= ~512; + } + // if asked only for a directory, then this must be one + if ((flags & 65536) && !FS.isDir(node.mode)) { + throw new FS.ErrnoError(54); + } + // check permissions, if this is not a file we just created now (it is ok to + // create and write to a file with read-only permissions; it is read-only + // for later use) + if (!created) { + var errCode = FS.mayOpen(node, flags); + if (errCode) { + throw new FS.ErrnoError(errCode); + } + } + // do truncation if necessary + if ((flags & 512) && !created) { + FS.truncate(node, 0); + } + // we've already handled these, don't pass down to the underlying vfs + flags &= ~(128 | 512 | 131072); + + // register the stream with the filesystem + var stream = FS.createStream({ + node, + path: FS.getPath(node), // we want the absolute path to the node + flags, + seekable: true, + position: 0, + stream_ops: node.stream_ops, + // used by the file family libc calls (fopen, fwrite, ferror, etc.) + ungotten: [], + error: false + }); + // call the new stream's open function + if (stream.stream_ops.open) { + stream.stream_ops.open(stream); + } + if (created) { + FS.chmod(node, mode & 0o777); + } + if (Module['logReadFiles'] && !(flags & 1)) { + if (!(path in FS.readFiles)) { + FS.readFiles[path] = 1; + } + } + return stream; + }, + close(stream) { + if (FS.isClosed(stream)) { + throw new FS.ErrnoError(8); + } + if (stream.getdents) stream.getdents = null; // free readdir state + try { + if (stream.stream_ops.close) { + stream.stream_ops.close(stream); + } + } catch (e) { + throw e; + } finally { + FS.closeStream(stream.fd); + } + stream.fd = null; + }, + isClosed(stream) { + return stream.fd === null; + }, + llseek(stream, offset, whence) { + if (FS.isClosed(stream)) { + throw new FS.ErrnoError(8); + } + if (!stream.seekable || !stream.stream_ops.llseek) { + throw new FS.ErrnoError(70); + } + if (whence != 0 && whence != 1 && whence != 2) { + throw new FS.ErrnoError(28); + } + stream.position = stream.stream_ops.llseek(stream, offset, whence); + stream.ungotten = []; + return stream.position; + }, + read(stream, buffer, offset, length, position) { + assert(offset >= 0); + if (length < 0 || position < 0) { + throw new FS.ErrnoError(28); + } + if (FS.isClosed(stream)) { + throw new FS.ErrnoError(8); + } + if ((stream.flags & 2097155) === 1) { + throw new FS.ErrnoError(8); + } + if (FS.isDir(stream.node.mode)) { + throw new FS.ErrnoError(31); + } + if (!stream.stream_ops.read) { + throw new FS.ErrnoError(28); + } + var seeking = typeof position != 'undefined'; + if (!seeking) { + position = stream.position; + } else if (!stream.seekable) { + throw new FS.ErrnoError(70); + } + var bytesRead = stream.stream_ops.read(stream, buffer, offset, length, position); + if (!seeking) stream.position += bytesRead; + return bytesRead; + }, + write(stream, buffer, offset, length, position, canOwn) { + assert(offset >= 0); + if (length < 0 || position < 0) { + throw new FS.ErrnoError(28); + } + if (FS.isClosed(stream)) { + throw new FS.ErrnoError(8); + } + if ((stream.flags & 2097155) === 0) { + throw new FS.ErrnoError(8); + } + if (FS.isDir(stream.node.mode)) { + throw new FS.ErrnoError(31); + } + if (!stream.stream_ops.write) { + throw new FS.ErrnoError(28); + } + if (stream.seekable && stream.flags & 1024) { + // seek to the end before writing in append mode + FS.llseek(stream, 0, 2); + } + var seeking = typeof position != 'undefined'; + if (!seeking) { + position = stream.position; + } else if (!stream.seekable) { + throw new FS.ErrnoError(70); + } + var bytesWritten = stream.stream_ops.write(stream, buffer, offset, length, position, canOwn); + if (!seeking) stream.position += bytesWritten; + return bytesWritten; + }, + mmap(stream, length, position, prot, flags) { + // User requests writing to file (prot & PROT_WRITE != 0). + // Checking if we have permissions to write to the file unless + // MAP_PRIVATE flag is set. According to POSIX spec it is possible + // to write to file opened in read-only mode with MAP_PRIVATE flag, + // as all modifications will be visible only in the memory of + // the current process. + if ((prot & 2) !== 0 + && (flags & 2) === 0 + && (stream.flags & 2097155) !== 2) { + throw new FS.ErrnoError(2); + } + if ((stream.flags & 2097155) === 1) { + throw new FS.ErrnoError(2); + } + if (!stream.stream_ops.mmap) { + throw new FS.ErrnoError(43); + } + if (!length) { + throw new FS.ErrnoError(28); + } + return stream.stream_ops.mmap(stream, length, position, prot, flags); + }, + msync(stream, buffer, offset, length, mmapFlags) { + assert(offset >= 0); + if (!stream.stream_ops.msync) { + return 0; + } + return stream.stream_ops.msync(stream, buffer, offset, length, mmapFlags); + }, + ioctl(stream, cmd, arg) { + if (!stream.stream_ops.ioctl) { + throw new FS.ErrnoError(59); + } + return stream.stream_ops.ioctl(stream, cmd, arg); + }, + readFile(path, opts = {}) { + opts.flags = opts.flags || 0; + opts.encoding = opts.encoding || 'binary'; + if (opts.encoding !== 'utf8' && opts.encoding !== 'binary') { + throw new Error(`Invalid encoding type "${opts.encoding}"`); + } + var ret; + var stream = FS.open(path, opts.flags); + var stat = FS.stat(path); + var length = stat.size; + var buf = new Uint8Array(length); + FS.read(stream, buf, 0, length, 0); + if (opts.encoding === 'utf8') { + ret = UTF8ArrayToString(buf); + } else if (opts.encoding === 'binary') { + ret = buf; + } + FS.close(stream); + return ret; + }, + writeFile(path, data, opts = {}) { + opts.flags = opts.flags || 577; + var stream = FS.open(path, opts.flags, opts.mode); + if (typeof data == 'string') { + var buf = new Uint8Array(lengthBytesUTF8(data)+1); + var actualNumBytes = stringToUTF8Array(data, buf, 0, buf.length); + FS.write(stream, buf, 0, actualNumBytes, undefined, opts.canOwn); + } else if (ArrayBuffer.isView(data)) { + FS.write(stream, data, 0, data.byteLength, undefined, opts.canOwn); + } else { + throw new Error('Unsupported data type'); + } + FS.close(stream); + }, + cwd:() => FS.currentPath, + chdir(path) { + var lookup = FS.lookupPath(path, { follow: true }); + if (lookup.node === null) { + throw new FS.ErrnoError(44); + } + if (!FS.isDir(lookup.node.mode)) { + throw new FS.ErrnoError(54); + } + var errCode = FS.nodePermissions(lookup.node, 'x'); + if (errCode) { + throw new FS.ErrnoError(errCode); + } + FS.currentPath = lookup.path; + }, + createDefaultDirectories() { + FS.mkdir('/tmp'); + FS.mkdir('/home'); + FS.mkdir('/home/web_user'); + }, + createDefaultDevices() { + // create /dev + FS.mkdir('/dev'); + // setup /dev/null + FS.registerDevice(FS.makedev(1, 3), { + read: () => 0, + write: (stream, buffer, offset, length, pos) => length, + llseek: () => 0, + }); + FS.mkdev('/dev/null', FS.makedev(1, 3)); + // setup /dev/tty and /dev/tty1 + // stderr needs to print output using err() rather than out() + // so we register a second tty just for it. + TTY.register(FS.makedev(5, 0), TTY.default_tty_ops); + TTY.register(FS.makedev(6, 0), TTY.default_tty1_ops); + FS.mkdev('/dev/tty', FS.makedev(5, 0)); + FS.mkdev('/dev/tty1', FS.makedev(6, 0)); + // setup /dev/[u]random + // use a buffer to avoid overhead of individual crypto calls per byte + var randomBuffer = new Uint8Array(1024), randomLeft = 0; + var randomByte = () => { + if (randomLeft === 0) { + randomFill(randomBuffer); + randomLeft = randomBuffer.byteLength; + } + return randomBuffer[--randomLeft]; + }; + FS.createDevice('/dev', 'random', randomByte); + FS.createDevice('/dev', 'urandom', randomByte); + // we're not going to emulate the actual shm device, + // just create the tmp dirs that reside in it commonly + FS.mkdir('/dev/shm'); + FS.mkdir('/dev/shm/tmp'); + }, + createSpecialDirectories() { + // create /proc/self/fd which allows /proc/self/fd/6 => readlink gives the + // name of the stream for fd 6 (see test_unistd_ttyname) + FS.mkdir('/proc'); + var proc_self = FS.mkdir('/proc/self'); + FS.mkdir('/proc/self/fd'); + FS.mount({ + mount() { + var node = FS.createNode(proc_self, 'fd', 16895, 73); + node.stream_ops = { + llseek: MEMFS.stream_ops.llseek, + }; + node.node_ops = { + lookup(parent, name) { + var fd = +name; + var stream = FS.getStreamChecked(fd); + var ret = { + parent: null, + mount: { mountpoint: 'fake' }, + node_ops: { readlink: () => stream.path }, + id: fd + 1, + }; + ret.parent = ret; // make it look like a simple root node + return ret; + }, + readdir() { + return Array.from(FS.streams.entries()) + .filter(([k, v]) => v) + .map(([k, v]) => k.toString()); + } + }; + return node; + } + }, {}, '/proc/self/fd'); + }, + createStandardStreams(input, output, error) { + // TODO deprecate the old functionality of a single + // input / output callback and that utilizes FS.createDevice + // and instead require a unique set of stream ops + + // by default, we symlink the standard streams to the + // default tty devices. however, if the standard streams + // have been overwritten we create a unique device for + // them instead. + if (input) { + FS.createDevice('/dev', 'stdin', input); + } else { + FS.symlink('/dev/tty', '/dev/stdin'); + } + if (output) { + FS.createDevice('/dev', 'stdout', null, output); + } else { + FS.symlink('/dev/tty', '/dev/stdout'); + } + if (error) { + FS.createDevice('/dev', 'stderr', null, error); + } else { + FS.symlink('/dev/tty1', '/dev/stderr'); + } + + // open default streams for the stdin, stdout and stderr devices + var stdin = FS.open('/dev/stdin', 0); + var stdout = FS.open('/dev/stdout', 1); + var stderr = FS.open('/dev/stderr', 1); + assert(stdin.fd === 0, `invalid handle for stdin (${stdin.fd})`); + assert(stdout.fd === 1, `invalid handle for stdout (${stdout.fd})`); + assert(stderr.fd === 2, `invalid handle for stderr (${stderr.fd})`); + }, + staticInit() { + FS.nameTable = new Array(4096); + + FS.mount(MEMFS, {}, '/'); + + FS.createDefaultDirectories(); + FS.createDefaultDevices(); + FS.createSpecialDirectories(); + + FS.filesystems = { + 'MEMFS': MEMFS, + }; + }, + init(input, output, error) { + assert(!FS.initialized, 'FS.init was previously called. If you want to initialize later with custom parameters, remove any earlier calls (note that one is automatically added to the generated code)'); + FS.initialized = true; + + // Allow Module.stdin etc. to provide defaults, if none explicitly passed to us here + input ??= Module['stdin']; + output ??= Module['stdout']; + error ??= Module['stderr']; + + FS.createStandardStreams(input, output, error); + }, + quit() { + FS.initialized = false; + // force-flush all streams, so we get musl std streams printed out + _fflush(0); + // close all of our streams + for (var stream of FS.streams) { + if (stream) { + FS.close(stream); + } + } + }, + findObject(path, dontResolveLastLink) { + var ret = FS.analyzePath(path, dontResolveLastLink); + if (!ret.exists) { + return null; + } + return ret.object; + }, + analyzePath(path, dontResolveLastLink) { + // operate from within the context of the symlink's target + try { + var lookup = FS.lookupPath(path, { follow: !dontResolveLastLink }); + path = lookup.path; + } catch (e) { + } + var ret = { + isRoot: false, exists: false, error: 0, name: null, path: null, object: null, + parentExists: false, parentPath: null, parentObject: null + }; + try { + var lookup = FS.lookupPath(path, { parent: true }); + ret.parentExists = true; + ret.parentPath = lookup.path; + ret.parentObject = lookup.node; + ret.name = PATH.basename(path); + lookup = FS.lookupPath(path, { follow: !dontResolveLastLink }); + ret.exists = true; + ret.path = lookup.path; + ret.object = lookup.node; + ret.name = lookup.node.name; + ret.isRoot = lookup.path === '/'; + } catch (e) { + ret.error = e.errno; + }; + return ret; + }, + createPath(parent, path, canRead, canWrite) { + parent = typeof parent == 'string' ? parent : FS.getPath(parent); + var parts = path.split('/').reverse(); + while (parts.length) { + var part = parts.pop(); + if (!part) continue; + var current = PATH.join2(parent, part); + try { + FS.mkdir(current); + } catch (e) { + if (e.errno != 20) throw e; + } + parent = current; + } + return current; + }, + createFile(parent, name, properties, canRead, canWrite) { + var path = PATH.join2(typeof parent == 'string' ? parent : FS.getPath(parent), name); + var mode = FS_getMode(canRead, canWrite); + return FS.create(path, mode); + }, + createDataFile(parent, name, data, canRead, canWrite, canOwn) { + var path = name; + if (parent) { + parent = typeof parent == 'string' ? parent : FS.getPath(parent); + path = name ? PATH.join2(parent, name) : parent; + } + var mode = FS_getMode(canRead, canWrite); + var node = FS.create(path, mode); + if (data) { + if (typeof data == 'string') { + var arr = new Array(data.length); + for (var i = 0, len = data.length; i < len; ++i) arr[i] = data.charCodeAt(i); + data = arr; + } + // make sure we can write to the file + FS.chmod(node, mode | 146); + var stream = FS.open(node, 577); + FS.write(stream, data, 0, data.length, 0, canOwn); + FS.close(stream); + FS.chmod(node, mode); + } + }, + createDevice(parent, name, input, output) { + var path = PATH.join2(typeof parent == 'string' ? parent : FS.getPath(parent), name); + var mode = FS_getMode(!!input, !!output); + FS.createDevice.major ??= 64; + var dev = FS.makedev(FS.createDevice.major++, 0); + // Create a fake device that a set of stream ops to emulate + // the old behavior. + FS.registerDevice(dev, { + open(stream) { + stream.seekable = false; + }, + close(stream) { + // flush any pending line data + if (output?.buffer?.length) { + output(10); + } + }, + read(stream, buffer, offset, length, pos /* ignored */) { + var bytesRead = 0; + for (var i = 0; i < length; i++) { + var result; + try { + result = input(); + } catch (e) { + throw new FS.ErrnoError(29); + } + if (result === undefined && bytesRead === 0) { + throw new FS.ErrnoError(6); + } + if (result === null || result === undefined) break; + bytesRead++; + buffer[offset+i] = result; + } + if (bytesRead) { + stream.node.atime = Date.now(); + } + return bytesRead; + }, + write(stream, buffer, offset, length, pos) { + for (var i = 0; i < length; i++) { + try { + output(buffer[offset+i]); + } catch (e) { + throw new FS.ErrnoError(29); + } + } + if (length) { + stream.node.mtime = stream.node.ctime = Date.now(); + } + return i; + } + }); + return FS.mkdev(path, mode, dev); + }, + forceLoadFile(obj) { + if (obj.isDevice || obj.isFolder || obj.link || obj.contents) return true; + if (typeof XMLHttpRequest != 'undefined') { + throw new Error("Lazy loading should have been performed (contents set) in createLazyFile, but it was not. Lazy loading only works in web workers. Use --embed-file or --preload-file in emcc on the main thread."); + } else { // Command-line. + try { + obj.contents = readBinary(obj.url); + obj.usedBytes = obj.contents.length; + } catch (e) { + throw new FS.ErrnoError(29); + } + } + }, + createLazyFile(parent, name, url, canRead, canWrite) { + // Lazy chunked Uint8Array (implements get and length from Uint8Array). + // Actual getting is abstracted away for eventual reuse. + class LazyUint8Array { + lengthKnown = false; + chunks = []; // Loaded chunks. Index is the chunk number + get(idx) { + if (idx > this.length-1 || idx < 0) { + return undefined; + } + var chunkOffset = idx % this.chunkSize; + var chunkNum = (idx / this.chunkSize)|0; + return this.getter(chunkNum)[chunkOffset]; + } + setDataGetter(getter) { + this.getter = getter; + } + cacheLength() { + // Find length + var xhr = new XMLHttpRequest(); + xhr.open('HEAD', url, false); + xhr.send(null); + if (!(xhr.status >= 200 && xhr.status < 300 || xhr.status === 304)) throw new Error("Couldn't load " + url + ". Status: " + xhr.status); + var datalength = Number(xhr.getResponseHeader("Content-length")); + var header; + var hasByteServing = (header = xhr.getResponseHeader("Accept-Ranges")) && header === "bytes"; + var usesGzip = (header = xhr.getResponseHeader("Content-Encoding")) && header === "gzip"; + + var chunkSize = 1024*1024; // Chunk size in bytes + + if (!hasByteServing) chunkSize = datalength; + + // Function to get a range from the remote URL. + var doXHR = (from, to) => { + if (from > to) throw new Error("invalid range (" + from + ", " + to + ") or no bytes requested!"); + if (to > datalength-1) throw new Error("only " + datalength + " bytes available! programmer error!"); + + // TODO: Use mozResponseArrayBuffer, responseStream, etc. if available. + var xhr = new XMLHttpRequest(); + xhr.open('GET', url, false); + if (datalength !== chunkSize) xhr.setRequestHeader("Range", "bytes=" + from + "-" + to); + + // Some hints to the browser that we want binary data. + xhr.responseType = 'arraybuffer'; + if (xhr.overrideMimeType) { + xhr.overrideMimeType('text/plain; charset=x-user-defined'); + } + + xhr.send(null); + if (!(xhr.status >= 200 && xhr.status < 300 || xhr.status === 304)) throw new Error("Couldn't load " + url + ". Status: " + xhr.status); + if (xhr.response !== undefined) { + return new Uint8Array(/** @type{Array} */(xhr.response || [])); + } + return intArrayFromString(xhr.responseText || '', true); + }; + var lazyArray = this; + lazyArray.setDataGetter((chunkNum) => { + var start = chunkNum * chunkSize; + var end = (chunkNum+1) * chunkSize - 1; // including this byte + end = Math.min(end, datalength-1); // if datalength-1 is selected, this is the last block + if (typeof lazyArray.chunks[chunkNum] == 'undefined') { + lazyArray.chunks[chunkNum] = doXHR(start, end); + } + if (typeof lazyArray.chunks[chunkNum] == 'undefined') throw new Error('doXHR failed!'); + return lazyArray.chunks[chunkNum]; + }); + + if (usesGzip || !datalength) { + // if the server uses gzip or doesn't supply the length, we have to download the whole file to get the (uncompressed) length + chunkSize = datalength = 1; // this will force getter(0)/doXHR do download the whole file + datalength = this.getter(0).length; + chunkSize = datalength; + out("LazyFiles on gzip forces download of the whole file when length is accessed"); + } + + this._length = datalength; + this._chunkSize = chunkSize; + this.lengthKnown = true; + } + get length() { + if (!this.lengthKnown) { + this.cacheLength(); + } + return this._length; + } + get chunkSize() { + if (!this.lengthKnown) { + this.cacheLength(); + } + return this._chunkSize; + } + } + + if (typeof XMLHttpRequest != 'undefined') { + if (!ENVIRONMENT_IS_WORKER) throw 'Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc'; + var lazyArray = new LazyUint8Array(); + var properties = { isDevice: false, contents: lazyArray }; + } else { + var properties = { isDevice: false, url: url }; + } + + var node = FS.createFile(parent, name, properties, canRead, canWrite); + // This is a total hack, but I want to get this lazy file code out of the + // core of MEMFS. If we want to keep this lazy file concept I feel it should + // be its own thin LAZYFS proxying calls to MEMFS. + if (properties.contents) { + node.contents = properties.contents; + } else if (properties.url) { + node.contents = null; + node.url = properties.url; + } + // Add a function that defers querying the file size until it is asked the first time. + Object.defineProperties(node, { + usedBytes: { + get: function() { return this.contents.length; } + } + }); + // override each stream op with one that tries to force load the lazy file first + var stream_ops = {}; + var keys = Object.keys(node.stream_ops); + keys.forEach((key) => { + var fn = node.stream_ops[key]; + stream_ops[key] = (...args) => { + FS.forceLoadFile(node); + return fn(...args); + }; + }); + function writeChunks(stream, buffer, offset, length, position) { + var contents = stream.node.contents; + if (position >= contents.length) + return 0; + var size = Math.min(contents.length - position, length); + assert(size >= 0); + if (contents.slice) { // normal array + for (var i = 0; i < size; i++) { + buffer[offset + i] = contents[position + i]; + } + } else { + for (var i = 0; i < size; i++) { // LazyUint8Array from sync binary XHR + buffer[offset + i] = contents.get(position + i); + } + } + return size; + } + // use a custom read function + stream_ops.read = (stream, buffer, offset, length, position) => { + FS.forceLoadFile(node); + return writeChunks(stream, buffer, offset, length, position) + }; + // use a custom mmap function + stream_ops.mmap = (stream, length, position, prot, flags) => { + FS.forceLoadFile(node); + var ptr = mmapAlloc(length); + if (!ptr) { + throw new FS.ErrnoError(48); + } + writeChunks(stream, HEAP8, ptr, length, position); + return { ptr, allocated: true }; + }; + node.stream_ops = stream_ops; + return node; + }, + absolutePath() { + abort('FS.absolutePath has been removed; use PATH_FS.resolve instead'); + }, + createFolder() { + abort('FS.createFolder has been removed; use FS.mkdir instead'); + }, + createLink() { + abort('FS.createLink has been removed; use FS.symlink instead'); + }, + joinPath() { + abort('FS.joinPath has been removed; use PATH.join instead'); + }, + mmapAlloc() { + abort('FS.mmapAlloc has been replaced by the top level function mmapAlloc'); + }, + standardizePath() { + abort('FS.standardizePath has been removed; use PATH.normalize instead'); + }, + }; + + var SYSCALLS = { + DEFAULT_POLLMASK:5, + calculateAt(dirfd, path, allowEmpty) { + if (PATH.isAbs(path)) { + return path; + } + // relative path + var dir; + if (dirfd === -100) { + dir = FS.cwd(); + } else { + var dirstream = SYSCALLS.getStreamFromFD(dirfd); + dir = dirstream.path; + } + if (path.length == 0) { + if (!allowEmpty) { + throw new FS.ErrnoError(44);; + } + return dir; + } + return dir + '/' + path; + }, + writeStat(buf, stat) { + HEAP32[((buf)>>2)] = stat.dev; + HEAP32[(((buf)+(4))>>2)] = stat.mode; + HEAPU32[(((buf)+(8))>>2)] = stat.nlink; + HEAP32[(((buf)+(12))>>2)] = stat.uid; + HEAP32[(((buf)+(16))>>2)] = stat.gid; + HEAP32[(((buf)+(20))>>2)] = stat.rdev; + HEAP64[(((buf)+(24))>>3)] = BigInt(stat.size); + HEAP32[(((buf)+(32))>>2)] = 4096; + HEAP32[(((buf)+(36))>>2)] = stat.blocks; + var atime = stat.atime.getTime(); + var mtime = stat.mtime.getTime(); + var ctime = stat.ctime.getTime(); + HEAP64[(((buf)+(40))>>3)] = BigInt(Math.floor(atime / 1000)); + HEAPU32[(((buf)+(48))>>2)] = (atime % 1000) * 1000 * 1000; + HEAP64[(((buf)+(56))>>3)] = BigInt(Math.floor(mtime / 1000)); + HEAPU32[(((buf)+(64))>>2)] = (mtime % 1000) * 1000 * 1000; + HEAP64[(((buf)+(72))>>3)] = BigInt(Math.floor(ctime / 1000)); + HEAPU32[(((buf)+(80))>>2)] = (ctime % 1000) * 1000 * 1000; + HEAP64[(((buf)+(88))>>3)] = BigInt(stat.ino); + return 0; + }, + writeStatFs(buf, stats) { + HEAP32[(((buf)+(4))>>2)] = stats.bsize; + HEAP32[(((buf)+(40))>>2)] = stats.bsize; + HEAP32[(((buf)+(8))>>2)] = stats.blocks; + HEAP32[(((buf)+(12))>>2)] = stats.bfree; + HEAP32[(((buf)+(16))>>2)] = stats.bavail; + HEAP32[(((buf)+(20))>>2)] = stats.files; + HEAP32[(((buf)+(24))>>2)] = stats.ffree; + HEAP32[(((buf)+(28))>>2)] = stats.fsid; + HEAP32[(((buf)+(44))>>2)] = stats.flags; // ST_NOSUID + HEAP32[(((buf)+(36))>>2)] = stats.namelen; + }, + doMsync(addr, stream, len, flags, offset) { + if (!FS.isFile(stream.node.mode)) { + throw new FS.ErrnoError(43); + } + if (flags & 2) { + // MAP_PRIVATE calls need not to be synced back to underlying fs + return 0; + } + var buffer = HEAPU8.slice(addr, addr + len); + FS.msync(stream, buffer, offset, len, flags); + }, + getStreamFromFD(fd) { + var stream = FS.getStreamChecked(fd); + return stream; + }, + varargs:undefined, + getStr(ptr) { + var ret = UTF8ToString(ptr); + return ret; + }, + }; + function ___syscall_chmod(path, mode) { + try { + + path = SYSCALLS.getStr(path); + FS.chmod(path, mode); + return 0; + } catch (e) { + if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + return -e.errno; + } + } + + function ___syscall_fchmod(fd, mode) { + try { + + FS.fchmod(fd, mode); + return 0; + } catch (e) { + if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + return -e.errno; + } + } + + /** @suppress {duplicate } */ + var syscallGetVarargI = () => { + assert(SYSCALLS.varargs != undefined); + // the `+` prepended here is necessary to convince the JSCompiler that varargs is indeed a number. + var ret = HEAP32[((+SYSCALLS.varargs)>>2)]; + SYSCALLS.varargs += 4; + return ret; + }; + var syscallGetVarargP = syscallGetVarargI; + + + function ___syscall_fcntl64(fd, cmd, varargs) { + SYSCALLS.varargs = varargs; + try { + + var stream = SYSCALLS.getStreamFromFD(fd); + switch (cmd) { + case 0: { + var arg = syscallGetVarargI(); + if (arg < 0) { + return -28; + } + while (FS.streams[arg]) { + arg++; + } + var newStream; + newStream = FS.dupStream(stream, arg); + return newStream.fd; + } + case 1: + case 2: + return 0; // FD_CLOEXEC makes no sense for a single process. + case 3: + return stream.flags; + case 4: { + var arg = syscallGetVarargI(); + stream.flags |= arg; + return 0; + } + case 12: { + var arg = syscallGetVarargP(); + var offset = 0; + // We're always unlocked. + HEAP16[(((arg)+(offset))>>1)] = 2; + return 0; + } + case 13: + case 14: + // Pretend that the locking is successful. These are process-level locks, + // and Emscripten programs are a single process. If we supported linking a + // filesystem between programs, we'd need to do more here. + // See https://github.com/emscripten-core/emscripten/issues/23697 + return 0; + } + return -28; + } catch (e) { + if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + return -e.errno; + } + } + + function ___syscall_fstat64(fd, buf) { + try { + + return SYSCALLS.writeStat(buf, FS.fstat(fd)); + } catch (e) { + if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + return -e.errno; + } + } + + + function ___syscall_ioctl(fd, op, varargs) { + SYSCALLS.varargs = varargs; + try { + + var stream = SYSCALLS.getStreamFromFD(fd); + switch (op) { + case 21509: { + if (!stream.tty) return -59; + return 0; + } + case 21505: { + if (!stream.tty) return -59; + if (stream.tty.ops.ioctl_tcgets) { + var termios = stream.tty.ops.ioctl_tcgets(stream); + var argp = syscallGetVarargP(); + HEAP32[((argp)>>2)] = termios.c_iflag || 0; + HEAP32[(((argp)+(4))>>2)] = termios.c_oflag || 0; + HEAP32[(((argp)+(8))>>2)] = termios.c_cflag || 0; + HEAP32[(((argp)+(12))>>2)] = termios.c_lflag || 0; + for (var i = 0; i < 32; i++) { + HEAP8[(argp + i)+(17)] = termios.c_cc[i] || 0; + } + return 0; + } + return 0; + } + case 21510: + case 21511: + case 21512: { + if (!stream.tty) return -59; + return 0; // no-op, not actually adjusting terminal settings + } + case 21506: + case 21507: + case 21508: { + if (!stream.tty) return -59; + if (stream.tty.ops.ioctl_tcsets) { + var argp = syscallGetVarargP(); + var c_iflag = HEAP32[((argp)>>2)]; + var c_oflag = HEAP32[(((argp)+(4))>>2)]; + var c_cflag = HEAP32[(((argp)+(8))>>2)]; + var c_lflag = HEAP32[(((argp)+(12))>>2)]; + var c_cc = [] + for (var i = 0; i < 32; i++) { + c_cc.push(HEAP8[(argp + i)+(17)]); + } + return stream.tty.ops.ioctl_tcsets(stream.tty, op, { c_iflag, c_oflag, c_cflag, c_lflag, c_cc }); + } + return 0; // no-op, not actually adjusting terminal settings + } + case 21519: { + if (!stream.tty) return -59; + var argp = syscallGetVarargP(); + HEAP32[((argp)>>2)] = 0; + return 0; + } + case 21520: { + if (!stream.tty) return -59; + return -28; // not supported + } + case 21531: { + var argp = syscallGetVarargP(); + return FS.ioctl(stream, op, argp); + } + case 21523: { + // TODO: in theory we should write to the winsize struct that gets + // passed in, but for now musl doesn't read anything on it + if (!stream.tty) return -59; + if (stream.tty.ops.ioctl_tiocgwinsz) { + var winsize = stream.tty.ops.ioctl_tiocgwinsz(stream.tty); + var argp = syscallGetVarargP(); + HEAP16[((argp)>>1)] = winsize[0]; + HEAP16[(((argp)+(2))>>1)] = winsize[1]; + } + return 0; + } + case 21524: { + // TODO: technically, this ioctl call should change the window size. + // but, since emscripten doesn't have any concept of a terminal window + // yet, we'll just silently throw it away as we do TIOCGWINSZ + if (!stream.tty) return -59; + return 0; + } + case 21515: { + if (!stream.tty) return -59; + return 0; + } + default: return -28; // not supported + } + } catch (e) { + if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + return -e.errno; + } + } + + function ___syscall_lstat64(path, buf) { + try { + + path = SYSCALLS.getStr(path); + return SYSCALLS.writeStat(buf, FS.lstat(path)); + } catch (e) { + if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + return -e.errno; + } + } + + function ___syscall_newfstatat(dirfd, path, buf, flags) { + try { + + path = SYSCALLS.getStr(path); + var nofollow = flags & 256; + var allowEmpty = flags & 4096; + flags = flags & (~6400); + assert(!flags, `unknown flags in __syscall_newfstatat: ${flags}`); + path = SYSCALLS.calculateAt(dirfd, path, allowEmpty); + return SYSCALLS.writeStat(buf, nofollow ? FS.lstat(path) : FS.stat(path)); + } catch (e) { + if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + return -e.errno; + } + } + + + function ___syscall_openat(dirfd, path, flags, varargs) { + SYSCALLS.varargs = varargs; + try { + + path = SYSCALLS.getStr(path); + path = SYSCALLS.calculateAt(dirfd, path); + var mode = varargs ? syscallGetVarargI() : 0; + return FS.open(path, flags, mode).fd; + } catch (e) { + if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + return -e.errno; + } + } + + function ___syscall_renameat(olddirfd, oldpath, newdirfd, newpath) { + try { + + oldpath = SYSCALLS.getStr(oldpath); + newpath = SYSCALLS.getStr(newpath); + oldpath = SYSCALLS.calculateAt(olddirfd, oldpath); + newpath = SYSCALLS.calculateAt(newdirfd, newpath); + FS.rename(oldpath, newpath); + return 0; + } catch (e) { + if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + return -e.errno; + } + } + + function ___syscall_rmdir(path) { + try { + + path = SYSCALLS.getStr(path); + FS.rmdir(path); + return 0; + } catch (e) { + if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + return -e.errno; + } + } + + function ___syscall_stat64(path, buf) { + try { + + path = SYSCALLS.getStr(path); + return SYSCALLS.writeStat(buf, FS.stat(path)); + } catch (e) { + if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + return -e.errno; + } + } + + function ___syscall_unlinkat(dirfd, path, flags) { + try { + + path = SYSCALLS.getStr(path); + path = SYSCALLS.calculateAt(dirfd, path); + if (flags === 0) { + FS.unlink(path); + } else if (flags === 512) { + FS.rmdir(path); + } else { + abort('Invalid flags passed to unlinkat'); + } + return 0; + } catch (e) { + if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + return -e.errno; + } + } + + var __abort_js = () => + abort('native code called abort()'); + + var isLeapYear = (year) => year%4 === 0 && (year%100 !== 0 || year%400 === 0); + + var MONTH_DAYS_LEAP_CUMULATIVE = [0,31,60,91,121,152,182,213,244,274,305,335]; + + var MONTH_DAYS_REGULAR_CUMULATIVE = [0,31,59,90,120,151,181,212,243,273,304,334]; + var ydayFromDate = (date) => { + var leap = isLeapYear(date.getFullYear()); + var monthDaysCumulative = (leap ? MONTH_DAYS_LEAP_CUMULATIVE : MONTH_DAYS_REGULAR_CUMULATIVE); + var yday = monthDaysCumulative[date.getMonth()] + date.getDate() - 1; // -1 since it's days since Jan 1 + + return yday; + }; + + var INT53_MAX = 9007199254740992; + + var INT53_MIN = -9007199254740992; + var bigintToI53Checked = (num) => (num < INT53_MIN || num > INT53_MAX) ? NaN : Number(num); + function __localtime_js(time, tmPtr) { + time = bigintToI53Checked(time); + + + var date = new Date(time*1000); + HEAP32[((tmPtr)>>2)] = date.getSeconds(); + HEAP32[(((tmPtr)+(4))>>2)] = date.getMinutes(); + HEAP32[(((tmPtr)+(8))>>2)] = date.getHours(); + HEAP32[(((tmPtr)+(12))>>2)] = date.getDate(); + HEAP32[(((tmPtr)+(16))>>2)] = date.getMonth(); + HEAP32[(((tmPtr)+(20))>>2)] = date.getFullYear()-1900; + HEAP32[(((tmPtr)+(24))>>2)] = date.getDay(); + + var yday = ydayFromDate(date)|0; + HEAP32[(((tmPtr)+(28))>>2)] = yday; + HEAP32[(((tmPtr)+(36))>>2)] = -(date.getTimezoneOffset() * 60); + + // Attention: DST is in December in South, and some regions don't have DST at all. + var start = new Date(date.getFullYear(), 0, 1); + var summerOffset = new Date(date.getFullYear(), 6, 1).getTimezoneOffset(); + var winterOffset = start.getTimezoneOffset(); + var dst = (summerOffset != winterOffset && date.getTimezoneOffset() == Math.min(winterOffset, summerOffset))|0; + HEAP32[(((tmPtr)+(32))>>2)] = dst; + ; + } + + + var __mktime_js = function(tmPtr) { + + var ret = (() => { + var date = new Date(HEAP32[(((tmPtr)+(20))>>2)] + 1900, + HEAP32[(((tmPtr)+(16))>>2)], + HEAP32[(((tmPtr)+(12))>>2)], + HEAP32[(((tmPtr)+(8))>>2)], + HEAP32[(((tmPtr)+(4))>>2)], + HEAP32[((tmPtr)>>2)], + 0); + + // There's an ambiguous hour when the time goes back; the tm_isdst field is + // used to disambiguate it. Date() basically guesses, so we fix it up if it + // guessed wrong, or fill in tm_isdst with the guess if it's -1. + var dst = HEAP32[(((tmPtr)+(32))>>2)]; + var guessedOffset = date.getTimezoneOffset(); + var start = new Date(date.getFullYear(), 0, 1); + var summerOffset = new Date(date.getFullYear(), 6, 1).getTimezoneOffset(); + var winterOffset = start.getTimezoneOffset(); + var dstOffset = Math.min(winterOffset, summerOffset); // DST is in December in South + if (dst < 0) { + // Attention: some regions don't have DST at all. + HEAP32[(((tmPtr)+(32))>>2)] = Number(summerOffset != winterOffset && dstOffset == guessedOffset); + } else if ((dst > 0) != (dstOffset == guessedOffset)) { + var nonDstOffset = Math.max(winterOffset, summerOffset); + var trueOffset = dst > 0 ? dstOffset : nonDstOffset; + // Don't try setMinutes(date.getMinutes() + ...) -- it's messed up. + date.setTime(date.getTime() + (trueOffset - guessedOffset)*60000); + } + + HEAP32[(((tmPtr)+(24))>>2)] = date.getDay(); + var yday = ydayFromDate(date)|0; + HEAP32[(((tmPtr)+(28))>>2)] = yday; + // To match expected behavior, update fields from date + HEAP32[((tmPtr)>>2)] = date.getSeconds(); + HEAP32[(((tmPtr)+(4))>>2)] = date.getMinutes(); + HEAP32[(((tmPtr)+(8))>>2)] = date.getHours(); + HEAP32[(((tmPtr)+(12))>>2)] = date.getDate(); + HEAP32[(((tmPtr)+(16))>>2)] = date.getMonth(); + HEAP32[(((tmPtr)+(20))>>2)] = date.getYear(); + + var timeMs = date.getTime(); + if (isNaN(timeMs)) { + return -1; + } + // Return time in microseconds + return timeMs / 1000; + })(); + return BigInt(ret); + }; + + var stringToUTF8 = (str, outPtr, maxBytesToWrite) => { + assert(typeof maxBytesToWrite == 'number', 'stringToUTF8(str, outPtr, maxBytesToWrite) is missing the third parameter that specifies the length of the output buffer!'); + return stringToUTF8Array(str, HEAPU8, outPtr, maxBytesToWrite); + }; + + var __tzset_js = (timezone, daylight, std_name, dst_name) => { + // TODO: Use (malleable) environment variables instead of system settings. + var currentYear = new Date().getFullYear(); + var winter = new Date(currentYear, 0, 1); + var summer = new Date(currentYear, 6, 1); + var winterOffset = winter.getTimezoneOffset(); + var summerOffset = summer.getTimezoneOffset(); + + // Local standard timezone offset. Local standard time is not adjusted for + // daylight savings. This code uses the fact that getTimezoneOffset returns + // a greater value during Standard Time versus Daylight Saving Time (DST). + // Thus it determines the expected output during Standard Time, and it + // compares whether the output of the given date the same (Standard) or less + // (DST). + var stdTimezoneOffset = Math.max(winterOffset, summerOffset); + + // timezone is specified as seconds west of UTC ("The external variable + // `timezone` shall be set to the difference, in seconds, between + // Coordinated Universal Time (UTC) and local standard time."), the same + // as returned by stdTimezoneOffset. + // See http://pubs.opengroup.org/onlinepubs/009695399/functions/tzset.html + HEAPU32[((timezone)>>2)] = stdTimezoneOffset * 60; + + HEAP32[((daylight)>>2)] = Number(winterOffset != summerOffset); + + var extractZone = (timezoneOffset) => { + // Why inverse sign? + // Read here https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/getTimezoneOffset + var sign = timezoneOffset >= 0 ? "-" : "+"; + + var absOffset = Math.abs(timezoneOffset) + var hours = String(Math.floor(absOffset / 60)).padStart(2, "0"); + var minutes = String(absOffset % 60).padStart(2, "0"); + + return `UTC${sign}${hours}${minutes}`; + } + + var winterName = extractZone(winterOffset); + var summerName = extractZone(summerOffset); + assert(winterName); + assert(summerName); + assert(lengthBytesUTF8(winterName) <= 16, `timezone name truncated to fit in TZNAME_MAX (${winterName})`); + assert(lengthBytesUTF8(summerName) <= 16, `timezone name truncated to fit in TZNAME_MAX (${summerName})`); + if (summerOffset < winterOffset) { + // Northern hemisphere + stringToUTF8(winterName, std_name, 17); + stringToUTF8(summerName, dst_name, 17); + } else { + stringToUTF8(winterName, dst_name, 17); + stringToUTF8(summerName, std_name, 17); + } + }; + + var _emscripten_date_now = () => Date.now(); + + var abortOnCannotGrowMemory = (requestedSize) => { + abort(`Cannot enlarge memory arrays to size ${requestedSize} bytes (OOM). Either (1) compile with -sINITIAL_MEMORY=X with X higher than the current value ${HEAP8.length}, (2) compile with -sALLOW_MEMORY_GROWTH which allows increasing the size at runtime, or (3) if you want malloc to return NULL (0) instead of this abort, compile with -sABORTING_MALLOC=0`); + }; + var _emscripten_resize_heap = (requestedSize) => { + var oldSize = HEAPU8.length; + // With CAN_ADDRESS_2GB or MEMORY64, pointers are already unsigned. + requestedSize >>>= 0; + abortOnCannotGrowMemory(requestedSize); + }; + + + var runtimeKeepaliveCounter = 0; + var keepRuntimeAlive = () => noExitRuntime || runtimeKeepaliveCounter > 0; + var _proc_exit = (code) => { + EXITSTATUS = code; + if (!keepRuntimeAlive()) { + Module['onExit']?.(code); + ABORT = true; + } + quit_(code, new ExitStatus(code)); + }; + + + /** @suppress {duplicate } */ + /** @param {boolean|number=} implicit */ + var exitJS = (status, implicit) => { + EXITSTATUS = status; + + checkUnflushedContent(); + + // if exit() was called explicitly, warn the user if the runtime isn't actually being shut down + if (keepRuntimeAlive() && !implicit) { + var msg = `program exited (with status: ${status}), but keepRuntimeAlive() is set (counter=${runtimeKeepaliveCounter}) due to an async operation, so halting execution but not exiting the runtime or preventing further async execution (you can use emscripten_force_exit, if you want to force a true shutdown)`; + err(msg); + } + + _proc_exit(status); + }; + var _exit = exitJS; + + function _fd_close(fd) { + try { + + var stream = SYSCALLS.getStreamFromFD(fd); + FS.close(stream); + return 0; + } catch (e) { + if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + return e.errno; + } + } + + function _fd_fdstat_get(fd, pbuf) { + try { + + var rightsBase = 0; + var rightsInheriting = 0; + var flags = 0; + { + var stream = SYSCALLS.getStreamFromFD(fd); + // All character devices are terminals (other things a Linux system would + // assume is a character device, like the mouse, we have special APIs for). + var type = stream.tty ? 2 : + FS.isDir(stream.mode) ? 3 : + FS.isLink(stream.mode) ? 7 : + 4; + } + HEAP8[pbuf] = type; + HEAP16[(((pbuf)+(2))>>1)] = flags; + HEAP64[(((pbuf)+(8))>>3)] = BigInt(rightsBase); + HEAP64[(((pbuf)+(16))>>3)] = BigInt(rightsInheriting); + return 0; + } catch (e) { + if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + return e.errno; + } + } + + /** @param {number=} offset */ + var doReadv = (stream, iov, iovcnt, offset) => { + var ret = 0; + for (var i = 0; i < iovcnt; i++) { + var ptr = HEAPU32[((iov)>>2)]; + var len = HEAPU32[(((iov)+(4))>>2)]; + iov += 8; + var curr = FS.read(stream, HEAP8, ptr, len, offset); + if (curr < 0) return -1; + ret += curr; + if (curr < len) break; // nothing more to read + if (typeof offset != 'undefined') { + offset += curr; + } + } + return ret; + }; + + function _fd_read(fd, iov, iovcnt, pnum) { + try { + + var stream = SYSCALLS.getStreamFromFD(fd); + var num = doReadv(stream, iov, iovcnt); + HEAPU32[((pnum)>>2)] = num; + return 0; + } catch (e) { + if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + return e.errno; + } + } + + + function _fd_seek(fd, offset, whence, newOffset) { + offset = bigintToI53Checked(offset); + + + try { + + if (isNaN(offset)) return 61; + var stream = SYSCALLS.getStreamFromFD(fd); + FS.llseek(stream, offset, whence); + HEAP64[((newOffset)>>3)] = BigInt(stream.position); + if (stream.getdents && offset === 0 && whence === 0) stream.getdents = null; // reset readdir state + return 0; + } catch (e) { + if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + return e.errno; + } + ; + } + + /** @param {number=} offset */ + var doWritev = (stream, iov, iovcnt, offset) => { + var ret = 0; + for (var i = 0; i < iovcnt; i++) { + var ptr = HEAPU32[((iov)>>2)]; + var len = HEAPU32[(((iov)+(4))>>2)]; + iov += 8; + var curr = FS.write(stream, HEAP8, ptr, len, offset); + if (curr < 0) return -1; + ret += curr; + if (curr < len) { + // No more space to write. + break; + } + if (typeof offset != 'undefined') { + offset += curr; + } + } + return ret; + }; + + function _fd_write(fd, iov, iovcnt, pnum) { + try { + + var stream = SYSCALLS.getStreamFromFD(fd); + var num = doWritev(stream, iov, iovcnt); + HEAPU32[((pnum)>>2)] = num; + return 0; + } catch (e) { + if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + return e.errno; + } + } + + + var handleException = (e) => { + // Certain exception types we do not treat as errors since they are used for + // internal control flow. + // 1. ExitStatus, which is thrown by exit() + // 2. "unwind", which is thrown by emscripten_unwind_to_js_event_loop() and others + // that wish to return to JS event loop. + if (e instanceof ExitStatus || e == 'unwind') { + return EXITSTATUS; + } + checkStackCookie(); + if (e instanceof WebAssembly.RuntimeError) { + if (_emscripten_stack_get_current() <= 0) { + err('Stack overflow detected. You can try increasing -sSTACK_SIZE (currently set to 65536)'); + } + } + quit_(1, e); + }; + + + + var stackAlloc = (sz) => __emscripten_stack_alloc(sz); + var stringToUTF8OnStack = (str) => { + var size = lengthBytesUTF8(str) + 1; + var ret = stackAlloc(size); + stringToUTF8(str, ret, size); + return ret; + }; + + FS.createPreloadedFile = FS_createPreloadedFile; + FS.staticInit(); + // Set module methods based on EXPORTED_RUNTIME_METHODS + ; +// End JS library code + +function checkIncomingModuleAPI() { + ignoredModuleProp('fetchSettings'); +} +var wasmImports = { + /** @export */ + __syscall_chmod: ___syscall_chmod, + /** @export */ + __syscall_fchmod: ___syscall_fchmod, + /** @export */ + __syscall_fcntl64: ___syscall_fcntl64, + /** @export */ + __syscall_fstat64: ___syscall_fstat64, + /** @export */ + __syscall_ioctl: ___syscall_ioctl, + /** @export */ + __syscall_lstat64: ___syscall_lstat64, + /** @export */ + __syscall_newfstatat: ___syscall_newfstatat, + /** @export */ + __syscall_openat: ___syscall_openat, + /** @export */ + __syscall_renameat: ___syscall_renameat, + /** @export */ + __syscall_rmdir: ___syscall_rmdir, + /** @export */ + __syscall_stat64: ___syscall_stat64, + /** @export */ + __syscall_unlinkat: ___syscall_unlinkat, + /** @export */ + _abort_js: __abort_js, + /** @export */ + _localtime_js: __localtime_js, + /** @export */ + _mktime_js: __mktime_js, + /** @export */ + _tzset_js: __tzset_js, + /** @export */ + emscripten_date_now: _emscripten_date_now, + /** @export */ + emscripten_resize_heap: _emscripten_resize_heap, + /** @export */ + exit: _exit, + /** @export */ + fd_close: _fd_close, + /** @export */ + fd_fdstat_get: _fd_fdstat_get, + /** @export */ + fd_read: _fd_read, + /** @export */ + fd_seek: _fd_seek, + /** @export */ + fd_write: _fd_write +}; +var wasmExports; +createWasm(); +var ___wasm_call_ctors = createExportWrapper('__wasm_call_ctors', 0); +var _main = Module['_main'] = createExportWrapper('__main_argc_argv', 2); +var _strerror = createExportWrapper('strerror', 1); +var _fflush = createExportWrapper('fflush', 1); +var _emscripten_stack_init = () => (_emscripten_stack_init = wasmExports['emscripten_stack_init'])(); +var _emscripten_stack_get_free = () => (_emscripten_stack_get_free = wasmExports['emscripten_stack_get_free'])(); +var _emscripten_stack_get_base = () => (_emscripten_stack_get_base = wasmExports['emscripten_stack_get_base'])(); +var _emscripten_stack_get_end = () => (_emscripten_stack_get_end = wasmExports['emscripten_stack_get_end'])(); +var __emscripten_stack_restore = (a0) => (__emscripten_stack_restore = wasmExports['_emscripten_stack_restore'])(a0); +var __emscripten_stack_alloc = (a0) => (__emscripten_stack_alloc = wasmExports['_emscripten_stack_alloc'])(a0); +var _emscripten_stack_get_current = () => (_emscripten_stack_get_current = wasmExports['emscripten_stack_get_current'])(); + + +// include: postamble.js +// === Auto-generated postamble setup entry stuff === + +var missingLibrarySymbols = [ + 'writeI53ToI64', + 'writeI53ToI64Clamped', + 'writeI53ToI64Signaling', + 'writeI53ToU64Clamped', + 'writeI53ToU64Signaling', + 'readI53FromI64', + 'readI53FromU64', + 'convertI32PairToI53', + 'convertI32PairToI53Checked', + 'convertU32PairToI53', + 'getTempRet0', + 'setTempRet0', + 'zeroMemory', + 'getHeapMax', + 'growMemory', + 'inetPton4', + 'inetNtop4', + 'inetPton6', + 'inetNtop6', + 'readSockaddr', + 'writeSockaddr', + 'emscriptenLog', + 'readEmAsmArgs', + 'jstoi_q', + 'getExecutableName', + 'listenOnce', + 'autoResumeAudioContext', + 'getDynCaller', + 'dynCall', + 'runtimeKeepalivePush', + 'runtimeKeepalivePop', + 'callUserCallback', + 'maybeExit', + 'asmjsMangle', + 'alignMemory', + 'HandleAllocator', + 'getNativeTypeSize', + 'addOnInit', + 'addOnPostCtor', + 'addOnPreMain', + 'addOnExit', + 'STACK_SIZE', + 'STACK_ALIGN', + 'POINTER_SIZE', + 'ASSERTIONS', + 'getCFunc', + 'ccall', + 'cwrap', + 'uleb128Encode', + 'sigToWasmTypes', + 'generateFuncType', + 'convertJsFunctionToWasm', + 'getEmptyTableSlot', + 'updateTableMap', + 'getFunctionAddress', + 'addFunction', + 'removeFunction', + 'reallyNegative', + 'unSign', + 'strLen', + 'reSign', + 'formatString', + 'intArrayToString', + 'AsciiToString', + 'stringToAscii', + 'UTF16ToString', + 'stringToUTF16', + 'lengthBytesUTF16', + 'UTF32ToString', + 'stringToUTF32', + 'lengthBytesUTF32', + 'stringToNewUTF8', + 'writeArrayToMemory', + 'registerKeyEventCallback', + 'maybeCStringToJsString', + 'findEventTarget', + 'getBoundingClientRect', + 'fillMouseEventData', + 'registerMouseEventCallback', + 'registerWheelEventCallback', + 'registerUiEventCallback', + 'registerFocusEventCallback', + 'fillDeviceOrientationEventData', + 'registerDeviceOrientationEventCallback', + 'fillDeviceMotionEventData', + 'registerDeviceMotionEventCallback', + 'screenOrientation', + 'fillOrientationChangeEventData', + 'registerOrientationChangeEventCallback', + 'fillFullscreenChangeEventData', + 'registerFullscreenChangeEventCallback', + 'JSEvents_requestFullscreen', + 'JSEvents_resizeCanvasForFullscreen', + 'registerRestoreOldStyle', + 'hideEverythingExceptGivenElement', + 'restoreHiddenElements', + 'setLetterbox', + 'softFullscreenResizeWebGLRenderTarget', + 'doRequestFullscreen', + 'fillPointerlockChangeEventData', + 'registerPointerlockChangeEventCallback', + 'registerPointerlockErrorEventCallback', + 'requestPointerLock', + 'fillVisibilityChangeEventData', + 'registerVisibilityChangeEventCallback', + 'registerTouchEventCallback', + 'fillGamepadEventData', + 'registerGamepadEventCallback', + 'registerBeforeUnloadEventCallback', + 'fillBatteryEventData', + 'battery', + 'registerBatteryEventCallback', + 'setCanvasElementSize', + 'getCanvasElementSize', + 'jsStackTrace', + 'getCallstack', + 'convertPCtoSourceLocation', + 'getEnvStrings', + 'checkWasiClock', + 'wasiRightsToMuslOFlags', + 'wasiOFlagsToMuslOFlags', + 'safeSetTimeout', + 'setImmediateWrapped', + 'safeRequestAnimationFrame', + 'clearImmediateWrapped', + 'registerPostMainLoop', + 'registerPreMainLoop', + 'getPromise', + 'makePromise', + 'idsToPromises', + 'makePromiseCallback', + 'ExceptionInfo', + 'findMatchingCatch', + 'Browser_asyncPrepareDataCounter', + 'arraySum', + 'addDays', + 'getSocketFromFD', + 'getSocketAddress', + 'FS_unlink', + 'FS_mkdirTree', + '_setNetworkCallback', + 'heapObjectForWebGLType', + 'toTypedArrayIndex', + 'webgl_enable_ANGLE_instanced_arrays', + 'webgl_enable_OES_vertex_array_object', + 'webgl_enable_WEBGL_draw_buffers', + 'webgl_enable_WEBGL_multi_draw', + 'webgl_enable_EXT_polygon_offset_clamp', + 'webgl_enable_EXT_clip_control', + 'webgl_enable_WEBGL_polygon_mode', + 'emscriptenWebGLGet', + 'computeUnpackAlignedImageSize', + 'colorChannelsInGlTextureFormat', + 'emscriptenWebGLGetTexPixelData', + 'emscriptenWebGLGetUniform', + 'webglGetUniformLocation', + 'webglPrepareUniformLocationsBeforeFirstUse', + 'webglGetLeftBracePos', + 'emscriptenWebGLGetVertexAttrib', + '__glGetActiveAttribOrUniform', + 'writeGLArray', + 'registerWebGlEventCallback', + 'runAndAbortIfError', + 'ALLOC_NORMAL', + 'ALLOC_STACK', + 'allocate', + 'writeStringToMemory', + 'writeAsciiToMemory', + 'demangle', + 'stackTrace', +]; +missingLibrarySymbols.forEach(missingLibrarySymbol) + +var unexportedSymbols = [ + 'run', + 'addRunDependency', + 'removeRunDependency', + 'out', + 'err', + 'callMain', + 'abort', + 'wasmMemory', + 'wasmExports', + 'writeStackCookie', + 'checkStackCookie', + 'INT53_MAX', + 'INT53_MIN', + 'bigintToI53Checked', + 'stackSave', + 'stackRestore', + 'stackAlloc', + 'ptrToString', + 'exitJS', + 'abortOnCannotGrowMemory', + 'ENV', + 'ERRNO_CODES', + 'strError', + 'DNS', + 'Protocols', + 'Sockets', + 'timers', + 'warnOnce', + 'readEmAsmArgsArray', + 'jstoi_s', + 'handleException', + 'keepRuntimeAlive', + 'asyncLoad', + 'mmapAlloc', + 'wasmTable', + 'noExitRuntime', + 'addOnPreRun', + 'addOnPostRun', + 'freeTableIndexes', + 'functionsInTableMap', + 'setValue', + 'getValue', + 'PATH', + 'PATH_FS', + 'UTF8Decoder', + 'UTF8ArrayToString', + 'UTF8ToString', + 'stringToUTF8Array', + 'stringToUTF8', + 'lengthBytesUTF8', + 'intArrayFromString', + 'UTF16Decoder', + 'stringToUTF8OnStack', + 'JSEvents', + 'specialHTMLTargets', + 'findCanvasEventTarget', + 'currentFullscreenStrategy', + 'restoreOldWindowedStyle', + 'UNWIND_CACHE', + 'ExitStatus', + 'doReadv', + 'doWritev', + 'initRandomFill', + 'randomFill', + 'emSetImmediate', + 'emClearImmediate_deps', + 'emClearImmediate', + 'promiseMap', + 'uncaughtExceptionCount', + 'exceptionLast', + 'exceptionCaught', + 'Browser', + 'getPreloadedImageData__data', + 'wget', + 'MONTH_DAYS_REGULAR', + 'MONTH_DAYS_LEAP', + 'MONTH_DAYS_REGULAR_CUMULATIVE', + 'MONTH_DAYS_LEAP_CUMULATIVE', + 'isLeapYear', + 'ydayFromDate', + 'SYSCALLS', + 'preloadPlugins', + 'FS_createPreloadedFile', + 'FS_modeStringToFlags', + 'FS_getMode', + 'FS_stdin_getChar_buffer', + 'FS_stdin_getChar', + 'FS_createPath', + 'FS_createDevice', + 'FS_readFile', + 'FS', + 'FS_createDataFile', + 'FS_createLazyFile', + 'MEMFS', + 'TTY', + 'PIPEFS', + 'SOCKFS', + 'tempFixedLengthArray', + 'miniTempWebGLFloatBuffers', + 'miniTempWebGLIntBuffers', + 'GL', + 'AL', + 'GLUT', + 'EGL', + 'GLEW', + 'IDBStore', + 'SDL', + 'SDL_gfx', + 'allocateUTF8', + 'allocateUTF8OnStack', + 'print', + 'printErr', +]; +unexportedSymbols.forEach(unexportedRuntimeSymbol); + + + +var calledRun; + +function callMain(args = []) { + assert(runDependencies == 0, 'cannot call main when async dependencies remain! (listen on Module["onRuntimeInitialized"])'); + assert(typeof onPreRuns === 'undefined' || onPreRuns.length == 0, 'cannot call main when preRun functions remain to be called'); + + var entryFunction = _main; + + args.unshift(thisProgram); + + var argc = args.length; + var argv = stackAlloc((argc + 1) * 4); + var argv_ptr = argv; + args.forEach((arg) => { + HEAPU32[((argv_ptr)>>2)] = stringToUTF8OnStack(arg); + argv_ptr += 4; + }); + HEAPU32[((argv_ptr)>>2)] = 0; + + try { + + var ret = entryFunction(argc, argv); + + // if we're not running an evented main loop, it's time to exit + exitJS(ret, /* implicit = */ true); + return ret; + } catch (e) { + return handleException(e); + } +} + +function stackCheckInit() { + // This is normally called automatically during __wasm_call_ctors but need to + // get these values before even running any of the ctors so we call it redundantly + // here. + _emscripten_stack_init(); + // TODO(sbc): Move writeStackCookie to native to to avoid this. + writeStackCookie(); +} + +function run(args = arguments_) { + + if (runDependencies > 0) { + dependenciesFulfilled = run; + return; + } + + stackCheckInit(); + + preRun(); + + // a preRun added a dependency, run will be called later + if (runDependencies > 0) { + dependenciesFulfilled = run; + return; + } + + function doRun() { + // run may have just been called through dependencies being fulfilled just in this very frame, + // or while the async setStatus time below was happening + assert(!calledRun); + calledRun = true; + Module['calledRun'] = true; + + if (ABORT) return; + + initRuntime(); + + preMain(); + + Module['onRuntimeInitialized']?.(); + consumedModuleProp('onRuntimeInitialized'); + + var noInitialRun = Module['noInitialRun'];legacyModuleProp('noInitialRun', 'noInitialRun'); + if (!noInitialRun) callMain(args); + + postRun(); + } + + if (Module['setStatus']) { + Module['setStatus']('Running...'); + setTimeout(() => { + setTimeout(() => Module['setStatus'](''), 1); + doRun(); + }, 1); + } else + { + doRun(); + } + checkStackCookie(); +} + +function checkUnflushedContent() { + // Compiler settings do not allow exiting the runtime, so flushing + // the streams is not possible. but in ASSERTIONS mode we check + // if there was something to flush, and if so tell the user they + // should request that the runtime be exitable. + // Normally we would not even include flush() at all, but in ASSERTIONS + // builds we do so just for this check, and here we see if there is any + // content to flush, that is, we check if there would have been + // something a non-ASSERTIONS build would have not seen. + // How we flush the streams depends on whether we are in SYSCALLS_REQUIRE_FILESYSTEM=0 + // mode (which has its own special function for this; otherwise, all + // the code is inside libc) + var oldOut = out; + var oldErr = err; + var has = false; + out = err = (x) => { + has = true; + } + try { // it doesn't matter if it fails + _fflush(0); + // also flush in the JS FS layer + ['stdout', 'stderr'].forEach((name) => { + var info = FS.analyzePath('/dev/' + name); + if (!info) return; + var stream = info.object; + var rdev = stream.rdev; + var tty = TTY.ttys[rdev]; + if (tty?.output?.length) { + has = true; + } + }); + } catch(e) {} + out = oldOut; + err = oldErr; + if (has) { + warnOnce('stdio streams had content in them that was not flushed. you should set EXIT_RUNTIME to 1 (see the Emscripten FAQ), or make sure to emit a newline when you printf etc.'); + } +} + +if (Module['preInit']) { + if (typeof Module['preInit'] == 'function') Module['preInit'] = [Module['preInit']]; + while (Module['preInit'].length > 0) { + Module['preInit'].pop()(); + } +} +consumedModuleProp('preInit'); + +run(); + +// end include: postamble.js + diff --git a/thirdparty/libzip-1.11.3/build-emcmake/src/zipcmp.wasm b/thirdparty/libzip-1.11.3/build-emcmake/src/zipcmp.wasm new file mode 100755 index 0000000000000000000000000000000000000000..7729523a678dce62982c3df7732e1ab252bb6175 GIT binary patch literal 412967 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 TiqXQS5|*Yg3oMHkOu_#H+m9ju literal 0 HcmV?d00001 diff --git a/thirdparty/libzip-1.11.3/build-emcmake/src/zipmerge.js b/thirdparty/libzip-1.11.3/build-emcmake/src/zipmerge.js new file mode 100644 index 0000000..a7cf44a --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/src/zipmerge.js @@ -0,0 +1,4814 @@ +// include: shell.js +// The Module object: Our interface to the outside world. We import +// and export values on it. There are various ways Module can be used: +// 1. Not defined. We create it here +// 2. A function parameter, function(moduleArg) => Promise +// 3. pre-run appended it, var Module = {}; ..generated code.. +// 4. External script tag defines var Module. +// We need to check if Module already exists (e.g. case 3 above). +// Substitution will be replaced with actual code on later stage of the build, +// this way Closure Compiler will not mangle it (e.g. case 4. above). +// Note that if you want to run closure, and also to use Module +// after the generated code, you will need to define var Module = {}; +// before the code. Then that object will be used in the code, and you +// can continue to use Module afterwards as well. +var Module = typeof Module != 'undefined' ? Module : {}; + +// Determine the runtime environment we are in. You can customize this by +// setting the ENVIRONMENT setting at compile time (see settings.js). + +// Attempt to auto-detect the environment +var ENVIRONMENT_IS_WEB = typeof window == 'object'; +var ENVIRONMENT_IS_WORKER = typeof WorkerGlobalScope != 'undefined'; +// N.b. Electron.js environment is simultaneously a NODE-environment, but +// also a web environment. +var ENVIRONMENT_IS_NODE = typeof process == 'object' && typeof process.versions == 'object' && typeof process.versions.node == 'string' && process.type != 'renderer'; +var ENVIRONMENT_IS_SHELL = !ENVIRONMENT_IS_WEB && !ENVIRONMENT_IS_NODE && !ENVIRONMENT_IS_WORKER; + +if (ENVIRONMENT_IS_NODE) { + +} + +// --pre-jses are emitted after the Module integration code, so that they can +// refer to Module (if they choose; they can also define Module) + + +// Sometimes an existing Module object exists with properties +// meant to overwrite the default module functionality. Here +// we collect those properties and reapply _after_ we configure +// the current environment's defaults to avoid having to be so +// defensive during initialization. +var moduleOverrides = {...Module}; + +var arguments_ = []; +var thisProgram = './this.program'; +var quit_ = (status, toThrow) => { + throw toThrow; +}; + +// `/` should be present at the end if `scriptDirectory` is not empty +var scriptDirectory = ''; +function locateFile(path) { + if (Module['locateFile']) { + return Module['locateFile'](path, scriptDirectory); + } + return scriptDirectory + path; +} + +// Hooks that are implemented differently in different runtime environments. +var readAsync, readBinary; + +if (ENVIRONMENT_IS_NODE) { + if (typeof process == 'undefined' || !process.release || process.release.name !== 'node') throw new Error('not compiled for this environment (did you build to HTML and try to run it not on the web, or set ENVIRONMENT to something - like node - and run it someplace else - like on the web?)'); + + var nodeVersion = process.versions.node; + var numericVersion = nodeVersion.split('.').slice(0, 3); + numericVersion = (numericVersion[0] * 10000) + (numericVersion[1] * 100) + (numericVersion[2].split('-')[0] * 1); + var minVersion = 160000; + if (numericVersion < 160000) { + throw new Error('This emscripten-generated code requires node v16.0.0 (detected v' + nodeVersion + ')'); + } + + // These modules will usually be used on Node.js. Load them eagerly to avoid + // the complexity of lazy-loading. + var fs = require('fs'); + var nodePath = require('path'); + + scriptDirectory = __dirname + '/'; + +// include: node_shell_read.js +readBinary = (filename) => { + // We need to re-wrap `file://` strings to URLs. + filename = isFileURI(filename) ? new URL(filename) : filename; + var ret = fs.readFileSync(filename); + assert(Buffer.isBuffer(ret)); + return ret; +}; + +readAsync = async (filename, binary = true) => { + // See the comment in the `readBinary` function. + filename = isFileURI(filename) ? new URL(filename) : filename; + var ret = fs.readFileSync(filename, binary ? undefined : 'utf8'); + assert(binary ? Buffer.isBuffer(ret) : typeof ret == 'string'); + return ret; +}; +// end include: node_shell_read.js + if (!Module['thisProgram'] && process.argv.length > 1) { + thisProgram = process.argv[1].replace(/\\/g, '/'); + } + + arguments_ = process.argv.slice(2); + + if (typeof module != 'undefined') { + module['exports'] = Module; + } + + quit_ = (status, toThrow) => { + process.exitCode = status; + throw toThrow; + }; + +} else +if (ENVIRONMENT_IS_SHELL) { + + if ((typeof process == 'object' && typeof require === 'function') || typeof window == 'object' || typeof WorkerGlobalScope != 'undefined') throw new Error('not compiled for this environment (did you build to HTML and try to run it not on the web, or set ENVIRONMENT to something - like node - and run it someplace else - like on the web?)'); + +} else + +// Note that this includes Node.js workers when relevant (pthreads is enabled). +// Node.js workers are detected as a combination of ENVIRONMENT_IS_WORKER and +// ENVIRONMENT_IS_NODE. +if (ENVIRONMENT_IS_WEB || ENVIRONMENT_IS_WORKER) { + if (ENVIRONMENT_IS_WORKER) { // Check worker, not web, since window could be polyfilled + scriptDirectory = self.location.href; + } else if (typeof document != 'undefined' && document.currentScript) { // web + scriptDirectory = document.currentScript.src; + } + // blob urls look like blob:http://site.com/etc/etc and we cannot infer anything from them. + // otherwise, slice off the final part of the url to find the script directory. + // if scriptDirectory does not contain a slash, lastIndexOf will return -1, + // and scriptDirectory will correctly be replaced with an empty string. + // If scriptDirectory contains a query (starting with ?) or a fragment (starting with #), + // they are removed because they could contain a slash. + if (scriptDirectory.startsWith('blob:')) { + scriptDirectory = ''; + } else { + scriptDirectory = scriptDirectory.slice(0, scriptDirectory.replace(/[?#].*/, '').lastIndexOf('/')+1); + } + + if (!(typeof window == 'object' || typeof WorkerGlobalScope != 'undefined')) throw new Error('not compiled for this environment (did you build to HTML and try to run it not on the web, or set ENVIRONMENT to something - like node - and run it someplace else - like on the web?)'); + + { +// include: web_or_worker_shell_read.js +if (ENVIRONMENT_IS_WORKER) { + readBinary = (url) => { + var xhr = new XMLHttpRequest(); + xhr.open('GET', url, false); + xhr.responseType = 'arraybuffer'; + xhr.send(null); + return new Uint8Array(/** @type{!ArrayBuffer} */(xhr.response)); + }; + } + + readAsync = async (url) => { + // Fetch has some additional restrictions over XHR, like it can't be used on a file:// url. + // See https://github.com/github/fetch/pull/92#issuecomment-140665932 + // Cordova or Electron apps are typically loaded from a file:// url. + // So use XHR on webview if URL is a file URL. + if (isFileURI(url)) { + return new Promise((resolve, reject) => { + var xhr = new XMLHttpRequest(); + xhr.open('GET', url, true); + xhr.responseType = 'arraybuffer'; + xhr.onload = () => { + if (xhr.status == 200 || (xhr.status == 0 && xhr.response)) { // file URLs can return 0 + resolve(xhr.response); + return; + } + reject(xhr.status); + }; + xhr.onerror = reject; + xhr.send(null); + }); + } + var response = await fetch(url, { credentials: 'same-origin' }); + if (response.ok) { + return response.arrayBuffer(); + } + throw new Error(response.status + ' : ' + response.url); + }; +// end include: web_or_worker_shell_read.js + } +} else +{ + throw new Error('environment detection error'); +} + +var out = Module['print'] || console.log.bind(console); +var err = Module['printErr'] || console.error.bind(console); + +// Merge back in the overrides +Object.assign(Module, moduleOverrides); +// Free the object hierarchy contained in the overrides, this lets the GC +// reclaim data used. +moduleOverrides = null; +checkIncomingModuleAPI(); + +// Emit code to handle expected values on the Module object. This applies Module.x +// to the proper local x. This has two benefits: first, we only emit it if it is +// expected to arrive, and second, by using a local everywhere else that can be +// minified. + +if (Module['arguments']) arguments_ = Module['arguments'];legacyModuleProp('arguments', 'arguments_'); + +if (Module['thisProgram']) thisProgram = Module['thisProgram'];legacyModuleProp('thisProgram', 'thisProgram'); + +// perform assertions in shell.js after we set up out() and err(), as otherwise if an assertion fails it cannot print the message +// Assertions on removed incoming Module JS APIs. +assert(typeof Module['memoryInitializerPrefixURL'] == 'undefined', 'Module.memoryInitializerPrefixURL option was removed, use Module.locateFile instead'); +assert(typeof Module['pthreadMainPrefixURL'] == 'undefined', 'Module.pthreadMainPrefixURL option was removed, use Module.locateFile instead'); +assert(typeof Module['cdInitializerPrefixURL'] == 'undefined', 'Module.cdInitializerPrefixURL option was removed, use Module.locateFile instead'); +assert(typeof Module['filePackagePrefixURL'] == 'undefined', 'Module.filePackagePrefixURL option was removed, use Module.locateFile instead'); +assert(typeof Module['read'] == 'undefined', 'Module.read option was removed'); +assert(typeof Module['readAsync'] == 'undefined', 'Module.readAsync option was removed (modify readAsync in JS)'); +assert(typeof Module['readBinary'] == 'undefined', 'Module.readBinary option was removed (modify readBinary in JS)'); +assert(typeof Module['setWindowTitle'] == 'undefined', 'Module.setWindowTitle option was removed (modify emscripten_set_window_title in JS)'); +assert(typeof Module['TOTAL_MEMORY'] == 'undefined', 'Module.TOTAL_MEMORY has been renamed Module.INITIAL_MEMORY'); +legacyModuleProp('asm', 'wasmExports'); +legacyModuleProp('readAsync', 'readAsync'); +legacyModuleProp('readBinary', 'readBinary'); +legacyModuleProp('setWindowTitle', 'setWindowTitle'); +var IDBFS = 'IDBFS is no longer included by default; build with -lidbfs.js'; +var PROXYFS = 'PROXYFS is no longer included by default; build with -lproxyfs.js'; +var WORKERFS = 'WORKERFS is no longer included by default; build with -lworkerfs.js'; +var FETCHFS = 'FETCHFS is no longer included by default; build with -lfetchfs.js'; +var ICASEFS = 'ICASEFS is no longer included by default; build with -licasefs.js'; +var JSFILEFS = 'JSFILEFS is no longer included by default; build with -ljsfilefs.js'; +var OPFS = 'OPFS is no longer included by default; build with -lopfs.js'; + +var NODEFS = 'NODEFS is no longer included by default; build with -lnodefs.js'; + +assert(!ENVIRONMENT_IS_SHELL, 'shell environment detected but not enabled at build time. Add `shell` to `-sENVIRONMENT` to enable.'); + +// end include: shell.js + +// include: preamble.js +// === Preamble library stuff === + +// Documentation for the public APIs defined in this file must be updated in: +// site/source/docs/api_reference/preamble.js.rst +// A prebuilt local version of the documentation is available at: +// site/build/text/docs/api_reference/preamble.js.txt +// You can also build docs locally as HTML or other formats in site/ +// An online HTML version (which may be of a different version of Emscripten) +// is up at http://kripken.github.io/emscripten-site/docs/api_reference/preamble.js.html + +var wasmBinary = Module['wasmBinary'];legacyModuleProp('wasmBinary', 'wasmBinary'); + +if (typeof WebAssembly != 'object') { + err('no native wasm support detected'); +} + +// Wasm globals + +var wasmMemory; + +//======================================== +// Runtime essentials +//======================================== + +// whether we are quitting the application. no code should run after this. +// set in exit() and abort() +var ABORT = false; + +// set by exit() and abort(). Passed to 'onExit' handler. +// NOTE: This is also used as the process return code code in shell environments +// but only when noExitRuntime is false. +var EXITSTATUS; + +// In STRICT mode, we only define assert() when ASSERTIONS is set. i.e. we +// don't define it at all in release modes. This matches the behaviour of +// MINIMAL_RUNTIME. +// TODO(sbc): Make this the default even without STRICT enabled. +/** @type {function(*, string=)} */ +function assert(condition, text) { + if (!condition) { + abort('Assertion failed' + (text ? ': ' + text : '')); + } +} + +// We used to include malloc/free by default in the past. Show a helpful error in +// builds with assertions. +function _malloc() { + abort('malloc() called but not included in the build - add `_malloc` to EXPORTED_FUNCTIONS'); +} +function _free() { + // Show a helpful error since we used to include free by default in the past. + abort('free() called but not included in the build - add `_free` to EXPORTED_FUNCTIONS'); +} + +// Memory management + +var HEAP, +/** @type {!Int8Array} */ + HEAP8, +/** @type {!Uint8Array} */ + HEAPU8, +/** @type {!Int16Array} */ + HEAP16, +/** @type {!Uint16Array} */ + HEAPU16, +/** @type {!Int32Array} */ + HEAP32, +/** @type {!Uint32Array} */ + HEAPU32, +/** @type {!Float32Array} */ + HEAPF32, +/* BigInt64Array type is not correctly defined in closure +/** not-@type {!BigInt64Array} */ + HEAP64, +/* BigUint64Array type is not correctly defined in closure +/** not-t@type {!BigUint64Array} */ + HEAPU64, +/** @type {!Float64Array} */ + HEAPF64; + +var runtimeInitialized = false; + +/** + * Indicates whether filename is delivered via file protocol (as opposed to http/https) + * @noinline + */ +var isFileURI = (filename) => filename.startsWith('file://'); + +// include: runtime_shared.js +// include: runtime_stack_check.js +// Initializes the stack cookie. Called at the startup of main and at the startup of each thread in pthreads mode. +function writeStackCookie() { + var max = _emscripten_stack_get_end(); + assert((max & 3) == 0); + // If the stack ends at address zero we write our cookies 4 bytes into the + // stack. This prevents interference with SAFE_HEAP and ASAN which also + // monitor writes to address zero. + if (max == 0) { + max += 4; + } + // The stack grow downwards towards _emscripten_stack_get_end. + // We write cookies to the final two words in the stack and detect if they are + // ever overwritten. + HEAPU32[((max)>>2)] = 0x02135467; + HEAPU32[(((max)+(4))>>2)] = 0x89BACDFE; + // Also test the global address 0 for integrity. + HEAPU32[((0)>>2)] = 1668509029; +} + +function checkStackCookie() { + if (ABORT) return; + var max = _emscripten_stack_get_end(); + // See writeStackCookie(). + if (max == 0) { + max += 4; + } + var cookie1 = HEAPU32[((max)>>2)]; + var cookie2 = HEAPU32[(((max)+(4))>>2)]; + if (cookie1 != 0x02135467 || cookie2 != 0x89BACDFE) { + abort(`Stack overflow! Stack cookie has been overwritten at ${ptrToString(max)}, expected hex dwords 0x89BACDFE and 0x2135467, but received ${ptrToString(cookie2)} ${ptrToString(cookie1)}`); + } + // Also test the global address 0 for integrity. + if (HEAPU32[((0)>>2)] != 0x63736d65 /* 'emsc' */) { + abort('Runtime error: The application has corrupted its heap memory area (address zero)!'); + } +} +// end include: runtime_stack_check.js +// include: runtime_exceptions.js +// end include: runtime_exceptions.js +// include: runtime_debug.js +// Endianness check +(() => { + var h16 = new Int16Array(1); + var h8 = new Int8Array(h16.buffer); + h16[0] = 0x6373; + if (h8[0] !== 0x73 || h8[1] !== 0x63) throw 'Runtime error: expected the system to be little-endian! (Run with -sSUPPORT_BIG_ENDIAN to bypass)'; +})(); + +if (Module['ENVIRONMENT']) { + throw new Error('Module.ENVIRONMENT has been deprecated. To force the environment, use the ENVIRONMENT compile-time option (for example, -sENVIRONMENT=web or -sENVIRONMENT=node)'); +} + +function legacyModuleProp(prop, newName, incoming=true) { + if (!Object.getOwnPropertyDescriptor(Module, prop)) { + Object.defineProperty(Module, prop, { + configurable: true, + get() { + let extra = incoming ? ' (the initial value can be provided on Module, but after startup the value is only looked for on a local variable of that name)' : ''; + abort(`\`Module.${prop}\` has been replaced by \`${newName}\`` + extra); + + } + }); + } +} + +function consumedModuleProp(prop) { + if (!Object.getOwnPropertyDescriptor(Module, prop)) { + Object.defineProperty(Module, prop, { + configurable: true, + set() { + abort(`Attempt to set \`Module.${prop}\` after it has already been processed. This can happen, for example, when code is injected via '--post-js' rather than '--pre-js'`); + + } + }); + } +} + +function ignoredModuleProp(prop) { + if (Object.getOwnPropertyDescriptor(Module, prop)) { + abort(`\`Module.${prop}\` was supplied but \`${prop}\` not included in INCOMING_MODULE_JS_API`); + } +} + +// forcing the filesystem exports a few things by default +function isExportedByForceFilesystem(name) { + return name === 'FS_createPath' || + name === 'FS_createDataFile' || + name === 'FS_createPreloadedFile' || + name === 'FS_unlink' || + name === 'addRunDependency' || + // The old FS has some functionality that WasmFS lacks. + name === 'FS_createLazyFile' || + name === 'FS_createDevice' || + name === 'removeRunDependency'; +} + +/** + * Intercept access to a global symbol. This enables us to give informative + * warnings/errors when folks attempt to use symbols they did not include in + * their build, or no symbols that no longer exist. + */ +function hookGlobalSymbolAccess(sym, func) { + if (typeof globalThis != 'undefined' && !Object.getOwnPropertyDescriptor(globalThis, sym)) { + Object.defineProperty(globalThis, sym, { + configurable: true, + get() { + func(); + return undefined; + } + }); + } +} + +function missingGlobal(sym, msg) { + hookGlobalSymbolAccess(sym, () => { + warnOnce(`\`${sym}\` is not longer defined by emscripten. ${msg}`); + }); +} + +missingGlobal('buffer', 'Please use HEAP8.buffer or wasmMemory.buffer'); +missingGlobal('asm', 'Please use wasmExports instead'); + +function missingLibrarySymbol(sym) { + hookGlobalSymbolAccess(sym, () => { + // Can't `abort()` here because it would break code that does runtime + // checks. e.g. `if (typeof SDL === 'undefined')`. + var msg = `\`${sym}\` is a library symbol and not included by default; add it to your library.js __deps or to DEFAULT_LIBRARY_FUNCS_TO_INCLUDE on the command line`; + // DEFAULT_LIBRARY_FUNCS_TO_INCLUDE requires the name as it appears in + // library.js, which means $name for a JS name with no prefix, or name + // for a JS name like _name. + var librarySymbol = sym; + if (!librarySymbol.startsWith('_')) { + librarySymbol = '$' + sym; + } + msg += ` (e.g. -sDEFAULT_LIBRARY_FUNCS_TO_INCLUDE='${librarySymbol}')`; + if (isExportedByForceFilesystem(sym)) { + msg += '. Alternatively, forcing filesystem support (-sFORCE_FILESYSTEM) can export this for you'; + } + warnOnce(msg); + }); + + // Any symbol that is not included from the JS library is also (by definition) + // not exported on the Module object. + unexportedRuntimeSymbol(sym); +} + +function unexportedRuntimeSymbol(sym) { + if (!Object.getOwnPropertyDescriptor(Module, sym)) { + Object.defineProperty(Module, sym, { + configurable: true, + get() { + var msg = `'${sym}' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the Emscripten FAQ)`; + if (isExportedByForceFilesystem(sym)) { + msg += '. Alternatively, forcing filesystem support (-sFORCE_FILESYSTEM) can export this for you'; + } + abort(msg); + } + }); + } +} + +var runtimeDebug = true; // Switch to false at runtime to disable logging at the right times + +// Used by XXXXX_DEBUG settings to output debug messages. +function dbg(...args) { + if (!runtimeDebug && typeof runtimeDebug != 'undefined') return; + // TODO(sbc): Make this configurable somehow. Its not always convenient for + // logging to show up as warnings. + console.warn(...args); +} +// end include: runtime_debug.js +// include: memoryprofiler.js +// end include: memoryprofiler.js + + +function updateMemoryViews() { + var b = wasmMemory.buffer; + Module['HEAP8'] = HEAP8 = new Int8Array(b); + Module['HEAP16'] = HEAP16 = new Int16Array(b); + Module['HEAPU8'] = HEAPU8 = new Uint8Array(b); + Module['HEAPU16'] = HEAPU16 = new Uint16Array(b); + Module['HEAP32'] = HEAP32 = new Int32Array(b); + Module['HEAPU32'] = HEAPU32 = new Uint32Array(b); + Module['HEAPF32'] = HEAPF32 = new Float32Array(b); + Module['HEAPF64'] = HEAPF64 = new Float64Array(b); + Module['HEAP64'] = HEAP64 = new BigInt64Array(b); + Module['HEAPU64'] = HEAPU64 = new BigUint64Array(b); +} + +// end include: runtime_shared.js +assert(!Module['STACK_SIZE'], 'STACK_SIZE can no longer be set at runtime. Use -sSTACK_SIZE at link time') + +assert(typeof Int32Array != 'undefined' && typeof Float64Array !== 'undefined' && Int32Array.prototype.subarray != undefined && Int32Array.prototype.set != undefined, + 'JS engine does not provide full typed array support'); + +// If memory is defined in wasm, the user can't provide it, or set INITIAL_MEMORY +assert(!Module['wasmMemory'], 'Use of `wasmMemory` detected. Use -sIMPORTED_MEMORY to define wasmMemory externally'); +assert(!Module['INITIAL_MEMORY'], 'Detected runtime INITIAL_MEMORY setting. Use -sIMPORTED_MEMORY to define wasmMemory dynamically'); + +function preRun() { + if (Module['preRun']) { + if (typeof Module['preRun'] == 'function') Module['preRun'] = [Module['preRun']]; + while (Module['preRun'].length) { + addOnPreRun(Module['preRun'].shift()); + } + } + consumedModuleProp('preRun'); + callRuntimeCallbacks(onPreRuns); +} + +function initRuntime() { + assert(!runtimeInitialized); + runtimeInitialized = true; + + checkStackCookie(); + + if (!Module['noFSInit'] && !FS.initialized) FS.init(); +TTY.init(); + + wasmExports['__wasm_call_ctors'](); + + FS.ignorePermissions = false; +} + +function preMain() { + checkStackCookie(); + +} + +function postRun() { + checkStackCookie(); + + if (Module['postRun']) { + if (typeof Module['postRun'] == 'function') Module['postRun'] = [Module['postRun']]; + while (Module['postRun'].length) { + addOnPostRun(Module['postRun'].shift()); + } + } + consumedModuleProp('postRun'); + + callRuntimeCallbacks(onPostRuns); +} + +// A counter of dependencies for calling run(). If we need to +// do asynchronous work before running, increment this and +// decrement it. Incrementing must happen in a place like +// Module.preRun (used by emcc to add file preloading). +// Note that you can add dependencies in preRun, even though +// it happens right before run - run will be postponed until +// the dependencies are met. +var runDependencies = 0; +var dependenciesFulfilled = null; // overridden to take different actions when all run dependencies are fulfilled +var runDependencyTracking = {}; +var runDependencyWatcher = null; + +function getUniqueRunDependency(id) { + var orig = id; + while (1) { + if (!runDependencyTracking[id]) return id; + id = orig + Math.random(); + } +} + +function addRunDependency(id) { + runDependencies++; + + Module['monitorRunDependencies']?.(runDependencies); + + if (id) { + assert(!runDependencyTracking[id]); + runDependencyTracking[id] = 1; + if (runDependencyWatcher === null && typeof setInterval != 'undefined') { + // Check for missing dependencies every few seconds + runDependencyWatcher = setInterval(() => { + if (ABORT) { + clearInterval(runDependencyWatcher); + runDependencyWatcher = null; + return; + } + var shown = false; + for (var dep in runDependencyTracking) { + if (!shown) { + shown = true; + err('still waiting on run dependencies:'); + } + err(`dependency: ${dep}`); + } + if (shown) { + err('(end of list)'); + } + }, 10000); + } + } else { + err('warning: run dependency added without ID'); + } +} + +function removeRunDependency(id) { + runDependencies--; + + Module['monitorRunDependencies']?.(runDependencies); + + if (id) { + assert(runDependencyTracking[id]); + delete runDependencyTracking[id]; + } else { + err('warning: run dependency removed without ID'); + } + if (runDependencies == 0) { + if (runDependencyWatcher !== null) { + clearInterval(runDependencyWatcher); + runDependencyWatcher = null; + } + if (dependenciesFulfilled) { + var callback = dependenciesFulfilled; + dependenciesFulfilled = null; + callback(); // can add another dependenciesFulfilled + } + } +} + +/** @param {string|number=} what */ +function abort(what) { + Module['onAbort']?.(what); + + what = 'Aborted(' + what + ')'; + // TODO(sbc): Should we remove printing and leave it up to whoever + // catches the exception? + err(what); + + ABORT = true; + + // Use a wasm runtime error, because a JS error might be seen as a foreign + // exception, which means we'd run destructors on it. We need the error to + // simply make the program stop. + // FIXME This approach does not work in Wasm EH because it currently does not assume + // all RuntimeErrors are from traps; it decides whether a RuntimeError is from + // a trap or not based on a hidden field within the object. So at the moment + // we don't have a way of throwing a wasm trap from JS. TODO Make a JS API that + // allows this in the wasm spec. + + // Suppress closure compiler warning here. Closure compiler's builtin extern + // definition for WebAssembly.RuntimeError claims it takes no arguments even + // though it can. + // TODO(https://github.com/google/closure-compiler/pull/3913): Remove if/when upstream closure gets fixed. + /** @suppress {checkTypes} */ + var e = new WebAssembly.RuntimeError(what); + + // Throw the error whether or not MODULARIZE is set because abort is used + // in code paths apart from instantiation where an exception is expected + // to be thrown when abort is called. + throw e; +} + +function createExportWrapper(name, nargs) { + return (...args) => { + assert(runtimeInitialized, `native function \`${name}\` called before runtime initialization`); + var f = wasmExports[name]; + assert(f, `exported native function \`${name}\` not found`); + // Only assert for too many arguments. Too few can be valid since the missing arguments will be zero filled. + assert(args.length <= nargs, `native function \`${name}\` called with ${args.length} args but expects ${nargs}`); + return f(...args); + }; +} + +var wasmBinaryFile; + +function findWasmBinary() { + return locateFile('zipmerge.wasm'); +} + +function getBinarySync(file) { + if (file == wasmBinaryFile && wasmBinary) { + return new Uint8Array(wasmBinary); + } + if (readBinary) { + return readBinary(file); + } + throw 'both async and sync fetching of the wasm failed'; +} + +async function getWasmBinary(binaryFile) { + // If we don't have the binary yet, load it asynchronously using readAsync. + if (!wasmBinary) { + // Fetch the binary using readAsync + try { + var response = await readAsync(binaryFile); + return new Uint8Array(response); + } catch { + // Fall back to getBinarySync below; + } + } + + // Otherwise, getBinarySync should be able to get it synchronously + return getBinarySync(binaryFile); +} + +async function instantiateArrayBuffer(binaryFile, imports) { + try { + var binary = await getWasmBinary(binaryFile); + var instance = await WebAssembly.instantiate(binary, imports); + return instance; + } catch (reason) { + err(`failed to asynchronously prepare wasm: ${reason}`); + + // Warn on some common problems. + if (isFileURI(wasmBinaryFile)) { + err(`warning: Loading from a file URI (${wasmBinaryFile}) is not supported in most browsers. See https://emscripten.org/docs/getting_started/FAQ.html#how-do-i-run-a-local-webserver-for-testing-why-does-my-program-stall-in-downloading-or-preparing`); + } + abort(reason); + } +} + +async function instantiateAsync(binary, binaryFile, imports) { + if (!binary && typeof WebAssembly.instantiateStreaming == 'function' + // Don't use streaming for file:// delivered objects in a webview, fetch them synchronously. + && !isFileURI(binaryFile) + // Avoid instantiateStreaming() on Node.js environment for now, as while + // Node.js v18.1.0 implements it, it does not have a full fetch() + // implementation yet. + // + // Reference: + // https://github.com/emscripten-core/emscripten/pull/16917 + && !ENVIRONMENT_IS_NODE + ) { + try { + var response = fetch(binaryFile, { credentials: 'same-origin' }); + var instantiationResult = await WebAssembly.instantiateStreaming(response, imports); + return instantiationResult; + } catch (reason) { + // We expect the most common failure cause to be a bad MIME type for the binary, + // in which case falling back to ArrayBuffer instantiation should work. + err(`wasm streaming compile failed: ${reason}`); + err('falling back to ArrayBuffer instantiation'); + // fall back of instantiateArrayBuffer below + }; + } + return instantiateArrayBuffer(binaryFile, imports); +} + +function getWasmImports() { + // prepare imports + return { + 'env': wasmImports, + 'wasi_snapshot_preview1': wasmImports, + } +} + +// Create the wasm instance. +// Receives the wasm imports, returns the exports. +async function createWasm() { + // Load the wasm module and create an instance of using native support in the JS engine. + // handle a generated wasm instance, receiving its exports and + // performing other necessary setup + /** @param {WebAssembly.Module=} module*/ + function receiveInstance(instance, module) { + wasmExports = instance.exports; + + + + wasmMemory = wasmExports['memory']; + + assert(wasmMemory, 'memory not found in wasm exports'); + updateMemoryViews(); + + removeRunDependency('wasm-instantiate'); + return wasmExports; + } + // wait for the pthread pool (if any) + addRunDependency('wasm-instantiate'); + + // Prefer streaming instantiation if available. + // Async compilation can be confusing when an error on the page overwrites Module + // (for example, if the order of elements is wrong, and the one defining Module is + // later), so we save Module and check it later. + var trueModule = Module; + function receiveInstantiationResult(result) { + // 'result' is a ResultObject object which has both the module and instance. + // receiveInstance() will swap in the exports (to Module.asm) so they can be called + assert(Module === trueModule, 'the Module object should not be replaced during async compilation - perhaps the order of HTML elements is wrong?'); + trueModule = null; + // TODO: Due to Closure regression https://github.com/google/closure-compiler/issues/3193, the above line no longer optimizes out down to the following line. + // When the regression is fixed, can restore the above PTHREADS-enabled path. + return receiveInstance(result['instance']); + } + + var info = getWasmImports(); + + // User shell pages can write their own Module.instantiateWasm = function(imports, successCallback) callback + // to manually instantiate the Wasm module themselves. This allows pages to + // run the instantiation parallel to any other async startup actions they are + // performing. + // Also pthreads and wasm workers initialize the wasm instance through this + // path. + if (Module['instantiateWasm']) { + return new Promise((resolve, reject) => { + try { + Module['instantiateWasm'](info, (mod, inst) => { + receiveInstance(mod, inst); + resolve(mod.exports); + }); + } catch(e) { + err(`Module.instantiateWasm callback failed with error: ${e}`); + reject(e); + } + }); + } + + wasmBinaryFile ??= findWasmBinary(); + var result = await instantiateAsync(wasmBinary, wasmBinaryFile, info); + var exports = receiveInstantiationResult(result); + return exports; +} + +// end include: preamble.js + +// Begin JS library code + + + class ExitStatus { + name = 'ExitStatus'; + constructor(status) { + this.message = `Program terminated with exit(${status})`; + this.status = status; + } + } + + var callRuntimeCallbacks = (callbacks) => { + while (callbacks.length > 0) { + // Pass the module as the first argument. + callbacks.shift()(Module); + } + }; + var onPostRuns = []; + var addOnPostRun = (cb) => onPostRuns.unshift(cb); + + var onPreRuns = []; + var addOnPreRun = (cb) => onPreRuns.unshift(cb); + + + + /** + * @param {number} ptr + * @param {string} type + */ + function getValue(ptr, type = 'i8') { + if (type.endsWith('*')) type = '*'; + switch (type) { + case 'i1': return HEAP8[ptr]; + case 'i8': return HEAP8[ptr]; + case 'i16': return HEAP16[((ptr)>>1)]; + case 'i32': return HEAP32[((ptr)>>2)]; + case 'i64': return HEAP64[((ptr)>>3)]; + case 'float': return HEAPF32[((ptr)>>2)]; + case 'double': return HEAPF64[((ptr)>>3)]; + case '*': return HEAPU32[((ptr)>>2)]; + default: abort(`invalid type for getValue: ${type}`); + } + } + + var noExitRuntime = Module['noExitRuntime'] || true; + + var ptrToString = (ptr) => { + assert(typeof ptr === 'number'); + // With CAN_ADDRESS_2GB or MEMORY64, pointers are already unsigned. + ptr >>>= 0; + return '0x' + ptr.toString(16).padStart(8, '0'); + }; + + + /** + * @param {number} ptr + * @param {number} value + * @param {string} type + */ + function setValue(ptr, value, type = 'i8') { + if (type.endsWith('*')) type = '*'; + switch (type) { + case 'i1': HEAP8[ptr] = value; break; + case 'i8': HEAP8[ptr] = value; break; + case 'i16': HEAP16[((ptr)>>1)] = value; break; + case 'i32': HEAP32[((ptr)>>2)] = value; break; + case 'i64': HEAP64[((ptr)>>3)] = BigInt(value); break; + case 'float': HEAPF32[((ptr)>>2)] = value; break; + case 'double': HEAPF64[((ptr)>>3)] = value; break; + case '*': HEAPU32[((ptr)>>2)] = value; break; + default: abort(`invalid type for setValue: ${type}`); + } + } + + var stackRestore = (val) => __emscripten_stack_restore(val); + + var stackSave = () => _emscripten_stack_get_current(); + + var warnOnce = (text) => { + warnOnce.shown ||= {}; + if (!warnOnce.shown[text]) { + warnOnce.shown[text] = 1; + if (ENVIRONMENT_IS_NODE) text = 'warning: ' + text; + err(text); + } + }; + + var PATH = { + isAbs:(path) => path.charAt(0) === '/', + splitPath:(filename) => { + var splitPathRe = /^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/; + return splitPathRe.exec(filename).slice(1); + }, + normalizeArray:(parts, allowAboveRoot) => { + // if the path tries to go above the root, `up` ends up > 0 + var up = 0; + for (var i = parts.length - 1; i >= 0; i--) { + var last = parts[i]; + if (last === '.') { + parts.splice(i, 1); + } else if (last === '..') { + parts.splice(i, 1); + up++; + } else if (up) { + parts.splice(i, 1); + up--; + } + } + // if the path is allowed to go above the root, restore leading ..s + if (allowAboveRoot) { + for (; up; up--) { + parts.unshift('..'); + } + } + return parts; + }, + normalize:(path) => { + var isAbsolute = PATH.isAbs(path), + trailingSlash = path.slice(-1) === '/'; + // Normalize the path + path = PATH.normalizeArray(path.split('/').filter((p) => !!p), !isAbsolute).join('/'); + if (!path && !isAbsolute) { + path = '.'; + } + if (path && trailingSlash) { + path += '/'; + } + return (isAbsolute ? '/' : '') + path; + }, + dirname:(path) => { + var result = PATH.splitPath(path), + root = result[0], + dir = result[1]; + if (!root && !dir) { + // No dirname whatsoever + return '.'; + } + if (dir) { + // It has a dirname, strip trailing slash + dir = dir.slice(0, -1); + } + return root + dir; + }, + basename:(path) => path && path.match(/([^\/]+|\/)\/*$/)[1], + join:(...paths) => PATH.normalize(paths.join('/')), + join2:(l, r) => PATH.normalize(l + '/' + r), + }; + + var initRandomFill = () => { + // This block is not needed on v19+ since crypto.getRandomValues is builtin + if (ENVIRONMENT_IS_NODE) { + var nodeCrypto = require('crypto'); + return (view) => nodeCrypto.randomFillSync(view); + } + + return (view) => crypto.getRandomValues(view); + }; + var randomFill = (view) => { + // Lazily init on the first invocation. + (randomFill = initRandomFill())(view); + }; + + + + var PATH_FS = { + resolve:(...args) => { + var resolvedPath = '', + resolvedAbsolute = false; + for (var i = args.length - 1; i >= -1 && !resolvedAbsolute; i--) { + var path = (i >= 0) ? args[i] : FS.cwd(); + // Skip empty and invalid entries + if (typeof path != 'string') { + throw new TypeError('Arguments to path.resolve must be strings'); + } else if (!path) { + return ''; // an invalid portion invalidates the whole thing + } + resolvedPath = path + '/' + resolvedPath; + resolvedAbsolute = PATH.isAbs(path); + } + // At this point the path should be resolved to a full absolute path, but + // handle relative paths to be safe (might happen when process.cwd() fails) + resolvedPath = PATH.normalizeArray(resolvedPath.split('/').filter((p) => !!p), !resolvedAbsolute).join('/'); + return ((resolvedAbsolute ? '/' : '') + resolvedPath) || '.'; + }, + relative:(from, to) => { + from = PATH_FS.resolve(from).slice(1); + to = PATH_FS.resolve(to).slice(1); + function trim(arr) { + var start = 0; + for (; start < arr.length; start++) { + if (arr[start] !== '') break; + } + var end = arr.length - 1; + for (; end >= 0; end--) { + if (arr[end] !== '') break; + } + if (start > end) return []; + return arr.slice(start, end - start + 1); + } + var fromParts = trim(from.split('/')); + var toParts = trim(to.split('/')); + var length = Math.min(fromParts.length, toParts.length); + var samePartsLength = length; + for (var i = 0; i < length; i++) { + if (fromParts[i] !== toParts[i]) { + samePartsLength = i; + break; + } + } + var outputParts = []; + for (var i = samePartsLength; i < fromParts.length; i++) { + outputParts.push('..'); + } + outputParts = outputParts.concat(toParts.slice(samePartsLength)); + return outputParts.join('/'); + }, + }; + + + var UTF8Decoder = typeof TextDecoder != 'undefined' ? new TextDecoder() : undefined; + + /** + * Given a pointer 'idx' to a null-terminated UTF8-encoded string in the given + * array that contains uint8 values, returns a copy of that string as a + * Javascript String object. + * heapOrArray is either a regular array, or a JavaScript typed array view. + * @param {number=} idx + * @param {number=} maxBytesToRead + * @return {string} + */ + var UTF8ArrayToString = (heapOrArray, idx = 0, maxBytesToRead = NaN) => { + var endIdx = idx + maxBytesToRead; + var endPtr = idx; + // TextDecoder needs to know the byte length in advance, it doesn't stop on + // null terminator by itself. Also, use the length info to avoid running tiny + // strings through TextDecoder, since .subarray() allocates garbage. + // (As a tiny code save trick, compare endPtr against endIdx using a negation, + // so that undefined/NaN means Infinity) + while (heapOrArray[endPtr] && !(endPtr >= endIdx)) ++endPtr; + + if (endPtr - idx > 16 && heapOrArray.buffer && UTF8Decoder) { + return UTF8Decoder.decode(heapOrArray.subarray(idx, endPtr)); + } + var str = ''; + // If building with TextDecoder, we have already computed the string length + // above, so test loop end condition against that + while (idx < endPtr) { + // For UTF8 byte structure, see: + // http://en.wikipedia.org/wiki/UTF-8#Description + // https://www.ietf.org/rfc/rfc2279.txt + // https://tools.ietf.org/html/rfc3629 + var u0 = heapOrArray[idx++]; + if (!(u0 & 0x80)) { str += String.fromCharCode(u0); continue; } + var u1 = heapOrArray[idx++] & 63; + if ((u0 & 0xE0) == 0xC0) { str += String.fromCharCode(((u0 & 31) << 6) | u1); continue; } + var u2 = heapOrArray[idx++] & 63; + if ((u0 & 0xF0) == 0xE0) { + u0 = ((u0 & 15) << 12) | (u1 << 6) | u2; + } else { + if ((u0 & 0xF8) != 0xF0) warnOnce('Invalid UTF-8 leading byte ' + ptrToString(u0) + ' encountered when deserializing a UTF-8 string in wasm memory to a JS string!'); + u0 = ((u0 & 7) << 18) | (u1 << 12) | (u2 << 6) | (heapOrArray[idx++] & 63); + } + + if (u0 < 0x10000) { + str += String.fromCharCode(u0); + } else { + var ch = u0 - 0x10000; + str += String.fromCharCode(0xD800 | (ch >> 10), 0xDC00 | (ch & 0x3FF)); + } + } + return str; + }; + + var FS_stdin_getChar_buffer = []; + + var lengthBytesUTF8 = (str) => { + var len = 0; + for (var i = 0; i < str.length; ++i) { + // Gotcha: charCodeAt returns a 16-bit word that is a UTF-16 encoded code + // unit, not a Unicode code point of the character! So decode + // UTF16->UTF32->UTF8. + // See http://unicode.org/faq/utf_bom.html#utf16-3 + var c = str.charCodeAt(i); // possibly a lead surrogate + if (c <= 0x7F) { + len++; + } else if (c <= 0x7FF) { + len += 2; + } else if (c >= 0xD800 && c <= 0xDFFF) { + len += 4; ++i; + } else { + len += 3; + } + } + return len; + }; + + var stringToUTF8Array = (str, heap, outIdx, maxBytesToWrite) => { + assert(typeof str === 'string', `stringToUTF8Array expects a string (got ${typeof str})`); + // Parameter maxBytesToWrite is not optional. Negative values, 0, null, + // undefined and false each don't write out any bytes. + if (!(maxBytesToWrite > 0)) + return 0; + + var startIdx = outIdx; + var endIdx = outIdx + maxBytesToWrite - 1; // -1 for string null terminator. + for (var i = 0; i < str.length; ++i) { + // Gotcha: charCodeAt returns a 16-bit word that is a UTF-16 encoded code + // unit, not a Unicode code point of the character! So decode + // UTF16->UTF32->UTF8. + // See http://unicode.org/faq/utf_bom.html#utf16-3 + // For UTF8 byte structure, see http://en.wikipedia.org/wiki/UTF-8#Description + // and https://www.ietf.org/rfc/rfc2279.txt + // and https://tools.ietf.org/html/rfc3629 + var u = str.charCodeAt(i); // possibly a lead surrogate + if (u >= 0xD800 && u <= 0xDFFF) { + var u1 = str.charCodeAt(++i); + u = 0x10000 + ((u & 0x3FF) << 10) | (u1 & 0x3FF); + } + if (u <= 0x7F) { + if (outIdx >= endIdx) break; + heap[outIdx++] = u; + } else if (u <= 0x7FF) { + if (outIdx + 1 >= endIdx) break; + heap[outIdx++] = 0xC0 | (u >> 6); + heap[outIdx++] = 0x80 | (u & 63); + } else if (u <= 0xFFFF) { + if (outIdx + 2 >= endIdx) break; + heap[outIdx++] = 0xE0 | (u >> 12); + heap[outIdx++] = 0x80 | ((u >> 6) & 63); + heap[outIdx++] = 0x80 | (u & 63); + } else { + if (outIdx + 3 >= endIdx) break; + if (u > 0x10FFFF) warnOnce('Invalid Unicode code point ' + ptrToString(u) + ' encountered when serializing a JS string to a UTF-8 string in wasm memory! (Valid unicode code points should be in range 0-0x10FFFF).'); + heap[outIdx++] = 0xF0 | (u >> 18); + heap[outIdx++] = 0x80 | ((u >> 12) & 63); + heap[outIdx++] = 0x80 | ((u >> 6) & 63); + heap[outIdx++] = 0x80 | (u & 63); + } + } + // Null-terminate the pointer to the buffer. + heap[outIdx] = 0; + return outIdx - startIdx; + }; + /** @type {function(string, boolean=, number=)} */ + var intArrayFromString = (stringy, dontAddNull, length) => { + var len = length > 0 ? length : lengthBytesUTF8(stringy)+1; + var u8array = new Array(len); + var numBytesWritten = stringToUTF8Array(stringy, u8array, 0, u8array.length); + if (dontAddNull) u8array.length = numBytesWritten; + return u8array; + }; + var FS_stdin_getChar = () => { + if (!FS_stdin_getChar_buffer.length) { + var result = null; + if (ENVIRONMENT_IS_NODE) { + // we will read data by chunks of BUFSIZE + var BUFSIZE = 256; + var buf = Buffer.alloc(BUFSIZE); + var bytesRead = 0; + + // For some reason we must suppress a closure warning here, even though + // fd definitely exists on process.stdin, and is even the proper way to + // get the fd of stdin, + // https://github.com/nodejs/help/issues/2136#issuecomment-523649904 + // This started to happen after moving this logic out of library_tty.js, + // so it is related to the surrounding code in some unclear manner. + /** @suppress {missingProperties} */ + var fd = process.stdin.fd; + + try { + bytesRead = fs.readSync(fd, buf, 0, BUFSIZE); + } catch(e) { + // Cross-platform differences: on Windows, reading EOF throws an + // exception, but on other OSes, reading EOF returns 0. Uniformize + // behavior by treating the EOF exception to return 0. + if (e.toString().includes('EOF')) bytesRead = 0; + else throw e; + } + + if (bytesRead > 0) { + result = buf.slice(0, bytesRead).toString('utf-8'); + } + } else + if (typeof window != 'undefined' && + typeof window.prompt == 'function') { + // Browser. + result = window.prompt('Input: '); // returns null on cancel + if (result !== null) { + result += '\n'; + } + } else + {} + if (!result) { + return null; + } + FS_stdin_getChar_buffer = intArrayFromString(result, true); + } + return FS_stdin_getChar_buffer.shift(); + }; + var TTY = { + ttys:[], + init() { + // https://github.com/emscripten-core/emscripten/pull/1555 + // if (ENVIRONMENT_IS_NODE) { + // // currently, FS.init does not distinguish if process.stdin is a file or TTY + // // device, it always assumes it's a TTY device. because of this, we're forcing + // // process.stdin to UTF8 encoding to at least make stdin reading compatible + // // with text files until FS.init can be refactored. + // process.stdin.setEncoding('utf8'); + // } + }, + shutdown() { + // https://github.com/emscripten-core/emscripten/pull/1555 + // if (ENVIRONMENT_IS_NODE) { + // // inolen: any idea as to why node -e 'process.stdin.read()' wouldn't exit immediately (with process.stdin being a tty)? + // // isaacs: because now it's reading from the stream, you've expressed interest in it, so that read() kicks off a _read() which creates a ReadReq operation + // // inolen: I thought read() in that case was a synchronous operation that just grabbed some amount of buffered data if it exists? + // // isaacs: it is. but it also triggers a _read() call, which calls readStart() on the handle + // // isaacs: do process.stdin.pause() and i'd think it'd probably close the pending call + // process.stdin.pause(); + // } + }, + register(dev, ops) { + TTY.ttys[dev] = { input: [], output: [], ops: ops }; + FS.registerDevice(dev, TTY.stream_ops); + }, + stream_ops:{ + open(stream) { + var tty = TTY.ttys[stream.node.rdev]; + if (!tty) { + throw new FS.ErrnoError(43); + } + stream.tty = tty; + stream.seekable = false; + }, + close(stream) { + // flush any pending line data + stream.tty.ops.fsync(stream.tty); + }, + fsync(stream) { + stream.tty.ops.fsync(stream.tty); + }, + read(stream, buffer, offset, length, pos /* ignored */) { + if (!stream.tty || !stream.tty.ops.get_char) { + throw new FS.ErrnoError(60); + } + var bytesRead = 0; + for (var i = 0; i < length; i++) { + var result; + try { + result = stream.tty.ops.get_char(stream.tty); + } catch (e) { + throw new FS.ErrnoError(29); + } + if (result === undefined && bytesRead === 0) { + throw new FS.ErrnoError(6); + } + if (result === null || result === undefined) break; + bytesRead++; + buffer[offset+i] = result; + } + if (bytesRead) { + stream.node.atime = Date.now(); + } + return bytesRead; + }, + write(stream, buffer, offset, length, pos) { + if (!stream.tty || !stream.tty.ops.put_char) { + throw new FS.ErrnoError(60); + } + try { + for (var i = 0; i < length; i++) { + stream.tty.ops.put_char(stream.tty, buffer[offset+i]); + } + } catch (e) { + throw new FS.ErrnoError(29); + } + if (length) { + stream.node.mtime = stream.node.ctime = Date.now(); + } + return i; + }, + }, + default_tty_ops:{ + get_char(tty) { + return FS_stdin_getChar(); + }, + put_char(tty, val) { + if (val === null || val === 10) { + out(UTF8ArrayToString(tty.output)); + tty.output = []; + } else { + if (val != 0) tty.output.push(val); // val == 0 would cut text output off in the middle. + } + }, + fsync(tty) { + if (tty.output?.length > 0) { + out(UTF8ArrayToString(tty.output)); + tty.output = []; + } + }, + ioctl_tcgets(tty) { + // typical setting + return { + c_iflag: 25856, + c_oflag: 5, + c_cflag: 191, + c_lflag: 35387, + c_cc: [ + 0x03, 0x1c, 0x7f, 0x15, 0x04, 0x00, 0x01, 0x00, 0x11, 0x13, 0x1a, 0x00, + 0x12, 0x0f, 0x17, 0x16, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + ] + }; + }, + ioctl_tcsets(tty, optional_actions, data) { + // currently just ignore + return 0; + }, + ioctl_tiocgwinsz(tty) { + return [24, 80]; + }, + }, + default_tty1_ops:{ + put_char(tty, val) { + if (val === null || val === 10) { + err(UTF8ArrayToString(tty.output)); + tty.output = []; + } else { + if (val != 0) tty.output.push(val); + } + }, + fsync(tty) { + if (tty.output?.length > 0) { + err(UTF8ArrayToString(tty.output)); + tty.output = []; + } + }, + }, + }; + + + var mmapAlloc = (size) => { + abort('internal error: mmapAlloc called but `emscripten_builtin_memalign` native symbol not exported'); + }; + var MEMFS = { + ops_table:null, + mount(mount) { + return MEMFS.createNode(null, '/', 16895, 0); + }, + createNode(parent, name, mode, dev) { + if (FS.isBlkdev(mode) || FS.isFIFO(mode)) { + // no supported + throw new FS.ErrnoError(63); + } + MEMFS.ops_table ||= { + dir: { + node: { + getattr: MEMFS.node_ops.getattr, + setattr: MEMFS.node_ops.setattr, + lookup: MEMFS.node_ops.lookup, + mknod: MEMFS.node_ops.mknod, + rename: MEMFS.node_ops.rename, + unlink: MEMFS.node_ops.unlink, + rmdir: MEMFS.node_ops.rmdir, + readdir: MEMFS.node_ops.readdir, + symlink: MEMFS.node_ops.symlink + }, + stream: { + llseek: MEMFS.stream_ops.llseek + } + }, + file: { + node: { + getattr: MEMFS.node_ops.getattr, + setattr: MEMFS.node_ops.setattr + }, + stream: { + llseek: MEMFS.stream_ops.llseek, + read: MEMFS.stream_ops.read, + write: MEMFS.stream_ops.write, + mmap: MEMFS.stream_ops.mmap, + msync: MEMFS.stream_ops.msync + } + }, + link: { + node: { + getattr: MEMFS.node_ops.getattr, + setattr: MEMFS.node_ops.setattr, + readlink: MEMFS.node_ops.readlink + }, + stream: {} + }, + chrdev: { + node: { + getattr: MEMFS.node_ops.getattr, + setattr: MEMFS.node_ops.setattr + }, + stream: FS.chrdev_stream_ops + } + }; + var node = FS.createNode(parent, name, mode, dev); + if (FS.isDir(node.mode)) { + node.node_ops = MEMFS.ops_table.dir.node; + node.stream_ops = MEMFS.ops_table.dir.stream; + node.contents = {}; + } else if (FS.isFile(node.mode)) { + node.node_ops = MEMFS.ops_table.file.node; + node.stream_ops = MEMFS.ops_table.file.stream; + node.usedBytes = 0; // The actual number of bytes used in the typed array, as opposed to contents.length which gives the whole capacity. + // When the byte data of the file is populated, this will point to either a typed array, or a normal JS array. Typed arrays are preferred + // for performance, and used by default. However, typed arrays are not resizable like normal JS arrays are, so there is a small disk size + // penalty involved for appending file writes that continuously grow a file similar to std::vector capacity vs used -scheme. + node.contents = null; + } else if (FS.isLink(node.mode)) { + node.node_ops = MEMFS.ops_table.link.node; + node.stream_ops = MEMFS.ops_table.link.stream; + } else if (FS.isChrdev(node.mode)) { + node.node_ops = MEMFS.ops_table.chrdev.node; + node.stream_ops = MEMFS.ops_table.chrdev.stream; + } + node.atime = node.mtime = node.ctime = Date.now(); + // add the new node to the parent + if (parent) { + parent.contents[name] = node; + parent.atime = parent.mtime = parent.ctime = node.atime; + } + return node; + }, + getFileDataAsTypedArray(node) { + if (!node.contents) return new Uint8Array(0); + if (node.contents.subarray) return node.contents.subarray(0, node.usedBytes); // Make sure to not return excess unused bytes. + return new Uint8Array(node.contents); + }, + expandFileStorage(node, newCapacity) { + var prevCapacity = node.contents ? node.contents.length : 0; + if (prevCapacity >= newCapacity) return; // No need to expand, the storage was already large enough. + // Don't expand strictly to the given requested limit if it's only a very small increase, but instead geometrically grow capacity. + // For small filesizes (<1MB), perform size*2 geometric increase, but for large sizes, do a much more conservative size*1.125 increase to + // avoid overshooting the allocation cap by a very large margin. + var CAPACITY_DOUBLING_MAX = 1024 * 1024; + newCapacity = Math.max(newCapacity, (prevCapacity * (prevCapacity < CAPACITY_DOUBLING_MAX ? 2.0 : 1.125)) >>> 0); + if (prevCapacity != 0) newCapacity = Math.max(newCapacity, 256); // At minimum allocate 256b for each file when expanding. + var oldContents = node.contents; + node.contents = new Uint8Array(newCapacity); // Allocate new storage. + if (node.usedBytes > 0) node.contents.set(oldContents.subarray(0, node.usedBytes), 0); // Copy old data over to the new storage. + }, + resizeFileStorage(node, newSize) { + if (node.usedBytes == newSize) return; + if (newSize == 0) { + node.contents = null; // Fully decommit when requesting a resize to zero. + node.usedBytes = 0; + } else { + var oldContents = node.contents; + node.contents = new Uint8Array(newSize); // Allocate new storage. + if (oldContents) { + node.contents.set(oldContents.subarray(0, Math.min(newSize, node.usedBytes))); // Copy old data over to the new storage. + } + node.usedBytes = newSize; + } + }, + node_ops:{ + getattr(node) { + var attr = {}; + // device numbers reuse inode numbers. + attr.dev = FS.isChrdev(node.mode) ? node.id : 1; + attr.ino = node.id; + attr.mode = node.mode; + attr.nlink = 1; + attr.uid = 0; + attr.gid = 0; + attr.rdev = node.rdev; + if (FS.isDir(node.mode)) { + attr.size = 4096; + } else if (FS.isFile(node.mode)) { + attr.size = node.usedBytes; + } else if (FS.isLink(node.mode)) { + attr.size = node.link.length; + } else { + attr.size = 0; + } + attr.atime = new Date(node.atime); + attr.mtime = new Date(node.mtime); + attr.ctime = new Date(node.ctime); + // NOTE: In our implementation, st_blocks = Math.ceil(st_size/st_blksize), + // but this is not required by the standard. + attr.blksize = 4096; + attr.blocks = Math.ceil(attr.size / attr.blksize); + return attr; + }, + setattr(node, attr) { + for (const key of ["mode", "atime", "mtime", "ctime"]) { + if (attr[key] != null) { + node[key] = attr[key]; + } + } + if (attr.size !== undefined) { + MEMFS.resizeFileStorage(node, attr.size); + } + }, + lookup(parent, name) { + throw new FS.ErrnoError(44); + }, + mknod(parent, name, mode, dev) { + return MEMFS.createNode(parent, name, mode, dev); + }, + rename(old_node, new_dir, new_name) { + var new_node; + try { + new_node = FS.lookupNode(new_dir, new_name); + } catch (e) {} + if (new_node) { + if (FS.isDir(old_node.mode)) { + // if we're overwriting a directory at new_name, make sure it's empty. + for (var i in new_node.contents) { + throw new FS.ErrnoError(55); + } + } + FS.hashRemoveNode(new_node); + } + // do the internal rewiring + delete old_node.parent.contents[old_node.name]; + new_dir.contents[new_name] = old_node; + old_node.name = new_name; + new_dir.ctime = new_dir.mtime = old_node.parent.ctime = old_node.parent.mtime = Date.now(); + }, + unlink(parent, name) { + delete parent.contents[name]; + parent.ctime = parent.mtime = Date.now(); + }, + rmdir(parent, name) { + var node = FS.lookupNode(parent, name); + for (var i in node.contents) { + throw new FS.ErrnoError(55); + } + delete parent.contents[name]; + parent.ctime = parent.mtime = Date.now(); + }, + readdir(node) { + return ['.', '..', ...Object.keys(node.contents)]; + }, + symlink(parent, newname, oldpath) { + var node = MEMFS.createNode(parent, newname, 0o777 | 40960, 0); + node.link = oldpath; + return node; + }, + readlink(node) { + if (!FS.isLink(node.mode)) { + throw new FS.ErrnoError(28); + } + return node.link; + }, + }, + stream_ops:{ + read(stream, buffer, offset, length, position) { + var contents = stream.node.contents; + if (position >= stream.node.usedBytes) return 0; + var size = Math.min(stream.node.usedBytes - position, length); + assert(size >= 0); + if (size > 8 && contents.subarray) { // non-trivial, and typed array + buffer.set(contents.subarray(position, position + size), offset); + } else { + for (var i = 0; i < size; i++) buffer[offset + i] = contents[position + i]; + } + return size; + }, + write(stream, buffer, offset, length, position, canOwn) { + // The data buffer should be a typed array view + assert(!(buffer instanceof ArrayBuffer)); + + if (!length) return 0; + var node = stream.node; + node.mtime = node.ctime = Date.now(); + + if (buffer.subarray && (!node.contents || node.contents.subarray)) { // This write is from a typed array to a typed array? + if (canOwn) { + assert(position === 0, 'canOwn must imply no weird position inside the file'); + node.contents = buffer.subarray(offset, offset + length); + node.usedBytes = length; + return length; + } else if (node.usedBytes === 0 && position === 0) { // If this is a simple first write to an empty file, do a fast set since we don't need to care about old data. + node.contents = buffer.slice(offset, offset + length); + node.usedBytes = length; + return length; + } else if (position + length <= node.usedBytes) { // Writing to an already allocated and used subrange of the file? + node.contents.set(buffer.subarray(offset, offset + length), position); + return length; + } + } + + // Appending to an existing file and we need to reallocate, or source data did not come as a typed array. + MEMFS.expandFileStorage(node, position+length); + if (node.contents.subarray && buffer.subarray) { + // Use typed array write which is available. + node.contents.set(buffer.subarray(offset, offset + length), position); + } else { + for (var i = 0; i < length; i++) { + node.contents[position + i] = buffer[offset + i]; // Or fall back to manual write if not. + } + } + node.usedBytes = Math.max(node.usedBytes, position + length); + return length; + }, + llseek(stream, offset, whence) { + var position = offset; + if (whence === 1) { + position += stream.position; + } else if (whence === 2) { + if (FS.isFile(stream.node.mode)) { + position += stream.node.usedBytes; + } + } + if (position < 0) { + throw new FS.ErrnoError(28); + } + return position; + }, + mmap(stream, length, position, prot, flags) { + if (!FS.isFile(stream.node.mode)) { + throw new FS.ErrnoError(43); + } + var ptr; + var allocated; + var contents = stream.node.contents; + // Only make a new copy when MAP_PRIVATE is specified. + if (!(flags & 2) && contents && contents.buffer === HEAP8.buffer) { + // We can't emulate MAP_SHARED when the file is not backed by the + // buffer we're mapping to (e.g. the HEAP buffer). + allocated = false; + ptr = contents.byteOffset; + } else { + allocated = true; + ptr = mmapAlloc(length); + if (!ptr) { + throw new FS.ErrnoError(48); + } + if (contents) { + // Try to avoid unnecessary slices. + if (position > 0 || position + length < contents.length) { + if (contents.subarray) { + contents = contents.subarray(position, position + length); + } else { + contents = Array.prototype.slice.call(contents, position, position + length); + } + } + HEAP8.set(contents, ptr); + } + } + return { ptr, allocated }; + }, + msync(stream, buffer, offset, length, mmapFlags) { + MEMFS.stream_ops.write(stream, buffer, 0, length, offset, false); + // should we check if bytesWritten and length are the same? + return 0; + }, + }, + }; + + var asyncLoad = async (url) => { + var arrayBuffer = await readAsync(url); + assert(arrayBuffer, `Loading data file "${url}" failed (no arrayBuffer).`); + return new Uint8Array(arrayBuffer); + }; + + + var FS_createDataFile = (parent, name, fileData, canRead, canWrite, canOwn) => { + FS.createDataFile(parent, name, fileData, canRead, canWrite, canOwn); + }; + + var preloadPlugins = Module['preloadPlugins'] || []; + var FS_handledByPreloadPlugin = (byteArray, fullname, finish, onerror) => { + // Ensure plugins are ready. + if (typeof Browser != 'undefined') Browser.init(); + + var handled = false; + preloadPlugins.forEach((plugin) => { + if (handled) return; + if (plugin['canHandle'](fullname)) { + plugin['handle'](byteArray, fullname, finish, onerror); + handled = true; + } + }); + return handled; + }; + var FS_createPreloadedFile = (parent, name, url, canRead, canWrite, onload, onerror, dontCreateFile, canOwn, preFinish) => { + // TODO we should allow people to just pass in a complete filename instead + // of parent and name being that we just join them anyways + var fullname = name ? PATH_FS.resolve(PATH.join2(parent, name)) : parent; + var dep = getUniqueRunDependency(`cp ${fullname}`); // might have several active requests for the same fullname + function processData(byteArray) { + function finish(byteArray) { + preFinish?.(); + if (!dontCreateFile) { + FS_createDataFile(parent, name, byteArray, canRead, canWrite, canOwn); + } + onload?.(); + removeRunDependency(dep); + } + if (FS_handledByPreloadPlugin(byteArray, fullname, finish, () => { + onerror?.(); + removeRunDependency(dep); + })) { + return; + } + finish(byteArray); + } + addRunDependency(dep); + if (typeof url == 'string') { + asyncLoad(url).then(processData, onerror); + } else { + processData(url); + } + }; + + var FS_modeStringToFlags = (str) => { + var flagModes = { + 'r': 0, + 'r+': 2, + 'w': 512 | 64 | 1, + 'w+': 512 | 64 | 2, + 'a': 1024 | 64 | 1, + 'a+': 1024 | 64 | 2, + }; + var flags = flagModes[str]; + if (typeof flags == 'undefined') { + throw new Error(`Unknown file open mode: ${str}`); + } + return flags; + }; + + var FS_getMode = (canRead, canWrite) => { + var mode = 0; + if (canRead) mode |= 292 | 73; + if (canWrite) mode |= 146; + return mode; + }; + + + + + + + /** + * Given a pointer 'ptr' to a null-terminated UTF8-encoded string in the + * emscripten HEAP, returns a copy of that string as a Javascript String object. + * + * @param {number} ptr + * @param {number=} maxBytesToRead - An optional length that specifies the + * maximum number of bytes to read. You can omit this parameter to scan the + * string until the first 0 byte. If maxBytesToRead is passed, and the string + * at [ptr, ptr+maxBytesToReadr[ contains a null byte in the middle, then the + * string will cut short at that byte index (i.e. maxBytesToRead will not + * produce a string of exact length [ptr, ptr+maxBytesToRead[) N.B. mixing + * frequent uses of UTF8ToString() with and without maxBytesToRead may throw + * JS JIT optimizations off, so it is worth to consider consistently using one + * @return {string} + */ + var UTF8ToString = (ptr, maxBytesToRead) => { + assert(typeof ptr == 'number', `UTF8ToString expects a number (got ${typeof ptr})`); + return ptr ? UTF8ArrayToString(HEAPU8, ptr, maxBytesToRead) : ''; + }; + + var strError = (errno) => UTF8ToString(_strerror(errno)); + + var ERRNO_CODES = { + 'EPERM': 63, + 'ENOENT': 44, + 'ESRCH': 71, + 'EINTR': 27, + 'EIO': 29, + 'ENXIO': 60, + 'E2BIG': 1, + 'ENOEXEC': 45, + 'EBADF': 8, + 'ECHILD': 12, + 'EAGAIN': 6, + 'EWOULDBLOCK': 6, + 'ENOMEM': 48, + 'EACCES': 2, + 'EFAULT': 21, + 'ENOTBLK': 105, + 'EBUSY': 10, + 'EEXIST': 20, + 'EXDEV': 75, + 'ENODEV': 43, + 'ENOTDIR': 54, + 'EISDIR': 31, + 'EINVAL': 28, + 'ENFILE': 41, + 'EMFILE': 33, + 'ENOTTY': 59, + 'ETXTBSY': 74, + 'EFBIG': 22, + 'ENOSPC': 51, + 'ESPIPE': 70, + 'EROFS': 69, + 'EMLINK': 34, + 'EPIPE': 64, + 'EDOM': 18, + 'ERANGE': 68, + 'ENOMSG': 49, + 'EIDRM': 24, + 'ECHRNG': 106, + 'EL2NSYNC': 156, + 'EL3HLT': 107, + 'EL3RST': 108, + 'ELNRNG': 109, + 'EUNATCH': 110, + 'ENOCSI': 111, + 'EL2HLT': 112, + 'EDEADLK': 16, + 'ENOLCK': 46, + 'EBADE': 113, + 'EBADR': 114, + 'EXFULL': 115, + 'ENOANO': 104, + 'EBADRQC': 103, + 'EBADSLT': 102, + 'EDEADLOCK': 16, + 'EBFONT': 101, + 'ENOSTR': 100, + 'ENODATA': 116, + 'ETIME': 117, + 'ENOSR': 118, + 'ENONET': 119, + 'ENOPKG': 120, + 'EREMOTE': 121, + 'ENOLINK': 47, + 'EADV': 122, + 'ESRMNT': 123, + 'ECOMM': 124, + 'EPROTO': 65, + 'EMULTIHOP': 36, + 'EDOTDOT': 125, + 'EBADMSG': 9, + 'ENOTUNIQ': 126, + 'EBADFD': 127, + 'EREMCHG': 128, + 'ELIBACC': 129, + 'ELIBBAD': 130, + 'ELIBSCN': 131, + 'ELIBMAX': 132, + 'ELIBEXEC': 133, + 'ENOSYS': 52, + 'ENOTEMPTY': 55, + 'ENAMETOOLONG': 37, + 'ELOOP': 32, + 'EOPNOTSUPP': 138, + 'EPFNOSUPPORT': 139, + 'ECONNRESET': 15, + 'ENOBUFS': 42, + 'EAFNOSUPPORT': 5, + 'EPROTOTYPE': 67, + 'ENOTSOCK': 57, + 'ENOPROTOOPT': 50, + 'ESHUTDOWN': 140, + 'ECONNREFUSED': 14, + 'EADDRINUSE': 3, + 'ECONNABORTED': 13, + 'ENETUNREACH': 40, + 'ENETDOWN': 38, + 'ETIMEDOUT': 73, + 'EHOSTDOWN': 142, + 'EHOSTUNREACH': 23, + 'EINPROGRESS': 26, + 'EALREADY': 7, + 'EDESTADDRREQ': 17, + 'EMSGSIZE': 35, + 'EPROTONOSUPPORT': 66, + 'ESOCKTNOSUPPORT': 137, + 'EADDRNOTAVAIL': 4, + 'ENETRESET': 39, + 'EISCONN': 30, + 'ENOTCONN': 53, + 'ETOOMANYREFS': 141, + 'EUSERS': 136, + 'EDQUOT': 19, + 'ESTALE': 72, + 'ENOTSUP': 138, + 'ENOMEDIUM': 148, + 'EILSEQ': 25, + 'EOVERFLOW': 61, + 'ECANCELED': 11, + 'ENOTRECOVERABLE': 56, + 'EOWNERDEAD': 62, + 'ESTRPIPE': 135, + }; + var FS = { + root:null, + mounts:[], + devices:{ + }, + streams:[], + nextInode:1, + nameTable:null, + currentPath:"/", + initialized:false, + ignorePermissions:true, + filesystems:null, + syncFSRequests:0, + readFiles:{ + }, + ErrnoError:class extends Error { + name = 'ErrnoError'; + // We set the `name` property to be able to identify `FS.ErrnoError` + // - the `name` is a standard ECMA-262 property of error objects. Kind of good to have it anyway. + // - when using PROXYFS, an error can come from an underlying FS + // as different FS objects have their own FS.ErrnoError each, + // the test `err instanceof FS.ErrnoError` won't detect an error coming from another filesystem, causing bugs. + // we'll use the reliable test `err.name == "ErrnoError"` instead + constructor(errno) { + super(runtimeInitialized ? strError(errno) : ''); + this.errno = errno; + for (var key in ERRNO_CODES) { + if (ERRNO_CODES[key] === errno) { + this.code = key; + break; + } + } + } + }, + FSStream:class { + shared = {}; + get object() { + return this.node; + } + set object(val) { + this.node = val; + } + get isRead() { + return (this.flags & 2097155) !== 1; + } + get isWrite() { + return (this.flags & 2097155) !== 0; + } + get isAppend() { + return (this.flags & 1024); + } + get flags() { + return this.shared.flags; + } + set flags(val) { + this.shared.flags = val; + } + get position() { + return this.shared.position; + } + set position(val) { + this.shared.position = val; + } + }, + FSNode:class { + node_ops = {}; + stream_ops = {}; + readMode = 292 | 73; + writeMode = 146; + mounted = null; + constructor(parent, name, mode, rdev) { + if (!parent) { + parent = this; // root node sets parent to itself + } + this.parent = parent; + this.mount = parent.mount; + this.id = FS.nextInode++; + this.name = name; + this.mode = mode; + this.rdev = rdev; + this.atime = this.mtime = this.ctime = Date.now(); + } + get read() { + return (this.mode & this.readMode) === this.readMode; + } + set read(val) { + val ? this.mode |= this.readMode : this.mode &= ~this.readMode; + } + get write() { + return (this.mode & this.writeMode) === this.writeMode; + } + set write(val) { + val ? this.mode |= this.writeMode : this.mode &= ~this.writeMode; + } + get isFolder() { + return FS.isDir(this.mode); + } + get isDevice() { + return FS.isChrdev(this.mode); + } + }, + lookupPath(path, opts = {}) { + if (!path) { + throw new FS.ErrnoError(44); + } + opts.follow_mount ??= true + + if (!PATH.isAbs(path)) { + path = FS.cwd() + '/' + path; + } + + // limit max consecutive symlinks to 40 (SYMLOOP_MAX). + linkloop: for (var nlinks = 0; nlinks < 40; nlinks++) { + // split the absolute path + var parts = path.split('/').filter((p) => !!p); + + // start at the root + var current = FS.root; + var current_path = '/'; + + for (var i = 0; i < parts.length; i++) { + var islast = (i === parts.length-1); + if (islast && opts.parent) { + // stop resolving + break; + } + + if (parts[i] === '.') { + continue; + } + + if (parts[i] === '..') { + current_path = PATH.dirname(current_path); + current = current.parent; + continue; + } + + current_path = PATH.join2(current_path, parts[i]); + try { + current = FS.lookupNode(current, parts[i]); + } catch (e) { + // if noent_okay is true, suppress a ENOENT in the last component + // and return an object with an undefined node. This is needed for + // resolving symlinks in the path when creating a file. + if ((e?.errno === 44) && islast && opts.noent_okay) { + return { path: current_path }; + } + throw e; + } + + // jump to the mount's root node if this is a mountpoint + if (FS.isMountpoint(current) && (!islast || opts.follow_mount)) { + current = current.mounted.root; + } + + // by default, lookupPath will not follow a symlink if it is the final path component. + // setting opts.follow = true will override this behavior. + if (FS.isLink(current.mode) && (!islast || opts.follow)) { + if (!current.node_ops.readlink) { + throw new FS.ErrnoError(52); + } + var link = current.node_ops.readlink(current); + if (!PATH.isAbs(link)) { + link = PATH.dirname(current_path) + '/' + link; + } + path = link + '/' + parts.slice(i + 1).join('/'); + continue linkloop; + } + } + return { path: current_path, node: current }; + } + throw new FS.ErrnoError(32); + }, + getPath(node) { + var path; + while (true) { + if (FS.isRoot(node)) { + var mount = node.mount.mountpoint; + if (!path) return mount; + return mount[mount.length-1] !== '/' ? `${mount}/${path}` : mount + path; + } + path = path ? `${node.name}/${path}` : node.name; + node = node.parent; + } + }, + hashName(parentid, name) { + var hash = 0; + + for (var i = 0; i < name.length; i++) { + hash = ((hash << 5) - hash + name.charCodeAt(i)) | 0; + } + return ((parentid + hash) >>> 0) % FS.nameTable.length; + }, + hashAddNode(node) { + var hash = FS.hashName(node.parent.id, node.name); + node.name_next = FS.nameTable[hash]; + FS.nameTable[hash] = node; + }, + hashRemoveNode(node) { + var hash = FS.hashName(node.parent.id, node.name); + if (FS.nameTable[hash] === node) { + FS.nameTable[hash] = node.name_next; + } else { + var current = FS.nameTable[hash]; + while (current) { + if (current.name_next === node) { + current.name_next = node.name_next; + break; + } + current = current.name_next; + } + } + }, + lookupNode(parent, name) { + var errCode = FS.mayLookup(parent); + if (errCode) { + throw new FS.ErrnoError(errCode); + } + var hash = FS.hashName(parent.id, name); + for (var node = FS.nameTable[hash]; node; node = node.name_next) { + var nodeName = node.name; + if (node.parent.id === parent.id && nodeName === name) { + return node; + } + } + // if we failed to find it in the cache, call into the VFS + return FS.lookup(parent, name); + }, + createNode(parent, name, mode, rdev) { + assert(typeof parent == 'object') + var node = new FS.FSNode(parent, name, mode, rdev); + + FS.hashAddNode(node); + + return node; + }, + destroyNode(node) { + FS.hashRemoveNode(node); + }, + isRoot(node) { + return node === node.parent; + }, + isMountpoint(node) { + return !!node.mounted; + }, + isFile(mode) { + return (mode & 61440) === 32768; + }, + isDir(mode) { + return (mode & 61440) === 16384; + }, + isLink(mode) { + return (mode & 61440) === 40960; + }, + isChrdev(mode) { + return (mode & 61440) === 8192; + }, + isBlkdev(mode) { + return (mode & 61440) === 24576; + }, + isFIFO(mode) { + return (mode & 61440) === 4096; + }, + isSocket(mode) { + return (mode & 49152) === 49152; + }, + flagsToPermissionString(flag) { + var perms = ['r', 'w', 'rw'][flag & 3]; + if ((flag & 512)) { + perms += 'w'; + } + return perms; + }, + nodePermissions(node, perms) { + if (FS.ignorePermissions) { + return 0; + } + // return 0 if any user, group or owner bits are set. + if (perms.includes('r') && !(node.mode & 292)) { + return 2; + } else if (perms.includes('w') && !(node.mode & 146)) { + return 2; + } else if (perms.includes('x') && !(node.mode & 73)) { + return 2; + } + return 0; + }, + mayLookup(dir) { + if (!FS.isDir(dir.mode)) return 54; + var errCode = FS.nodePermissions(dir, 'x'); + if (errCode) return errCode; + if (!dir.node_ops.lookup) return 2; + return 0; + }, + mayCreate(dir, name) { + if (!FS.isDir(dir.mode)) { + return 54; + } + try { + var node = FS.lookupNode(dir, name); + return 20; + } catch (e) { + } + return FS.nodePermissions(dir, 'wx'); + }, + mayDelete(dir, name, isdir) { + var node; + try { + node = FS.lookupNode(dir, name); + } catch (e) { + return e.errno; + } + var errCode = FS.nodePermissions(dir, 'wx'); + if (errCode) { + return errCode; + } + if (isdir) { + if (!FS.isDir(node.mode)) { + return 54; + } + if (FS.isRoot(node) || FS.getPath(node) === FS.cwd()) { + return 10; + } + } else { + if (FS.isDir(node.mode)) { + return 31; + } + } + return 0; + }, + mayOpen(node, flags) { + if (!node) { + return 44; + } + if (FS.isLink(node.mode)) { + return 32; + } else if (FS.isDir(node.mode)) { + if (FS.flagsToPermissionString(flags) !== 'r' // opening for write + || (flags & (512 | 64))) { // TODO: check for O_SEARCH? (== search for dir only) + return 31; + } + } + return FS.nodePermissions(node, FS.flagsToPermissionString(flags)); + }, + checkOpExists(op, err) { + if (!op) { + throw new FS.ErrnoError(err); + } + return op; + }, + MAX_OPEN_FDS:4096, + nextfd() { + for (var fd = 0; fd <= FS.MAX_OPEN_FDS; fd++) { + if (!FS.streams[fd]) { + return fd; + } + } + throw new FS.ErrnoError(33); + }, + getStreamChecked(fd) { + var stream = FS.getStream(fd); + if (!stream) { + throw new FS.ErrnoError(8); + } + return stream; + }, + getStream:(fd) => FS.streams[fd], + createStream(stream, fd = -1) { + assert(fd >= -1); + + // clone it, so we can return an instance of FSStream + stream = Object.assign(new FS.FSStream(), stream); + if (fd == -1) { + fd = FS.nextfd(); + } + stream.fd = fd; + FS.streams[fd] = stream; + return stream; + }, + closeStream(fd) { + FS.streams[fd] = null; + }, + dupStream(origStream, fd = -1) { + var stream = FS.createStream(origStream, fd); + stream.stream_ops?.dup?.(stream); + return stream; + }, + doSetAttr(stream, node, attr) { + var setattr = stream?.stream_ops.setattr; + var arg = setattr ? stream : node; + setattr ??= node.node_ops.setattr; + FS.checkOpExists(setattr, 63) + setattr(arg, attr); + }, + chrdev_stream_ops:{ + open(stream) { + var device = FS.getDevice(stream.node.rdev); + // override node's stream ops with the device's + stream.stream_ops = device.stream_ops; + // forward the open call + stream.stream_ops.open?.(stream); + }, + llseek() { + throw new FS.ErrnoError(70); + }, + }, + major:(dev) => ((dev) >> 8), + minor:(dev) => ((dev) & 0xff), + makedev:(ma, mi) => ((ma) << 8 | (mi)), + registerDevice(dev, ops) { + FS.devices[dev] = { stream_ops: ops }; + }, + getDevice:(dev) => FS.devices[dev], + getMounts(mount) { + var mounts = []; + var check = [mount]; + + while (check.length) { + var m = check.pop(); + + mounts.push(m); + + check.push(...m.mounts); + } + + return mounts; + }, + syncfs(populate, callback) { + if (typeof populate == 'function') { + callback = populate; + populate = false; + } + + FS.syncFSRequests++; + + if (FS.syncFSRequests > 1) { + err(`warning: ${FS.syncFSRequests} FS.syncfs operations in flight at once, probably just doing extra work`); + } + + var mounts = FS.getMounts(FS.root.mount); + var completed = 0; + + function doCallback(errCode) { + assert(FS.syncFSRequests > 0); + FS.syncFSRequests--; + return callback(errCode); + } + + function done(errCode) { + if (errCode) { + if (!done.errored) { + done.errored = true; + return doCallback(errCode); + } + return; + } + if (++completed >= mounts.length) { + doCallback(null); + } + }; + + // sync all mounts + mounts.forEach((mount) => { + if (!mount.type.syncfs) { + return done(null); + } + mount.type.syncfs(mount, populate, done); + }); + }, + mount(type, opts, mountpoint) { + if (typeof type == 'string') { + // The filesystem was not included, and instead we have an error + // message stored in the variable. + throw type; + } + var root = mountpoint === '/'; + var pseudo = !mountpoint; + var node; + + if (root && FS.root) { + throw new FS.ErrnoError(10); + } else if (!root && !pseudo) { + var lookup = FS.lookupPath(mountpoint, { follow_mount: false }); + + mountpoint = lookup.path; // use the absolute path + node = lookup.node; + + if (FS.isMountpoint(node)) { + throw new FS.ErrnoError(10); + } + + if (!FS.isDir(node.mode)) { + throw new FS.ErrnoError(54); + } + } + + var mount = { + type, + opts, + mountpoint, + mounts: [] + }; + + // create a root node for the fs + var mountRoot = type.mount(mount); + mountRoot.mount = mount; + mount.root = mountRoot; + + if (root) { + FS.root = mountRoot; + } else if (node) { + // set as a mountpoint + node.mounted = mount; + + // add the new mount to the current mount's children + if (node.mount) { + node.mount.mounts.push(mount); + } + } + + return mountRoot; + }, + unmount(mountpoint) { + var lookup = FS.lookupPath(mountpoint, { follow_mount: false }); + + if (!FS.isMountpoint(lookup.node)) { + throw new FS.ErrnoError(28); + } + + // destroy the nodes for this mount, and all its child mounts + var node = lookup.node; + var mount = node.mounted; + var mounts = FS.getMounts(mount); + + Object.keys(FS.nameTable).forEach((hash) => { + var current = FS.nameTable[hash]; + + while (current) { + var next = current.name_next; + + if (mounts.includes(current.mount)) { + FS.destroyNode(current); + } + + current = next; + } + }); + + // no longer a mountpoint + node.mounted = null; + + // remove this mount from the child mounts + var idx = node.mount.mounts.indexOf(mount); + assert(idx !== -1); + node.mount.mounts.splice(idx, 1); + }, + lookup(parent, name) { + return parent.node_ops.lookup(parent, name); + }, + mknod(path, mode, dev) { + var lookup = FS.lookupPath(path, { parent: true }); + var parent = lookup.node; + var name = PATH.basename(path); + if (!name) { + throw new FS.ErrnoError(28); + } + if (name === '.' || name === '..') { + throw new FS.ErrnoError(20); + } + var errCode = FS.mayCreate(parent, name); + if (errCode) { + throw new FS.ErrnoError(errCode); + } + if (!parent.node_ops.mknod) { + throw new FS.ErrnoError(63); + } + return parent.node_ops.mknod(parent, name, mode, dev); + }, + statfs(path) { + return FS.statfsNode(FS.lookupPath(path, {follow: true}).node); + }, + statfsStream(stream) { + // We keep a separate statfsStream function because noderawfs overrides + // it. In noderawfs, stream.node is sometimes null. Instead, we need to + // look at stream.path. + return FS.statfsNode(stream.node); + }, + statfsNode(node) { + // NOTE: None of the defaults here are true. We're just returning safe and + // sane values. Currently nodefs and rawfs replace these defaults, + // other file systems leave them alone. + var rtn = { + bsize: 4096, + frsize: 4096, + blocks: 1e6, + bfree: 5e5, + bavail: 5e5, + files: FS.nextInode, + ffree: FS.nextInode - 1, + fsid: 42, + flags: 2, + namelen: 255, + }; + + if (node.node_ops.statfs) { + Object.assign(rtn, node.node_ops.statfs(node.mount.opts.root)); + } + return rtn; + }, + create(path, mode = 0o666) { + mode &= 4095; + mode |= 32768; + return FS.mknod(path, mode, 0); + }, + mkdir(path, mode = 0o777) { + mode &= 511 | 512; + mode |= 16384; + return FS.mknod(path, mode, 0); + }, + mkdirTree(path, mode) { + var dirs = path.split('/'); + var d = ''; + for (var dir of dirs) { + if (!dir) continue; + if (d || PATH.isAbs(path)) d += '/'; + d += dir; + try { + FS.mkdir(d, mode); + } catch(e) { + if (e.errno != 20) throw e; + } + } + }, + mkdev(path, mode, dev) { + if (typeof dev == 'undefined') { + dev = mode; + mode = 0o666; + } + mode |= 8192; + return FS.mknod(path, mode, dev); + }, + symlink(oldpath, newpath) { + if (!PATH_FS.resolve(oldpath)) { + throw new FS.ErrnoError(44); + } + var lookup = FS.lookupPath(newpath, { parent: true }); + var parent = lookup.node; + if (!parent) { + throw new FS.ErrnoError(44); + } + var newname = PATH.basename(newpath); + var errCode = FS.mayCreate(parent, newname); + if (errCode) { + throw new FS.ErrnoError(errCode); + } + if (!parent.node_ops.symlink) { + throw new FS.ErrnoError(63); + } + return parent.node_ops.symlink(parent, newname, oldpath); + }, + rename(old_path, new_path) { + var old_dirname = PATH.dirname(old_path); + var new_dirname = PATH.dirname(new_path); + var old_name = PATH.basename(old_path); + var new_name = PATH.basename(new_path); + // parents must exist + var lookup, old_dir, new_dir; + + // let the errors from non existent directories percolate up + lookup = FS.lookupPath(old_path, { parent: true }); + old_dir = lookup.node; + lookup = FS.lookupPath(new_path, { parent: true }); + new_dir = lookup.node; + + if (!old_dir || !new_dir) throw new FS.ErrnoError(44); + // need to be part of the same mount + if (old_dir.mount !== new_dir.mount) { + throw new FS.ErrnoError(75); + } + // source must exist + var old_node = FS.lookupNode(old_dir, old_name); + // old path should not be an ancestor of the new path + var relative = PATH_FS.relative(old_path, new_dirname); + if (relative.charAt(0) !== '.') { + throw new FS.ErrnoError(28); + } + // new path should not be an ancestor of the old path + relative = PATH_FS.relative(new_path, old_dirname); + if (relative.charAt(0) !== '.') { + throw new FS.ErrnoError(55); + } + // see if the new path already exists + var new_node; + try { + new_node = FS.lookupNode(new_dir, new_name); + } catch (e) { + // not fatal + } + // early out if nothing needs to change + if (old_node === new_node) { + return; + } + // we'll need to delete the old entry + var isdir = FS.isDir(old_node.mode); + var errCode = FS.mayDelete(old_dir, old_name, isdir); + if (errCode) { + throw new FS.ErrnoError(errCode); + } + // need delete permissions if we'll be overwriting. + // need create permissions if new doesn't already exist. + errCode = new_node ? + FS.mayDelete(new_dir, new_name, isdir) : + FS.mayCreate(new_dir, new_name); + if (errCode) { + throw new FS.ErrnoError(errCode); + } + if (!old_dir.node_ops.rename) { + throw new FS.ErrnoError(63); + } + if (FS.isMountpoint(old_node) || (new_node && FS.isMountpoint(new_node))) { + throw new FS.ErrnoError(10); + } + // if we are going to change the parent, check write permissions + if (new_dir !== old_dir) { + errCode = FS.nodePermissions(old_dir, 'w'); + if (errCode) { + throw new FS.ErrnoError(errCode); + } + } + // remove the node from the lookup hash + FS.hashRemoveNode(old_node); + // do the underlying fs rename + try { + old_dir.node_ops.rename(old_node, new_dir, new_name); + // update old node (we do this here to avoid each backend + // needing to) + old_node.parent = new_dir; + } catch (e) { + throw e; + } finally { + // add the node back to the hash (in case node_ops.rename + // changed its name) + FS.hashAddNode(old_node); + } + }, + rmdir(path) { + var lookup = FS.lookupPath(path, { parent: true }); + var parent = lookup.node; + var name = PATH.basename(path); + var node = FS.lookupNode(parent, name); + var errCode = FS.mayDelete(parent, name, true); + if (errCode) { + throw new FS.ErrnoError(errCode); + } + if (!parent.node_ops.rmdir) { + throw new FS.ErrnoError(63); + } + if (FS.isMountpoint(node)) { + throw new FS.ErrnoError(10); + } + parent.node_ops.rmdir(parent, name); + FS.destroyNode(node); + }, + readdir(path) { + var lookup = FS.lookupPath(path, { follow: true }); + var node = lookup.node; + var readdir = FS.checkOpExists(node.node_ops.readdir, 54); + return readdir(node); + }, + unlink(path) { + var lookup = FS.lookupPath(path, { parent: true }); + var parent = lookup.node; + if (!parent) { + throw new FS.ErrnoError(44); + } + var name = PATH.basename(path); + var node = FS.lookupNode(parent, name); + var errCode = FS.mayDelete(parent, name, false); + if (errCode) { + // According to POSIX, we should map EISDIR to EPERM, but + // we instead do what Linux does (and we must, as we use + // the musl linux libc). + throw new FS.ErrnoError(errCode); + } + if (!parent.node_ops.unlink) { + throw new FS.ErrnoError(63); + } + if (FS.isMountpoint(node)) { + throw new FS.ErrnoError(10); + } + parent.node_ops.unlink(parent, name); + FS.destroyNode(node); + }, + readlink(path) { + var lookup = FS.lookupPath(path); + var link = lookup.node; + if (!link) { + throw new FS.ErrnoError(44); + } + if (!link.node_ops.readlink) { + throw new FS.ErrnoError(28); + } + return link.node_ops.readlink(link); + }, + stat(path, dontFollow) { + var lookup = FS.lookupPath(path, { follow: !dontFollow }); + var node = lookup.node; + var getattr = FS.checkOpExists(node.node_ops.getattr, 63); + return getattr(node); + }, + fstat(fd) { + var stream = FS.getStreamChecked(fd); + var node = stream.node; + var getattr = stream.stream_ops.getattr; + var arg = getattr ? stream : node; + getattr ??= node.node_ops.getattr; + FS.checkOpExists(getattr, 63) + return getattr(arg); + }, + lstat(path) { + return FS.stat(path, true); + }, + doChmod(stream, node, mode, dontFollow) { + FS.doSetAttr(stream, node, { + mode: (mode & 4095) | (node.mode & ~4095), + ctime: Date.now(), + dontFollow + }); + }, + chmod(path, mode, dontFollow) { + var node; + if (typeof path == 'string') { + var lookup = FS.lookupPath(path, { follow: !dontFollow }); + node = lookup.node; + } else { + node = path; + } + FS.doChmod(null, node, mode, dontFollow); + }, + lchmod(path, mode) { + FS.chmod(path, mode, true); + }, + fchmod(fd, mode) { + var stream = FS.getStreamChecked(fd); + FS.doChmod(stream, stream.node, mode, false); + }, + doChown(stream, node, dontFollow) { + FS.doSetAttr(stream, node, { + timestamp: Date.now(), + dontFollow + // we ignore the uid / gid for now + }); + }, + chown(path, uid, gid, dontFollow) { + var node; + if (typeof path == 'string') { + var lookup = FS.lookupPath(path, { follow: !dontFollow }); + node = lookup.node; + } else { + node = path; + } + FS.doChown(null, node, dontFollow); + }, + lchown(path, uid, gid) { + FS.chown(path, uid, gid, true); + }, + fchown(fd, uid, gid) { + var stream = FS.getStreamChecked(fd); + FS.doChown(stream, stream.node, false); + }, + doTruncate(stream, node, len) { + if (FS.isDir(node.mode)) { + throw new FS.ErrnoError(31); + } + if (!FS.isFile(node.mode)) { + throw new FS.ErrnoError(28); + } + var errCode = FS.nodePermissions(node, 'w'); + if (errCode) { + throw new FS.ErrnoError(errCode); + } + FS.doSetAttr(stream, node, { + size: len, + timestamp: Date.now() + }); + }, + truncate(path, len) { + if (len < 0) { + throw new FS.ErrnoError(28); + } + var node; + if (typeof path == 'string') { + var lookup = FS.lookupPath(path, { follow: true }); + node = lookup.node; + } else { + node = path; + } + FS.doTruncate(null, node, len); + }, + ftruncate(fd, len) { + var stream = FS.getStreamChecked(fd); + if (len < 0 || (stream.flags & 2097155) === 0) { + throw new FS.ErrnoError(28); + } + FS.doTruncate(stream, stream.node, len); + }, + utime(path, atime, mtime) { + var lookup = FS.lookupPath(path, { follow: true }); + var node = lookup.node; + var setattr = FS.checkOpExists(node.node_ops.setattr, 63); + setattr(node, { + atime: atime, + mtime: mtime + }); + }, + open(path, flags, mode = 0o666) { + if (path === "") { + throw new FS.ErrnoError(44); + } + flags = typeof flags == 'string' ? FS_modeStringToFlags(flags) : flags; + if ((flags & 64)) { + mode = (mode & 4095) | 32768; + } else { + mode = 0; + } + var node; + var isDirPath; + if (typeof path == 'object') { + node = path; + } else { + isDirPath = path.endsWith("/"); + // noent_okay makes it so that if the final component of the path + // doesn't exist, lookupPath returns `node: undefined`. `path` will be + // updated to point to the target of all symlinks. + var lookup = FS.lookupPath(path, { + follow: !(flags & 131072), + noent_okay: true + }); + node = lookup.node; + path = lookup.path; + } + // perhaps we need to create the node + var created = false; + if ((flags & 64)) { + if (node) { + // if O_CREAT and O_EXCL are set, error out if the node already exists + if ((flags & 128)) { + throw new FS.ErrnoError(20); + } + } else if (isDirPath) { + throw new FS.ErrnoError(31); + } else { + // node doesn't exist, try to create it + // Ignore the permission bits here to ensure we can `open` this new + // file below. We use chmod below the apply the permissions once the + // file is open. + node = FS.mknod(path, mode | 0o777, 0); + created = true; + } + } + if (!node) { + throw new FS.ErrnoError(44); + } + // can't truncate a device + if (FS.isChrdev(node.mode)) { + flags &= ~512; + } + // if asked only for a directory, then this must be one + if ((flags & 65536) && !FS.isDir(node.mode)) { + throw new FS.ErrnoError(54); + } + // check permissions, if this is not a file we just created now (it is ok to + // create and write to a file with read-only permissions; it is read-only + // for later use) + if (!created) { + var errCode = FS.mayOpen(node, flags); + if (errCode) { + throw new FS.ErrnoError(errCode); + } + } + // do truncation if necessary + if ((flags & 512) && !created) { + FS.truncate(node, 0); + } + // we've already handled these, don't pass down to the underlying vfs + flags &= ~(128 | 512 | 131072); + + // register the stream with the filesystem + var stream = FS.createStream({ + node, + path: FS.getPath(node), // we want the absolute path to the node + flags, + seekable: true, + position: 0, + stream_ops: node.stream_ops, + // used by the file family libc calls (fopen, fwrite, ferror, etc.) + ungotten: [], + error: false + }); + // call the new stream's open function + if (stream.stream_ops.open) { + stream.stream_ops.open(stream); + } + if (created) { + FS.chmod(node, mode & 0o777); + } + if (Module['logReadFiles'] && !(flags & 1)) { + if (!(path in FS.readFiles)) { + FS.readFiles[path] = 1; + } + } + return stream; + }, + close(stream) { + if (FS.isClosed(stream)) { + throw new FS.ErrnoError(8); + } + if (stream.getdents) stream.getdents = null; // free readdir state + try { + if (stream.stream_ops.close) { + stream.stream_ops.close(stream); + } + } catch (e) { + throw e; + } finally { + FS.closeStream(stream.fd); + } + stream.fd = null; + }, + isClosed(stream) { + return stream.fd === null; + }, + llseek(stream, offset, whence) { + if (FS.isClosed(stream)) { + throw new FS.ErrnoError(8); + } + if (!stream.seekable || !stream.stream_ops.llseek) { + throw new FS.ErrnoError(70); + } + if (whence != 0 && whence != 1 && whence != 2) { + throw new FS.ErrnoError(28); + } + stream.position = stream.stream_ops.llseek(stream, offset, whence); + stream.ungotten = []; + return stream.position; + }, + read(stream, buffer, offset, length, position) { + assert(offset >= 0); + if (length < 0 || position < 0) { + throw new FS.ErrnoError(28); + } + if (FS.isClosed(stream)) { + throw new FS.ErrnoError(8); + } + if ((stream.flags & 2097155) === 1) { + throw new FS.ErrnoError(8); + } + if (FS.isDir(stream.node.mode)) { + throw new FS.ErrnoError(31); + } + if (!stream.stream_ops.read) { + throw new FS.ErrnoError(28); + } + var seeking = typeof position != 'undefined'; + if (!seeking) { + position = stream.position; + } else if (!stream.seekable) { + throw new FS.ErrnoError(70); + } + var bytesRead = stream.stream_ops.read(stream, buffer, offset, length, position); + if (!seeking) stream.position += bytesRead; + return bytesRead; + }, + write(stream, buffer, offset, length, position, canOwn) { + assert(offset >= 0); + if (length < 0 || position < 0) { + throw new FS.ErrnoError(28); + } + if (FS.isClosed(stream)) { + throw new FS.ErrnoError(8); + } + if ((stream.flags & 2097155) === 0) { + throw new FS.ErrnoError(8); + } + if (FS.isDir(stream.node.mode)) { + throw new FS.ErrnoError(31); + } + if (!stream.stream_ops.write) { + throw new FS.ErrnoError(28); + } + if (stream.seekable && stream.flags & 1024) { + // seek to the end before writing in append mode + FS.llseek(stream, 0, 2); + } + var seeking = typeof position != 'undefined'; + if (!seeking) { + position = stream.position; + } else if (!stream.seekable) { + throw new FS.ErrnoError(70); + } + var bytesWritten = stream.stream_ops.write(stream, buffer, offset, length, position, canOwn); + if (!seeking) stream.position += bytesWritten; + return bytesWritten; + }, + mmap(stream, length, position, prot, flags) { + // User requests writing to file (prot & PROT_WRITE != 0). + // Checking if we have permissions to write to the file unless + // MAP_PRIVATE flag is set. According to POSIX spec it is possible + // to write to file opened in read-only mode with MAP_PRIVATE flag, + // as all modifications will be visible only in the memory of + // the current process. + if ((prot & 2) !== 0 + && (flags & 2) === 0 + && (stream.flags & 2097155) !== 2) { + throw new FS.ErrnoError(2); + } + if ((stream.flags & 2097155) === 1) { + throw new FS.ErrnoError(2); + } + if (!stream.stream_ops.mmap) { + throw new FS.ErrnoError(43); + } + if (!length) { + throw new FS.ErrnoError(28); + } + return stream.stream_ops.mmap(stream, length, position, prot, flags); + }, + msync(stream, buffer, offset, length, mmapFlags) { + assert(offset >= 0); + if (!stream.stream_ops.msync) { + return 0; + } + return stream.stream_ops.msync(stream, buffer, offset, length, mmapFlags); + }, + ioctl(stream, cmd, arg) { + if (!stream.stream_ops.ioctl) { + throw new FS.ErrnoError(59); + } + return stream.stream_ops.ioctl(stream, cmd, arg); + }, + readFile(path, opts = {}) { + opts.flags = opts.flags || 0; + opts.encoding = opts.encoding || 'binary'; + if (opts.encoding !== 'utf8' && opts.encoding !== 'binary') { + throw new Error(`Invalid encoding type "${opts.encoding}"`); + } + var ret; + var stream = FS.open(path, opts.flags); + var stat = FS.stat(path); + var length = stat.size; + var buf = new Uint8Array(length); + FS.read(stream, buf, 0, length, 0); + if (opts.encoding === 'utf8') { + ret = UTF8ArrayToString(buf); + } else if (opts.encoding === 'binary') { + ret = buf; + } + FS.close(stream); + return ret; + }, + writeFile(path, data, opts = {}) { + opts.flags = opts.flags || 577; + var stream = FS.open(path, opts.flags, opts.mode); + if (typeof data == 'string') { + var buf = new Uint8Array(lengthBytesUTF8(data)+1); + var actualNumBytes = stringToUTF8Array(data, buf, 0, buf.length); + FS.write(stream, buf, 0, actualNumBytes, undefined, opts.canOwn); + } else if (ArrayBuffer.isView(data)) { + FS.write(stream, data, 0, data.byteLength, undefined, opts.canOwn); + } else { + throw new Error('Unsupported data type'); + } + FS.close(stream); + }, + cwd:() => FS.currentPath, + chdir(path) { + var lookup = FS.lookupPath(path, { follow: true }); + if (lookup.node === null) { + throw new FS.ErrnoError(44); + } + if (!FS.isDir(lookup.node.mode)) { + throw new FS.ErrnoError(54); + } + var errCode = FS.nodePermissions(lookup.node, 'x'); + if (errCode) { + throw new FS.ErrnoError(errCode); + } + FS.currentPath = lookup.path; + }, + createDefaultDirectories() { + FS.mkdir('/tmp'); + FS.mkdir('/home'); + FS.mkdir('/home/web_user'); + }, + createDefaultDevices() { + // create /dev + FS.mkdir('/dev'); + // setup /dev/null + FS.registerDevice(FS.makedev(1, 3), { + read: () => 0, + write: (stream, buffer, offset, length, pos) => length, + llseek: () => 0, + }); + FS.mkdev('/dev/null', FS.makedev(1, 3)); + // setup /dev/tty and /dev/tty1 + // stderr needs to print output using err() rather than out() + // so we register a second tty just for it. + TTY.register(FS.makedev(5, 0), TTY.default_tty_ops); + TTY.register(FS.makedev(6, 0), TTY.default_tty1_ops); + FS.mkdev('/dev/tty', FS.makedev(5, 0)); + FS.mkdev('/dev/tty1', FS.makedev(6, 0)); + // setup /dev/[u]random + // use a buffer to avoid overhead of individual crypto calls per byte + var randomBuffer = new Uint8Array(1024), randomLeft = 0; + var randomByte = () => { + if (randomLeft === 0) { + randomFill(randomBuffer); + randomLeft = randomBuffer.byteLength; + } + return randomBuffer[--randomLeft]; + }; + FS.createDevice('/dev', 'random', randomByte); + FS.createDevice('/dev', 'urandom', randomByte); + // we're not going to emulate the actual shm device, + // just create the tmp dirs that reside in it commonly + FS.mkdir('/dev/shm'); + FS.mkdir('/dev/shm/tmp'); + }, + createSpecialDirectories() { + // create /proc/self/fd which allows /proc/self/fd/6 => readlink gives the + // name of the stream for fd 6 (see test_unistd_ttyname) + FS.mkdir('/proc'); + var proc_self = FS.mkdir('/proc/self'); + FS.mkdir('/proc/self/fd'); + FS.mount({ + mount() { + var node = FS.createNode(proc_self, 'fd', 16895, 73); + node.stream_ops = { + llseek: MEMFS.stream_ops.llseek, + }; + node.node_ops = { + lookup(parent, name) { + var fd = +name; + var stream = FS.getStreamChecked(fd); + var ret = { + parent: null, + mount: { mountpoint: 'fake' }, + node_ops: { readlink: () => stream.path }, + id: fd + 1, + }; + ret.parent = ret; // make it look like a simple root node + return ret; + }, + readdir() { + return Array.from(FS.streams.entries()) + .filter(([k, v]) => v) + .map(([k, v]) => k.toString()); + } + }; + return node; + } + }, {}, '/proc/self/fd'); + }, + createStandardStreams(input, output, error) { + // TODO deprecate the old functionality of a single + // input / output callback and that utilizes FS.createDevice + // and instead require a unique set of stream ops + + // by default, we symlink the standard streams to the + // default tty devices. however, if the standard streams + // have been overwritten we create a unique device for + // them instead. + if (input) { + FS.createDevice('/dev', 'stdin', input); + } else { + FS.symlink('/dev/tty', '/dev/stdin'); + } + if (output) { + FS.createDevice('/dev', 'stdout', null, output); + } else { + FS.symlink('/dev/tty', '/dev/stdout'); + } + if (error) { + FS.createDevice('/dev', 'stderr', null, error); + } else { + FS.symlink('/dev/tty1', '/dev/stderr'); + } + + // open default streams for the stdin, stdout and stderr devices + var stdin = FS.open('/dev/stdin', 0); + var stdout = FS.open('/dev/stdout', 1); + var stderr = FS.open('/dev/stderr', 1); + assert(stdin.fd === 0, `invalid handle for stdin (${stdin.fd})`); + assert(stdout.fd === 1, `invalid handle for stdout (${stdout.fd})`); + assert(stderr.fd === 2, `invalid handle for stderr (${stderr.fd})`); + }, + staticInit() { + FS.nameTable = new Array(4096); + + FS.mount(MEMFS, {}, '/'); + + FS.createDefaultDirectories(); + FS.createDefaultDevices(); + FS.createSpecialDirectories(); + + FS.filesystems = { + 'MEMFS': MEMFS, + }; + }, + init(input, output, error) { + assert(!FS.initialized, 'FS.init was previously called. If you want to initialize later with custom parameters, remove any earlier calls (note that one is automatically added to the generated code)'); + FS.initialized = true; + + // Allow Module.stdin etc. to provide defaults, if none explicitly passed to us here + input ??= Module['stdin']; + output ??= Module['stdout']; + error ??= Module['stderr']; + + FS.createStandardStreams(input, output, error); + }, + quit() { + FS.initialized = false; + // force-flush all streams, so we get musl std streams printed out + _fflush(0); + // close all of our streams + for (var stream of FS.streams) { + if (stream) { + FS.close(stream); + } + } + }, + findObject(path, dontResolveLastLink) { + var ret = FS.analyzePath(path, dontResolveLastLink); + if (!ret.exists) { + return null; + } + return ret.object; + }, + analyzePath(path, dontResolveLastLink) { + // operate from within the context of the symlink's target + try { + var lookup = FS.lookupPath(path, { follow: !dontResolveLastLink }); + path = lookup.path; + } catch (e) { + } + var ret = { + isRoot: false, exists: false, error: 0, name: null, path: null, object: null, + parentExists: false, parentPath: null, parentObject: null + }; + try { + var lookup = FS.lookupPath(path, { parent: true }); + ret.parentExists = true; + ret.parentPath = lookup.path; + ret.parentObject = lookup.node; + ret.name = PATH.basename(path); + lookup = FS.lookupPath(path, { follow: !dontResolveLastLink }); + ret.exists = true; + ret.path = lookup.path; + ret.object = lookup.node; + ret.name = lookup.node.name; + ret.isRoot = lookup.path === '/'; + } catch (e) { + ret.error = e.errno; + }; + return ret; + }, + createPath(parent, path, canRead, canWrite) { + parent = typeof parent == 'string' ? parent : FS.getPath(parent); + var parts = path.split('/').reverse(); + while (parts.length) { + var part = parts.pop(); + if (!part) continue; + var current = PATH.join2(parent, part); + try { + FS.mkdir(current); + } catch (e) { + if (e.errno != 20) throw e; + } + parent = current; + } + return current; + }, + createFile(parent, name, properties, canRead, canWrite) { + var path = PATH.join2(typeof parent == 'string' ? parent : FS.getPath(parent), name); + var mode = FS_getMode(canRead, canWrite); + return FS.create(path, mode); + }, + createDataFile(parent, name, data, canRead, canWrite, canOwn) { + var path = name; + if (parent) { + parent = typeof parent == 'string' ? parent : FS.getPath(parent); + path = name ? PATH.join2(parent, name) : parent; + } + var mode = FS_getMode(canRead, canWrite); + var node = FS.create(path, mode); + if (data) { + if (typeof data == 'string') { + var arr = new Array(data.length); + for (var i = 0, len = data.length; i < len; ++i) arr[i] = data.charCodeAt(i); + data = arr; + } + // make sure we can write to the file + FS.chmod(node, mode | 146); + var stream = FS.open(node, 577); + FS.write(stream, data, 0, data.length, 0, canOwn); + FS.close(stream); + FS.chmod(node, mode); + } + }, + createDevice(parent, name, input, output) { + var path = PATH.join2(typeof parent == 'string' ? parent : FS.getPath(parent), name); + var mode = FS_getMode(!!input, !!output); + FS.createDevice.major ??= 64; + var dev = FS.makedev(FS.createDevice.major++, 0); + // Create a fake device that a set of stream ops to emulate + // the old behavior. + FS.registerDevice(dev, { + open(stream) { + stream.seekable = false; + }, + close(stream) { + // flush any pending line data + if (output?.buffer?.length) { + output(10); + } + }, + read(stream, buffer, offset, length, pos /* ignored */) { + var bytesRead = 0; + for (var i = 0; i < length; i++) { + var result; + try { + result = input(); + } catch (e) { + throw new FS.ErrnoError(29); + } + if (result === undefined && bytesRead === 0) { + throw new FS.ErrnoError(6); + } + if (result === null || result === undefined) break; + bytesRead++; + buffer[offset+i] = result; + } + if (bytesRead) { + stream.node.atime = Date.now(); + } + return bytesRead; + }, + write(stream, buffer, offset, length, pos) { + for (var i = 0; i < length; i++) { + try { + output(buffer[offset+i]); + } catch (e) { + throw new FS.ErrnoError(29); + } + } + if (length) { + stream.node.mtime = stream.node.ctime = Date.now(); + } + return i; + } + }); + return FS.mkdev(path, mode, dev); + }, + forceLoadFile(obj) { + if (obj.isDevice || obj.isFolder || obj.link || obj.contents) return true; + if (typeof XMLHttpRequest != 'undefined') { + throw new Error("Lazy loading should have been performed (contents set) in createLazyFile, but it was not. Lazy loading only works in web workers. Use --embed-file or --preload-file in emcc on the main thread."); + } else { // Command-line. + try { + obj.contents = readBinary(obj.url); + obj.usedBytes = obj.contents.length; + } catch (e) { + throw new FS.ErrnoError(29); + } + } + }, + createLazyFile(parent, name, url, canRead, canWrite) { + // Lazy chunked Uint8Array (implements get and length from Uint8Array). + // Actual getting is abstracted away for eventual reuse. + class LazyUint8Array { + lengthKnown = false; + chunks = []; // Loaded chunks. Index is the chunk number + get(idx) { + if (idx > this.length-1 || idx < 0) { + return undefined; + } + var chunkOffset = idx % this.chunkSize; + var chunkNum = (idx / this.chunkSize)|0; + return this.getter(chunkNum)[chunkOffset]; + } + setDataGetter(getter) { + this.getter = getter; + } + cacheLength() { + // Find length + var xhr = new XMLHttpRequest(); + xhr.open('HEAD', url, false); + xhr.send(null); + if (!(xhr.status >= 200 && xhr.status < 300 || xhr.status === 304)) throw new Error("Couldn't load " + url + ". Status: " + xhr.status); + var datalength = Number(xhr.getResponseHeader("Content-length")); + var header; + var hasByteServing = (header = xhr.getResponseHeader("Accept-Ranges")) && header === "bytes"; + var usesGzip = (header = xhr.getResponseHeader("Content-Encoding")) && header === "gzip"; + + var chunkSize = 1024*1024; // Chunk size in bytes + + if (!hasByteServing) chunkSize = datalength; + + // Function to get a range from the remote URL. + var doXHR = (from, to) => { + if (from > to) throw new Error("invalid range (" + from + ", " + to + ") or no bytes requested!"); + if (to > datalength-1) throw new Error("only " + datalength + " bytes available! programmer error!"); + + // TODO: Use mozResponseArrayBuffer, responseStream, etc. if available. + var xhr = new XMLHttpRequest(); + xhr.open('GET', url, false); + if (datalength !== chunkSize) xhr.setRequestHeader("Range", "bytes=" + from + "-" + to); + + // Some hints to the browser that we want binary data. + xhr.responseType = 'arraybuffer'; + if (xhr.overrideMimeType) { + xhr.overrideMimeType('text/plain; charset=x-user-defined'); + } + + xhr.send(null); + if (!(xhr.status >= 200 && xhr.status < 300 || xhr.status === 304)) throw new Error("Couldn't load " + url + ". Status: " + xhr.status); + if (xhr.response !== undefined) { + return new Uint8Array(/** @type{Array} */(xhr.response || [])); + } + return intArrayFromString(xhr.responseText || '', true); + }; + var lazyArray = this; + lazyArray.setDataGetter((chunkNum) => { + var start = chunkNum * chunkSize; + var end = (chunkNum+1) * chunkSize - 1; // including this byte + end = Math.min(end, datalength-1); // if datalength-1 is selected, this is the last block + if (typeof lazyArray.chunks[chunkNum] == 'undefined') { + lazyArray.chunks[chunkNum] = doXHR(start, end); + } + if (typeof lazyArray.chunks[chunkNum] == 'undefined') throw new Error('doXHR failed!'); + return lazyArray.chunks[chunkNum]; + }); + + if (usesGzip || !datalength) { + // if the server uses gzip or doesn't supply the length, we have to download the whole file to get the (uncompressed) length + chunkSize = datalength = 1; // this will force getter(0)/doXHR do download the whole file + datalength = this.getter(0).length; + chunkSize = datalength; + out("LazyFiles on gzip forces download of the whole file when length is accessed"); + } + + this._length = datalength; + this._chunkSize = chunkSize; + this.lengthKnown = true; + } + get length() { + if (!this.lengthKnown) { + this.cacheLength(); + } + return this._length; + } + get chunkSize() { + if (!this.lengthKnown) { + this.cacheLength(); + } + return this._chunkSize; + } + } + + if (typeof XMLHttpRequest != 'undefined') { + if (!ENVIRONMENT_IS_WORKER) throw 'Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc'; + var lazyArray = new LazyUint8Array(); + var properties = { isDevice: false, contents: lazyArray }; + } else { + var properties = { isDevice: false, url: url }; + } + + var node = FS.createFile(parent, name, properties, canRead, canWrite); + // This is a total hack, but I want to get this lazy file code out of the + // core of MEMFS. If we want to keep this lazy file concept I feel it should + // be its own thin LAZYFS proxying calls to MEMFS. + if (properties.contents) { + node.contents = properties.contents; + } else if (properties.url) { + node.contents = null; + node.url = properties.url; + } + // Add a function that defers querying the file size until it is asked the first time. + Object.defineProperties(node, { + usedBytes: { + get: function() { return this.contents.length; } + } + }); + // override each stream op with one that tries to force load the lazy file first + var stream_ops = {}; + var keys = Object.keys(node.stream_ops); + keys.forEach((key) => { + var fn = node.stream_ops[key]; + stream_ops[key] = (...args) => { + FS.forceLoadFile(node); + return fn(...args); + }; + }); + function writeChunks(stream, buffer, offset, length, position) { + var contents = stream.node.contents; + if (position >= contents.length) + return 0; + var size = Math.min(contents.length - position, length); + assert(size >= 0); + if (contents.slice) { // normal array + for (var i = 0; i < size; i++) { + buffer[offset + i] = contents[position + i]; + } + } else { + for (var i = 0; i < size; i++) { // LazyUint8Array from sync binary XHR + buffer[offset + i] = contents.get(position + i); + } + } + return size; + } + // use a custom read function + stream_ops.read = (stream, buffer, offset, length, position) => { + FS.forceLoadFile(node); + return writeChunks(stream, buffer, offset, length, position) + }; + // use a custom mmap function + stream_ops.mmap = (stream, length, position, prot, flags) => { + FS.forceLoadFile(node); + var ptr = mmapAlloc(length); + if (!ptr) { + throw new FS.ErrnoError(48); + } + writeChunks(stream, HEAP8, ptr, length, position); + return { ptr, allocated: true }; + }; + node.stream_ops = stream_ops; + return node; + }, + absolutePath() { + abort('FS.absolutePath has been removed; use PATH_FS.resolve instead'); + }, + createFolder() { + abort('FS.createFolder has been removed; use FS.mkdir instead'); + }, + createLink() { + abort('FS.createLink has been removed; use FS.symlink instead'); + }, + joinPath() { + abort('FS.joinPath has been removed; use PATH.join instead'); + }, + mmapAlloc() { + abort('FS.mmapAlloc has been replaced by the top level function mmapAlloc'); + }, + standardizePath() { + abort('FS.standardizePath has been removed; use PATH.normalize instead'); + }, + }; + + var SYSCALLS = { + DEFAULT_POLLMASK:5, + calculateAt(dirfd, path, allowEmpty) { + if (PATH.isAbs(path)) { + return path; + } + // relative path + var dir; + if (dirfd === -100) { + dir = FS.cwd(); + } else { + var dirstream = SYSCALLS.getStreamFromFD(dirfd); + dir = dirstream.path; + } + if (path.length == 0) { + if (!allowEmpty) { + throw new FS.ErrnoError(44);; + } + return dir; + } + return dir + '/' + path; + }, + writeStat(buf, stat) { + HEAP32[((buf)>>2)] = stat.dev; + HEAP32[(((buf)+(4))>>2)] = stat.mode; + HEAPU32[(((buf)+(8))>>2)] = stat.nlink; + HEAP32[(((buf)+(12))>>2)] = stat.uid; + HEAP32[(((buf)+(16))>>2)] = stat.gid; + HEAP32[(((buf)+(20))>>2)] = stat.rdev; + HEAP64[(((buf)+(24))>>3)] = BigInt(stat.size); + HEAP32[(((buf)+(32))>>2)] = 4096; + HEAP32[(((buf)+(36))>>2)] = stat.blocks; + var atime = stat.atime.getTime(); + var mtime = stat.mtime.getTime(); + var ctime = stat.ctime.getTime(); + HEAP64[(((buf)+(40))>>3)] = BigInt(Math.floor(atime / 1000)); + HEAPU32[(((buf)+(48))>>2)] = (atime % 1000) * 1000 * 1000; + HEAP64[(((buf)+(56))>>3)] = BigInt(Math.floor(mtime / 1000)); + HEAPU32[(((buf)+(64))>>2)] = (mtime % 1000) * 1000 * 1000; + HEAP64[(((buf)+(72))>>3)] = BigInt(Math.floor(ctime / 1000)); + HEAPU32[(((buf)+(80))>>2)] = (ctime % 1000) * 1000 * 1000; + HEAP64[(((buf)+(88))>>3)] = BigInt(stat.ino); + return 0; + }, + writeStatFs(buf, stats) { + HEAP32[(((buf)+(4))>>2)] = stats.bsize; + HEAP32[(((buf)+(40))>>2)] = stats.bsize; + HEAP32[(((buf)+(8))>>2)] = stats.blocks; + HEAP32[(((buf)+(12))>>2)] = stats.bfree; + HEAP32[(((buf)+(16))>>2)] = stats.bavail; + HEAP32[(((buf)+(20))>>2)] = stats.files; + HEAP32[(((buf)+(24))>>2)] = stats.ffree; + HEAP32[(((buf)+(28))>>2)] = stats.fsid; + HEAP32[(((buf)+(44))>>2)] = stats.flags; // ST_NOSUID + HEAP32[(((buf)+(36))>>2)] = stats.namelen; + }, + doMsync(addr, stream, len, flags, offset) { + if (!FS.isFile(stream.node.mode)) { + throw new FS.ErrnoError(43); + } + if (flags & 2) { + // MAP_PRIVATE calls need not to be synced back to underlying fs + return 0; + } + var buffer = HEAPU8.slice(addr, addr + len); + FS.msync(stream, buffer, offset, len, flags); + }, + getStreamFromFD(fd) { + var stream = FS.getStreamChecked(fd); + return stream; + }, + varargs:undefined, + getStr(ptr) { + var ret = UTF8ToString(ptr); + return ret; + }, + }; + function ___syscall_chmod(path, mode) { + try { + + path = SYSCALLS.getStr(path); + FS.chmod(path, mode); + return 0; + } catch (e) { + if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + return -e.errno; + } + } + + function ___syscall_fchmod(fd, mode) { + try { + + FS.fchmod(fd, mode); + return 0; + } catch (e) { + if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + return -e.errno; + } + } + + /** @suppress {duplicate } */ + var syscallGetVarargI = () => { + assert(SYSCALLS.varargs != undefined); + // the `+` prepended here is necessary to convince the JSCompiler that varargs is indeed a number. + var ret = HEAP32[((+SYSCALLS.varargs)>>2)]; + SYSCALLS.varargs += 4; + return ret; + }; + var syscallGetVarargP = syscallGetVarargI; + + + function ___syscall_fcntl64(fd, cmd, varargs) { + SYSCALLS.varargs = varargs; + try { + + var stream = SYSCALLS.getStreamFromFD(fd); + switch (cmd) { + case 0: { + var arg = syscallGetVarargI(); + if (arg < 0) { + return -28; + } + while (FS.streams[arg]) { + arg++; + } + var newStream; + newStream = FS.dupStream(stream, arg); + return newStream.fd; + } + case 1: + case 2: + return 0; // FD_CLOEXEC makes no sense for a single process. + case 3: + return stream.flags; + case 4: { + var arg = syscallGetVarargI(); + stream.flags |= arg; + return 0; + } + case 12: { + var arg = syscallGetVarargP(); + var offset = 0; + // We're always unlocked. + HEAP16[(((arg)+(offset))>>1)] = 2; + return 0; + } + case 13: + case 14: + // Pretend that the locking is successful. These are process-level locks, + // and Emscripten programs are a single process. If we supported linking a + // filesystem between programs, we'd need to do more here. + // See https://github.com/emscripten-core/emscripten/issues/23697 + return 0; + } + return -28; + } catch (e) { + if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + return -e.errno; + } + } + + function ___syscall_fstat64(fd, buf) { + try { + + return SYSCALLS.writeStat(buf, FS.fstat(fd)); + } catch (e) { + if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + return -e.errno; + } + } + + + function ___syscall_ioctl(fd, op, varargs) { + SYSCALLS.varargs = varargs; + try { + + var stream = SYSCALLS.getStreamFromFD(fd); + switch (op) { + case 21509: { + if (!stream.tty) return -59; + return 0; + } + case 21505: { + if (!stream.tty) return -59; + if (stream.tty.ops.ioctl_tcgets) { + var termios = stream.tty.ops.ioctl_tcgets(stream); + var argp = syscallGetVarargP(); + HEAP32[((argp)>>2)] = termios.c_iflag || 0; + HEAP32[(((argp)+(4))>>2)] = termios.c_oflag || 0; + HEAP32[(((argp)+(8))>>2)] = termios.c_cflag || 0; + HEAP32[(((argp)+(12))>>2)] = termios.c_lflag || 0; + for (var i = 0; i < 32; i++) { + HEAP8[(argp + i)+(17)] = termios.c_cc[i] || 0; + } + return 0; + } + return 0; + } + case 21510: + case 21511: + case 21512: { + if (!stream.tty) return -59; + return 0; // no-op, not actually adjusting terminal settings + } + case 21506: + case 21507: + case 21508: { + if (!stream.tty) return -59; + if (stream.tty.ops.ioctl_tcsets) { + var argp = syscallGetVarargP(); + var c_iflag = HEAP32[((argp)>>2)]; + var c_oflag = HEAP32[(((argp)+(4))>>2)]; + var c_cflag = HEAP32[(((argp)+(8))>>2)]; + var c_lflag = HEAP32[(((argp)+(12))>>2)]; + var c_cc = [] + for (var i = 0; i < 32; i++) { + c_cc.push(HEAP8[(argp + i)+(17)]); + } + return stream.tty.ops.ioctl_tcsets(stream.tty, op, { c_iflag, c_oflag, c_cflag, c_lflag, c_cc }); + } + return 0; // no-op, not actually adjusting terminal settings + } + case 21519: { + if (!stream.tty) return -59; + var argp = syscallGetVarargP(); + HEAP32[((argp)>>2)] = 0; + return 0; + } + case 21520: { + if (!stream.tty) return -59; + return -28; // not supported + } + case 21531: { + var argp = syscallGetVarargP(); + return FS.ioctl(stream, op, argp); + } + case 21523: { + // TODO: in theory we should write to the winsize struct that gets + // passed in, but for now musl doesn't read anything on it + if (!stream.tty) return -59; + if (stream.tty.ops.ioctl_tiocgwinsz) { + var winsize = stream.tty.ops.ioctl_tiocgwinsz(stream.tty); + var argp = syscallGetVarargP(); + HEAP16[((argp)>>1)] = winsize[0]; + HEAP16[(((argp)+(2))>>1)] = winsize[1]; + } + return 0; + } + case 21524: { + // TODO: technically, this ioctl call should change the window size. + // but, since emscripten doesn't have any concept of a terminal window + // yet, we'll just silently throw it away as we do TIOCGWINSZ + if (!stream.tty) return -59; + return 0; + } + case 21515: { + if (!stream.tty) return -59; + return 0; + } + default: return -28; // not supported + } + } catch (e) { + if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + return -e.errno; + } + } + + function ___syscall_lstat64(path, buf) { + try { + + path = SYSCALLS.getStr(path); + return SYSCALLS.writeStat(buf, FS.lstat(path)); + } catch (e) { + if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + return -e.errno; + } + } + + function ___syscall_newfstatat(dirfd, path, buf, flags) { + try { + + path = SYSCALLS.getStr(path); + var nofollow = flags & 256; + var allowEmpty = flags & 4096; + flags = flags & (~6400); + assert(!flags, `unknown flags in __syscall_newfstatat: ${flags}`); + path = SYSCALLS.calculateAt(dirfd, path, allowEmpty); + return SYSCALLS.writeStat(buf, nofollow ? FS.lstat(path) : FS.stat(path)); + } catch (e) { + if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + return -e.errno; + } + } + + + function ___syscall_openat(dirfd, path, flags, varargs) { + SYSCALLS.varargs = varargs; + try { + + path = SYSCALLS.getStr(path); + path = SYSCALLS.calculateAt(dirfd, path); + var mode = varargs ? syscallGetVarargI() : 0; + return FS.open(path, flags, mode).fd; + } catch (e) { + if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + return -e.errno; + } + } + + function ___syscall_renameat(olddirfd, oldpath, newdirfd, newpath) { + try { + + oldpath = SYSCALLS.getStr(oldpath); + newpath = SYSCALLS.getStr(newpath); + oldpath = SYSCALLS.calculateAt(olddirfd, oldpath); + newpath = SYSCALLS.calculateAt(newdirfd, newpath); + FS.rename(oldpath, newpath); + return 0; + } catch (e) { + if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + return -e.errno; + } + } + + function ___syscall_rmdir(path) { + try { + + path = SYSCALLS.getStr(path); + FS.rmdir(path); + return 0; + } catch (e) { + if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + return -e.errno; + } + } + + function ___syscall_stat64(path, buf) { + try { + + path = SYSCALLS.getStr(path); + return SYSCALLS.writeStat(buf, FS.stat(path)); + } catch (e) { + if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + return -e.errno; + } + } + + function ___syscall_unlinkat(dirfd, path, flags) { + try { + + path = SYSCALLS.getStr(path); + path = SYSCALLS.calculateAt(dirfd, path); + if (flags === 0) { + FS.unlink(path); + } else if (flags === 512) { + FS.rmdir(path); + } else { + abort('Invalid flags passed to unlinkat'); + } + return 0; + } catch (e) { + if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + return -e.errno; + } + } + + var __abort_js = () => + abort('native code called abort()'); + + var isLeapYear = (year) => year%4 === 0 && (year%100 !== 0 || year%400 === 0); + + var MONTH_DAYS_LEAP_CUMULATIVE = [0,31,60,91,121,152,182,213,244,274,305,335]; + + var MONTH_DAYS_REGULAR_CUMULATIVE = [0,31,59,90,120,151,181,212,243,273,304,334]; + var ydayFromDate = (date) => { + var leap = isLeapYear(date.getFullYear()); + var monthDaysCumulative = (leap ? MONTH_DAYS_LEAP_CUMULATIVE : MONTH_DAYS_REGULAR_CUMULATIVE); + var yday = monthDaysCumulative[date.getMonth()] + date.getDate() - 1; // -1 since it's days since Jan 1 + + return yday; + }; + + var INT53_MAX = 9007199254740992; + + var INT53_MIN = -9007199254740992; + var bigintToI53Checked = (num) => (num < INT53_MIN || num > INT53_MAX) ? NaN : Number(num); + function __localtime_js(time, tmPtr) { + time = bigintToI53Checked(time); + + + var date = new Date(time*1000); + HEAP32[((tmPtr)>>2)] = date.getSeconds(); + HEAP32[(((tmPtr)+(4))>>2)] = date.getMinutes(); + HEAP32[(((tmPtr)+(8))>>2)] = date.getHours(); + HEAP32[(((tmPtr)+(12))>>2)] = date.getDate(); + HEAP32[(((tmPtr)+(16))>>2)] = date.getMonth(); + HEAP32[(((tmPtr)+(20))>>2)] = date.getFullYear()-1900; + HEAP32[(((tmPtr)+(24))>>2)] = date.getDay(); + + var yday = ydayFromDate(date)|0; + HEAP32[(((tmPtr)+(28))>>2)] = yday; + HEAP32[(((tmPtr)+(36))>>2)] = -(date.getTimezoneOffset() * 60); + + // Attention: DST is in December in South, and some regions don't have DST at all. + var start = new Date(date.getFullYear(), 0, 1); + var summerOffset = new Date(date.getFullYear(), 6, 1).getTimezoneOffset(); + var winterOffset = start.getTimezoneOffset(); + var dst = (summerOffset != winterOffset && date.getTimezoneOffset() == Math.min(winterOffset, summerOffset))|0; + HEAP32[(((tmPtr)+(32))>>2)] = dst; + ; + } + + + var __mktime_js = function(tmPtr) { + + var ret = (() => { + var date = new Date(HEAP32[(((tmPtr)+(20))>>2)] + 1900, + HEAP32[(((tmPtr)+(16))>>2)], + HEAP32[(((tmPtr)+(12))>>2)], + HEAP32[(((tmPtr)+(8))>>2)], + HEAP32[(((tmPtr)+(4))>>2)], + HEAP32[((tmPtr)>>2)], + 0); + + // There's an ambiguous hour when the time goes back; the tm_isdst field is + // used to disambiguate it. Date() basically guesses, so we fix it up if it + // guessed wrong, or fill in tm_isdst with the guess if it's -1. + var dst = HEAP32[(((tmPtr)+(32))>>2)]; + var guessedOffset = date.getTimezoneOffset(); + var start = new Date(date.getFullYear(), 0, 1); + var summerOffset = new Date(date.getFullYear(), 6, 1).getTimezoneOffset(); + var winterOffset = start.getTimezoneOffset(); + var dstOffset = Math.min(winterOffset, summerOffset); // DST is in December in South + if (dst < 0) { + // Attention: some regions don't have DST at all. + HEAP32[(((tmPtr)+(32))>>2)] = Number(summerOffset != winterOffset && dstOffset == guessedOffset); + } else if ((dst > 0) != (dstOffset == guessedOffset)) { + var nonDstOffset = Math.max(winterOffset, summerOffset); + var trueOffset = dst > 0 ? dstOffset : nonDstOffset; + // Don't try setMinutes(date.getMinutes() + ...) -- it's messed up. + date.setTime(date.getTime() + (trueOffset - guessedOffset)*60000); + } + + HEAP32[(((tmPtr)+(24))>>2)] = date.getDay(); + var yday = ydayFromDate(date)|0; + HEAP32[(((tmPtr)+(28))>>2)] = yday; + // To match expected behavior, update fields from date + HEAP32[((tmPtr)>>2)] = date.getSeconds(); + HEAP32[(((tmPtr)+(4))>>2)] = date.getMinutes(); + HEAP32[(((tmPtr)+(8))>>2)] = date.getHours(); + HEAP32[(((tmPtr)+(12))>>2)] = date.getDate(); + HEAP32[(((tmPtr)+(16))>>2)] = date.getMonth(); + HEAP32[(((tmPtr)+(20))>>2)] = date.getYear(); + + var timeMs = date.getTime(); + if (isNaN(timeMs)) { + return -1; + } + // Return time in microseconds + return timeMs / 1000; + })(); + return BigInt(ret); + }; + + var stringToUTF8 = (str, outPtr, maxBytesToWrite) => { + assert(typeof maxBytesToWrite == 'number', 'stringToUTF8(str, outPtr, maxBytesToWrite) is missing the third parameter that specifies the length of the output buffer!'); + return stringToUTF8Array(str, HEAPU8, outPtr, maxBytesToWrite); + }; + + var __tzset_js = (timezone, daylight, std_name, dst_name) => { + // TODO: Use (malleable) environment variables instead of system settings. + var currentYear = new Date().getFullYear(); + var winter = new Date(currentYear, 0, 1); + var summer = new Date(currentYear, 6, 1); + var winterOffset = winter.getTimezoneOffset(); + var summerOffset = summer.getTimezoneOffset(); + + // Local standard timezone offset. Local standard time is not adjusted for + // daylight savings. This code uses the fact that getTimezoneOffset returns + // a greater value during Standard Time versus Daylight Saving Time (DST). + // Thus it determines the expected output during Standard Time, and it + // compares whether the output of the given date the same (Standard) or less + // (DST). + var stdTimezoneOffset = Math.max(winterOffset, summerOffset); + + // timezone is specified as seconds west of UTC ("The external variable + // `timezone` shall be set to the difference, in seconds, between + // Coordinated Universal Time (UTC) and local standard time."), the same + // as returned by stdTimezoneOffset. + // See http://pubs.opengroup.org/onlinepubs/009695399/functions/tzset.html + HEAPU32[((timezone)>>2)] = stdTimezoneOffset * 60; + + HEAP32[((daylight)>>2)] = Number(winterOffset != summerOffset); + + var extractZone = (timezoneOffset) => { + // Why inverse sign? + // Read here https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/getTimezoneOffset + var sign = timezoneOffset >= 0 ? "-" : "+"; + + var absOffset = Math.abs(timezoneOffset) + var hours = String(Math.floor(absOffset / 60)).padStart(2, "0"); + var minutes = String(absOffset % 60).padStart(2, "0"); + + return `UTC${sign}${hours}${minutes}`; + } + + var winterName = extractZone(winterOffset); + var summerName = extractZone(summerOffset); + assert(winterName); + assert(summerName); + assert(lengthBytesUTF8(winterName) <= 16, `timezone name truncated to fit in TZNAME_MAX (${winterName})`); + assert(lengthBytesUTF8(summerName) <= 16, `timezone name truncated to fit in TZNAME_MAX (${summerName})`); + if (summerOffset < winterOffset) { + // Northern hemisphere + stringToUTF8(winterName, std_name, 17); + stringToUTF8(summerName, dst_name, 17); + } else { + stringToUTF8(winterName, dst_name, 17); + stringToUTF8(summerName, std_name, 17); + } + }; + + var _emscripten_date_now = () => Date.now(); + + var abortOnCannotGrowMemory = (requestedSize) => { + abort(`Cannot enlarge memory arrays to size ${requestedSize} bytes (OOM). Either (1) compile with -sINITIAL_MEMORY=X with X higher than the current value ${HEAP8.length}, (2) compile with -sALLOW_MEMORY_GROWTH which allows increasing the size at runtime, or (3) if you want malloc to return NULL (0) instead of this abort, compile with -sABORTING_MALLOC=0`); + }; + var _emscripten_resize_heap = (requestedSize) => { + var oldSize = HEAPU8.length; + // With CAN_ADDRESS_2GB or MEMORY64, pointers are already unsigned. + requestedSize >>>= 0; + abortOnCannotGrowMemory(requestedSize); + }; + + + var runtimeKeepaliveCounter = 0; + var keepRuntimeAlive = () => noExitRuntime || runtimeKeepaliveCounter > 0; + var _proc_exit = (code) => { + EXITSTATUS = code; + if (!keepRuntimeAlive()) { + Module['onExit']?.(code); + ABORT = true; + } + quit_(code, new ExitStatus(code)); + }; + + + /** @suppress {duplicate } */ + /** @param {boolean|number=} implicit */ + var exitJS = (status, implicit) => { + EXITSTATUS = status; + + checkUnflushedContent(); + + // if exit() was called explicitly, warn the user if the runtime isn't actually being shut down + if (keepRuntimeAlive() && !implicit) { + var msg = `program exited (with status: ${status}), but keepRuntimeAlive() is set (counter=${runtimeKeepaliveCounter}) due to an async operation, so halting execution but not exiting the runtime or preventing further async execution (you can use emscripten_force_exit, if you want to force a true shutdown)`; + err(msg); + } + + _proc_exit(status); + }; + var _exit = exitJS; + + function _fd_close(fd) { + try { + + var stream = SYSCALLS.getStreamFromFD(fd); + FS.close(stream); + return 0; + } catch (e) { + if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + return e.errno; + } + } + + function _fd_fdstat_get(fd, pbuf) { + try { + + var rightsBase = 0; + var rightsInheriting = 0; + var flags = 0; + { + var stream = SYSCALLS.getStreamFromFD(fd); + // All character devices are terminals (other things a Linux system would + // assume is a character device, like the mouse, we have special APIs for). + var type = stream.tty ? 2 : + FS.isDir(stream.mode) ? 3 : + FS.isLink(stream.mode) ? 7 : + 4; + } + HEAP8[pbuf] = type; + HEAP16[(((pbuf)+(2))>>1)] = flags; + HEAP64[(((pbuf)+(8))>>3)] = BigInt(rightsBase); + HEAP64[(((pbuf)+(16))>>3)] = BigInt(rightsInheriting); + return 0; + } catch (e) { + if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + return e.errno; + } + } + + /** @param {number=} offset */ + var doReadv = (stream, iov, iovcnt, offset) => { + var ret = 0; + for (var i = 0; i < iovcnt; i++) { + var ptr = HEAPU32[((iov)>>2)]; + var len = HEAPU32[(((iov)+(4))>>2)]; + iov += 8; + var curr = FS.read(stream, HEAP8, ptr, len, offset); + if (curr < 0) return -1; + ret += curr; + if (curr < len) break; // nothing more to read + if (typeof offset != 'undefined') { + offset += curr; + } + } + return ret; + }; + + function _fd_read(fd, iov, iovcnt, pnum) { + try { + + var stream = SYSCALLS.getStreamFromFD(fd); + var num = doReadv(stream, iov, iovcnt); + HEAPU32[((pnum)>>2)] = num; + return 0; + } catch (e) { + if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + return e.errno; + } + } + + + function _fd_seek(fd, offset, whence, newOffset) { + offset = bigintToI53Checked(offset); + + + try { + + if (isNaN(offset)) return 61; + var stream = SYSCALLS.getStreamFromFD(fd); + FS.llseek(stream, offset, whence); + HEAP64[((newOffset)>>3)] = BigInt(stream.position); + if (stream.getdents && offset === 0 && whence === 0) stream.getdents = null; // reset readdir state + return 0; + } catch (e) { + if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + return e.errno; + } + ; + } + + /** @param {number=} offset */ + var doWritev = (stream, iov, iovcnt, offset) => { + var ret = 0; + for (var i = 0; i < iovcnt; i++) { + var ptr = HEAPU32[((iov)>>2)]; + var len = HEAPU32[(((iov)+(4))>>2)]; + iov += 8; + var curr = FS.write(stream, HEAP8, ptr, len, offset); + if (curr < 0) return -1; + ret += curr; + if (curr < len) { + // No more space to write. + break; + } + if (typeof offset != 'undefined') { + offset += curr; + } + } + return ret; + }; + + function _fd_write(fd, iov, iovcnt, pnum) { + try { + + var stream = SYSCALLS.getStreamFromFD(fd); + var num = doWritev(stream, iov, iovcnt); + HEAPU32[((pnum)>>2)] = num; + return 0; + } catch (e) { + if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + return e.errno; + } + } + + + var handleException = (e) => { + // Certain exception types we do not treat as errors since they are used for + // internal control flow. + // 1. ExitStatus, which is thrown by exit() + // 2. "unwind", which is thrown by emscripten_unwind_to_js_event_loop() and others + // that wish to return to JS event loop. + if (e instanceof ExitStatus || e == 'unwind') { + return EXITSTATUS; + } + checkStackCookie(); + if (e instanceof WebAssembly.RuntimeError) { + if (_emscripten_stack_get_current() <= 0) { + err('Stack overflow detected. You can try increasing -sSTACK_SIZE (currently set to 65536)'); + } + } + quit_(1, e); + }; + + + + var stackAlloc = (sz) => __emscripten_stack_alloc(sz); + var stringToUTF8OnStack = (str) => { + var size = lengthBytesUTF8(str) + 1; + var ret = stackAlloc(size); + stringToUTF8(str, ret, size); + return ret; + }; + + FS.createPreloadedFile = FS_createPreloadedFile; + FS.staticInit(); + // Set module methods based on EXPORTED_RUNTIME_METHODS + ; +// End JS library code + +function checkIncomingModuleAPI() { + ignoredModuleProp('fetchSettings'); +} +var wasmImports = { + /** @export */ + __syscall_chmod: ___syscall_chmod, + /** @export */ + __syscall_fchmod: ___syscall_fchmod, + /** @export */ + __syscall_fcntl64: ___syscall_fcntl64, + /** @export */ + __syscall_fstat64: ___syscall_fstat64, + /** @export */ + __syscall_ioctl: ___syscall_ioctl, + /** @export */ + __syscall_lstat64: ___syscall_lstat64, + /** @export */ + __syscall_newfstatat: ___syscall_newfstatat, + /** @export */ + __syscall_openat: ___syscall_openat, + /** @export */ + __syscall_renameat: ___syscall_renameat, + /** @export */ + __syscall_rmdir: ___syscall_rmdir, + /** @export */ + __syscall_stat64: ___syscall_stat64, + /** @export */ + __syscall_unlinkat: ___syscall_unlinkat, + /** @export */ + _abort_js: __abort_js, + /** @export */ + _localtime_js: __localtime_js, + /** @export */ + _mktime_js: __mktime_js, + /** @export */ + _tzset_js: __tzset_js, + /** @export */ + emscripten_date_now: _emscripten_date_now, + /** @export */ + emscripten_resize_heap: _emscripten_resize_heap, + /** @export */ + exit: _exit, + /** @export */ + fd_close: _fd_close, + /** @export */ + fd_fdstat_get: _fd_fdstat_get, + /** @export */ + fd_read: _fd_read, + /** @export */ + fd_seek: _fd_seek, + /** @export */ + fd_write: _fd_write +}; +var wasmExports; +createWasm(); +var ___wasm_call_ctors = createExportWrapper('__wasm_call_ctors', 0); +var _main = Module['_main'] = createExportWrapper('__main_argc_argv', 2); +var _fflush = createExportWrapper('fflush', 1); +var _strerror = createExportWrapper('strerror', 1); +var _emscripten_stack_init = () => (_emscripten_stack_init = wasmExports['emscripten_stack_init'])(); +var _emscripten_stack_get_free = () => (_emscripten_stack_get_free = wasmExports['emscripten_stack_get_free'])(); +var _emscripten_stack_get_base = () => (_emscripten_stack_get_base = wasmExports['emscripten_stack_get_base'])(); +var _emscripten_stack_get_end = () => (_emscripten_stack_get_end = wasmExports['emscripten_stack_get_end'])(); +var __emscripten_stack_restore = (a0) => (__emscripten_stack_restore = wasmExports['_emscripten_stack_restore'])(a0); +var __emscripten_stack_alloc = (a0) => (__emscripten_stack_alloc = wasmExports['_emscripten_stack_alloc'])(a0); +var _emscripten_stack_get_current = () => (_emscripten_stack_get_current = wasmExports['emscripten_stack_get_current'])(); + + +// include: postamble.js +// === Auto-generated postamble setup entry stuff === + +var missingLibrarySymbols = [ + 'writeI53ToI64', + 'writeI53ToI64Clamped', + 'writeI53ToI64Signaling', + 'writeI53ToU64Clamped', + 'writeI53ToU64Signaling', + 'readI53FromI64', + 'readI53FromU64', + 'convertI32PairToI53', + 'convertI32PairToI53Checked', + 'convertU32PairToI53', + 'getTempRet0', + 'setTempRet0', + 'zeroMemory', + 'getHeapMax', + 'growMemory', + 'inetPton4', + 'inetNtop4', + 'inetPton6', + 'inetNtop6', + 'readSockaddr', + 'writeSockaddr', + 'emscriptenLog', + 'readEmAsmArgs', + 'jstoi_q', + 'getExecutableName', + 'listenOnce', + 'autoResumeAudioContext', + 'getDynCaller', + 'dynCall', + 'runtimeKeepalivePush', + 'runtimeKeepalivePop', + 'callUserCallback', + 'maybeExit', + 'asmjsMangle', + 'alignMemory', + 'HandleAllocator', + 'getNativeTypeSize', + 'addOnInit', + 'addOnPostCtor', + 'addOnPreMain', + 'addOnExit', + 'STACK_SIZE', + 'STACK_ALIGN', + 'POINTER_SIZE', + 'ASSERTIONS', + 'getCFunc', + 'ccall', + 'cwrap', + 'uleb128Encode', + 'sigToWasmTypes', + 'generateFuncType', + 'convertJsFunctionToWasm', + 'getEmptyTableSlot', + 'updateTableMap', + 'getFunctionAddress', + 'addFunction', + 'removeFunction', + 'reallyNegative', + 'unSign', + 'strLen', + 'reSign', + 'formatString', + 'intArrayToString', + 'AsciiToString', + 'stringToAscii', + 'UTF16ToString', + 'stringToUTF16', + 'lengthBytesUTF16', + 'UTF32ToString', + 'stringToUTF32', + 'lengthBytesUTF32', + 'stringToNewUTF8', + 'writeArrayToMemory', + 'registerKeyEventCallback', + 'maybeCStringToJsString', + 'findEventTarget', + 'getBoundingClientRect', + 'fillMouseEventData', + 'registerMouseEventCallback', + 'registerWheelEventCallback', + 'registerUiEventCallback', + 'registerFocusEventCallback', + 'fillDeviceOrientationEventData', + 'registerDeviceOrientationEventCallback', + 'fillDeviceMotionEventData', + 'registerDeviceMotionEventCallback', + 'screenOrientation', + 'fillOrientationChangeEventData', + 'registerOrientationChangeEventCallback', + 'fillFullscreenChangeEventData', + 'registerFullscreenChangeEventCallback', + 'JSEvents_requestFullscreen', + 'JSEvents_resizeCanvasForFullscreen', + 'registerRestoreOldStyle', + 'hideEverythingExceptGivenElement', + 'restoreHiddenElements', + 'setLetterbox', + 'softFullscreenResizeWebGLRenderTarget', + 'doRequestFullscreen', + 'fillPointerlockChangeEventData', + 'registerPointerlockChangeEventCallback', + 'registerPointerlockErrorEventCallback', + 'requestPointerLock', + 'fillVisibilityChangeEventData', + 'registerVisibilityChangeEventCallback', + 'registerTouchEventCallback', + 'fillGamepadEventData', + 'registerGamepadEventCallback', + 'registerBeforeUnloadEventCallback', + 'fillBatteryEventData', + 'battery', + 'registerBatteryEventCallback', + 'setCanvasElementSize', + 'getCanvasElementSize', + 'jsStackTrace', + 'getCallstack', + 'convertPCtoSourceLocation', + 'getEnvStrings', + 'checkWasiClock', + 'wasiRightsToMuslOFlags', + 'wasiOFlagsToMuslOFlags', + 'safeSetTimeout', + 'setImmediateWrapped', + 'safeRequestAnimationFrame', + 'clearImmediateWrapped', + 'registerPostMainLoop', + 'registerPreMainLoop', + 'getPromise', + 'makePromise', + 'idsToPromises', + 'makePromiseCallback', + 'ExceptionInfo', + 'findMatchingCatch', + 'Browser_asyncPrepareDataCounter', + 'arraySum', + 'addDays', + 'getSocketFromFD', + 'getSocketAddress', + 'FS_unlink', + 'FS_mkdirTree', + '_setNetworkCallback', + 'heapObjectForWebGLType', + 'toTypedArrayIndex', + 'webgl_enable_ANGLE_instanced_arrays', + 'webgl_enable_OES_vertex_array_object', + 'webgl_enable_WEBGL_draw_buffers', + 'webgl_enable_WEBGL_multi_draw', + 'webgl_enable_EXT_polygon_offset_clamp', + 'webgl_enable_EXT_clip_control', + 'webgl_enable_WEBGL_polygon_mode', + 'emscriptenWebGLGet', + 'computeUnpackAlignedImageSize', + 'colorChannelsInGlTextureFormat', + 'emscriptenWebGLGetTexPixelData', + 'emscriptenWebGLGetUniform', + 'webglGetUniformLocation', + 'webglPrepareUniformLocationsBeforeFirstUse', + 'webglGetLeftBracePos', + 'emscriptenWebGLGetVertexAttrib', + '__glGetActiveAttribOrUniform', + 'writeGLArray', + 'registerWebGlEventCallback', + 'runAndAbortIfError', + 'ALLOC_NORMAL', + 'ALLOC_STACK', + 'allocate', + 'writeStringToMemory', + 'writeAsciiToMemory', + 'demangle', + 'stackTrace', +]; +missingLibrarySymbols.forEach(missingLibrarySymbol) + +var unexportedSymbols = [ + 'run', + 'addRunDependency', + 'removeRunDependency', + 'out', + 'err', + 'callMain', + 'abort', + 'wasmMemory', + 'wasmExports', + 'writeStackCookie', + 'checkStackCookie', + 'INT53_MAX', + 'INT53_MIN', + 'bigintToI53Checked', + 'stackSave', + 'stackRestore', + 'stackAlloc', + 'ptrToString', + 'exitJS', + 'abortOnCannotGrowMemory', + 'ENV', + 'ERRNO_CODES', + 'strError', + 'DNS', + 'Protocols', + 'Sockets', + 'timers', + 'warnOnce', + 'readEmAsmArgsArray', + 'jstoi_s', + 'handleException', + 'keepRuntimeAlive', + 'asyncLoad', + 'mmapAlloc', + 'wasmTable', + 'noExitRuntime', + 'addOnPreRun', + 'addOnPostRun', + 'freeTableIndexes', + 'functionsInTableMap', + 'setValue', + 'getValue', + 'PATH', + 'PATH_FS', + 'UTF8Decoder', + 'UTF8ArrayToString', + 'UTF8ToString', + 'stringToUTF8Array', + 'stringToUTF8', + 'lengthBytesUTF8', + 'intArrayFromString', + 'UTF16Decoder', + 'stringToUTF8OnStack', + 'JSEvents', + 'specialHTMLTargets', + 'findCanvasEventTarget', + 'currentFullscreenStrategy', + 'restoreOldWindowedStyle', + 'UNWIND_CACHE', + 'ExitStatus', + 'doReadv', + 'doWritev', + 'initRandomFill', + 'randomFill', + 'emSetImmediate', + 'emClearImmediate_deps', + 'emClearImmediate', + 'promiseMap', + 'uncaughtExceptionCount', + 'exceptionLast', + 'exceptionCaught', + 'Browser', + 'getPreloadedImageData__data', + 'wget', + 'MONTH_DAYS_REGULAR', + 'MONTH_DAYS_LEAP', + 'MONTH_DAYS_REGULAR_CUMULATIVE', + 'MONTH_DAYS_LEAP_CUMULATIVE', + 'isLeapYear', + 'ydayFromDate', + 'SYSCALLS', + 'preloadPlugins', + 'FS_createPreloadedFile', + 'FS_modeStringToFlags', + 'FS_getMode', + 'FS_stdin_getChar_buffer', + 'FS_stdin_getChar', + 'FS_createPath', + 'FS_createDevice', + 'FS_readFile', + 'FS', + 'FS_createDataFile', + 'FS_createLazyFile', + 'MEMFS', + 'TTY', + 'PIPEFS', + 'SOCKFS', + 'tempFixedLengthArray', + 'miniTempWebGLFloatBuffers', + 'miniTempWebGLIntBuffers', + 'GL', + 'AL', + 'GLUT', + 'EGL', + 'GLEW', + 'IDBStore', + 'SDL', + 'SDL_gfx', + 'allocateUTF8', + 'allocateUTF8OnStack', + 'print', + 'printErr', +]; +unexportedSymbols.forEach(unexportedRuntimeSymbol); + + + +var calledRun; + +function callMain(args = []) { + assert(runDependencies == 0, 'cannot call main when async dependencies remain! (listen on Module["onRuntimeInitialized"])'); + assert(typeof onPreRuns === 'undefined' || onPreRuns.length == 0, 'cannot call main when preRun functions remain to be called'); + + var entryFunction = _main; + + args.unshift(thisProgram); + + var argc = args.length; + var argv = stackAlloc((argc + 1) * 4); + var argv_ptr = argv; + args.forEach((arg) => { + HEAPU32[((argv_ptr)>>2)] = stringToUTF8OnStack(arg); + argv_ptr += 4; + }); + HEAPU32[((argv_ptr)>>2)] = 0; + + try { + + var ret = entryFunction(argc, argv); + + // if we're not running an evented main loop, it's time to exit + exitJS(ret, /* implicit = */ true); + return ret; + } catch (e) { + return handleException(e); + } +} + +function stackCheckInit() { + // This is normally called automatically during __wasm_call_ctors but need to + // get these values before even running any of the ctors so we call it redundantly + // here. + _emscripten_stack_init(); + // TODO(sbc): Move writeStackCookie to native to to avoid this. + writeStackCookie(); +} + +function run(args = arguments_) { + + if (runDependencies > 0) { + dependenciesFulfilled = run; + return; + } + + stackCheckInit(); + + preRun(); + + // a preRun added a dependency, run will be called later + if (runDependencies > 0) { + dependenciesFulfilled = run; + return; + } + + function doRun() { + // run may have just been called through dependencies being fulfilled just in this very frame, + // or while the async setStatus time below was happening + assert(!calledRun); + calledRun = true; + Module['calledRun'] = true; + + if (ABORT) return; + + initRuntime(); + + preMain(); + + Module['onRuntimeInitialized']?.(); + consumedModuleProp('onRuntimeInitialized'); + + var noInitialRun = Module['noInitialRun'];legacyModuleProp('noInitialRun', 'noInitialRun'); + if (!noInitialRun) callMain(args); + + postRun(); + } + + if (Module['setStatus']) { + Module['setStatus']('Running...'); + setTimeout(() => { + setTimeout(() => Module['setStatus'](''), 1); + doRun(); + }, 1); + } else + { + doRun(); + } + checkStackCookie(); +} + +function checkUnflushedContent() { + // Compiler settings do not allow exiting the runtime, so flushing + // the streams is not possible. but in ASSERTIONS mode we check + // if there was something to flush, and if so tell the user they + // should request that the runtime be exitable. + // Normally we would not even include flush() at all, but in ASSERTIONS + // builds we do so just for this check, and here we see if there is any + // content to flush, that is, we check if there would have been + // something a non-ASSERTIONS build would have not seen. + // How we flush the streams depends on whether we are in SYSCALLS_REQUIRE_FILESYSTEM=0 + // mode (which has its own special function for this; otherwise, all + // the code is inside libc) + var oldOut = out; + var oldErr = err; + var has = false; + out = err = (x) => { + has = true; + } + try { // it doesn't matter if it fails + _fflush(0); + // also flush in the JS FS layer + ['stdout', 'stderr'].forEach((name) => { + var info = FS.analyzePath('/dev/' + name); + if (!info) return; + var stream = info.object; + var rdev = stream.rdev; + var tty = TTY.ttys[rdev]; + if (tty?.output?.length) { + has = true; + } + }); + } catch(e) {} + out = oldOut; + err = oldErr; + if (has) { + warnOnce('stdio streams had content in them that was not flushed. you should set EXIT_RUNTIME to 1 (see the Emscripten FAQ), or make sure to emit a newline when you printf etc.'); + } +} + +if (Module['preInit']) { + if (typeof Module['preInit'] == 'function') Module['preInit'] = [Module['preInit']]; + while (Module['preInit'].length > 0) { + Module['preInit'].pop()(); + } +} +consumedModuleProp('preInit'); + +run(); + +// end include: postamble.js + diff --git a/thirdparty/libzip-1.11.3/build-emcmake/src/zipmerge.wasm b/thirdparty/libzip-1.11.3/build-emcmake/src/zipmerge.wasm new file mode 100755 index 0000000000000000000000000000000000000000..1669792312a839da5d6cbb8270f72f8cde4e8bb2 GIT binary patch literal 412829 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 wzo{W)81WqJ;Y>(q=Kjc#N9O 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 Promise +// 3. pre-run appended it, var Module = {}; ..generated code.. +// 4. External script tag defines var Module. +// We need to check if Module already exists (e.g. case 3 above). +// Substitution will be replaced with actual code on later stage of the build, +// this way Closure Compiler will not mangle it (e.g. case 4. above). +// Note that if you want to run closure, and also to use Module +// after the generated code, you will need to define var Module = {}; +// before the code. Then that object will be used in the code, and you +// can continue to use Module afterwards as well. +var Module = typeof Module != 'undefined' ? Module : {}; + +// Determine the runtime environment we are in. You can customize this by +// setting the ENVIRONMENT setting at compile time (see settings.js). + +// Attempt to auto-detect the environment +var ENVIRONMENT_IS_WEB = typeof window == 'object'; +var ENVIRONMENT_IS_WORKER = typeof WorkerGlobalScope != 'undefined'; +// N.b. Electron.js environment is simultaneously a NODE-environment, but +// also a web environment. +var ENVIRONMENT_IS_NODE = typeof process == 'object' && typeof process.versions == 'object' && typeof process.versions.node == 'string' && process.type != 'renderer'; +var ENVIRONMENT_IS_SHELL = !ENVIRONMENT_IS_WEB && !ENVIRONMENT_IS_NODE && !ENVIRONMENT_IS_WORKER; + +if (ENVIRONMENT_IS_NODE) { + +} + +// --pre-jses are emitted after the Module integration code, so that they can +// refer to Module (if they choose; they can also define Module) + + +// Sometimes an existing Module object exists with properties +// meant to overwrite the default module functionality. Here +// we collect those properties and reapply _after_ we configure +// the current environment's defaults to avoid having to be so +// defensive during initialization. +var moduleOverrides = {...Module}; + +var arguments_ = []; +var thisProgram = './this.program'; +var quit_ = (status, toThrow) => { + throw toThrow; +}; + +// `/` should be present at the end if `scriptDirectory` is not empty +var scriptDirectory = ''; +function locateFile(path) { + if (Module['locateFile']) { + return Module['locateFile'](path, scriptDirectory); + } + return scriptDirectory + path; +} + +// Hooks that are implemented differently in different runtime environments. +var readAsync, readBinary; + +if (ENVIRONMENT_IS_NODE) { + if (typeof process == 'undefined' || !process.release || process.release.name !== 'node') throw new Error('not compiled for this environment (did you build to HTML and try to run it not on the web, or set ENVIRONMENT to something - like node - and run it someplace else - like on the web?)'); + + var nodeVersion = process.versions.node; + var numericVersion = nodeVersion.split('.').slice(0, 3); + numericVersion = (numericVersion[0] * 10000) + (numericVersion[1] * 100) + (numericVersion[2].split('-')[0] * 1); + var minVersion = 160000; + if (numericVersion < 160000) { + throw new Error('This emscripten-generated code requires node v16.0.0 (detected v' + nodeVersion + ')'); + } + + // These modules will usually be used on Node.js. Load them eagerly to avoid + // the complexity of lazy-loading. + var fs = require('fs'); + var nodePath = require('path'); + + scriptDirectory = __dirname + '/'; + +// include: node_shell_read.js +readBinary = (filename) => { + // We need to re-wrap `file://` strings to URLs. + filename = isFileURI(filename) ? new URL(filename) : filename; + var ret = fs.readFileSync(filename); + assert(Buffer.isBuffer(ret)); + return ret; +}; + +readAsync = async (filename, binary = true) => { + // See the comment in the `readBinary` function. + filename = isFileURI(filename) ? new URL(filename) : filename; + var ret = fs.readFileSync(filename, binary ? undefined : 'utf8'); + assert(binary ? Buffer.isBuffer(ret) : typeof ret == 'string'); + return ret; +}; +// end include: node_shell_read.js + if (!Module['thisProgram'] && process.argv.length > 1) { + thisProgram = process.argv[1].replace(/\\/g, '/'); + } + + arguments_ = process.argv.slice(2); + + if (typeof module != 'undefined') { + module['exports'] = Module; + } + + quit_ = (status, toThrow) => { + process.exitCode = status; + throw toThrow; + }; + +} else +if (ENVIRONMENT_IS_SHELL) { + + if ((typeof process == 'object' && typeof require === 'function') || typeof window == 'object' || typeof WorkerGlobalScope != 'undefined') throw new Error('not compiled for this environment (did you build to HTML and try to run it not on the web, or set ENVIRONMENT to something - like node - and run it someplace else - like on the web?)'); + +} else + +// Note that this includes Node.js workers when relevant (pthreads is enabled). +// Node.js workers are detected as a combination of ENVIRONMENT_IS_WORKER and +// ENVIRONMENT_IS_NODE. +if (ENVIRONMENT_IS_WEB || ENVIRONMENT_IS_WORKER) { + if (ENVIRONMENT_IS_WORKER) { // Check worker, not web, since window could be polyfilled + scriptDirectory = self.location.href; + } else if (typeof document != 'undefined' && document.currentScript) { // web + scriptDirectory = document.currentScript.src; + } + // blob urls look like blob:http://site.com/etc/etc and we cannot infer anything from them. + // otherwise, slice off the final part of the url to find the script directory. + // if scriptDirectory does not contain a slash, lastIndexOf will return -1, + // and scriptDirectory will correctly be replaced with an empty string. + // If scriptDirectory contains a query (starting with ?) or a fragment (starting with #), + // they are removed because they could contain a slash. + if (scriptDirectory.startsWith('blob:')) { + scriptDirectory = ''; + } else { + scriptDirectory = scriptDirectory.slice(0, scriptDirectory.replace(/[?#].*/, '').lastIndexOf('/')+1); + } + + if (!(typeof window == 'object' || typeof WorkerGlobalScope != 'undefined')) throw new Error('not compiled for this environment (did you build to HTML and try to run it not on the web, or set ENVIRONMENT to something - like node - and run it someplace else - like on the web?)'); + + { +// include: web_or_worker_shell_read.js +if (ENVIRONMENT_IS_WORKER) { + readBinary = (url) => { + var xhr = new XMLHttpRequest(); + xhr.open('GET', url, false); + xhr.responseType = 'arraybuffer'; + xhr.send(null); + return new Uint8Array(/** @type{!ArrayBuffer} */(xhr.response)); + }; + } + + readAsync = async (url) => { + // Fetch has some additional restrictions over XHR, like it can't be used on a file:// url. + // See https://github.com/github/fetch/pull/92#issuecomment-140665932 + // Cordova or Electron apps are typically loaded from a file:// url. + // So use XHR on webview if URL is a file URL. + if (isFileURI(url)) { + return new Promise((resolve, reject) => { + var xhr = new XMLHttpRequest(); + xhr.open('GET', url, true); + xhr.responseType = 'arraybuffer'; + xhr.onload = () => { + if (xhr.status == 200 || (xhr.status == 0 && xhr.response)) { // file URLs can return 0 + resolve(xhr.response); + return; + } + reject(xhr.status); + }; + xhr.onerror = reject; + xhr.send(null); + }); + } + var response = await fetch(url, { credentials: 'same-origin' }); + if (response.ok) { + return response.arrayBuffer(); + } + throw new Error(response.status + ' : ' + response.url); + }; +// end include: web_or_worker_shell_read.js + } +} else +{ + throw new Error('environment detection error'); +} + +var out = Module['print'] || console.log.bind(console); +var err = Module['printErr'] || console.error.bind(console); + +// Merge back in the overrides +Object.assign(Module, moduleOverrides); +// Free the object hierarchy contained in the overrides, this lets the GC +// reclaim data used. +moduleOverrides = null; +checkIncomingModuleAPI(); + +// Emit code to handle expected values on the Module object. This applies Module.x +// to the proper local x. This has two benefits: first, we only emit it if it is +// expected to arrive, and second, by using a local everywhere else that can be +// minified. + +if (Module['arguments']) arguments_ = Module['arguments'];legacyModuleProp('arguments', 'arguments_'); + +if (Module['thisProgram']) thisProgram = Module['thisProgram'];legacyModuleProp('thisProgram', 'thisProgram'); + +// perform assertions in shell.js after we set up out() and err(), as otherwise if an assertion fails it cannot print the message +// Assertions on removed incoming Module JS APIs. +assert(typeof Module['memoryInitializerPrefixURL'] == 'undefined', 'Module.memoryInitializerPrefixURL option was removed, use Module.locateFile instead'); +assert(typeof Module['pthreadMainPrefixURL'] == 'undefined', 'Module.pthreadMainPrefixURL option was removed, use Module.locateFile instead'); +assert(typeof Module['cdInitializerPrefixURL'] == 'undefined', 'Module.cdInitializerPrefixURL option was removed, use Module.locateFile instead'); +assert(typeof Module['filePackagePrefixURL'] == 'undefined', 'Module.filePackagePrefixURL option was removed, use Module.locateFile instead'); +assert(typeof Module['read'] == 'undefined', 'Module.read option was removed'); +assert(typeof Module['readAsync'] == 'undefined', 'Module.readAsync option was removed (modify readAsync in JS)'); +assert(typeof Module['readBinary'] == 'undefined', 'Module.readBinary option was removed (modify readBinary in JS)'); +assert(typeof Module['setWindowTitle'] == 'undefined', 'Module.setWindowTitle option was removed (modify emscripten_set_window_title in JS)'); +assert(typeof Module['TOTAL_MEMORY'] == 'undefined', 'Module.TOTAL_MEMORY has been renamed Module.INITIAL_MEMORY'); +legacyModuleProp('asm', 'wasmExports'); +legacyModuleProp('readAsync', 'readAsync'); +legacyModuleProp('readBinary', 'readBinary'); +legacyModuleProp('setWindowTitle', 'setWindowTitle'); +var IDBFS = 'IDBFS is no longer included by default; build with -lidbfs.js'; +var PROXYFS = 'PROXYFS is no longer included by default; build with -lproxyfs.js'; +var WORKERFS = 'WORKERFS is no longer included by default; build with -lworkerfs.js'; +var FETCHFS = 'FETCHFS is no longer included by default; build with -lfetchfs.js'; +var ICASEFS = 'ICASEFS is no longer included by default; build with -licasefs.js'; +var JSFILEFS = 'JSFILEFS is no longer included by default; build with -ljsfilefs.js'; +var OPFS = 'OPFS is no longer included by default; build with -lopfs.js'; + +var NODEFS = 'NODEFS is no longer included by default; build with -lnodefs.js'; + +assert(!ENVIRONMENT_IS_SHELL, 'shell environment detected but not enabled at build time. Add `shell` to `-sENVIRONMENT` to enable.'); + +// end include: shell.js + +// include: preamble.js +// === Preamble library stuff === + +// Documentation for the public APIs defined in this file must be updated in: +// site/source/docs/api_reference/preamble.js.rst +// A prebuilt local version of the documentation is available at: +// site/build/text/docs/api_reference/preamble.js.txt +// You can also build docs locally as HTML or other formats in site/ +// An online HTML version (which may be of a different version of Emscripten) +// is up at http://kripken.github.io/emscripten-site/docs/api_reference/preamble.js.html + +var wasmBinary = Module['wasmBinary'];legacyModuleProp('wasmBinary', 'wasmBinary'); + +if (typeof WebAssembly != 'object') { + err('no native wasm support detected'); +} + +// Wasm globals + +var wasmMemory; + +//======================================== +// Runtime essentials +//======================================== + +// whether we are quitting the application. no code should run after this. +// set in exit() and abort() +var ABORT = false; + +// set by exit() and abort(). Passed to 'onExit' handler. +// NOTE: This is also used as the process return code code in shell environments +// but only when noExitRuntime is false. +var EXITSTATUS; + +// In STRICT mode, we only define assert() when ASSERTIONS is set. i.e. we +// don't define it at all in release modes. This matches the behaviour of +// MINIMAL_RUNTIME. +// TODO(sbc): Make this the default even without STRICT enabled. +/** @type {function(*, string=)} */ +function assert(condition, text) { + if (!condition) { + abort('Assertion failed' + (text ? ': ' + text : '')); + } +} + +// We used to include malloc/free by default in the past. Show a helpful error in +// builds with assertions. +function _malloc() { + abort('malloc() called but not included in the build - add `_malloc` to EXPORTED_FUNCTIONS'); +} +function _free() { + // Show a helpful error since we used to include free by default in the past. + abort('free() called but not included in the build - add `_free` to EXPORTED_FUNCTIONS'); +} + +// Memory management + +var HEAP, +/** @type {!Int8Array} */ + HEAP8, +/** @type {!Uint8Array} */ + HEAPU8, +/** @type {!Int16Array} */ + HEAP16, +/** @type {!Uint16Array} */ + HEAPU16, +/** @type {!Int32Array} */ + HEAP32, +/** @type {!Uint32Array} */ + HEAPU32, +/** @type {!Float32Array} */ + HEAPF32, +/* BigInt64Array type is not correctly defined in closure +/** not-@type {!BigInt64Array} */ + HEAP64, +/* BigUint64Array type is not correctly defined in closure +/** not-t@type {!BigUint64Array} */ + HEAPU64, +/** @type {!Float64Array} */ + HEAPF64; + +var runtimeInitialized = false; + +/** + * Indicates whether filename is delivered via file protocol (as opposed to http/https) + * @noinline + */ +var isFileURI = (filename) => filename.startsWith('file://'); + +// include: runtime_shared.js +// include: runtime_stack_check.js +// Initializes the stack cookie. Called at the startup of main and at the startup of each thread in pthreads mode. +function writeStackCookie() { + var max = _emscripten_stack_get_end(); + assert((max & 3) == 0); + // If the stack ends at address zero we write our cookies 4 bytes into the + // stack. This prevents interference with SAFE_HEAP and ASAN which also + // monitor writes to address zero. + if (max == 0) { + max += 4; + } + // The stack grow downwards towards _emscripten_stack_get_end. + // We write cookies to the final two words in the stack and detect if they are + // ever overwritten. + HEAPU32[((max)>>2)] = 0x02135467; + HEAPU32[(((max)+(4))>>2)] = 0x89BACDFE; + // Also test the global address 0 for integrity. + HEAPU32[((0)>>2)] = 1668509029; +} + +function checkStackCookie() { + if (ABORT) return; + var max = _emscripten_stack_get_end(); + // See writeStackCookie(). + if (max == 0) { + max += 4; + } + var cookie1 = HEAPU32[((max)>>2)]; + var cookie2 = HEAPU32[(((max)+(4))>>2)]; + if (cookie1 != 0x02135467 || cookie2 != 0x89BACDFE) { + abort(`Stack overflow! Stack cookie has been overwritten at ${ptrToString(max)}, expected hex dwords 0x89BACDFE and 0x2135467, but received ${ptrToString(cookie2)} ${ptrToString(cookie1)}`); + } + // Also test the global address 0 for integrity. + if (HEAPU32[((0)>>2)] != 0x63736d65 /* 'emsc' */) { + abort('Runtime error: The application has corrupted its heap memory area (address zero)!'); + } +} +// end include: runtime_stack_check.js +// include: runtime_exceptions.js +// end include: runtime_exceptions.js +// include: runtime_debug.js +// Endianness check +(() => { + var h16 = new Int16Array(1); + var h8 = new Int8Array(h16.buffer); + h16[0] = 0x6373; + if (h8[0] !== 0x73 || h8[1] !== 0x63) throw 'Runtime error: expected the system to be little-endian! (Run with -sSUPPORT_BIG_ENDIAN to bypass)'; +})(); + +if (Module['ENVIRONMENT']) { + throw new Error('Module.ENVIRONMENT has been deprecated. To force the environment, use the ENVIRONMENT compile-time option (for example, -sENVIRONMENT=web or -sENVIRONMENT=node)'); +} + +function legacyModuleProp(prop, newName, incoming=true) { + if (!Object.getOwnPropertyDescriptor(Module, prop)) { + Object.defineProperty(Module, prop, { + configurable: true, + get() { + let extra = incoming ? ' (the initial value can be provided on Module, but after startup the value is only looked for on a local variable of that name)' : ''; + abort(`\`Module.${prop}\` has been replaced by \`${newName}\`` + extra); + + } + }); + } +} + +function consumedModuleProp(prop) { + if (!Object.getOwnPropertyDescriptor(Module, prop)) { + Object.defineProperty(Module, prop, { + configurable: true, + set() { + abort(`Attempt to set \`Module.${prop}\` after it has already been processed. This can happen, for example, when code is injected via '--post-js' rather than '--pre-js'`); + + } + }); + } +} + +function ignoredModuleProp(prop) { + if (Object.getOwnPropertyDescriptor(Module, prop)) { + abort(`\`Module.${prop}\` was supplied but \`${prop}\` not included in INCOMING_MODULE_JS_API`); + } +} + +// forcing the filesystem exports a few things by default +function isExportedByForceFilesystem(name) { + return name === 'FS_createPath' || + name === 'FS_createDataFile' || + name === 'FS_createPreloadedFile' || + name === 'FS_unlink' || + name === 'addRunDependency' || + // The old FS has some functionality that WasmFS lacks. + name === 'FS_createLazyFile' || + name === 'FS_createDevice' || + name === 'removeRunDependency'; +} + +/** + * Intercept access to a global symbol. This enables us to give informative + * warnings/errors when folks attempt to use symbols they did not include in + * their build, or no symbols that no longer exist. + */ +function hookGlobalSymbolAccess(sym, func) { + if (typeof globalThis != 'undefined' && !Object.getOwnPropertyDescriptor(globalThis, sym)) { + Object.defineProperty(globalThis, sym, { + configurable: true, + get() { + func(); + return undefined; + } + }); + } +} + +function missingGlobal(sym, msg) { + hookGlobalSymbolAccess(sym, () => { + warnOnce(`\`${sym}\` is not longer defined by emscripten. ${msg}`); + }); +} + +missingGlobal('buffer', 'Please use HEAP8.buffer or wasmMemory.buffer'); +missingGlobal('asm', 'Please use wasmExports instead'); + +function missingLibrarySymbol(sym) { + hookGlobalSymbolAccess(sym, () => { + // Can't `abort()` here because it would break code that does runtime + // checks. e.g. `if (typeof SDL === 'undefined')`. + var msg = `\`${sym}\` is a library symbol and not included by default; add it to your library.js __deps or to DEFAULT_LIBRARY_FUNCS_TO_INCLUDE on the command line`; + // DEFAULT_LIBRARY_FUNCS_TO_INCLUDE requires the name as it appears in + // library.js, which means $name for a JS name with no prefix, or name + // for a JS name like _name. + var librarySymbol = sym; + if (!librarySymbol.startsWith('_')) { + librarySymbol = '$' + sym; + } + msg += ` (e.g. -sDEFAULT_LIBRARY_FUNCS_TO_INCLUDE='${librarySymbol}')`; + if (isExportedByForceFilesystem(sym)) { + msg += '. Alternatively, forcing filesystem support (-sFORCE_FILESYSTEM) can export this for you'; + } + warnOnce(msg); + }); + + // Any symbol that is not included from the JS library is also (by definition) + // not exported on the Module object. + unexportedRuntimeSymbol(sym); +} + +function unexportedRuntimeSymbol(sym) { + if (!Object.getOwnPropertyDescriptor(Module, sym)) { + Object.defineProperty(Module, sym, { + configurable: true, + get() { + var msg = `'${sym}' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the Emscripten FAQ)`; + if (isExportedByForceFilesystem(sym)) { + msg += '. Alternatively, forcing filesystem support (-sFORCE_FILESYSTEM) can export this for you'; + } + abort(msg); + } + }); + } +} + +var runtimeDebug = true; // Switch to false at runtime to disable logging at the right times + +// Used by XXXXX_DEBUG settings to output debug messages. +function dbg(...args) { + if (!runtimeDebug && typeof runtimeDebug != 'undefined') return; + // TODO(sbc): Make this configurable somehow. Its not always convenient for + // logging to show up as warnings. + console.warn(...args); +} +// end include: runtime_debug.js +// include: memoryprofiler.js +// end include: memoryprofiler.js + + +function updateMemoryViews() { + var b = wasmMemory.buffer; + Module['HEAP8'] = HEAP8 = new Int8Array(b); + Module['HEAP16'] = HEAP16 = new Int16Array(b); + Module['HEAPU8'] = HEAPU8 = new Uint8Array(b); + Module['HEAPU16'] = HEAPU16 = new Uint16Array(b); + Module['HEAP32'] = HEAP32 = new Int32Array(b); + Module['HEAPU32'] = HEAPU32 = new Uint32Array(b); + Module['HEAPF32'] = HEAPF32 = new Float32Array(b); + Module['HEAPF64'] = HEAPF64 = new Float64Array(b); + Module['HEAP64'] = HEAP64 = new BigInt64Array(b); + Module['HEAPU64'] = HEAPU64 = new BigUint64Array(b); +} + +// end include: runtime_shared.js +assert(!Module['STACK_SIZE'], 'STACK_SIZE can no longer be set at runtime. Use -sSTACK_SIZE at link time') + +assert(typeof Int32Array != 'undefined' && typeof Float64Array !== 'undefined' && Int32Array.prototype.subarray != undefined && Int32Array.prototype.set != undefined, + 'JS engine does not provide full typed array support'); + +// If memory is defined in wasm, the user can't provide it, or set INITIAL_MEMORY +assert(!Module['wasmMemory'], 'Use of `wasmMemory` detected. Use -sIMPORTED_MEMORY to define wasmMemory externally'); +assert(!Module['INITIAL_MEMORY'], 'Detected runtime INITIAL_MEMORY setting. Use -sIMPORTED_MEMORY to define wasmMemory dynamically'); + +function preRun() { + if (Module['preRun']) { + if (typeof Module['preRun'] == 'function') Module['preRun'] = [Module['preRun']]; + while (Module['preRun'].length) { + addOnPreRun(Module['preRun'].shift()); + } + } + consumedModuleProp('preRun'); + callRuntimeCallbacks(onPreRuns); +} + +function initRuntime() { + assert(!runtimeInitialized); + runtimeInitialized = true; + + checkStackCookie(); + + if (!Module['noFSInit'] && !FS.initialized) FS.init(); +TTY.init(); + + wasmExports['__wasm_call_ctors'](); + + FS.ignorePermissions = false; +} + +function preMain() { + checkStackCookie(); + +} + +function postRun() { + checkStackCookie(); + + if (Module['postRun']) { + if (typeof Module['postRun'] == 'function') Module['postRun'] = [Module['postRun']]; + while (Module['postRun'].length) { + addOnPostRun(Module['postRun'].shift()); + } + } + consumedModuleProp('postRun'); + + callRuntimeCallbacks(onPostRuns); +} + +// A counter of dependencies for calling run(). If we need to +// do asynchronous work before running, increment this and +// decrement it. Incrementing must happen in a place like +// Module.preRun (used by emcc to add file preloading). +// Note that you can add dependencies in preRun, even though +// it happens right before run - run will be postponed until +// the dependencies are met. +var runDependencies = 0; +var dependenciesFulfilled = null; // overridden to take different actions when all run dependencies are fulfilled +var runDependencyTracking = {}; +var runDependencyWatcher = null; + +function getUniqueRunDependency(id) { + var orig = id; + while (1) { + if (!runDependencyTracking[id]) return id; + id = orig + Math.random(); + } +} + +function addRunDependency(id) { + runDependencies++; + + Module['monitorRunDependencies']?.(runDependencies); + + if (id) { + assert(!runDependencyTracking[id]); + runDependencyTracking[id] = 1; + if (runDependencyWatcher === null && typeof setInterval != 'undefined') { + // Check for missing dependencies every few seconds + runDependencyWatcher = setInterval(() => { + if (ABORT) { + clearInterval(runDependencyWatcher); + runDependencyWatcher = null; + return; + } + var shown = false; + for (var dep in runDependencyTracking) { + if (!shown) { + shown = true; + err('still waiting on run dependencies:'); + } + err(`dependency: ${dep}`); + } + if (shown) { + err('(end of list)'); + } + }, 10000); + } + } else { + err('warning: run dependency added without ID'); + } +} + +function removeRunDependency(id) { + runDependencies--; + + Module['monitorRunDependencies']?.(runDependencies); + + if (id) { + assert(runDependencyTracking[id]); + delete runDependencyTracking[id]; + } else { + err('warning: run dependency removed without ID'); + } + if (runDependencies == 0) { + if (runDependencyWatcher !== null) { + clearInterval(runDependencyWatcher); + runDependencyWatcher = null; + } + if (dependenciesFulfilled) { + var callback = dependenciesFulfilled; + dependenciesFulfilled = null; + callback(); // can add another dependenciesFulfilled + } + } +} + +/** @param {string|number=} what */ +function abort(what) { + Module['onAbort']?.(what); + + what = 'Aborted(' + what + ')'; + // TODO(sbc): Should we remove printing and leave it up to whoever + // catches the exception? + err(what); + + ABORT = true; + + // Use a wasm runtime error, because a JS error might be seen as a foreign + // exception, which means we'd run destructors on it. We need the error to + // simply make the program stop. + // FIXME This approach does not work in Wasm EH because it currently does not assume + // all RuntimeErrors are from traps; it decides whether a RuntimeError is from + // a trap or not based on a hidden field within the object. So at the moment + // we don't have a way of throwing a wasm trap from JS. TODO Make a JS API that + // allows this in the wasm spec. + + // Suppress closure compiler warning here. Closure compiler's builtin extern + // definition for WebAssembly.RuntimeError claims it takes no arguments even + // though it can. + // TODO(https://github.com/google/closure-compiler/pull/3913): Remove if/when upstream closure gets fixed. + /** @suppress {checkTypes} */ + var e = new WebAssembly.RuntimeError(what); + + // Throw the error whether or not MODULARIZE is set because abort is used + // in code paths apart from instantiation where an exception is expected + // to be thrown when abort is called. + throw e; +} + +function createExportWrapper(name, nargs) { + return (...args) => { + assert(runtimeInitialized, `native function \`${name}\` called before runtime initialization`); + var f = wasmExports[name]; + assert(f, `exported native function \`${name}\` not found`); + // Only assert for too many arguments. Too few can be valid since the missing arguments will be zero filled. + assert(args.length <= nargs, `native function \`${name}\` called with ${args.length} args but expects ${nargs}`); + return f(...args); + }; +} + +var wasmBinaryFile; + +function findWasmBinary() { + return locateFile('ziptool.wasm'); +} + +function getBinarySync(file) { + if (file == wasmBinaryFile && wasmBinary) { + return new Uint8Array(wasmBinary); + } + if (readBinary) { + return readBinary(file); + } + throw 'both async and sync fetching of the wasm failed'; +} + +async function getWasmBinary(binaryFile) { + // If we don't have the binary yet, load it asynchronously using readAsync. + if (!wasmBinary) { + // Fetch the binary using readAsync + try { + var response = await readAsync(binaryFile); + return new Uint8Array(response); + } catch { + // Fall back to getBinarySync below; + } + } + + // Otherwise, getBinarySync should be able to get it synchronously + return getBinarySync(binaryFile); +} + +async function instantiateArrayBuffer(binaryFile, imports) { + try { + var binary = await getWasmBinary(binaryFile); + var instance = await WebAssembly.instantiate(binary, imports); + return instance; + } catch (reason) { + err(`failed to asynchronously prepare wasm: ${reason}`); + + // Warn on some common problems. + if (isFileURI(wasmBinaryFile)) { + err(`warning: Loading from a file URI (${wasmBinaryFile}) is not supported in most browsers. See https://emscripten.org/docs/getting_started/FAQ.html#how-do-i-run-a-local-webserver-for-testing-why-does-my-program-stall-in-downloading-or-preparing`); + } + abort(reason); + } +} + +async function instantiateAsync(binary, binaryFile, imports) { + if (!binary && typeof WebAssembly.instantiateStreaming == 'function' + // Don't use streaming for file:// delivered objects in a webview, fetch them synchronously. + && !isFileURI(binaryFile) + // Avoid instantiateStreaming() on Node.js environment for now, as while + // Node.js v18.1.0 implements it, it does not have a full fetch() + // implementation yet. + // + // Reference: + // https://github.com/emscripten-core/emscripten/pull/16917 + && !ENVIRONMENT_IS_NODE + ) { + try { + var response = fetch(binaryFile, { credentials: 'same-origin' }); + var instantiationResult = await WebAssembly.instantiateStreaming(response, imports); + return instantiationResult; + } catch (reason) { + // We expect the most common failure cause to be a bad MIME type for the binary, + // in which case falling back to ArrayBuffer instantiation should work. + err(`wasm streaming compile failed: ${reason}`); + err('falling back to ArrayBuffer instantiation'); + // fall back of instantiateArrayBuffer below + }; + } + return instantiateArrayBuffer(binaryFile, imports); +} + +function getWasmImports() { + // prepare imports + return { + 'env': wasmImports, + 'wasi_snapshot_preview1': wasmImports, + } +} + +// Create the wasm instance. +// Receives the wasm imports, returns the exports. +async function createWasm() { + // Load the wasm module and create an instance of using native support in the JS engine. + // handle a generated wasm instance, receiving its exports and + // performing other necessary setup + /** @param {WebAssembly.Module=} module*/ + function receiveInstance(instance, module) { + wasmExports = instance.exports; + + + + wasmMemory = wasmExports['memory']; + + assert(wasmMemory, 'memory not found in wasm exports'); + updateMemoryViews(); + + removeRunDependency('wasm-instantiate'); + return wasmExports; + } + // wait for the pthread pool (if any) + addRunDependency('wasm-instantiate'); + + // Prefer streaming instantiation if available. + // Async compilation can be confusing when an error on the page overwrites Module + // (for example, if the order of elements is wrong, and the one defining Module is + // later), so we save Module and check it later. + var trueModule = Module; + function receiveInstantiationResult(result) { + // 'result' is a ResultObject object which has both the module and instance. + // receiveInstance() will swap in the exports (to Module.asm) so they can be called + assert(Module === trueModule, 'the Module object should not be replaced during async compilation - perhaps the order of HTML elements is wrong?'); + trueModule = null; + // TODO: Due to Closure regression https://github.com/google/closure-compiler/issues/3193, the above line no longer optimizes out down to the following line. + // When the regression is fixed, can restore the above PTHREADS-enabled path. + return receiveInstance(result['instance']); + } + + var info = getWasmImports(); + + // User shell pages can write their own Module.instantiateWasm = function(imports, successCallback) callback + // to manually instantiate the Wasm module themselves. This allows pages to + // run the instantiation parallel to any other async startup actions they are + // performing. + // Also pthreads and wasm workers initialize the wasm instance through this + // path. + if (Module['instantiateWasm']) { + return new Promise((resolve, reject) => { + try { + Module['instantiateWasm'](info, (mod, inst) => { + receiveInstance(mod, inst); + resolve(mod.exports); + }); + } catch(e) { + err(`Module.instantiateWasm callback failed with error: ${e}`); + reject(e); + } + }); + } + + wasmBinaryFile ??= findWasmBinary(); + var result = await instantiateAsync(wasmBinary, wasmBinaryFile, info); + var exports = receiveInstantiationResult(result); + return exports; +} + +// end include: preamble.js + +// Begin JS library code + + + class ExitStatus { + name = 'ExitStatus'; + constructor(status) { + this.message = `Program terminated with exit(${status})`; + this.status = status; + } + } + + var callRuntimeCallbacks = (callbacks) => { + while (callbacks.length > 0) { + // Pass the module as the first argument. + callbacks.shift()(Module); + } + }; + var onPostRuns = []; + var addOnPostRun = (cb) => onPostRuns.unshift(cb); + + var onPreRuns = []; + var addOnPreRun = (cb) => onPreRuns.unshift(cb); + + + + /** + * @param {number} ptr + * @param {string} type + */ + function getValue(ptr, type = 'i8') { + if (type.endsWith('*')) type = '*'; + switch (type) { + case 'i1': return HEAP8[ptr]; + case 'i8': return HEAP8[ptr]; + case 'i16': return HEAP16[((ptr)>>1)]; + case 'i32': return HEAP32[((ptr)>>2)]; + case 'i64': return HEAP64[((ptr)>>3)]; + case 'float': return HEAPF32[((ptr)>>2)]; + case 'double': return HEAPF64[((ptr)>>3)]; + case '*': return HEAPU32[((ptr)>>2)]; + default: abort(`invalid type for getValue: ${type}`); + } + } + + var noExitRuntime = Module['noExitRuntime'] || true; + + var ptrToString = (ptr) => { + assert(typeof ptr === 'number'); + // With CAN_ADDRESS_2GB or MEMORY64, pointers are already unsigned. + ptr >>>= 0; + return '0x' + ptr.toString(16).padStart(8, '0'); + }; + + + /** + * @param {number} ptr + * @param {number} value + * @param {string} type + */ + function setValue(ptr, value, type = 'i8') { + if (type.endsWith('*')) type = '*'; + switch (type) { + case 'i1': HEAP8[ptr] = value; break; + case 'i8': HEAP8[ptr] = value; break; + case 'i16': HEAP16[((ptr)>>1)] = value; break; + case 'i32': HEAP32[((ptr)>>2)] = value; break; + case 'i64': HEAP64[((ptr)>>3)] = BigInt(value); break; + case 'float': HEAPF32[((ptr)>>2)] = value; break; + case 'double': HEAPF64[((ptr)>>3)] = value; break; + case '*': HEAPU32[((ptr)>>2)] = value; break; + default: abort(`invalid type for setValue: ${type}`); + } + } + + var stackRestore = (val) => __emscripten_stack_restore(val); + + var stackSave = () => _emscripten_stack_get_current(); + + var warnOnce = (text) => { + warnOnce.shown ||= {}; + if (!warnOnce.shown[text]) { + warnOnce.shown[text] = 1; + if (ENVIRONMENT_IS_NODE) text = 'warning: ' + text; + err(text); + } + }; + + var PATH = { + isAbs:(path) => path.charAt(0) === '/', + splitPath:(filename) => { + var splitPathRe = /^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/; + return splitPathRe.exec(filename).slice(1); + }, + normalizeArray:(parts, allowAboveRoot) => { + // if the path tries to go above the root, `up` ends up > 0 + var up = 0; + for (var i = parts.length - 1; i >= 0; i--) { + var last = parts[i]; + if (last === '.') { + parts.splice(i, 1); + } else if (last === '..') { + parts.splice(i, 1); + up++; + } else if (up) { + parts.splice(i, 1); + up--; + } + } + // if the path is allowed to go above the root, restore leading ..s + if (allowAboveRoot) { + for (; up; up--) { + parts.unshift('..'); + } + } + return parts; + }, + normalize:(path) => { + var isAbsolute = PATH.isAbs(path), + trailingSlash = path.slice(-1) === '/'; + // Normalize the path + path = PATH.normalizeArray(path.split('/').filter((p) => !!p), !isAbsolute).join('/'); + if (!path && !isAbsolute) { + path = '.'; + } + if (path && trailingSlash) { + path += '/'; + } + return (isAbsolute ? '/' : '') + path; + }, + dirname:(path) => { + var result = PATH.splitPath(path), + root = result[0], + dir = result[1]; + if (!root && !dir) { + // No dirname whatsoever + return '.'; + } + if (dir) { + // It has a dirname, strip trailing slash + dir = dir.slice(0, -1); + } + return root + dir; + }, + basename:(path) => path && path.match(/([^\/]+|\/)\/*$/)[1], + join:(...paths) => PATH.normalize(paths.join('/')), + join2:(l, r) => PATH.normalize(l + '/' + r), + }; + + var initRandomFill = () => { + // This block is not needed on v19+ since crypto.getRandomValues is builtin + if (ENVIRONMENT_IS_NODE) { + var nodeCrypto = require('crypto'); + return (view) => nodeCrypto.randomFillSync(view); + } + + return (view) => crypto.getRandomValues(view); + }; + var randomFill = (view) => { + // Lazily init on the first invocation. + (randomFill = initRandomFill())(view); + }; + + + + var PATH_FS = { + resolve:(...args) => { + var resolvedPath = '', + resolvedAbsolute = false; + for (var i = args.length - 1; i >= -1 && !resolvedAbsolute; i--) { + var path = (i >= 0) ? args[i] : FS.cwd(); + // Skip empty and invalid entries + if (typeof path != 'string') { + throw new TypeError('Arguments to path.resolve must be strings'); + } else if (!path) { + return ''; // an invalid portion invalidates the whole thing + } + resolvedPath = path + '/' + resolvedPath; + resolvedAbsolute = PATH.isAbs(path); + } + // At this point the path should be resolved to a full absolute path, but + // handle relative paths to be safe (might happen when process.cwd() fails) + resolvedPath = PATH.normalizeArray(resolvedPath.split('/').filter((p) => !!p), !resolvedAbsolute).join('/'); + return ((resolvedAbsolute ? '/' : '') + resolvedPath) || '.'; + }, + relative:(from, to) => { + from = PATH_FS.resolve(from).slice(1); + to = PATH_FS.resolve(to).slice(1); + function trim(arr) { + var start = 0; + for (; start < arr.length; start++) { + if (arr[start] !== '') break; + } + var end = arr.length - 1; + for (; end >= 0; end--) { + if (arr[end] !== '') break; + } + if (start > end) return []; + return arr.slice(start, end - start + 1); + } + var fromParts = trim(from.split('/')); + var toParts = trim(to.split('/')); + var length = Math.min(fromParts.length, toParts.length); + var samePartsLength = length; + for (var i = 0; i < length; i++) { + if (fromParts[i] !== toParts[i]) { + samePartsLength = i; + break; + } + } + var outputParts = []; + for (var i = samePartsLength; i < fromParts.length; i++) { + outputParts.push('..'); + } + outputParts = outputParts.concat(toParts.slice(samePartsLength)); + return outputParts.join('/'); + }, + }; + + + var UTF8Decoder = typeof TextDecoder != 'undefined' ? new TextDecoder() : undefined; + + /** + * Given a pointer 'idx' to a null-terminated UTF8-encoded string in the given + * array that contains uint8 values, returns a copy of that string as a + * Javascript String object. + * heapOrArray is either a regular array, or a JavaScript typed array view. + * @param {number=} idx + * @param {number=} maxBytesToRead + * @return {string} + */ + var UTF8ArrayToString = (heapOrArray, idx = 0, maxBytesToRead = NaN) => { + var endIdx = idx + maxBytesToRead; + var endPtr = idx; + // TextDecoder needs to know the byte length in advance, it doesn't stop on + // null terminator by itself. Also, use the length info to avoid running tiny + // strings through TextDecoder, since .subarray() allocates garbage. + // (As a tiny code save trick, compare endPtr against endIdx using a negation, + // so that undefined/NaN means Infinity) + while (heapOrArray[endPtr] && !(endPtr >= endIdx)) ++endPtr; + + if (endPtr - idx > 16 && heapOrArray.buffer && UTF8Decoder) { + return UTF8Decoder.decode(heapOrArray.subarray(idx, endPtr)); + } + var str = ''; + // If building with TextDecoder, we have already computed the string length + // above, so test loop end condition against that + while (idx < endPtr) { + // For UTF8 byte structure, see: + // http://en.wikipedia.org/wiki/UTF-8#Description + // https://www.ietf.org/rfc/rfc2279.txt + // https://tools.ietf.org/html/rfc3629 + var u0 = heapOrArray[idx++]; + if (!(u0 & 0x80)) { str += String.fromCharCode(u0); continue; } + var u1 = heapOrArray[idx++] & 63; + if ((u0 & 0xE0) == 0xC0) { str += String.fromCharCode(((u0 & 31) << 6) | u1); continue; } + var u2 = heapOrArray[idx++] & 63; + if ((u0 & 0xF0) == 0xE0) { + u0 = ((u0 & 15) << 12) | (u1 << 6) | u2; + } else { + if ((u0 & 0xF8) != 0xF0) warnOnce('Invalid UTF-8 leading byte ' + ptrToString(u0) + ' encountered when deserializing a UTF-8 string in wasm memory to a JS string!'); + u0 = ((u0 & 7) << 18) | (u1 << 12) | (u2 << 6) | (heapOrArray[idx++] & 63); + } + + if (u0 < 0x10000) { + str += String.fromCharCode(u0); + } else { + var ch = u0 - 0x10000; + str += String.fromCharCode(0xD800 | (ch >> 10), 0xDC00 | (ch & 0x3FF)); + } + } + return str; + }; + + var FS_stdin_getChar_buffer = []; + + var lengthBytesUTF8 = (str) => { + var len = 0; + for (var i = 0; i < str.length; ++i) { + // Gotcha: charCodeAt returns a 16-bit word that is a UTF-16 encoded code + // unit, not a Unicode code point of the character! So decode + // UTF16->UTF32->UTF8. + // See http://unicode.org/faq/utf_bom.html#utf16-3 + var c = str.charCodeAt(i); // possibly a lead surrogate + if (c <= 0x7F) { + len++; + } else if (c <= 0x7FF) { + len += 2; + } else if (c >= 0xD800 && c <= 0xDFFF) { + len += 4; ++i; + } else { + len += 3; + } + } + return len; + }; + + var stringToUTF8Array = (str, heap, outIdx, maxBytesToWrite) => { + assert(typeof str === 'string', `stringToUTF8Array expects a string (got ${typeof str})`); + // Parameter maxBytesToWrite is not optional. Negative values, 0, null, + // undefined and false each don't write out any bytes. + if (!(maxBytesToWrite > 0)) + return 0; + + var startIdx = outIdx; + var endIdx = outIdx + maxBytesToWrite - 1; // -1 for string null terminator. + for (var i = 0; i < str.length; ++i) { + // Gotcha: charCodeAt returns a 16-bit word that is a UTF-16 encoded code + // unit, not a Unicode code point of the character! So decode + // UTF16->UTF32->UTF8. + // See http://unicode.org/faq/utf_bom.html#utf16-3 + // For UTF8 byte structure, see http://en.wikipedia.org/wiki/UTF-8#Description + // and https://www.ietf.org/rfc/rfc2279.txt + // and https://tools.ietf.org/html/rfc3629 + var u = str.charCodeAt(i); // possibly a lead surrogate + if (u >= 0xD800 && u <= 0xDFFF) { + var u1 = str.charCodeAt(++i); + u = 0x10000 + ((u & 0x3FF) << 10) | (u1 & 0x3FF); + } + if (u <= 0x7F) { + if (outIdx >= endIdx) break; + heap[outIdx++] = u; + } else if (u <= 0x7FF) { + if (outIdx + 1 >= endIdx) break; + heap[outIdx++] = 0xC0 | (u >> 6); + heap[outIdx++] = 0x80 | (u & 63); + } else if (u <= 0xFFFF) { + if (outIdx + 2 >= endIdx) break; + heap[outIdx++] = 0xE0 | (u >> 12); + heap[outIdx++] = 0x80 | ((u >> 6) & 63); + heap[outIdx++] = 0x80 | (u & 63); + } else { + if (outIdx + 3 >= endIdx) break; + if (u > 0x10FFFF) warnOnce('Invalid Unicode code point ' + ptrToString(u) + ' encountered when serializing a JS string to a UTF-8 string in wasm memory! (Valid unicode code points should be in range 0-0x10FFFF).'); + heap[outIdx++] = 0xF0 | (u >> 18); + heap[outIdx++] = 0x80 | ((u >> 12) & 63); + heap[outIdx++] = 0x80 | ((u >> 6) & 63); + heap[outIdx++] = 0x80 | (u & 63); + } + } + // Null-terminate the pointer to the buffer. + heap[outIdx] = 0; + return outIdx - startIdx; + }; + /** @type {function(string, boolean=, number=)} */ + var intArrayFromString = (stringy, dontAddNull, length) => { + var len = length > 0 ? length : lengthBytesUTF8(stringy)+1; + var u8array = new Array(len); + var numBytesWritten = stringToUTF8Array(stringy, u8array, 0, u8array.length); + if (dontAddNull) u8array.length = numBytesWritten; + return u8array; + }; + var FS_stdin_getChar = () => { + if (!FS_stdin_getChar_buffer.length) { + var result = null; + if (ENVIRONMENT_IS_NODE) { + // we will read data by chunks of BUFSIZE + var BUFSIZE = 256; + var buf = Buffer.alloc(BUFSIZE); + var bytesRead = 0; + + // For some reason we must suppress a closure warning here, even though + // fd definitely exists on process.stdin, and is even the proper way to + // get the fd of stdin, + // https://github.com/nodejs/help/issues/2136#issuecomment-523649904 + // This started to happen after moving this logic out of library_tty.js, + // so it is related to the surrounding code in some unclear manner. + /** @suppress {missingProperties} */ + var fd = process.stdin.fd; + + try { + bytesRead = fs.readSync(fd, buf, 0, BUFSIZE); + } catch(e) { + // Cross-platform differences: on Windows, reading EOF throws an + // exception, but on other OSes, reading EOF returns 0. Uniformize + // behavior by treating the EOF exception to return 0. + if (e.toString().includes('EOF')) bytesRead = 0; + else throw e; + } + + if (bytesRead > 0) { + result = buf.slice(0, bytesRead).toString('utf-8'); + } + } else + if (typeof window != 'undefined' && + typeof window.prompt == 'function') { + // Browser. + result = window.prompt('Input: '); // returns null on cancel + if (result !== null) { + result += '\n'; + } + } else + {} + if (!result) { + return null; + } + FS_stdin_getChar_buffer = intArrayFromString(result, true); + } + return FS_stdin_getChar_buffer.shift(); + }; + var TTY = { + ttys:[], + init() { + // https://github.com/emscripten-core/emscripten/pull/1555 + // if (ENVIRONMENT_IS_NODE) { + // // currently, FS.init does not distinguish if process.stdin is a file or TTY + // // device, it always assumes it's a TTY device. because of this, we're forcing + // // process.stdin to UTF8 encoding to at least make stdin reading compatible + // // with text files until FS.init can be refactored. + // process.stdin.setEncoding('utf8'); + // } + }, + shutdown() { + // https://github.com/emscripten-core/emscripten/pull/1555 + // if (ENVIRONMENT_IS_NODE) { + // // inolen: any idea as to why node -e 'process.stdin.read()' wouldn't exit immediately (with process.stdin being a tty)? + // // isaacs: because now it's reading from the stream, you've expressed interest in it, so that read() kicks off a _read() which creates a ReadReq operation + // // inolen: I thought read() in that case was a synchronous operation that just grabbed some amount of buffered data if it exists? + // // isaacs: it is. but it also triggers a _read() call, which calls readStart() on the handle + // // isaacs: do process.stdin.pause() and i'd think it'd probably close the pending call + // process.stdin.pause(); + // } + }, + register(dev, ops) { + TTY.ttys[dev] = { input: [], output: [], ops: ops }; + FS.registerDevice(dev, TTY.stream_ops); + }, + stream_ops:{ + open(stream) { + var tty = TTY.ttys[stream.node.rdev]; + if (!tty) { + throw new FS.ErrnoError(43); + } + stream.tty = tty; + stream.seekable = false; + }, + close(stream) { + // flush any pending line data + stream.tty.ops.fsync(stream.tty); + }, + fsync(stream) { + stream.tty.ops.fsync(stream.tty); + }, + read(stream, buffer, offset, length, pos /* ignored */) { + if (!stream.tty || !stream.tty.ops.get_char) { + throw new FS.ErrnoError(60); + } + var bytesRead = 0; + for (var i = 0; i < length; i++) { + var result; + try { + result = stream.tty.ops.get_char(stream.tty); + } catch (e) { + throw new FS.ErrnoError(29); + } + if (result === undefined && bytesRead === 0) { + throw new FS.ErrnoError(6); + } + if (result === null || result === undefined) break; + bytesRead++; + buffer[offset+i] = result; + } + if (bytesRead) { + stream.node.atime = Date.now(); + } + return bytesRead; + }, + write(stream, buffer, offset, length, pos) { + if (!stream.tty || !stream.tty.ops.put_char) { + throw new FS.ErrnoError(60); + } + try { + for (var i = 0; i < length; i++) { + stream.tty.ops.put_char(stream.tty, buffer[offset+i]); + } + } catch (e) { + throw new FS.ErrnoError(29); + } + if (length) { + stream.node.mtime = stream.node.ctime = Date.now(); + } + return i; + }, + }, + default_tty_ops:{ + get_char(tty) { + return FS_stdin_getChar(); + }, + put_char(tty, val) { + if (val === null || val === 10) { + out(UTF8ArrayToString(tty.output)); + tty.output = []; + } else { + if (val != 0) tty.output.push(val); // val == 0 would cut text output off in the middle. + } + }, + fsync(tty) { + if (tty.output?.length > 0) { + out(UTF8ArrayToString(tty.output)); + tty.output = []; + } + }, + ioctl_tcgets(tty) { + // typical setting + return { + c_iflag: 25856, + c_oflag: 5, + c_cflag: 191, + c_lflag: 35387, + c_cc: [ + 0x03, 0x1c, 0x7f, 0x15, 0x04, 0x00, 0x01, 0x00, 0x11, 0x13, 0x1a, 0x00, + 0x12, 0x0f, 0x17, 0x16, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + ] + }; + }, + ioctl_tcsets(tty, optional_actions, data) { + // currently just ignore + return 0; + }, + ioctl_tiocgwinsz(tty) { + return [24, 80]; + }, + }, + default_tty1_ops:{ + put_char(tty, val) { + if (val === null || val === 10) { + err(UTF8ArrayToString(tty.output)); + tty.output = []; + } else { + if (val != 0) tty.output.push(val); + } + }, + fsync(tty) { + if (tty.output?.length > 0) { + err(UTF8ArrayToString(tty.output)); + tty.output = []; + } + }, + }, + }; + + + var mmapAlloc = (size) => { + abort('internal error: mmapAlloc called but `emscripten_builtin_memalign` native symbol not exported'); + }; + var MEMFS = { + ops_table:null, + mount(mount) { + return MEMFS.createNode(null, '/', 16895, 0); + }, + createNode(parent, name, mode, dev) { + if (FS.isBlkdev(mode) || FS.isFIFO(mode)) { + // no supported + throw new FS.ErrnoError(63); + } + MEMFS.ops_table ||= { + dir: { + node: { + getattr: MEMFS.node_ops.getattr, + setattr: MEMFS.node_ops.setattr, + lookup: MEMFS.node_ops.lookup, + mknod: MEMFS.node_ops.mknod, + rename: MEMFS.node_ops.rename, + unlink: MEMFS.node_ops.unlink, + rmdir: MEMFS.node_ops.rmdir, + readdir: MEMFS.node_ops.readdir, + symlink: MEMFS.node_ops.symlink + }, + stream: { + llseek: MEMFS.stream_ops.llseek + } + }, + file: { + node: { + getattr: MEMFS.node_ops.getattr, + setattr: MEMFS.node_ops.setattr + }, + stream: { + llseek: MEMFS.stream_ops.llseek, + read: MEMFS.stream_ops.read, + write: MEMFS.stream_ops.write, + mmap: MEMFS.stream_ops.mmap, + msync: MEMFS.stream_ops.msync + } + }, + link: { + node: { + getattr: MEMFS.node_ops.getattr, + setattr: MEMFS.node_ops.setattr, + readlink: MEMFS.node_ops.readlink + }, + stream: {} + }, + chrdev: { + node: { + getattr: MEMFS.node_ops.getattr, + setattr: MEMFS.node_ops.setattr + }, + stream: FS.chrdev_stream_ops + } + }; + var node = FS.createNode(parent, name, mode, dev); + if (FS.isDir(node.mode)) { + node.node_ops = MEMFS.ops_table.dir.node; + node.stream_ops = MEMFS.ops_table.dir.stream; + node.contents = {}; + } else if (FS.isFile(node.mode)) { + node.node_ops = MEMFS.ops_table.file.node; + node.stream_ops = MEMFS.ops_table.file.stream; + node.usedBytes = 0; // The actual number of bytes used in the typed array, as opposed to contents.length which gives the whole capacity. + // When the byte data of the file is populated, this will point to either a typed array, or a normal JS array. Typed arrays are preferred + // for performance, and used by default. However, typed arrays are not resizable like normal JS arrays are, so there is a small disk size + // penalty involved for appending file writes that continuously grow a file similar to std::vector capacity vs used -scheme. + node.contents = null; + } else if (FS.isLink(node.mode)) { + node.node_ops = MEMFS.ops_table.link.node; + node.stream_ops = MEMFS.ops_table.link.stream; + } else if (FS.isChrdev(node.mode)) { + node.node_ops = MEMFS.ops_table.chrdev.node; + node.stream_ops = MEMFS.ops_table.chrdev.stream; + } + node.atime = node.mtime = node.ctime = Date.now(); + // add the new node to the parent + if (parent) { + parent.contents[name] = node; + parent.atime = parent.mtime = parent.ctime = node.atime; + } + return node; + }, + getFileDataAsTypedArray(node) { + if (!node.contents) return new Uint8Array(0); + if (node.contents.subarray) return node.contents.subarray(0, node.usedBytes); // Make sure to not return excess unused bytes. + return new Uint8Array(node.contents); + }, + expandFileStorage(node, newCapacity) { + var prevCapacity = node.contents ? node.contents.length : 0; + if (prevCapacity >= newCapacity) return; // No need to expand, the storage was already large enough. + // Don't expand strictly to the given requested limit if it's only a very small increase, but instead geometrically grow capacity. + // For small filesizes (<1MB), perform size*2 geometric increase, but for large sizes, do a much more conservative size*1.125 increase to + // avoid overshooting the allocation cap by a very large margin. + var CAPACITY_DOUBLING_MAX = 1024 * 1024; + newCapacity = Math.max(newCapacity, (prevCapacity * (prevCapacity < CAPACITY_DOUBLING_MAX ? 2.0 : 1.125)) >>> 0); + if (prevCapacity != 0) newCapacity = Math.max(newCapacity, 256); // At minimum allocate 256b for each file when expanding. + var oldContents = node.contents; + node.contents = new Uint8Array(newCapacity); // Allocate new storage. + if (node.usedBytes > 0) node.contents.set(oldContents.subarray(0, node.usedBytes), 0); // Copy old data over to the new storage. + }, + resizeFileStorage(node, newSize) { + if (node.usedBytes == newSize) return; + if (newSize == 0) { + node.contents = null; // Fully decommit when requesting a resize to zero. + node.usedBytes = 0; + } else { + var oldContents = node.contents; + node.contents = new Uint8Array(newSize); // Allocate new storage. + if (oldContents) { + node.contents.set(oldContents.subarray(0, Math.min(newSize, node.usedBytes))); // Copy old data over to the new storage. + } + node.usedBytes = newSize; + } + }, + node_ops:{ + getattr(node) { + var attr = {}; + // device numbers reuse inode numbers. + attr.dev = FS.isChrdev(node.mode) ? node.id : 1; + attr.ino = node.id; + attr.mode = node.mode; + attr.nlink = 1; + attr.uid = 0; + attr.gid = 0; + attr.rdev = node.rdev; + if (FS.isDir(node.mode)) { + attr.size = 4096; + } else if (FS.isFile(node.mode)) { + attr.size = node.usedBytes; + } else if (FS.isLink(node.mode)) { + attr.size = node.link.length; + } else { + attr.size = 0; + } + attr.atime = new Date(node.atime); + attr.mtime = new Date(node.mtime); + attr.ctime = new Date(node.ctime); + // NOTE: In our implementation, st_blocks = Math.ceil(st_size/st_blksize), + // but this is not required by the standard. + attr.blksize = 4096; + attr.blocks = Math.ceil(attr.size / attr.blksize); + return attr; + }, + setattr(node, attr) { + for (const key of ["mode", "atime", "mtime", "ctime"]) { + if (attr[key] != null) { + node[key] = attr[key]; + } + } + if (attr.size !== undefined) { + MEMFS.resizeFileStorage(node, attr.size); + } + }, + lookup(parent, name) { + throw new FS.ErrnoError(44); + }, + mknod(parent, name, mode, dev) { + return MEMFS.createNode(parent, name, mode, dev); + }, + rename(old_node, new_dir, new_name) { + var new_node; + try { + new_node = FS.lookupNode(new_dir, new_name); + } catch (e) {} + if (new_node) { + if (FS.isDir(old_node.mode)) { + // if we're overwriting a directory at new_name, make sure it's empty. + for (var i in new_node.contents) { + throw new FS.ErrnoError(55); + } + } + FS.hashRemoveNode(new_node); + } + // do the internal rewiring + delete old_node.parent.contents[old_node.name]; + new_dir.contents[new_name] = old_node; + old_node.name = new_name; + new_dir.ctime = new_dir.mtime = old_node.parent.ctime = old_node.parent.mtime = Date.now(); + }, + unlink(parent, name) { + delete parent.contents[name]; + parent.ctime = parent.mtime = Date.now(); + }, + rmdir(parent, name) { + var node = FS.lookupNode(parent, name); + for (var i in node.contents) { + throw new FS.ErrnoError(55); + } + delete parent.contents[name]; + parent.ctime = parent.mtime = Date.now(); + }, + readdir(node) { + return ['.', '..', ...Object.keys(node.contents)]; + }, + symlink(parent, newname, oldpath) { + var node = MEMFS.createNode(parent, newname, 0o777 | 40960, 0); + node.link = oldpath; + return node; + }, + readlink(node) { + if (!FS.isLink(node.mode)) { + throw new FS.ErrnoError(28); + } + return node.link; + }, + }, + stream_ops:{ + read(stream, buffer, offset, length, position) { + var contents = stream.node.contents; + if (position >= stream.node.usedBytes) return 0; + var size = Math.min(stream.node.usedBytes - position, length); + assert(size >= 0); + if (size > 8 && contents.subarray) { // non-trivial, and typed array + buffer.set(contents.subarray(position, position + size), offset); + } else { + for (var i = 0; i < size; i++) buffer[offset + i] = contents[position + i]; + } + return size; + }, + write(stream, buffer, offset, length, position, canOwn) { + // The data buffer should be a typed array view + assert(!(buffer instanceof ArrayBuffer)); + + if (!length) return 0; + var node = stream.node; + node.mtime = node.ctime = Date.now(); + + if (buffer.subarray && (!node.contents || node.contents.subarray)) { // This write is from a typed array to a typed array? + if (canOwn) { + assert(position === 0, 'canOwn must imply no weird position inside the file'); + node.contents = buffer.subarray(offset, offset + length); + node.usedBytes = length; + return length; + } else if (node.usedBytes === 0 && position === 0) { // If this is a simple first write to an empty file, do a fast set since we don't need to care about old data. + node.contents = buffer.slice(offset, offset + length); + node.usedBytes = length; + return length; + } else if (position + length <= node.usedBytes) { // Writing to an already allocated and used subrange of the file? + node.contents.set(buffer.subarray(offset, offset + length), position); + return length; + } + } + + // Appending to an existing file and we need to reallocate, or source data did not come as a typed array. + MEMFS.expandFileStorage(node, position+length); + if (node.contents.subarray && buffer.subarray) { + // Use typed array write which is available. + node.contents.set(buffer.subarray(offset, offset + length), position); + } else { + for (var i = 0; i < length; i++) { + node.contents[position + i] = buffer[offset + i]; // Or fall back to manual write if not. + } + } + node.usedBytes = Math.max(node.usedBytes, position + length); + return length; + }, + llseek(stream, offset, whence) { + var position = offset; + if (whence === 1) { + position += stream.position; + } else if (whence === 2) { + if (FS.isFile(stream.node.mode)) { + position += stream.node.usedBytes; + } + } + if (position < 0) { + throw new FS.ErrnoError(28); + } + return position; + }, + mmap(stream, length, position, prot, flags) { + if (!FS.isFile(stream.node.mode)) { + throw new FS.ErrnoError(43); + } + var ptr; + var allocated; + var contents = stream.node.contents; + // Only make a new copy when MAP_PRIVATE is specified. + if (!(flags & 2) && contents && contents.buffer === HEAP8.buffer) { + // We can't emulate MAP_SHARED when the file is not backed by the + // buffer we're mapping to (e.g. the HEAP buffer). + allocated = false; + ptr = contents.byteOffset; + } else { + allocated = true; + ptr = mmapAlloc(length); + if (!ptr) { + throw new FS.ErrnoError(48); + } + if (contents) { + // Try to avoid unnecessary slices. + if (position > 0 || position + length < contents.length) { + if (contents.subarray) { + contents = contents.subarray(position, position + length); + } else { + contents = Array.prototype.slice.call(contents, position, position + length); + } + } + HEAP8.set(contents, ptr); + } + } + return { ptr, allocated }; + }, + msync(stream, buffer, offset, length, mmapFlags) { + MEMFS.stream_ops.write(stream, buffer, 0, length, offset, false); + // should we check if bytesWritten and length are the same? + return 0; + }, + }, + }; + + var asyncLoad = async (url) => { + var arrayBuffer = await readAsync(url); + assert(arrayBuffer, `Loading data file "${url}" failed (no arrayBuffer).`); + return new Uint8Array(arrayBuffer); + }; + + + var FS_createDataFile = (parent, name, fileData, canRead, canWrite, canOwn) => { + FS.createDataFile(parent, name, fileData, canRead, canWrite, canOwn); + }; + + var preloadPlugins = Module['preloadPlugins'] || []; + var FS_handledByPreloadPlugin = (byteArray, fullname, finish, onerror) => { + // Ensure plugins are ready. + if (typeof Browser != 'undefined') Browser.init(); + + var handled = false; + preloadPlugins.forEach((plugin) => { + if (handled) return; + if (plugin['canHandle'](fullname)) { + plugin['handle'](byteArray, fullname, finish, onerror); + handled = true; + } + }); + return handled; + }; + var FS_createPreloadedFile = (parent, name, url, canRead, canWrite, onload, onerror, dontCreateFile, canOwn, preFinish) => { + // TODO we should allow people to just pass in a complete filename instead + // of parent and name being that we just join them anyways + var fullname = name ? PATH_FS.resolve(PATH.join2(parent, name)) : parent; + var dep = getUniqueRunDependency(`cp ${fullname}`); // might have several active requests for the same fullname + function processData(byteArray) { + function finish(byteArray) { + preFinish?.(); + if (!dontCreateFile) { + FS_createDataFile(parent, name, byteArray, canRead, canWrite, canOwn); + } + onload?.(); + removeRunDependency(dep); + } + if (FS_handledByPreloadPlugin(byteArray, fullname, finish, () => { + onerror?.(); + removeRunDependency(dep); + })) { + return; + } + finish(byteArray); + } + addRunDependency(dep); + if (typeof url == 'string') { + asyncLoad(url).then(processData, onerror); + } else { + processData(url); + } + }; + + var FS_modeStringToFlags = (str) => { + var flagModes = { + 'r': 0, + 'r+': 2, + 'w': 512 | 64 | 1, + 'w+': 512 | 64 | 2, + 'a': 1024 | 64 | 1, + 'a+': 1024 | 64 | 2, + }; + var flags = flagModes[str]; + if (typeof flags == 'undefined') { + throw new Error(`Unknown file open mode: ${str}`); + } + return flags; + }; + + var FS_getMode = (canRead, canWrite) => { + var mode = 0; + if (canRead) mode |= 292 | 73; + if (canWrite) mode |= 146; + return mode; + }; + + + + + + + /** + * Given a pointer 'ptr' to a null-terminated UTF8-encoded string in the + * emscripten HEAP, returns a copy of that string as a Javascript String object. + * + * @param {number} ptr + * @param {number=} maxBytesToRead - An optional length that specifies the + * maximum number of bytes to read. You can omit this parameter to scan the + * string until the first 0 byte. If maxBytesToRead is passed, and the string + * at [ptr, ptr+maxBytesToReadr[ contains a null byte in the middle, then the + * string will cut short at that byte index (i.e. maxBytesToRead will not + * produce a string of exact length [ptr, ptr+maxBytesToRead[) N.B. mixing + * frequent uses of UTF8ToString() with and without maxBytesToRead may throw + * JS JIT optimizations off, so it is worth to consider consistently using one + * @return {string} + */ + var UTF8ToString = (ptr, maxBytesToRead) => { + assert(typeof ptr == 'number', `UTF8ToString expects a number (got ${typeof ptr})`); + return ptr ? UTF8ArrayToString(HEAPU8, ptr, maxBytesToRead) : ''; + }; + + var strError = (errno) => UTF8ToString(_strerror(errno)); + + var ERRNO_CODES = { + 'EPERM': 63, + 'ENOENT': 44, + 'ESRCH': 71, + 'EINTR': 27, + 'EIO': 29, + 'ENXIO': 60, + 'E2BIG': 1, + 'ENOEXEC': 45, + 'EBADF': 8, + 'ECHILD': 12, + 'EAGAIN': 6, + 'EWOULDBLOCK': 6, + 'ENOMEM': 48, + 'EACCES': 2, + 'EFAULT': 21, + 'ENOTBLK': 105, + 'EBUSY': 10, + 'EEXIST': 20, + 'EXDEV': 75, + 'ENODEV': 43, + 'ENOTDIR': 54, + 'EISDIR': 31, + 'EINVAL': 28, + 'ENFILE': 41, + 'EMFILE': 33, + 'ENOTTY': 59, + 'ETXTBSY': 74, + 'EFBIG': 22, + 'ENOSPC': 51, + 'ESPIPE': 70, + 'EROFS': 69, + 'EMLINK': 34, + 'EPIPE': 64, + 'EDOM': 18, + 'ERANGE': 68, + 'ENOMSG': 49, + 'EIDRM': 24, + 'ECHRNG': 106, + 'EL2NSYNC': 156, + 'EL3HLT': 107, + 'EL3RST': 108, + 'ELNRNG': 109, + 'EUNATCH': 110, + 'ENOCSI': 111, + 'EL2HLT': 112, + 'EDEADLK': 16, + 'ENOLCK': 46, + 'EBADE': 113, + 'EBADR': 114, + 'EXFULL': 115, + 'ENOANO': 104, + 'EBADRQC': 103, + 'EBADSLT': 102, + 'EDEADLOCK': 16, + 'EBFONT': 101, + 'ENOSTR': 100, + 'ENODATA': 116, + 'ETIME': 117, + 'ENOSR': 118, + 'ENONET': 119, + 'ENOPKG': 120, + 'EREMOTE': 121, + 'ENOLINK': 47, + 'EADV': 122, + 'ESRMNT': 123, + 'ECOMM': 124, + 'EPROTO': 65, + 'EMULTIHOP': 36, + 'EDOTDOT': 125, + 'EBADMSG': 9, + 'ENOTUNIQ': 126, + 'EBADFD': 127, + 'EREMCHG': 128, + 'ELIBACC': 129, + 'ELIBBAD': 130, + 'ELIBSCN': 131, + 'ELIBMAX': 132, + 'ELIBEXEC': 133, + 'ENOSYS': 52, + 'ENOTEMPTY': 55, + 'ENAMETOOLONG': 37, + 'ELOOP': 32, + 'EOPNOTSUPP': 138, + 'EPFNOSUPPORT': 139, + 'ECONNRESET': 15, + 'ENOBUFS': 42, + 'EAFNOSUPPORT': 5, + 'EPROTOTYPE': 67, + 'ENOTSOCK': 57, + 'ENOPROTOOPT': 50, + 'ESHUTDOWN': 140, + 'ECONNREFUSED': 14, + 'EADDRINUSE': 3, + 'ECONNABORTED': 13, + 'ENETUNREACH': 40, + 'ENETDOWN': 38, + 'ETIMEDOUT': 73, + 'EHOSTDOWN': 142, + 'EHOSTUNREACH': 23, + 'EINPROGRESS': 26, + 'EALREADY': 7, + 'EDESTADDRREQ': 17, + 'EMSGSIZE': 35, + 'EPROTONOSUPPORT': 66, + 'ESOCKTNOSUPPORT': 137, + 'EADDRNOTAVAIL': 4, + 'ENETRESET': 39, + 'EISCONN': 30, + 'ENOTCONN': 53, + 'ETOOMANYREFS': 141, + 'EUSERS': 136, + 'EDQUOT': 19, + 'ESTALE': 72, + 'ENOTSUP': 138, + 'ENOMEDIUM': 148, + 'EILSEQ': 25, + 'EOVERFLOW': 61, + 'ECANCELED': 11, + 'ENOTRECOVERABLE': 56, + 'EOWNERDEAD': 62, + 'ESTRPIPE': 135, + }; + var FS = { + root:null, + mounts:[], + devices:{ + }, + streams:[], + nextInode:1, + nameTable:null, + currentPath:"/", + initialized:false, + ignorePermissions:true, + filesystems:null, + syncFSRequests:0, + readFiles:{ + }, + ErrnoError:class extends Error { + name = 'ErrnoError'; + // We set the `name` property to be able to identify `FS.ErrnoError` + // - the `name` is a standard ECMA-262 property of error objects. Kind of good to have it anyway. + // - when using PROXYFS, an error can come from an underlying FS + // as different FS objects have their own FS.ErrnoError each, + // the test `err instanceof FS.ErrnoError` won't detect an error coming from another filesystem, causing bugs. + // we'll use the reliable test `err.name == "ErrnoError"` instead + constructor(errno) { + super(runtimeInitialized ? strError(errno) : ''); + this.errno = errno; + for (var key in ERRNO_CODES) { + if (ERRNO_CODES[key] === errno) { + this.code = key; + break; + } + } + } + }, + FSStream:class { + shared = {}; + get object() { + return this.node; + } + set object(val) { + this.node = val; + } + get isRead() { + return (this.flags & 2097155) !== 1; + } + get isWrite() { + return (this.flags & 2097155) !== 0; + } + get isAppend() { + return (this.flags & 1024); + } + get flags() { + return this.shared.flags; + } + set flags(val) { + this.shared.flags = val; + } + get position() { + return this.shared.position; + } + set position(val) { + this.shared.position = val; + } + }, + FSNode:class { + node_ops = {}; + stream_ops = {}; + readMode = 292 | 73; + writeMode = 146; + mounted = null; + constructor(parent, name, mode, rdev) { + if (!parent) { + parent = this; // root node sets parent to itself + } + this.parent = parent; + this.mount = parent.mount; + this.id = FS.nextInode++; + this.name = name; + this.mode = mode; + this.rdev = rdev; + this.atime = this.mtime = this.ctime = Date.now(); + } + get read() { + return (this.mode & this.readMode) === this.readMode; + } + set read(val) { + val ? this.mode |= this.readMode : this.mode &= ~this.readMode; + } + get write() { + return (this.mode & this.writeMode) === this.writeMode; + } + set write(val) { + val ? this.mode |= this.writeMode : this.mode &= ~this.writeMode; + } + get isFolder() { + return FS.isDir(this.mode); + } + get isDevice() { + return FS.isChrdev(this.mode); + } + }, + lookupPath(path, opts = {}) { + if (!path) { + throw new FS.ErrnoError(44); + } + opts.follow_mount ??= true + + if (!PATH.isAbs(path)) { + path = FS.cwd() + '/' + path; + } + + // limit max consecutive symlinks to 40 (SYMLOOP_MAX). + linkloop: for (var nlinks = 0; nlinks < 40; nlinks++) { + // split the absolute path + var parts = path.split('/').filter((p) => !!p); + + // start at the root + var current = FS.root; + var current_path = '/'; + + for (var i = 0; i < parts.length; i++) { + var islast = (i === parts.length-1); + if (islast && opts.parent) { + // stop resolving + break; + } + + if (parts[i] === '.') { + continue; + } + + if (parts[i] === '..') { + current_path = PATH.dirname(current_path); + current = current.parent; + continue; + } + + current_path = PATH.join2(current_path, parts[i]); + try { + current = FS.lookupNode(current, parts[i]); + } catch (e) { + // if noent_okay is true, suppress a ENOENT in the last component + // and return an object with an undefined node. This is needed for + // resolving symlinks in the path when creating a file. + if ((e?.errno === 44) && islast && opts.noent_okay) { + return { path: current_path }; + } + throw e; + } + + // jump to the mount's root node if this is a mountpoint + if (FS.isMountpoint(current) && (!islast || opts.follow_mount)) { + current = current.mounted.root; + } + + // by default, lookupPath will not follow a symlink if it is the final path component. + // setting opts.follow = true will override this behavior. + if (FS.isLink(current.mode) && (!islast || opts.follow)) { + if (!current.node_ops.readlink) { + throw new FS.ErrnoError(52); + } + var link = current.node_ops.readlink(current); + if (!PATH.isAbs(link)) { + link = PATH.dirname(current_path) + '/' + link; + } + path = link + '/' + parts.slice(i + 1).join('/'); + continue linkloop; + } + } + return { path: current_path, node: current }; + } + throw new FS.ErrnoError(32); + }, + getPath(node) { + var path; + while (true) { + if (FS.isRoot(node)) { + var mount = node.mount.mountpoint; + if (!path) return mount; + return mount[mount.length-1] !== '/' ? `${mount}/${path}` : mount + path; + } + path = path ? `${node.name}/${path}` : node.name; + node = node.parent; + } + }, + hashName(parentid, name) { + var hash = 0; + + for (var i = 0; i < name.length; i++) { + hash = ((hash << 5) - hash + name.charCodeAt(i)) | 0; + } + return ((parentid + hash) >>> 0) % FS.nameTable.length; + }, + hashAddNode(node) { + var hash = FS.hashName(node.parent.id, node.name); + node.name_next = FS.nameTable[hash]; + FS.nameTable[hash] = node; + }, + hashRemoveNode(node) { + var hash = FS.hashName(node.parent.id, node.name); + if (FS.nameTable[hash] === node) { + FS.nameTable[hash] = node.name_next; + } else { + var current = FS.nameTable[hash]; + while (current) { + if (current.name_next === node) { + current.name_next = node.name_next; + break; + } + current = current.name_next; + } + } + }, + lookupNode(parent, name) { + var errCode = FS.mayLookup(parent); + if (errCode) { + throw new FS.ErrnoError(errCode); + } + var hash = FS.hashName(parent.id, name); + for (var node = FS.nameTable[hash]; node; node = node.name_next) { + var nodeName = node.name; + if (node.parent.id === parent.id && nodeName === name) { + return node; + } + } + // if we failed to find it in the cache, call into the VFS + return FS.lookup(parent, name); + }, + createNode(parent, name, mode, rdev) { + assert(typeof parent == 'object') + var node = new FS.FSNode(parent, name, mode, rdev); + + FS.hashAddNode(node); + + return node; + }, + destroyNode(node) { + FS.hashRemoveNode(node); + }, + isRoot(node) { + return node === node.parent; + }, + isMountpoint(node) { + return !!node.mounted; + }, + isFile(mode) { + return (mode & 61440) === 32768; + }, + isDir(mode) { + return (mode & 61440) === 16384; + }, + isLink(mode) { + return (mode & 61440) === 40960; + }, + isChrdev(mode) { + return (mode & 61440) === 8192; + }, + isBlkdev(mode) { + return (mode & 61440) === 24576; + }, + isFIFO(mode) { + return (mode & 61440) === 4096; + }, + isSocket(mode) { + return (mode & 49152) === 49152; + }, + flagsToPermissionString(flag) { + var perms = ['r', 'w', 'rw'][flag & 3]; + if ((flag & 512)) { + perms += 'w'; + } + return perms; + }, + nodePermissions(node, perms) { + if (FS.ignorePermissions) { + return 0; + } + // return 0 if any user, group or owner bits are set. + if (perms.includes('r') && !(node.mode & 292)) { + return 2; + } else if (perms.includes('w') && !(node.mode & 146)) { + return 2; + } else if (perms.includes('x') && !(node.mode & 73)) { + return 2; + } + return 0; + }, + mayLookup(dir) { + if (!FS.isDir(dir.mode)) return 54; + var errCode = FS.nodePermissions(dir, 'x'); + if (errCode) return errCode; + if (!dir.node_ops.lookup) return 2; + return 0; + }, + mayCreate(dir, name) { + if (!FS.isDir(dir.mode)) { + return 54; + } + try { + var node = FS.lookupNode(dir, name); + return 20; + } catch (e) { + } + return FS.nodePermissions(dir, 'wx'); + }, + mayDelete(dir, name, isdir) { + var node; + try { + node = FS.lookupNode(dir, name); + } catch (e) { + return e.errno; + } + var errCode = FS.nodePermissions(dir, 'wx'); + if (errCode) { + return errCode; + } + if (isdir) { + if (!FS.isDir(node.mode)) { + return 54; + } + if (FS.isRoot(node) || FS.getPath(node) === FS.cwd()) { + return 10; + } + } else { + if (FS.isDir(node.mode)) { + return 31; + } + } + return 0; + }, + mayOpen(node, flags) { + if (!node) { + return 44; + } + if (FS.isLink(node.mode)) { + return 32; + } else if (FS.isDir(node.mode)) { + if (FS.flagsToPermissionString(flags) !== 'r' // opening for write + || (flags & (512 | 64))) { // TODO: check for O_SEARCH? (== search for dir only) + return 31; + } + } + return FS.nodePermissions(node, FS.flagsToPermissionString(flags)); + }, + checkOpExists(op, err) { + if (!op) { + throw new FS.ErrnoError(err); + } + return op; + }, + MAX_OPEN_FDS:4096, + nextfd() { + for (var fd = 0; fd <= FS.MAX_OPEN_FDS; fd++) { + if (!FS.streams[fd]) { + return fd; + } + } + throw new FS.ErrnoError(33); + }, + getStreamChecked(fd) { + var stream = FS.getStream(fd); + if (!stream) { + throw new FS.ErrnoError(8); + } + return stream; + }, + getStream:(fd) => FS.streams[fd], + createStream(stream, fd = -1) { + assert(fd >= -1); + + // clone it, so we can return an instance of FSStream + stream = Object.assign(new FS.FSStream(), stream); + if (fd == -1) { + fd = FS.nextfd(); + } + stream.fd = fd; + FS.streams[fd] = stream; + return stream; + }, + closeStream(fd) { + FS.streams[fd] = null; + }, + dupStream(origStream, fd = -1) { + var stream = FS.createStream(origStream, fd); + stream.stream_ops?.dup?.(stream); + return stream; + }, + doSetAttr(stream, node, attr) { + var setattr = stream?.stream_ops.setattr; + var arg = setattr ? stream : node; + setattr ??= node.node_ops.setattr; + FS.checkOpExists(setattr, 63) + setattr(arg, attr); + }, + chrdev_stream_ops:{ + open(stream) { + var device = FS.getDevice(stream.node.rdev); + // override node's stream ops with the device's + stream.stream_ops = device.stream_ops; + // forward the open call + stream.stream_ops.open?.(stream); + }, + llseek() { + throw new FS.ErrnoError(70); + }, + }, + major:(dev) => ((dev) >> 8), + minor:(dev) => ((dev) & 0xff), + makedev:(ma, mi) => ((ma) << 8 | (mi)), + registerDevice(dev, ops) { + FS.devices[dev] = { stream_ops: ops }; + }, + getDevice:(dev) => FS.devices[dev], + getMounts(mount) { + var mounts = []; + var check = [mount]; + + while (check.length) { + var m = check.pop(); + + mounts.push(m); + + check.push(...m.mounts); + } + + return mounts; + }, + syncfs(populate, callback) { + if (typeof populate == 'function') { + callback = populate; + populate = false; + } + + FS.syncFSRequests++; + + if (FS.syncFSRequests > 1) { + err(`warning: ${FS.syncFSRequests} FS.syncfs operations in flight at once, probably just doing extra work`); + } + + var mounts = FS.getMounts(FS.root.mount); + var completed = 0; + + function doCallback(errCode) { + assert(FS.syncFSRequests > 0); + FS.syncFSRequests--; + return callback(errCode); + } + + function done(errCode) { + if (errCode) { + if (!done.errored) { + done.errored = true; + return doCallback(errCode); + } + return; + } + if (++completed >= mounts.length) { + doCallback(null); + } + }; + + // sync all mounts + mounts.forEach((mount) => { + if (!mount.type.syncfs) { + return done(null); + } + mount.type.syncfs(mount, populate, done); + }); + }, + mount(type, opts, mountpoint) { + if (typeof type == 'string') { + // The filesystem was not included, and instead we have an error + // message stored in the variable. + throw type; + } + var root = mountpoint === '/'; + var pseudo = !mountpoint; + var node; + + if (root && FS.root) { + throw new FS.ErrnoError(10); + } else if (!root && !pseudo) { + var lookup = FS.lookupPath(mountpoint, { follow_mount: false }); + + mountpoint = lookup.path; // use the absolute path + node = lookup.node; + + if (FS.isMountpoint(node)) { + throw new FS.ErrnoError(10); + } + + if (!FS.isDir(node.mode)) { + throw new FS.ErrnoError(54); + } + } + + var mount = { + type, + opts, + mountpoint, + mounts: [] + }; + + // create a root node for the fs + var mountRoot = type.mount(mount); + mountRoot.mount = mount; + mount.root = mountRoot; + + if (root) { + FS.root = mountRoot; + } else if (node) { + // set as a mountpoint + node.mounted = mount; + + // add the new mount to the current mount's children + if (node.mount) { + node.mount.mounts.push(mount); + } + } + + return mountRoot; + }, + unmount(mountpoint) { + var lookup = FS.lookupPath(mountpoint, { follow_mount: false }); + + if (!FS.isMountpoint(lookup.node)) { + throw new FS.ErrnoError(28); + } + + // destroy the nodes for this mount, and all its child mounts + var node = lookup.node; + var mount = node.mounted; + var mounts = FS.getMounts(mount); + + Object.keys(FS.nameTable).forEach((hash) => { + var current = FS.nameTable[hash]; + + while (current) { + var next = current.name_next; + + if (mounts.includes(current.mount)) { + FS.destroyNode(current); + } + + current = next; + } + }); + + // no longer a mountpoint + node.mounted = null; + + // remove this mount from the child mounts + var idx = node.mount.mounts.indexOf(mount); + assert(idx !== -1); + node.mount.mounts.splice(idx, 1); + }, + lookup(parent, name) { + return parent.node_ops.lookup(parent, name); + }, + mknod(path, mode, dev) { + var lookup = FS.lookupPath(path, { parent: true }); + var parent = lookup.node; + var name = PATH.basename(path); + if (!name) { + throw new FS.ErrnoError(28); + } + if (name === '.' || name === '..') { + throw new FS.ErrnoError(20); + } + var errCode = FS.mayCreate(parent, name); + if (errCode) { + throw new FS.ErrnoError(errCode); + } + if (!parent.node_ops.mknod) { + throw new FS.ErrnoError(63); + } + return parent.node_ops.mknod(parent, name, mode, dev); + }, + statfs(path) { + return FS.statfsNode(FS.lookupPath(path, {follow: true}).node); + }, + statfsStream(stream) { + // We keep a separate statfsStream function because noderawfs overrides + // it. In noderawfs, stream.node is sometimes null. Instead, we need to + // look at stream.path. + return FS.statfsNode(stream.node); + }, + statfsNode(node) { + // NOTE: None of the defaults here are true. We're just returning safe and + // sane values. Currently nodefs and rawfs replace these defaults, + // other file systems leave them alone. + var rtn = { + bsize: 4096, + frsize: 4096, + blocks: 1e6, + bfree: 5e5, + bavail: 5e5, + files: FS.nextInode, + ffree: FS.nextInode - 1, + fsid: 42, + flags: 2, + namelen: 255, + }; + + if (node.node_ops.statfs) { + Object.assign(rtn, node.node_ops.statfs(node.mount.opts.root)); + } + return rtn; + }, + create(path, mode = 0o666) { + mode &= 4095; + mode |= 32768; + return FS.mknod(path, mode, 0); + }, + mkdir(path, mode = 0o777) { + mode &= 511 | 512; + mode |= 16384; + return FS.mknod(path, mode, 0); + }, + mkdirTree(path, mode) { + var dirs = path.split('/'); + var d = ''; + for (var dir of dirs) { + if (!dir) continue; + if (d || PATH.isAbs(path)) d += '/'; + d += dir; + try { + FS.mkdir(d, mode); + } catch(e) { + if (e.errno != 20) throw e; + } + } + }, + mkdev(path, mode, dev) { + if (typeof dev == 'undefined') { + dev = mode; + mode = 0o666; + } + mode |= 8192; + return FS.mknod(path, mode, dev); + }, + symlink(oldpath, newpath) { + if (!PATH_FS.resolve(oldpath)) { + throw new FS.ErrnoError(44); + } + var lookup = FS.lookupPath(newpath, { parent: true }); + var parent = lookup.node; + if (!parent) { + throw new FS.ErrnoError(44); + } + var newname = PATH.basename(newpath); + var errCode = FS.mayCreate(parent, newname); + if (errCode) { + throw new FS.ErrnoError(errCode); + } + if (!parent.node_ops.symlink) { + throw new FS.ErrnoError(63); + } + return parent.node_ops.symlink(parent, newname, oldpath); + }, + rename(old_path, new_path) { + var old_dirname = PATH.dirname(old_path); + var new_dirname = PATH.dirname(new_path); + var old_name = PATH.basename(old_path); + var new_name = PATH.basename(new_path); + // parents must exist + var lookup, old_dir, new_dir; + + // let the errors from non existent directories percolate up + lookup = FS.lookupPath(old_path, { parent: true }); + old_dir = lookup.node; + lookup = FS.lookupPath(new_path, { parent: true }); + new_dir = lookup.node; + + if (!old_dir || !new_dir) throw new FS.ErrnoError(44); + // need to be part of the same mount + if (old_dir.mount !== new_dir.mount) { + throw new FS.ErrnoError(75); + } + // source must exist + var old_node = FS.lookupNode(old_dir, old_name); + // old path should not be an ancestor of the new path + var relative = PATH_FS.relative(old_path, new_dirname); + if (relative.charAt(0) !== '.') { + throw new FS.ErrnoError(28); + } + // new path should not be an ancestor of the old path + relative = PATH_FS.relative(new_path, old_dirname); + if (relative.charAt(0) !== '.') { + throw new FS.ErrnoError(55); + } + // see if the new path already exists + var new_node; + try { + new_node = FS.lookupNode(new_dir, new_name); + } catch (e) { + // not fatal + } + // early out if nothing needs to change + if (old_node === new_node) { + return; + } + // we'll need to delete the old entry + var isdir = FS.isDir(old_node.mode); + var errCode = FS.mayDelete(old_dir, old_name, isdir); + if (errCode) { + throw new FS.ErrnoError(errCode); + } + // need delete permissions if we'll be overwriting. + // need create permissions if new doesn't already exist. + errCode = new_node ? + FS.mayDelete(new_dir, new_name, isdir) : + FS.mayCreate(new_dir, new_name); + if (errCode) { + throw new FS.ErrnoError(errCode); + } + if (!old_dir.node_ops.rename) { + throw new FS.ErrnoError(63); + } + if (FS.isMountpoint(old_node) || (new_node && FS.isMountpoint(new_node))) { + throw new FS.ErrnoError(10); + } + // if we are going to change the parent, check write permissions + if (new_dir !== old_dir) { + errCode = FS.nodePermissions(old_dir, 'w'); + if (errCode) { + throw new FS.ErrnoError(errCode); + } + } + // remove the node from the lookup hash + FS.hashRemoveNode(old_node); + // do the underlying fs rename + try { + old_dir.node_ops.rename(old_node, new_dir, new_name); + // update old node (we do this here to avoid each backend + // needing to) + old_node.parent = new_dir; + } catch (e) { + throw e; + } finally { + // add the node back to the hash (in case node_ops.rename + // changed its name) + FS.hashAddNode(old_node); + } + }, + rmdir(path) { + var lookup = FS.lookupPath(path, { parent: true }); + var parent = lookup.node; + var name = PATH.basename(path); + var node = FS.lookupNode(parent, name); + var errCode = FS.mayDelete(parent, name, true); + if (errCode) { + throw new FS.ErrnoError(errCode); + } + if (!parent.node_ops.rmdir) { + throw new FS.ErrnoError(63); + } + if (FS.isMountpoint(node)) { + throw new FS.ErrnoError(10); + } + parent.node_ops.rmdir(parent, name); + FS.destroyNode(node); + }, + readdir(path) { + var lookup = FS.lookupPath(path, { follow: true }); + var node = lookup.node; + var readdir = FS.checkOpExists(node.node_ops.readdir, 54); + return readdir(node); + }, + unlink(path) { + var lookup = FS.lookupPath(path, { parent: true }); + var parent = lookup.node; + if (!parent) { + throw new FS.ErrnoError(44); + } + var name = PATH.basename(path); + var node = FS.lookupNode(parent, name); + var errCode = FS.mayDelete(parent, name, false); + if (errCode) { + // According to POSIX, we should map EISDIR to EPERM, but + // we instead do what Linux does (and we must, as we use + // the musl linux libc). + throw new FS.ErrnoError(errCode); + } + if (!parent.node_ops.unlink) { + throw new FS.ErrnoError(63); + } + if (FS.isMountpoint(node)) { + throw new FS.ErrnoError(10); + } + parent.node_ops.unlink(parent, name); + FS.destroyNode(node); + }, + readlink(path) { + var lookup = FS.lookupPath(path); + var link = lookup.node; + if (!link) { + throw new FS.ErrnoError(44); + } + if (!link.node_ops.readlink) { + throw new FS.ErrnoError(28); + } + return link.node_ops.readlink(link); + }, + stat(path, dontFollow) { + var lookup = FS.lookupPath(path, { follow: !dontFollow }); + var node = lookup.node; + var getattr = FS.checkOpExists(node.node_ops.getattr, 63); + return getattr(node); + }, + fstat(fd) { + var stream = FS.getStreamChecked(fd); + var node = stream.node; + var getattr = stream.stream_ops.getattr; + var arg = getattr ? stream : node; + getattr ??= node.node_ops.getattr; + FS.checkOpExists(getattr, 63) + return getattr(arg); + }, + lstat(path) { + return FS.stat(path, true); + }, + doChmod(stream, node, mode, dontFollow) { + FS.doSetAttr(stream, node, { + mode: (mode & 4095) | (node.mode & ~4095), + ctime: Date.now(), + dontFollow + }); + }, + chmod(path, mode, dontFollow) { + var node; + if (typeof path == 'string') { + var lookup = FS.lookupPath(path, { follow: !dontFollow }); + node = lookup.node; + } else { + node = path; + } + FS.doChmod(null, node, mode, dontFollow); + }, + lchmod(path, mode) { + FS.chmod(path, mode, true); + }, + fchmod(fd, mode) { + var stream = FS.getStreamChecked(fd); + FS.doChmod(stream, stream.node, mode, false); + }, + doChown(stream, node, dontFollow) { + FS.doSetAttr(stream, node, { + timestamp: Date.now(), + dontFollow + // we ignore the uid / gid for now + }); + }, + chown(path, uid, gid, dontFollow) { + var node; + if (typeof path == 'string') { + var lookup = FS.lookupPath(path, { follow: !dontFollow }); + node = lookup.node; + } else { + node = path; + } + FS.doChown(null, node, dontFollow); + }, + lchown(path, uid, gid) { + FS.chown(path, uid, gid, true); + }, + fchown(fd, uid, gid) { + var stream = FS.getStreamChecked(fd); + FS.doChown(stream, stream.node, false); + }, + doTruncate(stream, node, len) { + if (FS.isDir(node.mode)) { + throw new FS.ErrnoError(31); + } + if (!FS.isFile(node.mode)) { + throw new FS.ErrnoError(28); + } + var errCode = FS.nodePermissions(node, 'w'); + if (errCode) { + throw new FS.ErrnoError(errCode); + } + FS.doSetAttr(stream, node, { + size: len, + timestamp: Date.now() + }); + }, + truncate(path, len) { + if (len < 0) { + throw new FS.ErrnoError(28); + } + var node; + if (typeof path == 'string') { + var lookup = FS.lookupPath(path, { follow: true }); + node = lookup.node; + } else { + node = path; + } + FS.doTruncate(null, node, len); + }, + ftruncate(fd, len) { + var stream = FS.getStreamChecked(fd); + if (len < 0 || (stream.flags & 2097155) === 0) { + throw new FS.ErrnoError(28); + } + FS.doTruncate(stream, stream.node, len); + }, + utime(path, atime, mtime) { + var lookup = FS.lookupPath(path, { follow: true }); + var node = lookup.node; + var setattr = FS.checkOpExists(node.node_ops.setattr, 63); + setattr(node, { + atime: atime, + mtime: mtime + }); + }, + open(path, flags, mode = 0o666) { + if (path === "") { + throw new FS.ErrnoError(44); + } + flags = typeof flags == 'string' ? FS_modeStringToFlags(flags) : flags; + if ((flags & 64)) { + mode = (mode & 4095) | 32768; + } else { + mode = 0; + } + var node; + var isDirPath; + if (typeof path == 'object') { + node = path; + } else { + isDirPath = path.endsWith("/"); + // noent_okay makes it so that if the final component of the path + // doesn't exist, lookupPath returns `node: undefined`. `path` will be + // updated to point to the target of all symlinks. + var lookup = FS.lookupPath(path, { + follow: !(flags & 131072), + noent_okay: true + }); + node = lookup.node; + path = lookup.path; + } + // perhaps we need to create the node + var created = false; + if ((flags & 64)) { + if (node) { + // if O_CREAT and O_EXCL are set, error out if the node already exists + if ((flags & 128)) { + throw new FS.ErrnoError(20); + } + } else if (isDirPath) { + throw new FS.ErrnoError(31); + } else { + // node doesn't exist, try to create it + // Ignore the permission bits here to ensure we can `open` this new + // file below. We use chmod below the apply the permissions once the + // file is open. + node = FS.mknod(path, mode | 0o777, 0); + created = true; + } + } + if (!node) { + throw new FS.ErrnoError(44); + } + // can't truncate a device + if (FS.isChrdev(node.mode)) { + flags &= ~512; + } + // if asked only for a directory, then this must be one + if ((flags & 65536) && !FS.isDir(node.mode)) { + throw new FS.ErrnoError(54); + } + // check permissions, if this is not a file we just created now (it is ok to + // create and write to a file with read-only permissions; it is read-only + // for later use) + if (!created) { + var errCode = FS.mayOpen(node, flags); + if (errCode) { + throw new FS.ErrnoError(errCode); + } + } + // do truncation if necessary + if ((flags & 512) && !created) { + FS.truncate(node, 0); + } + // we've already handled these, don't pass down to the underlying vfs + flags &= ~(128 | 512 | 131072); + + // register the stream with the filesystem + var stream = FS.createStream({ + node, + path: FS.getPath(node), // we want the absolute path to the node + flags, + seekable: true, + position: 0, + stream_ops: node.stream_ops, + // used by the file family libc calls (fopen, fwrite, ferror, etc.) + ungotten: [], + error: false + }); + // call the new stream's open function + if (stream.stream_ops.open) { + stream.stream_ops.open(stream); + } + if (created) { + FS.chmod(node, mode & 0o777); + } + if (Module['logReadFiles'] && !(flags & 1)) { + if (!(path in FS.readFiles)) { + FS.readFiles[path] = 1; + } + } + return stream; + }, + close(stream) { + if (FS.isClosed(stream)) { + throw new FS.ErrnoError(8); + } + if (stream.getdents) stream.getdents = null; // free readdir state + try { + if (stream.stream_ops.close) { + stream.stream_ops.close(stream); + } + } catch (e) { + throw e; + } finally { + FS.closeStream(stream.fd); + } + stream.fd = null; + }, + isClosed(stream) { + return stream.fd === null; + }, + llseek(stream, offset, whence) { + if (FS.isClosed(stream)) { + throw new FS.ErrnoError(8); + } + if (!stream.seekable || !stream.stream_ops.llseek) { + throw new FS.ErrnoError(70); + } + if (whence != 0 && whence != 1 && whence != 2) { + throw new FS.ErrnoError(28); + } + stream.position = stream.stream_ops.llseek(stream, offset, whence); + stream.ungotten = []; + return stream.position; + }, + read(stream, buffer, offset, length, position) { + assert(offset >= 0); + if (length < 0 || position < 0) { + throw new FS.ErrnoError(28); + } + if (FS.isClosed(stream)) { + throw new FS.ErrnoError(8); + } + if ((stream.flags & 2097155) === 1) { + throw new FS.ErrnoError(8); + } + if (FS.isDir(stream.node.mode)) { + throw new FS.ErrnoError(31); + } + if (!stream.stream_ops.read) { + throw new FS.ErrnoError(28); + } + var seeking = typeof position != 'undefined'; + if (!seeking) { + position = stream.position; + } else if (!stream.seekable) { + throw new FS.ErrnoError(70); + } + var bytesRead = stream.stream_ops.read(stream, buffer, offset, length, position); + if (!seeking) stream.position += bytesRead; + return bytesRead; + }, + write(stream, buffer, offset, length, position, canOwn) { + assert(offset >= 0); + if (length < 0 || position < 0) { + throw new FS.ErrnoError(28); + } + if (FS.isClosed(stream)) { + throw new FS.ErrnoError(8); + } + if ((stream.flags & 2097155) === 0) { + throw new FS.ErrnoError(8); + } + if (FS.isDir(stream.node.mode)) { + throw new FS.ErrnoError(31); + } + if (!stream.stream_ops.write) { + throw new FS.ErrnoError(28); + } + if (stream.seekable && stream.flags & 1024) { + // seek to the end before writing in append mode + FS.llseek(stream, 0, 2); + } + var seeking = typeof position != 'undefined'; + if (!seeking) { + position = stream.position; + } else if (!stream.seekable) { + throw new FS.ErrnoError(70); + } + var bytesWritten = stream.stream_ops.write(stream, buffer, offset, length, position, canOwn); + if (!seeking) stream.position += bytesWritten; + return bytesWritten; + }, + mmap(stream, length, position, prot, flags) { + // User requests writing to file (prot & PROT_WRITE != 0). + // Checking if we have permissions to write to the file unless + // MAP_PRIVATE flag is set. According to POSIX spec it is possible + // to write to file opened in read-only mode with MAP_PRIVATE flag, + // as all modifications will be visible only in the memory of + // the current process. + if ((prot & 2) !== 0 + && (flags & 2) === 0 + && (stream.flags & 2097155) !== 2) { + throw new FS.ErrnoError(2); + } + if ((stream.flags & 2097155) === 1) { + throw new FS.ErrnoError(2); + } + if (!stream.stream_ops.mmap) { + throw new FS.ErrnoError(43); + } + if (!length) { + throw new FS.ErrnoError(28); + } + return stream.stream_ops.mmap(stream, length, position, prot, flags); + }, + msync(stream, buffer, offset, length, mmapFlags) { + assert(offset >= 0); + if (!stream.stream_ops.msync) { + return 0; + } + return stream.stream_ops.msync(stream, buffer, offset, length, mmapFlags); + }, + ioctl(stream, cmd, arg) { + if (!stream.stream_ops.ioctl) { + throw new FS.ErrnoError(59); + } + return stream.stream_ops.ioctl(stream, cmd, arg); + }, + readFile(path, opts = {}) { + opts.flags = opts.flags || 0; + opts.encoding = opts.encoding || 'binary'; + if (opts.encoding !== 'utf8' && opts.encoding !== 'binary') { + throw new Error(`Invalid encoding type "${opts.encoding}"`); + } + var ret; + var stream = FS.open(path, opts.flags); + var stat = FS.stat(path); + var length = stat.size; + var buf = new Uint8Array(length); + FS.read(stream, buf, 0, length, 0); + if (opts.encoding === 'utf8') { + ret = UTF8ArrayToString(buf); + } else if (opts.encoding === 'binary') { + ret = buf; + } + FS.close(stream); + return ret; + }, + writeFile(path, data, opts = {}) { + opts.flags = opts.flags || 577; + var stream = FS.open(path, opts.flags, opts.mode); + if (typeof data == 'string') { + var buf = new Uint8Array(lengthBytesUTF8(data)+1); + var actualNumBytes = stringToUTF8Array(data, buf, 0, buf.length); + FS.write(stream, buf, 0, actualNumBytes, undefined, opts.canOwn); + } else if (ArrayBuffer.isView(data)) { + FS.write(stream, data, 0, data.byteLength, undefined, opts.canOwn); + } else { + throw new Error('Unsupported data type'); + } + FS.close(stream); + }, + cwd:() => FS.currentPath, + chdir(path) { + var lookup = FS.lookupPath(path, { follow: true }); + if (lookup.node === null) { + throw new FS.ErrnoError(44); + } + if (!FS.isDir(lookup.node.mode)) { + throw new FS.ErrnoError(54); + } + var errCode = FS.nodePermissions(lookup.node, 'x'); + if (errCode) { + throw new FS.ErrnoError(errCode); + } + FS.currentPath = lookup.path; + }, + createDefaultDirectories() { + FS.mkdir('/tmp'); + FS.mkdir('/home'); + FS.mkdir('/home/web_user'); + }, + createDefaultDevices() { + // create /dev + FS.mkdir('/dev'); + // setup /dev/null + FS.registerDevice(FS.makedev(1, 3), { + read: () => 0, + write: (stream, buffer, offset, length, pos) => length, + llseek: () => 0, + }); + FS.mkdev('/dev/null', FS.makedev(1, 3)); + // setup /dev/tty and /dev/tty1 + // stderr needs to print output using err() rather than out() + // so we register a second tty just for it. + TTY.register(FS.makedev(5, 0), TTY.default_tty_ops); + TTY.register(FS.makedev(6, 0), TTY.default_tty1_ops); + FS.mkdev('/dev/tty', FS.makedev(5, 0)); + FS.mkdev('/dev/tty1', FS.makedev(6, 0)); + // setup /dev/[u]random + // use a buffer to avoid overhead of individual crypto calls per byte + var randomBuffer = new Uint8Array(1024), randomLeft = 0; + var randomByte = () => { + if (randomLeft === 0) { + randomFill(randomBuffer); + randomLeft = randomBuffer.byteLength; + } + return randomBuffer[--randomLeft]; + }; + FS.createDevice('/dev', 'random', randomByte); + FS.createDevice('/dev', 'urandom', randomByte); + // we're not going to emulate the actual shm device, + // just create the tmp dirs that reside in it commonly + FS.mkdir('/dev/shm'); + FS.mkdir('/dev/shm/tmp'); + }, + createSpecialDirectories() { + // create /proc/self/fd which allows /proc/self/fd/6 => readlink gives the + // name of the stream for fd 6 (see test_unistd_ttyname) + FS.mkdir('/proc'); + var proc_self = FS.mkdir('/proc/self'); + FS.mkdir('/proc/self/fd'); + FS.mount({ + mount() { + var node = FS.createNode(proc_self, 'fd', 16895, 73); + node.stream_ops = { + llseek: MEMFS.stream_ops.llseek, + }; + node.node_ops = { + lookup(parent, name) { + var fd = +name; + var stream = FS.getStreamChecked(fd); + var ret = { + parent: null, + mount: { mountpoint: 'fake' }, + node_ops: { readlink: () => stream.path }, + id: fd + 1, + }; + ret.parent = ret; // make it look like a simple root node + return ret; + }, + readdir() { + return Array.from(FS.streams.entries()) + .filter(([k, v]) => v) + .map(([k, v]) => k.toString()); + } + }; + return node; + } + }, {}, '/proc/self/fd'); + }, + createStandardStreams(input, output, error) { + // TODO deprecate the old functionality of a single + // input / output callback and that utilizes FS.createDevice + // and instead require a unique set of stream ops + + // by default, we symlink the standard streams to the + // default tty devices. however, if the standard streams + // have been overwritten we create a unique device for + // them instead. + if (input) { + FS.createDevice('/dev', 'stdin', input); + } else { + FS.symlink('/dev/tty', '/dev/stdin'); + } + if (output) { + FS.createDevice('/dev', 'stdout', null, output); + } else { + FS.symlink('/dev/tty', '/dev/stdout'); + } + if (error) { + FS.createDevice('/dev', 'stderr', null, error); + } else { + FS.symlink('/dev/tty1', '/dev/stderr'); + } + + // open default streams for the stdin, stdout and stderr devices + var stdin = FS.open('/dev/stdin', 0); + var stdout = FS.open('/dev/stdout', 1); + var stderr = FS.open('/dev/stderr', 1); + assert(stdin.fd === 0, `invalid handle for stdin (${stdin.fd})`); + assert(stdout.fd === 1, `invalid handle for stdout (${stdout.fd})`); + assert(stderr.fd === 2, `invalid handle for stderr (${stderr.fd})`); + }, + staticInit() { + FS.nameTable = new Array(4096); + + FS.mount(MEMFS, {}, '/'); + + FS.createDefaultDirectories(); + FS.createDefaultDevices(); + FS.createSpecialDirectories(); + + FS.filesystems = { + 'MEMFS': MEMFS, + }; + }, + init(input, output, error) { + assert(!FS.initialized, 'FS.init was previously called. If you want to initialize later with custom parameters, remove any earlier calls (note that one is automatically added to the generated code)'); + FS.initialized = true; + + // Allow Module.stdin etc. to provide defaults, if none explicitly passed to us here + input ??= Module['stdin']; + output ??= Module['stdout']; + error ??= Module['stderr']; + + FS.createStandardStreams(input, output, error); + }, + quit() { + FS.initialized = false; + // force-flush all streams, so we get musl std streams printed out + _fflush(0); + // close all of our streams + for (var stream of FS.streams) { + if (stream) { + FS.close(stream); + } + } + }, + findObject(path, dontResolveLastLink) { + var ret = FS.analyzePath(path, dontResolveLastLink); + if (!ret.exists) { + return null; + } + return ret.object; + }, + analyzePath(path, dontResolveLastLink) { + // operate from within the context of the symlink's target + try { + var lookup = FS.lookupPath(path, { follow: !dontResolveLastLink }); + path = lookup.path; + } catch (e) { + } + var ret = { + isRoot: false, exists: false, error: 0, name: null, path: null, object: null, + parentExists: false, parentPath: null, parentObject: null + }; + try { + var lookup = FS.lookupPath(path, { parent: true }); + ret.parentExists = true; + ret.parentPath = lookup.path; + ret.parentObject = lookup.node; + ret.name = PATH.basename(path); + lookup = FS.lookupPath(path, { follow: !dontResolveLastLink }); + ret.exists = true; + ret.path = lookup.path; + ret.object = lookup.node; + ret.name = lookup.node.name; + ret.isRoot = lookup.path === '/'; + } catch (e) { + ret.error = e.errno; + }; + return ret; + }, + createPath(parent, path, canRead, canWrite) { + parent = typeof parent == 'string' ? parent : FS.getPath(parent); + var parts = path.split('/').reverse(); + while (parts.length) { + var part = parts.pop(); + if (!part) continue; + var current = PATH.join2(parent, part); + try { + FS.mkdir(current); + } catch (e) { + if (e.errno != 20) throw e; + } + parent = current; + } + return current; + }, + createFile(parent, name, properties, canRead, canWrite) { + var path = PATH.join2(typeof parent == 'string' ? parent : FS.getPath(parent), name); + var mode = FS_getMode(canRead, canWrite); + return FS.create(path, mode); + }, + createDataFile(parent, name, data, canRead, canWrite, canOwn) { + var path = name; + if (parent) { + parent = typeof parent == 'string' ? parent : FS.getPath(parent); + path = name ? PATH.join2(parent, name) : parent; + } + var mode = FS_getMode(canRead, canWrite); + var node = FS.create(path, mode); + if (data) { + if (typeof data == 'string') { + var arr = new Array(data.length); + for (var i = 0, len = data.length; i < len; ++i) arr[i] = data.charCodeAt(i); + data = arr; + } + // make sure we can write to the file + FS.chmod(node, mode | 146); + var stream = FS.open(node, 577); + FS.write(stream, data, 0, data.length, 0, canOwn); + FS.close(stream); + FS.chmod(node, mode); + } + }, + createDevice(parent, name, input, output) { + var path = PATH.join2(typeof parent == 'string' ? parent : FS.getPath(parent), name); + var mode = FS_getMode(!!input, !!output); + FS.createDevice.major ??= 64; + var dev = FS.makedev(FS.createDevice.major++, 0); + // Create a fake device that a set of stream ops to emulate + // the old behavior. + FS.registerDevice(dev, { + open(stream) { + stream.seekable = false; + }, + close(stream) { + // flush any pending line data + if (output?.buffer?.length) { + output(10); + } + }, + read(stream, buffer, offset, length, pos /* ignored */) { + var bytesRead = 0; + for (var i = 0; i < length; i++) { + var result; + try { + result = input(); + } catch (e) { + throw new FS.ErrnoError(29); + } + if (result === undefined && bytesRead === 0) { + throw new FS.ErrnoError(6); + } + if (result === null || result === undefined) break; + bytesRead++; + buffer[offset+i] = result; + } + if (bytesRead) { + stream.node.atime = Date.now(); + } + return bytesRead; + }, + write(stream, buffer, offset, length, pos) { + for (var i = 0; i < length; i++) { + try { + output(buffer[offset+i]); + } catch (e) { + throw new FS.ErrnoError(29); + } + } + if (length) { + stream.node.mtime = stream.node.ctime = Date.now(); + } + return i; + } + }); + return FS.mkdev(path, mode, dev); + }, + forceLoadFile(obj) { + if (obj.isDevice || obj.isFolder || obj.link || obj.contents) return true; + if (typeof XMLHttpRequest != 'undefined') { + throw new Error("Lazy loading should have been performed (contents set) in createLazyFile, but it was not. Lazy loading only works in web workers. Use --embed-file or --preload-file in emcc on the main thread."); + } else { // Command-line. + try { + obj.contents = readBinary(obj.url); + obj.usedBytes = obj.contents.length; + } catch (e) { + throw new FS.ErrnoError(29); + } + } + }, + createLazyFile(parent, name, url, canRead, canWrite) { + // Lazy chunked Uint8Array (implements get and length from Uint8Array). + // Actual getting is abstracted away for eventual reuse. + class LazyUint8Array { + lengthKnown = false; + chunks = []; // Loaded chunks. Index is the chunk number + get(idx) { + if (idx > this.length-1 || idx < 0) { + return undefined; + } + var chunkOffset = idx % this.chunkSize; + var chunkNum = (idx / this.chunkSize)|0; + return this.getter(chunkNum)[chunkOffset]; + } + setDataGetter(getter) { + this.getter = getter; + } + cacheLength() { + // Find length + var xhr = new XMLHttpRequest(); + xhr.open('HEAD', url, false); + xhr.send(null); + if (!(xhr.status >= 200 && xhr.status < 300 || xhr.status === 304)) throw new Error("Couldn't load " + url + ". Status: " + xhr.status); + var datalength = Number(xhr.getResponseHeader("Content-length")); + var header; + var hasByteServing = (header = xhr.getResponseHeader("Accept-Ranges")) && header === "bytes"; + var usesGzip = (header = xhr.getResponseHeader("Content-Encoding")) && header === "gzip"; + + var chunkSize = 1024*1024; // Chunk size in bytes + + if (!hasByteServing) chunkSize = datalength; + + // Function to get a range from the remote URL. + var doXHR = (from, to) => { + if (from > to) throw new Error("invalid range (" + from + ", " + to + ") or no bytes requested!"); + if (to > datalength-1) throw new Error("only " + datalength + " bytes available! programmer error!"); + + // TODO: Use mozResponseArrayBuffer, responseStream, etc. if available. + var xhr = new XMLHttpRequest(); + xhr.open('GET', url, false); + if (datalength !== chunkSize) xhr.setRequestHeader("Range", "bytes=" + from + "-" + to); + + // Some hints to the browser that we want binary data. + xhr.responseType = 'arraybuffer'; + if (xhr.overrideMimeType) { + xhr.overrideMimeType('text/plain; charset=x-user-defined'); + } + + xhr.send(null); + if (!(xhr.status >= 200 && xhr.status < 300 || xhr.status === 304)) throw new Error("Couldn't load " + url + ". Status: " + xhr.status); + if (xhr.response !== undefined) { + return new Uint8Array(/** @type{Array} */(xhr.response || [])); + } + return intArrayFromString(xhr.responseText || '', true); + }; + var lazyArray = this; + lazyArray.setDataGetter((chunkNum) => { + var start = chunkNum * chunkSize; + var end = (chunkNum+1) * chunkSize - 1; // including this byte + end = Math.min(end, datalength-1); // if datalength-1 is selected, this is the last block + if (typeof lazyArray.chunks[chunkNum] == 'undefined') { + lazyArray.chunks[chunkNum] = doXHR(start, end); + } + if (typeof lazyArray.chunks[chunkNum] == 'undefined') throw new Error('doXHR failed!'); + return lazyArray.chunks[chunkNum]; + }); + + if (usesGzip || !datalength) { + // if the server uses gzip or doesn't supply the length, we have to download the whole file to get the (uncompressed) length + chunkSize = datalength = 1; // this will force getter(0)/doXHR do download the whole file + datalength = this.getter(0).length; + chunkSize = datalength; + out("LazyFiles on gzip forces download of the whole file when length is accessed"); + } + + this._length = datalength; + this._chunkSize = chunkSize; + this.lengthKnown = true; + } + get length() { + if (!this.lengthKnown) { + this.cacheLength(); + } + return this._length; + } + get chunkSize() { + if (!this.lengthKnown) { + this.cacheLength(); + } + return this._chunkSize; + } + } + + if (typeof XMLHttpRequest != 'undefined') { + if (!ENVIRONMENT_IS_WORKER) throw 'Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc'; + var lazyArray = new LazyUint8Array(); + var properties = { isDevice: false, contents: lazyArray }; + } else { + var properties = { isDevice: false, url: url }; + } + + var node = FS.createFile(parent, name, properties, canRead, canWrite); + // This is a total hack, but I want to get this lazy file code out of the + // core of MEMFS. If we want to keep this lazy file concept I feel it should + // be its own thin LAZYFS proxying calls to MEMFS. + if (properties.contents) { + node.contents = properties.contents; + } else if (properties.url) { + node.contents = null; + node.url = properties.url; + } + // Add a function that defers querying the file size until it is asked the first time. + Object.defineProperties(node, { + usedBytes: { + get: function() { return this.contents.length; } + } + }); + // override each stream op with one that tries to force load the lazy file first + var stream_ops = {}; + var keys = Object.keys(node.stream_ops); + keys.forEach((key) => { + var fn = node.stream_ops[key]; + stream_ops[key] = (...args) => { + FS.forceLoadFile(node); + return fn(...args); + }; + }); + function writeChunks(stream, buffer, offset, length, position) { + var contents = stream.node.contents; + if (position >= contents.length) + return 0; + var size = Math.min(contents.length - position, length); + assert(size >= 0); + if (contents.slice) { // normal array + for (var i = 0; i < size; i++) { + buffer[offset + i] = contents[position + i]; + } + } else { + for (var i = 0; i < size; i++) { // LazyUint8Array from sync binary XHR + buffer[offset + i] = contents.get(position + i); + } + } + return size; + } + // use a custom read function + stream_ops.read = (stream, buffer, offset, length, position) => { + FS.forceLoadFile(node); + return writeChunks(stream, buffer, offset, length, position) + }; + // use a custom mmap function + stream_ops.mmap = (stream, length, position, prot, flags) => { + FS.forceLoadFile(node); + var ptr = mmapAlloc(length); + if (!ptr) { + throw new FS.ErrnoError(48); + } + writeChunks(stream, HEAP8, ptr, length, position); + return { ptr, allocated: true }; + }; + node.stream_ops = stream_ops; + return node; + }, + absolutePath() { + abort('FS.absolutePath has been removed; use PATH_FS.resolve instead'); + }, + createFolder() { + abort('FS.createFolder has been removed; use FS.mkdir instead'); + }, + createLink() { + abort('FS.createLink has been removed; use FS.symlink instead'); + }, + joinPath() { + abort('FS.joinPath has been removed; use PATH.join instead'); + }, + mmapAlloc() { + abort('FS.mmapAlloc has been replaced by the top level function mmapAlloc'); + }, + standardizePath() { + abort('FS.standardizePath has been removed; use PATH.normalize instead'); + }, + }; + + var SYSCALLS = { + DEFAULT_POLLMASK:5, + calculateAt(dirfd, path, allowEmpty) { + if (PATH.isAbs(path)) { + return path; + } + // relative path + var dir; + if (dirfd === -100) { + dir = FS.cwd(); + } else { + var dirstream = SYSCALLS.getStreamFromFD(dirfd); + dir = dirstream.path; + } + if (path.length == 0) { + if (!allowEmpty) { + throw new FS.ErrnoError(44);; + } + return dir; + } + return dir + '/' + path; + }, + writeStat(buf, stat) { + HEAP32[((buf)>>2)] = stat.dev; + HEAP32[(((buf)+(4))>>2)] = stat.mode; + HEAPU32[(((buf)+(8))>>2)] = stat.nlink; + HEAP32[(((buf)+(12))>>2)] = stat.uid; + HEAP32[(((buf)+(16))>>2)] = stat.gid; + HEAP32[(((buf)+(20))>>2)] = stat.rdev; + HEAP64[(((buf)+(24))>>3)] = BigInt(stat.size); + HEAP32[(((buf)+(32))>>2)] = 4096; + HEAP32[(((buf)+(36))>>2)] = stat.blocks; + var atime = stat.atime.getTime(); + var mtime = stat.mtime.getTime(); + var ctime = stat.ctime.getTime(); + HEAP64[(((buf)+(40))>>3)] = BigInt(Math.floor(atime / 1000)); + HEAPU32[(((buf)+(48))>>2)] = (atime % 1000) * 1000 * 1000; + HEAP64[(((buf)+(56))>>3)] = BigInt(Math.floor(mtime / 1000)); + HEAPU32[(((buf)+(64))>>2)] = (mtime % 1000) * 1000 * 1000; + HEAP64[(((buf)+(72))>>3)] = BigInt(Math.floor(ctime / 1000)); + HEAPU32[(((buf)+(80))>>2)] = (ctime % 1000) * 1000 * 1000; + HEAP64[(((buf)+(88))>>3)] = BigInt(stat.ino); + return 0; + }, + writeStatFs(buf, stats) { + HEAP32[(((buf)+(4))>>2)] = stats.bsize; + HEAP32[(((buf)+(40))>>2)] = stats.bsize; + HEAP32[(((buf)+(8))>>2)] = stats.blocks; + HEAP32[(((buf)+(12))>>2)] = stats.bfree; + HEAP32[(((buf)+(16))>>2)] = stats.bavail; + HEAP32[(((buf)+(20))>>2)] = stats.files; + HEAP32[(((buf)+(24))>>2)] = stats.ffree; + HEAP32[(((buf)+(28))>>2)] = stats.fsid; + HEAP32[(((buf)+(44))>>2)] = stats.flags; // ST_NOSUID + HEAP32[(((buf)+(36))>>2)] = stats.namelen; + }, + doMsync(addr, stream, len, flags, offset) { + if (!FS.isFile(stream.node.mode)) { + throw new FS.ErrnoError(43); + } + if (flags & 2) { + // MAP_PRIVATE calls need not to be synced back to underlying fs + return 0; + } + var buffer = HEAPU8.slice(addr, addr + len); + FS.msync(stream, buffer, offset, len, flags); + }, + getStreamFromFD(fd) { + var stream = FS.getStreamChecked(fd); + return stream; + }, + varargs:undefined, + getStr(ptr) { + var ret = UTF8ToString(ptr); + return ret; + }, + }; + function ___syscall_chmod(path, mode) { + try { + + path = SYSCALLS.getStr(path); + FS.chmod(path, mode); + return 0; + } catch (e) { + if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + return -e.errno; + } + } + + function ___syscall_dup(fd) { + try { + + var old = SYSCALLS.getStreamFromFD(fd); + return FS.dupStream(old).fd; + } catch (e) { + if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + return -e.errno; + } + } + + function ___syscall_fchmod(fd, mode) { + try { + + FS.fchmod(fd, mode); + return 0; + } catch (e) { + if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + return -e.errno; + } + } + + /** @suppress {duplicate } */ + var syscallGetVarargI = () => { + assert(SYSCALLS.varargs != undefined); + // the `+` prepended here is necessary to convince the JSCompiler that varargs is indeed a number. + var ret = HEAP32[((+SYSCALLS.varargs)>>2)]; + SYSCALLS.varargs += 4; + return ret; + }; + var syscallGetVarargP = syscallGetVarargI; + + + function ___syscall_fcntl64(fd, cmd, varargs) { + SYSCALLS.varargs = varargs; + try { + + var stream = SYSCALLS.getStreamFromFD(fd); + switch (cmd) { + case 0: { + var arg = syscallGetVarargI(); + if (arg < 0) { + return -28; + } + while (FS.streams[arg]) { + arg++; + } + var newStream; + newStream = FS.dupStream(stream, arg); + return newStream.fd; + } + case 1: + case 2: + return 0; // FD_CLOEXEC makes no sense for a single process. + case 3: + return stream.flags; + case 4: { + var arg = syscallGetVarargI(); + stream.flags |= arg; + return 0; + } + case 12: { + var arg = syscallGetVarargP(); + var offset = 0; + // We're always unlocked. + HEAP16[(((arg)+(offset))>>1)] = 2; + return 0; + } + case 13: + case 14: + // Pretend that the locking is successful. These are process-level locks, + // and Emscripten programs are a single process. If we supported linking a + // filesystem between programs, we'd need to do more here. + // See https://github.com/emscripten-core/emscripten/issues/23697 + return 0; + } + return -28; + } catch (e) { + if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + return -e.errno; + } + } + + function ___syscall_fstat64(fd, buf) { + try { + + return SYSCALLS.writeStat(buf, FS.fstat(fd)); + } catch (e) { + if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + return -e.errno; + } + } + + + function ___syscall_ioctl(fd, op, varargs) { + SYSCALLS.varargs = varargs; + try { + + var stream = SYSCALLS.getStreamFromFD(fd); + switch (op) { + case 21509: { + if (!stream.tty) return -59; + return 0; + } + case 21505: { + if (!stream.tty) return -59; + if (stream.tty.ops.ioctl_tcgets) { + var termios = stream.tty.ops.ioctl_tcgets(stream); + var argp = syscallGetVarargP(); + HEAP32[((argp)>>2)] = termios.c_iflag || 0; + HEAP32[(((argp)+(4))>>2)] = termios.c_oflag || 0; + HEAP32[(((argp)+(8))>>2)] = termios.c_cflag || 0; + HEAP32[(((argp)+(12))>>2)] = termios.c_lflag || 0; + for (var i = 0; i < 32; i++) { + HEAP8[(argp + i)+(17)] = termios.c_cc[i] || 0; + } + return 0; + } + return 0; + } + case 21510: + case 21511: + case 21512: { + if (!stream.tty) return -59; + return 0; // no-op, not actually adjusting terminal settings + } + case 21506: + case 21507: + case 21508: { + if (!stream.tty) return -59; + if (stream.tty.ops.ioctl_tcsets) { + var argp = syscallGetVarargP(); + var c_iflag = HEAP32[((argp)>>2)]; + var c_oflag = HEAP32[(((argp)+(4))>>2)]; + var c_cflag = HEAP32[(((argp)+(8))>>2)]; + var c_lflag = HEAP32[(((argp)+(12))>>2)]; + var c_cc = [] + for (var i = 0; i < 32; i++) { + c_cc.push(HEAP8[(argp + i)+(17)]); + } + return stream.tty.ops.ioctl_tcsets(stream.tty, op, { c_iflag, c_oflag, c_cflag, c_lflag, c_cc }); + } + return 0; // no-op, not actually adjusting terminal settings + } + case 21519: { + if (!stream.tty) return -59; + var argp = syscallGetVarargP(); + HEAP32[((argp)>>2)] = 0; + return 0; + } + case 21520: { + if (!stream.tty) return -59; + return -28; // not supported + } + case 21531: { + var argp = syscallGetVarargP(); + return FS.ioctl(stream, op, argp); + } + case 21523: { + // TODO: in theory we should write to the winsize struct that gets + // passed in, but for now musl doesn't read anything on it + if (!stream.tty) return -59; + if (stream.tty.ops.ioctl_tiocgwinsz) { + var winsize = stream.tty.ops.ioctl_tiocgwinsz(stream.tty); + var argp = syscallGetVarargP(); + HEAP16[((argp)>>1)] = winsize[0]; + HEAP16[(((argp)+(2))>>1)] = winsize[1]; + } + return 0; + } + case 21524: { + // TODO: technically, this ioctl call should change the window size. + // but, since emscripten doesn't have any concept of a terminal window + // yet, we'll just silently throw it away as we do TIOCGWINSZ + if (!stream.tty) return -59; + return 0; + } + case 21515: { + if (!stream.tty) return -59; + return 0; + } + default: return -28; // not supported + } + } catch (e) { + if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + return -e.errno; + } + } + + function ___syscall_lstat64(path, buf) { + try { + + path = SYSCALLS.getStr(path); + return SYSCALLS.writeStat(buf, FS.lstat(path)); + } catch (e) { + if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + return -e.errno; + } + } + + function ___syscall_newfstatat(dirfd, path, buf, flags) { + try { + + path = SYSCALLS.getStr(path); + var nofollow = flags & 256; + var allowEmpty = flags & 4096; + flags = flags & (~6400); + assert(!flags, `unknown flags in __syscall_newfstatat: ${flags}`); + path = SYSCALLS.calculateAt(dirfd, path, allowEmpty); + return SYSCALLS.writeStat(buf, nofollow ? FS.lstat(path) : FS.stat(path)); + } catch (e) { + if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + return -e.errno; + } + } + + + function ___syscall_openat(dirfd, path, flags, varargs) { + SYSCALLS.varargs = varargs; + try { + + path = SYSCALLS.getStr(path); + path = SYSCALLS.calculateAt(dirfd, path); + var mode = varargs ? syscallGetVarargI() : 0; + return FS.open(path, flags, mode).fd; + } catch (e) { + if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + return -e.errno; + } + } + + function ___syscall_renameat(olddirfd, oldpath, newdirfd, newpath) { + try { + + oldpath = SYSCALLS.getStr(oldpath); + newpath = SYSCALLS.getStr(newpath); + oldpath = SYSCALLS.calculateAt(olddirfd, oldpath); + newpath = SYSCALLS.calculateAt(newdirfd, newpath); + FS.rename(oldpath, newpath); + return 0; + } catch (e) { + if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + return -e.errno; + } + } + + function ___syscall_rmdir(path) { + try { + + path = SYSCALLS.getStr(path); + FS.rmdir(path); + return 0; + } catch (e) { + if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + return -e.errno; + } + } + + function ___syscall_stat64(path, buf) { + try { + + path = SYSCALLS.getStr(path); + return SYSCALLS.writeStat(buf, FS.stat(path)); + } catch (e) { + if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + return -e.errno; + } + } + + function ___syscall_unlinkat(dirfd, path, flags) { + try { + + path = SYSCALLS.getStr(path); + path = SYSCALLS.calculateAt(dirfd, path); + if (flags === 0) { + FS.unlink(path); + } else if (flags === 512) { + FS.rmdir(path); + } else { + abort('Invalid flags passed to unlinkat'); + } + return 0; + } catch (e) { + if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + return -e.errno; + } + } + + var __abort_js = () => + abort('native code called abort()'); + + var isLeapYear = (year) => year%4 === 0 && (year%100 !== 0 || year%400 === 0); + + var MONTH_DAYS_LEAP_CUMULATIVE = [0,31,60,91,121,152,182,213,244,274,305,335]; + + var MONTH_DAYS_REGULAR_CUMULATIVE = [0,31,59,90,120,151,181,212,243,273,304,334]; + var ydayFromDate = (date) => { + var leap = isLeapYear(date.getFullYear()); + var monthDaysCumulative = (leap ? MONTH_DAYS_LEAP_CUMULATIVE : MONTH_DAYS_REGULAR_CUMULATIVE); + var yday = monthDaysCumulative[date.getMonth()] + date.getDate() - 1; // -1 since it's days since Jan 1 + + return yday; + }; + + var INT53_MAX = 9007199254740992; + + var INT53_MIN = -9007199254740992; + var bigintToI53Checked = (num) => (num < INT53_MIN || num > INT53_MAX) ? NaN : Number(num); + function __localtime_js(time, tmPtr) { + time = bigintToI53Checked(time); + + + var date = new Date(time*1000); + HEAP32[((tmPtr)>>2)] = date.getSeconds(); + HEAP32[(((tmPtr)+(4))>>2)] = date.getMinutes(); + HEAP32[(((tmPtr)+(8))>>2)] = date.getHours(); + HEAP32[(((tmPtr)+(12))>>2)] = date.getDate(); + HEAP32[(((tmPtr)+(16))>>2)] = date.getMonth(); + HEAP32[(((tmPtr)+(20))>>2)] = date.getFullYear()-1900; + HEAP32[(((tmPtr)+(24))>>2)] = date.getDay(); + + var yday = ydayFromDate(date)|0; + HEAP32[(((tmPtr)+(28))>>2)] = yday; + HEAP32[(((tmPtr)+(36))>>2)] = -(date.getTimezoneOffset() * 60); + + // Attention: DST is in December in South, and some regions don't have DST at all. + var start = new Date(date.getFullYear(), 0, 1); + var summerOffset = new Date(date.getFullYear(), 6, 1).getTimezoneOffset(); + var winterOffset = start.getTimezoneOffset(); + var dst = (summerOffset != winterOffset && date.getTimezoneOffset() == Math.min(winterOffset, summerOffset))|0; + HEAP32[(((tmPtr)+(32))>>2)] = dst; + ; + } + + + var __mktime_js = function(tmPtr) { + + var ret = (() => { + var date = new Date(HEAP32[(((tmPtr)+(20))>>2)] + 1900, + HEAP32[(((tmPtr)+(16))>>2)], + HEAP32[(((tmPtr)+(12))>>2)], + HEAP32[(((tmPtr)+(8))>>2)], + HEAP32[(((tmPtr)+(4))>>2)], + HEAP32[((tmPtr)>>2)], + 0); + + // There's an ambiguous hour when the time goes back; the tm_isdst field is + // used to disambiguate it. Date() basically guesses, so we fix it up if it + // guessed wrong, or fill in tm_isdst with the guess if it's -1. + var dst = HEAP32[(((tmPtr)+(32))>>2)]; + var guessedOffset = date.getTimezoneOffset(); + var start = new Date(date.getFullYear(), 0, 1); + var summerOffset = new Date(date.getFullYear(), 6, 1).getTimezoneOffset(); + var winterOffset = start.getTimezoneOffset(); + var dstOffset = Math.min(winterOffset, summerOffset); // DST is in December in South + if (dst < 0) { + // Attention: some regions don't have DST at all. + HEAP32[(((tmPtr)+(32))>>2)] = Number(summerOffset != winterOffset && dstOffset == guessedOffset); + } else if ((dst > 0) != (dstOffset == guessedOffset)) { + var nonDstOffset = Math.max(winterOffset, summerOffset); + var trueOffset = dst > 0 ? dstOffset : nonDstOffset; + // Don't try setMinutes(date.getMinutes() + ...) -- it's messed up. + date.setTime(date.getTime() + (trueOffset - guessedOffset)*60000); + } + + HEAP32[(((tmPtr)+(24))>>2)] = date.getDay(); + var yday = ydayFromDate(date)|0; + HEAP32[(((tmPtr)+(28))>>2)] = yday; + // To match expected behavior, update fields from date + HEAP32[((tmPtr)>>2)] = date.getSeconds(); + HEAP32[(((tmPtr)+(4))>>2)] = date.getMinutes(); + HEAP32[(((tmPtr)+(8))>>2)] = date.getHours(); + HEAP32[(((tmPtr)+(12))>>2)] = date.getDate(); + HEAP32[(((tmPtr)+(16))>>2)] = date.getMonth(); + HEAP32[(((tmPtr)+(20))>>2)] = date.getYear(); + + var timeMs = date.getTime(); + if (isNaN(timeMs)) { + return -1; + } + // Return time in microseconds + return timeMs / 1000; + })(); + return BigInt(ret); + }; + + var stringToUTF8 = (str, outPtr, maxBytesToWrite) => { + assert(typeof maxBytesToWrite == 'number', 'stringToUTF8(str, outPtr, maxBytesToWrite) is missing the third parameter that specifies the length of the output buffer!'); + return stringToUTF8Array(str, HEAPU8, outPtr, maxBytesToWrite); + }; + + var __tzset_js = (timezone, daylight, std_name, dst_name) => { + // TODO: Use (malleable) environment variables instead of system settings. + var currentYear = new Date().getFullYear(); + var winter = new Date(currentYear, 0, 1); + var summer = new Date(currentYear, 6, 1); + var winterOffset = winter.getTimezoneOffset(); + var summerOffset = summer.getTimezoneOffset(); + + // Local standard timezone offset. Local standard time is not adjusted for + // daylight savings. This code uses the fact that getTimezoneOffset returns + // a greater value during Standard Time versus Daylight Saving Time (DST). + // Thus it determines the expected output during Standard Time, and it + // compares whether the output of the given date the same (Standard) or less + // (DST). + var stdTimezoneOffset = Math.max(winterOffset, summerOffset); + + // timezone is specified as seconds west of UTC ("The external variable + // `timezone` shall be set to the difference, in seconds, between + // Coordinated Universal Time (UTC) and local standard time."), the same + // as returned by stdTimezoneOffset. + // See http://pubs.opengroup.org/onlinepubs/009695399/functions/tzset.html + HEAPU32[((timezone)>>2)] = stdTimezoneOffset * 60; + + HEAP32[((daylight)>>2)] = Number(winterOffset != summerOffset); + + var extractZone = (timezoneOffset) => { + // Why inverse sign? + // Read here https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/getTimezoneOffset + var sign = timezoneOffset >= 0 ? "-" : "+"; + + var absOffset = Math.abs(timezoneOffset) + var hours = String(Math.floor(absOffset / 60)).padStart(2, "0"); + var minutes = String(absOffset % 60).padStart(2, "0"); + + return `UTC${sign}${hours}${minutes}`; + } + + var winterName = extractZone(winterOffset); + var summerName = extractZone(summerOffset); + assert(winterName); + assert(summerName); + assert(lengthBytesUTF8(winterName) <= 16, `timezone name truncated to fit in TZNAME_MAX (${winterName})`); + assert(lengthBytesUTF8(summerName) <= 16, `timezone name truncated to fit in TZNAME_MAX (${summerName})`); + if (summerOffset < winterOffset) { + // Northern hemisphere + stringToUTF8(winterName, std_name, 17); + stringToUTF8(summerName, dst_name, 17); + } else { + stringToUTF8(winterName, dst_name, 17); + stringToUTF8(summerName, std_name, 17); + } + }; + + var _emscripten_date_now = () => Date.now(); + + var abortOnCannotGrowMemory = (requestedSize) => { + abort(`Cannot enlarge memory arrays to size ${requestedSize} bytes (OOM). Either (1) compile with -sINITIAL_MEMORY=X with X higher than the current value ${HEAP8.length}, (2) compile with -sALLOW_MEMORY_GROWTH which allows increasing the size at runtime, or (3) if you want malloc to return NULL (0) instead of this abort, compile with -sABORTING_MALLOC=0`); + }; + var _emscripten_resize_heap = (requestedSize) => { + var oldSize = HEAPU8.length; + // With CAN_ADDRESS_2GB or MEMORY64, pointers are already unsigned. + requestedSize >>>= 0; + abortOnCannotGrowMemory(requestedSize); + }; + + + var runtimeKeepaliveCounter = 0; + var keepRuntimeAlive = () => noExitRuntime || runtimeKeepaliveCounter > 0; + var _proc_exit = (code) => { + EXITSTATUS = code; + if (!keepRuntimeAlive()) { + Module['onExit']?.(code); + ABORT = true; + } + quit_(code, new ExitStatus(code)); + }; + + + /** @suppress {duplicate } */ + /** @param {boolean|number=} implicit */ + var exitJS = (status, implicit) => { + EXITSTATUS = status; + + checkUnflushedContent(); + + // if exit() was called explicitly, warn the user if the runtime isn't actually being shut down + if (keepRuntimeAlive() && !implicit) { + var msg = `program exited (with status: ${status}), but keepRuntimeAlive() is set (counter=${runtimeKeepaliveCounter}) due to an async operation, so halting execution but not exiting the runtime or preventing further async execution (you can use emscripten_force_exit, if you want to force a true shutdown)`; + err(msg); + } + + _proc_exit(status); + }; + var _exit = exitJS; + + function _fd_close(fd) { + try { + + var stream = SYSCALLS.getStreamFromFD(fd); + FS.close(stream); + return 0; + } catch (e) { + if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + return e.errno; + } + } + + function _fd_fdstat_get(fd, pbuf) { + try { + + var rightsBase = 0; + var rightsInheriting = 0; + var flags = 0; + { + var stream = SYSCALLS.getStreamFromFD(fd); + // All character devices are terminals (other things a Linux system would + // assume is a character device, like the mouse, we have special APIs for). + var type = stream.tty ? 2 : + FS.isDir(stream.mode) ? 3 : + FS.isLink(stream.mode) ? 7 : + 4; + } + HEAP8[pbuf] = type; + HEAP16[(((pbuf)+(2))>>1)] = flags; + HEAP64[(((pbuf)+(8))>>3)] = BigInt(rightsBase); + HEAP64[(((pbuf)+(16))>>3)] = BigInt(rightsInheriting); + return 0; + } catch (e) { + if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + return e.errno; + } + } + + /** @param {number=} offset */ + var doReadv = (stream, iov, iovcnt, offset) => { + var ret = 0; + for (var i = 0; i < iovcnt; i++) { + var ptr = HEAPU32[((iov)>>2)]; + var len = HEAPU32[(((iov)+(4))>>2)]; + iov += 8; + var curr = FS.read(stream, HEAP8, ptr, len, offset); + if (curr < 0) return -1; + ret += curr; + if (curr < len) break; // nothing more to read + if (typeof offset != 'undefined') { + offset += curr; + } + } + return ret; + }; + + function _fd_read(fd, iov, iovcnt, pnum) { + try { + + var stream = SYSCALLS.getStreamFromFD(fd); + var num = doReadv(stream, iov, iovcnt); + HEAPU32[((pnum)>>2)] = num; + return 0; + } catch (e) { + if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + return e.errno; + } + } + + + function _fd_seek(fd, offset, whence, newOffset) { + offset = bigintToI53Checked(offset); + + + try { + + if (isNaN(offset)) return 61; + var stream = SYSCALLS.getStreamFromFD(fd); + FS.llseek(stream, offset, whence); + HEAP64[((newOffset)>>3)] = BigInt(stream.position); + if (stream.getdents && offset === 0 && whence === 0) stream.getdents = null; // reset readdir state + return 0; + } catch (e) { + if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + return e.errno; + } + ; + } + + /** @param {number=} offset */ + var doWritev = (stream, iov, iovcnt, offset) => { + var ret = 0; + for (var i = 0; i < iovcnt; i++) { + var ptr = HEAPU32[((iov)>>2)]; + var len = HEAPU32[(((iov)+(4))>>2)]; + iov += 8; + var curr = FS.write(stream, HEAP8, ptr, len, offset); + if (curr < 0) return -1; + ret += curr; + if (curr < len) { + // No more space to write. + break; + } + if (typeof offset != 'undefined') { + offset += curr; + } + } + return ret; + }; + + function _fd_write(fd, iov, iovcnt, pnum) { + try { + + var stream = SYSCALLS.getStreamFromFD(fd); + var num = doWritev(stream, iov, iovcnt); + HEAPU32[((pnum)>>2)] = num; + return 0; + } catch (e) { + if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + return e.errno; + } + } + + + var handleException = (e) => { + // Certain exception types we do not treat as errors since they are used for + // internal control flow. + // 1. ExitStatus, which is thrown by exit() + // 2. "unwind", which is thrown by emscripten_unwind_to_js_event_loop() and others + // that wish to return to JS event loop. + if (e instanceof ExitStatus || e == 'unwind') { + return EXITSTATUS; + } + checkStackCookie(); + if (e instanceof WebAssembly.RuntimeError) { + if (_emscripten_stack_get_current() <= 0) { + err('Stack overflow detected. You can try increasing -sSTACK_SIZE (currently set to 65536)'); + } + } + quit_(1, e); + }; + + + + var stackAlloc = (sz) => __emscripten_stack_alloc(sz); + var stringToUTF8OnStack = (str) => { + var size = lengthBytesUTF8(str) + 1; + var ret = stackAlloc(size); + stringToUTF8(str, ret, size); + return ret; + }; + + FS.createPreloadedFile = FS_createPreloadedFile; + FS.staticInit(); + // Set module methods based on EXPORTED_RUNTIME_METHODS + ; +// End JS library code + +function checkIncomingModuleAPI() { + ignoredModuleProp('fetchSettings'); +} +var wasmImports = { + /** @export */ + __syscall_chmod: ___syscall_chmod, + /** @export */ + __syscall_dup: ___syscall_dup, + /** @export */ + __syscall_fchmod: ___syscall_fchmod, + /** @export */ + __syscall_fcntl64: ___syscall_fcntl64, + /** @export */ + __syscall_fstat64: ___syscall_fstat64, + /** @export */ + __syscall_ioctl: ___syscall_ioctl, + /** @export */ + __syscall_lstat64: ___syscall_lstat64, + /** @export */ + __syscall_newfstatat: ___syscall_newfstatat, + /** @export */ + __syscall_openat: ___syscall_openat, + /** @export */ + __syscall_renameat: ___syscall_renameat, + /** @export */ + __syscall_rmdir: ___syscall_rmdir, + /** @export */ + __syscall_stat64: ___syscall_stat64, + /** @export */ + __syscall_unlinkat: ___syscall_unlinkat, + /** @export */ + _abort_js: __abort_js, + /** @export */ + _localtime_js: __localtime_js, + /** @export */ + _mktime_js: __mktime_js, + /** @export */ + _tzset_js: __tzset_js, + /** @export */ + emscripten_date_now: _emscripten_date_now, + /** @export */ + emscripten_resize_heap: _emscripten_resize_heap, + /** @export */ + exit: _exit, + /** @export */ + fd_close: _fd_close, + /** @export */ + fd_fdstat_get: _fd_fdstat_get, + /** @export */ + fd_read: _fd_read, + /** @export */ + fd_seek: _fd_seek, + /** @export */ + fd_write: _fd_write +}; +var wasmExports; +createWasm(); +var ___wasm_call_ctors = createExportWrapper('__wasm_call_ctors', 0); +var _main = Module['_main'] = createExportWrapper('__main_argc_argv', 2); +var _strerror = createExportWrapper('strerror', 1); +var _fflush = createExportWrapper('fflush', 1); +var _emscripten_stack_init = () => (_emscripten_stack_init = wasmExports['emscripten_stack_init'])(); +var _emscripten_stack_get_free = () => (_emscripten_stack_get_free = wasmExports['emscripten_stack_get_free'])(); +var _emscripten_stack_get_base = () => (_emscripten_stack_get_base = wasmExports['emscripten_stack_get_base'])(); +var _emscripten_stack_get_end = () => (_emscripten_stack_get_end = wasmExports['emscripten_stack_get_end'])(); +var __emscripten_stack_restore = (a0) => (__emscripten_stack_restore = wasmExports['_emscripten_stack_restore'])(a0); +var __emscripten_stack_alloc = (a0) => (__emscripten_stack_alloc = wasmExports['_emscripten_stack_alloc'])(a0); +var _emscripten_stack_get_current = () => (_emscripten_stack_get_current = wasmExports['emscripten_stack_get_current'])(); + + +// include: postamble.js +// === Auto-generated postamble setup entry stuff === + +var missingLibrarySymbols = [ + 'writeI53ToI64', + 'writeI53ToI64Clamped', + 'writeI53ToI64Signaling', + 'writeI53ToU64Clamped', + 'writeI53ToU64Signaling', + 'readI53FromI64', + 'readI53FromU64', + 'convertI32PairToI53', + 'convertI32PairToI53Checked', + 'convertU32PairToI53', + 'getTempRet0', + 'setTempRet0', + 'zeroMemory', + 'getHeapMax', + 'growMemory', + 'inetPton4', + 'inetNtop4', + 'inetPton6', + 'inetNtop6', + 'readSockaddr', + 'writeSockaddr', + 'emscriptenLog', + 'readEmAsmArgs', + 'jstoi_q', + 'getExecutableName', + 'listenOnce', + 'autoResumeAudioContext', + 'getDynCaller', + 'dynCall', + 'runtimeKeepalivePush', + 'runtimeKeepalivePop', + 'callUserCallback', + 'maybeExit', + 'asmjsMangle', + 'alignMemory', + 'HandleAllocator', + 'getNativeTypeSize', + 'addOnInit', + 'addOnPostCtor', + 'addOnPreMain', + 'addOnExit', + 'STACK_SIZE', + 'STACK_ALIGN', + 'POINTER_SIZE', + 'ASSERTIONS', + 'getCFunc', + 'ccall', + 'cwrap', + 'uleb128Encode', + 'sigToWasmTypes', + 'generateFuncType', + 'convertJsFunctionToWasm', + 'getEmptyTableSlot', + 'updateTableMap', + 'getFunctionAddress', + 'addFunction', + 'removeFunction', + 'reallyNegative', + 'unSign', + 'strLen', + 'reSign', + 'formatString', + 'intArrayToString', + 'AsciiToString', + 'stringToAscii', + 'UTF16ToString', + 'stringToUTF16', + 'lengthBytesUTF16', + 'UTF32ToString', + 'stringToUTF32', + 'lengthBytesUTF32', + 'stringToNewUTF8', + 'writeArrayToMemory', + 'registerKeyEventCallback', + 'maybeCStringToJsString', + 'findEventTarget', + 'getBoundingClientRect', + 'fillMouseEventData', + 'registerMouseEventCallback', + 'registerWheelEventCallback', + 'registerUiEventCallback', + 'registerFocusEventCallback', + 'fillDeviceOrientationEventData', + 'registerDeviceOrientationEventCallback', + 'fillDeviceMotionEventData', + 'registerDeviceMotionEventCallback', + 'screenOrientation', + 'fillOrientationChangeEventData', + 'registerOrientationChangeEventCallback', + 'fillFullscreenChangeEventData', + 'registerFullscreenChangeEventCallback', + 'JSEvents_requestFullscreen', + 'JSEvents_resizeCanvasForFullscreen', + 'registerRestoreOldStyle', + 'hideEverythingExceptGivenElement', + 'restoreHiddenElements', + 'setLetterbox', + 'softFullscreenResizeWebGLRenderTarget', + 'doRequestFullscreen', + 'fillPointerlockChangeEventData', + 'registerPointerlockChangeEventCallback', + 'registerPointerlockErrorEventCallback', + 'requestPointerLock', + 'fillVisibilityChangeEventData', + 'registerVisibilityChangeEventCallback', + 'registerTouchEventCallback', + 'fillGamepadEventData', + 'registerGamepadEventCallback', + 'registerBeforeUnloadEventCallback', + 'fillBatteryEventData', + 'battery', + 'registerBatteryEventCallback', + 'setCanvasElementSize', + 'getCanvasElementSize', + 'jsStackTrace', + 'getCallstack', + 'convertPCtoSourceLocation', + 'getEnvStrings', + 'checkWasiClock', + 'wasiRightsToMuslOFlags', + 'wasiOFlagsToMuslOFlags', + 'safeSetTimeout', + 'setImmediateWrapped', + 'safeRequestAnimationFrame', + 'clearImmediateWrapped', + 'registerPostMainLoop', + 'registerPreMainLoop', + 'getPromise', + 'makePromise', + 'idsToPromises', + 'makePromiseCallback', + 'ExceptionInfo', + 'findMatchingCatch', + 'Browser_asyncPrepareDataCounter', + 'arraySum', + 'addDays', + 'getSocketFromFD', + 'getSocketAddress', + 'FS_unlink', + 'FS_mkdirTree', + '_setNetworkCallback', + 'heapObjectForWebGLType', + 'toTypedArrayIndex', + 'webgl_enable_ANGLE_instanced_arrays', + 'webgl_enable_OES_vertex_array_object', + 'webgl_enable_WEBGL_draw_buffers', + 'webgl_enable_WEBGL_multi_draw', + 'webgl_enable_EXT_polygon_offset_clamp', + 'webgl_enable_EXT_clip_control', + 'webgl_enable_WEBGL_polygon_mode', + 'emscriptenWebGLGet', + 'computeUnpackAlignedImageSize', + 'colorChannelsInGlTextureFormat', + 'emscriptenWebGLGetTexPixelData', + 'emscriptenWebGLGetUniform', + 'webglGetUniformLocation', + 'webglPrepareUniformLocationsBeforeFirstUse', + 'webglGetLeftBracePos', + 'emscriptenWebGLGetVertexAttrib', + '__glGetActiveAttribOrUniform', + 'writeGLArray', + 'registerWebGlEventCallback', + 'runAndAbortIfError', + 'ALLOC_NORMAL', + 'ALLOC_STACK', + 'allocate', + 'writeStringToMemory', + 'writeAsciiToMemory', + 'demangle', + 'stackTrace', +]; +missingLibrarySymbols.forEach(missingLibrarySymbol) + +var unexportedSymbols = [ + 'run', + 'addRunDependency', + 'removeRunDependency', + 'out', + 'err', + 'callMain', + 'abort', + 'wasmMemory', + 'wasmExports', + 'writeStackCookie', + 'checkStackCookie', + 'INT53_MAX', + 'INT53_MIN', + 'bigintToI53Checked', + 'stackSave', + 'stackRestore', + 'stackAlloc', + 'ptrToString', + 'exitJS', + 'abortOnCannotGrowMemory', + 'ENV', + 'ERRNO_CODES', + 'strError', + 'DNS', + 'Protocols', + 'Sockets', + 'timers', + 'warnOnce', + 'readEmAsmArgsArray', + 'jstoi_s', + 'handleException', + 'keepRuntimeAlive', + 'asyncLoad', + 'mmapAlloc', + 'wasmTable', + 'noExitRuntime', + 'addOnPreRun', + 'addOnPostRun', + 'freeTableIndexes', + 'functionsInTableMap', + 'setValue', + 'getValue', + 'PATH', + 'PATH_FS', + 'UTF8Decoder', + 'UTF8ArrayToString', + 'UTF8ToString', + 'stringToUTF8Array', + 'stringToUTF8', + 'lengthBytesUTF8', + 'intArrayFromString', + 'UTF16Decoder', + 'stringToUTF8OnStack', + 'JSEvents', + 'specialHTMLTargets', + 'findCanvasEventTarget', + 'currentFullscreenStrategy', + 'restoreOldWindowedStyle', + 'UNWIND_CACHE', + 'ExitStatus', + 'doReadv', + 'doWritev', + 'initRandomFill', + 'randomFill', + 'emSetImmediate', + 'emClearImmediate_deps', + 'emClearImmediate', + 'promiseMap', + 'uncaughtExceptionCount', + 'exceptionLast', + 'exceptionCaught', + 'Browser', + 'getPreloadedImageData__data', + 'wget', + 'MONTH_DAYS_REGULAR', + 'MONTH_DAYS_LEAP', + 'MONTH_DAYS_REGULAR_CUMULATIVE', + 'MONTH_DAYS_LEAP_CUMULATIVE', + 'isLeapYear', + 'ydayFromDate', + 'SYSCALLS', + 'preloadPlugins', + 'FS_createPreloadedFile', + 'FS_modeStringToFlags', + 'FS_getMode', + 'FS_stdin_getChar_buffer', + 'FS_stdin_getChar', + 'FS_createPath', + 'FS_createDevice', + 'FS_readFile', + 'FS', + 'FS_createDataFile', + 'FS_createLazyFile', + 'MEMFS', + 'TTY', + 'PIPEFS', + 'SOCKFS', + 'tempFixedLengthArray', + 'miniTempWebGLFloatBuffers', + 'miniTempWebGLIntBuffers', + 'GL', + 'AL', + 'GLUT', + 'EGL', + 'GLEW', + 'IDBStore', + 'SDL', + 'SDL_gfx', + 'allocateUTF8', + 'allocateUTF8OnStack', + 'print', + 'printErr', +]; +unexportedSymbols.forEach(unexportedRuntimeSymbol); + + + +var calledRun; + +function callMain(args = []) { + assert(runDependencies == 0, 'cannot call main when async dependencies remain! (listen on Module["onRuntimeInitialized"])'); + assert(typeof onPreRuns === 'undefined' || onPreRuns.length == 0, 'cannot call main when preRun functions remain to be called'); + + var entryFunction = _main; + + args.unshift(thisProgram); + + var argc = args.length; + var argv = stackAlloc((argc + 1) * 4); + var argv_ptr = argv; + args.forEach((arg) => { + HEAPU32[((argv_ptr)>>2)] = stringToUTF8OnStack(arg); + argv_ptr += 4; + }); + HEAPU32[((argv_ptr)>>2)] = 0; + + try { + + var ret = entryFunction(argc, argv); + + // if we're not running an evented main loop, it's time to exit + exitJS(ret, /* implicit = */ true); + return ret; + } catch (e) { + return handleException(e); + } +} + +function stackCheckInit() { + // This is normally called automatically during __wasm_call_ctors but need to + // get these values before even running any of the ctors so we call it redundantly + // here. + _emscripten_stack_init(); + // TODO(sbc): Move writeStackCookie to native to to avoid this. + writeStackCookie(); +} + +function run(args = arguments_) { + + if (runDependencies > 0) { + dependenciesFulfilled = run; + return; + } + + stackCheckInit(); + + preRun(); + + // a preRun added a dependency, run will be called later + if (runDependencies > 0) { + dependenciesFulfilled = run; + return; + } + + function doRun() { + // run may have just been called through dependencies being fulfilled just in this very frame, + // or while the async setStatus time below was happening + assert(!calledRun); + calledRun = true; + Module['calledRun'] = true; + + if (ABORT) return; + + initRuntime(); + + preMain(); + + Module['onRuntimeInitialized']?.(); + consumedModuleProp('onRuntimeInitialized'); + + var noInitialRun = Module['noInitialRun'];legacyModuleProp('noInitialRun', 'noInitialRun'); + if (!noInitialRun) callMain(args); + + postRun(); + } + + if (Module['setStatus']) { + Module['setStatus']('Running...'); + setTimeout(() => { + setTimeout(() => Module['setStatus'](''), 1); + doRun(); + }, 1); + } else + { + doRun(); + } + checkStackCookie(); +} + +function checkUnflushedContent() { + // Compiler settings do not allow exiting the runtime, so flushing + // the streams is not possible. but in ASSERTIONS mode we check + // if there was something to flush, and if so tell the user they + // should request that the runtime be exitable. + // Normally we would not even include flush() at all, but in ASSERTIONS + // builds we do so just for this check, and here we see if there is any + // content to flush, that is, we check if there would have been + // something a non-ASSERTIONS build would have not seen. + // How we flush the streams depends on whether we are in SYSCALLS_REQUIRE_FILESYSTEM=0 + // mode (which has its own special function for this; otherwise, all + // the code is inside libc) + var oldOut = out; + var oldErr = err; + var has = false; + out = err = (x) => { + has = true; + } + try { // it doesn't matter if it fails + _fflush(0); + // also flush in the JS FS layer + ['stdout', 'stderr'].forEach((name) => { + var info = FS.analyzePath('/dev/' + name); + if (!info) return; + var stream = info.object; + var rdev = stream.rdev; + var tty = TTY.ttys[rdev]; + if (tty?.output?.length) { + has = true; + } + }); + } catch(e) {} + out = oldOut; + err = oldErr; + if (has) { + warnOnce('stdio streams had content in them that was not flushed. you should set EXIT_RUNTIME to 1 (see the Emscripten FAQ), or make sure to emit a newline when you printf etc.'); + } +} + +if (Module['preInit']) { + if (typeof Module['preInit'] == 'function') Module['preInit'] = [Module['preInit']]; + while (Module['preInit'].length > 0) { + Module['preInit'].pop()(); + } +} +consumedModuleProp('preInit'); + +run(); + +// end include: postamble.js + diff --git a/thirdparty/libzip-1.11.3/build-emcmake/src/ziptool.wasm b/thirdparty/libzip-1.11.3/build-emcmake/src/ziptool.wasm new file mode 100755 index 0000000000000000000000000000000000000000..0a2e8c40700c68f0d0a431cfb1db64f99f0d80ea GIT binary patch literal 461566 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

    Fg3gEAGOR$>@B?v;W4D64nU;|GTJP`D?BtAVY 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 jy8dO!f$YiDmy=B#{+w)ocXNVTg=V3# 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 z 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 + +typedef int8_t zip_int8_t; +typedef uint8_t zip_uint8_t; +typedef int16_t zip_int16_t; +typedef uint16_t zip_uint16_t; +typedef int32_t zip_int32_t; +typedef uint32_t zip_uint32_t; +typedef int64_t zip_int64_t; +typedef uint64_t zip_uint64_t; + +#define ZIP_INT8_MIN (-ZIP_INT8_MAX-1) +#define ZIP_INT8_MAX 0x7f +#define ZIP_UINT8_MAX 0xff + +#define ZIP_INT16_MIN (-ZIP_INT16_MAX-1) +#define ZIP_INT16_MAX 0x7fff +#define ZIP_UINT16_MAX 0xffff + +#define ZIP_INT32_MIN (-ZIP_INT32_MAX-1L) +#define ZIP_INT32_MAX 0x7fffffffL +#define ZIP_UINT32_MAX 0xffffffffLU + +#define ZIP_INT64_MIN (-ZIP_INT64_MAX-1LL) +#define ZIP_INT64_MAX 0x7fffffffffffffffLL +#define ZIP_UINT64_MAX 0xffffffffffffffffULL + +#endif /* zipconf.h */ diff --git a/thirdparty/zlib-1.3.1/CMakeLists.txt b/thirdparty/zlib-1.3.1/CMakeLists.txt new file mode 100644 index 0000000..15ceebe --- /dev/null +++ b/thirdparty/zlib-1.3.1/CMakeLists.txt @@ -0,0 +1,218 @@ +cmake_minimum_required(VERSION 2.4.4...3.15.0) +set(CMAKE_ALLOW_LOOSE_LOOP_CONSTRUCTS ON) + +project(zlib C) + +set(VERSION "1.3.1") + +option(ZLIB_BUILD_EXAMPLES "Enable Zlib Examples" ON) + +set(INSTALL_BIN_DIR "${CMAKE_INSTALL_PREFIX}/bin" CACHE PATH "Installation directory for executables") +set(INSTALL_LIB_DIR "${CMAKE_INSTALL_PREFIX}/lib" CACHE PATH "Installation directory for libraries") +set(INSTALL_INC_DIR "${CMAKE_INSTALL_PREFIX}/include" CACHE PATH "Installation directory for headers") +set(INSTALL_MAN_DIR "${CMAKE_INSTALL_PREFIX}/share/man" CACHE PATH "Installation directory for manual pages") +set(INSTALL_PKGCONFIG_DIR "${CMAKE_INSTALL_PREFIX}/share/pkgconfig" CACHE PATH "Installation directory for pkgconfig (.pc) files") + +include(CheckTypeSize) +include(CheckFunctionExists) +include(CheckIncludeFile) +include(CheckCSourceCompiles) +enable_testing() + +check_include_file(sys/types.h HAVE_SYS_TYPES_H) +check_include_file(stdint.h HAVE_STDINT_H) +check_include_file(stddef.h HAVE_STDDEF_H) + +# +# Check to see if we have large file support +# +set(CMAKE_REQUIRED_DEFINITIONS -D_LARGEFILE64_SOURCE=1) +# We add these other definitions here because CheckTypeSize.cmake +# in CMake 2.4.x does not automatically do so and we want +# compatibility with CMake 2.4.x. +if(HAVE_SYS_TYPES_H) + list(APPEND CMAKE_REQUIRED_DEFINITIONS -DHAVE_SYS_TYPES_H) +endif() +if(HAVE_STDINT_H) + list(APPEND CMAKE_REQUIRED_DEFINITIONS -DHAVE_STDINT_H) +endif() +if(HAVE_STDDEF_H) + list(APPEND CMAKE_REQUIRED_DEFINITIONS -DHAVE_STDDEF_H) +endif() +check_type_size(off64_t OFF64_T) +if(HAVE_OFF64_T) + add_definitions(-D_LARGEFILE64_SOURCE=1) +endif() +set(CMAKE_REQUIRED_DEFINITIONS) # clear variable + +# +# Check for fseeko +# +check_function_exists(fseeko HAVE_FSEEKO) +if(NOT HAVE_FSEEKO) + add_definitions(-DNO_FSEEKO) +endif() + +# +# Check for unistd.h +# +check_include_file(unistd.h Z_HAVE_UNISTD_H) + +if(MSVC) + set(CMAKE_DEBUG_POSTFIX "d") + add_definitions(-D_CRT_SECURE_NO_DEPRECATE) + add_definitions(-D_CRT_NONSTDC_NO_DEPRECATE) + include_directories(${CMAKE_CURRENT_SOURCE_DIR}) +endif() + +if(NOT CMAKE_CURRENT_SOURCE_DIR STREQUAL CMAKE_CURRENT_BINARY_DIR) + # If we're doing an out of source build and the user has a zconf.h + # in their source tree... + if(EXISTS ${CMAKE_CURRENT_SOURCE_DIR}/zconf.h) + message(STATUS "Renaming") + message(STATUS " ${CMAKE_CURRENT_SOURCE_DIR}/zconf.h") + message(STATUS "to 'zconf.h.included' because this file is included with zlib") + message(STATUS "but CMake generates it automatically in the build directory.") + file(RENAME ${CMAKE_CURRENT_SOURCE_DIR}/zconf.h ${CMAKE_CURRENT_SOURCE_DIR}/zconf.h.included) + endif() +endif() + +set(ZLIB_PC ${CMAKE_CURRENT_BINARY_DIR}/zlib.pc) +configure_file( ${CMAKE_CURRENT_SOURCE_DIR}/zlib.pc.cmakein + ${ZLIB_PC} @ONLY) +configure_file( ${CMAKE_CURRENT_SOURCE_DIR}/zconf.h.cmakein + ${CMAKE_CURRENT_BINARY_DIR}/zconf.h @ONLY) +include_directories(${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_SOURCE_DIR}) + + +#============================================================================ +# zlib +#============================================================================ + +set(ZLIB_PUBLIC_HDRS + ${CMAKE_CURRENT_BINARY_DIR}/zconf.h + zlib.h +) +set(ZLIB_PRIVATE_HDRS + crc32.h + deflate.h + gzguts.h + inffast.h + inffixed.h + inflate.h + inftrees.h + trees.h + zutil.h +) +set(ZLIB_SRCS + adler32.c + compress.c + crc32.c + deflate.c + gzclose.c + gzlib.c + gzread.c + gzwrite.c + inflate.c + infback.c + inftrees.c + inffast.c + trees.c + uncompr.c + zutil.c +) + +if(NOT MINGW) + set(ZLIB_DLL_SRCS + win32/zlib1.rc # If present will override custom build rule below. + ) +endif() + +# parse the full version number from zlib.h and include in ZLIB_FULL_VERSION +file(READ ${CMAKE_CURRENT_SOURCE_DIR}/zlib.h _zlib_h_contents) +string(REGEX REPLACE ".*#define[ \t]+ZLIB_VERSION[ \t]+\"([-0-9A-Za-z.]+)\".*" + "\\1" ZLIB_FULL_VERSION ${_zlib_h_contents}) + +if(MINGW) + # This gets us DLL resource information when compiling on MinGW. + if(NOT CMAKE_RC_COMPILER) + set(CMAKE_RC_COMPILER windres.exe) + endif() + + add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/zlib1rc.obj + COMMAND ${CMAKE_RC_COMPILER} + -D GCC_WINDRES + -I ${CMAKE_CURRENT_SOURCE_DIR} + -I ${CMAKE_CURRENT_BINARY_DIR} + -o ${CMAKE_CURRENT_BINARY_DIR}/zlib1rc.obj + -i ${CMAKE_CURRENT_SOURCE_DIR}/win32/zlib1.rc) + set(ZLIB_DLL_SRCS ${CMAKE_CURRENT_BINARY_DIR}/zlib1rc.obj) +endif(MINGW) + +add_library(zlib SHARED ${ZLIB_SRCS} ${ZLIB_DLL_SRCS} ${ZLIB_PUBLIC_HDRS} ${ZLIB_PRIVATE_HDRS}) +target_include_directories(zlib PUBLIC ${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_CURRENT_SOURCE_DIR}) +add_library(zlibstatic STATIC ${ZLIB_SRCS} ${ZLIB_PUBLIC_HDRS} ${ZLIB_PRIVATE_HDRS}) +target_include_directories(zlibstatic PUBLIC ${CMAKE_CURRENT_BINARY_DIR} ${CMAKE_CURRENT_SOURCE_DIR}) +set_target_properties(zlib PROPERTIES DEFINE_SYMBOL ZLIB_DLL) +set_target_properties(zlib PROPERTIES SOVERSION 1) + +if(NOT CYGWIN) + # This property causes shared libraries on Linux to have the full version + # encoded into their final filename. We disable this on Cygwin because + # it causes cygz-${ZLIB_FULL_VERSION}.dll to be created when cygz.dll + # seems to be the default. + # + # This has no effect with MSVC, on that platform the version info for + # the DLL comes from the resource file win32/zlib1.rc + set_target_properties(zlib PROPERTIES VERSION ${ZLIB_FULL_VERSION}) +endif() + +if(UNIX) + # On unix-like platforms the library is almost always called libz + set_target_properties(zlib zlibstatic PROPERTIES OUTPUT_NAME z) + if(NOT APPLE AND NOT(CMAKE_SYSTEM_NAME STREQUAL AIX)) + set_target_properties(zlib PROPERTIES LINK_FLAGS "-Wl,--version-script,\"${CMAKE_CURRENT_SOURCE_DIR}/zlib.map\"") + endif() +elseif(BUILD_SHARED_LIBS AND WIN32) + # Creates zlib1.dll when building shared library version + set_target_properties(zlib PROPERTIES SUFFIX "1.dll") +endif() + +if(NOT SKIP_INSTALL_LIBRARIES AND NOT SKIP_INSTALL_ALL ) + install(TARGETS zlib zlibstatic + RUNTIME DESTINATION "${INSTALL_BIN_DIR}" + ARCHIVE DESTINATION "${INSTALL_LIB_DIR}" + LIBRARY DESTINATION "${INSTALL_LIB_DIR}" ) +endif() +if(NOT SKIP_INSTALL_HEADERS AND NOT SKIP_INSTALL_ALL ) + install(FILES ${ZLIB_PUBLIC_HDRS} DESTINATION "${INSTALL_INC_DIR}") +endif() +if(NOT SKIP_INSTALL_FILES AND NOT SKIP_INSTALL_ALL ) + install(FILES zlib.3 DESTINATION "${INSTALL_MAN_DIR}/man3") +endif() +if(NOT SKIP_INSTALL_FILES AND NOT SKIP_INSTALL_ALL ) + install(FILES ${ZLIB_PC} DESTINATION "${INSTALL_PKGCONFIG_DIR}") +endif() + +#============================================================================ +# Example binaries +#============================================================================ +if(ZLIB_BUILD_EXAMPLES) + add_executable(example test/example.c) + target_link_libraries(example zlib) + add_test(example example) + + add_executable(minigzip test/minigzip.c) + target_link_libraries(minigzip zlib) + + if(HAVE_OFF64_T) + add_executable(example64 test/example.c) + target_link_libraries(example64 zlib) + set_target_properties(example64 PROPERTIES COMPILE_FLAGS "-D_FILE_OFFSET_BITS=64") + add_test(example64 example64) + + add_executable(minigzip64 test/minigzip.c) + target_link_libraries(minigzip64 zlib) + set_target_properties(minigzip64 PROPERTIES COMPILE_FLAGS "-D_FILE_OFFSET_BITS=64") + endif() +endif() diff --git a/thirdparty/zlib-1.3.1/ChangeLog b/thirdparty/zlib-1.3.1/ChangeLog new file mode 100644 index 0000000..b801a10 --- /dev/null +++ b/thirdparty/zlib-1.3.1/ChangeLog @@ -0,0 +1,1618 @@ + + ChangeLog file for zlib + +Changes in 1.3.1 (22 Jan 2024) +- Reject overflows of zip header fields in minizip +- Fix bug in inflateSync() for data held in bit buffer +- Add LIT_MEM define to use more memory for a small deflate speedup +- Fix decision on the emission of Zip64 end records in minizip +- Add bounds checking to ERR_MSG() macro, used by zError() +- Neutralize zip file traversal attacks in miniunz +- Fix a bug in ZLIB_DEBUG compiles in check_match() +- Various portability and appearance improvements + +Changes in 1.3 (18 Aug 2023) +- Remove K&R function definitions and zlib2ansi +- Fix bug in deflateBound() for level 0 and memLevel 9 +- Fix bug when gzungetc() is used immediately after gzopen() +- Fix bug when using gzflush() with a very small buffer +- Fix crash when gzsetparams() attempted for transparent write +- Fix test/example.c to work with FORCE_STORED +- Rewrite of zran in examples (see zran.c version history) +- Fix minizip to allow it to open an empty zip file +- Fix reading disk number start on zip64 files in minizip +- Fix logic error in minizip argument processing +- Add minizip testing to Makefile +- Read multiple bytes instead of byte-by-byte in minizip unzip.c +- Add memory sanitizer to configure (--memory) +- Various portability improvements +- Various documentation improvements +- Various spelling and typo corrections + +Changes in 1.2.13 (13 Oct 2022) +- Fix configure issue that discarded provided CC definition +- Correct incorrect inputs provided to the CRC functions +- Repair prototypes and exporting of new CRC functions +- Fix inflateBack to detect invalid input with distances too far +- Have infback() deliver all of the available output up to any error +- Fix a bug when getting a gzip header extra field with inflate() +- Fix bug in block type selection when Z_FIXED used +- Tighten deflateBound bounds +- Remove deleted assembler code references +- Various portability and appearance improvements + +Changes in 1.2.12 (27 Mar 2022) +- Cygwin does not have _wopen(), so do not create gzopen_w() there +- Permit a deflateParams() parameter change as soon as possible +- Limit hash table inserts after switch from stored deflate +- Fix bug when window full in deflate_stored() +- Fix CLEAR_HASH macro to be usable as a single statement +- Avoid a conversion error in gzseek when off_t type too small +- Have Makefile return non-zero error code on test failure +- Avoid some conversion warnings in gzread.c and gzwrite.c +- Update use of errno for newer Windows CE versions +- Small speedup to inflate [psumbera] +- Return an error if the gzputs string length can't fit in an int +- Add address checking in clang to -w option of configure +- Don't compute check value for raw inflate if asked to validate +- Handle case where inflateSync used when header never processed +- Avoid the use of ptrdiff_t +- Avoid an undefined behavior of memcpy() in gzappend() +- Avoid undefined behaviors of memcpy() in gz*printf() +- Avoid an undefined behavior of memcpy() in _tr_stored_block() +- Make the names in functions declarations identical to definitions +- Remove old assembler code in which bugs have manifested +- Fix deflateEnd() to not report an error at start of raw deflate +- Add legal disclaimer to README +- Emphasize the need to continue decompressing gzip members +- Correct the initialization requirements for deflateInit2() +- Fix a bug that can crash deflate on some input when using Z_FIXED +- Assure that the number of bits for deflatePrime() is valid +- Use a structure to make globals in enough.c evident +- Use a macro for the printf format of big_t in enough.c +- Clean up code style in enough.c, update version +- Use inline function instead of macro for index in enough.c +- Clarify that prefix codes are counted in enough.c +- Show all the codes for the maximum tables size in enough.c +- Add gznorm.c example, which normalizes gzip files +- Fix the zran.c example to work on a multiple-member gzip file +- Add tables for crc32_combine(), to speed it up by a factor of 200 +- Add crc32_combine_gen() and crc32_combine_op() for fast combines +- Speed up software CRC-32 computation by a factor of 1.5 to 3 +- Use atomic test and set, if available, for dynamic CRC tables +- Don't bother computing check value after successful inflateSync() +- Correct comment in crc32.c +- Add use of the ARMv8 crc32 instructions when requested +- Use ARM crc32 instructions if the ARM architecture has them +- Explicitly note that the 32-bit check values are 32 bits +- Avoid adding empty gzip member after gzflush with Z_FINISH +- Fix memory leak on error in gzlog.c +- Fix error in comment on the polynomial representation of a byte +- Clarify gz* function interfaces, referring to parameter names +- Change macro name in inflate.c to avoid collision in VxWorks +- Correct typo in blast.c +- Improve portability of contrib/minizip +- Fix indentation in minizip's zip.c +- Replace black/white with allow/block. (theresa-m) +- minizip warning fix if MAXU32 already defined. (gvollant) +- Fix unztell64() in minizip to work past 4GB. (Daniël Hörchner) +- Clean up minizip to reduce warnings for testing +- Add fallthrough comments for gcc +- Eliminate use of ULL constants +- Separate out address sanitizing from warnings in configure +- Remove destructive aspects of make distclean +- Check for cc masquerading as gcc or clang in configure +- Fix crc32.c to compile local functions only if used + +Changes in 1.2.11 (15 Jan 2017) +- Fix deflate stored bug when pulling last block from window +- Permit immediate deflateParams changes before any deflate input + +Changes in 1.2.10 (2 Jan 2017) +- Avoid warnings on snprintf() return value +- Fix bug in deflate_stored() for zero-length input +- Fix bug in gzwrite.c that produced corrupt gzip files +- Remove files to be installed before copying them in Makefile.in +- Add warnings when compiling with assembler code + +Changes in 1.2.9 (31 Dec 2016) +- Fix contrib/minizip to permit unzipping with desktop API [Zouzou] +- Improve contrib/blast to return unused bytes +- Assure that gzoffset() is correct when appending +- Improve compress() and uncompress() to support large lengths +- Fix bug in test/example.c where error code not saved +- Remedy Coverity warning [Randers-Pehrson] +- Improve speed of gzprintf() in transparent mode +- Fix inflateInit2() bug when windowBits is 16 or 32 +- Change DEBUG macro to ZLIB_DEBUG +- Avoid uninitialized access by gzclose_w() +- Allow building zlib outside of the source directory +- Fix bug that accepted invalid zlib header when windowBits is zero +- Fix gzseek() problem on MinGW due to buggy _lseeki64 there +- Loop on write() calls in gzwrite.c in case of non-blocking I/O +- Add --warn (-w) option to ./configure for more compiler warnings +- Reject a window size of 256 bytes if not using the zlib wrapper +- Fix bug when level 0 used with Z_HUFFMAN or Z_RLE +- Add --debug (-d) option to ./configure to define ZLIB_DEBUG +- Fix bugs in creating a very large gzip header +- Add uncompress2() function, which returns the input size used +- Assure that deflateParams() will not switch functions mid-block +- Dramatically speed up deflation for level 0 (storing) +- Add gzfread(), duplicating the interface of fread() +- Add gzfwrite(), duplicating the interface of fwrite() +- Add deflateGetDictionary() function +- Use snprintf() for later versions of Microsoft C +- Fix *Init macros to use z_ prefix when requested +- Replace as400 with os400 for OS/400 support [Monnerat] +- Add crc32_z() and adler32_z() functions with size_t lengths +- Update Visual Studio project files [AraHaan] + +Changes in 1.2.8 (28 Apr 2013) +- Update contrib/minizip/iowin32.c for Windows RT [Vollant] +- Do not force Z_CONST for C++ +- Clean up contrib/vstudio [Roß] +- Correct spelling error in zlib.h +- Fix mixed line endings in contrib/vstudio + +Changes in 1.2.7.3 (13 Apr 2013) +- Fix version numbers and DLL names in contrib/vstudio/*/zlib.rc + +Changes in 1.2.7.2 (13 Apr 2013) +- Change check for a four-byte type back to hexadecimal +- Fix typo in win32/Makefile.msc +- Add casts in gzwrite.c for pointer differences + +Changes in 1.2.7.1 (24 Mar 2013) +- Replace use of unsafe string functions with snprintf if available +- Avoid including stddef.h on Windows for Z_SOLO compile [Niessink] +- Fix gzgetc undefine when Z_PREFIX set [Turk] +- Eliminate use of mktemp in Makefile (not always available) +- Fix bug in 'F' mode for gzopen() +- Add inflateGetDictionary() function +- Correct comment in deflate.h +- Use _snprintf for snprintf in Microsoft C +- On Darwin, only use /usr/bin/libtool if libtool is not Apple +- Delete "--version" file if created by "ar --version" [Richard G.] +- Fix configure check for veracity of compiler error return codes +- Fix CMake compilation of static lib for MSVC2010 x64 +- Remove unused variable in infback9.c +- Fix argument checks in gzlog_compress() and gzlog_write() +- Clean up the usage of z_const and respect const usage within zlib +- Clean up examples/gzlog.[ch] comparisons of different types +- Avoid shift equal to bits in type (caused endless loop) +- Fix uninitialized value bug in gzputc() introduced by const patches +- Fix memory allocation error in examples/zran.c [Nor] +- Fix bug where gzopen(), gzclose() would write an empty file +- Fix bug in gzclose() when gzwrite() runs out of memory +- Check for input buffer malloc failure in examples/gzappend.c +- Add note to contrib/blast to use binary mode in stdio +- Fix comparisons of differently signed integers in contrib/blast +- Check for invalid code length codes in contrib/puff +- Fix serious but very rare decompression bug in inftrees.c +- Update inflateBack() comments, since inflate() can be faster +- Use underscored I/O function names for WINAPI_FAMILY +- Add _tr_flush_bits to the external symbols prefixed by --zprefix +- Add contrib/vstudio/vc10 pre-build step for static only +- Quote --version-script argument in CMakeLists.txt +- Don't specify --version-script on Apple platforms in CMakeLists.txt +- Fix casting error in contrib/testzlib/testzlib.c +- Fix types in contrib/minizip to match result of get_crc_table() +- Simplify contrib/vstudio/vc10 with 'd' suffix +- Add TOP support to win32/Makefile.msc +- Support i686 and amd64 assembler builds in CMakeLists.txt +- Fix typos in the use of _LARGEFILE64_SOURCE in zconf.h +- Add vc11 and vc12 build files to contrib/vstudio +- Add gzvprintf() as an undocumented function in zlib +- Fix configure for Sun shell +- Remove runtime check in configure for four-byte integer type +- Add casts and consts to ease user conversion to C++ +- Add man pages for minizip and miniunzip +- In Makefile uninstall, don't rm if preceding cd fails +- Do not return Z_BUF_ERROR if deflateParam() has nothing to write + +Changes in 1.2.7 (2 May 2012) +- Replace use of memmove() with a simple copy for portability +- Test for existence of strerror +- Restore gzgetc_ for backward compatibility with 1.2.6 +- Fix build with non-GNU make on Solaris +- Require gcc 4.0 or later on Mac OS X to use the hidden attribute +- Include unistd.h for Watcom C +- Use __WATCOMC__ instead of __WATCOM__ +- Do not use the visibility attribute if NO_VIZ defined +- Improve the detection of no hidden visibility attribute +- Avoid using __int64 for gcc or solo compilation +- Cast to char * in gzprintf to avoid warnings [Zinser] +- Fix make_vms.com for VAX [Zinser] +- Don't use library or built-in byte swaps +- Simplify test and use of gcc hidden attribute +- Fix bug in gzclose_w() when gzwrite() fails to allocate memory +- Add "x" (O_EXCL) and "e" (O_CLOEXEC) modes support to gzopen() +- Fix bug in test/minigzip.c for configure --solo +- Fix contrib/vstudio project link errors [Mohanathas] +- Add ability to choose the builder in make_vms.com [Schweda] +- Add DESTDIR support to mingw32 win32/Makefile.gcc +- Fix comments in win32/Makefile.gcc for proper usage +- Allow overriding the default install locations for cmake +- Generate and install the pkg-config file with cmake +- Build both a static and a shared version of zlib with cmake +- Include version symbols for cmake builds +- If using cmake with MSVC, add the source directory to the includes +- Remove unneeded EXTRA_CFLAGS from win32/Makefile.gcc [Truta] +- Move obsolete emx makefile to old [Truta] +- Allow the use of -Wundef when compiling or using zlib +- Avoid the use of the -u option with mktemp +- Improve inflate() documentation on the use of Z_FINISH +- Recognize clang as gcc +- Add gzopen_w() in Windows for wide character path names +- Rename zconf.h in CMakeLists.txt to move it out of the way +- Add source directory in CMakeLists.txt for building examples +- Look in build directory for zlib.pc in CMakeLists.txt +- Remove gzflags from zlibvc.def in vc9 and vc10 +- Fix contrib/minizip compilation in the MinGW environment +- Update ./configure for Solaris, support --64 [Mooney] +- Remove -R. from Solaris shared build (possible security issue) +- Avoid race condition for parallel make (-j) running example +- Fix type mismatch between get_crc_table() and crc_table +- Fix parsing of version with "-" in CMakeLists.txt [Snider, Ziegler] +- Fix the path to zlib.map in CMakeLists.txt +- Force the native libtool in Mac OS X to avoid GNU libtool [Beebe] +- Add instructions to win32/Makefile.gcc for shared install [Torri] + +Changes in 1.2.6.1 (12 Feb 2012) +- Avoid the use of the Objective-C reserved name "id" +- Include io.h in gzguts.h for Microsoft compilers +- Fix problem with ./configure --prefix and gzgetc macro +- Include gz_header definition when compiling zlib solo +- Put gzflags() functionality back in zutil.c +- Avoid library header include in crc32.c for Z_SOLO +- Use name in GCC_CLASSIC as C compiler for coverage testing, if set +- Minor cleanup in contrib/minizip/zip.c [Vollant] +- Update make_vms.com [Zinser] +- Remove unnecessary gzgetc_ function +- Use optimized byte swap operations for Microsoft and GNU [Snyder] +- Fix minor typo in zlib.h comments [Rzesniowiecki] + +Changes in 1.2.6 (29 Jan 2012) +- Update the Pascal interface in contrib/pascal +- Fix function numbers for gzgetc_ in zlibvc.def files +- Fix configure.ac for contrib/minizip [Schiffer] +- Fix large-entry detection in minizip on 64-bit systems [Schiffer] +- Have ./configure use the compiler return code for error indication +- Fix CMakeLists.txt for cross compilation [McClure] +- Fix contrib/minizip/zip.c for 64-bit architectures [Dalsnes] +- Fix compilation of contrib/minizip on FreeBSD [Marquez] +- Correct suggested usages in win32/Makefile.msc [Shachar, Horvath] +- Include io.h for Turbo C / Borland C on all platforms [Truta] +- Make version explicit in contrib/minizip/configure.ac [Bosmans] +- Avoid warning for no encryption in contrib/minizip/zip.c [Vollant] +- Minor cleanup up contrib/minizip/unzip.c [Vollant] +- Fix bug when compiling minizip with C++ [Vollant] +- Protect for long name and extra fields in contrib/minizip [Vollant] +- Avoid some warnings in contrib/minizip [Vollant] +- Add -I../.. -L../.. to CFLAGS for minizip and miniunzip +- Add missing libs to minizip linker command +- Add support for VPATH builds in contrib/minizip +- Add an --enable-demos option to contrib/minizip/configure +- Add the generation of configure.log by ./configure +- Exit when required parameters not provided to win32/Makefile.gcc +- Have gzputc return the character written instead of the argument +- Use the -m option on ldconfig for BSD systems [Tobias] +- Correct in zlib.map when deflateResetKeep was added + +Changes in 1.2.5.3 (15 Jan 2012) +- Restore gzgetc function for binary compatibility +- Do not use _lseeki64 under Borland C++ [Truta] +- Update win32/Makefile.msc to build test/*.c [Truta] +- Remove old/visualc6 given CMakefile and other alternatives +- Update AS400 build files and documentation [Monnerat] +- Update win32/Makefile.gcc to build test/*.c [Truta] +- Permit stronger flushes after Z_BLOCK flushes +- Avoid extraneous empty blocks when doing empty flushes +- Permit Z_NULL arguments to deflatePending +- Allow deflatePrime() to insert bits in the middle of a stream +- Remove second empty static block for Z_PARTIAL_FLUSH +- Write out all of the available bits when using Z_BLOCK +- Insert the first two strings in the hash table after a flush + +Changes in 1.2.5.2 (17 Dec 2011) +- fix ld error: unable to find version dependency 'ZLIB_1.2.5' +- use relative symlinks for shared libs +- Avoid searching past window for Z_RLE strategy +- Assure that high-water mark initialization is always applied in deflate +- Add assertions to fill_window() in deflate.c to match comments +- Update python link in README +- Correct spelling error in gzread.c +- Fix bug in gzgets() for a concatenated empty gzip stream +- Correct error in comment for gz_make() +- Change gzread() and related to ignore junk after gzip streams +- Allow gzread() and related to continue after gzclearerr() +- Allow gzrewind() and gzseek() after a premature end-of-file +- Simplify gzseek() now that raw after gzip is ignored +- Change gzgetc() to a macro for speed (~40% speedup in testing) +- Fix gzclose() to return the actual error last encountered +- Always add large file support for windows +- Include zconf.h for windows large file support +- Include zconf.h.cmakein for windows large file support +- Update zconf.h.cmakein on make distclean +- Merge vestigial vsnprintf determination from zutil.h to gzguts.h +- Clarify how gzopen() appends in zlib.h comments +- Correct documentation of gzdirect() since junk at end now ignored +- Add a transparent write mode to gzopen() when 'T' is in the mode +- Update python link in zlib man page +- Get inffixed.h and MAKEFIXED result to match +- Add a ./config --solo option to make zlib subset with no library use +- Add undocumented inflateResetKeep() function for CAB file decoding +- Add --cover option to ./configure for gcc coverage testing +- Add #define ZLIB_CONST option to use const in the z_stream interface +- Add comment to gzdopen() in zlib.h to use dup() when using fileno() +- Note behavior of uncompress() to provide as much data as it can +- Add files in contrib/minizip to aid in building libminizip +- Split off AR options in Makefile.in and configure +- Change ON macro to Z_ARG to avoid application conflicts +- Facilitate compilation with Borland C++ for pragmas and vsnprintf +- Include io.h for Turbo C / Borland C++ +- Move example.c and minigzip.c to test/ +- Simplify incomplete code table filling in inflate_table() +- Remove code from inflate.c and infback.c that is impossible to execute +- Test the inflate code with full coverage +- Allow deflateSetDictionary, inflateSetDictionary at any time (in raw) +- Add deflateResetKeep and fix inflateResetKeep to retain dictionary +- Fix gzwrite.c to accommodate reduced memory zlib compilation +- Have inflate() with Z_FINISH avoid the allocation of a window +- Do not set strm->adler when doing raw inflate +- Fix gzeof() to behave just like feof() when read is not past end of file +- Fix bug in gzread.c when end-of-file is reached +- Avoid use of Z_BUF_ERROR in gz* functions except for premature EOF +- Document gzread() capability to read concurrently written files +- Remove hard-coding of resource compiler in CMakeLists.txt [Blammo] + +Changes in 1.2.5.1 (10 Sep 2011) +- Update FAQ entry on shared builds (#13) +- Avoid symbolic argument to chmod in Makefile.in +- Fix bug and add consts in contrib/puff [Oberhumer] +- Update contrib/puff/zeros.raw test file to have all block types +- Add full coverage test for puff in contrib/puff/Makefile +- Fix static-only-build install in Makefile.in +- Fix bug in unzGetCurrentFileInfo() in contrib/minizip [Kuno] +- Add libz.a dependency to shared in Makefile.in for parallel builds +- Spell out "number" (instead of "nb") in zlib.h for total_in, total_out +- Replace $(...) with `...` in configure for non-bash sh [Bowler] +- Add darwin* to Darwin* and solaris* to SunOS\ 5* in configure [Groffen] +- Add solaris* to Linux* in configure to allow gcc use [Groffen] +- Add *bsd* to Linux* case in configure [Bar-Lev] +- Add inffast.obj to dependencies in win32/Makefile.msc +- Correct spelling error in deflate.h [Kohler] +- Change libzdll.a again to libz.dll.a (!) in win32/Makefile.gcc +- Add test to configure for GNU C looking for gcc in output of $cc -v +- Add zlib.pc generation to win32/Makefile.gcc [Weigelt] +- Fix bug in zlib.h for _FILE_OFFSET_BITS set and _LARGEFILE64_SOURCE not +- Add comment in zlib.h that adler32_combine with len2 < 0 makes no sense +- Make NO_DIVIDE option in adler32.c much faster (thanks to John Reiser) +- Make stronger test in zconf.h to include unistd.h for LFS +- Apply Darwin patches for 64-bit file offsets to contrib/minizip [Slack] +- Fix zlib.h LFS support when Z_PREFIX used +- Add updated as400 support (removed from old) [Monnerat] +- Avoid deflate sensitivity to volatile input data +- Avoid division in adler32_combine for NO_DIVIDE +- Clarify the use of Z_FINISH with deflateBound() amount of space +- Set binary for output file in puff.c +- Use u4 type for crc_table to avoid conversion warnings +- Apply casts in zlib.h to avoid conversion warnings +- Add OF to prototypes for adler32_combine_ and crc32_combine_ [Miller] +- Improve inflateSync() documentation to note indeterminacy +- Add deflatePending() function to return the amount of pending output +- Correct the spelling of "specification" in FAQ [Randers-Pehrson] +- Add a check in configure for stdarg.h, use for gzprintf() +- Check that pointers fit in ints when gzprint() compiled old style +- Add dummy name before $(SHAREDLIBV) in Makefile [Bar-Lev, Bowler] +- Delete line in configure that adds -L. libz.a to LDFLAGS [Weigelt] +- Add debug records in assembler code [Londer] +- Update RFC references to use http://tools.ietf.org/html/... [Li] +- Add --archs option, use of libtool to configure for Mac OS X [Borstel] + +Changes in 1.2.5 (19 Apr 2010) +- Disable visibility attribute in win32/Makefile.gcc [Bar-Lev] +- Default to libdir as sharedlibdir in configure [Nieder] +- Update copyright dates on modified source files +- Update trees.c to be able to generate modified trees.h +- Exit configure for MinGW, suggesting win32/Makefile.gcc +- Check for NULL path in gz_open [Homurlu] + +Changes in 1.2.4.5 (18 Apr 2010) +- Set sharedlibdir in configure [Torok] +- Set LDFLAGS in Makefile.in [Bar-Lev] +- Avoid mkdir objs race condition in Makefile.in [Bowler] +- Add ZLIB_INTERNAL in front of internal inter-module functions and arrays +- Define ZLIB_INTERNAL to hide internal functions and arrays for GNU C +- Don't use hidden attribute when it is a warning generator (e.g. Solaris) + +Changes in 1.2.4.4 (18 Apr 2010) +- Fix CROSS_PREFIX executable testing, CHOST extract, mingw* [Torok] +- Undefine _LARGEFILE64_SOURCE in zconf.h if it is zero, but not if empty +- Try to use bash or ksh regardless of functionality of /bin/sh +- Fix configure incompatibility with NetBSD sh +- Remove attempt to run under bash or ksh since have better NetBSD fix +- Fix win32/Makefile.gcc for MinGW [Bar-Lev] +- Add diagnostic messages when using CROSS_PREFIX in configure +- Added --sharedlibdir option to configure [Weigelt] +- Use hidden visibility attribute when available [Frysinger] + +Changes in 1.2.4.3 (10 Apr 2010) +- Only use CROSS_PREFIX in configure for ar and ranlib if they exist +- Use CROSS_PREFIX for nm [Bar-Lev] +- Assume _LARGEFILE64_SOURCE defined is equivalent to true +- Avoid use of undefined symbols in #if with && and || +- Make *64 prototypes in gzguts.h consistent with functions +- Add -shared load option for MinGW in configure [Bowler] +- Move z_off64_t to public interface, use instead of off64_t +- Remove ! from shell test in configure (not portable to Solaris) +- Change +0 macro tests to -0 for possibly increased portability + +Changes in 1.2.4.2 (9 Apr 2010) +- Add consistent carriage returns to readme.txt's in masmx86 and masmx64 +- Really provide prototypes for *64 functions when building without LFS +- Only define unlink() in minigzip.c if unistd.h not included +- Update README to point to contrib/vstudio project files +- Move projects/vc6 to old/ and remove projects/ +- Include stdlib.h in minigzip.c for setmode() definition under WinCE +- Clean up assembler builds in win32/Makefile.msc [Rowe] +- Include sys/types.h for Microsoft for off_t definition +- Fix memory leak on error in gz_open() +- Symbolize nm as $NM in configure [Weigelt] +- Use TEST_LDSHARED instead of LDSHARED to link test programs [Weigelt] +- Add +0 to _FILE_OFFSET_BITS and _LFS64_LARGEFILE in case not defined +- Fix bug in gzeof() to take into account unused input data +- Avoid initialization of structures with variables in puff.c +- Updated win32/README-WIN32.txt [Rowe] + +Changes in 1.2.4.1 (28 Mar 2010) +- Remove the use of [a-z] constructs for sed in configure [gentoo 310225] +- Remove $(SHAREDLIB) from LIBS in Makefile.in [Creech] +- Restore "for debugging" comment on sprintf() in gzlib.c +- Remove fdopen for MVS from gzguts.h +- Put new README-WIN32.txt in win32 [Rowe] +- Add check for shell to configure and invoke another shell if needed +- Fix big fat stinking bug in gzseek() on uncompressed files +- Remove vestigial F_OPEN64 define in zutil.h +- Set and check the value of _LARGEFILE_SOURCE and _LARGEFILE64_SOURCE +- Avoid errors on non-LFS systems when applications define LFS macros +- Set EXE to ".exe" in configure for MINGW [Kahle] +- Match crc32() in crc32.c exactly to the prototype in zlib.h [Sherrill] +- Add prefix for cross-compilation in win32/makefile.gcc [Bar-Lev] +- Add DLL install in win32/makefile.gcc [Bar-Lev] +- Allow Linux* or linux* from uname in configure [Bar-Lev] +- Allow ldconfig to be redefined in configure and Makefile.in [Bar-Lev] +- Add cross-compilation prefixes to configure [Bar-Lev] +- Match type exactly in gz_load() invocation in gzread.c +- Match type exactly of zcalloc() in zutil.c to zlib.h alloc_func +- Provide prototypes for *64 functions when building zlib without LFS +- Don't use -lc when linking shared library on MinGW +- Remove errno.h check in configure and vestigial errno code in zutil.h + +Changes in 1.2.4 (14 Mar 2010) +- Fix VER3 extraction in configure for no fourth subversion +- Update zlib.3, add docs to Makefile.in to make .pdf out of it +- Add zlib.3.pdf to distribution +- Don't set error code in gzerror() if passed pointer is NULL +- Apply destination directory fixes to CMakeLists.txt [Lowman] +- Move #cmakedefine's to a new zconf.in.cmakein +- Restore zconf.h for builds that don't use configure or cmake +- Add distclean to dummy Makefile for convenience +- Update and improve INDEX, README, and FAQ +- Update CMakeLists.txt for the return of zconf.h [Lowman] +- Update contrib/vstudio/vc9 and vc10 [Vollant] +- Change libz.dll.a back to libzdll.a in win32/Makefile.gcc +- Apply license and readme changes to contrib/asm686 [Raiter] +- Check file name lengths and add -c option in minigzip.c [Li] +- Update contrib/amd64 and contrib/masmx86/ [Vollant] +- Avoid use of "eof" parameter in trees.c to not shadow library variable +- Update make_vms.com for removal of zlibdefs.h [Zinser] +- Update assembler code and vstudio projects in contrib [Vollant] +- Remove outdated assembler code contrib/masm686 and contrib/asm586 +- Remove old vc7 and vc8 from contrib/vstudio +- Update win32/Makefile.msc, add ZLIB_VER_SUBREVISION [Rowe] +- Fix memory leaks in gzclose_r() and gzclose_w(), file leak in gz_open() +- Add contrib/gcc_gvmat64 for longest_match and inflate_fast [Vollant] +- Remove *64 functions from win32/zlib.def (they're not 64-bit yet) +- Fix bug in void-returning vsprintf() case in gzwrite.c +- Fix name change from inflate.h in contrib/inflate86/inffas86.c +- Check if temporary file exists before removing in make_vms.com [Zinser] +- Fix make install and uninstall for --static option +- Fix usage of _MSC_VER in gzguts.h and zutil.h [Truta] +- Update readme.txt in contrib/masmx64 and masmx86 to assemble + +Changes in 1.2.3.9 (21 Feb 2010) +- Expunge gzio.c +- Move as400 build information to old +- Fix updates in contrib/minizip and contrib/vstudio +- Add const to vsnprintf test in configure to avoid warnings [Weigelt] +- Delete zconf.h (made by configure) [Weigelt] +- Change zconf.in.h to zconf.h.in per convention [Weigelt] +- Check for NULL buf in gzgets() +- Return empty string for gzgets() with len == 1 (like fgets()) +- Fix description of gzgets() in zlib.h for end-of-file, NULL return +- Update minizip to 1.1 [Vollant] +- Avoid MSVC loss of data warnings in gzread.c, gzwrite.c +- Note in zlib.h that gzerror() should be used to distinguish from EOF +- Remove use of snprintf() from gzlib.c +- Fix bug in gzseek() +- Update contrib/vstudio, adding vc9 and vc10 [Kuno, Vollant] +- Fix zconf.h generation in CMakeLists.txt [Lowman] +- Improve comments in zconf.h where modified by configure + +Changes in 1.2.3.8 (13 Feb 2010) +- Clean up text files (tabs, trailing whitespace, etc.) [Oberhumer] +- Use z_off64_t in gz_zero() and gz_skip() to match state->skip +- Avoid comparison problem when sizeof(int) == sizeof(z_off64_t) +- Revert to Makefile.in from 1.2.3.6 (live with the clutter) +- Fix missing error return in gzflush(), add zlib.h note +- Add *64 functions to zlib.map [Levin] +- Fix signed/unsigned comparison in gz_comp() +- Use SFLAGS when testing shared linking in configure +- Add --64 option to ./configure to use -m64 with gcc +- Fix ./configure --help to correctly name options +- Have make fail if a test fails [Levin] +- Avoid buffer overrun in contrib/masmx64/gvmat64.asm [Simpson] +- Remove assembler object files from contrib + +Changes in 1.2.3.7 (24 Jan 2010) +- Always gzopen() with O_LARGEFILE if available +- Fix gzdirect() to work immediately after gzopen() or gzdopen() +- Make gzdirect() more precise when the state changes while reading +- Improve zlib.h documentation in many places +- Catch memory allocation failure in gz_open() +- Complete close operation if seek forward in gzclose_w() fails +- Return Z_ERRNO from gzclose_r() if close() fails +- Return Z_STREAM_ERROR instead of EOF for gzclose() being passed NULL +- Return zero for gzwrite() errors to match zlib.h description +- Return -1 on gzputs() error to match zlib.h description +- Add zconf.in.h to allow recovery from configure modification [Weigelt] +- Fix static library permissions in Makefile.in [Weigelt] +- Avoid warnings in configure tests that hide functionality [Weigelt] +- Add *BSD and DragonFly to Linux case in configure [gentoo 123571] +- Change libzdll.a to libz.dll.a in win32/Makefile.gcc [gentoo 288212] +- Avoid access of uninitialized data for first inflateReset2 call [Gomes] +- Keep object files in subdirectories to reduce the clutter somewhat +- Remove default Makefile and zlibdefs.h, add dummy Makefile +- Add new external functions to Z_PREFIX, remove duplicates, z_z_ -> z_ +- Remove zlibdefs.h completely -- modify zconf.h instead + +Changes in 1.2.3.6 (17 Jan 2010) +- Avoid void * arithmetic in gzread.c and gzwrite.c +- Make compilers happier with const char * for gz_error message +- Avoid unused parameter warning in inflate.c +- Avoid signed-unsigned comparison warning in inflate.c +- Indent #pragma's for traditional C +- Fix usage of strwinerror() in glib.c, change to gz_strwinerror() +- Correct email address in configure for system options +- Update make_vms.com and add make_vms.com to contrib/minizip [Zinser] +- Update zlib.map [Brown] +- Fix Makefile.in for Solaris 10 make of example64 and minizip64 [Torok] +- Apply various fixes to CMakeLists.txt [Lowman] +- Add checks on len in gzread() and gzwrite() +- Add error message for no more room for gzungetc() +- Remove zlib version check in gzwrite() +- Defer compression of gzprintf() result until need to +- Use snprintf() in gzdopen() if available +- Remove USE_MMAP configuration determination (only used by minigzip) +- Remove examples/pigz.c (available separately) +- Update examples/gun.c to 1.6 + +Changes in 1.2.3.5 (8 Jan 2010) +- Add space after #if in zutil.h for some compilers +- Fix relatively harmless bug in deflate_fast() [Exarevsky] +- Fix same problem in deflate_slow() +- Add $(SHAREDLIBV) to LIBS in Makefile.in [Brown] +- Add deflate_rle() for faster Z_RLE strategy run-length encoding +- Add deflate_huff() for faster Z_HUFFMAN_ONLY encoding +- Change name of "write" variable in inffast.c to avoid library collisions +- Fix premature EOF from gzread() in gzio.c [Brown] +- Use zlib header window size if windowBits is 0 in inflateInit2() +- Remove compressBound() call in deflate.c to avoid linking compress.o +- Replace use of errno in gz* with functions, support WinCE [Alves] +- Provide alternative to perror() in minigzip.c for WinCE [Alves] +- Don't use _vsnprintf on later versions of MSVC [Lowman] +- Add CMake build script and input file [Lowman] +- Update contrib/minizip to 1.1 [Svensson, Vollant] +- Moved nintendods directory from contrib to root +- Replace gzio.c with a new set of routines with the same functionality +- Add gzbuffer(), gzoffset(), gzclose_r(), gzclose_w() as part of above +- Update contrib/minizip to 1.1b +- Change gzeof() to return 0 on error instead of -1 to agree with zlib.h + +Changes in 1.2.3.4 (21 Dec 2009) +- Use old school .SUFFIXES in Makefile.in for FreeBSD compatibility +- Update comments in configure and Makefile.in for default --shared +- Fix test -z's in configure [Marquess] +- Build examplesh and minigzipsh when not testing +- Change NULL's to Z_NULL's in deflate.c and in comments in zlib.h +- Import LDFLAGS from the environment in configure +- Fix configure to populate SFLAGS with discovered CFLAGS options +- Adapt make_vms.com to the new Makefile.in [Zinser] +- Add zlib2ansi script for C++ compilation [Marquess] +- Add _FILE_OFFSET_BITS=64 test to make test (when applicable) +- Add AMD64 assembler code for longest match to contrib [Teterin] +- Include options from $SFLAGS when doing $LDSHARED +- Simplify 64-bit file support by introducing z_off64_t type +- Make shared object files in objs directory to work around old Sun cc +- Use only three-part version number for Darwin shared compiles +- Add rc option to ar in Makefile.in for when ./configure not run +- Add -WI,-rpath,. to LDFLAGS for OSF 1 V4* +- Set LD_LIBRARYN32_PATH for SGI IRIX shared compile +- Protect against _FILE_OFFSET_BITS being defined when compiling zlib +- Rename Makefile.in targets allstatic to static and allshared to shared +- Fix static and shared Makefile.in targets to be independent +- Correct error return bug in gz_open() by setting state [Brown] +- Put spaces before ;;'s in configure for better sh compatibility +- Add pigz.c (parallel implementation of gzip) to examples/ +- Correct constant in crc32.c to UL [Leventhal] +- Reject negative lengths in crc32_combine() +- Add inflateReset2() function to work like inflateEnd()/inflateInit2() +- Include sys/types.h for _LARGEFILE64_SOURCE [Brown] +- Correct typo in doc/algorithm.txt [Janik] +- Fix bug in adler32_combine() [Zhu] +- Catch missing-end-of-block-code error in all inflates and in puff + Assures that random input to inflate eventually results in an error +- Added enough.c (calculation of ENOUGH for inftrees.h) to examples/ +- Update ENOUGH and its usage to reflect discovered bounds +- Fix gzerror() error report on empty input file [Brown] +- Add ush casts in trees.c to avoid pedantic runtime errors +- Fix typo in zlib.h uncompress() description [Reiss] +- Correct inflate() comments with regard to automatic header detection +- Remove deprecation comment on Z_PARTIAL_FLUSH (it stays) +- Put new version of gzlog (2.0) in examples with interruption recovery +- Add puff compile option to permit invalid distance-too-far streams +- Add puff TEST command options, ability to read piped input +- Prototype the *64 functions in zlib.h when _FILE_OFFSET_BITS == 64, but + _LARGEFILE64_SOURCE not defined +- Fix Z_FULL_FLUSH to truly erase the past by resetting s->strstart +- Fix deflateSetDictionary() to use all 32K for output consistency +- Remove extraneous #define MIN_LOOKAHEAD in deflate.c (in deflate.h) +- Clear bytes after deflate lookahead to avoid use of uninitialized data +- Change a limit in inftrees.c to be more transparent to Coverity Prevent +- Update win32/zlib.def with exported symbols from zlib.h +- Correct spelling errors in zlib.h [Willem, Sobrado] +- Allow Z_BLOCK for deflate() to force a new block +- Allow negative bits in inflatePrime() to delete existing bit buffer +- Add Z_TREES flush option to inflate() to return at end of trees +- Add inflateMark() to return current state information for random access +- Add Makefile for NintendoDS to contrib [Costa] +- Add -w in configure compile tests to avoid spurious warnings [Beucler] +- Fix typos in zlib.h comments for deflateSetDictionary() +- Fix EOF detection in transparent gzread() [Maier] + +Changes in 1.2.3.3 (2 October 2006) +- Make --shared the default for configure, add a --static option +- Add compile option to permit invalid distance-too-far streams +- Add inflateUndermine() function which is required to enable above +- Remove use of "this" variable name for C++ compatibility [Marquess] +- Add testing of shared library in make test, if shared library built +- Use ftello() and fseeko() if available instead of ftell() and fseek() +- Provide two versions of all functions that use the z_off_t type for + binary compatibility -- a normal version and a 64-bit offset version, + per the Large File Support Extension when _LARGEFILE64_SOURCE is + defined; use the 64-bit versions by default when _FILE_OFFSET_BITS + is defined to be 64 +- Add a --uname= option to configure to perhaps help with cross-compiling + +Changes in 1.2.3.2 (3 September 2006) +- Turn off silly Borland warnings [Hay] +- Use off64_t and define _LARGEFILE64_SOURCE when present +- Fix missing dependency on inffixed.h in Makefile.in +- Rig configure --shared to build both shared and static [Teredesai, Truta] +- Remove zconf.in.h and instead create a new zlibdefs.h file +- Fix contrib/minizip/unzip.c non-encrypted after encrypted [Vollant] +- Add treebuild.xml (see http://treebuild.metux.de/) [Weigelt] + +Changes in 1.2.3.1 (16 August 2006) +- Add watcom directory with OpenWatcom make files [Daniel] +- Remove #undef of FAR in zconf.in.h for MVS [Fedtke] +- Update make_vms.com [Zinser] +- Use -fPIC for shared build in configure [Teredesai, Nicholson] +- Use only major version number for libz.so on IRIX and OSF1 [Reinholdtsen] +- Use fdopen() (not _fdopen()) for Interix in zutil.h [Bäck] +- Add some FAQ entries about the contrib directory +- Update the MVS question in the FAQ +- Avoid extraneous reads after EOF in gzio.c [Brown] +- Correct spelling of "successfully" in gzio.c [Randers-Pehrson] +- Add comments to zlib.h about gzerror() usage [Brown] +- Set extra flags in gzip header in gzopen() like deflate() does +- Make configure options more compatible with double-dash conventions + [Weigelt] +- Clean up compilation under Solaris SunStudio cc [Rowe, Reinholdtsen] +- Fix uninstall target in Makefile.in [Truta] +- Add pkgconfig support [Weigelt] +- Use $(DESTDIR) macro in Makefile.in [Reinholdtsen, Weigelt] +- Replace set_data_type() with a more accurate detect_data_type() in + trees.c, according to the txtvsbin.txt document [Truta] +- Swap the order of #include and #include "zlib.h" in + gzio.c, example.c and minigzip.c [Truta] +- Shut up annoying VS2005 warnings about standard C deprecation [Rowe, + Truta] (where?) +- Fix target "clean" from win32/Makefile.bor [Truta] +- Create .pdb and .manifest files in win32/makefile.msc [Ziegler, Rowe] +- Update zlib www home address in win32/DLL_FAQ.txt [Truta] +- Update contrib/masmx86/inffas32.asm for VS2005 [Vollant, Van Wassenhove] +- Enable browse info in the "Debug" and "ASM Debug" configurations in + the Visual C++ 6 project, and set (non-ASM) "Debug" as default [Truta] +- Add pkgconfig support [Weigelt] +- Add ZLIB_VER_MAJOR, ZLIB_VER_MINOR and ZLIB_VER_REVISION in zlib.h, + for use in win32/zlib1.rc [Polushin, Rowe, Truta] +- Add a document that explains the new text detection scheme to + doc/txtvsbin.txt [Truta] +- Add rfc1950.txt, rfc1951.txt and rfc1952.txt to doc/ [Truta] +- Move algorithm.txt into doc/ [Truta] +- Synchronize FAQ with website +- Fix compressBound(), was low for some pathological cases [Fearnley] +- Take into account wrapper variations in deflateBound() +- Set examples/zpipe.c input and output to binary mode for Windows +- Update examples/zlib_how.html with new zpipe.c (also web site) +- Fix some warnings in examples/gzlog.c and examples/zran.c (it seems + that gcc became pickier in 4.0) +- Add zlib.map for Linux: "All symbols from zlib-1.1.4 remain + un-versioned, the patch adds versioning only for symbols introduced in + zlib-1.2.0 or later. It also declares as local those symbols which are + not designed to be exported." [Levin] +- Update Z_PREFIX list in zconf.in.h, add --zprefix option to configure +- Do not initialize global static by default in trees.c, add a response + NO_INIT_GLOBAL_POINTERS to initialize them if needed [Marquess] +- Don't use strerror() in gzio.c under WinCE [Yakimov] +- Don't use errno.h in zutil.h under WinCE [Yakimov] +- Move arguments for AR to its usage to allow replacing ar [Marot] +- Add HAVE_VISIBILITY_PRAGMA in zconf.in.h for Mozilla [Randers-Pehrson] +- Improve inflateInit() and inflateInit2() documentation +- Fix structure size comment in inflate.h +- Change configure help option from --h* to --help [Santos] + +Changes in 1.2.3 (18 July 2005) +- Apply security vulnerability fixes to contrib/infback9 as well +- Clean up some text files (carriage returns, trailing space) +- Update testzlib, vstudio, masmx64, and masmx86 in contrib [Vollant] + +Changes in 1.2.2.4 (11 July 2005) +- Add inflatePrime() function for starting inflation at bit boundary +- Avoid some Visual C warnings in deflate.c +- Avoid more silly Visual C warnings in inflate.c and inftrees.c for 64-bit + compile +- Fix some spelling errors in comments [Betts] +- Correct inflateInit2() error return documentation in zlib.h +- Add zran.c example of compressed data random access to examples + directory, shows use of inflatePrime() +- Fix cast for assignments to strm->state in inflate.c and infback.c +- Fix zlibCompileFlags() in zutil.c to use 1L for long shifts [Oberhumer] +- Move declarations of gf2 functions to right place in crc32.c [Oberhumer] +- Add cast in trees.c t avoid a warning [Oberhumer] +- Avoid some warnings in fitblk.c, gun.c, gzjoin.c in examples [Oberhumer] +- Update make_vms.com [Zinser] +- Initialize state->write in inflateReset() since copied in inflate_fast() +- Be more strict on incomplete code sets in inflate_table() and increase + ENOUGH and MAXD -- this repairs a possible security vulnerability for + invalid inflate input. Thanks to Tavis Ormandy and Markus Oberhumer for + discovering the vulnerability and providing test cases +- Add ia64 support to configure for HP-UX [Smith] +- Add error return to gzread() for format or i/o error [Levin] +- Use malloc.h for OS/2 [Necasek] + +Changes in 1.2.2.3 (27 May 2005) +- Replace 1U constants in inflate.c and inftrees.c for 64-bit compile +- Typecast fread() return values in gzio.c [Vollant] +- Remove trailing space in minigzip.c outmode (VC++ can't deal with it) +- Fix crc check bug in gzread() after gzungetc() [Heiner] +- Add the deflateTune() function to adjust internal compression parameters +- Add a fast gzip decompressor, gun.c, to examples (use of inflateBack) +- Remove an incorrect assertion in examples/zpipe.c +- Add C++ wrapper in infback9.h [Donais] +- Fix bug in inflateCopy() when decoding fixed codes +- Note in zlib.h how much deflateSetDictionary() actually uses +- Remove USE_DICT_HEAD in deflate.c (would mess up inflate if used) +- Add _WIN32_WCE to define WIN32 in zconf.in.h [Spencer] +- Don't include stderr.h or errno.h for _WIN32_WCE in zutil.h [Spencer] +- Add gzdirect() function to indicate transparent reads +- Update contrib/minizip [Vollant] +- Fix compilation of deflate.c when both ASMV and FASTEST [Oberhumer] +- Add casts in crc32.c to avoid warnings [Oberhumer] +- Add contrib/masmx64 [Vollant] +- Update contrib/asm586, asm686, masmx86, testzlib, vstudio [Vollant] + +Changes in 1.2.2.2 (30 December 2004) +- Replace structure assignments in deflate.c and inflate.c with zmemcpy to + avoid implicit memcpy calls (portability for no-library compilation) +- Increase sprintf() buffer size in gzdopen() to allow for large numbers +- Add INFLATE_STRICT to check distances against zlib header +- Improve WinCE errno handling and comments [Chang] +- Remove comment about no gzip header processing in FAQ +- Add Z_FIXED strategy option to deflateInit2() to force fixed trees +- Add updated make_vms.com [Coghlan], update README +- Create a new "examples" directory, move gzappend.c there, add zpipe.c, + fitblk.c, gzlog.[ch], gzjoin.c, and zlib_how.html +- Add FAQ entry and comments in deflate.c on uninitialized memory access +- Add Solaris 9 make options in configure [Gilbert] +- Allow strerror() usage in gzio.c for STDC +- Fix DecompressBuf in contrib/delphi/ZLib.pas [ManChesTer] +- Update contrib/masmx86/inffas32.asm and gvmat32.asm [Vollant] +- Use z_off_t for adler32_combine() and crc32_combine() lengths +- Make adler32() much faster for small len +- Use OS_CODE in deflate() default gzip header + +Changes in 1.2.2.1 (31 October 2004) +- Allow inflateSetDictionary() call for raw inflate +- Fix inflate header crc check bug for file names and comments +- Add deflateSetHeader() and gz_header structure for custom gzip headers +- Add inflateGetheader() to retrieve gzip headers +- Add crc32_combine() and adler32_combine() functions +- Add alloc_func, free_func, in_func, out_func to Z_PREFIX list +- Use zstreamp consistently in zlib.h (inflate_back functions) +- Remove GUNZIP condition from definition of inflate_mode in inflate.h + and in contrib/inflate86/inffast.S [Truta, Anderson] +- Add support for AMD64 in contrib/inflate86/inffas86.c [Anderson] +- Update projects/README.projects and projects/visualc6 [Truta] +- Update win32/DLL_FAQ.txt [Truta] +- Avoid warning under NO_GZCOMPRESS in gzio.c; fix typo [Truta] +- Deprecate Z_ASCII; use Z_TEXT instead [Truta] +- Use a new algorithm for setting strm->data_type in trees.c [Truta] +- Do not define an exit() prototype in zutil.c unless DEBUG defined +- Remove prototype of exit() from zutil.c, example.c, minigzip.c [Truta] +- Add comment in zlib.h for Z_NO_FLUSH parameter to deflate() +- Fix Darwin build version identification [Peterson] + +Changes in 1.2.2 (3 October 2004) +- Update zlib.h comments on gzip in-memory processing +- Set adler to 1 in inflateReset() to support Java test suite [Walles] +- Add contrib/dotzlib [Ravn] +- Update win32/DLL_FAQ.txt [Truta] +- Update contrib/minizip [Vollant] +- Move contrib/visual-basic.txt to old/ [Truta] +- Fix assembler builds in projects/visualc6/ [Truta] + +Changes in 1.2.1.2 (9 September 2004) +- Update INDEX file +- Fix trees.c to update strm->data_type (no one ever noticed!) +- Fix bug in error case in inflate.c, infback.c, and infback9.c [Brown] +- Add "volatile" to crc table flag declaration (for DYNAMIC_CRC_TABLE) +- Add limited multitasking protection to DYNAMIC_CRC_TABLE +- Add NO_vsnprintf for VMS in zutil.h [Mozilla] +- Don't declare strerror() under VMS [Mozilla] +- Add comment to DYNAMIC_CRC_TABLE to use get_crc_table() to initialize +- Update contrib/ada [Anisimkov] +- Update contrib/minizip [Vollant] +- Fix configure to not hardcode directories for Darwin [Peterson] +- Fix gzio.c to not return error on empty files [Brown] +- Fix indentation; update version in contrib/delphi/ZLib.pas and + contrib/pascal/zlibpas.pas [Truta] +- Update mkasm.bat in contrib/masmx86 [Truta] +- Update contrib/untgz [Truta] +- Add projects/README.projects [Truta] +- Add project for MS Visual C++ 6.0 in projects/visualc6 [Cadieux, Truta] +- Update win32/DLL_FAQ.txt [Truta] +- Update list of Z_PREFIX symbols in zconf.h [Randers-Pehrson, Truta] +- Remove an unnecessary assignment to curr in inftrees.c [Truta] +- Add OS/2 to exe builds in configure [Poltorak] +- Remove err dummy parameter in zlib.h [Kientzle] + +Changes in 1.2.1.1 (9 January 2004) +- Update email address in README +- Several FAQ updates +- Fix a big fat bug in inftrees.c that prevented decoding valid + dynamic blocks with only literals and no distance codes -- + Thanks to "Hot Emu" for the bug report and sample file +- Add a note to puff.c on no distance codes case + +Changes in 1.2.1 (17 November 2003) +- Remove a tab in contrib/gzappend/gzappend.c +- Update some interfaces in contrib for new zlib functions +- Update zlib version number in some contrib entries +- Add Windows CE definition for ptrdiff_t in zutil.h [Mai, Truta] +- Support shared libraries on Hurd and KFreeBSD [Brown] +- Fix error in NO_DIVIDE option of adler32.c + +Changes in 1.2.0.8 (4 November 2003) +- Update version in contrib/delphi/ZLib.pas and contrib/pascal/zlibpas.pas +- Add experimental NO_DIVIDE #define in adler32.c + - Possibly faster on some processors (let me know if it is) +- Correct Z_BLOCK to not return on first inflate call if no wrap +- Fix strm->data_type on inflate() return to correctly indicate EOB +- Add deflatePrime() function for appending in the middle of a byte +- Add contrib/gzappend for an example of appending to a stream +- Update win32/DLL_FAQ.txt [Truta] +- Delete Turbo C comment in README [Truta] +- Improve some indentation in zconf.h [Truta] +- Fix infinite loop on bad input in configure script [Church] +- Fix gzeof() for concatenated gzip files [Johnson] +- Add example to contrib/visual-basic.txt [Michael B.] +- Add -p to mkdir's in Makefile.in [vda] +- Fix configure to properly detect presence or lack of printf functions +- Add AS400 support [Monnerat] +- Add a little Cygwin support [Wilson] + +Changes in 1.2.0.7 (21 September 2003) +- Correct some debug formats in contrib/infback9 +- Cast a type in a debug statement in trees.c +- Change search and replace delimiter in configure from % to # [Beebe] +- Update contrib/untgz to 0.2 with various fixes [Truta] +- Add build support for Amiga [Nikl] +- Remove some directories in old that have been updated to 1.2 +- Add dylib building for Mac OS X in configure and Makefile.in +- Remove old distribution stuff from Makefile +- Update README to point to DLL_FAQ.txt, and add comment on Mac OS X +- Update links in README + +Changes in 1.2.0.6 (13 September 2003) +- Minor FAQ updates +- Update contrib/minizip to 1.00 [Vollant] +- Remove test of gz functions in example.c when GZ_COMPRESS defined [Truta] +- Update POSTINC comment for 68060 [Nikl] +- Add contrib/infback9 with deflate64 decoding (unsupported) +- For MVS define NO_vsnprintf and undefine FAR [van Burik] +- Add pragma for fdopen on MVS [van Burik] + +Changes in 1.2.0.5 (8 September 2003) +- Add OF to inflateBackEnd() declaration in zlib.h +- Remember start when using gzdopen in the middle of a file +- Use internal off_t counters in gz* functions to properly handle seeks +- Perform more rigorous check for distance-too-far in inffast.c +- Add Z_BLOCK flush option to return from inflate at block boundary +- Set strm->data_type on return from inflate + - Indicate bits unused, if at block boundary, and if in last block +- Replace size_t with ptrdiff_t in crc32.c, and check for correct size +- Add condition so old NO_DEFLATE define still works for compatibility +- FAQ update regarding the Windows DLL [Truta] +- INDEX update: add qnx entry, remove aix entry [Truta] +- Install zlib.3 into mandir [Wilson] +- Move contrib/zlib_dll_FAQ.txt to win32/DLL_FAQ.txt; update [Truta] +- Adapt the zlib interface to the new DLL convention guidelines [Truta] +- Introduce ZLIB_WINAPI macro to allow the export of functions using + the WINAPI calling convention, for Visual Basic [Vollant, Truta] +- Update msdos and win32 scripts and makefiles [Truta] +- Export symbols by name, not by ordinal, in win32/zlib.def [Truta] +- Add contrib/ada [Anisimkov] +- Move asm files from contrib/vstudio/vc70_32 to contrib/asm386 [Truta] +- Rename contrib/asm386 to contrib/masmx86 [Truta, Vollant] +- Add contrib/masm686 [Truta] +- Fix offsets in contrib/inflate86 and contrib/masmx86/inffas32.asm + [Truta, Vollant] +- Update contrib/delphi; rename to contrib/pascal; add example [Truta] +- Remove contrib/delphi2; add a new contrib/delphi [Truta] +- Avoid inclusion of the nonstandard in contrib/iostream, + and fix some method prototypes [Truta] +- Fix the ZCR_SEED2 constant to avoid warnings in contrib/minizip + [Truta] +- Avoid the use of backslash (\) in contrib/minizip [Vollant] +- Fix file time handling in contrib/untgz; update makefiles [Truta] +- Update contrib/vstudio/vc70_32 to comply with the new DLL guidelines + [Vollant] +- Remove contrib/vstudio/vc15_16 [Vollant] +- Rename contrib/vstudio/vc70_32 to contrib/vstudio/vc7 [Truta] +- Update README.contrib [Truta] +- Invert the assignment order of match_head and s->prev[...] in + INSERT_STRING [Truta] +- Compare TOO_FAR with 32767 instead of 32768, to avoid 16-bit warnings + [Truta] +- Compare function pointers with 0, not with NULL or Z_NULL [Truta] +- Fix prototype of syncsearch in inflate.c [Truta] +- Introduce ASMINF macro to be enabled when using an ASM implementation + of inflate_fast [Truta] +- Change NO_DEFLATE to NO_GZCOMPRESS [Truta] +- Modify test_gzio in example.c to take a single file name as a + parameter [Truta] +- Exit the example.c program if gzopen fails [Truta] +- Add type casts around strlen in example.c [Truta] +- Remove casting to sizeof in minigzip.c; give a proper type + to the variable compared with SUFFIX_LEN [Truta] +- Update definitions of STDC and STDC99 in zconf.h [Truta] +- Synchronize zconf.h with the new Windows DLL interface [Truta] +- Use SYS16BIT instead of __32BIT__ to distinguish between + 16- and 32-bit platforms [Truta] +- Use far memory allocators in small 16-bit memory models for + Turbo C [Truta] +- Add info about the use of ASMV, ASMINF and ZLIB_WINAPI in + zlibCompileFlags [Truta] +- Cygwin has vsnprintf [Wilson] +- In Windows16, OS_CODE is 0, as in MSDOS [Truta] +- In Cygwin, OS_CODE is 3 (Unix), not 11 (Windows32) [Wilson] + +Changes in 1.2.0.4 (10 August 2003) +- Minor FAQ updates +- Be more strict when checking inflateInit2's windowBits parameter +- Change NO_GUNZIP compile option to NO_GZIP to cover deflate as well +- Add gzip wrapper option to deflateInit2 using windowBits +- Add updated QNX rule in configure and qnx directory [Bonnefoy] +- Make inflate distance-too-far checks more rigorous +- Clean up FAR usage in inflate +- Add casting to sizeof() in gzio.c and minigzip.c + +Changes in 1.2.0.3 (19 July 2003) +- Fix silly error in gzungetc() implementation [Vollant] +- Update contrib/minizip and contrib/vstudio [Vollant] +- Fix printf format in example.c +- Correct cdecl support in zconf.in.h [Anisimkov] +- Minor FAQ updates + +Changes in 1.2.0.2 (13 July 2003) +- Add ZLIB_VERNUM in zlib.h for numerical preprocessor comparisons +- Attempt to avoid warnings in crc32.c for pointer-int conversion +- Add AIX to configure, remove aix directory [Bakker] +- Add some casts to minigzip.c +- Improve checking after insecure sprintf() or vsprintf() calls +- Remove #elif's from crc32.c +- Change leave label to inf_leave in inflate.c and infback.c to avoid + library conflicts +- Remove inflate gzip decoding by default--only enable gzip decoding by + special request for stricter backward compatibility +- Add zlibCompileFlags() function to return compilation information +- More typecasting in deflate.c to avoid warnings +- Remove leading underscore from _Capital #defines [Truta] +- Fix configure to link shared library when testing +- Add some Windows CE target adjustments [Mai] +- Remove #define ZLIB_DLL in zconf.h [Vollant] +- Add zlib.3 [Rodgers] +- Update RFC URL in deflate.c and algorithm.txt [Mai] +- Add zlib_dll_FAQ.txt to contrib [Truta] +- Add UL to some constants [Truta] +- Update minizip and vstudio [Vollant] +- Remove vestigial NEED_DUMMY_RETURN from zconf.in.h +- Expand use of NO_DUMMY_DECL to avoid all dummy structures +- Added iostream3 to contrib [Schwardt] +- Replace rewind() with fseek() for WinCE [Truta] +- Improve setting of zlib format compression level flags + - Report 0 for huffman and rle strategies and for level == 0 or 1 + - Report 2 only for level == 6 +- Only deal with 64K limit when necessary at compile time [Truta] +- Allow TOO_FAR check to be turned off at compile time [Truta] +- Add gzclearerr() function [Souza] +- Add gzungetc() function + +Changes in 1.2.0.1 (17 March 2003) +- Add Z_RLE strategy for run-length encoding [Truta] + - When Z_RLE requested, restrict matches to distance one + - Update zlib.h, minigzip.c, gzopen(), gzdopen() for Z_RLE +- Correct FASTEST compilation to allow level == 0 +- Clean up what gets compiled for FASTEST +- Incorporate changes to zconf.in.h [Vollant] + - Refine detection of Turbo C need for dummy returns + - Refine ZLIB_DLL compilation + - Include additional header file on VMS for off_t typedef +- Try to use _vsnprintf where it supplants vsprintf [Vollant] +- Add some casts in inffast.c +- Enhance comments in zlib.h on what happens if gzprintf() tries to + write more than 4095 bytes before compression +- Remove unused state from inflateBackEnd() +- Remove exit(0) from minigzip.c, example.c +- Get rid of all those darn tabs +- Add "check" target to Makefile.in that does the same thing as "test" +- Add "mostlyclean" and "maintainer-clean" targets to Makefile.in +- Update contrib/inflate86 [Anderson] +- Update contrib/testzlib, contrib/vstudio, contrib/minizip [Vollant] +- Add msdos and win32 directories with makefiles [Truta] +- More additions and improvements to the FAQ + +Changes in 1.2.0 (9 March 2003) +- New and improved inflate code + - About 20% faster + - Does not allocate 32K window unless and until needed + - Automatically detects and decompresses gzip streams + - Raw inflate no longer needs an extra dummy byte at end + - Added inflateBack functions using a callback interface--even faster + than inflate, useful for file utilities (gzip, zip) + - Added inflateCopy() function to record state for random access on + externally generated deflate streams (e.g. in gzip files) + - More readable code (I hope) +- New and improved crc32() + - About 50% faster, thanks to suggestions from Rodney Brown +- Add deflateBound() and compressBound() functions +- Fix memory leak in deflateInit2() +- Permit setting dictionary for raw deflate (for parallel deflate) +- Fix const declaration for gzwrite() +- Check for some malloc() failures in gzio.c +- Fix bug in gzopen() on single-byte file 0x1f +- Fix bug in gzread() on concatenated file with 0x1f at end of buffer + and next buffer doesn't start with 0x8b +- Fix uncompress() to return Z_DATA_ERROR on truncated input +- Free memory at end of example.c +- Remove MAX #define in trees.c (conflicted with some libraries) +- Fix static const's in deflate.c, gzio.c, and zutil.[ch] +- Declare malloc() and free() in gzio.c if STDC not defined +- Use malloc() instead of calloc() in zutil.c if int big enough +- Define STDC for AIX +- Add aix/ with approach for compiling shared library on AIX +- Add HP-UX support for shared libraries in configure +- Add OpenUNIX support for shared libraries in configure +- Use $cc instead of gcc to build shared library +- Make prefix directory if needed when installing +- Correct Macintosh avoidance of typedef Byte in zconf.h +- Correct Turbo C memory allocation when under Linux +- Use libz.a instead of -lz in Makefile (assure use of compiled library) +- Update configure to check for snprintf or vsnprintf functions and their + return value, warn during make if using an insecure function +- Fix configure problem with compile-time knowledge of HAVE_UNISTD_H that + is lost when library is used--resolution is to build new zconf.h +- Documentation improvements (in zlib.h): + - Document raw deflate and inflate + - Update RFCs URL + - Point out that zlib and gzip formats are different + - Note that Z_BUF_ERROR is not fatal + - Document string limit for gzprintf() and possible buffer overflow + - Note requirement on avail_out when flushing + - Note permitted values of flush parameter of inflate() +- Add some FAQs (and even answers) to the FAQ +- Add contrib/inflate86/ for x86 faster inflate +- Add contrib/blast/ for PKWare Data Compression Library decompression +- Add contrib/puff/ simple inflate for deflate format description + +Changes in 1.1.4 (11 March 2002) +- ZFREE was repeated on same allocation on some error conditions + This creates a security problem described in + http://www.zlib.org/advisory-2002-03-11.txt +- Returned incorrect error (Z_MEM_ERROR) on some invalid data +- Avoid accesses before window for invalid distances with inflate window + less than 32K +- force windowBits > 8 to avoid a bug in the encoder for a window size + of 256 bytes. (A complete fix will be available in 1.1.5) + +Changes in 1.1.3 (9 July 1998) +- fix "an inflate input buffer bug that shows up on rare but persistent + occasions" (Mark) +- fix gzread and gztell for concatenated .gz files (Didier Le Botlan) +- fix gzseek(..., SEEK_SET) in write mode +- fix crc check after a gzeek (Frank Faubert) +- fix miniunzip when the last entry in a zip file is itself a zip file + (J Lillge) +- add contrib/asm586 and contrib/asm686 (Brian Raiter) + See http://www.muppetlabs.com/~breadbox/software/assembly.html +- add support for Delphi 3 in contrib/delphi (Bob Dellaca) +- add support for C++Builder 3 and Delphi 3 in contrib/delphi2 (Davide Moretti) +- do not exit prematurely in untgz if 0 at start of block (Magnus Holmgren) +- use macro EXTERN instead of extern to support DLL for BeOS (Sander Stoks) +- added a FAQ file + +- Support gzdopen on Mac with Metrowerks (Jason Linhart) +- Do not redefine Byte on Mac (Brad Pettit & Jason Linhart) +- define SEEK_END too if SEEK_SET is not defined (Albert Chin-A-Young) +- avoid some warnings with Borland C (Tom Tanner) +- fix a problem in contrib/minizip/zip.c for 16-bit MSDOS (Gilles Vollant) +- emulate utime() for WIN32 in contrib/untgz (Gilles Vollant) +- allow several arguments to configure (Tim Mooney, Frodo Looijaard) +- use libdir and includedir in Makefile.in (Tim Mooney) +- support shared libraries on OSF1 V4 (Tim Mooney) +- remove so_locations in "make clean" (Tim Mooney) +- fix maketree.c compilation error (Glenn, Mark) +- Python interface to zlib now in Python 1.5 (Jeremy Hylton) +- new Makefile.riscos (Rich Walker) +- initialize static descriptors in trees.c for embedded targets (Nick Smith) +- use "foo-gz" in example.c for RISCOS and VMS (Nick Smith) +- add the OS/2 files in Makefile.in too (Andrew Zabolotny) +- fix fdopen and halloc macros for Microsoft C 6.0 (Tom Lane) +- fix maketree.c to allow clean compilation of inffixed.h (Mark) +- fix parameter check in deflateCopy (Gunther Nikl) +- cleanup trees.c, use compressed_len only in debug mode (Christian Spieler) +- Many portability patches by Christian Spieler: + . zutil.c, zutil.h: added "const" for zmem* + . Make_vms.com: fixed some typos + . Make_vms.com: msdos/Makefile.*: removed zutil.h from some dependency lists + . msdos/Makefile.msc: remove "default rtl link library" info from obj files + . msdos/Makefile.*: use model-dependent name for the built zlib library + . msdos/Makefile.emx, nt/Makefile.emx, nt/Makefile.gcc: + new makefiles, for emx (DOS/OS2), emx&rsxnt and mingw32 (Windows 9x / NT) +- use define instead of typedef for Bytef also for MSC small/medium (Tom Lane) +- replace __far with _far for better portability (Christian Spieler, Tom Lane) +- fix test for errno.h in configure (Tim Newsham) + +Changes in 1.1.2 (19 March 98) +- added contrib/minzip, mini zip and unzip based on zlib (Gilles Vollant) + See http://www.winimage.com/zLibDll/unzip.html +- preinitialize the inflate tables for fixed codes, to make the code + completely thread safe (Mark) +- some simplifications and slight speed-up to the inflate code (Mark) +- fix gzeof on non-compressed files (Allan Schrum) +- add -std1 option in configure for OSF1 to fix gzprintf (Martin Mokrejs) +- use default value of 4K for Z_BUFSIZE for 16-bit MSDOS (Tim Wegner + Glenn) +- added os2/Makefile.def and os2/zlib.def (Andrew Zabolotny) +- add shared lib support for UNIX_SV4.2MP (MATSUURA Takanori) +- do not wrap extern "C" around system includes (Tom Lane) +- mention zlib binding for TCL in README (Andreas Kupries) +- added amiga/Makefile.pup for Amiga powerUP SAS/C PPC (Andreas Kleinert) +- allow "make install prefix=..." even after configure (Glenn Randers-Pehrson) +- allow "configure --prefix $HOME" (Tim Mooney) +- remove warnings in example.c and gzio.c (Glenn Randers-Pehrson) +- move Makefile.sas to amiga/Makefile.sas + +Changes in 1.1.1 (27 Feb 98) +- fix macros _tr_tally_* in deflate.h for debug mode (Glenn Randers-Pehrson) +- remove block truncation heuristic which had very marginal effect for zlib + (smaller lit_bufsize than in gzip 1.2.4) and degraded a little the + compression ratio on some files. This also allows inlining _tr_tally for + matches in deflate_slow +- added msdos/Makefile.w32 for WIN32 Microsoft Visual C++ (Bob Frazier) + +Changes in 1.1.0 (24 Feb 98) +- do not return STREAM_END prematurely in inflate (John Bowler) +- revert to the zlib 1.0.8 inflate to avoid the gcc 2.8.0 bug (Jeremy Buhler) +- compile with -DFASTEST to get compression code optimized for speed only +- in minigzip, try mmap'ing the input file first (Miguel Albrecht) +- increase size of I/O buffers in minigzip.c and gzio.c (not a big gain + on Sun but significant on HP) + +- add a pointer to experimental unzip library in README (Gilles Vollant) +- initialize variable gcc in configure (Chris Herborth) + +Changes in 1.0.9 (17 Feb 1998) +- added gzputs and gzgets functions +- do not clear eof flag in gzseek (Mark Diekhans) +- fix gzseek for files in transparent mode (Mark Diekhans) +- do not assume that vsprintf returns the number of bytes written (Jens Krinke) +- replace EXPORT with ZEXPORT to avoid conflict with other programs +- added compress2 in zconf.h, zlib.def, zlib.dnt +- new asm code from Gilles Vollant in contrib/asm386 +- simplify the inflate code (Mark): + . Replace ZALLOC's in huft_build() with single ZALLOC in inflate_blocks_new() + . ZALLOC the length list in inflate_trees_fixed() instead of using stack + . ZALLOC the value area for huft_build() instead of using stack + . Simplify Z_FINISH check in inflate() + +- Avoid gcc 2.8.0 comparison bug a little differently than zlib 1.0.8 +- in inftrees.c, avoid cc -O bug on HP (Farshid Elahi) +- in zconf.h move the ZLIB_DLL stuff earlier to avoid problems with + the declaration of FAR (Gilles Vollant) +- install libz.so* with mode 755 (executable) instead of 644 (Marc Lehmann) +- read_buf buf parameter of type Bytef* instead of charf* +- zmemcpy parameters are of type Bytef*, not charf* (Joseph Strout) +- do not redeclare unlink in minigzip.c for WIN32 (John Bowler) +- fix check for presence of directories in "make install" (Ian Willis) + +Changes in 1.0.8 (27 Jan 1998) +- fixed offsets in contrib/asm386/gvmat32.asm (Gilles Vollant) +- fix gzgetc and gzputc for big endian systems (Markus Oberhumer) +- added compress2() to allow setting the compression level +- include sys/types.h to get off_t on some systems (Marc Lehmann & QingLong) +- use constant arrays for the static trees in trees.c instead of computing + them at run time (thanks to Ken Raeburn for this suggestion). To create + trees.h, compile with GEN_TREES_H and run "make test" +- check return code of example in "make test" and display result +- pass minigzip command line options to file_compress +- simplifying code of inflateSync to avoid gcc 2.8 bug + +- support CC="gcc -Wall" in configure -s (QingLong) +- avoid a flush caused by ftell in gzopen for write mode (Ken Raeburn) +- fix test for shared library support to avoid compiler warnings +- zlib.lib -> zlib.dll in msdos/zlib.rc (Gilles Vollant) +- check for TARGET_OS_MAC in addition to MACOS (Brad Pettit) +- do not use fdopen for Metrowerks on Mac (Brad Pettit)) +- add checks for gzputc and gzputc in example.c +- avoid warnings in gzio.c and deflate.c (Andreas Kleinert) +- use const for the CRC table (Ken Raeburn) +- fixed "make uninstall" for shared libraries +- use Tracev instead of Trace in infblock.c +- in example.c use correct compressed length for test_sync +- suppress +vnocompatwarnings in configure for HPUX (not always supported) + +Changes in 1.0.7 (20 Jan 1998) +- fix gzseek which was broken in write mode +- return error for gzseek to negative absolute position +- fix configure for Linux (Chun-Chung Chen) +- increase stack space for MSC (Tim Wegner) +- get_crc_table and inflateSyncPoint are EXPORTed (Gilles Vollant) +- define EXPORTVA for gzprintf (Gilles Vollant) +- added man page zlib.3 (Rick Rodgers) +- for contrib/untgz, fix makedir() and improve Makefile + +- check gzseek in write mode in example.c +- allocate extra buffer for seeks only if gzseek is actually called +- avoid signed/unsigned comparisons (Tim Wegner, Gilles Vollant) +- add inflateSyncPoint in zconf.h +- fix list of exported functions in nt/zlib.dnt and mdsos/zlib.def + +Changes in 1.0.6 (19 Jan 1998) +- add functions gzprintf, gzputc, gzgetc, gztell, gzeof, gzseek, gzrewind and + gzsetparams (thanks to Roland Giersig and Kevin Ruland for some of this code) +- Fix a deflate bug occurring only with compression level 0 (thanks to + Andy Buckler for finding this one) +- In minigzip, pass transparently also the first byte for .Z files +- return Z_BUF_ERROR instead of Z_OK if output buffer full in uncompress() +- check Z_FINISH in inflate (thanks to Marc Schluper) +- Implement deflateCopy (thanks to Adam Costello) +- make static libraries by default in configure, add --shared option +- move MSDOS or Windows specific files to directory msdos +- suppress the notion of partial flush to simplify the interface + (but the symbol Z_PARTIAL_FLUSH is kept for compatibility with 1.0.4) +- suppress history buffer provided by application to simplify the interface + (this feature was not implemented anyway in 1.0.4) +- next_in and avail_in must be initialized before calling inflateInit or + inflateInit2 +- add EXPORT in all exported functions (for Windows DLL) +- added Makefile.nt (thanks to Stephen Williams) +- added the unsupported "contrib" directory: + contrib/asm386/ by Gilles Vollant + 386 asm code replacing longest_match() + contrib/iostream/ by Kevin Ruland + A C++ I/O streams interface to the zlib gz* functions + contrib/iostream2/ by Tyge Løvset + Another C++ I/O streams interface + contrib/untgz/ by "Pedro A. Aranda Guti\irrez" + A very simple tar.gz file extractor using zlib + contrib/visual-basic.txt by Carlos Rios + How to use compress(), uncompress() and the gz* functions from VB +- pass params -f (filtered data), -h (huffman only), -1 to -9 (compression + level) in minigzip (thanks to Tom Lane) + +- use const for rommable constants in deflate +- added test for gzseek and gztell in example.c +- add undocumented function inflateSyncPoint() (hack for Paul Mackerras) +- add undocumented function zError to convert error code to string + (for Tim Smithers) +- Allow compilation of gzio with -DNO_DEFLATE to avoid the compression code +- Use default memcpy for Symantec MSDOS compiler +- Add EXPORT keyword for check_func (needed for Windows DLL) +- add current directory to LD_LIBRARY_PATH for "make test" +- create also a link for libz.so.1 +- added support for FUJITSU UXP/DS (thanks to Toshiaki Nomura) +- use $(SHAREDLIB) instead of libz.so in Makefile.in (for HPUX) +- added -soname for Linux in configure (Chun-Chung Chen, +- assign numbers to the exported functions in zlib.def (for Windows DLL) +- add advice in zlib.h for best usage of deflateSetDictionary +- work around compiler bug on Atari (cast Z_NULL in call of s->checkfn) +- allow compilation with ANSI keywords only enabled for TurboC in large model +- avoid "versionString"[0] (Borland bug) +- add NEED_DUMMY_RETURN for Borland +- use variable z_verbose for tracing in debug mode (L. Peter Deutsch) +- allow compilation with CC +- defined STDC for OS/2 (David Charlap) +- limit external names to 8 chars for MVS (Thomas Lund) +- in minigzip.c, use static buffers only for 16-bit systems +- fix suffix check for "minigzip -d foo.gz" +- do not return an error for the 2nd of two consecutive gzflush() (Felix Lee) +- use _fdopen instead of fdopen for MSC >= 6.0 (Thomas Fanslau) +- added makelcc.bat for lcc-win32 (Tom St Denis) +- in Makefile.dj2, use copy and del instead of install and rm (Frank Donahoe) +- Avoid expanded $Id$. Use "rcs -kb" or "cvs admin -kb" to avoid Id expansion +- check for unistd.h in configure (for off_t) +- remove useless check parameter in inflate_blocks_free +- avoid useless assignment of s->check to itself in inflate_blocks_new +- do not flush twice in gzclose (thanks to Ken Raeburn) +- rename FOPEN as F_OPEN to avoid clash with /usr/include/sys/file.h +- use NO_ERRNO_H instead of enumeration of operating systems with errno.h +- work around buggy fclose on pipes for HP/UX +- support zlib DLL with BORLAND C++ 5.0 (thanks to Glenn Randers-Pehrson) +- fix configure if CC is already equal to gcc + +Changes in 1.0.5 (3 Jan 98) +- Fix inflate to terminate gracefully when fed corrupted or invalid data +- Use const for rommable constants in inflate +- Eliminate memory leaks on error conditions in inflate +- Removed some vestigial code in inflate +- Update web address in README + +Changes in 1.0.4 (24 Jul 96) +- In very rare conditions, deflate(s, Z_FINISH) could fail to produce an EOF + bit, so the decompressor could decompress all the correct data but went + on to attempt decompressing extra garbage data. This affected minigzip too +- zlibVersion and gzerror return const char* (needed for DLL) +- port to RISCOS (no fdopen, no multiple dots, no unlink, no fileno) +- use z_error only for DEBUG (avoid problem with DLLs) + +Changes in 1.0.3 (2 Jul 96) +- use z_streamp instead of z_stream *, which is now a far pointer in MSDOS + small and medium models; this makes the library incompatible with previous + versions for these models. (No effect in large model or on other systems.) +- return OK instead of BUF_ERROR if previous deflate call returned with + avail_out as zero but there is nothing to do +- added memcmp for non STDC compilers +- define NO_DUMMY_DECL for more Mac compilers (.h files merged incorrectly) +- define __32BIT__ if __386__ or i386 is defined (pb. with Watcom and SCO) +- better check for 16-bit mode MSC (avoids problem with Symantec) + +Changes in 1.0.2 (23 May 96) +- added Windows DLL support +- added a function zlibVersion (for the DLL support) +- fixed declarations using Bytef in infutil.c (pb with MSDOS medium model) +- Bytef is define's instead of typedef'd only for Borland C +- avoid reading uninitialized memory in example.c +- mention in README that the zlib format is now RFC1950 +- updated Makefile.dj2 +- added algorithm.doc + +Changes in 1.0.1 (20 May 96) [1.0 skipped to avoid confusion] +- fix array overlay in deflate.c which sometimes caused bad compressed data +- fix inflate bug with empty stored block +- fix MSDOS medium model which was broken in 0.99 +- fix deflateParams() which could generate bad compressed data +- Bytef is define'd instead of typedef'ed (work around Borland bug) +- added an INDEX file +- new makefiles for DJGPP (Makefile.dj2), 32-bit Borland (Makefile.b32), + Watcom (Makefile.wat), Amiga SAS/C (Makefile.sas) +- speed up adler32 for modern machines without auto-increment +- added -ansi for IRIX in configure +- static_init_done in trees.c is an int +- define unlink as delete for VMS +- fix configure for QNX +- add configure branch for SCO and HPUX +- avoid many warnings (unused variables, dead assignments, etc...) +- no fdopen for BeOS +- fix the Watcom fix for 32 bit mode (define FAR as empty) +- removed redefinition of Byte for MKWERKS +- work around an MWKERKS bug (incorrect merge of all .h files) + +Changes in 0.99 (27 Jan 96) +- allow preset dictionary shared between compressor and decompressor +- allow compression level 0 (no compression) +- add deflateParams in zlib.h: allow dynamic change of compression level + and compression strategy +- test large buffers and deflateParams in example.c +- add optional "configure" to build zlib as a shared library +- suppress Makefile.qnx, use configure instead +- fixed deflate for 64-bit systems (detected on Cray) +- fixed inflate_blocks for 64-bit systems (detected on Alpha) +- declare Z_DEFLATED in zlib.h (possible parameter for deflateInit2) +- always return Z_BUF_ERROR when deflate() has nothing to do +- deflateInit and inflateInit are now macros to allow version checking +- prefix all global functions and types with z_ with -DZ_PREFIX +- make falloc completely reentrant (inftrees.c) +- fixed very unlikely race condition in ct_static_init +- free in reverse order of allocation to help memory manager +- use zlib-1.0/* instead of zlib/* inside the tar.gz +- make zlib warning-free with "gcc -O3 -Wall -Wwrite-strings -Wpointer-arith + -Wconversion -Wstrict-prototypes -Wmissing-prototypes" +- allow gzread on concatenated .gz files +- deflateEnd now returns Z_DATA_ERROR if it was premature +- deflate is finally (?) fully deterministic (no matches beyond end of input) +- Document Z_SYNC_FLUSH +- add uninstall in Makefile +- Check for __cpluplus in zlib.h +- Better test in ct_align for partial flush +- avoid harmless warnings for Borland C++ +- initialize hash_head in deflate.c +- avoid warning on fdopen (gzio.c) for HP cc -Aa +- include stdlib.h for STDC compilers +- include errno.h for Cray +- ignore error if ranlib doesn't exist +- call ranlib twice for NeXTSTEP +- use exec_prefix instead of prefix for libz.a +- renamed ct_* as _tr_* to avoid conflict with applications +- clear z->msg in inflateInit2 before any error return +- initialize opaque in example.c, gzio.c, deflate.c and inflate.c +- fixed typo in zconf.h (_GNUC__ => __GNUC__) +- check for WIN32 in zconf.h and zutil.c (avoid farmalloc in 32-bit mode) +- fix typo in Make_vms.com (f$trnlnm -> f$getsyi) +- in fcalloc, normalize pointer if size > 65520 bytes +- don't use special fcalloc for 32 bit Borland C++ +- use STDC instead of __GO32__ to avoid redeclaring exit, calloc, etc. +- use Z_BINARY instead of BINARY +- document that gzclose after gzdopen will close the file +- allow "a" as mode in gzopen +- fix error checking in gzread +- allow skipping .gz extra-field on pipes +- added reference to Perl interface in README +- put the crc table in FAR data (I dislike more and more the medium model :) +- added get_crc_table +- added a dimension to all arrays (Borland C can't count) +- workaround Borland C bug in declaration of inflate_codes_new & inflate_fast +- guard against multiple inclusion of *.h (for precompiled header on Mac) +- Watcom C pretends to be Microsoft C small model even in 32 bit mode +- don't use unsized arrays to avoid silly warnings by Visual C++: + warning C4746: 'inflate_mask' : unsized array treated as '__far' + (what's wrong with far data in far model?) +- define enum out of inflate_blocks_state to allow compilation with C++ + +Changes in 0.95 (16 Aug 95) +- fix MSDOS small and medium model (now easier to adapt to any compiler) +- inlined send_bits +- fix the final (:-) bug for deflate with flush (output was correct but + not completely flushed in rare occasions) +- default window size is same for compression and decompression + (it's now sufficient to set MAX_WBITS in zconf.h) +- voidp -> voidpf and voidnp -> voidp (for consistency with other + typedefs and because voidnp was not near in large model) + +Changes in 0.94 (13 Aug 95) +- support MSDOS medium model +- fix deflate with flush (could sometimes generate bad output) +- fix deflateReset (zlib header was incorrectly suppressed) +- added support for VMS +- allow a compression level in gzopen() +- gzflush now calls fflush +- For deflate with flush, flush even if no more input is provided +- rename libgz.a as libz.a +- avoid complex expression in infcodes.c triggering Turbo C bug +- work around a problem with gcc on Alpha (in INSERT_STRING) +- don't use inline functions (problem with some gcc versions) +- allow renaming of Byte, uInt, etc... with #define +- avoid warning about (unused) pointer before start of array in deflate.c +- avoid various warnings in gzio.c, example.c, infblock.c, adler32.c, zutil.c +- avoid reserved word 'new' in trees.c + +Changes in 0.93 (25 June 95) +- temporarily disable inline functions +- make deflate deterministic +- give enough lookahead for PARTIAL_FLUSH +- Set binary mode for stdin/stdout in minigzip.c for OS/2 +- don't even use signed char in inflate (not portable enough) +- fix inflate memory leak for segmented architectures + +Changes in 0.92 (3 May 95) +- don't assume that char is signed (problem on SGI) +- Clear bit buffer when starting a stored block +- no memcpy on Pyramid +- suppressed inftest.c +- optimized fill_window, put longest_match inline for gcc +- optimized inflate on stored blocks +- untabify all sources to simplify patches + +Changes in 0.91 (2 May 95) +- Default MEM_LEVEL is 8 (not 9 for Unix) as documented in zlib.h +- Document the memory requirements in zconf.h +- added "make install" +- fix sync search logic in inflateSync +- deflate(Z_FULL_FLUSH) now works even if output buffer too short +- after inflateSync, don't scare people with just "lo world" +- added support for DJGPP + +Changes in 0.9 (1 May 95) +- don't assume that zalloc clears the allocated memory (the TurboC bug + was Mark's bug after all :) +- let again gzread copy uncompressed data unchanged (was working in 0.71) +- deflate(Z_FULL_FLUSH), inflateReset and inflateSync are now fully implemented +- added a test of inflateSync in example.c +- moved MAX_WBITS to zconf.h because users might want to change that +- document explicitly that zalloc(64K) on MSDOS must return a normalized + pointer (zero offset) +- added Makefiles for Microsoft C, Turbo C, Borland C++ +- faster crc32() + +Changes in 0.8 (29 April 95) +- added fast inflate (inffast.c) +- deflate(Z_FINISH) now returns Z_STREAM_END when done. Warning: this + is incompatible with previous versions of zlib which returned Z_OK +- work around a TurboC compiler bug (bad code for b << 0, see infutil.h) + (actually that was not a compiler bug, see 0.81 above) +- gzread no longer reads one extra byte in certain cases +- In gzio destroy(), don't reference a freed structure +- avoid many warnings for MSDOS +- avoid the ERROR symbol which is used by MS Windows + +Changes in 0.71 (14 April 95) +- Fixed more MSDOS compilation problems :( There is still a bug with + TurboC large model + +Changes in 0.7 (14 April 95) +- Added full inflate support +- Simplified the crc32() interface. The pre- and post-conditioning + (one's complement) is now done inside crc32(). WARNING: this is + incompatible with previous versions; see zlib.h for the new usage + +Changes in 0.61 (12 April 95) +- workaround for a bug in TurboC. example and minigzip now work on MSDOS + +Changes in 0.6 (11 April 95) +- added minigzip.c +- added gzdopen to reopen a file descriptor as gzFile +- added transparent reading of non-gziped files in gzread +- fixed bug in gzread (don't read crc as data) +- fixed bug in destroy (gzio.c) (don't return Z_STREAM_END for gzclose) +- don't allocate big arrays in the stack (for MSDOS) +- fix some MSDOS compilation problems + +Changes in 0.5: +- do real compression in deflate.c. Z_PARTIAL_FLUSH is supported but + not yet Z_FULL_FLUSH +- support decompression but only in a single step (forced Z_FINISH) +- added opaque object for zalloc and zfree +- added deflateReset and inflateReset +- added a variable zlib_version for consistency checking +- renamed the 'filter' parameter of deflateInit2 as 'strategy' + Added Z_FILTERED and Z_HUFFMAN_ONLY constants + +Changes in 0.4: +- avoid "zip" everywhere, use zlib instead of ziplib +- suppress Z_BLOCK_FLUSH, interpret Z_PARTIAL_FLUSH as block flush + if compression method == 8 +- added adler32 and crc32 +- renamed deflateOptions as deflateInit2, call one or the other but not both +- added the method parameter for deflateInit2 +- added inflateInit2 +- simplified considerably deflateInit and inflateInit by not supporting + user-provided history buffer. This is supported only in deflateInit2 + and inflateInit2 + +Changes in 0.3: +- prefix all macro names with Z_ +- use Z_FINISH instead of deflateEnd to finish compression +- added Z_HUFFMAN_ONLY +- added gzerror() diff --git a/thirdparty/zlib-1.3.1/FAQ b/thirdparty/zlib-1.3.1/FAQ new file mode 100644 index 0000000..92f5d3e --- /dev/null +++ b/thirdparty/zlib-1.3.1/FAQ @@ -0,0 +1,367 @@ + + Frequently Asked Questions about zlib + + +If your question is not there, please check the zlib home page +http://zlib.net/ which may have more recent information. +The latest zlib FAQ is at http://zlib.net/zlib_faq.html + + + 1. Is zlib Y2K-compliant? + + Yes. zlib doesn't handle dates. + + 2. Where can I get a Windows DLL version? + + The zlib sources can be compiled without change to produce a DLL. See the + file win32/DLL_FAQ.txt in the zlib distribution. + + 3. Where can I get a Visual Basic interface to zlib? + + See + * http://marknelson.us/1997/01/01/zlib-engine/ + * win32/DLL_FAQ.txt in the zlib distribution + + 4. compress() returns Z_BUF_ERROR. + + Make sure that before the call of compress(), the length of the compressed + buffer is equal to the available size of the compressed buffer and not + zero. For Visual Basic, check that this parameter is passed by reference + ("as any"), not by value ("as long"). + + 5. deflate() or inflate() returns Z_BUF_ERROR. + + Before making the call, make sure that avail_in and avail_out are not zero. + When setting the parameter flush equal to Z_FINISH, also make sure that + avail_out is big enough to allow processing all pending input. Note that a + Z_BUF_ERROR is not fatal--another call to deflate() or inflate() can be + made with more input or output space. A Z_BUF_ERROR may in fact be + unavoidable depending on how the functions are used, since it is not + possible to tell whether or not there is more output pending when + strm.avail_out returns with zero. See http://zlib.net/zlib_how.html for a + heavily annotated example. + + 6. Where's the zlib documentation (man pages, etc.)? + + It's in zlib.h . Examples of zlib usage are in the files test/example.c + and test/minigzip.c, with more in examples/ . + + 7. Why don't you use GNU autoconf or libtool or ...? + + Because we would like to keep zlib as a very small and simple package. + zlib is rather portable and doesn't need much configuration. + + 8. I found a bug in zlib. + + Most of the time, such problems are due to an incorrect usage of zlib. + Please try to reproduce the problem with a small program and send the + corresponding source to us at zlib@gzip.org . Do not send multi-megabyte + data files without prior agreement. + + 9. Why do I get "undefined reference to gzputc"? + + If "make test" produces something like + + example.o(.text+0x154): undefined reference to `gzputc' + + check that you don't have old files libz.* in /usr/lib, /usr/local/lib or + /usr/X11R6/lib. Remove any old versions, then do "make install". + +10. I need a Delphi interface to zlib. + + See the contrib/delphi directory in the zlib distribution. + +11. Can zlib handle .zip archives? + + Not by itself, no. See the directory contrib/minizip in the zlib + distribution. + +12. Can zlib handle .Z files? + + No, sorry. You have to spawn an uncompress or gunzip subprocess, or adapt + the code of uncompress on your own. + +13. How can I make a Unix shared library? + + By default a shared (and a static) library is built for Unix. So: + + make distclean + ./configure + make + +14. How do I install a shared zlib library on Unix? + + After the above, then: + + make install + + However, many flavors of Unix come with a shared zlib already installed. + Before going to the trouble of compiling a shared version of zlib and + trying to install it, you may want to check if it's already there! If you + can #include , it's there. The -lz option will probably link to + it. You can check the version at the top of zlib.h or with the + ZLIB_VERSION symbol defined in zlib.h . + +15. I have a question about OttoPDF. + + We are not the authors of OttoPDF. The real author is on the OttoPDF web + site: Joel Hainley, jhainley@myndkryme.com. + +16. Can zlib decode Flate data in an Adobe PDF file? + + Yes. See http://www.pdflib.com/ . To modify PDF forms, see + http://sourceforge.net/projects/acroformtool/ . + +17. Why am I getting this "register_frame_info not found" error on Solaris? + + After installing zlib 1.1.4 on Solaris 2.6, running applications using zlib + generates an error such as: + + ld.so.1: rpm: fatal: relocation error: file /usr/local/lib/libz.so: + symbol __register_frame_info: referenced symbol not found + + The symbol __register_frame_info is not part of zlib, it is generated by + the C compiler (cc or gcc). You must recompile applications using zlib + which have this problem. This problem is specific to Solaris. See + http://www.sunfreeware.com for Solaris versions of zlib and applications + using zlib. + +18. Why does gzip give an error on a file I make with compress/deflate? + + The compress and deflate functions produce data in the zlib format, which + is different and incompatible with the gzip format. The gz* functions in + zlib on the other hand use the gzip format. Both the zlib and gzip formats + use the same compressed data format internally, but have different headers + and trailers around the compressed data. + +19. Ok, so why are there two different formats? + + The gzip format was designed to retain the directory information about a + single file, such as the name and last modification date. The zlib format + on the other hand was designed for in-memory and communication channel + applications, and has a much more compact header and trailer and uses a + faster integrity check than gzip. + +20. Well that's nice, but how do I make a gzip file in memory? + + You can request that deflate write the gzip format instead of the zlib + format using deflateInit2(). You can also request that inflate decode the + gzip format using inflateInit2(). Read zlib.h for more details. + +21. Is zlib thread-safe? + + Yes. However any library routines that zlib uses and any application- + provided memory allocation routines must also be thread-safe. zlib's gz* + functions use stdio library routines, and most of zlib's functions use the + library memory allocation routines by default. zlib's *Init* functions + allow for the application to provide custom memory allocation routines. + + Of course, you should only operate on any given zlib or gzip stream from a + single thread at a time. + +22. Can I use zlib in my commercial application? + + Yes. Please read the license in zlib.h. + +23. Is zlib under the GNU license? + + No. Please read the license in zlib.h. + +24. The license says that altered source versions must be "plainly marked". So + what exactly do I need to do to meet that requirement? + + You need to change the ZLIB_VERSION and ZLIB_VERNUM #defines in zlib.h. In + particular, the final version number needs to be changed to "f", and an + identification string should be appended to ZLIB_VERSION. Version numbers + x.x.x.f are reserved for modifications to zlib by others than the zlib + maintainers. For example, if the version of the base zlib you are altering + is "1.2.3.4", then in zlib.h you should change ZLIB_VERNUM to 0x123f, and + ZLIB_VERSION to something like "1.2.3.f-zachary-mods-v3". You can also + update the version strings in deflate.c and inftrees.c. + + For altered source distributions, you should also note the origin and + nature of the changes in zlib.h, as well as in ChangeLog and README, along + with the dates of the alterations. The origin should include at least your + name (or your company's name), and an email address to contact for help or + issues with the library. + + Note that distributing a compiled zlib library along with zlib.h and + zconf.h is also a source distribution, and so you should change + ZLIB_VERSION and ZLIB_VERNUM and note the origin and nature of the changes + in zlib.h as you would for a full source distribution. + +25. Will zlib work on a big-endian or little-endian architecture, and can I + exchange compressed data between them? + + Yes and yes. + +26. Will zlib work on a 64-bit machine? + + Yes. It has been tested on 64-bit machines, and has no dependence on any + data types being limited to 32-bits in length. If you have any + difficulties, please provide a complete problem report to zlib@gzip.org + +27. Will zlib decompress data from the PKWare Data Compression Library? + + No. The PKWare DCL uses a completely different compressed data format than + does PKZIP and zlib. However, you can look in zlib's contrib/blast + directory for a possible solution to your problem. + +28. Can I access data randomly in a compressed stream? + + No, not without some preparation. If when compressing you periodically use + Z_FULL_FLUSH, carefully write all the pending data at those points, and + keep an index of those locations, then you can start decompression at those + points. You have to be careful to not use Z_FULL_FLUSH too often, since it + can significantly degrade compression. Alternatively, you can scan a + deflate stream once to generate an index, and then use that index for + random access. See examples/zran.c . + +29. Does zlib work on MVS, OS/390, CICS, etc.? + + It has in the past, but we have not heard of any recent evidence. There + were working ports of zlib 1.1.4 to MVS, but those links no longer work. + If you know of recent, successful applications of zlib on these operating + systems, please let us know. Thanks. + +30. Is there some simpler, easier to read version of inflate I can look at to + understand the deflate format? + + First off, you should read RFC 1951. Second, yes. Look in zlib's + contrib/puff directory. + +31. Does zlib infringe on any patents? + + As far as we know, no. In fact, that was originally the whole point behind + zlib. Look here for some more information: + + http://www.gzip.org/#faq11 + +32. Can zlib work with greater than 4 GB of data? + + Yes. inflate() and deflate() will process any amount of data correctly. + Each call of inflate() or deflate() is limited to input and output chunks + of the maximum value that can be stored in the compiler's "unsigned int" + type, but there is no limit to the number of chunks. Note however that the + strm.total_in and strm_total_out counters may be limited to 4 GB. These + counters are provided as a convenience and are not used internally by + inflate() or deflate(). The application can easily set up its own counters + updated after each call of inflate() or deflate() to count beyond 4 GB. + compress() and uncompress() may be limited to 4 GB, since they operate in a + single call. gzseek() and gztell() may be limited to 4 GB depending on how + zlib is compiled. See the zlibCompileFlags() function in zlib.h. + + The word "may" appears several times above since there is a 4 GB limit only + if the compiler's "long" type is 32 bits. If the compiler's "long" type is + 64 bits, then the limit is 16 exabytes. + +33. Does zlib have any security vulnerabilities? + + The only one that we are aware of is potentially in gzprintf(). If zlib is + compiled to use sprintf() or vsprintf(), then there is no protection + against a buffer overflow of an 8K string space (or other value as set by + gzbuffer()), other than the caller of gzprintf() assuring that the output + will not exceed 8K. On the other hand, if zlib is compiled to use + snprintf() or vsnprintf(), which should normally be the case, then there is + no vulnerability. The ./configure script will display warnings if an + insecure variation of sprintf() will be used by gzprintf(). Also the + zlibCompileFlags() function will return information on what variant of + sprintf() is used by gzprintf(). + + If you don't have snprintf() or vsnprintf() and would like one, you can + find a portable implementation here: + + http://www.ijs.si/software/snprintf/ + + Note that you should be using the most recent version of zlib. Versions + 1.1.3 and before were subject to a double-free vulnerability, and versions + 1.2.1 and 1.2.2 were subject to an access exception when decompressing + invalid compressed data. + +34. Is there a Java version of zlib? + + Probably what you want is to use zlib in Java. zlib is already included + as part of the Java SDK in the java.util.zip package. If you really want + a version of zlib written in the Java language, look on the zlib home + page for links: http://zlib.net/ . + +35. I get this or that compiler or source-code scanner warning when I crank it + up to maximally-pedantic. Can't you guys write proper code? + + Many years ago, we gave up attempting to avoid warnings on every compiler + in the universe. It just got to be a waste of time, and some compilers + were downright silly as well as contradicted each other. So now, we simply + make sure that the code always works. + +36. Valgrind (or some similar memory access checker) says that deflate is + performing a conditional jump that depends on an uninitialized value. + Isn't that a bug? + + No. That is intentional for performance reasons, and the output of deflate + is not affected. This only started showing up recently since zlib 1.2.x + uses malloc() by default for allocations, whereas earlier versions used + calloc(), which zeros out the allocated memory. Even though the code was + correct, versions 1.2.4 and later was changed to not stimulate these + checkers. + +37. Will zlib read the (insert any ancient or arcane format here) compressed + data format? + + Probably not. Look in the comp.compression FAQ for pointers to various + formats and associated software. + +38. How can I encrypt/decrypt zip files with zlib? + + zlib doesn't support encryption. The original PKZIP encryption is very + weak and can be broken with freely available programs. To get strong + encryption, use GnuPG, http://www.gnupg.org/ , which already includes zlib + compression. For PKZIP compatible "encryption", look at + http://www.info-zip.org/ + +39. What's the difference between the "gzip" and "deflate" HTTP 1.1 encodings? + + "gzip" is the gzip format, and "deflate" is the zlib format. They should + probably have called the second one "zlib" instead to avoid confusion with + the raw deflate compressed data format. While the HTTP 1.1 RFC 2616 + correctly points to the zlib specification in RFC 1950 for the "deflate" + transfer encoding, there have been reports of servers and browsers that + incorrectly produce or expect raw deflate data per the deflate + specification in RFC 1951, most notably Microsoft. So even though the + "deflate" transfer encoding using the zlib format would be the more + efficient approach (and in fact exactly what the zlib format was designed + for), using the "gzip" transfer encoding is probably more reliable due to + an unfortunate choice of name on the part of the HTTP 1.1 authors. + + Bottom line: use the gzip format for HTTP 1.1 encoding. + +40. Does zlib support the new "Deflate64" format introduced by PKWare? + + No. PKWare has apparently decided to keep that format proprietary, since + they have not documented it as they have previous compression formats. In + any case, the compression improvements are so modest compared to other more + modern approaches, that it's not worth the effort to implement. + +41. I'm having a problem with the zip functions in zlib, can you help? + + There are no zip functions in zlib. You are probably using minizip by + Giles Vollant, which is found in the contrib directory of zlib. It is not + part of zlib. In fact none of the stuff in contrib is part of zlib. The + files in there are not supported by the zlib authors. You need to contact + the authors of the respective contribution for help. + +42. The match.asm code in contrib is under the GNU General Public License. + Since it's part of zlib, doesn't that mean that all of zlib falls under the + GNU GPL? + + No. The files in contrib are not part of zlib. They were contributed by + other authors and are provided as a convenience to the user within the zlib + distribution. Each item in contrib has its own license. + +43. Is zlib subject to export controls? What is its ECCN? + + zlib is not subject to export controls, and so is classified as EAR99. + +44. Can you please sign these lengthy legal documents and fax them back to us + so that we can use your software in our product? + + No. Go away. Shoo. diff --git a/thirdparty/zlib-1.3.1/INDEX b/thirdparty/zlib-1.3.1/INDEX new file mode 100644 index 0000000..2ba0641 --- /dev/null +++ b/thirdparty/zlib-1.3.1/INDEX @@ -0,0 +1,68 @@ +CMakeLists.txt cmake build file +ChangeLog history of changes +FAQ Frequently Asked Questions about zlib +INDEX this file +Makefile dummy Makefile that tells you to ./configure +Makefile.in template for Unix Makefile +README guess what +configure configure script for Unix +make_vms.com makefile for VMS +test/example.c zlib usages examples for build testing +test/minigzip.c minimal gzip-like functionality for build testing +test/infcover.c inf*.c code coverage for build coverage testing +treebuild.xml XML description of source file dependencies +zconf.h.cmakein zconf.h template for cmake +zconf.h.in zconf.h template for configure +zlib.3 Man page for zlib +zlib.3.pdf Man page in PDF format +zlib.map Linux symbol information +zlib.pc.in Template for pkg-config descriptor +zlib.pc.cmakein zlib.pc template for cmake +zlib2ansi perl script to convert source files for C++ compilation + +amiga/ makefiles for Amiga SAS C +as400/ makefiles for AS/400 +doc/ documentation for formats and algorithms +msdos/ makefiles for MSDOS +nintendods/ makefile for Nintendo DS +old/ makefiles for various architectures and zlib documentation + files that have not yet been updated for zlib 1.2.x +qnx/ makefiles for QNX +watcom/ makefiles for OpenWatcom +win32/ makefiles for Windows + + zlib public header files (required for library use): +zconf.h +zlib.h + + private source files used to build the zlib library: +adler32.c +compress.c +crc32.c +crc32.h +deflate.c +deflate.h +gzclose.c +gzguts.h +gzlib.c +gzread.c +gzwrite.c +infback.c +inffast.c +inffast.h +inffixed.h +inflate.c +inflate.h +inftrees.c +inftrees.h +trees.c +trees.h +uncompr.c +zutil.c +zutil.h + + source files for sample programs +See examples/README.examples + + unsupported contributions by third parties +See contrib/README.contrib diff --git a/thirdparty/zlib-1.3.1/LICENSE b/thirdparty/zlib-1.3.1/LICENSE new file mode 100644 index 0000000..ab8ee6f --- /dev/null +++ b/thirdparty/zlib-1.3.1/LICENSE @@ -0,0 +1,22 @@ +Copyright notice: + + (C) 1995-2022 Jean-loup Gailly and Mark Adler + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. + + Jean-loup Gailly Mark Adler + jloup@gzip.org madler@alumni.caltech.edu diff --git a/thirdparty/zlib-1.3.1/Makefile b/thirdparty/zlib-1.3.1/Makefile new file mode 100644 index 0000000..6bba86c --- /dev/null +++ b/thirdparty/zlib-1.3.1/Makefile @@ -0,0 +1,5 @@ +all: + -@echo "Please use ./configure first. Thank you." + +distclean: + make -f Makefile.in distclean diff --git a/thirdparty/zlib-1.3.1/Makefile.in b/thirdparty/zlib-1.3.1/Makefile.in new file mode 100644 index 0000000..cb8b00a --- /dev/null +++ b/thirdparty/zlib-1.3.1/Makefile.in @@ -0,0 +1,410 @@ +# Makefile for zlib +# Copyright (C) 1995-2024 Jean-loup Gailly, Mark Adler +# For conditions of distribution and use, see copyright notice in zlib.h + +# To compile and test, type: +# ./configure; make test +# Normally configure builds both a static and a shared library. +# If you want to build just a static library, use: ./configure --static + +# To install /usr/local/lib/libz.* and /usr/local/include/zlib.h, type: +# make install +# To install in $HOME instead of /usr/local, use: +# make install prefix=$HOME + +CC=cc + +CFLAGS=-O +#CFLAGS=-O -DMAX_WBITS=14 -DMAX_MEM_LEVEL=7 +#CFLAGS=-g -DZLIB_DEBUG +#CFLAGS=-O3 -Wall -Wwrite-strings -Wpointer-arith -Wconversion \ +# -Wstrict-prototypes -Wmissing-prototypes + +SFLAGS=-O +LDFLAGS= +TEST_LIBS=-L. libz.a +LDSHARED=$(CC) +CPP=$(CC) -E + +STATICLIB=libz.a +SHAREDLIB=libz.so +SHAREDLIBV=libz.so.1.3.1 +SHAREDLIBM=libz.so.1 +LIBS=$(STATICLIB) $(SHAREDLIBV) + +AR=ar +ARFLAGS=rc +RANLIB=ranlib +LDCONFIG=ldconfig +LDSHAREDLIBC=-lc +TAR=tar +SHELL=/bin/sh +EXE= + +prefix = /usr/local +exec_prefix = ${prefix} +libdir = ${exec_prefix}/lib +sharedlibdir = ${libdir} +includedir = ${prefix}/include +mandir = ${prefix}/share/man +man3dir = ${mandir}/man3 +pkgconfigdir = ${libdir}/pkgconfig +SRCDIR= +ZINC= +ZINCOUT=-I. + +OBJZ = adler32.o crc32.o deflate.o infback.o inffast.o inflate.o inftrees.o trees.o zutil.o +OBJG = compress.o uncompr.o gzclose.o gzlib.o gzread.o gzwrite.o +OBJC = $(OBJZ) $(OBJG) + +PIC_OBJZ = adler32.lo crc32.lo deflate.lo infback.lo inffast.lo inflate.lo inftrees.lo trees.lo zutil.lo +PIC_OBJG = compress.lo uncompr.lo gzclose.lo gzlib.lo gzread.lo gzwrite.lo +PIC_OBJC = $(PIC_OBJZ) $(PIC_OBJG) + +# to use the asm code: make OBJA=match.o, PIC_OBJA=match.lo +OBJA = +PIC_OBJA = + +OBJS = $(OBJC) $(OBJA) + +PIC_OBJS = $(PIC_OBJC) $(PIC_OBJA) + +all: static shared + +static: example$(EXE) minigzip$(EXE) + +shared: examplesh$(EXE) minigzipsh$(EXE) + +all64: example64$(EXE) minigzip64$(EXE) + +check: test + +test: all teststatic testshared + +teststatic: static + @TMPST=tmpst_$$; \ + if echo hello world | ${QEMU_RUN} ./minigzip | ${QEMU_RUN} ./minigzip -d && ${QEMU_RUN} ./example $$TMPST ; then \ + echo ' *** zlib test OK ***'; \ + else \ + echo ' *** zlib test FAILED ***'; false; \ + fi + @rm -f tmpst_$$ + +testshared: shared + @LD_LIBRARY_PATH=`pwd`:$(LD_LIBRARY_PATH) ; export LD_LIBRARY_PATH; \ + LD_LIBRARYN32_PATH=`pwd`:$(LD_LIBRARYN32_PATH) ; export LD_LIBRARYN32_PATH; \ + DYLD_LIBRARY_PATH=`pwd`:$(DYLD_LIBRARY_PATH) ; export DYLD_LIBRARY_PATH; \ + SHLIB_PATH=`pwd`:$(SHLIB_PATH) ; export SHLIB_PATH; \ + TMPSH=tmpsh_$$; \ + if echo hello world | ${QEMU_RUN} ./minigzipsh | ${QEMU_RUN} ./minigzipsh -d && ${QEMU_RUN} ./examplesh $$TMPSH; then \ + echo ' *** zlib shared test OK ***'; \ + else \ + echo ' *** zlib shared test FAILED ***'; false; \ + fi + @rm -f tmpsh_$$ + +test64: all64 + @TMP64=tmp64_$$; \ + if echo hello world | ${QEMU_RUN} ./minigzip64 | ${QEMU_RUN} ./minigzip64 -d && ${QEMU_RUN} ./example64 $$TMP64; then \ + echo ' *** zlib 64-bit test OK ***'; \ + else \ + echo ' *** zlib 64-bit test FAILED ***'; false; \ + fi + @rm -f tmp64_$$ + +infcover.o: $(SRCDIR)test/infcover.c $(SRCDIR)zlib.h zconf.h + $(CC) $(CFLAGS) $(ZINCOUT) -c -o $@ $(SRCDIR)test/infcover.c + +infcover: infcover.o libz.a + $(CC) $(CFLAGS) -o $@ infcover.o libz.a + +cover: infcover + rm -f *.gcda + ${QEMU_RUN} ./infcover + gcov inf*.c + +libz.a: $(OBJS) + $(AR) $(ARFLAGS) $@ $(OBJS) + -@ ($(RANLIB) $@ || true) >/dev/null 2>&1 + +match.o: match.S + $(CPP) match.S > _match.s + $(CC) -c _match.s + mv _match.o match.o + rm -f _match.s + +match.lo: match.S + $(CPP) match.S > _match.s + $(CC) -c -fPIC _match.s + mv _match.o match.lo + rm -f _match.s + +example.o: $(SRCDIR)test/example.c $(SRCDIR)zlib.h zconf.h + $(CC) $(CFLAGS) $(ZINCOUT) -c -o $@ $(SRCDIR)test/example.c + +minigzip.o: $(SRCDIR)test/minigzip.c $(SRCDIR)zlib.h zconf.h + $(CC) $(CFLAGS) $(ZINCOUT) -c -o $@ $(SRCDIR)test/minigzip.c + +example64.o: $(SRCDIR)test/example.c $(SRCDIR)zlib.h zconf.h + $(CC) $(CFLAGS) $(ZINCOUT) -D_FILE_OFFSET_BITS=64 -c -o $@ $(SRCDIR)test/example.c + +minigzip64.o: $(SRCDIR)test/minigzip.c $(SRCDIR)zlib.h zconf.h + $(CC) $(CFLAGS) $(ZINCOUT) -D_FILE_OFFSET_BITS=64 -c -o $@ $(SRCDIR)test/minigzip.c + + +adler32.o: $(SRCDIR)adler32.c + $(CC) $(CFLAGS) $(ZINC) -c -o $@ $(SRCDIR)adler32.c + +crc32.o: $(SRCDIR)crc32.c + $(CC) $(CFLAGS) $(ZINC) -c -o $@ $(SRCDIR)crc32.c + +deflate.o: $(SRCDIR)deflate.c + $(CC) $(CFLAGS) $(ZINC) -c -o $@ $(SRCDIR)deflate.c + +infback.o: $(SRCDIR)infback.c + $(CC) $(CFLAGS) $(ZINC) -c -o $@ $(SRCDIR)infback.c + +inffast.o: $(SRCDIR)inffast.c + $(CC) $(CFLAGS) $(ZINC) -c -o $@ $(SRCDIR)inffast.c + +inflate.o: $(SRCDIR)inflate.c + $(CC) $(CFLAGS) $(ZINC) -c -o $@ $(SRCDIR)inflate.c + +inftrees.o: $(SRCDIR)inftrees.c + $(CC) $(CFLAGS) $(ZINC) -c -o $@ $(SRCDIR)inftrees.c + +trees.o: $(SRCDIR)trees.c + $(CC) $(CFLAGS) $(ZINC) -c -o $@ $(SRCDIR)trees.c + +zutil.o: $(SRCDIR)zutil.c + $(CC) $(CFLAGS) $(ZINC) -c -o $@ $(SRCDIR)zutil.c + +compress.o: $(SRCDIR)compress.c + $(CC) $(CFLAGS) $(ZINC) -c -o $@ $(SRCDIR)compress.c + +uncompr.o: $(SRCDIR)uncompr.c + $(CC) $(CFLAGS) $(ZINC) -c -o $@ $(SRCDIR)uncompr.c + +gzclose.o: $(SRCDIR)gzclose.c + $(CC) $(CFLAGS) $(ZINC) -c -o $@ $(SRCDIR)gzclose.c + +gzlib.o: $(SRCDIR)gzlib.c + $(CC) $(CFLAGS) $(ZINC) -c -o $@ $(SRCDIR)gzlib.c + +gzread.o: $(SRCDIR)gzread.c + $(CC) $(CFLAGS) $(ZINC) -c -o $@ $(SRCDIR)gzread.c + +gzwrite.o: $(SRCDIR)gzwrite.c + $(CC) $(CFLAGS) $(ZINC) -c -o $@ $(SRCDIR)gzwrite.c + + +adler32.lo: $(SRCDIR)adler32.c + -@mkdir objs 2>/dev/null || test -d objs + $(CC) $(SFLAGS) $(ZINC) -DPIC -c -o objs/adler32.o $(SRCDIR)adler32.c + -@mv objs/adler32.o $@ + +crc32.lo: $(SRCDIR)crc32.c + -@mkdir objs 2>/dev/null || test -d objs + $(CC) $(SFLAGS) $(ZINC) -DPIC -c -o objs/crc32.o $(SRCDIR)crc32.c + -@mv objs/crc32.o $@ + +deflate.lo: $(SRCDIR)deflate.c + -@mkdir objs 2>/dev/null || test -d objs + $(CC) $(SFLAGS) $(ZINC) -DPIC -c -o objs/deflate.o $(SRCDIR)deflate.c + -@mv objs/deflate.o $@ + +infback.lo: $(SRCDIR)infback.c + -@mkdir objs 2>/dev/null || test -d objs + $(CC) $(SFLAGS) $(ZINC) -DPIC -c -o objs/infback.o $(SRCDIR)infback.c + -@mv objs/infback.o $@ + +inffast.lo: $(SRCDIR)inffast.c + -@mkdir objs 2>/dev/null || test -d objs + $(CC) $(SFLAGS) $(ZINC) -DPIC -c -o objs/inffast.o $(SRCDIR)inffast.c + -@mv objs/inffast.o $@ + +inflate.lo: $(SRCDIR)inflate.c + -@mkdir objs 2>/dev/null || test -d objs + $(CC) $(SFLAGS) $(ZINC) -DPIC -c -o objs/inflate.o $(SRCDIR)inflate.c + -@mv objs/inflate.o $@ + +inftrees.lo: $(SRCDIR)inftrees.c + -@mkdir objs 2>/dev/null || test -d objs + $(CC) $(SFLAGS) $(ZINC) -DPIC -c -o objs/inftrees.o $(SRCDIR)inftrees.c + -@mv objs/inftrees.o $@ + +trees.lo: $(SRCDIR)trees.c + -@mkdir objs 2>/dev/null || test -d objs + $(CC) $(SFLAGS) $(ZINC) -DPIC -c -o objs/trees.o $(SRCDIR)trees.c + -@mv objs/trees.o $@ + +zutil.lo: $(SRCDIR)zutil.c + -@mkdir objs 2>/dev/null || test -d objs + $(CC) $(SFLAGS) $(ZINC) -DPIC -c -o objs/zutil.o $(SRCDIR)zutil.c + -@mv objs/zutil.o $@ + +compress.lo: $(SRCDIR)compress.c + -@mkdir objs 2>/dev/null || test -d objs + $(CC) $(SFLAGS) $(ZINC) -DPIC -c -o objs/compress.o $(SRCDIR)compress.c + -@mv objs/compress.o $@ + +uncompr.lo: $(SRCDIR)uncompr.c + -@mkdir objs 2>/dev/null || test -d objs + $(CC) $(SFLAGS) $(ZINC) -DPIC -c -o objs/uncompr.o $(SRCDIR)uncompr.c + -@mv objs/uncompr.o $@ + +gzclose.lo: $(SRCDIR)gzclose.c + -@mkdir objs 2>/dev/null || test -d objs + $(CC) $(SFLAGS) $(ZINC) -DPIC -c -o objs/gzclose.o $(SRCDIR)gzclose.c + -@mv objs/gzclose.o $@ + +gzlib.lo: $(SRCDIR)gzlib.c + -@mkdir objs 2>/dev/null || test -d objs + $(CC) $(SFLAGS) $(ZINC) -DPIC -c -o objs/gzlib.o $(SRCDIR)gzlib.c + -@mv objs/gzlib.o $@ + +gzread.lo: $(SRCDIR)gzread.c + -@mkdir objs 2>/dev/null || test -d objs + $(CC) $(SFLAGS) $(ZINC) -DPIC -c -o objs/gzread.o $(SRCDIR)gzread.c + -@mv objs/gzread.o $@ + +gzwrite.lo: $(SRCDIR)gzwrite.c + -@mkdir objs 2>/dev/null || test -d objs + $(CC) $(SFLAGS) $(ZINC) -DPIC -c -o objs/gzwrite.o $(SRCDIR)gzwrite.c + -@mv objs/gzwrite.o $@ + + +placebo $(SHAREDLIBV): $(PIC_OBJS) libz.a + $(LDSHARED) $(SFLAGS) -o $@ $(PIC_OBJS) $(LDSHAREDLIBC) $(LDFLAGS) + rm -f $(SHAREDLIB) $(SHAREDLIBM) + ln -s $@ $(SHAREDLIB) + ln -s $@ $(SHAREDLIBM) + -@rmdir objs + +example$(EXE): example.o $(STATICLIB) + $(CC) $(CFLAGS) $(LDFLAGS) -o $@ example.o $(TEST_LIBS) + +minigzip$(EXE): minigzip.o $(STATICLIB) + $(CC) $(CFLAGS) $(LDFLAGS) -o $@ minigzip.o $(TEST_LIBS) + +examplesh$(EXE): example.o $(SHAREDLIBV) + $(CC) $(CFLAGS) -o $@ example.o $(LDFLAGS) -L. $(SHAREDLIBV) + +minigzipsh$(EXE): minigzip.o $(SHAREDLIBV) + $(CC) $(CFLAGS) -o $@ minigzip.o $(LDFLAGS) -L. $(SHAREDLIBV) + +example64$(EXE): example64.o $(STATICLIB) + $(CC) $(CFLAGS) $(LDFLAGS) -o $@ example64.o $(TEST_LIBS) + +minigzip64$(EXE): minigzip64.o $(STATICLIB) + $(CC) $(CFLAGS) $(LDFLAGS) -o $@ minigzip64.o $(TEST_LIBS) + +install-libs: $(LIBS) + -@if [ ! -d $(DESTDIR)$(exec_prefix) ]; then mkdir -p $(DESTDIR)$(exec_prefix); fi + -@if [ ! -d $(DESTDIR)$(libdir) ]; then mkdir -p $(DESTDIR)$(libdir); fi + -@if [ ! -d $(DESTDIR)$(sharedlibdir) ]; then mkdir -p $(DESTDIR)$(sharedlibdir); fi + -@if [ ! -d $(DESTDIR)$(man3dir) ]; then mkdir -p $(DESTDIR)$(man3dir); fi + -@if [ ! -d $(DESTDIR)$(pkgconfigdir) ]; then mkdir -p $(DESTDIR)$(pkgconfigdir); fi + rm -f $(DESTDIR)$(libdir)/$(STATICLIB) + cp $(STATICLIB) $(DESTDIR)$(libdir) + chmod 644 $(DESTDIR)$(libdir)/$(STATICLIB) + -@($(RANLIB) $(DESTDIR)$(libdir)/libz.a || true) >/dev/null 2>&1 + -@if test -n "$(SHAREDLIBV)"; then \ + rm -f $(DESTDIR)$(sharedlibdir)/$(SHAREDLIBV); \ + cp $(SHAREDLIBV) $(DESTDIR)$(sharedlibdir); \ + echo "cp $(SHAREDLIBV) $(DESTDIR)$(sharedlibdir)"; \ + chmod 755 $(DESTDIR)$(sharedlibdir)/$(SHAREDLIBV); \ + echo "chmod 755 $(DESTDIR)$(sharedlibdir)/$(SHAREDLIBV)"; \ + rm -f $(DESTDIR)$(sharedlibdir)/$(SHAREDLIB) $(DESTDIR)$(sharedlibdir)/$(SHAREDLIBM); \ + ln -s $(SHAREDLIBV) $(DESTDIR)$(sharedlibdir)/$(SHAREDLIB); \ + ln -s $(SHAREDLIBV) $(DESTDIR)$(sharedlibdir)/$(SHAREDLIBM); \ + ($(LDCONFIG) || true) >/dev/null 2>&1; \ + fi + rm -f $(DESTDIR)$(man3dir)/zlib.3 + cp $(SRCDIR)zlib.3 $(DESTDIR)$(man3dir) + chmod 644 $(DESTDIR)$(man3dir)/zlib.3 + rm -f $(DESTDIR)$(pkgconfigdir)/zlib.pc + cp zlib.pc $(DESTDIR)$(pkgconfigdir) + chmod 644 $(DESTDIR)$(pkgconfigdir)/zlib.pc +# The ranlib in install is needed on NeXTSTEP which checks file times +# ldconfig is for Linux + +install: install-libs + -@if [ ! -d $(DESTDIR)$(includedir) ]; then mkdir -p $(DESTDIR)$(includedir); fi + rm -f $(DESTDIR)$(includedir)/zlib.h $(DESTDIR)$(includedir)/zconf.h + cp $(SRCDIR)zlib.h zconf.h $(DESTDIR)$(includedir) + chmod 644 $(DESTDIR)$(includedir)/zlib.h $(DESTDIR)$(includedir)/zconf.h + +uninstall: + cd $(DESTDIR)$(includedir) && rm -f zlib.h zconf.h + cd $(DESTDIR)$(libdir) && rm -f libz.a; \ + if test -n "$(SHAREDLIBV)" -a -f $(SHAREDLIBV); then \ + rm -f $(SHAREDLIBV) $(SHAREDLIB) $(SHAREDLIBM); \ + fi + cd $(DESTDIR)$(man3dir) && rm -f zlib.3 + cd $(DESTDIR)$(pkgconfigdir) && rm -f zlib.pc + +docs: zlib.3.pdf + +zlib.3.pdf: $(SRCDIR)zlib.3 + groff -mandoc -f H -T ps $(SRCDIR)zlib.3 | ps2pdf - $@ + +zconf.h.cmakein: $(SRCDIR)zconf.h.in + -@ TEMPFILE=zconfh_$$; \ + echo "/#define ZCONF_H/ a\\\\\n#cmakedefine Z_PREFIX\\\\\n#cmakedefine Z_HAVE_UNISTD_H\n" >> $$TEMPFILE &&\ + sed -f $$TEMPFILE $(SRCDIR)zconf.h.in > $@ &&\ + touch -r $(SRCDIR)zconf.h.in $@ &&\ + rm $$TEMPFILE + +zconf: $(SRCDIR)zconf.h.in + cp -p $(SRCDIR)zconf.h.in zconf.h + +minizip-test: static + cd contrib/minizip && { CC="$(CC)" CFLAGS="$(CFLAGS)" $(MAKE) test ; cd ../.. ; } + +minizip-clean: + cd contrib/minizip && { $(MAKE) clean ; cd ../.. ; } + +mostlyclean: clean +clean: minizip-clean + rm -f *.o *.lo *~ \ + example$(EXE) minigzip$(EXE) examplesh$(EXE) minigzipsh$(EXE) \ + example64$(EXE) minigzip64$(EXE) \ + infcover \ + libz.* foo.gz so_locations \ + _match.s maketree contrib/infback9/*.o + rm -rf objs + rm -f *.gcda *.gcno *.gcov + rm -f contrib/infback9/*.gcda contrib/infback9/*.gcno contrib/infback9/*.gcov + +maintainer-clean: distclean +distclean: clean zconf zconf.h.cmakein + rm -f Makefile zlib.pc configure.log + -@rm -f .DS_Store + @if [ -f Makefile.in ]; then \ + printf 'all:\n\t-@echo "Please use ./configure first. Thank you."\n' > Makefile ; \ + printf '\ndistclean:\n\tmake -f Makefile.in distclean\n' >> Makefile ; \ + touch -r $(SRCDIR)Makefile.in Makefile ; fi + +tags: + etags $(SRCDIR)*.[ch] + +adler32.o zutil.o: $(SRCDIR)zutil.h $(SRCDIR)zlib.h zconf.h +gzclose.o gzlib.o gzread.o gzwrite.o: $(SRCDIR)zlib.h zconf.h $(SRCDIR)gzguts.h +compress.o example.o minigzip.o uncompr.o: $(SRCDIR)zlib.h zconf.h +crc32.o: $(SRCDIR)zutil.h $(SRCDIR)zlib.h zconf.h $(SRCDIR)crc32.h +deflate.o: $(SRCDIR)deflate.h $(SRCDIR)zutil.h $(SRCDIR)zlib.h zconf.h +infback.o inflate.o: $(SRCDIR)zutil.h $(SRCDIR)zlib.h zconf.h $(SRCDIR)inftrees.h $(SRCDIR)inflate.h $(SRCDIR)inffast.h $(SRCDIR)inffixed.h +inffast.o: $(SRCDIR)zutil.h $(SRCDIR)zlib.h zconf.h $(SRCDIR)inftrees.h $(SRCDIR)inflate.h $(SRCDIR)inffast.h +inftrees.o: $(SRCDIR)zutil.h $(SRCDIR)zlib.h zconf.h $(SRCDIR)inftrees.h +trees.o: $(SRCDIR)deflate.h $(SRCDIR)zutil.h $(SRCDIR)zlib.h zconf.h $(SRCDIR)trees.h + +adler32.lo zutil.lo: $(SRCDIR)zutil.h $(SRCDIR)zlib.h zconf.h +gzclose.lo gzlib.lo gzread.lo gzwrite.lo: $(SRCDIR)zlib.h zconf.h $(SRCDIR)gzguts.h +compress.lo example.lo minigzip.lo uncompr.lo: $(SRCDIR)zlib.h zconf.h +crc32.lo: $(SRCDIR)zutil.h $(SRCDIR)zlib.h zconf.h $(SRCDIR)crc32.h +deflate.lo: $(SRCDIR)deflate.h $(SRCDIR)zutil.h $(SRCDIR)zlib.h zconf.h +infback.lo inflate.lo: $(SRCDIR)zutil.h $(SRCDIR)zlib.h zconf.h $(SRCDIR)inftrees.h $(SRCDIR)inflate.h $(SRCDIR)inffast.h $(SRCDIR)inffixed.h +inffast.lo: $(SRCDIR)zutil.h $(SRCDIR)zlib.h zconf.h $(SRCDIR)inftrees.h $(SRCDIR)inflate.h $(SRCDIR)inffast.h +inftrees.lo: $(SRCDIR)zutil.h $(SRCDIR)zlib.h zconf.h $(SRCDIR)inftrees.h +trees.lo: $(SRCDIR)deflate.h $(SRCDIR)zutil.h $(SRCDIR)zlib.h zconf.h $(SRCDIR)trees.h diff --git a/thirdparty/zlib-1.3.1/README b/thirdparty/zlib-1.3.1/README new file mode 100644 index 0000000..c5f9175 --- /dev/null +++ b/thirdparty/zlib-1.3.1/README @@ -0,0 +1,117 @@ +ZLIB DATA COMPRESSION LIBRARY + +zlib 1.3.1 is a general purpose data compression library. All the code is +thread safe. The data format used by the zlib library is described by RFCs +(Request for Comments) 1950 to 1952 in the files +http://tools.ietf.org/html/rfc1950 (zlib format), rfc1951 (deflate format) and +rfc1952 (gzip format). + +All functions of the compression library are documented in the file zlib.h +(volunteer to write man pages welcome, contact zlib@gzip.org). A usage example +of the library is given in the file test/example.c which also tests that +the library is working correctly. Another example is given in the file +test/minigzip.c. The compression library itself is composed of all source +files in the root directory. + +To compile all files and run the test program, follow the instructions given at +the top of Makefile.in. In short "./configure; make test", and if that goes +well, "make install" should work for most flavors of Unix. For Windows, use +one of the special makefiles in win32/ or contrib/vstudio/ . For VMS, use +make_vms.com. + +Questions about zlib should be sent to , or to Gilles Vollant + for the Windows DLL version. The zlib home page is +http://zlib.net/ . Before reporting a problem, please check this site to +verify that you have the latest version of zlib; otherwise get the latest +version and check whether the problem still exists or not. + +PLEASE read the zlib FAQ http://zlib.net/zlib_faq.html before asking for help. + +Mark Nelson wrote an article about zlib for the Jan. 1997 +issue of Dr. Dobb's Journal; a copy of the article is available at +https://marknelson.us/posts/1997/01/01/zlib-engine.html . + +The changes made in version 1.3.1 are documented in the file ChangeLog. + +Unsupported third party contributions are provided in directory contrib/ . + +zlib is available in Java using the java.util.zip package. Follow the API +Documentation link at: https://docs.oracle.com/search/?q=java.util.zip . + +A Perl interface to zlib and bzip2 written by Paul Marquess +can be found at https://github.com/pmqs/IO-Compress . + +A Python interface to zlib written by A.M. Kuchling is +available in Python 1.5 and later versions, see +http://docs.python.org/library/zlib.html . + +zlib is built into tcl: http://wiki.tcl.tk/4610 . + +An experimental package to read and write files in .zip format, written on top +of zlib by Gilles Vollant , is available in the +contrib/minizip directory of zlib. + + +Notes for some targets: + +- For Windows DLL versions, please see win32/DLL_FAQ.txt + +- For 64-bit Irix, deflate.c must be compiled without any optimization. With + -O, one libpng test fails. The test works in 32 bit mode (with the -n32 + compiler flag). The compiler bug has been reported to SGI. + +- zlib doesn't work with gcc 2.6.3 on a DEC 3000/300LX under OSF/1 2.1 it works + when compiled with cc. + +- On Digital Unix 4.0D (formerly OSF/1) on AlphaServer, the cc option -std1 is + necessary to get gzprintf working correctly. This is done by configure. + +- zlib doesn't work on HP-UX 9.05 with some versions of /bin/cc. It works with + other compilers. Use "make test" to check your compiler. + +- gzdopen is not supported on RISCOS or BEOS. + +- For PalmOs, see http://palmzlib.sourceforge.net/ + + +Acknowledgments: + + The deflate format used by zlib was defined by Phil Katz. The deflate and + zlib specifications were written by L. Peter Deutsch. Thanks to all the + people who reported problems and suggested various improvements in zlib; they + are too numerous to cite here. + +Copyright notice: + + (C) 1995-2024 Jean-loup Gailly and Mark Adler + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. + + Jean-loup Gailly Mark Adler + jloup@gzip.org madler@alumni.caltech.edu + +If you use the zlib library in a product, we would appreciate *not* receiving +lengthy legal documents to sign. The sources are provided for free but without +warranty of any kind. The library has been entirely written by Jean-loup +Gailly and Mark Adler; it does not include third-party code. We make all +contributions to and distributions of this project solely in our personal +capacity, and are not conveying any rights to any intellectual property of +any third parties. + +If you redistribute modified sources, we would appreciate that you include in +the file ChangeLog history information documenting your changes. Please read +the FAQ for more information on the distribution of modified source versions. diff --git a/thirdparty/zlib-1.3.1/adler32.c b/thirdparty/zlib-1.3.1/adler32.c new file mode 100644 index 0000000..04b81d2 --- /dev/null +++ b/thirdparty/zlib-1.3.1/adler32.c @@ -0,0 +1,164 @@ +/* adler32.c -- compute the Adler-32 checksum of a data stream + * Copyright (C) 1995-2011, 2016 Mark Adler + * For conditions of distribution and use, see copyright notice in zlib.h + */ + +/* @(#) $Id$ */ + +#include "zutil.h" + +#define BASE 65521U /* largest prime smaller than 65536 */ +#define NMAX 5552 +/* NMAX is the largest n such that 255n(n+1)/2 + (n+1)(BASE-1) <= 2^32-1 */ + +#define DO1(buf,i) {adler += (buf)[i]; sum2 += adler;} +#define DO2(buf,i) DO1(buf,i); DO1(buf,i+1); +#define DO4(buf,i) DO2(buf,i); DO2(buf,i+2); +#define DO8(buf,i) DO4(buf,i); DO4(buf,i+4); +#define DO16(buf) DO8(buf,0); DO8(buf,8); + +/* use NO_DIVIDE if your processor does not do division in hardware -- + try it both ways to see which is faster */ +#ifdef NO_DIVIDE +/* note that this assumes BASE is 65521, where 65536 % 65521 == 15 + (thank you to John Reiser for pointing this out) */ +# define CHOP(a) \ + do { \ + unsigned long tmp = a >> 16; \ + a &= 0xffffUL; \ + a += (tmp << 4) - tmp; \ + } while (0) +# define MOD28(a) \ + do { \ + CHOP(a); \ + if (a >= BASE) a -= BASE; \ + } while (0) +# define MOD(a) \ + do { \ + CHOP(a); \ + MOD28(a); \ + } while (0) +# define MOD63(a) \ + do { /* this assumes a is not negative */ \ + z_off64_t tmp = a >> 32; \ + a &= 0xffffffffL; \ + a += (tmp << 8) - (tmp << 5) + tmp; \ + tmp = a >> 16; \ + a &= 0xffffL; \ + a += (tmp << 4) - tmp; \ + tmp = a >> 16; \ + a &= 0xffffL; \ + a += (tmp << 4) - tmp; \ + if (a >= BASE) a -= BASE; \ + } while (0) +#else +# define MOD(a) a %= BASE +# define MOD28(a) a %= BASE +# define MOD63(a) a %= BASE +#endif + +/* ========================================================================= */ +uLong ZEXPORT adler32_z(uLong adler, const Bytef *buf, z_size_t len) { + unsigned long sum2; + unsigned n; + + /* split Adler-32 into component sums */ + sum2 = (adler >> 16) & 0xffff; + adler &= 0xffff; + + /* in case user likes doing a byte at a time, keep it fast */ + if (len == 1) { + adler += buf[0]; + if (adler >= BASE) + adler -= BASE; + sum2 += adler; + if (sum2 >= BASE) + sum2 -= BASE; + return adler | (sum2 << 16); + } + + /* initial Adler-32 value (deferred check for len == 1 speed) */ + if (buf == Z_NULL) + return 1L; + + /* in case short lengths are provided, keep it somewhat fast */ + if (len < 16) { + while (len--) { + adler += *buf++; + sum2 += adler; + } + if (adler >= BASE) + adler -= BASE; + MOD28(sum2); /* only added so many BASE's */ + return adler | (sum2 << 16); + } + + /* do length NMAX blocks -- requires just one modulo operation */ + while (len >= NMAX) { + len -= NMAX; + n = NMAX / 16; /* NMAX is divisible by 16 */ + do { + DO16(buf); /* 16 sums unrolled */ + buf += 16; + } while (--n); + MOD(adler); + MOD(sum2); + } + + /* do remaining bytes (less than NMAX, still just one modulo) */ + if (len) { /* avoid modulos if none remaining */ + while (len >= 16) { + len -= 16; + DO16(buf); + buf += 16; + } + while (len--) { + adler += *buf++; + sum2 += adler; + } + MOD(adler); + MOD(sum2); + } + + /* return recombined sums */ + return adler | (sum2 << 16); +} + +/* ========================================================================= */ +uLong ZEXPORT adler32(uLong adler, const Bytef *buf, uInt len) { + return adler32_z(adler, buf, len); +} + +/* ========================================================================= */ +local uLong adler32_combine_(uLong adler1, uLong adler2, z_off64_t len2) { + unsigned long sum1; + unsigned long sum2; + unsigned rem; + + /* for negative len, return invalid adler32 as a clue for debugging */ + if (len2 < 0) + return 0xffffffffUL; + + /* the derivation of this formula is left as an exercise for the reader */ + MOD63(len2); /* assumes len2 >= 0 */ + rem = (unsigned)len2; + sum1 = adler1 & 0xffff; + sum2 = rem * sum1; + MOD(sum2); + sum1 += (adler2 & 0xffff) + BASE - 1; + sum2 += ((adler1 >> 16) & 0xffff) + ((adler2 >> 16) & 0xffff) + BASE - rem; + if (sum1 >= BASE) sum1 -= BASE; + if (sum1 >= BASE) sum1 -= BASE; + if (sum2 >= ((unsigned long)BASE << 1)) sum2 -= ((unsigned long)BASE << 1); + if (sum2 >= BASE) sum2 -= BASE; + return sum1 | (sum2 << 16); +} + +/* ========================================================================= */ +uLong ZEXPORT adler32_combine(uLong adler1, uLong adler2, z_off_t len2) { + return adler32_combine_(adler1, adler2, len2); +} + +uLong ZEXPORT adler32_combine64(uLong adler1, uLong adler2, z_off64_t len2) { + return adler32_combine_(adler1, adler2, len2); +} diff --git a/thirdparty/zlib-1.3.1/amiga/Makefile.pup b/thirdparty/zlib-1.3.1/amiga/Makefile.pup new file mode 100644 index 0000000..8940c12 --- /dev/null +++ b/thirdparty/zlib-1.3.1/amiga/Makefile.pup @@ -0,0 +1,69 @@ +# Amiga powerUP (TM) Makefile +# makefile for libpng and SAS C V6.58/7.00 PPC compiler +# Copyright (C) 1998 by Andreas R. Kleinert + +LIBNAME = libzip.a + +CC = scppc +CFLAGS = NOSTKCHK NOSINT OPTIMIZE OPTGO OPTPEEP OPTINLOCAL OPTINL \ + OPTLOOP OPTRDEP=8 OPTDEP=8 OPTCOMP=8 NOVER +AR = ppc-amigaos-ar cr +RANLIB = ppc-amigaos-ranlib +LD = ppc-amigaos-ld -r +LDFLAGS = -o +LDLIBS = LIB:scppc.a LIB:end.o +RM = delete quiet + +OBJS = adler32.o compress.o crc32.o gzclose.o gzlib.o gzread.o gzwrite.o \ + uncompr.o deflate.o trees.o zutil.o inflate.o infback.o inftrees.o inffast.o + +TEST_OBJS = example.o minigzip.o + +all: example minigzip + +check: test +test: all + example + echo hello world | minigzip | minigzip -d + +$(LIBNAME): $(OBJS) + $(AR) $@ $(OBJS) + -$(RANLIB) $@ + +example: example.o $(LIBNAME) + $(LD) $(LDFLAGS) $@ LIB:c_ppc.o $@.o $(LIBNAME) $(LDLIBS) + +minigzip: minigzip.o $(LIBNAME) + $(LD) $(LDFLAGS) $@ LIB:c_ppc.o $@.o $(LIBNAME) $(LDLIBS) + +mostlyclean: clean +clean: + $(RM) *.o example minigzip $(LIBNAME) foo.gz + +zip: + zip -ul9 zlib README ChangeLog Makefile Make????.??? Makefile.?? \ + descrip.mms *.[ch] + +tgz: + cd ..; tar cfz zlib/zlib.tgz zlib/README zlib/ChangeLog zlib/Makefile \ + zlib/Make????.??? zlib/Makefile.?? zlib/descrip.mms zlib/*.[ch] + +# DO NOT DELETE THIS LINE -- make depend depends on it. + +adler32.o: zlib.h zconf.h +compress.o: zlib.h zconf.h +crc32.o: crc32.h zlib.h zconf.h +deflate.o: deflate.h zutil.h zlib.h zconf.h +example.o: zlib.h zconf.h +gzclose.o: zlib.h zconf.h gzguts.h +gzlib.o: zlib.h zconf.h gzguts.h +gzread.o: zlib.h zconf.h gzguts.h +gzwrite.o: zlib.h zconf.h gzguts.h +inffast.o: zutil.h zlib.h zconf.h inftrees.h inflate.h inffast.h +inflate.o: zutil.h zlib.h zconf.h inftrees.h inflate.h inffast.h +infback.o: zutil.h zlib.h zconf.h inftrees.h inflate.h inffast.h +inftrees.o: zutil.h zlib.h zconf.h inftrees.h +minigzip.o: zlib.h zconf.h +trees.o: deflate.h zutil.h zlib.h zconf.h trees.h +uncompr.o: zlib.h zconf.h +zutil.o: zutil.h zlib.h zconf.h diff --git a/thirdparty/zlib-1.3.1/amiga/Makefile.sas b/thirdparty/zlib-1.3.1/amiga/Makefile.sas new file mode 100644 index 0000000..749e291 --- /dev/null +++ b/thirdparty/zlib-1.3.1/amiga/Makefile.sas @@ -0,0 +1,68 @@ +# SMakefile for zlib +# Modified from the standard UNIX Makefile Copyright Jean-loup Gailly +# Osma Ahvenlampi +# Amiga, SAS/C 6.56 & Smake + +CC=sc +CFLAGS=OPT +#CFLAGS=OPT CPU=68030 +#CFLAGS=DEBUG=LINE +LDFLAGS=LIB z.lib + +SCOPTIONS=OPTSCHED OPTINLINE OPTALIAS OPTTIME OPTINLOCAL STRMERGE \ + NOICONS PARMS=BOTH NOSTACKCHECK UTILLIB NOVERSION ERRORREXX \ + DEF=POSTINC + +OBJS = adler32.o compress.o crc32.o gzclose.o gzlib.o gzread.o gzwrite.o \ + uncompr.o deflate.o trees.o zutil.o inflate.o infback.o inftrees.o inffast.o + +TEST_OBJS = example.o minigzip.o + +all: SCOPTIONS example minigzip + +check: test +test: all + example + echo hello world | minigzip | minigzip -d + +install: z.lib + copy clone zlib.h zconf.h INCLUDE: + copy clone z.lib LIB: + +z.lib: $(OBJS) + oml z.lib r $(OBJS) + +example: example.o z.lib + $(CC) $(CFLAGS) LINK TO $@ example.o $(LDFLAGS) + +minigzip: minigzip.o z.lib + $(CC) $(CFLAGS) LINK TO $@ minigzip.o $(LDFLAGS) + +mostlyclean: clean +clean: + -delete force quiet example minigzip *.o z.lib foo.gz *.lnk SCOPTIONS + +SCOPTIONS: Makefile.sas + copy to $@ Promise +// 3. pre-run appended it, var Module = {}; ..generated code.. +// 4. External script tag defines var Module. +// We need to check if Module already exists (e.g. case 3 above). +// Substitution will be replaced with actual code on later stage of the build, +// this way Closure Compiler will not mangle it (e.g. case 4. above). +// Note that if you want to run closure, and also to use Module +// after the generated code, you will need to define var Module = {}; +// before the code. Then that object will be used in the code, and you +// can continue to use Module afterwards as well. +var Module = typeof Module != 'undefined' ? Module : {}; + +// Determine the runtime environment we are in. You can customize this by +// setting the ENVIRONMENT setting at compile time (see settings.js). + +// Attempt to auto-detect the environment +var ENVIRONMENT_IS_WEB = typeof window == 'object'; +var ENVIRONMENT_IS_WORKER = typeof WorkerGlobalScope != 'undefined'; +// N.b. Electron.js environment is simultaneously a NODE-environment, but +// also a web environment. +var ENVIRONMENT_IS_NODE = typeof process == 'object' && typeof process.versions == 'object' && typeof process.versions.node == 'string' && process.type != 'renderer'; +var ENVIRONMENT_IS_SHELL = !ENVIRONMENT_IS_WEB && !ENVIRONMENT_IS_NODE && !ENVIRONMENT_IS_WORKER; + +if (ENVIRONMENT_IS_NODE) { + +} + +// --pre-jses are emitted after the Module integration code, so that they can +// refer to Module (if they choose; they can also define Module) + + +// Sometimes an existing Module object exists with properties +// meant to overwrite the default module functionality. Here +// we collect those properties and reapply _after_ we configure +// the current environment's defaults to avoid having to be so +// defensive during initialization. +var moduleOverrides = {...Module}; + +var arguments_ = []; +var thisProgram = './this.program'; +var quit_ = (status, toThrow) => { + throw toThrow; +}; + +// `/` should be present at the end if `scriptDirectory` is not empty +var scriptDirectory = ''; +function locateFile(path) { + if (Module['locateFile']) { + return Module['locateFile'](path, scriptDirectory); + } + return scriptDirectory + path; +} + +// Hooks that are implemented differently in different runtime environments. +var readAsync, readBinary; + +if (ENVIRONMENT_IS_NODE) { + if (typeof process == 'undefined' || !process.release || process.release.name !== 'node') throw new Error('not compiled for this environment (did you build to HTML and try to run it not on the web, or set ENVIRONMENT to something - like node - and run it someplace else - like on the web?)'); + + var nodeVersion = process.versions.node; + var numericVersion = nodeVersion.split('.').slice(0, 3); + numericVersion = (numericVersion[0] * 10000) + (numericVersion[1] * 100) + (numericVersion[2].split('-')[0] * 1); + var minVersion = 160000; + if (numericVersion < 160000) { + throw new Error('This emscripten-generated code requires node v16.0.0 (detected v' + nodeVersion + ')'); + } + + // These modules will usually be used on Node.js. Load them eagerly to avoid + // the complexity of lazy-loading. + var fs = require('fs'); + var nodePath = require('path'); + + scriptDirectory = __dirname + '/'; + +// include: node_shell_read.js +readBinary = (filename) => { + // We need to re-wrap `file://` strings to URLs. + filename = isFileURI(filename) ? new URL(filename) : filename; + var ret = fs.readFileSync(filename); + assert(Buffer.isBuffer(ret)); + return ret; +}; + +readAsync = async (filename, binary = true) => { + // See the comment in the `readBinary` function. + filename = isFileURI(filename) ? new URL(filename) : filename; + var ret = fs.readFileSync(filename, binary ? undefined : 'utf8'); + assert(binary ? Buffer.isBuffer(ret) : typeof ret == 'string'); + return ret; +}; +// end include: node_shell_read.js + if (!Module['thisProgram'] && process.argv.length > 1) { + thisProgram = process.argv[1].replace(/\\/g, '/'); + } + + arguments_ = process.argv.slice(2); + + if (typeof module != 'undefined') { + module['exports'] = Module; + } + + quit_ = (status, toThrow) => { + process.exitCode = status; + throw toThrow; + }; + +} else +if (ENVIRONMENT_IS_SHELL) { + + if ((typeof process == 'object' && typeof require === 'function') || typeof window == 'object' || typeof WorkerGlobalScope != 'undefined') throw new Error('not compiled for this environment (did you build to HTML and try to run it not on the web, or set ENVIRONMENT to something - like node - and run it someplace else - like on the web?)'); + +} else + +// Note that this includes Node.js workers when relevant (pthreads is enabled). +// Node.js workers are detected as a combination of ENVIRONMENT_IS_WORKER and +// ENVIRONMENT_IS_NODE. +if (ENVIRONMENT_IS_WEB || ENVIRONMENT_IS_WORKER) { + if (ENVIRONMENT_IS_WORKER) { // Check worker, not web, since window could be polyfilled + scriptDirectory = self.location.href; + } else if (typeof document != 'undefined' && document.currentScript) { // web + scriptDirectory = document.currentScript.src; + } + // blob urls look like blob:http://site.com/etc/etc and we cannot infer anything from them. + // otherwise, slice off the final part of the url to find the script directory. + // if scriptDirectory does not contain a slash, lastIndexOf will return -1, + // and scriptDirectory will correctly be replaced with an empty string. + // If scriptDirectory contains a query (starting with ?) or a fragment (starting with #), + // they are removed because they could contain a slash. + if (scriptDirectory.startsWith('blob:')) { + scriptDirectory = ''; + } else { + scriptDirectory = scriptDirectory.slice(0, scriptDirectory.replace(/[?#].*/, '').lastIndexOf('/')+1); + } + + if (!(typeof window == 'object' || typeof WorkerGlobalScope != 'undefined')) throw new Error('not compiled for this environment (did you build to HTML and try to run it not on the web, or set ENVIRONMENT to something - like node - and run it someplace else - like on the web?)'); + + { +// include: web_or_worker_shell_read.js +if (ENVIRONMENT_IS_WORKER) { + readBinary = (url) => { + var xhr = new XMLHttpRequest(); + xhr.open('GET', url, false); + xhr.responseType = 'arraybuffer'; + xhr.send(null); + return new Uint8Array(/** @type{!ArrayBuffer} */(xhr.response)); + }; + } + + readAsync = async (url) => { + // Fetch has some additional restrictions over XHR, like it can't be used on a file:// url. + // See https://github.com/github/fetch/pull/92#issuecomment-140665932 + // Cordova or Electron apps are typically loaded from a file:// url. + // So use XHR on webview if URL is a file URL. + if (isFileURI(url)) { + return new Promise((resolve, reject) => { + var xhr = new XMLHttpRequest(); + xhr.open('GET', url, true); + xhr.responseType = 'arraybuffer'; + xhr.onload = () => { + if (xhr.status == 200 || (xhr.status == 0 && xhr.response)) { // file URLs can return 0 + resolve(xhr.response); + return; + } + reject(xhr.status); + }; + xhr.onerror = reject; + xhr.send(null); + }); + } + var response = await fetch(url, { credentials: 'same-origin' }); + if (response.ok) { + return response.arrayBuffer(); + } + throw new Error(response.status + ' : ' + response.url); + }; +// end include: web_or_worker_shell_read.js + } +} else +{ + throw new Error('environment detection error'); +} + +var out = Module['print'] || console.log.bind(console); +var err = Module['printErr'] || console.error.bind(console); + +// Merge back in the overrides +Object.assign(Module, moduleOverrides); +// Free the object hierarchy contained in the overrides, this lets the GC +// reclaim data used. +moduleOverrides = null; +checkIncomingModuleAPI(); + +// Emit code to handle expected values on the Module object. This applies Module.x +// to the proper local x. This has two benefits: first, we only emit it if it is +// expected to arrive, and second, by using a local everywhere else that can be +// minified. + +if (Module['arguments']) arguments_ = Module['arguments'];legacyModuleProp('arguments', 'arguments_'); + +if (Module['thisProgram']) thisProgram = Module['thisProgram'];legacyModuleProp('thisProgram', 'thisProgram'); + +// perform assertions in shell.js after we set up out() and err(), as otherwise if an assertion fails it cannot print the message +// Assertions on removed incoming Module JS APIs. +assert(typeof Module['memoryInitializerPrefixURL'] == 'undefined', 'Module.memoryInitializerPrefixURL option was removed, use Module.locateFile instead'); +assert(typeof Module['pthreadMainPrefixURL'] == 'undefined', 'Module.pthreadMainPrefixURL option was removed, use Module.locateFile instead'); +assert(typeof Module['cdInitializerPrefixURL'] == 'undefined', 'Module.cdInitializerPrefixURL option was removed, use Module.locateFile instead'); +assert(typeof Module['filePackagePrefixURL'] == 'undefined', 'Module.filePackagePrefixURL option was removed, use Module.locateFile instead'); +assert(typeof Module['read'] == 'undefined', 'Module.read option was removed'); +assert(typeof Module['readAsync'] == 'undefined', 'Module.readAsync option was removed (modify readAsync in JS)'); +assert(typeof Module['readBinary'] == 'undefined', 'Module.readBinary option was removed (modify readBinary in JS)'); +assert(typeof Module['setWindowTitle'] == 'undefined', 'Module.setWindowTitle option was removed (modify emscripten_set_window_title in JS)'); +assert(typeof Module['TOTAL_MEMORY'] == 'undefined', 'Module.TOTAL_MEMORY has been renamed Module.INITIAL_MEMORY'); +legacyModuleProp('asm', 'wasmExports'); +legacyModuleProp('readAsync', 'readAsync'); +legacyModuleProp('readBinary', 'readBinary'); +legacyModuleProp('setWindowTitle', 'setWindowTitle'); +var IDBFS = 'IDBFS is no longer included by default; build with -lidbfs.js'; +var PROXYFS = 'PROXYFS is no longer included by default; build with -lproxyfs.js'; +var WORKERFS = 'WORKERFS is no longer included by default; build with -lworkerfs.js'; +var FETCHFS = 'FETCHFS is no longer included by default; build with -lfetchfs.js'; +var ICASEFS = 'ICASEFS is no longer included by default; build with -licasefs.js'; +var JSFILEFS = 'JSFILEFS is no longer included by default; build with -ljsfilefs.js'; +var OPFS = 'OPFS is no longer included by default; build with -lopfs.js'; + +var NODEFS = 'NODEFS is no longer included by default; build with -lnodefs.js'; + +assert(!ENVIRONMENT_IS_SHELL, 'shell environment detected but not enabled at build time. Add `shell` to `-sENVIRONMENT` to enable.'); + +// end include: shell.js + +// include: preamble.js +// === Preamble library stuff === + +// Documentation for the public APIs defined in this file must be updated in: +// site/source/docs/api_reference/preamble.js.rst +// A prebuilt local version of the documentation is available at: +// site/build/text/docs/api_reference/preamble.js.txt +// You can also build docs locally as HTML or other formats in site/ +// An online HTML version (which may be of a different version of Emscripten) +// is up at http://kripken.github.io/emscripten-site/docs/api_reference/preamble.js.html + +var wasmBinary = Module['wasmBinary'];legacyModuleProp('wasmBinary', 'wasmBinary'); + +if (typeof WebAssembly != 'object') { + err('no native wasm support detected'); +} + +// Wasm globals + +var wasmMemory; + +//======================================== +// Runtime essentials +//======================================== + +// whether we are quitting the application. no code should run after this. +// set in exit() and abort() +var ABORT = false; + +// set by exit() and abort(). Passed to 'onExit' handler. +// NOTE: This is also used as the process return code code in shell environments +// but only when noExitRuntime is false. +var EXITSTATUS; + +// In STRICT mode, we only define assert() when ASSERTIONS is set. i.e. we +// don't define it at all in release modes. This matches the behaviour of +// MINIMAL_RUNTIME. +// TODO(sbc): Make this the default even without STRICT enabled. +/** @type {function(*, string=)} */ +function assert(condition, text) { + if (!condition) { + abort('Assertion failed' + (text ? ': ' + text : '')); + } +} + +// We used to include malloc/free by default in the past. Show a helpful error in +// builds with assertions. +function _malloc() { + abort('malloc() called but not included in the build - add `_malloc` to EXPORTED_FUNCTIONS'); +} +function _free() { + // Show a helpful error since we used to include free by default in the past. + abort('free() called but not included in the build - add `_free` to EXPORTED_FUNCTIONS'); +} + +// Memory management + +var HEAP, +/** @type {!Int8Array} */ + HEAP8, +/** @type {!Uint8Array} */ + HEAPU8, +/** @type {!Int16Array} */ + HEAP16, +/** @type {!Uint16Array} */ + HEAPU16, +/** @type {!Int32Array} */ + HEAP32, +/** @type {!Uint32Array} */ + HEAPU32, +/** @type {!Float32Array} */ + HEAPF32, +/* BigInt64Array type is not correctly defined in closure +/** not-@type {!BigInt64Array} */ + HEAP64, +/* BigUint64Array type is not correctly defined in closure +/** not-t@type {!BigUint64Array} */ + HEAPU64, +/** @type {!Float64Array} */ + HEAPF64; + +var runtimeInitialized = false; + +/** + * Indicates whether filename is delivered via file protocol (as opposed to http/https) + * @noinline + */ +var isFileURI = (filename) => filename.startsWith('file://'); + +// include: runtime_shared.js +// include: runtime_stack_check.js +// Initializes the stack cookie. Called at the startup of main and at the startup of each thread in pthreads mode. +function writeStackCookie() { + var max = _emscripten_stack_get_end(); + assert((max & 3) == 0); + // If the stack ends at address zero we write our cookies 4 bytes into the + // stack. This prevents interference with SAFE_HEAP and ASAN which also + // monitor writes to address zero. + if (max == 0) { + max += 4; + } + // The stack grow downwards towards _emscripten_stack_get_end. + // We write cookies to the final two words in the stack and detect if they are + // ever overwritten. + HEAPU32[((max)>>2)] = 0x02135467; + HEAPU32[(((max)+(4))>>2)] = 0x89BACDFE; + // Also test the global address 0 for integrity. + HEAPU32[((0)>>2)] = 1668509029; +} + +function checkStackCookie() { + if (ABORT) return; + var max = _emscripten_stack_get_end(); + // See writeStackCookie(). + if (max == 0) { + max += 4; + } + var cookie1 = HEAPU32[((max)>>2)]; + var cookie2 = HEAPU32[(((max)+(4))>>2)]; + if (cookie1 != 0x02135467 || cookie2 != 0x89BACDFE) { + abort(`Stack overflow! Stack cookie has been overwritten at ${ptrToString(max)}, expected hex dwords 0x89BACDFE and 0x2135467, but received ${ptrToString(cookie2)} ${ptrToString(cookie1)}`); + } + // Also test the global address 0 for integrity. + if (HEAPU32[((0)>>2)] != 0x63736d65 /* 'emsc' */) { + abort('Runtime error: The application has corrupted its heap memory area (address zero)!'); + } +} +// end include: runtime_stack_check.js +// include: runtime_exceptions.js +// end include: runtime_exceptions.js +// include: runtime_debug.js +// Endianness check +(() => { + var h16 = new Int16Array(1); + var h8 = new Int8Array(h16.buffer); + h16[0] = 0x6373; + if (h8[0] !== 0x73 || h8[1] !== 0x63) throw 'Runtime error: expected the system to be little-endian! (Run with -sSUPPORT_BIG_ENDIAN to bypass)'; +})(); + +if (Module['ENVIRONMENT']) { + throw new Error('Module.ENVIRONMENT has been deprecated. To force the environment, use the ENVIRONMENT compile-time option (for example, -sENVIRONMENT=web or -sENVIRONMENT=node)'); +} + +function legacyModuleProp(prop, newName, incoming=true) { + if (!Object.getOwnPropertyDescriptor(Module, prop)) { + Object.defineProperty(Module, prop, { + configurable: true, + get() { + let extra = incoming ? ' (the initial value can be provided on Module, but after startup the value is only looked for on a local variable of that name)' : ''; + abort(`\`Module.${prop}\` has been replaced by \`${newName}\`` + extra); + + } + }); + } +} + +function consumedModuleProp(prop) { + if (!Object.getOwnPropertyDescriptor(Module, prop)) { + Object.defineProperty(Module, prop, { + configurable: true, + set() { + abort(`Attempt to set \`Module.${prop}\` after it has already been processed. This can happen, for example, when code is injected via '--post-js' rather than '--pre-js'`); + + } + }); + } +} + +function ignoredModuleProp(prop) { + if (Object.getOwnPropertyDescriptor(Module, prop)) { + abort(`\`Module.${prop}\` was supplied but \`${prop}\` not included in INCOMING_MODULE_JS_API`); + } +} + +// forcing the filesystem exports a few things by default +function isExportedByForceFilesystem(name) { + return name === 'FS_createPath' || + name === 'FS_createDataFile' || + name === 'FS_createPreloadedFile' || + name === 'FS_unlink' || + name === 'addRunDependency' || + // The old FS has some functionality that WasmFS lacks. + name === 'FS_createLazyFile' || + name === 'FS_createDevice' || + name === 'removeRunDependency'; +} + +/** + * Intercept access to a global symbol. This enables us to give informative + * warnings/errors when folks attempt to use symbols they did not include in + * their build, or no symbols that no longer exist. + */ +function hookGlobalSymbolAccess(sym, func) { + if (typeof globalThis != 'undefined' && !Object.getOwnPropertyDescriptor(globalThis, sym)) { + Object.defineProperty(globalThis, sym, { + configurable: true, + get() { + func(); + return undefined; + } + }); + } +} + +function missingGlobal(sym, msg) { + hookGlobalSymbolAccess(sym, () => { + warnOnce(`\`${sym}\` is not longer defined by emscripten. ${msg}`); + }); +} + +missingGlobal('buffer', 'Please use HEAP8.buffer or wasmMemory.buffer'); +missingGlobal('asm', 'Please use wasmExports instead'); + +function missingLibrarySymbol(sym) { + hookGlobalSymbolAccess(sym, () => { + // Can't `abort()` here because it would break code that does runtime + // checks. e.g. `if (typeof SDL === 'undefined')`. + var msg = `\`${sym}\` is a library symbol and not included by default; add it to your library.js __deps or to DEFAULT_LIBRARY_FUNCS_TO_INCLUDE on the command line`; + // DEFAULT_LIBRARY_FUNCS_TO_INCLUDE requires the name as it appears in + // library.js, which means $name for a JS name with no prefix, or name + // for a JS name like _name. + var librarySymbol = sym; + if (!librarySymbol.startsWith('_')) { + librarySymbol = '$' + sym; + } + msg += ` (e.g. -sDEFAULT_LIBRARY_FUNCS_TO_INCLUDE='${librarySymbol}')`; + if (isExportedByForceFilesystem(sym)) { + msg += '. Alternatively, forcing filesystem support (-sFORCE_FILESYSTEM) can export this for you'; + } + warnOnce(msg); + }); + + // Any symbol that is not included from the JS library is also (by definition) + // not exported on the Module object. + unexportedRuntimeSymbol(sym); +} + +function unexportedRuntimeSymbol(sym) { + if (!Object.getOwnPropertyDescriptor(Module, sym)) { + Object.defineProperty(Module, sym, { + configurable: true, + get() { + var msg = `'${sym}' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the Emscripten FAQ)`; + if (isExportedByForceFilesystem(sym)) { + msg += '. Alternatively, forcing filesystem support (-sFORCE_FILESYSTEM) can export this for you'; + } + abort(msg); + } + }); + } +} + +var runtimeDebug = true; // Switch to false at runtime to disable logging at the right times + +// Used by XXXXX_DEBUG settings to output debug messages. +function dbg(...args) { + if (!runtimeDebug && typeof runtimeDebug != 'undefined') return; + // TODO(sbc): Make this configurable somehow. Its not always convenient for + // logging to show up as warnings. + console.warn(...args); +} +// end include: runtime_debug.js +// include: memoryprofiler.js +// end include: memoryprofiler.js + + +function updateMemoryViews() { + var b = wasmMemory.buffer; + Module['HEAP8'] = HEAP8 = new Int8Array(b); + Module['HEAP16'] = HEAP16 = new Int16Array(b); + Module['HEAPU8'] = HEAPU8 = new Uint8Array(b); + Module['HEAPU16'] = HEAPU16 = new Uint16Array(b); + Module['HEAP32'] = HEAP32 = new Int32Array(b); + Module['HEAPU32'] = HEAPU32 = new Uint32Array(b); + Module['HEAPF32'] = HEAPF32 = new Float32Array(b); + Module['HEAPF64'] = HEAPF64 = new Float64Array(b); + Module['HEAP64'] = HEAP64 = new BigInt64Array(b); + Module['HEAPU64'] = HEAPU64 = new BigUint64Array(b); +} + +// end include: runtime_shared.js +assert(!Module['STACK_SIZE'], 'STACK_SIZE can no longer be set at runtime. Use -sSTACK_SIZE at link time') + +assert(typeof Int32Array != 'undefined' && typeof Float64Array !== 'undefined' && Int32Array.prototype.subarray != undefined && Int32Array.prototype.set != undefined, + 'JS engine does not provide full typed array support'); + +// If memory is defined in wasm, the user can't provide it, or set INITIAL_MEMORY +assert(!Module['wasmMemory'], 'Use of `wasmMemory` detected. Use -sIMPORTED_MEMORY to define wasmMemory externally'); +assert(!Module['INITIAL_MEMORY'], 'Detected runtime INITIAL_MEMORY setting. Use -sIMPORTED_MEMORY to define wasmMemory dynamically'); + +function preRun() { + if (Module['preRun']) { + if (typeof Module['preRun'] == 'function') Module['preRun'] = [Module['preRun']]; + while (Module['preRun'].length) { + addOnPreRun(Module['preRun'].shift()); + } + } + consumedModuleProp('preRun'); + callRuntimeCallbacks(onPreRuns); +} + +function initRuntime() { + assert(!runtimeInitialized); + runtimeInitialized = true; + + checkStackCookie(); + + + + wasmExports['__wasm_call_ctors'](); + + +} + +function preMain() { + checkStackCookie(); + +} + +function postRun() { + checkStackCookie(); + + if (Module['postRun']) { + if (typeof Module['postRun'] == 'function') Module['postRun'] = [Module['postRun']]; + while (Module['postRun'].length) { + addOnPostRun(Module['postRun'].shift()); + } + } + consumedModuleProp('postRun'); + + callRuntimeCallbacks(onPostRuns); +} + +// A counter of dependencies for calling run(). If we need to +// do asynchronous work before running, increment this and +// decrement it. Incrementing must happen in a place like +// Module.preRun (used by emcc to add file preloading). +// Note that you can add dependencies in preRun, even though +// it happens right before run - run will be postponed until +// the dependencies are met. +var runDependencies = 0; +var dependenciesFulfilled = null; // overridden to take different actions when all run dependencies are fulfilled +var runDependencyTracking = {}; +var runDependencyWatcher = null; + +function getUniqueRunDependency(id) { + var orig = id; + while (1) { + if (!runDependencyTracking[id]) return id; + id = orig + Math.random(); + } +} + +function addRunDependency(id) { + runDependencies++; + + Module['monitorRunDependencies']?.(runDependencies); + + if (id) { + assert(!runDependencyTracking[id]); + runDependencyTracking[id] = 1; + if (runDependencyWatcher === null && typeof setInterval != 'undefined') { + // Check for missing dependencies every few seconds + runDependencyWatcher = setInterval(() => { + if (ABORT) { + clearInterval(runDependencyWatcher); + runDependencyWatcher = null; + return; + } + var shown = false; + for (var dep in runDependencyTracking) { + if (!shown) { + shown = true; + err('still waiting on run dependencies:'); + } + err(`dependency: ${dep}`); + } + if (shown) { + err('(end of list)'); + } + }, 10000); + } + } else { + err('warning: run dependency added without ID'); + } +} + +function removeRunDependency(id) { + runDependencies--; + + Module['monitorRunDependencies']?.(runDependencies); + + if (id) { + assert(runDependencyTracking[id]); + delete runDependencyTracking[id]; + } else { + err('warning: run dependency removed without ID'); + } + if (runDependencies == 0) { + if (runDependencyWatcher !== null) { + clearInterval(runDependencyWatcher); + runDependencyWatcher = null; + } + if (dependenciesFulfilled) { + var callback = dependenciesFulfilled; + dependenciesFulfilled = null; + callback(); // can add another dependenciesFulfilled + } + } +} + +/** @param {string|number=} what */ +function abort(what) { + Module['onAbort']?.(what); + + what = 'Aborted(' + what + ')'; + // TODO(sbc): Should we remove printing and leave it up to whoever + // catches the exception? + err(what); + + ABORT = true; + + // Use a wasm runtime error, because a JS error might be seen as a foreign + // exception, which means we'd run destructors on it. We need the error to + // simply make the program stop. + // FIXME This approach does not work in Wasm EH because it currently does not assume + // all RuntimeErrors are from traps; it decides whether a RuntimeError is from + // a trap or not based on a hidden field within the object. So at the moment + // we don't have a way of throwing a wasm trap from JS. TODO Make a JS API that + // allows this in the wasm spec. + + // Suppress closure compiler warning here. Closure compiler's builtin extern + // definition for WebAssembly.RuntimeError claims it takes no arguments even + // though it can. + // TODO(https://github.com/google/closure-compiler/pull/3913): Remove if/when upstream closure gets fixed. + /** @suppress {checkTypes} */ + var e = new WebAssembly.RuntimeError(what); + + // Throw the error whether or not MODULARIZE is set because abort is used + // in code paths apart from instantiation where an exception is expected + // to be thrown when abort is called. + throw e; +} + +// show errors on likely calls to FS when it was not included +var FS = { + error() { + abort('Filesystem support (FS) was not included. The problem is that you are using files from JS, but files were not used from C/C++, so filesystem support was not auto-included. You can force-include filesystem support with -sFORCE_FILESYSTEM'); + }, + init() { FS.error() }, + createDataFile() { FS.error() }, + createPreloadedFile() { FS.error() }, + createLazyFile() { FS.error() }, + open() { FS.error() }, + mkdev() { FS.error() }, + registerDevice() { FS.error() }, + analyzePath() { FS.error() }, + + ErrnoError() { FS.error() }, +}; +Module['FS_createDataFile'] = FS.createDataFile; +Module['FS_createPreloadedFile'] = FS.createPreloadedFile; + +function createExportWrapper(name, nargs) { + return (...args) => { + assert(runtimeInitialized, `native function \`${name}\` called before runtime initialization`); + var f = wasmExports[name]; + assert(f, `exported native function \`${name}\` not found`); + // Only assert for too many arguments. Too few can be valid since the missing arguments will be zero filled. + assert(args.length <= nargs, `native function \`${name}\` called with ${args.length} args but expects ${nargs}`); + return f(...args); + }; +} + +var wasmBinaryFile; + +function findWasmBinary() { + return locateFile('cmTC_712e3.wasm'); +} + +function getBinarySync(file) { + if (file == wasmBinaryFile && wasmBinary) { + return new Uint8Array(wasmBinary); + } + if (readBinary) { + return readBinary(file); + } + throw 'both async and sync fetching of the wasm failed'; +} + +async function getWasmBinary(binaryFile) { + // If we don't have the binary yet, load it asynchronously using readAsync. + if (!wasmBinary) { + // Fetch the binary using readAsync + try { + var response = await readAsync(binaryFile); + return new Uint8Array(response); + } catch { + // Fall back to getBinarySync below; + } + } + + // Otherwise, getBinarySync should be able to get it synchronously + return getBinarySync(binaryFile); +} + +async function instantiateArrayBuffer(binaryFile, imports) { + try { + var binary = await getWasmBinary(binaryFile); + var instance = await WebAssembly.instantiate(binary, imports); + return instance; + } catch (reason) { + err(`failed to asynchronously prepare wasm: ${reason}`); + + // Warn on some common problems. + if (isFileURI(wasmBinaryFile)) { + err(`warning: Loading from a file URI (${wasmBinaryFile}) is not supported in most browsers. See https://emscripten.org/docs/getting_started/FAQ.html#how-do-i-run-a-local-webserver-for-testing-why-does-my-program-stall-in-downloading-or-preparing`); + } + abort(reason); + } +} + +async function instantiateAsync(binary, binaryFile, imports) { + if (!binary && typeof WebAssembly.instantiateStreaming == 'function' + // Don't use streaming for file:// delivered objects in a webview, fetch them synchronously. + && !isFileURI(binaryFile) + // Avoid instantiateStreaming() on Node.js environment for now, as while + // Node.js v18.1.0 implements it, it does not have a full fetch() + // implementation yet. + // + // Reference: + // https://github.com/emscripten-core/emscripten/pull/16917 + && !ENVIRONMENT_IS_NODE + ) { + try { + var response = fetch(binaryFile, { credentials: 'same-origin' }); + var instantiationResult = await WebAssembly.instantiateStreaming(response, imports); + return instantiationResult; + } catch (reason) { + // We expect the most common failure cause to be a bad MIME type for the binary, + // in which case falling back to ArrayBuffer instantiation should work. + err(`wasm streaming compile failed: ${reason}`); + err('falling back to ArrayBuffer instantiation'); + // fall back of instantiateArrayBuffer below + }; + } + return instantiateArrayBuffer(binaryFile, imports); +} + +function getWasmImports() { + // prepare imports + return { + 'env': wasmImports, + 'wasi_snapshot_preview1': wasmImports, + } +} + +// Create the wasm instance. +// Receives the wasm imports, returns the exports. +async function createWasm() { + // Load the wasm module and create an instance of using native support in the JS engine. + // handle a generated wasm instance, receiving its exports and + // performing other necessary setup + /** @param {WebAssembly.Module=} module*/ + function receiveInstance(instance, module) { + wasmExports = instance.exports; + + + + wasmMemory = wasmExports['memory']; + + assert(wasmMemory, 'memory not found in wasm exports'); + updateMemoryViews(); + + removeRunDependency('wasm-instantiate'); + return wasmExports; + } + // wait for the pthread pool (if any) + addRunDependency('wasm-instantiate'); + + // Prefer streaming instantiation if available. + // Async compilation can be confusing when an error on the page overwrites Module + // (for example, if the order of elements is wrong, and the one defining Module is + // later), so we save Module and check it later. + var trueModule = Module; + function receiveInstantiationResult(result) { + // 'result' is a ResultObject object which has both the module and instance. + // receiveInstance() will swap in the exports (to Module.asm) so they can be called + assert(Module === trueModule, 'the Module object should not be replaced during async compilation - perhaps the order of HTML elements is wrong?'); + trueModule = null; + // TODO: Due to Closure regression https://github.com/google/closure-compiler/issues/3193, the above line no longer optimizes out down to the following line. + // When the regression is fixed, can restore the above PTHREADS-enabled path. + return receiveInstance(result['instance']); + } + + var info = getWasmImports(); + + // User shell pages can write their own Module.instantiateWasm = function(imports, successCallback) callback + // to manually instantiate the Wasm module themselves. This allows pages to + // run the instantiation parallel to any other async startup actions they are + // performing. + // Also pthreads and wasm workers initialize the wasm instance through this + // path. + if (Module['instantiateWasm']) { + return new Promise((resolve, reject) => { + try { + Module['instantiateWasm'](info, (mod, inst) => { + receiveInstance(mod, inst); + resolve(mod.exports); + }); + } catch(e) { + err(`Module.instantiateWasm callback failed with error: ${e}`); + reject(e); + } + }); + } + + wasmBinaryFile ??= findWasmBinary(); + var result = await instantiateAsync(wasmBinary, wasmBinaryFile, info); + var exports = receiveInstantiationResult(result); + return exports; +} + +// end include: preamble.js + +// Begin JS library code + + + class ExitStatus { + name = 'ExitStatus'; + constructor(status) { + this.message = `Program terminated with exit(${status})`; + this.status = status; + } + } + + var callRuntimeCallbacks = (callbacks) => { + while (callbacks.length > 0) { + // Pass the module as the first argument. + callbacks.shift()(Module); + } + }; + var onPostRuns = []; + var addOnPostRun = (cb) => onPostRuns.unshift(cb); + + var onPreRuns = []; + var addOnPreRun = (cb) => onPreRuns.unshift(cb); + + + + /** + * @param {number} ptr + * @param {string} type + */ + function getValue(ptr, type = 'i8') { + if (type.endsWith('*')) type = '*'; + switch (type) { + case 'i1': return HEAP8[ptr]; + case 'i8': return HEAP8[ptr]; + case 'i16': return HEAP16[((ptr)>>1)]; + case 'i32': return HEAP32[((ptr)>>2)]; + case 'i64': return HEAP64[((ptr)>>3)]; + case 'float': return HEAPF32[((ptr)>>2)]; + case 'double': return HEAPF64[((ptr)>>3)]; + case '*': return HEAPU32[((ptr)>>2)]; + default: abort(`invalid type for getValue: ${type}`); + } + } + + var noExitRuntime = Module['noExitRuntime'] || true; + + var ptrToString = (ptr) => { + assert(typeof ptr === 'number'); + // With CAN_ADDRESS_2GB or MEMORY64, pointers are already unsigned. + ptr >>>= 0; + return '0x' + ptr.toString(16).padStart(8, '0'); + }; + + + /** + * @param {number} ptr + * @param {number} value + * @param {string} type + */ + function setValue(ptr, value, type = 'i8') { + if (type.endsWith('*')) type = '*'; + switch (type) { + case 'i1': HEAP8[ptr] = value; break; + case 'i8': HEAP8[ptr] = value; break; + case 'i16': HEAP16[((ptr)>>1)] = value; break; + case 'i32': HEAP32[((ptr)>>2)] = value; break; + case 'i64': HEAP64[((ptr)>>3)] = BigInt(value); break; + case 'float': HEAPF32[((ptr)>>2)] = value; break; + case 'double': HEAPF64[((ptr)>>3)] = value; break; + case '*': HEAPU32[((ptr)>>2)] = value; break; + default: abort(`invalid type for setValue: ${type}`); + } + } + + var stackRestore = (val) => __emscripten_stack_restore(val); + + var stackSave = () => _emscripten_stack_get_current(); + + var warnOnce = (text) => { + warnOnce.shown ||= {}; + if (!warnOnce.shown[text]) { + warnOnce.shown[text] = 1; + if (ENVIRONMENT_IS_NODE) text = 'warning: ' + text; + err(text); + } + }; + + + var runtimeKeepaliveCounter = 0; + var keepRuntimeAlive = () => noExitRuntime || runtimeKeepaliveCounter > 0; + var _proc_exit = (code) => { + EXITSTATUS = code; + if (!keepRuntimeAlive()) { + Module['onExit']?.(code); + ABORT = true; + } + quit_(code, new ExitStatus(code)); + }; + + + /** @param {boolean|number=} implicit */ + var exitJS = (status, implicit) => { + EXITSTATUS = status; + + checkUnflushedContent(); + + // if exit() was called explicitly, warn the user if the runtime isn't actually being shut down + if (keepRuntimeAlive() && !implicit) { + var msg = `program exited (with status: ${status}), but keepRuntimeAlive() is set (counter=${runtimeKeepaliveCounter}) due to an async operation, so halting execution but not exiting the runtime or preventing further async execution (you can use emscripten_force_exit, if you want to force a true shutdown)`; + err(msg); + } + + _proc_exit(status); + }; + + var handleException = (e) => { + // Certain exception types we do not treat as errors since they are used for + // internal control flow. + // 1. ExitStatus, which is thrown by exit() + // 2. "unwind", which is thrown by emscripten_unwind_to_js_event_loop() and others + // that wish to return to JS event loop. + if (e instanceof ExitStatus || e == 'unwind') { + return EXITSTATUS; + } + checkStackCookie(); + if (e instanceof WebAssembly.RuntimeError) { + if (_emscripten_stack_get_current() <= 0) { + err('Stack overflow detected. You can try increasing -sSTACK_SIZE (currently set to 65536)'); + } + } + quit_(1, e); + }; + + var lengthBytesUTF8 = (str) => { + var len = 0; + for (var i = 0; i < str.length; ++i) { + // Gotcha: charCodeAt returns a 16-bit word that is a UTF-16 encoded code + // unit, not a Unicode code point of the character! So decode + // UTF16->UTF32->UTF8. + // See http://unicode.org/faq/utf_bom.html#utf16-3 + var c = str.charCodeAt(i); // possibly a lead surrogate + if (c <= 0x7F) { + len++; + } else if (c <= 0x7FF) { + len += 2; + } else if (c >= 0xD800 && c <= 0xDFFF) { + len += 4; ++i; + } else { + len += 3; + } + } + return len; + }; + + var stringToUTF8Array = (str, heap, outIdx, maxBytesToWrite) => { + assert(typeof str === 'string', `stringToUTF8Array expects a string (got ${typeof str})`); + // Parameter maxBytesToWrite is not optional. Negative values, 0, null, + // undefined and false each don't write out any bytes. + if (!(maxBytesToWrite > 0)) + return 0; + + var startIdx = outIdx; + var endIdx = outIdx + maxBytesToWrite - 1; // -1 for string null terminator. + for (var i = 0; i < str.length; ++i) { + // Gotcha: charCodeAt returns a 16-bit word that is a UTF-16 encoded code + // unit, not a Unicode code point of the character! So decode + // UTF16->UTF32->UTF8. + // See http://unicode.org/faq/utf_bom.html#utf16-3 + // For UTF8 byte structure, see http://en.wikipedia.org/wiki/UTF-8#Description + // and https://www.ietf.org/rfc/rfc2279.txt + // and https://tools.ietf.org/html/rfc3629 + var u = str.charCodeAt(i); // possibly a lead surrogate + if (u >= 0xD800 && u <= 0xDFFF) { + var u1 = str.charCodeAt(++i); + u = 0x10000 + ((u & 0x3FF) << 10) | (u1 & 0x3FF); + } + if (u <= 0x7F) { + if (outIdx >= endIdx) break; + heap[outIdx++] = u; + } else if (u <= 0x7FF) { + if (outIdx + 1 >= endIdx) break; + heap[outIdx++] = 0xC0 | (u >> 6); + heap[outIdx++] = 0x80 | (u & 63); + } else if (u <= 0xFFFF) { + if (outIdx + 2 >= endIdx) break; + heap[outIdx++] = 0xE0 | (u >> 12); + heap[outIdx++] = 0x80 | ((u >> 6) & 63); + heap[outIdx++] = 0x80 | (u & 63); + } else { + if (outIdx + 3 >= endIdx) break; + if (u > 0x10FFFF) warnOnce('Invalid Unicode code point ' + ptrToString(u) + ' encountered when serializing a JS string to a UTF-8 string in wasm memory! (Valid unicode code points should be in range 0-0x10FFFF).'); + heap[outIdx++] = 0xF0 | (u >> 18); + heap[outIdx++] = 0x80 | ((u >> 12) & 63); + heap[outIdx++] = 0x80 | ((u >> 6) & 63); + heap[outIdx++] = 0x80 | (u & 63); + } + } + // Null-terminate the pointer to the buffer. + heap[outIdx] = 0; + return outIdx - startIdx; + }; + var stringToUTF8 = (str, outPtr, maxBytesToWrite) => { + assert(typeof maxBytesToWrite == 'number', 'stringToUTF8(str, outPtr, maxBytesToWrite) is missing the third parameter that specifies the length of the output buffer!'); + return stringToUTF8Array(str, HEAPU8, outPtr, maxBytesToWrite); + }; + + var stackAlloc = (sz) => __emscripten_stack_alloc(sz); + var stringToUTF8OnStack = (str) => { + var size = lengthBytesUTF8(str) + 1; + var ret = stackAlloc(size); + stringToUTF8(str, ret, size); + return ret; + }; +// End JS library code + +function checkIncomingModuleAPI() { + ignoredModuleProp('fetchSettings'); +} +var wasmImports = { + +}; +var wasmExports; +createWasm(); +var ___wasm_call_ctors = createExportWrapper('__wasm_call_ctors', 0); +var _main = Module['_main'] = createExportWrapper('__main_argc_argv', 2); +var _fflush = createExportWrapper('fflush', 1); +var _emscripten_stack_init = () => (_emscripten_stack_init = wasmExports['emscripten_stack_init'])(); +var _emscripten_stack_get_free = () => (_emscripten_stack_get_free = wasmExports['emscripten_stack_get_free'])(); +var _emscripten_stack_get_base = () => (_emscripten_stack_get_base = wasmExports['emscripten_stack_get_base'])(); +var _emscripten_stack_get_end = () => (_emscripten_stack_get_end = wasmExports['emscripten_stack_get_end'])(); +var __emscripten_stack_restore = (a0) => (__emscripten_stack_restore = wasmExports['_emscripten_stack_restore'])(a0); +var __emscripten_stack_alloc = (a0) => (__emscripten_stack_alloc = wasmExports['_emscripten_stack_alloc'])(a0); +var _emscripten_stack_get_current = () => (_emscripten_stack_get_current = wasmExports['emscripten_stack_get_current'])(); + + +// include: postamble.js +// === Auto-generated postamble setup entry stuff === + +var missingLibrarySymbols = [ + 'writeI53ToI64', + 'writeI53ToI64Clamped', + 'writeI53ToI64Signaling', + 'writeI53ToU64Clamped', + 'writeI53ToU64Signaling', + 'readI53FromI64', + 'readI53FromU64', + 'convertI32PairToI53', + 'convertI32PairToI53Checked', + 'convertU32PairToI53', + 'bigintToI53Checked', + 'getTempRet0', + 'setTempRet0', + 'zeroMemory', + 'getHeapMax', + 'abortOnCannotGrowMemory', + 'growMemory', + 'strError', + 'inetPton4', + 'inetNtop4', + 'inetPton6', + 'inetNtop6', + 'readSockaddr', + 'writeSockaddr', + 'emscriptenLog', + 'readEmAsmArgs', + 'jstoi_q', + 'getExecutableName', + 'listenOnce', + 'autoResumeAudioContext', + 'getDynCaller', + 'dynCall', + 'runtimeKeepalivePush', + 'runtimeKeepalivePop', + 'callUserCallback', + 'maybeExit', + 'asmjsMangle', + 'asyncLoad', + 'alignMemory', + 'mmapAlloc', + 'HandleAllocator', + 'getNativeTypeSize', + 'addOnInit', + 'addOnPostCtor', + 'addOnPreMain', + 'addOnExit', + 'STACK_SIZE', + 'STACK_ALIGN', + 'POINTER_SIZE', + 'ASSERTIONS', + 'getCFunc', + 'ccall', + 'cwrap', + 'uleb128Encode', + 'sigToWasmTypes', + 'generateFuncType', + 'convertJsFunctionToWasm', + 'getEmptyTableSlot', + 'updateTableMap', + 'getFunctionAddress', + 'addFunction', + 'removeFunction', + 'reallyNegative', + 'unSign', + 'strLen', + 'reSign', + 'formatString', + 'UTF8ArrayToString', + 'UTF8ToString', + 'intArrayFromString', + 'intArrayToString', + 'AsciiToString', + 'stringToAscii', + 'UTF16ToString', + 'stringToUTF16', + 'lengthBytesUTF16', + 'UTF32ToString', + 'stringToUTF32', + 'lengthBytesUTF32', + 'stringToNewUTF8', + 'writeArrayToMemory', + 'registerKeyEventCallback', + 'maybeCStringToJsString', + 'findEventTarget', + 'getBoundingClientRect', + 'fillMouseEventData', + 'registerMouseEventCallback', + 'registerWheelEventCallback', + 'registerUiEventCallback', + 'registerFocusEventCallback', + 'fillDeviceOrientationEventData', + 'registerDeviceOrientationEventCallback', + 'fillDeviceMotionEventData', + 'registerDeviceMotionEventCallback', + 'screenOrientation', + 'fillOrientationChangeEventData', + 'registerOrientationChangeEventCallback', + 'fillFullscreenChangeEventData', + 'registerFullscreenChangeEventCallback', + 'JSEvents_requestFullscreen', + 'JSEvents_resizeCanvasForFullscreen', + 'registerRestoreOldStyle', + 'hideEverythingExceptGivenElement', + 'restoreHiddenElements', + 'setLetterbox', + 'softFullscreenResizeWebGLRenderTarget', + 'doRequestFullscreen', + 'fillPointerlockChangeEventData', + 'registerPointerlockChangeEventCallback', + 'registerPointerlockErrorEventCallback', + 'requestPointerLock', + 'fillVisibilityChangeEventData', + 'registerVisibilityChangeEventCallback', + 'registerTouchEventCallback', + 'fillGamepadEventData', + 'registerGamepadEventCallback', + 'registerBeforeUnloadEventCallback', + 'fillBatteryEventData', + 'battery', + 'registerBatteryEventCallback', + 'setCanvasElementSize', + 'getCanvasElementSize', + 'jsStackTrace', + 'getCallstack', + 'convertPCtoSourceLocation', + 'getEnvStrings', + 'checkWasiClock', + 'flush_NO_FILESYSTEM', + 'wasiRightsToMuslOFlags', + 'wasiOFlagsToMuslOFlags', + 'initRandomFill', + 'randomFill', + 'safeSetTimeout', + 'setImmediateWrapped', + 'safeRequestAnimationFrame', + 'clearImmediateWrapped', + 'registerPostMainLoop', + 'registerPreMainLoop', + 'getPromise', + 'makePromise', + 'idsToPromises', + 'makePromiseCallback', + 'ExceptionInfo', + 'findMatchingCatch', + 'Browser_asyncPrepareDataCounter', + 'isLeapYear', + 'ydayFromDate', + 'arraySum', + 'addDays', + 'getSocketFromFD', + 'getSocketAddress', + 'FS_createPreloadedFile', + 'FS_modeStringToFlags', + 'FS_getMode', + 'FS_stdin_getChar', + 'FS_unlink', + 'FS_createDataFile', + 'FS_mkdirTree', + '_setNetworkCallback', + 'heapObjectForWebGLType', + 'toTypedArrayIndex', + 'webgl_enable_ANGLE_instanced_arrays', + 'webgl_enable_OES_vertex_array_object', + 'webgl_enable_WEBGL_draw_buffers', + 'webgl_enable_WEBGL_multi_draw', + 'webgl_enable_EXT_polygon_offset_clamp', + 'webgl_enable_EXT_clip_control', + 'webgl_enable_WEBGL_polygon_mode', + 'emscriptenWebGLGet', + 'computeUnpackAlignedImageSize', + 'colorChannelsInGlTextureFormat', + 'emscriptenWebGLGetTexPixelData', + 'emscriptenWebGLGetUniform', + 'webglGetUniformLocation', + 'webglPrepareUniformLocationsBeforeFirstUse', + 'webglGetLeftBracePos', + 'emscriptenWebGLGetVertexAttrib', + '__glGetActiveAttribOrUniform', + 'writeGLArray', + 'registerWebGlEventCallback', + 'runAndAbortIfError', + 'ALLOC_NORMAL', + 'ALLOC_STACK', + 'allocate', + 'writeStringToMemory', + 'writeAsciiToMemory', + 'demangle', + 'stackTrace', +]; +missingLibrarySymbols.forEach(missingLibrarySymbol) + +var unexportedSymbols = [ + 'run', + 'addRunDependency', + 'removeRunDependency', + 'out', + 'err', + 'callMain', + 'abort', + 'wasmMemory', + 'wasmExports', + 'writeStackCookie', + 'checkStackCookie', + 'INT53_MAX', + 'INT53_MIN', + 'stackSave', + 'stackRestore', + 'stackAlloc', + 'ptrToString', + 'exitJS', + 'ENV', + 'ERRNO_CODES', + 'DNS', + 'Protocols', + 'Sockets', + 'timers', + 'warnOnce', + 'readEmAsmArgsArray', + 'jstoi_s', + 'handleException', + 'keepRuntimeAlive', + 'wasmTable', + 'noExitRuntime', + 'addOnPreRun', + 'addOnPostRun', + 'freeTableIndexes', + 'functionsInTableMap', + 'setValue', + 'getValue', + 'PATH', + 'PATH_FS', + 'UTF8Decoder', + 'stringToUTF8Array', + 'stringToUTF8', + 'lengthBytesUTF8', + 'UTF16Decoder', + 'stringToUTF8OnStack', + 'JSEvents', + 'specialHTMLTargets', + 'findCanvasEventTarget', + 'currentFullscreenStrategy', + 'restoreOldWindowedStyle', + 'UNWIND_CACHE', + 'ExitStatus', + 'emSetImmediate', + 'emClearImmediate_deps', + 'emClearImmediate', + 'promiseMap', + 'uncaughtExceptionCount', + 'exceptionLast', + 'exceptionCaught', + 'Browser', + 'getPreloadedImageData__data', + 'wget', + 'MONTH_DAYS_REGULAR', + 'MONTH_DAYS_LEAP', + 'MONTH_DAYS_REGULAR_CUMULATIVE', + 'MONTH_DAYS_LEAP_CUMULATIVE', + 'SYSCALLS', + 'preloadPlugins', + 'FS_stdin_getChar_buffer', + 'FS_createPath', + 'FS_createDevice', + 'FS_readFile', + 'FS', + 'FS_createLazyFile', + 'MEMFS', + 'TTY', + 'PIPEFS', + 'SOCKFS', + 'tempFixedLengthArray', + 'miniTempWebGLFloatBuffers', + 'miniTempWebGLIntBuffers', + 'GL', + 'AL', + 'GLUT', + 'EGL', + 'GLEW', + 'IDBStore', + 'SDL', + 'SDL_gfx', + 'allocateUTF8', + 'allocateUTF8OnStack', + 'print', + 'printErr', +]; +unexportedSymbols.forEach(unexportedRuntimeSymbol); + + + +var calledRun; + +function callMain(args = []) { + assert(runDependencies == 0, 'cannot call main when async dependencies remain! (listen on Module["onRuntimeInitialized"])'); + assert(typeof onPreRuns === 'undefined' || onPreRuns.length == 0, 'cannot call main when preRun functions remain to be called'); + + var entryFunction = _main; + + args.unshift(thisProgram); + + var argc = args.length; + var argv = stackAlloc((argc + 1) * 4); + var argv_ptr = argv; + args.forEach((arg) => { + HEAPU32[((argv_ptr)>>2)] = stringToUTF8OnStack(arg); + argv_ptr += 4; + }); + HEAPU32[((argv_ptr)>>2)] = 0; + + try { + + var ret = entryFunction(argc, argv); + + // if we're not running an evented main loop, it's time to exit + exitJS(ret, /* implicit = */ true); + return ret; + } catch (e) { + return handleException(e); + } +} + +function stackCheckInit() { + // This is normally called automatically during __wasm_call_ctors but need to + // get these values before even running any of the ctors so we call it redundantly + // here. + _emscripten_stack_init(); + // TODO(sbc): Move writeStackCookie to native to to avoid this. + writeStackCookie(); +} + +function run(args = arguments_) { + + if (runDependencies > 0) { + dependenciesFulfilled = run; + return; + } + + stackCheckInit(); + + preRun(); + + // a preRun added a dependency, run will be called later + if (runDependencies > 0) { + dependenciesFulfilled = run; + return; + } + + function doRun() { + // run may have just been called through dependencies being fulfilled just in this very frame, + // or while the async setStatus time below was happening + assert(!calledRun); + calledRun = true; + Module['calledRun'] = true; + + if (ABORT) return; + + initRuntime(); + + preMain(); + + Module['onRuntimeInitialized']?.(); + consumedModuleProp('onRuntimeInitialized'); + + var noInitialRun = Module['noInitialRun'];legacyModuleProp('noInitialRun', 'noInitialRun'); + if (!noInitialRun) callMain(args); + + postRun(); + } + + if (Module['setStatus']) { + Module['setStatus']('Running...'); + setTimeout(() => { + setTimeout(() => Module['setStatus'](''), 1); + doRun(); + }, 1); + } else + { + doRun(); + } + checkStackCookie(); +} + +function checkUnflushedContent() { + // Compiler settings do not allow exiting the runtime, so flushing + // the streams is not possible. but in ASSERTIONS mode we check + // if there was something to flush, and if so tell the user they + // should request that the runtime be exitable. + // Normally we would not even include flush() at all, but in ASSERTIONS + // builds we do so just for this check, and here we see if there is any + // content to flush, that is, we check if there would have been + // something a non-ASSERTIONS build would have not seen. + // How we flush the streams depends on whether we are in SYSCALLS_REQUIRE_FILESYSTEM=0 + // mode (which has its own special function for this; otherwise, all + // the code is inside libc) + var oldOut = out; + var oldErr = err; + var has = false; + out = err = (x) => { + has = true; + } + try { // it doesn't matter if it fails + _fflush(0); + } catch(e) {} + out = oldOut; + err = oldErr; + if (has) { + warnOnce('stdio streams had content in them that was not flushed. you should set EXIT_RUNTIME to 1 (see the Emscripten FAQ), or make sure to emit a newline when you printf etc.'); + warnOnce('(this may also be due to not including full filesystem support - try building with -sFORCE_FILESYSTEM)'); + } +} + +if (Module['preInit']) { + if (typeof Module['preInit'] == 'function') Module['preInit'] = [Module['preInit']]; + while (Module['preInit'].length > 0) { + Module['preInit'].pop()(); + } +} +consumedModuleProp('preInit'); + +run(); + +// end include: postamble.js + diff --git a/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/3.28.3/CMakeSystem.cmake b/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/3.28.3/CMakeSystem.cmake new file mode 100644 index 0000000..196df84 --- /dev/null +++ b/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/3.28.3/CMakeSystem.cmake @@ -0,0 +1,15 @@ +set(CMAKE_HOST_SYSTEM "Linux-6.8.0-53-generic") +set(CMAKE_HOST_SYSTEM_NAME "Linux") +set(CMAKE_HOST_SYSTEM_VERSION "6.8.0-53-generic") +set(CMAKE_HOST_SYSTEM_PROCESSOR "x86_64") + +include("/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/cmake/Modules/Platform/Emscripten.cmake") + +set(CMAKE_SYSTEM "Emscripten-1") +set(CMAKE_SYSTEM_NAME "Emscripten") +set(CMAKE_SYSTEM_VERSION "1") +set(CMAKE_SYSTEM_PROCESSOR "x86") + +set(CMAKE_CROSSCOMPILING "TRUE") + +set(CMAKE_SYSTEM_LOADED 1) diff --git a/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/3.28.3/CompilerIdC/CMakeCCompilerId.c b/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/3.28.3/CompilerIdC/CMakeCCompilerId.c new file mode 100644 index 0000000..0a0ec9b --- /dev/null +++ b/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/3.28.3/CompilerIdC/CMakeCCompilerId.c @@ -0,0 +1,880 @@ +#ifdef __cplusplus +# error "A C++ compiler has been selected for C." +#endif + +#if defined(__18CXX) +# define ID_VOID_MAIN +#endif +#if defined(__CLASSIC_C__) +/* cv-qualifiers did not exist in K&R C */ +# define const +# define volatile +#endif + +#if !defined(__has_include) +/* If the compiler does not have __has_include, pretend the answer is + always no. */ +# define __has_include(x) 0 +#endif + + +/* Version number components: V=Version, R=Revision, P=Patch + Version date components: YYYY=Year, MM=Month, DD=Day */ + +#if defined(__INTEL_COMPILER) || defined(__ICC) +# define COMPILER_ID "Intel" +# if defined(_MSC_VER) +# define SIMULATE_ID "MSVC" +# endif +# if defined(__GNUC__) +# define SIMULATE_ID "GNU" +# endif + /* __INTEL_COMPILER = VRP prior to 2021, and then VVVV for 2021 and later, + except that a few beta releases use the old format with V=2021. */ +# if __INTEL_COMPILER < 2021 || __INTEL_COMPILER == 202110 || __INTEL_COMPILER == 202111 +# define COMPILER_VERSION_MAJOR DEC(__INTEL_COMPILER/100) +# define COMPILER_VERSION_MINOR DEC(__INTEL_COMPILER/10 % 10) +# if defined(__INTEL_COMPILER_UPDATE) +# define COMPILER_VERSION_PATCH DEC(__INTEL_COMPILER_UPDATE) +# else +# define COMPILER_VERSION_PATCH DEC(__INTEL_COMPILER % 10) +# endif +# else +# define COMPILER_VERSION_MAJOR DEC(__INTEL_COMPILER) +# define COMPILER_VERSION_MINOR DEC(__INTEL_COMPILER_UPDATE) + /* The third version component from --version is an update index, + but no macro is provided for it. */ +# define COMPILER_VERSION_PATCH DEC(0) +# endif +# if defined(__INTEL_COMPILER_BUILD_DATE) + /* __INTEL_COMPILER_BUILD_DATE = YYYYMMDD */ +# define COMPILER_VERSION_TWEAK DEC(__INTEL_COMPILER_BUILD_DATE) +# endif +# if defined(_MSC_VER) + /* _MSC_VER = VVRR */ +# define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100) +# define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100) +# endif +# if defined(__GNUC__) +# define SIMULATE_VERSION_MAJOR DEC(__GNUC__) +# elif defined(__GNUG__) +# define SIMULATE_VERSION_MAJOR DEC(__GNUG__) +# endif +# if defined(__GNUC_MINOR__) +# define SIMULATE_VERSION_MINOR DEC(__GNUC_MINOR__) +# endif +# if defined(__GNUC_PATCHLEVEL__) +# define SIMULATE_VERSION_PATCH DEC(__GNUC_PATCHLEVEL__) +# endif + +#elif (defined(__clang__) && defined(__INTEL_CLANG_COMPILER)) || defined(__INTEL_LLVM_COMPILER) +# define COMPILER_ID "IntelLLVM" +#if defined(_MSC_VER) +# define SIMULATE_ID "MSVC" +#endif +#if defined(__GNUC__) +# define SIMULATE_ID "GNU" +#endif +/* __INTEL_LLVM_COMPILER = VVVVRP prior to 2021.2.0, VVVVRRPP for 2021.2.0 and + * later. Look for 6 digit vs. 8 digit version number to decide encoding. + * VVVV is no smaller than the current year when a version is released. + */ +#if __INTEL_LLVM_COMPILER < 1000000L +# define COMPILER_VERSION_MAJOR DEC(__INTEL_LLVM_COMPILER/100) +# define COMPILER_VERSION_MINOR DEC(__INTEL_LLVM_COMPILER/10 % 10) +# define COMPILER_VERSION_PATCH DEC(__INTEL_LLVM_COMPILER % 10) +#else +# define COMPILER_VERSION_MAJOR DEC(__INTEL_LLVM_COMPILER/10000) +# define COMPILER_VERSION_MINOR DEC(__INTEL_LLVM_COMPILER/100 % 100) +# define COMPILER_VERSION_PATCH DEC(__INTEL_LLVM_COMPILER % 100) +#endif +#if defined(_MSC_VER) + /* _MSC_VER = VVRR */ +# define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100) +# define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100) +#endif +#if defined(__GNUC__) +# define SIMULATE_VERSION_MAJOR DEC(__GNUC__) +#elif defined(__GNUG__) +# define SIMULATE_VERSION_MAJOR DEC(__GNUG__) +#endif +#if defined(__GNUC_MINOR__) +# define SIMULATE_VERSION_MINOR DEC(__GNUC_MINOR__) +#endif +#if defined(__GNUC_PATCHLEVEL__) +# define SIMULATE_VERSION_PATCH DEC(__GNUC_PATCHLEVEL__) +#endif + +#elif defined(__PATHCC__) +# define COMPILER_ID "PathScale" +# define COMPILER_VERSION_MAJOR DEC(__PATHCC__) +# define COMPILER_VERSION_MINOR DEC(__PATHCC_MINOR__) +# if defined(__PATHCC_PATCHLEVEL__) +# define COMPILER_VERSION_PATCH DEC(__PATHCC_PATCHLEVEL__) +# endif + +#elif defined(__BORLANDC__) && defined(__CODEGEARC_VERSION__) +# define COMPILER_ID "Embarcadero" +# define COMPILER_VERSION_MAJOR HEX(__CODEGEARC_VERSION__>>24 & 0x00FF) +# define COMPILER_VERSION_MINOR HEX(__CODEGEARC_VERSION__>>16 & 0x00FF) +# define COMPILER_VERSION_PATCH DEC(__CODEGEARC_VERSION__ & 0xFFFF) + +#elif defined(__BORLANDC__) +# define COMPILER_ID "Borland" + /* __BORLANDC__ = 0xVRR */ +# define COMPILER_VERSION_MAJOR HEX(__BORLANDC__>>8) +# define COMPILER_VERSION_MINOR HEX(__BORLANDC__ & 0xFF) + +#elif defined(__WATCOMC__) && __WATCOMC__ < 1200 +# define COMPILER_ID "Watcom" + /* __WATCOMC__ = VVRR */ +# define COMPILER_VERSION_MAJOR DEC(__WATCOMC__ / 100) +# define COMPILER_VERSION_MINOR DEC((__WATCOMC__ / 10) % 10) +# if (__WATCOMC__ % 10) > 0 +# define COMPILER_VERSION_PATCH DEC(__WATCOMC__ % 10) +# endif + +#elif defined(__WATCOMC__) +# define COMPILER_ID "OpenWatcom" + /* __WATCOMC__ = VVRP + 1100 */ +# define COMPILER_VERSION_MAJOR DEC((__WATCOMC__ - 1100) / 100) +# define COMPILER_VERSION_MINOR DEC((__WATCOMC__ / 10) % 10) +# if (__WATCOMC__ % 10) > 0 +# define COMPILER_VERSION_PATCH DEC(__WATCOMC__ % 10) +# endif + +#elif defined(__SUNPRO_C) +# define COMPILER_ID "SunPro" +# if __SUNPRO_C >= 0x5100 + /* __SUNPRO_C = 0xVRRP */ +# define COMPILER_VERSION_MAJOR HEX(__SUNPRO_C>>12) +# define COMPILER_VERSION_MINOR HEX(__SUNPRO_C>>4 & 0xFF) +# define COMPILER_VERSION_PATCH HEX(__SUNPRO_C & 0xF) +# else + /* __SUNPRO_CC = 0xVRP */ +# define COMPILER_VERSION_MAJOR HEX(__SUNPRO_C>>8) +# define COMPILER_VERSION_MINOR HEX(__SUNPRO_C>>4 & 0xF) +# define COMPILER_VERSION_PATCH HEX(__SUNPRO_C & 0xF) +# endif + +#elif defined(__HP_cc) +# define COMPILER_ID "HP" + /* __HP_cc = VVRRPP */ +# define COMPILER_VERSION_MAJOR DEC(__HP_cc/10000) +# define COMPILER_VERSION_MINOR DEC(__HP_cc/100 % 100) +# define COMPILER_VERSION_PATCH DEC(__HP_cc % 100) + +#elif defined(__DECC) +# define COMPILER_ID "Compaq" + /* __DECC_VER = VVRRTPPPP */ +# define COMPILER_VERSION_MAJOR DEC(__DECC_VER/10000000) +# define COMPILER_VERSION_MINOR DEC(__DECC_VER/100000 % 100) +# define COMPILER_VERSION_PATCH DEC(__DECC_VER % 10000) + +#elif defined(__IBMC__) && defined(__COMPILER_VER__) +# define COMPILER_ID "zOS" + /* __IBMC__ = VRP */ +# define COMPILER_VERSION_MAJOR DEC(__IBMC__/100) +# define COMPILER_VERSION_MINOR DEC(__IBMC__/10 % 10) +# define COMPILER_VERSION_PATCH DEC(__IBMC__ % 10) + +#elif defined(__open_xl__) && defined(__clang__) +# define COMPILER_ID "IBMClang" +# define COMPILER_VERSION_MAJOR DEC(__open_xl_version__) +# define COMPILER_VERSION_MINOR DEC(__open_xl_release__) +# define COMPILER_VERSION_PATCH DEC(__open_xl_modification__) +# define COMPILER_VERSION_TWEAK DEC(__open_xl_ptf_fix_level__) + + +#elif defined(__ibmxl__) && defined(__clang__) +# define COMPILER_ID "XLClang" +# define COMPILER_VERSION_MAJOR DEC(__ibmxl_version__) +# define COMPILER_VERSION_MINOR DEC(__ibmxl_release__) +# define COMPILER_VERSION_PATCH DEC(__ibmxl_modification__) +# define COMPILER_VERSION_TWEAK DEC(__ibmxl_ptf_fix_level__) + + +#elif defined(__IBMC__) && !defined(__COMPILER_VER__) && __IBMC__ >= 800 +# define COMPILER_ID "XL" + /* __IBMC__ = VRP */ +# define COMPILER_VERSION_MAJOR DEC(__IBMC__/100) +# define COMPILER_VERSION_MINOR DEC(__IBMC__/10 % 10) +# define COMPILER_VERSION_PATCH DEC(__IBMC__ % 10) + +#elif defined(__IBMC__) && !defined(__COMPILER_VER__) && __IBMC__ < 800 +# define COMPILER_ID "VisualAge" + /* __IBMC__ = VRP */ +# define COMPILER_VERSION_MAJOR DEC(__IBMC__/100) +# define COMPILER_VERSION_MINOR DEC(__IBMC__/10 % 10) +# define COMPILER_VERSION_PATCH DEC(__IBMC__ % 10) + +#elif defined(__NVCOMPILER) +# define COMPILER_ID "NVHPC" +# define COMPILER_VERSION_MAJOR DEC(__NVCOMPILER_MAJOR__) +# define COMPILER_VERSION_MINOR DEC(__NVCOMPILER_MINOR__) +# if defined(__NVCOMPILER_PATCHLEVEL__) +# define COMPILER_VERSION_PATCH DEC(__NVCOMPILER_PATCHLEVEL__) +# endif + +#elif defined(__PGI) +# define COMPILER_ID "PGI" +# define COMPILER_VERSION_MAJOR DEC(__PGIC__) +# define COMPILER_VERSION_MINOR DEC(__PGIC_MINOR__) +# if defined(__PGIC_PATCHLEVEL__) +# define COMPILER_VERSION_PATCH DEC(__PGIC_PATCHLEVEL__) +# endif + +#elif defined(__clang__) && defined(__cray__) +# define COMPILER_ID "CrayClang" +# define COMPILER_VERSION_MAJOR DEC(__cray_major__) +# define COMPILER_VERSION_MINOR DEC(__cray_minor__) +# define COMPILER_VERSION_PATCH DEC(__cray_patchlevel__) +# define COMPILER_VERSION_INTERNAL_STR __clang_version__ + + +#elif defined(_CRAYC) +# define COMPILER_ID "Cray" +# define COMPILER_VERSION_MAJOR DEC(_RELEASE_MAJOR) +# define COMPILER_VERSION_MINOR DEC(_RELEASE_MINOR) + +#elif defined(__TI_COMPILER_VERSION__) +# define COMPILER_ID "TI" + /* __TI_COMPILER_VERSION__ = VVVRRRPPP */ +# define COMPILER_VERSION_MAJOR DEC(__TI_COMPILER_VERSION__/1000000) +# define COMPILER_VERSION_MINOR DEC(__TI_COMPILER_VERSION__/1000 % 1000) +# define COMPILER_VERSION_PATCH DEC(__TI_COMPILER_VERSION__ % 1000) + +#elif defined(__CLANG_FUJITSU) +# define COMPILER_ID "FujitsuClang" +# define COMPILER_VERSION_MAJOR DEC(__FCC_major__) +# define COMPILER_VERSION_MINOR DEC(__FCC_minor__) +# define COMPILER_VERSION_PATCH DEC(__FCC_patchlevel__) +# define COMPILER_VERSION_INTERNAL_STR __clang_version__ + + +#elif defined(__FUJITSU) +# define COMPILER_ID "Fujitsu" +# if defined(__FCC_version__) +# define COMPILER_VERSION __FCC_version__ +# elif defined(__FCC_major__) +# define COMPILER_VERSION_MAJOR DEC(__FCC_major__) +# define COMPILER_VERSION_MINOR DEC(__FCC_minor__) +# define COMPILER_VERSION_PATCH DEC(__FCC_patchlevel__) +# endif +# if defined(__fcc_version) +# define COMPILER_VERSION_INTERNAL DEC(__fcc_version) +# elif defined(__FCC_VERSION) +# define COMPILER_VERSION_INTERNAL DEC(__FCC_VERSION) +# endif + + +#elif defined(__ghs__) +# define COMPILER_ID "GHS" +/* __GHS_VERSION_NUMBER = VVVVRP */ +# ifdef __GHS_VERSION_NUMBER +# define COMPILER_VERSION_MAJOR DEC(__GHS_VERSION_NUMBER / 100) +# define COMPILER_VERSION_MINOR DEC(__GHS_VERSION_NUMBER / 10 % 10) +# define COMPILER_VERSION_PATCH DEC(__GHS_VERSION_NUMBER % 10) +# endif + +#elif defined(__TASKING__) +# define COMPILER_ID "Tasking" + # define COMPILER_VERSION_MAJOR DEC(__VERSION__/1000) + # define COMPILER_VERSION_MINOR DEC(__VERSION__ % 100) +# define COMPILER_VERSION_INTERNAL DEC(__VERSION__) + +#elif defined(__ORANGEC__) +# define COMPILER_ID "OrangeC" +# define COMPILER_VERSION_MAJOR DEC(__ORANGEC_MAJOR__) +# define COMPILER_VERSION_MINOR DEC(__ORANGEC_MINOR__) +# define COMPILER_VERSION_PATCH DEC(__ORANGEC_PATCHLEVEL__) + +#elif defined(__TINYC__) +# define COMPILER_ID "TinyCC" + +#elif defined(__BCC__) +# define COMPILER_ID "Bruce" + +#elif defined(__SCO_VERSION__) +# define COMPILER_ID "SCO" + +#elif defined(__ARMCC_VERSION) && !defined(__clang__) +# define COMPILER_ID "ARMCC" +#if __ARMCC_VERSION >= 1000000 + /* __ARMCC_VERSION = VRRPPPP */ + # define COMPILER_VERSION_MAJOR DEC(__ARMCC_VERSION/1000000) + # define COMPILER_VERSION_MINOR DEC(__ARMCC_VERSION/10000 % 100) + # define COMPILER_VERSION_PATCH DEC(__ARMCC_VERSION % 10000) +#else + /* __ARMCC_VERSION = VRPPPP */ + # define COMPILER_VERSION_MAJOR DEC(__ARMCC_VERSION/100000) + # define COMPILER_VERSION_MINOR DEC(__ARMCC_VERSION/10000 % 10) + # define COMPILER_VERSION_PATCH DEC(__ARMCC_VERSION % 10000) +#endif + + +#elif defined(__clang__) && defined(__apple_build_version__) +# define COMPILER_ID "AppleClang" +# if defined(_MSC_VER) +# define SIMULATE_ID "MSVC" +# endif +# define COMPILER_VERSION_MAJOR DEC(__clang_major__) +# define COMPILER_VERSION_MINOR DEC(__clang_minor__) +# define COMPILER_VERSION_PATCH DEC(__clang_patchlevel__) +# if defined(_MSC_VER) + /* _MSC_VER = VVRR */ +# define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100) +# define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100) +# endif +# define COMPILER_VERSION_TWEAK DEC(__apple_build_version__) + +#elif defined(__clang__) && defined(__ARMCOMPILER_VERSION) +# define COMPILER_ID "ARMClang" + # define COMPILER_VERSION_MAJOR DEC(__ARMCOMPILER_VERSION/1000000) + # define COMPILER_VERSION_MINOR DEC(__ARMCOMPILER_VERSION/10000 % 100) + # define COMPILER_VERSION_PATCH DEC(__ARMCOMPILER_VERSION/100 % 100) +# define COMPILER_VERSION_INTERNAL DEC(__ARMCOMPILER_VERSION) + +#elif defined(__clang__) +# define COMPILER_ID "Clang" +# if defined(_MSC_VER) +# define SIMULATE_ID "MSVC" +# endif +# define COMPILER_VERSION_MAJOR DEC(__clang_major__) +# define COMPILER_VERSION_MINOR DEC(__clang_minor__) +# define COMPILER_VERSION_PATCH DEC(__clang_patchlevel__) +# if defined(_MSC_VER) + /* _MSC_VER = VVRR */ +# define SIMULATE_VERSION_MAJOR DEC(_MSC_VER / 100) +# define SIMULATE_VERSION_MINOR DEC(_MSC_VER % 100) +# endif + +#elif defined(__LCC__) && (defined(__GNUC__) || defined(__GNUG__) || defined(__MCST__)) +# define COMPILER_ID "LCC" +# define COMPILER_VERSION_MAJOR DEC(__LCC__ / 100) +# define COMPILER_VERSION_MINOR DEC(__LCC__ % 100) +# if defined(__LCC_MINOR__) +# define COMPILER_VERSION_PATCH DEC(__LCC_MINOR__) +# endif +# if defined(__GNUC__) && defined(__GNUC_MINOR__) +# define SIMULATE_ID "GNU" +# define SIMULATE_VERSION_MAJOR DEC(__GNUC__) +# define SIMULATE_VERSION_MINOR DEC(__GNUC_MINOR__) +# if defined(__GNUC_PATCHLEVEL__) +# define SIMULATE_VERSION_PATCH DEC(__GNUC_PATCHLEVEL__) +# endif +# endif + +#elif defined(__GNUC__) +# define COMPILER_ID "GNU" +# define COMPILER_VERSION_MAJOR DEC(__GNUC__) +# if defined(__GNUC_MINOR__) +# define COMPILER_VERSION_MINOR DEC(__GNUC_MINOR__) +# endif +# if defined(__GNUC_PATCHLEVEL__) +# define COMPILER_VERSION_PATCH DEC(__GNUC_PATCHLEVEL__) +# endif + +#elif defined(_MSC_VER) +# define COMPILER_ID "MSVC" + /* _MSC_VER = VVRR */ +# define COMPILER_VERSION_MAJOR DEC(_MSC_VER / 100) +# define COMPILER_VERSION_MINOR DEC(_MSC_VER % 100) +# if defined(_MSC_FULL_VER) +# if _MSC_VER >= 1400 + /* _MSC_FULL_VER = VVRRPPPPP */ +# define COMPILER_VERSION_PATCH DEC(_MSC_FULL_VER % 100000) +# else + /* _MSC_FULL_VER = VVRRPPPP */ +# define COMPILER_VERSION_PATCH DEC(_MSC_FULL_VER % 10000) +# endif +# endif +# if defined(_MSC_BUILD) +# define COMPILER_VERSION_TWEAK DEC(_MSC_BUILD) +# endif + +#elif defined(_ADI_COMPILER) +# define COMPILER_ID "ADSP" +#if defined(__VERSIONNUM__) + /* __VERSIONNUM__ = 0xVVRRPPTT */ +# define COMPILER_VERSION_MAJOR DEC(__VERSIONNUM__ >> 24 & 0xFF) +# define COMPILER_VERSION_MINOR DEC(__VERSIONNUM__ >> 16 & 0xFF) +# define COMPILER_VERSION_PATCH DEC(__VERSIONNUM__ >> 8 & 0xFF) +# define COMPILER_VERSION_TWEAK DEC(__VERSIONNUM__ & 0xFF) +#endif + +#elif defined(__IAR_SYSTEMS_ICC__) || defined(__IAR_SYSTEMS_ICC) +# define COMPILER_ID "IAR" +# if defined(__VER__) && defined(__ICCARM__) +# define COMPILER_VERSION_MAJOR DEC((__VER__) / 1000000) +# define COMPILER_VERSION_MINOR DEC(((__VER__) / 1000) % 1000) +# define COMPILER_VERSION_PATCH DEC((__VER__) % 1000) +# define COMPILER_VERSION_INTERNAL DEC(__IAR_SYSTEMS_ICC__) +# elif defined(__VER__) && (defined(__ICCAVR__) || defined(__ICCRX__) || defined(__ICCRH850__) || defined(__ICCRL78__) || defined(__ICC430__) || defined(__ICCRISCV__) || defined(__ICCV850__) || defined(__ICC8051__) || defined(__ICCSTM8__)) +# define COMPILER_VERSION_MAJOR DEC((__VER__) / 100) +# define COMPILER_VERSION_MINOR DEC((__VER__) - (((__VER__) / 100)*100)) +# define COMPILER_VERSION_PATCH DEC(__SUBVERSION__) +# define COMPILER_VERSION_INTERNAL DEC(__IAR_SYSTEMS_ICC__) +# endif + +#elif defined(__SDCC_VERSION_MAJOR) || defined(SDCC) +# define COMPILER_ID "SDCC" +# if defined(__SDCC_VERSION_MAJOR) +# define COMPILER_VERSION_MAJOR DEC(__SDCC_VERSION_MAJOR) +# define COMPILER_VERSION_MINOR DEC(__SDCC_VERSION_MINOR) +# define COMPILER_VERSION_PATCH DEC(__SDCC_VERSION_PATCH) +# else + /* SDCC = VRP */ +# define COMPILER_VERSION_MAJOR DEC(SDCC/100) +# define COMPILER_VERSION_MINOR DEC(SDCC/10 % 10) +# define COMPILER_VERSION_PATCH DEC(SDCC % 10) +# endif + + +/* These compilers are either not known or too old to define an + identification macro. Try to identify the platform and guess that + it is the native compiler. */ +#elif defined(__hpux) || defined(__hpua) +# define COMPILER_ID "HP" + +#else /* unknown compiler */ +# define COMPILER_ID "" +#endif + +/* Construct the string literal in pieces to prevent the source from + getting matched. Store it in a pointer rather than an array + because some compilers will just produce instructions to fill the + array rather than assigning a pointer to a static array. */ +char const* info_compiler = "INFO" ":" "compiler[" COMPILER_ID "]"; +#ifdef SIMULATE_ID +char const* info_simulate = "INFO" ":" "simulate[" SIMULATE_ID "]"; +#endif + +#ifdef __QNXNTO__ +char const* qnxnto = "INFO" ":" "qnxnto[]"; +#endif + +#if defined(__CRAYXT_COMPUTE_LINUX_TARGET) +char const *info_cray = "INFO" ":" "compiler_wrapper[CrayPrgEnv]"; +#endif + +#define STRINGIFY_HELPER(X) #X +#define STRINGIFY(X) STRINGIFY_HELPER(X) + +/* Identify known platforms by name. */ +#if defined(__linux) || defined(__linux__) || defined(linux) +# define PLATFORM_ID "Linux" + +#elif defined(__MSYS__) +# define PLATFORM_ID "MSYS" + +#elif defined(__CYGWIN__) +# define PLATFORM_ID "Cygwin" + +#elif defined(__MINGW32__) +# define PLATFORM_ID "MinGW" + +#elif defined(__APPLE__) +# define PLATFORM_ID "Darwin" + +#elif defined(_WIN32) || defined(__WIN32__) || defined(WIN32) +# define PLATFORM_ID "Windows" + +#elif defined(__FreeBSD__) || defined(__FreeBSD) +# define PLATFORM_ID "FreeBSD" + +#elif defined(__NetBSD__) || defined(__NetBSD) +# define PLATFORM_ID "NetBSD" + +#elif defined(__OpenBSD__) || defined(__OPENBSD) +# define PLATFORM_ID "OpenBSD" + +#elif defined(__sun) || defined(sun) +# define PLATFORM_ID "SunOS" + +#elif defined(_AIX) || defined(__AIX) || defined(__AIX__) || defined(__aix) || defined(__aix__) +# define PLATFORM_ID "AIX" + +#elif defined(__hpux) || defined(__hpux__) +# define PLATFORM_ID "HP-UX" + +#elif defined(__HAIKU__) +# define PLATFORM_ID "Haiku" + +#elif defined(__BeOS) || defined(__BEOS__) || defined(_BEOS) +# define PLATFORM_ID "BeOS" + +#elif defined(__QNX__) || defined(__QNXNTO__) +# define PLATFORM_ID "QNX" + +#elif defined(__tru64) || defined(_tru64) || defined(__TRU64__) +# define PLATFORM_ID "Tru64" + +#elif defined(__riscos) || defined(__riscos__) +# define PLATFORM_ID "RISCos" + +#elif defined(__sinix) || defined(__sinix__) || defined(__SINIX__) +# define PLATFORM_ID "SINIX" + +#elif defined(__UNIX_SV__) +# define PLATFORM_ID "UNIX_SV" + +#elif defined(__bsdos__) +# define PLATFORM_ID "BSDOS" + +#elif defined(_MPRAS) || defined(MPRAS) +# define PLATFORM_ID "MP-RAS" + +#elif defined(__osf) || defined(__osf__) +# define PLATFORM_ID "OSF1" + +#elif defined(_SCO_SV) || defined(SCO_SV) || defined(sco_sv) +# define PLATFORM_ID "SCO_SV" + +#elif defined(__ultrix) || defined(__ultrix__) || defined(_ULTRIX) +# define PLATFORM_ID "ULTRIX" + +#elif defined(__XENIX__) || defined(_XENIX) || defined(XENIX) +# define PLATFORM_ID "Xenix" + +#elif defined(__WATCOMC__) +# if defined(__LINUX__) +# define PLATFORM_ID "Linux" + +# elif defined(__DOS__) +# define PLATFORM_ID "DOS" + +# elif defined(__OS2__) +# define PLATFORM_ID "OS2" + +# elif defined(__WINDOWS__) +# define PLATFORM_ID "Windows3x" + +# elif defined(__VXWORKS__) +# define PLATFORM_ID "VxWorks" + +# else /* unknown platform */ +# define PLATFORM_ID +# endif + +#elif defined(__INTEGRITY) +# if defined(INT_178B) +# define PLATFORM_ID "Integrity178" + +# else /* regular Integrity */ +# define PLATFORM_ID "Integrity" +# endif + +# elif defined(_ADI_COMPILER) +# define PLATFORM_ID "ADSP" + +#else /* unknown platform */ +# define PLATFORM_ID + +#endif + +/* For windows compilers MSVC and Intel we can determine + the architecture of the compiler being used. This is because + the compilers do not have flags that can change the architecture, + but rather depend on which compiler is being used +*/ +#if defined(_WIN32) && defined(_MSC_VER) +# if defined(_M_IA64) +# define ARCHITECTURE_ID "IA64" + +# elif defined(_M_ARM64EC) +# define ARCHITECTURE_ID "ARM64EC" + +# elif defined(_M_X64) || defined(_M_AMD64) +# define ARCHITECTURE_ID "x64" + +# elif defined(_M_IX86) +# define ARCHITECTURE_ID "X86" + +# elif defined(_M_ARM64) +# define ARCHITECTURE_ID "ARM64" + +# elif defined(_M_ARM) +# if _M_ARM == 4 +# define ARCHITECTURE_ID "ARMV4I" +# elif _M_ARM == 5 +# define ARCHITECTURE_ID "ARMV5I" +# else +# define ARCHITECTURE_ID "ARMV" STRINGIFY(_M_ARM) +# endif + +# elif defined(_M_MIPS) +# define ARCHITECTURE_ID "MIPS" + +# elif defined(_M_SH) +# define ARCHITECTURE_ID "SHx" + +# else /* unknown architecture */ +# define ARCHITECTURE_ID "" +# endif + +#elif defined(__WATCOMC__) +# if defined(_M_I86) +# define ARCHITECTURE_ID "I86" + +# elif defined(_M_IX86) +# define ARCHITECTURE_ID "X86" + +# else /* unknown architecture */ +# define ARCHITECTURE_ID "" +# endif + +#elif defined(__IAR_SYSTEMS_ICC__) || defined(__IAR_SYSTEMS_ICC) +# if defined(__ICCARM__) +# define ARCHITECTURE_ID "ARM" + +# elif defined(__ICCRX__) +# define ARCHITECTURE_ID "RX" + +# elif defined(__ICCRH850__) +# define ARCHITECTURE_ID "RH850" + +# elif defined(__ICCRL78__) +# define ARCHITECTURE_ID "RL78" + +# elif defined(__ICCRISCV__) +# define ARCHITECTURE_ID "RISCV" + +# elif defined(__ICCAVR__) +# define ARCHITECTURE_ID "AVR" + +# elif defined(__ICC430__) +# define ARCHITECTURE_ID "MSP430" + +# elif defined(__ICCV850__) +# define ARCHITECTURE_ID "V850" + +# elif defined(__ICC8051__) +# define ARCHITECTURE_ID "8051" + +# elif defined(__ICCSTM8__) +# define ARCHITECTURE_ID "STM8" + +# else /* unknown architecture */ +# define ARCHITECTURE_ID "" +# endif + +#elif defined(__ghs__) +# if defined(__PPC64__) +# define ARCHITECTURE_ID "PPC64" + +# elif defined(__ppc__) +# define ARCHITECTURE_ID "PPC" + +# elif defined(__ARM__) +# define ARCHITECTURE_ID "ARM" + +# elif defined(__x86_64__) +# define ARCHITECTURE_ID "x64" + +# elif defined(__i386__) +# define ARCHITECTURE_ID "X86" + +# else /* unknown architecture */ +# define ARCHITECTURE_ID "" +# endif + +#elif defined(__TI_COMPILER_VERSION__) +# if defined(__TI_ARM__) +# define ARCHITECTURE_ID "ARM" + +# elif defined(__MSP430__) +# define ARCHITECTURE_ID "MSP430" + +# elif defined(__TMS320C28XX__) +# define ARCHITECTURE_ID "TMS320C28x" + +# elif defined(__TMS320C6X__) || defined(_TMS320C6X) +# define ARCHITECTURE_ID "TMS320C6x" + +# else /* unknown architecture */ +# define ARCHITECTURE_ID "" +# endif + +# elif defined(__ADSPSHARC__) +# define ARCHITECTURE_ID "SHARC" + +# elif defined(__ADSPBLACKFIN__) +# define ARCHITECTURE_ID "Blackfin" + +#elif defined(__TASKING__) + +# if defined(__CTC__) || defined(__CPTC__) +# define ARCHITECTURE_ID "TriCore" + +# elif defined(__CMCS__) +# define ARCHITECTURE_ID "MCS" + +# elif defined(__CARM__) +# define ARCHITECTURE_ID "ARM" + +# elif defined(__CARC__) +# define ARCHITECTURE_ID "ARC" + +# elif defined(__C51__) +# define ARCHITECTURE_ID "8051" + +# elif defined(__CPCP__) +# define ARCHITECTURE_ID "PCP" + +# else +# define ARCHITECTURE_ID "" +# endif + +#else +# define ARCHITECTURE_ID +#endif + +/* Convert integer to decimal digit literals. */ +#define DEC(n) \ + ('0' + (((n) / 10000000)%10)), \ + ('0' + (((n) / 1000000)%10)), \ + ('0' + (((n) / 100000)%10)), \ + ('0' + (((n) / 10000)%10)), \ + ('0' + (((n) / 1000)%10)), \ + ('0' + (((n) / 100)%10)), \ + ('0' + (((n) / 10)%10)), \ + ('0' + ((n) % 10)) + +/* Convert integer to hex digit literals. */ +#define HEX(n) \ + ('0' + ((n)>>28 & 0xF)), \ + ('0' + ((n)>>24 & 0xF)), \ + ('0' + ((n)>>20 & 0xF)), \ + ('0' + ((n)>>16 & 0xF)), \ + ('0' + ((n)>>12 & 0xF)), \ + ('0' + ((n)>>8 & 0xF)), \ + ('0' + ((n)>>4 & 0xF)), \ + ('0' + ((n) & 0xF)) + +/* Construct a string literal encoding the version number. */ +#ifdef COMPILER_VERSION +char const* info_version = "INFO" ":" "compiler_version[" COMPILER_VERSION "]"; + +/* Construct a string literal encoding the version number components. */ +#elif defined(COMPILER_VERSION_MAJOR) +char const info_version[] = { + 'I', 'N', 'F', 'O', ':', + 'c','o','m','p','i','l','e','r','_','v','e','r','s','i','o','n','[', + COMPILER_VERSION_MAJOR, +# ifdef COMPILER_VERSION_MINOR + '.', COMPILER_VERSION_MINOR, +# ifdef COMPILER_VERSION_PATCH + '.', COMPILER_VERSION_PATCH, +# ifdef COMPILER_VERSION_TWEAK + '.', COMPILER_VERSION_TWEAK, +# endif +# endif +# endif + ']','\0'}; +#endif + +/* Construct a string literal encoding the internal version number. */ +#ifdef COMPILER_VERSION_INTERNAL +char const info_version_internal[] = { + 'I', 'N', 'F', 'O', ':', + 'c','o','m','p','i','l','e','r','_','v','e','r','s','i','o','n','_', + 'i','n','t','e','r','n','a','l','[', + COMPILER_VERSION_INTERNAL,']','\0'}; +#elif defined(COMPILER_VERSION_INTERNAL_STR) +char const* info_version_internal = "INFO" ":" "compiler_version_internal[" COMPILER_VERSION_INTERNAL_STR "]"; +#endif + +/* Construct a string literal encoding the version number components. */ +#ifdef SIMULATE_VERSION_MAJOR +char const info_simulate_version[] = { + 'I', 'N', 'F', 'O', ':', + 's','i','m','u','l','a','t','e','_','v','e','r','s','i','o','n','[', + SIMULATE_VERSION_MAJOR, +# ifdef SIMULATE_VERSION_MINOR + '.', SIMULATE_VERSION_MINOR, +# ifdef SIMULATE_VERSION_PATCH + '.', SIMULATE_VERSION_PATCH, +# ifdef SIMULATE_VERSION_TWEAK + '.', SIMULATE_VERSION_TWEAK, +# endif +# endif +# endif + ']','\0'}; +#endif + +/* Construct the string literal in pieces to prevent the source from + getting matched. Store it in a pointer rather than an array + because some compilers will just produce instructions to fill the + array rather than assigning a pointer to a static array. */ +char const* info_platform = "INFO" ":" "platform[" PLATFORM_ID "]"; +char const* info_arch = "INFO" ":" "arch[" ARCHITECTURE_ID "]"; + + + +#if !defined(__STDC__) && !defined(__clang__) +# if defined(_MSC_VER) || defined(__ibmxl__) || defined(__IBMC__) +# define C_VERSION "90" +# else +# define C_VERSION +# endif +#elif __STDC_VERSION__ > 201710L +# define C_VERSION "23" +#elif __STDC_VERSION__ >= 201710L +# define C_VERSION "17" +#elif __STDC_VERSION__ >= 201000L +# define C_VERSION "11" +#elif __STDC_VERSION__ >= 199901L +# define C_VERSION "99" +#else +# define C_VERSION "90" +#endif +const char* info_language_standard_default = + "INFO" ":" "standard_default[" C_VERSION "]"; + +const char* info_language_extensions_default = "INFO" ":" "extensions_default[" +#if (defined(__clang__) || defined(__GNUC__) || defined(__xlC__) || \ + defined(__TI_COMPILER_VERSION__)) && \ + !defined(__STRICT_ANSI__) + "ON" +#else + "OFF" +#endif +"]"; + +/*--------------------------------------------------------------------------*/ + +#ifdef ID_VOID_MAIN +void main() {} +#else +# if defined(__CLASSIC_C__) +int main(argc, argv) int argc; char *argv[]; +# else +int main(int argc, char* argv[]) +# endif +{ + int require = 0; + require += info_compiler[argc]; + require += info_platform[argc]; + require += info_arch[argc]; +#ifdef COMPILER_VERSION_MAJOR + require += info_version[argc]; +#endif +#ifdef COMPILER_VERSION_INTERNAL + require += info_version_internal[argc]; +#endif +#ifdef SIMULATE_ID + require += info_simulate[argc]; +#endif +#ifdef SIMULATE_VERSION_MAJOR + require += info_simulate_version[argc]; +#endif +#if defined(__CRAYXT_COMPUTE_LINUX_TARGET) + require += info_cray[argc]; +#endif + require += info_language_standard_default[argc]; + require += info_language_extensions_default[argc]; + (void)argv; + return require; +} +#endif diff --git a/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/3.28.3/CompilerIdC/a.out.js b/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/3.28.3/CompilerIdC/a.out.js new file mode 100644 index 0000000..9281774 --- /dev/null +++ b/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/3.28.3/CompilerIdC/a.out.js @@ -0,0 +1,1521 @@ +// include: shell.js +// The Module object: Our interface to the outside world. We import +// and export values on it. There are various ways Module can be used: +// 1. Not defined. We create it here +// 2. A function parameter, function(moduleArg) => Promise +// 3. pre-run appended it, var Module = {}; ..generated code.. +// 4. External script tag defines var Module. +// We need to check if Module already exists (e.g. case 3 above). +// Substitution will be replaced with actual code on later stage of the build, +// this way Closure Compiler will not mangle it (e.g. case 4. above). +// Note that if you want to run closure, and also to use Module +// after the generated code, you will need to define var Module = {}; +// before the code. Then that object will be used in the code, and you +// can continue to use Module afterwards as well. +var Module = typeof Module != 'undefined' ? Module : {}; + +// Determine the runtime environment we are in. You can customize this by +// setting the ENVIRONMENT setting at compile time (see settings.js). + +// Attempt to auto-detect the environment +var ENVIRONMENT_IS_WEB = typeof window == 'object'; +var ENVIRONMENT_IS_WORKER = typeof WorkerGlobalScope != 'undefined'; +// N.b. Electron.js environment is simultaneously a NODE-environment, but +// also a web environment. +var ENVIRONMENT_IS_NODE = typeof process == 'object' && typeof process.versions == 'object' && typeof process.versions.node == 'string' && process.type != 'renderer'; +var ENVIRONMENT_IS_SHELL = !ENVIRONMENT_IS_WEB && !ENVIRONMENT_IS_NODE && !ENVIRONMENT_IS_WORKER; + +if (ENVIRONMENT_IS_NODE) { + +} + +// --pre-jses are emitted after the Module integration code, so that they can +// refer to Module (if they choose; they can also define Module) + + +// Sometimes an existing Module object exists with properties +// meant to overwrite the default module functionality. Here +// we collect those properties and reapply _after_ we configure +// the current environment's defaults to avoid having to be so +// defensive during initialization. +var moduleOverrides = {...Module}; + +var arguments_ = []; +var thisProgram = './this.program'; +var quit_ = (status, toThrow) => { + throw toThrow; +}; + +// `/` should be present at the end if `scriptDirectory` is not empty +var scriptDirectory = ''; +function locateFile(path) { + if (Module['locateFile']) { + return Module['locateFile'](path, scriptDirectory); + } + return scriptDirectory + path; +} + +// Hooks that are implemented differently in different runtime environments. +var readAsync, readBinary; + +if (ENVIRONMENT_IS_NODE) { + if (typeof process == 'undefined' || !process.release || process.release.name !== 'node') throw new Error('not compiled for this environment (did you build to HTML and try to run it not on the web, or set ENVIRONMENT to something - like node - and run it someplace else - like on the web?)'); + + var nodeVersion = process.versions.node; + var numericVersion = nodeVersion.split('.').slice(0, 3); + numericVersion = (numericVersion[0] * 10000) + (numericVersion[1] * 100) + (numericVersion[2].split('-')[0] * 1); + var minVersion = 160000; + if (numericVersion < 160000) { + throw new Error('This emscripten-generated code requires node v16.0.0 (detected v' + nodeVersion + ')'); + } + + // These modules will usually be used on Node.js. Load them eagerly to avoid + // the complexity of lazy-loading. + var fs = require('fs'); + var nodePath = require('path'); + + scriptDirectory = __dirname + '/'; + +// include: node_shell_read.js +readBinary = (filename) => { + // We need to re-wrap `file://` strings to URLs. + filename = isFileURI(filename) ? new URL(filename) : filename; + var ret = fs.readFileSync(filename); + assert(Buffer.isBuffer(ret)); + return ret; +}; + +readAsync = async (filename, binary = true) => { + // See the comment in the `readBinary` function. + filename = isFileURI(filename) ? new URL(filename) : filename; + var ret = fs.readFileSync(filename, binary ? undefined : 'utf8'); + assert(binary ? Buffer.isBuffer(ret) : typeof ret == 'string'); + return ret; +}; +// end include: node_shell_read.js + if (!Module['thisProgram'] && process.argv.length > 1) { + thisProgram = process.argv[1].replace(/\\/g, '/'); + } + + arguments_ = process.argv.slice(2); + + if (typeof module != 'undefined') { + module['exports'] = Module; + } + + quit_ = (status, toThrow) => { + process.exitCode = status; + throw toThrow; + }; + +} else +if (ENVIRONMENT_IS_SHELL) { + + if ((typeof process == 'object' && typeof require === 'function') || typeof window == 'object' || typeof WorkerGlobalScope != 'undefined') throw new Error('not compiled for this environment (did you build to HTML and try to run it not on the web, or set ENVIRONMENT to something - like node - and run it someplace else - like on the web?)'); + +} else + +// Note that this includes Node.js workers when relevant (pthreads is enabled). +// Node.js workers are detected as a combination of ENVIRONMENT_IS_WORKER and +// ENVIRONMENT_IS_NODE. +if (ENVIRONMENT_IS_WEB || ENVIRONMENT_IS_WORKER) { + if (ENVIRONMENT_IS_WORKER) { // Check worker, not web, since window could be polyfilled + scriptDirectory = self.location.href; + } else if (typeof document != 'undefined' && document.currentScript) { // web + scriptDirectory = document.currentScript.src; + } + // blob urls look like blob:http://site.com/etc/etc and we cannot infer anything from them. + // otherwise, slice off the final part of the url to find the script directory. + // if scriptDirectory does not contain a slash, lastIndexOf will return -1, + // and scriptDirectory will correctly be replaced with an empty string. + // If scriptDirectory contains a query (starting with ?) or a fragment (starting with #), + // they are removed because they could contain a slash. + if (scriptDirectory.startsWith('blob:')) { + scriptDirectory = ''; + } else { + scriptDirectory = scriptDirectory.slice(0, scriptDirectory.replace(/[?#].*/, '').lastIndexOf('/')+1); + } + + if (!(typeof window == 'object' || typeof WorkerGlobalScope != 'undefined')) throw new Error('not compiled for this environment (did you build to HTML and try to run it not on the web, or set ENVIRONMENT to something - like node - and run it someplace else - like on the web?)'); + + { +// include: web_or_worker_shell_read.js +if (ENVIRONMENT_IS_WORKER) { + readBinary = (url) => { + var xhr = new XMLHttpRequest(); + xhr.open('GET', url, false); + xhr.responseType = 'arraybuffer'; + xhr.send(null); + return new Uint8Array(/** @type{!ArrayBuffer} */(xhr.response)); + }; + } + + readAsync = async (url) => { + // Fetch has some additional restrictions over XHR, like it can't be used on a file:// url. + // See https://github.com/github/fetch/pull/92#issuecomment-140665932 + // Cordova or Electron apps are typically loaded from a file:// url. + // So use XHR on webview if URL is a file URL. + if (isFileURI(url)) { + return new Promise((resolve, reject) => { + var xhr = new XMLHttpRequest(); + xhr.open('GET', url, true); + xhr.responseType = 'arraybuffer'; + xhr.onload = () => { + if (xhr.status == 200 || (xhr.status == 0 && xhr.response)) { // file URLs can return 0 + resolve(xhr.response); + return; + } + reject(xhr.status); + }; + xhr.onerror = reject; + xhr.send(null); + }); + } + var response = await fetch(url, { credentials: 'same-origin' }); + if (response.ok) { + return response.arrayBuffer(); + } + throw new Error(response.status + ' : ' + response.url); + }; +// end include: web_or_worker_shell_read.js + } +} else +{ + throw new Error('environment detection error'); +} + +var out = Module['print'] || console.log.bind(console); +var err = Module['printErr'] || console.error.bind(console); + +// Merge back in the overrides +Object.assign(Module, moduleOverrides); +// Free the object hierarchy contained in the overrides, this lets the GC +// reclaim data used. +moduleOverrides = null; +checkIncomingModuleAPI(); + +// Emit code to handle expected values on the Module object. This applies Module.x +// to the proper local x. This has two benefits: first, we only emit it if it is +// expected to arrive, and second, by using a local everywhere else that can be +// minified. + +if (Module['arguments']) arguments_ = Module['arguments'];legacyModuleProp('arguments', 'arguments_'); + +if (Module['thisProgram']) thisProgram = Module['thisProgram'];legacyModuleProp('thisProgram', 'thisProgram'); + +// perform assertions in shell.js after we set up out() and err(), as otherwise if an assertion fails it cannot print the message +// Assertions on removed incoming Module JS APIs. +assert(typeof Module['memoryInitializerPrefixURL'] == 'undefined', 'Module.memoryInitializerPrefixURL option was removed, use Module.locateFile instead'); +assert(typeof Module['pthreadMainPrefixURL'] == 'undefined', 'Module.pthreadMainPrefixURL option was removed, use Module.locateFile instead'); +assert(typeof Module['cdInitializerPrefixURL'] == 'undefined', 'Module.cdInitializerPrefixURL option was removed, use Module.locateFile instead'); +assert(typeof Module['filePackagePrefixURL'] == 'undefined', 'Module.filePackagePrefixURL option was removed, use Module.locateFile instead'); +assert(typeof Module['read'] == 'undefined', 'Module.read option was removed'); +assert(typeof Module['readAsync'] == 'undefined', 'Module.readAsync option was removed (modify readAsync in JS)'); +assert(typeof Module['readBinary'] == 'undefined', 'Module.readBinary option was removed (modify readBinary in JS)'); +assert(typeof Module['setWindowTitle'] == 'undefined', 'Module.setWindowTitle option was removed (modify emscripten_set_window_title in JS)'); +assert(typeof Module['TOTAL_MEMORY'] == 'undefined', 'Module.TOTAL_MEMORY has been renamed Module.INITIAL_MEMORY'); +legacyModuleProp('asm', 'wasmExports'); +legacyModuleProp('readAsync', 'readAsync'); +legacyModuleProp('readBinary', 'readBinary'); +legacyModuleProp('setWindowTitle', 'setWindowTitle'); +var IDBFS = 'IDBFS is no longer included by default; build with -lidbfs.js'; +var PROXYFS = 'PROXYFS is no longer included by default; build with -lproxyfs.js'; +var WORKERFS = 'WORKERFS is no longer included by default; build with -lworkerfs.js'; +var FETCHFS = 'FETCHFS is no longer included by default; build with -lfetchfs.js'; +var ICASEFS = 'ICASEFS is no longer included by default; build with -licasefs.js'; +var JSFILEFS = 'JSFILEFS is no longer included by default; build with -ljsfilefs.js'; +var OPFS = 'OPFS is no longer included by default; build with -lopfs.js'; + +var NODEFS = 'NODEFS is no longer included by default; build with -lnodefs.js'; + +assert(!ENVIRONMENT_IS_SHELL, 'shell environment detected but not enabled at build time. Add `shell` to `-sENVIRONMENT` to enable.'); + +// end include: shell.js + +// include: preamble.js +// === Preamble library stuff === + +// Documentation for the public APIs defined in this file must be updated in: +// site/source/docs/api_reference/preamble.js.rst +// A prebuilt local version of the documentation is available at: +// site/build/text/docs/api_reference/preamble.js.txt +// You can also build docs locally as HTML or other formats in site/ +// An online HTML version (which may be of a different version of Emscripten) +// is up at http://kripken.github.io/emscripten-site/docs/api_reference/preamble.js.html + +var wasmBinary = Module['wasmBinary'];legacyModuleProp('wasmBinary', 'wasmBinary'); + +if (typeof WebAssembly != 'object') { + err('no native wasm support detected'); +} + +// Wasm globals + +var wasmMemory; + +//======================================== +// Runtime essentials +//======================================== + +// whether we are quitting the application. no code should run after this. +// set in exit() and abort() +var ABORT = false; + +// set by exit() and abort(). Passed to 'onExit' handler. +// NOTE: This is also used as the process return code code in shell environments +// but only when noExitRuntime is false. +var EXITSTATUS; + +// In STRICT mode, we only define assert() when ASSERTIONS is set. i.e. we +// don't define it at all in release modes. This matches the behaviour of +// MINIMAL_RUNTIME. +// TODO(sbc): Make this the default even without STRICT enabled. +/** @type {function(*, string=)} */ +function assert(condition, text) { + if (!condition) { + abort('Assertion failed' + (text ? ': ' + text : '')); + } +} + +// We used to include malloc/free by default in the past. Show a helpful error in +// builds with assertions. +function _malloc() { + abort('malloc() called but not included in the build - add `_malloc` to EXPORTED_FUNCTIONS'); +} +function _free() { + // Show a helpful error since we used to include free by default in the past. + abort('free() called but not included in the build - add `_free` to EXPORTED_FUNCTIONS'); +} + +// Memory management + +var HEAP, +/** @type {!Int8Array} */ + HEAP8, +/** @type {!Uint8Array} */ + HEAPU8, +/** @type {!Int16Array} */ + HEAP16, +/** @type {!Uint16Array} */ + HEAPU16, +/** @type {!Int32Array} */ + HEAP32, +/** @type {!Uint32Array} */ + HEAPU32, +/** @type {!Float32Array} */ + HEAPF32, +/* BigInt64Array type is not correctly defined in closure +/** not-@type {!BigInt64Array} */ + HEAP64, +/* BigUint64Array type is not correctly defined in closure +/** not-t@type {!BigUint64Array} */ + HEAPU64, +/** @type {!Float64Array} */ + HEAPF64; + +var runtimeInitialized = false; + +/** + * Indicates whether filename is delivered via file protocol (as opposed to http/https) + * @noinline + */ +var isFileURI = (filename) => filename.startsWith('file://'); + +// include: runtime_shared.js +// include: runtime_stack_check.js +// Initializes the stack cookie. Called at the startup of main and at the startup of each thread in pthreads mode. +function writeStackCookie() { + var max = _emscripten_stack_get_end(); + assert((max & 3) == 0); + // If the stack ends at address zero we write our cookies 4 bytes into the + // stack. This prevents interference with SAFE_HEAP and ASAN which also + // monitor writes to address zero. + if (max == 0) { + max += 4; + } + // The stack grow downwards towards _emscripten_stack_get_end. + // We write cookies to the final two words in the stack and detect if they are + // ever overwritten. + HEAPU32[((max)>>2)] = 0x02135467; + HEAPU32[(((max)+(4))>>2)] = 0x89BACDFE; + // Also test the global address 0 for integrity. + HEAPU32[((0)>>2)] = 1668509029; +} + +function checkStackCookie() { + if (ABORT) return; + var max = _emscripten_stack_get_end(); + // See writeStackCookie(). + if (max == 0) { + max += 4; + } + var cookie1 = HEAPU32[((max)>>2)]; + var cookie2 = HEAPU32[(((max)+(4))>>2)]; + if (cookie1 != 0x02135467 || cookie2 != 0x89BACDFE) { + abort(`Stack overflow! Stack cookie has been overwritten at ${ptrToString(max)}, expected hex dwords 0x89BACDFE and 0x2135467, but received ${ptrToString(cookie2)} ${ptrToString(cookie1)}`); + } + // Also test the global address 0 for integrity. + if (HEAPU32[((0)>>2)] != 0x63736d65 /* 'emsc' */) { + abort('Runtime error: The application has corrupted its heap memory area (address zero)!'); + } +} +// end include: runtime_stack_check.js +// include: runtime_exceptions.js +// end include: runtime_exceptions.js +// include: runtime_debug.js +// Endianness check +(() => { + var h16 = new Int16Array(1); + var h8 = new Int8Array(h16.buffer); + h16[0] = 0x6373; + if (h8[0] !== 0x73 || h8[1] !== 0x63) throw 'Runtime error: expected the system to be little-endian! (Run with -sSUPPORT_BIG_ENDIAN to bypass)'; +})(); + +if (Module['ENVIRONMENT']) { + throw new Error('Module.ENVIRONMENT has been deprecated. To force the environment, use the ENVIRONMENT compile-time option (for example, -sENVIRONMENT=web or -sENVIRONMENT=node)'); +} + +function legacyModuleProp(prop, newName, incoming=true) { + if (!Object.getOwnPropertyDescriptor(Module, prop)) { + Object.defineProperty(Module, prop, { + configurable: true, + get() { + let extra = incoming ? ' (the initial value can be provided on Module, but after startup the value is only looked for on a local variable of that name)' : ''; + abort(`\`Module.${prop}\` has been replaced by \`${newName}\`` + extra); + + } + }); + } +} + +function consumedModuleProp(prop) { + if (!Object.getOwnPropertyDescriptor(Module, prop)) { + Object.defineProperty(Module, prop, { + configurable: true, + set() { + abort(`Attempt to set \`Module.${prop}\` after it has already been processed. This can happen, for example, when code is injected via '--post-js' rather than '--pre-js'`); + + } + }); + } +} + +function ignoredModuleProp(prop) { + if (Object.getOwnPropertyDescriptor(Module, prop)) { + abort(`\`Module.${prop}\` was supplied but \`${prop}\` not included in INCOMING_MODULE_JS_API`); + } +} + +// forcing the filesystem exports a few things by default +function isExportedByForceFilesystem(name) { + return name === 'FS_createPath' || + name === 'FS_createDataFile' || + name === 'FS_createPreloadedFile' || + name === 'FS_unlink' || + name === 'addRunDependency' || + // The old FS has some functionality that WasmFS lacks. + name === 'FS_createLazyFile' || + name === 'FS_createDevice' || + name === 'removeRunDependency'; +} + +/** + * Intercept access to a global symbol. This enables us to give informative + * warnings/errors when folks attempt to use symbols they did not include in + * their build, or no symbols that no longer exist. + */ +function hookGlobalSymbolAccess(sym, func) { + if (typeof globalThis != 'undefined' && !Object.getOwnPropertyDescriptor(globalThis, sym)) { + Object.defineProperty(globalThis, sym, { + configurable: true, + get() { + func(); + return undefined; + } + }); + } +} + +function missingGlobal(sym, msg) { + hookGlobalSymbolAccess(sym, () => { + warnOnce(`\`${sym}\` is not longer defined by emscripten. ${msg}`); + }); +} + +missingGlobal('buffer', 'Please use HEAP8.buffer or wasmMemory.buffer'); +missingGlobal('asm', 'Please use wasmExports instead'); + +function missingLibrarySymbol(sym) { + hookGlobalSymbolAccess(sym, () => { + // Can't `abort()` here because it would break code that does runtime + // checks. e.g. `if (typeof SDL === 'undefined')`. + var msg = `\`${sym}\` is a library symbol and not included by default; add it to your library.js __deps or to DEFAULT_LIBRARY_FUNCS_TO_INCLUDE on the command line`; + // DEFAULT_LIBRARY_FUNCS_TO_INCLUDE requires the name as it appears in + // library.js, which means $name for a JS name with no prefix, or name + // for a JS name like _name. + var librarySymbol = sym; + if (!librarySymbol.startsWith('_')) { + librarySymbol = '$' + sym; + } + msg += ` (e.g. -sDEFAULT_LIBRARY_FUNCS_TO_INCLUDE='${librarySymbol}')`; + if (isExportedByForceFilesystem(sym)) { + msg += '. Alternatively, forcing filesystem support (-sFORCE_FILESYSTEM) can export this for you'; + } + warnOnce(msg); + }); + + // Any symbol that is not included from the JS library is also (by definition) + // not exported on the Module object. + unexportedRuntimeSymbol(sym); +} + +function unexportedRuntimeSymbol(sym) { + if (!Object.getOwnPropertyDescriptor(Module, sym)) { + Object.defineProperty(Module, sym, { + configurable: true, + get() { + var msg = `'${sym}' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the Emscripten FAQ)`; + if (isExportedByForceFilesystem(sym)) { + msg += '. Alternatively, forcing filesystem support (-sFORCE_FILESYSTEM) can export this for you'; + } + abort(msg); + } + }); + } +} + +var runtimeDebug = true; // Switch to false at runtime to disable logging at the right times + +// Used by XXXXX_DEBUG settings to output debug messages. +function dbg(...args) { + if (!runtimeDebug && typeof runtimeDebug != 'undefined') return; + // TODO(sbc): Make this configurable somehow. Its not always convenient for + // logging to show up as warnings. + console.warn(...args); +} +// end include: runtime_debug.js +// include: memoryprofiler.js +// end include: memoryprofiler.js + + +function updateMemoryViews() { + var b = wasmMemory.buffer; + Module['HEAP8'] = HEAP8 = new Int8Array(b); + Module['HEAP16'] = HEAP16 = new Int16Array(b); + Module['HEAPU8'] = HEAPU8 = new Uint8Array(b); + Module['HEAPU16'] = HEAPU16 = new Uint16Array(b); + Module['HEAP32'] = HEAP32 = new Int32Array(b); + Module['HEAPU32'] = HEAPU32 = new Uint32Array(b); + Module['HEAPF32'] = HEAPF32 = new Float32Array(b); + Module['HEAPF64'] = HEAPF64 = new Float64Array(b); + Module['HEAP64'] = HEAP64 = new BigInt64Array(b); + Module['HEAPU64'] = HEAPU64 = new BigUint64Array(b); +} + +// end include: runtime_shared.js +assert(!Module['STACK_SIZE'], 'STACK_SIZE can no longer be set at runtime. Use -sSTACK_SIZE at link time') + +assert(typeof Int32Array != 'undefined' && typeof Float64Array !== 'undefined' && Int32Array.prototype.subarray != undefined && Int32Array.prototype.set != undefined, + 'JS engine does not provide full typed array support'); + +// If memory is defined in wasm, the user can't provide it, or set INITIAL_MEMORY +assert(!Module['wasmMemory'], 'Use of `wasmMemory` detected. Use -sIMPORTED_MEMORY to define wasmMemory externally'); +assert(!Module['INITIAL_MEMORY'], 'Detected runtime INITIAL_MEMORY setting. Use -sIMPORTED_MEMORY to define wasmMemory dynamically'); + +function preRun() { + if (Module['preRun']) { + if (typeof Module['preRun'] == 'function') Module['preRun'] = [Module['preRun']]; + while (Module['preRun'].length) { + addOnPreRun(Module['preRun'].shift()); + } + } + consumedModuleProp('preRun'); + callRuntimeCallbacks(onPreRuns); +} + +function initRuntime() { + assert(!runtimeInitialized); + runtimeInitialized = true; + + checkStackCookie(); + + + + wasmExports['__wasm_call_ctors'](); + + +} + +function preMain() { + checkStackCookie(); + +} + +function postRun() { + checkStackCookie(); + + if (Module['postRun']) { + if (typeof Module['postRun'] == 'function') Module['postRun'] = [Module['postRun']]; + while (Module['postRun'].length) { + addOnPostRun(Module['postRun'].shift()); + } + } + consumedModuleProp('postRun'); + + callRuntimeCallbacks(onPostRuns); +} + +// A counter of dependencies for calling run(). If we need to +// do asynchronous work before running, increment this and +// decrement it. Incrementing must happen in a place like +// Module.preRun (used by emcc to add file preloading). +// Note that you can add dependencies in preRun, even though +// it happens right before run - run will be postponed until +// the dependencies are met. +var runDependencies = 0; +var dependenciesFulfilled = null; // overridden to take different actions when all run dependencies are fulfilled +var runDependencyTracking = {}; +var runDependencyWatcher = null; + +function getUniqueRunDependency(id) { + var orig = id; + while (1) { + if (!runDependencyTracking[id]) return id; + id = orig + Math.random(); + } +} + +function addRunDependency(id) { + runDependencies++; + + Module['monitorRunDependencies']?.(runDependencies); + + if (id) { + assert(!runDependencyTracking[id]); + runDependencyTracking[id] = 1; + if (runDependencyWatcher === null && typeof setInterval != 'undefined') { + // Check for missing dependencies every few seconds + runDependencyWatcher = setInterval(() => { + if (ABORT) { + clearInterval(runDependencyWatcher); + runDependencyWatcher = null; + return; + } + var shown = false; + for (var dep in runDependencyTracking) { + if (!shown) { + shown = true; + err('still waiting on run dependencies:'); + } + err(`dependency: ${dep}`); + } + if (shown) { + err('(end of list)'); + } + }, 10000); + } + } else { + err('warning: run dependency added without ID'); + } +} + +function removeRunDependency(id) { + runDependencies--; + + Module['monitorRunDependencies']?.(runDependencies); + + if (id) { + assert(runDependencyTracking[id]); + delete runDependencyTracking[id]; + } else { + err('warning: run dependency removed without ID'); + } + if (runDependencies == 0) { + if (runDependencyWatcher !== null) { + clearInterval(runDependencyWatcher); + runDependencyWatcher = null; + } + if (dependenciesFulfilled) { + var callback = dependenciesFulfilled; + dependenciesFulfilled = null; + callback(); // can add another dependenciesFulfilled + } + } +} + +/** @param {string|number=} what */ +function abort(what) { + Module['onAbort']?.(what); + + what = 'Aborted(' + what + ')'; + // TODO(sbc): Should we remove printing and leave it up to whoever + // catches the exception? + err(what); + + ABORT = true; + + // Use a wasm runtime error, because a JS error might be seen as a foreign + // exception, which means we'd run destructors on it. We need the error to + // simply make the program stop. + // FIXME This approach does not work in Wasm EH because it currently does not assume + // all RuntimeErrors are from traps; it decides whether a RuntimeError is from + // a trap or not based on a hidden field within the object. So at the moment + // we don't have a way of throwing a wasm trap from JS. TODO Make a JS API that + // allows this in the wasm spec. + + // Suppress closure compiler warning here. Closure compiler's builtin extern + // definition for WebAssembly.RuntimeError claims it takes no arguments even + // though it can. + // TODO(https://github.com/google/closure-compiler/pull/3913): Remove if/when upstream closure gets fixed. + /** @suppress {checkTypes} */ + var e = new WebAssembly.RuntimeError(what); + + // Throw the error whether or not MODULARIZE is set because abort is used + // in code paths apart from instantiation where an exception is expected + // to be thrown when abort is called. + throw e; +} + +// show errors on likely calls to FS when it was not included +var FS = { + error() { + abort('Filesystem support (FS) was not included. The problem is that you are using files from JS, but files were not used from C/C++, so filesystem support was not auto-included. You can force-include filesystem support with -sFORCE_FILESYSTEM'); + }, + init() { FS.error() }, + createDataFile() { FS.error() }, + createPreloadedFile() { FS.error() }, + createLazyFile() { FS.error() }, + open() { FS.error() }, + mkdev() { FS.error() }, + registerDevice() { FS.error() }, + analyzePath() { FS.error() }, + + ErrnoError() { FS.error() }, +}; +Module['FS_createDataFile'] = FS.createDataFile; +Module['FS_createPreloadedFile'] = FS.createPreloadedFile; + +function createExportWrapper(name, nargs) { + return (...args) => { + assert(runtimeInitialized, `native function \`${name}\` called before runtime initialization`); + var f = wasmExports[name]; + assert(f, `exported native function \`${name}\` not found`); + // Only assert for too many arguments. Too few can be valid since the missing arguments will be zero filled. + assert(args.length <= nargs, `native function \`${name}\` called with ${args.length} args but expects ${nargs}`); + return f(...args); + }; +} + +var wasmBinaryFile; + +function findWasmBinary() { + return locateFile('a.out.wasm'); +} + +function getBinarySync(file) { + if (file == wasmBinaryFile && wasmBinary) { + return new Uint8Array(wasmBinary); + } + if (readBinary) { + return readBinary(file); + } + throw 'both async and sync fetching of the wasm failed'; +} + +async function getWasmBinary(binaryFile) { + // If we don't have the binary yet, load it asynchronously using readAsync. + if (!wasmBinary) { + // Fetch the binary using readAsync + try { + var response = await readAsync(binaryFile); + return new Uint8Array(response); + } catch { + // Fall back to getBinarySync below; + } + } + + // Otherwise, getBinarySync should be able to get it synchronously + return getBinarySync(binaryFile); +} + +async function instantiateArrayBuffer(binaryFile, imports) { + try { + var binary = await getWasmBinary(binaryFile); + var instance = await WebAssembly.instantiate(binary, imports); + return instance; + } catch (reason) { + err(`failed to asynchronously prepare wasm: ${reason}`); + + // Warn on some common problems. + if (isFileURI(wasmBinaryFile)) { + err(`warning: Loading from a file URI (${wasmBinaryFile}) is not supported in most browsers. See https://emscripten.org/docs/getting_started/FAQ.html#how-do-i-run-a-local-webserver-for-testing-why-does-my-program-stall-in-downloading-or-preparing`); + } + abort(reason); + } +} + +async function instantiateAsync(binary, binaryFile, imports) { + if (!binary && typeof WebAssembly.instantiateStreaming == 'function' + // Don't use streaming for file:// delivered objects in a webview, fetch them synchronously. + && !isFileURI(binaryFile) + // Avoid instantiateStreaming() on Node.js environment for now, as while + // Node.js v18.1.0 implements it, it does not have a full fetch() + // implementation yet. + // + // Reference: + // https://github.com/emscripten-core/emscripten/pull/16917 + && !ENVIRONMENT_IS_NODE + ) { + try { + var response = fetch(binaryFile, { credentials: 'same-origin' }); + var instantiationResult = await WebAssembly.instantiateStreaming(response, imports); + return instantiationResult; + } catch (reason) { + // We expect the most common failure cause to be a bad MIME type for the binary, + // in which case falling back to ArrayBuffer instantiation should work. + err(`wasm streaming compile failed: ${reason}`); + err('falling back to ArrayBuffer instantiation'); + // fall back of instantiateArrayBuffer below + }; + } + return instantiateArrayBuffer(binaryFile, imports); +} + +function getWasmImports() { + // prepare imports + return { + 'env': wasmImports, + 'wasi_snapshot_preview1': wasmImports, + } +} + +// Create the wasm instance. +// Receives the wasm imports, returns the exports. +async function createWasm() { + // Load the wasm module and create an instance of using native support in the JS engine. + // handle a generated wasm instance, receiving its exports and + // performing other necessary setup + /** @param {WebAssembly.Module=} module*/ + function receiveInstance(instance, module) { + wasmExports = instance.exports; + + + + wasmMemory = wasmExports['memory']; + + assert(wasmMemory, 'memory not found in wasm exports'); + updateMemoryViews(); + + removeRunDependency('wasm-instantiate'); + return wasmExports; + } + // wait for the pthread pool (if any) + addRunDependency('wasm-instantiate'); + + // Prefer streaming instantiation if available. + // Async compilation can be confusing when an error on the page overwrites Module + // (for example, if the order of elements is wrong, and the one defining Module is + // later), so we save Module and check it later. + var trueModule = Module; + function receiveInstantiationResult(result) { + // 'result' is a ResultObject object which has both the module and instance. + // receiveInstance() will swap in the exports (to Module.asm) so they can be called + assert(Module === trueModule, 'the Module object should not be replaced during async compilation - perhaps the order of HTML elements is wrong?'); + trueModule = null; + // TODO: Due to Closure regression https://github.com/google/closure-compiler/issues/3193, the above line no longer optimizes out down to the following line. + // When the regression is fixed, can restore the above PTHREADS-enabled path. + return receiveInstance(result['instance']); + } + + var info = getWasmImports(); + + // User shell pages can write their own Module.instantiateWasm = function(imports, successCallback) callback + // to manually instantiate the Wasm module themselves. This allows pages to + // run the instantiation parallel to any other async startup actions they are + // performing. + // Also pthreads and wasm workers initialize the wasm instance through this + // path. + if (Module['instantiateWasm']) { + return new Promise((resolve, reject) => { + try { + Module['instantiateWasm'](info, (mod, inst) => { + receiveInstance(mod, inst); + resolve(mod.exports); + }); + } catch(e) { + err(`Module.instantiateWasm callback failed with error: ${e}`); + reject(e); + } + }); + } + + wasmBinaryFile ??= findWasmBinary(); + var result = await instantiateAsync(wasmBinary, wasmBinaryFile, info); + var exports = receiveInstantiationResult(result); + return exports; +} + +// end include: preamble.js + +// Begin JS library code + + + class ExitStatus { + name = 'ExitStatus'; + constructor(status) { + this.message = `Program terminated with exit(${status})`; + this.status = status; + } + } + + var callRuntimeCallbacks = (callbacks) => { + while (callbacks.length > 0) { + // Pass the module as the first argument. + callbacks.shift()(Module); + } + }; + var onPostRuns = []; + var addOnPostRun = (cb) => onPostRuns.unshift(cb); + + var onPreRuns = []; + var addOnPreRun = (cb) => onPreRuns.unshift(cb); + + + + /** + * @param {number} ptr + * @param {string} type + */ + function getValue(ptr, type = 'i8') { + if (type.endsWith('*')) type = '*'; + switch (type) { + case 'i1': return HEAP8[ptr]; + case 'i8': return HEAP8[ptr]; + case 'i16': return HEAP16[((ptr)>>1)]; + case 'i32': return HEAP32[((ptr)>>2)]; + case 'i64': return HEAP64[((ptr)>>3)]; + case 'float': return HEAPF32[((ptr)>>2)]; + case 'double': return HEAPF64[((ptr)>>3)]; + case '*': return HEAPU32[((ptr)>>2)]; + default: abort(`invalid type for getValue: ${type}`); + } + } + + var noExitRuntime = Module['noExitRuntime'] || true; + + var ptrToString = (ptr) => { + assert(typeof ptr === 'number'); + // With CAN_ADDRESS_2GB or MEMORY64, pointers are already unsigned. + ptr >>>= 0; + return '0x' + ptr.toString(16).padStart(8, '0'); + }; + + + /** + * @param {number} ptr + * @param {number} value + * @param {string} type + */ + function setValue(ptr, value, type = 'i8') { + if (type.endsWith('*')) type = '*'; + switch (type) { + case 'i1': HEAP8[ptr] = value; break; + case 'i8': HEAP8[ptr] = value; break; + case 'i16': HEAP16[((ptr)>>1)] = value; break; + case 'i32': HEAP32[((ptr)>>2)] = value; break; + case 'i64': HEAP64[((ptr)>>3)] = BigInt(value); break; + case 'float': HEAPF32[((ptr)>>2)] = value; break; + case 'double': HEAPF64[((ptr)>>3)] = value; break; + case '*': HEAPU32[((ptr)>>2)] = value; break; + default: abort(`invalid type for setValue: ${type}`); + } + } + + var stackRestore = (val) => __emscripten_stack_restore(val); + + var stackSave = () => _emscripten_stack_get_current(); + + var warnOnce = (text) => { + warnOnce.shown ||= {}; + if (!warnOnce.shown[text]) { + warnOnce.shown[text] = 1; + if (ENVIRONMENT_IS_NODE) text = 'warning: ' + text; + err(text); + } + }; + + + var runtimeKeepaliveCounter = 0; + var keepRuntimeAlive = () => noExitRuntime || runtimeKeepaliveCounter > 0; + var _proc_exit = (code) => { + EXITSTATUS = code; + if (!keepRuntimeAlive()) { + Module['onExit']?.(code); + ABORT = true; + } + quit_(code, new ExitStatus(code)); + }; + + + /** @param {boolean|number=} implicit */ + var exitJS = (status, implicit) => { + EXITSTATUS = status; + + checkUnflushedContent(); + + // if exit() was called explicitly, warn the user if the runtime isn't actually being shut down + if (keepRuntimeAlive() && !implicit) { + var msg = `program exited (with status: ${status}), but keepRuntimeAlive() is set (counter=${runtimeKeepaliveCounter}) due to an async operation, so halting execution but not exiting the runtime or preventing further async execution (you can use emscripten_force_exit, if you want to force a true shutdown)`; + err(msg); + } + + _proc_exit(status); + }; + + var handleException = (e) => { + // Certain exception types we do not treat as errors since they are used for + // internal control flow. + // 1. ExitStatus, which is thrown by exit() + // 2. "unwind", which is thrown by emscripten_unwind_to_js_event_loop() and others + // that wish to return to JS event loop. + if (e instanceof ExitStatus || e == 'unwind') { + return EXITSTATUS; + } + checkStackCookie(); + if (e instanceof WebAssembly.RuntimeError) { + if (_emscripten_stack_get_current() <= 0) { + err('Stack overflow detected. You can try increasing -sSTACK_SIZE (currently set to 65536)'); + } + } + quit_(1, e); + }; + + var lengthBytesUTF8 = (str) => { + var len = 0; + for (var i = 0; i < str.length; ++i) { + // Gotcha: charCodeAt returns a 16-bit word that is a UTF-16 encoded code + // unit, not a Unicode code point of the character! So decode + // UTF16->UTF32->UTF8. + // See http://unicode.org/faq/utf_bom.html#utf16-3 + var c = str.charCodeAt(i); // possibly a lead surrogate + if (c <= 0x7F) { + len++; + } else if (c <= 0x7FF) { + len += 2; + } else if (c >= 0xD800 && c <= 0xDFFF) { + len += 4; ++i; + } else { + len += 3; + } + } + return len; + }; + + var stringToUTF8Array = (str, heap, outIdx, maxBytesToWrite) => { + assert(typeof str === 'string', `stringToUTF8Array expects a string (got ${typeof str})`); + // Parameter maxBytesToWrite is not optional. Negative values, 0, null, + // undefined and false each don't write out any bytes. + if (!(maxBytesToWrite > 0)) + return 0; + + var startIdx = outIdx; + var endIdx = outIdx + maxBytesToWrite - 1; // -1 for string null terminator. + for (var i = 0; i < str.length; ++i) { + // Gotcha: charCodeAt returns a 16-bit word that is a UTF-16 encoded code + // unit, not a Unicode code point of the character! So decode + // UTF16->UTF32->UTF8. + // See http://unicode.org/faq/utf_bom.html#utf16-3 + // For UTF8 byte structure, see http://en.wikipedia.org/wiki/UTF-8#Description + // and https://www.ietf.org/rfc/rfc2279.txt + // and https://tools.ietf.org/html/rfc3629 + var u = str.charCodeAt(i); // possibly a lead surrogate + if (u >= 0xD800 && u <= 0xDFFF) { + var u1 = str.charCodeAt(++i); + u = 0x10000 + ((u & 0x3FF) << 10) | (u1 & 0x3FF); + } + if (u <= 0x7F) { + if (outIdx >= endIdx) break; + heap[outIdx++] = u; + } else if (u <= 0x7FF) { + if (outIdx + 1 >= endIdx) break; + heap[outIdx++] = 0xC0 | (u >> 6); + heap[outIdx++] = 0x80 | (u & 63); + } else if (u <= 0xFFFF) { + if (outIdx + 2 >= endIdx) break; + heap[outIdx++] = 0xE0 | (u >> 12); + heap[outIdx++] = 0x80 | ((u >> 6) & 63); + heap[outIdx++] = 0x80 | (u & 63); + } else { + if (outIdx + 3 >= endIdx) break; + if (u > 0x10FFFF) warnOnce('Invalid Unicode code point ' + ptrToString(u) + ' encountered when serializing a JS string to a UTF-8 string in wasm memory! (Valid unicode code points should be in range 0-0x10FFFF).'); + heap[outIdx++] = 0xF0 | (u >> 18); + heap[outIdx++] = 0x80 | ((u >> 12) & 63); + heap[outIdx++] = 0x80 | ((u >> 6) & 63); + heap[outIdx++] = 0x80 | (u & 63); + } + } + // Null-terminate the pointer to the buffer. + heap[outIdx] = 0; + return outIdx - startIdx; + }; + var stringToUTF8 = (str, outPtr, maxBytesToWrite) => { + assert(typeof maxBytesToWrite == 'number', 'stringToUTF8(str, outPtr, maxBytesToWrite) is missing the third parameter that specifies the length of the output buffer!'); + return stringToUTF8Array(str, HEAPU8, outPtr, maxBytesToWrite); + }; + + var stackAlloc = (sz) => __emscripten_stack_alloc(sz); + var stringToUTF8OnStack = (str) => { + var size = lengthBytesUTF8(str) + 1; + var ret = stackAlloc(size); + stringToUTF8(str, ret, size); + return ret; + }; +// End JS library code + +function checkIncomingModuleAPI() { + ignoredModuleProp('fetchSettings'); +} +var wasmImports = { + +}; +var wasmExports; +createWasm(); +var ___wasm_call_ctors = createExportWrapper('__wasm_call_ctors', 0); +var _main = Module['_main'] = createExportWrapper('__main_argc_argv', 2); +var _fflush = createExportWrapper('fflush', 1); +var _emscripten_stack_init = () => (_emscripten_stack_init = wasmExports['emscripten_stack_init'])(); +var _emscripten_stack_get_free = () => (_emscripten_stack_get_free = wasmExports['emscripten_stack_get_free'])(); +var _emscripten_stack_get_base = () => (_emscripten_stack_get_base = wasmExports['emscripten_stack_get_base'])(); +var _emscripten_stack_get_end = () => (_emscripten_stack_get_end = wasmExports['emscripten_stack_get_end'])(); +var __emscripten_stack_restore = (a0) => (__emscripten_stack_restore = wasmExports['_emscripten_stack_restore'])(a0); +var __emscripten_stack_alloc = (a0) => (__emscripten_stack_alloc = wasmExports['_emscripten_stack_alloc'])(a0); +var _emscripten_stack_get_current = () => (_emscripten_stack_get_current = wasmExports['emscripten_stack_get_current'])(); + + +// include: postamble.js +// === Auto-generated postamble setup entry stuff === + +var missingLibrarySymbols = [ + 'writeI53ToI64', + 'writeI53ToI64Clamped', + 'writeI53ToI64Signaling', + 'writeI53ToU64Clamped', + 'writeI53ToU64Signaling', + 'readI53FromI64', + 'readI53FromU64', + 'convertI32PairToI53', + 'convertI32PairToI53Checked', + 'convertU32PairToI53', + 'bigintToI53Checked', + 'getTempRet0', + 'setTempRet0', + 'zeroMemory', + 'getHeapMax', + 'abortOnCannotGrowMemory', + 'growMemory', + 'strError', + 'inetPton4', + 'inetNtop4', + 'inetPton6', + 'inetNtop6', + 'readSockaddr', + 'writeSockaddr', + 'emscriptenLog', + 'readEmAsmArgs', + 'jstoi_q', + 'getExecutableName', + 'listenOnce', + 'autoResumeAudioContext', + 'getDynCaller', + 'dynCall', + 'runtimeKeepalivePush', + 'runtimeKeepalivePop', + 'callUserCallback', + 'maybeExit', + 'asmjsMangle', + 'asyncLoad', + 'alignMemory', + 'mmapAlloc', + 'HandleAllocator', + 'getNativeTypeSize', + 'addOnInit', + 'addOnPostCtor', + 'addOnPreMain', + 'addOnExit', + 'STACK_SIZE', + 'STACK_ALIGN', + 'POINTER_SIZE', + 'ASSERTIONS', + 'getCFunc', + 'ccall', + 'cwrap', + 'uleb128Encode', + 'sigToWasmTypes', + 'generateFuncType', + 'convertJsFunctionToWasm', + 'getEmptyTableSlot', + 'updateTableMap', + 'getFunctionAddress', + 'addFunction', + 'removeFunction', + 'reallyNegative', + 'unSign', + 'strLen', + 'reSign', + 'formatString', + 'UTF8ArrayToString', + 'UTF8ToString', + 'intArrayFromString', + 'intArrayToString', + 'AsciiToString', + 'stringToAscii', + 'UTF16ToString', + 'stringToUTF16', + 'lengthBytesUTF16', + 'UTF32ToString', + 'stringToUTF32', + 'lengthBytesUTF32', + 'stringToNewUTF8', + 'writeArrayToMemory', + 'registerKeyEventCallback', + 'maybeCStringToJsString', + 'findEventTarget', + 'getBoundingClientRect', + 'fillMouseEventData', + 'registerMouseEventCallback', + 'registerWheelEventCallback', + 'registerUiEventCallback', + 'registerFocusEventCallback', + 'fillDeviceOrientationEventData', + 'registerDeviceOrientationEventCallback', + 'fillDeviceMotionEventData', + 'registerDeviceMotionEventCallback', + 'screenOrientation', + 'fillOrientationChangeEventData', + 'registerOrientationChangeEventCallback', + 'fillFullscreenChangeEventData', + 'registerFullscreenChangeEventCallback', + 'JSEvents_requestFullscreen', + 'JSEvents_resizeCanvasForFullscreen', + 'registerRestoreOldStyle', + 'hideEverythingExceptGivenElement', + 'restoreHiddenElements', + 'setLetterbox', + 'softFullscreenResizeWebGLRenderTarget', + 'doRequestFullscreen', + 'fillPointerlockChangeEventData', + 'registerPointerlockChangeEventCallback', + 'registerPointerlockErrorEventCallback', + 'requestPointerLock', + 'fillVisibilityChangeEventData', + 'registerVisibilityChangeEventCallback', + 'registerTouchEventCallback', + 'fillGamepadEventData', + 'registerGamepadEventCallback', + 'registerBeforeUnloadEventCallback', + 'fillBatteryEventData', + 'battery', + 'registerBatteryEventCallback', + 'setCanvasElementSize', + 'getCanvasElementSize', + 'jsStackTrace', + 'getCallstack', + 'convertPCtoSourceLocation', + 'getEnvStrings', + 'checkWasiClock', + 'flush_NO_FILESYSTEM', + 'wasiRightsToMuslOFlags', + 'wasiOFlagsToMuslOFlags', + 'initRandomFill', + 'randomFill', + 'safeSetTimeout', + 'setImmediateWrapped', + 'safeRequestAnimationFrame', + 'clearImmediateWrapped', + 'registerPostMainLoop', + 'registerPreMainLoop', + 'getPromise', + 'makePromise', + 'idsToPromises', + 'makePromiseCallback', + 'ExceptionInfo', + 'findMatchingCatch', + 'Browser_asyncPrepareDataCounter', + 'isLeapYear', + 'ydayFromDate', + 'arraySum', + 'addDays', + 'getSocketFromFD', + 'getSocketAddress', + 'FS_createPreloadedFile', + 'FS_modeStringToFlags', + 'FS_getMode', + 'FS_stdin_getChar', + 'FS_unlink', + 'FS_createDataFile', + 'FS_mkdirTree', + '_setNetworkCallback', + 'heapObjectForWebGLType', + 'toTypedArrayIndex', + 'webgl_enable_ANGLE_instanced_arrays', + 'webgl_enable_OES_vertex_array_object', + 'webgl_enable_WEBGL_draw_buffers', + 'webgl_enable_WEBGL_multi_draw', + 'webgl_enable_EXT_polygon_offset_clamp', + 'webgl_enable_EXT_clip_control', + 'webgl_enable_WEBGL_polygon_mode', + 'emscriptenWebGLGet', + 'computeUnpackAlignedImageSize', + 'colorChannelsInGlTextureFormat', + 'emscriptenWebGLGetTexPixelData', + 'emscriptenWebGLGetUniform', + 'webglGetUniformLocation', + 'webglPrepareUniformLocationsBeforeFirstUse', + 'webglGetLeftBracePos', + 'emscriptenWebGLGetVertexAttrib', + '__glGetActiveAttribOrUniform', + 'writeGLArray', + 'registerWebGlEventCallback', + 'runAndAbortIfError', + 'ALLOC_NORMAL', + 'ALLOC_STACK', + 'allocate', + 'writeStringToMemory', + 'writeAsciiToMemory', + 'demangle', + 'stackTrace', +]; +missingLibrarySymbols.forEach(missingLibrarySymbol) + +var unexportedSymbols = [ + 'run', + 'addRunDependency', + 'removeRunDependency', + 'out', + 'err', + 'callMain', + 'abort', + 'wasmMemory', + 'wasmExports', + 'writeStackCookie', + 'checkStackCookie', + 'INT53_MAX', + 'INT53_MIN', + 'stackSave', + 'stackRestore', + 'stackAlloc', + 'ptrToString', + 'exitJS', + 'ENV', + 'ERRNO_CODES', + 'DNS', + 'Protocols', + 'Sockets', + 'timers', + 'warnOnce', + 'readEmAsmArgsArray', + 'jstoi_s', + 'handleException', + 'keepRuntimeAlive', + 'wasmTable', + 'noExitRuntime', + 'addOnPreRun', + 'addOnPostRun', + 'freeTableIndexes', + 'functionsInTableMap', + 'setValue', + 'getValue', + 'PATH', + 'PATH_FS', + 'UTF8Decoder', + 'stringToUTF8Array', + 'stringToUTF8', + 'lengthBytesUTF8', + 'UTF16Decoder', + 'stringToUTF8OnStack', + 'JSEvents', + 'specialHTMLTargets', + 'findCanvasEventTarget', + 'currentFullscreenStrategy', + 'restoreOldWindowedStyle', + 'UNWIND_CACHE', + 'ExitStatus', + 'emSetImmediate', + 'emClearImmediate_deps', + 'emClearImmediate', + 'promiseMap', + 'uncaughtExceptionCount', + 'exceptionLast', + 'exceptionCaught', + 'Browser', + 'getPreloadedImageData__data', + 'wget', + 'MONTH_DAYS_REGULAR', + 'MONTH_DAYS_LEAP', + 'MONTH_DAYS_REGULAR_CUMULATIVE', + 'MONTH_DAYS_LEAP_CUMULATIVE', + 'SYSCALLS', + 'preloadPlugins', + 'FS_stdin_getChar_buffer', + 'FS_createPath', + 'FS_createDevice', + 'FS_readFile', + 'FS', + 'FS_createLazyFile', + 'MEMFS', + 'TTY', + 'PIPEFS', + 'SOCKFS', + 'tempFixedLengthArray', + 'miniTempWebGLFloatBuffers', + 'miniTempWebGLIntBuffers', + 'GL', + 'AL', + 'GLUT', + 'EGL', + 'GLEW', + 'IDBStore', + 'SDL', + 'SDL_gfx', + 'allocateUTF8', + 'allocateUTF8OnStack', + 'print', + 'printErr', +]; +unexportedSymbols.forEach(unexportedRuntimeSymbol); + + + +var calledRun; + +function callMain(args = []) { + assert(runDependencies == 0, 'cannot call main when async dependencies remain! (listen on Module["onRuntimeInitialized"])'); + assert(typeof onPreRuns === 'undefined' || onPreRuns.length == 0, 'cannot call main when preRun functions remain to be called'); + + var entryFunction = _main; + + args.unshift(thisProgram); + + var argc = args.length; + var argv = stackAlloc((argc + 1) * 4); + var argv_ptr = argv; + args.forEach((arg) => { + HEAPU32[((argv_ptr)>>2)] = stringToUTF8OnStack(arg); + argv_ptr += 4; + }); + HEAPU32[((argv_ptr)>>2)] = 0; + + try { + + var ret = entryFunction(argc, argv); + + // if we're not running an evented main loop, it's time to exit + exitJS(ret, /* implicit = */ true); + return ret; + } catch (e) { + return handleException(e); + } +} + +function stackCheckInit() { + // This is normally called automatically during __wasm_call_ctors but need to + // get these values before even running any of the ctors so we call it redundantly + // here. + _emscripten_stack_init(); + // TODO(sbc): Move writeStackCookie to native to to avoid this. + writeStackCookie(); +} + +function run(args = arguments_) { + + if (runDependencies > 0) { + dependenciesFulfilled = run; + return; + } + + stackCheckInit(); + + preRun(); + + // a preRun added a dependency, run will be called later + if (runDependencies > 0) { + dependenciesFulfilled = run; + return; + } + + function doRun() { + // run may have just been called through dependencies being fulfilled just in this very frame, + // or while the async setStatus time below was happening + assert(!calledRun); + calledRun = true; + Module['calledRun'] = true; + + if (ABORT) return; + + initRuntime(); + + preMain(); + + Module['onRuntimeInitialized']?.(); + consumedModuleProp('onRuntimeInitialized'); + + var noInitialRun = Module['noInitialRun'];legacyModuleProp('noInitialRun', 'noInitialRun'); + if (!noInitialRun) callMain(args); + + postRun(); + } + + if (Module['setStatus']) { + Module['setStatus']('Running...'); + setTimeout(() => { + setTimeout(() => Module['setStatus'](''), 1); + doRun(); + }, 1); + } else + { + doRun(); + } + checkStackCookie(); +} + +function checkUnflushedContent() { + // Compiler settings do not allow exiting the runtime, so flushing + // the streams is not possible. but in ASSERTIONS mode we check + // if there was something to flush, and if so tell the user they + // should request that the runtime be exitable. + // Normally we would not even include flush() at all, but in ASSERTIONS + // builds we do so just for this check, and here we see if there is any + // content to flush, that is, we check if there would have been + // something a non-ASSERTIONS build would have not seen. + // How we flush the streams depends on whether we are in SYSCALLS_REQUIRE_FILESYSTEM=0 + // mode (which has its own special function for this; otherwise, all + // the code is inside libc) + var oldOut = out; + var oldErr = err; + var has = false; + out = err = (x) => { + has = true; + } + try { // it doesn't matter if it fails + _fflush(0); + } catch(e) {} + out = oldOut; + err = oldErr; + if (has) { + warnOnce('stdio streams had content in them that was not flushed. you should set EXIT_RUNTIME to 1 (see the Emscripten FAQ), or make sure to emit a newline when you printf etc.'); + warnOnce('(this may also be due to not including full filesystem support - try building with -sFORCE_FILESYSTEM)'); + } +} + +if (Module['preInit']) { + if (typeof Module['preInit'] == 'function') Module['preInit'] = [Module['preInit']]; + while (Module['preInit'].length > 0) { + Module['preInit'].pop()(); + } +} +consumedModuleProp('preInit'); + +run(); + +// end include: postamble.js + diff --git a/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/3.28.3/CompilerIdC/a.out.wasm b/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/3.28.3/CompilerIdC/a.out.wasm new file mode 100755 index 0000000000000000000000000000000000000000..15fd07e3924a8dfd418f55f4d9dbd30871d7f973 GIT binary patch literal 1791 zcmai#J9FDc5P|JmEV&lRhsMpq{bO}5`ehdyWRb6_jp)<-EA`fU`s;> zO0U;rJ?dWd*sBA81D=do4-S}A0P87ZI#<+8mS?kBRn78@N;m5;#xhyP&iOgdjw?N8 zo}Q{2b&xhg-}8L7?X-jNC5JJ~`h*s>>bB=u^(Y9t0J>$h?UrxZVY4oq6JXg!!;8Bw zpfKgMyY;Zui5%bRMt1$!YWb}QGIN*an@(gkLdSvZyLE?l*MXtgcltU05#;8qOS;hM zQiu-lnaes#AgF_~aLGvqQjf#X@gq>@EDHFj6*_f_F81qDEAXwzKJ*+0!$0J774(eu zm%_Gti>Gvf;HEAVYS6nfS!v=uR%vq5~4fBy0!4b^IVpN)eC}06cU7-_7Pf=qyR^~q?sPPmvf#W#g zibKZQKHCJ56>k@T? zP>44WBO#EaSQJy#A}(Ul6(vHI2$lLS;gSJ=p2{3=lH)So#N|kov5d>HxRpBI#@l$y z6%}%Y@t!Ll5b8mS zs$s3ne@Rg5DQW}Pal;i4@u5U*5^4)KaVrv!@DXms;&F<4f=}?VE4B%>-A@O^4(=4R zVL&J)|GGBMc>e$(9Gjhwi!4b?HpXTA^>bm<*4l zXJRUa)PjRXzezBEm5Jz|Cy3vqtc?yPzerdrm`vLK&6(2UI|w84q%po@LYeqy#0dG)A0LNSgU15{j}X81mf_ zmLG(t7MaxLib@h9GJ1vIn8{puEZP1PpviqiLf7~L!h5i;=t;*_$|K3Up9s^mKN!8> zvYP(LKG=KuY_lG;J1x%%_uuzyzxf=J$&P17jUa6A_s4cve=(4qPpNQrspfR8Bd1}< zUbO#guWv`?)IYMrqYF)S{W)A*|60#FaY9MiUrnyH>PjlCu3iY_YQ8>G>2LvqDSDRZ z`G}q>J@6eXL{!;jiFWKLrn;J|Xosz?M|oVH;qOo3R-?tDTGeLp=w-rjOb;@=~i;x KR?|0VYyJW1zny*n literal 0 HcmV?d00001 diff --git a/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/CMakeConfigureLog.yaml b/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/CMakeConfigureLog.yaml new file mode 100644 index 0000000..c8bbc40 --- /dev/null +++ b/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/CMakeConfigureLog.yaml @@ -0,0 +1,409 @@ + +--- +events: + - + kind: "message-v1" + backtrace: + - "/usr/share/cmake-3.28/Modules/CMakeDetermineSystem.cmake:228 (message)" + - "CMakeLists.txt:4 (project)" + message: | + The target system is: Emscripten - 1 - x86 + The host system is: Linux - 6.8.0-53-generic - x86_64 + - + kind: "message-v1" + backtrace: + - "/usr/share/cmake-3.28/Modules/CMakeDetermineCompilerId.cmake:17 (message)" + - "/usr/share/cmake-3.28/Modules/CMakeDetermineCompilerId.cmake:64 (__determine_compiler_id_test)" + - "/usr/share/cmake-3.28/Modules/CMakeDetermineCCompiler.cmake:123 (CMAKE_DETERMINE_COMPILER_ID)" + - "CMakeLists.txt:4 (project)" + message: | + Compiling the C compiler identification source file "CMakeCCompilerId.c" succeeded. + Compiler: /home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc + Build flags: + Id flags: + + The output was: + 0 + + + Compilation of the C compiler identification source "CMakeCCompilerId.c" produced "a.out.js" + + Compilation of the C compiler identification source "CMakeCCompilerId.c" produced "a.out.wasm" + + The C compiler identification could not be found in: + /home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/3.28.3/CompilerIdC/a.out.js + + The C compiler identification is Clang, found in: + /home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/3.28.3/CompilerIdC/a.out.wasm + + - + kind: "try_compile-v1" + backtrace: + - "/usr/share/cmake-3.28/Modules/CMakeDetermineCompilerABI.cmake:57 (try_compile)" + - "/usr/share/cmake-3.28/Modules/CMakeTestCCompiler.cmake:26 (CMAKE_DETERMINE_COMPILER_ABI)" + - "CMakeLists.txt:4 (project)" + checks: + - "Detecting C compiler ABI info" + directories: + source: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/cproject/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-LHTwpQ" + binary: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/cproject/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-LHTwpQ" + cmakeVariables: + CMAKE_CXX_COMPILER_CLANG_SCAN_DEPS: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/emscan-deps" + CMAKE_C_FLAGS: "" + CMAKE_C_FLAGS_DEBUG: "-g" + CMAKE_EXE_LINKER_FLAGS: "" + CMAKE_MODULE_PATH: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules" + buildResult: + variable: "CMAKE_C_ABI_COMPILED" + cached: true + stdout: | + Change Dir: '/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-LHTwpQ' + + Run Build Command(s): /usr/bin/cmake -E env VERBOSE=1 /usr/bin/gmake -f Makefile cmTC_712e3/fast + /usr/bin/gmake -f CMakeFiles/cmTC_712e3.dir/build.make CMakeFiles/cmTC_712e3.dir/build + gmake[1]: Entering directory '/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-LHTwpQ' + Building C object CMakeFiles/cmTC_712e3.dir/CMakeCCompilerABI.c.o + "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" -v -MD -MT CMakeFiles/cmTC_712e3.dir/CMakeCCompilerABI.c.o -MF CMakeFiles/cmTC_712e3.dir/CMakeCCompilerABI.c.o.d -o CMakeFiles/cmTC_712e3.dir/CMakeCCompilerABI.c.o -c /usr/share/cmake-3.28/Modules/CMakeCCompilerABI.c + "/home/romazan/Рабочий Ñтол/emsdk/upstream/bin/clang" -target wasm32-unknown-emscripten -fignore-exceptions -mllvm -combiner-global-alias-analysis=false -mllvm -enable-emscripten-sjlj -mllvm -disable-lsr "--sysroot=/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/cache/sysroot" -DEMSCRIPTEN -Xclang -iwithsysroot/include/fakesdl -Xclang -iwithsysroot/include/compat -v -MD -MT CMakeFiles/cmTC_712e3.dir/CMakeCCompilerABI.c.o -MF CMakeFiles/cmTC_712e3.dir/CMakeCCompilerABI.c.o.d -oCMakeFiles/cmTC_712e3.dir/CMakeCCompilerABI.c.o -c /usr/share/cmake-3.28/Modules/CMakeCCompilerABI.c + clang version 21.0.0git (https:/github.com/llvm/llvm-project 4775e6d9099467df9363e1a3cd5950cc3d2fde05) + Target: wasm32-unknown-emscripten + Thread model: posix + InstalledDir: /home/romazan/Рабочий Ñтол/emsdk/upstream/bin + (in-process) + "/home/romazan/Рабочий Ñтол/emsdk/upstream/bin/clang-21" -cc1 -triple wasm32-unknown-emscripten -emit-obj -disable-free -clear-ast-before-backend -disable-llvm-verifier -discard-value-names -main-file-name CMakeCCompilerABI.c -mrelocation-model static -mframe-pointer=none -ffp-contract=on -fno-rounding-math -mconstructor-aliases -target-cpu generic -fvisibility=hidden -debugger-tuning=gdb "-fdebug-compilation-dir=/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-LHTwpQ" -v "-fcoverage-compilation-dir=/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-LHTwpQ" -resource-dir "/home/romazan/Рабочий Ñтол/emsdk/upstream/lib/clang/21" -dependency-file CMakeFiles/cmTC_712e3.dir/CMakeCCompilerABI.c.o.d -MT CMakeFiles/cmTC_712e3.dir/CMakeCCompilerABI.c.o -sys-header-deps -D EMSCRIPTEN -isysroot "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/cache/sysroot" -internal-isystem "/home/romazan/Рабочий Ñтол/emsdk/upstream/lib/clang/21/include" -internal-isystem "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/wasm32-emscripten" -internal-isystem "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/cache/sysroot/include" -ferror-limit 19 -fgnuc-version=4.2.1 -fskip-odr-check-in-gmf -fignore-exceptions -iwithsysroot/include/fakesdl -iwithsysroot/include/compat -mllvm -combiner-global-alias-analysis=false -mllvm -enable-emscripten-sjlj -mllvm -disable-lsr -o CMakeFiles/cmTC_712e3.dir/CMakeCCompilerABI.c.o -x c /usr/share/cmake-3.28/Modules/CMakeCCompilerABI.c + clang -cc1 version 21.0.0git based upon LLVM 21.0.0git default target x86_64-unknown-linux-gnu + ignoring nonexistent directory "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/wasm32-emscripten" + #include "..." search starts here: + #include <...> search starts here: + /home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/fakesdl + /home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat + /home/romazan/Рабочий Ñтол/emsdk/upstream/lib/clang/21/include + /home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/cache/sysroot/include + End of search list. + Linking C executable cmTC_712e3.js + /usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_712e3.dir/link.txt --verbose=1 + "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" -v @CMakeFiles/cmTC_712e3.dir/objects1.rsp -o cmTC_712e3.js + "/home/romazan/Рабочий Ñтол/emsdk/upstream/bin/clang" --version + "/home/romazan/Рабочий Ñтол/emsdk/upstream/bin/wasm-ld" -o cmTC_712e3.wasm CMakeFiles/cmTC_712e3.dir/CMakeCCompilerABI.c.o "-L/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/cache/sysroot/lib/wasm32-emscripten" "-L/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/src/lib" -lGL-getprocaddr -lal -lhtml5 -lstubs-debug -lnoexit -lc-debug -ldlmalloc-debug -lcompiler_rt -lc++-noexcept -lc++abi-debug-noexcept -lsockets -mllvm -combiner-global-alias-analysis=false -mllvm -enable-emscripten-sjlj -mllvm -disable-lsr /tmp/tmp2ec8r0jdlibemscripten_js_symbols.so --strip-debug --export=emscripten_stack_get_end --export=emscripten_stack_get_free --export=emscripten_stack_get_base --export=emscripten_stack_get_current --export=emscripten_stack_init --export=_emscripten_stack_alloc --export=__wasm_call_ctors --export=_emscripten_stack_restore --export-if-defined=__start_em_asm --export-if-defined=__stop_em_asm --export-if-defined=__start_em_lib_deps --export-if-defined=__stop_em_lib_deps --export-if-defined=__start_em_js --export-if-defined=__stop_em_js --export-if-defined=main --export-if-defined=__main_argc_argv --export-if-defined=fflush --export-table -z stack-size=65536 --no-growable-memory --initial-heap=16777216 --no-entry --stack-first --table-base=1 + "/home/romazan/Рабочий Ñтол/emsdk/upstream/bin/llvm-objcopy" cmTC_712e3.wasm cmTC_712e3.wasm --remove-section=.debug* --remove-section=producers --remove-section=name + "/home/romazan/Рабочий Ñтол/emsdk/node/20.18.0_64bit/bin/node" "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/tools/compiler.mjs" - + gmake[1]: Leaving directory '/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-LHTwpQ' + + exitCode: 0 + - + kind: "message-v1" + backtrace: + - "/usr/share/cmake-3.28/Modules/CMakeDetermineCompilerABI.cmake:127 (message)" + - "/usr/share/cmake-3.28/Modules/CMakeTestCCompiler.cmake:26 (CMAKE_DETERMINE_COMPILER_ABI)" + - "CMakeLists.txt:4 (project)" + message: | + Parsed C implicit include dir info: rv=done + found start of include info + found start of implicit include info + add: [/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/fakesdl] + add: [/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat] + add: [/home/romazan/Рабочий Ñтол/emsdk/upstream/lib/clang/21/include] + add: [/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/cache/sysroot/include] + end of search list found + collapse include dir [/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/fakesdl] ==> [/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/fakesdl] + collapse include dir [/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat] ==> [/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat] + collapse include dir [/home/romazan/Рабочий Ñтол/emsdk/upstream/lib/clang/21/include] ==> [/home/romazan/Рабочий Ñтол/emsdk/upstream/lib/clang/21/include] + collapse include dir [/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/cache/sysroot/include] ==> [/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/cache/sysroot/include] + implicit include dirs: [/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/fakesdl;/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat;/home/romazan/Рабочий Ñтол/emsdk/upstream/lib/clang/21/include;/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/cache/sysroot/include] + + + - + kind: "message-v1" + backtrace: + - "/usr/share/cmake-3.28/Modules/CMakeDetermineCompilerABI.cmake:159 (message)" + - "/usr/share/cmake-3.28/Modules/CMakeTestCCompiler.cmake:26 (CMAKE_DETERMINE_COMPILER_ABI)" + - "CMakeLists.txt:4 (project)" + message: | + Parsed C implicit link information: + link line regex: [^( *|.*[/\\])(ld|CMAKE_LINK_STARTFILE-NOTFOUND|([^/\\]+-)?ld|collect2)[^/\\]*( |$)] + ignore line: [Change Dir: '/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-LHTwpQ'] + ignore line: [] + ignore line: [Run Build Command(s): /usr/bin/cmake -E env VERBOSE=1 /usr/bin/gmake -f Makefile cmTC_712e3/fast] + ignore line: [/usr/bin/gmake -f CMakeFiles/cmTC_712e3.dir/build.make CMakeFiles/cmTC_712e3.dir/build] + ignore line: [gmake[1]: Entering directory '/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-LHTwpQ'] + ignore line: [Building C object CMakeFiles/cmTC_712e3.dir/CMakeCCompilerABI.c.o] + ignore line: ["/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" -v -MD -MT CMakeFiles/cmTC_712e3.dir/CMakeCCompilerABI.c.o -MF CMakeFiles/cmTC_712e3.dir/CMakeCCompilerABI.c.o.d -o CMakeFiles/cmTC_712e3.dir/CMakeCCompilerABI.c.o -c /usr/share/cmake-3.28/Modules/CMakeCCompilerABI.c] + ignore line: [ "/home/romazan/Рабочий Ñтол/emsdk/upstream/bin/clang" -target wasm32-unknown-emscripten -fignore-exceptions -mllvm -combiner-global-alias-analysis=false -mllvm -enable-emscripten-sjlj -mllvm -disable-lsr "--sysroot=/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/cache/sysroot" -DEMSCRIPTEN -Xclang -iwithsysroot/include/fakesdl -Xclang -iwithsysroot/include/compat -v -MD -MT CMakeFiles/cmTC_712e3.dir/CMakeCCompilerABI.c.o -MF CMakeFiles/cmTC_712e3.dir/CMakeCCompilerABI.c.o.d -oCMakeFiles/cmTC_712e3.dir/CMakeCCompilerABI.c.o -c /usr/share/cmake-3.28/Modules/CMakeCCompilerABI.c] + ignore line: [clang version 21.0.0git (https:/github.com/llvm/llvm-project 4775e6d9099467df9363e1a3cd5950cc3d2fde05)] + ignore line: [Target: wasm32-unknown-emscripten] + ignore line: [Thread model: posix] + ignore line: [InstalledDir: /home/romazan/Рабочий Ñтол/emsdk/upstream/bin] + ignore line: [ (in-process)] + ignore line: [ "/home/romazan/Рабочий Ñтол/emsdk/upstream/bin/clang-21" -cc1 -triple wasm32-unknown-emscripten -emit-obj -disable-free -clear-ast-before-backend -disable-llvm-verifier -discard-value-names -main-file-name CMakeCCompilerABI.c -mrelocation-model static -mframe-pointer=none -ffp-contract=on -fno-rounding-math -mconstructor-aliases -target-cpu generic -fvisibility=hidden -debugger-tuning=gdb "-fdebug-compilation-dir=/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-LHTwpQ" -v "-fcoverage-compilation-dir=/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-LHTwpQ" -resource-dir "/home/romazan/Рабочий Ñтол/emsdk/upstream/lib/clang/21" -dependency-file CMakeFiles/cmTC_712e3.dir/CMakeCCompilerABI.c.o.d -MT CMakeFiles/cmTC_712e3.dir/CMakeCCompilerABI.c.o -sys-header-deps -D EMSCRIPTEN -isysroot "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/cache/sysroot" -internal-isystem "/home/romazan/Рабочий Ñтол/emsdk/upstream/lib/clang/21/include" -internal-isystem "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/wasm32-emscripten" -internal-isystem "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/cache/sysroot/include" -ferror-limit 19 -fgnuc-version=4.2.1 -fskip-odr-check-in-gmf -fignore-exceptions -iwithsysroot/include/fakesdl -iwithsysroot/include/compat -mllvm -combiner-global-alias-analysis=false -mllvm -enable-emscripten-sjlj -mllvm -disable-lsr -o CMakeFiles/cmTC_712e3.dir/CMakeCCompilerABI.c.o -x c /usr/share/cmake-3.28/Modules/CMakeCCompilerABI.c] + ignore line: [clang -cc1 version 21.0.0git based upon LLVM 21.0.0git default target x86_64-unknown-linux-gnu] + ignore line: [ignoring nonexistent directory "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/wasm32-emscripten"] + ignore line: [#include "..." search starts here:] + ignore line: [#include <...> search starts here:] + ignore line: [ /home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/fakesdl] + ignore line: [ /home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat] + ignore line: [ /home/romazan/Рабочий Ñтол/emsdk/upstream/lib/clang/21/include] + ignore line: [ /home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/cache/sysroot/include] + ignore line: [End of search list.] + ignore line: [Linking C executable cmTC_712e3.js] + ignore line: [/usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_712e3.dir/link.txt --verbose=1] + ignore line: ["/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" -v @CMakeFiles/cmTC_712e3.dir/objects1.rsp -o cmTC_712e3.js ] + ignore line: [ "/home/romazan/Рабочий Ñтол/emsdk/upstream/bin/clang" --version] + link line: [ "/home/romazan/Рабочий Ñтол/emsdk/upstream/bin/wasm-ld" -o cmTC_712e3.wasm CMakeFiles/cmTC_712e3.dir/CMakeCCompilerABI.c.o "-L/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/cache/sysroot/lib/wasm32-emscripten" "-L/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/src/lib" -lGL-getprocaddr -lal -lhtml5 -lstubs-debug -lnoexit -lc-debug -ldlmalloc-debug -lcompiler_rt -lc++-noexcept -lc++abi-debug-noexcept -lsockets -mllvm -combiner-global-alias-analysis=false -mllvm -enable-emscripten-sjlj -mllvm -disable-lsr /tmp/tmp2ec8r0jdlibemscripten_js_symbols.so --strip-debug --export=emscripten_stack_get_end --export=emscripten_stack_get_free --export=emscripten_stack_get_base --export=emscripten_stack_get_current --export=emscripten_stack_init --export=_emscripten_stack_alloc --export=__wasm_call_ctors --export=_emscripten_stack_restore --export-if-defined=__start_em_asm --export-if-defined=__stop_em_asm --export-if-defined=__start_em_lib_deps --export-if-defined=__stop_em_lib_deps --export-if-defined=__start_em_js --export-if-defined=__stop_em_js --export-if-defined=main --export-if-defined=__main_argc_argv --export-if-defined=fflush --export-table -z stack-size=65536 --no-growable-memory --initial-heap=16777216 --no-entry --stack-first --table-base=1] + arg [/home/romazan/Рабочий Ñтол/emsdk/upstream/bin/wasm-ld] ==> ignore + arg [-o] ==> ignore + arg [cmTC_712e3.wasm] ==> ignore + arg [CMakeFiles/cmTC_712e3.dir/CMakeCCompilerABI.c.o] ==> ignore + arg [-L/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/cache/sysroot/lib/wasm32-emscripten] ==> dir [/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/cache/sysroot/lib/wasm32-emscripten] + arg [-L/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/src/lib] ==> dir [/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/src/lib] + arg [-lGL-getprocaddr] ==> lib [GL-getprocaddr] + arg [-lal] ==> lib [al] + arg [-lhtml5] ==> lib [html5] + arg [-lstubs-debug] ==> lib [stubs-debug] + arg [-lnoexit] ==> lib [noexit] + arg [-lc-debug] ==> lib [c-debug] + arg [-ldlmalloc-debug] ==> lib [dlmalloc-debug] + arg [-lcompiler_rt] ==> lib [compiler_rt] + arg [-lc++-noexcept] ==> lib [c++-noexcept] + arg [-lc++abi-debug-noexcept] ==> lib [c++abi-debug-noexcept] + arg [-lsockets] ==> lib [sockets] + arg [-mllvm] ==> ignore + arg [-combiner-global-alias-analysis=false] ==> ignore + arg [-mllvm] ==> ignore + arg [-enable-emscripten-sjlj] ==> ignore + arg [-mllvm] ==> ignore + arg [-disable-lsr] ==> ignore + arg [/tmp/tmp2ec8r0jdlibemscripten_js_symbols.so] ==> ignore + arg [--strip-debug] ==> ignore + arg [--export=emscripten_stack_get_end] ==> ignore + arg [--export=emscripten_stack_get_free] ==> ignore + arg [--export=emscripten_stack_get_base] ==> ignore + arg [--export=emscripten_stack_get_current] ==> ignore + arg [--export=emscripten_stack_init] ==> ignore + arg [--export=_emscripten_stack_alloc] ==> ignore + arg [--export=__wasm_call_ctors] ==> ignore + arg [--export=_emscripten_stack_restore] ==> ignore + arg [--export-if-defined=__start_em_asm] ==> ignore + arg [--export-if-defined=__stop_em_asm] ==> ignore + arg [--export-if-defined=__start_em_lib_deps] ==> ignore + arg [--export-if-defined=__stop_em_lib_deps] ==> ignore + arg [--export-if-defined=__start_em_js] ==> ignore + arg [--export-if-defined=__stop_em_js] ==> ignore + arg [--export-if-defined=main] ==> ignore + arg [--export-if-defined=__main_argc_argv] ==> ignore + arg [--export-if-defined=fflush] ==> ignore + arg [--export-table] ==> ignore + arg [-zstack-size=65536] ==> ignore + arg [--no-growable-memory] ==> ignore + arg [--initial-heap=16777216] ==> ignore + arg [--no-entry] ==> ignore + arg [--stack-first] ==> ignore + arg [--table-base=1] ==> ignore + collapse library dir [/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/cache/sysroot/lib/wasm32-emscripten] ==> [/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/cache/sysroot/lib/wasm32-emscripten] + collapse library dir [/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/src/lib] ==> [/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/src/lib] + implicit libs: [GL-getprocaddr;al;html5;stubs-debug;noexit;c-debug;dlmalloc-debug;compiler_rt;c++-noexcept;c++abi-debug-noexcept;sockets] + implicit objs: [] + implicit dirs: [/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/cache/sysroot/lib/wasm32-emscripten;/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/src/lib] + implicit fwks: [] + + + - + kind: "try_compile-v1" + backtrace: + - "/usr/share/cmake-3.28/Modules/CheckIncludeFile.cmake:90 (try_compile)" + - "CMakeLists.txt:22 (check_include_file)" + checks: + - "Looking for sys/types.h" + directories: + source: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/cproject/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-U8Y6Fp" + binary: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/cproject/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-U8Y6Fp" + cmakeVariables: + CMAKE_CXX_COMPILER_CLANG_SCAN_DEPS: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/emscan-deps" + CMAKE_C_FLAGS: "" + CMAKE_C_FLAGS_DEBUG: "-g" + CMAKE_EXE_LINKER_FLAGS: "" + CMAKE_MODULE_PATH: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules" + buildResult: + variable: "HAVE_SYS_TYPES_H" + cached: true + stdout: | + Change Dir: '/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-U8Y6Fp' + + Run Build Command(s): /usr/bin/cmake -E env VERBOSE=1 /usr/bin/gmake -f Makefile cmTC_d8424/fast + /usr/bin/gmake -f CMakeFiles/cmTC_d8424.dir/build.make CMakeFiles/cmTC_d8424.dir/build + gmake[1]: вход в каталог «/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-U8Y6Fp» + Building C object CMakeFiles/cmTC_d8424.dir/CheckIncludeFile.c.o + "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" -MD -MT CMakeFiles/cmTC_d8424.dir/CheckIncludeFile.c.o -MF CMakeFiles/cmTC_d8424.dir/CheckIncludeFile.c.o.d -o CMakeFiles/cmTC_d8424.dir/CheckIncludeFile.c.o -c "/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-U8Y6Fp/CheckIncludeFile.c" + Linking C executable cmTC_d8424.js + /usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_d8424.dir/link.txt --verbose=1 + "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" @CMakeFiles/cmTC_d8424.dir/objects1.rsp -o cmTC_d8424.js + gmake[1]: выход из каталога «/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-U8Y6Fp» + + exitCode: 0 + - + kind: "try_compile-v1" + backtrace: + - "/usr/share/cmake-3.28/Modules/CheckIncludeFile.cmake:90 (try_compile)" + - "CMakeLists.txt:23 (check_include_file)" + checks: + - "Looking for stdint.h" + directories: + source: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/cproject/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-r21ap0" + binary: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/cproject/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-r21ap0" + cmakeVariables: + CMAKE_CXX_COMPILER_CLANG_SCAN_DEPS: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/emscan-deps" + CMAKE_C_FLAGS: "" + CMAKE_C_FLAGS_DEBUG: "-g" + CMAKE_EXE_LINKER_FLAGS: "" + CMAKE_MODULE_PATH: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules" + buildResult: + variable: "HAVE_STDINT_H" + cached: true + stdout: | + Change Dir: '/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-r21ap0' + + Run Build Command(s): /usr/bin/cmake -E env VERBOSE=1 /usr/bin/gmake -f Makefile cmTC_f3775/fast + /usr/bin/gmake -f CMakeFiles/cmTC_f3775.dir/build.make CMakeFiles/cmTC_f3775.dir/build + gmake[1]: вход в каталог «/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-r21ap0» + Building C object CMakeFiles/cmTC_f3775.dir/CheckIncludeFile.c.o + "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" -MD -MT CMakeFiles/cmTC_f3775.dir/CheckIncludeFile.c.o -MF CMakeFiles/cmTC_f3775.dir/CheckIncludeFile.c.o.d -o CMakeFiles/cmTC_f3775.dir/CheckIncludeFile.c.o -c "/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-r21ap0/CheckIncludeFile.c" + Linking C executable cmTC_f3775.js + /usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_f3775.dir/link.txt --verbose=1 + "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" @CMakeFiles/cmTC_f3775.dir/objects1.rsp -o cmTC_f3775.js + gmake[1]: выход из каталога «/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-r21ap0» + + exitCode: 0 + - + kind: "try_compile-v1" + backtrace: + - "/usr/share/cmake-3.28/Modules/CheckIncludeFile.cmake:90 (try_compile)" + - "CMakeLists.txt:24 (check_include_file)" + checks: + - "Looking for stddef.h" + directories: + source: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/cproject/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-389nTw" + binary: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/cproject/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-389nTw" + cmakeVariables: + CMAKE_CXX_COMPILER_CLANG_SCAN_DEPS: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/emscan-deps" + CMAKE_C_FLAGS: "" + CMAKE_C_FLAGS_DEBUG: "-g" + CMAKE_EXE_LINKER_FLAGS: "" + CMAKE_MODULE_PATH: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules" + buildResult: + variable: "HAVE_STDDEF_H" + cached: true + stdout: | + Change Dir: '/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-389nTw' + + Run Build Command(s): /usr/bin/cmake -E env VERBOSE=1 /usr/bin/gmake -f Makefile cmTC_5e09c/fast + /usr/bin/gmake -f CMakeFiles/cmTC_5e09c.dir/build.make CMakeFiles/cmTC_5e09c.dir/build + gmake[1]: вход в каталог «/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-389nTw» + Building C object CMakeFiles/cmTC_5e09c.dir/CheckIncludeFile.c.o + "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" -MD -MT CMakeFiles/cmTC_5e09c.dir/CheckIncludeFile.c.o -MF CMakeFiles/cmTC_5e09c.dir/CheckIncludeFile.c.o.d -o CMakeFiles/cmTC_5e09c.dir/CheckIncludeFile.c.o -c "/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-389nTw/CheckIncludeFile.c" + Linking C executable cmTC_5e09c.js + /usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_5e09c.dir/link.txt --verbose=1 + "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" @CMakeFiles/cmTC_5e09c.dir/objects1.rsp -o cmTC_5e09c.js + gmake[1]: выход из каталога «/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-389nTw» + + exitCode: 0 + - + kind: "try_compile-v1" + backtrace: + - "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules/CheckTypeSize.cmake:114 (try_compile)" + - "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules/CheckTypeSize.cmake:239 (__check_type_size_impl)" + - "CMakeLists.txt:42 (check_type_size)" + directories: + source: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/cproject/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/CMakeTmp" + binary: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/cproject/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/CMakeTmp" + cmakeVariables: + CMAKE_CXX_COMPILER_CLANG_SCAN_DEPS: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/emscan-deps" + CMAKE_C_FLAGS: "" + CMAKE_C_FLAGS_DEBUG: "-g" + CMAKE_EXE_LINKER_FLAGS: "" + CMAKE_MODULE_PATH: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules" + buildResult: + variable: "HAVE_OFF64_T" + cached: true + stdout: | + Change Dir: '/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/CMakeTmp' + + Run Build Command(s): /usr/bin/cmake -E env VERBOSE=1 /usr/bin/gmake -f Makefile cmTC_dfde6/fast + /usr/bin/gmake -f CMakeFiles/cmTC_dfde6.dir/build.make CMakeFiles/cmTC_dfde6.dir/build + gmake[1]: вход в каталог «/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/CMakeTmp» + Building C object CMakeFiles/cmTC_dfde6.dir/OFF64_T.c.o + "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" -DHAVE_STDDEF_H -DHAVE_STDINT_H -DHAVE_SYS_TYPES_H -D_LARGEFILE64_SOURCE=1 -MD -MT CMakeFiles/cmTC_dfde6.dir/OFF64_T.c.o -MF CMakeFiles/cmTC_dfde6.dir/OFF64_T.c.o.d -o CMakeFiles/cmTC_dfde6.dir/OFF64_T.c.o -c "/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/CheckTypeSize/OFF64_T.c" + Linking C executable cmTC_dfde6.js + /usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_dfde6.dir/link.txt --verbose=1 + "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" @CMakeFiles/cmTC_dfde6.dir/objects1.rsp -o cmTC_dfde6.js @CMakeFiles/cmTC_dfde6.dir/linkLibs.rsp + gmake[1]: выход из каталога «/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/CMakeTmp» + + exitCode: 0 + - + kind: "try_compile-v1" + backtrace: + - "/usr/share/cmake-3.28/Modules/CheckFunctionExists.cmake:86 (try_compile)" + - "CMakeLists.txt:51 (check_function_exists)" + checks: + - "Looking for fseeko" + directories: + source: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/cproject/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-hiBmjn" + binary: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/cproject/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-hiBmjn" + cmakeVariables: + CMAKE_CXX_COMPILER_CLANG_SCAN_DEPS: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/emscan-deps" + CMAKE_C_FLAGS: "" + CMAKE_C_FLAGS_DEBUG: "-g" + CMAKE_EXE_LINKER_FLAGS: "" + CMAKE_MODULE_PATH: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules" + buildResult: + variable: "HAVE_FSEEKO" + cached: true + stdout: | + Change Dir: '/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-hiBmjn' + + Run Build Command(s): /usr/bin/cmake -E env VERBOSE=1 /usr/bin/gmake -f Makefile cmTC_7cbdf/fast + /usr/bin/gmake -f CMakeFiles/cmTC_7cbdf.dir/build.make CMakeFiles/cmTC_7cbdf.dir/build + gmake[1]: вход в каталог «/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-hiBmjn» + Building C object CMakeFiles/cmTC_7cbdf.dir/CheckFunctionExists.c.o + "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" -DCHECK_FUNCTION_EXISTS=fseeko -MD -MT CMakeFiles/cmTC_7cbdf.dir/CheckFunctionExists.c.o -MF CMakeFiles/cmTC_7cbdf.dir/CheckFunctionExists.c.o.d -o CMakeFiles/cmTC_7cbdf.dir/CheckFunctionExists.c.o -c "/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-hiBmjn/CheckFunctionExists.c" + Linking C executable cmTC_7cbdf.js + /usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_7cbdf.dir/link.txt --verbose=1 + "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" -DCHECK_FUNCTION_EXISTS=fseeko @CMakeFiles/cmTC_7cbdf.dir/objects1.rsp -o cmTC_7cbdf.js + wasm-ld: warning: function signature mismatch: fseeko + >>> defined as () -> i32 in CMakeFiles/cmTC_7cbdf.dir/CheckFunctionExists.c.o + >>> defined as (i32, i64, i32) -> i32 in /home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/cache/sysroot/lib/wasm32-emscripten/libc-debug.a(fseek.o) + gmake[1]: выход из каталога «/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-hiBmjn» + + exitCode: 0 + - + kind: "try_compile-v1" + backtrace: + - "/usr/share/cmake-3.28/Modules/CheckIncludeFile.cmake:90 (try_compile)" + - "CMakeLists.txt:59 (check_include_file)" + checks: + - "Looking for unistd.h" + directories: + source: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/cproject/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-33QcxB" + binary: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/cproject/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-33QcxB" + cmakeVariables: + CMAKE_CXX_COMPILER_CLANG_SCAN_DEPS: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/emscan-deps" + CMAKE_C_FLAGS: "" + CMAKE_C_FLAGS_DEBUG: "-g" + CMAKE_EXE_LINKER_FLAGS: "" + CMAKE_MODULE_PATH: "/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules;/home/romazan/\u0420\u0430\u0431\u043e\u0447\u0438\u0439 \u0441\u0442\u043e\u043b/emsdk/upstream/emscripten/cmake/Modules" + buildResult: + variable: "Z_HAVE_UNISTD_H" + cached: true + stdout: | + Change Dir: '/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-33QcxB' + + Run Build Command(s): /usr/bin/cmake -E env VERBOSE=1 /usr/bin/gmake -f Makefile cmTC_d969e/fast + /usr/bin/gmake -f CMakeFiles/cmTC_d969e.dir/build.make CMakeFiles/cmTC_d969e.dir/build + gmake[1]: вход в каталог «/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-33QcxB» + Building C object CMakeFiles/cmTC_d969e.dir/CheckIncludeFile.c.o + "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" -MD -MT CMakeFiles/cmTC_d969e.dir/CheckIncludeFile.c.o -MF CMakeFiles/cmTC_d969e.dir/CheckIncludeFile.c.o.d -o CMakeFiles/cmTC_d969e.dir/CheckIncludeFile.c.o -c "/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-33QcxB/CheckIncludeFile.c" + Linking C executable cmTC_d969e.js + /usr/bin/cmake -E cmake_link_script CMakeFiles/cmTC_d969e.dir/link.txt --verbose=1 + "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" @CMakeFiles/cmTC_d969e.dir/objects1.rsp -o cmTC_d969e.js + gmake[1]: выход из каталога «/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/CMakeScratch/TryCompile-33QcxB» + + exitCode: 0 +... diff --git a/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/CMakeDirectoryInformation.cmake b/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/CMakeDirectoryInformation.cmake new file mode 100644 index 0000000..343a8b9 --- /dev/null +++ b/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/CMakeDirectoryInformation.cmake @@ -0,0 +1,16 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.28 + +# Relative path conversion top directories. +set(CMAKE_RELATIVE_PATH_TOP_SOURCE "/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1") +set(CMAKE_RELATIVE_PATH_TOP_BINARY "/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/build-emcmake") + +# Force unix paths in dependencies. +set(CMAKE_FORCE_UNIX_PATHS 1) + + +# The C and CXX include file regular expressions for this directory. +set(CMAKE_C_INCLUDE_REGEX_SCAN "^.*$") +set(CMAKE_C_INCLUDE_REGEX_COMPLAIN "^$") +set(CMAKE_CXX_INCLUDE_REGEX_SCAN ${CMAKE_C_INCLUDE_REGEX_SCAN}) +set(CMAKE_CXX_INCLUDE_REGEX_COMPLAIN ${CMAKE_C_INCLUDE_REGEX_COMPLAIN}) diff --git a/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/CheckTypeSize/OFF64_T.bin b/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/CheckTypeSize/OFF64_T.bin new file mode 100755 index 0000000000000000000000000000000000000000..517ed5ae5708da750a0c39f6388e1d169cb899e8 GIT binary patch literal 1166 zcmaJ=&2G~`5T0E-iIcTsw-r?*fwWG0s1#X(ON2Pp2S5k`4}g&4q}$-cv5md%4?-j@ z6@Oa2Iej=Y1TTnI34_l?6sfVFdLoJbC#+Y4^^ za#6@M7hvDL;Zo%$WuA*fg41ph@ChSY=cnG)!C~wpv6j0le88o?<7%98ZSLwmxDBrJ z#*msQU`P!VWJr~xiE495f$RI!a9h0P!D@Ah2@HS7ZF7USrQ6{h-Y#9HFyNZpq4btbNH#2da{+pnyMpZVA~V5H_$ z3@xgVrb`)qBycVj4;Qe!Gh3$uoB6-NxlkUsu2Nu630dNlRWaCerPb#P3p8xT|1j$V zeyxqlRUK%o>kvL^Hp7I9oc+WH$)-dtNK;+O)Vgdud->$mBekxt@8k3E4Zsg#E<#!2 zSQ-O1F5|gZFVn!jcJb0o4z?#@9D7%5<)z0WkJDs2=q$=uM#o`Xih;c-t1a`UaXJp; qVz8B@iOj<+i;}5#l*u$o +#include +#include + + +#undef KEY +#if defined(__i386) +# define KEY '_','_','i','3','8','6' +#elif defined(__x86_64) +# define KEY '_','_','x','8','6','_','6','4' +#elif defined(__ppc__) +# define KEY '_','_','p','p','c','_','_' +#elif defined(__ppc64__) +# define KEY '_','_','p','p','c','6','4','_','_' +#elif defined(__aarch64__) +# define KEY '_','_','a','a','r','c','h','6','4','_','_' +#elif defined(__ARM_ARCH_7A__) +# define KEY '_','_','A','R','M','_','A','R','C','H','_','7','A','_','_' +#elif defined(__ARM_ARCH_7S__) +# define KEY '_','_','A','R','M','_','A','R','C','H','_','7','S','_','_' +#endif + +#define SIZE (sizeof(off64_t)) +char info_size[] = {'I', 'N', 'F', 'O', ':', 's','i','z','e','[', + ('0' + ((SIZE / 10000)%10)), + ('0' + ((SIZE / 1000)%10)), + ('0' + ((SIZE / 100)%10)), + ('0' + ((SIZE / 10)%10)), + ('0' + (SIZE % 10)), + ']', +#ifdef KEY + ' ','k','e','y','[', KEY, ']', +#endif + '\0'}; + +#ifdef __CLASSIC_C__ +int main(argc, argv) int argc; char *argv[]; +#else +int main(int argc, char *argv[]) +#endif +{ + int require = 0; + require += info_size[argc]; + (void)argv; + return require; +} diff --git a/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/Makefile.cmake b/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/Makefile.cmake new file mode 100644 index 0000000..bae0044 --- /dev/null +++ b/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/Makefile.cmake @@ -0,0 +1,122 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.28 + +# The generator used is: +set(CMAKE_DEPENDS_GENERATOR "Unix Makefiles") + +# The top level Makefile was generated from the following files: +set(CMAKE_MAKEFILE_DEPENDS + "CMakeCache.txt" + "/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/CMakeLists.txt" + "CMakeFiles/3.28.3/CMakeCCompiler.cmake" + "CMakeFiles/3.28.3/CMakeSystem.cmake" + "CMakeFiles/CheckTypeSize/OFF64_T.c" + "/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/zconf.h.cmakein" + "/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/zlib.pc.cmakein" + "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/cmake/Modules/CheckTypeSize.c.in" + "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/cmake/Modules/CheckTypeSize.cmake" + "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/cmake/Modules/Platform/Emscripten.cmake" + "/usr/share/cmake-3.28/Modules/CMakeCCompiler.cmake.in" + "/usr/share/cmake-3.28/Modules/CMakeCCompilerABI.c" + "/usr/share/cmake-3.28/Modules/CMakeCInformation.cmake" + "/usr/share/cmake-3.28/Modules/CMakeCommonLanguageInclude.cmake" + "/usr/share/cmake-3.28/Modules/CMakeCompilerIdDetection.cmake" + "/usr/share/cmake-3.28/Modules/CMakeDetermineCCompiler.cmake" + "/usr/share/cmake-3.28/Modules/CMakeDetermineCompileFeatures.cmake" + "/usr/share/cmake-3.28/Modules/CMakeDetermineCompiler.cmake" + "/usr/share/cmake-3.28/Modules/CMakeDetermineCompilerABI.cmake" + "/usr/share/cmake-3.28/Modules/CMakeDetermineCompilerId.cmake" + "/usr/share/cmake-3.28/Modules/CMakeDetermineSystem.cmake" + "/usr/share/cmake-3.28/Modules/CMakeFindBinUtils.cmake" + "/usr/share/cmake-3.28/Modules/CMakeGenericSystem.cmake" + "/usr/share/cmake-3.28/Modules/CMakeInitializeConfigs.cmake" + "/usr/share/cmake-3.28/Modules/CMakeLanguageInformation.cmake" + "/usr/share/cmake-3.28/Modules/CMakeParseImplicitIncludeInfo.cmake" + "/usr/share/cmake-3.28/Modules/CMakeParseImplicitLinkInfo.cmake" + "/usr/share/cmake-3.28/Modules/CMakeParseLibraryArchitecture.cmake" + "/usr/share/cmake-3.28/Modules/CMakeSystem.cmake.in" + "/usr/share/cmake-3.28/Modules/CMakeSystemSpecificInformation.cmake" + "/usr/share/cmake-3.28/Modules/CMakeSystemSpecificInitialize.cmake" + "/usr/share/cmake-3.28/Modules/CMakeTestCCompiler.cmake" + "/usr/share/cmake-3.28/Modules/CMakeTestCompilerCommon.cmake" + "/usr/share/cmake-3.28/Modules/CMakeUnixFindMake.cmake" + "/usr/share/cmake-3.28/Modules/CheckCSourceCompiles.cmake" + "/usr/share/cmake-3.28/Modules/CheckFunctionExists.cmake" + "/usr/share/cmake-3.28/Modules/CheckIncludeFile.cmake" + "/usr/share/cmake-3.28/Modules/CheckIncludeFileCXX.cmake" + "/usr/share/cmake-3.28/Modules/Compiler/ADSP-DetermineCompiler.cmake" + "/usr/share/cmake-3.28/Modules/Compiler/ARMCC-DetermineCompiler.cmake" + "/usr/share/cmake-3.28/Modules/Compiler/ARMClang-DetermineCompiler.cmake" + "/usr/share/cmake-3.28/Modules/Compiler/AppleClang-DetermineCompiler.cmake" + "/usr/share/cmake-3.28/Modules/Compiler/Borland-DetermineCompiler.cmake" + "/usr/share/cmake-3.28/Modules/Compiler/Bruce-C-DetermineCompiler.cmake" + "/usr/share/cmake-3.28/Modules/Compiler/CMakeCommonCompilerMacros.cmake" + "/usr/share/cmake-3.28/Modules/Compiler/Clang-C.cmake" + "/usr/share/cmake-3.28/Modules/Compiler/Clang-DetermineCompiler.cmake" + "/usr/share/cmake-3.28/Modules/Compiler/Clang-DetermineCompilerInternal.cmake" + "/usr/share/cmake-3.28/Modules/Compiler/Clang-FindBinUtils.cmake" + "/usr/share/cmake-3.28/Modules/Compiler/Clang.cmake" + "/usr/share/cmake-3.28/Modules/Compiler/Compaq-C-DetermineCompiler.cmake" + "/usr/share/cmake-3.28/Modules/Compiler/Cray-DetermineCompiler.cmake" + "/usr/share/cmake-3.28/Modules/Compiler/CrayClang-DetermineCompiler.cmake" + "/usr/share/cmake-3.28/Modules/Compiler/Embarcadero-DetermineCompiler.cmake" + "/usr/share/cmake-3.28/Modules/Compiler/Fujitsu-DetermineCompiler.cmake" + "/usr/share/cmake-3.28/Modules/Compiler/FujitsuClang-DetermineCompiler.cmake" + "/usr/share/cmake-3.28/Modules/Compiler/GHS-DetermineCompiler.cmake" + "/usr/share/cmake-3.28/Modules/Compiler/GNU-C-DetermineCompiler.cmake" + "/usr/share/cmake-3.28/Modules/Compiler/GNU.cmake" + "/usr/share/cmake-3.28/Modules/Compiler/HP-C-DetermineCompiler.cmake" + "/usr/share/cmake-3.28/Modules/Compiler/IAR-DetermineCompiler.cmake" + "/usr/share/cmake-3.28/Modules/Compiler/IBMCPP-C-DetermineVersionInternal.cmake" + "/usr/share/cmake-3.28/Modules/Compiler/IBMClang-C-DetermineCompiler.cmake" + "/usr/share/cmake-3.28/Modules/Compiler/Intel-DetermineCompiler.cmake" + "/usr/share/cmake-3.28/Modules/Compiler/IntelLLVM-DetermineCompiler.cmake" + "/usr/share/cmake-3.28/Modules/Compiler/LCC-C-DetermineCompiler.cmake" + "/usr/share/cmake-3.28/Modules/Compiler/MSVC-DetermineCompiler.cmake" + "/usr/share/cmake-3.28/Modules/Compiler/NVHPC-DetermineCompiler.cmake" + "/usr/share/cmake-3.28/Modules/Compiler/NVIDIA-DetermineCompiler.cmake" + "/usr/share/cmake-3.28/Modules/Compiler/OpenWatcom-DetermineCompiler.cmake" + "/usr/share/cmake-3.28/Modules/Compiler/OrangeC-DetermineCompiler.cmake" + "/usr/share/cmake-3.28/Modules/Compiler/PGI-DetermineCompiler.cmake" + "/usr/share/cmake-3.28/Modules/Compiler/PathScale-DetermineCompiler.cmake" + "/usr/share/cmake-3.28/Modules/Compiler/SCO-DetermineCompiler.cmake" + "/usr/share/cmake-3.28/Modules/Compiler/SDCC-C-DetermineCompiler.cmake" + "/usr/share/cmake-3.28/Modules/Compiler/SunPro-C-DetermineCompiler.cmake" + "/usr/share/cmake-3.28/Modules/Compiler/TI-DetermineCompiler.cmake" + "/usr/share/cmake-3.28/Modules/Compiler/Tasking-DetermineCompiler.cmake" + "/usr/share/cmake-3.28/Modules/Compiler/TinyCC-C-DetermineCompiler.cmake" + "/usr/share/cmake-3.28/Modules/Compiler/VisualAge-C-DetermineCompiler.cmake" + "/usr/share/cmake-3.28/Modules/Compiler/Watcom-DetermineCompiler.cmake" + "/usr/share/cmake-3.28/Modules/Compiler/XL-C-DetermineCompiler.cmake" + "/usr/share/cmake-3.28/Modules/Compiler/XLClang-C-DetermineCompiler.cmake" + "/usr/share/cmake-3.28/Modules/Compiler/zOS-C-DetermineCompiler.cmake" + "/usr/share/cmake-3.28/Modules/Internal/CheckSourceCompiles.cmake" + "/usr/share/cmake-3.28/Modules/Internal/FeatureTesting.cmake" + ) + +# The corresponding makefile is: +set(CMAKE_MAKEFILE_OUTPUTS + "Makefile" + "CMakeFiles/cmake.check_cache" + ) + +# Byproducts of CMake generate step: +set(CMAKE_MAKEFILE_PRODUCTS + "CMakeFiles/3.28.3/CMakeSystem.cmake" + "CMakeFiles/3.28.3/CMakeCCompiler.cmake" + "CMakeFiles/3.28.3/CMakeCCompiler.cmake" + "CMakeFiles/CheckTypeSize/OFF64_T.c" + "zlib.pc" + "zconf.h" + "CMakeFiles/CMakeDirectoryInformation.cmake" + ) + +# Dependency information for all targets: +set(CMAKE_DEPEND_INFO_FILES + "CMakeFiles/zlib.dir/DependInfo.cmake" + "CMakeFiles/zlibstatic.dir/DependInfo.cmake" + "CMakeFiles/example.dir/DependInfo.cmake" + "CMakeFiles/minigzip.dir/DependInfo.cmake" + "CMakeFiles/example64.dir/DependInfo.cmake" + "CMakeFiles/minigzip64.dir/DependInfo.cmake" + ) diff --git a/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/Makefile2 b/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/Makefile2 new file mode 100644 index 0000000..28feb42 --- /dev/null +++ b/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/Makefile2 @@ -0,0 +1,252 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.28 + +# Default target executed when no arguments are given to make. +default_target: all +.PHONY : default_target + +#============================================================================= +# Special targets provided by cmake. + +# Disable implicit rules so canonical targets will work. +.SUFFIXES: + +# Disable VCS-based implicit rules. +% : %,v + +# Disable VCS-based implicit rules. +% : RCS/% + +# Disable VCS-based implicit rules. +% : RCS/%,v + +# Disable VCS-based implicit rules. +% : SCCS/s.% + +# Disable VCS-based implicit rules. +% : s.% + +.SUFFIXES: .hpux_make_needs_suffix_list + +# Command-line flag to silence nested $(MAKE). +$(VERBOSE)MAKESILENT = -s + +#Suppress display of executed commands. +$(VERBOSE).SILENT: + +# A target that is always out of date. +cmake_force: +.PHONY : cmake_force + +#============================================================================= +# Set environment variables for the build. + +# The shell in which to execute make rules. +SHELL = /bin/sh + +# The CMake executable. +CMAKE_COMMAND = /usr/bin/cmake + +# The command to remove a file. +RM = /usr/bin/cmake -E rm -f + +# Escaping for special characters. +EQUALS = = + +# The top-level source directory on which CMake was run. +CMAKE_SOURCE_DIR = "/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1" + +# The top-level build directory on which CMake was run. +CMAKE_BINARY_DIR = "/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/build-emcmake" + +#============================================================================= +# Directory level rules for the build root directory + +# The main recursive "all" target. +all: CMakeFiles/zlib.dir/all +all: CMakeFiles/zlibstatic.dir/all +all: CMakeFiles/example.dir/all +all: CMakeFiles/minigzip.dir/all +all: CMakeFiles/example64.dir/all +all: CMakeFiles/minigzip64.dir/all +.PHONY : all + +# The main recursive "preinstall" target. +preinstall: +.PHONY : preinstall + +# The main recursive "clean" target. +clean: CMakeFiles/zlib.dir/clean +clean: CMakeFiles/zlibstatic.dir/clean +clean: CMakeFiles/example.dir/clean +clean: CMakeFiles/minigzip.dir/clean +clean: CMakeFiles/example64.dir/clean +clean: CMakeFiles/minigzip64.dir/clean +.PHONY : clean + +#============================================================================= +# Target rules for target CMakeFiles/zlib.dir + +# All Build rule for target. +CMakeFiles/zlib.dir/all: + $(MAKE) $(MAKESILENT) -f CMakeFiles/zlib.dir/build.make CMakeFiles/zlib.dir/depend + $(MAKE) $(MAKESILENT) -f CMakeFiles/zlib.dir/build.make CMakeFiles/zlib.dir/build + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles" --progress-num=9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24 "Built target zlib" +.PHONY : CMakeFiles/zlib.dir/all + +# Build rule for subdir invocation for target. +CMakeFiles/zlib.dir/rule: cmake_check_build_system + $(CMAKE_COMMAND) -E cmake_progress_start "/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles" 16 + $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 CMakeFiles/zlib.dir/all + $(CMAKE_COMMAND) -E cmake_progress_start "/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles" 0 +.PHONY : CMakeFiles/zlib.dir/rule + +# Convenience name for target. +zlib: CMakeFiles/zlib.dir/rule +.PHONY : zlib + +# clean rule for target. +CMakeFiles/zlib.dir/clean: + $(MAKE) $(MAKESILENT) -f CMakeFiles/zlib.dir/build.make CMakeFiles/zlib.dir/clean +.PHONY : CMakeFiles/zlib.dir/clean + +#============================================================================= +# Target rules for target CMakeFiles/zlibstatic.dir + +# All Build rule for target. +CMakeFiles/zlibstatic.dir/all: + $(MAKE) $(MAKESILENT) -f CMakeFiles/zlibstatic.dir/build.make CMakeFiles/zlibstatic.dir/depend + $(MAKE) $(MAKESILENT) -f CMakeFiles/zlibstatic.dir/build.make CMakeFiles/zlibstatic.dir/build + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles" --progress-num=25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40 "Built target zlibstatic" +.PHONY : CMakeFiles/zlibstatic.dir/all + +# Build rule for subdir invocation for target. +CMakeFiles/zlibstatic.dir/rule: cmake_check_build_system + $(CMAKE_COMMAND) -E cmake_progress_start "/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles" 16 + $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 CMakeFiles/zlibstatic.dir/all + $(CMAKE_COMMAND) -E cmake_progress_start "/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles" 0 +.PHONY : CMakeFiles/zlibstatic.dir/rule + +# Convenience name for target. +zlibstatic: CMakeFiles/zlibstatic.dir/rule +.PHONY : zlibstatic + +# clean rule for target. +CMakeFiles/zlibstatic.dir/clean: + $(MAKE) $(MAKESILENT) -f CMakeFiles/zlibstatic.dir/build.make CMakeFiles/zlibstatic.dir/clean +.PHONY : CMakeFiles/zlibstatic.dir/clean + +#============================================================================= +# Target rules for target CMakeFiles/example.dir + +# All Build rule for target. +CMakeFiles/example.dir/all: CMakeFiles/zlib.dir/all + $(MAKE) $(MAKESILENT) -f CMakeFiles/example.dir/build.make CMakeFiles/example.dir/depend + $(MAKE) $(MAKESILENT) -f CMakeFiles/example.dir/build.make CMakeFiles/example.dir/build + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles" --progress-num=1,2 "Built target example" +.PHONY : CMakeFiles/example.dir/all + +# Build rule for subdir invocation for target. +CMakeFiles/example.dir/rule: cmake_check_build_system + $(CMAKE_COMMAND) -E cmake_progress_start "/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles" 18 + $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 CMakeFiles/example.dir/all + $(CMAKE_COMMAND) -E cmake_progress_start "/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles" 0 +.PHONY : CMakeFiles/example.dir/rule + +# Convenience name for target. +example: CMakeFiles/example.dir/rule +.PHONY : example + +# clean rule for target. +CMakeFiles/example.dir/clean: + $(MAKE) $(MAKESILENT) -f CMakeFiles/example.dir/build.make CMakeFiles/example.dir/clean +.PHONY : CMakeFiles/example.dir/clean + +#============================================================================= +# Target rules for target CMakeFiles/minigzip.dir + +# All Build rule for target. +CMakeFiles/minigzip.dir/all: CMakeFiles/zlib.dir/all + $(MAKE) $(MAKESILENT) -f CMakeFiles/minigzip.dir/build.make CMakeFiles/minigzip.dir/depend + $(MAKE) $(MAKESILENT) -f CMakeFiles/minigzip.dir/build.make CMakeFiles/minigzip.dir/build + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles" --progress-num=5,6 "Built target minigzip" +.PHONY : CMakeFiles/minigzip.dir/all + +# Build rule for subdir invocation for target. +CMakeFiles/minigzip.dir/rule: cmake_check_build_system + $(CMAKE_COMMAND) -E cmake_progress_start "/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles" 18 + $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 CMakeFiles/minigzip.dir/all + $(CMAKE_COMMAND) -E cmake_progress_start "/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles" 0 +.PHONY : CMakeFiles/minigzip.dir/rule + +# Convenience name for target. +minigzip: CMakeFiles/minigzip.dir/rule +.PHONY : minigzip + +# clean rule for target. +CMakeFiles/minigzip.dir/clean: + $(MAKE) $(MAKESILENT) -f CMakeFiles/minigzip.dir/build.make CMakeFiles/minigzip.dir/clean +.PHONY : CMakeFiles/minigzip.dir/clean + +#============================================================================= +# Target rules for target CMakeFiles/example64.dir + +# All Build rule for target. +CMakeFiles/example64.dir/all: CMakeFiles/zlib.dir/all + $(MAKE) $(MAKESILENT) -f CMakeFiles/example64.dir/build.make CMakeFiles/example64.dir/depend + $(MAKE) $(MAKESILENT) -f CMakeFiles/example64.dir/build.make CMakeFiles/example64.dir/build + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles" --progress-num=3,4 "Built target example64" +.PHONY : CMakeFiles/example64.dir/all + +# Build rule for subdir invocation for target. +CMakeFiles/example64.dir/rule: cmake_check_build_system + $(CMAKE_COMMAND) -E cmake_progress_start "/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles" 18 + $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 CMakeFiles/example64.dir/all + $(CMAKE_COMMAND) -E cmake_progress_start "/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles" 0 +.PHONY : CMakeFiles/example64.dir/rule + +# Convenience name for target. +example64: CMakeFiles/example64.dir/rule +.PHONY : example64 + +# clean rule for target. +CMakeFiles/example64.dir/clean: + $(MAKE) $(MAKESILENT) -f CMakeFiles/example64.dir/build.make CMakeFiles/example64.dir/clean +.PHONY : CMakeFiles/example64.dir/clean + +#============================================================================= +# Target rules for target CMakeFiles/minigzip64.dir + +# All Build rule for target. +CMakeFiles/minigzip64.dir/all: CMakeFiles/zlib.dir/all + $(MAKE) $(MAKESILENT) -f CMakeFiles/minigzip64.dir/build.make CMakeFiles/minigzip64.dir/depend + $(MAKE) $(MAKESILENT) -f CMakeFiles/minigzip64.dir/build.make CMakeFiles/minigzip64.dir/build + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles" --progress-num=7,8 "Built target minigzip64" +.PHONY : CMakeFiles/minigzip64.dir/all + +# Build rule for subdir invocation for target. +CMakeFiles/minigzip64.dir/rule: cmake_check_build_system + $(CMAKE_COMMAND) -E cmake_progress_start "/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles" 18 + $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 CMakeFiles/minigzip64.dir/all + $(CMAKE_COMMAND) -E cmake_progress_start "/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles" 0 +.PHONY : CMakeFiles/minigzip64.dir/rule + +# Convenience name for target. +minigzip64: CMakeFiles/minigzip64.dir/rule +.PHONY : minigzip64 + +# clean rule for target. +CMakeFiles/minigzip64.dir/clean: + $(MAKE) $(MAKESILENT) -f CMakeFiles/minigzip64.dir/build.make CMakeFiles/minigzip64.dir/clean +.PHONY : CMakeFiles/minigzip64.dir/clean + +#============================================================================= +# Special targets to cleanup operation of make. + +# Special rule to run CMake to check the build system integrity. +# No rule that depends on this can have commands that come from listfiles +# because they might be regenerated. +cmake_check_build_system: + $(CMAKE_COMMAND) -S$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles/Makefile.cmake 0 +.PHONY : cmake_check_build_system + diff --git a/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/TargetDirectories.txt b/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/TargetDirectories.txt new file mode 100644 index 0000000..1aa2c94 --- /dev/null +++ b/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/TargetDirectories.txt @@ -0,0 +1,13 @@ +/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/zlib.dir +/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/zlibstatic.dir +/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/example.dir +/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/minigzip.dir +/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/example64.dir +/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/minigzip64.dir +/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/test.dir +/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/edit_cache.dir +/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/rebuild_cache.dir +/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/list_install_components.dir +/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/install.dir +/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/install/local.dir +/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/install/strip.dir diff --git a/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/cmake.check_cache b/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/cmake.check_cache new file mode 100644 index 0000000..3dccd73 --- /dev/null +++ b/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/cmake.check_cache @@ -0,0 +1 @@ +# This file is generated by cmake for dependency checking of the CMakeCache.txt file diff --git a/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/example.dir/DependInfo.cmake b/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/example.dir/DependInfo.cmake new file mode 100644 index 0000000..5169b13 --- /dev/null +++ b/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/example.dir/DependInfo.cmake @@ -0,0 +1,23 @@ + +# Consider dependencies only in project. +set(CMAKE_DEPENDS_IN_PROJECT_ONLY OFF) + +# The set of languages for which implicit dependencies are needed: +set(CMAKE_DEPENDS_LANGUAGES + ) + +# The set of dependency files which are needed: +set(CMAKE_DEPENDS_DEPENDENCY_FILES + "/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/test/example.c" "CMakeFiles/example.dir/test/example.c.o" "gcc" "CMakeFiles/example.dir/test/example.c.o.d" + ) + +# Targets to which this target links which contain Fortran sources. +set(CMAKE_Fortran_TARGET_LINKED_INFO_FILES + ) + +# Targets to which this target links which contain Fortran sources. +set(CMAKE_Fortran_TARGET_FORWARD_LINKED_INFO_FILES + ) + +# Fortran module output directory. +set(CMAKE_Fortran_TARGET_MODULE_DIR "") diff --git a/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/example.dir/build.make b/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/example.dir/build.make new file mode 100644 index 0000000..af9593d --- /dev/null +++ b/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/example.dir/build.make @@ -0,0 +1,114 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.28 + +# Delete rule output on recipe failure. +.DELETE_ON_ERROR: + +#============================================================================= +# Special targets provided by cmake. + +# Disable implicit rules so canonical targets will work. +.SUFFIXES: + +# Disable VCS-based implicit rules. +% : %,v + +# Disable VCS-based implicit rules. +% : RCS/% + +# Disable VCS-based implicit rules. +% : RCS/%,v + +# Disable VCS-based implicit rules. +% : SCCS/s.% + +# Disable VCS-based implicit rules. +% : s.% + +.SUFFIXES: .hpux_make_needs_suffix_list + +# Command-line flag to silence nested $(MAKE). +$(VERBOSE)MAKESILENT = -s + +#Suppress display of executed commands. +$(VERBOSE).SILENT: + +# A target that is always out of date. +cmake_force: +.PHONY : cmake_force + +#============================================================================= +# Set environment variables for the build. + +# The shell in which to execute make rules. +SHELL = /bin/sh + +# The CMake executable. +CMAKE_COMMAND = /usr/bin/cmake + +# The command to remove a file. +RM = /usr/bin/cmake -E rm -f + +# Escaping for special characters. +EQUALS = = + +# The top-level source directory on which CMake was run. +CMAKE_SOURCE_DIR = "/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1" + +# The top-level build directory on which CMake was run. +CMAKE_BINARY_DIR = "/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/build-emcmake" + +# Include any dependencies generated for this target. +include CMakeFiles/example.dir/depend.make +# Include any dependencies generated by the compiler for this target. +include CMakeFiles/example.dir/compiler_depend.make + +# Include the progress variables for this target. +include CMakeFiles/example.dir/progress.make + +# Include the compile flags for this target's objects. +include CMakeFiles/example.dir/flags.make + +CMakeFiles/example.dir/test/example.c.o: CMakeFiles/example.dir/flags.make +CMakeFiles/example.dir/test/example.c.o: CMakeFiles/example.dir/includes_C.rsp +CMakeFiles/example.dir/test/example.c.o: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/zlib-1.3.1/test/example.c +CMakeFiles/example.dir/test/example.c.o: CMakeFiles/example.dir/compiler_depend.ts + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_1) "Building C object CMakeFiles/example.dir/test/example.c.o" + "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -MD -MT CMakeFiles/example.dir/test/example.c.o -MF CMakeFiles/example.dir/test/example.c.o.d -o CMakeFiles/example.dir/test/example.c.o -c "/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/test/example.c" + +CMakeFiles/example.dir/test/example.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Preprocessing C source to CMakeFiles/example.dir/test/example.c.i" + "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E "/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/test/example.c" > CMakeFiles/example.dir/test/example.c.i + +CMakeFiles/example.dir/test/example.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Compiling C source to assembly CMakeFiles/example.dir/test/example.c.s" + "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S "/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/test/example.c" -o CMakeFiles/example.dir/test/example.c.s + +# Object files for target example +example_OBJECTS = \ +"CMakeFiles/example.dir/test/example.c.o" + +# External object files for target example +example_EXTERNAL_OBJECTS = + +example.js: CMakeFiles/example.dir/test/example.c.o +example.js: CMakeFiles/example.dir/build.make +example.js: libz.a +example.js: CMakeFiles/example.dir/linkLibs.rsp +example.js: CMakeFiles/example.dir/objects1.rsp +example.js: CMakeFiles/example.dir/link.txt + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_2) "Linking C executable example.js" + $(CMAKE_COMMAND) -E cmake_link_script CMakeFiles/example.dir/link.txt --verbose=$(VERBOSE) + +# Rule to build all files generated by this target. +CMakeFiles/example.dir/build: example.js +.PHONY : CMakeFiles/example.dir/build + +CMakeFiles/example.dir/clean: + $(CMAKE_COMMAND) -P CMakeFiles/example.dir/cmake_clean.cmake +.PHONY : CMakeFiles/example.dir/clean + +CMakeFiles/example.dir/depend: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/build-emcmake" && $(CMAKE_COMMAND) -E cmake_depends "Unix Makefiles" "/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1" "/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1" "/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/build-emcmake" "/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/build-emcmake" "/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/example.dir/DependInfo.cmake" "--color=$(COLOR)" +.PHONY : CMakeFiles/example.dir/depend + diff --git a/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/example.dir/cmake_clean.cmake b/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/example.dir/cmake_clean.cmake new file mode 100644 index 0000000..a2c3fb9 --- /dev/null +++ b/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/example.dir/cmake_clean.cmake @@ -0,0 +1,11 @@ +file(REMOVE_RECURSE + "CMakeFiles/example.dir/test/example.c.o" + "CMakeFiles/example.dir/test/example.c.o.d" + "example.js" + "example.pdb" +) + +# Per-language clean rules from dependency scanning. +foreach(lang C) + include(CMakeFiles/example.dir/cmake_clean_${lang}.cmake OPTIONAL) +endforeach() diff --git a/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/example.dir/compiler_depend.make b/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/example.dir/compiler_depend.make new file mode 100644 index 0000000..fd35cca --- /dev/null +++ b/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/example.dir/compiler_depend.make @@ -0,0 +1,2 @@ +# Empty compiler generated dependencies file for example. +# This may be replaced when dependencies are built. diff --git a/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/example.dir/compiler_depend.ts b/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/example.dir/compiler_depend.ts new file mode 100644 index 0000000..82206ab --- /dev/null +++ b/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/example.dir/compiler_depend.ts @@ -0,0 +1,2 @@ +# CMAKE generated file: DO NOT EDIT! +# Timestamp file for compiler generated dependencies management for example. diff --git a/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/example.dir/depend.make b/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/example.dir/depend.make new file mode 100644 index 0000000..1438e1c --- /dev/null +++ b/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/example.dir/depend.make @@ -0,0 +1,2 @@ +# Empty dependencies file for example. +# This may be replaced when dependencies are built. diff --git a/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/example.dir/flags.make b/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/example.dir/flags.make new file mode 100644 index 0000000..12d1e75 --- /dev/null +++ b/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/example.dir/flags.make @@ -0,0 +1,10 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.28 + +# compile C with /home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc +C_DEFINES = -D_LARGEFILE64_SOURCE=1 + +C_INCLUDES = @CMakeFiles/example.dir/includes_C.rsp + +C_FLAGS = + diff --git a/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/example.dir/link.txt b/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/example.dir/link.txt new file mode 100644 index 0000000..661d5f0 --- /dev/null +++ b/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/example.dir/link.txt @@ -0,0 +1 @@ +"/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" @CMakeFiles/example.dir/objects1.rsp -o example.js @CMakeFiles/example.dir/linkLibs.rsp diff --git a/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/example.dir/progress.make b/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/example.dir/progress.make new file mode 100644 index 0000000..abadeb0 --- /dev/null +++ b/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/example.dir/progress.make @@ -0,0 +1,3 @@ +CMAKE_PROGRESS_1 = 1 +CMAKE_PROGRESS_2 = 2 + diff --git a/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/example.dir/test/example.c.o b/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/example.dir/test/example.c.o new file mode 100644 index 0000000000000000000000000000000000000000..b08f41f94d040eef65a4587a9aceea2d069d9c72 GIT binary patch literal 18191 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 CMakeFiles/example64.dir/test/example.c.i + +CMakeFiles/example64.dir/test/example.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Compiling C source to assembly CMakeFiles/example64.dir/test/example.c.s" + "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S "/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/test/example.c" -o CMakeFiles/example64.dir/test/example.c.s + +# Object files for target example64 +example64_OBJECTS = \ +"CMakeFiles/example64.dir/test/example.c.o" + +# External object files for target example64 +example64_EXTERNAL_OBJECTS = + +example64.js: CMakeFiles/example64.dir/test/example.c.o +example64.js: CMakeFiles/example64.dir/build.make +example64.js: libz.a +example64.js: CMakeFiles/example64.dir/linkLibs.rsp +example64.js: CMakeFiles/example64.dir/objects1.rsp +example64.js: CMakeFiles/example64.dir/link.txt + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_2) "Linking C executable example64.js" + $(CMAKE_COMMAND) -E cmake_link_script CMakeFiles/example64.dir/link.txt --verbose=$(VERBOSE) + +# Rule to build all files generated by this target. +CMakeFiles/example64.dir/build: example64.js +.PHONY : CMakeFiles/example64.dir/build + +CMakeFiles/example64.dir/clean: + $(CMAKE_COMMAND) -P CMakeFiles/example64.dir/cmake_clean.cmake +.PHONY : CMakeFiles/example64.dir/clean + +CMakeFiles/example64.dir/depend: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/build-emcmake" && $(CMAKE_COMMAND) -E cmake_depends "Unix Makefiles" "/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1" "/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1" "/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/build-emcmake" "/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/build-emcmake" "/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/example64.dir/DependInfo.cmake" "--color=$(COLOR)" +.PHONY : CMakeFiles/example64.dir/depend + diff --git a/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/example64.dir/cmake_clean.cmake b/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/example64.dir/cmake_clean.cmake new file mode 100644 index 0000000..ae37821 --- /dev/null +++ b/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/example64.dir/cmake_clean.cmake @@ -0,0 +1,11 @@ +file(REMOVE_RECURSE + "CMakeFiles/example64.dir/test/example.c.o" + "CMakeFiles/example64.dir/test/example.c.o.d" + "example64.js" + "example64.pdb" +) + +# Per-language clean rules from dependency scanning. +foreach(lang C) + include(CMakeFiles/example64.dir/cmake_clean_${lang}.cmake OPTIONAL) +endforeach() diff --git a/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/example64.dir/compiler_depend.make b/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/example64.dir/compiler_depend.make new file mode 100644 index 0000000..21f3861 --- /dev/null +++ b/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/example64.dir/compiler_depend.make @@ -0,0 +1,2 @@ +# Empty compiler generated dependencies file for example64. +# This may be replaced when dependencies are built. diff --git a/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/example64.dir/compiler_depend.ts b/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/example64.dir/compiler_depend.ts new file mode 100644 index 0000000..b93c6d4 --- /dev/null +++ b/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/example64.dir/compiler_depend.ts @@ -0,0 +1,2 @@ +# CMAKE generated file: DO NOT EDIT! +# Timestamp file for compiler generated dependencies management for example64. diff --git a/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/example64.dir/depend.make b/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/example64.dir/depend.make new file mode 100644 index 0000000..52d2998 --- /dev/null +++ b/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/example64.dir/depend.make @@ -0,0 +1,2 @@ +# Empty dependencies file for example64. +# This may be replaced when dependencies are built. diff --git a/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/example64.dir/flags.make b/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/example64.dir/flags.make new file mode 100644 index 0000000..65cbf62 --- /dev/null +++ b/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/example64.dir/flags.make @@ -0,0 +1,10 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.28 + +# compile C with /home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc +C_DEFINES = -D_LARGEFILE64_SOURCE=1 + +C_INCLUDES = @CMakeFiles/example64.dir/includes_C.rsp + +C_FLAGS = -D_FILE_OFFSET_BITS=64 + diff --git a/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/example64.dir/link.txt b/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/example64.dir/link.txt new file mode 100644 index 0000000..f5ce726 --- /dev/null +++ b/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/example64.dir/link.txt @@ -0,0 +1 @@ +"/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" @CMakeFiles/example64.dir/objects1.rsp -o example64.js @CMakeFiles/example64.dir/linkLibs.rsp diff --git a/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/example64.dir/progress.make b/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/example64.dir/progress.make new file mode 100644 index 0000000..8c8fb6f --- /dev/null +++ b/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/example64.dir/progress.make @@ -0,0 +1,3 @@ +CMAKE_PROGRESS_1 = 3 +CMAKE_PROGRESS_2 = 4 + diff --git a/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/example64.dir/test/example.c.o b/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/example64.dir/test/example.c.o new file mode 100644 index 0000000000000000000000000000000000000000..b08f41f94d040eef65a4587a9aceea2d069d9c72 GIT binary patch literal 18191 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 CMakeFiles/minigzip.dir/test/minigzip.c.i + +CMakeFiles/minigzip.dir/test/minigzip.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Compiling C source to assembly CMakeFiles/minigzip.dir/test/minigzip.c.s" + "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S "/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/test/minigzip.c" -o CMakeFiles/minigzip.dir/test/minigzip.c.s + +# Object files for target minigzip +minigzip_OBJECTS = \ +"CMakeFiles/minigzip.dir/test/minigzip.c.o" + +# External object files for target minigzip +minigzip_EXTERNAL_OBJECTS = + +minigzip.js: CMakeFiles/minigzip.dir/test/minigzip.c.o +minigzip.js: CMakeFiles/minigzip.dir/build.make +minigzip.js: libz.a +minigzip.js: CMakeFiles/minigzip.dir/linkLibs.rsp +minigzip.js: CMakeFiles/minigzip.dir/objects1.rsp +minigzip.js: CMakeFiles/minigzip.dir/link.txt + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_2) "Linking C executable minigzip.js" + $(CMAKE_COMMAND) -E cmake_link_script CMakeFiles/minigzip.dir/link.txt --verbose=$(VERBOSE) + +# Rule to build all files generated by this target. +CMakeFiles/minigzip.dir/build: minigzip.js +.PHONY : CMakeFiles/minigzip.dir/build + +CMakeFiles/minigzip.dir/clean: + $(CMAKE_COMMAND) -P CMakeFiles/minigzip.dir/cmake_clean.cmake +.PHONY : CMakeFiles/minigzip.dir/clean + +CMakeFiles/minigzip.dir/depend: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/build-emcmake" && $(CMAKE_COMMAND) -E cmake_depends "Unix Makefiles" "/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1" "/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1" "/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/build-emcmake" "/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/build-emcmake" "/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/minigzip.dir/DependInfo.cmake" "--color=$(COLOR)" +.PHONY : CMakeFiles/minigzip.dir/depend + diff --git a/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/minigzip.dir/cmake_clean.cmake b/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/minigzip.dir/cmake_clean.cmake new file mode 100644 index 0000000..3a0a10e --- /dev/null +++ b/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/minigzip.dir/cmake_clean.cmake @@ -0,0 +1,11 @@ +file(REMOVE_RECURSE + "CMakeFiles/minigzip.dir/test/minigzip.c.o" + "CMakeFiles/minigzip.dir/test/minigzip.c.o.d" + "minigzip.js" + "minigzip.pdb" +) + +# Per-language clean rules from dependency scanning. +foreach(lang C) + include(CMakeFiles/minigzip.dir/cmake_clean_${lang}.cmake OPTIONAL) +endforeach() diff --git a/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/minigzip.dir/compiler_depend.make b/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/minigzip.dir/compiler_depend.make new file mode 100644 index 0000000..50a75e9 --- /dev/null +++ b/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/minigzip.dir/compiler_depend.make @@ -0,0 +1,2 @@ +# Empty compiler generated dependencies file for minigzip. +# This may be replaced when dependencies are built. diff --git a/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/minigzip.dir/compiler_depend.ts b/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/minigzip.dir/compiler_depend.ts new file mode 100644 index 0000000..2658061 --- /dev/null +++ b/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/minigzip.dir/compiler_depend.ts @@ -0,0 +1,2 @@ +# CMAKE generated file: DO NOT EDIT! +# Timestamp file for compiler generated dependencies management for minigzip. diff --git a/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/minigzip.dir/depend.make b/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/minigzip.dir/depend.make new file mode 100644 index 0000000..20bd48b --- /dev/null +++ b/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/minigzip.dir/depend.make @@ -0,0 +1,2 @@ +# Empty dependencies file for minigzip. +# This may be replaced when dependencies are built. diff --git a/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/minigzip.dir/flags.make b/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/minigzip.dir/flags.make new file mode 100644 index 0000000..52ab368 --- /dev/null +++ b/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/minigzip.dir/flags.make @@ -0,0 +1,10 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.28 + +# compile C with /home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc +C_DEFINES = -D_LARGEFILE64_SOURCE=1 + +C_INCLUDES = @CMakeFiles/minigzip.dir/includes_C.rsp + +C_FLAGS = + diff --git a/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/minigzip.dir/link.txt b/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/minigzip.dir/link.txt new file mode 100644 index 0000000..d2846b7 --- /dev/null +++ b/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/minigzip.dir/link.txt @@ -0,0 +1 @@ +"/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" @CMakeFiles/minigzip.dir/objects1.rsp -o minigzip.js @CMakeFiles/minigzip.dir/linkLibs.rsp diff --git a/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/minigzip.dir/progress.make b/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/minigzip.dir/progress.make new file mode 100644 index 0000000..3a86673 --- /dev/null +++ b/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/minigzip.dir/progress.make @@ -0,0 +1,3 @@ +CMAKE_PROGRESS_1 = 5 +CMAKE_PROGRESS_2 = 6 + diff --git a/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/minigzip.dir/test/minigzip.c.o b/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/minigzip.dir/test/minigzip.c.o new file mode 100644 index 0000000000000000000000000000000000000000..a643f3fcba638170c676dba7f05ae1febe17d8d2 GIT binary patch literal 7450 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 literal 0 HcmV?d00001 diff --git a/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/minigzip.dir/test/minigzip.c.o.d b/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/minigzip.dir/test/minigzip.c.o.d new file mode 100644 index 0000000..f1f7ed3 --- /dev/null +++ b/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/minigzip.dir/test/minigzip.c.o.d @@ -0,0 +1,43 @@ +CMakeFiles/minigzip.dir/test/minigzip.c.o: \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/zlib-1.3.1/test/minigzip.c \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/zlib-1.3.1/zlib.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/zlib-1.3.1/build-emcmake/zconf.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stddef.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stddef.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_header_macro.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_ptrdiff_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_size_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_wchar_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_null.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_max_align_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_offsetof.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/limits.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/limits.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/features.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/alltypes.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/limits.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/sys/types.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/endian.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/sys/select.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/stdarg.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stdarg.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdarg.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stdarg_header_macro.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stdarg___gnuc_va_list.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stdarg_va_list.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stdarg_va_arg.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stdarg___va_copy.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stdarg_va_copy.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/unistd.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/wasi/api.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stdint.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdint.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/stdint.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/posix.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdio.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/string.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/string.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/strings.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/stdlib.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdlib.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/alloca.h diff --git a/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/minigzip64.dir/DependInfo.cmake b/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/minigzip64.dir/DependInfo.cmake new file mode 100644 index 0000000..d696e1a --- /dev/null +++ b/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/minigzip64.dir/DependInfo.cmake @@ -0,0 +1,23 @@ + +# Consider dependencies only in project. +set(CMAKE_DEPENDS_IN_PROJECT_ONLY OFF) + +# The set of languages for which implicit dependencies are needed: +set(CMAKE_DEPENDS_LANGUAGES + ) + +# The set of dependency files which are needed: +set(CMAKE_DEPENDS_DEPENDENCY_FILES + "/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/test/minigzip.c" "CMakeFiles/minigzip64.dir/test/minigzip.c.o" "gcc" "CMakeFiles/minigzip64.dir/test/minigzip.c.o.d" + ) + +# Targets to which this target links which contain Fortran sources. +set(CMAKE_Fortran_TARGET_LINKED_INFO_FILES + ) + +# Targets to which this target links which contain Fortran sources. +set(CMAKE_Fortran_TARGET_FORWARD_LINKED_INFO_FILES + ) + +# Fortran module output directory. +set(CMAKE_Fortran_TARGET_MODULE_DIR "") diff --git a/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/minigzip64.dir/build.make b/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/minigzip64.dir/build.make new file mode 100644 index 0000000..8f05b9e --- /dev/null +++ b/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/minigzip64.dir/build.make @@ -0,0 +1,114 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.28 + +# Delete rule output on recipe failure. +.DELETE_ON_ERROR: + +#============================================================================= +# Special targets provided by cmake. + +# Disable implicit rules so canonical targets will work. +.SUFFIXES: + +# Disable VCS-based implicit rules. +% : %,v + +# Disable VCS-based implicit rules. +% : RCS/% + +# Disable VCS-based implicit rules. +% : RCS/%,v + +# Disable VCS-based implicit rules. +% : SCCS/s.% + +# Disable VCS-based implicit rules. +% : s.% + +.SUFFIXES: .hpux_make_needs_suffix_list + +# Command-line flag to silence nested $(MAKE). +$(VERBOSE)MAKESILENT = -s + +#Suppress display of executed commands. +$(VERBOSE).SILENT: + +# A target that is always out of date. +cmake_force: +.PHONY : cmake_force + +#============================================================================= +# Set environment variables for the build. + +# The shell in which to execute make rules. +SHELL = /bin/sh + +# The CMake executable. +CMAKE_COMMAND = /usr/bin/cmake + +# The command to remove a file. +RM = /usr/bin/cmake -E rm -f + +# Escaping for special characters. +EQUALS = = + +# The top-level source directory on which CMake was run. +CMAKE_SOURCE_DIR = "/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1" + +# The top-level build directory on which CMake was run. +CMAKE_BINARY_DIR = "/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/build-emcmake" + +# Include any dependencies generated for this target. +include CMakeFiles/minigzip64.dir/depend.make +# Include any dependencies generated by the compiler for this target. +include CMakeFiles/minigzip64.dir/compiler_depend.make + +# Include the progress variables for this target. +include CMakeFiles/minigzip64.dir/progress.make + +# Include the compile flags for this target's objects. +include CMakeFiles/minigzip64.dir/flags.make + +CMakeFiles/minigzip64.dir/test/minigzip.c.o: CMakeFiles/minigzip64.dir/flags.make +CMakeFiles/minigzip64.dir/test/minigzip.c.o: CMakeFiles/minigzip64.dir/includes_C.rsp +CMakeFiles/minigzip64.dir/test/minigzip.c.o: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/zlib-1.3.1/test/minigzip.c +CMakeFiles/minigzip64.dir/test/minigzip.c.o: CMakeFiles/minigzip64.dir/compiler_depend.ts + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_1) "Building C object CMakeFiles/minigzip64.dir/test/minigzip.c.o" + "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -MD -MT CMakeFiles/minigzip64.dir/test/minigzip.c.o -MF CMakeFiles/minigzip64.dir/test/minigzip.c.o.d -o CMakeFiles/minigzip64.dir/test/minigzip.c.o -c "/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/test/minigzip.c" + +CMakeFiles/minigzip64.dir/test/minigzip.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Preprocessing C source to CMakeFiles/minigzip64.dir/test/minigzip.c.i" + "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E "/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/test/minigzip.c" > CMakeFiles/minigzip64.dir/test/minigzip.c.i + +CMakeFiles/minigzip64.dir/test/minigzip.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Compiling C source to assembly CMakeFiles/minigzip64.dir/test/minigzip.c.s" + "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S "/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/test/minigzip.c" -o CMakeFiles/minigzip64.dir/test/minigzip.c.s + +# Object files for target minigzip64 +minigzip64_OBJECTS = \ +"CMakeFiles/minigzip64.dir/test/minigzip.c.o" + +# External object files for target minigzip64 +minigzip64_EXTERNAL_OBJECTS = + +minigzip64.js: CMakeFiles/minigzip64.dir/test/minigzip.c.o +minigzip64.js: CMakeFiles/minigzip64.dir/build.make +minigzip64.js: libz.a +minigzip64.js: CMakeFiles/minigzip64.dir/linkLibs.rsp +minigzip64.js: CMakeFiles/minigzip64.dir/objects1.rsp +minigzip64.js: CMakeFiles/minigzip64.dir/link.txt + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_2) "Linking C executable minigzip64.js" + $(CMAKE_COMMAND) -E cmake_link_script CMakeFiles/minigzip64.dir/link.txt --verbose=$(VERBOSE) + +# Rule to build all files generated by this target. +CMakeFiles/minigzip64.dir/build: minigzip64.js +.PHONY : CMakeFiles/minigzip64.dir/build + +CMakeFiles/minigzip64.dir/clean: + $(CMAKE_COMMAND) -P CMakeFiles/minigzip64.dir/cmake_clean.cmake +.PHONY : CMakeFiles/minigzip64.dir/clean + +CMakeFiles/minigzip64.dir/depend: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/build-emcmake" && $(CMAKE_COMMAND) -E cmake_depends "Unix Makefiles" "/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1" "/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1" "/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/build-emcmake" "/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/build-emcmake" "/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/minigzip64.dir/DependInfo.cmake" "--color=$(COLOR)" +.PHONY : CMakeFiles/minigzip64.dir/depend + diff --git a/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/minigzip64.dir/cmake_clean.cmake b/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/minigzip64.dir/cmake_clean.cmake new file mode 100644 index 0000000..f0bd5a6 --- /dev/null +++ b/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/minigzip64.dir/cmake_clean.cmake @@ -0,0 +1,11 @@ +file(REMOVE_RECURSE + "CMakeFiles/minigzip64.dir/test/minigzip.c.o" + "CMakeFiles/minigzip64.dir/test/minigzip.c.o.d" + "minigzip64.js" + "minigzip64.pdb" +) + +# Per-language clean rules from dependency scanning. +foreach(lang C) + include(CMakeFiles/minigzip64.dir/cmake_clean_${lang}.cmake OPTIONAL) +endforeach() diff --git a/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/minigzip64.dir/compiler_depend.make b/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/minigzip64.dir/compiler_depend.make new file mode 100644 index 0000000..e11832c --- /dev/null +++ b/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/minigzip64.dir/compiler_depend.make @@ -0,0 +1,2 @@ +# Empty compiler generated dependencies file for minigzip64. +# This may be replaced when dependencies are built. diff --git a/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/minigzip64.dir/compiler_depend.ts b/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/minigzip64.dir/compiler_depend.ts new file mode 100644 index 0000000..63feb04 --- /dev/null +++ b/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/minigzip64.dir/compiler_depend.ts @@ -0,0 +1,2 @@ +# CMAKE generated file: DO NOT EDIT! +# Timestamp file for compiler generated dependencies management for minigzip64. diff --git a/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/minigzip64.dir/depend.make b/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/minigzip64.dir/depend.make new file mode 100644 index 0000000..2e43ae6 --- /dev/null +++ b/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/minigzip64.dir/depend.make @@ -0,0 +1,2 @@ +# Empty dependencies file for minigzip64. +# This may be replaced when dependencies are built. diff --git a/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/minigzip64.dir/flags.make b/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/minigzip64.dir/flags.make new file mode 100644 index 0000000..da2d754 --- /dev/null +++ b/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/minigzip64.dir/flags.make @@ -0,0 +1,10 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.28 + +# compile C with /home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc +C_DEFINES = -D_LARGEFILE64_SOURCE=1 + +C_INCLUDES = @CMakeFiles/minigzip64.dir/includes_C.rsp + +C_FLAGS = -D_FILE_OFFSET_BITS=64 + diff --git a/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/minigzip64.dir/link.txt b/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/minigzip64.dir/link.txt new file mode 100644 index 0000000..478e3f9 --- /dev/null +++ b/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/minigzip64.dir/link.txt @@ -0,0 +1 @@ +"/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" @CMakeFiles/minigzip64.dir/objects1.rsp -o minigzip64.js @CMakeFiles/minigzip64.dir/linkLibs.rsp diff --git a/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/minigzip64.dir/progress.make b/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/minigzip64.dir/progress.make new file mode 100644 index 0000000..72bb7dd --- /dev/null +++ b/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/minigzip64.dir/progress.make @@ -0,0 +1,3 @@ +CMAKE_PROGRESS_1 = 7 +CMAKE_PROGRESS_2 = 8 + diff --git a/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/minigzip64.dir/test/minigzip.c.o b/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/minigzip64.dir/test/minigzip.c.o new file mode 100644 index 0000000000000000000000000000000000000000..a643f3fcba638170c676dba7f05ae1febe17d8d2 GIT binary patch literal 7450 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 literal 0 HcmV?d00001 diff --git a/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/minigzip64.dir/test/minigzip.c.o.d b/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/minigzip64.dir/test/minigzip.c.o.d new file mode 100644 index 0000000..fa60b51 --- /dev/null +++ b/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/minigzip64.dir/test/minigzip.c.o.d @@ -0,0 +1,43 @@ +CMakeFiles/minigzip64.dir/test/minigzip.c.o: \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/zlib-1.3.1/test/minigzip.c \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/zlib-1.3.1/zlib.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/zlib-1.3.1/build-emcmake/zconf.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stddef.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stddef.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_header_macro.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_ptrdiff_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_size_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_wchar_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_null.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_max_align_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_offsetof.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/limits.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/limits.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/features.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/alltypes.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/limits.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/sys/types.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/endian.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/sys/select.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/stdarg.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stdarg.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdarg.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stdarg_header_macro.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stdarg___gnuc_va_list.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stdarg_va_list.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stdarg_va_arg.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stdarg___va_copy.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stdarg_va_copy.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/unistd.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/wasi/api.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stdint.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdint.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/stdint.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/posix.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdio.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/string.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/string.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/strings.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/stdlib.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdlib.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/alloca.h diff --git a/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/progress.marks b/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/progress.marks new file mode 100644 index 0000000..425151f --- /dev/null +++ b/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/progress.marks @@ -0,0 +1 @@ +40 diff --git a/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/zlib.dir/DependInfo.cmake b/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/zlib.dir/DependInfo.cmake new file mode 100644 index 0000000..23fef94 --- /dev/null +++ b/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/zlib.dir/DependInfo.cmake @@ -0,0 +1,37 @@ + +# Consider dependencies only in project. +set(CMAKE_DEPENDS_IN_PROJECT_ONLY OFF) + +# The set of languages for which implicit dependencies are needed: +set(CMAKE_DEPENDS_LANGUAGES + ) + +# The set of dependency files which are needed: +set(CMAKE_DEPENDS_DEPENDENCY_FILES + "/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/adler32.c" "CMakeFiles/zlib.dir/adler32.c.o" "gcc" "CMakeFiles/zlib.dir/adler32.c.o.d" + "/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/compress.c" "CMakeFiles/zlib.dir/compress.c.o" "gcc" "CMakeFiles/zlib.dir/compress.c.o.d" + "/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/crc32.c" "CMakeFiles/zlib.dir/crc32.c.o" "gcc" "CMakeFiles/zlib.dir/crc32.c.o.d" + "/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/deflate.c" "CMakeFiles/zlib.dir/deflate.c.o" "gcc" "CMakeFiles/zlib.dir/deflate.c.o.d" + "/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/gzclose.c" "CMakeFiles/zlib.dir/gzclose.c.o" "gcc" "CMakeFiles/zlib.dir/gzclose.c.o.d" + "/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/gzlib.c" "CMakeFiles/zlib.dir/gzlib.c.o" "gcc" "CMakeFiles/zlib.dir/gzlib.c.o.d" + "/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/gzread.c" "CMakeFiles/zlib.dir/gzread.c.o" "gcc" "CMakeFiles/zlib.dir/gzread.c.o.d" + "/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/gzwrite.c" "CMakeFiles/zlib.dir/gzwrite.c.o" "gcc" "CMakeFiles/zlib.dir/gzwrite.c.o.d" + "/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/infback.c" "CMakeFiles/zlib.dir/infback.c.o" "gcc" "CMakeFiles/zlib.dir/infback.c.o.d" + "/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/inffast.c" "CMakeFiles/zlib.dir/inffast.c.o" "gcc" "CMakeFiles/zlib.dir/inffast.c.o.d" + "/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/inflate.c" "CMakeFiles/zlib.dir/inflate.c.o" "gcc" "CMakeFiles/zlib.dir/inflate.c.o.d" + "/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/inftrees.c" "CMakeFiles/zlib.dir/inftrees.c.o" "gcc" "CMakeFiles/zlib.dir/inftrees.c.o.d" + "/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/trees.c" "CMakeFiles/zlib.dir/trees.c.o" "gcc" "CMakeFiles/zlib.dir/trees.c.o.d" + "/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/uncompr.c" "CMakeFiles/zlib.dir/uncompr.c.o" "gcc" "CMakeFiles/zlib.dir/uncompr.c.o.d" + "/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/zutil.c" "CMakeFiles/zlib.dir/zutil.c.o" "gcc" "CMakeFiles/zlib.dir/zutil.c.o.d" + ) + +# Targets to which this target links which contain Fortran sources. +set(CMAKE_Fortran_TARGET_LINKED_INFO_FILES + ) + +# Targets to which this target links which contain Fortran sources. +set(CMAKE_Fortran_TARGET_FORWARD_LINKED_INFO_FILES + ) + +# Fortran module output directory. +set(CMAKE_Fortran_TARGET_MODULE_DIR "") diff --git a/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/zlib.dir/adler32.c.o b/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/zlib.dir/adler32.c.o new file mode 100644 index 0000000000000000000000000000000000000000..14ac6030cf380bb6f0822062a69defa91c784963 GIT binary patch literal 5938 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 CMakeFiles/zlib.dir/adler32.c.i + +CMakeFiles/zlib.dir/adler32.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Compiling C source to assembly CMakeFiles/zlib.dir/adler32.c.s" + "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S "/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/adler32.c" -o CMakeFiles/zlib.dir/adler32.c.s + +CMakeFiles/zlib.dir/compress.c.o: CMakeFiles/zlib.dir/flags.make +CMakeFiles/zlib.dir/compress.c.o: CMakeFiles/zlib.dir/includes_C.rsp +CMakeFiles/zlib.dir/compress.c.o: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/zlib-1.3.1/compress.c +CMakeFiles/zlib.dir/compress.c.o: CMakeFiles/zlib.dir/compiler_depend.ts + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_2) "Building C object CMakeFiles/zlib.dir/compress.c.o" + "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -MD -MT CMakeFiles/zlib.dir/compress.c.o -MF CMakeFiles/zlib.dir/compress.c.o.d -o CMakeFiles/zlib.dir/compress.c.o -c "/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/compress.c" + +CMakeFiles/zlib.dir/compress.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Preprocessing C source to CMakeFiles/zlib.dir/compress.c.i" + "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E "/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/compress.c" > CMakeFiles/zlib.dir/compress.c.i + +CMakeFiles/zlib.dir/compress.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Compiling C source to assembly CMakeFiles/zlib.dir/compress.c.s" + "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S "/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/compress.c" -o CMakeFiles/zlib.dir/compress.c.s + +CMakeFiles/zlib.dir/crc32.c.o: CMakeFiles/zlib.dir/flags.make +CMakeFiles/zlib.dir/crc32.c.o: CMakeFiles/zlib.dir/includes_C.rsp +CMakeFiles/zlib.dir/crc32.c.o: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/zlib-1.3.1/crc32.c +CMakeFiles/zlib.dir/crc32.c.o: CMakeFiles/zlib.dir/compiler_depend.ts + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_3) "Building C object CMakeFiles/zlib.dir/crc32.c.o" + "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -MD -MT CMakeFiles/zlib.dir/crc32.c.o -MF CMakeFiles/zlib.dir/crc32.c.o.d -o CMakeFiles/zlib.dir/crc32.c.o -c "/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/crc32.c" + +CMakeFiles/zlib.dir/crc32.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Preprocessing C source to CMakeFiles/zlib.dir/crc32.c.i" + "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E "/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/crc32.c" > CMakeFiles/zlib.dir/crc32.c.i + +CMakeFiles/zlib.dir/crc32.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Compiling C source to assembly CMakeFiles/zlib.dir/crc32.c.s" + "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S "/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/crc32.c" -o CMakeFiles/zlib.dir/crc32.c.s + +CMakeFiles/zlib.dir/deflate.c.o: CMakeFiles/zlib.dir/flags.make +CMakeFiles/zlib.dir/deflate.c.o: CMakeFiles/zlib.dir/includes_C.rsp +CMakeFiles/zlib.dir/deflate.c.o: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/zlib-1.3.1/deflate.c +CMakeFiles/zlib.dir/deflate.c.o: CMakeFiles/zlib.dir/compiler_depend.ts + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_4) "Building C object CMakeFiles/zlib.dir/deflate.c.o" + "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -MD -MT CMakeFiles/zlib.dir/deflate.c.o -MF CMakeFiles/zlib.dir/deflate.c.o.d -o CMakeFiles/zlib.dir/deflate.c.o -c "/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/deflate.c" + +CMakeFiles/zlib.dir/deflate.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Preprocessing C source to CMakeFiles/zlib.dir/deflate.c.i" + "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E "/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/deflate.c" > CMakeFiles/zlib.dir/deflate.c.i + +CMakeFiles/zlib.dir/deflate.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Compiling C source to assembly CMakeFiles/zlib.dir/deflate.c.s" + "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S "/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/deflate.c" -o CMakeFiles/zlib.dir/deflate.c.s + +CMakeFiles/zlib.dir/gzclose.c.o: CMakeFiles/zlib.dir/flags.make +CMakeFiles/zlib.dir/gzclose.c.o: CMakeFiles/zlib.dir/includes_C.rsp +CMakeFiles/zlib.dir/gzclose.c.o: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/zlib-1.3.1/gzclose.c +CMakeFiles/zlib.dir/gzclose.c.o: CMakeFiles/zlib.dir/compiler_depend.ts + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_5) "Building C object CMakeFiles/zlib.dir/gzclose.c.o" + "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -MD -MT CMakeFiles/zlib.dir/gzclose.c.o -MF CMakeFiles/zlib.dir/gzclose.c.o.d -o CMakeFiles/zlib.dir/gzclose.c.o -c "/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/gzclose.c" + +CMakeFiles/zlib.dir/gzclose.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Preprocessing C source to CMakeFiles/zlib.dir/gzclose.c.i" + "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E "/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/gzclose.c" > CMakeFiles/zlib.dir/gzclose.c.i + +CMakeFiles/zlib.dir/gzclose.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Compiling C source to assembly CMakeFiles/zlib.dir/gzclose.c.s" + "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S "/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/gzclose.c" -o CMakeFiles/zlib.dir/gzclose.c.s + +CMakeFiles/zlib.dir/gzlib.c.o: CMakeFiles/zlib.dir/flags.make +CMakeFiles/zlib.dir/gzlib.c.o: CMakeFiles/zlib.dir/includes_C.rsp +CMakeFiles/zlib.dir/gzlib.c.o: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/zlib-1.3.1/gzlib.c +CMakeFiles/zlib.dir/gzlib.c.o: CMakeFiles/zlib.dir/compiler_depend.ts + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_6) "Building C object CMakeFiles/zlib.dir/gzlib.c.o" + "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -MD -MT CMakeFiles/zlib.dir/gzlib.c.o -MF CMakeFiles/zlib.dir/gzlib.c.o.d -o CMakeFiles/zlib.dir/gzlib.c.o -c "/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/gzlib.c" + +CMakeFiles/zlib.dir/gzlib.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Preprocessing C source to CMakeFiles/zlib.dir/gzlib.c.i" + "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E "/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/gzlib.c" > CMakeFiles/zlib.dir/gzlib.c.i + +CMakeFiles/zlib.dir/gzlib.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Compiling C source to assembly CMakeFiles/zlib.dir/gzlib.c.s" + "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S "/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/gzlib.c" -o CMakeFiles/zlib.dir/gzlib.c.s + +CMakeFiles/zlib.dir/gzread.c.o: CMakeFiles/zlib.dir/flags.make +CMakeFiles/zlib.dir/gzread.c.o: CMakeFiles/zlib.dir/includes_C.rsp +CMakeFiles/zlib.dir/gzread.c.o: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/zlib-1.3.1/gzread.c +CMakeFiles/zlib.dir/gzread.c.o: CMakeFiles/zlib.dir/compiler_depend.ts + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_7) "Building C object CMakeFiles/zlib.dir/gzread.c.o" + "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -MD -MT CMakeFiles/zlib.dir/gzread.c.o -MF CMakeFiles/zlib.dir/gzread.c.o.d -o CMakeFiles/zlib.dir/gzread.c.o -c "/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/gzread.c" + +CMakeFiles/zlib.dir/gzread.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Preprocessing C source to CMakeFiles/zlib.dir/gzread.c.i" + "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E "/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/gzread.c" > CMakeFiles/zlib.dir/gzread.c.i + +CMakeFiles/zlib.dir/gzread.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Compiling C source to assembly CMakeFiles/zlib.dir/gzread.c.s" + "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S "/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/gzread.c" -o CMakeFiles/zlib.dir/gzread.c.s + +CMakeFiles/zlib.dir/gzwrite.c.o: CMakeFiles/zlib.dir/flags.make +CMakeFiles/zlib.dir/gzwrite.c.o: CMakeFiles/zlib.dir/includes_C.rsp +CMakeFiles/zlib.dir/gzwrite.c.o: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/zlib-1.3.1/gzwrite.c +CMakeFiles/zlib.dir/gzwrite.c.o: CMakeFiles/zlib.dir/compiler_depend.ts + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_8) "Building C object CMakeFiles/zlib.dir/gzwrite.c.o" + "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -MD -MT CMakeFiles/zlib.dir/gzwrite.c.o -MF CMakeFiles/zlib.dir/gzwrite.c.o.d -o CMakeFiles/zlib.dir/gzwrite.c.o -c "/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/gzwrite.c" + +CMakeFiles/zlib.dir/gzwrite.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Preprocessing C source to CMakeFiles/zlib.dir/gzwrite.c.i" + "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E "/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/gzwrite.c" > CMakeFiles/zlib.dir/gzwrite.c.i + +CMakeFiles/zlib.dir/gzwrite.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Compiling C source to assembly CMakeFiles/zlib.dir/gzwrite.c.s" + "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S "/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/gzwrite.c" -o CMakeFiles/zlib.dir/gzwrite.c.s + +CMakeFiles/zlib.dir/inflate.c.o: CMakeFiles/zlib.dir/flags.make +CMakeFiles/zlib.dir/inflate.c.o: CMakeFiles/zlib.dir/includes_C.rsp +CMakeFiles/zlib.dir/inflate.c.o: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/zlib-1.3.1/inflate.c +CMakeFiles/zlib.dir/inflate.c.o: CMakeFiles/zlib.dir/compiler_depend.ts + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_9) "Building C object CMakeFiles/zlib.dir/inflate.c.o" + "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -MD -MT CMakeFiles/zlib.dir/inflate.c.o -MF CMakeFiles/zlib.dir/inflate.c.o.d -o CMakeFiles/zlib.dir/inflate.c.o -c "/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/inflate.c" + +CMakeFiles/zlib.dir/inflate.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Preprocessing C source to CMakeFiles/zlib.dir/inflate.c.i" + "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E "/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/inflate.c" > CMakeFiles/zlib.dir/inflate.c.i + +CMakeFiles/zlib.dir/inflate.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Compiling C source to assembly CMakeFiles/zlib.dir/inflate.c.s" + "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S "/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/inflate.c" -o CMakeFiles/zlib.dir/inflate.c.s + +CMakeFiles/zlib.dir/infback.c.o: CMakeFiles/zlib.dir/flags.make +CMakeFiles/zlib.dir/infback.c.o: CMakeFiles/zlib.dir/includes_C.rsp +CMakeFiles/zlib.dir/infback.c.o: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/zlib-1.3.1/infback.c +CMakeFiles/zlib.dir/infback.c.o: CMakeFiles/zlib.dir/compiler_depend.ts + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_10) "Building C object CMakeFiles/zlib.dir/infback.c.o" + "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -MD -MT CMakeFiles/zlib.dir/infback.c.o -MF CMakeFiles/zlib.dir/infback.c.o.d -o CMakeFiles/zlib.dir/infback.c.o -c "/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/infback.c" + +CMakeFiles/zlib.dir/infback.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Preprocessing C source to CMakeFiles/zlib.dir/infback.c.i" + "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E "/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/infback.c" > CMakeFiles/zlib.dir/infback.c.i + +CMakeFiles/zlib.dir/infback.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Compiling C source to assembly CMakeFiles/zlib.dir/infback.c.s" + "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S "/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/infback.c" -o CMakeFiles/zlib.dir/infback.c.s + +CMakeFiles/zlib.dir/inftrees.c.o: CMakeFiles/zlib.dir/flags.make +CMakeFiles/zlib.dir/inftrees.c.o: CMakeFiles/zlib.dir/includes_C.rsp +CMakeFiles/zlib.dir/inftrees.c.o: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/zlib-1.3.1/inftrees.c +CMakeFiles/zlib.dir/inftrees.c.o: CMakeFiles/zlib.dir/compiler_depend.ts + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_11) "Building C object CMakeFiles/zlib.dir/inftrees.c.o" + "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -MD -MT CMakeFiles/zlib.dir/inftrees.c.o -MF CMakeFiles/zlib.dir/inftrees.c.o.d -o CMakeFiles/zlib.dir/inftrees.c.o -c "/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/inftrees.c" + +CMakeFiles/zlib.dir/inftrees.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Preprocessing C source to CMakeFiles/zlib.dir/inftrees.c.i" + "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E "/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/inftrees.c" > CMakeFiles/zlib.dir/inftrees.c.i + +CMakeFiles/zlib.dir/inftrees.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Compiling C source to assembly CMakeFiles/zlib.dir/inftrees.c.s" + "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S "/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/inftrees.c" -o CMakeFiles/zlib.dir/inftrees.c.s + +CMakeFiles/zlib.dir/inffast.c.o: CMakeFiles/zlib.dir/flags.make +CMakeFiles/zlib.dir/inffast.c.o: CMakeFiles/zlib.dir/includes_C.rsp +CMakeFiles/zlib.dir/inffast.c.o: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/zlib-1.3.1/inffast.c +CMakeFiles/zlib.dir/inffast.c.o: CMakeFiles/zlib.dir/compiler_depend.ts + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_12) "Building C object CMakeFiles/zlib.dir/inffast.c.o" + "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -MD -MT CMakeFiles/zlib.dir/inffast.c.o -MF CMakeFiles/zlib.dir/inffast.c.o.d -o CMakeFiles/zlib.dir/inffast.c.o -c "/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/inffast.c" + +CMakeFiles/zlib.dir/inffast.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Preprocessing C source to CMakeFiles/zlib.dir/inffast.c.i" + "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E "/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/inffast.c" > CMakeFiles/zlib.dir/inffast.c.i + +CMakeFiles/zlib.dir/inffast.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Compiling C source to assembly CMakeFiles/zlib.dir/inffast.c.s" + "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S "/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/inffast.c" -o CMakeFiles/zlib.dir/inffast.c.s + +CMakeFiles/zlib.dir/trees.c.o: CMakeFiles/zlib.dir/flags.make +CMakeFiles/zlib.dir/trees.c.o: CMakeFiles/zlib.dir/includes_C.rsp +CMakeFiles/zlib.dir/trees.c.o: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/zlib-1.3.1/trees.c +CMakeFiles/zlib.dir/trees.c.o: CMakeFiles/zlib.dir/compiler_depend.ts + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_13) "Building C object CMakeFiles/zlib.dir/trees.c.o" + "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -MD -MT CMakeFiles/zlib.dir/trees.c.o -MF CMakeFiles/zlib.dir/trees.c.o.d -o CMakeFiles/zlib.dir/trees.c.o -c "/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/trees.c" + +CMakeFiles/zlib.dir/trees.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Preprocessing C source to CMakeFiles/zlib.dir/trees.c.i" + "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E "/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/trees.c" > CMakeFiles/zlib.dir/trees.c.i + +CMakeFiles/zlib.dir/trees.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Compiling C source to assembly CMakeFiles/zlib.dir/trees.c.s" + "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S "/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/trees.c" -o CMakeFiles/zlib.dir/trees.c.s + +CMakeFiles/zlib.dir/uncompr.c.o: CMakeFiles/zlib.dir/flags.make +CMakeFiles/zlib.dir/uncompr.c.o: CMakeFiles/zlib.dir/includes_C.rsp +CMakeFiles/zlib.dir/uncompr.c.o: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/zlib-1.3.1/uncompr.c +CMakeFiles/zlib.dir/uncompr.c.o: CMakeFiles/zlib.dir/compiler_depend.ts + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_14) "Building C object CMakeFiles/zlib.dir/uncompr.c.o" + "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -MD -MT CMakeFiles/zlib.dir/uncompr.c.o -MF CMakeFiles/zlib.dir/uncompr.c.o.d -o CMakeFiles/zlib.dir/uncompr.c.o -c "/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/uncompr.c" + +CMakeFiles/zlib.dir/uncompr.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Preprocessing C source to CMakeFiles/zlib.dir/uncompr.c.i" + "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E "/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/uncompr.c" > CMakeFiles/zlib.dir/uncompr.c.i + +CMakeFiles/zlib.dir/uncompr.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Compiling C source to assembly CMakeFiles/zlib.dir/uncompr.c.s" + "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S "/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/uncompr.c" -o CMakeFiles/zlib.dir/uncompr.c.s + +CMakeFiles/zlib.dir/zutil.c.o: CMakeFiles/zlib.dir/flags.make +CMakeFiles/zlib.dir/zutil.c.o: CMakeFiles/zlib.dir/includes_C.rsp +CMakeFiles/zlib.dir/zutil.c.o: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/zlib-1.3.1/zutil.c +CMakeFiles/zlib.dir/zutil.c.o: CMakeFiles/zlib.dir/compiler_depend.ts + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_15) "Building C object CMakeFiles/zlib.dir/zutil.c.o" + "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -MD -MT CMakeFiles/zlib.dir/zutil.c.o -MF CMakeFiles/zlib.dir/zutil.c.o.d -o CMakeFiles/zlib.dir/zutil.c.o -c "/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/zutil.c" + +CMakeFiles/zlib.dir/zutil.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Preprocessing C source to CMakeFiles/zlib.dir/zutil.c.i" + "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E "/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/zutil.c" > CMakeFiles/zlib.dir/zutil.c.i + +CMakeFiles/zlib.dir/zutil.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Compiling C source to assembly CMakeFiles/zlib.dir/zutil.c.s" + "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S "/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/zutil.c" -o CMakeFiles/zlib.dir/zutil.c.s + +# Object files for target zlib +zlib_OBJECTS = \ +"CMakeFiles/zlib.dir/adler32.c.o" \ +"CMakeFiles/zlib.dir/compress.c.o" \ +"CMakeFiles/zlib.dir/crc32.c.o" \ +"CMakeFiles/zlib.dir/deflate.c.o" \ +"CMakeFiles/zlib.dir/gzclose.c.o" \ +"CMakeFiles/zlib.dir/gzlib.c.o" \ +"CMakeFiles/zlib.dir/gzread.c.o" \ +"CMakeFiles/zlib.dir/gzwrite.c.o" \ +"CMakeFiles/zlib.dir/inflate.c.o" \ +"CMakeFiles/zlib.dir/infback.c.o" \ +"CMakeFiles/zlib.dir/inftrees.c.o" \ +"CMakeFiles/zlib.dir/inffast.c.o" \ +"CMakeFiles/zlib.dir/trees.c.o" \ +"CMakeFiles/zlib.dir/uncompr.c.o" \ +"CMakeFiles/zlib.dir/zutil.c.o" + +# External object files for target zlib +zlib_EXTERNAL_OBJECTS = + +libz.a: CMakeFiles/zlib.dir/adler32.c.o +libz.a: CMakeFiles/zlib.dir/compress.c.o +libz.a: CMakeFiles/zlib.dir/crc32.c.o +libz.a: CMakeFiles/zlib.dir/deflate.c.o +libz.a: CMakeFiles/zlib.dir/gzclose.c.o +libz.a: CMakeFiles/zlib.dir/gzlib.c.o +libz.a: CMakeFiles/zlib.dir/gzread.c.o +libz.a: CMakeFiles/zlib.dir/gzwrite.c.o +libz.a: CMakeFiles/zlib.dir/inflate.c.o +libz.a: CMakeFiles/zlib.dir/infback.c.o +libz.a: CMakeFiles/zlib.dir/inftrees.c.o +libz.a: CMakeFiles/zlib.dir/inffast.c.o +libz.a: CMakeFiles/zlib.dir/trees.c.o +libz.a: CMakeFiles/zlib.dir/uncompr.c.o +libz.a: CMakeFiles/zlib.dir/zutil.c.o +libz.a: CMakeFiles/zlib.dir/build.make +libz.a: CMakeFiles/zlib.dir/link.txt + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_16) "Linking C static library libz.a" + $(CMAKE_COMMAND) -P CMakeFiles/zlib.dir/cmake_clean_target.cmake + $(CMAKE_COMMAND) -E cmake_link_script CMakeFiles/zlib.dir/link.txt --verbose=$(VERBOSE) + +# Rule to build all files generated by this target. +CMakeFiles/zlib.dir/build: libz.a +.PHONY : CMakeFiles/zlib.dir/build + +CMakeFiles/zlib.dir/clean: + $(CMAKE_COMMAND) -P CMakeFiles/zlib.dir/cmake_clean.cmake +.PHONY : CMakeFiles/zlib.dir/clean + +CMakeFiles/zlib.dir/depend: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/build-emcmake" && $(CMAKE_COMMAND) -E cmake_depends "Unix Makefiles" "/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1" "/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1" "/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/build-emcmake" "/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/build-emcmake" "/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/zlib.dir/DependInfo.cmake" "--color=$(COLOR)" +.PHONY : CMakeFiles/zlib.dir/depend + diff --git a/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/zlib.dir/cmake_clean.cmake b/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/zlib.dir/cmake_clean.cmake new file mode 100644 index 0000000..a5bb31d --- /dev/null +++ b/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/zlib.dir/cmake_clean.cmake @@ -0,0 +1,39 @@ +file(REMOVE_RECURSE + "CMakeFiles/zlib.dir/adler32.c.o" + "CMakeFiles/zlib.dir/adler32.c.o.d" + "CMakeFiles/zlib.dir/compress.c.o" + "CMakeFiles/zlib.dir/compress.c.o.d" + "CMakeFiles/zlib.dir/crc32.c.o" + "CMakeFiles/zlib.dir/crc32.c.o.d" + "CMakeFiles/zlib.dir/deflate.c.o" + "CMakeFiles/zlib.dir/deflate.c.o.d" + "CMakeFiles/zlib.dir/gzclose.c.o" + "CMakeFiles/zlib.dir/gzclose.c.o.d" + "CMakeFiles/zlib.dir/gzlib.c.o" + "CMakeFiles/zlib.dir/gzlib.c.o.d" + "CMakeFiles/zlib.dir/gzread.c.o" + "CMakeFiles/zlib.dir/gzread.c.o.d" + "CMakeFiles/zlib.dir/gzwrite.c.o" + "CMakeFiles/zlib.dir/gzwrite.c.o.d" + "CMakeFiles/zlib.dir/infback.c.o" + "CMakeFiles/zlib.dir/infback.c.o.d" + "CMakeFiles/zlib.dir/inffast.c.o" + "CMakeFiles/zlib.dir/inffast.c.o.d" + "CMakeFiles/zlib.dir/inflate.c.o" + "CMakeFiles/zlib.dir/inflate.c.o.d" + "CMakeFiles/zlib.dir/inftrees.c.o" + "CMakeFiles/zlib.dir/inftrees.c.o.d" + "CMakeFiles/zlib.dir/trees.c.o" + "CMakeFiles/zlib.dir/trees.c.o.d" + "CMakeFiles/zlib.dir/uncompr.c.o" + "CMakeFiles/zlib.dir/uncompr.c.o.d" + "CMakeFiles/zlib.dir/zutil.c.o" + "CMakeFiles/zlib.dir/zutil.c.o.d" + "libz.a" + "libz.pdb" +) + +# Per-language clean rules from dependency scanning. +foreach(lang C) + include(CMakeFiles/zlib.dir/cmake_clean_${lang}.cmake OPTIONAL) +endforeach() diff --git a/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/zlib.dir/cmake_clean_target.cmake b/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/zlib.dir/cmake_clean_target.cmake new file mode 100644 index 0000000..5cdc2a2 --- /dev/null +++ b/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/zlib.dir/cmake_clean_target.cmake @@ -0,0 +1,3 @@ +file(REMOVE_RECURSE + "libz.a" +) diff --git a/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/zlib.dir/compiler_depend.make b/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/zlib.dir/compiler_depend.make new file mode 100644 index 0000000..f1d69a6 --- /dev/null +++ b/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/zlib.dir/compiler_depend.make @@ -0,0 +1,2 @@ +# Empty compiler generated dependencies file for zlib. +# This may be replaced when dependencies are built. diff --git a/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/zlib.dir/compiler_depend.ts b/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/zlib.dir/compiler_depend.ts new file mode 100644 index 0000000..dfa31a4 --- /dev/null +++ b/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/zlib.dir/compiler_depend.ts @@ -0,0 +1,2 @@ +# CMAKE generated file: DO NOT EDIT! +# Timestamp file for compiler generated dependencies management for zlib. diff --git a/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/zlib.dir/compress.c.o b/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/zlib.dir/compress.c.o new file mode 100644 index 0000000000000000000000000000000000000000..2da11630619d0a5f246cf215103ae764f6a35450 GIT binary patch literal 1647 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 WTwUSl&RoyHemyPY+v{>u3jYsqw`&9d literal 0 HcmV?d00001 diff --git a/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/zlib.dir/deflate.c.o.d b/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/zlib.dir/deflate.c.o.d new file mode 100644 index 0000000..3f37ec6 --- /dev/null +++ b/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/zlib.dir/deflate.c.o.d @@ -0,0 +1,44 @@ +CMakeFiles/zlib.dir/deflate.c.o: \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/zlib-1.3.1/deflate.c \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/zlib-1.3.1/deflate.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/zlib-1.3.1/zutil.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/zlib-1.3.1/zlib.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/zlib-1.3.1/build-emcmake/zconf.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stddef.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stddef.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_header_macro.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_ptrdiff_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_size_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_wchar_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_null.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_max_align_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_offsetof.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/limits.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/limits.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/features.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/alltypes.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/limits.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/sys/types.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/endian.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/sys/select.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/stdarg.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stdarg.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdarg.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stdarg_header_macro.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stdarg___gnuc_va_list.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stdarg_va_list.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stdarg_va_arg.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stdarg___va_copy.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stdarg_va_copy.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/unistd.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/wasi/api.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stdint.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdint.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/stdint.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/posix.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/string.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/string.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/strings.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/stdlib.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdlib.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/alloca.h diff --git a/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/zlib.dir/depend.make b/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/zlib.dir/depend.make new file mode 100644 index 0000000..2e658d7 --- /dev/null +++ b/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/zlib.dir/depend.make @@ -0,0 +1,2 @@ +# Empty dependencies file for zlib. +# This may be replaced when dependencies are built. diff --git a/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/zlib.dir/flags.make b/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/zlib.dir/flags.make new file mode 100644 index 0000000..f7c4df5 --- /dev/null +++ b/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/zlib.dir/flags.make @@ -0,0 +1,10 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.28 + +# compile C with /home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc +C_DEFINES = -D_LARGEFILE64_SOURCE=1 + +C_INCLUDES = @CMakeFiles/zlib.dir/includes_C.rsp + +C_FLAGS = + diff --git a/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/zlib.dir/gzclose.c.o b/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/zlib.dir/gzclose.c.o new file mode 100644 index 0000000000000000000000000000000000000000..f895a9ba7b3f76118dcb4e4f3679d6893b08de23 GIT binary patch literal 718 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 literal 0 HcmV?d00001 diff --git a/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/zlib.dir/gzlib.c.o.d b/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/zlib.dir/gzlib.c.o.d new file mode 100644 index 0000000..7883ca2 --- /dev/null +++ b/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/zlib.dir/gzlib.c.o.d @@ -0,0 +1,48 @@ +CMakeFiles/zlib.dir/gzlib.c.o: \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/zlib-1.3.1/gzlib.c \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/zlib-1.3.1/gzguts.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdio.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/wasi/api.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stddef.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stddef.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_header_macro.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_ptrdiff_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_size_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_wchar_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_null.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_max_align_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_offsetof.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stdint.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdint.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/alltypes.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/stdint.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/features.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/zlib-1.3.1/zlib.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/zlib-1.3.1/build-emcmake/zconf.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/limits.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/limits.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/limits.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/sys/types.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/endian.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/sys/select.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/stdarg.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stdarg.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdarg.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stdarg_header_macro.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stdarg___gnuc_va_list.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stdarg_va_list.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stdarg_va_arg.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stdarg___va_copy.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stdarg_va_copy.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/unistd.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/posix.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/string.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/string.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/strings.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/stdlib.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdlib.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/alloca.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/fcntl.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/fcntl.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/errno.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/errno.h diff --git a/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/zlib.dir/gzread.c.o b/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/zlib.dir/gzread.c.o new file mode 100644 index 0000000000000000000000000000000000000000..fc6394b0e3fcbfc6cc3c44a869eb1c036fdc8795 GIT binary patch literal 12516 zcmb_jd2F1=b)WCpL)<0zqeM|Fk`muYD`|OCJeG%KiK}C&%ZFr3wq)7Vid;%uQcLb~ zDeIs_`H+t|c5KH;P&7fC=8v`s+yv+!Nm?LHTC_-uG(izGL4g!WgEsl2M$xpW(I7|r zdvCs7N|utiL18U-zxU0&dGqGY?;SH%*~LqiQp)<=ty{NL_?)w{vSO{smpW&!+{AB- z2`=dTZOdP4MV(XDiv7c9(W%bK6)wjnCgx@exom0TQtr}x>8hp&%+D0c zxstOYL9a!4eeaCopifJTqTVA?_Yt zESHRAB238VrUK3zte}`uw&UVIC*U~X8HEC%wwiB!i(kI$SOY6tLAj;0lP2wwL+-2& zP#_^h3Xn?KaeP@Ry8&Nz%JwLbwBtIMRyssM3T1RSZRs@>rZq)fV~^QmRCBOarB`$W z9U>{aC2HXp_lbfKP1*QL+EHCgwMpC4b?I*o>loEhY+QTbR8Jn&7xh}v{t<(uQ#zNB4~sr;SD3L``TIffUUcw0TtuPq#qwP1Hi0 z4(ZM4&`O)BwWtYl6XZ6$b^4~>k~WIjN}9INR!^S5Fad^%RfbW$jr%m{?fm8G9kh+M z(+=-7(P|QnlfKeC-G)KhDr2-$JImie9o1nwsgp@vm{K=&QTMp+frP!(L%l`4lXe=t z_JL>LssNtu2caJXQFDtPz)B8+G?>>ZN+rxn4#XnAy(Sb{v2I?(2V3E0;5S-%PX}dX zf>>g|D`~?$ebDq$36s0=vbx~Lh z8ulngUPjkr?rW)@))w_T@LR{TS1^G9HSmyjB!b8Fcw7&ga>mfH5f6;vU`9O`Un&1M}!f*{G@7(~^)AuKF28qJ?=}NJKo2DC7QF{O z_tGBPTh?Q=o5l|7G${KhP5X*^KkeroX*wLB1Kvkuy$@p9GIWqK89k21hiIG*74>1r zco?H#fsa6cM|i!15iGgsew2=~G{?~4K{`ecX7oe&`7k|14;S?#BI6^~86M|84f+Is zh4rK9uzn0IAIs~LbW)$9<8*=^rBj~3rG6aZJVB4s6B&IPEYHwsI#bk7LYya!IA_uK zEQ=G0_=*kdr;Joj)6?`+%3e0(O&H=iI!6;J`-*wWQr3G@=6xOmP11Rq%;+f$l%pxi z74lzp3k~QRby!6f(xowW81N)Q?Vx-^+ z9fF3#6rykujtaPBk<0K?Lp7|?h!{+S4MxaOiZU7C1Z1jv2hK_O2`Zg@A1YzJ7?(^7 zc&Fb7Ag$MpY#PFA18rblaf<842sOezxwMhBinmeVku++iW^U91r_?kH-_%T-u$-pJ zX46EV$JKxw+ML&#T1oTn7cN_93lM1QJMc`x4#2}}vmI_Iu`K>*2iC^41?~WJ+TPLa zMr3#&YQF)Daj6sftI92CGp4&SzwWAHdZ>r7qL+GW6(fU;2GH@havw~(AK25MfeW(W zf(B@?2rBX` zywn&H+K)oph6C&*X(#no^OT?jZG~na+%~k_#w{yThw1QY?7(D`@JGoqYz9KOu$p#i zV=xhsU_8vQ)4YSpP$#&Uckoj_()BI_V59Hj9)9MU1*#4@qSr(J8LVumhERg7#F zMi%tj1PvGkO}rd5@iJ@>tRydQs|ZC{2T{aL(OG~| zkZO6y;L|ds)oC8Egr;U=-R%CM%MpsP;6Rp%iD$d(C^i@Ha4ZjV3bxbF2{5usOO zA@4&%=!Y2&P%l8KzZ%L9VrGL3NEMj{tc?2NdI+No(-7m+7#qn5S|cceCxbjKut0(Z z25DCwVbE^h07hexp9HPxiji1obAPOggQ28b?0#XpaUEdT5{H$Cl{g$%%U*(&a8T{R zP#ju=%~!#)sBvH}J1~lvEx@65)cd&1xE3=Otjg#ZrXv2Ui2SM^%EGI)V7HbhZ}2Dz zj6#m(>ITthLxtaZBqNRK?+M2ZunS~bMt`g{2p$DiDU)`2uSzQb7B%_PYS7I{rCQ+9 zS~7YQq}WWGXme4w${?*~kOoaaV-4S?Gk3+)98H^1;(8nSY)`)@BUExMJlx``Brzhg ztQH@@8gyHF8ODP+I-@%AeZnWu1f08Q#z^86bvZ{u$6AX9W$*?bd z<5&1L!*Ix`W0;0{IY*$CQ5vDqjNSzicGE7}UDOZAydU5d_^gb)hxX{bRaFA5xG!VX z-U#glR^0$r4H59FD%%0bc3@SuD8TC=n@0u%j?=h4gjr_%SvKgy82bnvrX%ATQL{c2 zp+l>2b5TD;56KRLMmz-2vYwC7Bm8un9;V~7h?_-Qk0MAu!5deaJVuZ4%AYjvPSGib zqsJk@6NKn_R-dMmbUKglS^7RnPtq9%FFZBqvykX1I!jMw^wan`fv9<+sLw&_bJexU zg4KD-()pC#%Uf>}bDqSU#o}5JF%u$YhjMv6P1F9?o5I#}tij6G`@iC|L8}l3lSnb6 z*Fd-$T0=F(J0e89j$+TFictX#E@a$|&2_B37?(9<%Z=YBWP}X@L$KEvlBYOkLC#t$Qh103(7nOzuQ^mTg4F6`Hnta(E5!{o31g#4 z%Pm~jDCn*H8t<@8I>oTNjvo6MO1+Wb?H%HdDKAj|v5hAa$%t zf`nCUytCT5i+RKW*!T)d=8Dbc*GGDp*nrwbFYPRF=BoR#88AO2tGYiz{RkrsM*FCn z!qN|cG?WK65Bp1>ibY;=9YU_qR9XHH5GDFSVg|J=%lPG@4vXwz$PQTX0XOPz&oIov zp&EY^a7hCm+S5^9=~{|X?Kp~Amhs9(Ex8DJ25l6>E-&j^cFz`X1da(!O$#f%9>LxE zap0^4hYW-*a>gJly#i=;BxUfWQ1H%8+`U@G5N1don79dI3&iGO0xfI;vSYbuL7Wum zeU_GmU&g`{ZRNy3`Xe0Vg|4oD9_yc=9lUF|btwf4_@6u6vP110uo-NI38X_D1#)2m zQK0U|G#e|dtw^D~kBV6bz)i9R_P!yXTObzsVoj(W z$>?Sn*B*R=71lNk@mD0H?EjF`G{CLe zV&M+VK%houn}oh3{NrMwP>`zf{E=;Nv9OccsnahOc7dxDN;7vAO2MyMDs@e%6vaa3 z64(7;j}VXs4(UP6F-3!vD(WG088VAe$w=80Wn4)(;LFiuw4#KnN9X+|tt9hE>OJOZ zFYVuM`WPLhW6LOh9ia#P+}=YCOqm)O3U`LvBhdIGcWV4N9cPp{VMc*ZXDJ_p zlqcyiI$1_J>;#?4z>{013RcvoG40b;^E!igx%&sy}HmDkTRou0>mi@)qISo8uKy85<- z!CtiJwnZsZi{8KhzB#>#0q9LUBM!qHTJ&2MK=7kX{U`)_+oHEE zA2{E#Vv#?uvEH&OaQOlJ@x4_Wc1>Z1V;;^s-L)dC4}8%4l14k8Ov$!(l?S zT0=sR##-=&M`cg)Aj7^La-q7%!5P+BX4eT4sx;JISKYU3JRF0t%@YB=OcM zd%;lpKoO^%vgZtCfU{L8@!^yy-3o{ORmo?D)5CDsDNdVd#Cu*=Mxc{-xNt|+hP8&A z`OaAjekOpQd+wy}#kga%m&Raorgs|J+2?C#KjCD7_E)vzXGW|Y(YtF>BNwTWjnpVZ z(?xv-9nbiZxEkpavIFHvStCAVC4c%fuyVhK&lV`sLu-=0xegy9o>TL_+p$i(lVEs%E+oUnz z^+jn6bQQ?}s`$q!E9UF!R~Q-rt3cTg3HC~}R~f{y%K)Pv2Gv*BYfJ^W0%>0dl~o2r zbpWfFoESzFD2u=o$m#%D^FUO3tAe3#07Jjy0;&Du4+h&`QcPl5CJBr*J-d9q5Vk*>NN@mdRy`2sP`_5au3(Y%$-l%Q%40q&=qVp~rf&${r^+ zto_PCtr19K&jf(fkuzE*dMG?1!Bq%49ooR|Qiw=*xVxY0xQ=fZ)i5-Vgx8T{T5955 zv5C7yS1XWtO?XdGD~|IwvBSfAS8IsBg^=gwHOk&n@20IN`HJr2TATz*OMFtBKsYL* z2&5wAMKv;+H-+ywS0dR5b(kh{PVWLqJE&_G=}rR>)S;d{AB_Mx6M*4v9E-dm==TAR zMI3W1VhV8$$a_Q(2|Qh7J)<0VQpyyqGSUuA&Z^7RK?1Cc}UK`fp;@r|oS;z5G@#WQ_949%Cb$khd0mmqBa#GHkNGOXR5Eze^%j z><^H^plcMigA@L01|y^ol)>;pNq{q$iWJd%G8kcYR|X@Lc9uE%8)Ptim@k(-I>o1f zO9FmaZhPP!1bhDKN!u)PnE<8OQQ}2QHKoB;lEI}ci6S9LA0P^oO7kY(CjrsE3cvm6D%lNR9WX29mnRht`9&;o z!>B`|<*FNoOyY>81(zw0ReL{35Ar~$Q|e<8I)(%%Ko85EB-W^uDqT2a^o;8h=^Fhg z4)jr}^lr=Elaqe`@Y~ZTF_TlMOr9FQZ-xUN9!i$@iW(p6!UvzBv$OEQz6;JHn+foF zeq78jq0gD-IM-*mId9}(hiuXsDCQg=@*58$Lgq{l)Gc{lNN^}OYZ4rGG13G_{49ec zI4&IZEY0NMsPi<(`(K*CRU^+SykidZqsVd=IIb@unVDaPUtXXR2lLW)k-u7SpkJoN zStL0DTJo(V4#$jl37qObLznY#$^p6}Tbw%>r+iIc$MRfdpMj>HUWO8H&@$b~;2i&^ zz8<0LdIkD{GhKm4EgA>RMP*+_aIxsvz=;ihK5u383+xt=#lRuoMu!*KA-`xDOM~AH zh`X(9vV?w_JuciW{O~K1%LqHT;DC7GP8p|D!v*)U3l6{o=Q+7~t>Q>ug(Ll$W&JL8LZF9%~dmT~ivwVKE;S8;T?$eAUT6g>kuj zQ?1!ZC-I`46)#!|CgO-C#E0g&N|?YNxTPo_i~Pv3`YQ-;{rWKC*HlJtR%S1`KE&ax z6jB-Wt7`Ym{{59vnLTRCNWnPws_==LFrwwIFd~X%47rA6V|k7qycc;|5~KR(mq{*{ zuI3F<=m42nf^}f1eyk-IEvAsAT{l@8ADv&xMfD=0IU7p!!zj zA+G4r-4W_WWZ_Wns$1WQMeGBqFAsmv?=SSuSS0cuXJKJrcBHkGD=y_0%QQ8gTcpB# znWksTG*h5#0e{O%rCTHVm$sqBnQOTTZuJ$gnqMl@{4|y3=PywiSBI7sFVf`2Y$-d5 zJF<&t^gR{XuvExhS;&Ect4xI{Za+OUm&42VRAh(TrY&UWNG_|6LISxdOMHDbdx<9J zOQod+9`2J?q|P7C+{^{-vsR>Wa{kgnDYv)??o-)v*6_i*uUe7d&hGy1ol3onbW??J zt#@{&aKR3L1*x`5C^s6saElWrq#V?wyv>%3X)yE}*Y+8_~HsHbGdqNjy=O6?)dSLLYN2^?D$nei06;*J?uQy_#_7`C2RV8GQb% z)>41%1w)^zw?d!C=P&Cm^?PgU)ECx;)b|_0p+9J}LSMk=>y4KBRD6^A_QuWXM;lw! zPc}NCziqNY-^J(0O_utH=JoDpTS%!dwK(eUTD1Geo3<$R)lH83!sfL~y|vkKf3bNh zWNURoU(;6TJNUe-E%);YB%xnUIO^vKH}n_VtkAdd`PXfh`sbt@`bHZDz~{$pmU^i@ z68c0tgu&IcIO>e-Qc_3@E<_fJOf=4&I4dUJHWdV64EA)y?s({$UnqApPU7l+*G$1|v#$BexzgNx;X+5vrKP#@%;oIdQm!L*X{nq& zKbPyeFgJfbJGa=et}tIHm$C~Bz@@I~g);xY1s$45Ab-wq_?xtD)xI~y}Z1zl*8z0RU*&9OB3_+i<7p~ozA7x zDk$ycQ|amXiG2F#!fd{GOogPa~&GH2Ksrm~T8h3*I@MEae^sK%YliJ~Fe@8FVfqFhep3CH7#o9u4>%zyNkkW+HC<>u6yZRUu67ilh;zyHf*#9V%r?CJ2?q}H}&uXp;)T(Zz zR!!9jXPj$5t;XNX7}sLc>Zn$*&MOS~0S zw-(miMr{cv&IvnW8*QURzccR}dbJLZS1CQncqWQ)HBCB zurWLO9qhI&x0iZFv_5$X^G@ocopZbkLw5B$t~9#bFBgvosGkOo^KM8#NV{n;%R>-y z$lpqj_h8Z>l9D5Q5JV1Qr3Yx3k{^^QW#+ql zNQTDvFddc!jnD`k%5aJfQ>x!tl0KJ5X_Sx9k+=A$9ea$9Z3~3?I31^>*Z2e-qZ0!G zv(8$+$xgYMZlaqrd=j#rH10s?oRU6|Z=qZ0)Eu8i-)Y}Rczg!pohh2jS(wW?I!oug z7mP{V3X`~vZl&8&d>;F9JDsQ7vwR2LVGZI=kh)WB&~A#ychOztDpGVNchlXnxO>3k zo+6Ji@EE5t8uxijfX4-zpbIIU1dl12q^T^YDQ$U7gU7V+aLmTl@{HY#i*%7@U?zcK z%%8=e*?vb!m*R|F?;K@l?l{kb=p~w`OIcokAPc@A9xr0jA|@HSip{3SI7?Yt@>QTX zM>$@m<+nI*xvtQPsNgbPru;R&msaRrUj;F~4-30O_t6!9VOJs8{dAS?Pw_R#@Bm$- z2eP~h8CLDm)*!%|EG^)Ra9vx;Kc@+Q*YzAfh!%Pfp53@~j~~+Xkj5692~mDnx*tY& z!O1lGH_}Eacau;gea77Xg#Lnxs1xZhm6HU?2srN7vf6XKAA8QhZ|Eih@?Iyh=^JY z-19ovXd zvZ>!m*r(03IpHLD3uJ1dE!31^f|6L`N0ysGuem5u3$@5mk5k-xSj4gfS|R6FU(Pma zrLELfloLF}hegF`A*bSPV6z>LZF|2%wxt~{9dKhE{w^u*L`xTSQkO5I;%>{Shk6pu z5jZxpWaH6Ja9u98)rvw zcIGKXDH?(4+9xbcch@nqjXf9_c0lvjNdyZC&A1rD?C;X{EU=3KzEdT)+a5bK)u|Q`S5!c-o@VMrn0wlvZI?Z($uz~7m zLl!7(BS4yE7^9eMGtP}1nzwk9ooE2SIo^y(TWB+F$#RpCw8=;+q;Xi@#F1fcmIG;o zH)o|$&I&h2sF_{*I;Dz&m&?7F(Ou(T52IzYW2msG9Ab?%s$NO{`byhXn#9kO{yBO)8Lq)wu#gqqb)qgJL~`Le2Qkh(e3T*Wv3w0s8|A?I@y9 zYlfnFWCfzKI;!*SE(%lJAWa*Erw1sykz&WW9$RcsXqGn_bKB(Giw8v7$eVpmQP|`b zncYN9yg5RfVT>-3U>>sqSfwDbW_gOTu}Z~pd8&m?HdCBhy+@66+=_Wy#SNjak=vk{ z1hrA(2nC2Je4(~BDvy(c-FTo1E&zpvB7()+rP!Dw%{o)Rg2ORAXjAS_U zT9IIlBK}Ue>Rv&leHM|LA^mp901XKJ-9V%L8JOe%4Z@&(>lp&wA)#wep7G!b=M?XS z9{2j9Mq#Y`go`m&lZ5!T+98n%yrRIW!`|Z}eS(|MV4yPX1{ zDpT&H+v(0ZfKx2M|kfE)|l~ zG)2>Mz@jsJAwn1UB6jIw(fDR*R_rWer_9luOqrLbT0qf^fKlK07BFw2Xnc#mstNr`WKSFK3* z)BPgSH9*p<86ea9=>fP=u`KD2@+z&$R;_{aTEQn=*FdClL;y|Apa(UODS&Fx%NTGf zHUwB|Mm(Yke}YeaZv$ldC}<=EnPNnOKd%XYk70yc;QhF!$1%p^CoqPdKv&FCd(zB_ z^HZ8|`;_*cFo*7G8TK@W!2t;FdqyW$`B_cRXnIzs_&JT8d|uOYnx5BLenDeRFX-ZS zz9^$#(#a1DtuJVLQPWGBzMzYH__EM{8T8lB%ojC%(TMnp5h=#MqX~bn0I+{aMt`Xw zbd0~O>B|DxMYcG9MdN6ERnu2AeHF63Dzbe|)2o`k2H9Q{*vT8o@TA8zZG=WQs^;PB|LNB`)L1 zIs&z2-Q?RJ- zm;{UZP&5U-YOB}m4FD7_qzsl+<}VU9D-|hMQaJ;T!W#LP^x9%0NDoQZ$fad zJb4zQW_UmCr=cOGtRM&IfCw@SN=ZU7DuXzGK;pb>NdTn^CO&*n1DYPDk!uL*hbZOa z;#wX}{*ShCJ&THzOGj_mx>`hemyQjoN=xf_vJwRBmj?f@(Gsk~d;+N*i#WNapXW$DlS`E`2ov>2xdxkIvhpm~na!w!#>{Aw6-~h(N`fANV&vUUY@M$siMn_O6YC1I zHqj>ky+I>9n^AY_BkJ}!u;fNlaERvpNMSvm&638YXirkIx8k&7W402?TmBma(YTQ_ zK?(7=66Ln}9(Oxfn*f*M4y>;esZeK@yFjn2NY7;HQ&4k>r00UE{92}Qi7xkIbZ>#V zNs{7FI5I1C?ncn%&hNh2uGV>d=ow;C0%ilMb|h-OBy zRE4KFavfZd=g<)p>5tP153fD1D=E@Tm8wyC8~J9V_nZBlX_TV9mAi(c(k&-H zD6t z4Mq4Fn)R#UQ6xVZp)+Sk&eOa|dWq)f(n(%`z>Bm%i& zH72#eTFtR(M1BK#pR)-8=5`?0f#-WcT3>(|NM~Nuaf4uy|5Qfq*JbM-()$DtDUJ;k z@oGstq)~oUN|*vPLUNJXCEhDj*n8O+b}2@d`obzMLsb>hQ6z)ZAR4#K%PJ%P90r7Eo){4lM>AIVTYdq`HchP57&SK+8lNG?!E z6$=(-3aLjBg|&^sS%Iohay@j6u;&7+x)!S*!~1M)eR5XHR=!_v0@Wr2314Q#2+4wY z8AMD%0xAk&S-~+QAp3|{F#@u50IQ1s-HKAyR^R`&!O%_dD)mXlE2*S*i1P_7Cst>%{$WQ|0xdp)kzbFt=Em(jHE-tudl%d7ABFQmB*{HuCkt z<_||{YV{!t_=g!DaBH{5RSWiOR<&8Zt6+#4lwLRvAj3SeW2G@qz9NKdiP(J z+bqe@Gl92}2QYfTA03t|r5ODn8qLckGjb?dVoT?~C*BJKHTClp?+4oh$WIPr5rT({ zOi?x$rU$WNWG02TzG3^iycW?IbWwejpiCp)lj40Ej3=x`wqkhVMUuQj_v5m;M3Ju? zr6c{$32f0Zkj85y;7SZ{my4gpVNn(K4Ct^L^W=q(coFmR%Y211F8Q{6hvU;LIxMjb zGi;;1Aj=lps7LX=-nWegD9Pm5sSo)r(1Yjl>7nW_Y9cU4&0T7DhA1adL4h4N`}%GH zskqcoQrrrC8yuPCHjrv7k}|eD1soZmZ9>XYGM{}kt{2`7dE>iKIKlkRf+SsX+>O(c z4)6txB`4+zjKED(miPS1tG2gKkDFD4JcyBrm66E1$OKgoP9f5oOJ`To%lY&a;ZwMo{6(5tOfS>IVxFdF^EA7Fzr0e( z)(HC}KQdr~mS?Y~$7IyID$ zP?0wC;oic;JekkthRFZ;jpReRiAyxOn9Hp!f$6LGWI%=R72q7$I^kF3+rVb!R)l7* zn$PkaPiZIEb)pLsm1lC*wX3Rp%p8)HaK&2X(d0Y+&X)=tUSFwsMireHk8g>z3hKk=sEaoaeY8vKvgKu zU2oXwLMvX0^6-C1d12+1Dz9w4e^-fWQ|?9xmxH)@ipPng!y97 zizv4Ntj#BaWA`e&FZ9Yw{zI%RSkaYRoSMi_boslYy$?4)2Onwb{b*C)N1Jwjv}u>p z>JLOmWw|uIiR?Ob^6-c|6AI~2qjuldj#7_00rj@yhJNJe&icezq|^QD+22K6`p#wvf6#E5)Hp!8E{|sYLxmj zuU7rct5y$IRl6@%q37#WfzZ#Zb?BuU9r|{SR==(Zsb6mhh5mb^4m}>zp;u#C{VG~LSIvRY+i@NG zbNv1xuH9d3Emi8_wt#x4%?&-C(4p7xdpn`k+uMWcuRGn)A9d-_JNW&5msXGUMBShD zl!Ho7Kz)0M8+xTzhyD=1AM|SVot-7>&0RtD7Xy{*`$M77yL)x$Z}I!ry;{AtuOjr$ zJ{|fy{Qhm9R&Ndm)h~xbq2EpF(D(5BtE5&xJRDR%7zwFYQ(Hp+p3gnUv>hx&%{MnM~)FbriRg z>E-40ROf{&8sDByEX#u zv~yr!SGs>{uxD^^XaB&|^k83qUwX$x-{jP;!CgI*lYLXY(^Ki5UE9=4;-V_^6SX-!O@fb~|Smre<^C*132&ots}=m}xJ& zv@)Ncy*x3$l5VfOw345=FrV(6nP0pxF~8hiv#_|3&rK{X!GCm4FXiQv;r7a0dODp; YFHEL8^H-MA%kAOi*_nmT^nLmN1uM9?CIA2c literal 0 HcmV?d00001 diff --git a/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/zlib.dir/gzwrite.c.o.d b/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/zlib.dir/gzwrite.c.o.d new file mode 100644 index 0000000..46bec42 --- /dev/null +++ b/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/zlib.dir/gzwrite.c.o.d @@ -0,0 +1,48 @@ +CMakeFiles/zlib.dir/gzwrite.c.o: \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/zlib-1.3.1/gzwrite.c \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/zlib-1.3.1/gzguts.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdio.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/wasi/api.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stddef.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stddef.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_header_macro.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_ptrdiff_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_size_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_wchar_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_null.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_max_align_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_offsetof.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stdint.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdint.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/alltypes.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/stdint.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/features.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/zlib-1.3.1/zlib.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/zlib-1.3.1/build-emcmake/zconf.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/limits.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/limits.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/limits.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/sys/types.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/endian.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/sys/select.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/stdarg.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stdarg.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdarg.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stdarg_header_macro.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stdarg___gnuc_va_list.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stdarg_va_list.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stdarg_va_arg.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stdarg___va_copy.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stdarg_va_copy.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/unistd.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/posix.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/string.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/string.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/strings.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/stdlib.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdlib.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/alloca.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/fcntl.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/fcntl.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/errno.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/errno.h diff --git a/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/zlib.dir/infback.c.o b/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/zlib.dir/infback.c.o new file mode 100644 index 0000000000000000000000000000000000000000..2925856d3368513b5ea072378f76a9b2844410b1 GIT binary patch literal 20892 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 HJiYK|bk5d& literal 0 HcmV?d00001 diff --git a/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/zlib.dir/inflate.c.o.d b/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/zlib.dir/inflate.c.o.d new file mode 100644 index 0000000..f19b535 --- /dev/null +++ b/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/zlib.dir/inflate.c.o.d @@ -0,0 +1,47 @@ +CMakeFiles/zlib.dir/inflate.c.o: \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/zlib-1.3.1/inflate.c \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/zlib-1.3.1/zutil.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/zlib-1.3.1/zlib.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/zlib-1.3.1/build-emcmake/zconf.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stddef.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stddef.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_header_macro.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_ptrdiff_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_size_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_wchar_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_null.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_max_align_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_offsetof.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/limits.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/limits.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/features.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/alltypes.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/limits.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/sys/types.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/endian.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/sys/select.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/stdarg.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stdarg.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdarg.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stdarg_header_macro.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stdarg___gnuc_va_list.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stdarg_va_list.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stdarg_va_arg.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stdarg___va_copy.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stdarg_va_copy.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/unistd.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/wasi/api.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stdint.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdint.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/stdint.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/posix.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/string.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/string.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/strings.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/stdlib.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdlib.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/alloca.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/zlib-1.3.1/inftrees.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/zlib-1.3.1/inflate.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/zlib-1.3.1/inffast.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/zlib-1.3.1/inffixed.h diff --git a/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/zlib.dir/inftrees.c.o b/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/zlib.dir/inftrees.c.o new file mode 100644 index 0000000000000000000000000000000000000000..bb093e1d216721b866f5e0171e1c70d6d612214d GIT binary patch literal 6596 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 X&dUm?#kv)Qi&Lu>=XT6X<1G9af0ziZ literal 0 HcmV?d00001 diff --git a/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/zlib.dir/inftrees.c.o.d b/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/zlib.dir/inftrees.c.o.d new file mode 100644 index 0000000..ee3b86f --- /dev/null +++ b/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/zlib.dir/inftrees.c.o.d @@ -0,0 +1,44 @@ +CMakeFiles/zlib.dir/inftrees.c.o: \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/zlib-1.3.1/inftrees.c \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/zlib-1.3.1/zutil.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/zlib-1.3.1/zlib.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/zlib-1.3.1/build-emcmake/zconf.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stddef.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stddef.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_header_macro.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_ptrdiff_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_size_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_wchar_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_null.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_max_align_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_offsetof.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/limits.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/limits.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/features.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/alltypes.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/limits.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/sys/types.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/endian.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/sys/select.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/stdarg.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stdarg.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdarg.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stdarg_header_macro.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stdarg___gnuc_va_list.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stdarg_va_list.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stdarg_va_arg.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stdarg___va_copy.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stdarg_va_copy.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/unistd.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/wasi/api.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stdint.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdint.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/stdint.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/posix.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/string.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/string.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/strings.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/stdlib.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdlib.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/alloca.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/zlib-1.3.1/inftrees.h diff --git a/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/zlib.dir/link.txt b/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/zlib.dir/link.txt new file mode 100644 index 0000000..44e9e8b --- /dev/null +++ b/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/zlib.dir/link.txt @@ -0,0 +1,2 @@ +"/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emar" qc libz.a CMakeFiles/zlib.dir/adler32.c.o CMakeFiles/zlib.dir/compress.c.o CMakeFiles/zlib.dir/crc32.c.o CMakeFiles/zlib.dir/deflate.c.o CMakeFiles/zlib.dir/gzclose.c.o CMakeFiles/zlib.dir/gzlib.c.o CMakeFiles/zlib.dir/gzread.c.o CMakeFiles/zlib.dir/gzwrite.c.o CMakeFiles/zlib.dir/inflate.c.o CMakeFiles/zlib.dir/infback.c.o CMakeFiles/zlib.dir/inftrees.c.o CMakeFiles/zlib.dir/inffast.c.o CMakeFiles/zlib.dir/trees.c.o CMakeFiles/zlib.dir/uncompr.c.o CMakeFiles/zlib.dir/zutil.c.o +"/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emranlib" libz.a diff --git a/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/zlib.dir/progress.make b/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/zlib.dir/progress.make new file mode 100644 index 0000000..a1fd4a5 --- /dev/null +++ b/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/zlib.dir/progress.make @@ -0,0 +1,17 @@ +CMAKE_PROGRESS_1 = 9 +CMAKE_PROGRESS_2 = 10 +CMAKE_PROGRESS_3 = 11 +CMAKE_PROGRESS_4 = 12 +CMAKE_PROGRESS_5 = 13 +CMAKE_PROGRESS_6 = 14 +CMAKE_PROGRESS_7 = 15 +CMAKE_PROGRESS_8 = 16 +CMAKE_PROGRESS_9 = 17 +CMAKE_PROGRESS_10 = 18 +CMAKE_PROGRESS_11 = 19 +CMAKE_PROGRESS_12 = 20 +CMAKE_PROGRESS_13 = 21 +CMAKE_PROGRESS_14 = 22 +CMAKE_PROGRESS_15 = 23 +CMAKE_PROGRESS_16 = 24 + diff --git a/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/zlib.dir/trees.c.o b/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/zlib.dir/trees.c.o new file mode 100644 index 0000000000000000000000000000000000000000..25e67c43e3c58b01d3415274762b42738cad9a22 GIT binary patch literal 39596 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 OxNgPcSZllUYWzP4q}WUV literal 0 HcmV?d00001 diff --git a/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/zlib.dir/trees.c.o.d b/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/zlib.dir/trees.c.o.d new file mode 100644 index 0000000..89aab5b --- /dev/null +++ b/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/zlib.dir/trees.c.o.d @@ -0,0 +1,45 @@ +CMakeFiles/zlib.dir/trees.c.o: \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/zlib-1.3.1/trees.c \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/zlib-1.3.1/deflate.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/zlib-1.3.1/zutil.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/zlib-1.3.1/zlib.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/zlib-1.3.1/build-emcmake/zconf.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stddef.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stddef.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_header_macro.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_ptrdiff_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_size_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_wchar_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_null.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_max_align_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_offsetof.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/limits.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/limits.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/features.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/alltypes.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/limits.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/sys/types.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/endian.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/sys/select.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/stdarg.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stdarg.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdarg.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stdarg_header_macro.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stdarg___gnuc_va_list.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stdarg_va_list.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stdarg_va_arg.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stdarg___va_copy.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stdarg_va_copy.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/unistd.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/wasi/api.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stdint.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdint.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/stdint.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/posix.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/string.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/string.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/strings.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/stdlib.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdlib.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/alloca.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/zlib-1.3.1/trees.h diff --git a/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/zlib.dir/uncompr.c.o b/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/zlib.dir/uncompr.c.o new file mode 100644 index 0000000000000000000000000000000000000000..77bbe1f7451c3d3996985262192bf9a5490a4c3b GIT binary patch literal 1839 zcmZ`)TXWM^5I#CqY{hc0AOXUC7XlcJ9Vbqdm}^9cxg^{J1PC~?EIYPk*_P!%=yZ~{ zPo4Iu)3;7%`X}1y^r6$Y_D?X=PX9z7yGQasU+NkA?D=;0+p~N2teM$sNsKY+yWQPg zCU3|)^pSQpBH_Y=jYJ6lOBf7AYa^>wZ+nrQ z08Z51s$=^0ZMW{1Ld)0yVqEye2fHP=!Xl9`L>SIk;xi#g@n63b``;Al&CV%8b{WdX zpA3gUhM^`#AvzJD5Cx|5HCiN{uhPPG{(zQ<&R2{bjFA}Ac>gw3bzM1M%yu+kCFF&68GzToWuhp9?VX%fs0O}kl z(n%6e>U<)yAXF20it;}drZ3|J74I}m!0BZ?LusCcGjO(xsenF3^rSuq=kWZ1SjIG@ z@w^J>@dD9aAli^LBNiF6kcCVWCrLL+)d~(XjyZ~$3nMBxMU>Mp1=Guzr-(C)&kX3gc`?-Vo~rCT!M>DyiB^wbk{1?^9spV8h911 z;x)>D0j|M<7PK20q%uBK@j6_mfWaXZTnuS%z#`me;F8#_U=fO#JiN!J-7?^x_Cdx>Hgr7Qb_$O8u1}Kga=_`2_S`! zs63AbRvJDwKEYLZ468+aLR?Sb2|VrMGk7LyBcXT#YofFw)918#-oO{|0$;*Q?Q`*d z4hvEZ*U9!3ti!7!z9z8*uc6e%jo?Tdf{LLDCYA?f*3dFIR=|Qv5p8m)f(_L!)&hr` zaQGBAVH4{g92#`cCN!W~M28$&;6SU3Zs6b!(vh((jx&KBXhWxgUFe2X9(dUMK;?sv zJr#P`hd$O-sN)uFVOfPTzM&M~P-h3Xw2p7ZaM&hnyMgcE-C#JpO{(vt_{RaF{m=ZM z`5@*8O$0GN=&_6W5nN|Nj1bXJ!L*RY?4XGe0|ka5t_4F2RYOC;kZ91j7#W0CldAf) zsJlcZRijhce0GYl_X3I06m8bs8drV_woHzweb;KYI-cF@O>>P&Jepm}_I!`ADAO3z zB&KmD%kht9L*E4Cd$L};V)|xwU@x(s1s?Zor)^~y@84LG)mTi59h2m*IE~lud4&Bf z%k1~)Q0x~)iv2;~_lm@R7-q2_hb8up@E-0EY2UKFo|GWbqEp$GOnF-xvK-T`txZp5 zbJ<+2?n7$R_dC6dlO%8U%UQ}{(s8!JpA5M+Y|Dq4xw%G!E3N?I-Von|Kd(@7`)v&pnOe)@oA zI!>nUR_Y!_%e1#_&uP20biCDf{Q8#Z^zC%A)%VS^V`pkkyKFkW^r+i*eb4N4=pHiF fjxYYY(n-&*+MexNcE;cC*uAvUtJmC&{nq~%V-SIP literal 0 HcmV?d00001 diff --git a/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/zlib.dir/uncompr.c.o.d b/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/zlib.dir/uncompr.c.o.d new file mode 100644 index 0000000..cbd90b6 --- /dev/null +++ b/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/zlib.dir/uncompr.c.o.d @@ -0,0 +1,36 @@ +CMakeFiles/zlib.dir/uncompr.c.o: \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/zlib-1.3.1/uncompr.c \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/zlib-1.3.1/zlib.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/zlib-1.3.1/build-emcmake/zconf.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stddef.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stddef.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_header_macro.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_ptrdiff_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_size_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_wchar_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_null.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_max_align_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_offsetof.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/limits.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/limits.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/features.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/alltypes.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/limits.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/sys/types.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/endian.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/sys/select.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/stdarg.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stdarg.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdarg.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stdarg_header_macro.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stdarg___gnuc_va_list.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stdarg_va_list.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stdarg_va_arg.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stdarg___va_copy.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stdarg_va_copy.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/unistd.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/wasi/api.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stdint.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdint.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/stdint.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/posix.h diff --git a/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/zlib.dir/zutil.c.o b/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/zlib.dir/zutil.c.o new file mode 100644 index 0000000000000000000000000000000000000000..951ddda90fc773a749c4a623b7ca593c61b19947 GIT binary patch literal 1781 zcmZWqy^rHm5TEz_nY?7}{a)#=cos+(6eYL2`Pd81Vcji42ni(6i7x9nFF7ZUowJ=4 zn&{ZLlOxxzwZuPD`|4$u_YRE^}pIspwFb4$YP=ooielSUGg$mX17zV?58< zz`_{3uyhpdIk7f)k#7tv13kvlV{+4AUl4L|C5d1R$_b}Klp}FSnNlWan#p;|Qc;=4 zRjxgPdY zExu(Lj2qUrJzrF72YtJIo9`yp9^c`618bk}mnc{V{J>xy$z4g7P_m3#@}iZWuiz~9MTXI z%9j*5%Oq!+)lU~nrJrN{4>umh# zFTjc`5^{sC;)3*2xtb`r0HY0gCyqatL_2`d49Otc$lH_>jP)zR*vy^eNx;hAk16JrWp#R*?vlv*w2c)Q#r+(VKvuM=n~h@1Qq`%u7)Fy2s%CLf_jQgV0_=Kq zj6;6Cs!6N9x(vl@Uqe~-HC5QT_MK>}%sV>lDnBnyccU7G>3LKyg%I<<0G4PCI$nor z>rj0iYOF)eb?9Ury0ZdZl~#uTOKkyx@6s1mJ`(uitKNI{{;6D$RRY?+q7L{su7^kPw8z<>M aP}ztCj;#n>QAsYwA};H(*AFVj<2(Va8^ literal 0 HcmV?d00001 diff --git a/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/zlib.dir/zutil.c.o.d b/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/zlib.dir/zutil.c.o.d new file mode 100644 index 0000000..a2222c7 --- /dev/null +++ b/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/zlib.dir/zutil.c.o.d @@ -0,0 +1,49 @@ +CMakeFiles/zlib.dir/zutil.c.o: \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/zlib-1.3.1/zutil.c \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/zlib-1.3.1/zutil.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/zlib-1.3.1/zlib.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/zlib-1.3.1/build-emcmake/zconf.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stddef.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stddef.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_header_macro.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_ptrdiff_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_size_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_wchar_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_null.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_max_align_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_offsetof.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/limits.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/limits.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/features.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/alltypes.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/limits.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/sys/types.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/endian.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/sys/select.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/stdarg.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stdarg.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdarg.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stdarg_header_macro.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stdarg___gnuc_va_list.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stdarg_va_list.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stdarg_va_arg.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stdarg___va_copy.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stdarg_va_copy.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/unistd.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/wasi/api.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stdint.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdint.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/stdint.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/posix.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/string.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/string.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/strings.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/stdlib.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdlib.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/alloca.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/zlib-1.3.1/gzguts.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdio.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/fcntl.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/fcntl.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/errno.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/errno.h diff --git a/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/zlibstatic.dir/DependInfo.cmake b/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/zlibstatic.dir/DependInfo.cmake new file mode 100644 index 0000000..3516228 --- /dev/null +++ b/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/zlibstatic.dir/DependInfo.cmake @@ -0,0 +1,37 @@ + +# Consider dependencies only in project. +set(CMAKE_DEPENDS_IN_PROJECT_ONLY OFF) + +# The set of languages for which implicit dependencies are needed: +set(CMAKE_DEPENDS_LANGUAGES + ) + +# The set of dependency files which are needed: +set(CMAKE_DEPENDS_DEPENDENCY_FILES + "/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/adler32.c" "CMakeFiles/zlibstatic.dir/adler32.c.o" "gcc" "CMakeFiles/zlibstatic.dir/adler32.c.o.d" + "/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/compress.c" "CMakeFiles/zlibstatic.dir/compress.c.o" "gcc" "CMakeFiles/zlibstatic.dir/compress.c.o.d" + "/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/crc32.c" "CMakeFiles/zlibstatic.dir/crc32.c.o" "gcc" "CMakeFiles/zlibstatic.dir/crc32.c.o.d" + "/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/deflate.c" "CMakeFiles/zlibstatic.dir/deflate.c.o" "gcc" "CMakeFiles/zlibstatic.dir/deflate.c.o.d" + "/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/gzclose.c" "CMakeFiles/zlibstatic.dir/gzclose.c.o" "gcc" "CMakeFiles/zlibstatic.dir/gzclose.c.o.d" + "/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/gzlib.c" "CMakeFiles/zlibstatic.dir/gzlib.c.o" "gcc" "CMakeFiles/zlibstatic.dir/gzlib.c.o.d" + "/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/gzread.c" "CMakeFiles/zlibstatic.dir/gzread.c.o" "gcc" "CMakeFiles/zlibstatic.dir/gzread.c.o.d" + "/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/gzwrite.c" "CMakeFiles/zlibstatic.dir/gzwrite.c.o" "gcc" "CMakeFiles/zlibstatic.dir/gzwrite.c.o.d" + "/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/infback.c" "CMakeFiles/zlibstatic.dir/infback.c.o" "gcc" "CMakeFiles/zlibstatic.dir/infback.c.o.d" + "/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/inffast.c" "CMakeFiles/zlibstatic.dir/inffast.c.o" "gcc" "CMakeFiles/zlibstatic.dir/inffast.c.o.d" + "/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/inflate.c" "CMakeFiles/zlibstatic.dir/inflate.c.o" "gcc" "CMakeFiles/zlibstatic.dir/inflate.c.o.d" + "/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/inftrees.c" "CMakeFiles/zlibstatic.dir/inftrees.c.o" "gcc" "CMakeFiles/zlibstatic.dir/inftrees.c.o.d" + "/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/trees.c" "CMakeFiles/zlibstatic.dir/trees.c.o" "gcc" "CMakeFiles/zlibstatic.dir/trees.c.o.d" + "/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/uncompr.c" "CMakeFiles/zlibstatic.dir/uncompr.c.o" "gcc" "CMakeFiles/zlibstatic.dir/uncompr.c.o.d" + "/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/zutil.c" "CMakeFiles/zlibstatic.dir/zutil.c.o" "gcc" "CMakeFiles/zlibstatic.dir/zutil.c.o.d" + ) + +# Targets to which this target links which contain Fortran sources. +set(CMAKE_Fortran_TARGET_LINKED_INFO_FILES + ) + +# Targets to which this target links which contain Fortran sources. +set(CMAKE_Fortran_TARGET_FORWARD_LINKED_INFO_FILES + ) + +# Fortran module output directory. +set(CMAKE_Fortran_TARGET_MODULE_DIR "") diff --git a/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/zlibstatic.dir/adler32.c.o b/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/zlibstatic.dir/adler32.c.o new file mode 100644 index 0000000000000000000000000000000000000000..14ac6030cf380bb6f0822062a69defa91c784963 GIT binary patch literal 5938 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 CMakeFiles/zlibstatic.dir/adler32.c.i + +CMakeFiles/zlibstatic.dir/adler32.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Compiling C source to assembly CMakeFiles/zlibstatic.dir/adler32.c.s" + "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S "/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/adler32.c" -o CMakeFiles/zlibstatic.dir/adler32.c.s + +CMakeFiles/zlibstatic.dir/compress.c.o: CMakeFiles/zlibstatic.dir/flags.make +CMakeFiles/zlibstatic.dir/compress.c.o: CMakeFiles/zlibstatic.dir/includes_C.rsp +CMakeFiles/zlibstatic.dir/compress.c.o: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/zlib-1.3.1/compress.c +CMakeFiles/zlibstatic.dir/compress.c.o: CMakeFiles/zlibstatic.dir/compiler_depend.ts + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_2) "Building C object CMakeFiles/zlibstatic.dir/compress.c.o" + "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -MD -MT CMakeFiles/zlibstatic.dir/compress.c.o -MF CMakeFiles/zlibstatic.dir/compress.c.o.d -o CMakeFiles/zlibstatic.dir/compress.c.o -c "/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/compress.c" + +CMakeFiles/zlibstatic.dir/compress.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Preprocessing C source to CMakeFiles/zlibstatic.dir/compress.c.i" + "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E "/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/compress.c" > CMakeFiles/zlibstatic.dir/compress.c.i + +CMakeFiles/zlibstatic.dir/compress.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Compiling C source to assembly CMakeFiles/zlibstatic.dir/compress.c.s" + "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S "/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/compress.c" -o CMakeFiles/zlibstatic.dir/compress.c.s + +CMakeFiles/zlibstatic.dir/crc32.c.o: CMakeFiles/zlibstatic.dir/flags.make +CMakeFiles/zlibstatic.dir/crc32.c.o: CMakeFiles/zlibstatic.dir/includes_C.rsp +CMakeFiles/zlibstatic.dir/crc32.c.o: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/zlib-1.3.1/crc32.c +CMakeFiles/zlibstatic.dir/crc32.c.o: CMakeFiles/zlibstatic.dir/compiler_depend.ts + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_3) "Building C object CMakeFiles/zlibstatic.dir/crc32.c.o" + "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -MD -MT CMakeFiles/zlibstatic.dir/crc32.c.o -MF CMakeFiles/zlibstatic.dir/crc32.c.o.d -o CMakeFiles/zlibstatic.dir/crc32.c.o -c "/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/crc32.c" + +CMakeFiles/zlibstatic.dir/crc32.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Preprocessing C source to CMakeFiles/zlibstatic.dir/crc32.c.i" + "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E "/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/crc32.c" > CMakeFiles/zlibstatic.dir/crc32.c.i + +CMakeFiles/zlibstatic.dir/crc32.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Compiling C source to assembly CMakeFiles/zlibstatic.dir/crc32.c.s" + "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S "/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/crc32.c" -o CMakeFiles/zlibstatic.dir/crc32.c.s + +CMakeFiles/zlibstatic.dir/deflate.c.o: CMakeFiles/zlibstatic.dir/flags.make +CMakeFiles/zlibstatic.dir/deflate.c.o: CMakeFiles/zlibstatic.dir/includes_C.rsp +CMakeFiles/zlibstatic.dir/deflate.c.o: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/zlib-1.3.1/deflate.c +CMakeFiles/zlibstatic.dir/deflate.c.o: CMakeFiles/zlibstatic.dir/compiler_depend.ts + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_4) "Building C object CMakeFiles/zlibstatic.dir/deflate.c.o" + "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -MD -MT CMakeFiles/zlibstatic.dir/deflate.c.o -MF CMakeFiles/zlibstatic.dir/deflate.c.o.d -o CMakeFiles/zlibstatic.dir/deflate.c.o -c "/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/deflate.c" + +CMakeFiles/zlibstatic.dir/deflate.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Preprocessing C source to CMakeFiles/zlibstatic.dir/deflate.c.i" + "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E "/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/deflate.c" > CMakeFiles/zlibstatic.dir/deflate.c.i + +CMakeFiles/zlibstatic.dir/deflate.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Compiling C source to assembly CMakeFiles/zlibstatic.dir/deflate.c.s" + "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S "/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/deflate.c" -o CMakeFiles/zlibstatic.dir/deflate.c.s + +CMakeFiles/zlibstatic.dir/gzclose.c.o: CMakeFiles/zlibstatic.dir/flags.make +CMakeFiles/zlibstatic.dir/gzclose.c.o: CMakeFiles/zlibstatic.dir/includes_C.rsp +CMakeFiles/zlibstatic.dir/gzclose.c.o: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/zlib-1.3.1/gzclose.c +CMakeFiles/zlibstatic.dir/gzclose.c.o: CMakeFiles/zlibstatic.dir/compiler_depend.ts + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_5) "Building C object CMakeFiles/zlibstatic.dir/gzclose.c.o" + "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -MD -MT CMakeFiles/zlibstatic.dir/gzclose.c.o -MF CMakeFiles/zlibstatic.dir/gzclose.c.o.d -o CMakeFiles/zlibstatic.dir/gzclose.c.o -c "/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/gzclose.c" + +CMakeFiles/zlibstatic.dir/gzclose.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Preprocessing C source to CMakeFiles/zlibstatic.dir/gzclose.c.i" + "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E "/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/gzclose.c" > CMakeFiles/zlibstatic.dir/gzclose.c.i + +CMakeFiles/zlibstatic.dir/gzclose.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Compiling C source to assembly CMakeFiles/zlibstatic.dir/gzclose.c.s" + "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S "/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/gzclose.c" -o CMakeFiles/zlibstatic.dir/gzclose.c.s + +CMakeFiles/zlibstatic.dir/gzlib.c.o: CMakeFiles/zlibstatic.dir/flags.make +CMakeFiles/zlibstatic.dir/gzlib.c.o: CMakeFiles/zlibstatic.dir/includes_C.rsp +CMakeFiles/zlibstatic.dir/gzlib.c.o: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/zlib-1.3.1/gzlib.c +CMakeFiles/zlibstatic.dir/gzlib.c.o: CMakeFiles/zlibstatic.dir/compiler_depend.ts + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_6) "Building C object CMakeFiles/zlibstatic.dir/gzlib.c.o" + "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -MD -MT CMakeFiles/zlibstatic.dir/gzlib.c.o -MF CMakeFiles/zlibstatic.dir/gzlib.c.o.d -o CMakeFiles/zlibstatic.dir/gzlib.c.o -c "/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/gzlib.c" + +CMakeFiles/zlibstatic.dir/gzlib.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Preprocessing C source to CMakeFiles/zlibstatic.dir/gzlib.c.i" + "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E "/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/gzlib.c" > CMakeFiles/zlibstatic.dir/gzlib.c.i + +CMakeFiles/zlibstatic.dir/gzlib.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Compiling C source to assembly CMakeFiles/zlibstatic.dir/gzlib.c.s" + "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S "/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/gzlib.c" -o CMakeFiles/zlibstatic.dir/gzlib.c.s + +CMakeFiles/zlibstatic.dir/gzread.c.o: CMakeFiles/zlibstatic.dir/flags.make +CMakeFiles/zlibstatic.dir/gzread.c.o: CMakeFiles/zlibstatic.dir/includes_C.rsp +CMakeFiles/zlibstatic.dir/gzread.c.o: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/zlib-1.3.1/gzread.c +CMakeFiles/zlibstatic.dir/gzread.c.o: CMakeFiles/zlibstatic.dir/compiler_depend.ts + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_7) "Building C object CMakeFiles/zlibstatic.dir/gzread.c.o" + "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -MD -MT CMakeFiles/zlibstatic.dir/gzread.c.o -MF CMakeFiles/zlibstatic.dir/gzread.c.o.d -o CMakeFiles/zlibstatic.dir/gzread.c.o -c "/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/gzread.c" + +CMakeFiles/zlibstatic.dir/gzread.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Preprocessing C source to CMakeFiles/zlibstatic.dir/gzread.c.i" + "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E "/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/gzread.c" > CMakeFiles/zlibstatic.dir/gzread.c.i + +CMakeFiles/zlibstatic.dir/gzread.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Compiling C source to assembly CMakeFiles/zlibstatic.dir/gzread.c.s" + "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S "/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/gzread.c" -o CMakeFiles/zlibstatic.dir/gzread.c.s + +CMakeFiles/zlibstatic.dir/gzwrite.c.o: CMakeFiles/zlibstatic.dir/flags.make +CMakeFiles/zlibstatic.dir/gzwrite.c.o: CMakeFiles/zlibstatic.dir/includes_C.rsp +CMakeFiles/zlibstatic.dir/gzwrite.c.o: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/zlib-1.3.1/gzwrite.c +CMakeFiles/zlibstatic.dir/gzwrite.c.o: CMakeFiles/zlibstatic.dir/compiler_depend.ts + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_8) "Building C object CMakeFiles/zlibstatic.dir/gzwrite.c.o" + "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -MD -MT CMakeFiles/zlibstatic.dir/gzwrite.c.o -MF CMakeFiles/zlibstatic.dir/gzwrite.c.o.d -o CMakeFiles/zlibstatic.dir/gzwrite.c.o -c "/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/gzwrite.c" + +CMakeFiles/zlibstatic.dir/gzwrite.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Preprocessing C source to CMakeFiles/zlibstatic.dir/gzwrite.c.i" + "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E "/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/gzwrite.c" > CMakeFiles/zlibstatic.dir/gzwrite.c.i + +CMakeFiles/zlibstatic.dir/gzwrite.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Compiling C source to assembly CMakeFiles/zlibstatic.dir/gzwrite.c.s" + "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S "/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/gzwrite.c" -o CMakeFiles/zlibstatic.dir/gzwrite.c.s + +CMakeFiles/zlibstatic.dir/inflate.c.o: CMakeFiles/zlibstatic.dir/flags.make +CMakeFiles/zlibstatic.dir/inflate.c.o: CMakeFiles/zlibstatic.dir/includes_C.rsp +CMakeFiles/zlibstatic.dir/inflate.c.o: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/zlib-1.3.1/inflate.c +CMakeFiles/zlibstatic.dir/inflate.c.o: CMakeFiles/zlibstatic.dir/compiler_depend.ts + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_9) "Building C object CMakeFiles/zlibstatic.dir/inflate.c.o" + "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -MD -MT CMakeFiles/zlibstatic.dir/inflate.c.o -MF CMakeFiles/zlibstatic.dir/inflate.c.o.d -o CMakeFiles/zlibstatic.dir/inflate.c.o -c "/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/inflate.c" + +CMakeFiles/zlibstatic.dir/inflate.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Preprocessing C source to CMakeFiles/zlibstatic.dir/inflate.c.i" + "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E "/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/inflate.c" > CMakeFiles/zlibstatic.dir/inflate.c.i + +CMakeFiles/zlibstatic.dir/inflate.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Compiling C source to assembly CMakeFiles/zlibstatic.dir/inflate.c.s" + "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S "/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/inflate.c" -o CMakeFiles/zlibstatic.dir/inflate.c.s + +CMakeFiles/zlibstatic.dir/infback.c.o: CMakeFiles/zlibstatic.dir/flags.make +CMakeFiles/zlibstatic.dir/infback.c.o: CMakeFiles/zlibstatic.dir/includes_C.rsp +CMakeFiles/zlibstatic.dir/infback.c.o: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/zlib-1.3.1/infback.c +CMakeFiles/zlibstatic.dir/infback.c.o: CMakeFiles/zlibstatic.dir/compiler_depend.ts + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_10) "Building C object CMakeFiles/zlibstatic.dir/infback.c.o" + "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -MD -MT CMakeFiles/zlibstatic.dir/infback.c.o -MF CMakeFiles/zlibstatic.dir/infback.c.o.d -o CMakeFiles/zlibstatic.dir/infback.c.o -c "/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/infback.c" + +CMakeFiles/zlibstatic.dir/infback.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Preprocessing C source to CMakeFiles/zlibstatic.dir/infback.c.i" + "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E "/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/infback.c" > CMakeFiles/zlibstatic.dir/infback.c.i + +CMakeFiles/zlibstatic.dir/infback.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Compiling C source to assembly CMakeFiles/zlibstatic.dir/infback.c.s" + "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S "/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/infback.c" -o CMakeFiles/zlibstatic.dir/infback.c.s + +CMakeFiles/zlibstatic.dir/inftrees.c.o: CMakeFiles/zlibstatic.dir/flags.make +CMakeFiles/zlibstatic.dir/inftrees.c.o: CMakeFiles/zlibstatic.dir/includes_C.rsp +CMakeFiles/zlibstatic.dir/inftrees.c.o: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/zlib-1.3.1/inftrees.c +CMakeFiles/zlibstatic.dir/inftrees.c.o: CMakeFiles/zlibstatic.dir/compiler_depend.ts + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_11) "Building C object CMakeFiles/zlibstatic.dir/inftrees.c.o" + "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -MD -MT CMakeFiles/zlibstatic.dir/inftrees.c.o -MF CMakeFiles/zlibstatic.dir/inftrees.c.o.d -o CMakeFiles/zlibstatic.dir/inftrees.c.o -c "/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/inftrees.c" + +CMakeFiles/zlibstatic.dir/inftrees.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Preprocessing C source to CMakeFiles/zlibstatic.dir/inftrees.c.i" + "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E "/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/inftrees.c" > CMakeFiles/zlibstatic.dir/inftrees.c.i + +CMakeFiles/zlibstatic.dir/inftrees.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Compiling C source to assembly CMakeFiles/zlibstatic.dir/inftrees.c.s" + "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S "/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/inftrees.c" -o CMakeFiles/zlibstatic.dir/inftrees.c.s + +CMakeFiles/zlibstatic.dir/inffast.c.o: CMakeFiles/zlibstatic.dir/flags.make +CMakeFiles/zlibstatic.dir/inffast.c.o: CMakeFiles/zlibstatic.dir/includes_C.rsp +CMakeFiles/zlibstatic.dir/inffast.c.o: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/zlib-1.3.1/inffast.c +CMakeFiles/zlibstatic.dir/inffast.c.o: CMakeFiles/zlibstatic.dir/compiler_depend.ts + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_12) "Building C object CMakeFiles/zlibstatic.dir/inffast.c.o" + "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -MD -MT CMakeFiles/zlibstatic.dir/inffast.c.o -MF CMakeFiles/zlibstatic.dir/inffast.c.o.d -o CMakeFiles/zlibstatic.dir/inffast.c.o -c "/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/inffast.c" + +CMakeFiles/zlibstatic.dir/inffast.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Preprocessing C source to CMakeFiles/zlibstatic.dir/inffast.c.i" + "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E "/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/inffast.c" > CMakeFiles/zlibstatic.dir/inffast.c.i + +CMakeFiles/zlibstatic.dir/inffast.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Compiling C source to assembly CMakeFiles/zlibstatic.dir/inffast.c.s" + "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S "/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/inffast.c" -o CMakeFiles/zlibstatic.dir/inffast.c.s + +CMakeFiles/zlibstatic.dir/trees.c.o: CMakeFiles/zlibstatic.dir/flags.make +CMakeFiles/zlibstatic.dir/trees.c.o: CMakeFiles/zlibstatic.dir/includes_C.rsp +CMakeFiles/zlibstatic.dir/trees.c.o: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/zlib-1.3.1/trees.c +CMakeFiles/zlibstatic.dir/trees.c.o: CMakeFiles/zlibstatic.dir/compiler_depend.ts + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_13) "Building C object CMakeFiles/zlibstatic.dir/trees.c.o" + "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -MD -MT CMakeFiles/zlibstatic.dir/trees.c.o -MF CMakeFiles/zlibstatic.dir/trees.c.o.d -o CMakeFiles/zlibstatic.dir/trees.c.o -c "/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/trees.c" + +CMakeFiles/zlibstatic.dir/trees.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Preprocessing C source to CMakeFiles/zlibstatic.dir/trees.c.i" + "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E "/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/trees.c" > CMakeFiles/zlibstatic.dir/trees.c.i + +CMakeFiles/zlibstatic.dir/trees.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Compiling C source to assembly CMakeFiles/zlibstatic.dir/trees.c.s" + "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S "/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/trees.c" -o CMakeFiles/zlibstatic.dir/trees.c.s + +CMakeFiles/zlibstatic.dir/uncompr.c.o: CMakeFiles/zlibstatic.dir/flags.make +CMakeFiles/zlibstatic.dir/uncompr.c.o: CMakeFiles/zlibstatic.dir/includes_C.rsp +CMakeFiles/zlibstatic.dir/uncompr.c.o: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/zlib-1.3.1/uncompr.c +CMakeFiles/zlibstatic.dir/uncompr.c.o: CMakeFiles/zlibstatic.dir/compiler_depend.ts + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_14) "Building C object CMakeFiles/zlibstatic.dir/uncompr.c.o" + "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -MD -MT CMakeFiles/zlibstatic.dir/uncompr.c.o -MF CMakeFiles/zlibstatic.dir/uncompr.c.o.d -o CMakeFiles/zlibstatic.dir/uncompr.c.o -c "/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/uncompr.c" + +CMakeFiles/zlibstatic.dir/uncompr.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Preprocessing C source to CMakeFiles/zlibstatic.dir/uncompr.c.i" + "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E "/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/uncompr.c" > CMakeFiles/zlibstatic.dir/uncompr.c.i + +CMakeFiles/zlibstatic.dir/uncompr.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Compiling C source to assembly CMakeFiles/zlibstatic.dir/uncompr.c.s" + "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S "/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/uncompr.c" -o CMakeFiles/zlibstatic.dir/uncompr.c.s + +CMakeFiles/zlibstatic.dir/zutil.c.o: CMakeFiles/zlibstatic.dir/flags.make +CMakeFiles/zlibstatic.dir/zutil.c.o: CMakeFiles/zlibstatic.dir/includes_C.rsp +CMakeFiles/zlibstatic.dir/zutil.c.o: /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/zlib-1.3.1/zutil.c +CMakeFiles/zlibstatic.dir/zutil.c.o: CMakeFiles/zlibstatic.dir/compiler_depend.ts + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_15) "Building C object CMakeFiles/zlibstatic.dir/zutil.c.o" + "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -MD -MT CMakeFiles/zlibstatic.dir/zutil.c.o -MF CMakeFiles/zlibstatic.dir/zutil.c.o.d -o CMakeFiles/zlibstatic.dir/zutil.c.o -c "/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/zutil.c" + +CMakeFiles/zlibstatic.dir/zutil.c.i: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Preprocessing C source to CMakeFiles/zlibstatic.dir/zutil.c.i" + "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -E "/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/zutil.c" > CMakeFiles/zlibstatic.dir/zutil.c.i + +CMakeFiles/zlibstatic.dir/zutil.c.s: cmake_force + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green "Compiling C source to assembly CMakeFiles/zlibstatic.dir/zutil.c.s" + "/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc" $(C_DEFINES) $(C_INCLUDES) $(C_FLAGS) -S "/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/zutil.c" -o CMakeFiles/zlibstatic.dir/zutil.c.s + +# Object files for target zlibstatic +zlibstatic_OBJECTS = \ +"CMakeFiles/zlibstatic.dir/adler32.c.o" \ +"CMakeFiles/zlibstatic.dir/compress.c.o" \ +"CMakeFiles/zlibstatic.dir/crc32.c.o" \ +"CMakeFiles/zlibstatic.dir/deflate.c.o" \ +"CMakeFiles/zlibstatic.dir/gzclose.c.o" \ +"CMakeFiles/zlibstatic.dir/gzlib.c.o" \ +"CMakeFiles/zlibstatic.dir/gzread.c.o" \ +"CMakeFiles/zlibstatic.dir/gzwrite.c.o" \ +"CMakeFiles/zlibstatic.dir/inflate.c.o" \ +"CMakeFiles/zlibstatic.dir/infback.c.o" \ +"CMakeFiles/zlibstatic.dir/inftrees.c.o" \ +"CMakeFiles/zlibstatic.dir/inffast.c.o" \ +"CMakeFiles/zlibstatic.dir/trees.c.o" \ +"CMakeFiles/zlibstatic.dir/uncompr.c.o" \ +"CMakeFiles/zlibstatic.dir/zutil.c.o" + +# External object files for target zlibstatic +zlibstatic_EXTERNAL_OBJECTS = + +libz.a: CMakeFiles/zlibstatic.dir/adler32.c.o +libz.a: CMakeFiles/zlibstatic.dir/compress.c.o +libz.a: CMakeFiles/zlibstatic.dir/crc32.c.o +libz.a: CMakeFiles/zlibstatic.dir/deflate.c.o +libz.a: CMakeFiles/zlibstatic.dir/gzclose.c.o +libz.a: CMakeFiles/zlibstatic.dir/gzlib.c.o +libz.a: CMakeFiles/zlibstatic.dir/gzread.c.o +libz.a: CMakeFiles/zlibstatic.dir/gzwrite.c.o +libz.a: CMakeFiles/zlibstatic.dir/inflate.c.o +libz.a: CMakeFiles/zlibstatic.dir/infback.c.o +libz.a: CMakeFiles/zlibstatic.dir/inftrees.c.o +libz.a: CMakeFiles/zlibstatic.dir/inffast.c.o +libz.a: CMakeFiles/zlibstatic.dir/trees.c.o +libz.a: CMakeFiles/zlibstatic.dir/uncompr.c.o +libz.a: CMakeFiles/zlibstatic.dir/zutil.c.o +libz.a: CMakeFiles/zlibstatic.dir/build.make +libz.a: CMakeFiles/zlibstatic.dir/link.txt + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --green --bold --progress-dir="/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles" --progress-num=$(CMAKE_PROGRESS_16) "Linking C static library libz.a" + $(CMAKE_COMMAND) -P CMakeFiles/zlibstatic.dir/cmake_clean_target.cmake + $(CMAKE_COMMAND) -E cmake_link_script CMakeFiles/zlibstatic.dir/link.txt --verbose=$(VERBOSE) + +# Rule to build all files generated by this target. +CMakeFiles/zlibstatic.dir/build: libz.a +.PHONY : CMakeFiles/zlibstatic.dir/build + +CMakeFiles/zlibstatic.dir/clean: + $(CMAKE_COMMAND) -P CMakeFiles/zlibstatic.dir/cmake_clean.cmake +.PHONY : CMakeFiles/zlibstatic.dir/clean + +CMakeFiles/zlibstatic.dir/depend: + cd "/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/build-emcmake" && $(CMAKE_COMMAND) -E cmake_depends "Unix Makefiles" "/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1" "/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1" "/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/build-emcmake" "/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/build-emcmake" "/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/zlibstatic.dir/DependInfo.cmake" "--color=$(COLOR)" +.PHONY : CMakeFiles/zlibstatic.dir/depend + diff --git a/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/zlibstatic.dir/cmake_clean.cmake b/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/zlibstatic.dir/cmake_clean.cmake new file mode 100644 index 0000000..ee2f616 --- /dev/null +++ b/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/zlibstatic.dir/cmake_clean.cmake @@ -0,0 +1,39 @@ +file(REMOVE_RECURSE + "CMakeFiles/zlibstatic.dir/adler32.c.o" + "CMakeFiles/zlibstatic.dir/adler32.c.o.d" + "CMakeFiles/zlibstatic.dir/compress.c.o" + "CMakeFiles/zlibstatic.dir/compress.c.o.d" + "CMakeFiles/zlibstatic.dir/crc32.c.o" + "CMakeFiles/zlibstatic.dir/crc32.c.o.d" + "CMakeFiles/zlibstatic.dir/deflate.c.o" + "CMakeFiles/zlibstatic.dir/deflate.c.o.d" + "CMakeFiles/zlibstatic.dir/gzclose.c.o" + "CMakeFiles/zlibstatic.dir/gzclose.c.o.d" + "CMakeFiles/zlibstatic.dir/gzlib.c.o" + "CMakeFiles/zlibstatic.dir/gzlib.c.o.d" + "CMakeFiles/zlibstatic.dir/gzread.c.o" + "CMakeFiles/zlibstatic.dir/gzread.c.o.d" + "CMakeFiles/zlibstatic.dir/gzwrite.c.o" + "CMakeFiles/zlibstatic.dir/gzwrite.c.o.d" + "CMakeFiles/zlibstatic.dir/infback.c.o" + "CMakeFiles/zlibstatic.dir/infback.c.o.d" + "CMakeFiles/zlibstatic.dir/inffast.c.o" + "CMakeFiles/zlibstatic.dir/inffast.c.o.d" + "CMakeFiles/zlibstatic.dir/inflate.c.o" + "CMakeFiles/zlibstatic.dir/inflate.c.o.d" + "CMakeFiles/zlibstatic.dir/inftrees.c.o" + "CMakeFiles/zlibstatic.dir/inftrees.c.o.d" + "CMakeFiles/zlibstatic.dir/trees.c.o" + "CMakeFiles/zlibstatic.dir/trees.c.o.d" + "CMakeFiles/zlibstatic.dir/uncompr.c.o" + "CMakeFiles/zlibstatic.dir/uncompr.c.o.d" + "CMakeFiles/zlibstatic.dir/zutil.c.o" + "CMakeFiles/zlibstatic.dir/zutil.c.o.d" + "libz.a" + "libz.pdb" +) + +# Per-language clean rules from dependency scanning. +foreach(lang C) + include(CMakeFiles/zlibstatic.dir/cmake_clean_${lang}.cmake OPTIONAL) +endforeach() diff --git a/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/zlibstatic.dir/cmake_clean_target.cmake b/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/zlibstatic.dir/cmake_clean_target.cmake new file mode 100644 index 0000000..5cdc2a2 --- /dev/null +++ b/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/zlibstatic.dir/cmake_clean_target.cmake @@ -0,0 +1,3 @@ +file(REMOVE_RECURSE + "libz.a" +) diff --git a/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/zlibstatic.dir/compiler_depend.make b/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/zlibstatic.dir/compiler_depend.make new file mode 100644 index 0000000..aea1303 --- /dev/null +++ b/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/zlibstatic.dir/compiler_depend.make @@ -0,0 +1,2 @@ +# Empty compiler generated dependencies file for zlibstatic. +# This may be replaced when dependencies are built. diff --git a/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/zlibstatic.dir/compiler_depend.ts b/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/zlibstatic.dir/compiler_depend.ts new file mode 100644 index 0000000..59b5713 --- /dev/null +++ b/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/zlibstatic.dir/compiler_depend.ts @@ -0,0 +1,2 @@ +# CMAKE generated file: DO NOT EDIT! +# Timestamp file for compiler generated dependencies management for zlibstatic. diff --git a/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/zlibstatic.dir/compress.c.o b/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/zlibstatic.dir/compress.c.o new file mode 100644 index 0000000000000000000000000000000000000000..2da11630619d0a5f246cf215103ae764f6a35450 GIT binary patch literal 1647 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 WTwUSl&RoyHemyPY+v{>u3jYsqw`&9d literal 0 HcmV?d00001 diff --git a/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/zlibstatic.dir/deflate.c.o.d b/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/zlibstatic.dir/deflate.c.o.d new file mode 100644 index 0000000..5c0ea31 --- /dev/null +++ b/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/zlibstatic.dir/deflate.c.o.d @@ -0,0 +1,44 @@ +CMakeFiles/zlibstatic.dir/deflate.c.o: \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/zlib-1.3.1/deflate.c \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/zlib-1.3.1/deflate.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/zlib-1.3.1/zutil.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/zlib-1.3.1/zlib.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/zlib-1.3.1/build-emcmake/zconf.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stddef.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stddef.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_header_macro.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_ptrdiff_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_size_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_wchar_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_null.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_max_align_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_offsetof.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/limits.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/limits.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/features.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/alltypes.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/limits.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/sys/types.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/endian.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/sys/select.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/stdarg.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stdarg.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdarg.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stdarg_header_macro.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stdarg___gnuc_va_list.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stdarg_va_list.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stdarg_va_arg.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stdarg___va_copy.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stdarg_va_copy.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/unistd.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/wasi/api.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stdint.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdint.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/stdint.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/posix.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/string.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/string.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/strings.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/stdlib.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdlib.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/alloca.h diff --git a/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/zlibstatic.dir/depend.make b/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/zlibstatic.dir/depend.make new file mode 100644 index 0000000..2226157 --- /dev/null +++ b/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/zlibstatic.dir/depend.make @@ -0,0 +1,2 @@ +# Empty dependencies file for zlibstatic. +# This may be replaced when dependencies are built. diff --git a/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/zlibstatic.dir/flags.make b/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/zlibstatic.dir/flags.make new file mode 100644 index 0000000..398add8 --- /dev/null +++ b/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/zlibstatic.dir/flags.make @@ -0,0 +1,10 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.28 + +# compile C with /home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emcc +C_DEFINES = -D_LARGEFILE64_SOURCE=1 + +C_INCLUDES = @CMakeFiles/zlibstatic.dir/includes_C.rsp + +C_FLAGS = + diff --git a/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/zlibstatic.dir/gzclose.c.o b/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/zlibstatic.dir/gzclose.c.o new file mode 100644 index 0000000000000000000000000000000000000000..f895a9ba7b3f76118dcb4e4f3679d6893b08de23 GIT binary patch literal 718 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 literal 0 HcmV?d00001 diff --git a/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/zlibstatic.dir/gzlib.c.o.d b/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/zlibstatic.dir/gzlib.c.o.d new file mode 100644 index 0000000..e64069c --- /dev/null +++ b/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/zlibstatic.dir/gzlib.c.o.d @@ -0,0 +1,48 @@ +CMakeFiles/zlibstatic.dir/gzlib.c.o: \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/zlib-1.3.1/gzlib.c \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/zlib-1.3.1/gzguts.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdio.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/wasi/api.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stddef.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stddef.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_header_macro.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_ptrdiff_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_size_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_wchar_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_null.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_max_align_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_offsetof.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stdint.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdint.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/alltypes.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/stdint.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/features.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/zlib-1.3.1/zlib.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/zlib-1.3.1/build-emcmake/zconf.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/limits.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/limits.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/limits.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/sys/types.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/endian.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/sys/select.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/stdarg.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stdarg.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdarg.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stdarg_header_macro.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stdarg___gnuc_va_list.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stdarg_va_list.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stdarg_va_arg.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stdarg___va_copy.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stdarg_va_copy.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/unistd.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/posix.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/string.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/string.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/strings.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/stdlib.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdlib.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/alloca.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/fcntl.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/fcntl.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/errno.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/errno.h diff --git a/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/zlibstatic.dir/gzread.c.o b/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/zlibstatic.dir/gzread.c.o new file mode 100644 index 0000000000000000000000000000000000000000..fc6394b0e3fcbfc6cc3c44a869eb1c036fdc8795 GIT binary patch literal 12516 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 YFHEL8^H-MA%kAOi*_nmT^nLmN1uM9?CIA2c literal 0 HcmV?d00001 diff --git a/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/zlibstatic.dir/gzwrite.c.o.d b/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/zlibstatic.dir/gzwrite.c.o.d new file mode 100644 index 0000000..09bf7c5 --- /dev/null +++ b/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/zlibstatic.dir/gzwrite.c.o.d @@ -0,0 +1,48 @@ +CMakeFiles/zlibstatic.dir/gzwrite.c.o: \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/zlib-1.3.1/gzwrite.c \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/zlib-1.3.1/gzguts.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdio.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/wasi/api.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stddef.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stddef.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_header_macro.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_ptrdiff_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_size_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_wchar_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_null.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_max_align_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_offsetof.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stdint.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdint.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/alltypes.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/stdint.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/features.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/zlib-1.3.1/zlib.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/zlib-1.3.1/build-emcmake/zconf.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/limits.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/limits.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/limits.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/sys/types.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/endian.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/sys/select.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/stdarg.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stdarg.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdarg.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stdarg_header_macro.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stdarg___gnuc_va_list.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stdarg_va_list.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stdarg_va_arg.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stdarg___va_copy.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stdarg_va_copy.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/unistd.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/posix.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/string.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/string.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/strings.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/stdlib.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdlib.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/alloca.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/fcntl.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/fcntl.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/errno.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/errno.h diff --git a/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/zlibstatic.dir/infback.c.o b/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/zlibstatic.dir/infback.c.o new file mode 100644 index 0000000000000000000000000000000000000000..2925856d3368513b5ea072378f76a9b2844410b1 GIT binary patch literal 20892 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 HJiYK|bk5d& literal 0 HcmV?d00001 diff --git a/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/zlibstatic.dir/inflate.c.o.d b/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/zlibstatic.dir/inflate.c.o.d new file mode 100644 index 0000000..3b685b0 --- /dev/null +++ b/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/zlibstatic.dir/inflate.c.o.d @@ -0,0 +1,47 @@ +CMakeFiles/zlibstatic.dir/inflate.c.o: \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/zlib-1.3.1/inflate.c \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/zlib-1.3.1/zutil.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/zlib-1.3.1/zlib.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/zlib-1.3.1/build-emcmake/zconf.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stddef.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stddef.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_header_macro.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_ptrdiff_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_size_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_wchar_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_null.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_max_align_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_offsetof.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/limits.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/limits.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/features.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/alltypes.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/limits.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/sys/types.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/endian.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/sys/select.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/stdarg.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stdarg.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdarg.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stdarg_header_macro.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stdarg___gnuc_va_list.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stdarg_va_list.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stdarg_va_arg.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stdarg___va_copy.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stdarg_va_copy.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/unistd.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/wasi/api.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stdint.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdint.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/stdint.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/posix.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/string.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/string.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/strings.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/stdlib.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdlib.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/alloca.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/zlib-1.3.1/inftrees.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/zlib-1.3.1/inflate.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/zlib-1.3.1/inffast.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/zlib-1.3.1/inffixed.h diff --git a/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/zlibstatic.dir/inftrees.c.o b/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/zlibstatic.dir/inftrees.c.o new file mode 100644 index 0000000000000000000000000000000000000000..bb093e1d216721b866f5e0171e1c70d6d612214d GIT binary patch literal 6596 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 X&dUm?#kv)Qi&Lu>=XT6X<1G9af0ziZ literal 0 HcmV?d00001 diff --git a/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/zlibstatic.dir/inftrees.c.o.d b/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/zlibstatic.dir/inftrees.c.o.d new file mode 100644 index 0000000..de0524e --- /dev/null +++ b/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/zlibstatic.dir/inftrees.c.o.d @@ -0,0 +1,44 @@ +CMakeFiles/zlibstatic.dir/inftrees.c.o: \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/zlib-1.3.1/inftrees.c \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/zlib-1.3.1/zutil.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/zlib-1.3.1/zlib.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/zlib-1.3.1/build-emcmake/zconf.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stddef.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stddef.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_header_macro.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_ptrdiff_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_size_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_wchar_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_null.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_max_align_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_offsetof.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/limits.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/limits.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/features.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/alltypes.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/limits.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/sys/types.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/endian.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/sys/select.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/stdarg.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stdarg.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdarg.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stdarg_header_macro.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stdarg___gnuc_va_list.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stdarg_va_list.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stdarg_va_arg.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stdarg___va_copy.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stdarg_va_copy.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/unistd.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/wasi/api.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stdint.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdint.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/stdint.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/posix.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/string.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/string.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/strings.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/stdlib.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdlib.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/alloca.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/zlib-1.3.1/inftrees.h diff --git a/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/zlibstatic.dir/link.txt b/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/zlibstatic.dir/link.txt new file mode 100644 index 0000000..c801566 --- /dev/null +++ b/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/zlibstatic.dir/link.txt @@ -0,0 +1,2 @@ +"/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emar" qc libz.a CMakeFiles/zlibstatic.dir/adler32.c.o CMakeFiles/zlibstatic.dir/compress.c.o CMakeFiles/zlibstatic.dir/crc32.c.o CMakeFiles/zlibstatic.dir/deflate.c.o CMakeFiles/zlibstatic.dir/gzclose.c.o CMakeFiles/zlibstatic.dir/gzlib.c.o CMakeFiles/zlibstatic.dir/gzread.c.o CMakeFiles/zlibstatic.dir/gzwrite.c.o CMakeFiles/zlibstatic.dir/inflate.c.o CMakeFiles/zlibstatic.dir/infback.c.o CMakeFiles/zlibstatic.dir/inftrees.c.o CMakeFiles/zlibstatic.dir/inffast.c.o CMakeFiles/zlibstatic.dir/trees.c.o CMakeFiles/zlibstatic.dir/uncompr.c.o CMakeFiles/zlibstatic.dir/zutil.c.o +"/home/romazan/Рабочий Ñтол/emsdk/upstream/emscripten/emranlib" libz.a diff --git a/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/zlibstatic.dir/progress.make b/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/zlibstatic.dir/progress.make new file mode 100644 index 0000000..83845bc --- /dev/null +++ b/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/zlibstatic.dir/progress.make @@ -0,0 +1,17 @@ +CMAKE_PROGRESS_1 = 25 +CMAKE_PROGRESS_2 = 26 +CMAKE_PROGRESS_3 = 27 +CMAKE_PROGRESS_4 = 28 +CMAKE_PROGRESS_5 = 29 +CMAKE_PROGRESS_6 = 30 +CMAKE_PROGRESS_7 = 31 +CMAKE_PROGRESS_8 = 32 +CMAKE_PROGRESS_9 = 33 +CMAKE_PROGRESS_10 = 34 +CMAKE_PROGRESS_11 = 35 +CMAKE_PROGRESS_12 = 36 +CMAKE_PROGRESS_13 = 37 +CMAKE_PROGRESS_14 = 38 +CMAKE_PROGRESS_15 = 39 +CMAKE_PROGRESS_16 = 40 + diff --git a/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/zlibstatic.dir/trees.c.o b/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/zlibstatic.dir/trees.c.o new file mode 100644 index 0000000000000000000000000000000000000000..25e67c43e3c58b01d3415274762b42738cad9a22 GIT binary patch literal 39596 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 OxNgPcSZllUYWzP4q}WUV literal 0 HcmV?d00001 diff --git a/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/zlibstatic.dir/trees.c.o.d b/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/zlibstatic.dir/trees.c.o.d new file mode 100644 index 0000000..8911ab7 --- /dev/null +++ b/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/zlibstatic.dir/trees.c.o.d @@ -0,0 +1,45 @@ +CMakeFiles/zlibstatic.dir/trees.c.o: \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/zlib-1.3.1/trees.c \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/zlib-1.3.1/deflate.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/zlib-1.3.1/zutil.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/zlib-1.3.1/zlib.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/zlib-1.3.1/build-emcmake/zconf.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stddef.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stddef.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_header_macro.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_ptrdiff_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_size_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_wchar_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_null.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_max_align_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_offsetof.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/limits.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/limits.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/features.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/alltypes.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/limits.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/sys/types.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/endian.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/sys/select.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/stdarg.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stdarg.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdarg.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stdarg_header_macro.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stdarg___gnuc_va_list.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stdarg_va_list.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stdarg_va_arg.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stdarg___va_copy.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stdarg_va_copy.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/unistd.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/wasi/api.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stdint.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdint.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/stdint.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/posix.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/string.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/string.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/strings.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/stdlib.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdlib.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/alloca.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/zlib-1.3.1/trees.h diff --git a/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/zlibstatic.dir/uncompr.c.o b/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/zlibstatic.dir/uncompr.c.o new file mode 100644 index 0000000000000000000000000000000000000000..77bbe1f7451c3d3996985262192bf9a5490a4c3b GIT binary patch literal 1839 zcmZ`)TXWM^5I#CqY{hc0AOXUC7XlcJ9Vbqdm}^9cxg^{J1PC~?EIYPk*_P!%=yZ~{ zPo4Iu)3;7%`X}1y^r6$Y_D?X=PX9z7yGQasU+NkA?D=;0+p~N2teM$sNsKY+yWQPg zCU3|)^pSQpBH_Y=jYJ6lOBf7AYa^>wZ+nrQ z08Z51s$=^0ZMW{1Ld)0yVqEye2fHP=!Xl9`L>SIk;xi#g@n63b``;Al&CV%8b{WdX zpA3gUhM^`#AvzJD5Cx|5HCiN{uhPPG{(zQ<&R2{bjFA}Ac>gw3bzM1M%yu+kCFF&68GzToWuhp9?VX%fs0O}kl z(n%6e>U<)yAXF20it;}drZ3|J74I}m!0BZ?LusCcGjO(xsenF3^rSuq=kWZ1SjIG@ z@w^J>@dD9aAli^LBNiF6kcCVWCrLL+)d~(XjyZ~$3nMBxMU>Mp1=Guzr-(C)&kX3gc`?-Vo~rCT!M>DyiB^wbk{1?^9spV8h911 z;x)>D0j|M<7PK20q%uBK@j6_mfWaXZTnuS%z#`me;F8#_U=fO#JiN!J-7?^x_Cdx>Hgr7Qb_$O8u1}Kga=_`2_S`! zs63AbRvJDwKEYLZ468+aLR?Sb2|VrMGk7LyBcXT#YofFw)918#-oO{|0$;*Q?Q`*d z4hvEZ*U9!3ti!7!z9z8*uc6e%jo?Tdf{LLDCYA?f*3dFIR=|Qv5p8m)f(_L!)&hr` zaQGBAVH4{g92#`cCN!W~M28$&;6SU3Zs6b!(vh((jx&KBXhWxgUFe2X9(dUMK;?sv zJr#P`hd$O-sN)uFVOfPTzM&M~P-h3Xw2p7ZaM&hnyMgcE-C#JpO{(vt_{RaF{m=ZM z`5@*8O$0GN=&_6W5nN|Nj1bXJ!L*RY?4XGe0|ka5t_4F2RYOC;kZ91j7#W0CldAf) zsJlcZRijhce0GYl_X3I06m8bs8drV_woHzweb;KYI-cF@O>>P&Jepm}_I!`ADAO3z zB&KmD%kht9L*E4Cd$L};V)|xwU@x(s1s?Zor)^~y@84LG)mTi59h2m*IE~lud4&Bf z%k1~)Q0x~)iv2;~_lm@R7-q2_hb8up@E-0EY2UKFo|GWbqEp$GOnF-xvK-T`txZp5 zbJ<+2?n7$R_dC6dlO%8U%UQ}{(s8!JpA5M+Y|Dq4xw%G!E3N?I-Von|Kd(@7`)v&pnOe)@oA zI!>nUR_Y!_%e1#_&uP20biCDf{Q8#Z^zC%A)%VS^V`pkkyKFkW^r+i*eb4N4=pHiF fjxYYY(n-&*+MexNcE;cC*uAvUtJmC&{nq~%V-SIP literal 0 HcmV?d00001 diff --git a/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/zlibstatic.dir/uncompr.c.o.d b/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/zlibstatic.dir/uncompr.c.o.d new file mode 100644 index 0000000..3a9761d --- /dev/null +++ b/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/zlibstatic.dir/uncompr.c.o.d @@ -0,0 +1,36 @@ +CMakeFiles/zlibstatic.dir/uncompr.c.o: \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/zlib-1.3.1/uncompr.c \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/zlib-1.3.1/zlib.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/zlib-1.3.1/build-emcmake/zconf.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stddef.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stddef.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_header_macro.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_ptrdiff_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_size_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_wchar_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_null.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_max_align_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_offsetof.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/limits.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/limits.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/features.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/alltypes.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/limits.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/sys/types.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/endian.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/sys/select.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/stdarg.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stdarg.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdarg.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stdarg_header_macro.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stdarg___gnuc_va_list.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stdarg_va_list.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stdarg_va_arg.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stdarg___va_copy.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stdarg_va_copy.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/unistd.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/wasi/api.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stdint.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdint.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/stdint.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/posix.h diff --git a/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/zlibstatic.dir/zutil.c.o b/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/zlibstatic.dir/zutil.c.o new file mode 100644 index 0000000000000000000000000000000000000000..951ddda90fc773a749c4a623b7ca593c61b19947 GIT binary patch literal 1781 zcmZWqy^rHm5TEz_nY?7}{a)#=cos+(6eYL2`Pd81Vcji42ni(6i7x9nFF7ZUowJ=4 zn&{ZLlOxxzwZuPD`|4$u_YRE^}pIspwFb4$YP=ooielSUGg$mX17zV?58< zz`_{3uyhpdIk7f)k#7tv13kvlV{+4AUl4L|C5d1R$_b}Klp}FSnNlWan#p;|Qc;=4 zRjxgPdY zExu(Lj2qUrJzrF72YtJIo9`yp9^c`618bk}mnc{V{J>xy$z4g7P_m3#@}iZWuiz~9MTXI z%9j*5%Oq!+)lU~nrJrN{4>umh# zFTjc`5^{sC;)3*2xtb`r0HY0gCyqatL_2`d49Otc$lH_>jP)zR*vy^eNx;hAk16JrWp#R*?vlv*w2c)Q#r+(VKvuM=n~h@1Qq`%u7)Fy2s%CLf_jQgV0_=Kq zj6;6Cs!6N9x(vl@Uqe~-HC5QT_MK>}%sV>lDnBnyccU7G>3LKyg%I<<0G4PCI$nor z>rj0iYOF)eb?9Ury0ZdZl~#uTOKkyx@6s1mJ`(uitKNI{{;6D$RRY?+q7L{su7^kPw8z<>M aP}ztCj;#n>QAsYwA};H(*AFVj<2(Va8^ literal 0 HcmV?d00001 diff --git a/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/zlibstatic.dir/zutil.c.o.d b/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/zlibstatic.dir/zutil.c.o.d new file mode 100644 index 0000000..46e29fc --- /dev/null +++ b/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles/zlibstatic.dir/zutil.c.o.d @@ -0,0 +1,49 @@ +CMakeFiles/zlibstatic.dir/zutil.c.o: \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/zlib-1.3.1/zutil.c \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/zlib-1.3.1/zutil.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/zlib-1.3.1/zlib.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/zlib-1.3.1/build-emcmake/zconf.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stddef.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stddef.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_header_macro.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_ptrdiff_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_size_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_wchar_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_null.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_max_align_t.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stddef_offsetof.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/limits.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/limits.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/features.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/alltypes.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/limits.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/sys/types.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/endian.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/sys/select.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/stdarg.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stdarg.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdarg.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stdarg_header_macro.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stdarg___gnuc_va_list.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stdarg_va_list.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stdarg_va_arg.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stdarg___va_copy.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/__stdarg_va_copy.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/unistd.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/wasi/api.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/lib/clang/21/include/stdint.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdint.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/stdint.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/posix.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/string.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/string.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/strings.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/compat/stdlib.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdlib.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/alloca.h \ + /home/romazan/Рабочий\ Ñтол/cproject/thirdparty/zlib-1.3.1/gzguts.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/stdio.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/fcntl.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/fcntl.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/errno.h \ + /home/romazan/Рабочий\ Ñтол/emsdk/upstream/emscripten/cache/sysroot/include/bits/errno.h diff --git a/thirdparty/zlib-1.3.1/build-emcmake/CTestTestfile.cmake b/thirdparty/zlib-1.3.1/build-emcmake/CTestTestfile.cmake new file mode 100644 index 0000000..33bb3b6 --- /dev/null +++ b/thirdparty/zlib-1.3.1/build-emcmake/CTestTestfile.cmake @@ -0,0 +1,10 @@ +# CMake generated Testfile for +# Source directory: /home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1 +# Build directory: /home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/build-emcmake +# +# This file includes the relevant testing commands required for +# testing this directory and lists subdirectories to be tested as well. +add_test(example "example") +set_tests_properties(example PROPERTIES _BACKTRACE_TRIPLES "/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/CMakeLists.txt;203;add_test;/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/CMakeLists.txt;0;") +add_test(example64 "example64") +set_tests_properties(example64 PROPERTIES _BACKTRACE_TRIPLES "/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/CMakeLists.txt;212;add_test;/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/CMakeLists.txt;0;") diff --git a/thirdparty/zlib-1.3.1/build-emcmake/Makefile b/thirdparty/zlib-1.3.1/build-emcmake/Makefile new file mode 100644 index 0000000..ec09945 --- /dev/null +++ b/thirdparty/zlib-1.3.1/build-emcmake/Makefile @@ -0,0 +1,794 @@ +# CMAKE generated file: DO NOT EDIT! +# Generated by "Unix Makefiles" Generator, CMake Version 3.28 + +# Default target executed when no arguments are given to make. +default_target: all +.PHONY : default_target + +# Allow only one "make -f Makefile2" at a time, but pass parallelism. +.NOTPARALLEL: + +#============================================================================= +# Special targets provided by cmake. + +# Disable implicit rules so canonical targets will work. +.SUFFIXES: + +# Disable VCS-based implicit rules. +% : %,v + +# Disable VCS-based implicit rules. +% : RCS/% + +# Disable VCS-based implicit rules. +% : RCS/%,v + +# Disable VCS-based implicit rules. +% : SCCS/s.% + +# Disable VCS-based implicit rules. +% : s.% + +.SUFFIXES: .hpux_make_needs_suffix_list + +# Command-line flag to silence nested $(MAKE). +$(VERBOSE)MAKESILENT = -s + +#Suppress display of executed commands. +$(VERBOSE).SILENT: + +# A target that is always out of date. +cmake_force: +.PHONY : cmake_force + +#============================================================================= +# Set environment variables for the build. + +# The shell in which to execute make rules. +SHELL = /bin/sh + +# The CMake executable. +CMAKE_COMMAND = /usr/bin/cmake + +# The command to remove a file. +RM = /usr/bin/cmake -E rm -f + +# Escaping for special characters. +EQUALS = = + +# The top-level source directory on which CMake was run. +CMAKE_SOURCE_DIR = "/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1" + +# The top-level build directory on which CMake was run. +CMAKE_BINARY_DIR = "/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/build-emcmake" + +#============================================================================= +# Targets provided globally by CMake. + +# Special rule for the target test +test: + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --cyan "Running tests..." + /usr/bin/ctest --force-new-ctest-process $(ARGS) +.PHONY : test + +# Special rule for the target test +test/fast: test +.PHONY : test/fast + +# Special rule for the target edit_cache +edit_cache: + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --cyan "No interactive CMake dialog available..." + /usr/bin/cmake -E echo No\ interactive\ CMake\ dialog\ available. +.PHONY : edit_cache + +# Special rule for the target edit_cache +edit_cache/fast: edit_cache +.PHONY : edit_cache/fast + +# Special rule for the target rebuild_cache +rebuild_cache: + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --cyan "Running CMake to regenerate build system..." + /usr/bin/cmake --regenerate-during-build -S$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) +.PHONY : rebuild_cache + +# Special rule for the target rebuild_cache +rebuild_cache/fast: rebuild_cache +.PHONY : rebuild_cache/fast + +# Special rule for the target list_install_components +list_install_components: + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --cyan "Available install components are: \"Unspecified\"" +.PHONY : list_install_components + +# Special rule for the target list_install_components +list_install_components/fast: list_install_components +.PHONY : list_install_components/fast + +# Special rule for the target install +install: preinstall + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --cyan "Install the project..." + /usr/bin/cmake -P cmake_install.cmake +.PHONY : install + +# Special rule for the target install +install/fast: preinstall/fast + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --cyan "Install the project..." + /usr/bin/cmake -P cmake_install.cmake +.PHONY : install/fast + +# Special rule for the target install/local +install/local: preinstall + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --cyan "Installing only the local directory..." + /usr/bin/cmake -DCMAKE_INSTALL_LOCAL_ONLY=1 -P cmake_install.cmake +.PHONY : install/local + +# Special rule for the target install/local +install/local/fast: preinstall/fast + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --cyan "Installing only the local directory..." + /usr/bin/cmake -DCMAKE_INSTALL_LOCAL_ONLY=1 -P cmake_install.cmake +.PHONY : install/local/fast + +# Special rule for the target install/strip +install/strip: preinstall + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --cyan "Installing the project stripped..." + /usr/bin/cmake -DCMAKE_INSTALL_DO_STRIP=1 -P cmake_install.cmake +.PHONY : install/strip + +# Special rule for the target install/strip +install/strip/fast: preinstall/fast + @$(CMAKE_COMMAND) -E cmake_echo_color "--switch=$(COLOR)" --cyan "Installing the project stripped..." + /usr/bin/cmake -DCMAKE_INSTALL_DO_STRIP=1 -P cmake_install.cmake +.PHONY : install/strip/fast + +# The main all target +all: cmake_check_build_system + $(CMAKE_COMMAND) -E cmake_progress_start "/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles" "/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/build-emcmake//CMakeFiles/progress.marks" + $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 all + $(CMAKE_COMMAND) -E cmake_progress_start "/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/build-emcmake/CMakeFiles" 0 +.PHONY : all + +# The main clean target +clean: + $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 clean +.PHONY : clean + +# The main clean target +clean/fast: clean +.PHONY : clean/fast + +# Prepare targets for installation. +preinstall: all + $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 preinstall +.PHONY : preinstall + +# Prepare targets for installation. +preinstall/fast: + $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 preinstall +.PHONY : preinstall/fast + +# clear depends +depend: + $(CMAKE_COMMAND) -S$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles/Makefile.cmake 1 +.PHONY : depend + +#============================================================================= +# Target rules for targets named zlib + +# Build rule for target. +zlib: cmake_check_build_system + $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 zlib +.PHONY : zlib + +# fast build rule for target. +zlib/fast: + $(MAKE) $(MAKESILENT) -f CMakeFiles/zlib.dir/build.make CMakeFiles/zlib.dir/build +.PHONY : zlib/fast + +#============================================================================= +# Target rules for targets named zlibstatic + +# Build rule for target. +zlibstatic: cmake_check_build_system + $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 zlibstatic +.PHONY : zlibstatic + +# fast build rule for target. +zlibstatic/fast: + $(MAKE) $(MAKESILENT) -f CMakeFiles/zlibstatic.dir/build.make CMakeFiles/zlibstatic.dir/build +.PHONY : zlibstatic/fast + +#============================================================================= +# Target rules for targets named example + +# Build rule for target. +example: cmake_check_build_system + $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 example +.PHONY : example + +# fast build rule for target. +example/fast: + $(MAKE) $(MAKESILENT) -f CMakeFiles/example.dir/build.make CMakeFiles/example.dir/build +.PHONY : example/fast + +#============================================================================= +# Target rules for targets named minigzip + +# Build rule for target. +minigzip: cmake_check_build_system + $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 minigzip +.PHONY : minigzip + +# fast build rule for target. +minigzip/fast: + $(MAKE) $(MAKESILENT) -f CMakeFiles/minigzip.dir/build.make CMakeFiles/minigzip.dir/build +.PHONY : minigzip/fast + +#============================================================================= +# Target rules for targets named example64 + +# Build rule for target. +example64: cmake_check_build_system + $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 example64 +.PHONY : example64 + +# fast build rule for target. +example64/fast: + $(MAKE) $(MAKESILENT) -f CMakeFiles/example64.dir/build.make CMakeFiles/example64.dir/build +.PHONY : example64/fast + +#============================================================================= +# Target rules for targets named minigzip64 + +# Build rule for target. +minigzip64: cmake_check_build_system + $(MAKE) $(MAKESILENT) -f CMakeFiles/Makefile2 minigzip64 +.PHONY : minigzip64 + +# fast build rule for target. +minigzip64/fast: + $(MAKE) $(MAKESILENT) -f CMakeFiles/minigzip64.dir/build.make CMakeFiles/minigzip64.dir/build +.PHONY : minigzip64/fast + +adler32.o: adler32.c.o +.PHONY : adler32.o + +# target to build an object file +adler32.c.o: + $(MAKE) $(MAKESILENT) -f CMakeFiles/zlib.dir/build.make CMakeFiles/zlib.dir/adler32.c.o + $(MAKE) $(MAKESILENT) -f CMakeFiles/zlibstatic.dir/build.make CMakeFiles/zlibstatic.dir/adler32.c.o +.PHONY : adler32.c.o + +adler32.i: adler32.c.i +.PHONY : adler32.i + +# target to preprocess a source file +adler32.c.i: + $(MAKE) $(MAKESILENT) -f CMakeFiles/zlib.dir/build.make CMakeFiles/zlib.dir/adler32.c.i + $(MAKE) $(MAKESILENT) -f CMakeFiles/zlibstatic.dir/build.make CMakeFiles/zlibstatic.dir/adler32.c.i +.PHONY : adler32.c.i + +adler32.s: adler32.c.s +.PHONY : adler32.s + +# target to generate assembly for a file +adler32.c.s: + $(MAKE) $(MAKESILENT) -f CMakeFiles/zlib.dir/build.make CMakeFiles/zlib.dir/adler32.c.s + $(MAKE) $(MAKESILENT) -f CMakeFiles/zlibstatic.dir/build.make CMakeFiles/zlibstatic.dir/adler32.c.s +.PHONY : adler32.c.s + +compress.o: compress.c.o +.PHONY : compress.o + +# target to build an object file +compress.c.o: + $(MAKE) $(MAKESILENT) -f CMakeFiles/zlib.dir/build.make CMakeFiles/zlib.dir/compress.c.o + $(MAKE) $(MAKESILENT) -f CMakeFiles/zlibstatic.dir/build.make CMakeFiles/zlibstatic.dir/compress.c.o +.PHONY : compress.c.o + +compress.i: compress.c.i +.PHONY : compress.i + +# target to preprocess a source file +compress.c.i: + $(MAKE) $(MAKESILENT) -f CMakeFiles/zlib.dir/build.make CMakeFiles/zlib.dir/compress.c.i + $(MAKE) $(MAKESILENT) -f CMakeFiles/zlibstatic.dir/build.make CMakeFiles/zlibstatic.dir/compress.c.i +.PHONY : compress.c.i + +compress.s: compress.c.s +.PHONY : compress.s + +# target to generate assembly for a file +compress.c.s: + $(MAKE) $(MAKESILENT) -f CMakeFiles/zlib.dir/build.make CMakeFiles/zlib.dir/compress.c.s + $(MAKE) $(MAKESILENT) -f CMakeFiles/zlibstatic.dir/build.make CMakeFiles/zlibstatic.dir/compress.c.s +.PHONY : compress.c.s + +crc32.o: crc32.c.o +.PHONY : crc32.o + +# target to build an object file +crc32.c.o: + $(MAKE) $(MAKESILENT) -f CMakeFiles/zlib.dir/build.make CMakeFiles/zlib.dir/crc32.c.o + $(MAKE) $(MAKESILENT) -f CMakeFiles/zlibstatic.dir/build.make CMakeFiles/zlibstatic.dir/crc32.c.o +.PHONY : crc32.c.o + +crc32.i: crc32.c.i +.PHONY : crc32.i + +# target to preprocess a source file +crc32.c.i: + $(MAKE) $(MAKESILENT) -f CMakeFiles/zlib.dir/build.make CMakeFiles/zlib.dir/crc32.c.i + $(MAKE) $(MAKESILENT) -f CMakeFiles/zlibstatic.dir/build.make CMakeFiles/zlibstatic.dir/crc32.c.i +.PHONY : crc32.c.i + +crc32.s: crc32.c.s +.PHONY : crc32.s + +# target to generate assembly for a file +crc32.c.s: + $(MAKE) $(MAKESILENT) -f CMakeFiles/zlib.dir/build.make CMakeFiles/zlib.dir/crc32.c.s + $(MAKE) $(MAKESILENT) -f CMakeFiles/zlibstatic.dir/build.make CMakeFiles/zlibstatic.dir/crc32.c.s +.PHONY : crc32.c.s + +deflate.o: deflate.c.o +.PHONY : deflate.o + +# target to build an object file +deflate.c.o: + $(MAKE) $(MAKESILENT) -f CMakeFiles/zlib.dir/build.make CMakeFiles/zlib.dir/deflate.c.o + $(MAKE) $(MAKESILENT) -f CMakeFiles/zlibstatic.dir/build.make CMakeFiles/zlibstatic.dir/deflate.c.o +.PHONY : deflate.c.o + +deflate.i: deflate.c.i +.PHONY : deflate.i + +# target to preprocess a source file +deflate.c.i: + $(MAKE) $(MAKESILENT) -f CMakeFiles/zlib.dir/build.make CMakeFiles/zlib.dir/deflate.c.i + $(MAKE) $(MAKESILENT) -f CMakeFiles/zlibstatic.dir/build.make CMakeFiles/zlibstatic.dir/deflate.c.i +.PHONY : deflate.c.i + +deflate.s: deflate.c.s +.PHONY : deflate.s + +# target to generate assembly for a file +deflate.c.s: + $(MAKE) $(MAKESILENT) -f CMakeFiles/zlib.dir/build.make CMakeFiles/zlib.dir/deflate.c.s + $(MAKE) $(MAKESILENT) -f CMakeFiles/zlibstatic.dir/build.make CMakeFiles/zlibstatic.dir/deflate.c.s +.PHONY : deflate.c.s + +gzclose.o: gzclose.c.o +.PHONY : gzclose.o + +# target to build an object file +gzclose.c.o: + $(MAKE) $(MAKESILENT) -f CMakeFiles/zlib.dir/build.make CMakeFiles/zlib.dir/gzclose.c.o + $(MAKE) $(MAKESILENT) -f CMakeFiles/zlibstatic.dir/build.make CMakeFiles/zlibstatic.dir/gzclose.c.o +.PHONY : gzclose.c.o + +gzclose.i: gzclose.c.i +.PHONY : gzclose.i + +# target to preprocess a source file +gzclose.c.i: + $(MAKE) $(MAKESILENT) -f CMakeFiles/zlib.dir/build.make CMakeFiles/zlib.dir/gzclose.c.i + $(MAKE) $(MAKESILENT) -f CMakeFiles/zlibstatic.dir/build.make CMakeFiles/zlibstatic.dir/gzclose.c.i +.PHONY : gzclose.c.i + +gzclose.s: gzclose.c.s +.PHONY : gzclose.s + +# target to generate assembly for a file +gzclose.c.s: + $(MAKE) $(MAKESILENT) -f CMakeFiles/zlib.dir/build.make CMakeFiles/zlib.dir/gzclose.c.s + $(MAKE) $(MAKESILENT) -f CMakeFiles/zlibstatic.dir/build.make CMakeFiles/zlibstatic.dir/gzclose.c.s +.PHONY : gzclose.c.s + +gzlib.o: gzlib.c.o +.PHONY : gzlib.o + +# target to build an object file +gzlib.c.o: + $(MAKE) $(MAKESILENT) -f CMakeFiles/zlib.dir/build.make CMakeFiles/zlib.dir/gzlib.c.o + $(MAKE) $(MAKESILENT) -f CMakeFiles/zlibstatic.dir/build.make CMakeFiles/zlibstatic.dir/gzlib.c.o +.PHONY : gzlib.c.o + +gzlib.i: gzlib.c.i +.PHONY : gzlib.i + +# target to preprocess a source file +gzlib.c.i: + $(MAKE) $(MAKESILENT) -f CMakeFiles/zlib.dir/build.make CMakeFiles/zlib.dir/gzlib.c.i + $(MAKE) $(MAKESILENT) -f CMakeFiles/zlibstatic.dir/build.make CMakeFiles/zlibstatic.dir/gzlib.c.i +.PHONY : gzlib.c.i + +gzlib.s: gzlib.c.s +.PHONY : gzlib.s + +# target to generate assembly for a file +gzlib.c.s: + $(MAKE) $(MAKESILENT) -f CMakeFiles/zlib.dir/build.make CMakeFiles/zlib.dir/gzlib.c.s + $(MAKE) $(MAKESILENT) -f CMakeFiles/zlibstatic.dir/build.make CMakeFiles/zlibstatic.dir/gzlib.c.s +.PHONY : gzlib.c.s + +gzread.o: gzread.c.o +.PHONY : gzread.o + +# target to build an object file +gzread.c.o: + $(MAKE) $(MAKESILENT) -f CMakeFiles/zlib.dir/build.make CMakeFiles/zlib.dir/gzread.c.o + $(MAKE) $(MAKESILENT) -f CMakeFiles/zlibstatic.dir/build.make CMakeFiles/zlibstatic.dir/gzread.c.o +.PHONY : gzread.c.o + +gzread.i: gzread.c.i +.PHONY : gzread.i + +# target to preprocess a source file +gzread.c.i: + $(MAKE) $(MAKESILENT) -f CMakeFiles/zlib.dir/build.make CMakeFiles/zlib.dir/gzread.c.i + $(MAKE) $(MAKESILENT) -f CMakeFiles/zlibstatic.dir/build.make CMakeFiles/zlibstatic.dir/gzread.c.i +.PHONY : gzread.c.i + +gzread.s: gzread.c.s +.PHONY : gzread.s + +# target to generate assembly for a file +gzread.c.s: + $(MAKE) $(MAKESILENT) -f CMakeFiles/zlib.dir/build.make CMakeFiles/zlib.dir/gzread.c.s + $(MAKE) $(MAKESILENT) -f CMakeFiles/zlibstatic.dir/build.make CMakeFiles/zlibstatic.dir/gzread.c.s +.PHONY : gzread.c.s + +gzwrite.o: gzwrite.c.o +.PHONY : gzwrite.o + +# target to build an object file +gzwrite.c.o: + $(MAKE) $(MAKESILENT) -f CMakeFiles/zlib.dir/build.make CMakeFiles/zlib.dir/gzwrite.c.o + $(MAKE) $(MAKESILENT) -f CMakeFiles/zlibstatic.dir/build.make CMakeFiles/zlibstatic.dir/gzwrite.c.o +.PHONY : gzwrite.c.o + +gzwrite.i: gzwrite.c.i +.PHONY : gzwrite.i + +# target to preprocess a source file +gzwrite.c.i: + $(MAKE) $(MAKESILENT) -f CMakeFiles/zlib.dir/build.make CMakeFiles/zlib.dir/gzwrite.c.i + $(MAKE) $(MAKESILENT) -f CMakeFiles/zlibstatic.dir/build.make CMakeFiles/zlibstatic.dir/gzwrite.c.i +.PHONY : gzwrite.c.i + +gzwrite.s: gzwrite.c.s +.PHONY : gzwrite.s + +# target to generate assembly for a file +gzwrite.c.s: + $(MAKE) $(MAKESILENT) -f CMakeFiles/zlib.dir/build.make CMakeFiles/zlib.dir/gzwrite.c.s + $(MAKE) $(MAKESILENT) -f CMakeFiles/zlibstatic.dir/build.make CMakeFiles/zlibstatic.dir/gzwrite.c.s +.PHONY : gzwrite.c.s + +infback.o: infback.c.o +.PHONY : infback.o + +# target to build an object file +infback.c.o: + $(MAKE) $(MAKESILENT) -f CMakeFiles/zlib.dir/build.make CMakeFiles/zlib.dir/infback.c.o + $(MAKE) $(MAKESILENT) -f CMakeFiles/zlibstatic.dir/build.make CMakeFiles/zlibstatic.dir/infback.c.o +.PHONY : infback.c.o + +infback.i: infback.c.i +.PHONY : infback.i + +# target to preprocess a source file +infback.c.i: + $(MAKE) $(MAKESILENT) -f CMakeFiles/zlib.dir/build.make CMakeFiles/zlib.dir/infback.c.i + $(MAKE) $(MAKESILENT) -f CMakeFiles/zlibstatic.dir/build.make CMakeFiles/zlibstatic.dir/infback.c.i +.PHONY : infback.c.i + +infback.s: infback.c.s +.PHONY : infback.s + +# target to generate assembly for a file +infback.c.s: + $(MAKE) $(MAKESILENT) -f CMakeFiles/zlib.dir/build.make CMakeFiles/zlib.dir/infback.c.s + $(MAKE) $(MAKESILENT) -f CMakeFiles/zlibstatic.dir/build.make CMakeFiles/zlibstatic.dir/infback.c.s +.PHONY : infback.c.s + +inffast.o: inffast.c.o +.PHONY : inffast.o + +# target to build an object file +inffast.c.o: + $(MAKE) $(MAKESILENT) -f CMakeFiles/zlib.dir/build.make CMakeFiles/zlib.dir/inffast.c.o + $(MAKE) $(MAKESILENT) -f CMakeFiles/zlibstatic.dir/build.make CMakeFiles/zlibstatic.dir/inffast.c.o +.PHONY : inffast.c.o + +inffast.i: inffast.c.i +.PHONY : inffast.i + +# target to preprocess a source file +inffast.c.i: + $(MAKE) $(MAKESILENT) -f CMakeFiles/zlib.dir/build.make CMakeFiles/zlib.dir/inffast.c.i + $(MAKE) $(MAKESILENT) -f CMakeFiles/zlibstatic.dir/build.make CMakeFiles/zlibstatic.dir/inffast.c.i +.PHONY : inffast.c.i + +inffast.s: inffast.c.s +.PHONY : inffast.s + +# target to generate assembly for a file +inffast.c.s: + $(MAKE) $(MAKESILENT) -f CMakeFiles/zlib.dir/build.make CMakeFiles/zlib.dir/inffast.c.s + $(MAKE) $(MAKESILENT) -f CMakeFiles/zlibstatic.dir/build.make CMakeFiles/zlibstatic.dir/inffast.c.s +.PHONY : inffast.c.s + +inflate.o: inflate.c.o +.PHONY : inflate.o + +# target to build an object file +inflate.c.o: + $(MAKE) $(MAKESILENT) -f CMakeFiles/zlib.dir/build.make CMakeFiles/zlib.dir/inflate.c.o + $(MAKE) $(MAKESILENT) -f CMakeFiles/zlibstatic.dir/build.make CMakeFiles/zlibstatic.dir/inflate.c.o +.PHONY : inflate.c.o + +inflate.i: inflate.c.i +.PHONY : inflate.i + +# target to preprocess a source file +inflate.c.i: + $(MAKE) $(MAKESILENT) -f CMakeFiles/zlib.dir/build.make CMakeFiles/zlib.dir/inflate.c.i + $(MAKE) $(MAKESILENT) -f CMakeFiles/zlibstatic.dir/build.make CMakeFiles/zlibstatic.dir/inflate.c.i +.PHONY : inflate.c.i + +inflate.s: inflate.c.s +.PHONY : inflate.s + +# target to generate assembly for a file +inflate.c.s: + $(MAKE) $(MAKESILENT) -f CMakeFiles/zlib.dir/build.make CMakeFiles/zlib.dir/inflate.c.s + $(MAKE) $(MAKESILENT) -f CMakeFiles/zlibstatic.dir/build.make CMakeFiles/zlibstatic.dir/inflate.c.s +.PHONY : inflate.c.s + +inftrees.o: inftrees.c.o +.PHONY : inftrees.o + +# target to build an object file +inftrees.c.o: + $(MAKE) $(MAKESILENT) -f CMakeFiles/zlib.dir/build.make CMakeFiles/zlib.dir/inftrees.c.o + $(MAKE) $(MAKESILENT) -f CMakeFiles/zlibstatic.dir/build.make CMakeFiles/zlibstatic.dir/inftrees.c.o +.PHONY : inftrees.c.o + +inftrees.i: inftrees.c.i +.PHONY : inftrees.i + +# target to preprocess a source file +inftrees.c.i: + $(MAKE) $(MAKESILENT) -f CMakeFiles/zlib.dir/build.make CMakeFiles/zlib.dir/inftrees.c.i + $(MAKE) $(MAKESILENT) -f CMakeFiles/zlibstatic.dir/build.make CMakeFiles/zlibstatic.dir/inftrees.c.i +.PHONY : inftrees.c.i + +inftrees.s: inftrees.c.s +.PHONY : inftrees.s + +# target to generate assembly for a file +inftrees.c.s: + $(MAKE) $(MAKESILENT) -f CMakeFiles/zlib.dir/build.make CMakeFiles/zlib.dir/inftrees.c.s + $(MAKE) $(MAKESILENT) -f CMakeFiles/zlibstatic.dir/build.make CMakeFiles/zlibstatic.dir/inftrees.c.s +.PHONY : inftrees.c.s + +test/example.o: test/example.c.o +.PHONY : test/example.o + +# target to build an object file +test/example.c.o: + $(MAKE) $(MAKESILENT) -f CMakeFiles/example.dir/build.make CMakeFiles/example.dir/test/example.c.o + $(MAKE) $(MAKESILENT) -f CMakeFiles/example64.dir/build.make CMakeFiles/example64.dir/test/example.c.o +.PHONY : test/example.c.o + +test/example.i: test/example.c.i +.PHONY : test/example.i + +# target to preprocess a source file +test/example.c.i: + $(MAKE) $(MAKESILENT) -f CMakeFiles/example.dir/build.make CMakeFiles/example.dir/test/example.c.i + $(MAKE) $(MAKESILENT) -f CMakeFiles/example64.dir/build.make CMakeFiles/example64.dir/test/example.c.i +.PHONY : test/example.c.i + +test/example.s: test/example.c.s +.PHONY : test/example.s + +# target to generate assembly for a file +test/example.c.s: + $(MAKE) $(MAKESILENT) -f CMakeFiles/example.dir/build.make CMakeFiles/example.dir/test/example.c.s + $(MAKE) $(MAKESILENT) -f CMakeFiles/example64.dir/build.make CMakeFiles/example64.dir/test/example.c.s +.PHONY : test/example.c.s + +test/minigzip.o: test/minigzip.c.o +.PHONY : test/minigzip.o + +# target to build an object file +test/minigzip.c.o: + $(MAKE) $(MAKESILENT) -f CMakeFiles/minigzip.dir/build.make CMakeFiles/minigzip.dir/test/minigzip.c.o + $(MAKE) $(MAKESILENT) -f CMakeFiles/minigzip64.dir/build.make CMakeFiles/minigzip64.dir/test/minigzip.c.o +.PHONY : test/minigzip.c.o + +test/minigzip.i: test/minigzip.c.i +.PHONY : test/minigzip.i + +# target to preprocess a source file +test/minigzip.c.i: + $(MAKE) $(MAKESILENT) -f CMakeFiles/minigzip.dir/build.make CMakeFiles/minigzip.dir/test/minigzip.c.i + $(MAKE) $(MAKESILENT) -f CMakeFiles/minigzip64.dir/build.make CMakeFiles/minigzip64.dir/test/minigzip.c.i +.PHONY : test/minigzip.c.i + +test/minigzip.s: test/minigzip.c.s +.PHONY : test/minigzip.s + +# target to generate assembly for a file +test/minigzip.c.s: + $(MAKE) $(MAKESILENT) -f CMakeFiles/minigzip.dir/build.make CMakeFiles/minigzip.dir/test/minigzip.c.s + $(MAKE) $(MAKESILENT) -f CMakeFiles/minigzip64.dir/build.make CMakeFiles/minigzip64.dir/test/minigzip.c.s +.PHONY : test/minigzip.c.s + +trees.o: trees.c.o +.PHONY : trees.o + +# target to build an object file +trees.c.o: + $(MAKE) $(MAKESILENT) -f CMakeFiles/zlib.dir/build.make CMakeFiles/zlib.dir/trees.c.o + $(MAKE) $(MAKESILENT) -f CMakeFiles/zlibstatic.dir/build.make CMakeFiles/zlibstatic.dir/trees.c.o +.PHONY : trees.c.o + +trees.i: trees.c.i +.PHONY : trees.i + +# target to preprocess a source file +trees.c.i: + $(MAKE) $(MAKESILENT) -f CMakeFiles/zlib.dir/build.make CMakeFiles/zlib.dir/trees.c.i + $(MAKE) $(MAKESILENT) -f CMakeFiles/zlibstatic.dir/build.make CMakeFiles/zlibstatic.dir/trees.c.i +.PHONY : trees.c.i + +trees.s: trees.c.s +.PHONY : trees.s + +# target to generate assembly for a file +trees.c.s: + $(MAKE) $(MAKESILENT) -f CMakeFiles/zlib.dir/build.make CMakeFiles/zlib.dir/trees.c.s + $(MAKE) $(MAKESILENT) -f CMakeFiles/zlibstatic.dir/build.make CMakeFiles/zlibstatic.dir/trees.c.s +.PHONY : trees.c.s + +uncompr.o: uncompr.c.o +.PHONY : uncompr.o + +# target to build an object file +uncompr.c.o: + $(MAKE) $(MAKESILENT) -f CMakeFiles/zlib.dir/build.make CMakeFiles/zlib.dir/uncompr.c.o + $(MAKE) $(MAKESILENT) -f CMakeFiles/zlibstatic.dir/build.make CMakeFiles/zlibstatic.dir/uncompr.c.o +.PHONY : uncompr.c.o + +uncompr.i: uncompr.c.i +.PHONY : uncompr.i + +# target to preprocess a source file +uncompr.c.i: + $(MAKE) $(MAKESILENT) -f CMakeFiles/zlib.dir/build.make CMakeFiles/zlib.dir/uncompr.c.i + $(MAKE) $(MAKESILENT) -f CMakeFiles/zlibstatic.dir/build.make CMakeFiles/zlibstatic.dir/uncompr.c.i +.PHONY : uncompr.c.i + +uncompr.s: uncompr.c.s +.PHONY : uncompr.s + +# target to generate assembly for a file +uncompr.c.s: + $(MAKE) $(MAKESILENT) -f CMakeFiles/zlib.dir/build.make CMakeFiles/zlib.dir/uncompr.c.s + $(MAKE) $(MAKESILENT) -f CMakeFiles/zlibstatic.dir/build.make CMakeFiles/zlibstatic.dir/uncompr.c.s +.PHONY : uncompr.c.s + +zutil.o: zutil.c.o +.PHONY : zutil.o + +# target to build an object file +zutil.c.o: + $(MAKE) $(MAKESILENT) -f CMakeFiles/zlib.dir/build.make CMakeFiles/zlib.dir/zutil.c.o + $(MAKE) $(MAKESILENT) -f CMakeFiles/zlibstatic.dir/build.make CMakeFiles/zlibstatic.dir/zutil.c.o +.PHONY : zutil.c.o + +zutil.i: zutil.c.i +.PHONY : zutil.i + +# target to preprocess a source file +zutil.c.i: + $(MAKE) $(MAKESILENT) -f CMakeFiles/zlib.dir/build.make CMakeFiles/zlib.dir/zutil.c.i + $(MAKE) $(MAKESILENT) -f CMakeFiles/zlibstatic.dir/build.make CMakeFiles/zlibstatic.dir/zutil.c.i +.PHONY : zutil.c.i + +zutil.s: zutil.c.s +.PHONY : zutil.s + +# target to generate assembly for a file +zutil.c.s: + $(MAKE) $(MAKESILENT) -f CMakeFiles/zlib.dir/build.make CMakeFiles/zlib.dir/zutil.c.s + $(MAKE) $(MAKESILENT) -f CMakeFiles/zlibstatic.dir/build.make CMakeFiles/zlibstatic.dir/zutil.c.s +.PHONY : zutil.c.s + +# Help Target +help: + @echo "The following are some of the valid targets for this Makefile:" + @echo "... all (the default if no target is provided)" + @echo "... clean" + @echo "... depend" + @echo "... edit_cache" + @echo "... install" + @echo "... install/local" + @echo "... install/strip" + @echo "... list_install_components" + @echo "... rebuild_cache" + @echo "... test" + @echo "... example" + @echo "... example64" + @echo "... minigzip" + @echo "... minigzip64" + @echo "... zlib" + @echo "... zlibstatic" + @echo "... adler32.o" + @echo "... adler32.i" + @echo "... adler32.s" + @echo "... compress.o" + @echo "... compress.i" + @echo "... compress.s" + @echo "... crc32.o" + @echo "... crc32.i" + @echo "... crc32.s" + @echo "... deflate.o" + @echo "... deflate.i" + @echo "... deflate.s" + @echo "... gzclose.o" + @echo "... gzclose.i" + @echo "... gzclose.s" + @echo "... gzlib.o" + @echo "... gzlib.i" + @echo "... gzlib.s" + @echo "... gzread.o" + @echo "... gzread.i" + @echo "... gzread.s" + @echo "... gzwrite.o" + @echo "... gzwrite.i" + @echo "... gzwrite.s" + @echo "... infback.o" + @echo "... infback.i" + @echo "... infback.s" + @echo "... inffast.o" + @echo "... inffast.i" + @echo "... inffast.s" + @echo "... inflate.o" + @echo "... inflate.i" + @echo "... inflate.s" + @echo "... inftrees.o" + @echo "... inftrees.i" + @echo "... inftrees.s" + @echo "... test/example.o" + @echo "... test/example.i" + @echo "... test/example.s" + @echo "... test/minigzip.o" + @echo "... test/minigzip.i" + @echo "... test/minigzip.s" + @echo "... trees.o" + @echo "... trees.i" + @echo "... trees.s" + @echo "... uncompr.o" + @echo "... uncompr.i" + @echo "... uncompr.s" + @echo "... zutil.o" + @echo "... zutil.i" + @echo "... zutil.s" +.PHONY : help + + + +#============================================================================= +# Special targets to cleanup operation of make. + +# Special rule to run CMake to check the build system integrity. +# No rule that depends on this can have commands that come from listfiles +# because they might be regenerated. +cmake_check_build_system: + $(CMAKE_COMMAND) -S$(CMAKE_SOURCE_DIR) -B$(CMAKE_BINARY_DIR) --check-build-system CMakeFiles/Makefile.cmake 0 +.PHONY : cmake_check_build_system + diff --git a/thirdparty/zlib-1.3.1/build-emcmake/cmake_install.cmake b/thirdparty/zlib-1.3.1/build-emcmake/cmake_install.cmake new file mode 100644 index 0000000..a8ae607 --- /dev/null +++ b/thirdparty/zlib-1.3.1/build-emcmake/cmake_install.cmake @@ -0,0 +1,112 @@ +# Install script for directory: /home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1 + +# Set the install prefix +if(NOT DEFINED CMAKE_INSTALL_PREFIX) + set(CMAKE_INSTALL_PREFIX "/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/install") +endif() +string(REGEX REPLACE "/$" "" CMAKE_INSTALL_PREFIX "${CMAKE_INSTALL_PREFIX}") + +# Set the install configuration name. +if(NOT DEFINED CMAKE_INSTALL_CONFIG_NAME) + if(BUILD_TYPE) + string(REGEX REPLACE "^[^A-Za-z0-9_]+" "" + CMAKE_INSTALL_CONFIG_NAME "${BUILD_TYPE}") + else() + set(CMAKE_INSTALL_CONFIG_NAME "") + endif() + message(STATUS "Install configuration: \"${CMAKE_INSTALL_CONFIG_NAME}\"") +endif() + +# Set the component getting installed. +if(NOT CMAKE_INSTALL_COMPONENT) + if(COMPONENT) + message(STATUS "Install component: \"${COMPONENT}\"") + set(CMAKE_INSTALL_COMPONENT "${COMPONENT}") + else() + set(CMAKE_INSTALL_COMPONENT) + endif() +endif() + +# Is this installation the result of a crosscompile? +if(NOT DEFINED CMAKE_CROSSCOMPILING) + set(CMAKE_CROSSCOMPILING "TRUE") +endif() + +# Set default install directory permissions. +if(NOT DEFINED CMAKE_OBJDUMP) + set(CMAKE_OBJDUMP "/usr/bin/objdump") +endif() + +if(CMAKE_INSTALL_COMPONENT STREQUAL "Unspecified" OR NOT CMAKE_INSTALL_COMPONENT) + list(APPEND CMAKE_ABSOLUTE_DESTINATION_FILES + "/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/install/lib/libz.a") + if(CMAKE_WARN_ON_ABSOLUTE_INSTALL_DESTINATION) + message(WARNING "ABSOLUTE path INSTALL DESTINATION : ${CMAKE_ABSOLUTE_DESTINATION_FILES}") + endif() + if(CMAKE_ERROR_ON_ABSOLUTE_INSTALL_DESTINATION) + message(FATAL_ERROR "ABSOLUTE path INSTALL DESTINATION forbidden (by caller): ${CMAKE_ABSOLUTE_DESTINATION_FILES}") + endif() + file(INSTALL DESTINATION "/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/install/lib" TYPE STATIC_LIBRARY FILES "/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/build-emcmake/libz.a") +endif() + +if(CMAKE_INSTALL_COMPONENT STREQUAL "Unspecified" OR NOT CMAKE_INSTALL_COMPONENT) + list(APPEND CMAKE_ABSOLUTE_DESTINATION_FILES + "/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/install/lib/libz.a") + if(CMAKE_WARN_ON_ABSOLUTE_INSTALL_DESTINATION) + message(WARNING "ABSOLUTE path INSTALL DESTINATION : ${CMAKE_ABSOLUTE_DESTINATION_FILES}") + endif() + if(CMAKE_ERROR_ON_ABSOLUTE_INSTALL_DESTINATION) + message(FATAL_ERROR "ABSOLUTE path INSTALL DESTINATION forbidden (by caller): ${CMAKE_ABSOLUTE_DESTINATION_FILES}") + endif() + file(INSTALL DESTINATION "/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/install/lib" TYPE STATIC_LIBRARY FILES "/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/build-emcmake/libz.a") +endif() + +if(CMAKE_INSTALL_COMPONENT STREQUAL "Unspecified" OR NOT CMAKE_INSTALL_COMPONENT) + list(APPEND CMAKE_ABSOLUTE_DESTINATION_FILES + "/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/install/include/zconf.h;/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/install/include/zlib.h") + if(CMAKE_WARN_ON_ABSOLUTE_INSTALL_DESTINATION) + message(WARNING "ABSOLUTE path INSTALL DESTINATION : ${CMAKE_ABSOLUTE_DESTINATION_FILES}") + endif() + if(CMAKE_ERROR_ON_ABSOLUTE_INSTALL_DESTINATION) + message(FATAL_ERROR "ABSOLUTE path INSTALL DESTINATION forbidden (by caller): ${CMAKE_ABSOLUTE_DESTINATION_FILES}") + endif() + file(INSTALL DESTINATION "/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/install/include" TYPE FILE FILES + "/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/build-emcmake/zconf.h" + "/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/zlib.h" + ) +endif() + +if(CMAKE_INSTALL_COMPONENT STREQUAL "Unspecified" OR NOT CMAKE_INSTALL_COMPONENT) + list(APPEND CMAKE_ABSOLUTE_DESTINATION_FILES + "/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/install/share/man/man3/zlib.3") + if(CMAKE_WARN_ON_ABSOLUTE_INSTALL_DESTINATION) + message(WARNING "ABSOLUTE path INSTALL DESTINATION : ${CMAKE_ABSOLUTE_DESTINATION_FILES}") + endif() + if(CMAKE_ERROR_ON_ABSOLUTE_INSTALL_DESTINATION) + message(FATAL_ERROR "ABSOLUTE path INSTALL DESTINATION forbidden (by caller): ${CMAKE_ABSOLUTE_DESTINATION_FILES}") + endif() + file(INSTALL DESTINATION "/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/install/share/man/man3" TYPE FILE FILES "/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/zlib.3") +endif() + +if(CMAKE_INSTALL_COMPONENT STREQUAL "Unspecified" OR NOT CMAKE_INSTALL_COMPONENT) + list(APPEND CMAKE_ABSOLUTE_DESTINATION_FILES + "/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/install/share/pkgconfig/zlib.pc") + if(CMAKE_WARN_ON_ABSOLUTE_INSTALL_DESTINATION) + message(WARNING "ABSOLUTE path INSTALL DESTINATION : ${CMAKE_ABSOLUTE_DESTINATION_FILES}") + endif() + if(CMAKE_ERROR_ON_ABSOLUTE_INSTALL_DESTINATION) + message(FATAL_ERROR "ABSOLUTE path INSTALL DESTINATION forbidden (by caller): ${CMAKE_ABSOLUTE_DESTINATION_FILES}") + endif() + file(INSTALL DESTINATION "/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/install/share/pkgconfig" TYPE FILE FILES "/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/build-emcmake/zlib.pc") +endif() + +if(CMAKE_INSTALL_COMPONENT) + set(CMAKE_INSTALL_MANIFEST "install_manifest_${CMAKE_INSTALL_COMPONENT}.txt") +else() + set(CMAKE_INSTALL_MANIFEST "install_manifest.txt") +endif() + +string(REPLACE ";" "\n" CMAKE_INSTALL_MANIFEST_CONTENT + "${CMAKE_INSTALL_MANIFEST_FILES}") +file(WRITE "/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/build-emcmake/${CMAKE_INSTALL_MANIFEST}" + "${CMAKE_INSTALL_MANIFEST_CONTENT}") diff --git a/thirdparty/zlib-1.3.1/build-emcmake/example.js b/thirdparty/zlib-1.3.1/build-emcmake/example.js new file mode 100644 index 0000000..ba2ef2b --- /dev/null +++ b/thirdparty/zlib-1.3.1/build-emcmake/example.js @@ -0,0 +1,4342 @@ +// include: shell.js +// The Module object: Our interface to the outside world. We import +// and export values on it. There are various ways Module can be used: +// 1. Not defined. We create it here +// 2. A function parameter, function(moduleArg) => Promise +// 3. pre-run appended it, var Module = {}; ..generated code.. +// 4. External script tag defines var Module. +// We need to check if Module already exists (e.g. case 3 above). +// Substitution will be replaced with actual code on later stage of the build, +// this way Closure Compiler will not mangle it (e.g. case 4. above). +// Note that if you want to run closure, and also to use Module +// after the generated code, you will need to define var Module = {}; +// before the code. Then that object will be used in the code, and you +// can continue to use Module afterwards as well. +var Module = typeof Module != 'undefined' ? Module : {}; + +// Determine the runtime environment we are in. You can customize this by +// setting the ENVIRONMENT setting at compile time (see settings.js). + +// Attempt to auto-detect the environment +var ENVIRONMENT_IS_WEB = typeof window == 'object'; +var ENVIRONMENT_IS_WORKER = typeof WorkerGlobalScope != 'undefined'; +// N.b. Electron.js environment is simultaneously a NODE-environment, but +// also a web environment. +var ENVIRONMENT_IS_NODE = typeof process == 'object' && typeof process.versions == 'object' && typeof process.versions.node == 'string' && process.type != 'renderer'; +var ENVIRONMENT_IS_SHELL = !ENVIRONMENT_IS_WEB && !ENVIRONMENT_IS_NODE && !ENVIRONMENT_IS_WORKER; + +if (ENVIRONMENT_IS_NODE) { + +} + +// --pre-jses are emitted after the Module integration code, so that they can +// refer to Module (if they choose; they can also define Module) + + +// Sometimes an existing Module object exists with properties +// meant to overwrite the default module functionality. Here +// we collect those properties and reapply _after_ we configure +// the current environment's defaults to avoid having to be so +// defensive during initialization. +var moduleOverrides = {...Module}; + +var arguments_ = []; +var thisProgram = './this.program'; +var quit_ = (status, toThrow) => { + throw toThrow; +}; + +// `/` should be present at the end if `scriptDirectory` is not empty +var scriptDirectory = ''; +function locateFile(path) { + if (Module['locateFile']) { + return Module['locateFile'](path, scriptDirectory); + } + return scriptDirectory + path; +} + +// Hooks that are implemented differently in different runtime environments. +var readAsync, readBinary; + +if (ENVIRONMENT_IS_NODE) { + if (typeof process == 'undefined' || !process.release || process.release.name !== 'node') throw new Error('not compiled for this environment (did you build to HTML and try to run it not on the web, or set ENVIRONMENT to something - like node - and run it someplace else - like on the web?)'); + + var nodeVersion = process.versions.node; + var numericVersion = nodeVersion.split('.').slice(0, 3); + numericVersion = (numericVersion[0] * 10000) + (numericVersion[1] * 100) + (numericVersion[2].split('-')[0] * 1); + var minVersion = 160000; + if (numericVersion < 160000) { + throw new Error('This emscripten-generated code requires node v16.0.0 (detected v' + nodeVersion + ')'); + } + + // These modules will usually be used on Node.js. Load them eagerly to avoid + // the complexity of lazy-loading. + var fs = require('fs'); + var nodePath = require('path'); + + scriptDirectory = __dirname + '/'; + +// include: node_shell_read.js +readBinary = (filename) => { + // We need to re-wrap `file://` strings to URLs. + filename = isFileURI(filename) ? new URL(filename) : filename; + var ret = fs.readFileSync(filename); + assert(Buffer.isBuffer(ret)); + return ret; +}; + +readAsync = async (filename, binary = true) => { + // See the comment in the `readBinary` function. + filename = isFileURI(filename) ? new URL(filename) : filename; + var ret = fs.readFileSync(filename, binary ? undefined : 'utf8'); + assert(binary ? Buffer.isBuffer(ret) : typeof ret == 'string'); + return ret; +}; +// end include: node_shell_read.js + if (!Module['thisProgram'] && process.argv.length > 1) { + thisProgram = process.argv[1].replace(/\\/g, '/'); + } + + arguments_ = process.argv.slice(2); + + if (typeof module != 'undefined') { + module['exports'] = Module; + } + + quit_ = (status, toThrow) => { + process.exitCode = status; + throw toThrow; + }; + +} else +if (ENVIRONMENT_IS_SHELL) { + + if ((typeof process == 'object' && typeof require === 'function') || typeof window == 'object' || typeof WorkerGlobalScope != 'undefined') throw new Error('not compiled for this environment (did you build to HTML and try to run it not on the web, or set ENVIRONMENT to something - like node - and run it someplace else - like on the web?)'); + +} else + +// Note that this includes Node.js workers when relevant (pthreads is enabled). +// Node.js workers are detected as a combination of ENVIRONMENT_IS_WORKER and +// ENVIRONMENT_IS_NODE. +if (ENVIRONMENT_IS_WEB || ENVIRONMENT_IS_WORKER) { + if (ENVIRONMENT_IS_WORKER) { // Check worker, not web, since window could be polyfilled + scriptDirectory = self.location.href; + } else if (typeof document != 'undefined' && document.currentScript) { // web + scriptDirectory = document.currentScript.src; + } + // blob urls look like blob:http://site.com/etc/etc and we cannot infer anything from them. + // otherwise, slice off the final part of the url to find the script directory. + // if scriptDirectory does not contain a slash, lastIndexOf will return -1, + // and scriptDirectory will correctly be replaced with an empty string. + // If scriptDirectory contains a query (starting with ?) or a fragment (starting with #), + // they are removed because they could contain a slash. + if (scriptDirectory.startsWith('blob:')) { + scriptDirectory = ''; + } else { + scriptDirectory = scriptDirectory.slice(0, scriptDirectory.replace(/[?#].*/, '').lastIndexOf('/')+1); + } + + if (!(typeof window == 'object' || typeof WorkerGlobalScope != 'undefined')) throw new Error('not compiled for this environment (did you build to HTML and try to run it not on the web, or set ENVIRONMENT to something - like node - and run it someplace else - like on the web?)'); + + { +// include: web_or_worker_shell_read.js +if (ENVIRONMENT_IS_WORKER) { + readBinary = (url) => { + var xhr = new XMLHttpRequest(); + xhr.open('GET', url, false); + xhr.responseType = 'arraybuffer'; + xhr.send(null); + return new Uint8Array(/** @type{!ArrayBuffer} */(xhr.response)); + }; + } + + readAsync = async (url) => { + // Fetch has some additional restrictions over XHR, like it can't be used on a file:// url. + // See https://github.com/github/fetch/pull/92#issuecomment-140665932 + // Cordova or Electron apps are typically loaded from a file:// url. + // So use XHR on webview if URL is a file URL. + if (isFileURI(url)) { + return new Promise((resolve, reject) => { + var xhr = new XMLHttpRequest(); + xhr.open('GET', url, true); + xhr.responseType = 'arraybuffer'; + xhr.onload = () => { + if (xhr.status == 200 || (xhr.status == 0 && xhr.response)) { // file URLs can return 0 + resolve(xhr.response); + return; + } + reject(xhr.status); + }; + xhr.onerror = reject; + xhr.send(null); + }); + } + var response = await fetch(url, { credentials: 'same-origin' }); + if (response.ok) { + return response.arrayBuffer(); + } + throw new Error(response.status + ' : ' + response.url); + }; +// end include: web_or_worker_shell_read.js + } +} else +{ + throw new Error('environment detection error'); +} + +var out = Module['print'] || console.log.bind(console); +var err = Module['printErr'] || console.error.bind(console); + +// Merge back in the overrides +Object.assign(Module, moduleOverrides); +// Free the object hierarchy contained in the overrides, this lets the GC +// reclaim data used. +moduleOverrides = null; +checkIncomingModuleAPI(); + +// Emit code to handle expected values on the Module object. This applies Module.x +// to the proper local x. This has two benefits: first, we only emit it if it is +// expected to arrive, and second, by using a local everywhere else that can be +// minified. + +if (Module['arguments']) arguments_ = Module['arguments'];legacyModuleProp('arguments', 'arguments_'); + +if (Module['thisProgram']) thisProgram = Module['thisProgram'];legacyModuleProp('thisProgram', 'thisProgram'); + +// perform assertions in shell.js after we set up out() and err(), as otherwise if an assertion fails it cannot print the message +// Assertions on removed incoming Module JS APIs. +assert(typeof Module['memoryInitializerPrefixURL'] == 'undefined', 'Module.memoryInitializerPrefixURL option was removed, use Module.locateFile instead'); +assert(typeof Module['pthreadMainPrefixURL'] == 'undefined', 'Module.pthreadMainPrefixURL option was removed, use Module.locateFile instead'); +assert(typeof Module['cdInitializerPrefixURL'] == 'undefined', 'Module.cdInitializerPrefixURL option was removed, use Module.locateFile instead'); +assert(typeof Module['filePackagePrefixURL'] == 'undefined', 'Module.filePackagePrefixURL option was removed, use Module.locateFile instead'); +assert(typeof Module['read'] == 'undefined', 'Module.read option was removed'); +assert(typeof Module['readAsync'] == 'undefined', 'Module.readAsync option was removed (modify readAsync in JS)'); +assert(typeof Module['readBinary'] == 'undefined', 'Module.readBinary option was removed (modify readBinary in JS)'); +assert(typeof Module['setWindowTitle'] == 'undefined', 'Module.setWindowTitle option was removed (modify emscripten_set_window_title in JS)'); +assert(typeof Module['TOTAL_MEMORY'] == 'undefined', 'Module.TOTAL_MEMORY has been renamed Module.INITIAL_MEMORY'); +legacyModuleProp('asm', 'wasmExports'); +legacyModuleProp('readAsync', 'readAsync'); +legacyModuleProp('readBinary', 'readBinary'); +legacyModuleProp('setWindowTitle', 'setWindowTitle'); +var IDBFS = 'IDBFS is no longer included by default; build with -lidbfs.js'; +var PROXYFS = 'PROXYFS is no longer included by default; build with -lproxyfs.js'; +var WORKERFS = 'WORKERFS is no longer included by default; build with -lworkerfs.js'; +var FETCHFS = 'FETCHFS is no longer included by default; build with -lfetchfs.js'; +var ICASEFS = 'ICASEFS is no longer included by default; build with -licasefs.js'; +var JSFILEFS = 'JSFILEFS is no longer included by default; build with -ljsfilefs.js'; +var OPFS = 'OPFS is no longer included by default; build with -lopfs.js'; + +var NODEFS = 'NODEFS is no longer included by default; build with -lnodefs.js'; + +assert(!ENVIRONMENT_IS_SHELL, 'shell environment detected but not enabled at build time. Add `shell` to `-sENVIRONMENT` to enable.'); + +// end include: shell.js + +// include: preamble.js +// === Preamble library stuff === + +// Documentation for the public APIs defined in this file must be updated in: +// site/source/docs/api_reference/preamble.js.rst +// A prebuilt local version of the documentation is available at: +// site/build/text/docs/api_reference/preamble.js.txt +// You can also build docs locally as HTML or other formats in site/ +// An online HTML version (which may be of a different version of Emscripten) +// is up at http://kripken.github.io/emscripten-site/docs/api_reference/preamble.js.html + +var wasmBinary = Module['wasmBinary'];legacyModuleProp('wasmBinary', 'wasmBinary'); + +if (typeof WebAssembly != 'object') { + err('no native wasm support detected'); +} + +// Wasm globals + +var wasmMemory; + +//======================================== +// Runtime essentials +//======================================== + +// whether we are quitting the application. no code should run after this. +// set in exit() and abort() +var ABORT = false; + +// set by exit() and abort(). Passed to 'onExit' handler. +// NOTE: This is also used as the process return code code in shell environments +// but only when noExitRuntime is false. +var EXITSTATUS; + +// In STRICT mode, we only define assert() when ASSERTIONS is set. i.e. we +// don't define it at all in release modes. This matches the behaviour of +// MINIMAL_RUNTIME. +// TODO(sbc): Make this the default even without STRICT enabled. +/** @type {function(*, string=)} */ +function assert(condition, text) { + if (!condition) { + abort('Assertion failed' + (text ? ': ' + text : '')); + } +} + +// We used to include malloc/free by default in the past. Show a helpful error in +// builds with assertions. +function _malloc() { + abort('malloc() called but not included in the build - add `_malloc` to EXPORTED_FUNCTIONS'); +} +function _free() { + // Show a helpful error since we used to include free by default in the past. + abort('free() called but not included in the build - add `_free` to EXPORTED_FUNCTIONS'); +} + +// Memory management + +var HEAP, +/** @type {!Int8Array} */ + HEAP8, +/** @type {!Uint8Array} */ + HEAPU8, +/** @type {!Int16Array} */ + HEAP16, +/** @type {!Uint16Array} */ + HEAPU16, +/** @type {!Int32Array} */ + HEAP32, +/** @type {!Uint32Array} */ + HEAPU32, +/** @type {!Float32Array} */ + HEAPF32, +/* BigInt64Array type is not correctly defined in closure +/** not-@type {!BigInt64Array} */ + HEAP64, +/* BigUint64Array type is not correctly defined in closure +/** not-t@type {!BigUint64Array} */ + HEAPU64, +/** @type {!Float64Array} */ + HEAPF64; + +var runtimeInitialized = false; + +/** + * Indicates whether filename is delivered via file protocol (as opposed to http/https) + * @noinline + */ +var isFileURI = (filename) => filename.startsWith('file://'); + +// include: runtime_shared.js +// include: runtime_stack_check.js +// Initializes the stack cookie. Called at the startup of main and at the startup of each thread in pthreads mode. +function writeStackCookie() { + var max = _emscripten_stack_get_end(); + assert((max & 3) == 0); + // If the stack ends at address zero we write our cookies 4 bytes into the + // stack. This prevents interference with SAFE_HEAP and ASAN which also + // monitor writes to address zero. + if (max == 0) { + max += 4; + } + // The stack grow downwards towards _emscripten_stack_get_end. + // We write cookies to the final two words in the stack and detect if they are + // ever overwritten. + HEAPU32[((max)>>2)] = 0x02135467; + HEAPU32[(((max)+(4))>>2)] = 0x89BACDFE; + // Also test the global address 0 for integrity. + HEAPU32[((0)>>2)] = 1668509029; +} + +function checkStackCookie() { + if (ABORT) return; + var max = _emscripten_stack_get_end(); + // See writeStackCookie(). + if (max == 0) { + max += 4; + } + var cookie1 = HEAPU32[((max)>>2)]; + var cookie2 = HEAPU32[(((max)+(4))>>2)]; + if (cookie1 != 0x02135467 || cookie2 != 0x89BACDFE) { + abort(`Stack overflow! Stack cookie has been overwritten at ${ptrToString(max)}, expected hex dwords 0x89BACDFE and 0x2135467, but received ${ptrToString(cookie2)} ${ptrToString(cookie1)}`); + } + // Also test the global address 0 for integrity. + if (HEAPU32[((0)>>2)] != 0x63736d65 /* 'emsc' */) { + abort('Runtime error: The application has corrupted its heap memory area (address zero)!'); + } +} +// end include: runtime_stack_check.js +// include: runtime_exceptions.js +// end include: runtime_exceptions.js +// include: runtime_debug.js +// Endianness check +(() => { + var h16 = new Int16Array(1); + var h8 = new Int8Array(h16.buffer); + h16[0] = 0x6373; + if (h8[0] !== 0x73 || h8[1] !== 0x63) throw 'Runtime error: expected the system to be little-endian! (Run with -sSUPPORT_BIG_ENDIAN to bypass)'; +})(); + +if (Module['ENVIRONMENT']) { + throw new Error('Module.ENVIRONMENT has been deprecated. To force the environment, use the ENVIRONMENT compile-time option (for example, -sENVIRONMENT=web or -sENVIRONMENT=node)'); +} + +function legacyModuleProp(prop, newName, incoming=true) { + if (!Object.getOwnPropertyDescriptor(Module, prop)) { + Object.defineProperty(Module, prop, { + configurable: true, + get() { + let extra = incoming ? ' (the initial value can be provided on Module, but after startup the value is only looked for on a local variable of that name)' : ''; + abort(`\`Module.${prop}\` has been replaced by \`${newName}\`` + extra); + + } + }); + } +} + +function consumedModuleProp(prop) { + if (!Object.getOwnPropertyDescriptor(Module, prop)) { + Object.defineProperty(Module, prop, { + configurable: true, + set() { + abort(`Attempt to set \`Module.${prop}\` after it has already been processed. This can happen, for example, when code is injected via '--post-js' rather than '--pre-js'`); + + } + }); + } +} + +function ignoredModuleProp(prop) { + if (Object.getOwnPropertyDescriptor(Module, prop)) { + abort(`\`Module.${prop}\` was supplied but \`${prop}\` not included in INCOMING_MODULE_JS_API`); + } +} + +// forcing the filesystem exports a few things by default +function isExportedByForceFilesystem(name) { + return name === 'FS_createPath' || + name === 'FS_createDataFile' || + name === 'FS_createPreloadedFile' || + name === 'FS_unlink' || + name === 'addRunDependency' || + // The old FS has some functionality that WasmFS lacks. + name === 'FS_createLazyFile' || + name === 'FS_createDevice' || + name === 'removeRunDependency'; +} + +/** + * Intercept access to a global symbol. This enables us to give informative + * warnings/errors when folks attempt to use symbols they did not include in + * their build, or no symbols that no longer exist. + */ +function hookGlobalSymbolAccess(sym, func) { + if (typeof globalThis != 'undefined' && !Object.getOwnPropertyDescriptor(globalThis, sym)) { + Object.defineProperty(globalThis, sym, { + configurable: true, + get() { + func(); + return undefined; + } + }); + } +} + +function missingGlobal(sym, msg) { + hookGlobalSymbolAccess(sym, () => { + warnOnce(`\`${sym}\` is not longer defined by emscripten. ${msg}`); + }); +} + +missingGlobal('buffer', 'Please use HEAP8.buffer or wasmMemory.buffer'); +missingGlobal('asm', 'Please use wasmExports instead'); + +function missingLibrarySymbol(sym) { + hookGlobalSymbolAccess(sym, () => { + // Can't `abort()` here because it would break code that does runtime + // checks. e.g. `if (typeof SDL === 'undefined')`. + var msg = `\`${sym}\` is a library symbol and not included by default; add it to your library.js __deps or to DEFAULT_LIBRARY_FUNCS_TO_INCLUDE on the command line`; + // DEFAULT_LIBRARY_FUNCS_TO_INCLUDE requires the name as it appears in + // library.js, which means $name for a JS name with no prefix, or name + // for a JS name like _name. + var librarySymbol = sym; + if (!librarySymbol.startsWith('_')) { + librarySymbol = '$' + sym; + } + msg += ` (e.g. -sDEFAULT_LIBRARY_FUNCS_TO_INCLUDE='${librarySymbol}')`; + if (isExportedByForceFilesystem(sym)) { + msg += '. Alternatively, forcing filesystem support (-sFORCE_FILESYSTEM) can export this for you'; + } + warnOnce(msg); + }); + + // Any symbol that is not included from the JS library is also (by definition) + // not exported on the Module object. + unexportedRuntimeSymbol(sym); +} + +function unexportedRuntimeSymbol(sym) { + if (!Object.getOwnPropertyDescriptor(Module, sym)) { + Object.defineProperty(Module, sym, { + configurable: true, + get() { + var msg = `'${sym}' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the Emscripten FAQ)`; + if (isExportedByForceFilesystem(sym)) { + msg += '. Alternatively, forcing filesystem support (-sFORCE_FILESYSTEM) can export this for you'; + } + abort(msg); + } + }); + } +} + +var runtimeDebug = true; // Switch to false at runtime to disable logging at the right times + +// Used by XXXXX_DEBUG settings to output debug messages. +function dbg(...args) { + if (!runtimeDebug && typeof runtimeDebug != 'undefined') return; + // TODO(sbc): Make this configurable somehow. Its not always convenient for + // logging to show up as warnings. + console.warn(...args); +} +// end include: runtime_debug.js +// include: memoryprofiler.js +// end include: memoryprofiler.js + + +function updateMemoryViews() { + var b = wasmMemory.buffer; + Module['HEAP8'] = HEAP8 = new Int8Array(b); + Module['HEAP16'] = HEAP16 = new Int16Array(b); + Module['HEAPU8'] = HEAPU8 = new Uint8Array(b); + Module['HEAPU16'] = HEAPU16 = new Uint16Array(b); + Module['HEAP32'] = HEAP32 = new Int32Array(b); + Module['HEAPU32'] = HEAPU32 = new Uint32Array(b); + Module['HEAPF32'] = HEAPF32 = new Float32Array(b); + Module['HEAPF64'] = HEAPF64 = new Float64Array(b); + Module['HEAP64'] = HEAP64 = new BigInt64Array(b); + Module['HEAPU64'] = HEAPU64 = new BigUint64Array(b); +} + +// end include: runtime_shared.js +assert(!Module['STACK_SIZE'], 'STACK_SIZE can no longer be set at runtime. Use -sSTACK_SIZE at link time') + +assert(typeof Int32Array != 'undefined' && typeof Float64Array !== 'undefined' && Int32Array.prototype.subarray != undefined && Int32Array.prototype.set != undefined, + 'JS engine does not provide full typed array support'); + +// If memory is defined in wasm, the user can't provide it, or set INITIAL_MEMORY +assert(!Module['wasmMemory'], 'Use of `wasmMemory` detected. Use -sIMPORTED_MEMORY to define wasmMemory externally'); +assert(!Module['INITIAL_MEMORY'], 'Detected runtime INITIAL_MEMORY setting. Use -sIMPORTED_MEMORY to define wasmMemory dynamically'); + +function preRun() { + if (Module['preRun']) { + if (typeof Module['preRun'] == 'function') Module['preRun'] = [Module['preRun']]; + while (Module['preRun'].length) { + addOnPreRun(Module['preRun'].shift()); + } + } + consumedModuleProp('preRun'); + callRuntimeCallbacks(onPreRuns); +} + +function initRuntime() { + assert(!runtimeInitialized); + runtimeInitialized = true; + + checkStackCookie(); + + if (!Module['noFSInit'] && !FS.initialized) FS.init(); +TTY.init(); + + wasmExports['__wasm_call_ctors'](); + + FS.ignorePermissions = false; +} + +function preMain() { + checkStackCookie(); + +} + +function postRun() { + checkStackCookie(); + + if (Module['postRun']) { + if (typeof Module['postRun'] == 'function') Module['postRun'] = [Module['postRun']]; + while (Module['postRun'].length) { + addOnPostRun(Module['postRun'].shift()); + } + } + consumedModuleProp('postRun'); + + callRuntimeCallbacks(onPostRuns); +} + +// A counter of dependencies for calling run(). If we need to +// do asynchronous work before running, increment this and +// decrement it. Incrementing must happen in a place like +// Module.preRun (used by emcc to add file preloading). +// Note that you can add dependencies in preRun, even though +// it happens right before run - run will be postponed until +// the dependencies are met. +var runDependencies = 0; +var dependenciesFulfilled = null; // overridden to take different actions when all run dependencies are fulfilled +var runDependencyTracking = {}; +var runDependencyWatcher = null; + +function getUniqueRunDependency(id) { + var orig = id; + while (1) { + if (!runDependencyTracking[id]) return id; + id = orig + Math.random(); + } +} + +function addRunDependency(id) { + runDependencies++; + + Module['monitorRunDependencies']?.(runDependencies); + + if (id) { + assert(!runDependencyTracking[id]); + runDependencyTracking[id] = 1; + if (runDependencyWatcher === null && typeof setInterval != 'undefined') { + // Check for missing dependencies every few seconds + runDependencyWatcher = setInterval(() => { + if (ABORT) { + clearInterval(runDependencyWatcher); + runDependencyWatcher = null; + return; + } + var shown = false; + for (var dep in runDependencyTracking) { + if (!shown) { + shown = true; + err('still waiting on run dependencies:'); + } + err(`dependency: ${dep}`); + } + if (shown) { + err('(end of list)'); + } + }, 10000); + } + } else { + err('warning: run dependency added without ID'); + } +} + +function removeRunDependency(id) { + runDependencies--; + + Module['monitorRunDependencies']?.(runDependencies); + + if (id) { + assert(runDependencyTracking[id]); + delete runDependencyTracking[id]; + } else { + err('warning: run dependency removed without ID'); + } + if (runDependencies == 0) { + if (runDependencyWatcher !== null) { + clearInterval(runDependencyWatcher); + runDependencyWatcher = null; + } + if (dependenciesFulfilled) { + var callback = dependenciesFulfilled; + dependenciesFulfilled = null; + callback(); // can add another dependenciesFulfilled + } + } +} + +/** @param {string|number=} what */ +function abort(what) { + Module['onAbort']?.(what); + + what = 'Aborted(' + what + ')'; + // TODO(sbc): Should we remove printing and leave it up to whoever + // catches the exception? + err(what); + + ABORT = true; + + // Use a wasm runtime error, because a JS error might be seen as a foreign + // exception, which means we'd run destructors on it. We need the error to + // simply make the program stop. + // FIXME This approach does not work in Wasm EH because it currently does not assume + // all RuntimeErrors are from traps; it decides whether a RuntimeError is from + // a trap or not based on a hidden field within the object. So at the moment + // we don't have a way of throwing a wasm trap from JS. TODO Make a JS API that + // allows this in the wasm spec. + + // Suppress closure compiler warning here. Closure compiler's builtin extern + // definition for WebAssembly.RuntimeError claims it takes no arguments even + // though it can. + // TODO(https://github.com/google/closure-compiler/pull/3913): Remove if/when upstream closure gets fixed. + /** @suppress {checkTypes} */ + var e = new WebAssembly.RuntimeError(what); + + // Throw the error whether or not MODULARIZE is set because abort is used + // in code paths apart from instantiation where an exception is expected + // to be thrown when abort is called. + throw e; +} + +function createExportWrapper(name, nargs) { + return (...args) => { + assert(runtimeInitialized, `native function \`${name}\` called before runtime initialization`); + var f = wasmExports[name]; + assert(f, `exported native function \`${name}\` not found`); + // Only assert for too many arguments. Too few can be valid since the missing arguments will be zero filled. + assert(args.length <= nargs, `native function \`${name}\` called with ${args.length} args but expects ${nargs}`); + return f(...args); + }; +} + +var wasmBinaryFile; + +function findWasmBinary() { + return locateFile('example.wasm'); +} + +function getBinarySync(file) { + if (file == wasmBinaryFile && wasmBinary) { + return new Uint8Array(wasmBinary); + } + if (readBinary) { + return readBinary(file); + } + throw 'both async and sync fetching of the wasm failed'; +} + +async function getWasmBinary(binaryFile) { + // If we don't have the binary yet, load it asynchronously using readAsync. + if (!wasmBinary) { + // Fetch the binary using readAsync + try { + var response = await readAsync(binaryFile); + return new Uint8Array(response); + } catch { + // Fall back to getBinarySync below; + } + } + + // Otherwise, getBinarySync should be able to get it synchronously + return getBinarySync(binaryFile); +} + +async function instantiateArrayBuffer(binaryFile, imports) { + try { + var binary = await getWasmBinary(binaryFile); + var instance = await WebAssembly.instantiate(binary, imports); + return instance; + } catch (reason) { + err(`failed to asynchronously prepare wasm: ${reason}`); + + // Warn on some common problems. + if (isFileURI(wasmBinaryFile)) { + err(`warning: Loading from a file URI (${wasmBinaryFile}) is not supported in most browsers. See https://emscripten.org/docs/getting_started/FAQ.html#how-do-i-run-a-local-webserver-for-testing-why-does-my-program-stall-in-downloading-or-preparing`); + } + abort(reason); + } +} + +async function instantiateAsync(binary, binaryFile, imports) { + if (!binary && typeof WebAssembly.instantiateStreaming == 'function' + // Don't use streaming for file:// delivered objects in a webview, fetch them synchronously. + && !isFileURI(binaryFile) + // Avoid instantiateStreaming() on Node.js environment for now, as while + // Node.js v18.1.0 implements it, it does not have a full fetch() + // implementation yet. + // + // Reference: + // https://github.com/emscripten-core/emscripten/pull/16917 + && !ENVIRONMENT_IS_NODE + ) { + try { + var response = fetch(binaryFile, { credentials: 'same-origin' }); + var instantiationResult = await WebAssembly.instantiateStreaming(response, imports); + return instantiationResult; + } catch (reason) { + // We expect the most common failure cause to be a bad MIME type for the binary, + // in which case falling back to ArrayBuffer instantiation should work. + err(`wasm streaming compile failed: ${reason}`); + err('falling back to ArrayBuffer instantiation'); + // fall back of instantiateArrayBuffer below + }; + } + return instantiateArrayBuffer(binaryFile, imports); +} + +function getWasmImports() { + // prepare imports + return { + 'env': wasmImports, + 'wasi_snapshot_preview1': wasmImports, + } +} + +// Create the wasm instance. +// Receives the wasm imports, returns the exports. +async function createWasm() { + // Load the wasm module and create an instance of using native support in the JS engine. + // handle a generated wasm instance, receiving its exports and + // performing other necessary setup + /** @param {WebAssembly.Module=} module*/ + function receiveInstance(instance, module) { + wasmExports = instance.exports; + + + + wasmMemory = wasmExports['memory']; + + assert(wasmMemory, 'memory not found in wasm exports'); + updateMemoryViews(); + + removeRunDependency('wasm-instantiate'); + return wasmExports; + } + // wait for the pthread pool (if any) + addRunDependency('wasm-instantiate'); + + // Prefer streaming instantiation if available. + // Async compilation can be confusing when an error on the page overwrites Module + // (for example, if the order of elements is wrong, and the one defining Module is + // later), so we save Module and check it later. + var trueModule = Module; + function receiveInstantiationResult(result) { + // 'result' is a ResultObject object which has both the module and instance. + // receiveInstance() will swap in the exports (to Module.asm) so they can be called + assert(Module === trueModule, 'the Module object should not be replaced during async compilation - perhaps the order of HTML elements is wrong?'); + trueModule = null; + // TODO: Due to Closure regression https://github.com/google/closure-compiler/issues/3193, the above line no longer optimizes out down to the following line. + // When the regression is fixed, can restore the above PTHREADS-enabled path. + return receiveInstance(result['instance']); + } + + var info = getWasmImports(); + + // User shell pages can write their own Module.instantiateWasm = function(imports, successCallback) callback + // to manually instantiate the Wasm module themselves. This allows pages to + // run the instantiation parallel to any other async startup actions they are + // performing. + // Also pthreads and wasm workers initialize the wasm instance through this + // path. + if (Module['instantiateWasm']) { + return new Promise((resolve, reject) => { + try { + Module['instantiateWasm'](info, (mod, inst) => { + receiveInstance(mod, inst); + resolve(mod.exports); + }); + } catch(e) { + err(`Module.instantiateWasm callback failed with error: ${e}`); + reject(e); + } + }); + } + + wasmBinaryFile ??= findWasmBinary(); + var result = await instantiateAsync(wasmBinary, wasmBinaryFile, info); + var exports = receiveInstantiationResult(result); + return exports; +} + +// end include: preamble.js + +// Begin JS library code + + + class ExitStatus { + name = 'ExitStatus'; + constructor(status) { + this.message = `Program terminated with exit(${status})`; + this.status = status; + } + } + + var callRuntimeCallbacks = (callbacks) => { + while (callbacks.length > 0) { + // Pass the module as the first argument. + callbacks.shift()(Module); + } + }; + var onPostRuns = []; + var addOnPostRun = (cb) => onPostRuns.unshift(cb); + + var onPreRuns = []; + var addOnPreRun = (cb) => onPreRuns.unshift(cb); + + + + /** + * @param {number} ptr + * @param {string} type + */ + function getValue(ptr, type = 'i8') { + if (type.endsWith('*')) type = '*'; + switch (type) { + case 'i1': return HEAP8[ptr]; + case 'i8': return HEAP8[ptr]; + case 'i16': return HEAP16[((ptr)>>1)]; + case 'i32': return HEAP32[((ptr)>>2)]; + case 'i64': return HEAP64[((ptr)>>3)]; + case 'float': return HEAPF32[((ptr)>>2)]; + case 'double': return HEAPF64[((ptr)>>3)]; + case '*': return HEAPU32[((ptr)>>2)]; + default: abort(`invalid type for getValue: ${type}`); + } + } + + var noExitRuntime = Module['noExitRuntime'] || true; + + var ptrToString = (ptr) => { + assert(typeof ptr === 'number'); + // With CAN_ADDRESS_2GB or MEMORY64, pointers are already unsigned. + ptr >>>= 0; + return '0x' + ptr.toString(16).padStart(8, '0'); + }; + + + /** + * @param {number} ptr + * @param {number} value + * @param {string} type + */ + function setValue(ptr, value, type = 'i8') { + if (type.endsWith('*')) type = '*'; + switch (type) { + case 'i1': HEAP8[ptr] = value; break; + case 'i8': HEAP8[ptr] = value; break; + case 'i16': HEAP16[((ptr)>>1)] = value; break; + case 'i32': HEAP32[((ptr)>>2)] = value; break; + case 'i64': HEAP64[((ptr)>>3)] = BigInt(value); break; + case 'float': HEAPF32[((ptr)>>2)] = value; break; + case 'double': HEAPF64[((ptr)>>3)] = value; break; + case '*': HEAPU32[((ptr)>>2)] = value; break; + default: abort(`invalid type for setValue: ${type}`); + } + } + + var stackRestore = (val) => __emscripten_stack_restore(val); + + var stackSave = () => _emscripten_stack_get_current(); + + var warnOnce = (text) => { + warnOnce.shown ||= {}; + if (!warnOnce.shown[text]) { + warnOnce.shown[text] = 1; + if (ENVIRONMENT_IS_NODE) text = 'warning: ' + text; + err(text); + } + }; + + var syscallGetVarargI = () => { + assert(SYSCALLS.varargs != undefined); + // the `+` prepended here is necessary to convince the JSCompiler that varargs is indeed a number. + var ret = HEAP32[((+SYSCALLS.varargs)>>2)]; + SYSCALLS.varargs += 4; + return ret; + }; + + var PATH = { + isAbs:(path) => path.charAt(0) === '/', + splitPath:(filename) => { + var splitPathRe = /^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/; + return splitPathRe.exec(filename).slice(1); + }, + normalizeArray:(parts, allowAboveRoot) => { + // if the path tries to go above the root, `up` ends up > 0 + var up = 0; + for (var i = parts.length - 1; i >= 0; i--) { + var last = parts[i]; + if (last === '.') { + parts.splice(i, 1); + } else if (last === '..') { + parts.splice(i, 1); + up++; + } else if (up) { + parts.splice(i, 1); + up--; + } + } + // if the path is allowed to go above the root, restore leading ..s + if (allowAboveRoot) { + for (; up; up--) { + parts.unshift('..'); + } + } + return parts; + }, + normalize:(path) => { + var isAbsolute = PATH.isAbs(path), + trailingSlash = path.slice(-1) === '/'; + // Normalize the path + path = PATH.normalizeArray(path.split('/').filter((p) => !!p), !isAbsolute).join('/'); + if (!path && !isAbsolute) { + path = '.'; + } + if (path && trailingSlash) { + path += '/'; + } + return (isAbsolute ? '/' : '') + path; + }, + dirname:(path) => { + var result = PATH.splitPath(path), + root = result[0], + dir = result[1]; + if (!root && !dir) { + // No dirname whatsoever + return '.'; + } + if (dir) { + // It has a dirname, strip trailing slash + dir = dir.slice(0, -1); + } + return root + dir; + }, + basename:(path) => path && path.match(/([^\/]+|\/)\/*$/)[1], + join:(...paths) => PATH.normalize(paths.join('/')), + join2:(l, r) => PATH.normalize(l + '/' + r), + }; + + var initRandomFill = () => { + // This block is not needed on v19+ since crypto.getRandomValues is builtin + if (ENVIRONMENT_IS_NODE) { + var nodeCrypto = require('crypto'); + return (view) => nodeCrypto.randomFillSync(view); + } + + return (view) => crypto.getRandomValues(view); + }; + var randomFill = (view) => { + // Lazily init on the first invocation. + (randomFill = initRandomFill())(view); + }; + + + + var PATH_FS = { + resolve:(...args) => { + var resolvedPath = '', + resolvedAbsolute = false; + for (var i = args.length - 1; i >= -1 && !resolvedAbsolute; i--) { + var path = (i >= 0) ? args[i] : FS.cwd(); + // Skip empty and invalid entries + if (typeof path != 'string') { + throw new TypeError('Arguments to path.resolve must be strings'); + } else if (!path) { + return ''; // an invalid portion invalidates the whole thing + } + resolvedPath = path + '/' + resolvedPath; + resolvedAbsolute = PATH.isAbs(path); + } + // At this point the path should be resolved to a full absolute path, but + // handle relative paths to be safe (might happen when process.cwd() fails) + resolvedPath = PATH.normalizeArray(resolvedPath.split('/').filter((p) => !!p), !resolvedAbsolute).join('/'); + return ((resolvedAbsolute ? '/' : '') + resolvedPath) || '.'; + }, + relative:(from, to) => { + from = PATH_FS.resolve(from).slice(1); + to = PATH_FS.resolve(to).slice(1); + function trim(arr) { + var start = 0; + for (; start < arr.length; start++) { + if (arr[start] !== '') break; + } + var end = arr.length - 1; + for (; end >= 0; end--) { + if (arr[end] !== '') break; + } + if (start > end) return []; + return arr.slice(start, end - start + 1); + } + var fromParts = trim(from.split('/')); + var toParts = trim(to.split('/')); + var length = Math.min(fromParts.length, toParts.length); + var samePartsLength = length; + for (var i = 0; i < length; i++) { + if (fromParts[i] !== toParts[i]) { + samePartsLength = i; + break; + } + } + var outputParts = []; + for (var i = samePartsLength; i < fromParts.length; i++) { + outputParts.push('..'); + } + outputParts = outputParts.concat(toParts.slice(samePartsLength)); + return outputParts.join('/'); + }, + }; + + + var UTF8Decoder = typeof TextDecoder != 'undefined' ? new TextDecoder() : undefined; + + /** + * Given a pointer 'idx' to a null-terminated UTF8-encoded string in the given + * array that contains uint8 values, returns a copy of that string as a + * Javascript String object. + * heapOrArray is either a regular array, or a JavaScript typed array view. + * @param {number=} idx + * @param {number=} maxBytesToRead + * @return {string} + */ + var UTF8ArrayToString = (heapOrArray, idx = 0, maxBytesToRead = NaN) => { + var endIdx = idx + maxBytesToRead; + var endPtr = idx; + // TextDecoder needs to know the byte length in advance, it doesn't stop on + // null terminator by itself. Also, use the length info to avoid running tiny + // strings through TextDecoder, since .subarray() allocates garbage. + // (As a tiny code save trick, compare endPtr against endIdx using a negation, + // so that undefined/NaN means Infinity) + while (heapOrArray[endPtr] && !(endPtr >= endIdx)) ++endPtr; + + if (endPtr - idx > 16 && heapOrArray.buffer && UTF8Decoder) { + return UTF8Decoder.decode(heapOrArray.subarray(idx, endPtr)); + } + var str = ''; + // If building with TextDecoder, we have already computed the string length + // above, so test loop end condition against that + while (idx < endPtr) { + // For UTF8 byte structure, see: + // http://en.wikipedia.org/wiki/UTF-8#Description + // https://www.ietf.org/rfc/rfc2279.txt + // https://tools.ietf.org/html/rfc3629 + var u0 = heapOrArray[idx++]; + if (!(u0 & 0x80)) { str += String.fromCharCode(u0); continue; } + var u1 = heapOrArray[idx++] & 63; + if ((u0 & 0xE0) == 0xC0) { str += String.fromCharCode(((u0 & 31) << 6) | u1); continue; } + var u2 = heapOrArray[idx++] & 63; + if ((u0 & 0xF0) == 0xE0) { + u0 = ((u0 & 15) << 12) | (u1 << 6) | u2; + } else { + if ((u0 & 0xF8) != 0xF0) warnOnce('Invalid UTF-8 leading byte ' + ptrToString(u0) + ' encountered when deserializing a UTF-8 string in wasm memory to a JS string!'); + u0 = ((u0 & 7) << 18) | (u1 << 12) | (u2 << 6) | (heapOrArray[idx++] & 63); + } + + if (u0 < 0x10000) { + str += String.fromCharCode(u0); + } else { + var ch = u0 - 0x10000; + str += String.fromCharCode(0xD800 | (ch >> 10), 0xDC00 | (ch & 0x3FF)); + } + } + return str; + }; + + var FS_stdin_getChar_buffer = []; + + var lengthBytesUTF8 = (str) => { + var len = 0; + for (var i = 0; i < str.length; ++i) { + // Gotcha: charCodeAt returns a 16-bit word that is a UTF-16 encoded code + // unit, not a Unicode code point of the character! So decode + // UTF16->UTF32->UTF8. + // See http://unicode.org/faq/utf_bom.html#utf16-3 + var c = str.charCodeAt(i); // possibly a lead surrogate + if (c <= 0x7F) { + len++; + } else if (c <= 0x7FF) { + len += 2; + } else if (c >= 0xD800 && c <= 0xDFFF) { + len += 4; ++i; + } else { + len += 3; + } + } + return len; + }; + + var stringToUTF8Array = (str, heap, outIdx, maxBytesToWrite) => { + assert(typeof str === 'string', `stringToUTF8Array expects a string (got ${typeof str})`); + // Parameter maxBytesToWrite is not optional. Negative values, 0, null, + // undefined and false each don't write out any bytes. + if (!(maxBytesToWrite > 0)) + return 0; + + var startIdx = outIdx; + var endIdx = outIdx + maxBytesToWrite - 1; // -1 for string null terminator. + for (var i = 0; i < str.length; ++i) { + // Gotcha: charCodeAt returns a 16-bit word that is a UTF-16 encoded code + // unit, not a Unicode code point of the character! So decode + // UTF16->UTF32->UTF8. + // See http://unicode.org/faq/utf_bom.html#utf16-3 + // For UTF8 byte structure, see http://en.wikipedia.org/wiki/UTF-8#Description + // and https://www.ietf.org/rfc/rfc2279.txt + // and https://tools.ietf.org/html/rfc3629 + var u = str.charCodeAt(i); // possibly a lead surrogate + if (u >= 0xD800 && u <= 0xDFFF) { + var u1 = str.charCodeAt(++i); + u = 0x10000 + ((u & 0x3FF) << 10) | (u1 & 0x3FF); + } + if (u <= 0x7F) { + if (outIdx >= endIdx) break; + heap[outIdx++] = u; + } else if (u <= 0x7FF) { + if (outIdx + 1 >= endIdx) break; + heap[outIdx++] = 0xC0 | (u >> 6); + heap[outIdx++] = 0x80 | (u & 63); + } else if (u <= 0xFFFF) { + if (outIdx + 2 >= endIdx) break; + heap[outIdx++] = 0xE0 | (u >> 12); + heap[outIdx++] = 0x80 | ((u >> 6) & 63); + heap[outIdx++] = 0x80 | (u & 63); + } else { + if (outIdx + 3 >= endIdx) break; + if (u > 0x10FFFF) warnOnce('Invalid Unicode code point ' + ptrToString(u) + ' encountered when serializing a JS string to a UTF-8 string in wasm memory! (Valid unicode code points should be in range 0-0x10FFFF).'); + heap[outIdx++] = 0xF0 | (u >> 18); + heap[outIdx++] = 0x80 | ((u >> 12) & 63); + heap[outIdx++] = 0x80 | ((u >> 6) & 63); + heap[outIdx++] = 0x80 | (u & 63); + } + } + // Null-terminate the pointer to the buffer. + heap[outIdx] = 0; + return outIdx - startIdx; + }; + /** @type {function(string, boolean=, number=)} */ + var intArrayFromString = (stringy, dontAddNull, length) => { + var len = length > 0 ? length : lengthBytesUTF8(stringy)+1; + var u8array = new Array(len); + var numBytesWritten = stringToUTF8Array(stringy, u8array, 0, u8array.length); + if (dontAddNull) u8array.length = numBytesWritten; + return u8array; + }; + var FS_stdin_getChar = () => { + if (!FS_stdin_getChar_buffer.length) { + var result = null; + if (ENVIRONMENT_IS_NODE) { + // we will read data by chunks of BUFSIZE + var BUFSIZE = 256; + var buf = Buffer.alloc(BUFSIZE); + var bytesRead = 0; + + // For some reason we must suppress a closure warning here, even though + // fd definitely exists on process.stdin, and is even the proper way to + // get the fd of stdin, + // https://github.com/nodejs/help/issues/2136#issuecomment-523649904 + // This started to happen after moving this logic out of library_tty.js, + // so it is related to the surrounding code in some unclear manner. + /** @suppress {missingProperties} */ + var fd = process.stdin.fd; + + try { + bytesRead = fs.readSync(fd, buf, 0, BUFSIZE); + } catch(e) { + // Cross-platform differences: on Windows, reading EOF throws an + // exception, but on other OSes, reading EOF returns 0. Uniformize + // behavior by treating the EOF exception to return 0. + if (e.toString().includes('EOF')) bytesRead = 0; + else throw e; + } + + if (bytesRead > 0) { + result = buf.slice(0, bytesRead).toString('utf-8'); + } + } else + if (typeof window != 'undefined' && + typeof window.prompt == 'function') { + // Browser. + result = window.prompt('Input: '); // returns null on cancel + if (result !== null) { + result += '\n'; + } + } else + {} + if (!result) { + return null; + } + FS_stdin_getChar_buffer = intArrayFromString(result, true); + } + return FS_stdin_getChar_buffer.shift(); + }; + var TTY = { + ttys:[], + init() { + // https://github.com/emscripten-core/emscripten/pull/1555 + // if (ENVIRONMENT_IS_NODE) { + // // currently, FS.init does not distinguish if process.stdin is a file or TTY + // // device, it always assumes it's a TTY device. because of this, we're forcing + // // process.stdin to UTF8 encoding to at least make stdin reading compatible + // // with text files until FS.init can be refactored. + // process.stdin.setEncoding('utf8'); + // } + }, + shutdown() { + // https://github.com/emscripten-core/emscripten/pull/1555 + // if (ENVIRONMENT_IS_NODE) { + // // inolen: any idea as to why node -e 'process.stdin.read()' wouldn't exit immediately (with process.stdin being a tty)? + // // isaacs: because now it's reading from the stream, you've expressed interest in it, so that read() kicks off a _read() which creates a ReadReq operation + // // inolen: I thought read() in that case was a synchronous operation that just grabbed some amount of buffered data if it exists? + // // isaacs: it is. but it also triggers a _read() call, which calls readStart() on the handle + // // isaacs: do process.stdin.pause() and i'd think it'd probably close the pending call + // process.stdin.pause(); + // } + }, + register(dev, ops) { + TTY.ttys[dev] = { input: [], output: [], ops: ops }; + FS.registerDevice(dev, TTY.stream_ops); + }, + stream_ops:{ + open(stream) { + var tty = TTY.ttys[stream.node.rdev]; + if (!tty) { + throw new FS.ErrnoError(43); + } + stream.tty = tty; + stream.seekable = false; + }, + close(stream) { + // flush any pending line data + stream.tty.ops.fsync(stream.tty); + }, + fsync(stream) { + stream.tty.ops.fsync(stream.tty); + }, + read(stream, buffer, offset, length, pos /* ignored */) { + if (!stream.tty || !stream.tty.ops.get_char) { + throw new FS.ErrnoError(60); + } + var bytesRead = 0; + for (var i = 0; i < length; i++) { + var result; + try { + result = stream.tty.ops.get_char(stream.tty); + } catch (e) { + throw new FS.ErrnoError(29); + } + if (result === undefined && bytesRead === 0) { + throw new FS.ErrnoError(6); + } + if (result === null || result === undefined) break; + bytesRead++; + buffer[offset+i] = result; + } + if (bytesRead) { + stream.node.atime = Date.now(); + } + return bytesRead; + }, + write(stream, buffer, offset, length, pos) { + if (!stream.tty || !stream.tty.ops.put_char) { + throw new FS.ErrnoError(60); + } + try { + for (var i = 0; i < length; i++) { + stream.tty.ops.put_char(stream.tty, buffer[offset+i]); + } + } catch (e) { + throw new FS.ErrnoError(29); + } + if (length) { + stream.node.mtime = stream.node.ctime = Date.now(); + } + return i; + }, + }, + default_tty_ops:{ + get_char(tty) { + return FS_stdin_getChar(); + }, + put_char(tty, val) { + if (val === null || val === 10) { + out(UTF8ArrayToString(tty.output)); + tty.output = []; + } else { + if (val != 0) tty.output.push(val); // val == 0 would cut text output off in the middle. + } + }, + fsync(tty) { + if (tty.output?.length > 0) { + out(UTF8ArrayToString(tty.output)); + tty.output = []; + } + }, + ioctl_tcgets(tty) { + // typical setting + return { + c_iflag: 25856, + c_oflag: 5, + c_cflag: 191, + c_lflag: 35387, + c_cc: [ + 0x03, 0x1c, 0x7f, 0x15, 0x04, 0x00, 0x01, 0x00, 0x11, 0x13, 0x1a, 0x00, + 0x12, 0x0f, 0x17, 0x16, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + ] + }; + }, + ioctl_tcsets(tty, optional_actions, data) { + // currently just ignore + return 0; + }, + ioctl_tiocgwinsz(tty) { + return [24, 80]; + }, + }, + default_tty1_ops:{ + put_char(tty, val) { + if (val === null || val === 10) { + err(UTF8ArrayToString(tty.output)); + tty.output = []; + } else { + if (val != 0) tty.output.push(val); + } + }, + fsync(tty) { + if (tty.output?.length > 0) { + err(UTF8ArrayToString(tty.output)); + tty.output = []; + } + }, + }, + }; + + + var mmapAlloc = (size) => { + abort('internal error: mmapAlloc called but `emscripten_builtin_memalign` native symbol not exported'); + }; + var MEMFS = { + ops_table:null, + mount(mount) { + return MEMFS.createNode(null, '/', 16895, 0); + }, + createNode(parent, name, mode, dev) { + if (FS.isBlkdev(mode) || FS.isFIFO(mode)) { + // no supported + throw new FS.ErrnoError(63); + } + MEMFS.ops_table ||= { + dir: { + node: { + getattr: MEMFS.node_ops.getattr, + setattr: MEMFS.node_ops.setattr, + lookup: MEMFS.node_ops.lookup, + mknod: MEMFS.node_ops.mknod, + rename: MEMFS.node_ops.rename, + unlink: MEMFS.node_ops.unlink, + rmdir: MEMFS.node_ops.rmdir, + readdir: MEMFS.node_ops.readdir, + symlink: MEMFS.node_ops.symlink + }, + stream: { + llseek: MEMFS.stream_ops.llseek + } + }, + file: { + node: { + getattr: MEMFS.node_ops.getattr, + setattr: MEMFS.node_ops.setattr + }, + stream: { + llseek: MEMFS.stream_ops.llseek, + read: MEMFS.stream_ops.read, + write: MEMFS.stream_ops.write, + mmap: MEMFS.stream_ops.mmap, + msync: MEMFS.stream_ops.msync + } + }, + link: { + node: { + getattr: MEMFS.node_ops.getattr, + setattr: MEMFS.node_ops.setattr, + readlink: MEMFS.node_ops.readlink + }, + stream: {} + }, + chrdev: { + node: { + getattr: MEMFS.node_ops.getattr, + setattr: MEMFS.node_ops.setattr + }, + stream: FS.chrdev_stream_ops + } + }; + var node = FS.createNode(parent, name, mode, dev); + if (FS.isDir(node.mode)) { + node.node_ops = MEMFS.ops_table.dir.node; + node.stream_ops = MEMFS.ops_table.dir.stream; + node.contents = {}; + } else if (FS.isFile(node.mode)) { + node.node_ops = MEMFS.ops_table.file.node; + node.stream_ops = MEMFS.ops_table.file.stream; + node.usedBytes = 0; // The actual number of bytes used in the typed array, as opposed to contents.length which gives the whole capacity. + // When the byte data of the file is populated, this will point to either a typed array, or a normal JS array. Typed arrays are preferred + // for performance, and used by default. However, typed arrays are not resizable like normal JS arrays are, so there is a small disk size + // penalty involved for appending file writes that continuously grow a file similar to std::vector capacity vs used -scheme. + node.contents = null; + } else if (FS.isLink(node.mode)) { + node.node_ops = MEMFS.ops_table.link.node; + node.stream_ops = MEMFS.ops_table.link.stream; + } else if (FS.isChrdev(node.mode)) { + node.node_ops = MEMFS.ops_table.chrdev.node; + node.stream_ops = MEMFS.ops_table.chrdev.stream; + } + node.atime = node.mtime = node.ctime = Date.now(); + // add the new node to the parent + if (parent) { + parent.contents[name] = node; + parent.atime = parent.mtime = parent.ctime = node.atime; + } + return node; + }, + getFileDataAsTypedArray(node) { + if (!node.contents) return new Uint8Array(0); + if (node.contents.subarray) return node.contents.subarray(0, node.usedBytes); // Make sure to not return excess unused bytes. + return new Uint8Array(node.contents); + }, + expandFileStorage(node, newCapacity) { + var prevCapacity = node.contents ? node.contents.length : 0; + if (prevCapacity >= newCapacity) return; // No need to expand, the storage was already large enough. + // Don't expand strictly to the given requested limit if it's only a very small increase, but instead geometrically grow capacity. + // For small filesizes (<1MB), perform size*2 geometric increase, but for large sizes, do a much more conservative size*1.125 increase to + // avoid overshooting the allocation cap by a very large margin. + var CAPACITY_DOUBLING_MAX = 1024 * 1024; + newCapacity = Math.max(newCapacity, (prevCapacity * (prevCapacity < CAPACITY_DOUBLING_MAX ? 2.0 : 1.125)) >>> 0); + if (prevCapacity != 0) newCapacity = Math.max(newCapacity, 256); // At minimum allocate 256b for each file when expanding. + var oldContents = node.contents; + node.contents = new Uint8Array(newCapacity); // Allocate new storage. + if (node.usedBytes > 0) node.contents.set(oldContents.subarray(0, node.usedBytes), 0); // Copy old data over to the new storage. + }, + resizeFileStorage(node, newSize) { + if (node.usedBytes == newSize) return; + if (newSize == 0) { + node.contents = null; // Fully decommit when requesting a resize to zero. + node.usedBytes = 0; + } else { + var oldContents = node.contents; + node.contents = new Uint8Array(newSize); // Allocate new storage. + if (oldContents) { + node.contents.set(oldContents.subarray(0, Math.min(newSize, node.usedBytes))); // Copy old data over to the new storage. + } + node.usedBytes = newSize; + } + }, + node_ops:{ + getattr(node) { + var attr = {}; + // device numbers reuse inode numbers. + attr.dev = FS.isChrdev(node.mode) ? node.id : 1; + attr.ino = node.id; + attr.mode = node.mode; + attr.nlink = 1; + attr.uid = 0; + attr.gid = 0; + attr.rdev = node.rdev; + if (FS.isDir(node.mode)) { + attr.size = 4096; + } else if (FS.isFile(node.mode)) { + attr.size = node.usedBytes; + } else if (FS.isLink(node.mode)) { + attr.size = node.link.length; + } else { + attr.size = 0; + } + attr.atime = new Date(node.atime); + attr.mtime = new Date(node.mtime); + attr.ctime = new Date(node.ctime); + // NOTE: In our implementation, st_blocks = Math.ceil(st_size/st_blksize), + // but this is not required by the standard. + attr.blksize = 4096; + attr.blocks = Math.ceil(attr.size / attr.blksize); + return attr; + }, + setattr(node, attr) { + for (const key of ["mode", "atime", "mtime", "ctime"]) { + if (attr[key] != null) { + node[key] = attr[key]; + } + } + if (attr.size !== undefined) { + MEMFS.resizeFileStorage(node, attr.size); + } + }, + lookup(parent, name) { + throw new FS.ErrnoError(44); + }, + mknod(parent, name, mode, dev) { + return MEMFS.createNode(parent, name, mode, dev); + }, + rename(old_node, new_dir, new_name) { + var new_node; + try { + new_node = FS.lookupNode(new_dir, new_name); + } catch (e) {} + if (new_node) { + if (FS.isDir(old_node.mode)) { + // if we're overwriting a directory at new_name, make sure it's empty. + for (var i in new_node.contents) { + throw new FS.ErrnoError(55); + } + } + FS.hashRemoveNode(new_node); + } + // do the internal rewiring + delete old_node.parent.contents[old_node.name]; + new_dir.contents[new_name] = old_node; + old_node.name = new_name; + new_dir.ctime = new_dir.mtime = old_node.parent.ctime = old_node.parent.mtime = Date.now(); + }, + unlink(parent, name) { + delete parent.contents[name]; + parent.ctime = parent.mtime = Date.now(); + }, + rmdir(parent, name) { + var node = FS.lookupNode(parent, name); + for (var i in node.contents) { + throw new FS.ErrnoError(55); + } + delete parent.contents[name]; + parent.ctime = parent.mtime = Date.now(); + }, + readdir(node) { + return ['.', '..', ...Object.keys(node.contents)]; + }, + symlink(parent, newname, oldpath) { + var node = MEMFS.createNode(parent, newname, 0o777 | 40960, 0); + node.link = oldpath; + return node; + }, + readlink(node) { + if (!FS.isLink(node.mode)) { + throw new FS.ErrnoError(28); + } + return node.link; + }, + }, + stream_ops:{ + read(stream, buffer, offset, length, position) { + var contents = stream.node.contents; + if (position >= stream.node.usedBytes) return 0; + var size = Math.min(stream.node.usedBytes - position, length); + assert(size >= 0); + if (size > 8 && contents.subarray) { // non-trivial, and typed array + buffer.set(contents.subarray(position, position + size), offset); + } else { + for (var i = 0; i < size; i++) buffer[offset + i] = contents[position + i]; + } + return size; + }, + write(stream, buffer, offset, length, position, canOwn) { + // The data buffer should be a typed array view + assert(!(buffer instanceof ArrayBuffer)); + + if (!length) return 0; + var node = stream.node; + node.mtime = node.ctime = Date.now(); + + if (buffer.subarray && (!node.contents || node.contents.subarray)) { // This write is from a typed array to a typed array? + if (canOwn) { + assert(position === 0, 'canOwn must imply no weird position inside the file'); + node.contents = buffer.subarray(offset, offset + length); + node.usedBytes = length; + return length; + } else if (node.usedBytes === 0 && position === 0) { // If this is a simple first write to an empty file, do a fast set since we don't need to care about old data. + node.contents = buffer.slice(offset, offset + length); + node.usedBytes = length; + return length; + } else if (position + length <= node.usedBytes) { // Writing to an already allocated and used subrange of the file? + node.contents.set(buffer.subarray(offset, offset + length), position); + return length; + } + } + + // Appending to an existing file and we need to reallocate, or source data did not come as a typed array. + MEMFS.expandFileStorage(node, position+length); + if (node.contents.subarray && buffer.subarray) { + // Use typed array write which is available. + node.contents.set(buffer.subarray(offset, offset + length), position); + } else { + for (var i = 0; i < length; i++) { + node.contents[position + i] = buffer[offset + i]; // Or fall back to manual write if not. + } + } + node.usedBytes = Math.max(node.usedBytes, position + length); + return length; + }, + llseek(stream, offset, whence) { + var position = offset; + if (whence === 1) { + position += stream.position; + } else if (whence === 2) { + if (FS.isFile(stream.node.mode)) { + position += stream.node.usedBytes; + } + } + if (position < 0) { + throw new FS.ErrnoError(28); + } + return position; + }, + mmap(stream, length, position, prot, flags) { + if (!FS.isFile(stream.node.mode)) { + throw new FS.ErrnoError(43); + } + var ptr; + var allocated; + var contents = stream.node.contents; + // Only make a new copy when MAP_PRIVATE is specified. + if (!(flags & 2) && contents && contents.buffer === HEAP8.buffer) { + // We can't emulate MAP_SHARED when the file is not backed by the + // buffer we're mapping to (e.g. the HEAP buffer). + allocated = false; + ptr = contents.byteOffset; + } else { + allocated = true; + ptr = mmapAlloc(length); + if (!ptr) { + throw new FS.ErrnoError(48); + } + if (contents) { + // Try to avoid unnecessary slices. + if (position > 0 || position + length < contents.length) { + if (contents.subarray) { + contents = contents.subarray(position, position + length); + } else { + contents = Array.prototype.slice.call(contents, position, position + length); + } + } + HEAP8.set(contents, ptr); + } + } + return { ptr, allocated }; + }, + msync(stream, buffer, offset, length, mmapFlags) { + MEMFS.stream_ops.write(stream, buffer, 0, length, offset, false); + // should we check if bytesWritten and length are the same? + return 0; + }, + }, + }; + + var asyncLoad = async (url) => { + var arrayBuffer = await readAsync(url); + assert(arrayBuffer, `Loading data file "${url}" failed (no arrayBuffer).`); + return new Uint8Array(arrayBuffer); + }; + + + var FS_createDataFile = (parent, name, fileData, canRead, canWrite, canOwn) => { + FS.createDataFile(parent, name, fileData, canRead, canWrite, canOwn); + }; + + var preloadPlugins = Module['preloadPlugins'] || []; + var FS_handledByPreloadPlugin = (byteArray, fullname, finish, onerror) => { + // Ensure plugins are ready. + if (typeof Browser != 'undefined') Browser.init(); + + var handled = false; + preloadPlugins.forEach((plugin) => { + if (handled) return; + if (plugin['canHandle'](fullname)) { + plugin['handle'](byteArray, fullname, finish, onerror); + handled = true; + } + }); + return handled; + }; + var FS_createPreloadedFile = (parent, name, url, canRead, canWrite, onload, onerror, dontCreateFile, canOwn, preFinish) => { + // TODO we should allow people to just pass in a complete filename instead + // of parent and name being that we just join them anyways + var fullname = name ? PATH_FS.resolve(PATH.join2(parent, name)) : parent; + var dep = getUniqueRunDependency(`cp ${fullname}`); // might have several active requests for the same fullname + function processData(byteArray) { + function finish(byteArray) { + preFinish?.(); + if (!dontCreateFile) { + FS_createDataFile(parent, name, byteArray, canRead, canWrite, canOwn); + } + onload?.(); + removeRunDependency(dep); + } + if (FS_handledByPreloadPlugin(byteArray, fullname, finish, () => { + onerror?.(); + removeRunDependency(dep); + })) { + return; + } + finish(byteArray); + } + addRunDependency(dep); + if (typeof url == 'string') { + asyncLoad(url).then(processData, onerror); + } else { + processData(url); + } + }; + + var FS_modeStringToFlags = (str) => { + var flagModes = { + 'r': 0, + 'r+': 2, + 'w': 512 | 64 | 1, + 'w+': 512 | 64 | 2, + 'a': 1024 | 64 | 1, + 'a+': 1024 | 64 | 2, + }; + var flags = flagModes[str]; + if (typeof flags == 'undefined') { + throw new Error(`Unknown file open mode: ${str}`); + } + return flags; + }; + + var FS_getMode = (canRead, canWrite) => { + var mode = 0; + if (canRead) mode |= 292 | 73; + if (canWrite) mode |= 146; + return mode; + }; + + + + + + + /** + * Given a pointer 'ptr' to a null-terminated UTF8-encoded string in the + * emscripten HEAP, returns a copy of that string as a Javascript String object. + * + * @param {number} ptr + * @param {number=} maxBytesToRead - An optional length that specifies the + * maximum number of bytes to read. You can omit this parameter to scan the + * string until the first 0 byte. If maxBytesToRead is passed, and the string + * at [ptr, ptr+maxBytesToReadr[ contains a null byte in the middle, then the + * string will cut short at that byte index (i.e. maxBytesToRead will not + * produce a string of exact length [ptr, ptr+maxBytesToRead[) N.B. mixing + * frequent uses of UTF8ToString() with and without maxBytesToRead may throw + * JS JIT optimizations off, so it is worth to consider consistently using one + * @return {string} + */ + var UTF8ToString = (ptr, maxBytesToRead) => { + assert(typeof ptr == 'number', `UTF8ToString expects a number (got ${typeof ptr})`); + return ptr ? UTF8ArrayToString(HEAPU8, ptr, maxBytesToRead) : ''; + }; + + var strError = (errno) => UTF8ToString(_strerror(errno)); + + var ERRNO_CODES = { + 'EPERM': 63, + 'ENOENT': 44, + 'ESRCH': 71, + 'EINTR': 27, + 'EIO': 29, + 'ENXIO': 60, + 'E2BIG': 1, + 'ENOEXEC': 45, + 'EBADF': 8, + 'ECHILD': 12, + 'EAGAIN': 6, + 'EWOULDBLOCK': 6, + 'ENOMEM': 48, + 'EACCES': 2, + 'EFAULT': 21, + 'ENOTBLK': 105, + 'EBUSY': 10, + 'EEXIST': 20, + 'EXDEV': 75, + 'ENODEV': 43, + 'ENOTDIR': 54, + 'EISDIR': 31, + 'EINVAL': 28, + 'ENFILE': 41, + 'EMFILE': 33, + 'ENOTTY': 59, + 'ETXTBSY': 74, + 'EFBIG': 22, + 'ENOSPC': 51, + 'ESPIPE': 70, + 'EROFS': 69, + 'EMLINK': 34, + 'EPIPE': 64, + 'EDOM': 18, + 'ERANGE': 68, + 'ENOMSG': 49, + 'EIDRM': 24, + 'ECHRNG': 106, + 'EL2NSYNC': 156, + 'EL3HLT': 107, + 'EL3RST': 108, + 'ELNRNG': 109, + 'EUNATCH': 110, + 'ENOCSI': 111, + 'EL2HLT': 112, + 'EDEADLK': 16, + 'ENOLCK': 46, + 'EBADE': 113, + 'EBADR': 114, + 'EXFULL': 115, + 'ENOANO': 104, + 'EBADRQC': 103, + 'EBADSLT': 102, + 'EDEADLOCK': 16, + 'EBFONT': 101, + 'ENOSTR': 100, + 'ENODATA': 116, + 'ETIME': 117, + 'ENOSR': 118, + 'ENONET': 119, + 'ENOPKG': 120, + 'EREMOTE': 121, + 'ENOLINK': 47, + 'EADV': 122, + 'ESRMNT': 123, + 'ECOMM': 124, + 'EPROTO': 65, + 'EMULTIHOP': 36, + 'EDOTDOT': 125, + 'EBADMSG': 9, + 'ENOTUNIQ': 126, + 'EBADFD': 127, + 'EREMCHG': 128, + 'ELIBACC': 129, + 'ELIBBAD': 130, + 'ELIBSCN': 131, + 'ELIBMAX': 132, + 'ELIBEXEC': 133, + 'ENOSYS': 52, + 'ENOTEMPTY': 55, + 'ENAMETOOLONG': 37, + 'ELOOP': 32, + 'EOPNOTSUPP': 138, + 'EPFNOSUPPORT': 139, + 'ECONNRESET': 15, + 'ENOBUFS': 42, + 'EAFNOSUPPORT': 5, + 'EPROTOTYPE': 67, + 'ENOTSOCK': 57, + 'ENOPROTOOPT': 50, + 'ESHUTDOWN': 140, + 'ECONNREFUSED': 14, + 'EADDRINUSE': 3, + 'ECONNABORTED': 13, + 'ENETUNREACH': 40, + 'ENETDOWN': 38, + 'ETIMEDOUT': 73, + 'EHOSTDOWN': 142, + 'EHOSTUNREACH': 23, + 'EINPROGRESS': 26, + 'EALREADY': 7, + 'EDESTADDRREQ': 17, + 'EMSGSIZE': 35, + 'EPROTONOSUPPORT': 66, + 'ESOCKTNOSUPPORT': 137, + 'EADDRNOTAVAIL': 4, + 'ENETRESET': 39, + 'EISCONN': 30, + 'ENOTCONN': 53, + 'ETOOMANYREFS': 141, + 'EUSERS': 136, + 'EDQUOT': 19, + 'ESTALE': 72, + 'ENOTSUP': 138, + 'ENOMEDIUM': 148, + 'EILSEQ': 25, + 'EOVERFLOW': 61, + 'ECANCELED': 11, + 'ENOTRECOVERABLE': 56, + 'EOWNERDEAD': 62, + 'ESTRPIPE': 135, + }; + var FS = { + root:null, + mounts:[], + devices:{ + }, + streams:[], + nextInode:1, + nameTable:null, + currentPath:"/", + initialized:false, + ignorePermissions:true, + filesystems:null, + syncFSRequests:0, + readFiles:{ + }, + ErrnoError:class extends Error { + name = 'ErrnoError'; + // We set the `name` property to be able to identify `FS.ErrnoError` + // - the `name` is a standard ECMA-262 property of error objects. Kind of good to have it anyway. + // - when using PROXYFS, an error can come from an underlying FS + // as different FS objects have their own FS.ErrnoError each, + // the test `err instanceof FS.ErrnoError` won't detect an error coming from another filesystem, causing bugs. + // we'll use the reliable test `err.name == "ErrnoError"` instead + constructor(errno) { + super(runtimeInitialized ? strError(errno) : ''); + this.errno = errno; + for (var key in ERRNO_CODES) { + if (ERRNO_CODES[key] === errno) { + this.code = key; + break; + } + } + } + }, + FSStream:class { + shared = {}; + get object() { + return this.node; + } + set object(val) { + this.node = val; + } + get isRead() { + return (this.flags & 2097155) !== 1; + } + get isWrite() { + return (this.flags & 2097155) !== 0; + } + get isAppend() { + return (this.flags & 1024); + } + get flags() { + return this.shared.flags; + } + set flags(val) { + this.shared.flags = val; + } + get position() { + return this.shared.position; + } + set position(val) { + this.shared.position = val; + } + }, + FSNode:class { + node_ops = {}; + stream_ops = {}; + readMode = 292 | 73; + writeMode = 146; + mounted = null; + constructor(parent, name, mode, rdev) { + if (!parent) { + parent = this; // root node sets parent to itself + } + this.parent = parent; + this.mount = parent.mount; + this.id = FS.nextInode++; + this.name = name; + this.mode = mode; + this.rdev = rdev; + this.atime = this.mtime = this.ctime = Date.now(); + } + get read() { + return (this.mode & this.readMode) === this.readMode; + } + set read(val) { + val ? this.mode |= this.readMode : this.mode &= ~this.readMode; + } + get write() { + return (this.mode & this.writeMode) === this.writeMode; + } + set write(val) { + val ? this.mode |= this.writeMode : this.mode &= ~this.writeMode; + } + get isFolder() { + return FS.isDir(this.mode); + } + get isDevice() { + return FS.isChrdev(this.mode); + } + }, + lookupPath(path, opts = {}) { + if (!path) { + throw new FS.ErrnoError(44); + } + opts.follow_mount ??= true + + if (!PATH.isAbs(path)) { + path = FS.cwd() + '/' + path; + } + + // limit max consecutive symlinks to 40 (SYMLOOP_MAX). + linkloop: for (var nlinks = 0; nlinks < 40; nlinks++) { + // split the absolute path + var parts = path.split('/').filter((p) => !!p); + + // start at the root + var current = FS.root; + var current_path = '/'; + + for (var i = 0; i < parts.length; i++) { + var islast = (i === parts.length-1); + if (islast && opts.parent) { + // stop resolving + break; + } + + if (parts[i] === '.') { + continue; + } + + if (parts[i] === '..') { + current_path = PATH.dirname(current_path); + current = current.parent; + continue; + } + + current_path = PATH.join2(current_path, parts[i]); + try { + current = FS.lookupNode(current, parts[i]); + } catch (e) { + // if noent_okay is true, suppress a ENOENT in the last component + // and return an object with an undefined node. This is needed for + // resolving symlinks in the path when creating a file. + if ((e?.errno === 44) && islast && opts.noent_okay) { + return { path: current_path }; + } + throw e; + } + + // jump to the mount's root node if this is a mountpoint + if (FS.isMountpoint(current) && (!islast || opts.follow_mount)) { + current = current.mounted.root; + } + + // by default, lookupPath will not follow a symlink if it is the final path component. + // setting opts.follow = true will override this behavior. + if (FS.isLink(current.mode) && (!islast || opts.follow)) { + if (!current.node_ops.readlink) { + throw new FS.ErrnoError(52); + } + var link = current.node_ops.readlink(current); + if (!PATH.isAbs(link)) { + link = PATH.dirname(current_path) + '/' + link; + } + path = link + '/' + parts.slice(i + 1).join('/'); + continue linkloop; + } + } + return { path: current_path, node: current }; + } + throw new FS.ErrnoError(32); + }, + getPath(node) { + var path; + while (true) { + if (FS.isRoot(node)) { + var mount = node.mount.mountpoint; + if (!path) return mount; + return mount[mount.length-1] !== '/' ? `${mount}/${path}` : mount + path; + } + path = path ? `${node.name}/${path}` : node.name; + node = node.parent; + } + }, + hashName(parentid, name) { + var hash = 0; + + for (var i = 0; i < name.length; i++) { + hash = ((hash << 5) - hash + name.charCodeAt(i)) | 0; + } + return ((parentid + hash) >>> 0) % FS.nameTable.length; + }, + hashAddNode(node) { + var hash = FS.hashName(node.parent.id, node.name); + node.name_next = FS.nameTable[hash]; + FS.nameTable[hash] = node; + }, + hashRemoveNode(node) { + var hash = FS.hashName(node.parent.id, node.name); + if (FS.nameTable[hash] === node) { + FS.nameTable[hash] = node.name_next; + } else { + var current = FS.nameTable[hash]; + while (current) { + if (current.name_next === node) { + current.name_next = node.name_next; + break; + } + current = current.name_next; + } + } + }, + lookupNode(parent, name) { + var errCode = FS.mayLookup(parent); + if (errCode) { + throw new FS.ErrnoError(errCode); + } + var hash = FS.hashName(parent.id, name); + for (var node = FS.nameTable[hash]; node; node = node.name_next) { + var nodeName = node.name; + if (node.parent.id === parent.id && nodeName === name) { + return node; + } + } + // if we failed to find it in the cache, call into the VFS + return FS.lookup(parent, name); + }, + createNode(parent, name, mode, rdev) { + assert(typeof parent == 'object') + var node = new FS.FSNode(parent, name, mode, rdev); + + FS.hashAddNode(node); + + return node; + }, + destroyNode(node) { + FS.hashRemoveNode(node); + }, + isRoot(node) { + return node === node.parent; + }, + isMountpoint(node) { + return !!node.mounted; + }, + isFile(mode) { + return (mode & 61440) === 32768; + }, + isDir(mode) { + return (mode & 61440) === 16384; + }, + isLink(mode) { + return (mode & 61440) === 40960; + }, + isChrdev(mode) { + return (mode & 61440) === 8192; + }, + isBlkdev(mode) { + return (mode & 61440) === 24576; + }, + isFIFO(mode) { + return (mode & 61440) === 4096; + }, + isSocket(mode) { + return (mode & 49152) === 49152; + }, + flagsToPermissionString(flag) { + var perms = ['r', 'w', 'rw'][flag & 3]; + if ((flag & 512)) { + perms += 'w'; + } + return perms; + }, + nodePermissions(node, perms) { + if (FS.ignorePermissions) { + return 0; + } + // return 0 if any user, group or owner bits are set. + if (perms.includes('r') && !(node.mode & 292)) { + return 2; + } else if (perms.includes('w') && !(node.mode & 146)) { + return 2; + } else if (perms.includes('x') && !(node.mode & 73)) { + return 2; + } + return 0; + }, + mayLookup(dir) { + if (!FS.isDir(dir.mode)) return 54; + var errCode = FS.nodePermissions(dir, 'x'); + if (errCode) return errCode; + if (!dir.node_ops.lookup) return 2; + return 0; + }, + mayCreate(dir, name) { + if (!FS.isDir(dir.mode)) { + return 54; + } + try { + var node = FS.lookupNode(dir, name); + return 20; + } catch (e) { + } + return FS.nodePermissions(dir, 'wx'); + }, + mayDelete(dir, name, isdir) { + var node; + try { + node = FS.lookupNode(dir, name); + } catch (e) { + return e.errno; + } + var errCode = FS.nodePermissions(dir, 'wx'); + if (errCode) { + return errCode; + } + if (isdir) { + if (!FS.isDir(node.mode)) { + return 54; + } + if (FS.isRoot(node) || FS.getPath(node) === FS.cwd()) { + return 10; + } + } else { + if (FS.isDir(node.mode)) { + return 31; + } + } + return 0; + }, + mayOpen(node, flags) { + if (!node) { + return 44; + } + if (FS.isLink(node.mode)) { + return 32; + } else if (FS.isDir(node.mode)) { + if (FS.flagsToPermissionString(flags) !== 'r' // opening for write + || (flags & (512 | 64))) { // TODO: check for O_SEARCH? (== search for dir only) + return 31; + } + } + return FS.nodePermissions(node, FS.flagsToPermissionString(flags)); + }, + checkOpExists(op, err) { + if (!op) { + throw new FS.ErrnoError(err); + } + return op; + }, + MAX_OPEN_FDS:4096, + nextfd() { + for (var fd = 0; fd <= FS.MAX_OPEN_FDS; fd++) { + if (!FS.streams[fd]) { + return fd; + } + } + throw new FS.ErrnoError(33); + }, + getStreamChecked(fd) { + var stream = FS.getStream(fd); + if (!stream) { + throw new FS.ErrnoError(8); + } + return stream; + }, + getStream:(fd) => FS.streams[fd], + createStream(stream, fd = -1) { + assert(fd >= -1); + + // clone it, so we can return an instance of FSStream + stream = Object.assign(new FS.FSStream(), stream); + if (fd == -1) { + fd = FS.nextfd(); + } + stream.fd = fd; + FS.streams[fd] = stream; + return stream; + }, + closeStream(fd) { + FS.streams[fd] = null; + }, + dupStream(origStream, fd = -1) { + var stream = FS.createStream(origStream, fd); + stream.stream_ops?.dup?.(stream); + return stream; + }, + doSetAttr(stream, node, attr) { + var setattr = stream?.stream_ops.setattr; + var arg = setattr ? stream : node; + setattr ??= node.node_ops.setattr; + FS.checkOpExists(setattr, 63) + setattr(arg, attr); + }, + chrdev_stream_ops:{ + open(stream) { + var device = FS.getDevice(stream.node.rdev); + // override node's stream ops with the device's + stream.stream_ops = device.stream_ops; + // forward the open call + stream.stream_ops.open?.(stream); + }, + llseek() { + throw new FS.ErrnoError(70); + }, + }, + major:(dev) => ((dev) >> 8), + minor:(dev) => ((dev) & 0xff), + makedev:(ma, mi) => ((ma) << 8 | (mi)), + registerDevice(dev, ops) { + FS.devices[dev] = { stream_ops: ops }; + }, + getDevice:(dev) => FS.devices[dev], + getMounts(mount) { + var mounts = []; + var check = [mount]; + + while (check.length) { + var m = check.pop(); + + mounts.push(m); + + check.push(...m.mounts); + } + + return mounts; + }, + syncfs(populate, callback) { + if (typeof populate == 'function') { + callback = populate; + populate = false; + } + + FS.syncFSRequests++; + + if (FS.syncFSRequests > 1) { + err(`warning: ${FS.syncFSRequests} FS.syncfs operations in flight at once, probably just doing extra work`); + } + + var mounts = FS.getMounts(FS.root.mount); + var completed = 0; + + function doCallback(errCode) { + assert(FS.syncFSRequests > 0); + FS.syncFSRequests--; + return callback(errCode); + } + + function done(errCode) { + if (errCode) { + if (!done.errored) { + done.errored = true; + return doCallback(errCode); + } + return; + } + if (++completed >= mounts.length) { + doCallback(null); + } + }; + + // sync all mounts + mounts.forEach((mount) => { + if (!mount.type.syncfs) { + return done(null); + } + mount.type.syncfs(mount, populate, done); + }); + }, + mount(type, opts, mountpoint) { + if (typeof type == 'string') { + // The filesystem was not included, and instead we have an error + // message stored in the variable. + throw type; + } + var root = mountpoint === '/'; + var pseudo = !mountpoint; + var node; + + if (root && FS.root) { + throw new FS.ErrnoError(10); + } else if (!root && !pseudo) { + var lookup = FS.lookupPath(mountpoint, { follow_mount: false }); + + mountpoint = lookup.path; // use the absolute path + node = lookup.node; + + if (FS.isMountpoint(node)) { + throw new FS.ErrnoError(10); + } + + if (!FS.isDir(node.mode)) { + throw new FS.ErrnoError(54); + } + } + + var mount = { + type, + opts, + mountpoint, + mounts: [] + }; + + // create a root node for the fs + var mountRoot = type.mount(mount); + mountRoot.mount = mount; + mount.root = mountRoot; + + if (root) { + FS.root = mountRoot; + } else if (node) { + // set as a mountpoint + node.mounted = mount; + + // add the new mount to the current mount's children + if (node.mount) { + node.mount.mounts.push(mount); + } + } + + return mountRoot; + }, + unmount(mountpoint) { + var lookup = FS.lookupPath(mountpoint, { follow_mount: false }); + + if (!FS.isMountpoint(lookup.node)) { + throw new FS.ErrnoError(28); + } + + // destroy the nodes for this mount, and all its child mounts + var node = lookup.node; + var mount = node.mounted; + var mounts = FS.getMounts(mount); + + Object.keys(FS.nameTable).forEach((hash) => { + var current = FS.nameTable[hash]; + + while (current) { + var next = current.name_next; + + if (mounts.includes(current.mount)) { + FS.destroyNode(current); + } + + current = next; + } + }); + + // no longer a mountpoint + node.mounted = null; + + // remove this mount from the child mounts + var idx = node.mount.mounts.indexOf(mount); + assert(idx !== -1); + node.mount.mounts.splice(idx, 1); + }, + lookup(parent, name) { + return parent.node_ops.lookup(parent, name); + }, + mknod(path, mode, dev) { + var lookup = FS.lookupPath(path, { parent: true }); + var parent = lookup.node; + var name = PATH.basename(path); + if (!name) { + throw new FS.ErrnoError(28); + } + if (name === '.' || name === '..') { + throw new FS.ErrnoError(20); + } + var errCode = FS.mayCreate(parent, name); + if (errCode) { + throw new FS.ErrnoError(errCode); + } + if (!parent.node_ops.mknod) { + throw new FS.ErrnoError(63); + } + return parent.node_ops.mknod(parent, name, mode, dev); + }, + statfs(path) { + return FS.statfsNode(FS.lookupPath(path, {follow: true}).node); + }, + statfsStream(stream) { + // We keep a separate statfsStream function because noderawfs overrides + // it. In noderawfs, stream.node is sometimes null. Instead, we need to + // look at stream.path. + return FS.statfsNode(stream.node); + }, + statfsNode(node) { + // NOTE: None of the defaults here are true. We're just returning safe and + // sane values. Currently nodefs and rawfs replace these defaults, + // other file systems leave them alone. + var rtn = { + bsize: 4096, + frsize: 4096, + blocks: 1e6, + bfree: 5e5, + bavail: 5e5, + files: FS.nextInode, + ffree: FS.nextInode - 1, + fsid: 42, + flags: 2, + namelen: 255, + }; + + if (node.node_ops.statfs) { + Object.assign(rtn, node.node_ops.statfs(node.mount.opts.root)); + } + return rtn; + }, + create(path, mode = 0o666) { + mode &= 4095; + mode |= 32768; + return FS.mknod(path, mode, 0); + }, + mkdir(path, mode = 0o777) { + mode &= 511 | 512; + mode |= 16384; + return FS.mknod(path, mode, 0); + }, + mkdirTree(path, mode) { + var dirs = path.split('/'); + var d = ''; + for (var dir of dirs) { + if (!dir) continue; + if (d || PATH.isAbs(path)) d += '/'; + d += dir; + try { + FS.mkdir(d, mode); + } catch(e) { + if (e.errno != 20) throw e; + } + } + }, + mkdev(path, mode, dev) { + if (typeof dev == 'undefined') { + dev = mode; + mode = 0o666; + } + mode |= 8192; + return FS.mknod(path, mode, dev); + }, + symlink(oldpath, newpath) { + if (!PATH_FS.resolve(oldpath)) { + throw new FS.ErrnoError(44); + } + var lookup = FS.lookupPath(newpath, { parent: true }); + var parent = lookup.node; + if (!parent) { + throw new FS.ErrnoError(44); + } + var newname = PATH.basename(newpath); + var errCode = FS.mayCreate(parent, newname); + if (errCode) { + throw new FS.ErrnoError(errCode); + } + if (!parent.node_ops.symlink) { + throw new FS.ErrnoError(63); + } + return parent.node_ops.symlink(parent, newname, oldpath); + }, + rename(old_path, new_path) { + var old_dirname = PATH.dirname(old_path); + var new_dirname = PATH.dirname(new_path); + var old_name = PATH.basename(old_path); + var new_name = PATH.basename(new_path); + // parents must exist + var lookup, old_dir, new_dir; + + // let the errors from non existent directories percolate up + lookup = FS.lookupPath(old_path, { parent: true }); + old_dir = lookup.node; + lookup = FS.lookupPath(new_path, { parent: true }); + new_dir = lookup.node; + + if (!old_dir || !new_dir) throw new FS.ErrnoError(44); + // need to be part of the same mount + if (old_dir.mount !== new_dir.mount) { + throw new FS.ErrnoError(75); + } + // source must exist + var old_node = FS.lookupNode(old_dir, old_name); + // old path should not be an ancestor of the new path + var relative = PATH_FS.relative(old_path, new_dirname); + if (relative.charAt(0) !== '.') { + throw new FS.ErrnoError(28); + } + // new path should not be an ancestor of the old path + relative = PATH_FS.relative(new_path, old_dirname); + if (relative.charAt(0) !== '.') { + throw new FS.ErrnoError(55); + } + // see if the new path already exists + var new_node; + try { + new_node = FS.lookupNode(new_dir, new_name); + } catch (e) { + // not fatal + } + // early out if nothing needs to change + if (old_node === new_node) { + return; + } + // we'll need to delete the old entry + var isdir = FS.isDir(old_node.mode); + var errCode = FS.mayDelete(old_dir, old_name, isdir); + if (errCode) { + throw new FS.ErrnoError(errCode); + } + // need delete permissions if we'll be overwriting. + // need create permissions if new doesn't already exist. + errCode = new_node ? + FS.mayDelete(new_dir, new_name, isdir) : + FS.mayCreate(new_dir, new_name); + if (errCode) { + throw new FS.ErrnoError(errCode); + } + if (!old_dir.node_ops.rename) { + throw new FS.ErrnoError(63); + } + if (FS.isMountpoint(old_node) || (new_node && FS.isMountpoint(new_node))) { + throw new FS.ErrnoError(10); + } + // if we are going to change the parent, check write permissions + if (new_dir !== old_dir) { + errCode = FS.nodePermissions(old_dir, 'w'); + if (errCode) { + throw new FS.ErrnoError(errCode); + } + } + // remove the node from the lookup hash + FS.hashRemoveNode(old_node); + // do the underlying fs rename + try { + old_dir.node_ops.rename(old_node, new_dir, new_name); + // update old node (we do this here to avoid each backend + // needing to) + old_node.parent = new_dir; + } catch (e) { + throw e; + } finally { + // add the node back to the hash (in case node_ops.rename + // changed its name) + FS.hashAddNode(old_node); + } + }, + rmdir(path) { + var lookup = FS.lookupPath(path, { parent: true }); + var parent = lookup.node; + var name = PATH.basename(path); + var node = FS.lookupNode(parent, name); + var errCode = FS.mayDelete(parent, name, true); + if (errCode) { + throw new FS.ErrnoError(errCode); + } + if (!parent.node_ops.rmdir) { + throw new FS.ErrnoError(63); + } + if (FS.isMountpoint(node)) { + throw new FS.ErrnoError(10); + } + parent.node_ops.rmdir(parent, name); + FS.destroyNode(node); + }, + readdir(path) { + var lookup = FS.lookupPath(path, { follow: true }); + var node = lookup.node; + var readdir = FS.checkOpExists(node.node_ops.readdir, 54); + return readdir(node); + }, + unlink(path) { + var lookup = FS.lookupPath(path, { parent: true }); + var parent = lookup.node; + if (!parent) { + throw new FS.ErrnoError(44); + } + var name = PATH.basename(path); + var node = FS.lookupNode(parent, name); + var errCode = FS.mayDelete(parent, name, false); + if (errCode) { + // According to POSIX, we should map EISDIR to EPERM, but + // we instead do what Linux does (and we must, as we use + // the musl linux libc). + throw new FS.ErrnoError(errCode); + } + if (!parent.node_ops.unlink) { + throw new FS.ErrnoError(63); + } + if (FS.isMountpoint(node)) { + throw new FS.ErrnoError(10); + } + parent.node_ops.unlink(parent, name); + FS.destroyNode(node); + }, + readlink(path) { + var lookup = FS.lookupPath(path); + var link = lookup.node; + if (!link) { + throw new FS.ErrnoError(44); + } + if (!link.node_ops.readlink) { + throw new FS.ErrnoError(28); + } + return link.node_ops.readlink(link); + }, + stat(path, dontFollow) { + var lookup = FS.lookupPath(path, { follow: !dontFollow }); + var node = lookup.node; + var getattr = FS.checkOpExists(node.node_ops.getattr, 63); + return getattr(node); + }, + fstat(fd) { + var stream = FS.getStreamChecked(fd); + var node = stream.node; + var getattr = stream.stream_ops.getattr; + var arg = getattr ? stream : node; + getattr ??= node.node_ops.getattr; + FS.checkOpExists(getattr, 63) + return getattr(arg); + }, + lstat(path) { + return FS.stat(path, true); + }, + doChmod(stream, node, mode, dontFollow) { + FS.doSetAttr(stream, node, { + mode: (mode & 4095) | (node.mode & ~4095), + ctime: Date.now(), + dontFollow + }); + }, + chmod(path, mode, dontFollow) { + var node; + if (typeof path == 'string') { + var lookup = FS.lookupPath(path, { follow: !dontFollow }); + node = lookup.node; + } else { + node = path; + } + FS.doChmod(null, node, mode, dontFollow); + }, + lchmod(path, mode) { + FS.chmod(path, mode, true); + }, + fchmod(fd, mode) { + var stream = FS.getStreamChecked(fd); + FS.doChmod(stream, stream.node, mode, false); + }, + doChown(stream, node, dontFollow) { + FS.doSetAttr(stream, node, { + timestamp: Date.now(), + dontFollow + // we ignore the uid / gid for now + }); + }, + chown(path, uid, gid, dontFollow) { + var node; + if (typeof path == 'string') { + var lookup = FS.lookupPath(path, { follow: !dontFollow }); + node = lookup.node; + } else { + node = path; + } + FS.doChown(null, node, dontFollow); + }, + lchown(path, uid, gid) { + FS.chown(path, uid, gid, true); + }, + fchown(fd, uid, gid) { + var stream = FS.getStreamChecked(fd); + FS.doChown(stream, stream.node, false); + }, + doTruncate(stream, node, len) { + if (FS.isDir(node.mode)) { + throw new FS.ErrnoError(31); + } + if (!FS.isFile(node.mode)) { + throw new FS.ErrnoError(28); + } + var errCode = FS.nodePermissions(node, 'w'); + if (errCode) { + throw new FS.ErrnoError(errCode); + } + FS.doSetAttr(stream, node, { + size: len, + timestamp: Date.now() + }); + }, + truncate(path, len) { + if (len < 0) { + throw new FS.ErrnoError(28); + } + var node; + if (typeof path == 'string') { + var lookup = FS.lookupPath(path, { follow: true }); + node = lookup.node; + } else { + node = path; + } + FS.doTruncate(null, node, len); + }, + ftruncate(fd, len) { + var stream = FS.getStreamChecked(fd); + if (len < 0 || (stream.flags & 2097155) === 0) { + throw new FS.ErrnoError(28); + } + FS.doTruncate(stream, stream.node, len); + }, + utime(path, atime, mtime) { + var lookup = FS.lookupPath(path, { follow: true }); + var node = lookup.node; + var setattr = FS.checkOpExists(node.node_ops.setattr, 63); + setattr(node, { + atime: atime, + mtime: mtime + }); + }, + open(path, flags, mode = 0o666) { + if (path === "") { + throw new FS.ErrnoError(44); + } + flags = typeof flags == 'string' ? FS_modeStringToFlags(flags) : flags; + if ((flags & 64)) { + mode = (mode & 4095) | 32768; + } else { + mode = 0; + } + var node; + var isDirPath; + if (typeof path == 'object') { + node = path; + } else { + isDirPath = path.endsWith("/"); + // noent_okay makes it so that if the final component of the path + // doesn't exist, lookupPath returns `node: undefined`. `path` will be + // updated to point to the target of all symlinks. + var lookup = FS.lookupPath(path, { + follow: !(flags & 131072), + noent_okay: true + }); + node = lookup.node; + path = lookup.path; + } + // perhaps we need to create the node + var created = false; + if ((flags & 64)) { + if (node) { + // if O_CREAT and O_EXCL are set, error out if the node already exists + if ((flags & 128)) { + throw new FS.ErrnoError(20); + } + } else if (isDirPath) { + throw new FS.ErrnoError(31); + } else { + // node doesn't exist, try to create it + // Ignore the permission bits here to ensure we can `open` this new + // file below. We use chmod below the apply the permissions once the + // file is open. + node = FS.mknod(path, mode | 0o777, 0); + created = true; + } + } + if (!node) { + throw new FS.ErrnoError(44); + } + // can't truncate a device + if (FS.isChrdev(node.mode)) { + flags &= ~512; + } + // if asked only for a directory, then this must be one + if ((flags & 65536) && !FS.isDir(node.mode)) { + throw new FS.ErrnoError(54); + } + // check permissions, if this is not a file we just created now (it is ok to + // create and write to a file with read-only permissions; it is read-only + // for later use) + if (!created) { + var errCode = FS.mayOpen(node, flags); + if (errCode) { + throw new FS.ErrnoError(errCode); + } + } + // do truncation if necessary + if ((flags & 512) && !created) { + FS.truncate(node, 0); + } + // we've already handled these, don't pass down to the underlying vfs + flags &= ~(128 | 512 | 131072); + + // register the stream with the filesystem + var stream = FS.createStream({ + node, + path: FS.getPath(node), // we want the absolute path to the node + flags, + seekable: true, + position: 0, + stream_ops: node.stream_ops, + // used by the file family libc calls (fopen, fwrite, ferror, etc.) + ungotten: [], + error: false + }); + // call the new stream's open function + if (stream.stream_ops.open) { + stream.stream_ops.open(stream); + } + if (created) { + FS.chmod(node, mode & 0o777); + } + if (Module['logReadFiles'] && !(flags & 1)) { + if (!(path in FS.readFiles)) { + FS.readFiles[path] = 1; + } + } + return stream; + }, + close(stream) { + if (FS.isClosed(stream)) { + throw new FS.ErrnoError(8); + } + if (stream.getdents) stream.getdents = null; // free readdir state + try { + if (stream.stream_ops.close) { + stream.stream_ops.close(stream); + } + } catch (e) { + throw e; + } finally { + FS.closeStream(stream.fd); + } + stream.fd = null; + }, + isClosed(stream) { + return stream.fd === null; + }, + llseek(stream, offset, whence) { + if (FS.isClosed(stream)) { + throw new FS.ErrnoError(8); + } + if (!stream.seekable || !stream.stream_ops.llseek) { + throw new FS.ErrnoError(70); + } + if (whence != 0 && whence != 1 && whence != 2) { + throw new FS.ErrnoError(28); + } + stream.position = stream.stream_ops.llseek(stream, offset, whence); + stream.ungotten = []; + return stream.position; + }, + read(stream, buffer, offset, length, position) { + assert(offset >= 0); + if (length < 0 || position < 0) { + throw new FS.ErrnoError(28); + } + if (FS.isClosed(stream)) { + throw new FS.ErrnoError(8); + } + if ((stream.flags & 2097155) === 1) { + throw new FS.ErrnoError(8); + } + if (FS.isDir(stream.node.mode)) { + throw new FS.ErrnoError(31); + } + if (!stream.stream_ops.read) { + throw new FS.ErrnoError(28); + } + var seeking = typeof position != 'undefined'; + if (!seeking) { + position = stream.position; + } else if (!stream.seekable) { + throw new FS.ErrnoError(70); + } + var bytesRead = stream.stream_ops.read(stream, buffer, offset, length, position); + if (!seeking) stream.position += bytesRead; + return bytesRead; + }, + write(stream, buffer, offset, length, position, canOwn) { + assert(offset >= 0); + if (length < 0 || position < 0) { + throw new FS.ErrnoError(28); + } + if (FS.isClosed(stream)) { + throw new FS.ErrnoError(8); + } + if ((stream.flags & 2097155) === 0) { + throw new FS.ErrnoError(8); + } + if (FS.isDir(stream.node.mode)) { + throw new FS.ErrnoError(31); + } + if (!stream.stream_ops.write) { + throw new FS.ErrnoError(28); + } + if (stream.seekable && stream.flags & 1024) { + // seek to the end before writing in append mode + FS.llseek(stream, 0, 2); + } + var seeking = typeof position != 'undefined'; + if (!seeking) { + position = stream.position; + } else if (!stream.seekable) { + throw new FS.ErrnoError(70); + } + var bytesWritten = stream.stream_ops.write(stream, buffer, offset, length, position, canOwn); + if (!seeking) stream.position += bytesWritten; + return bytesWritten; + }, + mmap(stream, length, position, prot, flags) { + // User requests writing to file (prot & PROT_WRITE != 0). + // Checking if we have permissions to write to the file unless + // MAP_PRIVATE flag is set. According to POSIX spec it is possible + // to write to file opened in read-only mode with MAP_PRIVATE flag, + // as all modifications will be visible only in the memory of + // the current process. + if ((prot & 2) !== 0 + && (flags & 2) === 0 + && (stream.flags & 2097155) !== 2) { + throw new FS.ErrnoError(2); + } + if ((stream.flags & 2097155) === 1) { + throw new FS.ErrnoError(2); + } + if (!stream.stream_ops.mmap) { + throw new FS.ErrnoError(43); + } + if (!length) { + throw new FS.ErrnoError(28); + } + return stream.stream_ops.mmap(stream, length, position, prot, flags); + }, + msync(stream, buffer, offset, length, mmapFlags) { + assert(offset >= 0); + if (!stream.stream_ops.msync) { + return 0; + } + return stream.stream_ops.msync(stream, buffer, offset, length, mmapFlags); + }, + ioctl(stream, cmd, arg) { + if (!stream.stream_ops.ioctl) { + throw new FS.ErrnoError(59); + } + return stream.stream_ops.ioctl(stream, cmd, arg); + }, + readFile(path, opts = {}) { + opts.flags = opts.flags || 0; + opts.encoding = opts.encoding || 'binary'; + if (opts.encoding !== 'utf8' && opts.encoding !== 'binary') { + throw new Error(`Invalid encoding type "${opts.encoding}"`); + } + var ret; + var stream = FS.open(path, opts.flags); + var stat = FS.stat(path); + var length = stat.size; + var buf = new Uint8Array(length); + FS.read(stream, buf, 0, length, 0); + if (opts.encoding === 'utf8') { + ret = UTF8ArrayToString(buf); + } else if (opts.encoding === 'binary') { + ret = buf; + } + FS.close(stream); + return ret; + }, + writeFile(path, data, opts = {}) { + opts.flags = opts.flags || 577; + var stream = FS.open(path, opts.flags, opts.mode); + if (typeof data == 'string') { + var buf = new Uint8Array(lengthBytesUTF8(data)+1); + var actualNumBytes = stringToUTF8Array(data, buf, 0, buf.length); + FS.write(stream, buf, 0, actualNumBytes, undefined, opts.canOwn); + } else if (ArrayBuffer.isView(data)) { + FS.write(stream, data, 0, data.byteLength, undefined, opts.canOwn); + } else { + throw new Error('Unsupported data type'); + } + FS.close(stream); + }, + cwd:() => FS.currentPath, + chdir(path) { + var lookup = FS.lookupPath(path, { follow: true }); + if (lookup.node === null) { + throw new FS.ErrnoError(44); + } + if (!FS.isDir(lookup.node.mode)) { + throw new FS.ErrnoError(54); + } + var errCode = FS.nodePermissions(lookup.node, 'x'); + if (errCode) { + throw new FS.ErrnoError(errCode); + } + FS.currentPath = lookup.path; + }, + createDefaultDirectories() { + FS.mkdir('/tmp'); + FS.mkdir('/home'); + FS.mkdir('/home/web_user'); + }, + createDefaultDevices() { + // create /dev + FS.mkdir('/dev'); + // setup /dev/null + FS.registerDevice(FS.makedev(1, 3), { + read: () => 0, + write: (stream, buffer, offset, length, pos) => length, + llseek: () => 0, + }); + FS.mkdev('/dev/null', FS.makedev(1, 3)); + // setup /dev/tty and /dev/tty1 + // stderr needs to print output using err() rather than out() + // so we register a second tty just for it. + TTY.register(FS.makedev(5, 0), TTY.default_tty_ops); + TTY.register(FS.makedev(6, 0), TTY.default_tty1_ops); + FS.mkdev('/dev/tty', FS.makedev(5, 0)); + FS.mkdev('/dev/tty1', FS.makedev(6, 0)); + // setup /dev/[u]random + // use a buffer to avoid overhead of individual crypto calls per byte + var randomBuffer = new Uint8Array(1024), randomLeft = 0; + var randomByte = () => { + if (randomLeft === 0) { + randomFill(randomBuffer); + randomLeft = randomBuffer.byteLength; + } + return randomBuffer[--randomLeft]; + }; + FS.createDevice('/dev', 'random', randomByte); + FS.createDevice('/dev', 'urandom', randomByte); + // we're not going to emulate the actual shm device, + // just create the tmp dirs that reside in it commonly + FS.mkdir('/dev/shm'); + FS.mkdir('/dev/shm/tmp'); + }, + createSpecialDirectories() { + // create /proc/self/fd which allows /proc/self/fd/6 => readlink gives the + // name of the stream for fd 6 (see test_unistd_ttyname) + FS.mkdir('/proc'); + var proc_self = FS.mkdir('/proc/self'); + FS.mkdir('/proc/self/fd'); + FS.mount({ + mount() { + var node = FS.createNode(proc_self, 'fd', 16895, 73); + node.stream_ops = { + llseek: MEMFS.stream_ops.llseek, + }; + node.node_ops = { + lookup(parent, name) { + var fd = +name; + var stream = FS.getStreamChecked(fd); + var ret = { + parent: null, + mount: { mountpoint: 'fake' }, + node_ops: { readlink: () => stream.path }, + id: fd + 1, + }; + ret.parent = ret; // make it look like a simple root node + return ret; + }, + readdir() { + return Array.from(FS.streams.entries()) + .filter(([k, v]) => v) + .map(([k, v]) => k.toString()); + } + }; + return node; + } + }, {}, '/proc/self/fd'); + }, + createStandardStreams(input, output, error) { + // TODO deprecate the old functionality of a single + // input / output callback and that utilizes FS.createDevice + // and instead require a unique set of stream ops + + // by default, we symlink the standard streams to the + // default tty devices. however, if the standard streams + // have been overwritten we create a unique device for + // them instead. + if (input) { + FS.createDevice('/dev', 'stdin', input); + } else { + FS.symlink('/dev/tty', '/dev/stdin'); + } + if (output) { + FS.createDevice('/dev', 'stdout', null, output); + } else { + FS.symlink('/dev/tty', '/dev/stdout'); + } + if (error) { + FS.createDevice('/dev', 'stderr', null, error); + } else { + FS.symlink('/dev/tty1', '/dev/stderr'); + } + + // open default streams for the stdin, stdout and stderr devices + var stdin = FS.open('/dev/stdin', 0); + var stdout = FS.open('/dev/stdout', 1); + var stderr = FS.open('/dev/stderr', 1); + assert(stdin.fd === 0, `invalid handle for stdin (${stdin.fd})`); + assert(stdout.fd === 1, `invalid handle for stdout (${stdout.fd})`); + assert(stderr.fd === 2, `invalid handle for stderr (${stderr.fd})`); + }, + staticInit() { + FS.nameTable = new Array(4096); + + FS.mount(MEMFS, {}, '/'); + + FS.createDefaultDirectories(); + FS.createDefaultDevices(); + FS.createSpecialDirectories(); + + FS.filesystems = { + 'MEMFS': MEMFS, + }; + }, + init(input, output, error) { + assert(!FS.initialized, 'FS.init was previously called. If you want to initialize later with custom parameters, remove any earlier calls (note that one is automatically added to the generated code)'); + FS.initialized = true; + + // Allow Module.stdin etc. to provide defaults, if none explicitly passed to us here + input ??= Module['stdin']; + output ??= Module['stdout']; + error ??= Module['stderr']; + + FS.createStandardStreams(input, output, error); + }, + quit() { + FS.initialized = false; + // force-flush all streams, so we get musl std streams printed out + _fflush(0); + // close all of our streams + for (var stream of FS.streams) { + if (stream) { + FS.close(stream); + } + } + }, + findObject(path, dontResolveLastLink) { + var ret = FS.analyzePath(path, dontResolveLastLink); + if (!ret.exists) { + return null; + } + return ret.object; + }, + analyzePath(path, dontResolveLastLink) { + // operate from within the context of the symlink's target + try { + var lookup = FS.lookupPath(path, { follow: !dontResolveLastLink }); + path = lookup.path; + } catch (e) { + } + var ret = { + isRoot: false, exists: false, error: 0, name: null, path: null, object: null, + parentExists: false, parentPath: null, parentObject: null + }; + try { + var lookup = FS.lookupPath(path, { parent: true }); + ret.parentExists = true; + ret.parentPath = lookup.path; + ret.parentObject = lookup.node; + ret.name = PATH.basename(path); + lookup = FS.lookupPath(path, { follow: !dontResolveLastLink }); + ret.exists = true; + ret.path = lookup.path; + ret.object = lookup.node; + ret.name = lookup.node.name; + ret.isRoot = lookup.path === '/'; + } catch (e) { + ret.error = e.errno; + }; + return ret; + }, + createPath(parent, path, canRead, canWrite) { + parent = typeof parent == 'string' ? parent : FS.getPath(parent); + var parts = path.split('/').reverse(); + while (parts.length) { + var part = parts.pop(); + if (!part) continue; + var current = PATH.join2(parent, part); + try { + FS.mkdir(current); + } catch (e) { + if (e.errno != 20) throw e; + } + parent = current; + } + return current; + }, + createFile(parent, name, properties, canRead, canWrite) { + var path = PATH.join2(typeof parent == 'string' ? parent : FS.getPath(parent), name); + var mode = FS_getMode(canRead, canWrite); + return FS.create(path, mode); + }, + createDataFile(parent, name, data, canRead, canWrite, canOwn) { + var path = name; + if (parent) { + parent = typeof parent == 'string' ? parent : FS.getPath(parent); + path = name ? PATH.join2(parent, name) : parent; + } + var mode = FS_getMode(canRead, canWrite); + var node = FS.create(path, mode); + if (data) { + if (typeof data == 'string') { + var arr = new Array(data.length); + for (var i = 0, len = data.length; i < len; ++i) arr[i] = data.charCodeAt(i); + data = arr; + } + // make sure we can write to the file + FS.chmod(node, mode | 146); + var stream = FS.open(node, 577); + FS.write(stream, data, 0, data.length, 0, canOwn); + FS.close(stream); + FS.chmod(node, mode); + } + }, + createDevice(parent, name, input, output) { + var path = PATH.join2(typeof parent == 'string' ? parent : FS.getPath(parent), name); + var mode = FS_getMode(!!input, !!output); + FS.createDevice.major ??= 64; + var dev = FS.makedev(FS.createDevice.major++, 0); + // Create a fake device that a set of stream ops to emulate + // the old behavior. + FS.registerDevice(dev, { + open(stream) { + stream.seekable = false; + }, + close(stream) { + // flush any pending line data + if (output?.buffer?.length) { + output(10); + } + }, + read(stream, buffer, offset, length, pos /* ignored */) { + var bytesRead = 0; + for (var i = 0; i < length; i++) { + var result; + try { + result = input(); + } catch (e) { + throw new FS.ErrnoError(29); + } + if (result === undefined && bytesRead === 0) { + throw new FS.ErrnoError(6); + } + if (result === null || result === undefined) break; + bytesRead++; + buffer[offset+i] = result; + } + if (bytesRead) { + stream.node.atime = Date.now(); + } + return bytesRead; + }, + write(stream, buffer, offset, length, pos) { + for (var i = 0; i < length; i++) { + try { + output(buffer[offset+i]); + } catch (e) { + throw new FS.ErrnoError(29); + } + } + if (length) { + stream.node.mtime = stream.node.ctime = Date.now(); + } + return i; + } + }); + return FS.mkdev(path, mode, dev); + }, + forceLoadFile(obj) { + if (obj.isDevice || obj.isFolder || obj.link || obj.contents) return true; + if (typeof XMLHttpRequest != 'undefined') { + throw new Error("Lazy loading should have been performed (contents set) in createLazyFile, but it was not. Lazy loading only works in web workers. Use --embed-file or --preload-file in emcc on the main thread."); + } else { // Command-line. + try { + obj.contents = readBinary(obj.url); + obj.usedBytes = obj.contents.length; + } catch (e) { + throw new FS.ErrnoError(29); + } + } + }, + createLazyFile(parent, name, url, canRead, canWrite) { + // Lazy chunked Uint8Array (implements get and length from Uint8Array). + // Actual getting is abstracted away for eventual reuse. + class LazyUint8Array { + lengthKnown = false; + chunks = []; // Loaded chunks. Index is the chunk number + get(idx) { + if (idx > this.length-1 || idx < 0) { + return undefined; + } + var chunkOffset = idx % this.chunkSize; + var chunkNum = (idx / this.chunkSize)|0; + return this.getter(chunkNum)[chunkOffset]; + } + setDataGetter(getter) { + this.getter = getter; + } + cacheLength() { + // Find length + var xhr = new XMLHttpRequest(); + xhr.open('HEAD', url, false); + xhr.send(null); + if (!(xhr.status >= 200 && xhr.status < 300 || xhr.status === 304)) throw new Error("Couldn't load " + url + ". Status: " + xhr.status); + var datalength = Number(xhr.getResponseHeader("Content-length")); + var header; + var hasByteServing = (header = xhr.getResponseHeader("Accept-Ranges")) && header === "bytes"; + var usesGzip = (header = xhr.getResponseHeader("Content-Encoding")) && header === "gzip"; + + var chunkSize = 1024*1024; // Chunk size in bytes + + if (!hasByteServing) chunkSize = datalength; + + // Function to get a range from the remote URL. + var doXHR = (from, to) => { + if (from > to) throw new Error("invalid range (" + from + ", " + to + ") or no bytes requested!"); + if (to > datalength-1) throw new Error("only " + datalength + " bytes available! programmer error!"); + + // TODO: Use mozResponseArrayBuffer, responseStream, etc. if available. + var xhr = new XMLHttpRequest(); + xhr.open('GET', url, false); + if (datalength !== chunkSize) xhr.setRequestHeader("Range", "bytes=" + from + "-" + to); + + // Some hints to the browser that we want binary data. + xhr.responseType = 'arraybuffer'; + if (xhr.overrideMimeType) { + xhr.overrideMimeType('text/plain; charset=x-user-defined'); + } + + xhr.send(null); + if (!(xhr.status >= 200 && xhr.status < 300 || xhr.status === 304)) throw new Error("Couldn't load " + url + ". Status: " + xhr.status); + if (xhr.response !== undefined) { + return new Uint8Array(/** @type{Array} */(xhr.response || [])); + } + return intArrayFromString(xhr.responseText || '', true); + }; + var lazyArray = this; + lazyArray.setDataGetter((chunkNum) => { + var start = chunkNum * chunkSize; + var end = (chunkNum+1) * chunkSize - 1; // including this byte + end = Math.min(end, datalength-1); // if datalength-1 is selected, this is the last block + if (typeof lazyArray.chunks[chunkNum] == 'undefined') { + lazyArray.chunks[chunkNum] = doXHR(start, end); + } + if (typeof lazyArray.chunks[chunkNum] == 'undefined') throw new Error('doXHR failed!'); + return lazyArray.chunks[chunkNum]; + }); + + if (usesGzip || !datalength) { + // if the server uses gzip or doesn't supply the length, we have to download the whole file to get the (uncompressed) length + chunkSize = datalength = 1; // this will force getter(0)/doXHR do download the whole file + datalength = this.getter(0).length; + chunkSize = datalength; + out("LazyFiles on gzip forces download of the whole file when length is accessed"); + } + + this._length = datalength; + this._chunkSize = chunkSize; + this.lengthKnown = true; + } + get length() { + if (!this.lengthKnown) { + this.cacheLength(); + } + return this._length; + } + get chunkSize() { + if (!this.lengthKnown) { + this.cacheLength(); + } + return this._chunkSize; + } + } + + if (typeof XMLHttpRequest != 'undefined') { + if (!ENVIRONMENT_IS_WORKER) throw 'Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc'; + var lazyArray = new LazyUint8Array(); + var properties = { isDevice: false, contents: lazyArray }; + } else { + var properties = { isDevice: false, url: url }; + } + + var node = FS.createFile(parent, name, properties, canRead, canWrite); + // This is a total hack, but I want to get this lazy file code out of the + // core of MEMFS. If we want to keep this lazy file concept I feel it should + // be its own thin LAZYFS proxying calls to MEMFS. + if (properties.contents) { + node.contents = properties.contents; + } else if (properties.url) { + node.contents = null; + node.url = properties.url; + } + // Add a function that defers querying the file size until it is asked the first time. + Object.defineProperties(node, { + usedBytes: { + get: function() { return this.contents.length; } + } + }); + // override each stream op with one that tries to force load the lazy file first + var stream_ops = {}; + var keys = Object.keys(node.stream_ops); + keys.forEach((key) => { + var fn = node.stream_ops[key]; + stream_ops[key] = (...args) => { + FS.forceLoadFile(node); + return fn(...args); + }; + }); + function writeChunks(stream, buffer, offset, length, position) { + var contents = stream.node.contents; + if (position >= contents.length) + return 0; + var size = Math.min(contents.length - position, length); + assert(size >= 0); + if (contents.slice) { // normal array + for (var i = 0; i < size; i++) { + buffer[offset + i] = contents[position + i]; + } + } else { + for (var i = 0; i < size; i++) { // LazyUint8Array from sync binary XHR + buffer[offset + i] = contents.get(position + i); + } + } + return size; + } + // use a custom read function + stream_ops.read = (stream, buffer, offset, length, position) => { + FS.forceLoadFile(node); + return writeChunks(stream, buffer, offset, length, position) + }; + // use a custom mmap function + stream_ops.mmap = (stream, length, position, prot, flags) => { + FS.forceLoadFile(node); + var ptr = mmapAlloc(length); + if (!ptr) { + throw new FS.ErrnoError(48); + } + writeChunks(stream, HEAP8, ptr, length, position); + return { ptr, allocated: true }; + }; + node.stream_ops = stream_ops; + return node; + }, + absolutePath() { + abort('FS.absolutePath has been removed; use PATH_FS.resolve instead'); + }, + createFolder() { + abort('FS.createFolder has been removed; use FS.mkdir instead'); + }, + createLink() { + abort('FS.createLink has been removed; use FS.symlink instead'); + }, + joinPath() { + abort('FS.joinPath has been removed; use PATH.join instead'); + }, + mmapAlloc() { + abort('FS.mmapAlloc has been replaced by the top level function mmapAlloc'); + }, + standardizePath() { + abort('FS.standardizePath has been removed; use PATH.normalize instead'); + }, + }; + + var SYSCALLS = { + DEFAULT_POLLMASK:5, + calculateAt(dirfd, path, allowEmpty) { + if (PATH.isAbs(path)) { + return path; + } + // relative path + var dir; + if (dirfd === -100) { + dir = FS.cwd(); + } else { + var dirstream = SYSCALLS.getStreamFromFD(dirfd); + dir = dirstream.path; + } + if (path.length == 0) { + if (!allowEmpty) { + throw new FS.ErrnoError(44);; + } + return dir; + } + return dir + '/' + path; + }, + writeStat(buf, stat) { + HEAP32[((buf)>>2)] = stat.dev; + HEAP32[(((buf)+(4))>>2)] = stat.mode; + HEAPU32[(((buf)+(8))>>2)] = stat.nlink; + HEAP32[(((buf)+(12))>>2)] = stat.uid; + HEAP32[(((buf)+(16))>>2)] = stat.gid; + HEAP32[(((buf)+(20))>>2)] = stat.rdev; + HEAP64[(((buf)+(24))>>3)] = BigInt(stat.size); + HEAP32[(((buf)+(32))>>2)] = 4096; + HEAP32[(((buf)+(36))>>2)] = stat.blocks; + var atime = stat.atime.getTime(); + var mtime = stat.mtime.getTime(); + var ctime = stat.ctime.getTime(); + HEAP64[(((buf)+(40))>>3)] = BigInt(Math.floor(atime / 1000)); + HEAPU32[(((buf)+(48))>>2)] = (atime % 1000) * 1000 * 1000; + HEAP64[(((buf)+(56))>>3)] = BigInt(Math.floor(mtime / 1000)); + HEAPU32[(((buf)+(64))>>2)] = (mtime % 1000) * 1000 * 1000; + HEAP64[(((buf)+(72))>>3)] = BigInt(Math.floor(ctime / 1000)); + HEAPU32[(((buf)+(80))>>2)] = (ctime % 1000) * 1000 * 1000; + HEAP64[(((buf)+(88))>>3)] = BigInt(stat.ino); + return 0; + }, + writeStatFs(buf, stats) { + HEAP32[(((buf)+(4))>>2)] = stats.bsize; + HEAP32[(((buf)+(40))>>2)] = stats.bsize; + HEAP32[(((buf)+(8))>>2)] = stats.blocks; + HEAP32[(((buf)+(12))>>2)] = stats.bfree; + HEAP32[(((buf)+(16))>>2)] = stats.bavail; + HEAP32[(((buf)+(20))>>2)] = stats.files; + HEAP32[(((buf)+(24))>>2)] = stats.ffree; + HEAP32[(((buf)+(28))>>2)] = stats.fsid; + HEAP32[(((buf)+(44))>>2)] = stats.flags; // ST_NOSUID + HEAP32[(((buf)+(36))>>2)] = stats.namelen; + }, + doMsync(addr, stream, len, flags, offset) { + if (!FS.isFile(stream.node.mode)) { + throw new FS.ErrnoError(43); + } + if (flags & 2) { + // MAP_PRIVATE calls need not to be synced back to underlying fs + return 0; + } + var buffer = HEAPU8.slice(addr, addr + len); + FS.msync(stream, buffer, offset, len, flags); + }, + getStreamFromFD(fd) { + var stream = FS.getStreamChecked(fd); + return stream; + }, + varargs:undefined, + getStr(ptr) { + var ret = UTF8ToString(ptr); + return ret; + }, + }; + function ___syscall_openat(dirfd, path, flags, varargs) { + SYSCALLS.varargs = varargs; + try { + + path = SYSCALLS.getStr(path); + path = SYSCALLS.calculateAt(dirfd, path); + var mode = varargs ? syscallGetVarargI() : 0; + return FS.open(path, flags, mode).fd; + } catch (e) { + if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + return -e.errno; + } + } + + var __abort_js = () => + abort('native code called abort()'); + + var abortOnCannotGrowMemory = (requestedSize) => { + abort(`Cannot enlarge memory arrays to size ${requestedSize} bytes (OOM). Either (1) compile with -sINITIAL_MEMORY=X with X higher than the current value ${HEAP8.length}, (2) compile with -sALLOW_MEMORY_GROWTH which allows increasing the size at runtime, or (3) if you want malloc to return NULL (0) instead of this abort, compile with -sABORTING_MALLOC=0`); + }; + var _emscripten_resize_heap = (requestedSize) => { + var oldSize = HEAPU8.length; + // With CAN_ADDRESS_2GB or MEMORY64, pointers are already unsigned. + requestedSize >>>= 0; + abortOnCannotGrowMemory(requestedSize); + }; + + + var runtimeKeepaliveCounter = 0; + var keepRuntimeAlive = () => noExitRuntime || runtimeKeepaliveCounter > 0; + var _proc_exit = (code) => { + EXITSTATUS = code; + if (!keepRuntimeAlive()) { + Module['onExit']?.(code); + ABORT = true; + } + quit_(code, new ExitStatus(code)); + }; + + + /** @suppress {duplicate } */ + /** @param {boolean|number=} implicit */ + var exitJS = (status, implicit) => { + EXITSTATUS = status; + + checkUnflushedContent(); + + // if exit() was called explicitly, warn the user if the runtime isn't actually being shut down + if (keepRuntimeAlive() && !implicit) { + var msg = `program exited (with status: ${status}), but keepRuntimeAlive() is set (counter=${runtimeKeepaliveCounter}) due to an async operation, so halting execution but not exiting the runtime or preventing further async execution (you can use emscripten_force_exit, if you want to force a true shutdown)`; + err(msg); + } + + _proc_exit(status); + }; + var _exit = exitJS; + + function _fd_close(fd) { + try { + + var stream = SYSCALLS.getStreamFromFD(fd); + FS.close(stream); + return 0; + } catch (e) { + if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + return e.errno; + } + } + + /** @param {number=} offset */ + var doReadv = (stream, iov, iovcnt, offset) => { + var ret = 0; + for (var i = 0; i < iovcnt; i++) { + var ptr = HEAPU32[((iov)>>2)]; + var len = HEAPU32[(((iov)+(4))>>2)]; + iov += 8; + var curr = FS.read(stream, HEAP8, ptr, len, offset); + if (curr < 0) return -1; + ret += curr; + if (curr < len) break; // nothing more to read + if (typeof offset != 'undefined') { + offset += curr; + } + } + return ret; + }; + + function _fd_read(fd, iov, iovcnt, pnum) { + try { + + var stream = SYSCALLS.getStreamFromFD(fd); + var num = doReadv(stream, iov, iovcnt); + HEAPU32[((pnum)>>2)] = num; + return 0; + } catch (e) { + if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + return e.errno; + } + } + + + var INT53_MAX = 9007199254740992; + + var INT53_MIN = -9007199254740992; + var bigintToI53Checked = (num) => (num < INT53_MIN || num > INT53_MAX) ? NaN : Number(num); + function _fd_seek(fd, offset, whence, newOffset) { + offset = bigintToI53Checked(offset); + + + try { + + if (isNaN(offset)) return 61; + var stream = SYSCALLS.getStreamFromFD(fd); + FS.llseek(stream, offset, whence); + HEAP64[((newOffset)>>3)] = BigInt(stream.position); + if (stream.getdents && offset === 0 && whence === 0) stream.getdents = null; // reset readdir state + return 0; + } catch (e) { + if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + return e.errno; + } + ; + } + + /** @param {number=} offset */ + var doWritev = (stream, iov, iovcnt, offset) => { + var ret = 0; + for (var i = 0; i < iovcnt; i++) { + var ptr = HEAPU32[((iov)>>2)]; + var len = HEAPU32[(((iov)+(4))>>2)]; + iov += 8; + var curr = FS.write(stream, HEAP8, ptr, len, offset); + if (curr < 0) return -1; + ret += curr; + if (curr < len) { + // No more space to write. + break; + } + if (typeof offset != 'undefined') { + offset += curr; + } + } + return ret; + }; + + function _fd_write(fd, iov, iovcnt, pnum) { + try { + + var stream = SYSCALLS.getStreamFromFD(fd); + var num = doWritev(stream, iov, iovcnt); + HEAPU32[((pnum)>>2)] = num; + return 0; + } catch (e) { + if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + return e.errno; + } + } + + + var handleException = (e) => { + // Certain exception types we do not treat as errors since they are used for + // internal control flow. + // 1. ExitStatus, which is thrown by exit() + // 2. "unwind", which is thrown by emscripten_unwind_to_js_event_loop() and others + // that wish to return to JS event loop. + if (e instanceof ExitStatus || e == 'unwind') { + return EXITSTATUS; + } + checkStackCookie(); + if (e instanceof WebAssembly.RuntimeError) { + if (_emscripten_stack_get_current() <= 0) { + err('Stack overflow detected. You can try increasing -sSTACK_SIZE (currently set to 65536)'); + } + } + quit_(1, e); + }; + + + var stringToUTF8 = (str, outPtr, maxBytesToWrite) => { + assert(typeof maxBytesToWrite == 'number', 'stringToUTF8(str, outPtr, maxBytesToWrite) is missing the third parameter that specifies the length of the output buffer!'); + return stringToUTF8Array(str, HEAPU8, outPtr, maxBytesToWrite); + }; + + var stackAlloc = (sz) => __emscripten_stack_alloc(sz); + var stringToUTF8OnStack = (str) => { + var size = lengthBytesUTF8(str) + 1; + var ret = stackAlloc(size); + stringToUTF8(str, ret, size); + return ret; + }; + + FS.createPreloadedFile = FS_createPreloadedFile; + FS.staticInit(); + // Set module methods based on EXPORTED_RUNTIME_METHODS + ; +// End JS library code + +function checkIncomingModuleAPI() { + ignoredModuleProp('fetchSettings'); +} +var wasmImports = { + /** @export */ + __syscall_openat: ___syscall_openat, + /** @export */ + _abort_js: __abort_js, + /** @export */ + emscripten_resize_heap: _emscripten_resize_heap, + /** @export */ + exit: _exit, + /** @export */ + fd_close: _fd_close, + /** @export */ + fd_read: _fd_read, + /** @export */ + fd_seek: _fd_seek, + /** @export */ + fd_write: _fd_write +}; +var wasmExports; +createWasm(); +var ___wasm_call_ctors = createExportWrapper('__wasm_call_ctors', 0); +var _main = Module['_main'] = createExportWrapper('__main_argc_argv', 2); +var _strerror = createExportWrapper('strerror', 1); +var _fflush = createExportWrapper('fflush', 1); +var _emscripten_stack_init = () => (_emscripten_stack_init = wasmExports['emscripten_stack_init'])(); +var _emscripten_stack_get_free = () => (_emscripten_stack_get_free = wasmExports['emscripten_stack_get_free'])(); +var _emscripten_stack_get_base = () => (_emscripten_stack_get_base = wasmExports['emscripten_stack_get_base'])(); +var _emscripten_stack_get_end = () => (_emscripten_stack_get_end = wasmExports['emscripten_stack_get_end'])(); +var __emscripten_stack_restore = (a0) => (__emscripten_stack_restore = wasmExports['_emscripten_stack_restore'])(a0); +var __emscripten_stack_alloc = (a0) => (__emscripten_stack_alloc = wasmExports['_emscripten_stack_alloc'])(a0); +var _emscripten_stack_get_current = () => (_emscripten_stack_get_current = wasmExports['emscripten_stack_get_current'])(); + + +// include: postamble.js +// === Auto-generated postamble setup entry stuff === + +var missingLibrarySymbols = [ + 'writeI53ToI64', + 'writeI53ToI64Clamped', + 'writeI53ToI64Signaling', + 'writeI53ToU64Clamped', + 'writeI53ToU64Signaling', + 'readI53FromI64', + 'readI53FromU64', + 'convertI32PairToI53', + 'convertI32PairToI53Checked', + 'convertU32PairToI53', + 'getTempRet0', + 'setTempRet0', + 'zeroMemory', + 'getHeapMax', + 'growMemory', + 'inetPton4', + 'inetNtop4', + 'inetPton6', + 'inetNtop6', + 'readSockaddr', + 'writeSockaddr', + 'emscriptenLog', + 'readEmAsmArgs', + 'jstoi_q', + 'getExecutableName', + 'listenOnce', + 'autoResumeAudioContext', + 'getDynCaller', + 'dynCall', + 'runtimeKeepalivePush', + 'runtimeKeepalivePop', + 'callUserCallback', + 'maybeExit', + 'asmjsMangle', + 'alignMemory', + 'HandleAllocator', + 'getNativeTypeSize', + 'addOnInit', + 'addOnPostCtor', + 'addOnPreMain', + 'addOnExit', + 'STACK_SIZE', + 'STACK_ALIGN', + 'POINTER_SIZE', + 'ASSERTIONS', + 'getCFunc', + 'ccall', + 'cwrap', + 'uleb128Encode', + 'sigToWasmTypes', + 'generateFuncType', + 'convertJsFunctionToWasm', + 'getEmptyTableSlot', + 'updateTableMap', + 'getFunctionAddress', + 'addFunction', + 'removeFunction', + 'reallyNegative', + 'unSign', + 'strLen', + 'reSign', + 'formatString', + 'intArrayToString', + 'AsciiToString', + 'stringToAscii', + 'UTF16ToString', + 'stringToUTF16', + 'lengthBytesUTF16', + 'UTF32ToString', + 'stringToUTF32', + 'lengthBytesUTF32', + 'stringToNewUTF8', + 'writeArrayToMemory', + 'registerKeyEventCallback', + 'maybeCStringToJsString', + 'findEventTarget', + 'getBoundingClientRect', + 'fillMouseEventData', + 'registerMouseEventCallback', + 'registerWheelEventCallback', + 'registerUiEventCallback', + 'registerFocusEventCallback', + 'fillDeviceOrientationEventData', + 'registerDeviceOrientationEventCallback', + 'fillDeviceMotionEventData', + 'registerDeviceMotionEventCallback', + 'screenOrientation', + 'fillOrientationChangeEventData', + 'registerOrientationChangeEventCallback', + 'fillFullscreenChangeEventData', + 'registerFullscreenChangeEventCallback', + 'JSEvents_requestFullscreen', + 'JSEvents_resizeCanvasForFullscreen', + 'registerRestoreOldStyle', + 'hideEverythingExceptGivenElement', + 'restoreHiddenElements', + 'setLetterbox', + 'softFullscreenResizeWebGLRenderTarget', + 'doRequestFullscreen', + 'fillPointerlockChangeEventData', + 'registerPointerlockChangeEventCallback', + 'registerPointerlockErrorEventCallback', + 'requestPointerLock', + 'fillVisibilityChangeEventData', + 'registerVisibilityChangeEventCallback', + 'registerTouchEventCallback', + 'fillGamepadEventData', + 'registerGamepadEventCallback', + 'registerBeforeUnloadEventCallback', + 'fillBatteryEventData', + 'battery', + 'registerBatteryEventCallback', + 'setCanvasElementSize', + 'getCanvasElementSize', + 'jsStackTrace', + 'getCallstack', + 'convertPCtoSourceLocation', + 'getEnvStrings', + 'checkWasiClock', + 'wasiRightsToMuslOFlags', + 'wasiOFlagsToMuslOFlags', + 'safeSetTimeout', + 'setImmediateWrapped', + 'safeRequestAnimationFrame', + 'clearImmediateWrapped', + 'registerPostMainLoop', + 'registerPreMainLoop', + 'getPromise', + 'makePromise', + 'idsToPromises', + 'makePromiseCallback', + 'ExceptionInfo', + 'findMatchingCatch', + 'Browser_asyncPrepareDataCounter', + 'isLeapYear', + 'ydayFromDate', + 'arraySum', + 'addDays', + 'getSocketFromFD', + 'getSocketAddress', + 'FS_unlink', + 'FS_mkdirTree', + '_setNetworkCallback', + 'heapObjectForWebGLType', + 'toTypedArrayIndex', + 'webgl_enable_ANGLE_instanced_arrays', + 'webgl_enable_OES_vertex_array_object', + 'webgl_enable_WEBGL_draw_buffers', + 'webgl_enable_WEBGL_multi_draw', + 'webgl_enable_EXT_polygon_offset_clamp', + 'webgl_enable_EXT_clip_control', + 'webgl_enable_WEBGL_polygon_mode', + 'emscriptenWebGLGet', + 'computeUnpackAlignedImageSize', + 'colorChannelsInGlTextureFormat', + 'emscriptenWebGLGetTexPixelData', + 'emscriptenWebGLGetUniform', + 'webglGetUniformLocation', + 'webglPrepareUniformLocationsBeforeFirstUse', + 'webglGetLeftBracePos', + 'emscriptenWebGLGetVertexAttrib', + '__glGetActiveAttribOrUniform', + 'writeGLArray', + 'registerWebGlEventCallback', + 'runAndAbortIfError', + 'ALLOC_NORMAL', + 'ALLOC_STACK', + 'allocate', + 'writeStringToMemory', + 'writeAsciiToMemory', + 'demangle', + 'stackTrace', +]; +missingLibrarySymbols.forEach(missingLibrarySymbol) + +var unexportedSymbols = [ + 'run', + 'addRunDependency', + 'removeRunDependency', + 'out', + 'err', + 'callMain', + 'abort', + 'wasmMemory', + 'wasmExports', + 'writeStackCookie', + 'checkStackCookie', + 'INT53_MAX', + 'INT53_MIN', + 'bigintToI53Checked', + 'stackSave', + 'stackRestore', + 'stackAlloc', + 'ptrToString', + 'exitJS', + 'abortOnCannotGrowMemory', + 'ENV', + 'ERRNO_CODES', + 'strError', + 'DNS', + 'Protocols', + 'Sockets', + 'timers', + 'warnOnce', + 'readEmAsmArgsArray', + 'jstoi_s', + 'handleException', + 'keepRuntimeAlive', + 'asyncLoad', + 'mmapAlloc', + 'wasmTable', + 'noExitRuntime', + 'addOnPreRun', + 'addOnPostRun', + 'freeTableIndexes', + 'functionsInTableMap', + 'setValue', + 'getValue', + 'PATH', + 'PATH_FS', + 'UTF8Decoder', + 'UTF8ArrayToString', + 'UTF8ToString', + 'stringToUTF8Array', + 'stringToUTF8', + 'lengthBytesUTF8', + 'intArrayFromString', + 'UTF16Decoder', + 'stringToUTF8OnStack', + 'JSEvents', + 'specialHTMLTargets', + 'findCanvasEventTarget', + 'currentFullscreenStrategy', + 'restoreOldWindowedStyle', + 'UNWIND_CACHE', + 'ExitStatus', + 'doReadv', + 'doWritev', + 'initRandomFill', + 'randomFill', + 'emSetImmediate', + 'emClearImmediate_deps', + 'emClearImmediate', + 'promiseMap', + 'uncaughtExceptionCount', + 'exceptionLast', + 'exceptionCaught', + 'Browser', + 'getPreloadedImageData__data', + 'wget', + 'MONTH_DAYS_REGULAR', + 'MONTH_DAYS_LEAP', + 'MONTH_DAYS_REGULAR_CUMULATIVE', + 'MONTH_DAYS_LEAP_CUMULATIVE', + 'SYSCALLS', + 'preloadPlugins', + 'FS_createPreloadedFile', + 'FS_modeStringToFlags', + 'FS_getMode', + 'FS_stdin_getChar_buffer', + 'FS_stdin_getChar', + 'FS_createPath', + 'FS_createDevice', + 'FS_readFile', + 'FS', + 'FS_createDataFile', + 'FS_createLazyFile', + 'MEMFS', + 'TTY', + 'PIPEFS', + 'SOCKFS', + 'tempFixedLengthArray', + 'miniTempWebGLFloatBuffers', + 'miniTempWebGLIntBuffers', + 'GL', + 'AL', + 'GLUT', + 'EGL', + 'GLEW', + 'IDBStore', + 'SDL', + 'SDL_gfx', + 'allocateUTF8', + 'allocateUTF8OnStack', + 'print', + 'printErr', +]; +unexportedSymbols.forEach(unexportedRuntimeSymbol); + + + +var calledRun; + +function callMain(args = []) { + assert(runDependencies == 0, 'cannot call main when async dependencies remain! (listen on Module["onRuntimeInitialized"])'); + assert(typeof onPreRuns === 'undefined' || onPreRuns.length == 0, 'cannot call main when preRun functions remain to be called'); + + var entryFunction = _main; + + args.unshift(thisProgram); + + var argc = args.length; + var argv = stackAlloc((argc + 1) * 4); + var argv_ptr = argv; + args.forEach((arg) => { + HEAPU32[((argv_ptr)>>2)] = stringToUTF8OnStack(arg); + argv_ptr += 4; + }); + HEAPU32[((argv_ptr)>>2)] = 0; + + try { + + var ret = entryFunction(argc, argv); + + // if we're not running an evented main loop, it's time to exit + exitJS(ret, /* implicit = */ true); + return ret; + } catch (e) { + return handleException(e); + } +} + +function stackCheckInit() { + // This is normally called automatically during __wasm_call_ctors but need to + // get these values before even running any of the ctors so we call it redundantly + // here. + _emscripten_stack_init(); + // TODO(sbc): Move writeStackCookie to native to to avoid this. + writeStackCookie(); +} + +function run(args = arguments_) { + + if (runDependencies > 0) { + dependenciesFulfilled = run; + return; + } + + stackCheckInit(); + + preRun(); + + // a preRun added a dependency, run will be called later + if (runDependencies > 0) { + dependenciesFulfilled = run; + return; + } + + function doRun() { + // run may have just been called through dependencies being fulfilled just in this very frame, + // or while the async setStatus time below was happening + assert(!calledRun); + calledRun = true; + Module['calledRun'] = true; + + if (ABORT) return; + + initRuntime(); + + preMain(); + + Module['onRuntimeInitialized']?.(); + consumedModuleProp('onRuntimeInitialized'); + + var noInitialRun = Module['noInitialRun'];legacyModuleProp('noInitialRun', 'noInitialRun'); + if (!noInitialRun) callMain(args); + + postRun(); + } + + if (Module['setStatus']) { + Module['setStatus']('Running...'); + setTimeout(() => { + setTimeout(() => Module['setStatus'](''), 1); + doRun(); + }, 1); + } else + { + doRun(); + } + checkStackCookie(); +} + +function checkUnflushedContent() { + // Compiler settings do not allow exiting the runtime, so flushing + // the streams is not possible. but in ASSERTIONS mode we check + // if there was something to flush, and if so tell the user they + // should request that the runtime be exitable. + // Normally we would not even include flush() at all, but in ASSERTIONS + // builds we do so just for this check, and here we see if there is any + // content to flush, that is, we check if there would have been + // something a non-ASSERTIONS build would have not seen. + // How we flush the streams depends on whether we are in SYSCALLS_REQUIRE_FILESYSTEM=0 + // mode (which has its own special function for this; otherwise, all + // the code is inside libc) + var oldOut = out; + var oldErr = err; + var has = false; + out = err = (x) => { + has = true; + } + try { // it doesn't matter if it fails + _fflush(0); + // also flush in the JS FS layer + ['stdout', 'stderr'].forEach((name) => { + var info = FS.analyzePath('/dev/' + name); + if (!info) return; + var stream = info.object; + var rdev = stream.rdev; + var tty = TTY.ttys[rdev]; + if (tty?.output?.length) { + has = true; + } + }); + } catch(e) {} + out = oldOut; + err = oldErr; + if (has) { + warnOnce('stdio streams had content in them that was not flushed. you should set EXIT_RUNTIME to 1 (see the Emscripten FAQ), or make sure to emit a newline when you printf etc.'); + } +} + +if (Module['preInit']) { + if (typeof Module['preInit'] == 'function') Module['preInit'] = [Module['preInit']]; + while (Module['preInit'].length > 0) { + Module['preInit'].pop()(); + } +} +consumedModuleProp('preInit'); + +run(); + +// end include: postamble.js + diff --git a/thirdparty/zlib-1.3.1/build-emcmake/example.wasm b/thirdparty/zlib-1.3.1/build-emcmake/example.wasm new file mode 100755 index 0000000000000000000000000000000000000000..b2d6fad00ee440a4811000ba57ae30496421995d GIT binary patch literal 222066 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¬Y|~ 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 Promise +// 3. pre-run appended it, var Module = {}; ..generated code.. +// 4. External script tag defines var Module. +// We need to check if Module already exists (e.g. case 3 above). +// Substitution will be replaced with actual code on later stage of the build, +// this way Closure Compiler will not mangle it (e.g. case 4. above). +// Note that if you want to run closure, and also to use Module +// after the generated code, you will need to define var Module = {}; +// before the code. Then that object will be used in the code, and you +// can continue to use Module afterwards as well. +var Module = typeof Module != 'undefined' ? Module : {}; + +// Determine the runtime environment we are in. You can customize this by +// setting the ENVIRONMENT setting at compile time (see settings.js). + +// Attempt to auto-detect the environment +var ENVIRONMENT_IS_WEB = typeof window == 'object'; +var ENVIRONMENT_IS_WORKER = typeof WorkerGlobalScope != 'undefined'; +// N.b. Electron.js environment is simultaneously a NODE-environment, but +// also a web environment. +var ENVIRONMENT_IS_NODE = typeof process == 'object' && typeof process.versions == 'object' && typeof process.versions.node == 'string' && process.type != 'renderer'; +var ENVIRONMENT_IS_SHELL = !ENVIRONMENT_IS_WEB && !ENVIRONMENT_IS_NODE && !ENVIRONMENT_IS_WORKER; + +if (ENVIRONMENT_IS_NODE) { + +} + +// --pre-jses are emitted after the Module integration code, so that they can +// refer to Module (if they choose; they can also define Module) + + +// Sometimes an existing Module object exists with properties +// meant to overwrite the default module functionality. Here +// we collect those properties and reapply _after_ we configure +// the current environment's defaults to avoid having to be so +// defensive during initialization. +var moduleOverrides = {...Module}; + +var arguments_ = []; +var thisProgram = './this.program'; +var quit_ = (status, toThrow) => { + throw toThrow; +}; + +// `/` should be present at the end if `scriptDirectory` is not empty +var scriptDirectory = ''; +function locateFile(path) { + if (Module['locateFile']) { + return Module['locateFile'](path, scriptDirectory); + } + return scriptDirectory + path; +} + +// Hooks that are implemented differently in different runtime environments. +var readAsync, readBinary; + +if (ENVIRONMENT_IS_NODE) { + if (typeof process == 'undefined' || !process.release || process.release.name !== 'node') throw new Error('not compiled for this environment (did you build to HTML and try to run it not on the web, or set ENVIRONMENT to something - like node - and run it someplace else - like on the web?)'); + + var nodeVersion = process.versions.node; + var numericVersion = nodeVersion.split('.').slice(0, 3); + numericVersion = (numericVersion[0] * 10000) + (numericVersion[1] * 100) + (numericVersion[2].split('-')[0] * 1); + var minVersion = 160000; + if (numericVersion < 160000) { + throw new Error('This emscripten-generated code requires node v16.0.0 (detected v' + nodeVersion + ')'); + } + + // These modules will usually be used on Node.js. Load them eagerly to avoid + // the complexity of lazy-loading. + var fs = require('fs'); + var nodePath = require('path'); + + scriptDirectory = __dirname + '/'; + +// include: node_shell_read.js +readBinary = (filename) => { + // We need to re-wrap `file://` strings to URLs. + filename = isFileURI(filename) ? new URL(filename) : filename; + var ret = fs.readFileSync(filename); + assert(Buffer.isBuffer(ret)); + return ret; +}; + +readAsync = async (filename, binary = true) => { + // See the comment in the `readBinary` function. + filename = isFileURI(filename) ? new URL(filename) : filename; + var ret = fs.readFileSync(filename, binary ? undefined : 'utf8'); + assert(binary ? Buffer.isBuffer(ret) : typeof ret == 'string'); + return ret; +}; +// end include: node_shell_read.js + if (!Module['thisProgram'] && process.argv.length > 1) { + thisProgram = process.argv[1].replace(/\\/g, '/'); + } + + arguments_ = process.argv.slice(2); + + if (typeof module != 'undefined') { + module['exports'] = Module; + } + + quit_ = (status, toThrow) => { + process.exitCode = status; + throw toThrow; + }; + +} else +if (ENVIRONMENT_IS_SHELL) { + + if ((typeof process == 'object' && typeof require === 'function') || typeof window == 'object' || typeof WorkerGlobalScope != 'undefined') throw new Error('not compiled for this environment (did you build to HTML and try to run it not on the web, or set ENVIRONMENT to something - like node - and run it someplace else - like on the web?)'); + +} else + +// Note that this includes Node.js workers when relevant (pthreads is enabled). +// Node.js workers are detected as a combination of ENVIRONMENT_IS_WORKER and +// ENVIRONMENT_IS_NODE. +if (ENVIRONMENT_IS_WEB || ENVIRONMENT_IS_WORKER) { + if (ENVIRONMENT_IS_WORKER) { // Check worker, not web, since window could be polyfilled + scriptDirectory = self.location.href; + } else if (typeof document != 'undefined' && document.currentScript) { // web + scriptDirectory = document.currentScript.src; + } + // blob urls look like blob:http://site.com/etc/etc and we cannot infer anything from them. + // otherwise, slice off the final part of the url to find the script directory. + // if scriptDirectory does not contain a slash, lastIndexOf will return -1, + // and scriptDirectory will correctly be replaced with an empty string. + // If scriptDirectory contains a query (starting with ?) or a fragment (starting with #), + // they are removed because they could contain a slash. + if (scriptDirectory.startsWith('blob:')) { + scriptDirectory = ''; + } else { + scriptDirectory = scriptDirectory.slice(0, scriptDirectory.replace(/[?#].*/, '').lastIndexOf('/')+1); + } + + if (!(typeof window == 'object' || typeof WorkerGlobalScope != 'undefined')) throw new Error('not compiled for this environment (did you build to HTML and try to run it not on the web, or set ENVIRONMENT to something - like node - and run it someplace else - like on the web?)'); + + { +// include: web_or_worker_shell_read.js +if (ENVIRONMENT_IS_WORKER) { + readBinary = (url) => { + var xhr = new XMLHttpRequest(); + xhr.open('GET', url, false); + xhr.responseType = 'arraybuffer'; + xhr.send(null); + return new Uint8Array(/** @type{!ArrayBuffer} */(xhr.response)); + }; + } + + readAsync = async (url) => { + // Fetch has some additional restrictions over XHR, like it can't be used on a file:// url. + // See https://github.com/github/fetch/pull/92#issuecomment-140665932 + // Cordova or Electron apps are typically loaded from a file:// url. + // So use XHR on webview if URL is a file URL. + if (isFileURI(url)) { + return new Promise((resolve, reject) => { + var xhr = new XMLHttpRequest(); + xhr.open('GET', url, true); + xhr.responseType = 'arraybuffer'; + xhr.onload = () => { + if (xhr.status == 200 || (xhr.status == 0 && xhr.response)) { // file URLs can return 0 + resolve(xhr.response); + return; + } + reject(xhr.status); + }; + xhr.onerror = reject; + xhr.send(null); + }); + } + var response = await fetch(url, { credentials: 'same-origin' }); + if (response.ok) { + return response.arrayBuffer(); + } + throw new Error(response.status + ' : ' + response.url); + }; +// end include: web_or_worker_shell_read.js + } +} else +{ + throw new Error('environment detection error'); +} + +var out = Module['print'] || console.log.bind(console); +var err = Module['printErr'] || console.error.bind(console); + +// Merge back in the overrides +Object.assign(Module, moduleOverrides); +// Free the object hierarchy contained in the overrides, this lets the GC +// reclaim data used. +moduleOverrides = null; +checkIncomingModuleAPI(); + +// Emit code to handle expected values on the Module object. This applies Module.x +// to the proper local x. This has two benefits: first, we only emit it if it is +// expected to arrive, and second, by using a local everywhere else that can be +// minified. + +if (Module['arguments']) arguments_ = Module['arguments'];legacyModuleProp('arguments', 'arguments_'); + +if (Module['thisProgram']) thisProgram = Module['thisProgram'];legacyModuleProp('thisProgram', 'thisProgram'); + +// perform assertions in shell.js after we set up out() and err(), as otherwise if an assertion fails it cannot print the message +// Assertions on removed incoming Module JS APIs. +assert(typeof Module['memoryInitializerPrefixURL'] == 'undefined', 'Module.memoryInitializerPrefixURL option was removed, use Module.locateFile instead'); +assert(typeof Module['pthreadMainPrefixURL'] == 'undefined', 'Module.pthreadMainPrefixURL option was removed, use Module.locateFile instead'); +assert(typeof Module['cdInitializerPrefixURL'] == 'undefined', 'Module.cdInitializerPrefixURL option was removed, use Module.locateFile instead'); +assert(typeof Module['filePackagePrefixURL'] == 'undefined', 'Module.filePackagePrefixURL option was removed, use Module.locateFile instead'); +assert(typeof Module['read'] == 'undefined', 'Module.read option was removed'); +assert(typeof Module['readAsync'] == 'undefined', 'Module.readAsync option was removed (modify readAsync in JS)'); +assert(typeof Module['readBinary'] == 'undefined', 'Module.readBinary option was removed (modify readBinary in JS)'); +assert(typeof Module['setWindowTitle'] == 'undefined', 'Module.setWindowTitle option was removed (modify emscripten_set_window_title in JS)'); +assert(typeof Module['TOTAL_MEMORY'] == 'undefined', 'Module.TOTAL_MEMORY has been renamed Module.INITIAL_MEMORY'); +legacyModuleProp('asm', 'wasmExports'); +legacyModuleProp('readAsync', 'readAsync'); +legacyModuleProp('readBinary', 'readBinary'); +legacyModuleProp('setWindowTitle', 'setWindowTitle'); +var IDBFS = 'IDBFS is no longer included by default; build with -lidbfs.js'; +var PROXYFS = 'PROXYFS is no longer included by default; build with -lproxyfs.js'; +var WORKERFS = 'WORKERFS is no longer included by default; build with -lworkerfs.js'; +var FETCHFS = 'FETCHFS is no longer included by default; build with -lfetchfs.js'; +var ICASEFS = 'ICASEFS is no longer included by default; build with -licasefs.js'; +var JSFILEFS = 'JSFILEFS is no longer included by default; build with -ljsfilefs.js'; +var OPFS = 'OPFS is no longer included by default; build with -lopfs.js'; + +var NODEFS = 'NODEFS is no longer included by default; build with -lnodefs.js'; + +assert(!ENVIRONMENT_IS_SHELL, 'shell environment detected but not enabled at build time. Add `shell` to `-sENVIRONMENT` to enable.'); + +// end include: shell.js + +// include: preamble.js +// === Preamble library stuff === + +// Documentation for the public APIs defined in this file must be updated in: +// site/source/docs/api_reference/preamble.js.rst +// A prebuilt local version of the documentation is available at: +// site/build/text/docs/api_reference/preamble.js.txt +// You can also build docs locally as HTML or other formats in site/ +// An online HTML version (which may be of a different version of Emscripten) +// is up at http://kripken.github.io/emscripten-site/docs/api_reference/preamble.js.html + +var wasmBinary = Module['wasmBinary'];legacyModuleProp('wasmBinary', 'wasmBinary'); + +if (typeof WebAssembly != 'object') { + err('no native wasm support detected'); +} + +// Wasm globals + +var wasmMemory; + +//======================================== +// Runtime essentials +//======================================== + +// whether we are quitting the application. no code should run after this. +// set in exit() and abort() +var ABORT = false; + +// set by exit() and abort(). Passed to 'onExit' handler. +// NOTE: This is also used as the process return code code in shell environments +// but only when noExitRuntime is false. +var EXITSTATUS; + +// In STRICT mode, we only define assert() when ASSERTIONS is set. i.e. we +// don't define it at all in release modes. This matches the behaviour of +// MINIMAL_RUNTIME. +// TODO(sbc): Make this the default even without STRICT enabled. +/** @type {function(*, string=)} */ +function assert(condition, text) { + if (!condition) { + abort('Assertion failed' + (text ? ': ' + text : '')); + } +} + +// We used to include malloc/free by default in the past. Show a helpful error in +// builds with assertions. +function _malloc() { + abort('malloc() called but not included in the build - add `_malloc` to EXPORTED_FUNCTIONS'); +} +function _free() { + // Show a helpful error since we used to include free by default in the past. + abort('free() called but not included in the build - add `_free` to EXPORTED_FUNCTIONS'); +} + +// Memory management + +var HEAP, +/** @type {!Int8Array} */ + HEAP8, +/** @type {!Uint8Array} */ + HEAPU8, +/** @type {!Int16Array} */ + HEAP16, +/** @type {!Uint16Array} */ + HEAPU16, +/** @type {!Int32Array} */ + HEAP32, +/** @type {!Uint32Array} */ + HEAPU32, +/** @type {!Float32Array} */ + HEAPF32, +/* BigInt64Array type is not correctly defined in closure +/** not-@type {!BigInt64Array} */ + HEAP64, +/* BigUint64Array type is not correctly defined in closure +/** not-t@type {!BigUint64Array} */ + HEAPU64, +/** @type {!Float64Array} */ + HEAPF64; + +var runtimeInitialized = false; + +/** + * Indicates whether filename is delivered via file protocol (as opposed to http/https) + * @noinline + */ +var isFileURI = (filename) => filename.startsWith('file://'); + +// include: runtime_shared.js +// include: runtime_stack_check.js +// Initializes the stack cookie. Called at the startup of main and at the startup of each thread in pthreads mode. +function writeStackCookie() { + var max = _emscripten_stack_get_end(); + assert((max & 3) == 0); + // If the stack ends at address zero we write our cookies 4 bytes into the + // stack. This prevents interference with SAFE_HEAP and ASAN which also + // monitor writes to address zero. + if (max == 0) { + max += 4; + } + // The stack grow downwards towards _emscripten_stack_get_end. + // We write cookies to the final two words in the stack and detect if they are + // ever overwritten. + HEAPU32[((max)>>2)] = 0x02135467; + HEAPU32[(((max)+(4))>>2)] = 0x89BACDFE; + // Also test the global address 0 for integrity. + HEAPU32[((0)>>2)] = 1668509029; +} + +function checkStackCookie() { + if (ABORT) return; + var max = _emscripten_stack_get_end(); + // See writeStackCookie(). + if (max == 0) { + max += 4; + } + var cookie1 = HEAPU32[((max)>>2)]; + var cookie2 = HEAPU32[(((max)+(4))>>2)]; + if (cookie1 != 0x02135467 || cookie2 != 0x89BACDFE) { + abort(`Stack overflow! Stack cookie has been overwritten at ${ptrToString(max)}, expected hex dwords 0x89BACDFE and 0x2135467, but received ${ptrToString(cookie2)} ${ptrToString(cookie1)}`); + } + // Also test the global address 0 for integrity. + if (HEAPU32[((0)>>2)] != 0x63736d65 /* 'emsc' */) { + abort('Runtime error: The application has corrupted its heap memory area (address zero)!'); + } +} +// end include: runtime_stack_check.js +// include: runtime_exceptions.js +// end include: runtime_exceptions.js +// include: runtime_debug.js +// Endianness check +(() => { + var h16 = new Int16Array(1); + var h8 = new Int8Array(h16.buffer); + h16[0] = 0x6373; + if (h8[0] !== 0x73 || h8[1] !== 0x63) throw 'Runtime error: expected the system to be little-endian! (Run with -sSUPPORT_BIG_ENDIAN to bypass)'; +})(); + +if (Module['ENVIRONMENT']) { + throw new Error('Module.ENVIRONMENT has been deprecated. To force the environment, use the ENVIRONMENT compile-time option (for example, -sENVIRONMENT=web or -sENVIRONMENT=node)'); +} + +function legacyModuleProp(prop, newName, incoming=true) { + if (!Object.getOwnPropertyDescriptor(Module, prop)) { + Object.defineProperty(Module, prop, { + configurable: true, + get() { + let extra = incoming ? ' (the initial value can be provided on Module, but after startup the value is only looked for on a local variable of that name)' : ''; + abort(`\`Module.${prop}\` has been replaced by \`${newName}\`` + extra); + + } + }); + } +} + +function consumedModuleProp(prop) { + if (!Object.getOwnPropertyDescriptor(Module, prop)) { + Object.defineProperty(Module, prop, { + configurable: true, + set() { + abort(`Attempt to set \`Module.${prop}\` after it has already been processed. This can happen, for example, when code is injected via '--post-js' rather than '--pre-js'`); + + } + }); + } +} + +function ignoredModuleProp(prop) { + if (Object.getOwnPropertyDescriptor(Module, prop)) { + abort(`\`Module.${prop}\` was supplied but \`${prop}\` not included in INCOMING_MODULE_JS_API`); + } +} + +// forcing the filesystem exports a few things by default +function isExportedByForceFilesystem(name) { + return name === 'FS_createPath' || + name === 'FS_createDataFile' || + name === 'FS_createPreloadedFile' || + name === 'FS_unlink' || + name === 'addRunDependency' || + // The old FS has some functionality that WasmFS lacks. + name === 'FS_createLazyFile' || + name === 'FS_createDevice' || + name === 'removeRunDependency'; +} + +/** + * Intercept access to a global symbol. This enables us to give informative + * warnings/errors when folks attempt to use symbols they did not include in + * their build, or no symbols that no longer exist. + */ +function hookGlobalSymbolAccess(sym, func) { + if (typeof globalThis != 'undefined' && !Object.getOwnPropertyDescriptor(globalThis, sym)) { + Object.defineProperty(globalThis, sym, { + configurable: true, + get() { + func(); + return undefined; + } + }); + } +} + +function missingGlobal(sym, msg) { + hookGlobalSymbolAccess(sym, () => { + warnOnce(`\`${sym}\` is not longer defined by emscripten. ${msg}`); + }); +} + +missingGlobal('buffer', 'Please use HEAP8.buffer or wasmMemory.buffer'); +missingGlobal('asm', 'Please use wasmExports instead'); + +function missingLibrarySymbol(sym) { + hookGlobalSymbolAccess(sym, () => { + // Can't `abort()` here because it would break code that does runtime + // checks. e.g. `if (typeof SDL === 'undefined')`. + var msg = `\`${sym}\` is a library symbol and not included by default; add it to your library.js __deps or to DEFAULT_LIBRARY_FUNCS_TO_INCLUDE on the command line`; + // DEFAULT_LIBRARY_FUNCS_TO_INCLUDE requires the name as it appears in + // library.js, which means $name for a JS name with no prefix, or name + // for a JS name like _name. + var librarySymbol = sym; + if (!librarySymbol.startsWith('_')) { + librarySymbol = '$' + sym; + } + msg += ` (e.g. -sDEFAULT_LIBRARY_FUNCS_TO_INCLUDE='${librarySymbol}')`; + if (isExportedByForceFilesystem(sym)) { + msg += '. Alternatively, forcing filesystem support (-sFORCE_FILESYSTEM) can export this for you'; + } + warnOnce(msg); + }); + + // Any symbol that is not included from the JS library is also (by definition) + // not exported on the Module object. + unexportedRuntimeSymbol(sym); +} + +function unexportedRuntimeSymbol(sym) { + if (!Object.getOwnPropertyDescriptor(Module, sym)) { + Object.defineProperty(Module, sym, { + configurable: true, + get() { + var msg = `'${sym}' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the Emscripten FAQ)`; + if (isExportedByForceFilesystem(sym)) { + msg += '. Alternatively, forcing filesystem support (-sFORCE_FILESYSTEM) can export this for you'; + } + abort(msg); + } + }); + } +} + +var runtimeDebug = true; // Switch to false at runtime to disable logging at the right times + +// Used by XXXXX_DEBUG settings to output debug messages. +function dbg(...args) { + if (!runtimeDebug && typeof runtimeDebug != 'undefined') return; + // TODO(sbc): Make this configurable somehow. Its not always convenient for + // logging to show up as warnings. + console.warn(...args); +} +// end include: runtime_debug.js +// include: memoryprofiler.js +// end include: memoryprofiler.js + + +function updateMemoryViews() { + var b = wasmMemory.buffer; + Module['HEAP8'] = HEAP8 = new Int8Array(b); + Module['HEAP16'] = HEAP16 = new Int16Array(b); + Module['HEAPU8'] = HEAPU8 = new Uint8Array(b); + Module['HEAPU16'] = HEAPU16 = new Uint16Array(b); + Module['HEAP32'] = HEAP32 = new Int32Array(b); + Module['HEAPU32'] = HEAPU32 = new Uint32Array(b); + Module['HEAPF32'] = HEAPF32 = new Float32Array(b); + Module['HEAPF64'] = HEAPF64 = new Float64Array(b); + Module['HEAP64'] = HEAP64 = new BigInt64Array(b); + Module['HEAPU64'] = HEAPU64 = new BigUint64Array(b); +} + +// end include: runtime_shared.js +assert(!Module['STACK_SIZE'], 'STACK_SIZE can no longer be set at runtime. Use -sSTACK_SIZE at link time') + +assert(typeof Int32Array != 'undefined' && typeof Float64Array !== 'undefined' && Int32Array.prototype.subarray != undefined && Int32Array.prototype.set != undefined, + 'JS engine does not provide full typed array support'); + +// If memory is defined in wasm, the user can't provide it, or set INITIAL_MEMORY +assert(!Module['wasmMemory'], 'Use of `wasmMemory` detected. Use -sIMPORTED_MEMORY to define wasmMemory externally'); +assert(!Module['INITIAL_MEMORY'], 'Detected runtime INITIAL_MEMORY setting. Use -sIMPORTED_MEMORY to define wasmMemory dynamically'); + +function preRun() { + if (Module['preRun']) { + if (typeof Module['preRun'] == 'function') Module['preRun'] = [Module['preRun']]; + while (Module['preRun'].length) { + addOnPreRun(Module['preRun'].shift()); + } + } + consumedModuleProp('preRun'); + callRuntimeCallbacks(onPreRuns); +} + +function initRuntime() { + assert(!runtimeInitialized); + runtimeInitialized = true; + + checkStackCookie(); + + if (!Module['noFSInit'] && !FS.initialized) FS.init(); +TTY.init(); + + wasmExports['__wasm_call_ctors'](); + + FS.ignorePermissions = false; +} + +function preMain() { + checkStackCookie(); + +} + +function postRun() { + checkStackCookie(); + + if (Module['postRun']) { + if (typeof Module['postRun'] == 'function') Module['postRun'] = [Module['postRun']]; + while (Module['postRun'].length) { + addOnPostRun(Module['postRun'].shift()); + } + } + consumedModuleProp('postRun'); + + callRuntimeCallbacks(onPostRuns); +} + +// A counter of dependencies for calling run(). If we need to +// do asynchronous work before running, increment this and +// decrement it. Incrementing must happen in a place like +// Module.preRun (used by emcc to add file preloading). +// Note that you can add dependencies in preRun, even though +// it happens right before run - run will be postponed until +// the dependencies are met. +var runDependencies = 0; +var dependenciesFulfilled = null; // overridden to take different actions when all run dependencies are fulfilled +var runDependencyTracking = {}; +var runDependencyWatcher = null; + +function getUniqueRunDependency(id) { + var orig = id; + while (1) { + if (!runDependencyTracking[id]) return id; + id = orig + Math.random(); + } +} + +function addRunDependency(id) { + runDependencies++; + + Module['monitorRunDependencies']?.(runDependencies); + + if (id) { + assert(!runDependencyTracking[id]); + runDependencyTracking[id] = 1; + if (runDependencyWatcher === null && typeof setInterval != 'undefined') { + // Check for missing dependencies every few seconds + runDependencyWatcher = setInterval(() => { + if (ABORT) { + clearInterval(runDependencyWatcher); + runDependencyWatcher = null; + return; + } + var shown = false; + for (var dep in runDependencyTracking) { + if (!shown) { + shown = true; + err('still waiting on run dependencies:'); + } + err(`dependency: ${dep}`); + } + if (shown) { + err('(end of list)'); + } + }, 10000); + } + } else { + err('warning: run dependency added without ID'); + } +} + +function removeRunDependency(id) { + runDependencies--; + + Module['monitorRunDependencies']?.(runDependencies); + + if (id) { + assert(runDependencyTracking[id]); + delete runDependencyTracking[id]; + } else { + err('warning: run dependency removed without ID'); + } + if (runDependencies == 0) { + if (runDependencyWatcher !== null) { + clearInterval(runDependencyWatcher); + runDependencyWatcher = null; + } + if (dependenciesFulfilled) { + var callback = dependenciesFulfilled; + dependenciesFulfilled = null; + callback(); // can add another dependenciesFulfilled + } + } +} + +/** @param {string|number=} what */ +function abort(what) { + Module['onAbort']?.(what); + + what = 'Aborted(' + what + ')'; + // TODO(sbc): Should we remove printing and leave it up to whoever + // catches the exception? + err(what); + + ABORT = true; + + // Use a wasm runtime error, because a JS error might be seen as a foreign + // exception, which means we'd run destructors on it. We need the error to + // simply make the program stop. + // FIXME This approach does not work in Wasm EH because it currently does not assume + // all RuntimeErrors are from traps; it decides whether a RuntimeError is from + // a trap or not based on a hidden field within the object. So at the moment + // we don't have a way of throwing a wasm trap from JS. TODO Make a JS API that + // allows this in the wasm spec. + + // Suppress closure compiler warning here. Closure compiler's builtin extern + // definition for WebAssembly.RuntimeError claims it takes no arguments even + // though it can. + // TODO(https://github.com/google/closure-compiler/pull/3913): Remove if/when upstream closure gets fixed. + /** @suppress {checkTypes} */ + var e = new WebAssembly.RuntimeError(what); + + // Throw the error whether or not MODULARIZE is set because abort is used + // in code paths apart from instantiation where an exception is expected + // to be thrown when abort is called. + throw e; +} + +function createExportWrapper(name, nargs) { + return (...args) => { + assert(runtimeInitialized, `native function \`${name}\` called before runtime initialization`); + var f = wasmExports[name]; + assert(f, `exported native function \`${name}\` not found`); + // Only assert for too many arguments. Too few can be valid since the missing arguments will be zero filled. + assert(args.length <= nargs, `native function \`${name}\` called with ${args.length} args but expects ${nargs}`); + return f(...args); + }; +} + +var wasmBinaryFile; + +function findWasmBinary() { + return locateFile('example64.wasm'); +} + +function getBinarySync(file) { + if (file == wasmBinaryFile && wasmBinary) { + return new Uint8Array(wasmBinary); + } + if (readBinary) { + return readBinary(file); + } + throw 'both async and sync fetching of the wasm failed'; +} + +async function getWasmBinary(binaryFile) { + // If we don't have the binary yet, load it asynchronously using readAsync. + if (!wasmBinary) { + // Fetch the binary using readAsync + try { + var response = await readAsync(binaryFile); + return new Uint8Array(response); + } catch { + // Fall back to getBinarySync below; + } + } + + // Otherwise, getBinarySync should be able to get it synchronously + return getBinarySync(binaryFile); +} + +async function instantiateArrayBuffer(binaryFile, imports) { + try { + var binary = await getWasmBinary(binaryFile); + var instance = await WebAssembly.instantiate(binary, imports); + return instance; + } catch (reason) { + err(`failed to asynchronously prepare wasm: ${reason}`); + + // Warn on some common problems. + if (isFileURI(wasmBinaryFile)) { + err(`warning: Loading from a file URI (${wasmBinaryFile}) is not supported in most browsers. See https://emscripten.org/docs/getting_started/FAQ.html#how-do-i-run-a-local-webserver-for-testing-why-does-my-program-stall-in-downloading-or-preparing`); + } + abort(reason); + } +} + +async function instantiateAsync(binary, binaryFile, imports) { + if (!binary && typeof WebAssembly.instantiateStreaming == 'function' + // Don't use streaming for file:// delivered objects in a webview, fetch them synchronously. + && !isFileURI(binaryFile) + // Avoid instantiateStreaming() on Node.js environment for now, as while + // Node.js v18.1.0 implements it, it does not have a full fetch() + // implementation yet. + // + // Reference: + // https://github.com/emscripten-core/emscripten/pull/16917 + && !ENVIRONMENT_IS_NODE + ) { + try { + var response = fetch(binaryFile, { credentials: 'same-origin' }); + var instantiationResult = await WebAssembly.instantiateStreaming(response, imports); + return instantiationResult; + } catch (reason) { + // We expect the most common failure cause to be a bad MIME type for the binary, + // in which case falling back to ArrayBuffer instantiation should work. + err(`wasm streaming compile failed: ${reason}`); + err('falling back to ArrayBuffer instantiation'); + // fall back of instantiateArrayBuffer below + }; + } + return instantiateArrayBuffer(binaryFile, imports); +} + +function getWasmImports() { + // prepare imports + return { + 'env': wasmImports, + 'wasi_snapshot_preview1': wasmImports, + } +} + +// Create the wasm instance. +// Receives the wasm imports, returns the exports. +async function createWasm() { + // Load the wasm module and create an instance of using native support in the JS engine. + // handle a generated wasm instance, receiving its exports and + // performing other necessary setup + /** @param {WebAssembly.Module=} module*/ + function receiveInstance(instance, module) { + wasmExports = instance.exports; + + + + wasmMemory = wasmExports['memory']; + + assert(wasmMemory, 'memory not found in wasm exports'); + updateMemoryViews(); + + removeRunDependency('wasm-instantiate'); + return wasmExports; + } + // wait for the pthread pool (if any) + addRunDependency('wasm-instantiate'); + + // Prefer streaming instantiation if available. + // Async compilation can be confusing when an error on the page overwrites Module + // (for example, if the order of elements is wrong, and the one defining Module is + // later), so we save Module and check it later. + var trueModule = Module; + function receiveInstantiationResult(result) { + // 'result' is a ResultObject object which has both the module and instance. + // receiveInstance() will swap in the exports (to Module.asm) so they can be called + assert(Module === trueModule, 'the Module object should not be replaced during async compilation - perhaps the order of HTML elements is wrong?'); + trueModule = null; + // TODO: Due to Closure regression https://github.com/google/closure-compiler/issues/3193, the above line no longer optimizes out down to the following line. + // When the regression is fixed, can restore the above PTHREADS-enabled path. + return receiveInstance(result['instance']); + } + + var info = getWasmImports(); + + // User shell pages can write their own Module.instantiateWasm = function(imports, successCallback) callback + // to manually instantiate the Wasm module themselves. This allows pages to + // run the instantiation parallel to any other async startup actions they are + // performing. + // Also pthreads and wasm workers initialize the wasm instance through this + // path. + if (Module['instantiateWasm']) { + return new Promise((resolve, reject) => { + try { + Module['instantiateWasm'](info, (mod, inst) => { + receiveInstance(mod, inst); + resolve(mod.exports); + }); + } catch(e) { + err(`Module.instantiateWasm callback failed with error: ${e}`); + reject(e); + } + }); + } + + wasmBinaryFile ??= findWasmBinary(); + var result = await instantiateAsync(wasmBinary, wasmBinaryFile, info); + var exports = receiveInstantiationResult(result); + return exports; +} + +// end include: preamble.js + +// Begin JS library code + + + class ExitStatus { + name = 'ExitStatus'; + constructor(status) { + this.message = `Program terminated with exit(${status})`; + this.status = status; + } + } + + var callRuntimeCallbacks = (callbacks) => { + while (callbacks.length > 0) { + // Pass the module as the first argument. + callbacks.shift()(Module); + } + }; + var onPostRuns = []; + var addOnPostRun = (cb) => onPostRuns.unshift(cb); + + var onPreRuns = []; + var addOnPreRun = (cb) => onPreRuns.unshift(cb); + + + + /** + * @param {number} ptr + * @param {string} type + */ + function getValue(ptr, type = 'i8') { + if (type.endsWith('*')) type = '*'; + switch (type) { + case 'i1': return HEAP8[ptr]; + case 'i8': return HEAP8[ptr]; + case 'i16': return HEAP16[((ptr)>>1)]; + case 'i32': return HEAP32[((ptr)>>2)]; + case 'i64': return HEAP64[((ptr)>>3)]; + case 'float': return HEAPF32[((ptr)>>2)]; + case 'double': return HEAPF64[((ptr)>>3)]; + case '*': return HEAPU32[((ptr)>>2)]; + default: abort(`invalid type for getValue: ${type}`); + } + } + + var noExitRuntime = Module['noExitRuntime'] || true; + + var ptrToString = (ptr) => { + assert(typeof ptr === 'number'); + // With CAN_ADDRESS_2GB or MEMORY64, pointers are already unsigned. + ptr >>>= 0; + return '0x' + ptr.toString(16).padStart(8, '0'); + }; + + + /** + * @param {number} ptr + * @param {number} value + * @param {string} type + */ + function setValue(ptr, value, type = 'i8') { + if (type.endsWith('*')) type = '*'; + switch (type) { + case 'i1': HEAP8[ptr] = value; break; + case 'i8': HEAP8[ptr] = value; break; + case 'i16': HEAP16[((ptr)>>1)] = value; break; + case 'i32': HEAP32[((ptr)>>2)] = value; break; + case 'i64': HEAP64[((ptr)>>3)] = BigInt(value); break; + case 'float': HEAPF32[((ptr)>>2)] = value; break; + case 'double': HEAPF64[((ptr)>>3)] = value; break; + case '*': HEAPU32[((ptr)>>2)] = value; break; + default: abort(`invalid type for setValue: ${type}`); + } + } + + var stackRestore = (val) => __emscripten_stack_restore(val); + + var stackSave = () => _emscripten_stack_get_current(); + + var warnOnce = (text) => { + warnOnce.shown ||= {}; + if (!warnOnce.shown[text]) { + warnOnce.shown[text] = 1; + if (ENVIRONMENT_IS_NODE) text = 'warning: ' + text; + err(text); + } + }; + + var syscallGetVarargI = () => { + assert(SYSCALLS.varargs != undefined); + // the `+` prepended here is necessary to convince the JSCompiler that varargs is indeed a number. + var ret = HEAP32[((+SYSCALLS.varargs)>>2)]; + SYSCALLS.varargs += 4; + return ret; + }; + + var PATH = { + isAbs:(path) => path.charAt(0) === '/', + splitPath:(filename) => { + var splitPathRe = /^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/; + return splitPathRe.exec(filename).slice(1); + }, + normalizeArray:(parts, allowAboveRoot) => { + // if the path tries to go above the root, `up` ends up > 0 + var up = 0; + for (var i = parts.length - 1; i >= 0; i--) { + var last = parts[i]; + if (last === '.') { + parts.splice(i, 1); + } else if (last === '..') { + parts.splice(i, 1); + up++; + } else if (up) { + parts.splice(i, 1); + up--; + } + } + // if the path is allowed to go above the root, restore leading ..s + if (allowAboveRoot) { + for (; up; up--) { + parts.unshift('..'); + } + } + return parts; + }, + normalize:(path) => { + var isAbsolute = PATH.isAbs(path), + trailingSlash = path.slice(-1) === '/'; + // Normalize the path + path = PATH.normalizeArray(path.split('/').filter((p) => !!p), !isAbsolute).join('/'); + if (!path && !isAbsolute) { + path = '.'; + } + if (path && trailingSlash) { + path += '/'; + } + return (isAbsolute ? '/' : '') + path; + }, + dirname:(path) => { + var result = PATH.splitPath(path), + root = result[0], + dir = result[1]; + if (!root && !dir) { + // No dirname whatsoever + return '.'; + } + if (dir) { + // It has a dirname, strip trailing slash + dir = dir.slice(0, -1); + } + return root + dir; + }, + basename:(path) => path && path.match(/([^\/]+|\/)\/*$/)[1], + join:(...paths) => PATH.normalize(paths.join('/')), + join2:(l, r) => PATH.normalize(l + '/' + r), + }; + + var initRandomFill = () => { + // This block is not needed on v19+ since crypto.getRandomValues is builtin + if (ENVIRONMENT_IS_NODE) { + var nodeCrypto = require('crypto'); + return (view) => nodeCrypto.randomFillSync(view); + } + + return (view) => crypto.getRandomValues(view); + }; + var randomFill = (view) => { + // Lazily init on the first invocation. + (randomFill = initRandomFill())(view); + }; + + + + var PATH_FS = { + resolve:(...args) => { + var resolvedPath = '', + resolvedAbsolute = false; + for (var i = args.length - 1; i >= -1 && !resolvedAbsolute; i--) { + var path = (i >= 0) ? args[i] : FS.cwd(); + // Skip empty and invalid entries + if (typeof path != 'string') { + throw new TypeError('Arguments to path.resolve must be strings'); + } else if (!path) { + return ''; // an invalid portion invalidates the whole thing + } + resolvedPath = path + '/' + resolvedPath; + resolvedAbsolute = PATH.isAbs(path); + } + // At this point the path should be resolved to a full absolute path, but + // handle relative paths to be safe (might happen when process.cwd() fails) + resolvedPath = PATH.normalizeArray(resolvedPath.split('/').filter((p) => !!p), !resolvedAbsolute).join('/'); + return ((resolvedAbsolute ? '/' : '') + resolvedPath) || '.'; + }, + relative:(from, to) => { + from = PATH_FS.resolve(from).slice(1); + to = PATH_FS.resolve(to).slice(1); + function trim(arr) { + var start = 0; + for (; start < arr.length; start++) { + if (arr[start] !== '') break; + } + var end = arr.length - 1; + for (; end >= 0; end--) { + if (arr[end] !== '') break; + } + if (start > end) return []; + return arr.slice(start, end - start + 1); + } + var fromParts = trim(from.split('/')); + var toParts = trim(to.split('/')); + var length = Math.min(fromParts.length, toParts.length); + var samePartsLength = length; + for (var i = 0; i < length; i++) { + if (fromParts[i] !== toParts[i]) { + samePartsLength = i; + break; + } + } + var outputParts = []; + for (var i = samePartsLength; i < fromParts.length; i++) { + outputParts.push('..'); + } + outputParts = outputParts.concat(toParts.slice(samePartsLength)); + return outputParts.join('/'); + }, + }; + + + var UTF8Decoder = typeof TextDecoder != 'undefined' ? new TextDecoder() : undefined; + + /** + * Given a pointer 'idx' to a null-terminated UTF8-encoded string in the given + * array that contains uint8 values, returns a copy of that string as a + * Javascript String object. + * heapOrArray is either a regular array, or a JavaScript typed array view. + * @param {number=} idx + * @param {number=} maxBytesToRead + * @return {string} + */ + var UTF8ArrayToString = (heapOrArray, idx = 0, maxBytesToRead = NaN) => { + var endIdx = idx + maxBytesToRead; + var endPtr = idx; + // TextDecoder needs to know the byte length in advance, it doesn't stop on + // null terminator by itself. Also, use the length info to avoid running tiny + // strings through TextDecoder, since .subarray() allocates garbage. + // (As a tiny code save trick, compare endPtr against endIdx using a negation, + // so that undefined/NaN means Infinity) + while (heapOrArray[endPtr] && !(endPtr >= endIdx)) ++endPtr; + + if (endPtr - idx > 16 && heapOrArray.buffer && UTF8Decoder) { + return UTF8Decoder.decode(heapOrArray.subarray(idx, endPtr)); + } + var str = ''; + // If building with TextDecoder, we have already computed the string length + // above, so test loop end condition against that + while (idx < endPtr) { + // For UTF8 byte structure, see: + // http://en.wikipedia.org/wiki/UTF-8#Description + // https://www.ietf.org/rfc/rfc2279.txt + // https://tools.ietf.org/html/rfc3629 + var u0 = heapOrArray[idx++]; + if (!(u0 & 0x80)) { str += String.fromCharCode(u0); continue; } + var u1 = heapOrArray[idx++] & 63; + if ((u0 & 0xE0) == 0xC0) { str += String.fromCharCode(((u0 & 31) << 6) | u1); continue; } + var u2 = heapOrArray[idx++] & 63; + if ((u0 & 0xF0) == 0xE0) { + u0 = ((u0 & 15) << 12) | (u1 << 6) | u2; + } else { + if ((u0 & 0xF8) != 0xF0) warnOnce('Invalid UTF-8 leading byte ' + ptrToString(u0) + ' encountered when deserializing a UTF-8 string in wasm memory to a JS string!'); + u0 = ((u0 & 7) << 18) | (u1 << 12) | (u2 << 6) | (heapOrArray[idx++] & 63); + } + + if (u0 < 0x10000) { + str += String.fromCharCode(u0); + } else { + var ch = u0 - 0x10000; + str += String.fromCharCode(0xD800 | (ch >> 10), 0xDC00 | (ch & 0x3FF)); + } + } + return str; + }; + + var FS_stdin_getChar_buffer = []; + + var lengthBytesUTF8 = (str) => { + var len = 0; + for (var i = 0; i < str.length; ++i) { + // Gotcha: charCodeAt returns a 16-bit word that is a UTF-16 encoded code + // unit, not a Unicode code point of the character! So decode + // UTF16->UTF32->UTF8. + // See http://unicode.org/faq/utf_bom.html#utf16-3 + var c = str.charCodeAt(i); // possibly a lead surrogate + if (c <= 0x7F) { + len++; + } else if (c <= 0x7FF) { + len += 2; + } else if (c >= 0xD800 && c <= 0xDFFF) { + len += 4; ++i; + } else { + len += 3; + } + } + return len; + }; + + var stringToUTF8Array = (str, heap, outIdx, maxBytesToWrite) => { + assert(typeof str === 'string', `stringToUTF8Array expects a string (got ${typeof str})`); + // Parameter maxBytesToWrite is not optional. Negative values, 0, null, + // undefined and false each don't write out any bytes. + if (!(maxBytesToWrite > 0)) + return 0; + + var startIdx = outIdx; + var endIdx = outIdx + maxBytesToWrite - 1; // -1 for string null terminator. + for (var i = 0; i < str.length; ++i) { + // Gotcha: charCodeAt returns a 16-bit word that is a UTF-16 encoded code + // unit, not a Unicode code point of the character! So decode + // UTF16->UTF32->UTF8. + // See http://unicode.org/faq/utf_bom.html#utf16-3 + // For UTF8 byte structure, see http://en.wikipedia.org/wiki/UTF-8#Description + // and https://www.ietf.org/rfc/rfc2279.txt + // and https://tools.ietf.org/html/rfc3629 + var u = str.charCodeAt(i); // possibly a lead surrogate + if (u >= 0xD800 && u <= 0xDFFF) { + var u1 = str.charCodeAt(++i); + u = 0x10000 + ((u & 0x3FF) << 10) | (u1 & 0x3FF); + } + if (u <= 0x7F) { + if (outIdx >= endIdx) break; + heap[outIdx++] = u; + } else if (u <= 0x7FF) { + if (outIdx + 1 >= endIdx) break; + heap[outIdx++] = 0xC0 | (u >> 6); + heap[outIdx++] = 0x80 | (u & 63); + } else if (u <= 0xFFFF) { + if (outIdx + 2 >= endIdx) break; + heap[outIdx++] = 0xE0 | (u >> 12); + heap[outIdx++] = 0x80 | ((u >> 6) & 63); + heap[outIdx++] = 0x80 | (u & 63); + } else { + if (outIdx + 3 >= endIdx) break; + if (u > 0x10FFFF) warnOnce('Invalid Unicode code point ' + ptrToString(u) + ' encountered when serializing a JS string to a UTF-8 string in wasm memory! (Valid unicode code points should be in range 0-0x10FFFF).'); + heap[outIdx++] = 0xF0 | (u >> 18); + heap[outIdx++] = 0x80 | ((u >> 12) & 63); + heap[outIdx++] = 0x80 | ((u >> 6) & 63); + heap[outIdx++] = 0x80 | (u & 63); + } + } + // Null-terminate the pointer to the buffer. + heap[outIdx] = 0; + return outIdx - startIdx; + }; + /** @type {function(string, boolean=, number=)} */ + var intArrayFromString = (stringy, dontAddNull, length) => { + var len = length > 0 ? length : lengthBytesUTF8(stringy)+1; + var u8array = new Array(len); + var numBytesWritten = stringToUTF8Array(stringy, u8array, 0, u8array.length); + if (dontAddNull) u8array.length = numBytesWritten; + return u8array; + }; + var FS_stdin_getChar = () => { + if (!FS_stdin_getChar_buffer.length) { + var result = null; + if (ENVIRONMENT_IS_NODE) { + // we will read data by chunks of BUFSIZE + var BUFSIZE = 256; + var buf = Buffer.alloc(BUFSIZE); + var bytesRead = 0; + + // For some reason we must suppress a closure warning here, even though + // fd definitely exists on process.stdin, and is even the proper way to + // get the fd of stdin, + // https://github.com/nodejs/help/issues/2136#issuecomment-523649904 + // This started to happen after moving this logic out of library_tty.js, + // so it is related to the surrounding code in some unclear manner. + /** @suppress {missingProperties} */ + var fd = process.stdin.fd; + + try { + bytesRead = fs.readSync(fd, buf, 0, BUFSIZE); + } catch(e) { + // Cross-platform differences: on Windows, reading EOF throws an + // exception, but on other OSes, reading EOF returns 0. Uniformize + // behavior by treating the EOF exception to return 0. + if (e.toString().includes('EOF')) bytesRead = 0; + else throw e; + } + + if (bytesRead > 0) { + result = buf.slice(0, bytesRead).toString('utf-8'); + } + } else + if (typeof window != 'undefined' && + typeof window.prompt == 'function') { + // Browser. + result = window.prompt('Input: '); // returns null on cancel + if (result !== null) { + result += '\n'; + } + } else + {} + if (!result) { + return null; + } + FS_stdin_getChar_buffer = intArrayFromString(result, true); + } + return FS_stdin_getChar_buffer.shift(); + }; + var TTY = { + ttys:[], + init() { + // https://github.com/emscripten-core/emscripten/pull/1555 + // if (ENVIRONMENT_IS_NODE) { + // // currently, FS.init does not distinguish if process.stdin is a file or TTY + // // device, it always assumes it's a TTY device. because of this, we're forcing + // // process.stdin to UTF8 encoding to at least make stdin reading compatible + // // with text files until FS.init can be refactored. + // process.stdin.setEncoding('utf8'); + // } + }, + shutdown() { + // https://github.com/emscripten-core/emscripten/pull/1555 + // if (ENVIRONMENT_IS_NODE) { + // // inolen: any idea as to why node -e 'process.stdin.read()' wouldn't exit immediately (with process.stdin being a tty)? + // // isaacs: because now it's reading from the stream, you've expressed interest in it, so that read() kicks off a _read() which creates a ReadReq operation + // // inolen: I thought read() in that case was a synchronous operation that just grabbed some amount of buffered data if it exists? + // // isaacs: it is. but it also triggers a _read() call, which calls readStart() on the handle + // // isaacs: do process.stdin.pause() and i'd think it'd probably close the pending call + // process.stdin.pause(); + // } + }, + register(dev, ops) { + TTY.ttys[dev] = { input: [], output: [], ops: ops }; + FS.registerDevice(dev, TTY.stream_ops); + }, + stream_ops:{ + open(stream) { + var tty = TTY.ttys[stream.node.rdev]; + if (!tty) { + throw new FS.ErrnoError(43); + } + stream.tty = tty; + stream.seekable = false; + }, + close(stream) { + // flush any pending line data + stream.tty.ops.fsync(stream.tty); + }, + fsync(stream) { + stream.tty.ops.fsync(stream.tty); + }, + read(stream, buffer, offset, length, pos /* ignored */) { + if (!stream.tty || !stream.tty.ops.get_char) { + throw new FS.ErrnoError(60); + } + var bytesRead = 0; + for (var i = 0; i < length; i++) { + var result; + try { + result = stream.tty.ops.get_char(stream.tty); + } catch (e) { + throw new FS.ErrnoError(29); + } + if (result === undefined && bytesRead === 0) { + throw new FS.ErrnoError(6); + } + if (result === null || result === undefined) break; + bytesRead++; + buffer[offset+i] = result; + } + if (bytesRead) { + stream.node.atime = Date.now(); + } + return bytesRead; + }, + write(stream, buffer, offset, length, pos) { + if (!stream.tty || !stream.tty.ops.put_char) { + throw new FS.ErrnoError(60); + } + try { + for (var i = 0; i < length; i++) { + stream.tty.ops.put_char(stream.tty, buffer[offset+i]); + } + } catch (e) { + throw new FS.ErrnoError(29); + } + if (length) { + stream.node.mtime = stream.node.ctime = Date.now(); + } + return i; + }, + }, + default_tty_ops:{ + get_char(tty) { + return FS_stdin_getChar(); + }, + put_char(tty, val) { + if (val === null || val === 10) { + out(UTF8ArrayToString(tty.output)); + tty.output = []; + } else { + if (val != 0) tty.output.push(val); // val == 0 would cut text output off in the middle. + } + }, + fsync(tty) { + if (tty.output?.length > 0) { + out(UTF8ArrayToString(tty.output)); + tty.output = []; + } + }, + ioctl_tcgets(tty) { + // typical setting + return { + c_iflag: 25856, + c_oflag: 5, + c_cflag: 191, + c_lflag: 35387, + c_cc: [ + 0x03, 0x1c, 0x7f, 0x15, 0x04, 0x00, 0x01, 0x00, 0x11, 0x13, 0x1a, 0x00, + 0x12, 0x0f, 0x17, 0x16, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + ] + }; + }, + ioctl_tcsets(tty, optional_actions, data) { + // currently just ignore + return 0; + }, + ioctl_tiocgwinsz(tty) { + return [24, 80]; + }, + }, + default_tty1_ops:{ + put_char(tty, val) { + if (val === null || val === 10) { + err(UTF8ArrayToString(tty.output)); + tty.output = []; + } else { + if (val != 0) tty.output.push(val); + } + }, + fsync(tty) { + if (tty.output?.length > 0) { + err(UTF8ArrayToString(tty.output)); + tty.output = []; + } + }, + }, + }; + + + var mmapAlloc = (size) => { + abort('internal error: mmapAlloc called but `emscripten_builtin_memalign` native symbol not exported'); + }; + var MEMFS = { + ops_table:null, + mount(mount) { + return MEMFS.createNode(null, '/', 16895, 0); + }, + createNode(parent, name, mode, dev) { + if (FS.isBlkdev(mode) || FS.isFIFO(mode)) { + // no supported + throw new FS.ErrnoError(63); + } + MEMFS.ops_table ||= { + dir: { + node: { + getattr: MEMFS.node_ops.getattr, + setattr: MEMFS.node_ops.setattr, + lookup: MEMFS.node_ops.lookup, + mknod: MEMFS.node_ops.mknod, + rename: MEMFS.node_ops.rename, + unlink: MEMFS.node_ops.unlink, + rmdir: MEMFS.node_ops.rmdir, + readdir: MEMFS.node_ops.readdir, + symlink: MEMFS.node_ops.symlink + }, + stream: { + llseek: MEMFS.stream_ops.llseek + } + }, + file: { + node: { + getattr: MEMFS.node_ops.getattr, + setattr: MEMFS.node_ops.setattr + }, + stream: { + llseek: MEMFS.stream_ops.llseek, + read: MEMFS.stream_ops.read, + write: MEMFS.stream_ops.write, + mmap: MEMFS.stream_ops.mmap, + msync: MEMFS.stream_ops.msync + } + }, + link: { + node: { + getattr: MEMFS.node_ops.getattr, + setattr: MEMFS.node_ops.setattr, + readlink: MEMFS.node_ops.readlink + }, + stream: {} + }, + chrdev: { + node: { + getattr: MEMFS.node_ops.getattr, + setattr: MEMFS.node_ops.setattr + }, + stream: FS.chrdev_stream_ops + } + }; + var node = FS.createNode(parent, name, mode, dev); + if (FS.isDir(node.mode)) { + node.node_ops = MEMFS.ops_table.dir.node; + node.stream_ops = MEMFS.ops_table.dir.stream; + node.contents = {}; + } else if (FS.isFile(node.mode)) { + node.node_ops = MEMFS.ops_table.file.node; + node.stream_ops = MEMFS.ops_table.file.stream; + node.usedBytes = 0; // The actual number of bytes used in the typed array, as opposed to contents.length which gives the whole capacity. + // When the byte data of the file is populated, this will point to either a typed array, or a normal JS array. Typed arrays are preferred + // for performance, and used by default. However, typed arrays are not resizable like normal JS arrays are, so there is a small disk size + // penalty involved for appending file writes that continuously grow a file similar to std::vector capacity vs used -scheme. + node.contents = null; + } else if (FS.isLink(node.mode)) { + node.node_ops = MEMFS.ops_table.link.node; + node.stream_ops = MEMFS.ops_table.link.stream; + } else if (FS.isChrdev(node.mode)) { + node.node_ops = MEMFS.ops_table.chrdev.node; + node.stream_ops = MEMFS.ops_table.chrdev.stream; + } + node.atime = node.mtime = node.ctime = Date.now(); + // add the new node to the parent + if (parent) { + parent.contents[name] = node; + parent.atime = parent.mtime = parent.ctime = node.atime; + } + return node; + }, + getFileDataAsTypedArray(node) { + if (!node.contents) return new Uint8Array(0); + if (node.contents.subarray) return node.contents.subarray(0, node.usedBytes); // Make sure to not return excess unused bytes. + return new Uint8Array(node.contents); + }, + expandFileStorage(node, newCapacity) { + var prevCapacity = node.contents ? node.contents.length : 0; + if (prevCapacity >= newCapacity) return; // No need to expand, the storage was already large enough. + // Don't expand strictly to the given requested limit if it's only a very small increase, but instead geometrically grow capacity. + // For small filesizes (<1MB), perform size*2 geometric increase, but for large sizes, do a much more conservative size*1.125 increase to + // avoid overshooting the allocation cap by a very large margin. + var CAPACITY_DOUBLING_MAX = 1024 * 1024; + newCapacity = Math.max(newCapacity, (prevCapacity * (prevCapacity < CAPACITY_DOUBLING_MAX ? 2.0 : 1.125)) >>> 0); + if (prevCapacity != 0) newCapacity = Math.max(newCapacity, 256); // At minimum allocate 256b for each file when expanding. + var oldContents = node.contents; + node.contents = new Uint8Array(newCapacity); // Allocate new storage. + if (node.usedBytes > 0) node.contents.set(oldContents.subarray(0, node.usedBytes), 0); // Copy old data over to the new storage. + }, + resizeFileStorage(node, newSize) { + if (node.usedBytes == newSize) return; + if (newSize == 0) { + node.contents = null; // Fully decommit when requesting a resize to zero. + node.usedBytes = 0; + } else { + var oldContents = node.contents; + node.contents = new Uint8Array(newSize); // Allocate new storage. + if (oldContents) { + node.contents.set(oldContents.subarray(0, Math.min(newSize, node.usedBytes))); // Copy old data over to the new storage. + } + node.usedBytes = newSize; + } + }, + node_ops:{ + getattr(node) { + var attr = {}; + // device numbers reuse inode numbers. + attr.dev = FS.isChrdev(node.mode) ? node.id : 1; + attr.ino = node.id; + attr.mode = node.mode; + attr.nlink = 1; + attr.uid = 0; + attr.gid = 0; + attr.rdev = node.rdev; + if (FS.isDir(node.mode)) { + attr.size = 4096; + } else if (FS.isFile(node.mode)) { + attr.size = node.usedBytes; + } else if (FS.isLink(node.mode)) { + attr.size = node.link.length; + } else { + attr.size = 0; + } + attr.atime = new Date(node.atime); + attr.mtime = new Date(node.mtime); + attr.ctime = new Date(node.ctime); + // NOTE: In our implementation, st_blocks = Math.ceil(st_size/st_blksize), + // but this is not required by the standard. + attr.blksize = 4096; + attr.blocks = Math.ceil(attr.size / attr.blksize); + return attr; + }, + setattr(node, attr) { + for (const key of ["mode", "atime", "mtime", "ctime"]) { + if (attr[key] != null) { + node[key] = attr[key]; + } + } + if (attr.size !== undefined) { + MEMFS.resizeFileStorage(node, attr.size); + } + }, + lookup(parent, name) { + throw new FS.ErrnoError(44); + }, + mknod(parent, name, mode, dev) { + return MEMFS.createNode(parent, name, mode, dev); + }, + rename(old_node, new_dir, new_name) { + var new_node; + try { + new_node = FS.lookupNode(new_dir, new_name); + } catch (e) {} + if (new_node) { + if (FS.isDir(old_node.mode)) { + // if we're overwriting a directory at new_name, make sure it's empty. + for (var i in new_node.contents) { + throw new FS.ErrnoError(55); + } + } + FS.hashRemoveNode(new_node); + } + // do the internal rewiring + delete old_node.parent.contents[old_node.name]; + new_dir.contents[new_name] = old_node; + old_node.name = new_name; + new_dir.ctime = new_dir.mtime = old_node.parent.ctime = old_node.parent.mtime = Date.now(); + }, + unlink(parent, name) { + delete parent.contents[name]; + parent.ctime = parent.mtime = Date.now(); + }, + rmdir(parent, name) { + var node = FS.lookupNode(parent, name); + for (var i in node.contents) { + throw new FS.ErrnoError(55); + } + delete parent.contents[name]; + parent.ctime = parent.mtime = Date.now(); + }, + readdir(node) { + return ['.', '..', ...Object.keys(node.contents)]; + }, + symlink(parent, newname, oldpath) { + var node = MEMFS.createNode(parent, newname, 0o777 | 40960, 0); + node.link = oldpath; + return node; + }, + readlink(node) { + if (!FS.isLink(node.mode)) { + throw new FS.ErrnoError(28); + } + return node.link; + }, + }, + stream_ops:{ + read(stream, buffer, offset, length, position) { + var contents = stream.node.contents; + if (position >= stream.node.usedBytes) return 0; + var size = Math.min(stream.node.usedBytes - position, length); + assert(size >= 0); + if (size > 8 && contents.subarray) { // non-trivial, and typed array + buffer.set(contents.subarray(position, position + size), offset); + } else { + for (var i = 0; i < size; i++) buffer[offset + i] = contents[position + i]; + } + return size; + }, + write(stream, buffer, offset, length, position, canOwn) { + // The data buffer should be a typed array view + assert(!(buffer instanceof ArrayBuffer)); + + if (!length) return 0; + var node = stream.node; + node.mtime = node.ctime = Date.now(); + + if (buffer.subarray && (!node.contents || node.contents.subarray)) { // This write is from a typed array to a typed array? + if (canOwn) { + assert(position === 0, 'canOwn must imply no weird position inside the file'); + node.contents = buffer.subarray(offset, offset + length); + node.usedBytes = length; + return length; + } else if (node.usedBytes === 0 && position === 0) { // If this is a simple first write to an empty file, do a fast set since we don't need to care about old data. + node.contents = buffer.slice(offset, offset + length); + node.usedBytes = length; + return length; + } else if (position + length <= node.usedBytes) { // Writing to an already allocated and used subrange of the file? + node.contents.set(buffer.subarray(offset, offset + length), position); + return length; + } + } + + // Appending to an existing file and we need to reallocate, or source data did not come as a typed array. + MEMFS.expandFileStorage(node, position+length); + if (node.contents.subarray && buffer.subarray) { + // Use typed array write which is available. + node.contents.set(buffer.subarray(offset, offset + length), position); + } else { + for (var i = 0; i < length; i++) { + node.contents[position + i] = buffer[offset + i]; // Or fall back to manual write if not. + } + } + node.usedBytes = Math.max(node.usedBytes, position + length); + return length; + }, + llseek(stream, offset, whence) { + var position = offset; + if (whence === 1) { + position += stream.position; + } else if (whence === 2) { + if (FS.isFile(stream.node.mode)) { + position += stream.node.usedBytes; + } + } + if (position < 0) { + throw new FS.ErrnoError(28); + } + return position; + }, + mmap(stream, length, position, prot, flags) { + if (!FS.isFile(stream.node.mode)) { + throw new FS.ErrnoError(43); + } + var ptr; + var allocated; + var contents = stream.node.contents; + // Only make a new copy when MAP_PRIVATE is specified. + if (!(flags & 2) && contents && contents.buffer === HEAP8.buffer) { + // We can't emulate MAP_SHARED when the file is not backed by the + // buffer we're mapping to (e.g. the HEAP buffer). + allocated = false; + ptr = contents.byteOffset; + } else { + allocated = true; + ptr = mmapAlloc(length); + if (!ptr) { + throw new FS.ErrnoError(48); + } + if (contents) { + // Try to avoid unnecessary slices. + if (position > 0 || position + length < contents.length) { + if (contents.subarray) { + contents = contents.subarray(position, position + length); + } else { + contents = Array.prototype.slice.call(contents, position, position + length); + } + } + HEAP8.set(contents, ptr); + } + } + return { ptr, allocated }; + }, + msync(stream, buffer, offset, length, mmapFlags) { + MEMFS.stream_ops.write(stream, buffer, 0, length, offset, false); + // should we check if bytesWritten and length are the same? + return 0; + }, + }, + }; + + var asyncLoad = async (url) => { + var arrayBuffer = await readAsync(url); + assert(arrayBuffer, `Loading data file "${url}" failed (no arrayBuffer).`); + return new Uint8Array(arrayBuffer); + }; + + + var FS_createDataFile = (parent, name, fileData, canRead, canWrite, canOwn) => { + FS.createDataFile(parent, name, fileData, canRead, canWrite, canOwn); + }; + + var preloadPlugins = Module['preloadPlugins'] || []; + var FS_handledByPreloadPlugin = (byteArray, fullname, finish, onerror) => { + // Ensure plugins are ready. + if (typeof Browser != 'undefined') Browser.init(); + + var handled = false; + preloadPlugins.forEach((plugin) => { + if (handled) return; + if (plugin['canHandle'](fullname)) { + plugin['handle'](byteArray, fullname, finish, onerror); + handled = true; + } + }); + return handled; + }; + var FS_createPreloadedFile = (parent, name, url, canRead, canWrite, onload, onerror, dontCreateFile, canOwn, preFinish) => { + // TODO we should allow people to just pass in a complete filename instead + // of parent and name being that we just join them anyways + var fullname = name ? PATH_FS.resolve(PATH.join2(parent, name)) : parent; + var dep = getUniqueRunDependency(`cp ${fullname}`); // might have several active requests for the same fullname + function processData(byteArray) { + function finish(byteArray) { + preFinish?.(); + if (!dontCreateFile) { + FS_createDataFile(parent, name, byteArray, canRead, canWrite, canOwn); + } + onload?.(); + removeRunDependency(dep); + } + if (FS_handledByPreloadPlugin(byteArray, fullname, finish, () => { + onerror?.(); + removeRunDependency(dep); + })) { + return; + } + finish(byteArray); + } + addRunDependency(dep); + if (typeof url == 'string') { + asyncLoad(url).then(processData, onerror); + } else { + processData(url); + } + }; + + var FS_modeStringToFlags = (str) => { + var flagModes = { + 'r': 0, + 'r+': 2, + 'w': 512 | 64 | 1, + 'w+': 512 | 64 | 2, + 'a': 1024 | 64 | 1, + 'a+': 1024 | 64 | 2, + }; + var flags = flagModes[str]; + if (typeof flags == 'undefined') { + throw new Error(`Unknown file open mode: ${str}`); + } + return flags; + }; + + var FS_getMode = (canRead, canWrite) => { + var mode = 0; + if (canRead) mode |= 292 | 73; + if (canWrite) mode |= 146; + return mode; + }; + + + + + + + /** + * Given a pointer 'ptr' to a null-terminated UTF8-encoded string in the + * emscripten HEAP, returns a copy of that string as a Javascript String object. + * + * @param {number} ptr + * @param {number=} maxBytesToRead - An optional length that specifies the + * maximum number of bytes to read. You can omit this parameter to scan the + * string until the first 0 byte. If maxBytesToRead is passed, and the string + * at [ptr, ptr+maxBytesToReadr[ contains a null byte in the middle, then the + * string will cut short at that byte index (i.e. maxBytesToRead will not + * produce a string of exact length [ptr, ptr+maxBytesToRead[) N.B. mixing + * frequent uses of UTF8ToString() with and without maxBytesToRead may throw + * JS JIT optimizations off, so it is worth to consider consistently using one + * @return {string} + */ + var UTF8ToString = (ptr, maxBytesToRead) => { + assert(typeof ptr == 'number', `UTF8ToString expects a number (got ${typeof ptr})`); + return ptr ? UTF8ArrayToString(HEAPU8, ptr, maxBytesToRead) : ''; + }; + + var strError = (errno) => UTF8ToString(_strerror(errno)); + + var ERRNO_CODES = { + 'EPERM': 63, + 'ENOENT': 44, + 'ESRCH': 71, + 'EINTR': 27, + 'EIO': 29, + 'ENXIO': 60, + 'E2BIG': 1, + 'ENOEXEC': 45, + 'EBADF': 8, + 'ECHILD': 12, + 'EAGAIN': 6, + 'EWOULDBLOCK': 6, + 'ENOMEM': 48, + 'EACCES': 2, + 'EFAULT': 21, + 'ENOTBLK': 105, + 'EBUSY': 10, + 'EEXIST': 20, + 'EXDEV': 75, + 'ENODEV': 43, + 'ENOTDIR': 54, + 'EISDIR': 31, + 'EINVAL': 28, + 'ENFILE': 41, + 'EMFILE': 33, + 'ENOTTY': 59, + 'ETXTBSY': 74, + 'EFBIG': 22, + 'ENOSPC': 51, + 'ESPIPE': 70, + 'EROFS': 69, + 'EMLINK': 34, + 'EPIPE': 64, + 'EDOM': 18, + 'ERANGE': 68, + 'ENOMSG': 49, + 'EIDRM': 24, + 'ECHRNG': 106, + 'EL2NSYNC': 156, + 'EL3HLT': 107, + 'EL3RST': 108, + 'ELNRNG': 109, + 'EUNATCH': 110, + 'ENOCSI': 111, + 'EL2HLT': 112, + 'EDEADLK': 16, + 'ENOLCK': 46, + 'EBADE': 113, + 'EBADR': 114, + 'EXFULL': 115, + 'ENOANO': 104, + 'EBADRQC': 103, + 'EBADSLT': 102, + 'EDEADLOCK': 16, + 'EBFONT': 101, + 'ENOSTR': 100, + 'ENODATA': 116, + 'ETIME': 117, + 'ENOSR': 118, + 'ENONET': 119, + 'ENOPKG': 120, + 'EREMOTE': 121, + 'ENOLINK': 47, + 'EADV': 122, + 'ESRMNT': 123, + 'ECOMM': 124, + 'EPROTO': 65, + 'EMULTIHOP': 36, + 'EDOTDOT': 125, + 'EBADMSG': 9, + 'ENOTUNIQ': 126, + 'EBADFD': 127, + 'EREMCHG': 128, + 'ELIBACC': 129, + 'ELIBBAD': 130, + 'ELIBSCN': 131, + 'ELIBMAX': 132, + 'ELIBEXEC': 133, + 'ENOSYS': 52, + 'ENOTEMPTY': 55, + 'ENAMETOOLONG': 37, + 'ELOOP': 32, + 'EOPNOTSUPP': 138, + 'EPFNOSUPPORT': 139, + 'ECONNRESET': 15, + 'ENOBUFS': 42, + 'EAFNOSUPPORT': 5, + 'EPROTOTYPE': 67, + 'ENOTSOCK': 57, + 'ENOPROTOOPT': 50, + 'ESHUTDOWN': 140, + 'ECONNREFUSED': 14, + 'EADDRINUSE': 3, + 'ECONNABORTED': 13, + 'ENETUNREACH': 40, + 'ENETDOWN': 38, + 'ETIMEDOUT': 73, + 'EHOSTDOWN': 142, + 'EHOSTUNREACH': 23, + 'EINPROGRESS': 26, + 'EALREADY': 7, + 'EDESTADDRREQ': 17, + 'EMSGSIZE': 35, + 'EPROTONOSUPPORT': 66, + 'ESOCKTNOSUPPORT': 137, + 'EADDRNOTAVAIL': 4, + 'ENETRESET': 39, + 'EISCONN': 30, + 'ENOTCONN': 53, + 'ETOOMANYREFS': 141, + 'EUSERS': 136, + 'EDQUOT': 19, + 'ESTALE': 72, + 'ENOTSUP': 138, + 'ENOMEDIUM': 148, + 'EILSEQ': 25, + 'EOVERFLOW': 61, + 'ECANCELED': 11, + 'ENOTRECOVERABLE': 56, + 'EOWNERDEAD': 62, + 'ESTRPIPE': 135, + }; + var FS = { + root:null, + mounts:[], + devices:{ + }, + streams:[], + nextInode:1, + nameTable:null, + currentPath:"/", + initialized:false, + ignorePermissions:true, + filesystems:null, + syncFSRequests:0, + readFiles:{ + }, + ErrnoError:class extends Error { + name = 'ErrnoError'; + // We set the `name` property to be able to identify `FS.ErrnoError` + // - the `name` is a standard ECMA-262 property of error objects. Kind of good to have it anyway. + // - when using PROXYFS, an error can come from an underlying FS + // as different FS objects have their own FS.ErrnoError each, + // the test `err instanceof FS.ErrnoError` won't detect an error coming from another filesystem, causing bugs. + // we'll use the reliable test `err.name == "ErrnoError"` instead + constructor(errno) { + super(runtimeInitialized ? strError(errno) : ''); + this.errno = errno; + for (var key in ERRNO_CODES) { + if (ERRNO_CODES[key] === errno) { + this.code = key; + break; + } + } + } + }, + FSStream:class { + shared = {}; + get object() { + return this.node; + } + set object(val) { + this.node = val; + } + get isRead() { + return (this.flags & 2097155) !== 1; + } + get isWrite() { + return (this.flags & 2097155) !== 0; + } + get isAppend() { + return (this.flags & 1024); + } + get flags() { + return this.shared.flags; + } + set flags(val) { + this.shared.flags = val; + } + get position() { + return this.shared.position; + } + set position(val) { + this.shared.position = val; + } + }, + FSNode:class { + node_ops = {}; + stream_ops = {}; + readMode = 292 | 73; + writeMode = 146; + mounted = null; + constructor(parent, name, mode, rdev) { + if (!parent) { + parent = this; // root node sets parent to itself + } + this.parent = parent; + this.mount = parent.mount; + this.id = FS.nextInode++; + this.name = name; + this.mode = mode; + this.rdev = rdev; + this.atime = this.mtime = this.ctime = Date.now(); + } + get read() { + return (this.mode & this.readMode) === this.readMode; + } + set read(val) { + val ? this.mode |= this.readMode : this.mode &= ~this.readMode; + } + get write() { + return (this.mode & this.writeMode) === this.writeMode; + } + set write(val) { + val ? this.mode |= this.writeMode : this.mode &= ~this.writeMode; + } + get isFolder() { + return FS.isDir(this.mode); + } + get isDevice() { + return FS.isChrdev(this.mode); + } + }, + lookupPath(path, opts = {}) { + if (!path) { + throw new FS.ErrnoError(44); + } + opts.follow_mount ??= true + + if (!PATH.isAbs(path)) { + path = FS.cwd() + '/' + path; + } + + // limit max consecutive symlinks to 40 (SYMLOOP_MAX). + linkloop: for (var nlinks = 0; nlinks < 40; nlinks++) { + // split the absolute path + var parts = path.split('/').filter((p) => !!p); + + // start at the root + var current = FS.root; + var current_path = '/'; + + for (var i = 0; i < parts.length; i++) { + var islast = (i === parts.length-1); + if (islast && opts.parent) { + // stop resolving + break; + } + + if (parts[i] === '.') { + continue; + } + + if (parts[i] === '..') { + current_path = PATH.dirname(current_path); + current = current.parent; + continue; + } + + current_path = PATH.join2(current_path, parts[i]); + try { + current = FS.lookupNode(current, parts[i]); + } catch (e) { + // if noent_okay is true, suppress a ENOENT in the last component + // and return an object with an undefined node. This is needed for + // resolving symlinks in the path when creating a file. + if ((e?.errno === 44) && islast && opts.noent_okay) { + return { path: current_path }; + } + throw e; + } + + // jump to the mount's root node if this is a mountpoint + if (FS.isMountpoint(current) && (!islast || opts.follow_mount)) { + current = current.mounted.root; + } + + // by default, lookupPath will not follow a symlink if it is the final path component. + // setting opts.follow = true will override this behavior. + if (FS.isLink(current.mode) && (!islast || opts.follow)) { + if (!current.node_ops.readlink) { + throw new FS.ErrnoError(52); + } + var link = current.node_ops.readlink(current); + if (!PATH.isAbs(link)) { + link = PATH.dirname(current_path) + '/' + link; + } + path = link + '/' + parts.slice(i + 1).join('/'); + continue linkloop; + } + } + return { path: current_path, node: current }; + } + throw new FS.ErrnoError(32); + }, + getPath(node) { + var path; + while (true) { + if (FS.isRoot(node)) { + var mount = node.mount.mountpoint; + if (!path) return mount; + return mount[mount.length-1] !== '/' ? `${mount}/${path}` : mount + path; + } + path = path ? `${node.name}/${path}` : node.name; + node = node.parent; + } + }, + hashName(parentid, name) { + var hash = 0; + + for (var i = 0; i < name.length; i++) { + hash = ((hash << 5) - hash + name.charCodeAt(i)) | 0; + } + return ((parentid + hash) >>> 0) % FS.nameTable.length; + }, + hashAddNode(node) { + var hash = FS.hashName(node.parent.id, node.name); + node.name_next = FS.nameTable[hash]; + FS.nameTable[hash] = node; + }, + hashRemoveNode(node) { + var hash = FS.hashName(node.parent.id, node.name); + if (FS.nameTable[hash] === node) { + FS.nameTable[hash] = node.name_next; + } else { + var current = FS.nameTable[hash]; + while (current) { + if (current.name_next === node) { + current.name_next = node.name_next; + break; + } + current = current.name_next; + } + } + }, + lookupNode(parent, name) { + var errCode = FS.mayLookup(parent); + if (errCode) { + throw new FS.ErrnoError(errCode); + } + var hash = FS.hashName(parent.id, name); + for (var node = FS.nameTable[hash]; node; node = node.name_next) { + var nodeName = node.name; + if (node.parent.id === parent.id && nodeName === name) { + return node; + } + } + // if we failed to find it in the cache, call into the VFS + return FS.lookup(parent, name); + }, + createNode(parent, name, mode, rdev) { + assert(typeof parent == 'object') + var node = new FS.FSNode(parent, name, mode, rdev); + + FS.hashAddNode(node); + + return node; + }, + destroyNode(node) { + FS.hashRemoveNode(node); + }, + isRoot(node) { + return node === node.parent; + }, + isMountpoint(node) { + return !!node.mounted; + }, + isFile(mode) { + return (mode & 61440) === 32768; + }, + isDir(mode) { + return (mode & 61440) === 16384; + }, + isLink(mode) { + return (mode & 61440) === 40960; + }, + isChrdev(mode) { + return (mode & 61440) === 8192; + }, + isBlkdev(mode) { + return (mode & 61440) === 24576; + }, + isFIFO(mode) { + return (mode & 61440) === 4096; + }, + isSocket(mode) { + return (mode & 49152) === 49152; + }, + flagsToPermissionString(flag) { + var perms = ['r', 'w', 'rw'][flag & 3]; + if ((flag & 512)) { + perms += 'w'; + } + return perms; + }, + nodePermissions(node, perms) { + if (FS.ignorePermissions) { + return 0; + } + // return 0 if any user, group or owner bits are set. + if (perms.includes('r') && !(node.mode & 292)) { + return 2; + } else if (perms.includes('w') && !(node.mode & 146)) { + return 2; + } else if (perms.includes('x') && !(node.mode & 73)) { + return 2; + } + return 0; + }, + mayLookup(dir) { + if (!FS.isDir(dir.mode)) return 54; + var errCode = FS.nodePermissions(dir, 'x'); + if (errCode) return errCode; + if (!dir.node_ops.lookup) return 2; + return 0; + }, + mayCreate(dir, name) { + if (!FS.isDir(dir.mode)) { + return 54; + } + try { + var node = FS.lookupNode(dir, name); + return 20; + } catch (e) { + } + return FS.nodePermissions(dir, 'wx'); + }, + mayDelete(dir, name, isdir) { + var node; + try { + node = FS.lookupNode(dir, name); + } catch (e) { + return e.errno; + } + var errCode = FS.nodePermissions(dir, 'wx'); + if (errCode) { + return errCode; + } + if (isdir) { + if (!FS.isDir(node.mode)) { + return 54; + } + if (FS.isRoot(node) || FS.getPath(node) === FS.cwd()) { + return 10; + } + } else { + if (FS.isDir(node.mode)) { + return 31; + } + } + return 0; + }, + mayOpen(node, flags) { + if (!node) { + return 44; + } + if (FS.isLink(node.mode)) { + return 32; + } else if (FS.isDir(node.mode)) { + if (FS.flagsToPermissionString(flags) !== 'r' // opening for write + || (flags & (512 | 64))) { // TODO: check for O_SEARCH? (== search for dir only) + return 31; + } + } + return FS.nodePermissions(node, FS.flagsToPermissionString(flags)); + }, + checkOpExists(op, err) { + if (!op) { + throw new FS.ErrnoError(err); + } + return op; + }, + MAX_OPEN_FDS:4096, + nextfd() { + for (var fd = 0; fd <= FS.MAX_OPEN_FDS; fd++) { + if (!FS.streams[fd]) { + return fd; + } + } + throw new FS.ErrnoError(33); + }, + getStreamChecked(fd) { + var stream = FS.getStream(fd); + if (!stream) { + throw new FS.ErrnoError(8); + } + return stream; + }, + getStream:(fd) => FS.streams[fd], + createStream(stream, fd = -1) { + assert(fd >= -1); + + // clone it, so we can return an instance of FSStream + stream = Object.assign(new FS.FSStream(), stream); + if (fd == -1) { + fd = FS.nextfd(); + } + stream.fd = fd; + FS.streams[fd] = stream; + return stream; + }, + closeStream(fd) { + FS.streams[fd] = null; + }, + dupStream(origStream, fd = -1) { + var stream = FS.createStream(origStream, fd); + stream.stream_ops?.dup?.(stream); + return stream; + }, + doSetAttr(stream, node, attr) { + var setattr = stream?.stream_ops.setattr; + var arg = setattr ? stream : node; + setattr ??= node.node_ops.setattr; + FS.checkOpExists(setattr, 63) + setattr(arg, attr); + }, + chrdev_stream_ops:{ + open(stream) { + var device = FS.getDevice(stream.node.rdev); + // override node's stream ops with the device's + stream.stream_ops = device.stream_ops; + // forward the open call + stream.stream_ops.open?.(stream); + }, + llseek() { + throw new FS.ErrnoError(70); + }, + }, + major:(dev) => ((dev) >> 8), + minor:(dev) => ((dev) & 0xff), + makedev:(ma, mi) => ((ma) << 8 | (mi)), + registerDevice(dev, ops) { + FS.devices[dev] = { stream_ops: ops }; + }, + getDevice:(dev) => FS.devices[dev], + getMounts(mount) { + var mounts = []; + var check = [mount]; + + while (check.length) { + var m = check.pop(); + + mounts.push(m); + + check.push(...m.mounts); + } + + return mounts; + }, + syncfs(populate, callback) { + if (typeof populate == 'function') { + callback = populate; + populate = false; + } + + FS.syncFSRequests++; + + if (FS.syncFSRequests > 1) { + err(`warning: ${FS.syncFSRequests} FS.syncfs operations in flight at once, probably just doing extra work`); + } + + var mounts = FS.getMounts(FS.root.mount); + var completed = 0; + + function doCallback(errCode) { + assert(FS.syncFSRequests > 0); + FS.syncFSRequests--; + return callback(errCode); + } + + function done(errCode) { + if (errCode) { + if (!done.errored) { + done.errored = true; + return doCallback(errCode); + } + return; + } + if (++completed >= mounts.length) { + doCallback(null); + } + }; + + // sync all mounts + mounts.forEach((mount) => { + if (!mount.type.syncfs) { + return done(null); + } + mount.type.syncfs(mount, populate, done); + }); + }, + mount(type, opts, mountpoint) { + if (typeof type == 'string') { + // The filesystem was not included, and instead we have an error + // message stored in the variable. + throw type; + } + var root = mountpoint === '/'; + var pseudo = !mountpoint; + var node; + + if (root && FS.root) { + throw new FS.ErrnoError(10); + } else if (!root && !pseudo) { + var lookup = FS.lookupPath(mountpoint, { follow_mount: false }); + + mountpoint = lookup.path; // use the absolute path + node = lookup.node; + + if (FS.isMountpoint(node)) { + throw new FS.ErrnoError(10); + } + + if (!FS.isDir(node.mode)) { + throw new FS.ErrnoError(54); + } + } + + var mount = { + type, + opts, + mountpoint, + mounts: [] + }; + + // create a root node for the fs + var mountRoot = type.mount(mount); + mountRoot.mount = mount; + mount.root = mountRoot; + + if (root) { + FS.root = mountRoot; + } else if (node) { + // set as a mountpoint + node.mounted = mount; + + // add the new mount to the current mount's children + if (node.mount) { + node.mount.mounts.push(mount); + } + } + + return mountRoot; + }, + unmount(mountpoint) { + var lookup = FS.lookupPath(mountpoint, { follow_mount: false }); + + if (!FS.isMountpoint(lookup.node)) { + throw new FS.ErrnoError(28); + } + + // destroy the nodes for this mount, and all its child mounts + var node = lookup.node; + var mount = node.mounted; + var mounts = FS.getMounts(mount); + + Object.keys(FS.nameTable).forEach((hash) => { + var current = FS.nameTable[hash]; + + while (current) { + var next = current.name_next; + + if (mounts.includes(current.mount)) { + FS.destroyNode(current); + } + + current = next; + } + }); + + // no longer a mountpoint + node.mounted = null; + + // remove this mount from the child mounts + var idx = node.mount.mounts.indexOf(mount); + assert(idx !== -1); + node.mount.mounts.splice(idx, 1); + }, + lookup(parent, name) { + return parent.node_ops.lookup(parent, name); + }, + mknod(path, mode, dev) { + var lookup = FS.lookupPath(path, { parent: true }); + var parent = lookup.node; + var name = PATH.basename(path); + if (!name) { + throw new FS.ErrnoError(28); + } + if (name === '.' || name === '..') { + throw new FS.ErrnoError(20); + } + var errCode = FS.mayCreate(parent, name); + if (errCode) { + throw new FS.ErrnoError(errCode); + } + if (!parent.node_ops.mknod) { + throw new FS.ErrnoError(63); + } + return parent.node_ops.mknod(parent, name, mode, dev); + }, + statfs(path) { + return FS.statfsNode(FS.lookupPath(path, {follow: true}).node); + }, + statfsStream(stream) { + // We keep a separate statfsStream function because noderawfs overrides + // it. In noderawfs, stream.node is sometimes null. Instead, we need to + // look at stream.path. + return FS.statfsNode(stream.node); + }, + statfsNode(node) { + // NOTE: None of the defaults here are true. We're just returning safe and + // sane values. Currently nodefs and rawfs replace these defaults, + // other file systems leave them alone. + var rtn = { + bsize: 4096, + frsize: 4096, + blocks: 1e6, + bfree: 5e5, + bavail: 5e5, + files: FS.nextInode, + ffree: FS.nextInode - 1, + fsid: 42, + flags: 2, + namelen: 255, + }; + + if (node.node_ops.statfs) { + Object.assign(rtn, node.node_ops.statfs(node.mount.opts.root)); + } + return rtn; + }, + create(path, mode = 0o666) { + mode &= 4095; + mode |= 32768; + return FS.mknod(path, mode, 0); + }, + mkdir(path, mode = 0o777) { + mode &= 511 | 512; + mode |= 16384; + return FS.mknod(path, mode, 0); + }, + mkdirTree(path, mode) { + var dirs = path.split('/'); + var d = ''; + for (var dir of dirs) { + if (!dir) continue; + if (d || PATH.isAbs(path)) d += '/'; + d += dir; + try { + FS.mkdir(d, mode); + } catch(e) { + if (e.errno != 20) throw e; + } + } + }, + mkdev(path, mode, dev) { + if (typeof dev == 'undefined') { + dev = mode; + mode = 0o666; + } + mode |= 8192; + return FS.mknod(path, mode, dev); + }, + symlink(oldpath, newpath) { + if (!PATH_FS.resolve(oldpath)) { + throw new FS.ErrnoError(44); + } + var lookup = FS.lookupPath(newpath, { parent: true }); + var parent = lookup.node; + if (!parent) { + throw new FS.ErrnoError(44); + } + var newname = PATH.basename(newpath); + var errCode = FS.mayCreate(parent, newname); + if (errCode) { + throw new FS.ErrnoError(errCode); + } + if (!parent.node_ops.symlink) { + throw new FS.ErrnoError(63); + } + return parent.node_ops.symlink(parent, newname, oldpath); + }, + rename(old_path, new_path) { + var old_dirname = PATH.dirname(old_path); + var new_dirname = PATH.dirname(new_path); + var old_name = PATH.basename(old_path); + var new_name = PATH.basename(new_path); + // parents must exist + var lookup, old_dir, new_dir; + + // let the errors from non existent directories percolate up + lookup = FS.lookupPath(old_path, { parent: true }); + old_dir = lookup.node; + lookup = FS.lookupPath(new_path, { parent: true }); + new_dir = lookup.node; + + if (!old_dir || !new_dir) throw new FS.ErrnoError(44); + // need to be part of the same mount + if (old_dir.mount !== new_dir.mount) { + throw new FS.ErrnoError(75); + } + // source must exist + var old_node = FS.lookupNode(old_dir, old_name); + // old path should not be an ancestor of the new path + var relative = PATH_FS.relative(old_path, new_dirname); + if (relative.charAt(0) !== '.') { + throw new FS.ErrnoError(28); + } + // new path should not be an ancestor of the old path + relative = PATH_FS.relative(new_path, old_dirname); + if (relative.charAt(0) !== '.') { + throw new FS.ErrnoError(55); + } + // see if the new path already exists + var new_node; + try { + new_node = FS.lookupNode(new_dir, new_name); + } catch (e) { + // not fatal + } + // early out if nothing needs to change + if (old_node === new_node) { + return; + } + // we'll need to delete the old entry + var isdir = FS.isDir(old_node.mode); + var errCode = FS.mayDelete(old_dir, old_name, isdir); + if (errCode) { + throw new FS.ErrnoError(errCode); + } + // need delete permissions if we'll be overwriting. + // need create permissions if new doesn't already exist. + errCode = new_node ? + FS.mayDelete(new_dir, new_name, isdir) : + FS.mayCreate(new_dir, new_name); + if (errCode) { + throw new FS.ErrnoError(errCode); + } + if (!old_dir.node_ops.rename) { + throw new FS.ErrnoError(63); + } + if (FS.isMountpoint(old_node) || (new_node && FS.isMountpoint(new_node))) { + throw new FS.ErrnoError(10); + } + // if we are going to change the parent, check write permissions + if (new_dir !== old_dir) { + errCode = FS.nodePermissions(old_dir, 'w'); + if (errCode) { + throw new FS.ErrnoError(errCode); + } + } + // remove the node from the lookup hash + FS.hashRemoveNode(old_node); + // do the underlying fs rename + try { + old_dir.node_ops.rename(old_node, new_dir, new_name); + // update old node (we do this here to avoid each backend + // needing to) + old_node.parent = new_dir; + } catch (e) { + throw e; + } finally { + // add the node back to the hash (in case node_ops.rename + // changed its name) + FS.hashAddNode(old_node); + } + }, + rmdir(path) { + var lookup = FS.lookupPath(path, { parent: true }); + var parent = lookup.node; + var name = PATH.basename(path); + var node = FS.lookupNode(parent, name); + var errCode = FS.mayDelete(parent, name, true); + if (errCode) { + throw new FS.ErrnoError(errCode); + } + if (!parent.node_ops.rmdir) { + throw new FS.ErrnoError(63); + } + if (FS.isMountpoint(node)) { + throw new FS.ErrnoError(10); + } + parent.node_ops.rmdir(parent, name); + FS.destroyNode(node); + }, + readdir(path) { + var lookup = FS.lookupPath(path, { follow: true }); + var node = lookup.node; + var readdir = FS.checkOpExists(node.node_ops.readdir, 54); + return readdir(node); + }, + unlink(path) { + var lookup = FS.lookupPath(path, { parent: true }); + var parent = lookup.node; + if (!parent) { + throw new FS.ErrnoError(44); + } + var name = PATH.basename(path); + var node = FS.lookupNode(parent, name); + var errCode = FS.mayDelete(parent, name, false); + if (errCode) { + // According to POSIX, we should map EISDIR to EPERM, but + // we instead do what Linux does (and we must, as we use + // the musl linux libc). + throw new FS.ErrnoError(errCode); + } + if (!parent.node_ops.unlink) { + throw new FS.ErrnoError(63); + } + if (FS.isMountpoint(node)) { + throw new FS.ErrnoError(10); + } + parent.node_ops.unlink(parent, name); + FS.destroyNode(node); + }, + readlink(path) { + var lookup = FS.lookupPath(path); + var link = lookup.node; + if (!link) { + throw new FS.ErrnoError(44); + } + if (!link.node_ops.readlink) { + throw new FS.ErrnoError(28); + } + return link.node_ops.readlink(link); + }, + stat(path, dontFollow) { + var lookup = FS.lookupPath(path, { follow: !dontFollow }); + var node = lookup.node; + var getattr = FS.checkOpExists(node.node_ops.getattr, 63); + return getattr(node); + }, + fstat(fd) { + var stream = FS.getStreamChecked(fd); + var node = stream.node; + var getattr = stream.stream_ops.getattr; + var arg = getattr ? stream : node; + getattr ??= node.node_ops.getattr; + FS.checkOpExists(getattr, 63) + return getattr(arg); + }, + lstat(path) { + return FS.stat(path, true); + }, + doChmod(stream, node, mode, dontFollow) { + FS.doSetAttr(stream, node, { + mode: (mode & 4095) | (node.mode & ~4095), + ctime: Date.now(), + dontFollow + }); + }, + chmod(path, mode, dontFollow) { + var node; + if (typeof path == 'string') { + var lookup = FS.lookupPath(path, { follow: !dontFollow }); + node = lookup.node; + } else { + node = path; + } + FS.doChmod(null, node, mode, dontFollow); + }, + lchmod(path, mode) { + FS.chmod(path, mode, true); + }, + fchmod(fd, mode) { + var stream = FS.getStreamChecked(fd); + FS.doChmod(stream, stream.node, mode, false); + }, + doChown(stream, node, dontFollow) { + FS.doSetAttr(stream, node, { + timestamp: Date.now(), + dontFollow + // we ignore the uid / gid for now + }); + }, + chown(path, uid, gid, dontFollow) { + var node; + if (typeof path == 'string') { + var lookup = FS.lookupPath(path, { follow: !dontFollow }); + node = lookup.node; + } else { + node = path; + } + FS.doChown(null, node, dontFollow); + }, + lchown(path, uid, gid) { + FS.chown(path, uid, gid, true); + }, + fchown(fd, uid, gid) { + var stream = FS.getStreamChecked(fd); + FS.doChown(stream, stream.node, false); + }, + doTruncate(stream, node, len) { + if (FS.isDir(node.mode)) { + throw new FS.ErrnoError(31); + } + if (!FS.isFile(node.mode)) { + throw new FS.ErrnoError(28); + } + var errCode = FS.nodePermissions(node, 'w'); + if (errCode) { + throw new FS.ErrnoError(errCode); + } + FS.doSetAttr(stream, node, { + size: len, + timestamp: Date.now() + }); + }, + truncate(path, len) { + if (len < 0) { + throw new FS.ErrnoError(28); + } + var node; + if (typeof path == 'string') { + var lookup = FS.lookupPath(path, { follow: true }); + node = lookup.node; + } else { + node = path; + } + FS.doTruncate(null, node, len); + }, + ftruncate(fd, len) { + var stream = FS.getStreamChecked(fd); + if (len < 0 || (stream.flags & 2097155) === 0) { + throw new FS.ErrnoError(28); + } + FS.doTruncate(stream, stream.node, len); + }, + utime(path, atime, mtime) { + var lookup = FS.lookupPath(path, { follow: true }); + var node = lookup.node; + var setattr = FS.checkOpExists(node.node_ops.setattr, 63); + setattr(node, { + atime: atime, + mtime: mtime + }); + }, + open(path, flags, mode = 0o666) { + if (path === "") { + throw new FS.ErrnoError(44); + } + flags = typeof flags == 'string' ? FS_modeStringToFlags(flags) : flags; + if ((flags & 64)) { + mode = (mode & 4095) | 32768; + } else { + mode = 0; + } + var node; + var isDirPath; + if (typeof path == 'object') { + node = path; + } else { + isDirPath = path.endsWith("/"); + // noent_okay makes it so that if the final component of the path + // doesn't exist, lookupPath returns `node: undefined`. `path` will be + // updated to point to the target of all symlinks. + var lookup = FS.lookupPath(path, { + follow: !(flags & 131072), + noent_okay: true + }); + node = lookup.node; + path = lookup.path; + } + // perhaps we need to create the node + var created = false; + if ((flags & 64)) { + if (node) { + // if O_CREAT and O_EXCL are set, error out if the node already exists + if ((flags & 128)) { + throw new FS.ErrnoError(20); + } + } else if (isDirPath) { + throw new FS.ErrnoError(31); + } else { + // node doesn't exist, try to create it + // Ignore the permission bits here to ensure we can `open` this new + // file below. We use chmod below the apply the permissions once the + // file is open. + node = FS.mknod(path, mode | 0o777, 0); + created = true; + } + } + if (!node) { + throw new FS.ErrnoError(44); + } + // can't truncate a device + if (FS.isChrdev(node.mode)) { + flags &= ~512; + } + // if asked only for a directory, then this must be one + if ((flags & 65536) && !FS.isDir(node.mode)) { + throw new FS.ErrnoError(54); + } + // check permissions, if this is not a file we just created now (it is ok to + // create and write to a file with read-only permissions; it is read-only + // for later use) + if (!created) { + var errCode = FS.mayOpen(node, flags); + if (errCode) { + throw new FS.ErrnoError(errCode); + } + } + // do truncation if necessary + if ((flags & 512) && !created) { + FS.truncate(node, 0); + } + // we've already handled these, don't pass down to the underlying vfs + flags &= ~(128 | 512 | 131072); + + // register the stream with the filesystem + var stream = FS.createStream({ + node, + path: FS.getPath(node), // we want the absolute path to the node + flags, + seekable: true, + position: 0, + stream_ops: node.stream_ops, + // used by the file family libc calls (fopen, fwrite, ferror, etc.) + ungotten: [], + error: false + }); + // call the new stream's open function + if (stream.stream_ops.open) { + stream.stream_ops.open(stream); + } + if (created) { + FS.chmod(node, mode & 0o777); + } + if (Module['logReadFiles'] && !(flags & 1)) { + if (!(path in FS.readFiles)) { + FS.readFiles[path] = 1; + } + } + return stream; + }, + close(stream) { + if (FS.isClosed(stream)) { + throw new FS.ErrnoError(8); + } + if (stream.getdents) stream.getdents = null; // free readdir state + try { + if (stream.stream_ops.close) { + stream.stream_ops.close(stream); + } + } catch (e) { + throw e; + } finally { + FS.closeStream(stream.fd); + } + stream.fd = null; + }, + isClosed(stream) { + return stream.fd === null; + }, + llseek(stream, offset, whence) { + if (FS.isClosed(stream)) { + throw new FS.ErrnoError(8); + } + if (!stream.seekable || !stream.stream_ops.llseek) { + throw new FS.ErrnoError(70); + } + if (whence != 0 && whence != 1 && whence != 2) { + throw new FS.ErrnoError(28); + } + stream.position = stream.stream_ops.llseek(stream, offset, whence); + stream.ungotten = []; + return stream.position; + }, + read(stream, buffer, offset, length, position) { + assert(offset >= 0); + if (length < 0 || position < 0) { + throw new FS.ErrnoError(28); + } + if (FS.isClosed(stream)) { + throw new FS.ErrnoError(8); + } + if ((stream.flags & 2097155) === 1) { + throw new FS.ErrnoError(8); + } + if (FS.isDir(stream.node.mode)) { + throw new FS.ErrnoError(31); + } + if (!stream.stream_ops.read) { + throw new FS.ErrnoError(28); + } + var seeking = typeof position != 'undefined'; + if (!seeking) { + position = stream.position; + } else if (!stream.seekable) { + throw new FS.ErrnoError(70); + } + var bytesRead = stream.stream_ops.read(stream, buffer, offset, length, position); + if (!seeking) stream.position += bytesRead; + return bytesRead; + }, + write(stream, buffer, offset, length, position, canOwn) { + assert(offset >= 0); + if (length < 0 || position < 0) { + throw new FS.ErrnoError(28); + } + if (FS.isClosed(stream)) { + throw new FS.ErrnoError(8); + } + if ((stream.flags & 2097155) === 0) { + throw new FS.ErrnoError(8); + } + if (FS.isDir(stream.node.mode)) { + throw new FS.ErrnoError(31); + } + if (!stream.stream_ops.write) { + throw new FS.ErrnoError(28); + } + if (stream.seekable && stream.flags & 1024) { + // seek to the end before writing in append mode + FS.llseek(stream, 0, 2); + } + var seeking = typeof position != 'undefined'; + if (!seeking) { + position = stream.position; + } else if (!stream.seekable) { + throw new FS.ErrnoError(70); + } + var bytesWritten = stream.stream_ops.write(stream, buffer, offset, length, position, canOwn); + if (!seeking) stream.position += bytesWritten; + return bytesWritten; + }, + mmap(stream, length, position, prot, flags) { + // User requests writing to file (prot & PROT_WRITE != 0). + // Checking if we have permissions to write to the file unless + // MAP_PRIVATE flag is set. According to POSIX spec it is possible + // to write to file opened in read-only mode with MAP_PRIVATE flag, + // as all modifications will be visible only in the memory of + // the current process. + if ((prot & 2) !== 0 + && (flags & 2) === 0 + && (stream.flags & 2097155) !== 2) { + throw new FS.ErrnoError(2); + } + if ((stream.flags & 2097155) === 1) { + throw new FS.ErrnoError(2); + } + if (!stream.stream_ops.mmap) { + throw new FS.ErrnoError(43); + } + if (!length) { + throw new FS.ErrnoError(28); + } + return stream.stream_ops.mmap(stream, length, position, prot, flags); + }, + msync(stream, buffer, offset, length, mmapFlags) { + assert(offset >= 0); + if (!stream.stream_ops.msync) { + return 0; + } + return stream.stream_ops.msync(stream, buffer, offset, length, mmapFlags); + }, + ioctl(stream, cmd, arg) { + if (!stream.stream_ops.ioctl) { + throw new FS.ErrnoError(59); + } + return stream.stream_ops.ioctl(stream, cmd, arg); + }, + readFile(path, opts = {}) { + opts.flags = opts.flags || 0; + opts.encoding = opts.encoding || 'binary'; + if (opts.encoding !== 'utf8' && opts.encoding !== 'binary') { + throw new Error(`Invalid encoding type "${opts.encoding}"`); + } + var ret; + var stream = FS.open(path, opts.flags); + var stat = FS.stat(path); + var length = stat.size; + var buf = new Uint8Array(length); + FS.read(stream, buf, 0, length, 0); + if (opts.encoding === 'utf8') { + ret = UTF8ArrayToString(buf); + } else if (opts.encoding === 'binary') { + ret = buf; + } + FS.close(stream); + return ret; + }, + writeFile(path, data, opts = {}) { + opts.flags = opts.flags || 577; + var stream = FS.open(path, opts.flags, opts.mode); + if (typeof data == 'string') { + var buf = new Uint8Array(lengthBytesUTF8(data)+1); + var actualNumBytes = stringToUTF8Array(data, buf, 0, buf.length); + FS.write(stream, buf, 0, actualNumBytes, undefined, opts.canOwn); + } else if (ArrayBuffer.isView(data)) { + FS.write(stream, data, 0, data.byteLength, undefined, opts.canOwn); + } else { + throw new Error('Unsupported data type'); + } + FS.close(stream); + }, + cwd:() => FS.currentPath, + chdir(path) { + var lookup = FS.lookupPath(path, { follow: true }); + if (lookup.node === null) { + throw new FS.ErrnoError(44); + } + if (!FS.isDir(lookup.node.mode)) { + throw new FS.ErrnoError(54); + } + var errCode = FS.nodePermissions(lookup.node, 'x'); + if (errCode) { + throw new FS.ErrnoError(errCode); + } + FS.currentPath = lookup.path; + }, + createDefaultDirectories() { + FS.mkdir('/tmp'); + FS.mkdir('/home'); + FS.mkdir('/home/web_user'); + }, + createDefaultDevices() { + // create /dev + FS.mkdir('/dev'); + // setup /dev/null + FS.registerDevice(FS.makedev(1, 3), { + read: () => 0, + write: (stream, buffer, offset, length, pos) => length, + llseek: () => 0, + }); + FS.mkdev('/dev/null', FS.makedev(1, 3)); + // setup /dev/tty and /dev/tty1 + // stderr needs to print output using err() rather than out() + // so we register a second tty just for it. + TTY.register(FS.makedev(5, 0), TTY.default_tty_ops); + TTY.register(FS.makedev(6, 0), TTY.default_tty1_ops); + FS.mkdev('/dev/tty', FS.makedev(5, 0)); + FS.mkdev('/dev/tty1', FS.makedev(6, 0)); + // setup /dev/[u]random + // use a buffer to avoid overhead of individual crypto calls per byte + var randomBuffer = new Uint8Array(1024), randomLeft = 0; + var randomByte = () => { + if (randomLeft === 0) { + randomFill(randomBuffer); + randomLeft = randomBuffer.byteLength; + } + return randomBuffer[--randomLeft]; + }; + FS.createDevice('/dev', 'random', randomByte); + FS.createDevice('/dev', 'urandom', randomByte); + // we're not going to emulate the actual shm device, + // just create the tmp dirs that reside in it commonly + FS.mkdir('/dev/shm'); + FS.mkdir('/dev/shm/tmp'); + }, + createSpecialDirectories() { + // create /proc/self/fd which allows /proc/self/fd/6 => readlink gives the + // name of the stream for fd 6 (see test_unistd_ttyname) + FS.mkdir('/proc'); + var proc_self = FS.mkdir('/proc/self'); + FS.mkdir('/proc/self/fd'); + FS.mount({ + mount() { + var node = FS.createNode(proc_self, 'fd', 16895, 73); + node.stream_ops = { + llseek: MEMFS.stream_ops.llseek, + }; + node.node_ops = { + lookup(parent, name) { + var fd = +name; + var stream = FS.getStreamChecked(fd); + var ret = { + parent: null, + mount: { mountpoint: 'fake' }, + node_ops: { readlink: () => stream.path }, + id: fd + 1, + }; + ret.parent = ret; // make it look like a simple root node + return ret; + }, + readdir() { + return Array.from(FS.streams.entries()) + .filter(([k, v]) => v) + .map(([k, v]) => k.toString()); + } + }; + return node; + } + }, {}, '/proc/self/fd'); + }, + createStandardStreams(input, output, error) { + // TODO deprecate the old functionality of a single + // input / output callback and that utilizes FS.createDevice + // and instead require a unique set of stream ops + + // by default, we symlink the standard streams to the + // default tty devices. however, if the standard streams + // have been overwritten we create a unique device for + // them instead. + if (input) { + FS.createDevice('/dev', 'stdin', input); + } else { + FS.symlink('/dev/tty', '/dev/stdin'); + } + if (output) { + FS.createDevice('/dev', 'stdout', null, output); + } else { + FS.symlink('/dev/tty', '/dev/stdout'); + } + if (error) { + FS.createDevice('/dev', 'stderr', null, error); + } else { + FS.symlink('/dev/tty1', '/dev/stderr'); + } + + // open default streams for the stdin, stdout and stderr devices + var stdin = FS.open('/dev/stdin', 0); + var stdout = FS.open('/dev/stdout', 1); + var stderr = FS.open('/dev/stderr', 1); + assert(stdin.fd === 0, `invalid handle for stdin (${stdin.fd})`); + assert(stdout.fd === 1, `invalid handle for stdout (${stdout.fd})`); + assert(stderr.fd === 2, `invalid handle for stderr (${stderr.fd})`); + }, + staticInit() { + FS.nameTable = new Array(4096); + + FS.mount(MEMFS, {}, '/'); + + FS.createDefaultDirectories(); + FS.createDefaultDevices(); + FS.createSpecialDirectories(); + + FS.filesystems = { + 'MEMFS': MEMFS, + }; + }, + init(input, output, error) { + assert(!FS.initialized, 'FS.init was previously called. If you want to initialize later with custom parameters, remove any earlier calls (note that one is automatically added to the generated code)'); + FS.initialized = true; + + // Allow Module.stdin etc. to provide defaults, if none explicitly passed to us here + input ??= Module['stdin']; + output ??= Module['stdout']; + error ??= Module['stderr']; + + FS.createStandardStreams(input, output, error); + }, + quit() { + FS.initialized = false; + // force-flush all streams, so we get musl std streams printed out + _fflush(0); + // close all of our streams + for (var stream of FS.streams) { + if (stream) { + FS.close(stream); + } + } + }, + findObject(path, dontResolveLastLink) { + var ret = FS.analyzePath(path, dontResolveLastLink); + if (!ret.exists) { + return null; + } + return ret.object; + }, + analyzePath(path, dontResolveLastLink) { + // operate from within the context of the symlink's target + try { + var lookup = FS.lookupPath(path, { follow: !dontResolveLastLink }); + path = lookup.path; + } catch (e) { + } + var ret = { + isRoot: false, exists: false, error: 0, name: null, path: null, object: null, + parentExists: false, parentPath: null, parentObject: null + }; + try { + var lookup = FS.lookupPath(path, { parent: true }); + ret.parentExists = true; + ret.parentPath = lookup.path; + ret.parentObject = lookup.node; + ret.name = PATH.basename(path); + lookup = FS.lookupPath(path, { follow: !dontResolveLastLink }); + ret.exists = true; + ret.path = lookup.path; + ret.object = lookup.node; + ret.name = lookup.node.name; + ret.isRoot = lookup.path === '/'; + } catch (e) { + ret.error = e.errno; + }; + return ret; + }, + createPath(parent, path, canRead, canWrite) { + parent = typeof parent == 'string' ? parent : FS.getPath(parent); + var parts = path.split('/').reverse(); + while (parts.length) { + var part = parts.pop(); + if (!part) continue; + var current = PATH.join2(parent, part); + try { + FS.mkdir(current); + } catch (e) { + if (e.errno != 20) throw e; + } + parent = current; + } + return current; + }, + createFile(parent, name, properties, canRead, canWrite) { + var path = PATH.join2(typeof parent == 'string' ? parent : FS.getPath(parent), name); + var mode = FS_getMode(canRead, canWrite); + return FS.create(path, mode); + }, + createDataFile(parent, name, data, canRead, canWrite, canOwn) { + var path = name; + if (parent) { + parent = typeof parent == 'string' ? parent : FS.getPath(parent); + path = name ? PATH.join2(parent, name) : parent; + } + var mode = FS_getMode(canRead, canWrite); + var node = FS.create(path, mode); + if (data) { + if (typeof data == 'string') { + var arr = new Array(data.length); + for (var i = 0, len = data.length; i < len; ++i) arr[i] = data.charCodeAt(i); + data = arr; + } + // make sure we can write to the file + FS.chmod(node, mode | 146); + var stream = FS.open(node, 577); + FS.write(stream, data, 0, data.length, 0, canOwn); + FS.close(stream); + FS.chmod(node, mode); + } + }, + createDevice(parent, name, input, output) { + var path = PATH.join2(typeof parent == 'string' ? parent : FS.getPath(parent), name); + var mode = FS_getMode(!!input, !!output); + FS.createDevice.major ??= 64; + var dev = FS.makedev(FS.createDevice.major++, 0); + // Create a fake device that a set of stream ops to emulate + // the old behavior. + FS.registerDevice(dev, { + open(stream) { + stream.seekable = false; + }, + close(stream) { + // flush any pending line data + if (output?.buffer?.length) { + output(10); + } + }, + read(stream, buffer, offset, length, pos /* ignored */) { + var bytesRead = 0; + for (var i = 0; i < length; i++) { + var result; + try { + result = input(); + } catch (e) { + throw new FS.ErrnoError(29); + } + if (result === undefined && bytesRead === 0) { + throw new FS.ErrnoError(6); + } + if (result === null || result === undefined) break; + bytesRead++; + buffer[offset+i] = result; + } + if (bytesRead) { + stream.node.atime = Date.now(); + } + return bytesRead; + }, + write(stream, buffer, offset, length, pos) { + for (var i = 0; i < length; i++) { + try { + output(buffer[offset+i]); + } catch (e) { + throw new FS.ErrnoError(29); + } + } + if (length) { + stream.node.mtime = stream.node.ctime = Date.now(); + } + return i; + } + }); + return FS.mkdev(path, mode, dev); + }, + forceLoadFile(obj) { + if (obj.isDevice || obj.isFolder || obj.link || obj.contents) return true; + if (typeof XMLHttpRequest != 'undefined') { + throw new Error("Lazy loading should have been performed (contents set) in createLazyFile, but it was not. Lazy loading only works in web workers. Use --embed-file or --preload-file in emcc on the main thread."); + } else { // Command-line. + try { + obj.contents = readBinary(obj.url); + obj.usedBytes = obj.contents.length; + } catch (e) { + throw new FS.ErrnoError(29); + } + } + }, + createLazyFile(parent, name, url, canRead, canWrite) { + // Lazy chunked Uint8Array (implements get and length from Uint8Array). + // Actual getting is abstracted away for eventual reuse. + class LazyUint8Array { + lengthKnown = false; + chunks = []; // Loaded chunks. Index is the chunk number + get(idx) { + if (idx > this.length-1 || idx < 0) { + return undefined; + } + var chunkOffset = idx % this.chunkSize; + var chunkNum = (idx / this.chunkSize)|0; + return this.getter(chunkNum)[chunkOffset]; + } + setDataGetter(getter) { + this.getter = getter; + } + cacheLength() { + // Find length + var xhr = new XMLHttpRequest(); + xhr.open('HEAD', url, false); + xhr.send(null); + if (!(xhr.status >= 200 && xhr.status < 300 || xhr.status === 304)) throw new Error("Couldn't load " + url + ". Status: " + xhr.status); + var datalength = Number(xhr.getResponseHeader("Content-length")); + var header; + var hasByteServing = (header = xhr.getResponseHeader("Accept-Ranges")) && header === "bytes"; + var usesGzip = (header = xhr.getResponseHeader("Content-Encoding")) && header === "gzip"; + + var chunkSize = 1024*1024; // Chunk size in bytes + + if (!hasByteServing) chunkSize = datalength; + + // Function to get a range from the remote URL. + var doXHR = (from, to) => { + if (from > to) throw new Error("invalid range (" + from + ", " + to + ") or no bytes requested!"); + if (to > datalength-1) throw new Error("only " + datalength + " bytes available! programmer error!"); + + // TODO: Use mozResponseArrayBuffer, responseStream, etc. if available. + var xhr = new XMLHttpRequest(); + xhr.open('GET', url, false); + if (datalength !== chunkSize) xhr.setRequestHeader("Range", "bytes=" + from + "-" + to); + + // Some hints to the browser that we want binary data. + xhr.responseType = 'arraybuffer'; + if (xhr.overrideMimeType) { + xhr.overrideMimeType('text/plain; charset=x-user-defined'); + } + + xhr.send(null); + if (!(xhr.status >= 200 && xhr.status < 300 || xhr.status === 304)) throw new Error("Couldn't load " + url + ". Status: " + xhr.status); + if (xhr.response !== undefined) { + return new Uint8Array(/** @type{Array} */(xhr.response || [])); + } + return intArrayFromString(xhr.responseText || '', true); + }; + var lazyArray = this; + lazyArray.setDataGetter((chunkNum) => { + var start = chunkNum * chunkSize; + var end = (chunkNum+1) * chunkSize - 1; // including this byte + end = Math.min(end, datalength-1); // if datalength-1 is selected, this is the last block + if (typeof lazyArray.chunks[chunkNum] == 'undefined') { + lazyArray.chunks[chunkNum] = doXHR(start, end); + } + if (typeof lazyArray.chunks[chunkNum] == 'undefined') throw new Error('doXHR failed!'); + return lazyArray.chunks[chunkNum]; + }); + + if (usesGzip || !datalength) { + // if the server uses gzip or doesn't supply the length, we have to download the whole file to get the (uncompressed) length + chunkSize = datalength = 1; // this will force getter(0)/doXHR do download the whole file + datalength = this.getter(0).length; + chunkSize = datalength; + out("LazyFiles on gzip forces download of the whole file when length is accessed"); + } + + this._length = datalength; + this._chunkSize = chunkSize; + this.lengthKnown = true; + } + get length() { + if (!this.lengthKnown) { + this.cacheLength(); + } + return this._length; + } + get chunkSize() { + if (!this.lengthKnown) { + this.cacheLength(); + } + return this._chunkSize; + } + } + + if (typeof XMLHttpRequest != 'undefined') { + if (!ENVIRONMENT_IS_WORKER) throw 'Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc'; + var lazyArray = new LazyUint8Array(); + var properties = { isDevice: false, contents: lazyArray }; + } else { + var properties = { isDevice: false, url: url }; + } + + var node = FS.createFile(parent, name, properties, canRead, canWrite); + // This is a total hack, but I want to get this lazy file code out of the + // core of MEMFS. If we want to keep this lazy file concept I feel it should + // be its own thin LAZYFS proxying calls to MEMFS. + if (properties.contents) { + node.contents = properties.contents; + } else if (properties.url) { + node.contents = null; + node.url = properties.url; + } + // Add a function that defers querying the file size until it is asked the first time. + Object.defineProperties(node, { + usedBytes: { + get: function() { return this.contents.length; } + } + }); + // override each stream op with one that tries to force load the lazy file first + var stream_ops = {}; + var keys = Object.keys(node.stream_ops); + keys.forEach((key) => { + var fn = node.stream_ops[key]; + stream_ops[key] = (...args) => { + FS.forceLoadFile(node); + return fn(...args); + }; + }); + function writeChunks(stream, buffer, offset, length, position) { + var contents = stream.node.contents; + if (position >= contents.length) + return 0; + var size = Math.min(contents.length - position, length); + assert(size >= 0); + if (contents.slice) { // normal array + for (var i = 0; i < size; i++) { + buffer[offset + i] = contents[position + i]; + } + } else { + for (var i = 0; i < size; i++) { // LazyUint8Array from sync binary XHR + buffer[offset + i] = contents.get(position + i); + } + } + return size; + } + // use a custom read function + stream_ops.read = (stream, buffer, offset, length, position) => { + FS.forceLoadFile(node); + return writeChunks(stream, buffer, offset, length, position) + }; + // use a custom mmap function + stream_ops.mmap = (stream, length, position, prot, flags) => { + FS.forceLoadFile(node); + var ptr = mmapAlloc(length); + if (!ptr) { + throw new FS.ErrnoError(48); + } + writeChunks(stream, HEAP8, ptr, length, position); + return { ptr, allocated: true }; + }; + node.stream_ops = stream_ops; + return node; + }, + absolutePath() { + abort('FS.absolutePath has been removed; use PATH_FS.resolve instead'); + }, + createFolder() { + abort('FS.createFolder has been removed; use FS.mkdir instead'); + }, + createLink() { + abort('FS.createLink has been removed; use FS.symlink instead'); + }, + joinPath() { + abort('FS.joinPath has been removed; use PATH.join instead'); + }, + mmapAlloc() { + abort('FS.mmapAlloc has been replaced by the top level function mmapAlloc'); + }, + standardizePath() { + abort('FS.standardizePath has been removed; use PATH.normalize instead'); + }, + }; + + var SYSCALLS = { + DEFAULT_POLLMASK:5, + calculateAt(dirfd, path, allowEmpty) { + if (PATH.isAbs(path)) { + return path; + } + // relative path + var dir; + if (dirfd === -100) { + dir = FS.cwd(); + } else { + var dirstream = SYSCALLS.getStreamFromFD(dirfd); + dir = dirstream.path; + } + if (path.length == 0) { + if (!allowEmpty) { + throw new FS.ErrnoError(44);; + } + return dir; + } + return dir + '/' + path; + }, + writeStat(buf, stat) { + HEAP32[((buf)>>2)] = stat.dev; + HEAP32[(((buf)+(4))>>2)] = stat.mode; + HEAPU32[(((buf)+(8))>>2)] = stat.nlink; + HEAP32[(((buf)+(12))>>2)] = stat.uid; + HEAP32[(((buf)+(16))>>2)] = stat.gid; + HEAP32[(((buf)+(20))>>2)] = stat.rdev; + HEAP64[(((buf)+(24))>>3)] = BigInt(stat.size); + HEAP32[(((buf)+(32))>>2)] = 4096; + HEAP32[(((buf)+(36))>>2)] = stat.blocks; + var atime = stat.atime.getTime(); + var mtime = stat.mtime.getTime(); + var ctime = stat.ctime.getTime(); + HEAP64[(((buf)+(40))>>3)] = BigInt(Math.floor(atime / 1000)); + HEAPU32[(((buf)+(48))>>2)] = (atime % 1000) * 1000 * 1000; + HEAP64[(((buf)+(56))>>3)] = BigInt(Math.floor(mtime / 1000)); + HEAPU32[(((buf)+(64))>>2)] = (mtime % 1000) * 1000 * 1000; + HEAP64[(((buf)+(72))>>3)] = BigInt(Math.floor(ctime / 1000)); + HEAPU32[(((buf)+(80))>>2)] = (ctime % 1000) * 1000 * 1000; + HEAP64[(((buf)+(88))>>3)] = BigInt(stat.ino); + return 0; + }, + writeStatFs(buf, stats) { + HEAP32[(((buf)+(4))>>2)] = stats.bsize; + HEAP32[(((buf)+(40))>>2)] = stats.bsize; + HEAP32[(((buf)+(8))>>2)] = stats.blocks; + HEAP32[(((buf)+(12))>>2)] = stats.bfree; + HEAP32[(((buf)+(16))>>2)] = stats.bavail; + HEAP32[(((buf)+(20))>>2)] = stats.files; + HEAP32[(((buf)+(24))>>2)] = stats.ffree; + HEAP32[(((buf)+(28))>>2)] = stats.fsid; + HEAP32[(((buf)+(44))>>2)] = stats.flags; // ST_NOSUID + HEAP32[(((buf)+(36))>>2)] = stats.namelen; + }, + doMsync(addr, stream, len, flags, offset) { + if (!FS.isFile(stream.node.mode)) { + throw new FS.ErrnoError(43); + } + if (flags & 2) { + // MAP_PRIVATE calls need not to be synced back to underlying fs + return 0; + } + var buffer = HEAPU8.slice(addr, addr + len); + FS.msync(stream, buffer, offset, len, flags); + }, + getStreamFromFD(fd) { + var stream = FS.getStreamChecked(fd); + return stream; + }, + varargs:undefined, + getStr(ptr) { + var ret = UTF8ToString(ptr); + return ret; + }, + }; + function ___syscall_openat(dirfd, path, flags, varargs) { + SYSCALLS.varargs = varargs; + try { + + path = SYSCALLS.getStr(path); + path = SYSCALLS.calculateAt(dirfd, path); + var mode = varargs ? syscallGetVarargI() : 0; + return FS.open(path, flags, mode).fd; + } catch (e) { + if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + return -e.errno; + } + } + + var __abort_js = () => + abort('native code called abort()'); + + var abortOnCannotGrowMemory = (requestedSize) => { + abort(`Cannot enlarge memory arrays to size ${requestedSize} bytes (OOM). Either (1) compile with -sINITIAL_MEMORY=X with X higher than the current value ${HEAP8.length}, (2) compile with -sALLOW_MEMORY_GROWTH which allows increasing the size at runtime, or (3) if you want malloc to return NULL (0) instead of this abort, compile with -sABORTING_MALLOC=0`); + }; + var _emscripten_resize_heap = (requestedSize) => { + var oldSize = HEAPU8.length; + // With CAN_ADDRESS_2GB or MEMORY64, pointers are already unsigned. + requestedSize >>>= 0; + abortOnCannotGrowMemory(requestedSize); + }; + + + var runtimeKeepaliveCounter = 0; + var keepRuntimeAlive = () => noExitRuntime || runtimeKeepaliveCounter > 0; + var _proc_exit = (code) => { + EXITSTATUS = code; + if (!keepRuntimeAlive()) { + Module['onExit']?.(code); + ABORT = true; + } + quit_(code, new ExitStatus(code)); + }; + + + /** @suppress {duplicate } */ + /** @param {boolean|number=} implicit */ + var exitJS = (status, implicit) => { + EXITSTATUS = status; + + checkUnflushedContent(); + + // if exit() was called explicitly, warn the user if the runtime isn't actually being shut down + if (keepRuntimeAlive() && !implicit) { + var msg = `program exited (with status: ${status}), but keepRuntimeAlive() is set (counter=${runtimeKeepaliveCounter}) due to an async operation, so halting execution but not exiting the runtime or preventing further async execution (you can use emscripten_force_exit, if you want to force a true shutdown)`; + err(msg); + } + + _proc_exit(status); + }; + var _exit = exitJS; + + function _fd_close(fd) { + try { + + var stream = SYSCALLS.getStreamFromFD(fd); + FS.close(stream); + return 0; + } catch (e) { + if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + return e.errno; + } + } + + /** @param {number=} offset */ + var doReadv = (stream, iov, iovcnt, offset) => { + var ret = 0; + for (var i = 0; i < iovcnt; i++) { + var ptr = HEAPU32[((iov)>>2)]; + var len = HEAPU32[(((iov)+(4))>>2)]; + iov += 8; + var curr = FS.read(stream, HEAP8, ptr, len, offset); + if (curr < 0) return -1; + ret += curr; + if (curr < len) break; // nothing more to read + if (typeof offset != 'undefined') { + offset += curr; + } + } + return ret; + }; + + function _fd_read(fd, iov, iovcnt, pnum) { + try { + + var stream = SYSCALLS.getStreamFromFD(fd); + var num = doReadv(stream, iov, iovcnt); + HEAPU32[((pnum)>>2)] = num; + return 0; + } catch (e) { + if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + return e.errno; + } + } + + + var INT53_MAX = 9007199254740992; + + var INT53_MIN = -9007199254740992; + var bigintToI53Checked = (num) => (num < INT53_MIN || num > INT53_MAX) ? NaN : Number(num); + function _fd_seek(fd, offset, whence, newOffset) { + offset = bigintToI53Checked(offset); + + + try { + + if (isNaN(offset)) return 61; + var stream = SYSCALLS.getStreamFromFD(fd); + FS.llseek(stream, offset, whence); + HEAP64[((newOffset)>>3)] = BigInt(stream.position); + if (stream.getdents && offset === 0 && whence === 0) stream.getdents = null; // reset readdir state + return 0; + } catch (e) { + if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + return e.errno; + } + ; + } + + /** @param {number=} offset */ + var doWritev = (stream, iov, iovcnt, offset) => { + var ret = 0; + for (var i = 0; i < iovcnt; i++) { + var ptr = HEAPU32[((iov)>>2)]; + var len = HEAPU32[(((iov)+(4))>>2)]; + iov += 8; + var curr = FS.write(stream, HEAP8, ptr, len, offset); + if (curr < 0) return -1; + ret += curr; + if (curr < len) { + // No more space to write. + break; + } + if (typeof offset != 'undefined') { + offset += curr; + } + } + return ret; + }; + + function _fd_write(fd, iov, iovcnt, pnum) { + try { + + var stream = SYSCALLS.getStreamFromFD(fd); + var num = doWritev(stream, iov, iovcnt); + HEAPU32[((pnum)>>2)] = num; + return 0; + } catch (e) { + if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + return e.errno; + } + } + + + var handleException = (e) => { + // Certain exception types we do not treat as errors since they are used for + // internal control flow. + // 1. ExitStatus, which is thrown by exit() + // 2. "unwind", which is thrown by emscripten_unwind_to_js_event_loop() and others + // that wish to return to JS event loop. + if (e instanceof ExitStatus || e == 'unwind') { + return EXITSTATUS; + } + checkStackCookie(); + if (e instanceof WebAssembly.RuntimeError) { + if (_emscripten_stack_get_current() <= 0) { + err('Stack overflow detected. You can try increasing -sSTACK_SIZE (currently set to 65536)'); + } + } + quit_(1, e); + }; + + + var stringToUTF8 = (str, outPtr, maxBytesToWrite) => { + assert(typeof maxBytesToWrite == 'number', 'stringToUTF8(str, outPtr, maxBytesToWrite) is missing the third parameter that specifies the length of the output buffer!'); + return stringToUTF8Array(str, HEAPU8, outPtr, maxBytesToWrite); + }; + + var stackAlloc = (sz) => __emscripten_stack_alloc(sz); + var stringToUTF8OnStack = (str) => { + var size = lengthBytesUTF8(str) + 1; + var ret = stackAlloc(size); + stringToUTF8(str, ret, size); + return ret; + }; + + FS.createPreloadedFile = FS_createPreloadedFile; + FS.staticInit(); + // Set module methods based on EXPORTED_RUNTIME_METHODS + ; +// End JS library code + +function checkIncomingModuleAPI() { + ignoredModuleProp('fetchSettings'); +} +var wasmImports = { + /** @export */ + __syscall_openat: ___syscall_openat, + /** @export */ + _abort_js: __abort_js, + /** @export */ + emscripten_resize_heap: _emscripten_resize_heap, + /** @export */ + exit: _exit, + /** @export */ + fd_close: _fd_close, + /** @export */ + fd_read: _fd_read, + /** @export */ + fd_seek: _fd_seek, + /** @export */ + fd_write: _fd_write +}; +var wasmExports; +createWasm(); +var ___wasm_call_ctors = createExportWrapper('__wasm_call_ctors', 0); +var _main = Module['_main'] = createExportWrapper('__main_argc_argv', 2); +var _strerror = createExportWrapper('strerror', 1); +var _fflush = createExportWrapper('fflush', 1); +var _emscripten_stack_init = () => (_emscripten_stack_init = wasmExports['emscripten_stack_init'])(); +var _emscripten_stack_get_free = () => (_emscripten_stack_get_free = wasmExports['emscripten_stack_get_free'])(); +var _emscripten_stack_get_base = () => (_emscripten_stack_get_base = wasmExports['emscripten_stack_get_base'])(); +var _emscripten_stack_get_end = () => (_emscripten_stack_get_end = wasmExports['emscripten_stack_get_end'])(); +var __emscripten_stack_restore = (a0) => (__emscripten_stack_restore = wasmExports['_emscripten_stack_restore'])(a0); +var __emscripten_stack_alloc = (a0) => (__emscripten_stack_alloc = wasmExports['_emscripten_stack_alloc'])(a0); +var _emscripten_stack_get_current = () => (_emscripten_stack_get_current = wasmExports['emscripten_stack_get_current'])(); + + +// include: postamble.js +// === Auto-generated postamble setup entry stuff === + +var missingLibrarySymbols = [ + 'writeI53ToI64', + 'writeI53ToI64Clamped', + 'writeI53ToI64Signaling', + 'writeI53ToU64Clamped', + 'writeI53ToU64Signaling', + 'readI53FromI64', + 'readI53FromU64', + 'convertI32PairToI53', + 'convertI32PairToI53Checked', + 'convertU32PairToI53', + 'getTempRet0', + 'setTempRet0', + 'zeroMemory', + 'getHeapMax', + 'growMemory', + 'inetPton4', + 'inetNtop4', + 'inetPton6', + 'inetNtop6', + 'readSockaddr', + 'writeSockaddr', + 'emscriptenLog', + 'readEmAsmArgs', + 'jstoi_q', + 'getExecutableName', + 'listenOnce', + 'autoResumeAudioContext', + 'getDynCaller', + 'dynCall', + 'runtimeKeepalivePush', + 'runtimeKeepalivePop', + 'callUserCallback', + 'maybeExit', + 'asmjsMangle', + 'alignMemory', + 'HandleAllocator', + 'getNativeTypeSize', + 'addOnInit', + 'addOnPostCtor', + 'addOnPreMain', + 'addOnExit', + 'STACK_SIZE', + 'STACK_ALIGN', + 'POINTER_SIZE', + 'ASSERTIONS', + 'getCFunc', + 'ccall', + 'cwrap', + 'uleb128Encode', + 'sigToWasmTypes', + 'generateFuncType', + 'convertJsFunctionToWasm', + 'getEmptyTableSlot', + 'updateTableMap', + 'getFunctionAddress', + 'addFunction', + 'removeFunction', + 'reallyNegative', + 'unSign', + 'strLen', + 'reSign', + 'formatString', + 'intArrayToString', + 'AsciiToString', + 'stringToAscii', + 'UTF16ToString', + 'stringToUTF16', + 'lengthBytesUTF16', + 'UTF32ToString', + 'stringToUTF32', + 'lengthBytesUTF32', + 'stringToNewUTF8', + 'writeArrayToMemory', + 'registerKeyEventCallback', + 'maybeCStringToJsString', + 'findEventTarget', + 'getBoundingClientRect', + 'fillMouseEventData', + 'registerMouseEventCallback', + 'registerWheelEventCallback', + 'registerUiEventCallback', + 'registerFocusEventCallback', + 'fillDeviceOrientationEventData', + 'registerDeviceOrientationEventCallback', + 'fillDeviceMotionEventData', + 'registerDeviceMotionEventCallback', + 'screenOrientation', + 'fillOrientationChangeEventData', + 'registerOrientationChangeEventCallback', + 'fillFullscreenChangeEventData', + 'registerFullscreenChangeEventCallback', + 'JSEvents_requestFullscreen', + 'JSEvents_resizeCanvasForFullscreen', + 'registerRestoreOldStyle', + 'hideEverythingExceptGivenElement', + 'restoreHiddenElements', + 'setLetterbox', + 'softFullscreenResizeWebGLRenderTarget', + 'doRequestFullscreen', + 'fillPointerlockChangeEventData', + 'registerPointerlockChangeEventCallback', + 'registerPointerlockErrorEventCallback', + 'requestPointerLock', + 'fillVisibilityChangeEventData', + 'registerVisibilityChangeEventCallback', + 'registerTouchEventCallback', + 'fillGamepadEventData', + 'registerGamepadEventCallback', + 'registerBeforeUnloadEventCallback', + 'fillBatteryEventData', + 'battery', + 'registerBatteryEventCallback', + 'setCanvasElementSize', + 'getCanvasElementSize', + 'jsStackTrace', + 'getCallstack', + 'convertPCtoSourceLocation', + 'getEnvStrings', + 'checkWasiClock', + 'wasiRightsToMuslOFlags', + 'wasiOFlagsToMuslOFlags', + 'safeSetTimeout', + 'setImmediateWrapped', + 'safeRequestAnimationFrame', + 'clearImmediateWrapped', + 'registerPostMainLoop', + 'registerPreMainLoop', + 'getPromise', + 'makePromise', + 'idsToPromises', + 'makePromiseCallback', + 'ExceptionInfo', + 'findMatchingCatch', + 'Browser_asyncPrepareDataCounter', + 'isLeapYear', + 'ydayFromDate', + 'arraySum', + 'addDays', + 'getSocketFromFD', + 'getSocketAddress', + 'FS_unlink', + 'FS_mkdirTree', + '_setNetworkCallback', + 'heapObjectForWebGLType', + 'toTypedArrayIndex', + 'webgl_enable_ANGLE_instanced_arrays', + 'webgl_enable_OES_vertex_array_object', + 'webgl_enable_WEBGL_draw_buffers', + 'webgl_enable_WEBGL_multi_draw', + 'webgl_enable_EXT_polygon_offset_clamp', + 'webgl_enable_EXT_clip_control', + 'webgl_enable_WEBGL_polygon_mode', + 'emscriptenWebGLGet', + 'computeUnpackAlignedImageSize', + 'colorChannelsInGlTextureFormat', + 'emscriptenWebGLGetTexPixelData', + 'emscriptenWebGLGetUniform', + 'webglGetUniformLocation', + 'webglPrepareUniformLocationsBeforeFirstUse', + 'webglGetLeftBracePos', + 'emscriptenWebGLGetVertexAttrib', + '__glGetActiveAttribOrUniform', + 'writeGLArray', + 'registerWebGlEventCallback', + 'runAndAbortIfError', + 'ALLOC_NORMAL', + 'ALLOC_STACK', + 'allocate', + 'writeStringToMemory', + 'writeAsciiToMemory', + 'demangle', + 'stackTrace', +]; +missingLibrarySymbols.forEach(missingLibrarySymbol) + +var unexportedSymbols = [ + 'run', + 'addRunDependency', + 'removeRunDependency', + 'out', + 'err', + 'callMain', + 'abort', + 'wasmMemory', + 'wasmExports', + 'writeStackCookie', + 'checkStackCookie', + 'INT53_MAX', + 'INT53_MIN', + 'bigintToI53Checked', + 'stackSave', + 'stackRestore', + 'stackAlloc', + 'ptrToString', + 'exitJS', + 'abortOnCannotGrowMemory', + 'ENV', + 'ERRNO_CODES', + 'strError', + 'DNS', + 'Protocols', + 'Sockets', + 'timers', + 'warnOnce', + 'readEmAsmArgsArray', + 'jstoi_s', + 'handleException', + 'keepRuntimeAlive', + 'asyncLoad', + 'mmapAlloc', + 'wasmTable', + 'noExitRuntime', + 'addOnPreRun', + 'addOnPostRun', + 'freeTableIndexes', + 'functionsInTableMap', + 'setValue', + 'getValue', + 'PATH', + 'PATH_FS', + 'UTF8Decoder', + 'UTF8ArrayToString', + 'UTF8ToString', + 'stringToUTF8Array', + 'stringToUTF8', + 'lengthBytesUTF8', + 'intArrayFromString', + 'UTF16Decoder', + 'stringToUTF8OnStack', + 'JSEvents', + 'specialHTMLTargets', + 'findCanvasEventTarget', + 'currentFullscreenStrategy', + 'restoreOldWindowedStyle', + 'UNWIND_CACHE', + 'ExitStatus', + 'doReadv', + 'doWritev', + 'initRandomFill', + 'randomFill', + 'emSetImmediate', + 'emClearImmediate_deps', + 'emClearImmediate', + 'promiseMap', + 'uncaughtExceptionCount', + 'exceptionLast', + 'exceptionCaught', + 'Browser', + 'getPreloadedImageData__data', + 'wget', + 'MONTH_DAYS_REGULAR', + 'MONTH_DAYS_LEAP', + 'MONTH_DAYS_REGULAR_CUMULATIVE', + 'MONTH_DAYS_LEAP_CUMULATIVE', + 'SYSCALLS', + 'preloadPlugins', + 'FS_createPreloadedFile', + 'FS_modeStringToFlags', + 'FS_getMode', + 'FS_stdin_getChar_buffer', + 'FS_stdin_getChar', + 'FS_createPath', + 'FS_createDevice', + 'FS_readFile', + 'FS', + 'FS_createDataFile', + 'FS_createLazyFile', + 'MEMFS', + 'TTY', + 'PIPEFS', + 'SOCKFS', + 'tempFixedLengthArray', + 'miniTempWebGLFloatBuffers', + 'miniTempWebGLIntBuffers', + 'GL', + 'AL', + 'GLUT', + 'EGL', + 'GLEW', + 'IDBStore', + 'SDL', + 'SDL_gfx', + 'allocateUTF8', + 'allocateUTF8OnStack', + 'print', + 'printErr', +]; +unexportedSymbols.forEach(unexportedRuntimeSymbol); + + + +var calledRun; + +function callMain(args = []) { + assert(runDependencies == 0, 'cannot call main when async dependencies remain! (listen on Module["onRuntimeInitialized"])'); + assert(typeof onPreRuns === 'undefined' || onPreRuns.length == 0, 'cannot call main when preRun functions remain to be called'); + + var entryFunction = _main; + + args.unshift(thisProgram); + + var argc = args.length; + var argv = stackAlloc((argc + 1) * 4); + var argv_ptr = argv; + args.forEach((arg) => { + HEAPU32[((argv_ptr)>>2)] = stringToUTF8OnStack(arg); + argv_ptr += 4; + }); + HEAPU32[((argv_ptr)>>2)] = 0; + + try { + + var ret = entryFunction(argc, argv); + + // if we're not running an evented main loop, it's time to exit + exitJS(ret, /* implicit = */ true); + return ret; + } catch (e) { + return handleException(e); + } +} + +function stackCheckInit() { + // This is normally called automatically during __wasm_call_ctors but need to + // get these values before even running any of the ctors so we call it redundantly + // here. + _emscripten_stack_init(); + // TODO(sbc): Move writeStackCookie to native to to avoid this. + writeStackCookie(); +} + +function run(args = arguments_) { + + if (runDependencies > 0) { + dependenciesFulfilled = run; + return; + } + + stackCheckInit(); + + preRun(); + + // a preRun added a dependency, run will be called later + if (runDependencies > 0) { + dependenciesFulfilled = run; + return; + } + + function doRun() { + // run may have just been called through dependencies being fulfilled just in this very frame, + // or while the async setStatus time below was happening + assert(!calledRun); + calledRun = true; + Module['calledRun'] = true; + + if (ABORT) return; + + initRuntime(); + + preMain(); + + Module['onRuntimeInitialized']?.(); + consumedModuleProp('onRuntimeInitialized'); + + var noInitialRun = Module['noInitialRun'];legacyModuleProp('noInitialRun', 'noInitialRun'); + if (!noInitialRun) callMain(args); + + postRun(); + } + + if (Module['setStatus']) { + Module['setStatus']('Running...'); + setTimeout(() => { + setTimeout(() => Module['setStatus'](''), 1); + doRun(); + }, 1); + } else + { + doRun(); + } + checkStackCookie(); +} + +function checkUnflushedContent() { + // Compiler settings do not allow exiting the runtime, so flushing + // the streams is not possible. but in ASSERTIONS mode we check + // if there was something to flush, and if so tell the user they + // should request that the runtime be exitable. + // Normally we would not even include flush() at all, but in ASSERTIONS + // builds we do so just for this check, and here we see if there is any + // content to flush, that is, we check if there would have been + // something a non-ASSERTIONS build would have not seen. + // How we flush the streams depends on whether we are in SYSCALLS_REQUIRE_FILESYSTEM=0 + // mode (which has its own special function for this; otherwise, all + // the code is inside libc) + var oldOut = out; + var oldErr = err; + var has = false; + out = err = (x) => { + has = true; + } + try { // it doesn't matter if it fails + _fflush(0); + // also flush in the JS FS layer + ['stdout', 'stderr'].forEach((name) => { + var info = FS.analyzePath('/dev/' + name); + if (!info) return; + var stream = info.object; + var rdev = stream.rdev; + var tty = TTY.ttys[rdev]; + if (tty?.output?.length) { + has = true; + } + }); + } catch(e) {} + out = oldOut; + err = oldErr; + if (has) { + warnOnce('stdio streams had content in them that was not flushed. you should set EXIT_RUNTIME to 1 (see the Emscripten FAQ), or make sure to emit a newline when you printf etc.'); + } +} + +if (Module['preInit']) { + if (typeof Module['preInit'] == 'function') Module['preInit'] = [Module['preInit']]; + while (Module['preInit'].length > 0) { + Module['preInit'].pop()(); + } +} +consumedModuleProp('preInit'); + +run(); + +// end include: postamble.js + diff --git a/thirdparty/zlib-1.3.1/build-emcmake/example64.wasm b/thirdparty/zlib-1.3.1/build-emcmake/example64.wasm new file mode 100755 index 0000000000000000000000000000000000000000..b2d6fad00ee440a4811000ba57ae30496421995d GIT binary patch literal 222066 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¬Y|~ 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

    -#~NNiWJpS-ddY*(mKQ)etLQYjX2UB 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 literal 0 HcmV?d00001 diff --git a/thirdparty/zlib-1.3.1/build-emcmake/minigzip.js b/thirdparty/zlib-1.3.1/build-emcmake/minigzip.js new file mode 100644 index 0000000..23d73e5 --- /dev/null +++ b/thirdparty/zlib-1.3.1/build-emcmake/minigzip.js @@ -0,0 +1,4517 @@ +// include: shell.js +// The Module object: Our interface to the outside world. We import +// and export values on it. There are various ways Module can be used: +// 1. Not defined. We create it here +// 2. A function parameter, function(moduleArg) => Promise +// 3. pre-run appended it, var Module = {}; ..generated code.. +// 4. External script tag defines var Module. +// We need to check if Module already exists (e.g. case 3 above). +// Substitution will be replaced with actual code on later stage of the build, +// this way Closure Compiler will not mangle it (e.g. case 4. above). +// Note that if you want to run closure, and also to use Module +// after the generated code, you will need to define var Module = {}; +// before the code. Then that object will be used in the code, and you +// can continue to use Module afterwards as well. +var Module = typeof Module != 'undefined' ? Module : {}; + +// Determine the runtime environment we are in. You can customize this by +// setting the ENVIRONMENT setting at compile time (see settings.js). + +// Attempt to auto-detect the environment +var ENVIRONMENT_IS_WEB = typeof window == 'object'; +var ENVIRONMENT_IS_WORKER = typeof WorkerGlobalScope != 'undefined'; +// N.b. Electron.js environment is simultaneously a NODE-environment, but +// also a web environment. +var ENVIRONMENT_IS_NODE = typeof process == 'object' && typeof process.versions == 'object' && typeof process.versions.node == 'string' && process.type != 'renderer'; +var ENVIRONMENT_IS_SHELL = !ENVIRONMENT_IS_WEB && !ENVIRONMENT_IS_NODE && !ENVIRONMENT_IS_WORKER; + +if (ENVIRONMENT_IS_NODE) { + +} + +// --pre-jses are emitted after the Module integration code, so that they can +// refer to Module (if they choose; they can also define Module) + + +// Sometimes an existing Module object exists with properties +// meant to overwrite the default module functionality. Here +// we collect those properties and reapply _after_ we configure +// the current environment's defaults to avoid having to be so +// defensive during initialization. +var moduleOverrides = {...Module}; + +var arguments_ = []; +var thisProgram = './this.program'; +var quit_ = (status, toThrow) => { + throw toThrow; +}; + +// `/` should be present at the end if `scriptDirectory` is not empty +var scriptDirectory = ''; +function locateFile(path) { + if (Module['locateFile']) { + return Module['locateFile'](path, scriptDirectory); + } + return scriptDirectory + path; +} + +// Hooks that are implemented differently in different runtime environments. +var readAsync, readBinary; + +if (ENVIRONMENT_IS_NODE) { + if (typeof process == 'undefined' || !process.release || process.release.name !== 'node') throw new Error('not compiled for this environment (did you build to HTML and try to run it not on the web, or set ENVIRONMENT to something - like node - and run it someplace else - like on the web?)'); + + var nodeVersion = process.versions.node; + var numericVersion = nodeVersion.split('.').slice(0, 3); + numericVersion = (numericVersion[0] * 10000) + (numericVersion[1] * 100) + (numericVersion[2].split('-')[0] * 1); + var minVersion = 160000; + if (numericVersion < 160000) { + throw new Error('This emscripten-generated code requires node v16.0.0 (detected v' + nodeVersion + ')'); + } + + // These modules will usually be used on Node.js. Load them eagerly to avoid + // the complexity of lazy-loading. + var fs = require('fs'); + var nodePath = require('path'); + + scriptDirectory = __dirname + '/'; + +// include: node_shell_read.js +readBinary = (filename) => { + // We need to re-wrap `file://` strings to URLs. + filename = isFileURI(filename) ? new URL(filename) : filename; + var ret = fs.readFileSync(filename); + assert(Buffer.isBuffer(ret)); + return ret; +}; + +readAsync = async (filename, binary = true) => { + // See the comment in the `readBinary` function. + filename = isFileURI(filename) ? new URL(filename) : filename; + var ret = fs.readFileSync(filename, binary ? undefined : 'utf8'); + assert(binary ? Buffer.isBuffer(ret) : typeof ret == 'string'); + return ret; +}; +// end include: node_shell_read.js + if (!Module['thisProgram'] && process.argv.length > 1) { + thisProgram = process.argv[1].replace(/\\/g, '/'); + } + + arguments_ = process.argv.slice(2); + + if (typeof module != 'undefined') { + module['exports'] = Module; + } + + quit_ = (status, toThrow) => { + process.exitCode = status; + throw toThrow; + }; + +} else +if (ENVIRONMENT_IS_SHELL) { + + if ((typeof process == 'object' && typeof require === 'function') || typeof window == 'object' || typeof WorkerGlobalScope != 'undefined') throw new Error('not compiled for this environment (did you build to HTML and try to run it not on the web, or set ENVIRONMENT to something - like node - and run it someplace else - like on the web?)'); + +} else + +// Note that this includes Node.js workers when relevant (pthreads is enabled). +// Node.js workers are detected as a combination of ENVIRONMENT_IS_WORKER and +// ENVIRONMENT_IS_NODE. +if (ENVIRONMENT_IS_WEB || ENVIRONMENT_IS_WORKER) { + if (ENVIRONMENT_IS_WORKER) { // Check worker, not web, since window could be polyfilled + scriptDirectory = self.location.href; + } else if (typeof document != 'undefined' && document.currentScript) { // web + scriptDirectory = document.currentScript.src; + } + // blob urls look like blob:http://site.com/etc/etc and we cannot infer anything from them. + // otherwise, slice off the final part of the url to find the script directory. + // if scriptDirectory does not contain a slash, lastIndexOf will return -1, + // and scriptDirectory will correctly be replaced with an empty string. + // If scriptDirectory contains a query (starting with ?) or a fragment (starting with #), + // they are removed because they could contain a slash. + if (scriptDirectory.startsWith('blob:')) { + scriptDirectory = ''; + } else { + scriptDirectory = scriptDirectory.slice(0, scriptDirectory.replace(/[?#].*/, '').lastIndexOf('/')+1); + } + + if (!(typeof window == 'object' || typeof WorkerGlobalScope != 'undefined')) throw new Error('not compiled for this environment (did you build to HTML and try to run it not on the web, or set ENVIRONMENT to something - like node - and run it someplace else - like on the web?)'); + + { +// include: web_or_worker_shell_read.js +if (ENVIRONMENT_IS_WORKER) { + readBinary = (url) => { + var xhr = new XMLHttpRequest(); + xhr.open('GET', url, false); + xhr.responseType = 'arraybuffer'; + xhr.send(null); + return new Uint8Array(/** @type{!ArrayBuffer} */(xhr.response)); + }; + } + + readAsync = async (url) => { + // Fetch has some additional restrictions over XHR, like it can't be used on a file:// url. + // See https://github.com/github/fetch/pull/92#issuecomment-140665932 + // Cordova or Electron apps are typically loaded from a file:// url. + // So use XHR on webview if URL is a file URL. + if (isFileURI(url)) { + return new Promise((resolve, reject) => { + var xhr = new XMLHttpRequest(); + xhr.open('GET', url, true); + xhr.responseType = 'arraybuffer'; + xhr.onload = () => { + if (xhr.status == 200 || (xhr.status == 0 && xhr.response)) { // file URLs can return 0 + resolve(xhr.response); + return; + } + reject(xhr.status); + }; + xhr.onerror = reject; + xhr.send(null); + }); + } + var response = await fetch(url, { credentials: 'same-origin' }); + if (response.ok) { + return response.arrayBuffer(); + } + throw new Error(response.status + ' : ' + response.url); + }; +// end include: web_or_worker_shell_read.js + } +} else +{ + throw new Error('environment detection error'); +} + +var out = Module['print'] || console.log.bind(console); +var err = Module['printErr'] || console.error.bind(console); + +// Merge back in the overrides +Object.assign(Module, moduleOverrides); +// Free the object hierarchy contained in the overrides, this lets the GC +// reclaim data used. +moduleOverrides = null; +checkIncomingModuleAPI(); + +// Emit code to handle expected values on the Module object. This applies Module.x +// to the proper local x. This has two benefits: first, we only emit it if it is +// expected to arrive, and second, by using a local everywhere else that can be +// minified. + +if (Module['arguments']) arguments_ = Module['arguments'];legacyModuleProp('arguments', 'arguments_'); + +if (Module['thisProgram']) thisProgram = Module['thisProgram'];legacyModuleProp('thisProgram', 'thisProgram'); + +// perform assertions in shell.js after we set up out() and err(), as otherwise if an assertion fails it cannot print the message +// Assertions on removed incoming Module JS APIs. +assert(typeof Module['memoryInitializerPrefixURL'] == 'undefined', 'Module.memoryInitializerPrefixURL option was removed, use Module.locateFile instead'); +assert(typeof Module['pthreadMainPrefixURL'] == 'undefined', 'Module.pthreadMainPrefixURL option was removed, use Module.locateFile instead'); +assert(typeof Module['cdInitializerPrefixURL'] == 'undefined', 'Module.cdInitializerPrefixURL option was removed, use Module.locateFile instead'); +assert(typeof Module['filePackagePrefixURL'] == 'undefined', 'Module.filePackagePrefixURL option was removed, use Module.locateFile instead'); +assert(typeof Module['read'] == 'undefined', 'Module.read option was removed'); +assert(typeof Module['readAsync'] == 'undefined', 'Module.readAsync option was removed (modify readAsync in JS)'); +assert(typeof Module['readBinary'] == 'undefined', 'Module.readBinary option was removed (modify readBinary in JS)'); +assert(typeof Module['setWindowTitle'] == 'undefined', 'Module.setWindowTitle option was removed (modify emscripten_set_window_title in JS)'); +assert(typeof Module['TOTAL_MEMORY'] == 'undefined', 'Module.TOTAL_MEMORY has been renamed Module.INITIAL_MEMORY'); +legacyModuleProp('asm', 'wasmExports'); +legacyModuleProp('readAsync', 'readAsync'); +legacyModuleProp('readBinary', 'readBinary'); +legacyModuleProp('setWindowTitle', 'setWindowTitle'); +var IDBFS = 'IDBFS is no longer included by default; build with -lidbfs.js'; +var PROXYFS = 'PROXYFS is no longer included by default; build with -lproxyfs.js'; +var WORKERFS = 'WORKERFS is no longer included by default; build with -lworkerfs.js'; +var FETCHFS = 'FETCHFS is no longer included by default; build with -lfetchfs.js'; +var ICASEFS = 'ICASEFS is no longer included by default; build with -licasefs.js'; +var JSFILEFS = 'JSFILEFS is no longer included by default; build with -ljsfilefs.js'; +var OPFS = 'OPFS is no longer included by default; build with -lopfs.js'; + +var NODEFS = 'NODEFS is no longer included by default; build with -lnodefs.js'; + +assert(!ENVIRONMENT_IS_SHELL, 'shell environment detected but not enabled at build time. Add `shell` to `-sENVIRONMENT` to enable.'); + +// end include: shell.js + +// include: preamble.js +// === Preamble library stuff === + +// Documentation for the public APIs defined in this file must be updated in: +// site/source/docs/api_reference/preamble.js.rst +// A prebuilt local version of the documentation is available at: +// site/build/text/docs/api_reference/preamble.js.txt +// You can also build docs locally as HTML or other formats in site/ +// An online HTML version (which may be of a different version of Emscripten) +// is up at http://kripken.github.io/emscripten-site/docs/api_reference/preamble.js.html + +var wasmBinary = Module['wasmBinary'];legacyModuleProp('wasmBinary', 'wasmBinary'); + +if (typeof WebAssembly != 'object') { + err('no native wasm support detected'); +} + +// Wasm globals + +var wasmMemory; + +//======================================== +// Runtime essentials +//======================================== + +// whether we are quitting the application. no code should run after this. +// set in exit() and abort() +var ABORT = false; + +// set by exit() and abort(). Passed to 'onExit' handler. +// NOTE: This is also used as the process return code code in shell environments +// but only when noExitRuntime is false. +var EXITSTATUS; + +// In STRICT mode, we only define assert() when ASSERTIONS is set. i.e. we +// don't define it at all in release modes. This matches the behaviour of +// MINIMAL_RUNTIME. +// TODO(sbc): Make this the default even without STRICT enabled. +/** @type {function(*, string=)} */ +function assert(condition, text) { + if (!condition) { + abort('Assertion failed' + (text ? ': ' + text : '')); + } +} + +// We used to include malloc/free by default in the past. Show a helpful error in +// builds with assertions. +function _malloc() { + abort('malloc() called but not included in the build - add `_malloc` to EXPORTED_FUNCTIONS'); +} +function _free() { + // Show a helpful error since we used to include free by default in the past. + abort('free() called but not included in the build - add `_free` to EXPORTED_FUNCTIONS'); +} + +// Memory management + +var HEAP, +/** @type {!Int8Array} */ + HEAP8, +/** @type {!Uint8Array} */ + HEAPU8, +/** @type {!Int16Array} */ + HEAP16, +/** @type {!Uint16Array} */ + HEAPU16, +/** @type {!Int32Array} */ + HEAP32, +/** @type {!Uint32Array} */ + HEAPU32, +/** @type {!Float32Array} */ + HEAPF32, +/* BigInt64Array type is not correctly defined in closure +/** not-@type {!BigInt64Array} */ + HEAP64, +/* BigUint64Array type is not correctly defined in closure +/** not-t@type {!BigUint64Array} */ + HEAPU64, +/** @type {!Float64Array} */ + HEAPF64; + +var runtimeInitialized = false; + +/** + * Indicates whether filename is delivered via file protocol (as opposed to http/https) + * @noinline + */ +var isFileURI = (filename) => filename.startsWith('file://'); + +// include: runtime_shared.js +// include: runtime_stack_check.js +// Initializes the stack cookie. Called at the startup of main and at the startup of each thread in pthreads mode. +function writeStackCookie() { + var max = _emscripten_stack_get_end(); + assert((max & 3) == 0); + // If the stack ends at address zero we write our cookies 4 bytes into the + // stack. This prevents interference with SAFE_HEAP and ASAN which also + // monitor writes to address zero. + if (max == 0) { + max += 4; + } + // The stack grow downwards towards _emscripten_stack_get_end. + // We write cookies to the final two words in the stack and detect if they are + // ever overwritten. + HEAPU32[((max)>>2)] = 0x02135467; + HEAPU32[(((max)+(4))>>2)] = 0x89BACDFE; + // Also test the global address 0 for integrity. + HEAPU32[((0)>>2)] = 1668509029; +} + +function checkStackCookie() { + if (ABORT) return; + var max = _emscripten_stack_get_end(); + // See writeStackCookie(). + if (max == 0) { + max += 4; + } + var cookie1 = HEAPU32[((max)>>2)]; + var cookie2 = HEAPU32[(((max)+(4))>>2)]; + if (cookie1 != 0x02135467 || cookie2 != 0x89BACDFE) { + abort(`Stack overflow! Stack cookie has been overwritten at ${ptrToString(max)}, expected hex dwords 0x89BACDFE and 0x2135467, but received ${ptrToString(cookie2)} ${ptrToString(cookie1)}`); + } + // Also test the global address 0 for integrity. + if (HEAPU32[((0)>>2)] != 0x63736d65 /* 'emsc' */) { + abort('Runtime error: The application has corrupted its heap memory area (address zero)!'); + } +} +// end include: runtime_stack_check.js +// include: runtime_exceptions.js +// end include: runtime_exceptions.js +// include: runtime_debug.js +// Endianness check +(() => { + var h16 = new Int16Array(1); + var h8 = new Int8Array(h16.buffer); + h16[0] = 0x6373; + if (h8[0] !== 0x73 || h8[1] !== 0x63) throw 'Runtime error: expected the system to be little-endian! (Run with -sSUPPORT_BIG_ENDIAN to bypass)'; +})(); + +if (Module['ENVIRONMENT']) { + throw new Error('Module.ENVIRONMENT has been deprecated. To force the environment, use the ENVIRONMENT compile-time option (for example, -sENVIRONMENT=web or -sENVIRONMENT=node)'); +} + +function legacyModuleProp(prop, newName, incoming=true) { + if (!Object.getOwnPropertyDescriptor(Module, prop)) { + Object.defineProperty(Module, prop, { + configurable: true, + get() { + let extra = incoming ? ' (the initial value can be provided on Module, but after startup the value is only looked for on a local variable of that name)' : ''; + abort(`\`Module.${prop}\` has been replaced by \`${newName}\`` + extra); + + } + }); + } +} + +function consumedModuleProp(prop) { + if (!Object.getOwnPropertyDescriptor(Module, prop)) { + Object.defineProperty(Module, prop, { + configurable: true, + set() { + abort(`Attempt to set \`Module.${prop}\` after it has already been processed. This can happen, for example, when code is injected via '--post-js' rather than '--pre-js'`); + + } + }); + } +} + +function ignoredModuleProp(prop) { + if (Object.getOwnPropertyDescriptor(Module, prop)) { + abort(`\`Module.${prop}\` was supplied but \`${prop}\` not included in INCOMING_MODULE_JS_API`); + } +} + +// forcing the filesystem exports a few things by default +function isExportedByForceFilesystem(name) { + return name === 'FS_createPath' || + name === 'FS_createDataFile' || + name === 'FS_createPreloadedFile' || + name === 'FS_unlink' || + name === 'addRunDependency' || + // The old FS has some functionality that WasmFS lacks. + name === 'FS_createLazyFile' || + name === 'FS_createDevice' || + name === 'removeRunDependency'; +} + +/** + * Intercept access to a global symbol. This enables us to give informative + * warnings/errors when folks attempt to use symbols they did not include in + * their build, or no symbols that no longer exist. + */ +function hookGlobalSymbolAccess(sym, func) { + if (typeof globalThis != 'undefined' && !Object.getOwnPropertyDescriptor(globalThis, sym)) { + Object.defineProperty(globalThis, sym, { + configurable: true, + get() { + func(); + return undefined; + } + }); + } +} + +function missingGlobal(sym, msg) { + hookGlobalSymbolAccess(sym, () => { + warnOnce(`\`${sym}\` is not longer defined by emscripten. ${msg}`); + }); +} + +missingGlobal('buffer', 'Please use HEAP8.buffer or wasmMemory.buffer'); +missingGlobal('asm', 'Please use wasmExports instead'); + +function missingLibrarySymbol(sym) { + hookGlobalSymbolAccess(sym, () => { + // Can't `abort()` here because it would break code that does runtime + // checks. e.g. `if (typeof SDL === 'undefined')`. + var msg = `\`${sym}\` is a library symbol and not included by default; add it to your library.js __deps or to DEFAULT_LIBRARY_FUNCS_TO_INCLUDE on the command line`; + // DEFAULT_LIBRARY_FUNCS_TO_INCLUDE requires the name as it appears in + // library.js, which means $name for a JS name with no prefix, or name + // for a JS name like _name. + var librarySymbol = sym; + if (!librarySymbol.startsWith('_')) { + librarySymbol = '$' + sym; + } + msg += ` (e.g. -sDEFAULT_LIBRARY_FUNCS_TO_INCLUDE='${librarySymbol}')`; + if (isExportedByForceFilesystem(sym)) { + msg += '. Alternatively, forcing filesystem support (-sFORCE_FILESYSTEM) can export this for you'; + } + warnOnce(msg); + }); + + // Any symbol that is not included from the JS library is also (by definition) + // not exported on the Module object. + unexportedRuntimeSymbol(sym); +} + +function unexportedRuntimeSymbol(sym) { + if (!Object.getOwnPropertyDescriptor(Module, sym)) { + Object.defineProperty(Module, sym, { + configurable: true, + get() { + var msg = `'${sym}' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the Emscripten FAQ)`; + if (isExportedByForceFilesystem(sym)) { + msg += '. Alternatively, forcing filesystem support (-sFORCE_FILESYSTEM) can export this for you'; + } + abort(msg); + } + }); + } +} + +var runtimeDebug = true; // Switch to false at runtime to disable logging at the right times + +// Used by XXXXX_DEBUG settings to output debug messages. +function dbg(...args) { + if (!runtimeDebug && typeof runtimeDebug != 'undefined') return; + // TODO(sbc): Make this configurable somehow. Its not always convenient for + // logging to show up as warnings. + console.warn(...args); +} +// end include: runtime_debug.js +// include: memoryprofiler.js +// end include: memoryprofiler.js + + +function updateMemoryViews() { + var b = wasmMemory.buffer; + Module['HEAP8'] = HEAP8 = new Int8Array(b); + Module['HEAP16'] = HEAP16 = new Int16Array(b); + Module['HEAPU8'] = HEAPU8 = new Uint8Array(b); + Module['HEAPU16'] = HEAPU16 = new Uint16Array(b); + Module['HEAP32'] = HEAP32 = new Int32Array(b); + Module['HEAPU32'] = HEAPU32 = new Uint32Array(b); + Module['HEAPF32'] = HEAPF32 = new Float32Array(b); + Module['HEAPF64'] = HEAPF64 = new Float64Array(b); + Module['HEAP64'] = HEAP64 = new BigInt64Array(b); + Module['HEAPU64'] = HEAPU64 = new BigUint64Array(b); +} + +// end include: runtime_shared.js +assert(!Module['STACK_SIZE'], 'STACK_SIZE can no longer be set at runtime. Use -sSTACK_SIZE at link time') + +assert(typeof Int32Array != 'undefined' && typeof Float64Array !== 'undefined' && Int32Array.prototype.subarray != undefined && Int32Array.prototype.set != undefined, + 'JS engine does not provide full typed array support'); + +// If memory is defined in wasm, the user can't provide it, or set INITIAL_MEMORY +assert(!Module['wasmMemory'], 'Use of `wasmMemory` detected. Use -sIMPORTED_MEMORY to define wasmMemory externally'); +assert(!Module['INITIAL_MEMORY'], 'Detected runtime INITIAL_MEMORY setting. Use -sIMPORTED_MEMORY to define wasmMemory dynamically'); + +function preRun() { + if (Module['preRun']) { + if (typeof Module['preRun'] == 'function') Module['preRun'] = [Module['preRun']]; + while (Module['preRun'].length) { + addOnPreRun(Module['preRun'].shift()); + } + } + consumedModuleProp('preRun'); + callRuntimeCallbacks(onPreRuns); +} + +function initRuntime() { + assert(!runtimeInitialized); + runtimeInitialized = true; + + checkStackCookie(); + + if (!Module['noFSInit'] && !FS.initialized) FS.init(); +TTY.init(); + + wasmExports['__wasm_call_ctors'](); + + FS.ignorePermissions = false; +} + +function preMain() { + checkStackCookie(); + +} + +function postRun() { + checkStackCookie(); + + if (Module['postRun']) { + if (typeof Module['postRun'] == 'function') Module['postRun'] = [Module['postRun']]; + while (Module['postRun'].length) { + addOnPostRun(Module['postRun'].shift()); + } + } + consumedModuleProp('postRun'); + + callRuntimeCallbacks(onPostRuns); +} + +// A counter of dependencies for calling run(). If we need to +// do asynchronous work before running, increment this and +// decrement it. Incrementing must happen in a place like +// Module.preRun (used by emcc to add file preloading). +// Note that you can add dependencies in preRun, even though +// it happens right before run - run will be postponed until +// the dependencies are met. +var runDependencies = 0; +var dependenciesFulfilled = null; // overridden to take different actions when all run dependencies are fulfilled +var runDependencyTracking = {}; +var runDependencyWatcher = null; + +function getUniqueRunDependency(id) { + var orig = id; + while (1) { + if (!runDependencyTracking[id]) return id; + id = orig + Math.random(); + } +} + +function addRunDependency(id) { + runDependencies++; + + Module['monitorRunDependencies']?.(runDependencies); + + if (id) { + assert(!runDependencyTracking[id]); + runDependencyTracking[id] = 1; + if (runDependencyWatcher === null && typeof setInterval != 'undefined') { + // Check for missing dependencies every few seconds + runDependencyWatcher = setInterval(() => { + if (ABORT) { + clearInterval(runDependencyWatcher); + runDependencyWatcher = null; + return; + } + var shown = false; + for (var dep in runDependencyTracking) { + if (!shown) { + shown = true; + err('still waiting on run dependencies:'); + } + err(`dependency: ${dep}`); + } + if (shown) { + err('(end of list)'); + } + }, 10000); + } + } else { + err('warning: run dependency added without ID'); + } +} + +function removeRunDependency(id) { + runDependencies--; + + Module['monitorRunDependencies']?.(runDependencies); + + if (id) { + assert(runDependencyTracking[id]); + delete runDependencyTracking[id]; + } else { + err('warning: run dependency removed without ID'); + } + if (runDependencies == 0) { + if (runDependencyWatcher !== null) { + clearInterval(runDependencyWatcher); + runDependencyWatcher = null; + } + if (dependenciesFulfilled) { + var callback = dependenciesFulfilled; + dependenciesFulfilled = null; + callback(); // can add another dependenciesFulfilled + } + } +} + +/** @param {string|number=} what */ +function abort(what) { + Module['onAbort']?.(what); + + what = 'Aborted(' + what + ')'; + // TODO(sbc): Should we remove printing and leave it up to whoever + // catches the exception? + err(what); + + ABORT = true; + + // Use a wasm runtime error, because a JS error might be seen as a foreign + // exception, which means we'd run destructors on it. We need the error to + // simply make the program stop. + // FIXME This approach does not work in Wasm EH because it currently does not assume + // all RuntimeErrors are from traps; it decides whether a RuntimeError is from + // a trap or not based on a hidden field within the object. So at the moment + // we don't have a way of throwing a wasm trap from JS. TODO Make a JS API that + // allows this in the wasm spec. + + // Suppress closure compiler warning here. Closure compiler's builtin extern + // definition for WebAssembly.RuntimeError claims it takes no arguments even + // though it can. + // TODO(https://github.com/google/closure-compiler/pull/3913): Remove if/when upstream closure gets fixed. + /** @suppress {checkTypes} */ + var e = new WebAssembly.RuntimeError(what); + + // Throw the error whether or not MODULARIZE is set because abort is used + // in code paths apart from instantiation where an exception is expected + // to be thrown when abort is called. + throw e; +} + +function createExportWrapper(name, nargs) { + return (...args) => { + assert(runtimeInitialized, `native function \`${name}\` called before runtime initialization`); + var f = wasmExports[name]; + assert(f, `exported native function \`${name}\` not found`); + // Only assert for too many arguments. Too few can be valid since the missing arguments will be zero filled. + assert(args.length <= nargs, `native function \`${name}\` called with ${args.length} args but expects ${nargs}`); + return f(...args); + }; +} + +var wasmBinaryFile; + +function findWasmBinary() { + return locateFile('minigzip.wasm'); +} + +function getBinarySync(file) { + if (file == wasmBinaryFile && wasmBinary) { + return new Uint8Array(wasmBinary); + } + if (readBinary) { + return readBinary(file); + } + throw 'both async and sync fetching of the wasm failed'; +} + +async function getWasmBinary(binaryFile) { + // If we don't have the binary yet, load it asynchronously using readAsync. + if (!wasmBinary) { + // Fetch the binary using readAsync + try { + var response = await readAsync(binaryFile); + return new Uint8Array(response); + } catch { + // Fall back to getBinarySync below; + } + } + + // Otherwise, getBinarySync should be able to get it synchronously + return getBinarySync(binaryFile); +} + +async function instantiateArrayBuffer(binaryFile, imports) { + try { + var binary = await getWasmBinary(binaryFile); + var instance = await WebAssembly.instantiate(binary, imports); + return instance; + } catch (reason) { + err(`failed to asynchronously prepare wasm: ${reason}`); + + // Warn on some common problems. + if (isFileURI(wasmBinaryFile)) { + err(`warning: Loading from a file URI (${wasmBinaryFile}) is not supported in most browsers. See https://emscripten.org/docs/getting_started/FAQ.html#how-do-i-run-a-local-webserver-for-testing-why-does-my-program-stall-in-downloading-or-preparing`); + } + abort(reason); + } +} + +async function instantiateAsync(binary, binaryFile, imports) { + if (!binary && typeof WebAssembly.instantiateStreaming == 'function' + // Don't use streaming for file:// delivered objects in a webview, fetch them synchronously. + && !isFileURI(binaryFile) + // Avoid instantiateStreaming() on Node.js environment for now, as while + // Node.js v18.1.0 implements it, it does not have a full fetch() + // implementation yet. + // + // Reference: + // https://github.com/emscripten-core/emscripten/pull/16917 + && !ENVIRONMENT_IS_NODE + ) { + try { + var response = fetch(binaryFile, { credentials: 'same-origin' }); + var instantiationResult = await WebAssembly.instantiateStreaming(response, imports); + return instantiationResult; + } catch (reason) { + // We expect the most common failure cause to be a bad MIME type for the binary, + // in which case falling back to ArrayBuffer instantiation should work. + err(`wasm streaming compile failed: ${reason}`); + err('falling back to ArrayBuffer instantiation'); + // fall back of instantiateArrayBuffer below + }; + } + return instantiateArrayBuffer(binaryFile, imports); +} + +function getWasmImports() { + // prepare imports + return { + 'env': wasmImports, + 'wasi_snapshot_preview1': wasmImports, + } +} + +// Create the wasm instance. +// Receives the wasm imports, returns the exports. +async function createWasm() { + // Load the wasm module and create an instance of using native support in the JS engine. + // handle a generated wasm instance, receiving its exports and + // performing other necessary setup + /** @param {WebAssembly.Module=} module*/ + function receiveInstance(instance, module) { + wasmExports = instance.exports; + + + + wasmMemory = wasmExports['memory']; + + assert(wasmMemory, 'memory not found in wasm exports'); + updateMemoryViews(); + + removeRunDependency('wasm-instantiate'); + return wasmExports; + } + // wait for the pthread pool (if any) + addRunDependency('wasm-instantiate'); + + // Prefer streaming instantiation if available. + // Async compilation can be confusing when an error on the page overwrites Module + // (for example, if the order of elements is wrong, and the one defining Module is + // later), so we save Module and check it later. + var trueModule = Module; + function receiveInstantiationResult(result) { + // 'result' is a ResultObject object which has both the module and instance. + // receiveInstance() will swap in the exports (to Module.asm) so they can be called + assert(Module === trueModule, 'the Module object should not be replaced during async compilation - perhaps the order of HTML elements is wrong?'); + trueModule = null; + // TODO: Due to Closure regression https://github.com/google/closure-compiler/issues/3193, the above line no longer optimizes out down to the following line. + // When the regression is fixed, can restore the above PTHREADS-enabled path. + return receiveInstance(result['instance']); + } + + var info = getWasmImports(); + + // User shell pages can write their own Module.instantiateWasm = function(imports, successCallback) callback + // to manually instantiate the Wasm module themselves. This allows pages to + // run the instantiation parallel to any other async startup actions they are + // performing. + // Also pthreads and wasm workers initialize the wasm instance through this + // path. + if (Module['instantiateWasm']) { + return new Promise((resolve, reject) => { + try { + Module['instantiateWasm'](info, (mod, inst) => { + receiveInstance(mod, inst); + resolve(mod.exports); + }); + } catch(e) { + err(`Module.instantiateWasm callback failed with error: ${e}`); + reject(e); + } + }); + } + + wasmBinaryFile ??= findWasmBinary(); + var result = await instantiateAsync(wasmBinary, wasmBinaryFile, info); + var exports = receiveInstantiationResult(result); + return exports; +} + +// end include: preamble.js + +// Begin JS library code + + + class ExitStatus { + name = 'ExitStatus'; + constructor(status) { + this.message = `Program terminated with exit(${status})`; + this.status = status; + } + } + + var callRuntimeCallbacks = (callbacks) => { + while (callbacks.length > 0) { + // Pass the module as the first argument. + callbacks.shift()(Module); + } + }; + var onPostRuns = []; + var addOnPostRun = (cb) => onPostRuns.unshift(cb); + + var onPreRuns = []; + var addOnPreRun = (cb) => onPreRuns.unshift(cb); + + + + /** + * @param {number} ptr + * @param {string} type + */ + function getValue(ptr, type = 'i8') { + if (type.endsWith('*')) type = '*'; + switch (type) { + case 'i1': return HEAP8[ptr]; + case 'i8': return HEAP8[ptr]; + case 'i16': return HEAP16[((ptr)>>1)]; + case 'i32': return HEAP32[((ptr)>>2)]; + case 'i64': return HEAP64[((ptr)>>3)]; + case 'float': return HEAPF32[((ptr)>>2)]; + case 'double': return HEAPF64[((ptr)>>3)]; + case '*': return HEAPU32[((ptr)>>2)]; + default: abort(`invalid type for getValue: ${type}`); + } + } + + var noExitRuntime = Module['noExitRuntime'] || true; + + var ptrToString = (ptr) => { + assert(typeof ptr === 'number'); + // With CAN_ADDRESS_2GB or MEMORY64, pointers are already unsigned. + ptr >>>= 0; + return '0x' + ptr.toString(16).padStart(8, '0'); + }; + + + /** + * @param {number} ptr + * @param {number} value + * @param {string} type + */ + function setValue(ptr, value, type = 'i8') { + if (type.endsWith('*')) type = '*'; + switch (type) { + case 'i1': HEAP8[ptr] = value; break; + case 'i8': HEAP8[ptr] = value; break; + case 'i16': HEAP16[((ptr)>>1)] = value; break; + case 'i32': HEAP32[((ptr)>>2)] = value; break; + case 'i64': HEAP64[((ptr)>>3)] = BigInt(value); break; + case 'float': HEAPF32[((ptr)>>2)] = value; break; + case 'double': HEAPF64[((ptr)>>3)] = value; break; + case '*': HEAPU32[((ptr)>>2)] = value; break; + default: abort(`invalid type for setValue: ${type}`); + } + } + + var stackRestore = (val) => __emscripten_stack_restore(val); + + var stackSave = () => _emscripten_stack_get_current(); + + var warnOnce = (text) => { + warnOnce.shown ||= {}; + if (!warnOnce.shown[text]) { + warnOnce.shown[text] = 1; + if (ENVIRONMENT_IS_NODE) text = 'warning: ' + text; + err(text); + } + }; + + /** @suppress {duplicate } */ + var syscallGetVarargI = () => { + assert(SYSCALLS.varargs != undefined); + // the `+` prepended here is necessary to convince the JSCompiler that varargs is indeed a number. + var ret = HEAP32[((+SYSCALLS.varargs)>>2)]; + SYSCALLS.varargs += 4; + return ret; + }; + var syscallGetVarargP = syscallGetVarargI; + + + var PATH = { + isAbs:(path) => path.charAt(0) === '/', + splitPath:(filename) => { + var splitPathRe = /^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/; + return splitPathRe.exec(filename).slice(1); + }, + normalizeArray:(parts, allowAboveRoot) => { + // if the path tries to go above the root, `up` ends up > 0 + var up = 0; + for (var i = parts.length - 1; i >= 0; i--) { + var last = parts[i]; + if (last === '.') { + parts.splice(i, 1); + } else if (last === '..') { + parts.splice(i, 1); + up++; + } else if (up) { + parts.splice(i, 1); + up--; + } + } + // if the path is allowed to go above the root, restore leading ..s + if (allowAboveRoot) { + for (; up; up--) { + parts.unshift('..'); + } + } + return parts; + }, + normalize:(path) => { + var isAbsolute = PATH.isAbs(path), + trailingSlash = path.slice(-1) === '/'; + // Normalize the path + path = PATH.normalizeArray(path.split('/').filter((p) => !!p), !isAbsolute).join('/'); + if (!path && !isAbsolute) { + path = '.'; + } + if (path && trailingSlash) { + path += '/'; + } + return (isAbsolute ? '/' : '') + path; + }, + dirname:(path) => { + var result = PATH.splitPath(path), + root = result[0], + dir = result[1]; + if (!root && !dir) { + // No dirname whatsoever + return '.'; + } + if (dir) { + // It has a dirname, strip trailing slash + dir = dir.slice(0, -1); + } + return root + dir; + }, + basename:(path) => path && path.match(/([^\/]+|\/)\/*$/)[1], + join:(...paths) => PATH.normalize(paths.join('/')), + join2:(l, r) => PATH.normalize(l + '/' + r), + }; + + var initRandomFill = () => { + // This block is not needed on v19+ since crypto.getRandomValues is builtin + if (ENVIRONMENT_IS_NODE) { + var nodeCrypto = require('crypto'); + return (view) => nodeCrypto.randomFillSync(view); + } + + return (view) => crypto.getRandomValues(view); + }; + var randomFill = (view) => { + // Lazily init on the first invocation. + (randomFill = initRandomFill())(view); + }; + + + + var PATH_FS = { + resolve:(...args) => { + var resolvedPath = '', + resolvedAbsolute = false; + for (var i = args.length - 1; i >= -1 && !resolvedAbsolute; i--) { + var path = (i >= 0) ? args[i] : FS.cwd(); + // Skip empty and invalid entries + if (typeof path != 'string') { + throw new TypeError('Arguments to path.resolve must be strings'); + } else if (!path) { + return ''; // an invalid portion invalidates the whole thing + } + resolvedPath = path + '/' + resolvedPath; + resolvedAbsolute = PATH.isAbs(path); + } + // At this point the path should be resolved to a full absolute path, but + // handle relative paths to be safe (might happen when process.cwd() fails) + resolvedPath = PATH.normalizeArray(resolvedPath.split('/').filter((p) => !!p), !resolvedAbsolute).join('/'); + return ((resolvedAbsolute ? '/' : '') + resolvedPath) || '.'; + }, + relative:(from, to) => { + from = PATH_FS.resolve(from).slice(1); + to = PATH_FS.resolve(to).slice(1); + function trim(arr) { + var start = 0; + for (; start < arr.length; start++) { + if (arr[start] !== '') break; + } + var end = arr.length - 1; + for (; end >= 0; end--) { + if (arr[end] !== '') break; + } + if (start > end) return []; + return arr.slice(start, end - start + 1); + } + var fromParts = trim(from.split('/')); + var toParts = trim(to.split('/')); + var length = Math.min(fromParts.length, toParts.length); + var samePartsLength = length; + for (var i = 0; i < length; i++) { + if (fromParts[i] !== toParts[i]) { + samePartsLength = i; + break; + } + } + var outputParts = []; + for (var i = samePartsLength; i < fromParts.length; i++) { + outputParts.push('..'); + } + outputParts = outputParts.concat(toParts.slice(samePartsLength)); + return outputParts.join('/'); + }, + }; + + + var UTF8Decoder = typeof TextDecoder != 'undefined' ? new TextDecoder() : undefined; + + /** + * Given a pointer 'idx' to a null-terminated UTF8-encoded string in the given + * array that contains uint8 values, returns a copy of that string as a + * Javascript String object. + * heapOrArray is either a regular array, or a JavaScript typed array view. + * @param {number=} idx + * @param {number=} maxBytesToRead + * @return {string} + */ + var UTF8ArrayToString = (heapOrArray, idx = 0, maxBytesToRead = NaN) => { + var endIdx = idx + maxBytesToRead; + var endPtr = idx; + // TextDecoder needs to know the byte length in advance, it doesn't stop on + // null terminator by itself. Also, use the length info to avoid running tiny + // strings through TextDecoder, since .subarray() allocates garbage. + // (As a tiny code save trick, compare endPtr against endIdx using a negation, + // so that undefined/NaN means Infinity) + while (heapOrArray[endPtr] && !(endPtr >= endIdx)) ++endPtr; + + if (endPtr - idx > 16 && heapOrArray.buffer && UTF8Decoder) { + return UTF8Decoder.decode(heapOrArray.subarray(idx, endPtr)); + } + var str = ''; + // If building with TextDecoder, we have already computed the string length + // above, so test loop end condition against that + while (idx < endPtr) { + // For UTF8 byte structure, see: + // http://en.wikipedia.org/wiki/UTF-8#Description + // https://www.ietf.org/rfc/rfc2279.txt + // https://tools.ietf.org/html/rfc3629 + var u0 = heapOrArray[idx++]; + if (!(u0 & 0x80)) { str += String.fromCharCode(u0); continue; } + var u1 = heapOrArray[idx++] & 63; + if ((u0 & 0xE0) == 0xC0) { str += String.fromCharCode(((u0 & 31) << 6) | u1); continue; } + var u2 = heapOrArray[idx++] & 63; + if ((u0 & 0xF0) == 0xE0) { + u0 = ((u0 & 15) << 12) | (u1 << 6) | u2; + } else { + if ((u0 & 0xF8) != 0xF0) warnOnce('Invalid UTF-8 leading byte ' + ptrToString(u0) + ' encountered when deserializing a UTF-8 string in wasm memory to a JS string!'); + u0 = ((u0 & 7) << 18) | (u1 << 12) | (u2 << 6) | (heapOrArray[idx++] & 63); + } + + if (u0 < 0x10000) { + str += String.fromCharCode(u0); + } else { + var ch = u0 - 0x10000; + str += String.fromCharCode(0xD800 | (ch >> 10), 0xDC00 | (ch & 0x3FF)); + } + } + return str; + }; + + var FS_stdin_getChar_buffer = []; + + var lengthBytesUTF8 = (str) => { + var len = 0; + for (var i = 0; i < str.length; ++i) { + // Gotcha: charCodeAt returns a 16-bit word that is a UTF-16 encoded code + // unit, not a Unicode code point of the character! So decode + // UTF16->UTF32->UTF8. + // See http://unicode.org/faq/utf_bom.html#utf16-3 + var c = str.charCodeAt(i); // possibly a lead surrogate + if (c <= 0x7F) { + len++; + } else if (c <= 0x7FF) { + len += 2; + } else if (c >= 0xD800 && c <= 0xDFFF) { + len += 4; ++i; + } else { + len += 3; + } + } + return len; + }; + + var stringToUTF8Array = (str, heap, outIdx, maxBytesToWrite) => { + assert(typeof str === 'string', `stringToUTF8Array expects a string (got ${typeof str})`); + // Parameter maxBytesToWrite is not optional. Negative values, 0, null, + // undefined and false each don't write out any bytes. + if (!(maxBytesToWrite > 0)) + return 0; + + var startIdx = outIdx; + var endIdx = outIdx + maxBytesToWrite - 1; // -1 for string null terminator. + for (var i = 0; i < str.length; ++i) { + // Gotcha: charCodeAt returns a 16-bit word that is a UTF-16 encoded code + // unit, not a Unicode code point of the character! So decode + // UTF16->UTF32->UTF8. + // See http://unicode.org/faq/utf_bom.html#utf16-3 + // For UTF8 byte structure, see http://en.wikipedia.org/wiki/UTF-8#Description + // and https://www.ietf.org/rfc/rfc2279.txt + // and https://tools.ietf.org/html/rfc3629 + var u = str.charCodeAt(i); // possibly a lead surrogate + if (u >= 0xD800 && u <= 0xDFFF) { + var u1 = str.charCodeAt(++i); + u = 0x10000 + ((u & 0x3FF) << 10) | (u1 & 0x3FF); + } + if (u <= 0x7F) { + if (outIdx >= endIdx) break; + heap[outIdx++] = u; + } else if (u <= 0x7FF) { + if (outIdx + 1 >= endIdx) break; + heap[outIdx++] = 0xC0 | (u >> 6); + heap[outIdx++] = 0x80 | (u & 63); + } else if (u <= 0xFFFF) { + if (outIdx + 2 >= endIdx) break; + heap[outIdx++] = 0xE0 | (u >> 12); + heap[outIdx++] = 0x80 | ((u >> 6) & 63); + heap[outIdx++] = 0x80 | (u & 63); + } else { + if (outIdx + 3 >= endIdx) break; + if (u > 0x10FFFF) warnOnce('Invalid Unicode code point ' + ptrToString(u) + ' encountered when serializing a JS string to a UTF-8 string in wasm memory! (Valid unicode code points should be in range 0-0x10FFFF).'); + heap[outIdx++] = 0xF0 | (u >> 18); + heap[outIdx++] = 0x80 | ((u >> 12) & 63); + heap[outIdx++] = 0x80 | ((u >> 6) & 63); + heap[outIdx++] = 0x80 | (u & 63); + } + } + // Null-terminate the pointer to the buffer. + heap[outIdx] = 0; + return outIdx - startIdx; + }; + /** @type {function(string, boolean=, number=)} */ + var intArrayFromString = (stringy, dontAddNull, length) => { + var len = length > 0 ? length : lengthBytesUTF8(stringy)+1; + var u8array = new Array(len); + var numBytesWritten = stringToUTF8Array(stringy, u8array, 0, u8array.length); + if (dontAddNull) u8array.length = numBytesWritten; + return u8array; + }; + var FS_stdin_getChar = () => { + if (!FS_stdin_getChar_buffer.length) { + var result = null; + if (ENVIRONMENT_IS_NODE) { + // we will read data by chunks of BUFSIZE + var BUFSIZE = 256; + var buf = Buffer.alloc(BUFSIZE); + var bytesRead = 0; + + // For some reason we must suppress a closure warning here, even though + // fd definitely exists on process.stdin, and is even the proper way to + // get the fd of stdin, + // https://github.com/nodejs/help/issues/2136#issuecomment-523649904 + // This started to happen after moving this logic out of library_tty.js, + // so it is related to the surrounding code in some unclear manner. + /** @suppress {missingProperties} */ + var fd = process.stdin.fd; + + try { + bytesRead = fs.readSync(fd, buf, 0, BUFSIZE); + } catch(e) { + // Cross-platform differences: on Windows, reading EOF throws an + // exception, but on other OSes, reading EOF returns 0. Uniformize + // behavior by treating the EOF exception to return 0. + if (e.toString().includes('EOF')) bytesRead = 0; + else throw e; + } + + if (bytesRead > 0) { + result = buf.slice(0, bytesRead).toString('utf-8'); + } + } else + if (typeof window != 'undefined' && + typeof window.prompt == 'function') { + // Browser. + result = window.prompt('Input: '); // returns null on cancel + if (result !== null) { + result += '\n'; + } + } else + {} + if (!result) { + return null; + } + FS_stdin_getChar_buffer = intArrayFromString(result, true); + } + return FS_stdin_getChar_buffer.shift(); + }; + var TTY = { + ttys:[], + init() { + // https://github.com/emscripten-core/emscripten/pull/1555 + // if (ENVIRONMENT_IS_NODE) { + // // currently, FS.init does not distinguish if process.stdin is a file or TTY + // // device, it always assumes it's a TTY device. because of this, we're forcing + // // process.stdin to UTF8 encoding to at least make stdin reading compatible + // // with text files until FS.init can be refactored. + // process.stdin.setEncoding('utf8'); + // } + }, + shutdown() { + // https://github.com/emscripten-core/emscripten/pull/1555 + // if (ENVIRONMENT_IS_NODE) { + // // inolen: any idea as to why node -e 'process.stdin.read()' wouldn't exit immediately (with process.stdin being a tty)? + // // isaacs: because now it's reading from the stream, you've expressed interest in it, so that read() kicks off a _read() which creates a ReadReq operation + // // inolen: I thought read() in that case was a synchronous operation that just grabbed some amount of buffered data if it exists? + // // isaacs: it is. but it also triggers a _read() call, which calls readStart() on the handle + // // isaacs: do process.stdin.pause() and i'd think it'd probably close the pending call + // process.stdin.pause(); + // } + }, + register(dev, ops) { + TTY.ttys[dev] = { input: [], output: [], ops: ops }; + FS.registerDevice(dev, TTY.stream_ops); + }, + stream_ops:{ + open(stream) { + var tty = TTY.ttys[stream.node.rdev]; + if (!tty) { + throw new FS.ErrnoError(43); + } + stream.tty = tty; + stream.seekable = false; + }, + close(stream) { + // flush any pending line data + stream.tty.ops.fsync(stream.tty); + }, + fsync(stream) { + stream.tty.ops.fsync(stream.tty); + }, + read(stream, buffer, offset, length, pos /* ignored */) { + if (!stream.tty || !stream.tty.ops.get_char) { + throw new FS.ErrnoError(60); + } + var bytesRead = 0; + for (var i = 0; i < length; i++) { + var result; + try { + result = stream.tty.ops.get_char(stream.tty); + } catch (e) { + throw new FS.ErrnoError(29); + } + if (result === undefined && bytesRead === 0) { + throw new FS.ErrnoError(6); + } + if (result === null || result === undefined) break; + bytesRead++; + buffer[offset+i] = result; + } + if (bytesRead) { + stream.node.atime = Date.now(); + } + return bytesRead; + }, + write(stream, buffer, offset, length, pos) { + if (!stream.tty || !stream.tty.ops.put_char) { + throw new FS.ErrnoError(60); + } + try { + for (var i = 0; i < length; i++) { + stream.tty.ops.put_char(stream.tty, buffer[offset+i]); + } + } catch (e) { + throw new FS.ErrnoError(29); + } + if (length) { + stream.node.mtime = stream.node.ctime = Date.now(); + } + return i; + }, + }, + default_tty_ops:{ + get_char(tty) { + return FS_stdin_getChar(); + }, + put_char(tty, val) { + if (val === null || val === 10) { + out(UTF8ArrayToString(tty.output)); + tty.output = []; + } else { + if (val != 0) tty.output.push(val); // val == 0 would cut text output off in the middle. + } + }, + fsync(tty) { + if (tty.output?.length > 0) { + out(UTF8ArrayToString(tty.output)); + tty.output = []; + } + }, + ioctl_tcgets(tty) { + // typical setting + return { + c_iflag: 25856, + c_oflag: 5, + c_cflag: 191, + c_lflag: 35387, + c_cc: [ + 0x03, 0x1c, 0x7f, 0x15, 0x04, 0x00, 0x01, 0x00, 0x11, 0x13, 0x1a, 0x00, + 0x12, 0x0f, 0x17, 0x16, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + ] + }; + }, + ioctl_tcsets(tty, optional_actions, data) { + // currently just ignore + return 0; + }, + ioctl_tiocgwinsz(tty) { + return [24, 80]; + }, + }, + default_tty1_ops:{ + put_char(tty, val) { + if (val === null || val === 10) { + err(UTF8ArrayToString(tty.output)); + tty.output = []; + } else { + if (val != 0) tty.output.push(val); + } + }, + fsync(tty) { + if (tty.output?.length > 0) { + err(UTF8ArrayToString(tty.output)); + tty.output = []; + } + }, + }, + }; + + + var mmapAlloc = (size) => { + abort('internal error: mmapAlloc called but `emscripten_builtin_memalign` native symbol not exported'); + }; + var MEMFS = { + ops_table:null, + mount(mount) { + return MEMFS.createNode(null, '/', 16895, 0); + }, + createNode(parent, name, mode, dev) { + if (FS.isBlkdev(mode) || FS.isFIFO(mode)) { + // no supported + throw new FS.ErrnoError(63); + } + MEMFS.ops_table ||= { + dir: { + node: { + getattr: MEMFS.node_ops.getattr, + setattr: MEMFS.node_ops.setattr, + lookup: MEMFS.node_ops.lookup, + mknod: MEMFS.node_ops.mknod, + rename: MEMFS.node_ops.rename, + unlink: MEMFS.node_ops.unlink, + rmdir: MEMFS.node_ops.rmdir, + readdir: MEMFS.node_ops.readdir, + symlink: MEMFS.node_ops.symlink + }, + stream: { + llseek: MEMFS.stream_ops.llseek + } + }, + file: { + node: { + getattr: MEMFS.node_ops.getattr, + setattr: MEMFS.node_ops.setattr + }, + stream: { + llseek: MEMFS.stream_ops.llseek, + read: MEMFS.stream_ops.read, + write: MEMFS.stream_ops.write, + mmap: MEMFS.stream_ops.mmap, + msync: MEMFS.stream_ops.msync + } + }, + link: { + node: { + getattr: MEMFS.node_ops.getattr, + setattr: MEMFS.node_ops.setattr, + readlink: MEMFS.node_ops.readlink + }, + stream: {} + }, + chrdev: { + node: { + getattr: MEMFS.node_ops.getattr, + setattr: MEMFS.node_ops.setattr + }, + stream: FS.chrdev_stream_ops + } + }; + var node = FS.createNode(parent, name, mode, dev); + if (FS.isDir(node.mode)) { + node.node_ops = MEMFS.ops_table.dir.node; + node.stream_ops = MEMFS.ops_table.dir.stream; + node.contents = {}; + } else if (FS.isFile(node.mode)) { + node.node_ops = MEMFS.ops_table.file.node; + node.stream_ops = MEMFS.ops_table.file.stream; + node.usedBytes = 0; // The actual number of bytes used in the typed array, as opposed to contents.length which gives the whole capacity. + // When the byte data of the file is populated, this will point to either a typed array, or a normal JS array. Typed arrays are preferred + // for performance, and used by default. However, typed arrays are not resizable like normal JS arrays are, so there is a small disk size + // penalty involved for appending file writes that continuously grow a file similar to std::vector capacity vs used -scheme. + node.contents = null; + } else if (FS.isLink(node.mode)) { + node.node_ops = MEMFS.ops_table.link.node; + node.stream_ops = MEMFS.ops_table.link.stream; + } else if (FS.isChrdev(node.mode)) { + node.node_ops = MEMFS.ops_table.chrdev.node; + node.stream_ops = MEMFS.ops_table.chrdev.stream; + } + node.atime = node.mtime = node.ctime = Date.now(); + // add the new node to the parent + if (parent) { + parent.contents[name] = node; + parent.atime = parent.mtime = parent.ctime = node.atime; + } + return node; + }, + getFileDataAsTypedArray(node) { + if (!node.contents) return new Uint8Array(0); + if (node.contents.subarray) return node.contents.subarray(0, node.usedBytes); // Make sure to not return excess unused bytes. + return new Uint8Array(node.contents); + }, + expandFileStorage(node, newCapacity) { + var prevCapacity = node.contents ? node.contents.length : 0; + if (prevCapacity >= newCapacity) return; // No need to expand, the storage was already large enough. + // Don't expand strictly to the given requested limit if it's only a very small increase, but instead geometrically grow capacity. + // For small filesizes (<1MB), perform size*2 geometric increase, but for large sizes, do a much more conservative size*1.125 increase to + // avoid overshooting the allocation cap by a very large margin. + var CAPACITY_DOUBLING_MAX = 1024 * 1024; + newCapacity = Math.max(newCapacity, (prevCapacity * (prevCapacity < CAPACITY_DOUBLING_MAX ? 2.0 : 1.125)) >>> 0); + if (prevCapacity != 0) newCapacity = Math.max(newCapacity, 256); // At minimum allocate 256b for each file when expanding. + var oldContents = node.contents; + node.contents = new Uint8Array(newCapacity); // Allocate new storage. + if (node.usedBytes > 0) node.contents.set(oldContents.subarray(0, node.usedBytes), 0); // Copy old data over to the new storage. + }, + resizeFileStorage(node, newSize) { + if (node.usedBytes == newSize) return; + if (newSize == 0) { + node.contents = null; // Fully decommit when requesting a resize to zero. + node.usedBytes = 0; + } else { + var oldContents = node.contents; + node.contents = new Uint8Array(newSize); // Allocate new storage. + if (oldContents) { + node.contents.set(oldContents.subarray(0, Math.min(newSize, node.usedBytes))); // Copy old data over to the new storage. + } + node.usedBytes = newSize; + } + }, + node_ops:{ + getattr(node) { + var attr = {}; + // device numbers reuse inode numbers. + attr.dev = FS.isChrdev(node.mode) ? node.id : 1; + attr.ino = node.id; + attr.mode = node.mode; + attr.nlink = 1; + attr.uid = 0; + attr.gid = 0; + attr.rdev = node.rdev; + if (FS.isDir(node.mode)) { + attr.size = 4096; + } else if (FS.isFile(node.mode)) { + attr.size = node.usedBytes; + } else if (FS.isLink(node.mode)) { + attr.size = node.link.length; + } else { + attr.size = 0; + } + attr.atime = new Date(node.atime); + attr.mtime = new Date(node.mtime); + attr.ctime = new Date(node.ctime); + // NOTE: In our implementation, st_blocks = Math.ceil(st_size/st_blksize), + // but this is not required by the standard. + attr.blksize = 4096; + attr.blocks = Math.ceil(attr.size / attr.blksize); + return attr; + }, + setattr(node, attr) { + for (const key of ["mode", "atime", "mtime", "ctime"]) { + if (attr[key] != null) { + node[key] = attr[key]; + } + } + if (attr.size !== undefined) { + MEMFS.resizeFileStorage(node, attr.size); + } + }, + lookup(parent, name) { + throw new FS.ErrnoError(44); + }, + mknod(parent, name, mode, dev) { + return MEMFS.createNode(parent, name, mode, dev); + }, + rename(old_node, new_dir, new_name) { + var new_node; + try { + new_node = FS.lookupNode(new_dir, new_name); + } catch (e) {} + if (new_node) { + if (FS.isDir(old_node.mode)) { + // if we're overwriting a directory at new_name, make sure it's empty. + for (var i in new_node.contents) { + throw new FS.ErrnoError(55); + } + } + FS.hashRemoveNode(new_node); + } + // do the internal rewiring + delete old_node.parent.contents[old_node.name]; + new_dir.contents[new_name] = old_node; + old_node.name = new_name; + new_dir.ctime = new_dir.mtime = old_node.parent.ctime = old_node.parent.mtime = Date.now(); + }, + unlink(parent, name) { + delete parent.contents[name]; + parent.ctime = parent.mtime = Date.now(); + }, + rmdir(parent, name) { + var node = FS.lookupNode(parent, name); + for (var i in node.contents) { + throw new FS.ErrnoError(55); + } + delete parent.contents[name]; + parent.ctime = parent.mtime = Date.now(); + }, + readdir(node) { + return ['.', '..', ...Object.keys(node.contents)]; + }, + symlink(parent, newname, oldpath) { + var node = MEMFS.createNode(parent, newname, 0o777 | 40960, 0); + node.link = oldpath; + return node; + }, + readlink(node) { + if (!FS.isLink(node.mode)) { + throw new FS.ErrnoError(28); + } + return node.link; + }, + }, + stream_ops:{ + read(stream, buffer, offset, length, position) { + var contents = stream.node.contents; + if (position >= stream.node.usedBytes) return 0; + var size = Math.min(stream.node.usedBytes - position, length); + assert(size >= 0); + if (size > 8 && contents.subarray) { // non-trivial, and typed array + buffer.set(contents.subarray(position, position + size), offset); + } else { + for (var i = 0; i < size; i++) buffer[offset + i] = contents[position + i]; + } + return size; + }, + write(stream, buffer, offset, length, position, canOwn) { + // The data buffer should be a typed array view + assert(!(buffer instanceof ArrayBuffer)); + + if (!length) return 0; + var node = stream.node; + node.mtime = node.ctime = Date.now(); + + if (buffer.subarray && (!node.contents || node.contents.subarray)) { // This write is from a typed array to a typed array? + if (canOwn) { + assert(position === 0, 'canOwn must imply no weird position inside the file'); + node.contents = buffer.subarray(offset, offset + length); + node.usedBytes = length; + return length; + } else if (node.usedBytes === 0 && position === 0) { // If this is a simple first write to an empty file, do a fast set since we don't need to care about old data. + node.contents = buffer.slice(offset, offset + length); + node.usedBytes = length; + return length; + } else if (position + length <= node.usedBytes) { // Writing to an already allocated and used subrange of the file? + node.contents.set(buffer.subarray(offset, offset + length), position); + return length; + } + } + + // Appending to an existing file and we need to reallocate, or source data did not come as a typed array. + MEMFS.expandFileStorage(node, position+length); + if (node.contents.subarray && buffer.subarray) { + // Use typed array write which is available. + node.contents.set(buffer.subarray(offset, offset + length), position); + } else { + for (var i = 0; i < length; i++) { + node.contents[position + i] = buffer[offset + i]; // Or fall back to manual write if not. + } + } + node.usedBytes = Math.max(node.usedBytes, position + length); + return length; + }, + llseek(stream, offset, whence) { + var position = offset; + if (whence === 1) { + position += stream.position; + } else if (whence === 2) { + if (FS.isFile(stream.node.mode)) { + position += stream.node.usedBytes; + } + } + if (position < 0) { + throw new FS.ErrnoError(28); + } + return position; + }, + mmap(stream, length, position, prot, flags) { + if (!FS.isFile(stream.node.mode)) { + throw new FS.ErrnoError(43); + } + var ptr; + var allocated; + var contents = stream.node.contents; + // Only make a new copy when MAP_PRIVATE is specified. + if (!(flags & 2) && contents && contents.buffer === HEAP8.buffer) { + // We can't emulate MAP_SHARED when the file is not backed by the + // buffer we're mapping to (e.g. the HEAP buffer). + allocated = false; + ptr = contents.byteOffset; + } else { + allocated = true; + ptr = mmapAlloc(length); + if (!ptr) { + throw new FS.ErrnoError(48); + } + if (contents) { + // Try to avoid unnecessary slices. + if (position > 0 || position + length < contents.length) { + if (contents.subarray) { + contents = contents.subarray(position, position + length); + } else { + contents = Array.prototype.slice.call(contents, position, position + length); + } + } + HEAP8.set(contents, ptr); + } + } + return { ptr, allocated }; + }, + msync(stream, buffer, offset, length, mmapFlags) { + MEMFS.stream_ops.write(stream, buffer, 0, length, offset, false); + // should we check if bytesWritten and length are the same? + return 0; + }, + }, + }; + + var asyncLoad = async (url) => { + var arrayBuffer = await readAsync(url); + assert(arrayBuffer, `Loading data file "${url}" failed (no arrayBuffer).`); + return new Uint8Array(arrayBuffer); + }; + + + var FS_createDataFile = (parent, name, fileData, canRead, canWrite, canOwn) => { + FS.createDataFile(parent, name, fileData, canRead, canWrite, canOwn); + }; + + var preloadPlugins = Module['preloadPlugins'] || []; + var FS_handledByPreloadPlugin = (byteArray, fullname, finish, onerror) => { + // Ensure plugins are ready. + if (typeof Browser != 'undefined') Browser.init(); + + var handled = false; + preloadPlugins.forEach((plugin) => { + if (handled) return; + if (plugin['canHandle'](fullname)) { + plugin['handle'](byteArray, fullname, finish, onerror); + handled = true; + } + }); + return handled; + }; + var FS_createPreloadedFile = (parent, name, url, canRead, canWrite, onload, onerror, dontCreateFile, canOwn, preFinish) => { + // TODO we should allow people to just pass in a complete filename instead + // of parent and name being that we just join them anyways + var fullname = name ? PATH_FS.resolve(PATH.join2(parent, name)) : parent; + var dep = getUniqueRunDependency(`cp ${fullname}`); // might have several active requests for the same fullname + function processData(byteArray) { + function finish(byteArray) { + preFinish?.(); + if (!dontCreateFile) { + FS_createDataFile(parent, name, byteArray, canRead, canWrite, canOwn); + } + onload?.(); + removeRunDependency(dep); + } + if (FS_handledByPreloadPlugin(byteArray, fullname, finish, () => { + onerror?.(); + removeRunDependency(dep); + })) { + return; + } + finish(byteArray); + } + addRunDependency(dep); + if (typeof url == 'string') { + asyncLoad(url).then(processData, onerror); + } else { + processData(url); + } + }; + + var FS_modeStringToFlags = (str) => { + var flagModes = { + 'r': 0, + 'r+': 2, + 'w': 512 | 64 | 1, + 'w+': 512 | 64 | 2, + 'a': 1024 | 64 | 1, + 'a+': 1024 | 64 | 2, + }; + var flags = flagModes[str]; + if (typeof flags == 'undefined') { + throw new Error(`Unknown file open mode: ${str}`); + } + return flags; + }; + + var FS_getMode = (canRead, canWrite) => { + var mode = 0; + if (canRead) mode |= 292 | 73; + if (canWrite) mode |= 146; + return mode; + }; + + + + + + + /** + * Given a pointer 'ptr' to a null-terminated UTF8-encoded string in the + * emscripten HEAP, returns a copy of that string as a Javascript String object. + * + * @param {number} ptr + * @param {number=} maxBytesToRead - An optional length that specifies the + * maximum number of bytes to read. You can omit this parameter to scan the + * string until the first 0 byte. If maxBytesToRead is passed, and the string + * at [ptr, ptr+maxBytesToReadr[ contains a null byte in the middle, then the + * string will cut short at that byte index (i.e. maxBytesToRead will not + * produce a string of exact length [ptr, ptr+maxBytesToRead[) N.B. mixing + * frequent uses of UTF8ToString() with and without maxBytesToRead may throw + * JS JIT optimizations off, so it is worth to consider consistently using one + * @return {string} + */ + var UTF8ToString = (ptr, maxBytesToRead) => { + assert(typeof ptr == 'number', `UTF8ToString expects a number (got ${typeof ptr})`); + return ptr ? UTF8ArrayToString(HEAPU8, ptr, maxBytesToRead) : ''; + }; + + var strError = (errno) => UTF8ToString(_strerror(errno)); + + var ERRNO_CODES = { + 'EPERM': 63, + 'ENOENT': 44, + 'ESRCH': 71, + 'EINTR': 27, + 'EIO': 29, + 'ENXIO': 60, + 'E2BIG': 1, + 'ENOEXEC': 45, + 'EBADF': 8, + 'ECHILD': 12, + 'EAGAIN': 6, + 'EWOULDBLOCK': 6, + 'ENOMEM': 48, + 'EACCES': 2, + 'EFAULT': 21, + 'ENOTBLK': 105, + 'EBUSY': 10, + 'EEXIST': 20, + 'EXDEV': 75, + 'ENODEV': 43, + 'ENOTDIR': 54, + 'EISDIR': 31, + 'EINVAL': 28, + 'ENFILE': 41, + 'EMFILE': 33, + 'ENOTTY': 59, + 'ETXTBSY': 74, + 'EFBIG': 22, + 'ENOSPC': 51, + 'ESPIPE': 70, + 'EROFS': 69, + 'EMLINK': 34, + 'EPIPE': 64, + 'EDOM': 18, + 'ERANGE': 68, + 'ENOMSG': 49, + 'EIDRM': 24, + 'ECHRNG': 106, + 'EL2NSYNC': 156, + 'EL3HLT': 107, + 'EL3RST': 108, + 'ELNRNG': 109, + 'EUNATCH': 110, + 'ENOCSI': 111, + 'EL2HLT': 112, + 'EDEADLK': 16, + 'ENOLCK': 46, + 'EBADE': 113, + 'EBADR': 114, + 'EXFULL': 115, + 'ENOANO': 104, + 'EBADRQC': 103, + 'EBADSLT': 102, + 'EDEADLOCK': 16, + 'EBFONT': 101, + 'ENOSTR': 100, + 'ENODATA': 116, + 'ETIME': 117, + 'ENOSR': 118, + 'ENONET': 119, + 'ENOPKG': 120, + 'EREMOTE': 121, + 'ENOLINK': 47, + 'EADV': 122, + 'ESRMNT': 123, + 'ECOMM': 124, + 'EPROTO': 65, + 'EMULTIHOP': 36, + 'EDOTDOT': 125, + 'EBADMSG': 9, + 'ENOTUNIQ': 126, + 'EBADFD': 127, + 'EREMCHG': 128, + 'ELIBACC': 129, + 'ELIBBAD': 130, + 'ELIBSCN': 131, + 'ELIBMAX': 132, + 'ELIBEXEC': 133, + 'ENOSYS': 52, + 'ENOTEMPTY': 55, + 'ENAMETOOLONG': 37, + 'ELOOP': 32, + 'EOPNOTSUPP': 138, + 'EPFNOSUPPORT': 139, + 'ECONNRESET': 15, + 'ENOBUFS': 42, + 'EAFNOSUPPORT': 5, + 'EPROTOTYPE': 67, + 'ENOTSOCK': 57, + 'ENOPROTOOPT': 50, + 'ESHUTDOWN': 140, + 'ECONNREFUSED': 14, + 'EADDRINUSE': 3, + 'ECONNABORTED': 13, + 'ENETUNREACH': 40, + 'ENETDOWN': 38, + 'ETIMEDOUT': 73, + 'EHOSTDOWN': 142, + 'EHOSTUNREACH': 23, + 'EINPROGRESS': 26, + 'EALREADY': 7, + 'EDESTADDRREQ': 17, + 'EMSGSIZE': 35, + 'EPROTONOSUPPORT': 66, + 'ESOCKTNOSUPPORT': 137, + 'EADDRNOTAVAIL': 4, + 'ENETRESET': 39, + 'EISCONN': 30, + 'ENOTCONN': 53, + 'ETOOMANYREFS': 141, + 'EUSERS': 136, + 'EDQUOT': 19, + 'ESTALE': 72, + 'ENOTSUP': 138, + 'ENOMEDIUM': 148, + 'EILSEQ': 25, + 'EOVERFLOW': 61, + 'ECANCELED': 11, + 'ENOTRECOVERABLE': 56, + 'EOWNERDEAD': 62, + 'ESTRPIPE': 135, + }; + var FS = { + root:null, + mounts:[], + devices:{ + }, + streams:[], + nextInode:1, + nameTable:null, + currentPath:"/", + initialized:false, + ignorePermissions:true, + filesystems:null, + syncFSRequests:0, + readFiles:{ + }, + ErrnoError:class extends Error { + name = 'ErrnoError'; + // We set the `name` property to be able to identify `FS.ErrnoError` + // - the `name` is a standard ECMA-262 property of error objects. Kind of good to have it anyway. + // - when using PROXYFS, an error can come from an underlying FS + // as different FS objects have their own FS.ErrnoError each, + // the test `err instanceof FS.ErrnoError` won't detect an error coming from another filesystem, causing bugs. + // we'll use the reliable test `err.name == "ErrnoError"` instead + constructor(errno) { + super(runtimeInitialized ? strError(errno) : ''); + this.errno = errno; + for (var key in ERRNO_CODES) { + if (ERRNO_CODES[key] === errno) { + this.code = key; + break; + } + } + } + }, + FSStream:class { + shared = {}; + get object() { + return this.node; + } + set object(val) { + this.node = val; + } + get isRead() { + return (this.flags & 2097155) !== 1; + } + get isWrite() { + return (this.flags & 2097155) !== 0; + } + get isAppend() { + return (this.flags & 1024); + } + get flags() { + return this.shared.flags; + } + set flags(val) { + this.shared.flags = val; + } + get position() { + return this.shared.position; + } + set position(val) { + this.shared.position = val; + } + }, + FSNode:class { + node_ops = {}; + stream_ops = {}; + readMode = 292 | 73; + writeMode = 146; + mounted = null; + constructor(parent, name, mode, rdev) { + if (!parent) { + parent = this; // root node sets parent to itself + } + this.parent = parent; + this.mount = parent.mount; + this.id = FS.nextInode++; + this.name = name; + this.mode = mode; + this.rdev = rdev; + this.atime = this.mtime = this.ctime = Date.now(); + } + get read() { + return (this.mode & this.readMode) === this.readMode; + } + set read(val) { + val ? this.mode |= this.readMode : this.mode &= ~this.readMode; + } + get write() { + return (this.mode & this.writeMode) === this.writeMode; + } + set write(val) { + val ? this.mode |= this.writeMode : this.mode &= ~this.writeMode; + } + get isFolder() { + return FS.isDir(this.mode); + } + get isDevice() { + return FS.isChrdev(this.mode); + } + }, + lookupPath(path, opts = {}) { + if (!path) { + throw new FS.ErrnoError(44); + } + opts.follow_mount ??= true + + if (!PATH.isAbs(path)) { + path = FS.cwd() + '/' + path; + } + + // limit max consecutive symlinks to 40 (SYMLOOP_MAX). + linkloop: for (var nlinks = 0; nlinks < 40; nlinks++) { + // split the absolute path + var parts = path.split('/').filter((p) => !!p); + + // start at the root + var current = FS.root; + var current_path = '/'; + + for (var i = 0; i < parts.length; i++) { + var islast = (i === parts.length-1); + if (islast && opts.parent) { + // stop resolving + break; + } + + if (parts[i] === '.') { + continue; + } + + if (parts[i] === '..') { + current_path = PATH.dirname(current_path); + current = current.parent; + continue; + } + + current_path = PATH.join2(current_path, parts[i]); + try { + current = FS.lookupNode(current, parts[i]); + } catch (e) { + // if noent_okay is true, suppress a ENOENT in the last component + // and return an object with an undefined node. This is needed for + // resolving symlinks in the path when creating a file. + if ((e?.errno === 44) && islast && opts.noent_okay) { + return { path: current_path }; + } + throw e; + } + + // jump to the mount's root node if this is a mountpoint + if (FS.isMountpoint(current) && (!islast || opts.follow_mount)) { + current = current.mounted.root; + } + + // by default, lookupPath will not follow a symlink if it is the final path component. + // setting opts.follow = true will override this behavior. + if (FS.isLink(current.mode) && (!islast || opts.follow)) { + if (!current.node_ops.readlink) { + throw new FS.ErrnoError(52); + } + var link = current.node_ops.readlink(current); + if (!PATH.isAbs(link)) { + link = PATH.dirname(current_path) + '/' + link; + } + path = link + '/' + parts.slice(i + 1).join('/'); + continue linkloop; + } + } + return { path: current_path, node: current }; + } + throw new FS.ErrnoError(32); + }, + getPath(node) { + var path; + while (true) { + if (FS.isRoot(node)) { + var mount = node.mount.mountpoint; + if (!path) return mount; + return mount[mount.length-1] !== '/' ? `${mount}/${path}` : mount + path; + } + path = path ? `${node.name}/${path}` : node.name; + node = node.parent; + } + }, + hashName(parentid, name) { + var hash = 0; + + for (var i = 0; i < name.length; i++) { + hash = ((hash << 5) - hash + name.charCodeAt(i)) | 0; + } + return ((parentid + hash) >>> 0) % FS.nameTable.length; + }, + hashAddNode(node) { + var hash = FS.hashName(node.parent.id, node.name); + node.name_next = FS.nameTable[hash]; + FS.nameTable[hash] = node; + }, + hashRemoveNode(node) { + var hash = FS.hashName(node.parent.id, node.name); + if (FS.nameTable[hash] === node) { + FS.nameTable[hash] = node.name_next; + } else { + var current = FS.nameTable[hash]; + while (current) { + if (current.name_next === node) { + current.name_next = node.name_next; + break; + } + current = current.name_next; + } + } + }, + lookupNode(parent, name) { + var errCode = FS.mayLookup(parent); + if (errCode) { + throw new FS.ErrnoError(errCode); + } + var hash = FS.hashName(parent.id, name); + for (var node = FS.nameTable[hash]; node; node = node.name_next) { + var nodeName = node.name; + if (node.parent.id === parent.id && nodeName === name) { + return node; + } + } + // if we failed to find it in the cache, call into the VFS + return FS.lookup(parent, name); + }, + createNode(parent, name, mode, rdev) { + assert(typeof parent == 'object') + var node = new FS.FSNode(parent, name, mode, rdev); + + FS.hashAddNode(node); + + return node; + }, + destroyNode(node) { + FS.hashRemoveNode(node); + }, + isRoot(node) { + return node === node.parent; + }, + isMountpoint(node) { + return !!node.mounted; + }, + isFile(mode) { + return (mode & 61440) === 32768; + }, + isDir(mode) { + return (mode & 61440) === 16384; + }, + isLink(mode) { + return (mode & 61440) === 40960; + }, + isChrdev(mode) { + return (mode & 61440) === 8192; + }, + isBlkdev(mode) { + return (mode & 61440) === 24576; + }, + isFIFO(mode) { + return (mode & 61440) === 4096; + }, + isSocket(mode) { + return (mode & 49152) === 49152; + }, + flagsToPermissionString(flag) { + var perms = ['r', 'w', 'rw'][flag & 3]; + if ((flag & 512)) { + perms += 'w'; + } + return perms; + }, + nodePermissions(node, perms) { + if (FS.ignorePermissions) { + return 0; + } + // return 0 if any user, group or owner bits are set. + if (perms.includes('r') && !(node.mode & 292)) { + return 2; + } else if (perms.includes('w') && !(node.mode & 146)) { + return 2; + } else if (perms.includes('x') && !(node.mode & 73)) { + return 2; + } + return 0; + }, + mayLookup(dir) { + if (!FS.isDir(dir.mode)) return 54; + var errCode = FS.nodePermissions(dir, 'x'); + if (errCode) return errCode; + if (!dir.node_ops.lookup) return 2; + return 0; + }, + mayCreate(dir, name) { + if (!FS.isDir(dir.mode)) { + return 54; + } + try { + var node = FS.lookupNode(dir, name); + return 20; + } catch (e) { + } + return FS.nodePermissions(dir, 'wx'); + }, + mayDelete(dir, name, isdir) { + var node; + try { + node = FS.lookupNode(dir, name); + } catch (e) { + return e.errno; + } + var errCode = FS.nodePermissions(dir, 'wx'); + if (errCode) { + return errCode; + } + if (isdir) { + if (!FS.isDir(node.mode)) { + return 54; + } + if (FS.isRoot(node) || FS.getPath(node) === FS.cwd()) { + return 10; + } + } else { + if (FS.isDir(node.mode)) { + return 31; + } + } + return 0; + }, + mayOpen(node, flags) { + if (!node) { + return 44; + } + if (FS.isLink(node.mode)) { + return 32; + } else if (FS.isDir(node.mode)) { + if (FS.flagsToPermissionString(flags) !== 'r' // opening for write + || (flags & (512 | 64))) { // TODO: check for O_SEARCH? (== search for dir only) + return 31; + } + } + return FS.nodePermissions(node, FS.flagsToPermissionString(flags)); + }, + checkOpExists(op, err) { + if (!op) { + throw new FS.ErrnoError(err); + } + return op; + }, + MAX_OPEN_FDS:4096, + nextfd() { + for (var fd = 0; fd <= FS.MAX_OPEN_FDS; fd++) { + if (!FS.streams[fd]) { + return fd; + } + } + throw new FS.ErrnoError(33); + }, + getStreamChecked(fd) { + var stream = FS.getStream(fd); + if (!stream) { + throw new FS.ErrnoError(8); + } + return stream; + }, + getStream:(fd) => FS.streams[fd], + createStream(stream, fd = -1) { + assert(fd >= -1); + + // clone it, so we can return an instance of FSStream + stream = Object.assign(new FS.FSStream(), stream); + if (fd == -1) { + fd = FS.nextfd(); + } + stream.fd = fd; + FS.streams[fd] = stream; + return stream; + }, + closeStream(fd) { + FS.streams[fd] = null; + }, + dupStream(origStream, fd = -1) { + var stream = FS.createStream(origStream, fd); + stream.stream_ops?.dup?.(stream); + return stream; + }, + doSetAttr(stream, node, attr) { + var setattr = stream?.stream_ops.setattr; + var arg = setattr ? stream : node; + setattr ??= node.node_ops.setattr; + FS.checkOpExists(setattr, 63) + setattr(arg, attr); + }, + chrdev_stream_ops:{ + open(stream) { + var device = FS.getDevice(stream.node.rdev); + // override node's stream ops with the device's + stream.stream_ops = device.stream_ops; + // forward the open call + stream.stream_ops.open?.(stream); + }, + llseek() { + throw new FS.ErrnoError(70); + }, + }, + major:(dev) => ((dev) >> 8), + minor:(dev) => ((dev) & 0xff), + makedev:(ma, mi) => ((ma) << 8 | (mi)), + registerDevice(dev, ops) { + FS.devices[dev] = { stream_ops: ops }; + }, + getDevice:(dev) => FS.devices[dev], + getMounts(mount) { + var mounts = []; + var check = [mount]; + + while (check.length) { + var m = check.pop(); + + mounts.push(m); + + check.push(...m.mounts); + } + + return mounts; + }, + syncfs(populate, callback) { + if (typeof populate == 'function') { + callback = populate; + populate = false; + } + + FS.syncFSRequests++; + + if (FS.syncFSRequests > 1) { + err(`warning: ${FS.syncFSRequests} FS.syncfs operations in flight at once, probably just doing extra work`); + } + + var mounts = FS.getMounts(FS.root.mount); + var completed = 0; + + function doCallback(errCode) { + assert(FS.syncFSRequests > 0); + FS.syncFSRequests--; + return callback(errCode); + } + + function done(errCode) { + if (errCode) { + if (!done.errored) { + done.errored = true; + return doCallback(errCode); + } + return; + } + if (++completed >= mounts.length) { + doCallback(null); + } + }; + + // sync all mounts + mounts.forEach((mount) => { + if (!mount.type.syncfs) { + return done(null); + } + mount.type.syncfs(mount, populate, done); + }); + }, + mount(type, opts, mountpoint) { + if (typeof type == 'string') { + // The filesystem was not included, and instead we have an error + // message stored in the variable. + throw type; + } + var root = mountpoint === '/'; + var pseudo = !mountpoint; + var node; + + if (root && FS.root) { + throw new FS.ErrnoError(10); + } else if (!root && !pseudo) { + var lookup = FS.lookupPath(mountpoint, { follow_mount: false }); + + mountpoint = lookup.path; // use the absolute path + node = lookup.node; + + if (FS.isMountpoint(node)) { + throw new FS.ErrnoError(10); + } + + if (!FS.isDir(node.mode)) { + throw new FS.ErrnoError(54); + } + } + + var mount = { + type, + opts, + mountpoint, + mounts: [] + }; + + // create a root node for the fs + var mountRoot = type.mount(mount); + mountRoot.mount = mount; + mount.root = mountRoot; + + if (root) { + FS.root = mountRoot; + } else if (node) { + // set as a mountpoint + node.mounted = mount; + + // add the new mount to the current mount's children + if (node.mount) { + node.mount.mounts.push(mount); + } + } + + return mountRoot; + }, + unmount(mountpoint) { + var lookup = FS.lookupPath(mountpoint, { follow_mount: false }); + + if (!FS.isMountpoint(lookup.node)) { + throw new FS.ErrnoError(28); + } + + // destroy the nodes for this mount, and all its child mounts + var node = lookup.node; + var mount = node.mounted; + var mounts = FS.getMounts(mount); + + Object.keys(FS.nameTable).forEach((hash) => { + var current = FS.nameTable[hash]; + + while (current) { + var next = current.name_next; + + if (mounts.includes(current.mount)) { + FS.destroyNode(current); + } + + current = next; + } + }); + + // no longer a mountpoint + node.mounted = null; + + // remove this mount from the child mounts + var idx = node.mount.mounts.indexOf(mount); + assert(idx !== -1); + node.mount.mounts.splice(idx, 1); + }, + lookup(parent, name) { + return parent.node_ops.lookup(parent, name); + }, + mknod(path, mode, dev) { + var lookup = FS.lookupPath(path, { parent: true }); + var parent = lookup.node; + var name = PATH.basename(path); + if (!name) { + throw new FS.ErrnoError(28); + } + if (name === '.' || name === '..') { + throw new FS.ErrnoError(20); + } + var errCode = FS.mayCreate(parent, name); + if (errCode) { + throw new FS.ErrnoError(errCode); + } + if (!parent.node_ops.mknod) { + throw new FS.ErrnoError(63); + } + return parent.node_ops.mknod(parent, name, mode, dev); + }, + statfs(path) { + return FS.statfsNode(FS.lookupPath(path, {follow: true}).node); + }, + statfsStream(stream) { + // We keep a separate statfsStream function because noderawfs overrides + // it. In noderawfs, stream.node is sometimes null. Instead, we need to + // look at stream.path. + return FS.statfsNode(stream.node); + }, + statfsNode(node) { + // NOTE: None of the defaults here are true. We're just returning safe and + // sane values. Currently nodefs and rawfs replace these defaults, + // other file systems leave them alone. + var rtn = { + bsize: 4096, + frsize: 4096, + blocks: 1e6, + bfree: 5e5, + bavail: 5e5, + files: FS.nextInode, + ffree: FS.nextInode - 1, + fsid: 42, + flags: 2, + namelen: 255, + }; + + if (node.node_ops.statfs) { + Object.assign(rtn, node.node_ops.statfs(node.mount.opts.root)); + } + return rtn; + }, + create(path, mode = 0o666) { + mode &= 4095; + mode |= 32768; + return FS.mknod(path, mode, 0); + }, + mkdir(path, mode = 0o777) { + mode &= 511 | 512; + mode |= 16384; + return FS.mknod(path, mode, 0); + }, + mkdirTree(path, mode) { + var dirs = path.split('/'); + var d = ''; + for (var dir of dirs) { + if (!dir) continue; + if (d || PATH.isAbs(path)) d += '/'; + d += dir; + try { + FS.mkdir(d, mode); + } catch(e) { + if (e.errno != 20) throw e; + } + } + }, + mkdev(path, mode, dev) { + if (typeof dev == 'undefined') { + dev = mode; + mode = 0o666; + } + mode |= 8192; + return FS.mknod(path, mode, dev); + }, + symlink(oldpath, newpath) { + if (!PATH_FS.resolve(oldpath)) { + throw new FS.ErrnoError(44); + } + var lookup = FS.lookupPath(newpath, { parent: true }); + var parent = lookup.node; + if (!parent) { + throw new FS.ErrnoError(44); + } + var newname = PATH.basename(newpath); + var errCode = FS.mayCreate(parent, newname); + if (errCode) { + throw new FS.ErrnoError(errCode); + } + if (!parent.node_ops.symlink) { + throw new FS.ErrnoError(63); + } + return parent.node_ops.symlink(parent, newname, oldpath); + }, + rename(old_path, new_path) { + var old_dirname = PATH.dirname(old_path); + var new_dirname = PATH.dirname(new_path); + var old_name = PATH.basename(old_path); + var new_name = PATH.basename(new_path); + // parents must exist + var lookup, old_dir, new_dir; + + // let the errors from non existent directories percolate up + lookup = FS.lookupPath(old_path, { parent: true }); + old_dir = lookup.node; + lookup = FS.lookupPath(new_path, { parent: true }); + new_dir = lookup.node; + + if (!old_dir || !new_dir) throw new FS.ErrnoError(44); + // need to be part of the same mount + if (old_dir.mount !== new_dir.mount) { + throw new FS.ErrnoError(75); + } + // source must exist + var old_node = FS.lookupNode(old_dir, old_name); + // old path should not be an ancestor of the new path + var relative = PATH_FS.relative(old_path, new_dirname); + if (relative.charAt(0) !== '.') { + throw new FS.ErrnoError(28); + } + // new path should not be an ancestor of the old path + relative = PATH_FS.relative(new_path, old_dirname); + if (relative.charAt(0) !== '.') { + throw new FS.ErrnoError(55); + } + // see if the new path already exists + var new_node; + try { + new_node = FS.lookupNode(new_dir, new_name); + } catch (e) { + // not fatal + } + // early out if nothing needs to change + if (old_node === new_node) { + return; + } + // we'll need to delete the old entry + var isdir = FS.isDir(old_node.mode); + var errCode = FS.mayDelete(old_dir, old_name, isdir); + if (errCode) { + throw new FS.ErrnoError(errCode); + } + // need delete permissions if we'll be overwriting. + // need create permissions if new doesn't already exist. + errCode = new_node ? + FS.mayDelete(new_dir, new_name, isdir) : + FS.mayCreate(new_dir, new_name); + if (errCode) { + throw new FS.ErrnoError(errCode); + } + if (!old_dir.node_ops.rename) { + throw new FS.ErrnoError(63); + } + if (FS.isMountpoint(old_node) || (new_node && FS.isMountpoint(new_node))) { + throw new FS.ErrnoError(10); + } + // if we are going to change the parent, check write permissions + if (new_dir !== old_dir) { + errCode = FS.nodePermissions(old_dir, 'w'); + if (errCode) { + throw new FS.ErrnoError(errCode); + } + } + // remove the node from the lookup hash + FS.hashRemoveNode(old_node); + // do the underlying fs rename + try { + old_dir.node_ops.rename(old_node, new_dir, new_name); + // update old node (we do this here to avoid each backend + // needing to) + old_node.parent = new_dir; + } catch (e) { + throw e; + } finally { + // add the node back to the hash (in case node_ops.rename + // changed its name) + FS.hashAddNode(old_node); + } + }, + rmdir(path) { + var lookup = FS.lookupPath(path, { parent: true }); + var parent = lookup.node; + var name = PATH.basename(path); + var node = FS.lookupNode(parent, name); + var errCode = FS.mayDelete(parent, name, true); + if (errCode) { + throw new FS.ErrnoError(errCode); + } + if (!parent.node_ops.rmdir) { + throw new FS.ErrnoError(63); + } + if (FS.isMountpoint(node)) { + throw new FS.ErrnoError(10); + } + parent.node_ops.rmdir(parent, name); + FS.destroyNode(node); + }, + readdir(path) { + var lookup = FS.lookupPath(path, { follow: true }); + var node = lookup.node; + var readdir = FS.checkOpExists(node.node_ops.readdir, 54); + return readdir(node); + }, + unlink(path) { + var lookup = FS.lookupPath(path, { parent: true }); + var parent = lookup.node; + if (!parent) { + throw new FS.ErrnoError(44); + } + var name = PATH.basename(path); + var node = FS.lookupNode(parent, name); + var errCode = FS.mayDelete(parent, name, false); + if (errCode) { + // According to POSIX, we should map EISDIR to EPERM, but + // we instead do what Linux does (and we must, as we use + // the musl linux libc). + throw new FS.ErrnoError(errCode); + } + if (!parent.node_ops.unlink) { + throw new FS.ErrnoError(63); + } + if (FS.isMountpoint(node)) { + throw new FS.ErrnoError(10); + } + parent.node_ops.unlink(parent, name); + FS.destroyNode(node); + }, + readlink(path) { + var lookup = FS.lookupPath(path); + var link = lookup.node; + if (!link) { + throw new FS.ErrnoError(44); + } + if (!link.node_ops.readlink) { + throw new FS.ErrnoError(28); + } + return link.node_ops.readlink(link); + }, + stat(path, dontFollow) { + var lookup = FS.lookupPath(path, { follow: !dontFollow }); + var node = lookup.node; + var getattr = FS.checkOpExists(node.node_ops.getattr, 63); + return getattr(node); + }, + fstat(fd) { + var stream = FS.getStreamChecked(fd); + var node = stream.node; + var getattr = stream.stream_ops.getattr; + var arg = getattr ? stream : node; + getattr ??= node.node_ops.getattr; + FS.checkOpExists(getattr, 63) + return getattr(arg); + }, + lstat(path) { + return FS.stat(path, true); + }, + doChmod(stream, node, mode, dontFollow) { + FS.doSetAttr(stream, node, { + mode: (mode & 4095) | (node.mode & ~4095), + ctime: Date.now(), + dontFollow + }); + }, + chmod(path, mode, dontFollow) { + var node; + if (typeof path == 'string') { + var lookup = FS.lookupPath(path, { follow: !dontFollow }); + node = lookup.node; + } else { + node = path; + } + FS.doChmod(null, node, mode, dontFollow); + }, + lchmod(path, mode) { + FS.chmod(path, mode, true); + }, + fchmod(fd, mode) { + var stream = FS.getStreamChecked(fd); + FS.doChmod(stream, stream.node, mode, false); + }, + doChown(stream, node, dontFollow) { + FS.doSetAttr(stream, node, { + timestamp: Date.now(), + dontFollow + // we ignore the uid / gid for now + }); + }, + chown(path, uid, gid, dontFollow) { + var node; + if (typeof path == 'string') { + var lookup = FS.lookupPath(path, { follow: !dontFollow }); + node = lookup.node; + } else { + node = path; + } + FS.doChown(null, node, dontFollow); + }, + lchown(path, uid, gid) { + FS.chown(path, uid, gid, true); + }, + fchown(fd, uid, gid) { + var stream = FS.getStreamChecked(fd); + FS.doChown(stream, stream.node, false); + }, + doTruncate(stream, node, len) { + if (FS.isDir(node.mode)) { + throw new FS.ErrnoError(31); + } + if (!FS.isFile(node.mode)) { + throw new FS.ErrnoError(28); + } + var errCode = FS.nodePermissions(node, 'w'); + if (errCode) { + throw new FS.ErrnoError(errCode); + } + FS.doSetAttr(stream, node, { + size: len, + timestamp: Date.now() + }); + }, + truncate(path, len) { + if (len < 0) { + throw new FS.ErrnoError(28); + } + var node; + if (typeof path == 'string') { + var lookup = FS.lookupPath(path, { follow: true }); + node = lookup.node; + } else { + node = path; + } + FS.doTruncate(null, node, len); + }, + ftruncate(fd, len) { + var stream = FS.getStreamChecked(fd); + if (len < 0 || (stream.flags & 2097155) === 0) { + throw new FS.ErrnoError(28); + } + FS.doTruncate(stream, stream.node, len); + }, + utime(path, atime, mtime) { + var lookup = FS.lookupPath(path, { follow: true }); + var node = lookup.node; + var setattr = FS.checkOpExists(node.node_ops.setattr, 63); + setattr(node, { + atime: atime, + mtime: mtime + }); + }, + open(path, flags, mode = 0o666) { + if (path === "") { + throw new FS.ErrnoError(44); + } + flags = typeof flags == 'string' ? FS_modeStringToFlags(flags) : flags; + if ((flags & 64)) { + mode = (mode & 4095) | 32768; + } else { + mode = 0; + } + var node; + var isDirPath; + if (typeof path == 'object') { + node = path; + } else { + isDirPath = path.endsWith("/"); + // noent_okay makes it so that if the final component of the path + // doesn't exist, lookupPath returns `node: undefined`. `path` will be + // updated to point to the target of all symlinks. + var lookup = FS.lookupPath(path, { + follow: !(flags & 131072), + noent_okay: true + }); + node = lookup.node; + path = lookup.path; + } + // perhaps we need to create the node + var created = false; + if ((flags & 64)) { + if (node) { + // if O_CREAT and O_EXCL are set, error out if the node already exists + if ((flags & 128)) { + throw new FS.ErrnoError(20); + } + } else if (isDirPath) { + throw new FS.ErrnoError(31); + } else { + // node doesn't exist, try to create it + // Ignore the permission bits here to ensure we can `open` this new + // file below. We use chmod below the apply the permissions once the + // file is open. + node = FS.mknod(path, mode | 0o777, 0); + created = true; + } + } + if (!node) { + throw new FS.ErrnoError(44); + } + // can't truncate a device + if (FS.isChrdev(node.mode)) { + flags &= ~512; + } + // if asked only for a directory, then this must be one + if ((flags & 65536) && !FS.isDir(node.mode)) { + throw new FS.ErrnoError(54); + } + // check permissions, if this is not a file we just created now (it is ok to + // create and write to a file with read-only permissions; it is read-only + // for later use) + if (!created) { + var errCode = FS.mayOpen(node, flags); + if (errCode) { + throw new FS.ErrnoError(errCode); + } + } + // do truncation if necessary + if ((flags & 512) && !created) { + FS.truncate(node, 0); + } + // we've already handled these, don't pass down to the underlying vfs + flags &= ~(128 | 512 | 131072); + + // register the stream with the filesystem + var stream = FS.createStream({ + node, + path: FS.getPath(node), // we want the absolute path to the node + flags, + seekable: true, + position: 0, + stream_ops: node.stream_ops, + // used by the file family libc calls (fopen, fwrite, ferror, etc.) + ungotten: [], + error: false + }); + // call the new stream's open function + if (stream.stream_ops.open) { + stream.stream_ops.open(stream); + } + if (created) { + FS.chmod(node, mode & 0o777); + } + if (Module['logReadFiles'] && !(flags & 1)) { + if (!(path in FS.readFiles)) { + FS.readFiles[path] = 1; + } + } + return stream; + }, + close(stream) { + if (FS.isClosed(stream)) { + throw new FS.ErrnoError(8); + } + if (stream.getdents) stream.getdents = null; // free readdir state + try { + if (stream.stream_ops.close) { + stream.stream_ops.close(stream); + } + } catch (e) { + throw e; + } finally { + FS.closeStream(stream.fd); + } + stream.fd = null; + }, + isClosed(stream) { + return stream.fd === null; + }, + llseek(stream, offset, whence) { + if (FS.isClosed(stream)) { + throw new FS.ErrnoError(8); + } + if (!stream.seekable || !stream.stream_ops.llseek) { + throw new FS.ErrnoError(70); + } + if (whence != 0 && whence != 1 && whence != 2) { + throw new FS.ErrnoError(28); + } + stream.position = stream.stream_ops.llseek(stream, offset, whence); + stream.ungotten = []; + return stream.position; + }, + read(stream, buffer, offset, length, position) { + assert(offset >= 0); + if (length < 0 || position < 0) { + throw new FS.ErrnoError(28); + } + if (FS.isClosed(stream)) { + throw new FS.ErrnoError(8); + } + if ((stream.flags & 2097155) === 1) { + throw new FS.ErrnoError(8); + } + if (FS.isDir(stream.node.mode)) { + throw new FS.ErrnoError(31); + } + if (!stream.stream_ops.read) { + throw new FS.ErrnoError(28); + } + var seeking = typeof position != 'undefined'; + if (!seeking) { + position = stream.position; + } else if (!stream.seekable) { + throw new FS.ErrnoError(70); + } + var bytesRead = stream.stream_ops.read(stream, buffer, offset, length, position); + if (!seeking) stream.position += bytesRead; + return bytesRead; + }, + write(stream, buffer, offset, length, position, canOwn) { + assert(offset >= 0); + if (length < 0 || position < 0) { + throw new FS.ErrnoError(28); + } + if (FS.isClosed(stream)) { + throw new FS.ErrnoError(8); + } + if ((stream.flags & 2097155) === 0) { + throw new FS.ErrnoError(8); + } + if (FS.isDir(stream.node.mode)) { + throw new FS.ErrnoError(31); + } + if (!stream.stream_ops.write) { + throw new FS.ErrnoError(28); + } + if (stream.seekable && stream.flags & 1024) { + // seek to the end before writing in append mode + FS.llseek(stream, 0, 2); + } + var seeking = typeof position != 'undefined'; + if (!seeking) { + position = stream.position; + } else if (!stream.seekable) { + throw new FS.ErrnoError(70); + } + var bytesWritten = stream.stream_ops.write(stream, buffer, offset, length, position, canOwn); + if (!seeking) stream.position += bytesWritten; + return bytesWritten; + }, + mmap(stream, length, position, prot, flags) { + // User requests writing to file (prot & PROT_WRITE != 0). + // Checking if we have permissions to write to the file unless + // MAP_PRIVATE flag is set. According to POSIX spec it is possible + // to write to file opened in read-only mode with MAP_PRIVATE flag, + // as all modifications will be visible only in the memory of + // the current process. + if ((prot & 2) !== 0 + && (flags & 2) === 0 + && (stream.flags & 2097155) !== 2) { + throw new FS.ErrnoError(2); + } + if ((stream.flags & 2097155) === 1) { + throw new FS.ErrnoError(2); + } + if (!stream.stream_ops.mmap) { + throw new FS.ErrnoError(43); + } + if (!length) { + throw new FS.ErrnoError(28); + } + return stream.stream_ops.mmap(stream, length, position, prot, flags); + }, + msync(stream, buffer, offset, length, mmapFlags) { + assert(offset >= 0); + if (!stream.stream_ops.msync) { + return 0; + } + return stream.stream_ops.msync(stream, buffer, offset, length, mmapFlags); + }, + ioctl(stream, cmd, arg) { + if (!stream.stream_ops.ioctl) { + throw new FS.ErrnoError(59); + } + return stream.stream_ops.ioctl(stream, cmd, arg); + }, + readFile(path, opts = {}) { + opts.flags = opts.flags || 0; + opts.encoding = opts.encoding || 'binary'; + if (opts.encoding !== 'utf8' && opts.encoding !== 'binary') { + throw new Error(`Invalid encoding type "${opts.encoding}"`); + } + var ret; + var stream = FS.open(path, opts.flags); + var stat = FS.stat(path); + var length = stat.size; + var buf = new Uint8Array(length); + FS.read(stream, buf, 0, length, 0); + if (opts.encoding === 'utf8') { + ret = UTF8ArrayToString(buf); + } else if (opts.encoding === 'binary') { + ret = buf; + } + FS.close(stream); + return ret; + }, + writeFile(path, data, opts = {}) { + opts.flags = opts.flags || 577; + var stream = FS.open(path, opts.flags, opts.mode); + if (typeof data == 'string') { + var buf = new Uint8Array(lengthBytesUTF8(data)+1); + var actualNumBytes = stringToUTF8Array(data, buf, 0, buf.length); + FS.write(stream, buf, 0, actualNumBytes, undefined, opts.canOwn); + } else if (ArrayBuffer.isView(data)) { + FS.write(stream, data, 0, data.byteLength, undefined, opts.canOwn); + } else { + throw new Error('Unsupported data type'); + } + FS.close(stream); + }, + cwd:() => FS.currentPath, + chdir(path) { + var lookup = FS.lookupPath(path, { follow: true }); + if (lookup.node === null) { + throw new FS.ErrnoError(44); + } + if (!FS.isDir(lookup.node.mode)) { + throw new FS.ErrnoError(54); + } + var errCode = FS.nodePermissions(lookup.node, 'x'); + if (errCode) { + throw new FS.ErrnoError(errCode); + } + FS.currentPath = lookup.path; + }, + createDefaultDirectories() { + FS.mkdir('/tmp'); + FS.mkdir('/home'); + FS.mkdir('/home/web_user'); + }, + createDefaultDevices() { + // create /dev + FS.mkdir('/dev'); + // setup /dev/null + FS.registerDevice(FS.makedev(1, 3), { + read: () => 0, + write: (stream, buffer, offset, length, pos) => length, + llseek: () => 0, + }); + FS.mkdev('/dev/null', FS.makedev(1, 3)); + // setup /dev/tty and /dev/tty1 + // stderr needs to print output using err() rather than out() + // so we register a second tty just for it. + TTY.register(FS.makedev(5, 0), TTY.default_tty_ops); + TTY.register(FS.makedev(6, 0), TTY.default_tty1_ops); + FS.mkdev('/dev/tty', FS.makedev(5, 0)); + FS.mkdev('/dev/tty1', FS.makedev(6, 0)); + // setup /dev/[u]random + // use a buffer to avoid overhead of individual crypto calls per byte + var randomBuffer = new Uint8Array(1024), randomLeft = 0; + var randomByte = () => { + if (randomLeft === 0) { + randomFill(randomBuffer); + randomLeft = randomBuffer.byteLength; + } + return randomBuffer[--randomLeft]; + }; + FS.createDevice('/dev', 'random', randomByte); + FS.createDevice('/dev', 'urandom', randomByte); + // we're not going to emulate the actual shm device, + // just create the tmp dirs that reside in it commonly + FS.mkdir('/dev/shm'); + FS.mkdir('/dev/shm/tmp'); + }, + createSpecialDirectories() { + // create /proc/self/fd which allows /proc/self/fd/6 => readlink gives the + // name of the stream for fd 6 (see test_unistd_ttyname) + FS.mkdir('/proc'); + var proc_self = FS.mkdir('/proc/self'); + FS.mkdir('/proc/self/fd'); + FS.mount({ + mount() { + var node = FS.createNode(proc_self, 'fd', 16895, 73); + node.stream_ops = { + llseek: MEMFS.stream_ops.llseek, + }; + node.node_ops = { + lookup(parent, name) { + var fd = +name; + var stream = FS.getStreamChecked(fd); + var ret = { + parent: null, + mount: { mountpoint: 'fake' }, + node_ops: { readlink: () => stream.path }, + id: fd + 1, + }; + ret.parent = ret; // make it look like a simple root node + return ret; + }, + readdir() { + return Array.from(FS.streams.entries()) + .filter(([k, v]) => v) + .map(([k, v]) => k.toString()); + } + }; + return node; + } + }, {}, '/proc/self/fd'); + }, + createStandardStreams(input, output, error) { + // TODO deprecate the old functionality of a single + // input / output callback and that utilizes FS.createDevice + // and instead require a unique set of stream ops + + // by default, we symlink the standard streams to the + // default tty devices. however, if the standard streams + // have been overwritten we create a unique device for + // them instead. + if (input) { + FS.createDevice('/dev', 'stdin', input); + } else { + FS.symlink('/dev/tty', '/dev/stdin'); + } + if (output) { + FS.createDevice('/dev', 'stdout', null, output); + } else { + FS.symlink('/dev/tty', '/dev/stdout'); + } + if (error) { + FS.createDevice('/dev', 'stderr', null, error); + } else { + FS.symlink('/dev/tty1', '/dev/stderr'); + } + + // open default streams for the stdin, stdout and stderr devices + var stdin = FS.open('/dev/stdin', 0); + var stdout = FS.open('/dev/stdout', 1); + var stderr = FS.open('/dev/stderr', 1); + assert(stdin.fd === 0, `invalid handle for stdin (${stdin.fd})`); + assert(stdout.fd === 1, `invalid handle for stdout (${stdout.fd})`); + assert(stderr.fd === 2, `invalid handle for stderr (${stderr.fd})`); + }, + staticInit() { + FS.nameTable = new Array(4096); + + FS.mount(MEMFS, {}, '/'); + + FS.createDefaultDirectories(); + FS.createDefaultDevices(); + FS.createSpecialDirectories(); + + FS.filesystems = { + 'MEMFS': MEMFS, + }; + }, + init(input, output, error) { + assert(!FS.initialized, 'FS.init was previously called. If you want to initialize later with custom parameters, remove any earlier calls (note that one is automatically added to the generated code)'); + FS.initialized = true; + + // Allow Module.stdin etc. to provide defaults, if none explicitly passed to us here + input ??= Module['stdin']; + output ??= Module['stdout']; + error ??= Module['stderr']; + + FS.createStandardStreams(input, output, error); + }, + quit() { + FS.initialized = false; + // force-flush all streams, so we get musl std streams printed out + _fflush(0); + // close all of our streams + for (var stream of FS.streams) { + if (stream) { + FS.close(stream); + } + } + }, + findObject(path, dontResolveLastLink) { + var ret = FS.analyzePath(path, dontResolveLastLink); + if (!ret.exists) { + return null; + } + return ret.object; + }, + analyzePath(path, dontResolveLastLink) { + // operate from within the context of the symlink's target + try { + var lookup = FS.lookupPath(path, { follow: !dontResolveLastLink }); + path = lookup.path; + } catch (e) { + } + var ret = { + isRoot: false, exists: false, error: 0, name: null, path: null, object: null, + parentExists: false, parentPath: null, parentObject: null + }; + try { + var lookup = FS.lookupPath(path, { parent: true }); + ret.parentExists = true; + ret.parentPath = lookup.path; + ret.parentObject = lookup.node; + ret.name = PATH.basename(path); + lookup = FS.lookupPath(path, { follow: !dontResolveLastLink }); + ret.exists = true; + ret.path = lookup.path; + ret.object = lookup.node; + ret.name = lookup.node.name; + ret.isRoot = lookup.path === '/'; + } catch (e) { + ret.error = e.errno; + }; + return ret; + }, + createPath(parent, path, canRead, canWrite) { + parent = typeof parent == 'string' ? parent : FS.getPath(parent); + var parts = path.split('/').reverse(); + while (parts.length) { + var part = parts.pop(); + if (!part) continue; + var current = PATH.join2(parent, part); + try { + FS.mkdir(current); + } catch (e) { + if (e.errno != 20) throw e; + } + parent = current; + } + return current; + }, + createFile(parent, name, properties, canRead, canWrite) { + var path = PATH.join2(typeof parent == 'string' ? parent : FS.getPath(parent), name); + var mode = FS_getMode(canRead, canWrite); + return FS.create(path, mode); + }, + createDataFile(parent, name, data, canRead, canWrite, canOwn) { + var path = name; + if (parent) { + parent = typeof parent == 'string' ? parent : FS.getPath(parent); + path = name ? PATH.join2(parent, name) : parent; + } + var mode = FS_getMode(canRead, canWrite); + var node = FS.create(path, mode); + if (data) { + if (typeof data == 'string') { + var arr = new Array(data.length); + for (var i = 0, len = data.length; i < len; ++i) arr[i] = data.charCodeAt(i); + data = arr; + } + // make sure we can write to the file + FS.chmod(node, mode | 146); + var stream = FS.open(node, 577); + FS.write(stream, data, 0, data.length, 0, canOwn); + FS.close(stream); + FS.chmod(node, mode); + } + }, + createDevice(parent, name, input, output) { + var path = PATH.join2(typeof parent == 'string' ? parent : FS.getPath(parent), name); + var mode = FS_getMode(!!input, !!output); + FS.createDevice.major ??= 64; + var dev = FS.makedev(FS.createDevice.major++, 0); + // Create a fake device that a set of stream ops to emulate + // the old behavior. + FS.registerDevice(dev, { + open(stream) { + stream.seekable = false; + }, + close(stream) { + // flush any pending line data + if (output?.buffer?.length) { + output(10); + } + }, + read(stream, buffer, offset, length, pos /* ignored */) { + var bytesRead = 0; + for (var i = 0; i < length; i++) { + var result; + try { + result = input(); + } catch (e) { + throw new FS.ErrnoError(29); + } + if (result === undefined && bytesRead === 0) { + throw new FS.ErrnoError(6); + } + if (result === null || result === undefined) break; + bytesRead++; + buffer[offset+i] = result; + } + if (bytesRead) { + stream.node.atime = Date.now(); + } + return bytesRead; + }, + write(stream, buffer, offset, length, pos) { + for (var i = 0; i < length; i++) { + try { + output(buffer[offset+i]); + } catch (e) { + throw new FS.ErrnoError(29); + } + } + if (length) { + stream.node.mtime = stream.node.ctime = Date.now(); + } + return i; + } + }); + return FS.mkdev(path, mode, dev); + }, + forceLoadFile(obj) { + if (obj.isDevice || obj.isFolder || obj.link || obj.contents) return true; + if (typeof XMLHttpRequest != 'undefined') { + throw new Error("Lazy loading should have been performed (contents set) in createLazyFile, but it was not. Lazy loading only works in web workers. Use --embed-file or --preload-file in emcc on the main thread."); + } else { // Command-line. + try { + obj.contents = readBinary(obj.url); + obj.usedBytes = obj.contents.length; + } catch (e) { + throw new FS.ErrnoError(29); + } + } + }, + createLazyFile(parent, name, url, canRead, canWrite) { + // Lazy chunked Uint8Array (implements get and length from Uint8Array). + // Actual getting is abstracted away for eventual reuse. + class LazyUint8Array { + lengthKnown = false; + chunks = []; // Loaded chunks. Index is the chunk number + get(idx) { + if (idx > this.length-1 || idx < 0) { + return undefined; + } + var chunkOffset = idx % this.chunkSize; + var chunkNum = (idx / this.chunkSize)|0; + return this.getter(chunkNum)[chunkOffset]; + } + setDataGetter(getter) { + this.getter = getter; + } + cacheLength() { + // Find length + var xhr = new XMLHttpRequest(); + xhr.open('HEAD', url, false); + xhr.send(null); + if (!(xhr.status >= 200 && xhr.status < 300 || xhr.status === 304)) throw new Error("Couldn't load " + url + ". Status: " + xhr.status); + var datalength = Number(xhr.getResponseHeader("Content-length")); + var header; + var hasByteServing = (header = xhr.getResponseHeader("Accept-Ranges")) && header === "bytes"; + var usesGzip = (header = xhr.getResponseHeader("Content-Encoding")) && header === "gzip"; + + var chunkSize = 1024*1024; // Chunk size in bytes + + if (!hasByteServing) chunkSize = datalength; + + // Function to get a range from the remote URL. + var doXHR = (from, to) => { + if (from > to) throw new Error("invalid range (" + from + ", " + to + ") or no bytes requested!"); + if (to > datalength-1) throw new Error("only " + datalength + " bytes available! programmer error!"); + + // TODO: Use mozResponseArrayBuffer, responseStream, etc. if available. + var xhr = new XMLHttpRequest(); + xhr.open('GET', url, false); + if (datalength !== chunkSize) xhr.setRequestHeader("Range", "bytes=" + from + "-" + to); + + // Some hints to the browser that we want binary data. + xhr.responseType = 'arraybuffer'; + if (xhr.overrideMimeType) { + xhr.overrideMimeType('text/plain; charset=x-user-defined'); + } + + xhr.send(null); + if (!(xhr.status >= 200 && xhr.status < 300 || xhr.status === 304)) throw new Error("Couldn't load " + url + ". Status: " + xhr.status); + if (xhr.response !== undefined) { + return new Uint8Array(/** @type{Array} */(xhr.response || [])); + } + return intArrayFromString(xhr.responseText || '', true); + }; + var lazyArray = this; + lazyArray.setDataGetter((chunkNum) => { + var start = chunkNum * chunkSize; + var end = (chunkNum+1) * chunkSize - 1; // including this byte + end = Math.min(end, datalength-1); // if datalength-1 is selected, this is the last block + if (typeof lazyArray.chunks[chunkNum] == 'undefined') { + lazyArray.chunks[chunkNum] = doXHR(start, end); + } + if (typeof lazyArray.chunks[chunkNum] == 'undefined') throw new Error('doXHR failed!'); + return lazyArray.chunks[chunkNum]; + }); + + if (usesGzip || !datalength) { + // if the server uses gzip or doesn't supply the length, we have to download the whole file to get the (uncompressed) length + chunkSize = datalength = 1; // this will force getter(0)/doXHR do download the whole file + datalength = this.getter(0).length; + chunkSize = datalength; + out("LazyFiles on gzip forces download of the whole file when length is accessed"); + } + + this._length = datalength; + this._chunkSize = chunkSize; + this.lengthKnown = true; + } + get length() { + if (!this.lengthKnown) { + this.cacheLength(); + } + return this._length; + } + get chunkSize() { + if (!this.lengthKnown) { + this.cacheLength(); + } + return this._chunkSize; + } + } + + if (typeof XMLHttpRequest != 'undefined') { + if (!ENVIRONMENT_IS_WORKER) throw 'Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc'; + var lazyArray = new LazyUint8Array(); + var properties = { isDevice: false, contents: lazyArray }; + } else { + var properties = { isDevice: false, url: url }; + } + + var node = FS.createFile(parent, name, properties, canRead, canWrite); + // This is a total hack, but I want to get this lazy file code out of the + // core of MEMFS. If we want to keep this lazy file concept I feel it should + // be its own thin LAZYFS proxying calls to MEMFS. + if (properties.contents) { + node.contents = properties.contents; + } else if (properties.url) { + node.contents = null; + node.url = properties.url; + } + // Add a function that defers querying the file size until it is asked the first time. + Object.defineProperties(node, { + usedBytes: { + get: function() { return this.contents.length; } + } + }); + // override each stream op with one that tries to force load the lazy file first + var stream_ops = {}; + var keys = Object.keys(node.stream_ops); + keys.forEach((key) => { + var fn = node.stream_ops[key]; + stream_ops[key] = (...args) => { + FS.forceLoadFile(node); + return fn(...args); + }; + }); + function writeChunks(stream, buffer, offset, length, position) { + var contents = stream.node.contents; + if (position >= contents.length) + return 0; + var size = Math.min(contents.length - position, length); + assert(size >= 0); + if (contents.slice) { // normal array + for (var i = 0; i < size; i++) { + buffer[offset + i] = contents[position + i]; + } + } else { + for (var i = 0; i < size; i++) { // LazyUint8Array from sync binary XHR + buffer[offset + i] = contents.get(position + i); + } + } + return size; + } + // use a custom read function + stream_ops.read = (stream, buffer, offset, length, position) => { + FS.forceLoadFile(node); + return writeChunks(stream, buffer, offset, length, position) + }; + // use a custom mmap function + stream_ops.mmap = (stream, length, position, prot, flags) => { + FS.forceLoadFile(node); + var ptr = mmapAlloc(length); + if (!ptr) { + throw new FS.ErrnoError(48); + } + writeChunks(stream, HEAP8, ptr, length, position); + return { ptr, allocated: true }; + }; + node.stream_ops = stream_ops; + return node; + }, + absolutePath() { + abort('FS.absolutePath has been removed; use PATH_FS.resolve instead'); + }, + createFolder() { + abort('FS.createFolder has been removed; use FS.mkdir instead'); + }, + createLink() { + abort('FS.createLink has been removed; use FS.symlink instead'); + }, + joinPath() { + abort('FS.joinPath has been removed; use PATH.join instead'); + }, + mmapAlloc() { + abort('FS.mmapAlloc has been replaced by the top level function mmapAlloc'); + }, + standardizePath() { + abort('FS.standardizePath has been removed; use PATH.normalize instead'); + }, + }; + + var SYSCALLS = { + DEFAULT_POLLMASK:5, + calculateAt(dirfd, path, allowEmpty) { + if (PATH.isAbs(path)) { + return path; + } + // relative path + var dir; + if (dirfd === -100) { + dir = FS.cwd(); + } else { + var dirstream = SYSCALLS.getStreamFromFD(dirfd); + dir = dirstream.path; + } + if (path.length == 0) { + if (!allowEmpty) { + throw new FS.ErrnoError(44);; + } + return dir; + } + return dir + '/' + path; + }, + writeStat(buf, stat) { + HEAP32[((buf)>>2)] = stat.dev; + HEAP32[(((buf)+(4))>>2)] = stat.mode; + HEAPU32[(((buf)+(8))>>2)] = stat.nlink; + HEAP32[(((buf)+(12))>>2)] = stat.uid; + HEAP32[(((buf)+(16))>>2)] = stat.gid; + HEAP32[(((buf)+(20))>>2)] = stat.rdev; + HEAP64[(((buf)+(24))>>3)] = BigInt(stat.size); + HEAP32[(((buf)+(32))>>2)] = 4096; + HEAP32[(((buf)+(36))>>2)] = stat.blocks; + var atime = stat.atime.getTime(); + var mtime = stat.mtime.getTime(); + var ctime = stat.ctime.getTime(); + HEAP64[(((buf)+(40))>>3)] = BigInt(Math.floor(atime / 1000)); + HEAPU32[(((buf)+(48))>>2)] = (atime % 1000) * 1000 * 1000; + HEAP64[(((buf)+(56))>>3)] = BigInt(Math.floor(mtime / 1000)); + HEAPU32[(((buf)+(64))>>2)] = (mtime % 1000) * 1000 * 1000; + HEAP64[(((buf)+(72))>>3)] = BigInt(Math.floor(ctime / 1000)); + HEAPU32[(((buf)+(80))>>2)] = (ctime % 1000) * 1000 * 1000; + HEAP64[(((buf)+(88))>>3)] = BigInt(stat.ino); + return 0; + }, + writeStatFs(buf, stats) { + HEAP32[(((buf)+(4))>>2)] = stats.bsize; + HEAP32[(((buf)+(40))>>2)] = stats.bsize; + HEAP32[(((buf)+(8))>>2)] = stats.blocks; + HEAP32[(((buf)+(12))>>2)] = stats.bfree; + HEAP32[(((buf)+(16))>>2)] = stats.bavail; + HEAP32[(((buf)+(20))>>2)] = stats.files; + HEAP32[(((buf)+(24))>>2)] = stats.ffree; + HEAP32[(((buf)+(28))>>2)] = stats.fsid; + HEAP32[(((buf)+(44))>>2)] = stats.flags; // ST_NOSUID + HEAP32[(((buf)+(36))>>2)] = stats.namelen; + }, + doMsync(addr, stream, len, flags, offset) { + if (!FS.isFile(stream.node.mode)) { + throw new FS.ErrnoError(43); + } + if (flags & 2) { + // MAP_PRIVATE calls need not to be synced back to underlying fs + return 0; + } + var buffer = HEAPU8.slice(addr, addr + len); + FS.msync(stream, buffer, offset, len, flags); + }, + getStreamFromFD(fd) { + var stream = FS.getStreamChecked(fd); + return stream; + }, + varargs:undefined, + getStr(ptr) { + var ret = UTF8ToString(ptr); + return ret; + }, + }; + function ___syscall_fcntl64(fd, cmd, varargs) { + SYSCALLS.varargs = varargs; + try { + + var stream = SYSCALLS.getStreamFromFD(fd); + switch (cmd) { + case 0: { + var arg = syscallGetVarargI(); + if (arg < 0) { + return -28; + } + while (FS.streams[arg]) { + arg++; + } + var newStream; + newStream = FS.dupStream(stream, arg); + return newStream.fd; + } + case 1: + case 2: + return 0; // FD_CLOEXEC makes no sense for a single process. + case 3: + return stream.flags; + case 4: { + var arg = syscallGetVarargI(); + stream.flags |= arg; + return 0; + } + case 12: { + var arg = syscallGetVarargP(); + var offset = 0; + // We're always unlocked. + HEAP16[(((arg)+(offset))>>1)] = 2; + return 0; + } + case 13: + case 14: + // Pretend that the locking is successful. These are process-level locks, + // and Emscripten programs are a single process. If we supported linking a + // filesystem between programs, we'd need to do more here. + // See https://github.com/emscripten-core/emscripten/issues/23697 + return 0; + } + return -28; + } catch (e) { + if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + return -e.errno; + } + } + + + function ___syscall_ioctl(fd, op, varargs) { + SYSCALLS.varargs = varargs; + try { + + var stream = SYSCALLS.getStreamFromFD(fd); + switch (op) { + case 21509: { + if (!stream.tty) return -59; + return 0; + } + case 21505: { + if (!stream.tty) return -59; + if (stream.tty.ops.ioctl_tcgets) { + var termios = stream.tty.ops.ioctl_tcgets(stream); + var argp = syscallGetVarargP(); + HEAP32[((argp)>>2)] = termios.c_iflag || 0; + HEAP32[(((argp)+(4))>>2)] = termios.c_oflag || 0; + HEAP32[(((argp)+(8))>>2)] = termios.c_cflag || 0; + HEAP32[(((argp)+(12))>>2)] = termios.c_lflag || 0; + for (var i = 0; i < 32; i++) { + HEAP8[(argp + i)+(17)] = termios.c_cc[i] || 0; + } + return 0; + } + return 0; + } + case 21510: + case 21511: + case 21512: { + if (!stream.tty) return -59; + return 0; // no-op, not actually adjusting terminal settings + } + case 21506: + case 21507: + case 21508: { + if (!stream.tty) return -59; + if (stream.tty.ops.ioctl_tcsets) { + var argp = syscallGetVarargP(); + var c_iflag = HEAP32[((argp)>>2)]; + var c_oflag = HEAP32[(((argp)+(4))>>2)]; + var c_cflag = HEAP32[(((argp)+(8))>>2)]; + var c_lflag = HEAP32[(((argp)+(12))>>2)]; + var c_cc = [] + for (var i = 0; i < 32; i++) { + c_cc.push(HEAP8[(argp + i)+(17)]); + } + return stream.tty.ops.ioctl_tcsets(stream.tty, op, { c_iflag, c_oflag, c_cflag, c_lflag, c_cc }); + } + return 0; // no-op, not actually adjusting terminal settings + } + case 21519: { + if (!stream.tty) return -59; + var argp = syscallGetVarargP(); + HEAP32[((argp)>>2)] = 0; + return 0; + } + case 21520: { + if (!stream.tty) return -59; + return -28; // not supported + } + case 21531: { + var argp = syscallGetVarargP(); + return FS.ioctl(stream, op, argp); + } + case 21523: { + // TODO: in theory we should write to the winsize struct that gets + // passed in, but for now musl doesn't read anything on it + if (!stream.tty) return -59; + if (stream.tty.ops.ioctl_tiocgwinsz) { + var winsize = stream.tty.ops.ioctl_tiocgwinsz(stream.tty); + var argp = syscallGetVarargP(); + HEAP16[((argp)>>1)] = winsize[0]; + HEAP16[(((argp)+(2))>>1)] = winsize[1]; + } + return 0; + } + case 21524: { + // TODO: technically, this ioctl call should change the window size. + // but, since emscripten doesn't have any concept of a terminal window + // yet, we'll just silently throw it away as we do TIOCGWINSZ + if (!stream.tty) return -59; + return 0; + } + case 21515: { + if (!stream.tty) return -59; + return 0; + } + default: return -28; // not supported + } + } catch (e) { + if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + return -e.errno; + } + } + + + function ___syscall_openat(dirfd, path, flags, varargs) { + SYSCALLS.varargs = varargs; + try { + + path = SYSCALLS.getStr(path); + path = SYSCALLS.calculateAt(dirfd, path); + var mode = varargs ? syscallGetVarargI() : 0; + return FS.open(path, flags, mode).fd; + } catch (e) { + if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + return -e.errno; + } + } + + function ___syscall_unlinkat(dirfd, path, flags) { + try { + + path = SYSCALLS.getStr(path); + path = SYSCALLS.calculateAt(dirfd, path); + if (flags === 0) { + FS.unlink(path); + } else if (flags === 512) { + FS.rmdir(path); + } else { + abort('Invalid flags passed to unlinkat'); + } + return 0; + } catch (e) { + if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + return -e.errno; + } + } + + var __abort_js = () => + abort('native code called abort()'); + + var abortOnCannotGrowMemory = (requestedSize) => { + abort(`Cannot enlarge memory arrays to size ${requestedSize} bytes (OOM). Either (1) compile with -sINITIAL_MEMORY=X with X higher than the current value ${HEAP8.length}, (2) compile with -sALLOW_MEMORY_GROWTH which allows increasing the size at runtime, or (3) if you want malloc to return NULL (0) instead of this abort, compile with -sABORTING_MALLOC=0`); + }; + var _emscripten_resize_heap = (requestedSize) => { + var oldSize = HEAPU8.length; + // With CAN_ADDRESS_2GB or MEMORY64, pointers are already unsigned. + requestedSize >>>= 0; + abortOnCannotGrowMemory(requestedSize); + }; + + + var runtimeKeepaliveCounter = 0; + var keepRuntimeAlive = () => noExitRuntime || runtimeKeepaliveCounter > 0; + var _proc_exit = (code) => { + EXITSTATUS = code; + if (!keepRuntimeAlive()) { + Module['onExit']?.(code); + ABORT = true; + } + quit_(code, new ExitStatus(code)); + }; + + + /** @suppress {duplicate } */ + /** @param {boolean|number=} implicit */ + var exitJS = (status, implicit) => { + EXITSTATUS = status; + + checkUnflushedContent(); + + // if exit() was called explicitly, warn the user if the runtime isn't actually being shut down + if (keepRuntimeAlive() && !implicit) { + var msg = `program exited (with status: ${status}), but keepRuntimeAlive() is set (counter=${runtimeKeepaliveCounter}) due to an async operation, so halting execution but not exiting the runtime or preventing further async execution (you can use emscripten_force_exit, if you want to force a true shutdown)`; + err(msg); + } + + _proc_exit(status); + }; + var _exit = exitJS; + + function _fd_close(fd) { + try { + + var stream = SYSCALLS.getStreamFromFD(fd); + FS.close(stream); + return 0; + } catch (e) { + if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + return e.errno; + } + } + + /** @param {number=} offset */ + var doReadv = (stream, iov, iovcnt, offset) => { + var ret = 0; + for (var i = 0; i < iovcnt; i++) { + var ptr = HEAPU32[((iov)>>2)]; + var len = HEAPU32[(((iov)+(4))>>2)]; + iov += 8; + var curr = FS.read(stream, HEAP8, ptr, len, offset); + if (curr < 0) return -1; + ret += curr; + if (curr < len) break; // nothing more to read + if (typeof offset != 'undefined') { + offset += curr; + } + } + return ret; + }; + + function _fd_read(fd, iov, iovcnt, pnum) { + try { + + var stream = SYSCALLS.getStreamFromFD(fd); + var num = doReadv(stream, iov, iovcnt); + HEAPU32[((pnum)>>2)] = num; + return 0; + } catch (e) { + if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + return e.errno; + } + } + + + var INT53_MAX = 9007199254740992; + + var INT53_MIN = -9007199254740992; + var bigintToI53Checked = (num) => (num < INT53_MIN || num > INT53_MAX) ? NaN : Number(num); + function _fd_seek(fd, offset, whence, newOffset) { + offset = bigintToI53Checked(offset); + + + try { + + if (isNaN(offset)) return 61; + var stream = SYSCALLS.getStreamFromFD(fd); + FS.llseek(stream, offset, whence); + HEAP64[((newOffset)>>3)] = BigInt(stream.position); + if (stream.getdents && offset === 0 && whence === 0) stream.getdents = null; // reset readdir state + return 0; + } catch (e) { + if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + return e.errno; + } + ; + } + + /** @param {number=} offset */ + var doWritev = (stream, iov, iovcnt, offset) => { + var ret = 0; + for (var i = 0; i < iovcnt; i++) { + var ptr = HEAPU32[((iov)>>2)]; + var len = HEAPU32[(((iov)+(4))>>2)]; + iov += 8; + var curr = FS.write(stream, HEAP8, ptr, len, offset); + if (curr < 0) return -1; + ret += curr; + if (curr < len) { + // No more space to write. + break; + } + if (typeof offset != 'undefined') { + offset += curr; + } + } + return ret; + }; + + function _fd_write(fd, iov, iovcnt, pnum) { + try { + + var stream = SYSCALLS.getStreamFromFD(fd); + var num = doWritev(stream, iov, iovcnt); + HEAPU32[((pnum)>>2)] = num; + return 0; + } catch (e) { + if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + return e.errno; + } + } + + + var handleException = (e) => { + // Certain exception types we do not treat as errors since they are used for + // internal control flow. + // 1. ExitStatus, which is thrown by exit() + // 2. "unwind", which is thrown by emscripten_unwind_to_js_event_loop() and others + // that wish to return to JS event loop. + if (e instanceof ExitStatus || e == 'unwind') { + return EXITSTATUS; + } + checkStackCookie(); + if (e instanceof WebAssembly.RuntimeError) { + if (_emscripten_stack_get_current() <= 0) { + err('Stack overflow detected. You can try increasing -sSTACK_SIZE (currently set to 65536)'); + } + } + quit_(1, e); + }; + + + var stringToUTF8 = (str, outPtr, maxBytesToWrite) => { + assert(typeof maxBytesToWrite == 'number', 'stringToUTF8(str, outPtr, maxBytesToWrite) is missing the third parameter that specifies the length of the output buffer!'); + return stringToUTF8Array(str, HEAPU8, outPtr, maxBytesToWrite); + }; + + var stackAlloc = (sz) => __emscripten_stack_alloc(sz); + var stringToUTF8OnStack = (str) => { + var size = lengthBytesUTF8(str) + 1; + var ret = stackAlloc(size); + stringToUTF8(str, ret, size); + return ret; + }; + + FS.createPreloadedFile = FS_createPreloadedFile; + FS.staticInit(); + // Set module methods based on EXPORTED_RUNTIME_METHODS + ; +// End JS library code + +function checkIncomingModuleAPI() { + ignoredModuleProp('fetchSettings'); +} +var wasmImports = { + /** @export */ + __syscall_fcntl64: ___syscall_fcntl64, + /** @export */ + __syscall_ioctl: ___syscall_ioctl, + /** @export */ + __syscall_openat: ___syscall_openat, + /** @export */ + __syscall_unlinkat: ___syscall_unlinkat, + /** @export */ + _abort_js: __abort_js, + /** @export */ + emscripten_resize_heap: _emscripten_resize_heap, + /** @export */ + exit: _exit, + /** @export */ + fd_close: _fd_close, + /** @export */ + fd_read: _fd_read, + /** @export */ + fd_seek: _fd_seek, + /** @export */ + fd_write: _fd_write +}; +var wasmExports; +createWasm(); +var ___wasm_call_ctors = createExportWrapper('__wasm_call_ctors', 0); +var _main = Module['_main'] = createExportWrapper('__main_argc_argv', 2); +var _strerror = createExportWrapper('strerror', 1); +var _fflush = createExportWrapper('fflush', 1); +var _emscripten_stack_init = () => (_emscripten_stack_init = wasmExports['emscripten_stack_init'])(); +var _emscripten_stack_get_free = () => (_emscripten_stack_get_free = wasmExports['emscripten_stack_get_free'])(); +var _emscripten_stack_get_base = () => (_emscripten_stack_get_base = wasmExports['emscripten_stack_get_base'])(); +var _emscripten_stack_get_end = () => (_emscripten_stack_get_end = wasmExports['emscripten_stack_get_end'])(); +var __emscripten_stack_restore = (a0) => (__emscripten_stack_restore = wasmExports['_emscripten_stack_restore'])(a0); +var __emscripten_stack_alloc = (a0) => (__emscripten_stack_alloc = wasmExports['_emscripten_stack_alloc'])(a0); +var _emscripten_stack_get_current = () => (_emscripten_stack_get_current = wasmExports['emscripten_stack_get_current'])(); + + +// include: postamble.js +// === Auto-generated postamble setup entry stuff === + +var missingLibrarySymbols = [ + 'writeI53ToI64', + 'writeI53ToI64Clamped', + 'writeI53ToI64Signaling', + 'writeI53ToU64Clamped', + 'writeI53ToU64Signaling', + 'readI53FromI64', + 'readI53FromU64', + 'convertI32PairToI53', + 'convertI32PairToI53Checked', + 'convertU32PairToI53', + 'getTempRet0', + 'setTempRet0', + 'zeroMemory', + 'getHeapMax', + 'growMemory', + 'inetPton4', + 'inetNtop4', + 'inetPton6', + 'inetNtop6', + 'readSockaddr', + 'writeSockaddr', + 'emscriptenLog', + 'readEmAsmArgs', + 'jstoi_q', + 'getExecutableName', + 'listenOnce', + 'autoResumeAudioContext', + 'getDynCaller', + 'dynCall', + 'runtimeKeepalivePush', + 'runtimeKeepalivePop', + 'callUserCallback', + 'maybeExit', + 'asmjsMangle', + 'alignMemory', + 'HandleAllocator', + 'getNativeTypeSize', + 'addOnInit', + 'addOnPostCtor', + 'addOnPreMain', + 'addOnExit', + 'STACK_SIZE', + 'STACK_ALIGN', + 'POINTER_SIZE', + 'ASSERTIONS', + 'getCFunc', + 'ccall', + 'cwrap', + 'uleb128Encode', + 'sigToWasmTypes', + 'generateFuncType', + 'convertJsFunctionToWasm', + 'getEmptyTableSlot', + 'updateTableMap', + 'getFunctionAddress', + 'addFunction', + 'removeFunction', + 'reallyNegative', + 'unSign', + 'strLen', + 'reSign', + 'formatString', + 'intArrayToString', + 'AsciiToString', + 'stringToAscii', + 'UTF16ToString', + 'stringToUTF16', + 'lengthBytesUTF16', + 'UTF32ToString', + 'stringToUTF32', + 'lengthBytesUTF32', + 'stringToNewUTF8', + 'writeArrayToMemory', + 'registerKeyEventCallback', + 'maybeCStringToJsString', + 'findEventTarget', + 'getBoundingClientRect', + 'fillMouseEventData', + 'registerMouseEventCallback', + 'registerWheelEventCallback', + 'registerUiEventCallback', + 'registerFocusEventCallback', + 'fillDeviceOrientationEventData', + 'registerDeviceOrientationEventCallback', + 'fillDeviceMotionEventData', + 'registerDeviceMotionEventCallback', + 'screenOrientation', + 'fillOrientationChangeEventData', + 'registerOrientationChangeEventCallback', + 'fillFullscreenChangeEventData', + 'registerFullscreenChangeEventCallback', + 'JSEvents_requestFullscreen', + 'JSEvents_resizeCanvasForFullscreen', + 'registerRestoreOldStyle', + 'hideEverythingExceptGivenElement', + 'restoreHiddenElements', + 'setLetterbox', + 'softFullscreenResizeWebGLRenderTarget', + 'doRequestFullscreen', + 'fillPointerlockChangeEventData', + 'registerPointerlockChangeEventCallback', + 'registerPointerlockErrorEventCallback', + 'requestPointerLock', + 'fillVisibilityChangeEventData', + 'registerVisibilityChangeEventCallback', + 'registerTouchEventCallback', + 'fillGamepadEventData', + 'registerGamepadEventCallback', + 'registerBeforeUnloadEventCallback', + 'fillBatteryEventData', + 'battery', + 'registerBatteryEventCallback', + 'setCanvasElementSize', + 'getCanvasElementSize', + 'jsStackTrace', + 'getCallstack', + 'convertPCtoSourceLocation', + 'getEnvStrings', + 'checkWasiClock', + 'wasiRightsToMuslOFlags', + 'wasiOFlagsToMuslOFlags', + 'safeSetTimeout', + 'setImmediateWrapped', + 'safeRequestAnimationFrame', + 'clearImmediateWrapped', + 'registerPostMainLoop', + 'registerPreMainLoop', + 'getPromise', + 'makePromise', + 'idsToPromises', + 'makePromiseCallback', + 'ExceptionInfo', + 'findMatchingCatch', + 'Browser_asyncPrepareDataCounter', + 'isLeapYear', + 'ydayFromDate', + 'arraySum', + 'addDays', + 'getSocketFromFD', + 'getSocketAddress', + 'FS_unlink', + 'FS_mkdirTree', + '_setNetworkCallback', + 'heapObjectForWebGLType', + 'toTypedArrayIndex', + 'webgl_enable_ANGLE_instanced_arrays', + 'webgl_enable_OES_vertex_array_object', + 'webgl_enable_WEBGL_draw_buffers', + 'webgl_enable_WEBGL_multi_draw', + 'webgl_enable_EXT_polygon_offset_clamp', + 'webgl_enable_EXT_clip_control', + 'webgl_enable_WEBGL_polygon_mode', + 'emscriptenWebGLGet', + 'computeUnpackAlignedImageSize', + 'colorChannelsInGlTextureFormat', + 'emscriptenWebGLGetTexPixelData', + 'emscriptenWebGLGetUniform', + 'webglGetUniformLocation', + 'webglPrepareUniformLocationsBeforeFirstUse', + 'webglGetLeftBracePos', + 'emscriptenWebGLGetVertexAttrib', + '__glGetActiveAttribOrUniform', + 'writeGLArray', + 'registerWebGlEventCallback', + 'runAndAbortIfError', + 'ALLOC_NORMAL', + 'ALLOC_STACK', + 'allocate', + 'writeStringToMemory', + 'writeAsciiToMemory', + 'demangle', + 'stackTrace', +]; +missingLibrarySymbols.forEach(missingLibrarySymbol) + +var unexportedSymbols = [ + 'run', + 'addRunDependency', + 'removeRunDependency', + 'out', + 'err', + 'callMain', + 'abort', + 'wasmMemory', + 'wasmExports', + 'writeStackCookie', + 'checkStackCookie', + 'INT53_MAX', + 'INT53_MIN', + 'bigintToI53Checked', + 'stackSave', + 'stackRestore', + 'stackAlloc', + 'ptrToString', + 'exitJS', + 'abortOnCannotGrowMemory', + 'ENV', + 'ERRNO_CODES', + 'strError', + 'DNS', + 'Protocols', + 'Sockets', + 'timers', + 'warnOnce', + 'readEmAsmArgsArray', + 'jstoi_s', + 'handleException', + 'keepRuntimeAlive', + 'asyncLoad', + 'mmapAlloc', + 'wasmTable', + 'noExitRuntime', + 'addOnPreRun', + 'addOnPostRun', + 'freeTableIndexes', + 'functionsInTableMap', + 'setValue', + 'getValue', + 'PATH', + 'PATH_FS', + 'UTF8Decoder', + 'UTF8ArrayToString', + 'UTF8ToString', + 'stringToUTF8Array', + 'stringToUTF8', + 'lengthBytesUTF8', + 'intArrayFromString', + 'UTF16Decoder', + 'stringToUTF8OnStack', + 'JSEvents', + 'specialHTMLTargets', + 'findCanvasEventTarget', + 'currentFullscreenStrategy', + 'restoreOldWindowedStyle', + 'UNWIND_CACHE', + 'ExitStatus', + 'doReadv', + 'doWritev', + 'initRandomFill', + 'randomFill', + 'emSetImmediate', + 'emClearImmediate_deps', + 'emClearImmediate', + 'promiseMap', + 'uncaughtExceptionCount', + 'exceptionLast', + 'exceptionCaught', + 'Browser', + 'getPreloadedImageData__data', + 'wget', + 'MONTH_DAYS_REGULAR', + 'MONTH_DAYS_LEAP', + 'MONTH_DAYS_REGULAR_CUMULATIVE', + 'MONTH_DAYS_LEAP_CUMULATIVE', + 'SYSCALLS', + 'preloadPlugins', + 'FS_createPreloadedFile', + 'FS_modeStringToFlags', + 'FS_getMode', + 'FS_stdin_getChar_buffer', + 'FS_stdin_getChar', + 'FS_createPath', + 'FS_createDevice', + 'FS_readFile', + 'FS', + 'FS_createDataFile', + 'FS_createLazyFile', + 'MEMFS', + 'TTY', + 'PIPEFS', + 'SOCKFS', + 'tempFixedLengthArray', + 'miniTempWebGLFloatBuffers', + 'miniTempWebGLIntBuffers', + 'GL', + 'AL', + 'GLUT', + 'EGL', + 'GLEW', + 'IDBStore', + 'SDL', + 'SDL_gfx', + 'allocateUTF8', + 'allocateUTF8OnStack', + 'print', + 'printErr', +]; +unexportedSymbols.forEach(unexportedRuntimeSymbol); + + + +var calledRun; + +function callMain(args = []) { + assert(runDependencies == 0, 'cannot call main when async dependencies remain! (listen on Module["onRuntimeInitialized"])'); + assert(typeof onPreRuns === 'undefined' || onPreRuns.length == 0, 'cannot call main when preRun functions remain to be called'); + + var entryFunction = _main; + + args.unshift(thisProgram); + + var argc = args.length; + var argv = stackAlloc((argc + 1) * 4); + var argv_ptr = argv; + args.forEach((arg) => { + HEAPU32[((argv_ptr)>>2)] = stringToUTF8OnStack(arg); + argv_ptr += 4; + }); + HEAPU32[((argv_ptr)>>2)] = 0; + + try { + + var ret = entryFunction(argc, argv); + + // if we're not running an evented main loop, it's time to exit + exitJS(ret, /* implicit = */ true); + return ret; + } catch (e) { + return handleException(e); + } +} + +function stackCheckInit() { + // This is normally called automatically during __wasm_call_ctors but need to + // get these values before even running any of the ctors so we call it redundantly + // here. + _emscripten_stack_init(); + // TODO(sbc): Move writeStackCookie to native to to avoid this. + writeStackCookie(); +} + +function run(args = arguments_) { + + if (runDependencies > 0) { + dependenciesFulfilled = run; + return; + } + + stackCheckInit(); + + preRun(); + + // a preRun added a dependency, run will be called later + if (runDependencies > 0) { + dependenciesFulfilled = run; + return; + } + + function doRun() { + // run may have just been called through dependencies being fulfilled just in this very frame, + // or while the async setStatus time below was happening + assert(!calledRun); + calledRun = true; + Module['calledRun'] = true; + + if (ABORT) return; + + initRuntime(); + + preMain(); + + Module['onRuntimeInitialized']?.(); + consumedModuleProp('onRuntimeInitialized'); + + var noInitialRun = Module['noInitialRun'];legacyModuleProp('noInitialRun', 'noInitialRun'); + if (!noInitialRun) callMain(args); + + postRun(); + } + + if (Module['setStatus']) { + Module['setStatus']('Running...'); + setTimeout(() => { + setTimeout(() => Module['setStatus'](''), 1); + doRun(); + }, 1); + } else + { + doRun(); + } + checkStackCookie(); +} + +function checkUnflushedContent() { + // Compiler settings do not allow exiting the runtime, so flushing + // the streams is not possible. but in ASSERTIONS mode we check + // if there was something to flush, and if so tell the user they + // should request that the runtime be exitable. + // Normally we would not even include flush() at all, but in ASSERTIONS + // builds we do so just for this check, and here we see if there is any + // content to flush, that is, we check if there would have been + // something a non-ASSERTIONS build would have not seen. + // How we flush the streams depends on whether we are in SYSCALLS_REQUIRE_FILESYSTEM=0 + // mode (which has its own special function for this; otherwise, all + // the code is inside libc) + var oldOut = out; + var oldErr = err; + var has = false; + out = err = (x) => { + has = true; + } + try { // it doesn't matter if it fails + _fflush(0); + // also flush in the JS FS layer + ['stdout', 'stderr'].forEach((name) => { + var info = FS.analyzePath('/dev/' + name); + if (!info) return; + var stream = info.object; + var rdev = stream.rdev; + var tty = TTY.ttys[rdev]; + if (tty?.output?.length) { + has = true; + } + }); + } catch(e) {} + out = oldOut; + err = oldErr; + if (has) { + warnOnce('stdio streams had content in them that was not flushed. you should set EXIT_RUNTIME to 1 (see the Emscripten FAQ), or make sure to emit a newline when you printf etc.'); + } +} + +if (Module['preInit']) { + if (typeof Module['preInit'] == 'function') Module['preInit'] = [Module['preInit']]; + while (Module['preInit'].length > 0) { + Module['preInit'].pop()(); + } +} +consumedModuleProp('preInit'); + +run(); + +// end include: postamble.js + diff --git a/thirdparty/zlib-1.3.1/build-emcmake/minigzip.wasm b/thirdparty/zlib-1.3.1/build-emcmake/minigzip.wasm new file mode 100755 index 0000000000000000000000000000000000000000..96242792f0c9f56e3b0bbaf56a8b5585122cf40e GIT binary patch literal 201173 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%0Ao?2S1?5E*YQ-`SfyPiMH9NGLhGsd8sK!!6MI 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%0Ac*c`bUT=EJYTyz?0Zd?te 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 L-Kom37XAMK<9ii+ literal 0 HcmV?d00001 diff --git a/thirdparty/zlib-1.3.1/build-emcmake/minigzip64.js b/thirdparty/zlib-1.3.1/build-emcmake/minigzip64.js new file mode 100644 index 0000000..3cac45a --- /dev/null +++ b/thirdparty/zlib-1.3.1/build-emcmake/minigzip64.js @@ -0,0 +1,4517 @@ +// include: shell.js +// The Module object: Our interface to the outside world. We import +// and export values on it. There are various ways Module can be used: +// 1. Not defined. We create it here +// 2. A function parameter, function(moduleArg) => Promise +// 3. pre-run appended it, var Module = {}; ..generated code.. +// 4. External script tag defines var Module. +// We need to check if Module already exists (e.g. case 3 above). +// Substitution will be replaced with actual code on later stage of the build, +// this way Closure Compiler will not mangle it (e.g. case 4. above). +// Note that if you want to run closure, and also to use Module +// after the generated code, you will need to define var Module = {}; +// before the code. Then that object will be used in the code, and you +// can continue to use Module afterwards as well. +var Module = typeof Module != 'undefined' ? Module : {}; + +// Determine the runtime environment we are in. You can customize this by +// setting the ENVIRONMENT setting at compile time (see settings.js). + +// Attempt to auto-detect the environment +var ENVIRONMENT_IS_WEB = typeof window == 'object'; +var ENVIRONMENT_IS_WORKER = typeof WorkerGlobalScope != 'undefined'; +// N.b. Electron.js environment is simultaneously a NODE-environment, but +// also a web environment. +var ENVIRONMENT_IS_NODE = typeof process == 'object' && typeof process.versions == 'object' && typeof process.versions.node == 'string' && process.type != 'renderer'; +var ENVIRONMENT_IS_SHELL = !ENVIRONMENT_IS_WEB && !ENVIRONMENT_IS_NODE && !ENVIRONMENT_IS_WORKER; + +if (ENVIRONMENT_IS_NODE) { + +} + +// --pre-jses are emitted after the Module integration code, so that they can +// refer to Module (if they choose; they can also define Module) + + +// Sometimes an existing Module object exists with properties +// meant to overwrite the default module functionality. Here +// we collect those properties and reapply _after_ we configure +// the current environment's defaults to avoid having to be so +// defensive during initialization. +var moduleOverrides = {...Module}; + +var arguments_ = []; +var thisProgram = './this.program'; +var quit_ = (status, toThrow) => { + throw toThrow; +}; + +// `/` should be present at the end if `scriptDirectory` is not empty +var scriptDirectory = ''; +function locateFile(path) { + if (Module['locateFile']) { + return Module['locateFile'](path, scriptDirectory); + } + return scriptDirectory + path; +} + +// Hooks that are implemented differently in different runtime environments. +var readAsync, readBinary; + +if (ENVIRONMENT_IS_NODE) { + if (typeof process == 'undefined' || !process.release || process.release.name !== 'node') throw new Error('not compiled for this environment (did you build to HTML and try to run it not on the web, or set ENVIRONMENT to something - like node - and run it someplace else - like on the web?)'); + + var nodeVersion = process.versions.node; + var numericVersion = nodeVersion.split('.').slice(0, 3); + numericVersion = (numericVersion[0] * 10000) + (numericVersion[1] * 100) + (numericVersion[2].split('-')[0] * 1); + var minVersion = 160000; + if (numericVersion < 160000) { + throw new Error('This emscripten-generated code requires node v16.0.0 (detected v' + nodeVersion + ')'); + } + + // These modules will usually be used on Node.js. Load them eagerly to avoid + // the complexity of lazy-loading. + var fs = require('fs'); + var nodePath = require('path'); + + scriptDirectory = __dirname + '/'; + +// include: node_shell_read.js +readBinary = (filename) => { + // We need to re-wrap `file://` strings to URLs. + filename = isFileURI(filename) ? new URL(filename) : filename; + var ret = fs.readFileSync(filename); + assert(Buffer.isBuffer(ret)); + return ret; +}; + +readAsync = async (filename, binary = true) => { + // See the comment in the `readBinary` function. + filename = isFileURI(filename) ? new URL(filename) : filename; + var ret = fs.readFileSync(filename, binary ? undefined : 'utf8'); + assert(binary ? Buffer.isBuffer(ret) : typeof ret == 'string'); + return ret; +}; +// end include: node_shell_read.js + if (!Module['thisProgram'] && process.argv.length > 1) { + thisProgram = process.argv[1].replace(/\\/g, '/'); + } + + arguments_ = process.argv.slice(2); + + if (typeof module != 'undefined') { + module['exports'] = Module; + } + + quit_ = (status, toThrow) => { + process.exitCode = status; + throw toThrow; + }; + +} else +if (ENVIRONMENT_IS_SHELL) { + + if ((typeof process == 'object' && typeof require === 'function') || typeof window == 'object' || typeof WorkerGlobalScope != 'undefined') throw new Error('not compiled for this environment (did you build to HTML and try to run it not on the web, or set ENVIRONMENT to something - like node - and run it someplace else - like on the web?)'); + +} else + +// Note that this includes Node.js workers when relevant (pthreads is enabled). +// Node.js workers are detected as a combination of ENVIRONMENT_IS_WORKER and +// ENVIRONMENT_IS_NODE. +if (ENVIRONMENT_IS_WEB || ENVIRONMENT_IS_WORKER) { + if (ENVIRONMENT_IS_WORKER) { // Check worker, not web, since window could be polyfilled + scriptDirectory = self.location.href; + } else if (typeof document != 'undefined' && document.currentScript) { // web + scriptDirectory = document.currentScript.src; + } + // blob urls look like blob:http://site.com/etc/etc and we cannot infer anything from them. + // otherwise, slice off the final part of the url to find the script directory. + // if scriptDirectory does not contain a slash, lastIndexOf will return -1, + // and scriptDirectory will correctly be replaced with an empty string. + // If scriptDirectory contains a query (starting with ?) or a fragment (starting with #), + // they are removed because they could contain a slash. + if (scriptDirectory.startsWith('blob:')) { + scriptDirectory = ''; + } else { + scriptDirectory = scriptDirectory.slice(0, scriptDirectory.replace(/[?#].*/, '').lastIndexOf('/')+1); + } + + if (!(typeof window == 'object' || typeof WorkerGlobalScope != 'undefined')) throw new Error('not compiled for this environment (did you build to HTML and try to run it not on the web, or set ENVIRONMENT to something - like node - and run it someplace else - like on the web?)'); + + { +// include: web_or_worker_shell_read.js +if (ENVIRONMENT_IS_WORKER) { + readBinary = (url) => { + var xhr = new XMLHttpRequest(); + xhr.open('GET', url, false); + xhr.responseType = 'arraybuffer'; + xhr.send(null); + return new Uint8Array(/** @type{!ArrayBuffer} */(xhr.response)); + }; + } + + readAsync = async (url) => { + // Fetch has some additional restrictions over XHR, like it can't be used on a file:// url. + // See https://github.com/github/fetch/pull/92#issuecomment-140665932 + // Cordova or Electron apps are typically loaded from a file:// url. + // So use XHR on webview if URL is a file URL. + if (isFileURI(url)) { + return new Promise((resolve, reject) => { + var xhr = new XMLHttpRequest(); + xhr.open('GET', url, true); + xhr.responseType = 'arraybuffer'; + xhr.onload = () => { + if (xhr.status == 200 || (xhr.status == 0 && xhr.response)) { // file URLs can return 0 + resolve(xhr.response); + return; + } + reject(xhr.status); + }; + xhr.onerror = reject; + xhr.send(null); + }); + } + var response = await fetch(url, { credentials: 'same-origin' }); + if (response.ok) { + return response.arrayBuffer(); + } + throw new Error(response.status + ' : ' + response.url); + }; +// end include: web_or_worker_shell_read.js + } +} else +{ + throw new Error('environment detection error'); +} + +var out = Module['print'] || console.log.bind(console); +var err = Module['printErr'] || console.error.bind(console); + +// Merge back in the overrides +Object.assign(Module, moduleOverrides); +// Free the object hierarchy contained in the overrides, this lets the GC +// reclaim data used. +moduleOverrides = null; +checkIncomingModuleAPI(); + +// Emit code to handle expected values on the Module object. This applies Module.x +// to the proper local x. This has two benefits: first, we only emit it if it is +// expected to arrive, and second, by using a local everywhere else that can be +// minified. + +if (Module['arguments']) arguments_ = Module['arguments'];legacyModuleProp('arguments', 'arguments_'); + +if (Module['thisProgram']) thisProgram = Module['thisProgram'];legacyModuleProp('thisProgram', 'thisProgram'); + +// perform assertions in shell.js after we set up out() and err(), as otherwise if an assertion fails it cannot print the message +// Assertions on removed incoming Module JS APIs. +assert(typeof Module['memoryInitializerPrefixURL'] == 'undefined', 'Module.memoryInitializerPrefixURL option was removed, use Module.locateFile instead'); +assert(typeof Module['pthreadMainPrefixURL'] == 'undefined', 'Module.pthreadMainPrefixURL option was removed, use Module.locateFile instead'); +assert(typeof Module['cdInitializerPrefixURL'] == 'undefined', 'Module.cdInitializerPrefixURL option was removed, use Module.locateFile instead'); +assert(typeof Module['filePackagePrefixURL'] == 'undefined', 'Module.filePackagePrefixURL option was removed, use Module.locateFile instead'); +assert(typeof Module['read'] == 'undefined', 'Module.read option was removed'); +assert(typeof Module['readAsync'] == 'undefined', 'Module.readAsync option was removed (modify readAsync in JS)'); +assert(typeof Module['readBinary'] == 'undefined', 'Module.readBinary option was removed (modify readBinary in JS)'); +assert(typeof Module['setWindowTitle'] == 'undefined', 'Module.setWindowTitle option was removed (modify emscripten_set_window_title in JS)'); +assert(typeof Module['TOTAL_MEMORY'] == 'undefined', 'Module.TOTAL_MEMORY has been renamed Module.INITIAL_MEMORY'); +legacyModuleProp('asm', 'wasmExports'); +legacyModuleProp('readAsync', 'readAsync'); +legacyModuleProp('readBinary', 'readBinary'); +legacyModuleProp('setWindowTitle', 'setWindowTitle'); +var IDBFS = 'IDBFS is no longer included by default; build with -lidbfs.js'; +var PROXYFS = 'PROXYFS is no longer included by default; build with -lproxyfs.js'; +var WORKERFS = 'WORKERFS is no longer included by default; build with -lworkerfs.js'; +var FETCHFS = 'FETCHFS is no longer included by default; build with -lfetchfs.js'; +var ICASEFS = 'ICASEFS is no longer included by default; build with -licasefs.js'; +var JSFILEFS = 'JSFILEFS is no longer included by default; build with -ljsfilefs.js'; +var OPFS = 'OPFS is no longer included by default; build with -lopfs.js'; + +var NODEFS = 'NODEFS is no longer included by default; build with -lnodefs.js'; + +assert(!ENVIRONMENT_IS_SHELL, 'shell environment detected but not enabled at build time. Add `shell` to `-sENVIRONMENT` to enable.'); + +// end include: shell.js + +// include: preamble.js +// === Preamble library stuff === + +// Documentation for the public APIs defined in this file must be updated in: +// site/source/docs/api_reference/preamble.js.rst +// A prebuilt local version of the documentation is available at: +// site/build/text/docs/api_reference/preamble.js.txt +// You can also build docs locally as HTML or other formats in site/ +// An online HTML version (which may be of a different version of Emscripten) +// is up at http://kripken.github.io/emscripten-site/docs/api_reference/preamble.js.html + +var wasmBinary = Module['wasmBinary'];legacyModuleProp('wasmBinary', 'wasmBinary'); + +if (typeof WebAssembly != 'object') { + err('no native wasm support detected'); +} + +// Wasm globals + +var wasmMemory; + +//======================================== +// Runtime essentials +//======================================== + +// whether we are quitting the application. no code should run after this. +// set in exit() and abort() +var ABORT = false; + +// set by exit() and abort(). Passed to 'onExit' handler. +// NOTE: This is also used as the process return code code in shell environments +// but only when noExitRuntime is false. +var EXITSTATUS; + +// In STRICT mode, we only define assert() when ASSERTIONS is set. i.e. we +// don't define it at all in release modes. This matches the behaviour of +// MINIMAL_RUNTIME. +// TODO(sbc): Make this the default even without STRICT enabled. +/** @type {function(*, string=)} */ +function assert(condition, text) { + if (!condition) { + abort('Assertion failed' + (text ? ': ' + text : '')); + } +} + +// We used to include malloc/free by default in the past. Show a helpful error in +// builds with assertions. +function _malloc() { + abort('malloc() called but not included in the build - add `_malloc` to EXPORTED_FUNCTIONS'); +} +function _free() { + // Show a helpful error since we used to include free by default in the past. + abort('free() called but not included in the build - add `_free` to EXPORTED_FUNCTIONS'); +} + +// Memory management + +var HEAP, +/** @type {!Int8Array} */ + HEAP8, +/** @type {!Uint8Array} */ + HEAPU8, +/** @type {!Int16Array} */ + HEAP16, +/** @type {!Uint16Array} */ + HEAPU16, +/** @type {!Int32Array} */ + HEAP32, +/** @type {!Uint32Array} */ + HEAPU32, +/** @type {!Float32Array} */ + HEAPF32, +/* BigInt64Array type is not correctly defined in closure +/** not-@type {!BigInt64Array} */ + HEAP64, +/* BigUint64Array type is not correctly defined in closure +/** not-t@type {!BigUint64Array} */ + HEAPU64, +/** @type {!Float64Array} */ + HEAPF64; + +var runtimeInitialized = false; + +/** + * Indicates whether filename is delivered via file protocol (as opposed to http/https) + * @noinline + */ +var isFileURI = (filename) => filename.startsWith('file://'); + +// include: runtime_shared.js +// include: runtime_stack_check.js +// Initializes the stack cookie. Called at the startup of main and at the startup of each thread in pthreads mode. +function writeStackCookie() { + var max = _emscripten_stack_get_end(); + assert((max & 3) == 0); + // If the stack ends at address zero we write our cookies 4 bytes into the + // stack. This prevents interference with SAFE_HEAP and ASAN which also + // monitor writes to address zero. + if (max == 0) { + max += 4; + } + // The stack grow downwards towards _emscripten_stack_get_end. + // We write cookies to the final two words in the stack and detect if they are + // ever overwritten. + HEAPU32[((max)>>2)] = 0x02135467; + HEAPU32[(((max)+(4))>>2)] = 0x89BACDFE; + // Also test the global address 0 for integrity. + HEAPU32[((0)>>2)] = 1668509029; +} + +function checkStackCookie() { + if (ABORT) return; + var max = _emscripten_stack_get_end(); + // See writeStackCookie(). + if (max == 0) { + max += 4; + } + var cookie1 = HEAPU32[((max)>>2)]; + var cookie2 = HEAPU32[(((max)+(4))>>2)]; + if (cookie1 != 0x02135467 || cookie2 != 0x89BACDFE) { + abort(`Stack overflow! Stack cookie has been overwritten at ${ptrToString(max)}, expected hex dwords 0x89BACDFE and 0x2135467, but received ${ptrToString(cookie2)} ${ptrToString(cookie1)}`); + } + // Also test the global address 0 for integrity. + if (HEAPU32[((0)>>2)] != 0x63736d65 /* 'emsc' */) { + abort('Runtime error: The application has corrupted its heap memory area (address zero)!'); + } +} +// end include: runtime_stack_check.js +// include: runtime_exceptions.js +// end include: runtime_exceptions.js +// include: runtime_debug.js +// Endianness check +(() => { + var h16 = new Int16Array(1); + var h8 = new Int8Array(h16.buffer); + h16[0] = 0x6373; + if (h8[0] !== 0x73 || h8[1] !== 0x63) throw 'Runtime error: expected the system to be little-endian! (Run with -sSUPPORT_BIG_ENDIAN to bypass)'; +})(); + +if (Module['ENVIRONMENT']) { + throw new Error('Module.ENVIRONMENT has been deprecated. To force the environment, use the ENVIRONMENT compile-time option (for example, -sENVIRONMENT=web or -sENVIRONMENT=node)'); +} + +function legacyModuleProp(prop, newName, incoming=true) { + if (!Object.getOwnPropertyDescriptor(Module, prop)) { + Object.defineProperty(Module, prop, { + configurable: true, + get() { + let extra = incoming ? ' (the initial value can be provided on Module, but after startup the value is only looked for on a local variable of that name)' : ''; + abort(`\`Module.${prop}\` has been replaced by \`${newName}\`` + extra); + + } + }); + } +} + +function consumedModuleProp(prop) { + if (!Object.getOwnPropertyDescriptor(Module, prop)) { + Object.defineProperty(Module, prop, { + configurable: true, + set() { + abort(`Attempt to set \`Module.${prop}\` after it has already been processed. This can happen, for example, when code is injected via '--post-js' rather than '--pre-js'`); + + } + }); + } +} + +function ignoredModuleProp(prop) { + if (Object.getOwnPropertyDescriptor(Module, prop)) { + abort(`\`Module.${prop}\` was supplied but \`${prop}\` not included in INCOMING_MODULE_JS_API`); + } +} + +// forcing the filesystem exports a few things by default +function isExportedByForceFilesystem(name) { + return name === 'FS_createPath' || + name === 'FS_createDataFile' || + name === 'FS_createPreloadedFile' || + name === 'FS_unlink' || + name === 'addRunDependency' || + // The old FS has some functionality that WasmFS lacks. + name === 'FS_createLazyFile' || + name === 'FS_createDevice' || + name === 'removeRunDependency'; +} + +/** + * Intercept access to a global symbol. This enables us to give informative + * warnings/errors when folks attempt to use symbols they did not include in + * their build, or no symbols that no longer exist. + */ +function hookGlobalSymbolAccess(sym, func) { + if (typeof globalThis != 'undefined' && !Object.getOwnPropertyDescriptor(globalThis, sym)) { + Object.defineProperty(globalThis, sym, { + configurable: true, + get() { + func(); + return undefined; + } + }); + } +} + +function missingGlobal(sym, msg) { + hookGlobalSymbolAccess(sym, () => { + warnOnce(`\`${sym}\` is not longer defined by emscripten. ${msg}`); + }); +} + +missingGlobal('buffer', 'Please use HEAP8.buffer or wasmMemory.buffer'); +missingGlobal('asm', 'Please use wasmExports instead'); + +function missingLibrarySymbol(sym) { + hookGlobalSymbolAccess(sym, () => { + // Can't `abort()` here because it would break code that does runtime + // checks. e.g. `if (typeof SDL === 'undefined')`. + var msg = `\`${sym}\` is a library symbol and not included by default; add it to your library.js __deps or to DEFAULT_LIBRARY_FUNCS_TO_INCLUDE on the command line`; + // DEFAULT_LIBRARY_FUNCS_TO_INCLUDE requires the name as it appears in + // library.js, which means $name for a JS name with no prefix, or name + // for a JS name like _name. + var librarySymbol = sym; + if (!librarySymbol.startsWith('_')) { + librarySymbol = '$' + sym; + } + msg += ` (e.g. -sDEFAULT_LIBRARY_FUNCS_TO_INCLUDE='${librarySymbol}')`; + if (isExportedByForceFilesystem(sym)) { + msg += '. Alternatively, forcing filesystem support (-sFORCE_FILESYSTEM) can export this for you'; + } + warnOnce(msg); + }); + + // Any symbol that is not included from the JS library is also (by definition) + // not exported on the Module object. + unexportedRuntimeSymbol(sym); +} + +function unexportedRuntimeSymbol(sym) { + if (!Object.getOwnPropertyDescriptor(Module, sym)) { + Object.defineProperty(Module, sym, { + configurable: true, + get() { + var msg = `'${sym}' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the Emscripten FAQ)`; + if (isExportedByForceFilesystem(sym)) { + msg += '. Alternatively, forcing filesystem support (-sFORCE_FILESYSTEM) can export this for you'; + } + abort(msg); + } + }); + } +} + +var runtimeDebug = true; // Switch to false at runtime to disable logging at the right times + +// Used by XXXXX_DEBUG settings to output debug messages. +function dbg(...args) { + if (!runtimeDebug && typeof runtimeDebug != 'undefined') return; + // TODO(sbc): Make this configurable somehow. Its not always convenient for + // logging to show up as warnings. + console.warn(...args); +} +// end include: runtime_debug.js +// include: memoryprofiler.js +// end include: memoryprofiler.js + + +function updateMemoryViews() { + var b = wasmMemory.buffer; + Module['HEAP8'] = HEAP8 = new Int8Array(b); + Module['HEAP16'] = HEAP16 = new Int16Array(b); + Module['HEAPU8'] = HEAPU8 = new Uint8Array(b); + Module['HEAPU16'] = HEAPU16 = new Uint16Array(b); + Module['HEAP32'] = HEAP32 = new Int32Array(b); + Module['HEAPU32'] = HEAPU32 = new Uint32Array(b); + Module['HEAPF32'] = HEAPF32 = new Float32Array(b); + Module['HEAPF64'] = HEAPF64 = new Float64Array(b); + Module['HEAP64'] = HEAP64 = new BigInt64Array(b); + Module['HEAPU64'] = HEAPU64 = new BigUint64Array(b); +} + +// end include: runtime_shared.js +assert(!Module['STACK_SIZE'], 'STACK_SIZE can no longer be set at runtime. Use -sSTACK_SIZE at link time') + +assert(typeof Int32Array != 'undefined' && typeof Float64Array !== 'undefined' && Int32Array.prototype.subarray != undefined && Int32Array.prototype.set != undefined, + 'JS engine does not provide full typed array support'); + +// If memory is defined in wasm, the user can't provide it, or set INITIAL_MEMORY +assert(!Module['wasmMemory'], 'Use of `wasmMemory` detected. Use -sIMPORTED_MEMORY to define wasmMemory externally'); +assert(!Module['INITIAL_MEMORY'], 'Detected runtime INITIAL_MEMORY setting. Use -sIMPORTED_MEMORY to define wasmMemory dynamically'); + +function preRun() { + if (Module['preRun']) { + if (typeof Module['preRun'] == 'function') Module['preRun'] = [Module['preRun']]; + while (Module['preRun'].length) { + addOnPreRun(Module['preRun'].shift()); + } + } + consumedModuleProp('preRun'); + callRuntimeCallbacks(onPreRuns); +} + +function initRuntime() { + assert(!runtimeInitialized); + runtimeInitialized = true; + + checkStackCookie(); + + if (!Module['noFSInit'] && !FS.initialized) FS.init(); +TTY.init(); + + wasmExports['__wasm_call_ctors'](); + + FS.ignorePermissions = false; +} + +function preMain() { + checkStackCookie(); + +} + +function postRun() { + checkStackCookie(); + + if (Module['postRun']) { + if (typeof Module['postRun'] == 'function') Module['postRun'] = [Module['postRun']]; + while (Module['postRun'].length) { + addOnPostRun(Module['postRun'].shift()); + } + } + consumedModuleProp('postRun'); + + callRuntimeCallbacks(onPostRuns); +} + +// A counter of dependencies for calling run(). If we need to +// do asynchronous work before running, increment this and +// decrement it. Incrementing must happen in a place like +// Module.preRun (used by emcc to add file preloading). +// Note that you can add dependencies in preRun, even though +// it happens right before run - run will be postponed until +// the dependencies are met. +var runDependencies = 0; +var dependenciesFulfilled = null; // overridden to take different actions when all run dependencies are fulfilled +var runDependencyTracking = {}; +var runDependencyWatcher = null; + +function getUniqueRunDependency(id) { + var orig = id; + while (1) { + if (!runDependencyTracking[id]) return id; + id = orig + Math.random(); + } +} + +function addRunDependency(id) { + runDependencies++; + + Module['monitorRunDependencies']?.(runDependencies); + + if (id) { + assert(!runDependencyTracking[id]); + runDependencyTracking[id] = 1; + if (runDependencyWatcher === null && typeof setInterval != 'undefined') { + // Check for missing dependencies every few seconds + runDependencyWatcher = setInterval(() => { + if (ABORT) { + clearInterval(runDependencyWatcher); + runDependencyWatcher = null; + return; + } + var shown = false; + for (var dep in runDependencyTracking) { + if (!shown) { + shown = true; + err('still waiting on run dependencies:'); + } + err(`dependency: ${dep}`); + } + if (shown) { + err('(end of list)'); + } + }, 10000); + } + } else { + err('warning: run dependency added without ID'); + } +} + +function removeRunDependency(id) { + runDependencies--; + + Module['monitorRunDependencies']?.(runDependencies); + + if (id) { + assert(runDependencyTracking[id]); + delete runDependencyTracking[id]; + } else { + err('warning: run dependency removed without ID'); + } + if (runDependencies == 0) { + if (runDependencyWatcher !== null) { + clearInterval(runDependencyWatcher); + runDependencyWatcher = null; + } + if (dependenciesFulfilled) { + var callback = dependenciesFulfilled; + dependenciesFulfilled = null; + callback(); // can add another dependenciesFulfilled + } + } +} + +/** @param {string|number=} what */ +function abort(what) { + Module['onAbort']?.(what); + + what = 'Aborted(' + what + ')'; + // TODO(sbc): Should we remove printing and leave it up to whoever + // catches the exception? + err(what); + + ABORT = true; + + // Use a wasm runtime error, because a JS error might be seen as a foreign + // exception, which means we'd run destructors on it. We need the error to + // simply make the program stop. + // FIXME This approach does not work in Wasm EH because it currently does not assume + // all RuntimeErrors are from traps; it decides whether a RuntimeError is from + // a trap or not based on a hidden field within the object. So at the moment + // we don't have a way of throwing a wasm trap from JS. TODO Make a JS API that + // allows this in the wasm spec. + + // Suppress closure compiler warning here. Closure compiler's builtin extern + // definition for WebAssembly.RuntimeError claims it takes no arguments even + // though it can. + // TODO(https://github.com/google/closure-compiler/pull/3913): Remove if/when upstream closure gets fixed. + /** @suppress {checkTypes} */ + var e = new WebAssembly.RuntimeError(what); + + // Throw the error whether or not MODULARIZE is set because abort is used + // in code paths apart from instantiation where an exception is expected + // to be thrown when abort is called. + throw e; +} + +function createExportWrapper(name, nargs) { + return (...args) => { + assert(runtimeInitialized, `native function \`${name}\` called before runtime initialization`); + var f = wasmExports[name]; + assert(f, `exported native function \`${name}\` not found`); + // Only assert for too many arguments. Too few can be valid since the missing arguments will be zero filled. + assert(args.length <= nargs, `native function \`${name}\` called with ${args.length} args but expects ${nargs}`); + return f(...args); + }; +} + +var wasmBinaryFile; + +function findWasmBinary() { + return locateFile('minigzip64.wasm'); +} + +function getBinarySync(file) { + if (file == wasmBinaryFile && wasmBinary) { + return new Uint8Array(wasmBinary); + } + if (readBinary) { + return readBinary(file); + } + throw 'both async and sync fetching of the wasm failed'; +} + +async function getWasmBinary(binaryFile) { + // If we don't have the binary yet, load it asynchronously using readAsync. + if (!wasmBinary) { + // Fetch the binary using readAsync + try { + var response = await readAsync(binaryFile); + return new Uint8Array(response); + } catch { + // Fall back to getBinarySync below; + } + } + + // Otherwise, getBinarySync should be able to get it synchronously + return getBinarySync(binaryFile); +} + +async function instantiateArrayBuffer(binaryFile, imports) { + try { + var binary = await getWasmBinary(binaryFile); + var instance = await WebAssembly.instantiate(binary, imports); + return instance; + } catch (reason) { + err(`failed to asynchronously prepare wasm: ${reason}`); + + // Warn on some common problems. + if (isFileURI(wasmBinaryFile)) { + err(`warning: Loading from a file URI (${wasmBinaryFile}) is not supported in most browsers. See https://emscripten.org/docs/getting_started/FAQ.html#how-do-i-run-a-local-webserver-for-testing-why-does-my-program-stall-in-downloading-or-preparing`); + } + abort(reason); + } +} + +async function instantiateAsync(binary, binaryFile, imports) { + if (!binary && typeof WebAssembly.instantiateStreaming == 'function' + // Don't use streaming for file:// delivered objects in a webview, fetch them synchronously. + && !isFileURI(binaryFile) + // Avoid instantiateStreaming() on Node.js environment for now, as while + // Node.js v18.1.0 implements it, it does not have a full fetch() + // implementation yet. + // + // Reference: + // https://github.com/emscripten-core/emscripten/pull/16917 + && !ENVIRONMENT_IS_NODE + ) { + try { + var response = fetch(binaryFile, { credentials: 'same-origin' }); + var instantiationResult = await WebAssembly.instantiateStreaming(response, imports); + return instantiationResult; + } catch (reason) { + // We expect the most common failure cause to be a bad MIME type for the binary, + // in which case falling back to ArrayBuffer instantiation should work. + err(`wasm streaming compile failed: ${reason}`); + err('falling back to ArrayBuffer instantiation'); + // fall back of instantiateArrayBuffer below + }; + } + return instantiateArrayBuffer(binaryFile, imports); +} + +function getWasmImports() { + // prepare imports + return { + 'env': wasmImports, + 'wasi_snapshot_preview1': wasmImports, + } +} + +// Create the wasm instance. +// Receives the wasm imports, returns the exports. +async function createWasm() { + // Load the wasm module and create an instance of using native support in the JS engine. + // handle a generated wasm instance, receiving its exports and + // performing other necessary setup + /** @param {WebAssembly.Module=} module*/ + function receiveInstance(instance, module) { + wasmExports = instance.exports; + + + + wasmMemory = wasmExports['memory']; + + assert(wasmMemory, 'memory not found in wasm exports'); + updateMemoryViews(); + + removeRunDependency('wasm-instantiate'); + return wasmExports; + } + // wait for the pthread pool (if any) + addRunDependency('wasm-instantiate'); + + // Prefer streaming instantiation if available. + // Async compilation can be confusing when an error on the page overwrites Module + // (for example, if the order of elements is wrong, and the one defining Module is + // later), so we save Module and check it later. + var trueModule = Module; + function receiveInstantiationResult(result) { + // 'result' is a ResultObject object which has both the module and instance. + // receiveInstance() will swap in the exports (to Module.asm) so they can be called + assert(Module === trueModule, 'the Module object should not be replaced during async compilation - perhaps the order of HTML elements is wrong?'); + trueModule = null; + // TODO: Due to Closure regression https://github.com/google/closure-compiler/issues/3193, the above line no longer optimizes out down to the following line. + // When the regression is fixed, can restore the above PTHREADS-enabled path. + return receiveInstance(result['instance']); + } + + var info = getWasmImports(); + + // User shell pages can write their own Module.instantiateWasm = function(imports, successCallback) callback + // to manually instantiate the Wasm module themselves. This allows pages to + // run the instantiation parallel to any other async startup actions they are + // performing. + // Also pthreads and wasm workers initialize the wasm instance through this + // path. + if (Module['instantiateWasm']) { + return new Promise((resolve, reject) => { + try { + Module['instantiateWasm'](info, (mod, inst) => { + receiveInstance(mod, inst); + resolve(mod.exports); + }); + } catch(e) { + err(`Module.instantiateWasm callback failed with error: ${e}`); + reject(e); + } + }); + } + + wasmBinaryFile ??= findWasmBinary(); + var result = await instantiateAsync(wasmBinary, wasmBinaryFile, info); + var exports = receiveInstantiationResult(result); + return exports; +} + +// end include: preamble.js + +// Begin JS library code + + + class ExitStatus { + name = 'ExitStatus'; + constructor(status) { + this.message = `Program terminated with exit(${status})`; + this.status = status; + } + } + + var callRuntimeCallbacks = (callbacks) => { + while (callbacks.length > 0) { + // Pass the module as the first argument. + callbacks.shift()(Module); + } + }; + var onPostRuns = []; + var addOnPostRun = (cb) => onPostRuns.unshift(cb); + + var onPreRuns = []; + var addOnPreRun = (cb) => onPreRuns.unshift(cb); + + + + /** + * @param {number} ptr + * @param {string} type + */ + function getValue(ptr, type = 'i8') { + if (type.endsWith('*')) type = '*'; + switch (type) { + case 'i1': return HEAP8[ptr]; + case 'i8': return HEAP8[ptr]; + case 'i16': return HEAP16[((ptr)>>1)]; + case 'i32': return HEAP32[((ptr)>>2)]; + case 'i64': return HEAP64[((ptr)>>3)]; + case 'float': return HEAPF32[((ptr)>>2)]; + case 'double': return HEAPF64[((ptr)>>3)]; + case '*': return HEAPU32[((ptr)>>2)]; + default: abort(`invalid type for getValue: ${type}`); + } + } + + var noExitRuntime = Module['noExitRuntime'] || true; + + var ptrToString = (ptr) => { + assert(typeof ptr === 'number'); + // With CAN_ADDRESS_2GB or MEMORY64, pointers are already unsigned. + ptr >>>= 0; + return '0x' + ptr.toString(16).padStart(8, '0'); + }; + + + /** + * @param {number} ptr + * @param {number} value + * @param {string} type + */ + function setValue(ptr, value, type = 'i8') { + if (type.endsWith('*')) type = '*'; + switch (type) { + case 'i1': HEAP8[ptr] = value; break; + case 'i8': HEAP8[ptr] = value; break; + case 'i16': HEAP16[((ptr)>>1)] = value; break; + case 'i32': HEAP32[((ptr)>>2)] = value; break; + case 'i64': HEAP64[((ptr)>>3)] = BigInt(value); break; + case 'float': HEAPF32[((ptr)>>2)] = value; break; + case 'double': HEAPF64[((ptr)>>3)] = value; break; + case '*': HEAPU32[((ptr)>>2)] = value; break; + default: abort(`invalid type for setValue: ${type}`); + } + } + + var stackRestore = (val) => __emscripten_stack_restore(val); + + var stackSave = () => _emscripten_stack_get_current(); + + var warnOnce = (text) => { + warnOnce.shown ||= {}; + if (!warnOnce.shown[text]) { + warnOnce.shown[text] = 1; + if (ENVIRONMENT_IS_NODE) text = 'warning: ' + text; + err(text); + } + }; + + /** @suppress {duplicate } */ + var syscallGetVarargI = () => { + assert(SYSCALLS.varargs != undefined); + // the `+` prepended here is necessary to convince the JSCompiler that varargs is indeed a number. + var ret = HEAP32[((+SYSCALLS.varargs)>>2)]; + SYSCALLS.varargs += 4; + return ret; + }; + var syscallGetVarargP = syscallGetVarargI; + + + var PATH = { + isAbs:(path) => path.charAt(0) === '/', + splitPath:(filename) => { + var splitPathRe = /^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/; + return splitPathRe.exec(filename).slice(1); + }, + normalizeArray:(parts, allowAboveRoot) => { + // if the path tries to go above the root, `up` ends up > 0 + var up = 0; + for (var i = parts.length - 1; i >= 0; i--) { + var last = parts[i]; + if (last === '.') { + parts.splice(i, 1); + } else if (last === '..') { + parts.splice(i, 1); + up++; + } else if (up) { + parts.splice(i, 1); + up--; + } + } + // if the path is allowed to go above the root, restore leading ..s + if (allowAboveRoot) { + for (; up; up--) { + parts.unshift('..'); + } + } + return parts; + }, + normalize:(path) => { + var isAbsolute = PATH.isAbs(path), + trailingSlash = path.slice(-1) === '/'; + // Normalize the path + path = PATH.normalizeArray(path.split('/').filter((p) => !!p), !isAbsolute).join('/'); + if (!path && !isAbsolute) { + path = '.'; + } + if (path && trailingSlash) { + path += '/'; + } + return (isAbsolute ? '/' : '') + path; + }, + dirname:(path) => { + var result = PATH.splitPath(path), + root = result[0], + dir = result[1]; + if (!root && !dir) { + // No dirname whatsoever + return '.'; + } + if (dir) { + // It has a dirname, strip trailing slash + dir = dir.slice(0, -1); + } + return root + dir; + }, + basename:(path) => path && path.match(/([^\/]+|\/)\/*$/)[1], + join:(...paths) => PATH.normalize(paths.join('/')), + join2:(l, r) => PATH.normalize(l + '/' + r), + }; + + var initRandomFill = () => { + // This block is not needed on v19+ since crypto.getRandomValues is builtin + if (ENVIRONMENT_IS_NODE) { + var nodeCrypto = require('crypto'); + return (view) => nodeCrypto.randomFillSync(view); + } + + return (view) => crypto.getRandomValues(view); + }; + var randomFill = (view) => { + // Lazily init on the first invocation. + (randomFill = initRandomFill())(view); + }; + + + + var PATH_FS = { + resolve:(...args) => { + var resolvedPath = '', + resolvedAbsolute = false; + for (var i = args.length - 1; i >= -1 && !resolvedAbsolute; i--) { + var path = (i >= 0) ? args[i] : FS.cwd(); + // Skip empty and invalid entries + if (typeof path != 'string') { + throw new TypeError('Arguments to path.resolve must be strings'); + } else if (!path) { + return ''; // an invalid portion invalidates the whole thing + } + resolvedPath = path + '/' + resolvedPath; + resolvedAbsolute = PATH.isAbs(path); + } + // At this point the path should be resolved to a full absolute path, but + // handle relative paths to be safe (might happen when process.cwd() fails) + resolvedPath = PATH.normalizeArray(resolvedPath.split('/').filter((p) => !!p), !resolvedAbsolute).join('/'); + return ((resolvedAbsolute ? '/' : '') + resolvedPath) || '.'; + }, + relative:(from, to) => { + from = PATH_FS.resolve(from).slice(1); + to = PATH_FS.resolve(to).slice(1); + function trim(arr) { + var start = 0; + for (; start < arr.length; start++) { + if (arr[start] !== '') break; + } + var end = arr.length - 1; + for (; end >= 0; end--) { + if (arr[end] !== '') break; + } + if (start > end) return []; + return arr.slice(start, end - start + 1); + } + var fromParts = trim(from.split('/')); + var toParts = trim(to.split('/')); + var length = Math.min(fromParts.length, toParts.length); + var samePartsLength = length; + for (var i = 0; i < length; i++) { + if (fromParts[i] !== toParts[i]) { + samePartsLength = i; + break; + } + } + var outputParts = []; + for (var i = samePartsLength; i < fromParts.length; i++) { + outputParts.push('..'); + } + outputParts = outputParts.concat(toParts.slice(samePartsLength)); + return outputParts.join('/'); + }, + }; + + + var UTF8Decoder = typeof TextDecoder != 'undefined' ? new TextDecoder() : undefined; + + /** + * Given a pointer 'idx' to a null-terminated UTF8-encoded string in the given + * array that contains uint8 values, returns a copy of that string as a + * Javascript String object. + * heapOrArray is either a regular array, or a JavaScript typed array view. + * @param {number=} idx + * @param {number=} maxBytesToRead + * @return {string} + */ + var UTF8ArrayToString = (heapOrArray, idx = 0, maxBytesToRead = NaN) => { + var endIdx = idx + maxBytesToRead; + var endPtr = idx; + // TextDecoder needs to know the byte length in advance, it doesn't stop on + // null terminator by itself. Also, use the length info to avoid running tiny + // strings through TextDecoder, since .subarray() allocates garbage. + // (As a tiny code save trick, compare endPtr against endIdx using a negation, + // so that undefined/NaN means Infinity) + while (heapOrArray[endPtr] && !(endPtr >= endIdx)) ++endPtr; + + if (endPtr - idx > 16 && heapOrArray.buffer && UTF8Decoder) { + return UTF8Decoder.decode(heapOrArray.subarray(idx, endPtr)); + } + var str = ''; + // If building with TextDecoder, we have already computed the string length + // above, so test loop end condition against that + while (idx < endPtr) { + // For UTF8 byte structure, see: + // http://en.wikipedia.org/wiki/UTF-8#Description + // https://www.ietf.org/rfc/rfc2279.txt + // https://tools.ietf.org/html/rfc3629 + var u0 = heapOrArray[idx++]; + if (!(u0 & 0x80)) { str += String.fromCharCode(u0); continue; } + var u1 = heapOrArray[idx++] & 63; + if ((u0 & 0xE0) == 0xC0) { str += String.fromCharCode(((u0 & 31) << 6) | u1); continue; } + var u2 = heapOrArray[idx++] & 63; + if ((u0 & 0xF0) == 0xE0) { + u0 = ((u0 & 15) << 12) | (u1 << 6) | u2; + } else { + if ((u0 & 0xF8) != 0xF0) warnOnce('Invalid UTF-8 leading byte ' + ptrToString(u0) + ' encountered when deserializing a UTF-8 string in wasm memory to a JS string!'); + u0 = ((u0 & 7) << 18) | (u1 << 12) | (u2 << 6) | (heapOrArray[idx++] & 63); + } + + if (u0 < 0x10000) { + str += String.fromCharCode(u0); + } else { + var ch = u0 - 0x10000; + str += String.fromCharCode(0xD800 | (ch >> 10), 0xDC00 | (ch & 0x3FF)); + } + } + return str; + }; + + var FS_stdin_getChar_buffer = []; + + var lengthBytesUTF8 = (str) => { + var len = 0; + for (var i = 0; i < str.length; ++i) { + // Gotcha: charCodeAt returns a 16-bit word that is a UTF-16 encoded code + // unit, not a Unicode code point of the character! So decode + // UTF16->UTF32->UTF8. + // See http://unicode.org/faq/utf_bom.html#utf16-3 + var c = str.charCodeAt(i); // possibly a lead surrogate + if (c <= 0x7F) { + len++; + } else if (c <= 0x7FF) { + len += 2; + } else if (c >= 0xD800 && c <= 0xDFFF) { + len += 4; ++i; + } else { + len += 3; + } + } + return len; + }; + + var stringToUTF8Array = (str, heap, outIdx, maxBytesToWrite) => { + assert(typeof str === 'string', `stringToUTF8Array expects a string (got ${typeof str})`); + // Parameter maxBytesToWrite is not optional. Negative values, 0, null, + // undefined and false each don't write out any bytes. + if (!(maxBytesToWrite > 0)) + return 0; + + var startIdx = outIdx; + var endIdx = outIdx + maxBytesToWrite - 1; // -1 for string null terminator. + for (var i = 0; i < str.length; ++i) { + // Gotcha: charCodeAt returns a 16-bit word that is a UTF-16 encoded code + // unit, not a Unicode code point of the character! So decode + // UTF16->UTF32->UTF8. + // See http://unicode.org/faq/utf_bom.html#utf16-3 + // For UTF8 byte structure, see http://en.wikipedia.org/wiki/UTF-8#Description + // and https://www.ietf.org/rfc/rfc2279.txt + // and https://tools.ietf.org/html/rfc3629 + var u = str.charCodeAt(i); // possibly a lead surrogate + if (u >= 0xD800 && u <= 0xDFFF) { + var u1 = str.charCodeAt(++i); + u = 0x10000 + ((u & 0x3FF) << 10) | (u1 & 0x3FF); + } + if (u <= 0x7F) { + if (outIdx >= endIdx) break; + heap[outIdx++] = u; + } else if (u <= 0x7FF) { + if (outIdx + 1 >= endIdx) break; + heap[outIdx++] = 0xC0 | (u >> 6); + heap[outIdx++] = 0x80 | (u & 63); + } else if (u <= 0xFFFF) { + if (outIdx + 2 >= endIdx) break; + heap[outIdx++] = 0xE0 | (u >> 12); + heap[outIdx++] = 0x80 | ((u >> 6) & 63); + heap[outIdx++] = 0x80 | (u & 63); + } else { + if (outIdx + 3 >= endIdx) break; + if (u > 0x10FFFF) warnOnce('Invalid Unicode code point ' + ptrToString(u) + ' encountered when serializing a JS string to a UTF-8 string in wasm memory! (Valid unicode code points should be in range 0-0x10FFFF).'); + heap[outIdx++] = 0xF0 | (u >> 18); + heap[outIdx++] = 0x80 | ((u >> 12) & 63); + heap[outIdx++] = 0x80 | ((u >> 6) & 63); + heap[outIdx++] = 0x80 | (u & 63); + } + } + // Null-terminate the pointer to the buffer. + heap[outIdx] = 0; + return outIdx - startIdx; + }; + /** @type {function(string, boolean=, number=)} */ + var intArrayFromString = (stringy, dontAddNull, length) => { + var len = length > 0 ? length : lengthBytesUTF8(stringy)+1; + var u8array = new Array(len); + var numBytesWritten = stringToUTF8Array(stringy, u8array, 0, u8array.length); + if (dontAddNull) u8array.length = numBytesWritten; + return u8array; + }; + var FS_stdin_getChar = () => { + if (!FS_stdin_getChar_buffer.length) { + var result = null; + if (ENVIRONMENT_IS_NODE) { + // we will read data by chunks of BUFSIZE + var BUFSIZE = 256; + var buf = Buffer.alloc(BUFSIZE); + var bytesRead = 0; + + // For some reason we must suppress a closure warning here, even though + // fd definitely exists on process.stdin, and is even the proper way to + // get the fd of stdin, + // https://github.com/nodejs/help/issues/2136#issuecomment-523649904 + // This started to happen after moving this logic out of library_tty.js, + // so it is related to the surrounding code in some unclear manner. + /** @suppress {missingProperties} */ + var fd = process.stdin.fd; + + try { + bytesRead = fs.readSync(fd, buf, 0, BUFSIZE); + } catch(e) { + // Cross-platform differences: on Windows, reading EOF throws an + // exception, but on other OSes, reading EOF returns 0. Uniformize + // behavior by treating the EOF exception to return 0. + if (e.toString().includes('EOF')) bytesRead = 0; + else throw e; + } + + if (bytesRead > 0) { + result = buf.slice(0, bytesRead).toString('utf-8'); + } + } else + if (typeof window != 'undefined' && + typeof window.prompt == 'function') { + // Browser. + result = window.prompt('Input: '); // returns null on cancel + if (result !== null) { + result += '\n'; + } + } else + {} + if (!result) { + return null; + } + FS_stdin_getChar_buffer = intArrayFromString(result, true); + } + return FS_stdin_getChar_buffer.shift(); + }; + var TTY = { + ttys:[], + init() { + // https://github.com/emscripten-core/emscripten/pull/1555 + // if (ENVIRONMENT_IS_NODE) { + // // currently, FS.init does not distinguish if process.stdin is a file or TTY + // // device, it always assumes it's a TTY device. because of this, we're forcing + // // process.stdin to UTF8 encoding to at least make stdin reading compatible + // // with text files until FS.init can be refactored. + // process.stdin.setEncoding('utf8'); + // } + }, + shutdown() { + // https://github.com/emscripten-core/emscripten/pull/1555 + // if (ENVIRONMENT_IS_NODE) { + // // inolen: any idea as to why node -e 'process.stdin.read()' wouldn't exit immediately (with process.stdin being a tty)? + // // isaacs: because now it's reading from the stream, you've expressed interest in it, so that read() kicks off a _read() which creates a ReadReq operation + // // inolen: I thought read() in that case was a synchronous operation that just grabbed some amount of buffered data if it exists? + // // isaacs: it is. but it also triggers a _read() call, which calls readStart() on the handle + // // isaacs: do process.stdin.pause() and i'd think it'd probably close the pending call + // process.stdin.pause(); + // } + }, + register(dev, ops) { + TTY.ttys[dev] = { input: [], output: [], ops: ops }; + FS.registerDevice(dev, TTY.stream_ops); + }, + stream_ops:{ + open(stream) { + var tty = TTY.ttys[stream.node.rdev]; + if (!tty) { + throw new FS.ErrnoError(43); + } + stream.tty = tty; + stream.seekable = false; + }, + close(stream) { + // flush any pending line data + stream.tty.ops.fsync(stream.tty); + }, + fsync(stream) { + stream.tty.ops.fsync(stream.tty); + }, + read(stream, buffer, offset, length, pos /* ignored */) { + if (!stream.tty || !stream.tty.ops.get_char) { + throw new FS.ErrnoError(60); + } + var bytesRead = 0; + for (var i = 0; i < length; i++) { + var result; + try { + result = stream.tty.ops.get_char(stream.tty); + } catch (e) { + throw new FS.ErrnoError(29); + } + if (result === undefined && bytesRead === 0) { + throw new FS.ErrnoError(6); + } + if (result === null || result === undefined) break; + bytesRead++; + buffer[offset+i] = result; + } + if (bytesRead) { + stream.node.atime = Date.now(); + } + return bytesRead; + }, + write(stream, buffer, offset, length, pos) { + if (!stream.tty || !stream.tty.ops.put_char) { + throw new FS.ErrnoError(60); + } + try { + for (var i = 0; i < length; i++) { + stream.tty.ops.put_char(stream.tty, buffer[offset+i]); + } + } catch (e) { + throw new FS.ErrnoError(29); + } + if (length) { + stream.node.mtime = stream.node.ctime = Date.now(); + } + return i; + }, + }, + default_tty_ops:{ + get_char(tty) { + return FS_stdin_getChar(); + }, + put_char(tty, val) { + if (val === null || val === 10) { + out(UTF8ArrayToString(tty.output)); + tty.output = []; + } else { + if (val != 0) tty.output.push(val); // val == 0 would cut text output off in the middle. + } + }, + fsync(tty) { + if (tty.output?.length > 0) { + out(UTF8ArrayToString(tty.output)); + tty.output = []; + } + }, + ioctl_tcgets(tty) { + // typical setting + return { + c_iflag: 25856, + c_oflag: 5, + c_cflag: 191, + c_lflag: 35387, + c_cc: [ + 0x03, 0x1c, 0x7f, 0x15, 0x04, 0x00, 0x01, 0x00, 0x11, 0x13, 0x1a, 0x00, + 0x12, 0x0f, 0x17, 0x16, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + ] + }; + }, + ioctl_tcsets(tty, optional_actions, data) { + // currently just ignore + return 0; + }, + ioctl_tiocgwinsz(tty) { + return [24, 80]; + }, + }, + default_tty1_ops:{ + put_char(tty, val) { + if (val === null || val === 10) { + err(UTF8ArrayToString(tty.output)); + tty.output = []; + } else { + if (val != 0) tty.output.push(val); + } + }, + fsync(tty) { + if (tty.output?.length > 0) { + err(UTF8ArrayToString(tty.output)); + tty.output = []; + } + }, + }, + }; + + + var mmapAlloc = (size) => { + abort('internal error: mmapAlloc called but `emscripten_builtin_memalign` native symbol not exported'); + }; + var MEMFS = { + ops_table:null, + mount(mount) { + return MEMFS.createNode(null, '/', 16895, 0); + }, + createNode(parent, name, mode, dev) { + if (FS.isBlkdev(mode) || FS.isFIFO(mode)) { + // no supported + throw new FS.ErrnoError(63); + } + MEMFS.ops_table ||= { + dir: { + node: { + getattr: MEMFS.node_ops.getattr, + setattr: MEMFS.node_ops.setattr, + lookup: MEMFS.node_ops.lookup, + mknod: MEMFS.node_ops.mknod, + rename: MEMFS.node_ops.rename, + unlink: MEMFS.node_ops.unlink, + rmdir: MEMFS.node_ops.rmdir, + readdir: MEMFS.node_ops.readdir, + symlink: MEMFS.node_ops.symlink + }, + stream: { + llseek: MEMFS.stream_ops.llseek + } + }, + file: { + node: { + getattr: MEMFS.node_ops.getattr, + setattr: MEMFS.node_ops.setattr + }, + stream: { + llseek: MEMFS.stream_ops.llseek, + read: MEMFS.stream_ops.read, + write: MEMFS.stream_ops.write, + mmap: MEMFS.stream_ops.mmap, + msync: MEMFS.stream_ops.msync + } + }, + link: { + node: { + getattr: MEMFS.node_ops.getattr, + setattr: MEMFS.node_ops.setattr, + readlink: MEMFS.node_ops.readlink + }, + stream: {} + }, + chrdev: { + node: { + getattr: MEMFS.node_ops.getattr, + setattr: MEMFS.node_ops.setattr + }, + stream: FS.chrdev_stream_ops + } + }; + var node = FS.createNode(parent, name, mode, dev); + if (FS.isDir(node.mode)) { + node.node_ops = MEMFS.ops_table.dir.node; + node.stream_ops = MEMFS.ops_table.dir.stream; + node.contents = {}; + } else if (FS.isFile(node.mode)) { + node.node_ops = MEMFS.ops_table.file.node; + node.stream_ops = MEMFS.ops_table.file.stream; + node.usedBytes = 0; // The actual number of bytes used in the typed array, as opposed to contents.length which gives the whole capacity. + // When the byte data of the file is populated, this will point to either a typed array, or a normal JS array. Typed arrays are preferred + // for performance, and used by default. However, typed arrays are not resizable like normal JS arrays are, so there is a small disk size + // penalty involved for appending file writes that continuously grow a file similar to std::vector capacity vs used -scheme. + node.contents = null; + } else if (FS.isLink(node.mode)) { + node.node_ops = MEMFS.ops_table.link.node; + node.stream_ops = MEMFS.ops_table.link.stream; + } else if (FS.isChrdev(node.mode)) { + node.node_ops = MEMFS.ops_table.chrdev.node; + node.stream_ops = MEMFS.ops_table.chrdev.stream; + } + node.atime = node.mtime = node.ctime = Date.now(); + // add the new node to the parent + if (parent) { + parent.contents[name] = node; + parent.atime = parent.mtime = parent.ctime = node.atime; + } + return node; + }, + getFileDataAsTypedArray(node) { + if (!node.contents) return new Uint8Array(0); + if (node.contents.subarray) return node.contents.subarray(0, node.usedBytes); // Make sure to not return excess unused bytes. + return new Uint8Array(node.contents); + }, + expandFileStorage(node, newCapacity) { + var prevCapacity = node.contents ? node.contents.length : 0; + if (prevCapacity >= newCapacity) return; // No need to expand, the storage was already large enough. + // Don't expand strictly to the given requested limit if it's only a very small increase, but instead geometrically grow capacity. + // For small filesizes (<1MB), perform size*2 geometric increase, but for large sizes, do a much more conservative size*1.125 increase to + // avoid overshooting the allocation cap by a very large margin. + var CAPACITY_DOUBLING_MAX = 1024 * 1024; + newCapacity = Math.max(newCapacity, (prevCapacity * (prevCapacity < CAPACITY_DOUBLING_MAX ? 2.0 : 1.125)) >>> 0); + if (prevCapacity != 0) newCapacity = Math.max(newCapacity, 256); // At minimum allocate 256b for each file when expanding. + var oldContents = node.contents; + node.contents = new Uint8Array(newCapacity); // Allocate new storage. + if (node.usedBytes > 0) node.contents.set(oldContents.subarray(0, node.usedBytes), 0); // Copy old data over to the new storage. + }, + resizeFileStorage(node, newSize) { + if (node.usedBytes == newSize) return; + if (newSize == 0) { + node.contents = null; // Fully decommit when requesting a resize to zero. + node.usedBytes = 0; + } else { + var oldContents = node.contents; + node.contents = new Uint8Array(newSize); // Allocate new storage. + if (oldContents) { + node.contents.set(oldContents.subarray(0, Math.min(newSize, node.usedBytes))); // Copy old data over to the new storage. + } + node.usedBytes = newSize; + } + }, + node_ops:{ + getattr(node) { + var attr = {}; + // device numbers reuse inode numbers. + attr.dev = FS.isChrdev(node.mode) ? node.id : 1; + attr.ino = node.id; + attr.mode = node.mode; + attr.nlink = 1; + attr.uid = 0; + attr.gid = 0; + attr.rdev = node.rdev; + if (FS.isDir(node.mode)) { + attr.size = 4096; + } else if (FS.isFile(node.mode)) { + attr.size = node.usedBytes; + } else if (FS.isLink(node.mode)) { + attr.size = node.link.length; + } else { + attr.size = 0; + } + attr.atime = new Date(node.atime); + attr.mtime = new Date(node.mtime); + attr.ctime = new Date(node.ctime); + // NOTE: In our implementation, st_blocks = Math.ceil(st_size/st_blksize), + // but this is not required by the standard. + attr.blksize = 4096; + attr.blocks = Math.ceil(attr.size / attr.blksize); + return attr; + }, + setattr(node, attr) { + for (const key of ["mode", "atime", "mtime", "ctime"]) { + if (attr[key] != null) { + node[key] = attr[key]; + } + } + if (attr.size !== undefined) { + MEMFS.resizeFileStorage(node, attr.size); + } + }, + lookup(parent, name) { + throw new FS.ErrnoError(44); + }, + mknod(parent, name, mode, dev) { + return MEMFS.createNode(parent, name, mode, dev); + }, + rename(old_node, new_dir, new_name) { + var new_node; + try { + new_node = FS.lookupNode(new_dir, new_name); + } catch (e) {} + if (new_node) { + if (FS.isDir(old_node.mode)) { + // if we're overwriting a directory at new_name, make sure it's empty. + for (var i in new_node.contents) { + throw new FS.ErrnoError(55); + } + } + FS.hashRemoveNode(new_node); + } + // do the internal rewiring + delete old_node.parent.contents[old_node.name]; + new_dir.contents[new_name] = old_node; + old_node.name = new_name; + new_dir.ctime = new_dir.mtime = old_node.parent.ctime = old_node.parent.mtime = Date.now(); + }, + unlink(parent, name) { + delete parent.contents[name]; + parent.ctime = parent.mtime = Date.now(); + }, + rmdir(parent, name) { + var node = FS.lookupNode(parent, name); + for (var i in node.contents) { + throw new FS.ErrnoError(55); + } + delete parent.contents[name]; + parent.ctime = parent.mtime = Date.now(); + }, + readdir(node) { + return ['.', '..', ...Object.keys(node.contents)]; + }, + symlink(parent, newname, oldpath) { + var node = MEMFS.createNode(parent, newname, 0o777 | 40960, 0); + node.link = oldpath; + return node; + }, + readlink(node) { + if (!FS.isLink(node.mode)) { + throw new FS.ErrnoError(28); + } + return node.link; + }, + }, + stream_ops:{ + read(stream, buffer, offset, length, position) { + var contents = stream.node.contents; + if (position >= stream.node.usedBytes) return 0; + var size = Math.min(stream.node.usedBytes - position, length); + assert(size >= 0); + if (size > 8 && contents.subarray) { // non-trivial, and typed array + buffer.set(contents.subarray(position, position + size), offset); + } else { + for (var i = 0; i < size; i++) buffer[offset + i] = contents[position + i]; + } + return size; + }, + write(stream, buffer, offset, length, position, canOwn) { + // The data buffer should be a typed array view + assert(!(buffer instanceof ArrayBuffer)); + + if (!length) return 0; + var node = stream.node; + node.mtime = node.ctime = Date.now(); + + if (buffer.subarray && (!node.contents || node.contents.subarray)) { // This write is from a typed array to a typed array? + if (canOwn) { + assert(position === 0, 'canOwn must imply no weird position inside the file'); + node.contents = buffer.subarray(offset, offset + length); + node.usedBytes = length; + return length; + } else if (node.usedBytes === 0 && position === 0) { // If this is a simple first write to an empty file, do a fast set since we don't need to care about old data. + node.contents = buffer.slice(offset, offset + length); + node.usedBytes = length; + return length; + } else if (position + length <= node.usedBytes) { // Writing to an already allocated and used subrange of the file? + node.contents.set(buffer.subarray(offset, offset + length), position); + return length; + } + } + + // Appending to an existing file and we need to reallocate, or source data did not come as a typed array. + MEMFS.expandFileStorage(node, position+length); + if (node.contents.subarray && buffer.subarray) { + // Use typed array write which is available. + node.contents.set(buffer.subarray(offset, offset + length), position); + } else { + for (var i = 0; i < length; i++) { + node.contents[position + i] = buffer[offset + i]; // Or fall back to manual write if not. + } + } + node.usedBytes = Math.max(node.usedBytes, position + length); + return length; + }, + llseek(stream, offset, whence) { + var position = offset; + if (whence === 1) { + position += stream.position; + } else if (whence === 2) { + if (FS.isFile(stream.node.mode)) { + position += stream.node.usedBytes; + } + } + if (position < 0) { + throw new FS.ErrnoError(28); + } + return position; + }, + mmap(stream, length, position, prot, flags) { + if (!FS.isFile(stream.node.mode)) { + throw new FS.ErrnoError(43); + } + var ptr; + var allocated; + var contents = stream.node.contents; + // Only make a new copy when MAP_PRIVATE is specified. + if (!(flags & 2) && contents && contents.buffer === HEAP8.buffer) { + // We can't emulate MAP_SHARED when the file is not backed by the + // buffer we're mapping to (e.g. the HEAP buffer). + allocated = false; + ptr = contents.byteOffset; + } else { + allocated = true; + ptr = mmapAlloc(length); + if (!ptr) { + throw new FS.ErrnoError(48); + } + if (contents) { + // Try to avoid unnecessary slices. + if (position > 0 || position + length < contents.length) { + if (contents.subarray) { + contents = contents.subarray(position, position + length); + } else { + contents = Array.prototype.slice.call(contents, position, position + length); + } + } + HEAP8.set(contents, ptr); + } + } + return { ptr, allocated }; + }, + msync(stream, buffer, offset, length, mmapFlags) { + MEMFS.stream_ops.write(stream, buffer, 0, length, offset, false); + // should we check if bytesWritten and length are the same? + return 0; + }, + }, + }; + + var asyncLoad = async (url) => { + var arrayBuffer = await readAsync(url); + assert(arrayBuffer, `Loading data file "${url}" failed (no arrayBuffer).`); + return new Uint8Array(arrayBuffer); + }; + + + var FS_createDataFile = (parent, name, fileData, canRead, canWrite, canOwn) => { + FS.createDataFile(parent, name, fileData, canRead, canWrite, canOwn); + }; + + var preloadPlugins = Module['preloadPlugins'] || []; + var FS_handledByPreloadPlugin = (byteArray, fullname, finish, onerror) => { + // Ensure plugins are ready. + if (typeof Browser != 'undefined') Browser.init(); + + var handled = false; + preloadPlugins.forEach((plugin) => { + if (handled) return; + if (plugin['canHandle'](fullname)) { + plugin['handle'](byteArray, fullname, finish, onerror); + handled = true; + } + }); + return handled; + }; + var FS_createPreloadedFile = (parent, name, url, canRead, canWrite, onload, onerror, dontCreateFile, canOwn, preFinish) => { + // TODO we should allow people to just pass in a complete filename instead + // of parent and name being that we just join them anyways + var fullname = name ? PATH_FS.resolve(PATH.join2(parent, name)) : parent; + var dep = getUniqueRunDependency(`cp ${fullname}`); // might have several active requests for the same fullname + function processData(byteArray) { + function finish(byteArray) { + preFinish?.(); + if (!dontCreateFile) { + FS_createDataFile(parent, name, byteArray, canRead, canWrite, canOwn); + } + onload?.(); + removeRunDependency(dep); + } + if (FS_handledByPreloadPlugin(byteArray, fullname, finish, () => { + onerror?.(); + removeRunDependency(dep); + })) { + return; + } + finish(byteArray); + } + addRunDependency(dep); + if (typeof url == 'string') { + asyncLoad(url).then(processData, onerror); + } else { + processData(url); + } + }; + + var FS_modeStringToFlags = (str) => { + var flagModes = { + 'r': 0, + 'r+': 2, + 'w': 512 | 64 | 1, + 'w+': 512 | 64 | 2, + 'a': 1024 | 64 | 1, + 'a+': 1024 | 64 | 2, + }; + var flags = flagModes[str]; + if (typeof flags == 'undefined') { + throw new Error(`Unknown file open mode: ${str}`); + } + return flags; + }; + + var FS_getMode = (canRead, canWrite) => { + var mode = 0; + if (canRead) mode |= 292 | 73; + if (canWrite) mode |= 146; + return mode; + }; + + + + + + + /** + * Given a pointer 'ptr' to a null-terminated UTF8-encoded string in the + * emscripten HEAP, returns a copy of that string as a Javascript String object. + * + * @param {number} ptr + * @param {number=} maxBytesToRead - An optional length that specifies the + * maximum number of bytes to read. You can omit this parameter to scan the + * string until the first 0 byte. If maxBytesToRead is passed, and the string + * at [ptr, ptr+maxBytesToReadr[ contains a null byte in the middle, then the + * string will cut short at that byte index (i.e. maxBytesToRead will not + * produce a string of exact length [ptr, ptr+maxBytesToRead[) N.B. mixing + * frequent uses of UTF8ToString() with and without maxBytesToRead may throw + * JS JIT optimizations off, so it is worth to consider consistently using one + * @return {string} + */ + var UTF8ToString = (ptr, maxBytesToRead) => { + assert(typeof ptr == 'number', `UTF8ToString expects a number (got ${typeof ptr})`); + return ptr ? UTF8ArrayToString(HEAPU8, ptr, maxBytesToRead) : ''; + }; + + var strError = (errno) => UTF8ToString(_strerror(errno)); + + var ERRNO_CODES = { + 'EPERM': 63, + 'ENOENT': 44, + 'ESRCH': 71, + 'EINTR': 27, + 'EIO': 29, + 'ENXIO': 60, + 'E2BIG': 1, + 'ENOEXEC': 45, + 'EBADF': 8, + 'ECHILD': 12, + 'EAGAIN': 6, + 'EWOULDBLOCK': 6, + 'ENOMEM': 48, + 'EACCES': 2, + 'EFAULT': 21, + 'ENOTBLK': 105, + 'EBUSY': 10, + 'EEXIST': 20, + 'EXDEV': 75, + 'ENODEV': 43, + 'ENOTDIR': 54, + 'EISDIR': 31, + 'EINVAL': 28, + 'ENFILE': 41, + 'EMFILE': 33, + 'ENOTTY': 59, + 'ETXTBSY': 74, + 'EFBIG': 22, + 'ENOSPC': 51, + 'ESPIPE': 70, + 'EROFS': 69, + 'EMLINK': 34, + 'EPIPE': 64, + 'EDOM': 18, + 'ERANGE': 68, + 'ENOMSG': 49, + 'EIDRM': 24, + 'ECHRNG': 106, + 'EL2NSYNC': 156, + 'EL3HLT': 107, + 'EL3RST': 108, + 'ELNRNG': 109, + 'EUNATCH': 110, + 'ENOCSI': 111, + 'EL2HLT': 112, + 'EDEADLK': 16, + 'ENOLCK': 46, + 'EBADE': 113, + 'EBADR': 114, + 'EXFULL': 115, + 'ENOANO': 104, + 'EBADRQC': 103, + 'EBADSLT': 102, + 'EDEADLOCK': 16, + 'EBFONT': 101, + 'ENOSTR': 100, + 'ENODATA': 116, + 'ETIME': 117, + 'ENOSR': 118, + 'ENONET': 119, + 'ENOPKG': 120, + 'EREMOTE': 121, + 'ENOLINK': 47, + 'EADV': 122, + 'ESRMNT': 123, + 'ECOMM': 124, + 'EPROTO': 65, + 'EMULTIHOP': 36, + 'EDOTDOT': 125, + 'EBADMSG': 9, + 'ENOTUNIQ': 126, + 'EBADFD': 127, + 'EREMCHG': 128, + 'ELIBACC': 129, + 'ELIBBAD': 130, + 'ELIBSCN': 131, + 'ELIBMAX': 132, + 'ELIBEXEC': 133, + 'ENOSYS': 52, + 'ENOTEMPTY': 55, + 'ENAMETOOLONG': 37, + 'ELOOP': 32, + 'EOPNOTSUPP': 138, + 'EPFNOSUPPORT': 139, + 'ECONNRESET': 15, + 'ENOBUFS': 42, + 'EAFNOSUPPORT': 5, + 'EPROTOTYPE': 67, + 'ENOTSOCK': 57, + 'ENOPROTOOPT': 50, + 'ESHUTDOWN': 140, + 'ECONNREFUSED': 14, + 'EADDRINUSE': 3, + 'ECONNABORTED': 13, + 'ENETUNREACH': 40, + 'ENETDOWN': 38, + 'ETIMEDOUT': 73, + 'EHOSTDOWN': 142, + 'EHOSTUNREACH': 23, + 'EINPROGRESS': 26, + 'EALREADY': 7, + 'EDESTADDRREQ': 17, + 'EMSGSIZE': 35, + 'EPROTONOSUPPORT': 66, + 'ESOCKTNOSUPPORT': 137, + 'EADDRNOTAVAIL': 4, + 'ENETRESET': 39, + 'EISCONN': 30, + 'ENOTCONN': 53, + 'ETOOMANYREFS': 141, + 'EUSERS': 136, + 'EDQUOT': 19, + 'ESTALE': 72, + 'ENOTSUP': 138, + 'ENOMEDIUM': 148, + 'EILSEQ': 25, + 'EOVERFLOW': 61, + 'ECANCELED': 11, + 'ENOTRECOVERABLE': 56, + 'EOWNERDEAD': 62, + 'ESTRPIPE': 135, + }; + var FS = { + root:null, + mounts:[], + devices:{ + }, + streams:[], + nextInode:1, + nameTable:null, + currentPath:"/", + initialized:false, + ignorePermissions:true, + filesystems:null, + syncFSRequests:0, + readFiles:{ + }, + ErrnoError:class extends Error { + name = 'ErrnoError'; + // We set the `name` property to be able to identify `FS.ErrnoError` + // - the `name` is a standard ECMA-262 property of error objects. Kind of good to have it anyway. + // - when using PROXYFS, an error can come from an underlying FS + // as different FS objects have their own FS.ErrnoError each, + // the test `err instanceof FS.ErrnoError` won't detect an error coming from another filesystem, causing bugs. + // we'll use the reliable test `err.name == "ErrnoError"` instead + constructor(errno) { + super(runtimeInitialized ? strError(errno) : ''); + this.errno = errno; + for (var key in ERRNO_CODES) { + if (ERRNO_CODES[key] === errno) { + this.code = key; + break; + } + } + } + }, + FSStream:class { + shared = {}; + get object() { + return this.node; + } + set object(val) { + this.node = val; + } + get isRead() { + return (this.flags & 2097155) !== 1; + } + get isWrite() { + return (this.flags & 2097155) !== 0; + } + get isAppend() { + return (this.flags & 1024); + } + get flags() { + return this.shared.flags; + } + set flags(val) { + this.shared.flags = val; + } + get position() { + return this.shared.position; + } + set position(val) { + this.shared.position = val; + } + }, + FSNode:class { + node_ops = {}; + stream_ops = {}; + readMode = 292 | 73; + writeMode = 146; + mounted = null; + constructor(parent, name, mode, rdev) { + if (!parent) { + parent = this; // root node sets parent to itself + } + this.parent = parent; + this.mount = parent.mount; + this.id = FS.nextInode++; + this.name = name; + this.mode = mode; + this.rdev = rdev; + this.atime = this.mtime = this.ctime = Date.now(); + } + get read() { + return (this.mode & this.readMode) === this.readMode; + } + set read(val) { + val ? this.mode |= this.readMode : this.mode &= ~this.readMode; + } + get write() { + return (this.mode & this.writeMode) === this.writeMode; + } + set write(val) { + val ? this.mode |= this.writeMode : this.mode &= ~this.writeMode; + } + get isFolder() { + return FS.isDir(this.mode); + } + get isDevice() { + return FS.isChrdev(this.mode); + } + }, + lookupPath(path, opts = {}) { + if (!path) { + throw new FS.ErrnoError(44); + } + opts.follow_mount ??= true + + if (!PATH.isAbs(path)) { + path = FS.cwd() + '/' + path; + } + + // limit max consecutive symlinks to 40 (SYMLOOP_MAX). + linkloop: for (var nlinks = 0; nlinks < 40; nlinks++) { + // split the absolute path + var parts = path.split('/').filter((p) => !!p); + + // start at the root + var current = FS.root; + var current_path = '/'; + + for (var i = 0; i < parts.length; i++) { + var islast = (i === parts.length-1); + if (islast && opts.parent) { + // stop resolving + break; + } + + if (parts[i] === '.') { + continue; + } + + if (parts[i] === '..') { + current_path = PATH.dirname(current_path); + current = current.parent; + continue; + } + + current_path = PATH.join2(current_path, parts[i]); + try { + current = FS.lookupNode(current, parts[i]); + } catch (e) { + // if noent_okay is true, suppress a ENOENT in the last component + // and return an object with an undefined node. This is needed for + // resolving symlinks in the path when creating a file. + if ((e?.errno === 44) && islast && opts.noent_okay) { + return { path: current_path }; + } + throw e; + } + + // jump to the mount's root node if this is a mountpoint + if (FS.isMountpoint(current) && (!islast || opts.follow_mount)) { + current = current.mounted.root; + } + + // by default, lookupPath will not follow a symlink if it is the final path component. + // setting opts.follow = true will override this behavior. + if (FS.isLink(current.mode) && (!islast || opts.follow)) { + if (!current.node_ops.readlink) { + throw new FS.ErrnoError(52); + } + var link = current.node_ops.readlink(current); + if (!PATH.isAbs(link)) { + link = PATH.dirname(current_path) + '/' + link; + } + path = link + '/' + parts.slice(i + 1).join('/'); + continue linkloop; + } + } + return { path: current_path, node: current }; + } + throw new FS.ErrnoError(32); + }, + getPath(node) { + var path; + while (true) { + if (FS.isRoot(node)) { + var mount = node.mount.mountpoint; + if (!path) return mount; + return mount[mount.length-1] !== '/' ? `${mount}/${path}` : mount + path; + } + path = path ? `${node.name}/${path}` : node.name; + node = node.parent; + } + }, + hashName(parentid, name) { + var hash = 0; + + for (var i = 0; i < name.length; i++) { + hash = ((hash << 5) - hash + name.charCodeAt(i)) | 0; + } + return ((parentid + hash) >>> 0) % FS.nameTable.length; + }, + hashAddNode(node) { + var hash = FS.hashName(node.parent.id, node.name); + node.name_next = FS.nameTable[hash]; + FS.nameTable[hash] = node; + }, + hashRemoveNode(node) { + var hash = FS.hashName(node.parent.id, node.name); + if (FS.nameTable[hash] === node) { + FS.nameTable[hash] = node.name_next; + } else { + var current = FS.nameTable[hash]; + while (current) { + if (current.name_next === node) { + current.name_next = node.name_next; + break; + } + current = current.name_next; + } + } + }, + lookupNode(parent, name) { + var errCode = FS.mayLookup(parent); + if (errCode) { + throw new FS.ErrnoError(errCode); + } + var hash = FS.hashName(parent.id, name); + for (var node = FS.nameTable[hash]; node; node = node.name_next) { + var nodeName = node.name; + if (node.parent.id === parent.id && nodeName === name) { + return node; + } + } + // if we failed to find it in the cache, call into the VFS + return FS.lookup(parent, name); + }, + createNode(parent, name, mode, rdev) { + assert(typeof parent == 'object') + var node = new FS.FSNode(parent, name, mode, rdev); + + FS.hashAddNode(node); + + return node; + }, + destroyNode(node) { + FS.hashRemoveNode(node); + }, + isRoot(node) { + return node === node.parent; + }, + isMountpoint(node) { + return !!node.mounted; + }, + isFile(mode) { + return (mode & 61440) === 32768; + }, + isDir(mode) { + return (mode & 61440) === 16384; + }, + isLink(mode) { + return (mode & 61440) === 40960; + }, + isChrdev(mode) { + return (mode & 61440) === 8192; + }, + isBlkdev(mode) { + return (mode & 61440) === 24576; + }, + isFIFO(mode) { + return (mode & 61440) === 4096; + }, + isSocket(mode) { + return (mode & 49152) === 49152; + }, + flagsToPermissionString(flag) { + var perms = ['r', 'w', 'rw'][flag & 3]; + if ((flag & 512)) { + perms += 'w'; + } + return perms; + }, + nodePermissions(node, perms) { + if (FS.ignorePermissions) { + return 0; + } + // return 0 if any user, group or owner bits are set. + if (perms.includes('r') && !(node.mode & 292)) { + return 2; + } else if (perms.includes('w') && !(node.mode & 146)) { + return 2; + } else if (perms.includes('x') && !(node.mode & 73)) { + return 2; + } + return 0; + }, + mayLookup(dir) { + if (!FS.isDir(dir.mode)) return 54; + var errCode = FS.nodePermissions(dir, 'x'); + if (errCode) return errCode; + if (!dir.node_ops.lookup) return 2; + return 0; + }, + mayCreate(dir, name) { + if (!FS.isDir(dir.mode)) { + return 54; + } + try { + var node = FS.lookupNode(dir, name); + return 20; + } catch (e) { + } + return FS.nodePermissions(dir, 'wx'); + }, + mayDelete(dir, name, isdir) { + var node; + try { + node = FS.lookupNode(dir, name); + } catch (e) { + return e.errno; + } + var errCode = FS.nodePermissions(dir, 'wx'); + if (errCode) { + return errCode; + } + if (isdir) { + if (!FS.isDir(node.mode)) { + return 54; + } + if (FS.isRoot(node) || FS.getPath(node) === FS.cwd()) { + return 10; + } + } else { + if (FS.isDir(node.mode)) { + return 31; + } + } + return 0; + }, + mayOpen(node, flags) { + if (!node) { + return 44; + } + if (FS.isLink(node.mode)) { + return 32; + } else if (FS.isDir(node.mode)) { + if (FS.flagsToPermissionString(flags) !== 'r' // opening for write + || (flags & (512 | 64))) { // TODO: check for O_SEARCH? (== search for dir only) + return 31; + } + } + return FS.nodePermissions(node, FS.flagsToPermissionString(flags)); + }, + checkOpExists(op, err) { + if (!op) { + throw new FS.ErrnoError(err); + } + return op; + }, + MAX_OPEN_FDS:4096, + nextfd() { + for (var fd = 0; fd <= FS.MAX_OPEN_FDS; fd++) { + if (!FS.streams[fd]) { + return fd; + } + } + throw new FS.ErrnoError(33); + }, + getStreamChecked(fd) { + var stream = FS.getStream(fd); + if (!stream) { + throw new FS.ErrnoError(8); + } + return stream; + }, + getStream:(fd) => FS.streams[fd], + createStream(stream, fd = -1) { + assert(fd >= -1); + + // clone it, so we can return an instance of FSStream + stream = Object.assign(new FS.FSStream(), stream); + if (fd == -1) { + fd = FS.nextfd(); + } + stream.fd = fd; + FS.streams[fd] = stream; + return stream; + }, + closeStream(fd) { + FS.streams[fd] = null; + }, + dupStream(origStream, fd = -1) { + var stream = FS.createStream(origStream, fd); + stream.stream_ops?.dup?.(stream); + return stream; + }, + doSetAttr(stream, node, attr) { + var setattr = stream?.stream_ops.setattr; + var arg = setattr ? stream : node; + setattr ??= node.node_ops.setattr; + FS.checkOpExists(setattr, 63) + setattr(arg, attr); + }, + chrdev_stream_ops:{ + open(stream) { + var device = FS.getDevice(stream.node.rdev); + // override node's stream ops with the device's + stream.stream_ops = device.stream_ops; + // forward the open call + stream.stream_ops.open?.(stream); + }, + llseek() { + throw new FS.ErrnoError(70); + }, + }, + major:(dev) => ((dev) >> 8), + minor:(dev) => ((dev) & 0xff), + makedev:(ma, mi) => ((ma) << 8 | (mi)), + registerDevice(dev, ops) { + FS.devices[dev] = { stream_ops: ops }; + }, + getDevice:(dev) => FS.devices[dev], + getMounts(mount) { + var mounts = []; + var check = [mount]; + + while (check.length) { + var m = check.pop(); + + mounts.push(m); + + check.push(...m.mounts); + } + + return mounts; + }, + syncfs(populate, callback) { + if (typeof populate == 'function') { + callback = populate; + populate = false; + } + + FS.syncFSRequests++; + + if (FS.syncFSRequests > 1) { + err(`warning: ${FS.syncFSRequests} FS.syncfs operations in flight at once, probably just doing extra work`); + } + + var mounts = FS.getMounts(FS.root.mount); + var completed = 0; + + function doCallback(errCode) { + assert(FS.syncFSRequests > 0); + FS.syncFSRequests--; + return callback(errCode); + } + + function done(errCode) { + if (errCode) { + if (!done.errored) { + done.errored = true; + return doCallback(errCode); + } + return; + } + if (++completed >= mounts.length) { + doCallback(null); + } + }; + + // sync all mounts + mounts.forEach((mount) => { + if (!mount.type.syncfs) { + return done(null); + } + mount.type.syncfs(mount, populate, done); + }); + }, + mount(type, opts, mountpoint) { + if (typeof type == 'string') { + // The filesystem was not included, and instead we have an error + // message stored in the variable. + throw type; + } + var root = mountpoint === '/'; + var pseudo = !mountpoint; + var node; + + if (root && FS.root) { + throw new FS.ErrnoError(10); + } else if (!root && !pseudo) { + var lookup = FS.lookupPath(mountpoint, { follow_mount: false }); + + mountpoint = lookup.path; // use the absolute path + node = lookup.node; + + if (FS.isMountpoint(node)) { + throw new FS.ErrnoError(10); + } + + if (!FS.isDir(node.mode)) { + throw new FS.ErrnoError(54); + } + } + + var mount = { + type, + opts, + mountpoint, + mounts: [] + }; + + // create a root node for the fs + var mountRoot = type.mount(mount); + mountRoot.mount = mount; + mount.root = mountRoot; + + if (root) { + FS.root = mountRoot; + } else if (node) { + // set as a mountpoint + node.mounted = mount; + + // add the new mount to the current mount's children + if (node.mount) { + node.mount.mounts.push(mount); + } + } + + return mountRoot; + }, + unmount(mountpoint) { + var lookup = FS.lookupPath(mountpoint, { follow_mount: false }); + + if (!FS.isMountpoint(lookup.node)) { + throw new FS.ErrnoError(28); + } + + // destroy the nodes for this mount, and all its child mounts + var node = lookup.node; + var mount = node.mounted; + var mounts = FS.getMounts(mount); + + Object.keys(FS.nameTable).forEach((hash) => { + var current = FS.nameTable[hash]; + + while (current) { + var next = current.name_next; + + if (mounts.includes(current.mount)) { + FS.destroyNode(current); + } + + current = next; + } + }); + + // no longer a mountpoint + node.mounted = null; + + // remove this mount from the child mounts + var idx = node.mount.mounts.indexOf(mount); + assert(idx !== -1); + node.mount.mounts.splice(idx, 1); + }, + lookup(parent, name) { + return parent.node_ops.lookup(parent, name); + }, + mknod(path, mode, dev) { + var lookup = FS.lookupPath(path, { parent: true }); + var parent = lookup.node; + var name = PATH.basename(path); + if (!name) { + throw new FS.ErrnoError(28); + } + if (name === '.' || name === '..') { + throw new FS.ErrnoError(20); + } + var errCode = FS.mayCreate(parent, name); + if (errCode) { + throw new FS.ErrnoError(errCode); + } + if (!parent.node_ops.mknod) { + throw new FS.ErrnoError(63); + } + return parent.node_ops.mknod(parent, name, mode, dev); + }, + statfs(path) { + return FS.statfsNode(FS.lookupPath(path, {follow: true}).node); + }, + statfsStream(stream) { + // We keep a separate statfsStream function because noderawfs overrides + // it. In noderawfs, stream.node is sometimes null. Instead, we need to + // look at stream.path. + return FS.statfsNode(stream.node); + }, + statfsNode(node) { + // NOTE: None of the defaults here are true. We're just returning safe and + // sane values. Currently nodefs and rawfs replace these defaults, + // other file systems leave them alone. + var rtn = { + bsize: 4096, + frsize: 4096, + blocks: 1e6, + bfree: 5e5, + bavail: 5e5, + files: FS.nextInode, + ffree: FS.nextInode - 1, + fsid: 42, + flags: 2, + namelen: 255, + }; + + if (node.node_ops.statfs) { + Object.assign(rtn, node.node_ops.statfs(node.mount.opts.root)); + } + return rtn; + }, + create(path, mode = 0o666) { + mode &= 4095; + mode |= 32768; + return FS.mknod(path, mode, 0); + }, + mkdir(path, mode = 0o777) { + mode &= 511 | 512; + mode |= 16384; + return FS.mknod(path, mode, 0); + }, + mkdirTree(path, mode) { + var dirs = path.split('/'); + var d = ''; + for (var dir of dirs) { + if (!dir) continue; + if (d || PATH.isAbs(path)) d += '/'; + d += dir; + try { + FS.mkdir(d, mode); + } catch(e) { + if (e.errno != 20) throw e; + } + } + }, + mkdev(path, mode, dev) { + if (typeof dev == 'undefined') { + dev = mode; + mode = 0o666; + } + mode |= 8192; + return FS.mknod(path, mode, dev); + }, + symlink(oldpath, newpath) { + if (!PATH_FS.resolve(oldpath)) { + throw new FS.ErrnoError(44); + } + var lookup = FS.lookupPath(newpath, { parent: true }); + var parent = lookup.node; + if (!parent) { + throw new FS.ErrnoError(44); + } + var newname = PATH.basename(newpath); + var errCode = FS.mayCreate(parent, newname); + if (errCode) { + throw new FS.ErrnoError(errCode); + } + if (!parent.node_ops.symlink) { + throw new FS.ErrnoError(63); + } + return parent.node_ops.symlink(parent, newname, oldpath); + }, + rename(old_path, new_path) { + var old_dirname = PATH.dirname(old_path); + var new_dirname = PATH.dirname(new_path); + var old_name = PATH.basename(old_path); + var new_name = PATH.basename(new_path); + // parents must exist + var lookup, old_dir, new_dir; + + // let the errors from non existent directories percolate up + lookup = FS.lookupPath(old_path, { parent: true }); + old_dir = lookup.node; + lookup = FS.lookupPath(new_path, { parent: true }); + new_dir = lookup.node; + + if (!old_dir || !new_dir) throw new FS.ErrnoError(44); + // need to be part of the same mount + if (old_dir.mount !== new_dir.mount) { + throw new FS.ErrnoError(75); + } + // source must exist + var old_node = FS.lookupNode(old_dir, old_name); + // old path should not be an ancestor of the new path + var relative = PATH_FS.relative(old_path, new_dirname); + if (relative.charAt(0) !== '.') { + throw new FS.ErrnoError(28); + } + // new path should not be an ancestor of the old path + relative = PATH_FS.relative(new_path, old_dirname); + if (relative.charAt(0) !== '.') { + throw new FS.ErrnoError(55); + } + // see if the new path already exists + var new_node; + try { + new_node = FS.lookupNode(new_dir, new_name); + } catch (e) { + // not fatal + } + // early out if nothing needs to change + if (old_node === new_node) { + return; + } + // we'll need to delete the old entry + var isdir = FS.isDir(old_node.mode); + var errCode = FS.mayDelete(old_dir, old_name, isdir); + if (errCode) { + throw new FS.ErrnoError(errCode); + } + // need delete permissions if we'll be overwriting. + // need create permissions if new doesn't already exist. + errCode = new_node ? + FS.mayDelete(new_dir, new_name, isdir) : + FS.mayCreate(new_dir, new_name); + if (errCode) { + throw new FS.ErrnoError(errCode); + } + if (!old_dir.node_ops.rename) { + throw new FS.ErrnoError(63); + } + if (FS.isMountpoint(old_node) || (new_node && FS.isMountpoint(new_node))) { + throw new FS.ErrnoError(10); + } + // if we are going to change the parent, check write permissions + if (new_dir !== old_dir) { + errCode = FS.nodePermissions(old_dir, 'w'); + if (errCode) { + throw new FS.ErrnoError(errCode); + } + } + // remove the node from the lookup hash + FS.hashRemoveNode(old_node); + // do the underlying fs rename + try { + old_dir.node_ops.rename(old_node, new_dir, new_name); + // update old node (we do this here to avoid each backend + // needing to) + old_node.parent = new_dir; + } catch (e) { + throw e; + } finally { + // add the node back to the hash (in case node_ops.rename + // changed its name) + FS.hashAddNode(old_node); + } + }, + rmdir(path) { + var lookup = FS.lookupPath(path, { parent: true }); + var parent = lookup.node; + var name = PATH.basename(path); + var node = FS.lookupNode(parent, name); + var errCode = FS.mayDelete(parent, name, true); + if (errCode) { + throw new FS.ErrnoError(errCode); + } + if (!parent.node_ops.rmdir) { + throw new FS.ErrnoError(63); + } + if (FS.isMountpoint(node)) { + throw new FS.ErrnoError(10); + } + parent.node_ops.rmdir(parent, name); + FS.destroyNode(node); + }, + readdir(path) { + var lookup = FS.lookupPath(path, { follow: true }); + var node = lookup.node; + var readdir = FS.checkOpExists(node.node_ops.readdir, 54); + return readdir(node); + }, + unlink(path) { + var lookup = FS.lookupPath(path, { parent: true }); + var parent = lookup.node; + if (!parent) { + throw new FS.ErrnoError(44); + } + var name = PATH.basename(path); + var node = FS.lookupNode(parent, name); + var errCode = FS.mayDelete(parent, name, false); + if (errCode) { + // According to POSIX, we should map EISDIR to EPERM, but + // we instead do what Linux does (and we must, as we use + // the musl linux libc). + throw new FS.ErrnoError(errCode); + } + if (!parent.node_ops.unlink) { + throw new FS.ErrnoError(63); + } + if (FS.isMountpoint(node)) { + throw new FS.ErrnoError(10); + } + parent.node_ops.unlink(parent, name); + FS.destroyNode(node); + }, + readlink(path) { + var lookup = FS.lookupPath(path); + var link = lookup.node; + if (!link) { + throw new FS.ErrnoError(44); + } + if (!link.node_ops.readlink) { + throw new FS.ErrnoError(28); + } + return link.node_ops.readlink(link); + }, + stat(path, dontFollow) { + var lookup = FS.lookupPath(path, { follow: !dontFollow }); + var node = lookup.node; + var getattr = FS.checkOpExists(node.node_ops.getattr, 63); + return getattr(node); + }, + fstat(fd) { + var stream = FS.getStreamChecked(fd); + var node = stream.node; + var getattr = stream.stream_ops.getattr; + var arg = getattr ? stream : node; + getattr ??= node.node_ops.getattr; + FS.checkOpExists(getattr, 63) + return getattr(arg); + }, + lstat(path) { + return FS.stat(path, true); + }, + doChmod(stream, node, mode, dontFollow) { + FS.doSetAttr(stream, node, { + mode: (mode & 4095) | (node.mode & ~4095), + ctime: Date.now(), + dontFollow + }); + }, + chmod(path, mode, dontFollow) { + var node; + if (typeof path == 'string') { + var lookup = FS.lookupPath(path, { follow: !dontFollow }); + node = lookup.node; + } else { + node = path; + } + FS.doChmod(null, node, mode, dontFollow); + }, + lchmod(path, mode) { + FS.chmod(path, mode, true); + }, + fchmod(fd, mode) { + var stream = FS.getStreamChecked(fd); + FS.doChmod(stream, stream.node, mode, false); + }, + doChown(stream, node, dontFollow) { + FS.doSetAttr(stream, node, { + timestamp: Date.now(), + dontFollow + // we ignore the uid / gid for now + }); + }, + chown(path, uid, gid, dontFollow) { + var node; + if (typeof path == 'string') { + var lookup = FS.lookupPath(path, { follow: !dontFollow }); + node = lookup.node; + } else { + node = path; + } + FS.doChown(null, node, dontFollow); + }, + lchown(path, uid, gid) { + FS.chown(path, uid, gid, true); + }, + fchown(fd, uid, gid) { + var stream = FS.getStreamChecked(fd); + FS.doChown(stream, stream.node, false); + }, + doTruncate(stream, node, len) { + if (FS.isDir(node.mode)) { + throw new FS.ErrnoError(31); + } + if (!FS.isFile(node.mode)) { + throw new FS.ErrnoError(28); + } + var errCode = FS.nodePermissions(node, 'w'); + if (errCode) { + throw new FS.ErrnoError(errCode); + } + FS.doSetAttr(stream, node, { + size: len, + timestamp: Date.now() + }); + }, + truncate(path, len) { + if (len < 0) { + throw new FS.ErrnoError(28); + } + var node; + if (typeof path == 'string') { + var lookup = FS.lookupPath(path, { follow: true }); + node = lookup.node; + } else { + node = path; + } + FS.doTruncate(null, node, len); + }, + ftruncate(fd, len) { + var stream = FS.getStreamChecked(fd); + if (len < 0 || (stream.flags & 2097155) === 0) { + throw new FS.ErrnoError(28); + } + FS.doTruncate(stream, stream.node, len); + }, + utime(path, atime, mtime) { + var lookup = FS.lookupPath(path, { follow: true }); + var node = lookup.node; + var setattr = FS.checkOpExists(node.node_ops.setattr, 63); + setattr(node, { + atime: atime, + mtime: mtime + }); + }, + open(path, flags, mode = 0o666) { + if (path === "") { + throw new FS.ErrnoError(44); + } + flags = typeof flags == 'string' ? FS_modeStringToFlags(flags) : flags; + if ((flags & 64)) { + mode = (mode & 4095) | 32768; + } else { + mode = 0; + } + var node; + var isDirPath; + if (typeof path == 'object') { + node = path; + } else { + isDirPath = path.endsWith("/"); + // noent_okay makes it so that if the final component of the path + // doesn't exist, lookupPath returns `node: undefined`. `path` will be + // updated to point to the target of all symlinks. + var lookup = FS.lookupPath(path, { + follow: !(flags & 131072), + noent_okay: true + }); + node = lookup.node; + path = lookup.path; + } + // perhaps we need to create the node + var created = false; + if ((flags & 64)) { + if (node) { + // if O_CREAT and O_EXCL are set, error out if the node already exists + if ((flags & 128)) { + throw new FS.ErrnoError(20); + } + } else if (isDirPath) { + throw new FS.ErrnoError(31); + } else { + // node doesn't exist, try to create it + // Ignore the permission bits here to ensure we can `open` this new + // file below. We use chmod below the apply the permissions once the + // file is open. + node = FS.mknod(path, mode | 0o777, 0); + created = true; + } + } + if (!node) { + throw new FS.ErrnoError(44); + } + // can't truncate a device + if (FS.isChrdev(node.mode)) { + flags &= ~512; + } + // if asked only for a directory, then this must be one + if ((flags & 65536) && !FS.isDir(node.mode)) { + throw new FS.ErrnoError(54); + } + // check permissions, if this is not a file we just created now (it is ok to + // create and write to a file with read-only permissions; it is read-only + // for later use) + if (!created) { + var errCode = FS.mayOpen(node, flags); + if (errCode) { + throw new FS.ErrnoError(errCode); + } + } + // do truncation if necessary + if ((flags & 512) && !created) { + FS.truncate(node, 0); + } + // we've already handled these, don't pass down to the underlying vfs + flags &= ~(128 | 512 | 131072); + + // register the stream with the filesystem + var stream = FS.createStream({ + node, + path: FS.getPath(node), // we want the absolute path to the node + flags, + seekable: true, + position: 0, + stream_ops: node.stream_ops, + // used by the file family libc calls (fopen, fwrite, ferror, etc.) + ungotten: [], + error: false + }); + // call the new stream's open function + if (stream.stream_ops.open) { + stream.stream_ops.open(stream); + } + if (created) { + FS.chmod(node, mode & 0o777); + } + if (Module['logReadFiles'] && !(flags & 1)) { + if (!(path in FS.readFiles)) { + FS.readFiles[path] = 1; + } + } + return stream; + }, + close(stream) { + if (FS.isClosed(stream)) { + throw new FS.ErrnoError(8); + } + if (stream.getdents) stream.getdents = null; // free readdir state + try { + if (stream.stream_ops.close) { + stream.stream_ops.close(stream); + } + } catch (e) { + throw e; + } finally { + FS.closeStream(stream.fd); + } + stream.fd = null; + }, + isClosed(stream) { + return stream.fd === null; + }, + llseek(stream, offset, whence) { + if (FS.isClosed(stream)) { + throw new FS.ErrnoError(8); + } + if (!stream.seekable || !stream.stream_ops.llseek) { + throw new FS.ErrnoError(70); + } + if (whence != 0 && whence != 1 && whence != 2) { + throw new FS.ErrnoError(28); + } + stream.position = stream.stream_ops.llseek(stream, offset, whence); + stream.ungotten = []; + return stream.position; + }, + read(stream, buffer, offset, length, position) { + assert(offset >= 0); + if (length < 0 || position < 0) { + throw new FS.ErrnoError(28); + } + if (FS.isClosed(stream)) { + throw new FS.ErrnoError(8); + } + if ((stream.flags & 2097155) === 1) { + throw new FS.ErrnoError(8); + } + if (FS.isDir(stream.node.mode)) { + throw new FS.ErrnoError(31); + } + if (!stream.stream_ops.read) { + throw new FS.ErrnoError(28); + } + var seeking = typeof position != 'undefined'; + if (!seeking) { + position = stream.position; + } else if (!stream.seekable) { + throw new FS.ErrnoError(70); + } + var bytesRead = stream.stream_ops.read(stream, buffer, offset, length, position); + if (!seeking) stream.position += bytesRead; + return bytesRead; + }, + write(stream, buffer, offset, length, position, canOwn) { + assert(offset >= 0); + if (length < 0 || position < 0) { + throw new FS.ErrnoError(28); + } + if (FS.isClosed(stream)) { + throw new FS.ErrnoError(8); + } + if ((stream.flags & 2097155) === 0) { + throw new FS.ErrnoError(8); + } + if (FS.isDir(stream.node.mode)) { + throw new FS.ErrnoError(31); + } + if (!stream.stream_ops.write) { + throw new FS.ErrnoError(28); + } + if (stream.seekable && stream.flags & 1024) { + // seek to the end before writing in append mode + FS.llseek(stream, 0, 2); + } + var seeking = typeof position != 'undefined'; + if (!seeking) { + position = stream.position; + } else if (!stream.seekable) { + throw new FS.ErrnoError(70); + } + var bytesWritten = stream.stream_ops.write(stream, buffer, offset, length, position, canOwn); + if (!seeking) stream.position += bytesWritten; + return bytesWritten; + }, + mmap(stream, length, position, prot, flags) { + // User requests writing to file (prot & PROT_WRITE != 0). + // Checking if we have permissions to write to the file unless + // MAP_PRIVATE flag is set. According to POSIX spec it is possible + // to write to file opened in read-only mode with MAP_PRIVATE flag, + // as all modifications will be visible only in the memory of + // the current process. + if ((prot & 2) !== 0 + && (flags & 2) === 0 + && (stream.flags & 2097155) !== 2) { + throw new FS.ErrnoError(2); + } + if ((stream.flags & 2097155) === 1) { + throw new FS.ErrnoError(2); + } + if (!stream.stream_ops.mmap) { + throw new FS.ErrnoError(43); + } + if (!length) { + throw new FS.ErrnoError(28); + } + return stream.stream_ops.mmap(stream, length, position, prot, flags); + }, + msync(stream, buffer, offset, length, mmapFlags) { + assert(offset >= 0); + if (!stream.stream_ops.msync) { + return 0; + } + return stream.stream_ops.msync(stream, buffer, offset, length, mmapFlags); + }, + ioctl(stream, cmd, arg) { + if (!stream.stream_ops.ioctl) { + throw new FS.ErrnoError(59); + } + return stream.stream_ops.ioctl(stream, cmd, arg); + }, + readFile(path, opts = {}) { + opts.flags = opts.flags || 0; + opts.encoding = opts.encoding || 'binary'; + if (opts.encoding !== 'utf8' && opts.encoding !== 'binary') { + throw new Error(`Invalid encoding type "${opts.encoding}"`); + } + var ret; + var stream = FS.open(path, opts.flags); + var stat = FS.stat(path); + var length = stat.size; + var buf = new Uint8Array(length); + FS.read(stream, buf, 0, length, 0); + if (opts.encoding === 'utf8') { + ret = UTF8ArrayToString(buf); + } else if (opts.encoding === 'binary') { + ret = buf; + } + FS.close(stream); + return ret; + }, + writeFile(path, data, opts = {}) { + opts.flags = opts.flags || 577; + var stream = FS.open(path, opts.flags, opts.mode); + if (typeof data == 'string') { + var buf = new Uint8Array(lengthBytesUTF8(data)+1); + var actualNumBytes = stringToUTF8Array(data, buf, 0, buf.length); + FS.write(stream, buf, 0, actualNumBytes, undefined, opts.canOwn); + } else if (ArrayBuffer.isView(data)) { + FS.write(stream, data, 0, data.byteLength, undefined, opts.canOwn); + } else { + throw new Error('Unsupported data type'); + } + FS.close(stream); + }, + cwd:() => FS.currentPath, + chdir(path) { + var lookup = FS.lookupPath(path, { follow: true }); + if (lookup.node === null) { + throw new FS.ErrnoError(44); + } + if (!FS.isDir(lookup.node.mode)) { + throw new FS.ErrnoError(54); + } + var errCode = FS.nodePermissions(lookup.node, 'x'); + if (errCode) { + throw new FS.ErrnoError(errCode); + } + FS.currentPath = lookup.path; + }, + createDefaultDirectories() { + FS.mkdir('/tmp'); + FS.mkdir('/home'); + FS.mkdir('/home/web_user'); + }, + createDefaultDevices() { + // create /dev + FS.mkdir('/dev'); + // setup /dev/null + FS.registerDevice(FS.makedev(1, 3), { + read: () => 0, + write: (stream, buffer, offset, length, pos) => length, + llseek: () => 0, + }); + FS.mkdev('/dev/null', FS.makedev(1, 3)); + // setup /dev/tty and /dev/tty1 + // stderr needs to print output using err() rather than out() + // so we register a second tty just for it. + TTY.register(FS.makedev(5, 0), TTY.default_tty_ops); + TTY.register(FS.makedev(6, 0), TTY.default_tty1_ops); + FS.mkdev('/dev/tty', FS.makedev(5, 0)); + FS.mkdev('/dev/tty1', FS.makedev(6, 0)); + // setup /dev/[u]random + // use a buffer to avoid overhead of individual crypto calls per byte + var randomBuffer = new Uint8Array(1024), randomLeft = 0; + var randomByte = () => { + if (randomLeft === 0) { + randomFill(randomBuffer); + randomLeft = randomBuffer.byteLength; + } + return randomBuffer[--randomLeft]; + }; + FS.createDevice('/dev', 'random', randomByte); + FS.createDevice('/dev', 'urandom', randomByte); + // we're not going to emulate the actual shm device, + // just create the tmp dirs that reside in it commonly + FS.mkdir('/dev/shm'); + FS.mkdir('/dev/shm/tmp'); + }, + createSpecialDirectories() { + // create /proc/self/fd which allows /proc/self/fd/6 => readlink gives the + // name of the stream for fd 6 (see test_unistd_ttyname) + FS.mkdir('/proc'); + var proc_self = FS.mkdir('/proc/self'); + FS.mkdir('/proc/self/fd'); + FS.mount({ + mount() { + var node = FS.createNode(proc_self, 'fd', 16895, 73); + node.stream_ops = { + llseek: MEMFS.stream_ops.llseek, + }; + node.node_ops = { + lookup(parent, name) { + var fd = +name; + var stream = FS.getStreamChecked(fd); + var ret = { + parent: null, + mount: { mountpoint: 'fake' }, + node_ops: { readlink: () => stream.path }, + id: fd + 1, + }; + ret.parent = ret; // make it look like a simple root node + return ret; + }, + readdir() { + return Array.from(FS.streams.entries()) + .filter(([k, v]) => v) + .map(([k, v]) => k.toString()); + } + }; + return node; + } + }, {}, '/proc/self/fd'); + }, + createStandardStreams(input, output, error) { + // TODO deprecate the old functionality of a single + // input / output callback and that utilizes FS.createDevice + // and instead require a unique set of stream ops + + // by default, we symlink the standard streams to the + // default tty devices. however, if the standard streams + // have been overwritten we create a unique device for + // them instead. + if (input) { + FS.createDevice('/dev', 'stdin', input); + } else { + FS.symlink('/dev/tty', '/dev/stdin'); + } + if (output) { + FS.createDevice('/dev', 'stdout', null, output); + } else { + FS.symlink('/dev/tty', '/dev/stdout'); + } + if (error) { + FS.createDevice('/dev', 'stderr', null, error); + } else { + FS.symlink('/dev/tty1', '/dev/stderr'); + } + + // open default streams for the stdin, stdout and stderr devices + var stdin = FS.open('/dev/stdin', 0); + var stdout = FS.open('/dev/stdout', 1); + var stderr = FS.open('/dev/stderr', 1); + assert(stdin.fd === 0, `invalid handle for stdin (${stdin.fd})`); + assert(stdout.fd === 1, `invalid handle for stdout (${stdout.fd})`); + assert(stderr.fd === 2, `invalid handle for stderr (${stderr.fd})`); + }, + staticInit() { + FS.nameTable = new Array(4096); + + FS.mount(MEMFS, {}, '/'); + + FS.createDefaultDirectories(); + FS.createDefaultDevices(); + FS.createSpecialDirectories(); + + FS.filesystems = { + 'MEMFS': MEMFS, + }; + }, + init(input, output, error) { + assert(!FS.initialized, 'FS.init was previously called. If you want to initialize later with custom parameters, remove any earlier calls (note that one is automatically added to the generated code)'); + FS.initialized = true; + + // Allow Module.stdin etc. to provide defaults, if none explicitly passed to us here + input ??= Module['stdin']; + output ??= Module['stdout']; + error ??= Module['stderr']; + + FS.createStandardStreams(input, output, error); + }, + quit() { + FS.initialized = false; + // force-flush all streams, so we get musl std streams printed out + _fflush(0); + // close all of our streams + for (var stream of FS.streams) { + if (stream) { + FS.close(stream); + } + } + }, + findObject(path, dontResolveLastLink) { + var ret = FS.analyzePath(path, dontResolveLastLink); + if (!ret.exists) { + return null; + } + return ret.object; + }, + analyzePath(path, dontResolveLastLink) { + // operate from within the context of the symlink's target + try { + var lookup = FS.lookupPath(path, { follow: !dontResolveLastLink }); + path = lookup.path; + } catch (e) { + } + var ret = { + isRoot: false, exists: false, error: 0, name: null, path: null, object: null, + parentExists: false, parentPath: null, parentObject: null + }; + try { + var lookup = FS.lookupPath(path, { parent: true }); + ret.parentExists = true; + ret.parentPath = lookup.path; + ret.parentObject = lookup.node; + ret.name = PATH.basename(path); + lookup = FS.lookupPath(path, { follow: !dontResolveLastLink }); + ret.exists = true; + ret.path = lookup.path; + ret.object = lookup.node; + ret.name = lookup.node.name; + ret.isRoot = lookup.path === '/'; + } catch (e) { + ret.error = e.errno; + }; + return ret; + }, + createPath(parent, path, canRead, canWrite) { + parent = typeof parent == 'string' ? parent : FS.getPath(parent); + var parts = path.split('/').reverse(); + while (parts.length) { + var part = parts.pop(); + if (!part) continue; + var current = PATH.join2(parent, part); + try { + FS.mkdir(current); + } catch (e) { + if (e.errno != 20) throw e; + } + parent = current; + } + return current; + }, + createFile(parent, name, properties, canRead, canWrite) { + var path = PATH.join2(typeof parent == 'string' ? parent : FS.getPath(parent), name); + var mode = FS_getMode(canRead, canWrite); + return FS.create(path, mode); + }, + createDataFile(parent, name, data, canRead, canWrite, canOwn) { + var path = name; + if (parent) { + parent = typeof parent == 'string' ? parent : FS.getPath(parent); + path = name ? PATH.join2(parent, name) : parent; + } + var mode = FS_getMode(canRead, canWrite); + var node = FS.create(path, mode); + if (data) { + if (typeof data == 'string') { + var arr = new Array(data.length); + for (var i = 0, len = data.length; i < len; ++i) arr[i] = data.charCodeAt(i); + data = arr; + } + // make sure we can write to the file + FS.chmod(node, mode | 146); + var stream = FS.open(node, 577); + FS.write(stream, data, 0, data.length, 0, canOwn); + FS.close(stream); + FS.chmod(node, mode); + } + }, + createDevice(parent, name, input, output) { + var path = PATH.join2(typeof parent == 'string' ? parent : FS.getPath(parent), name); + var mode = FS_getMode(!!input, !!output); + FS.createDevice.major ??= 64; + var dev = FS.makedev(FS.createDevice.major++, 0); + // Create a fake device that a set of stream ops to emulate + // the old behavior. + FS.registerDevice(dev, { + open(stream) { + stream.seekable = false; + }, + close(stream) { + // flush any pending line data + if (output?.buffer?.length) { + output(10); + } + }, + read(stream, buffer, offset, length, pos /* ignored */) { + var bytesRead = 0; + for (var i = 0; i < length; i++) { + var result; + try { + result = input(); + } catch (e) { + throw new FS.ErrnoError(29); + } + if (result === undefined && bytesRead === 0) { + throw new FS.ErrnoError(6); + } + if (result === null || result === undefined) break; + bytesRead++; + buffer[offset+i] = result; + } + if (bytesRead) { + stream.node.atime = Date.now(); + } + return bytesRead; + }, + write(stream, buffer, offset, length, pos) { + for (var i = 0; i < length; i++) { + try { + output(buffer[offset+i]); + } catch (e) { + throw new FS.ErrnoError(29); + } + } + if (length) { + stream.node.mtime = stream.node.ctime = Date.now(); + } + return i; + } + }); + return FS.mkdev(path, mode, dev); + }, + forceLoadFile(obj) { + if (obj.isDevice || obj.isFolder || obj.link || obj.contents) return true; + if (typeof XMLHttpRequest != 'undefined') { + throw new Error("Lazy loading should have been performed (contents set) in createLazyFile, but it was not. Lazy loading only works in web workers. Use --embed-file or --preload-file in emcc on the main thread."); + } else { // Command-line. + try { + obj.contents = readBinary(obj.url); + obj.usedBytes = obj.contents.length; + } catch (e) { + throw new FS.ErrnoError(29); + } + } + }, + createLazyFile(parent, name, url, canRead, canWrite) { + // Lazy chunked Uint8Array (implements get and length from Uint8Array). + // Actual getting is abstracted away for eventual reuse. + class LazyUint8Array { + lengthKnown = false; + chunks = []; // Loaded chunks. Index is the chunk number + get(idx) { + if (idx > this.length-1 || idx < 0) { + return undefined; + } + var chunkOffset = idx % this.chunkSize; + var chunkNum = (idx / this.chunkSize)|0; + return this.getter(chunkNum)[chunkOffset]; + } + setDataGetter(getter) { + this.getter = getter; + } + cacheLength() { + // Find length + var xhr = new XMLHttpRequest(); + xhr.open('HEAD', url, false); + xhr.send(null); + if (!(xhr.status >= 200 && xhr.status < 300 || xhr.status === 304)) throw new Error("Couldn't load " + url + ". Status: " + xhr.status); + var datalength = Number(xhr.getResponseHeader("Content-length")); + var header; + var hasByteServing = (header = xhr.getResponseHeader("Accept-Ranges")) && header === "bytes"; + var usesGzip = (header = xhr.getResponseHeader("Content-Encoding")) && header === "gzip"; + + var chunkSize = 1024*1024; // Chunk size in bytes + + if (!hasByteServing) chunkSize = datalength; + + // Function to get a range from the remote URL. + var doXHR = (from, to) => { + if (from > to) throw new Error("invalid range (" + from + ", " + to + ") or no bytes requested!"); + if (to > datalength-1) throw new Error("only " + datalength + " bytes available! programmer error!"); + + // TODO: Use mozResponseArrayBuffer, responseStream, etc. if available. + var xhr = new XMLHttpRequest(); + xhr.open('GET', url, false); + if (datalength !== chunkSize) xhr.setRequestHeader("Range", "bytes=" + from + "-" + to); + + // Some hints to the browser that we want binary data. + xhr.responseType = 'arraybuffer'; + if (xhr.overrideMimeType) { + xhr.overrideMimeType('text/plain; charset=x-user-defined'); + } + + xhr.send(null); + if (!(xhr.status >= 200 && xhr.status < 300 || xhr.status === 304)) throw new Error("Couldn't load " + url + ". Status: " + xhr.status); + if (xhr.response !== undefined) { + return new Uint8Array(/** @type{Array} */(xhr.response || [])); + } + return intArrayFromString(xhr.responseText || '', true); + }; + var lazyArray = this; + lazyArray.setDataGetter((chunkNum) => { + var start = chunkNum * chunkSize; + var end = (chunkNum+1) * chunkSize - 1; // including this byte + end = Math.min(end, datalength-1); // if datalength-1 is selected, this is the last block + if (typeof lazyArray.chunks[chunkNum] == 'undefined') { + lazyArray.chunks[chunkNum] = doXHR(start, end); + } + if (typeof lazyArray.chunks[chunkNum] == 'undefined') throw new Error('doXHR failed!'); + return lazyArray.chunks[chunkNum]; + }); + + if (usesGzip || !datalength) { + // if the server uses gzip or doesn't supply the length, we have to download the whole file to get the (uncompressed) length + chunkSize = datalength = 1; // this will force getter(0)/doXHR do download the whole file + datalength = this.getter(0).length; + chunkSize = datalength; + out("LazyFiles on gzip forces download of the whole file when length is accessed"); + } + + this._length = datalength; + this._chunkSize = chunkSize; + this.lengthKnown = true; + } + get length() { + if (!this.lengthKnown) { + this.cacheLength(); + } + return this._length; + } + get chunkSize() { + if (!this.lengthKnown) { + this.cacheLength(); + } + return this._chunkSize; + } + } + + if (typeof XMLHttpRequest != 'undefined') { + if (!ENVIRONMENT_IS_WORKER) throw 'Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc'; + var lazyArray = new LazyUint8Array(); + var properties = { isDevice: false, contents: lazyArray }; + } else { + var properties = { isDevice: false, url: url }; + } + + var node = FS.createFile(parent, name, properties, canRead, canWrite); + // This is a total hack, but I want to get this lazy file code out of the + // core of MEMFS. If we want to keep this lazy file concept I feel it should + // be its own thin LAZYFS proxying calls to MEMFS. + if (properties.contents) { + node.contents = properties.contents; + } else if (properties.url) { + node.contents = null; + node.url = properties.url; + } + // Add a function that defers querying the file size until it is asked the first time. + Object.defineProperties(node, { + usedBytes: { + get: function() { return this.contents.length; } + } + }); + // override each stream op with one that tries to force load the lazy file first + var stream_ops = {}; + var keys = Object.keys(node.stream_ops); + keys.forEach((key) => { + var fn = node.stream_ops[key]; + stream_ops[key] = (...args) => { + FS.forceLoadFile(node); + return fn(...args); + }; + }); + function writeChunks(stream, buffer, offset, length, position) { + var contents = stream.node.contents; + if (position >= contents.length) + return 0; + var size = Math.min(contents.length - position, length); + assert(size >= 0); + if (contents.slice) { // normal array + for (var i = 0; i < size; i++) { + buffer[offset + i] = contents[position + i]; + } + } else { + for (var i = 0; i < size; i++) { // LazyUint8Array from sync binary XHR + buffer[offset + i] = contents.get(position + i); + } + } + return size; + } + // use a custom read function + stream_ops.read = (stream, buffer, offset, length, position) => { + FS.forceLoadFile(node); + return writeChunks(stream, buffer, offset, length, position) + }; + // use a custom mmap function + stream_ops.mmap = (stream, length, position, prot, flags) => { + FS.forceLoadFile(node); + var ptr = mmapAlloc(length); + if (!ptr) { + throw new FS.ErrnoError(48); + } + writeChunks(stream, HEAP8, ptr, length, position); + return { ptr, allocated: true }; + }; + node.stream_ops = stream_ops; + return node; + }, + absolutePath() { + abort('FS.absolutePath has been removed; use PATH_FS.resolve instead'); + }, + createFolder() { + abort('FS.createFolder has been removed; use FS.mkdir instead'); + }, + createLink() { + abort('FS.createLink has been removed; use FS.symlink instead'); + }, + joinPath() { + abort('FS.joinPath has been removed; use PATH.join instead'); + }, + mmapAlloc() { + abort('FS.mmapAlloc has been replaced by the top level function mmapAlloc'); + }, + standardizePath() { + abort('FS.standardizePath has been removed; use PATH.normalize instead'); + }, + }; + + var SYSCALLS = { + DEFAULT_POLLMASK:5, + calculateAt(dirfd, path, allowEmpty) { + if (PATH.isAbs(path)) { + return path; + } + // relative path + var dir; + if (dirfd === -100) { + dir = FS.cwd(); + } else { + var dirstream = SYSCALLS.getStreamFromFD(dirfd); + dir = dirstream.path; + } + if (path.length == 0) { + if (!allowEmpty) { + throw new FS.ErrnoError(44);; + } + return dir; + } + return dir + '/' + path; + }, + writeStat(buf, stat) { + HEAP32[((buf)>>2)] = stat.dev; + HEAP32[(((buf)+(4))>>2)] = stat.mode; + HEAPU32[(((buf)+(8))>>2)] = stat.nlink; + HEAP32[(((buf)+(12))>>2)] = stat.uid; + HEAP32[(((buf)+(16))>>2)] = stat.gid; + HEAP32[(((buf)+(20))>>2)] = stat.rdev; + HEAP64[(((buf)+(24))>>3)] = BigInt(stat.size); + HEAP32[(((buf)+(32))>>2)] = 4096; + HEAP32[(((buf)+(36))>>2)] = stat.blocks; + var atime = stat.atime.getTime(); + var mtime = stat.mtime.getTime(); + var ctime = stat.ctime.getTime(); + HEAP64[(((buf)+(40))>>3)] = BigInt(Math.floor(atime / 1000)); + HEAPU32[(((buf)+(48))>>2)] = (atime % 1000) * 1000 * 1000; + HEAP64[(((buf)+(56))>>3)] = BigInt(Math.floor(mtime / 1000)); + HEAPU32[(((buf)+(64))>>2)] = (mtime % 1000) * 1000 * 1000; + HEAP64[(((buf)+(72))>>3)] = BigInt(Math.floor(ctime / 1000)); + HEAPU32[(((buf)+(80))>>2)] = (ctime % 1000) * 1000 * 1000; + HEAP64[(((buf)+(88))>>3)] = BigInt(stat.ino); + return 0; + }, + writeStatFs(buf, stats) { + HEAP32[(((buf)+(4))>>2)] = stats.bsize; + HEAP32[(((buf)+(40))>>2)] = stats.bsize; + HEAP32[(((buf)+(8))>>2)] = stats.blocks; + HEAP32[(((buf)+(12))>>2)] = stats.bfree; + HEAP32[(((buf)+(16))>>2)] = stats.bavail; + HEAP32[(((buf)+(20))>>2)] = stats.files; + HEAP32[(((buf)+(24))>>2)] = stats.ffree; + HEAP32[(((buf)+(28))>>2)] = stats.fsid; + HEAP32[(((buf)+(44))>>2)] = stats.flags; // ST_NOSUID + HEAP32[(((buf)+(36))>>2)] = stats.namelen; + }, + doMsync(addr, stream, len, flags, offset) { + if (!FS.isFile(stream.node.mode)) { + throw new FS.ErrnoError(43); + } + if (flags & 2) { + // MAP_PRIVATE calls need not to be synced back to underlying fs + return 0; + } + var buffer = HEAPU8.slice(addr, addr + len); + FS.msync(stream, buffer, offset, len, flags); + }, + getStreamFromFD(fd) { + var stream = FS.getStreamChecked(fd); + return stream; + }, + varargs:undefined, + getStr(ptr) { + var ret = UTF8ToString(ptr); + return ret; + }, + }; + function ___syscall_fcntl64(fd, cmd, varargs) { + SYSCALLS.varargs = varargs; + try { + + var stream = SYSCALLS.getStreamFromFD(fd); + switch (cmd) { + case 0: { + var arg = syscallGetVarargI(); + if (arg < 0) { + return -28; + } + while (FS.streams[arg]) { + arg++; + } + var newStream; + newStream = FS.dupStream(stream, arg); + return newStream.fd; + } + case 1: + case 2: + return 0; // FD_CLOEXEC makes no sense for a single process. + case 3: + return stream.flags; + case 4: { + var arg = syscallGetVarargI(); + stream.flags |= arg; + return 0; + } + case 12: { + var arg = syscallGetVarargP(); + var offset = 0; + // We're always unlocked. + HEAP16[(((arg)+(offset))>>1)] = 2; + return 0; + } + case 13: + case 14: + // Pretend that the locking is successful. These are process-level locks, + // and Emscripten programs are a single process. If we supported linking a + // filesystem between programs, we'd need to do more here. + // See https://github.com/emscripten-core/emscripten/issues/23697 + return 0; + } + return -28; + } catch (e) { + if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + return -e.errno; + } + } + + + function ___syscall_ioctl(fd, op, varargs) { + SYSCALLS.varargs = varargs; + try { + + var stream = SYSCALLS.getStreamFromFD(fd); + switch (op) { + case 21509: { + if (!stream.tty) return -59; + return 0; + } + case 21505: { + if (!stream.tty) return -59; + if (stream.tty.ops.ioctl_tcgets) { + var termios = stream.tty.ops.ioctl_tcgets(stream); + var argp = syscallGetVarargP(); + HEAP32[((argp)>>2)] = termios.c_iflag || 0; + HEAP32[(((argp)+(4))>>2)] = termios.c_oflag || 0; + HEAP32[(((argp)+(8))>>2)] = termios.c_cflag || 0; + HEAP32[(((argp)+(12))>>2)] = termios.c_lflag || 0; + for (var i = 0; i < 32; i++) { + HEAP8[(argp + i)+(17)] = termios.c_cc[i] || 0; + } + return 0; + } + return 0; + } + case 21510: + case 21511: + case 21512: { + if (!stream.tty) return -59; + return 0; // no-op, not actually adjusting terminal settings + } + case 21506: + case 21507: + case 21508: { + if (!stream.tty) return -59; + if (stream.tty.ops.ioctl_tcsets) { + var argp = syscallGetVarargP(); + var c_iflag = HEAP32[((argp)>>2)]; + var c_oflag = HEAP32[(((argp)+(4))>>2)]; + var c_cflag = HEAP32[(((argp)+(8))>>2)]; + var c_lflag = HEAP32[(((argp)+(12))>>2)]; + var c_cc = [] + for (var i = 0; i < 32; i++) { + c_cc.push(HEAP8[(argp + i)+(17)]); + } + return stream.tty.ops.ioctl_tcsets(stream.tty, op, { c_iflag, c_oflag, c_cflag, c_lflag, c_cc }); + } + return 0; // no-op, not actually adjusting terminal settings + } + case 21519: { + if (!stream.tty) return -59; + var argp = syscallGetVarargP(); + HEAP32[((argp)>>2)] = 0; + return 0; + } + case 21520: { + if (!stream.tty) return -59; + return -28; // not supported + } + case 21531: { + var argp = syscallGetVarargP(); + return FS.ioctl(stream, op, argp); + } + case 21523: { + // TODO: in theory we should write to the winsize struct that gets + // passed in, but for now musl doesn't read anything on it + if (!stream.tty) return -59; + if (stream.tty.ops.ioctl_tiocgwinsz) { + var winsize = stream.tty.ops.ioctl_tiocgwinsz(stream.tty); + var argp = syscallGetVarargP(); + HEAP16[((argp)>>1)] = winsize[0]; + HEAP16[(((argp)+(2))>>1)] = winsize[1]; + } + return 0; + } + case 21524: { + // TODO: technically, this ioctl call should change the window size. + // but, since emscripten doesn't have any concept of a terminal window + // yet, we'll just silently throw it away as we do TIOCGWINSZ + if (!stream.tty) return -59; + return 0; + } + case 21515: { + if (!stream.tty) return -59; + return 0; + } + default: return -28; // not supported + } + } catch (e) { + if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + return -e.errno; + } + } + + + function ___syscall_openat(dirfd, path, flags, varargs) { + SYSCALLS.varargs = varargs; + try { + + path = SYSCALLS.getStr(path); + path = SYSCALLS.calculateAt(dirfd, path); + var mode = varargs ? syscallGetVarargI() : 0; + return FS.open(path, flags, mode).fd; + } catch (e) { + if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + return -e.errno; + } + } + + function ___syscall_unlinkat(dirfd, path, flags) { + try { + + path = SYSCALLS.getStr(path); + path = SYSCALLS.calculateAt(dirfd, path); + if (flags === 0) { + FS.unlink(path); + } else if (flags === 512) { + FS.rmdir(path); + } else { + abort('Invalid flags passed to unlinkat'); + } + return 0; + } catch (e) { + if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + return -e.errno; + } + } + + var __abort_js = () => + abort('native code called abort()'); + + var abortOnCannotGrowMemory = (requestedSize) => { + abort(`Cannot enlarge memory arrays to size ${requestedSize} bytes (OOM). Either (1) compile with -sINITIAL_MEMORY=X with X higher than the current value ${HEAP8.length}, (2) compile with -sALLOW_MEMORY_GROWTH which allows increasing the size at runtime, or (3) if you want malloc to return NULL (0) instead of this abort, compile with -sABORTING_MALLOC=0`); + }; + var _emscripten_resize_heap = (requestedSize) => { + var oldSize = HEAPU8.length; + // With CAN_ADDRESS_2GB or MEMORY64, pointers are already unsigned. + requestedSize >>>= 0; + abortOnCannotGrowMemory(requestedSize); + }; + + + var runtimeKeepaliveCounter = 0; + var keepRuntimeAlive = () => noExitRuntime || runtimeKeepaliveCounter > 0; + var _proc_exit = (code) => { + EXITSTATUS = code; + if (!keepRuntimeAlive()) { + Module['onExit']?.(code); + ABORT = true; + } + quit_(code, new ExitStatus(code)); + }; + + + /** @suppress {duplicate } */ + /** @param {boolean|number=} implicit */ + var exitJS = (status, implicit) => { + EXITSTATUS = status; + + checkUnflushedContent(); + + // if exit() was called explicitly, warn the user if the runtime isn't actually being shut down + if (keepRuntimeAlive() && !implicit) { + var msg = `program exited (with status: ${status}), but keepRuntimeAlive() is set (counter=${runtimeKeepaliveCounter}) due to an async operation, so halting execution but not exiting the runtime or preventing further async execution (you can use emscripten_force_exit, if you want to force a true shutdown)`; + err(msg); + } + + _proc_exit(status); + }; + var _exit = exitJS; + + function _fd_close(fd) { + try { + + var stream = SYSCALLS.getStreamFromFD(fd); + FS.close(stream); + return 0; + } catch (e) { + if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + return e.errno; + } + } + + /** @param {number=} offset */ + var doReadv = (stream, iov, iovcnt, offset) => { + var ret = 0; + for (var i = 0; i < iovcnt; i++) { + var ptr = HEAPU32[((iov)>>2)]; + var len = HEAPU32[(((iov)+(4))>>2)]; + iov += 8; + var curr = FS.read(stream, HEAP8, ptr, len, offset); + if (curr < 0) return -1; + ret += curr; + if (curr < len) break; // nothing more to read + if (typeof offset != 'undefined') { + offset += curr; + } + } + return ret; + }; + + function _fd_read(fd, iov, iovcnt, pnum) { + try { + + var stream = SYSCALLS.getStreamFromFD(fd); + var num = doReadv(stream, iov, iovcnt); + HEAPU32[((pnum)>>2)] = num; + return 0; + } catch (e) { + if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + return e.errno; + } + } + + + var INT53_MAX = 9007199254740992; + + var INT53_MIN = -9007199254740992; + var bigintToI53Checked = (num) => (num < INT53_MIN || num > INT53_MAX) ? NaN : Number(num); + function _fd_seek(fd, offset, whence, newOffset) { + offset = bigintToI53Checked(offset); + + + try { + + if (isNaN(offset)) return 61; + var stream = SYSCALLS.getStreamFromFD(fd); + FS.llseek(stream, offset, whence); + HEAP64[((newOffset)>>3)] = BigInt(stream.position); + if (stream.getdents && offset === 0 && whence === 0) stream.getdents = null; // reset readdir state + return 0; + } catch (e) { + if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + return e.errno; + } + ; + } + + /** @param {number=} offset */ + var doWritev = (stream, iov, iovcnt, offset) => { + var ret = 0; + for (var i = 0; i < iovcnt; i++) { + var ptr = HEAPU32[((iov)>>2)]; + var len = HEAPU32[(((iov)+(4))>>2)]; + iov += 8; + var curr = FS.write(stream, HEAP8, ptr, len, offset); + if (curr < 0) return -1; + ret += curr; + if (curr < len) { + // No more space to write. + break; + } + if (typeof offset != 'undefined') { + offset += curr; + } + } + return ret; + }; + + function _fd_write(fd, iov, iovcnt, pnum) { + try { + + var stream = SYSCALLS.getStreamFromFD(fd); + var num = doWritev(stream, iov, iovcnt); + HEAPU32[((pnum)>>2)] = num; + return 0; + } catch (e) { + if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + return e.errno; + } + } + + + var handleException = (e) => { + // Certain exception types we do not treat as errors since they are used for + // internal control flow. + // 1. ExitStatus, which is thrown by exit() + // 2. "unwind", which is thrown by emscripten_unwind_to_js_event_loop() and others + // that wish to return to JS event loop. + if (e instanceof ExitStatus || e == 'unwind') { + return EXITSTATUS; + } + checkStackCookie(); + if (e instanceof WebAssembly.RuntimeError) { + if (_emscripten_stack_get_current() <= 0) { + err('Stack overflow detected. You can try increasing -sSTACK_SIZE (currently set to 65536)'); + } + } + quit_(1, e); + }; + + + var stringToUTF8 = (str, outPtr, maxBytesToWrite) => { + assert(typeof maxBytesToWrite == 'number', 'stringToUTF8(str, outPtr, maxBytesToWrite) is missing the third parameter that specifies the length of the output buffer!'); + return stringToUTF8Array(str, HEAPU8, outPtr, maxBytesToWrite); + }; + + var stackAlloc = (sz) => __emscripten_stack_alloc(sz); + var stringToUTF8OnStack = (str) => { + var size = lengthBytesUTF8(str) + 1; + var ret = stackAlloc(size); + stringToUTF8(str, ret, size); + return ret; + }; + + FS.createPreloadedFile = FS_createPreloadedFile; + FS.staticInit(); + // Set module methods based on EXPORTED_RUNTIME_METHODS + ; +// End JS library code + +function checkIncomingModuleAPI() { + ignoredModuleProp('fetchSettings'); +} +var wasmImports = { + /** @export */ + __syscall_fcntl64: ___syscall_fcntl64, + /** @export */ + __syscall_ioctl: ___syscall_ioctl, + /** @export */ + __syscall_openat: ___syscall_openat, + /** @export */ + __syscall_unlinkat: ___syscall_unlinkat, + /** @export */ + _abort_js: __abort_js, + /** @export */ + emscripten_resize_heap: _emscripten_resize_heap, + /** @export */ + exit: _exit, + /** @export */ + fd_close: _fd_close, + /** @export */ + fd_read: _fd_read, + /** @export */ + fd_seek: _fd_seek, + /** @export */ + fd_write: _fd_write +}; +var wasmExports; +createWasm(); +var ___wasm_call_ctors = createExportWrapper('__wasm_call_ctors', 0); +var _main = Module['_main'] = createExportWrapper('__main_argc_argv', 2); +var _strerror = createExportWrapper('strerror', 1); +var _fflush = createExportWrapper('fflush', 1); +var _emscripten_stack_init = () => (_emscripten_stack_init = wasmExports['emscripten_stack_init'])(); +var _emscripten_stack_get_free = () => (_emscripten_stack_get_free = wasmExports['emscripten_stack_get_free'])(); +var _emscripten_stack_get_base = () => (_emscripten_stack_get_base = wasmExports['emscripten_stack_get_base'])(); +var _emscripten_stack_get_end = () => (_emscripten_stack_get_end = wasmExports['emscripten_stack_get_end'])(); +var __emscripten_stack_restore = (a0) => (__emscripten_stack_restore = wasmExports['_emscripten_stack_restore'])(a0); +var __emscripten_stack_alloc = (a0) => (__emscripten_stack_alloc = wasmExports['_emscripten_stack_alloc'])(a0); +var _emscripten_stack_get_current = () => (_emscripten_stack_get_current = wasmExports['emscripten_stack_get_current'])(); + + +// include: postamble.js +// === Auto-generated postamble setup entry stuff === + +var missingLibrarySymbols = [ + 'writeI53ToI64', + 'writeI53ToI64Clamped', + 'writeI53ToI64Signaling', + 'writeI53ToU64Clamped', + 'writeI53ToU64Signaling', + 'readI53FromI64', + 'readI53FromU64', + 'convertI32PairToI53', + 'convertI32PairToI53Checked', + 'convertU32PairToI53', + 'getTempRet0', + 'setTempRet0', + 'zeroMemory', + 'getHeapMax', + 'growMemory', + 'inetPton4', + 'inetNtop4', + 'inetPton6', + 'inetNtop6', + 'readSockaddr', + 'writeSockaddr', + 'emscriptenLog', + 'readEmAsmArgs', + 'jstoi_q', + 'getExecutableName', + 'listenOnce', + 'autoResumeAudioContext', + 'getDynCaller', + 'dynCall', + 'runtimeKeepalivePush', + 'runtimeKeepalivePop', + 'callUserCallback', + 'maybeExit', + 'asmjsMangle', + 'alignMemory', + 'HandleAllocator', + 'getNativeTypeSize', + 'addOnInit', + 'addOnPostCtor', + 'addOnPreMain', + 'addOnExit', + 'STACK_SIZE', + 'STACK_ALIGN', + 'POINTER_SIZE', + 'ASSERTIONS', + 'getCFunc', + 'ccall', + 'cwrap', + 'uleb128Encode', + 'sigToWasmTypes', + 'generateFuncType', + 'convertJsFunctionToWasm', + 'getEmptyTableSlot', + 'updateTableMap', + 'getFunctionAddress', + 'addFunction', + 'removeFunction', + 'reallyNegative', + 'unSign', + 'strLen', + 'reSign', + 'formatString', + 'intArrayToString', + 'AsciiToString', + 'stringToAscii', + 'UTF16ToString', + 'stringToUTF16', + 'lengthBytesUTF16', + 'UTF32ToString', + 'stringToUTF32', + 'lengthBytesUTF32', + 'stringToNewUTF8', + 'writeArrayToMemory', + 'registerKeyEventCallback', + 'maybeCStringToJsString', + 'findEventTarget', + 'getBoundingClientRect', + 'fillMouseEventData', + 'registerMouseEventCallback', + 'registerWheelEventCallback', + 'registerUiEventCallback', + 'registerFocusEventCallback', + 'fillDeviceOrientationEventData', + 'registerDeviceOrientationEventCallback', + 'fillDeviceMotionEventData', + 'registerDeviceMotionEventCallback', + 'screenOrientation', + 'fillOrientationChangeEventData', + 'registerOrientationChangeEventCallback', + 'fillFullscreenChangeEventData', + 'registerFullscreenChangeEventCallback', + 'JSEvents_requestFullscreen', + 'JSEvents_resizeCanvasForFullscreen', + 'registerRestoreOldStyle', + 'hideEverythingExceptGivenElement', + 'restoreHiddenElements', + 'setLetterbox', + 'softFullscreenResizeWebGLRenderTarget', + 'doRequestFullscreen', + 'fillPointerlockChangeEventData', + 'registerPointerlockChangeEventCallback', + 'registerPointerlockErrorEventCallback', + 'requestPointerLock', + 'fillVisibilityChangeEventData', + 'registerVisibilityChangeEventCallback', + 'registerTouchEventCallback', + 'fillGamepadEventData', + 'registerGamepadEventCallback', + 'registerBeforeUnloadEventCallback', + 'fillBatteryEventData', + 'battery', + 'registerBatteryEventCallback', + 'setCanvasElementSize', + 'getCanvasElementSize', + 'jsStackTrace', + 'getCallstack', + 'convertPCtoSourceLocation', + 'getEnvStrings', + 'checkWasiClock', + 'wasiRightsToMuslOFlags', + 'wasiOFlagsToMuslOFlags', + 'safeSetTimeout', + 'setImmediateWrapped', + 'safeRequestAnimationFrame', + 'clearImmediateWrapped', + 'registerPostMainLoop', + 'registerPreMainLoop', + 'getPromise', + 'makePromise', + 'idsToPromises', + 'makePromiseCallback', + 'ExceptionInfo', + 'findMatchingCatch', + 'Browser_asyncPrepareDataCounter', + 'isLeapYear', + 'ydayFromDate', + 'arraySum', + 'addDays', + 'getSocketFromFD', + 'getSocketAddress', + 'FS_unlink', + 'FS_mkdirTree', + '_setNetworkCallback', + 'heapObjectForWebGLType', + 'toTypedArrayIndex', + 'webgl_enable_ANGLE_instanced_arrays', + 'webgl_enable_OES_vertex_array_object', + 'webgl_enable_WEBGL_draw_buffers', + 'webgl_enable_WEBGL_multi_draw', + 'webgl_enable_EXT_polygon_offset_clamp', + 'webgl_enable_EXT_clip_control', + 'webgl_enable_WEBGL_polygon_mode', + 'emscriptenWebGLGet', + 'computeUnpackAlignedImageSize', + 'colorChannelsInGlTextureFormat', + 'emscriptenWebGLGetTexPixelData', + 'emscriptenWebGLGetUniform', + 'webglGetUniformLocation', + 'webglPrepareUniformLocationsBeforeFirstUse', + 'webglGetLeftBracePos', + 'emscriptenWebGLGetVertexAttrib', + '__glGetActiveAttribOrUniform', + 'writeGLArray', + 'registerWebGlEventCallback', + 'runAndAbortIfError', + 'ALLOC_NORMAL', + 'ALLOC_STACK', + 'allocate', + 'writeStringToMemory', + 'writeAsciiToMemory', + 'demangle', + 'stackTrace', +]; +missingLibrarySymbols.forEach(missingLibrarySymbol) + +var unexportedSymbols = [ + 'run', + 'addRunDependency', + 'removeRunDependency', + 'out', + 'err', + 'callMain', + 'abort', + 'wasmMemory', + 'wasmExports', + 'writeStackCookie', + 'checkStackCookie', + 'INT53_MAX', + 'INT53_MIN', + 'bigintToI53Checked', + 'stackSave', + 'stackRestore', + 'stackAlloc', + 'ptrToString', + 'exitJS', + 'abortOnCannotGrowMemory', + 'ENV', + 'ERRNO_CODES', + 'strError', + 'DNS', + 'Protocols', + 'Sockets', + 'timers', + 'warnOnce', + 'readEmAsmArgsArray', + 'jstoi_s', + 'handleException', + 'keepRuntimeAlive', + 'asyncLoad', + 'mmapAlloc', + 'wasmTable', + 'noExitRuntime', + 'addOnPreRun', + 'addOnPostRun', + 'freeTableIndexes', + 'functionsInTableMap', + 'setValue', + 'getValue', + 'PATH', + 'PATH_FS', + 'UTF8Decoder', + 'UTF8ArrayToString', + 'UTF8ToString', + 'stringToUTF8Array', + 'stringToUTF8', + 'lengthBytesUTF8', + 'intArrayFromString', + 'UTF16Decoder', + 'stringToUTF8OnStack', + 'JSEvents', + 'specialHTMLTargets', + 'findCanvasEventTarget', + 'currentFullscreenStrategy', + 'restoreOldWindowedStyle', + 'UNWIND_CACHE', + 'ExitStatus', + 'doReadv', + 'doWritev', + 'initRandomFill', + 'randomFill', + 'emSetImmediate', + 'emClearImmediate_deps', + 'emClearImmediate', + 'promiseMap', + 'uncaughtExceptionCount', + 'exceptionLast', + 'exceptionCaught', + 'Browser', + 'getPreloadedImageData__data', + 'wget', + 'MONTH_DAYS_REGULAR', + 'MONTH_DAYS_LEAP', + 'MONTH_DAYS_REGULAR_CUMULATIVE', + 'MONTH_DAYS_LEAP_CUMULATIVE', + 'SYSCALLS', + 'preloadPlugins', + 'FS_createPreloadedFile', + 'FS_modeStringToFlags', + 'FS_getMode', + 'FS_stdin_getChar_buffer', + 'FS_stdin_getChar', + 'FS_createPath', + 'FS_createDevice', + 'FS_readFile', + 'FS', + 'FS_createDataFile', + 'FS_createLazyFile', + 'MEMFS', + 'TTY', + 'PIPEFS', + 'SOCKFS', + 'tempFixedLengthArray', + 'miniTempWebGLFloatBuffers', + 'miniTempWebGLIntBuffers', + 'GL', + 'AL', + 'GLUT', + 'EGL', + 'GLEW', + 'IDBStore', + 'SDL', + 'SDL_gfx', + 'allocateUTF8', + 'allocateUTF8OnStack', + 'print', + 'printErr', +]; +unexportedSymbols.forEach(unexportedRuntimeSymbol); + + + +var calledRun; + +function callMain(args = []) { + assert(runDependencies == 0, 'cannot call main when async dependencies remain! (listen on Module["onRuntimeInitialized"])'); + assert(typeof onPreRuns === 'undefined' || onPreRuns.length == 0, 'cannot call main when preRun functions remain to be called'); + + var entryFunction = _main; + + args.unshift(thisProgram); + + var argc = args.length; + var argv = stackAlloc((argc + 1) * 4); + var argv_ptr = argv; + args.forEach((arg) => { + HEAPU32[((argv_ptr)>>2)] = stringToUTF8OnStack(arg); + argv_ptr += 4; + }); + HEAPU32[((argv_ptr)>>2)] = 0; + + try { + + var ret = entryFunction(argc, argv); + + // if we're not running an evented main loop, it's time to exit + exitJS(ret, /* implicit = */ true); + return ret; + } catch (e) { + return handleException(e); + } +} + +function stackCheckInit() { + // This is normally called automatically during __wasm_call_ctors but need to + // get these values before even running any of the ctors so we call it redundantly + // here. + _emscripten_stack_init(); + // TODO(sbc): Move writeStackCookie to native to to avoid this. + writeStackCookie(); +} + +function run(args = arguments_) { + + if (runDependencies > 0) { + dependenciesFulfilled = run; + return; + } + + stackCheckInit(); + + preRun(); + + // a preRun added a dependency, run will be called later + if (runDependencies > 0) { + dependenciesFulfilled = run; + return; + } + + function doRun() { + // run may have just been called through dependencies being fulfilled just in this very frame, + // or while the async setStatus time below was happening + assert(!calledRun); + calledRun = true; + Module['calledRun'] = true; + + if (ABORT) return; + + initRuntime(); + + preMain(); + + Module['onRuntimeInitialized']?.(); + consumedModuleProp('onRuntimeInitialized'); + + var noInitialRun = Module['noInitialRun'];legacyModuleProp('noInitialRun', 'noInitialRun'); + if (!noInitialRun) callMain(args); + + postRun(); + } + + if (Module['setStatus']) { + Module['setStatus']('Running...'); + setTimeout(() => { + setTimeout(() => Module['setStatus'](''), 1); + doRun(); + }, 1); + } else + { + doRun(); + } + checkStackCookie(); +} + +function checkUnflushedContent() { + // Compiler settings do not allow exiting the runtime, so flushing + // the streams is not possible. but in ASSERTIONS mode we check + // if there was something to flush, and if so tell the user they + // should request that the runtime be exitable. + // Normally we would not even include flush() at all, but in ASSERTIONS + // builds we do so just for this check, and here we see if there is any + // content to flush, that is, we check if there would have been + // something a non-ASSERTIONS build would have not seen. + // How we flush the streams depends on whether we are in SYSCALLS_REQUIRE_FILESYSTEM=0 + // mode (which has its own special function for this; otherwise, all + // the code is inside libc) + var oldOut = out; + var oldErr = err; + var has = false; + out = err = (x) => { + has = true; + } + try { // it doesn't matter if it fails + _fflush(0); + // also flush in the JS FS layer + ['stdout', 'stderr'].forEach((name) => { + var info = FS.analyzePath('/dev/' + name); + if (!info) return; + var stream = info.object; + var rdev = stream.rdev; + var tty = TTY.ttys[rdev]; + if (tty?.output?.length) { + has = true; + } + }); + } catch(e) {} + out = oldOut; + err = oldErr; + if (has) { + warnOnce('stdio streams had content in them that was not flushed. you should set EXIT_RUNTIME to 1 (see the Emscripten FAQ), or make sure to emit a newline when you printf etc.'); + } +} + +if (Module['preInit']) { + if (typeof Module['preInit'] == 'function') Module['preInit'] = [Module['preInit']]; + while (Module['preInit'].length > 0) { + Module['preInit'].pop()(); + } +} +consumedModuleProp('preInit'); + +run(); + +// end include: postamble.js + diff --git a/thirdparty/zlib-1.3.1/build-emcmake/minigzip64.wasm b/thirdparty/zlib-1.3.1/build-emcmake/minigzip64.wasm new file mode 100755 index 0000000000000000000000000000000000000000..96242792f0c9f56e3b0bbaf56a8b5585122cf40e GIT binary patch literal 201173 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%0Ao?2S1?5E*YQ-`SfyPiMH9NGLhGsd8sK!!6MI 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%0Ac*c`bUT=EJYTyz?0Zd?te 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 L-Kom37XAMK<9ii+ literal 0 HcmV?d00001 diff --git a/thirdparty/zlib-1.3.1/build-emcmake/zconf.h b/thirdparty/zlib-1.3.1/build-emcmake/zconf.h new file mode 100644 index 0000000..cf801d3 --- /dev/null +++ b/thirdparty/zlib-1.3.1/build-emcmake/zconf.h @@ -0,0 +1,545 @@ +/* zconf.h -- configuration of the zlib compression library + * Copyright (C) 1995-2024 Jean-loup Gailly, Mark Adler + * For conditions of distribution and use, see copyright notice in zlib.h + */ + +/* @(#) $Id$ */ + +#ifndef ZCONF_H +#define ZCONF_H +/* #undef Z_PREFIX */ +#define Z_HAVE_UNISTD_H + +/* + * If you *really* need a unique prefix for all types and library functions, + * compile with -DZ_PREFIX. The "standard" zlib should be compiled without it. + * Even better than compiling with -DZ_PREFIX would be to use configure to set + * this permanently in zconf.h using "./configure --zprefix". + */ +#ifdef Z_PREFIX /* may be set to #if 1 by ./configure */ +# define Z_PREFIX_SET + +/* all linked symbols and init macros */ +# define _dist_code z__dist_code +# define _length_code z__length_code +# define _tr_align z__tr_align +# define _tr_flush_bits z__tr_flush_bits +# define _tr_flush_block z__tr_flush_block +# define _tr_init z__tr_init +# define _tr_stored_block z__tr_stored_block +# define _tr_tally z__tr_tally +# define adler32 z_adler32 +# define adler32_combine z_adler32_combine +# define adler32_combine64 z_adler32_combine64 +# define adler32_z z_adler32_z +# ifndef Z_SOLO +# define compress z_compress +# define compress2 z_compress2 +# define compressBound z_compressBound +# endif +# define crc32 z_crc32 +# define crc32_combine z_crc32_combine +# define crc32_combine64 z_crc32_combine64 +# define crc32_combine_gen z_crc32_combine_gen +# define crc32_combine_gen64 z_crc32_combine_gen64 +# define crc32_combine_op z_crc32_combine_op +# define crc32_z z_crc32_z +# define deflate z_deflate +# define deflateBound z_deflateBound +# define deflateCopy z_deflateCopy +# define deflateEnd z_deflateEnd +# define deflateGetDictionary z_deflateGetDictionary +# define deflateInit z_deflateInit +# define deflateInit2 z_deflateInit2 +# define deflateInit2_ z_deflateInit2_ +# define deflateInit_ z_deflateInit_ +# define deflateParams z_deflateParams +# define deflatePending z_deflatePending +# define deflatePrime z_deflatePrime +# define deflateReset z_deflateReset +# define deflateResetKeep z_deflateResetKeep +# define deflateSetDictionary z_deflateSetDictionary +# define deflateSetHeader z_deflateSetHeader +# define deflateTune z_deflateTune +# define deflate_copyright z_deflate_copyright +# define get_crc_table z_get_crc_table +# ifndef Z_SOLO +# define gz_error z_gz_error +# define gz_intmax z_gz_intmax +# define gz_strwinerror z_gz_strwinerror +# define gzbuffer z_gzbuffer +# define gzclearerr z_gzclearerr +# define gzclose z_gzclose +# define gzclose_r z_gzclose_r +# define gzclose_w z_gzclose_w +# define gzdirect z_gzdirect +# define gzdopen z_gzdopen +# define gzeof z_gzeof +# define gzerror z_gzerror +# define gzflush z_gzflush +# define gzfread z_gzfread +# define gzfwrite z_gzfwrite +# define gzgetc z_gzgetc +# define gzgetc_ z_gzgetc_ +# define gzgets z_gzgets +# define gzoffset z_gzoffset +# define gzoffset64 z_gzoffset64 +# define gzopen z_gzopen +# define gzopen64 z_gzopen64 +# ifdef _WIN32 +# define gzopen_w z_gzopen_w +# endif +# define gzprintf z_gzprintf +# define gzputc z_gzputc +# define gzputs z_gzputs +# define gzread z_gzread +# define gzrewind z_gzrewind +# define gzseek z_gzseek +# define gzseek64 z_gzseek64 +# define gzsetparams z_gzsetparams +# define gztell z_gztell +# define gztell64 z_gztell64 +# define gzungetc z_gzungetc +# define gzvprintf z_gzvprintf +# define gzwrite z_gzwrite +# endif +# define inflate z_inflate +# define inflateBack z_inflateBack +# define inflateBackEnd z_inflateBackEnd +# define inflateBackInit z_inflateBackInit +# define inflateBackInit_ z_inflateBackInit_ +# define inflateCodesUsed z_inflateCodesUsed +# define inflateCopy z_inflateCopy +# define inflateEnd z_inflateEnd +# define inflateGetDictionary z_inflateGetDictionary +# define inflateGetHeader z_inflateGetHeader +# define inflateInit z_inflateInit +# define inflateInit2 z_inflateInit2 +# define inflateInit2_ z_inflateInit2_ +# define inflateInit_ z_inflateInit_ +# define inflateMark z_inflateMark +# define inflatePrime z_inflatePrime +# define inflateReset z_inflateReset +# define inflateReset2 z_inflateReset2 +# define inflateResetKeep z_inflateResetKeep +# define inflateSetDictionary z_inflateSetDictionary +# define inflateSync z_inflateSync +# define inflateSyncPoint z_inflateSyncPoint +# define inflateUndermine z_inflateUndermine +# define inflateValidate z_inflateValidate +# define inflate_copyright z_inflate_copyright +# define inflate_fast z_inflate_fast +# define inflate_table z_inflate_table +# ifndef Z_SOLO +# define uncompress z_uncompress +# define uncompress2 z_uncompress2 +# endif +# define zError z_zError +# ifndef Z_SOLO +# define zcalloc z_zcalloc +# define zcfree z_zcfree +# endif +# define zlibCompileFlags z_zlibCompileFlags +# define zlibVersion z_zlibVersion + +/* all zlib typedefs in zlib.h and zconf.h */ +# define Byte z_Byte +# define Bytef z_Bytef +# define alloc_func z_alloc_func +# define charf z_charf +# define free_func z_free_func +# ifndef Z_SOLO +# define gzFile z_gzFile +# endif +# define gz_header z_gz_header +# define gz_headerp z_gz_headerp +# define in_func z_in_func +# define intf z_intf +# define out_func z_out_func +# define uInt z_uInt +# define uIntf z_uIntf +# define uLong z_uLong +# define uLongf z_uLongf +# define voidp z_voidp +# define voidpc z_voidpc +# define voidpf z_voidpf + +/* all zlib structs in zlib.h and zconf.h */ +# define gz_header_s z_gz_header_s +# define internal_state z_internal_state + +#endif + +#if defined(__MSDOS__) && !defined(MSDOS) +# define MSDOS +#endif +#if (defined(OS_2) || defined(__OS2__)) && !defined(OS2) +# define OS2 +#endif +#if defined(_WINDOWS) && !defined(WINDOWS) +# define WINDOWS +#endif +#if defined(_WIN32) || defined(_WIN32_WCE) || defined(__WIN32__) +# ifndef WIN32 +# define WIN32 +# endif +#endif +#if (defined(MSDOS) || defined(OS2) || defined(WINDOWS)) && !defined(WIN32) +# if !defined(__GNUC__) && !defined(__FLAT__) && !defined(__386__) +# ifndef SYS16BIT +# define SYS16BIT +# endif +# endif +#endif + +/* + * Compile with -DMAXSEG_64K if the alloc function cannot allocate more + * than 64k bytes at a time (needed on systems with 16-bit int). + */ +#ifdef SYS16BIT +# define MAXSEG_64K +#endif +#ifdef MSDOS +# define UNALIGNED_OK +#endif + +#ifdef __STDC_VERSION__ +# ifndef STDC +# define STDC +# endif +# if __STDC_VERSION__ >= 199901L +# ifndef STDC99 +# define STDC99 +# endif +# endif +#endif +#if !defined(STDC) && (defined(__STDC__) || defined(__cplusplus)) +# define STDC +#endif +#if !defined(STDC) && (defined(__GNUC__) || defined(__BORLANDC__)) +# define STDC +#endif +#if !defined(STDC) && (defined(MSDOS) || defined(WINDOWS) || defined(WIN32)) +# define STDC +#endif +#if !defined(STDC) && (defined(OS2) || defined(__HOS_AIX__)) +# define STDC +#endif + +#if defined(__OS400__) && !defined(STDC) /* iSeries (formerly AS/400). */ +# define STDC +#endif + +#ifndef STDC +# ifndef const /* cannot use !defined(STDC) && !defined(const) on Mac */ +# define const /* note: need a more gentle solution here */ +# endif +#endif + +#if defined(ZLIB_CONST) && !defined(z_const) +# define z_const const +#else +# define z_const +#endif + +#ifdef Z_SOLO +# ifdef _WIN64 + typedef unsigned long long z_size_t; +# else + typedef unsigned long z_size_t; +# endif +#else +# define z_longlong long long +# if defined(NO_SIZE_T) + typedef unsigned NO_SIZE_T z_size_t; +# elif defined(STDC) +# include + typedef size_t z_size_t; +# else + typedef unsigned long z_size_t; +# endif +# undef z_longlong +#endif + +/* Maximum value for memLevel in deflateInit2 */ +#ifndef MAX_MEM_LEVEL +# ifdef MAXSEG_64K +# define MAX_MEM_LEVEL 8 +# else +# define MAX_MEM_LEVEL 9 +# endif +#endif + +/* Maximum value for windowBits in deflateInit2 and inflateInit2. + * WARNING: reducing MAX_WBITS makes minigzip unable to extract .gz files + * created by gzip. (Files created by minigzip can still be extracted by + * gzip.) + */ +#ifndef MAX_WBITS +# define MAX_WBITS 15 /* 32K LZ77 window */ +#endif + +/* The memory requirements for deflate are (in bytes): + (1 << (windowBits+2)) + (1 << (memLevel+9)) + that is: 128K for windowBits=15 + 128K for memLevel = 8 (default values) + plus a few kilobytes for small objects. For example, if you want to reduce + the default memory requirements from 256K to 128K, compile with + make CFLAGS="-O -DMAX_WBITS=14 -DMAX_MEM_LEVEL=7" + Of course this will generally degrade compression (there's no free lunch). + + The memory requirements for inflate are (in bytes) 1 << windowBits + that is, 32K for windowBits=15 (default value) plus about 7 kilobytes + for small objects. +*/ + + /* Type declarations */ + +#ifndef OF /* function prototypes */ +# ifdef STDC +# define OF(args) args +# else +# define OF(args) () +# endif +#endif + +/* The following definitions for FAR are needed only for MSDOS mixed + * model programming (small or medium model with some far allocations). + * This was tested only with MSC; for other MSDOS compilers you may have + * to define NO_MEMCPY in zutil.h. If you don't need the mixed model, + * just define FAR to be empty. + */ +#ifdef SYS16BIT +# if defined(M_I86SM) || defined(M_I86MM) + /* MSC small or medium model */ +# define SMALL_MEDIUM +# ifdef _MSC_VER +# define FAR _far +# else +# define FAR far +# endif +# endif +# if (defined(__SMALL__) || defined(__MEDIUM__)) + /* Turbo C small or medium model */ +# define SMALL_MEDIUM +# ifdef __BORLANDC__ +# define FAR _far +# else +# define FAR far +# endif +# endif +#endif + +#if defined(WINDOWS) || defined(WIN32) + /* If building or using zlib as a DLL, define ZLIB_DLL. + * This is not mandatory, but it offers a little performance increase. + */ +# ifdef ZLIB_DLL +# if defined(WIN32) && (!defined(__BORLANDC__) || (__BORLANDC__ >= 0x500)) +# ifdef ZLIB_INTERNAL +# define ZEXTERN extern __declspec(dllexport) +# else +# define ZEXTERN extern __declspec(dllimport) +# endif +# endif +# endif /* ZLIB_DLL */ + /* If building or using zlib with the WINAPI/WINAPIV calling convention, + * define ZLIB_WINAPI. + * Caution: the standard ZLIB1.DLL is NOT compiled using ZLIB_WINAPI. + */ +# ifdef ZLIB_WINAPI +# ifdef FAR +# undef FAR +# endif +# ifndef WIN32_LEAN_AND_MEAN +# define WIN32_LEAN_AND_MEAN +# endif +# include + /* No need for _export, use ZLIB.DEF instead. */ + /* For complete Windows compatibility, use WINAPI, not __stdcall. */ +# define ZEXPORT WINAPI +# ifdef WIN32 +# define ZEXPORTVA WINAPIV +# else +# define ZEXPORTVA FAR CDECL +# endif +# endif +#endif + +#if defined (__BEOS__) +# ifdef ZLIB_DLL +# ifdef ZLIB_INTERNAL +# define ZEXPORT __declspec(dllexport) +# define ZEXPORTVA __declspec(dllexport) +# else +# define ZEXPORT __declspec(dllimport) +# define ZEXPORTVA __declspec(dllimport) +# endif +# endif +#endif + +#ifndef ZEXTERN +# define ZEXTERN extern +#endif +#ifndef ZEXPORT +# define ZEXPORT +#endif +#ifndef ZEXPORTVA +# define ZEXPORTVA +#endif + +#ifndef FAR +# define FAR +#endif + +#if !defined(__MACTYPES__) +typedef unsigned char Byte; /* 8 bits */ +#endif +typedef unsigned int uInt; /* 16 bits or more */ +typedef unsigned long uLong; /* 32 bits or more */ + +#ifdef SMALL_MEDIUM + /* Borland C/C++ and some old MSC versions ignore FAR inside typedef */ +# define Bytef Byte FAR +#else + typedef Byte FAR Bytef; +#endif +typedef char FAR charf; +typedef int FAR intf; +typedef uInt FAR uIntf; +typedef uLong FAR uLongf; + +#ifdef STDC + typedef void const *voidpc; + typedef void FAR *voidpf; + typedef void *voidp; +#else + typedef Byte const *voidpc; + typedef Byte FAR *voidpf; + typedef Byte *voidp; +#endif + +#if !defined(Z_U4) && !defined(Z_SOLO) && defined(STDC) +# include +# if (UINT_MAX == 0xffffffffUL) +# define Z_U4 unsigned +# elif (ULONG_MAX == 0xffffffffUL) +# define Z_U4 unsigned long +# elif (USHRT_MAX == 0xffffffffUL) +# define Z_U4 unsigned short +# endif +#endif + +#ifdef Z_U4 + typedef Z_U4 z_crc_t; +#else + typedef unsigned long z_crc_t; +#endif + +#ifdef HAVE_UNISTD_H /* may be set to #if 1 by ./configure */ +# define Z_HAVE_UNISTD_H +#endif + +#ifdef HAVE_STDARG_H /* may be set to #if 1 by ./configure */ +# define Z_HAVE_STDARG_H +#endif + +#ifdef STDC +# ifndef Z_SOLO +# include /* for off_t */ +# endif +#endif + +#if defined(STDC) || defined(Z_HAVE_STDARG_H) +# ifndef Z_SOLO +# include /* for va_list */ +# endif +#endif + +#ifdef _WIN32 +# ifndef Z_SOLO +# include /* for wchar_t */ +# endif +#endif + +/* a little trick to accommodate both "#define _LARGEFILE64_SOURCE" and + * "#define _LARGEFILE64_SOURCE 1" as requesting 64-bit operations, (even + * though the former does not conform to the LFS document), but considering + * both "#undef _LARGEFILE64_SOURCE" and "#define _LARGEFILE64_SOURCE 0" as + * equivalently requesting no 64-bit operations + */ +#if defined(_LARGEFILE64_SOURCE) && -_LARGEFILE64_SOURCE - -1 == 1 +# undef _LARGEFILE64_SOURCE +#endif + +#ifndef Z_HAVE_UNISTD_H +# ifdef __WATCOMC__ +# define Z_HAVE_UNISTD_H +# endif +#endif +#ifndef Z_HAVE_UNISTD_H +# if defined(_LARGEFILE64_SOURCE) && !defined(_WIN32) +# define Z_HAVE_UNISTD_H +# endif +#endif +#ifndef Z_SOLO +# if defined(Z_HAVE_UNISTD_H) +# include /* for SEEK_*, off_t, and _LFS64_LARGEFILE */ +# ifdef VMS +# include /* for off_t */ +# endif +# ifndef z_off_t +# define z_off_t off_t +# endif +# endif +#endif + +#if defined(_LFS64_LARGEFILE) && _LFS64_LARGEFILE-0 +# define Z_LFS64 +#endif + +#if defined(_LARGEFILE64_SOURCE) && defined(Z_LFS64) +# define Z_LARGE64 +#endif + +#if defined(_FILE_OFFSET_BITS) && _FILE_OFFSET_BITS-0 == 64 && defined(Z_LFS64) +# define Z_WANT64 +#endif + +#if !defined(SEEK_SET) && !defined(Z_SOLO) +# define SEEK_SET 0 /* Seek from beginning of file. */ +# define SEEK_CUR 1 /* Seek from current position. */ +# define SEEK_END 2 /* Set file pointer to EOF plus "offset" */ +#endif + +#ifndef z_off_t +# define z_off_t long +#endif + +#if !defined(_WIN32) && defined(Z_LARGE64) +# define z_off64_t off64_t +#else +# if defined(_WIN32) && !defined(__GNUC__) +# define z_off64_t __int64 +# else +# define z_off64_t z_off_t +# endif +#endif + +/* MVS linker does not support external names larger than 8 bytes */ +#if defined(__MVS__) + #pragma map(deflateInit_,"DEIN") + #pragma map(deflateInit2_,"DEIN2") + #pragma map(deflateEnd,"DEEND") + #pragma map(deflateBound,"DEBND") + #pragma map(inflateInit_,"ININ") + #pragma map(inflateInit2_,"ININ2") + #pragma map(inflateEnd,"INEND") + #pragma map(inflateSync,"INSY") + #pragma map(inflateSetDictionary,"INSEDI") + #pragma map(compressBound,"CMBND") + #pragma map(inflate_table,"INTABL") + #pragma map(inflate_fast,"INFA") + #pragma map(inflate_copyright,"INCOPY") +#endif + +#endif /* ZCONF_H */ diff --git a/thirdparty/zlib-1.3.1/build-emcmake/zlib.pc b/thirdparty/zlib-1.3.1/build-emcmake/zlib.pc new file mode 100644 index 0000000..78e0117 --- /dev/null +++ b/thirdparty/zlib-1.3.1/build-emcmake/zlib.pc @@ -0,0 +1,13 @@ +prefix=/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/install +exec_prefix=/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/install +libdir=/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/install/lib +sharedlibdir=/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/install/lib +includedir=/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/install/include + +Name: zlib +Description: zlib compression library +Version: 1.3.1 + +Requires: +Libs: -L${libdir} -L${sharedlibdir} -lz +Cflags: -I${includedir} diff --git a/thirdparty/zlib-1.3.1/compress.c b/thirdparty/zlib-1.3.1/compress.c new file mode 100644 index 0000000..f43bacf --- /dev/null +++ b/thirdparty/zlib-1.3.1/compress.c @@ -0,0 +1,75 @@ +/* compress.c -- compress a memory buffer + * Copyright (C) 1995-2005, 2014, 2016 Jean-loup Gailly, Mark Adler + * For conditions of distribution and use, see copyright notice in zlib.h + */ + +/* @(#) $Id$ */ + +#define ZLIB_INTERNAL +#include "zlib.h" + +/* =========================================================================== + Compresses the source buffer into the destination buffer. The level + parameter has the same meaning as in deflateInit. sourceLen is the byte + length of the source buffer. Upon entry, destLen is the total size of the + destination buffer, which must be at least 0.1% larger than sourceLen plus + 12 bytes. Upon exit, destLen is the actual size of the compressed buffer. + + compress2 returns Z_OK if success, Z_MEM_ERROR if there was not enough + memory, Z_BUF_ERROR if there was not enough room in the output buffer, + Z_STREAM_ERROR if the level parameter is invalid. +*/ +int ZEXPORT compress2(Bytef *dest, uLongf *destLen, const Bytef *source, + uLong sourceLen, int level) { + z_stream stream; + int err; + const uInt max = (uInt)-1; + uLong left; + + left = *destLen; + *destLen = 0; + + stream.zalloc = (alloc_func)0; + stream.zfree = (free_func)0; + stream.opaque = (voidpf)0; + + err = deflateInit(&stream, level); + if (err != Z_OK) return err; + + stream.next_out = dest; + stream.avail_out = 0; + stream.next_in = (z_const Bytef *)source; + stream.avail_in = 0; + + do { + if (stream.avail_out == 0) { + stream.avail_out = left > (uLong)max ? max : (uInt)left; + left -= stream.avail_out; + } + if (stream.avail_in == 0) { + stream.avail_in = sourceLen > (uLong)max ? max : (uInt)sourceLen; + sourceLen -= stream.avail_in; + } + err = deflate(&stream, sourceLen ? Z_NO_FLUSH : Z_FINISH); + } while (err == Z_OK); + + *destLen = stream.total_out; + deflateEnd(&stream); + return err == Z_STREAM_END ? Z_OK : err; +} + +/* =========================================================================== + */ +int ZEXPORT compress(Bytef *dest, uLongf *destLen, const Bytef *source, + uLong sourceLen) { + return compress2(dest, destLen, source, sourceLen, Z_DEFAULT_COMPRESSION); +} + +/* =========================================================================== + If the default memLevel or windowBits for deflateInit() is changed, then + this function needs to be updated. + */ +uLong ZEXPORT compressBound(uLong sourceLen) { + return sourceLen + (sourceLen >> 12) + (sourceLen >> 14) + + (sourceLen >> 25) + 13; +} diff --git a/thirdparty/zlib-1.3.1/configure b/thirdparty/zlib-1.3.1/configure new file mode 100755 index 0000000..c55098a --- /dev/null +++ b/thirdparty/zlib-1.3.1/configure @@ -0,0 +1,929 @@ +#!/bin/sh +# configure script for zlib. +# +# Normally configure builds both a static and a shared library. +# If you want to build just a static library, use: ./configure --static +# +# To impose specific compiler or flags or install directory, use for example: +# prefix=$HOME CC=cc CFLAGS="-O4" ./configure +# or for csh/tcsh users: +# (setenv prefix $HOME; setenv CC cc; setenv CFLAGS "-O4"; ./configure) + +# Incorrect settings of CC or CFLAGS may prevent creating a shared library. +# If you have problems, try without defining CC and CFLAGS before reporting +# an error. + +# start off configure.log +echo -------------------- >> configure.log +echo $0 $* >> configure.log +date >> configure.log + +# get source directory +SRCDIR=`dirname $0` +if test $SRCDIR = "."; then + ZINC="" + ZINCOUT="-I." + SRCDIR="" +else + ZINC='-I. -include zconf.h' + ZINCOUT='-I. -I$(SRCDIR)' + SRCDIR="$SRCDIR/" +fi + +# set command prefix for cross-compilation +if [ -n "${CHOST}" ]; then + uname=${CHOST} + mname=${CHOST} + CROSS_PREFIX="${CHOST}-" +else + mname=`(uname -a || echo unknown) 2>/dev/null` +fi + +# destination name for static library +STATICLIB=libz.a + +# extract zlib version numbers from zlib.h +VER=`sed -n -e '/VERSION "/s/.*"\(.*\)".*/\1/p' < ${SRCDIR}zlib.h` +VER3=`echo ${VER}|sed -n -e 's/\([0-9]\{1,\}\(\\.[0-9]\{1,\}\)\{1,2\}\).*/\1/p'` +VER1=`echo ${VER}|sed -n -e 's/\([0-9]\{1,\}\)\\..*/\1/p'` + +# establish commands for library building +if "${CROSS_PREFIX}ar" --version >/dev/null 2>/dev/null || test $? -lt 126; then + AR=${AR-"${CROSS_PREFIX}ar"} + test -n "${CROSS_PREFIX}" && echo Using ${AR} | tee -a configure.log +else + AR=${AR-"ar"} + test -n "${CROSS_PREFIX}" && echo Using ${AR} | tee -a configure.log +fi +ARFLAGS=${ARFLAGS-"rc"} +if "${CROSS_PREFIX}ranlib" --version >/dev/null 2>/dev/null || test $? -lt 126; then + RANLIB=${RANLIB-"${CROSS_PREFIX}ranlib"} + test -n "${CROSS_PREFIX}" && echo Using ${RANLIB} | tee -a configure.log +else + RANLIB=${RANLIB-"ranlib"} +fi +if "${CROSS_PREFIX}nm" --version >/dev/null 2>/dev/null || test $? -lt 126; then + NM=${NM-"${CROSS_PREFIX}nm"} + test -n "${CROSS_PREFIX}" && echo Using ${NM} | tee -a configure.log +else + NM=${NM-"nm"} +fi + +# set defaults before processing command line options +LDCONFIG=${LDCONFIG-"ldconfig"} +LDSHAREDLIBC="${LDSHAREDLIBC--lc}" +ARCHS= +prefix=${prefix-/usr/local} +exec_prefix=${exec_prefix-'${prefix}'} +libdir=${libdir-'${exec_prefix}/lib'} +sharedlibdir=${sharedlibdir-'${libdir}'} +includedir=${includedir-'${prefix}/include'} +mandir=${mandir-'${prefix}/share/man'} +shared_ext='.so' +shared=1 +solo=0 +cover=0 +zprefix=0 +zconst=0 +build64=0 +gcc=0 +warn=0 +debug=0 +address=0 +memory=0 +old_cc="$CC" +old_cflags="$CFLAGS" +OBJC='$(OBJZ) $(OBJG)' +PIC_OBJC='$(PIC_OBJZ) $(PIC_OBJG)' + +# leave this script, optionally in a bad way +leave() +{ + if test "$*" != "0"; then + echo "** $0 aborting." | tee -a configure.log + fi + rm -rf $test.[co] $test $test$shared_ext $test.gcno $test.dSYM ./--version + echo -------------------- >> configure.log + echo >> configure.log + echo >> configure.log + exit $1 +} + +# process command line options +while test $# -ge 1 +do +case "$1" in + -h* | --help) + echo 'usage:' | tee -a configure.log + echo ' configure [--const] [--zprefix] [--prefix=PREFIX] [--eprefix=EXPREFIX]' | tee -a configure.log + echo ' [--static] [--64] [--libdir=LIBDIR] [--sharedlibdir=LIBDIR]' | tee -a configure.log + echo ' [--includedir=INCLUDEDIR] [--archs="-arch i386 -arch x86_64"]' | tee -a configure.log + exit 0 ;; + -p*=* | --prefix=*) prefix=`echo $1 | sed 's/.*=//'`; shift ;; + -e*=* | --eprefix=*) exec_prefix=`echo $1 | sed 's/.*=//'`; shift ;; + -l*=* | --libdir=*) libdir=`echo $1 | sed 's/.*=//'`; shift ;; + --sharedlibdir=*) sharedlibdir=`echo $1 | sed 's/.*=//'`; shift ;; + -i*=* | --includedir=*) includedir=`echo $1 | sed 's/.*=//'`;shift ;; + -u*=* | --uname=*) uname=`echo $1 | sed 's/.*=//'`;shift ;; + -p* | --prefix) prefix="$2"; shift; shift ;; + -e* | --eprefix) exec_prefix="$2"; shift; shift ;; + -l* | --libdir) libdir="$2"; shift; shift ;; + -i* | --includedir) includedir="$2"; shift; shift ;; + -s* | --shared | --enable-shared) shared=1; shift ;; + -t | --static) shared=0; shift ;; + --solo) solo=1; shift ;; + --cover) cover=1; shift ;; + -z* | --zprefix) zprefix=1; shift ;; + -6* | --64) build64=1; shift ;; + -a*=* | --archs=*) ARCHS=`echo $1 | sed 's/.*=//'`; shift ;; + --sysconfdir=*) echo "ignored option: --sysconfdir" | tee -a configure.log; shift ;; + --localstatedir=*) echo "ignored option: --localstatedir" | tee -a configure.log; shift ;; + -c* | --const) zconst=1; shift ;; + -w* | --warn) warn=1; shift ;; + -d* | --debug) debug=1; shift ;; + --sanitize) address=1; shift ;; + --address) address=1; shift ;; + --memory) memory=1; shift ;; + *) + echo "unknown option: $1" | tee -a configure.log + echo "$0 --help for help" | tee -a configure.log + leave 1;; + esac +done + +# temporary file name +test=ztest$$ + +# put arguments in log, also put test file in log if used in arguments +show() +{ + case "$*" in + *$test.c*) + echo === $test.c === >> configure.log + cat $test.c >> configure.log + echo === >> configure.log;; + esac + echo $* >> configure.log +} + +# check for gcc vs. cc and set compile and link flags based on the system identified by uname +cat > $test.c </dev/null 2>&1; then + cc=${CROSS_PREFIX}gcc + else + cc=${CROSS_PREFIX}cc + fi +else + cc=${CC} +fi + +case "$cc" in + *gcc*) gcc=1 ;; + *clang*) gcc=1 ;; +esac +case `$cc -v 2>&1` in + *gcc*) gcc=1 ;; + *clang*) gcc=1 ;; +esac + +show $cc -c $test.c +if test "$gcc" -eq 1 && ($cc -c $test.c) >> configure.log 2>&1; then + echo ... using gcc >> configure.log + CC="$cc" + CFLAGS="${CFLAGS--O3}" + SFLAGS="${CFLAGS--O3} -fPIC" + if test "$ARCHS"; then + CFLAGS="${CFLAGS} ${ARCHS}" + LDFLAGS="${LDFLAGS} ${ARCHS}" + fi + if test $build64 -eq 1; then + CFLAGS="${CFLAGS} -m64" + SFLAGS="${SFLAGS} -m64" + fi + if test "$warn" -eq 1; then + if test "$zconst" -eq 1; then + CFLAGS="${CFLAGS} -Wall -Wextra -Wcast-qual -DZLIB_CONST" + else + CFLAGS="${CFLAGS} -Wall -Wextra" + fi + fi + if test $address -eq 1; then + CFLAGS="${CFLAGS} -g -fsanitize=address -fno-omit-frame-pointer" + fi + if test $memory -eq 1; then + CFLAGS="${CFLAGS} -g -fsanitize=memory -fno-omit-frame-pointer" + fi + if test $debug -eq 1; then + CFLAGS="${CFLAGS} -DZLIB_DEBUG" + SFLAGS="${SFLAGS} -DZLIB_DEBUG" + fi + if test -z "$uname"; then + uname=`(uname -s || echo unknown) 2>/dev/null` + fi + case "$uname" in + Linux* | linux* | *-linux* | GNU | GNU/* | solaris*) + case "$mname" in + *sparc*) + LDFLAGS="${LDFLAGS} -Wl,--no-warn-rwx-segments" ;; + esac + LDSHARED=${LDSHARED-"$cc -shared -Wl,-soname,libz.so.1,--version-script,${SRCDIR}zlib.map"} ;; + *BSD | *bsd* | DragonFly) + LDSHARED=${LDSHARED-"$cc -shared -Wl,-soname,libz.so.1,--version-script,${SRCDIR}zlib.map"} + LDCONFIG="ldconfig -m" ;; + CYGWIN* | Cygwin* | cygwin* | *-cygwin* | OS/2*) + EXE='.exe' ;; + MINGW* | mingw* | *-mingw*) + rm -f $test.[co] $test $test$shared_ext + echo "If this doesn't work for you, try win32/Makefile.gcc." | tee -a configure.log + LDSHARED=${LDSHARED-"$cc -shared"} + LDSHAREDLIBC="" + EXE='.exe' ;; + QNX*) # This is for QNX6. I suppose that the QNX rule below is for QNX2,QNX4 + # (alain.bonnefoy@icbt.com) + LDSHARED=${LDSHARED-"$cc -shared -Wl,-hlibz.so.1"} ;; + HP-UX*) + LDSHARED=${LDSHARED-"$cc -shared $SFLAGS"} + case `(uname -m || echo unknown) 2>/dev/null` in + ia64) + shared_ext='.so' + SHAREDLIB='libz.so' ;; + *) + shared_ext='.sl' + SHAREDLIB='libz.sl' ;; + esac ;; + AIX*) + LDFLAGS="${LDFLAGS} -Wl,-brtl" ;; + Darwin* | darwin* | *-darwin*) + shared_ext='.dylib' + SHAREDLIB=libz$shared_ext + SHAREDLIBV=libz.$VER$shared_ext + SHAREDLIBM=libz.$VER1$shared_ext + LDSHARED=${LDSHARED-"$cc -dynamiclib -install_name $libdir/$SHAREDLIBM -compatibility_version $VER1 -current_version $VER3"} + if "${CROSS_PREFIX}libtool" -V 2>&1 | grep Apple > /dev/null; then + AR="${CROSS_PREFIX}libtool" + elif libtool -V 2>&1 | grep Apple > /dev/null; then + AR="libtool" + else + AR="/usr/bin/libtool" + fi + ARFLAGS="-o" ;; + *) + LDSHARED=${LDSHARED-"$cc -shared"} ;; + esac +else + # find system name and corresponding cc options + CC=${CC-cc} + gcc=0 + echo ... using $CC >> configure.log + if test -z "$uname"; then + uname=`(uname -sr || echo unknown) 2>/dev/null` + fi + case "$uname" in + HP-UX*) SFLAGS=${CFLAGS-"-O +z"} + CFLAGS=${CFLAGS-"-O"} +# LDSHARED=${LDSHARED-"ld -b +vnocompatwarnings"} + LDSHARED=${LDSHARED-"ld -b"} + case `(uname -m || echo unknown) 2>/dev/null` in + ia64) + shared_ext='.so' + SHAREDLIB='libz.so' ;; + *) + shared_ext='.sl' + SHAREDLIB='libz.sl' ;; + esac ;; + IRIX*) SFLAGS=${CFLAGS-"-ansi -O2 -rpath ."} + CFLAGS=${CFLAGS-"-ansi -O2"} + LDSHARED=${LDSHARED-"cc -shared -Wl,-soname,libz.so.1"} ;; + OSF1\ V4*) SFLAGS=${CFLAGS-"-O -std1"} + CFLAGS=${CFLAGS-"-O -std1"} + LDFLAGS="${LDFLAGS} -Wl,-rpath,." + LDSHARED=${LDSHARED-"cc -shared -Wl,-soname,libz.so -Wl,-msym -Wl,-rpath,$(libdir) -Wl,-set_version,${VER}:1.0"} ;; + OSF1*) SFLAGS=${CFLAGS-"-O -std1"} + CFLAGS=${CFLAGS-"-O -std1"} + LDSHARED=${LDSHARED-"cc -shared -Wl,-soname,libz.so.1"} ;; + QNX*) SFLAGS=${CFLAGS-"-4 -O"} + CFLAGS=${CFLAGS-"-4 -O"} + LDSHARED=${LDSHARED-"cc"} + RANLIB=${RANLIB-"true"} + AR="cc" + ARFLAGS="-A" ;; + SCO_SV\ 3.2*) SFLAGS=${CFLAGS-"-O3 -dy -KPIC "} + CFLAGS=${CFLAGS-"-O3"} + LDSHARED=${LDSHARED-"cc -dy -KPIC -G"} ;; + SunOS\ 5* | solaris*) + LDSHARED=${LDSHARED-"cc -G -h libz$shared_ext.$VER1"} + SFLAGS=${CFLAGS-"-fast -KPIC"} + CFLAGS=${CFLAGS-"-fast"} + if test $build64 -eq 1; then + # old versions of SunPRO/Workshop/Studio don't support -m64, + # but newer ones do. Check for it. + flag64=`$CC -flags | egrep -- '^-m64'` + if test x"$flag64" != x"" ; then + CFLAGS="${CFLAGS} -m64" + SFLAGS="${SFLAGS} -m64" + else + case `(uname -m || echo unknown) 2>/dev/null` in + i86*) + SFLAGS="$SFLAGS -xarch=amd64" + CFLAGS="$CFLAGS -xarch=amd64" ;; + *) + SFLAGS="$SFLAGS -xarch=v9" + CFLAGS="$CFLAGS -xarch=v9" ;; + esac + fi + fi + if test -n "$ZINC"; then + ZINC='-I- -I. -I$(SRCDIR)' + fi + ;; + SunOS\ 4*) SFLAGS=${CFLAGS-"-O2 -PIC"} + CFLAGS=${CFLAGS-"-O2"} + LDSHARED=${LDSHARED-"ld"} ;; + SunStudio\ 9*) SFLAGS=${CFLAGS-"-fast -xcode=pic32 -xtarget=ultra3 -xarch=v9b"} + CFLAGS=${CFLAGS-"-fast -xtarget=ultra3 -xarch=v9b"} + LDSHARED=${LDSHARED-"cc -xarch=v9b"} ;; + UNIX_System_V\ 4.2.0) + SFLAGS=${CFLAGS-"-KPIC -O"} + CFLAGS=${CFLAGS-"-O"} + LDSHARED=${LDSHARED-"cc -G"} ;; + UNIX_SV\ 4.2MP) + SFLAGS=${CFLAGS-"-Kconform_pic -O"} + CFLAGS=${CFLAGS-"-O"} + LDSHARED=${LDSHARED-"cc -G"} ;; + OpenUNIX\ 5) + SFLAGS=${CFLAGS-"-KPIC -O"} + CFLAGS=${CFLAGS-"-O"} + LDSHARED=${LDSHARED-"cc -G"} ;; + AIX*) # Courtesy of dbakker@arrayasolutions.com + SFLAGS=${CFLAGS-"-O -qmaxmem=8192"} + CFLAGS=${CFLAGS-"-O -qmaxmem=8192"} + LDSHARED=${LDSHARED-"xlc -G"} ;; + # send working options for other systems to zlib@gzip.org + *) SFLAGS=${CFLAGS-"-O"} + CFLAGS=${CFLAGS-"-O"} + LDSHARED=${LDSHARED-"cc -shared"} ;; + esac +fi + +# destination names for shared library if not defined above +SHAREDLIB=${SHAREDLIB-"libz$shared_ext"} +SHAREDLIBV=${SHAREDLIBV-"libz$shared_ext.$VER"} +SHAREDLIBM=${SHAREDLIBM-"libz$shared_ext.$VER1"} + +echo >> configure.log + +# define functions for testing compiler and library characteristics and logging the results + +cat > $test.c </dev/null; then + try() + { + show $* + test "`( $* ) 2>&1 | tee -a configure.log`" = "" + } + echo - using any output from compiler to indicate an error >> configure.log +else + try() + { + show $* + got=`( $* ) 2>&1` + ret=$? + if test "$got" != ""; then + printf "%s\n" "$got" >> configure.log + fi + if test $ret -ne 0; then + echo "(exit code "$ret")" >> configure.log + fi + return $ret + } +fi + +tryboth() +{ + show $* + got=`( $* ) 2>&1` + ret=$? + if test "$got" != ""; then + printf "%s\n" "$got" >> configure.log + fi + if test $ret -ne 0; then + echo "(exit code "$ret")" >> configure.log + return $ret + fi + test "$got" = "" +} + +cat > $test.c << EOF +int foo() { return 0; } +EOF +echo "Checking for obsessive-compulsive compiler options..." >> configure.log +if try $CC -c $CFLAGS $test.c; then + : +else + echo "Compiler error reporting is too harsh for $0 (perhaps remove -Werror)." | tee -a configure.log + leave 1 +fi + +echo >> configure.log + +# see if shared library build supported +cat > $test.c <> configure.log + +# check for size_t +cat > $test.c < +#include +size_t dummy = 0; +EOF +if try $CC -c $CFLAGS $test.c; then + echo "Checking for size_t... Yes." | tee -a configure.log +else + echo "Checking for size_t... No." | tee -a configure.log + # find a size_t integer type + # check for long long + cat > $test.c << EOF +long long dummy = 0; +EOF + if try $CC -c $CFLAGS $test.c; then + echo "Checking for long long... Yes." | tee -a configure.log + cat > $test.c < +int main(void) { + if (sizeof(void *) <= sizeof(int)) puts("int"); + else if (sizeof(void *) <= sizeof(long)) puts("long"); + else puts("z_longlong"); + return 0; +} +EOF + else + echo "Checking for long long... No." | tee -a configure.log + cat > $test.c < +int main(void) { + if (sizeof(void *) <= sizeof(int)) puts("int"); + else puts("long"); + return 0; +} +EOF + fi + if try $CC $CFLAGS -o $test $test.c; then + sizet=`./$test` + echo "Checking for a pointer-size integer type..." $sizet"." | tee -a configure.log + CFLAGS="${CFLAGS} -DNO_SIZE_T=${sizet}" + SFLAGS="${SFLAGS} -DNO_SIZE_T=${sizet}" + else + echo "Checking for a pointer-size integer type... not found." | tee -a configure.log + fi +fi + +echo >> configure.log + +# check for large file support, and if none, check for fseeko() +cat > $test.c < +off64_t dummy = 0; +EOF +if try $CC -c $CFLAGS -D_LARGEFILE64_SOURCE=1 $test.c; then + CFLAGS="${CFLAGS} -D_LARGEFILE64_SOURCE=1" + SFLAGS="${SFLAGS} -D_LARGEFILE64_SOURCE=1" + ALL="${ALL} all64" + TEST="${TEST} test64" + echo "Checking for off64_t... Yes." | tee -a configure.log + echo "Checking for fseeko... Yes." | tee -a configure.log +else + echo "Checking for off64_t... No." | tee -a configure.log + echo >> configure.log + cat > $test.c < +int main(void) { + fseeko(NULL, 0, 0); + return 0; +} +EOF + if try $CC $CFLAGS -o $test $test.c; then + echo "Checking for fseeko... Yes." | tee -a configure.log + else + CFLAGS="${CFLAGS} -DNO_FSEEKO" + SFLAGS="${SFLAGS} -DNO_FSEEKO" + echo "Checking for fseeko... No." | tee -a configure.log + fi +fi + +echo >> configure.log + +# check for strerror() for use by gz* functions +cat > $test.c < +#include +int main() { return strlen(strerror(errno)); } +EOF +if try $CC $CFLAGS -o $test $test.c; then + echo "Checking for strerror... Yes." | tee -a configure.log +else + CFLAGS="${CFLAGS} -DNO_STRERROR" + SFLAGS="${SFLAGS} -DNO_STRERROR" + echo "Checking for strerror... No." | tee -a configure.log +fi + +# copy clean zconf.h for subsequent edits +cp -p ${SRCDIR}zconf.h.in zconf.h + +echo >> configure.log + +# check for unistd.h and save result in zconf.h +cat > $test.c < +int main() { return 0; } +EOF +if try $CC -c $CFLAGS $test.c; then + sed < zconf.h "/^#ifdef HAVE_UNISTD_H.* may be/s/def HAVE_UNISTD_H\(.*\) may be/ 1\1 was/" > zconf.temp.h + mv zconf.temp.h zconf.h + echo "Checking for unistd.h... Yes." | tee -a configure.log +else + echo "Checking for unistd.h... No." | tee -a configure.log +fi + +echo >> configure.log + +# check for stdarg.h and save result in zconf.h +cat > $test.c < +int main() { return 0; } +EOF +if try $CC -c $CFLAGS $test.c; then + sed < zconf.h "/^#ifdef HAVE_STDARG_H.* may be/s/def HAVE_STDARG_H\(.*\) may be/ 1\1 was/" > zconf.temp.h + mv zconf.temp.h zconf.h + echo "Checking for stdarg.h... Yes." | tee -a configure.log +else + echo "Checking for stdarg.h... No." | tee -a configure.log +fi + +# if the z_ prefix was requested, save that in zconf.h +if test $zprefix -eq 1; then + sed < zconf.h "/#ifdef Z_PREFIX.* may be/s/def Z_PREFIX\(.*\) may be/ 1\1 was/" > zconf.temp.h + mv zconf.temp.h zconf.h + echo >> configure.log + echo "Using z_ prefix on all symbols." | tee -a configure.log +fi + +# if --solo compilation was requested, save that in zconf.h and remove gz stuff from object lists +if test $solo -eq 1; then + sed '/#define ZCONF_H/a\ +#define Z_SOLO + +' < zconf.h > zconf.temp.h + mv zconf.temp.h zconf.h +OBJC='$(OBJZ)' +PIC_OBJC='$(PIC_OBJZ)' +fi + +# if code coverage testing was requested, use older gcc if defined, e.g. "gcc-4.2" on Mac OS X +if test $cover -eq 1; then + CFLAGS="${CFLAGS} -fprofile-arcs -ftest-coverage" + if test -n "$GCC_CLASSIC"; then + CC=$GCC_CLASSIC + fi +fi + +echo >> configure.log + +# conduct a series of tests to resolve eight possible cases of using "vs" or "s" printf functions +# (using stdarg or not), with or without "n" (proving size of buffer), and with or without a +# return value. The most secure result is vsnprintf() with a return value. snprintf() with a +# return value is secure as well, but then gzprintf() will be limited to 20 arguments. +cat > $test.c < +#include +#include "zconf.h" +int main() +{ +#ifndef STDC + choke me +#endif + return 0; +} +EOF +if try $CC -c $CFLAGS $test.c; then + echo "Checking whether to use vs[n]printf() or s[n]printf()... using vs[n]printf()." | tee -a configure.log + + echo >> configure.log + cat > $test.c < +#include +int mytest(const char *fmt, ...) +{ + char buf[20]; + va_list ap; + va_start(ap, fmt); + vsnprintf(buf, sizeof(buf), fmt, ap); + va_end(ap); + return 0; +} +int main() +{ + return (mytest("Hello%d\n", 1)); +} +EOF + if try $CC $CFLAGS -o $test $test.c; then + echo "Checking for vsnprintf() in stdio.h... Yes." | tee -a configure.log + + echo >> configure.log + cat >$test.c < +#include +int mytest(const char *fmt, ...) +{ + int n; + char buf[20]; + va_list ap; + va_start(ap, fmt); + n = vsnprintf(buf, sizeof(buf), fmt, ap); + va_end(ap); + return n; +} +int main() +{ + return (mytest("Hello%d\n", 1)); +} +EOF + + if try $CC -c $CFLAGS $test.c; then + echo "Checking for return value of vsnprintf()... Yes." | tee -a configure.log + else + CFLAGS="$CFLAGS -DHAS_vsnprintf_void" + SFLAGS="$SFLAGS -DHAS_vsnprintf_void" + echo "Checking for return value of vsnprintf()... No." | tee -a configure.log + echo " WARNING: apparently vsnprintf() does not return a value. zlib" | tee -a configure.log + echo " can build but will be open to possible string-format security" | tee -a configure.log + echo " vulnerabilities." | tee -a configure.log + fi + else + CFLAGS="$CFLAGS -DNO_vsnprintf" + SFLAGS="$SFLAGS -DNO_vsnprintf" + echo "Checking for vsnprintf() in stdio.h... No." | tee -a configure.log + echo " WARNING: vsnprintf() not found, falling back to vsprintf(). zlib" | tee -a configure.log + echo " can build but will be open to possible buffer-overflow security" | tee -a configure.log + echo " vulnerabilities." | tee -a configure.log + + echo >> configure.log + cat >$test.c < +#include +int mytest(const char *fmt, ...) +{ + int n; + char buf[20]; + va_list ap; + va_start(ap, fmt); + n = vsprintf(buf, fmt, ap); + va_end(ap); + return n; +} +int main() +{ + return (mytest("Hello%d\n", 1)); +} +EOF + + if try $CC -c $CFLAGS $test.c; then + echo "Checking for return value of vsprintf()... Yes." | tee -a configure.log + else + CFLAGS="$CFLAGS -DHAS_vsprintf_void" + SFLAGS="$SFLAGS -DHAS_vsprintf_void" + echo "Checking for return value of vsprintf()... No." | tee -a configure.log + echo " WARNING: apparently vsprintf() does not return a value. zlib" | tee -a configure.log + echo " can build but will be open to possible string-format security" | tee -a configure.log + echo " vulnerabilities." | tee -a configure.log + fi + fi +else + echo "Checking whether to use vs[n]printf() or s[n]printf()... using s[n]printf()." | tee -a configure.log + + echo >> configure.log + cat >$test.c < +int mytest() +{ + char buf[20]; + snprintf(buf, sizeof(buf), "%s", "foo"); + return 0; +} +int main() +{ + return (mytest()); +} +EOF + + if try $CC $CFLAGS -o $test $test.c; then + echo "Checking for snprintf() in stdio.h... Yes." | tee -a configure.log + + echo >> configure.log + cat >$test.c < +int mytest() +{ + char buf[20]; + return snprintf(buf, sizeof(buf), "%s", "foo"); +} +int main() +{ + return (mytest()); +} +EOF + + if try $CC -c $CFLAGS $test.c; then + echo "Checking for return value of snprintf()... Yes." | tee -a configure.log + else + CFLAGS="$CFLAGS -DHAS_snprintf_void" + SFLAGS="$SFLAGS -DHAS_snprintf_void" + echo "Checking for return value of snprintf()... No." | tee -a configure.log + echo " WARNING: apparently snprintf() does not return a value. zlib" | tee -a configure.log + echo " can build but will be open to possible string-format security" | tee -a configure.log + echo " vulnerabilities." | tee -a configure.log + fi + else + CFLAGS="$CFLAGS -DNO_snprintf" + SFLAGS="$SFLAGS -DNO_snprintf" + echo "Checking for snprintf() in stdio.h... No." | tee -a configure.log + echo " WARNING: snprintf() not found, falling back to sprintf(). zlib" | tee -a configure.log + echo " can build but will be open to possible buffer-overflow security" | tee -a configure.log + echo " vulnerabilities." | tee -a configure.log + + echo >> configure.log + cat >$test.c < +int mytest() +{ + char buf[20]; + return sprintf(buf, "%s", "foo"); +} +int main() +{ + return (mytest()); +} +EOF + + if try $CC -c $CFLAGS $test.c; then + echo "Checking for return value of sprintf()... Yes." | tee -a configure.log + else + CFLAGS="$CFLAGS -DHAS_sprintf_void" + SFLAGS="$SFLAGS -DHAS_sprintf_void" + echo "Checking for return value of sprintf()... No." | tee -a configure.log + echo " WARNING: apparently sprintf() does not return a value. zlib" | tee -a configure.log + echo " can build but will be open to possible string-format security" | tee -a configure.log + echo " vulnerabilities." | tee -a configure.log + fi + fi +fi + +# see if we can hide zlib internal symbols that are linked between separate source files +if test "$gcc" -eq 1; then + echo >> configure.log + cat > $test.c <> configure.log +echo ALL = $ALL >> configure.log +echo AR = $AR >> configure.log +echo ARFLAGS = $ARFLAGS >> configure.log +echo CC = $CC >> configure.log +echo CFLAGS = $CFLAGS >> configure.log +echo CPP = $CPP >> configure.log +echo EXE = $EXE >> configure.log +echo LDCONFIG = $LDCONFIG >> configure.log +echo LDFLAGS = $LDFLAGS >> configure.log +echo LDSHARED = $LDSHARED >> configure.log +echo LDSHAREDLIBC = $LDSHAREDLIBC >> configure.log +echo OBJC = $OBJC >> configure.log +echo PIC_OBJC = $PIC_OBJC >> configure.log +echo RANLIB = $RANLIB >> configure.log +echo SFLAGS = $SFLAGS >> configure.log +echo SHAREDLIB = $SHAREDLIB >> configure.log +echo SHAREDLIBM = $SHAREDLIBM >> configure.log +echo SHAREDLIBV = $SHAREDLIBV >> configure.log +echo STATICLIB = $STATICLIB >> configure.log +echo TEST = $TEST >> configure.log +echo VER = $VER >> configure.log +echo SRCDIR = $SRCDIR >> configure.log +echo exec_prefix = $exec_prefix >> configure.log +echo includedir = $includedir >> configure.log +echo libdir = $libdir >> configure.log +echo mandir = $mandir >> configure.log +echo prefix = $prefix >> configure.log +echo sharedlibdir = $sharedlibdir >> configure.log +echo uname = $uname >> configure.log + +# update Makefile with the configure results +sed < ${SRCDIR}Makefile.in " +/^CC *=/s#=.*#=$CC# +/^CFLAGS *=/s#=.*#=$CFLAGS# +/^SFLAGS *=/s#=.*#=$SFLAGS# +/^LDFLAGS *=/s#=.*#=$LDFLAGS# +/^LDSHARED *=/s#=.*#=$LDSHARED# +/^CPP *=/s#=.*#=$CPP# +/^STATICLIB *=/s#=.*#=$STATICLIB# +/^SHAREDLIB *=/s#=.*#=$SHAREDLIB# +/^SHAREDLIBV *=/s#=.*#=$SHAREDLIBV# +/^SHAREDLIBM *=/s#=.*#=$SHAREDLIBM# +/^AR *=/s#=.*#=$AR# +/^ARFLAGS *=/s#=.*#=$ARFLAGS# +/^RANLIB *=/s#=.*#=$RANLIB# +/^LDCONFIG *=/s#=.*#=$LDCONFIG# +/^LDSHAREDLIBC *=/s#=.*#=$LDSHAREDLIBC# +/^EXE *=/s#=.*#=$EXE# +/^SRCDIR *=/s#=.*#=$SRCDIR# +/^ZINC *=/s#=.*#=$ZINC# +/^ZINCOUT *=/s#=.*#=$ZINCOUT# +/^prefix *=/s#=.*#=$prefix# +/^exec_prefix *=/s#=.*#=$exec_prefix# +/^libdir *=/s#=.*#=$libdir# +/^sharedlibdir *=/s#=.*#=$sharedlibdir# +/^includedir *=/s#=.*#=$includedir# +/^mandir *=/s#=.*#=$mandir# +/^OBJC *=/s#=.*#= $OBJC# +/^PIC_OBJC *=/s#=.*#= $PIC_OBJC# +/^all: */s#:.*#: $ALL# +/^test: */s#:.*#: $TEST# +" > Makefile + +# create zlib.pc with the configure results +sed < ${SRCDIR}zlib.pc.in " +/^CC *=/s#=.*#=$CC# +/^CFLAGS *=/s#=.*#=$CFLAGS# +/^CPP *=/s#=.*#=$CPP# +/^LDSHARED *=/s#=.*#=$LDSHARED# +/^STATICLIB *=/s#=.*#=$STATICLIB# +/^SHAREDLIB *=/s#=.*#=$SHAREDLIB# +/^SHAREDLIBV *=/s#=.*#=$SHAREDLIBV# +/^SHAREDLIBM *=/s#=.*#=$SHAREDLIBM# +/^AR *=/s#=.*#=$AR# +/^ARFLAGS *=/s#=.*#=$ARFLAGS# +/^RANLIB *=/s#=.*#=$RANLIB# +/^EXE *=/s#=.*#=$EXE# +/^prefix *=/s#=.*#=$prefix# +/^exec_prefix *=/s#=.*#=$exec_prefix# +/^libdir *=/s#=.*#=$libdir# +/^sharedlibdir *=/s#=.*#=$sharedlibdir# +/^includedir *=/s#=.*#=$includedir# +/^mandir *=/s#=.*#=$mandir# +/^LDFLAGS *=/s#=.*#=$LDFLAGS# +" | sed -e " +s/\@VERSION\@/$VER/g; +" > zlib.pc + +# done +leave 0 diff --git a/thirdparty/zlib-1.3.1/contrib/README.contrib b/thirdparty/zlib-1.3.1/contrib/README.contrib new file mode 100644 index 0000000..5e5f950 --- /dev/null +++ b/thirdparty/zlib-1.3.1/contrib/README.contrib @@ -0,0 +1,57 @@ +All files under this contrib directory are UNSUPPORTED. They were +provided by users of zlib and were not tested by the authors of zlib. +Use at your own risk. Please contact the authors of the contributions +for help about these, not the zlib authors. Thanks. + + +ada/ by Dmitriy Anisimkov + Support for Ada + See http://zlib-ada.sourceforge.net/ + +blast/ by Mark Adler + Decompressor for output of PKWare Data Compression Library (DCL) + +delphi/ by Cosmin Truta + Support for Delphi and C++ Builder + +dotzlib/ by Henrik Ravn + Support for Microsoft .Net and Visual C++ .Net + +gcc_gvmat64/by Gilles Vollant + GCC Version of x86 64-bit (AMD64 and Intel EM64t) code for x64 + assembler to replace longest_match() and inflate_fast() + +infback9/ by Mark Adler + Unsupported diffs to infback to decode the deflate64 format + +iostream/ by Kevin Ruland + A C++ I/O streams interface to the zlib gz* functions + +iostream2/ by Tyge Løvset + Another C++ I/O streams interface + +iostream3/ by Ludwig Schwardt + and Kevin Ruland + Yet another C++ I/O streams interface + +minizip/ by Gilles Vollant + Mini zip and unzip based on zlib + Includes Zip64 support by Mathias Svensson + See http://www.winimage.com/zLibDll/minizip.html + +pascal/ by Bob Dellaca et al. + Support for Pascal + +puff/ by Mark Adler + Small, low memory usage inflate. Also serves to provide an + unambiguous description of the deflate format. + +testzlib/ by Gilles Vollant + Example of the use of zlib + +untgz/ by Pedro A. Aranda Gutierrez + A very simple tar.gz file extractor using zlib + +vstudio/ by Gilles Vollant + Building a minizip-enhanced zlib with Microsoft Visual Studio + Includes vc11 from kreuzerkrieg and vc12 from davispuh diff --git a/thirdparty/zlib-1.3.1/contrib/ada/buffer_demo.adb b/thirdparty/zlib-1.3.1/contrib/ada/buffer_demo.adb new file mode 100644 index 0000000..46b8638 --- /dev/null +++ b/thirdparty/zlib-1.3.1/contrib/ada/buffer_demo.adb @@ -0,0 +1,106 @@ +---------------------------------------------------------------- +-- ZLib for Ada thick binding. -- +-- -- +-- Copyright (C) 2002-2004 Dmitriy Anisimkov -- +-- -- +-- Open source license information is in the zlib.ads file. -- +---------------------------------------------------------------- +-- +-- $Id: buffer_demo.adb,v 1.3 2004/09/06 06:55:35 vagul Exp $ + +-- This demo program provided by Dr Steve Sangwine +-- +-- Demonstration of a problem with Zlib-Ada (already fixed) when a buffer +-- of exactly the correct size is used for decompressed data, and the last +-- few bytes passed in to Zlib are checksum bytes. + +-- This program compresses a string of text, and then decompresses the +-- compressed text into a buffer of the same size as the original text. + +with Ada.Streams; use Ada.Streams; +with Ada.Text_IO; + +with ZLib; use ZLib; + +procedure Buffer_Demo is + EOL : Character renames ASCII.LF; + Text : constant String + := "Four score and seven years ago our fathers brought forth," & EOL & + "upon this continent, a new nation, conceived in liberty," & EOL & + "and dedicated to the proposition that `all men are created equal'."; + + Source : Stream_Element_Array (1 .. Text'Length); + for Source'Address use Text'Address; + +begin + Ada.Text_IO.Put (Text); + Ada.Text_IO.New_Line; + Ada.Text_IO.Put_Line + ("Uncompressed size : " & Positive'Image (Text'Length) & " bytes"); + + declare + Compressed_Data : Stream_Element_Array (1 .. Text'Length); + L : Stream_Element_Offset; + begin + Compress : declare + Compressor : Filter_Type; + I : Stream_Element_Offset; + begin + Deflate_Init (Compressor); + + -- Compress the whole of T at once. + + Translate (Compressor, Source, I, Compressed_Data, L, Finish); + pragma Assert (I = Source'Last); + + Close (Compressor); + + Ada.Text_IO.Put_Line + ("Compressed size : " + & Stream_Element_Offset'Image (L) & " bytes"); + end Compress; + + -- Now we decompress the data, passing short blocks of data to Zlib + -- (because this demonstrates the problem - the last block passed will + -- contain checksum information and there will be no output, only a + -- check inside Zlib that the checksum is correct). + + Decompress : declare + Decompressor : Filter_Type; + + Uncompressed_Data : Stream_Element_Array (1 .. Text'Length); + + Block_Size : constant := 4; + -- This makes sure that the last block contains + -- only Adler checksum data. + + P : Stream_Element_Offset := Compressed_Data'First - 1; + O : Stream_Element_Offset; + begin + Inflate_Init (Decompressor); + + loop + Translate + (Decompressor, + Compressed_Data + (P + 1 .. Stream_Element_Offset'Min (P + Block_Size, L)), + P, + Uncompressed_Data + (Total_Out (Decompressor) + 1 .. Uncompressed_Data'Last), + O, + No_Flush); + + Ada.Text_IO.Put_Line + ("Total in : " & Count'Image (Total_In (Decompressor)) & + ", out : " & Count'Image (Total_Out (Decompressor))); + + exit when P = L; + end loop; + + Ada.Text_IO.New_Line; + Ada.Text_IO.Put_Line + ("Decompressed text matches original text : " + & Boolean'Image (Uncompressed_Data = Source)); + end Decompress; + end; +end Buffer_Demo; diff --git a/thirdparty/zlib-1.3.1/contrib/ada/mtest.adb b/thirdparty/zlib-1.3.1/contrib/ada/mtest.adb new file mode 100644 index 0000000..c4dfd08 --- /dev/null +++ b/thirdparty/zlib-1.3.1/contrib/ada/mtest.adb @@ -0,0 +1,156 @@ +---------------------------------------------------------------- +-- ZLib for Ada thick binding. -- +-- -- +-- Copyright (C) 2002-2003 Dmitriy Anisimkov -- +-- -- +-- Open source license information is in the zlib.ads file. -- +---------------------------------------------------------------- +-- Continuous test for ZLib multithreading. If the test would fail +-- we should provide thread safe allocation routines for the Z_Stream. +-- +-- $Id: mtest.adb,v 1.4 2004/07/23 07:49:54 vagul Exp $ + +with ZLib; +with Ada.Streams; +with Ada.Numerics.Discrete_Random; +with Ada.Text_IO; +with Ada.Exceptions; +with Ada.Task_Identification; + +procedure MTest is + use Ada.Streams; + use ZLib; + + Stop : Boolean := False; + + pragma Atomic (Stop); + + subtype Visible_Symbols is Stream_Element range 16#20# .. 16#7E#; + + package Random_Elements is + new Ada.Numerics.Discrete_Random (Visible_Symbols); + + task type Test_Task; + + task body Test_Task is + Buffer : Stream_Element_Array (1 .. 100_000); + Gen : Random_Elements.Generator; + + Buffer_First : Stream_Element_Offset; + Compare_First : Stream_Element_Offset; + + Deflate : Filter_Type; + Inflate : Filter_Type; + + procedure Further (Item : in Stream_Element_Array); + + procedure Read_Buffer + (Item : out Ada.Streams.Stream_Element_Array; + Last : out Ada.Streams.Stream_Element_Offset); + + ------------- + -- Further -- + ------------- + + procedure Further (Item : in Stream_Element_Array) is + + procedure Compare (Item : in Stream_Element_Array); + + ------------- + -- Compare -- + ------------- + + procedure Compare (Item : in Stream_Element_Array) is + Next_First : Stream_Element_Offset := Compare_First + Item'Length; + begin + if Buffer (Compare_First .. Next_First - 1) /= Item then + raise Program_Error; + end if; + + Compare_First := Next_First; + end Compare; + + procedure Compare_Write is new ZLib.Write (Write => Compare); + begin + Compare_Write (Inflate, Item, No_Flush); + end Further; + + ----------------- + -- Read_Buffer -- + ----------------- + + procedure Read_Buffer + (Item : out Ada.Streams.Stream_Element_Array; + Last : out Ada.Streams.Stream_Element_Offset) + is + Buff_Diff : Stream_Element_Offset := Buffer'Last - Buffer_First; + Next_First : Stream_Element_Offset; + begin + if Item'Length <= Buff_Diff then + Last := Item'Last; + + Next_First := Buffer_First + Item'Length; + + Item := Buffer (Buffer_First .. Next_First - 1); + + Buffer_First := Next_First; + else + Last := Item'First + Buff_Diff; + Item (Item'First .. Last) := Buffer (Buffer_First .. Buffer'Last); + Buffer_First := Buffer'Last + 1; + end if; + end Read_Buffer; + + procedure Translate is new Generic_Translate + (Data_In => Read_Buffer, + Data_Out => Further); + + begin + Random_Elements.Reset (Gen); + + Buffer := (others => 20); + + Main : loop + for J in Buffer'Range loop + Buffer (J) := Random_Elements.Random (Gen); + + Deflate_Init (Deflate); + Inflate_Init (Inflate); + + Buffer_First := Buffer'First; + Compare_First := Buffer'First; + + Translate (Deflate); + + if Compare_First /= Buffer'Last + 1 then + raise Program_Error; + end if; + + Ada.Text_IO.Put_Line + (Ada.Task_Identification.Image + (Ada.Task_Identification.Current_Task) + & Stream_Element_Offset'Image (J) + & ZLib.Count'Image (Total_Out (Deflate))); + + Close (Deflate); + Close (Inflate); + + exit Main when Stop; + end loop; + end loop Main; + exception + when E : others => + Ada.Text_IO.Put_Line (Ada.Exceptions.Exception_Information (E)); + Stop := True; + end Test_Task; + + Test : array (1 .. 4) of Test_Task; + + pragma Unreferenced (Test); + + Dummy : Character; + +begin + Ada.Text_IO.Get_Immediate (Dummy); + Stop := True; +end MTest; diff --git a/thirdparty/zlib-1.3.1/contrib/ada/read.adb b/thirdparty/zlib-1.3.1/contrib/ada/read.adb new file mode 100644 index 0000000..1f2efbf --- /dev/null +++ b/thirdparty/zlib-1.3.1/contrib/ada/read.adb @@ -0,0 +1,156 @@ +---------------------------------------------------------------- +-- ZLib for Ada thick binding. -- +-- -- +-- Copyright (C) 2002-2003 Dmitriy Anisimkov -- +-- -- +-- Open source license information is in the zlib.ads file. -- +---------------------------------------------------------------- + +-- $Id: read.adb,v 1.8 2004/05/31 10:53:40 vagul Exp $ + +-- Test/demo program for the generic read interface. + +with Ada.Numerics.Discrete_Random; +with Ada.Streams; +with Ada.Text_IO; + +with ZLib; + +procedure Read is + + use Ada.Streams; + + ------------------------------------ + -- Test configuration parameters -- + ------------------------------------ + + File_Size : Stream_Element_Offset := 100_000; + + Continuous : constant Boolean := False; + -- If this constant is True, the test would be repeated again and again, + -- with increment File_Size for every iteration. + + Header : constant ZLib.Header_Type := ZLib.Default; + -- Do not use Header other than Default in ZLib versions 1.1.4 and older. + + Init_Random : constant := 8; + -- We are using the same random sequence, in case of we catch bug, + -- so we would be able to reproduce it. + + -- End -- + + Pack_Size : Stream_Element_Offset; + Offset : Stream_Element_Offset; + + Filter : ZLib.Filter_Type; + + subtype Visible_Symbols + is Stream_Element range 16#20# .. 16#7E#; + + package Random_Elements is new + Ada.Numerics.Discrete_Random (Visible_Symbols); + + Gen : Random_Elements.Generator; + Period : constant Stream_Element_Offset := 200; + -- Period constant variable for random generator not to be very random. + -- Bigger period, harder random. + + Read_Buffer : Stream_Element_Array (1 .. 2048); + Read_First : Stream_Element_Offset; + Read_Last : Stream_Element_Offset; + + procedure Reset; + + procedure Read + (Item : out Stream_Element_Array; + Last : out Stream_Element_Offset); + -- this procedure is for generic instantiation of + -- ZLib.Read + -- reading data from the File_In. + + procedure Read is new ZLib.Read + (Read, + Read_Buffer, + Rest_First => Read_First, + Rest_Last => Read_Last); + + ---------- + -- Read -- + ---------- + + procedure Read + (Item : out Stream_Element_Array; + Last : out Stream_Element_Offset) is + begin + Last := Stream_Element_Offset'Min + (Item'Last, + Item'First + File_Size - Offset); + + for J in Item'First .. Last loop + if J < Item'First + Period then + Item (J) := Random_Elements.Random (Gen); + else + Item (J) := Item (J - Period); + end if; + + Offset := Offset + 1; + end loop; + end Read; + + ----------- + -- Reset -- + ----------- + + procedure Reset is + begin + Random_Elements.Reset (Gen, Init_Random); + Pack_Size := 0; + Offset := 1; + Read_First := Read_Buffer'Last + 1; + Read_Last := Read_Buffer'Last; + end Reset; + +begin + Ada.Text_IO.Put_Line ("ZLib " & ZLib.Version); + + loop + for Level in ZLib.Compression_Level'Range loop + + Ada.Text_IO.Put ("Level =" + & ZLib.Compression_Level'Image (Level)); + + -- Deflate using generic instantiation. + + ZLib.Deflate_Init + (Filter, + Level, + Header => Header); + + Reset; + + Ada.Text_IO.Put + (Stream_Element_Offset'Image (File_Size) & " ->"); + + loop + declare + Buffer : Stream_Element_Array (1 .. 1024); + Last : Stream_Element_Offset; + begin + Read (Filter, Buffer, Last); + + Pack_Size := Pack_Size + Last - Buffer'First + 1; + + exit when Last < Buffer'Last; + end; + end loop; + + Ada.Text_IO.Put_Line (Stream_Element_Offset'Image (Pack_Size)); + + ZLib.Close (Filter); + end loop; + + exit when not Continuous; + + File_Size := File_Size + 1; + end loop; +end Read; diff --git a/thirdparty/zlib-1.3.1/contrib/ada/readme.txt b/thirdparty/zlib-1.3.1/contrib/ada/readme.txt new file mode 100644 index 0000000..efdd639 --- /dev/null +++ b/thirdparty/zlib-1.3.1/contrib/ada/readme.txt @@ -0,0 +1,65 @@ + ZLib for Ada thick binding (ZLib.Ada) + Release 1.3 + +ZLib.Ada is a thick binding interface to the popular ZLib data +compression library, available at http://www.gzip.org/zlib/. +It provides Ada-style access to the ZLib C library. + + + Here are the main changes since ZLib.Ada 1.2: + +- Attention: ZLib.Read generic routine have a initialization requirement + for Read_Last parameter now. It is a bit incompatible with previous version, + but extends functionality, we could use new parameters Allow_Read_Some and + Flush now. + +- Added Is_Open routines to ZLib and ZLib.Streams packages. + +- Add pragma Assert to check Stream_Element is 8 bit. + +- Fix extraction to buffer with exact known decompressed size. Error reported by + Steve Sangwine. + +- Fix definition of ULong (changed to unsigned_long), fix regression on 64 bits + computers. Patch provided by Pascal Obry. + +- Add Status_Error exception definition. + +- Add pragma Assertion that Ada.Streams.Stream_Element size is 8 bit. + + + How to build ZLib.Ada under GNAT + +You should have the ZLib library already build on your computer, before +building ZLib.Ada. Make the directory of ZLib.Ada sources current and +issue the command: + + gnatmake test -largs -L -lz + +Or use the GNAT project file build for GNAT 3.15 or later: + + gnatmake -Pzlib.gpr -L + + + How to build ZLib.Ada under Aonix ObjectAda for Win32 7.2.2 + +1. Make a project with all *.ads and *.adb files from the distribution. +2. Build the libz.a library from the ZLib C sources. +3. Rename libz.a to z.lib. +4. Add the library z.lib to the project. +5. Add the libc.lib library from the ObjectAda distribution to the project. +6. Build the executable using test.adb as a main procedure. + + + How to use ZLib.Ada + +The source files test.adb and read.adb are small demo programs that show +the main functionality of ZLib.Ada. + +The routines from the package specifications are commented. + + +Homepage: http://zlib-ada.sourceforge.net/ +Author: Dmitriy Anisimkov + +Contributors: Pascal Obry , Steve Sangwine diff --git a/thirdparty/zlib-1.3.1/contrib/ada/test.adb b/thirdparty/zlib-1.3.1/contrib/ada/test.adb new file mode 100644 index 0000000..8b35031 --- /dev/null +++ b/thirdparty/zlib-1.3.1/contrib/ada/test.adb @@ -0,0 +1,463 @@ +---------------------------------------------------------------- +-- ZLib for Ada thick binding. -- +-- -- +-- Copyright (C) 2002-2003 Dmitriy Anisimkov -- +-- -- +-- Open source license information is in the zlib.ads file. -- +---------------------------------------------------------------- + +-- $Id: test.adb,v 1.17 2003/08/12 12:13:30 vagul Exp $ + +-- The program has a few aims. +-- 1. Test ZLib.Ada95 thick binding functionality. +-- 2. Show the example of use main functionality of the ZLib.Ada95 binding. +-- 3. Build this program automatically compile all ZLib.Ada95 packages under +-- GNAT Ada95 compiler. + +with ZLib.Streams; +with Ada.Streams.Stream_IO; +with Ada.Numerics.Discrete_Random; + +with Ada.Text_IO; + +with Ada.Calendar; + +procedure Test is + + use Ada.Streams; + use Stream_IO; + + ------------------------------------ + -- Test configuration parameters -- + ------------------------------------ + + File_Size : Count := 100_000; + Continuous : constant Boolean := False; + + Header : constant ZLib.Header_Type := ZLib.Default; + -- ZLib.None; + -- ZLib.Auto; + -- ZLib.GZip; + -- Do not use Header other then Default in ZLib versions 1.1.4 + -- and older. + + Strategy : constant ZLib.Strategy_Type := ZLib.Default_Strategy; + Init_Random : constant := 10; + + -- End -- + + In_File_Name : constant String := "testzlib.in"; + -- Name of the input file + + Z_File_Name : constant String := "testzlib.zlb"; + -- Name of the compressed file. + + Out_File_Name : constant String := "testzlib.out"; + -- Name of the decompressed file. + + File_In : File_Type; + File_Out : File_Type; + File_Back : File_Type; + File_Z : ZLib.Streams.Stream_Type; + + Filter : ZLib.Filter_Type; + + Time_Stamp : Ada.Calendar.Time; + + procedure Generate_File; + -- Generate file of specified size with some random data. + -- The random data is repeatable, for the good compression. + + procedure Compare_Streams + (Left, Right : in out Root_Stream_Type'Class); + -- The procedure comparing data in 2 streams. + -- It is for compare data before and after compression/decompression. + + procedure Compare_Files (Left, Right : String); + -- Compare files. Based on the Compare_Streams. + + procedure Copy_Streams + (Source, Target : in out Root_Stream_Type'Class; + Buffer_Size : in Stream_Element_Offset := 1024); + -- Copying data from one stream to another. It is for test stream + -- interface of the library. + + procedure Data_In + (Item : out Stream_Element_Array; + Last : out Stream_Element_Offset); + -- this procedure is for generic instantiation of + -- ZLib.Generic_Translate. + -- reading data from the File_In. + + procedure Data_Out (Item : in Stream_Element_Array); + -- this procedure is for generic instantiation of + -- ZLib.Generic_Translate. + -- writing data to the File_Out. + + procedure Stamp; + -- Store the timestamp to the local variable. + + procedure Print_Statistic (Msg : String; Data_Size : ZLib.Count); + -- Print the time statistic with the message. + + procedure Translate is new ZLib.Generic_Translate + (Data_In => Data_In, + Data_Out => Data_Out); + -- This procedure is moving data from File_In to File_Out + -- with compression or decompression, depend on initialization of + -- Filter parameter. + + ------------------- + -- Compare_Files -- + ------------------- + + procedure Compare_Files (Left, Right : String) is + Left_File, Right_File : File_Type; + begin + Open (Left_File, In_File, Left); + Open (Right_File, In_File, Right); + Compare_Streams (Stream (Left_File).all, Stream (Right_File).all); + Close (Left_File); + Close (Right_File); + end Compare_Files; + + --------------------- + -- Compare_Streams -- + --------------------- + + procedure Compare_Streams + (Left, Right : in out Ada.Streams.Root_Stream_Type'Class) + is + Left_Buffer, Right_Buffer : Stream_Element_Array (0 .. 16#FFF#); + Left_Last, Right_Last : Stream_Element_Offset; + begin + loop + Read (Left, Left_Buffer, Left_Last); + Read (Right, Right_Buffer, Right_Last); + + if Left_Last /= Right_Last then + Ada.Text_IO.Put_Line ("Compare error :" + & Stream_Element_Offset'Image (Left_Last) + & " /= " + & Stream_Element_Offset'Image (Right_Last)); + + raise Constraint_Error; + + elsif Left_Buffer (0 .. Left_Last) + /= Right_Buffer (0 .. Right_Last) + then + Ada.Text_IO.Put_Line ("ERROR: IN and OUT files is not equal."); + raise Constraint_Error; + + end if; + + exit when Left_Last < Left_Buffer'Last; + end loop; + end Compare_Streams; + + ------------------ + -- Copy_Streams -- + ------------------ + + procedure Copy_Streams + (Source, Target : in out Ada.Streams.Root_Stream_Type'Class; + Buffer_Size : in Stream_Element_Offset := 1024) + is + Buffer : Stream_Element_Array (1 .. Buffer_Size); + Last : Stream_Element_Offset; + begin + loop + Read (Source, Buffer, Last); + Write (Target, Buffer (1 .. Last)); + + exit when Last < Buffer'Last; + end loop; + end Copy_Streams; + + ------------- + -- Data_In -- + ------------- + + procedure Data_In + (Item : out Stream_Element_Array; + Last : out Stream_Element_Offset) is + begin + Read (File_In, Item, Last); + end Data_In; + + -------------- + -- Data_Out -- + -------------- + + procedure Data_Out (Item : in Stream_Element_Array) is + begin + Write (File_Out, Item); + end Data_Out; + + ------------------- + -- Generate_File -- + ------------------- + + procedure Generate_File is + subtype Visible_Symbols is Stream_Element range 16#20# .. 16#7E#; + + package Random_Elements is + new Ada.Numerics.Discrete_Random (Visible_Symbols); + + Gen : Random_Elements.Generator; + Buffer : Stream_Element_Array := (1 .. 77 => 16#20#) & 10; + + Buffer_Count : constant Count := File_Size / Buffer'Length; + -- Number of same buffers in the packet. + + Density : constant Count := 30; -- from 0 to Buffer'Length - 2; + + procedure Fill_Buffer (J, D : in Count); + -- Change the part of the buffer. + + ----------------- + -- Fill_Buffer -- + ----------------- + + procedure Fill_Buffer (J, D : in Count) is + begin + for K in 0 .. D loop + Buffer + (Stream_Element_Offset ((J + K) mod (Buffer'Length - 1) + 1)) + := Random_Elements.Random (Gen); + + end loop; + end Fill_Buffer; + + begin + Random_Elements.Reset (Gen, Init_Random); + + Create (File_In, Out_File, In_File_Name); + + Fill_Buffer (1, Buffer'Length - 2); + + for J in 1 .. Buffer_Count loop + Write (File_In, Buffer); + + Fill_Buffer (J, Density); + end loop; + + -- fill remain size. + + Write + (File_In, + Buffer + (1 .. Stream_Element_Offset + (File_Size - Buffer'Length * Buffer_Count))); + + Flush (File_In); + Close (File_In); + end Generate_File; + + --------------------- + -- Print_Statistic -- + --------------------- + + procedure Print_Statistic (Msg : String; Data_Size : ZLib.Count) is + use Ada.Calendar; + use Ada.Text_IO; + + package Count_IO is new Integer_IO (ZLib.Count); + + Curr_Dur : Duration := Clock - Time_Stamp; + begin + Put (Msg); + + Set_Col (20); + Ada.Text_IO.Put ("size ="); + + Count_IO.Put + (Data_Size, + Width => Stream_IO.Count'Image (File_Size)'Length); + + Put_Line (" duration =" & Duration'Image (Curr_Dur)); + end Print_Statistic; + + ----------- + -- Stamp -- + ----------- + + procedure Stamp is + begin + Time_Stamp := Ada.Calendar.Clock; + end Stamp; + +begin + Ada.Text_IO.Put_Line ("ZLib " & ZLib.Version); + + loop + Generate_File; + + for Level in ZLib.Compression_Level'Range loop + + Ada.Text_IO.Put_Line ("Level =" + & ZLib.Compression_Level'Image (Level)); + + -- Test generic interface. + Open (File_In, In_File, In_File_Name); + Create (File_Out, Out_File, Z_File_Name); + + Stamp; + + -- Deflate using generic instantiation. + + ZLib.Deflate_Init + (Filter => Filter, + Level => Level, + Strategy => Strategy, + Header => Header); + + Translate (Filter); + Print_Statistic ("Generic compress", ZLib.Total_Out (Filter)); + ZLib.Close (Filter); + + Close (File_In); + Close (File_Out); + + Open (File_In, In_File, Z_File_Name); + Create (File_Out, Out_File, Out_File_Name); + + Stamp; + + -- Inflate using generic instantiation. + + ZLib.Inflate_Init (Filter, Header => Header); + + Translate (Filter); + Print_Statistic ("Generic decompress", ZLib.Total_Out (Filter)); + + ZLib.Close (Filter); + + Close (File_In); + Close (File_Out); + + Compare_Files (In_File_Name, Out_File_Name); + + -- Test stream interface. + + -- Compress to the back stream. + + Open (File_In, In_File, In_File_Name); + Create (File_Back, Out_File, Z_File_Name); + + Stamp; + + ZLib.Streams.Create + (Stream => File_Z, + Mode => ZLib.Streams.Out_Stream, + Back => ZLib.Streams.Stream_Access + (Stream (File_Back)), + Back_Compressed => True, + Level => Level, + Strategy => Strategy, + Header => Header); + + Copy_Streams + (Source => Stream (File_In).all, + Target => File_Z); + + -- Flushing internal buffers to the back stream. + + ZLib.Streams.Flush (File_Z, ZLib.Finish); + + Print_Statistic ("Write compress", + ZLib.Streams.Write_Total_Out (File_Z)); + + ZLib.Streams.Close (File_Z); + + Close (File_In); + Close (File_Back); + + -- Compare reading from original file and from + -- decompression stream. + + Open (File_In, In_File, In_File_Name); + Open (File_Back, In_File, Z_File_Name); + + ZLib.Streams.Create + (Stream => File_Z, + Mode => ZLib.Streams.In_Stream, + Back => ZLib.Streams.Stream_Access + (Stream (File_Back)), + Back_Compressed => True, + Header => Header); + + Stamp; + Compare_Streams (Stream (File_In).all, File_Z); + + Print_Statistic ("Read decompress", + ZLib.Streams.Read_Total_Out (File_Z)); + + ZLib.Streams.Close (File_Z); + Close (File_In); + Close (File_Back); + + -- Compress by reading from compression stream. + + Open (File_Back, In_File, In_File_Name); + Create (File_Out, Out_File, Z_File_Name); + + ZLib.Streams.Create + (Stream => File_Z, + Mode => ZLib.Streams.In_Stream, + Back => ZLib.Streams.Stream_Access + (Stream (File_Back)), + Back_Compressed => False, + Level => Level, + Strategy => Strategy, + Header => Header); + + Stamp; + Copy_Streams + (Source => File_Z, + Target => Stream (File_Out).all); + + Print_Statistic ("Read compress", + ZLib.Streams.Read_Total_Out (File_Z)); + + ZLib.Streams.Close (File_Z); + + Close (File_Out); + Close (File_Back); + + -- Decompress to decompression stream. + + Open (File_In, In_File, Z_File_Name); + Create (File_Back, Out_File, Out_File_Name); + + ZLib.Streams.Create + (Stream => File_Z, + Mode => ZLib.Streams.Out_Stream, + Back => ZLib.Streams.Stream_Access + (Stream (File_Back)), + Back_Compressed => False, + Header => Header); + + Stamp; + + Copy_Streams + (Source => Stream (File_In).all, + Target => File_Z); + + Print_Statistic ("Write decompress", + ZLib.Streams.Write_Total_Out (File_Z)); + + ZLib.Streams.Close (File_Z); + Close (File_In); + Close (File_Back); + + Compare_Files (In_File_Name, Out_File_Name); + end loop; + + Ada.Text_IO.Put_Line (Count'Image (File_Size) & " Ok."); + + exit when not Continuous; + + File_Size := File_Size + 1; + end loop; +end Test; diff --git a/thirdparty/zlib-1.3.1/contrib/ada/zlib-streams.adb b/thirdparty/zlib-1.3.1/contrib/ada/zlib-streams.adb new file mode 100644 index 0000000..b6497ba --- /dev/null +++ b/thirdparty/zlib-1.3.1/contrib/ada/zlib-streams.adb @@ -0,0 +1,225 @@ +---------------------------------------------------------------- +-- ZLib for Ada thick binding. -- +-- -- +-- Copyright (C) 2002-2003 Dmitriy Anisimkov -- +-- -- +-- Open source license information is in the zlib.ads file. -- +---------------------------------------------------------------- + +-- $Id: zlib-streams.adb,v 1.10 2004/05/31 10:53:40 vagul Exp $ + +with Ada.Unchecked_Deallocation; + +package body ZLib.Streams is + + ----------- + -- Close -- + ----------- + + procedure Close (Stream : in out Stream_Type) is + procedure Free is new Ada.Unchecked_Deallocation + (Stream_Element_Array, Buffer_Access); + begin + if Stream.Mode = Out_Stream or Stream.Mode = Duplex then + -- We should flush the data written by the writer. + + Flush (Stream, Finish); + + Close (Stream.Writer); + end if; + + if Stream.Mode = In_Stream or Stream.Mode = Duplex then + Close (Stream.Reader); + Free (Stream.Buffer); + end if; + end Close; + + ------------ + -- Create -- + ------------ + + procedure Create + (Stream : out Stream_Type; + Mode : in Stream_Mode; + Back : in Stream_Access; + Back_Compressed : in Boolean; + Level : in Compression_Level := Default_Compression; + Strategy : in Strategy_Type := Default_Strategy; + Header : in Header_Type := Default; + Read_Buffer_Size : in Ada.Streams.Stream_Element_Offset + := Default_Buffer_Size; + Write_Buffer_Size : in Ada.Streams.Stream_Element_Offset + := Default_Buffer_Size) + is + + subtype Buffer_Subtype is Stream_Element_Array (1 .. Read_Buffer_Size); + + procedure Init_Filter + (Filter : in out Filter_Type; + Compress : in Boolean); + + ----------------- + -- Init_Filter -- + ----------------- + + procedure Init_Filter + (Filter : in out Filter_Type; + Compress : in Boolean) is + begin + if Compress then + Deflate_Init + (Filter, Level, Strategy, Header => Header); + else + Inflate_Init (Filter, Header => Header); + end if; + end Init_Filter; + + begin + Stream.Back := Back; + Stream.Mode := Mode; + + if Mode = Out_Stream or Mode = Duplex then + Init_Filter (Stream.Writer, Back_Compressed); + Stream.Buffer_Size := Write_Buffer_Size; + else + Stream.Buffer_Size := 0; + end if; + + if Mode = In_Stream or Mode = Duplex then + Init_Filter (Stream.Reader, not Back_Compressed); + + Stream.Buffer := new Buffer_Subtype; + Stream.Rest_First := Stream.Buffer'Last + 1; + Stream.Rest_Last := Stream.Buffer'Last; + end if; + end Create; + + ----------- + -- Flush -- + ----------- + + procedure Flush + (Stream : in out Stream_Type; + Mode : in Flush_Mode := Sync_Flush) + is + Buffer : Stream_Element_Array (1 .. Stream.Buffer_Size); + Last : Stream_Element_Offset; + begin + loop + Flush (Stream.Writer, Buffer, Last, Mode); + + Ada.Streams.Write (Stream.Back.all, Buffer (1 .. Last)); + + exit when Last < Buffer'Last; + end loop; + end Flush; + + ------------- + -- Is_Open -- + ------------- + + function Is_Open (Stream : Stream_Type) return Boolean is + begin + return Is_Open (Stream.Reader) or else Is_Open (Stream.Writer); + end Is_Open; + + ---------- + -- Read -- + ---------- + + procedure Read + (Stream : in out Stream_Type; + Item : out Stream_Element_Array; + Last : out Stream_Element_Offset) + is + + procedure Read + (Item : out Stream_Element_Array; + Last : out Stream_Element_Offset); + + ---------- + -- Read -- + ---------- + + procedure Read + (Item : out Stream_Element_Array; + Last : out Stream_Element_Offset) is + begin + Ada.Streams.Read (Stream.Back.all, Item, Last); + end Read; + + procedure Read is new ZLib.Read + (Read => Read, + Buffer => Stream.Buffer.all, + Rest_First => Stream.Rest_First, + Rest_Last => Stream.Rest_Last); + + begin + Read (Stream.Reader, Item, Last); + end Read; + + ------------------- + -- Read_Total_In -- + ------------------- + + function Read_Total_In (Stream : in Stream_Type) return Count is + begin + return Total_In (Stream.Reader); + end Read_Total_In; + + -------------------- + -- Read_Total_Out -- + -------------------- + + function Read_Total_Out (Stream : in Stream_Type) return Count is + begin + return Total_Out (Stream.Reader); + end Read_Total_Out; + + ----------- + -- Write -- + ----------- + + procedure Write + (Stream : in out Stream_Type; + Item : in Stream_Element_Array) + is + + procedure Write (Item : in Stream_Element_Array); + + ----------- + -- Write -- + ----------- + + procedure Write (Item : in Stream_Element_Array) is + begin + Ada.Streams.Write (Stream.Back.all, Item); + end Write; + + procedure Write is new ZLib.Write + (Write => Write, + Buffer_Size => Stream.Buffer_Size); + + begin + Write (Stream.Writer, Item, No_Flush); + end Write; + + -------------------- + -- Write_Total_In -- + -------------------- + + function Write_Total_In (Stream : in Stream_Type) return Count is + begin + return Total_In (Stream.Writer); + end Write_Total_In; + + --------------------- + -- Write_Total_Out -- + --------------------- + + function Write_Total_Out (Stream : in Stream_Type) return Count is + begin + return Total_Out (Stream.Writer); + end Write_Total_Out; + +end ZLib.Streams; diff --git a/thirdparty/zlib-1.3.1/contrib/ada/zlib-streams.ads b/thirdparty/zlib-1.3.1/contrib/ada/zlib-streams.ads new file mode 100644 index 0000000..af13693 --- /dev/null +++ b/thirdparty/zlib-1.3.1/contrib/ada/zlib-streams.ads @@ -0,0 +1,114 @@ +---------------------------------------------------------------- +-- ZLib for Ada thick binding. -- +-- -- +-- Copyright (C) 2002-2003 Dmitriy Anisimkov -- +-- -- +-- Open source license information is in the zlib.ads file. -- +---------------------------------------------------------------- + +-- $Id: zlib-streams.ads,v 1.12 2004/05/31 10:53:40 vagul Exp $ + +package ZLib.Streams is + + type Stream_Mode is (In_Stream, Out_Stream, Duplex); + + type Stream_Access is access all Ada.Streams.Root_Stream_Type'Class; + + type Stream_Type is + new Ada.Streams.Root_Stream_Type with private; + + procedure Read + (Stream : in out Stream_Type; + Item : out Ada.Streams.Stream_Element_Array; + Last : out Ada.Streams.Stream_Element_Offset); + + procedure Write + (Stream : in out Stream_Type; + Item : in Ada.Streams.Stream_Element_Array); + + procedure Flush + (Stream : in out Stream_Type; + Mode : in Flush_Mode := Sync_Flush); + -- Flush the written data to the back stream, + -- all data placed to the compressor is flushing to the Back stream. + -- Should not be used until necessary, because it is decreasing + -- compression. + + function Read_Total_In (Stream : in Stream_Type) return Count; + pragma Inline (Read_Total_In); + -- Return total number of bytes read from back stream so far. + + function Read_Total_Out (Stream : in Stream_Type) return Count; + pragma Inline (Read_Total_Out); + -- Return total number of bytes read so far. + + function Write_Total_In (Stream : in Stream_Type) return Count; + pragma Inline (Write_Total_In); + -- Return total number of bytes written so far. + + function Write_Total_Out (Stream : in Stream_Type) return Count; + pragma Inline (Write_Total_Out); + -- Return total number of bytes written to the back stream. + + procedure Create + (Stream : out Stream_Type; + Mode : in Stream_Mode; + Back : in Stream_Access; + Back_Compressed : in Boolean; + Level : in Compression_Level := Default_Compression; + Strategy : in Strategy_Type := Default_Strategy; + Header : in Header_Type := Default; + Read_Buffer_Size : in Ada.Streams.Stream_Element_Offset + := Default_Buffer_Size; + Write_Buffer_Size : in Ada.Streams.Stream_Element_Offset + := Default_Buffer_Size); + -- Create the Compression/Decompression stream. + -- If mode is In_Stream then Write operation is disabled. + -- If mode is Out_Stream then Read operation is disabled. + + -- If Back_Compressed is true then + -- Data written to the Stream is compressing to the Back stream + -- and data read from the Stream is decompressed data from the Back stream. + + -- If Back_Compressed is false then + -- Data written to the Stream is decompressing to the Back stream + -- and data read from the Stream is compressed data from the Back stream. + + -- !!! When the Need_Header is False ZLib-Ada is using undocumented + -- ZLib 1.1.4 functionality to do not create/wait for ZLib headers. + + function Is_Open (Stream : Stream_Type) return Boolean; + + procedure Close (Stream : in out Stream_Type); + +private + + use Ada.Streams; + + type Buffer_Access is access all Stream_Element_Array; + + type Stream_Type + is new Root_Stream_Type with + record + Mode : Stream_Mode; + + Buffer : Buffer_Access; + Rest_First : Stream_Element_Offset; + Rest_Last : Stream_Element_Offset; + -- Buffer for Read operation. + -- We need to have this buffer in the record + -- because not all read data from back stream + -- could be processed during the read operation. + + Buffer_Size : Stream_Element_Offset; + -- Buffer size for write operation. + -- We do not need to have this buffer + -- in the record because all data could be + -- processed in the write operation. + + Back : Stream_Access; + Reader : Filter_Type; + Writer : Filter_Type; + end record; + +end ZLib.Streams; diff --git a/thirdparty/zlib-1.3.1/contrib/ada/zlib-thin.adb b/thirdparty/zlib-1.3.1/contrib/ada/zlib-thin.adb new file mode 100644 index 0000000..0ca4a71 --- /dev/null +++ b/thirdparty/zlib-1.3.1/contrib/ada/zlib-thin.adb @@ -0,0 +1,141 @@ +---------------------------------------------------------------- +-- ZLib for Ada thick binding. -- +-- -- +-- Copyright (C) 2002-2003 Dmitriy Anisimkov -- +-- -- +-- Open source license information is in the zlib.ads file. -- +---------------------------------------------------------------- + +-- $Id: zlib-thin.adb,v 1.8 2003/12/14 18:27:31 vagul Exp $ + +package body ZLib.Thin is + + ZLIB_VERSION : constant Chars_Ptr := zlibVersion; + + Z_Stream_Size : constant Int := Z_Stream'Size / System.Storage_Unit; + + -------------- + -- Avail_In -- + -------------- + + function Avail_In (Strm : in Z_Stream) return UInt is + begin + return Strm.Avail_In; + end Avail_In; + + --------------- + -- Avail_Out -- + --------------- + + function Avail_Out (Strm : in Z_Stream) return UInt is + begin + return Strm.Avail_Out; + end Avail_Out; + + ------------------ + -- Deflate_Init -- + ------------------ + + function Deflate_Init + (strm : Z_Streamp; + level : Int; + method : Int; + windowBits : Int; + memLevel : Int; + strategy : Int) + return Int is + begin + return deflateInit2 + (strm, + level, + method, + windowBits, + memLevel, + strategy, + ZLIB_VERSION, + Z_Stream_Size); + end Deflate_Init; + + ------------------ + -- Inflate_Init -- + ------------------ + + function Inflate_Init (strm : Z_Streamp; windowBits : Int) return Int is + begin + return inflateInit2 (strm, windowBits, ZLIB_VERSION, Z_Stream_Size); + end Inflate_Init; + + ------------------------ + -- Last_Error_Message -- + ------------------------ + + function Last_Error_Message (Strm : in Z_Stream) return String is + use Interfaces.C.Strings; + begin + if Strm.msg = Null_Ptr then + return ""; + else + return Value (Strm.msg); + end if; + end Last_Error_Message; + + ------------ + -- Set_In -- + ------------ + + procedure Set_In + (Strm : in out Z_Stream; + Buffer : in Voidp; + Size : in UInt) is + begin + Strm.Next_In := Buffer; + Strm.Avail_In := Size; + end Set_In; + + ------------------ + -- Set_Mem_Func -- + ------------------ + + procedure Set_Mem_Func + (Strm : in out Z_Stream; + Opaque : in Voidp; + Alloc : in alloc_func; + Free : in free_func) is + begin + Strm.opaque := Opaque; + Strm.zalloc := Alloc; + Strm.zfree := Free; + end Set_Mem_Func; + + ------------- + -- Set_Out -- + ------------- + + procedure Set_Out + (Strm : in out Z_Stream; + Buffer : in Voidp; + Size : in UInt) is + begin + Strm.Next_Out := Buffer; + Strm.Avail_Out := Size; + end Set_Out; + + -------------- + -- Total_In -- + -------------- + + function Total_In (Strm : in Z_Stream) return ULong is + begin + return Strm.Total_In; + end Total_In; + + --------------- + -- Total_Out -- + --------------- + + function Total_Out (Strm : in Z_Stream) return ULong is + begin + return Strm.Total_Out; + end Total_Out; + +end ZLib.Thin; diff --git a/thirdparty/zlib-1.3.1/contrib/ada/zlib-thin.ads b/thirdparty/zlib-1.3.1/contrib/ada/zlib-thin.ads new file mode 100644 index 0000000..810173c --- /dev/null +++ b/thirdparty/zlib-1.3.1/contrib/ada/zlib-thin.ads @@ -0,0 +1,450 @@ +---------------------------------------------------------------- +-- ZLib for Ada thick binding. -- +-- -- +-- Copyright (C) 2002-2003 Dmitriy Anisimkov -- +-- -- +-- Open source license information is in the zlib.ads file. -- +---------------------------------------------------------------- + +-- $Id: zlib-thin.ads,v 1.11 2004/07/23 06:33:11 vagul Exp $ + +with Interfaces.C.Strings; + +with System; + +private package ZLib.Thin is + + -- From zconf.h + + MAX_MEM_LEVEL : constant := 9; -- zconf.h:105 + -- zconf.h:105 + MAX_WBITS : constant := 15; -- zconf.h:115 + -- 32K LZ77 window + -- zconf.h:115 + SEEK_SET : constant := 8#0000#; -- zconf.h:244 + -- Seek from beginning of file. + -- zconf.h:244 + SEEK_CUR : constant := 1; -- zconf.h:245 + -- Seek from current position. + -- zconf.h:245 + SEEK_END : constant := 2; -- zconf.h:246 + -- Set file pointer to EOF plus "offset" + -- zconf.h:246 + + type Byte is new Interfaces.C.unsigned_char; -- 8 bits + -- zconf.h:214 + type UInt is new Interfaces.C.unsigned; -- 16 bits or more + -- zconf.h:216 + type Int is new Interfaces.C.int; + + type ULong is new Interfaces.C.unsigned_long; -- 32 bits or more + -- zconf.h:217 + subtype Chars_Ptr is Interfaces.C.Strings.chars_ptr; + + type ULong_Access is access ULong; + type Int_Access is access Int; + + subtype Voidp is System.Address; -- zconf.h:232 + + subtype Byte_Access is Voidp; + + Nul : constant Voidp := System.Null_Address; + -- end from zconf + + Z_NO_FLUSH : constant := 8#0000#; -- zlib.h:125 + -- zlib.h:125 + Z_PARTIAL_FLUSH : constant := 1; -- zlib.h:126 + -- will be removed, use + -- Z_SYNC_FLUSH instead + -- zlib.h:126 + Z_SYNC_FLUSH : constant := 2; -- zlib.h:127 + -- zlib.h:127 + Z_FULL_FLUSH : constant := 3; -- zlib.h:128 + -- zlib.h:128 + Z_FINISH : constant := 4; -- zlib.h:129 + -- zlib.h:129 + Z_OK : constant := 8#0000#; -- zlib.h:132 + -- zlib.h:132 + Z_STREAM_END : constant := 1; -- zlib.h:133 + -- zlib.h:133 + Z_NEED_DICT : constant := 2; -- zlib.h:134 + -- zlib.h:134 + Z_ERRNO : constant := -1; -- zlib.h:135 + -- zlib.h:135 + Z_STREAM_ERROR : constant := -2; -- zlib.h:136 + -- zlib.h:136 + Z_DATA_ERROR : constant := -3; -- zlib.h:137 + -- zlib.h:137 + Z_MEM_ERROR : constant := -4; -- zlib.h:138 + -- zlib.h:138 + Z_BUF_ERROR : constant := -5; -- zlib.h:139 + -- zlib.h:139 + Z_VERSION_ERROR : constant := -6; -- zlib.h:140 + -- zlib.h:140 + Z_NO_COMPRESSION : constant := 8#0000#; -- zlib.h:145 + -- zlib.h:145 + Z_BEST_SPEED : constant := 1; -- zlib.h:146 + -- zlib.h:146 + Z_BEST_COMPRESSION : constant := 9; -- zlib.h:147 + -- zlib.h:147 + Z_DEFAULT_COMPRESSION : constant := -1; -- zlib.h:148 + -- zlib.h:148 + Z_FILTERED : constant := 1; -- zlib.h:151 + -- zlib.h:151 + Z_HUFFMAN_ONLY : constant := 2; -- zlib.h:152 + -- zlib.h:152 + Z_DEFAULT_STRATEGY : constant := 8#0000#; -- zlib.h:153 + -- zlib.h:153 + Z_BINARY : constant := 8#0000#; -- zlib.h:156 + -- zlib.h:156 + Z_ASCII : constant := 1; -- zlib.h:157 + -- zlib.h:157 + Z_UNKNOWN : constant := 2; -- zlib.h:158 + -- zlib.h:158 + Z_DEFLATED : constant := 8; -- zlib.h:161 + -- zlib.h:161 + Z_NULL : constant := 8#0000#; -- zlib.h:164 + -- for initializing zalloc, zfree, opaque + -- zlib.h:164 + type gzFile is new Voidp; -- zlib.h:646 + + type Z_Stream is private; + + type Z_Streamp is access all Z_Stream; -- zlib.h:89 + + type alloc_func is access function + (Opaque : Voidp; + Items : UInt; + Size : UInt) + return Voidp; -- zlib.h:63 + + type free_func is access procedure (opaque : Voidp; address : Voidp); + + function zlibVersion return Chars_Ptr; + + function Deflate (strm : Z_Streamp; flush : Int) return Int; + + function DeflateEnd (strm : Z_Streamp) return Int; + + function Inflate (strm : Z_Streamp; flush : Int) return Int; + + function InflateEnd (strm : Z_Streamp) return Int; + + function deflateSetDictionary + (strm : Z_Streamp; + dictionary : Byte_Access; + dictLength : UInt) + return Int; + + function deflateCopy (dest : Z_Streamp; source : Z_Streamp) return Int; + -- zlib.h:478 + + function deflateReset (strm : Z_Streamp) return Int; -- zlib.h:495 + + function deflateParams + (strm : Z_Streamp; + level : Int; + strategy : Int) + return Int; -- zlib.h:506 + + function inflateSetDictionary + (strm : Z_Streamp; + dictionary : Byte_Access; + dictLength : UInt) + return Int; -- zlib.h:548 + + function inflateSync (strm : Z_Streamp) return Int; -- zlib.h:565 + + function inflateReset (strm : Z_Streamp) return Int; -- zlib.h:580 + + function compress + (dest : Byte_Access; + destLen : ULong_Access; + source : Byte_Access; + sourceLen : ULong) + return Int; -- zlib.h:601 + + function compress2 + (dest : Byte_Access; + destLen : ULong_Access; + source : Byte_Access; + sourceLen : ULong; + level : Int) + return Int; -- zlib.h:615 + + function uncompress + (dest : Byte_Access; + destLen : ULong_Access; + source : Byte_Access; + sourceLen : ULong) + return Int; + + function gzopen (path : Chars_Ptr; mode : Chars_Ptr) return gzFile; + + function gzdopen (fd : Int; mode : Chars_Ptr) return gzFile; + + function gzsetparams + (file : gzFile; + level : Int; + strategy : Int) + return Int; + + function gzread + (file : gzFile; + buf : Voidp; + len : UInt) + return Int; + + function gzwrite + (file : in gzFile; + buf : in Voidp; + len : in UInt) + return Int; + + function gzprintf (file : in gzFile; format : in Chars_Ptr) return Int; + + function gzputs (file : in gzFile; s : in Chars_Ptr) return Int; + + function gzgets + (file : gzFile; + buf : Chars_Ptr; + len : Int) + return Chars_Ptr; + + function gzputc (file : gzFile; char : Int) return Int; + + function gzgetc (file : gzFile) return Int; + + function gzflush (file : gzFile; flush : Int) return Int; + + function gzseek + (file : gzFile; + offset : Int; + whence : Int) + return Int; + + function gzrewind (file : gzFile) return Int; + + function gztell (file : gzFile) return Int; + + function gzeof (file : gzFile) return Int; + + function gzclose (file : gzFile) return Int; + + function gzerror (file : gzFile; errnum : Int_Access) return Chars_Ptr; + + function adler32 + (adler : ULong; + buf : Byte_Access; + len : UInt) + return ULong; + + function crc32 + (crc : ULong; + buf : Byte_Access; + len : UInt) + return ULong; + + function deflateInit + (strm : Z_Streamp; + level : Int; + version : Chars_Ptr; + stream_size : Int) + return Int; + + function deflateInit2 + (strm : Z_Streamp; + level : Int; + method : Int; + windowBits : Int; + memLevel : Int; + strategy : Int; + version : Chars_Ptr; + stream_size : Int) + return Int; + + function Deflate_Init + (strm : Z_Streamp; + level : Int; + method : Int; + windowBits : Int; + memLevel : Int; + strategy : Int) + return Int; + pragma Inline (Deflate_Init); + + function inflateInit + (strm : Z_Streamp; + version : Chars_Ptr; + stream_size : Int) + return Int; + + function inflateInit2 + (strm : in Z_Streamp; + windowBits : in Int; + version : in Chars_Ptr; + stream_size : in Int) + return Int; + + function inflateBackInit + (strm : in Z_Streamp; + windowBits : in Int; + window : in Byte_Access; + version : in Chars_Ptr; + stream_size : in Int) + return Int; + -- Size of window have to be 2**windowBits. + + function Inflate_Init (strm : Z_Streamp; windowBits : Int) return Int; + pragma Inline (Inflate_Init); + + function zError (err : Int) return Chars_Ptr; + + function inflateSyncPoint (z : Z_Streamp) return Int; + + function get_crc_table return ULong_Access; + + -- Interface to the available fields of the z_stream structure. + -- The application must update next_in and avail_in when avail_in has + -- dropped to zero. It must update next_out and avail_out when avail_out + -- has dropped to zero. The application must initialize zalloc, zfree and + -- opaque before calling the init function. + + procedure Set_In + (Strm : in out Z_Stream; + Buffer : in Voidp; + Size : in UInt); + pragma Inline (Set_In); + + procedure Set_Out + (Strm : in out Z_Stream; + Buffer : in Voidp; + Size : in UInt); + pragma Inline (Set_Out); + + procedure Set_Mem_Func + (Strm : in out Z_Stream; + Opaque : in Voidp; + Alloc : in alloc_func; + Free : in free_func); + pragma Inline (Set_Mem_Func); + + function Last_Error_Message (Strm : in Z_Stream) return String; + pragma Inline (Last_Error_Message); + + function Avail_Out (Strm : in Z_Stream) return UInt; + pragma Inline (Avail_Out); + + function Avail_In (Strm : in Z_Stream) return UInt; + pragma Inline (Avail_In); + + function Total_In (Strm : in Z_Stream) return ULong; + pragma Inline (Total_In); + + function Total_Out (Strm : in Z_Stream) return ULong; + pragma Inline (Total_Out); + + function inflateCopy + (dest : in Z_Streamp; + Source : in Z_Streamp) + return Int; + + function compressBound (Source_Len : in ULong) return ULong; + + function deflateBound + (Strm : in Z_Streamp; + Source_Len : in ULong) + return ULong; + + function gzungetc (C : in Int; File : in gzFile) return Int; + + function zlibCompileFlags return ULong; + +private + + type Z_Stream is record -- zlib.h:68 + Next_In : Voidp := Nul; -- next input byte + Avail_In : UInt := 0; -- number of bytes available at next_in + Total_In : ULong := 0; -- total nb of input bytes read so far + Next_Out : Voidp := Nul; -- next output byte should be put there + Avail_Out : UInt := 0; -- remaining free space at next_out + Total_Out : ULong := 0; -- total nb of bytes output so far + msg : Chars_Ptr; -- last error message, NULL if no error + state : Voidp; -- not visible by applications + zalloc : alloc_func := null; -- used to allocate the internal state + zfree : free_func := null; -- used to free the internal state + opaque : Voidp; -- private data object passed to + -- zalloc and zfree + data_type : Int; -- best guess about the data type: + -- ascii or binary + adler : ULong; -- adler32 value of the uncompressed + -- data + reserved : ULong; -- reserved for future use + end record; + + pragma Convention (C, Z_Stream); + + pragma Import (C, zlibVersion, "zlibVersion"); + pragma Import (C, Deflate, "deflate"); + pragma Import (C, DeflateEnd, "deflateEnd"); + pragma Import (C, Inflate, "inflate"); + pragma Import (C, InflateEnd, "inflateEnd"); + pragma Import (C, deflateSetDictionary, "deflateSetDictionary"); + pragma Import (C, deflateCopy, "deflateCopy"); + pragma Import (C, deflateReset, "deflateReset"); + pragma Import (C, deflateParams, "deflateParams"); + pragma Import (C, inflateSetDictionary, "inflateSetDictionary"); + pragma Import (C, inflateSync, "inflateSync"); + pragma Import (C, inflateReset, "inflateReset"); + pragma Import (C, compress, "compress"); + pragma Import (C, compress2, "compress2"); + pragma Import (C, uncompress, "uncompress"); + pragma Import (C, gzopen, "gzopen"); + pragma Import (C, gzdopen, "gzdopen"); + pragma Import (C, gzsetparams, "gzsetparams"); + pragma Import (C, gzread, "gzread"); + pragma Import (C, gzwrite, "gzwrite"); + pragma Import (C, gzprintf, "gzprintf"); + pragma Import (C, gzputs, "gzputs"); + pragma Import (C, gzgets, "gzgets"); + pragma Import (C, gzputc, "gzputc"); + pragma Import (C, gzgetc, "gzgetc"); + pragma Import (C, gzflush, "gzflush"); + pragma Import (C, gzseek, "gzseek"); + pragma Import (C, gzrewind, "gzrewind"); + pragma Import (C, gztell, "gztell"); + pragma Import (C, gzeof, "gzeof"); + pragma Import (C, gzclose, "gzclose"); + pragma Import (C, gzerror, "gzerror"); + pragma Import (C, adler32, "adler32"); + pragma Import (C, crc32, "crc32"); + pragma Import (C, deflateInit, "deflateInit_"); + pragma Import (C, inflateInit, "inflateInit_"); + pragma Import (C, deflateInit2, "deflateInit2_"); + pragma Import (C, inflateInit2, "inflateInit2_"); + pragma Import (C, zError, "zError"); + pragma Import (C, inflateSyncPoint, "inflateSyncPoint"); + pragma Import (C, get_crc_table, "get_crc_table"); + + -- since zlib 1.2.0: + + pragma Import (C, inflateCopy, "inflateCopy"); + pragma Import (C, compressBound, "compressBound"); + pragma Import (C, deflateBound, "deflateBound"); + pragma Import (C, gzungetc, "gzungetc"); + pragma Import (C, zlibCompileFlags, "zlibCompileFlags"); + + pragma Import (C, inflateBackInit, "inflateBackInit_"); + + -- I stopped binding the inflateBack routines, because realize that + -- it does not support zlib and gzip headers for now, and have no + -- symmetric deflateBack routines. + -- ZLib-Ada is symmetric regarding deflate/inflate data transformation + -- and has a similar generic callback interface for the + -- deflate/inflate transformation based on the regular Deflate/Inflate + -- routines. + + -- pragma Import (C, inflateBack, "inflateBack"); + -- pragma Import (C, inflateBackEnd, "inflateBackEnd"); + +end ZLib.Thin; diff --git a/thirdparty/zlib-1.3.1/contrib/ada/zlib.adb b/thirdparty/zlib-1.3.1/contrib/ada/zlib.adb new file mode 100644 index 0000000..c1abe79 --- /dev/null +++ b/thirdparty/zlib-1.3.1/contrib/ada/zlib.adb @@ -0,0 +1,701 @@ +---------------------------------------------------------------- +-- ZLib for Ada thick binding. -- +-- -- +-- Copyright (C) 2002-2004 Dmitriy Anisimkov -- +-- -- +-- Open source license information is in the zlib.ads file. -- +---------------------------------------------------------------- + +-- $Id: zlib.adb,v 1.31 2004/09/06 06:53:19 vagul Exp $ + +with Ada.Exceptions; +with Ada.Unchecked_Conversion; +with Ada.Unchecked_Deallocation; + +with Interfaces.C.Strings; + +with ZLib.Thin; + +package body ZLib is + + use type Thin.Int; + + type Z_Stream is new Thin.Z_Stream; + + type Return_Code_Enum is + (OK, + STREAM_END, + NEED_DICT, + ERRNO, + STREAM_ERROR, + DATA_ERROR, + MEM_ERROR, + BUF_ERROR, + VERSION_ERROR); + + type Flate_Step_Function is access + function (Strm : in Thin.Z_Streamp; Flush : in Thin.Int) return Thin.Int; + pragma Convention (C, Flate_Step_Function); + + type Flate_End_Function is access + function (Ctrm : in Thin.Z_Streamp) return Thin.Int; + pragma Convention (C, Flate_End_Function); + + type Flate_Type is record + Step : Flate_Step_Function; + Done : Flate_End_Function; + end record; + + subtype Footer_Array is Stream_Element_Array (1 .. 8); + + Simple_GZip_Header : constant Stream_Element_Array (1 .. 10) + := (16#1f#, 16#8b#, -- Magic header + 16#08#, -- Z_DEFLATED + 16#00#, -- Flags + 16#00#, 16#00#, 16#00#, 16#00#, -- Time + 16#00#, -- XFlags + 16#03# -- OS code + ); + -- The simplest gzip header is not for informational, but just for + -- gzip format compatibility. + -- Note that some code below is using assumption + -- Simple_GZip_Header'Last > Footer_Array'Last, so do not make + -- Simple_GZip_Header'Last <= Footer_Array'Last. + + Return_Code : constant array (Thin.Int range <>) of Return_Code_Enum + := (0 => OK, + 1 => STREAM_END, + 2 => NEED_DICT, + -1 => ERRNO, + -2 => STREAM_ERROR, + -3 => DATA_ERROR, + -4 => MEM_ERROR, + -5 => BUF_ERROR, + -6 => VERSION_ERROR); + + Flate : constant array (Boolean) of Flate_Type + := (True => (Step => Thin.Deflate'Access, + Done => Thin.DeflateEnd'Access), + False => (Step => Thin.Inflate'Access, + Done => Thin.InflateEnd'Access)); + + Flush_Finish : constant array (Boolean) of Flush_Mode + := (True => Finish, False => No_Flush); + + procedure Raise_Error (Stream : in Z_Stream); + pragma Inline (Raise_Error); + + procedure Raise_Error (Message : in String); + pragma Inline (Raise_Error); + + procedure Check_Error (Stream : in Z_Stream; Code : in Thin.Int); + + procedure Free is new Ada.Unchecked_Deallocation + (Z_Stream, Z_Stream_Access); + + function To_Thin_Access is new Ada.Unchecked_Conversion + (Z_Stream_Access, Thin.Z_Streamp); + + procedure Translate_GZip + (Filter : in out Filter_Type; + In_Data : in Ada.Streams.Stream_Element_Array; + In_Last : out Ada.Streams.Stream_Element_Offset; + Out_Data : out Ada.Streams.Stream_Element_Array; + Out_Last : out Ada.Streams.Stream_Element_Offset; + Flush : in Flush_Mode); + -- Separate translate routine for make gzip header. + + procedure Translate_Auto + (Filter : in out Filter_Type; + In_Data : in Ada.Streams.Stream_Element_Array; + In_Last : out Ada.Streams.Stream_Element_Offset; + Out_Data : out Ada.Streams.Stream_Element_Array; + Out_Last : out Ada.Streams.Stream_Element_Offset; + Flush : in Flush_Mode); + -- translate routine without additional headers. + + ----------------- + -- Check_Error -- + ----------------- + + procedure Check_Error (Stream : in Z_Stream; Code : in Thin.Int) is + use type Thin.Int; + begin + if Code /= Thin.Z_OK then + Raise_Error + (Return_Code_Enum'Image (Return_Code (Code)) + & ": " & Last_Error_Message (Stream)); + end if; + end Check_Error; + + ----------- + -- Close -- + ----------- + + procedure Close + (Filter : in out Filter_Type; + Ignore_Error : in Boolean := False) + is + Code : Thin.Int; + begin + if not Ignore_Error and then not Is_Open (Filter) then + raise Status_Error; + end if; + + Code := Flate (Filter.Compression).Done (To_Thin_Access (Filter.Strm)); + + if Ignore_Error or else Code = Thin.Z_OK then + Free (Filter.Strm); + else + declare + Error_Message : constant String + := Last_Error_Message (Filter.Strm.all); + begin + Free (Filter.Strm); + Ada.Exceptions.Raise_Exception + (ZLib_Error'Identity, + Return_Code_Enum'Image (Return_Code (Code)) + & ": " & Error_Message); + end; + end if; + end Close; + + ----------- + -- CRC32 -- + ----------- + + function CRC32 + (CRC : in Unsigned_32; + Data : in Ada.Streams.Stream_Element_Array) + return Unsigned_32 + is + use Thin; + begin + return Unsigned_32 (crc32 (ULong (CRC), + Data'Address, + Data'Length)); + end CRC32; + + procedure CRC32 + (CRC : in out Unsigned_32; + Data : in Ada.Streams.Stream_Element_Array) is + begin + CRC := CRC32 (CRC, Data); + end CRC32; + + ------------------ + -- Deflate_Init -- + ------------------ + + procedure Deflate_Init + (Filter : in out Filter_Type; + Level : in Compression_Level := Default_Compression; + Strategy : in Strategy_Type := Default_Strategy; + Method : in Compression_Method := Deflated; + Window_Bits : in Window_Bits_Type := Default_Window_Bits; + Memory_Level : in Memory_Level_Type := Default_Memory_Level; + Header : in Header_Type := Default) + is + use type Thin.Int; + Win_Bits : Thin.Int := Thin.Int (Window_Bits); + begin + if Is_Open (Filter) then + raise Status_Error; + end if; + + -- We allow ZLib to make header only in case of default header type. + -- Otherwise we would either do header by ourselves, or do not do + -- header at all. + + if Header = None or else Header = GZip then + Win_Bits := -Win_Bits; + end if; + + -- For the GZip CRC calculation and make headers. + + if Header = GZip then + Filter.CRC := 0; + Filter.Offset := Simple_GZip_Header'First; + else + Filter.Offset := Simple_GZip_Header'Last + 1; + end if; + + Filter.Strm := new Z_Stream; + Filter.Compression := True; + Filter.Stream_End := False; + Filter.Header := Header; + + if Thin.Deflate_Init + (To_Thin_Access (Filter.Strm), + Level => Thin.Int (Level), + method => Thin.Int (Method), + windowBits => Win_Bits, + memLevel => Thin.Int (Memory_Level), + strategy => Thin.Int (Strategy)) /= Thin.Z_OK + then + Raise_Error (Filter.Strm.all); + end if; + end Deflate_Init; + + ----------- + -- Flush -- + ----------- + + procedure Flush + (Filter : in out Filter_Type; + Out_Data : out Ada.Streams.Stream_Element_Array; + Out_Last : out Ada.Streams.Stream_Element_Offset; + Flush : in Flush_Mode) + is + No_Data : Stream_Element_Array := (1 .. 0 => 0); + Last : Stream_Element_Offset; + begin + Translate (Filter, No_Data, Last, Out_Data, Out_Last, Flush); + end Flush; + + ----------------------- + -- Generic_Translate -- + ----------------------- + + procedure Generic_Translate + (Filter : in out ZLib.Filter_Type; + In_Buffer_Size : in Integer := Default_Buffer_Size; + Out_Buffer_Size : in Integer := Default_Buffer_Size) + is + In_Buffer : Stream_Element_Array + (1 .. Stream_Element_Offset (In_Buffer_Size)); + Out_Buffer : Stream_Element_Array + (1 .. Stream_Element_Offset (Out_Buffer_Size)); + Last : Stream_Element_Offset; + In_Last : Stream_Element_Offset; + In_First : Stream_Element_Offset; + Out_Last : Stream_Element_Offset; + begin + Main : loop + Data_In (In_Buffer, Last); + + In_First := In_Buffer'First; + + loop + Translate + (Filter => Filter, + In_Data => In_Buffer (In_First .. Last), + In_Last => In_Last, + Out_Data => Out_Buffer, + Out_Last => Out_Last, + Flush => Flush_Finish (Last < In_Buffer'First)); + + if Out_Buffer'First <= Out_Last then + Data_Out (Out_Buffer (Out_Buffer'First .. Out_Last)); + end if; + + exit Main when Stream_End (Filter); + + -- The end of in buffer. + + exit when In_Last = Last; + + In_First := In_Last + 1; + end loop; + end loop Main; + + end Generic_Translate; + + ------------------ + -- Inflate_Init -- + ------------------ + + procedure Inflate_Init + (Filter : in out Filter_Type; + Window_Bits : in Window_Bits_Type := Default_Window_Bits; + Header : in Header_Type := Default) + is + use type Thin.Int; + Win_Bits : Thin.Int := Thin.Int (Window_Bits); + + procedure Check_Version; + -- Check the latest header types compatibility. + + procedure Check_Version is + begin + if Version <= "1.1.4" then + Raise_Error + ("Inflate header type " & Header_Type'Image (Header) + & " incompatible with ZLib version " & Version); + end if; + end Check_Version; + + begin + if Is_Open (Filter) then + raise Status_Error; + end if; + + case Header is + when None => + Check_Version; + + -- Inflate data without headers determined + -- by negative Win_Bits. + + Win_Bits := -Win_Bits; + when GZip => + Check_Version; + + -- Inflate gzip data defined by flag 16. + + Win_Bits := Win_Bits + 16; + when Auto => + Check_Version; + + -- Inflate with automatic detection + -- of gzip or native header defined by flag 32. + + Win_Bits := Win_Bits + 32; + when Default => null; + end case; + + Filter.Strm := new Z_Stream; + Filter.Compression := False; + Filter.Stream_End := False; + Filter.Header := Header; + + if Thin.Inflate_Init + (To_Thin_Access (Filter.Strm), Win_Bits) /= Thin.Z_OK + then + Raise_Error (Filter.Strm.all); + end if; + end Inflate_Init; + + ------------- + -- Is_Open -- + ------------- + + function Is_Open (Filter : in Filter_Type) return Boolean is + begin + return Filter.Strm /= null; + end Is_Open; + + ----------------- + -- Raise_Error -- + ----------------- + + procedure Raise_Error (Message : in String) is + begin + Ada.Exceptions.Raise_Exception (ZLib_Error'Identity, Message); + end Raise_Error; + + procedure Raise_Error (Stream : in Z_Stream) is + begin + Raise_Error (Last_Error_Message (Stream)); + end Raise_Error; + + ---------- + -- Read -- + ---------- + + procedure Read + (Filter : in out Filter_Type; + Item : out Ada.Streams.Stream_Element_Array; + Last : out Ada.Streams.Stream_Element_Offset; + Flush : in Flush_Mode := No_Flush) + is + In_Last : Stream_Element_Offset; + Item_First : Ada.Streams.Stream_Element_Offset := Item'First; + V_Flush : Flush_Mode := Flush; + + begin + pragma Assert (Rest_First in Buffer'First .. Buffer'Last + 1); + pragma Assert (Rest_Last in Buffer'First - 1 .. Buffer'Last); + + loop + if Rest_Last = Buffer'First - 1 then + V_Flush := Finish; + + elsif Rest_First > Rest_Last then + Read (Buffer, Rest_Last); + Rest_First := Buffer'First; + + if Rest_Last < Buffer'First then + V_Flush := Finish; + end if; + end if; + + Translate + (Filter => Filter, + In_Data => Buffer (Rest_First .. Rest_Last), + In_Last => In_Last, + Out_Data => Item (Item_First .. Item'Last), + Out_Last => Last, + Flush => V_Flush); + + Rest_First := In_Last + 1; + + exit when Stream_End (Filter) + or else Last = Item'Last + or else (Last >= Item'First and then Allow_Read_Some); + + Item_First := Last + 1; + end loop; + end Read; + + ---------------- + -- Stream_End -- + ---------------- + + function Stream_End (Filter : in Filter_Type) return Boolean is + begin + if Filter.Header = GZip and Filter.Compression then + return Filter.Stream_End + and then Filter.Offset = Footer_Array'Last + 1; + else + return Filter.Stream_End; + end if; + end Stream_End; + + -------------- + -- Total_In -- + -------------- + + function Total_In (Filter : in Filter_Type) return Count is + begin + return Count (Thin.Total_In (To_Thin_Access (Filter.Strm).all)); + end Total_In; + + --------------- + -- Total_Out -- + --------------- + + function Total_Out (Filter : in Filter_Type) return Count is + begin + return Count (Thin.Total_Out (To_Thin_Access (Filter.Strm).all)); + end Total_Out; + + --------------- + -- Translate -- + --------------- + + procedure Translate + (Filter : in out Filter_Type; + In_Data : in Ada.Streams.Stream_Element_Array; + In_Last : out Ada.Streams.Stream_Element_Offset; + Out_Data : out Ada.Streams.Stream_Element_Array; + Out_Last : out Ada.Streams.Stream_Element_Offset; + Flush : in Flush_Mode) is + begin + if Filter.Header = GZip and then Filter.Compression then + Translate_GZip + (Filter => Filter, + In_Data => In_Data, + In_Last => In_Last, + Out_Data => Out_Data, + Out_Last => Out_Last, + Flush => Flush); + else + Translate_Auto + (Filter => Filter, + In_Data => In_Data, + In_Last => In_Last, + Out_Data => Out_Data, + Out_Last => Out_Last, + Flush => Flush); + end if; + end Translate; + + -------------------- + -- Translate_Auto -- + -------------------- + + procedure Translate_Auto + (Filter : in out Filter_Type; + In_Data : in Ada.Streams.Stream_Element_Array; + In_Last : out Ada.Streams.Stream_Element_Offset; + Out_Data : out Ada.Streams.Stream_Element_Array; + Out_Last : out Ada.Streams.Stream_Element_Offset; + Flush : in Flush_Mode) + is + use type Thin.Int; + Code : Thin.Int; + + begin + if not Is_Open (Filter) then + raise Status_Error; + end if; + + if Out_Data'Length = 0 and then In_Data'Length = 0 then + raise Constraint_Error; + end if; + + Set_Out (Filter.Strm.all, Out_Data'Address, Out_Data'Length); + Set_In (Filter.Strm.all, In_Data'Address, In_Data'Length); + + Code := Flate (Filter.Compression).Step + (To_Thin_Access (Filter.Strm), + Thin.Int (Flush)); + + if Code = Thin.Z_STREAM_END then + Filter.Stream_End := True; + else + Check_Error (Filter.Strm.all, Code); + end if; + + In_Last := In_Data'Last + - Stream_Element_Offset (Avail_In (Filter.Strm.all)); + Out_Last := Out_Data'Last + - Stream_Element_Offset (Avail_Out (Filter.Strm.all)); + end Translate_Auto; + + -------------------- + -- Translate_GZip -- + -------------------- + + procedure Translate_GZip + (Filter : in out Filter_Type; + In_Data : in Ada.Streams.Stream_Element_Array; + In_Last : out Ada.Streams.Stream_Element_Offset; + Out_Data : out Ada.Streams.Stream_Element_Array; + Out_Last : out Ada.Streams.Stream_Element_Offset; + Flush : in Flush_Mode) + is + Out_First : Stream_Element_Offset; + + procedure Add_Data (Data : in Stream_Element_Array); + -- Add data to stream from the Filter.Offset till necessary, + -- used for add gzip headr/footer. + + procedure Put_32 + (Item : in out Stream_Element_Array; + Data : in Unsigned_32); + pragma Inline (Put_32); + + -------------- + -- Add_Data -- + -------------- + + procedure Add_Data (Data : in Stream_Element_Array) is + Data_First : Stream_Element_Offset renames Filter.Offset; + Data_Last : Stream_Element_Offset; + Data_Len : Stream_Element_Offset; -- -1 + Out_Len : Stream_Element_Offset; -- -1 + begin + Out_First := Out_Last + 1; + + if Data_First > Data'Last then + return; + end if; + + Data_Len := Data'Last - Data_First; + Out_Len := Out_Data'Last - Out_First; + + if Data_Len <= Out_Len then + Out_Last := Out_First + Data_Len; + Data_Last := Data'Last; + else + Out_Last := Out_Data'Last; + Data_Last := Data_First + Out_Len; + end if; + + Out_Data (Out_First .. Out_Last) := Data (Data_First .. Data_Last); + + Data_First := Data_Last + 1; + Out_First := Out_Last + 1; + end Add_Data; + + ------------ + -- Put_32 -- + ------------ + + procedure Put_32 + (Item : in out Stream_Element_Array; + Data : in Unsigned_32) + is + D : Unsigned_32 := Data; + begin + for J in Item'First .. Item'First + 3 loop + Item (J) := Stream_Element (D and 16#FF#); + D := Shift_Right (D, 8); + end loop; + end Put_32; + + begin + Out_Last := Out_Data'First - 1; + + if not Filter.Stream_End then + Add_Data (Simple_GZip_Header); + + Translate_Auto + (Filter => Filter, + In_Data => In_Data, + In_Last => In_Last, + Out_Data => Out_Data (Out_First .. Out_Data'Last), + Out_Last => Out_Last, + Flush => Flush); + + CRC32 (Filter.CRC, In_Data (In_Data'First .. In_Last)); + end if; + + if Filter.Stream_End and then Out_Last <= Out_Data'Last then + -- This detection method would work only when + -- Simple_GZip_Header'Last > Footer_Array'Last + + if Filter.Offset = Simple_GZip_Header'Last + 1 then + Filter.Offset := Footer_Array'First; + end if; + + declare + Footer : Footer_Array; + begin + Put_32 (Footer, Filter.CRC); + Put_32 (Footer (Footer'First + 4 .. Footer'Last), + Unsigned_32 (Total_In (Filter))); + Add_Data (Footer); + end; + end if; + end Translate_GZip; + + ------------- + -- Version -- + ------------- + + function Version return String is + begin + return Interfaces.C.Strings.Value (Thin.zlibVersion); + end Version; + + ----------- + -- Write -- + ----------- + + procedure Write + (Filter : in out Filter_Type; + Item : in Ada.Streams.Stream_Element_Array; + Flush : in Flush_Mode := No_Flush) + is + Buffer : Stream_Element_Array (1 .. Buffer_Size); + In_Last : Stream_Element_Offset; + Out_Last : Stream_Element_Offset; + In_First : Stream_Element_Offset := Item'First; + begin + if Item'Length = 0 and Flush = No_Flush then + return; + end if; + + loop + Translate + (Filter => Filter, + In_Data => Item (In_First .. Item'Last), + In_Last => In_Last, + Out_Data => Buffer, + Out_Last => Out_Last, + Flush => Flush); + + if Out_Last >= Buffer'First then + Write (Buffer (1 .. Out_Last)); + end if; + + exit when In_Last = Item'Last or Stream_End (Filter); + + In_First := In_Last + 1; + end loop; + end Write; + +end ZLib; diff --git a/thirdparty/zlib-1.3.1/contrib/ada/zlib.ads b/thirdparty/zlib-1.3.1/contrib/ada/zlib.ads new file mode 100644 index 0000000..81aaf1b --- /dev/null +++ b/thirdparty/zlib-1.3.1/contrib/ada/zlib.ads @@ -0,0 +1,328 @@ +------------------------------------------------------------------------------ +-- ZLib for Ada thick binding. -- +-- -- +-- Copyright (C) 2002-2004 Dmitriy Anisimkov -- +-- -- +-- This library is free software; you can redistribute it and/or modify -- +-- it under the terms of the GNU General Public License as published by -- +-- the Free Software Foundation; either version 2 of the License, or (at -- +-- your option) any later version. -- +-- -- +-- This library is distributed in the hope that it will be useful, but -- +-- WITHOUT ANY WARRANTY; without even the implied warranty of -- +-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -- +-- General Public License for more details. -- +-- -- +-- You should have received a copy of the GNU General Public License -- +-- along with this library; if not, write to the Free Software Foundation, -- +-- Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. -- +-- -- +-- As a special exception, if other files instantiate generics from this -- +-- unit, or you link this unit with other files to produce an executable, -- +-- this unit does not by itself cause the resulting executable to be -- +-- covered by the GNU General Public License. This exception does not -- +-- however invalidate any other reasons why the executable file might be -- +-- covered by the GNU Public License. -- +------------------------------------------------------------------------------ + +-- $Id: zlib.ads,v 1.26 2004/09/06 06:53:19 vagul Exp $ + +with Ada.Streams; + +with Interfaces; + +package ZLib is + + ZLib_Error : exception; + Status_Error : exception; + + type Compression_Level is new Integer range -1 .. 9; + + type Flush_Mode is private; + + type Compression_Method is private; + + type Window_Bits_Type is new Integer range 8 .. 15; + + type Memory_Level_Type is new Integer range 1 .. 9; + + type Unsigned_32 is new Interfaces.Unsigned_32; + + type Strategy_Type is private; + + type Header_Type is (None, Auto, Default, GZip); + -- Header type usage have a some limitation for inflate. + -- See comment for Inflate_Init. + + subtype Count is Ada.Streams.Stream_Element_Count; + + Default_Memory_Level : constant Memory_Level_Type := 8; + Default_Window_Bits : constant Window_Bits_Type := 15; + + ---------------------------------- + -- Compression method constants -- + ---------------------------------- + + Deflated : constant Compression_Method; + -- Only one method allowed in this ZLib version + + --------------------------------- + -- Compression level constants -- + --------------------------------- + + No_Compression : constant Compression_Level := 0; + Best_Speed : constant Compression_Level := 1; + Best_Compression : constant Compression_Level := 9; + Default_Compression : constant Compression_Level := -1; + + -------------------------- + -- Flush mode constants -- + -------------------------- + + No_Flush : constant Flush_Mode; + -- Regular way for compression, no flush + + Partial_Flush : constant Flush_Mode; + -- Will be removed, use Z_SYNC_FLUSH instead + + Sync_Flush : constant Flush_Mode; + -- All pending output is flushed to the output buffer and the output + -- is aligned on a byte boundary, so that the decompressor can get all + -- input data available so far. (In particular avail_in is zero after the + -- call if enough output space has been provided before the call.) + -- Flushing may degrade compression for some compression algorithms and so + -- it should be used only when necessary. + + Block_Flush : constant Flush_Mode; + -- Z_BLOCK requests that inflate() stop + -- if and when it get to the next deflate block boundary. When decoding the + -- zlib or gzip format, this will cause inflate() to return immediately + -- after the header and before the first block. When doing a raw inflate, + -- inflate() will go ahead and process the first block, and will return + -- when it gets to the end of that block, or when it runs out of data. + + Full_Flush : constant Flush_Mode; + -- All output is flushed as with SYNC_FLUSH, and the compression state + -- is reset so that decompression can restart from this point if previous + -- compressed data has been damaged or if random access is desired. Using + -- Full_Flush too often can seriously degrade the compression. + + Finish : constant Flush_Mode; + -- Just for tell the compressor that input data is complete. + + ------------------------------------ + -- Compression strategy constants -- + ------------------------------------ + + -- RLE strategy could be used only in version 1.2.0 and later. + + Filtered : constant Strategy_Type; + Huffman_Only : constant Strategy_Type; + RLE : constant Strategy_Type; + Default_Strategy : constant Strategy_Type; + + Default_Buffer_Size : constant := 4096; + + type Filter_Type is tagged limited private; + -- The filter is for compression and for decompression. + -- The usage of the type is depend of its initialization. + + function Version return String; + pragma Inline (Version); + -- Return string representation of the ZLib version. + + procedure Deflate_Init + (Filter : in out Filter_Type; + Level : in Compression_Level := Default_Compression; + Strategy : in Strategy_Type := Default_Strategy; + Method : in Compression_Method := Deflated; + Window_Bits : in Window_Bits_Type := Default_Window_Bits; + Memory_Level : in Memory_Level_Type := Default_Memory_Level; + Header : in Header_Type := Default); + -- Compressor initialization. + -- When Header parameter is Auto or Default, then default zlib header + -- would be provided for compressed data. + -- When Header is GZip, then gzip header would be set instead of + -- default header. + -- When Header is None, no header would be set for compressed data. + + procedure Inflate_Init + (Filter : in out Filter_Type; + Window_Bits : in Window_Bits_Type := Default_Window_Bits; + Header : in Header_Type := Default); + -- Decompressor initialization. + -- Default header type mean that ZLib default header is expecting in the + -- input compressed stream. + -- Header type None mean that no header is expecting in the input stream. + -- GZip header type mean that GZip header is expecting in the + -- input compressed stream. + -- Auto header type mean that header type (GZip or Native) would be + -- detected automatically in the input stream. + -- Note that header types parameter values None, GZip and Auto are + -- supported for inflate routine only in ZLib versions 1.2.0.2 and later. + -- Deflate_Init is supporting all header types. + + function Is_Open (Filter : in Filter_Type) return Boolean; + pragma Inline (Is_Open); + -- Is the filter opened for compression or decompression. + + procedure Close + (Filter : in out Filter_Type; + Ignore_Error : in Boolean := False); + -- Closing the compression or decompressor. + -- If stream is closing before the complete and Ignore_Error is False, + -- The exception would be raised. + + generic + with procedure Data_In + (Item : out Ada.Streams.Stream_Element_Array; + Last : out Ada.Streams.Stream_Element_Offset); + with procedure Data_Out + (Item : in Ada.Streams.Stream_Element_Array); + procedure Generic_Translate + (Filter : in out Filter_Type; + In_Buffer_Size : in Integer := Default_Buffer_Size; + Out_Buffer_Size : in Integer := Default_Buffer_Size); + -- Compress/decompress data fetch from Data_In routine and pass the result + -- to the Data_Out routine. User should provide Data_In and Data_Out + -- for compression/decompression data flow. + -- Compression or decompression depend on Filter initialization. + + function Total_In (Filter : in Filter_Type) return Count; + pragma Inline (Total_In); + -- Returns total number of input bytes read so far + + function Total_Out (Filter : in Filter_Type) return Count; + pragma Inline (Total_Out); + -- Returns total number of bytes output so far + + function CRC32 + (CRC : in Unsigned_32; + Data : in Ada.Streams.Stream_Element_Array) + return Unsigned_32; + pragma Inline (CRC32); + -- Compute CRC32, it could be necessary for make gzip format + + procedure CRC32 + (CRC : in out Unsigned_32; + Data : in Ada.Streams.Stream_Element_Array); + pragma Inline (CRC32); + -- Compute CRC32, it could be necessary for make gzip format + + ------------------------------------------------- + -- Below is more complex low level routines. -- + ------------------------------------------------- + + procedure Translate + (Filter : in out Filter_Type; + In_Data : in Ada.Streams.Stream_Element_Array; + In_Last : out Ada.Streams.Stream_Element_Offset; + Out_Data : out Ada.Streams.Stream_Element_Array; + Out_Last : out Ada.Streams.Stream_Element_Offset; + Flush : in Flush_Mode); + -- Compress/decompress the In_Data buffer and place the result into + -- Out_Data. In_Last is the index of last element from In_Data accepted by + -- the Filter. Out_Last is the last element of the received data from + -- Filter. To tell the filter that incoming data are complete put the + -- Flush parameter to Finish. + + function Stream_End (Filter : in Filter_Type) return Boolean; + pragma Inline (Stream_End); + -- Return the true when the stream is complete. + + procedure Flush + (Filter : in out Filter_Type; + Out_Data : out Ada.Streams.Stream_Element_Array; + Out_Last : out Ada.Streams.Stream_Element_Offset; + Flush : in Flush_Mode); + pragma Inline (Flush); + -- Flushing the data from the compressor. + + generic + with procedure Write + (Item : in Ada.Streams.Stream_Element_Array); + -- User should provide this routine for accept + -- compressed/decompressed data. + + Buffer_Size : in Ada.Streams.Stream_Element_Offset + := Default_Buffer_Size; + -- Buffer size for Write user routine. + + procedure Write + (Filter : in out Filter_Type; + Item : in Ada.Streams.Stream_Element_Array; + Flush : in Flush_Mode := No_Flush); + -- Compress/Decompress data from Item to the generic parameter procedure + -- Write. Output buffer size could be set in Buffer_Size generic parameter. + + generic + with procedure Read + (Item : out Ada.Streams.Stream_Element_Array; + Last : out Ada.Streams.Stream_Element_Offset); + -- User should provide data for compression/decompression + -- thru this routine. + + Buffer : in out Ada.Streams.Stream_Element_Array; + -- Buffer for keep remaining data from the previous + -- back read. + + Rest_First, Rest_Last : in out Ada.Streams.Stream_Element_Offset; + -- Rest_First have to be initialized to Buffer'Last + 1 + -- Rest_Last have to be initialized to Buffer'Last + -- before usage. + + Allow_Read_Some : in Boolean := False; + -- Is it allowed to return Last < Item'Last before end of data. + + procedure Read + (Filter : in out Filter_Type; + Item : out Ada.Streams.Stream_Element_Array; + Last : out Ada.Streams.Stream_Element_Offset; + Flush : in Flush_Mode := No_Flush); + -- Compress/Decompress data from generic parameter procedure Read to the + -- Item. User should provide Buffer and initialized Rest_First, Rest_Last + -- indicators. If Allow_Read_Some is True, Read routines could return + -- Last < Item'Last only at end of stream. + +private + + use Ada.Streams; + + pragma Assert (Ada.Streams.Stream_Element'Size = 8); + pragma Assert (Ada.Streams.Stream_Element'Modulus = 2**8); + + type Flush_Mode is new Integer range 0 .. 5; + + type Compression_Method is new Integer range 8 .. 8; + + type Strategy_Type is new Integer range 0 .. 3; + + No_Flush : constant Flush_Mode := 0; + Partial_Flush : constant Flush_Mode := 1; + Sync_Flush : constant Flush_Mode := 2; + Full_Flush : constant Flush_Mode := 3; + Finish : constant Flush_Mode := 4; + Block_Flush : constant Flush_Mode := 5; + + Filtered : constant Strategy_Type := 1; + Huffman_Only : constant Strategy_Type := 2; + RLE : constant Strategy_Type := 3; + Default_Strategy : constant Strategy_Type := 0; + + Deflated : constant Compression_Method := 8; + + type Z_Stream; + + type Z_Stream_Access is access all Z_Stream; + + type Filter_Type is tagged limited record + Strm : Z_Stream_Access; + Compression : Boolean; + Stream_End : Boolean; + Header : Header_Type; + CRC : Unsigned_32; + Offset : Stream_Element_Offset; + -- Offset for gzip header/footer output. + end record; + +end ZLib; diff --git a/thirdparty/zlib-1.3.1/contrib/ada/zlib.gpr b/thirdparty/zlib-1.3.1/contrib/ada/zlib.gpr new file mode 100644 index 0000000..296b22a --- /dev/null +++ b/thirdparty/zlib-1.3.1/contrib/ada/zlib.gpr @@ -0,0 +1,20 @@ +project Zlib is + + for Languages use ("Ada"); + for Source_Dirs use ("."); + for Object_Dir use "."; + for Main use ("test.adb", "mtest.adb", "read.adb", "buffer_demo"); + + package Compiler is + for Default_Switches ("ada") use ("-gnatwcfilopru", "-gnatVcdfimorst", "-gnatyabcefhiklmnoprst"); + end Compiler; + + package Linker is + for Default_Switches ("ada") use ("-lz"); + end Linker; + + package Builder is + for Default_Switches ("ada") use ("-s", "-gnatQ"); + end Builder; + +end Zlib; diff --git a/thirdparty/zlib-1.3.1/contrib/blast/Makefile b/thirdparty/zlib-1.3.1/contrib/blast/Makefile new file mode 100644 index 0000000..9be80ba --- /dev/null +++ b/thirdparty/zlib-1.3.1/contrib/blast/Makefile @@ -0,0 +1,8 @@ +blast: blast.c blast.h + cc -DTEST -o blast blast.c + +test: blast + blast < test.pk | cmp - test.txt + +clean: + rm -f blast blast.o diff --git a/thirdparty/zlib-1.3.1/contrib/blast/README b/thirdparty/zlib-1.3.1/contrib/blast/README new file mode 100644 index 0000000..e3a60b3 --- /dev/null +++ b/thirdparty/zlib-1.3.1/contrib/blast/README @@ -0,0 +1,4 @@ +Read blast.h for purpose and usage. + +Mark Adler +madler@alumni.caltech.edu diff --git a/thirdparty/zlib-1.3.1/contrib/blast/blast.c b/thirdparty/zlib-1.3.1/contrib/blast/blast.c new file mode 100644 index 0000000..e6e6590 --- /dev/null +++ b/thirdparty/zlib-1.3.1/contrib/blast/blast.c @@ -0,0 +1,466 @@ +/* blast.c + * Copyright (C) 2003, 2012, 2013 Mark Adler + * For conditions of distribution and use, see copyright notice in blast.h + * version 1.3, 24 Aug 2013 + * + * blast.c decompresses data compressed by the PKWare Compression Library. + * This function provides functionality similar to the explode() function of + * the PKWare library, hence the name "blast". + * + * This decompressor is based on the excellent format description provided by + * Ben Rudiak-Gould in comp.compression on August 13, 2001. Interestingly, the + * example Ben provided in the post is incorrect. The distance 110001 should + * instead be 111000. When corrected, the example byte stream becomes: + * + * 00 04 82 24 25 8f 80 7f + * + * which decompresses to "AIAIAIAIAIAIA" (without the quotes). + */ + +/* + * Change history: + * + * 1.0 12 Feb 2003 - First version + * 1.1 16 Feb 2003 - Fixed distance check for > 4 GB uncompressed data + * 1.2 24 Oct 2012 - Add note about using binary mode in stdio + * - Fix comparisons of differently signed integers + * 1.3 24 Aug 2013 - Return unused input from blast() + * - Fix test code to correctly report unused input + * - Enable the provision of initial input to blast() + */ + +#include /* for NULL */ +#include /* for setjmp(), longjmp(), and jmp_buf */ +#include "blast.h" /* prototype for blast() */ + +#define local static /* for local function definitions */ +#define MAXBITS 13 /* maximum code length */ +#define MAXWIN 4096 /* maximum window size */ + +/* input and output state */ +struct state { + /* input state */ + blast_in infun; /* input function provided by user */ + void *inhow; /* opaque information passed to infun() */ + unsigned char *in; /* next input location */ + unsigned left; /* available input at in */ + int bitbuf; /* bit buffer */ + int bitcnt; /* number of bits in bit buffer */ + + /* input limit error return state for bits() and decode() */ + jmp_buf env; + + /* output state */ + blast_out outfun; /* output function provided by user */ + void *outhow; /* opaque information passed to outfun() */ + unsigned next; /* index of next write location in out[] */ + int first; /* true to check distances (for first 4K) */ + unsigned char out[MAXWIN]; /* output buffer and sliding window */ +}; + +/* + * Return need bits from the input stream. This always leaves less than + * eight bits in the buffer. bits() works properly for need == 0. + * + * Format notes: + * + * - Bits are stored in bytes from the least significant bit to the most + * significant bit. Therefore bits are dropped from the bottom of the bit + * buffer, using shift right, and new bytes are appended to the top of the + * bit buffer, using shift left. + */ +local int bits(struct state *s, int need) +{ + int val; /* bit accumulator */ + + /* load at least need bits into val */ + val = s->bitbuf; + while (s->bitcnt < need) { + if (s->left == 0) { + s->left = s->infun(s->inhow, &(s->in)); + if (s->left == 0) longjmp(s->env, 1); /* out of input */ + } + val |= (int)(*(s->in)++) << s->bitcnt; /* load eight bits */ + s->left--; + s->bitcnt += 8; + } + + /* drop need bits and update buffer, always zero to seven bits left */ + s->bitbuf = val >> need; + s->bitcnt -= need; + + /* return need bits, zeroing the bits above that */ + return val & ((1 << need) - 1); +} + +/* + * Huffman code decoding tables. count[1..MAXBITS] is the number of symbols of + * each length, which for a canonical code are stepped through in order. + * symbol[] are the symbol values in canonical order, where the number of + * entries is the sum of the counts in count[]. The decoding process can be + * seen in the function decode() below. + */ +struct huffman { + short *count; /* number of symbols of each length */ + short *symbol; /* canonically ordered symbols */ +}; + +/* + * Decode a code from the stream s using huffman table h. Return the symbol or + * a negative value if there is an error. If all of the lengths are zero, i.e. + * an empty code, or if the code is incomplete and an invalid code is received, + * then -9 is returned after reading MAXBITS bits. + * + * Format notes: + * + * - The codes as stored in the compressed data are bit-reversed relative to + * a simple integer ordering of codes of the same lengths. Hence below the + * bits are pulled from the compressed data one at a time and used to + * build the code value reversed from what is in the stream in order to + * permit simple integer comparisons for decoding. + * + * - The first code for the shortest length is all ones. Subsequent codes of + * the same length are simply integer decrements of the previous code. When + * moving up a length, a one bit is appended to the code. For a complete + * code, the last code of the longest length will be all zeros. To support + * this ordering, the bits pulled during decoding are inverted to apply the + * more "natural" ordering starting with all zeros and incrementing. + */ +local int decode(struct state *s, struct huffman *h) +{ + int len; /* current number of bits in code */ + int code; /* len bits being decoded */ + int first; /* first code of length len */ + int count; /* number of codes of length len */ + int index; /* index of first code of length len in symbol table */ + int bitbuf; /* bits from stream */ + int left; /* bits left in next or left to process */ + short *next; /* next number of codes */ + + bitbuf = s->bitbuf; + left = s->bitcnt; + code = first = index = 0; + len = 1; + next = h->count + 1; + while (1) { + while (left--) { + code |= (bitbuf & 1) ^ 1; /* invert code */ + bitbuf >>= 1; + count = *next++; + if (code < first + count) { /* if length len, return symbol */ + s->bitbuf = bitbuf; + s->bitcnt = (s->bitcnt - len) & 7; + return h->symbol[index + (code - first)]; + } + index += count; /* else update for next length */ + first += count; + first <<= 1; + code <<= 1; + len++; + } + left = (MAXBITS+1) - len; + if (left == 0) break; + if (s->left == 0) { + s->left = s->infun(s->inhow, &(s->in)); + if (s->left == 0) longjmp(s->env, 1); /* out of input */ + } + bitbuf = *(s->in)++; + s->left--; + if (left > 8) left = 8; + } + return -9; /* ran out of codes */ +} + +/* + * Given a list of repeated code lengths rep[0..n-1], where each byte is a + * count (high four bits + 1) and a code length (low four bits), generate the + * list of code lengths. This compaction reduces the size of the object code. + * Then given the list of code lengths length[0..n-1] representing a canonical + * Huffman code for n symbols, construct the tables required to decode those + * codes. Those tables are the number of codes of each length, and the symbols + * sorted by length, retaining their original order within each length. The + * return value is zero for a complete code set, negative for an over- + * subscribed code set, and positive for an incomplete code set. The tables + * can be used if the return value is zero or positive, but they cannot be used + * if the return value is negative. If the return value is zero, it is not + * possible for decode() using that table to return an error--any stream of + * enough bits will resolve to a symbol. If the return value is positive, then + * it is possible for decode() using that table to return an error for received + * codes past the end of the incomplete lengths. + */ +local int construct(struct huffman *h, const unsigned char *rep, int n) +{ + int symbol; /* current symbol when stepping through length[] */ + int len; /* current length when stepping through h->count[] */ + int left; /* number of possible codes left of current length */ + short offs[MAXBITS+1]; /* offsets in symbol table for each length */ + short length[256]; /* code lengths */ + + /* convert compact repeat counts into symbol bit length list */ + symbol = 0; + do { + len = *rep++; + left = (len >> 4) + 1; + len &= 15; + do { + length[symbol++] = len; + } while (--left); + } while (--n); + n = symbol; + + /* count number of codes of each length */ + for (len = 0; len <= MAXBITS; len++) + h->count[len] = 0; + for (symbol = 0; symbol < n; symbol++) + (h->count[length[symbol]])++; /* assumes lengths are within bounds */ + if (h->count[0] == n) /* no codes! */ + return 0; /* complete, but decode() will fail */ + + /* check for an over-subscribed or incomplete set of lengths */ + left = 1; /* one possible code of zero length */ + for (len = 1; len <= MAXBITS; len++) { + left <<= 1; /* one more bit, double codes left */ + left -= h->count[len]; /* deduct count from possible codes */ + if (left < 0) return left; /* over-subscribed--return negative */ + } /* left > 0 means incomplete */ + + /* generate offsets into symbol table for each length for sorting */ + offs[1] = 0; + for (len = 1; len < MAXBITS; len++) + offs[len + 1] = offs[len] + h->count[len]; + + /* + * put symbols in table sorted by length, by symbol order within each + * length + */ + for (symbol = 0; symbol < n; symbol++) + if (length[symbol] != 0) + h->symbol[offs[length[symbol]]++] = symbol; + + /* return zero for complete set, positive for incomplete set */ + return left; +} + +/* + * Decode PKWare Compression Library stream. + * + * Format notes: + * + * - First byte is 0 if literals are uncoded or 1 if they are coded. Second + * byte is 4, 5, or 6 for the number of extra bits in the distance code. + * This is the base-2 logarithm of the dictionary size minus six. + * + * - Compressed data is a combination of literals and length/distance pairs + * terminated by an end code. Literals are either Huffman coded or + * uncoded bytes. A length/distance pair is a coded length followed by a + * coded distance to represent a string that occurs earlier in the + * uncompressed data that occurs again at the current location. + * + * - A bit preceding a literal or length/distance pair indicates which comes + * next, 0 for literals, 1 for length/distance. + * + * - If literals are uncoded, then the next eight bits are the literal, in the + * normal bit order in the stream, i.e. no bit-reversal is needed. Similarly, + * no bit reversal is needed for either the length extra bits or the distance + * extra bits. + * + * - Literal bytes are simply written to the output. A length/distance pair is + * an instruction to copy previously uncompressed bytes to the output. The + * copy is from distance bytes back in the output stream, copying for length + * bytes. + * + * - Distances pointing before the beginning of the output data are not + * permitted. + * + * - Overlapped copies, where the length is greater than the distance, are + * allowed and common. For example, a distance of one and a length of 518 + * simply copies the last byte 518 times. A distance of four and a length of + * twelve copies the last four bytes three times. A simple forward copy + * ignoring whether the length is greater than the distance or not implements + * this correctly. + */ +local int decomp(struct state *s) +{ + int lit; /* true if literals are coded */ + int dict; /* log2(dictionary size) - 6 */ + int symbol; /* decoded symbol, extra bits for distance */ + int len; /* length for copy */ + unsigned dist; /* distance for copy */ + int copy; /* copy counter */ + unsigned char *from, *to; /* copy pointers */ + static int virgin = 1; /* build tables once */ + static short litcnt[MAXBITS+1], litsym[256]; /* litcode memory */ + static short lencnt[MAXBITS+1], lensym[16]; /* lencode memory */ + static short distcnt[MAXBITS+1], distsym[64]; /* distcode memory */ + static struct huffman litcode = {litcnt, litsym}; /* length code */ + static struct huffman lencode = {lencnt, lensym}; /* length code */ + static struct huffman distcode = {distcnt, distsym};/* distance code */ + /* bit lengths of literal codes */ + static const unsigned char litlen[] = { + 11, 124, 8, 7, 28, 7, 188, 13, 76, 4, 10, 8, 12, 10, 12, 10, 8, 23, 8, + 9, 7, 6, 7, 8, 7, 6, 55, 8, 23, 24, 12, 11, 7, 9, 11, 12, 6, 7, 22, 5, + 7, 24, 6, 11, 9, 6, 7, 22, 7, 11, 38, 7, 9, 8, 25, 11, 8, 11, 9, 12, + 8, 12, 5, 38, 5, 38, 5, 11, 7, 5, 6, 21, 6, 10, 53, 8, 7, 24, 10, 27, + 44, 253, 253, 253, 252, 252, 252, 13, 12, 45, 12, 45, 12, 61, 12, 45, + 44, 173}; + /* bit lengths of length codes 0..15 */ + static const unsigned char lenlen[] = {2, 35, 36, 53, 38, 23}; + /* bit lengths of distance codes 0..63 */ + static const unsigned char distlen[] = {2, 20, 53, 230, 247, 151, 248}; + static const short base[16] = { /* base for length codes */ + 3, 2, 4, 5, 6, 7, 8, 9, 10, 12, 16, 24, 40, 72, 136, 264}; + static const char extra[16] = { /* extra bits for length codes */ + 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 5, 6, 7, 8}; + + /* set up decoding tables (once--might not be thread-safe) */ + if (virgin) { + construct(&litcode, litlen, sizeof(litlen)); + construct(&lencode, lenlen, sizeof(lenlen)); + construct(&distcode, distlen, sizeof(distlen)); + virgin = 0; + } + + /* read header */ + lit = bits(s, 8); + if (lit > 1) return -1; + dict = bits(s, 8); + if (dict < 4 || dict > 6) return -2; + + /* decode literals and length/distance pairs */ + do { + if (bits(s, 1)) { + /* get length */ + symbol = decode(s, &lencode); + len = base[symbol] + bits(s, extra[symbol]); + if (len == 519) break; /* end code */ + + /* get distance */ + symbol = len == 2 ? 2 : dict; + dist = decode(s, &distcode) << symbol; + dist += bits(s, symbol); + dist++; + if (s->first && dist > s->next) + return -3; /* distance too far back */ + + /* copy length bytes from distance bytes back */ + do { + to = s->out + s->next; + from = to - dist; + copy = MAXWIN; + if (s->next < dist) { + from += copy; + copy = dist; + } + copy -= s->next; + if (copy > len) copy = len; + len -= copy; + s->next += copy; + do { + *to++ = *from++; + } while (--copy); + if (s->next == MAXWIN) { + if (s->outfun(s->outhow, s->out, s->next)) return 1; + s->next = 0; + s->first = 0; + } + } while (len != 0); + } + else { + /* get literal and write it */ + symbol = lit ? decode(s, &litcode) : bits(s, 8); + s->out[s->next++] = symbol; + if (s->next == MAXWIN) { + if (s->outfun(s->outhow, s->out, s->next)) return 1; + s->next = 0; + s->first = 0; + } + } + } while (1); + return 0; +} + +/* See comments in blast.h */ +int blast(blast_in infun, void *inhow, blast_out outfun, void *outhow, + unsigned *left, unsigned char **in) +{ + struct state s; /* input/output state */ + int err; /* return value */ + + /* initialize input state */ + s.infun = infun; + s.inhow = inhow; + if (left != NULL && *left) { + s.left = *left; + s.in = *in; + } + else + s.left = 0; + s.bitbuf = 0; + s.bitcnt = 0; + + /* initialize output state */ + s.outfun = outfun; + s.outhow = outhow; + s.next = 0; + s.first = 1; + + /* return if bits() or decode() tries to read past available input */ + if (setjmp(s.env) != 0) /* if came back here via longjmp(), */ + err = 2; /* then skip decomp(), return error */ + else + err = decomp(&s); /* decompress */ + + /* return unused input */ + if (left != NULL) + *left = s.left; + if (in != NULL) + *in = s.left ? s.in : NULL; + + /* write any leftover output and update the error code if needed */ + if (err != 1 && s.next && s.outfun(s.outhow, s.out, s.next) && err == 0) + err = 1; + return err; +} + +#ifdef TEST +/* Example of how to use blast() */ +#include +#include + +#define CHUNK 16384 + +local unsigned inf(void *how, unsigned char **buf) +{ + static unsigned char hold[CHUNK]; + + *buf = hold; + return fread(hold, 1, CHUNK, (FILE *)how); +} + +local int outf(void *how, unsigned char *buf, unsigned len) +{ + return fwrite(buf, 1, len, (FILE *)how) != len; +} + +/* Decompress a PKWare Compression Library stream from stdin to stdout */ +int main(void) +{ + int ret; + unsigned left; + + /* decompress to stdout */ + left = 0; + ret = blast(inf, stdin, outf, stdout, &left, NULL); + if (ret != 0) + fprintf(stderr, "blast error: %d\n", ret); + + /* count any leftover bytes */ + while (getchar() != EOF) + left++; + if (left) + fprintf(stderr, "blast warning: %u unused bytes of input\n", left); + + /* return blast() error code */ + return ret; +} +#endif diff --git a/thirdparty/zlib-1.3.1/contrib/blast/blast.h b/thirdparty/zlib-1.3.1/contrib/blast/blast.h new file mode 100644 index 0000000..ef8544c --- /dev/null +++ b/thirdparty/zlib-1.3.1/contrib/blast/blast.h @@ -0,0 +1,83 @@ +/* blast.h -- interface for blast.c + Copyright (C) 2003, 2012, 2013 Mark Adler + version 1.3, 24 Aug 2013 + + This software is provided 'as-is', without any express or implied + warranty. In no event will the author be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. + + Mark Adler madler@alumni.caltech.edu + */ + + +/* + * blast() decompresses the PKWare Data Compression Library (DCL) compressed + * format. It provides the same functionality as the explode() function in + * that library. (Note: PKWare overused the "implode" verb, and the format + * used by their library implode() function is completely different and + * incompatible with the implode compression method supported by PKZIP.) + * + * The binary mode for stdio functions should be used to assure that the + * compressed data is not corrupted when read or written. For example: + * fopen(..., "rb") and fopen(..., "wb"). + */ + + +typedef unsigned (*blast_in)(void *how, unsigned char **buf); +typedef int (*blast_out)(void *how, unsigned char *buf, unsigned len); +/* Definitions for input/output functions passed to blast(). See below for + * what the provided functions need to do. + */ + + +int blast(blast_in infun, void *inhow, blast_out outfun, void *outhow, + unsigned *left, unsigned char **in); +/* Decompress input to output using the provided infun() and outfun() calls. + * On success, the return value of blast() is zero. If there is an error in + * the source data, i.e. it is not in the proper format, then a negative value + * is returned. If there is not enough input available or there is not enough + * output space, then a positive error is returned. + * + * The input function is invoked: len = infun(how, &buf), where buf is set by + * infun() to point to the input buffer, and infun() returns the number of + * available bytes there. If infun() returns zero, then blast() returns with + * an input error. (blast() only asks for input if it needs it.) inhow is for + * use by the application to pass an input descriptor to infun(), if desired. + * + * If left and in are not NULL and *left is not zero when blast() is called, + * then the *left bytes at *in are consumed for input before infun() is used. + * + * The output function is invoked: err = outfun(how, buf, len), where the bytes + * to be written are buf[0..len-1]. If err is not zero, then blast() returns + * with an output error. outfun() is always called with len <= 4096. outhow + * is for use by the application to pass an output descriptor to outfun(), if + * desired. + * + * If there is any unused input, *left is set to the number of bytes that were + * read and *in points to them. Otherwise *left is set to zero and *in is set + * to NULL. If left or in are NULL, then they are not set. + * + * The return codes are: + * + * 2: ran out of input before completing decompression + * 1: output error before completing decompression + * 0: successful decompression + * -1: literal flag not zero or one + * -2: dictionary size not in 4..6 + * -3: distance is too far back + * + * At the bottom of blast.c is an example program that uses blast() that can be + * compiled to produce a command-line decompression filter by defining TEST. + */ diff --git a/thirdparty/zlib-1.3.1/contrib/blast/test.pk b/thirdparty/zlib-1.3.1/contrib/blast/test.pk new file mode 100644 index 0000000000000000000000000000000000000000..be10b2bbb251759ffdf6da49fadd1a3f137a54c1 GIT binary patch literal 8 PcmZQzX;M+`Z>R?V2c!aC literal 0 HcmV?d00001 diff --git a/thirdparty/zlib-1.3.1/contrib/blast/test.txt b/thirdparty/zlib-1.3.1/contrib/blast/test.txt new file mode 100644 index 0000000..bfdf1c5 --- /dev/null +++ b/thirdparty/zlib-1.3.1/contrib/blast/test.txt @@ -0,0 +1 @@ +AIAIAIAIAIAIA \ No newline at end of file diff --git a/thirdparty/zlib-1.3.1/contrib/delphi/ZLib.pas b/thirdparty/zlib-1.3.1/contrib/delphi/ZLib.pas new file mode 100644 index 0000000..93fa4c9 --- /dev/null +++ b/thirdparty/zlib-1.3.1/contrib/delphi/ZLib.pas @@ -0,0 +1,557 @@ +{*******************************************************} +{ } +{ Borland Delphi Supplemental Components } +{ ZLIB Data Compression Interface Unit } +{ } +{ Copyright (c) 1997,99 Borland Corporation } +{ } +{*******************************************************} + +{ Updated for zlib 1.2.x by Cosmin Truta } + +unit ZLib; + +interface + +uses SysUtils, Classes; + +type + TAlloc = function (AppData: Pointer; Items, Size: Integer): Pointer; cdecl; + TFree = procedure (AppData, Block: Pointer); cdecl; + + // Internal structure. Ignore. + TZStreamRec = packed record + next_in: PChar; // next input byte + avail_in: Integer; // number of bytes available at next_in + total_in: Longint; // total nb of input bytes read so far + + next_out: PChar; // next output byte should be put here + avail_out: Integer; // remaining free space at next_out + total_out: Longint; // total nb of bytes output so far + + msg: PChar; // last error message, NULL if no error + internal: Pointer; // not visible by applications + + zalloc: TAlloc; // used to allocate the internal state + zfree: TFree; // used to free the internal state + AppData: Pointer; // private data object passed to zalloc and zfree + + data_type: Integer; // best guess about the data type: ascii or binary + adler: Longint; // adler32 value of the uncompressed data + reserved: Longint; // reserved for future use + end; + + // Abstract ancestor class + TCustomZlibStream = class(TStream) + private + FStrm: TStream; + FStrmPos: Integer; + FOnProgress: TNotifyEvent; + FZRec: TZStreamRec; + FBuffer: array [Word] of Char; + protected + procedure Progress(Sender: TObject); dynamic; + property OnProgress: TNotifyEvent read FOnProgress write FOnProgress; + constructor Create(Strm: TStream); + end; + +{ TCompressionStream compresses data on the fly as data is written to it, and + stores the compressed data to another stream. + + TCompressionStream is write-only and strictly sequential. Reading from the + stream will raise an exception. Using Seek to move the stream pointer + will raise an exception. + + Output data is cached internally, written to the output stream only when + the internal output buffer is full. All pending output data is flushed + when the stream is destroyed. + + The Position property returns the number of uncompressed bytes of + data that have been written to the stream so far. + + CompressionRate returns the on-the-fly percentage by which the original + data has been compressed: (1 - (CompressedBytes / UncompressedBytes)) * 100 + If raw data size = 100 and compressed data size = 25, the CompressionRate + is 75% + + The OnProgress event is called each time the output buffer is filled and + written to the output stream. This is useful for updating a progress + indicator when you are writing a large chunk of data to the compression + stream in a single call.} + + + TCompressionLevel = (clNone, clFastest, clDefault, clMax); + + TCompressionStream = class(TCustomZlibStream) + private + function GetCompressionRate: Single; + public + constructor Create(CompressionLevel: TCompressionLevel; Dest: TStream); + destructor Destroy; override; + function Read(var Buffer; Count: Longint): Longint; override; + function Write(const Buffer; Count: Longint): Longint; override; + function Seek(Offset: Longint; Origin: Word): Longint; override; + property CompressionRate: Single read GetCompressionRate; + property OnProgress; + end; + +{ TDecompressionStream decompresses data on the fly as data is read from it. + + Compressed data comes from a separate source stream. TDecompressionStream + is read-only and unidirectional; you can seek forward in the stream, but not + backwards. The special case of setting the stream position to zero is + allowed. Seeking forward decompresses data until the requested position in + the uncompressed data has been reached. Seeking backwards, seeking relative + to the end of the stream, requesting the size of the stream, and writing to + the stream will raise an exception. + + The Position property returns the number of bytes of uncompressed data that + have been read from the stream so far. + + The OnProgress event is called each time the internal input buffer of + compressed data is exhausted and the next block is read from the input stream. + This is useful for updating a progress indicator when you are reading a + large chunk of data from the decompression stream in a single call.} + + TDecompressionStream = class(TCustomZlibStream) + public + constructor Create(Source: TStream); + destructor Destroy; override; + function Read(var Buffer; Count: Longint): Longint; override; + function Write(const Buffer; Count: Longint): Longint; override; + function Seek(Offset: Longint; Origin: Word): Longint; override; + property OnProgress; + end; + + + +{ CompressBuf compresses data, buffer to buffer, in one call. + In: InBuf = ptr to compressed data + InBytes = number of bytes in InBuf + Out: OutBuf = ptr to newly allocated buffer containing decompressed data + OutBytes = number of bytes in OutBuf } +procedure CompressBuf(const InBuf: Pointer; InBytes: Integer; + out OutBuf: Pointer; out OutBytes: Integer); + + +{ DecompressBuf decompresses data, buffer to buffer, in one call. + In: InBuf = ptr to compressed data + InBytes = number of bytes in InBuf + OutEstimate = zero, or est. size of the decompressed data + Out: OutBuf = ptr to newly allocated buffer containing decompressed data + OutBytes = number of bytes in OutBuf } +procedure DecompressBuf(const InBuf: Pointer; InBytes: Integer; + OutEstimate: Integer; out OutBuf: Pointer; out OutBytes: Integer); + +{ DecompressToUserBuf decompresses data, buffer to buffer, in one call. + In: InBuf = ptr to compressed data + InBytes = number of bytes in InBuf + Out: OutBuf = ptr to user-allocated buffer to contain decompressed data + BufSize = number of bytes in OutBuf } +procedure DecompressToUserBuf(const InBuf: Pointer; InBytes: Integer; + const OutBuf: Pointer; BufSize: Integer); + +const + zlib_version = '1.3.1'; + +type + EZlibError = class(Exception); + ECompressionError = class(EZlibError); + EDecompressionError = class(EZlibError); + +implementation + +uses ZLibConst; + +const + Z_NO_FLUSH = 0; + Z_PARTIAL_FLUSH = 1; + Z_SYNC_FLUSH = 2; + Z_FULL_FLUSH = 3; + Z_FINISH = 4; + + Z_OK = 0; + Z_STREAM_END = 1; + Z_NEED_DICT = 2; + Z_ERRNO = (-1); + Z_STREAM_ERROR = (-2); + Z_DATA_ERROR = (-3); + Z_MEM_ERROR = (-4); + Z_BUF_ERROR = (-5); + Z_VERSION_ERROR = (-6); + + Z_NO_COMPRESSION = 0; + Z_BEST_SPEED = 1; + Z_BEST_COMPRESSION = 9; + Z_DEFAULT_COMPRESSION = (-1); + + Z_FILTERED = 1; + Z_HUFFMAN_ONLY = 2; + Z_RLE = 3; + Z_DEFAULT_STRATEGY = 0; + + Z_BINARY = 0; + Z_ASCII = 1; + Z_UNKNOWN = 2; + + Z_DEFLATED = 8; + + +{$L adler32.obj} +{$L compress.obj} +{$L crc32.obj} +{$L deflate.obj} +{$L infback.obj} +{$L inffast.obj} +{$L inflate.obj} +{$L inftrees.obj} +{$L trees.obj} +{$L uncompr.obj} +{$L zutil.obj} + +procedure adler32; external; +procedure compressBound; external; +procedure crc32; external; +procedure deflateInit2_; external; +procedure deflateParams; external; + +function _malloc(Size: Integer): Pointer; cdecl; +begin + Result := AllocMem(Size); +end; + +procedure _free(Block: Pointer); cdecl; +begin + FreeMem(Block); +end; + +procedure _memset(P: Pointer; B: Byte; count: Integer); cdecl; +begin + FillChar(P^, count, B); +end; + +procedure _memcpy(dest, source: Pointer; count: Integer); cdecl; +begin + Move(source^, dest^, count); +end; + + + +// deflate compresses data +function deflateInit_(var strm: TZStreamRec; level: Integer; version: PChar; + recsize: Integer): Integer; external; +function deflate(var strm: TZStreamRec; flush: Integer): Integer; external; +function deflateEnd(var strm: TZStreamRec): Integer; external; + +// inflate decompresses data +function inflateInit_(var strm: TZStreamRec; version: PChar; + recsize: Integer): Integer; external; +function inflate(var strm: TZStreamRec; flush: Integer): Integer; external; +function inflateEnd(var strm: TZStreamRec): Integer; external; +function inflateReset(var strm: TZStreamRec): Integer; external; + + +function zlibAllocMem(AppData: Pointer; Items, Size: Integer): Pointer; cdecl; +begin +// GetMem(Result, Items*Size); + Result := AllocMem(Items * Size); +end; + +procedure zlibFreeMem(AppData, Block: Pointer); cdecl; +begin + FreeMem(Block); +end; + +{function zlibCheck(code: Integer): Integer; +begin + Result := code; + if code < 0 then + raise EZlibError.Create('error'); //!! +end;} + +function CCheck(code: Integer): Integer; +begin + Result := code; + if code < 0 then + raise ECompressionError.Create('error'); //!! +end; + +function DCheck(code: Integer): Integer; +begin + Result := code; + if code < 0 then + raise EDecompressionError.Create('error'); //!! +end; + +procedure CompressBuf(const InBuf: Pointer; InBytes: Integer; + out OutBuf: Pointer; out OutBytes: Integer); +var + strm: TZStreamRec; + P: Pointer; +begin + FillChar(strm, sizeof(strm), 0); + strm.zalloc := zlibAllocMem; + strm.zfree := zlibFreeMem; + OutBytes := ((InBytes + (InBytes div 10) + 12) + 255) and not 255; + GetMem(OutBuf, OutBytes); + try + strm.next_in := InBuf; + strm.avail_in := InBytes; + strm.next_out := OutBuf; + strm.avail_out := OutBytes; + CCheck(deflateInit_(strm, Z_BEST_COMPRESSION, zlib_version, sizeof(strm))); + try + while CCheck(deflate(strm, Z_FINISH)) <> Z_STREAM_END do + begin + P := OutBuf; + Inc(OutBytes, 256); + ReallocMem(OutBuf, OutBytes); + strm.next_out := PChar(Integer(OutBuf) + (Integer(strm.next_out) - Integer(P))); + strm.avail_out := 256; + end; + finally + CCheck(deflateEnd(strm)); + end; + ReallocMem(OutBuf, strm.total_out); + OutBytes := strm.total_out; + except + FreeMem(OutBuf); + raise + end; +end; + + +procedure DecompressBuf(const InBuf: Pointer; InBytes: Integer; + OutEstimate: Integer; out OutBuf: Pointer; out OutBytes: Integer); +var + strm: TZStreamRec; + P: Pointer; + BufInc: Integer; +begin + FillChar(strm, sizeof(strm), 0); + strm.zalloc := zlibAllocMem; + strm.zfree := zlibFreeMem; + BufInc := (InBytes + 255) and not 255; + if OutEstimate = 0 then + OutBytes := BufInc + else + OutBytes := OutEstimate; + GetMem(OutBuf, OutBytes); + try + strm.next_in := InBuf; + strm.avail_in := InBytes; + strm.next_out := OutBuf; + strm.avail_out := OutBytes; + DCheck(inflateInit_(strm, zlib_version, sizeof(strm))); + try + while DCheck(inflate(strm, Z_NO_FLUSH)) <> Z_STREAM_END do + begin + P := OutBuf; + Inc(OutBytes, BufInc); + ReallocMem(OutBuf, OutBytes); + strm.next_out := PChar(Integer(OutBuf) + (Integer(strm.next_out) - Integer(P))); + strm.avail_out := BufInc; + end; + finally + DCheck(inflateEnd(strm)); + end; + ReallocMem(OutBuf, strm.total_out); + OutBytes := strm.total_out; + except + FreeMem(OutBuf); + raise + end; +end; + +procedure DecompressToUserBuf(const InBuf: Pointer; InBytes: Integer; + const OutBuf: Pointer; BufSize: Integer); +var + strm: TZStreamRec; +begin + FillChar(strm, sizeof(strm), 0); + strm.zalloc := zlibAllocMem; + strm.zfree := zlibFreeMem; + strm.next_in := InBuf; + strm.avail_in := InBytes; + strm.next_out := OutBuf; + strm.avail_out := BufSize; + DCheck(inflateInit_(strm, zlib_version, sizeof(strm))); + try + if DCheck(inflate(strm, Z_FINISH)) <> Z_STREAM_END then + raise EZlibError.CreateRes(@sTargetBufferTooSmall); + finally + DCheck(inflateEnd(strm)); + end; +end; + +// TCustomZlibStream + +constructor TCustomZLibStream.Create(Strm: TStream); +begin + inherited Create; + FStrm := Strm; + FStrmPos := Strm.Position; + FZRec.zalloc := zlibAllocMem; + FZRec.zfree := zlibFreeMem; +end; + +procedure TCustomZLibStream.Progress(Sender: TObject); +begin + if Assigned(FOnProgress) then FOnProgress(Sender); +end; + + +// TCompressionStream + +constructor TCompressionStream.Create(CompressionLevel: TCompressionLevel; + Dest: TStream); +const + Levels: array [TCompressionLevel] of ShortInt = + (Z_NO_COMPRESSION, Z_BEST_SPEED, Z_DEFAULT_COMPRESSION, Z_BEST_COMPRESSION); +begin + inherited Create(Dest); + FZRec.next_out := FBuffer; + FZRec.avail_out := sizeof(FBuffer); + CCheck(deflateInit_(FZRec, Levels[CompressionLevel], zlib_version, sizeof(FZRec))); +end; + +destructor TCompressionStream.Destroy; +begin + FZRec.next_in := nil; + FZRec.avail_in := 0; + try + if FStrm.Position <> FStrmPos then FStrm.Position := FStrmPos; + while (CCheck(deflate(FZRec, Z_FINISH)) <> Z_STREAM_END) + and (FZRec.avail_out = 0) do + begin + FStrm.WriteBuffer(FBuffer, sizeof(FBuffer)); + FZRec.next_out := FBuffer; + FZRec.avail_out := sizeof(FBuffer); + end; + if FZRec.avail_out < sizeof(FBuffer) then + FStrm.WriteBuffer(FBuffer, sizeof(FBuffer) - FZRec.avail_out); + finally + deflateEnd(FZRec); + end; + inherited Destroy; +end; + +function TCompressionStream.Read(var Buffer; Count: Longint): Longint; +begin + raise ECompressionError.CreateRes(@sInvalidStreamOp); +end; + +function TCompressionStream.Write(const Buffer; Count: Longint): Longint; +begin + FZRec.next_in := @Buffer; + FZRec.avail_in := Count; + if FStrm.Position <> FStrmPos then FStrm.Position := FStrmPos; + while (FZRec.avail_in > 0) do + begin + CCheck(deflate(FZRec, 0)); + if FZRec.avail_out = 0 then + begin + FStrm.WriteBuffer(FBuffer, sizeof(FBuffer)); + FZRec.next_out := FBuffer; + FZRec.avail_out := sizeof(FBuffer); + FStrmPos := FStrm.Position; + Progress(Self); + end; + end; + Result := Count; +end; + +function TCompressionStream.Seek(Offset: Longint; Origin: Word): Longint; +begin + if (Offset = 0) and (Origin = soFromCurrent) then + Result := FZRec.total_in + else + raise ECompressionError.CreateRes(@sInvalidStreamOp); +end; + +function TCompressionStream.GetCompressionRate: Single; +begin + if FZRec.total_in = 0 then + Result := 0 + else + Result := (1.0 - (FZRec.total_out / FZRec.total_in)) * 100.0; +end; + + +// TDecompressionStream + +constructor TDecompressionStream.Create(Source: TStream); +begin + inherited Create(Source); + FZRec.next_in := FBuffer; + FZRec.avail_in := 0; + DCheck(inflateInit_(FZRec, zlib_version, sizeof(FZRec))); +end; + +destructor TDecompressionStream.Destroy; +begin + FStrm.Seek(-FZRec.avail_in, 1); + inflateEnd(FZRec); + inherited Destroy; +end; + +function TDecompressionStream.Read(var Buffer; Count: Longint): Longint; +begin + FZRec.next_out := @Buffer; + FZRec.avail_out := Count; + if FStrm.Position <> FStrmPos then FStrm.Position := FStrmPos; + while (FZRec.avail_out > 0) do + begin + if FZRec.avail_in = 0 then + begin + FZRec.avail_in := FStrm.Read(FBuffer, sizeof(FBuffer)); + if FZRec.avail_in = 0 then + begin + Result := Count - FZRec.avail_out; + Exit; + end; + FZRec.next_in := FBuffer; + FStrmPos := FStrm.Position; + Progress(Self); + end; + CCheck(inflate(FZRec, 0)); + end; + Result := Count; +end; + +function TDecompressionStream.Write(const Buffer; Count: Longint): Longint; +begin + raise EDecompressionError.CreateRes(@sInvalidStreamOp); +end; + +function TDecompressionStream.Seek(Offset: Longint; Origin: Word): Longint; +var + I: Integer; + Buf: array [0..4095] of Char; +begin + if (Offset = 0) and (Origin = soFromBeginning) then + begin + DCheck(inflateReset(FZRec)); + FZRec.next_in := FBuffer; + FZRec.avail_in := 0; + FStrm.Position := 0; + FStrmPos := 0; + end + else if ( (Offset >= 0) and (Origin = soFromCurrent)) or + ( ((Offset - FZRec.total_out) > 0) and (Origin = soFromBeginning)) then + begin + if Origin = soFromBeginning then Dec(Offset, FZRec.total_out); + if Offset > 0 then + begin + for I := 1 to Offset div sizeof(Buf) do + ReadBuffer(Buf, sizeof(Buf)); + ReadBuffer(Buf, Offset mod sizeof(Buf)); + end; + end + else + raise EDecompressionError.CreateRes(@sInvalidStreamOp); + Result := FZRec.total_out; +end; + + +end. diff --git a/thirdparty/zlib-1.3.1/contrib/delphi/ZLibConst.pas b/thirdparty/zlib-1.3.1/contrib/delphi/ZLibConst.pas new file mode 100644 index 0000000..cdfe136 --- /dev/null +++ b/thirdparty/zlib-1.3.1/contrib/delphi/ZLibConst.pas @@ -0,0 +1,11 @@ +unit ZLibConst; + +interface + +resourcestring + sTargetBufferTooSmall = 'ZLib error: target buffer may be too small'; + sInvalidStreamOp = 'Invalid stream operation'; + +implementation + +end. diff --git a/thirdparty/zlib-1.3.1/contrib/delphi/readme.txt b/thirdparty/zlib-1.3.1/contrib/delphi/readme.txt new file mode 100644 index 0000000..2dc9a8b --- /dev/null +++ b/thirdparty/zlib-1.3.1/contrib/delphi/readme.txt @@ -0,0 +1,76 @@ + +Overview +======== + +This directory contains an update to the ZLib interface unit, +distributed by Borland as a Delphi supplemental component. + +The original ZLib unit is Copyright (c) 1997,99 Borland Corp., +and is based on zlib version 1.0.4. There are a series of bugs +and security problems associated with that old zlib version, and +we recommend the users to update their ZLib unit. + + +Summary of modifications +======================== + +- Improved makefile, adapted to zlib version 1.2.1. + +- Some field types from TZStreamRec are changed from Integer to + Longint, for consistency with the zlib.h header, and for 64-bit + readiness. + +- The zlib_version constant is updated. + +- The new Z_RLE strategy has its corresponding symbolic constant. + +- The allocation and deallocation functions and function types + (TAlloc, TFree, zlibAllocMem and zlibFreeMem) are now cdecl, + and _malloc and _free are added as C RTL stubs. As a result, + the original C sources of zlib can be compiled out of the box, + and linked to the ZLib unit. + + +Suggestions for improvements +============================ + +Currently, the ZLib unit provides only a limited wrapper around +the zlib library, and much of the original zlib functionality is +missing. Handling compressed file formats like ZIP/GZIP or PNG +cannot be implemented without having this functionality. +Applications that handle these formats are either using their own, +duplicated code, or not using the ZLib unit at all. + +Here are a few suggestions: + +- Checksum class wrappers around adler32() and crc32(), similar + to the Java classes that implement the java.util.zip.Checksum + interface. + +- The ability to read and write raw deflate streams, without the + zlib stream header and trailer. Raw deflate streams are used + in the ZIP file format. + +- The ability to read and write gzip streams, used in the GZIP + file format, and normally produced by the gzip program. + +- The ability to select a different compression strategy, useful + to PNG and MNG image compression, and to multimedia compression + in general. Besides the compression level + + TCompressionLevel = (clNone, clFastest, clDefault, clMax); + + which, in fact, could have used the 'z' prefix and avoided + TColor-like symbols + + TCompressionLevel = (zcNone, zcFastest, zcDefault, zcMax); + + there could be a compression strategy + + TCompressionStrategy = (zsDefault, zsFiltered, zsHuffmanOnly, zsRle); + +- ZIP and GZIP stream handling via TStreams. + + +-- +Cosmin Truta diff --git a/thirdparty/zlib-1.3.1/contrib/delphi/zlibd32.mak b/thirdparty/zlib-1.3.1/contrib/delphi/zlibd32.mak new file mode 100644 index 0000000..9bb00b7 --- /dev/null +++ b/thirdparty/zlib-1.3.1/contrib/delphi/zlibd32.mak @@ -0,0 +1,99 @@ +# Makefile for zlib +# For use with Delphi and C++ Builder under Win32 +# Updated for zlib 1.2.x by Cosmin Truta + +# ------------ Borland C++ ------------ + +# This project uses the Delphi (fastcall/register) calling convention: +LOC = -DZEXPORT=__fastcall -DZEXPORTVA=__cdecl + +CC = bcc32 +LD = bcc32 +AR = tlib +# do not use "-pr" in CFLAGS +CFLAGS = -a -d -k- -O2 $(LOC) +LDFLAGS = + + +# variables +ZLIB_LIB = zlib.lib + +OBJ1 = adler32.obj compress.obj crc32.obj deflate.obj gzclose.obj gzlib.obj gzread.obj +OBJ2 = gzwrite.obj infback.obj inffast.obj inflate.obj inftrees.obj trees.obj uncompr.obj zutil.obj +OBJP1 = +adler32.obj+compress.obj+crc32.obj+deflate.obj+gzclose.obj+gzlib.obj+gzread.obj +OBJP2 = +gzwrite.obj+infback.obj+inffast.obj+inflate.obj+inftrees.obj+trees.obj+uncompr.obj+zutil.obj + + +# targets +all: $(ZLIB_LIB) example.exe minigzip.exe + +.c.obj: + $(CC) -c $(CFLAGS) $*.c + +adler32.obj: adler32.c zlib.h zconf.h + +compress.obj: compress.c zlib.h zconf.h + +crc32.obj: crc32.c zlib.h zconf.h crc32.h + +deflate.obj: deflate.c deflate.h zutil.h zlib.h zconf.h + +gzclose.obj: gzclose.c zlib.h zconf.h gzguts.h + +gzlib.obj: gzlib.c zlib.h zconf.h gzguts.h + +gzread.obj: gzread.c zlib.h zconf.h gzguts.h + +gzwrite.obj: gzwrite.c zlib.h zconf.h gzguts.h + +infback.obj: infback.c zutil.h zlib.h zconf.h inftrees.h inflate.h \ + inffast.h inffixed.h + +inffast.obj: inffast.c zutil.h zlib.h zconf.h inftrees.h inflate.h \ + inffast.h + +inflate.obj: inflate.c zutil.h zlib.h zconf.h inftrees.h inflate.h \ + inffast.h inffixed.h + +inftrees.obj: inftrees.c zutil.h zlib.h zconf.h inftrees.h + +trees.obj: trees.c zutil.h zlib.h zconf.h deflate.h trees.h + +uncompr.obj: uncompr.c zlib.h zconf.h + +zutil.obj: zutil.c zutil.h zlib.h zconf.h + +example.obj: test/example.c zlib.h zconf.h + +minigzip.obj: test/minigzip.c zlib.h zconf.h + + +# For the sake of the old Borland make, +# the command line is cut to fit in the MS-DOS 128 byte limit: +$(ZLIB_LIB): $(OBJ1) $(OBJ2) + -del $(ZLIB_LIB) + $(AR) $(ZLIB_LIB) $(OBJP1) + $(AR) $(ZLIB_LIB) $(OBJP2) + + +# testing +test: example.exe minigzip.exe + example + echo hello world | minigzip | minigzip -d + +example.exe: example.obj $(ZLIB_LIB) + $(LD) $(LDFLAGS) example.obj $(ZLIB_LIB) + +minigzip.exe: minigzip.obj $(ZLIB_LIB) + $(LD) $(LDFLAGS) minigzip.obj $(ZLIB_LIB) + + +# cleanup +clean: + -del *.obj + -del *.exe + -del *.lib + -del *.tds + -del zlib.bak + -del foo.gz + diff --git a/thirdparty/zlib-1.3.1/contrib/dotzlib/DotZLib.build b/thirdparty/zlib-1.3.1/contrib/dotzlib/DotZLib.build new file mode 100644 index 0000000..7f90d6b --- /dev/null +++ b/thirdparty/zlib-1.3.1/contrib/dotzlib/DotZLib.build @@ -0,0 +1,33 @@ + + + A .Net wrapper library around ZLib1.dll + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/thirdparty/zlib-1.3.1/contrib/dotzlib/DotZLib.chm b/thirdparty/zlib-1.3.1/contrib/dotzlib/DotZLib.chm new file mode 100644 index 0000000000000000000000000000000000000000..f214a444aebb20950fb3e8499b36731e1f12be95 GIT binary patch literal 72726 zcmeGEby!tR_Xmt0Lb^-3ySqWUyF;2oNq0+kgMffYgLESxDJ4jYNJ^JTHv%sx-r#-v zJooqc<9Geu_qyC%`^?@mpEY~UXU(jcS?6pdRg}fR004mg^$Bu)%1mlyL4X4QNEaZU zg&sr5>2QFIcf>23$bY-P!QUL1KN5iJZK}ffiW3R5Bgdsi#SjndZHoZ7pFgTx{Kvz zl?C`=WYS*WsmLox3SSrcy2a>U->NFfT;oBWza%PF`f;lwBm?q1PBTK{x+--^IT3kv zWsrnPVqY0p22wFe6GwAd19NMT#CmhT0wib#Qh6aMNjYT|ki;D7XOGYsNY&K^9UN?o z%ncmPoq;mu)=wO6G{*aFfr7n_EzsW4?OK=|9Qg(!4Rmv{u{Zup4&xu0LMrw^AV|WL zwQsr1_s9JrB4XfZ0FoHNo#>AC4@p@ATad(TRwb-|l-$z;f)Is4#Ky?U3TW+k-2@wJ zdNVU4khpqL-+b49mOKH8pXU?Axt4I$k})@=7c{m6+6$Wjjh;9-S<#z0T3Lel_6kK{ z(ESI5s;#ksBT&!A8E9{5V_>Yu@xs_Wvg1a4XW~9`%&`_aeeJ)((#LPDYM4 z_P1bvf^b5Le+4t$qN5&#DE~W}`4*jo5@tpG`?_U;R)#?PTaA4`Y7~qAN1&sbjq%T> zWj@XEAo#1spY)0Yt%3FicWv5~3zH%HFDNCT1JLn@j{f;lA>2&=1^aiq+%n<6i4ckN zzsTKk;{Vw>0`q^7yX^=5y$_%1{V#H?x9w}T45wlIzqjv}X#aBXD6{`Yp_+lE6Y%yC zvAiK_cU|-!MiDY_0MhFjIoaD^52PO=0n>~j#w7n)tM4M;$Bh3eRfG)Hzaa0~Gw=m` zs1Vz~;Qxb71J`(?*#1}9Te}8M!9+6uud=tc4Qv-omi%93Z|xgc;}Ido`oFdJ*2aN( z^3k;aM(sU22kdBss?h)UNBzUU1eD1|h%o%0g>FYzz#EiM{{OqwtqlS?6~amWr9oom zK+B)rBw)xPoR9jy>-LME3J7$1rTMP{_xx4B8EuxqoyY&}(72s(%z?LN30Ou87rAra z|B(4bBfn$pD4YKZzNd|U3Q8pBf8povn)nAnhqK(dWnmj*pwacbW_&kE-I^B!eDF&e= zzkBj6o3~FM*9s%~T{Et&W?*UVerwo}d9M&^{NJ?pzHvh~C_>#H{s#2jz(Kp%;Y`0X z@Dm{?6BD4l@?Q@N9w7}8yj%Eu9}3^ukhlI#J3|f#Lu`Imul>!!L*B{pj=c-S5S`y4 zuW`RxEi}+F4Eb+k>_&rsc--J>v|t0ge>Pdv`Fi@j?J1$rUSY<+!QA(b!HrIlD!<|P z7ylFVO}b9F@p~coG=qg7vHB_q7h1r3{n#+fe>h8z0>mi+=#_ zX%duU7QywmcK=kGfX+b6A00F_2Rs_*9zsc&h52vBsv-z? zxaaqOLHvF7!SbWlux6I~D}CYrCUa}Xurk*BEB#+Y{?RW&zi8fH>HjD2txFF*a=X9M z|4-;!FBN(vbAP4(3;Gueg|?vFU+Mo1c+XN{VO%*LcisJ$K_+2feY3f`rELr zJe2%;+xxr25HSWJ1O5n30L~7!4rT+I2HFJ51=0yZ?STQf6qqY$0th@v6o4OK0=U`# z(?Z#%dGKq@!3>E)vb-&IgQ7?o;=7W_=qr> zNUgi+?Ow4A(Aw1TcD)h#nk|C;w;CzfIGF#4Gu%WAB0HW$-1E`*YP;h!s!S#M_hj8* zgxr3T71aY9N_}U>dv)CrA2rMt#dbI1e!)22Z$Q*%iwK9`QgzQfQJXr6F2AkqJLpce zXn&Px?7JE8?y>*quMx{0VfuHY_qWJf?-jA59i{Lu&|B9PaYYk}@H?aZG7ch=$@^7* zkGeM!B8TPM>3-Mfzt1s|5nQqE@PBor@4d&jfGZ37&XGx4{})FVlcay&k^L5X>&Rjv zaql~_zo5T3vY33K`;P1{(0xZ1Q|25>e&=)k!hBagI?g&=^sZC?Ec}NJqsO^|#qK)d zPuwqDN2jyg_c?c%drU{qJ}t$&v&S{YhF-$JK?G>%WcvN)yH>F=tRbQ|p}HR-xx0dx zdfYJazlq;0_T)|EO-%lZ4aFwAg(%#)nD630PzpBY);E*PkEdixhA8~fCL8)6FjdK) z0gu>1tPrWYF>|jfRT&#=)7y$FjY8z^hQfD{ssqsBI*NK7EwgmHS#{nb8<|3M?iM=V zk!siBwC_R68|M+*fe<3}t4{y0Ma&+4@T0rs)=ee9*dgYvQ7O;eChVsC@BKLDR3}mW zZY6XR_!M92`IrQfOLS5E*Rk&7G})H(ik4)Z7FlAp$%Y z4&gf2#?j;^r0_j6e%mn^_g0`xVT42e~2LWd0%_zvdF;1&76%6hF32tv=dGj!U z1uoUU;;%KbzUf2&LnwxS1*_N_SUZ^5*jq7tSD%+$?|%^S;1CmL=Hy~!q~j7{VWMMV z61lz-V&Jxr-`6Pf_{Lii%x zdZoL)i++*|5t=&fa-*N3>gCP@d3pHNAOm#Lr_Lg7m#Xz(9Ql|at87Hcm8)v z@Si*TA8W$9;J}}&KMed~;12_T82H1$9|ry~@P~mv4E$l>4+DP~_`|>-2L3c!ufYge={Z>GIXM`auggilzhiMD^ZmVvAHsn0 zKJ~2h7aczvcilR8z|YX(O$-PC20*yZxc3480OC5w_?Mgq0BC@$gR!*)(9#wFdHt+1 zD5GMy>-6Th<_bxLL|OI~aW%-zV}ict{&<7q_VSmvJZ^r~@%Q5f_m_%4h5n>}82H1$ z9|ry~@P~mv4E$l>4+DP~_`|>-2L3Schk-u~{J)9;#M@W^64Fidgau511pq))O(ryd z1lkJ<4U}b!vlFh=$D7i8MMuk2Nz7V{XY;j|=6tiZHcmtQJY)|M{NXWUF#tfqtS<@y zkOZWYRRSyJ)PzW-rIW-?Bok@f2oou!{V6E}wf86Bn|cRo9k!a1=<6%bC$jZADJ=&a z7pWfWw>tNp1R$Ovql(VwWf2_s5U3IgsvhL#TSH^So#=o{Uuy^+Qqys*;DvUL}rA?=4`lbR=jsW0?YvR*h$HnNhp= zC!izu;7A+DiZ@kulAlK{n{*^;+WBXnvVm^`j#IMvXU-V}_qao1<69ICjx z#>je?dOT5Wl|%`3vbEPHG~%aFZzYFws0JrvGib&2P+KG9gm@|Na;`dR;@hXdF0GoZ zA-H|QH*e*41=$Iq5bI%HN<7~G#@%@RB7i{JIIaZ}5Wwy4o<;eoy+hDvrhjIDL?wm@1uB1Q#CKL+EnX#od_o5Ll)IMaO z7NBj&@^Kd;)<%OES%^J;dru5(Byz|)wNe231+*1B;m&Izkxf{~q>@M^K5oRE!sTob zc|{J+dp9AWy9VYkT9+9Xs~h za7ux3s^H@U1XPuqE^Qhl@AX5bvU0-YlbYY7u#DLoD@_$+y~NzrtM0>7+1`o^!%<4#Gz6nx%!45)1j#*6H%w}%lL>bkPU;E?AJ8F+BF#1h*)IhVyMi_Ov zsP^M0U`mpo15%jKwLnIhv>I@EEM%1`z#gA-uZa|{w;0Fa<;p*AlslXpj&U`@7sC2t z^zDl(eNUPt;1!(3LTitPAQ;BOW~318lc{z8PH}Qizn}}TOCKI8urso=eH&5)*=8`` zp2~o#l&9$#hnp<9m0A6^0!0mYp=~A0p6kv&f``RmG&`p&3S1xA1q#Z&mWDQ+e8$QU zdYCmRYx5Uo_^3Kpt2*gWb+llW=!(}qid*e*;K%r3yXT@z9M~6J6s4W)yAYFWe5HLK zLzt|wA*)yYu{qhsS{D>18jm#IH$G*d<0Wc!%;ZV=R!Zbb{^7V)aDh~#YlpjpjKM9N=; z>p{p}tsH%-GWJ_W?06|`VM8Q3<;UnLcV=dbQ(dHnG(Sljt7YptrcYv!i*oOTH}{dKWA=+9*g{ZYWJuh2k-7#a>5t$bF)tT%YE zXknN}yshg~aR3ihYrf2JAi1;`U>8O3G~wXHJT%z47}=uULl5)|GbC{@3l!y+B2*~f z5DjcU3lNj0L9LvJs2$yYo&PnlA$`0mw8lE44re*ay-w$)@TQd*clNAR(%5uPdB1zi z$VV@;e2am|gwU=bi3Ahc2-#RQ@Nj4ZR|M%yV{F)u1EjT!9~IyGxH=6o=bI!9tM4V9 zbj_g>xz2R!1`{swDfWX?J_xn2!x`6(1sn7`%cIC}oA8KLKFZ6G`1-{Mb%Gh{twcVN zq6VA;DyiF|ZA@EJ=2F1GleU)erF@D~9hw9hVXb^lDkhymJIUFHVbQAc(AH!-KEV8w zAjx)Vwy>U^Iw=20(<2uf(23nLxb!{&gdH4nxP_*xYF?fdBUT{!B>#)%AdnKLLoAd% zF)T0&Lw=ZSZHt59{(K>Bkvty(DpM`l82!)rC-3lEYU$}o8c0{qipkSGIh)_p6+1p# zvQ=^Jkc`a9Sh>;&={E<<*3Q65XH(xKGsk_s8o{X6xD&4X*)r4CLE#*tde3<2Ftz&J z-bRK2D)TE^O0lz+q_}32BSXH1giVjkV-(CZqm^v#z3`3d>Q)Jlz#WZ2C|%q+1=V7( zOL<5p{(S34Nr@ks)(@gEk0mIzP1K$3)Az#HKgrY=yXS2rUBJ+Y=+H1-R5Fa~QBCT! z;f*{V=ue75&_o`g?M=eV>fF=Ze+=&v4p)Cx6@aLwjlc>kTCyq1q@mr`ZM7q*a8^Ly z7rz}o$wn8ZUHU<+Y8&|JQlkt+Luh{UZ0GGW=pkwJ@fV_I9S-k7!Cuo$&2Vpl9RZKd zRQCZ-s|f59qfG4gNx(e7C8Y721+6zf4~s=w7U|a_o6;>swO!S`4CNDZwO@EKZpwjQ z@Pb_6ThX|78nr(WG{ROYB;F7^oFX=zE~dK9y4#dXex!BgnaRaZU$J?%%%?&@hbFD_ z%Ej3Yq2$%}j60QKxp?1@dHrs(8ZPvf(sVTU+E_+p@nQTY&2sr@D^;-;ho|sPO(8yoxcfqEqX?w-F68l>x{*l95$+F#fzj1+VJ-K+ktL;m{t$ zn*%I&+651%T{a&pFy@uVK)CaMp}j?{^FkcEfLYv<4xTgo(Wqm$#Om052eiCYmD5DZ z&ijs8rrC14S&PxVisY*Kk%D6meU3**RHOwGs&qZsrpG0M*RMk9!HROcM%3-mu)-(XZb)E($w()#z-L!EMb*e%#1Z&iG(gpF+| zPXJUKk3eY3l_H->hMO+$C1jVgFKG1?m&zkX*b&7{SCJIYlb(0r-{B6Oe9N(5)5M=Uak}sB*b)ZU~ghv z(IG(iUu5B<3fH9T^vKy~ats%hi{$1Kr^pY|L96c7P4Ov5#}w|2zlD{iskUo=IVpM& z5&@Ix^_sV=wO8TrX-WhxY#pk%*a8z;q0z?Y<$dMxBn;Zozj{YZV2o7z&>-DtLB`*fMufc%%(P`up2-<26ztjiYl_%skr?=WwAIm-DJTPl3SZ?3yXxi-;#GI?^qq0Vz>4 z17s=BFD^xg9QS3XB!9=mS(}0@iPiJn9F_P{+q@xoiB?Pdx_epH5dJ=0UgN)10zR@>e3E?b9{{ zu=7O-DJXpk$DfkL>3b_qCwqJZ(UJ*8MzM^gggLS^N`54;Yct-#~H$Opm6;`8YGxoQ}nH}tDm6C{>AWzyOt zc*q%{(5GjR-L*c-SM-qC8rWtpJ}eyPLfs2(;`=O)&pfpP?+S}`2*d-mA)Gz(@Ft?R zt2G~BJg^gwVe2)myY~)kl+hL5HM6v*|CE5I0N*l$uUwYfeSNjeS z`)!3Mh4u&uQ#rhcI;Damwu(b;3wdYGeE#~QH2~Q}43<5R`+2?}n;|>zyo?cv{eTw- zriS0vVZYvMCV^{zOFyle9<$auzW9~f7(b#M^>`otrAN#T%&-+lM;i#CcGV|Kq`IIT zf;N?5q-`97b)<>Z5tBoK^NWxKcbHM5957zsdeFKAo1-weVs;pe$jiL8B7qK@+Se1& zXa+-)2$2@;Eb2y4lmv>Y)31$JA!c467rmo)o3P%2aapVL?BrhZdYJdl$-%C~;;j&o&8+sIuC5Hud||g|)0M~D+^e+JPOja>HqYSdkF2!= zgGe!}hQQ_+Gkdd(J=c=$`tfz|1&_XOo>|5>oW#%Vf*atEtQXbgyN&#ESLSPS$QOmq8~BiXU;z6*+xu=JQSQ+JU~{t_=sVL>ii(V-}H6M-2+xf>cp> zIMCfb4tePxIM{PVzTgVEX~XBfSH@ArgQ?rgVuj+KEw;e1sYH^vCBEZf@jht=o(vh0 zn~>wHx`X_i$*#mR0uKVRmx_9rR7y)Dk54veWKQB*0V(P+L<65F)^;aRpkKp|uzBQ# zo}#0DW&>}U>Y9$o;AA+UuF9WZo{;{aJKq%kvUXhy@=*89D=Ub?a*T7eU=t2h+ju^F zT_5)2dY8%7pe$0{d=*6%?4Gze7XqdRlwH+q2?g_SN?906dm++;hlki%IqQRNO@&Q% z!SKZIOzqvXZ3rpRV5U&ucY9@~&?Y0Necd9wZF3id>w>~;lKJf8M9mK061%TP^D8Kb zef?xC;PJJB%t}etmuBPK6ZAmAKR04Yp&^}d-hxC0@DY`!5%Sq1AU0k}@zaS<{_efl zXBtzKcG?TAhz9f?RcZV09+=C0U0L^`zEC%$(&r{GWIUWFL1Kp=f_aO?8DHW53I-`u z4V*tDLS-;4uBl^929^3*t!}ClMZqHi{2n<)AM5OlG$KK6{1ii(a#N**5Ev=Xup_*I zEX8BvB%cD69?VhC-nAo5&*$&7D^H~kO6|04QqmFHP9^o}rY89F+v6*7?T|%yH4v}_ zE7|Rc_i_q_AM$%n)CxcyESmRZrjxoq=Pt^|TMQqH9t&kO(dBN?7O_MO`NhuVg&e2`KMd?Bt{8q+~=86vNUk!`z}G?0+n9sB%)sDV^{OiS*9!yH7{@mmZ){U%dVb_5R?MpzGt|H7&>z1wlHDwoin!&tU!a z1pS$dTb84Jqm{4~VT0ck=J#;p?w26bGjL)w$3pSqz17UwhJQp&f<52e$)-SwkIoJw zl3+6_my0ke)>r#ck&~DB_0+Q~Vzkg@UHqpJX6b<>II!X;$L}{tsz%|S$N!8RZ3f;J|*8y zv-j+r-|k1;Y=AN`lLUfxzTlPCpSoT%X|6@lc?;IY1ayVOOgT^2PUUS?)o#U^i0_9i zTu0o-kv;+dSXi&KzyNDt1QPnyF)2_WG$5e-t!3@@=)yKWI$x^$+nv9bmT8PRmo~bD zTUb3gZZ0YLI@35=QnR}on^ZU%wOiL+*w_`uz&o<4W#t;GZfYG72->_;5iCFmzHkm8 z0sxSiz_J;Anjg)cZyn8SUCk)h%|rk-s~&!~t{r>w^`p5;&Wi+D79=|DR7aDT0%}$$ znXClJbk}rfKOa!P9H=m6P(q(aKK_8{y+`dCnBfFzgtyO?}e)*?u*m%?G=5O*z`2edwRd!QC4AjE(XI{AQK2_nUv53>yY}6 zXY1or!u*R;p2vY6(a9ttr!Wah^~>vqHMv#|;cYFG!>CPR>D$x7>7(4Vy0WcXIZ`{L zMdOi2Gu)UBX-RrtJW^m~;VGc4ww$%#wNmA?CnLF%QyG~(_IfAiAJDb83#6H<)E#XQ zuNPlD*h$;|@vFy<+50j@lULpkJNe-tbg#!CXGM}dThN0wY zd0vvwsyF$cYcB;lFx7re)zbU6b@2G|M z7#N0IF?1Tz^kwo`N`MlDJc%7H?5U1E970xI&R&U>=N~t!|BzT>?G{ zi2LohH00cJBGqih8UXLB-)vMXOm3E3*_x>%MGb6Y*y6F)mhTS!iL>*b#!5PiqhZVI z$~m()Do1J`!oH-CrLC+9)HTDH#iJkwaWSOy-Fjc6o?NPaY;+0=vs?I+Cm=_x2Z|CR1tz2#D!j>Ky_mvG8YTe#^)P^=aWIVm1W+!q?2PpDdy z!?>rDk1u3$O-du}p_t;`9-r~}ifx7sI7ctJyM|jq=E%Y+ZHXdcB zD^_NV)L~*WNzzaAmMIcvsT0)5a$murA&+jb$#ZTbm|7gO7-y_K@f>_1uX}=w2i-cq z3Pgw{kejSq7cPDurWz?n7QAO!Up7fOsNC)kOZ6%f0n7IE+-wRwcoT0G;tFO) z-D^=T48wu}uwoZAI&#b^nC--lEY|;+K+tdXLkEM^s;5z6fD1eq!>Mln*iy&K(k|_n z41HBF3y`~EyqV0J<~){HJ`eWDtFVWNBZG8ao-{tJXhE7?6wKn9IxDDEEZ>{D>*8Jd%etAphHkuB|@oH-*n(2lBVC9(vdED#>(+ zPWLRJ5*Ngw5`y@2p;3Pe_UJ>x(r>Nf7auUlUg8-s^P41)A=Q=dZCpA!A6hLDt+LA| z#*1MGMjyYYqYw){pTOjse_3HF?t+M)T&}IaG?+S%vc0mabYi&Onw27s-2Ub)D4cg! zv2j0;48?)7!zjwIEmYd9mTo6&9S)IGqO9jjw-v)dq*XUur=Nj_*7SNoq8MageL`!0 zvh=ahxC!Zp)kZZU0?{*yOkC1cD$Ycwrn!BkS6oW_jJcl4!AzQ4A*QX05lbN2!U4Fd z=-qF@_K4l1bn6V*o*T-okqm#pPB+? z{(?uujG%lulY0g%vS13?ZExpbCw;v|ZPVT!z-7_e`l*Z%Q}ihmEkjcw)QY*k5@?3z zgSF{yM+-+$;8+kBO9(v^)9~_Wh64SDZUE=kgiD%|+x$8vZb$D!$mAfnCLfV2pPBka zXsh$GcwRb!mARyeN5ckNa}F3e?TU=1Q5kc0lBQyCI8#`ON-V31H9%9|#x_cZEj~tG zAH2g0*bA=kBxYBc2!ebgIWLGFNJd8Rn9iJ;lFOm{NFZp346wiUsI0G;DPY={^i4cI zI@8<-nmOwDp32#z_uHhSC;IU_M3&tvexDsqgxF3h`}BkkEGDu!mx;D(`bC>Q4ahLH z&4+doE0`V5H80hmcXz>?vI+q*w&HWnTiQ#4-y~r|M7$m)BxS&Go6kv90$D00N-P3< zz4?s;&W$~kK64y%dKg*grOr|DLA{}Ltu%&o_i1DoDsfWT4zh+23WO)N;n2cKWIDmi zUbup8~!V0J%e5xsHP@-#daiW)*n9C+tON1&Rc~%Smt}T>mS- z?vjE;;;Zfhe{&Kz#E3o9Md^CLGSqueKlR4g?6Ad0d{W}dC@;3A&ex~wqAx^0=O+j8 zoSH?vieTcMugR+RL8b$fjsF5|>nv% zxEn^)8#(2^009s{*V&13z&H9 z=*@0}=T0=^)#^QZHrcEYR>9P=P#Zqx%0ZpZzE}04u)l#zd(QQw8PWQoedN2vehh{S zbg_5OM_Va2DOu)11^5`q*9J1I%fVlMa)DlWpWt-{B_+(zU#IJ&lz_?0pGne~AOl^; zDN_$LN%cyYbPfu@dz@t77=x}Gh-#|y`G`(vf%8`+8erGxC=cKT}~!RUv|^lX+J+VF^7FRJIUc*hvsNK$Y+Yr z=`FWwRA)%e9qe-$9`q;_)uzR3ww`gPN>&PI!A9s(sb}Xso%|H9RZ!zfm+0VSyccH+ z!K)XJRQMZjRyZO+;} z6#GxzQqxEQ{VY#pc%R3A9DSYV;(2jMiErqwYZM zTvm6f1&%lib=g>dzUEcF&^HkmAB?!3nf&FV%`$Nk#7C}L zgxtM7h-S1Omi*i>+54-v(JIqg>Qs8ss2T9EUAi#=E!HnONh1p%KTxh! z_o^5o|N2P;7Y{YgQ{>@=pD>_0YAqLy^#qgyCnmqA;4CiV%p5n_9-a<=x&XtMTA>0~ zfhmX`Hq#5mOPMxA{%T|-)*AEyAjfSv=}R4)-(V>*;d=l+7kj~rRf*Fj*fi?8@aC<8 zUFq_9HFaZ`*{g>PxSg7!JS{SkGcbNNwW$PWae-szqRcd*L+Xe$g#Wj~c{cr$J$g#||a$w_zoQDn}38gsA#hiNTz=exy zcJRYD#5Uxrr&WOn$J(nI+2boL5fAJx4Ij&cDxxvtKC3Bddzv=&DpI2-jkw64qgORN zc$m=nL3+khHT^M(vnTp7!3L%JRAUn-odw!^%RaNL=Nyy!yX+9nm_kU44x%7X=c$S& zY%7e`HA56^;uSA2O1_HM2n{Z$Lt+Yk?86qO;A!Kw4Y8k8^q(AT^;FV!psmj0DiAl( z7Wo#b>?Qu9`+@MMN!nFQk}1xx7$rwbLOe)A#V5ua@a4mvHR0|tG(2Mm zdQ!tsw~%b}t<$!DA`IpY>xEnx663d%D%!2xEpv}kPOx>VQ57w18LH3fvxvEZ6NJG| z3M+unT*e<;5YKrZ0!<7G>3LqNpoyl6K&`|$8+L+Lz+oL|6-I439VQiuy$)BndftMp z8m#Ee2SvW!;v+kt@%*FSGpJ1eWHiuc2+ixo^V&hGh6*I&vdI+B-&Henmq^IiscUY2 z!$?vj{IJb5QjZb!HA~n%P54RpWYMrRTCGl~H`_VAj7WulF;G)6Ed=rdCG~z zxs?L3y*5#mq+|(wzmfLQn#I2y)XUS-;RT zxKe2?d;DaKx=Hywz1Q>vfB~a#UP7n(G+YA*+Y?)Ca-f%GG~%2P>nF2>aI@Ly4y5nX zsinVFN8qb6(g_#}_@c3TP&_0ywbf0t%zTBtEJU{5Z(O_?;J&pr1jF_~`6*aT4>zFNJ%Y8>&WmbBO%?!Un`jw`rG}8sB%ohe6 zbBev?3Gr@gmI&03t)mlNf*Ok<|8Nj#;T2^KY=TApTsc$5@sZ*4i-7Q_+>Zk1#+_#} z^HERFrc#S8-!*t!&f1uP#RiT8N-f?lvJ9cGFk5nz)u?FE@Ml(i%1=EYb01v`KS;q&H)QEwZ|;4l-{Y0H_h7?d#(eWX zjsKRi<`y2Dlg#PQy7^3|_o1t7p*E?=Cc*RWK4hlY4mcQQCONBp5_(bE%lJBSB{|lC zx=o==x?WSWRJJS8py0i(0Joe<@fqF`m;6thPkWMwFNh3mJ3J%`%_Bd^usic|O36xC zWUmCdlyVuO`0&xIiQ3T*K;Tc2S@<7#w8ZbfA#b0qf!}1*j}r!M?jqr!RUzcYJEsFD znO#>H6gr2T;V6MJc>HzgQ`r^KVIX}?+>*GU@PMMc()cCHr@~kaX>6+)LQ#_opFBk! z`CMpGYdf3?F8yh-JT3Pli<~sLJ>oBn>WcOgZ=-h%C#9B1!E-b=Uc8nJL-qVDp``D2 zWg6{sNa{X2-Oc|jmZI|=4Y{?}6P%Hel5@@ogSH}rCmnq_V=_&ZxI_`VVr}Un9k^=)>b%#rc`Pr6D!se2|f9-X&6=t5!Sl0V+;$Re8Au!aFETzne2n z1q6BMfq<&}ER4R)ZVCjQ;XDJuYnIQ|XiLM!s=}oK;m&>Q)TOve#(n?B#LBVFS_f zq})=lXaLeyI0b+YnDZGx;5H0m^!!jH6565`;nIu&G8J%MDbwE?WP z!nHFz%Y)7hjmZ=9Z?aCnKspZtE&u@Il~OYRU~`TD6x2KbTL>D`7is52yBL9$RG?P1 zuhZSR?v&1yWA@B?AZ4a;%7$*-eu~eFzPECEcejKhu@W!ubDh;dS9jf;izoCY3qfUr zwI|?#@o%(g2>^&Z(zv?-0dRns$y^2^oX7UprlYNyt*V))9(mfa{dljo+^4>b*OXX| z^-~H@cIZe6LVduVdQ)8@Ed~uO2`vPLiE@xn8Um#uO6CpXV+TU(4FDzDrvVM|0i<|W zF}-qIJPpOx1vX|r=Lan? zWrk@FJ8A{nnrR1hN4_FCgod}IN~(tGYwSL$D&)Ym$2NgSYVIj2!2$o`xy@=GP%-7j zh5SYn%dfUJn+R6>EKZcx#ib#Q}#owtZNV&s)&e&)QlB_KmssY0AFq7Dlh;GkuRPVhCz^b)q3{DRlE8|=TZPo zjln9~$nKn}%npe#$-SGGq< zuA1#U)^I;K$nc~9=wgq=WVCWvmDju>KJc|-e=?i-{q}+ zD1<_NO-EnM4Z4oGmrXaq7nYJB{SdgV+kM*b*87Z9)u;in_|j{tqqK=w&Yf31F3RhW|d`J?28 zOzzY-EKi?fMX2~3`M`a~8tFH7hpGEEckig`$ut6x{4$CjmxTEYLz!c|rS`yQlM!OkS!6 z&%Jn77(OTL^6+ElHr=L9^SGs%!Je4&hbPIXnYpF!3rD7|?A`3b#orbzN1Mn|MoHBK zmy|%Rmwkyt3vhW@Gbf`MDjIzZ!x#Q^IY75krD!(x6H2z!YaMT9+bAa~Hqgp}MFEu}*)km1lIMv5^2`;0Ce`;wbZ+u*0)9?M@DS6da ziCz^2)#-|G#o@8N@|2gg^0fAptaG?I32}D?yUmhaw^b(y@lyqsD~aVHo(BEUZ^i=G z-$0`d=?p#@8+fu-dM4{jdA^t-EY5a<g3?d=X5U1J@mfoh>gdfGr?3Wv7)4k*m^w$YcgyNw*4$~V*)k)dyrF@Af1FvkaL zXdj}n>MO(=qk^{%xe%e~v%yV$em;1(tjBFtFwY{3s3KnlfmoHTB5mh|wA*Cxa3u@IbHZ9TLnZcjP1#j%N|pQpwTVS ziJS|JT;-W#!qsuaXBZUf0%J@tcbEtK7&%X{mp9-T1sFw=srhn=xbWsUgr?rr*G*J+ zJ+ICq8#Le0)HC6H9aLuSiDbt->LD0Lo=r*A!P%Y#yXy~SogvVAYW$KBTp12+n&<4#;QY@G@*kGtLj_WBe`8Z(W&F@~ z{zWu2Ys?PTq5VKFC?c$8dU-#66kE~rTzA2m0!xI;e_r;PzLk1hcqj7X3FC0wl}PS% zm;62UruR`239S1~AbJoCzO1m1OPA_f4W}}{Olw?J74}y?k>3517c&|gXUV|zFumJZ z_}$U7lIDlcdE<*DyF>3zA*>jv@|3dW(e2D&wCs2;>@-q30r$ze_20wn_%TV0-wxZ~pfqPPKfwjl{ zNa?KjDx3l@1`|?gd+eMRS3Wf)2K$k7?Pdw@n~bp#+(Rrk^$V!{N4s7xx3@t z93hkt&y0gNG3f_)eLq0vFN+AdiAHUp@S?DNtd>Z9)s-!H2+b79fdpwkWz|1=$g+s7 z=Lm4FU|y3|0>h2FOz+Y{;n?LJ+khC+03K#5B&lCoP&I#+wAH5MXX);nR!@=v^% zgL;ny(*`YTtm=CGcfM9MuNXY$bUxZRQf3fQ<+0x4Cz_<9aTwD9y&6!RAjGdk%U>e3 z!7|1p1AE9NTMA2Z>X2crMo8O0@BZo2uqmh}+vv6)B6>H=Qq3E@d6`G98%U808lLsRy{2R!zBIcX3N$|2((bsfL1;gNMBtc`9~`L7~ceO(JSh9udrT(pD}Y z4d5R;@;j~vJF8mMu!rSDzf?0+8N?cWcG8=j{HamY-8I`jMPAIY1-+C+NtUi!$=!UPGqz1PuMvpU0TOsKk2{4{h%=R}_0AmL5> z$!9OLQ*@D15|?0T@Dr1tE^=Dc{Nrc;rRLEw6L6XRg%dSq+gh=+OT)B0j9EGelj z2gNN~OnwmRrAzP@t%)y{fCme-oY;YgDIzlWfD!;3CarFr6x3Z`ueYeG>3Xn$`@Hgz z=LI0YH#YiwD{NfI?h7Ujl-E%*L;_-J5uOGg?W~`fRRF>wE*(rJhHKv5v!P|1^F}U} zbYHFp6C7Y26BpSmY0Xg=dqIMJ)hzKUqR=zg1Uw~-#--Jg;$;ap!4G1rsmgMxXAUL~ zQYtEqBcjmH#>%e$RRsS|25bZX4FK>-2Z@3A09?+^#EwR7HG!!B8UTP%M5J+^!bAwC zGw-8$W?vd_SW5If1WFAlwejJZz=Flhu?%2K`7)ly>v21(gEhbh;yOXYz>&;D6vsZ- z%G7jkOolgZdknpW0eA|J<~Aw&Yz@E`iKIu_Yw@KF)_FK4Q^L2%r&?ar7Lec_^wq&v z$jDUhTAOVSkJ7_Vn7I(B^P4gj7k}A0v?*Jk(ovmpuh)EpQ&O>MPP^zvXilA0M054& z@gU8|IC@PLuoXh5XZTA_pNh5Q7oM}~KYNA?lL}e5As@n41U*Ki_CSS$1;LpJgom%s zNiOA+Eb#5(stw%k96dVXX;55i$bOH}ljcmK)`_o0^@omM@LbwqJFJ)srzOPk%$dyQ za2MS_wUI0`7WjE<%nK357caqjyo|tpFhlt4qC82+5h&IFQFrz!X3r-~^XB(^0jw|9}G}I;-J!=Vj zJqEkBF|Y1JFznYMh`O^J@_r5@%R=Iy=t;v?HqDgVn~;wzJ0O3s(;4oAGMh zztEo;!|q*-ja#eL8G$qf1Rbtb7MbNQR|`s#Aq1r<*FhtD!>G}mHO_(bmcOjA*465Tl3ZL1<01_5IS)wR)nuQ<$%i^iDATzYrJ>9OyUM8TW(UB-u z?5`l!>H>h{Sj{LW+zD+N<8KCLYtgdhnF0-2;F?92XbG?8ULNwR!Dkpsp0OHteloGm z=6%2-I%!6oDVZ3g@6As@p+q@@yM=D(;qy_cBB@#QM20e`#}yXwVMgv?!ROMJ$6bR> z9V+oJELlepgL?U!H!~cctUf0&qFhHJZ%P0;Z0qskCvxmtZ^Wx_F0L>Zeoq!ZOB5&NuCD8s&p+ouk*dav|C-G8zq0`>m>E zQ6PG3U#f(jtoA^pB)|^_P)rC5@D#ZIGO87TnZZ>Ka7hLbUOR@Po44E!K#*m~IJ)Y+ zOxP923V}=oJa4H#NL4?7ADDG6X_!)~UiADCYKbTm0p*njZV%Mo&*TP(gwcvY!9*O4{sWSi&A$A`5#I29xqJQ6^D-#(tZRa=p+!n! z{)#4nF|z)AjSV^k2BlILn{5e+R-wDLm=YuL(?{eK4|tb44&b2GN9&PZGd;yiU%soUJpEO=nmJ=7)0-tTH6;_3ja!or z{S#Y9&V8SayCcf%Dx3#^-*!u^s-EpeCT%CGJ*45^HSB}XYy+{e1&s$M^a0pi|EPwl zqmUKQB))yx>{5H&G=(=-Sn}K%kIY5A#%fB3M>W}0Q)LW0Q$&{ZN;^;vg-Fp?(OcyI z0ark%zZSj%6cTVa@Hq|~zySdcoWqCt7@rLPBmI*V8Il5N7_ua>lW55di$@ca3GNh< zZc}9R$v$dRm5szKF2&`C)f|xAT}H8(lV)vDVEZkqoz|L z(ivRGV%%7EcI-?*#IPB&C9#{u%_mL$_(zdS^ZrE>oh;q(vW|m)eeak2h>4ccGUPI| zs`!k#$tt}3%$%8kOxA{DjqXitm^8zP+hPgAYTmiNa?Iq(Q)65kk9WZ5CQW#3sqnhyu-025`t}*CP zyYZVk9kK(FYaX(yRjse6E)$F2vfY2}GAznjX!qRz)DRZlx-GCAQ^qr`8D6@sl?DEI z%BN24x8ice67z*w6}!~$F(Ze7OJd=@U=TGz#iC7d0tCxYX}|@c@;XZ%1VUzD_FMUqWC5Rg4HL(5{lz# z@cOk?8RN&lFP~)a%273(-baQWyS6$Rc1s-RiS_8NTOG=&wwviFt6}1CFvU4Cq|n1# z=4DPEnUj{v()#3a+^mT4 zeZmcLn7d}Yz(vt7LhMrmmxFHS?3hTTfn++U4 zBf*9TF%4=%hto~p#TRQV;d`IO9EK1L3m z{J<0+B}r!*FCKnw051q(4=T&yq084fLbX5#al*=aj15sPO*1M%|Xvor8?;swt$avlw^{#mX1Yq6M2*6@Dt# z=h51|W}clgxU?92u_KeiMArOK;F#?>waDM<9;u#`C|!FH+`f-84_z)*aRi-O>gQ_y zFRYjXEP`*I%?QtmdfKpQpN^{n&N~*|ZDGUp5@0m7cx|6sYB|&N?=*%1X<*4N?b0FX zRCNNw^oI6y^uQouha~he?O)V~8KLB7y9$N?A$JWgP9SC}XoOi;O}U%Y!l_o@29i&Q z6}XwOip+{^hxAu?-`~P}&5-u~GsX<_U4=^eJsOePqX!bUNjFCKUf+;s8;#ICyunE; za9e{d8fwPBf8G0|Lp0D9vFoSP6QDqkJd?ln2J{Ns2>SgfYF6!Sfs4n8kjjQ?-e?&# zJ#1P}N|Pn)nt>q+Pn`gOsO9*T?2!HPAgJqvj2S}|g2?Mosc&m@l{A)o-`Y)lHeoS0 ziZrArO(K^cS?lt$kf*)rYm0ToAq+or=z7axIwvDIY@ja9#I2hT(i^#k<)NgH?!e^J zkgMb8HMi%Io`W8souPy(2hQ7Co5r|FkA!YT+5aUmvzBY*eiK@A5qJYeJ8@acW{&R~ zmp|>%!EOiR9-|?S1_u)uFASLNQ{ig!y5IL2&+1|L%|XwUP(k3hJE-0v5$F44VP!(aAVECl4(O-aMO1M@Q<0kGD&`YjPFN+YRcak zJ*+6+{b6PL&nUI!*Mqjena*M_G32<74x5IN3YdLm za9tIT;Bi#BbCqFTN4=p!Vn<}y3=Gs^?H30>lwvcXNM6@xJEbJKsj0o?EMx>I9ilif z%IFykN<2*nHPk>L+Z}Prmpl22a$=17I%AUkA0BQHlE}t+*f+VekYDNBe#rU+d4lHv zkhhcV?i;v*DHGVxJv(vy0R#)`@v0|PXPN-6MS~!?tgMaT1+gTUu!U_yV}tL#FArw0 z_3aPVw5s|(=x}aIRjC$rD3!#E%^20u0bqV5Y7Nxl&H1xby~HvdI_a@?SebKtifvcP zerl5SjqZrJgFreo#tiJxp153Hr~~3V=FFImkIcXGJFM;xIy~_ayx_>jKJ`~Na|Uw| z2o(dd6ZSC|!oAib1hIi$k8a_5+F-)TcUUk66^=AgIZkQ1H9rSg?aASYGkbP)vNo?L z2L=75+t{2))Zj)Vy(l4cgGk7XVY`#x1^jq~StjN>pVZ~hGK(*B@Bu&b1EC2CtDAo= z-YV4~%_25?IHq-4h`aUpswqeOiG#hXbniaaxjDDjk-;betlThW1v3(E-n?Q3n79=N zfL95tbmERnp?3Rf&CN%D9F#{iauErzym}VC&agD_(1~g!i!#G+F@6PGt8~NWI;$m< zz2PxK$nF<@Rp}hq*1}+@@4uwTk|0D^NJY^TFci^xn!}_(qbZy9priKar5njuBt!rJ zy8+Dz2z|m(NITDC8}Z%a`P7_`yk$b7JYS@2tRP(1PY#pAdqa7{pHL9wT;2Jv9)Z!} z!2Ii@T7rN-!PGiM^u@2x{Z|jh! ziV9DJ{H~$9>cOQHc;AURg_rym0sjTF9UibtXVcUgButGt)K267*GoRtm@!YZm9>Kv z5GqRQGL}vR)(h(=<&2U(5HSTf9ri?sfeydHjs)>w7e7ZNy_CynV3bUv8AJep%>gw2 z2zF2@zj+AS^`J{ipyEFmkAlC25cNU-L&gIa000mN007`S000000002WmZD!~z9bmK zgt%9jm_FZ0XteP+xEQ*`GK9lHI_(U>Z=ith9S4+_sBIWC42Xbxg! zWw|8$sIBFgZlSb}dV?i8XUvdW#buw1Xzr~F8ll>5HuMyjSTnqSZnE!$_Bq%Xd zz2Q`-gCeAL-V}sBm+g(Et)Uc`!($t5=~6h2B;q7_-%^ZCR=CYq`-x70 z*^}|ojXCs*U{B_ap#PS+>_+mxM2mjyccCV!8d85?-to<+wft*G(Z5|}o(ar#2sNgY zyvAT&HQ1x*MPLL<10xRlmT$$Rfl57W0k+4Uk%RdSW$(<8U^2&)!h(f=r=9i%>|G*n z9qqr5m7l${b9AKJLbq|J>oI2fbJgp9y$ zM`A~qC1{Ib{u@mUfd>F1!^4kf1{fV0OwNI7)rI9g__EmF`(SH@Gm3tdte}8N*5S#g z7^{QP=Mlic&z53D@xforIEkI8B8!W@n9UDsO4GVw#IzSl<45%(U5Bt&p5?^Yw}}wA zDRZ{!QF=@X8%zn&=QQis(-Hb@<+E;hnZcueXCo5yN zRq8)V-X@c~R$(^lDmQ*k)P#Mh08zpI44TO6W|Tjc@bL}1s*T~i?bS$oK%BEdxb^}> zKcfsk;4xIduS>~>*3Ff~FszPklu|#CND_)o6*>E&Hfb4=sVcH$WxJicKH*o)1MJoA z(jt9PMJ$(`Hk_(=Nc9jg$Trft>{j-4EJ)_ik97D3kOnI8VI4y4ikSdn7$Ud7Rf>ri ztfJR|N44KTD~3u+3H{zlCKhoNsbZe+--p|Yo(weMFeRP*cUBV%SXrbkLo&Lw*w_V+ zM|6 zpxuWN%iqurQM1Qf-7lR^1gpyG8ffY2b$#A~ub8($t7*WcW}+&|mvA@xLDjKZXt^sl zO?hR!6G>z4*lc3{dQoDXbqpkOUaOtQ47{UI~S3-4QW(eujpBg7*qqdK~=t@fAOht7nA_B697m-833H1 z3IG6L0NQv4DgYNK04UZp000mW0ssI2G$UX&004b(yW91;rQ>zH7N^zHVfxsKy_0eZ9T+YPU47EM+j3*hUeEW{QO|0|Wt~K@eJc z<*_y(Bmlr4YE=-3AQpcNm;eC)8JV!60{~F~rzVZE*(Jp!5=GBQSn){`H0s3KPZL{8 z0e9UTqmWI#_d;%M+wN{w2Hb4-J6$%m)V?_!Ms00+a!T9UDSmli*A}gOe6%XAR=!Tb z9YsMoGP%P6D3D0p9I|PWKsW#ZW(3S=3;^d1`JQg?+wNVvnJu=q5M8&L?q0jw?RVF% zEn5`Ux9@S(Q8JK#Ig&^SVkt2)QGf^t5{*I;0VId{5#a~;AL2of=?8#4 zeSelr1Oq$&B?}V;j}danNe@Vc0rk&7EQR`n6l9JI`ox8fISPg_dP<~#DoSBwVyQWw zh9;{^LWh(WDNSsU|bTF+8NNvq5}^elRTwTX`PMHVTdHk zdz|d+X;g&Fb~GtDRn;miNLgRlmAE*5`urz(`$C&vChH}UjgkvtktxWPkI= zXa4!G@gkR|7iXK!iEfXXm7x%x)nd!-_4jkvnMQo(1m1hPlqyURcBTQbrXb$Rm*E_RSbHve$x8Hc1dK64AxdG z5+~@w#BdUzMuC+buoF7^+v&dqk+@oEGGFS{_ya?KpY(kCH6`#W$HYBGPE@+sDsDO& zB?vM#Kun^1bak(%vxVo39TCzl(=&NPq_7#!)HKG<>e!b$TTf1qOPY)kyIQtkiC3Il zsMHhES@H)uryGnO;OapY<8F0hW2n%GwVu;Xk}Qg28ppLZQj8BOQ(E0d$r zR&*WvCS`{);FiUY-3NtnY8%hTGdc98DXLD(F}*CC^wy#6ElB~#s07RuolH^bICR7SrQk_<$^js*X;hw0m z&3toUHC)Kg+6y+Q>5r@v6LK2Oib}F3nDsfYgNSlhP7ECJRclRMnORl>oAe z)tAnxxuMiycRCV~WHiI7P(Cfj{SmYk7sDeC=eDY{|H;?Bg(N5|?t<+cW6u}Hd1t!00z zZ|oQ=aF)3g#&;za=IJjT{B%vzg4dqN#+TyhtvO=i4VAwy&y}2s8{(yCk`}?ROMW0P z@cH?ZBhfd~)Fc~zrBAA#8(Yl%wXSTq?IWVfU9OQ1ZUHoHGSY73+>#y;pPYj)XnPJD zjrWQ)Kj5|zCh!!hAprcSe>OY;qG`}AI@y{)X%&#I7=jIPCuW3zV6|g>{}cLXgLI;$ z_HR0YHCNNbW*tlPiPll*RBAM41gsyZTPPqq;3P}^08SfWAq*Afoea(wGBem=@P`S^ z&brVMB2*KI_X7)yZ)DH*ogzdk;Ie>*o209q)!y+!@ zl5Z%1LycpA9zRVL9YL)tb|(ZI_Op>J(o6Yg^)3b8_5C}%tKAR&0pdf-VqO)XcO>oX zsetukIqivRnSoJMvKjUV1T3wsW62jI9og_$-zWqeF0;l*YT;JT02sTRer3}#TzSWI zK|#aBrxH3RVgQf8;h(^_L}fRM=VlpN$HihLUf-}XIOp>#?sLw7$vm*Nq~9O&0id1g4gLCHu{J-cz4vZxjxXaxs2Uu`j6TTT#(ypN;VDmG7RAq~vT9 zdk*4?>sakGUR}Y~tmHFDhQ(h*s{$L}j?g=2nk0=PbYUC#1wZlee-q3qYwOBBC~=qs zRhk~N_&7w7u#<$gIwK;twpvAh`|+Qg^0Wu9hTTb&Y>*D8^yml^FcYH1yDc&JzGWF@E?1g_>i?As1M(v}E{BwK)NZu^v&GP}axG4~>mgZ|#qXOY!DLf>o}y%TI*mvj zs;;gRlp(SYGllv|ZTNC_vr!2*Msvoy zomLUsPRh0B*t?HF)3oEs!@}L@a=Hf0($2?Qml?oi&X(y!?c^m2#5@lkjGLKP8vl>+ ziGyA=vs>Ed`{MhqXWR5$(2`k@t(>Zy@`6&1aP4~6kY`DS?Wk`etBTCco!%!+(@L_2 z;dA$~u$y)vvlrgmycfH2n-+p*9Pb$o@oK6-FI^rxt*)(ySZ|Tk3YY3k6Ipw*tzicf z1NJsxDr_~`{_j`13boWQCqf|wum>_|OT&+#=haCj?hX-Jb>n+w;+RSyG$+LqV6lXc zW77o3+rMCNeiFIOvDcK>LTB$~+^I4L8`9>-{O}rpn%L{%XZZ30y8uze6D)jEH;}8) zNWS?ZaR3KU0WG@Xbl4NzAAL{6V~0b6kV84-Lk^hl$Xd(z=N5>CFqc8Lt@;61X20zA z24)yh<=Z!9z_bjuZ&9Txm+IA*`kw*=K2UvtxBWL>*wvAE-^>B$#}Q(}y!;xJ6an>zjQ9w6Kc?kx1%acIvUYc%Hi`g-Aw_Zh@$*oG#Si#nM9Z!5 z)u`(o1`{|D)DL-?02R?htoVb!op^hB`9bWH0F48Rn)0xp6#>LYFx9AlaayNX`2yTr zCd+3^MZo#-<97o14=dA(D%e~TInzfFZz4RAgc{Y$6UU3RO;{|nA_DjiE?LQjP_)34 zI!)gs*N=Q8ak?8his_vWgBuMUD%pU=Rh~^PoSi?}?(%z%3Fw`gNZ0p&sw$o5ojzhF zl-q`;YlvyAtK>hUfs`wXMzm>luSyVC5=nJkQuYy9&w~*IJIz_|D1v!%3NtVAy1Ol=q6ZJGg0@pup$^2y>3pxN!&%HM!S@Av^%pyuXkW)HvvT4vRzFm2T4iPT{07haIG2e)}F`r z^!q&hKXsUw)GLc)LS8|!zRn$o2(yv1n65m3v|O~zemXsWBR3N~Ao=r+3;+*GO!a4) z-n-mx$Zpl~Yhj15K1@d=RlRN(6i5^exSxq@zVdWTr1ZRUVI+BHBQ@73 zwl*MNp~vX3X(g1bTw=0!3@#{X2A;I#tueri0V3m?=$@LJVLykmZ?*<~ z5^!i8Hig}EakkB{3E6;B93F9EA~v5!-*(wkKM+3PLiJ6yJU`c=YvF9;{pP||W~5A} zX4j&d@O;YmJ2&5^UP5(omeC%%fw#_y=G5*K=ZF&B&w1ftdr z-Eg1%j{uvT`4M5;v-XPP2fagdagJ`0PB91Jo*}~;SiAB!#C`z9J24;b%ZJ>2ju(mQ zS$Kyi1@Zcan&B^QWLGIBGJk){k!oxgh>2AWmHR*=P!a3Ss0lFdjy^ljI?ZVB7e>E1 zQCXh#c9V?g2V~H$-W?eKfLbcocnWQL(2g}A^l5_YkaFQUZP4j#=p;*#xxF7qi}Yc3 z3kHet;94zG7Aj^<;v-RK88Ntcw?Bl20*-?qwjnxpypnTU zZw<-<*Rv^%GzkQ%p8MiSN?7x#9mD?7U%QWV>&!*?AQ9J(=@*SLkKG{=2n`tF-ClBK zgBsGXoELbF4$8wUfGgo7SfF0|qsZ}-7d&4Ws~?f%Tub>-qz})}K;x#O(oW6whaU~K^UOE@Q#fs;?xy=WHR2*%j zW?p8kN*7Ai>|(0hd)5wi%N4#UrUPrOmbb2Wtyv%MYc;%41?1CmzHj4%hLFjKW231V zT}Vucl82SYEhetcW319nkYGDyjM;kTrf-=wU-x0mlQUxio-rAWMvRz#9#j2{>hMhQ zV)b`S+cQ^-XM!~jwCHRQ-J}gk#;b7Ce$S-tEMvvnRq3FZ?OwbaFF%t)I^6-MJb#Mu z-Gw`reLcy9pH26Y^-e7WrL%x+>ADH1rFwAZ73c>ltiNmacUCay7>M+ShiD{ikwSqA z*x6FjQWX;O2v=T+_Cf{|8tH~lvu#o_Sp%Ih8-2idj8x0kW2X?>9@1}*lbnks9()m+ zXQ2ft8sAb~luEe9O9*Am_#kT?0{SA63uH!)GWI0{=AsMXPv+Q0XT&}l0B&TOjkE@f z>3teI+f1FTF6mMsCp)fa#9tHP)9KBb(Ef} zg`!k3>U5)+nNmDzo83I>(BJl>fbH^8C6<2pq6R{V4uz9=DXf8|Iz_^Yn7>NhH9Ne~2#g!wX(}&&ShDMNSzj+})qfoNb2E8G`#eHKbXMdjl4;!sh&F!e`Kf{{Jyy-FiT6bTr4qb^Xb zLBZXksuZ;D2D?;~Tu_Q=YzaZpl68=5T1C5=aiGuI6=hM-fn4*FXh$q)poU>w?%u0I zS+R#`reTdEZneqmlUDLMlhEg7?*J#FN;@7R+IgR4)DWR-#~eTSc|=%~ZY@X9cS(*D zj+HrpUGLxsy(_Ffc~8_3*#%W#%ZZX}~lBb`HJ^yn;DC$XOq-8k6Y#<4sXHr1xv=5J)$A~^-?%3iH{Ba+T`4bts z!`#NiYg#h#x$m-Ytoeta{~=G$xBTSm<<#Nxi`?KqPjcKB7Y~#VftkN~FyR!~oSc`! z@WNhP87EWxuHT;FulUV*A@luX|7FV!`S6c732SfcH@x>RWVw8k7{~Q{r~PE>xN>3t zi-xcLgMReh?;QQ(8J9fzCtv#mv;Oh&%YI{|94;}*({DpI_ z!InWtqTkOwinlQ4kKB9bWBlg#r+#qbW_*wXFy`N!dAgzCXFp5Yl>4VY*)aci-0IIf zN*#U|3;jCw_C8-nxC(!i+vvCyKjhl<_!|qqzJmO44@Au8-)lS=STJV1_ES>T6Pf3O za^~;27huAv*8LR|d6jX%XCHxz4E_zQ|MJ4$U$F3t0DgmC{p{aE?=|xfK2Y-S|2XYe z+3$f*>oL4<{%w|L^TVJgFy2mF;}uPw`_G=&0}eX(UJvu1)_wi~^ZF=pMP}I)A6e+h zCGG?>bUE9fa%g{uFPvkT!h9&Zlt4ab#F=5x%PcW+1hI_d#l#A+S%ml*2Rn4Q*C66i<@s`M-~w; zUeb;g6Fztn4`7A>4DbdNK!AQB0HFW?AreHID*)>~d;Ryi>-~P#EZfVLle^YtyRlbF zH?o^G6Ag0>5D~;P_#l2n{4n*=0*D9ukL2N$a0edlqkS3QL#1ts&G??TnpxuPH8dX9 zcrZ8~drDem0s?3sY-qcy7bNzI^bQ=c&hECn%?|NOT6L<4w{>vL-S%hmUAElq1-Fds z6>vryb=&yjX+QYrt7?HkmMm?{!>%`CJ|k9DcAPJ`!tSv6I&MVn0H>@|D4Uv#JY z8*`8KF>z)G&fphm_nKT+2@kkR(=|dX?lqu%M22s$(9Vs1RmhL$pyu@XKp*_Ujicm+ z-nh~uopLuZ@(g~b1RE1J8ybk48hJMSYzRLlx4iNY_%#r0NZ7y55H~gQZ1~s^{YW># z@(}nn5Nu4?2#XnRYvkDQupv8=>ydWMH)Nz8&DBXnDJLVSoF`Cd5vLFojG(`NAt*sj zixP6iIEA2y1cf0e3PDi_z>_SJ@5-4QaaKv#$Q>f~`A32gG)KroPSS{$XpBxFC?dp` ze~eBcQ5^v?qeR0|QGObNnjPJIvmataG3&IP(v6fXE8jy#mPAbw5|PA3fk!J5QJU!_ zWU2FH3XS3vf+7$Ug`h(OO%x&krZeHSye2+Pk9nfm5-~Dcl_e`98M#PS*^@mIKO&6C zITA3U)|oT&60`Z_@e%!PN$xhT9FdjJY!QrXlcAa0Gdyyiwl3Z+JIM8?BAmhVJ~rQx1Ux z;NjKAwUDl4rQkWwJgpRdKXPdhxrsG9uJvM=>b;v#Hj9&{+aBPNi+1)+-!7tTc{xTt zQ~z(W>r@qQL9{ir9^LVbfIEf0#-Y8%E_s3%IpPiug|%)s7xJ%{zCricCl7hZ8O%Sw zJHIiT@yR}T(wVCSHtIdw#9qxD#yqa)v54(1qQ>|IS6s1p(K~8n_-*PWRR@+S*ryOP{mGNy#tyW;l-o$J8stskU@W4Nu->B|dqqi@-JG=2~UAxU+ zX!>(6gI*iog6U=pJGs~Kd-|T0#Icv~{rj^jyMFZ<@BWzDn&O%}>Dk)}wcz3QuWr$& z@{5MF1>br^0`nSvhm6A0qrf4CQ+xS;`45K39+7%7|2EMP4hydxhoK%)NP^QTq4%9n z28;gc*~H#VCoyQ_51-h-am9jwtQ_l@Yyi>eI-liLIbD2shD2xt+OhdwAiLza3UMY0 z*Tilf9y7Mp!I9hS^zq0ScBP3{jnRs?i0-uc>k#C@r5B%f6FHC(!Htn$?@2`JKR}+l zZH>mUjkmRz%6t&LoE$THSupAi-Y=o#8hf}^kqM#k)f(&STMm95ssznhPseCI~sma(`Ob_4qeJD8FLc%?Th)~&F63%Zyr z(j-DI8|8jn>XkkXBUBUcI&O>k(lJOM^njOkUje_+JFPUGerC!JwXF}8O|ISQ#B&mz z$GQyLI`p{^s@HWI{XDNGw4ScaJ5f6*i{3Qq9nf&kp~@1M+k>tghk8(e6qh2bD&~L| z^qsHVqzNxhsV`^*sK{CYQZnqsWdn24IvfUdK^LIHd8c&LgRp3PN9yQ|kPq{@oG#PP zeVJT4gQJI)>N*vC+vb2yV@_Ij8xo6pTJty@xd=T;Bp;OSN`_A}hwVh7q25q$9LQwU zW?G*6C5tcNw9-6ulZj|N7I#P(p-=)`a)RaN(xED#A!&`(jsSOOFht^fC5;5}?Npsj z=PU23F8YLqvml=4Zf z^H2T`oNY6Tm{QLs`9WjnK>MlQ^@hxtlB;*3=LDswuPR_-u_By}*PS~9I|wfaSN?6+ zEPVH~X$$A^1O6#JL}zpOBklhTOX4s?I}_^NF$eqebdu40QJV~$@WG3=RX&U#evmsm zeo#NOF00dESloaf4MjppeWFl{nSt_C;wiJ8>lA}vrcq~h-f9{m;_Y{nq>V>`n67y{ z(;Zf$Cv<7hbtm&3VbjE6-)ZrcIUX!ubb2Hk8ozh28f4S}y;;m2#pstnc2IiK>KscM zrKJ9vOlykS(C6beOPq~shok+G;-zP+X36W;-QA8pN?#$ad|ytE-;9YTc?`%4KOPUD;yn z-GN{R>!JabKV{P2(4(fqgO@W)u&KD_=tGwE@dLN-n-JVb)c_<#l0s~j=pyRg6Er$- zLqxf~Ysq8>wX<|Hxsl@`o*aNcnH?Ha$xdjvoH_?sGS^?aq%B z`W_@$oyav-T|rs`QQ`Jsv(-wNWQ9Sc_J^37oi%?NC?-f0&nrl;Q1?e^^DbNXOp0hdEs9?45`8l-X0%C{5Zs zR~RQI?kvPrxjs@${Im;g>7is{19b*U8^YlN=8Gr_B9GSe$}ePshf`!b zzR2vGtM;~KG2vm4I{<`*pqKD-;oaU}*L;ep1$*~PwhK^E+BvMV*d@-v?pRZVGDu`) zA)W`DVj%Ggh3?!>Wz8r+wYevrY86_zZ&%Y-?`$=2M}}g(%qRBI?ryAZu^+1IUM=S{ zTW-&gdb3o7V+7-dgj}L~?j~9tF#B zoQ7XW5ceX-kdFPEYK&7UK{ZO<G?pQnp}U35=tM>5{AlucddT?fAp$^GACf)h0#wuT6DwPjxU2%4}E| zYFbcfiv46?9cTRvt8L%)&WXfRI@zU=vSrUZ5d}l|B*F-o7$TgIN$rwbY3)gDX>6%( zId6i>hy{snj8+q2VvgeD#XrbodxYE&JxrF^b*C|ASCp++dx-gLBNr}8K`tZAr^DAT z?Dx&1iD`0A>naSa>X>!ewfN@I%C;Wx>@+$n2Z7d7Qia{jDtJf+L4nM3+Yxp?@PljdGrKmg>ebBZ208BGAPsx02-;$J)2 z#Xe(R0Qyl?{VM3`0JX<5SQI>8w1OtNW0?ew*txHC{qjbIG&iu-WLfn##0hT9s*MnZ;0=P}V@8y658@#^ zm$y2kkU}d?^x%`DP#lUX7tkE7_?SVRau~A*Y9H+VfR>?qj>&N3b1N{I?W1j9*oJco z??C3UCw2fU;VQLFrlwkh(9;nR^JUfn8#RDV2CgtG4B*%MtlMIs3}cRhv%otBurZ-j z3m;i{nFB9mxtdUccP!SnT~HX>0m$`TA%N+QEP#et>x~~s#uoW>7Q$E70)+8IO;95> zRjh}*wtQdEiO2YbxJ{rRIu?uZbD+=s1bU~dBwb(qpbm%O#bpy*oU&e7V3xRkMeGHy zm88);b3eFqY(L{MqN=p?>tTbl=8uA7t^=!xigp7LH#s?@H@6L_G!oa(a;MTo@2)pi zB9r_A?cu7&@YgNU_v{|MhN}lk)r$sAVMO_(F|?Ke^-Qox$SU2@#B&6lqI1!`09z8= ze=-9JdqQCC3)?3ym-W(WCpjMcxB)^Iu1^o%5)gjE@Rk)`o>@{yHwyh2D*&62yC!M= zWf39ZS3hgMKLamW=(I&=@jV zseC>1tQlN&#R1i-u@BIjqpFZPIcK?s)&na@N*HI}a)N`nEt6qLl*zE#{duV)28Tre z0Jrgbul52z#l;14q%B!^k5YnBs=P)8fo1ZDpbc{>^&7W~5NC|3g}4C5UULPip&<0j z$lA{lrvXybB6Y8*s#cL z!XKwPEFaV2J@9sr2r(pTJqY8-Euuj}ifJ?;!En&3{$QEWN_*Cn8KF7y0LH6#SQW5z z>Ca|Sg%PxDhJj+AQph>rLyaci-!tw1?7NZ6<^2;NkD7`rQK-oP32wXiNh@y4<_73F zkFf@oJ|GEuMfG}&NKQ=t-%rfUGi`Pc5@!c5LvU?U#Y z8JL>w%Yx}q9(X+QZInZ|uoM)p3Rr-n2B=Xv6>~v{3|L{58O;Z^tz*C4@(IgCg{^_Q zeb_9Q!_(0EHZa)W11+P;Tab@lxnQ;i)mhG%q}QYQ4Cc|42JAkzc7uc-q?0vR_}F7F zr^#C)n{79+?!fMH7x-|1UP&%B-|qFe!k^ZBQ`(aD13|;|t>9rz&WPJEU?H$y95YY5 z^f{lg-35Y2AcCL=QS0l6^Oy70`YD6II{7E75Nbz%Y_@^gHpce;Q8#AC6UWRqS z^Bp=&jkOAfAbz+q&yD|{rQ_NLJ70u2YVr*91C84T;BE)r^Vmy|lP(5$8UAjeUe67D zzOu%H1CJTW4(XZmPP7#WUke6VZ{G4C!DG;NG2CzBKyT{uMwJrP(ETddR7@yyMo$|x z`$_}&mLMi;pHMT(>l{)}{Xo}9sA2_{gZ=tZ6NoTnK1%7w2C_4jn9Yk-@D4I#0B9BD zbqXq~gJq*_z%tuT4CM378#zW0A-86k9!TbnKt8Pz^=1D{B%pv;_8Hlm5qU`sH*x$J z{cQ>P{mM2W(l?THeQI|g04`*`6}%EBaPd*2cl01mB`Q-JsG>Jm8JQNA8|P*q&7WdB z*9eX8(nmcMWN_~ynKpYvnNi|tP=5wgV|tN_lwiT8^%yCbmEoIAWy7-t#|&+?3|?96 z)rG-g11#4uvkoJM=PqMA^$2Ffdp_s}5E%)xrK%r*j~dy%5*yOBG$#b9TP5)IXb^w% zd4Z}t03KExS@uK83W;ZmNj2kEEpUE}3!u{8IjXR4tFZ1qrl=HuPnGF6+%ECsbOh$@ zFS{X_e3`Fc4%}ZdhDcbdJ=)}OXXe~|HK)|Y(LIu@^98Rwjq zEO&ww2X`QqG>k;k&u3J)q`q%4PYLG;8G@dkywL_Egjyn%EWuGjQtGglX3ouX38{u+ z<*FC>=RzLkm44PPJnHo6fxk%lTucuE`TsOyZ^-+B`=9y1pn)gF7v&Vqz@Hh3`=bbE z06`2n~(ndGFHE-`TDsJm&c%*4wdHl%Cv_~m$IrCAxhA) zVkxpADbeLZP?0v9q;+hF3bnaVC?FdmVl5(;EgO__ZZ2XoX<`$qd}fb{8_7$bHMUqNsY+)BDW8TYRLzA_6~+m5HlYeq zW+$3Zuo6T;RMrggd!s>+?-J;D?h9Ch-qKg z;i^(o#GR(D>&Bp3R4B?nt!}BPSE>FlGd5^Fu1#NdsQFu9B+CYK?^G)C_eUB44`nNLh+2AIGkpV?(RF`Yp%u`@UnHu1!N zhLkekBqjbAjw2Yz5}24+DI*Hf?+9-nQDB&98_H6`Z^>=oiL(TrCiHeq=8?OH|1uC~ z^%x`5do3pt1k%{jb~`~yJ5lSo1iiG#+SVrd(jaWRo9jyi!L+}&pH7gc0q}Mcq?+R! zZv=Uo;9F29h_udIzbDAF)!e@)2sGNbp-+%$zqx=-5UM@6^Gy(`Y0MQ}f{~gC-NGj% zwUD}qPl0M6c}a;SYUJ(^O@!dd@I0ZLa73X$ zY4C(&DjcD?&|@C=`=KNtl#MqNF4e#U)WFCW(?UDU?J> zNhFF&qESo|C1O%2iIb8^6qH1wm?TQYq)`$kC6XvSp_{lw!J+x7FXD;b#1m6Q=ab&& z6TgHfCK8Pg4uww%$G?9s{3|~Lru*1^5}OeB-Vn%y1~QUxH2`-9002|tSVLnP5+DWx zP4+|@8uV`1J&>N8e`9wxu-MRy?(!CJ--aDz$GF=~0`8AU+E*(XpV1#mY*w+*Nb$B- zkv=R+@moB3EG%pKY1gmTlFr+2TfdE#uUDh#l`12%swy)XA~?9Bqm`yHsJK>KhN`ND zFs$<%<9-|n2{=X=bZhg?ki!}U1V6YTtQMyU(WDeL6g5&^X=%Z7uBRPPRo`86-%047 zDUycoRo_7DliD=kuBv0G?_OH+&ik93l~WlA&wKCL#c}8J-Fm~!c?tZ)=-HUSpIK*( z009&g0RR9I4Mzb%lw*j(!QL3DjQOf6tGr38*%$8b-$C+G*9DU1&ind7r#V1tuIsFN zBkl7EUH%d?)qHbu*@yc7zed%``ERx7;KMmS21SX(*O1|^U98zy(#r?cNXe5S{srFe z-UILhvR+$=yb=MVJsU_O8?@8BfInXNxYzjwuk+^1mhf)EX4h(HlI5gNUI?S8@8Gw(3WE>eiT8VJ=)DL$|0o zijEGvk*u&AHUf9%j5r0JxNQVh&<`IG5ksd_$dQw~_Q95qSdG&~=W${iKjBxbSg=>3 z^{kKGdj!r)S8@6vy_>E-rfVdwh^L=>dt%gMg^@8@QDBU2tiU&@?on4c)atnf9jPDO z-Ps?buLj#vVL&t$qNdVQ)tmSwU%sCOGuaUT`Y31E6?lpBVl&$5h|@A?7g9xxrBt4 z)P;rS)G(4Pdx75s*5>TFbMjC-EoKzwpIsoQBObRz(w}NS5}#^1QjBVDU6;D1=JT(A z!c#;5RU?uDRr`^hRV7K!s)!_K)ivV;TH22atu09sRE$B1G4OW`9e(XGfGs=Ns(5+y`@u4Ns6kz^;5U)rYS6+-SuaM zCG+cn8I~R2*S+IAi&Z;)txUXF9v+c7$1pYatyiEoYql>|=<*A~Xa6sAoly3lTi=>) z`vvXf?Xl0MiS`P%kNIl=dmn}F zKyhu39+F5=d8lb2|G{nZA?k9r4$VwyaI_mRhbWl2(utSM!=bNQ>Gw?yor0`$=8i}9 zWNDCt80oCCTG_9Ld(ZTs=SdOVyKFz@=P{1Y$vchDg%9w5s#?gzK`|_RSXnw7De5KX zLSyX|Eb5eeRPQ6(N@|uY;sg{=>hZq|b{Cg(*cZz&e<74q(X)psI=C3H4gFj*_72cK zIB7|c0){I8`f?Fn;~#i-g||)1ao&*igeU%|7Y=PHzkf!_mUaY54LANg5w>Yf-*}Jj9W{}U-4y_psf4ipJ{s(}3 zziTSQS0Xy#eoounOqV9W%T!X(^IU`L3lk(oB>O{OE;=T}C^I1&68^(yV?}WSAr&zq zSsB{GM^R7<1PsLFiMb@82mAx$R7+L$A0bPUZZ2eS7{aki8F}iBvgkq`)|X*RlTx`} z?nYKAt;fs3Y#gj+DKJUnm5)r8C0d!Boyh?@+q)Ua;b+NZDPa~6zhcLT+@vwTjs#m0 zuo>3}GB_?@lA#(Wp~MbSdRg0rOwmpn50wn50$R?J=9bhct#@$6GpRbQZ=BK`nbqo) zM4FVh03T$ICLi&^LGKb{B6i}R8CPTy5Fa5{7+$p>^h(72LEkHj^WuCcCI`R#yA zed&d7lLRN|wN(G6cA3&s*C04EFKcb)n=F~cn%Sc^bWzkfin!~phnx8RfEiTP%DOPx z{s#oOt}5rByn8WrfAckvPEu~;1J|PXGoU3g_$}{jw;ky5UI?W5)mT&sVZJ&SDpY$I zWUx~T4-keI_llDDm@l)u*-xqaJJc5GUBRo<1sb-_*F0)3aUY$;4_m+W$bi5oxQ14f z{yuJO6fFnfpBL3e)Z3txy5YAL2SdlNCx23#8@lV=klhQrgCtCK^6iq&yiGFX5gCk? zJi$U8oA&ueV5a4Hibx?Jp{Wc)@yX=My*( zL7_7NhVB~}!;y46N@yX6=YrUu?q0n2-ayE&8Ho^2BXfon%n2sU9aqf$oy;6~8J}>H zA=e6|(V|~0e$zg3m8eUa8xk-7JsYyzuqpOft-`Rs zH^+xTx^N`$Z(RqLP=&Cgt{C(VUdUC!mI((V)P4m!0wiLB9-ShsWtBKhe;Uo=S~*pirGTs*K95*3FV&@Z1ZZvE zs5;LRT(8aVhx$2Rw2m9u0ed~~K_>+K?D zQ->Y$as3~}ncAQf`Px+BhWYurUqwNYCk}Ae9}f!cSZ}aN419)jz}OD?14EuQj7E8X z%#CFCGLl{2KeqR z93I_m2RRq+EpkhL`5qeZZZFA@Dd>i!S9QL#ocuX<;Di515AeJnM5)m&{DwdT6}UGZ z?Uh#$Y6g>e%;_3}a`FG(76i>` zmP&lVdBNoMCUt}+xUcScH_sZfJF@aMJ)L>t4NOU#VH&1h(E9s5WOKHKC=ly-4$9jM zEE55DTxES{$aq3gb#=7Xg1ESn06x3_JrvU+xr;S91oUY&5OtS?NMJf*nj>gnH;|xK!p;vm&%_V^CrBt#gE)ST&-YNyWb6|sl#a@W0#~i; z>m$o(W>{vB=VoSS*c^DP8JSff`(OOoRt{y=K8i6ijAu^8kQOiFVY9A6YRG}3WZtmf zkfh?J<7%3aopW%u8OKyPCuxSr0oa(YMje=_9za>@!5@Kol$Wr2q)=Bq{%R!EunQm% ztoS>ixZ&obHjK|T+tb7Le3)`4dNMDRk&f~7`9jv>k+LQ<4;-g(@S%OL4_-Ptc@aJr zk`wpgV9(o5$pjM9{~2-P@y*dEad{cg54z|u5EJ3W&!*{eT{hXjfJ%vY@F;a0u z<@HFN*82RvNu61V2%s4i!^wbFKSOa-c}QPvs-( zb*|>|LLp>$ExD{S(NZG@#Cpwc;n>Whycyunvc`pAE{1-#>?b?RWqK22XyaN<5izLq zG3}x#N<8`Ivbh*zRrd}i%cXMRd}MQ~*Y|+#F6@H~+cQQ)+==?`zmk5$Th*v>#)!6daf6%pp=)r>m|T!9zXv%$ zALcUT6Mtq3n2oAw!Kk14-vkwTET!yNzq8HH5YQa2_Xi z6ArY?2h91VXJre5ABlpB7?R_uPC+ir!7GnbV#s+GP7EJgiPPA@5S(diaorAAD8cTF zo(+{hTmwJS?xrM^9vJ3Cjb7lKA2tJXefPF*(qK0H+>WP%5ZR?E0W`87l_1-d}X zD5lzwmnGk^*g}kFDKoSYTC`RLhX8ULYgRbqRFhv&BaU?N1mOv`CREcA&Ol-s3LLOM zHC|%Ag~wplRiIqM)G*!|=tLR$*5C{C!vov@H`};}Zp%9qGHhg$A0$Zngj}Sk zteKOn-C%ZcLK1SB+AGzQ|wl z(}r`j%?N8sv?Bl?>1bK7jJJ04HGUE{IkB<^jm!^`)U~VD9>-i1enVWHf=1p#&r( zmW0s>DifF>2x~^{;aMSkj}M&%D=XDMuESWZdpS~JRQpQx2qm6g0dBkhc+@^B0pv|_ zA4B|gY7X?aDh2$T*C?k~Ad>?3ZX{SCg<#yJtuvTSKL;8$`A7cht-N$XeNOMa8Ucv0 zrh&TsHQV*=PJxg2RW#lIXFh{(*HiUu9H!!&8X3A$mS}|ga|I3Kdt?+z(%LX`jzS!~lz3XM#v-%kdpx-a|XEtI#F%U`ccf zvTc)Df*4cU@J({p*ZhEm)`)|q1x@yPo?`3uKr};Qua`i!$&&kVx5UlOip)w^oEaQ> z!%%0aOxpsfQFv71R;G*s9C<0(+17TatOJbmV@@&gRIsiV48}%#=lF8BYliTqKl$J@j~wsTyyg=-C z%jEV3!BoWtTqx4?vMyIR2#~9;wT(D5-~$gCg3A?r^3X?$xE5tbNzGbB=&dmhH)cvO zh%rh4Jjn*eCN_$3n^#0^0dYCLV{dzC~ zLJRO}{N-*0x*=|8i+NN*e3?lRr9eQ#E zJ5{&Y+2F>)$J$A*c^}yUIO;G_z{M3|F6t>&WmF< z>e*q@&`PqvSrhE(m8s@FO5RNiH4=Um+Uu4-0N2@VsZl|!+dFxvD#Ew4c>R?IaO#)j z)M(w-=J7+y-}_yi#H*_ye~s4Cl5M%E&#i4osmC?6bB9`X$Q<7LqlT_72UQ%bNJ?4o zj!yVuk6+V>+#&NXlvuni4lgdZEu3(caof~1^%hy^f;Mjy-qNLuCXsjsANoH%MVb+s zZh5(!ie|UNAxx0j2?AR%M##dN;-J zr&q-Om)4Juy{qW;GA*batgd@?!W!q}OH?yUAY5WRkB^_

    %dT8#&n9#M4$?9@Y?VN*Gm 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. For example, if your KeyFile is +// located in the project directory, you would specify the AssemblyKeyFile +// attribute as [assembly: AssemblyKeyFile("..\\..\\mykey.snk")] +// (*) Delay Signing is an advanced option - see the Microsoft .NET Framework +// documentation for more information on this. +// +[assembly: AssemblyDelaySign(false)] +[assembly: AssemblyKeyFile("")] +[assembly: AssemblyKeyName("")] diff --git a/thirdparty/zlib-1.3.1/contrib/dotzlib/DotZLib/ChecksumImpl.cs b/thirdparty/zlib-1.3.1/contrib/dotzlib/DotZLib/ChecksumImpl.cs new file mode 100644 index 0000000..de88dcf --- /dev/null +++ b/thirdparty/zlib-1.3.1/contrib/dotzlib/DotZLib/ChecksumImpl.cs @@ -0,0 +1,202 @@ +// +// © Copyright Henrik Ravn 2004 +// +// Use, modification and distribution are subject to the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) +// + +using System; +using System.Runtime.InteropServices; +using System.Text; + + +namespace DotZLib +{ + #region ChecksumGeneratorBase + ///

    + /// Implements the common functionality needed for all s + /// + /// + public abstract class ChecksumGeneratorBase : ChecksumGenerator + { + /// + /// The value of the current checksum + /// + protected uint _current; + + /// + /// Initializes a new instance of the checksum generator base - the current checksum is + /// set to zero + /// + public ChecksumGeneratorBase() + { + _current = 0; + } + + /// + /// Initializes a new instance of the checksum generator base with a specified value + /// + /// The value to set the current checksum to + public ChecksumGeneratorBase(uint initialValue) + { + _current = initialValue; + } + + /// + /// Resets the current checksum to zero + /// + public void Reset() { _current = 0; } + + /// + /// Gets the current checksum value + /// + public uint Value { get { return _current; } } + + /// + /// Updates the current checksum with part of an array of bytes + /// + /// The data to update the checksum with + /// Where in data to start updating + /// The number of bytes from data to use + /// The sum of offset and count is larger than the length of data + /// data is a null reference + /// Offset or count is negative. + /// All the other Update methods are implemented in terms of this one. + /// This is therefore the only method a derived class has to implement + public abstract void Update(byte[] data, int offset, int count); + + /// + /// Updates the current checksum with an array of bytes. + /// + /// The data to update the checksum with + public void Update(byte[] data) + { + Update(data, 0, data.Length); + } + + /// + /// Updates the current checksum with the data from a string + /// + /// The string to update the checksum with + /// The characters in the string are converted by the UTF-8 encoding + public void Update(string data) + { + Update(Encoding.UTF8.GetBytes(data)); + } + + /// + /// Updates the current checksum with the data from a string, using a specific encoding + /// + /// The string to update the checksum with + /// The encoding to use + public void Update(string data, Encoding encoding) + { + Update(encoding.GetBytes(data)); + } + + } + #endregion + + #region CRC32 + /// + /// Implements a CRC32 checksum generator + /// + public sealed class CRC32Checksum : ChecksumGeneratorBase + { + #region DLL imports + + [DllImport("ZLIB1.dll", CallingConvention=CallingConvention.Cdecl)] + private static extern uint crc32(uint crc, int data, uint length); + + #endregion + + /// + /// Initializes a new instance of the CRC32 checksum generator + /// + public CRC32Checksum() : base() {} + + /// + /// Initializes a new instance of the CRC32 checksum generator with a specified value + /// + /// The value to set the current checksum to + public CRC32Checksum(uint initialValue) : base(initialValue) {} + + /// + /// Updates the current checksum with part of an array of bytes + /// + /// The data to update the checksum with + /// Where in data to start updating + /// The number of bytes from data to use + /// The sum of offset and count is larger than the length of data + /// data is a null reference + /// Offset or count is negative. + public override void Update(byte[] data, int offset, int count) + { + if (offset < 0 || count < 0) throw new ArgumentOutOfRangeException(); + if ((offset+count) > data.Length) throw new ArgumentException(); + GCHandle hData = GCHandle.Alloc(data, GCHandleType.Pinned); + try + { + _current = crc32(_current, hData.AddrOfPinnedObject().ToInt32()+offset, (uint)count); + } + finally + { + hData.Free(); + } + } + + } + #endregion + + #region Adler + /// + /// Implements a checksum generator that computes the Adler checksum on data + /// + public sealed class AdlerChecksum : ChecksumGeneratorBase + { + #region DLL imports + + [DllImport("ZLIB1.dll", CallingConvention=CallingConvention.Cdecl)] + private static extern uint adler32(uint adler, int data, uint length); + + #endregion + + /// + /// Initializes a new instance of the Adler checksum generator + /// + public AdlerChecksum() : base() {} + + /// + /// Initializes a new instance of the Adler checksum generator with a specified value + /// + /// The value to set the current checksum to + public AdlerChecksum(uint initialValue) : base(initialValue) {} + + /// + /// Updates the current checksum with part of an array of bytes + /// + /// The data to update the checksum with + /// Where in data to start updating + /// The number of bytes from data to use + /// The sum of offset and count is larger than the length of data + /// data is a null reference + /// Offset or count is negative. + public override void Update(byte[] data, int offset, int count) + { + if (offset < 0 || count < 0) throw new ArgumentOutOfRangeException(); + if ((offset+count) > data.Length) throw new ArgumentException(); + GCHandle hData = GCHandle.Alloc(data, GCHandleType.Pinned); + try + { + _current = adler32(_current, hData.AddrOfPinnedObject().ToInt32()+offset, (uint)count); + } + finally + { + hData.Free(); + } + } + + } + #endregion + +} \ No newline at end of file diff --git a/thirdparty/zlib-1.3.1/contrib/dotzlib/DotZLib/CircularBuffer.cs b/thirdparty/zlib-1.3.1/contrib/dotzlib/DotZLib/CircularBuffer.cs new file mode 100644 index 0000000..c1cab3a --- /dev/null +++ b/thirdparty/zlib-1.3.1/contrib/dotzlib/DotZLib/CircularBuffer.cs @@ -0,0 +1,83 @@ +// +// © Copyright Henrik Ravn 2004 +// +// Use, modification and distribution are subject to the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) +// + +using System; +using System.Diagnostics; + +namespace DotZLib +{ + + /// + /// This class implements a circular buffer + /// + internal class CircularBuffer + { + #region Private data + private int _capacity; + private int _head; + private int _tail; + private int _size; + private byte[] _buffer; + #endregion + + public CircularBuffer(int capacity) + { + Debug.Assert( capacity > 0 ); + _buffer = new byte[capacity]; + _capacity = capacity; + _head = 0; + _tail = 0; + _size = 0; + } + + public int Size { get { return _size; } } + + public int Put(byte[] source, int offset, int count) + { + Debug.Assert( count > 0 ); + int trueCount = Math.Min(count, _capacity - Size); + for (int i = 0; i < trueCount; ++i) + _buffer[(_tail+i) % _capacity] = source[offset+i]; + _tail += trueCount; + _tail %= _capacity; + _size += trueCount; + return trueCount; + } + + public bool Put(byte b) + { + if (Size == _capacity) // no room + return false; + _buffer[_tail++] = b; + _tail %= _capacity; + ++_size; + return true; + } + + public int Get(byte[] destination, int offset, int count) + { + int trueCount = Math.Min(count,Size); + for (int i = 0; i < trueCount; ++i) + destination[offset + i] = _buffer[(_head+i) % _capacity]; + _head += trueCount; + _head %= _capacity; + _size -= trueCount; + return trueCount; + } + + public int Get() + { + if (Size == 0) + return -1; + + int result = (int)_buffer[_head++ % _capacity]; + --_size; + return result; + } + + } +} diff --git a/thirdparty/zlib-1.3.1/contrib/dotzlib/DotZLib/CodecBase.cs b/thirdparty/zlib-1.3.1/contrib/dotzlib/DotZLib/CodecBase.cs new file mode 100644 index 0000000..c4bc8b8 --- /dev/null +++ b/thirdparty/zlib-1.3.1/contrib/dotzlib/DotZLib/CodecBase.cs @@ -0,0 +1,198 @@ +// +// © Copyright Henrik Ravn 2004 +// +// Use, modification and distribution are subject to the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) +// + +using System; +using System.Runtime.InteropServices; + +namespace DotZLib +{ + /// + /// Implements the common functionality needed for all s + /// + public abstract class CodecBase : Codec, IDisposable + { + + #region Data members + + /// + /// Instance of the internal zlib buffer structure that is + /// passed to all functions in the zlib dll + /// + internal ZStream _ztream = new ZStream(); + + /// + /// True if the object instance has been disposed, false otherwise + /// + protected bool _isDisposed = false; + + /// + /// The size of the internal buffers + /// + protected const int kBufferSize = 16384; + + private byte[] _outBuffer = new byte[kBufferSize]; + private byte[] _inBuffer = new byte[kBufferSize]; + + private GCHandle _hInput; + private GCHandle _hOutput; + + private uint _checksum = 0; + + #endregion + + /// + /// Initializes a new instance of the CodeBase class. + /// + public CodecBase() + { + try + { + _hInput = GCHandle.Alloc(_inBuffer, GCHandleType.Pinned); + _hOutput = GCHandle.Alloc(_outBuffer, GCHandleType.Pinned); + } + catch (Exception) + { + CleanUp(false); + throw; + } + } + + + #region Codec Members + + /// + /// Occurs when more processed data are available. + /// + public event DataAvailableHandler DataAvailable; + + /// + /// Fires the event + /// + protected void OnDataAvailable() + { + if (_ztream.total_out > 0) + { + if (DataAvailable != null) + DataAvailable( _outBuffer, 0, (int)_ztream.total_out); + resetOutput(); + } + } + + /// + /// Adds more data to the codec to be processed. + /// + /// Byte array containing the data to be added to the codec + /// Adding data may, or may not, raise the DataAvailable event + public void Add(byte[] data) + { + Add(data,0,data.Length); + } + + /// + /// Adds more data to the codec to be processed. + /// + /// Byte array containing the data to be added to the codec + /// The index of the first byte to add from data + /// The number of bytes to add + /// Adding data may, or may not, raise the DataAvailable event + /// This must be implemented by a derived class + public abstract void Add(byte[] data, int offset, int count); + + /// + /// Finishes up any pending data that needs to be processed and handled. + /// + /// This must be implemented by a derived class + public abstract void Finish(); + + /// + /// Gets the checksum of the data that has been added so far + /// + public uint Checksum { get { return _checksum; } } + + #endregion + + #region Destructor & IDisposable stuff + + /// + /// Destroys this instance + /// + ~CodecBase() + { + CleanUp(false); + } + + /// + /// Releases any unmanaged resources and calls the method of the derived class + /// + public void Dispose() + { + CleanUp(true); + } + + /// + /// Performs any codec specific cleanup + /// + /// This must be implemented by a derived class + protected abstract void CleanUp(); + + // performs the release of the handles and calls the derived CleanUp() + private void CleanUp(bool isDisposing) + { + if (!_isDisposed) + { + CleanUp(); + if (_hInput.IsAllocated) + _hInput.Free(); + if (_hOutput.IsAllocated) + _hOutput.Free(); + + _isDisposed = true; + } + } + + + #endregion + + #region Helper methods + + /// + /// Copies a number of bytes to the internal codec buffer - ready for processing + /// + /// The byte array that contains the data to copy + /// The index of the first byte to copy + /// The number of bytes to copy from data + protected void copyInput(byte[] data, int startIndex, int count) + { + Array.Copy(data, startIndex, _inBuffer,0, count); + _ztream.next_in = _hInput.AddrOfPinnedObject(); + _ztream.total_in = 0; + _ztream.avail_in = (uint)count; + + } + + /// + /// Resets the internal output buffers to a known state - ready for processing + /// + protected void resetOutput() + { + _ztream.total_out = 0; + _ztream.avail_out = kBufferSize; + _ztream.next_out = _hOutput.AddrOfPinnedObject(); + } + + /// + /// Updates the running checksum property + /// + /// The new checksum value + protected void setChecksum(uint newSum) + { + _checksum = newSum; + } + #endregion + + } +} diff --git a/thirdparty/zlib-1.3.1/contrib/dotzlib/DotZLib/Deflater.cs b/thirdparty/zlib-1.3.1/contrib/dotzlib/DotZLib/Deflater.cs new file mode 100644 index 0000000..c247792 --- /dev/null +++ b/thirdparty/zlib-1.3.1/contrib/dotzlib/DotZLib/Deflater.cs @@ -0,0 +1,106 @@ +// +// © Copyright Henrik Ravn 2004 +// +// Use, modification and distribution are subject to the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) +// + +using System; +using System.Diagnostics; +using System.Runtime.InteropServices; + +namespace DotZLib +{ + + /// + /// Implements a data compressor, using the deflate algorithm in the ZLib dll + /// + public sealed class Deflater : CodecBase + { + #region Dll imports + [DllImport("ZLIB1.dll", CallingConvention=CallingConvention.Cdecl, CharSet=CharSet.Ansi)] + private static extern int deflateInit_(ref ZStream sz, int level, string vs, int size); + + [DllImport("ZLIB1.dll", CallingConvention=CallingConvention.Cdecl)] + private static extern int deflate(ref ZStream sz, int flush); + + [DllImport("ZLIB1.dll", CallingConvention=CallingConvention.Cdecl)] + private static extern int deflateReset(ref ZStream sz); + + [DllImport("ZLIB1.dll", CallingConvention=CallingConvention.Cdecl)] + private static extern int deflateEnd(ref ZStream sz); + #endregion + + /// + /// Constructs an new instance of the Deflater + /// + /// The compression level to use for this Deflater + public Deflater(CompressLevel level) : base() + { + int retval = deflateInit_(ref _ztream, (int)level, Info.Version, Marshal.SizeOf(_ztream)); + if (retval != 0) + throw new ZLibException(retval, "Could not initialize deflater"); + + resetOutput(); + } + + /// + /// Adds more data to the codec to be processed. + /// + /// Byte array containing the data to be added to the codec + /// The index of the first byte to add from data + /// The number of bytes to add + /// Adding data may, or may not, raise the DataAvailable event + public override void Add(byte[] data, int offset, int count) + { + if (data == null) throw new ArgumentNullException(); + if (offset < 0 || count < 0) throw new ArgumentOutOfRangeException(); + if ((offset+count) > data.Length) throw new ArgumentException(); + + int total = count; + int inputIndex = offset; + int err = 0; + + while (err >= 0 && inputIndex < total) + { + copyInput(data, inputIndex, Math.Min(total - inputIndex, kBufferSize)); + while (err >= 0 && _ztream.avail_in > 0) + { + err = deflate(ref _ztream, (int)FlushTypes.None); + if (err == 0) + while (_ztream.avail_out == 0) + { + OnDataAvailable(); + err = deflate(ref _ztream, (int)FlushTypes.None); + } + inputIndex += (int)_ztream.total_in; + } + } + setChecksum( _ztream.adler ); + } + + + /// + /// Finishes up any pending data that needs to be processed and handled. + /// + public override void Finish() + { + int err; + do + { + err = deflate(ref _ztream, (int)FlushTypes.Finish); + OnDataAvailable(); + } + while (err == 0); + setChecksum( _ztream.adler ); + deflateReset(ref _ztream); + resetOutput(); + } + + /// + /// Closes the internal zlib deflate stream + /// + protected override void CleanUp() { deflateEnd(ref _ztream); } + + } +} diff --git a/thirdparty/zlib-1.3.1/contrib/dotzlib/DotZLib/DotZLib.cs b/thirdparty/zlib-1.3.1/contrib/dotzlib/DotZLib/DotZLib.cs new file mode 100644 index 0000000..be184b4 --- /dev/null +++ b/thirdparty/zlib-1.3.1/contrib/dotzlib/DotZLib/DotZLib.cs @@ -0,0 +1,288 @@ +// +// © Copyright Henrik Ravn 2004 +// +// Use, modification and distribution are subject to the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) +// + +using System; +using System.IO; +using System.Runtime.InteropServices; +using System.Text; + + +namespace DotZLib +{ + + #region Internal types + + /// + /// Defines constants for the various flush types used with zlib + /// + internal enum FlushTypes + { + None, Partial, Sync, Full, Finish, Block + } + + #region ZStream structure + // internal mapping of the zlib zstream structure for marshalling + [StructLayoutAttribute(LayoutKind.Sequential, Pack=4, Size=0, CharSet=CharSet.Ansi)] + internal struct ZStream + { + public IntPtr next_in; + public uint avail_in; + public uint total_in; + + public IntPtr next_out; + public uint avail_out; + public uint total_out; + + [MarshalAs(UnmanagedType.LPStr)] + string msg; + uint state; + + uint zalloc; + uint zfree; + uint opaque; + + int data_type; + public uint adler; + uint reserved; + } + + #endregion + + #endregion + + #region Public enums + /// + /// Defines constants for the available compression levels in zlib + /// + public enum CompressLevel : int + { + /// + /// The default compression level with a reasonable compromise between compression and speed + /// + Default = -1, + /// + /// No compression at all. The data are passed straight through. + /// + None = 0, + /// + /// The maximum compression rate available. + /// + Best = 9, + /// + /// The fastest available compression level. + /// + Fastest = 1 + } + #endregion + + #region Exception classes + /// + /// The exception that is thrown when an error occurs on the zlib dll + /// + public class ZLibException : ApplicationException + { + /// + /// Initializes a new instance of the class with a specified + /// error message and error code + /// + /// The zlib error code that caused the exception + /// A message that (hopefully) describes the error + public ZLibException(int errorCode, string msg) : base(String.Format("ZLib error {0} {1}", errorCode, msg)) + { + } + + /// + /// Initializes a new instance of the class with a specified + /// error code + /// + /// The zlib error code that caused the exception + public ZLibException(int errorCode) : base(String.Format("ZLib error {0}", errorCode)) + { + } + } + #endregion + + #region Interfaces + + /// + /// Declares methods and properties that enables a running checksum to be calculated + /// + public interface ChecksumGenerator + { + /// + /// Gets the current value of the checksum + /// + uint Value { get; } + + /// + /// Clears the current checksum to 0 + /// + void Reset(); + + /// + /// Updates the current checksum with an array of bytes + /// + /// The data to update the checksum with + void Update(byte[] data); + + /// + /// Updates the current checksum with part of an array of bytes + /// + /// The data to update the checksum with + /// Where in data to start updating + /// The number of bytes from data to use + /// The sum of offset and count is larger than the length of data + /// data is a null reference + /// Offset or count is negative. + void Update(byte[] data, int offset, int count); + + /// + /// Updates the current checksum with the data from a string + /// + /// The string to update the checksum with + /// The characters in the string are converted by the UTF-8 encoding + void Update(string data); + + /// + /// Updates the current checksum with the data from a string, using a specific encoding + /// + /// The string to update the checksum with + /// The encoding to use + void Update(string data, Encoding encoding); + } + + + /// + /// Represents the method that will be called from a codec when new data + /// are available. + /// + /// The byte array containing the processed data + /// The index of the first processed byte in data + /// The number of processed bytes available + /// On return from this method, the data may be overwritten, so grab it while you can. + /// You cannot assume that startIndex will be zero. + /// + public delegate void DataAvailableHandler(byte[] data, int startIndex, int count); + + /// + /// Declares methods and events for implementing compressors/decompressors + /// + public interface Codec + { + /// + /// Occurs when more processed data are available. + /// + event DataAvailableHandler DataAvailable; + + /// + /// Adds more data to the codec to be processed. + /// + /// Byte array containing the data to be added to the codec + /// Adding data may, or may not, raise the DataAvailable event + void Add(byte[] data); + + /// + /// Adds more data to the codec to be processed. + /// + /// Byte array containing the data to be added to the codec + /// The index of the first byte to add from data + /// The number of bytes to add + /// Adding data may, or may not, raise the DataAvailable event + void Add(byte[] data, int offset, int count); + + /// + /// Finishes up any pending data that needs to be processed and handled. + /// + void Finish(); + + /// + /// Gets the checksum of the data that has been added so far + /// + uint Checksum { get; } + + + } + + #endregion + + #region Classes + /// + /// Encapsulates general information about the ZLib library + /// + public class Info + { + #region DLL imports + [DllImport("ZLIB1.dll", CallingConvention=CallingConvention.Cdecl)] + private static extern uint zlibCompileFlags(); + + [DllImport("ZLIB1.dll", CallingConvention=CallingConvention.Cdecl)] + private static extern string zlibVersion(); + #endregion + + #region Private stuff + private uint _flags; + + // helper function that unpacks a bitsize mask + private static int bitSize(uint bits) + { + switch (bits) + { + case 0: return 16; + case 1: return 32; + case 2: return 64; + } + return -1; + } + #endregion + + /// + /// Constructs an instance of the Info class. + /// + public Info() + { + _flags = zlibCompileFlags(); + } + + /// + /// True if the library is compiled with debug info + /// + public bool HasDebugInfo { get { return 0 != (_flags & 0x100); } } + + /// + /// True if the library is compiled with assembly optimizations + /// + public bool UsesAssemblyCode { get { return 0 != (_flags & 0x200); } } + + /// + /// Gets the size of the unsigned int that was compiled into Zlib + /// + public int SizeOfUInt { get { return bitSize(_flags & 3); } } + + /// + /// Gets the size of the unsigned long that was compiled into Zlib + /// + public int SizeOfULong { get { return bitSize((_flags >> 2) & 3); } } + + /// + /// Gets the size of the pointers that were compiled into Zlib + /// + public int SizeOfPointer { get { return bitSize((_flags >> 4) & 3); } } + + /// + /// Gets the size of the z_off_t type that was compiled into Zlib + /// + public int SizeOfOffset { get { return bitSize((_flags >> 6) & 3); } } + + /// + /// Gets the version of ZLib as a string, e.g. "1.2.1" + /// + public static string Version { get { return zlibVersion(); } } + } + + #endregion + +} diff --git a/thirdparty/zlib-1.3.1/contrib/dotzlib/DotZLib/DotZLib.csproj b/thirdparty/zlib-1.3.1/contrib/dotzlib/DotZLib/DotZLib.csproj new file mode 100644 index 0000000..71eeb85 --- /dev/null +++ b/thirdparty/zlib-1.3.1/contrib/dotzlib/DotZLib/DotZLib.csproj @@ -0,0 +1,141 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/thirdparty/zlib-1.3.1/contrib/dotzlib/DotZLib/GZipStream.cs b/thirdparty/zlib-1.3.1/contrib/dotzlib/DotZLib/GZipStream.cs new file mode 100644 index 0000000..58091d3 --- /dev/null +++ b/thirdparty/zlib-1.3.1/contrib/dotzlib/DotZLib/GZipStream.cs @@ -0,0 +1,301 @@ +// +// © Copyright Henrik Ravn 2004 +// +// Use, modification and distribution are subject to the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) +// + +using System; +using System.IO; +using System.Runtime.InteropServices; + +namespace DotZLib +{ + /// + /// Implements a compressed , in GZip (.gz) format. + /// + public class GZipStream : Stream, IDisposable + { + #region Dll Imports + [DllImport("ZLIB1.dll", CallingConvention=CallingConvention.Cdecl, CharSet=CharSet.Ansi)] + private static extern IntPtr gzopen(string name, string mode); + + [DllImport("ZLIB1.dll", CallingConvention=CallingConvention.Cdecl)] + private static extern int gzclose(IntPtr gzFile); + + [DllImport("ZLIB1.dll", CallingConvention=CallingConvention.Cdecl)] + private static extern int gzwrite(IntPtr gzFile, int data, int length); + + [DllImport("ZLIB1.dll", CallingConvention=CallingConvention.Cdecl)] + private static extern int gzread(IntPtr gzFile, int data, int length); + + [DllImport("ZLIB1.dll", CallingConvention=CallingConvention.Cdecl)] + private static extern int gzgetc(IntPtr gzFile); + + [DllImport("ZLIB1.dll", CallingConvention=CallingConvention.Cdecl)] + private static extern int gzputc(IntPtr gzFile, int c); + + #endregion + + #region Private data + private IntPtr _gzFile; + private bool _isDisposed = false; + private bool _isWriting; + #endregion + + #region Constructors + /// + /// Creates a new file as a writeable GZipStream + /// + /// The name of the compressed file to create + /// The compression level to use when adding data + /// If an error occurred in the internal zlib function + public GZipStream(string fileName, CompressLevel level) + { + _isWriting = true; + _gzFile = gzopen(fileName, String.Format("wb{0}", (int)level)); + if (_gzFile == IntPtr.Zero) + throw new ZLibException(-1, "Could not open " + fileName); + } + + /// + /// Opens an existing file as a readable GZipStream + /// + /// The name of the file to open + /// If an error occurred in the internal zlib function + public GZipStream(string fileName) + { + _isWriting = false; + _gzFile = gzopen(fileName, "rb"); + if (_gzFile == IntPtr.Zero) + throw new ZLibException(-1, "Could not open " + fileName); + + } + #endregion + + #region Access properties + /// + /// Returns true of this stream can be read from, false otherwise + /// + public override bool CanRead + { + get + { + return !_isWriting; + } + } + + + /// + /// Returns false. + /// + public override bool CanSeek + { + get + { + return false; + } + } + + /// + /// Returns true if this tsream is writeable, false otherwise + /// + public override bool CanWrite + { + get + { + return _isWriting; + } + } + #endregion + + #region Destructor & IDispose stuff + + /// + /// Destroys this instance + /// + ~GZipStream() + { + cleanUp(false); + } + + /// + /// Closes the external file handle + /// + public void Dispose() + { + cleanUp(true); + } + + // Does the actual closing of the file handle. + private void cleanUp(bool isDisposing) + { + if (!_isDisposed) + { + gzclose(_gzFile); + _isDisposed = true; + } + } + #endregion + + #region Basic reading and writing + /// + /// Attempts to read a number of bytes from the stream. + /// + /// The destination data buffer + /// The index of the first destination byte in buffer + /// The number of bytes requested + /// The number of bytes read + /// If buffer is null + /// If count or offset are negative + /// If offset + count is > buffer.Length + /// If this stream is not readable. + /// If this stream has been disposed. + public override int Read(byte[] buffer, int offset, int count) + { + if (!CanRead) throw new NotSupportedException(); + if (buffer == null) throw new ArgumentNullException(); + if (offset < 0 || count < 0) throw new ArgumentOutOfRangeException(); + if ((offset+count) > buffer.Length) throw new ArgumentException(); + if (_isDisposed) throw new ObjectDisposedException("GZipStream"); + + GCHandle h = GCHandle.Alloc(buffer, GCHandleType.Pinned); + int result; + try + { + result = gzread(_gzFile, h.AddrOfPinnedObject().ToInt32() + offset, count); + if (result < 0) + throw new IOException(); + } + finally + { + h.Free(); + } + return result; + } + + /// + /// Attempts to read a single byte from the stream. + /// + /// The byte that was read, or -1 in case of error or End-Of-File + public override int ReadByte() + { + if (!CanRead) throw new NotSupportedException(); + if (_isDisposed) throw new ObjectDisposedException("GZipStream"); + return gzgetc(_gzFile); + } + + /// + /// Writes a number of bytes to the stream + /// + /// + /// + /// + /// If buffer is null + /// If count or offset are negative + /// If offset + count is > buffer.Length + /// If this stream is not writeable. + /// If this stream has been disposed. + public override void Write(byte[] buffer, int offset, int count) + { + if (!CanWrite) throw new NotSupportedException(); + if (buffer == null) throw new ArgumentNullException(); + if (offset < 0 || count < 0) throw new ArgumentOutOfRangeException(); + if ((offset+count) > buffer.Length) throw new ArgumentException(); + if (_isDisposed) throw new ObjectDisposedException("GZipStream"); + + GCHandle h = GCHandle.Alloc(buffer, GCHandleType.Pinned); + try + { + int result = gzwrite(_gzFile, h.AddrOfPinnedObject().ToInt32() + offset, count); + if (result < 0) + throw new IOException(); + } + finally + { + h.Free(); + } + } + + /// + /// Writes a single byte to the stream + /// + /// The byte to add to the stream. + /// If this stream is not writeable. + /// If this stream has been disposed. + public override void WriteByte(byte value) + { + if (!CanWrite) throw new NotSupportedException(); + if (_isDisposed) throw new ObjectDisposedException("GZipStream"); + + int result = gzputc(_gzFile, (int)value); + if (result < 0) + throw new IOException(); + } + #endregion + + #region Position & length stuff + /// + /// Not supported. + /// + /// + /// Always thrown + public override void SetLength(long value) + { + throw new NotSupportedException(); + } + + /// + /// Not supported. + /// + /// + /// + /// + /// Always thrown + public override long Seek(long offset, SeekOrigin origin) + { + throw new NotSupportedException(); + } + + /// + /// Flushes the GZipStream. + /// + /// In this implementation, this method does nothing. This is because excessive + /// flushing may degrade the achievable compression rates. + public override void Flush() + { + // left empty on purpose + } + + /// + /// Gets/sets the current position in the GZipStream. Not supported. + /// + /// In this implementation this property is not supported + /// Always thrown + public override long Position + { + get + { + throw new NotSupportedException(); + } + set + { + throw new NotSupportedException(); + } + } + + /// + /// Gets the size of the stream. Not supported. + /// + /// In this implementation this property is not supported + /// Always thrown + public override long Length + { + get + { + throw new NotSupportedException(); + } + } + #endregion + } +} diff --git a/thirdparty/zlib-1.3.1/contrib/dotzlib/DotZLib/Inflater.cs b/thirdparty/zlib-1.3.1/contrib/dotzlib/DotZLib/Inflater.cs new file mode 100644 index 0000000..8ed5451 --- /dev/null +++ b/thirdparty/zlib-1.3.1/contrib/dotzlib/DotZLib/Inflater.cs @@ -0,0 +1,105 @@ +// +// © Copyright Henrik Ravn 2004 +// +// Use, modification and distribution are subject to the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) +// + +using System; +using System.Diagnostics; +using System.Runtime.InteropServices; + +namespace DotZLib +{ + + /// + /// Implements a data decompressor, using the inflate algorithm in the ZLib dll + /// + public class Inflater : CodecBase + { + #region Dll imports + [DllImport("ZLIB1.dll", CallingConvention=CallingConvention.Cdecl, CharSet=CharSet.Ansi)] + private static extern int inflateInit_(ref ZStream sz, string vs, int size); + + [DllImport("ZLIB1.dll", CallingConvention=CallingConvention.Cdecl)] + private static extern int inflate(ref ZStream sz, int flush); + + [DllImport("ZLIB1.dll", CallingConvention=CallingConvention.Cdecl)] + private static extern int inflateReset(ref ZStream sz); + + [DllImport("ZLIB1.dll", CallingConvention=CallingConvention.Cdecl)] + private static extern int inflateEnd(ref ZStream sz); + #endregion + + /// + /// Constructs an new instance of the Inflater + /// + public Inflater() : base() + { + int retval = inflateInit_(ref _ztream, Info.Version, Marshal.SizeOf(_ztream)); + if (retval != 0) + throw new ZLibException(retval, "Could not initialize inflater"); + + resetOutput(); + } + + + /// + /// Adds more data to the codec to be processed. + /// + /// Byte array containing the data to be added to the codec + /// The index of the first byte to add from data + /// The number of bytes to add + /// Adding data may, or may not, raise the DataAvailable event + public override void Add(byte[] data, int offset, int count) + { + if (data == null) throw new ArgumentNullException(); + if (offset < 0 || count < 0) throw new ArgumentOutOfRangeException(); + if ((offset+count) > data.Length) throw new ArgumentException(); + + int total = count; + int inputIndex = offset; + int err = 0; + + while (err >= 0 && inputIndex < total) + { + copyInput(data, inputIndex, Math.Min(total - inputIndex, kBufferSize)); + err = inflate(ref _ztream, (int)FlushTypes.None); + if (err == 0) + while (_ztream.avail_out == 0) + { + OnDataAvailable(); + err = inflate(ref _ztream, (int)FlushTypes.None); + } + + inputIndex += (int)_ztream.total_in; + } + setChecksum( _ztream.adler ); + } + + + /// + /// Finishes up any pending data that needs to be processed and handled. + /// + public override void Finish() + { + int err; + do + { + err = inflate(ref _ztream, (int)FlushTypes.Finish); + OnDataAvailable(); + } + while (err == 0); + setChecksum( _ztream.adler ); + inflateReset(ref _ztream); + resetOutput(); + } + + /// + /// Closes the internal zlib inflate stream + /// + protected override void CleanUp() { inflateEnd(ref _ztream); } + + + } +} diff --git a/thirdparty/zlib-1.3.1/contrib/dotzlib/DotZLib/UnitTests.cs b/thirdparty/zlib-1.3.1/contrib/dotzlib/DotZLib/UnitTests.cs new file mode 100644 index 0000000..d4f0980 --- /dev/null +++ b/thirdparty/zlib-1.3.1/contrib/dotzlib/DotZLib/UnitTests.cs @@ -0,0 +1,274 @@ +// +// © Copyright Henrik Ravn 2004 +// +// Use, modification and distribution are subject to the Boost Software License, Version 1.0. +// (See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) +// + +using System; +using System.Collections; +using System.IO; + +// uncomment the define below to include unit tests +//#define nunit +#if nunit +using NUnit.Framework; + +// Unit tests for the DotZLib class library +// ---------------------------------------- +// +// Use this with NUnit 2 from http://www.nunit.org +// + +namespace DotZLibTests +{ + using DotZLib; + + // helper methods + internal class Utils + { + public static bool byteArrEqual( byte[] lhs, byte[] rhs ) + { + if (lhs.Length != rhs.Length) + return false; + for (int i = lhs.Length-1; i >= 0; --i) + if (lhs[i] != rhs[i]) + return false; + return true; + } + + } + + + [TestFixture] + public class CircBufferTests + { + #region Circular buffer tests + [Test] + public void SinglePutGet() + { + CircularBuffer buf = new CircularBuffer(10); + Assert.AreEqual( 0, buf.Size ); + Assert.AreEqual( -1, buf.Get() ); + + Assert.IsTrue(buf.Put( 1 )); + Assert.AreEqual( 1, buf.Size ); + Assert.AreEqual( 1, buf.Get() ); + Assert.AreEqual( 0, buf.Size ); + Assert.AreEqual( -1, buf.Get() ); + } + + [Test] + public void BlockPutGet() + { + CircularBuffer buf = new CircularBuffer(10); + byte[] arr = {1,2,3,4,5,6,7,8,9,10}; + Assert.AreEqual( 10, buf.Put(arr,0,10) ); + Assert.AreEqual( 10, buf.Size ); + Assert.IsFalse( buf.Put(11) ); + Assert.AreEqual( 1, buf.Get() ); + Assert.IsTrue( buf.Put(11) ); + + byte[] arr2 = (byte[])arr.Clone(); + Assert.AreEqual( 9, buf.Get(arr2,1,9) ); + Assert.IsTrue( Utils.byteArrEqual(arr,arr2) ); + } + + #endregion + } + + [TestFixture] + public class ChecksumTests + { + #region CRC32 Tests + [Test] + public void CRC32_Null() + { + CRC32Checksum crc32 = new CRC32Checksum(); + Assert.AreEqual( 0, crc32.Value ); + + crc32 = new CRC32Checksum(1); + Assert.AreEqual( 1, crc32.Value ); + + crc32 = new CRC32Checksum(556); + Assert.AreEqual( 556, crc32.Value ); + } + + [Test] + public void CRC32_Data() + { + CRC32Checksum crc32 = new CRC32Checksum(); + byte[] data = { 1,2,3,4,5,6,7 }; + crc32.Update(data); + Assert.AreEqual( 0x70e46888, crc32.Value ); + + crc32 = new CRC32Checksum(); + crc32.Update("penguin"); + Assert.AreEqual( 0x0e5c1a120, crc32.Value ); + + crc32 = new CRC32Checksum(1); + crc32.Update("penguin"); + Assert.AreEqual(0x43b6aa94, crc32.Value); + + } + #endregion + + #region Adler tests + + [Test] + public void Adler_Null() + { + AdlerChecksum adler = new AdlerChecksum(); + Assert.AreEqual(0, adler.Value); + + adler = new AdlerChecksum(1); + Assert.AreEqual( 1, adler.Value ); + + adler = new AdlerChecksum(556); + Assert.AreEqual( 556, adler.Value ); + } + + [Test] + public void Adler_Data() + { + AdlerChecksum adler = new AdlerChecksum(1); + byte[] data = { 1,2,3,4,5,6,7 }; + adler.Update(data); + Assert.AreEqual( 0x5b001d, adler.Value ); + + adler = new AdlerChecksum(); + adler.Update("penguin"); + Assert.AreEqual(0x0bcf02f6, adler.Value ); + + adler = new AdlerChecksum(1); + adler.Update("penguin"); + Assert.AreEqual(0x0bd602f7, adler.Value); + + } + #endregion + } + + [TestFixture] + public class InfoTests + { + #region Info tests + [Test] + public void Info_Version() + { + Info info = new Info(); + Assert.AreEqual("1.3.1", Info.Version); + Assert.AreEqual(32, info.SizeOfUInt); + Assert.AreEqual(32, info.SizeOfULong); + Assert.AreEqual(32, info.SizeOfPointer); + Assert.AreEqual(32, info.SizeOfOffset); + } + #endregion + } + + [TestFixture] + public class DeflateInflateTests + { + #region Deflate tests + [Test] + public void Deflate_Init() + { + using (Deflater def = new Deflater(CompressLevel.Default)) + { + } + } + + private ArrayList compressedData = new ArrayList(); + private uint adler1; + + private ArrayList uncompressedData = new ArrayList(); + private uint adler2; + + public void CDataAvail(byte[] data, int startIndex, int count) + { + for (int i = 0; i < count; ++i) + compressedData.Add(data[i+startIndex]); + } + + [Test] + public void Deflate_Compress() + { + compressedData.Clear(); + + byte[] testData = new byte[35000]; + for (int i = 0; i < testData.Length; ++i) + testData[i] = 5; + + using (Deflater def = new Deflater((CompressLevel)5)) + { + def.DataAvailable += new DataAvailableHandler(CDataAvail); + def.Add(testData); + def.Finish(); + adler1 = def.Checksum; + } + } + #endregion + + #region Inflate tests + [Test] + public void Inflate_Init() + { + using (Inflater inf = new Inflater()) + { + } + } + + private void DDataAvail(byte[] data, int startIndex, int count) + { + for (int i = 0; i < count; ++i) + uncompressedData.Add(data[i+startIndex]); + } + + [Test] + public void Inflate_Expand() + { + uncompressedData.Clear(); + + using (Inflater inf = new Inflater()) + { + inf.DataAvailable += new DataAvailableHandler(DDataAvail); + inf.Add((byte[])compressedData.ToArray(typeof(byte))); + inf.Finish(); + adler2 = inf.Checksum; + } + Assert.AreEqual( adler1, adler2 ); + } + #endregion + } + + [TestFixture] + public class GZipStreamTests + { + #region GZipStream test + [Test] + public void GZipStream_WriteRead() + { + using (GZipStream gzOut = new GZipStream("gzstream.gz", CompressLevel.Best)) + { + BinaryWriter writer = new BinaryWriter(gzOut); + writer.Write("hi there"); + writer.Write(Math.PI); + writer.Write(42); + } + + using (GZipStream gzIn = new GZipStream("gzstream.gz")) + { + BinaryReader reader = new BinaryReader(gzIn); + string s = reader.ReadString(); + Assert.AreEqual("hi there",s); + double d = reader.ReadDouble(); + Assert.AreEqual(Math.PI, d); + int i = reader.ReadInt32(); + Assert.AreEqual(42,i); + } + + } + #endregion + } +} + +#endif diff --git a/thirdparty/zlib-1.3.1/contrib/dotzlib/LICENSE_1_0.txt b/thirdparty/zlib-1.3.1/contrib/dotzlib/LICENSE_1_0.txt new file mode 100644 index 0000000..30aac2c --- /dev/null +++ b/thirdparty/zlib-1.3.1/contrib/dotzlib/LICENSE_1_0.txt @@ -0,0 +1,23 @@ +Boost Software License - Version 1.0 - August 17th, 2003 + +Permission is hereby granted, free of charge, to any person or organization +obtaining a copy of the software and accompanying documentation covered by +this license (the "Software") to use, reproduce, display, distribute, +execute, and transmit the Software, and to prepare derivative works of the +Software, and to permit third-parties to whom the Software is furnished to +do so, all subject to the following: + +The copyright notices in the Software and this entire statement, including +the above license grant, this restriction and the following disclaimer, +must be included in all copies of the Software, in whole or in part, and +all derivative works of the Software, unless such copies or derivative +works are solely in the form of machine-executable object code generated by +a source language processor. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE, TITLE AND NON-INFRINGEMENT. IN NO EVENT +SHALL THE COPYRIGHT HOLDERS OR ANYONE DISTRIBUTING THE SOFTWARE BE LIABLE +FOR ANY DAMAGES OR OTHER LIABILITY, WHETHER IN CONTRACT, TORT OR OTHERWISE, +ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER +DEALINGS IN THE SOFTWARE. \ No newline at end of file diff --git a/thirdparty/zlib-1.3.1/contrib/dotzlib/readme.txt b/thirdparty/zlib-1.3.1/contrib/dotzlib/readme.txt new file mode 100644 index 0000000..47454fc --- /dev/null +++ b/thirdparty/zlib-1.3.1/contrib/dotzlib/readme.txt @@ -0,0 +1,58 @@ +This directory contains a .Net wrapper class library for the ZLib1.dll + +The wrapper includes support for inflating/deflating memory buffers, +.Net streaming wrappers for the gz streams part of zlib, and wrappers +for the checksum parts of zlib. See DotZLib/UnitTests.cs for examples. + +Directory structure: +-------------------- + +LICENSE_1_0.txt - License file. +readme.txt - This file. +DotZLib.chm - Class library documentation +DotZLib.build - NAnt build file +DotZLib.sln - Microsoft Visual Studio 2003 solution file + +DotZLib\*.cs - Source files for the class library + +Unit tests: +----------- +The file DotZLib/UnitTests.cs contains unit tests for use with NUnit 2.1 or higher. +To include unit tests in the build, define nunit before building. + + +Build instructions: +------------------- + +1. Using Visual Studio.Net 2003: + Open DotZLib.sln in VS.Net and build from there. Output file (DotZLib.dll) + will be found ./DotZLib/bin/release or ./DotZLib/bin/debug, depending on + you are building the release or debug version of the library. Check + DotZLib/UnitTests.cs for instructions on how to include unit tests in the + build. + +2. Using NAnt: + Open a command prompt with access to the build environment and run nant + in the same directory as the DotZLib.build file. + You can define 2 properties on the nant command-line to control the build: + debug={true|false} to toggle between release/debug builds (default=true). + nunit={true|false} to include or exclude unit tests (default=true). + Also the target clean will remove binaries. + Output file (DotZLib.dll) will be found in either ./DotZLib/bin/release + or ./DotZLib/bin/debug, depending on whether you are building the release + or debug version of the library. + + Examples: + nant -D:debug=false -D:nunit=false + will build a release mode version of the library without unit tests. + nant + will build a debug version of the library with unit tests + nant clean + will remove all previously built files. + + +--------------------------------- +Copyright (c) Henrik Ravn 2004 + +Use, modification and distribution are subject to the Boost Software License, Version 1.0. +(See accompanying file LICENSE_1_0.txt or copy at http://www.boost.org/LICENSE_1_0.txt) diff --git a/thirdparty/zlib-1.3.1/contrib/gcc_gvmat64/gvmat64.S b/thirdparty/zlib-1.3.1/contrib/gcc_gvmat64/gvmat64.S new file mode 100644 index 0000000..dd858dd --- /dev/null +++ b/thirdparty/zlib-1.3.1/contrib/gcc_gvmat64/gvmat64.S @@ -0,0 +1,574 @@ +/* +;uInt longest_match_x64( +; deflate_state *s, +; IPos cur_match); // current match + +; gvmat64.S -- Asm portion of the optimized longest_match for 32 bits x86_64 +; (AMD64 on Athlon 64, Opteron, Phenom +; and Intel EM64T on Pentium 4 with EM64T, Pentium D, Core 2 Duo, Core I5/I7) +; this file is translation from gvmat64.asm to GCC 4.x (for Linux, Mac XCode) +; Copyright (C) 1995-2010 Jean-loup Gailly, Brian Raiter and Gilles Vollant. +; +; File written by Gilles Vollant, by converting to assembly the longest_match +; from Jean-loup Gailly in deflate.c of zLib and infoZip zip. +; and by taking inspiration on asm686 with masm, optimised assembly code +; from Brian Raiter, written 1998 +; +; This software is provided 'as-is', without any express or implied +; warranty. In no event will the authors be held liable for any damages +; arising from the use of this software. +; +; Permission is granted to anyone to use this software for any purpose, +; including commercial applications, and to alter it and redistribute it +; freely, subject to the following restrictions: +; +; 1. The origin of this software must not be misrepresented; you must not +; claim that you wrote the original software. If you use this software +; in a product, an acknowledgment in the product documentation would be +; appreciated but is not required. +; 2. Altered source versions must be plainly marked as such, and must not be +; misrepresented as being the original software +; 3. This notice may not be removed or altered from any source distribution. +; +; http://www.zlib.net +; http://www.winimage.com/zLibDll +; http://www.muppetlabs.com/~breadbox/software/assembly.html +; +; to compile this file for zLib, I use option: +; gcc -c -arch x86_64 gvmat64.S + + +;uInt longest_match(s, cur_match) +; deflate_state *s; +; IPos cur_match; // current match / +; +; with XCode for Mac, I had strange error with some jump on intel syntax +; this is why BEFORE_JMP and AFTER_JMP are used + */ + + +#define BEFORE_JMP .att_syntax +#define AFTER_JMP .intel_syntax noprefix + +#ifndef NO_UNDERLINE +# define match_init _match_init +# define longest_match _longest_match +#endif + +.intel_syntax noprefix + +.globl match_init, longest_match +.text +longest_match: + + + +#define LocalVarsSize 96 +/* +; register used : rax,rbx,rcx,rdx,rsi,rdi,r8,r9,r10,r11,r12 +; free register : r14,r15 +; register can be saved : rsp +*/ + +#define chainlenwmask (rsp + 8 - LocalVarsSize) +#define nicematch (rsp + 16 - LocalVarsSize) + +#define save_rdi (rsp + 24 - LocalVarsSize) +#define save_rsi (rsp + 32 - LocalVarsSize) +#define save_rbx (rsp + 40 - LocalVarsSize) +#define save_rbp (rsp + 48 - LocalVarsSize) +#define save_r12 (rsp + 56 - LocalVarsSize) +#define save_r13 (rsp + 64 - LocalVarsSize) +#define save_r14 (rsp + 72 - LocalVarsSize) +#define save_r15 (rsp + 80 - LocalVarsSize) + + +/* +; all the +4 offsets are due to the addition of pending_buf_size (in zlib +; in the deflate_state structure since the asm code was first written +; (if you compile with zlib 1.0.4 or older, remove the +4). +; Note : these value are good with a 8 bytes boundary pack structure +*/ + +#define MAX_MATCH 258 +#define MIN_MATCH 3 +#define MIN_LOOKAHEAD (MAX_MATCH+MIN_MATCH+1) + +/* +;;; Offsets for fields in the deflate_state structure. These numbers +;;; are calculated from the definition of deflate_state, with the +;;; assumption that the compiler will dword-align the fields. (Thus, +;;; changing the definition of deflate_state could easily cause this +;;; program to crash horribly, without so much as a warning at +;;; compile time. Sigh.) + +; all the +zlib1222add offsets are due to the addition of fields +; in zlib in the deflate_state structure since the asm code was first written +; (if you compile with zlib 1.0.4 or older, use "zlib1222add equ (-4)"). +; (if you compile with zlib between 1.0.5 and 1.2.2.1, use "zlib1222add equ 0"). +; if you compile with zlib 1.2.2.2 or later , use "zlib1222add equ 8"). +*/ + + + +/* you can check the structure offset by running + +#include +#include +#include "deflate.h" + +void print_depl() +{ +deflate_state ds; +deflate_state *s=&ds; +printf("size pointer=%u\n",(int)sizeof(void*)); + +printf("#define dsWSize %u\n",(int)(((char*)&(s->w_size))-((char*)s))); +printf("#define dsWMask %u\n",(int)(((char*)&(s->w_mask))-((char*)s))); +printf("#define dsWindow %u\n",(int)(((char*)&(s->window))-((char*)s))); +printf("#define dsPrev %u\n",(int)(((char*)&(s->prev))-((char*)s))); +printf("#define dsMatchLen %u\n",(int)(((char*)&(s->match_length))-((char*)s))); +printf("#define dsPrevMatch %u\n",(int)(((char*)&(s->prev_match))-((char*)s))); +printf("#define dsStrStart %u\n",(int)(((char*)&(s->strstart))-((char*)s))); +printf("#define dsMatchStart %u\n",(int)(((char*)&(s->match_start))-((char*)s))); +printf("#define dsLookahead %u\n",(int)(((char*)&(s->lookahead))-((char*)s))); +printf("#define dsPrevLen %u\n",(int)(((char*)&(s->prev_length))-((char*)s))); +printf("#define dsMaxChainLen %u\n",(int)(((char*)&(s->max_chain_length))-((char*)s))); +printf("#define dsGoodMatch %u\n",(int)(((char*)&(s->good_match))-((char*)s))); +printf("#define dsNiceMatch %u\n",(int)(((char*)&(s->nice_match))-((char*)s))); +} +*/ + +#define dsWSize 68 +#define dsWMask 76 +#define dsWindow 80 +#define dsPrev 96 +#define dsMatchLen 144 +#define dsPrevMatch 148 +#define dsStrStart 156 +#define dsMatchStart 160 +#define dsLookahead 164 +#define dsPrevLen 168 +#define dsMaxChainLen 172 +#define dsGoodMatch 188 +#define dsNiceMatch 192 + +#define window_size [ rcx + dsWSize] +#define WMask [ rcx + dsWMask] +#define window_ad [ rcx + dsWindow] +#define prev_ad [ rcx + dsPrev] +#define strstart [ rcx + dsStrStart] +#define match_start [ rcx + dsMatchStart] +#define Lookahead [ rcx + dsLookahead] //; 0ffffffffh on infozip +#define prev_length [ rcx + dsPrevLen] +#define max_chain_length [ rcx + dsMaxChainLen] +#define good_match [ rcx + dsGoodMatch] +#define nice_match [ rcx + dsNiceMatch] + +/* +; windows: +; parameter 1 in rcx(deflate state s), param 2 in rdx (cur match) + +; see http://weblogs.asp.net/oldnewthing/archive/2004/01/14/58579.aspx and +; http://msdn.microsoft.com/library/en-us/kmarch/hh/kmarch/64bitAMD_8e951dd2-ee77-4728-8702-55ce4b5dd24a.xml.asp +; +; All registers must be preserved across the call, except for +; rax, rcx, rdx, r8, r9, r10, and r11, which are scratch. + +; +; gcc on macosx-linux: +; see http://www.x86-64.org/documentation/abi-0.99.pdf +; param 1 in rdi, param 2 in rsi +; rbx, rsp, rbp, r12 to r15 must be preserved + +;;; Save registers that the compiler may be using, and adjust esp to +;;; make room for our stack frame. + + +;;; Retrieve the function arguments. r8d will hold cur_match +;;; throughout the entire function. edx will hold the pointer to the +;;; deflate_state structure during the function's setup (before +;;; entering the main loop. + +; ms: parameter 1 in rcx (deflate_state* s), param 2 in edx -> r8 (cur match) +; mac: param 1 in rdi, param 2 rsi +; this clear high 32 bits of r8, which can be garbage in both r8 and rdx +*/ + mov [save_rbx],rbx + mov [save_rbp],rbp + + + mov rcx,rdi + + mov r8d,esi + + + mov [save_r12],r12 + mov [save_r13],r13 + mov [save_r14],r14 + mov [save_r15],r15 + + +//;;; uInt wmask = s->w_mask; +//;;; unsigned chain_length = s->max_chain_length; +//;;; if (s->prev_length >= s->good_match) { +//;;; chain_length >>= 2; +//;;; } + + + mov edi, prev_length + mov esi, good_match + mov eax, WMask + mov ebx, max_chain_length + cmp edi, esi + jl LastMatchGood + shr ebx, 2 +LastMatchGood: + +//;;; chainlen is decremented once beforehand so that the function can +//;;; use the sign flag instead of the zero flag for the exit test. +//;;; It is then shifted into the high word, to make room for the wmask +//;;; value, which it will always accompany. + + dec ebx + shl ebx, 16 + or ebx, eax + +//;;; on zlib only +//;;; if ((uInt)nice_match > s->lookahead) nice_match = s->lookahead; + + + + mov eax, nice_match + mov [chainlenwmask], ebx + mov r10d, Lookahead + cmp r10d, eax + cmovnl r10d, eax + mov [nicematch],r10d + + + +//;;; register Bytef *scan = s->window + s->strstart; + mov r10, window_ad + mov ebp, strstart + lea r13, [r10 + rbp] + +//;;; Determine how many bytes the scan ptr is off from being +//;;; dword-aligned. + + mov r9,r13 + neg r13 + and r13,3 + +//;;; IPos limit = s->strstart > (IPos)MAX_DIST(s) ? +//;;; s->strstart - (IPos)MAX_DIST(s) : NIL; + + + mov eax, window_size + sub eax, MIN_LOOKAHEAD + + + xor edi,edi + sub ebp, eax + + mov r11d, prev_length + + cmovng ebp,edi + +//;;; int best_len = s->prev_length; + + +//;;; Store the sum of s->window + best_len in esi locally, and in esi. + + lea rsi,[r10+r11] + +//;;; register ush scan_start = *(ushf*)scan; +//;;; register ush scan_end = *(ushf*)(scan+best_len-1); +//;;; Posf *prev = s->prev; + + movzx r12d,word ptr [r9] + movzx ebx, word ptr [r9 + r11 - 1] + + mov rdi, prev_ad + +//;;; Jump into the main loop. + + mov edx, [chainlenwmask] + + cmp bx,word ptr [rsi + r8 - 1] + jz LookupLoopIsZero + + + +LookupLoop1: + and r8d, edx + + movzx r8d, word ptr [rdi + r8*2] + cmp r8d, ebp + jbe LeaveNow + + + + sub edx, 0x00010000 + BEFORE_JMP + js LeaveNow + AFTER_JMP + +LoopEntry1: + cmp bx,word ptr [rsi + r8 - 1] + BEFORE_JMP + jz LookupLoopIsZero + AFTER_JMP + +LookupLoop2: + and r8d, edx + + movzx r8d, word ptr [rdi + r8*2] + cmp r8d, ebp + BEFORE_JMP + jbe LeaveNow + AFTER_JMP + sub edx, 0x00010000 + BEFORE_JMP + js LeaveNow + AFTER_JMP + +LoopEntry2: + cmp bx,word ptr [rsi + r8 - 1] + BEFORE_JMP + jz LookupLoopIsZero + AFTER_JMP + +LookupLoop4: + and r8d, edx + + movzx r8d, word ptr [rdi + r8*2] + cmp r8d, ebp + BEFORE_JMP + jbe LeaveNow + AFTER_JMP + sub edx, 0x00010000 + BEFORE_JMP + js LeaveNow + AFTER_JMP + +LoopEntry4: + + cmp bx,word ptr [rsi + r8 - 1] + BEFORE_JMP + jnz LookupLoop1 + jmp LookupLoopIsZero + AFTER_JMP +/* +;;; do { +;;; match = s->window + cur_match; +;;; if (*(ushf*)(match+best_len-1) != scan_end || +;;; *(ushf*)match != scan_start) continue; +;;; [...] +;;; } while ((cur_match = prev[cur_match & wmask]) > limit +;;; && --chain_length != 0); +;;; +;;; Here is the inner loop of the function. The function will spend the +;;; majority of its time in this loop, and majority of that time will +;;; be spent in the first ten instructions. +;;; +;;; Within this loop: +;;; ebx = scanend +;;; r8d = curmatch +;;; edx = chainlenwmask - i.e., ((chainlen << 16) | wmask) +;;; esi = windowbestlen - i.e., (window + bestlen) +;;; edi = prev +;;; ebp = limit +*/ +.balign 16 +LookupLoop: + and r8d, edx + + movzx r8d, word ptr [rdi + r8*2] + cmp r8d, ebp + BEFORE_JMP + jbe LeaveNow + AFTER_JMP + sub edx, 0x00010000 + BEFORE_JMP + js LeaveNow + AFTER_JMP + +LoopEntry: + + cmp bx,word ptr [rsi + r8 - 1] + BEFORE_JMP + jnz LookupLoop1 + AFTER_JMP +LookupLoopIsZero: + cmp r12w, word ptr [r10 + r8] + BEFORE_JMP + jnz LookupLoop1 + AFTER_JMP + + +//;;; Store the current value of chainlen. + mov [chainlenwmask], edx +/* +;;; Point edi to the string under scrutiny, and esi to the string we +;;; are hoping to match it up with. In actuality, esi and edi are +;;; both pointed (MAX_MATCH_8 - scanalign) bytes ahead, and edx is +;;; initialized to -(MAX_MATCH_8 - scanalign). +*/ + lea rsi,[r8+r10] + mov rdx, 0xfffffffffffffef8 //; -(MAX_MATCH_8) + lea rsi, [rsi + r13 + 0x0108] //;MAX_MATCH_8] + lea rdi, [r9 + r13 + 0x0108] //;MAX_MATCH_8] + + prefetcht1 [rsi+rdx] + prefetcht1 [rdi+rdx] + +/* +;;; Test the strings for equality, 8 bytes at a time. At the end, +;;; adjust rdx so that it is offset to the exact byte that mismatched. +;;; +;;; We already know at this point that the first three bytes of the +;;; strings match each other, and they can be safely passed over before +;;; starting the compare loop. So what this code does is skip over 0-3 +;;; bytes, as much as necessary in order to dword-align the edi +;;; pointer. (rsi will still be misaligned three times out of four.) +;;; +;;; It should be confessed that this loop usually does not represent +;;; much of the total running time. Replacing it with a more +;;; straightforward "rep cmpsb" would not drastically degrade +;;; performance. +*/ + +LoopCmps: + mov rax, [rsi + rdx] + xor rax, [rdi + rdx] + jnz LeaveLoopCmps + + mov rax, [rsi + rdx + 8] + xor rax, [rdi + rdx + 8] + jnz LeaveLoopCmps8 + + + mov rax, [rsi + rdx + 8+8] + xor rax, [rdi + rdx + 8+8] + jnz LeaveLoopCmps16 + + add rdx,8+8+8 + + BEFORE_JMP + jnz LoopCmps + jmp LenMaximum + AFTER_JMP + +LeaveLoopCmps16: add rdx,8 +LeaveLoopCmps8: add rdx,8 +LeaveLoopCmps: + + test eax, 0x0000FFFF + jnz LenLower + + test eax,0xffffffff + + jnz LenLower32 + + add rdx,4 + shr rax,32 + or ax,ax + BEFORE_JMP + jnz LenLower + AFTER_JMP + +LenLower32: + shr eax,16 + add rdx,2 + +LenLower: + sub al, 1 + adc rdx, 0 +//;;; Calculate the length of the match. If it is longer than MAX_MATCH, +//;;; then automatically accept it as the best possible match and leave. + + lea rax, [rdi + rdx] + sub rax, r9 + cmp eax, MAX_MATCH + BEFORE_JMP + jge LenMaximum + AFTER_JMP +/* +;;; If the length of the match is not longer than the best match we +;;; have so far, then forget it and return to the lookup loop. +;/////////////////////////////////// +*/ + cmp eax, r11d + jg LongerMatch + + lea rsi,[r10+r11] + + mov rdi, prev_ad + mov edx, [chainlenwmask] + BEFORE_JMP + jmp LookupLoop + AFTER_JMP +/* +;;; s->match_start = cur_match; +;;; best_len = len; +;;; if (len >= nice_match) break; +;;; scan_end = *(ushf*)(scan+best_len-1); +*/ +LongerMatch: + mov r11d, eax + mov match_start, r8d + cmp eax, [nicematch] + BEFORE_JMP + jge LeaveNow + AFTER_JMP + + lea rsi,[r10+rax] + + movzx ebx, word ptr [r9 + rax - 1] + mov rdi, prev_ad + mov edx, [chainlenwmask] + BEFORE_JMP + jmp LookupLoop + AFTER_JMP + +//;;; Accept the current string, with the maximum possible length. + +LenMaximum: + mov r11d,MAX_MATCH + mov match_start, r8d + +//;;; if ((uInt)best_len <= s->lookahead) return (uInt)best_len; +//;;; return s->lookahead; + +LeaveNow: + mov eax, Lookahead + cmp r11d, eax + cmovng eax, r11d + + + +//;;; Restore the stack and return from whence we came. + + +// mov rsi,[save_rsi] +// mov rdi,[save_rdi] + mov rbx,[save_rbx] + mov rbp,[save_rbp] + mov r12,[save_r12] + mov r13,[save_r13] + mov r14,[save_r14] + mov r15,[save_r15] + + + ret 0 +//; please don't remove this string ! +//; Your can freely use gvmat64 in any free or commercial app +//; but it is far better don't remove the string in the binary! + // db 0dh,0ah,"asm686 with masm, optimised assembly code from Brian Raiter, written 1998, converted to amd 64 by Gilles Vollant 2005",0dh,0ah,0 + + +match_init: + ret 0 + + diff --git a/thirdparty/zlib-1.3.1/contrib/infback9/README b/thirdparty/zlib-1.3.1/contrib/infback9/README new file mode 100644 index 0000000..e75ed13 --- /dev/null +++ b/thirdparty/zlib-1.3.1/contrib/infback9/README @@ -0,0 +1 @@ +See infback9.h for what this is and how to use it. diff --git a/thirdparty/zlib-1.3.1/contrib/infback9/infback9.c b/thirdparty/zlib-1.3.1/contrib/infback9/infback9.c new file mode 100644 index 0000000..742a392 --- /dev/null +++ b/thirdparty/zlib-1.3.1/contrib/infback9/infback9.c @@ -0,0 +1,603 @@ +/* infback9.c -- inflate deflate64 data using a call-back interface + * Copyright (C) 1995-2008 Mark Adler + * For conditions of distribution and use, see copyright notice in zlib.h + */ + +#include "zutil.h" +#include "infback9.h" +#include "inftree9.h" +#include "inflate9.h" + +#define WSIZE 65536UL + +/* + strm provides memory allocation functions in zalloc and zfree, or + Z_NULL to use the library memory allocation functions. + + window is a user-supplied window and output buffer that is 64K bytes. + */ +int ZEXPORT inflateBack9Init_(z_stream FAR *strm, unsigned char FAR *window, + const char *version, int stream_size) { + struct inflate_state FAR *state; + + if (version == Z_NULL || version[0] != ZLIB_VERSION[0] || + stream_size != (int)(sizeof(z_stream))) + return Z_VERSION_ERROR; + if (strm == Z_NULL || window == Z_NULL) + return Z_STREAM_ERROR; + strm->msg = Z_NULL; /* in case we return an error */ + if (strm->zalloc == (alloc_func)0) { + strm->zalloc = zcalloc; + strm->opaque = (voidpf)0; + } + if (strm->zfree == (free_func)0) strm->zfree = zcfree; + state = (struct inflate_state FAR *)ZALLOC(strm, 1, + sizeof(struct inflate_state)); + if (state == Z_NULL) return Z_MEM_ERROR; + Tracev((stderr, "inflate: allocated\n")); + strm->state = (voidpf)state; + state->window = window; + return Z_OK; +} + +/* + Build and output length and distance decoding tables for fixed code + decoding. + */ +#ifdef MAKEFIXED +#include + +void makefixed9(void) { + unsigned sym, bits, low, size; + code *next, *lenfix, *distfix; + struct inflate_state state; + code fixed[544]; + + /* literal/length table */ + sym = 0; + while (sym < 144) state.lens[sym++] = 8; + while (sym < 256) state.lens[sym++] = 9; + while (sym < 280) state.lens[sym++] = 7; + while (sym < 288) state.lens[sym++] = 8; + next = fixed; + lenfix = next; + bits = 9; + inflate_table9(LENS, state.lens, 288, &(next), &(bits), state.work); + + /* distance table */ + sym = 0; + while (sym < 32) state.lens[sym++] = 5; + distfix = next; + bits = 5; + inflate_table9(DISTS, state.lens, 32, &(next), &(bits), state.work); + + /* write tables */ + puts(" /* inffix9.h -- table for decoding deflate64 fixed codes"); + puts(" * Generated automatically by makefixed9()."); + puts(" */"); + puts(""); + puts(" /* WARNING: this file should *not* be used by applications."); + puts(" It is part of the implementation of this library and is"); + puts(" subject to change. Applications should only use zlib.h."); + puts(" */"); + puts(""); + size = 1U << 9; + printf(" static const code lenfix[%u] = {", size); + low = 0; + for (;;) { + if ((low % 6) == 0) printf("\n "); + printf("{%u,%u,%d}", lenfix[low].op, lenfix[low].bits, + lenfix[low].val); + if (++low == size) break; + putchar(','); + } + puts("\n };"); + size = 1U << 5; + printf("\n static const code distfix[%u] = {", size); + low = 0; + for (;;) { + if ((low % 5) == 0) printf("\n "); + printf("{%u,%u,%d}", distfix[low].op, distfix[low].bits, + distfix[low].val); + if (++low == size) break; + putchar(','); + } + puts("\n };"); +} +#endif /* MAKEFIXED */ + +/* Macros for inflateBack(): */ + +/* Clear the input bit accumulator */ +#define INITBITS() \ + do { \ + hold = 0; \ + bits = 0; \ + } while (0) + +/* Assure that some input is available. If input is requested, but denied, + then return a Z_BUF_ERROR from inflateBack(). */ +#define PULL() \ + do { \ + if (have == 0) { \ + have = in(in_desc, &next); \ + if (have == 0) { \ + next = Z_NULL; \ + ret = Z_BUF_ERROR; \ + goto inf_leave; \ + } \ + } \ + } while (0) + +/* Get a byte of input into the bit accumulator, or return from inflateBack() + with an error if there is no input available. */ +#define PULLBYTE() \ + do { \ + PULL(); \ + have--; \ + hold += (unsigned long)(*next++) << bits; \ + bits += 8; \ + } while (0) + +/* Assure that there are at least n bits in the bit accumulator. If there is + not enough available input to do that, then return from inflateBack() with + an error. */ +#define NEEDBITS(n) \ + do { \ + while (bits < (unsigned)(n)) \ + PULLBYTE(); \ + } while (0) + +/* Return the low n bits of the bit accumulator (n <= 16) */ +#define BITS(n) \ + ((unsigned)hold & ((1U << (n)) - 1)) + +/* Remove n bits from the bit accumulator */ +#define DROPBITS(n) \ + do { \ + hold >>= (n); \ + bits -= (unsigned)(n); \ + } while (0) + +/* Remove zero to seven bits as needed to go to a byte boundary */ +#define BYTEBITS() \ + do { \ + hold >>= bits & 7; \ + bits -= bits & 7; \ + } while (0) + +/* Assure that some output space is available, by writing out the window + if it's full. If the write fails, return from inflateBack() with a + Z_BUF_ERROR. */ +#define ROOM() \ + do { \ + if (left == 0) { \ + put = window; \ + left = WSIZE; \ + wrap = 1; \ + if (out(out_desc, put, (unsigned)left)) { \ + ret = Z_BUF_ERROR; \ + goto inf_leave; \ + } \ + } \ + } while (0) + +/* + strm provides the memory allocation functions and window buffer on input, + and provides information on the unused input on return. For Z_DATA_ERROR + returns, strm will also provide an error message. + + in() and out() are the call-back input and output functions. When + inflateBack() needs more input, it calls in(). When inflateBack() has + filled the window with output, or when it completes with data in the + window, it calls out() to write out the data. The application must not + change the provided input until in() is called again or inflateBack() + returns. The application must not change the window/output buffer until + inflateBack() returns. + + in() and out() are called with a descriptor parameter provided in the + inflateBack() call. This parameter can be a structure that provides the + information required to do the read or write, as well as accumulated + information on the input and output such as totals and check values. + + in() should return zero on failure. out() should return non-zero on + failure. If either in() or out() fails, than inflateBack() returns a + Z_BUF_ERROR. strm->next_in can be checked for Z_NULL to see whether it + was in() or out() that caused in the error. Otherwise, inflateBack() + returns Z_STREAM_END on success, Z_DATA_ERROR for an deflate format + error, or Z_MEM_ERROR if it could not allocate memory for the state. + inflateBack() can also return Z_STREAM_ERROR if the input parameters + are not correct, i.e. strm is Z_NULL or the state was not initialized. + */ +int ZEXPORT inflateBack9(z_stream FAR *strm, in_func in, void FAR *in_desc, + out_func out, void FAR *out_desc) { + struct inflate_state FAR *state; + z_const unsigned char FAR *next; /* next input */ + unsigned char FAR *put; /* next output */ + unsigned have; /* available input */ + unsigned long left; /* available output */ + inflate_mode mode; /* current inflate mode */ + int lastblock; /* true if processing last block */ + int wrap; /* true if the window has wrapped */ + unsigned char FAR *window; /* allocated sliding window, if needed */ + unsigned long hold; /* bit buffer */ + unsigned bits; /* bits in bit buffer */ + unsigned extra; /* extra bits needed */ + unsigned long length; /* literal or length of data to copy */ + unsigned long offset; /* distance back to copy string from */ + unsigned long copy; /* number of stored or match bytes to copy */ + unsigned char FAR *from; /* where to copy match bytes from */ + code const FAR *lencode; /* starting table for length/literal codes */ + code const FAR *distcode; /* starting table for distance codes */ + unsigned lenbits; /* index bits for lencode */ + unsigned distbits; /* index bits for distcode */ + code here; /* current decoding table entry */ + code last; /* parent table entry */ + unsigned len; /* length to copy for repeats, bits to drop */ + int ret; /* return code */ + static const unsigned short order[19] = /* permutation of code lengths */ + {16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15}; +#include "inffix9.h" + + /* Check that the strm exists and that the state was initialized */ + if (strm == Z_NULL || strm->state == Z_NULL) + return Z_STREAM_ERROR; + state = (struct inflate_state FAR *)strm->state; + + /* Reset the state */ + strm->msg = Z_NULL; + mode = TYPE; + lastblock = 0; + wrap = 0; + window = state->window; + next = strm->next_in; + have = next != Z_NULL ? strm->avail_in : 0; + hold = 0; + bits = 0; + put = window; + left = WSIZE; + lencode = Z_NULL; + distcode = Z_NULL; + + /* Inflate until end of block marked as last */ + for (;;) + switch (mode) { + case TYPE: + /* determine and dispatch block type */ + if (lastblock) { + BYTEBITS(); + mode = DONE; + break; + } + NEEDBITS(3); + lastblock = BITS(1); + DROPBITS(1); + switch (BITS(2)) { + case 0: /* stored block */ + Tracev((stderr, "inflate: stored block%s\n", + lastblock ? " (last)" : "")); + mode = STORED; + break; + case 1: /* fixed block */ + lencode = lenfix; + lenbits = 9; + distcode = distfix; + distbits = 5; + Tracev((stderr, "inflate: fixed codes block%s\n", + lastblock ? " (last)" : "")); + mode = LEN; /* decode codes */ + break; + case 2: /* dynamic block */ + Tracev((stderr, "inflate: dynamic codes block%s\n", + lastblock ? " (last)" : "")); + mode = TABLE; + break; + case 3: + strm->msg = (char *)"invalid block type"; + mode = BAD; + } + DROPBITS(2); + break; + + case STORED: + /* get and verify stored block length */ + BYTEBITS(); /* go to byte boundary */ + NEEDBITS(32); + if ((hold & 0xffff) != ((hold >> 16) ^ 0xffff)) { + strm->msg = (char *)"invalid stored block lengths"; + mode = BAD; + break; + } + length = (unsigned)hold & 0xffff; + Tracev((stderr, "inflate: stored length %lu\n", + length)); + INITBITS(); + + /* copy stored block from input to output */ + while (length != 0) { + copy = length; + PULL(); + ROOM(); + if (copy > have) copy = have; + if (copy > left) copy = left; + zmemcpy(put, next, copy); + have -= copy; + next += copy; + left -= copy; + put += copy; + length -= copy; + } + Tracev((stderr, "inflate: stored end\n")); + mode = TYPE; + break; + + case TABLE: + /* get dynamic table entries descriptor */ + NEEDBITS(14); + state->nlen = BITS(5) + 257; + DROPBITS(5); + state->ndist = BITS(5) + 1; + DROPBITS(5); + state->ncode = BITS(4) + 4; + DROPBITS(4); + if (state->nlen > 286) { + strm->msg = (char *)"too many length symbols"; + mode = BAD; + break; + } + Tracev((stderr, "inflate: table sizes ok\n")); + + /* get code length code lengths (not a typo) */ + state->have = 0; + while (state->have < state->ncode) { + NEEDBITS(3); + state->lens[order[state->have++]] = (unsigned short)BITS(3); + DROPBITS(3); + } + while (state->have < 19) + state->lens[order[state->have++]] = 0; + state->next = state->codes; + lencode = (code const FAR *)(state->next); + lenbits = 7; + ret = inflate_table9(CODES, state->lens, 19, &(state->next), + &(lenbits), state->work); + if (ret) { + strm->msg = (char *)"invalid code lengths set"; + mode = BAD; + break; + } + Tracev((stderr, "inflate: code lengths ok\n")); + + /* get length and distance code code lengths */ + state->have = 0; + while (state->have < state->nlen + state->ndist) { + for (;;) { + here = lencode[BITS(lenbits)]; + if ((unsigned)(here.bits) <= bits) break; + PULLBYTE(); + } + if (here.val < 16) { + NEEDBITS(here.bits); + DROPBITS(here.bits); + state->lens[state->have++] = here.val; + } + else { + if (here.val == 16) { + NEEDBITS(here.bits + 2); + DROPBITS(here.bits); + if (state->have == 0) { + strm->msg = (char *)"invalid bit length repeat"; + mode = BAD; + break; + } + len = (unsigned)(state->lens[state->have - 1]); + copy = 3 + BITS(2); + DROPBITS(2); + } + else if (here.val == 17) { + NEEDBITS(here.bits + 3); + DROPBITS(here.bits); + len = 0; + copy = 3 + BITS(3); + DROPBITS(3); + } + else { + NEEDBITS(here.bits + 7); + DROPBITS(here.bits); + len = 0; + copy = 11 + BITS(7); + DROPBITS(7); + } + if (state->have + copy > state->nlen + state->ndist) { + strm->msg = (char *)"invalid bit length repeat"; + mode = BAD; + break; + } + while (copy--) + state->lens[state->have++] = (unsigned short)len; + } + } + + /* handle error breaks in while */ + if (mode == BAD) break; + + /* check for end-of-block code (better have one) */ + if (state->lens[256] == 0) { + strm->msg = (char *)"invalid code -- missing end-of-block"; + mode = BAD; + break; + } + + /* build code tables -- note: do not change the lenbits or distbits + values here (9 and 6) without reading the comments in inftree9.h + concerning the ENOUGH constants, which depend on those values */ + state->next = state->codes; + lencode = (code const FAR *)(state->next); + lenbits = 9; + ret = inflate_table9(LENS, state->lens, state->nlen, + &(state->next), &(lenbits), state->work); + if (ret) { + strm->msg = (char *)"invalid literal/lengths set"; + mode = BAD; + break; + } + distcode = (code const FAR *)(state->next); + distbits = 6; + ret = inflate_table9(DISTS, state->lens + state->nlen, + state->ndist, &(state->next), &(distbits), + state->work); + if (ret) { + strm->msg = (char *)"invalid distances set"; + mode = BAD; + break; + } + Tracev((stderr, "inflate: codes ok\n")); + mode = LEN; + + case LEN: + /* get a literal, length, or end-of-block code */ + for (;;) { + here = lencode[BITS(lenbits)]; + if ((unsigned)(here.bits) <= bits) break; + PULLBYTE(); + } + if (here.op && (here.op & 0xf0) == 0) { + last = here; + for (;;) { + here = lencode[last.val + + (BITS(last.bits + last.op) >> last.bits)]; + if ((unsigned)(last.bits + here.bits) <= bits) break; + PULLBYTE(); + } + DROPBITS(last.bits); + } + DROPBITS(here.bits); + length = (unsigned)here.val; + + /* process literal */ + if (here.op == 0) { + Tracevv((stderr, here.val >= 0x20 && here.val < 0x7f ? + "inflate: literal '%c'\n" : + "inflate: literal 0x%02x\n", here.val)); + ROOM(); + *put++ = (unsigned char)(length); + left--; + mode = LEN; + break; + } + + /* process end of block */ + if (here.op & 32) { + Tracevv((stderr, "inflate: end of block\n")); + mode = TYPE; + break; + } + + /* invalid code */ + if (here.op & 64) { + strm->msg = (char *)"invalid literal/length code"; + mode = BAD; + break; + } + + /* length code -- get extra bits, if any */ + extra = (unsigned)(here.op) & 31; + if (extra != 0) { + NEEDBITS(extra); + length += BITS(extra); + DROPBITS(extra); + } + Tracevv((stderr, "inflate: length %lu\n", length)); + + /* get distance code */ + for (;;) { + here = distcode[BITS(distbits)]; + if ((unsigned)(here.bits) <= bits) break; + PULLBYTE(); + } + if ((here.op & 0xf0) == 0) { + last = here; + for (;;) { + here = distcode[last.val + + (BITS(last.bits + last.op) >> last.bits)]; + if ((unsigned)(last.bits + here.bits) <= bits) break; + PULLBYTE(); + } + DROPBITS(last.bits); + } + DROPBITS(here.bits); + if (here.op & 64) { + strm->msg = (char *)"invalid distance code"; + mode = BAD; + break; + } + offset = (unsigned)here.val; + + /* get distance extra bits, if any */ + extra = (unsigned)(here.op) & 15; + if (extra != 0) { + NEEDBITS(extra); + offset += BITS(extra); + DROPBITS(extra); + } + if (offset > WSIZE - (wrap ? 0: left)) { + strm->msg = (char *)"invalid distance too far back"; + mode = BAD; + break; + } + Tracevv((stderr, "inflate: distance %lu\n", offset)); + + /* copy match from window to output */ + do { + ROOM(); + copy = WSIZE - offset; + if (copy < left) { + from = put + copy; + copy = left - copy; + } + else { + from = put - offset; + copy = left; + } + if (copy > length) copy = length; + length -= copy; + left -= copy; + do { + *put++ = *from++; + } while (--copy); + } while (length != 0); + break; + + case DONE: + /* inflate stream terminated properly -- write leftover output */ + ret = Z_STREAM_END; + if (left < WSIZE) { + if (out(out_desc, window, (unsigned)(WSIZE - left))) + ret = Z_BUF_ERROR; + } + goto inf_leave; + + case BAD: + ret = Z_DATA_ERROR; + goto inf_leave; + + default: /* can't happen, but makes compilers happy */ + ret = Z_STREAM_ERROR; + goto inf_leave; + } + + /* Return unused input */ + inf_leave: + strm->next_in = next; + strm->avail_in = have; + return ret; +} + +int ZEXPORT inflateBack9End(z_stream FAR *strm) { + if (strm == Z_NULL || strm->state == Z_NULL || strm->zfree == (free_func)0) + return Z_STREAM_ERROR; + ZFREE(strm, strm->state); + strm->state = Z_NULL; + Tracev((stderr, "inflate: end\n")); + return Z_OK; +} diff --git a/thirdparty/zlib-1.3.1/contrib/infback9/infback9.h b/thirdparty/zlib-1.3.1/contrib/infback9/infback9.h new file mode 100644 index 0000000..8371b4e --- /dev/null +++ b/thirdparty/zlib-1.3.1/contrib/infback9/infback9.h @@ -0,0 +1,37 @@ +/* infback9.h -- header for using inflateBack9 functions + * Copyright (C) 2003 Mark Adler + * For conditions of distribution and use, see copyright notice in zlib.h + */ + +/* + * This header file and associated patches provide a decoder for PKWare's + * undocumented deflate64 compression method (method 9). Use with infback9.c, + * inftree9.h, inftree9.c, and inffix9.h. These patches are not supported. + * This should be compiled with zlib, since it uses zutil.h and zutil.o. + * This code has not yet been tested on 16-bit architectures. See the + * comments in zlib.h for inflateBack() usage. These functions are used + * identically, except that there is no windowBits parameter, and a 64K + * window must be provided. Also if int's are 16 bits, then a zero for + * the third parameter of the "out" function actually means 65536UL. + * zlib.h must be included before this header file. + */ + +#ifdef __cplusplus +extern "C" { +#endif + +ZEXTERN int ZEXPORT inflateBack9(z_stream FAR *strm, + in_func in, void FAR *in_desc, + out_func out, void FAR *out_desc); +ZEXTERN int ZEXPORT inflateBack9End(z_stream FAR *strm); +ZEXTERN int ZEXPORT inflateBack9Init_(z_stream FAR *strm, + unsigned char FAR *window, + const char *version, + int stream_size); +#define inflateBack9Init(strm, window) \ + inflateBack9Init_((strm), (window), \ + ZLIB_VERSION, sizeof(z_stream)) + +#ifdef __cplusplus +} +#endif diff --git a/thirdparty/zlib-1.3.1/contrib/infback9/inffix9.h b/thirdparty/zlib-1.3.1/contrib/infback9/inffix9.h new file mode 100644 index 0000000..ee5671d --- /dev/null +++ b/thirdparty/zlib-1.3.1/contrib/infback9/inffix9.h @@ -0,0 +1,107 @@ + /* inffix9.h -- table for decoding deflate64 fixed codes + * Generated automatically by makefixed9(). + */ + + /* WARNING: this file should *not* be used by applications. + It is part of the implementation of this library and is + subject to change. Applications should only use zlib.h. + */ + + static const code lenfix[512] = { + {96,7,0},{0,8,80},{0,8,16},{132,8,115},{130,7,31},{0,8,112}, + {0,8,48},{0,9,192},{128,7,10},{0,8,96},{0,8,32},{0,9,160}, + {0,8,0},{0,8,128},{0,8,64},{0,9,224},{128,7,6},{0,8,88}, + {0,8,24},{0,9,144},{131,7,59},{0,8,120},{0,8,56},{0,9,208}, + {129,7,17},{0,8,104},{0,8,40},{0,9,176},{0,8,8},{0,8,136}, + {0,8,72},{0,9,240},{128,7,4},{0,8,84},{0,8,20},{133,8,227}, + {131,7,43},{0,8,116},{0,8,52},{0,9,200},{129,7,13},{0,8,100}, + {0,8,36},{0,9,168},{0,8,4},{0,8,132},{0,8,68},{0,9,232}, + {128,7,8},{0,8,92},{0,8,28},{0,9,152},{132,7,83},{0,8,124}, + {0,8,60},{0,9,216},{130,7,23},{0,8,108},{0,8,44},{0,9,184}, + {0,8,12},{0,8,140},{0,8,76},{0,9,248},{128,7,3},{0,8,82}, + {0,8,18},{133,8,163},{131,7,35},{0,8,114},{0,8,50},{0,9,196}, + {129,7,11},{0,8,98},{0,8,34},{0,9,164},{0,8,2},{0,8,130}, + {0,8,66},{0,9,228},{128,7,7},{0,8,90},{0,8,26},{0,9,148}, + {132,7,67},{0,8,122},{0,8,58},{0,9,212},{130,7,19},{0,8,106}, + {0,8,42},{0,9,180},{0,8,10},{0,8,138},{0,8,74},{0,9,244}, + {128,7,5},{0,8,86},{0,8,22},{65,8,0},{131,7,51},{0,8,118}, + {0,8,54},{0,9,204},{129,7,15},{0,8,102},{0,8,38},{0,9,172}, + {0,8,6},{0,8,134},{0,8,70},{0,9,236},{128,7,9},{0,8,94}, + {0,8,30},{0,9,156},{132,7,99},{0,8,126},{0,8,62},{0,9,220}, + {130,7,27},{0,8,110},{0,8,46},{0,9,188},{0,8,14},{0,8,142}, + {0,8,78},{0,9,252},{96,7,0},{0,8,81},{0,8,17},{133,8,131}, + {130,7,31},{0,8,113},{0,8,49},{0,9,194},{128,7,10},{0,8,97}, + {0,8,33},{0,9,162},{0,8,1},{0,8,129},{0,8,65},{0,9,226}, + {128,7,6},{0,8,89},{0,8,25},{0,9,146},{131,7,59},{0,8,121}, + {0,8,57},{0,9,210},{129,7,17},{0,8,105},{0,8,41},{0,9,178}, + {0,8,9},{0,8,137},{0,8,73},{0,9,242},{128,7,4},{0,8,85}, + {0,8,21},{144,8,3},{131,7,43},{0,8,117},{0,8,53},{0,9,202}, + {129,7,13},{0,8,101},{0,8,37},{0,9,170},{0,8,5},{0,8,133}, + {0,8,69},{0,9,234},{128,7,8},{0,8,93},{0,8,29},{0,9,154}, + {132,7,83},{0,8,125},{0,8,61},{0,9,218},{130,7,23},{0,8,109}, + {0,8,45},{0,9,186},{0,8,13},{0,8,141},{0,8,77},{0,9,250}, + {128,7,3},{0,8,83},{0,8,19},{133,8,195},{131,7,35},{0,8,115}, + {0,8,51},{0,9,198},{129,7,11},{0,8,99},{0,8,35},{0,9,166}, + {0,8,3},{0,8,131},{0,8,67},{0,9,230},{128,7,7},{0,8,91}, + {0,8,27},{0,9,150},{132,7,67},{0,8,123},{0,8,59},{0,9,214}, + {130,7,19},{0,8,107},{0,8,43},{0,9,182},{0,8,11},{0,8,139}, + {0,8,75},{0,9,246},{128,7,5},{0,8,87},{0,8,23},{77,8,0}, + {131,7,51},{0,8,119},{0,8,55},{0,9,206},{129,7,15},{0,8,103}, + {0,8,39},{0,9,174},{0,8,7},{0,8,135},{0,8,71},{0,9,238}, + {128,7,9},{0,8,95},{0,8,31},{0,9,158},{132,7,99},{0,8,127}, + {0,8,63},{0,9,222},{130,7,27},{0,8,111},{0,8,47},{0,9,190}, + {0,8,15},{0,8,143},{0,8,79},{0,9,254},{96,7,0},{0,8,80}, + {0,8,16},{132,8,115},{130,7,31},{0,8,112},{0,8,48},{0,9,193}, + {128,7,10},{0,8,96},{0,8,32},{0,9,161},{0,8,0},{0,8,128}, + {0,8,64},{0,9,225},{128,7,6},{0,8,88},{0,8,24},{0,9,145}, + {131,7,59},{0,8,120},{0,8,56},{0,9,209},{129,7,17},{0,8,104}, + {0,8,40},{0,9,177},{0,8,8},{0,8,136},{0,8,72},{0,9,241}, + {128,7,4},{0,8,84},{0,8,20},{133,8,227},{131,7,43},{0,8,116}, + {0,8,52},{0,9,201},{129,7,13},{0,8,100},{0,8,36},{0,9,169}, + {0,8,4},{0,8,132},{0,8,68},{0,9,233},{128,7,8},{0,8,92}, + {0,8,28},{0,9,153},{132,7,83},{0,8,124},{0,8,60},{0,9,217}, + {130,7,23},{0,8,108},{0,8,44},{0,9,185},{0,8,12},{0,8,140}, + {0,8,76},{0,9,249},{128,7,3},{0,8,82},{0,8,18},{133,8,163}, + {131,7,35},{0,8,114},{0,8,50},{0,9,197},{129,7,11},{0,8,98}, + {0,8,34},{0,9,165},{0,8,2},{0,8,130},{0,8,66},{0,9,229}, + {128,7,7},{0,8,90},{0,8,26},{0,9,149},{132,7,67},{0,8,122}, + {0,8,58},{0,9,213},{130,7,19},{0,8,106},{0,8,42},{0,9,181}, + {0,8,10},{0,8,138},{0,8,74},{0,9,245},{128,7,5},{0,8,86}, + {0,8,22},{65,8,0},{131,7,51},{0,8,118},{0,8,54},{0,9,205}, + {129,7,15},{0,8,102},{0,8,38},{0,9,173},{0,8,6},{0,8,134}, + {0,8,70},{0,9,237},{128,7,9},{0,8,94},{0,8,30},{0,9,157}, + {132,7,99},{0,8,126},{0,8,62},{0,9,221},{130,7,27},{0,8,110}, + {0,8,46},{0,9,189},{0,8,14},{0,8,142},{0,8,78},{0,9,253}, + {96,7,0},{0,8,81},{0,8,17},{133,8,131},{130,7,31},{0,8,113}, + {0,8,49},{0,9,195},{128,7,10},{0,8,97},{0,8,33},{0,9,163}, + {0,8,1},{0,8,129},{0,8,65},{0,9,227},{128,7,6},{0,8,89}, + {0,8,25},{0,9,147},{131,7,59},{0,8,121},{0,8,57},{0,9,211}, + {129,7,17},{0,8,105},{0,8,41},{0,9,179},{0,8,9},{0,8,137}, + {0,8,73},{0,9,243},{128,7,4},{0,8,85},{0,8,21},{144,8,3}, + {131,7,43},{0,8,117},{0,8,53},{0,9,203},{129,7,13},{0,8,101}, + {0,8,37},{0,9,171},{0,8,5},{0,8,133},{0,8,69},{0,9,235}, + {128,7,8},{0,8,93},{0,8,29},{0,9,155},{132,7,83},{0,8,125}, + {0,8,61},{0,9,219},{130,7,23},{0,8,109},{0,8,45},{0,9,187}, + {0,8,13},{0,8,141},{0,8,77},{0,9,251},{128,7,3},{0,8,83}, + {0,8,19},{133,8,195},{131,7,35},{0,8,115},{0,8,51},{0,9,199}, + {129,7,11},{0,8,99},{0,8,35},{0,9,167},{0,8,3},{0,8,131}, + {0,8,67},{0,9,231},{128,7,7},{0,8,91},{0,8,27},{0,9,151}, + {132,7,67},{0,8,123},{0,8,59},{0,9,215},{130,7,19},{0,8,107}, + {0,8,43},{0,9,183},{0,8,11},{0,8,139},{0,8,75},{0,9,247}, + {128,7,5},{0,8,87},{0,8,23},{77,8,0},{131,7,51},{0,8,119}, + {0,8,55},{0,9,207},{129,7,15},{0,8,103},{0,8,39},{0,9,175}, + {0,8,7},{0,8,135},{0,8,71},{0,9,239},{128,7,9},{0,8,95}, + {0,8,31},{0,9,159},{132,7,99},{0,8,127},{0,8,63},{0,9,223}, + {130,7,27},{0,8,111},{0,8,47},{0,9,191},{0,8,15},{0,8,143}, + {0,8,79},{0,9,255} + }; + + static const code distfix[32] = { + {128,5,1},{135,5,257},{131,5,17},{139,5,4097},{129,5,5}, + {137,5,1025},{133,5,65},{141,5,16385},{128,5,3},{136,5,513}, + {132,5,33},{140,5,8193},{130,5,9},{138,5,2049},{134,5,129}, + {142,5,32769},{128,5,2},{135,5,385},{131,5,25},{139,5,6145}, + {129,5,7},{137,5,1537},{133,5,97},{141,5,24577},{128,5,4}, + {136,5,769},{132,5,49},{140,5,12289},{130,5,13},{138,5,3073}, + {134,5,193},{142,5,49153} + }; diff --git a/thirdparty/zlib-1.3.1/contrib/infback9/inflate9.h b/thirdparty/zlib-1.3.1/contrib/infback9/inflate9.h new file mode 100644 index 0000000..ee9a793 --- /dev/null +++ b/thirdparty/zlib-1.3.1/contrib/infback9/inflate9.h @@ -0,0 +1,47 @@ +/* inflate9.h -- internal inflate state definition + * Copyright (C) 1995-2003 Mark Adler + * For conditions of distribution and use, see copyright notice in zlib.h + */ + +/* WARNING: this file should *not* be used by applications. It is + part of the implementation of the compression library and is + subject to change. Applications should only use zlib.h. + */ + +/* Possible inflate modes between inflate() calls */ +typedef enum { + TYPE, /* i: waiting for type bits, including last-flag bit */ + STORED, /* i: waiting for stored size (length and complement) */ + TABLE, /* i: waiting for dynamic block table lengths */ + LEN, /* i: waiting for length/lit code */ + DONE, /* finished check, done -- remain here until reset */ + BAD /* got a data error -- remain here until reset */ +} inflate_mode; + +/* + State transitions between above modes - + + (most modes can go to the BAD mode -- not shown for clarity) + + Read deflate blocks: + TYPE -> STORED or TABLE or LEN or DONE + STORED -> TYPE + TABLE -> LENLENS -> CODELENS -> LEN + Read deflate codes: + LEN -> LEN or TYPE + */ + +/* state maintained between inflate() calls. Approximately 7K bytes. */ +struct inflate_state { + /* sliding window */ + unsigned char FAR *window; /* allocated sliding window, if needed */ + /* dynamic table building */ + unsigned ncode; /* number of code length code lengths */ + unsigned nlen; /* number of length code lengths */ + unsigned ndist; /* number of distance code lengths */ + unsigned have; /* number of code lengths in lens[] */ + code FAR *next; /* next available space in codes[] */ + unsigned short lens[320]; /* temporary storage for code lengths */ + unsigned short work[288]; /* work area for code table building */ + code codes[ENOUGH]; /* space for code tables */ +}; diff --git a/thirdparty/zlib-1.3.1/contrib/infback9/inftree9.c b/thirdparty/zlib-1.3.1/contrib/infback9/inftree9.c new file mode 100644 index 0000000..ac707ed --- /dev/null +++ b/thirdparty/zlib-1.3.1/contrib/infback9/inftree9.c @@ -0,0 +1,319 @@ +/* inftree9.c -- generate Huffman trees for efficient decoding + * Copyright (C) 1995-2024 Mark Adler + * For conditions of distribution and use, see copyright notice in zlib.h + */ + +#include "zutil.h" +#include "inftree9.h" + +#define MAXBITS 15 + +const char inflate9_copyright[] = + " inflate9 1.3.1 Copyright 1995-2024 Mark Adler "; +/* + If you use the zlib library in a product, an acknowledgment is welcome + in the documentation of your product. If for some reason you cannot + include such an acknowledgment, I would appreciate that you keep this + copyright string in the executable of your product. + */ + +/* + Build a set of tables to decode the provided canonical Huffman code. + The code lengths are lens[0..codes-1]. The result starts at *table, + whose indices are 0..2^bits-1. work is a writable array of at least + lens shorts, which is used as a work area. type is the type of code + to be generated, CODES, LENS, or DISTS. On return, zero is success, + -1 is an invalid code, and +1 means that ENOUGH isn't enough. table + on return points to the next available entry's address. bits is the + requested root table index bits, and on return it is the actual root + table index bits. It will differ if the request is greater than the + longest code or if it is less than the shortest code. + */ +int inflate_table9(codetype type, unsigned short FAR *lens, unsigned codes, + code FAR * FAR *table, unsigned FAR *bits, + unsigned short FAR *work) { + unsigned len; /* a code's length in bits */ + unsigned sym; /* index of code symbols */ + unsigned min, max; /* minimum and maximum code lengths */ + unsigned root; /* number of index bits for root table */ + unsigned curr; /* number of index bits for current table */ + unsigned drop; /* code bits to drop for sub-table */ + int left; /* number of prefix codes available */ + unsigned used; /* code entries in table used */ + unsigned huff; /* Huffman code */ + unsigned incr; /* for incrementing code, index */ + unsigned fill; /* index for replicating entries */ + unsigned low; /* low bits for current root entry */ + unsigned mask; /* mask for low root bits */ + code this; /* table entry for duplication */ + code FAR *next; /* next available space in table */ + const unsigned short FAR *base; /* base value table to use */ + const unsigned short FAR *extra; /* extra bits table to use */ + int end; /* use base and extra for symbol > end */ + unsigned short count[MAXBITS+1]; /* number of codes of each length */ + unsigned short offs[MAXBITS+1]; /* offsets in table for each length */ + static const unsigned short lbase[31] = { /* Length codes 257..285 base */ + 3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, + 19, 23, 27, 31, 35, 43, 51, 59, 67, 83, 99, 115, + 131, 163, 195, 227, 3, 0, 0}; + static const unsigned short lext[31] = { /* Length codes 257..285 extra */ + 128, 128, 128, 128, 128, 128, 128, 128, 129, 129, 129, 129, + 130, 130, 130, 130, 131, 131, 131, 131, 132, 132, 132, 132, + 133, 133, 133, 133, 144, 203, 77}; + static const unsigned short dbase[32] = { /* Distance codes 0..31 base */ + 1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, + 65, 97, 129, 193, 257, 385, 513, 769, 1025, 1537, 2049, 3073, + 4097, 6145, 8193, 12289, 16385, 24577, 32769, 49153}; + static const unsigned short dext[32] = { /* Distance codes 0..31 extra */ + 128, 128, 128, 128, 129, 129, 130, 130, 131, 131, 132, 132, + 133, 133, 134, 134, 135, 135, 136, 136, 137, 137, 138, 138, + 139, 139, 140, 140, 141, 141, 142, 142}; + + /* + Process a set of code lengths to create a canonical Huffman code. The + code lengths are lens[0..codes-1]. Each length corresponds to the + symbols 0..codes-1. The Huffman code is generated by first sorting the + symbols by length from short to long, and retaining the symbol order + for codes with equal lengths. Then the code starts with all zero bits + for the first code of the shortest length, and the codes are integer + increments for the same length, and zeros are appended as the length + increases. For the deflate format, these bits are stored backwards + from their more natural integer increment ordering, and so when the + decoding tables are built in the large loop below, the integer codes + are incremented backwards. + + This routine assumes, but does not check, that all of the entries in + lens[] are in the range 0..MAXBITS. The caller must assure this. + 1..MAXBITS is interpreted as that code length. zero means that that + symbol does not occur in this code. + + The codes are sorted by computing a count of codes for each length, + creating from that a table of starting indices for each length in the + sorted table, and then entering the symbols in order in the sorted + table. The sorted table is work[], with that space being provided by + the caller. + + The length counts are used for other purposes as well, i.e. finding + the minimum and maximum length codes, determining if there are any + codes at all, checking for a valid set of lengths, and looking ahead + at length counts to determine sub-table sizes when building the + decoding tables. + */ + + /* accumulate lengths for codes (assumes lens[] all in 0..MAXBITS) */ + for (len = 0; len <= MAXBITS; len++) + count[len] = 0; + for (sym = 0; sym < codes; sym++) + count[lens[sym]]++; + + /* bound code lengths, force root to be within code lengths */ + root = *bits; + for (max = MAXBITS; max >= 1; max--) + if (count[max] != 0) break; + if (root > max) root = max; + if (max == 0) return -1; /* no codes! */ + for (min = 1; min <= MAXBITS; min++) + if (count[min] != 0) break; + if (root < min) root = min; + + /* check for an over-subscribed or incomplete set of lengths */ + left = 1; + for (len = 1; len <= MAXBITS; len++) { + left <<= 1; + left -= count[len]; + if (left < 0) return -1; /* over-subscribed */ + } + if (left > 0 && (type == CODES || max != 1)) + return -1; /* incomplete set */ + + /* generate offsets into symbol table for each length for sorting */ + offs[1] = 0; + for (len = 1; len < MAXBITS; len++) + offs[len + 1] = offs[len] + count[len]; + + /* sort symbols by length, by symbol order within each length */ + for (sym = 0; sym < codes; sym++) + if (lens[sym] != 0) work[offs[lens[sym]]++] = (unsigned short)sym; + + /* + Create and fill in decoding tables. In this loop, the table being + filled is at next and has curr index bits. The code being used is huff + with length len. That code is converted to an index by dropping drop + bits off of the bottom. For codes where len is less than drop + curr, + those top drop + curr - len bits are incremented through all values to + fill the table with replicated entries. + + root is the number of index bits for the root table. When len exceeds + root, sub-tables are created pointed to by the root entry with an index + of the low root bits of huff. This is saved in low to check for when a + new sub-table should be started. drop is zero when the root table is + being filled, and drop is root when sub-tables are being filled. + + When a new sub-table is needed, it is necessary to look ahead in the + code lengths to determine what size sub-table is needed. The length + counts are used for this, and so count[] is decremented as codes are + entered in the tables. + + used keeps track of how many table entries have been allocated from the + provided *table space. It is checked for LENS and DIST tables against + the constants ENOUGH_LENS and ENOUGH_DISTS to guard against changes in + the initial root table size constants. See the comments in inftree9.h + for more information. + + sym increments through all symbols, and the loop terminates when + all codes of length max, i.e. all codes, have been processed. This + routine permits incomplete codes, so another loop after this one fills + in the rest of the decoding tables with invalid code markers. + */ + + /* set up for code type */ + switch (type) { + case CODES: + base = extra = work; /* dummy value--not used */ + end = 19; + break; + case LENS: + base = lbase; + base -= 257; + extra = lext; + extra -= 257; + end = 256; + break; + default: /* DISTS */ + base = dbase; + extra = dext; + end = -1; + } + + /* initialize state for loop */ + huff = 0; /* starting code */ + sym = 0; /* starting code symbol */ + len = min; /* starting code length */ + next = *table; /* current table to fill in */ + curr = root; /* current table index bits */ + drop = 0; /* current bits to drop from code for index */ + low = (unsigned)(-1); /* trigger new sub-table when len > root */ + used = 1U << root; /* use root table entries */ + mask = used - 1; /* mask for comparing low */ + + /* check available table space */ + if ((type == LENS && used >= ENOUGH_LENS) || + (type == DISTS && used >= ENOUGH_DISTS)) + return 1; + + /* process all codes and make table entries */ + for (;;) { + /* create table entry */ + this.bits = (unsigned char)(len - drop); + if ((int)(work[sym]) < end) { + this.op = (unsigned char)0; + this.val = work[sym]; + } + else if ((int)(work[sym]) > end) { + this.op = (unsigned char)(extra[work[sym]]); + this.val = base[work[sym]]; + } + else { + this.op = (unsigned char)(32 + 64); /* end of block */ + this.val = 0; + } + + /* replicate for those indices with low len bits equal to huff */ + incr = 1U << (len - drop); + fill = 1U << curr; + do { + fill -= incr; + next[(huff >> drop) + fill] = this; + } while (fill != 0); + + /* backwards increment the len-bit code huff */ + incr = 1U << (len - 1); + while (huff & incr) + incr >>= 1; + if (incr != 0) { + huff &= incr - 1; + huff += incr; + } + else + huff = 0; + + /* go to next symbol, update count, len */ + sym++; + if (--(count[len]) == 0) { + if (len == max) break; + len = lens[work[sym]]; + } + + /* create new sub-table if needed */ + if (len > root && (huff & mask) != low) { + /* if first time, transition to sub-tables */ + if (drop == 0) + drop = root; + + /* increment past last table */ + next += 1U << curr; + + /* determine length of next table */ + curr = len - drop; + left = (int)(1 << curr); + while (curr + drop < max) { + left -= count[curr + drop]; + if (left <= 0) break; + curr++; + left <<= 1; + } + + /* check for enough space */ + used += 1U << curr; + if ((type == LENS && used >= ENOUGH_LENS) || + (type == DISTS && used >= ENOUGH_DISTS)) + return 1; + + /* point entry in root table to sub-table */ + low = huff & mask; + (*table)[low].op = (unsigned char)curr; + (*table)[low].bits = (unsigned char)root; + (*table)[low].val = (unsigned short)(next - *table); + } + } + + /* + Fill in rest of table for incomplete codes. This loop is similar to the + loop above in incrementing huff for table indices. It is assumed that + len is equal to curr + drop, so there is no loop needed to increment + through high index bits. When the current sub-table is filled, the loop + drops back to the root table to fill in any remaining entries there. + */ + this.op = (unsigned char)64; /* invalid code marker */ + this.bits = (unsigned char)(len - drop); + this.val = (unsigned short)0; + while (huff != 0) { + /* when done with sub-table, drop back to root table */ + if (drop != 0 && (huff & mask) != low) { + drop = 0; + len = root; + next = *table; + curr = root; + this.bits = (unsigned char)len; + } + + /* put invalid code marker in table */ + next[huff >> drop] = this; + + /* backwards increment the len-bit code huff */ + incr = 1U << (len - 1); + while (huff & incr) + incr >>= 1; + if (incr != 0) { + huff &= incr - 1; + huff += incr; + } + else + huff = 0; + } + + /* set return parameters */ + *table += used; + *bits = root; + return 0; +} diff --git a/thirdparty/zlib-1.3.1/contrib/infback9/inftree9.h b/thirdparty/zlib-1.3.1/contrib/infback9/inftree9.h new file mode 100644 index 0000000..ab2ea28 --- /dev/null +++ b/thirdparty/zlib-1.3.1/contrib/infback9/inftree9.h @@ -0,0 +1,61 @@ +/* inftree9.h -- header to use inftree9.c + * Copyright (C) 1995-2008 Mark Adler + * For conditions of distribution and use, see copyright notice in zlib.h + */ + +/* WARNING: this file should *not* be used by applications. It is + part of the implementation of the compression library and is + subject to change. Applications should only use zlib.h. + */ + +/* Structure for decoding tables. Each entry provides either the + information needed to do the operation requested by the code that + indexed that table entry, or it provides a pointer to another + table that indexes more bits of the code. op indicates whether + the entry is a pointer to another table, a literal, a length or + distance, an end-of-block, or an invalid code. For a table + pointer, the low four bits of op is the number of index bits of + that table. For a length or distance, the low four bits of op + is the number of extra bits to get after the code. bits is + the number of bits in this code or part of the code to drop off + of the bit buffer. val is the actual byte to output in the case + of a literal, the base length or distance, or the offset from + the current table to the next table. Each entry is four bytes. */ +typedef struct { + unsigned char op; /* operation, extra bits, table bits */ + unsigned char bits; /* bits in this part of the code */ + unsigned short val; /* offset in table or code value */ +} code; + +/* op values as set by inflate_table(): + 00000000 - literal + 0000tttt - table link, tttt != 0 is the number of table index bits + 100eeeee - length or distance, eeee is the number of extra bits + 01100000 - end of block + 01000000 - invalid code + */ + +/* Maximum size of the dynamic table. The maximum number of code structures is + 1446, which is the sum of 852 for literal/length codes and 594 for distance + codes. These values were found by exhaustive searches using the program + examples/enough.c found in the zlib distribution. The arguments to that + program are the number of symbols, the initial root table size, and the + maximum bit length of a code. "enough 286 9 15" for literal/length codes + returns 852, and "enough 32 6 15" for distance codes returns 594. The + initial root table size (9 or 6) is found in the fifth argument of the + inflate_table() calls in infback9.c. If the root table size is changed, + then these maximum sizes would be need to be recalculated and updated. */ +#define ENOUGH_LENS 852 +#define ENOUGH_DISTS 594 +#define ENOUGH (ENOUGH_LENS+ENOUGH_DISTS) + +/* Type of code to build for inflate_table9() */ +typedef enum { + CODES, + LENS, + DISTS +} codetype; + +extern int inflate_table9(codetype type, unsigned short FAR *lens, + unsigned codes, code FAR * FAR *table, + unsigned FAR *bits, unsigned short FAR *work); diff --git a/thirdparty/zlib-1.3.1/contrib/iostream/test.cpp b/thirdparty/zlib-1.3.1/contrib/iostream/test.cpp new file mode 100644 index 0000000..7d265b3 --- /dev/null +++ b/thirdparty/zlib-1.3.1/contrib/iostream/test.cpp @@ -0,0 +1,24 @@ + +#include "zfstream.h" + +int main() { + + // Construct a stream object with this filebuffer. Anything sent + // to this stream will go to standard out. + gzofstream os( 1, ios::out ); + + // This text is getting compressed and sent to stdout. + // To prove this, run 'test | zcat'. + os << "Hello, Mommy" << endl; + + os << setcompressionlevel( Z_NO_COMPRESSION ); + os << "hello, hello, hi, ho!" << endl; + + setcompressionlevel( os, Z_DEFAULT_COMPRESSION ) + << "I'm compressing again" << endl; + + os.close(); + + return 0; + +} diff --git a/thirdparty/zlib-1.3.1/contrib/iostream/zfstream.cpp b/thirdparty/zlib-1.3.1/contrib/iostream/zfstream.cpp new file mode 100644 index 0000000..d0cd85f --- /dev/null +++ b/thirdparty/zlib-1.3.1/contrib/iostream/zfstream.cpp @@ -0,0 +1,329 @@ + +#include "zfstream.h" + +gzfilebuf::gzfilebuf() : + file(NULL), + mode(0), + own_file_descriptor(0) +{ } + +gzfilebuf::~gzfilebuf() { + + sync(); + if ( own_file_descriptor ) + close(); + +} + +gzfilebuf *gzfilebuf::open( const char *name, + int io_mode ) { + + if ( is_open() ) + return NULL; + + char char_mode[10]; + char *p = char_mode; + + if ( io_mode & ios::in ) { + mode = ios::in; + *p++ = 'r'; + } else if ( io_mode & ios::app ) { + mode = ios::app; + *p++ = 'a'; + } else { + mode = ios::out; + *p++ = 'w'; + } + + if ( io_mode & ios::binary ) { + mode |= ios::binary; + *p++ = 'b'; + } + + // Hard code the compression level + if ( io_mode & (ios::out|ios::app )) { + *p++ = '9'; + } + + // Put the end-of-string indicator + *p = '\0'; + + if ( (file = gzopen(name, char_mode)) == NULL ) + return NULL; + + own_file_descriptor = 1; + + return this; + +} + +gzfilebuf *gzfilebuf::attach( int file_descriptor, + int io_mode ) { + + if ( is_open() ) + return NULL; + + char char_mode[10]; + char *p = char_mode; + + if ( io_mode & ios::in ) { + mode = ios::in; + *p++ = 'r'; + } else if ( io_mode & ios::app ) { + mode = ios::app; + *p++ = 'a'; + } else { + mode = ios::out; + *p++ = 'w'; + } + + if ( io_mode & ios::binary ) { + mode |= ios::binary; + *p++ = 'b'; + } + + // Hard code the compression level + if ( io_mode & (ios::out|ios::app )) { + *p++ = '9'; + } + + // Put the end-of-string indicator + *p = '\0'; + + if ( (file = gzdopen(file_descriptor, char_mode)) == NULL ) + return NULL; + + own_file_descriptor = 0; + + return this; + +} + +gzfilebuf *gzfilebuf::close() { + + if ( is_open() ) { + + sync(); + gzclose( file ); + file = NULL; + + } + + return this; + +} + +int gzfilebuf::setcompressionlevel( int comp_level ) { + + return gzsetparams(file, comp_level, -2); + +} + +int gzfilebuf::setcompressionstrategy( int comp_strategy ) { + + return gzsetparams(file, -2, comp_strategy); + +} + + +streampos gzfilebuf::seekoff( streamoff off, ios::seek_dir dir, int which ) { + + return streampos(EOF); + +} + +int gzfilebuf::underflow() { + + // If the file hasn't been opened for reading, error. + if ( !is_open() || !(mode & ios::in) ) + return EOF; + + // if a buffer doesn't exists, allocate one. + if ( !base() ) { + + if ( (allocate()) == EOF ) + return EOF; + setp(0,0); + + } else { + + if ( in_avail() ) + return (unsigned char) *gptr(); + + if ( out_waiting() ) { + if ( flushbuf() == EOF ) + return EOF; + } + + } + + // Attempt to fill the buffer. + + int result = fillbuf(); + if ( result == EOF ) { + // disable get area + setg(0,0,0); + return EOF; + } + + return (unsigned char) *gptr(); + +} + +int gzfilebuf::overflow( int c ) { + + if ( !is_open() || !(mode & ios::out) ) + return EOF; + + if ( !base() ) { + if ( allocate() == EOF ) + return EOF; + setg(0,0,0); + } else { + if (in_avail()) { + return EOF; + } + if (out_waiting()) { + if (flushbuf() == EOF) + return EOF; + } + } + + int bl = blen(); + setp( base(), base() + bl); + + if ( c != EOF ) { + + *pptr() = c; + pbump(1); + + } + + return 0; + +} + +int gzfilebuf::sync() { + + if ( !is_open() ) + return EOF; + + if ( out_waiting() ) + return flushbuf(); + + return 0; + +} + +int gzfilebuf::flushbuf() { + + int n; + char *q; + + q = pbase(); + n = pptr() - q; + + if ( gzwrite( file, q, n) < n ) + return EOF; + + setp(0,0); + + return 0; + +} + +int gzfilebuf::fillbuf() { + + int required; + char *p; + + p = base(); + + required = blen(); + + int t = gzread( file, p, required ); + + if ( t <= 0) return EOF; + + setg( base(), base(), base()+t); + + return t; + +} + +gzfilestream_common::gzfilestream_common() : + ios( gzfilestream_common::rdbuf() ) +{ } + +gzfilestream_common::~gzfilestream_common() +{ } + +void gzfilestream_common::attach( int fd, int io_mode ) { + + if ( !buffer.attach( fd, io_mode) ) + clear( ios::failbit | ios::badbit ); + else + clear(); + +} + +void gzfilestream_common::open( const char *name, int io_mode ) { + + if ( !buffer.open( name, io_mode ) ) + clear( ios::failbit | ios::badbit ); + else + clear(); + +} + +void gzfilestream_common::close() { + + if ( !buffer.close() ) + clear( ios::failbit | ios::badbit ); + +} + +gzfilebuf *gzfilestream_common::rdbuf() +{ + return &buffer; +} + +gzifstream::gzifstream() : + ios( gzfilestream_common::rdbuf() ) +{ + clear( ios::badbit ); +} + +gzifstream::gzifstream( const char *name, int io_mode ) : + ios( gzfilestream_common::rdbuf() ) +{ + gzfilestream_common::open( name, io_mode ); +} + +gzifstream::gzifstream( int fd, int io_mode ) : + ios( gzfilestream_common::rdbuf() ) +{ + gzfilestream_common::attach( fd, io_mode ); +} + +gzifstream::~gzifstream() { } + +gzofstream::gzofstream() : + ios( gzfilestream_common::rdbuf() ) +{ + clear( ios::badbit ); +} + +gzofstream::gzofstream( const char *name, int io_mode ) : + ios( gzfilestream_common::rdbuf() ) +{ + gzfilestream_common::open( name, io_mode ); +} + +gzofstream::gzofstream( int fd, int io_mode ) : + ios( gzfilestream_common::rdbuf() ) +{ + gzfilestream_common::attach( fd, io_mode ); +} + +gzofstream::~gzofstream() { } diff --git a/thirdparty/zlib-1.3.1/contrib/iostream/zfstream.h b/thirdparty/zlib-1.3.1/contrib/iostream/zfstream.h new file mode 100644 index 0000000..ed79098 --- /dev/null +++ b/thirdparty/zlib-1.3.1/contrib/iostream/zfstream.h @@ -0,0 +1,128 @@ + +#ifndef zfstream_h +#define zfstream_h + +#include +#include "zlib.h" + +class gzfilebuf : public streambuf { + +public: + + gzfilebuf( ); + virtual ~gzfilebuf(); + + gzfilebuf *open( const char *name, int io_mode ); + gzfilebuf *attach( int file_descriptor, int io_mode ); + gzfilebuf *close(); + + int setcompressionlevel( int comp_level ); + int setcompressionstrategy( int comp_strategy ); + + inline int is_open() const { return (file !=NULL); } + + virtual streampos seekoff( streamoff, ios::seek_dir, int ); + + virtual int sync(); + +protected: + + virtual int underflow(); + virtual int overflow( int = EOF ); + +private: + + gzFile file; + short mode; + short own_file_descriptor; + + int flushbuf(); + int fillbuf(); + +}; + +class gzfilestream_common : virtual public ios { + + friend class gzifstream; + friend class gzofstream; + friend gzofstream &setcompressionlevel( gzofstream &, int ); + friend gzofstream &setcompressionstrategy( gzofstream &, int ); + +public: + virtual ~gzfilestream_common(); + + void attach( int fd, int io_mode ); + void open( const char *name, int io_mode ); + void close(); + +protected: + gzfilestream_common(); + +private: + gzfilebuf *rdbuf(); + + gzfilebuf buffer; + +}; + +class gzifstream : public gzfilestream_common, public istream { + +public: + + gzifstream(); + gzifstream( const char *name, int io_mode = ios::in ); + gzifstream( int fd, int io_mode = ios::in ); + + virtual ~gzifstream(); + +}; + +class gzofstream : public gzfilestream_common, public ostream { + +public: + + gzofstream(); + gzofstream( const char *name, int io_mode = ios::out ); + gzofstream( int fd, int io_mode = ios::out ); + + virtual ~gzofstream(); + +}; + +template class gzomanip { + friend gzofstream &operator<<(gzofstream &, const gzomanip &); +public: + gzomanip(gzofstream &(*f)(gzofstream &, T), T v) : func(f), val(v) { } +private: + gzofstream &(*func)(gzofstream &, T); + T val; +}; + +template gzofstream &operator<<(gzofstream &s, const gzomanip &m) +{ + return (*m.func)(s, m.val); +} + +inline gzofstream &setcompressionlevel( gzofstream &s, int l ) +{ + (s.rdbuf())->setcompressionlevel(l); + return s; +} + +inline gzofstream &setcompressionstrategy( gzofstream &s, int l ) +{ + (s.rdbuf())->setcompressionstrategy(l); + return s; +} + +inline gzomanip setcompressionlevel(int l) +{ + return gzomanip(&setcompressionlevel,l); +} + +inline gzomanip setcompressionstrategy(int l) +{ + return gzomanip(&setcompressionstrategy,l); +} + +#endif diff --git a/thirdparty/zlib-1.3.1/contrib/iostream2/zstream.h b/thirdparty/zlib-1.3.1/contrib/iostream2/zstream.h new file mode 100644 index 0000000..43d2332 --- /dev/null +++ b/thirdparty/zlib-1.3.1/contrib/iostream2/zstream.h @@ -0,0 +1,307 @@ +/* + * + * Copyright (c) 1997 + * Christian Michelsen Research AS + * Advanced Computing + * Fantoftvegen 38, 5036 BERGEN, Norway + * http://www.cmr.no + * + * Permission to use, copy, modify, distribute and sell this software + * and its documentation for any purpose is hereby granted without fee, + * provided that the above copyright notice appear in all copies and + * that both that copyright notice and this permission notice appear + * in supporting documentation. Christian Michelsen Research AS makes no + * representations about the suitability of this software for any + * purpose. It is provided "as is" without express or implied warranty. + * + */ + +#ifndef ZSTREAM__H +#define ZSTREAM__H + +/* + * zstream.h - C++ interface to the 'zlib' general purpose compression library + * $Id: zstream.h 1.1 1997-06-25 12:00:56+02 tyge Exp tyge $ + */ + +#include +#include +#include +#include "zlib.h" + +#if defined(_WIN32) +# include +# include +# define SET_BINARY_MODE(file) setmode(fileno(file), O_BINARY) +#else +# define SET_BINARY_MODE(file) +#endif + +class zstringlen { +public: + zstringlen(class izstream&); + zstringlen(class ozstream&, const char*); + size_t value() const { return val.word; } +private: + struct Val { unsigned char byte; size_t word; } val; +}; + +// ----------------------------- izstream ----------------------------- + +class izstream +{ + public: + izstream() : m_fp(0) {} + izstream(FILE* fp) : m_fp(0) { open(fp); } + izstream(const char* name) : m_fp(0) { open(name); } + ~izstream() { close(); } + + /* Opens a gzip (.gz) file for reading. + * open() can be used to read a file which is not in gzip format; + * in this case read() will directly read from the file without + * decompression. errno can be checked to distinguish two error + * cases (if errno is zero, the zlib error is Z_MEM_ERROR). + */ + void open(const char* name) { + if (m_fp) close(); + m_fp = ::gzopen(name, "rb"); + } + + void open(FILE* fp) { + SET_BINARY_MODE(fp); + if (m_fp) close(); + m_fp = ::gzdopen(fileno(fp), "rb"); + } + + /* Flushes all pending input if necessary, closes the compressed file + * and deallocates all the (de)compression state. The return value is + * the zlib error number (see function error() below). + */ + int close() { + int r = ::gzclose(m_fp); + m_fp = 0; return r; + } + + /* Binary read the given number of bytes from the compressed file. + */ + int read(void* buf, size_t len) { + return ::gzread(m_fp, buf, len); + } + + /* Returns the error message for the last error which occurred on the + * given compressed file. errnum is set to zlib error number. If an + * error occurred in the file system and not in the compression library, + * errnum is set to Z_ERRNO and the application may consult errno + * to get the exact error code. + */ + const char* error(int* errnum) { + return ::gzerror(m_fp, errnum); + } + + gzFile fp() { return m_fp; } + + private: + gzFile m_fp; +}; + +/* + * Binary read the given (array of) object(s) from the compressed file. + * If the input file was not in gzip format, read() copies the objects number + * of bytes into the buffer. + * returns the number of uncompressed bytes actually read + * (0 for end of file, -1 for error). + */ +template +inline int read(izstream& zs, T* x, Items items) { + return ::gzread(zs.fp(), x, items*sizeof(T)); +} + +/* + * Binary input with the '>' operator. + */ +template +inline izstream& operator>(izstream& zs, T& x) { + ::gzread(zs.fp(), &x, sizeof(T)); + return zs; +} + + +inline zstringlen::zstringlen(izstream& zs) { + zs > val.byte; + if (val.byte == 255) zs > val.word; + else val.word = val.byte; +} + +/* + * Read length of string + the string with the '>' operator. + */ +inline izstream& operator>(izstream& zs, char* x) { + zstringlen len(zs); + ::gzread(zs.fp(), x, len.value()); + x[len.value()] = '\0'; + return zs; +} + +inline char* read_string(izstream& zs) { + zstringlen len(zs); + char* x = new char[len.value()+1]; + ::gzread(zs.fp(), x, len.value()); + x[len.value()] = '\0'; + return x; +} + +// ----------------------------- ozstream ----------------------------- + +class ozstream +{ + public: + ozstream() : m_fp(0), m_os(0) { + } + ozstream(FILE* fp, int level = Z_DEFAULT_COMPRESSION) + : m_fp(0), m_os(0) { + open(fp, level); + } + ozstream(const char* name, int level = Z_DEFAULT_COMPRESSION) + : m_fp(0), m_os(0) { + open(name, level); + } + ~ozstream() { + close(); + } + + /* Opens a gzip (.gz) file for writing. + * The compression level parameter should be in 0..9 + * errno can be checked to distinguish two error cases + * (if errno is zero, the zlib error is Z_MEM_ERROR). + */ + void open(const char* name, int level = Z_DEFAULT_COMPRESSION) { + char mode[4] = "wb\0"; + if (level != Z_DEFAULT_COMPRESSION) mode[2] = '0'+level; + if (m_fp) close(); + m_fp = ::gzopen(name, mode); + } + + /* open from a FILE pointer. + */ + void open(FILE* fp, int level = Z_DEFAULT_COMPRESSION) { + SET_BINARY_MODE(fp); + char mode[4] = "wb\0"; + if (level != Z_DEFAULT_COMPRESSION) mode[2] = '0'+level; + if (m_fp) close(); + m_fp = ::gzdopen(fileno(fp), mode); + } + + /* Flushes all pending output if necessary, closes the compressed file + * and deallocates all the (de)compression state. The return value is + * the zlib error number (see function error() below). + */ + int close() { + if (m_os) { + ::gzwrite(m_fp, m_os->str(), m_os->pcount()); + delete[] m_os->str(); delete m_os; m_os = 0; + } + int r = ::gzclose(m_fp); m_fp = 0; return r; + } + + /* Binary write the given number of bytes into the compressed file. + */ + int write(const void* buf, size_t len) { + return ::gzwrite(m_fp, (voidp) buf, len); + } + + /* Flushes all pending output into the compressed file. The parameter + * _flush is as in the deflate() function. The return value is the zlib + * error number (see function gzerror below). flush() returns Z_OK if + * the flush_ parameter is Z_FINISH and all output could be flushed. + * flush() should be called only when strictly necessary because it can + * degrade compression. + */ + int flush(int _flush) { + os_flush(); + return ::gzflush(m_fp, _flush); + } + + /* Returns the error message for the last error which occurred on the + * given compressed file. errnum is set to zlib error number. If an + * error occurred in the file system and not in the compression library, + * errnum is set to Z_ERRNO and the application may consult errno + * to get the exact error code. + */ + const char* error(int* errnum) { + return ::gzerror(m_fp, errnum); + } + + gzFile fp() { return m_fp; } + + ostream& os() { + if (m_os == 0) m_os = new ostrstream; + return *m_os; + } + + void os_flush() { + if (m_os && m_os->pcount()>0) { + ostrstream* oss = new ostrstream; + oss->fill(m_os->fill()); + oss->flags(m_os->flags()); + oss->precision(m_os->precision()); + oss->width(m_os->width()); + ::gzwrite(m_fp, m_os->str(), m_os->pcount()); + delete[] m_os->str(); delete m_os; m_os = oss; + } + } + + private: + gzFile m_fp; + ostrstream* m_os; +}; + +/* + * Binary write the given (array of) object(s) into the compressed file. + * returns the number of uncompressed bytes actually written + * (0 in case of error). + */ +template +inline int write(ozstream& zs, const T* x, Items items) { + return ::gzwrite(zs.fp(), (voidp) x, items*sizeof(T)); +} + +/* + * Binary output with the '<' operator. + */ +template +inline ozstream& operator<(ozstream& zs, const T& x) { + ::gzwrite(zs.fp(), (voidp) &x, sizeof(T)); + return zs; +} + +inline zstringlen::zstringlen(ozstream& zs, const char* x) { + val.byte = 255; val.word = ::strlen(x); + if (val.word < 255) zs < (val.byte = val.word); + else zs < val; +} + +/* + * Write length of string + the string with the '<' operator. + */ +inline ozstream& operator<(ozstream& zs, const char* x) { + zstringlen len(zs, x); + ::gzwrite(zs.fp(), (voidp) x, len.value()); + return zs; +} + +#ifdef _MSC_VER +inline ozstream& operator<(ozstream& zs, char* const& x) { + return zs < (const char*) x; +} +#endif + +/* + * Ascii write with the << operator; + */ +template +inline ostream& operator<<(ozstream& zs, const T& x) { + zs.os_flush(); + return zs.os() << x; +} + +#endif diff --git a/thirdparty/zlib-1.3.1/contrib/iostream2/zstream_test.cpp b/thirdparty/zlib-1.3.1/contrib/iostream2/zstream_test.cpp new file mode 100644 index 0000000..6273f62 --- /dev/null +++ b/thirdparty/zlib-1.3.1/contrib/iostream2/zstream_test.cpp @@ -0,0 +1,25 @@ +#include "zstream.h" +#include +#include +#include + +void main() { + char h[256] = "Hello"; + char* g = "Goodbye"; + ozstream out("temp.gz"); + out < "This works well" < h < g; + out.close(); + + izstream in("temp.gz"); // read it back + char *x = read_string(in), *y = new char[256], z[256]; + in > y > z; + in.close(); + cout << x << endl << y << endl << z << endl; + + out.open("temp.gz"); // try ascii output; zcat temp.gz to see the results + out << setw(50) << setfill('#') << setprecision(20) << x << endl << y << endl << z << endl; + out << z << endl << y << endl << x << endl; + out << 1.1234567890123456789 << endl; + + delete[] x; delete[] y; +} diff --git a/thirdparty/zlib-1.3.1/contrib/iostream3/README b/thirdparty/zlib-1.3.1/contrib/iostream3/README new file mode 100644 index 0000000..f7b319a --- /dev/null +++ b/thirdparty/zlib-1.3.1/contrib/iostream3/README @@ -0,0 +1,35 @@ +These classes provide a C++ stream interface to the zlib library. It allows you +to do things like: + + gzofstream outf("blah.gz"); + outf << "These go into the gzip file " << 123 << endl; + +It does this by deriving a specialized stream buffer for gzipped files, which is +the way Stroustrup would have done it. :-> + +The gzifstream and gzofstream classes were originally written by Kevin Ruland +and made available in the zlib contrib/iostream directory. The older version still +compiles under gcc 2.xx, but not under gcc 3.xx, which sparked the development of +this version. + +The new classes are as standard-compliant as possible, closely following the +approach of the standard library's fstream classes. It compiles under gcc versions +3.2 and 3.3, but not under gcc 2.xx. This is mainly due to changes in the standard +library naming scheme. The new version of gzifstream/gzofstream/gzfilebuf differs +from the previous one in the following respects: +- added showmanyc +- added setbuf, with support for unbuffered output via setbuf(0,0) +- a few bug fixes of stream behavior +- gzipped output file opened with default compression level instead of maximum level +- setcompressionlevel()/strategy() members replaced by single setcompression() + +The code is provided "as is", with the permission to use, copy, modify, distribute +and sell it for any purpose without fee. + +Ludwig Schwardt + + +DSP Lab +Electrical & Electronic Engineering Department +University of Stellenbosch +South Africa diff --git a/thirdparty/zlib-1.3.1/contrib/iostream3/TODO b/thirdparty/zlib-1.3.1/contrib/iostream3/TODO new file mode 100644 index 0000000..7032f97 --- /dev/null +++ b/thirdparty/zlib-1.3.1/contrib/iostream3/TODO @@ -0,0 +1,17 @@ +Possible upgrades to gzfilebuf: + +- The ability to do putback (e.g. putbackfail) + +- The ability to seek (zlib supports this, but could be slow/tricky) + +- Simultaneous read/write access (does it make sense?) + +- Support for ios_base::ate open mode + +- Locale support? + +- Check public interface to see which calls give problems + (due to dependence on library internals) + +- Override operator<<(ostream&, gzfilebuf*) to allow direct copying + of stream buffer to stream ( i.e. os << is.rdbuf(); ) diff --git a/thirdparty/zlib-1.3.1/contrib/iostream3/test.cc b/thirdparty/zlib-1.3.1/contrib/iostream3/test.cc new file mode 100644 index 0000000..9423533 --- /dev/null +++ b/thirdparty/zlib-1.3.1/contrib/iostream3/test.cc @@ -0,0 +1,50 @@ +/* + * Test program for gzifstream and gzofstream + * + * by Ludwig Schwardt + * original version by Kevin Ruland + */ + +#include "zfstream.h" +#include // for cout + +int main() { + + gzofstream outf; + gzifstream inf; + char buf[80]; + + outf.open("test1.txt.gz"); + outf << "The quick brown fox sidestepped the lazy canine\n" + << 1.3 << "\nPlan " << 9 << std::endl; + outf.close(); + std::cout << "Wrote the following message to 'test1.txt.gz' (check with zcat or zless):\n" + << "The quick brown fox sidestepped the lazy canine\n" + << 1.3 << "\nPlan " << 9 << std::endl; + + std::cout << "\nReading 'test1.txt.gz' (buffered) produces:\n"; + inf.open("test1.txt.gz"); + while (inf.getline(buf,80,'\n')) { + std::cout << buf << "\t(" << inf.rdbuf()->in_avail() << " chars left in buffer)\n"; + } + inf.close(); + + outf.rdbuf()->pubsetbuf(0,0); + outf.open("test2.txt.gz"); + outf << setcompression(Z_NO_COMPRESSION) + << "The quick brown fox sidestepped the lazy canine\n" + << 1.3 << "\nPlan " << 9 << std::endl; + outf.close(); + std::cout << "\nWrote the same message to 'test2.txt.gz' in uncompressed form"; + + std::cout << "\nReading 'test2.txt.gz' (unbuffered) produces:\n"; + inf.rdbuf()->pubsetbuf(0,0); + inf.open("test2.txt.gz"); + while (inf.getline(buf,80,'\n')) { + std::cout << buf << "\t(" << inf.rdbuf()->in_avail() << " chars left in buffer)\n"; + } + inf.close(); + + return 0; + +} diff --git a/thirdparty/zlib-1.3.1/contrib/iostream3/zfstream.cc b/thirdparty/zlib-1.3.1/contrib/iostream3/zfstream.cc new file mode 100644 index 0000000..94eb933 --- /dev/null +++ b/thirdparty/zlib-1.3.1/contrib/iostream3/zfstream.cc @@ -0,0 +1,479 @@ +/* + * A C++ I/O streams interface to the zlib gz* functions + * + * by Ludwig Schwardt + * original version by Kevin Ruland + * + * This version is standard-compliant and compatible with gcc 3.x. + */ + +#include "zfstream.h" +#include // for strcpy, strcat, strlen (mode strings) +#include // for BUFSIZ + +// Internal buffer sizes (default and "unbuffered" versions) +#define BIGBUFSIZE BUFSIZ +#define SMALLBUFSIZE 1 + +/*****************************************************************************/ + +// Default constructor +gzfilebuf::gzfilebuf() +: file(NULL), io_mode(std::ios_base::openmode(0)), own_fd(false), + buffer(NULL), buffer_size(BIGBUFSIZE), own_buffer(true) +{ + // No buffers to start with + this->disable_buffer(); +} + +// Destructor +gzfilebuf::~gzfilebuf() +{ + // Sync output buffer and close only if responsible for file + // (i.e. attached streams should be left open at this stage) + this->sync(); + if (own_fd) + this->close(); + // Make sure internal buffer is deallocated + this->disable_buffer(); +} + +// Set compression level and strategy +int +gzfilebuf::setcompression(int comp_level, + int comp_strategy) +{ + return gzsetparams(file, comp_level, comp_strategy); +} + +// Open gzipped file +gzfilebuf* +gzfilebuf::open(const char *name, + std::ios_base::openmode mode) +{ + // Fail if file already open + if (this->is_open()) + return NULL; + // Don't support simultaneous read/write access (yet) + if ((mode & std::ios_base::in) && (mode & std::ios_base::out)) + return NULL; + + // Build mode string for gzopen and check it [27.8.1.3.2] + char char_mode[6] = "\0\0\0\0\0"; + if (!this->open_mode(mode, char_mode)) + return NULL; + + // Attempt to open file + if ((file = gzopen(name, char_mode)) == NULL) + return NULL; + + // On success, allocate internal buffer and set flags + this->enable_buffer(); + io_mode = mode; + own_fd = true; + return this; +} + +// Attach to gzipped file +gzfilebuf* +gzfilebuf::attach(int fd, + std::ios_base::openmode mode) +{ + // Fail if file already open + if (this->is_open()) + return NULL; + // Don't support simultaneous read/write access (yet) + if ((mode & std::ios_base::in) && (mode & std::ios_base::out)) + return NULL; + + // Build mode string for gzdopen and check it [27.8.1.3.2] + char char_mode[6] = "\0\0\0\0\0"; + if (!this->open_mode(mode, char_mode)) + return NULL; + + // Attempt to attach to file + if ((file = gzdopen(fd, char_mode)) == NULL) + return NULL; + + // On success, allocate internal buffer and set flags + this->enable_buffer(); + io_mode = mode; + own_fd = false; + return this; +} + +// Close gzipped file +gzfilebuf* +gzfilebuf::close() +{ + // Fail immediately if no file is open + if (!this->is_open()) + return NULL; + // Assume success + gzfilebuf* retval = this; + // Attempt to sync and close gzipped file + if (this->sync() == -1) + retval = NULL; + if (gzclose(file) < 0) + retval = NULL; + // File is now gone anyway (postcondition [27.8.1.3.8]) + file = NULL; + own_fd = false; + // Destroy internal buffer if it exists + this->disable_buffer(); + return retval; +} + +/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ + +// Convert int open mode to mode string +bool +gzfilebuf::open_mode(std::ios_base::openmode mode, + char* c_mode) const +{ + bool testb = mode & std::ios_base::binary; + bool testi = mode & std::ios_base::in; + bool testo = mode & std::ios_base::out; + bool testt = mode & std::ios_base::trunc; + bool testa = mode & std::ios_base::app; + + // Check for valid flag combinations - see [27.8.1.3.2] (Table 92) + // Original zfstream hardcoded the compression level to maximum here... + // Double the time for less than 1% size improvement seems + // excessive though - keeping it at the default level + // To change back, just append "9" to the next three mode strings + if (!testi && testo && !testt && !testa) + strcpy(c_mode, "w"); + if (!testi && testo && !testt && testa) + strcpy(c_mode, "a"); + if (!testi && testo && testt && !testa) + strcpy(c_mode, "w"); + if (testi && !testo && !testt && !testa) + strcpy(c_mode, "r"); + // No read/write mode yet +// if (testi && testo && !testt && !testa) +// strcpy(c_mode, "r+"); +// if (testi && testo && testt && !testa) +// strcpy(c_mode, "w+"); + + // Mode string should be empty for invalid combination of flags + if (strlen(c_mode) == 0) + return false; + if (testb) + strcat(c_mode, "b"); + return true; +} + +// Determine number of characters in internal get buffer +std::streamsize +gzfilebuf::showmanyc() +{ + // Calls to underflow will fail if file not opened for reading + if (!this->is_open() || !(io_mode & std::ios_base::in)) + return -1; + // Make sure get area is in use + if (this->gptr() && (this->gptr() < this->egptr())) + return std::streamsize(this->egptr() - this->gptr()); + else + return 0; +} + +// Fill get area from gzipped file +gzfilebuf::int_type +gzfilebuf::underflow() +{ + // If something is left in the get area by chance, return it + // (this shouldn't normally happen, as underflow is only supposed + // to be called when gptr >= egptr, but it serves as error check) + if (this->gptr() && (this->gptr() < this->egptr())) + return traits_type::to_int_type(*(this->gptr())); + + // If the file hasn't been opened for reading, produce error + if (!this->is_open() || !(io_mode & std::ios_base::in)) + return traits_type::eof(); + + // Attempt to fill internal buffer from gzipped file + // (buffer must be guaranteed to exist...) + int bytes_read = gzread(file, buffer, buffer_size); + // Indicates error or EOF + if (bytes_read <= 0) + { + // Reset get area + this->setg(buffer, buffer, buffer); + return traits_type::eof(); + } + // Make all bytes read from file available as get area + this->setg(buffer, buffer, buffer + bytes_read); + + // Return next character in get area + return traits_type::to_int_type(*(this->gptr())); +} + +// Write put area to gzipped file +gzfilebuf::int_type +gzfilebuf::overflow(int_type c) +{ + // Determine whether put area is in use + if (this->pbase()) + { + // Double-check pointer range + if (this->pptr() > this->epptr() || this->pptr() < this->pbase()) + return traits_type::eof(); + // Add extra character to buffer if not EOF + if (!traits_type::eq_int_type(c, traits_type::eof())) + { + *(this->pptr()) = traits_type::to_char_type(c); + this->pbump(1); + } + // Number of characters to write to file + int bytes_to_write = this->pptr() - this->pbase(); + // Overflow doesn't fail if nothing is to be written + if (bytes_to_write > 0) + { + // If the file hasn't been opened for writing, produce error + if (!this->is_open() || !(io_mode & std::ios_base::out)) + return traits_type::eof(); + // If gzipped file won't accept all bytes written to it, fail + if (gzwrite(file, this->pbase(), bytes_to_write) != bytes_to_write) + return traits_type::eof(); + // Reset next pointer to point to pbase on success + this->pbump(-bytes_to_write); + } + } + // Write extra character to file if not EOF + else if (!traits_type::eq_int_type(c, traits_type::eof())) + { + // If the file hasn't been opened for writing, produce error + if (!this->is_open() || !(io_mode & std::ios_base::out)) + return traits_type::eof(); + // Impromptu char buffer (allows "unbuffered" output) + char_type last_char = traits_type::to_char_type(c); + // If gzipped file won't accept this character, fail + if (gzwrite(file, &last_char, 1) != 1) + return traits_type::eof(); + } + + // If you got here, you have succeeded (even if c was EOF) + // The return value should therefore be non-EOF + if (traits_type::eq_int_type(c, traits_type::eof())) + return traits_type::not_eof(c); + else + return c; +} + +// Assign new buffer +std::streambuf* +gzfilebuf::setbuf(char_type* p, + std::streamsize n) +{ + // First make sure stuff is sync'ed, for safety + if (this->sync() == -1) + return NULL; + // If buffering is turned off on purpose via setbuf(0,0), still allocate one... + // "Unbuffered" only really refers to put [27.8.1.4.10], while get needs at + // least a buffer of size 1 (very inefficient though, therefore make it bigger?) + // This follows from [27.5.2.4.3]/12 (gptr needs to point at something, it seems) + if (!p || !n) + { + // Replace existing buffer (if any) with small internal buffer + this->disable_buffer(); + buffer = NULL; + buffer_size = 0; + own_buffer = true; + this->enable_buffer(); + } + else + { + // Replace existing buffer (if any) with external buffer + this->disable_buffer(); + buffer = p; + buffer_size = n; + own_buffer = false; + this->enable_buffer(); + } + return this; +} + +// Write put area to gzipped file (i.e. ensures that put area is empty) +int +gzfilebuf::sync() +{ + return traits_type::eq_int_type(this->overflow(), traits_type::eof()) ? -1 : 0; +} + +/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ + +// Allocate internal buffer +void +gzfilebuf::enable_buffer() +{ + // If internal buffer required, allocate one + if (own_buffer && !buffer) + { + // Check for buffered vs. "unbuffered" + if (buffer_size > 0) + { + // Allocate internal buffer + buffer = new char_type[buffer_size]; + // Get area starts empty and will be expanded by underflow as need arises + this->setg(buffer, buffer, buffer); + // Setup entire internal buffer as put area. + // The one-past-end pointer actually points to the last element of the buffer, + // so that overflow(c) can safely add the extra character c to the sequence. + // These pointers remain in place for the duration of the buffer + this->setp(buffer, buffer + buffer_size - 1); + } + else + { + // Even in "unbuffered" case, (small?) get buffer is still required + buffer_size = SMALLBUFSIZE; + buffer = new char_type[buffer_size]; + this->setg(buffer, buffer, buffer); + // "Unbuffered" means no put buffer + this->setp(0, 0); + } + } + else + { + // If buffer already allocated, reset buffer pointers just to make sure no + // stale chars are lying around + this->setg(buffer, buffer, buffer); + this->setp(buffer, buffer + buffer_size - 1); + } +} + +// Destroy internal buffer +void +gzfilebuf::disable_buffer() +{ + // If internal buffer exists, deallocate it + if (own_buffer && buffer) + { + // Preserve unbuffered status by zeroing size + if (!this->pbase()) + buffer_size = 0; + delete[] buffer; + buffer = NULL; + this->setg(0, 0, 0); + this->setp(0, 0); + } + else + { + // Reset buffer pointers to initial state if external buffer exists + this->setg(buffer, buffer, buffer); + if (buffer) + this->setp(buffer, buffer + buffer_size - 1); + else + this->setp(0, 0); + } +} + +/*****************************************************************************/ + +// Default constructor initializes stream buffer +gzifstream::gzifstream() +: std::istream(NULL), sb() +{ this->init(&sb); } + +// Initialize stream buffer and open file +gzifstream::gzifstream(const char* name, + std::ios_base::openmode mode) +: std::istream(NULL), sb() +{ + this->init(&sb); + this->open(name, mode); +} + +// Initialize stream buffer and attach to file +gzifstream::gzifstream(int fd, + std::ios_base::openmode mode) +: std::istream(NULL), sb() +{ + this->init(&sb); + this->attach(fd, mode); +} + +// Open file and go into fail() state if unsuccessful +void +gzifstream::open(const char* name, + std::ios_base::openmode mode) +{ + if (!sb.open(name, mode | std::ios_base::in)) + this->setstate(std::ios_base::failbit); + else + this->clear(); +} + +// Attach to file and go into fail() state if unsuccessful +void +gzifstream::attach(int fd, + std::ios_base::openmode mode) +{ + if (!sb.attach(fd, mode | std::ios_base::in)) + this->setstate(std::ios_base::failbit); + else + this->clear(); +} + +// Close file +void +gzifstream::close() +{ + if (!sb.close()) + this->setstate(std::ios_base::failbit); +} + +/*****************************************************************************/ + +// Default constructor initializes stream buffer +gzofstream::gzofstream() +: std::ostream(NULL), sb() +{ this->init(&sb); } + +// Initialize stream buffer and open file +gzofstream::gzofstream(const char* name, + std::ios_base::openmode mode) +: std::ostream(NULL), sb() +{ + this->init(&sb); + this->open(name, mode); +} + +// Initialize stream buffer and attach to file +gzofstream::gzofstream(int fd, + std::ios_base::openmode mode) +: std::ostream(NULL), sb() +{ + this->init(&sb); + this->attach(fd, mode); +} + +// Open file and go into fail() state if unsuccessful +void +gzofstream::open(const char* name, + std::ios_base::openmode mode) +{ + if (!sb.open(name, mode | std::ios_base::out)) + this->setstate(std::ios_base::failbit); + else + this->clear(); +} + +// Attach to file and go into fail() state if unsuccessful +void +gzofstream::attach(int fd, + std::ios_base::openmode mode) +{ + if (!sb.attach(fd, mode | std::ios_base::out)) + this->setstate(std::ios_base::failbit); + else + this->clear(); +} + +// Close file +void +gzofstream::close() +{ + if (!sb.close()) + this->setstate(std::ios_base::failbit); +} diff --git a/thirdparty/zlib-1.3.1/contrib/iostream3/zfstream.h b/thirdparty/zlib-1.3.1/contrib/iostream3/zfstream.h new file mode 100644 index 0000000..3dabc0f --- /dev/null +++ b/thirdparty/zlib-1.3.1/contrib/iostream3/zfstream.h @@ -0,0 +1,466 @@ +/* + * A C++ I/O streams interface to the zlib gz* functions + * + * by Ludwig Schwardt + * original version by Kevin Ruland + * + * This version is standard-compliant and compatible with gcc 3.x. + */ + +#ifndef ZFSTREAM_H +#define ZFSTREAM_H + +#include // not iostream, since we don't need cin/cout +#include +#include "zlib.h" + +/*****************************************************************************/ + +/** + * @brief Gzipped file stream buffer class. + * + * This class implements basic_filebuf for gzipped files. It doesn't yet support + * seeking (allowed by zlib but slow/limited), putback and read/write access + * (tricky). Otherwise, it attempts to be a drop-in replacement for the standard + * file streambuf. +*/ +class gzfilebuf : public std::streambuf +{ +public: + // Default constructor. + gzfilebuf(); + + // Destructor. + virtual + ~gzfilebuf(); + + /** + * @brief Set compression level and strategy on the fly. + * @param comp_level Compression level (see zlib.h for allowed values) + * @param comp_strategy Compression strategy (see zlib.h for allowed values) + * @return Z_OK on success, Z_STREAM_ERROR otherwise. + * + * Unfortunately, these parameters cannot be modified separately, as the + * previous zfstream version assumed. Since the strategy is seldom changed, + * it can default and setcompression(level) then becomes like the old + * setcompressionlevel(level). + */ + int + setcompression(int comp_level, + int comp_strategy = Z_DEFAULT_STRATEGY); + + /** + * @brief Check if file is open. + * @return True if file is open. + */ + bool + is_open() const { return (file != NULL); } + + /** + * @brief Open gzipped file. + * @param name File name. + * @param mode Open mode flags. + * @return @c this on success, NULL on failure. + */ + gzfilebuf* + open(const char* name, + std::ios_base::openmode mode); + + /** + * @brief Attach to already open gzipped file. + * @param fd File descriptor. + * @param mode Open mode flags. + * @return @c this on success, NULL on failure. + */ + gzfilebuf* + attach(int fd, + std::ios_base::openmode mode); + + /** + * @brief Close gzipped file. + * @return @c this on success, NULL on failure. + */ + gzfilebuf* + close(); + +protected: + /** + * @brief Convert ios open mode int to mode string used by zlib. + * @return True if valid mode flag combination. + */ + bool + open_mode(std::ios_base::openmode mode, + char* c_mode) const; + + /** + * @brief Number of characters available in stream buffer. + * @return Number of characters. + * + * This indicates number of characters in get area of stream buffer. + * These characters can be read without accessing the gzipped file. + */ + virtual std::streamsize + showmanyc(); + + /** + * @brief Fill get area from gzipped file. + * @return First character in get area on success, EOF on error. + * + * This actually reads characters from gzipped file to stream + * buffer. Always buffered. + */ + virtual int_type + underflow(); + + /** + * @brief Write put area to gzipped file. + * @param c Extra character to add to buffer contents. + * @return Non-EOF on success, EOF on error. + * + * This actually writes characters in stream buffer to + * gzipped file. With unbuffered output this is done one + * character at a time. + */ + virtual int_type + overflow(int_type c = traits_type::eof()); + + /** + * @brief Installs external stream buffer. + * @param p Pointer to char buffer. + * @param n Size of external buffer. + * @return @c this on success, NULL on failure. + * + * Call setbuf(0,0) to enable unbuffered output. + */ + virtual std::streambuf* + setbuf(char_type* p, + std::streamsize n); + + /** + * @brief Flush stream buffer to file. + * @return 0 on success, -1 on error. + * + * This calls underflow(EOF) to do the job. + */ + virtual int + sync(); + +// +// Some future enhancements +// +// virtual int_type uflow(); +// virtual int_type pbackfail(int_type c = traits_type::eof()); +// virtual pos_type +// seekoff(off_type off, +// std::ios_base::seekdir way, +// std::ios_base::openmode mode = std::ios_base::in|std::ios_base::out); +// virtual pos_type +// seekpos(pos_type sp, +// std::ios_base::openmode mode = std::ios_base::in|std::ios_base::out); + +private: + /** + * @brief Allocate internal buffer. + * + * This function is safe to call multiple times. It will ensure + * that a proper internal buffer exists if it is required. If the + * buffer already exists or is external, the buffer pointers will be + * reset to their original state. + */ + void + enable_buffer(); + + /** + * @brief Destroy internal buffer. + * + * This function is safe to call multiple times. It will ensure + * that the internal buffer is deallocated if it exists. In any + * case, it will also reset the buffer pointers. + */ + void + disable_buffer(); + + /** + * Underlying file pointer. + */ + gzFile file; + + /** + * Mode in which file was opened. + */ + std::ios_base::openmode io_mode; + + /** + * @brief True if this object owns file descriptor. + * + * This makes the class responsible for closing the file + * upon destruction. + */ + bool own_fd; + + /** + * @brief Stream buffer. + * + * For simplicity this remains allocated on the free store for the + * entire life span of the gzfilebuf object, unless replaced by setbuf. + */ + char_type* buffer; + + /** + * @brief Stream buffer size. + * + * Defaults to system default buffer size (typically 8192 bytes). + * Modified by setbuf. + */ + std::streamsize buffer_size; + + /** + * @brief True if this object owns stream buffer. + * + * This makes the class responsible for deleting the buffer + * upon destruction. + */ + bool own_buffer; +}; + +/*****************************************************************************/ + +/** + * @brief Gzipped file input stream class. + * + * This class implements ifstream for gzipped files. Seeking and putback + * is not supported yet. +*/ +class gzifstream : public std::istream +{ +public: + // Default constructor + gzifstream(); + + /** + * @brief Construct stream on gzipped file to be opened. + * @param name File name. + * @param mode Open mode flags (forced to contain ios::in). + */ + explicit + gzifstream(const char* name, + std::ios_base::openmode mode = std::ios_base::in); + + /** + * @brief Construct stream on already open gzipped file. + * @param fd File descriptor. + * @param mode Open mode flags (forced to contain ios::in). + */ + explicit + gzifstream(int fd, + std::ios_base::openmode mode = std::ios_base::in); + + /** + * Obtain underlying stream buffer. + */ + gzfilebuf* + rdbuf() const + { return const_cast(&sb); } + + /** + * @brief Check if file is open. + * @return True if file is open. + */ + bool + is_open() { return sb.is_open(); } + + /** + * @brief Open gzipped file. + * @param name File name. + * @param mode Open mode flags (forced to contain ios::in). + * + * Stream will be in state good() if file opens successfully; + * otherwise in state fail(). This differs from the behavior of + * ifstream, which never sets the state to good() and therefore + * won't allow you to reuse the stream for a second file unless + * you manually clear() the state. The choice is a matter of + * convenience. + */ + void + open(const char* name, + std::ios_base::openmode mode = std::ios_base::in); + + /** + * @brief Attach to already open gzipped file. + * @param fd File descriptor. + * @param mode Open mode flags (forced to contain ios::in). + * + * Stream will be in state good() if attach succeeded; otherwise + * in state fail(). + */ + void + attach(int fd, + std::ios_base::openmode mode = std::ios_base::in); + + /** + * @brief Close gzipped file. + * + * Stream will be in state fail() if close failed. + */ + void + close(); + +private: + /** + * Underlying stream buffer. + */ + gzfilebuf sb; +}; + +/*****************************************************************************/ + +/** + * @brief Gzipped file output stream class. + * + * This class implements ofstream for gzipped files. Seeking and putback + * is not supported yet. +*/ +class gzofstream : public std::ostream +{ +public: + // Default constructor + gzofstream(); + + /** + * @brief Construct stream on gzipped file to be opened. + * @param name File name. + * @param mode Open mode flags (forced to contain ios::out). + */ + explicit + gzofstream(const char* name, + std::ios_base::openmode mode = std::ios_base::out); + + /** + * @brief Construct stream on already open gzipped file. + * @param fd File descriptor. + * @param mode Open mode flags (forced to contain ios::out). + */ + explicit + gzofstream(int fd, + std::ios_base::openmode mode = std::ios_base::out); + + /** + * Obtain underlying stream buffer. + */ + gzfilebuf* + rdbuf() const + { return const_cast(&sb); } + + /** + * @brief Check if file is open. + * @return True if file is open. + */ + bool + is_open() { return sb.is_open(); } + + /** + * @brief Open gzipped file. + * @param name File name. + * @param mode Open mode flags (forced to contain ios::out). + * + * Stream will be in state good() if file opens successfully; + * otherwise in state fail(). This differs from the behavior of + * ofstream, which never sets the state to good() and therefore + * won't allow you to reuse the stream for a second file unless + * you manually clear() the state. The choice is a matter of + * convenience. + */ + void + open(const char* name, + std::ios_base::openmode mode = std::ios_base::out); + + /** + * @brief Attach to already open gzipped file. + * @param fd File descriptor. + * @param mode Open mode flags (forced to contain ios::out). + * + * Stream will be in state good() if attach succeeded; otherwise + * in state fail(). + */ + void + attach(int fd, + std::ios_base::openmode mode = std::ios_base::out); + + /** + * @brief Close gzipped file. + * + * Stream will be in state fail() if close failed. + */ + void + close(); + +private: + /** + * Underlying stream buffer. + */ + gzfilebuf sb; +}; + +/*****************************************************************************/ + +/** + * @brief Gzipped file output stream manipulator class. + * + * This class defines a two-argument manipulator for gzofstream. It is used + * as base for the setcompression(int,int) manipulator. +*/ +template + class gzomanip2 + { + public: + // Allows inserter to peek at internals + template + friend gzofstream& + operator<<(gzofstream&, + const gzomanip2&); + + // Constructor + gzomanip2(gzofstream& (*f)(gzofstream&, T1, T2), + T1 v1, + T2 v2); + private: + // Underlying manipulator function + gzofstream& + (*func)(gzofstream&, T1, T2); + + // Arguments for manipulator function + T1 val1; + T2 val2; + }; + +/*****************************************************************************/ + +// Manipulator function thunks through to stream buffer +inline gzofstream& +setcompression(gzofstream &gzs, int l, int s = Z_DEFAULT_STRATEGY) +{ + (gzs.rdbuf())->setcompression(l, s); + return gzs; +} + +// Manipulator constructor stores arguments +template + inline + gzomanip2::gzomanip2(gzofstream &(*f)(gzofstream &, T1, T2), + T1 v1, + T2 v2) + : func(f), val1(v1), val2(v2) + { } + +// Inserter applies underlying manipulator function to stream +template + inline gzofstream& + operator<<(gzofstream& s, const gzomanip2& m) + { return (*m.func)(s, m.val1, m.val2); } + +// Insert this onto stream to simplify setting of compression level +inline gzomanip2 +setcompression(int l, int s = Z_DEFAULT_STRATEGY) +{ return gzomanip2(&setcompression, l, s); } + +#endif // ZFSTREAM_H diff --git a/thirdparty/zlib-1.3.1/contrib/minizip/Makefile b/thirdparty/zlib-1.3.1/contrib/minizip/Makefile new file mode 100644 index 0000000..3d927ec --- /dev/null +++ b/thirdparty/zlib-1.3.1/contrib/minizip/Makefile @@ -0,0 +1,29 @@ +CC?=cc +CFLAGS := $(CFLAGS) -O -I../.. + +UNZ_OBJS = miniunz.o unzip.o ioapi.o ../../libz.a +ZIP_OBJS = minizip.o zip.o ioapi.o ../../libz.a + +.c.o: + $(CC) -c $(CFLAGS) $*.c + +all: miniunz minizip + +miniunz: $(UNZ_OBJS) + $(CC) $(CFLAGS) -o $@ $(UNZ_OBJS) + +minizip: $(ZIP_OBJS) + $(CC) $(CFLAGS) -o $@ $(ZIP_OBJS) + +test: miniunz minizip + @rm -f test.* + @echo hello hello hello > test.txt + ./minizip test test.txt + ./miniunz -l test.zip + @mv test.txt test.old + ./miniunz test.zip + @cmp test.txt test.old + @rm -f test.* + +clean: + /bin/rm -f *.o *~ minizip miniunz test.* diff --git a/thirdparty/zlib-1.3.1/contrib/minizip/Makefile.am b/thirdparty/zlib-1.3.1/contrib/minizip/Makefile.am new file mode 100644 index 0000000..d343011 --- /dev/null +++ b/thirdparty/zlib-1.3.1/contrib/minizip/Makefile.am @@ -0,0 +1,45 @@ +lib_LTLIBRARIES = libminizip.la + +if COND_DEMOS +bin_PROGRAMS = miniunzip minizip +endif + +zlib_top_srcdir = $(top_srcdir)/../.. +zlib_top_builddir = $(top_builddir)/../.. + +AM_CPPFLAGS = -I$(zlib_top_srcdir) +AM_LDFLAGS = -L$(zlib_top_builddir) + +if WIN32 +iowin32_src = iowin32.c +iowin32_h = iowin32.h +endif + +libminizip_la_SOURCES = \ + ioapi.c \ + mztools.c \ + unzip.c \ + zip.c \ + ${iowin32_src} + +libminizip_la_LDFLAGS = $(AM_LDFLAGS) -version-info 1:0:0 -lz + +minizip_includedir = $(includedir)/minizip +minizip_include_HEADERS = \ + crypt.h \ + ioapi.h \ + mztools.h \ + unzip.h \ + zip.h \ + ${iowin32_h} + +pkgconfigdir = $(libdir)/pkgconfig +pkgconfig_DATA = minizip.pc + +EXTRA_PROGRAMS = miniunzip minizip + +miniunzip_SOURCES = miniunz.c +miniunzip_LDADD = libminizip.la + +minizip_SOURCES = minizip.c +minizip_LDADD = libminizip.la -lz diff --git a/thirdparty/zlib-1.3.1/contrib/minizip/MiniZip64_Changes.txt b/thirdparty/zlib-1.3.1/contrib/minizip/MiniZip64_Changes.txt new file mode 100644 index 0000000..3759468 --- /dev/null +++ b/thirdparty/zlib-1.3.1/contrib/minizip/MiniZip64_Changes.txt @@ -0,0 +1,6 @@ + +MiniZip 1.1 was derived from MiniZip at version 1.01f + +Change in 1.0 (Okt 2009) + - **TODO - Add history** + diff --git a/thirdparty/zlib-1.3.1/contrib/minizip/MiniZip64_info.txt b/thirdparty/zlib-1.3.1/contrib/minizip/MiniZip64_info.txt new file mode 100644 index 0000000..57d7152 --- /dev/null +++ b/thirdparty/zlib-1.3.1/contrib/minizip/MiniZip64_info.txt @@ -0,0 +1,74 @@ +MiniZip - Copyright (c) 1998-2010 - by Gilles Vollant - version 1.1 64 bits from Mathias Svensson + +Introduction +--------------------- +MiniZip 1.1 is built from MiniZip 1.0 by Gilles Vollant ( http://www.winimage.com/zLibDll/minizip.html ) + +When adding ZIP64 support into minizip it would result into risk of breaking compatibility with minizip 1.0. +All possible work was done for compatibility. + + +Background +--------------------- +When adding ZIP64 support Mathias Svensson found that Even Rouault have added ZIP64 +support for unzip.c into minizip for a open source project called gdal ( http://www.gdal.org/ ) + +That was used as a starting point. And after that ZIP64 support was added to zip.c +some refactoring and code cleanup was also done. + + +Changed from MiniZip 1.0 to MiniZip 1.1 +--------------------------------------- +* Added ZIP64 support for unzip ( by Even Rouault ) +* Added ZIP64 support for zip ( by Mathias Svensson ) +* Reverted some changed that Even Rouault did. +* Bunch of patches received from Gulles Vollant that he received for MiniZip from various users. +* Added unzip patch for BZIP Compression method (patch create by Daniel Borca) +* Added BZIP Compress method for zip +* Did some refactoring and code cleanup + + +Credits + + Gilles Vollant - Original MiniZip author + Even Rouault - ZIP64 unzip Support + Daniel Borca - BZip Compression method support in unzip + Mathias Svensson - ZIP64 zip support + Mathias Svensson - BZip Compression method support in zip + + Resources + + ZipLayout http://result42.com/projects/ZipFileLayout + Command line tool for Windows that shows the layout and information of the headers in a zip archive. + Used when debugging and validating the creation of zip files using MiniZip64 + + + ZIP App Note http://www.pkware.com/documents/casestudies/APPNOTE.TXT + Zip File specification + + +Notes. + * To be able to use BZip compression method in zip64.c or unzip64.c the BZIP2 lib is needed and HAVE_BZIP2 need to be defined. + +License +---------------------------------------------------------- + Condition of use and distribution are the same than zlib : + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. + +---------------------------------------------------------- + diff --git a/thirdparty/zlib-1.3.1/contrib/minizip/configure.ac b/thirdparty/zlib-1.3.1/contrib/minizip/configure.ac new file mode 100644 index 0000000..15ec917 --- /dev/null +++ b/thirdparty/zlib-1.3.1/contrib/minizip/configure.ac @@ -0,0 +1,32 @@ +# -*- Autoconf -*- +# Process this file with autoconf to produce a configure script. + +AC_INIT([minizip], [1.3.1], [bugzilla.redhat.com]) +AC_CONFIG_SRCDIR([minizip.c]) +AM_INIT_AUTOMAKE([foreign]) +LT_INIT + +AC_MSG_CHECKING([whether to build example programs]) +AC_ARG_ENABLE([demos], AC_HELP_STRING([--enable-demos], [build example programs])) +AM_CONDITIONAL([COND_DEMOS], [test "$enable_demos" = yes]) +if test "$enable_demos" = yes +then + AC_MSG_RESULT([yes]) +else + AC_MSG_RESULT([no]) +fi + +case "${host}" in + *-mingw* | mingw*) + WIN32="yes" + ;; + *) + ;; +esac +AM_CONDITIONAL([WIN32], [test "${WIN32}" = "yes"]) + + +AC_SUBST([HAVE_UNISTD_H], [0]) +AC_CHECK_HEADER([unistd.h], [HAVE_UNISTD_H=1], []) +AC_CONFIG_FILES([Makefile minizip.pc]) +AC_OUTPUT diff --git a/thirdparty/zlib-1.3.1/contrib/minizip/crypt.h b/thirdparty/zlib-1.3.1/contrib/minizip/crypt.h new file mode 100644 index 0000000..f4b93b7 --- /dev/null +++ b/thirdparty/zlib-1.3.1/contrib/minizip/crypt.h @@ -0,0 +1,128 @@ +/* crypt.h -- base code for crypt/uncrypt ZIPfile + + + Version 1.01e, February 12th, 2005 + + Copyright (C) 1998-2005 Gilles Vollant + + This code is a modified version of crypting code in Infozip distribution + + The encryption/decryption parts of this source code (as opposed to the + non-echoing password parts) were originally written in Europe. The + whole source package can be freely distributed, including from the USA. + (Prior to January 2000, re-export from the US was a violation of US law.) + + This encryption code is a direct transcription of the algorithm from + Roger Schlafly, described by Phil Katz in the file appnote.txt. This + file (appnote.txt) is distributed with the PKZIP program (even in the + version without encryption capabilities). + + If you don't need crypting in your application, just define symbols + NOCRYPT and NOUNCRYPT. + + This code support the "Traditional PKWARE Encryption". + + The new AES encryption added on Zip format by Winzip (see the page + http://www.winzip.com/aes_info.htm ) and PKWare PKZip 5.x Strong + Encryption is not supported. +*/ + +#define CRC32(c, b) ((*(pcrc_32_tab+(((int)(c) ^ (b)) & 0xff))) ^ ((c) >> 8)) + +/*********************************************************************** + * Return the next byte in the pseudo-random sequence + */ +static int decrypt_byte(unsigned long* pkeys, const z_crc_t* pcrc_32_tab) { + unsigned temp; /* POTENTIAL BUG: temp*(temp^1) may overflow in an + * unpredictable manner on 16-bit systems; not a problem + * with any known compiler so far, though */ + + (void)pcrc_32_tab; + temp = ((unsigned)(*(pkeys+2)) & 0xffff) | 2; + return (int)(((temp * (temp ^ 1)) >> 8) & 0xff); +} + +/*********************************************************************** + * Update the encryption keys with the next byte of plain text + */ +static int update_keys(unsigned long* pkeys, const z_crc_t* pcrc_32_tab, int c) { + (*(pkeys+0)) = CRC32((*(pkeys+0)), c); + (*(pkeys+1)) += (*(pkeys+0)) & 0xff; + (*(pkeys+1)) = (*(pkeys+1)) * 134775813L + 1; + { + register int keyshift = (int)((*(pkeys+1)) >> 24); + (*(pkeys+2)) = CRC32((*(pkeys+2)), keyshift); + } + return c; +} + + +/*********************************************************************** + * Initialize the encryption keys and the random header according to + * the given password. + */ +static void init_keys(const char* passwd, unsigned long* pkeys, const z_crc_t* pcrc_32_tab) { + *(pkeys+0) = 305419896L; + *(pkeys+1) = 591751049L; + *(pkeys+2) = 878082192L; + while (*passwd != '\0') { + update_keys(pkeys,pcrc_32_tab,(int)*passwd); + passwd++; + } +} + +#define zdecode(pkeys,pcrc_32_tab,c) \ + (update_keys(pkeys,pcrc_32_tab,c ^= decrypt_byte(pkeys,pcrc_32_tab))) + +#define zencode(pkeys,pcrc_32_tab,c,t) \ + (t=decrypt_byte(pkeys,pcrc_32_tab), update_keys(pkeys,pcrc_32_tab,c), (Byte)t^(c)) + +#ifdef INCLUDECRYPTINGCODE_IFCRYPTALLOWED + +#define RAND_HEAD_LEN 12 + /* "last resort" source for second part of crypt seed pattern */ +# ifndef ZCR_SEED2 +# define ZCR_SEED2 3141592654UL /* use PI as default pattern */ +# endif + +static unsigned crypthead(const char* passwd, /* password string */ + unsigned char* buf, /* where to write header */ + int bufSize, + unsigned long* pkeys, + const z_crc_t* pcrc_32_tab, + unsigned long crcForCrypting) { + unsigned n; /* index in random header */ + int t; /* temporary */ + int c; /* random byte */ + unsigned char header[RAND_HEAD_LEN-2]; /* random header */ + static unsigned calls = 0; /* ensure different random header each time */ + + if (bufSize> 7) & 0xff; + header[n] = (unsigned char)zencode(pkeys, pcrc_32_tab, c, t); + } + /* Encrypt random header (last two bytes is high word of crc) */ + init_keys(passwd, pkeys, pcrc_32_tab); + for (n = 0; n < RAND_HEAD_LEN-2; n++) + { + buf[n] = (unsigned char)zencode(pkeys, pcrc_32_tab, header[n], t); + } + buf[n++] = (unsigned char)zencode(pkeys, pcrc_32_tab, (int)(crcForCrypting >> 16) & 0xff, t); + buf[n++] = (unsigned char)zencode(pkeys, pcrc_32_tab, (int)(crcForCrypting >> 24) & 0xff, t); + return n; +} + +#endif diff --git a/thirdparty/zlib-1.3.1/contrib/minizip/ioapi.c b/thirdparty/zlib-1.3.1/contrib/minizip/ioapi.c new file mode 100644 index 0000000..782d324 --- /dev/null +++ b/thirdparty/zlib-1.3.1/contrib/minizip/ioapi.c @@ -0,0 +1,231 @@ +/* ioapi.h -- IO base function header for compress/uncompress .zip + part of the MiniZip project - ( http://www.winimage.com/zLibDll/minizip.html ) + + Copyright (C) 1998-2010 Gilles Vollant (minizip) ( http://www.winimage.com/zLibDll/minizip.html ) + + Modifications for Zip64 support + Copyright (C) 2009-2010 Mathias Svensson ( http://result42.com ) + + For more info read MiniZip_info.txt + +*/ + +#if defined(_WIN32) && (!(defined(_CRT_SECURE_NO_WARNINGS))) + #define _CRT_SECURE_NO_WARNINGS +#endif + +#if defined(__APPLE__) || defined(IOAPI_NO_64) || defined(__HAIKU__) || defined(MINIZIP_FOPEN_NO_64) +// In darwin and perhaps other BSD variants off_t is a 64 bit value, hence no need for specific 64 bit functions +#define FOPEN_FUNC(filename, mode) fopen(filename, mode) +#define FTELLO_FUNC(stream) ftello(stream) +#define FSEEKO_FUNC(stream, offset, origin) fseeko(stream, offset, origin) +#else +#define FOPEN_FUNC(filename, mode) fopen64(filename, mode) +#define FTELLO_FUNC(stream) ftello64(stream) +#define FSEEKO_FUNC(stream, offset, origin) fseeko64(stream, offset, origin) +#endif + + +#include "ioapi.h" + +voidpf call_zopen64 (const zlib_filefunc64_32_def* pfilefunc, const void*filename, int mode) { + if (pfilefunc->zfile_func64.zopen64_file != NULL) + return (*(pfilefunc->zfile_func64.zopen64_file)) (pfilefunc->zfile_func64.opaque,filename,mode); + else + { + return (*(pfilefunc->zopen32_file))(pfilefunc->zfile_func64.opaque,(const char*)filename,mode); + } +} + +long call_zseek64 (const zlib_filefunc64_32_def* pfilefunc,voidpf filestream, ZPOS64_T offset, int origin) { + if (pfilefunc->zfile_func64.zseek64_file != NULL) + return (*(pfilefunc->zfile_func64.zseek64_file)) (pfilefunc->zfile_func64.opaque,filestream,offset,origin); + else + { + uLong offsetTruncated = (uLong)offset; + if (offsetTruncated != offset) + return -1; + else + return (*(pfilefunc->zseek32_file))(pfilefunc->zfile_func64.opaque,filestream,offsetTruncated,origin); + } +} + +ZPOS64_T call_ztell64 (const zlib_filefunc64_32_def* pfilefunc, voidpf filestream) { + if (pfilefunc->zfile_func64.zseek64_file != NULL) + return (*(pfilefunc->zfile_func64.ztell64_file)) (pfilefunc->zfile_func64.opaque,filestream); + else + { + uLong tell_uLong = (uLong)(*(pfilefunc->ztell32_file))(pfilefunc->zfile_func64.opaque,filestream); + if ((tell_uLong) == MAXU32) + return (ZPOS64_T)-1; + else + return tell_uLong; + } +} + +void fill_zlib_filefunc64_32_def_from_filefunc32(zlib_filefunc64_32_def* p_filefunc64_32, const zlib_filefunc_def* p_filefunc32) { + p_filefunc64_32->zfile_func64.zopen64_file = NULL; + p_filefunc64_32->zopen32_file = p_filefunc32->zopen_file; + p_filefunc64_32->zfile_func64.zread_file = p_filefunc32->zread_file; + p_filefunc64_32->zfile_func64.zwrite_file = p_filefunc32->zwrite_file; + p_filefunc64_32->zfile_func64.ztell64_file = NULL; + p_filefunc64_32->zfile_func64.zseek64_file = NULL; + p_filefunc64_32->zfile_func64.zclose_file = p_filefunc32->zclose_file; + p_filefunc64_32->zfile_func64.zerror_file = p_filefunc32->zerror_file; + p_filefunc64_32->zfile_func64.opaque = p_filefunc32->opaque; + p_filefunc64_32->zseek32_file = p_filefunc32->zseek_file; + p_filefunc64_32->ztell32_file = p_filefunc32->ztell_file; +} + + + +static voidpf ZCALLBACK fopen_file_func(voidpf opaque, const char* filename, int mode) { + FILE* file = NULL; + const char* mode_fopen = NULL; + (void)opaque; + if ((mode & ZLIB_FILEFUNC_MODE_READWRITEFILTER)==ZLIB_FILEFUNC_MODE_READ) + mode_fopen = "rb"; + else + if (mode & ZLIB_FILEFUNC_MODE_EXISTING) + mode_fopen = "r+b"; + else + if (mode & ZLIB_FILEFUNC_MODE_CREATE) + mode_fopen = "wb"; + + if ((filename!=NULL) && (mode_fopen != NULL)) + file = fopen(filename, mode_fopen); + return file; +} + +static voidpf ZCALLBACK fopen64_file_func(voidpf opaque, const void* filename, int mode) { + FILE* file = NULL; + const char* mode_fopen = NULL; + (void)opaque; + if ((mode & ZLIB_FILEFUNC_MODE_READWRITEFILTER)==ZLIB_FILEFUNC_MODE_READ) + mode_fopen = "rb"; + else + if (mode & ZLIB_FILEFUNC_MODE_EXISTING) + mode_fopen = "r+b"; + else + if (mode & ZLIB_FILEFUNC_MODE_CREATE) + mode_fopen = "wb"; + + if ((filename!=NULL) && (mode_fopen != NULL)) + file = FOPEN_FUNC((const char*)filename, mode_fopen); + return file; +} + + +static uLong ZCALLBACK fread_file_func(voidpf opaque, voidpf stream, void* buf, uLong size) { + uLong ret; + (void)opaque; + ret = (uLong)fread(buf, 1, (size_t)size, (FILE *)stream); + return ret; +} + +static uLong ZCALLBACK fwrite_file_func(voidpf opaque, voidpf stream, const void* buf, uLong size) { + uLong ret; + (void)opaque; + ret = (uLong)fwrite(buf, 1, (size_t)size, (FILE *)stream); + return ret; +} + +static long ZCALLBACK ftell_file_func(voidpf opaque, voidpf stream) { + long ret; + (void)opaque; + ret = ftell((FILE *)stream); + return ret; +} + + +static ZPOS64_T ZCALLBACK ftell64_file_func(voidpf opaque, voidpf stream) { + ZPOS64_T ret; + (void)opaque; + ret = (ZPOS64_T)FTELLO_FUNC((FILE *)stream); + return ret; +} + +static long ZCALLBACK fseek_file_func(voidpf opaque, voidpf stream, uLong offset, int origin) { + int fseek_origin=0; + long ret; + (void)opaque; + switch (origin) + { + case ZLIB_FILEFUNC_SEEK_CUR : + fseek_origin = SEEK_CUR; + break; + case ZLIB_FILEFUNC_SEEK_END : + fseek_origin = SEEK_END; + break; + case ZLIB_FILEFUNC_SEEK_SET : + fseek_origin = SEEK_SET; + break; + default: return -1; + } + ret = 0; + if (fseek((FILE *)stream, (long)offset, fseek_origin) != 0) + ret = -1; + return ret; +} + +static long ZCALLBACK fseek64_file_func(voidpf opaque, voidpf stream, ZPOS64_T offset, int origin) { + int fseek_origin=0; + long ret; + (void)opaque; + switch (origin) + { + case ZLIB_FILEFUNC_SEEK_CUR : + fseek_origin = SEEK_CUR; + break; + case ZLIB_FILEFUNC_SEEK_END : + fseek_origin = SEEK_END; + break; + case ZLIB_FILEFUNC_SEEK_SET : + fseek_origin = SEEK_SET; + break; + default: return -1; + } + ret = 0; + + if(FSEEKO_FUNC((FILE *)stream, (z_off64_t)offset, fseek_origin) != 0) + ret = -1; + + return ret; +} + + +static int ZCALLBACK fclose_file_func(voidpf opaque, voidpf stream) { + int ret; + (void)opaque; + ret = fclose((FILE *)stream); + return ret; +} + +static int ZCALLBACK ferror_file_func(voidpf opaque, voidpf stream) { + int ret; + (void)opaque; + ret = ferror((FILE *)stream); + return ret; +} + +void fill_fopen_filefunc(zlib_filefunc_def* pzlib_filefunc_def) { + pzlib_filefunc_def->zopen_file = fopen_file_func; + pzlib_filefunc_def->zread_file = fread_file_func; + pzlib_filefunc_def->zwrite_file = fwrite_file_func; + pzlib_filefunc_def->ztell_file = ftell_file_func; + pzlib_filefunc_def->zseek_file = fseek_file_func; + pzlib_filefunc_def->zclose_file = fclose_file_func; + pzlib_filefunc_def->zerror_file = ferror_file_func; + pzlib_filefunc_def->opaque = NULL; +} + +void fill_fopen64_filefunc(zlib_filefunc64_def* pzlib_filefunc_def) { + pzlib_filefunc_def->zopen64_file = fopen64_file_func; + pzlib_filefunc_def->zread_file = fread_file_func; + pzlib_filefunc_def->zwrite_file = fwrite_file_func; + pzlib_filefunc_def->ztell64_file = ftell64_file_func; + pzlib_filefunc_def->zseek64_file = fseek64_file_func; + pzlib_filefunc_def->zclose_file = fclose_file_func; + pzlib_filefunc_def->zerror_file = ferror_file_func; + pzlib_filefunc_def->opaque = NULL; +} diff --git a/thirdparty/zlib-1.3.1/contrib/minizip/ioapi.h b/thirdparty/zlib-1.3.1/contrib/minizip/ioapi.h new file mode 100644 index 0000000..a2d2e6e --- /dev/null +++ b/thirdparty/zlib-1.3.1/contrib/minizip/ioapi.h @@ -0,0 +1,210 @@ +/* ioapi.h -- IO base function header for compress/uncompress .zip + part of the MiniZip project - ( http://www.winimage.com/zLibDll/minizip.html ) + + Copyright (C) 1998-2010 Gilles Vollant (minizip) ( http://www.winimage.com/zLibDll/minizip.html ) + + Modifications for Zip64 support + Copyright (C) 2009-2010 Mathias Svensson ( http://result42.com ) + + For more info read MiniZip_info.txt + + Changes + + Oct-2009 - Defined ZPOS64_T to fpos_t on windows and u_int64_t on linux. (might need to find a better why for this) + Oct-2009 - Change to fseeko64, ftello64 and fopen64 so large files would work on linux. + More if/def section may be needed to support other platforms + Oct-2009 - Defined fxxxx64 calls to normal fopen/ftell/fseek so they would compile on windows. + (but you should use iowin32.c for windows instead) + +*/ + +#ifndef _ZLIBIOAPI64_H +#define _ZLIBIOAPI64_H + +#if (!defined(_WIN32)) && (!defined(WIN32)) && (!defined(__APPLE__)) + + // Linux needs this to support file operation on files larger then 4+GB + // But might need better if/def to select just the platforms that needs them. + + #ifndef __USE_FILE_OFFSET64 + #define __USE_FILE_OFFSET64 + #endif + #ifndef __USE_LARGEFILE64 + #define __USE_LARGEFILE64 + #endif + #ifndef _LARGEFILE64_SOURCE + #define _LARGEFILE64_SOURCE + #endif + #ifndef _FILE_OFFSET_BIT + #define _FILE_OFFSET_BIT 64 + #endif + +#endif + +#include +#include +#include "zlib.h" + +#if defined(USE_FILE32API) +#define fopen64 fopen +#define ftello64 ftell +#define fseeko64 fseek +#else +#if defined(__FreeBSD__) || defined(__OpenBSD__) || defined(__NetBSD__) || defined(__HAIKU__) || defined(MINIZIP_FOPEN_NO_64) +#define fopen64 fopen +#define ftello64 ftello +#define fseeko64 fseeko +#endif +#ifdef _MSC_VER + #define fopen64 fopen + #if (_MSC_VER >= 1400) && (!(defined(NO_MSCVER_FILE64_FUNC))) + #define ftello64 _ftelli64 + #define fseeko64 _fseeki64 + #else // old MSC + #define ftello64 ftell + #define fseeko64 fseek + #endif +#endif +#endif + +/* +#ifndef ZPOS64_T + #ifdef _WIN32 + #define ZPOS64_T fpos_t + #else + #include + #define ZPOS64_T uint64_t + #endif +#endif +*/ + +#ifdef HAVE_MINIZIP64_CONF_H +#include "mz64conf.h" +#endif + +/* a type chosen by DEFINE */ +#ifdef HAVE_64BIT_INT_CUSTOM +typedef 64BIT_INT_CUSTOM_TYPE ZPOS64_T; +#else +#ifdef HAS_STDINT_H +#include "stdint.h" +typedef uint64_t ZPOS64_T; +#else + + + +#if defined(_MSC_VER) || defined(__BORLANDC__) +typedef unsigned __int64 ZPOS64_T; +#else +typedef unsigned long long int ZPOS64_T; +#endif +#endif +#endif + +/* Maximum unsigned 32-bit value used as placeholder for zip64 */ +#ifndef MAXU32 +#define MAXU32 (0xffffffff) +#endif + +#ifdef __cplusplus +extern "C" { +#endif + + +#define ZLIB_FILEFUNC_SEEK_CUR (1) +#define ZLIB_FILEFUNC_SEEK_END (2) +#define ZLIB_FILEFUNC_SEEK_SET (0) + +#define ZLIB_FILEFUNC_MODE_READ (1) +#define ZLIB_FILEFUNC_MODE_WRITE (2) +#define ZLIB_FILEFUNC_MODE_READWRITEFILTER (3) + +#define ZLIB_FILEFUNC_MODE_EXISTING (4) +#define ZLIB_FILEFUNC_MODE_CREATE (8) + + +#ifndef ZCALLBACK + #if (defined(WIN32) || defined(_WIN32) || defined (WINDOWS) || defined (_WINDOWS)) && defined(CALLBACK) && defined (USEWINDOWS_CALLBACK) + #define ZCALLBACK CALLBACK + #else + #define ZCALLBACK + #endif +#endif + + + + +typedef voidpf (ZCALLBACK *open_file_func) (voidpf opaque, const char* filename, int mode); +typedef uLong (ZCALLBACK *read_file_func) (voidpf opaque, voidpf stream, void* buf, uLong size); +typedef uLong (ZCALLBACK *write_file_func) (voidpf opaque, voidpf stream, const void* buf, uLong size); +typedef int (ZCALLBACK *close_file_func) (voidpf opaque, voidpf stream); +typedef int (ZCALLBACK *testerror_file_func) (voidpf opaque, voidpf stream); + +typedef long (ZCALLBACK *tell_file_func) (voidpf opaque, voidpf stream); +typedef long (ZCALLBACK *seek_file_func) (voidpf opaque, voidpf stream, uLong offset, int origin); + + +/* here is the "old" 32 bits structure */ +typedef struct zlib_filefunc_def_s +{ + open_file_func zopen_file; + read_file_func zread_file; + write_file_func zwrite_file; + tell_file_func ztell_file; + seek_file_func zseek_file; + close_file_func zclose_file; + testerror_file_func zerror_file; + voidpf opaque; +} zlib_filefunc_def; + +typedef ZPOS64_T (ZCALLBACK *tell64_file_func) (voidpf opaque, voidpf stream); +typedef long (ZCALLBACK *seek64_file_func) (voidpf opaque, voidpf stream, ZPOS64_T offset, int origin); +typedef voidpf (ZCALLBACK *open64_file_func) (voidpf opaque, const void* filename, int mode); + +typedef struct zlib_filefunc64_def_s +{ + open64_file_func zopen64_file; + read_file_func zread_file; + write_file_func zwrite_file; + tell64_file_func ztell64_file; + seek64_file_func zseek64_file; + close_file_func zclose_file; + testerror_file_func zerror_file; + voidpf opaque; +} zlib_filefunc64_def; + +void fill_fopen64_filefunc(zlib_filefunc64_def* pzlib_filefunc_def); +void fill_fopen_filefunc(zlib_filefunc_def* pzlib_filefunc_def); + +/* now internal definition, only for zip.c and unzip.h */ +typedef struct zlib_filefunc64_32_def_s +{ + zlib_filefunc64_def zfile_func64; + open_file_func zopen32_file; + tell_file_func ztell32_file; + seek_file_func zseek32_file; +} zlib_filefunc64_32_def; + + +#define ZREAD64(filefunc,filestream,buf,size) ((*((filefunc).zfile_func64.zread_file)) ((filefunc).zfile_func64.opaque,filestream,buf,size)) +#define ZWRITE64(filefunc,filestream,buf,size) ((*((filefunc).zfile_func64.zwrite_file)) ((filefunc).zfile_func64.opaque,filestream,buf,size)) +//#define ZTELL64(filefunc,filestream) ((*((filefunc).ztell64_file)) ((filefunc).opaque,filestream)) +//#define ZSEEK64(filefunc,filestream,pos,mode) ((*((filefunc).zseek64_file)) ((filefunc).opaque,filestream,pos,mode)) +#define ZCLOSE64(filefunc,filestream) ((*((filefunc).zfile_func64.zclose_file)) ((filefunc).zfile_func64.opaque,filestream)) +#define ZERROR64(filefunc,filestream) ((*((filefunc).zfile_func64.zerror_file)) ((filefunc).zfile_func64.opaque,filestream)) + +voidpf call_zopen64(const zlib_filefunc64_32_def* pfilefunc,const void*filename,int mode); +long call_zseek64(const zlib_filefunc64_32_def* pfilefunc,voidpf filestream, ZPOS64_T offset, int origin); +ZPOS64_T call_ztell64(const zlib_filefunc64_32_def* pfilefunc,voidpf filestream); + +void fill_zlib_filefunc64_32_def_from_filefunc32(zlib_filefunc64_32_def* p_filefunc64_32,const zlib_filefunc_def* p_filefunc32); + +#define ZOPEN64(filefunc,filename,mode) (call_zopen64((&(filefunc)),(filename),(mode))) +#define ZTELL64(filefunc,filestream) (call_ztell64((&(filefunc)),(filestream))) +#define ZSEEK64(filefunc,filestream,pos,mode) (call_zseek64((&(filefunc)),(filestream),(pos),(mode))) + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/thirdparty/zlib-1.3.1/contrib/minizip/iowin32.c b/thirdparty/zlib-1.3.1/contrib/minizip/iowin32.c new file mode 100644 index 0000000..08536e9 --- /dev/null +++ b/thirdparty/zlib-1.3.1/contrib/minizip/iowin32.c @@ -0,0 +1,440 @@ +/* iowin32.c -- IO base function header for compress/uncompress .zip + Version 1.1, February 14h, 2010 + part of the MiniZip project - ( http://www.winimage.com/zLibDll/minizip.html ) + + Copyright (C) 1998-2010 Gilles Vollant (minizip) ( http://www.winimage.com/zLibDll/minizip.html ) + + Modifications for Zip64 support + Copyright (C) 2009-2010 Mathias Svensson ( http://result42.com ) + + For more info read MiniZip_info.txt + +*/ + +#include + +#include "zlib.h" +#include "ioapi.h" +#include "iowin32.h" + +#ifndef INVALID_HANDLE_VALUE +#define INVALID_HANDLE_VALUE (0xFFFFFFFF) +#endif + +#ifndef INVALID_SET_FILE_POINTER +#define INVALID_SET_FILE_POINTER ((DWORD)-1) +#endif + + +// see Include/shared/winapifamily.h in the Windows Kit +#if defined(WINAPI_FAMILY_PARTITION) && (!(defined(IOWIN32_USING_WINRT_API))) + +#if !defined(WINAPI_FAMILY_ONE_PARTITION) +#define WINAPI_FAMILY_ONE_PARTITION(PartitionSet, Partition) ((WINAPI_FAMILY & PartitionSet) == Partition) +#endif + +#if WINAPI_FAMILY_ONE_PARTITION(WINAPI_FAMILY, WINAPI_PARTITION_APP) +#define IOWIN32_USING_WINRT_API 1 +#endif +#endif + +typedef struct +{ + HANDLE hf; + int error; +} WIN32FILE_IOWIN; + + +static void win32_translate_open_mode(int mode, + DWORD* lpdwDesiredAccess, + DWORD* lpdwCreationDisposition, + DWORD* lpdwShareMode, + DWORD* lpdwFlagsAndAttributes) { + *lpdwDesiredAccess = *lpdwShareMode = *lpdwFlagsAndAttributes = *lpdwCreationDisposition = 0; + + if ((mode & ZLIB_FILEFUNC_MODE_READWRITEFILTER)==ZLIB_FILEFUNC_MODE_READ) + { + *lpdwDesiredAccess = GENERIC_READ; + *lpdwCreationDisposition = OPEN_EXISTING; + *lpdwShareMode = FILE_SHARE_READ; + } + else if (mode & ZLIB_FILEFUNC_MODE_EXISTING) + { + *lpdwDesiredAccess = GENERIC_WRITE | GENERIC_READ; + *lpdwCreationDisposition = OPEN_EXISTING; + } + else if (mode & ZLIB_FILEFUNC_MODE_CREATE) + { + *lpdwDesiredAccess = GENERIC_WRITE | GENERIC_READ; + *lpdwCreationDisposition = CREATE_ALWAYS; + } +} + +static voidpf win32_build_iowin(HANDLE hFile) { + voidpf ret=NULL; + + if ((hFile != NULL) && (hFile != INVALID_HANDLE_VALUE)) + { + WIN32FILE_IOWIN w32fiow; + w32fiow.hf = hFile; + w32fiow.error = 0; + ret = malloc(sizeof(WIN32FILE_IOWIN)); + + if (ret==NULL) + CloseHandle(hFile); + else + *((WIN32FILE_IOWIN*)ret) = w32fiow; + } + return ret; +} + +voidpf ZCALLBACK win32_open64_file_func(voidpf opaque, const void* filename, int mode) { + const char* mode_fopen = NULL; + DWORD dwDesiredAccess,dwCreationDisposition,dwShareMode,dwFlagsAndAttributes ; + HANDLE hFile = NULL; + + win32_translate_open_mode(mode,&dwDesiredAccess,&dwCreationDisposition,&dwShareMode,&dwFlagsAndAttributes); + +#ifdef IOWIN32_USING_WINRT_API +#ifdef UNICODE + if ((filename!=NULL) && (dwDesiredAccess != 0)) + hFile = CreateFile2((LPCTSTR)filename, dwDesiredAccess, dwShareMode, dwCreationDisposition, NULL); +#else + if ((filename!=NULL) && (dwDesiredAccess != 0)) + { + WCHAR filenameW[FILENAME_MAX + 0x200 + 1]; + MultiByteToWideChar(CP_ACP,0,(const char*)filename,-1,filenameW,FILENAME_MAX + 0x200); + hFile = CreateFile2(filenameW, dwDesiredAccess, dwShareMode, dwCreationDisposition, NULL); + } +#endif +#else + if ((filename!=NULL) && (dwDesiredAccess != 0)) + hFile = CreateFile((LPCTSTR)filename, dwDesiredAccess, dwShareMode, NULL, dwCreationDisposition, dwFlagsAndAttributes, NULL); +#endif + + return win32_build_iowin(hFile); +} + + +voidpf ZCALLBACK win32_open64_file_funcA(voidpf opaque, const void* filename, int mode) { + const char* mode_fopen = NULL; + DWORD dwDesiredAccess,dwCreationDisposition,dwShareMode,dwFlagsAndAttributes ; + HANDLE hFile = NULL; + + win32_translate_open_mode(mode,&dwDesiredAccess,&dwCreationDisposition,&dwShareMode,&dwFlagsAndAttributes); + +#ifdef IOWIN32_USING_WINRT_API + if ((filename!=NULL) && (dwDesiredAccess != 0)) + { + WCHAR filenameW[FILENAME_MAX + 0x200 + 1]; + MultiByteToWideChar(CP_ACP,0,(const char*)filename,-1,filenameW,FILENAME_MAX + 0x200); + hFile = CreateFile2(filenameW, dwDesiredAccess, dwShareMode, dwCreationDisposition, NULL); + } +#else + if ((filename!=NULL) && (dwDesiredAccess != 0)) + hFile = CreateFileA((LPCSTR)filename, dwDesiredAccess, dwShareMode, NULL, dwCreationDisposition, dwFlagsAndAttributes, NULL); +#endif + + return win32_build_iowin(hFile); +} + + +voidpf ZCALLBACK win32_open64_file_funcW(voidpf opaque, const void* filename, int mode) { + const char* mode_fopen = NULL; + DWORD dwDesiredAccess,dwCreationDisposition,dwShareMode,dwFlagsAndAttributes ; + HANDLE hFile = NULL; + + win32_translate_open_mode(mode,&dwDesiredAccess,&dwCreationDisposition,&dwShareMode,&dwFlagsAndAttributes); + +#ifdef IOWIN32_USING_WINRT_API + if ((filename!=NULL) && (dwDesiredAccess != 0)) + hFile = CreateFile2((LPCWSTR)filename, dwDesiredAccess, dwShareMode, dwCreationDisposition,NULL); +#else + if ((filename!=NULL) && (dwDesiredAccess != 0)) + hFile = CreateFileW((LPCWSTR)filename, dwDesiredAccess, dwShareMode, NULL, dwCreationDisposition, dwFlagsAndAttributes, NULL); +#endif + + return win32_build_iowin(hFile); +} + + +voidpf ZCALLBACK win32_open_file_func(voidpf opaque, const char* filename, int mode) { + const char* mode_fopen = NULL; + DWORD dwDesiredAccess,dwCreationDisposition,dwShareMode,dwFlagsAndAttributes ; + HANDLE hFile = NULL; + + win32_translate_open_mode(mode,&dwDesiredAccess,&dwCreationDisposition,&dwShareMode,&dwFlagsAndAttributes); + +#ifdef IOWIN32_USING_WINRT_API +#ifdef UNICODE + if ((filename!=NULL) && (dwDesiredAccess != 0)) + hFile = CreateFile2((LPCTSTR)filename, dwDesiredAccess, dwShareMode, dwCreationDisposition, NULL); +#else + if ((filename!=NULL) && (dwDesiredAccess != 0)) + { + WCHAR filenameW[FILENAME_MAX + 0x200 + 1]; + MultiByteToWideChar(CP_ACP,0,(const char*)filename,-1,filenameW,FILENAME_MAX + 0x200); + hFile = CreateFile2(filenameW, dwDesiredAccess, dwShareMode, dwCreationDisposition, NULL); + } +#endif +#else + if ((filename!=NULL) && (dwDesiredAccess != 0)) + hFile = CreateFile((LPCTSTR)filename, dwDesiredAccess, dwShareMode, NULL, dwCreationDisposition, dwFlagsAndAttributes, NULL); +#endif + + return win32_build_iowin(hFile); +} + + +uLong ZCALLBACK win32_read_file_func(voidpf opaque, voidpf stream, void* buf,uLong size) { + uLong ret=0; + HANDLE hFile = NULL; + if (stream!=NULL) + hFile = ((WIN32FILE_IOWIN*)stream) -> hf; + + if (hFile != NULL) + { + if (!ReadFile(hFile, buf, size, &ret, NULL)) + { + DWORD dwErr = GetLastError(); + if (dwErr == ERROR_HANDLE_EOF) + dwErr = 0; + ((WIN32FILE_IOWIN*)stream) -> error=(int)dwErr; + } + } + + return ret; +} + + +uLong ZCALLBACK win32_write_file_func(voidpf opaque, voidpf stream, const void* buf, uLong size) { + uLong ret=0; + HANDLE hFile = NULL; + if (stream!=NULL) + hFile = ((WIN32FILE_IOWIN*)stream) -> hf; + + if (hFile != NULL) + { + if (!WriteFile(hFile, buf, size, &ret, NULL)) + { + DWORD dwErr = GetLastError(); + if (dwErr == ERROR_HANDLE_EOF) + dwErr = 0; + ((WIN32FILE_IOWIN*)stream) -> error=(int)dwErr; + } + } + + return ret; +} + +static BOOL MySetFilePointerEx(HANDLE hFile, LARGE_INTEGER pos, LARGE_INTEGER *newPos, DWORD dwMoveMethod) { +#ifdef IOWIN32_USING_WINRT_API + return SetFilePointerEx(hFile, pos, newPos, dwMoveMethod); +#else + LONG lHigh = pos.HighPart; + DWORD dwNewPos = SetFilePointer(hFile, pos.LowPart, &lHigh, dwMoveMethod); + BOOL fOk = TRUE; + if (dwNewPos == 0xFFFFFFFF) + if (GetLastError() != NO_ERROR) + fOk = FALSE; + if ((newPos != NULL) && (fOk)) + { + newPos->LowPart = dwNewPos; + newPos->HighPart = lHigh; + } + return fOk; +#endif +} + +long ZCALLBACK win32_tell_file_func(voidpf opaque, voidpf stream) { + long ret=-1; + HANDLE hFile = NULL; + if (stream!=NULL) + hFile = ((WIN32FILE_IOWIN*)stream) -> hf; + if (hFile != NULL) + { + LARGE_INTEGER pos; + pos.QuadPart = 0; + + if (!MySetFilePointerEx(hFile, pos, &pos, FILE_CURRENT)) + { + DWORD dwErr = GetLastError(); + ((WIN32FILE_IOWIN*)stream) -> error=(int)dwErr; + ret = -1; + } + else + ret=(long)pos.LowPart; + } + return ret; +} + +ZPOS64_T ZCALLBACK win32_tell64_file_func(voidpf opaque, voidpf stream) { + ZPOS64_T ret= (ZPOS64_T)-1; + HANDLE hFile = NULL; + if (stream!=NULL) + hFile = ((WIN32FILE_IOWIN*)stream)->hf; + + if (hFile) + { + LARGE_INTEGER pos; + pos.QuadPart = 0; + + if (!MySetFilePointerEx(hFile, pos, &pos, FILE_CURRENT)) + { + DWORD dwErr = GetLastError(); + ((WIN32FILE_IOWIN*)stream) -> error=(int)dwErr; + ret = (ZPOS64_T)-1; + } + else + ret=pos.QuadPart; + } + return ret; +} + + +long ZCALLBACK win32_seek_file_func(voidpf opaque, voidpf stream, uLong offset, int origin) { + DWORD dwMoveMethod=0xFFFFFFFF; + HANDLE hFile = NULL; + + long ret=-1; + if (stream!=NULL) + hFile = ((WIN32FILE_IOWIN*)stream) -> hf; + switch (origin) + { + case ZLIB_FILEFUNC_SEEK_CUR : + dwMoveMethod = FILE_CURRENT; + break; + case ZLIB_FILEFUNC_SEEK_END : + dwMoveMethod = FILE_END; + break; + case ZLIB_FILEFUNC_SEEK_SET : + dwMoveMethod = FILE_BEGIN; + break; + default: return -1; + } + + if (hFile != NULL) + { + LARGE_INTEGER pos; + pos.QuadPart = offset; + if (!MySetFilePointerEx(hFile, pos, NULL, dwMoveMethod)) + { + DWORD dwErr = GetLastError(); + ((WIN32FILE_IOWIN*)stream) -> error=(int)dwErr; + ret = -1; + } + else + ret=0; + } + return ret; +} + +long ZCALLBACK win32_seek64_file_func(voidpf opaque, voidpf stream, ZPOS64_T offset, int origin) { + DWORD dwMoveMethod=0xFFFFFFFF; + HANDLE hFile = NULL; + long ret=-1; + + if (stream!=NULL) + hFile = ((WIN32FILE_IOWIN*)stream)->hf; + + switch (origin) + { + case ZLIB_FILEFUNC_SEEK_CUR : + dwMoveMethod = FILE_CURRENT; + break; + case ZLIB_FILEFUNC_SEEK_END : + dwMoveMethod = FILE_END; + break; + case ZLIB_FILEFUNC_SEEK_SET : + dwMoveMethod = FILE_BEGIN; + break; + default: return -1; + } + + if (hFile) + { + LARGE_INTEGER pos; + pos.QuadPart = offset; + if (!MySetFilePointerEx(hFile, pos, NULL, dwMoveMethod)) + { + DWORD dwErr = GetLastError(); + ((WIN32FILE_IOWIN*)stream) -> error=(int)dwErr; + ret = -1; + } + else + ret=0; + } + return ret; +} + +int ZCALLBACK win32_close_file_func(voidpf opaque, voidpf stream) { + int ret=-1; + + if (stream!=NULL) + { + HANDLE hFile; + hFile = ((WIN32FILE_IOWIN*)stream) -> hf; + if (hFile != NULL) + { + CloseHandle(hFile); + ret=0; + } + free(stream); + } + return ret; +} + +int ZCALLBACK win32_error_file_func(voidpf opaque, voidpf stream) { + int ret=-1; + if (stream!=NULL) + { + ret = ((WIN32FILE_IOWIN*)stream) -> error; + } + return ret; +} + +void fill_win32_filefunc(zlib_filefunc_def* pzlib_filefunc_def) { + pzlib_filefunc_def->zopen_file = win32_open_file_func; + pzlib_filefunc_def->zread_file = win32_read_file_func; + pzlib_filefunc_def->zwrite_file = win32_write_file_func; + pzlib_filefunc_def->ztell_file = win32_tell_file_func; + pzlib_filefunc_def->zseek_file = win32_seek_file_func; + pzlib_filefunc_def->zclose_file = win32_close_file_func; + pzlib_filefunc_def->zerror_file = win32_error_file_func; + pzlib_filefunc_def->opaque = NULL; +} + +void fill_win32_filefunc64(zlib_filefunc64_def* pzlib_filefunc_def) { + pzlib_filefunc_def->zopen64_file = win32_open64_file_func; + pzlib_filefunc_def->zread_file = win32_read_file_func; + pzlib_filefunc_def->zwrite_file = win32_write_file_func; + pzlib_filefunc_def->ztell64_file = win32_tell64_file_func; + pzlib_filefunc_def->zseek64_file = win32_seek64_file_func; + pzlib_filefunc_def->zclose_file = win32_close_file_func; + pzlib_filefunc_def->zerror_file = win32_error_file_func; + pzlib_filefunc_def->opaque = NULL; +} + + +void fill_win32_filefunc64A(zlib_filefunc64_def* pzlib_filefunc_def) { + pzlib_filefunc_def->zopen64_file = win32_open64_file_funcA; + pzlib_filefunc_def->zread_file = win32_read_file_func; + pzlib_filefunc_def->zwrite_file = win32_write_file_func; + pzlib_filefunc_def->ztell64_file = win32_tell64_file_func; + pzlib_filefunc_def->zseek64_file = win32_seek64_file_func; + pzlib_filefunc_def->zclose_file = win32_close_file_func; + pzlib_filefunc_def->zerror_file = win32_error_file_func; + pzlib_filefunc_def->opaque = NULL; +} + + +void fill_win32_filefunc64W(zlib_filefunc64_def* pzlib_filefunc_def) { + pzlib_filefunc_def->zopen64_file = win32_open64_file_funcW; + pzlib_filefunc_def->zread_file = win32_read_file_func; + pzlib_filefunc_def->zwrite_file = win32_write_file_func; + pzlib_filefunc_def->ztell64_file = win32_tell64_file_func; + pzlib_filefunc_def->zseek64_file = win32_seek64_file_func; + pzlib_filefunc_def->zclose_file = win32_close_file_func; + pzlib_filefunc_def->zerror_file = win32_error_file_func; + pzlib_filefunc_def->opaque = NULL; +} diff --git a/thirdparty/zlib-1.3.1/contrib/minizip/iowin32.h b/thirdparty/zlib-1.3.1/contrib/minizip/iowin32.h new file mode 100644 index 0000000..a23a65d --- /dev/null +++ b/thirdparty/zlib-1.3.1/contrib/minizip/iowin32.h @@ -0,0 +1,28 @@ +/* iowin32.h -- IO base function header for compress/uncompress .zip + Version 1.1, February 14h, 2010 + part of the MiniZip project - ( http://www.winimage.com/zLibDll/minizip.html ) + + Copyright (C) 1998-2010 Gilles Vollant (minizip) ( http://www.winimage.com/zLibDll/minizip.html ) + + Modifications for Zip64 support + Copyright (C) 2009-2010 Mathias Svensson ( http://result42.com ) + + For more info read MiniZip_info.txt + +*/ + +#include + + +#ifdef __cplusplus +extern "C" { +#endif + +void fill_win32_filefunc(zlib_filefunc_def* pzlib_filefunc_def); +void fill_win32_filefunc64(zlib_filefunc64_def* pzlib_filefunc_def); +void fill_win32_filefunc64A(zlib_filefunc64_def* pzlib_filefunc_def); +void fill_win32_filefunc64W(zlib_filefunc64_def* pzlib_filefunc_def); + +#ifdef __cplusplus +} +#endif diff --git a/thirdparty/zlib-1.3.1/contrib/minizip/make_vms.com b/thirdparty/zlib-1.3.1/contrib/minizip/make_vms.com new file mode 100644 index 0000000..9ac13a9 --- /dev/null +++ b/thirdparty/zlib-1.3.1/contrib/minizip/make_vms.com @@ -0,0 +1,25 @@ +$ if f$search("ioapi.h_orig") .eqs. "" then copy ioapi.h ioapi.h_orig +$ open/write zdef vmsdefs.h +$ copy sys$input: zdef +$ deck +#define unix +#define fill_zlib_filefunc64_32_def_from_filefunc32 fillzffunc64from +#define Write_Zip64EndOfCentralDirectoryLocator Write_Zip64EoDLocator +#define Write_Zip64EndOfCentralDirectoryRecord Write_Zip64EoDRecord +#define Write_EndOfCentralDirectoryRecord Write_EoDRecord +$ eod +$ close zdef +$ copy vmsdefs.h,ioapi.h_orig ioapi.h +$ cc/include=[--]/prefix=all ioapi.c +$ cc/include=[--]/prefix=all miniunz.c +$ cc/include=[--]/prefix=all unzip.c +$ cc/include=[--]/prefix=all minizip.c +$ cc/include=[--]/prefix=all zip.c +$ link miniunz,unzip,ioapi,[--]libz.olb/lib +$ link minizip,zip,ioapi,[--]libz.olb/lib +$ mcr []minizip test minizip_info.txt +$ mcr []miniunz -l test.zip +$ rename minizip_info.txt; minizip_info.txt_old +$ mcr []miniunz test.zip +$ delete test.zip;* +$exit diff --git a/thirdparty/zlib-1.3.1/contrib/minizip/miniunz.c b/thirdparty/zlib-1.3.1/contrib/minizip/miniunz.c new file mode 100644 index 0000000..d627c42 --- /dev/null +++ b/thirdparty/zlib-1.3.1/contrib/minizip/miniunz.c @@ -0,0 +1,647 @@ +/* + miniunz.c + Version 1.1, February 14h, 2010 + sample part of the MiniZip project - ( http://www.winimage.com/zLibDll/minizip.html ) + + Copyright (C) 1998-2010 Gilles Vollant (minizip) ( http://www.winimage.com/zLibDll/minizip.html ) + + Modifications of Unzip for Zip64 + Copyright (C) 2007-2008 Even Rouault + + Modifications for Zip64 support on both zip and unzip + Copyright (C) 2009-2010 Mathias Svensson ( http://result42.com ) +*/ + +#if (!defined(_WIN32)) && (!defined(WIN32)) && (!defined(__APPLE__)) + #ifndef __USE_FILE_OFFSET64 + #define __USE_FILE_OFFSET64 + #endif + #ifndef __USE_LARGEFILE64 + #define __USE_LARGEFILE64 + #endif + #ifndef _LARGEFILE64_SOURCE + #define _LARGEFILE64_SOURCE + #endif + #ifndef _FILE_OFFSET_BIT + #define _FILE_OFFSET_BIT 64 + #endif +#endif + +#if defined(__APPLE__) || defined(__HAIKU__) || defined(MINIZIP_FOPEN_NO_64) +// In darwin and perhaps other BSD variants off_t is a 64 bit value, hence no need for specific 64 bit functions +#define FOPEN_FUNC(filename, mode) fopen(filename, mode) +#define FTELLO_FUNC(stream) ftello(stream) +#define FSEEKO_FUNC(stream, offset, origin) fseeko(stream, offset, origin) +#else +#define FOPEN_FUNC(filename, mode) fopen64(filename, mode) +#define FTELLO_FUNC(stream) ftello64(stream) +#define FSEEKO_FUNC(stream, offset, origin) fseeko64(stream, offset, origin) +#endif + + +#include +#include +#include +#include +#include +#include +#include + +#ifdef _WIN32 +# include +# include +#else +# include +# include +#endif + + +#include "unzip.h" + +#define CASESENSITIVITY (0) +#define WRITEBUFFERSIZE (8192) +#define MAXFILENAME (256) + +#ifdef _WIN32 +#define USEWIN32IOAPI +#include "iowin32.h" +#endif +/* + mini unzip, demo of unzip package + + usage : + Usage : miniunz [-exvlo] file.zip [file_to_extract] [-d extractdir] + + list the file in the zipfile, and print the content of FILE_ID.ZIP or README.TXT + if it exists +*/ + + +/* change_file_date : change the date/time of a file + filename : the filename of the file where date/time must be modified + dosdate : the new date at the MSDOS format (4 bytes) + tmu_date : the SAME new date at the tm_unz format */ +static void change_file_date(const char *filename, uLong dosdate, tm_unz tmu_date) { +#ifdef _WIN32 + HANDLE hFile; + FILETIME ftm,ftLocal,ftCreate,ftLastAcc,ftLastWrite; + + hFile = CreateFileA(filename,GENERIC_READ | GENERIC_WRITE, + 0,NULL,OPEN_EXISTING,0,NULL); + GetFileTime(hFile,&ftCreate,&ftLastAcc,&ftLastWrite); + DosDateTimeToFileTime((WORD)(dosdate>>16),(WORD)dosdate,&ftLocal); + LocalFileTimeToFileTime(&ftLocal,&ftm); + SetFileTime(hFile,&ftm,&ftLastAcc,&ftm); + CloseHandle(hFile); +#else +#if defined(unix) || defined(__APPLE__) + (void)dosdate; + struct utimbuf ut; + struct tm newdate; + newdate.tm_sec = tmu_date.tm_sec; + newdate.tm_min=tmu_date.tm_min; + newdate.tm_hour=tmu_date.tm_hour; + newdate.tm_mday=tmu_date.tm_mday; + newdate.tm_mon=tmu_date.tm_mon; + if (tmu_date.tm_year > 1900) + newdate.tm_year=tmu_date.tm_year - 1900; + else + newdate.tm_year=tmu_date.tm_year ; + newdate.tm_isdst=-1; + + ut.actime=ut.modtime=mktime(&newdate); + utime(filename,&ut); +#else + (void)filename; + (void)dosdate; + (void)tmu_date; +#endif +#endif +} + + +/* mymkdir and change_file_date are not 100 % portable + As I don't know well Unix, I wait feedback for the unix portion */ + +static int mymkdir(const char* dirname) { + int ret=0; +#ifdef _WIN32 + ret = _mkdir(dirname); +#elif unix + ret = mkdir (dirname,0775); +#elif __APPLE__ + ret = mkdir (dirname,0775); +#else + (void)dirname; +#endif + return ret; +} + +static int makedir(const char *newdir) { + char *buffer ; + char *p; + size_t len = strlen(newdir); + + if (len == 0) + return 0; + + buffer = (char*)malloc(len+1); + if (buffer==NULL) + { + printf("Error allocating memory\n"); + return UNZ_INTERNALERROR; + } + strcpy(buffer,newdir); + + if (buffer[len-1] == '/') { + buffer[len-1] = '\0'; + } + if (mymkdir(buffer) == 0) + { + free(buffer); + return 1; + } + + p = buffer+1; + while (1) + { + char hold; + + while(*p && *p != '\\' && *p != '/') + p++; + hold = *p; + *p = 0; + if ((mymkdir(buffer) == -1) && (errno == ENOENT)) + { + printf("couldn't create directory %s\n",buffer); + free(buffer); + return 0; + } + if (hold == 0) + break; + *p++ = hold; + } + free(buffer); + return 1; +} + +static void do_banner(void) { + printf("MiniUnz 1.1, demo of zLib + Unz package written by Gilles Vollant\n"); + printf("more info at http://www.winimage.com/zLibDll/unzip.html\n\n"); +} + +static void do_help(void) { + printf("Usage : miniunz [-e] [-x] [-v] [-l] [-o] [-p password] file.zip [file_to_extr.] [-d extractdir]\n\n" \ + " -e Extract without pathname (junk paths)\n" \ + " -x Extract with pathname\n" \ + " -v list files\n" \ + " -l list files\n" \ + " -d directory to extract into\n" \ + " -o overwrite files without prompting\n" \ + " -p extract encrypted file using password\n\n"); +} + +static void Display64BitsSize(ZPOS64_T n, int size_char) { + /* to avoid compatibility problem , we do here the conversion */ + char number[21]; + int offset=19; + int pos_string = 19; + number[20]=0; + for (;;) { + number[offset]=(char)((n%10)+'0'); + if (number[offset] != '0') + pos_string=offset; + n/=10; + if (offset==0) + break; + offset--; + } + { + int size_display_string = 19-pos_string; + while (size_char > size_display_string) + { + size_char--; + printf(" "); + } + } + + printf("%s",&number[pos_string]); +} + +static int do_list(unzFile uf) { + uLong i; + unz_global_info64 gi; + int err; + + err = unzGetGlobalInfo64(uf,&gi); + if (err!=UNZ_OK) + printf("error %d with zipfile in unzGetGlobalInfo \n",err); + printf(" Length Method Size Ratio Date Time CRC-32 Name\n"); + printf(" ------ ------ ---- ----- ---- ---- ------ ----\n"); + for (i=0;i0) + ratio = (uLong)((file_info.compressed_size*100)/file_info.uncompressed_size); + + /* display a '*' if the file is encrypted */ + if ((file_info.flag & 1) != 0) + charCrypt='*'; + + if (file_info.compression_method==0) + string_method="Stored"; + else + if (file_info.compression_method==Z_DEFLATED) + { + uInt iLevel=(uInt)((file_info.flag & 0x6)/2); + if (iLevel==0) + string_method="Defl:N"; + else if (iLevel==1) + string_method="Defl:X"; + else if ((iLevel==2) || (iLevel==3)) + string_method="Defl:F"; /* 2:fast , 3 : extra fast*/ + } + else + if (file_info.compression_method==Z_BZIP2ED) + { + string_method="BZip2 "; + } + else + string_method="Unkn. "; + + Display64BitsSize(file_info.uncompressed_size,7); + printf(" %6s%c",string_method,charCrypt); + Display64BitsSize(file_info.compressed_size,7); + printf(" %3lu%% %2.2lu-%2.2lu-%2.2lu %2.2lu:%2.2lu %8.8lx %s\n", + ratio, + (uLong)file_info.tmu_date.tm_mon + 1, + (uLong)file_info.tmu_date.tm_mday, + (uLong)file_info.tmu_date.tm_year % 100, + (uLong)file_info.tmu_date.tm_hour,(uLong)file_info.tmu_date.tm_min, + (uLong)file_info.crc,filename_inzip); + if ((i+1)='a') && (rep<='z')) + rep -= 0x20; + } + while ((rep!='Y') && (rep!='N') && (rep!='A')); + } + + if (rep == 'N') + skip = 1; + + if (rep == 'A') + *popt_overwrite=1; + } + + if ((skip==0) && (err==UNZ_OK)) + { + fout=FOPEN_FUNC(write_filename,"wb"); + /* some zipfile don't contain directory alone before file */ + if ((fout==NULL) && ((*popt_extract_without_path)==0) && + (filename_withoutpath!=(char*)filename_inzip)) + { + char c=*(filename_withoutpath-1); + *(filename_withoutpath-1)='\0'; + makedir(write_filename); + *(filename_withoutpath-1)=c; + fout=FOPEN_FUNC(write_filename,"wb"); + } + + if (fout==NULL) + { + printf("error opening %s\n",write_filename); + } + } + + if (fout!=NULL) + { + printf(" extracting: %s\n",write_filename); + + do + { + err = unzReadCurrentFile(uf,buf,size_buf); + if (err<0) + { + printf("error %d with zipfile in unzReadCurrentFile\n",err); + break; + } + if (err>0) + if (fwrite(buf,(unsigned)err,1,fout)!=1) + { + printf("error in writing extracted file\n"); + err=UNZ_ERRNO; + break; + } + } + while (err>0); + if (fout) + fclose(fout); + + if (err==0) + change_file_date(write_filename,file_info.dosDate, + file_info.tmu_date); + } + + if (err==UNZ_OK) + { + err = unzCloseCurrentFile (uf); + if (err!=UNZ_OK) + { + printf("error %d with zipfile in unzCloseCurrentFile\n",err); + } + } + else + unzCloseCurrentFile(uf); /* don't lose the error */ + } + + free(buf); + return err; +} + + +static int do_extract(unzFile uf, int opt_extract_without_path, int opt_overwrite, const char* password) { + uLong i; + unz_global_info64 gi; + int err; + + err = unzGetGlobalInfo64(uf,&gi); + if (err!=UNZ_OK) + printf("error %d with zipfile in unzGetGlobalInfo \n",err); + + for (i=0;i insert n+1 empty lines +.\" for manpage-specific macros, see man(7) +.SH NAME +miniunzip - uncompress and examine ZIP archives +.SH SYNOPSIS +.B miniunzip +.RI [ -exvlo ] +zipfile [ files_to_extract ] [-d tempdir] +.SH DESCRIPTION +.B minizip +is a simple tool which allows the extraction of compressed file +archives in the ZIP format used by the MS-DOS utility PKZIP. It was +written as a demonstration of the +.IR zlib (3) +library and therefore lack many of the features of the +.IR unzip (1) +program. +.SH OPTIONS +A number of options are supported. With the exception of +.BI \-d\ tempdir +these must be supplied before any +other arguments and are: +.TP +.BI \-l\ ,\ \-\-v +List the files in the archive without extracting them. +.TP +.B \-o +Overwrite files without prompting for confirmation. +.TP +.B \-x +Extract files (default). +.PP +The +.I zipfile +argument is the name of the archive to process. The next argument can be used +to specify a single file to extract from the archive. + +Lastly, the following option can be specified at the end of the command-line: +.TP +.BI \-d\ tempdir +Extract the archive in the directory +.I tempdir +rather than the current directory. +.SH SEE ALSO +.BR minizip (1), +.BR zlib (3), +.BR unzip (1). +.SH AUTHOR +This program was written by Gilles Vollant. This manual page was +written by Mark Brown . The -d tempdir option +was added by Dirk Eddelbuettel . diff --git a/thirdparty/zlib-1.3.1/contrib/minizip/minizip.1 b/thirdparty/zlib-1.3.1/contrib/minizip/minizip.1 new file mode 100644 index 0000000..1154484 --- /dev/null +++ b/thirdparty/zlib-1.3.1/contrib/minizip/minizip.1 @@ -0,0 +1,46 @@ +.\" Hey, EMACS: -*- nroff -*- +.TH minizip 1 "May 2, 2001" +.\" Please adjust this date whenever revising the manpage. +.\" +.\" Some roff macros, for reference: +.\" .nh disable hyphenation +.\" .hy enable hyphenation +.\" .ad l left justify +.\" .ad b justify to both left and right margins +.\" .nf disable filling +.\" .fi enable filling +.\" .br insert line break +.\" .sp insert n+1 empty lines +.\" for manpage-specific macros, see man(7) +.SH NAME +minizip - create ZIP archives +.SH SYNOPSIS +.B minizip +.RI [ -o ] +zipfile [ " files" ... ] +.SH DESCRIPTION +.B minizip +is a simple tool which allows the creation of compressed file archives +in the ZIP format used by the MS-DOS utility PKZIP. It was written as +a demonstration of the +.IR zlib (3) +library and therefore lack many of the features of the +.IR zip (1) +program. +.SH OPTIONS +The first argument supplied is the name of the ZIP archive to create or +.RI -o +in which case it is ignored and the second argument treated as the +name of the ZIP file. If the ZIP file already exists it will be +overwritten. +.PP +Subsequent arguments specify a list of files to place in the ZIP +archive. If none are specified then an empty archive will be created. +.SH SEE ALSO +.BR miniunzip (1), +.BR zlib (3), +.BR zip (1). +.SH AUTHOR +This program was written by Gilles Vollant. This manual page was +written by Mark Brown . + diff --git a/thirdparty/zlib-1.3.1/contrib/minizip/minizip.c b/thirdparty/zlib-1.3.1/contrib/minizip/minizip.c new file mode 100644 index 0000000..26ee8d0 --- /dev/null +++ b/thirdparty/zlib-1.3.1/contrib/minizip/minizip.c @@ -0,0 +1,509 @@ +/* + minizip.c + Version 1.1, February 14h, 2010 + sample part of the MiniZip project - ( http://www.winimage.com/zLibDll/minizip.html ) + + Copyright (C) 1998-2010 Gilles Vollant (minizip) ( http://www.winimage.com/zLibDll/minizip.html ) + + Modifications of Unzip for Zip64 + Copyright (C) 2007-2008 Even Rouault + + Modifications for Zip64 support on both zip and unzip + Copyright (C) 2009-2010 Mathias Svensson ( http://result42.com ) +*/ + + +#if (!defined(_WIN32)) && (!defined(WIN32)) && (!defined(__APPLE__)) + #ifndef __USE_FILE_OFFSET64 + #define __USE_FILE_OFFSET64 + #endif + #ifndef __USE_LARGEFILE64 + #define __USE_LARGEFILE64 + #endif + #ifndef _LARGEFILE64_SOURCE + #define _LARGEFILE64_SOURCE + #endif + #ifndef _FILE_OFFSET_BIT + #define _FILE_OFFSET_BIT 64 + #endif +#endif + +#if defined(__APPLE__) || defined(__HAIKU__) || defined(MINIZIP_FOPEN_NO_64) +// In darwin and perhaps other BSD variants off_t is a 64 bit value, hence no need for specific 64 bit functions +#define FOPEN_FUNC(filename, mode) fopen(filename, mode) +#define FTELLO_FUNC(stream) ftello(stream) +#define FSEEKO_FUNC(stream, offset, origin) fseeko(stream, offset, origin) +#else +#define FOPEN_FUNC(filename, mode) fopen64(filename, mode) +#define FTELLO_FUNC(stream) ftello64(stream) +#define FSEEKO_FUNC(stream, offset, origin) fseeko64(stream, offset, origin) +#endif + + + +#include +#include +#include +#include +#include +#include + +#ifdef _WIN32 +# include +# include +#else +# include +# include +# include +# include +#endif + +#include "zip.h" + +#ifdef _WIN32 + #define USEWIN32IOAPI + #include "iowin32.h" +#endif + + + +#define WRITEBUFFERSIZE (16384) +#define MAXFILENAME (256) + +#ifdef _WIN32 +/* f: name of file to get info on, tmzip: return value: access, + modification and creation times, dt: dostime */ +static int filetime(const char *f, tm_zip *tmzip, uLong *dt) { + int ret = 0; + { + FILETIME ftLocal; + HANDLE hFind; + WIN32_FIND_DATAA ff32; + + hFind = FindFirstFileA(f,&ff32); + if (hFind != INVALID_HANDLE_VALUE) + { + FileTimeToLocalFileTime(&(ff32.ftLastWriteTime),&ftLocal); + FileTimeToDosDateTime(&ftLocal,((LPWORD)dt)+1,((LPWORD)dt)+0); + FindClose(hFind); + ret = 1; + } + } + return ret; +} +#else +#if defined(unix) || defined(__APPLE__) +/* f: name of file to get info on, tmzip: return value: access, + modification and creation times, dt: dostime */ +static int filetime(const char *f, tm_zip *tmzip, uLong *dt) { + (void)dt; + int ret=0; + struct stat s; /* results of stat() */ + struct tm* filedate; + time_t tm_t=0; + + if (strcmp(f,"-")!=0) + { + char name[MAXFILENAME+1]; + size_t len = strlen(f); + if (len > MAXFILENAME) + len = MAXFILENAME; + + strncpy(name, f,MAXFILENAME-1); + /* strncpy doesn't append the trailing NULL, of the string is too long. */ + name[ MAXFILENAME ] = '\0'; + + if (name[len - 1] == '/') + name[len - 1] = '\0'; + /* not all systems allow stat'ing a file with / appended */ + if (stat(name,&s)==0) + { + tm_t = s.st_mtime; + ret = 1; + } + } + filedate = localtime(&tm_t); + + tmzip->tm_sec = filedate->tm_sec; + tmzip->tm_min = filedate->tm_min; + tmzip->tm_hour = filedate->tm_hour; + tmzip->tm_mday = filedate->tm_mday; + tmzip->tm_mon = filedate->tm_mon ; + tmzip->tm_year = filedate->tm_year; + + return ret; +} +#else +/* f: name of file to get info on, tmzip: return value: access, + modification and creation times, dt: dostime */ +static int filetime(const char *f, tm_zip *tmzip, uLong *dt) { + (void)f; + (void)tmzip; + (void)dt; + return 0; +} +#endif +#endif + + + + +static int check_exist_file(const char* filename) { + FILE* ftestexist; + int ret = 1; + ftestexist = FOPEN_FUNC(filename,"rb"); + if (ftestexist==NULL) + ret = 0; + else + fclose(ftestexist); + return ret; +} + +static void do_banner(void) { + printf("MiniZip 1.1, demo of zLib + MiniZip64 package, written by Gilles Vollant\n"); + printf("more info on MiniZip at http://www.winimage.com/zLibDll/minizip.html\n\n"); +} + +static void do_help(void) { + printf("Usage : minizip [-o] [-a] [-0 to -9] [-p password] [-j] file.zip [files_to_add]\n\n" \ + " -o Overwrite existing file.zip\n" \ + " -a Append to existing file.zip\n" \ + " -0 Store only\n" \ + " -1 Compress faster\n" \ + " -9 Compress better\n\n" \ + " -j exclude path. store only the file name.\n\n"); +} + +/* calculate the CRC32 of a file, + because to encrypt a file, we need known the CRC32 of the file before */ +static int getFileCrc(const char* filenameinzip, void* buf, unsigned long size_buf, unsigned long* result_crc) { + unsigned long calculate_crc=0; + int err=ZIP_OK; + FILE * fin = FOPEN_FUNC(filenameinzip,"rb"); + + unsigned long size_read = 0; + /* unsigned long total_read = 0; */ + if (fin==NULL) + { + err = ZIP_ERRNO; + } + + if (err == ZIP_OK) + do + { + err = ZIP_OK; + size_read = fread(buf,1,size_buf,fin); + if (size_read < size_buf) + if (feof(fin)==0) + { + printf("error in reading %s\n",filenameinzip); + err = ZIP_ERRNO; + } + + if (size_read>0) + calculate_crc = crc32_z(calculate_crc,buf,size_read); + /* total_read += size_read; */ + + } while ((err == ZIP_OK) && (size_read>0)); + + if (fin) + fclose(fin); + + *result_crc=calculate_crc; + printf("file %s crc %lx\n", filenameinzip, calculate_crc); + return err; +} + +static int isLargeFile(const char* filename) { + int largeFile = 0; + ZPOS64_T pos = 0; + FILE* pFile = FOPEN_FUNC(filename, "rb"); + + if(pFile != NULL) + { + FSEEKO_FUNC(pFile, 0, SEEK_END); + pos = (ZPOS64_T)FTELLO_FUNC(pFile); + + printf("File : %s is %llu bytes\n", filename, pos); + + if(pos >= 0xffffffff) + largeFile = 1; + + fclose(pFile); + } + + return largeFile; +} + +int main(int argc, char *argv[]) { + int i; + int opt_overwrite=0; + int opt_compress_level=Z_DEFAULT_COMPRESSION; + int opt_exclude_path=0; + int zipfilenamearg = 0; + char filename_try[MAXFILENAME+16]; + int zipok; + int err=0; + size_t size_buf=0; + void* buf=NULL; + const char* password=NULL; + + + do_banner(); + if (argc==1) + { + do_help(); + return 0; + } + else + { + for (i=1;i='0') && (c<='9')) + opt_compress_level = c-'0'; + if ((c=='j') || (c=='J')) + opt_exclude_path = 1; + + if (((c=='p') || (c=='P')) && (i+1='a') && (rep<='z')) + rep -= 0x20; + } + while ((rep!='Y') && (rep!='N') && (rep!='A')); + if (rep=='N') + zipok = 0; + if (rep=='A') + opt_overwrite = 2; + } + } + + if (zipok==1) + { + zipFile zf; + int errclose; +# ifdef USEWIN32IOAPI + zlib_filefunc64_def ffunc; + fill_win32_filefunc64A(&ffunc); + zf = zipOpen2_64(filename_try,(opt_overwrite==2) ? 2 : 0,NULL,&ffunc); +# else + zf = zipOpen64(filename_try,(opt_overwrite==2) ? 2 : 0); +# endif + + if (zf == NULL) + { + printf("error opening %s\n",filename_try); + err= ZIP_ERRNO; + } + else + printf("creating %s\n",filename_try); + + for (i=zipfilenamearg+1;(i='0') && (argv[i][1]<='9'))) && + (strlen(argv[i]) == 2))) + { + FILE * fin = NULL; + size_t size_read; + const char* filenameinzip = argv[i]; + const char *savefilenameinzip; + zip_fileinfo zi; + unsigned long crcFile=0; + int zip64 = 0; + + zi.tmz_date.tm_sec = zi.tmz_date.tm_min = zi.tmz_date.tm_hour = + zi.tmz_date.tm_mday = zi.tmz_date.tm_mon = zi.tmz_date.tm_year = 0; + zi.dosDate = 0; + zi.internal_fa = 0; + zi.external_fa = 0; + filetime(filenameinzip,&zi.tmz_date,&zi.dosDate); + +/* + err = zipOpenNewFileInZip(zf,filenameinzip,&zi, + NULL,0,NULL,0,NULL / * comment * /, + (opt_compress_level != 0) ? Z_DEFLATED : 0, + opt_compress_level); +*/ + if ((password != NULL) && (err==ZIP_OK)) + err = getFileCrc(filenameinzip,buf,size_buf,&crcFile); + + zip64 = isLargeFile(filenameinzip); + + /* The path name saved, should not include a leading slash. */ + /*if it did, windows/xp and dynazip couldn't read the zip file. */ + savefilenameinzip = filenameinzip; + while( savefilenameinzip[0] == '\\' || savefilenameinzip[0] == '/' ) + { + savefilenameinzip++; + } + + /*should the zip file contain any path at all?*/ + if( opt_exclude_path ) + { + const char *tmpptr; + const char *lastslash = 0; + for( tmpptr = savefilenameinzip; *tmpptr; tmpptr++) + { + if( *tmpptr == '\\' || *tmpptr == '/') + { + lastslash = tmpptr; + } + } + if( lastslash != NULL ) + { + savefilenameinzip = lastslash+1; // base filename follows last slash. + } + } + + /**/ + err = zipOpenNewFileInZip3_64(zf,savefilenameinzip,&zi, + NULL,0,NULL,0,NULL /* comment*/, + (opt_compress_level != 0) ? Z_DEFLATED : 0, + opt_compress_level,0, + /* -MAX_WBITS, DEF_MEM_LEVEL, Z_DEFAULT_STRATEGY, */ + -MAX_WBITS, DEF_MEM_LEVEL, Z_DEFAULT_STRATEGY, + password,crcFile, zip64); + + if (err != ZIP_OK) + printf("error in opening %s in zipfile\n",filenameinzip); + else + { + fin = FOPEN_FUNC(filenameinzip,"rb"); + if (fin==NULL) + { + err=ZIP_ERRNO; + printf("error in opening %s for reading\n",filenameinzip); + } + } + + if (err == ZIP_OK) + do + { + err = ZIP_OK; + size_read = fread(buf,1,size_buf,fin); + if (size_read < size_buf) + if (feof(fin)==0) + { + printf("error in reading %s\n",filenameinzip); + err = ZIP_ERRNO; + } + + if (size_read>0) + { + err = zipWriteInFileInZip (zf,buf,(unsigned)size_read); + if (err<0) + { + printf("error in writing %s in the zipfile\n", + filenameinzip); + } + + } + } while ((err == ZIP_OK) && (size_read>0)); + + if (fin) + fclose(fin); + + if (err<0) + err=ZIP_ERRNO; + else + { + err = zipCloseFileInZip(zf); + if (err!=ZIP_OK) + printf("error in closing %s in the zipfile\n", + filenameinzip); + } + } + } + errclose = zipClose(zf,NULL); + if (errclose != ZIP_OK) + printf("error in closing %s\n",filename_try); + } + else + { + do_help(); + } + + free(buf); + return 0; +} diff --git a/thirdparty/zlib-1.3.1/contrib/minizip/minizip.pc.in b/thirdparty/zlib-1.3.1/contrib/minizip/minizip.pc.in new file mode 100644 index 0000000..69b5b7f --- /dev/null +++ b/thirdparty/zlib-1.3.1/contrib/minizip/minizip.pc.in @@ -0,0 +1,12 @@ +prefix=@prefix@ +exec_prefix=@exec_prefix@ +libdir=@libdir@ +includedir=@includedir@/minizip + +Name: minizip +Description: Minizip zip file manipulation library +Requires: +Version: @PACKAGE_VERSION@ +Libs: -L${libdir} -lminizip +Libs.private: -lz +Cflags: -I${includedir} diff --git a/thirdparty/zlib-1.3.1/contrib/minizip/mztools.c b/thirdparty/zlib-1.3.1/contrib/minizip/mztools.c new file mode 100644 index 0000000..c8d2375 --- /dev/null +++ b/thirdparty/zlib-1.3.1/contrib/minizip/mztools.c @@ -0,0 +1,285 @@ +/* + Additional tools for Minizip + Code: Xavier Roche '2004 + License: Same as ZLIB (www.gzip.org) +*/ + +/* Code */ +#include +#include +#include +#include "zlib.h" +#include "unzip.h" + +#define READ_8(adr) ((unsigned char)*(adr)) +#define READ_16(adr) ( READ_8(adr) | (READ_8(adr+1) << 8) ) +#define READ_32(adr) ( READ_16(adr) | (READ_16((adr)+2) << 16) ) + +#define WRITE_8(buff, n) do { \ + *((unsigned char*)(buff)) = (unsigned char) ((n) & 0xff); \ +} while(0) +#define WRITE_16(buff, n) do { \ + WRITE_8((unsigned char*)(buff), n); \ + WRITE_8(((unsigned char*)(buff)) + 1, (n) >> 8); \ +} while(0) +#define WRITE_32(buff, n) do { \ + WRITE_16((unsigned char*)(buff), (n) & 0xffff); \ + WRITE_16((unsigned char*)(buff) + 2, (n) >> 16); \ +} while(0) + +extern int ZEXPORT unzRepair(const char* file, const char* fileOut, const char* fileOutTmp, uLong* nRecovered, uLong* bytesRecovered) { + int err = Z_OK; + FILE* fpZip = fopen(file, "rb"); + FILE* fpOut = fopen(fileOut, "wb"); + FILE* fpOutCD = fopen(fileOutTmp, "wb"); + if (fpZip != NULL && fpOut != NULL) { + int entries = 0; + uLong totalBytes = 0; + char header[30]; + char filename[1024]; + char extra[1024]; + int offset = 0; + int offsetCD = 0; + while ( fread(header, 1, 30, fpZip) == 30 ) { + int currentOffset = offset; + + /* File entry */ + if (READ_32(header) == 0x04034b50) { + unsigned int version = READ_16(header + 4); + unsigned int gpflag = READ_16(header + 6); + unsigned int method = READ_16(header + 8); + unsigned int filetime = READ_16(header + 10); + unsigned int filedate = READ_16(header + 12); + unsigned int crc = READ_32(header + 14); /* crc */ + unsigned int cpsize = READ_32(header + 18); /* compressed size */ + unsigned int uncpsize = READ_32(header + 22); /* uncompressed sz */ + unsigned int fnsize = READ_16(header + 26); /* file name length */ + unsigned int extsize = READ_16(header + 28); /* extra field length */ + filename[0] = extra[0] = '\0'; + + /* Header */ + if (fwrite(header, 1, 30, fpOut) == 30) { + offset += 30; + } else { + err = Z_ERRNO; + break; + } + + /* Filename */ + if (fnsize > 0) { + if (fnsize < sizeof(filename)) { + if (fread(filename, 1, fnsize, fpZip) == fnsize) { + if (fwrite(filename, 1, fnsize, fpOut) == fnsize) { + offset += fnsize; + } else { + err = Z_ERRNO; + break; + } + } else { + err = Z_ERRNO; + break; + } + } else { + err = Z_ERRNO; + break; + } + } else { + err = Z_STREAM_ERROR; + break; + } + + /* Extra field */ + if (extsize > 0) { + if (extsize < sizeof(extra)) { + if (fread(extra, 1, extsize, fpZip) == extsize) { + if (fwrite(extra, 1, extsize, fpOut) == extsize) { + offset += extsize; + } else { + err = Z_ERRNO; + break; + } + } else { + err = Z_ERRNO; + break; + } + } else { + err = Z_ERRNO; + break; + } + } + + /* Data */ + { + int dataSize = cpsize; + if (dataSize == 0) { + dataSize = uncpsize; + } + if (dataSize > 0) { + char* data = malloc(dataSize); + if (data != NULL) { + if ((int)fread(data, 1, dataSize, fpZip) == dataSize) { + if ((int)fwrite(data, 1, dataSize, fpOut) == dataSize) { + offset += dataSize; + totalBytes += dataSize; + } else { + err = Z_ERRNO; + } + } else { + err = Z_ERRNO; + } + free(data); + if (err != Z_OK) { + break; + } + } else { + err = Z_MEM_ERROR; + break; + } + } + } + + /* Central directory entry */ + { + char header[46]; + char* comment = ""; + int comsize = (int) strlen(comment); + WRITE_32(header, 0x02014b50); + WRITE_16(header + 4, version); + WRITE_16(header + 6, version); + WRITE_16(header + 8, gpflag); + WRITE_16(header + 10, method); + WRITE_16(header + 12, filetime); + WRITE_16(header + 14, filedate); + WRITE_32(header + 16, crc); + WRITE_32(header + 20, cpsize); + WRITE_32(header + 24, uncpsize); + WRITE_16(header + 28, fnsize); + WRITE_16(header + 30, extsize); + WRITE_16(header + 32, comsize); + WRITE_16(header + 34, 0); /* disk # */ + WRITE_16(header + 36, 0); /* int attrb */ + WRITE_32(header + 38, 0); /* ext attrb */ + WRITE_32(header + 42, currentOffset); + /* Header */ + if (fwrite(header, 1, 46, fpOutCD) == 46) { + offsetCD += 46; + + /* Filename */ + if (fnsize > 0) { + if (fwrite(filename, 1, fnsize, fpOutCD) == fnsize) { + offsetCD += fnsize; + } else { + err = Z_ERRNO; + break; + } + } else { + err = Z_STREAM_ERROR; + break; + } + + /* Extra field */ + if (extsize > 0) { + if (fwrite(extra, 1, extsize, fpOutCD) == extsize) { + offsetCD += extsize; + } else { + err = Z_ERRNO; + break; + } + } + + /* Comment field */ + if (comsize > 0) { + if ((int)fwrite(comment, 1, comsize, fpOutCD) == comsize) { + offsetCD += comsize; + } else { + err = Z_ERRNO; + break; + } + } + + + } else { + err = Z_ERRNO; + break; + } + } + + /* Success */ + entries++; + + } else { + break; + } + } + + /* Final central directory */ + { + int entriesZip = entries; + char header[22]; + char* comment = ""; // "ZIP File recovered by zlib/minizip/mztools"; + int comsize = (int) strlen(comment); + if (entriesZip > 0xffff) { + entriesZip = 0xffff; + } + WRITE_32(header, 0x06054b50); + WRITE_16(header + 4, 0); /* disk # */ + WRITE_16(header + 6, 0); /* disk # */ + WRITE_16(header + 8, entriesZip); /* hack */ + WRITE_16(header + 10, entriesZip); /* hack */ + WRITE_32(header + 12, offsetCD); /* size of CD */ + WRITE_32(header + 16, offset); /* offset to CD */ + WRITE_16(header + 20, comsize); /* comment */ + + /* Header */ + if (fwrite(header, 1, 22, fpOutCD) == 22) { + + /* Comment field */ + if (comsize > 0) { + if ((int)fwrite(comment, 1, comsize, fpOutCD) != comsize) { + err = Z_ERRNO; + } + } + + } else { + err = Z_ERRNO; + } + } + + /* Final merge (file + central directory) */ + fclose(fpOutCD); + if (err == Z_OK) { + fpOutCD = fopen(fileOutTmp, "rb"); + if (fpOutCD != NULL) { + int nRead; + char buffer[8192]; + while ( (nRead = (int)fread(buffer, 1, sizeof(buffer), fpOutCD)) > 0) { + if ((int)fwrite(buffer, 1, nRead, fpOut) != nRead) { + err = Z_ERRNO; + break; + } + } + fclose(fpOutCD); + } + } + + /* Close */ + fclose(fpZip); + fclose(fpOut); + + /* Wipe temporary file */ + (void)remove(fileOutTmp); + + /* Number of recovered entries */ + if (err == Z_OK) { + if (nRecovered != NULL) { + *nRecovered = entries; + } + if (bytesRecovered != NULL) { + *bytesRecovered = totalBytes; + } + } + } else { + err = Z_STREAM_ERROR; + } + return err; +} diff --git a/thirdparty/zlib-1.3.1/contrib/minizip/mztools.h b/thirdparty/zlib-1.3.1/contrib/minizip/mztools.h new file mode 100644 index 0000000..a49a426 --- /dev/null +++ b/thirdparty/zlib-1.3.1/contrib/minizip/mztools.h @@ -0,0 +1,37 @@ +/* + Additional tools for Minizip + Code: Xavier Roche '2004 + License: Same as ZLIB (www.gzip.org) +*/ + +#ifndef _zip_tools_H +#define _zip_tools_H + +#ifdef __cplusplus +extern "C" { +#endif + +#ifndef _ZLIB_H +#include "zlib.h" +#endif + +#include "unzip.h" + +/* Repair a ZIP file (missing central directory) + file: file to recover + fileOut: output file after recovery + fileOutTmp: temporary file name used for recovery +*/ +extern int ZEXPORT unzRepair(const char* file, + const char* fileOut, + const char* fileOutTmp, + uLong* nRecovered, + uLong* bytesRecovered); + + +#ifdef __cplusplus +} +#endif + + +#endif diff --git a/thirdparty/zlib-1.3.1/contrib/minizip/unzip.c b/thirdparty/zlib-1.3.1/contrib/minizip/unzip.c new file mode 100644 index 0000000..ea05b7d --- /dev/null +++ b/thirdparty/zlib-1.3.1/contrib/minizip/unzip.c @@ -0,0 +1,1985 @@ +/* unzip.c -- IO for uncompress .zip files using zlib + Version 1.1, February 14h, 2010 + part of the MiniZip project - ( http://www.winimage.com/zLibDll/minizip.html ) + + Copyright (C) 1998-2010 Gilles Vollant (minizip) ( http://www.winimage.com/zLibDll/minizip.html ) + + Modifications of Unzip for Zip64 + Copyright (C) 2007-2008 Even Rouault + + Modifications for Zip64 support on both zip and unzip + Copyright (C) 2009-2010 Mathias Svensson ( http://result42.com ) + + For more info read MiniZip_info.txt + + + ------------------------------------------------------------------------------------ + Decryption code comes from crypt.c by Info-ZIP but has been greatly reduced in terms of + compatibility with older software. The following is from the original crypt.c. + Code woven in by Terry Thorsen 1/2003. + + Copyright (c) 1990-2000 Info-ZIP. All rights reserved. + + See the accompanying file LICENSE, version 2000-Apr-09 or later + (the contents of which are also included in zip.h) for terms of use. + If, for some reason, all these files are missing, the Info-ZIP license + also may be found at: ftp://ftp.info-zip.org/pub/infozip/license.html + + crypt.c (full version) by Info-ZIP. Last revised: [see crypt.h] + + The encryption/decryption parts of this source code (as opposed to the + non-echoing password parts) were originally written in Europe. The + whole source package can be freely distributed, including from the USA. + (Prior to January 2000, re-export from the US was a violation of US law.) + + This encryption code is a direct transcription of the algorithm from + Roger Schlafly, described by Phil Katz in the file appnote.txt. This + file (appnote.txt) is distributed with the PKZIP program (even in the + version without encryption capabilities). + + ------------------------------------------------------------------------------------ + + Changes in unzip.c + + 2007-2008 - Even Rouault - Addition of cpl_unzGetCurrentFileZStreamPos + 2007-2008 - Even Rouault - Decoration of symbol names unz* -> cpl_unz* + 2007-2008 - Even Rouault - Remove old C style function prototypes + 2007-2008 - Even Rouault - Add unzip support for ZIP64 + + Copyright (C) 2007-2008 Even Rouault + + + Oct-2009 - Mathias Svensson - Removed cpl_* from symbol names (Even Rouault added them but since this is now moved to a new project (minizip64) I renamed them again). + Oct-2009 - Mathias Svensson - Fixed problem if uncompressed size was > 4G and compressed size was <4G + should only read the compressed/uncompressed size from the Zip64 format if + the size from normal header was 0xFFFFFFFF + Oct-2009 - Mathias Svensson - Applied some bug fixes from patches received from Gilles Vollant + Oct-2009 - Mathias Svensson - Applied support to unzip files with compression method BZIP2 (bzip2 lib is required) + Patch created by Daniel Borca + + Jan-2010 - back to unzip and minizip 1.0 name scheme, with compatibility layer + + Copyright (C) 1998 - 2010 Gilles Vollant, Even Rouault, Mathias Svensson + +*/ + + +#include +#include +#include + +#ifndef NOUNCRYPT + #define NOUNCRYPT +#endif + +#include "zlib.h" +#include "unzip.h" + +#ifdef STDC +# include +#endif +#ifdef NO_ERRNO_H + extern int errno; +#else +# include +#endif + + +#ifndef local +# define local static +#endif +/* compile with -Dlocal if your debugger can't find static symbols */ + + +#ifndef CASESENSITIVITYDEFAULT_NO +# if !defined(unix) && !defined(CASESENSITIVITYDEFAULT_YES) +# define CASESENSITIVITYDEFAULT_NO +# endif +#endif + + +#ifndef UNZ_BUFSIZE +#define UNZ_BUFSIZE (16384) +#endif + +#ifndef UNZ_MAXFILENAMEINZIP +#define UNZ_MAXFILENAMEINZIP (256) +#endif + +#ifndef ALLOC +# define ALLOC(size) (malloc(size)) +#endif + +#define SIZECENTRALDIRITEM (0x2e) +#define SIZEZIPLOCALHEADER (0x1e) + + +const char unz_copyright[] = + " unzip 1.01 Copyright 1998-2004 Gilles Vollant - http://www.winimage.com/zLibDll"; + +/* unz_file_info64_internal contain internal info about a file in zipfile*/ +typedef struct unz_file_info64_internal_s +{ + ZPOS64_T offset_curfile;/* relative offset of local header 8 bytes */ +} unz_file_info64_internal; + + +/* file_in_zip_read_info_s contain internal information about a file in zipfile, + when reading and decompress it */ +typedef struct +{ + char *read_buffer; /* internal buffer for compressed data */ + z_stream stream; /* zLib stream structure for inflate */ + +#ifdef HAVE_BZIP2 + bz_stream bstream; /* bzLib stream structure for bziped */ +#endif + + ZPOS64_T pos_in_zipfile; /* position in byte on the zipfile, for fseek*/ + uLong stream_initialised; /* flag set if stream structure is initialised*/ + + ZPOS64_T offset_local_extrafield;/* offset of the local extra field */ + uInt size_local_extrafield;/* size of the local extra field */ + ZPOS64_T pos_local_extrafield; /* position in the local extra field in read*/ + ZPOS64_T total_out_64; + + uLong crc32; /* crc32 of all data uncompressed */ + uLong crc32_wait; /* crc32 we must obtain after decompress all */ + ZPOS64_T rest_read_compressed; /* number of byte to be decompressed */ + ZPOS64_T rest_read_uncompressed;/*number of byte to be obtained after decomp*/ + zlib_filefunc64_32_def z_filefunc; + voidpf filestream; /* io structure of the zipfile */ + uLong compression_method; /* compression method (0==store) */ + ZPOS64_T byte_before_the_zipfile;/* byte before the zipfile, (>0 for sfx)*/ + int raw; +} file_in_zip64_read_info_s; + + +/* unz64_s contain internal information about the zipfile +*/ +typedef struct +{ + zlib_filefunc64_32_def z_filefunc; + int is64bitOpenFunction; + voidpf filestream; /* io structure of the zipfile */ + unz_global_info64 gi; /* public global information */ + ZPOS64_T byte_before_the_zipfile;/* byte before the zipfile, (>0 for sfx)*/ + ZPOS64_T num_file; /* number of the current file in the zipfile*/ + ZPOS64_T pos_in_central_dir; /* pos of the current file in the central dir*/ + ZPOS64_T current_file_ok; /* flag about the usability of the current file*/ + ZPOS64_T central_pos; /* position of the beginning of the central dir*/ + + ZPOS64_T size_central_dir; /* size of the central directory */ + ZPOS64_T offset_central_dir; /* offset of start of central directory with + respect to the starting disk number */ + + unz_file_info64 cur_file_info; /* public info about the current file in zip*/ + unz_file_info64_internal cur_file_info_internal; /* private info about it*/ + file_in_zip64_read_info_s* pfile_in_zip_read; /* structure about the current + file if we are decompressing it */ + int encrypted; + + int isZip64; + +# ifndef NOUNCRYPT + unsigned long keys[3]; /* keys defining the pseudo-random sequence */ + const z_crc_t* pcrc_32_tab; +# endif +} unz64_s; + + +#ifndef NOUNCRYPT +#include "crypt.h" +#endif + + +/* =========================================================================== + Reads a long in LSB order from the given gz_stream. Sets +*/ + +local int unz64local_getShort(const zlib_filefunc64_32_def* pzlib_filefunc_def, + voidpf filestream, + uLong *pX) { + unsigned char c[2]; + int err = (int)ZREAD64(*pzlib_filefunc_def,filestream,c,2); + if (err==2) + { + *pX = c[0] | ((uLong)c[1] << 8); + return UNZ_OK; + } + else + { + *pX = 0; + if (ZERROR64(*pzlib_filefunc_def,filestream)) + return UNZ_ERRNO; + else + return UNZ_EOF; + } +} + +local int unz64local_getLong(const zlib_filefunc64_32_def* pzlib_filefunc_def, + voidpf filestream, + uLong *pX) { + unsigned char c[4]; + int err = (int)ZREAD64(*pzlib_filefunc_def,filestream,c,4); + if (err==4) + { + *pX = c[0] | ((uLong)c[1] << 8) | ((uLong)c[2] << 16) | ((uLong)c[3] << 24); + return UNZ_OK; + } + else + { + *pX = 0; + if (ZERROR64(*pzlib_filefunc_def,filestream)) + return UNZ_ERRNO; + else + return UNZ_EOF; + } +} + + +local int unz64local_getLong64(const zlib_filefunc64_32_def* pzlib_filefunc_def, + voidpf filestream, + ZPOS64_T *pX) { + unsigned char c[8]; + int err = (int)ZREAD64(*pzlib_filefunc_def,filestream,c,8); + if (err==8) + { + *pX = c[0] | ((ZPOS64_T)c[1] << 8) | ((ZPOS64_T)c[2] << 16) | ((ZPOS64_T)c[3] << 24) + | ((ZPOS64_T)c[4] << 32) | ((ZPOS64_T)c[5] << 40) | ((ZPOS64_T)c[6] << 48) | ((ZPOS64_T)c[7] << 56); + return UNZ_OK; + } + else + { + *pX = 0; + if (ZERROR64(*pzlib_filefunc_def,filestream)) + return UNZ_ERRNO; + else + return UNZ_EOF; + } +} + +/* My own strcmpi / strcasecmp */ +local int strcmpcasenosensitive_internal(const char* fileName1, const char* fileName2) { + for (;;) + { + char c1=*(fileName1++); + char c2=*(fileName2++); + if ((c1>='a') && (c1<='z')) + c1 -= 0x20; + if ((c2>='a') && (c2<='z')) + c2 -= 0x20; + if (c1=='\0') + return ((c2=='\0') ? 0 : -1); + if (c2=='\0') + return 1; + if (c1c2) + return 1; + } +} + + +#ifdef CASESENSITIVITYDEFAULT_NO +#define CASESENSITIVITYDEFAULTVALUE 2 +#else +#define CASESENSITIVITYDEFAULTVALUE 1 +#endif + +#ifndef STRCMPCASENOSENTIVEFUNCTION +#define STRCMPCASENOSENTIVEFUNCTION strcmpcasenosensitive_internal +#endif + +/* + Compare two filenames (fileName1,fileName2). + If iCaseSensitivity = 1, comparison is case sensitive (like strcmp) + If iCaseSensitivity = 2, comparison is not case sensitive (like strcmpi + or strcasecmp) + If iCaseSensitivity = 0, case sensitivity is default of your operating system + (like 1 on Unix, 2 on Windows) + +*/ +extern int ZEXPORT unzStringFileNameCompare (const char* fileName1, + const char* fileName2, + int iCaseSensitivity) { + if (iCaseSensitivity==0) + iCaseSensitivity=CASESENSITIVITYDEFAULTVALUE; + + if (iCaseSensitivity==1) + return strcmp(fileName1,fileName2); + + return STRCMPCASENOSENTIVEFUNCTION(fileName1,fileName2); +} + +#ifndef BUFREADCOMMENT +#define BUFREADCOMMENT (0x400) +#endif + +#ifndef CENTRALDIRINVALID +#define CENTRALDIRINVALID ((ZPOS64_T)(-1)) +#endif + +/* + Locate the Central directory of a zipfile (at the end, just before + the global comment) +*/ +local ZPOS64_T unz64local_SearchCentralDir(const zlib_filefunc64_32_def* pzlib_filefunc_def, voidpf filestream) { + unsigned char* buf; + ZPOS64_T uSizeFile; + ZPOS64_T uBackRead; + ZPOS64_T uMaxBack=0xffff; /* maximum size of global comment */ + ZPOS64_T uPosFound=CENTRALDIRINVALID; + + if (ZSEEK64(*pzlib_filefunc_def,filestream,0,ZLIB_FILEFUNC_SEEK_END) != 0) + return CENTRALDIRINVALID; + + + uSizeFile = ZTELL64(*pzlib_filefunc_def,filestream); + + if (uMaxBack>uSizeFile) + uMaxBack = uSizeFile; + + buf = (unsigned char*)ALLOC(BUFREADCOMMENT+4); + if (buf==NULL) + return CENTRALDIRINVALID; + + uBackRead = 4; + while (uBackReaduMaxBack) + uBackRead = uMaxBack; + else + uBackRead+=BUFREADCOMMENT; + uReadPos = uSizeFile-uBackRead ; + + uReadSize = ((BUFREADCOMMENT+4) < (uSizeFile-uReadPos)) ? + (BUFREADCOMMENT+4) : (uLong)(uSizeFile-uReadPos); + if (ZSEEK64(*pzlib_filefunc_def,filestream,uReadPos,ZLIB_FILEFUNC_SEEK_SET)!=0) + break; + + if (ZREAD64(*pzlib_filefunc_def,filestream,buf,uReadSize)!=uReadSize) + break; + + for (i=(int)uReadSize-3; (i--)>0;) + if (((*(buf+i))==0x50) && ((*(buf+i+1))==0x4b) && + ((*(buf+i+2))==0x05) && ((*(buf+i+3))==0x06)) + { + uPosFound = uReadPos+(unsigned)i; + break; + } + + if (uPosFound!=CENTRALDIRINVALID) + break; + } + free(buf); + return uPosFound; +} + + +/* + Locate the Central directory 64 of a zipfile (at the end, just before + the global comment) +*/ +local ZPOS64_T unz64local_SearchCentralDir64(const zlib_filefunc64_32_def* pzlib_filefunc_def, + voidpf filestream) { + unsigned char* buf; + ZPOS64_T uSizeFile; + ZPOS64_T uBackRead; + ZPOS64_T uMaxBack=0xffff; /* maximum size of global comment */ + ZPOS64_T uPosFound=CENTRALDIRINVALID; + uLong uL; + ZPOS64_T relativeOffset; + + if (ZSEEK64(*pzlib_filefunc_def,filestream,0,ZLIB_FILEFUNC_SEEK_END) != 0) + return CENTRALDIRINVALID; + + + uSizeFile = ZTELL64(*pzlib_filefunc_def,filestream); + + if (uMaxBack>uSizeFile) + uMaxBack = uSizeFile; + + buf = (unsigned char*)ALLOC(BUFREADCOMMENT+4); + if (buf==NULL) + return CENTRALDIRINVALID; + + uBackRead = 4; + while (uBackReaduMaxBack) + uBackRead = uMaxBack; + else + uBackRead+=BUFREADCOMMENT; + uReadPos = uSizeFile-uBackRead ; + + uReadSize = ((BUFREADCOMMENT+4) < (uSizeFile-uReadPos)) ? + (BUFREADCOMMENT+4) : (uLong)(uSizeFile-uReadPos); + if (ZSEEK64(*pzlib_filefunc_def,filestream,uReadPos,ZLIB_FILEFUNC_SEEK_SET)!=0) + break; + + if (ZREAD64(*pzlib_filefunc_def,filestream,buf,uReadSize)!=uReadSize) + break; + + for (i=(int)uReadSize-3; (i--)>0;) + if (((*(buf+i))==0x50) && ((*(buf+i+1))==0x4b) && + ((*(buf+i+2))==0x06) && ((*(buf+i+3))==0x07)) + { + uPosFound = uReadPos+(unsigned)i; + break; + } + + if (uPosFound!=CENTRALDIRINVALID) + break; + } + free(buf); + if (uPosFound == CENTRALDIRINVALID) + return CENTRALDIRINVALID; + + /* Zip64 end of central directory locator */ + if (ZSEEK64(*pzlib_filefunc_def,filestream, uPosFound,ZLIB_FILEFUNC_SEEK_SET)!=0) + return CENTRALDIRINVALID; + + /* the signature, already checked */ + if (unz64local_getLong(pzlib_filefunc_def,filestream,&uL)!=UNZ_OK) + return CENTRALDIRINVALID; + + /* number of the disk with the start of the zip64 end of central directory */ + if (unz64local_getLong(pzlib_filefunc_def,filestream,&uL)!=UNZ_OK) + return CENTRALDIRINVALID; + if (uL != 0) + return CENTRALDIRINVALID; + + /* relative offset of the zip64 end of central directory record */ + if (unz64local_getLong64(pzlib_filefunc_def,filestream,&relativeOffset)!=UNZ_OK) + return CENTRALDIRINVALID; + + /* total number of disks */ + if (unz64local_getLong(pzlib_filefunc_def,filestream,&uL)!=UNZ_OK) + return CENTRALDIRINVALID; + if (uL != 1) + return CENTRALDIRINVALID; + + /* Goto end of central directory record */ + if (ZSEEK64(*pzlib_filefunc_def,filestream, relativeOffset,ZLIB_FILEFUNC_SEEK_SET)!=0) + return CENTRALDIRINVALID; + + /* the signature */ + if (unz64local_getLong(pzlib_filefunc_def,filestream,&uL)!=UNZ_OK) + return CENTRALDIRINVALID; + + if (uL != 0x06064b50) + return CENTRALDIRINVALID; + + return relativeOffset; +} + +/* + Open a Zip file. path contain the full pathname (by example, + on a Windows NT computer "c:\\test\\zlib114.zip" or on an Unix computer + "zlib/zlib114.zip". + If the zipfile cannot be opened (file doesn't exist or in not valid), the + return value is NULL. + Else, the return value is a unzFile Handle, usable with other function + of this unzip package. +*/ +local unzFile unzOpenInternal(const void *path, + zlib_filefunc64_32_def* pzlib_filefunc64_32_def, + int is64bitOpenFunction) { + unz64_s us; + unz64_s *s; + ZPOS64_T central_pos; + uLong uL; + + uLong number_disk; /* number of the current disk, used for + spanning ZIP, unsupported, always 0*/ + uLong number_disk_with_CD; /* number the disk with central dir, used + for spanning ZIP, unsupported, always 0*/ + ZPOS64_T number_entry_CD; /* total number of entries in + the central dir + (same than number_entry on nospan) */ + + int err=UNZ_OK; + + if (unz_copyright[0]!=' ') + return NULL; + + us.z_filefunc.zseek32_file = NULL; + us.z_filefunc.ztell32_file = NULL; + if (pzlib_filefunc64_32_def==NULL) + fill_fopen64_filefunc(&us.z_filefunc.zfile_func64); + else + us.z_filefunc = *pzlib_filefunc64_32_def; + us.is64bitOpenFunction = is64bitOpenFunction; + + + + us.filestream = ZOPEN64(us.z_filefunc, + path, + ZLIB_FILEFUNC_MODE_READ | + ZLIB_FILEFUNC_MODE_EXISTING); + if (us.filestream==NULL) + return NULL; + + central_pos = unz64local_SearchCentralDir64(&us.z_filefunc,us.filestream); + if (central_pos!=CENTRALDIRINVALID) + { + uLong uS; + ZPOS64_T uL64; + + us.isZip64 = 1; + + if (ZSEEK64(us.z_filefunc, us.filestream, + central_pos,ZLIB_FILEFUNC_SEEK_SET)!=0) + err=UNZ_ERRNO; + + /* the signature, already checked */ + if (unz64local_getLong(&us.z_filefunc, us.filestream,&uL)!=UNZ_OK) + err=UNZ_ERRNO; + + /* size of zip64 end of central directory record */ + if (unz64local_getLong64(&us.z_filefunc, us.filestream,&uL64)!=UNZ_OK) + err=UNZ_ERRNO; + + /* version made by */ + if (unz64local_getShort(&us.z_filefunc, us.filestream,&uS)!=UNZ_OK) + err=UNZ_ERRNO; + + /* version needed to extract */ + if (unz64local_getShort(&us.z_filefunc, us.filestream,&uS)!=UNZ_OK) + err=UNZ_ERRNO; + + /* number of this disk */ + if (unz64local_getLong(&us.z_filefunc, us.filestream,&number_disk)!=UNZ_OK) + err=UNZ_ERRNO; + + /* number of the disk with the start of the central directory */ + if (unz64local_getLong(&us.z_filefunc, us.filestream,&number_disk_with_CD)!=UNZ_OK) + err=UNZ_ERRNO; + + /* total number of entries in the central directory on this disk */ + if (unz64local_getLong64(&us.z_filefunc, us.filestream,&us.gi.number_entry)!=UNZ_OK) + err=UNZ_ERRNO; + + /* total number of entries in the central directory */ + if (unz64local_getLong64(&us.z_filefunc, us.filestream,&number_entry_CD)!=UNZ_OK) + err=UNZ_ERRNO; + + if ((number_entry_CD!=us.gi.number_entry) || + (number_disk_with_CD!=0) || + (number_disk!=0)) + err=UNZ_BADZIPFILE; + + /* size of the central directory */ + if (unz64local_getLong64(&us.z_filefunc, us.filestream,&us.size_central_dir)!=UNZ_OK) + err=UNZ_ERRNO; + + /* offset of start of central directory with respect to the + starting disk number */ + if (unz64local_getLong64(&us.z_filefunc, us.filestream,&us.offset_central_dir)!=UNZ_OK) + err=UNZ_ERRNO; + + us.gi.size_comment = 0; + } + else + { + central_pos = unz64local_SearchCentralDir(&us.z_filefunc,us.filestream); + if (central_pos==CENTRALDIRINVALID) + err=UNZ_ERRNO; + + us.isZip64 = 0; + + if (ZSEEK64(us.z_filefunc, us.filestream, + central_pos,ZLIB_FILEFUNC_SEEK_SET)!=0) + err=UNZ_ERRNO; + + /* the signature, already checked */ + if (unz64local_getLong(&us.z_filefunc, us.filestream,&uL)!=UNZ_OK) + err=UNZ_ERRNO; + + /* number of this disk */ + if (unz64local_getShort(&us.z_filefunc, us.filestream,&number_disk)!=UNZ_OK) + err=UNZ_ERRNO; + + /* number of the disk with the start of the central directory */ + if (unz64local_getShort(&us.z_filefunc, us.filestream,&number_disk_with_CD)!=UNZ_OK) + err=UNZ_ERRNO; + + /* total number of entries in the central dir on this disk */ + if (unz64local_getShort(&us.z_filefunc, us.filestream,&uL)!=UNZ_OK) + err=UNZ_ERRNO; + us.gi.number_entry = uL; + + /* total number of entries in the central dir */ + if (unz64local_getShort(&us.z_filefunc, us.filestream,&uL)!=UNZ_OK) + err=UNZ_ERRNO; + number_entry_CD = uL; + + if ((number_entry_CD!=us.gi.number_entry) || + (number_disk_with_CD!=0) || + (number_disk!=0)) + err=UNZ_BADZIPFILE; + + /* size of the central directory */ + if (unz64local_getLong(&us.z_filefunc, us.filestream,&uL)!=UNZ_OK) + err=UNZ_ERRNO; + us.size_central_dir = uL; + + /* offset of start of central directory with respect to the + starting disk number */ + if (unz64local_getLong(&us.z_filefunc, us.filestream,&uL)!=UNZ_OK) + err=UNZ_ERRNO; + us.offset_central_dir = uL; + + /* zipfile comment length */ + if (unz64local_getShort(&us.z_filefunc, us.filestream,&us.gi.size_comment)!=UNZ_OK) + err=UNZ_ERRNO; + } + + if ((central_pospfile_in_zip_read!=NULL) + unzCloseCurrentFile(file); + + ZCLOSE64(s->z_filefunc, s->filestream); + free(s); + return UNZ_OK; +} + + +/* + Write info about the ZipFile in the *pglobal_info structure. + No preparation of the structure is needed + return UNZ_OK if there is no problem. */ +extern int ZEXPORT unzGetGlobalInfo64(unzFile file, unz_global_info64* pglobal_info) { + unz64_s* s; + if (file==NULL) + return UNZ_PARAMERROR; + s=(unz64_s*)file; + *pglobal_info=s->gi; + return UNZ_OK; +} + +extern int ZEXPORT unzGetGlobalInfo(unzFile file, unz_global_info* pglobal_info32) { + unz64_s* s; + if (file==NULL) + return UNZ_PARAMERROR; + s=(unz64_s*)file; + /* to do : check if number_entry is not truncated */ + pglobal_info32->number_entry = (uLong)s->gi.number_entry; + pglobal_info32->size_comment = s->gi.size_comment; + return UNZ_OK; +} +/* + Translate date/time from Dos format to tm_unz (readable more easily) +*/ +local void unz64local_DosDateToTmuDate(ZPOS64_T ulDosDate, tm_unz* ptm) { + ZPOS64_T uDate; + uDate = (ZPOS64_T)(ulDosDate>>16); + ptm->tm_mday = (int)(uDate&0x1f) ; + ptm->tm_mon = (int)((((uDate)&0x1E0)/0x20)-1) ; + ptm->tm_year = (int)(((uDate&0x0FE00)/0x0200)+1980) ; + + ptm->tm_hour = (int) ((ulDosDate &0xF800)/0x800); + ptm->tm_min = (int) ((ulDosDate&0x7E0)/0x20) ; + ptm->tm_sec = (int) (2*(ulDosDate&0x1f)) ; +} + +/* + Get Info about the current file in the zipfile, with internal only info +*/ +local int unz64local_GetCurrentFileInfoInternal(unzFile file, + unz_file_info64 *pfile_info, + unz_file_info64_internal + *pfile_info_internal, + char *szFileName, + uLong fileNameBufferSize, + void *extraField, + uLong extraFieldBufferSize, + char *szComment, + uLong commentBufferSize) { + unz64_s* s; + unz_file_info64 file_info; + unz_file_info64_internal file_info_internal; + int err=UNZ_OK; + uLong uMagic; + long lSeek=0; + uLong uL; + + if (file==NULL) + return UNZ_PARAMERROR; + s=(unz64_s*)file; + if (ZSEEK64(s->z_filefunc, s->filestream, + s->pos_in_central_dir+s->byte_before_the_zipfile, + ZLIB_FILEFUNC_SEEK_SET)!=0) + err=UNZ_ERRNO; + + + /* we check the magic */ + if (err==UNZ_OK) + { + if (unz64local_getLong(&s->z_filefunc, s->filestream,&uMagic) != UNZ_OK) + err=UNZ_ERRNO; + else if (uMagic!=0x02014b50) + err=UNZ_BADZIPFILE; + } + + if (unz64local_getShort(&s->z_filefunc, s->filestream,&file_info.version) != UNZ_OK) + err=UNZ_ERRNO; + + if (unz64local_getShort(&s->z_filefunc, s->filestream,&file_info.version_needed) != UNZ_OK) + err=UNZ_ERRNO; + + if (unz64local_getShort(&s->z_filefunc, s->filestream,&file_info.flag) != UNZ_OK) + err=UNZ_ERRNO; + + if (unz64local_getShort(&s->z_filefunc, s->filestream,&file_info.compression_method) != UNZ_OK) + err=UNZ_ERRNO; + + if (unz64local_getLong(&s->z_filefunc, s->filestream,&file_info.dosDate) != UNZ_OK) + err=UNZ_ERRNO; + + unz64local_DosDateToTmuDate(file_info.dosDate,&file_info.tmu_date); + + if (unz64local_getLong(&s->z_filefunc, s->filestream,&file_info.crc) != UNZ_OK) + err=UNZ_ERRNO; + + if (unz64local_getLong(&s->z_filefunc, s->filestream,&uL) != UNZ_OK) + err=UNZ_ERRNO; + file_info.compressed_size = uL; + + if (unz64local_getLong(&s->z_filefunc, s->filestream,&uL) != UNZ_OK) + err=UNZ_ERRNO; + file_info.uncompressed_size = uL; + + if (unz64local_getShort(&s->z_filefunc, s->filestream,&file_info.size_filename) != UNZ_OK) + err=UNZ_ERRNO; + + if (unz64local_getShort(&s->z_filefunc, s->filestream,&file_info.size_file_extra) != UNZ_OK) + err=UNZ_ERRNO; + + if (unz64local_getShort(&s->z_filefunc, s->filestream,&file_info.size_file_comment) != UNZ_OK) + err=UNZ_ERRNO; + + if (unz64local_getShort(&s->z_filefunc, s->filestream,&file_info.disk_num_start) != UNZ_OK) + err=UNZ_ERRNO; + + if (unz64local_getShort(&s->z_filefunc, s->filestream,&file_info.internal_fa) != UNZ_OK) + err=UNZ_ERRNO; + + if (unz64local_getLong(&s->z_filefunc, s->filestream,&file_info.external_fa) != UNZ_OK) + err=UNZ_ERRNO; + + // relative offset of local header + if (unz64local_getLong(&s->z_filefunc, s->filestream,&uL) != UNZ_OK) + err=UNZ_ERRNO; + file_info_internal.offset_curfile = uL; + + lSeek+=file_info.size_filename; + if ((err==UNZ_OK) && (szFileName!=NULL)) + { + uLong uSizeRead ; + if (file_info.size_filename0) && (fileNameBufferSize>0)) + if (ZREAD64(s->z_filefunc, s->filestream,szFileName,uSizeRead)!=uSizeRead) + err=UNZ_ERRNO; + lSeek -= uSizeRead; + } + + // Read extrafield + if ((err==UNZ_OK) && (extraField!=NULL)) + { + ZPOS64_T uSizeRead ; + if (file_info.size_file_extraz_filefunc, s->filestream,(ZPOS64_T)lSeek,ZLIB_FILEFUNC_SEEK_CUR)==0) + lSeek=0; + else + err=UNZ_ERRNO; + } + + if ((file_info.size_file_extra>0) && (extraFieldBufferSize>0)) + if (ZREAD64(s->z_filefunc, s->filestream,extraField,(uLong)uSizeRead)!=uSizeRead) + err=UNZ_ERRNO; + + lSeek += file_info.size_file_extra - (uLong)uSizeRead; + } + else + lSeek += file_info.size_file_extra; + + + if ((err==UNZ_OK) && (file_info.size_file_extra != 0)) + { + uLong acc = 0; + + // since lSeek now points to after the extra field we need to move back + lSeek -= file_info.size_file_extra; + + if (lSeek!=0) + { + if (ZSEEK64(s->z_filefunc, s->filestream,(ZPOS64_T)lSeek,ZLIB_FILEFUNC_SEEK_CUR)==0) + lSeek=0; + else + err=UNZ_ERRNO; + } + + while(acc < file_info.size_file_extra) + { + uLong headerId; + uLong dataSize; + + if (unz64local_getShort(&s->z_filefunc, s->filestream,&headerId) != UNZ_OK) + err=UNZ_ERRNO; + + if (unz64local_getShort(&s->z_filefunc, s->filestream,&dataSize) != UNZ_OK) + err=UNZ_ERRNO; + + /* ZIP64 extra fields */ + if (headerId == 0x0001) + { + if(file_info.uncompressed_size == MAXU32) + { + if (unz64local_getLong64(&s->z_filefunc, s->filestream,&file_info.uncompressed_size) != UNZ_OK) + err=UNZ_ERRNO; + } + + if(file_info.compressed_size == MAXU32) + { + if (unz64local_getLong64(&s->z_filefunc, s->filestream,&file_info.compressed_size) != UNZ_OK) + err=UNZ_ERRNO; + } + + if(file_info_internal.offset_curfile == MAXU32) + { + /* Relative Header offset */ + if (unz64local_getLong64(&s->z_filefunc, s->filestream,&file_info_internal.offset_curfile) != UNZ_OK) + err=UNZ_ERRNO; + } + + if(file_info.disk_num_start == 0xffff) + { + /* Disk Start Number */ + if (unz64local_getLong(&s->z_filefunc, s->filestream,&file_info.disk_num_start) != UNZ_OK) + err=UNZ_ERRNO; + } + + } + else + { + if (ZSEEK64(s->z_filefunc, s->filestream,dataSize,ZLIB_FILEFUNC_SEEK_CUR)!=0) + err=UNZ_ERRNO; + } + + acc += 2 + 2 + dataSize; + } + } + + if ((err==UNZ_OK) && (szComment!=NULL)) + { + uLong uSizeRead ; + if (file_info.size_file_commentz_filefunc, s->filestream,(ZPOS64_T)lSeek,ZLIB_FILEFUNC_SEEK_CUR)==0) + lSeek=0; + else + err=UNZ_ERRNO; + } + + if ((file_info.size_file_comment>0) && (commentBufferSize>0)) + if (ZREAD64(s->z_filefunc, s->filestream,szComment,uSizeRead)!=uSizeRead) + err=UNZ_ERRNO; + lSeek+=file_info.size_file_comment - uSizeRead; + } + else + lSeek+=file_info.size_file_comment; + + + if ((err==UNZ_OK) && (pfile_info!=NULL)) + *pfile_info=file_info; + + if ((err==UNZ_OK) && (pfile_info_internal!=NULL)) + *pfile_info_internal=file_info_internal; + + return err; +} + + + +/* + Write info about the ZipFile in the *pglobal_info structure. + No preparation of the structure is needed + return UNZ_OK if there is no problem. +*/ +extern int ZEXPORT unzGetCurrentFileInfo64(unzFile file, + unz_file_info64 * pfile_info, + char * szFileName, uLong fileNameBufferSize, + void *extraField, uLong extraFieldBufferSize, + char* szComment, uLong commentBufferSize) { + return unz64local_GetCurrentFileInfoInternal(file,pfile_info,NULL, + szFileName,fileNameBufferSize, + extraField,extraFieldBufferSize, + szComment,commentBufferSize); +} + +extern int ZEXPORT unzGetCurrentFileInfo(unzFile file, + unz_file_info * pfile_info, + char * szFileName, uLong fileNameBufferSize, + void *extraField, uLong extraFieldBufferSize, + char* szComment, uLong commentBufferSize) { + int err; + unz_file_info64 file_info64; + err = unz64local_GetCurrentFileInfoInternal(file,&file_info64,NULL, + szFileName,fileNameBufferSize, + extraField,extraFieldBufferSize, + szComment,commentBufferSize); + if ((err==UNZ_OK) && (pfile_info != NULL)) + { + pfile_info->version = file_info64.version; + pfile_info->version_needed = file_info64.version_needed; + pfile_info->flag = file_info64.flag; + pfile_info->compression_method = file_info64.compression_method; + pfile_info->dosDate = file_info64.dosDate; + pfile_info->crc = file_info64.crc; + + pfile_info->size_filename = file_info64.size_filename; + pfile_info->size_file_extra = file_info64.size_file_extra; + pfile_info->size_file_comment = file_info64.size_file_comment; + + pfile_info->disk_num_start = file_info64.disk_num_start; + pfile_info->internal_fa = file_info64.internal_fa; + pfile_info->external_fa = file_info64.external_fa; + + pfile_info->tmu_date = file_info64.tmu_date; + + + pfile_info->compressed_size = (uLong)file_info64.compressed_size; + pfile_info->uncompressed_size = (uLong)file_info64.uncompressed_size; + + } + return err; +} +/* + Set the current file of the zipfile to the first file. + return UNZ_OK if there is no problem +*/ +extern int ZEXPORT unzGoToFirstFile(unzFile file) { + int err=UNZ_OK; + unz64_s* s; + if (file==NULL) + return UNZ_PARAMERROR; + s=(unz64_s*)file; + s->pos_in_central_dir=s->offset_central_dir; + s->num_file=0; + err=unz64local_GetCurrentFileInfoInternal(file,&s->cur_file_info, + &s->cur_file_info_internal, + NULL,0,NULL,0,NULL,0); + s->current_file_ok = (err == UNZ_OK); + return err; +} + +/* + Set the current file of the zipfile to the next file. + return UNZ_OK if there is no problem + return UNZ_END_OF_LIST_OF_FILE if the actual file was the latest. +*/ +extern int ZEXPORT unzGoToNextFile(unzFile file) { + unz64_s* s; + int err; + + if (file==NULL) + return UNZ_PARAMERROR; + s=(unz64_s*)file; + if (!s->current_file_ok) + return UNZ_END_OF_LIST_OF_FILE; + if (s->gi.number_entry != 0xffff) /* 2^16 files overflow hack */ + if (s->num_file+1==s->gi.number_entry) + return UNZ_END_OF_LIST_OF_FILE; + + s->pos_in_central_dir += SIZECENTRALDIRITEM + s->cur_file_info.size_filename + + s->cur_file_info.size_file_extra + s->cur_file_info.size_file_comment ; + s->num_file++; + err = unz64local_GetCurrentFileInfoInternal(file,&s->cur_file_info, + &s->cur_file_info_internal, + NULL,0,NULL,0,NULL,0); + s->current_file_ok = (err == UNZ_OK); + return err; +} + + +/* + Try locate the file szFileName in the zipfile. + For the iCaseSensitivity signification, see unzStringFileNameCompare + + return value : + UNZ_OK if the file is found. It becomes the current file. + UNZ_END_OF_LIST_OF_FILE if the file is not found +*/ +extern int ZEXPORT unzLocateFile(unzFile file, const char *szFileName, int iCaseSensitivity) { + unz64_s* s; + int err; + + /* We remember the 'current' position in the file so that we can jump + * back there if we fail. + */ + unz_file_info64 cur_file_infoSaved; + unz_file_info64_internal cur_file_info_internalSaved; + ZPOS64_T num_fileSaved; + ZPOS64_T pos_in_central_dirSaved; + + + if (file==NULL) + return UNZ_PARAMERROR; + + if (strlen(szFileName)>=UNZ_MAXFILENAMEINZIP) + return UNZ_PARAMERROR; + + s=(unz64_s*)file; + if (!s->current_file_ok) + return UNZ_END_OF_LIST_OF_FILE; + + /* Save the current state */ + num_fileSaved = s->num_file; + pos_in_central_dirSaved = s->pos_in_central_dir; + cur_file_infoSaved = s->cur_file_info; + cur_file_info_internalSaved = s->cur_file_info_internal; + + err = unzGoToFirstFile(file); + + while (err == UNZ_OK) + { + char szCurrentFileName[UNZ_MAXFILENAMEINZIP+1]; + err = unzGetCurrentFileInfo64(file,NULL, + szCurrentFileName,sizeof(szCurrentFileName)-1, + NULL,0,NULL,0); + if (err == UNZ_OK) + { + if (unzStringFileNameCompare(szCurrentFileName, + szFileName,iCaseSensitivity)==0) + return UNZ_OK; + err = unzGoToNextFile(file); + } + } + + /* We failed, so restore the state of the 'current file' to where we + * were. + */ + s->num_file = num_fileSaved ; + s->pos_in_central_dir = pos_in_central_dirSaved ; + s->cur_file_info = cur_file_infoSaved; + s->cur_file_info_internal = cur_file_info_internalSaved; + return err; +} + + +/* +/////////////////////////////////////////// +// Contributed by Ryan Haksi (mailto://cryogen@infoserve.net) +// I need random access +// +// Further optimization could be realized by adding an ability +// to cache the directory in memory. The goal being a single +// comprehensive file read to put the file I need in a memory. +*/ + +/* +typedef struct unz_file_pos_s +{ + ZPOS64_T pos_in_zip_directory; // offset in file + ZPOS64_T num_of_file; // # of file +} unz_file_pos; +*/ + +extern int ZEXPORT unzGetFilePos64(unzFile file, unz64_file_pos* file_pos) { + unz64_s* s; + + if (file==NULL || file_pos==NULL) + return UNZ_PARAMERROR; + s=(unz64_s*)file; + if (!s->current_file_ok) + return UNZ_END_OF_LIST_OF_FILE; + + file_pos->pos_in_zip_directory = s->pos_in_central_dir; + file_pos->num_of_file = s->num_file; + + return UNZ_OK; +} + +extern int ZEXPORT unzGetFilePos(unzFile file, unz_file_pos* file_pos) { + unz64_file_pos file_pos64; + int err = unzGetFilePos64(file,&file_pos64); + if (err==UNZ_OK) + { + file_pos->pos_in_zip_directory = (uLong)file_pos64.pos_in_zip_directory; + file_pos->num_of_file = (uLong)file_pos64.num_of_file; + } + return err; +} + +extern int ZEXPORT unzGoToFilePos64(unzFile file, const unz64_file_pos* file_pos) { + unz64_s* s; + int err; + + if (file==NULL || file_pos==NULL) + return UNZ_PARAMERROR; + s=(unz64_s*)file; + + /* jump to the right spot */ + s->pos_in_central_dir = file_pos->pos_in_zip_directory; + s->num_file = file_pos->num_of_file; + + /* set the current file */ + err = unz64local_GetCurrentFileInfoInternal(file,&s->cur_file_info, + &s->cur_file_info_internal, + NULL,0,NULL,0,NULL,0); + /* return results */ + s->current_file_ok = (err == UNZ_OK); + return err; +} + +extern int ZEXPORT unzGoToFilePos(unzFile file, unz_file_pos* file_pos) { + unz64_file_pos file_pos64; + if (file_pos == NULL) + return UNZ_PARAMERROR; + + file_pos64.pos_in_zip_directory = file_pos->pos_in_zip_directory; + file_pos64.num_of_file = file_pos->num_of_file; + return unzGoToFilePos64(file,&file_pos64); +} + +/* +// Unzip Helper Functions - should be here? +/////////////////////////////////////////// +*/ + +/* + Read the local header of the current zipfile + Check the coherency of the local header and info in the end of central + directory about this file + store in *piSizeVar the size of extra info in local header + (filename and size of extra field data) +*/ +local int unz64local_CheckCurrentFileCoherencyHeader(unz64_s* s, uInt* piSizeVar, + ZPOS64_T * poffset_local_extrafield, + uInt * psize_local_extrafield) { + uLong uMagic,uData,uFlags; + uLong size_filename; + uLong size_extra_field; + int err=UNZ_OK; + + *piSizeVar = 0; + *poffset_local_extrafield = 0; + *psize_local_extrafield = 0; + + if (ZSEEK64(s->z_filefunc, s->filestream,s->cur_file_info_internal.offset_curfile + + s->byte_before_the_zipfile,ZLIB_FILEFUNC_SEEK_SET)!=0) + return UNZ_ERRNO; + + + if (err==UNZ_OK) + { + if (unz64local_getLong(&s->z_filefunc, s->filestream,&uMagic) != UNZ_OK) + err=UNZ_ERRNO; + else if (uMagic!=0x04034b50) + err=UNZ_BADZIPFILE; + } + + if (unz64local_getShort(&s->z_filefunc, s->filestream,&uData) != UNZ_OK) + err=UNZ_ERRNO; +/* + else if ((err==UNZ_OK) && (uData!=s->cur_file_info.wVersion)) + err=UNZ_BADZIPFILE; +*/ + if (unz64local_getShort(&s->z_filefunc, s->filestream,&uFlags) != UNZ_OK) + err=UNZ_ERRNO; + + if (unz64local_getShort(&s->z_filefunc, s->filestream,&uData) != UNZ_OK) + err=UNZ_ERRNO; + else if ((err==UNZ_OK) && (uData!=s->cur_file_info.compression_method)) + err=UNZ_BADZIPFILE; + + if ((err==UNZ_OK) && (s->cur_file_info.compression_method!=0) && +/* #ifdef HAVE_BZIP2 */ + (s->cur_file_info.compression_method!=Z_BZIP2ED) && +/* #endif */ + (s->cur_file_info.compression_method!=Z_DEFLATED)) + err=UNZ_BADZIPFILE; + + if (unz64local_getLong(&s->z_filefunc, s->filestream,&uData) != UNZ_OK) /* date/time */ + err=UNZ_ERRNO; + + if (unz64local_getLong(&s->z_filefunc, s->filestream,&uData) != UNZ_OK) /* crc */ + err=UNZ_ERRNO; + else if ((err==UNZ_OK) && (uData!=s->cur_file_info.crc) && ((uFlags & 8)==0)) + err=UNZ_BADZIPFILE; + + if (unz64local_getLong(&s->z_filefunc, s->filestream,&uData) != UNZ_OK) /* size compr */ + err=UNZ_ERRNO; + else if (uData != 0xFFFFFFFF && (err==UNZ_OK) && (uData!=s->cur_file_info.compressed_size) && ((uFlags & 8)==0)) + err=UNZ_BADZIPFILE; + + if (unz64local_getLong(&s->z_filefunc, s->filestream,&uData) != UNZ_OK) /* size uncompr */ + err=UNZ_ERRNO; + else if (uData != 0xFFFFFFFF && (err==UNZ_OK) && (uData!=s->cur_file_info.uncompressed_size) && ((uFlags & 8)==0)) + err=UNZ_BADZIPFILE; + + if (unz64local_getShort(&s->z_filefunc, s->filestream,&size_filename) != UNZ_OK) + err=UNZ_ERRNO; + else if ((err==UNZ_OK) && (size_filename!=s->cur_file_info.size_filename)) + err=UNZ_BADZIPFILE; + + *piSizeVar += (uInt)size_filename; + + if (unz64local_getShort(&s->z_filefunc, s->filestream,&size_extra_field) != UNZ_OK) + err=UNZ_ERRNO; + *poffset_local_extrafield= s->cur_file_info_internal.offset_curfile + + SIZEZIPLOCALHEADER + size_filename; + *psize_local_extrafield = (uInt)size_extra_field; + + *piSizeVar += (uInt)size_extra_field; + + return err; +} + +/* + Open for reading data the current file in the zipfile. + If there is no error and the file is opened, the return value is UNZ_OK. +*/ +extern int ZEXPORT unzOpenCurrentFile3(unzFile file, int* method, + int* level, int raw, const char* password) { + int err=UNZ_OK; + uInt iSizeVar; + unz64_s* s; + file_in_zip64_read_info_s* pfile_in_zip_read_info; + ZPOS64_T offset_local_extrafield; /* offset of the local extra field */ + uInt size_local_extrafield; /* size of the local extra field */ +# ifndef NOUNCRYPT + char source[12]; +# else + if (password != NULL) + return UNZ_PARAMERROR; +# endif + + if (file==NULL) + return UNZ_PARAMERROR; + s=(unz64_s*)file; + if (!s->current_file_ok) + return UNZ_PARAMERROR; + + if (s->pfile_in_zip_read != NULL) + unzCloseCurrentFile(file); + + if (unz64local_CheckCurrentFileCoherencyHeader(s,&iSizeVar, &offset_local_extrafield,&size_local_extrafield)!=UNZ_OK) + return UNZ_BADZIPFILE; + + pfile_in_zip_read_info = (file_in_zip64_read_info_s*)ALLOC(sizeof(file_in_zip64_read_info_s)); + if (pfile_in_zip_read_info==NULL) + return UNZ_INTERNALERROR; + + pfile_in_zip_read_info->read_buffer=(char*)ALLOC(UNZ_BUFSIZE); + pfile_in_zip_read_info->offset_local_extrafield = offset_local_extrafield; + pfile_in_zip_read_info->size_local_extrafield = size_local_extrafield; + pfile_in_zip_read_info->pos_local_extrafield=0; + pfile_in_zip_read_info->raw=raw; + + if (pfile_in_zip_read_info->read_buffer==NULL) + { + free(pfile_in_zip_read_info); + return UNZ_INTERNALERROR; + } + + pfile_in_zip_read_info->stream_initialised=0; + + if (method!=NULL) + *method = (int)s->cur_file_info.compression_method; + + if (level!=NULL) + { + *level = 6; + switch (s->cur_file_info.flag & 0x06) + { + case 6 : *level = 1; break; + case 4 : *level = 2; break; + case 2 : *level = 9; break; + } + } + + if ((s->cur_file_info.compression_method!=0) && +/* #ifdef HAVE_BZIP2 */ + (s->cur_file_info.compression_method!=Z_BZIP2ED) && +/* #endif */ + (s->cur_file_info.compression_method!=Z_DEFLATED)) + + err=UNZ_BADZIPFILE; + + pfile_in_zip_read_info->crc32_wait=s->cur_file_info.crc; + pfile_in_zip_read_info->crc32=0; + pfile_in_zip_read_info->total_out_64=0; + pfile_in_zip_read_info->compression_method = s->cur_file_info.compression_method; + pfile_in_zip_read_info->filestream=s->filestream; + pfile_in_zip_read_info->z_filefunc=s->z_filefunc; + pfile_in_zip_read_info->byte_before_the_zipfile=s->byte_before_the_zipfile; + + pfile_in_zip_read_info->stream.total_out = 0; + + if ((s->cur_file_info.compression_method==Z_BZIP2ED) && (!raw)) + { +#ifdef HAVE_BZIP2 + pfile_in_zip_read_info->bstream.bzalloc = (void *(*) (void *, int, int))0; + pfile_in_zip_read_info->bstream.bzfree = (free_func)0; + pfile_in_zip_read_info->bstream.opaque = (voidpf)0; + pfile_in_zip_read_info->bstream.state = (voidpf)0; + + pfile_in_zip_read_info->stream.zalloc = (alloc_func)0; + pfile_in_zip_read_info->stream.zfree = (free_func)0; + pfile_in_zip_read_info->stream.opaque = (voidpf)0; + pfile_in_zip_read_info->stream.next_in = (voidpf)0; + pfile_in_zip_read_info->stream.avail_in = 0; + + err=BZ2_bzDecompressInit(&pfile_in_zip_read_info->bstream, 0, 0); + if (err == Z_OK) + pfile_in_zip_read_info->stream_initialised=Z_BZIP2ED; + else + { + free(pfile_in_zip_read_info->read_buffer); + free(pfile_in_zip_read_info); + return err; + } +#else + pfile_in_zip_read_info->raw=1; +#endif + } + else if ((s->cur_file_info.compression_method==Z_DEFLATED) && (!raw)) + { + pfile_in_zip_read_info->stream.zalloc = (alloc_func)0; + pfile_in_zip_read_info->stream.zfree = (free_func)0; + pfile_in_zip_read_info->stream.opaque = (voidpf)0; + pfile_in_zip_read_info->stream.next_in = 0; + pfile_in_zip_read_info->stream.avail_in = 0; + + err=inflateInit2(&pfile_in_zip_read_info->stream, -MAX_WBITS); + if (err == Z_OK) + pfile_in_zip_read_info->stream_initialised=Z_DEFLATED; + else + { + free(pfile_in_zip_read_info->read_buffer); + free(pfile_in_zip_read_info); + return err; + } + /* windowBits is passed < 0 to tell that there is no zlib header. + * Note that in this case inflate *requires* an extra "dummy" byte + * after the compressed stream in order to complete decompression and + * return Z_STREAM_END. + * In unzip, i don't wait absolutely Z_STREAM_END because I known the + * size of both compressed and uncompressed data + */ + } + pfile_in_zip_read_info->rest_read_compressed = + s->cur_file_info.compressed_size ; + pfile_in_zip_read_info->rest_read_uncompressed = + s->cur_file_info.uncompressed_size ; + + + pfile_in_zip_read_info->pos_in_zipfile = + s->cur_file_info_internal.offset_curfile + SIZEZIPLOCALHEADER + + iSizeVar; + + pfile_in_zip_read_info->stream.avail_in = (uInt)0; + + s->pfile_in_zip_read = pfile_in_zip_read_info; + s->encrypted = 0; + +# ifndef NOUNCRYPT + if (password != NULL) + { + int i; + s->pcrc_32_tab = get_crc_table(); + init_keys(password,s->keys,s->pcrc_32_tab); + if (ZSEEK64(s->z_filefunc, s->filestream, + s->pfile_in_zip_read->pos_in_zipfile + + s->pfile_in_zip_read->byte_before_the_zipfile, + SEEK_SET)!=0) + return UNZ_INTERNALERROR; + if(ZREAD64(s->z_filefunc, s->filestream,source, 12)<12) + return UNZ_INTERNALERROR; + + for (i = 0; i<12; i++) + zdecode(s->keys,s->pcrc_32_tab,source[i]); + + s->pfile_in_zip_read->pos_in_zipfile+=12; + s->encrypted=1; + } +# endif + + + return UNZ_OK; +} + +extern int ZEXPORT unzOpenCurrentFile(unzFile file) { + return unzOpenCurrentFile3(file, NULL, NULL, 0, NULL); +} + +extern int ZEXPORT unzOpenCurrentFilePassword(unzFile file, const char* password) { + return unzOpenCurrentFile3(file, NULL, NULL, 0, password); +} + +extern int ZEXPORT unzOpenCurrentFile2(unzFile file, int* method, int* level, int raw) { + return unzOpenCurrentFile3(file, method, level, raw, NULL); +} + +/** Addition for GDAL : START */ + +extern ZPOS64_T ZEXPORT unzGetCurrentFileZStreamPos64(unzFile file) { + unz64_s* s; + file_in_zip64_read_info_s* pfile_in_zip_read_info; + s=(unz64_s*)file; + if (file==NULL) + return 0; //UNZ_PARAMERROR; + pfile_in_zip_read_info=s->pfile_in_zip_read; + if (pfile_in_zip_read_info==NULL) + return 0; //UNZ_PARAMERROR; + return pfile_in_zip_read_info->pos_in_zipfile + + pfile_in_zip_read_info->byte_before_the_zipfile; +} + +/** Addition for GDAL : END */ + +/* + Read bytes from the current file. + buf contain buffer where data must be copied + len the size of buf. + + return the number of byte copied if some bytes are copied + return 0 if the end of file was reached + return <0 with error code if there is an error + (UNZ_ERRNO for IO error, or zLib error for uncompress error) +*/ +extern int ZEXPORT unzReadCurrentFile(unzFile file, voidp buf, unsigned len) { + int err=UNZ_OK; + uInt iRead = 0; + unz64_s* s; + file_in_zip64_read_info_s* pfile_in_zip_read_info; + if (file==NULL) + return UNZ_PARAMERROR; + s=(unz64_s*)file; + pfile_in_zip_read_info=s->pfile_in_zip_read; + + if (pfile_in_zip_read_info==NULL) + return UNZ_PARAMERROR; + + + if (pfile_in_zip_read_info->read_buffer == NULL) + return UNZ_END_OF_LIST_OF_FILE; + if (len==0) + return 0; + + pfile_in_zip_read_info->stream.next_out = (Bytef*)buf; + + pfile_in_zip_read_info->stream.avail_out = (uInt)len; + + if ((len>pfile_in_zip_read_info->rest_read_uncompressed) && + (!(pfile_in_zip_read_info->raw))) + pfile_in_zip_read_info->stream.avail_out = + (uInt)pfile_in_zip_read_info->rest_read_uncompressed; + + if ((len>pfile_in_zip_read_info->rest_read_compressed+ + pfile_in_zip_read_info->stream.avail_in) && + (pfile_in_zip_read_info->raw)) + pfile_in_zip_read_info->stream.avail_out = + (uInt)pfile_in_zip_read_info->rest_read_compressed+ + pfile_in_zip_read_info->stream.avail_in; + + while (pfile_in_zip_read_info->stream.avail_out>0) + { + if ((pfile_in_zip_read_info->stream.avail_in==0) && + (pfile_in_zip_read_info->rest_read_compressed>0)) + { + uInt uReadThis = UNZ_BUFSIZE; + if (pfile_in_zip_read_info->rest_read_compressedrest_read_compressed; + if (uReadThis == 0) + return UNZ_EOF; + if (ZSEEK64(pfile_in_zip_read_info->z_filefunc, + pfile_in_zip_read_info->filestream, + pfile_in_zip_read_info->pos_in_zipfile + + pfile_in_zip_read_info->byte_before_the_zipfile, + ZLIB_FILEFUNC_SEEK_SET)!=0) + return UNZ_ERRNO; + if (ZREAD64(pfile_in_zip_read_info->z_filefunc, + pfile_in_zip_read_info->filestream, + pfile_in_zip_read_info->read_buffer, + uReadThis)!=uReadThis) + return UNZ_ERRNO; + + +# ifndef NOUNCRYPT + if(s->encrypted) + { + uInt i; + for(i=0;iread_buffer[i] = + zdecode(s->keys,s->pcrc_32_tab, + pfile_in_zip_read_info->read_buffer[i]); + } +# endif + + + pfile_in_zip_read_info->pos_in_zipfile += uReadThis; + + pfile_in_zip_read_info->rest_read_compressed-=uReadThis; + + pfile_in_zip_read_info->stream.next_in = + (Bytef*)pfile_in_zip_read_info->read_buffer; + pfile_in_zip_read_info->stream.avail_in = (uInt)uReadThis; + } + + if ((pfile_in_zip_read_info->compression_method==0) || (pfile_in_zip_read_info->raw)) + { + uInt uDoCopy,i ; + + if ((pfile_in_zip_read_info->stream.avail_in == 0) && + (pfile_in_zip_read_info->rest_read_compressed == 0)) + return (iRead==0) ? UNZ_EOF : (int)iRead; + + if (pfile_in_zip_read_info->stream.avail_out < + pfile_in_zip_read_info->stream.avail_in) + uDoCopy = pfile_in_zip_read_info->stream.avail_out ; + else + uDoCopy = pfile_in_zip_read_info->stream.avail_in ; + + for (i=0;istream.next_out+i) = + *(pfile_in_zip_read_info->stream.next_in+i); + + pfile_in_zip_read_info->total_out_64 = pfile_in_zip_read_info->total_out_64 + uDoCopy; + + pfile_in_zip_read_info->crc32 = crc32(pfile_in_zip_read_info->crc32, + pfile_in_zip_read_info->stream.next_out, + uDoCopy); + pfile_in_zip_read_info->rest_read_uncompressed-=uDoCopy; + pfile_in_zip_read_info->stream.avail_in -= uDoCopy; + pfile_in_zip_read_info->stream.avail_out -= uDoCopy; + pfile_in_zip_read_info->stream.next_out += uDoCopy; + pfile_in_zip_read_info->stream.next_in += uDoCopy; + pfile_in_zip_read_info->stream.total_out += uDoCopy; + iRead += uDoCopy; + } + else if (pfile_in_zip_read_info->compression_method==Z_BZIP2ED) + { +#ifdef HAVE_BZIP2 + uLong uTotalOutBefore,uTotalOutAfter; + const Bytef *bufBefore; + uLong uOutThis; + + pfile_in_zip_read_info->bstream.next_in = (char*)pfile_in_zip_read_info->stream.next_in; + pfile_in_zip_read_info->bstream.avail_in = pfile_in_zip_read_info->stream.avail_in; + pfile_in_zip_read_info->bstream.total_in_lo32 = pfile_in_zip_read_info->stream.total_in; + pfile_in_zip_read_info->bstream.total_in_hi32 = 0; + pfile_in_zip_read_info->bstream.next_out = (char*)pfile_in_zip_read_info->stream.next_out; + pfile_in_zip_read_info->bstream.avail_out = pfile_in_zip_read_info->stream.avail_out; + pfile_in_zip_read_info->bstream.total_out_lo32 = pfile_in_zip_read_info->stream.total_out; + pfile_in_zip_read_info->bstream.total_out_hi32 = 0; + + uTotalOutBefore = pfile_in_zip_read_info->bstream.total_out_lo32; + bufBefore = (const Bytef *)pfile_in_zip_read_info->bstream.next_out; + + err=BZ2_bzDecompress(&pfile_in_zip_read_info->bstream); + + uTotalOutAfter = pfile_in_zip_read_info->bstream.total_out_lo32; + uOutThis = uTotalOutAfter-uTotalOutBefore; + + pfile_in_zip_read_info->total_out_64 = pfile_in_zip_read_info->total_out_64 + uOutThis; + + pfile_in_zip_read_info->crc32 = crc32(pfile_in_zip_read_info->crc32,bufBefore, (uInt)(uOutThis)); + pfile_in_zip_read_info->rest_read_uncompressed -= uOutThis; + iRead += (uInt)(uTotalOutAfter - uTotalOutBefore); + + pfile_in_zip_read_info->stream.next_in = (Bytef*)pfile_in_zip_read_info->bstream.next_in; + pfile_in_zip_read_info->stream.avail_in = pfile_in_zip_read_info->bstream.avail_in; + pfile_in_zip_read_info->stream.total_in = pfile_in_zip_read_info->bstream.total_in_lo32; + pfile_in_zip_read_info->stream.next_out = (Bytef*)pfile_in_zip_read_info->bstream.next_out; + pfile_in_zip_read_info->stream.avail_out = pfile_in_zip_read_info->bstream.avail_out; + pfile_in_zip_read_info->stream.total_out = pfile_in_zip_read_info->bstream.total_out_lo32; + + if (err==BZ_STREAM_END) + return (iRead==0) ? UNZ_EOF : iRead; + if (err!=BZ_OK) + break; +#endif + } // end Z_BZIP2ED + else + { + ZPOS64_T uTotalOutBefore,uTotalOutAfter; + const Bytef *bufBefore; + ZPOS64_T uOutThis; + int flush=Z_SYNC_FLUSH; + + uTotalOutBefore = pfile_in_zip_read_info->stream.total_out; + bufBefore = pfile_in_zip_read_info->stream.next_out; + + /* + if ((pfile_in_zip_read_info->rest_read_uncompressed == + pfile_in_zip_read_info->stream.avail_out) && + (pfile_in_zip_read_info->rest_read_compressed == 0)) + flush = Z_FINISH; + */ + err=inflate(&pfile_in_zip_read_info->stream,flush); + + if ((err>=0) && (pfile_in_zip_read_info->stream.msg!=NULL)) + err = Z_DATA_ERROR; + + uTotalOutAfter = pfile_in_zip_read_info->stream.total_out; + /* Detect overflow, because z_stream.total_out is uLong (32 bits) */ + if (uTotalOutAftertotal_out_64 = pfile_in_zip_read_info->total_out_64 + uOutThis; + + pfile_in_zip_read_info->crc32 = + crc32(pfile_in_zip_read_info->crc32,bufBefore, + (uInt)(uOutThis)); + + pfile_in_zip_read_info->rest_read_uncompressed -= + uOutThis; + + iRead += (uInt)(uTotalOutAfter - uTotalOutBefore); + + if (err==Z_STREAM_END) + return (iRead==0) ? UNZ_EOF : (int)iRead; + if (err!=Z_OK) + break; + } + } + + if (err==Z_OK) + return (int)iRead; + return err; +} + + +/* + Give the current position in uncompressed data +*/ +extern z_off_t ZEXPORT unztell(unzFile file) { + unz64_s* s; + file_in_zip64_read_info_s* pfile_in_zip_read_info; + if (file==NULL) + return UNZ_PARAMERROR; + s=(unz64_s*)file; + pfile_in_zip_read_info=s->pfile_in_zip_read; + + if (pfile_in_zip_read_info==NULL) + return UNZ_PARAMERROR; + + return (z_off_t)pfile_in_zip_read_info->stream.total_out; +} + +extern ZPOS64_T ZEXPORT unztell64(unzFile file) { + + unz64_s* s; + file_in_zip64_read_info_s* pfile_in_zip_read_info; + if (file==NULL) + return (ZPOS64_T)-1; + s=(unz64_s*)file; + pfile_in_zip_read_info=s->pfile_in_zip_read; + + if (pfile_in_zip_read_info==NULL) + return (ZPOS64_T)-1; + + return pfile_in_zip_read_info->total_out_64; +} + + +/* + return 1 if the end of file was reached, 0 elsewhere +*/ +extern int ZEXPORT unzeof(unzFile file) { + unz64_s* s; + file_in_zip64_read_info_s* pfile_in_zip_read_info; + if (file==NULL) + return UNZ_PARAMERROR; + s=(unz64_s*)file; + pfile_in_zip_read_info=s->pfile_in_zip_read; + + if (pfile_in_zip_read_info==NULL) + return UNZ_PARAMERROR; + + if (pfile_in_zip_read_info->rest_read_uncompressed == 0) + return 1; + else + return 0; +} + + + +/* +Read extra field from the current file (opened by unzOpenCurrentFile) +This is the local-header version of the extra field (sometimes, there is +more info in the local-header version than in the central-header) + + if buf==NULL, it return the size of the local extra field that can be read + + if buf!=NULL, len is the size of the buffer, the extra header is copied in + buf. + the return value is the number of bytes copied in buf, or (if <0) + the error code +*/ +extern int ZEXPORT unzGetLocalExtrafield(unzFile file, voidp buf, unsigned len) { + unz64_s* s; + file_in_zip64_read_info_s* pfile_in_zip_read_info; + uInt read_now; + ZPOS64_T size_to_read; + + if (file==NULL) + return UNZ_PARAMERROR; + s=(unz64_s*)file; + pfile_in_zip_read_info=s->pfile_in_zip_read; + + if (pfile_in_zip_read_info==NULL) + return UNZ_PARAMERROR; + + size_to_read = (pfile_in_zip_read_info->size_local_extrafield - + pfile_in_zip_read_info->pos_local_extrafield); + + if (buf==NULL) + return (int)size_to_read; + + if (len>size_to_read) + read_now = (uInt)size_to_read; + else + read_now = (uInt)len ; + + if (read_now==0) + return 0; + + if (ZSEEK64(pfile_in_zip_read_info->z_filefunc, + pfile_in_zip_read_info->filestream, + pfile_in_zip_read_info->offset_local_extrafield + + pfile_in_zip_read_info->pos_local_extrafield, + ZLIB_FILEFUNC_SEEK_SET)!=0) + return UNZ_ERRNO; + + if (ZREAD64(pfile_in_zip_read_info->z_filefunc, + pfile_in_zip_read_info->filestream, + buf,read_now)!=read_now) + return UNZ_ERRNO; + + return (int)read_now; +} + +/* + Close the file in zip opened with unzOpenCurrentFile + Return UNZ_CRCERROR if all the file was read but the CRC is not good +*/ +extern int ZEXPORT unzCloseCurrentFile(unzFile file) { + int err=UNZ_OK; + + unz64_s* s; + file_in_zip64_read_info_s* pfile_in_zip_read_info; + if (file==NULL) + return UNZ_PARAMERROR; + s=(unz64_s*)file; + pfile_in_zip_read_info=s->pfile_in_zip_read; + + if (pfile_in_zip_read_info==NULL) + return UNZ_PARAMERROR; + + + if ((pfile_in_zip_read_info->rest_read_uncompressed == 0) && + (!pfile_in_zip_read_info->raw)) + { + if (pfile_in_zip_read_info->crc32 != pfile_in_zip_read_info->crc32_wait) + err=UNZ_CRCERROR; + } + + + free(pfile_in_zip_read_info->read_buffer); + pfile_in_zip_read_info->read_buffer = NULL; + if (pfile_in_zip_read_info->stream_initialised == Z_DEFLATED) + inflateEnd(&pfile_in_zip_read_info->stream); +#ifdef HAVE_BZIP2 + else if (pfile_in_zip_read_info->stream_initialised == Z_BZIP2ED) + BZ2_bzDecompressEnd(&pfile_in_zip_read_info->bstream); +#endif + + + pfile_in_zip_read_info->stream_initialised = 0; + free(pfile_in_zip_read_info); + + s->pfile_in_zip_read=NULL; + + return err; +} + + +/* + Get the global comment string of the ZipFile, in the szComment buffer. + uSizeBuf is the size of the szComment buffer. + return the number of byte copied or an error code <0 +*/ +extern int ZEXPORT unzGetGlobalComment(unzFile file, char * szComment, uLong uSizeBuf) { + unz64_s* s; + uLong uReadThis ; + if (file==NULL) + return (int)UNZ_PARAMERROR; + s=(unz64_s*)file; + + uReadThis = uSizeBuf; + if (uReadThis>s->gi.size_comment) + uReadThis = s->gi.size_comment; + + if (ZSEEK64(s->z_filefunc,s->filestream,s->central_pos+22,ZLIB_FILEFUNC_SEEK_SET)!=0) + return UNZ_ERRNO; + + if (uReadThis>0) + { + *szComment='\0'; + if (ZREAD64(s->z_filefunc,s->filestream,szComment,uReadThis)!=uReadThis) + return UNZ_ERRNO; + } + + if ((szComment != NULL) && (uSizeBuf > s->gi.size_comment)) + *(szComment+s->gi.size_comment)='\0'; + return (int)uReadThis; +} + +/* Additions by RX '2004 */ +extern ZPOS64_T ZEXPORT unzGetOffset64(unzFile file) { + unz64_s* s; + + if (file==NULL) + return 0; //UNZ_PARAMERROR; + s=(unz64_s*)file; + if (!s->current_file_ok) + return 0; + if (s->gi.number_entry != 0 && s->gi.number_entry != 0xffff) + if (s->num_file==s->gi.number_entry) + return 0; + return s->pos_in_central_dir; +} + +extern uLong ZEXPORT unzGetOffset(unzFile file) { + ZPOS64_T offset64; + + if (file==NULL) + return 0; //UNZ_PARAMERROR; + offset64 = unzGetOffset64(file); + return (uLong)offset64; +} + +extern int ZEXPORT unzSetOffset64(unzFile file, ZPOS64_T pos) { + unz64_s* s; + int err; + + if (file==NULL) + return UNZ_PARAMERROR; + s=(unz64_s*)file; + + s->pos_in_central_dir = pos; + s->num_file = s->gi.number_entry; /* hack */ + err = unz64local_GetCurrentFileInfoInternal(file,&s->cur_file_info, + &s->cur_file_info_internal, + NULL,0,NULL,0,NULL,0); + s->current_file_ok = (err == UNZ_OK); + return err; +} + +extern int ZEXPORT unzSetOffset (unzFile file, uLong pos) { + return unzSetOffset64(file,pos); +} diff --git a/thirdparty/zlib-1.3.1/contrib/minizip/unzip.h b/thirdparty/zlib-1.3.1/contrib/minizip/unzip.h new file mode 100644 index 0000000..5cfc9c6 --- /dev/null +++ b/thirdparty/zlib-1.3.1/contrib/minizip/unzip.h @@ -0,0 +1,437 @@ +/* unzip.h -- IO for uncompress .zip files using zlib + Version 1.1, February 14h, 2010 + part of the MiniZip project - ( http://www.winimage.com/zLibDll/minizip.html ) + + Copyright (C) 1998-2010 Gilles Vollant (minizip) ( http://www.winimage.com/zLibDll/minizip.html ) + + Modifications of Unzip for Zip64 + Copyright (C) 2007-2008 Even Rouault + + Modifications for Zip64 support on both zip and unzip + Copyright (C) 2009-2010 Mathias Svensson ( http://result42.com ) + + For more info read MiniZip_info.txt + + --------------------------------------------------------------------------------- + + Condition of use and distribution are the same than zlib : + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. + + --------------------------------------------------------------------------------- + + Changes + + See header of unzip64.c + +*/ + +#ifndef _unz64_H +#define _unz64_H + +#ifdef __cplusplus +extern "C" { +#endif + +#ifndef _ZLIB_H +#include "zlib.h" +#endif + +#ifndef _ZLIBIOAPI_H +#include "ioapi.h" +#endif + +#ifdef HAVE_BZIP2 +#include "bzlib.h" +#endif + +#define Z_BZIP2ED 12 + +#if defined(STRICTUNZIP) || defined(STRICTZIPUNZIP) +/* like the STRICT of WIN32, we define a pointer that cannot be converted + from (void*) without cast */ +typedef struct TagunzFile__ { int unused; } unzFile__; +typedef unzFile__ *unzFile; +#else +typedef voidp unzFile; +#endif + + +#define UNZ_OK (0) +#define UNZ_END_OF_LIST_OF_FILE (-100) +#define UNZ_ERRNO (Z_ERRNO) +#define UNZ_EOF (0) +#define UNZ_PARAMERROR (-102) +#define UNZ_BADZIPFILE (-103) +#define UNZ_INTERNALERROR (-104) +#define UNZ_CRCERROR (-105) + +/* tm_unz contain date/time info */ +typedef struct tm_unz_s +{ + int tm_sec; /* seconds after the minute - [0,59] */ + int tm_min; /* minutes after the hour - [0,59] */ + int tm_hour; /* hours since midnight - [0,23] */ + int tm_mday; /* day of the month - [1,31] */ + int tm_mon; /* months since January - [0,11] */ + int tm_year; /* years - [1980..2044] */ +} tm_unz; + +/* unz_global_info structure contain global data about the ZIPfile + These data comes from the end of central dir */ +typedef struct unz_global_info64_s +{ + ZPOS64_T number_entry; /* total number of entries in + the central dir on this disk */ + uLong size_comment; /* size of the global comment of the zipfile */ +} unz_global_info64; + +typedef struct unz_global_info_s +{ + uLong number_entry; /* total number of entries in + the central dir on this disk */ + uLong size_comment; /* size of the global comment of the zipfile */ +} unz_global_info; + +/* unz_file_info contain information about a file in the zipfile */ +typedef struct unz_file_info64_s +{ + uLong version; /* version made by 2 bytes */ + uLong version_needed; /* version needed to extract 2 bytes */ + uLong flag; /* general purpose bit flag 2 bytes */ + uLong compression_method; /* compression method 2 bytes */ + uLong dosDate; /* last mod file date in Dos fmt 4 bytes */ + uLong crc; /* crc-32 4 bytes */ + ZPOS64_T compressed_size; /* compressed size 8 bytes */ + ZPOS64_T uncompressed_size; /* uncompressed size 8 bytes */ + uLong size_filename; /* filename length 2 bytes */ + uLong size_file_extra; /* extra field length 2 bytes */ + uLong size_file_comment; /* file comment length 2 bytes */ + + uLong disk_num_start; /* disk number start 2 bytes */ + uLong internal_fa; /* internal file attributes 2 bytes */ + uLong external_fa; /* external file attributes 4 bytes */ + + tm_unz tmu_date; +} unz_file_info64; + +typedef struct unz_file_info_s +{ + uLong version; /* version made by 2 bytes */ + uLong version_needed; /* version needed to extract 2 bytes */ + uLong flag; /* general purpose bit flag 2 bytes */ + uLong compression_method; /* compression method 2 bytes */ + uLong dosDate; /* last mod file date in Dos fmt 4 bytes */ + uLong crc; /* crc-32 4 bytes */ + uLong compressed_size; /* compressed size 4 bytes */ + uLong uncompressed_size; /* uncompressed size 4 bytes */ + uLong size_filename; /* filename length 2 bytes */ + uLong size_file_extra; /* extra field length 2 bytes */ + uLong size_file_comment; /* file comment length 2 bytes */ + + uLong disk_num_start; /* disk number start 2 bytes */ + uLong internal_fa; /* internal file attributes 2 bytes */ + uLong external_fa; /* external file attributes 4 bytes */ + + tm_unz tmu_date; +} unz_file_info; + +extern int ZEXPORT unzStringFileNameCompare(const char* fileName1, + const char* fileName2, + int iCaseSensitivity); +/* + Compare two filenames (fileName1,fileName2). + If iCaseSensitivity = 1, comparison is case sensitive (like strcmp) + If iCaseSensitivity = 2, comparison is not case sensitive (like strcmpi + or strcasecmp) + If iCaseSensitivity = 0, case sensitivity is default of your operating system + (like 1 on Unix, 2 on Windows) +*/ + + +extern unzFile ZEXPORT unzOpen(const char *path); +extern unzFile ZEXPORT unzOpen64(const void *path); +/* + Open a Zip file. path contain the full pathname (by example, + on a Windows XP computer "c:\\zlib\\zlib113.zip" or on an Unix computer + "zlib/zlib113.zip". + If the zipfile cannot be opened (file don't exist or in not valid), the + return value is NULL. + Else, the return value is a unzFile Handle, usable with other function + of this unzip package. + the "64" function take a const void* pointer, because the path is just the + value passed to the open64_file_func callback. + Under Windows, if UNICODE is defined, using fill_fopen64_filefunc, the path + is a pointer to a wide unicode string (LPCTSTR is LPCWSTR), so const char* + does not describe the reality +*/ + + +extern unzFile ZEXPORT unzOpen2(const char *path, + zlib_filefunc_def* pzlib_filefunc_def); +/* + Open a Zip file, like unzOpen, but provide a set of file low level API + for read/write the zip file (see ioapi.h) +*/ + +extern unzFile ZEXPORT unzOpen2_64(const void *path, + zlib_filefunc64_def* pzlib_filefunc_def); +/* + Open a Zip file, like unz64Open, but provide a set of file low level API + for read/write the zip file (see ioapi.h) +*/ + +extern int ZEXPORT unzClose(unzFile file); +/* + Close a ZipFile opened with unzOpen. + If there is files inside the .Zip opened with unzOpenCurrentFile (see later), + these files MUST be closed with unzCloseCurrentFile before call unzClose. + return UNZ_OK if there is no problem. */ + +extern int ZEXPORT unzGetGlobalInfo(unzFile file, + unz_global_info *pglobal_info); + +extern int ZEXPORT unzGetGlobalInfo64(unzFile file, + unz_global_info64 *pglobal_info); +/* + Write info about the ZipFile in the *pglobal_info structure. + No preparation of the structure is needed + return UNZ_OK if there is no problem. */ + + +extern int ZEXPORT unzGetGlobalComment(unzFile file, + char *szComment, + uLong uSizeBuf); +/* + Get the global comment string of the ZipFile, in the szComment buffer. + uSizeBuf is the size of the szComment buffer. + return the number of byte copied or an error code <0 +*/ + + +/***************************************************************************/ +/* Unzip package allow you browse the directory of the zipfile */ + +extern int ZEXPORT unzGoToFirstFile(unzFile file); +/* + Set the current file of the zipfile to the first file. + return UNZ_OK if there is no problem +*/ + +extern int ZEXPORT unzGoToNextFile(unzFile file); +/* + Set the current file of the zipfile to the next file. + return UNZ_OK if there is no problem + return UNZ_END_OF_LIST_OF_FILE if the actual file was the latest. +*/ + +extern int ZEXPORT unzLocateFile(unzFile file, + const char *szFileName, + int iCaseSensitivity); +/* + Try locate the file szFileName in the zipfile. + For the iCaseSensitivity signification, see unzStringFileNameCompare + + return value : + UNZ_OK if the file is found. It becomes the current file. + UNZ_END_OF_LIST_OF_FILE if the file is not found +*/ + + +/* ****************************************** */ +/* Ryan supplied functions */ +/* unz_file_info contain information about a file in the zipfile */ +typedef struct unz_file_pos_s +{ + uLong pos_in_zip_directory; /* offset in zip file directory */ + uLong num_of_file; /* # of file */ +} unz_file_pos; + +extern int ZEXPORT unzGetFilePos( + unzFile file, + unz_file_pos* file_pos); + +extern int ZEXPORT unzGoToFilePos( + unzFile file, + unz_file_pos* file_pos); + +typedef struct unz64_file_pos_s +{ + ZPOS64_T pos_in_zip_directory; /* offset in zip file directory */ + ZPOS64_T num_of_file; /* # of file */ +} unz64_file_pos; + +extern int ZEXPORT unzGetFilePos64( + unzFile file, + unz64_file_pos* file_pos); + +extern int ZEXPORT unzGoToFilePos64( + unzFile file, + const unz64_file_pos* file_pos); + +/* ****************************************** */ + +extern int ZEXPORT unzGetCurrentFileInfo64(unzFile file, + unz_file_info64 *pfile_info, + char *szFileName, + uLong fileNameBufferSize, + void *extraField, + uLong extraFieldBufferSize, + char *szComment, + uLong commentBufferSize); + +extern int ZEXPORT unzGetCurrentFileInfo(unzFile file, + unz_file_info *pfile_info, + char *szFileName, + uLong fileNameBufferSize, + void *extraField, + uLong extraFieldBufferSize, + char *szComment, + uLong commentBufferSize); +/* + Get Info about the current file + if pfile_info!=NULL, the *pfile_info structure will contain some info about + the current file + if szFileName!=NULL, the filename string will be copied in szFileName + (fileNameBufferSize is the size of the buffer) + if extraField!=NULL, the extra field information will be copied in extraField + (extraFieldBufferSize is the size of the buffer). + This is the Central-header version of the extra field + if szComment!=NULL, the comment string of the file will be copied in szComment + (commentBufferSize is the size of the buffer) +*/ + + +/** Addition for GDAL : START */ + +extern ZPOS64_T ZEXPORT unzGetCurrentFileZStreamPos64(unzFile file); + +/** Addition for GDAL : END */ + + +/***************************************************************************/ +/* for reading the content of the current zipfile, you can open it, read data + from it, and close it (you can close it before reading all the file) + */ + +extern int ZEXPORT unzOpenCurrentFile(unzFile file); +/* + Open for reading data the current file in the zipfile. + If there is no error, the return value is UNZ_OK. +*/ + +extern int ZEXPORT unzOpenCurrentFilePassword(unzFile file, + const char* password); +/* + Open for reading data the current file in the zipfile. + password is a crypting password + If there is no error, the return value is UNZ_OK. +*/ + +extern int ZEXPORT unzOpenCurrentFile2(unzFile file, + int* method, + int* level, + int raw); +/* + Same than unzOpenCurrentFile, but open for read raw the file (not uncompress) + if raw==1 + *method will receive method of compression, *level will receive level of + compression + note : you can set level parameter as NULL (if you did not want known level, + but you CANNOT set method parameter as NULL +*/ + +extern int ZEXPORT unzOpenCurrentFile3(unzFile file, + int* method, + int* level, + int raw, + const char* password); +/* + Same than unzOpenCurrentFile, but open for read raw the file (not uncompress) + if raw==1 + *method will receive method of compression, *level will receive level of + compression + note : you can set level parameter as NULL (if you did not want known level, + but you CANNOT set method parameter as NULL +*/ + + +extern int ZEXPORT unzCloseCurrentFile(unzFile file); +/* + Close the file in zip opened with unzOpenCurrentFile + Return UNZ_CRCERROR if all the file was read but the CRC is not good +*/ + +extern int ZEXPORT unzReadCurrentFile(unzFile file, + voidp buf, + unsigned len); +/* + Read bytes from the current file (opened by unzOpenCurrentFile) + buf contain buffer where data must be copied + len the size of buf. + + return the number of byte copied if some bytes are copied + return 0 if the end of file was reached + return <0 with error code if there is an error + (UNZ_ERRNO for IO error, or zLib error for uncompress error) +*/ + +extern z_off_t ZEXPORT unztell(unzFile file); + +extern ZPOS64_T ZEXPORT unztell64(unzFile file); +/* + Give the current position in uncompressed data +*/ + +extern int ZEXPORT unzeof(unzFile file); +/* + return 1 if the end of file was reached, 0 elsewhere +*/ + +extern int ZEXPORT unzGetLocalExtrafield(unzFile file, + voidp buf, + unsigned len); +/* + Read extra field from the current file (opened by unzOpenCurrentFile) + This is the local-header version of the extra field (sometimes, there is + more info in the local-header version than in the central-header) + + if buf==NULL, it return the size of the local extra field + + if buf!=NULL, len is the size of the buffer, the extra header is copied in + buf. + the return value is the number of bytes copied in buf, or (if <0) + the error code +*/ + +/***************************************************************************/ + +/* Get the current file offset */ +extern ZPOS64_T ZEXPORT unzGetOffset64 (unzFile file); +extern uLong ZEXPORT unzGetOffset (unzFile file); + +/* Set the current file offset */ +extern int ZEXPORT unzSetOffset64 (unzFile file, ZPOS64_T pos); +extern int ZEXPORT unzSetOffset (unzFile file, uLong pos); + + + +#ifdef __cplusplus +} +#endif + +#endif /* _unz64_H */ diff --git a/thirdparty/zlib-1.3.1/contrib/minizip/zip.c b/thirdparty/zlib-1.3.1/contrib/minizip/zip.c new file mode 100644 index 0000000..60bdffa --- /dev/null +++ b/thirdparty/zlib-1.3.1/contrib/minizip/zip.c @@ -0,0 +1,1956 @@ +/* zip.c -- IO on .zip files using zlib + Version 1.1, February 14h, 2010 + part of the MiniZip project - ( http://www.winimage.com/zLibDll/minizip.html ) + + Copyright (C) 1998-2010 Gilles Vollant (minizip) ( http://www.winimage.com/zLibDll/minizip.html ) + + Modifications for Zip64 support + Copyright (C) 2009-2010 Mathias Svensson ( http://result42.com ) + + For more info read MiniZip_info.txt + + Changes + Oct-2009 - Mathias Svensson - Remove old C style function prototypes + Oct-2009 - Mathias Svensson - Added Zip64 Support when creating new file archives + Oct-2009 - Mathias Svensson - Did some code cleanup and refactoring to get better overview of some functions. + Oct-2009 - Mathias Svensson - Added zipRemoveExtraInfoBlock to strip extra field data from its ZIP64 data + It is used when recreating zip archive with RAW when deleting items from a zip. + ZIP64 data is automatically added to items that needs it, and existing ZIP64 data need to be removed. + Oct-2009 - Mathias Svensson - Added support for BZIP2 as compression mode (bzip2 lib is required) + Jan-2010 - back to unzip and minizip 1.0 name scheme, with compatibility layer + +*/ + + +#include +#include +#include +#include +#include +#include "zlib.h" +#include "zip.h" + +#ifdef STDC +# include +#endif +#ifdef NO_ERRNO_H + extern int errno; +#else +# include +#endif + + +#ifndef local +# define local static +#endif +/* compile with -Dlocal if your debugger can't find static symbols */ + +#ifndef VERSIONMADEBY +# define VERSIONMADEBY (0x0) /* platform dependent */ +#endif + +#ifndef Z_BUFSIZE +#define Z_BUFSIZE (64*1024) //(16384) +#endif + +#ifndef Z_MAXFILENAMEINZIP +#define Z_MAXFILENAMEINZIP (256) +#endif + +#ifndef ALLOC +# define ALLOC(size) (malloc(size)) +#endif + +/* +#define SIZECENTRALDIRITEM (0x2e) +#define SIZEZIPLOCALHEADER (0x1e) +*/ + +/* I've found an old Unix (a SunOS 4.1.3_U1) without all SEEK_* defined.... */ + + +// NOT sure that this work on ALL platform +#define MAKEULONG64(a, b) ((ZPOS64_T)(((unsigned long)(a)) | ((ZPOS64_T)((unsigned long)(b))) << 32)) + +#ifndef SEEK_CUR +#define SEEK_CUR 1 +#endif + +#ifndef SEEK_END +#define SEEK_END 2 +#endif + +#ifndef SEEK_SET +#define SEEK_SET 0 +#endif + +#ifndef DEF_MEM_LEVEL +#if MAX_MEM_LEVEL >= 8 +# define DEF_MEM_LEVEL 8 +#else +# define DEF_MEM_LEVEL MAX_MEM_LEVEL +#endif +#endif +const char zip_copyright[] =" zip 1.01 Copyright 1998-2004 Gilles Vollant - http://www.winimage.com/zLibDll"; + + +#define SIZEDATA_INDATABLOCK (4096-(4*4)) + +#define LOCALHEADERMAGIC (0x04034b50) +#define CENTRALHEADERMAGIC (0x02014b50) +#define ENDHEADERMAGIC (0x06054b50) +#define ZIP64ENDHEADERMAGIC (0x6064b50) +#define ZIP64ENDLOCHEADERMAGIC (0x7064b50) + +#define FLAG_LOCALHEADER_OFFSET (0x06) +#define CRC_LOCALHEADER_OFFSET (0x0e) + +#define SIZECENTRALHEADER (0x2e) /* 46 */ + +typedef struct linkedlist_datablock_internal_s +{ + struct linkedlist_datablock_internal_s* next_datablock; + uLong avail_in_this_block; + uLong filled_in_this_block; + uLong unused; /* for future use and alignment */ + unsigned char data[SIZEDATA_INDATABLOCK]; +} linkedlist_datablock_internal; + +typedef struct linkedlist_data_s +{ + linkedlist_datablock_internal* first_block; + linkedlist_datablock_internal* last_block; +} linkedlist_data; + + +typedef struct +{ + z_stream stream; /* zLib stream structure for inflate */ +#ifdef HAVE_BZIP2 + bz_stream bstream; /* bzLib stream structure for bziped */ +#endif + + int stream_initialised; /* 1 is stream is initialised */ + uInt pos_in_buffered_data; /* last written byte in buffered_data */ + + ZPOS64_T pos_local_header; /* offset of the local header of the file + currently writing */ + char* central_header; /* central header data for the current file */ + uLong size_centralExtra; + uLong size_centralheader; /* size of the central header for cur file */ + uLong size_centralExtraFree; /* Extra bytes allocated to the centralheader but that are not used */ + uLong flag; /* flag of the file currently writing */ + + int method; /* compression method of file currently wr.*/ + int raw; /* 1 for directly writing raw data */ + Byte buffered_data[Z_BUFSIZE];/* buffer contain compressed data to be writ*/ + uLong dosDate; + uLong crc32; + int encrypt; + int zip64; /* Add ZIP64 extended information in the extra field */ + ZPOS64_T pos_zip64extrainfo; + ZPOS64_T totalCompressedData; + ZPOS64_T totalUncompressedData; +#ifndef NOCRYPT + unsigned long keys[3]; /* keys defining the pseudo-random sequence */ + const z_crc_t* pcrc_32_tab; + unsigned crypt_header_size; +#endif +} curfile64_info; + +typedef struct +{ + zlib_filefunc64_32_def z_filefunc; + voidpf filestream; /* io structure of the zipfile */ + linkedlist_data central_dir;/* datablock with central dir in construction*/ + int in_opened_file_inzip; /* 1 if a file in the zip is currently writ.*/ + curfile64_info ci; /* info on the file currently writing */ + + ZPOS64_T begin_pos; /* position of the beginning of the zipfile */ + ZPOS64_T add_position_when_writing_offset; + ZPOS64_T number_entry; + +#ifndef NO_ADDFILEINEXISTINGZIP + char *globalcomment; +#endif + +} zip64_internal; + + +#ifndef NOCRYPT +#define INCLUDECRYPTINGCODE_IFCRYPTALLOWED +#include "crypt.h" +#endif + +local linkedlist_datablock_internal* allocate_new_datablock(void) { + linkedlist_datablock_internal* ldi; + ldi = (linkedlist_datablock_internal*) + ALLOC(sizeof(linkedlist_datablock_internal)); + if (ldi!=NULL) + { + ldi->next_datablock = NULL ; + ldi->filled_in_this_block = 0 ; + ldi->avail_in_this_block = SIZEDATA_INDATABLOCK ; + } + return ldi; +} + +local void free_datablock(linkedlist_datablock_internal* ldi) { + while (ldi!=NULL) + { + linkedlist_datablock_internal* ldinext = ldi->next_datablock; + free(ldi); + ldi = ldinext; + } +} + +local void init_linkedlist(linkedlist_data* ll) { + ll->first_block = ll->last_block = NULL; +} + +local void free_linkedlist(linkedlist_data* ll) { + free_datablock(ll->first_block); + ll->first_block = ll->last_block = NULL; +} + + +local int add_data_in_datablock(linkedlist_data* ll, const void* buf, uLong len) { + linkedlist_datablock_internal* ldi; + const unsigned char* from_copy; + + if (ll==NULL) + return ZIP_INTERNALERROR; + + if (ll->last_block == NULL) + { + ll->first_block = ll->last_block = allocate_new_datablock(); + if (ll->first_block == NULL) + return ZIP_INTERNALERROR; + } + + ldi = ll->last_block; + from_copy = (const unsigned char*)buf; + + while (len>0) + { + uInt copy_this; + uInt i; + unsigned char* to_copy; + + if (ldi->avail_in_this_block==0) + { + ldi->next_datablock = allocate_new_datablock(); + if (ldi->next_datablock == NULL) + return ZIP_INTERNALERROR; + ldi = ldi->next_datablock ; + ll->last_block = ldi; + } + + if (ldi->avail_in_this_block < len) + copy_this = (uInt)ldi->avail_in_this_block; + else + copy_this = (uInt)len; + + to_copy = &(ldi->data[ldi->filled_in_this_block]); + + for (i=0;ifilled_in_this_block += copy_this; + ldi->avail_in_this_block -= copy_this; + from_copy += copy_this ; + len -= copy_this; + } + return ZIP_OK; +} + + + +/****************************************************************************/ + +#ifndef NO_ADDFILEINEXISTINGZIP +/* =========================================================================== + Inputs a long in LSB order to the given file + nbByte == 1, 2 ,4 or 8 (byte, short or long, ZPOS64_T) +*/ + +local int zip64local_putValue(const zlib_filefunc64_32_def* pzlib_filefunc_def, voidpf filestream, ZPOS64_T x, int nbByte) { + unsigned char buf[8]; + int n; + for (n = 0; n < nbByte; n++) + { + buf[n] = (unsigned char)(x & 0xff); + x >>= 8; + } + if (x != 0) + { /* data overflow - hack for ZIP64 (X Roche) */ + for (n = 0; n < nbByte; n++) + { + buf[n] = 0xff; + } + } + + if (ZWRITE64(*pzlib_filefunc_def,filestream,buf,(uLong)nbByte)!=(uLong)nbByte) + return ZIP_ERRNO; + else + return ZIP_OK; +} + +local void zip64local_putValue_inmemory (void* dest, ZPOS64_T x, int nbByte) { + unsigned char* buf=(unsigned char*)dest; + int n; + for (n = 0; n < nbByte; n++) { + buf[n] = (unsigned char)(x & 0xff); + x >>= 8; + } + + if (x != 0) + { /* data overflow - hack for ZIP64 */ + for (n = 0; n < nbByte; n++) + { + buf[n] = 0xff; + } + } +} + +/****************************************************************************/ + + +local uLong zip64local_TmzDateToDosDate(const tm_zip* ptm) { + uLong year = (uLong)ptm->tm_year; + if (year>=1980) + year-=1980; + else if (year>=80) + year-=80; + return + (uLong) (((uLong)(ptm->tm_mday) + (32 * (uLong)(ptm->tm_mon+1)) + (512 * year)) << 16) | + (((uLong)ptm->tm_sec/2) + (32 * (uLong)ptm->tm_min) + (2048 * (uLong)ptm->tm_hour)); +} + + +/****************************************************************************/ + +local int zip64local_getByte(const zlib_filefunc64_32_def* pzlib_filefunc_def, voidpf filestream, int* pi) { + unsigned char c; + int err = (int)ZREAD64(*pzlib_filefunc_def,filestream,&c,1); + if (err==1) + { + *pi = (int)c; + return ZIP_OK; + } + else + { + if (ZERROR64(*pzlib_filefunc_def,filestream)) + return ZIP_ERRNO; + else + return ZIP_EOF; + } +} + + +/* =========================================================================== + Reads a long in LSB order from the given gz_stream. Sets +*/ +local int zip64local_getShort(const zlib_filefunc64_32_def* pzlib_filefunc_def, voidpf filestream, uLong* pX) { + uLong x ; + int i = 0; + int err; + + err = zip64local_getByte(pzlib_filefunc_def,filestream,&i); + x = (uLong)i; + + if (err==ZIP_OK) + err = zip64local_getByte(pzlib_filefunc_def,filestream,&i); + x += ((uLong)i)<<8; + + if (err==ZIP_OK) + *pX = x; + else + *pX = 0; + return err; +} + +local int zip64local_getLong(const zlib_filefunc64_32_def* pzlib_filefunc_def, voidpf filestream, uLong* pX) { + uLong x ; + int i = 0; + int err; + + err = zip64local_getByte(pzlib_filefunc_def,filestream,&i); + x = (uLong)i; + + if (err==ZIP_OK) + err = zip64local_getByte(pzlib_filefunc_def,filestream,&i); + x += ((uLong)i)<<8; + + if (err==ZIP_OK) + err = zip64local_getByte(pzlib_filefunc_def,filestream,&i); + x += ((uLong)i)<<16; + + if (err==ZIP_OK) + err = zip64local_getByte(pzlib_filefunc_def,filestream,&i); + x += ((uLong)i)<<24; + + if (err==ZIP_OK) + *pX = x; + else + *pX = 0; + return err; +} + + +local int zip64local_getLong64(const zlib_filefunc64_32_def* pzlib_filefunc_def, voidpf filestream, ZPOS64_T *pX) { + ZPOS64_T x; + int i = 0; + int err; + + err = zip64local_getByte(pzlib_filefunc_def,filestream,&i); + x = (ZPOS64_T)i; + + if (err==ZIP_OK) + err = zip64local_getByte(pzlib_filefunc_def,filestream,&i); + x += ((ZPOS64_T)i)<<8; + + if (err==ZIP_OK) + err = zip64local_getByte(pzlib_filefunc_def,filestream,&i); + x += ((ZPOS64_T)i)<<16; + + if (err==ZIP_OK) + err = zip64local_getByte(pzlib_filefunc_def,filestream,&i); + x += ((ZPOS64_T)i)<<24; + + if (err==ZIP_OK) + err = zip64local_getByte(pzlib_filefunc_def,filestream,&i); + x += ((ZPOS64_T)i)<<32; + + if (err==ZIP_OK) + err = zip64local_getByte(pzlib_filefunc_def,filestream,&i); + x += ((ZPOS64_T)i)<<40; + + if (err==ZIP_OK) + err = zip64local_getByte(pzlib_filefunc_def,filestream,&i); + x += ((ZPOS64_T)i)<<48; + + if (err==ZIP_OK) + err = zip64local_getByte(pzlib_filefunc_def,filestream,&i); + x += ((ZPOS64_T)i)<<56; + + if (err==ZIP_OK) + *pX = x; + else + *pX = 0; + + return err; +} + +#ifndef BUFREADCOMMENT +#define BUFREADCOMMENT (0x400) +#endif +/* + Locate the Central directory of a zipfile (at the end, just before + the global comment) +*/ +local ZPOS64_T zip64local_SearchCentralDir(const zlib_filefunc64_32_def* pzlib_filefunc_def, voidpf filestream) { + unsigned char* buf; + ZPOS64_T uSizeFile; + ZPOS64_T uBackRead; + ZPOS64_T uMaxBack=0xffff; /* maximum size of global comment */ + ZPOS64_T uPosFound=0; + + if (ZSEEK64(*pzlib_filefunc_def,filestream,0,ZLIB_FILEFUNC_SEEK_END) != 0) + return 0; + + + uSizeFile = ZTELL64(*pzlib_filefunc_def,filestream); + + if (uMaxBack>uSizeFile) + uMaxBack = uSizeFile; + + buf = (unsigned char*)ALLOC(BUFREADCOMMENT+4); + if (buf==NULL) + return 0; + + uBackRead = 4; + while (uBackReaduMaxBack) + uBackRead = uMaxBack; + else + uBackRead+=BUFREADCOMMENT; + uReadPos = uSizeFile-uBackRead ; + + uReadSize = ((BUFREADCOMMENT+4) < (uSizeFile-uReadPos)) ? + (BUFREADCOMMENT+4) : (uLong)(uSizeFile-uReadPos); + if (ZSEEK64(*pzlib_filefunc_def,filestream,uReadPos,ZLIB_FILEFUNC_SEEK_SET)!=0) + break; + + if (ZREAD64(*pzlib_filefunc_def,filestream,buf,uReadSize)!=uReadSize) + break; + + for (i=(int)uReadSize-3; (i--)>0;) + if (((*(buf+i))==0x50) && ((*(buf+i+1))==0x4b) && + ((*(buf+i+2))==0x05) && ((*(buf+i+3))==0x06)) + { + uPosFound = uReadPos+(unsigned)i; + break; + } + + if (uPosFound!=0) + break; + } + free(buf); + return uPosFound; +} + +/* +Locate the End of Zip64 Central directory locator and from there find the CD of a zipfile (at the end, just before +the global comment) +*/ +local ZPOS64_T zip64local_SearchCentralDir64(const zlib_filefunc64_32_def* pzlib_filefunc_def, voidpf filestream) { + unsigned char* buf; + ZPOS64_T uSizeFile; + ZPOS64_T uBackRead; + ZPOS64_T uMaxBack=0xffff; /* maximum size of global comment */ + ZPOS64_T uPosFound=0; + uLong uL; + ZPOS64_T relativeOffset; + + if (ZSEEK64(*pzlib_filefunc_def,filestream,0,ZLIB_FILEFUNC_SEEK_END) != 0) + return 0; + + uSizeFile = ZTELL64(*pzlib_filefunc_def,filestream); + + if (uMaxBack>uSizeFile) + uMaxBack = uSizeFile; + + buf = (unsigned char*)ALLOC(BUFREADCOMMENT+4); + if (buf==NULL) + return 0; + + uBackRead = 4; + while (uBackReaduMaxBack) + uBackRead = uMaxBack; + else + uBackRead+=BUFREADCOMMENT; + uReadPos = uSizeFile-uBackRead ; + + uReadSize = ((BUFREADCOMMENT+4) < (uSizeFile-uReadPos)) ? + (BUFREADCOMMENT+4) : (uLong)(uSizeFile-uReadPos); + if (ZSEEK64(*pzlib_filefunc_def,filestream,uReadPos,ZLIB_FILEFUNC_SEEK_SET)!=0) + break; + + if (ZREAD64(*pzlib_filefunc_def,filestream,buf,uReadSize)!=uReadSize) + break; + + for (i=(int)uReadSize-3; (i--)>0;) + { + // Signature "0x07064b50" Zip64 end of central directory locater + if (((*(buf+i))==0x50) && ((*(buf+i+1))==0x4b) && ((*(buf+i+2))==0x06) && ((*(buf+i+3))==0x07)) + { + uPosFound = uReadPos+(unsigned)i; + break; + } + } + + if (uPosFound!=0) + break; + } + + free(buf); + if (uPosFound == 0) + return 0; + + /* Zip64 end of central directory locator */ + if (ZSEEK64(*pzlib_filefunc_def,filestream, uPosFound,ZLIB_FILEFUNC_SEEK_SET)!=0) + return 0; + + /* the signature, already checked */ + if (zip64local_getLong(pzlib_filefunc_def,filestream,&uL)!=ZIP_OK) + return 0; + + /* number of the disk with the start of the zip64 end of central directory */ + if (zip64local_getLong(pzlib_filefunc_def,filestream,&uL)!=ZIP_OK) + return 0; + if (uL != 0) + return 0; + + /* relative offset of the zip64 end of central directory record */ + if (zip64local_getLong64(pzlib_filefunc_def,filestream,&relativeOffset)!=ZIP_OK) + return 0; + + /* total number of disks */ + if (zip64local_getLong(pzlib_filefunc_def,filestream,&uL)!=ZIP_OK) + return 0; + if (uL != 1) + return 0; + + /* Goto Zip64 end of central directory record */ + if (ZSEEK64(*pzlib_filefunc_def,filestream, relativeOffset,ZLIB_FILEFUNC_SEEK_SET)!=0) + return 0; + + /* the signature */ + if (zip64local_getLong(pzlib_filefunc_def,filestream,&uL)!=ZIP_OK) + return 0; + + if (uL != 0x06064b50) // signature of 'Zip64 end of central directory' + return 0; + + return relativeOffset; +} + +local int LoadCentralDirectoryRecord(zip64_internal* pziinit) { + int err=ZIP_OK; + ZPOS64_T byte_before_the_zipfile;/* byte before the zipfile, (>0 for sfx)*/ + + ZPOS64_T size_central_dir; /* size of the central directory */ + ZPOS64_T offset_central_dir; /* offset of start of central directory */ + ZPOS64_T central_pos; + uLong uL; + + uLong number_disk; /* number of the current disk, used for + spanning ZIP, unsupported, always 0*/ + uLong number_disk_with_CD; /* number of the disk with central dir, used + for spanning ZIP, unsupported, always 0*/ + ZPOS64_T number_entry; + ZPOS64_T number_entry_CD; /* total number of entries in + the central dir + (same than number_entry on nospan) */ + uLong VersionMadeBy; + uLong VersionNeeded; + uLong size_comment; + + int hasZIP64Record = 0; + + // check first if we find a ZIP64 record + central_pos = zip64local_SearchCentralDir64(&pziinit->z_filefunc,pziinit->filestream); + if(central_pos > 0) + { + hasZIP64Record = 1; + } + else if(central_pos == 0) + { + central_pos = zip64local_SearchCentralDir(&pziinit->z_filefunc,pziinit->filestream); + } + +/* disable to allow appending to empty ZIP archive + if (central_pos==0) + err=ZIP_ERRNO; +*/ + + if(hasZIP64Record) + { + ZPOS64_T sizeEndOfCentralDirectory; + if (ZSEEK64(pziinit->z_filefunc, pziinit->filestream, central_pos, ZLIB_FILEFUNC_SEEK_SET) != 0) + err=ZIP_ERRNO; + + /* the signature, already checked */ + if (zip64local_getLong(&pziinit->z_filefunc, pziinit->filestream,&uL)!=ZIP_OK) + err=ZIP_ERRNO; + + /* size of zip64 end of central directory record */ + if (zip64local_getLong64(&pziinit->z_filefunc, pziinit->filestream, &sizeEndOfCentralDirectory)!=ZIP_OK) + err=ZIP_ERRNO; + + /* version made by */ + if (zip64local_getShort(&pziinit->z_filefunc, pziinit->filestream, &VersionMadeBy)!=ZIP_OK) + err=ZIP_ERRNO; + + /* version needed to extract */ + if (zip64local_getShort(&pziinit->z_filefunc, pziinit->filestream, &VersionNeeded)!=ZIP_OK) + err=ZIP_ERRNO; + + /* number of this disk */ + if (zip64local_getLong(&pziinit->z_filefunc, pziinit->filestream,&number_disk)!=ZIP_OK) + err=ZIP_ERRNO; + + /* number of the disk with the start of the central directory */ + if (zip64local_getLong(&pziinit->z_filefunc, pziinit->filestream,&number_disk_with_CD)!=ZIP_OK) + err=ZIP_ERRNO; + + /* total number of entries in the central directory on this disk */ + if (zip64local_getLong64(&pziinit->z_filefunc, pziinit->filestream, &number_entry)!=ZIP_OK) + err=ZIP_ERRNO; + + /* total number of entries in the central directory */ + if (zip64local_getLong64(&pziinit->z_filefunc, pziinit->filestream,&number_entry_CD)!=ZIP_OK) + err=ZIP_ERRNO; + + if ((number_entry_CD!=number_entry) || (number_disk_with_CD!=0) || (number_disk!=0)) + err=ZIP_BADZIPFILE; + + /* size of the central directory */ + if (zip64local_getLong64(&pziinit->z_filefunc, pziinit->filestream,&size_central_dir)!=ZIP_OK) + err=ZIP_ERRNO; + + /* offset of start of central directory with respect to the + starting disk number */ + if (zip64local_getLong64(&pziinit->z_filefunc, pziinit->filestream,&offset_central_dir)!=ZIP_OK) + err=ZIP_ERRNO; + + // TODO.. + // read the comment from the standard central header. + size_comment = 0; + } + else + { + // Read End of central Directory info + if (ZSEEK64(pziinit->z_filefunc, pziinit->filestream, central_pos,ZLIB_FILEFUNC_SEEK_SET)!=0) + err=ZIP_ERRNO; + + /* the signature, already checked */ + if (zip64local_getLong(&pziinit->z_filefunc, pziinit->filestream,&uL)!=ZIP_OK) + err=ZIP_ERRNO; + + /* number of this disk */ + if (zip64local_getShort(&pziinit->z_filefunc, pziinit->filestream,&number_disk)!=ZIP_OK) + err=ZIP_ERRNO; + + /* number of the disk with the start of the central directory */ + if (zip64local_getShort(&pziinit->z_filefunc, pziinit->filestream,&number_disk_with_CD)!=ZIP_OK) + err=ZIP_ERRNO; + + /* total number of entries in the central dir on this disk */ + number_entry = 0; + if (zip64local_getShort(&pziinit->z_filefunc, pziinit->filestream, &uL)!=ZIP_OK) + err=ZIP_ERRNO; + else + number_entry = uL; + + /* total number of entries in the central dir */ + number_entry_CD = 0; + if (zip64local_getShort(&pziinit->z_filefunc, pziinit->filestream, &uL)!=ZIP_OK) + err=ZIP_ERRNO; + else + number_entry_CD = uL; + + if ((number_entry_CD!=number_entry) || (number_disk_with_CD!=0) || (number_disk!=0)) + err=ZIP_BADZIPFILE; + + /* size of the central directory */ + size_central_dir = 0; + if (zip64local_getLong(&pziinit->z_filefunc, pziinit->filestream, &uL)!=ZIP_OK) + err=ZIP_ERRNO; + else + size_central_dir = uL; + + /* offset of start of central directory with respect to the starting disk number */ + offset_central_dir = 0; + if (zip64local_getLong(&pziinit->z_filefunc, pziinit->filestream, &uL)!=ZIP_OK) + err=ZIP_ERRNO; + else + offset_central_dir = uL; + + + /* zipfile global comment length */ + if (zip64local_getShort(&pziinit->z_filefunc, pziinit->filestream, &size_comment)!=ZIP_OK) + err=ZIP_ERRNO; + } + + if ((central_posz_filefunc, pziinit->filestream); + return ZIP_ERRNO; + } + + if (size_comment>0) + { + pziinit->globalcomment = (char*)ALLOC(size_comment+1); + if (pziinit->globalcomment) + { + size_comment = ZREAD64(pziinit->z_filefunc, pziinit->filestream, pziinit->globalcomment,size_comment); + pziinit->globalcomment[size_comment]=0; + } + } + + byte_before_the_zipfile = central_pos - (offset_central_dir+size_central_dir); + pziinit->add_position_when_writing_offset = byte_before_the_zipfile; + + { + ZPOS64_T size_central_dir_to_read = size_central_dir; + size_t buf_size = SIZEDATA_INDATABLOCK; + void* buf_read = (void*)ALLOC(buf_size); + if (ZSEEK64(pziinit->z_filefunc, pziinit->filestream, offset_central_dir + byte_before_the_zipfile, ZLIB_FILEFUNC_SEEK_SET) != 0) + err=ZIP_ERRNO; + + while ((size_central_dir_to_read>0) && (err==ZIP_OK)) + { + ZPOS64_T read_this = SIZEDATA_INDATABLOCK; + if (read_this > size_central_dir_to_read) + read_this = size_central_dir_to_read; + + if (ZREAD64(pziinit->z_filefunc, pziinit->filestream,buf_read,(uLong)read_this) != read_this) + err=ZIP_ERRNO; + + if (err==ZIP_OK) + err = add_data_in_datablock(&pziinit->central_dir,buf_read, (uLong)read_this); + + size_central_dir_to_read-=read_this; + } + free(buf_read); + } + pziinit->begin_pos = byte_before_the_zipfile; + pziinit->number_entry = number_entry_CD; + + if (ZSEEK64(pziinit->z_filefunc, pziinit->filestream, offset_central_dir+byte_before_the_zipfile,ZLIB_FILEFUNC_SEEK_SET) != 0) + err=ZIP_ERRNO; + + return err; +} + + +#endif /* !NO_ADDFILEINEXISTINGZIP*/ + + +/************************************************************/ +extern zipFile ZEXPORT zipOpen3(const void *pathname, int append, zipcharpc* globalcomment, zlib_filefunc64_32_def* pzlib_filefunc64_32_def) { + zip64_internal ziinit; + zip64_internal* zi; + int err=ZIP_OK; + + ziinit.z_filefunc.zseek32_file = NULL; + ziinit.z_filefunc.ztell32_file = NULL; + if (pzlib_filefunc64_32_def==NULL) + fill_fopen64_filefunc(&ziinit.z_filefunc.zfile_func64); + else + ziinit.z_filefunc = *pzlib_filefunc64_32_def; + + ziinit.filestream = ZOPEN64(ziinit.z_filefunc, + pathname, + (append == APPEND_STATUS_CREATE) ? + (ZLIB_FILEFUNC_MODE_READ | ZLIB_FILEFUNC_MODE_WRITE | ZLIB_FILEFUNC_MODE_CREATE) : + (ZLIB_FILEFUNC_MODE_READ | ZLIB_FILEFUNC_MODE_WRITE | ZLIB_FILEFUNC_MODE_EXISTING)); + + if (ziinit.filestream == NULL) + return NULL; + + if (append == APPEND_STATUS_CREATEAFTER) + ZSEEK64(ziinit.z_filefunc,ziinit.filestream,0,SEEK_END); + + ziinit.begin_pos = ZTELL64(ziinit.z_filefunc,ziinit.filestream); + ziinit.in_opened_file_inzip = 0; + ziinit.ci.stream_initialised = 0; + ziinit.number_entry = 0; + ziinit.add_position_when_writing_offset = 0; + init_linkedlist(&(ziinit.central_dir)); + + + + zi = (zip64_internal*)ALLOC(sizeof(zip64_internal)); + if (zi==NULL) + { + ZCLOSE64(ziinit.z_filefunc,ziinit.filestream); + return NULL; + } + + /* now we add file in a zipfile */ +# ifndef NO_ADDFILEINEXISTINGZIP + ziinit.globalcomment = NULL; + if (append == APPEND_STATUS_ADDINZIP) + { + // Read and Cache Central Directory Records + err = LoadCentralDirectoryRecord(&ziinit); + } + + if (globalcomment) + { + *globalcomment = ziinit.globalcomment; + } +# endif /* !NO_ADDFILEINEXISTINGZIP*/ + + if (err != ZIP_OK) + { +# ifndef NO_ADDFILEINEXISTINGZIP + free(ziinit.globalcomment); +# endif /* !NO_ADDFILEINEXISTINGZIP*/ + free(zi); + return NULL; + } + else + { + *zi = ziinit; + return (zipFile)zi; + } +} + +extern zipFile ZEXPORT zipOpen2(const char *pathname, int append, zipcharpc* globalcomment, zlib_filefunc_def* pzlib_filefunc32_def) { + if (pzlib_filefunc32_def != NULL) + { + zlib_filefunc64_32_def zlib_filefunc64_32_def_fill; + fill_zlib_filefunc64_32_def_from_filefunc32(&zlib_filefunc64_32_def_fill,pzlib_filefunc32_def); + return zipOpen3(pathname, append, globalcomment, &zlib_filefunc64_32_def_fill); + } + else + return zipOpen3(pathname, append, globalcomment, NULL); +} + +extern zipFile ZEXPORT zipOpen2_64(const void *pathname, int append, zipcharpc* globalcomment, zlib_filefunc64_def* pzlib_filefunc_def) { + if (pzlib_filefunc_def != NULL) + { + zlib_filefunc64_32_def zlib_filefunc64_32_def_fill; + zlib_filefunc64_32_def_fill.zfile_func64 = *pzlib_filefunc_def; + zlib_filefunc64_32_def_fill.ztell32_file = NULL; + zlib_filefunc64_32_def_fill.zseek32_file = NULL; + return zipOpen3(pathname, append, globalcomment, &zlib_filefunc64_32_def_fill); + } + else + return zipOpen3(pathname, append, globalcomment, NULL); +} + + + +extern zipFile ZEXPORT zipOpen(const char* pathname, int append) { + return zipOpen3((const void*)pathname,append,NULL,NULL); +} + +extern zipFile ZEXPORT zipOpen64(const void* pathname, int append) { + return zipOpen3(pathname,append,NULL,NULL); +} + +local int Write_LocalFileHeader(zip64_internal* zi, const char* filename, uInt size_extrafield_local, const void* extrafield_local) { + /* write the local header */ + int err; + uInt size_filename = (uInt)strlen(filename); + uInt size_extrafield = size_extrafield_local; + + err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)LOCALHEADERMAGIC, 4); + + if (err==ZIP_OK) + { + if(zi->ci.zip64) + err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)45,2);/* version needed to extract */ + else + err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)20,2);/* version needed to extract */ + } + + if (err==ZIP_OK) + err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)zi->ci.flag,2); + + if (err==ZIP_OK) + err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)zi->ci.method,2); + + if (err==ZIP_OK) + err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)zi->ci.dosDate,4); + + // CRC / Compressed size / Uncompressed size will be filled in later and rewritten later + if (err==ZIP_OK) + err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)0,4); /* crc 32, unknown */ + if (err==ZIP_OK) + { + if(zi->ci.zip64) + err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)0xFFFFFFFF,4); /* compressed size, unknown */ + else + err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)0,4); /* compressed size, unknown */ + } + if (err==ZIP_OK) + { + if(zi->ci.zip64) + err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)0xFFFFFFFF,4); /* uncompressed size, unknown */ + else + err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)0,4); /* uncompressed size, unknown */ + } + + if (err==ZIP_OK) + err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)size_filename,2); + + if(zi->ci.zip64) + { + size_extrafield += 20; + } + + if (err==ZIP_OK) + err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)size_extrafield,2); + + if ((err==ZIP_OK) && (size_filename > 0)) + { + if (ZWRITE64(zi->z_filefunc,zi->filestream,filename,size_filename)!=size_filename) + err = ZIP_ERRNO; + } + + if ((err==ZIP_OK) && (size_extrafield_local > 0)) + { + if (ZWRITE64(zi->z_filefunc, zi->filestream, extrafield_local, size_extrafield_local) != size_extrafield_local) + err = ZIP_ERRNO; + } + + + if ((err==ZIP_OK) && (zi->ci.zip64)) + { + // write the Zip64 extended info + short HeaderID = 1; + short DataSize = 16; + ZPOS64_T CompressedSize = 0; + ZPOS64_T UncompressedSize = 0; + + // Remember position of Zip64 extended info for the local file header. (needed when we update size after done with file) + zi->ci.pos_zip64extrainfo = ZTELL64(zi->z_filefunc,zi->filestream); + + err = zip64local_putValue(&zi->z_filefunc, zi->filestream, (ZPOS64_T)HeaderID,2); + err = zip64local_putValue(&zi->z_filefunc, zi->filestream, (ZPOS64_T)DataSize,2); + + err = zip64local_putValue(&zi->z_filefunc, zi->filestream, (ZPOS64_T)UncompressedSize,8); + err = zip64local_putValue(&zi->z_filefunc, zi->filestream, (ZPOS64_T)CompressedSize,8); + } + + return err; +} + +/* + NOTE. + When writing RAW the ZIP64 extended information in extrafield_local and extrafield_global needs to be stripped + before calling this function it can be done with zipRemoveExtraInfoBlock + + It is not done here because then we need to realloc a new buffer since parameters are 'const' and I want to minimize + unnecessary allocations. + */ +extern int ZEXPORT zipOpenNewFileInZip4_64(zipFile file, const char* filename, const zip_fileinfo* zipfi, + const void* extrafield_local, uInt size_extrafield_local, + const void* extrafield_global, uInt size_extrafield_global, + const char* comment, int method, int level, int raw, + int windowBits,int memLevel, int strategy, + const char* password, uLong crcForCrypting, + uLong versionMadeBy, uLong flagBase, int zip64) { + zip64_internal* zi; + uInt size_filename; + uInt size_comment; + uInt i; + int err = ZIP_OK; + +# ifdef NOCRYPT + (crcForCrypting); + if (password != NULL) + return ZIP_PARAMERROR; +# endif + + if (file == NULL) + return ZIP_PARAMERROR; + +#ifdef HAVE_BZIP2 + if ((method!=0) && (method!=Z_DEFLATED) && (method!=Z_BZIP2ED)) + return ZIP_PARAMERROR; +#else + if ((method!=0) && (method!=Z_DEFLATED)) + return ZIP_PARAMERROR; +#endif + + // The filename and comment length must fit in 16 bits. + if ((filename!=NULL) && (strlen(filename)>0xffff)) + return ZIP_PARAMERROR; + if ((comment!=NULL) && (strlen(comment)>0xffff)) + return ZIP_PARAMERROR; + // The extra field length must fit in 16 bits. If the member also requires + // a Zip64 extra block, that will also need to fit within that 16-bit + // length, but that will be checked for later. + if ((size_extrafield_local>0xffff) || (size_extrafield_global>0xffff)) + return ZIP_PARAMERROR; + + zi = (zip64_internal*)file; + + if (zi->in_opened_file_inzip == 1) + { + err = zipCloseFileInZip (file); + if (err != ZIP_OK) + return err; + } + + if (filename==NULL) + filename="-"; + + if (comment==NULL) + size_comment = 0; + else + size_comment = (uInt)strlen(comment); + + size_filename = (uInt)strlen(filename); + + if (zipfi == NULL) + zi->ci.dosDate = 0; + else + { + if (zipfi->dosDate != 0) + zi->ci.dosDate = zipfi->dosDate; + else + zi->ci.dosDate = zip64local_TmzDateToDosDate(&zipfi->tmz_date); + } + + zi->ci.flag = flagBase; + if ((level==8) || (level==9)) + zi->ci.flag |= 2; + if (level==2) + zi->ci.flag |= 4; + if (level==1) + zi->ci.flag |= 6; + if (password != NULL) + zi->ci.flag |= 1; + + zi->ci.crc32 = 0; + zi->ci.method = method; + zi->ci.encrypt = 0; + zi->ci.stream_initialised = 0; + zi->ci.pos_in_buffered_data = 0; + zi->ci.raw = raw; + zi->ci.pos_local_header = ZTELL64(zi->z_filefunc,zi->filestream); + + zi->ci.size_centralheader = SIZECENTRALHEADER + size_filename + size_extrafield_global + size_comment; + zi->ci.size_centralExtraFree = 32; // Extra space we have reserved in case we need to add ZIP64 extra info data + + zi->ci.central_header = (char*)ALLOC((uInt)zi->ci.size_centralheader + zi->ci.size_centralExtraFree); + + zi->ci.size_centralExtra = size_extrafield_global; + zip64local_putValue_inmemory(zi->ci.central_header,(uLong)CENTRALHEADERMAGIC,4); + /* version info */ + zip64local_putValue_inmemory(zi->ci.central_header+4,(uLong)versionMadeBy,2); + zip64local_putValue_inmemory(zi->ci.central_header+6,(uLong)20,2); + zip64local_putValue_inmemory(zi->ci.central_header+8,(uLong)zi->ci.flag,2); + zip64local_putValue_inmemory(zi->ci.central_header+10,(uLong)zi->ci.method,2); + zip64local_putValue_inmemory(zi->ci.central_header+12,(uLong)zi->ci.dosDate,4); + zip64local_putValue_inmemory(zi->ci.central_header+16,(uLong)0,4); /*crc*/ + zip64local_putValue_inmemory(zi->ci.central_header+20,(uLong)0,4); /*compr size*/ + zip64local_putValue_inmemory(zi->ci.central_header+24,(uLong)0,4); /*uncompr size*/ + zip64local_putValue_inmemory(zi->ci.central_header+28,(uLong)size_filename,2); + zip64local_putValue_inmemory(zi->ci.central_header+30,(uLong)size_extrafield_global,2); + zip64local_putValue_inmemory(zi->ci.central_header+32,(uLong)size_comment,2); + zip64local_putValue_inmemory(zi->ci.central_header+34,(uLong)0,2); /*disk nm start*/ + + if (zipfi==NULL) + zip64local_putValue_inmemory(zi->ci.central_header+36,(uLong)0,2); + else + zip64local_putValue_inmemory(zi->ci.central_header+36,(uLong)zipfi->internal_fa,2); + + if (zipfi==NULL) + zip64local_putValue_inmemory(zi->ci.central_header+38,(uLong)0,4); + else + zip64local_putValue_inmemory(zi->ci.central_header+38,(uLong)zipfi->external_fa,4); + + if(zi->ci.pos_local_header >= 0xffffffff) + zip64local_putValue_inmemory(zi->ci.central_header+42,(uLong)0xffffffff,4); + else + zip64local_putValue_inmemory(zi->ci.central_header+42,(uLong)zi->ci.pos_local_header - zi->add_position_when_writing_offset,4); + + for (i=0;ici.central_header+SIZECENTRALHEADER+i) = *(filename+i); + + for (i=0;ici.central_header+SIZECENTRALHEADER+size_filename+i) = + *(((const char*)extrafield_global)+i); + + for (i=0;ici.central_header+SIZECENTRALHEADER+size_filename+ + size_extrafield_global+i) = *(comment+i); + if (zi->ci.central_header == NULL) + return ZIP_INTERNALERROR; + + zi->ci.zip64 = zip64; + zi->ci.totalCompressedData = 0; + zi->ci.totalUncompressedData = 0; + zi->ci.pos_zip64extrainfo = 0; + + err = Write_LocalFileHeader(zi, filename, size_extrafield_local, extrafield_local); + +#ifdef HAVE_BZIP2 + zi->ci.bstream.avail_in = (uInt)0; + zi->ci.bstream.avail_out = (uInt)Z_BUFSIZE; + zi->ci.bstream.next_out = (char*)zi->ci.buffered_data; + zi->ci.bstream.total_in_hi32 = 0; + zi->ci.bstream.total_in_lo32 = 0; + zi->ci.bstream.total_out_hi32 = 0; + zi->ci.bstream.total_out_lo32 = 0; +#endif + + zi->ci.stream.avail_in = (uInt)0; + zi->ci.stream.avail_out = (uInt)Z_BUFSIZE; + zi->ci.stream.next_out = zi->ci.buffered_data; + zi->ci.stream.total_in = 0; + zi->ci.stream.total_out = 0; + zi->ci.stream.data_type = Z_BINARY; + +#ifdef HAVE_BZIP2 + if ((err==ZIP_OK) && (zi->ci.method == Z_DEFLATED || zi->ci.method == Z_BZIP2ED) && (!zi->ci.raw)) +#else + if ((err==ZIP_OK) && (zi->ci.method == Z_DEFLATED) && (!zi->ci.raw)) +#endif + { + if(zi->ci.method == Z_DEFLATED) + { + zi->ci.stream.zalloc = (alloc_func)0; + zi->ci.stream.zfree = (free_func)0; + zi->ci.stream.opaque = (voidpf)0; + + if (windowBits>0) + windowBits = -windowBits; + + err = deflateInit2(&zi->ci.stream, level, Z_DEFLATED, windowBits, memLevel, strategy); + + if (err==Z_OK) + zi->ci.stream_initialised = Z_DEFLATED; + } + else if(zi->ci.method == Z_BZIP2ED) + { +#ifdef HAVE_BZIP2 + // Init BZip stuff here + zi->ci.bstream.bzalloc = 0; + zi->ci.bstream.bzfree = 0; + zi->ci.bstream.opaque = (voidpf)0; + + err = BZ2_bzCompressInit(&zi->ci.bstream, level, 0,35); + if(err == BZ_OK) + zi->ci.stream_initialised = Z_BZIP2ED; +#endif + } + + } + +# ifndef NOCRYPT + zi->ci.crypt_header_size = 0; + if ((err==Z_OK) && (password != NULL)) + { + unsigned char bufHead[RAND_HEAD_LEN]; + unsigned int sizeHead; + zi->ci.encrypt = 1; + zi->ci.pcrc_32_tab = get_crc_table(); + /*init_keys(password,zi->ci.keys,zi->ci.pcrc_32_tab);*/ + + sizeHead=crypthead(password,bufHead,RAND_HEAD_LEN,zi->ci.keys,zi->ci.pcrc_32_tab,crcForCrypting); + zi->ci.crypt_header_size = sizeHead; + + if (ZWRITE64(zi->z_filefunc,zi->filestream,bufHead,sizeHead) != sizeHead) + err = ZIP_ERRNO; + } +# endif + + if (err==Z_OK) + zi->in_opened_file_inzip = 1; + return err; +} + +extern int ZEXPORT zipOpenNewFileInZip4(zipFile file, const char* filename, const zip_fileinfo* zipfi, + const void* extrafield_local, uInt size_extrafield_local, + const void* extrafield_global, uInt size_extrafield_global, + const char* comment, int method, int level, int raw, + int windowBits,int memLevel, int strategy, + const char* password, uLong crcForCrypting, + uLong versionMadeBy, uLong flagBase) { + return zipOpenNewFileInZip4_64(file, filename, zipfi, + extrafield_local, size_extrafield_local, + extrafield_global, size_extrafield_global, + comment, method, level, raw, + windowBits, memLevel, strategy, + password, crcForCrypting, versionMadeBy, flagBase, 0); +} + +extern int ZEXPORT zipOpenNewFileInZip3(zipFile file, const char* filename, const zip_fileinfo* zipfi, + const void* extrafield_local, uInt size_extrafield_local, + const void* extrafield_global, uInt size_extrafield_global, + const char* comment, int method, int level, int raw, + int windowBits,int memLevel, int strategy, + const char* password, uLong crcForCrypting) { + return zipOpenNewFileInZip4_64(file, filename, zipfi, + extrafield_local, size_extrafield_local, + extrafield_global, size_extrafield_global, + comment, method, level, raw, + windowBits, memLevel, strategy, + password, crcForCrypting, VERSIONMADEBY, 0, 0); +} + +extern int ZEXPORT zipOpenNewFileInZip3_64(zipFile file, const char* filename, const zip_fileinfo* zipfi, + const void* extrafield_local, uInt size_extrafield_local, + const void* extrafield_global, uInt size_extrafield_global, + const char* comment, int method, int level, int raw, + int windowBits,int memLevel, int strategy, + const char* password, uLong crcForCrypting, int zip64) { + return zipOpenNewFileInZip4_64(file, filename, zipfi, + extrafield_local, size_extrafield_local, + extrafield_global, size_extrafield_global, + comment, method, level, raw, + windowBits, memLevel, strategy, + password, crcForCrypting, VERSIONMADEBY, 0, zip64); +} + +extern int ZEXPORT zipOpenNewFileInZip2(zipFile file, const char* filename, const zip_fileinfo* zipfi, + const void* extrafield_local, uInt size_extrafield_local, + const void* extrafield_global, uInt size_extrafield_global, + const char* comment, int method, int level, int raw) { + return zipOpenNewFileInZip4_64(file, filename, zipfi, + extrafield_local, size_extrafield_local, + extrafield_global, size_extrafield_global, + comment, method, level, raw, + -MAX_WBITS, DEF_MEM_LEVEL, Z_DEFAULT_STRATEGY, + NULL, 0, VERSIONMADEBY, 0, 0); +} + +extern int ZEXPORT zipOpenNewFileInZip2_64(zipFile file, const char* filename, const zip_fileinfo* zipfi, + const void* extrafield_local, uInt size_extrafield_local, + const void* extrafield_global, uInt size_extrafield_global, + const char* comment, int method, int level, int raw, int zip64) { + return zipOpenNewFileInZip4_64(file, filename, zipfi, + extrafield_local, size_extrafield_local, + extrafield_global, size_extrafield_global, + comment, method, level, raw, + -MAX_WBITS, DEF_MEM_LEVEL, Z_DEFAULT_STRATEGY, + NULL, 0, VERSIONMADEBY, 0, zip64); +} + +extern int ZEXPORT zipOpenNewFileInZip64(zipFile file, const char* filename, const zip_fileinfo* zipfi, + const void* extrafield_local, uInt size_extrafield_local, + const void*extrafield_global, uInt size_extrafield_global, + const char* comment, int method, int level, int zip64) { + return zipOpenNewFileInZip4_64(file, filename, zipfi, + extrafield_local, size_extrafield_local, + extrafield_global, size_extrafield_global, + comment, method, level, 0, + -MAX_WBITS, DEF_MEM_LEVEL, Z_DEFAULT_STRATEGY, + NULL, 0, VERSIONMADEBY, 0, zip64); +} + +extern int ZEXPORT zipOpenNewFileInZip(zipFile file, const char* filename, const zip_fileinfo* zipfi, + const void* extrafield_local, uInt size_extrafield_local, + const void*extrafield_global, uInt size_extrafield_global, + const char* comment, int method, int level) { + return zipOpenNewFileInZip4_64(file, filename, zipfi, + extrafield_local, size_extrafield_local, + extrafield_global, size_extrafield_global, + comment, method, level, 0, + -MAX_WBITS, DEF_MEM_LEVEL, Z_DEFAULT_STRATEGY, + NULL, 0, VERSIONMADEBY, 0, 0); +} + +local int zip64FlushWriteBuffer(zip64_internal* zi) { + int err=ZIP_OK; + + if (zi->ci.encrypt != 0) + { +#ifndef NOCRYPT + uInt i; + int t; + for (i=0;ici.pos_in_buffered_data;i++) + zi->ci.buffered_data[i] = zencode(zi->ci.keys, zi->ci.pcrc_32_tab, zi->ci.buffered_data[i],t); +#endif + } + + if (ZWRITE64(zi->z_filefunc,zi->filestream,zi->ci.buffered_data,zi->ci.pos_in_buffered_data) != zi->ci.pos_in_buffered_data) + err = ZIP_ERRNO; + + zi->ci.totalCompressedData += zi->ci.pos_in_buffered_data; + +#ifdef HAVE_BZIP2 + if(zi->ci.method == Z_BZIP2ED) + { + zi->ci.totalUncompressedData += zi->ci.bstream.total_in_lo32; + zi->ci.bstream.total_in_lo32 = 0; + zi->ci.bstream.total_in_hi32 = 0; + } + else +#endif + { + zi->ci.totalUncompressedData += zi->ci.stream.total_in; + zi->ci.stream.total_in = 0; + } + + + zi->ci.pos_in_buffered_data = 0; + + return err; +} + +extern int ZEXPORT zipWriteInFileInZip(zipFile file, const void* buf, unsigned int len) { + zip64_internal* zi; + int err=ZIP_OK; + + if (file == NULL) + return ZIP_PARAMERROR; + zi = (zip64_internal*)file; + + if (zi->in_opened_file_inzip == 0) + return ZIP_PARAMERROR; + + zi->ci.crc32 = crc32(zi->ci.crc32,buf,(uInt)len); + +#ifdef HAVE_BZIP2 + if(zi->ci.method == Z_BZIP2ED && (!zi->ci.raw)) + { + zi->ci.bstream.next_in = (void*)buf; + zi->ci.bstream.avail_in = len; + err = BZ_RUN_OK; + + while ((err==BZ_RUN_OK) && (zi->ci.bstream.avail_in>0)) + { + if (zi->ci.bstream.avail_out == 0) + { + if (zip64FlushWriteBuffer(zi) == ZIP_ERRNO) + err = ZIP_ERRNO; + zi->ci.bstream.avail_out = (uInt)Z_BUFSIZE; + zi->ci.bstream.next_out = (char*)zi->ci.buffered_data; + } + + + if(err != BZ_RUN_OK) + break; + + if ((zi->ci.method == Z_BZIP2ED) && (!zi->ci.raw)) + { + uLong uTotalOutBefore_lo = zi->ci.bstream.total_out_lo32; +// uLong uTotalOutBefore_hi = zi->ci.bstream.total_out_hi32; + err=BZ2_bzCompress(&zi->ci.bstream, BZ_RUN); + + zi->ci.pos_in_buffered_data += (uInt)(zi->ci.bstream.total_out_lo32 - uTotalOutBefore_lo) ; + } + } + + if(err == BZ_RUN_OK) + err = ZIP_OK; + } + else +#endif + { + zi->ci.stream.next_in = (Bytef*)(uintptr_t)buf; + zi->ci.stream.avail_in = len; + + while ((err==ZIP_OK) && (zi->ci.stream.avail_in>0)) + { + if (zi->ci.stream.avail_out == 0) + { + if (zip64FlushWriteBuffer(zi) == ZIP_ERRNO) + err = ZIP_ERRNO; + zi->ci.stream.avail_out = (uInt)Z_BUFSIZE; + zi->ci.stream.next_out = zi->ci.buffered_data; + } + + + if(err != ZIP_OK) + break; + + if ((zi->ci.method == Z_DEFLATED) && (!zi->ci.raw)) + { + uLong uTotalOutBefore = zi->ci.stream.total_out; + err=deflate(&zi->ci.stream, Z_NO_FLUSH); + + zi->ci.pos_in_buffered_data += (uInt)(zi->ci.stream.total_out - uTotalOutBefore) ; + } + else + { + uInt copy_this,i; + if (zi->ci.stream.avail_in < zi->ci.stream.avail_out) + copy_this = zi->ci.stream.avail_in; + else + copy_this = zi->ci.stream.avail_out; + + for (i = 0; i < copy_this; i++) + *(((char*)zi->ci.stream.next_out)+i) = + *(((const char*)zi->ci.stream.next_in)+i); + { + zi->ci.stream.avail_in -= copy_this; + zi->ci.stream.avail_out-= copy_this; + zi->ci.stream.next_in+= copy_this; + zi->ci.stream.next_out+= copy_this; + zi->ci.stream.total_in+= copy_this; + zi->ci.stream.total_out+= copy_this; + zi->ci.pos_in_buffered_data += copy_this; + } + } + }// while(...) + } + + return err; +} + +extern int ZEXPORT zipCloseFileInZipRaw(zipFile file, uLong uncompressed_size, uLong crc32) { + return zipCloseFileInZipRaw64 (file, uncompressed_size, crc32); +} + +extern int ZEXPORT zipCloseFileInZipRaw64(zipFile file, ZPOS64_T uncompressed_size, uLong crc32) { + zip64_internal* zi; + ZPOS64_T compressed_size; + uLong invalidValue = 0xffffffff; + unsigned datasize = 0; + int err=ZIP_OK; + + if (file == NULL) + return ZIP_PARAMERROR; + zi = (zip64_internal*)file; + + if (zi->in_opened_file_inzip == 0) + return ZIP_PARAMERROR; + zi->ci.stream.avail_in = 0; + + if ((zi->ci.method == Z_DEFLATED) && (!zi->ci.raw)) + { + while (err==ZIP_OK) + { + uLong uTotalOutBefore; + if (zi->ci.stream.avail_out == 0) + { + if (zip64FlushWriteBuffer(zi) == ZIP_ERRNO) + err = ZIP_ERRNO; + zi->ci.stream.avail_out = (uInt)Z_BUFSIZE; + zi->ci.stream.next_out = zi->ci.buffered_data; + } + uTotalOutBefore = zi->ci.stream.total_out; + err=deflate(&zi->ci.stream, Z_FINISH); + zi->ci.pos_in_buffered_data += (uInt)(zi->ci.stream.total_out - uTotalOutBefore) ; + } + } + else if ((zi->ci.method == Z_BZIP2ED) && (!zi->ci.raw)) + { +#ifdef HAVE_BZIP2 + err = BZ_FINISH_OK; + while (err==BZ_FINISH_OK) + { + uLong uTotalOutBefore; + if (zi->ci.bstream.avail_out == 0) + { + if (zip64FlushWriteBuffer(zi) == ZIP_ERRNO) + err = ZIP_ERRNO; + zi->ci.bstream.avail_out = (uInt)Z_BUFSIZE; + zi->ci.bstream.next_out = (char*)zi->ci.buffered_data; + } + uTotalOutBefore = zi->ci.bstream.total_out_lo32; + err=BZ2_bzCompress(&zi->ci.bstream, BZ_FINISH); + if(err == BZ_STREAM_END) + err = Z_STREAM_END; + + zi->ci.pos_in_buffered_data += (uInt)(zi->ci.bstream.total_out_lo32 - uTotalOutBefore); + } + + if(err == BZ_FINISH_OK) + err = ZIP_OK; +#endif + } + + if (err==Z_STREAM_END) + err=ZIP_OK; /* this is normal */ + + if ((zi->ci.pos_in_buffered_data>0) && (err==ZIP_OK)) + { + if (zip64FlushWriteBuffer(zi)==ZIP_ERRNO) + err = ZIP_ERRNO; + } + + if ((zi->ci.method == Z_DEFLATED) && (!zi->ci.raw)) + { + int tmp_err = deflateEnd(&zi->ci.stream); + if (err == ZIP_OK) + err = tmp_err; + zi->ci.stream_initialised = 0; + } +#ifdef HAVE_BZIP2 + else if((zi->ci.method == Z_BZIP2ED) && (!zi->ci.raw)) + { + int tmperr = BZ2_bzCompressEnd(&zi->ci.bstream); + if (err==ZIP_OK) + err = tmperr; + zi->ci.stream_initialised = 0; + } +#endif + + if (!zi->ci.raw) + { + crc32 = (uLong)zi->ci.crc32; + uncompressed_size = zi->ci.totalUncompressedData; + } + compressed_size = zi->ci.totalCompressedData; + +# ifndef NOCRYPT + compressed_size += zi->ci.crypt_header_size; +# endif + + // update Current Item crc and sizes, + if(compressed_size >= 0xffffffff || uncompressed_size >= 0xffffffff || zi->ci.pos_local_header >= 0xffffffff) + { + /*version Made by*/ + zip64local_putValue_inmemory(zi->ci.central_header+4,(uLong)45,2); + /*version needed*/ + zip64local_putValue_inmemory(zi->ci.central_header+6,(uLong)45,2); + + } + + zip64local_putValue_inmemory(zi->ci.central_header+16,crc32,4); /*crc*/ + + + if(compressed_size >= 0xffffffff) + zip64local_putValue_inmemory(zi->ci.central_header+20, invalidValue,4); /*compr size*/ + else + zip64local_putValue_inmemory(zi->ci.central_header+20, compressed_size,4); /*compr size*/ + + /// set internal file attributes field + if (zi->ci.stream.data_type == Z_ASCII) + zip64local_putValue_inmemory(zi->ci.central_header+36,(uLong)Z_ASCII,2); + + if(uncompressed_size >= 0xffffffff) + zip64local_putValue_inmemory(zi->ci.central_header+24, invalidValue,4); /*uncompr size*/ + else + zip64local_putValue_inmemory(zi->ci.central_header+24, uncompressed_size,4); /*uncompr size*/ + + // Add ZIP64 extra info field for uncompressed size + if(uncompressed_size >= 0xffffffff) + datasize += 8; + + // Add ZIP64 extra info field for compressed size + if(compressed_size >= 0xffffffff) + datasize += 8; + + // Add ZIP64 extra info field for relative offset to local file header of current file + if(zi->ci.pos_local_header >= 0xffffffff) + datasize += 8; + + if(datasize > 0) + { + char* p = NULL; + + if((uLong)(datasize + 4) > zi->ci.size_centralExtraFree) + { + // we cannot write more data to the buffer that we have room for. + return ZIP_BADZIPFILE; + } + + p = zi->ci.central_header + zi->ci.size_centralheader; + + // Add Extra Information Header for 'ZIP64 information' + zip64local_putValue_inmemory(p, 0x0001, 2); // HeaderID + p += 2; + zip64local_putValue_inmemory(p, datasize, 2); // DataSize + p += 2; + + if(uncompressed_size >= 0xffffffff) + { + zip64local_putValue_inmemory(p, uncompressed_size, 8); + p += 8; + } + + if(compressed_size >= 0xffffffff) + { + zip64local_putValue_inmemory(p, compressed_size, 8); + p += 8; + } + + if(zi->ci.pos_local_header >= 0xffffffff) + { + zip64local_putValue_inmemory(p, zi->ci.pos_local_header, 8); + p += 8; + } + + // Update how much extra free space we got in the memory buffer + // and increase the centralheader size so the new ZIP64 fields are included + // ( 4 below is the size of HeaderID and DataSize field ) + zi->ci.size_centralExtraFree -= datasize + 4; + zi->ci.size_centralheader += datasize + 4; + + // Update the extra info size field + zi->ci.size_centralExtra += datasize + 4; + zip64local_putValue_inmemory(zi->ci.central_header+30,(uLong)zi->ci.size_centralExtra,2); + } + + if (err==ZIP_OK) + err = add_data_in_datablock(&zi->central_dir, zi->ci.central_header, (uLong)zi->ci.size_centralheader); + + free(zi->ci.central_header); + + if (err==ZIP_OK) + { + // Update the LocalFileHeader with the new values. + + ZPOS64_T cur_pos_inzip = ZTELL64(zi->z_filefunc,zi->filestream); + + if (ZSEEK64(zi->z_filefunc,zi->filestream, zi->ci.pos_local_header + 14,ZLIB_FILEFUNC_SEEK_SET)!=0) + err = ZIP_ERRNO; + + if (err==ZIP_OK) + err = zip64local_putValue(&zi->z_filefunc,zi->filestream,crc32,4); /* crc 32, unknown */ + + if(uncompressed_size >= 0xffffffff || compressed_size >= 0xffffffff ) + { + if(zi->ci.pos_zip64extrainfo > 0) + { + // Update the size in the ZIP64 extended field. + if (ZSEEK64(zi->z_filefunc,zi->filestream, zi->ci.pos_zip64extrainfo + 4,ZLIB_FILEFUNC_SEEK_SET)!=0) + err = ZIP_ERRNO; + + if (err==ZIP_OK) /* compressed size, unknown */ + err = zip64local_putValue(&zi->z_filefunc, zi->filestream, uncompressed_size, 8); + + if (err==ZIP_OK) /* uncompressed size, unknown */ + err = zip64local_putValue(&zi->z_filefunc, zi->filestream, compressed_size, 8); + } + else + err = ZIP_BADZIPFILE; // Caller passed zip64 = 0, so no room for zip64 info -> fatal + } + else + { + if (err==ZIP_OK) /* compressed size, unknown */ + err = zip64local_putValue(&zi->z_filefunc,zi->filestream,compressed_size,4); + + if (err==ZIP_OK) /* uncompressed size, unknown */ + err = zip64local_putValue(&zi->z_filefunc,zi->filestream,uncompressed_size,4); + } + + if (ZSEEK64(zi->z_filefunc,zi->filestream, cur_pos_inzip,ZLIB_FILEFUNC_SEEK_SET)!=0) + err = ZIP_ERRNO; + } + + zi->number_entry ++; + zi->in_opened_file_inzip = 0; + + return err; +} + +extern int ZEXPORT zipCloseFileInZip(zipFile file) { + return zipCloseFileInZipRaw (file,0,0); +} + +local int Write_Zip64EndOfCentralDirectoryLocator(zip64_internal* zi, ZPOS64_T zip64eocd_pos_inzip) { + int err = ZIP_OK; + ZPOS64_T pos = zip64eocd_pos_inzip - zi->add_position_when_writing_offset; + + err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)ZIP64ENDLOCHEADERMAGIC,4); + + /*num disks*/ + if (err==ZIP_OK) /* number of the disk with the start of the central directory */ + err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)0,4); + + /*relative offset*/ + if (err==ZIP_OK) /* Relative offset to the Zip64EndOfCentralDirectory */ + err = zip64local_putValue(&zi->z_filefunc,zi->filestream, pos,8); + + /*total disks*/ /* Do not support spawning of disk so always say 1 here*/ + if (err==ZIP_OK) /* number of the disk with the start of the central directory */ + err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)1,4); + + return err; +} + +local int Write_Zip64EndOfCentralDirectoryRecord(zip64_internal* zi, uLong size_centraldir, ZPOS64_T centraldir_pos_inzip) { + int err = ZIP_OK; + + uLong Zip64DataSize = 44; + + err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)ZIP64ENDHEADERMAGIC,4); + + if (err==ZIP_OK) /* size of this 'zip64 end of central directory' */ + err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(ZPOS64_T)Zip64DataSize,8); // why ZPOS64_T of this ? + + if (err==ZIP_OK) /* version made by */ + err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)45,2); + + if (err==ZIP_OK) /* version needed */ + err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)45,2); + + if (err==ZIP_OK) /* number of this disk */ + err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)0,4); + + if (err==ZIP_OK) /* number of the disk with the start of the central directory */ + err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)0,4); + + if (err==ZIP_OK) /* total number of entries in the central dir on this disk */ + err = zip64local_putValue(&zi->z_filefunc, zi->filestream, zi->number_entry, 8); + + if (err==ZIP_OK) /* total number of entries in the central dir */ + err = zip64local_putValue(&zi->z_filefunc, zi->filestream, zi->number_entry, 8); + + if (err==ZIP_OK) /* size of the central directory */ + err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(ZPOS64_T)size_centraldir,8); + + if (err==ZIP_OK) /* offset of start of central directory with respect to the starting disk number */ + { + ZPOS64_T pos = centraldir_pos_inzip - zi->add_position_when_writing_offset; + err = zip64local_putValue(&zi->z_filefunc,zi->filestream, (ZPOS64_T)pos,8); + } + return err; +} + +local int Write_EndOfCentralDirectoryRecord(zip64_internal* zi, uLong size_centraldir, ZPOS64_T centraldir_pos_inzip) { + int err = ZIP_OK; + + /*signature*/ + err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)ENDHEADERMAGIC,4); + + if (err==ZIP_OK) /* number of this disk */ + err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)0,2); + + if (err==ZIP_OK) /* number of the disk with the start of the central directory */ + err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)0,2); + + if (err==ZIP_OK) /* total number of entries in the central dir on this disk */ + { + { + if(zi->number_entry >= 0xFFFF) + err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)0xffff,2); // use value in ZIP64 record + else + err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)zi->number_entry,2); + } + } + + if (err==ZIP_OK) /* total number of entries in the central dir */ + { + if(zi->number_entry >= 0xFFFF) + err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)0xffff,2); // use value in ZIP64 record + else + err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)zi->number_entry,2); + } + + if (err==ZIP_OK) /* size of the central directory */ + err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)size_centraldir,4); + + if (err==ZIP_OK) /* offset of start of central directory with respect to the starting disk number */ + { + ZPOS64_T pos = centraldir_pos_inzip - zi->add_position_when_writing_offset; + if(pos >= 0xffffffff) + { + err = zip64local_putValue(&zi->z_filefunc,zi->filestream, (uLong)0xffffffff,4); + } + else + err = zip64local_putValue(&zi->z_filefunc,zi->filestream, (uLong)(centraldir_pos_inzip - zi->add_position_when_writing_offset),4); + } + + return err; +} + +local int Write_GlobalComment(zip64_internal* zi, const char* global_comment) { + int err = ZIP_OK; + uInt size_global_comment = 0; + + if(global_comment != NULL) + size_global_comment = (uInt)strlen(global_comment); + + err = zip64local_putValue(&zi->z_filefunc,zi->filestream,(uLong)size_global_comment,2); + + if (err == ZIP_OK && size_global_comment > 0) + { + if (ZWRITE64(zi->z_filefunc,zi->filestream, global_comment, size_global_comment) != size_global_comment) + err = ZIP_ERRNO; + } + return err; +} + +extern int ZEXPORT zipClose(zipFile file, const char* global_comment) { + zip64_internal* zi; + int err = 0; + uLong size_centraldir = 0; + ZPOS64_T centraldir_pos_inzip; + ZPOS64_T pos; + + if (file == NULL) + return ZIP_PARAMERROR; + + zi = (zip64_internal*)file; + + if (zi->in_opened_file_inzip == 1) + { + err = zipCloseFileInZip (file); + } + +#ifndef NO_ADDFILEINEXISTINGZIP + if (global_comment==NULL) + global_comment = zi->globalcomment; +#endif + + centraldir_pos_inzip = ZTELL64(zi->z_filefunc,zi->filestream); + + if (err==ZIP_OK) + { + linkedlist_datablock_internal* ldi = zi->central_dir.first_block; + while (ldi!=NULL) + { + if ((err==ZIP_OK) && (ldi->filled_in_this_block>0)) + { + if (ZWRITE64(zi->z_filefunc,zi->filestream, ldi->data, ldi->filled_in_this_block) != ldi->filled_in_this_block) + err = ZIP_ERRNO; + } + + size_centraldir += ldi->filled_in_this_block; + ldi = ldi->next_datablock; + } + } + free_linkedlist(&(zi->central_dir)); + + pos = centraldir_pos_inzip - zi->add_position_when_writing_offset; + if(pos >= 0xffffffff || zi->number_entry >= 0xFFFF) + { + ZPOS64_T Zip64EOCDpos = ZTELL64(zi->z_filefunc,zi->filestream); + Write_Zip64EndOfCentralDirectoryRecord(zi, size_centraldir, centraldir_pos_inzip); + + Write_Zip64EndOfCentralDirectoryLocator(zi, Zip64EOCDpos); + } + + if (err==ZIP_OK) + err = Write_EndOfCentralDirectoryRecord(zi, size_centraldir, centraldir_pos_inzip); + + if(err == ZIP_OK) + err = Write_GlobalComment(zi, global_comment); + + if (ZCLOSE64(zi->z_filefunc,zi->filestream) != 0) + if (err == ZIP_OK) + err = ZIP_ERRNO; + +#ifndef NO_ADDFILEINEXISTINGZIP + free(zi->globalcomment); +#endif + free(zi); + + return err; +} + +extern int ZEXPORT zipRemoveExtraInfoBlock(char* pData, int* dataLen, short sHeader) { + char* p = pData; + int size = 0; + char* pNewHeader; + char* pTmp; + short header; + short dataSize; + + int retVal = ZIP_OK; + + if(pData == NULL || dataLen == NULL || *dataLen < 4) + return ZIP_PARAMERROR; + + pNewHeader = (char*)ALLOC((unsigned)*dataLen); + pTmp = pNewHeader; + + while(p < (pData + *dataLen)) + { + header = *(short*)p; + dataSize = *(((short*)p)+1); + + if( header == sHeader ) // Header found. + { + p += dataSize + 4; // skip it. do not copy to temp buffer + } + else + { + // Extra Info block should not be removed, So copy it to the temp buffer. + memcpy(pTmp, p, dataSize + 4); + p += dataSize + 4; + size += dataSize + 4; + } + + } + + if(size < *dataLen) + { + // clean old extra info block. + memset(pData,0, *dataLen); + + // copy the new extra info block over the old + if(size > 0) + memcpy(pData, pNewHeader, size); + + // set the new extra info size + *dataLen = size; + + retVal = ZIP_OK; + } + else + retVal = ZIP_ERRNO; + + free(pNewHeader); + + return retVal; +} diff --git a/thirdparty/zlib-1.3.1/contrib/minizip/zip.h b/thirdparty/zlib-1.3.1/contrib/minizip/zip.h new file mode 100644 index 0000000..3e230d3 --- /dev/null +++ b/thirdparty/zlib-1.3.1/contrib/minizip/zip.h @@ -0,0 +1,364 @@ +/* zip.h -- IO on .zip files using zlib + Version 1.1, February 14h, 2010 + part of the MiniZip project - ( http://www.winimage.com/zLibDll/minizip.html ) + + Copyright (C) 1998-2010 Gilles Vollant (minizip) ( http://www.winimage.com/zLibDll/minizip.html ) + + Modifications for Zip64 support + Copyright (C) 2009-2010 Mathias Svensson ( http://result42.com ) + + For more info read MiniZip_info.txt + + --------------------------------------------------------------------------- + + Condition of use and distribution are the same than zlib : + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. + + --------------------------------------------------------------------------- + + Changes + + See header of zip.h + +*/ + +#ifndef _zip12_H +#define _zip12_H + +#ifdef __cplusplus +extern "C" { +#endif + +//#define HAVE_BZIP2 + +#ifndef _ZLIB_H +#include "zlib.h" +#endif + +#ifndef _ZLIBIOAPI_H +#include "ioapi.h" +#endif + +#ifdef HAVE_BZIP2 +#include "bzlib.h" +#endif + +#define Z_BZIP2ED 12 + +#if defined(STRICTZIP) || defined(STRICTZIPUNZIP) +/* like the STRICT of WIN32, we define a pointer that cannot be converted + from (void*) without cast */ +typedef struct TagzipFile__ { int unused; } zipFile__; +typedef zipFile__ *zipFile; +#else +typedef voidp zipFile; +#endif + +#define ZIP_OK (0) +#define ZIP_EOF (0) +#define ZIP_ERRNO (Z_ERRNO) +#define ZIP_PARAMERROR (-102) +#define ZIP_BADZIPFILE (-103) +#define ZIP_INTERNALERROR (-104) + +#ifndef DEF_MEM_LEVEL +# if MAX_MEM_LEVEL >= 8 +# define DEF_MEM_LEVEL 8 +# else +# define DEF_MEM_LEVEL MAX_MEM_LEVEL +# endif +#endif +/* default memLevel */ + +/* tm_zip contain date/time info */ +typedef struct tm_zip_s +{ + int tm_sec; /* seconds after the minute - [0,59] */ + int tm_min; /* minutes after the hour - [0,59] */ + int tm_hour; /* hours since midnight - [0,23] */ + int tm_mday; /* day of the month - [1,31] */ + int tm_mon; /* months since January - [0,11] */ + int tm_year; /* years - [1980..2044] */ +} tm_zip; + +typedef struct +{ + tm_zip tmz_date; /* date in understandable format */ + uLong dosDate; /* if dos_date == 0, tmu_date is used */ +/* uLong flag; */ /* general purpose bit flag 2 bytes */ + + uLong internal_fa; /* internal file attributes 2 bytes */ + uLong external_fa; /* external file attributes 4 bytes */ +} zip_fileinfo; + +typedef const char* zipcharpc; + + +#define APPEND_STATUS_CREATE (0) +#define APPEND_STATUS_CREATEAFTER (1) +#define APPEND_STATUS_ADDINZIP (2) + +extern zipFile ZEXPORT zipOpen(const char *pathname, int append); +extern zipFile ZEXPORT zipOpen64(const void *pathname, int append); +/* + Create a zipfile. + pathname contain on Windows XP a filename like "c:\\zlib\\zlib113.zip" or on + an Unix computer "zlib/zlib113.zip". + if the file pathname exist and append==APPEND_STATUS_CREATEAFTER, the zip + will be created at the end of the file. + (useful if the file contain a self extractor code) + if the file pathname exist and append==APPEND_STATUS_ADDINZIP, we will + add files in existing zip (be sure you don't add file that doesn't exist) + If the zipfile cannot be opened, the return value is NULL. + Else, the return value is a zipFile Handle, usable with other function + of this zip package. +*/ + +/* Note : there is no delete function into a zipfile. + If you want delete file into a zipfile, you must open a zipfile, and create another + Of course, you can use RAW reading and writing to copy the file you did not want delete +*/ + +extern zipFile ZEXPORT zipOpen2(const char *pathname, + int append, + zipcharpc* globalcomment, + zlib_filefunc_def* pzlib_filefunc_def); + +extern zipFile ZEXPORT zipOpen2_64(const void *pathname, + int append, + zipcharpc* globalcomment, + zlib_filefunc64_def* pzlib_filefunc_def); + +extern zipFile ZEXPORT zipOpen3(const void *pathname, + int append, + zipcharpc* globalcomment, + zlib_filefunc64_32_def* pzlib_filefunc64_32_def); + +extern int ZEXPORT zipOpenNewFileInZip(zipFile file, + const char* filename, + const zip_fileinfo* zipfi, + const void* extrafield_local, + uInt size_extrafield_local, + const void* extrafield_global, + uInt size_extrafield_global, + const char* comment, + int method, + int level); + +extern int ZEXPORT zipOpenNewFileInZip64(zipFile file, + const char* filename, + const zip_fileinfo* zipfi, + const void* extrafield_local, + uInt size_extrafield_local, + const void* extrafield_global, + uInt size_extrafield_global, + const char* comment, + int method, + int level, + int zip64); + +/* + Open a file in the ZIP for writing. + filename : the filename in zip (if NULL, '-' without quote will be used + *zipfi contain supplemental information + if extrafield_local!=NULL and size_extrafield_local>0, extrafield_local + contains the extrafield data for the local header + if extrafield_global!=NULL and size_extrafield_global>0, extrafield_global + contains the extrafield data for the global header + if comment != NULL, comment contain the comment string + method contain the compression method (0 for store, Z_DEFLATED for deflate) + level contain the level of compression (can be Z_DEFAULT_COMPRESSION) + zip64 is set to 1 if a zip64 extended information block should be added to the local file header. + this MUST be '1' if the uncompressed size is >= 0xffffffff. + +*/ + + +extern int ZEXPORT zipOpenNewFileInZip2(zipFile file, + const char* filename, + const zip_fileinfo* zipfi, + const void* extrafield_local, + uInt size_extrafield_local, + const void* extrafield_global, + uInt size_extrafield_global, + const char* comment, + int method, + int level, + int raw); + + +extern int ZEXPORT zipOpenNewFileInZip2_64(zipFile file, + const char* filename, + const zip_fileinfo* zipfi, + const void* extrafield_local, + uInt size_extrafield_local, + const void* extrafield_global, + uInt size_extrafield_global, + const char* comment, + int method, + int level, + int raw, + int zip64); +/* + Same than zipOpenNewFileInZip, except if raw=1, we write raw file + */ + +extern int ZEXPORT zipOpenNewFileInZip3(zipFile file, + const char* filename, + const zip_fileinfo* zipfi, + const void* extrafield_local, + uInt size_extrafield_local, + const void* extrafield_global, + uInt size_extrafield_global, + const char* comment, + int method, + int level, + int raw, + int windowBits, + int memLevel, + int strategy, + const char* password, + uLong crcForCrypting); + +extern int ZEXPORT zipOpenNewFileInZip3_64(zipFile file, + const char* filename, + const zip_fileinfo* zipfi, + const void* extrafield_local, + uInt size_extrafield_local, + const void* extrafield_global, + uInt size_extrafield_global, + const char* comment, + int method, + int level, + int raw, + int windowBits, + int memLevel, + int strategy, + const char* password, + uLong crcForCrypting, + int zip64); + +/* + Same than zipOpenNewFileInZip2, except + windowBits,memLevel,,strategy : see parameter strategy in deflateInit2 + password : crypting password (NULL for no crypting) + crcForCrypting : crc of file to compress (needed for crypting) + */ + +extern int ZEXPORT zipOpenNewFileInZip4(zipFile file, + const char* filename, + const zip_fileinfo* zipfi, + const void* extrafield_local, + uInt size_extrafield_local, + const void* extrafield_global, + uInt size_extrafield_global, + const char* comment, + int method, + int level, + int raw, + int windowBits, + int memLevel, + int strategy, + const char* password, + uLong crcForCrypting, + uLong versionMadeBy, + uLong flagBase); + + +extern int ZEXPORT zipOpenNewFileInZip4_64(zipFile file, + const char* filename, + const zip_fileinfo* zipfi, + const void* extrafield_local, + uInt size_extrafield_local, + const void* extrafield_global, + uInt size_extrafield_global, + const char* comment, + int method, + int level, + int raw, + int windowBits, + int memLevel, + int strategy, + const char* password, + uLong crcForCrypting, + uLong versionMadeBy, + uLong flagBase, + int zip64); +/* + Same than zipOpenNewFileInZip4, except + versionMadeBy : value for Version made by field + flag : value for flag field (compression level info will be added) + */ + + +extern int ZEXPORT zipWriteInFileInZip(zipFile file, + const void* buf, + unsigned len); +/* + Write data in the zipfile +*/ + +extern int ZEXPORT zipCloseFileInZip(zipFile file); +/* + Close the current file in the zipfile +*/ + +extern int ZEXPORT zipCloseFileInZipRaw(zipFile file, + uLong uncompressed_size, + uLong crc32); + +extern int ZEXPORT zipCloseFileInZipRaw64(zipFile file, + ZPOS64_T uncompressed_size, + uLong crc32); + +/* + Close the current file in the zipfile, for file opened with + parameter raw=1 in zipOpenNewFileInZip2 + uncompressed_size and crc32 are value for the uncompressed size +*/ + +extern int ZEXPORT zipClose(zipFile file, + const char* global_comment); +/* + Close the zipfile +*/ + + +extern int ZEXPORT zipRemoveExtraInfoBlock(char* pData, int* dataLen, short sHeader); +/* + zipRemoveExtraInfoBlock - Added by Mathias Svensson + + Remove extra information block from a extra information data for the local file header or central directory header + + It is needed to remove ZIP64 extra information blocks when before data is written if using RAW mode. + + 0x0001 is the signature header for the ZIP64 extra information blocks + + usage. + Remove ZIP64 Extra information from a central director extra field data + zipRemoveExtraInfoBlock(pCenDirExtraFieldData, &nCenDirExtraFieldDataLen, 0x0001); + + Remove ZIP64 Extra information from a Local File Header extra field data + zipRemoveExtraInfoBlock(pLocalHeaderExtraFieldData, &nLocalHeaderExtraFieldDataLen, 0x0001); +*/ + +#ifdef __cplusplus +} +#endif + +#endif /* _zip64_H */ diff --git a/thirdparty/zlib-1.3.1/contrib/nuget/nuget.csproj b/thirdparty/zlib-1.3.1/contrib/nuget/nuget.csproj new file mode 100644 index 0000000..68627f0 --- /dev/null +++ b/thirdparty/zlib-1.3.1/contrib/nuget/nuget.csproj @@ -0,0 +1,43 @@ + + + + net6.0 + madler.zlib.redist + $(PackageId).win + $(PackageId).linux + $(PackageId).osx + (C) 1995-2024 Jean-loup Gailly and Mark Adler + 1.3.1 + NuGet Package for consuming native builds of zlib into .NET without complexity. + + NU5128 + $(MSBuildProjectDirectory) + Jean-loup Gailly and Mark Adler + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/thirdparty/zlib-1.3.1/contrib/nuget/nuget.sln b/thirdparty/zlib-1.3.1/contrib/nuget/nuget.sln new file mode 100644 index 0000000..46ee8de --- /dev/null +++ b/thirdparty/zlib-1.3.1/contrib/nuget/nuget.sln @@ -0,0 +1,22 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 17 +VisualStudioVersion = 17.0.31903.59 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "nuget", "nuget.csproj", "{B1BD3984-EF8F-4E9D-9A94-EB784E5EB1E8}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {B1BD3984-EF8F-4E9D-9A94-EB784E5EB1E8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {B1BD3984-EF8F-4E9D-9A94-EB784E5EB1E8}.Debug|Any CPU.Build.0 = Debug|Any CPU + {B1BD3984-EF8F-4E9D-9A94-EB784E5EB1E8}.Release|Any CPU.ActiveCfg = Release|Any CPU + {B1BD3984-EF8F-4E9D-9A94-EB784E5EB1E8}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection +EndGlobal diff --git a/thirdparty/zlib-1.3.1/contrib/pascal/example.pas b/thirdparty/zlib-1.3.1/contrib/pascal/example.pas new file mode 100644 index 0000000..5518b36 --- /dev/null +++ b/thirdparty/zlib-1.3.1/contrib/pascal/example.pas @@ -0,0 +1,599 @@ +(* example.c -- usage example of the zlib compression library + * Copyright (C) 1995-2003 Jean-loup Gailly. + * For conditions of distribution and use, see copyright notice in zlib.h + * + * Pascal translation + * Copyright (C) 1998 by Jacques Nomssi Nzali. + * For conditions of distribution and use, see copyright notice in readme.txt + * + * Adaptation to the zlibpas interface + * Copyright (C) 2003 by Cosmin Truta. + * For conditions of distribution and use, see copyright notice in readme.txt + *) + +program example; + +{$DEFINE TEST_COMPRESS} +{DO NOT $DEFINE TEST_GZIO} +{$DEFINE TEST_DEFLATE} +{$DEFINE TEST_INFLATE} +{$DEFINE TEST_FLUSH} +{$DEFINE TEST_SYNC} +{$DEFINE TEST_DICT} + +uses SysUtils, zlibpas; + +const TESTFILE = 'foo.gz'; + +(* "hello world" would be more standard, but the repeated "hello" + * stresses the compression code better, sorry... + *) +const hello: PChar = 'hello, hello!'; + +const dictionary: PChar = 'hello'; + +var dictId: LongInt; (* Adler32 value of the dictionary *) + +procedure CHECK_ERR(err: Integer; msg: String); +begin + if err <> Z_OK then + begin + WriteLn(msg, ' error: ', err); + Halt(1); + end; +end; + +procedure EXIT_ERR(const msg: String); +begin + WriteLn('Error: ', msg); + Halt(1); +end; + +(* =========================================================================== + * Test compress and uncompress + *) +{$IFDEF TEST_COMPRESS} +procedure test_compress(compr: Pointer; comprLen: LongInt; + uncompr: Pointer; uncomprLen: LongInt); +var err: Integer; + len: LongInt; +begin + len := StrLen(hello)+1; + + err := compress(compr, comprLen, hello, len); + CHECK_ERR(err, 'compress'); + + StrCopy(PChar(uncompr), 'garbage'); + + err := uncompress(uncompr, uncomprLen, compr, comprLen); + CHECK_ERR(err, 'uncompress'); + + if StrComp(PChar(uncompr), hello) <> 0 then + EXIT_ERR('bad uncompress') + else + WriteLn('uncompress(): ', PChar(uncompr)); +end; +{$ENDIF} + +(* =========================================================================== + * Test read/write of .gz files + *) +{$IFDEF TEST_GZIO} +procedure test_gzio(const fname: PChar; (* compressed file name *) + uncompr: Pointer; + uncomprLen: LongInt); +var err: Integer; + len: Integer; + zfile: gzFile; + pos: LongInt; +begin + len := StrLen(hello)+1; + + zfile := gzopen(fname, 'wb'); + if zfile = NIL then + begin + WriteLn('gzopen error'); + Halt(1); + end; + gzputc(zfile, 'h'); + if gzputs(zfile, 'ello') <> 4 then + begin + WriteLn('gzputs err: ', gzerror(zfile, err)); + Halt(1); + end; + {$IFDEF GZ_FORMAT_STRING} + if gzprintf(zfile, ', %s!', 'hello') <> 8 then + begin + WriteLn('gzprintf err: ', gzerror(zfile, err)); + Halt(1); + end; + {$ELSE} + if gzputs(zfile, ', hello!') <> 8 then + begin + WriteLn('gzputs err: ', gzerror(zfile, err)); + Halt(1); + end; + {$ENDIF} + gzseek(zfile, 1, SEEK_CUR); (* add one zero byte *) + gzclose(zfile); + + zfile := gzopen(fname, 'rb'); + if zfile = NIL then + begin + WriteLn('gzopen error'); + Halt(1); + end; + + StrCopy(PChar(uncompr), 'garbage'); + + if gzread(zfile, uncompr, uncomprLen) <> len then + begin + WriteLn('gzread err: ', gzerror(zfile, err)); + Halt(1); + end; + if StrComp(PChar(uncompr), hello) <> 0 then + begin + WriteLn('bad gzread: ', PChar(uncompr)); + Halt(1); + end + else + WriteLn('gzread(): ', PChar(uncompr)); + + pos := gzseek(zfile, -8, SEEK_CUR); + if (pos <> 6) or (gztell(zfile) <> pos) then + begin + WriteLn('gzseek error, pos=', pos, ', gztell=', gztell(zfile)); + Halt(1); + end; + + if gzgetc(zfile) <> ' ' then + begin + WriteLn('gzgetc error'); + Halt(1); + end; + + if gzungetc(' ', zfile) <> ' ' then + begin + WriteLn('gzungetc error'); + Halt(1); + end; + + gzgets(zfile, PChar(uncompr), uncomprLen); + uncomprLen := StrLen(PChar(uncompr)); + if uncomprLen <> 7 then (* " hello!" *) + begin + WriteLn('gzgets err after gzseek: ', gzerror(zfile, err)); + Halt(1); + end; + if StrComp(PChar(uncompr), hello + 6) <> 0 then + begin + WriteLn('bad gzgets after gzseek'); + Halt(1); + end + else + WriteLn('gzgets() after gzseek: ', PChar(uncompr)); + + gzclose(zfile); +end; +{$ENDIF} + +(* =========================================================================== + * Test deflate with small buffers + *) +{$IFDEF TEST_DEFLATE} +procedure test_deflate(compr: Pointer; comprLen: LongInt); +var c_stream: z_stream; (* compression stream *) + err: Integer; + len: LongInt; +begin + len := StrLen(hello)+1; + + c_stream.zalloc := NIL; + c_stream.zfree := NIL; + c_stream.opaque := NIL; + + err := deflateInit(c_stream, Z_DEFAULT_COMPRESSION); + CHECK_ERR(err, 'deflateInit'); + + c_stream.next_in := hello; + c_stream.next_out := compr; + + while (c_stream.total_in <> len) and + (c_stream.total_out < comprLen) do + begin + c_stream.avail_out := 1; { force small buffers } + c_stream.avail_in := 1; + err := deflate(c_stream, Z_NO_FLUSH); + CHECK_ERR(err, 'deflate'); + end; + + (* Finish the stream, still forcing small buffers: *) + while TRUE do + begin + c_stream.avail_out := 1; + err := deflate(c_stream, Z_FINISH); + if err = Z_STREAM_END then + break; + CHECK_ERR(err, 'deflate'); + end; + + err := deflateEnd(c_stream); + CHECK_ERR(err, 'deflateEnd'); +end; +{$ENDIF} + +(* =========================================================================== + * Test inflate with small buffers + *) +{$IFDEF TEST_INFLATE} +procedure test_inflate(compr: Pointer; comprLen : LongInt; + uncompr: Pointer; uncomprLen : LongInt); +var err: Integer; + d_stream: z_stream; (* decompression stream *) +begin + StrCopy(PChar(uncompr), 'garbage'); + + d_stream.zalloc := NIL; + d_stream.zfree := NIL; + d_stream.opaque := NIL; + + d_stream.next_in := compr; + d_stream.avail_in := 0; + d_stream.next_out := uncompr; + + err := inflateInit(d_stream); + CHECK_ERR(err, 'inflateInit'); + + while (d_stream.total_out < uncomprLen) and + (d_stream.total_in < comprLen) do + begin + d_stream.avail_out := 1; (* force small buffers *) + d_stream.avail_in := 1; + err := inflate(d_stream, Z_NO_FLUSH); + if err = Z_STREAM_END then + break; + CHECK_ERR(err, 'inflate'); + end; + + err := inflateEnd(d_stream); + CHECK_ERR(err, 'inflateEnd'); + + if StrComp(PChar(uncompr), hello) <> 0 then + EXIT_ERR('bad inflate') + else + WriteLn('inflate(): ', PChar(uncompr)); +end; +{$ENDIF} + +(* =========================================================================== + * Test deflate with large buffers and dynamic change of compression level + *) +{$IFDEF TEST_DEFLATE} +procedure test_large_deflate(compr: Pointer; comprLen: LongInt; + uncompr: Pointer; uncomprLen: LongInt); +var c_stream: z_stream; (* compression stream *) + err: Integer; +begin + c_stream.zalloc := NIL; + c_stream.zfree := NIL; + c_stream.opaque := NIL; + + err := deflateInit(c_stream, Z_BEST_SPEED); + CHECK_ERR(err, 'deflateInit'); + + c_stream.next_out := compr; + c_stream.avail_out := Integer(comprLen); + + (* At this point, uncompr is still mostly zeroes, so it should compress + * very well: + *) + c_stream.next_in := uncompr; + c_stream.avail_in := Integer(uncomprLen); + err := deflate(c_stream, Z_NO_FLUSH); + CHECK_ERR(err, 'deflate'); + if c_stream.avail_in <> 0 then + EXIT_ERR('deflate not greedy'); + + (* Feed in already compressed data and switch to no compression: *) + deflateParams(c_stream, Z_NO_COMPRESSION, Z_DEFAULT_STRATEGY); + c_stream.next_in := compr; + c_stream.avail_in := Integer(comprLen div 2); + err := deflate(c_stream, Z_NO_FLUSH); + CHECK_ERR(err, 'deflate'); + + (* Switch back to compressing mode: *) + deflateParams(c_stream, Z_BEST_COMPRESSION, Z_FILTERED); + c_stream.next_in := uncompr; + c_stream.avail_in := Integer(uncomprLen); + err := deflate(c_stream, Z_NO_FLUSH); + CHECK_ERR(err, 'deflate'); + + err := deflate(c_stream, Z_FINISH); + if err <> Z_STREAM_END then + EXIT_ERR('deflate should report Z_STREAM_END'); + + err := deflateEnd(c_stream); + CHECK_ERR(err, 'deflateEnd'); +end; +{$ENDIF} + +(* =========================================================================== + * Test inflate with large buffers + *) +{$IFDEF TEST_INFLATE} +procedure test_large_inflate(compr: Pointer; comprLen: LongInt; + uncompr: Pointer; uncomprLen: LongInt); +var err: Integer; + d_stream: z_stream; (* decompression stream *) +begin + StrCopy(PChar(uncompr), 'garbage'); + + d_stream.zalloc := NIL; + d_stream.zfree := NIL; + d_stream.opaque := NIL; + + d_stream.next_in := compr; + d_stream.avail_in := Integer(comprLen); + + err := inflateInit(d_stream); + CHECK_ERR(err, 'inflateInit'); + + while TRUE do + begin + d_stream.next_out := uncompr; (* discard the output *) + d_stream.avail_out := Integer(uncomprLen); + err := inflate(d_stream, Z_NO_FLUSH); + if err = Z_STREAM_END then + break; + CHECK_ERR(err, 'large inflate'); + end; + + err := inflateEnd(d_stream); + CHECK_ERR(err, 'inflateEnd'); + + if d_stream.total_out <> 2 * uncomprLen + comprLen div 2 then + begin + WriteLn('bad large inflate: ', d_stream.total_out); + Halt(1); + end + else + WriteLn('large_inflate(): OK'); +end; +{$ENDIF} + +(* =========================================================================== + * Test deflate with full flush + *) +{$IFDEF TEST_FLUSH} +procedure test_flush(compr: Pointer; var comprLen : LongInt); +var c_stream: z_stream; (* compression stream *) + err: Integer; + len: Integer; +begin + len := StrLen(hello)+1; + + c_stream.zalloc := NIL; + c_stream.zfree := NIL; + c_stream.opaque := NIL; + + err := deflateInit(c_stream, Z_DEFAULT_COMPRESSION); + CHECK_ERR(err, 'deflateInit'); + + c_stream.next_in := hello; + c_stream.next_out := compr; + c_stream.avail_in := 3; + c_stream.avail_out := Integer(comprLen); + err := deflate(c_stream, Z_FULL_FLUSH); + CHECK_ERR(err, 'deflate'); + + Inc(PByteArray(compr)^[3]); (* force an error in first compressed block *) + c_stream.avail_in := len - 3; + + err := deflate(c_stream, Z_FINISH); + if err <> Z_STREAM_END then + CHECK_ERR(err, 'deflate'); + + err := deflateEnd(c_stream); + CHECK_ERR(err, 'deflateEnd'); + + comprLen := c_stream.total_out; +end; +{$ENDIF} + +(* =========================================================================== + * Test inflateSync() + *) +{$IFDEF TEST_SYNC} +procedure test_sync(compr: Pointer; comprLen: LongInt; + uncompr: Pointer; uncomprLen : LongInt); +var err: Integer; + d_stream: z_stream; (* decompression stream *) +begin + StrCopy(PChar(uncompr), 'garbage'); + + d_stream.zalloc := NIL; + d_stream.zfree := NIL; + d_stream.opaque := NIL; + + d_stream.next_in := compr; + d_stream.avail_in := 2; (* just read the zlib header *) + + err := inflateInit(d_stream); + CHECK_ERR(err, 'inflateInit'); + + d_stream.next_out := uncompr; + d_stream.avail_out := Integer(uncomprLen); + + inflate(d_stream, Z_NO_FLUSH); + CHECK_ERR(err, 'inflate'); + + d_stream.avail_in := Integer(comprLen-2); (* read all compressed data *) + err := inflateSync(d_stream); (* but skip the damaged part *) + CHECK_ERR(err, 'inflateSync'); + + err := inflate(d_stream, Z_FINISH); + if err <> Z_DATA_ERROR then + EXIT_ERR('inflate should report DATA_ERROR'); + (* Because of incorrect adler32 *) + + err := inflateEnd(d_stream); + CHECK_ERR(err, 'inflateEnd'); + + WriteLn('after inflateSync(): hel', PChar(uncompr)); +end; +{$ENDIF} + +(* =========================================================================== + * Test deflate with preset dictionary + *) +{$IFDEF TEST_DICT} +procedure test_dict_deflate(compr: Pointer; comprLen: LongInt); +var c_stream: z_stream; (* compression stream *) + err: Integer; +begin + c_stream.zalloc := NIL; + c_stream.zfree := NIL; + c_stream.opaque := NIL; + + err := deflateInit(c_stream, Z_BEST_COMPRESSION); + CHECK_ERR(err, 'deflateInit'); + + err := deflateSetDictionary(c_stream, dictionary, StrLen(dictionary)); + CHECK_ERR(err, 'deflateSetDictionary'); + + dictId := c_stream.adler; + c_stream.next_out := compr; + c_stream.avail_out := Integer(comprLen); + + c_stream.next_in := hello; + c_stream.avail_in := StrLen(hello)+1; + + err := deflate(c_stream, Z_FINISH); + if err <> Z_STREAM_END then + EXIT_ERR('deflate should report Z_STREAM_END'); + + err := deflateEnd(c_stream); + CHECK_ERR(err, 'deflateEnd'); +end; +{$ENDIF} + +(* =========================================================================== + * Test inflate with a preset dictionary + *) +{$IFDEF TEST_DICT} +procedure test_dict_inflate(compr: Pointer; comprLen: LongInt; + uncompr: Pointer; uncomprLen: LongInt); +var err: Integer; + d_stream: z_stream; (* decompression stream *) +begin + StrCopy(PChar(uncompr), 'garbage'); + + d_stream.zalloc := NIL; + d_stream.zfree := NIL; + d_stream.opaque := NIL; + + d_stream.next_in := compr; + d_stream.avail_in := Integer(comprLen); + + err := inflateInit(d_stream); + CHECK_ERR(err, 'inflateInit'); + + d_stream.next_out := uncompr; + d_stream.avail_out := Integer(uncomprLen); + + while TRUE do + begin + err := inflate(d_stream, Z_NO_FLUSH); + if err = Z_STREAM_END then + break; + if err = Z_NEED_DICT then + begin + if d_stream.adler <> dictId then + EXIT_ERR('unexpected dictionary'); + err := inflateSetDictionary(d_stream, dictionary, StrLen(dictionary)); + end; + CHECK_ERR(err, 'inflate with dict'); + end; + + err := inflateEnd(d_stream); + CHECK_ERR(err, 'inflateEnd'); + + if StrComp(PChar(uncompr), hello) <> 0 then + EXIT_ERR('bad inflate with dict') + else + WriteLn('inflate with dictionary: ', PChar(uncompr)); +end; +{$ENDIF} + +var compr, uncompr: Pointer; + comprLen, uncomprLen: LongInt; + +begin + if zlibVersion^ <> ZLIB_VERSION[1] then + EXIT_ERR('Incompatible zlib version'); + + WriteLn('zlib version: ', zlibVersion); + WriteLn('zlib compile flags: ', Format('0x%x', [zlibCompileFlags])); + + comprLen := 10000 * SizeOf(Integer); (* don't overflow on MSDOS *) + uncomprLen := comprLen; + GetMem(compr, comprLen); + GetMem(uncompr, uncomprLen); + if (compr = NIL) or (uncompr = NIL) then + EXIT_ERR('Out of memory'); + (* compr and uncompr are cleared to avoid reading uninitialized + * data and to ensure that uncompr compresses well. + *) + FillChar(compr^, comprLen, 0); + FillChar(uncompr^, uncomprLen, 0); + + {$IFDEF TEST_COMPRESS} + WriteLn('** Testing compress'); + test_compress(compr, comprLen, uncompr, uncomprLen); + {$ENDIF} + + {$IFDEF TEST_GZIO} + WriteLn('** Testing gzio'); + if ParamCount >= 1 then + test_gzio(ParamStr(1), uncompr, uncomprLen) + else + test_gzio(TESTFILE, uncompr, uncomprLen); + {$ENDIF} + + {$IFDEF TEST_DEFLATE} + WriteLn('** Testing deflate with small buffers'); + test_deflate(compr, comprLen); + {$ENDIF} + {$IFDEF TEST_INFLATE} + WriteLn('** Testing inflate with small buffers'); + test_inflate(compr, comprLen, uncompr, uncomprLen); + {$ENDIF} + + {$IFDEF TEST_DEFLATE} + WriteLn('** Testing deflate with large buffers'); + test_large_deflate(compr, comprLen, uncompr, uncomprLen); + {$ENDIF} + {$IFDEF TEST_INFLATE} + WriteLn('** Testing inflate with large buffers'); + test_large_inflate(compr, comprLen, uncompr, uncomprLen); + {$ENDIF} + + {$IFDEF TEST_FLUSH} + WriteLn('** Testing deflate with full flush'); + test_flush(compr, comprLen); + {$ENDIF} + {$IFDEF TEST_SYNC} + WriteLn('** Testing inflateSync'); + test_sync(compr, comprLen, uncompr, uncomprLen); + {$ENDIF} + comprLen := uncomprLen; + + {$IFDEF TEST_DICT} + WriteLn('** Testing deflate and inflate with preset dictionary'); + test_dict_deflate(compr, comprLen); + test_dict_inflate(compr, comprLen, uncompr, uncomprLen); + {$ENDIF} + + FreeMem(compr, comprLen); + FreeMem(uncompr, uncomprLen); +end. diff --git a/thirdparty/zlib-1.3.1/contrib/pascal/readme.txt b/thirdparty/zlib-1.3.1/contrib/pascal/readme.txt new file mode 100644 index 0000000..60e87c8 --- /dev/null +++ b/thirdparty/zlib-1.3.1/contrib/pascal/readme.txt @@ -0,0 +1,76 @@ + +This directory contains a Pascal (Delphi, Kylix) interface to the +zlib data compression library. + + +Directory listing +================= + +zlibd32.mak makefile for Borland C++ +example.pas usage example of zlib +zlibpas.pas the Pascal interface to zlib +readme.txt this file + + +Compatibility notes +=================== + +- Although the name "zlib" would have been more normal for the + zlibpas unit, this name is already taken by Borland's ZLib unit. + This is somehow unfortunate, because that unit is not a genuine + interface to the full-fledged zlib functionality, but a suite of + class wrappers around zlib streams. Other essential features, + such as checksums, are missing. + It would have been more appropriate for that unit to have a name + like "ZStreams", or something similar. + +- The C and zlib-supplied types int, uInt, long, uLong, etc. are + translated directly into Pascal types of similar sizes (Integer, + LongInt, etc.), to avoid namespace pollution. In particular, + there is no conversion of unsigned int into a Pascal unsigned + integer. The Word type is non-portable and has the same size + (16 bits) both in a 16-bit and in a 32-bit environment, unlike + Integer. Even if there is a 32-bit Cardinal type, there is no + real need for unsigned int in zlib under a 32-bit environment. + +- Except for the callbacks, the zlib function interfaces are + assuming the calling convention normally used in Pascal + (__pascal for DOS and Windows16, __fastcall for Windows32). + Since the cdecl keyword is used, the old Turbo Pascal does + not work with this interface. + +- The gz* function interfaces are not translated, to avoid + interfacing problems with the C runtime library. Besides, + gzprintf(gzFile file, const char *format, ...) + cannot be translated into Pascal. + + +Legal issues +============ + +The zlibpas interface is: + Copyright (C) 1995-2003 Jean-loup Gailly and Mark Adler. + Copyright (C) 1998 by Bob Dellaca. + Copyright (C) 2003 by Cosmin Truta. + +The example program is: + Copyright (C) 1995-2003 by Jean-loup Gailly. + Copyright (C) 1998,1999,2000 by Jacques Nomssi Nzali. + Copyright (C) 2003 by Cosmin Truta. + + This software is provided 'as-is', without any express or implied + warranty. In no event will the author be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. + diff --git a/thirdparty/zlib-1.3.1/contrib/pascal/zlibd32.mak b/thirdparty/zlib-1.3.1/contrib/pascal/zlibd32.mak new file mode 100644 index 0000000..9bb00b7 --- /dev/null +++ b/thirdparty/zlib-1.3.1/contrib/pascal/zlibd32.mak @@ -0,0 +1,99 @@ +# Makefile for zlib +# For use with Delphi and C++ Builder under Win32 +# Updated for zlib 1.2.x by Cosmin Truta + +# ------------ Borland C++ ------------ + +# This project uses the Delphi (fastcall/register) calling convention: +LOC = -DZEXPORT=__fastcall -DZEXPORTVA=__cdecl + +CC = bcc32 +LD = bcc32 +AR = tlib +# do not use "-pr" in CFLAGS +CFLAGS = -a -d -k- -O2 $(LOC) +LDFLAGS = + + +# variables +ZLIB_LIB = zlib.lib + +OBJ1 = adler32.obj compress.obj crc32.obj deflate.obj gzclose.obj gzlib.obj gzread.obj +OBJ2 = gzwrite.obj infback.obj inffast.obj inflate.obj inftrees.obj trees.obj uncompr.obj zutil.obj +OBJP1 = +adler32.obj+compress.obj+crc32.obj+deflate.obj+gzclose.obj+gzlib.obj+gzread.obj +OBJP2 = +gzwrite.obj+infback.obj+inffast.obj+inflate.obj+inftrees.obj+trees.obj+uncompr.obj+zutil.obj + + +# targets +all: $(ZLIB_LIB) example.exe minigzip.exe + +.c.obj: + $(CC) -c $(CFLAGS) $*.c + +adler32.obj: adler32.c zlib.h zconf.h + +compress.obj: compress.c zlib.h zconf.h + +crc32.obj: crc32.c zlib.h zconf.h crc32.h + +deflate.obj: deflate.c deflate.h zutil.h zlib.h zconf.h + +gzclose.obj: gzclose.c zlib.h zconf.h gzguts.h + +gzlib.obj: gzlib.c zlib.h zconf.h gzguts.h + +gzread.obj: gzread.c zlib.h zconf.h gzguts.h + +gzwrite.obj: gzwrite.c zlib.h zconf.h gzguts.h + +infback.obj: infback.c zutil.h zlib.h zconf.h inftrees.h inflate.h \ + inffast.h inffixed.h + +inffast.obj: inffast.c zutil.h zlib.h zconf.h inftrees.h inflate.h \ + inffast.h + +inflate.obj: inflate.c zutil.h zlib.h zconf.h inftrees.h inflate.h \ + inffast.h inffixed.h + +inftrees.obj: inftrees.c zutil.h zlib.h zconf.h inftrees.h + +trees.obj: trees.c zutil.h zlib.h zconf.h deflate.h trees.h + +uncompr.obj: uncompr.c zlib.h zconf.h + +zutil.obj: zutil.c zutil.h zlib.h zconf.h + +example.obj: test/example.c zlib.h zconf.h + +minigzip.obj: test/minigzip.c zlib.h zconf.h + + +# For the sake of the old Borland make, +# the command line is cut to fit in the MS-DOS 128 byte limit: +$(ZLIB_LIB): $(OBJ1) $(OBJ2) + -del $(ZLIB_LIB) + $(AR) $(ZLIB_LIB) $(OBJP1) + $(AR) $(ZLIB_LIB) $(OBJP2) + + +# testing +test: example.exe minigzip.exe + example + echo hello world | minigzip | minigzip -d + +example.exe: example.obj $(ZLIB_LIB) + $(LD) $(LDFLAGS) example.obj $(ZLIB_LIB) + +minigzip.exe: minigzip.obj $(ZLIB_LIB) + $(LD) $(LDFLAGS) minigzip.obj $(ZLIB_LIB) + + +# cleanup +clean: + -del *.obj + -del *.exe + -del *.lib + -del *.tds + -del zlib.bak + -del foo.gz + diff --git a/thirdparty/zlib-1.3.1/contrib/pascal/zlibpas.pas b/thirdparty/zlib-1.3.1/contrib/pascal/zlibpas.pas new file mode 100644 index 0000000..0cf0e7b --- /dev/null +++ b/thirdparty/zlib-1.3.1/contrib/pascal/zlibpas.pas @@ -0,0 +1,276 @@ +(* zlibpas -- Pascal interface to the zlib data compression library + * + * Copyright (C) 2003 Cosmin Truta. + * Derived from original sources by Bob Dellaca. + * For conditions of distribution and use, see copyright notice in readme.txt + *) + +unit zlibpas; + +interface + +const + ZLIB_VERSION = '1.3.1'; + ZLIB_VERNUM = $12a0; + +type + alloc_func = function(opaque: Pointer; items, size: Integer): Pointer; + cdecl; + free_func = procedure(opaque, address: Pointer); + cdecl; + + in_func = function(opaque: Pointer; var buf: PByte): Integer; + cdecl; + out_func = function(opaque: Pointer; buf: PByte; size: Integer): Integer; + cdecl; + + z_streamp = ^z_stream; + z_stream = packed record + next_in: PChar; (* next input byte *) + avail_in: Integer; (* number of bytes available at next_in *) + total_in: LongInt; (* total nb of input bytes read so far *) + + next_out: PChar; (* next output byte should be put there *) + avail_out: Integer; (* remaining free space at next_out *) + total_out: LongInt; (* total nb of bytes output so far *) + + msg: PChar; (* last error message, NULL if no error *) + state: Pointer; (* not visible by applications *) + + zalloc: alloc_func; (* used to allocate the internal state *) + zfree: free_func; (* used to free the internal state *) + opaque: Pointer; (* private data object passed to zalloc and zfree *) + + data_type: Integer; (* best guess about the data type: ascii or binary *) + adler: LongInt; (* adler32 value of the uncompressed data *) + reserved: LongInt; (* reserved for future use *) + end; + + gz_headerp = ^gz_header; + gz_header = packed record + text: Integer; (* true if compressed data believed to be text *) + time: LongInt; (* modification time *) + xflags: Integer; (* extra flags (not used when writing a gzip file) *) + os: Integer; (* operating system *) + extra: PChar; (* pointer to extra field or Z_NULL if none *) + extra_len: Integer; (* extra field length (valid if extra != Z_NULL) *) + extra_max: Integer; (* space at extra (only when reading header) *) + name: PChar; (* pointer to zero-terminated file name or Z_NULL *) + name_max: Integer; (* space at name (only when reading header) *) + comment: PChar; (* pointer to zero-terminated comment or Z_NULL *) + comm_max: Integer; (* space at comment (only when reading header) *) + hcrc: Integer; (* true if there was or will be a header crc *) + done: Integer; (* true when done reading gzip header *) + end; + +(* constants *) +const + Z_NO_FLUSH = 0; + Z_PARTIAL_FLUSH = 1; + Z_SYNC_FLUSH = 2; + Z_FULL_FLUSH = 3; + Z_FINISH = 4; + Z_BLOCK = 5; + Z_TREES = 6; + + Z_OK = 0; + Z_STREAM_END = 1; + Z_NEED_DICT = 2; + Z_ERRNO = -1; + Z_STREAM_ERROR = -2; + Z_DATA_ERROR = -3; + Z_MEM_ERROR = -4; + Z_BUF_ERROR = -5; + Z_VERSION_ERROR = -6; + + Z_NO_COMPRESSION = 0; + Z_BEST_SPEED = 1; + Z_BEST_COMPRESSION = 9; + Z_DEFAULT_COMPRESSION = -1; + + Z_FILTERED = 1; + Z_HUFFMAN_ONLY = 2; + Z_RLE = 3; + Z_FIXED = 4; + Z_DEFAULT_STRATEGY = 0; + + Z_BINARY = 0; + Z_TEXT = 1; + Z_ASCII = 1; + Z_UNKNOWN = 2; + + Z_DEFLATED = 8; + +(* basic functions *) +function zlibVersion: PChar; +function deflateInit(var strm: z_stream; level: Integer): Integer; +function deflate(var strm: z_stream; flush: Integer): Integer; +function deflateEnd(var strm: z_stream): Integer; +function inflateInit(var strm: z_stream): Integer; +function inflate(var strm: z_stream; flush: Integer): Integer; +function inflateEnd(var strm: z_stream): Integer; + +(* advanced functions *) +function deflateInit2(var strm: z_stream; level, method, windowBits, + memLevel, strategy: Integer): Integer; +function deflateSetDictionary(var strm: z_stream; const dictionary: PChar; + dictLength: Integer): Integer; +function deflateCopy(var dest, source: z_stream): Integer; +function deflateReset(var strm: z_stream): Integer; +function deflateParams(var strm: z_stream; level, strategy: Integer): Integer; +function deflateTune(var strm: z_stream; good_length, max_lazy, nice_length, max_chain: Integer): Integer; +function deflateBound(var strm: z_stream; sourceLen: LongInt): LongInt; +function deflatePending(var strm: z_stream; var pending: Integer; var bits: Integer): Integer; +function deflatePrime(var strm: z_stream; bits, value: Integer): Integer; +function deflateSetHeader(var strm: z_stream; head: gz_header): Integer; +function inflateInit2(var strm: z_stream; windowBits: Integer): Integer; +function inflateSetDictionary(var strm: z_stream; const dictionary: PChar; + dictLength: Integer): Integer; +function inflateSync(var strm: z_stream): Integer; +function inflateCopy(var dest, source: z_stream): Integer; +function inflateReset(var strm: z_stream): Integer; +function inflateReset2(var strm: z_stream; windowBits: Integer): Integer; +function inflatePrime(var strm: z_stream; bits, value: Integer): Integer; +function inflateMark(var strm: z_stream): LongInt; +function inflateGetHeader(var strm: z_stream; var head: gz_header): Integer; +function inflateBackInit(var strm: z_stream; + windowBits: Integer; window: PChar): Integer; +function inflateBack(var strm: z_stream; in_fn: in_func; in_desc: Pointer; + out_fn: out_func; out_desc: Pointer): Integer; +function inflateBackEnd(var strm: z_stream): Integer; +function zlibCompileFlags: LongInt; + +(* utility functions *) +function compress(dest: PChar; var destLen: LongInt; + const source: PChar; sourceLen: LongInt): Integer; +function compress2(dest: PChar; var destLen: LongInt; + const source: PChar; sourceLen: LongInt; + level: Integer): Integer; +function compressBound(sourceLen: LongInt): LongInt; +function uncompress(dest: PChar; var destLen: LongInt; + const source: PChar; sourceLen: LongInt): Integer; + +(* checksum functions *) +function adler32(adler: LongInt; const buf: PChar; len: Integer): LongInt; +function adler32_combine(adler1, adler2, len2: LongInt): LongInt; +function crc32(crc: LongInt; const buf: PChar; len: Integer): LongInt; +function crc32_combine(crc1, crc2, len2: LongInt): LongInt; + +(* various hacks, don't look :) *) +function deflateInit_(var strm: z_stream; level: Integer; + const version: PChar; stream_size: Integer): Integer; +function inflateInit_(var strm: z_stream; const version: PChar; + stream_size: Integer): Integer; +function deflateInit2_(var strm: z_stream; + level, method, windowBits, memLevel, strategy: Integer; + const version: PChar; stream_size: Integer): Integer; +function inflateInit2_(var strm: z_stream; windowBits: Integer; + const version: PChar; stream_size: Integer): Integer; +function inflateBackInit_(var strm: z_stream; + windowBits: Integer; window: PChar; + const version: PChar; stream_size: Integer): Integer; + + +implementation + +{$L adler32.obj} +{$L compress.obj} +{$L crc32.obj} +{$L deflate.obj} +{$L infback.obj} +{$L inffast.obj} +{$L inflate.obj} +{$L inftrees.obj} +{$L trees.obj} +{$L uncompr.obj} +{$L zutil.obj} + +function adler32; external; +function adler32_combine; external; +function compress; external; +function compress2; external; +function compressBound; external; +function crc32; external; +function crc32_combine; external; +function deflate; external; +function deflateBound; external; +function deflateCopy; external; +function deflateEnd; external; +function deflateInit_; external; +function deflateInit2_; external; +function deflateParams; external; +function deflatePending; external; +function deflatePrime; external; +function deflateReset; external; +function deflateSetDictionary; external; +function deflateSetHeader; external; +function deflateTune; external; +function inflate; external; +function inflateBack; external; +function inflateBackEnd; external; +function inflateBackInit_; external; +function inflateCopy; external; +function inflateEnd; external; +function inflateGetHeader; external; +function inflateInit_; external; +function inflateInit2_; external; +function inflateMark; external; +function inflatePrime; external; +function inflateReset; external; +function inflateReset2; external; +function inflateSetDictionary; external; +function inflateSync; external; +function uncompress; external; +function zlibCompileFlags; external; +function zlibVersion; external; + +function deflateInit(var strm: z_stream; level: Integer): Integer; +begin + Result := deflateInit_(strm, level, ZLIB_VERSION, sizeof(z_stream)); +end; + +function deflateInit2(var strm: z_stream; level, method, windowBits, memLevel, + strategy: Integer): Integer; +begin + Result := deflateInit2_(strm, level, method, windowBits, memLevel, strategy, + ZLIB_VERSION, sizeof(z_stream)); +end; + +function inflateInit(var strm: z_stream): Integer; +begin + Result := inflateInit_(strm, ZLIB_VERSION, sizeof(z_stream)); +end; + +function inflateInit2(var strm: z_stream; windowBits: Integer): Integer; +begin + Result := inflateInit2_(strm, windowBits, ZLIB_VERSION, sizeof(z_stream)); +end; + +function inflateBackInit(var strm: z_stream; + windowBits: Integer; window: PChar): Integer; +begin + Result := inflateBackInit_(strm, windowBits, window, + ZLIB_VERSION, sizeof(z_stream)); +end; + +function _malloc(Size: Integer): Pointer; cdecl; +begin + GetMem(Result, Size); +end; + +procedure _free(Block: Pointer); cdecl; +begin + FreeMem(Block); +end; + +procedure _memset(P: Pointer; B: Byte; count: Integer); cdecl; +begin + FillChar(P^, count, B); +end; + +procedure _memcpy(dest, source: Pointer; count: Integer); cdecl; +begin + Move(source^, dest^, count); +end; + +end. diff --git a/thirdparty/zlib-1.3.1/contrib/puff/Makefile b/thirdparty/zlib-1.3.1/contrib/puff/Makefile new file mode 100644 index 0000000..0e2594c --- /dev/null +++ b/thirdparty/zlib-1.3.1/contrib/puff/Makefile @@ -0,0 +1,42 @@ +CFLAGS=-O + +puff: puff.o pufftest.o + +puff.o: puff.h + +pufftest.o: puff.h + +test: puff + puff zeros.raw + +puft: puff.c puff.h pufftest.o + cc -fprofile-arcs -ftest-coverage -o puft puff.c pufftest.o + +# puff full coverage test (should say 100%) +cov: puft + @rm -f *.gcov *.gcda + @puft -w zeros.raw 2>&1 | cat > /dev/null + @echo '04' | xxd -r -p | puft 2> /dev/null || test $$? -eq 2 + @echo '00' | xxd -r -p | puft 2> /dev/null || test $$? -eq 2 + @echo '00 00 00 00 00' | xxd -r -p | puft 2> /dev/null || test $$? -eq 254 + @echo '00 01 00 fe ff' | xxd -r -p | puft 2> /dev/null || test $$? -eq 2 + @echo '01 01 00 fe ff 0a' | xxd -r -p | puft -f 2>&1 | cat > /dev/null + @echo '02 7e ff ff' | xxd -r -p | puft 2> /dev/null || test $$? -eq 246 + @echo '02' | xxd -r -p | puft 2> /dev/null || test $$? -eq 2 + @echo '04 80 49 92 24 49 92 24 0f b4 ff ff c3 04' | xxd -r -p | puft 2> /dev/null || test $$? -eq 2 + @echo '04 80 49 92 24 49 92 24 71 ff ff 93 11 00' | xxd -r -p | puft 2> /dev/null || test $$? -eq 249 + @echo '04 c0 81 08 00 00 00 00 20 7f eb 0b 00 00' | xxd -r -p | puft 2> /dev/null || test $$? -eq 246 + @echo '0b 00 00' | xxd -r -p | puft -f 2>&1 | cat > /dev/null + @echo '1a 07' | xxd -r -p | puft 2> /dev/null || test $$? -eq 246 + @echo '0c c0 81 00 00 00 00 00 90 ff 6b 04' | xxd -r -p | puft 2> /dev/null || test $$? -eq 245 + @puft -f zeros.raw 2>&1 | cat > /dev/null + @echo 'fc 00 00' | xxd -r -p | puft 2> /dev/null || test $$? -eq 253 + @echo '04 00 fe ff' | xxd -r -p | puft 2> /dev/null || test $$? -eq 252 + @echo '04 00 24 49' | xxd -r -p | puft 2> /dev/null || test $$? -eq 251 + @echo '04 80 49 92 24 49 92 24 0f b4 ff ff c3 84' | xxd -r -p | puft 2> /dev/null || test $$? -eq 248 + @echo '04 00 24 e9 ff ff' | xxd -r -p | puft 2> /dev/null || test $$? -eq 250 + @echo '04 00 24 e9 ff 6d' | xxd -r -p | puft 2> /dev/null || test $$? -eq 247 + @gcov -n puff.c + +clean: + rm -f puff puft *.o *.gc* diff --git a/thirdparty/zlib-1.3.1/contrib/puff/README b/thirdparty/zlib-1.3.1/contrib/puff/README new file mode 100644 index 0000000..d8192c7 --- /dev/null +++ b/thirdparty/zlib-1.3.1/contrib/puff/README @@ -0,0 +1,63 @@ +Puff -- A Simple Inflate +3 Mar 2003 +Mark Adler +madler@alumni.caltech.edu + +What this is -- + +puff.c provides the routine puff() to decompress the deflate data format. It +does so more slowly than zlib, but the code is about one-fifth the size of the +inflate code in zlib, and written to be very easy to read. + +Why I wrote this -- + +puff.c was written to document the deflate format unambiguously, by virtue of +being working C code. It is meant to supplement RFC 1951, which formally +describes the deflate format. I have received many questions on details of the +deflate format, and I hope that reading this code will answer those questions. +puff.c is heavily commented with details of the deflate format, especially +those little nooks and cranies of the format that might not be obvious from a +specification. + +puff.c may also be useful in applications where code size or memory usage is a +very limited resource, and speed is not as important. + +How to use it -- + +Well, most likely you should just be reading puff.c and using zlib for actual +applications, but if you must ... + +Include puff.h in your code, which provides this prototype: + +int puff(unsigned char *dest, /* pointer to destination pointer */ + unsigned long *destlen, /* amount of output space */ + unsigned char *source, /* pointer to source data pointer */ + unsigned long *sourcelen); /* amount of input available */ + +Then you can call puff() to decompress a deflate stream that is in memory in +its entirety at source, to a sufficiently sized block of memory for the +decompressed data at dest. puff() is the only external symbol in puff.c The +only C library functions that puff.c needs are setjmp() and longjmp(), which +are used to simplify error checking in the code to improve readability. puff.c +does no memory allocation, and uses less than 2K bytes off of the stack. + +If destlen is not enough space for the uncompressed data, then inflate will +return an error without writing more than destlen bytes. Note that this means +that in order to decompress the deflate data successfully, you need to know +the size of the uncompressed data ahead of time. + +If needed, puff() can determine the size of the uncompressed data with no +output space. This is done by passing dest equal to (unsigned char *)0. Then +the initial value of *destlen is ignored and *destlen is set to the length of +the uncompressed data. So if the size of the uncompressed data is not known, +then two passes of puff() can be used--first to determine the size, and second +to do the actual inflation after allocating the appropriate memory. Not +pretty, but it works. (This is one of the reasons you should be using zlib.) + +The deflate format is self-terminating. If the deflate stream does not end +in *sourcelen bytes, puff() will return an error without reading at or past +endsource. + +On return, *sourcelen is updated to the amount of input data consumed, and +*destlen is updated to the size of the uncompressed data. See the comments +in puff.c for the possible return codes for puff(). diff --git a/thirdparty/zlib-1.3.1/contrib/puff/puff.c b/thirdparty/zlib-1.3.1/contrib/puff/puff.c new file mode 100644 index 0000000..d759825 --- /dev/null +++ b/thirdparty/zlib-1.3.1/contrib/puff/puff.c @@ -0,0 +1,840 @@ +/* + * puff.c + * Copyright (C) 2002-2013 Mark Adler + * For conditions of distribution and use, see copyright notice in puff.h + * version 2.3, 21 Jan 2013 + * + * puff.c is a simple inflate written to be an unambiguous way to specify the + * deflate format. It is not written for speed but rather simplicity. As a + * side benefit, this code might actually be useful when small code is more + * important than speed, such as bootstrap applications. For typical deflate + * data, zlib's inflate() is about four times as fast as puff(). zlib's + * inflate compiles to around 20K on my machine, whereas puff.c compiles to + * around 4K on my machine (a PowerPC using GNU cc). If the faster decode() + * function here is used, then puff() is only twice as slow as zlib's + * inflate(). + * + * All dynamically allocated memory comes from the stack. The stack required + * is less than 2K bytes. This code is compatible with 16-bit int's and + * assumes that long's are at least 32 bits. puff.c uses the short data type, + * assumed to be 16 bits, for arrays in order to conserve memory. The code + * works whether integers are stored big endian or little endian. + * + * In the comments below are "Format notes" that describe the inflate process + * and document some of the less obvious aspects of the format. This source + * code is meant to supplement RFC 1951, which formally describes the deflate + * format: + * + * http://www.zlib.org/rfc-deflate.html + */ + +/* + * Change history: + * + * 1.0 10 Feb 2002 - First version + * 1.1 17 Feb 2002 - Clarifications of some comments and notes + * - Update puff() dest and source pointers on negative + * errors to facilitate debugging deflators + * - Remove longest from struct huffman -- not needed + * - Simplify offs[] index in construct() + * - Add input size and checking, using longjmp() to + * maintain easy readability + * - Use short data type for large arrays + * - Use pointers instead of long to specify source and + * destination sizes to avoid arbitrary 4 GB limits + * 1.2 17 Mar 2002 - Add faster version of decode(), doubles speed (!), + * but leave simple version for readability + * - Make sure invalid distances detected if pointers + * are 16 bits + * - Fix fixed codes table error + * - Provide a scanning mode for determining size of + * uncompressed data + * 1.3 20 Mar 2002 - Go back to lengths for puff() parameters [Gailly] + * - Add a puff.h file for the interface + * - Add braces in puff() for else do [Gailly] + * - Use indexes instead of pointers for readability + * 1.4 31 Mar 2002 - Simplify construct() code set check + * - Fix some comments + * - Add FIXLCODES #define + * 1.5 6 Apr 2002 - Minor comment fixes + * 1.6 7 Aug 2002 - Minor format changes + * 1.7 3 Mar 2003 - Added test code for distribution + * - Added zlib-like license + * 1.8 9 Jan 2004 - Added some comments on no distance codes case + * 1.9 21 Feb 2008 - Fix bug on 16-bit integer architectures [Pohland] + * - Catch missing end-of-block symbol error + * 2.0 25 Jul 2008 - Add #define to permit distance too far back + * - Add option in TEST code for puff to write the data + * - Add option in TEST code to skip input bytes + * - Allow TEST code to read from piped stdin + * 2.1 4 Apr 2010 - Avoid variable initialization for happier compilers + * - Avoid unsigned comparisons for even happier compilers + * 2.2 25 Apr 2010 - Fix bug in variable initializations [Oberhumer] + * - Add const where appropriate [Oberhumer] + * - Split if's and ?'s for coverage testing + * - Break out test code to separate file + * - Move NIL to puff.h + * - Allow incomplete code only if single code length is 1 + * - Add full code coverage test to Makefile + * 2.3 21 Jan 2013 - Check for invalid code length codes in dynamic blocks + */ + +#include /* for setjmp(), longjmp(), and jmp_buf */ +#include "puff.h" /* prototype for puff() */ + +#define local static /* for local function definitions */ + +/* + * Maximums for allocations and loops. It is not useful to change these -- + * they are fixed by the deflate format. + */ +#define MAXBITS 15 /* maximum bits in a code */ +#define MAXLCODES 286 /* maximum number of literal/length codes */ +#define MAXDCODES 30 /* maximum number of distance codes */ +#define MAXCODES (MAXLCODES+MAXDCODES) /* maximum codes lengths to read */ +#define FIXLCODES 288 /* number of fixed literal/length codes */ + +/* input and output state */ +struct state { + /* output state */ + unsigned char *out; /* output buffer */ + unsigned long outlen; /* available space at out */ + unsigned long outcnt; /* bytes written to out so far */ + + /* input state */ + const unsigned char *in; /* input buffer */ + unsigned long inlen; /* available input at in */ + unsigned long incnt; /* bytes read so far */ + int bitbuf; /* bit buffer */ + int bitcnt; /* number of bits in bit buffer */ + + /* input limit error return state for bits() and decode() */ + jmp_buf env; +}; + +/* + * Return need bits from the input stream. This always leaves less than + * eight bits in the buffer. bits() works properly for need == 0. + * + * Format notes: + * + * - Bits are stored in bytes from the least significant bit to the most + * significant bit. Therefore bits are dropped from the bottom of the bit + * buffer, using shift right, and new bytes are appended to the top of the + * bit buffer, using shift left. + */ +local int bits(struct state *s, int need) +{ + long val; /* bit accumulator (can use up to 20 bits) */ + + /* load at least need bits into val */ + val = s->bitbuf; + while (s->bitcnt < need) { + if (s->incnt == s->inlen) + longjmp(s->env, 1); /* out of input */ + val |= (long)(s->in[s->incnt++]) << s->bitcnt; /* load eight bits */ + s->bitcnt += 8; + } + + /* drop need bits and update buffer, always zero to seven bits left */ + s->bitbuf = (int)(val >> need); + s->bitcnt -= need; + + /* return need bits, zeroing the bits above that */ + return (int)(val & ((1L << need) - 1)); +} + +/* + * Process a stored block. + * + * Format notes: + * + * - After the two-bit stored block type (00), the stored block length and + * stored bytes are byte-aligned for fast copying. Therefore any leftover + * bits in the byte that has the last bit of the type, as many as seven, are + * discarded. The value of the discarded bits are not defined and should not + * be checked against any expectation. + * + * - The second inverted copy of the stored block length does not have to be + * checked, but it's probably a good idea to do so anyway. + * + * - A stored block can have zero length. This is sometimes used to byte-align + * subsets of the compressed data for random access or partial recovery. + */ +local int stored(struct state *s) +{ + unsigned len; /* length of stored block */ + + /* discard leftover bits from current byte (assumes s->bitcnt < 8) */ + s->bitbuf = 0; + s->bitcnt = 0; + + /* get length and check against its one's complement */ + if (s->incnt + 4 > s->inlen) + return 2; /* not enough input */ + len = s->in[s->incnt++]; + len |= s->in[s->incnt++] << 8; + if (s->in[s->incnt++] != (~len & 0xff) || + s->in[s->incnt++] != ((~len >> 8) & 0xff)) + return -2; /* didn't match complement! */ + + /* copy len bytes from in to out */ + if (s->incnt + len > s->inlen) + return 2; /* not enough input */ + if (s->out != NIL) { + if (s->outcnt + len > s->outlen) + return 1; /* not enough output space */ + while (len--) + s->out[s->outcnt++] = s->in[s->incnt++]; + } + else { /* just scanning */ + s->outcnt += len; + s->incnt += len; + } + + /* done with a valid stored block */ + return 0; +} + +/* + * Huffman code decoding tables. count[1..MAXBITS] is the number of symbols of + * each length, which for a canonical code are stepped through in order. + * symbol[] are the symbol values in canonical order, where the number of + * entries is the sum of the counts in count[]. The decoding process can be + * seen in the function decode() below. + */ +struct huffman { + short *count; /* number of symbols of each length */ + short *symbol; /* canonically ordered symbols */ +}; + +/* + * Decode a code from the stream s using huffman table h. Return the symbol or + * a negative value if there is an error. If all of the lengths are zero, i.e. + * an empty code, or if the code is incomplete and an invalid code is received, + * then -10 is returned after reading MAXBITS bits. + * + * Format notes: + * + * - The codes as stored in the compressed data are bit-reversed relative to + * a simple integer ordering of codes of the same lengths. Hence below the + * bits are pulled from the compressed data one at a time and used to + * build the code value reversed from what is in the stream in order to + * permit simple integer comparisons for decoding. A table-based decoding + * scheme (as used in zlib) does not need to do this reversal. + * + * - The first code for the shortest length is all zeros. Subsequent codes of + * the same length are simply integer increments of the previous code. When + * moving up a length, a zero bit is appended to the code. For a complete + * code, the last code of the longest length will be all ones. + * + * - Incomplete codes are handled by this decoder, since they are permitted + * in the deflate format. See the format notes for fixed() and dynamic(). + */ +#ifdef SLOW +local int decode(struct state *s, const struct huffman *h) +{ + int len; /* current number of bits in code */ + int code; /* len bits being decoded */ + int first; /* first code of length len */ + int count; /* number of codes of length len */ + int index; /* index of first code of length len in symbol table */ + + code = first = index = 0; + for (len = 1; len <= MAXBITS; len++) { + code |= bits(s, 1); /* get next bit */ + count = h->count[len]; + if (code - count < first) /* if length len, return symbol */ + return h->symbol[index + (code - first)]; + index += count; /* else update for next length */ + first += count; + first <<= 1; + code <<= 1; + } + return -10; /* ran out of codes */ +} + +/* + * A faster version of decode() for real applications of this code. It's not + * as readable, but it makes puff() twice as fast. And it only makes the code + * a few percent larger. + */ +#else /* !SLOW */ +local int decode(struct state *s, const struct huffman *h) +{ + int len; /* current number of bits in code */ + int code; /* len bits being decoded */ + int first; /* first code of length len */ + int count; /* number of codes of length len */ + int index; /* index of first code of length len in symbol table */ + int bitbuf; /* bits from stream */ + int left; /* bits left in next or left to process */ + short *next; /* next number of codes */ + + bitbuf = s->bitbuf; + left = s->bitcnt; + code = first = index = 0; + len = 1; + next = h->count + 1; + while (1) { + while (left--) { + code |= bitbuf & 1; + bitbuf >>= 1; + count = *next++; + if (code - count < first) { /* if length len, return symbol */ + s->bitbuf = bitbuf; + s->bitcnt = (s->bitcnt - len) & 7; + return h->symbol[index + (code - first)]; + } + index += count; /* else update for next length */ + first += count; + first <<= 1; + code <<= 1; + len++; + } + left = (MAXBITS+1) - len; + if (left == 0) + break; + if (s->incnt == s->inlen) + longjmp(s->env, 1); /* out of input */ + bitbuf = s->in[s->incnt++]; + if (left > 8) + left = 8; + } + return -10; /* ran out of codes */ +} +#endif /* SLOW */ + +/* + * Given the list of code lengths length[0..n-1] representing a canonical + * Huffman code for n symbols, construct the tables required to decode those + * codes. Those tables are the number of codes of each length, and the symbols + * sorted by length, retaining their original order within each length. The + * return value is zero for a complete code set, negative for an over- + * subscribed code set, and positive for an incomplete code set. The tables + * can be used if the return value is zero or positive, but they cannot be used + * if the return value is negative. If the return value is zero, it is not + * possible for decode() using that table to return an error--any stream of + * enough bits will resolve to a symbol. If the return value is positive, then + * it is possible for decode() using that table to return an error for received + * codes past the end of the incomplete lengths. + * + * Not used by decode(), but used for error checking, h->count[0] is the number + * of the n symbols not in the code. So n - h->count[0] is the number of + * codes. This is useful for checking for incomplete codes that have more than + * one symbol, which is an error in a dynamic block. + * + * Assumption: for all i in 0..n-1, 0 <= length[i] <= MAXBITS + * This is assured by the construction of the length arrays in dynamic() and + * fixed() and is not verified by construct(). + * + * Format notes: + * + * - Permitted and expected examples of incomplete codes are one of the fixed + * codes and any code with a single symbol which in deflate is coded as one + * bit instead of zero bits. See the format notes for fixed() and dynamic(). + * + * - Within a given code length, the symbols are kept in ascending order for + * the code bits definition. + */ +local int construct(struct huffman *h, const short *length, int n) +{ + int symbol; /* current symbol when stepping through length[] */ + int len; /* current length when stepping through h->count[] */ + int left; /* number of possible codes left of current length */ + short offs[MAXBITS+1]; /* offsets in symbol table for each length */ + + /* count number of codes of each length */ + for (len = 0; len <= MAXBITS; len++) + h->count[len] = 0; + for (symbol = 0; symbol < n; symbol++) + (h->count[length[symbol]])++; /* assumes lengths are within bounds */ + if (h->count[0] == n) /* no codes! */ + return 0; /* complete, but decode() will fail */ + + /* check for an over-subscribed or incomplete set of lengths */ + left = 1; /* one possible code of zero length */ + for (len = 1; len <= MAXBITS; len++) { + left <<= 1; /* one more bit, double codes left */ + left -= h->count[len]; /* deduct count from possible codes */ + if (left < 0) + return left; /* over-subscribed--return negative */ + } /* left > 0 means incomplete */ + + /* generate offsets into symbol table for each length for sorting */ + offs[1] = 0; + for (len = 1; len < MAXBITS; len++) + offs[len + 1] = offs[len] + h->count[len]; + + /* + * put symbols in table sorted by length, by symbol order within each + * length + */ + for (symbol = 0; symbol < n; symbol++) + if (length[symbol] != 0) + h->symbol[offs[length[symbol]]++] = symbol; + + /* return zero for complete set, positive for incomplete set */ + return left; +} + +/* + * Decode literal/length and distance codes until an end-of-block code. + * + * Format notes: + * + * - Compressed data that is after the block type if fixed or after the code + * description if dynamic is a combination of literals and length/distance + * pairs terminated by and end-of-block code. Literals are simply Huffman + * coded bytes. A length/distance pair is a coded length followed by a + * coded distance to represent a string that occurs earlier in the + * uncompressed data that occurs again at the current location. + * + * - Literals, lengths, and the end-of-block code are combined into a single + * code of up to 286 symbols. They are 256 literals (0..255), 29 length + * symbols (257..285), and the end-of-block symbol (256). + * + * - There are 256 possible lengths (3..258), and so 29 symbols are not enough + * to represent all of those. Lengths 3..10 and 258 are in fact represented + * by just a length symbol. Lengths 11..257 are represented as a symbol and + * some number of extra bits that are added as an integer to the base length + * of the length symbol. The number of extra bits is determined by the base + * length symbol. These are in the static arrays below, lens[] for the base + * lengths and lext[] for the corresponding number of extra bits. + * + * - The reason that 258 gets its own symbol is that the longest length is used + * often in highly redundant files. Note that 258 can also be coded as the + * base value 227 plus the maximum extra value of 31. While a good deflate + * should never do this, it is not an error, and should be decoded properly. + * + * - If a length is decoded, including its extra bits if any, then it is + * followed a distance code. There are up to 30 distance symbols. Again + * there are many more possible distances (1..32768), so extra bits are added + * to a base value represented by the symbol. The distances 1..4 get their + * own symbol, but the rest require extra bits. The base distances and + * corresponding number of extra bits are below in the static arrays dist[] + * and dext[]. + * + * - Literal bytes are simply written to the output. A length/distance pair is + * an instruction to copy previously uncompressed bytes to the output. The + * copy is from distance bytes back in the output stream, copying for length + * bytes. + * + * - Distances pointing before the beginning of the output data are not + * permitted. + * + * - Overlapped copies, where the length is greater than the distance, are + * allowed and common. For example, a distance of one and a length of 258 + * simply copies the last byte 258 times. A distance of four and a length of + * twelve copies the last four bytes three times. A simple forward copy + * ignoring whether the length is greater than the distance or not implements + * this correctly. You should not use memcpy() since its behavior is not + * defined for overlapped arrays. You should not use memmove() or bcopy() + * since though their behavior -is- defined for overlapping arrays, it is + * defined to do the wrong thing in this case. + */ +local int codes(struct state *s, + const struct huffman *lencode, + const struct huffman *distcode) +{ + int symbol; /* decoded symbol */ + int len; /* length for copy */ + unsigned dist; /* distance for copy */ + static const short lens[29] = { /* Size base for length codes 257..285 */ + 3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 23, 27, 31, + 35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258}; + static const short lext[29] = { /* Extra bits for length codes 257..285 */ + 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, + 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 0}; + static const short dists[30] = { /* Offset base for distance codes 0..29 */ + 1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193, + 257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145, + 8193, 12289, 16385, 24577}; + static const short dext[30] = { /* Extra bits for distance codes 0..29 */ + 0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, + 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, + 12, 12, 13, 13}; + + /* decode literals and length/distance pairs */ + do { + symbol = decode(s, lencode); + if (symbol < 0) + return symbol; /* invalid symbol */ + if (symbol < 256) { /* literal: symbol is the byte */ + /* write out the literal */ + if (s->out != NIL) { + if (s->outcnt == s->outlen) + return 1; + s->out[s->outcnt] = symbol; + } + s->outcnt++; + } + else if (symbol > 256) { /* length */ + /* get and compute length */ + symbol -= 257; + if (symbol >= 29) + return -10; /* invalid fixed code */ + len = lens[symbol] + bits(s, lext[symbol]); + + /* get and check distance */ + symbol = decode(s, distcode); + if (symbol < 0) + return symbol; /* invalid symbol */ + dist = dists[symbol] + bits(s, dext[symbol]); +#ifndef INFLATE_ALLOW_INVALID_DISTANCE_TOOFAR_ARRR + if (dist > s->outcnt) + return -11; /* distance too far back */ +#endif + + /* copy length bytes from distance bytes back */ + if (s->out != NIL) { + if (s->outcnt + len > s->outlen) + return 1; + while (len--) { + s->out[s->outcnt] = +#ifdef INFLATE_ALLOW_INVALID_DISTANCE_TOOFAR_ARRR + dist > s->outcnt ? + 0 : +#endif + s->out[s->outcnt - dist]; + s->outcnt++; + } + } + else + s->outcnt += len; + } + } while (symbol != 256); /* end of block symbol */ + + /* done with a valid fixed or dynamic block */ + return 0; +} + +/* + * Process a fixed codes block. + * + * Format notes: + * + * - This block type can be useful for compressing small amounts of data for + * which the size of the code descriptions in a dynamic block exceeds the + * benefit of custom codes for that block. For fixed codes, no bits are + * spent on code descriptions. Instead the code lengths for literal/length + * codes and distance codes are fixed. The specific lengths for each symbol + * can be seen in the "for" loops below. + * + * - The literal/length code is complete, but has two symbols that are invalid + * and should result in an error if received. This cannot be implemented + * simply as an incomplete code since those two symbols are in the "middle" + * of the code. They are eight bits long and the longest literal/length\ + * code is nine bits. Therefore the code must be constructed with those + * symbols, and the invalid symbols must be detected after decoding. + * + * - The fixed distance codes also have two invalid symbols that should result + * in an error if received. Since all of the distance codes are the same + * length, this can be implemented as an incomplete code. Then the invalid + * codes are detected while decoding. + */ +local int fixed(struct state *s) +{ + static int virgin = 1; + static short lencnt[MAXBITS+1], lensym[FIXLCODES]; + static short distcnt[MAXBITS+1], distsym[MAXDCODES]; + static struct huffman lencode, distcode; + + /* build fixed huffman tables if first call (may not be thread safe) */ + if (virgin) { + int symbol; + short lengths[FIXLCODES]; + + /* construct lencode and distcode */ + lencode.count = lencnt; + lencode.symbol = lensym; + distcode.count = distcnt; + distcode.symbol = distsym; + + /* literal/length table */ + for (symbol = 0; symbol < 144; symbol++) + lengths[symbol] = 8; + for (; symbol < 256; symbol++) + lengths[symbol] = 9; + for (; symbol < 280; symbol++) + lengths[symbol] = 7; + for (; symbol < FIXLCODES; symbol++) + lengths[symbol] = 8; + construct(&lencode, lengths, FIXLCODES); + + /* distance table */ + for (symbol = 0; symbol < MAXDCODES; symbol++) + lengths[symbol] = 5; + construct(&distcode, lengths, MAXDCODES); + + /* do this just once */ + virgin = 0; + } + + /* decode data until end-of-block code */ + return codes(s, &lencode, &distcode); +} + +/* + * Process a dynamic codes block. + * + * Format notes: + * + * - A dynamic block starts with a description of the literal/length and + * distance codes for that block. New dynamic blocks allow the compressor to + * rapidly adapt to changing data with new codes optimized for that data. + * + * - The codes used by the deflate format are "canonical", which means that + * the actual bits of the codes are generated in an unambiguous way simply + * from the number of bits in each code. Therefore the code descriptions + * are simply a list of code lengths for each symbol. + * + * - The code lengths are stored in order for the symbols, so lengths are + * provided for each of the literal/length symbols, and for each of the + * distance symbols. + * + * - If a symbol is not used in the block, this is represented by a zero as the + * code length. This does not mean a zero-length code, but rather that no + * code should be created for this symbol. There is no way in the deflate + * format to represent a zero-length code. + * + * - The maximum number of bits in a code is 15, so the possible lengths for + * any code are 1..15. + * + * - The fact that a length of zero is not permitted for a code has an + * interesting consequence. Normally if only one symbol is used for a given + * code, then in fact that code could be represented with zero bits. However + * in deflate, that code has to be at least one bit. So for example, if + * only a single distance base symbol appears in a block, then it will be + * represented by a single code of length one, in particular one 0 bit. This + * is an incomplete code, since if a 1 bit is received, it has no meaning, + * and should result in an error. So incomplete distance codes of one symbol + * should be permitted, and the receipt of invalid codes should be handled. + * + * - It is also possible to have a single literal/length code, but that code + * must be the end-of-block code, since every dynamic block has one. This + * is not the most efficient way to create an empty block (an empty fixed + * block is fewer bits), but it is allowed by the format. So incomplete + * literal/length codes of one symbol should also be permitted. + * + * - If there are only literal codes and no lengths, then there are no distance + * codes. This is represented by one distance code with zero bits. + * + * - The list of up to 286 length/literal lengths and up to 30 distance lengths + * are themselves compressed using Huffman codes and run-length encoding. In + * the list of code lengths, a 0 symbol means no code, a 1..15 symbol means + * that length, and the symbols 16, 17, and 18 are run-length instructions. + * Each of 16, 17, and 18 are followed by extra bits to define the length of + * the run. 16 copies the last length 3 to 6 times. 17 represents 3 to 10 + * zero lengths, and 18 represents 11 to 138 zero lengths. Unused symbols + * are common, hence the special coding for zero lengths. + * + * - The symbols for 0..18 are Huffman coded, and so that code must be + * described first. This is simply a sequence of up to 19 three-bit values + * representing no code (0) or the code length for that symbol (1..7). + * + * - A dynamic block starts with three fixed-size counts from which is computed + * the number of literal/length code lengths, the number of distance code + * lengths, and the number of code length code lengths (ok, you come up with + * a better name!) in the code descriptions. For the literal/length and + * distance codes, lengths after those provided are considered zero, i.e. no + * code. The code length code lengths are received in a permuted order (see + * the order[] array below) to make a short code length code length list more + * likely. As it turns out, very short and very long codes are less likely + * to be seen in a dynamic code description, hence what may appear initially + * to be a peculiar ordering. + * + * - Given the number of literal/length code lengths (nlen) and distance code + * lengths (ndist), then they are treated as one long list of nlen + ndist + * code lengths. Therefore run-length coding can and often does cross the + * boundary between the two sets of lengths. + * + * - So to summarize, the code description at the start of a dynamic block is + * three counts for the number of code lengths for the literal/length codes, + * the distance codes, and the code length codes. This is followed by the + * code length code lengths, three bits each. This is used to construct the + * code length code which is used to read the remainder of the lengths. Then + * the literal/length code lengths and distance lengths are read as a single + * set of lengths using the code length codes. Codes are constructed from + * the resulting two sets of lengths, and then finally you can start + * decoding actual compressed data in the block. + * + * - For reference, a "typical" size for the code description in a dynamic + * block is around 80 bytes. + */ +local int dynamic(struct state *s) +{ + int nlen, ndist, ncode; /* number of lengths in descriptor */ + int index; /* index of lengths[] */ + int err; /* construct() return value */ + short lengths[MAXCODES]; /* descriptor code lengths */ + short lencnt[MAXBITS+1], lensym[MAXLCODES]; /* lencode memory */ + short distcnt[MAXBITS+1], distsym[MAXDCODES]; /* distcode memory */ + struct huffman lencode, distcode; /* length and distance codes */ + static const short order[19] = /* permutation of code length codes */ + {16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15}; + + /* construct lencode and distcode */ + lencode.count = lencnt; + lencode.symbol = lensym; + distcode.count = distcnt; + distcode.symbol = distsym; + + /* get number of lengths in each table, check lengths */ + nlen = bits(s, 5) + 257; + ndist = bits(s, 5) + 1; + ncode = bits(s, 4) + 4; + if (nlen > MAXLCODES || ndist > MAXDCODES) + return -3; /* bad counts */ + + /* read code length code lengths (really), missing lengths are zero */ + for (index = 0; index < ncode; index++) + lengths[order[index]] = bits(s, 3); + for (; index < 19; index++) + lengths[order[index]] = 0; + + /* build huffman table for code lengths codes (use lencode temporarily) */ + err = construct(&lencode, lengths, 19); + if (err != 0) /* require complete code set here */ + return -4; + + /* read length/literal and distance code length tables */ + index = 0; + while (index < nlen + ndist) { + int symbol; /* decoded value */ + int len; /* last length to repeat */ + + symbol = decode(s, &lencode); + if (symbol < 0) + return symbol; /* invalid symbol */ + if (symbol < 16) /* length in 0..15 */ + lengths[index++] = symbol; + else { /* repeat instruction */ + len = 0; /* assume repeating zeros */ + if (symbol == 16) { /* repeat last length 3..6 times */ + if (index == 0) + return -5; /* no last length! */ + len = lengths[index - 1]; /* last length */ + symbol = 3 + bits(s, 2); + } + else if (symbol == 17) /* repeat zero 3..10 times */ + symbol = 3 + bits(s, 3); + else /* == 18, repeat zero 11..138 times */ + symbol = 11 + bits(s, 7); + if (index + symbol > nlen + ndist) + return -6; /* too many lengths! */ + while (symbol--) /* repeat last or zero symbol times */ + lengths[index++] = len; + } + } + + /* check for end-of-block code -- there better be one! */ + if (lengths[256] == 0) + return -9; + + /* build huffman table for literal/length codes */ + err = construct(&lencode, lengths, nlen); + if (err && (err < 0 || nlen != lencode.count[0] + lencode.count[1])) + return -7; /* incomplete code ok only for single length 1 code */ + + /* build huffman table for distance codes */ + err = construct(&distcode, lengths + nlen, ndist); + if (err && (err < 0 || ndist != distcode.count[0] + distcode.count[1])) + return -8; /* incomplete code ok only for single length 1 code */ + + /* decode data until end-of-block code */ + return codes(s, &lencode, &distcode); +} + +/* + * Inflate source to dest. On return, destlen and sourcelen are updated to the + * size of the uncompressed data and the size of the deflate data respectively. + * On success, the return value of puff() is zero. If there is an error in the + * source data, i.e. it is not in the deflate format, then a negative value is + * returned. If there is not enough input available or there is not enough + * output space, then a positive error is returned. In that case, destlen and + * sourcelen are not updated to facilitate retrying from the beginning with the + * provision of more input data or more output space. In the case of invalid + * inflate data (a negative error), the dest and source pointers are updated to + * facilitate the debugging of deflators. + * + * puff() also has a mode to determine the size of the uncompressed output with + * no output written. For this dest must be (unsigned char *)0. In this case, + * the input value of *destlen is ignored, and on return *destlen is set to the + * size of the uncompressed output. + * + * The return codes are: + * + * 2: available inflate data did not terminate + * 1: output space exhausted before completing inflate + * 0: successful inflate + * -1: invalid block type (type == 3) + * -2: stored block length did not match one's complement + * -3: dynamic block code description: too many length or distance codes + * -4: dynamic block code description: code lengths codes incomplete + * -5: dynamic block code description: repeat lengths with no first length + * -6: dynamic block code description: repeat more than specified lengths + * -7: dynamic block code description: invalid literal/length code lengths + * -8: dynamic block code description: invalid distance code lengths + * -9: dynamic block code description: missing end-of-block code + * -10: invalid literal/length or distance code in fixed or dynamic block + * -11: distance is too far back in fixed or dynamic block + * + * Format notes: + * + * - Three bits are read for each block to determine the kind of block and + * whether or not it is the last block. Then the block is decoded and the + * process repeated if it was not the last block. + * + * - The leftover bits in the last byte of the deflate data after the last + * block (if it was a fixed or dynamic block) are undefined and have no + * expected values to check. + */ +int puff(unsigned char *dest, /* pointer to destination pointer */ + unsigned long *destlen, /* amount of output space */ + const unsigned char *source, /* pointer to source data pointer */ + unsigned long *sourcelen) /* amount of input available */ +{ + struct state s; /* input/output state */ + int last, type; /* block information */ + int err; /* return value */ + + /* initialize output state */ + s.out = dest; + s.outlen = *destlen; /* ignored if dest is NIL */ + s.outcnt = 0; + + /* initialize input state */ + s.in = source; + s.inlen = *sourcelen; + s.incnt = 0; + s.bitbuf = 0; + s.bitcnt = 0; + + /* return if bits() or decode() tries to read past available input */ + if (setjmp(s.env) != 0) /* if came back here via longjmp() */ + err = 2; /* then skip do-loop, return error */ + else { + /* process blocks until last block or error */ + do { + last = bits(&s, 1); /* one if last block */ + type = bits(&s, 2); /* block type 0..3 */ + err = type == 0 ? + stored(&s) : + (type == 1 ? + fixed(&s) : + (type == 2 ? + dynamic(&s) : + -1)); /* type == 3, invalid */ + if (err != 0) + break; /* return with error */ + } while (!last); + } + + /* update the lengths and return */ + if (err <= 0) { + *destlen = s.outcnt; + *sourcelen = s.incnt; + } + return err; +} diff --git a/thirdparty/zlib-1.3.1/contrib/puff/puff.h b/thirdparty/zlib-1.3.1/contrib/puff/puff.h new file mode 100644 index 0000000..e23a245 --- /dev/null +++ b/thirdparty/zlib-1.3.1/contrib/puff/puff.h @@ -0,0 +1,35 @@ +/* puff.h + Copyright (C) 2002-2013 Mark Adler, all rights reserved + version 2.3, 21 Jan 2013 + + This software is provided 'as-is', without any express or implied + warranty. In no event will the author be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. + + Mark Adler madler@alumni.caltech.edu + */ + + +/* + * See puff.c for purpose and usage. + */ +#ifndef NIL +# define NIL ((unsigned char *)0) /* for no output option */ +#endif + +int puff(unsigned char *dest, /* pointer to destination pointer */ + unsigned long *destlen, /* amount of output space */ + const unsigned char *source, /* pointer to source data pointer */ + unsigned long *sourcelen); /* amount of input available */ diff --git a/thirdparty/zlib-1.3.1/contrib/puff/pufftest.c b/thirdparty/zlib-1.3.1/contrib/puff/pufftest.c new file mode 100644 index 0000000..5f72ecc --- /dev/null +++ b/thirdparty/zlib-1.3.1/contrib/puff/pufftest.c @@ -0,0 +1,165 @@ +/* + * pufftest.c + * Copyright (C) 2002-2013 Mark Adler + * For conditions of distribution and use, see copyright notice in puff.h + * version 2.3, 21 Jan 2013 + */ + +/* Example of how to use puff(). + + Usage: puff [-w] [-f] [-nnn] file + ... | puff [-w] [-f] [-nnn] + + where file is the input file with deflate data, nnn is the number of bytes + of input to skip before inflating (e.g. to skip a zlib or gzip header), and + -w is used to write the decompressed data to stdout. -f is for coverage + testing, and causes pufftest to fail with not enough output space (-f does + a write like -w, so -w is not required). */ + +#include +#include +#include "puff.h" + +#if defined(MSDOS) || defined(OS2) || defined(WIN32) || defined(__CYGWIN__) +# include +# include +# define SET_BINARY_MODE(file) setmode(fileno(file), O_BINARY) +#else +# define SET_BINARY_MODE(file) +#endif + +#define local static + +/* Return size times approximately the cube root of 2, keeping the result as 1, + 3, or 5 times a power of 2 -- the result is always > size, until the result + is the maximum value of an unsigned long, where it remains. This is useful + to keep reallocations less than ~33% over the actual data. */ +local size_t bythirds(size_t size) +{ + int n; + size_t m; + + m = size; + for (n = 0; m; n++) + m >>= 1; + if (n < 3) + return size + 1; + n -= 3; + m = size >> n; + m += m == 6 ? 2 : 1; + m <<= n; + return m > size ? m : (size_t)(-1); +} + +/* Read the input file *name, or stdin if name is NULL, into allocated memory. + Reallocate to larger buffers until the entire file is read in. Return a + pointer to the allocated data, or NULL if there was a memory allocation + failure. *len is the number of bytes of data read from the input file (even + if load() returns NULL). If the input file was empty or could not be opened + or read, *len is zero. */ +local void *load(const char *name, size_t *len) +{ + size_t size; + void *buf, *swap; + FILE *in; + + *len = 0; + buf = malloc(size = 4096); + if (buf == NULL) + return NULL; + in = name == NULL ? stdin : fopen(name, "rb"); + if (in != NULL) { + for (;;) { + *len += fread((char *)buf + *len, 1, size - *len, in); + if (*len < size) break; + size = bythirds(size); + if (size == *len || (swap = realloc(buf, size)) == NULL) { + free(buf); + buf = NULL; + break; + } + buf = swap; + } + fclose(in); + } + return buf; +} + +int main(int argc, char **argv) +{ + int ret, put = 0, fail = 0; + unsigned skip = 0; + char *arg, *name = NULL; + unsigned char *source = NULL, *dest; + size_t len = 0; + unsigned long sourcelen, destlen; + + /* process arguments */ + while (arg = *++argv, --argc) + if (arg[0] == '-') { + if (arg[1] == 'w' && arg[2] == 0) + put = 1; + else if (arg[1] == 'f' && arg[2] == 0) + fail = 1, put = 1; + else if (arg[1] >= '0' && arg[1] <= '9') + skip = (unsigned)atoi(arg + 1); + else { + fprintf(stderr, "invalid option %s\n", arg); + return 3; + } + } + else if (name != NULL) { + fprintf(stderr, "only one file name allowed\n"); + return 3; + } + else + name = arg; + source = load(name, &len); + if (source == NULL) { + fprintf(stderr, "memory allocation failure\n"); + return 4; + } + if (len == 0) { + fprintf(stderr, "could not read %s, or it was empty\n", + name == NULL ? "" : name); + free(source); + return 3; + } + if (skip >= len) { + fprintf(stderr, "skip request of %d leaves no input\n", skip); + free(source); + return 3; + } + + /* test inflate data with offset skip */ + len -= skip; + sourcelen = (unsigned long)len; + ret = puff(NIL, &destlen, source + skip, &sourcelen); + if (ret) + fprintf(stderr, "puff() failed with return code %d\n", ret); + else { + fprintf(stderr, "puff() succeeded uncompressing %lu bytes\n", destlen); + if (sourcelen < len) fprintf(stderr, "%lu compressed bytes unused\n", + len - sourcelen); + } + + /* if requested, inflate again and write decompressed data to stdout */ + if (put && ret == 0) { + if (fail) + destlen >>= 1; + dest = malloc(destlen); + if (dest == NULL) { + fprintf(stderr, "memory allocation failure\n"); + free(source); + return 4; + } + puff(dest, &destlen, source + skip, &sourcelen); + SET_BINARY_MODE(stdout); + fwrite(dest, 1, destlen, stdout); + free(dest); + } + + /* clean up */ + free(source); + return ret; +} diff --git a/thirdparty/zlib-1.3.1/contrib/puff/zeros.raw b/thirdparty/zlib-1.3.1/contrib/puff/zeros.raw new file mode 100644 index 0000000000000000000000000000000000000000..0a90e76b300205a44a0ecbf613e64aaaef2e51e7 GIT binary patch literal 2517 zcmYdFkYHV$AkxzmXu#!mP=i#?5{3o^3jqcYc(h*%Opg+yAut*OqaiT#LSPd+y9&tF zP5<`ixi4UXdB8xJfs^6ee;AkH?VUytyFsD;HLIJ(gg5bUnNh}Q2#kinXb22!2pr%5 E0JRq+;s5{u literal 0 HcmV?d00001 diff --git a/thirdparty/zlib-1.3.1/contrib/testzlib/testzlib.c b/thirdparty/zlib-1.3.1/contrib/testzlib/testzlib.c new file mode 100644 index 0000000..b3c0014 --- /dev/null +++ b/thirdparty/zlib-1.3.1/contrib/testzlib/testzlib.c @@ -0,0 +1,275 @@ +#include +#include +#include + +#include "zlib.h" + + +void MyDoMinus64(LARGE_INTEGER *R,LARGE_INTEGER A,LARGE_INTEGER B) +{ + R->HighPart = A.HighPart - B.HighPart; + if (A.LowPart >= B.LowPart) + R->LowPart = A.LowPart - B.LowPart; + else + { + R->LowPart = A.LowPart - B.LowPart; + R->HighPart --; + } +} + +#ifdef _M_X64 +// see http://msdn2.microsoft.com/library/twchhe95(en-us,vs.80).aspx for __rdtsc +unsigned __int64 __rdtsc(void); +void BeginCountRdtsc(LARGE_INTEGER * pbeginTime64) +{ + // printf("rdtsc = %I64x\n",__rdtsc()); + pbeginTime64->QuadPart=__rdtsc(); +} + +LARGE_INTEGER GetResRdtsc(LARGE_INTEGER beginTime64,BOOL fComputeTimeQueryPerf) +{ + LARGE_INTEGER LIres; + unsigned _int64 res=__rdtsc()-((unsigned _int64)(beginTime64.QuadPart)); + LIres.QuadPart=res; + // printf("rdtsc = %I64x\n",__rdtsc()); + return LIres; +} +#else +#ifdef _M_IX86 +void myGetRDTSC32(LARGE_INTEGER * pbeginTime64) +{ + DWORD dwEdx,dwEax; + _asm + { + rdtsc + mov dwEax,eax + mov dwEdx,edx + } + pbeginTime64->LowPart=dwEax; + pbeginTime64->HighPart=dwEdx; +} + +void BeginCountRdtsc(LARGE_INTEGER * pbeginTime64) +{ + myGetRDTSC32(pbeginTime64); +} + +LARGE_INTEGER GetResRdtsc(LARGE_INTEGER beginTime64,BOOL fComputeTimeQueryPerf) +{ + LARGE_INTEGER LIres,endTime64; + myGetRDTSC32(&endTime64); + + LIres.LowPart=LIres.HighPart=0; + MyDoMinus64(&LIres,endTime64,beginTime64); + return LIres; +} +#else +void myGetRDTSC32(LARGE_INTEGER * pbeginTime64) +{ +} + +void BeginCountRdtsc(LARGE_INTEGER * pbeginTime64) +{ +} + +LARGE_INTEGER GetResRdtsc(LARGE_INTEGER beginTime64,BOOL fComputeTimeQueryPerf) +{ + LARGE_INTEGER lr; + lr.QuadPart=0; + return lr; +} +#endif +#endif + +void BeginCountPerfCounter(LARGE_INTEGER * pbeginTime64,BOOL fComputeTimeQueryPerf) +{ + if ((!fComputeTimeQueryPerf) || (!QueryPerformanceCounter(pbeginTime64))) + { + pbeginTime64->LowPart = GetTickCount(); + pbeginTime64->HighPart = 0; + } +} + +DWORD GetMsecSincePerfCounter(LARGE_INTEGER beginTime64,BOOL fComputeTimeQueryPerf) +{ + LARGE_INTEGER endTime64,ticksPerSecond,ticks; + DWORDLONG ticksShifted,tickSecShifted; + DWORD dwLog=16+0; + DWORD dwRet; + if ((!fComputeTimeQueryPerf) || (!QueryPerformanceCounter(&endTime64))) + dwRet = (GetTickCount() - beginTime64.LowPart)*1; + else + { + MyDoMinus64(&ticks,endTime64,beginTime64); + QueryPerformanceFrequency(&ticksPerSecond); + + + { + ticksShifted = Int64ShrlMod32(*(DWORDLONG*)&ticks,dwLog); + tickSecShifted = Int64ShrlMod32(*(DWORDLONG*)&ticksPerSecond,dwLog); + + } + + dwRet = (DWORD)((((DWORD)ticksShifted)*1000)/(DWORD)(tickSecShifted)); + dwRet *=1; + } + return dwRet; +} + +int ReadFileMemory(const char* filename,long* plFileSize,unsigned char** pFilePtr) +{ + FILE* stream; + unsigned char* ptr; + int retVal=1; + stream=fopen(filename, "rb"); + if (stream==NULL) + return 0; + + fseek(stream,0,SEEK_END); + + *plFileSize=ftell(stream); + fseek(stream,0,SEEK_SET); + ptr=malloc((*plFileSize)+1); + if (ptr==NULL) + retVal=0; + else + { + if (fread(ptr, 1, *plFileSize,stream) != (*plFileSize)) + retVal=0; + } + fclose(stream); + *pFilePtr=ptr; + return retVal; +} + +int main(int argc, char *argv[]) +{ + int BlockSizeCompress=0x8000; + int BlockSizeUncompress=0x8000; + int cprLevel=Z_DEFAULT_COMPRESSION ; + long lFileSize; + unsigned char* FilePtr; + long lBufferSizeCpr; + long lBufferSizeUncpr; + long lCompressedSize=0; + unsigned char* CprPtr; + unsigned char* UncprPtr; + long lSizeCpr,lSizeUncpr; + DWORD dwGetTick,dwMsecQP; + LARGE_INTEGER li_qp,li_rdtsc,dwResRdtsc; + + if (argc<=1) + { + printf("run TestZlib [BlockSizeCompress] [BlockSizeUncompress] [compres. level]\n"); + return 0; + } + + if (ReadFileMemory(argv[1],&lFileSize,&FilePtr)==0) + { + printf("error reading %s\n",argv[1]); + return 1; + } + else printf("file %s read, %ld bytes\n",argv[1],lFileSize); + + if (argc>=3) + BlockSizeCompress=atol(argv[2]); + + if (argc>=4) + BlockSizeUncompress=atol(argv[3]); + + if (argc>=5) + cprLevel=(int)atol(argv[4]); + + lBufferSizeCpr = lFileSize + (lFileSize/0x10) + 0x200; + lBufferSizeUncpr = lBufferSizeCpr; + + CprPtr=(unsigned char*)malloc(lBufferSizeCpr + BlockSizeCompress); + + BeginCountPerfCounter(&li_qp,TRUE); + dwGetTick=GetTickCount(); + BeginCountRdtsc(&li_rdtsc); + { + z_stream zcpr; + int ret=Z_OK; + long lOrigToDo = lFileSize; + long lOrigDone = 0; + int step=0; + memset(&zcpr,0,sizeof(z_stream)); + deflateInit(&zcpr,cprLevel); + + zcpr.next_in = FilePtr; + zcpr.next_out = CprPtr; + + + do + { + long all_read_before = zcpr.total_in; + zcpr.avail_in = min(lOrigToDo,BlockSizeCompress); + zcpr.avail_out = BlockSizeCompress; + ret=deflate(&zcpr,(zcpr.avail_in==lOrigToDo) ? Z_FINISH : Z_SYNC_FLUSH); + lOrigDone += (zcpr.total_in-all_read_before); + lOrigToDo -= (zcpr.total_in-all_read_before); + step++; + } while (ret==Z_OK); + + lSizeCpr=zcpr.total_out; + deflateEnd(&zcpr); + dwGetTick=GetTickCount()-dwGetTick; + dwMsecQP=GetMsecSincePerfCounter(li_qp,TRUE); + dwResRdtsc=GetResRdtsc(li_rdtsc,TRUE); + printf("total compress size = %u, in %u step\n",lSizeCpr,step); + printf("time = %u msec = %f sec\n",dwGetTick,dwGetTick/(double)1000.); + printf("defcpr time QP = %u msec = %f sec\n",dwMsecQP,dwMsecQP/(double)1000.); + printf("defcpr result rdtsc = %I64x\n\n",dwResRdtsc.QuadPart); + } + + CprPtr=(unsigned char*)realloc(CprPtr,lSizeCpr); + UncprPtr=(unsigned char*)malloc(lBufferSizeUncpr + BlockSizeUncompress); + + BeginCountPerfCounter(&li_qp,TRUE); + dwGetTick=GetTickCount(); + BeginCountRdtsc(&li_rdtsc); + { + z_stream zcpr; + int ret=Z_OK; + long lOrigToDo = lSizeCpr; + long lOrigDone = 0; + int step=0; + memset(&zcpr,0,sizeof(z_stream)); + inflateInit(&zcpr); + + zcpr.next_in = CprPtr; + zcpr.next_out = UncprPtr; + + + do + { + long all_read_before = zcpr.total_in; + zcpr.avail_in = min(lOrigToDo,BlockSizeUncompress); + zcpr.avail_out = BlockSizeUncompress; + ret=inflate(&zcpr,Z_SYNC_FLUSH); + lOrigDone += (zcpr.total_in-all_read_before); + lOrigToDo -= (zcpr.total_in-all_read_before); + step++; + } while (ret==Z_OK); + + lSizeUncpr=zcpr.total_out; + inflateEnd(&zcpr); + dwGetTick=GetTickCount()-dwGetTick; + dwMsecQP=GetMsecSincePerfCounter(li_qp,TRUE); + dwResRdtsc=GetResRdtsc(li_rdtsc,TRUE); + printf("total uncompress size = %u, in %u step\n",lSizeUncpr,step); + printf("time = %u msec = %f sec\n",dwGetTick,dwGetTick/(double)1000.); + printf("uncpr time QP = %u msec = %f sec\n",dwMsecQP,dwMsecQP/(double)1000.); + printf("uncpr result rdtsc = %I64x\n\n",dwResRdtsc.QuadPart); + } + + if (lSizeUncpr==lFileSize) + { + if (memcmp(FilePtr,UncprPtr,lFileSize)==0) + printf("compare ok\n"); + + } + + return 0; +} diff --git a/thirdparty/zlib-1.3.1/contrib/testzlib/testzlib.txt b/thirdparty/zlib-1.3.1/contrib/testzlib/testzlib.txt new file mode 100644 index 0000000..62258f1 --- /dev/null +++ b/thirdparty/zlib-1.3.1/contrib/testzlib/testzlib.txt @@ -0,0 +1,10 @@ +To build testzLib with Visual Studio 2005: + +copy to a directory file from : +- root of zLib tree +- contrib/testzlib +- contrib/masmx86 +- contrib/masmx64 +- contrib/vstudio/vc7 + +and open testzlib8.sln \ No newline at end of file diff --git a/thirdparty/zlib-1.3.1/contrib/untgz/Makefile b/thirdparty/zlib-1.3.1/contrib/untgz/Makefile new file mode 100644 index 0000000..b54266f --- /dev/null +++ b/thirdparty/zlib-1.3.1/contrib/untgz/Makefile @@ -0,0 +1,14 @@ +CC=cc +CFLAGS=-g + +untgz: untgz.o ../../libz.a + $(CC) $(CFLAGS) -o untgz untgz.o -L../.. -lz + +untgz.o: untgz.c ../../zlib.h + $(CC) $(CFLAGS) -c -I../.. untgz.c + +../../libz.a: + cd ../..; ./configure; make + +clean: + rm -f untgz untgz.o *~ diff --git a/thirdparty/zlib-1.3.1/contrib/untgz/Makefile.msc b/thirdparty/zlib-1.3.1/contrib/untgz/Makefile.msc new file mode 100644 index 0000000..77b8602 --- /dev/null +++ b/thirdparty/zlib-1.3.1/contrib/untgz/Makefile.msc @@ -0,0 +1,17 @@ +CC=cl +CFLAGS=-MD + +untgz.exe: untgz.obj ..\..\zlib.lib + $(CC) $(CFLAGS) untgz.obj ..\..\zlib.lib + +untgz.obj: untgz.c ..\..\zlib.h + $(CC) $(CFLAGS) -c -I..\.. untgz.c + +..\..\zlib.lib: + cd ..\.. + $(MAKE) -f win32\makefile.msc + cd contrib\untgz + +clean: + -del untgz.obj + -del untgz.exe diff --git a/thirdparty/zlib-1.3.1/contrib/untgz/untgz.c b/thirdparty/zlib-1.3.1/contrib/untgz/untgz.c new file mode 100644 index 0000000..7857921 --- /dev/null +++ b/thirdparty/zlib-1.3.1/contrib/untgz/untgz.c @@ -0,0 +1,667 @@ +/* + * untgz.c -- Display contents and extract files from a gzip'd TAR file + * + * written by Pedro A. Aranda Gutierrez + * adaptation to Unix by Jean-loup Gailly + * various fixes by Cosmin Truta + * + * This software is provided 'as-is', without any express or implied + * warranty. In no event will the authors be held liable for any damages + * arising from the use of this software. + * + * Permission is granted to anyone to use this software for any purpose, + * including commercial applications, and to alter it and redistribute it + * freely, subject to the following restrictions: + * + * 1. The origin of this software must not be misrepresented; you must not + * claim that you wrote the original software. If you use this software + * in a product, an acknowledgment in the product documentation would be + * appreciated but is not required. + * 2. Altered source versions must be plainly marked as such, and must not be + * misrepresented as being the original software. + * 3. This notice may not be removed or altered from any source distribution. + */ + +#include +#include +#include +#include +#include + +#include "zlib.h" + +#ifdef _WIN32 +# include +# include +# include +# ifndef F_OK +# define F_OK 0 +# endif +# define mkdir(dirname,mode) _mkdir(dirname) +# ifdef _MSC_VER +# define access(path,mode) _access(path,mode) +# define chmod(path,mode) _chmod(path,mode) +# define strdup(str) _strdup(str) +# endif +#else +# include +# include +# include +#endif + + +/* values used in typeflag field */ + +#define REGTYPE '0' /* regular file */ +#define AREGTYPE '\0' /* regular file */ +#define LNKTYPE '1' /* link */ +#define SYMTYPE '2' /* reserved */ +#define CHRTYPE '3' /* character special */ +#define BLKTYPE '4' /* block special */ +#define DIRTYPE '5' /* directory */ +#define FIFOTYPE '6' /* FIFO special */ +#define CONTTYPE '7' /* reserved */ + +/* GNU tar extensions */ + +#define GNUTYPE_DUMPDIR 'D' /* file names from dumped directory */ +#define GNUTYPE_LONGLINK 'K' /* long link name */ +#define GNUTYPE_LONGNAME 'L' /* long file name */ +#define GNUTYPE_MULTIVOL 'M' /* continuation of file from another volume */ +#define GNUTYPE_NAMES 'N' /* file name that does not fit into main hdr */ +#define GNUTYPE_SPARSE 'S' /* sparse file */ +#define GNUTYPE_VOLHDR 'V' /* tape/volume header */ + + +/* tar header */ + +#define BLOCKSIZE 512 +#define SHORTNAMESIZE 100 + +struct tar_header +{ /* byte offset */ + char name[100]; /* 0 */ + char mode[8]; /* 100 */ + char uid[8]; /* 108 */ + char gid[8]; /* 116 */ + char size[12]; /* 124 */ + char mtime[12]; /* 136 */ + char chksum[8]; /* 148 */ + char typeflag; /* 156 */ + char linkname[100]; /* 157 */ + char magic[6]; /* 257 */ + char version[2]; /* 263 */ + char uname[32]; /* 265 */ + char gname[32]; /* 297 */ + char devmajor[8]; /* 329 */ + char devminor[8]; /* 337 */ + char prefix[155]; /* 345 */ + /* 500 */ +}; + +union tar_buffer +{ + char buffer[BLOCKSIZE]; + struct tar_header header; +}; + +struct attr_item +{ + struct attr_item *next; + char *fname; + int mode; + time_t time; +}; + +enum { TGZ_EXTRACT, TGZ_LIST, TGZ_INVALID }; + +char *prog; + +void error(const char *msg) +{ + fprintf(stderr, "%s: %s\n", prog, msg); + exit(1); +} + +const char *TGZsuffix[] = { "\0", ".tar", ".tar.gz", ".taz", ".tgz", NULL }; + +/* return the file name of the TGZ archive */ +/* or NULL if it does not exist */ + +char *TGZfname (const char *arcname) +{ + static char buffer[1024]; + int origlen,i; + + strcpy(buffer,arcname); + origlen = strlen(buffer); + + for (i=0; TGZsuffix[i]; i++) + { + strcpy(buffer+origlen,TGZsuffix[i]); + if (access(buffer,F_OK) == 0) + return buffer; + } + return NULL; +} + + +/* error message for the filename */ + +void TGZnotfound (const char *arcname) +{ + int i; + + fprintf(stderr,"%s: Couldn't find ",prog); + for (i=0;TGZsuffix[i];i++) + fprintf(stderr,(TGZsuffix[i+1]) ? "%s%s, " : "or %s%s\n", + arcname, + TGZsuffix[i]); + exit(1); +} + + +/* convert octal digits to int */ +/* on error return -1 */ + +int getoct (char *p,int width) +{ + int result = 0; + char c; + + while (width--) + { + c = *p++; + if (c == 0) + break; + if (c == ' ') + continue; + if (c < '0' || c > '7') + return -1; + result = result * 8 + (c - '0'); + } + return result; +} + + +/* convert time_t to string */ +/* use the "YYYY/MM/DD hh:mm:ss" format */ + +char *strtime (time_t *t) +{ + struct tm *local; + static char result[32]; + + local = localtime(t); + sprintf(result,"%4d/%02d/%02d %02d:%02d:%02d", + local->tm_year+1900, local->tm_mon+1, local->tm_mday, + local->tm_hour, local->tm_min, local->tm_sec); + return result; +} + + +/* set file time */ + +int setfiletime (char *fname,time_t ftime) +{ +#ifdef _WIN32 + static int isWinNT = -1; + SYSTEMTIME st; + FILETIME locft, modft; + struct tm *loctm; + HANDLE hFile; + int result; + + loctm = localtime(&ftime); + if (loctm == NULL) + return -1; + + st.wYear = (WORD)loctm->tm_year + 1900; + st.wMonth = (WORD)loctm->tm_mon + 1; + st.wDayOfWeek = (WORD)loctm->tm_wday; + st.wDay = (WORD)loctm->tm_mday; + st.wHour = (WORD)loctm->tm_hour; + st.wMinute = (WORD)loctm->tm_min; + st.wSecond = (WORD)loctm->tm_sec; + st.wMilliseconds = 0; + if (!SystemTimeToFileTime(&st, &locft) || + !LocalFileTimeToFileTime(&locft, &modft)) + return -1; + + if (isWinNT < 0) + isWinNT = (GetVersion() < 0x80000000) ? 1 : 0; + hFile = CreateFile(fname, GENERIC_WRITE, 0, NULL, OPEN_EXISTING, + (isWinNT ? FILE_FLAG_BACKUP_SEMANTICS : 0), + NULL); + if (hFile == INVALID_HANDLE_VALUE) + return -1; + result = SetFileTime(hFile, NULL, NULL, &modft) ? 0 : -1; + CloseHandle(hFile); + return result; +#else + struct utimbuf settime; + + settime.actime = settime.modtime = ftime; + return utime(fname,&settime); +#endif +} + + +/* push file attributes */ + +void push_attr(struct attr_item **list,char *fname,int mode,time_t time) +{ + struct attr_item *item; + + item = (struct attr_item *)malloc(sizeof(struct attr_item)); + if (item == NULL) + error("Out of memory"); + item->fname = strdup(fname); + item->mode = mode; + item->time = time; + item->next = *list; + *list = item; +} + + +/* restore file attributes */ + +void restore_attr(struct attr_item **list) +{ + struct attr_item *item, *prev; + + for (item = *list; item != NULL; ) + { + setfiletime(item->fname,item->time); + chmod(item->fname,item->mode); + prev = item; + item = item->next; + free(prev); + } + *list = NULL; +} + + +/* match regular expression */ + +#define ISSPECIAL(c) (((c) == '*') || ((c) == '/')) + +int ExprMatch (char *string,char *expr) +{ + while (1) + { + if (ISSPECIAL(*expr)) + { + if (*expr == '/') + { + if (*string != '\\' && *string != '/') + return 0; + string ++; expr++; + } + else if (*expr == '*') + { + if (*expr ++ == 0) + return 1; + while (*++string != *expr) + if (*string == 0) + return 0; + } + } + else + { + if (*string != *expr) + return 0; + if (*expr++ == 0) + return 1; + string++; + } + } +} + + +/* recursive mkdir */ +/* abort on ENOENT; ignore other errors like "directory already exists" */ +/* return 1 if OK */ +/* 0 on error */ + +int makedir (char *newdir) +{ + char *buffer = strdup(newdir); + char *p; + int len = strlen(buffer); + + if (len <= 0) { + free(buffer); + return 0; + } + if (buffer[len-1] == '/') { + buffer[len-1] = '\0'; + } + if (mkdir(buffer, 0755) == 0) + { + free(buffer); + return 1; + } + + p = buffer+1; + while (1) + { + char hold; + + while(*p && *p != '\\' && *p != '/') + p++; + hold = *p; + *p = 0; + if ((mkdir(buffer, 0755) == -1) && (errno == ENOENT)) + { + fprintf(stderr,"%s: Couldn't create directory %s\n",prog,buffer); + free(buffer); + return 0; + } + if (hold == 0) + break; + *p++ = hold; + } + free(buffer); + return 1; +} + + +int matchname (int arg,int argc,char **argv,char *fname) +{ + if (arg == argc) /* no arguments given (untgz tgzarchive) */ + return 1; + + while (arg < argc) + if (ExprMatch(fname,argv[arg++])) + return 1; + + return 0; /* ignore this for the moment being */ +} + + +/* tar file list or extract */ + +int tar (gzFile in,int action,int arg,int argc,char **argv) +{ + union tar_buffer buffer; + int len; + int err; + int getheader = 1; + int remaining = 0; + FILE *outfile = NULL; + char fname[BLOCKSIZE]; + int tarmode; + time_t tartime; + struct attr_item *attributes = NULL; + + if (action == TGZ_LIST) + printf(" date time size file\n" + " ---------- -------- --------- -------------------------------------\n"); + while (1) + { + len = gzread(in, &buffer, BLOCKSIZE); + if (len < 0) + error(gzerror(in, &err)); + /* + * Always expect complete blocks to process + * the tar information. + */ + if (len != BLOCKSIZE) + { + action = TGZ_INVALID; /* force error exit */ + remaining = 0; /* force I/O cleanup */ + } + + /* + * If we have to get a tar header + */ + if (getheader >= 1) + { + /* + * if we met the end of the tar + * or the end-of-tar block, + * we are done + */ + if (len == 0 || buffer.header.name[0] == 0) + break; + + tarmode = getoct(buffer.header.mode,8); + tartime = (time_t)getoct(buffer.header.mtime,12); + if (tarmode == -1 || tartime == (time_t)-1) + { + buffer.header.name[0] = 0; + action = TGZ_INVALID; + } + + if (getheader == 1) + { + strncpy(fname,buffer.header.name,SHORTNAMESIZE); + if (fname[SHORTNAMESIZE-1] != 0) + fname[SHORTNAMESIZE] = 0; + } + else + { + /* + * The file name is longer than SHORTNAMESIZE + */ + if (strncmp(fname,buffer.header.name,SHORTNAMESIZE-1) != 0) + error("bad long name"); + getheader = 1; + } + + /* + * Act according to the type flag + */ + switch (buffer.header.typeflag) + { + case DIRTYPE: + if (action == TGZ_LIST) + printf(" %s %s\n",strtime(&tartime),fname); + if (action == TGZ_EXTRACT) + { + makedir(fname); + push_attr(&attributes,fname,tarmode,tartime); + } + break; + case REGTYPE: + case AREGTYPE: + remaining = getoct(buffer.header.size,12); + if (remaining == -1) + { + action = TGZ_INVALID; + break; + } + if (action == TGZ_LIST) + printf(" %s %9d %s\n",strtime(&tartime),remaining,fname); + else if (action == TGZ_EXTRACT) + { + if (matchname(arg,argc,argv,fname)) + { + outfile = fopen(fname,"wb"); + if (outfile == NULL) { + /* try creating directory */ + char *p = strrchr(fname, '/'); + if (p != NULL) { + *p = '\0'; + makedir(fname); + *p = '/'; + outfile = fopen(fname,"wb"); + } + } + if (outfile != NULL) + printf("Extracting %s\n",fname); + else + fprintf(stderr, "%s: Couldn't create %s",prog,fname); + } + else + outfile = NULL; + } + getheader = 0; + break; + case GNUTYPE_LONGLINK: + case GNUTYPE_LONGNAME: + remaining = getoct(buffer.header.size,12); + if (remaining < 0 || remaining >= BLOCKSIZE) + { + action = TGZ_INVALID; + break; + } + len = gzread(in, fname, BLOCKSIZE); + if (len < 0) + error(gzerror(in, &err)); + if (fname[BLOCKSIZE-1] != 0 || (int)strlen(fname) > remaining) + { + action = TGZ_INVALID; + break; + } + getheader = 2; + break; + default: + if (action == TGZ_LIST) + printf(" %s <---> %s\n",strtime(&tartime),fname); + break; + } + } + else + { + unsigned int bytes = (remaining > BLOCKSIZE) ? BLOCKSIZE : remaining; + + if (outfile != NULL) + { + if (fwrite(&buffer,sizeof(char),bytes,outfile) != bytes) + { + fprintf(stderr, + "%s: Error writing %s -- skipping\n",prog,fname); + fclose(outfile); + outfile = NULL; + remove(fname); + } + } + remaining -= bytes; + } + + if (remaining == 0) + { + getheader = 1; + if (outfile != NULL) + { + fclose(outfile); + outfile = NULL; + if (action != TGZ_INVALID) + push_attr(&attributes,fname,tarmode,tartime); + } + } + + /* + * Abandon if errors are found + */ + if (action == TGZ_INVALID) + { + error("broken archive"); + break; + } + } + + /* + * Restore file modes and time stamps + */ + restore_attr(&attributes); + + if (gzclose(in) != Z_OK) + error("failed gzclose"); + + return 0; +} + + +/* ============================================================ */ + +void help(int exitval) +{ + printf("untgz version 0.2.1\n" + " using zlib version %s\n\n", + zlibVersion()); + printf("Usage: untgz file.tgz extract all files\n" + " untgz file.tgz fname ... extract selected files\n" + " untgz -l file.tgz list archive contents\n" + " untgz -h display this help\n"); + exit(exitval); +} + + +/* ============================================================ */ + +#if defined(WIN32) && defined(__GNUC__) +int _CRT_glob = 0; /* disable argument globbing in MinGW */ +#endif + +int main(int argc,char **argv) +{ + int action = TGZ_EXTRACT; + int arg = 1; + char *TGZfile; + gzFile f; + + prog = strrchr(argv[0],'\\'); + if (prog == NULL) + { + prog = strrchr(argv[0],'/'); + if (prog == NULL) + { + prog = strrchr(argv[0],':'); + if (prog == NULL) + prog = argv[0]; + else + prog++; + } + else + prog++; + } + else + prog++; + + if (argc == 1) + help(0); + + if (strcmp(argv[arg],"-l") == 0) + { + action = TGZ_LIST; + if (argc == ++arg) + help(0); + } + else if (strcmp(argv[arg],"-h") == 0) + { + help(0); + } + + if ((TGZfile = TGZfname(argv[arg])) == NULL) + TGZnotfound(argv[arg]); + + ++arg; + if ((action == TGZ_LIST) && (arg != argc)) + help(1); + +/* + * Process the TGZ file + */ + switch(action) + { + case TGZ_LIST: + case TGZ_EXTRACT: + f = gzopen(TGZfile,"rb"); + if (f == NULL) + { + fprintf(stderr,"%s: Couldn't gzopen %s\n",prog,TGZfile); + return 1; + } + exit(tar(f, action, arg, argc, argv)); + break; + + default: + error("Unknown option"); + exit(1); + } + + return 0; +} diff --git a/thirdparty/zlib-1.3.1/contrib/vstudio/readme.txt b/thirdparty/zlib-1.3.1/contrib/vstudio/readme.txt new file mode 100644 index 0000000..061bbc0 --- /dev/null +++ b/thirdparty/zlib-1.3.1/contrib/vstudio/readme.txt @@ -0,0 +1,81 @@ +Building instructions for the DLL versions of Zlib 1.3.1 +======================================================== + +This directory contains projects that build zlib and minizip using +Microsoft Visual C++ 9.0/10.0. + +You don't need to build these projects yourself. You can download the +binaries from: + http://www.winimage.com/zLibDll + +More information can be found at this site. + + + + + +Build instructions for Visual Studio 2008 (32 bits or 64 bits) +-------------------------------------------------------------- +- Decompress current zlib, including all contrib/* files +- Open contrib\vstudio\vc9\zlibvc.sln with Microsoft Visual C++ 2008 +- Or run: vcbuild /rebuild contrib\vstudio\vc9\zlibvc.sln "Release|Win32" + +Build instructions for Visual Studio 2010 (32 bits or 64 bits) +-------------------------------------------------------------- +- Decompress current zlib, including all contrib/* files +- Open contrib\vstudio\vc10\zlibvc.sln with Microsoft Visual C++ 2010 + +Build instructions for Visual Studio 2012 (32 bits or 64 bits) +-------------------------------------------------------------- +- Decompress current zlib, including all contrib/* files +- Open contrib\vstudio\vc11\zlibvc.sln with Microsoft Visual C++ 2012 + +Build instructions for Visual Studio 2013 (32 bits or 64 bits) +-------------------------------------------------------------- +- Decompress current zlib, including all contrib/* files +- Open contrib\vstudio\vc12\zlibvc.sln with Microsoft Visual C++ 2013 + +Build instructions for Visual Studio 2015 (32 bits or 64 bits) +-------------------------------------------------------------- +- Decompress current zlib, including all contrib/* files +- Open contrib\vstudio\vc14\zlibvc.sln with Microsoft Visual C++ 2015 + +Build instructions for Visual Studio 2022 (64 bits) +-------------------------------------------------------------- +- Decompress current zlib, including all contrib/* files +- Open contrib\vstudio\vc143\zlibvc.sln with Microsoft Visual C++ 2022 + + + +Important +--------- +- To use zlibwapi.dll in your application, you must define the + macro ZLIB_WINAPI when compiling your application's source files. + + +Additional notes +---------------- +- This DLL, named zlibwapi.dll, is compatible to the old zlib.dll built + by Gilles Vollant from the zlib 1.1.x sources, and distributed at + http://www.winimage.com/zLibDll + It uses the WINAPI calling convention for the exported functions, and + includes the minizip functionality. If your application needs that + particular build of zlib.dll, you can rename zlibwapi.dll to zlib.dll. + +- The new DLL was renamed because there exist several incompatible + versions of zlib.dll on the Internet. + +- There is also an official DLL build of zlib, named zlib1.dll. This one + is exporting the functions using the CDECL convention. See the file + win32\DLL_FAQ.txt found in this zlib distribution. + +- There used to be a ZLIB_DLL macro in zlib 1.1.x, but now this symbol + has a slightly different effect. To avoid compatibility problems, do + not define it here. + + +Gilles Vollant +info@winimage.com + +Visual Studio 2013, 2015, and 2022 Projects from Sean Hunt +seandhunt_7@yahoo.com diff --git a/thirdparty/zlib-1.3.1/contrib/vstudio/vc10/miniunz.vcxproj b/thirdparty/zlib-1.3.1/contrib/vstudio/vc10/miniunz.vcxproj new file mode 100644 index 0000000..74e15c9 --- /dev/null +++ b/thirdparty/zlib-1.3.1/contrib/vstudio/vc10/miniunz.vcxproj @@ -0,0 +1,310 @@ + + + + + Debug + Itanium + + + Debug + Win32 + + + Debug + x64 + + + Release + Itanium + + + Release + Win32 + + + Release + x64 + + + + {C52F9E7B-498A-42BE-8DB4-85A15694382A} + Win32Proj + + + + Application + MultiByte + + + Application + MultiByte + + + Application + MultiByte + + + Application + MultiByte + + + Application + MultiByte + + + Application + MultiByte + + + + + + + + + + + + + + + + + + + + + + + + + <_ProjectFileVersion>10.0.30128.1 + x86\MiniUnzip$(Configuration)\ + x86\MiniUnzip$(Configuration)\Tmp\ + true + false + x86\MiniUnzip$(Configuration)\ + x86\MiniUnzip$(Configuration)\Tmp\ + false + false + x64\MiniUnzip$(Configuration)\ + x64\MiniUnzip$(Configuration)\Tmp\ + true + false + ia64\MiniUnzip$(Configuration)\ + ia64\MiniUnzip$(Configuration)\Tmp\ + true + false + x64\MiniUnzip$(Configuration)\ + x64\MiniUnzip$(Configuration)\Tmp\ + false + false + ia64\MiniUnzip$(Configuration)\ + ia64\MiniUnzip$(Configuration)\Tmp\ + false + false + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + + + + Disabled + ..\..\..;..\..\minizip;%(AdditionalIncludeDirectories) + WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + Default + MultiThreadedDebug + false + + + $(IntDir) + Level3 + EditAndContinue + + + x86\ZlibDllDebug\zlibwapi.lib;%(AdditionalDependencies) + $(OutDir)miniunz.exe + true + $(OutDir)miniunz.pdb + Console + false + + + MachineX86 + + + + + MaxSpeed + OnlyExplicitInline + true + ..\..\..;..\..\minizip;%(AdditionalIncludeDirectories) + WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + Default + MultiThreaded + false + true + + + $(IntDir) + Level3 + ProgramDatabase + + + x86\ZlibDllRelease\zlibwapi.lib;%(AdditionalDependencies) + $(OutDir)miniunz.exe + true + Console + true + true + false + + + MachineX86 + + + + + X64 + + + Disabled + ..\..\..;..\..\minizip;%(AdditionalIncludeDirectories) + _CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;_DEBUG;_CONSOLE;WIN64;%(PreprocessorDefinitions) + true + Default + MultiThreadedDebugDLL + false + + + $(IntDir) + Level3 + ProgramDatabase + + + x64\ZlibDllDebug\zlibwapi.lib;%(AdditionalDependencies) + $(OutDir)miniunz.exe + true + $(OutDir)miniunz.pdb + Console + MachineX64 + + + + + Itanium + + + Disabled + ..\..\..;..\..\minizip;%(AdditionalIncludeDirectories) + _CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;_DEBUG;_CONSOLE;WIN64;%(PreprocessorDefinitions) + true + Default + MultiThreadedDebugDLL + false + + + $(IntDir) + Level3 + ProgramDatabase + + + ia64\ZlibDllDebug\zlibwapi.lib;%(AdditionalDependencies) + $(OutDir)miniunz.exe + true + $(OutDir)miniunz.pdb + Console + MachineIA64 + + + + + X64 + + + MaxSpeed + OnlyExplicitInline + true + ..\..\..;..\..\minizip;%(AdditionalIncludeDirectories) + _CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;NDEBUG;_CONSOLE;WIN64;%(PreprocessorDefinitions) + true + Default + MultiThreadedDLL + false + true + + + $(IntDir) + Level3 + ProgramDatabase + + + x64\ZlibDllRelease\zlibwapi.lib;%(AdditionalDependencies) + $(OutDir)miniunz.exe + true + Console + true + true + MachineX64 + + + + + Itanium + + + MaxSpeed + OnlyExplicitInline + true + ..\..\..;..\..\minizip;%(AdditionalIncludeDirectories) + _CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;NDEBUG;_CONSOLE;WIN64;%(PreprocessorDefinitions) + true + Default + MultiThreadedDLL + false + true + + + $(IntDir) + Level3 + ProgramDatabase + + + ia64\ZlibDllRelease\zlibwapi.lib;%(AdditionalDependencies) + $(OutDir)miniunz.exe + true + Console + true + true + MachineIA64 + + + + + + + + {8fd826f8-3739-44e6-8cc8-997122e53b8d} + + + + + + \ No newline at end of file diff --git a/thirdparty/zlib-1.3.1/contrib/vstudio/vc10/miniunz.vcxproj.filters b/thirdparty/zlib-1.3.1/contrib/vstudio/vc10/miniunz.vcxproj.filters new file mode 100644 index 0000000..e53556a --- /dev/null +++ b/thirdparty/zlib-1.3.1/contrib/vstudio/vc10/miniunz.vcxproj.filters @@ -0,0 +1,22 @@ + + + + + {048af943-022b-4db6-beeb-a54c34774ee2} + cpp;c;cxx;def;odl;idl;hpj;bat + + + {c1d600d2-888f-4aea-b73e-8b0dd9befa0c} + h;hpp;hxx;hm;inl;inc + + + {0844199a-966b-4f19-81db-1e0125e141b9} + rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe + + + + + Source Files + + + \ No newline at end of file diff --git a/thirdparty/zlib-1.3.1/contrib/vstudio/vc10/minizip.vcxproj b/thirdparty/zlib-1.3.1/contrib/vstudio/vc10/minizip.vcxproj new file mode 100644 index 0000000..917e156 --- /dev/null +++ b/thirdparty/zlib-1.3.1/contrib/vstudio/vc10/minizip.vcxproj @@ -0,0 +1,307 @@ + + + + + Debug + Itanium + + + Debug + Win32 + + + Debug + x64 + + + Release + Itanium + + + Release + Win32 + + + Release + x64 + + + + {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B} + Win32Proj + + + + Application + MultiByte + + + Application + MultiByte + + + Application + MultiByte + + + Application + MultiByte + + + Application + MultiByte + + + Application + MultiByte + + + + + + + + + + + + + + + + + + + + + + + + + <_ProjectFileVersion>10.0.30128.1 + x86\MiniZip$(Configuration)\ + x86\MiniZip$(Configuration)\Tmp\ + true + false + x86\MiniZip$(Configuration)\ + x86\MiniZip$(Configuration)\Tmp\ + false + x64\$(Configuration)\ + x64\$(Configuration)\ + true + false + ia64\$(Configuration)\ + ia64\$(Configuration)\ + true + false + x64\$(Configuration)\ + x64\$(Configuration)\ + false + ia64\$(Configuration)\ + ia64\$(Configuration)\ + false + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + + + + Disabled + ..\..\..;..\..\minizip;%(AdditionalIncludeDirectories) + WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + Default + MultiThreadedDebug + false + + + $(IntDir) + Level3 + EditAndContinue + + + x86\ZlibDllDebug\zlibwapi.lib;%(AdditionalDependencies) + $(OutDir)minizip.exe + true + $(OutDir)minizip.pdb + Console + false + + + MachineX86 + + + + + MaxSpeed + OnlyExplicitInline + true + ..\..\..;..\..\minizip;%(AdditionalIncludeDirectories) + WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + Default + MultiThreaded + false + true + + + $(IntDir) + Level3 + ProgramDatabase + + + x86\ZlibDllRelease\zlibwapi.lib;%(AdditionalDependencies) + $(OutDir)minizip.exe + true + Console + true + true + false + + + MachineX86 + + + + + X64 + + + Disabled + ..\..\..;..\..\minizip;%(AdditionalIncludeDirectories) + _CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;_DEBUG;_CONSOLE;WIN64;%(PreprocessorDefinitions) + true + Default + MultiThreadedDebugDLL + false + + + $(IntDir) + Level3 + ProgramDatabase + + + x64\ZlibDllDebug\zlibwapi.lib;%(AdditionalDependencies) + $(OutDir)minizip.exe + true + $(OutDir)minizip.pdb + Console + MachineX64 + + + + + Itanium + + + Disabled + ..\..\..;..\..\minizip;%(AdditionalIncludeDirectories) + _CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;_DEBUG;_CONSOLE;WIN64;%(PreprocessorDefinitions) + true + Default + MultiThreadedDebugDLL + false + + + $(IntDir) + Level3 + ProgramDatabase + + + ia64\ZlibDllDebug\zlibwapi.lib;%(AdditionalDependencies) + $(OutDir)minizip.exe + true + $(OutDir)minizip.pdb + Console + MachineIA64 + + + + + X64 + + + MaxSpeed + OnlyExplicitInline + true + ..\..\..;..\..\minizip;%(AdditionalIncludeDirectories) + _CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;NDEBUG;_CONSOLE;WIN64;%(PreprocessorDefinitions) + true + Default + MultiThreadedDLL + false + true + + + $(IntDir) + Level3 + ProgramDatabase + + + x64\ZlibDllRelease\zlibwapi.lib;%(AdditionalDependencies) + $(OutDir)minizip.exe + true + Console + true + true + MachineX64 + + + + + Itanium + + + MaxSpeed + OnlyExplicitInline + true + ..\..\..;..\..\minizip;%(AdditionalIncludeDirectories) + _CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;NDEBUG;_CONSOLE;WIN64;%(PreprocessorDefinitions) + true + Default + MultiThreadedDLL + false + true + + + $(IntDir) + Level3 + ProgramDatabase + + + ia64\ZlibDllRelease\zlibwapi.lib;%(AdditionalDependencies) + $(OutDir)minizip.exe + true + Console + true + true + MachineIA64 + + + + + + + + {8fd826f8-3739-44e6-8cc8-997122e53b8d} + + + + + + \ No newline at end of file diff --git a/thirdparty/zlib-1.3.1/contrib/vstudio/vc10/minizip.vcxproj.filters b/thirdparty/zlib-1.3.1/contrib/vstudio/vc10/minizip.vcxproj.filters new file mode 100644 index 0000000..bd18d71 --- /dev/null +++ b/thirdparty/zlib-1.3.1/contrib/vstudio/vc10/minizip.vcxproj.filters @@ -0,0 +1,22 @@ + + + + + {c0419b40-bf50-40da-b153-ff74215b79de} + cpp;c;cxx;def;odl;idl;hpj;bat + + + {bb87b070-735b-478e-92ce-7383abb2f36c} + h;hpp;hxx;hm;inl;inc + + + {f46ab6a6-548f-43cb-ae96-681abb5bd5db} + rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe + + + + + Source Files + + + \ No newline at end of file diff --git a/thirdparty/zlib-1.3.1/contrib/vstudio/vc10/testzlib.vcxproj b/thirdparty/zlib-1.3.1/contrib/vstudio/vc10/testzlib.vcxproj new file mode 100644 index 0000000..0e668f7 --- /dev/null +++ b/thirdparty/zlib-1.3.1/contrib/vstudio/vc10/testzlib.vcxproj @@ -0,0 +1,412 @@ + + + + + Debug + Itanium + + + Debug + Win32 + + + Debug + x64 + + + ReleaseWithoutAsm + Itanium + + + ReleaseWithoutAsm + Win32 + + + ReleaseWithoutAsm + x64 + + + Release + Itanium + + + Release + Win32 + + + Release + x64 + + + + {AA6666AA-E09F-4135-9C0C-4FE50C3C654B} + testzlib + Win32Proj + + + + Application + MultiByte + true + + + Application + MultiByte + true + + + Application + MultiByte + + + Application + MultiByte + true + + + Application + MultiByte + true + + + Application + MultiByte + + + Application + true + + + Application + true + + + Application + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <_ProjectFileVersion>10.0.30128.1 + x86\TestZlib$(Configuration)\ + x86\TestZlib$(Configuration)\Tmp\ + true + false + x86\TestZlib$(Configuration)\ + x86\TestZlib$(Configuration)\Tmp\ + false + false + x86\TestZlib$(Configuration)\ + x86\TestZlib$(Configuration)\Tmp\ + false + false + x64\TestZlib$(Configuration)\ + x64\TestZlib$(Configuration)\Tmp\ + false + ia64\TestZlib$(Configuration)\ + ia64\TestZlib$(Configuration)\Tmp\ + true + false + x64\TestZlib$(Configuration)\ + x64\TestZlib$(Configuration)\Tmp\ + false + ia64\TestZlib$(Configuration)\ + ia64\TestZlib$(Configuration)\Tmp\ + false + false + x64\TestZlib$(Configuration)\ + x64\TestZlib$(Configuration)\Tmp\ + false + ia64\TestZlib$(Configuration)\ + ia64\TestZlib$(Configuration)\Tmp\ + false + false + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + + + + Disabled + ..\..\..;%(AdditionalIncludeDirectories) + WIN32;ZLIB_WINAPI;_DEBUG;_CONSOLE;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;%(PreprocessorDefinitions) + true + Default + MultiThreadedDebug + false + + + AssemblyAndSourceCode + $(IntDir) + Level3 + EditAndContinue + + + %(AdditionalDependencies) + $(OutDir)testzlib.exe + true + $(OutDir)testzlib.pdb + Console + false + + + MachineX86 + + + + + MaxSpeed + OnlyExplicitInline + true + ..\..\..;%(AdditionalIncludeDirectories) + WIN32;ZLIB_WINAPI;NDEBUG;_CONSOLE;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;%(PreprocessorDefinitions) + true + Default + MultiThreaded + false + true + + + $(IntDir) + Level3 + ProgramDatabase + + + $(OutDir)testzlib.exe + true + Console + true + true + false + + + MachineX86 + + + + + MaxSpeed + OnlyExplicitInline + true + ..\..\..;%(AdditionalIncludeDirectories) + WIN32;ZLIB_WINAPI;NDEBUG;_CONSOLE;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;%(PreprocessorDefinitions) + true + Default + MultiThreaded + false + true + + + $(IntDir) + Level3 + ProgramDatabase + + + %(AdditionalDependencies) + $(OutDir)testzlib.exe + true + Console + true + true + false + + + MachineX86 + + + + + ..\..\..;%(AdditionalIncludeDirectories) + WIN32;ZLIB_WINAPI;_DEBUG;_CONSOLE;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;%(PreprocessorDefinitions) + Default + MultiThreadedDebugDLL + false + $(IntDir) + + + %(AdditionalDependencies) + + + + + Itanium + + + Disabled + ..\..\..;%(AdditionalIncludeDirectories) + ZLIB_WINAPI;_DEBUG;_CONSOLE;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;WIN64;%(PreprocessorDefinitions) + true + Default + MultiThreadedDebugDLL + false + + + AssemblyAndSourceCode + $(IntDir) + Level3 + ProgramDatabase + + + $(OutDir)testzlib.exe + true + $(OutDir)testzlib.pdb + Console + MachineIA64 + + + + + ..\..\..;%(AdditionalIncludeDirectories) + WIN32;ZLIB_WINAPI;NDEBUG;_CONSOLE;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;%(PreprocessorDefinitions) + Default + MultiThreadedDLL + false + $(IntDir) + + + %(AdditionalDependencies) + + + + + Itanium + + + MaxSpeed + OnlyExplicitInline + true + ..\..\..;%(AdditionalIncludeDirectories) + ZLIB_WINAPI;NDEBUG;_CONSOLE;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;WIN64;%(PreprocessorDefinitions) + true + Default + MultiThreadedDLL + false + true + + + $(IntDir) + Level3 + ProgramDatabase + + + $(OutDir)testzlib.exe + true + Console + true + true + MachineIA64 + + + + + ..\..\..;%(AdditionalIncludeDirectories) + WIN32;ZLIB_WINAPI;NDEBUG;_CONSOLE;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;%(PreprocessorDefinitions) + Default + MultiThreadedDLL + false + $(IntDir) + + + %(AdditionalDependencies) + + + + + Itanium + + + MaxSpeed + OnlyExplicitInline + true + ..\..\..;%(AdditionalIncludeDirectories) + ZLIB_WINAPI;NDEBUG;_CONSOLE;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;WIN64;%(PreprocessorDefinitions) + true + Default + MultiThreadedDLL + false + true + + + $(IntDir) + Level3 + ProgramDatabase + + + $(OutDir)testzlib.exe + true + Console + true + true + MachineIA64 + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/thirdparty/zlib-1.3.1/contrib/vstudio/vc10/testzlib.vcxproj.filters b/thirdparty/zlib-1.3.1/contrib/vstudio/vc10/testzlib.vcxproj.filters new file mode 100644 index 0000000..3cf52ee --- /dev/null +++ b/thirdparty/zlib-1.3.1/contrib/vstudio/vc10/testzlib.vcxproj.filters @@ -0,0 +1,55 @@ + + + + + {c1f6a2e3-5da5-4955-8653-310d3efe05a9} + cpp;c;cxx;def;odl;idl;hpj;bat + + + {c2aaffdc-2c95-4d6f-8466-4bec5890af2c} + h;hpp;hxx;hm;inl;inc + + + {c274fe07-05f2-461c-964b-f6341e4e7eb5} + rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe + + + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + \ No newline at end of file diff --git a/thirdparty/zlib-1.3.1/contrib/vstudio/vc10/testzlibdll.vcxproj b/thirdparty/zlib-1.3.1/contrib/vstudio/vc10/testzlibdll.vcxproj new file mode 100644 index 0000000..bcb08ff --- /dev/null +++ b/thirdparty/zlib-1.3.1/contrib/vstudio/vc10/testzlibdll.vcxproj @@ -0,0 +1,310 @@ + + + + + Debug + Itanium + + + Debug + Win32 + + + Debug + x64 + + + Release + Itanium + + + Release + Win32 + + + Release + x64 + + + + {C52F9E7B-498A-42BE-8DB4-85A15694366A} + Win32Proj + + + + Application + MultiByte + + + Application + MultiByte + + + Application + MultiByte + + + Application + MultiByte + + + Application + MultiByte + + + Application + MultiByte + + + + + + + + + + + + + + + + + + + + + + + + + <_ProjectFileVersion>10.0.30128.1 + x86\TestZlibDll$(Configuration)\ + x86\TestZlibDll$(Configuration)\Tmp\ + true + false + x86\TestZlibDll$(Configuration)\ + x86\TestZlibDll$(Configuration)\Tmp\ + false + false + x64\TestZlibDll$(Configuration)\ + x64\TestZlibDll$(Configuration)\Tmp\ + true + false + ia64\TestZlibDll$(Configuration)\ + ia64\TestZlibDll$(Configuration)\Tmp\ + true + false + x64\TestZlibDll$(Configuration)\ + x64\TestZlibDll$(Configuration)\Tmp\ + false + false + ia64\TestZlibDll$(Configuration)\ + ia64\TestZlibDll$(Configuration)\Tmp\ + false + false + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + + + + Disabled + ..\..\..;..\..\minizip;%(AdditionalIncludeDirectories) + WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + Default + MultiThreadedDebug + false + + + $(IntDir) + Level3 + EditAndContinue + + + x86\ZlibDllDebug\zlibwapi.lib;%(AdditionalDependencies) + $(OutDir)testzlibdll.exe + true + $(OutDir)testzlib.pdb + Console + false + + + MachineX86 + + + + + MaxSpeed + OnlyExplicitInline + true + ..\..\..;..\..\minizip;%(AdditionalIncludeDirectories) + WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + Default + MultiThreaded + false + true + + + $(IntDir) + Level3 + ProgramDatabase + + + x86\ZlibDllRelease\zlibwapi.lib;%(AdditionalDependencies) + $(OutDir)testzlibdll.exe + true + Console + true + true + false + + + MachineX86 + + + + + X64 + + + Disabled + ..\..\..;..\..\minizip;%(AdditionalIncludeDirectories) + _CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;_DEBUG;_CONSOLE;WIN64;%(PreprocessorDefinitions) + true + Default + MultiThreadedDebugDLL + false + + + $(IntDir) + Level3 + ProgramDatabase + + + x64\ZlibDllDebug\zlibwapi.lib;%(AdditionalDependencies) + $(OutDir)testzlibdll.exe + true + $(OutDir)testzlib.pdb + Console + MachineX64 + + + + + Itanium + + + Disabled + ..\..\..;..\..\minizip;%(AdditionalIncludeDirectories) + _CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;_DEBUG;_CONSOLE;WIN64;%(PreprocessorDefinitions) + true + Default + MultiThreadedDebugDLL + false + + + $(IntDir) + Level3 + ProgramDatabase + + + ia64\ZlibDllDebug\zlibwapi.lib;%(AdditionalDependencies) + $(OutDir)testzlibdll.exe + true + $(OutDir)testzlib.pdb + Console + MachineIA64 + + + + + X64 + + + MaxSpeed + OnlyExplicitInline + true + ..\..\..;..\..\minizip;%(AdditionalIncludeDirectories) + _CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;NDEBUG;_CONSOLE;WIN64;%(PreprocessorDefinitions) + true + Default + MultiThreadedDLL + false + true + + + $(IntDir) + Level3 + ProgramDatabase + + + x64\ZlibDllRelease\zlibwapi.lib;%(AdditionalDependencies) + $(OutDir)testzlibdll.exe + true + Console + true + true + MachineX64 + + + + + Itanium + + + MaxSpeed + OnlyExplicitInline + true + ..\..\..;..\..\minizip;%(AdditionalIncludeDirectories) + _CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;NDEBUG;_CONSOLE;WIN64;%(PreprocessorDefinitions) + true + Default + MultiThreadedDLL + false + true + + + $(IntDir) + Level3 + ProgramDatabase + + + ia64\ZlibDllRelease\zlibwapi.lib;%(AdditionalDependencies) + $(OutDir)testzlibdll.exe + true + Console + true + true + MachineIA64 + + + + + + + + {8fd826f8-3739-44e6-8cc8-997122e53b8d} + + + + + + \ No newline at end of file diff --git a/thirdparty/zlib-1.3.1/contrib/vstudio/vc10/testzlibdll.vcxproj.filters b/thirdparty/zlib-1.3.1/contrib/vstudio/vc10/testzlibdll.vcxproj.filters new file mode 100644 index 0000000..aeb550e --- /dev/null +++ b/thirdparty/zlib-1.3.1/contrib/vstudio/vc10/testzlibdll.vcxproj.filters @@ -0,0 +1,22 @@ + + + + + {fa61a89f-93fc-4c89-b29e-36224b7592f4} + cpp;c;cxx;def;odl;idl;hpj;bat + + + {d4b85da0-2ba2-4934-b57f-e2584e3848ee} + h;hpp;hxx;hm;inl;inc + + + {e573e075-00bd-4a7d-bd67-a8cc9bfc5aca} + rc;ico;cur;bmp;dlg;rc2;rct;bin;rgs;gif;jpg;jpeg;jpe + + + + + Source Files + + + \ No newline at end of file diff --git a/thirdparty/zlib-1.3.1/contrib/vstudio/vc10/zlib.rc b/thirdparty/zlib-1.3.1/contrib/vstudio/vc10/zlib.rc new file mode 100644 index 0000000..856bd11 --- /dev/null +++ b/thirdparty/zlib-1.3.1/contrib/vstudio/vc10/zlib.rc @@ -0,0 +1,32 @@ +#include + +#define IDR_VERSION1 1 +IDR_VERSION1 VERSIONINFO MOVEABLE IMPURE LOADONCALL DISCARDABLE + FILEVERSION 1, 3, 1, 0 + PRODUCTVERSION 1, 3, 1, 0 + FILEFLAGSMASK VS_FFI_FILEFLAGSMASK + FILEFLAGS 0 + FILEOS VOS_DOS_WINDOWS32 + FILETYPE VFT_DLL + FILESUBTYPE 0 // not used +BEGIN + BLOCK "StringFileInfo" + BEGIN + BLOCK "040904E4" + //language ID = U.S. English, char set = Windows, Multilingual + + BEGIN + VALUE "FileDescription", "zlib data compression and ZIP file I/O library\0" + VALUE "FileVersion", "1.3.1\0" + VALUE "InternalName", "zlib\0" + VALUE "OriginalFilename", "zlibwapi.dll\0" + VALUE "ProductName", "ZLib.DLL\0" + VALUE "Comments","DLL support by Alessandro Iacopetti & Gilles Vollant\0" + VALUE "LegalCopyright", "(C) 1995-2024 Jean-loup Gailly & Mark Adler\0" + END + END + BLOCK "VarFileInfo" + BEGIN + VALUE "Translation", 0x0409, 1252 + END +END diff --git a/thirdparty/zlib-1.3.1/contrib/vstudio/vc10/zlibstat.vcxproj b/thirdparty/zlib-1.3.1/contrib/vstudio/vc10/zlibstat.vcxproj new file mode 100644 index 0000000..c7ed09e --- /dev/null +++ b/thirdparty/zlib-1.3.1/contrib/vstudio/vc10/zlibstat.vcxproj @@ -0,0 +1,449 @@ + + + + + Debug + Itanium + + + Debug + Win32 + + + Debug + x64 + + + ReleaseWithoutAsm + Itanium + + + ReleaseWithoutAsm + Win32 + + + ReleaseWithoutAsm + x64 + + + Release + Itanium + + + Release + Win32 + + + Release + x64 + + + + {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8} + + + + StaticLibrary + false + + + StaticLibrary + false + + + StaticLibrary + false + + + StaticLibrary + false + + + StaticLibrary + false + + + StaticLibrary + false + + + StaticLibrary + false + + + StaticLibrary + false + + + StaticLibrary + false + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <_ProjectFileVersion>10.0.30128.1 + x86\ZlibStat$(Configuration)\ + x86\ZlibStat$(Configuration)\Tmp\ + x86\ZlibStat$(Configuration)\ + x86\ZlibStat$(Configuration)\Tmp\ + x86\ZlibStat$(Configuration)\ + x86\ZlibStat$(Configuration)\Tmp\ + x64\ZlibStat$(Configuration)\ + x64\ZlibStat$(Configuration)\Tmp\ + ia64\ZlibStat$(Configuration)\ + ia64\ZlibStat$(Configuration)\Tmp\ + x64\ZlibStat$(Configuration)\ + x64\ZlibStat$(Configuration)\Tmp\ + ia64\ZlibStat$(Configuration)\ + ia64\ZlibStat$(Configuration)\Tmp\ + x64\ZlibStat$(Configuration)\ + x64\ZlibStat$(Configuration)\Tmp\ + ia64\ZlibStat$(Configuration)\ + ia64\ZlibStat$(Configuration)\Tmp\ + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + + + + Disabled + %(AdditionalIncludeDirectories) + WIN32;ZLIB_WINAPI;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;%(PreprocessorDefinitions) + + + MultiThreadedDebug + false + $(IntDir)zlibstat.pch + $(IntDir) + $(IntDir) + $(OutDir) + Level3 + true + OldStyle + + + 0x040c + + + /MACHINE:X86 /NODEFAULTLIB %(AdditionalOptions) + $(OutDir)zlibstat.lib + true + + + + + OnlyExplicitInline + ..\..\..;%(AdditionalIncludeDirectories) + WIN32;ZLIB_WINAPI;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;%(PreprocessorDefinitions) + true + + + MultiThreaded + false + true + $(IntDir)zlibstat.pch + $(IntDir) + $(IntDir) + $(OutDir) + Level3 + true + + + 0x040c + + + /MACHINE:X86 /NODEFAULTLIB %(AdditionalOptions) + %(AdditionalDependencies) + $(OutDir)zlibstat.lib + true + + + + + OnlyExplicitInline + ..\..\..;%(AdditionalIncludeDirectories) + WIN32;ZLIB_WINAPI;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;%(PreprocessorDefinitions) + true + + + MultiThreaded + false + true + $(IntDir)zlibstat.pch + $(IntDir) + $(IntDir) + $(OutDir) + Level3 + true + + + 0x040c + + + /MACHINE:X86 /NODEFAULTLIB %(AdditionalOptions) + $(OutDir)zlibstat.lib + true + + + + + X64 + + + Disabled + ..\..\..;%(AdditionalIncludeDirectories) + ZLIB_WINAPI;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;WIN64;%(PreprocessorDefinitions) + + + MultiThreadedDebugDLL + false + $(IntDir)zlibstat.pch + $(IntDir) + $(IntDir) + $(OutDir) + Level3 + true + OldStyle + + + 0x040c + + + /MACHINE:AMD64 /NODEFAULTLIB %(AdditionalOptions) + $(OutDir)zlibstat.lib + true + + + + + Itanium + + + Disabled + ..\..\..;%(AdditionalIncludeDirectories) + ZLIB_WINAPI;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;WIN64;%(PreprocessorDefinitions) + + + MultiThreadedDebugDLL + false + $(IntDir)zlibstat.pch + $(IntDir) + $(IntDir) + $(OutDir) + Level3 + true + OldStyle + + + 0x040c + + + /MACHINE:IA64 /NODEFAULTLIB %(AdditionalOptions) + $(OutDir)zlibstat.lib + true + + + + + X64 + + + OnlyExplicitInline + ..\..\..;%(AdditionalIncludeDirectories) + ZLIB_WINAPI;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;WIN64;%(PreprocessorDefinitions) + true + + + MultiThreadedDLL + false + true + $(IntDir)zlibstat.pch + $(IntDir) + $(IntDir) + $(OutDir) + Level3 + true + + + 0x040c + + + /MACHINE:AMD64 /NODEFAULTLIB %(AdditionalOptions) + %(AdditionalDependencies) + $(OutDir)zlibstat.lib + true + + + + + Itanium + + + OnlyExplicitInline + ..\..\..;%(AdditionalIncludeDirectories) + ZLIB_WINAPI;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;WIN64;%(PreprocessorDefinitions) + true + + + MultiThreadedDLL + false + true + $(IntDir)zlibstat.pch + $(IntDir) + $(IntDir) + $(OutDir) + Level3 + true + + + 0x040c + + + /MACHINE:IA64 /NODEFAULTLIB %(AdditionalOptions) + $(OutDir)zlibstat.lib + true + + + + + X64 + + + OnlyExplicitInline + ..\..\..;%(AdditionalIncludeDirectories) + ZLIB_WINAPI;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;WIN64;%(PreprocessorDefinitions) + true + + + MultiThreadedDLL + false + true + $(IntDir)zlibstat.pch + $(IntDir) + $(IntDir) + $(OutDir) + Level3 + true + + + 0x040c + + + /MACHINE:AMD64 /NODEFAULTLIB %(AdditionalOptions) + $(OutDir)zlibstat.lib + true + + + + + Itanium + + + OnlyExplicitInline + ..\..\..;%(AdditionalIncludeDirectories) + ZLIB_WINAPI;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;WIN64;%(PreprocessorDefinitions) + true + + + MultiThreadedDLL + false + true + $(IntDir)zlibstat.pch + $(IntDir) + $(IntDir) + $(OutDir) + Level3 + true + + + 0x040c + + + /MACHINE:IA64 /NODEFAULTLIB %(AdditionalOptions) + $(OutDir)zlibstat.lib + true + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/thirdparty/zlib-1.3.1/contrib/vstudio/vc10/zlibstat.vcxproj.filters b/thirdparty/zlib-1.3.1/contrib/vstudio/vc10/zlibstat.vcxproj.filters new file mode 100644 index 0000000..ba7e23d --- /dev/null +++ b/thirdparty/zlib-1.3.1/contrib/vstudio/vc10/zlibstat.vcxproj.filters @@ -0,0 +1,74 @@ + + + + + {174213f6-7f66-4ae8-a3a8-a1e0a1e6ffdd} + + + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + + + Source Files + + + + + Source Files + + + \ No newline at end of file diff --git a/thirdparty/zlib-1.3.1/contrib/vstudio/vc10/zlibvc.def b/thirdparty/zlib-1.3.1/contrib/vstudio/vc10/zlibvc.def new file mode 100644 index 0000000..3234a02 --- /dev/null +++ b/thirdparty/zlib-1.3.1/contrib/vstudio/vc10/zlibvc.def @@ -0,0 +1,158 @@ +LIBRARY +; zlib data compression and ZIP file I/O library + +VERSION 1.3.1 + +EXPORTS + adler32 @1 + compress @2 + crc32 @3 + deflate @4 + deflateCopy @5 + deflateEnd @6 + deflateInit2_ @7 + deflateInit_ @8 + deflateParams @9 + deflateReset @10 + deflateSetDictionary @11 + gzclose @12 + gzdopen @13 + gzerror @14 + gzflush @15 + gzopen @16 + gzread @17 + gzwrite @18 + inflate @19 + inflateEnd @20 + inflateInit2_ @21 + inflateInit_ @22 + inflateReset @23 + inflateSetDictionary @24 + inflateSync @25 + uncompress @26 + zlibVersion @27 + gzprintf @28 + gzputc @29 + gzgetc @30 + gzseek @31 + gzrewind @32 + gztell @33 + gzeof @34 + gzsetparams @35 + zError @36 + inflateSyncPoint @37 + get_crc_table @38 + compress2 @39 + gzputs @40 + gzgets @41 + inflateCopy @42 + inflateBackInit_ @43 + inflateBack @44 + inflateBackEnd @45 + compressBound @46 + deflateBound @47 + gzclearerr @48 + gzungetc @49 + zlibCompileFlags @50 + deflatePrime @51 + deflatePending @52 + + unzOpen @61 + unzClose @62 + unzGetGlobalInfo @63 + unzGetCurrentFileInfo @64 + unzGoToFirstFile @65 + unzGoToNextFile @66 + unzOpenCurrentFile @67 + unzReadCurrentFile @68 + unzOpenCurrentFile3 @69 + unztell @70 + unzeof @71 + unzCloseCurrentFile @72 + unzGetGlobalComment @73 + unzStringFileNameCompare @74 + unzLocateFile @75 + unzGetLocalExtrafield @76 + unzOpen2 @77 + unzOpenCurrentFile2 @78 + unzOpenCurrentFilePassword @79 + + zipOpen @80 + zipOpenNewFileInZip @81 + zipWriteInFileInZip @82 + zipCloseFileInZip @83 + zipClose @84 + zipOpenNewFileInZip2 @86 + zipCloseFileInZipRaw @87 + zipOpen2 @88 + zipOpenNewFileInZip3 @89 + + unzGetFilePos @100 + unzGoToFilePos @101 + + fill_win32_filefunc @110 + +; zlibwapi v1.2.4 added: + fill_win32_filefunc64 @111 + fill_win32_filefunc64A @112 + fill_win32_filefunc64W @113 + + unzOpen64 @120 + unzOpen2_64 @121 + unzGetGlobalInfo64 @122 + unzGetCurrentFileInfo64 @124 + unzGetCurrentFileZStreamPos64 @125 + unztell64 @126 + unzGetFilePos64 @127 + unzGoToFilePos64 @128 + + zipOpen64 @130 + zipOpen2_64 @131 + zipOpenNewFileInZip64 @132 + zipOpenNewFileInZip2_64 @133 + zipOpenNewFileInZip3_64 @134 + zipOpenNewFileInZip4_64 @135 + zipCloseFileInZipRaw64 @136 + +; zlib1 v1.2.4 added: + adler32_combine @140 + crc32_combine @142 + deflateSetHeader @144 + deflateTune @145 + gzbuffer @146 + gzclose_r @147 + gzclose_w @148 + gzdirect @149 + gzoffset @150 + inflateGetHeader @156 + inflateMark @157 + inflatePrime @158 + inflateReset2 @159 + inflateUndermine @160 + +; zlib1 v1.2.6 added: + gzgetc_ @161 + inflateResetKeep @163 + deflateResetKeep @164 + +; zlib1 v1.2.7 added: + gzopen_w @165 + +; zlib1 v1.2.8 added: + inflateGetDictionary @166 + gzvprintf @167 + +; zlib1 v1.2.9 added: + inflateCodesUsed @168 + inflateValidate @169 + uncompress2 @170 + gzfread @171 + gzfwrite @172 + deflateGetDictionary @173 + adler32_z @174 + crc32_z @175 + +; zlib1 v1.2.12 added: + crc32_combine_gen @176 + crc32_combine_gen64 @177 + crc32_combine_op @178 diff --git a/thirdparty/zlib-1.3.1/contrib/vstudio/vc10/zlibvc.sln b/thirdparty/zlib-1.3.1/contrib/vstudio/vc10/zlibvc.sln new file mode 100644 index 0000000..6f6ffd5 --- /dev/null +++ b/thirdparty/zlib-1.3.1/contrib/vstudio/vc10/zlibvc.sln @@ -0,0 +1,135 @@ + +Microsoft Visual Studio Solution File, Format Version 11.00 +# Visual Studio 2010 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "zlibvc", "zlibvc.vcxproj", "{8FD826F8-3739-44E6-8CC8-997122E53B8D}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "zlibstat", "zlibstat.vcxproj", "{745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "testzlib", "testzlib.vcxproj", "{AA6666AA-E09F-4135-9C0C-4FE50C3C654B}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "testzlibdll", "testzlibdll.vcxproj", "{C52F9E7B-498A-42BE-8DB4-85A15694366A}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "minizip", "minizip.vcxproj", "{48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "miniunz", "miniunz.vcxproj", "{C52F9E7B-498A-42BE-8DB4-85A15694382A}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Itanium = Debug|Itanium + Debug|Win32 = Debug|Win32 + Debug|x64 = Debug|x64 + Release|Itanium = Release|Itanium + Release|Win32 = Release|Win32 + Release|x64 = Release|x64 + ReleaseWithoutAsm|Itanium = ReleaseWithoutAsm|Itanium + ReleaseWithoutAsm|Win32 = ReleaseWithoutAsm|Win32 + ReleaseWithoutAsm|x64 = ReleaseWithoutAsm|x64 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {8FD826F8-3739-44E6-8CC8-997122E53B8D}.Debug|Itanium.ActiveCfg = Debug|Itanium + {8FD826F8-3739-44E6-8CC8-997122E53B8D}.Debug|Itanium.Build.0 = Debug|Itanium + {8FD826F8-3739-44E6-8CC8-997122E53B8D}.Debug|Win32.ActiveCfg = Debug|Win32 + {8FD826F8-3739-44E6-8CC8-997122E53B8D}.Debug|Win32.Build.0 = Debug|Win32 + {8FD826F8-3739-44E6-8CC8-997122E53B8D}.Debug|x64.ActiveCfg = Debug|x64 + {8FD826F8-3739-44E6-8CC8-997122E53B8D}.Debug|x64.Build.0 = Debug|x64 + {8FD826F8-3739-44E6-8CC8-997122E53B8D}.Release|Itanium.ActiveCfg = Release|Itanium + {8FD826F8-3739-44E6-8CC8-997122E53B8D}.Release|Itanium.Build.0 = Release|Itanium + {8FD826F8-3739-44E6-8CC8-997122E53B8D}.Release|Win32.ActiveCfg = Release|Win32 + {8FD826F8-3739-44E6-8CC8-997122E53B8D}.Release|Win32.Build.0 = Release|Win32 + {8FD826F8-3739-44E6-8CC8-997122E53B8D}.Release|x64.ActiveCfg = Release|x64 + {8FD826F8-3739-44E6-8CC8-997122E53B8D}.Release|x64.Build.0 = Release|x64 + {8FD826F8-3739-44E6-8CC8-997122E53B8D}.ReleaseWithoutAsm|Itanium.ActiveCfg = ReleaseWithoutAsm|Itanium + {8FD826F8-3739-44E6-8CC8-997122E53B8D}.ReleaseWithoutAsm|Itanium.Build.0 = ReleaseWithoutAsm|Itanium + {8FD826F8-3739-44E6-8CC8-997122E53B8D}.ReleaseWithoutAsm|Win32.ActiveCfg = ReleaseWithoutAsm|Win32 + {8FD826F8-3739-44E6-8CC8-997122E53B8D}.ReleaseWithoutAsm|Win32.Build.0 = ReleaseWithoutAsm|Win32 + {8FD826F8-3739-44E6-8CC8-997122E53B8D}.ReleaseWithoutAsm|x64.ActiveCfg = ReleaseWithoutAsm|x64 + {8FD826F8-3739-44E6-8CC8-997122E53B8D}.ReleaseWithoutAsm|x64.Build.0 = ReleaseWithoutAsm|x64 + {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.Debug|Itanium.ActiveCfg = Debug|Itanium + {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.Debug|Itanium.Build.0 = Debug|Itanium + {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.Debug|Win32.ActiveCfg = Debug|Win32 + {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.Debug|Win32.Build.0 = Debug|Win32 + {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.Debug|x64.ActiveCfg = Debug|x64 + {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.Debug|x64.Build.0 = Debug|x64 + {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.Release|Itanium.ActiveCfg = Release|Itanium + {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.Release|Itanium.Build.0 = Release|Itanium + {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.Release|Win32.ActiveCfg = Release|Win32 + {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.Release|Win32.Build.0 = Release|Win32 + {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.Release|x64.ActiveCfg = Release|x64 + {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.Release|x64.Build.0 = Release|x64 + {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.ReleaseWithoutAsm|Itanium.ActiveCfg = ReleaseWithoutAsm|Itanium + {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.ReleaseWithoutAsm|Itanium.Build.0 = ReleaseWithoutAsm|Itanium + {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.ReleaseWithoutAsm|Win32.ActiveCfg = ReleaseWithoutAsm|Win32 + {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.ReleaseWithoutAsm|Win32.Build.0 = ReleaseWithoutAsm|Win32 + {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.ReleaseWithoutAsm|x64.ActiveCfg = ReleaseWithoutAsm|x64 + {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.ReleaseWithoutAsm|x64.Build.0 = ReleaseWithoutAsm|x64 + {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.Debug|Itanium.ActiveCfg = Debug|Itanium + {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.Debug|Itanium.Build.0 = Debug|Itanium + {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.Debug|Win32.ActiveCfg = Debug|Win32 + {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.Debug|Win32.Build.0 = Debug|Win32 + {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.Debug|x64.ActiveCfg = Debug|x64 + {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.Debug|x64.Build.0 = Debug|x64 + {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.Release|Itanium.ActiveCfg = Release|Itanium + {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.Release|Itanium.Build.0 = Release|Itanium + {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.Release|Win32.ActiveCfg = Release|Win32 + {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.Release|Win32.Build.0 = Release|Win32 + {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.Release|x64.ActiveCfg = Release|x64 + {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.Release|x64.Build.0 = Release|x64 + {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.ReleaseWithoutAsm|Itanium.ActiveCfg = ReleaseWithoutAsm|Itanium + {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.ReleaseWithoutAsm|Itanium.Build.0 = ReleaseWithoutAsm|Itanium + {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.ReleaseWithoutAsm|Win32.ActiveCfg = ReleaseWithoutAsm|Win32 + {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.ReleaseWithoutAsm|Win32.Build.0 = ReleaseWithoutAsm|Win32 + {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.ReleaseWithoutAsm|x64.ActiveCfg = ReleaseWithoutAsm|x64 + {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.ReleaseWithoutAsm|x64.Build.0 = ReleaseWithoutAsm|x64 + {C52F9E7B-498A-42BE-8DB4-85A15694366A}.Debug|Itanium.ActiveCfg = Debug|Itanium + {C52F9E7B-498A-42BE-8DB4-85A15694366A}.Debug|Itanium.Build.0 = Debug|Itanium + {C52F9E7B-498A-42BE-8DB4-85A15694366A}.Debug|Win32.ActiveCfg = Debug|Win32 + {C52F9E7B-498A-42BE-8DB4-85A15694366A}.Debug|Win32.Build.0 = Debug|Win32 + {C52F9E7B-498A-42BE-8DB4-85A15694366A}.Debug|x64.ActiveCfg = Debug|x64 + {C52F9E7B-498A-42BE-8DB4-85A15694366A}.Debug|x64.Build.0 = Debug|x64 + {C52F9E7B-498A-42BE-8DB4-85A15694366A}.Release|Itanium.ActiveCfg = Release|Itanium + {C52F9E7B-498A-42BE-8DB4-85A15694366A}.Release|Itanium.Build.0 = Release|Itanium + {C52F9E7B-498A-42BE-8DB4-85A15694366A}.Release|Win32.ActiveCfg = Release|Win32 + {C52F9E7B-498A-42BE-8DB4-85A15694366A}.Release|Win32.Build.0 = Release|Win32 + {C52F9E7B-498A-42BE-8DB4-85A15694366A}.Release|x64.ActiveCfg = Release|x64 + {C52F9E7B-498A-42BE-8DB4-85A15694366A}.Release|x64.Build.0 = Release|x64 + {C52F9E7B-498A-42BE-8DB4-85A15694366A}.ReleaseWithoutAsm|Itanium.ActiveCfg = Release|Itanium + {C52F9E7B-498A-42BE-8DB4-85A15694366A}.ReleaseWithoutAsm|Itanium.Build.0 = Release|Itanium + {C52F9E7B-498A-42BE-8DB4-85A15694366A}.ReleaseWithoutAsm|Win32.ActiveCfg = Release|Win32 + {C52F9E7B-498A-42BE-8DB4-85A15694366A}.ReleaseWithoutAsm|x64.ActiveCfg = Release|x64 + {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.Debug|Itanium.ActiveCfg = Debug|Itanium + {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.Debug|Itanium.Build.0 = Debug|Itanium + {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.Debug|Win32.ActiveCfg = Debug|Win32 + {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.Debug|Win32.Build.0 = Debug|Win32 + {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.Debug|x64.ActiveCfg = Debug|x64 + {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.Debug|x64.Build.0 = Debug|x64 + {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.Release|Itanium.ActiveCfg = Release|Itanium + {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.Release|Itanium.Build.0 = Release|Itanium + {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.Release|Win32.ActiveCfg = Release|Win32 + {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.Release|Win32.Build.0 = Release|Win32 + {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.Release|x64.ActiveCfg = Release|x64 + {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.Release|x64.Build.0 = Release|x64 + {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.ReleaseWithoutAsm|Itanium.ActiveCfg = Release|Itanium + {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.ReleaseWithoutAsm|Itanium.Build.0 = Release|Itanium + {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.ReleaseWithoutAsm|Win32.ActiveCfg = Release|Win32 + {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.ReleaseWithoutAsm|x64.ActiveCfg = Release|x64 + {C52F9E7B-498A-42BE-8DB4-85A15694382A}.Debug|Itanium.ActiveCfg = Debug|Itanium + {C52F9E7B-498A-42BE-8DB4-85A15694382A}.Debug|Itanium.Build.0 = Debug|Itanium + {C52F9E7B-498A-42BE-8DB4-85A15694382A}.Debug|Win32.ActiveCfg = Debug|Win32 + {C52F9E7B-498A-42BE-8DB4-85A15694382A}.Debug|Win32.Build.0 = Debug|Win32 + {C52F9E7B-498A-42BE-8DB4-85A15694382A}.Debug|x64.ActiveCfg = Debug|x64 + {C52F9E7B-498A-42BE-8DB4-85A15694382A}.Debug|x64.Build.0 = Debug|x64 + {C52F9E7B-498A-42BE-8DB4-85A15694382A}.Release|Itanium.ActiveCfg = Release|Itanium + {C52F9E7B-498A-42BE-8DB4-85A15694382A}.Release|Itanium.Build.0 = Release|Itanium + {C52F9E7B-498A-42BE-8DB4-85A15694382A}.Release|Win32.ActiveCfg = Release|Win32 + {C52F9E7B-498A-42BE-8DB4-85A15694382A}.Release|Win32.Build.0 = Release|Win32 + {C52F9E7B-498A-42BE-8DB4-85A15694382A}.Release|x64.ActiveCfg = Release|x64 + {C52F9E7B-498A-42BE-8DB4-85A15694382A}.Release|x64.Build.0 = Release|x64 + {C52F9E7B-498A-42BE-8DB4-85A15694382A}.ReleaseWithoutAsm|Itanium.ActiveCfg = Release|Itanium + {C52F9E7B-498A-42BE-8DB4-85A15694382A}.ReleaseWithoutAsm|Itanium.Build.0 = Release|Itanium + {C52F9E7B-498A-42BE-8DB4-85A15694382A}.ReleaseWithoutAsm|Win32.ActiveCfg = Release|Win32 + {C52F9E7B-498A-42BE-8DB4-85A15694382A}.ReleaseWithoutAsm|x64.ActiveCfg = Release|x64 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/thirdparty/zlib-1.3.1/contrib/vstudio/vc10/zlibvc.vcxproj b/thirdparty/zlib-1.3.1/contrib/vstudio/vc10/zlibvc.vcxproj new file mode 100644 index 0000000..19dfc35 --- /dev/null +++ b/thirdparty/zlib-1.3.1/contrib/vstudio/vc10/zlibvc.vcxproj @@ -0,0 +1,633 @@ + + + + + Debug + Itanium + + + Debug + Win32 + + + Debug + x64 + + + ReleaseWithoutAsm + Itanium + + + ReleaseWithoutAsm + Win32 + + + ReleaseWithoutAsm + x64 + + + Release + Itanium + + + Release + Win32 + + + Release + x64 + + + + {8FD826F8-3739-44E6-8CC8-997122E53B8D} + + + + DynamicLibrary + false + true + + + DynamicLibrary + false + true + + + DynamicLibrary + false + + + DynamicLibrary + false + true + + + DynamicLibrary + false + true + + + DynamicLibrary + false + + + DynamicLibrary + false + true + + + DynamicLibrary + false + true + + + DynamicLibrary + false + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <_ProjectFileVersion>10.0.30128.1 + x86\ZlibDll$(Configuration)\ + x86\ZlibDll$(Configuration)\Tmp\ + true + false + x86\ZlibDll$(Configuration)\ + x86\ZlibDll$(Configuration)\Tmp\ + false + false + x86\ZlibDll$(Configuration)\ + x86\ZlibDll$(Configuration)\Tmp\ + false + false + x64\ZlibDll$(Configuration)\ + x64\ZlibDll$(Configuration)\Tmp\ + true + false + ia64\ZlibDll$(Configuration)\ + ia64\ZlibDll$(Configuration)\Tmp\ + true + false + x64\ZlibDll$(Configuration)\ + x64\ZlibDll$(Configuration)\Tmp\ + false + false + ia64\ZlibDll$(Configuration)\ + ia64\ZlibDll$(Configuration)\Tmp\ + false + false + x64\ZlibDll$(Configuration)\ + x64\ZlibDll$(Configuration)\Tmp\ + false + false + ia64\ZlibDll$(Configuration)\ + ia64\ZlibDll$(Configuration)\Tmp\ + false + false + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + zlibwapid + zlibwapi + zlibwapi + zlibwapid + zlibwapi + zlibwapi + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + Win32 + $(OutDir)zlibvc.tlb + + + Disabled + ..\..\..;%(AdditionalIncludeDirectories) + WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;ZLIB_WINAPI;%(PreprocessorDefinitions) + + + MultiThreadedDebug + false + $(IntDir)zlibvc.pch + $(IntDir) + $(IntDir) + $(OutDir) + + + Level3 + true + EditAndContinue + + + _DEBUG;%(PreprocessorDefinitions) + 0x040c + + + /MACHINE:I386 %(AdditionalOptions) + %(AdditionalDependencies) + true + .\zlibvc.def + true + true + Windows + false + + + + + + + NDEBUG;%(PreprocessorDefinitions) + true + true + Win32 + $(OutDir)zlibvc.tlb + + + OnlyExplicitInline + ..\..\..;%(AdditionalIncludeDirectories) + WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;ZLIB_WINAPI;%(PreprocessorDefinitions) + true + + + MultiThreadedDLL + false + true + $(IntDir)zlibvc.pch + All + $(IntDir) + $(IntDir) + $(OutDir) + + + Level3 + true + + + NDEBUG;%(PreprocessorDefinitions) + 0x040c + + + /MACHINE:I386 %(AdditionalOptions) + true + false + .\zlibvc.def + true + Windows + false + + + + + + + NDEBUG;%(PreprocessorDefinitions) + true + true + Win32 + $(OutDir)zlibvc.tlb + + + OnlyExplicitInline + ..\..\..;%(AdditionalIncludeDirectories) + WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;ZLIB_WINAPI;%(PreprocessorDefinitions) + true + + + MultiThreaded + false + true + $(IntDir)zlibvc.pch + All + $(IntDir) + $(IntDir) + $(OutDir) + + + Level3 + true + + + NDEBUG;%(PreprocessorDefinitions) + 0x040c + + + /MACHINE:I386 %(AdditionalOptions) + %(AdditionalDependencies) + true + false + .\zlibvc.def + true + Windows + false + + + + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + X64 + $(OutDir)zlibvc.tlb + + + Disabled + ..\..\..;%(AdditionalIncludeDirectories) + WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;ZLIB_WINAPI;WIN64;%(PreprocessorDefinitions) + + + MultiThreadedDebugDLL + false + $(IntDir)zlibvc.pch + $(IntDir) + $(IntDir) + $(OutDir) + + + Level3 + true + ProgramDatabase + + + _DEBUG;%(PreprocessorDefinitions) + 0x040c + + + %(AdditionalDependencies) + true + .\zlibvc.def + true + true + Windows + MachineX64 + + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + Itanium + $(OutDir)zlibvc.tlb + + + Disabled + ..\..\..;%(AdditionalIncludeDirectories) + WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;ZLIB_WINAPI;WIN64;%(PreprocessorDefinitions) + + + MultiThreadedDebugDLL + false + $(IntDir)zlibvc.pch + $(IntDir) + $(IntDir) + $(OutDir) + + + Level3 + true + ProgramDatabase + + + _DEBUG;%(PreprocessorDefinitions) + 0x040c + + + $(OutDir)zlibwapi.dll + true + .\zlibvc.def + true + $(OutDir)zlibwapi.pdb + true + $(OutDir)zlibwapi.map + Windows + $(OutDir)zlibwapi.lib + MachineIA64 + + + + + NDEBUG;%(PreprocessorDefinitions) + true + true + X64 + $(OutDir)zlibvc.tlb + + + OnlyExplicitInline + ..\..\..;%(AdditionalIncludeDirectories) + WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;ZLIB_WINAPI;WIN64;%(PreprocessorDefinitions) + true + + + MultiThreadedDLL + false + true + $(IntDir)zlibvc.pch + All + $(IntDir) + $(IntDir) + $(OutDir) + + + Level3 + true + + + NDEBUG;%(PreprocessorDefinitions) + 0x040c + + + true + false + .\zlibvc.def + true + Windows + MachineX64 + + + + + NDEBUG;%(PreprocessorDefinitions) + true + true + Itanium + $(OutDir)zlibvc.tlb + + + OnlyExplicitInline + ..\..\..;%(AdditionalIncludeDirectories) + WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;ZLIB_WINAPI;WIN64;%(PreprocessorDefinitions) + true + + + MultiThreadedDLL + false + true + $(IntDir)zlibvc.pch + All + $(IntDir) + $(IntDir) + $(OutDir) + + + Level3 + true + + + NDEBUG;%(PreprocessorDefinitions) + 0x040c + + + $(OutDir)zlibwapi.dll + true + false + .\zlibvc.def + $(OutDir)zlibwapi.pdb + true + $(OutDir)zlibwapi.map + Windows + $(OutDir)zlibwapi.lib + MachineIA64 + + + + + NDEBUG;%(PreprocessorDefinitions) + true + true + X64 + $(OutDir)zlibvc.tlb + + + OnlyExplicitInline + ..\..\..;%(AdditionalIncludeDirectories) + _CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;ZLIB_WINAPI;WIN64;%(PreprocessorDefinitions) + true + + + MultiThreadedDLL + false + true + $(IntDir)zlibvc.pch + All + $(IntDir) + $(IntDir) + $(OutDir) + + + Level3 + true + + + NDEBUG;%(PreprocessorDefinitions) + 0x040c + + + %(AdditionalDependencies) + true + false + .\zlibvc.def + true + Windows + MachineX64 + + + + + NDEBUG;%(PreprocessorDefinitions) + true + true + Itanium + $(OutDir)zlibvc.tlb + + + OnlyExplicitInline + ..\..\..;%(AdditionalIncludeDirectories) + _CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;ZLIB_WINAPI;WIN64;%(PreprocessorDefinitions) + true + + + MultiThreadedDLL + false + true + $(IntDir)zlibvc.pch + All + $(IntDir) + $(IntDir) + $(OutDir) + + + Level3 + true + + + NDEBUG;%(PreprocessorDefinitions) + 0x040c + + + $(OutDir)zlibwapi.dll + true + false + .\zlibvc.def + $(OutDir)zlibwapi.pdb + true + $(OutDir)zlibwapi.map + Windows + $(OutDir)zlibwapi.lib + MachineIA64 + + + + + + + + + + + + + + + + + + + + + %(AdditionalIncludeDirectories) + ZLIB_INTERNAL;%(PreprocessorDefinitions) + %(AdditionalIncludeDirectories) + ZLIB_INTERNAL;%(PreprocessorDefinitions) + %(AdditionalIncludeDirectories) + ZLIB_INTERNAL;%(PreprocessorDefinitions) + + + %(AdditionalIncludeDirectories) + ZLIB_INTERNAL;%(PreprocessorDefinitions) + %(AdditionalIncludeDirectories) + ZLIB_INTERNAL;%(PreprocessorDefinitions) + %(AdditionalIncludeDirectories) + ZLIB_INTERNAL;%(PreprocessorDefinitions) + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/thirdparty/zlib-1.3.1/contrib/vstudio/vc10/zlibvc.vcxproj.filters b/thirdparty/zlib-1.3.1/contrib/vstudio/vc10/zlibvc.vcxproj.filters new file mode 100644 index 0000000..67c444a --- /dev/null +++ b/thirdparty/zlib-1.3.1/contrib/vstudio/vc10/zlibvc.vcxproj.filters @@ -0,0 +1,115 @@ + + + + + {07934a85-8b61-443d-a0ee-b2eedb74f3cd} + cpp;c;cxx;rc;def;r;odl;hpj;bat;for;f90 + + + {1d99675b-433d-4a21-9e50-ed4ab8b19762} + h;hpp;hxx;hm;inl;fi;fd + + + {431c0958-fa71-44d0-9084-2d19d100c0cc} + ico;cur;bmp;dlg;rc2;rct;bin;cnt;rtf;gif;jpg;jpeg;jpe + + + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + Source Files + + + + + Source Files + + + + + Source Files + + + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + Header Files + + + \ No newline at end of file diff --git a/thirdparty/zlib-1.3.1/contrib/vstudio/vc11/miniunz.vcxproj b/thirdparty/zlib-1.3.1/contrib/vstudio/vc11/miniunz.vcxproj new file mode 100644 index 0000000..8f9f20b --- /dev/null +++ b/thirdparty/zlib-1.3.1/contrib/vstudio/vc11/miniunz.vcxproj @@ -0,0 +1,314 @@ + + + + + Debug + Itanium + + + Debug + Win32 + + + Debug + x64 + + + Release + Itanium + + + Release + Win32 + + + Release + x64 + + + + {C52F9E7B-498A-42BE-8DB4-85A15694382A} + Win32Proj + + + + Application + MultiByte + v110 + + + Application + Unicode + v110 + + + Application + MultiByte + + + Application + MultiByte + + + Application + MultiByte + v110 + + + Application + MultiByte + v110 + + + + + + + + + + + + + + + + + + + + + + + + + <_ProjectFileVersion>10.0.30128.1 + x86\MiniUnzip$(Configuration)\ + x86\MiniUnzip$(Configuration)\Tmp\ + true + false + x86\MiniUnzip$(Configuration)\ + x86\MiniUnzip$(Configuration)\Tmp\ + false + false + x64\MiniUnzip$(Configuration)\ + x64\MiniUnzip$(Configuration)\Tmp\ + true + false + ia64\MiniUnzip$(Configuration)\ + ia64\MiniUnzip$(Configuration)\Tmp\ + true + false + x64\MiniUnzip$(Configuration)\ + x64\MiniUnzip$(Configuration)\Tmp\ + false + false + ia64\MiniUnzip$(Configuration)\ + ia64\MiniUnzip$(Configuration)\Tmp\ + false + false + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + + + + Disabled + ..\..\..;..\..\minizip;%(AdditionalIncludeDirectories) + WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + Default + MultiThreadedDebugDLL + false + + + $(IntDir) + Level3 + ProgramDatabase + + + x86\ZlibDllDebug\zlibwapi.lib;%(AdditionalDependencies) + $(OutDir)miniunz.exe + true + $(OutDir)miniunz.pdb + Console + false + + + MachineX86 + + + + + MaxSpeed + OnlyExplicitInline + true + ..\..\..;..\..\minizip;%(AdditionalIncludeDirectories) + WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + Default + MultiThreaded + false + true + + + $(IntDir) + Level3 + ProgramDatabase + + + x86\ZlibDllRelease\zlibwapi.lib;%(AdditionalDependencies) + $(OutDir)miniunz.exe + true + Console + true + true + false + + + MachineX86 + + + + + X64 + + + Disabled + ..\..\..;..\..\minizip;%(AdditionalIncludeDirectories) + _CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;_DEBUG;_CONSOLE;WIN64;%(PreprocessorDefinitions) + true + Default + MultiThreadedDebugDLL + false + + + $(IntDir) + Level3 + ProgramDatabase + + + x64\ZlibDllDebug\zlibwapi.lib;%(AdditionalDependencies) + $(OutDir)miniunz.exe + true + $(OutDir)miniunz.pdb + Console + MachineX64 + + + + + Itanium + + + Disabled + ..\..\..;..\..\minizip;%(AdditionalIncludeDirectories) + _CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;_DEBUG;_CONSOLE;WIN64;%(PreprocessorDefinitions) + true + Default + MultiThreadedDebugDLL + false + + + $(IntDir) + Level3 + ProgramDatabase + + + ia64\ZlibDllDebug\zlibwapi.lib;%(AdditionalDependencies) + $(OutDir)miniunz.exe + true + $(OutDir)miniunz.pdb + Console + MachineIA64 + + + + + X64 + + + MaxSpeed + OnlyExplicitInline + true + ..\..\..;..\..\minizip;%(AdditionalIncludeDirectories) + _CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;NDEBUG;_CONSOLE;WIN64;%(PreprocessorDefinitions) + true + Default + MultiThreadedDLL + false + true + + + $(IntDir) + Level3 + ProgramDatabase + + + x64\ZlibDllRelease\zlibwapi.lib;%(AdditionalDependencies) + $(OutDir)miniunz.exe + true + Console + true + true + MachineX64 + + + + + Itanium + + + MaxSpeed + OnlyExplicitInline + true + ..\..\..;..\..\minizip;%(AdditionalIncludeDirectories) + _CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;NDEBUG;_CONSOLE;WIN64;%(PreprocessorDefinitions) + true + Default + MultiThreadedDLL + false + true + + + $(IntDir) + Level3 + ProgramDatabase + + + ia64\ZlibDllRelease\zlibwapi.lib;%(AdditionalDependencies) + $(OutDir)miniunz.exe + true + Console + true + true + MachineIA64 + + + + + + + + {8fd826f8-3739-44e6-8cc8-997122e53b8d} + + + + + + \ No newline at end of file diff --git a/thirdparty/zlib-1.3.1/contrib/vstudio/vc11/minizip.vcxproj b/thirdparty/zlib-1.3.1/contrib/vstudio/vc11/minizip.vcxproj new file mode 100644 index 0000000..c93d9e6 --- /dev/null +++ b/thirdparty/zlib-1.3.1/contrib/vstudio/vc11/minizip.vcxproj @@ -0,0 +1,311 @@ + + + + + Debug + Itanium + + + Debug + Win32 + + + Debug + x64 + + + Release + Itanium + + + Release + Win32 + + + Release + x64 + + + + {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B} + Win32Proj + + + + Application + MultiByte + v110 + + + Application + Unicode + v110 + + + Application + MultiByte + + + Application + MultiByte + + + Application + MultiByte + v110 + + + Application + MultiByte + v110 + + + + + + + + + + + + + + + + + + + + + + + + + <_ProjectFileVersion>10.0.30128.1 + x86\MiniZip$(Configuration)\ + x86\MiniZip$(Configuration)\Tmp\ + true + false + x86\MiniZip$(Configuration)\ + x86\MiniZip$(Configuration)\Tmp\ + false + x64\$(Configuration)\ + x64\$(Configuration)\ + true + false + ia64\$(Configuration)\ + ia64\$(Configuration)\ + true + false + x64\$(Configuration)\ + x64\$(Configuration)\ + false + ia64\$(Configuration)\ + ia64\$(Configuration)\ + false + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + + + + Disabled + ..\..\..;..\..\minizip;%(AdditionalIncludeDirectories) + WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + Default + MultiThreadedDebugDLL + false + + + $(IntDir) + Level3 + ProgramDatabase + + + x86\ZlibDllDebug\zlibwapi.lib;%(AdditionalDependencies) + $(OutDir)minizip.exe + true + $(OutDir)minizip.pdb + Console + false + + + MachineX86 + + + + + MaxSpeed + OnlyExplicitInline + true + ..\..\..;..\..\minizip;%(AdditionalIncludeDirectories) + WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + Default + MultiThreaded + false + true + + + $(IntDir) + Level3 + ProgramDatabase + + + x86\ZlibDllRelease\zlibwapi.lib;%(AdditionalDependencies) + $(OutDir)minizip.exe + true + Console + true + true + false + + + MachineX86 + + + + + X64 + + + Disabled + ..\..\..;..\..\minizip;%(AdditionalIncludeDirectories) + _CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;_DEBUG;_CONSOLE;WIN64;%(PreprocessorDefinitions) + true + Default + MultiThreadedDebugDLL + false + + + $(IntDir) + Level3 + ProgramDatabase + + + x64\ZlibDllDebug\zlibwapi.lib;%(AdditionalDependencies) + $(OutDir)minizip.exe + true + $(OutDir)minizip.pdb + Console + MachineX64 + + + + + Itanium + + + Disabled + ..\..\..;..\..\minizip;%(AdditionalIncludeDirectories) + _CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;_DEBUG;_CONSOLE;WIN64;%(PreprocessorDefinitions) + true + Default + MultiThreadedDebugDLL + false + + + $(IntDir) + Level3 + ProgramDatabase + + + ia64\ZlibDllDebug\zlibwapi.lib;%(AdditionalDependencies) + $(OutDir)minizip.exe + true + $(OutDir)minizip.pdb + Console + MachineIA64 + + + + + X64 + + + MaxSpeed + OnlyExplicitInline + true + ..\..\..;..\..\minizip;%(AdditionalIncludeDirectories) + _CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;NDEBUG;_CONSOLE;WIN64;%(PreprocessorDefinitions) + true + Default + MultiThreadedDLL + false + true + + + $(IntDir) + Level3 + ProgramDatabase + + + x64\ZlibDllRelease\zlibwapi.lib;%(AdditionalDependencies) + $(OutDir)minizip.exe + true + Console + true + true + MachineX64 + + + + + Itanium + + + MaxSpeed + OnlyExplicitInline + true + ..\..\..;..\..\minizip;%(AdditionalIncludeDirectories) + _CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;NDEBUG;_CONSOLE;WIN64;%(PreprocessorDefinitions) + true + Default + MultiThreadedDLL + false + true + + + $(IntDir) + Level3 + ProgramDatabase + + + ia64\ZlibDllRelease\zlibwapi.lib;%(AdditionalDependencies) + $(OutDir)minizip.exe + true + Console + true + true + MachineIA64 + + + + + + + + {8fd826f8-3739-44e6-8cc8-997122e53b8d} + + + + + + \ No newline at end of file diff --git a/thirdparty/zlib-1.3.1/contrib/vstudio/vc11/testzlib.vcxproj b/thirdparty/zlib-1.3.1/contrib/vstudio/vc11/testzlib.vcxproj new file mode 100644 index 0000000..c6198c1 --- /dev/null +++ b/thirdparty/zlib-1.3.1/contrib/vstudio/vc11/testzlib.vcxproj @@ -0,0 +1,418 @@ + + + + + Debug + Itanium + + + Debug + Win32 + + + Debug + x64 + + + ReleaseWithoutAsm + Itanium + + + ReleaseWithoutAsm + Win32 + + + ReleaseWithoutAsm + x64 + + + Release + Itanium + + + Release + Win32 + + + Release + x64 + + + + {AA6666AA-E09F-4135-9C0C-4FE50C3C654B} + testzlib + Win32Proj + + + + Application + MultiByte + true + v110 + + + Application + MultiByte + true + v110 + + + Application + Unicode + v110 + + + Application + MultiByte + true + + + Application + MultiByte + true + + + Application + MultiByte + + + Application + true + v110 + + + Application + true + v110 + + + Application + v110 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <_ProjectFileVersion>10.0.30128.1 + x86\TestZlib$(Configuration)\ + x86\TestZlib$(Configuration)\Tmp\ + true + false + x86\TestZlib$(Configuration)\ + x86\TestZlib$(Configuration)\Tmp\ + false + false + x86\TestZlib$(Configuration)\ + x86\TestZlib$(Configuration)\Tmp\ + false + false + x64\TestZlib$(Configuration)\ + x64\TestZlib$(Configuration)\Tmp\ + false + ia64\TestZlib$(Configuration)\ + ia64\TestZlib$(Configuration)\Tmp\ + true + false + x64\TestZlib$(Configuration)\ + x64\TestZlib$(Configuration)\Tmp\ + false + ia64\TestZlib$(Configuration)\ + ia64\TestZlib$(Configuration)\Tmp\ + false + false + x64\TestZlib$(Configuration)\ + x64\TestZlib$(Configuration)\Tmp\ + false + ia64\TestZlib$(Configuration)\ + ia64\TestZlib$(Configuration)\Tmp\ + false + false + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + + + + Disabled + ..\..\..;%(AdditionalIncludeDirectories) + WIN32;ZLIB_WINAPI;_DEBUG;_CONSOLE;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;%(PreprocessorDefinitions) + true + Default + MultiThreadedDebugDLL + false + + + AssemblyAndSourceCode + $(IntDir) + Level3 + ProgramDatabase + + + %(AdditionalDependencies) + $(OutDir)testzlib.exe + true + $(OutDir)testzlib.pdb + Console + false + + + MachineX86 + + + + + MaxSpeed + OnlyExplicitInline + true + ..\..\..;%(AdditionalIncludeDirectories) + WIN32;ZLIB_WINAPI;NDEBUG;_CONSOLE;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;%(PreprocessorDefinitions) + true + Default + MultiThreaded + false + true + + + $(IntDir) + Level3 + ProgramDatabase + + + $(OutDir)testzlib.exe + true + Console + true + true + false + + + MachineX86 + + + + + MaxSpeed + OnlyExplicitInline + true + ..\..\..;%(AdditionalIncludeDirectories) + WIN32;ZLIB_WINAPI;NDEBUG;_CONSOLE;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;%(PreprocessorDefinitions) + true + Default + MultiThreaded + false + true + + + $(IntDir) + Level3 + ProgramDatabase + + + %(AdditionalDependencies) + $(OutDir)testzlib.exe + true + Console + true + true + false + + + MachineX86 + + + + + ..\..\..;%(AdditionalIncludeDirectories) + WIN32;ZLIB_WINAPI;_DEBUG;_CONSOLE;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;%(PreprocessorDefinitions) + Default + MultiThreadedDebugDLL + false + $(IntDir) + + + %(AdditionalDependencies) + + + + + Itanium + + + Disabled + ..\..\..;%(AdditionalIncludeDirectories) + ZLIB_WINAPI;_DEBUG;_CONSOLE;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;WIN64;%(PreprocessorDefinitions) + true + Default + MultiThreadedDebugDLL + false + + + AssemblyAndSourceCode + $(IntDir) + Level3 + ProgramDatabase + + + $(OutDir)testzlib.exe + true + $(OutDir)testzlib.pdb + Console + MachineIA64 + + + + + ..\..\..;%(AdditionalIncludeDirectories) + WIN32;ZLIB_WINAPI;NDEBUG;_CONSOLE;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;%(PreprocessorDefinitions) + Default + MultiThreadedDLL + false + $(IntDir) + + + %(AdditionalDependencies) + + + + + Itanium + + + MaxSpeed + OnlyExplicitInline + true + ..\..\..;%(AdditionalIncludeDirectories) + ZLIB_WINAPI;NDEBUG;_CONSOLE;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;WIN64;%(PreprocessorDefinitions) + true + Default + MultiThreadedDLL + false + true + + + $(IntDir) + Level3 + ProgramDatabase + + + $(OutDir)testzlib.exe + true + Console + true + true + MachineIA64 + + + + + ..\..\..;%(AdditionalIncludeDirectories) + WIN32;ZLIB_WINAPI;NDEBUG;_CONSOLE;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;%(PreprocessorDefinitions) + Default + MultiThreadedDLL + false + $(IntDir) + + + %(AdditionalDependencies) + + + + + Itanium + + + MaxSpeed + OnlyExplicitInline + true + ..\..\..;%(AdditionalIncludeDirectories) + ZLIB_WINAPI;NDEBUG;_CONSOLE;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;WIN64;%(PreprocessorDefinitions) + true + Default + MultiThreadedDLL + false + true + + + $(IntDir) + Level3 + ProgramDatabase + + + $(OutDir)testzlib.exe + true + Console + true + true + MachineIA64 + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/thirdparty/zlib-1.3.1/contrib/vstudio/vc11/testzlibdll.vcxproj b/thirdparty/zlib-1.3.1/contrib/vstudio/vc11/testzlibdll.vcxproj new file mode 100644 index 0000000..9f20c78 --- /dev/null +++ b/thirdparty/zlib-1.3.1/contrib/vstudio/vc11/testzlibdll.vcxproj @@ -0,0 +1,314 @@ + + + + + Debug + Itanium + + + Debug + Win32 + + + Debug + x64 + + + Release + Itanium + + + Release + Win32 + + + Release + x64 + + + + {C52F9E7B-498A-42BE-8DB4-85A15694366A} + Win32Proj + + + + Application + MultiByte + v110 + + + Application + Unicode + v110 + + + Application + MultiByte + + + Application + MultiByte + + + Application + MultiByte + v110 + + + Application + MultiByte + v110 + + + + + + + + + + + + + + + + + + + + + + + + + <_ProjectFileVersion>10.0.30128.1 + x86\TestZlibDll$(Configuration)\ + x86\TestZlibDll$(Configuration)\Tmp\ + true + false + x86\TestZlibDll$(Configuration)\ + x86\TestZlibDll$(Configuration)\Tmp\ + false + false + x64\TestZlibDll$(Configuration)\ + x64\TestZlibDll$(Configuration)\Tmp\ + true + false + ia64\TestZlibDll$(Configuration)\ + ia64\TestZlibDll$(Configuration)\Tmp\ + true + false + x64\TestZlibDll$(Configuration)\ + x64\TestZlibDll$(Configuration)\Tmp\ + false + false + ia64\TestZlibDll$(Configuration)\ + ia64\TestZlibDll$(Configuration)\Tmp\ + false + false + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + + + + Disabled + ..\..\..;..\..\minizip;%(AdditionalIncludeDirectories) + WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + Default + MultiThreadedDebugDLL + false + + + $(IntDir) + Level3 + ProgramDatabase + + + x86\ZlibDllDebug\zlibwapi.lib;%(AdditionalDependencies) + $(OutDir)testzlibdll.exe + true + $(OutDir)testzlib.pdb + Console + false + + + MachineX86 + + + + + MaxSpeed + OnlyExplicitInline + true + ..\..\..;..\..\minizip;%(AdditionalIncludeDirectories) + WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + Default + MultiThreaded + false + true + + + $(IntDir) + Level3 + ProgramDatabase + + + x86\ZlibDllRelease\zlibwapi.lib;%(AdditionalDependencies) + $(OutDir)testzlibdll.exe + true + Console + true + true + false + + + MachineX86 + + + + + X64 + + + Disabled + ..\..\..;..\..\minizip;%(AdditionalIncludeDirectories) + _CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;_DEBUG;_CONSOLE;WIN64;%(PreprocessorDefinitions) + true + Default + MultiThreadedDebugDLL + false + + + $(IntDir) + Level3 + ProgramDatabase + + + x64\ZlibDllDebug\zlibwapi.lib;%(AdditionalDependencies) + $(OutDir)testzlibdll.exe + true + $(OutDir)testzlib.pdb + Console + MachineX64 + + + + + Itanium + + + Disabled + ..\..\..;..\..\minizip;%(AdditionalIncludeDirectories) + _CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;_DEBUG;_CONSOLE;WIN64;%(PreprocessorDefinitions) + true + Default + MultiThreadedDebugDLL + false + + + $(IntDir) + Level3 + ProgramDatabase + + + ia64\ZlibDllDebug\zlibwapi.lib;%(AdditionalDependencies) + $(OutDir)testzlibdll.exe + true + $(OutDir)testzlib.pdb + Console + MachineIA64 + + + + + X64 + + + MaxSpeed + OnlyExplicitInline + true + ..\..\..;..\..\minizip;%(AdditionalIncludeDirectories) + _CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;NDEBUG;_CONSOLE;WIN64;%(PreprocessorDefinitions) + true + Default + MultiThreadedDLL + false + true + + + $(IntDir) + Level3 + ProgramDatabase + + + x64\ZlibDllRelease\zlibwapi.lib;%(AdditionalDependencies) + $(OutDir)testzlibdll.exe + true + Console + true + true + MachineX64 + + + + + Itanium + + + MaxSpeed + OnlyExplicitInline + true + ..\..\..;..\..\minizip;%(AdditionalIncludeDirectories) + _CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;NDEBUG;_CONSOLE;WIN64;%(PreprocessorDefinitions) + true + Default + MultiThreadedDLL + false + true + + + $(IntDir) + Level3 + ProgramDatabase + + + ia64\ZlibDllRelease\zlibwapi.lib;%(AdditionalDependencies) + $(OutDir)testzlibdll.exe + true + Console + true + true + MachineIA64 + + + + + + + + {8fd826f8-3739-44e6-8cc8-997122e53b8d} + + + + + + \ No newline at end of file diff --git a/thirdparty/zlib-1.3.1/contrib/vstudio/vc11/zlib.rc b/thirdparty/zlib-1.3.1/contrib/vstudio/vc11/zlib.rc new file mode 100644 index 0000000..856bd11 --- /dev/null +++ b/thirdparty/zlib-1.3.1/contrib/vstudio/vc11/zlib.rc @@ -0,0 +1,32 @@ +#include + +#define IDR_VERSION1 1 +IDR_VERSION1 VERSIONINFO MOVEABLE IMPURE LOADONCALL DISCARDABLE + FILEVERSION 1, 3, 1, 0 + PRODUCTVERSION 1, 3, 1, 0 + FILEFLAGSMASK VS_FFI_FILEFLAGSMASK + FILEFLAGS 0 + FILEOS VOS_DOS_WINDOWS32 + FILETYPE VFT_DLL + FILESUBTYPE 0 // not used +BEGIN + BLOCK "StringFileInfo" + BEGIN + BLOCK "040904E4" + //language ID = U.S. English, char set = Windows, Multilingual + + BEGIN + VALUE "FileDescription", "zlib data compression and ZIP file I/O library\0" + VALUE "FileVersion", "1.3.1\0" + VALUE "InternalName", "zlib\0" + VALUE "OriginalFilename", "zlibwapi.dll\0" + VALUE "ProductName", "ZLib.DLL\0" + VALUE "Comments","DLL support by Alessandro Iacopetti & Gilles Vollant\0" + VALUE "LegalCopyright", "(C) 1995-2024 Jean-loup Gailly & Mark Adler\0" + END + END + BLOCK "VarFileInfo" + BEGIN + VALUE "Translation", 0x0409, 1252 + END +END diff --git a/thirdparty/zlib-1.3.1/contrib/vstudio/vc11/zlibstat.vcxproj b/thirdparty/zlib-1.3.1/contrib/vstudio/vc11/zlibstat.vcxproj new file mode 100644 index 0000000..86fb1c8 --- /dev/null +++ b/thirdparty/zlib-1.3.1/contrib/vstudio/vc11/zlibstat.vcxproj @@ -0,0 +1,456 @@ + + + + + Debug + Itanium + + + Debug + Win32 + + + Debug + x64 + + + ReleaseWithoutAsm + Itanium + + + ReleaseWithoutAsm + Win32 + + + ReleaseWithoutAsm + x64 + + + Release + Itanium + + + Release + Win32 + + + Release + x64 + + + + {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8} + + + + StaticLibrary + false + v110 + + + StaticLibrary + false + v110 + + + StaticLibrary + false + v110 + Unicode + + + StaticLibrary + false + + + StaticLibrary + false + + + StaticLibrary + false + + + StaticLibrary + false + v110 + + + StaticLibrary + false + v110 + + + StaticLibrary + false + v110 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <_ProjectFileVersion>10.0.30128.1 + x86\ZlibStat$(Configuration)\ + x86\ZlibStat$(Configuration)\Tmp\ + x86\ZlibStat$(Configuration)\ + x86\ZlibStat$(Configuration)\Tmp\ + x86\ZlibStat$(Configuration)\ + x86\ZlibStat$(Configuration)\Tmp\ + x64\ZlibStat$(Configuration)\ + x64\ZlibStat$(Configuration)\Tmp\ + ia64\ZlibStat$(Configuration)\ + ia64\ZlibStat$(Configuration)\Tmp\ + x64\ZlibStat$(Configuration)\ + x64\ZlibStat$(Configuration)\Tmp\ + ia64\ZlibStat$(Configuration)\ + ia64\ZlibStat$(Configuration)\Tmp\ + x64\ZlibStat$(Configuration)\ + x64\ZlibStat$(Configuration)\Tmp\ + ia64\ZlibStat$(Configuration)\ + ia64\ZlibStat$(Configuration)\Tmp\ + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + + + + Disabled + ..\..\..;%(AdditionalIncludeDirectories) + WIN32;ZLIB_WINAPI;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;%(PreprocessorDefinitions) + + + MultiThreadedDebugDLL + false + $(IntDir)zlibstat.pch + $(IntDir) + $(IntDir) + $(OutDir) + Level3 + true + OldStyle + + + 0x040c + + + /MACHINE:X86 /NODEFAULTLIB %(AdditionalOptions) + $(OutDir)zlibstat.lib + true + + + + + OnlyExplicitInline + ..\..\..;%(AdditionalIncludeDirectories) + WIN32;ZLIB_WINAPI;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;%(PreprocessorDefinitions) + true + + + MultiThreaded + false + true + $(IntDir)zlibstat.pch + $(IntDir) + $(IntDir) + $(OutDir) + Level3 + true + + + 0x040c + + + /MACHINE:X86 /NODEFAULTLIB %(AdditionalOptions) + %(AdditionalDependencies) + $(OutDir)zlibstat.lib + true + + + + + OnlyExplicitInline + ..\..\..;%(AdditionalIncludeDirectories) + WIN32;ZLIB_WINAPI;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;%(PreprocessorDefinitions) + true + + + MultiThreaded + false + true + $(IntDir)zlibstat.pch + $(IntDir) + $(IntDir) + $(OutDir) + Level3 + true + + + 0x040c + + + /MACHINE:X86 /NODEFAULTLIB %(AdditionalOptions) + $(OutDir)zlibstat.lib + true + + + + + X64 + + + Disabled + ..\..\..;%(AdditionalIncludeDirectories) + ZLIB_WINAPI;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;WIN64;%(PreprocessorDefinitions) + + + MultiThreadedDebugDLL + false + $(IntDir)zlibstat.pch + $(IntDir) + $(IntDir) + $(OutDir) + Level3 + true + OldStyle + + + 0x040c + + + /MACHINE:AMD64 /NODEFAULTLIB %(AdditionalOptions) + $(OutDir)zlibstat.lib + true + + + + + Itanium + + + Disabled + ..\..\..;%(AdditionalIncludeDirectories) + ZLIB_WINAPI;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;WIN64;%(PreprocessorDefinitions) + + + MultiThreadedDebugDLL + false + $(IntDir)zlibstat.pch + $(IntDir) + $(IntDir) + $(OutDir) + Level3 + true + OldStyle + + + 0x040c + + + /MACHINE:IA64 /NODEFAULTLIB %(AdditionalOptions) + $(OutDir)zlibstat.lib + true + + + + + X64 + + + OnlyExplicitInline + ..\..\..;%(AdditionalIncludeDirectories) + ZLIB_WINAPI;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;WIN64;%(PreprocessorDefinitions) + true + + + MultiThreadedDLL + false + true + $(IntDir)zlibstat.pch + $(IntDir) + $(IntDir) + $(OutDir) + Level3 + true + + + 0x040c + + + /MACHINE:AMD64 /NODEFAULTLIB %(AdditionalOptions) + %(AdditionalDependencies) + $(OutDir)zlibstat.lib + true + + + + + Itanium + + + OnlyExplicitInline + ..\..\..;%(AdditionalIncludeDirectories) + ZLIB_WINAPI;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;WIN64;%(PreprocessorDefinitions) + true + + + MultiThreadedDLL + false + true + $(IntDir)zlibstat.pch + $(IntDir) + $(IntDir) + $(OutDir) + Level3 + true + + + 0x040c + + + /MACHINE:IA64 /NODEFAULTLIB %(AdditionalOptions) + $(OutDir)zlibstat.lib + true + + + + + X64 + + + OnlyExplicitInline + ..\..\..;%(AdditionalIncludeDirectories) + ZLIB_WINAPI;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;WIN64;%(PreprocessorDefinitions) + true + + + MultiThreadedDLL + false + true + $(IntDir)zlibstat.pch + $(IntDir) + $(IntDir) + $(OutDir) + Level3 + true + + + 0x040c + + + /MACHINE:AMD64 /NODEFAULTLIB %(AdditionalOptions) + $(OutDir)zlibstat.lib + true + + + + + Itanium + + + OnlyExplicitInline + ..\..\..;%(AdditionalIncludeDirectories) + ZLIB_WINAPI;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;WIN64;%(PreprocessorDefinitions) + true + + + MultiThreadedDLL + false + true + $(IntDir)zlibstat.pch + $(IntDir) + $(IntDir) + $(OutDir) + Level3 + true + + + 0x040c + + + /MACHINE:IA64 /NODEFAULTLIB %(AdditionalOptions) + $(OutDir)zlibstat.lib + true + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/thirdparty/zlib-1.3.1/contrib/vstudio/vc11/zlibvc.def b/thirdparty/zlib-1.3.1/contrib/vstudio/vc11/zlibvc.def new file mode 100644 index 0000000..3234a02 --- /dev/null +++ b/thirdparty/zlib-1.3.1/contrib/vstudio/vc11/zlibvc.def @@ -0,0 +1,158 @@ +LIBRARY +; zlib data compression and ZIP file I/O library + +VERSION 1.3.1 + +EXPORTS + adler32 @1 + compress @2 + crc32 @3 + deflate @4 + deflateCopy @5 + deflateEnd @6 + deflateInit2_ @7 + deflateInit_ @8 + deflateParams @9 + deflateReset @10 + deflateSetDictionary @11 + gzclose @12 + gzdopen @13 + gzerror @14 + gzflush @15 + gzopen @16 + gzread @17 + gzwrite @18 + inflate @19 + inflateEnd @20 + inflateInit2_ @21 + inflateInit_ @22 + inflateReset @23 + inflateSetDictionary @24 + inflateSync @25 + uncompress @26 + zlibVersion @27 + gzprintf @28 + gzputc @29 + gzgetc @30 + gzseek @31 + gzrewind @32 + gztell @33 + gzeof @34 + gzsetparams @35 + zError @36 + inflateSyncPoint @37 + get_crc_table @38 + compress2 @39 + gzputs @40 + gzgets @41 + inflateCopy @42 + inflateBackInit_ @43 + inflateBack @44 + inflateBackEnd @45 + compressBound @46 + deflateBound @47 + gzclearerr @48 + gzungetc @49 + zlibCompileFlags @50 + deflatePrime @51 + deflatePending @52 + + unzOpen @61 + unzClose @62 + unzGetGlobalInfo @63 + unzGetCurrentFileInfo @64 + unzGoToFirstFile @65 + unzGoToNextFile @66 + unzOpenCurrentFile @67 + unzReadCurrentFile @68 + unzOpenCurrentFile3 @69 + unztell @70 + unzeof @71 + unzCloseCurrentFile @72 + unzGetGlobalComment @73 + unzStringFileNameCompare @74 + unzLocateFile @75 + unzGetLocalExtrafield @76 + unzOpen2 @77 + unzOpenCurrentFile2 @78 + unzOpenCurrentFilePassword @79 + + zipOpen @80 + zipOpenNewFileInZip @81 + zipWriteInFileInZip @82 + zipCloseFileInZip @83 + zipClose @84 + zipOpenNewFileInZip2 @86 + zipCloseFileInZipRaw @87 + zipOpen2 @88 + zipOpenNewFileInZip3 @89 + + unzGetFilePos @100 + unzGoToFilePos @101 + + fill_win32_filefunc @110 + +; zlibwapi v1.2.4 added: + fill_win32_filefunc64 @111 + fill_win32_filefunc64A @112 + fill_win32_filefunc64W @113 + + unzOpen64 @120 + unzOpen2_64 @121 + unzGetGlobalInfo64 @122 + unzGetCurrentFileInfo64 @124 + unzGetCurrentFileZStreamPos64 @125 + unztell64 @126 + unzGetFilePos64 @127 + unzGoToFilePos64 @128 + + zipOpen64 @130 + zipOpen2_64 @131 + zipOpenNewFileInZip64 @132 + zipOpenNewFileInZip2_64 @133 + zipOpenNewFileInZip3_64 @134 + zipOpenNewFileInZip4_64 @135 + zipCloseFileInZipRaw64 @136 + +; zlib1 v1.2.4 added: + adler32_combine @140 + crc32_combine @142 + deflateSetHeader @144 + deflateTune @145 + gzbuffer @146 + gzclose_r @147 + gzclose_w @148 + gzdirect @149 + gzoffset @150 + inflateGetHeader @156 + inflateMark @157 + inflatePrime @158 + inflateReset2 @159 + inflateUndermine @160 + +; zlib1 v1.2.6 added: + gzgetc_ @161 + inflateResetKeep @163 + deflateResetKeep @164 + +; zlib1 v1.2.7 added: + gzopen_w @165 + +; zlib1 v1.2.8 added: + inflateGetDictionary @166 + gzvprintf @167 + +; zlib1 v1.2.9 added: + inflateCodesUsed @168 + inflateValidate @169 + uncompress2 @170 + gzfread @171 + gzfwrite @172 + deflateGetDictionary @173 + adler32_z @174 + crc32_z @175 + +; zlib1 v1.2.12 added: + crc32_combine_gen @176 + crc32_combine_gen64 @177 + crc32_combine_op @178 diff --git a/thirdparty/zlib-1.3.1/contrib/vstudio/vc11/zlibvc.sln b/thirdparty/zlib-1.3.1/contrib/vstudio/vc11/zlibvc.sln new file mode 100644 index 0000000..9fcbafd --- /dev/null +++ b/thirdparty/zlib-1.3.1/contrib/vstudio/vc11/zlibvc.sln @@ -0,0 +1,117 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio 2012 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "zlibvc", "zlibvc.vcxproj", "{8FD826F8-3739-44E6-8CC8-997122E53B8D}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "zlibstat", "zlibstat.vcxproj", "{745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "testzlib", "testzlib.vcxproj", "{AA6666AA-E09F-4135-9C0C-4FE50C3C654B}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "testzlibdll", "testzlibdll.vcxproj", "{C52F9E7B-498A-42BE-8DB4-85A15694366A}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "minizip", "minizip.vcxproj", "{48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "miniunz", "miniunz.vcxproj", "{C52F9E7B-498A-42BE-8DB4-85A15694382A}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Itanium = Debug|Itanium + Debug|Win32 = Debug|Win32 + Debug|x64 = Debug|x64 + Release|Itanium = Release|Itanium + Release|Win32 = Release|Win32 + Release|x64 = Release|x64 + ReleaseWithoutAsm|Itanium = ReleaseWithoutAsm|Itanium + ReleaseWithoutAsm|Win32 = ReleaseWithoutAsm|Win32 + ReleaseWithoutAsm|x64 = ReleaseWithoutAsm|x64 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {8FD826F8-3739-44E6-8CC8-997122E53B8D}.Debug|Itanium.ActiveCfg = Debug|Win32 + {8FD826F8-3739-44E6-8CC8-997122E53B8D}.Debug|Win32.ActiveCfg = Debug|Win32 + {8FD826F8-3739-44E6-8CC8-997122E53B8D}.Debug|Win32.Build.0 = Debug|Win32 + {8FD826F8-3739-44E6-8CC8-997122E53B8D}.Debug|x64.ActiveCfg = Debug|x64 + {8FD826F8-3739-44E6-8CC8-997122E53B8D}.Debug|x64.Build.0 = Debug|x64 + {8FD826F8-3739-44E6-8CC8-997122E53B8D}.Release|Itanium.ActiveCfg = Release|Win32 + {8FD826F8-3739-44E6-8CC8-997122E53B8D}.Release|Win32.ActiveCfg = Release|Win32 + {8FD826F8-3739-44E6-8CC8-997122E53B8D}.Release|Win32.Build.0 = Release|Win32 + {8FD826F8-3739-44E6-8CC8-997122E53B8D}.Release|x64.ActiveCfg = Release|x64 + {8FD826F8-3739-44E6-8CC8-997122E53B8D}.Release|x64.Build.0 = Release|x64 + {8FD826F8-3739-44E6-8CC8-997122E53B8D}.ReleaseWithoutAsm|Itanium.ActiveCfg = ReleaseWithoutAsm|Win32 + {8FD826F8-3739-44E6-8CC8-997122E53B8D}.ReleaseWithoutAsm|Win32.ActiveCfg = ReleaseWithoutAsm|Win32 + {8FD826F8-3739-44E6-8CC8-997122E53B8D}.ReleaseWithoutAsm|Win32.Build.0 = ReleaseWithoutAsm|Win32 + {8FD826F8-3739-44E6-8CC8-997122E53B8D}.ReleaseWithoutAsm|x64.ActiveCfg = ReleaseWithoutAsm|x64 + {8FD826F8-3739-44E6-8CC8-997122E53B8D}.ReleaseWithoutAsm|x64.Build.0 = ReleaseWithoutAsm|x64 + {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.Debug|Itanium.ActiveCfg = Debug|Win32 + {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.Debug|Win32.ActiveCfg = Debug|Win32 + {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.Debug|Win32.Build.0 = Debug|Win32 + {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.Debug|x64.ActiveCfg = Debug|x64 + {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.Debug|x64.Build.0 = Debug|x64 + {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.Release|Itanium.ActiveCfg = Release|Win32 + {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.Release|Win32.ActiveCfg = Release|Win32 + {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.Release|Win32.Build.0 = Release|Win32 + {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.Release|x64.ActiveCfg = Release|x64 + {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.Release|x64.Build.0 = Release|x64 + {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.ReleaseWithoutAsm|Itanium.ActiveCfg = ReleaseWithoutAsm|Win32 + {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.ReleaseWithoutAsm|Win32.ActiveCfg = ReleaseWithoutAsm|Win32 + {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.ReleaseWithoutAsm|Win32.Build.0 = ReleaseWithoutAsm|Win32 + {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.ReleaseWithoutAsm|x64.ActiveCfg = ReleaseWithoutAsm|x64 + {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.ReleaseWithoutAsm|x64.Build.0 = ReleaseWithoutAsm|x64 + {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.Debug|Itanium.ActiveCfg = Debug|Win32 + {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.Debug|Win32.ActiveCfg = Debug|Win32 + {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.Debug|Win32.Build.0 = Debug|Win32 + {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.Debug|x64.ActiveCfg = Debug|x64 + {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.Debug|x64.Build.0 = Debug|x64 + {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.Release|Itanium.ActiveCfg = Release|Win32 + {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.Release|Win32.ActiveCfg = Release|Win32 + {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.Release|Win32.Build.0 = Release|Win32 + {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.Release|x64.ActiveCfg = Release|x64 + {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.Release|x64.Build.0 = Release|x64 + {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.ReleaseWithoutAsm|Itanium.ActiveCfg = ReleaseWithoutAsm|Win32 + {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.ReleaseWithoutAsm|Win32.ActiveCfg = ReleaseWithoutAsm|Win32 + {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.ReleaseWithoutAsm|Win32.Build.0 = ReleaseWithoutAsm|Win32 + {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.ReleaseWithoutAsm|x64.ActiveCfg = ReleaseWithoutAsm|x64 + {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.ReleaseWithoutAsm|x64.Build.0 = ReleaseWithoutAsm|x64 + {C52F9E7B-498A-42BE-8DB4-85A15694366A}.Debug|Itanium.ActiveCfg = Debug|Win32 + {C52F9E7B-498A-42BE-8DB4-85A15694366A}.Debug|Win32.ActiveCfg = Debug|Win32 + {C52F9E7B-498A-42BE-8DB4-85A15694366A}.Debug|Win32.Build.0 = Debug|Win32 + {C52F9E7B-498A-42BE-8DB4-85A15694366A}.Debug|x64.ActiveCfg = Debug|x64 + {C52F9E7B-498A-42BE-8DB4-85A15694366A}.Debug|x64.Build.0 = Debug|x64 + {C52F9E7B-498A-42BE-8DB4-85A15694366A}.Release|Itanium.ActiveCfg = Release|Win32 + {C52F9E7B-498A-42BE-8DB4-85A15694366A}.Release|Win32.ActiveCfg = Release|Win32 + {C52F9E7B-498A-42BE-8DB4-85A15694366A}.Release|Win32.Build.0 = Release|Win32 + {C52F9E7B-498A-42BE-8DB4-85A15694366A}.Release|x64.ActiveCfg = Release|x64 + {C52F9E7B-498A-42BE-8DB4-85A15694366A}.Release|x64.Build.0 = Release|x64 + {C52F9E7B-498A-42BE-8DB4-85A15694366A}.ReleaseWithoutAsm|Itanium.ActiveCfg = Release|Win32 + {C52F9E7B-498A-42BE-8DB4-85A15694366A}.ReleaseWithoutAsm|Win32.ActiveCfg = Release|Win32 + {C52F9E7B-498A-42BE-8DB4-85A15694366A}.ReleaseWithoutAsm|x64.ActiveCfg = Release|x64 + {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.Debug|Itanium.ActiveCfg = Debug|Win32 + {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.Debug|Win32.ActiveCfg = Debug|Win32 + {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.Debug|Win32.Build.0 = Debug|Win32 + {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.Debug|x64.ActiveCfg = Debug|x64 + {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.Debug|x64.Build.0 = Debug|x64 + {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.Release|Itanium.ActiveCfg = Release|Win32 + {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.Release|Win32.ActiveCfg = Release|Win32 + {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.Release|Win32.Build.0 = Release|Win32 + {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.Release|x64.ActiveCfg = Release|x64 + {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.Release|x64.Build.0 = Release|x64 + {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.ReleaseWithoutAsm|Itanium.ActiveCfg = Release|Win32 + {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.ReleaseWithoutAsm|Win32.ActiveCfg = Release|Win32 + {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.ReleaseWithoutAsm|x64.ActiveCfg = Release|x64 + {C52F9E7B-498A-42BE-8DB4-85A15694382A}.Debug|Itanium.ActiveCfg = Debug|Win32 + {C52F9E7B-498A-42BE-8DB4-85A15694382A}.Debug|Win32.ActiveCfg = Debug|Win32 + {C52F9E7B-498A-42BE-8DB4-85A15694382A}.Debug|Win32.Build.0 = Debug|Win32 + {C52F9E7B-498A-42BE-8DB4-85A15694382A}.Debug|x64.ActiveCfg = Debug|x64 + {C52F9E7B-498A-42BE-8DB4-85A15694382A}.Debug|x64.Build.0 = Debug|x64 + {C52F9E7B-498A-42BE-8DB4-85A15694382A}.Release|Itanium.ActiveCfg = Release|Win32 + {C52F9E7B-498A-42BE-8DB4-85A15694382A}.Release|Win32.ActiveCfg = Release|Win32 + {C52F9E7B-498A-42BE-8DB4-85A15694382A}.Release|Win32.Build.0 = Release|Win32 + {C52F9E7B-498A-42BE-8DB4-85A15694382A}.Release|x64.ActiveCfg = Release|x64 + {C52F9E7B-498A-42BE-8DB4-85A15694382A}.Release|x64.Build.0 = Release|x64 + {C52F9E7B-498A-42BE-8DB4-85A15694382A}.ReleaseWithoutAsm|Itanium.ActiveCfg = Release|Win32 + {C52F9E7B-498A-42BE-8DB4-85A15694382A}.ReleaseWithoutAsm|Win32.ActiveCfg = Release|Win32 + {C52F9E7B-498A-42BE-8DB4-85A15694382A}.ReleaseWithoutAsm|x64.ActiveCfg = Release|x64 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/thirdparty/zlib-1.3.1/contrib/vstudio/vc11/zlibvc.vcxproj b/thirdparty/zlib-1.3.1/contrib/vstudio/vc11/zlibvc.vcxproj new file mode 100644 index 0000000..fc8cd9c --- /dev/null +++ b/thirdparty/zlib-1.3.1/contrib/vstudio/vc11/zlibvc.vcxproj @@ -0,0 +1,664 @@ + + + + + Debug + Itanium + + + Debug + Win32 + + + Debug + x64 + + + ReleaseWithoutAsm + Itanium + + + ReleaseWithoutAsm + Win32 + + + ReleaseWithoutAsm + x64 + + + Release + Itanium + + + Release + Win32 + + + Release + x64 + + + + {8FD826F8-3739-44E6-8CC8-997122E53B8D} + + + + DynamicLibrary + false + true + v110 + + + DynamicLibrary + false + true + v110 + + + DynamicLibrary + false + v110 + Unicode + + + DynamicLibrary + false + true + + + DynamicLibrary + false + true + + + DynamicLibrary + false + + + DynamicLibrary + false + true + v110 + + + DynamicLibrary + false + true + v110 + + + DynamicLibrary + false + v110 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <_ProjectFileVersion>10.0.30128.1 + x86\ZlibDll$(Configuration)\ + x86\ZlibDll$(Configuration)\Tmp\ + true + false + x86\ZlibDll$(Configuration)\ + x86\ZlibDll$(Configuration)\Tmp\ + false + false + x86\ZlibDll$(Configuration)\ + x86\ZlibDll$(Configuration)\Tmp\ + false + false + x64\ZlibDll$(Configuration)\ + x64\ZlibDll$(Configuration)\Tmp\ + true + false + ia64\ZlibDll$(Configuration)\ + ia64\ZlibDll$(Configuration)\Tmp\ + true + false + x64\ZlibDll$(Configuration)\ + x64\ZlibDll$(Configuration)\Tmp\ + false + false + ia64\ZlibDll$(Configuration)\ + ia64\ZlibDll$(Configuration)\Tmp\ + false + false + x64\ZlibDll$(Configuration)\ + x64\ZlibDll$(Configuration)\Tmp\ + false + false + ia64\ZlibDll$(Configuration)\ + ia64\ZlibDll$(Configuration)\Tmp\ + false + false + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + zlibwapi + zlibwapi + zlibwapi + zlibwapi + zlibwapi + zlibwapi + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + Win32 + $(OutDir)zlibvc.tlb + + + Disabled + ..\..\..;%(AdditionalIncludeDirectories) + WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;ZLIB_WINAPI;%(PreprocessorDefinitions) + + + MultiThreadedDebugDLL + false + $(IntDir)zlibvc.pch + $(IntDir) + $(IntDir) + $(OutDir) + + + Level3 + true + ProgramDatabase + + + _DEBUG;%(PreprocessorDefinitions) + 0x040c + + + /MACHINE:I386 %(AdditionalOptions) + %(AdditionalDependencies) + $(OutDir)zlibwapi.dll + true + .\zlibvc.def + true + $(OutDir)zlibwapi.pdb + true + $(OutDir)zlibwapi.map + Windows + false + + + $(OutDir)zlibwapi.lib + + + + + NDEBUG;%(PreprocessorDefinitions) + true + true + Win32 + $(OutDir)zlibvc.tlb + + + OnlyExplicitInline + ..\..\..;%(AdditionalIncludeDirectories) + WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;ZLIB_WINAPI;%(PreprocessorDefinitions) + true + + + MultiThreadedDLL + false + true + $(IntDir)zlibvc.pch + All + $(IntDir) + $(IntDir) + $(OutDir) + + + Level3 + true + + + NDEBUG;%(PreprocessorDefinitions) + 0x040c + + + /MACHINE:I386 %(AdditionalOptions) + $(OutDir)zlibwapi.dll + true + false + .\zlibvc.def + $(OutDir)zlibwapi.pdb + true + $(OutDir)zlibwapi.map + Windows + false + + + $(OutDir)zlibwapi.lib + + + + + NDEBUG;%(PreprocessorDefinitions) + true + true + Win32 + $(OutDir)zlibvc.tlb + + + OnlyExplicitInline + ..\..\..;%(AdditionalIncludeDirectories) + WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;ZLIB_WINAPI;%(PreprocessorDefinitions) + true + + + MultiThreaded + false + true + $(IntDir)zlibvc.pch + All + $(IntDir) + $(IntDir) + $(OutDir) + + + Level3 + true + + + NDEBUG;%(PreprocessorDefinitions) + 0x040c + + + /MACHINE:I386 %(AdditionalOptions) + %(AdditionalDependencies) + $(OutDir)zlibwapi.dll + true + false + .\zlibvc.def + $(OutDir)zlibwapi.pdb + true + $(OutDir)zlibwapi.map + Windows + false + + + $(OutDir)zlibwapi.lib + + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + X64 + $(OutDir)zlibvc.tlb + + + Disabled + ..\..\..;%(AdditionalIncludeDirectories) + WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;ZLIB_WINAPI;WIN64;%(PreprocessorDefinitions) + + + MultiThreadedDebugDLL + false + $(IntDir)zlibvc.pch + $(IntDir) + $(IntDir) + $(OutDir) + + + Level3 + true + ProgramDatabase + + + _DEBUG;%(PreprocessorDefinitions) + 0x040c + + + %(AdditionalDependencies) + $(OutDir)zlibwapi.dll + true + .\zlibvc.def + true + $(OutDir)zlibwapi.pdb + true + $(OutDir)zlibwapi.map + Windows + $(OutDir)zlibwapi.lib + MachineX64 + + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + Itanium + $(OutDir)zlibvc.tlb + + + Disabled + ..\..\..;%(AdditionalIncludeDirectories) + WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;ZLIB_WINAPI;WIN64;%(PreprocessorDefinitions) + + + MultiThreadedDebugDLL + false + $(IntDir)zlibvc.pch + $(IntDir) + $(IntDir) + $(OutDir) + + + Level3 + true + ProgramDatabase + + + _DEBUG;%(PreprocessorDefinitions) + 0x040c + + + $(OutDir)zlibwapi.dll + true + .\zlibvc.def + true + $(OutDir)zlibwapi.pdb + true + $(OutDir)zlibwapi.map + Windows + $(OutDir)zlibwapi.lib + MachineIA64 + + + + + NDEBUG;%(PreprocessorDefinitions) + true + true + X64 + $(OutDir)zlibvc.tlb + + + OnlyExplicitInline + ..\..\..;%(AdditionalIncludeDirectories) + WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;ZLIB_WINAPI;WIN64;%(PreprocessorDefinitions) + true + + + MultiThreadedDLL + false + true + $(IntDir)zlibvc.pch + All + $(IntDir) + $(IntDir) + $(OutDir) + + + Level3 + true + + + NDEBUG;%(PreprocessorDefinitions) + 0x040c + + + $(OutDir)zlibwapi.dll + true + false + .\zlibvc.def + $(OutDir)zlibwapi.pdb + true + $(OutDir)zlibwapi.map + Windows + $(OutDir)zlibwapi.lib + MachineX64 + + + + + NDEBUG;%(PreprocessorDefinitions) + true + true + Itanium + $(OutDir)zlibvc.tlb + + + OnlyExplicitInline + ..\..\..;%(AdditionalIncludeDirectories) + WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;ZLIB_WINAPI;WIN64;%(PreprocessorDefinitions) + true + + + MultiThreadedDLL + false + true + $(IntDir)zlibvc.pch + All + $(IntDir) + $(IntDir) + $(OutDir) + + + Level3 + true + + + NDEBUG;%(PreprocessorDefinitions) + 0x040c + + + $(OutDir)zlibwapi.dll + true + false + .\zlibvc.def + $(OutDir)zlibwapi.pdb + true + $(OutDir)zlibwapi.map + Windows + $(OutDir)zlibwapi.lib + MachineIA64 + + + + + NDEBUG;%(PreprocessorDefinitions) + true + true + X64 + $(OutDir)zlibvc.tlb + + + OnlyExplicitInline + ..\..\..;%(AdditionalIncludeDirectories) + _CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;ZLIB_WINAPI;WIN64;%(PreprocessorDefinitions) + true + + + MultiThreadedDLL + false + true + $(IntDir)zlibvc.pch + All + $(IntDir) + $(IntDir) + $(OutDir) + + + Level3 + true + + + NDEBUG;%(PreprocessorDefinitions) + 0x040c + + + %(AdditionalDependencies) + $(OutDir)zlibwapi.dll + true + false + .\zlibvc.def + $(OutDir)zlibwapi.pdb + true + $(OutDir)zlibwapi.map + Windows + $(OutDir)zlibwapi.lib + MachineX64 + + + + + NDEBUG;%(PreprocessorDefinitions) + true + true + Itanium + $(OutDir)zlibvc.tlb + + + OnlyExplicitInline + ..\..\..;%(AdditionalIncludeDirectories) + _CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;ZLIB_WINAPI;WIN64;%(PreprocessorDefinitions) + true + + + MultiThreadedDLL + false + true + $(IntDir)zlibvc.pch + All + $(IntDir) + $(IntDir) + $(OutDir) + + + Level3 + true + + + NDEBUG;%(PreprocessorDefinitions) + 0x040c + + + $(OutDir)zlibwapi.dll + true + false + .\zlibvc.def + $(OutDir)zlibwapi.pdb + true + $(OutDir)zlibwapi.map + Windows + $(OutDir)zlibwapi.lib + MachineIA64 + + + + + + + + + + + + + + + + + + + + + %(AdditionalIncludeDirectories) + ZLIB_INTERNAL;%(PreprocessorDefinitions) + %(AdditionalIncludeDirectories) + ZLIB_INTERNAL;%(PreprocessorDefinitions) + %(AdditionalIncludeDirectories) + ZLIB_INTERNAL;%(PreprocessorDefinitions) + + + %(AdditionalIncludeDirectories) + ZLIB_INTERNAL;%(PreprocessorDefinitions) + %(AdditionalIncludeDirectories) + ZLIB_INTERNAL;%(PreprocessorDefinitions) + %(AdditionalIncludeDirectories) + ZLIB_INTERNAL;%(PreprocessorDefinitions) + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/thirdparty/zlib-1.3.1/contrib/vstudio/vc12/miniunz.vcxproj b/thirdparty/zlib-1.3.1/contrib/vstudio/vc12/miniunz.vcxproj new file mode 100644 index 0000000..d88ac7f --- /dev/null +++ b/thirdparty/zlib-1.3.1/contrib/vstudio/vc12/miniunz.vcxproj @@ -0,0 +1,316 @@ + + + + + Debug + Itanium + + + Debug + Win32 + + + Debug + x64 + + + Release + Itanium + + + Release + Win32 + + + Release + x64 + + + + {C52F9E7B-498A-42BE-8DB4-85A15694382A} + Win32Proj + + + + Application + MultiByte + v120 + + + Application + Unicode + v120 + + + Application + MultiByte + v120 + + + Application + MultiByte + v120 + + + Application + MultiByte + v120 + + + Application + MultiByte + v120 + + + + + + + + + + + + + + + + + + + + + + + + + <_ProjectFileVersion>10.0.30128.1 + x86\MiniUnzip$(Configuration)\ + x86\MiniUnzip$(Configuration)\Tmp\ + true + false + x86\MiniUnzip$(Configuration)\ + x86\MiniUnzip$(Configuration)\Tmp\ + false + false + x64\MiniUnzip$(Configuration)\ + x64\MiniUnzip$(Configuration)\Tmp\ + true + false + ia64\MiniUnzip$(Configuration)\ + ia64\MiniUnzip$(Configuration)\Tmp\ + true + false + x64\MiniUnzip$(Configuration)\ + x64\MiniUnzip$(Configuration)\Tmp\ + false + false + ia64\MiniUnzip$(Configuration)\ + ia64\MiniUnzip$(Configuration)\Tmp\ + false + false + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + + + + Disabled + ..\..\..;..\..\minizip;%(AdditionalIncludeDirectories) + WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + Default + MultiThreadedDebugDLL + false + + + $(IntDir) + Level3 + ProgramDatabase + + + x86\ZlibDllDebug\zlibwapi.lib;%(AdditionalDependencies) + $(OutDir)miniunz.exe + true + $(OutDir)miniunz.pdb + Console + false + + + MachineX86 + + + + + MaxSpeed + OnlyExplicitInline + true + ..\..\..;..\..\minizip;%(AdditionalIncludeDirectories) + WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + Default + MultiThreaded + false + true + + + $(IntDir) + Level3 + ProgramDatabase + + + x86\ZlibDllRelease\zlibwapi.lib;%(AdditionalDependencies) + $(OutDir)miniunz.exe + true + Console + true + true + false + + + MachineX86 + + + + + X64 + + + Disabled + ..\..\..;..\..\minizip;%(AdditionalIncludeDirectories) + _CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;_DEBUG;_CONSOLE;WIN64;%(PreprocessorDefinitions) + true + Default + MultiThreadedDebugDLL + false + + + $(IntDir) + Level3 + ProgramDatabase + + + x64\ZlibDllDebug\zlibwapi.lib;%(AdditionalDependencies) + $(OutDir)miniunz.exe + true + $(OutDir)miniunz.pdb + Console + MachineX64 + + + + + Itanium + + + Disabled + ..\..\..;..\..\minizip;%(AdditionalIncludeDirectories) + _CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;_DEBUG;_CONSOLE;WIN64;%(PreprocessorDefinitions) + true + Default + MultiThreadedDebugDLL + false + + + $(IntDir) + Level3 + ProgramDatabase + + + ia64\ZlibDllDebug\zlibwapi.lib;%(AdditionalDependencies) + $(OutDir)miniunz.exe + true + $(OutDir)miniunz.pdb + Console + MachineIA64 + + + + + X64 + + + MaxSpeed + OnlyExplicitInline + true + ..\..\..;..\..\minizip;%(AdditionalIncludeDirectories) + _CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;NDEBUG;_CONSOLE;WIN64;%(PreprocessorDefinitions) + true + Default + MultiThreadedDLL + false + true + + + $(IntDir) + Level3 + ProgramDatabase + + + x64\ZlibDllRelease\zlibwapi.lib;%(AdditionalDependencies) + $(OutDir)miniunz.exe + true + Console + true + true + MachineX64 + + + + + Itanium + + + MaxSpeed + OnlyExplicitInline + true + ..\..\..;..\..\minizip;%(AdditionalIncludeDirectories) + _CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;NDEBUG;_CONSOLE;WIN64;%(PreprocessorDefinitions) + true + Default + MultiThreadedDLL + false + true + + + $(IntDir) + Level3 + ProgramDatabase + + + ia64\ZlibDllRelease\zlibwapi.lib;%(AdditionalDependencies) + $(OutDir)miniunz.exe + true + Console + true + true + MachineIA64 + + + + + + + + {8fd826f8-3739-44e6-8cc8-997122e53b8d} + + + + + + \ No newline at end of file diff --git a/thirdparty/zlib-1.3.1/contrib/vstudio/vc12/minizip.vcxproj b/thirdparty/zlib-1.3.1/contrib/vstudio/vc12/minizip.vcxproj new file mode 100644 index 0000000..f1f239c --- /dev/null +++ b/thirdparty/zlib-1.3.1/contrib/vstudio/vc12/minizip.vcxproj @@ -0,0 +1,313 @@ + + + + + Debug + Itanium + + + Debug + Win32 + + + Debug + x64 + + + Release + Itanium + + + Release + Win32 + + + Release + x64 + + + + {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B} + Win32Proj + + + + Application + MultiByte + v120 + + + Application + Unicode + v120 + + + Application + MultiByte + v120 + + + Application + MultiByte + v120 + + + Application + MultiByte + v120 + + + Application + MultiByte + v120 + + + + + + + + + + + + + + + + + + + + + + + + + <_ProjectFileVersion>10.0.30128.1 + x86\MiniZip$(Configuration)\ + x86\MiniZip$(Configuration)\Tmp\ + true + false + x86\MiniZip$(Configuration)\ + x86\MiniZip$(Configuration)\Tmp\ + false + x64\$(Configuration)\ + x64\$(Configuration)\ + true + false + ia64\$(Configuration)\ + ia64\$(Configuration)\ + true + false + x64\$(Configuration)\ + x64\$(Configuration)\ + false + ia64\$(Configuration)\ + ia64\$(Configuration)\ + false + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + + + + Disabled + ..\..\..;..\..\minizip;%(AdditionalIncludeDirectories) + WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + Default + MultiThreadedDebugDLL + false + + + $(IntDir) + Level3 + ProgramDatabase + + + x86\ZlibDllDebug\zlibwapi.lib;%(AdditionalDependencies) + $(OutDir)minizip.exe + true + $(OutDir)minizip.pdb + Console + false + + + MachineX86 + + + + + MaxSpeed + OnlyExplicitInline + true + ..\..\..;..\..\minizip;%(AdditionalIncludeDirectories) + WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + Default + MultiThreaded + false + true + + + $(IntDir) + Level3 + ProgramDatabase + + + x86\ZlibDllRelease\zlibwapi.lib;%(AdditionalDependencies) + $(OutDir)minizip.exe + true + Console + true + true + false + + + MachineX86 + + + + + X64 + + + Disabled + ..\..\..;..\..\minizip;%(AdditionalIncludeDirectories) + _CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;_DEBUG;_CONSOLE;WIN64;%(PreprocessorDefinitions) + true + Default + MultiThreadedDebugDLL + false + + + $(IntDir) + Level3 + ProgramDatabase + + + x64\ZlibDllDebug\zlibwapi.lib;%(AdditionalDependencies) + $(OutDir)minizip.exe + true + $(OutDir)minizip.pdb + Console + MachineX64 + + + + + Itanium + + + Disabled + ..\..\..;..\..\minizip;%(AdditionalIncludeDirectories) + _CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;_DEBUG;_CONSOLE;WIN64;%(PreprocessorDefinitions) + true + Default + MultiThreadedDebugDLL + false + + + $(IntDir) + Level3 + ProgramDatabase + + + ia64\ZlibDllDebug\zlibwapi.lib;%(AdditionalDependencies) + $(OutDir)minizip.exe + true + $(OutDir)minizip.pdb + Console + MachineIA64 + + + + + X64 + + + MaxSpeed + OnlyExplicitInline + true + ..\..\..;..\..\minizip;%(AdditionalIncludeDirectories) + _CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;NDEBUG;_CONSOLE;WIN64;%(PreprocessorDefinitions) + true + Default + MultiThreadedDLL + false + true + + + $(IntDir) + Level3 + ProgramDatabase + + + x64\ZlibDllRelease\zlibwapi.lib;%(AdditionalDependencies) + $(OutDir)minizip.exe + true + Console + true + true + MachineX64 + + + + + Itanium + + + MaxSpeed + OnlyExplicitInline + true + ..\..\..;..\..\minizip;%(AdditionalIncludeDirectories) + _CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;NDEBUG;_CONSOLE;WIN64;%(PreprocessorDefinitions) + true + Default + MultiThreadedDLL + false + true + + + $(IntDir) + Level3 + ProgramDatabase + + + ia64\ZlibDllRelease\zlibwapi.lib;%(AdditionalDependencies) + $(OutDir)minizip.exe + true + Console + true + true + MachineIA64 + + + + + + + + {8fd826f8-3739-44e6-8cc8-997122e53b8d} + + + + + + \ No newline at end of file diff --git a/thirdparty/zlib-1.3.1/contrib/vstudio/vc12/testzlib.vcxproj b/thirdparty/zlib-1.3.1/contrib/vstudio/vc12/testzlib.vcxproj new file mode 100644 index 0000000..41303c0 --- /dev/null +++ b/thirdparty/zlib-1.3.1/contrib/vstudio/vc12/testzlib.vcxproj @@ -0,0 +1,422 @@ + + + + + Debug + Itanium + + + Debug + Win32 + + + Debug + x64 + + + ReleaseWithoutAsm + Itanium + + + ReleaseWithoutAsm + Win32 + + + ReleaseWithoutAsm + x64 + + + Release + Itanium + + + Release + Win32 + + + Release + x64 + + + + {AA6666AA-E09F-4135-9C0C-4FE50C3C654B} + testzlib + Win32Proj + + + + Application + MultiByte + true + v120 + + + Application + MultiByte + true + v120 + + + Application + Unicode + v120 + + + Application + MultiByte + true + v120 + + + Application + MultiByte + true + v120 + + + Application + MultiByte + v120 + + + Application + true + v120 + + + Application + true + v120 + + + Application + v120 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <_ProjectFileVersion>10.0.30128.1 + x86\TestZlib$(Configuration)\ + x86\TestZlib$(Configuration)\Tmp\ + true + false + x86\TestZlib$(Configuration)\ + x86\TestZlib$(Configuration)\Tmp\ + false + false + x86\TestZlib$(Configuration)\ + x86\TestZlib$(Configuration)\Tmp\ + false + false + x64\TestZlib$(Configuration)\ + x64\TestZlib$(Configuration)\Tmp\ + false + ia64\TestZlib$(Configuration)\ + ia64\TestZlib$(Configuration)\Tmp\ + true + false + x64\TestZlib$(Configuration)\ + x64\TestZlib$(Configuration)\Tmp\ + false + ia64\TestZlib$(Configuration)\ + ia64\TestZlib$(Configuration)\Tmp\ + false + false + x64\TestZlib$(Configuration)\ + x64\TestZlib$(Configuration)\Tmp\ + false + ia64\TestZlib$(Configuration)\ + ia64\TestZlib$(Configuration)\Tmp\ + false + false + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + + + + Disabled + ..\..\..;%(AdditionalIncludeDirectories) + WIN32;ZLIB_WINAPI;_DEBUG;_CONSOLE;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;%(PreprocessorDefinitions) + true + Default + MultiThreadedDebugDLL + false + + + AssemblyAndSourceCode + $(IntDir) + Level3 + ProgramDatabase + + + %(AdditionalDependencies) + $(OutDir)testzlib.exe + true + $(OutDir)testzlib.pdb + Console + false + + + MachineX86 + + + + + MaxSpeed + OnlyExplicitInline + true + ..\..\..;%(AdditionalIncludeDirectories) + WIN32;ZLIB_WINAPI;NDEBUG;_CONSOLE;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;%(PreprocessorDefinitions) + true + Default + MultiThreaded + false + true + + + $(IntDir) + Level3 + ProgramDatabase + + + $(OutDir)testzlib.exe + true + Console + true + true + false + + + MachineX86 + + + + + MaxSpeed + OnlyExplicitInline + true + ..\..\..;%(AdditionalIncludeDirectories) + WIN32;ZLIB_WINAPI;NDEBUG;_CONSOLE;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;%(PreprocessorDefinitions) + true + Default + MultiThreaded + false + true + + + $(IntDir) + Level3 + ProgramDatabase + + + %(AdditionalDependencies) + $(OutDir)testzlib.exe + true + Console + true + true + false + + + MachineX86 + false + + + + + ..\..\..;%(AdditionalIncludeDirectories) + WIN32;ZLIB_WINAPI;_DEBUG;_CONSOLE;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;%(PreprocessorDefinitions) + Default + MultiThreadedDebugDLL + false + $(IntDir) + + + %(AdditionalDependencies) + + + + + Itanium + + + Disabled + ..\..\..;%(AdditionalIncludeDirectories) + ZLIB_WINAPI;_DEBUG;_CONSOLE;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;WIN64;%(PreprocessorDefinitions) + true + Default + MultiThreadedDebugDLL + false + + + AssemblyAndSourceCode + $(IntDir) + Level3 + ProgramDatabase + + + $(OutDir)testzlib.exe + true + $(OutDir)testzlib.pdb + Console + MachineIA64 + + + + + ..\..\..;%(AdditionalIncludeDirectories) + WIN32;ZLIB_WINAPI;NDEBUG;_CONSOLE;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;%(PreprocessorDefinitions) + Default + MultiThreadedDLL + false + $(IntDir) + + + %(AdditionalDependencies) + + + + + Itanium + + + MaxSpeed + OnlyExplicitInline + true + ..\..\..;%(AdditionalIncludeDirectories) + ZLIB_WINAPI;NDEBUG;_CONSOLE;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;WIN64;%(PreprocessorDefinitions) + true + Default + MultiThreadedDLL + false + true + + + $(IntDir) + Level3 + ProgramDatabase + + + $(OutDir)testzlib.exe + true + Console + true + true + MachineIA64 + + + + + ..\..\..;%(AdditionalIncludeDirectories) + WIN32;ZLIB_WINAPI;NDEBUG;_CONSOLE;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;%(PreprocessorDefinitions) + Default + MultiThreadedDLL + false + $(IntDir) + + + %(AdditionalDependencies) + + + + + Itanium + + + MaxSpeed + OnlyExplicitInline + true + ..\..\..;%(AdditionalIncludeDirectories) + ZLIB_WINAPI;NDEBUG;_CONSOLE;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;WIN64;%(PreprocessorDefinitions) + true + Default + MultiThreadedDLL + false + true + + + $(IntDir) + Level3 + ProgramDatabase + + + $(OutDir)testzlib.exe + true + Console + true + true + MachineIA64 + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/thirdparty/zlib-1.3.1/contrib/vstudio/vc12/testzlibdll.vcxproj b/thirdparty/zlib-1.3.1/contrib/vstudio/vc12/testzlibdll.vcxproj new file mode 100644 index 0000000..c66573a --- /dev/null +++ b/thirdparty/zlib-1.3.1/contrib/vstudio/vc12/testzlibdll.vcxproj @@ -0,0 +1,316 @@ + + + + + Debug + Itanium + + + Debug + Win32 + + + Debug + x64 + + + Release + Itanium + + + Release + Win32 + + + Release + x64 + + + + {C52F9E7B-498A-42BE-8DB4-85A15694366A} + Win32Proj + + + + Application + MultiByte + v120 + + + Application + Unicode + v120 + + + Application + MultiByte + v120 + + + Application + MultiByte + v120 + + + Application + MultiByte + v120 + + + Application + MultiByte + v120 + + + + + + + + + + + + + + + + + + + + + + + + + <_ProjectFileVersion>10.0.30128.1 + x86\TestZlibDll$(Configuration)\ + x86\TestZlibDll$(Configuration)\Tmp\ + true + false + x86\TestZlibDll$(Configuration)\ + x86\TestZlibDll$(Configuration)\Tmp\ + false + false + x64\TestZlibDll$(Configuration)\ + x64\TestZlibDll$(Configuration)\Tmp\ + true + false + ia64\TestZlibDll$(Configuration)\ + ia64\TestZlibDll$(Configuration)\Tmp\ + true + false + x64\TestZlibDll$(Configuration)\ + x64\TestZlibDll$(Configuration)\Tmp\ + false + false + ia64\TestZlibDll$(Configuration)\ + ia64\TestZlibDll$(Configuration)\Tmp\ + false + false + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + + + + Disabled + ..\..\..;..\..\minizip;%(AdditionalIncludeDirectories) + WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + Default + MultiThreadedDebugDLL + false + + + $(IntDir) + Level3 + ProgramDatabase + + + x86\ZlibDllDebug\zlibwapi.lib;%(AdditionalDependencies) + $(OutDir)testzlibdll.exe + true + $(OutDir)testzlib.pdb + Console + false + + + MachineX86 + + + + + MaxSpeed + OnlyExplicitInline + true + ..\..\..;..\..\minizip;%(AdditionalIncludeDirectories) + WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + Default + MultiThreaded + false + true + + + $(IntDir) + Level3 + ProgramDatabase + + + x86\ZlibDllRelease\zlibwapi.lib;%(AdditionalDependencies) + $(OutDir)testzlibdll.exe + true + Console + true + true + false + + + MachineX86 + + + + + X64 + + + Disabled + ..\..\..;..\..\minizip;%(AdditionalIncludeDirectories) + _CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;_DEBUG;_CONSOLE;WIN64;%(PreprocessorDefinitions) + true + Default + MultiThreadedDebugDLL + false + + + $(IntDir) + Level3 + ProgramDatabase + + + x64\ZlibDllDebug\zlibwapi.lib;%(AdditionalDependencies) + $(OutDir)testzlibdll.exe + true + $(OutDir)testzlib.pdb + Console + MachineX64 + + + + + Itanium + + + Disabled + ..\..\..;..\..\minizip;%(AdditionalIncludeDirectories) + _CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;_DEBUG;_CONSOLE;WIN64;%(PreprocessorDefinitions) + true + Default + MultiThreadedDebugDLL + false + + + $(IntDir) + Level3 + ProgramDatabase + + + ia64\ZlibDllDebug\zlibwapi.lib;%(AdditionalDependencies) + $(OutDir)testzlibdll.exe + true + $(OutDir)testzlib.pdb + Console + MachineIA64 + + + + + X64 + + + MaxSpeed + OnlyExplicitInline + true + ..\..\..;..\..\minizip;%(AdditionalIncludeDirectories) + _CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;NDEBUG;_CONSOLE;WIN64;%(PreprocessorDefinitions) + true + Default + MultiThreadedDLL + false + true + + + $(IntDir) + Level3 + ProgramDatabase + + + x64\ZlibDllRelease\zlibwapi.lib;%(AdditionalDependencies) + $(OutDir)testzlibdll.exe + true + Console + true + true + MachineX64 + + + + + Itanium + + + MaxSpeed + OnlyExplicitInline + true + ..\..\..;..\..\minizip;%(AdditionalIncludeDirectories) + _CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;NDEBUG;_CONSOLE;WIN64;%(PreprocessorDefinitions) + true + Default + MultiThreadedDLL + false + true + + + $(IntDir) + Level3 + ProgramDatabase + + + ia64\ZlibDllRelease\zlibwapi.lib;%(AdditionalDependencies) + $(OutDir)testzlibdll.exe + true + Console + true + true + MachineIA64 + + + + + + + + {8fd826f8-3739-44e6-8cc8-997122e53b8d} + + + + + + \ No newline at end of file diff --git a/thirdparty/zlib-1.3.1/contrib/vstudio/vc12/zlib.rc b/thirdparty/zlib-1.3.1/contrib/vstudio/vc12/zlib.rc new file mode 100644 index 0000000..a55f341 --- /dev/null +++ b/thirdparty/zlib-1.3.1/contrib/vstudio/vc12/zlib.rc @@ -0,0 +1,32 @@ +#include + +#define IDR_VERSION1 1 +IDR_VERSION1 VERSIONINFO MOVEABLE IMPURE LOADONCALL DISCARDABLE + FILEVERSION 1, 3, 1, 0 + PRODUCTVERSION 1, 3, 1, 0 + FILEFLAGSMASK VS_FFI_FILEFLAGSMASK + FILEFLAGS 0 + FILEOS VOS_DOS_WINDOWS32 + FILETYPE VFT_DLL + FILESUBTYPE 0 // not used +BEGIN + BLOCK "StringFileInfo" + BEGIN + BLOCK "040904E4" + //language ID = U.S. English, char set = Windows, Multilingual + + BEGIN + VALUE "FileDescription", "zlib data compression and ZIP file I/O library\0" + VALUE "FileVersion", "1.3.1\0" + VALUE "InternalName", "zlib\0" + VALUE "OriginalFilename", "zlibwapi.dll\0" + VALUE "ProductName", "ZLib.DLL\0" + VALUE "Comments","DLL support by Alessandro Iacopetti & Gilles Vollant\0" + VALUE "LegalCopyright", "(C) 1995-2024 Jean-loup Gailly & Mark Adler\0" + END + END + BLOCK "VarFileInfo" + BEGIN + VALUE "Translation", 0x0409, 1252 + END +END diff --git a/thirdparty/zlib-1.3.1/contrib/vstudio/vc12/zlibstat.vcxproj b/thirdparty/zlib-1.3.1/contrib/vstudio/vc12/zlibstat.vcxproj new file mode 100644 index 0000000..6629d8e --- /dev/null +++ b/thirdparty/zlib-1.3.1/contrib/vstudio/vc12/zlibstat.vcxproj @@ -0,0 +1,459 @@ + + + + + Debug + Itanium + + + Debug + Win32 + + + Debug + x64 + + + ReleaseWithoutAsm + Itanium + + + ReleaseWithoutAsm + Win32 + + + ReleaseWithoutAsm + x64 + + + Release + Itanium + + + Release + Win32 + + + Release + x64 + + + + {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8} + + + + StaticLibrary + false + v120 + + + StaticLibrary + false + v120 + + + StaticLibrary + false + v120 + Unicode + + + StaticLibrary + false + v120 + + + StaticLibrary + false + v120 + + + StaticLibrary + false + v120 + + + StaticLibrary + false + v120 + + + StaticLibrary + false + v120 + + + StaticLibrary + false + v120 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <_ProjectFileVersion>10.0.30128.1 + x86\ZlibStat$(Configuration)\ + x86\ZlibStat$(Configuration)\Tmp\ + x86\ZlibStat$(Configuration)\ + x86\ZlibStat$(Configuration)\Tmp\ + x86\ZlibStat$(Configuration)\ + x86\ZlibStat$(Configuration)\Tmp\ + x64\ZlibStat$(Configuration)\ + x64\ZlibStat$(Configuration)\Tmp\ + ia64\ZlibStat$(Configuration)\ + ia64\ZlibStat$(Configuration)\Tmp\ + x64\ZlibStat$(Configuration)\ + x64\ZlibStat$(Configuration)\Tmp\ + ia64\ZlibStat$(Configuration)\ + ia64\ZlibStat$(Configuration)\Tmp\ + x64\ZlibStat$(Configuration)\ + x64\ZlibStat$(Configuration)\Tmp\ + ia64\ZlibStat$(Configuration)\ + ia64\ZlibStat$(Configuration)\Tmp\ + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + + + + Disabled + ..\..\..;%(AdditionalIncludeDirectories) + WIN32;ZLIB_WINAPI;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;%(PreprocessorDefinitions) + + + MultiThreadedDebugDLL + false + $(IntDir)zlibstat.pch + $(IntDir) + $(IntDir) + $(OutDir) + Level3 + true + OldStyle + + + 0x040c + + + /MACHINE:X86 /NODEFAULTLIB %(AdditionalOptions) + $(OutDir)zlibstat.lib + true + + + + + OnlyExplicitInline + ..\..\..;%(AdditionalIncludeDirectories) + WIN32;ZLIB_WINAPI;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;%(PreprocessorDefinitions) + true + + + MultiThreaded + false + true + $(IntDir)zlibstat.pch + $(IntDir) + $(IntDir) + $(OutDir) + Level3 + true + + + 0x040c + + + /MACHINE:X86 /NODEFAULTLIB %(AdditionalOptions) + %(AdditionalDependencies) + $(OutDir)zlibstat.lib + true + + + + + OnlyExplicitInline + ..\..\..;%(AdditionalIncludeDirectories) + WIN32;ZLIB_WINAPI;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;%(PreprocessorDefinitions) + true + + + MultiThreaded + false + true + $(IntDir)zlibstat.pch + $(IntDir) + $(IntDir) + $(OutDir) + Level3 + true + + + 0x040c + + + /MACHINE:X86 /NODEFAULTLIB %(AdditionalOptions) + $(OutDir)zlibstat.lib + true + + + + + X64 + + + Disabled + ..\..\..;%(AdditionalIncludeDirectories) + ZLIB_WINAPI;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;WIN64;%(PreprocessorDefinitions) + + + MultiThreadedDebugDLL + false + $(IntDir)zlibstat.pch + $(IntDir) + $(IntDir) + $(OutDir) + Level3 + true + OldStyle + + + 0x040c + + + /MACHINE:AMD64 /NODEFAULTLIB %(AdditionalOptions) + $(OutDir)zlibstat.lib + true + + + + + Itanium + + + Disabled + ..\..\..;%(AdditionalIncludeDirectories) + ZLIB_WINAPI;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;WIN64;%(PreprocessorDefinitions) + + + MultiThreadedDebugDLL + false + $(IntDir)zlibstat.pch + $(IntDir) + $(IntDir) + $(OutDir) + Level3 + true + OldStyle + + + 0x040c + + + /MACHINE:IA64 /NODEFAULTLIB %(AdditionalOptions) + $(OutDir)zlibstat.lib + true + + + + + X64 + + + OnlyExplicitInline + ..\..\..;%(AdditionalIncludeDirectories) + ZLIB_WINAPI;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;WIN64;%(PreprocessorDefinitions) + true + + + MultiThreadedDLL + false + true + $(IntDir)zlibstat.pch + $(IntDir) + $(IntDir) + $(OutDir) + Level3 + true + + + 0x040c + + + /MACHINE:AMD64 /NODEFAULTLIB %(AdditionalOptions) + %(AdditionalDependencies) + $(OutDir)zlibstat.lib + true + + + + + Itanium + + + OnlyExplicitInline + ..\..\..;%(AdditionalIncludeDirectories) + ZLIB_WINAPI;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;WIN64;%(PreprocessorDefinitions) + true + + + MultiThreadedDLL + false + true + $(IntDir)zlibstat.pch + $(IntDir) + $(IntDir) + $(OutDir) + Level3 + true + + + 0x040c + + + /MACHINE:IA64 /NODEFAULTLIB %(AdditionalOptions) + $(OutDir)zlibstat.lib + true + + + + + X64 + + + OnlyExplicitInline + ..\..\..;%(AdditionalIncludeDirectories) + ZLIB_WINAPI;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;WIN64;%(PreprocessorDefinitions) + true + + + MultiThreadedDLL + false + true + $(IntDir)zlibstat.pch + $(IntDir) + $(IntDir) + $(OutDir) + Level3 + true + + + 0x040c + + + /MACHINE:AMD64 /NODEFAULTLIB %(AdditionalOptions) + $(OutDir)zlibstat.lib + true + + + + + Itanium + + + OnlyExplicitInline + ..\..\..;%(AdditionalIncludeDirectories) + ZLIB_WINAPI;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;WIN64;%(PreprocessorDefinitions) + true + + + MultiThreadedDLL + false + true + $(IntDir)zlibstat.pch + $(IntDir) + $(IntDir) + $(OutDir) + Level3 + true + + + 0x040c + + + /MACHINE:IA64 /NODEFAULTLIB %(AdditionalOptions) + $(OutDir)zlibstat.lib + true + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/thirdparty/zlib-1.3.1/contrib/vstudio/vc12/zlibvc.def b/thirdparty/zlib-1.3.1/contrib/vstudio/vc12/zlibvc.def new file mode 100644 index 0000000..3234a02 --- /dev/null +++ b/thirdparty/zlib-1.3.1/contrib/vstudio/vc12/zlibvc.def @@ -0,0 +1,158 @@ +LIBRARY +; zlib data compression and ZIP file I/O library + +VERSION 1.3.1 + +EXPORTS + adler32 @1 + compress @2 + crc32 @3 + deflate @4 + deflateCopy @5 + deflateEnd @6 + deflateInit2_ @7 + deflateInit_ @8 + deflateParams @9 + deflateReset @10 + deflateSetDictionary @11 + gzclose @12 + gzdopen @13 + gzerror @14 + gzflush @15 + gzopen @16 + gzread @17 + gzwrite @18 + inflate @19 + inflateEnd @20 + inflateInit2_ @21 + inflateInit_ @22 + inflateReset @23 + inflateSetDictionary @24 + inflateSync @25 + uncompress @26 + zlibVersion @27 + gzprintf @28 + gzputc @29 + gzgetc @30 + gzseek @31 + gzrewind @32 + gztell @33 + gzeof @34 + gzsetparams @35 + zError @36 + inflateSyncPoint @37 + get_crc_table @38 + compress2 @39 + gzputs @40 + gzgets @41 + inflateCopy @42 + inflateBackInit_ @43 + inflateBack @44 + inflateBackEnd @45 + compressBound @46 + deflateBound @47 + gzclearerr @48 + gzungetc @49 + zlibCompileFlags @50 + deflatePrime @51 + deflatePending @52 + + unzOpen @61 + unzClose @62 + unzGetGlobalInfo @63 + unzGetCurrentFileInfo @64 + unzGoToFirstFile @65 + unzGoToNextFile @66 + unzOpenCurrentFile @67 + unzReadCurrentFile @68 + unzOpenCurrentFile3 @69 + unztell @70 + unzeof @71 + unzCloseCurrentFile @72 + unzGetGlobalComment @73 + unzStringFileNameCompare @74 + unzLocateFile @75 + unzGetLocalExtrafield @76 + unzOpen2 @77 + unzOpenCurrentFile2 @78 + unzOpenCurrentFilePassword @79 + + zipOpen @80 + zipOpenNewFileInZip @81 + zipWriteInFileInZip @82 + zipCloseFileInZip @83 + zipClose @84 + zipOpenNewFileInZip2 @86 + zipCloseFileInZipRaw @87 + zipOpen2 @88 + zipOpenNewFileInZip3 @89 + + unzGetFilePos @100 + unzGoToFilePos @101 + + fill_win32_filefunc @110 + +; zlibwapi v1.2.4 added: + fill_win32_filefunc64 @111 + fill_win32_filefunc64A @112 + fill_win32_filefunc64W @113 + + unzOpen64 @120 + unzOpen2_64 @121 + unzGetGlobalInfo64 @122 + unzGetCurrentFileInfo64 @124 + unzGetCurrentFileZStreamPos64 @125 + unztell64 @126 + unzGetFilePos64 @127 + unzGoToFilePos64 @128 + + zipOpen64 @130 + zipOpen2_64 @131 + zipOpenNewFileInZip64 @132 + zipOpenNewFileInZip2_64 @133 + zipOpenNewFileInZip3_64 @134 + zipOpenNewFileInZip4_64 @135 + zipCloseFileInZipRaw64 @136 + +; zlib1 v1.2.4 added: + adler32_combine @140 + crc32_combine @142 + deflateSetHeader @144 + deflateTune @145 + gzbuffer @146 + gzclose_r @147 + gzclose_w @148 + gzdirect @149 + gzoffset @150 + inflateGetHeader @156 + inflateMark @157 + inflatePrime @158 + inflateReset2 @159 + inflateUndermine @160 + +; zlib1 v1.2.6 added: + gzgetc_ @161 + inflateResetKeep @163 + deflateResetKeep @164 + +; zlib1 v1.2.7 added: + gzopen_w @165 + +; zlib1 v1.2.8 added: + inflateGetDictionary @166 + gzvprintf @167 + +; zlib1 v1.2.9 added: + inflateCodesUsed @168 + inflateValidate @169 + uncompress2 @170 + gzfread @171 + gzfwrite @172 + deflateGetDictionary @173 + adler32_z @174 + crc32_z @175 + +; zlib1 v1.2.12 added: + crc32_combine_gen @176 + crc32_combine_gen64 @177 + crc32_combine_op @178 diff --git a/thirdparty/zlib-1.3.1/contrib/vstudio/vc12/zlibvc.sln b/thirdparty/zlib-1.3.1/contrib/vstudio/vc12/zlibvc.sln new file mode 100644 index 0000000..dcda229 --- /dev/null +++ b/thirdparty/zlib-1.3.1/contrib/vstudio/vc12/zlibvc.sln @@ -0,0 +1,119 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio 2013 +VisualStudioVersion = 12.0.40629.0 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "zlibvc", "zlibvc.vcxproj", "{8FD826F8-3739-44E6-8CC8-997122E53B8D}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "zlibstat", "zlibstat.vcxproj", "{745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "testzlib", "testzlib.vcxproj", "{AA6666AA-E09F-4135-9C0C-4FE50C3C654B}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "testzlibdll", "testzlibdll.vcxproj", "{C52F9E7B-498A-42BE-8DB4-85A15694366A}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "minizip", "minizip.vcxproj", "{48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "miniunz", "miniunz.vcxproj", "{C52F9E7B-498A-42BE-8DB4-85A15694382A}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Itanium = Debug|Itanium + Debug|Win32 = Debug|Win32 + Debug|x64 = Debug|x64 + Release|Itanium = Release|Itanium + Release|Win32 = Release|Win32 + Release|x64 = Release|x64 + ReleaseWithoutAsm|Itanium = ReleaseWithoutAsm|Itanium + ReleaseWithoutAsm|Win32 = ReleaseWithoutAsm|Win32 + ReleaseWithoutAsm|x64 = ReleaseWithoutAsm|x64 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {8FD826F8-3739-44E6-8CC8-997122E53B8D}.Debug|Itanium.ActiveCfg = Debug|Win32 + {8FD826F8-3739-44E6-8CC8-997122E53B8D}.Debug|Win32.ActiveCfg = Debug|Win32 + {8FD826F8-3739-44E6-8CC8-997122E53B8D}.Debug|Win32.Build.0 = Debug|Win32 + {8FD826F8-3739-44E6-8CC8-997122E53B8D}.Debug|x64.ActiveCfg = Debug|x64 + {8FD826F8-3739-44E6-8CC8-997122E53B8D}.Debug|x64.Build.0 = Debug|x64 + {8FD826F8-3739-44E6-8CC8-997122E53B8D}.Release|Itanium.ActiveCfg = Release|Win32 + {8FD826F8-3739-44E6-8CC8-997122E53B8D}.Release|Win32.ActiveCfg = Release|Win32 + {8FD826F8-3739-44E6-8CC8-997122E53B8D}.Release|Win32.Build.0 = Release|Win32 + {8FD826F8-3739-44E6-8CC8-997122E53B8D}.Release|x64.ActiveCfg = Release|x64 + {8FD826F8-3739-44E6-8CC8-997122E53B8D}.Release|x64.Build.0 = Release|x64 + {8FD826F8-3739-44E6-8CC8-997122E53B8D}.ReleaseWithoutAsm|Itanium.ActiveCfg = ReleaseWithoutAsm|Win32 + {8FD826F8-3739-44E6-8CC8-997122E53B8D}.ReleaseWithoutAsm|Win32.ActiveCfg = ReleaseWithoutAsm|Win32 + {8FD826F8-3739-44E6-8CC8-997122E53B8D}.ReleaseWithoutAsm|Win32.Build.0 = ReleaseWithoutAsm|Win32 + {8FD826F8-3739-44E6-8CC8-997122E53B8D}.ReleaseWithoutAsm|x64.ActiveCfg = ReleaseWithoutAsm|x64 + {8FD826F8-3739-44E6-8CC8-997122E53B8D}.ReleaseWithoutAsm|x64.Build.0 = ReleaseWithoutAsm|x64 + {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.Debug|Itanium.ActiveCfg = Debug|Win32 + {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.Debug|Win32.ActiveCfg = Debug|Win32 + {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.Debug|Win32.Build.0 = Debug|Win32 + {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.Debug|x64.ActiveCfg = Debug|x64 + {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.Debug|x64.Build.0 = Debug|x64 + {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.Release|Itanium.ActiveCfg = Release|Win32 + {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.Release|Win32.ActiveCfg = Release|Win32 + {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.Release|Win32.Build.0 = Release|Win32 + {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.Release|x64.ActiveCfg = Release|x64 + {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.Release|x64.Build.0 = Release|x64 + {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.ReleaseWithoutAsm|Itanium.ActiveCfg = ReleaseWithoutAsm|Win32 + {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.ReleaseWithoutAsm|Win32.ActiveCfg = ReleaseWithoutAsm|Win32 + {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.ReleaseWithoutAsm|Win32.Build.0 = ReleaseWithoutAsm|Win32 + {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.ReleaseWithoutAsm|x64.ActiveCfg = ReleaseWithoutAsm|x64 + {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.ReleaseWithoutAsm|x64.Build.0 = ReleaseWithoutAsm|x64 + {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.Debug|Itanium.ActiveCfg = Debug|Win32 + {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.Debug|Win32.ActiveCfg = Debug|Win32 + {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.Debug|Win32.Build.0 = Debug|Win32 + {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.Debug|x64.ActiveCfg = Debug|x64 + {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.Debug|x64.Build.0 = Debug|x64 + {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.Release|Itanium.ActiveCfg = Release|Win32 + {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.Release|Win32.ActiveCfg = Release|Win32 + {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.Release|Win32.Build.0 = Release|Win32 + {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.Release|x64.ActiveCfg = Release|x64 + {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.Release|x64.Build.0 = Release|x64 + {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.ReleaseWithoutAsm|Itanium.ActiveCfg = ReleaseWithoutAsm|Win32 + {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.ReleaseWithoutAsm|Win32.ActiveCfg = ReleaseWithoutAsm|Win32 + {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.ReleaseWithoutAsm|Win32.Build.0 = ReleaseWithoutAsm|Win32 + {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.ReleaseWithoutAsm|x64.ActiveCfg = ReleaseWithoutAsm|x64 + {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.ReleaseWithoutAsm|x64.Build.0 = ReleaseWithoutAsm|x64 + {C52F9E7B-498A-42BE-8DB4-85A15694366A}.Debug|Itanium.ActiveCfg = Debug|Win32 + {C52F9E7B-498A-42BE-8DB4-85A15694366A}.Debug|Win32.ActiveCfg = Debug|Win32 + {C52F9E7B-498A-42BE-8DB4-85A15694366A}.Debug|Win32.Build.0 = Debug|Win32 + {C52F9E7B-498A-42BE-8DB4-85A15694366A}.Debug|x64.ActiveCfg = Debug|x64 + {C52F9E7B-498A-42BE-8DB4-85A15694366A}.Debug|x64.Build.0 = Debug|x64 + {C52F9E7B-498A-42BE-8DB4-85A15694366A}.Release|Itanium.ActiveCfg = Release|Win32 + {C52F9E7B-498A-42BE-8DB4-85A15694366A}.Release|Win32.ActiveCfg = Release|Win32 + {C52F9E7B-498A-42BE-8DB4-85A15694366A}.Release|Win32.Build.0 = Release|Win32 + {C52F9E7B-498A-42BE-8DB4-85A15694366A}.Release|x64.ActiveCfg = Release|x64 + {C52F9E7B-498A-42BE-8DB4-85A15694366A}.Release|x64.Build.0 = Release|x64 + {C52F9E7B-498A-42BE-8DB4-85A15694366A}.ReleaseWithoutAsm|Itanium.ActiveCfg = Release|Win32 + {C52F9E7B-498A-42BE-8DB4-85A15694366A}.ReleaseWithoutAsm|Win32.ActiveCfg = Release|Win32 + {C52F9E7B-498A-42BE-8DB4-85A15694366A}.ReleaseWithoutAsm|x64.ActiveCfg = Release|x64 + {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.Debug|Itanium.ActiveCfg = Debug|Win32 + {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.Debug|Win32.ActiveCfg = Debug|Win32 + {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.Debug|Win32.Build.0 = Debug|Win32 + {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.Debug|x64.ActiveCfg = Debug|x64 + {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.Debug|x64.Build.0 = Debug|x64 + {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.Release|Itanium.ActiveCfg = Release|Win32 + {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.Release|Win32.ActiveCfg = Release|Win32 + {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.Release|Win32.Build.0 = Release|Win32 + {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.Release|x64.ActiveCfg = Release|x64 + {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.Release|x64.Build.0 = Release|x64 + {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.ReleaseWithoutAsm|Itanium.ActiveCfg = Release|Win32 + {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.ReleaseWithoutAsm|Win32.ActiveCfg = Release|Win32 + {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.ReleaseWithoutAsm|x64.ActiveCfg = Release|x64 + {C52F9E7B-498A-42BE-8DB4-85A15694382A}.Debug|Itanium.ActiveCfg = Debug|Win32 + {C52F9E7B-498A-42BE-8DB4-85A15694382A}.Debug|Win32.ActiveCfg = Debug|Win32 + {C52F9E7B-498A-42BE-8DB4-85A15694382A}.Debug|Win32.Build.0 = Debug|Win32 + {C52F9E7B-498A-42BE-8DB4-85A15694382A}.Debug|x64.ActiveCfg = Debug|x64 + {C52F9E7B-498A-42BE-8DB4-85A15694382A}.Debug|x64.Build.0 = Debug|x64 + {C52F9E7B-498A-42BE-8DB4-85A15694382A}.Release|Itanium.ActiveCfg = Release|Win32 + {C52F9E7B-498A-42BE-8DB4-85A15694382A}.Release|Win32.ActiveCfg = Release|Win32 + {C52F9E7B-498A-42BE-8DB4-85A15694382A}.Release|Win32.Build.0 = Release|Win32 + {C52F9E7B-498A-42BE-8DB4-85A15694382A}.Release|x64.ActiveCfg = Release|x64 + {C52F9E7B-498A-42BE-8DB4-85A15694382A}.Release|x64.Build.0 = Release|x64 + {C52F9E7B-498A-42BE-8DB4-85A15694382A}.ReleaseWithoutAsm|Itanium.ActiveCfg = Release|Win32 + {C52F9E7B-498A-42BE-8DB4-85A15694382A}.ReleaseWithoutAsm|Win32.ActiveCfg = Release|Win32 + {C52F9E7B-498A-42BE-8DB4-85A15694382A}.ReleaseWithoutAsm|x64.ActiveCfg = Release|x64 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/thirdparty/zlib-1.3.1/contrib/vstudio/vc12/zlibvc.vcxproj b/thirdparty/zlib-1.3.1/contrib/vstudio/vc12/zlibvc.vcxproj new file mode 100644 index 0000000..4e0de69 --- /dev/null +++ b/thirdparty/zlib-1.3.1/contrib/vstudio/vc12/zlibvc.vcxproj @@ -0,0 +1,668 @@ + + + + + Debug + Itanium + + + Debug + Win32 + + + Debug + x64 + + + ReleaseWithoutAsm + Itanium + + + ReleaseWithoutAsm + Win32 + + + ReleaseWithoutAsm + x64 + + + Release + Itanium + + + Release + Win32 + + + Release + x64 + + + + {8FD826F8-3739-44E6-8CC8-997122E53B8D} + + + + DynamicLibrary + false + true + v120 + + + DynamicLibrary + false + true + v120 + + + DynamicLibrary + false + v120 + Unicode + + + DynamicLibrary + false + true + v120 + + + DynamicLibrary + false + true + v120 + + + DynamicLibrary + false + v120 + + + DynamicLibrary + false + true + v120 + + + DynamicLibrary + false + true + v120 + + + DynamicLibrary + false + v120 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <_ProjectFileVersion>10.0.30128.1 + x86\ZlibDll$(Configuration)\ + x86\ZlibDll$(Configuration)\Tmp\ + true + false + x86\ZlibDll$(Configuration)\ + x86\ZlibDll$(Configuration)\Tmp\ + false + false + x86\ZlibDll$(Configuration)\ + x86\ZlibDll$(Configuration)\Tmp\ + false + false + x64\ZlibDll$(Configuration)\ + x64\ZlibDll$(Configuration)\Tmp\ + true + false + ia64\ZlibDll$(Configuration)\ + ia64\ZlibDll$(Configuration)\Tmp\ + true + false + x64\ZlibDll$(Configuration)\ + x64\ZlibDll$(Configuration)\Tmp\ + false + false + ia64\ZlibDll$(Configuration)\ + ia64\ZlibDll$(Configuration)\Tmp\ + false + false + x64\ZlibDll$(Configuration)\ + x64\ZlibDll$(Configuration)\Tmp\ + false + false + ia64\ZlibDll$(Configuration)\ + ia64\ZlibDll$(Configuration)\Tmp\ + false + false + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + zlibwapi + zlibwapi + zlibwapi + zlibwapi + zlibwapi + zlibwapi + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + Win32 + $(OutDir)zlibvc.tlb + + + Disabled + ..\..\..;%(AdditionalIncludeDirectories) + WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;ZLIB_WINAPI;%(PreprocessorDefinitions) + + + MultiThreadedDebugDLL + false + $(IntDir)zlibvc.pch + $(IntDir) + $(IntDir) + $(OutDir) + + + Level3 + true + ProgramDatabase + + + _DEBUG;%(PreprocessorDefinitions) + 0x040c + + + /MACHINE:I386 %(AdditionalOptions) + %(AdditionalDependencies) + $(OutDir)zlibwapi.dll + true + .\zlibvc.def + true + $(OutDir)zlibwapi.pdb + true + $(OutDir)zlibwapi.map + Windows + false + + + $(OutDir)zlibwapi.lib + + + + + NDEBUG;%(PreprocessorDefinitions) + true + true + Win32 + $(OutDir)zlibvc.tlb + + + OnlyExplicitInline + ..\..\..;%(AdditionalIncludeDirectories) + WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;ZLIB_WINAPI;%(PreprocessorDefinitions) + true + + + MultiThreadedDLL + false + true + $(IntDir)zlibvc.pch + All + $(IntDir) + $(IntDir) + $(OutDir) + + + Level3 + true + + + NDEBUG;%(PreprocessorDefinitions) + 0x040c + + + /MACHINE:I386 %(AdditionalOptions) + $(OutDir)zlibwapi.dll + true + false + .\zlibvc.def + $(OutDir)zlibwapi.pdb + true + $(OutDir)zlibwapi.map + Windows + false + + + $(OutDir)zlibwapi.lib + + + + + NDEBUG;%(PreprocessorDefinitions) + true + true + Win32 + $(OutDir)zlibvc.tlb + + + OnlyExplicitInline + ..\..\..;%(AdditionalIncludeDirectories) + WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;ZLIB_WINAPI;%(PreprocessorDefinitions) + true + + + MultiThreaded + false + true + $(IntDir)zlibvc.pch + All + $(IntDir) + $(IntDir) + $(OutDir) + + + Level3 + true + + + NDEBUG;%(PreprocessorDefinitions) + 0x040c + + + /MACHINE:I386 %(AdditionalOptions) + %(AdditionalDependencies) + $(OutDir)zlibwapi.dll + true + false + .\zlibvc.def + $(OutDir)zlibwapi.pdb + true + $(OutDir)zlibwapi.map + Windows + false + + + $(OutDir)zlibwapi.lib + false + + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + X64 + $(OutDir)zlibvc.tlb + + + Disabled + ..\..\..;%(AdditionalIncludeDirectories) + WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;ZLIB_WINAPI;WIN64;%(PreprocessorDefinitions) + + + MultiThreadedDebugDLL + false + $(IntDir)zlibvc.pch + $(IntDir) + $(IntDir) + $(OutDir) + + + Level3 + true + ProgramDatabase + + + _DEBUG;%(PreprocessorDefinitions) + 0x040c + + + %(AdditionalDependencies) + $(OutDir)zlibwapi.dll + true + .\zlibvc.def + true + $(OutDir)zlibwapi.pdb + true + $(OutDir)zlibwapi.map + Windows + $(OutDir)zlibwapi.lib + MachineX64 + + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + Itanium + $(OutDir)zlibvc.tlb + + + Disabled + ..\..\..;%(AdditionalIncludeDirectories) + WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;ZLIB_WINAPI;WIN64;%(PreprocessorDefinitions) + + + MultiThreadedDebugDLL + false + $(IntDir)zlibvc.pch + $(IntDir) + $(IntDir) + $(OutDir) + + + Level3 + true + ProgramDatabase + + + _DEBUG;%(PreprocessorDefinitions) + 0x040c + + + $(OutDir)zlibwapi.dll + true + .\zlibvc.def + true + $(OutDir)zlibwapi.pdb + true + $(OutDir)zlibwapi.map + Windows + $(OutDir)zlibwapi.lib + MachineIA64 + + + + + NDEBUG;%(PreprocessorDefinitions) + true + true + X64 + $(OutDir)zlibvc.tlb + + + OnlyExplicitInline + ..\..\..;%(AdditionalIncludeDirectories) + WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;ZLIB_WINAPI;WIN64;%(PreprocessorDefinitions) + true + + + MultiThreadedDLL + false + true + $(IntDir)zlibvc.pch + All + $(IntDir) + $(IntDir) + $(OutDir) + + + Level3 + true + + + NDEBUG;%(PreprocessorDefinitions) + 0x040c + + + $(OutDir)zlibwapi.dll + true + false + .\zlibvc.def + $(OutDir)zlibwapi.pdb + true + $(OutDir)zlibwapi.map + Windows + $(OutDir)zlibwapi.lib + MachineX64 + + + + + NDEBUG;%(PreprocessorDefinitions) + true + true + Itanium + $(OutDir)zlibvc.tlb + + + OnlyExplicitInline + ..\..\..;%(AdditionalIncludeDirectories) + WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;ZLIB_WINAPI;WIN64;%(PreprocessorDefinitions) + true + + + MultiThreadedDLL + false + true + $(IntDir)zlibvc.pch + All + $(IntDir) + $(IntDir) + $(OutDir) + + + Level3 + true + + + NDEBUG;%(PreprocessorDefinitions) + 0x040c + + + $(OutDir)zlibwapi.dll + true + false + .\zlibvc.def + $(OutDir)zlibwapi.pdb + true + $(OutDir)zlibwapi.map + Windows + $(OutDir)zlibwapi.lib + MachineIA64 + + + + + NDEBUG;%(PreprocessorDefinitions) + true + true + X64 + $(OutDir)zlibvc.tlb + + + OnlyExplicitInline + ..\..\..;%(AdditionalIncludeDirectories) + _CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;ZLIB_WINAPI;WIN64;%(PreprocessorDefinitions) + true + + + MultiThreadedDLL + false + true + $(IntDir)zlibvc.pch + All + $(IntDir) + $(IntDir) + $(OutDir) + + + Level3 + true + + + NDEBUG;%(PreprocessorDefinitions) + 0x040c + + + %(AdditionalDependencies) + $(OutDir)zlibwapi.dll + true + false + .\zlibvc.def + $(OutDir)zlibwapi.pdb + true + $(OutDir)zlibwapi.map + Windows + $(OutDir)zlibwapi.lib + MachineX64 + + + + + NDEBUG;%(PreprocessorDefinitions) + true + true + Itanium + $(OutDir)zlibvc.tlb + + + OnlyExplicitInline + ..\..\..;%(AdditionalIncludeDirectories) + _CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;ZLIB_WINAPI;WIN64;%(PreprocessorDefinitions) + true + + + MultiThreadedDLL + false + true + $(IntDir)zlibvc.pch + All + $(IntDir) + $(IntDir) + $(OutDir) + + + Level3 + true + + + NDEBUG;%(PreprocessorDefinitions) + 0x040c + + + $(OutDir)zlibwapi.dll + true + false + .\zlibvc.def + $(OutDir)zlibwapi.pdb + true + $(OutDir)zlibwapi.map + Windows + $(OutDir)zlibwapi.lib + MachineIA64 + + + + + + + + + + + + + + + + + + + + + %(AdditionalIncludeDirectories) + ZLIB_INTERNAL;%(PreprocessorDefinitions) + %(AdditionalIncludeDirectories) + ZLIB_INTERNAL;%(PreprocessorDefinitions) + %(AdditionalIncludeDirectories) + ZLIB_INTERNAL;%(PreprocessorDefinitions) + + + %(AdditionalIncludeDirectories) + ZLIB_INTERNAL;%(PreprocessorDefinitions) + %(AdditionalIncludeDirectories) + ZLIB_INTERNAL;%(PreprocessorDefinitions) + %(AdditionalIncludeDirectories) + ZLIB_INTERNAL;%(PreprocessorDefinitions) + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/thirdparty/zlib-1.3.1/contrib/vstudio/vc14/miniunz.vcxproj b/thirdparty/zlib-1.3.1/contrib/vstudio/vc14/miniunz.vcxproj new file mode 100644 index 0000000..9b5c075 --- /dev/null +++ b/thirdparty/zlib-1.3.1/contrib/vstudio/vc14/miniunz.vcxproj @@ -0,0 +1,316 @@ + + + + + Debug + Itanium + + + Debug + Win32 + + + Debug + x64 + + + Release + Itanium + + + Release + Win32 + + + Release + x64 + + + + {C52F9E7B-498A-42BE-8DB4-85A15694382A} + Win32Proj + + + + Application + MultiByte + v140 + + + Application + Unicode + v140 + + + Application + MultiByte + v140 + + + Application + MultiByte + v140 + + + Application + MultiByte + v140 + + + Application + MultiByte + v140 + + + + + + + + + + + + + + + + + + + + + + + + + <_ProjectFileVersion>10.0.30128.1 + x86\MiniUnzip$(Configuration)\ + x86\MiniUnzip$(Configuration)\Tmp\ + true + false + x86\MiniUnzip$(Configuration)\ + x86\MiniUnzip$(Configuration)\Tmp\ + false + false + x64\MiniUnzip$(Configuration)\ + x64\MiniUnzip$(Configuration)\Tmp\ + true + false + ia64\MiniUnzip$(Configuration)\ + ia64\MiniUnzip$(Configuration)\Tmp\ + true + false + x64\MiniUnzip$(Configuration)\ + x64\MiniUnzip$(Configuration)\Tmp\ + false + false + ia64\MiniUnzip$(Configuration)\ + ia64\MiniUnzip$(Configuration)\Tmp\ + false + false + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + + + + Disabled + ..\..\..;..\..\minizip;%(AdditionalIncludeDirectories) + WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + Default + MultiThreadedDebugDLL + false + + + $(IntDir) + Level3 + ProgramDatabase + + + x86\ZlibDllDebug\zlibwapi.lib;%(AdditionalDependencies) + $(OutDir)miniunz.exe + true + $(OutDir)miniunz.pdb + Console + false + + + MachineX86 + + + + + MaxSpeed + OnlyExplicitInline + true + ..\..\..;..\..\minizip;%(AdditionalIncludeDirectories) + WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + Default + MultiThreaded + false + true + + + $(IntDir) + Level3 + ProgramDatabase + + + x86\ZlibDllRelease\zlibwapi.lib;%(AdditionalDependencies) + $(OutDir)miniunz.exe + true + Console + true + true + false + + + MachineX86 + + + + + X64 + + + Disabled + ..\..\..;..\..\minizip;%(AdditionalIncludeDirectories) + _CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;_DEBUG;_CONSOLE;WIN64;%(PreprocessorDefinitions) + true + Default + MultiThreadedDebugDLL + false + + + $(IntDir) + Level3 + ProgramDatabase + + + x64\ZlibDllDebug\zlibwapi.lib;%(AdditionalDependencies) + $(OutDir)miniunz.exe + true + $(OutDir)miniunz.pdb + Console + MachineX64 + + + + + Itanium + + + Disabled + ..\..\..;..\..\minizip;%(AdditionalIncludeDirectories) + _CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;_DEBUG;_CONSOLE;WIN64;%(PreprocessorDefinitions) + true + Default + MultiThreadedDebugDLL + false + + + $(IntDir) + Level3 + ProgramDatabase + + + ia64\ZlibDllDebug\zlibwapi.lib;%(AdditionalDependencies) + $(OutDir)miniunz.exe + true + $(OutDir)miniunz.pdb + Console + MachineIA64 + + + + + X64 + + + MaxSpeed + OnlyExplicitInline + true + ..\..\..;..\..\minizip;%(AdditionalIncludeDirectories) + _CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;NDEBUG;_CONSOLE;WIN64;%(PreprocessorDefinitions) + true + Default + MultiThreadedDLL + false + true + + + $(IntDir) + Level3 + ProgramDatabase + + + x64\ZlibDllRelease\zlibwapi.lib;%(AdditionalDependencies) + $(OutDir)miniunz.exe + true + Console + true + true + MachineX64 + + + + + Itanium + + + MaxSpeed + OnlyExplicitInline + true + ..\..\..;..\..\minizip;%(AdditionalIncludeDirectories) + _CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;NDEBUG;_CONSOLE;WIN64;%(PreprocessorDefinitions) + true + Default + MultiThreadedDLL + false + true + + + $(IntDir) + Level3 + ProgramDatabase + + + ia64\ZlibDllRelease\zlibwapi.lib;%(AdditionalDependencies) + $(OutDir)miniunz.exe + true + Console + true + true + MachineIA64 + + + + + + + + {8fd826f8-3739-44e6-8cc8-997122e53b8d} + + + + + + \ No newline at end of file diff --git a/thirdparty/zlib-1.3.1/contrib/vstudio/vc14/minizip.vcxproj b/thirdparty/zlib-1.3.1/contrib/vstudio/vc14/minizip.vcxproj new file mode 100644 index 0000000..968a410 --- /dev/null +++ b/thirdparty/zlib-1.3.1/contrib/vstudio/vc14/minizip.vcxproj @@ -0,0 +1,313 @@ + + + + + Debug + Itanium + + + Debug + Win32 + + + Debug + x64 + + + Release + Itanium + + + Release + Win32 + + + Release + x64 + + + + {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B} + Win32Proj + + + + Application + MultiByte + v140 + + + Application + Unicode + v140 + + + Application + MultiByte + v140 + + + Application + MultiByte + v140 + + + Application + MultiByte + v140 + + + Application + MultiByte + v140 + + + + + + + + + + + + + + + + + + + + + + + + + <_ProjectFileVersion>10.0.30128.1 + x86\MiniZip$(Configuration)\ + x86\MiniZip$(Configuration)\Tmp\ + true + false + x86\MiniZip$(Configuration)\ + x86\MiniZip$(Configuration)\Tmp\ + false + x64\$(Configuration)\ + x64\$(Configuration)\ + true + false + ia64\$(Configuration)\ + ia64\$(Configuration)\ + true + false + x64\$(Configuration)\ + x64\$(Configuration)\ + false + ia64\$(Configuration)\ + ia64\$(Configuration)\ + false + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + + + + Disabled + ..\..\..;..\..\minizip;%(AdditionalIncludeDirectories) + WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + Default + MultiThreadedDebugDLL + false + + + $(IntDir) + Level3 + ProgramDatabase + + + x86\ZlibDllDebug\zlibwapi.lib;%(AdditionalDependencies) + $(OutDir)minizip.exe + true + $(OutDir)minizip.pdb + Console + false + + + MachineX86 + + + + + MaxSpeed + OnlyExplicitInline + true + ..\..\..;..\..\minizip;%(AdditionalIncludeDirectories) + WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + Default + MultiThreaded + false + true + + + $(IntDir) + Level3 + ProgramDatabase + + + x86\ZlibDllRelease\zlibwapi.lib;%(AdditionalDependencies) + $(OutDir)minizip.exe + true + Console + true + true + false + + + MachineX86 + + + + + X64 + + + Disabled + ..\..\..;..\..\minizip;%(AdditionalIncludeDirectories) + _CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;_DEBUG;_CONSOLE;WIN64;%(PreprocessorDefinitions) + true + Default + MultiThreadedDebugDLL + false + + + $(IntDir) + Level3 + ProgramDatabase + + + x64\ZlibDllDebug\zlibwapi.lib;%(AdditionalDependencies) + $(OutDir)minizip.exe + true + $(OutDir)minizip.pdb + Console + MachineX64 + + + + + Itanium + + + Disabled + ..\..\..;..\..\minizip;%(AdditionalIncludeDirectories) + _CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;_DEBUG;_CONSOLE;WIN64;%(PreprocessorDefinitions) + true + Default + MultiThreadedDebugDLL + false + + + $(IntDir) + Level3 + ProgramDatabase + + + ia64\ZlibDllDebug\zlibwapi.lib;%(AdditionalDependencies) + $(OutDir)minizip.exe + true + $(OutDir)minizip.pdb + Console + MachineIA64 + + + + + X64 + + + MaxSpeed + OnlyExplicitInline + true + ..\..\..;..\..\minizip;%(AdditionalIncludeDirectories) + _CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;NDEBUG;_CONSOLE;WIN64;%(PreprocessorDefinitions) + true + Default + MultiThreadedDLL + false + true + + + $(IntDir) + Level3 + ProgramDatabase + + + x64\ZlibDllRelease\zlibwapi.lib;%(AdditionalDependencies) + $(OutDir)minizip.exe + true + Console + true + true + MachineX64 + + + + + Itanium + + + MaxSpeed + OnlyExplicitInline + true + ..\..\..;..\..\minizip;%(AdditionalIncludeDirectories) + _CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;NDEBUG;_CONSOLE;WIN64;%(PreprocessorDefinitions) + true + Default + MultiThreadedDLL + false + true + + + $(IntDir) + Level3 + ProgramDatabase + + + ia64\ZlibDllRelease\zlibwapi.lib;%(AdditionalDependencies) + $(OutDir)minizip.exe + true + Console + true + true + MachineIA64 + + + + + + + + {8fd826f8-3739-44e6-8cc8-997122e53b8d} + + + + + + \ No newline at end of file diff --git a/thirdparty/zlib-1.3.1/contrib/vstudio/vc14/testzlib.vcxproj b/thirdparty/zlib-1.3.1/contrib/vstudio/vc14/testzlib.vcxproj new file mode 100644 index 0000000..5452049 --- /dev/null +++ b/thirdparty/zlib-1.3.1/contrib/vstudio/vc14/testzlib.vcxproj @@ -0,0 +1,422 @@ + + + + + Debug + Itanium + + + Debug + Win32 + + + Debug + x64 + + + ReleaseWithoutAsm + Itanium + + + ReleaseWithoutAsm + Win32 + + + ReleaseWithoutAsm + x64 + + + Release + Itanium + + + Release + Win32 + + + Release + x64 + + + + {AA6666AA-E09F-4135-9C0C-4FE50C3C654B} + testzlib + Win32Proj + + + + Application + MultiByte + true + v140 + + + Application + MultiByte + true + v140 + + + Application + Unicode + v140 + + + Application + MultiByte + true + v140 + + + Application + MultiByte + true + v140 + + + Application + MultiByte + v140 + + + Application + true + v140 + + + Application + true + v140 + + + Application + v140 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <_ProjectFileVersion>10.0.30128.1 + x86\TestZlib$(Configuration)\ + x86\TestZlib$(Configuration)\Tmp\ + true + false + x86\TestZlib$(Configuration)\ + x86\TestZlib$(Configuration)\Tmp\ + false + false + x86\TestZlib$(Configuration)\ + x86\TestZlib$(Configuration)\Tmp\ + false + false + x64\TestZlib$(Configuration)\ + x64\TestZlib$(Configuration)\Tmp\ + false + ia64\TestZlib$(Configuration)\ + ia64\TestZlib$(Configuration)\Tmp\ + true + false + x64\TestZlib$(Configuration)\ + x64\TestZlib$(Configuration)\Tmp\ + false + ia64\TestZlib$(Configuration)\ + ia64\TestZlib$(Configuration)\Tmp\ + false + false + x64\TestZlib$(Configuration)\ + x64\TestZlib$(Configuration)\Tmp\ + false + ia64\TestZlib$(Configuration)\ + ia64\TestZlib$(Configuration)\Tmp\ + false + false + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + + + + Disabled + ..\..\..;%(AdditionalIncludeDirectories) + WIN32;ZLIB_WINAPI;_DEBUG;_CONSOLE;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;%(PreprocessorDefinitions) + true + Default + MultiThreadedDebugDLL + false + + + AssemblyAndSourceCode + $(IntDir) + Level3 + ProgramDatabase + + + %(AdditionalDependencies) + $(OutDir)testzlib.exe + true + $(OutDir)testzlib.pdb + Console + false + + + MachineX86 + + + + + MaxSpeed + OnlyExplicitInline + true + ..\..\..;%(AdditionalIncludeDirectories) + WIN32;ZLIB_WINAPI;NDEBUG;_CONSOLE;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;%(PreprocessorDefinitions) + true + Default + MultiThreaded + false + true + + + $(IntDir) + Level3 + ProgramDatabase + + + $(OutDir)testzlib.exe + true + Console + true + true + false + + + MachineX86 + + + + + MaxSpeed + OnlyExplicitInline + true + ..\..\..;%(AdditionalIncludeDirectories) + WIN32;ZLIB_WINAPI;NDEBUG;_CONSOLE;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;%(PreprocessorDefinitions) + true + Default + MultiThreaded + false + true + + + $(IntDir) + Level3 + ProgramDatabase + + + %(AdditionalDependencies) + $(OutDir)testzlib.exe + true + Console + true + true + false + + + MachineX86 + false + + + + + ..\..\..;%(AdditionalIncludeDirectories) + WIN32;ZLIB_WINAPI;_DEBUG;_CONSOLE;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;%(PreprocessorDefinitions) + Default + MultiThreadedDebugDLL + false + $(IntDir) + + + %(AdditionalDependencies) + + + + + Itanium + + + Disabled + ..\..\..;%(AdditionalIncludeDirectories) + ZLIB_WINAPI;_DEBUG;_CONSOLE;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;WIN64;%(PreprocessorDefinitions) + true + Default + MultiThreadedDebugDLL + false + + + AssemblyAndSourceCode + $(IntDir) + Level3 + ProgramDatabase + + + $(OutDir)testzlib.exe + true + $(OutDir)testzlib.pdb + Console + MachineIA64 + + + + + ..\..\..;%(AdditionalIncludeDirectories) + WIN32;ZLIB_WINAPI;NDEBUG;_CONSOLE;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;%(PreprocessorDefinitions) + Default + MultiThreadedDLL + false + $(IntDir) + + + %(AdditionalDependencies) + + + + + Itanium + + + MaxSpeed + OnlyExplicitInline + true + ..\..\..;%(AdditionalIncludeDirectories) + ZLIB_WINAPI;NDEBUG;_CONSOLE;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;WIN64;%(PreprocessorDefinitions) + true + Default + MultiThreadedDLL + false + true + + + $(IntDir) + Level3 + ProgramDatabase + + + $(OutDir)testzlib.exe + true + Console + true + true + MachineIA64 + + + + + ..\..\..;%(AdditionalIncludeDirectories) + WIN32;ZLIB_WINAPI;NDEBUG;_CONSOLE;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;%(PreprocessorDefinitions) + Default + MultiThreadedDLL + false + $(IntDir) + + + %(AdditionalDependencies) + + + + + Itanium + + + MaxSpeed + OnlyExplicitInline + true + ..\..\..;%(AdditionalIncludeDirectories) + ZLIB_WINAPI;NDEBUG;_CONSOLE;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;WIN64;%(PreprocessorDefinitions) + true + Default + MultiThreadedDLL + false + true + + + $(IntDir) + Level3 + ProgramDatabase + + + $(OutDir)testzlib.exe + true + Console + true + true + MachineIA64 + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/thirdparty/zlib-1.3.1/contrib/vstudio/vc14/testzlibdll.vcxproj b/thirdparty/zlib-1.3.1/contrib/vstudio/vc14/testzlibdll.vcxproj new file mode 100644 index 0000000..d87474d --- /dev/null +++ b/thirdparty/zlib-1.3.1/contrib/vstudio/vc14/testzlibdll.vcxproj @@ -0,0 +1,316 @@ + + + + + Debug + Itanium + + + Debug + Win32 + + + Debug + x64 + + + Release + Itanium + + + Release + Win32 + + + Release + x64 + + + + {C52F9E7B-498A-42BE-8DB4-85A15694366A} + Win32Proj + + + + Application + MultiByte + v140 + + + Application + Unicode + v140 + + + Application + MultiByte + v140 + + + Application + MultiByte + v140 + + + Application + MultiByte + v140 + + + Application + MultiByte + v140 + + + + + + + + + + + + + + + + + + + + + + + + + <_ProjectFileVersion>10.0.30128.1 + x86\TestZlibDll$(Configuration)\ + x86\TestZlibDll$(Configuration)\Tmp\ + true + false + x86\TestZlibDll$(Configuration)\ + x86\TestZlibDll$(Configuration)\Tmp\ + false + false + x64\TestZlibDll$(Configuration)\ + x64\TestZlibDll$(Configuration)\Tmp\ + true + false + ia64\TestZlibDll$(Configuration)\ + ia64\TestZlibDll$(Configuration)\Tmp\ + true + false + x64\TestZlibDll$(Configuration)\ + x64\TestZlibDll$(Configuration)\Tmp\ + false + false + ia64\TestZlibDll$(Configuration)\ + ia64\TestZlibDll$(Configuration)\Tmp\ + false + false + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + + + + Disabled + ..\..\..;..\..\minizip;%(AdditionalIncludeDirectories) + WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + Default + MultiThreadedDebugDLL + false + + + $(IntDir) + Level3 + ProgramDatabase + + + x86\ZlibDllDebug\zlibwapi.lib;%(AdditionalDependencies) + $(OutDir)testzlibdll.exe + true + $(OutDir)testzlib.pdb + Console + false + + + MachineX86 + + + + + MaxSpeed + OnlyExplicitInline + true + ..\..\..;..\..\minizip;%(AdditionalIncludeDirectories) + WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + Default + MultiThreaded + false + true + + + $(IntDir) + Level3 + ProgramDatabase + + + x86\ZlibDllRelease\zlibwapi.lib;%(AdditionalDependencies) + $(OutDir)testzlibdll.exe + true + Console + true + true + false + + + MachineX86 + + + + + X64 + + + Disabled + ..\..\..;..\..\minizip;%(AdditionalIncludeDirectories) + _CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;_DEBUG;_CONSOLE;WIN64;%(PreprocessorDefinitions) + true + Default + MultiThreadedDebugDLL + false + + + $(IntDir) + Level3 + ProgramDatabase + + + x64\ZlibDllDebug\zlibwapi.lib;%(AdditionalDependencies) + $(OutDir)testzlibdll.exe + true + $(OutDir)testzlib.pdb + Console + MachineX64 + + + + + Itanium + + + Disabled + ..\..\..;..\..\minizip;%(AdditionalIncludeDirectories) + _CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;_DEBUG;_CONSOLE;WIN64;%(PreprocessorDefinitions) + true + Default + MultiThreadedDebugDLL + false + + + $(IntDir) + Level3 + ProgramDatabase + + + ia64\ZlibDllDebug\zlibwapi.lib;%(AdditionalDependencies) + $(OutDir)testzlibdll.exe + true + $(OutDir)testzlib.pdb + Console + MachineIA64 + + + + + X64 + + + MaxSpeed + OnlyExplicitInline + true + ..\..\..;..\..\minizip;%(AdditionalIncludeDirectories) + _CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;NDEBUG;_CONSOLE;WIN64;%(PreprocessorDefinitions) + true + Default + MultiThreadedDLL + false + true + + + $(IntDir) + Level3 + ProgramDatabase + + + x64\ZlibDllRelease\zlibwapi.lib;%(AdditionalDependencies) + $(OutDir)testzlibdll.exe + true + Console + true + true + MachineX64 + + + + + Itanium + + + MaxSpeed + OnlyExplicitInline + true + ..\..\..;..\..\minizip;%(AdditionalIncludeDirectories) + _CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;NDEBUG;_CONSOLE;WIN64;%(PreprocessorDefinitions) + true + Default + MultiThreadedDLL + false + true + + + $(IntDir) + Level3 + ProgramDatabase + + + ia64\ZlibDllRelease\zlibwapi.lib;%(AdditionalDependencies) + $(OutDir)testzlibdll.exe + true + Console + true + true + MachineIA64 + + + + + + + + {8fd826f8-3739-44e6-8cc8-997122e53b8d} + + + + + + \ No newline at end of file diff --git a/thirdparty/zlib-1.3.1/contrib/vstudio/vc14/zlib.rc b/thirdparty/zlib-1.3.1/contrib/vstudio/vc14/zlib.rc new file mode 100644 index 0000000..a55f341 --- /dev/null +++ b/thirdparty/zlib-1.3.1/contrib/vstudio/vc14/zlib.rc @@ -0,0 +1,32 @@ +#include + +#define IDR_VERSION1 1 +IDR_VERSION1 VERSIONINFO MOVEABLE IMPURE LOADONCALL DISCARDABLE + FILEVERSION 1, 3, 1, 0 + PRODUCTVERSION 1, 3, 1, 0 + FILEFLAGSMASK VS_FFI_FILEFLAGSMASK + FILEFLAGS 0 + FILEOS VOS_DOS_WINDOWS32 + FILETYPE VFT_DLL + FILESUBTYPE 0 // not used +BEGIN + BLOCK "StringFileInfo" + BEGIN + BLOCK "040904E4" + //language ID = U.S. English, char set = Windows, Multilingual + + BEGIN + VALUE "FileDescription", "zlib data compression and ZIP file I/O library\0" + VALUE "FileVersion", "1.3.1\0" + VALUE "InternalName", "zlib\0" + VALUE "OriginalFilename", "zlibwapi.dll\0" + VALUE "ProductName", "ZLib.DLL\0" + VALUE "Comments","DLL support by Alessandro Iacopetti & Gilles Vollant\0" + VALUE "LegalCopyright", "(C) 1995-2024 Jean-loup Gailly & Mark Adler\0" + END + END + BLOCK "VarFileInfo" + BEGIN + VALUE "Translation", 0x0409, 1252 + END +END diff --git a/thirdparty/zlib-1.3.1/contrib/vstudio/vc14/zlibstat.vcxproj b/thirdparty/zlib-1.3.1/contrib/vstudio/vc14/zlibstat.vcxproj new file mode 100644 index 0000000..85c1e89 --- /dev/null +++ b/thirdparty/zlib-1.3.1/contrib/vstudio/vc14/zlibstat.vcxproj @@ -0,0 +1,459 @@ + + + + + Debug + Itanium + + + Debug + Win32 + + + Debug + x64 + + + ReleaseWithoutAsm + Itanium + + + ReleaseWithoutAsm + Win32 + + + ReleaseWithoutAsm + x64 + + + Release + Itanium + + + Release + Win32 + + + Release + x64 + + + + {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8} + + + + StaticLibrary + false + v140 + + + StaticLibrary + false + v140 + + + StaticLibrary + false + v140 + Unicode + + + StaticLibrary + false + v140 + + + StaticLibrary + false + v140 + + + StaticLibrary + false + v140 + + + StaticLibrary + false + v140 + + + StaticLibrary + false + v140 + + + StaticLibrary + false + v140 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <_ProjectFileVersion>10.0.30128.1 + x86\ZlibStat$(Configuration)\ + x86\ZlibStat$(Configuration)\Tmp\ + x86\ZlibStat$(Configuration)\ + x86\ZlibStat$(Configuration)\Tmp\ + x86\ZlibStat$(Configuration)\ + x86\ZlibStat$(Configuration)\Tmp\ + x64\ZlibStat$(Configuration)\ + x64\ZlibStat$(Configuration)\Tmp\ + ia64\ZlibStat$(Configuration)\ + ia64\ZlibStat$(Configuration)\Tmp\ + x64\ZlibStat$(Configuration)\ + x64\ZlibStat$(Configuration)\Tmp\ + ia64\ZlibStat$(Configuration)\ + ia64\ZlibStat$(Configuration)\Tmp\ + x64\ZlibStat$(Configuration)\ + x64\ZlibStat$(Configuration)\Tmp\ + ia64\ZlibStat$(Configuration)\ + ia64\ZlibStat$(Configuration)\Tmp\ + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + + + + Disabled + ..\..\..;%(AdditionalIncludeDirectories) + WIN32;ZLIB_WINAPI;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;%(PreprocessorDefinitions) + + + MultiThreadedDebugDLL + false + $(IntDir)zlibstat.pch + $(IntDir) + $(IntDir) + $(OutDir) + Level3 + true + OldStyle + + + 0x040c + + + /MACHINE:X86 /NODEFAULTLIB %(AdditionalOptions) + $(OutDir)zlibstat.lib + true + + + + + OnlyExplicitInline + ..\..\..;%(AdditionalIncludeDirectories) + WIN32;ZLIB_WINAPI;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;%(PreprocessorDefinitions) + true + + + MultiThreaded + false + true + $(IntDir)zlibstat.pch + $(IntDir) + $(IntDir) + $(OutDir) + Level3 + true + + + 0x040c + + + /MACHINE:X86 /NODEFAULTLIB %(AdditionalOptions) + %(AdditionalDependencies) + $(OutDir)zlibstat.lib + true + + + + + OnlyExplicitInline + ..\..\..;%(AdditionalIncludeDirectories) + WIN32;ZLIB_WINAPI;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;%(PreprocessorDefinitions) + true + + + MultiThreaded + false + true + $(IntDir)zlibstat.pch + $(IntDir) + $(IntDir) + $(OutDir) + Level3 + true + + + 0x040c + + + /MACHINE:X86 /NODEFAULTLIB %(AdditionalOptions) + $(OutDir)zlibstat.lib + true + + + + + X64 + + + Disabled + ..\..\..;%(AdditionalIncludeDirectories) + ZLIB_WINAPI;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;WIN64;%(PreprocessorDefinitions) + + + MultiThreadedDebugDLL + false + $(IntDir)zlibstat.pch + $(IntDir) + $(IntDir) + $(OutDir) + Level3 + true + OldStyle + + + 0x040c + + + /MACHINE:AMD64 /NODEFAULTLIB %(AdditionalOptions) + $(OutDir)zlibstat.lib + true + + + + + Itanium + + + Disabled + ..\..\..;%(AdditionalIncludeDirectories) + ZLIB_WINAPI;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;WIN64;%(PreprocessorDefinitions) + + + MultiThreadedDebugDLL + false + $(IntDir)zlibstat.pch + $(IntDir) + $(IntDir) + $(OutDir) + Level3 + true + OldStyle + + + 0x040c + + + /MACHINE:IA64 /NODEFAULTLIB %(AdditionalOptions) + $(OutDir)zlibstat.lib + true + + + + + X64 + + + OnlyExplicitInline + ..\..\..;%(AdditionalIncludeDirectories) + ZLIB_WINAPI;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;WIN64;%(PreprocessorDefinitions) + true + + + MultiThreadedDLL + false + true + $(IntDir)zlibstat.pch + $(IntDir) + $(IntDir) + $(OutDir) + Level3 + true + + + 0x040c + + + /MACHINE:AMD64 /NODEFAULTLIB %(AdditionalOptions) + %(AdditionalDependencies) + $(OutDir)zlibstat.lib + true + + + + + Itanium + + + OnlyExplicitInline + ..\..\..;%(AdditionalIncludeDirectories) + ZLIB_WINAPI;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;WIN64;%(PreprocessorDefinitions) + true + + + MultiThreadedDLL + false + true + $(IntDir)zlibstat.pch + $(IntDir) + $(IntDir) + $(OutDir) + Level3 + true + + + 0x040c + + + /MACHINE:IA64 /NODEFAULTLIB %(AdditionalOptions) + $(OutDir)zlibstat.lib + true + + + + + X64 + + + OnlyExplicitInline + ..\..\..;%(AdditionalIncludeDirectories) + ZLIB_WINAPI;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;WIN64;%(PreprocessorDefinitions) + true + + + MultiThreadedDLL + false + true + $(IntDir)zlibstat.pch + $(IntDir) + $(IntDir) + $(OutDir) + Level3 + true + + + 0x040c + + + /MACHINE:AMD64 /NODEFAULTLIB %(AdditionalOptions) + $(OutDir)zlibstat.lib + true + + + + + Itanium + + + OnlyExplicitInline + ..\..\..;%(AdditionalIncludeDirectories) + ZLIB_WINAPI;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;WIN64;%(PreprocessorDefinitions) + true + + + MultiThreadedDLL + false + true + $(IntDir)zlibstat.pch + $(IntDir) + $(IntDir) + $(OutDir) + Level3 + true + + + 0x040c + + + /MACHINE:IA64 /NODEFAULTLIB %(AdditionalOptions) + $(OutDir)zlibstat.lib + true + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/thirdparty/zlib-1.3.1/contrib/vstudio/vc14/zlibvc.def b/thirdparty/zlib-1.3.1/contrib/vstudio/vc14/zlibvc.def new file mode 100644 index 0000000..3234a02 --- /dev/null +++ b/thirdparty/zlib-1.3.1/contrib/vstudio/vc14/zlibvc.def @@ -0,0 +1,158 @@ +LIBRARY +; zlib data compression and ZIP file I/O library + +VERSION 1.3.1 + +EXPORTS + adler32 @1 + compress @2 + crc32 @3 + deflate @4 + deflateCopy @5 + deflateEnd @6 + deflateInit2_ @7 + deflateInit_ @8 + deflateParams @9 + deflateReset @10 + deflateSetDictionary @11 + gzclose @12 + gzdopen @13 + gzerror @14 + gzflush @15 + gzopen @16 + gzread @17 + gzwrite @18 + inflate @19 + inflateEnd @20 + inflateInit2_ @21 + inflateInit_ @22 + inflateReset @23 + inflateSetDictionary @24 + inflateSync @25 + uncompress @26 + zlibVersion @27 + gzprintf @28 + gzputc @29 + gzgetc @30 + gzseek @31 + gzrewind @32 + gztell @33 + gzeof @34 + gzsetparams @35 + zError @36 + inflateSyncPoint @37 + get_crc_table @38 + compress2 @39 + gzputs @40 + gzgets @41 + inflateCopy @42 + inflateBackInit_ @43 + inflateBack @44 + inflateBackEnd @45 + compressBound @46 + deflateBound @47 + gzclearerr @48 + gzungetc @49 + zlibCompileFlags @50 + deflatePrime @51 + deflatePending @52 + + unzOpen @61 + unzClose @62 + unzGetGlobalInfo @63 + unzGetCurrentFileInfo @64 + unzGoToFirstFile @65 + unzGoToNextFile @66 + unzOpenCurrentFile @67 + unzReadCurrentFile @68 + unzOpenCurrentFile3 @69 + unztell @70 + unzeof @71 + unzCloseCurrentFile @72 + unzGetGlobalComment @73 + unzStringFileNameCompare @74 + unzLocateFile @75 + unzGetLocalExtrafield @76 + unzOpen2 @77 + unzOpenCurrentFile2 @78 + unzOpenCurrentFilePassword @79 + + zipOpen @80 + zipOpenNewFileInZip @81 + zipWriteInFileInZip @82 + zipCloseFileInZip @83 + zipClose @84 + zipOpenNewFileInZip2 @86 + zipCloseFileInZipRaw @87 + zipOpen2 @88 + zipOpenNewFileInZip3 @89 + + unzGetFilePos @100 + unzGoToFilePos @101 + + fill_win32_filefunc @110 + +; zlibwapi v1.2.4 added: + fill_win32_filefunc64 @111 + fill_win32_filefunc64A @112 + fill_win32_filefunc64W @113 + + unzOpen64 @120 + unzOpen2_64 @121 + unzGetGlobalInfo64 @122 + unzGetCurrentFileInfo64 @124 + unzGetCurrentFileZStreamPos64 @125 + unztell64 @126 + unzGetFilePos64 @127 + unzGoToFilePos64 @128 + + zipOpen64 @130 + zipOpen2_64 @131 + zipOpenNewFileInZip64 @132 + zipOpenNewFileInZip2_64 @133 + zipOpenNewFileInZip3_64 @134 + zipOpenNewFileInZip4_64 @135 + zipCloseFileInZipRaw64 @136 + +; zlib1 v1.2.4 added: + adler32_combine @140 + crc32_combine @142 + deflateSetHeader @144 + deflateTune @145 + gzbuffer @146 + gzclose_r @147 + gzclose_w @148 + gzdirect @149 + gzoffset @150 + inflateGetHeader @156 + inflateMark @157 + inflatePrime @158 + inflateReset2 @159 + inflateUndermine @160 + +; zlib1 v1.2.6 added: + gzgetc_ @161 + inflateResetKeep @163 + deflateResetKeep @164 + +; zlib1 v1.2.7 added: + gzopen_w @165 + +; zlib1 v1.2.8 added: + inflateGetDictionary @166 + gzvprintf @167 + +; zlib1 v1.2.9 added: + inflateCodesUsed @168 + inflateValidate @169 + uncompress2 @170 + gzfread @171 + gzfwrite @172 + deflateGetDictionary @173 + adler32_z @174 + crc32_z @175 + +; zlib1 v1.2.12 added: + crc32_combine_gen @176 + crc32_combine_gen64 @177 + crc32_combine_op @178 diff --git a/thirdparty/zlib-1.3.1/contrib/vstudio/vc14/zlibvc.sln b/thirdparty/zlib-1.3.1/contrib/vstudio/vc14/zlibvc.sln new file mode 100644 index 0000000..6f4a107 --- /dev/null +++ b/thirdparty/zlib-1.3.1/contrib/vstudio/vc14/zlibvc.sln @@ -0,0 +1,119 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio 14 +VisualStudioVersion = 14.0.25420.1 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "zlibvc", "zlibvc.vcxproj", "{8FD826F8-3739-44E6-8CC8-997122E53B8D}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "zlibstat", "zlibstat.vcxproj", "{745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "testzlib", "testzlib.vcxproj", "{AA6666AA-E09F-4135-9C0C-4FE50C3C654B}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "testzlibdll", "testzlibdll.vcxproj", "{C52F9E7B-498A-42BE-8DB4-85A15694366A}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "minizip", "minizip.vcxproj", "{48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "miniunz", "miniunz.vcxproj", "{C52F9E7B-498A-42BE-8DB4-85A15694382A}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Itanium = Debug|Itanium + Debug|Win32 = Debug|Win32 + Debug|x64 = Debug|x64 + Release|Itanium = Release|Itanium + Release|Win32 = Release|Win32 + Release|x64 = Release|x64 + ReleaseWithoutAsm|Itanium = ReleaseWithoutAsm|Itanium + ReleaseWithoutAsm|Win32 = ReleaseWithoutAsm|Win32 + ReleaseWithoutAsm|x64 = ReleaseWithoutAsm|x64 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {8FD826F8-3739-44E6-8CC8-997122E53B8D}.Debug|Itanium.ActiveCfg = Debug|Win32 + {8FD826F8-3739-44E6-8CC8-997122E53B8D}.Debug|Win32.ActiveCfg = Debug|Win32 + {8FD826F8-3739-44E6-8CC8-997122E53B8D}.Debug|Win32.Build.0 = Debug|Win32 + {8FD826F8-3739-44E6-8CC8-997122E53B8D}.Debug|x64.ActiveCfg = Debug|x64 + {8FD826F8-3739-44E6-8CC8-997122E53B8D}.Debug|x64.Build.0 = Debug|x64 + {8FD826F8-3739-44E6-8CC8-997122E53B8D}.Release|Itanium.ActiveCfg = Release|Win32 + {8FD826F8-3739-44E6-8CC8-997122E53B8D}.Release|Win32.ActiveCfg = Release|Win32 + {8FD826F8-3739-44E6-8CC8-997122E53B8D}.Release|Win32.Build.0 = Release|Win32 + {8FD826F8-3739-44E6-8CC8-997122E53B8D}.Release|x64.ActiveCfg = Release|x64 + {8FD826F8-3739-44E6-8CC8-997122E53B8D}.Release|x64.Build.0 = Release|x64 + {8FD826F8-3739-44E6-8CC8-997122E53B8D}.ReleaseWithoutAsm|Itanium.ActiveCfg = ReleaseWithoutAsm|Win32 + {8FD826F8-3739-44E6-8CC8-997122E53B8D}.ReleaseWithoutAsm|Win32.ActiveCfg = ReleaseWithoutAsm|Win32 + {8FD826F8-3739-44E6-8CC8-997122E53B8D}.ReleaseWithoutAsm|Win32.Build.0 = ReleaseWithoutAsm|Win32 + {8FD826F8-3739-44E6-8CC8-997122E53B8D}.ReleaseWithoutAsm|x64.ActiveCfg = ReleaseWithoutAsm|x64 + {8FD826F8-3739-44E6-8CC8-997122E53B8D}.ReleaseWithoutAsm|x64.Build.0 = ReleaseWithoutAsm|x64 + {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.Debug|Itanium.ActiveCfg = Debug|Win32 + {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.Debug|Win32.ActiveCfg = Debug|Win32 + {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.Debug|Win32.Build.0 = Debug|Win32 + {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.Debug|x64.ActiveCfg = Debug|x64 + {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.Debug|x64.Build.0 = Debug|x64 + {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.Release|Itanium.ActiveCfg = Release|Win32 + {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.Release|Win32.ActiveCfg = Release|Win32 + {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.Release|Win32.Build.0 = Release|Win32 + {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.Release|x64.ActiveCfg = Release|x64 + {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.Release|x64.Build.0 = Release|x64 + {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.ReleaseWithoutAsm|Itanium.ActiveCfg = ReleaseWithoutAsm|Win32 + {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.ReleaseWithoutAsm|Win32.ActiveCfg = ReleaseWithoutAsm|Win32 + {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.ReleaseWithoutAsm|Win32.Build.0 = ReleaseWithoutAsm|Win32 + {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.ReleaseWithoutAsm|x64.ActiveCfg = ReleaseWithoutAsm|x64 + {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.ReleaseWithoutAsm|x64.Build.0 = ReleaseWithoutAsm|x64 + {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.Debug|Itanium.ActiveCfg = Debug|Win32 + {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.Debug|Win32.ActiveCfg = Debug|Win32 + {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.Debug|Win32.Build.0 = Debug|Win32 + {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.Debug|x64.ActiveCfg = Debug|x64 + {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.Debug|x64.Build.0 = Debug|x64 + {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.Release|Itanium.ActiveCfg = Release|Win32 + {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.Release|Win32.ActiveCfg = Release|Win32 + {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.Release|Win32.Build.0 = Release|Win32 + {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.Release|x64.ActiveCfg = Release|x64 + {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.Release|x64.Build.0 = Release|x64 + {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.ReleaseWithoutAsm|Itanium.ActiveCfg = ReleaseWithoutAsm|Win32 + {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.ReleaseWithoutAsm|Win32.ActiveCfg = ReleaseWithoutAsm|Win32 + {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.ReleaseWithoutAsm|Win32.Build.0 = ReleaseWithoutAsm|Win32 + {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.ReleaseWithoutAsm|x64.ActiveCfg = ReleaseWithoutAsm|x64 + {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.ReleaseWithoutAsm|x64.Build.0 = ReleaseWithoutAsm|x64 + {C52F9E7B-498A-42BE-8DB4-85A15694366A}.Debug|Itanium.ActiveCfg = Debug|Win32 + {C52F9E7B-498A-42BE-8DB4-85A15694366A}.Debug|Win32.ActiveCfg = Debug|Win32 + {C52F9E7B-498A-42BE-8DB4-85A15694366A}.Debug|Win32.Build.0 = Debug|Win32 + {C52F9E7B-498A-42BE-8DB4-85A15694366A}.Debug|x64.ActiveCfg = Debug|x64 + {C52F9E7B-498A-42BE-8DB4-85A15694366A}.Debug|x64.Build.0 = Debug|x64 + {C52F9E7B-498A-42BE-8DB4-85A15694366A}.Release|Itanium.ActiveCfg = Release|Win32 + {C52F9E7B-498A-42BE-8DB4-85A15694366A}.Release|Win32.ActiveCfg = Release|Win32 + {C52F9E7B-498A-42BE-8DB4-85A15694366A}.Release|Win32.Build.0 = Release|Win32 + {C52F9E7B-498A-42BE-8DB4-85A15694366A}.Release|x64.ActiveCfg = Release|x64 + {C52F9E7B-498A-42BE-8DB4-85A15694366A}.Release|x64.Build.0 = Release|x64 + {C52F9E7B-498A-42BE-8DB4-85A15694366A}.ReleaseWithoutAsm|Itanium.ActiveCfg = Release|Win32 + {C52F9E7B-498A-42BE-8DB4-85A15694366A}.ReleaseWithoutAsm|Win32.ActiveCfg = Release|Win32 + {C52F9E7B-498A-42BE-8DB4-85A15694366A}.ReleaseWithoutAsm|x64.ActiveCfg = Release|x64 + {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.Debug|Itanium.ActiveCfg = Debug|Win32 + {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.Debug|Win32.ActiveCfg = Debug|Win32 + {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.Debug|Win32.Build.0 = Debug|Win32 + {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.Debug|x64.ActiveCfg = Debug|x64 + {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.Debug|x64.Build.0 = Debug|x64 + {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.Release|Itanium.ActiveCfg = Release|Win32 + {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.Release|Win32.ActiveCfg = Release|Win32 + {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.Release|Win32.Build.0 = Release|Win32 + {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.Release|x64.ActiveCfg = Release|x64 + {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.Release|x64.Build.0 = Release|x64 + {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.ReleaseWithoutAsm|Itanium.ActiveCfg = Release|Win32 + {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.ReleaseWithoutAsm|Win32.ActiveCfg = Release|Win32 + {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.ReleaseWithoutAsm|x64.ActiveCfg = Release|x64 + {C52F9E7B-498A-42BE-8DB4-85A15694382A}.Debug|Itanium.ActiveCfg = Debug|Win32 + {C52F9E7B-498A-42BE-8DB4-85A15694382A}.Debug|Win32.ActiveCfg = Debug|Win32 + {C52F9E7B-498A-42BE-8DB4-85A15694382A}.Debug|Win32.Build.0 = Debug|Win32 + {C52F9E7B-498A-42BE-8DB4-85A15694382A}.Debug|x64.ActiveCfg = Debug|x64 + {C52F9E7B-498A-42BE-8DB4-85A15694382A}.Debug|x64.Build.0 = Debug|x64 + {C52F9E7B-498A-42BE-8DB4-85A15694382A}.Release|Itanium.ActiveCfg = Release|Win32 + {C52F9E7B-498A-42BE-8DB4-85A15694382A}.Release|Win32.ActiveCfg = Release|Win32 + {C52F9E7B-498A-42BE-8DB4-85A15694382A}.Release|Win32.Build.0 = Release|Win32 + {C52F9E7B-498A-42BE-8DB4-85A15694382A}.Release|x64.ActiveCfg = Release|x64 + {C52F9E7B-498A-42BE-8DB4-85A15694382A}.Release|x64.Build.0 = Release|x64 + {C52F9E7B-498A-42BE-8DB4-85A15694382A}.ReleaseWithoutAsm|Itanium.ActiveCfg = Release|Win32 + {C52F9E7B-498A-42BE-8DB4-85A15694382A}.ReleaseWithoutAsm|Win32.ActiveCfg = Release|Win32 + {C52F9E7B-498A-42BE-8DB4-85A15694382A}.ReleaseWithoutAsm|x64.ActiveCfg = Release|x64 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/thirdparty/zlib-1.3.1/contrib/vstudio/vc14/zlibvc.vcxproj b/thirdparty/zlib-1.3.1/contrib/vstudio/vc14/zlibvc.vcxproj new file mode 100644 index 0000000..424ff55 --- /dev/null +++ b/thirdparty/zlib-1.3.1/contrib/vstudio/vc14/zlibvc.vcxproj @@ -0,0 +1,668 @@ + + + + + Debug + Itanium + + + Debug + Win32 + + + Debug + x64 + + + ReleaseWithoutAsm + Itanium + + + ReleaseWithoutAsm + Win32 + + + ReleaseWithoutAsm + x64 + + + Release + Itanium + + + Release + Win32 + + + Release + x64 + + + + {8FD826F8-3739-44E6-8CC8-997122E53B8D} + + + + DynamicLibrary + false + true + v140 + + + DynamicLibrary + false + true + v140 + + + DynamicLibrary + false + v140 + Unicode + + + DynamicLibrary + false + true + v140 + + + DynamicLibrary + false + true + v140 + + + DynamicLibrary + false + v140 + + + DynamicLibrary + false + true + v140 + + + DynamicLibrary + false + true + v140 + + + DynamicLibrary + false + v140 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <_ProjectFileVersion>10.0.30128.1 + x86\ZlibDll$(Configuration)\ + x86\ZlibDll$(Configuration)\Tmp\ + true + false + x86\ZlibDll$(Configuration)\ + x86\ZlibDll$(Configuration)\Tmp\ + false + false + x86\ZlibDll$(Configuration)\ + x86\ZlibDll$(Configuration)\Tmp\ + false + false + x64\ZlibDll$(Configuration)\ + x64\ZlibDll$(Configuration)\Tmp\ + true + false + ia64\ZlibDll$(Configuration)\ + ia64\ZlibDll$(Configuration)\Tmp\ + true + false + x64\ZlibDll$(Configuration)\ + x64\ZlibDll$(Configuration)\Tmp\ + false + false + ia64\ZlibDll$(Configuration)\ + ia64\ZlibDll$(Configuration)\Tmp\ + false + false + x64\ZlibDll$(Configuration)\ + x64\ZlibDll$(Configuration)\Tmp\ + false + false + ia64\ZlibDll$(Configuration)\ + ia64\ZlibDll$(Configuration)\Tmp\ + false + false + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + AllRules.ruleset + + + zlibwapi + zlibwapi + zlibwapi + zlibwapi + zlibwapi + zlibwapi + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + Win32 + $(OutDir)zlibvc.tlb + + + Disabled + ..\..\..;%(AdditionalIncludeDirectories) + WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;ZLIB_WINAPI;%(PreprocessorDefinitions) + + + MultiThreadedDebugDLL + false + $(IntDir)zlibvc.pch + $(IntDir) + $(IntDir) + $(OutDir) + + + Level3 + true + ProgramDatabase + + + _DEBUG;%(PreprocessorDefinitions) + 0x040c + + + /MACHINE:I386 %(AdditionalOptions) + %(AdditionalDependencies) + $(OutDir)zlibwapi.dll + true + .\zlibvc.def + true + $(OutDir)zlibwapi.pdb + true + $(OutDir)zlibwapi.map + Windows + false + + + $(OutDir)zlibwapi.lib + + + + + NDEBUG;%(PreprocessorDefinitions) + true + true + Win32 + $(OutDir)zlibvc.tlb + + + OnlyExplicitInline + ..\..\..;%(AdditionalIncludeDirectories) + WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;ZLIB_WINAPI;%(PreprocessorDefinitions) + true + + + MultiThreadedDLL + false + true + $(IntDir)zlibvc.pch + All + $(IntDir) + $(IntDir) + $(OutDir) + + + Level3 + true + + + NDEBUG;%(PreprocessorDefinitions) + 0x040c + + + /MACHINE:I386 %(AdditionalOptions) + $(OutDir)zlibwapi.dll + true + false + .\zlibvc.def + $(OutDir)zlibwapi.pdb + true + $(OutDir)zlibwapi.map + Windows + false + + + $(OutDir)zlibwapi.lib + + + + + NDEBUG;%(PreprocessorDefinitions) + true + true + Win32 + $(OutDir)zlibvc.tlb + + + OnlyExplicitInline + ..\..\..;%(AdditionalIncludeDirectories) + WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;ZLIB_WINAPI;%(PreprocessorDefinitions) + true + + + MultiThreaded + false + true + $(IntDir)zlibvc.pch + All + $(IntDir) + $(IntDir) + $(OutDir) + + + Level3 + true + + + NDEBUG;%(PreprocessorDefinitions) + 0x040c + + + /MACHINE:I386 %(AdditionalOptions) + %(AdditionalDependencies) + $(OutDir)zlibwapi.dll + true + false + .\zlibvc.def + $(OutDir)zlibwapi.pdb + true + $(OutDir)zlibwapi.map + Windows + false + + + $(OutDir)zlibwapi.lib + false + + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + X64 + $(OutDir)zlibvc.tlb + + + Disabled + ..\..\..;%(AdditionalIncludeDirectories) + WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;ZLIB_WINAPI;WIN64;%(PreprocessorDefinitions) + + + MultiThreadedDebugDLL + false + $(IntDir)zlibvc.pch + $(IntDir) + $(IntDir) + $(OutDir) + + + Level3 + true + ProgramDatabase + + + _DEBUG;%(PreprocessorDefinitions) + 0x040c + + + %(AdditionalDependencies) + $(OutDir)zlibwapi.dll + true + .\zlibvc.def + true + $(OutDir)zlibwapi.pdb + true + $(OutDir)zlibwapi.map + Windows + $(OutDir)zlibwapi.lib + MachineX64 + + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + Itanium + $(OutDir)zlibvc.tlb + + + Disabled + ..\..\..;%(AdditionalIncludeDirectories) + WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;ZLIB_WINAPI;WIN64;%(PreprocessorDefinitions) + + + MultiThreadedDebugDLL + false + $(IntDir)zlibvc.pch + $(IntDir) + $(IntDir) + $(OutDir) + + + Level3 + true + ProgramDatabase + + + _DEBUG;%(PreprocessorDefinitions) + 0x040c + + + $(OutDir)zlibwapi.dll + true + .\zlibvc.def + true + $(OutDir)zlibwapi.pdb + true + $(OutDir)zlibwapi.map + Windows + $(OutDir)zlibwapi.lib + MachineIA64 + + + + + NDEBUG;%(PreprocessorDefinitions) + true + true + X64 + $(OutDir)zlibvc.tlb + + + OnlyExplicitInline + ..\..\..;%(AdditionalIncludeDirectories) + WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;ZLIB_WINAPI;WIN64;%(PreprocessorDefinitions) + true + + + MultiThreadedDLL + false + true + $(IntDir)zlibvc.pch + All + $(IntDir) + $(IntDir) + $(OutDir) + + + Level3 + true + + + NDEBUG;%(PreprocessorDefinitions) + 0x040c + + + $(OutDir)zlibwapi.dll + true + false + .\zlibvc.def + $(OutDir)zlibwapi.pdb + true + $(OutDir)zlibwapi.map + Windows + $(OutDir)zlibwapi.lib + MachineX64 + + + + + NDEBUG;%(PreprocessorDefinitions) + true + true + Itanium + $(OutDir)zlibvc.tlb + + + OnlyExplicitInline + ..\..\..;%(AdditionalIncludeDirectories) + WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;ZLIB_WINAPI;WIN64;%(PreprocessorDefinitions) + true + + + MultiThreadedDLL + false + true + $(IntDir)zlibvc.pch + All + $(IntDir) + $(IntDir) + $(OutDir) + + + Level3 + true + + + NDEBUG;%(PreprocessorDefinitions) + 0x040c + + + $(OutDir)zlibwapi.dll + true + false + .\zlibvc.def + $(OutDir)zlibwapi.pdb + true + $(OutDir)zlibwapi.map + Windows + $(OutDir)zlibwapi.lib + MachineIA64 + + + + + NDEBUG;%(PreprocessorDefinitions) + true + true + X64 + $(OutDir)zlibvc.tlb + + + OnlyExplicitInline + ..\..\..;%(AdditionalIncludeDirectories) + _CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;ZLIB_WINAPI;WIN64;%(PreprocessorDefinitions) + true + + + MultiThreadedDLL + false + true + $(IntDir)zlibvc.pch + All + $(IntDir) + $(IntDir) + $(OutDir) + + + Level3 + true + + + NDEBUG;%(PreprocessorDefinitions) + 0x040c + + + %(AdditionalDependencies) + $(OutDir)zlibwapi.dll + true + false + .\zlibvc.def + $(OutDir)zlibwapi.pdb + true + $(OutDir)zlibwapi.map + Windows + $(OutDir)zlibwapi.lib + MachineX64 + + + + + NDEBUG;%(PreprocessorDefinitions) + true + true + Itanium + $(OutDir)zlibvc.tlb + + + OnlyExplicitInline + ..\..\..;%(AdditionalIncludeDirectories) + _CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;ZLIB_WINAPI;WIN64;%(PreprocessorDefinitions) + true + + + MultiThreadedDLL + false + true + $(IntDir)zlibvc.pch + All + $(IntDir) + $(IntDir) + $(OutDir) + + + Level3 + true + + + NDEBUG;%(PreprocessorDefinitions) + 0x040c + + + $(OutDir)zlibwapi.dll + true + false + .\zlibvc.def + $(OutDir)zlibwapi.pdb + true + $(OutDir)zlibwapi.map + Windows + $(OutDir)zlibwapi.lib + MachineIA64 + + + + + + + + + + + + + + + + + + + + + %(AdditionalIncludeDirectories) + ZLIB_INTERNAL;%(PreprocessorDefinitions) + %(AdditionalIncludeDirectories) + ZLIB_INTERNAL;%(PreprocessorDefinitions) + %(AdditionalIncludeDirectories) + ZLIB_INTERNAL;%(PreprocessorDefinitions) + + + %(AdditionalIncludeDirectories) + ZLIB_INTERNAL;%(PreprocessorDefinitions) + %(AdditionalIncludeDirectories) + ZLIB_INTERNAL;%(PreprocessorDefinitions) + %(AdditionalIncludeDirectories) + ZLIB_INTERNAL;%(PreprocessorDefinitions) + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/thirdparty/zlib-1.3.1/contrib/vstudio/vc17/miniunz.vcxproj b/thirdparty/zlib-1.3.1/contrib/vstudio/vc17/miniunz.vcxproj new file mode 100644 index 0000000..68ef165 --- /dev/null +++ b/thirdparty/zlib-1.3.1/contrib/vstudio/vc17/miniunz.vcxproj @@ -0,0 +1,409 @@ + + + + + Debug + ARM + + + Debug + ARM64 + + + Debug + Win32 + + + Debug + x64 + + + Release + ARM + + + Release + ARM64 + + + Release + Win32 + + + Release + x64 + + + + {C52F9E7B-498A-42BE-8DB4-85A15694382A} + Win32Proj + 10.0 + + + + Application + MultiByte + v143 + + + Application + Unicode + v143 + + + Application + MultiByte + v143 + + + Application + MultiByte + v143 + + + Application + MultiByte + v143 + + + Application + MultiByte + v143 + + + Application + MultiByte + v143 + + + Application + MultiByte + v143 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <_ProjectFileVersion>10.0.30128.1 + x86\MiniUnzip$(Configuration)\ + x86\MiniUnzip$(Configuration)\Tmp\ + true + false + x86\MiniUnzip$(Configuration)\ + x86\MiniUnzip$(Configuration)\Tmp\ + false + false + x64\MiniUnzip$(Configuration)\ + x64\MiniUnzip$(Configuration)\Tmp\ + true + true + true + false + false + false + x64\MiniUnzip$(Configuration)\ + x64\MiniUnzip$(Configuration)\Tmp\ + false + false + false + false + false + false + AllRules.ruleset + + + AllRules.ruleset + AllRules.ruleset + AllRules.ruleset + + + + + + + AllRules.ruleset + + + AllRules.ruleset + AllRules.ruleset + AllRules.ruleset + + + + + + + + + arm64\MiniUnzip$(Configuration)\ + arm64\MiniUnzip$(Configuration)\Tmp\ + + + arm64\MiniUnzip$(Configuration)\ + arm64\MiniUnzip$(Configuration)\Tmp\ + + + arm\MiniUnzip$(Configuration)\ + arm\MiniUnzip$(Configuration)\Tmp\ + + + arm\MiniUnzip$(Configuration)\ + arm\MiniUnzip$(Configuration)\Tmp\ + + + + Disabled + ..\..\..;..\..\minizip;%(AdditionalIncludeDirectories) + WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + Default + MultiThreadedDebugDLL + false + + + $(IntDir) + Level3 + ProgramDatabase + + + x86\ZlibDllDebug\zlibwapi.lib;%(AdditionalDependencies) + $(OutDir)miniunz.exe + true + $(OutDir)miniunz.pdb + Console + false + + + MachineX86 + + + + + MaxSpeed + OnlyExplicitInline + true + ..\..\..;..\..\minizip;%(AdditionalIncludeDirectories) + WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + Default + MultiThreaded + false + true + + + $(IntDir) + Level3 + ProgramDatabase + + + x86\ZlibDllRelease\zlibwapi.lib;%(AdditionalDependencies) + $(OutDir)miniunz.exe + true + Console + true + true + false + + + MachineX86 + + + + + X64 + + + Disabled + ..\..\..;..\..\minizip;%(AdditionalIncludeDirectories) + _CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;_DEBUG;_CONSOLE;WIN64;%(PreprocessorDefinitions) + true + Default + MultiThreadedDebugDLL + false + + + $(IntDir) + Level3 + ProgramDatabase + + + x64\ZlibDllDebug\zlibwapi.lib;%(AdditionalDependencies) + $(OutDir)miniunz.exe + true + $(OutDir)miniunz.pdb + Console + MachineX64 + + + + + + Disabled + ..\..\..;..\..\minizip;%(AdditionalIncludeDirectories) + _CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;_DEBUG;_CONSOLE;WIN64;%(PreprocessorDefinitions) + true + Default + MultiThreadedDebugDLL + false + + + $(IntDir) + Level3 + ProgramDatabase + + + x64\ZlibDllDebug\zlibwapi.lib;%(AdditionalDependencies) + $(OutDir)miniunz.exe + true + $(OutDir)miniunz.pdb + Console + + + + + + Disabled + ..\..\..;..\..\minizip;%(AdditionalIncludeDirectories) + _CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;_DEBUG;_CONSOLE;WIN64;%(PreprocessorDefinitions) + true + Default + MultiThreadedDebugDLL + false + + + $(IntDir) + Level3 + ProgramDatabase + + + x64\ZlibDllDebug\zlibwapi.lib;%(AdditionalDependencies) + $(OutDir)miniunz.exe + true + $(OutDir)miniunz.pdb + Console + + + + + X64 + + + MaxSpeed + OnlyExplicitInline + true + ..\..\..;..\..\minizip;%(AdditionalIncludeDirectories) + _CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;NDEBUG;_CONSOLE;WIN64;%(PreprocessorDefinitions) + true + Default + MultiThreadedDLL + false + true + + + $(IntDir) + Level3 + ProgramDatabase + + + x64\ZlibDllRelease\zlibwapi.lib;%(AdditionalDependencies) + $(OutDir)miniunz.exe + true + Console + true + true + MachineX64 + + + + + + MaxSpeed + OnlyExplicitInline + true + ..\..\..;..\..\minizip;%(AdditionalIncludeDirectories) + _CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;NDEBUG;_CONSOLE;WIN64;%(PreprocessorDefinitions) + true + Default + MultiThreadedDLL + false + true + + + $(IntDir) + Level3 + ProgramDatabase + + + x64\ZlibDllRelease\zlibwapi.lib;%(AdditionalDependencies) + $(OutDir)miniunz.exe + true + Console + true + true + + + + + + MaxSpeed + OnlyExplicitInline + true + ..\..\..;..\..\minizip;%(AdditionalIncludeDirectories) + _CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;NDEBUG;_CONSOLE;WIN64;%(PreprocessorDefinitions) + true + Default + MultiThreadedDLL + false + true + + + $(IntDir) + Level3 + ProgramDatabase + + + x64\ZlibDllRelease\zlibwapi.lib;%(AdditionalDependencies) + $(OutDir)miniunz.exe + true + Console + true + true + + + + + + + + {8fd826f8-3739-44e6-8cc8-997122e53b8d} + + + + + + \ No newline at end of file diff --git a/thirdparty/zlib-1.3.1/contrib/vstudio/vc17/minizip.vcxproj b/thirdparty/zlib-1.3.1/contrib/vstudio/vc17/minizip.vcxproj new file mode 100644 index 0000000..dd3c52e --- /dev/null +++ b/thirdparty/zlib-1.3.1/contrib/vstudio/vc17/minizip.vcxproj @@ -0,0 +1,405 @@ + + + + + Debug + ARM + + + Debug + ARM64 + + + Debug + Win32 + + + Debug + x64 + + + Release + ARM + + + Release + ARM64 + + + Release + Win32 + + + Release + x64 + + + + {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B} + Win32Proj + 10.0 + + + + Application + MultiByte + v143 + + + Application + Unicode + v143 + + + Application + MultiByte + v143 + + + Application + MultiByte + v143 + + + Application + MultiByte + v143 + + + Application + MultiByte + v143 + + + Application + MultiByte + v143 + + + Application + MultiByte + v143 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <_ProjectFileVersion>10.0.30128.1 + x86\MiniZip$(Configuration)\ + x86\MiniZip$(Configuration)\Tmp\ + true + false + x86\MiniZip$(Configuration)\ + x86\MiniZip$(Configuration)\Tmp\ + false + x64\$(Configuration)\ + x64\$(Configuration)\ + true + true + true + false + false + false + x64\$(Configuration)\ + x64\$(Configuration)\ + false + false + false + AllRules.ruleset + + + AllRules.ruleset + AllRules.ruleset + AllRules.ruleset + + + + + + + AllRules.ruleset + + + AllRules.ruleset + AllRules.ruleset + AllRules.ruleset + + + + + + + + + arm64\MiniZip$(Configuration)\ + arm64\MiniZip$(Configuration)\Tmp\ + + + arm64\MiniZip$(Configuration)\ + arm64\MiniZip$(Configuration)\Tmp\ + + + arm\MiniZip$(Configuration)\ + arm\MiniZip$(Configuration)\Tmp\ + + + arm\MiniZip$(Configuration)\ + arm\MiniZip$(Configuration)\Tmp\ + + + + Disabled + ..\..\..;..\..\minizip;%(AdditionalIncludeDirectories) + WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + Default + MultiThreadedDebugDLL + false + + + $(IntDir) + Level3 + ProgramDatabase + + + x86\ZlibDllDebug\zlibwapi.lib;%(AdditionalDependencies) + $(OutDir)minizip.exe + true + $(OutDir)minizip.pdb + Console + false + + + MachineX86 + + + + + MaxSpeed + OnlyExplicitInline + true + ..\..\..;..\..\minizip;%(AdditionalIncludeDirectories) + WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + Default + MultiThreaded + false + true + + + $(IntDir) + Level3 + ProgramDatabase + + + x86\ZlibDllRelease\zlibwapi.lib;%(AdditionalDependencies) + $(OutDir)minizip.exe + true + Console + true + true + false + + + MachineX86 + + + + + X64 + + + Disabled + ..\..\..;..\..\minizip;%(AdditionalIncludeDirectories) + _CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;_DEBUG;_CONSOLE;WIN64;%(PreprocessorDefinitions) + true + Default + MultiThreadedDebugDLL + false + + + $(IntDir) + Level3 + ProgramDatabase + + + x64\ZlibDllDebug\zlibwapi.lib;%(AdditionalDependencies) + $(OutDir)minizip.exe + true + $(OutDir)minizip.pdb + Console + MachineX64 + + + + + + Disabled + ..\..\..;..\..\minizip;%(AdditionalIncludeDirectories) + _CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;_DEBUG;_CONSOLE;WIN64;%(PreprocessorDefinitions) + true + Default + MultiThreadedDebugDLL + false + + + $(IntDir) + Level3 + ProgramDatabase + + + x64\ZlibDllDebug\zlibwapi.lib;%(AdditionalDependencies) + $(OutDir)minizip.exe + true + $(OutDir)minizip.pdb + Console + + + + + + Disabled + ..\..\..;..\..\minizip;%(AdditionalIncludeDirectories) + _CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;_DEBUG;_CONSOLE;WIN64;%(PreprocessorDefinitions) + true + Default + MultiThreadedDebugDLL + false + + + $(IntDir) + Level3 + ProgramDatabase + + + x64\ZlibDllDebug\zlibwapi.lib;%(AdditionalDependencies) + $(OutDir)minizip.exe + true + $(OutDir)minizip.pdb + Console + + + + + X64 + + + MaxSpeed + OnlyExplicitInline + true + ..\..\..;..\..\minizip;%(AdditionalIncludeDirectories) + _CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;NDEBUG;_CONSOLE;WIN64;%(PreprocessorDefinitions) + true + Default + MultiThreadedDLL + false + true + + + $(IntDir) + Level3 + ProgramDatabase + + + x64\ZlibDllRelease\zlibwapi.lib;%(AdditionalDependencies) + $(OutDir)minizip.exe + true + Console + true + true + MachineX64 + + + + + + MaxSpeed + OnlyExplicitInline + true + ..\..\..;..\..\minizip;%(AdditionalIncludeDirectories) + _CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;NDEBUG;_CONSOLE;WIN64;%(PreprocessorDefinitions) + true + Default + MultiThreadedDLL + false + true + + + $(IntDir) + Level3 + ProgramDatabase + + + x64\ZlibDllRelease\zlibwapi.lib;%(AdditionalDependencies) + $(OutDir)minizip.exe + true + Console + true + true + + + + + + MaxSpeed + OnlyExplicitInline + true + ..\..\..;..\..\minizip;%(AdditionalIncludeDirectories) + _CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;NDEBUG;_CONSOLE;WIN64;%(PreprocessorDefinitions) + true + Default + MultiThreadedDLL + false + true + + + $(IntDir) + Level3 + ProgramDatabase + + + x64\ZlibDllRelease\zlibwapi.lib;%(AdditionalDependencies) + $(OutDir)minizip.exe + true + Console + true + true + + + + + + + + {8fd826f8-3739-44e6-8cc8-997122e53b8d} + + + + + + \ No newline at end of file diff --git a/thirdparty/zlib-1.3.1/contrib/vstudio/vc17/testzlib.vcxproj b/thirdparty/zlib-1.3.1/contrib/vstudio/vc17/testzlib.vcxproj new file mode 100644 index 0000000..4cc99b3 --- /dev/null +++ b/thirdparty/zlib-1.3.1/contrib/vstudio/vc17/testzlib.vcxproj @@ -0,0 +1,473 @@ + + + + + Debug + ARM + + + Debug + ARM64 + + + Debug + Win32 + + + Debug + x64 + + + ReleaseWithoutAsm + ARM + + + ReleaseWithoutAsm + ARM64 + + + ReleaseWithoutAsm + Win32 + + + ReleaseWithoutAsm + x64 + + + Release + ARM + + + Release + ARM64 + + + Release + Win32 + + + Release + x64 + + + + {AA6666AA-E09F-4135-9C0C-4FE50C3C654B} + testzlib + Win32Proj + 10.0 + + + + Application + MultiByte + true + v143 + + + Application + MultiByte + true + v143 + + + Application + Unicode + v143 + + + Application + true + v143 + + + Application + true + v143 + + + Application + true + v143 + + + Application + true + v143 + + + Application + true + v143 + + + Application + true + v143 + + + Application + v143 + + + Application + v143 + + + Application + v143 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <_ProjectFileVersion>10.0.30128.1 + x86\TestZlib$(Configuration)\ + x86\TestZlib$(Configuration)\Tmp\ + true + false + x86\TestZlib$(Configuration)\ + x86\TestZlib$(Configuration)\Tmp\ + false + false + x86\TestZlib$(Configuration)\ + x86\TestZlib$(Configuration)\Tmp\ + false + false + x64\TestZlib$(Configuration)\ + x64\TestZlib$(Configuration)\Tmp\ + false + false + false + x64\TestZlib$(Configuration)\ + x64\TestZlib$(Configuration)\Tmp\ + false + false + false + x64\TestZlib$(Configuration)\ + x64\TestZlib$(Configuration)\Tmp\ + false + false + false + AllRules.ruleset + + + AllRules.ruleset + AllRules.ruleset + AllRules.ruleset + + + + + + + AllRules.ruleset + + + AllRules.ruleset + AllRules.ruleset + AllRules.ruleset + + + + + + + AllRules.ruleset + + + AllRules.ruleset + AllRules.ruleset + AllRules.ruleset + + + + + + + + + arm64\TestZlib$(Configuration)\ + arm64\TestZlib$(Configuration)\Tmp\ + + + arm64\TestZlib$(Configuration)\ + arm64\TestZlib$(Configuration)\Tmp\ + + + arm64\TestZlib$(Configuration)\ + arm64\TestZlib$(Configuration)\Tmp\ + + + arm\TestZlib$(Configuration)\ + arm\TestZlib$(Configuration)\Tmp\ + + + arm\TestZlib$(Configuration)\ + arm\TestZlib$(Configuration)\Tmp\ + + + arm\TestZlib$(Configuration)\ + arm\TestZlib$(Configuration)\Tmp\ + + + + Disabled + ..\..\..;%(AdditionalIncludeDirectories) + WIN32;ZLIB_WINAPI;_DEBUG;_CONSOLE;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;%(PreprocessorDefinitions) + true + Default + MultiThreadedDebugDLL + false + + + AssemblyAndSourceCode + $(IntDir) + Level3 + ProgramDatabase + + + %(AdditionalDependencies) + $(OutDir)testzlib.exe + true + $(OutDir)testzlib.pdb + Console + false + + + MachineX86 + + + + + MaxSpeed + OnlyExplicitInline + true + ..\..\..;%(AdditionalIncludeDirectories) + WIN32;ZLIB_WINAPI;NDEBUG;_CONSOLE;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;%(PreprocessorDefinitions) + true + Default + MultiThreaded + false + true + + + $(IntDir) + Level3 + ProgramDatabase + + + $(OutDir)testzlib.exe + true + Console + true + true + false + + + MachineX86 + + + + + MaxSpeed + OnlyExplicitInline + true + ..\..\..;%(AdditionalIncludeDirectories) + WIN32;ZLIB_WINAPI;NDEBUG;_CONSOLE;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;%(PreprocessorDefinitions) + true + Default + MultiThreaded + false + true + + + $(IntDir) + Level3 + ProgramDatabase + + + %(AdditionalDependencies) + $(OutDir)testzlib.exe + true + Console + true + true + false + + + MachineX86 + false + + + + + ..\..\..;%(AdditionalIncludeDirectories) + WIN32;ZLIB_WINAPI;_DEBUG;_CONSOLE;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;%(PreprocessorDefinitions) + Default + MultiThreadedDebugDLL + false + $(IntDir) + + + %(AdditionalDependencies) + + + + + ..\..\..;%(AdditionalIncludeDirectories) + WIN32;ZLIB_WINAPI;_DEBUG;_CONSOLE;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;%(PreprocessorDefinitions) + Default + MultiThreadedDebugDLL + false + $(IntDir) + + + %(AdditionalDependencies) + + + + + ..\..\..;%(AdditionalIncludeDirectories) + WIN32;ZLIB_WINAPI;_DEBUG;_CONSOLE;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;%(PreprocessorDefinitions) + Default + MultiThreadedDebugDLL + false + $(IntDir) + + + %(AdditionalDependencies) + + + + + ..\..\..;%(AdditionalIncludeDirectories) + WIN32;ZLIB_WINAPI;NDEBUG;_CONSOLE;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;%(PreprocessorDefinitions) + Default + MultiThreadedDLL + false + $(IntDir) + + + %(AdditionalDependencies) + + + + + ..\..\..;%(AdditionalIncludeDirectories) + WIN32;ZLIB_WINAPI;NDEBUG;_CONSOLE;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;%(PreprocessorDefinitions) + Default + MultiThreadedDLL + false + $(IntDir) + + + %(AdditionalDependencies) + + + + + ..\..\..;%(AdditionalIncludeDirectories) + WIN32;ZLIB_WINAPI;NDEBUG;_CONSOLE;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;%(PreprocessorDefinitions) + Default + MultiThreadedDLL + false + $(IntDir) + + + %(AdditionalDependencies) + + + + + ..\..\..;%(AdditionalIncludeDirectories) + WIN32;ZLIB_WINAPI;NDEBUG;_CONSOLE;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;%(PreprocessorDefinitions) + Default + MultiThreadedDLL + false + $(IntDir) + + + %(AdditionalDependencies) + + + + + ..\..\..;%(AdditionalIncludeDirectories) + WIN32;ZLIB_WINAPI;NDEBUG;_CONSOLE;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;%(PreprocessorDefinitions) + Default + MultiThreadedDLL + false + $(IntDir) + + + %(AdditionalDependencies) + + + + + ..\..\..;%(AdditionalIncludeDirectories) + WIN32;ZLIB_WINAPI;NDEBUG;_CONSOLE;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;%(PreprocessorDefinitions) + Default + MultiThreadedDLL + false + $(IntDir) + + + %(AdditionalDependencies) + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/thirdparty/zlib-1.3.1/contrib/vstudio/vc17/testzlibdll.vcxproj b/thirdparty/zlib-1.3.1/contrib/vstudio/vc17/testzlibdll.vcxproj new file mode 100644 index 0000000..73bba55 --- /dev/null +++ b/thirdparty/zlib-1.3.1/contrib/vstudio/vc17/testzlibdll.vcxproj @@ -0,0 +1,409 @@ + + + + + Debug + ARM + + + Debug + ARM64 + + + Debug + Win32 + + + Debug + x64 + + + Release + ARM + + + Release + ARM64 + + + Release + Win32 + + + Release + x64 + + + + {C52F9E7B-498A-42BE-8DB4-85A15694366A} + Win32Proj + 10.0 + + + + Application + MultiByte + v143 + + + Application + Unicode + v143 + + + Application + MultiByte + v143 + + + Application + MultiByte + v143 + + + Application + MultiByte + v143 + + + Application + MultiByte + v143 + + + Application + MultiByte + v143 + + + Application + MultiByte + v143 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <_ProjectFileVersion>10.0.30128.1 + x86\TestZlibDll$(Configuration)\ + x86\TestZlibDll$(Configuration)\Tmp\ + true + false + x86\TestZlibDll$(Configuration)\ + x86\TestZlibDll$(Configuration)\Tmp\ + false + false + x64\TestZlibDll$(Configuration)\ + x64\TestZlibDll$(Configuration)\Tmp\ + true + true + true + false + false + false + x64\TestZlibDll$(Configuration)\ + x64\TestZlibDll$(Configuration)\Tmp\ + false + false + false + false + false + false + AllRules.ruleset + + + AllRules.ruleset + AllRules.ruleset + AllRules.ruleset + + + + + + + AllRules.ruleset + + + AllRules.ruleset + AllRules.ruleset + AllRules.ruleset + + + + + + + + + arm64\TestZlibDll$(Configuration)\ + arm64\TestZlibDll$(Configuration)\Tmp\ + + + arm64\TestZlibDll$(Configuration)\ + arm64\TestZlibDll$(Configuration)\Tmp\ + + + arm\TestZlibDll$(Configuration)\ + arm\TestZlibDll$(Configuration)\Tmp\ + + + arm\TestZlibDll$(Configuration)\ + arm\TestZlibDll$(Configuration)\Tmp\ + + + + Disabled + ..\..\..;..\..\minizip;%(AdditionalIncludeDirectories) + WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;_DEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + Default + MultiThreadedDebugDLL + false + + + $(IntDir) + Level3 + ProgramDatabase + + + x86\ZlibDllDebug\zlibwapi.lib;%(AdditionalDependencies) + $(OutDir)testzlibdll.exe + true + $(OutDir)testzlib.pdb + Console + false + + + MachineX86 + + + + + MaxSpeed + OnlyExplicitInline + true + ..\..\..;..\..\minizip;%(AdditionalIncludeDirectories) + WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;NDEBUG;_CONSOLE;%(PreprocessorDefinitions) + true + Default + MultiThreaded + false + true + + + $(IntDir) + Level3 + ProgramDatabase + + + x86\ZlibDllRelease\zlibwapi.lib;%(AdditionalDependencies) + $(OutDir)testzlibdll.exe + true + Console + true + true + false + + + MachineX86 + + + + + X64 + + + Disabled + ..\..\..;..\..\minizip;%(AdditionalIncludeDirectories) + _CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;_DEBUG;_CONSOLE;WIN64;%(PreprocessorDefinitions) + true + Default + MultiThreadedDebugDLL + false + + + $(IntDir) + Level3 + ProgramDatabase + + + x64\ZlibDllDebug\zlibwapi.lib;%(AdditionalDependencies) + $(OutDir)testzlibdll.exe + true + $(OutDir)testzlib.pdb + Console + MachineX64 + + + + + + Disabled + ..\..\..;..\..\minizip;%(AdditionalIncludeDirectories) + _CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;_DEBUG;_CONSOLE;WIN64;%(PreprocessorDefinitions) + true + Default + MultiThreadedDebugDLL + false + + + $(IntDir) + Level3 + ProgramDatabase + + + x64\ZlibDllDebug\zlibwapi.lib;%(AdditionalDependencies) + $(OutDir)testzlibdll.exe + true + $(OutDir)testzlib.pdb + Console + + + + + + Disabled + ..\..\..;..\..\minizip;%(AdditionalIncludeDirectories) + _CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;_DEBUG;_CONSOLE;WIN64;%(PreprocessorDefinitions) + true + Default + MultiThreadedDebugDLL + false + + + $(IntDir) + Level3 + ProgramDatabase + + + x64\ZlibDllDebug\zlibwapi.lib;%(AdditionalDependencies) + $(OutDir)testzlibdll.exe + true + $(OutDir)testzlib.pdb + Console + + + + + X64 + + + MaxSpeed + OnlyExplicitInline + true + ..\..\..;..\..\minizip;%(AdditionalIncludeDirectories) + _CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;NDEBUG;_CONSOLE;WIN64;%(PreprocessorDefinitions) + true + Default + MultiThreadedDLL + false + true + + + $(IntDir) + Level3 + ProgramDatabase + + + x64\ZlibDllRelease\zlibwapi.lib;%(AdditionalDependencies) + $(OutDir)testzlibdll.exe + true + Console + true + true + MachineX64 + + + + + + MaxSpeed + OnlyExplicitInline + true + ..\..\..;..\..\minizip;%(AdditionalIncludeDirectories) + _CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;NDEBUG;_CONSOLE;WIN64;%(PreprocessorDefinitions) + true + Default + MultiThreadedDLL + false + true + + + $(IntDir) + Level3 + ProgramDatabase + + + x64\ZlibDllRelease\zlibwapi.lib;%(AdditionalDependencies) + $(OutDir)testzlibdll.exe + true + Console + true + true + + + + + + MaxSpeed + OnlyExplicitInline + true + ..\..\..;..\..\minizip;%(AdditionalIncludeDirectories) + _CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;ZLIB_WINAPI;NDEBUG;_CONSOLE;WIN64;%(PreprocessorDefinitions) + true + Default + MultiThreadedDLL + false + true + + + $(IntDir) + Level3 + ProgramDatabase + + + x64\ZlibDllRelease\zlibwapi.lib;%(AdditionalDependencies) + $(OutDir)testzlibdll.exe + true + Console + true + true + + + + + + + + {8fd826f8-3739-44e6-8cc8-997122e53b8d} + + + + + + \ No newline at end of file diff --git a/thirdparty/zlib-1.3.1/contrib/vstudio/vc17/zlib.rc b/thirdparty/zlib-1.3.1/contrib/vstudio/vc17/zlib.rc new file mode 100644 index 0000000..a55f341 --- /dev/null +++ b/thirdparty/zlib-1.3.1/contrib/vstudio/vc17/zlib.rc @@ -0,0 +1,32 @@ +#include + +#define IDR_VERSION1 1 +IDR_VERSION1 VERSIONINFO MOVEABLE IMPURE LOADONCALL DISCARDABLE + FILEVERSION 1, 3, 1, 0 + PRODUCTVERSION 1, 3, 1, 0 + FILEFLAGSMASK VS_FFI_FILEFLAGSMASK + FILEFLAGS 0 + FILEOS VOS_DOS_WINDOWS32 + FILETYPE VFT_DLL + FILESUBTYPE 0 // not used +BEGIN + BLOCK "StringFileInfo" + BEGIN + BLOCK "040904E4" + //language ID = U.S. English, char set = Windows, Multilingual + + BEGIN + VALUE "FileDescription", "zlib data compression and ZIP file I/O library\0" + VALUE "FileVersion", "1.3.1\0" + VALUE "InternalName", "zlib\0" + VALUE "OriginalFilename", "zlibwapi.dll\0" + VALUE "ProductName", "ZLib.DLL\0" + VALUE "Comments","DLL support by Alessandro Iacopetti & Gilles Vollant\0" + VALUE "LegalCopyright", "(C) 1995-2024 Jean-loup Gailly & Mark Adler\0" + END + END + BLOCK "VarFileInfo" + BEGIN + VALUE "Translation", 0x0409, 1252 + END +END diff --git a/thirdparty/zlib-1.3.1/contrib/vstudio/vc17/zlibstat.vcxproj b/thirdparty/zlib-1.3.1/contrib/vstudio/vc17/zlibstat.vcxproj new file mode 100644 index 0000000..b946ac2 --- /dev/null +++ b/thirdparty/zlib-1.3.1/contrib/vstudio/vc17/zlibstat.vcxproj @@ -0,0 +1,602 @@ + + + + + Debug + ARM + + + Debug + ARM64 + + + Debug + Win32 + + + Debug + x64 + + + ReleaseWithoutAsm + ARM + + + ReleaseWithoutAsm + ARM64 + + + ReleaseWithoutAsm + Win32 + + + ReleaseWithoutAsm + x64 + + + Release + ARM + + + Release + ARM64 + + + Release + Win32 + + + Release + x64 + + + + {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8} + 10.0 + + + + StaticLibrary + false + v143 + + + StaticLibrary + false + v143 + + + StaticLibrary + false + v143 + Unicode + + + StaticLibrary + false + v143 + + + StaticLibrary + false + v143 + + + StaticLibrary + false + v143 + + + StaticLibrary + false + v143 + + + StaticLibrary + false + v143 + + + StaticLibrary + false + v143 + + + StaticLibrary + false + v143 + + + StaticLibrary + false + v143 + + + StaticLibrary + false + v143 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <_ProjectFileVersion>10.0.30128.1 + x86\ZlibStat$(Configuration)\ + x86\ZlibStat$(Configuration)\Tmp\ + x86\ZlibStat$(Configuration)\ + x86\ZlibStat$(Configuration)\Tmp\ + x86\ZlibStat$(Configuration)\ + x86\ZlibStat$(Configuration)\Tmp\ + x64\ZlibStat$(Configuration)\ + x64\ZlibStat$(Configuration)\Tmp\ + x64\ZlibStat$(Configuration)\ + x64\ZlibStat$(Configuration)\Tmp\ + x64\ZlibStat$(Configuration)\ + x64\ZlibStat$(Configuration)\Tmp\ + AllRules.ruleset + + + AllRules.ruleset + AllRules.ruleset + AllRules.ruleset + + + + + + + AllRules.ruleset + + + AllRules.ruleset + AllRules.ruleset + AllRules.ruleset + + + + + + + AllRules.ruleset + + + AllRules.ruleset + AllRules.ruleset + AllRules.ruleset + + + + + + + + + arm64\ZlibStat$(Configuration)\ + arm64\ZlibStat$(Configuration)\Tmp\ + + + arm64\ZlibStat$(Configuration)\ + arm64\ZlibStat$(Configuration)\Tmp\ + + + arm64\ZlibStat$(Configuration)\ + arm64\ZlibStat$(Configuration)\Tmp\ + + + arm\ZlibStat$(Configuration)\ + arm\ZlibStat$(Configuration)\Tmp\ + + + arm\ZlibStat$(Configuration)\ + arm\ZlibStat$(Configuration)\Tmp\ + + + arm\ZlibStat$(Configuration)\ + arm\ZlibStat$(Configuration)\Tmp\ + + + + Disabled + ..\..\..;%(AdditionalIncludeDirectories) + WIN32;ZLIB_WINAPI;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;%(PreprocessorDefinitions) + + + MultiThreadedDebugDLL + false + $(IntDir)zlibstat.pch + $(IntDir) + $(IntDir) + $(OutDir) + Level3 + true + OldStyle + + + 0x040c + + + /MACHINE:X86 /NODEFAULTLIB %(AdditionalOptions) + $(OutDir)zlibstat.lib + true + + + + + OnlyExplicitInline + ..\..\..;%(AdditionalIncludeDirectories) + WIN32;ZLIB_WINAPI;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;%(PreprocessorDefinitions) + true + + + MultiThreaded + false + true + $(IntDir)zlibstat.pch + $(IntDir) + $(IntDir) + $(OutDir) + Level3 + true + + + 0x040c + + + /MACHINE:X86 /NODEFAULTLIB %(AdditionalOptions) + %(AdditionalDependencies) + $(OutDir)zlibstat.lib + true + + + + + OnlyExplicitInline + ..\..\..;%(AdditionalIncludeDirectories) + WIN32;ZLIB_WINAPI;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;%(PreprocessorDefinitions) + true + + + MultiThreaded + false + true + $(IntDir)zlibstat.pch + $(IntDir) + $(IntDir) + $(OutDir) + Level3 + true + + + 0x040c + + + /MACHINE:X86 /NODEFAULTLIB %(AdditionalOptions) + $(OutDir)zlibstat.lib + true + + + + + X64 + + + Disabled + ..\..\..;%(AdditionalIncludeDirectories) + ZLIB_WINAPI;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;WIN64;%(PreprocessorDefinitions) + + + MultiThreadedDebugDLL + false + $(IntDir)zlibstat.pch + $(IntDir) + $(IntDir) + $(OutDir) + Level3 + true + OldStyle + + + 0x040c + + + /MACHINE:AMD64 /NODEFAULTLIB %(AdditionalOptions) + $(OutDir)zlibstat.lib + true + + + + + + Disabled + ..\..\..;%(AdditionalIncludeDirectories) + ZLIB_WINAPI;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;WIN64;%(PreprocessorDefinitions) + + + MultiThreadedDebugDLL + false + $(IntDir)zlibstat.pch + $(IntDir) + $(IntDir) + $(OutDir) + Level3 + true + OldStyle + + + 0x040c + + + /MACHINE:ARM64 /NODEFAULTLIB %(AdditionalOptions) + $(OutDir)zlibstat.lib + true + + + + + + Disabled + ..\..\..;%(AdditionalIncludeDirectories) + ZLIB_WINAPI;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;WIN64;%(PreprocessorDefinitions) + + + MultiThreadedDebugDLL + false + $(IntDir)zlibstat.pch + $(IntDir) + $(IntDir) + $(OutDir) + Level3 + true + OldStyle + + + 0x040c + + + /MACHINE:ARM /NODEFAULTLIB %(AdditionalOptions) + $(OutDir)zlibstat.lib + true + + + + + X64 + + + OnlyExplicitInline + ..\..\..;%(AdditionalIncludeDirectories) + ZLIB_WINAPI;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;WIN64;%(PreprocessorDefinitions) + true + + + MultiThreadedDLL + false + true + $(IntDir)zlibstat.pch + $(IntDir) + $(IntDir) + $(OutDir) + Level3 + true + + + 0x040c + + + /MACHINE:AMD64 /NODEFAULTLIB %(AdditionalOptions) + %(AdditionalDependencies) + $(OutDir)zlibstat.lib + true + + + + + + OnlyExplicitInline + ..\..\..;%(AdditionalIncludeDirectories) + ZLIB_WINAPI;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;WIN64;%(PreprocessorDefinitions) + true + + + MultiThreadedDLL + false + true + $(IntDir)zlibstat.pch + $(IntDir) + $(IntDir) + $(OutDir) + Level3 + true + + + 0x040c + + + /MACHINE:ARM64 /NODEFAULTLIB %(AdditionalOptions) + %(AdditionalDependencies) + $(OutDir)zlibstat.lib + true + + + + + + OnlyExplicitInline + ..\..\..;%(AdditionalIncludeDirectories) + ZLIB_WINAPI;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;WIN64;%(PreprocessorDefinitions) + true + + + MultiThreadedDLL + false + true + $(IntDir)zlibstat.pch + $(IntDir) + $(IntDir) + $(OutDir) + Level3 + true + + + 0x040c + + + /MACHINE:ARM /NODEFAULTLIB %(AdditionalOptions) + %(AdditionalDependencies) + $(OutDir)zlibstat.lib + true + + + + + X64 + + + OnlyExplicitInline + ..\..\..;%(AdditionalIncludeDirectories) + ZLIB_WINAPI;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;WIN64;%(PreprocessorDefinitions) + true + + + MultiThreadedDLL + false + true + $(IntDir)zlibstat.pch + $(IntDir) + $(IntDir) + $(OutDir) + Level3 + true + + + 0x040c + + + /MACHINE:AMD64 /NODEFAULTLIB %(AdditionalOptions) + $(OutDir)zlibstat.lib + true + + + + + + OnlyExplicitInline + ..\..\..;%(AdditionalIncludeDirectories) + ZLIB_WINAPI;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;WIN64;%(PreprocessorDefinitions) + true + + + MultiThreadedDLL + false + true + $(IntDir)zlibstat.pch + $(IntDir) + $(IntDir) + $(OutDir) + Level3 + true + + + 0x040c + + + /MACHINE:ARM64 /NODEFAULTLIB %(AdditionalOptions) + $(OutDir)zlibstat.lib + true + + + + + + OnlyExplicitInline + ..\..\..;%(AdditionalIncludeDirectories) + ZLIB_WINAPI;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;WIN64;%(PreprocessorDefinitions) + true + + + MultiThreadedDLL + false + true + $(IntDir)zlibstat.pch + $(IntDir) + $(IntDir) + $(OutDir) + Level3 + true + + + 0x040c + + + /MACHINE:ARM /NODEFAULTLIB %(AdditionalOptions) + $(OutDir)zlibstat.lib + true + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/thirdparty/zlib-1.3.1/contrib/vstudio/vc17/zlibvc.def b/thirdparty/zlib-1.3.1/contrib/vstudio/vc17/zlibvc.def new file mode 100644 index 0000000..53947cc --- /dev/null +++ b/thirdparty/zlib-1.3.1/contrib/vstudio/vc17/zlibvc.def @@ -0,0 +1,158 @@ +LIBRARY +; zlib data compression and ZIP file I/O library + +VERSION 1.3.1 + +EXPORTS + adler32 @1 + compress @2 + crc32 @3 + deflate @4 + deflateCopy @5 + deflateEnd @6 + deflateInit2_ @7 + deflateInit_ @8 + deflateParams @9 + deflateReset @10 + deflateSetDictionary @11 + gzclose @12 + gzdopen @13 + gzerror @14 + gzflush @15 + gzopen @16 + gzread @17 + gzwrite @18 + inflate @19 + inflateEnd @20 + inflateInit2_ @21 + inflateInit_ @22 + inflateReset @23 + inflateSetDictionary @24 + inflateSync @25 + uncompress @26 + zlibVersion @27 + gzprintf @28 + gzputc @29 + gzgetc @30 + gzseek @31 + gzrewind @32 + gztell @33 + gzeof @34 + gzsetparams @35 + zError @36 + inflateSyncPoint @37 + get_crc_table @38 + compress2 @39 + gzputs @40 + gzgets @41 + inflateCopy @42 + inflateBackInit_ @43 + inflateBack @44 + inflateBackEnd @45 + compressBound @46 + deflateBound @47 + gzclearerr @48 + gzungetc @49 + zlibCompileFlags @50 + deflatePrime @51 + deflatePending @52 + + unzOpen @61 + unzClose @62 + unzGetGlobalInfo @63 + unzGetCurrentFileInfo @64 + unzGoToFirstFile @65 + unzGoToNextFile @66 + unzOpenCurrentFile @67 + unzReadCurrentFile @68 + unzOpenCurrentFile3 @69 + unztell @70 + unzeof @71 + unzCloseCurrentFile @72 + unzGetGlobalComment @73 + unzStringFileNameCompare @74 + unzLocateFile @75 + unzGetLocalExtrafield @76 + unzOpen2 @77 + unzOpenCurrentFile2 @78 + unzOpenCurrentFilePassword @79 + + zipOpen @80 + zipOpenNewFileInZip @81 + zipWriteInFileInZip @82 + zipCloseFileInZip @83 + zipClose @84 + zipOpenNewFileInZip2 @86 + zipCloseFileInZipRaw @87 + zipOpen2 @88 + zipOpenNewFileInZip3 @89 + + unzGetFilePos @100 + unzGoToFilePos @101 + + fill_win32_filefunc @110 + +; zlibwapi v1.2.4 added: + fill_win32_filefunc64 @111 + fill_win32_filefunc64A @112 + fill_win32_filefunc64W @113 + + unzOpen64 @120 + unzOpen2_64 @121 + unzGetGlobalInfo64 @122 + unzGetCurrentFileInfo64 @124 + unzGetCurrentFileZStreamPos64 @125 + unztell64 @126 + unzGetFilePos64 @127 + unzGoToFilePos64 @128 + + zipOpen64 @130 + zipOpen2_64 @131 + zipOpenNewFileInZip64 @132 + zipOpenNewFileInZip2_64 @133 + zipOpenNewFileInZip3_64 @134 + zipOpenNewFileInZip4_64 @135 + zipCloseFileInZipRaw64 @136 + +; zlib1 v1.2.4 added: + adler32_combine @140 + crc32_combine @142 + deflateSetHeader @144 + deflateTune @145 + gzbuffer @146 + gzclose_r @147 + gzclose_w @148 + gzdirect @149 + gzoffset @150 + inflateGetHeader @156 + inflateMark @157 + inflatePrime @158 + inflateReset2 @159 + inflateUndermine @160 + +; zlib1 v1.2.6 added: + gzgetc_ @161 + inflateResetKeep @163 + deflateResetKeep @164 + +; zlib1 v1.2.7 added: + gzopen_w @165 + +; zlib1 v1.2.8 added: + inflateGetDictionary @166 + gzvprintf @167 + +; zlib1 v1.2.9 added: + inflateCodesUsed @168 + inflateValidate @169 + uncompress2 @170 + gzfread @171 + gzfwrite @172 + deflateGetDictionary @173 + adler32_z @174 + crc32_z @175 + +; zlib1 v1.2.12 added: + crc32_combine_gen @176 + crc32_combine_gen64 @177 + crc32_combine_op @178 diff --git a/thirdparty/zlib-1.3.1/contrib/vstudio/vc17/zlibvc.sln b/thirdparty/zlib-1.3.1/contrib/vstudio/vc17/zlibvc.sln new file mode 100644 index 0000000..67896b7 --- /dev/null +++ b/thirdparty/zlib-1.3.1/contrib/vstudio/vc17/zlibvc.sln @@ -0,0 +1,179 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 17 +VisualStudioVersion = 17.4.33015.44 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "zlibvc", "zlibvc.vcxproj", "{8FD826F8-3739-44E6-8CC8-997122E53B8D}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "zlibstat", "zlibstat.vcxproj", "{745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "testzlib", "testzlib.vcxproj", "{AA6666AA-E09F-4135-9C0C-4FE50C3C654B}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "testzlibdll", "testzlibdll.vcxproj", "{C52F9E7B-498A-42BE-8DB4-85A15694366A}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "minizip", "minizip.vcxproj", "{48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "miniunz", "miniunz.vcxproj", "{C52F9E7B-498A-42BE-8DB4-85A15694382A}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|ARM = Debug|ARM + Debug|ARM64 = Debug|ARM64 + Debug|Win32 = Debug|Win32 + Debug|x64 = Debug|x64 + Release|ARM = Release|ARM + Release|ARM64 = Release|ARM64 + Release|Win32 = Release|Win32 + Release|x64 = Release|x64 + ReleaseWithoutAsm|ARM = ReleaseWithoutAsm|ARM + ReleaseWithoutAsm|ARM64 = ReleaseWithoutAsm|ARM64 + ReleaseWithoutAsm|Win32 = ReleaseWithoutAsm|Win32 + ReleaseWithoutAsm|x64 = ReleaseWithoutAsm|x64 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {8FD826F8-3739-44E6-8CC8-997122E53B8D}.Debug|ARM.ActiveCfg = Debug|ARM + {8FD826F8-3739-44E6-8CC8-997122E53B8D}.Debug|ARM.Build.0 = Debug|ARM + {8FD826F8-3739-44E6-8CC8-997122E53B8D}.Debug|ARM64.ActiveCfg = Debug|ARM64 + {8FD826F8-3739-44E6-8CC8-997122E53B8D}.Debug|ARM64.Build.0 = Debug|ARM64 + {8FD826F8-3739-44E6-8CC8-997122E53B8D}.Debug|Win32.ActiveCfg = Debug|Win32 + {8FD826F8-3739-44E6-8CC8-997122E53B8D}.Debug|Win32.Build.0 = Debug|Win32 + {8FD826F8-3739-44E6-8CC8-997122E53B8D}.Debug|x64.ActiveCfg = Debug|x64 + {8FD826F8-3739-44E6-8CC8-997122E53B8D}.Debug|x64.Build.0 = Debug|x64 + {8FD826F8-3739-44E6-8CC8-997122E53B8D}.Release|ARM.ActiveCfg = Release|ARM + {8FD826F8-3739-44E6-8CC8-997122E53B8D}.Release|ARM.Build.0 = Release|ARM + {8FD826F8-3739-44E6-8CC8-997122E53B8D}.Release|ARM64.ActiveCfg = Release|ARM64 + {8FD826F8-3739-44E6-8CC8-997122E53B8D}.Release|ARM64.Build.0 = Release|ARM64 + {8FD826F8-3739-44E6-8CC8-997122E53B8D}.Release|Win32.ActiveCfg = Release|Win32 + {8FD826F8-3739-44E6-8CC8-997122E53B8D}.Release|Win32.Build.0 = Release|Win32 + {8FD826F8-3739-44E6-8CC8-997122E53B8D}.Release|x64.ActiveCfg = Release|x64 + {8FD826F8-3739-44E6-8CC8-997122E53B8D}.Release|x64.Build.0 = Release|x64 + {8FD826F8-3739-44E6-8CC8-997122E53B8D}.ReleaseWithoutAsm|ARM.ActiveCfg = ReleaseWithoutAsm|ARM + {8FD826F8-3739-44E6-8CC8-997122E53B8D}.ReleaseWithoutAsm|ARM.Build.0 = ReleaseWithoutAsm|ARM + {8FD826F8-3739-44E6-8CC8-997122E53B8D}.ReleaseWithoutAsm|ARM64.ActiveCfg = ReleaseWithoutAsm|ARM64 + {8FD826F8-3739-44E6-8CC8-997122E53B8D}.ReleaseWithoutAsm|ARM64.Build.0 = ReleaseWithoutAsm|ARM64 + {8FD826F8-3739-44E6-8CC8-997122E53B8D}.ReleaseWithoutAsm|Win32.ActiveCfg = ReleaseWithoutAsm|Win32 + {8FD826F8-3739-44E6-8CC8-997122E53B8D}.ReleaseWithoutAsm|Win32.Build.0 = ReleaseWithoutAsm|Win32 + {8FD826F8-3739-44E6-8CC8-997122E53B8D}.ReleaseWithoutAsm|x64.ActiveCfg = ReleaseWithoutAsm|x64 + {8FD826F8-3739-44E6-8CC8-997122E53B8D}.ReleaseWithoutAsm|x64.Build.0 = ReleaseWithoutAsm|x64 + {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.Debug|ARM.ActiveCfg = Debug|ARM + {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.Debug|ARM.Build.0 = Debug|ARM + {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.Debug|ARM64.ActiveCfg = Debug|ARM64 + {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.Debug|ARM64.Build.0 = Debug|ARM64 + {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.Debug|Win32.ActiveCfg = Debug|Win32 + {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.Debug|Win32.Build.0 = Debug|Win32 + {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.Debug|x64.ActiveCfg = Debug|x64 + {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.Debug|x64.Build.0 = Debug|x64 + {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.Release|ARM.ActiveCfg = Release|ARM + {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.Release|ARM.Build.0 = Release|ARM + {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.Release|ARM64.ActiveCfg = Release|ARM64 + {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.Release|ARM64.Build.0 = Release|ARM64 + {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.Release|Win32.ActiveCfg = Release|Win32 + {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.Release|Win32.Build.0 = Release|Win32 + {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.Release|x64.ActiveCfg = Release|x64 + {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.Release|x64.Build.0 = Release|x64 + {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.ReleaseWithoutAsm|ARM.ActiveCfg = ReleaseWithoutAsm|ARM + {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.ReleaseWithoutAsm|ARM.Build.0 = ReleaseWithoutAsm|ARM + {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.ReleaseWithoutAsm|ARM64.ActiveCfg = ReleaseWithoutAsm|ARM64 + {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.ReleaseWithoutAsm|ARM64.Build.0 = ReleaseWithoutAsm|ARM64 + {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.ReleaseWithoutAsm|Win32.ActiveCfg = ReleaseWithoutAsm|Win32 + {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.ReleaseWithoutAsm|Win32.Build.0 = ReleaseWithoutAsm|Win32 + {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.ReleaseWithoutAsm|x64.ActiveCfg = ReleaseWithoutAsm|x64 + {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.ReleaseWithoutAsm|x64.Build.0 = ReleaseWithoutAsm|x64 + {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.Debug|ARM.ActiveCfg = Debug|ARM + {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.Debug|ARM.Build.0 = Debug|ARM + {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.Debug|ARM64.ActiveCfg = Debug|ARM64 + {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.Debug|ARM64.Build.0 = Debug|ARM64 + {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.Debug|Win32.ActiveCfg = Debug|Win32 + {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.Debug|Win32.Build.0 = Debug|Win32 + {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.Debug|x64.ActiveCfg = Debug|x64 + {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.Debug|x64.Build.0 = Debug|x64 + {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.Release|ARM.ActiveCfg = Release|ARM + {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.Release|ARM.Build.0 = Release|ARM + {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.Release|ARM64.ActiveCfg = Release|ARM64 + {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.Release|ARM64.Build.0 = Release|ARM64 + {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.Release|Win32.ActiveCfg = Release|Win32 + {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.Release|Win32.Build.0 = Release|Win32 + {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.Release|x64.ActiveCfg = Release|x64 + {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.Release|x64.Build.0 = Release|x64 + {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.ReleaseWithoutAsm|ARM.ActiveCfg = ReleaseWithoutAsm|ARM + {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.ReleaseWithoutAsm|ARM.Build.0 = ReleaseWithoutAsm|ARM + {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.ReleaseWithoutAsm|ARM64.ActiveCfg = ReleaseWithoutAsm|ARM64 + {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.ReleaseWithoutAsm|ARM64.Build.0 = ReleaseWithoutAsm|ARM64 + {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.ReleaseWithoutAsm|Win32.ActiveCfg = ReleaseWithoutAsm|Win32 + {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.ReleaseWithoutAsm|Win32.Build.0 = ReleaseWithoutAsm|Win32 + {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.ReleaseWithoutAsm|x64.ActiveCfg = ReleaseWithoutAsm|x64 + {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.ReleaseWithoutAsm|x64.Build.0 = ReleaseWithoutAsm|x64 + {C52F9E7B-498A-42BE-8DB4-85A15694366A}.Debug|ARM.ActiveCfg = Debug|ARM + {C52F9E7B-498A-42BE-8DB4-85A15694366A}.Debug|ARM.Build.0 = Debug|ARM + {C52F9E7B-498A-42BE-8DB4-85A15694366A}.Debug|ARM64.ActiveCfg = Debug|ARM64 + {C52F9E7B-498A-42BE-8DB4-85A15694366A}.Debug|ARM64.Build.0 = Debug|ARM64 + {C52F9E7B-498A-42BE-8DB4-85A15694366A}.Debug|Win32.ActiveCfg = Debug|Win32 + {C52F9E7B-498A-42BE-8DB4-85A15694366A}.Debug|Win32.Build.0 = Debug|Win32 + {C52F9E7B-498A-42BE-8DB4-85A15694366A}.Debug|x64.ActiveCfg = Debug|x64 + {C52F9E7B-498A-42BE-8DB4-85A15694366A}.Debug|x64.Build.0 = Debug|x64 + {C52F9E7B-498A-42BE-8DB4-85A15694366A}.Release|ARM.ActiveCfg = Release|ARM + {C52F9E7B-498A-42BE-8DB4-85A15694366A}.Release|ARM.Build.0 = Release|ARM + {C52F9E7B-498A-42BE-8DB4-85A15694366A}.Release|ARM64.ActiveCfg = Release|ARM64 + {C52F9E7B-498A-42BE-8DB4-85A15694366A}.Release|ARM64.Build.0 = Release|ARM64 + {C52F9E7B-498A-42BE-8DB4-85A15694366A}.Release|Win32.ActiveCfg = Release|Win32 + {C52F9E7B-498A-42BE-8DB4-85A15694366A}.Release|Win32.Build.0 = Release|Win32 + {C52F9E7B-498A-42BE-8DB4-85A15694366A}.Release|x64.ActiveCfg = Release|x64 + {C52F9E7B-498A-42BE-8DB4-85A15694366A}.Release|x64.Build.0 = Release|x64 + {C52F9E7B-498A-42BE-8DB4-85A15694366A}.ReleaseWithoutAsm|ARM.ActiveCfg = Release|ARM + {C52F9E7B-498A-42BE-8DB4-85A15694366A}.ReleaseWithoutAsm|ARM.Build.0 = Release|ARM + {C52F9E7B-498A-42BE-8DB4-85A15694366A}.ReleaseWithoutAsm|ARM64.ActiveCfg = Release|ARM64 + {C52F9E7B-498A-42BE-8DB4-85A15694366A}.ReleaseWithoutAsm|ARM64.Build.0 = Release|ARM64 + {C52F9E7B-498A-42BE-8DB4-85A15694366A}.ReleaseWithoutAsm|Win32.ActiveCfg = Release|Win32 + {C52F9E7B-498A-42BE-8DB4-85A15694366A}.ReleaseWithoutAsm|x64.ActiveCfg = Release|x64 + {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.Debug|ARM.ActiveCfg = Debug|ARM + {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.Debug|ARM.Build.0 = Debug|ARM + {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.Debug|ARM64.ActiveCfg = Debug|ARM64 + {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.Debug|ARM64.Build.0 = Debug|ARM64 + {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.Debug|Win32.ActiveCfg = Debug|Win32 + {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.Debug|Win32.Build.0 = Debug|Win32 + {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.Debug|x64.ActiveCfg = Debug|x64 + {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.Debug|x64.Build.0 = Debug|x64 + {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.Release|ARM.ActiveCfg = Release|ARM + {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.Release|ARM.Build.0 = Release|ARM + {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.Release|ARM64.ActiveCfg = Release|ARM64 + {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.Release|ARM64.Build.0 = Release|ARM64 + {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.Release|Win32.ActiveCfg = Release|Win32 + {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.Release|Win32.Build.0 = Release|Win32 + {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.Release|x64.ActiveCfg = Release|x64 + {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.Release|x64.Build.0 = Release|x64 + {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.ReleaseWithoutAsm|ARM.ActiveCfg = Release|ARM + {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.ReleaseWithoutAsm|ARM.Build.0 = Release|ARM + {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.ReleaseWithoutAsm|ARM64.ActiveCfg = Release|ARM64 + {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.ReleaseWithoutAsm|ARM64.Build.0 = Release|ARM64 + {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.ReleaseWithoutAsm|Win32.ActiveCfg = Release|Win32 + {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.ReleaseWithoutAsm|x64.ActiveCfg = Release|x64 + {C52F9E7B-498A-42BE-8DB4-85A15694382A}.Debug|ARM.ActiveCfg = Debug|ARM + {C52F9E7B-498A-42BE-8DB4-85A15694382A}.Debug|ARM.Build.0 = Debug|ARM + {C52F9E7B-498A-42BE-8DB4-85A15694382A}.Debug|ARM64.ActiveCfg = Debug|ARM64 + {C52F9E7B-498A-42BE-8DB4-85A15694382A}.Debug|ARM64.Build.0 = Debug|ARM64 + {C52F9E7B-498A-42BE-8DB4-85A15694382A}.Debug|Win32.ActiveCfg = Debug|Win32 + {C52F9E7B-498A-42BE-8DB4-85A15694382A}.Debug|Win32.Build.0 = Debug|Win32 + {C52F9E7B-498A-42BE-8DB4-85A15694382A}.Debug|x64.ActiveCfg = Debug|x64 + {C52F9E7B-498A-42BE-8DB4-85A15694382A}.Debug|x64.Build.0 = Debug|x64 + {C52F9E7B-498A-42BE-8DB4-85A15694382A}.Release|ARM.ActiveCfg = Release|ARM + {C52F9E7B-498A-42BE-8DB4-85A15694382A}.Release|ARM.Build.0 = Release|ARM + {C52F9E7B-498A-42BE-8DB4-85A15694382A}.Release|ARM64.ActiveCfg = Release|ARM64 + {C52F9E7B-498A-42BE-8DB4-85A15694382A}.Release|ARM64.Build.0 = Release|ARM64 + {C52F9E7B-498A-42BE-8DB4-85A15694382A}.Release|Win32.ActiveCfg = Release|Win32 + {C52F9E7B-498A-42BE-8DB4-85A15694382A}.Release|Win32.Build.0 = Release|Win32 + {C52F9E7B-498A-42BE-8DB4-85A15694382A}.Release|x64.ActiveCfg = Release|x64 + {C52F9E7B-498A-42BE-8DB4-85A15694382A}.Release|x64.Build.0 = Release|x64 + {C52F9E7B-498A-42BE-8DB4-85A15694382A}.ReleaseWithoutAsm|ARM.ActiveCfg = Release|ARM + {C52F9E7B-498A-42BE-8DB4-85A15694382A}.ReleaseWithoutAsm|ARM.Build.0 = Release|ARM + {C52F9E7B-498A-42BE-8DB4-85A15694382A}.ReleaseWithoutAsm|ARM64.ActiveCfg = Release|ARM64 + {C52F9E7B-498A-42BE-8DB4-85A15694382A}.ReleaseWithoutAsm|ARM64.Build.0 = Release|ARM64 + {C52F9E7B-498A-42BE-8DB4-85A15694382A}.ReleaseWithoutAsm|Win32.ActiveCfg = Release|Win32 + {C52F9E7B-498A-42BE-8DB4-85A15694382A}.ReleaseWithoutAsm|x64.ActiveCfg = Release|x64 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {EAA58685-56D9-43F2-8703-FD2CB020745E} + EndGlobalSection +EndGlobal diff --git a/thirdparty/zlib-1.3.1/contrib/vstudio/vc17/zlibvc.vcxproj b/thirdparty/zlib-1.3.1/contrib/vstudio/vc17/zlibvc.vcxproj new file mode 100644 index 0000000..10a7a90 --- /dev/null +++ b/thirdparty/zlib-1.3.1/contrib/vstudio/vc17/zlibvc.vcxproj @@ -0,0 +1,875 @@ + + + + + Debug + ARM + + + Debug + ARM64 + + + Debug + Win32 + + + Debug + x64 + + + ReleaseWithoutAsm + ARM + + + ReleaseWithoutAsm + ARM64 + + + ReleaseWithoutAsm + Win32 + + + ReleaseWithoutAsm + x64 + + + Release + ARM + + + Release + ARM64 + + + Release + Win32 + + + Release + x64 + + + + {8FD826F8-3739-44E6-8CC8-997122E53B8D} + 10.0 + + + + DynamicLibrary + false + true + v143 + + + DynamicLibrary + false + true + v143 + + + DynamicLibrary + false + v143 + Unicode + + + DynamicLibrary + false + true + v143 + + + DynamicLibrary + false + true + v143 + + + DynamicLibrary + false + true + v143 + + + DynamicLibrary + false + true + v143 + + + DynamicLibrary + false + true + v143 + + + DynamicLibrary + false + true + v143 + + + DynamicLibrary + false + v143 + + + DynamicLibrary + false + v143 + + + DynamicLibrary + false + v143 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <_ProjectFileVersion>10.0.30128.1 + x86\ZlibDll$(Configuration)\ + x86\ZlibDll$(Configuration)\Tmp\ + true + false + x86\ZlibDll$(Configuration)\ + x86\ZlibDll$(Configuration)\Tmp\ + false + false + x86\ZlibDll$(Configuration)\ + x86\ZlibDll$(Configuration)\Tmp\ + false + false + x64\ZlibDll$(Configuration)\ + x64\ZlibDll$(Configuration)\Tmp\ + true + true + true + false + false + false + x64\ZlibDll$(Configuration)\ + x64\ZlibDll$(Configuration)\Tmp\ + false + false + false + false + false + false + x64\ZlibDll$(Configuration)\ + x64\ZlibDll$(Configuration)\Tmp\ + false + false + false + false + false + false + AllRules.ruleset + + + AllRules.ruleset + AllRules.ruleset + AllRules.ruleset + + + + + + + AllRules.ruleset + + + AllRules.ruleset + AllRules.ruleset + AllRules.ruleset + + + + + + + AllRules.ruleset + + + AllRules.ruleset + AllRules.ruleset + AllRules.ruleset + + + + + + + zlibwapi + zlibwapi + zlibwapi + zlibwapi + zlibwapi + zlibwapi + zlibwapi + zlibwapi + zlibwapi + zlibwapi + zlibwapi + zlibwapi + + + arm64\ZlibDll$(Configuration)\ + arm64\ZlibDll$(Configuration)\Tmp\ + + + arm\ZlibDll$(Configuration)\ + arm\ZlibDll$(Configuration)\Tmp\ + + + arm64\ZlibDll$(Configuration)\ + arm64\ZlibDll$(Configuration)\Tmp\ + + + arm64\ZlibDll$(Configuration)\ + arm64\ZlibDll$(Configuration)\Tmp\ + + + arm\ZlibDll$(Configuration)\ + arm\ZlibDll$(Configuration)\Tmp\ + + + arm\ZlibDll$(Configuration)\ + arm\ZlibDll$(Configuration)\Tmp\ + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + Win32 + $(OutDir)zlibvc.tlb + + + Disabled + ..\..\..;%(AdditionalIncludeDirectories) + WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;ZLIB_WINAPI;%(PreprocessorDefinitions) + + + MultiThreadedDebugDLL + false + $(IntDir)zlibvc.pch + $(IntDir) + $(IntDir) + $(OutDir) + + + Level3 + true + ProgramDatabase + + + _DEBUG;%(PreprocessorDefinitions) + 0x040c + + + /MACHINE:I386 %(AdditionalOptions) + %(AdditionalDependencies) + $(OutDir)zlibwapi.dll + true + .\zlibvc.def + true + $(OutDir)zlibwapi.pdb + true + $(OutDir)zlibwapi.map + Windows + false + + + $(OutDir)zlibwapi.lib + + + + + NDEBUG;%(PreprocessorDefinitions) + true + true + Win32 + $(OutDir)zlibvc.tlb + + + OnlyExplicitInline + ..\..\..;%(AdditionalIncludeDirectories) + WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;ZLIB_WINAPI;%(PreprocessorDefinitions) + true + + + MultiThreadedDLL + false + true + $(IntDir)zlibvc.pch + All + $(IntDir) + $(IntDir) + $(OutDir) + + + Level3 + true + + + NDEBUG;%(PreprocessorDefinitions) + 0x040c + + + /MACHINE:I386 %(AdditionalOptions) + $(OutDir)zlibwapi.dll + true + false + .\zlibvc.def + $(OutDir)zlibwapi.pdb + true + $(OutDir)zlibwapi.map + Windows + false + + + $(OutDir)zlibwapi.lib + + + + + NDEBUG;%(PreprocessorDefinitions) + true + true + Win32 + $(OutDir)zlibvc.tlb + + + OnlyExplicitInline + ..\..\..;%(AdditionalIncludeDirectories) + WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;ZLIB_WINAPI;%(PreprocessorDefinitions) + true + + + MultiThreaded + false + true + $(IntDir)zlibvc.pch + All + $(IntDir) + $(IntDir) + $(OutDir) + + + Level3 + true + + + NDEBUG;%(PreprocessorDefinitions) + 0x040c + + + /MACHINE:I386 %(AdditionalOptions) + %(AdditionalDependencies) + $(OutDir)zlibwapi.dll + true + false + .\zlibvc.def + $(OutDir)zlibwapi.pdb + true + $(OutDir)zlibwapi.map + Windows + false + + + $(OutDir)zlibwapi.lib + false + + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + X64 + $(OutDir)zlibvc.tlb + + + Disabled + ..\..\..;%(AdditionalIncludeDirectories) + WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;ZLIB_WINAPI;WIN64;%(PreprocessorDefinitions) + + + MultiThreadedDebugDLL + false + $(IntDir)zlibvc.pch + $(IntDir) + $(IntDir) + $(OutDir) + + + Level3 + true + ProgramDatabase + + + _DEBUG;%(PreprocessorDefinitions) + 0x040c + + + %(AdditionalDependencies) + $(OutDir)zlibwapi.dll + true + .\zlibvc.def + true + $(OutDir)zlibwapi.pdb + true + $(OutDir)zlibwapi.map + Windows + $(OutDir)zlibwapi.lib + MachineX64 + + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + $(OutDir)zlibvc.tlb + + + Disabled + ..\..\..;%(AdditionalIncludeDirectories) + WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;ZLIB_WINAPI;WIN64;%(PreprocessorDefinitions) + + + MultiThreadedDebugDLL + false + $(IntDir)zlibvc.pch + $(IntDir) + $(IntDir) + $(OutDir) + + + Level3 + true + ProgramDatabase + + + _DEBUG;%(PreprocessorDefinitions) + 0x040c + + + %(AdditionalDependencies) + $(OutDir)zlibwapi.dll + true + .\zlibvc.def + true + $(OutDir)zlibwapi.pdb + true + $(OutDir)zlibwapi.map + Windows + $(OutDir)zlibwapi.lib + + + + + _DEBUG;%(PreprocessorDefinitions) + true + true + $(OutDir)zlibvc.tlb + + + Disabled + ..\..\..;%(AdditionalIncludeDirectories) + WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;ZLIB_WINAPI;WIN64;%(PreprocessorDefinitions) + + + MultiThreadedDebugDLL + false + $(IntDir)zlibvc.pch + $(IntDir) + $(IntDir) + $(OutDir) + + + Level3 + true + ProgramDatabase + + + _DEBUG;%(PreprocessorDefinitions) + 0x040c + + + %(AdditionalDependencies) + $(OutDir)zlibwapi.dll + true + .\zlibvc.def + true + $(OutDir)zlibwapi.pdb + true + $(OutDir)zlibwapi.map + Windows + $(OutDir)zlibwapi.lib + + + + + NDEBUG;%(PreprocessorDefinitions) + true + true + X64 + $(OutDir)zlibvc.tlb + + + OnlyExplicitInline + ..\..\..;%(AdditionalIncludeDirectories) + WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;ZLIB_WINAPI;WIN64;%(PreprocessorDefinitions) + true + + + MultiThreadedDLL + false + true + $(IntDir)zlibvc.pch + All + $(IntDir) + $(IntDir) + $(OutDir) + + + Level3 + true + + + NDEBUG;%(PreprocessorDefinitions) + 0x040c + + + $(OutDir)zlibwapi.dll + true + false + .\zlibvc.def + $(OutDir)zlibwapi.pdb + true + $(OutDir)zlibwapi.map + Windows + $(OutDir)zlibwapi.lib + MachineX64 + + + + + NDEBUG;%(PreprocessorDefinitions) + true + true + $(OutDir)zlibvc.tlb + + + OnlyExplicitInline + ..\..\..;%(AdditionalIncludeDirectories) + WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;ZLIB_WINAPI;WIN64;%(PreprocessorDefinitions) + true + + + MultiThreadedDLL + false + true + $(IntDir)zlibvc.pch + All + $(IntDir) + $(IntDir) + $(OutDir) + + + Level3 + true + + + NDEBUG;%(PreprocessorDefinitions) + 0x040c + + + $(OutDir)zlibwapi.dll + true + false + .\zlibvc.def + $(OutDir)zlibwapi.pdb + true + $(OutDir)zlibwapi.map + Windows + $(OutDir)zlibwapi.lib + + + + + NDEBUG;%(PreprocessorDefinitions) + true + true + $(OutDir)zlibvc.tlb + + + OnlyExplicitInline + ..\..\..;%(AdditionalIncludeDirectories) + WIN32;_CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;ZLIB_WINAPI;WIN64;%(PreprocessorDefinitions) + true + + + MultiThreadedDLL + false + true + $(IntDir)zlibvc.pch + All + $(IntDir) + $(IntDir) + $(OutDir) + + + Level3 + true + + + NDEBUG;%(PreprocessorDefinitions) + 0x040c + + + $(OutDir)zlibwapi.dll + true + false + .\zlibvc.def + $(OutDir)zlibwapi.pdb + true + $(OutDir)zlibwapi.map + Windows + $(OutDir)zlibwapi.lib + + + + + NDEBUG;%(PreprocessorDefinitions) + true + true + X64 + $(OutDir)zlibvc.tlb + + + OnlyExplicitInline + ..\..\..;%(AdditionalIncludeDirectories) + _CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;ZLIB_WINAPI;WIN64;%(PreprocessorDefinitions) + true + + + MultiThreadedDLL + false + true + $(IntDir)zlibvc.pch + All + $(IntDir) + $(IntDir) + $(OutDir) + + + Level3 + true + + + NDEBUG;%(PreprocessorDefinitions) + 0x040c + + + %(AdditionalDependencies) + $(OutDir)zlibwapi.dll + true + false + .\zlibvc.def + $(OutDir)zlibwapi.pdb + true + $(OutDir)zlibwapi.map + Windows + $(OutDir)zlibwapi.lib + MachineX64 + + + + + NDEBUG;%(PreprocessorDefinitions) + true + true + $(OutDir)zlibvc.tlb + + + OnlyExplicitInline + ..\..\..;%(AdditionalIncludeDirectories) + _CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;ZLIB_WINAPI;WIN64;%(PreprocessorDefinitions) + true + + + MultiThreadedDLL + false + true + $(IntDir)zlibvc.pch + All + $(IntDir) + $(IntDir) + $(OutDir) + + + Level3 + true + + + NDEBUG;%(PreprocessorDefinitions) + 0x040c + + + %(AdditionalDependencies) + $(OutDir)zlibwapi.dll + true + false + .\zlibvc.def + $(OutDir)zlibwapi.pdb + true + $(OutDir)zlibwapi.map + Windows + $(OutDir)zlibwapi.lib + + + + + NDEBUG;%(PreprocessorDefinitions) + true + true + $(OutDir)zlibvc.tlb + + + OnlyExplicitInline + ..\..\..;%(AdditionalIncludeDirectories) + _CRT_NONSTDC_NO_DEPRECATE;_CRT_SECURE_NO_DEPRECATE;_CRT_NONSTDC_NO_WARNINGS;ZLIB_WINAPI;WIN32;%(PreprocessorDefinitions) + true + + + MultiThreadedDLL + false + true + $(IntDir)zlibvc.pch + All + $(IntDir) + $(IntDir) + $(OutDir) + + + Level3 + true + + + NDEBUG;%(PreprocessorDefinitions) + 0x040c + + + %(AdditionalDependencies) + $(OutDir)zlibwapi.dll + true + false + .\zlibvc.def + $(OutDir)zlibwapi.pdb + true + $(OutDir)zlibwapi.map + Windows + $(OutDir)zlibwapi.lib + + + + + + + + + + + + + + + + + + + + + %(AdditionalIncludeDirectories) + ZLIB_INTERNAL;%(PreprocessorDefinitions) + %(AdditionalIncludeDirectories) + %(AdditionalIncludeDirectories) + %(AdditionalIncludeDirectories) + ZLIB_INTERNAL;%(PreprocessorDefinitions) + ZLIB_INTERNAL;%(PreprocessorDefinitions) + ZLIB_INTERNAL;%(PreprocessorDefinitions) + + + %(AdditionalIncludeDirectories) + ZLIB_INTERNAL;%(PreprocessorDefinitions) + %(AdditionalIncludeDirectories) + %(AdditionalIncludeDirectories) + %(AdditionalIncludeDirectories) + ZLIB_INTERNAL;%(PreprocessorDefinitions) + ZLIB_INTERNAL;%(PreprocessorDefinitions) + ZLIB_INTERNAL;%(PreprocessorDefinitions) + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/thirdparty/zlib-1.3.1/contrib/vstudio/vc9/miniunz.vcproj b/thirdparty/zlib-1.3.1/contrib/vstudio/vc9/miniunz.vcproj new file mode 100644 index 0000000..cc3d13a --- /dev/null +++ b/thirdparty/zlib-1.3.1/contrib/vstudio/vc9/miniunz.vcproj @@ -0,0 +1,565 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/thirdparty/zlib-1.3.1/contrib/vstudio/vc9/minizip.vcproj b/thirdparty/zlib-1.3.1/contrib/vstudio/vc9/minizip.vcproj new file mode 100644 index 0000000..fecd9dd --- /dev/null +++ b/thirdparty/zlib-1.3.1/contrib/vstudio/vc9/minizip.vcproj @@ -0,0 +1,562 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/thirdparty/zlib-1.3.1/contrib/vstudio/vc9/testzlib.vcproj b/thirdparty/zlib-1.3.1/contrib/vstudio/vc9/testzlib.vcproj new file mode 100644 index 0000000..ff69640 --- /dev/null +++ b/thirdparty/zlib-1.3.1/contrib/vstudio/vc9/testzlib.vcproj @@ -0,0 +1,796 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/thirdparty/zlib-1.3.1/contrib/vstudio/vc9/testzlibdll.vcproj b/thirdparty/zlib-1.3.1/contrib/vstudio/vc9/testzlibdll.vcproj new file mode 100644 index 0000000..6448b49 --- /dev/null +++ b/thirdparty/zlib-1.3.1/contrib/vstudio/vc9/testzlibdll.vcproj @@ -0,0 +1,565 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/thirdparty/zlib-1.3.1/contrib/vstudio/vc9/zlib.rc b/thirdparty/zlib-1.3.1/contrib/vstudio/vc9/zlib.rc new file mode 100644 index 0000000..856bd11 --- /dev/null +++ b/thirdparty/zlib-1.3.1/contrib/vstudio/vc9/zlib.rc @@ -0,0 +1,32 @@ +#include + +#define IDR_VERSION1 1 +IDR_VERSION1 VERSIONINFO MOVEABLE IMPURE LOADONCALL DISCARDABLE + FILEVERSION 1, 3, 1, 0 + PRODUCTVERSION 1, 3, 1, 0 + FILEFLAGSMASK VS_FFI_FILEFLAGSMASK + FILEFLAGS 0 + FILEOS VOS_DOS_WINDOWS32 + FILETYPE VFT_DLL + FILESUBTYPE 0 // not used +BEGIN + BLOCK "StringFileInfo" + BEGIN + BLOCK "040904E4" + //language ID = U.S. English, char set = Windows, Multilingual + + BEGIN + VALUE "FileDescription", "zlib data compression and ZIP file I/O library\0" + VALUE "FileVersion", "1.3.1\0" + VALUE "InternalName", "zlib\0" + VALUE "OriginalFilename", "zlibwapi.dll\0" + VALUE "ProductName", "ZLib.DLL\0" + VALUE "Comments","DLL support by Alessandro Iacopetti & Gilles Vollant\0" + VALUE "LegalCopyright", "(C) 1995-2024 Jean-loup Gailly & Mark Adler\0" + END + END + BLOCK "VarFileInfo" + BEGIN + VALUE "Translation", 0x0409, 1252 + END +END diff --git a/thirdparty/zlib-1.3.1/contrib/vstudio/vc9/zlibstat.vcproj b/thirdparty/zlib-1.3.1/contrib/vstudio/vc9/zlibstat.vcproj new file mode 100644 index 0000000..1bf1563 --- /dev/null +++ b/thirdparty/zlib-1.3.1/contrib/vstudio/vc9/zlibstat.vcproj @@ -0,0 +1,781 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/thirdparty/zlib-1.3.1/contrib/vstudio/vc9/zlibvc.def b/thirdparty/zlib-1.3.1/contrib/vstudio/vc9/zlibvc.def new file mode 100644 index 0000000..3234a02 --- /dev/null +++ b/thirdparty/zlib-1.3.1/contrib/vstudio/vc9/zlibvc.def @@ -0,0 +1,158 @@ +LIBRARY +; zlib data compression and ZIP file I/O library + +VERSION 1.3.1 + +EXPORTS + adler32 @1 + compress @2 + crc32 @3 + deflate @4 + deflateCopy @5 + deflateEnd @6 + deflateInit2_ @7 + deflateInit_ @8 + deflateParams @9 + deflateReset @10 + deflateSetDictionary @11 + gzclose @12 + gzdopen @13 + gzerror @14 + gzflush @15 + gzopen @16 + gzread @17 + gzwrite @18 + inflate @19 + inflateEnd @20 + inflateInit2_ @21 + inflateInit_ @22 + inflateReset @23 + inflateSetDictionary @24 + inflateSync @25 + uncompress @26 + zlibVersion @27 + gzprintf @28 + gzputc @29 + gzgetc @30 + gzseek @31 + gzrewind @32 + gztell @33 + gzeof @34 + gzsetparams @35 + zError @36 + inflateSyncPoint @37 + get_crc_table @38 + compress2 @39 + gzputs @40 + gzgets @41 + inflateCopy @42 + inflateBackInit_ @43 + inflateBack @44 + inflateBackEnd @45 + compressBound @46 + deflateBound @47 + gzclearerr @48 + gzungetc @49 + zlibCompileFlags @50 + deflatePrime @51 + deflatePending @52 + + unzOpen @61 + unzClose @62 + unzGetGlobalInfo @63 + unzGetCurrentFileInfo @64 + unzGoToFirstFile @65 + unzGoToNextFile @66 + unzOpenCurrentFile @67 + unzReadCurrentFile @68 + unzOpenCurrentFile3 @69 + unztell @70 + unzeof @71 + unzCloseCurrentFile @72 + unzGetGlobalComment @73 + unzStringFileNameCompare @74 + unzLocateFile @75 + unzGetLocalExtrafield @76 + unzOpen2 @77 + unzOpenCurrentFile2 @78 + unzOpenCurrentFilePassword @79 + + zipOpen @80 + zipOpenNewFileInZip @81 + zipWriteInFileInZip @82 + zipCloseFileInZip @83 + zipClose @84 + zipOpenNewFileInZip2 @86 + zipCloseFileInZipRaw @87 + zipOpen2 @88 + zipOpenNewFileInZip3 @89 + + unzGetFilePos @100 + unzGoToFilePos @101 + + fill_win32_filefunc @110 + +; zlibwapi v1.2.4 added: + fill_win32_filefunc64 @111 + fill_win32_filefunc64A @112 + fill_win32_filefunc64W @113 + + unzOpen64 @120 + unzOpen2_64 @121 + unzGetGlobalInfo64 @122 + unzGetCurrentFileInfo64 @124 + unzGetCurrentFileZStreamPos64 @125 + unztell64 @126 + unzGetFilePos64 @127 + unzGoToFilePos64 @128 + + zipOpen64 @130 + zipOpen2_64 @131 + zipOpenNewFileInZip64 @132 + zipOpenNewFileInZip2_64 @133 + zipOpenNewFileInZip3_64 @134 + zipOpenNewFileInZip4_64 @135 + zipCloseFileInZipRaw64 @136 + +; zlib1 v1.2.4 added: + adler32_combine @140 + crc32_combine @142 + deflateSetHeader @144 + deflateTune @145 + gzbuffer @146 + gzclose_r @147 + gzclose_w @148 + gzdirect @149 + gzoffset @150 + inflateGetHeader @156 + inflateMark @157 + inflatePrime @158 + inflateReset2 @159 + inflateUndermine @160 + +; zlib1 v1.2.6 added: + gzgetc_ @161 + inflateResetKeep @163 + deflateResetKeep @164 + +; zlib1 v1.2.7 added: + gzopen_w @165 + +; zlib1 v1.2.8 added: + inflateGetDictionary @166 + gzvprintf @167 + +; zlib1 v1.2.9 added: + inflateCodesUsed @168 + inflateValidate @169 + uncompress2 @170 + gzfread @171 + gzfwrite @172 + deflateGetDictionary @173 + adler32_z @174 + crc32_z @175 + +; zlib1 v1.2.12 added: + crc32_combine_gen @176 + crc32_combine_gen64 @177 + crc32_combine_op @178 diff --git a/thirdparty/zlib-1.3.1/contrib/vstudio/vc9/zlibvc.sln b/thirdparty/zlib-1.3.1/contrib/vstudio/vc9/zlibvc.sln new file mode 100644 index 0000000..b482967 --- /dev/null +++ b/thirdparty/zlib-1.3.1/contrib/vstudio/vc9/zlibvc.sln @@ -0,0 +1,144 @@ + +Microsoft Visual Studio Solution File, Format Version 10.00 +# Visual Studio 2008 +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "zlibvc", "zlibvc.vcproj", "{8FD826F8-3739-44E6-8CC8-997122E53B8D}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "zlibstat", "zlibstat.vcproj", "{745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "testzlib", "testzlib.vcproj", "{AA6666AA-E09F-4135-9C0C-4FE50C3C654B}" +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "TestZlibDll", "testzlibdll.vcproj", "{C52F9E7B-498A-42BE-8DB4-85A15694366A}" + ProjectSection(ProjectDependencies) = postProject + {8FD826F8-3739-44E6-8CC8-997122E53B8D} = {8FD826F8-3739-44E6-8CC8-997122E53B8D} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "minizip", "minizip.vcproj", "{48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}" + ProjectSection(ProjectDependencies) = postProject + {8FD826F8-3739-44E6-8CC8-997122E53B8D} = {8FD826F8-3739-44E6-8CC8-997122E53B8D} + EndProjectSection +EndProject +Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "miniunz", "miniunz.vcproj", "{C52F9E7B-498A-42BE-8DB4-85A15694382A}" + ProjectSection(ProjectDependencies) = postProject + {8FD826F8-3739-44E6-8CC8-997122E53B8D} = {8FD826F8-3739-44E6-8CC8-997122E53B8D} + EndProjectSection +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Itanium = Debug|Itanium + Debug|Win32 = Debug|Win32 + Debug|x64 = Debug|x64 + Release|Itanium = Release|Itanium + Release|Win32 = Release|Win32 + Release|x64 = Release|x64 + ReleaseWithoutAsm|Itanium = ReleaseWithoutAsm|Itanium + ReleaseWithoutAsm|Win32 = ReleaseWithoutAsm|Win32 + ReleaseWithoutAsm|x64 = ReleaseWithoutAsm|x64 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {8FD826F8-3739-44E6-8CC8-997122E53B8D}.Debug|Itanium.ActiveCfg = Debug|Itanium + {8FD826F8-3739-44E6-8CC8-997122E53B8D}.Debug|Itanium.Build.0 = Debug|Itanium + {8FD826F8-3739-44E6-8CC8-997122E53B8D}.Debug|Win32.ActiveCfg = Debug|Win32 + {8FD826F8-3739-44E6-8CC8-997122E53B8D}.Debug|Win32.Build.0 = Debug|Win32 + {8FD826F8-3739-44E6-8CC8-997122E53B8D}.Debug|x64.ActiveCfg = Debug|x64 + {8FD826F8-3739-44E6-8CC8-997122E53B8D}.Debug|x64.Build.0 = Debug|x64 + {8FD826F8-3739-44E6-8CC8-997122E53B8D}.Release|Itanium.ActiveCfg = Release|Itanium + {8FD826F8-3739-44E6-8CC8-997122E53B8D}.Release|Itanium.Build.0 = Release|Itanium + {8FD826F8-3739-44E6-8CC8-997122E53B8D}.Release|Win32.ActiveCfg = Release|Win32 + {8FD826F8-3739-44E6-8CC8-997122E53B8D}.Release|Win32.Build.0 = Release|Win32 + {8FD826F8-3739-44E6-8CC8-997122E53B8D}.Release|x64.ActiveCfg = Release|x64 + {8FD826F8-3739-44E6-8CC8-997122E53B8D}.Release|x64.Build.0 = Release|x64 + {8FD826F8-3739-44E6-8CC8-997122E53B8D}.ReleaseWithoutAsm|Itanium.ActiveCfg = ReleaseWithoutAsm|Itanium + {8FD826F8-3739-44E6-8CC8-997122E53B8D}.ReleaseWithoutAsm|Itanium.Build.0 = ReleaseWithoutAsm|Itanium + {8FD826F8-3739-44E6-8CC8-997122E53B8D}.ReleaseWithoutAsm|Win32.ActiveCfg = ReleaseWithoutAsm|Win32 + {8FD826F8-3739-44E6-8CC8-997122E53B8D}.ReleaseWithoutAsm|Win32.Build.0 = ReleaseWithoutAsm|Win32 + {8FD826F8-3739-44E6-8CC8-997122E53B8D}.ReleaseWithoutAsm|x64.ActiveCfg = ReleaseWithoutAsm|x64 + {8FD826F8-3739-44E6-8CC8-997122E53B8D}.ReleaseWithoutAsm|x64.Build.0 = ReleaseWithoutAsm|x64 + {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.Debug|Itanium.ActiveCfg = Debug|Itanium + {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.Debug|Itanium.Build.0 = Debug|Itanium + {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.Debug|Win32.ActiveCfg = Debug|Win32 + {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.Debug|Win32.Build.0 = Debug|Win32 + {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.Debug|x64.ActiveCfg = Debug|x64 + {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.Debug|x64.Build.0 = Debug|x64 + {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.Release|Itanium.ActiveCfg = Release|Itanium + {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.Release|Itanium.Build.0 = Release|Itanium + {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.Release|Win32.ActiveCfg = Release|Win32 + {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.Release|Win32.Build.0 = Release|Win32 + {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.Release|x64.ActiveCfg = Release|x64 + {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.Release|x64.Build.0 = Release|x64 + {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.ReleaseWithoutAsm|Itanium.ActiveCfg = ReleaseWithoutAsm|Itanium + {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.ReleaseWithoutAsm|Itanium.Build.0 = ReleaseWithoutAsm|Itanium + {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.ReleaseWithoutAsm|Win32.ActiveCfg = ReleaseWithoutAsm|Win32 + {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.ReleaseWithoutAsm|Win32.Build.0 = ReleaseWithoutAsm|Win32 + {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.ReleaseWithoutAsm|x64.ActiveCfg = ReleaseWithoutAsm|x64 + {745DEC58-EBB3-47A9-A9B8-4C6627C01BF8}.ReleaseWithoutAsm|x64.Build.0 = ReleaseWithoutAsm|x64 + {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.Debug|Itanium.ActiveCfg = Debug|Itanium + {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.Debug|Itanium.Build.0 = Debug|Itanium + {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.Debug|Win32.ActiveCfg = Debug|Win32 + {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.Debug|Win32.Build.0 = Debug|Win32 + {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.Debug|x64.ActiveCfg = Debug|x64 + {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.Debug|x64.Build.0 = Debug|x64 + {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.Release|Itanium.ActiveCfg = Release|Itanium + {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.Release|Itanium.Build.0 = Release|Itanium + {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.Release|Win32.ActiveCfg = Release|Win32 + {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.Release|Win32.Build.0 = Release|Win32 + {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.Release|x64.ActiveCfg = Release|x64 + {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.Release|x64.Build.0 = Release|x64 + {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.ReleaseWithoutAsm|Itanium.ActiveCfg = ReleaseWithoutAsm|Itanium + {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.ReleaseWithoutAsm|Itanium.Build.0 = ReleaseWithoutAsm|Itanium + {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.ReleaseWithoutAsm|Win32.ActiveCfg = ReleaseWithoutAsm|Win32 + {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.ReleaseWithoutAsm|Win32.Build.0 = ReleaseWithoutAsm|Win32 + {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.ReleaseWithoutAsm|x64.ActiveCfg = ReleaseWithoutAsm|x64 + {AA6666AA-E09F-4135-9C0C-4FE50C3C654B}.ReleaseWithoutAsm|x64.Build.0 = ReleaseWithoutAsm|x64 + {C52F9E7B-498A-42BE-8DB4-85A15694366A}.Debug|Itanium.ActiveCfg = Debug|Itanium + {C52F9E7B-498A-42BE-8DB4-85A15694366A}.Debug|Itanium.Build.0 = Debug|Itanium + {C52F9E7B-498A-42BE-8DB4-85A15694366A}.Debug|Win32.ActiveCfg = Debug|Win32 + {C52F9E7B-498A-42BE-8DB4-85A15694366A}.Debug|Win32.Build.0 = Debug|Win32 + {C52F9E7B-498A-42BE-8DB4-85A15694366A}.Debug|x64.ActiveCfg = Debug|x64 + {C52F9E7B-498A-42BE-8DB4-85A15694366A}.Debug|x64.Build.0 = Debug|x64 + {C52F9E7B-498A-42BE-8DB4-85A15694366A}.Release|Itanium.ActiveCfg = Release|Itanium + {C52F9E7B-498A-42BE-8DB4-85A15694366A}.Release|Itanium.Build.0 = Release|Itanium + {C52F9E7B-498A-42BE-8DB4-85A15694366A}.Release|Win32.ActiveCfg = Release|Win32 + {C52F9E7B-498A-42BE-8DB4-85A15694366A}.Release|Win32.Build.0 = Release|Win32 + {C52F9E7B-498A-42BE-8DB4-85A15694366A}.Release|x64.ActiveCfg = Release|x64 + {C52F9E7B-498A-42BE-8DB4-85A15694366A}.Release|x64.Build.0 = Release|x64 + {C52F9E7B-498A-42BE-8DB4-85A15694366A}.ReleaseWithoutAsm|Itanium.ActiveCfg = Release|Itanium + {C52F9E7B-498A-42BE-8DB4-85A15694366A}.ReleaseWithoutAsm|Itanium.Build.0 = Release|Itanium + {C52F9E7B-498A-42BE-8DB4-85A15694366A}.ReleaseWithoutAsm|Win32.ActiveCfg = Release|Win32 + {C52F9E7B-498A-42BE-8DB4-85A15694366A}.ReleaseWithoutAsm|x64.ActiveCfg = Release|x64 + {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.Debug|Itanium.ActiveCfg = Debug|Itanium + {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.Debug|Itanium.Build.0 = Debug|Itanium + {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.Debug|Win32.ActiveCfg = Debug|Win32 + {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.Debug|Win32.Build.0 = Debug|Win32 + {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.Debug|x64.ActiveCfg = Debug|x64 + {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.Debug|x64.Build.0 = Debug|x64 + {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.Release|Itanium.ActiveCfg = Release|Itanium + {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.Release|Itanium.Build.0 = Release|Itanium + {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.Release|Win32.ActiveCfg = Release|Win32 + {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.Release|Win32.Build.0 = Release|Win32 + {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.Release|x64.ActiveCfg = Release|x64 + {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.Release|x64.Build.0 = Release|x64 + {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.ReleaseWithoutAsm|Itanium.ActiveCfg = Release|Itanium + {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.ReleaseWithoutAsm|Itanium.Build.0 = Release|Itanium + {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.ReleaseWithoutAsm|Win32.ActiveCfg = Release|Win32 + {48CDD9DC-E09F-4135-9C0C-4FE50C3C654B}.ReleaseWithoutAsm|x64.ActiveCfg = Release|x64 + {C52F9E7B-498A-42BE-8DB4-85A15694382A}.Debug|Itanium.ActiveCfg = Debug|Itanium + {C52F9E7B-498A-42BE-8DB4-85A15694382A}.Debug|Itanium.Build.0 = Debug|Itanium + {C52F9E7B-498A-42BE-8DB4-85A15694382A}.Debug|Win32.ActiveCfg = Debug|Win32 + {C52F9E7B-498A-42BE-8DB4-85A15694382A}.Debug|Win32.Build.0 = Debug|Win32 + {C52F9E7B-498A-42BE-8DB4-85A15694382A}.Debug|x64.ActiveCfg = Debug|x64 + {C52F9E7B-498A-42BE-8DB4-85A15694382A}.Debug|x64.Build.0 = Debug|x64 + {C52F9E7B-498A-42BE-8DB4-85A15694382A}.Release|Itanium.ActiveCfg = Release|Itanium + {C52F9E7B-498A-42BE-8DB4-85A15694382A}.Release|Itanium.Build.0 = Release|Itanium + {C52F9E7B-498A-42BE-8DB4-85A15694382A}.Release|Win32.ActiveCfg = Release|Win32 + {C52F9E7B-498A-42BE-8DB4-85A15694382A}.Release|Win32.Build.0 = Release|Win32 + {C52F9E7B-498A-42BE-8DB4-85A15694382A}.Release|x64.ActiveCfg = Release|x64 + {C52F9E7B-498A-42BE-8DB4-85A15694382A}.Release|x64.Build.0 = Release|x64 + {C52F9E7B-498A-42BE-8DB4-85A15694382A}.ReleaseWithoutAsm|Itanium.ActiveCfg = Release|Itanium + {C52F9E7B-498A-42BE-8DB4-85A15694382A}.ReleaseWithoutAsm|Itanium.Build.0 = Release|Itanium + {C52F9E7B-498A-42BE-8DB4-85A15694382A}.ReleaseWithoutAsm|Win32.ActiveCfg = Release|Win32 + {C52F9E7B-498A-42BE-8DB4-85A15694382A}.ReleaseWithoutAsm|x64.ActiveCfg = Release|x64 + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection +EndGlobal diff --git a/thirdparty/zlib-1.3.1/contrib/vstudio/vc9/zlibvc.vcproj b/thirdparty/zlib-1.3.1/contrib/vstudio/vc9/zlibvc.vcproj new file mode 100644 index 0000000..f11dd1f --- /dev/null +++ b/thirdparty/zlib-1.3.1/contrib/vstudio/vc9/zlibvc.vcproj @@ -0,0 +1,1100 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/thirdparty/zlib-1.3.1/crc32.c b/thirdparty/zlib-1.3.1/crc32.c new file mode 100644 index 0000000..6c38f5c --- /dev/null +++ b/thirdparty/zlib-1.3.1/crc32.c @@ -0,0 +1,1049 @@ +/* crc32.c -- compute the CRC-32 of a data stream + * Copyright (C) 1995-2022 Mark Adler + * For conditions of distribution and use, see copyright notice in zlib.h + * + * This interleaved implementation of a CRC makes use of pipelined multiple + * arithmetic-logic units, commonly found in modern CPU cores. It is due to + * Kadatch and Jenkins (2010). See doc/crc-doc.1.0.pdf in this distribution. + */ + +/* @(#) $Id$ */ + +/* + Note on the use of DYNAMIC_CRC_TABLE: there is no mutex or semaphore + protection on the static variables used to control the first-use generation + of the crc tables. Therefore, if you #define DYNAMIC_CRC_TABLE, you should + first call get_crc_table() to initialize the tables before allowing more than + one thread to use crc32(). + + MAKECRCH can be #defined to write out crc32.h. A main() routine is also + produced, so that this one source file can be compiled to an executable. + */ + +#ifdef MAKECRCH +# include +# ifndef DYNAMIC_CRC_TABLE +# define DYNAMIC_CRC_TABLE +# endif /* !DYNAMIC_CRC_TABLE */ +#endif /* MAKECRCH */ + +#include "zutil.h" /* for Z_U4, Z_U8, z_crc_t, and FAR definitions */ + + /* + A CRC of a message is computed on N braids of words in the message, where + each word consists of W bytes (4 or 8). If N is 3, for example, then three + running sparse CRCs are calculated respectively on each braid, at these + indices in the array of words: 0, 3, 6, ..., 1, 4, 7, ..., and 2, 5, 8, ... + This is done starting at a word boundary, and continues until as many blocks + of N * W bytes as are available have been processed. The results are combined + into a single CRC at the end. For this code, N must be in the range 1..6 and + W must be 4 or 8. The upper limit on N can be increased if desired by adding + more #if blocks, extending the patterns apparent in the code. In addition, + crc32.h would need to be regenerated, if the maximum N value is increased. + + N and W are chosen empirically by benchmarking the execution time on a given + processor. The choices for N and W below were based on testing on Intel Kaby + Lake i7, AMD Ryzen 7, ARM Cortex-A57, Sparc64-VII, PowerPC POWER9, and MIPS64 + Octeon II processors. The Intel, AMD, and ARM processors were all fastest + with N=5, W=8. The Sparc, PowerPC, and MIPS64 were all fastest at N=5, W=4. + They were all tested with either gcc or clang, all using the -O3 optimization + level. Your mileage may vary. + */ + +/* Define N */ +#ifdef Z_TESTN +# define N Z_TESTN +#else +# define N 5 +#endif +#if N < 1 || N > 6 +# error N must be in 1..6 +#endif + +/* + z_crc_t must be at least 32 bits. z_word_t must be at least as long as + z_crc_t. It is assumed here that z_word_t is either 32 bits or 64 bits, and + that bytes are eight bits. + */ + +/* + Define W and the associated z_word_t type. If W is not defined, then a + braided calculation is not used, and the associated tables and code are not + compiled. + */ +#ifdef Z_TESTW +# if Z_TESTW-1 != -1 +# define W Z_TESTW +# endif +#else +# ifdef MAKECRCH +# define W 8 /* required for MAKECRCH */ +# else +# if defined(__x86_64__) || defined(__aarch64__) +# define W 8 +# else +# define W 4 +# endif +# endif +#endif +#ifdef W +# if W == 8 && defined(Z_U8) + typedef Z_U8 z_word_t; +# elif defined(Z_U4) +# undef W +# define W 4 + typedef Z_U4 z_word_t; +# else +# undef W +# endif +#endif + +/* If available, use the ARM processor CRC32 instruction. */ +#if defined(__aarch64__) && defined(__ARM_FEATURE_CRC32) && W == 8 +# define ARMCRC32 +#endif + +#if defined(W) && (!defined(ARMCRC32) || defined(DYNAMIC_CRC_TABLE)) +/* + Swap the bytes in a z_word_t to convert between little and big endian. Any + self-respecting compiler will optimize this to a single machine byte-swap + instruction, if one is available. This assumes that word_t is either 32 bits + or 64 bits. + */ +local z_word_t byte_swap(z_word_t word) { +# if W == 8 + return + (word & 0xff00000000000000) >> 56 | + (word & 0xff000000000000) >> 40 | + (word & 0xff0000000000) >> 24 | + (word & 0xff00000000) >> 8 | + (word & 0xff000000) << 8 | + (word & 0xff0000) << 24 | + (word & 0xff00) << 40 | + (word & 0xff) << 56; +# else /* W == 4 */ + return + (word & 0xff000000) >> 24 | + (word & 0xff0000) >> 8 | + (word & 0xff00) << 8 | + (word & 0xff) << 24; +# endif +} +#endif + +#ifdef DYNAMIC_CRC_TABLE +/* ========================================================================= + * Table of powers of x for combining CRC-32s, filled in by make_crc_table() + * below. + */ + local z_crc_t FAR x2n_table[32]; +#else +/* ========================================================================= + * Tables for byte-wise and braided CRC-32 calculations, and a table of powers + * of x for combining CRC-32s, all made by make_crc_table(). + */ +# include "crc32.h" +#endif + +/* CRC polynomial. */ +#define POLY 0xedb88320 /* p(x) reflected, with x^32 implied */ + +/* + Return a(x) multiplied by b(x) modulo p(x), where p(x) is the CRC polynomial, + reflected. For speed, this requires that a not be zero. + */ +local z_crc_t multmodp(z_crc_t a, z_crc_t b) { + z_crc_t m, p; + + m = (z_crc_t)1 << 31; + p = 0; + for (;;) { + if (a & m) { + p ^= b; + if ((a & (m - 1)) == 0) + break; + } + m >>= 1; + b = b & 1 ? (b >> 1) ^ POLY : b >> 1; + } + return p; +} + +/* + Return x^(n * 2^k) modulo p(x). Requires that x2n_table[] has been + initialized. + */ +local z_crc_t x2nmodp(z_off64_t n, unsigned k) { + z_crc_t p; + + p = (z_crc_t)1 << 31; /* x^0 == 1 */ + while (n) { + if (n & 1) + p = multmodp(x2n_table[k & 31], p); + n >>= 1; + k++; + } + return p; +} + +#ifdef DYNAMIC_CRC_TABLE +/* ========================================================================= + * Build the tables for byte-wise and braided CRC-32 calculations, and a table + * of powers of x for combining CRC-32s. + */ +local z_crc_t FAR crc_table[256]; +#ifdef W + local z_word_t FAR crc_big_table[256]; + local z_crc_t FAR crc_braid_table[W][256]; + local z_word_t FAR crc_braid_big_table[W][256]; + local void braid(z_crc_t [][256], z_word_t [][256], int, int); +#endif +#ifdef MAKECRCH + local void write_table(FILE *, const z_crc_t FAR *, int); + local void write_table32hi(FILE *, const z_word_t FAR *, int); + local void write_table64(FILE *, const z_word_t FAR *, int); +#endif /* MAKECRCH */ + +/* + Define a once() function depending on the availability of atomics. If this is + compiled with DYNAMIC_CRC_TABLE defined, and if CRCs will be computed in + multiple threads, and if atomics are not available, then get_crc_table() must + be called to initialize the tables and must return before any threads are + allowed to compute or combine CRCs. + */ + +/* Definition of once functionality. */ +typedef struct once_s once_t; + +/* Check for the availability of atomics. */ +#if defined(__STDC__) && __STDC_VERSION__ >= 201112L && \ + !defined(__STDC_NO_ATOMICS__) + +#include + +/* Structure for once(), which must be initialized with ONCE_INIT. */ +struct once_s { + atomic_flag begun; + atomic_int done; +}; +#define ONCE_INIT {ATOMIC_FLAG_INIT, 0} + +/* + Run the provided init() function exactly once, even if multiple threads + invoke once() at the same time. The state must be a once_t initialized with + ONCE_INIT. + */ +local void once(once_t *state, void (*init)(void)) { + if (!atomic_load(&state->done)) { + if (atomic_flag_test_and_set(&state->begun)) + while (!atomic_load(&state->done)) + ; + else { + init(); + atomic_store(&state->done, 1); + } + } +} + +#else /* no atomics */ + +/* Structure for once(), which must be initialized with ONCE_INIT. */ +struct once_s { + volatile int begun; + volatile int done; +}; +#define ONCE_INIT {0, 0} + +/* Test and set. Alas, not atomic, but tries to minimize the period of + vulnerability. */ +local int test_and_set(int volatile *flag) { + int was; + + was = *flag; + *flag = 1; + return was; +} + +/* Run the provided init() function once. This is not thread-safe. */ +local void once(once_t *state, void (*init)(void)) { + if (!state->done) { + if (test_and_set(&state->begun)) + while (!state->done) + ; + else { + init(); + state->done = 1; + } + } +} + +#endif + +/* State for once(). */ +local once_t made = ONCE_INIT; + +/* + Generate tables for a byte-wise 32-bit CRC calculation on the polynomial: + x^32+x^26+x^23+x^22+x^16+x^12+x^11+x^10+x^8+x^7+x^5+x^4+x^2+x+1. + + Polynomials over GF(2) are represented in binary, one bit per coefficient, + with the lowest powers in the most significant bit. Then adding polynomials + is just exclusive-or, and multiplying a polynomial by x is a right shift by + one. If we call the above polynomial p, and represent a byte as the + polynomial q, also with the lowest power in the most significant bit (so the + byte 0xb1 is the polynomial x^7+x^3+x^2+1), then the CRC is (q*x^32) mod p, + where a mod b means the remainder after dividing a by b. + + This calculation is done using the shift-register method of multiplying and + taking the remainder. The register is initialized to zero, and for each + incoming bit, x^32 is added mod p to the register if the bit is a one (where + x^32 mod p is p+x^32 = x^26+...+1), and the register is multiplied mod p by x + (which is shifting right by one and adding x^32 mod p if the bit shifted out + is a one). We start with the highest power (least significant bit) of q and + repeat for all eight bits of q. + + The table is simply the CRC of all possible eight bit values. This is all the + information needed to generate CRCs on data a byte at a time for all + combinations of CRC register values and incoming bytes. + */ + +local void make_crc_table(void) { + unsigned i, j, n; + z_crc_t p; + + /* initialize the CRC of bytes tables */ + for (i = 0; i < 256; i++) { + p = i; + for (j = 0; j < 8; j++) + p = p & 1 ? (p >> 1) ^ POLY : p >> 1; + crc_table[i] = p; +#ifdef W + crc_big_table[i] = byte_swap(p); +#endif + } + + /* initialize the x^2^n mod p(x) table */ + p = (z_crc_t)1 << 30; /* x^1 */ + x2n_table[0] = p; + for (n = 1; n < 32; n++) + x2n_table[n] = p = multmodp(p, p); + +#ifdef W + /* initialize the braiding tables -- needs x2n_table[] */ + braid(crc_braid_table, crc_braid_big_table, N, W); +#endif + +#ifdef MAKECRCH + { + /* + The crc32.h header file contains tables for both 32-bit and 64-bit + z_word_t's, and so requires a 64-bit type be available. In that case, + z_word_t must be defined to be 64-bits. This code then also generates + and writes out the tables for the case that z_word_t is 32 bits. + */ +#if !defined(W) || W != 8 +# error Need a 64-bit integer type in order to generate crc32.h. +#endif + FILE *out; + int k, n; + z_crc_t ltl[8][256]; + z_word_t big[8][256]; + + out = fopen("crc32.h", "w"); + if (out == NULL) return; + + /* write out little-endian CRC table to crc32.h */ + fprintf(out, + "/* crc32.h -- tables for rapid CRC calculation\n" + " * Generated automatically by crc32.c\n */\n" + "\n" + "local const z_crc_t FAR crc_table[] = {\n" + " "); + write_table(out, crc_table, 256); + fprintf(out, + "};\n"); + + /* write out big-endian CRC table for 64-bit z_word_t to crc32.h */ + fprintf(out, + "\n" + "#ifdef W\n" + "\n" + "#if W == 8\n" + "\n" + "local const z_word_t FAR crc_big_table[] = {\n" + " "); + write_table64(out, crc_big_table, 256); + fprintf(out, + "};\n"); + + /* write out big-endian CRC table for 32-bit z_word_t to crc32.h */ + fprintf(out, + "\n" + "#else /* W == 4 */\n" + "\n" + "local const z_word_t FAR crc_big_table[] = {\n" + " "); + write_table32hi(out, crc_big_table, 256); + fprintf(out, + "};\n" + "\n" + "#endif\n"); + + /* write out braid tables for each value of N */ + for (n = 1; n <= 6; n++) { + fprintf(out, + "\n" + "#if N == %d\n", n); + + /* compute braid tables for this N and 64-bit word_t */ + braid(ltl, big, n, 8); + + /* write out braid tables for 64-bit z_word_t to crc32.h */ + fprintf(out, + "\n" + "#if W == 8\n" + "\n" + "local const z_crc_t FAR crc_braid_table[][256] = {\n"); + for (k = 0; k < 8; k++) { + fprintf(out, " {"); + write_table(out, ltl[k], 256); + fprintf(out, "}%s", k < 7 ? ",\n" : ""); + } + fprintf(out, + "};\n" + "\n" + "local const z_word_t FAR crc_braid_big_table[][256] = {\n"); + for (k = 0; k < 8; k++) { + fprintf(out, " {"); + write_table64(out, big[k], 256); + fprintf(out, "}%s", k < 7 ? ",\n" : ""); + } + fprintf(out, + "};\n"); + + /* compute braid tables for this N and 32-bit word_t */ + braid(ltl, big, n, 4); + + /* write out braid tables for 32-bit z_word_t to crc32.h */ + fprintf(out, + "\n" + "#else /* W == 4 */\n" + "\n" + "local const z_crc_t FAR crc_braid_table[][256] = {\n"); + for (k = 0; k < 4; k++) { + fprintf(out, " {"); + write_table(out, ltl[k], 256); + fprintf(out, "}%s", k < 3 ? ",\n" : ""); + } + fprintf(out, + "};\n" + "\n" + "local const z_word_t FAR crc_braid_big_table[][256] = {\n"); + for (k = 0; k < 4; k++) { + fprintf(out, " {"); + write_table32hi(out, big[k], 256); + fprintf(out, "}%s", k < 3 ? ",\n" : ""); + } + fprintf(out, + "};\n" + "\n" + "#endif\n" + "\n" + "#endif\n"); + } + fprintf(out, + "\n" + "#endif\n"); + + /* write out zeros operator table to crc32.h */ + fprintf(out, + "\n" + "local const z_crc_t FAR x2n_table[] = {\n" + " "); + write_table(out, x2n_table, 32); + fprintf(out, + "};\n"); + fclose(out); + } +#endif /* MAKECRCH */ +} + +#ifdef MAKECRCH + +/* + Write the 32-bit values in table[0..k-1] to out, five per line in + hexadecimal separated by commas. + */ +local void write_table(FILE *out, const z_crc_t FAR *table, int k) { + int n; + + for (n = 0; n < k; n++) + fprintf(out, "%s0x%08lx%s", n == 0 || n % 5 ? "" : " ", + (unsigned long)(table[n]), + n == k - 1 ? "" : (n % 5 == 4 ? ",\n" : ", ")); +} + +/* + Write the high 32-bits of each value in table[0..k-1] to out, five per line + in hexadecimal separated by commas. + */ +local void write_table32hi(FILE *out, const z_word_t FAR *table, int k) { + int n; + + for (n = 0; n < k; n++) + fprintf(out, "%s0x%08lx%s", n == 0 || n % 5 ? "" : " ", + (unsigned long)(table[n] >> 32), + n == k - 1 ? "" : (n % 5 == 4 ? ",\n" : ", ")); +} + +/* + Write the 64-bit values in table[0..k-1] to out, three per line in + hexadecimal separated by commas. This assumes that if there is a 64-bit + type, then there is also a long long integer type, and it is at least 64 + bits. If not, then the type cast and format string can be adjusted + accordingly. + */ +local void write_table64(FILE *out, const z_word_t FAR *table, int k) { + int n; + + for (n = 0; n < k; n++) + fprintf(out, "%s0x%016llx%s", n == 0 || n % 3 ? "" : " ", + (unsigned long long)(table[n]), + n == k - 1 ? "" : (n % 3 == 2 ? ",\n" : ", ")); +} + +/* Actually do the deed. */ +int main(void) { + make_crc_table(); + return 0; +} + +#endif /* MAKECRCH */ + +#ifdef W +/* + Generate the little and big-endian braid tables for the given n and z_word_t + size w. Each array must have room for w blocks of 256 elements. + */ +local void braid(z_crc_t ltl[][256], z_word_t big[][256], int n, int w) { + int k; + z_crc_t i, p, q; + for (k = 0; k < w; k++) { + p = x2nmodp((n * w + 3 - k) << 3, 0); + ltl[k][0] = 0; + big[w - 1 - k][0] = 0; + for (i = 1; i < 256; i++) { + ltl[k][i] = q = multmodp(i << 24, p); + big[w - 1 - k][i] = byte_swap(q); + } + } +} +#endif + +#endif /* DYNAMIC_CRC_TABLE */ + +/* ========================================================================= + * This function can be used by asm versions of crc32(), and to force the + * generation of the CRC tables in a threaded application. + */ +const z_crc_t FAR * ZEXPORT get_crc_table(void) { +#ifdef DYNAMIC_CRC_TABLE + once(&made, make_crc_table); +#endif /* DYNAMIC_CRC_TABLE */ + return (const z_crc_t FAR *)crc_table; +} + +/* ========================================================================= + * Use ARM machine instructions if available. This will compute the CRC about + * ten times faster than the braided calculation. This code does not check for + * the presence of the CRC instruction at run time. __ARM_FEATURE_CRC32 will + * only be defined if the compilation specifies an ARM processor architecture + * that has the instructions. For example, compiling with -march=armv8.1-a or + * -march=armv8-a+crc, or -march=native if the compile machine has the crc32 + * instructions. + */ +#ifdef ARMCRC32 + +/* + Constants empirically determined to maximize speed. These values are from + measurements on a Cortex-A57. Your mileage may vary. + */ +#define Z_BATCH 3990 /* number of words in a batch */ +#define Z_BATCH_ZEROS 0xa10d3d0c /* computed from Z_BATCH = 3990 */ +#define Z_BATCH_MIN 800 /* fewest words in a final batch */ + +unsigned long ZEXPORT crc32_z(unsigned long crc, const unsigned char FAR *buf, + z_size_t len) { + z_crc_t val; + z_word_t crc1, crc2; + const z_word_t *word; + z_word_t val0, val1, val2; + z_size_t last, last2, i; + z_size_t num; + + /* Return initial CRC, if requested. */ + if (buf == Z_NULL) return 0; + +#ifdef DYNAMIC_CRC_TABLE + once(&made, make_crc_table); +#endif /* DYNAMIC_CRC_TABLE */ + + /* Pre-condition the CRC */ + crc = (~crc) & 0xffffffff; + + /* Compute the CRC up to a word boundary. */ + while (len && ((z_size_t)buf & 7) != 0) { + len--; + val = *buf++; + __asm__ volatile("crc32b %w0, %w0, %w1" : "+r"(crc) : "r"(val)); + } + + /* Prepare to compute the CRC on full 64-bit words word[0..num-1]. */ + word = (z_word_t const *)buf; + num = len >> 3; + len &= 7; + + /* Do three interleaved CRCs to realize the throughput of one crc32x + instruction per cycle. Each CRC is calculated on Z_BATCH words. The + three CRCs are combined into a single CRC after each set of batches. */ + while (num >= 3 * Z_BATCH) { + crc1 = 0; + crc2 = 0; + for (i = 0; i < Z_BATCH; i++) { + val0 = word[i]; + val1 = word[i + Z_BATCH]; + val2 = word[i + 2 * Z_BATCH]; + __asm__ volatile("crc32x %w0, %w0, %x1" : "+r"(crc) : "r"(val0)); + __asm__ volatile("crc32x %w0, %w0, %x1" : "+r"(crc1) : "r"(val1)); + __asm__ volatile("crc32x %w0, %w0, %x1" : "+r"(crc2) : "r"(val2)); + } + word += 3 * Z_BATCH; + num -= 3 * Z_BATCH; + crc = multmodp(Z_BATCH_ZEROS, crc) ^ crc1; + crc = multmodp(Z_BATCH_ZEROS, crc) ^ crc2; + } + + /* Do one last smaller batch with the remaining words, if there are enough + to pay for the combination of CRCs. */ + last = num / 3; + if (last >= Z_BATCH_MIN) { + last2 = last << 1; + crc1 = 0; + crc2 = 0; + for (i = 0; i < last; i++) { + val0 = word[i]; + val1 = word[i + last]; + val2 = word[i + last2]; + __asm__ volatile("crc32x %w0, %w0, %x1" : "+r"(crc) : "r"(val0)); + __asm__ volatile("crc32x %w0, %w0, %x1" : "+r"(crc1) : "r"(val1)); + __asm__ volatile("crc32x %w0, %w0, %x1" : "+r"(crc2) : "r"(val2)); + } + word += 3 * last; + num -= 3 * last; + val = x2nmodp(last, 6); + crc = multmodp(val, crc) ^ crc1; + crc = multmodp(val, crc) ^ crc2; + } + + /* Compute the CRC on any remaining words. */ + for (i = 0; i < num; i++) { + val0 = word[i]; + __asm__ volatile("crc32x %w0, %w0, %x1" : "+r"(crc) : "r"(val0)); + } + word += num; + + /* Complete the CRC on any remaining bytes. */ + buf = (const unsigned char FAR *)word; + while (len) { + len--; + val = *buf++; + __asm__ volatile("crc32b %w0, %w0, %w1" : "+r"(crc) : "r"(val)); + } + + /* Return the CRC, post-conditioned. */ + return crc ^ 0xffffffff; +} + +#else + +#ifdef W + +/* + Return the CRC of the W bytes in the word_t data, taking the + least-significant byte of the word as the first byte of data, without any pre + or post conditioning. This is used to combine the CRCs of each braid. + */ +local z_crc_t crc_word(z_word_t data) { + int k; + for (k = 0; k < W; k++) + data = (data >> 8) ^ crc_table[data & 0xff]; + return (z_crc_t)data; +} + +local z_word_t crc_word_big(z_word_t data) { + int k; + for (k = 0; k < W; k++) + data = (data << 8) ^ + crc_big_table[(data >> ((W - 1) << 3)) & 0xff]; + return data; +} + +#endif + +/* ========================================================================= */ +unsigned long ZEXPORT crc32_z(unsigned long crc, const unsigned char FAR *buf, + z_size_t len) { + /* Return initial CRC, if requested. */ + if (buf == Z_NULL) return 0; + +#ifdef DYNAMIC_CRC_TABLE + once(&made, make_crc_table); +#endif /* DYNAMIC_CRC_TABLE */ + + /* Pre-condition the CRC */ + crc = (~crc) & 0xffffffff; + +#ifdef W + + /* If provided enough bytes, do a braided CRC calculation. */ + if (len >= N * W + W - 1) { + z_size_t blks; + z_word_t const *words; + unsigned endian; + int k; + + /* Compute the CRC up to a z_word_t boundary. */ + while (len && ((z_size_t)buf & (W - 1)) != 0) { + len--; + crc = (crc >> 8) ^ crc_table[(crc ^ *buf++) & 0xff]; + } + + /* Compute the CRC on as many N z_word_t blocks as are available. */ + blks = len / (N * W); + len -= blks * N * W; + words = (z_word_t const *)buf; + + /* Do endian check at execution time instead of compile time, since ARM + processors can change the endianness at execution time. If the + compiler knows what the endianness will be, it can optimize out the + check and the unused branch. */ + endian = 1; + if (*(unsigned char *)&endian) { + /* Little endian. */ + + z_crc_t crc0; + z_word_t word0; +#if N > 1 + z_crc_t crc1; + z_word_t word1; +#if N > 2 + z_crc_t crc2; + z_word_t word2; +#if N > 3 + z_crc_t crc3; + z_word_t word3; +#if N > 4 + z_crc_t crc4; + z_word_t word4; +#if N > 5 + z_crc_t crc5; + z_word_t word5; +#endif +#endif +#endif +#endif +#endif + + /* Initialize the CRC for each braid. */ + crc0 = crc; +#if N > 1 + crc1 = 0; +#if N > 2 + crc2 = 0; +#if N > 3 + crc3 = 0; +#if N > 4 + crc4 = 0; +#if N > 5 + crc5 = 0; +#endif +#endif +#endif +#endif +#endif + + /* + Process the first blks-1 blocks, computing the CRCs on each braid + independently. + */ + while (--blks) { + /* Load the word for each braid into registers. */ + word0 = crc0 ^ words[0]; +#if N > 1 + word1 = crc1 ^ words[1]; +#if N > 2 + word2 = crc2 ^ words[2]; +#if N > 3 + word3 = crc3 ^ words[3]; +#if N > 4 + word4 = crc4 ^ words[4]; +#if N > 5 + word5 = crc5 ^ words[5]; +#endif +#endif +#endif +#endif +#endif + words += N; + + /* Compute and update the CRC for each word. The loop should + get unrolled. */ + crc0 = crc_braid_table[0][word0 & 0xff]; +#if N > 1 + crc1 = crc_braid_table[0][word1 & 0xff]; +#if N > 2 + crc2 = crc_braid_table[0][word2 & 0xff]; +#if N > 3 + crc3 = crc_braid_table[0][word3 & 0xff]; +#if N > 4 + crc4 = crc_braid_table[0][word4 & 0xff]; +#if N > 5 + crc5 = crc_braid_table[0][word5 & 0xff]; +#endif +#endif +#endif +#endif +#endif + for (k = 1; k < W; k++) { + crc0 ^= crc_braid_table[k][(word0 >> (k << 3)) & 0xff]; +#if N > 1 + crc1 ^= crc_braid_table[k][(word1 >> (k << 3)) & 0xff]; +#if N > 2 + crc2 ^= crc_braid_table[k][(word2 >> (k << 3)) & 0xff]; +#if N > 3 + crc3 ^= crc_braid_table[k][(word3 >> (k << 3)) & 0xff]; +#if N > 4 + crc4 ^= crc_braid_table[k][(word4 >> (k << 3)) & 0xff]; +#if N > 5 + crc5 ^= crc_braid_table[k][(word5 >> (k << 3)) & 0xff]; +#endif +#endif +#endif +#endif +#endif + } + } + + /* + Process the last block, combining the CRCs of the N braids at the + same time. + */ + crc = crc_word(crc0 ^ words[0]); +#if N > 1 + crc = crc_word(crc1 ^ words[1] ^ crc); +#if N > 2 + crc = crc_word(crc2 ^ words[2] ^ crc); +#if N > 3 + crc = crc_word(crc3 ^ words[3] ^ crc); +#if N > 4 + crc = crc_word(crc4 ^ words[4] ^ crc); +#if N > 5 + crc = crc_word(crc5 ^ words[5] ^ crc); +#endif +#endif +#endif +#endif +#endif + words += N; + } + else { + /* Big endian. */ + + z_word_t crc0, word0, comb; +#if N > 1 + z_word_t crc1, word1; +#if N > 2 + z_word_t crc2, word2; +#if N > 3 + z_word_t crc3, word3; +#if N > 4 + z_word_t crc4, word4; +#if N > 5 + z_word_t crc5, word5; +#endif +#endif +#endif +#endif +#endif + + /* Initialize the CRC for each braid. */ + crc0 = byte_swap(crc); +#if N > 1 + crc1 = 0; +#if N > 2 + crc2 = 0; +#if N > 3 + crc3 = 0; +#if N > 4 + crc4 = 0; +#if N > 5 + crc5 = 0; +#endif +#endif +#endif +#endif +#endif + + /* + Process the first blks-1 blocks, computing the CRCs on each braid + independently. + */ + while (--blks) { + /* Load the word for each braid into registers. */ + word0 = crc0 ^ words[0]; +#if N > 1 + word1 = crc1 ^ words[1]; +#if N > 2 + word2 = crc2 ^ words[2]; +#if N > 3 + word3 = crc3 ^ words[3]; +#if N > 4 + word4 = crc4 ^ words[4]; +#if N > 5 + word5 = crc5 ^ words[5]; +#endif +#endif +#endif +#endif +#endif + words += N; + + /* Compute and update the CRC for each word. The loop should + get unrolled. */ + crc0 = crc_braid_big_table[0][word0 & 0xff]; +#if N > 1 + crc1 = crc_braid_big_table[0][word1 & 0xff]; +#if N > 2 + crc2 = crc_braid_big_table[0][word2 & 0xff]; +#if N > 3 + crc3 = crc_braid_big_table[0][word3 & 0xff]; +#if N > 4 + crc4 = crc_braid_big_table[0][word4 & 0xff]; +#if N > 5 + crc5 = crc_braid_big_table[0][word5 & 0xff]; +#endif +#endif +#endif +#endif +#endif + for (k = 1; k < W; k++) { + crc0 ^= crc_braid_big_table[k][(word0 >> (k << 3)) & 0xff]; +#if N > 1 + crc1 ^= crc_braid_big_table[k][(word1 >> (k << 3)) & 0xff]; +#if N > 2 + crc2 ^= crc_braid_big_table[k][(word2 >> (k << 3)) & 0xff]; +#if N > 3 + crc3 ^= crc_braid_big_table[k][(word3 >> (k << 3)) & 0xff]; +#if N > 4 + crc4 ^= crc_braid_big_table[k][(word4 >> (k << 3)) & 0xff]; +#if N > 5 + crc5 ^= crc_braid_big_table[k][(word5 >> (k << 3)) & 0xff]; +#endif +#endif +#endif +#endif +#endif + } + } + + /* + Process the last block, combining the CRCs of the N braids at the + same time. + */ + comb = crc_word_big(crc0 ^ words[0]); +#if N > 1 + comb = crc_word_big(crc1 ^ words[1] ^ comb); +#if N > 2 + comb = crc_word_big(crc2 ^ words[2] ^ comb); +#if N > 3 + comb = crc_word_big(crc3 ^ words[3] ^ comb); +#if N > 4 + comb = crc_word_big(crc4 ^ words[4] ^ comb); +#if N > 5 + comb = crc_word_big(crc5 ^ words[5] ^ comb); +#endif +#endif +#endif +#endif +#endif + words += N; + crc = byte_swap(comb); + } + + /* + Update the pointer to the remaining bytes to process. + */ + buf = (unsigned char const *)words; + } + +#endif /* W */ + + /* Complete the computation of the CRC on any remaining bytes. */ + while (len >= 8) { + len -= 8; + crc = (crc >> 8) ^ crc_table[(crc ^ *buf++) & 0xff]; + crc = (crc >> 8) ^ crc_table[(crc ^ *buf++) & 0xff]; + crc = (crc >> 8) ^ crc_table[(crc ^ *buf++) & 0xff]; + crc = (crc >> 8) ^ crc_table[(crc ^ *buf++) & 0xff]; + crc = (crc >> 8) ^ crc_table[(crc ^ *buf++) & 0xff]; + crc = (crc >> 8) ^ crc_table[(crc ^ *buf++) & 0xff]; + crc = (crc >> 8) ^ crc_table[(crc ^ *buf++) & 0xff]; + crc = (crc >> 8) ^ crc_table[(crc ^ *buf++) & 0xff]; + } + while (len) { + len--; + crc = (crc >> 8) ^ crc_table[(crc ^ *buf++) & 0xff]; + } + + /* Return the CRC, post-conditioned. */ + return crc ^ 0xffffffff; +} + +#endif + +/* ========================================================================= */ +unsigned long ZEXPORT crc32(unsigned long crc, const unsigned char FAR *buf, + uInt len) { + return crc32_z(crc, buf, len); +} + +/* ========================================================================= */ +uLong ZEXPORT crc32_combine64(uLong crc1, uLong crc2, z_off64_t len2) { +#ifdef DYNAMIC_CRC_TABLE + once(&made, make_crc_table); +#endif /* DYNAMIC_CRC_TABLE */ + return multmodp(x2nmodp(len2, 3), crc1) ^ (crc2 & 0xffffffff); +} + +/* ========================================================================= */ +uLong ZEXPORT crc32_combine(uLong crc1, uLong crc2, z_off_t len2) { + return crc32_combine64(crc1, crc2, (z_off64_t)len2); +} + +/* ========================================================================= */ +uLong ZEXPORT crc32_combine_gen64(z_off64_t len2) { +#ifdef DYNAMIC_CRC_TABLE + once(&made, make_crc_table); +#endif /* DYNAMIC_CRC_TABLE */ + return x2nmodp(len2, 3); +} + +/* ========================================================================= */ +uLong ZEXPORT crc32_combine_gen(z_off_t len2) { + return crc32_combine_gen64((z_off64_t)len2); +} + +/* ========================================================================= */ +uLong ZEXPORT crc32_combine_op(uLong crc1, uLong crc2, uLong op) { + return multmodp(op, crc1) ^ (crc2 & 0xffffffff); +} diff --git a/thirdparty/zlib-1.3.1/crc32.h b/thirdparty/zlib-1.3.1/crc32.h new file mode 100644 index 0000000..137df68 --- /dev/null +++ b/thirdparty/zlib-1.3.1/crc32.h @@ -0,0 +1,9446 @@ +/* crc32.h -- tables for rapid CRC calculation + * Generated automatically by crc32.c + */ + +local const z_crc_t FAR crc_table[] = { + 0x00000000, 0x77073096, 0xee0e612c, 0x990951ba, 0x076dc419, + 0x706af48f, 0xe963a535, 0x9e6495a3, 0x0edb8832, 0x79dcb8a4, + 0xe0d5e91e, 0x97d2d988, 0x09b64c2b, 0x7eb17cbd, 0xe7b82d07, + 0x90bf1d91, 0x1db71064, 0x6ab020f2, 0xf3b97148, 0x84be41de, + 0x1adad47d, 0x6ddde4eb, 0xf4d4b551, 0x83d385c7, 0x136c9856, + 0x646ba8c0, 0xfd62f97a, 0x8a65c9ec, 0x14015c4f, 0x63066cd9, + 0xfa0f3d63, 0x8d080df5, 0x3b6e20c8, 0x4c69105e, 0xd56041e4, + 0xa2677172, 0x3c03e4d1, 0x4b04d447, 0xd20d85fd, 0xa50ab56b, + 0x35b5a8fa, 0x42b2986c, 0xdbbbc9d6, 0xacbcf940, 0x32d86ce3, + 0x45df5c75, 0xdcd60dcf, 0xabd13d59, 0x26d930ac, 0x51de003a, + 0xc8d75180, 0xbfd06116, 0x21b4f4b5, 0x56b3c423, 0xcfba9599, + 0xb8bda50f, 0x2802b89e, 0x5f058808, 0xc60cd9b2, 0xb10be924, + 0x2f6f7c87, 0x58684c11, 0xc1611dab, 0xb6662d3d, 0x76dc4190, + 0x01db7106, 0x98d220bc, 0xefd5102a, 0x71b18589, 0x06b6b51f, + 0x9fbfe4a5, 0xe8b8d433, 0x7807c9a2, 0x0f00f934, 0x9609a88e, + 0xe10e9818, 0x7f6a0dbb, 0x086d3d2d, 0x91646c97, 0xe6635c01, + 0x6b6b51f4, 0x1c6c6162, 0x856530d8, 0xf262004e, 0x6c0695ed, + 0x1b01a57b, 0x8208f4c1, 0xf50fc457, 0x65b0d9c6, 0x12b7e950, + 0x8bbeb8ea, 0xfcb9887c, 0x62dd1ddf, 0x15da2d49, 0x8cd37cf3, + 0xfbd44c65, 0x4db26158, 0x3ab551ce, 0xa3bc0074, 0xd4bb30e2, + 0x4adfa541, 0x3dd895d7, 0xa4d1c46d, 0xd3d6f4fb, 0x4369e96a, + 0x346ed9fc, 0xad678846, 0xda60b8d0, 0x44042d73, 0x33031de5, + 0xaa0a4c5f, 0xdd0d7cc9, 0x5005713c, 0x270241aa, 0xbe0b1010, + 0xc90c2086, 0x5768b525, 0x206f85b3, 0xb966d409, 0xce61e49f, + 0x5edef90e, 0x29d9c998, 0xb0d09822, 0xc7d7a8b4, 0x59b33d17, + 0x2eb40d81, 0xb7bd5c3b, 0xc0ba6cad, 0xedb88320, 0x9abfb3b6, + 0x03b6e20c, 0x74b1d29a, 0xead54739, 0x9dd277af, 0x04db2615, + 0x73dc1683, 0xe3630b12, 0x94643b84, 0x0d6d6a3e, 0x7a6a5aa8, + 0xe40ecf0b, 0x9309ff9d, 0x0a00ae27, 0x7d079eb1, 0xf00f9344, + 0x8708a3d2, 0x1e01f268, 0x6906c2fe, 0xf762575d, 0x806567cb, + 0x196c3671, 0x6e6b06e7, 0xfed41b76, 0x89d32be0, 0x10da7a5a, + 0x67dd4acc, 0xf9b9df6f, 0x8ebeeff9, 0x17b7be43, 0x60b08ed5, + 0xd6d6a3e8, 0xa1d1937e, 0x38d8c2c4, 0x4fdff252, 0xd1bb67f1, + 0xa6bc5767, 0x3fb506dd, 0x48b2364b, 0xd80d2bda, 0xaf0a1b4c, + 0x36034af6, 0x41047a60, 0xdf60efc3, 0xa867df55, 0x316e8eef, + 0x4669be79, 0xcb61b38c, 0xbc66831a, 0x256fd2a0, 0x5268e236, + 0xcc0c7795, 0xbb0b4703, 0x220216b9, 0x5505262f, 0xc5ba3bbe, + 0xb2bd0b28, 0x2bb45a92, 0x5cb36a04, 0xc2d7ffa7, 0xb5d0cf31, + 0x2cd99e8b, 0x5bdeae1d, 0x9b64c2b0, 0xec63f226, 0x756aa39c, + 0x026d930a, 0x9c0906a9, 0xeb0e363f, 0x72076785, 0x05005713, + 0x95bf4a82, 0xe2b87a14, 0x7bb12bae, 0x0cb61b38, 0x92d28e9b, + 0xe5d5be0d, 0x7cdcefb7, 0x0bdbdf21, 0x86d3d2d4, 0xf1d4e242, + 0x68ddb3f8, 0x1fda836e, 0x81be16cd, 0xf6b9265b, 0x6fb077e1, + 0x18b74777, 0x88085ae6, 0xff0f6a70, 0x66063bca, 0x11010b5c, + 0x8f659eff, 0xf862ae69, 0x616bffd3, 0x166ccf45, 0xa00ae278, + 0xd70dd2ee, 0x4e048354, 0x3903b3c2, 0xa7672661, 0xd06016f7, + 0x4969474d, 0x3e6e77db, 0xaed16a4a, 0xd9d65adc, 0x40df0b66, + 0x37d83bf0, 0xa9bcae53, 0xdebb9ec5, 0x47b2cf7f, 0x30b5ffe9, + 0xbdbdf21c, 0xcabac28a, 0x53b39330, 0x24b4a3a6, 0xbad03605, + 0xcdd70693, 0x54de5729, 0x23d967bf, 0xb3667a2e, 0xc4614ab8, + 0x5d681b02, 0x2a6f2b94, 0xb40bbe37, 0xc30c8ea1, 0x5a05df1b, + 0x2d02ef8d}; + +#ifdef W + +#if W == 8 + +local const z_word_t FAR crc_big_table[] = { + 0x0000000000000000, 0x9630077700000000, 0x2c610eee00000000, + 0xba51099900000000, 0x19c46d0700000000, 0x8ff46a7000000000, + 0x35a563e900000000, 0xa395649e00000000, 0x3288db0e00000000, + 0xa4b8dc7900000000, 0x1ee9d5e000000000, 0x88d9d29700000000, + 0x2b4cb60900000000, 0xbd7cb17e00000000, 0x072db8e700000000, + 0x911dbf9000000000, 0x6410b71d00000000, 0xf220b06a00000000, + 0x4871b9f300000000, 0xde41be8400000000, 0x7dd4da1a00000000, + 0xebe4dd6d00000000, 0x51b5d4f400000000, 0xc785d38300000000, + 0x56986c1300000000, 0xc0a86b6400000000, 0x7af962fd00000000, + 0xecc9658a00000000, 0x4f5c011400000000, 0xd96c066300000000, + 0x633d0ffa00000000, 0xf50d088d00000000, 0xc8206e3b00000000, + 0x5e10694c00000000, 0xe44160d500000000, 0x727167a200000000, + 0xd1e4033c00000000, 0x47d4044b00000000, 0xfd850dd200000000, + 0x6bb50aa500000000, 0xfaa8b53500000000, 0x6c98b24200000000, + 0xd6c9bbdb00000000, 0x40f9bcac00000000, 0xe36cd83200000000, + 0x755cdf4500000000, 0xcf0dd6dc00000000, 0x593dd1ab00000000, + 0xac30d92600000000, 0x3a00de5100000000, 0x8051d7c800000000, + 0x1661d0bf00000000, 0xb5f4b42100000000, 0x23c4b35600000000, + 0x9995bacf00000000, 0x0fa5bdb800000000, 0x9eb8022800000000, + 0x0888055f00000000, 0xb2d90cc600000000, 0x24e90bb100000000, + 0x877c6f2f00000000, 0x114c685800000000, 0xab1d61c100000000, + 0x3d2d66b600000000, 0x9041dc7600000000, 0x0671db0100000000, + 0xbc20d29800000000, 0x2a10d5ef00000000, 0x8985b17100000000, + 0x1fb5b60600000000, 0xa5e4bf9f00000000, 0x33d4b8e800000000, + 0xa2c9077800000000, 0x34f9000f00000000, 0x8ea8099600000000, + 0x18980ee100000000, 0xbb0d6a7f00000000, 0x2d3d6d0800000000, + 0x976c649100000000, 0x015c63e600000000, 0xf4516b6b00000000, + 0x62616c1c00000000, 0xd830658500000000, 0x4e0062f200000000, + 0xed95066c00000000, 0x7ba5011b00000000, 0xc1f4088200000000, + 0x57c40ff500000000, 0xc6d9b06500000000, 0x50e9b71200000000, + 0xeab8be8b00000000, 0x7c88b9fc00000000, 0xdf1ddd6200000000, + 0x492dda1500000000, 0xf37cd38c00000000, 0x654cd4fb00000000, + 0x5861b24d00000000, 0xce51b53a00000000, 0x7400bca300000000, + 0xe230bbd400000000, 0x41a5df4a00000000, 0xd795d83d00000000, + 0x6dc4d1a400000000, 0xfbf4d6d300000000, 0x6ae9694300000000, + 0xfcd96e3400000000, 0x468867ad00000000, 0xd0b860da00000000, + 0x732d044400000000, 0xe51d033300000000, 0x5f4c0aaa00000000, + 0xc97c0ddd00000000, 0x3c71055000000000, 0xaa41022700000000, + 0x10100bbe00000000, 0x86200cc900000000, 0x25b5685700000000, + 0xb3856f2000000000, 0x09d466b900000000, 0x9fe461ce00000000, + 0x0ef9de5e00000000, 0x98c9d92900000000, 0x2298d0b000000000, + 0xb4a8d7c700000000, 0x173db35900000000, 0x810db42e00000000, + 0x3b5cbdb700000000, 0xad6cbac000000000, 0x2083b8ed00000000, + 0xb6b3bf9a00000000, 0x0ce2b60300000000, 0x9ad2b17400000000, + 0x3947d5ea00000000, 0xaf77d29d00000000, 0x1526db0400000000, + 0x8316dc7300000000, 0x120b63e300000000, 0x843b649400000000, + 0x3e6a6d0d00000000, 0xa85a6a7a00000000, 0x0bcf0ee400000000, + 0x9dff099300000000, 0x27ae000a00000000, 0xb19e077d00000000, + 0x44930ff000000000, 0xd2a3088700000000, 0x68f2011e00000000, + 0xfec2066900000000, 0x5d5762f700000000, 0xcb67658000000000, + 0x71366c1900000000, 0xe7066b6e00000000, 0x761bd4fe00000000, + 0xe02bd38900000000, 0x5a7ada1000000000, 0xcc4add6700000000, + 0x6fdfb9f900000000, 0xf9efbe8e00000000, 0x43beb71700000000, + 0xd58eb06000000000, 0xe8a3d6d600000000, 0x7e93d1a100000000, + 0xc4c2d83800000000, 0x52f2df4f00000000, 0xf167bbd100000000, + 0x6757bca600000000, 0xdd06b53f00000000, 0x4b36b24800000000, + 0xda2b0dd800000000, 0x4c1b0aaf00000000, 0xf64a033600000000, + 0x607a044100000000, 0xc3ef60df00000000, 0x55df67a800000000, + 0xef8e6e3100000000, 0x79be694600000000, 0x8cb361cb00000000, + 0x1a8366bc00000000, 0xa0d26f2500000000, 0x36e2685200000000, + 0x95770ccc00000000, 0x03470bbb00000000, 0xb916022200000000, + 0x2f26055500000000, 0xbe3bbac500000000, 0x280bbdb200000000, + 0x925ab42b00000000, 0x046ab35c00000000, 0xa7ffd7c200000000, + 0x31cfd0b500000000, 0x8b9ed92c00000000, 0x1daede5b00000000, + 0xb0c2649b00000000, 0x26f263ec00000000, 0x9ca36a7500000000, + 0x0a936d0200000000, 0xa906099c00000000, 0x3f360eeb00000000, + 0x8567077200000000, 0x1357000500000000, 0x824abf9500000000, + 0x147ab8e200000000, 0xae2bb17b00000000, 0x381bb60c00000000, + 0x9b8ed29200000000, 0x0dbed5e500000000, 0xb7efdc7c00000000, + 0x21dfdb0b00000000, 0xd4d2d38600000000, 0x42e2d4f100000000, + 0xf8b3dd6800000000, 0x6e83da1f00000000, 0xcd16be8100000000, + 0x5b26b9f600000000, 0xe177b06f00000000, 0x7747b71800000000, + 0xe65a088800000000, 0x706a0fff00000000, 0xca3b066600000000, + 0x5c0b011100000000, 0xff9e658f00000000, 0x69ae62f800000000, + 0xd3ff6b6100000000, 0x45cf6c1600000000, 0x78e20aa000000000, + 0xeed20dd700000000, 0x5483044e00000000, 0xc2b3033900000000, + 0x612667a700000000, 0xf71660d000000000, 0x4d47694900000000, + 0xdb776e3e00000000, 0x4a6ad1ae00000000, 0xdc5ad6d900000000, + 0x660bdf4000000000, 0xf03bd83700000000, 0x53aebca900000000, + 0xc59ebbde00000000, 0x7fcfb24700000000, 0xe9ffb53000000000, + 0x1cf2bdbd00000000, 0x8ac2baca00000000, 0x3093b35300000000, + 0xa6a3b42400000000, 0x0536d0ba00000000, 0x9306d7cd00000000, + 0x2957de5400000000, 0xbf67d92300000000, 0x2e7a66b300000000, + 0xb84a61c400000000, 0x021b685d00000000, 0x942b6f2a00000000, + 0x37be0bb400000000, 0xa18e0cc300000000, 0x1bdf055a00000000, + 0x8def022d00000000}; + +#else /* W == 4 */ + +local const z_word_t FAR crc_big_table[] = { + 0x00000000, 0x96300777, 0x2c610eee, 0xba510999, 0x19c46d07, + 0x8ff46a70, 0x35a563e9, 0xa395649e, 0x3288db0e, 0xa4b8dc79, + 0x1ee9d5e0, 0x88d9d297, 0x2b4cb609, 0xbd7cb17e, 0x072db8e7, + 0x911dbf90, 0x6410b71d, 0xf220b06a, 0x4871b9f3, 0xde41be84, + 0x7dd4da1a, 0xebe4dd6d, 0x51b5d4f4, 0xc785d383, 0x56986c13, + 0xc0a86b64, 0x7af962fd, 0xecc9658a, 0x4f5c0114, 0xd96c0663, + 0x633d0ffa, 0xf50d088d, 0xc8206e3b, 0x5e10694c, 0xe44160d5, + 0x727167a2, 0xd1e4033c, 0x47d4044b, 0xfd850dd2, 0x6bb50aa5, + 0xfaa8b535, 0x6c98b242, 0xd6c9bbdb, 0x40f9bcac, 0xe36cd832, + 0x755cdf45, 0xcf0dd6dc, 0x593dd1ab, 0xac30d926, 0x3a00de51, + 0x8051d7c8, 0x1661d0bf, 0xb5f4b421, 0x23c4b356, 0x9995bacf, + 0x0fa5bdb8, 0x9eb80228, 0x0888055f, 0xb2d90cc6, 0x24e90bb1, + 0x877c6f2f, 0x114c6858, 0xab1d61c1, 0x3d2d66b6, 0x9041dc76, + 0x0671db01, 0xbc20d298, 0x2a10d5ef, 0x8985b171, 0x1fb5b606, + 0xa5e4bf9f, 0x33d4b8e8, 0xa2c90778, 0x34f9000f, 0x8ea80996, + 0x18980ee1, 0xbb0d6a7f, 0x2d3d6d08, 0x976c6491, 0x015c63e6, + 0xf4516b6b, 0x62616c1c, 0xd8306585, 0x4e0062f2, 0xed95066c, + 0x7ba5011b, 0xc1f40882, 0x57c40ff5, 0xc6d9b065, 0x50e9b712, + 0xeab8be8b, 0x7c88b9fc, 0xdf1ddd62, 0x492dda15, 0xf37cd38c, + 0x654cd4fb, 0x5861b24d, 0xce51b53a, 0x7400bca3, 0xe230bbd4, + 0x41a5df4a, 0xd795d83d, 0x6dc4d1a4, 0xfbf4d6d3, 0x6ae96943, + 0xfcd96e34, 0x468867ad, 0xd0b860da, 0x732d0444, 0xe51d0333, + 0x5f4c0aaa, 0xc97c0ddd, 0x3c710550, 0xaa410227, 0x10100bbe, + 0x86200cc9, 0x25b56857, 0xb3856f20, 0x09d466b9, 0x9fe461ce, + 0x0ef9de5e, 0x98c9d929, 0x2298d0b0, 0xb4a8d7c7, 0x173db359, + 0x810db42e, 0x3b5cbdb7, 0xad6cbac0, 0x2083b8ed, 0xb6b3bf9a, + 0x0ce2b603, 0x9ad2b174, 0x3947d5ea, 0xaf77d29d, 0x1526db04, + 0x8316dc73, 0x120b63e3, 0x843b6494, 0x3e6a6d0d, 0xa85a6a7a, + 0x0bcf0ee4, 0x9dff0993, 0x27ae000a, 0xb19e077d, 0x44930ff0, + 0xd2a30887, 0x68f2011e, 0xfec20669, 0x5d5762f7, 0xcb676580, + 0x71366c19, 0xe7066b6e, 0x761bd4fe, 0xe02bd389, 0x5a7ada10, + 0xcc4add67, 0x6fdfb9f9, 0xf9efbe8e, 0x43beb717, 0xd58eb060, + 0xe8a3d6d6, 0x7e93d1a1, 0xc4c2d838, 0x52f2df4f, 0xf167bbd1, + 0x6757bca6, 0xdd06b53f, 0x4b36b248, 0xda2b0dd8, 0x4c1b0aaf, + 0xf64a0336, 0x607a0441, 0xc3ef60df, 0x55df67a8, 0xef8e6e31, + 0x79be6946, 0x8cb361cb, 0x1a8366bc, 0xa0d26f25, 0x36e26852, + 0x95770ccc, 0x03470bbb, 0xb9160222, 0x2f260555, 0xbe3bbac5, + 0x280bbdb2, 0x925ab42b, 0x046ab35c, 0xa7ffd7c2, 0x31cfd0b5, + 0x8b9ed92c, 0x1daede5b, 0xb0c2649b, 0x26f263ec, 0x9ca36a75, + 0x0a936d02, 0xa906099c, 0x3f360eeb, 0x85670772, 0x13570005, + 0x824abf95, 0x147ab8e2, 0xae2bb17b, 0x381bb60c, 0x9b8ed292, + 0x0dbed5e5, 0xb7efdc7c, 0x21dfdb0b, 0xd4d2d386, 0x42e2d4f1, + 0xf8b3dd68, 0x6e83da1f, 0xcd16be81, 0x5b26b9f6, 0xe177b06f, + 0x7747b718, 0xe65a0888, 0x706a0fff, 0xca3b0666, 0x5c0b0111, + 0xff9e658f, 0x69ae62f8, 0xd3ff6b61, 0x45cf6c16, 0x78e20aa0, + 0xeed20dd7, 0x5483044e, 0xc2b30339, 0x612667a7, 0xf71660d0, + 0x4d476949, 0xdb776e3e, 0x4a6ad1ae, 0xdc5ad6d9, 0x660bdf40, + 0xf03bd837, 0x53aebca9, 0xc59ebbde, 0x7fcfb247, 0xe9ffb530, + 0x1cf2bdbd, 0x8ac2baca, 0x3093b353, 0xa6a3b424, 0x0536d0ba, + 0x9306d7cd, 0x2957de54, 0xbf67d923, 0x2e7a66b3, 0xb84a61c4, + 0x021b685d, 0x942b6f2a, 0x37be0bb4, 0xa18e0cc3, 0x1bdf055a, + 0x8def022d}; + +#endif + +#if N == 1 + +#if W == 8 + +local const z_crc_t FAR crc_braid_table[][256] = { + {0x00000000, 0xccaa009e, 0x4225077d, 0x8e8f07e3, 0x844a0efa, + 0x48e00e64, 0xc66f0987, 0x0ac50919, 0xd3e51bb5, 0x1f4f1b2b, + 0x91c01cc8, 0x5d6a1c56, 0x57af154f, 0x9b0515d1, 0x158a1232, + 0xd92012ac, 0x7cbb312b, 0xb01131b5, 0x3e9e3656, 0xf23436c8, + 0xf8f13fd1, 0x345b3f4f, 0xbad438ac, 0x767e3832, 0xaf5e2a9e, + 0x63f42a00, 0xed7b2de3, 0x21d12d7d, 0x2b142464, 0xe7be24fa, + 0x69312319, 0xa59b2387, 0xf9766256, 0x35dc62c8, 0xbb53652b, + 0x77f965b5, 0x7d3c6cac, 0xb1966c32, 0x3f196bd1, 0xf3b36b4f, + 0x2a9379e3, 0xe639797d, 0x68b67e9e, 0xa41c7e00, 0xaed97719, + 0x62737787, 0xecfc7064, 0x205670fa, 0x85cd537d, 0x496753e3, + 0xc7e85400, 0x0b42549e, 0x01875d87, 0xcd2d5d19, 0x43a25afa, + 0x8f085a64, 0x562848c8, 0x9a824856, 0x140d4fb5, 0xd8a74f2b, + 0xd2624632, 0x1ec846ac, 0x9047414f, 0x5ced41d1, 0x299dc2ed, + 0xe537c273, 0x6bb8c590, 0xa712c50e, 0xadd7cc17, 0x617dcc89, + 0xeff2cb6a, 0x2358cbf4, 0xfa78d958, 0x36d2d9c6, 0xb85dde25, + 0x74f7debb, 0x7e32d7a2, 0xb298d73c, 0x3c17d0df, 0xf0bdd041, + 0x5526f3c6, 0x998cf358, 0x1703f4bb, 0xdba9f425, 0xd16cfd3c, + 0x1dc6fda2, 0x9349fa41, 0x5fe3fadf, 0x86c3e873, 0x4a69e8ed, + 0xc4e6ef0e, 0x084cef90, 0x0289e689, 0xce23e617, 0x40ace1f4, + 0x8c06e16a, 0xd0eba0bb, 0x1c41a025, 0x92cea7c6, 0x5e64a758, + 0x54a1ae41, 0x980baedf, 0x1684a93c, 0xda2ea9a2, 0x030ebb0e, + 0xcfa4bb90, 0x412bbc73, 0x8d81bced, 0x8744b5f4, 0x4beeb56a, + 0xc561b289, 0x09cbb217, 0xac509190, 0x60fa910e, 0xee7596ed, + 0x22df9673, 0x281a9f6a, 0xe4b09ff4, 0x6a3f9817, 0xa6959889, + 0x7fb58a25, 0xb31f8abb, 0x3d908d58, 0xf13a8dc6, 0xfbff84df, + 0x37558441, 0xb9da83a2, 0x7570833c, 0x533b85da, 0x9f918544, + 0x111e82a7, 0xddb48239, 0xd7718b20, 0x1bdb8bbe, 0x95548c5d, + 0x59fe8cc3, 0x80de9e6f, 0x4c749ef1, 0xc2fb9912, 0x0e51998c, + 0x04949095, 0xc83e900b, 0x46b197e8, 0x8a1b9776, 0x2f80b4f1, + 0xe32ab46f, 0x6da5b38c, 0xa10fb312, 0xabcaba0b, 0x6760ba95, + 0xe9efbd76, 0x2545bde8, 0xfc65af44, 0x30cfafda, 0xbe40a839, + 0x72eaa8a7, 0x782fa1be, 0xb485a120, 0x3a0aa6c3, 0xf6a0a65d, + 0xaa4de78c, 0x66e7e712, 0xe868e0f1, 0x24c2e06f, 0x2e07e976, + 0xe2ade9e8, 0x6c22ee0b, 0xa088ee95, 0x79a8fc39, 0xb502fca7, + 0x3b8dfb44, 0xf727fbda, 0xfde2f2c3, 0x3148f25d, 0xbfc7f5be, + 0x736df520, 0xd6f6d6a7, 0x1a5cd639, 0x94d3d1da, 0x5879d144, + 0x52bcd85d, 0x9e16d8c3, 0x1099df20, 0xdc33dfbe, 0x0513cd12, + 0xc9b9cd8c, 0x4736ca6f, 0x8b9ccaf1, 0x8159c3e8, 0x4df3c376, + 0xc37cc495, 0x0fd6c40b, 0x7aa64737, 0xb60c47a9, 0x3883404a, + 0xf42940d4, 0xfeec49cd, 0x32464953, 0xbcc94eb0, 0x70634e2e, + 0xa9435c82, 0x65e95c1c, 0xeb665bff, 0x27cc5b61, 0x2d095278, + 0xe1a352e6, 0x6f2c5505, 0xa386559b, 0x061d761c, 0xcab77682, + 0x44387161, 0x889271ff, 0x825778e6, 0x4efd7878, 0xc0727f9b, + 0x0cd87f05, 0xd5f86da9, 0x19526d37, 0x97dd6ad4, 0x5b776a4a, + 0x51b26353, 0x9d1863cd, 0x1397642e, 0xdf3d64b0, 0x83d02561, + 0x4f7a25ff, 0xc1f5221c, 0x0d5f2282, 0x079a2b9b, 0xcb302b05, + 0x45bf2ce6, 0x89152c78, 0x50353ed4, 0x9c9f3e4a, 0x121039a9, + 0xdeba3937, 0xd47f302e, 0x18d530b0, 0x965a3753, 0x5af037cd, + 0xff6b144a, 0x33c114d4, 0xbd4e1337, 0x71e413a9, 0x7b211ab0, + 0xb78b1a2e, 0x39041dcd, 0xf5ae1d53, 0x2c8e0fff, 0xe0240f61, + 0x6eab0882, 0xa201081c, 0xa8c40105, 0x646e019b, 0xeae10678, + 0x264b06e6}, + {0x00000000, 0xa6770bb4, 0x979f1129, 0x31e81a9d, 0xf44f2413, + 0x52382fa7, 0x63d0353a, 0xc5a73e8e, 0x33ef4e67, 0x959845d3, + 0xa4705f4e, 0x020754fa, 0xc7a06a74, 0x61d761c0, 0x503f7b5d, + 0xf64870e9, 0x67de9cce, 0xc1a9977a, 0xf0418de7, 0x56368653, + 0x9391b8dd, 0x35e6b369, 0x040ea9f4, 0xa279a240, 0x5431d2a9, + 0xf246d91d, 0xc3aec380, 0x65d9c834, 0xa07ef6ba, 0x0609fd0e, + 0x37e1e793, 0x9196ec27, 0xcfbd399c, 0x69ca3228, 0x582228b5, + 0xfe552301, 0x3bf21d8f, 0x9d85163b, 0xac6d0ca6, 0x0a1a0712, + 0xfc5277fb, 0x5a257c4f, 0x6bcd66d2, 0xcdba6d66, 0x081d53e8, + 0xae6a585c, 0x9f8242c1, 0x39f54975, 0xa863a552, 0x0e14aee6, + 0x3ffcb47b, 0x998bbfcf, 0x5c2c8141, 0xfa5b8af5, 0xcbb39068, + 0x6dc49bdc, 0x9b8ceb35, 0x3dfbe081, 0x0c13fa1c, 0xaa64f1a8, + 0x6fc3cf26, 0xc9b4c492, 0xf85cde0f, 0x5e2bd5bb, 0x440b7579, + 0xe27c7ecd, 0xd3946450, 0x75e36fe4, 0xb044516a, 0x16335ade, + 0x27db4043, 0x81ac4bf7, 0x77e43b1e, 0xd19330aa, 0xe07b2a37, + 0x460c2183, 0x83ab1f0d, 0x25dc14b9, 0x14340e24, 0xb2430590, + 0x23d5e9b7, 0x85a2e203, 0xb44af89e, 0x123df32a, 0xd79acda4, + 0x71edc610, 0x4005dc8d, 0xe672d739, 0x103aa7d0, 0xb64dac64, + 0x87a5b6f9, 0x21d2bd4d, 0xe47583c3, 0x42028877, 0x73ea92ea, + 0xd59d995e, 0x8bb64ce5, 0x2dc14751, 0x1c295dcc, 0xba5e5678, + 0x7ff968f6, 0xd98e6342, 0xe86679df, 0x4e11726b, 0xb8590282, + 0x1e2e0936, 0x2fc613ab, 0x89b1181f, 0x4c162691, 0xea612d25, + 0xdb8937b8, 0x7dfe3c0c, 0xec68d02b, 0x4a1fdb9f, 0x7bf7c102, + 0xdd80cab6, 0x1827f438, 0xbe50ff8c, 0x8fb8e511, 0x29cfeea5, + 0xdf879e4c, 0x79f095f8, 0x48188f65, 0xee6f84d1, 0x2bc8ba5f, + 0x8dbfb1eb, 0xbc57ab76, 0x1a20a0c2, 0x8816eaf2, 0x2e61e146, + 0x1f89fbdb, 0xb9fef06f, 0x7c59cee1, 0xda2ec555, 0xebc6dfc8, + 0x4db1d47c, 0xbbf9a495, 0x1d8eaf21, 0x2c66b5bc, 0x8a11be08, + 0x4fb68086, 0xe9c18b32, 0xd82991af, 0x7e5e9a1b, 0xefc8763c, + 0x49bf7d88, 0x78576715, 0xde206ca1, 0x1b87522f, 0xbdf0599b, + 0x8c184306, 0x2a6f48b2, 0xdc27385b, 0x7a5033ef, 0x4bb82972, + 0xedcf22c6, 0x28681c48, 0x8e1f17fc, 0xbff70d61, 0x198006d5, + 0x47abd36e, 0xe1dcd8da, 0xd034c247, 0x7643c9f3, 0xb3e4f77d, + 0x1593fcc9, 0x247be654, 0x820cede0, 0x74449d09, 0xd23396bd, + 0xe3db8c20, 0x45ac8794, 0x800bb91a, 0x267cb2ae, 0x1794a833, + 0xb1e3a387, 0x20754fa0, 0x86024414, 0xb7ea5e89, 0x119d553d, + 0xd43a6bb3, 0x724d6007, 0x43a57a9a, 0xe5d2712e, 0x139a01c7, + 0xb5ed0a73, 0x840510ee, 0x22721b5a, 0xe7d525d4, 0x41a22e60, + 0x704a34fd, 0xd63d3f49, 0xcc1d9f8b, 0x6a6a943f, 0x5b828ea2, + 0xfdf58516, 0x3852bb98, 0x9e25b02c, 0xafcdaab1, 0x09baa105, + 0xfff2d1ec, 0x5985da58, 0x686dc0c5, 0xce1acb71, 0x0bbdf5ff, + 0xadcafe4b, 0x9c22e4d6, 0x3a55ef62, 0xabc30345, 0x0db408f1, + 0x3c5c126c, 0x9a2b19d8, 0x5f8c2756, 0xf9fb2ce2, 0xc813367f, + 0x6e643dcb, 0x982c4d22, 0x3e5b4696, 0x0fb35c0b, 0xa9c457bf, + 0x6c636931, 0xca146285, 0xfbfc7818, 0x5d8b73ac, 0x03a0a617, + 0xa5d7ada3, 0x943fb73e, 0x3248bc8a, 0xf7ef8204, 0x519889b0, + 0x6070932d, 0xc6079899, 0x304fe870, 0x9638e3c4, 0xa7d0f959, + 0x01a7f2ed, 0xc400cc63, 0x6277c7d7, 0x539fdd4a, 0xf5e8d6fe, + 0x647e3ad9, 0xc209316d, 0xf3e12bf0, 0x55962044, 0x90311eca, + 0x3646157e, 0x07ae0fe3, 0xa1d90457, 0x579174be, 0xf1e67f0a, + 0xc00e6597, 0x66796e23, 0xa3de50ad, 0x05a95b19, 0x34414184, + 0x92364a30}, + {0x00000000, 0xcb5cd3a5, 0x4dc8a10b, 0x869472ae, 0x9b914216, + 0x50cd91b3, 0xd659e31d, 0x1d0530b8, 0xec53826d, 0x270f51c8, + 0xa19b2366, 0x6ac7f0c3, 0x77c2c07b, 0xbc9e13de, 0x3a0a6170, + 0xf156b2d5, 0x03d6029b, 0xc88ad13e, 0x4e1ea390, 0x85427035, + 0x9847408d, 0x531b9328, 0xd58fe186, 0x1ed33223, 0xef8580f6, + 0x24d95353, 0xa24d21fd, 0x6911f258, 0x7414c2e0, 0xbf481145, + 0x39dc63eb, 0xf280b04e, 0x07ac0536, 0xccf0d693, 0x4a64a43d, + 0x81387798, 0x9c3d4720, 0x57619485, 0xd1f5e62b, 0x1aa9358e, + 0xebff875b, 0x20a354fe, 0xa6372650, 0x6d6bf5f5, 0x706ec54d, + 0xbb3216e8, 0x3da66446, 0xf6fab7e3, 0x047a07ad, 0xcf26d408, + 0x49b2a6a6, 0x82ee7503, 0x9feb45bb, 0x54b7961e, 0xd223e4b0, + 0x197f3715, 0xe82985c0, 0x23755665, 0xa5e124cb, 0x6ebdf76e, + 0x73b8c7d6, 0xb8e41473, 0x3e7066dd, 0xf52cb578, 0x0f580a6c, + 0xc404d9c9, 0x4290ab67, 0x89cc78c2, 0x94c9487a, 0x5f959bdf, + 0xd901e971, 0x125d3ad4, 0xe30b8801, 0x28575ba4, 0xaec3290a, + 0x659ffaaf, 0x789aca17, 0xb3c619b2, 0x35526b1c, 0xfe0eb8b9, + 0x0c8e08f7, 0xc7d2db52, 0x4146a9fc, 0x8a1a7a59, 0x971f4ae1, + 0x5c439944, 0xdad7ebea, 0x118b384f, 0xe0dd8a9a, 0x2b81593f, + 0xad152b91, 0x6649f834, 0x7b4cc88c, 0xb0101b29, 0x36846987, + 0xfdd8ba22, 0x08f40f5a, 0xc3a8dcff, 0x453cae51, 0x8e607df4, + 0x93654d4c, 0x58399ee9, 0xdeadec47, 0x15f13fe2, 0xe4a78d37, + 0x2ffb5e92, 0xa96f2c3c, 0x6233ff99, 0x7f36cf21, 0xb46a1c84, + 0x32fe6e2a, 0xf9a2bd8f, 0x0b220dc1, 0xc07ede64, 0x46eaacca, + 0x8db67f6f, 0x90b34fd7, 0x5bef9c72, 0xdd7beedc, 0x16273d79, + 0xe7718fac, 0x2c2d5c09, 0xaab92ea7, 0x61e5fd02, 0x7ce0cdba, + 0xb7bc1e1f, 0x31286cb1, 0xfa74bf14, 0x1eb014d8, 0xd5ecc77d, + 0x5378b5d3, 0x98246676, 0x852156ce, 0x4e7d856b, 0xc8e9f7c5, + 0x03b52460, 0xf2e396b5, 0x39bf4510, 0xbf2b37be, 0x7477e41b, + 0x6972d4a3, 0xa22e0706, 0x24ba75a8, 0xefe6a60d, 0x1d661643, + 0xd63ac5e6, 0x50aeb748, 0x9bf264ed, 0x86f75455, 0x4dab87f0, + 0xcb3ff55e, 0x006326fb, 0xf135942e, 0x3a69478b, 0xbcfd3525, + 0x77a1e680, 0x6aa4d638, 0xa1f8059d, 0x276c7733, 0xec30a496, + 0x191c11ee, 0xd240c24b, 0x54d4b0e5, 0x9f886340, 0x828d53f8, + 0x49d1805d, 0xcf45f2f3, 0x04192156, 0xf54f9383, 0x3e134026, + 0xb8873288, 0x73dbe12d, 0x6eded195, 0xa5820230, 0x2316709e, + 0xe84aa33b, 0x1aca1375, 0xd196c0d0, 0x5702b27e, 0x9c5e61db, + 0x815b5163, 0x4a0782c6, 0xcc93f068, 0x07cf23cd, 0xf6999118, + 0x3dc542bd, 0xbb513013, 0x700de3b6, 0x6d08d30e, 0xa65400ab, + 0x20c07205, 0xeb9ca1a0, 0x11e81eb4, 0xdab4cd11, 0x5c20bfbf, + 0x977c6c1a, 0x8a795ca2, 0x41258f07, 0xc7b1fda9, 0x0ced2e0c, + 0xfdbb9cd9, 0x36e74f7c, 0xb0733dd2, 0x7b2fee77, 0x662adecf, + 0xad760d6a, 0x2be27fc4, 0xe0beac61, 0x123e1c2f, 0xd962cf8a, + 0x5ff6bd24, 0x94aa6e81, 0x89af5e39, 0x42f38d9c, 0xc467ff32, + 0x0f3b2c97, 0xfe6d9e42, 0x35314de7, 0xb3a53f49, 0x78f9ecec, + 0x65fcdc54, 0xaea00ff1, 0x28347d5f, 0xe368aefa, 0x16441b82, + 0xdd18c827, 0x5b8cba89, 0x90d0692c, 0x8dd55994, 0x46898a31, + 0xc01df89f, 0x0b412b3a, 0xfa1799ef, 0x314b4a4a, 0xb7df38e4, + 0x7c83eb41, 0x6186dbf9, 0xaada085c, 0x2c4e7af2, 0xe712a957, + 0x15921919, 0xdececabc, 0x585ab812, 0x93066bb7, 0x8e035b0f, + 0x455f88aa, 0xc3cbfa04, 0x089729a1, 0xf9c19b74, 0x329d48d1, + 0xb4093a7f, 0x7f55e9da, 0x6250d962, 0xa90c0ac7, 0x2f987869, + 0xe4c4abcc}, + {0x00000000, 0x3d6029b0, 0x7ac05360, 0x47a07ad0, 0xf580a6c0, + 0xc8e08f70, 0x8f40f5a0, 0xb220dc10, 0x30704bc1, 0x0d106271, + 0x4ab018a1, 0x77d03111, 0xc5f0ed01, 0xf890c4b1, 0xbf30be61, + 0x825097d1, 0x60e09782, 0x5d80be32, 0x1a20c4e2, 0x2740ed52, + 0x95603142, 0xa80018f2, 0xefa06222, 0xd2c04b92, 0x5090dc43, + 0x6df0f5f3, 0x2a508f23, 0x1730a693, 0xa5107a83, 0x98705333, + 0xdfd029e3, 0xe2b00053, 0xc1c12f04, 0xfca106b4, 0xbb017c64, + 0x866155d4, 0x344189c4, 0x0921a074, 0x4e81daa4, 0x73e1f314, + 0xf1b164c5, 0xccd14d75, 0x8b7137a5, 0xb6111e15, 0x0431c205, + 0x3951ebb5, 0x7ef19165, 0x4391b8d5, 0xa121b886, 0x9c419136, + 0xdbe1ebe6, 0xe681c256, 0x54a11e46, 0x69c137f6, 0x2e614d26, + 0x13016496, 0x9151f347, 0xac31daf7, 0xeb91a027, 0xd6f18997, + 0x64d15587, 0x59b17c37, 0x1e1106e7, 0x23712f57, 0x58f35849, + 0x659371f9, 0x22330b29, 0x1f532299, 0xad73fe89, 0x9013d739, + 0xd7b3ade9, 0xead38459, 0x68831388, 0x55e33a38, 0x124340e8, + 0x2f236958, 0x9d03b548, 0xa0639cf8, 0xe7c3e628, 0xdaa3cf98, + 0x3813cfcb, 0x0573e67b, 0x42d39cab, 0x7fb3b51b, 0xcd93690b, + 0xf0f340bb, 0xb7533a6b, 0x8a3313db, 0x0863840a, 0x3503adba, + 0x72a3d76a, 0x4fc3feda, 0xfde322ca, 0xc0830b7a, 0x872371aa, + 0xba43581a, 0x9932774d, 0xa4525efd, 0xe3f2242d, 0xde920d9d, + 0x6cb2d18d, 0x51d2f83d, 0x167282ed, 0x2b12ab5d, 0xa9423c8c, + 0x9422153c, 0xd3826fec, 0xeee2465c, 0x5cc29a4c, 0x61a2b3fc, + 0x2602c92c, 0x1b62e09c, 0xf9d2e0cf, 0xc4b2c97f, 0x8312b3af, + 0xbe729a1f, 0x0c52460f, 0x31326fbf, 0x7692156f, 0x4bf23cdf, + 0xc9a2ab0e, 0xf4c282be, 0xb362f86e, 0x8e02d1de, 0x3c220dce, + 0x0142247e, 0x46e25eae, 0x7b82771e, 0xb1e6b092, 0x8c869922, + 0xcb26e3f2, 0xf646ca42, 0x44661652, 0x79063fe2, 0x3ea64532, + 0x03c66c82, 0x8196fb53, 0xbcf6d2e3, 0xfb56a833, 0xc6368183, + 0x74165d93, 0x49767423, 0x0ed60ef3, 0x33b62743, 0xd1062710, + 0xec660ea0, 0xabc67470, 0x96a65dc0, 0x248681d0, 0x19e6a860, + 0x5e46d2b0, 0x6326fb00, 0xe1766cd1, 0xdc164561, 0x9bb63fb1, + 0xa6d61601, 0x14f6ca11, 0x2996e3a1, 0x6e369971, 0x5356b0c1, + 0x70279f96, 0x4d47b626, 0x0ae7ccf6, 0x3787e546, 0x85a73956, + 0xb8c710e6, 0xff676a36, 0xc2074386, 0x4057d457, 0x7d37fde7, + 0x3a978737, 0x07f7ae87, 0xb5d77297, 0x88b75b27, 0xcf1721f7, + 0xf2770847, 0x10c70814, 0x2da721a4, 0x6a075b74, 0x576772c4, + 0xe547aed4, 0xd8278764, 0x9f87fdb4, 0xa2e7d404, 0x20b743d5, + 0x1dd76a65, 0x5a7710b5, 0x67173905, 0xd537e515, 0xe857cca5, + 0xaff7b675, 0x92979fc5, 0xe915e8db, 0xd475c16b, 0x93d5bbbb, + 0xaeb5920b, 0x1c954e1b, 0x21f567ab, 0x66551d7b, 0x5b3534cb, + 0xd965a31a, 0xe4058aaa, 0xa3a5f07a, 0x9ec5d9ca, 0x2ce505da, + 0x11852c6a, 0x562556ba, 0x6b457f0a, 0x89f57f59, 0xb49556e9, + 0xf3352c39, 0xce550589, 0x7c75d999, 0x4115f029, 0x06b58af9, + 0x3bd5a349, 0xb9853498, 0x84e51d28, 0xc34567f8, 0xfe254e48, + 0x4c059258, 0x7165bbe8, 0x36c5c138, 0x0ba5e888, 0x28d4c7df, + 0x15b4ee6f, 0x521494bf, 0x6f74bd0f, 0xdd54611f, 0xe03448af, + 0xa794327f, 0x9af41bcf, 0x18a48c1e, 0x25c4a5ae, 0x6264df7e, + 0x5f04f6ce, 0xed242ade, 0xd044036e, 0x97e479be, 0xaa84500e, + 0x4834505d, 0x755479ed, 0x32f4033d, 0x0f942a8d, 0xbdb4f69d, + 0x80d4df2d, 0xc774a5fd, 0xfa148c4d, 0x78441b9c, 0x4524322c, + 0x028448fc, 0x3fe4614c, 0x8dc4bd5c, 0xb0a494ec, 0xf704ee3c, + 0xca64c78c}, + {0x00000000, 0xb8bc6765, 0xaa09c88b, 0x12b5afee, 0x8f629757, + 0x37def032, 0x256b5fdc, 0x9dd738b9, 0xc5b428ef, 0x7d084f8a, + 0x6fbde064, 0xd7018701, 0x4ad6bfb8, 0xf26ad8dd, 0xe0df7733, + 0x58631056, 0x5019579f, 0xe8a530fa, 0xfa109f14, 0x42acf871, + 0xdf7bc0c8, 0x67c7a7ad, 0x75720843, 0xcdce6f26, 0x95ad7f70, + 0x2d111815, 0x3fa4b7fb, 0x8718d09e, 0x1acfe827, 0xa2738f42, + 0xb0c620ac, 0x087a47c9, 0xa032af3e, 0x188ec85b, 0x0a3b67b5, + 0xb28700d0, 0x2f503869, 0x97ec5f0c, 0x8559f0e2, 0x3de59787, + 0x658687d1, 0xdd3ae0b4, 0xcf8f4f5a, 0x7733283f, 0xeae41086, + 0x525877e3, 0x40edd80d, 0xf851bf68, 0xf02bf8a1, 0x48979fc4, + 0x5a22302a, 0xe29e574f, 0x7f496ff6, 0xc7f50893, 0xd540a77d, + 0x6dfcc018, 0x359fd04e, 0x8d23b72b, 0x9f9618c5, 0x272a7fa0, + 0xbafd4719, 0x0241207c, 0x10f48f92, 0xa848e8f7, 0x9b14583d, + 0x23a83f58, 0x311d90b6, 0x89a1f7d3, 0x1476cf6a, 0xaccaa80f, + 0xbe7f07e1, 0x06c36084, 0x5ea070d2, 0xe61c17b7, 0xf4a9b859, + 0x4c15df3c, 0xd1c2e785, 0x697e80e0, 0x7bcb2f0e, 0xc377486b, + 0xcb0d0fa2, 0x73b168c7, 0x6104c729, 0xd9b8a04c, 0x446f98f5, + 0xfcd3ff90, 0xee66507e, 0x56da371b, 0x0eb9274d, 0xb6054028, + 0xa4b0efc6, 0x1c0c88a3, 0x81dbb01a, 0x3967d77f, 0x2bd27891, + 0x936e1ff4, 0x3b26f703, 0x839a9066, 0x912f3f88, 0x299358ed, + 0xb4446054, 0x0cf80731, 0x1e4da8df, 0xa6f1cfba, 0xfe92dfec, + 0x462eb889, 0x549b1767, 0xec277002, 0x71f048bb, 0xc94c2fde, + 0xdbf98030, 0x6345e755, 0x6b3fa09c, 0xd383c7f9, 0xc1366817, + 0x798a0f72, 0xe45d37cb, 0x5ce150ae, 0x4e54ff40, 0xf6e89825, + 0xae8b8873, 0x1637ef16, 0x048240f8, 0xbc3e279d, 0x21e91f24, + 0x99557841, 0x8be0d7af, 0x335cb0ca, 0xed59b63b, 0x55e5d15e, + 0x47507eb0, 0xffec19d5, 0x623b216c, 0xda874609, 0xc832e9e7, + 0x708e8e82, 0x28ed9ed4, 0x9051f9b1, 0x82e4565f, 0x3a58313a, + 0xa78f0983, 0x1f336ee6, 0x0d86c108, 0xb53aa66d, 0xbd40e1a4, + 0x05fc86c1, 0x1749292f, 0xaff54e4a, 0x322276f3, 0x8a9e1196, + 0x982bbe78, 0x2097d91d, 0x78f4c94b, 0xc048ae2e, 0xd2fd01c0, + 0x6a4166a5, 0xf7965e1c, 0x4f2a3979, 0x5d9f9697, 0xe523f1f2, + 0x4d6b1905, 0xf5d77e60, 0xe762d18e, 0x5fdeb6eb, 0xc2098e52, + 0x7ab5e937, 0x680046d9, 0xd0bc21bc, 0x88df31ea, 0x3063568f, + 0x22d6f961, 0x9a6a9e04, 0x07bda6bd, 0xbf01c1d8, 0xadb46e36, + 0x15080953, 0x1d724e9a, 0xa5ce29ff, 0xb77b8611, 0x0fc7e174, + 0x9210d9cd, 0x2aacbea8, 0x38191146, 0x80a57623, 0xd8c66675, + 0x607a0110, 0x72cfaefe, 0xca73c99b, 0x57a4f122, 0xef189647, + 0xfdad39a9, 0x45115ecc, 0x764dee06, 0xcef18963, 0xdc44268d, + 0x64f841e8, 0xf92f7951, 0x41931e34, 0x5326b1da, 0xeb9ad6bf, + 0xb3f9c6e9, 0x0b45a18c, 0x19f00e62, 0xa14c6907, 0x3c9b51be, + 0x842736db, 0x96929935, 0x2e2efe50, 0x2654b999, 0x9ee8defc, + 0x8c5d7112, 0x34e11677, 0xa9362ece, 0x118a49ab, 0x033fe645, + 0xbb838120, 0xe3e09176, 0x5b5cf613, 0x49e959fd, 0xf1553e98, + 0x6c820621, 0xd43e6144, 0xc68bceaa, 0x7e37a9cf, 0xd67f4138, + 0x6ec3265d, 0x7c7689b3, 0xc4caeed6, 0x591dd66f, 0xe1a1b10a, + 0xf3141ee4, 0x4ba87981, 0x13cb69d7, 0xab770eb2, 0xb9c2a15c, + 0x017ec639, 0x9ca9fe80, 0x241599e5, 0x36a0360b, 0x8e1c516e, + 0x866616a7, 0x3eda71c2, 0x2c6fde2c, 0x94d3b949, 0x090481f0, + 0xb1b8e695, 0xa30d497b, 0x1bb12e1e, 0x43d23e48, 0xfb6e592d, + 0xe9dbf6c3, 0x516791a6, 0xccb0a91f, 0x740cce7a, 0x66b96194, + 0xde0506f1}, + {0x00000000, 0x01c26a37, 0x0384d46e, 0x0246be59, 0x0709a8dc, + 0x06cbc2eb, 0x048d7cb2, 0x054f1685, 0x0e1351b8, 0x0fd13b8f, + 0x0d9785d6, 0x0c55efe1, 0x091af964, 0x08d89353, 0x0a9e2d0a, + 0x0b5c473d, 0x1c26a370, 0x1de4c947, 0x1fa2771e, 0x1e601d29, + 0x1b2f0bac, 0x1aed619b, 0x18abdfc2, 0x1969b5f5, 0x1235f2c8, + 0x13f798ff, 0x11b126a6, 0x10734c91, 0x153c5a14, 0x14fe3023, + 0x16b88e7a, 0x177ae44d, 0x384d46e0, 0x398f2cd7, 0x3bc9928e, + 0x3a0bf8b9, 0x3f44ee3c, 0x3e86840b, 0x3cc03a52, 0x3d025065, + 0x365e1758, 0x379c7d6f, 0x35dac336, 0x3418a901, 0x3157bf84, + 0x3095d5b3, 0x32d36bea, 0x331101dd, 0x246be590, 0x25a98fa7, + 0x27ef31fe, 0x262d5bc9, 0x23624d4c, 0x22a0277b, 0x20e69922, + 0x2124f315, 0x2a78b428, 0x2bbade1f, 0x29fc6046, 0x283e0a71, + 0x2d711cf4, 0x2cb376c3, 0x2ef5c89a, 0x2f37a2ad, 0x709a8dc0, + 0x7158e7f7, 0x731e59ae, 0x72dc3399, 0x7793251c, 0x76514f2b, + 0x7417f172, 0x75d59b45, 0x7e89dc78, 0x7f4bb64f, 0x7d0d0816, + 0x7ccf6221, 0x798074a4, 0x78421e93, 0x7a04a0ca, 0x7bc6cafd, + 0x6cbc2eb0, 0x6d7e4487, 0x6f38fade, 0x6efa90e9, 0x6bb5866c, + 0x6a77ec5b, 0x68315202, 0x69f33835, 0x62af7f08, 0x636d153f, + 0x612bab66, 0x60e9c151, 0x65a6d7d4, 0x6464bde3, 0x662203ba, + 0x67e0698d, 0x48d7cb20, 0x4915a117, 0x4b531f4e, 0x4a917579, + 0x4fde63fc, 0x4e1c09cb, 0x4c5ab792, 0x4d98dda5, 0x46c49a98, + 0x4706f0af, 0x45404ef6, 0x448224c1, 0x41cd3244, 0x400f5873, + 0x4249e62a, 0x438b8c1d, 0x54f16850, 0x55330267, 0x5775bc3e, + 0x56b7d609, 0x53f8c08c, 0x523aaabb, 0x507c14e2, 0x51be7ed5, + 0x5ae239e8, 0x5b2053df, 0x5966ed86, 0x58a487b1, 0x5deb9134, + 0x5c29fb03, 0x5e6f455a, 0x5fad2f6d, 0xe1351b80, 0xe0f771b7, + 0xe2b1cfee, 0xe373a5d9, 0xe63cb35c, 0xe7fed96b, 0xe5b86732, + 0xe47a0d05, 0xef264a38, 0xeee4200f, 0xeca29e56, 0xed60f461, + 0xe82fe2e4, 0xe9ed88d3, 0xebab368a, 0xea695cbd, 0xfd13b8f0, + 0xfcd1d2c7, 0xfe976c9e, 0xff5506a9, 0xfa1a102c, 0xfbd87a1b, + 0xf99ec442, 0xf85cae75, 0xf300e948, 0xf2c2837f, 0xf0843d26, + 0xf1465711, 0xf4094194, 0xf5cb2ba3, 0xf78d95fa, 0xf64fffcd, + 0xd9785d60, 0xd8ba3757, 0xdafc890e, 0xdb3ee339, 0xde71f5bc, + 0xdfb39f8b, 0xddf521d2, 0xdc374be5, 0xd76b0cd8, 0xd6a966ef, + 0xd4efd8b6, 0xd52db281, 0xd062a404, 0xd1a0ce33, 0xd3e6706a, + 0xd2241a5d, 0xc55efe10, 0xc49c9427, 0xc6da2a7e, 0xc7184049, + 0xc25756cc, 0xc3953cfb, 0xc1d382a2, 0xc011e895, 0xcb4dafa8, + 0xca8fc59f, 0xc8c97bc6, 0xc90b11f1, 0xcc440774, 0xcd866d43, + 0xcfc0d31a, 0xce02b92d, 0x91af9640, 0x906dfc77, 0x922b422e, + 0x93e92819, 0x96a63e9c, 0x976454ab, 0x9522eaf2, 0x94e080c5, + 0x9fbcc7f8, 0x9e7eadcf, 0x9c381396, 0x9dfa79a1, 0x98b56f24, + 0x99770513, 0x9b31bb4a, 0x9af3d17d, 0x8d893530, 0x8c4b5f07, + 0x8e0de15e, 0x8fcf8b69, 0x8a809dec, 0x8b42f7db, 0x89044982, + 0x88c623b5, 0x839a6488, 0x82580ebf, 0x801eb0e6, 0x81dcdad1, + 0x8493cc54, 0x8551a663, 0x8717183a, 0x86d5720d, 0xa9e2d0a0, + 0xa820ba97, 0xaa6604ce, 0xaba46ef9, 0xaeeb787c, 0xaf29124b, + 0xad6fac12, 0xacadc625, 0xa7f18118, 0xa633eb2f, 0xa4755576, + 0xa5b73f41, 0xa0f829c4, 0xa13a43f3, 0xa37cfdaa, 0xa2be979d, + 0xb5c473d0, 0xb40619e7, 0xb640a7be, 0xb782cd89, 0xb2cddb0c, + 0xb30fb13b, 0xb1490f62, 0xb08b6555, 0xbbd72268, 0xba15485f, + 0xb853f606, 0xb9919c31, 0xbcde8ab4, 0xbd1ce083, 0xbf5a5eda, + 0xbe9834ed}, + {0x00000000, 0x191b3141, 0x32366282, 0x2b2d53c3, 0x646cc504, + 0x7d77f445, 0x565aa786, 0x4f4196c7, 0xc8d98a08, 0xd1c2bb49, + 0xfaefe88a, 0xe3f4d9cb, 0xacb54f0c, 0xb5ae7e4d, 0x9e832d8e, + 0x87981ccf, 0x4ac21251, 0x53d92310, 0x78f470d3, 0x61ef4192, + 0x2eaed755, 0x37b5e614, 0x1c98b5d7, 0x05838496, 0x821b9859, + 0x9b00a918, 0xb02dfadb, 0xa936cb9a, 0xe6775d5d, 0xff6c6c1c, + 0xd4413fdf, 0xcd5a0e9e, 0x958424a2, 0x8c9f15e3, 0xa7b24620, + 0xbea97761, 0xf1e8e1a6, 0xe8f3d0e7, 0xc3de8324, 0xdac5b265, + 0x5d5daeaa, 0x44469feb, 0x6f6bcc28, 0x7670fd69, 0x39316bae, + 0x202a5aef, 0x0b07092c, 0x121c386d, 0xdf4636f3, 0xc65d07b2, + 0xed705471, 0xf46b6530, 0xbb2af3f7, 0xa231c2b6, 0x891c9175, + 0x9007a034, 0x179fbcfb, 0x0e848dba, 0x25a9de79, 0x3cb2ef38, + 0x73f379ff, 0x6ae848be, 0x41c51b7d, 0x58de2a3c, 0xf0794f05, + 0xe9627e44, 0xc24f2d87, 0xdb541cc6, 0x94158a01, 0x8d0ebb40, + 0xa623e883, 0xbf38d9c2, 0x38a0c50d, 0x21bbf44c, 0x0a96a78f, + 0x138d96ce, 0x5ccc0009, 0x45d73148, 0x6efa628b, 0x77e153ca, + 0xbabb5d54, 0xa3a06c15, 0x888d3fd6, 0x91960e97, 0xded79850, + 0xc7cca911, 0xece1fad2, 0xf5facb93, 0x7262d75c, 0x6b79e61d, + 0x4054b5de, 0x594f849f, 0x160e1258, 0x0f152319, 0x243870da, + 0x3d23419b, 0x65fd6ba7, 0x7ce65ae6, 0x57cb0925, 0x4ed03864, + 0x0191aea3, 0x188a9fe2, 0x33a7cc21, 0x2abcfd60, 0xad24e1af, + 0xb43fd0ee, 0x9f12832d, 0x8609b26c, 0xc94824ab, 0xd05315ea, + 0xfb7e4629, 0xe2657768, 0x2f3f79f6, 0x362448b7, 0x1d091b74, + 0x04122a35, 0x4b53bcf2, 0x52488db3, 0x7965de70, 0x607eef31, + 0xe7e6f3fe, 0xfefdc2bf, 0xd5d0917c, 0xcccba03d, 0x838a36fa, + 0x9a9107bb, 0xb1bc5478, 0xa8a76539, 0x3b83984b, 0x2298a90a, + 0x09b5fac9, 0x10aecb88, 0x5fef5d4f, 0x46f46c0e, 0x6dd93fcd, + 0x74c20e8c, 0xf35a1243, 0xea412302, 0xc16c70c1, 0xd8774180, + 0x9736d747, 0x8e2de606, 0xa500b5c5, 0xbc1b8484, 0x71418a1a, + 0x685abb5b, 0x4377e898, 0x5a6cd9d9, 0x152d4f1e, 0x0c367e5f, + 0x271b2d9c, 0x3e001cdd, 0xb9980012, 0xa0833153, 0x8bae6290, + 0x92b553d1, 0xddf4c516, 0xc4eff457, 0xefc2a794, 0xf6d996d5, + 0xae07bce9, 0xb71c8da8, 0x9c31de6b, 0x852aef2a, 0xca6b79ed, + 0xd37048ac, 0xf85d1b6f, 0xe1462a2e, 0x66de36e1, 0x7fc507a0, + 0x54e85463, 0x4df36522, 0x02b2f3e5, 0x1ba9c2a4, 0x30849167, + 0x299fa026, 0xe4c5aeb8, 0xfdde9ff9, 0xd6f3cc3a, 0xcfe8fd7b, + 0x80a96bbc, 0x99b25afd, 0xb29f093e, 0xab84387f, 0x2c1c24b0, + 0x350715f1, 0x1e2a4632, 0x07317773, 0x4870e1b4, 0x516bd0f5, + 0x7a468336, 0x635db277, 0xcbfad74e, 0xd2e1e60f, 0xf9ccb5cc, + 0xe0d7848d, 0xaf96124a, 0xb68d230b, 0x9da070c8, 0x84bb4189, + 0x03235d46, 0x1a386c07, 0x31153fc4, 0x280e0e85, 0x674f9842, + 0x7e54a903, 0x5579fac0, 0x4c62cb81, 0x8138c51f, 0x9823f45e, + 0xb30ea79d, 0xaa1596dc, 0xe554001b, 0xfc4f315a, 0xd7626299, + 0xce7953d8, 0x49e14f17, 0x50fa7e56, 0x7bd72d95, 0x62cc1cd4, + 0x2d8d8a13, 0x3496bb52, 0x1fbbe891, 0x06a0d9d0, 0x5e7ef3ec, + 0x4765c2ad, 0x6c48916e, 0x7553a02f, 0x3a1236e8, 0x230907a9, + 0x0824546a, 0x113f652b, 0x96a779e4, 0x8fbc48a5, 0xa4911b66, + 0xbd8a2a27, 0xf2cbbce0, 0xebd08da1, 0xc0fdde62, 0xd9e6ef23, + 0x14bce1bd, 0x0da7d0fc, 0x268a833f, 0x3f91b27e, 0x70d024b9, + 0x69cb15f8, 0x42e6463b, 0x5bfd777a, 0xdc656bb5, 0xc57e5af4, + 0xee530937, 0xf7483876, 0xb809aeb1, 0xa1129ff0, 0x8a3fcc33, + 0x9324fd72}, + {0x00000000, 0x77073096, 0xee0e612c, 0x990951ba, 0x076dc419, + 0x706af48f, 0xe963a535, 0x9e6495a3, 0x0edb8832, 0x79dcb8a4, + 0xe0d5e91e, 0x97d2d988, 0x09b64c2b, 0x7eb17cbd, 0xe7b82d07, + 0x90bf1d91, 0x1db71064, 0x6ab020f2, 0xf3b97148, 0x84be41de, + 0x1adad47d, 0x6ddde4eb, 0xf4d4b551, 0x83d385c7, 0x136c9856, + 0x646ba8c0, 0xfd62f97a, 0x8a65c9ec, 0x14015c4f, 0x63066cd9, + 0xfa0f3d63, 0x8d080df5, 0x3b6e20c8, 0x4c69105e, 0xd56041e4, + 0xa2677172, 0x3c03e4d1, 0x4b04d447, 0xd20d85fd, 0xa50ab56b, + 0x35b5a8fa, 0x42b2986c, 0xdbbbc9d6, 0xacbcf940, 0x32d86ce3, + 0x45df5c75, 0xdcd60dcf, 0xabd13d59, 0x26d930ac, 0x51de003a, + 0xc8d75180, 0xbfd06116, 0x21b4f4b5, 0x56b3c423, 0xcfba9599, + 0xb8bda50f, 0x2802b89e, 0x5f058808, 0xc60cd9b2, 0xb10be924, + 0x2f6f7c87, 0x58684c11, 0xc1611dab, 0xb6662d3d, 0x76dc4190, + 0x01db7106, 0x98d220bc, 0xefd5102a, 0x71b18589, 0x06b6b51f, + 0x9fbfe4a5, 0xe8b8d433, 0x7807c9a2, 0x0f00f934, 0x9609a88e, + 0xe10e9818, 0x7f6a0dbb, 0x086d3d2d, 0x91646c97, 0xe6635c01, + 0x6b6b51f4, 0x1c6c6162, 0x856530d8, 0xf262004e, 0x6c0695ed, + 0x1b01a57b, 0x8208f4c1, 0xf50fc457, 0x65b0d9c6, 0x12b7e950, + 0x8bbeb8ea, 0xfcb9887c, 0x62dd1ddf, 0x15da2d49, 0x8cd37cf3, + 0xfbd44c65, 0x4db26158, 0x3ab551ce, 0xa3bc0074, 0xd4bb30e2, + 0x4adfa541, 0x3dd895d7, 0xa4d1c46d, 0xd3d6f4fb, 0x4369e96a, + 0x346ed9fc, 0xad678846, 0xda60b8d0, 0x44042d73, 0x33031de5, + 0xaa0a4c5f, 0xdd0d7cc9, 0x5005713c, 0x270241aa, 0xbe0b1010, + 0xc90c2086, 0x5768b525, 0x206f85b3, 0xb966d409, 0xce61e49f, + 0x5edef90e, 0x29d9c998, 0xb0d09822, 0xc7d7a8b4, 0x59b33d17, + 0x2eb40d81, 0xb7bd5c3b, 0xc0ba6cad, 0xedb88320, 0x9abfb3b6, + 0x03b6e20c, 0x74b1d29a, 0xead54739, 0x9dd277af, 0x04db2615, + 0x73dc1683, 0xe3630b12, 0x94643b84, 0x0d6d6a3e, 0x7a6a5aa8, + 0xe40ecf0b, 0x9309ff9d, 0x0a00ae27, 0x7d079eb1, 0xf00f9344, + 0x8708a3d2, 0x1e01f268, 0x6906c2fe, 0xf762575d, 0x806567cb, + 0x196c3671, 0x6e6b06e7, 0xfed41b76, 0x89d32be0, 0x10da7a5a, + 0x67dd4acc, 0xf9b9df6f, 0x8ebeeff9, 0x17b7be43, 0x60b08ed5, + 0xd6d6a3e8, 0xa1d1937e, 0x38d8c2c4, 0x4fdff252, 0xd1bb67f1, + 0xa6bc5767, 0x3fb506dd, 0x48b2364b, 0xd80d2bda, 0xaf0a1b4c, + 0x36034af6, 0x41047a60, 0xdf60efc3, 0xa867df55, 0x316e8eef, + 0x4669be79, 0xcb61b38c, 0xbc66831a, 0x256fd2a0, 0x5268e236, + 0xcc0c7795, 0xbb0b4703, 0x220216b9, 0x5505262f, 0xc5ba3bbe, + 0xb2bd0b28, 0x2bb45a92, 0x5cb36a04, 0xc2d7ffa7, 0xb5d0cf31, + 0x2cd99e8b, 0x5bdeae1d, 0x9b64c2b0, 0xec63f226, 0x756aa39c, + 0x026d930a, 0x9c0906a9, 0xeb0e363f, 0x72076785, 0x05005713, + 0x95bf4a82, 0xe2b87a14, 0x7bb12bae, 0x0cb61b38, 0x92d28e9b, + 0xe5d5be0d, 0x7cdcefb7, 0x0bdbdf21, 0x86d3d2d4, 0xf1d4e242, + 0x68ddb3f8, 0x1fda836e, 0x81be16cd, 0xf6b9265b, 0x6fb077e1, + 0x18b74777, 0x88085ae6, 0xff0f6a70, 0x66063bca, 0x11010b5c, + 0x8f659eff, 0xf862ae69, 0x616bffd3, 0x166ccf45, 0xa00ae278, + 0xd70dd2ee, 0x4e048354, 0x3903b3c2, 0xa7672661, 0xd06016f7, + 0x4969474d, 0x3e6e77db, 0xaed16a4a, 0xd9d65adc, 0x40df0b66, + 0x37d83bf0, 0xa9bcae53, 0xdebb9ec5, 0x47b2cf7f, 0x30b5ffe9, + 0xbdbdf21c, 0xcabac28a, 0x53b39330, 0x24b4a3a6, 0xbad03605, + 0xcdd70693, 0x54de5729, 0x23d967bf, 0xb3667a2e, 0xc4614ab8, + 0x5d681b02, 0x2a6f2b94, 0xb40bbe37, 0xc30c8ea1, 0x5a05df1b, + 0x2d02ef8d}}; + +local const z_word_t FAR crc_braid_big_table[][256] = { + {0x0000000000000000, 0x9630077700000000, 0x2c610eee00000000, + 0xba51099900000000, 0x19c46d0700000000, 0x8ff46a7000000000, + 0x35a563e900000000, 0xa395649e00000000, 0x3288db0e00000000, + 0xa4b8dc7900000000, 0x1ee9d5e000000000, 0x88d9d29700000000, + 0x2b4cb60900000000, 0xbd7cb17e00000000, 0x072db8e700000000, + 0x911dbf9000000000, 0x6410b71d00000000, 0xf220b06a00000000, + 0x4871b9f300000000, 0xde41be8400000000, 0x7dd4da1a00000000, + 0xebe4dd6d00000000, 0x51b5d4f400000000, 0xc785d38300000000, + 0x56986c1300000000, 0xc0a86b6400000000, 0x7af962fd00000000, + 0xecc9658a00000000, 0x4f5c011400000000, 0xd96c066300000000, + 0x633d0ffa00000000, 0xf50d088d00000000, 0xc8206e3b00000000, + 0x5e10694c00000000, 0xe44160d500000000, 0x727167a200000000, + 0xd1e4033c00000000, 0x47d4044b00000000, 0xfd850dd200000000, + 0x6bb50aa500000000, 0xfaa8b53500000000, 0x6c98b24200000000, + 0xd6c9bbdb00000000, 0x40f9bcac00000000, 0xe36cd83200000000, + 0x755cdf4500000000, 0xcf0dd6dc00000000, 0x593dd1ab00000000, + 0xac30d92600000000, 0x3a00de5100000000, 0x8051d7c800000000, + 0x1661d0bf00000000, 0xb5f4b42100000000, 0x23c4b35600000000, + 0x9995bacf00000000, 0x0fa5bdb800000000, 0x9eb8022800000000, + 0x0888055f00000000, 0xb2d90cc600000000, 0x24e90bb100000000, + 0x877c6f2f00000000, 0x114c685800000000, 0xab1d61c100000000, + 0x3d2d66b600000000, 0x9041dc7600000000, 0x0671db0100000000, + 0xbc20d29800000000, 0x2a10d5ef00000000, 0x8985b17100000000, + 0x1fb5b60600000000, 0xa5e4bf9f00000000, 0x33d4b8e800000000, + 0xa2c9077800000000, 0x34f9000f00000000, 0x8ea8099600000000, + 0x18980ee100000000, 0xbb0d6a7f00000000, 0x2d3d6d0800000000, + 0x976c649100000000, 0x015c63e600000000, 0xf4516b6b00000000, + 0x62616c1c00000000, 0xd830658500000000, 0x4e0062f200000000, + 0xed95066c00000000, 0x7ba5011b00000000, 0xc1f4088200000000, + 0x57c40ff500000000, 0xc6d9b06500000000, 0x50e9b71200000000, + 0xeab8be8b00000000, 0x7c88b9fc00000000, 0xdf1ddd6200000000, + 0x492dda1500000000, 0xf37cd38c00000000, 0x654cd4fb00000000, + 0x5861b24d00000000, 0xce51b53a00000000, 0x7400bca300000000, + 0xe230bbd400000000, 0x41a5df4a00000000, 0xd795d83d00000000, + 0x6dc4d1a400000000, 0xfbf4d6d300000000, 0x6ae9694300000000, + 0xfcd96e3400000000, 0x468867ad00000000, 0xd0b860da00000000, + 0x732d044400000000, 0xe51d033300000000, 0x5f4c0aaa00000000, + 0xc97c0ddd00000000, 0x3c71055000000000, 0xaa41022700000000, + 0x10100bbe00000000, 0x86200cc900000000, 0x25b5685700000000, + 0xb3856f2000000000, 0x09d466b900000000, 0x9fe461ce00000000, + 0x0ef9de5e00000000, 0x98c9d92900000000, 0x2298d0b000000000, + 0xb4a8d7c700000000, 0x173db35900000000, 0x810db42e00000000, + 0x3b5cbdb700000000, 0xad6cbac000000000, 0x2083b8ed00000000, + 0xb6b3bf9a00000000, 0x0ce2b60300000000, 0x9ad2b17400000000, + 0x3947d5ea00000000, 0xaf77d29d00000000, 0x1526db0400000000, + 0x8316dc7300000000, 0x120b63e300000000, 0x843b649400000000, + 0x3e6a6d0d00000000, 0xa85a6a7a00000000, 0x0bcf0ee400000000, + 0x9dff099300000000, 0x27ae000a00000000, 0xb19e077d00000000, + 0x44930ff000000000, 0xd2a3088700000000, 0x68f2011e00000000, + 0xfec2066900000000, 0x5d5762f700000000, 0xcb67658000000000, + 0x71366c1900000000, 0xe7066b6e00000000, 0x761bd4fe00000000, + 0xe02bd38900000000, 0x5a7ada1000000000, 0xcc4add6700000000, + 0x6fdfb9f900000000, 0xf9efbe8e00000000, 0x43beb71700000000, + 0xd58eb06000000000, 0xe8a3d6d600000000, 0x7e93d1a100000000, + 0xc4c2d83800000000, 0x52f2df4f00000000, 0xf167bbd100000000, + 0x6757bca600000000, 0xdd06b53f00000000, 0x4b36b24800000000, + 0xda2b0dd800000000, 0x4c1b0aaf00000000, 0xf64a033600000000, + 0x607a044100000000, 0xc3ef60df00000000, 0x55df67a800000000, + 0xef8e6e3100000000, 0x79be694600000000, 0x8cb361cb00000000, + 0x1a8366bc00000000, 0xa0d26f2500000000, 0x36e2685200000000, + 0x95770ccc00000000, 0x03470bbb00000000, 0xb916022200000000, + 0x2f26055500000000, 0xbe3bbac500000000, 0x280bbdb200000000, + 0x925ab42b00000000, 0x046ab35c00000000, 0xa7ffd7c200000000, + 0x31cfd0b500000000, 0x8b9ed92c00000000, 0x1daede5b00000000, + 0xb0c2649b00000000, 0x26f263ec00000000, 0x9ca36a7500000000, + 0x0a936d0200000000, 0xa906099c00000000, 0x3f360eeb00000000, + 0x8567077200000000, 0x1357000500000000, 0x824abf9500000000, + 0x147ab8e200000000, 0xae2bb17b00000000, 0x381bb60c00000000, + 0x9b8ed29200000000, 0x0dbed5e500000000, 0xb7efdc7c00000000, + 0x21dfdb0b00000000, 0xd4d2d38600000000, 0x42e2d4f100000000, + 0xf8b3dd6800000000, 0x6e83da1f00000000, 0xcd16be8100000000, + 0x5b26b9f600000000, 0xe177b06f00000000, 0x7747b71800000000, + 0xe65a088800000000, 0x706a0fff00000000, 0xca3b066600000000, + 0x5c0b011100000000, 0xff9e658f00000000, 0x69ae62f800000000, + 0xd3ff6b6100000000, 0x45cf6c1600000000, 0x78e20aa000000000, + 0xeed20dd700000000, 0x5483044e00000000, 0xc2b3033900000000, + 0x612667a700000000, 0xf71660d000000000, 0x4d47694900000000, + 0xdb776e3e00000000, 0x4a6ad1ae00000000, 0xdc5ad6d900000000, + 0x660bdf4000000000, 0xf03bd83700000000, 0x53aebca900000000, + 0xc59ebbde00000000, 0x7fcfb24700000000, 0xe9ffb53000000000, + 0x1cf2bdbd00000000, 0x8ac2baca00000000, 0x3093b35300000000, + 0xa6a3b42400000000, 0x0536d0ba00000000, 0x9306d7cd00000000, + 0x2957de5400000000, 0xbf67d92300000000, 0x2e7a66b300000000, + 0xb84a61c400000000, 0x021b685d00000000, 0x942b6f2a00000000, + 0x37be0bb400000000, 0xa18e0cc300000000, 0x1bdf055a00000000, + 0x8def022d00000000}, + {0x0000000000000000, 0x41311b1900000000, 0x8262363200000000, + 0xc3532d2b00000000, 0x04c56c6400000000, 0x45f4777d00000000, + 0x86a75a5600000000, 0xc796414f00000000, 0x088ad9c800000000, + 0x49bbc2d100000000, 0x8ae8effa00000000, 0xcbd9f4e300000000, + 0x0c4fb5ac00000000, 0x4d7eaeb500000000, 0x8e2d839e00000000, + 0xcf1c988700000000, 0x5112c24a00000000, 0x1023d95300000000, + 0xd370f47800000000, 0x9241ef6100000000, 0x55d7ae2e00000000, + 0x14e6b53700000000, 0xd7b5981c00000000, 0x9684830500000000, + 0x59981b8200000000, 0x18a9009b00000000, 0xdbfa2db000000000, + 0x9acb36a900000000, 0x5d5d77e600000000, 0x1c6c6cff00000000, + 0xdf3f41d400000000, 0x9e0e5acd00000000, 0xa224849500000000, + 0xe3159f8c00000000, 0x2046b2a700000000, 0x6177a9be00000000, + 0xa6e1e8f100000000, 0xe7d0f3e800000000, 0x2483dec300000000, + 0x65b2c5da00000000, 0xaaae5d5d00000000, 0xeb9f464400000000, + 0x28cc6b6f00000000, 0x69fd707600000000, 0xae6b313900000000, + 0xef5a2a2000000000, 0x2c09070b00000000, 0x6d381c1200000000, + 0xf33646df00000000, 0xb2075dc600000000, 0x715470ed00000000, + 0x30656bf400000000, 0xf7f32abb00000000, 0xb6c231a200000000, + 0x75911c8900000000, 0x34a0079000000000, 0xfbbc9f1700000000, + 0xba8d840e00000000, 0x79dea92500000000, 0x38efb23c00000000, + 0xff79f37300000000, 0xbe48e86a00000000, 0x7d1bc54100000000, + 0x3c2ade5800000000, 0x054f79f000000000, 0x447e62e900000000, + 0x872d4fc200000000, 0xc61c54db00000000, 0x018a159400000000, + 0x40bb0e8d00000000, 0x83e823a600000000, 0xc2d938bf00000000, + 0x0dc5a03800000000, 0x4cf4bb2100000000, 0x8fa7960a00000000, + 0xce968d1300000000, 0x0900cc5c00000000, 0x4831d74500000000, + 0x8b62fa6e00000000, 0xca53e17700000000, 0x545dbbba00000000, + 0x156ca0a300000000, 0xd63f8d8800000000, 0x970e969100000000, + 0x5098d7de00000000, 0x11a9ccc700000000, 0xd2fae1ec00000000, + 0x93cbfaf500000000, 0x5cd7627200000000, 0x1de6796b00000000, + 0xdeb5544000000000, 0x9f844f5900000000, 0x58120e1600000000, + 0x1923150f00000000, 0xda70382400000000, 0x9b41233d00000000, + 0xa76bfd6500000000, 0xe65ae67c00000000, 0x2509cb5700000000, + 0x6438d04e00000000, 0xa3ae910100000000, 0xe29f8a1800000000, + 0x21cca73300000000, 0x60fdbc2a00000000, 0xafe124ad00000000, + 0xeed03fb400000000, 0x2d83129f00000000, 0x6cb2098600000000, + 0xab2448c900000000, 0xea1553d000000000, 0x29467efb00000000, + 0x687765e200000000, 0xf6793f2f00000000, 0xb748243600000000, + 0x741b091d00000000, 0x352a120400000000, 0xf2bc534b00000000, + 0xb38d485200000000, 0x70de657900000000, 0x31ef7e6000000000, + 0xfef3e6e700000000, 0xbfc2fdfe00000000, 0x7c91d0d500000000, + 0x3da0cbcc00000000, 0xfa368a8300000000, 0xbb07919a00000000, + 0x7854bcb100000000, 0x3965a7a800000000, 0x4b98833b00000000, + 0x0aa9982200000000, 0xc9fab50900000000, 0x88cbae1000000000, + 0x4f5def5f00000000, 0x0e6cf44600000000, 0xcd3fd96d00000000, + 0x8c0ec27400000000, 0x43125af300000000, 0x022341ea00000000, + 0xc1706cc100000000, 0x804177d800000000, 0x47d7369700000000, + 0x06e62d8e00000000, 0xc5b500a500000000, 0x84841bbc00000000, + 0x1a8a417100000000, 0x5bbb5a6800000000, 0x98e8774300000000, + 0xd9d96c5a00000000, 0x1e4f2d1500000000, 0x5f7e360c00000000, + 0x9c2d1b2700000000, 0xdd1c003e00000000, 0x120098b900000000, + 0x533183a000000000, 0x9062ae8b00000000, 0xd153b59200000000, + 0x16c5f4dd00000000, 0x57f4efc400000000, 0x94a7c2ef00000000, + 0xd596d9f600000000, 0xe9bc07ae00000000, 0xa88d1cb700000000, + 0x6bde319c00000000, 0x2aef2a8500000000, 0xed796bca00000000, + 0xac4870d300000000, 0x6f1b5df800000000, 0x2e2a46e100000000, + 0xe136de6600000000, 0xa007c57f00000000, 0x6354e85400000000, + 0x2265f34d00000000, 0xe5f3b20200000000, 0xa4c2a91b00000000, + 0x6791843000000000, 0x26a09f2900000000, 0xb8aec5e400000000, + 0xf99fdefd00000000, 0x3accf3d600000000, 0x7bfde8cf00000000, + 0xbc6ba98000000000, 0xfd5ab29900000000, 0x3e099fb200000000, + 0x7f3884ab00000000, 0xb0241c2c00000000, 0xf115073500000000, + 0x32462a1e00000000, 0x7377310700000000, 0xb4e1704800000000, + 0xf5d06b5100000000, 0x3683467a00000000, 0x77b25d6300000000, + 0x4ed7facb00000000, 0x0fe6e1d200000000, 0xccb5ccf900000000, + 0x8d84d7e000000000, 0x4a1296af00000000, 0x0b238db600000000, + 0xc870a09d00000000, 0x8941bb8400000000, 0x465d230300000000, + 0x076c381a00000000, 0xc43f153100000000, 0x850e0e2800000000, + 0x42984f6700000000, 0x03a9547e00000000, 0xc0fa795500000000, + 0x81cb624c00000000, 0x1fc5388100000000, 0x5ef4239800000000, + 0x9da70eb300000000, 0xdc9615aa00000000, 0x1b0054e500000000, + 0x5a314ffc00000000, 0x996262d700000000, 0xd85379ce00000000, + 0x174fe14900000000, 0x567efa5000000000, 0x952dd77b00000000, + 0xd41ccc6200000000, 0x138a8d2d00000000, 0x52bb963400000000, + 0x91e8bb1f00000000, 0xd0d9a00600000000, 0xecf37e5e00000000, + 0xadc2654700000000, 0x6e91486c00000000, 0x2fa0537500000000, + 0xe836123a00000000, 0xa907092300000000, 0x6a54240800000000, + 0x2b653f1100000000, 0xe479a79600000000, 0xa548bc8f00000000, + 0x661b91a400000000, 0x272a8abd00000000, 0xe0bccbf200000000, + 0xa18dd0eb00000000, 0x62defdc000000000, 0x23efe6d900000000, + 0xbde1bc1400000000, 0xfcd0a70d00000000, 0x3f838a2600000000, + 0x7eb2913f00000000, 0xb924d07000000000, 0xf815cb6900000000, + 0x3b46e64200000000, 0x7a77fd5b00000000, 0xb56b65dc00000000, + 0xf45a7ec500000000, 0x370953ee00000000, 0x763848f700000000, + 0xb1ae09b800000000, 0xf09f12a100000000, 0x33cc3f8a00000000, + 0x72fd249300000000}, + {0x0000000000000000, 0x376ac20100000000, 0x6ed4840300000000, + 0x59be460200000000, 0xdca8090700000000, 0xebc2cb0600000000, + 0xb27c8d0400000000, 0x85164f0500000000, 0xb851130e00000000, + 0x8f3bd10f00000000, 0xd685970d00000000, 0xe1ef550c00000000, + 0x64f91a0900000000, 0x5393d80800000000, 0x0a2d9e0a00000000, + 0x3d475c0b00000000, 0x70a3261c00000000, 0x47c9e41d00000000, + 0x1e77a21f00000000, 0x291d601e00000000, 0xac0b2f1b00000000, + 0x9b61ed1a00000000, 0xc2dfab1800000000, 0xf5b5691900000000, + 0xc8f2351200000000, 0xff98f71300000000, 0xa626b11100000000, + 0x914c731000000000, 0x145a3c1500000000, 0x2330fe1400000000, + 0x7a8eb81600000000, 0x4de47a1700000000, 0xe0464d3800000000, + 0xd72c8f3900000000, 0x8e92c93b00000000, 0xb9f80b3a00000000, + 0x3cee443f00000000, 0x0b84863e00000000, 0x523ac03c00000000, + 0x6550023d00000000, 0x58175e3600000000, 0x6f7d9c3700000000, + 0x36c3da3500000000, 0x01a9183400000000, 0x84bf573100000000, + 0xb3d5953000000000, 0xea6bd33200000000, 0xdd01113300000000, + 0x90e56b2400000000, 0xa78fa92500000000, 0xfe31ef2700000000, + 0xc95b2d2600000000, 0x4c4d622300000000, 0x7b27a02200000000, + 0x2299e62000000000, 0x15f3242100000000, 0x28b4782a00000000, + 0x1fdeba2b00000000, 0x4660fc2900000000, 0x710a3e2800000000, + 0xf41c712d00000000, 0xc376b32c00000000, 0x9ac8f52e00000000, + 0xada2372f00000000, 0xc08d9a7000000000, 0xf7e7587100000000, + 0xae591e7300000000, 0x9933dc7200000000, 0x1c25937700000000, + 0x2b4f517600000000, 0x72f1177400000000, 0x459bd57500000000, + 0x78dc897e00000000, 0x4fb64b7f00000000, 0x16080d7d00000000, + 0x2162cf7c00000000, 0xa474807900000000, 0x931e427800000000, + 0xcaa0047a00000000, 0xfdcac67b00000000, 0xb02ebc6c00000000, + 0x87447e6d00000000, 0xdefa386f00000000, 0xe990fa6e00000000, + 0x6c86b56b00000000, 0x5bec776a00000000, 0x0252316800000000, + 0x3538f36900000000, 0x087faf6200000000, 0x3f156d6300000000, + 0x66ab2b6100000000, 0x51c1e96000000000, 0xd4d7a66500000000, + 0xe3bd646400000000, 0xba03226600000000, 0x8d69e06700000000, + 0x20cbd74800000000, 0x17a1154900000000, 0x4e1f534b00000000, + 0x7975914a00000000, 0xfc63de4f00000000, 0xcb091c4e00000000, + 0x92b75a4c00000000, 0xa5dd984d00000000, 0x989ac44600000000, + 0xaff0064700000000, 0xf64e404500000000, 0xc124824400000000, + 0x4432cd4100000000, 0x73580f4000000000, 0x2ae6494200000000, + 0x1d8c8b4300000000, 0x5068f15400000000, 0x6702335500000000, + 0x3ebc755700000000, 0x09d6b75600000000, 0x8cc0f85300000000, + 0xbbaa3a5200000000, 0xe2147c5000000000, 0xd57ebe5100000000, + 0xe839e25a00000000, 0xdf53205b00000000, 0x86ed665900000000, + 0xb187a45800000000, 0x3491eb5d00000000, 0x03fb295c00000000, + 0x5a456f5e00000000, 0x6d2fad5f00000000, 0x801b35e100000000, + 0xb771f7e000000000, 0xeecfb1e200000000, 0xd9a573e300000000, + 0x5cb33ce600000000, 0x6bd9fee700000000, 0x3267b8e500000000, + 0x050d7ae400000000, 0x384a26ef00000000, 0x0f20e4ee00000000, + 0x569ea2ec00000000, 0x61f460ed00000000, 0xe4e22fe800000000, + 0xd388ede900000000, 0x8a36abeb00000000, 0xbd5c69ea00000000, + 0xf0b813fd00000000, 0xc7d2d1fc00000000, 0x9e6c97fe00000000, + 0xa90655ff00000000, 0x2c101afa00000000, 0x1b7ad8fb00000000, + 0x42c49ef900000000, 0x75ae5cf800000000, 0x48e900f300000000, + 0x7f83c2f200000000, 0x263d84f000000000, 0x115746f100000000, + 0x944109f400000000, 0xa32bcbf500000000, 0xfa958df700000000, + 0xcdff4ff600000000, 0x605d78d900000000, 0x5737bad800000000, + 0x0e89fcda00000000, 0x39e33edb00000000, 0xbcf571de00000000, + 0x8b9fb3df00000000, 0xd221f5dd00000000, 0xe54b37dc00000000, + 0xd80c6bd700000000, 0xef66a9d600000000, 0xb6d8efd400000000, + 0x81b22dd500000000, 0x04a462d000000000, 0x33cea0d100000000, + 0x6a70e6d300000000, 0x5d1a24d200000000, 0x10fe5ec500000000, + 0x27949cc400000000, 0x7e2adac600000000, 0x494018c700000000, + 0xcc5657c200000000, 0xfb3c95c300000000, 0xa282d3c100000000, + 0x95e811c000000000, 0xa8af4dcb00000000, 0x9fc58fca00000000, + 0xc67bc9c800000000, 0xf1110bc900000000, 0x740744cc00000000, + 0x436d86cd00000000, 0x1ad3c0cf00000000, 0x2db902ce00000000, + 0x4096af9100000000, 0x77fc6d9000000000, 0x2e422b9200000000, + 0x1928e99300000000, 0x9c3ea69600000000, 0xab54649700000000, + 0xf2ea229500000000, 0xc580e09400000000, 0xf8c7bc9f00000000, + 0xcfad7e9e00000000, 0x9613389c00000000, 0xa179fa9d00000000, + 0x246fb59800000000, 0x1305779900000000, 0x4abb319b00000000, + 0x7dd1f39a00000000, 0x3035898d00000000, 0x075f4b8c00000000, + 0x5ee10d8e00000000, 0x698bcf8f00000000, 0xec9d808a00000000, + 0xdbf7428b00000000, 0x8249048900000000, 0xb523c68800000000, + 0x88649a8300000000, 0xbf0e588200000000, 0xe6b01e8000000000, + 0xd1dadc8100000000, 0x54cc938400000000, 0x63a6518500000000, + 0x3a18178700000000, 0x0d72d58600000000, 0xa0d0e2a900000000, + 0x97ba20a800000000, 0xce0466aa00000000, 0xf96ea4ab00000000, + 0x7c78ebae00000000, 0x4b1229af00000000, 0x12ac6fad00000000, + 0x25c6adac00000000, 0x1881f1a700000000, 0x2feb33a600000000, + 0x765575a400000000, 0x413fb7a500000000, 0xc429f8a000000000, + 0xf3433aa100000000, 0xaafd7ca300000000, 0x9d97bea200000000, + 0xd073c4b500000000, 0xe71906b400000000, 0xbea740b600000000, + 0x89cd82b700000000, 0x0cdbcdb200000000, 0x3bb10fb300000000, + 0x620f49b100000000, 0x55658bb000000000, 0x6822d7bb00000000, + 0x5f4815ba00000000, 0x06f653b800000000, 0x319c91b900000000, + 0xb48adebc00000000, 0x83e01cbd00000000, 0xda5e5abf00000000, + 0xed3498be00000000}, + {0x0000000000000000, 0x6567bcb800000000, 0x8bc809aa00000000, + 0xeeafb51200000000, 0x5797628f00000000, 0x32f0de3700000000, + 0xdc5f6b2500000000, 0xb938d79d00000000, 0xef28b4c500000000, + 0x8a4f087d00000000, 0x64e0bd6f00000000, 0x018701d700000000, + 0xb8bfd64a00000000, 0xddd86af200000000, 0x3377dfe000000000, + 0x5610635800000000, 0x9f57195000000000, 0xfa30a5e800000000, + 0x149f10fa00000000, 0x71f8ac4200000000, 0xc8c07bdf00000000, + 0xada7c76700000000, 0x4308727500000000, 0x266fcecd00000000, + 0x707fad9500000000, 0x1518112d00000000, 0xfbb7a43f00000000, + 0x9ed0188700000000, 0x27e8cf1a00000000, 0x428f73a200000000, + 0xac20c6b000000000, 0xc9477a0800000000, 0x3eaf32a000000000, + 0x5bc88e1800000000, 0xb5673b0a00000000, 0xd00087b200000000, + 0x6938502f00000000, 0x0c5fec9700000000, 0xe2f0598500000000, + 0x8797e53d00000000, 0xd187866500000000, 0xb4e03add00000000, + 0x5a4f8fcf00000000, 0x3f28337700000000, 0x8610e4ea00000000, + 0xe377585200000000, 0x0dd8ed4000000000, 0x68bf51f800000000, + 0xa1f82bf000000000, 0xc49f974800000000, 0x2a30225a00000000, + 0x4f579ee200000000, 0xf66f497f00000000, 0x9308f5c700000000, + 0x7da740d500000000, 0x18c0fc6d00000000, 0x4ed09f3500000000, + 0x2bb7238d00000000, 0xc518969f00000000, 0xa07f2a2700000000, + 0x1947fdba00000000, 0x7c20410200000000, 0x928ff41000000000, + 0xf7e848a800000000, 0x3d58149b00000000, 0x583fa82300000000, + 0xb6901d3100000000, 0xd3f7a18900000000, 0x6acf761400000000, + 0x0fa8caac00000000, 0xe1077fbe00000000, 0x8460c30600000000, + 0xd270a05e00000000, 0xb7171ce600000000, 0x59b8a9f400000000, + 0x3cdf154c00000000, 0x85e7c2d100000000, 0xe0807e6900000000, + 0x0e2fcb7b00000000, 0x6b4877c300000000, 0xa20f0dcb00000000, + 0xc768b17300000000, 0x29c7046100000000, 0x4ca0b8d900000000, + 0xf5986f4400000000, 0x90ffd3fc00000000, 0x7e5066ee00000000, + 0x1b37da5600000000, 0x4d27b90e00000000, 0x284005b600000000, + 0xc6efb0a400000000, 0xa3880c1c00000000, 0x1ab0db8100000000, + 0x7fd7673900000000, 0x9178d22b00000000, 0xf41f6e9300000000, + 0x03f7263b00000000, 0x66909a8300000000, 0x883f2f9100000000, + 0xed58932900000000, 0x546044b400000000, 0x3107f80c00000000, + 0xdfa84d1e00000000, 0xbacff1a600000000, 0xecdf92fe00000000, + 0x89b82e4600000000, 0x67179b5400000000, 0x027027ec00000000, + 0xbb48f07100000000, 0xde2f4cc900000000, 0x3080f9db00000000, + 0x55e7456300000000, 0x9ca03f6b00000000, 0xf9c783d300000000, + 0x176836c100000000, 0x720f8a7900000000, 0xcb375de400000000, + 0xae50e15c00000000, 0x40ff544e00000000, 0x2598e8f600000000, + 0x73888bae00000000, 0x16ef371600000000, 0xf840820400000000, + 0x9d273ebc00000000, 0x241fe92100000000, 0x4178559900000000, + 0xafd7e08b00000000, 0xcab05c3300000000, 0x3bb659ed00000000, + 0x5ed1e55500000000, 0xb07e504700000000, 0xd519ecff00000000, + 0x6c213b6200000000, 0x094687da00000000, 0xe7e932c800000000, + 0x828e8e7000000000, 0xd49eed2800000000, 0xb1f9519000000000, + 0x5f56e48200000000, 0x3a31583a00000000, 0x83098fa700000000, + 0xe66e331f00000000, 0x08c1860d00000000, 0x6da63ab500000000, + 0xa4e140bd00000000, 0xc186fc0500000000, 0x2f29491700000000, + 0x4a4ef5af00000000, 0xf376223200000000, 0x96119e8a00000000, + 0x78be2b9800000000, 0x1dd9972000000000, 0x4bc9f47800000000, + 0x2eae48c000000000, 0xc001fdd200000000, 0xa566416a00000000, + 0x1c5e96f700000000, 0x79392a4f00000000, 0x97969f5d00000000, + 0xf2f123e500000000, 0x05196b4d00000000, 0x607ed7f500000000, + 0x8ed162e700000000, 0xebb6de5f00000000, 0x528e09c200000000, + 0x37e9b57a00000000, 0xd946006800000000, 0xbc21bcd000000000, + 0xea31df8800000000, 0x8f56633000000000, 0x61f9d62200000000, + 0x049e6a9a00000000, 0xbda6bd0700000000, 0xd8c101bf00000000, + 0x366eb4ad00000000, 0x5309081500000000, 0x9a4e721d00000000, + 0xff29cea500000000, 0x11867bb700000000, 0x74e1c70f00000000, + 0xcdd9109200000000, 0xa8beac2a00000000, 0x4611193800000000, + 0x2376a58000000000, 0x7566c6d800000000, 0x10017a6000000000, + 0xfeaecf7200000000, 0x9bc973ca00000000, 0x22f1a45700000000, + 0x479618ef00000000, 0xa939adfd00000000, 0xcc5e114500000000, + 0x06ee4d7600000000, 0x6389f1ce00000000, 0x8d2644dc00000000, + 0xe841f86400000000, 0x51792ff900000000, 0x341e934100000000, + 0xdab1265300000000, 0xbfd69aeb00000000, 0xe9c6f9b300000000, + 0x8ca1450b00000000, 0x620ef01900000000, 0x07694ca100000000, + 0xbe519b3c00000000, 0xdb36278400000000, 0x3599929600000000, + 0x50fe2e2e00000000, 0x99b9542600000000, 0xfcdee89e00000000, + 0x12715d8c00000000, 0x7716e13400000000, 0xce2e36a900000000, + 0xab498a1100000000, 0x45e63f0300000000, 0x208183bb00000000, + 0x7691e0e300000000, 0x13f65c5b00000000, 0xfd59e94900000000, + 0x983e55f100000000, 0x2106826c00000000, 0x44613ed400000000, + 0xaace8bc600000000, 0xcfa9377e00000000, 0x38417fd600000000, + 0x5d26c36e00000000, 0xb389767c00000000, 0xd6eecac400000000, + 0x6fd61d5900000000, 0x0ab1a1e100000000, 0xe41e14f300000000, + 0x8179a84b00000000, 0xd769cb1300000000, 0xb20e77ab00000000, + 0x5ca1c2b900000000, 0x39c67e0100000000, 0x80fea99c00000000, + 0xe599152400000000, 0x0b36a03600000000, 0x6e511c8e00000000, + 0xa716668600000000, 0xc271da3e00000000, 0x2cde6f2c00000000, + 0x49b9d39400000000, 0xf081040900000000, 0x95e6b8b100000000, + 0x7b490da300000000, 0x1e2eb11b00000000, 0x483ed24300000000, + 0x2d596efb00000000, 0xc3f6dbe900000000, 0xa691675100000000, + 0x1fa9b0cc00000000, 0x7ace0c7400000000, 0x9461b96600000000, + 0xf10605de00000000}, + {0x0000000000000000, 0xb029603d00000000, 0x6053c07a00000000, + 0xd07aa04700000000, 0xc0a680f500000000, 0x708fe0c800000000, + 0xa0f5408f00000000, 0x10dc20b200000000, 0xc14b703000000000, + 0x7162100d00000000, 0xa118b04a00000000, 0x1131d07700000000, + 0x01edf0c500000000, 0xb1c490f800000000, 0x61be30bf00000000, + 0xd197508200000000, 0x8297e06000000000, 0x32be805d00000000, + 0xe2c4201a00000000, 0x52ed402700000000, 0x4231609500000000, + 0xf21800a800000000, 0x2262a0ef00000000, 0x924bc0d200000000, + 0x43dc905000000000, 0xf3f5f06d00000000, 0x238f502a00000000, + 0x93a6301700000000, 0x837a10a500000000, 0x3353709800000000, + 0xe329d0df00000000, 0x5300b0e200000000, 0x042fc1c100000000, + 0xb406a1fc00000000, 0x647c01bb00000000, 0xd455618600000000, + 0xc489413400000000, 0x74a0210900000000, 0xa4da814e00000000, + 0x14f3e17300000000, 0xc564b1f100000000, 0x754dd1cc00000000, + 0xa537718b00000000, 0x151e11b600000000, 0x05c2310400000000, + 0xb5eb513900000000, 0x6591f17e00000000, 0xd5b8914300000000, + 0x86b821a100000000, 0x3691419c00000000, 0xe6ebe1db00000000, + 0x56c281e600000000, 0x461ea15400000000, 0xf637c16900000000, + 0x264d612e00000000, 0x9664011300000000, 0x47f3519100000000, + 0xf7da31ac00000000, 0x27a091eb00000000, 0x9789f1d600000000, + 0x8755d16400000000, 0x377cb15900000000, 0xe706111e00000000, + 0x572f712300000000, 0x4958f35800000000, 0xf971936500000000, + 0x290b332200000000, 0x9922531f00000000, 0x89fe73ad00000000, + 0x39d7139000000000, 0xe9adb3d700000000, 0x5984d3ea00000000, + 0x8813836800000000, 0x383ae35500000000, 0xe840431200000000, + 0x5869232f00000000, 0x48b5039d00000000, 0xf89c63a000000000, + 0x28e6c3e700000000, 0x98cfa3da00000000, 0xcbcf133800000000, + 0x7be6730500000000, 0xab9cd34200000000, 0x1bb5b37f00000000, + 0x0b6993cd00000000, 0xbb40f3f000000000, 0x6b3a53b700000000, + 0xdb13338a00000000, 0x0a84630800000000, 0xbaad033500000000, + 0x6ad7a37200000000, 0xdafec34f00000000, 0xca22e3fd00000000, + 0x7a0b83c000000000, 0xaa71238700000000, 0x1a5843ba00000000, + 0x4d77329900000000, 0xfd5e52a400000000, 0x2d24f2e300000000, + 0x9d0d92de00000000, 0x8dd1b26c00000000, 0x3df8d25100000000, + 0xed82721600000000, 0x5dab122b00000000, 0x8c3c42a900000000, + 0x3c15229400000000, 0xec6f82d300000000, 0x5c46e2ee00000000, + 0x4c9ac25c00000000, 0xfcb3a26100000000, 0x2cc9022600000000, + 0x9ce0621b00000000, 0xcfe0d2f900000000, 0x7fc9b2c400000000, + 0xafb3128300000000, 0x1f9a72be00000000, 0x0f46520c00000000, + 0xbf6f323100000000, 0x6f15927600000000, 0xdf3cf24b00000000, + 0x0eaba2c900000000, 0xbe82c2f400000000, 0x6ef862b300000000, + 0xded1028e00000000, 0xce0d223c00000000, 0x7e24420100000000, + 0xae5ee24600000000, 0x1e77827b00000000, 0x92b0e6b100000000, + 0x2299868c00000000, 0xf2e326cb00000000, 0x42ca46f600000000, + 0x5216664400000000, 0xe23f067900000000, 0x3245a63e00000000, + 0x826cc60300000000, 0x53fb968100000000, 0xe3d2f6bc00000000, + 0x33a856fb00000000, 0x838136c600000000, 0x935d167400000000, + 0x2374764900000000, 0xf30ed60e00000000, 0x4327b63300000000, + 0x102706d100000000, 0xa00e66ec00000000, 0x7074c6ab00000000, + 0xc05da69600000000, 0xd081862400000000, 0x60a8e61900000000, + 0xb0d2465e00000000, 0x00fb266300000000, 0xd16c76e100000000, + 0x614516dc00000000, 0xb13fb69b00000000, 0x0116d6a600000000, + 0x11caf61400000000, 0xa1e3962900000000, 0x7199366e00000000, + 0xc1b0565300000000, 0x969f277000000000, 0x26b6474d00000000, + 0xf6cce70a00000000, 0x46e5873700000000, 0x5639a78500000000, + 0xe610c7b800000000, 0x366a67ff00000000, 0x864307c200000000, + 0x57d4574000000000, 0xe7fd377d00000000, 0x3787973a00000000, + 0x87aef70700000000, 0x9772d7b500000000, 0x275bb78800000000, + 0xf72117cf00000000, 0x470877f200000000, 0x1408c71000000000, + 0xa421a72d00000000, 0x745b076a00000000, 0xc472675700000000, + 0xd4ae47e500000000, 0x648727d800000000, 0xb4fd879f00000000, + 0x04d4e7a200000000, 0xd543b72000000000, 0x656ad71d00000000, + 0xb510775a00000000, 0x0539176700000000, 0x15e537d500000000, + 0xa5cc57e800000000, 0x75b6f7af00000000, 0xc59f979200000000, + 0xdbe815e900000000, 0x6bc175d400000000, 0xbbbbd59300000000, + 0x0b92b5ae00000000, 0x1b4e951c00000000, 0xab67f52100000000, + 0x7b1d556600000000, 0xcb34355b00000000, 0x1aa365d900000000, + 0xaa8a05e400000000, 0x7af0a5a300000000, 0xcad9c59e00000000, + 0xda05e52c00000000, 0x6a2c851100000000, 0xba56255600000000, + 0x0a7f456b00000000, 0x597ff58900000000, 0xe95695b400000000, + 0x392c35f300000000, 0x890555ce00000000, 0x99d9757c00000000, + 0x29f0154100000000, 0xf98ab50600000000, 0x49a3d53b00000000, + 0x983485b900000000, 0x281de58400000000, 0xf86745c300000000, + 0x484e25fe00000000, 0x5892054c00000000, 0xe8bb657100000000, + 0x38c1c53600000000, 0x88e8a50b00000000, 0xdfc7d42800000000, + 0x6feeb41500000000, 0xbf94145200000000, 0x0fbd746f00000000, + 0x1f6154dd00000000, 0xaf4834e000000000, 0x7f3294a700000000, + 0xcf1bf49a00000000, 0x1e8ca41800000000, 0xaea5c42500000000, + 0x7edf646200000000, 0xcef6045f00000000, 0xde2a24ed00000000, + 0x6e0344d000000000, 0xbe79e49700000000, 0x0e5084aa00000000, + 0x5d50344800000000, 0xed79547500000000, 0x3d03f43200000000, + 0x8d2a940f00000000, 0x9df6b4bd00000000, 0x2ddfd48000000000, + 0xfda574c700000000, 0x4d8c14fa00000000, 0x9c1b447800000000, + 0x2c32244500000000, 0xfc48840200000000, 0x4c61e43f00000000, + 0x5cbdc48d00000000, 0xec94a4b000000000, 0x3cee04f700000000, + 0x8cc764ca00000000}, + {0x0000000000000000, 0xa5d35ccb00000000, 0x0ba1c84d00000000, + 0xae72948600000000, 0x1642919b00000000, 0xb391cd5000000000, + 0x1de359d600000000, 0xb830051d00000000, 0x6d8253ec00000000, + 0xc8510f2700000000, 0x66239ba100000000, 0xc3f0c76a00000000, + 0x7bc0c27700000000, 0xde139ebc00000000, 0x70610a3a00000000, + 0xd5b256f100000000, 0x9b02d60300000000, 0x3ed18ac800000000, + 0x90a31e4e00000000, 0x3570428500000000, 0x8d40479800000000, + 0x28931b5300000000, 0x86e18fd500000000, 0x2332d31e00000000, + 0xf68085ef00000000, 0x5353d92400000000, 0xfd214da200000000, + 0x58f2116900000000, 0xe0c2147400000000, 0x451148bf00000000, + 0xeb63dc3900000000, 0x4eb080f200000000, 0x3605ac0700000000, + 0x93d6f0cc00000000, 0x3da4644a00000000, 0x9877388100000000, + 0x20473d9c00000000, 0x8594615700000000, 0x2be6f5d100000000, + 0x8e35a91a00000000, 0x5b87ffeb00000000, 0xfe54a32000000000, + 0x502637a600000000, 0xf5f56b6d00000000, 0x4dc56e7000000000, + 0xe81632bb00000000, 0x4664a63d00000000, 0xe3b7faf600000000, + 0xad077a0400000000, 0x08d426cf00000000, 0xa6a6b24900000000, + 0x0375ee8200000000, 0xbb45eb9f00000000, 0x1e96b75400000000, + 0xb0e423d200000000, 0x15377f1900000000, 0xc08529e800000000, + 0x6556752300000000, 0xcb24e1a500000000, 0x6ef7bd6e00000000, + 0xd6c7b87300000000, 0x7314e4b800000000, 0xdd66703e00000000, + 0x78b52cf500000000, 0x6c0a580f00000000, 0xc9d904c400000000, + 0x67ab904200000000, 0xc278cc8900000000, 0x7a48c99400000000, + 0xdf9b955f00000000, 0x71e901d900000000, 0xd43a5d1200000000, + 0x01880be300000000, 0xa45b572800000000, 0x0a29c3ae00000000, + 0xaffa9f6500000000, 0x17ca9a7800000000, 0xb219c6b300000000, + 0x1c6b523500000000, 0xb9b80efe00000000, 0xf7088e0c00000000, + 0x52dbd2c700000000, 0xfca9464100000000, 0x597a1a8a00000000, + 0xe14a1f9700000000, 0x4499435c00000000, 0xeaebd7da00000000, + 0x4f388b1100000000, 0x9a8adde000000000, 0x3f59812b00000000, + 0x912b15ad00000000, 0x34f8496600000000, 0x8cc84c7b00000000, + 0x291b10b000000000, 0x8769843600000000, 0x22bad8fd00000000, + 0x5a0ff40800000000, 0xffdca8c300000000, 0x51ae3c4500000000, + 0xf47d608e00000000, 0x4c4d659300000000, 0xe99e395800000000, + 0x47ecadde00000000, 0xe23ff11500000000, 0x378da7e400000000, + 0x925efb2f00000000, 0x3c2c6fa900000000, 0x99ff336200000000, + 0x21cf367f00000000, 0x841c6ab400000000, 0x2a6efe3200000000, + 0x8fbda2f900000000, 0xc10d220b00000000, 0x64de7ec000000000, + 0xcaacea4600000000, 0x6f7fb68d00000000, 0xd74fb39000000000, + 0x729cef5b00000000, 0xdcee7bdd00000000, 0x793d271600000000, + 0xac8f71e700000000, 0x095c2d2c00000000, 0xa72eb9aa00000000, + 0x02fde56100000000, 0xbacde07c00000000, 0x1f1ebcb700000000, + 0xb16c283100000000, 0x14bf74fa00000000, 0xd814b01e00000000, + 0x7dc7ecd500000000, 0xd3b5785300000000, 0x7666249800000000, + 0xce56218500000000, 0x6b857d4e00000000, 0xc5f7e9c800000000, + 0x6024b50300000000, 0xb596e3f200000000, 0x1045bf3900000000, + 0xbe372bbf00000000, 0x1be4777400000000, 0xa3d4726900000000, + 0x06072ea200000000, 0xa875ba2400000000, 0x0da6e6ef00000000, + 0x4316661d00000000, 0xe6c53ad600000000, 0x48b7ae5000000000, + 0xed64f29b00000000, 0x5554f78600000000, 0xf087ab4d00000000, + 0x5ef53fcb00000000, 0xfb26630000000000, 0x2e9435f100000000, + 0x8b47693a00000000, 0x2535fdbc00000000, 0x80e6a17700000000, + 0x38d6a46a00000000, 0x9d05f8a100000000, 0x33776c2700000000, + 0x96a430ec00000000, 0xee111c1900000000, 0x4bc240d200000000, + 0xe5b0d45400000000, 0x4063889f00000000, 0xf8538d8200000000, + 0x5d80d14900000000, 0xf3f245cf00000000, 0x5621190400000000, + 0x83934ff500000000, 0x2640133e00000000, 0x883287b800000000, + 0x2de1db7300000000, 0x95d1de6e00000000, 0x300282a500000000, + 0x9e70162300000000, 0x3ba34ae800000000, 0x7513ca1a00000000, + 0xd0c096d100000000, 0x7eb2025700000000, 0xdb615e9c00000000, + 0x63515b8100000000, 0xc682074a00000000, 0x68f093cc00000000, + 0xcd23cf0700000000, 0x189199f600000000, 0xbd42c53d00000000, + 0x133051bb00000000, 0xb6e30d7000000000, 0x0ed3086d00000000, + 0xab0054a600000000, 0x0572c02000000000, 0xa0a19ceb00000000, + 0xb41ee81100000000, 0x11cdb4da00000000, 0xbfbf205c00000000, + 0x1a6c7c9700000000, 0xa25c798a00000000, 0x078f254100000000, + 0xa9fdb1c700000000, 0x0c2eed0c00000000, 0xd99cbbfd00000000, + 0x7c4fe73600000000, 0xd23d73b000000000, 0x77ee2f7b00000000, + 0xcfde2a6600000000, 0x6a0d76ad00000000, 0xc47fe22b00000000, + 0x61acbee000000000, 0x2f1c3e1200000000, 0x8acf62d900000000, + 0x24bdf65f00000000, 0x816eaa9400000000, 0x395eaf8900000000, + 0x9c8df34200000000, 0x32ff67c400000000, 0x972c3b0f00000000, + 0x429e6dfe00000000, 0xe74d313500000000, 0x493fa5b300000000, + 0xececf97800000000, 0x54dcfc6500000000, 0xf10fa0ae00000000, + 0x5f7d342800000000, 0xfaae68e300000000, 0x821b441600000000, + 0x27c818dd00000000, 0x89ba8c5b00000000, 0x2c69d09000000000, + 0x9459d58d00000000, 0x318a894600000000, 0x9ff81dc000000000, + 0x3a2b410b00000000, 0xef9917fa00000000, 0x4a4a4b3100000000, + 0xe438dfb700000000, 0x41eb837c00000000, 0xf9db866100000000, + 0x5c08daaa00000000, 0xf27a4e2c00000000, 0x57a912e700000000, + 0x1919921500000000, 0xbccacede00000000, 0x12b85a5800000000, + 0xb76b069300000000, 0x0f5b038e00000000, 0xaa885f4500000000, + 0x04facbc300000000, 0xa129970800000000, 0x749bc1f900000000, + 0xd1489d3200000000, 0x7f3a09b400000000, 0xdae9557f00000000, + 0x62d9506200000000, 0xc70a0ca900000000, 0x6978982f00000000, + 0xccabc4e400000000}, + {0x0000000000000000, 0xb40b77a600000000, 0x29119f9700000000, + 0x9d1ae83100000000, 0x13244ff400000000, 0xa72f385200000000, + 0x3a35d06300000000, 0x8e3ea7c500000000, 0x674eef3300000000, + 0xd345989500000000, 0x4e5f70a400000000, 0xfa54070200000000, + 0x746aa0c700000000, 0xc061d76100000000, 0x5d7b3f5000000000, + 0xe97048f600000000, 0xce9cde6700000000, 0x7a97a9c100000000, + 0xe78d41f000000000, 0x5386365600000000, 0xddb8919300000000, + 0x69b3e63500000000, 0xf4a90e0400000000, 0x40a279a200000000, + 0xa9d2315400000000, 0x1dd946f200000000, 0x80c3aec300000000, + 0x34c8d96500000000, 0xbaf67ea000000000, 0x0efd090600000000, + 0x93e7e13700000000, 0x27ec969100000000, 0x9c39bdcf00000000, + 0x2832ca6900000000, 0xb528225800000000, 0x012355fe00000000, + 0x8f1df23b00000000, 0x3b16859d00000000, 0xa60c6dac00000000, + 0x12071a0a00000000, 0xfb7752fc00000000, 0x4f7c255a00000000, + 0xd266cd6b00000000, 0x666dbacd00000000, 0xe8531d0800000000, + 0x5c586aae00000000, 0xc142829f00000000, 0x7549f53900000000, + 0x52a563a800000000, 0xe6ae140e00000000, 0x7bb4fc3f00000000, + 0xcfbf8b9900000000, 0x41812c5c00000000, 0xf58a5bfa00000000, + 0x6890b3cb00000000, 0xdc9bc46d00000000, 0x35eb8c9b00000000, + 0x81e0fb3d00000000, 0x1cfa130c00000000, 0xa8f164aa00000000, + 0x26cfc36f00000000, 0x92c4b4c900000000, 0x0fde5cf800000000, + 0xbbd52b5e00000000, 0x79750b4400000000, 0xcd7e7ce200000000, + 0x506494d300000000, 0xe46fe37500000000, 0x6a5144b000000000, + 0xde5a331600000000, 0x4340db2700000000, 0xf74bac8100000000, + 0x1e3be47700000000, 0xaa3093d100000000, 0x372a7be000000000, + 0x83210c4600000000, 0x0d1fab8300000000, 0xb914dc2500000000, + 0x240e341400000000, 0x900543b200000000, 0xb7e9d52300000000, + 0x03e2a28500000000, 0x9ef84ab400000000, 0x2af33d1200000000, + 0xa4cd9ad700000000, 0x10c6ed7100000000, 0x8ddc054000000000, + 0x39d772e600000000, 0xd0a73a1000000000, 0x64ac4db600000000, + 0xf9b6a58700000000, 0x4dbdd22100000000, 0xc38375e400000000, + 0x7788024200000000, 0xea92ea7300000000, 0x5e999dd500000000, + 0xe54cb68b00000000, 0x5147c12d00000000, 0xcc5d291c00000000, + 0x78565eba00000000, 0xf668f97f00000000, 0x42638ed900000000, + 0xdf7966e800000000, 0x6b72114e00000000, 0x820259b800000000, + 0x36092e1e00000000, 0xab13c62f00000000, 0x1f18b18900000000, + 0x9126164c00000000, 0x252d61ea00000000, 0xb83789db00000000, + 0x0c3cfe7d00000000, 0x2bd068ec00000000, 0x9fdb1f4a00000000, + 0x02c1f77b00000000, 0xb6ca80dd00000000, 0x38f4271800000000, + 0x8cff50be00000000, 0x11e5b88f00000000, 0xa5eecf2900000000, + 0x4c9e87df00000000, 0xf895f07900000000, 0x658f184800000000, + 0xd1846fee00000000, 0x5fbac82b00000000, 0xebb1bf8d00000000, + 0x76ab57bc00000000, 0xc2a0201a00000000, 0xf2ea168800000000, + 0x46e1612e00000000, 0xdbfb891f00000000, 0x6ff0feb900000000, + 0xe1ce597c00000000, 0x55c52eda00000000, 0xc8dfc6eb00000000, + 0x7cd4b14d00000000, 0x95a4f9bb00000000, 0x21af8e1d00000000, + 0xbcb5662c00000000, 0x08be118a00000000, 0x8680b64f00000000, + 0x328bc1e900000000, 0xaf9129d800000000, 0x1b9a5e7e00000000, + 0x3c76c8ef00000000, 0x887dbf4900000000, 0x1567577800000000, + 0xa16c20de00000000, 0x2f52871b00000000, 0x9b59f0bd00000000, + 0x0643188c00000000, 0xb2486f2a00000000, 0x5b3827dc00000000, + 0xef33507a00000000, 0x7229b84b00000000, 0xc622cfed00000000, + 0x481c682800000000, 0xfc171f8e00000000, 0x610df7bf00000000, + 0xd506801900000000, 0x6ed3ab4700000000, 0xdad8dce100000000, + 0x47c234d000000000, 0xf3c9437600000000, 0x7df7e4b300000000, + 0xc9fc931500000000, 0x54e67b2400000000, 0xe0ed0c8200000000, + 0x099d447400000000, 0xbd9633d200000000, 0x208cdbe300000000, + 0x9487ac4500000000, 0x1ab90b8000000000, 0xaeb27c2600000000, + 0x33a8941700000000, 0x87a3e3b100000000, 0xa04f752000000000, + 0x1444028600000000, 0x895eeab700000000, 0x3d559d1100000000, + 0xb36b3ad400000000, 0x07604d7200000000, 0x9a7aa54300000000, + 0x2e71d2e500000000, 0xc7019a1300000000, 0x730aedb500000000, + 0xee10058400000000, 0x5a1b722200000000, 0xd425d5e700000000, + 0x602ea24100000000, 0xfd344a7000000000, 0x493f3dd600000000, + 0x8b9f1dcc00000000, 0x3f946a6a00000000, 0xa28e825b00000000, + 0x1685f5fd00000000, 0x98bb523800000000, 0x2cb0259e00000000, + 0xb1aacdaf00000000, 0x05a1ba0900000000, 0xecd1f2ff00000000, + 0x58da855900000000, 0xc5c06d6800000000, 0x71cb1ace00000000, + 0xfff5bd0b00000000, 0x4bfecaad00000000, 0xd6e4229c00000000, + 0x62ef553a00000000, 0x4503c3ab00000000, 0xf108b40d00000000, + 0x6c125c3c00000000, 0xd8192b9a00000000, 0x56278c5f00000000, + 0xe22cfbf900000000, 0x7f3613c800000000, 0xcb3d646e00000000, + 0x224d2c9800000000, 0x96465b3e00000000, 0x0b5cb30f00000000, + 0xbf57c4a900000000, 0x3169636c00000000, 0x856214ca00000000, + 0x1878fcfb00000000, 0xac738b5d00000000, 0x17a6a00300000000, + 0xa3add7a500000000, 0x3eb73f9400000000, 0x8abc483200000000, + 0x0482eff700000000, 0xb089985100000000, 0x2d93706000000000, + 0x999807c600000000, 0x70e84f3000000000, 0xc4e3389600000000, + 0x59f9d0a700000000, 0xedf2a70100000000, 0x63cc00c400000000, + 0xd7c7776200000000, 0x4add9f5300000000, 0xfed6e8f500000000, + 0xd93a7e6400000000, 0x6d3109c200000000, 0xf02be1f300000000, + 0x4420965500000000, 0xca1e319000000000, 0x7e15463600000000, + 0xe30fae0700000000, 0x5704d9a100000000, 0xbe74915700000000, + 0x0a7fe6f100000000, 0x97650ec000000000, 0x236e796600000000, + 0xad50dea300000000, 0x195ba90500000000, 0x8441413400000000, + 0x304a369200000000}, + {0x0000000000000000, 0x9e00aacc00000000, 0x7d07254200000000, + 0xe3078f8e00000000, 0xfa0e4a8400000000, 0x640ee04800000000, + 0x87096fc600000000, 0x1909c50a00000000, 0xb51be5d300000000, + 0x2b1b4f1f00000000, 0xc81cc09100000000, 0x561c6a5d00000000, + 0x4f15af5700000000, 0xd115059b00000000, 0x32128a1500000000, + 0xac1220d900000000, 0x2b31bb7c00000000, 0xb53111b000000000, + 0x56369e3e00000000, 0xc83634f200000000, 0xd13ff1f800000000, + 0x4f3f5b3400000000, 0xac38d4ba00000000, 0x32387e7600000000, + 0x9e2a5eaf00000000, 0x002af46300000000, 0xe32d7bed00000000, + 0x7d2dd12100000000, 0x6424142b00000000, 0xfa24bee700000000, + 0x1923316900000000, 0x87239ba500000000, 0x566276f900000000, + 0xc862dc3500000000, 0x2b6553bb00000000, 0xb565f97700000000, + 0xac6c3c7d00000000, 0x326c96b100000000, 0xd16b193f00000000, + 0x4f6bb3f300000000, 0xe379932a00000000, 0x7d7939e600000000, + 0x9e7eb66800000000, 0x007e1ca400000000, 0x1977d9ae00000000, + 0x8777736200000000, 0x6470fcec00000000, 0xfa70562000000000, + 0x7d53cd8500000000, 0xe353674900000000, 0x0054e8c700000000, + 0x9e54420b00000000, 0x875d870100000000, 0x195d2dcd00000000, + 0xfa5aa24300000000, 0x645a088f00000000, 0xc848285600000000, + 0x5648829a00000000, 0xb54f0d1400000000, 0x2b4fa7d800000000, + 0x324662d200000000, 0xac46c81e00000000, 0x4f41479000000000, + 0xd141ed5c00000000, 0xedc29d2900000000, 0x73c237e500000000, + 0x90c5b86b00000000, 0x0ec512a700000000, 0x17ccd7ad00000000, + 0x89cc7d6100000000, 0x6acbf2ef00000000, 0xf4cb582300000000, + 0x58d978fa00000000, 0xc6d9d23600000000, 0x25de5db800000000, + 0xbbdef77400000000, 0xa2d7327e00000000, 0x3cd798b200000000, + 0xdfd0173c00000000, 0x41d0bdf000000000, 0xc6f3265500000000, + 0x58f38c9900000000, 0xbbf4031700000000, 0x25f4a9db00000000, + 0x3cfd6cd100000000, 0xa2fdc61d00000000, 0x41fa499300000000, + 0xdffae35f00000000, 0x73e8c38600000000, 0xede8694a00000000, + 0x0eefe6c400000000, 0x90ef4c0800000000, 0x89e6890200000000, + 0x17e623ce00000000, 0xf4e1ac4000000000, 0x6ae1068c00000000, + 0xbba0ebd000000000, 0x25a0411c00000000, 0xc6a7ce9200000000, + 0x58a7645e00000000, 0x41aea15400000000, 0xdfae0b9800000000, + 0x3ca9841600000000, 0xa2a92eda00000000, 0x0ebb0e0300000000, + 0x90bba4cf00000000, 0x73bc2b4100000000, 0xedbc818d00000000, + 0xf4b5448700000000, 0x6ab5ee4b00000000, 0x89b261c500000000, + 0x17b2cb0900000000, 0x909150ac00000000, 0x0e91fa6000000000, + 0xed9675ee00000000, 0x7396df2200000000, 0x6a9f1a2800000000, + 0xf49fb0e400000000, 0x17983f6a00000000, 0x899895a600000000, + 0x258ab57f00000000, 0xbb8a1fb300000000, 0x588d903d00000000, + 0xc68d3af100000000, 0xdf84fffb00000000, 0x4184553700000000, + 0xa283dab900000000, 0x3c83707500000000, 0xda853b5300000000, + 0x4485919f00000000, 0xa7821e1100000000, 0x3982b4dd00000000, + 0x208b71d700000000, 0xbe8bdb1b00000000, 0x5d8c549500000000, + 0xc38cfe5900000000, 0x6f9ede8000000000, 0xf19e744c00000000, + 0x1299fbc200000000, 0x8c99510e00000000, 0x9590940400000000, + 0x0b903ec800000000, 0xe897b14600000000, 0x76971b8a00000000, + 0xf1b4802f00000000, 0x6fb42ae300000000, 0x8cb3a56d00000000, + 0x12b30fa100000000, 0x0bbacaab00000000, 0x95ba606700000000, + 0x76bdefe900000000, 0xe8bd452500000000, 0x44af65fc00000000, + 0xdaafcf3000000000, 0x39a840be00000000, 0xa7a8ea7200000000, + 0xbea12f7800000000, 0x20a185b400000000, 0xc3a60a3a00000000, + 0x5da6a0f600000000, 0x8ce74daa00000000, 0x12e7e76600000000, + 0xf1e068e800000000, 0x6fe0c22400000000, 0x76e9072e00000000, + 0xe8e9ade200000000, 0x0bee226c00000000, 0x95ee88a000000000, + 0x39fca87900000000, 0xa7fc02b500000000, 0x44fb8d3b00000000, + 0xdafb27f700000000, 0xc3f2e2fd00000000, 0x5df2483100000000, + 0xbef5c7bf00000000, 0x20f56d7300000000, 0xa7d6f6d600000000, + 0x39d65c1a00000000, 0xdad1d39400000000, 0x44d1795800000000, + 0x5dd8bc5200000000, 0xc3d8169e00000000, 0x20df991000000000, + 0xbedf33dc00000000, 0x12cd130500000000, 0x8ccdb9c900000000, + 0x6fca364700000000, 0xf1ca9c8b00000000, 0xe8c3598100000000, + 0x76c3f34d00000000, 0x95c47cc300000000, 0x0bc4d60f00000000, + 0x3747a67a00000000, 0xa9470cb600000000, 0x4a40833800000000, + 0xd44029f400000000, 0xcd49ecfe00000000, 0x5349463200000000, + 0xb04ec9bc00000000, 0x2e4e637000000000, 0x825c43a900000000, + 0x1c5ce96500000000, 0xff5b66eb00000000, 0x615bcc2700000000, + 0x7852092d00000000, 0xe652a3e100000000, 0x05552c6f00000000, + 0x9b5586a300000000, 0x1c761d0600000000, 0x8276b7ca00000000, + 0x6171384400000000, 0xff71928800000000, 0xe678578200000000, + 0x7878fd4e00000000, 0x9b7f72c000000000, 0x057fd80c00000000, + 0xa96df8d500000000, 0x376d521900000000, 0xd46add9700000000, + 0x4a6a775b00000000, 0x5363b25100000000, 0xcd63189d00000000, + 0x2e64971300000000, 0xb0643ddf00000000, 0x6125d08300000000, + 0xff257a4f00000000, 0x1c22f5c100000000, 0x82225f0d00000000, + 0x9b2b9a0700000000, 0x052b30cb00000000, 0xe62cbf4500000000, + 0x782c158900000000, 0xd43e355000000000, 0x4a3e9f9c00000000, + 0xa939101200000000, 0x3739bade00000000, 0x2e307fd400000000, + 0xb030d51800000000, 0x53375a9600000000, 0xcd37f05a00000000, + 0x4a146bff00000000, 0xd414c13300000000, 0x37134ebd00000000, + 0xa913e47100000000, 0xb01a217b00000000, 0x2e1a8bb700000000, + 0xcd1d043900000000, 0x531daef500000000, 0xff0f8e2c00000000, + 0x610f24e000000000, 0x8208ab6e00000000, 0x1c0801a200000000, + 0x0501c4a800000000, 0x9b016e6400000000, 0x7806e1ea00000000, + 0xe6064b2600000000}}; + +#else /* W == 4 */ + +local const z_crc_t FAR crc_braid_table[][256] = { + {0x00000000, 0xb8bc6765, 0xaa09c88b, 0x12b5afee, 0x8f629757, + 0x37def032, 0x256b5fdc, 0x9dd738b9, 0xc5b428ef, 0x7d084f8a, + 0x6fbde064, 0xd7018701, 0x4ad6bfb8, 0xf26ad8dd, 0xe0df7733, + 0x58631056, 0x5019579f, 0xe8a530fa, 0xfa109f14, 0x42acf871, + 0xdf7bc0c8, 0x67c7a7ad, 0x75720843, 0xcdce6f26, 0x95ad7f70, + 0x2d111815, 0x3fa4b7fb, 0x8718d09e, 0x1acfe827, 0xa2738f42, + 0xb0c620ac, 0x087a47c9, 0xa032af3e, 0x188ec85b, 0x0a3b67b5, + 0xb28700d0, 0x2f503869, 0x97ec5f0c, 0x8559f0e2, 0x3de59787, + 0x658687d1, 0xdd3ae0b4, 0xcf8f4f5a, 0x7733283f, 0xeae41086, + 0x525877e3, 0x40edd80d, 0xf851bf68, 0xf02bf8a1, 0x48979fc4, + 0x5a22302a, 0xe29e574f, 0x7f496ff6, 0xc7f50893, 0xd540a77d, + 0x6dfcc018, 0x359fd04e, 0x8d23b72b, 0x9f9618c5, 0x272a7fa0, + 0xbafd4719, 0x0241207c, 0x10f48f92, 0xa848e8f7, 0x9b14583d, + 0x23a83f58, 0x311d90b6, 0x89a1f7d3, 0x1476cf6a, 0xaccaa80f, + 0xbe7f07e1, 0x06c36084, 0x5ea070d2, 0xe61c17b7, 0xf4a9b859, + 0x4c15df3c, 0xd1c2e785, 0x697e80e0, 0x7bcb2f0e, 0xc377486b, + 0xcb0d0fa2, 0x73b168c7, 0x6104c729, 0xd9b8a04c, 0x446f98f5, + 0xfcd3ff90, 0xee66507e, 0x56da371b, 0x0eb9274d, 0xb6054028, + 0xa4b0efc6, 0x1c0c88a3, 0x81dbb01a, 0x3967d77f, 0x2bd27891, + 0x936e1ff4, 0x3b26f703, 0x839a9066, 0x912f3f88, 0x299358ed, + 0xb4446054, 0x0cf80731, 0x1e4da8df, 0xa6f1cfba, 0xfe92dfec, + 0x462eb889, 0x549b1767, 0xec277002, 0x71f048bb, 0xc94c2fde, + 0xdbf98030, 0x6345e755, 0x6b3fa09c, 0xd383c7f9, 0xc1366817, + 0x798a0f72, 0xe45d37cb, 0x5ce150ae, 0x4e54ff40, 0xf6e89825, + 0xae8b8873, 0x1637ef16, 0x048240f8, 0xbc3e279d, 0x21e91f24, + 0x99557841, 0x8be0d7af, 0x335cb0ca, 0xed59b63b, 0x55e5d15e, + 0x47507eb0, 0xffec19d5, 0x623b216c, 0xda874609, 0xc832e9e7, + 0x708e8e82, 0x28ed9ed4, 0x9051f9b1, 0x82e4565f, 0x3a58313a, + 0xa78f0983, 0x1f336ee6, 0x0d86c108, 0xb53aa66d, 0xbd40e1a4, + 0x05fc86c1, 0x1749292f, 0xaff54e4a, 0x322276f3, 0x8a9e1196, + 0x982bbe78, 0x2097d91d, 0x78f4c94b, 0xc048ae2e, 0xd2fd01c0, + 0x6a4166a5, 0xf7965e1c, 0x4f2a3979, 0x5d9f9697, 0xe523f1f2, + 0x4d6b1905, 0xf5d77e60, 0xe762d18e, 0x5fdeb6eb, 0xc2098e52, + 0x7ab5e937, 0x680046d9, 0xd0bc21bc, 0x88df31ea, 0x3063568f, + 0x22d6f961, 0x9a6a9e04, 0x07bda6bd, 0xbf01c1d8, 0xadb46e36, + 0x15080953, 0x1d724e9a, 0xa5ce29ff, 0xb77b8611, 0x0fc7e174, + 0x9210d9cd, 0x2aacbea8, 0x38191146, 0x80a57623, 0xd8c66675, + 0x607a0110, 0x72cfaefe, 0xca73c99b, 0x57a4f122, 0xef189647, + 0xfdad39a9, 0x45115ecc, 0x764dee06, 0xcef18963, 0xdc44268d, + 0x64f841e8, 0xf92f7951, 0x41931e34, 0x5326b1da, 0xeb9ad6bf, + 0xb3f9c6e9, 0x0b45a18c, 0x19f00e62, 0xa14c6907, 0x3c9b51be, + 0x842736db, 0x96929935, 0x2e2efe50, 0x2654b999, 0x9ee8defc, + 0x8c5d7112, 0x34e11677, 0xa9362ece, 0x118a49ab, 0x033fe645, + 0xbb838120, 0xe3e09176, 0x5b5cf613, 0x49e959fd, 0xf1553e98, + 0x6c820621, 0xd43e6144, 0xc68bceaa, 0x7e37a9cf, 0xd67f4138, + 0x6ec3265d, 0x7c7689b3, 0xc4caeed6, 0x591dd66f, 0xe1a1b10a, + 0xf3141ee4, 0x4ba87981, 0x13cb69d7, 0xab770eb2, 0xb9c2a15c, + 0x017ec639, 0x9ca9fe80, 0x241599e5, 0x36a0360b, 0x8e1c516e, + 0x866616a7, 0x3eda71c2, 0x2c6fde2c, 0x94d3b949, 0x090481f0, + 0xb1b8e695, 0xa30d497b, 0x1bb12e1e, 0x43d23e48, 0xfb6e592d, + 0xe9dbf6c3, 0x516791a6, 0xccb0a91f, 0x740cce7a, 0x66b96194, + 0xde0506f1}, + {0x00000000, 0x01c26a37, 0x0384d46e, 0x0246be59, 0x0709a8dc, + 0x06cbc2eb, 0x048d7cb2, 0x054f1685, 0x0e1351b8, 0x0fd13b8f, + 0x0d9785d6, 0x0c55efe1, 0x091af964, 0x08d89353, 0x0a9e2d0a, + 0x0b5c473d, 0x1c26a370, 0x1de4c947, 0x1fa2771e, 0x1e601d29, + 0x1b2f0bac, 0x1aed619b, 0x18abdfc2, 0x1969b5f5, 0x1235f2c8, + 0x13f798ff, 0x11b126a6, 0x10734c91, 0x153c5a14, 0x14fe3023, + 0x16b88e7a, 0x177ae44d, 0x384d46e0, 0x398f2cd7, 0x3bc9928e, + 0x3a0bf8b9, 0x3f44ee3c, 0x3e86840b, 0x3cc03a52, 0x3d025065, + 0x365e1758, 0x379c7d6f, 0x35dac336, 0x3418a901, 0x3157bf84, + 0x3095d5b3, 0x32d36bea, 0x331101dd, 0x246be590, 0x25a98fa7, + 0x27ef31fe, 0x262d5bc9, 0x23624d4c, 0x22a0277b, 0x20e69922, + 0x2124f315, 0x2a78b428, 0x2bbade1f, 0x29fc6046, 0x283e0a71, + 0x2d711cf4, 0x2cb376c3, 0x2ef5c89a, 0x2f37a2ad, 0x709a8dc0, + 0x7158e7f7, 0x731e59ae, 0x72dc3399, 0x7793251c, 0x76514f2b, + 0x7417f172, 0x75d59b45, 0x7e89dc78, 0x7f4bb64f, 0x7d0d0816, + 0x7ccf6221, 0x798074a4, 0x78421e93, 0x7a04a0ca, 0x7bc6cafd, + 0x6cbc2eb0, 0x6d7e4487, 0x6f38fade, 0x6efa90e9, 0x6bb5866c, + 0x6a77ec5b, 0x68315202, 0x69f33835, 0x62af7f08, 0x636d153f, + 0x612bab66, 0x60e9c151, 0x65a6d7d4, 0x6464bde3, 0x662203ba, + 0x67e0698d, 0x48d7cb20, 0x4915a117, 0x4b531f4e, 0x4a917579, + 0x4fde63fc, 0x4e1c09cb, 0x4c5ab792, 0x4d98dda5, 0x46c49a98, + 0x4706f0af, 0x45404ef6, 0x448224c1, 0x41cd3244, 0x400f5873, + 0x4249e62a, 0x438b8c1d, 0x54f16850, 0x55330267, 0x5775bc3e, + 0x56b7d609, 0x53f8c08c, 0x523aaabb, 0x507c14e2, 0x51be7ed5, + 0x5ae239e8, 0x5b2053df, 0x5966ed86, 0x58a487b1, 0x5deb9134, + 0x5c29fb03, 0x5e6f455a, 0x5fad2f6d, 0xe1351b80, 0xe0f771b7, + 0xe2b1cfee, 0xe373a5d9, 0xe63cb35c, 0xe7fed96b, 0xe5b86732, + 0xe47a0d05, 0xef264a38, 0xeee4200f, 0xeca29e56, 0xed60f461, + 0xe82fe2e4, 0xe9ed88d3, 0xebab368a, 0xea695cbd, 0xfd13b8f0, + 0xfcd1d2c7, 0xfe976c9e, 0xff5506a9, 0xfa1a102c, 0xfbd87a1b, + 0xf99ec442, 0xf85cae75, 0xf300e948, 0xf2c2837f, 0xf0843d26, + 0xf1465711, 0xf4094194, 0xf5cb2ba3, 0xf78d95fa, 0xf64fffcd, + 0xd9785d60, 0xd8ba3757, 0xdafc890e, 0xdb3ee339, 0xde71f5bc, + 0xdfb39f8b, 0xddf521d2, 0xdc374be5, 0xd76b0cd8, 0xd6a966ef, + 0xd4efd8b6, 0xd52db281, 0xd062a404, 0xd1a0ce33, 0xd3e6706a, + 0xd2241a5d, 0xc55efe10, 0xc49c9427, 0xc6da2a7e, 0xc7184049, + 0xc25756cc, 0xc3953cfb, 0xc1d382a2, 0xc011e895, 0xcb4dafa8, + 0xca8fc59f, 0xc8c97bc6, 0xc90b11f1, 0xcc440774, 0xcd866d43, + 0xcfc0d31a, 0xce02b92d, 0x91af9640, 0x906dfc77, 0x922b422e, + 0x93e92819, 0x96a63e9c, 0x976454ab, 0x9522eaf2, 0x94e080c5, + 0x9fbcc7f8, 0x9e7eadcf, 0x9c381396, 0x9dfa79a1, 0x98b56f24, + 0x99770513, 0x9b31bb4a, 0x9af3d17d, 0x8d893530, 0x8c4b5f07, + 0x8e0de15e, 0x8fcf8b69, 0x8a809dec, 0x8b42f7db, 0x89044982, + 0x88c623b5, 0x839a6488, 0x82580ebf, 0x801eb0e6, 0x81dcdad1, + 0x8493cc54, 0x8551a663, 0x8717183a, 0x86d5720d, 0xa9e2d0a0, + 0xa820ba97, 0xaa6604ce, 0xaba46ef9, 0xaeeb787c, 0xaf29124b, + 0xad6fac12, 0xacadc625, 0xa7f18118, 0xa633eb2f, 0xa4755576, + 0xa5b73f41, 0xa0f829c4, 0xa13a43f3, 0xa37cfdaa, 0xa2be979d, + 0xb5c473d0, 0xb40619e7, 0xb640a7be, 0xb782cd89, 0xb2cddb0c, + 0xb30fb13b, 0xb1490f62, 0xb08b6555, 0xbbd72268, 0xba15485f, + 0xb853f606, 0xb9919c31, 0xbcde8ab4, 0xbd1ce083, 0xbf5a5eda, + 0xbe9834ed}, + {0x00000000, 0x191b3141, 0x32366282, 0x2b2d53c3, 0x646cc504, + 0x7d77f445, 0x565aa786, 0x4f4196c7, 0xc8d98a08, 0xd1c2bb49, + 0xfaefe88a, 0xe3f4d9cb, 0xacb54f0c, 0xb5ae7e4d, 0x9e832d8e, + 0x87981ccf, 0x4ac21251, 0x53d92310, 0x78f470d3, 0x61ef4192, + 0x2eaed755, 0x37b5e614, 0x1c98b5d7, 0x05838496, 0x821b9859, + 0x9b00a918, 0xb02dfadb, 0xa936cb9a, 0xe6775d5d, 0xff6c6c1c, + 0xd4413fdf, 0xcd5a0e9e, 0x958424a2, 0x8c9f15e3, 0xa7b24620, + 0xbea97761, 0xf1e8e1a6, 0xe8f3d0e7, 0xc3de8324, 0xdac5b265, + 0x5d5daeaa, 0x44469feb, 0x6f6bcc28, 0x7670fd69, 0x39316bae, + 0x202a5aef, 0x0b07092c, 0x121c386d, 0xdf4636f3, 0xc65d07b2, + 0xed705471, 0xf46b6530, 0xbb2af3f7, 0xa231c2b6, 0x891c9175, + 0x9007a034, 0x179fbcfb, 0x0e848dba, 0x25a9de79, 0x3cb2ef38, + 0x73f379ff, 0x6ae848be, 0x41c51b7d, 0x58de2a3c, 0xf0794f05, + 0xe9627e44, 0xc24f2d87, 0xdb541cc6, 0x94158a01, 0x8d0ebb40, + 0xa623e883, 0xbf38d9c2, 0x38a0c50d, 0x21bbf44c, 0x0a96a78f, + 0x138d96ce, 0x5ccc0009, 0x45d73148, 0x6efa628b, 0x77e153ca, + 0xbabb5d54, 0xa3a06c15, 0x888d3fd6, 0x91960e97, 0xded79850, + 0xc7cca911, 0xece1fad2, 0xf5facb93, 0x7262d75c, 0x6b79e61d, + 0x4054b5de, 0x594f849f, 0x160e1258, 0x0f152319, 0x243870da, + 0x3d23419b, 0x65fd6ba7, 0x7ce65ae6, 0x57cb0925, 0x4ed03864, + 0x0191aea3, 0x188a9fe2, 0x33a7cc21, 0x2abcfd60, 0xad24e1af, + 0xb43fd0ee, 0x9f12832d, 0x8609b26c, 0xc94824ab, 0xd05315ea, + 0xfb7e4629, 0xe2657768, 0x2f3f79f6, 0x362448b7, 0x1d091b74, + 0x04122a35, 0x4b53bcf2, 0x52488db3, 0x7965de70, 0x607eef31, + 0xe7e6f3fe, 0xfefdc2bf, 0xd5d0917c, 0xcccba03d, 0x838a36fa, + 0x9a9107bb, 0xb1bc5478, 0xa8a76539, 0x3b83984b, 0x2298a90a, + 0x09b5fac9, 0x10aecb88, 0x5fef5d4f, 0x46f46c0e, 0x6dd93fcd, + 0x74c20e8c, 0xf35a1243, 0xea412302, 0xc16c70c1, 0xd8774180, + 0x9736d747, 0x8e2de606, 0xa500b5c5, 0xbc1b8484, 0x71418a1a, + 0x685abb5b, 0x4377e898, 0x5a6cd9d9, 0x152d4f1e, 0x0c367e5f, + 0x271b2d9c, 0x3e001cdd, 0xb9980012, 0xa0833153, 0x8bae6290, + 0x92b553d1, 0xddf4c516, 0xc4eff457, 0xefc2a794, 0xf6d996d5, + 0xae07bce9, 0xb71c8da8, 0x9c31de6b, 0x852aef2a, 0xca6b79ed, + 0xd37048ac, 0xf85d1b6f, 0xe1462a2e, 0x66de36e1, 0x7fc507a0, + 0x54e85463, 0x4df36522, 0x02b2f3e5, 0x1ba9c2a4, 0x30849167, + 0x299fa026, 0xe4c5aeb8, 0xfdde9ff9, 0xd6f3cc3a, 0xcfe8fd7b, + 0x80a96bbc, 0x99b25afd, 0xb29f093e, 0xab84387f, 0x2c1c24b0, + 0x350715f1, 0x1e2a4632, 0x07317773, 0x4870e1b4, 0x516bd0f5, + 0x7a468336, 0x635db277, 0xcbfad74e, 0xd2e1e60f, 0xf9ccb5cc, + 0xe0d7848d, 0xaf96124a, 0xb68d230b, 0x9da070c8, 0x84bb4189, + 0x03235d46, 0x1a386c07, 0x31153fc4, 0x280e0e85, 0x674f9842, + 0x7e54a903, 0x5579fac0, 0x4c62cb81, 0x8138c51f, 0x9823f45e, + 0xb30ea79d, 0xaa1596dc, 0xe554001b, 0xfc4f315a, 0xd7626299, + 0xce7953d8, 0x49e14f17, 0x50fa7e56, 0x7bd72d95, 0x62cc1cd4, + 0x2d8d8a13, 0x3496bb52, 0x1fbbe891, 0x06a0d9d0, 0x5e7ef3ec, + 0x4765c2ad, 0x6c48916e, 0x7553a02f, 0x3a1236e8, 0x230907a9, + 0x0824546a, 0x113f652b, 0x96a779e4, 0x8fbc48a5, 0xa4911b66, + 0xbd8a2a27, 0xf2cbbce0, 0xebd08da1, 0xc0fdde62, 0xd9e6ef23, + 0x14bce1bd, 0x0da7d0fc, 0x268a833f, 0x3f91b27e, 0x70d024b9, + 0x69cb15f8, 0x42e6463b, 0x5bfd777a, 0xdc656bb5, 0xc57e5af4, + 0xee530937, 0xf7483876, 0xb809aeb1, 0xa1129ff0, 0x8a3fcc33, + 0x9324fd72}, + {0x00000000, 0x77073096, 0xee0e612c, 0x990951ba, 0x076dc419, + 0x706af48f, 0xe963a535, 0x9e6495a3, 0x0edb8832, 0x79dcb8a4, + 0xe0d5e91e, 0x97d2d988, 0x09b64c2b, 0x7eb17cbd, 0xe7b82d07, + 0x90bf1d91, 0x1db71064, 0x6ab020f2, 0xf3b97148, 0x84be41de, + 0x1adad47d, 0x6ddde4eb, 0xf4d4b551, 0x83d385c7, 0x136c9856, + 0x646ba8c0, 0xfd62f97a, 0x8a65c9ec, 0x14015c4f, 0x63066cd9, + 0xfa0f3d63, 0x8d080df5, 0x3b6e20c8, 0x4c69105e, 0xd56041e4, + 0xa2677172, 0x3c03e4d1, 0x4b04d447, 0xd20d85fd, 0xa50ab56b, + 0x35b5a8fa, 0x42b2986c, 0xdbbbc9d6, 0xacbcf940, 0x32d86ce3, + 0x45df5c75, 0xdcd60dcf, 0xabd13d59, 0x26d930ac, 0x51de003a, + 0xc8d75180, 0xbfd06116, 0x21b4f4b5, 0x56b3c423, 0xcfba9599, + 0xb8bda50f, 0x2802b89e, 0x5f058808, 0xc60cd9b2, 0xb10be924, + 0x2f6f7c87, 0x58684c11, 0xc1611dab, 0xb6662d3d, 0x76dc4190, + 0x01db7106, 0x98d220bc, 0xefd5102a, 0x71b18589, 0x06b6b51f, + 0x9fbfe4a5, 0xe8b8d433, 0x7807c9a2, 0x0f00f934, 0x9609a88e, + 0xe10e9818, 0x7f6a0dbb, 0x086d3d2d, 0x91646c97, 0xe6635c01, + 0x6b6b51f4, 0x1c6c6162, 0x856530d8, 0xf262004e, 0x6c0695ed, + 0x1b01a57b, 0x8208f4c1, 0xf50fc457, 0x65b0d9c6, 0x12b7e950, + 0x8bbeb8ea, 0xfcb9887c, 0x62dd1ddf, 0x15da2d49, 0x8cd37cf3, + 0xfbd44c65, 0x4db26158, 0x3ab551ce, 0xa3bc0074, 0xd4bb30e2, + 0x4adfa541, 0x3dd895d7, 0xa4d1c46d, 0xd3d6f4fb, 0x4369e96a, + 0x346ed9fc, 0xad678846, 0xda60b8d0, 0x44042d73, 0x33031de5, + 0xaa0a4c5f, 0xdd0d7cc9, 0x5005713c, 0x270241aa, 0xbe0b1010, + 0xc90c2086, 0x5768b525, 0x206f85b3, 0xb966d409, 0xce61e49f, + 0x5edef90e, 0x29d9c998, 0xb0d09822, 0xc7d7a8b4, 0x59b33d17, + 0x2eb40d81, 0xb7bd5c3b, 0xc0ba6cad, 0xedb88320, 0x9abfb3b6, + 0x03b6e20c, 0x74b1d29a, 0xead54739, 0x9dd277af, 0x04db2615, + 0x73dc1683, 0xe3630b12, 0x94643b84, 0x0d6d6a3e, 0x7a6a5aa8, + 0xe40ecf0b, 0x9309ff9d, 0x0a00ae27, 0x7d079eb1, 0xf00f9344, + 0x8708a3d2, 0x1e01f268, 0x6906c2fe, 0xf762575d, 0x806567cb, + 0x196c3671, 0x6e6b06e7, 0xfed41b76, 0x89d32be0, 0x10da7a5a, + 0x67dd4acc, 0xf9b9df6f, 0x8ebeeff9, 0x17b7be43, 0x60b08ed5, + 0xd6d6a3e8, 0xa1d1937e, 0x38d8c2c4, 0x4fdff252, 0xd1bb67f1, + 0xa6bc5767, 0x3fb506dd, 0x48b2364b, 0xd80d2bda, 0xaf0a1b4c, + 0x36034af6, 0x41047a60, 0xdf60efc3, 0xa867df55, 0x316e8eef, + 0x4669be79, 0xcb61b38c, 0xbc66831a, 0x256fd2a0, 0x5268e236, + 0xcc0c7795, 0xbb0b4703, 0x220216b9, 0x5505262f, 0xc5ba3bbe, + 0xb2bd0b28, 0x2bb45a92, 0x5cb36a04, 0xc2d7ffa7, 0xb5d0cf31, + 0x2cd99e8b, 0x5bdeae1d, 0x9b64c2b0, 0xec63f226, 0x756aa39c, + 0x026d930a, 0x9c0906a9, 0xeb0e363f, 0x72076785, 0x05005713, + 0x95bf4a82, 0xe2b87a14, 0x7bb12bae, 0x0cb61b38, 0x92d28e9b, + 0xe5d5be0d, 0x7cdcefb7, 0x0bdbdf21, 0x86d3d2d4, 0xf1d4e242, + 0x68ddb3f8, 0x1fda836e, 0x81be16cd, 0xf6b9265b, 0x6fb077e1, + 0x18b74777, 0x88085ae6, 0xff0f6a70, 0x66063bca, 0x11010b5c, + 0x8f659eff, 0xf862ae69, 0x616bffd3, 0x166ccf45, 0xa00ae278, + 0xd70dd2ee, 0x4e048354, 0x3903b3c2, 0xa7672661, 0xd06016f7, + 0x4969474d, 0x3e6e77db, 0xaed16a4a, 0xd9d65adc, 0x40df0b66, + 0x37d83bf0, 0xa9bcae53, 0xdebb9ec5, 0x47b2cf7f, 0x30b5ffe9, + 0xbdbdf21c, 0xcabac28a, 0x53b39330, 0x24b4a3a6, 0xbad03605, + 0xcdd70693, 0x54de5729, 0x23d967bf, 0xb3667a2e, 0xc4614ab8, + 0x5d681b02, 0x2a6f2b94, 0xb40bbe37, 0xc30c8ea1, 0x5a05df1b, + 0x2d02ef8d}}; + +local const z_word_t FAR crc_braid_big_table[][256] = { + {0x00000000, 0x96300777, 0x2c610eee, 0xba510999, 0x19c46d07, + 0x8ff46a70, 0x35a563e9, 0xa395649e, 0x3288db0e, 0xa4b8dc79, + 0x1ee9d5e0, 0x88d9d297, 0x2b4cb609, 0xbd7cb17e, 0x072db8e7, + 0x911dbf90, 0x6410b71d, 0xf220b06a, 0x4871b9f3, 0xde41be84, + 0x7dd4da1a, 0xebe4dd6d, 0x51b5d4f4, 0xc785d383, 0x56986c13, + 0xc0a86b64, 0x7af962fd, 0xecc9658a, 0x4f5c0114, 0xd96c0663, + 0x633d0ffa, 0xf50d088d, 0xc8206e3b, 0x5e10694c, 0xe44160d5, + 0x727167a2, 0xd1e4033c, 0x47d4044b, 0xfd850dd2, 0x6bb50aa5, + 0xfaa8b535, 0x6c98b242, 0xd6c9bbdb, 0x40f9bcac, 0xe36cd832, + 0x755cdf45, 0xcf0dd6dc, 0x593dd1ab, 0xac30d926, 0x3a00de51, + 0x8051d7c8, 0x1661d0bf, 0xb5f4b421, 0x23c4b356, 0x9995bacf, + 0x0fa5bdb8, 0x9eb80228, 0x0888055f, 0xb2d90cc6, 0x24e90bb1, + 0x877c6f2f, 0x114c6858, 0xab1d61c1, 0x3d2d66b6, 0x9041dc76, + 0x0671db01, 0xbc20d298, 0x2a10d5ef, 0x8985b171, 0x1fb5b606, + 0xa5e4bf9f, 0x33d4b8e8, 0xa2c90778, 0x34f9000f, 0x8ea80996, + 0x18980ee1, 0xbb0d6a7f, 0x2d3d6d08, 0x976c6491, 0x015c63e6, + 0xf4516b6b, 0x62616c1c, 0xd8306585, 0x4e0062f2, 0xed95066c, + 0x7ba5011b, 0xc1f40882, 0x57c40ff5, 0xc6d9b065, 0x50e9b712, + 0xeab8be8b, 0x7c88b9fc, 0xdf1ddd62, 0x492dda15, 0xf37cd38c, + 0x654cd4fb, 0x5861b24d, 0xce51b53a, 0x7400bca3, 0xe230bbd4, + 0x41a5df4a, 0xd795d83d, 0x6dc4d1a4, 0xfbf4d6d3, 0x6ae96943, + 0xfcd96e34, 0x468867ad, 0xd0b860da, 0x732d0444, 0xe51d0333, + 0x5f4c0aaa, 0xc97c0ddd, 0x3c710550, 0xaa410227, 0x10100bbe, + 0x86200cc9, 0x25b56857, 0xb3856f20, 0x09d466b9, 0x9fe461ce, + 0x0ef9de5e, 0x98c9d929, 0x2298d0b0, 0xb4a8d7c7, 0x173db359, + 0x810db42e, 0x3b5cbdb7, 0xad6cbac0, 0x2083b8ed, 0xb6b3bf9a, + 0x0ce2b603, 0x9ad2b174, 0x3947d5ea, 0xaf77d29d, 0x1526db04, + 0x8316dc73, 0x120b63e3, 0x843b6494, 0x3e6a6d0d, 0xa85a6a7a, + 0x0bcf0ee4, 0x9dff0993, 0x27ae000a, 0xb19e077d, 0x44930ff0, + 0xd2a30887, 0x68f2011e, 0xfec20669, 0x5d5762f7, 0xcb676580, + 0x71366c19, 0xe7066b6e, 0x761bd4fe, 0xe02bd389, 0x5a7ada10, + 0xcc4add67, 0x6fdfb9f9, 0xf9efbe8e, 0x43beb717, 0xd58eb060, + 0xe8a3d6d6, 0x7e93d1a1, 0xc4c2d838, 0x52f2df4f, 0xf167bbd1, + 0x6757bca6, 0xdd06b53f, 0x4b36b248, 0xda2b0dd8, 0x4c1b0aaf, + 0xf64a0336, 0x607a0441, 0xc3ef60df, 0x55df67a8, 0xef8e6e31, + 0x79be6946, 0x8cb361cb, 0x1a8366bc, 0xa0d26f25, 0x36e26852, + 0x95770ccc, 0x03470bbb, 0xb9160222, 0x2f260555, 0xbe3bbac5, + 0x280bbdb2, 0x925ab42b, 0x046ab35c, 0xa7ffd7c2, 0x31cfd0b5, + 0x8b9ed92c, 0x1daede5b, 0xb0c2649b, 0x26f263ec, 0x9ca36a75, + 0x0a936d02, 0xa906099c, 0x3f360eeb, 0x85670772, 0x13570005, + 0x824abf95, 0x147ab8e2, 0xae2bb17b, 0x381bb60c, 0x9b8ed292, + 0x0dbed5e5, 0xb7efdc7c, 0x21dfdb0b, 0xd4d2d386, 0x42e2d4f1, + 0xf8b3dd68, 0x6e83da1f, 0xcd16be81, 0x5b26b9f6, 0xe177b06f, + 0x7747b718, 0xe65a0888, 0x706a0fff, 0xca3b0666, 0x5c0b0111, + 0xff9e658f, 0x69ae62f8, 0xd3ff6b61, 0x45cf6c16, 0x78e20aa0, + 0xeed20dd7, 0x5483044e, 0xc2b30339, 0x612667a7, 0xf71660d0, + 0x4d476949, 0xdb776e3e, 0x4a6ad1ae, 0xdc5ad6d9, 0x660bdf40, + 0xf03bd837, 0x53aebca9, 0xc59ebbde, 0x7fcfb247, 0xe9ffb530, + 0x1cf2bdbd, 0x8ac2baca, 0x3093b353, 0xa6a3b424, 0x0536d0ba, + 0x9306d7cd, 0x2957de54, 0xbf67d923, 0x2e7a66b3, 0xb84a61c4, + 0x021b685d, 0x942b6f2a, 0x37be0bb4, 0xa18e0cc3, 0x1bdf055a, + 0x8def022d}, + {0x00000000, 0x41311b19, 0x82623632, 0xc3532d2b, 0x04c56c64, + 0x45f4777d, 0x86a75a56, 0xc796414f, 0x088ad9c8, 0x49bbc2d1, + 0x8ae8effa, 0xcbd9f4e3, 0x0c4fb5ac, 0x4d7eaeb5, 0x8e2d839e, + 0xcf1c9887, 0x5112c24a, 0x1023d953, 0xd370f478, 0x9241ef61, + 0x55d7ae2e, 0x14e6b537, 0xd7b5981c, 0x96848305, 0x59981b82, + 0x18a9009b, 0xdbfa2db0, 0x9acb36a9, 0x5d5d77e6, 0x1c6c6cff, + 0xdf3f41d4, 0x9e0e5acd, 0xa2248495, 0xe3159f8c, 0x2046b2a7, + 0x6177a9be, 0xa6e1e8f1, 0xe7d0f3e8, 0x2483dec3, 0x65b2c5da, + 0xaaae5d5d, 0xeb9f4644, 0x28cc6b6f, 0x69fd7076, 0xae6b3139, + 0xef5a2a20, 0x2c09070b, 0x6d381c12, 0xf33646df, 0xb2075dc6, + 0x715470ed, 0x30656bf4, 0xf7f32abb, 0xb6c231a2, 0x75911c89, + 0x34a00790, 0xfbbc9f17, 0xba8d840e, 0x79dea925, 0x38efb23c, + 0xff79f373, 0xbe48e86a, 0x7d1bc541, 0x3c2ade58, 0x054f79f0, + 0x447e62e9, 0x872d4fc2, 0xc61c54db, 0x018a1594, 0x40bb0e8d, + 0x83e823a6, 0xc2d938bf, 0x0dc5a038, 0x4cf4bb21, 0x8fa7960a, + 0xce968d13, 0x0900cc5c, 0x4831d745, 0x8b62fa6e, 0xca53e177, + 0x545dbbba, 0x156ca0a3, 0xd63f8d88, 0x970e9691, 0x5098d7de, + 0x11a9ccc7, 0xd2fae1ec, 0x93cbfaf5, 0x5cd76272, 0x1de6796b, + 0xdeb55440, 0x9f844f59, 0x58120e16, 0x1923150f, 0xda703824, + 0x9b41233d, 0xa76bfd65, 0xe65ae67c, 0x2509cb57, 0x6438d04e, + 0xa3ae9101, 0xe29f8a18, 0x21cca733, 0x60fdbc2a, 0xafe124ad, + 0xeed03fb4, 0x2d83129f, 0x6cb20986, 0xab2448c9, 0xea1553d0, + 0x29467efb, 0x687765e2, 0xf6793f2f, 0xb7482436, 0x741b091d, + 0x352a1204, 0xf2bc534b, 0xb38d4852, 0x70de6579, 0x31ef7e60, + 0xfef3e6e7, 0xbfc2fdfe, 0x7c91d0d5, 0x3da0cbcc, 0xfa368a83, + 0xbb07919a, 0x7854bcb1, 0x3965a7a8, 0x4b98833b, 0x0aa99822, + 0xc9fab509, 0x88cbae10, 0x4f5def5f, 0x0e6cf446, 0xcd3fd96d, + 0x8c0ec274, 0x43125af3, 0x022341ea, 0xc1706cc1, 0x804177d8, + 0x47d73697, 0x06e62d8e, 0xc5b500a5, 0x84841bbc, 0x1a8a4171, + 0x5bbb5a68, 0x98e87743, 0xd9d96c5a, 0x1e4f2d15, 0x5f7e360c, + 0x9c2d1b27, 0xdd1c003e, 0x120098b9, 0x533183a0, 0x9062ae8b, + 0xd153b592, 0x16c5f4dd, 0x57f4efc4, 0x94a7c2ef, 0xd596d9f6, + 0xe9bc07ae, 0xa88d1cb7, 0x6bde319c, 0x2aef2a85, 0xed796bca, + 0xac4870d3, 0x6f1b5df8, 0x2e2a46e1, 0xe136de66, 0xa007c57f, + 0x6354e854, 0x2265f34d, 0xe5f3b202, 0xa4c2a91b, 0x67918430, + 0x26a09f29, 0xb8aec5e4, 0xf99fdefd, 0x3accf3d6, 0x7bfde8cf, + 0xbc6ba980, 0xfd5ab299, 0x3e099fb2, 0x7f3884ab, 0xb0241c2c, + 0xf1150735, 0x32462a1e, 0x73773107, 0xb4e17048, 0xf5d06b51, + 0x3683467a, 0x77b25d63, 0x4ed7facb, 0x0fe6e1d2, 0xccb5ccf9, + 0x8d84d7e0, 0x4a1296af, 0x0b238db6, 0xc870a09d, 0x8941bb84, + 0x465d2303, 0x076c381a, 0xc43f1531, 0x850e0e28, 0x42984f67, + 0x03a9547e, 0xc0fa7955, 0x81cb624c, 0x1fc53881, 0x5ef42398, + 0x9da70eb3, 0xdc9615aa, 0x1b0054e5, 0x5a314ffc, 0x996262d7, + 0xd85379ce, 0x174fe149, 0x567efa50, 0x952dd77b, 0xd41ccc62, + 0x138a8d2d, 0x52bb9634, 0x91e8bb1f, 0xd0d9a006, 0xecf37e5e, + 0xadc26547, 0x6e91486c, 0x2fa05375, 0xe836123a, 0xa9070923, + 0x6a542408, 0x2b653f11, 0xe479a796, 0xa548bc8f, 0x661b91a4, + 0x272a8abd, 0xe0bccbf2, 0xa18dd0eb, 0x62defdc0, 0x23efe6d9, + 0xbde1bc14, 0xfcd0a70d, 0x3f838a26, 0x7eb2913f, 0xb924d070, + 0xf815cb69, 0x3b46e642, 0x7a77fd5b, 0xb56b65dc, 0xf45a7ec5, + 0x370953ee, 0x763848f7, 0xb1ae09b8, 0xf09f12a1, 0x33cc3f8a, + 0x72fd2493}, + {0x00000000, 0x376ac201, 0x6ed48403, 0x59be4602, 0xdca80907, + 0xebc2cb06, 0xb27c8d04, 0x85164f05, 0xb851130e, 0x8f3bd10f, + 0xd685970d, 0xe1ef550c, 0x64f91a09, 0x5393d808, 0x0a2d9e0a, + 0x3d475c0b, 0x70a3261c, 0x47c9e41d, 0x1e77a21f, 0x291d601e, + 0xac0b2f1b, 0x9b61ed1a, 0xc2dfab18, 0xf5b56919, 0xc8f23512, + 0xff98f713, 0xa626b111, 0x914c7310, 0x145a3c15, 0x2330fe14, + 0x7a8eb816, 0x4de47a17, 0xe0464d38, 0xd72c8f39, 0x8e92c93b, + 0xb9f80b3a, 0x3cee443f, 0x0b84863e, 0x523ac03c, 0x6550023d, + 0x58175e36, 0x6f7d9c37, 0x36c3da35, 0x01a91834, 0x84bf5731, + 0xb3d59530, 0xea6bd332, 0xdd011133, 0x90e56b24, 0xa78fa925, + 0xfe31ef27, 0xc95b2d26, 0x4c4d6223, 0x7b27a022, 0x2299e620, + 0x15f32421, 0x28b4782a, 0x1fdeba2b, 0x4660fc29, 0x710a3e28, + 0xf41c712d, 0xc376b32c, 0x9ac8f52e, 0xada2372f, 0xc08d9a70, + 0xf7e75871, 0xae591e73, 0x9933dc72, 0x1c259377, 0x2b4f5176, + 0x72f11774, 0x459bd575, 0x78dc897e, 0x4fb64b7f, 0x16080d7d, + 0x2162cf7c, 0xa4748079, 0x931e4278, 0xcaa0047a, 0xfdcac67b, + 0xb02ebc6c, 0x87447e6d, 0xdefa386f, 0xe990fa6e, 0x6c86b56b, + 0x5bec776a, 0x02523168, 0x3538f369, 0x087faf62, 0x3f156d63, + 0x66ab2b61, 0x51c1e960, 0xd4d7a665, 0xe3bd6464, 0xba032266, + 0x8d69e067, 0x20cbd748, 0x17a11549, 0x4e1f534b, 0x7975914a, + 0xfc63de4f, 0xcb091c4e, 0x92b75a4c, 0xa5dd984d, 0x989ac446, + 0xaff00647, 0xf64e4045, 0xc1248244, 0x4432cd41, 0x73580f40, + 0x2ae64942, 0x1d8c8b43, 0x5068f154, 0x67023355, 0x3ebc7557, + 0x09d6b756, 0x8cc0f853, 0xbbaa3a52, 0xe2147c50, 0xd57ebe51, + 0xe839e25a, 0xdf53205b, 0x86ed6659, 0xb187a458, 0x3491eb5d, + 0x03fb295c, 0x5a456f5e, 0x6d2fad5f, 0x801b35e1, 0xb771f7e0, + 0xeecfb1e2, 0xd9a573e3, 0x5cb33ce6, 0x6bd9fee7, 0x3267b8e5, + 0x050d7ae4, 0x384a26ef, 0x0f20e4ee, 0x569ea2ec, 0x61f460ed, + 0xe4e22fe8, 0xd388ede9, 0x8a36abeb, 0xbd5c69ea, 0xf0b813fd, + 0xc7d2d1fc, 0x9e6c97fe, 0xa90655ff, 0x2c101afa, 0x1b7ad8fb, + 0x42c49ef9, 0x75ae5cf8, 0x48e900f3, 0x7f83c2f2, 0x263d84f0, + 0x115746f1, 0x944109f4, 0xa32bcbf5, 0xfa958df7, 0xcdff4ff6, + 0x605d78d9, 0x5737bad8, 0x0e89fcda, 0x39e33edb, 0xbcf571de, + 0x8b9fb3df, 0xd221f5dd, 0xe54b37dc, 0xd80c6bd7, 0xef66a9d6, + 0xb6d8efd4, 0x81b22dd5, 0x04a462d0, 0x33cea0d1, 0x6a70e6d3, + 0x5d1a24d2, 0x10fe5ec5, 0x27949cc4, 0x7e2adac6, 0x494018c7, + 0xcc5657c2, 0xfb3c95c3, 0xa282d3c1, 0x95e811c0, 0xa8af4dcb, + 0x9fc58fca, 0xc67bc9c8, 0xf1110bc9, 0x740744cc, 0x436d86cd, + 0x1ad3c0cf, 0x2db902ce, 0x4096af91, 0x77fc6d90, 0x2e422b92, + 0x1928e993, 0x9c3ea696, 0xab546497, 0xf2ea2295, 0xc580e094, + 0xf8c7bc9f, 0xcfad7e9e, 0x9613389c, 0xa179fa9d, 0x246fb598, + 0x13057799, 0x4abb319b, 0x7dd1f39a, 0x3035898d, 0x075f4b8c, + 0x5ee10d8e, 0x698bcf8f, 0xec9d808a, 0xdbf7428b, 0x82490489, + 0xb523c688, 0x88649a83, 0xbf0e5882, 0xe6b01e80, 0xd1dadc81, + 0x54cc9384, 0x63a65185, 0x3a181787, 0x0d72d586, 0xa0d0e2a9, + 0x97ba20a8, 0xce0466aa, 0xf96ea4ab, 0x7c78ebae, 0x4b1229af, + 0x12ac6fad, 0x25c6adac, 0x1881f1a7, 0x2feb33a6, 0x765575a4, + 0x413fb7a5, 0xc429f8a0, 0xf3433aa1, 0xaafd7ca3, 0x9d97bea2, + 0xd073c4b5, 0xe71906b4, 0xbea740b6, 0x89cd82b7, 0x0cdbcdb2, + 0x3bb10fb3, 0x620f49b1, 0x55658bb0, 0x6822d7bb, 0x5f4815ba, + 0x06f653b8, 0x319c91b9, 0xb48adebc, 0x83e01cbd, 0xda5e5abf, + 0xed3498be}, + {0x00000000, 0x6567bcb8, 0x8bc809aa, 0xeeafb512, 0x5797628f, + 0x32f0de37, 0xdc5f6b25, 0xb938d79d, 0xef28b4c5, 0x8a4f087d, + 0x64e0bd6f, 0x018701d7, 0xb8bfd64a, 0xddd86af2, 0x3377dfe0, + 0x56106358, 0x9f571950, 0xfa30a5e8, 0x149f10fa, 0x71f8ac42, + 0xc8c07bdf, 0xada7c767, 0x43087275, 0x266fcecd, 0x707fad95, + 0x1518112d, 0xfbb7a43f, 0x9ed01887, 0x27e8cf1a, 0x428f73a2, + 0xac20c6b0, 0xc9477a08, 0x3eaf32a0, 0x5bc88e18, 0xb5673b0a, + 0xd00087b2, 0x6938502f, 0x0c5fec97, 0xe2f05985, 0x8797e53d, + 0xd1878665, 0xb4e03add, 0x5a4f8fcf, 0x3f283377, 0x8610e4ea, + 0xe3775852, 0x0dd8ed40, 0x68bf51f8, 0xa1f82bf0, 0xc49f9748, + 0x2a30225a, 0x4f579ee2, 0xf66f497f, 0x9308f5c7, 0x7da740d5, + 0x18c0fc6d, 0x4ed09f35, 0x2bb7238d, 0xc518969f, 0xa07f2a27, + 0x1947fdba, 0x7c204102, 0x928ff410, 0xf7e848a8, 0x3d58149b, + 0x583fa823, 0xb6901d31, 0xd3f7a189, 0x6acf7614, 0x0fa8caac, + 0xe1077fbe, 0x8460c306, 0xd270a05e, 0xb7171ce6, 0x59b8a9f4, + 0x3cdf154c, 0x85e7c2d1, 0xe0807e69, 0x0e2fcb7b, 0x6b4877c3, + 0xa20f0dcb, 0xc768b173, 0x29c70461, 0x4ca0b8d9, 0xf5986f44, + 0x90ffd3fc, 0x7e5066ee, 0x1b37da56, 0x4d27b90e, 0x284005b6, + 0xc6efb0a4, 0xa3880c1c, 0x1ab0db81, 0x7fd76739, 0x9178d22b, + 0xf41f6e93, 0x03f7263b, 0x66909a83, 0x883f2f91, 0xed589329, + 0x546044b4, 0x3107f80c, 0xdfa84d1e, 0xbacff1a6, 0xecdf92fe, + 0x89b82e46, 0x67179b54, 0x027027ec, 0xbb48f071, 0xde2f4cc9, + 0x3080f9db, 0x55e74563, 0x9ca03f6b, 0xf9c783d3, 0x176836c1, + 0x720f8a79, 0xcb375de4, 0xae50e15c, 0x40ff544e, 0x2598e8f6, + 0x73888bae, 0x16ef3716, 0xf8408204, 0x9d273ebc, 0x241fe921, + 0x41785599, 0xafd7e08b, 0xcab05c33, 0x3bb659ed, 0x5ed1e555, + 0xb07e5047, 0xd519ecff, 0x6c213b62, 0x094687da, 0xe7e932c8, + 0x828e8e70, 0xd49eed28, 0xb1f95190, 0x5f56e482, 0x3a31583a, + 0x83098fa7, 0xe66e331f, 0x08c1860d, 0x6da63ab5, 0xa4e140bd, + 0xc186fc05, 0x2f294917, 0x4a4ef5af, 0xf3762232, 0x96119e8a, + 0x78be2b98, 0x1dd99720, 0x4bc9f478, 0x2eae48c0, 0xc001fdd2, + 0xa566416a, 0x1c5e96f7, 0x79392a4f, 0x97969f5d, 0xf2f123e5, + 0x05196b4d, 0x607ed7f5, 0x8ed162e7, 0xebb6de5f, 0x528e09c2, + 0x37e9b57a, 0xd9460068, 0xbc21bcd0, 0xea31df88, 0x8f566330, + 0x61f9d622, 0x049e6a9a, 0xbda6bd07, 0xd8c101bf, 0x366eb4ad, + 0x53090815, 0x9a4e721d, 0xff29cea5, 0x11867bb7, 0x74e1c70f, + 0xcdd91092, 0xa8beac2a, 0x46111938, 0x2376a580, 0x7566c6d8, + 0x10017a60, 0xfeaecf72, 0x9bc973ca, 0x22f1a457, 0x479618ef, + 0xa939adfd, 0xcc5e1145, 0x06ee4d76, 0x6389f1ce, 0x8d2644dc, + 0xe841f864, 0x51792ff9, 0x341e9341, 0xdab12653, 0xbfd69aeb, + 0xe9c6f9b3, 0x8ca1450b, 0x620ef019, 0x07694ca1, 0xbe519b3c, + 0xdb362784, 0x35999296, 0x50fe2e2e, 0x99b95426, 0xfcdee89e, + 0x12715d8c, 0x7716e134, 0xce2e36a9, 0xab498a11, 0x45e63f03, + 0x208183bb, 0x7691e0e3, 0x13f65c5b, 0xfd59e949, 0x983e55f1, + 0x2106826c, 0x44613ed4, 0xaace8bc6, 0xcfa9377e, 0x38417fd6, + 0x5d26c36e, 0xb389767c, 0xd6eecac4, 0x6fd61d59, 0x0ab1a1e1, + 0xe41e14f3, 0x8179a84b, 0xd769cb13, 0xb20e77ab, 0x5ca1c2b9, + 0x39c67e01, 0x80fea99c, 0xe5991524, 0x0b36a036, 0x6e511c8e, + 0xa7166686, 0xc271da3e, 0x2cde6f2c, 0x49b9d394, 0xf0810409, + 0x95e6b8b1, 0x7b490da3, 0x1e2eb11b, 0x483ed243, 0x2d596efb, + 0xc3f6dbe9, 0xa6916751, 0x1fa9b0cc, 0x7ace0c74, 0x9461b966, + 0xf10605de}}; + +#endif + +#endif + +#if N == 2 + +#if W == 8 + +local const z_crc_t FAR crc_braid_table[][256] = { + {0x00000000, 0xae689191, 0x87a02563, 0x29c8b4f2, 0xd4314c87, + 0x7a59dd16, 0x539169e4, 0xfdf9f875, 0x73139f4f, 0xdd7b0ede, + 0xf4b3ba2c, 0x5adb2bbd, 0xa722d3c8, 0x094a4259, 0x2082f6ab, + 0x8eea673a, 0xe6273e9e, 0x484faf0f, 0x61871bfd, 0xcfef8a6c, + 0x32167219, 0x9c7ee388, 0xb5b6577a, 0x1bdec6eb, 0x9534a1d1, + 0x3b5c3040, 0x129484b2, 0xbcfc1523, 0x4105ed56, 0xef6d7cc7, + 0xc6a5c835, 0x68cd59a4, 0x173f7b7d, 0xb957eaec, 0x909f5e1e, + 0x3ef7cf8f, 0xc30e37fa, 0x6d66a66b, 0x44ae1299, 0xeac68308, + 0x642ce432, 0xca4475a3, 0xe38cc151, 0x4de450c0, 0xb01da8b5, + 0x1e753924, 0x37bd8dd6, 0x99d51c47, 0xf11845e3, 0x5f70d472, + 0x76b86080, 0xd8d0f111, 0x25290964, 0x8b4198f5, 0xa2892c07, + 0x0ce1bd96, 0x820bdaac, 0x2c634b3d, 0x05abffcf, 0xabc36e5e, + 0x563a962b, 0xf85207ba, 0xd19ab348, 0x7ff222d9, 0x2e7ef6fa, + 0x8016676b, 0xa9ded399, 0x07b64208, 0xfa4fba7d, 0x54272bec, + 0x7def9f1e, 0xd3870e8f, 0x5d6d69b5, 0xf305f824, 0xdacd4cd6, + 0x74a5dd47, 0x895c2532, 0x2734b4a3, 0x0efc0051, 0xa09491c0, + 0xc859c864, 0x663159f5, 0x4ff9ed07, 0xe1917c96, 0x1c6884e3, + 0xb2001572, 0x9bc8a180, 0x35a03011, 0xbb4a572b, 0x1522c6ba, + 0x3cea7248, 0x9282e3d9, 0x6f7b1bac, 0xc1138a3d, 0xe8db3ecf, + 0x46b3af5e, 0x39418d87, 0x97291c16, 0xbee1a8e4, 0x10893975, + 0xed70c100, 0x43185091, 0x6ad0e463, 0xc4b875f2, 0x4a5212c8, + 0xe43a8359, 0xcdf237ab, 0x639aa63a, 0x9e635e4f, 0x300bcfde, + 0x19c37b2c, 0xb7abeabd, 0xdf66b319, 0x710e2288, 0x58c6967a, + 0xf6ae07eb, 0x0b57ff9e, 0xa53f6e0f, 0x8cf7dafd, 0x229f4b6c, + 0xac752c56, 0x021dbdc7, 0x2bd50935, 0x85bd98a4, 0x784460d1, + 0xd62cf140, 0xffe445b2, 0x518cd423, 0x5cfdedf4, 0xf2957c65, + 0xdb5dc897, 0x75355906, 0x88cca173, 0x26a430e2, 0x0f6c8410, + 0xa1041581, 0x2fee72bb, 0x8186e32a, 0xa84e57d8, 0x0626c649, + 0xfbdf3e3c, 0x55b7afad, 0x7c7f1b5f, 0xd2178ace, 0xbadad36a, + 0x14b242fb, 0x3d7af609, 0x93126798, 0x6eeb9fed, 0xc0830e7c, + 0xe94bba8e, 0x47232b1f, 0xc9c94c25, 0x67a1ddb4, 0x4e696946, + 0xe001f8d7, 0x1df800a2, 0xb3909133, 0x9a5825c1, 0x3430b450, + 0x4bc29689, 0xe5aa0718, 0xcc62b3ea, 0x620a227b, 0x9ff3da0e, + 0x319b4b9f, 0x1853ff6d, 0xb63b6efc, 0x38d109c6, 0x96b99857, + 0xbf712ca5, 0x1119bd34, 0xece04541, 0x4288d4d0, 0x6b406022, + 0xc528f1b3, 0xade5a817, 0x038d3986, 0x2a458d74, 0x842d1ce5, + 0x79d4e490, 0xd7bc7501, 0xfe74c1f3, 0x501c5062, 0xdef63758, + 0x709ea6c9, 0x5956123b, 0xf73e83aa, 0x0ac77bdf, 0xa4afea4e, + 0x8d675ebc, 0x230fcf2d, 0x72831b0e, 0xdceb8a9f, 0xf5233e6d, + 0x5b4baffc, 0xa6b25789, 0x08dac618, 0x211272ea, 0x8f7ae37b, + 0x01908441, 0xaff815d0, 0x8630a122, 0x285830b3, 0xd5a1c8c6, + 0x7bc95957, 0x5201eda5, 0xfc697c34, 0x94a42590, 0x3accb401, + 0x130400f3, 0xbd6c9162, 0x40956917, 0xeefdf886, 0xc7354c74, + 0x695ddde5, 0xe7b7badf, 0x49df2b4e, 0x60179fbc, 0xce7f0e2d, + 0x3386f658, 0x9dee67c9, 0xb426d33b, 0x1a4e42aa, 0x65bc6073, + 0xcbd4f1e2, 0xe21c4510, 0x4c74d481, 0xb18d2cf4, 0x1fe5bd65, + 0x362d0997, 0x98459806, 0x16afff3c, 0xb8c76ead, 0x910fda5f, + 0x3f674bce, 0xc29eb3bb, 0x6cf6222a, 0x453e96d8, 0xeb560749, + 0x839b5eed, 0x2df3cf7c, 0x043b7b8e, 0xaa53ea1f, 0x57aa126a, + 0xf9c283fb, 0xd00a3709, 0x7e62a698, 0xf088c1a2, 0x5ee05033, + 0x7728e4c1, 0xd9407550, 0x24b98d25, 0x8ad11cb4, 0xa319a846, + 0x0d7139d7}, + {0x00000000, 0xb9fbdbe8, 0xa886b191, 0x117d6a79, 0x8a7c6563, + 0x3387be8b, 0x22fad4f2, 0x9b010f1a, 0xcf89cc87, 0x7672176f, + 0x670f7d16, 0xdef4a6fe, 0x45f5a9e4, 0xfc0e720c, 0xed731875, + 0x5488c39d, 0x44629f4f, 0xfd9944a7, 0xece42ede, 0x551ff536, + 0xce1efa2c, 0x77e521c4, 0x66984bbd, 0xdf639055, 0x8beb53c8, + 0x32108820, 0x236de259, 0x9a9639b1, 0x019736ab, 0xb86ced43, + 0xa911873a, 0x10ea5cd2, 0x88c53e9e, 0x313ee576, 0x20438f0f, + 0x99b854e7, 0x02b95bfd, 0xbb428015, 0xaa3fea6c, 0x13c43184, + 0x474cf219, 0xfeb729f1, 0xefca4388, 0x56319860, 0xcd30977a, + 0x74cb4c92, 0x65b626eb, 0xdc4dfd03, 0xcca7a1d1, 0x755c7a39, + 0x64211040, 0xdddacba8, 0x46dbc4b2, 0xff201f5a, 0xee5d7523, + 0x57a6aecb, 0x032e6d56, 0xbad5b6be, 0xaba8dcc7, 0x1253072f, + 0x89520835, 0x30a9d3dd, 0x21d4b9a4, 0x982f624c, 0xcafb7b7d, + 0x7300a095, 0x627dcaec, 0xdb861104, 0x40871e1e, 0xf97cc5f6, + 0xe801af8f, 0x51fa7467, 0x0572b7fa, 0xbc896c12, 0xadf4066b, + 0x140fdd83, 0x8f0ed299, 0x36f50971, 0x27886308, 0x9e73b8e0, + 0x8e99e432, 0x37623fda, 0x261f55a3, 0x9fe48e4b, 0x04e58151, + 0xbd1e5ab9, 0xac6330c0, 0x1598eb28, 0x411028b5, 0xf8ebf35d, + 0xe9969924, 0x506d42cc, 0xcb6c4dd6, 0x7297963e, 0x63eafc47, + 0xda1127af, 0x423e45e3, 0xfbc59e0b, 0xeab8f472, 0x53432f9a, + 0xc8422080, 0x71b9fb68, 0x60c49111, 0xd93f4af9, 0x8db78964, + 0x344c528c, 0x253138f5, 0x9ccae31d, 0x07cbec07, 0xbe3037ef, + 0xaf4d5d96, 0x16b6867e, 0x065cdaac, 0xbfa70144, 0xaeda6b3d, + 0x1721b0d5, 0x8c20bfcf, 0x35db6427, 0x24a60e5e, 0x9d5dd5b6, + 0xc9d5162b, 0x702ecdc3, 0x6153a7ba, 0xd8a87c52, 0x43a97348, + 0xfa52a8a0, 0xeb2fc2d9, 0x52d41931, 0x4e87f0bb, 0xf77c2b53, + 0xe601412a, 0x5ffa9ac2, 0xc4fb95d8, 0x7d004e30, 0x6c7d2449, + 0xd586ffa1, 0x810e3c3c, 0x38f5e7d4, 0x29888dad, 0x90735645, + 0x0b72595f, 0xb28982b7, 0xa3f4e8ce, 0x1a0f3326, 0x0ae56ff4, + 0xb31eb41c, 0xa263de65, 0x1b98058d, 0x80990a97, 0x3962d17f, + 0x281fbb06, 0x91e460ee, 0xc56ca373, 0x7c97789b, 0x6dea12e2, + 0xd411c90a, 0x4f10c610, 0xf6eb1df8, 0xe7967781, 0x5e6dac69, + 0xc642ce25, 0x7fb915cd, 0x6ec47fb4, 0xd73fa45c, 0x4c3eab46, + 0xf5c570ae, 0xe4b81ad7, 0x5d43c13f, 0x09cb02a2, 0xb030d94a, + 0xa14db333, 0x18b668db, 0x83b767c1, 0x3a4cbc29, 0x2b31d650, + 0x92ca0db8, 0x8220516a, 0x3bdb8a82, 0x2aa6e0fb, 0x935d3b13, + 0x085c3409, 0xb1a7efe1, 0xa0da8598, 0x19215e70, 0x4da99ded, + 0xf4524605, 0xe52f2c7c, 0x5cd4f794, 0xc7d5f88e, 0x7e2e2366, + 0x6f53491f, 0xd6a892f7, 0x847c8bc6, 0x3d87502e, 0x2cfa3a57, + 0x9501e1bf, 0x0e00eea5, 0xb7fb354d, 0xa6865f34, 0x1f7d84dc, + 0x4bf54741, 0xf20e9ca9, 0xe373f6d0, 0x5a882d38, 0xc1892222, + 0x7872f9ca, 0x690f93b3, 0xd0f4485b, 0xc01e1489, 0x79e5cf61, + 0x6898a518, 0xd1637ef0, 0x4a6271ea, 0xf399aa02, 0xe2e4c07b, + 0x5b1f1b93, 0x0f97d80e, 0xb66c03e6, 0xa711699f, 0x1eeab277, + 0x85ebbd6d, 0x3c106685, 0x2d6d0cfc, 0x9496d714, 0x0cb9b558, + 0xb5426eb0, 0xa43f04c9, 0x1dc4df21, 0x86c5d03b, 0x3f3e0bd3, + 0x2e4361aa, 0x97b8ba42, 0xc33079df, 0x7acba237, 0x6bb6c84e, + 0xd24d13a6, 0x494c1cbc, 0xf0b7c754, 0xe1caad2d, 0x583176c5, + 0x48db2a17, 0xf120f1ff, 0xe05d9b86, 0x59a6406e, 0xc2a74f74, + 0x7b5c949c, 0x6a21fee5, 0xd3da250d, 0x8752e690, 0x3ea93d78, + 0x2fd45701, 0x962f8ce9, 0x0d2e83f3, 0xb4d5581b, 0xa5a83262, + 0x1c53e98a}, + {0x00000000, 0x9d0fe176, 0xe16ec4ad, 0x7c6125db, 0x19ac8f1b, + 0x84a36e6d, 0xf8c24bb6, 0x65cdaac0, 0x33591e36, 0xae56ff40, + 0xd237da9b, 0x4f383bed, 0x2af5912d, 0xb7fa705b, 0xcb9b5580, + 0x5694b4f6, 0x66b23c6c, 0xfbbddd1a, 0x87dcf8c1, 0x1ad319b7, + 0x7f1eb377, 0xe2115201, 0x9e7077da, 0x037f96ac, 0x55eb225a, + 0xc8e4c32c, 0xb485e6f7, 0x298a0781, 0x4c47ad41, 0xd1484c37, + 0xad2969ec, 0x3026889a, 0xcd6478d8, 0x506b99ae, 0x2c0abc75, + 0xb1055d03, 0xd4c8f7c3, 0x49c716b5, 0x35a6336e, 0xa8a9d218, + 0xfe3d66ee, 0x63328798, 0x1f53a243, 0x825c4335, 0xe791e9f5, + 0x7a9e0883, 0x06ff2d58, 0x9bf0cc2e, 0xabd644b4, 0x36d9a5c2, + 0x4ab88019, 0xd7b7616f, 0xb27acbaf, 0x2f752ad9, 0x53140f02, + 0xce1bee74, 0x988f5a82, 0x0580bbf4, 0x79e19e2f, 0xe4ee7f59, + 0x8123d599, 0x1c2c34ef, 0x604d1134, 0xfd42f042, 0x41b9f7f1, + 0xdcb61687, 0xa0d7335c, 0x3dd8d22a, 0x581578ea, 0xc51a999c, + 0xb97bbc47, 0x24745d31, 0x72e0e9c7, 0xefef08b1, 0x938e2d6a, + 0x0e81cc1c, 0x6b4c66dc, 0xf64387aa, 0x8a22a271, 0x172d4307, + 0x270bcb9d, 0xba042aeb, 0xc6650f30, 0x5b6aee46, 0x3ea74486, + 0xa3a8a5f0, 0xdfc9802b, 0x42c6615d, 0x1452d5ab, 0x895d34dd, + 0xf53c1106, 0x6833f070, 0x0dfe5ab0, 0x90f1bbc6, 0xec909e1d, + 0x719f7f6b, 0x8cdd8f29, 0x11d26e5f, 0x6db34b84, 0xf0bcaaf2, + 0x95710032, 0x087ee144, 0x741fc49f, 0xe91025e9, 0xbf84911f, + 0x228b7069, 0x5eea55b2, 0xc3e5b4c4, 0xa6281e04, 0x3b27ff72, + 0x4746daa9, 0xda493bdf, 0xea6fb345, 0x77605233, 0x0b0177e8, + 0x960e969e, 0xf3c33c5e, 0x6eccdd28, 0x12adf8f3, 0x8fa21985, + 0xd936ad73, 0x44394c05, 0x385869de, 0xa55788a8, 0xc09a2268, + 0x5d95c31e, 0x21f4e6c5, 0xbcfb07b3, 0x8373efe2, 0x1e7c0e94, + 0x621d2b4f, 0xff12ca39, 0x9adf60f9, 0x07d0818f, 0x7bb1a454, + 0xe6be4522, 0xb02af1d4, 0x2d2510a2, 0x51443579, 0xcc4bd40f, + 0xa9867ecf, 0x34899fb9, 0x48e8ba62, 0xd5e75b14, 0xe5c1d38e, + 0x78ce32f8, 0x04af1723, 0x99a0f655, 0xfc6d5c95, 0x6162bde3, + 0x1d039838, 0x800c794e, 0xd698cdb8, 0x4b972cce, 0x37f60915, + 0xaaf9e863, 0xcf3442a3, 0x523ba3d5, 0x2e5a860e, 0xb3556778, + 0x4e17973a, 0xd318764c, 0xaf795397, 0x3276b2e1, 0x57bb1821, + 0xcab4f957, 0xb6d5dc8c, 0x2bda3dfa, 0x7d4e890c, 0xe041687a, + 0x9c204da1, 0x012facd7, 0x64e20617, 0xf9ede761, 0x858cc2ba, + 0x188323cc, 0x28a5ab56, 0xb5aa4a20, 0xc9cb6ffb, 0x54c48e8d, + 0x3109244d, 0xac06c53b, 0xd067e0e0, 0x4d680196, 0x1bfcb560, + 0x86f35416, 0xfa9271cd, 0x679d90bb, 0x02503a7b, 0x9f5fdb0d, + 0xe33efed6, 0x7e311fa0, 0xc2ca1813, 0x5fc5f965, 0x23a4dcbe, + 0xbeab3dc8, 0xdb669708, 0x4669767e, 0x3a0853a5, 0xa707b2d3, + 0xf1930625, 0x6c9ce753, 0x10fdc288, 0x8df223fe, 0xe83f893e, + 0x75306848, 0x09514d93, 0x945eace5, 0xa478247f, 0x3977c509, + 0x4516e0d2, 0xd81901a4, 0xbdd4ab64, 0x20db4a12, 0x5cba6fc9, + 0xc1b58ebf, 0x97213a49, 0x0a2edb3f, 0x764ffee4, 0xeb401f92, + 0x8e8db552, 0x13825424, 0x6fe371ff, 0xf2ec9089, 0x0fae60cb, + 0x92a181bd, 0xeec0a466, 0x73cf4510, 0x1602efd0, 0x8b0d0ea6, + 0xf76c2b7d, 0x6a63ca0b, 0x3cf77efd, 0xa1f89f8b, 0xdd99ba50, + 0x40965b26, 0x255bf1e6, 0xb8541090, 0xc435354b, 0x593ad43d, + 0x691c5ca7, 0xf413bdd1, 0x8872980a, 0x157d797c, 0x70b0d3bc, + 0xedbf32ca, 0x91de1711, 0x0cd1f667, 0x5a454291, 0xc74aa3e7, + 0xbb2b863c, 0x2624674a, 0x43e9cd8a, 0xdee62cfc, 0xa2870927, + 0x3f88e851}, + {0x00000000, 0xdd96d985, 0x605cb54b, 0xbdca6cce, 0xc0b96a96, + 0x1d2fb313, 0xa0e5dfdd, 0x7d730658, 0x5a03d36d, 0x87950ae8, + 0x3a5f6626, 0xe7c9bfa3, 0x9abab9fb, 0x472c607e, 0xfae60cb0, + 0x2770d535, 0xb407a6da, 0x69917f5f, 0xd45b1391, 0x09cdca14, + 0x74becc4c, 0xa92815c9, 0x14e27907, 0xc974a082, 0xee0475b7, + 0x3392ac32, 0x8e58c0fc, 0x53ce1979, 0x2ebd1f21, 0xf32bc6a4, + 0x4ee1aa6a, 0x937773ef, 0xb37e4bf5, 0x6ee89270, 0xd322febe, + 0x0eb4273b, 0x73c72163, 0xae51f8e6, 0x139b9428, 0xce0d4dad, + 0xe97d9898, 0x34eb411d, 0x89212dd3, 0x54b7f456, 0x29c4f20e, + 0xf4522b8b, 0x49984745, 0x940e9ec0, 0x0779ed2f, 0xdaef34aa, + 0x67255864, 0xbab381e1, 0xc7c087b9, 0x1a565e3c, 0xa79c32f2, + 0x7a0aeb77, 0x5d7a3e42, 0x80ece7c7, 0x3d268b09, 0xe0b0528c, + 0x9dc354d4, 0x40558d51, 0xfd9fe19f, 0x2009381a, 0xbd8d91ab, + 0x601b482e, 0xddd124e0, 0x0047fd65, 0x7d34fb3d, 0xa0a222b8, + 0x1d684e76, 0xc0fe97f3, 0xe78e42c6, 0x3a189b43, 0x87d2f78d, + 0x5a442e08, 0x27372850, 0xfaa1f1d5, 0x476b9d1b, 0x9afd449e, + 0x098a3771, 0xd41ceef4, 0x69d6823a, 0xb4405bbf, 0xc9335de7, + 0x14a58462, 0xa96fe8ac, 0x74f93129, 0x5389e41c, 0x8e1f3d99, + 0x33d55157, 0xee4388d2, 0x93308e8a, 0x4ea6570f, 0xf36c3bc1, + 0x2efae244, 0x0ef3da5e, 0xd36503db, 0x6eaf6f15, 0xb339b690, + 0xce4ab0c8, 0x13dc694d, 0xae160583, 0x7380dc06, 0x54f00933, + 0x8966d0b6, 0x34acbc78, 0xe93a65fd, 0x944963a5, 0x49dfba20, + 0xf415d6ee, 0x29830f6b, 0xbaf47c84, 0x6762a501, 0xdaa8c9cf, + 0x073e104a, 0x7a4d1612, 0xa7dbcf97, 0x1a11a359, 0xc7877adc, + 0xe0f7afe9, 0x3d61766c, 0x80ab1aa2, 0x5d3dc327, 0x204ec57f, + 0xfdd81cfa, 0x40127034, 0x9d84a9b1, 0xa06a2517, 0x7dfcfc92, + 0xc036905c, 0x1da049d9, 0x60d34f81, 0xbd459604, 0x008ffaca, + 0xdd19234f, 0xfa69f67a, 0x27ff2fff, 0x9a354331, 0x47a39ab4, + 0x3ad09cec, 0xe7464569, 0x5a8c29a7, 0x871af022, 0x146d83cd, + 0xc9fb5a48, 0x74313686, 0xa9a7ef03, 0xd4d4e95b, 0x094230de, + 0xb4885c10, 0x691e8595, 0x4e6e50a0, 0x93f88925, 0x2e32e5eb, + 0xf3a43c6e, 0x8ed73a36, 0x5341e3b3, 0xee8b8f7d, 0x331d56f8, + 0x13146ee2, 0xce82b767, 0x7348dba9, 0xaede022c, 0xd3ad0474, + 0x0e3bddf1, 0xb3f1b13f, 0x6e6768ba, 0x4917bd8f, 0x9481640a, + 0x294b08c4, 0xf4ddd141, 0x89aed719, 0x54380e9c, 0xe9f26252, + 0x3464bbd7, 0xa713c838, 0x7a8511bd, 0xc74f7d73, 0x1ad9a4f6, + 0x67aaa2ae, 0xba3c7b2b, 0x07f617e5, 0xda60ce60, 0xfd101b55, + 0x2086c2d0, 0x9d4cae1e, 0x40da779b, 0x3da971c3, 0xe03fa846, + 0x5df5c488, 0x80631d0d, 0x1de7b4bc, 0xc0716d39, 0x7dbb01f7, + 0xa02dd872, 0xdd5ede2a, 0x00c807af, 0xbd026b61, 0x6094b2e4, + 0x47e467d1, 0x9a72be54, 0x27b8d29a, 0xfa2e0b1f, 0x875d0d47, + 0x5acbd4c2, 0xe701b80c, 0x3a976189, 0xa9e01266, 0x7476cbe3, + 0xc9bca72d, 0x142a7ea8, 0x695978f0, 0xb4cfa175, 0x0905cdbb, + 0xd493143e, 0xf3e3c10b, 0x2e75188e, 0x93bf7440, 0x4e29adc5, + 0x335aab9d, 0xeecc7218, 0x53061ed6, 0x8e90c753, 0xae99ff49, + 0x730f26cc, 0xcec54a02, 0x13539387, 0x6e2095df, 0xb3b64c5a, + 0x0e7c2094, 0xd3eaf911, 0xf49a2c24, 0x290cf5a1, 0x94c6996f, + 0x495040ea, 0x342346b2, 0xe9b59f37, 0x547ff3f9, 0x89e92a7c, + 0x1a9e5993, 0xc7088016, 0x7ac2ecd8, 0xa754355d, 0xda273305, + 0x07b1ea80, 0xba7b864e, 0x67ed5fcb, 0x409d8afe, 0x9d0b537b, + 0x20c13fb5, 0xfd57e630, 0x8024e068, 0x5db239ed, 0xe0785523, + 0x3dee8ca6}, + {0x00000000, 0x9ba54c6f, 0xec3b9e9f, 0x779ed2f0, 0x03063b7f, + 0x98a37710, 0xef3da5e0, 0x7498e98f, 0x060c76fe, 0x9da93a91, + 0xea37e861, 0x7192a40e, 0x050a4d81, 0x9eaf01ee, 0xe931d31e, + 0x72949f71, 0x0c18edfc, 0x97bda193, 0xe0237363, 0x7b863f0c, + 0x0f1ed683, 0x94bb9aec, 0xe325481c, 0x78800473, 0x0a149b02, + 0x91b1d76d, 0xe62f059d, 0x7d8a49f2, 0x0912a07d, 0x92b7ec12, + 0xe5293ee2, 0x7e8c728d, 0x1831dbf8, 0x83949797, 0xf40a4567, + 0x6faf0908, 0x1b37e087, 0x8092ace8, 0xf70c7e18, 0x6ca93277, + 0x1e3dad06, 0x8598e169, 0xf2063399, 0x69a37ff6, 0x1d3b9679, + 0x869eda16, 0xf10008e6, 0x6aa54489, 0x14293604, 0x8f8c7a6b, + 0xf812a89b, 0x63b7e4f4, 0x172f0d7b, 0x8c8a4114, 0xfb1493e4, + 0x60b1df8b, 0x122540fa, 0x89800c95, 0xfe1ede65, 0x65bb920a, + 0x11237b85, 0x8a8637ea, 0xfd18e51a, 0x66bda975, 0x3063b7f0, + 0xabc6fb9f, 0xdc58296f, 0x47fd6500, 0x33658c8f, 0xa8c0c0e0, + 0xdf5e1210, 0x44fb5e7f, 0x366fc10e, 0xadca8d61, 0xda545f91, + 0x41f113fe, 0x3569fa71, 0xaeccb61e, 0xd95264ee, 0x42f72881, + 0x3c7b5a0c, 0xa7de1663, 0xd040c493, 0x4be588fc, 0x3f7d6173, + 0xa4d82d1c, 0xd346ffec, 0x48e3b383, 0x3a772cf2, 0xa1d2609d, + 0xd64cb26d, 0x4de9fe02, 0x3971178d, 0xa2d45be2, 0xd54a8912, + 0x4eefc57d, 0x28526c08, 0xb3f72067, 0xc469f297, 0x5fccbef8, + 0x2b545777, 0xb0f11b18, 0xc76fc9e8, 0x5cca8587, 0x2e5e1af6, + 0xb5fb5699, 0xc2658469, 0x59c0c806, 0x2d582189, 0xb6fd6de6, + 0xc163bf16, 0x5ac6f379, 0x244a81f4, 0xbfefcd9b, 0xc8711f6b, + 0x53d45304, 0x274cba8b, 0xbce9f6e4, 0xcb772414, 0x50d2687b, + 0x2246f70a, 0xb9e3bb65, 0xce7d6995, 0x55d825fa, 0x2140cc75, + 0xbae5801a, 0xcd7b52ea, 0x56de1e85, 0x60c76fe0, 0xfb62238f, + 0x8cfcf17f, 0x1759bd10, 0x63c1549f, 0xf86418f0, 0x8ffaca00, + 0x145f866f, 0x66cb191e, 0xfd6e5571, 0x8af08781, 0x1155cbee, + 0x65cd2261, 0xfe686e0e, 0x89f6bcfe, 0x1253f091, 0x6cdf821c, + 0xf77ace73, 0x80e41c83, 0x1b4150ec, 0x6fd9b963, 0xf47cf50c, + 0x83e227fc, 0x18476b93, 0x6ad3f4e2, 0xf176b88d, 0x86e86a7d, + 0x1d4d2612, 0x69d5cf9d, 0xf27083f2, 0x85ee5102, 0x1e4b1d6d, + 0x78f6b418, 0xe353f877, 0x94cd2a87, 0x0f6866e8, 0x7bf08f67, + 0xe055c308, 0x97cb11f8, 0x0c6e5d97, 0x7efac2e6, 0xe55f8e89, + 0x92c15c79, 0x09641016, 0x7dfcf999, 0xe659b5f6, 0x91c76706, + 0x0a622b69, 0x74ee59e4, 0xef4b158b, 0x98d5c77b, 0x03708b14, + 0x77e8629b, 0xec4d2ef4, 0x9bd3fc04, 0x0076b06b, 0x72e22f1a, + 0xe9476375, 0x9ed9b185, 0x057cfdea, 0x71e41465, 0xea41580a, + 0x9ddf8afa, 0x067ac695, 0x50a4d810, 0xcb01947f, 0xbc9f468f, + 0x273a0ae0, 0x53a2e36f, 0xc807af00, 0xbf997df0, 0x243c319f, + 0x56a8aeee, 0xcd0de281, 0xba933071, 0x21367c1e, 0x55ae9591, + 0xce0bd9fe, 0xb9950b0e, 0x22304761, 0x5cbc35ec, 0xc7197983, + 0xb087ab73, 0x2b22e71c, 0x5fba0e93, 0xc41f42fc, 0xb381900c, + 0x2824dc63, 0x5ab04312, 0xc1150f7d, 0xb68bdd8d, 0x2d2e91e2, + 0x59b6786d, 0xc2133402, 0xb58de6f2, 0x2e28aa9d, 0x489503e8, + 0xd3304f87, 0xa4ae9d77, 0x3f0bd118, 0x4b933897, 0xd03674f8, + 0xa7a8a608, 0x3c0dea67, 0x4e997516, 0xd53c3979, 0xa2a2eb89, + 0x3907a7e6, 0x4d9f4e69, 0xd63a0206, 0xa1a4d0f6, 0x3a019c99, + 0x448dee14, 0xdf28a27b, 0xa8b6708b, 0x33133ce4, 0x478bd56b, + 0xdc2e9904, 0xabb04bf4, 0x3015079b, 0x428198ea, 0xd924d485, + 0xaeba0675, 0x351f4a1a, 0x4187a395, 0xda22effa, 0xadbc3d0a, + 0x36197165}, + {0x00000000, 0xc18edfc0, 0x586cb9c1, 0x99e26601, 0xb0d97382, + 0x7157ac42, 0xe8b5ca43, 0x293b1583, 0xbac3e145, 0x7b4d3e85, + 0xe2af5884, 0x23218744, 0x0a1a92c7, 0xcb944d07, 0x52762b06, + 0x93f8f4c6, 0xaef6c4cb, 0x6f781b0b, 0xf69a7d0a, 0x3714a2ca, + 0x1e2fb749, 0xdfa16889, 0x46430e88, 0x87cdd148, 0x1435258e, + 0xd5bbfa4e, 0x4c599c4f, 0x8dd7438f, 0xa4ec560c, 0x656289cc, + 0xfc80efcd, 0x3d0e300d, 0x869c8fd7, 0x47125017, 0xdef03616, + 0x1f7ee9d6, 0x3645fc55, 0xf7cb2395, 0x6e294594, 0xafa79a54, + 0x3c5f6e92, 0xfdd1b152, 0x6433d753, 0xa5bd0893, 0x8c861d10, + 0x4d08c2d0, 0xd4eaa4d1, 0x15647b11, 0x286a4b1c, 0xe9e494dc, + 0x7006f2dd, 0xb1882d1d, 0x98b3389e, 0x593de75e, 0xc0df815f, + 0x01515e9f, 0x92a9aa59, 0x53277599, 0xcac51398, 0x0b4bcc58, + 0x2270d9db, 0xe3fe061b, 0x7a1c601a, 0xbb92bfda, 0xd64819ef, + 0x17c6c62f, 0x8e24a02e, 0x4faa7fee, 0x66916a6d, 0xa71fb5ad, + 0x3efdd3ac, 0xff730c6c, 0x6c8bf8aa, 0xad05276a, 0x34e7416b, + 0xf5699eab, 0xdc528b28, 0x1ddc54e8, 0x843e32e9, 0x45b0ed29, + 0x78bedd24, 0xb93002e4, 0x20d264e5, 0xe15cbb25, 0xc867aea6, + 0x09e97166, 0x900b1767, 0x5185c8a7, 0xc27d3c61, 0x03f3e3a1, + 0x9a1185a0, 0x5b9f5a60, 0x72a44fe3, 0xb32a9023, 0x2ac8f622, + 0xeb4629e2, 0x50d49638, 0x915a49f8, 0x08b82ff9, 0xc936f039, + 0xe00de5ba, 0x21833a7a, 0xb8615c7b, 0x79ef83bb, 0xea17777d, + 0x2b99a8bd, 0xb27bcebc, 0x73f5117c, 0x5ace04ff, 0x9b40db3f, + 0x02a2bd3e, 0xc32c62fe, 0xfe2252f3, 0x3fac8d33, 0xa64eeb32, + 0x67c034f2, 0x4efb2171, 0x8f75feb1, 0x169798b0, 0xd7194770, + 0x44e1b3b6, 0x856f6c76, 0x1c8d0a77, 0xdd03d5b7, 0xf438c034, + 0x35b61ff4, 0xac5479f5, 0x6ddaa635, 0x77e1359f, 0xb66fea5f, + 0x2f8d8c5e, 0xee03539e, 0xc738461d, 0x06b699dd, 0x9f54ffdc, + 0x5eda201c, 0xcd22d4da, 0x0cac0b1a, 0x954e6d1b, 0x54c0b2db, + 0x7dfba758, 0xbc757898, 0x25971e99, 0xe419c159, 0xd917f154, + 0x18992e94, 0x817b4895, 0x40f59755, 0x69ce82d6, 0xa8405d16, + 0x31a23b17, 0xf02ce4d7, 0x63d41011, 0xa25acfd1, 0x3bb8a9d0, + 0xfa367610, 0xd30d6393, 0x1283bc53, 0x8b61da52, 0x4aef0592, + 0xf17dba48, 0x30f36588, 0xa9110389, 0x689fdc49, 0x41a4c9ca, + 0x802a160a, 0x19c8700b, 0xd846afcb, 0x4bbe5b0d, 0x8a3084cd, + 0x13d2e2cc, 0xd25c3d0c, 0xfb67288f, 0x3ae9f74f, 0xa30b914e, + 0x62854e8e, 0x5f8b7e83, 0x9e05a143, 0x07e7c742, 0xc6691882, + 0xef520d01, 0x2edcd2c1, 0xb73eb4c0, 0x76b06b00, 0xe5489fc6, + 0x24c64006, 0xbd242607, 0x7caaf9c7, 0x5591ec44, 0x941f3384, + 0x0dfd5585, 0xcc738a45, 0xa1a92c70, 0x6027f3b0, 0xf9c595b1, + 0x384b4a71, 0x11705ff2, 0xd0fe8032, 0x491ce633, 0x889239f3, + 0x1b6acd35, 0xdae412f5, 0x430674f4, 0x8288ab34, 0xabb3beb7, + 0x6a3d6177, 0xf3df0776, 0x3251d8b6, 0x0f5fe8bb, 0xced1377b, + 0x5733517a, 0x96bd8eba, 0xbf869b39, 0x7e0844f9, 0xe7ea22f8, + 0x2664fd38, 0xb59c09fe, 0x7412d63e, 0xedf0b03f, 0x2c7e6fff, + 0x05457a7c, 0xc4cba5bc, 0x5d29c3bd, 0x9ca71c7d, 0x2735a3a7, + 0xe6bb7c67, 0x7f591a66, 0xbed7c5a6, 0x97ecd025, 0x56620fe5, + 0xcf8069e4, 0x0e0eb624, 0x9df642e2, 0x5c789d22, 0xc59afb23, + 0x041424e3, 0x2d2f3160, 0xeca1eea0, 0x754388a1, 0xb4cd5761, + 0x89c3676c, 0x484db8ac, 0xd1afdead, 0x1021016d, 0x391a14ee, + 0xf894cb2e, 0x6176ad2f, 0xa0f872ef, 0x33008629, 0xf28e59e9, + 0x6b6c3fe8, 0xaae2e028, 0x83d9f5ab, 0x42572a6b, 0xdbb54c6a, + 0x1a3b93aa}, + {0x00000000, 0xefc26b3e, 0x04f5d03d, 0xeb37bb03, 0x09eba07a, + 0xe629cb44, 0x0d1e7047, 0xe2dc1b79, 0x13d740f4, 0xfc152bca, + 0x172290c9, 0xf8e0fbf7, 0x1a3ce08e, 0xf5fe8bb0, 0x1ec930b3, + 0xf10b5b8d, 0x27ae81e8, 0xc86cead6, 0x235b51d5, 0xcc993aeb, + 0x2e452192, 0xc1874aac, 0x2ab0f1af, 0xc5729a91, 0x3479c11c, + 0xdbbbaa22, 0x308c1121, 0xdf4e7a1f, 0x3d926166, 0xd2500a58, + 0x3967b15b, 0xd6a5da65, 0x4f5d03d0, 0xa09f68ee, 0x4ba8d3ed, + 0xa46ab8d3, 0x46b6a3aa, 0xa974c894, 0x42437397, 0xad8118a9, + 0x5c8a4324, 0xb348281a, 0x587f9319, 0xb7bdf827, 0x5561e35e, + 0xbaa38860, 0x51943363, 0xbe56585d, 0x68f38238, 0x8731e906, + 0x6c065205, 0x83c4393b, 0x61182242, 0x8eda497c, 0x65edf27f, + 0x8a2f9941, 0x7b24c2cc, 0x94e6a9f2, 0x7fd112f1, 0x901379cf, + 0x72cf62b6, 0x9d0d0988, 0x763ab28b, 0x99f8d9b5, 0x9eba07a0, + 0x71786c9e, 0x9a4fd79d, 0x758dbca3, 0x9751a7da, 0x7893cce4, + 0x93a477e7, 0x7c661cd9, 0x8d6d4754, 0x62af2c6a, 0x89989769, + 0x665afc57, 0x8486e72e, 0x6b448c10, 0x80733713, 0x6fb15c2d, + 0xb9148648, 0x56d6ed76, 0xbde15675, 0x52233d4b, 0xb0ff2632, + 0x5f3d4d0c, 0xb40af60f, 0x5bc89d31, 0xaac3c6bc, 0x4501ad82, + 0xae361681, 0x41f47dbf, 0xa32866c6, 0x4cea0df8, 0xa7ddb6fb, + 0x481fddc5, 0xd1e70470, 0x3e256f4e, 0xd512d44d, 0x3ad0bf73, + 0xd80ca40a, 0x37cecf34, 0xdcf97437, 0x333b1f09, 0xc2304484, + 0x2df22fba, 0xc6c594b9, 0x2907ff87, 0xcbdbe4fe, 0x24198fc0, + 0xcf2e34c3, 0x20ec5ffd, 0xf6498598, 0x198beea6, 0xf2bc55a5, + 0x1d7e3e9b, 0xffa225e2, 0x10604edc, 0xfb57f5df, 0x14959ee1, + 0xe59ec56c, 0x0a5cae52, 0xe16b1551, 0x0ea97e6f, 0xec756516, + 0x03b70e28, 0xe880b52b, 0x0742de15, 0xe6050901, 0x09c7623f, + 0xe2f0d93c, 0x0d32b202, 0xefeea97b, 0x002cc245, 0xeb1b7946, + 0x04d91278, 0xf5d249f5, 0x1a1022cb, 0xf12799c8, 0x1ee5f2f6, + 0xfc39e98f, 0x13fb82b1, 0xf8cc39b2, 0x170e528c, 0xc1ab88e9, + 0x2e69e3d7, 0xc55e58d4, 0x2a9c33ea, 0xc8402893, 0x278243ad, + 0xccb5f8ae, 0x23779390, 0xd27cc81d, 0x3dbea323, 0xd6891820, + 0x394b731e, 0xdb976867, 0x34550359, 0xdf62b85a, 0x30a0d364, + 0xa9580ad1, 0x469a61ef, 0xadaddaec, 0x426fb1d2, 0xa0b3aaab, + 0x4f71c195, 0xa4467a96, 0x4b8411a8, 0xba8f4a25, 0x554d211b, + 0xbe7a9a18, 0x51b8f126, 0xb364ea5f, 0x5ca68161, 0xb7913a62, + 0x5853515c, 0x8ef68b39, 0x6134e007, 0x8a035b04, 0x65c1303a, + 0x871d2b43, 0x68df407d, 0x83e8fb7e, 0x6c2a9040, 0x9d21cbcd, + 0x72e3a0f3, 0x99d41bf0, 0x761670ce, 0x94ca6bb7, 0x7b080089, + 0x903fbb8a, 0x7ffdd0b4, 0x78bf0ea1, 0x977d659f, 0x7c4ade9c, + 0x9388b5a2, 0x7154aedb, 0x9e96c5e5, 0x75a17ee6, 0x9a6315d8, + 0x6b684e55, 0x84aa256b, 0x6f9d9e68, 0x805ff556, 0x6283ee2f, + 0x8d418511, 0x66763e12, 0x89b4552c, 0x5f118f49, 0xb0d3e477, + 0x5be45f74, 0xb426344a, 0x56fa2f33, 0xb938440d, 0x520fff0e, + 0xbdcd9430, 0x4cc6cfbd, 0xa304a483, 0x48331f80, 0xa7f174be, + 0x452d6fc7, 0xaaef04f9, 0x41d8bffa, 0xae1ad4c4, 0x37e20d71, + 0xd820664f, 0x3317dd4c, 0xdcd5b672, 0x3e09ad0b, 0xd1cbc635, + 0x3afc7d36, 0xd53e1608, 0x24354d85, 0xcbf726bb, 0x20c09db8, + 0xcf02f686, 0x2ddeedff, 0xc21c86c1, 0x292b3dc2, 0xc6e956fc, + 0x104c8c99, 0xff8ee7a7, 0x14b95ca4, 0xfb7b379a, 0x19a72ce3, + 0xf66547dd, 0x1d52fcde, 0xf29097e0, 0x039bcc6d, 0xec59a753, + 0x076e1c50, 0xe8ac776e, 0x0a706c17, 0xe5b20729, 0x0e85bc2a, + 0xe147d714}, + {0x00000000, 0x177b1443, 0x2ef62886, 0x398d3cc5, 0x5dec510c, + 0x4a97454f, 0x731a798a, 0x64616dc9, 0xbbd8a218, 0xaca3b65b, + 0x952e8a9e, 0x82559edd, 0xe634f314, 0xf14fe757, 0xc8c2db92, + 0xdfb9cfd1, 0xacc04271, 0xbbbb5632, 0x82366af7, 0x954d7eb4, + 0xf12c137d, 0xe657073e, 0xdfda3bfb, 0xc8a12fb8, 0x1718e069, + 0x0063f42a, 0x39eec8ef, 0x2e95dcac, 0x4af4b165, 0x5d8fa526, + 0x640299e3, 0x73798da0, 0x82f182a3, 0x958a96e0, 0xac07aa25, + 0xbb7cbe66, 0xdf1dd3af, 0xc866c7ec, 0xf1ebfb29, 0xe690ef6a, + 0x392920bb, 0x2e5234f8, 0x17df083d, 0x00a41c7e, 0x64c571b7, + 0x73be65f4, 0x4a335931, 0x5d484d72, 0x2e31c0d2, 0x394ad491, + 0x00c7e854, 0x17bcfc17, 0x73dd91de, 0x64a6859d, 0x5d2bb958, + 0x4a50ad1b, 0x95e962ca, 0x82927689, 0xbb1f4a4c, 0xac645e0f, + 0xc80533c6, 0xdf7e2785, 0xe6f31b40, 0xf1880f03, 0xde920307, + 0xc9e91744, 0xf0642b81, 0xe71f3fc2, 0x837e520b, 0x94054648, + 0xad887a8d, 0xbaf36ece, 0x654aa11f, 0x7231b55c, 0x4bbc8999, + 0x5cc79dda, 0x38a6f013, 0x2fdde450, 0x1650d895, 0x012bccd6, + 0x72524176, 0x65295535, 0x5ca469f0, 0x4bdf7db3, 0x2fbe107a, + 0x38c50439, 0x014838fc, 0x16332cbf, 0xc98ae36e, 0xdef1f72d, + 0xe77ccbe8, 0xf007dfab, 0x9466b262, 0x831da621, 0xba909ae4, + 0xadeb8ea7, 0x5c6381a4, 0x4b1895e7, 0x7295a922, 0x65eebd61, + 0x018fd0a8, 0x16f4c4eb, 0x2f79f82e, 0x3802ec6d, 0xe7bb23bc, + 0xf0c037ff, 0xc94d0b3a, 0xde361f79, 0xba5772b0, 0xad2c66f3, + 0x94a15a36, 0x83da4e75, 0xf0a3c3d5, 0xe7d8d796, 0xde55eb53, + 0xc92eff10, 0xad4f92d9, 0xba34869a, 0x83b9ba5f, 0x94c2ae1c, + 0x4b7b61cd, 0x5c00758e, 0x658d494b, 0x72f65d08, 0x169730c1, + 0x01ec2482, 0x38611847, 0x2f1a0c04, 0x6655004f, 0x712e140c, + 0x48a328c9, 0x5fd83c8a, 0x3bb95143, 0x2cc24500, 0x154f79c5, + 0x02346d86, 0xdd8da257, 0xcaf6b614, 0xf37b8ad1, 0xe4009e92, + 0x8061f35b, 0x971ae718, 0xae97dbdd, 0xb9eccf9e, 0xca95423e, + 0xddee567d, 0xe4636ab8, 0xf3187efb, 0x97791332, 0x80020771, + 0xb98f3bb4, 0xaef42ff7, 0x714de026, 0x6636f465, 0x5fbbc8a0, + 0x48c0dce3, 0x2ca1b12a, 0x3bdaa569, 0x025799ac, 0x152c8def, + 0xe4a482ec, 0xf3df96af, 0xca52aa6a, 0xdd29be29, 0xb948d3e0, + 0xae33c7a3, 0x97befb66, 0x80c5ef25, 0x5f7c20f4, 0x480734b7, + 0x718a0872, 0x66f11c31, 0x029071f8, 0x15eb65bb, 0x2c66597e, + 0x3b1d4d3d, 0x4864c09d, 0x5f1fd4de, 0x6692e81b, 0x71e9fc58, + 0x15889191, 0x02f385d2, 0x3b7eb917, 0x2c05ad54, 0xf3bc6285, + 0xe4c776c6, 0xdd4a4a03, 0xca315e40, 0xae503389, 0xb92b27ca, + 0x80a61b0f, 0x97dd0f4c, 0xb8c70348, 0xafbc170b, 0x96312bce, + 0x814a3f8d, 0xe52b5244, 0xf2504607, 0xcbdd7ac2, 0xdca66e81, + 0x031fa150, 0x1464b513, 0x2de989d6, 0x3a929d95, 0x5ef3f05c, + 0x4988e41f, 0x7005d8da, 0x677ecc99, 0x14074139, 0x037c557a, + 0x3af169bf, 0x2d8a7dfc, 0x49eb1035, 0x5e900476, 0x671d38b3, + 0x70662cf0, 0xafdfe321, 0xb8a4f762, 0x8129cba7, 0x9652dfe4, + 0xf233b22d, 0xe548a66e, 0xdcc59aab, 0xcbbe8ee8, 0x3a3681eb, + 0x2d4d95a8, 0x14c0a96d, 0x03bbbd2e, 0x67dad0e7, 0x70a1c4a4, + 0x492cf861, 0x5e57ec22, 0x81ee23f3, 0x969537b0, 0xaf180b75, + 0xb8631f36, 0xdc0272ff, 0xcb7966bc, 0xf2f45a79, 0xe58f4e3a, + 0x96f6c39a, 0x818dd7d9, 0xb800eb1c, 0xaf7bff5f, 0xcb1a9296, + 0xdc6186d5, 0xe5ecba10, 0xf297ae53, 0x2d2e6182, 0x3a5575c1, + 0x03d84904, 0x14a35d47, 0x70c2308e, 0x67b924cd, 0x5e341808, + 0x494f0c4b}}; + +local const z_word_t FAR crc_braid_big_table[][256] = { + {0x0000000000000000, 0x43147b1700000000, 0x8628f62e00000000, + 0xc53c8d3900000000, 0x0c51ec5d00000000, 0x4f45974a00000000, + 0x8a791a7300000000, 0xc96d616400000000, 0x18a2d8bb00000000, + 0x5bb6a3ac00000000, 0x9e8a2e9500000000, 0xdd9e558200000000, + 0x14f334e600000000, 0x57e74ff100000000, 0x92dbc2c800000000, + 0xd1cfb9df00000000, 0x7142c0ac00000000, 0x3256bbbb00000000, + 0xf76a368200000000, 0xb47e4d9500000000, 0x7d132cf100000000, + 0x3e0757e600000000, 0xfb3bdadf00000000, 0xb82fa1c800000000, + 0x69e0181700000000, 0x2af4630000000000, 0xefc8ee3900000000, + 0xacdc952e00000000, 0x65b1f44a00000000, 0x26a58f5d00000000, + 0xe399026400000000, 0xa08d797300000000, 0xa382f18200000000, + 0xe0968a9500000000, 0x25aa07ac00000000, 0x66be7cbb00000000, + 0xafd31ddf00000000, 0xecc766c800000000, 0x29fbebf100000000, + 0x6aef90e600000000, 0xbb20293900000000, 0xf834522e00000000, + 0x3d08df1700000000, 0x7e1ca40000000000, 0xb771c56400000000, + 0xf465be7300000000, 0x3159334a00000000, 0x724d485d00000000, + 0xd2c0312e00000000, 0x91d44a3900000000, 0x54e8c70000000000, + 0x17fcbc1700000000, 0xde91dd7300000000, 0x9d85a66400000000, + 0x58b92b5d00000000, 0x1bad504a00000000, 0xca62e99500000000, + 0x8976928200000000, 0x4c4a1fbb00000000, 0x0f5e64ac00000000, + 0xc63305c800000000, 0x85277edf00000000, 0x401bf3e600000000, + 0x030f88f100000000, 0x070392de00000000, 0x4417e9c900000000, + 0x812b64f000000000, 0xc23f1fe700000000, 0x0b527e8300000000, + 0x4846059400000000, 0x8d7a88ad00000000, 0xce6ef3ba00000000, + 0x1fa14a6500000000, 0x5cb5317200000000, 0x9989bc4b00000000, + 0xda9dc75c00000000, 0x13f0a63800000000, 0x50e4dd2f00000000, + 0x95d8501600000000, 0xd6cc2b0100000000, 0x7641527200000000, + 0x3555296500000000, 0xf069a45c00000000, 0xb37ddf4b00000000, + 0x7a10be2f00000000, 0x3904c53800000000, 0xfc38480100000000, + 0xbf2c331600000000, 0x6ee38ac900000000, 0x2df7f1de00000000, + 0xe8cb7ce700000000, 0xabdf07f000000000, 0x62b2669400000000, + 0x21a61d8300000000, 0xe49a90ba00000000, 0xa78eebad00000000, + 0xa481635c00000000, 0xe795184b00000000, 0x22a9957200000000, + 0x61bdee6500000000, 0xa8d08f0100000000, 0xebc4f41600000000, + 0x2ef8792f00000000, 0x6dec023800000000, 0xbc23bbe700000000, + 0xff37c0f000000000, 0x3a0b4dc900000000, 0x791f36de00000000, + 0xb07257ba00000000, 0xf3662cad00000000, 0x365aa19400000000, + 0x754eda8300000000, 0xd5c3a3f000000000, 0x96d7d8e700000000, + 0x53eb55de00000000, 0x10ff2ec900000000, 0xd9924fad00000000, + 0x9a8634ba00000000, 0x5fbab98300000000, 0x1caec29400000000, + 0xcd617b4b00000000, 0x8e75005c00000000, 0x4b498d6500000000, + 0x085df67200000000, 0xc130971600000000, 0x8224ec0100000000, + 0x4718613800000000, 0x040c1a2f00000000, 0x4f00556600000000, + 0x0c142e7100000000, 0xc928a34800000000, 0x8a3cd85f00000000, + 0x4351b93b00000000, 0x0045c22c00000000, 0xc5794f1500000000, + 0x866d340200000000, 0x57a28ddd00000000, 0x14b6f6ca00000000, + 0xd18a7bf300000000, 0x929e00e400000000, 0x5bf3618000000000, + 0x18e71a9700000000, 0xdddb97ae00000000, 0x9ecfecb900000000, + 0x3e4295ca00000000, 0x7d56eedd00000000, 0xb86a63e400000000, + 0xfb7e18f300000000, 0x3213799700000000, 0x7107028000000000, + 0xb43b8fb900000000, 0xf72ff4ae00000000, 0x26e04d7100000000, + 0x65f4366600000000, 0xa0c8bb5f00000000, 0xe3dcc04800000000, + 0x2ab1a12c00000000, 0x69a5da3b00000000, 0xac99570200000000, + 0xef8d2c1500000000, 0xec82a4e400000000, 0xaf96dff300000000, + 0x6aaa52ca00000000, 0x29be29dd00000000, 0xe0d348b900000000, + 0xa3c733ae00000000, 0x66fbbe9700000000, 0x25efc58000000000, + 0xf4207c5f00000000, 0xb734074800000000, 0x72088a7100000000, + 0x311cf16600000000, 0xf871900200000000, 0xbb65eb1500000000, + 0x7e59662c00000000, 0x3d4d1d3b00000000, 0x9dc0644800000000, + 0xded41f5f00000000, 0x1be8926600000000, 0x58fce97100000000, + 0x9191881500000000, 0xd285f30200000000, 0x17b97e3b00000000, + 0x54ad052c00000000, 0x8562bcf300000000, 0xc676c7e400000000, + 0x034a4add00000000, 0x405e31ca00000000, 0x893350ae00000000, + 0xca272bb900000000, 0x0f1ba68000000000, 0x4c0fdd9700000000, + 0x4803c7b800000000, 0x0b17bcaf00000000, 0xce2b319600000000, + 0x8d3f4a8100000000, 0x44522be500000000, 0x074650f200000000, + 0xc27addcb00000000, 0x816ea6dc00000000, 0x50a11f0300000000, + 0x13b5641400000000, 0xd689e92d00000000, 0x959d923a00000000, + 0x5cf0f35e00000000, 0x1fe4884900000000, 0xdad8057000000000, + 0x99cc7e6700000000, 0x3941071400000000, 0x7a557c0300000000, + 0xbf69f13a00000000, 0xfc7d8a2d00000000, 0x3510eb4900000000, + 0x7604905e00000000, 0xb3381d6700000000, 0xf02c667000000000, + 0x21e3dfaf00000000, 0x62f7a4b800000000, 0xa7cb298100000000, + 0xe4df529600000000, 0x2db233f200000000, 0x6ea648e500000000, + 0xab9ac5dc00000000, 0xe88ebecb00000000, 0xeb81363a00000000, + 0xa8954d2d00000000, 0x6da9c01400000000, 0x2ebdbb0300000000, + 0xe7d0da6700000000, 0xa4c4a17000000000, 0x61f82c4900000000, + 0x22ec575e00000000, 0xf323ee8100000000, 0xb037959600000000, + 0x750b18af00000000, 0x361f63b800000000, 0xff7202dc00000000, + 0xbc6679cb00000000, 0x795af4f200000000, 0x3a4e8fe500000000, + 0x9ac3f69600000000, 0xd9d78d8100000000, 0x1ceb00b800000000, + 0x5fff7baf00000000, 0x96921acb00000000, 0xd58661dc00000000, + 0x10baece500000000, 0x53ae97f200000000, 0x82612e2d00000000, + 0xc175553a00000000, 0x0449d80300000000, 0x475da31400000000, + 0x8e30c27000000000, 0xcd24b96700000000, 0x0818345e00000000, + 0x4b0c4f4900000000}, + {0x0000000000000000, 0x3e6bc2ef00000000, 0x3dd0f50400000000, + 0x03bb37eb00000000, 0x7aa0eb0900000000, 0x44cb29e600000000, + 0x47701e0d00000000, 0x791bdce200000000, 0xf440d71300000000, + 0xca2b15fc00000000, 0xc990221700000000, 0xf7fbe0f800000000, + 0x8ee03c1a00000000, 0xb08bfef500000000, 0xb330c91e00000000, + 0x8d5b0bf100000000, 0xe881ae2700000000, 0xd6ea6cc800000000, + 0xd5515b2300000000, 0xeb3a99cc00000000, 0x9221452e00000000, + 0xac4a87c100000000, 0xaff1b02a00000000, 0x919a72c500000000, + 0x1cc1793400000000, 0x22aabbdb00000000, 0x21118c3000000000, + 0x1f7a4edf00000000, 0x6661923d00000000, 0x580a50d200000000, + 0x5bb1673900000000, 0x65daa5d600000000, 0xd0035d4f00000000, + 0xee689fa000000000, 0xedd3a84b00000000, 0xd3b86aa400000000, + 0xaaa3b64600000000, 0x94c874a900000000, 0x9773434200000000, + 0xa91881ad00000000, 0x24438a5c00000000, 0x1a2848b300000000, + 0x19937f5800000000, 0x27f8bdb700000000, 0x5ee3615500000000, + 0x6088a3ba00000000, 0x6333945100000000, 0x5d5856be00000000, + 0x3882f36800000000, 0x06e9318700000000, 0x0552066c00000000, + 0x3b39c48300000000, 0x4222186100000000, 0x7c49da8e00000000, + 0x7ff2ed6500000000, 0x41992f8a00000000, 0xccc2247b00000000, + 0xf2a9e69400000000, 0xf112d17f00000000, 0xcf79139000000000, + 0xb662cf7200000000, 0x88090d9d00000000, 0x8bb23a7600000000, + 0xb5d9f89900000000, 0xa007ba9e00000000, 0x9e6c787100000000, + 0x9dd74f9a00000000, 0xa3bc8d7500000000, 0xdaa7519700000000, + 0xe4cc937800000000, 0xe777a49300000000, 0xd91c667c00000000, + 0x54476d8d00000000, 0x6a2caf6200000000, 0x6997988900000000, + 0x57fc5a6600000000, 0x2ee7868400000000, 0x108c446b00000000, + 0x1337738000000000, 0x2d5cb16f00000000, 0x488614b900000000, + 0x76edd65600000000, 0x7556e1bd00000000, 0x4b3d235200000000, + 0x3226ffb000000000, 0x0c4d3d5f00000000, 0x0ff60ab400000000, + 0x319dc85b00000000, 0xbcc6c3aa00000000, 0x82ad014500000000, + 0x811636ae00000000, 0xbf7df44100000000, 0xc66628a300000000, + 0xf80dea4c00000000, 0xfbb6dda700000000, 0xc5dd1f4800000000, + 0x7004e7d100000000, 0x4e6f253e00000000, 0x4dd412d500000000, + 0x73bfd03a00000000, 0x0aa40cd800000000, 0x34cfce3700000000, + 0x3774f9dc00000000, 0x091f3b3300000000, 0x844430c200000000, + 0xba2ff22d00000000, 0xb994c5c600000000, 0x87ff072900000000, + 0xfee4dbcb00000000, 0xc08f192400000000, 0xc3342ecf00000000, + 0xfd5fec2000000000, 0x988549f600000000, 0xa6ee8b1900000000, + 0xa555bcf200000000, 0x9b3e7e1d00000000, 0xe225a2ff00000000, + 0xdc4e601000000000, 0xdff557fb00000000, 0xe19e951400000000, + 0x6cc59ee500000000, 0x52ae5c0a00000000, 0x51156be100000000, + 0x6f7ea90e00000000, 0x166575ec00000000, 0x280eb70300000000, + 0x2bb580e800000000, 0x15de420700000000, 0x010905e600000000, + 0x3f62c70900000000, 0x3cd9f0e200000000, 0x02b2320d00000000, + 0x7ba9eeef00000000, 0x45c22c0000000000, 0x46791beb00000000, + 0x7812d90400000000, 0xf549d2f500000000, 0xcb22101a00000000, + 0xc89927f100000000, 0xf6f2e51e00000000, 0x8fe939fc00000000, + 0xb182fb1300000000, 0xb239ccf800000000, 0x8c520e1700000000, + 0xe988abc100000000, 0xd7e3692e00000000, 0xd4585ec500000000, + 0xea339c2a00000000, 0x932840c800000000, 0xad43822700000000, + 0xaef8b5cc00000000, 0x9093772300000000, 0x1dc87cd200000000, + 0x23a3be3d00000000, 0x201889d600000000, 0x1e734b3900000000, + 0x676897db00000000, 0x5903553400000000, 0x5ab862df00000000, + 0x64d3a03000000000, 0xd10a58a900000000, 0xef619a4600000000, + 0xecdaadad00000000, 0xd2b16f4200000000, 0xabaab3a000000000, + 0x95c1714f00000000, 0x967a46a400000000, 0xa811844b00000000, + 0x254a8fba00000000, 0x1b214d5500000000, 0x189a7abe00000000, + 0x26f1b85100000000, 0x5fea64b300000000, 0x6181a65c00000000, + 0x623a91b700000000, 0x5c51535800000000, 0x398bf68e00000000, + 0x07e0346100000000, 0x045b038a00000000, 0x3a30c16500000000, + 0x432b1d8700000000, 0x7d40df6800000000, 0x7efbe88300000000, + 0x40902a6c00000000, 0xcdcb219d00000000, 0xf3a0e37200000000, + 0xf01bd49900000000, 0xce70167600000000, 0xb76bca9400000000, + 0x8900087b00000000, 0x8abb3f9000000000, 0xb4d0fd7f00000000, + 0xa10ebf7800000000, 0x9f657d9700000000, 0x9cde4a7c00000000, + 0xa2b5889300000000, 0xdbae547100000000, 0xe5c5969e00000000, + 0xe67ea17500000000, 0xd815639a00000000, 0x554e686b00000000, + 0x6b25aa8400000000, 0x689e9d6f00000000, 0x56f55f8000000000, + 0x2fee836200000000, 0x1185418d00000000, 0x123e766600000000, + 0x2c55b48900000000, 0x498f115f00000000, 0x77e4d3b000000000, + 0x745fe45b00000000, 0x4a3426b400000000, 0x332ffa5600000000, + 0x0d4438b900000000, 0x0eff0f5200000000, 0x3094cdbd00000000, + 0xbdcfc64c00000000, 0x83a404a300000000, 0x801f334800000000, + 0xbe74f1a700000000, 0xc76f2d4500000000, 0xf904efaa00000000, + 0xfabfd84100000000, 0xc4d41aae00000000, 0x710de23700000000, + 0x4f6620d800000000, 0x4cdd173300000000, 0x72b6d5dc00000000, + 0x0bad093e00000000, 0x35c6cbd100000000, 0x367dfc3a00000000, + 0x08163ed500000000, 0x854d352400000000, 0xbb26f7cb00000000, + 0xb89dc02000000000, 0x86f602cf00000000, 0xffedde2d00000000, + 0xc1861cc200000000, 0xc23d2b2900000000, 0xfc56e9c600000000, + 0x998c4c1000000000, 0xa7e78eff00000000, 0xa45cb91400000000, + 0x9a377bfb00000000, 0xe32ca71900000000, 0xdd4765f600000000, + 0xdefc521d00000000, 0xe09790f200000000, 0x6dcc9b0300000000, + 0x53a759ec00000000, 0x501c6e0700000000, 0x6e77ace800000000, + 0x176c700a00000000, 0x2907b2e500000000, 0x2abc850e00000000, + 0x14d747e100000000}, + {0x0000000000000000, 0xc0df8ec100000000, 0xc1b96c5800000000, + 0x0166e29900000000, 0x8273d9b000000000, 0x42ac577100000000, + 0x43cab5e800000000, 0x83153b2900000000, 0x45e1c3ba00000000, + 0x853e4d7b00000000, 0x8458afe200000000, 0x4487212300000000, + 0xc7921a0a00000000, 0x074d94cb00000000, 0x062b765200000000, + 0xc6f4f89300000000, 0xcbc4f6ae00000000, 0x0b1b786f00000000, + 0x0a7d9af600000000, 0xcaa2143700000000, 0x49b72f1e00000000, + 0x8968a1df00000000, 0x880e434600000000, 0x48d1cd8700000000, + 0x8e25351400000000, 0x4efabbd500000000, 0x4f9c594c00000000, + 0x8f43d78d00000000, 0x0c56eca400000000, 0xcc89626500000000, + 0xcdef80fc00000000, 0x0d300e3d00000000, 0xd78f9c8600000000, + 0x1750124700000000, 0x1636f0de00000000, 0xd6e97e1f00000000, + 0x55fc453600000000, 0x9523cbf700000000, 0x9445296e00000000, + 0x549aa7af00000000, 0x926e5f3c00000000, 0x52b1d1fd00000000, + 0x53d7336400000000, 0x9308bda500000000, 0x101d868c00000000, + 0xd0c2084d00000000, 0xd1a4ead400000000, 0x117b641500000000, + 0x1c4b6a2800000000, 0xdc94e4e900000000, 0xddf2067000000000, + 0x1d2d88b100000000, 0x9e38b39800000000, 0x5ee73d5900000000, + 0x5f81dfc000000000, 0x9f5e510100000000, 0x59aaa99200000000, + 0x9975275300000000, 0x9813c5ca00000000, 0x58cc4b0b00000000, + 0xdbd9702200000000, 0x1b06fee300000000, 0x1a601c7a00000000, + 0xdabf92bb00000000, 0xef1948d600000000, 0x2fc6c61700000000, + 0x2ea0248e00000000, 0xee7faa4f00000000, 0x6d6a916600000000, + 0xadb51fa700000000, 0xacd3fd3e00000000, 0x6c0c73ff00000000, + 0xaaf88b6c00000000, 0x6a2705ad00000000, 0x6b41e73400000000, + 0xab9e69f500000000, 0x288b52dc00000000, 0xe854dc1d00000000, + 0xe9323e8400000000, 0x29edb04500000000, 0x24ddbe7800000000, + 0xe40230b900000000, 0xe564d22000000000, 0x25bb5ce100000000, + 0xa6ae67c800000000, 0x6671e90900000000, 0x67170b9000000000, + 0xa7c8855100000000, 0x613c7dc200000000, 0xa1e3f30300000000, + 0xa085119a00000000, 0x605a9f5b00000000, 0xe34fa47200000000, + 0x23902ab300000000, 0x22f6c82a00000000, 0xe22946eb00000000, + 0x3896d45000000000, 0xf8495a9100000000, 0xf92fb80800000000, + 0x39f036c900000000, 0xbae50de000000000, 0x7a3a832100000000, + 0x7b5c61b800000000, 0xbb83ef7900000000, 0x7d7717ea00000000, + 0xbda8992b00000000, 0xbcce7bb200000000, 0x7c11f57300000000, + 0xff04ce5a00000000, 0x3fdb409b00000000, 0x3ebda20200000000, + 0xfe622cc300000000, 0xf35222fe00000000, 0x338dac3f00000000, + 0x32eb4ea600000000, 0xf234c06700000000, 0x7121fb4e00000000, + 0xb1fe758f00000000, 0xb098971600000000, 0x704719d700000000, + 0xb6b3e14400000000, 0x766c6f8500000000, 0x770a8d1c00000000, + 0xb7d503dd00000000, 0x34c038f400000000, 0xf41fb63500000000, + 0xf57954ac00000000, 0x35a6da6d00000000, 0x9f35e17700000000, + 0x5fea6fb600000000, 0x5e8c8d2f00000000, 0x9e5303ee00000000, + 0x1d4638c700000000, 0xdd99b60600000000, 0xdcff549f00000000, + 0x1c20da5e00000000, 0xdad422cd00000000, 0x1a0bac0c00000000, + 0x1b6d4e9500000000, 0xdbb2c05400000000, 0x58a7fb7d00000000, + 0x987875bc00000000, 0x991e972500000000, 0x59c119e400000000, + 0x54f117d900000000, 0x942e991800000000, 0x95487b8100000000, + 0x5597f54000000000, 0xd682ce6900000000, 0x165d40a800000000, + 0x173ba23100000000, 0xd7e42cf000000000, 0x1110d46300000000, + 0xd1cf5aa200000000, 0xd0a9b83b00000000, 0x107636fa00000000, + 0x93630dd300000000, 0x53bc831200000000, 0x52da618b00000000, + 0x9205ef4a00000000, 0x48ba7df100000000, 0x8865f33000000000, + 0x890311a900000000, 0x49dc9f6800000000, 0xcac9a44100000000, + 0x0a162a8000000000, 0x0b70c81900000000, 0xcbaf46d800000000, + 0x0d5bbe4b00000000, 0xcd84308a00000000, 0xcce2d21300000000, + 0x0c3d5cd200000000, 0x8f2867fb00000000, 0x4ff7e93a00000000, + 0x4e910ba300000000, 0x8e4e856200000000, 0x837e8b5f00000000, + 0x43a1059e00000000, 0x42c7e70700000000, 0x821869c600000000, + 0x010d52ef00000000, 0xc1d2dc2e00000000, 0xc0b43eb700000000, + 0x006bb07600000000, 0xc69f48e500000000, 0x0640c62400000000, + 0x072624bd00000000, 0xc7f9aa7c00000000, 0x44ec915500000000, + 0x84331f9400000000, 0x8555fd0d00000000, 0x458a73cc00000000, + 0x702ca9a100000000, 0xb0f3276000000000, 0xb195c5f900000000, + 0x714a4b3800000000, 0xf25f701100000000, 0x3280fed000000000, + 0x33e61c4900000000, 0xf339928800000000, 0x35cd6a1b00000000, + 0xf512e4da00000000, 0xf474064300000000, 0x34ab888200000000, + 0xb7beb3ab00000000, 0x77613d6a00000000, 0x7607dff300000000, + 0xb6d8513200000000, 0xbbe85f0f00000000, 0x7b37d1ce00000000, + 0x7a51335700000000, 0xba8ebd9600000000, 0x399b86bf00000000, + 0xf944087e00000000, 0xf822eae700000000, 0x38fd642600000000, + 0xfe099cb500000000, 0x3ed6127400000000, 0x3fb0f0ed00000000, + 0xff6f7e2c00000000, 0x7c7a450500000000, 0xbca5cbc400000000, + 0xbdc3295d00000000, 0x7d1ca79c00000000, 0xa7a3352700000000, + 0x677cbbe600000000, 0x661a597f00000000, 0xa6c5d7be00000000, + 0x25d0ec9700000000, 0xe50f625600000000, 0xe46980cf00000000, + 0x24b60e0e00000000, 0xe242f69d00000000, 0x229d785c00000000, + 0x23fb9ac500000000, 0xe324140400000000, 0x60312f2d00000000, + 0xa0eea1ec00000000, 0xa188437500000000, 0x6157cdb400000000, + 0x6c67c38900000000, 0xacb84d4800000000, 0xaddeafd100000000, + 0x6d01211000000000, 0xee141a3900000000, 0x2ecb94f800000000, + 0x2fad766100000000, 0xef72f8a000000000, 0x2986003300000000, + 0xe9598ef200000000, 0xe83f6c6b00000000, 0x28e0e2aa00000000, + 0xabf5d98300000000, 0x6b2a574200000000, 0x6a4cb5db00000000, + 0xaa933b1a00000000}, + {0x0000000000000000, 0x6f4ca59b00000000, 0x9f9e3bec00000000, + 0xf0d29e7700000000, 0x7f3b060300000000, 0x1077a39800000000, + 0xe0a53def00000000, 0x8fe9987400000000, 0xfe760c0600000000, + 0x913aa99d00000000, 0x61e837ea00000000, 0x0ea4927100000000, + 0x814d0a0500000000, 0xee01af9e00000000, 0x1ed331e900000000, + 0x719f947200000000, 0xfced180c00000000, 0x93a1bd9700000000, + 0x637323e000000000, 0x0c3f867b00000000, 0x83d61e0f00000000, + 0xec9abb9400000000, 0x1c4825e300000000, 0x7304807800000000, + 0x029b140a00000000, 0x6dd7b19100000000, 0x9d052fe600000000, + 0xf2498a7d00000000, 0x7da0120900000000, 0x12ecb79200000000, + 0xe23e29e500000000, 0x8d728c7e00000000, 0xf8db311800000000, + 0x9797948300000000, 0x67450af400000000, 0x0809af6f00000000, + 0x87e0371b00000000, 0xe8ac928000000000, 0x187e0cf700000000, + 0x7732a96c00000000, 0x06ad3d1e00000000, 0x69e1988500000000, + 0x993306f200000000, 0xf67fa36900000000, 0x79963b1d00000000, + 0x16da9e8600000000, 0xe60800f100000000, 0x8944a56a00000000, + 0x0436291400000000, 0x6b7a8c8f00000000, 0x9ba812f800000000, + 0xf4e4b76300000000, 0x7b0d2f1700000000, 0x14418a8c00000000, + 0xe49314fb00000000, 0x8bdfb16000000000, 0xfa40251200000000, + 0x950c808900000000, 0x65de1efe00000000, 0x0a92bb6500000000, + 0x857b231100000000, 0xea37868a00000000, 0x1ae518fd00000000, + 0x75a9bd6600000000, 0xf0b7633000000000, 0x9ffbc6ab00000000, + 0x6f2958dc00000000, 0x0065fd4700000000, 0x8f8c653300000000, + 0xe0c0c0a800000000, 0x10125edf00000000, 0x7f5efb4400000000, + 0x0ec16f3600000000, 0x618dcaad00000000, 0x915f54da00000000, + 0xfe13f14100000000, 0x71fa693500000000, 0x1eb6ccae00000000, + 0xee6452d900000000, 0x8128f74200000000, 0x0c5a7b3c00000000, + 0x6316dea700000000, 0x93c440d000000000, 0xfc88e54b00000000, + 0x73617d3f00000000, 0x1c2dd8a400000000, 0xecff46d300000000, + 0x83b3e34800000000, 0xf22c773a00000000, 0x9d60d2a100000000, + 0x6db24cd600000000, 0x02fee94d00000000, 0x8d17713900000000, + 0xe25bd4a200000000, 0x12894ad500000000, 0x7dc5ef4e00000000, + 0x086c522800000000, 0x6720f7b300000000, 0x97f269c400000000, + 0xf8becc5f00000000, 0x7757542b00000000, 0x181bf1b000000000, + 0xe8c96fc700000000, 0x8785ca5c00000000, 0xf61a5e2e00000000, + 0x9956fbb500000000, 0x698465c200000000, 0x06c8c05900000000, + 0x8921582d00000000, 0xe66dfdb600000000, 0x16bf63c100000000, + 0x79f3c65a00000000, 0xf4814a2400000000, 0x9bcdefbf00000000, + 0x6b1f71c800000000, 0x0453d45300000000, 0x8bba4c2700000000, + 0xe4f6e9bc00000000, 0x142477cb00000000, 0x7b68d25000000000, + 0x0af7462200000000, 0x65bbe3b900000000, 0x95697dce00000000, + 0xfa25d85500000000, 0x75cc402100000000, 0x1a80e5ba00000000, + 0xea527bcd00000000, 0x851ede5600000000, 0xe06fc76000000000, + 0x8f2362fb00000000, 0x7ff1fc8c00000000, 0x10bd591700000000, + 0x9f54c16300000000, 0xf01864f800000000, 0x00cafa8f00000000, + 0x6f865f1400000000, 0x1e19cb6600000000, 0x71556efd00000000, + 0x8187f08a00000000, 0xeecb551100000000, 0x6122cd6500000000, + 0x0e6e68fe00000000, 0xfebcf68900000000, 0x91f0531200000000, + 0x1c82df6c00000000, 0x73ce7af700000000, 0x831ce48000000000, + 0xec50411b00000000, 0x63b9d96f00000000, 0x0cf57cf400000000, + 0xfc27e28300000000, 0x936b471800000000, 0xe2f4d36a00000000, + 0x8db876f100000000, 0x7d6ae88600000000, 0x12264d1d00000000, + 0x9dcfd56900000000, 0xf28370f200000000, 0x0251ee8500000000, + 0x6d1d4b1e00000000, 0x18b4f67800000000, 0x77f853e300000000, + 0x872acd9400000000, 0xe866680f00000000, 0x678ff07b00000000, + 0x08c355e000000000, 0xf811cb9700000000, 0x975d6e0c00000000, + 0xe6c2fa7e00000000, 0x898e5fe500000000, 0x795cc19200000000, + 0x1610640900000000, 0x99f9fc7d00000000, 0xf6b559e600000000, + 0x0667c79100000000, 0x692b620a00000000, 0xe459ee7400000000, + 0x8b154bef00000000, 0x7bc7d59800000000, 0x148b700300000000, + 0x9b62e87700000000, 0xf42e4dec00000000, 0x04fcd39b00000000, + 0x6bb0760000000000, 0x1a2fe27200000000, 0x756347e900000000, + 0x85b1d99e00000000, 0xeafd7c0500000000, 0x6514e47100000000, + 0x0a5841ea00000000, 0xfa8adf9d00000000, 0x95c67a0600000000, + 0x10d8a45000000000, 0x7f9401cb00000000, 0x8f469fbc00000000, + 0xe00a3a2700000000, 0x6fe3a25300000000, 0x00af07c800000000, + 0xf07d99bf00000000, 0x9f313c2400000000, 0xeeaea85600000000, + 0x81e20dcd00000000, 0x713093ba00000000, 0x1e7c362100000000, + 0x9195ae5500000000, 0xfed90bce00000000, 0x0e0b95b900000000, + 0x6147302200000000, 0xec35bc5c00000000, 0x837919c700000000, + 0x73ab87b000000000, 0x1ce7222b00000000, 0x930eba5f00000000, + 0xfc421fc400000000, 0x0c9081b300000000, 0x63dc242800000000, + 0x1243b05a00000000, 0x7d0f15c100000000, 0x8ddd8bb600000000, + 0xe2912e2d00000000, 0x6d78b65900000000, 0x023413c200000000, + 0xf2e68db500000000, 0x9daa282e00000000, 0xe803954800000000, + 0x874f30d300000000, 0x779daea400000000, 0x18d10b3f00000000, + 0x9738934b00000000, 0xf87436d000000000, 0x08a6a8a700000000, + 0x67ea0d3c00000000, 0x1675994e00000000, 0x79393cd500000000, + 0x89eba2a200000000, 0xe6a7073900000000, 0x694e9f4d00000000, + 0x06023ad600000000, 0xf6d0a4a100000000, 0x999c013a00000000, + 0x14ee8d4400000000, 0x7ba228df00000000, 0x8b70b6a800000000, + 0xe43c133300000000, 0x6bd58b4700000000, 0x04992edc00000000, + 0xf44bb0ab00000000, 0x9b07153000000000, 0xea98814200000000, + 0x85d424d900000000, 0x7506baae00000000, 0x1a4a1f3500000000, + 0x95a3874100000000, 0xfaef22da00000000, 0x0a3dbcad00000000, + 0x6571193600000000}, + {0x0000000000000000, 0x85d996dd00000000, 0x4bb55c6000000000, + 0xce6ccabd00000000, 0x966ab9c000000000, 0x13b32f1d00000000, + 0xdddfe5a000000000, 0x5806737d00000000, 0x6dd3035a00000000, + 0xe80a958700000000, 0x26665f3a00000000, 0xa3bfc9e700000000, + 0xfbb9ba9a00000000, 0x7e602c4700000000, 0xb00ce6fa00000000, + 0x35d5702700000000, 0xdaa607b400000000, 0x5f7f916900000000, + 0x91135bd400000000, 0x14cacd0900000000, 0x4cccbe7400000000, + 0xc91528a900000000, 0x0779e21400000000, 0x82a074c900000000, + 0xb77504ee00000000, 0x32ac923300000000, 0xfcc0588e00000000, + 0x7919ce5300000000, 0x211fbd2e00000000, 0xa4c62bf300000000, + 0x6aaae14e00000000, 0xef73779300000000, 0xf54b7eb300000000, + 0x7092e86e00000000, 0xbefe22d300000000, 0x3b27b40e00000000, + 0x6321c77300000000, 0xe6f851ae00000000, 0x28949b1300000000, + 0xad4d0dce00000000, 0x98987de900000000, 0x1d41eb3400000000, + 0xd32d218900000000, 0x56f4b75400000000, 0x0ef2c42900000000, + 0x8b2b52f400000000, 0x4547984900000000, 0xc09e0e9400000000, + 0x2fed790700000000, 0xaa34efda00000000, 0x6458256700000000, + 0xe181b3ba00000000, 0xb987c0c700000000, 0x3c5e561a00000000, + 0xf2329ca700000000, 0x77eb0a7a00000000, 0x423e7a5d00000000, + 0xc7e7ec8000000000, 0x098b263d00000000, 0x8c52b0e000000000, + 0xd454c39d00000000, 0x518d554000000000, 0x9fe19ffd00000000, + 0x1a38092000000000, 0xab918dbd00000000, 0x2e481b6000000000, + 0xe024d1dd00000000, 0x65fd470000000000, 0x3dfb347d00000000, + 0xb822a2a000000000, 0x764e681d00000000, 0xf397fec000000000, + 0xc6428ee700000000, 0x439b183a00000000, 0x8df7d28700000000, + 0x082e445a00000000, 0x5028372700000000, 0xd5f1a1fa00000000, + 0x1b9d6b4700000000, 0x9e44fd9a00000000, 0x71378a0900000000, + 0xf4ee1cd400000000, 0x3a82d66900000000, 0xbf5b40b400000000, + 0xe75d33c900000000, 0x6284a51400000000, 0xace86fa900000000, + 0x2931f97400000000, 0x1ce4895300000000, 0x993d1f8e00000000, + 0x5751d53300000000, 0xd28843ee00000000, 0x8a8e309300000000, + 0x0f57a64e00000000, 0xc13b6cf300000000, 0x44e2fa2e00000000, + 0x5edaf30e00000000, 0xdb0365d300000000, 0x156faf6e00000000, + 0x90b639b300000000, 0xc8b04ace00000000, 0x4d69dc1300000000, + 0x830516ae00000000, 0x06dc807300000000, 0x3309f05400000000, + 0xb6d0668900000000, 0x78bcac3400000000, 0xfd653ae900000000, + 0xa563499400000000, 0x20badf4900000000, 0xeed615f400000000, + 0x6b0f832900000000, 0x847cf4ba00000000, 0x01a5626700000000, + 0xcfc9a8da00000000, 0x4a103e0700000000, 0x12164d7a00000000, + 0x97cfdba700000000, 0x59a3111a00000000, 0xdc7a87c700000000, + 0xe9aff7e000000000, 0x6c76613d00000000, 0xa21aab8000000000, + 0x27c33d5d00000000, 0x7fc54e2000000000, 0xfa1cd8fd00000000, + 0x3470124000000000, 0xb1a9849d00000000, 0x17256aa000000000, + 0x92fcfc7d00000000, 0x5c9036c000000000, 0xd949a01d00000000, + 0x814fd36000000000, 0x049645bd00000000, 0xcafa8f0000000000, + 0x4f2319dd00000000, 0x7af669fa00000000, 0xff2fff2700000000, + 0x3143359a00000000, 0xb49aa34700000000, 0xec9cd03a00000000, + 0x694546e700000000, 0xa7298c5a00000000, 0x22f01a8700000000, + 0xcd836d1400000000, 0x485afbc900000000, 0x8636317400000000, + 0x03efa7a900000000, 0x5be9d4d400000000, 0xde30420900000000, + 0x105c88b400000000, 0x95851e6900000000, 0xa0506e4e00000000, + 0x2589f89300000000, 0xebe5322e00000000, 0x6e3ca4f300000000, + 0x363ad78e00000000, 0xb3e3415300000000, 0x7d8f8bee00000000, + 0xf8561d3300000000, 0xe26e141300000000, 0x67b782ce00000000, + 0xa9db487300000000, 0x2c02deae00000000, 0x7404add300000000, + 0xf1dd3b0e00000000, 0x3fb1f1b300000000, 0xba68676e00000000, + 0x8fbd174900000000, 0x0a64819400000000, 0xc4084b2900000000, + 0x41d1ddf400000000, 0x19d7ae8900000000, 0x9c0e385400000000, + 0x5262f2e900000000, 0xd7bb643400000000, 0x38c813a700000000, + 0xbd11857a00000000, 0x737d4fc700000000, 0xf6a4d91a00000000, + 0xaea2aa6700000000, 0x2b7b3cba00000000, 0xe517f60700000000, + 0x60ce60da00000000, 0x551b10fd00000000, 0xd0c2862000000000, + 0x1eae4c9d00000000, 0x9b77da4000000000, 0xc371a93d00000000, + 0x46a83fe000000000, 0x88c4f55d00000000, 0x0d1d638000000000, + 0xbcb4e71d00000000, 0x396d71c000000000, 0xf701bb7d00000000, + 0x72d82da000000000, 0x2ade5edd00000000, 0xaf07c80000000000, + 0x616b02bd00000000, 0xe4b2946000000000, 0xd167e44700000000, + 0x54be729a00000000, 0x9ad2b82700000000, 0x1f0b2efa00000000, + 0x470d5d8700000000, 0xc2d4cb5a00000000, 0x0cb801e700000000, + 0x8961973a00000000, 0x6612e0a900000000, 0xe3cb767400000000, + 0x2da7bcc900000000, 0xa87e2a1400000000, 0xf078596900000000, + 0x75a1cfb400000000, 0xbbcd050900000000, 0x3e1493d400000000, + 0x0bc1e3f300000000, 0x8e18752e00000000, 0x4074bf9300000000, + 0xc5ad294e00000000, 0x9dab5a3300000000, 0x1872ccee00000000, + 0xd61e065300000000, 0x53c7908e00000000, 0x49ff99ae00000000, + 0xcc260f7300000000, 0x024ac5ce00000000, 0x8793531300000000, + 0xdf95206e00000000, 0x5a4cb6b300000000, 0x94207c0e00000000, + 0x11f9ead300000000, 0x242c9af400000000, 0xa1f50c2900000000, + 0x6f99c69400000000, 0xea40504900000000, 0xb246233400000000, + 0x379fb5e900000000, 0xf9f37f5400000000, 0x7c2ae98900000000, + 0x93599e1a00000000, 0x168008c700000000, 0xd8ecc27a00000000, + 0x5d3554a700000000, 0x053327da00000000, 0x80eab10700000000, + 0x4e867bba00000000, 0xcb5fed6700000000, 0xfe8a9d4000000000, + 0x7b530b9d00000000, 0xb53fc12000000000, 0x30e657fd00000000, + 0x68e0248000000000, 0xed39b25d00000000, 0x235578e000000000, + 0xa68cee3d00000000}, + {0x0000000000000000, 0x76e10f9d00000000, 0xadc46ee100000000, + 0xdb25617c00000000, 0x1b8fac1900000000, 0x6d6ea38400000000, + 0xb64bc2f800000000, 0xc0aacd6500000000, 0x361e593300000000, + 0x40ff56ae00000000, 0x9bda37d200000000, 0xed3b384f00000000, + 0x2d91f52a00000000, 0x5b70fab700000000, 0x80559bcb00000000, + 0xf6b4945600000000, 0x6c3cb26600000000, 0x1addbdfb00000000, + 0xc1f8dc8700000000, 0xb719d31a00000000, 0x77b31e7f00000000, + 0x015211e200000000, 0xda77709e00000000, 0xac967f0300000000, + 0x5a22eb5500000000, 0x2cc3e4c800000000, 0xf7e685b400000000, + 0x81078a2900000000, 0x41ad474c00000000, 0x374c48d100000000, + 0xec6929ad00000000, 0x9a88263000000000, 0xd87864cd00000000, + 0xae996b5000000000, 0x75bc0a2c00000000, 0x035d05b100000000, + 0xc3f7c8d400000000, 0xb516c74900000000, 0x6e33a63500000000, + 0x18d2a9a800000000, 0xee663dfe00000000, 0x9887326300000000, + 0x43a2531f00000000, 0x35435c8200000000, 0xf5e991e700000000, + 0x83089e7a00000000, 0x582dff0600000000, 0x2eccf09b00000000, + 0xb444d6ab00000000, 0xc2a5d93600000000, 0x1980b84a00000000, + 0x6f61b7d700000000, 0xafcb7ab200000000, 0xd92a752f00000000, + 0x020f145300000000, 0x74ee1bce00000000, 0x825a8f9800000000, + 0xf4bb800500000000, 0x2f9ee17900000000, 0x597feee400000000, + 0x99d5238100000000, 0xef342c1c00000000, 0x34114d6000000000, + 0x42f042fd00000000, 0xf1f7b94100000000, 0x8716b6dc00000000, + 0x5c33d7a000000000, 0x2ad2d83d00000000, 0xea78155800000000, + 0x9c991ac500000000, 0x47bc7bb900000000, 0x315d742400000000, + 0xc7e9e07200000000, 0xb108efef00000000, 0x6a2d8e9300000000, + 0x1ccc810e00000000, 0xdc664c6b00000000, 0xaa8743f600000000, + 0x71a2228a00000000, 0x07432d1700000000, 0x9dcb0b2700000000, + 0xeb2a04ba00000000, 0x300f65c600000000, 0x46ee6a5b00000000, + 0x8644a73e00000000, 0xf0a5a8a300000000, 0x2b80c9df00000000, + 0x5d61c64200000000, 0xabd5521400000000, 0xdd345d8900000000, + 0x06113cf500000000, 0x70f0336800000000, 0xb05afe0d00000000, + 0xc6bbf19000000000, 0x1d9e90ec00000000, 0x6b7f9f7100000000, + 0x298fdd8c00000000, 0x5f6ed21100000000, 0x844bb36d00000000, + 0xf2aabcf000000000, 0x3200719500000000, 0x44e17e0800000000, + 0x9fc41f7400000000, 0xe92510e900000000, 0x1f9184bf00000000, + 0x69708b2200000000, 0xb255ea5e00000000, 0xc4b4e5c300000000, + 0x041e28a600000000, 0x72ff273b00000000, 0xa9da464700000000, + 0xdf3b49da00000000, 0x45b36fea00000000, 0x3352607700000000, + 0xe877010b00000000, 0x9e960e9600000000, 0x5e3cc3f300000000, + 0x28ddcc6e00000000, 0xf3f8ad1200000000, 0x8519a28f00000000, + 0x73ad36d900000000, 0x054c394400000000, 0xde69583800000000, + 0xa88857a500000000, 0x68229ac000000000, 0x1ec3955d00000000, + 0xc5e6f42100000000, 0xb307fbbc00000000, 0xe2ef738300000000, + 0x940e7c1e00000000, 0x4f2b1d6200000000, 0x39ca12ff00000000, + 0xf960df9a00000000, 0x8f81d00700000000, 0x54a4b17b00000000, + 0x2245bee600000000, 0xd4f12ab000000000, 0xa210252d00000000, + 0x7935445100000000, 0x0fd44bcc00000000, 0xcf7e86a900000000, + 0xb99f893400000000, 0x62bae84800000000, 0x145be7d500000000, + 0x8ed3c1e500000000, 0xf832ce7800000000, 0x2317af0400000000, + 0x55f6a09900000000, 0x955c6dfc00000000, 0xe3bd626100000000, + 0x3898031d00000000, 0x4e790c8000000000, 0xb8cd98d600000000, + 0xce2c974b00000000, 0x1509f63700000000, 0x63e8f9aa00000000, + 0xa34234cf00000000, 0xd5a33b5200000000, 0x0e865a2e00000000, + 0x786755b300000000, 0x3a97174e00000000, 0x4c7618d300000000, + 0x975379af00000000, 0xe1b2763200000000, 0x2118bb5700000000, + 0x57f9b4ca00000000, 0x8cdcd5b600000000, 0xfa3dda2b00000000, + 0x0c894e7d00000000, 0x7a6841e000000000, 0xa14d209c00000000, + 0xd7ac2f0100000000, 0x1706e26400000000, 0x61e7edf900000000, + 0xbac28c8500000000, 0xcc23831800000000, 0x56aba52800000000, + 0x204aaab500000000, 0xfb6fcbc900000000, 0x8d8ec45400000000, + 0x4d24093100000000, 0x3bc506ac00000000, 0xe0e067d000000000, + 0x9601684d00000000, 0x60b5fc1b00000000, 0x1654f38600000000, + 0xcd7192fa00000000, 0xbb909d6700000000, 0x7b3a500200000000, + 0x0ddb5f9f00000000, 0xd6fe3ee300000000, 0xa01f317e00000000, + 0x1318cac200000000, 0x65f9c55f00000000, 0xbedca42300000000, + 0xc83dabbe00000000, 0x089766db00000000, 0x7e76694600000000, + 0xa553083a00000000, 0xd3b207a700000000, 0x250693f100000000, + 0x53e79c6c00000000, 0x88c2fd1000000000, 0xfe23f28d00000000, + 0x3e893fe800000000, 0x4868307500000000, 0x934d510900000000, + 0xe5ac5e9400000000, 0x7f2478a400000000, 0x09c5773900000000, + 0xd2e0164500000000, 0xa40119d800000000, 0x64abd4bd00000000, + 0x124adb2000000000, 0xc96fba5c00000000, 0xbf8eb5c100000000, + 0x493a219700000000, 0x3fdb2e0a00000000, 0xe4fe4f7600000000, + 0x921f40eb00000000, 0x52b58d8e00000000, 0x2454821300000000, + 0xff71e36f00000000, 0x8990ecf200000000, 0xcb60ae0f00000000, + 0xbd81a19200000000, 0x66a4c0ee00000000, 0x1045cf7300000000, + 0xd0ef021600000000, 0xa60e0d8b00000000, 0x7d2b6cf700000000, + 0x0bca636a00000000, 0xfd7ef73c00000000, 0x8b9ff8a100000000, + 0x50ba99dd00000000, 0x265b964000000000, 0xe6f15b2500000000, + 0x901054b800000000, 0x4b3535c400000000, 0x3dd43a5900000000, + 0xa75c1c6900000000, 0xd1bd13f400000000, 0x0a98728800000000, + 0x7c797d1500000000, 0xbcd3b07000000000, 0xca32bfed00000000, + 0x1117de9100000000, 0x67f6d10c00000000, 0x9142455a00000000, + 0xe7a34ac700000000, 0x3c862bbb00000000, 0x4a67242600000000, + 0x8acde94300000000, 0xfc2ce6de00000000, 0x270987a200000000, + 0x51e8883f00000000}, + {0x0000000000000000, 0xe8dbfbb900000000, 0x91b186a800000000, + 0x796a7d1100000000, 0x63657c8a00000000, 0x8bbe873300000000, + 0xf2d4fa2200000000, 0x1a0f019b00000000, 0x87cc89cf00000000, + 0x6f17727600000000, 0x167d0f6700000000, 0xfea6f4de00000000, + 0xe4a9f54500000000, 0x0c720efc00000000, 0x751873ed00000000, + 0x9dc3885400000000, 0x4f9f624400000000, 0xa74499fd00000000, + 0xde2ee4ec00000000, 0x36f51f5500000000, 0x2cfa1ece00000000, + 0xc421e57700000000, 0xbd4b986600000000, 0x559063df00000000, + 0xc853eb8b00000000, 0x2088103200000000, 0x59e26d2300000000, + 0xb139969a00000000, 0xab36970100000000, 0x43ed6cb800000000, + 0x3a8711a900000000, 0xd25cea1000000000, 0x9e3ec58800000000, + 0x76e53e3100000000, 0x0f8f432000000000, 0xe754b89900000000, + 0xfd5bb90200000000, 0x158042bb00000000, 0x6cea3faa00000000, + 0x8431c41300000000, 0x19f24c4700000000, 0xf129b7fe00000000, + 0x8843caef00000000, 0x6098315600000000, 0x7a9730cd00000000, + 0x924ccb7400000000, 0xeb26b66500000000, 0x03fd4ddc00000000, + 0xd1a1a7cc00000000, 0x397a5c7500000000, 0x4010216400000000, + 0xa8cbdadd00000000, 0xb2c4db4600000000, 0x5a1f20ff00000000, + 0x23755dee00000000, 0xcbaea65700000000, 0x566d2e0300000000, + 0xbeb6d5ba00000000, 0xc7dca8ab00000000, 0x2f07531200000000, + 0x3508528900000000, 0xddd3a93000000000, 0xa4b9d42100000000, + 0x4c622f9800000000, 0x7d7bfbca00000000, 0x95a0007300000000, + 0xecca7d6200000000, 0x041186db00000000, 0x1e1e874000000000, + 0xf6c57cf900000000, 0x8faf01e800000000, 0x6774fa5100000000, + 0xfab7720500000000, 0x126c89bc00000000, 0x6b06f4ad00000000, + 0x83dd0f1400000000, 0x99d20e8f00000000, 0x7109f53600000000, + 0x0863882700000000, 0xe0b8739e00000000, 0x32e4998e00000000, + 0xda3f623700000000, 0xa3551f2600000000, 0x4b8ee49f00000000, + 0x5181e50400000000, 0xb95a1ebd00000000, 0xc03063ac00000000, + 0x28eb981500000000, 0xb528104100000000, 0x5df3ebf800000000, + 0x249996e900000000, 0xcc426d5000000000, 0xd64d6ccb00000000, + 0x3e96977200000000, 0x47fcea6300000000, 0xaf2711da00000000, + 0xe3453e4200000000, 0x0b9ec5fb00000000, 0x72f4b8ea00000000, + 0x9a2f435300000000, 0x802042c800000000, 0x68fbb97100000000, + 0x1191c46000000000, 0xf94a3fd900000000, 0x6489b78d00000000, + 0x8c524c3400000000, 0xf538312500000000, 0x1de3ca9c00000000, + 0x07eccb0700000000, 0xef3730be00000000, 0x965d4daf00000000, + 0x7e86b61600000000, 0xacda5c0600000000, 0x4401a7bf00000000, + 0x3d6bdaae00000000, 0xd5b0211700000000, 0xcfbf208c00000000, + 0x2764db3500000000, 0x5e0ea62400000000, 0xb6d55d9d00000000, + 0x2b16d5c900000000, 0xc3cd2e7000000000, 0xbaa7536100000000, + 0x527ca8d800000000, 0x4873a94300000000, 0xa0a852fa00000000, + 0xd9c22feb00000000, 0x3119d45200000000, 0xbbf0874e00000000, + 0x532b7cf700000000, 0x2a4101e600000000, 0xc29afa5f00000000, + 0xd895fbc400000000, 0x304e007d00000000, 0x49247d6c00000000, + 0xa1ff86d500000000, 0x3c3c0e8100000000, 0xd4e7f53800000000, + 0xad8d882900000000, 0x4556739000000000, 0x5f59720b00000000, + 0xb78289b200000000, 0xcee8f4a300000000, 0x26330f1a00000000, + 0xf46fe50a00000000, 0x1cb41eb300000000, 0x65de63a200000000, + 0x8d05981b00000000, 0x970a998000000000, 0x7fd1623900000000, + 0x06bb1f2800000000, 0xee60e49100000000, 0x73a36cc500000000, + 0x9b78977c00000000, 0xe212ea6d00000000, 0x0ac911d400000000, + 0x10c6104f00000000, 0xf81debf600000000, 0x817796e700000000, + 0x69ac6d5e00000000, 0x25ce42c600000000, 0xcd15b97f00000000, + 0xb47fc46e00000000, 0x5ca43fd700000000, 0x46ab3e4c00000000, + 0xae70c5f500000000, 0xd71ab8e400000000, 0x3fc1435d00000000, + 0xa202cb0900000000, 0x4ad930b000000000, 0x33b34da100000000, + 0xdb68b61800000000, 0xc167b78300000000, 0x29bc4c3a00000000, + 0x50d6312b00000000, 0xb80dca9200000000, 0x6a51208200000000, + 0x828adb3b00000000, 0xfbe0a62a00000000, 0x133b5d9300000000, + 0x09345c0800000000, 0xe1efa7b100000000, 0x9885daa000000000, + 0x705e211900000000, 0xed9da94d00000000, 0x054652f400000000, + 0x7c2c2fe500000000, 0x94f7d45c00000000, 0x8ef8d5c700000000, + 0x66232e7e00000000, 0x1f49536f00000000, 0xf792a8d600000000, + 0xc68b7c8400000000, 0x2e50873d00000000, 0x573afa2c00000000, + 0xbfe1019500000000, 0xa5ee000e00000000, 0x4d35fbb700000000, + 0x345f86a600000000, 0xdc847d1f00000000, 0x4147f54b00000000, + 0xa99c0ef200000000, 0xd0f673e300000000, 0x382d885a00000000, + 0x222289c100000000, 0xcaf9727800000000, 0xb3930f6900000000, + 0x5b48f4d000000000, 0x89141ec000000000, 0x61cfe57900000000, + 0x18a5986800000000, 0xf07e63d100000000, 0xea71624a00000000, + 0x02aa99f300000000, 0x7bc0e4e200000000, 0x931b1f5b00000000, + 0x0ed8970f00000000, 0xe6036cb600000000, 0x9f6911a700000000, + 0x77b2ea1e00000000, 0x6dbdeb8500000000, 0x8566103c00000000, + 0xfc0c6d2d00000000, 0x14d7969400000000, 0x58b5b90c00000000, + 0xb06e42b500000000, 0xc9043fa400000000, 0x21dfc41d00000000, + 0x3bd0c58600000000, 0xd30b3e3f00000000, 0xaa61432e00000000, + 0x42bab89700000000, 0xdf7930c300000000, 0x37a2cb7a00000000, + 0x4ec8b66b00000000, 0xa6134dd200000000, 0xbc1c4c4900000000, + 0x54c7b7f000000000, 0x2dadcae100000000, 0xc576315800000000, + 0x172adb4800000000, 0xfff120f100000000, 0x869b5de000000000, + 0x6e40a65900000000, 0x744fa7c200000000, 0x9c945c7b00000000, + 0xe5fe216a00000000, 0x0d25dad300000000, 0x90e6528700000000, + 0x783da93e00000000, 0x0157d42f00000000, 0xe98c2f9600000000, + 0xf3832e0d00000000, 0x1b58d5b400000000, 0x6232a8a500000000, + 0x8ae9531c00000000}, + {0x0000000000000000, 0x919168ae00000000, 0x6325a08700000000, + 0xf2b4c82900000000, 0x874c31d400000000, 0x16dd597a00000000, + 0xe469915300000000, 0x75f8f9fd00000000, 0x4f9f137300000000, + 0xde0e7bdd00000000, 0x2cbab3f400000000, 0xbd2bdb5a00000000, + 0xc8d322a700000000, 0x59424a0900000000, 0xabf6822000000000, + 0x3a67ea8e00000000, 0x9e3e27e600000000, 0x0faf4f4800000000, + 0xfd1b876100000000, 0x6c8aefcf00000000, 0x1972163200000000, + 0x88e37e9c00000000, 0x7a57b6b500000000, 0xebc6de1b00000000, + 0xd1a1349500000000, 0x40305c3b00000000, 0xb284941200000000, + 0x2315fcbc00000000, 0x56ed054100000000, 0xc77c6def00000000, + 0x35c8a5c600000000, 0xa459cd6800000000, 0x7d7b3f1700000000, + 0xecea57b900000000, 0x1e5e9f9000000000, 0x8fcff73e00000000, + 0xfa370ec300000000, 0x6ba6666d00000000, 0x9912ae4400000000, + 0x0883c6ea00000000, 0x32e42c6400000000, 0xa37544ca00000000, + 0x51c18ce300000000, 0xc050e44d00000000, 0xb5a81db000000000, + 0x2439751e00000000, 0xd68dbd3700000000, 0x471cd59900000000, + 0xe34518f100000000, 0x72d4705f00000000, 0x8060b87600000000, + 0x11f1d0d800000000, 0x6409292500000000, 0xf598418b00000000, + 0x072c89a200000000, 0x96bde10c00000000, 0xacda0b8200000000, + 0x3d4b632c00000000, 0xcfffab0500000000, 0x5e6ec3ab00000000, + 0x2b963a5600000000, 0xba0752f800000000, 0x48b39ad100000000, + 0xd922f27f00000000, 0xfaf67e2e00000000, 0x6b67168000000000, + 0x99d3dea900000000, 0x0842b60700000000, 0x7dba4ffa00000000, + 0xec2b275400000000, 0x1e9fef7d00000000, 0x8f0e87d300000000, + 0xb5696d5d00000000, 0x24f805f300000000, 0xd64ccdda00000000, + 0x47dda57400000000, 0x32255c8900000000, 0xa3b4342700000000, + 0x5100fc0e00000000, 0xc09194a000000000, 0x64c859c800000000, + 0xf559316600000000, 0x07edf94f00000000, 0x967c91e100000000, + 0xe384681c00000000, 0x721500b200000000, 0x80a1c89b00000000, + 0x1130a03500000000, 0x2b574abb00000000, 0xbac6221500000000, + 0x4872ea3c00000000, 0xd9e3829200000000, 0xac1b7b6f00000000, + 0x3d8a13c100000000, 0xcf3edbe800000000, 0x5eafb34600000000, + 0x878d413900000000, 0x161c299700000000, 0xe4a8e1be00000000, + 0x7539891000000000, 0x00c170ed00000000, 0x9150184300000000, + 0x63e4d06a00000000, 0xf275b8c400000000, 0xc812524a00000000, + 0x59833ae400000000, 0xab37f2cd00000000, 0x3aa69a6300000000, + 0x4f5e639e00000000, 0xdecf0b3000000000, 0x2c7bc31900000000, + 0xbdeaabb700000000, 0x19b366df00000000, 0x88220e7100000000, + 0x7a96c65800000000, 0xeb07aef600000000, 0x9eff570b00000000, + 0x0f6e3fa500000000, 0xfddaf78c00000000, 0x6c4b9f2200000000, + 0x562c75ac00000000, 0xc7bd1d0200000000, 0x3509d52b00000000, + 0xa498bd8500000000, 0xd160447800000000, 0x40f12cd600000000, + 0xb245e4ff00000000, 0x23d48c5100000000, 0xf4edfd5c00000000, + 0x657c95f200000000, 0x97c85ddb00000000, 0x0659357500000000, + 0x73a1cc8800000000, 0xe230a42600000000, 0x10846c0f00000000, + 0x811504a100000000, 0xbb72ee2f00000000, 0x2ae3868100000000, + 0xd8574ea800000000, 0x49c6260600000000, 0x3c3edffb00000000, + 0xadafb75500000000, 0x5f1b7f7c00000000, 0xce8a17d200000000, + 0x6ad3daba00000000, 0xfb42b21400000000, 0x09f67a3d00000000, + 0x9867129300000000, 0xed9feb6e00000000, 0x7c0e83c000000000, + 0x8eba4be900000000, 0x1f2b234700000000, 0x254cc9c900000000, + 0xb4dda16700000000, 0x4669694e00000000, 0xd7f801e000000000, + 0xa200f81d00000000, 0x339190b300000000, 0xc125589a00000000, + 0x50b4303400000000, 0x8996c24b00000000, 0x1807aae500000000, + 0xeab362cc00000000, 0x7b220a6200000000, 0x0edaf39f00000000, + 0x9f4b9b3100000000, 0x6dff531800000000, 0xfc6e3bb600000000, + 0xc609d13800000000, 0x5798b99600000000, 0xa52c71bf00000000, + 0x34bd191100000000, 0x4145e0ec00000000, 0xd0d4884200000000, + 0x2260406b00000000, 0xb3f128c500000000, 0x17a8e5ad00000000, + 0x86398d0300000000, 0x748d452a00000000, 0xe51c2d8400000000, + 0x90e4d47900000000, 0x0175bcd700000000, 0xf3c174fe00000000, + 0x62501c5000000000, 0x5837f6de00000000, 0xc9a69e7000000000, + 0x3b12565900000000, 0xaa833ef700000000, 0xdf7bc70a00000000, + 0x4eeaafa400000000, 0xbc5e678d00000000, 0x2dcf0f2300000000, + 0x0e1b837200000000, 0x9f8aebdc00000000, 0x6d3e23f500000000, + 0xfcaf4b5b00000000, 0x8957b2a600000000, 0x18c6da0800000000, + 0xea72122100000000, 0x7be37a8f00000000, 0x4184900100000000, + 0xd015f8af00000000, 0x22a1308600000000, 0xb330582800000000, + 0xc6c8a1d500000000, 0x5759c97b00000000, 0xa5ed015200000000, + 0x347c69fc00000000, 0x9025a49400000000, 0x01b4cc3a00000000, + 0xf300041300000000, 0x62916cbd00000000, 0x1769954000000000, + 0x86f8fdee00000000, 0x744c35c700000000, 0xe5dd5d6900000000, + 0xdfbab7e700000000, 0x4e2bdf4900000000, 0xbc9f176000000000, + 0x2d0e7fce00000000, 0x58f6863300000000, 0xc967ee9d00000000, + 0x3bd326b400000000, 0xaa424e1a00000000, 0x7360bc6500000000, + 0xe2f1d4cb00000000, 0x10451ce200000000, 0x81d4744c00000000, + 0xf42c8db100000000, 0x65bde51f00000000, 0x97092d3600000000, + 0x0698459800000000, 0x3cffaf1600000000, 0xad6ec7b800000000, + 0x5fda0f9100000000, 0xce4b673f00000000, 0xbbb39ec200000000, + 0x2a22f66c00000000, 0xd8963e4500000000, 0x490756eb00000000, + 0xed5e9b8300000000, 0x7ccff32d00000000, 0x8e7b3b0400000000, + 0x1fea53aa00000000, 0x6a12aa5700000000, 0xfb83c2f900000000, + 0x09370ad000000000, 0x98a6627e00000000, 0xa2c188f000000000, + 0x3350e05e00000000, 0xc1e4287700000000, 0x507540d900000000, + 0x258db92400000000, 0xb41cd18a00000000, 0x46a819a300000000, + 0xd739710d00000000}}; + +#else /* W == 4 */ + +local const z_crc_t FAR crc_braid_table[][256] = { + {0x00000000, 0xccaa009e, 0x4225077d, 0x8e8f07e3, 0x844a0efa, + 0x48e00e64, 0xc66f0987, 0x0ac50919, 0xd3e51bb5, 0x1f4f1b2b, + 0x91c01cc8, 0x5d6a1c56, 0x57af154f, 0x9b0515d1, 0x158a1232, + 0xd92012ac, 0x7cbb312b, 0xb01131b5, 0x3e9e3656, 0xf23436c8, + 0xf8f13fd1, 0x345b3f4f, 0xbad438ac, 0x767e3832, 0xaf5e2a9e, + 0x63f42a00, 0xed7b2de3, 0x21d12d7d, 0x2b142464, 0xe7be24fa, + 0x69312319, 0xa59b2387, 0xf9766256, 0x35dc62c8, 0xbb53652b, + 0x77f965b5, 0x7d3c6cac, 0xb1966c32, 0x3f196bd1, 0xf3b36b4f, + 0x2a9379e3, 0xe639797d, 0x68b67e9e, 0xa41c7e00, 0xaed97719, + 0x62737787, 0xecfc7064, 0x205670fa, 0x85cd537d, 0x496753e3, + 0xc7e85400, 0x0b42549e, 0x01875d87, 0xcd2d5d19, 0x43a25afa, + 0x8f085a64, 0x562848c8, 0x9a824856, 0x140d4fb5, 0xd8a74f2b, + 0xd2624632, 0x1ec846ac, 0x9047414f, 0x5ced41d1, 0x299dc2ed, + 0xe537c273, 0x6bb8c590, 0xa712c50e, 0xadd7cc17, 0x617dcc89, + 0xeff2cb6a, 0x2358cbf4, 0xfa78d958, 0x36d2d9c6, 0xb85dde25, + 0x74f7debb, 0x7e32d7a2, 0xb298d73c, 0x3c17d0df, 0xf0bdd041, + 0x5526f3c6, 0x998cf358, 0x1703f4bb, 0xdba9f425, 0xd16cfd3c, + 0x1dc6fda2, 0x9349fa41, 0x5fe3fadf, 0x86c3e873, 0x4a69e8ed, + 0xc4e6ef0e, 0x084cef90, 0x0289e689, 0xce23e617, 0x40ace1f4, + 0x8c06e16a, 0xd0eba0bb, 0x1c41a025, 0x92cea7c6, 0x5e64a758, + 0x54a1ae41, 0x980baedf, 0x1684a93c, 0xda2ea9a2, 0x030ebb0e, + 0xcfa4bb90, 0x412bbc73, 0x8d81bced, 0x8744b5f4, 0x4beeb56a, + 0xc561b289, 0x09cbb217, 0xac509190, 0x60fa910e, 0xee7596ed, + 0x22df9673, 0x281a9f6a, 0xe4b09ff4, 0x6a3f9817, 0xa6959889, + 0x7fb58a25, 0xb31f8abb, 0x3d908d58, 0xf13a8dc6, 0xfbff84df, + 0x37558441, 0xb9da83a2, 0x7570833c, 0x533b85da, 0x9f918544, + 0x111e82a7, 0xddb48239, 0xd7718b20, 0x1bdb8bbe, 0x95548c5d, + 0x59fe8cc3, 0x80de9e6f, 0x4c749ef1, 0xc2fb9912, 0x0e51998c, + 0x04949095, 0xc83e900b, 0x46b197e8, 0x8a1b9776, 0x2f80b4f1, + 0xe32ab46f, 0x6da5b38c, 0xa10fb312, 0xabcaba0b, 0x6760ba95, + 0xe9efbd76, 0x2545bde8, 0xfc65af44, 0x30cfafda, 0xbe40a839, + 0x72eaa8a7, 0x782fa1be, 0xb485a120, 0x3a0aa6c3, 0xf6a0a65d, + 0xaa4de78c, 0x66e7e712, 0xe868e0f1, 0x24c2e06f, 0x2e07e976, + 0xe2ade9e8, 0x6c22ee0b, 0xa088ee95, 0x79a8fc39, 0xb502fca7, + 0x3b8dfb44, 0xf727fbda, 0xfde2f2c3, 0x3148f25d, 0xbfc7f5be, + 0x736df520, 0xd6f6d6a7, 0x1a5cd639, 0x94d3d1da, 0x5879d144, + 0x52bcd85d, 0x9e16d8c3, 0x1099df20, 0xdc33dfbe, 0x0513cd12, + 0xc9b9cd8c, 0x4736ca6f, 0x8b9ccaf1, 0x8159c3e8, 0x4df3c376, + 0xc37cc495, 0x0fd6c40b, 0x7aa64737, 0xb60c47a9, 0x3883404a, + 0xf42940d4, 0xfeec49cd, 0x32464953, 0xbcc94eb0, 0x70634e2e, + 0xa9435c82, 0x65e95c1c, 0xeb665bff, 0x27cc5b61, 0x2d095278, + 0xe1a352e6, 0x6f2c5505, 0xa386559b, 0x061d761c, 0xcab77682, + 0x44387161, 0x889271ff, 0x825778e6, 0x4efd7878, 0xc0727f9b, + 0x0cd87f05, 0xd5f86da9, 0x19526d37, 0x97dd6ad4, 0x5b776a4a, + 0x51b26353, 0x9d1863cd, 0x1397642e, 0xdf3d64b0, 0x83d02561, + 0x4f7a25ff, 0xc1f5221c, 0x0d5f2282, 0x079a2b9b, 0xcb302b05, + 0x45bf2ce6, 0x89152c78, 0x50353ed4, 0x9c9f3e4a, 0x121039a9, + 0xdeba3937, 0xd47f302e, 0x18d530b0, 0x965a3753, 0x5af037cd, + 0xff6b144a, 0x33c114d4, 0xbd4e1337, 0x71e413a9, 0x7b211ab0, + 0xb78b1a2e, 0x39041dcd, 0xf5ae1d53, 0x2c8e0fff, 0xe0240f61, + 0x6eab0882, 0xa201081c, 0xa8c40105, 0x646e019b, 0xeae10678, + 0x264b06e6}, + {0x00000000, 0xa6770bb4, 0x979f1129, 0x31e81a9d, 0xf44f2413, + 0x52382fa7, 0x63d0353a, 0xc5a73e8e, 0x33ef4e67, 0x959845d3, + 0xa4705f4e, 0x020754fa, 0xc7a06a74, 0x61d761c0, 0x503f7b5d, + 0xf64870e9, 0x67de9cce, 0xc1a9977a, 0xf0418de7, 0x56368653, + 0x9391b8dd, 0x35e6b369, 0x040ea9f4, 0xa279a240, 0x5431d2a9, + 0xf246d91d, 0xc3aec380, 0x65d9c834, 0xa07ef6ba, 0x0609fd0e, + 0x37e1e793, 0x9196ec27, 0xcfbd399c, 0x69ca3228, 0x582228b5, + 0xfe552301, 0x3bf21d8f, 0x9d85163b, 0xac6d0ca6, 0x0a1a0712, + 0xfc5277fb, 0x5a257c4f, 0x6bcd66d2, 0xcdba6d66, 0x081d53e8, + 0xae6a585c, 0x9f8242c1, 0x39f54975, 0xa863a552, 0x0e14aee6, + 0x3ffcb47b, 0x998bbfcf, 0x5c2c8141, 0xfa5b8af5, 0xcbb39068, + 0x6dc49bdc, 0x9b8ceb35, 0x3dfbe081, 0x0c13fa1c, 0xaa64f1a8, + 0x6fc3cf26, 0xc9b4c492, 0xf85cde0f, 0x5e2bd5bb, 0x440b7579, + 0xe27c7ecd, 0xd3946450, 0x75e36fe4, 0xb044516a, 0x16335ade, + 0x27db4043, 0x81ac4bf7, 0x77e43b1e, 0xd19330aa, 0xe07b2a37, + 0x460c2183, 0x83ab1f0d, 0x25dc14b9, 0x14340e24, 0xb2430590, + 0x23d5e9b7, 0x85a2e203, 0xb44af89e, 0x123df32a, 0xd79acda4, + 0x71edc610, 0x4005dc8d, 0xe672d739, 0x103aa7d0, 0xb64dac64, + 0x87a5b6f9, 0x21d2bd4d, 0xe47583c3, 0x42028877, 0x73ea92ea, + 0xd59d995e, 0x8bb64ce5, 0x2dc14751, 0x1c295dcc, 0xba5e5678, + 0x7ff968f6, 0xd98e6342, 0xe86679df, 0x4e11726b, 0xb8590282, + 0x1e2e0936, 0x2fc613ab, 0x89b1181f, 0x4c162691, 0xea612d25, + 0xdb8937b8, 0x7dfe3c0c, 0xec68d02b, 0x4a1fdb9f, 0x7bf7c102, + 0xdd80cab6, 0x1827f438, 0xbe50ff8c, 0x8fb8e511, 0x29cfeea5, + 0xdf879e4c, 0x79f095f8, 0x48188f65, 0xee6f84d1, 0x2bc8ba5f, + 0x8dbfb1eb, 0xbc57ab76, 0x1a20a0c2, 0x8816eaf2, 0x2e61e146, + 0x1f89fbdb, 0xb9fef06f, 0x7c59cee1, 0xda2ec555, 0xebc6dfc8, + 0x4db1d47c, 0xbbf9a495, 0x1d8eaf21, 0x2c66b5bc, 0x8a11be08, + 0x4fb68086, 0xe9c18b32, 0xd82991af, 0x7e5e9a1b, 0xefc8763c, + 0x49bf7d88, 0x78576715, 0xde206ca1, 0x1b87522f, 0xbdf0599b, + 0x8c184306, 0x2a6f48b2, 0xdc27385b, 0x7a5033ef, 0x4bb82972, + 0xedcf22c6, 0x28681c48, 0x8e1f17fc, 0xbff70d61, 0x198006d5, + 0x47abd36e, 0xe1dcd8da, 0xd034c247, 0x7643c9f3, 0xb3e4f77d, + 0x1593fcc9, 0x247be654, 0x820cede0, 0x74449d09, 0xd23396bd, + 0xe3db8c20, 0x45ac8794, 0x800bb91a, 0x267cb2ae, 0x1794a833, + 0xb1e3a387, 0x20754fa0, 0x86024414, 0xb7ea5e89, 0x119d553d, + 0xd43a6bb3, 0x724d6007, 0x43a57a9a, 0xe5d2712e, 0x139a01c7, + 0xb5ed0a73, 0x840510ee, 0x22721b5a, 0xe7d525d4, 0x41a22e60, + 0x704a34fd, 0xd63d3f49, 0xcc1d9f8b, 0x6a6a943f, 0x5b828ea2, + 0xfdf58516, 0x3852bb98, 0x9e25b02c, 0xafcdaab1, 0x09baa105, + 0xfff2d1ec, 0x5985da58, 0x686dc0c5, 0xce1acb71, 0x0bbdf5ff, + 0xadcafe4b, 0x9c22e4d6, 0x3a55ef62, 0xabc30345, 0x0db408f1, + 0x3c5c126c, 0x9a2b19d8, 0x5f8c2756, 0xf9fb2ce2, 0xc813367f, + 0x6e643dcb, 0x982c4d22, 0x3e5b4696, 0x0fb35c0b, 0xa9c457bf, + 0x6c636931, 0xca146285, 0xfbfc7818, 0x5d8b73ac, 0x03a0a617, + 0xa5d7ada3, 0x943fb73e, 0x3248bc8a, 0xf7ef8204, 0x519889b0, + 0x6070932d, 0xc6079899, 0x304fe870, 0x9638e3c4, 0xa7d0f959, + 0x01a7f2ed, 0xc400cc63, 0x6277c7d7, 0x539fdd4a, 0xf5e8d6fe, + 0x647e3ad9, 0xc209316d, 0xf3e12bf0, 0x55962044, 0x90311eca, + 0x3646157e, 0x07ae0fe3, 0xa1d90457, 0x579174be, 0xf1e67f0a, + 0xc00e6597, 0x66796e23, 0xa3de50ad, 0x05a95b19, 0x34414184, + 0x92364a30}, + {0x00000000, 0xcb5cd3a5, 0x4dc8a10b, 0x869472ae, 0x9b914216, + 0x50cd91b3, 0xd659e31d, 0x1d0530b8, 0xec53826d, 0x270f51c8, + 0xa19b2366, 0x6ac7f0c3, 0x77c2c07b, 0xbc9e13de, 0x3a0a6170, + 0xf156b2d5, 0x03d6029b, 0xc88ad13e, 0x4e1ea390, 0x85427035, + 0x9847408d, 0x531b9328, 0xd58fe186, 0x1ed33223, 0xef8580f6, + 0x24d95353, 0xa24d21fd, 0x6911f258, 0x7414c2e0, 0xbf481145, + 0x39dc63eb, 0xf280b04e, 0x07ac0536, 0xccf0d693, 0x4a64a43d, + 0x81387798, 0x9c3d4720, 0x57619485, 0xd1f5e62b, 0x1aa9358e, + 0xebff875b, 0x20a354fe, 0xa6372650, 0x6d6bf5f5, 0x706ec54d, + 0xbb3216e8, 0x3da66446, 0xf6fab7e3, 0x047a07ad, 0xcf26d408, + 0x49b2a6a6, 0x82ee7503, 0x9feb45bb, 0x54b7961e, 0xd223e4b0, + 0x197f3715, 0xe82985c0, 0x23755665, 0xa5e124cb, 0x6ebdf76e, + 0x73b8c7d6, 0xb8e41473, 0x3e7066dd, 0xf52cb578, 0x0f580a6c, + 0xc404d9c9, 0x4290ab67, 0x89cc78c2, 0x94c9487a, 0x5f959bdf, + 0xd901e971, 0x125d3ad4, 0xe30b8801, 0x28575ba4, 0xaec3290a, + 0x659ffaaf, 0x789aca17, 0xb3c619b2, 0x35526b1c, 0xfe0eb8b9, + 0x0c8e08f7, 0xc7d2db52, 0x4146a9fc, 0x8a1a7a59, 0x971f4ae1, + 0x5c439944, 0xdad7ebea, 0x118b384f, 0xe0dd8a9a, 0x2b81593f, + 0xad152b91, 0x6649f834, 0x7b4cc88c, 0xb0101b29, 0x36846987, + 0xfdd8ba22, 0x08f40f5a, 0xc3a8dcff, 0x453cae51, 0x8e607df4, + 0x93654d4c, 0x58399ee9, 0xdeadec47, 0x15f13fe2, 0xe4a78d37, + 0x2ffb5e92, 0xa96f2c3c, 0x6233ff99, 0x7f36cf21, 0xb46a1c84, + 0x32fe6e2a, 0xf9a2bd8f, 0x0b220dc1, 0xc07ede64, 0x46eaacca, + 0x8db67f6f, 0x90b34fd7, 0x5bef9c72, 0xdd7beedc, 0x16273d79, + 0xe7718fac, 0x2c2d5c09, 0xaab92ea7, 0x61e5fd02, 0x7ce0cdba, + 0xb7bc1e1f, 0x31286cb1, 0xfa74bf14, 0x1eb014d8, 0xd5ecc77d, + 0x5378b5d3, 0x98246676, 0x852156ce, 0x4e7d856b, 0xc8e9f7c5, + 0x03b52460, 0xf2e396b5, 0x39bf4510, 0xbf2b37be, 0x7477e41b, + 0x6972d4a3, 0xa22e0706, 0x24ba75a8, 0xefe6a60d, 0x1d661643, + 0xd63ac5e6, 0x50aeb748, 0x9bf264ed, 0x86f75455, 0x4dab87f0, + 0xcb3ff55e, 0x006326fb, 0xf135942e, 0x3a69478b, 0xbcfd3525, + 0x77a1e680, 0x6aa4d638, 0xa1f8059d, 0x276c7733, 0xec30a496, + 0x191c11ee, 0xd240c24b, 0x54d4b0e5, 0x9f886340, 0x828d53f8, + 0x49d1805d, 0xcf45f2f3, 0x04192156, 0xf54f9383, 0x3e134026, + 0xb8873288, 0x73dbe12d, 0x6eded195, 0xa5820230, 0x2316709e, + 0xe84aa33b, 0x1aca1375, 0xd196c0d0, 0x5702b27e, 0x9c5e61db, + 0x815b5163, 0x4a0782c6, 0xcc93f068, 0x07cf23cd, 0xf6999118, + 0x3dc542bd, 0xbb513013, 0x700de3b6, 0x6d08d30e, 0xa65400ab, + 0x20c07205, 0xeb9ca1a0, 0x11e81eb4, 0xdab4cd11, 0x5c20bfbf, + 0x977c6c1a, 0x8a795ca2, 0x41258f07, 0xc7b1fda9, 0x0ced2e0c, + 0xfdbb9cd9, 0x36e74f7c, 0xb0733dd2, 0x7b2fee77, 0x662adecf, + 0xad760d6a, 0x2be27fc4, 0xe0beac61, 0x123e1c2f, 0xd962cf8a, + 0x5ff6bd24, 0x94aa6e81, 0x89af5e39, 0x42f38d9c, 0xc467ff32, + 0x0f3b2c97, 0xfe6d9e42, 0x35314de7, 0xb3a53f49, 0x78f9ecec, + 0x65fcdc54, 0xaea00ff1, 0x28347d5f, 0xe368aefa, 0x16441b82, + 0xdd18c827, 0x5b8cba89, 0x90d0692c, 0x8dd55994, 0x46898a31, + 0xc01df89f, 0x0b412b3a, 0xfa1799ef, 0x314b4a4a, 0xb7df38e4, + 0x7c83eb41, 0x6186dbf9, 0xaada085c, 0x2c4e7af2, 0xe712a957, + 0x15921919, 0xdececabc, 0x585ab812, 0x93066bb7, 0x8e035b0f, + 0x455f88aa, 0xc3cbfa04, 0x089729a1, 0xf9c19b74, 0x329d48d1, + 0xb4093a7f, 0x7f55e9da, 0x6250d962, 0xa90c0ac7, 0x2f987869, + 0xe4c4abcc}, + {0x00000000, 0x3d6029b0, 0x7ac05360, 0x47a07ad0, 0xf580a6c0, + 0xc8e08f70, 0x8f40f5a0, 0xb220dc10, 0x30704bc1, 0x0d106271, + 0x4ab018a1, 0x77d03111, 0xc5f0ed01, 0xf890c4b1, 0xbf30be61, + 0x825097d1, 0x60e09782, 0x5d80be32, 0x1a20c4e2, 0x2740ed52, + 0x95603142, 0xa80018f2, 0xefa06222, 0xd2c04b92, 0x5090dc43, + 0x6df0f5f3, 0x2a508f23, 0x1730a693, 0xa5107a83, 0x98705333, + 0xdfd029e3, 0xe2b00053, 0xc1c12f04, 0xfca106b4, 0xbb017c64, + 0x866155d4, 0x344189c4, 0x0921a074, 0x4e81daa4, 0x73e1f314, + 0xf1b164c5, 0xccd14d75, 0x8b7137a5, 0xb6111e15, 0x0431c205, + 0x3951ebb5, 0x7ef19165, 0x4391b8d5, 0xa121b886, 0x9c419136, + 0xdbe1ebe6, 0xe681c256, 0x54a11e46, 0x69c137f6, 0x2e614d26, + 0x13016496, 0x9151f347, 0xac31daf7, 0xeb91a027, 0xd6f18997, + 0x64d15587, 0x59b17c37, 0x1e1106e7, 0x23712f57, 0x58f35849, + 0x659371f9, 0x22330b29, 0x1f532299, 0xad73fe89, 0x9013d739, + 0xd7b3ade9, 0xead38459, 0x68831388, 0x55e33a38, 0x124340e8, + 0x2f236958, 0x9d03b548, 0xa0639cf8, 0xe7c3e628, 0xdaa3cf98, + 0x3813cfcb, 0x0573e67b, 0x42d39cab, 0x7fb3b51b, 0xcd93690b, + 0xf0f340bb, 0xb7533a6b, 0x8a3313db, 0x0863840a, 0x3503adba, + 0x72a3d76a, 0x4fc3feda, 0xfde322ca, 0xc0830b7a, 0x872371aa, + 0xba43581a, 0x9932774d, 0xa4525efd, 0xe3f2242d, 0xde920d9d, + 0x6cb2d18d, 0x51d2f83d, 0x167282ed, 0x2b12ab5d, 0xa9423c8c, + 0x9422153c, 0xd3826fec, 0xeee2465c, 0x5cc29a4c, 0x61a2b3fc, + 0x2602c92c, 0x1b62e09c, 0xf9d2e0cf, 0xc4b2c97f, 0x8312b3af, + 0xbe729a1f, 0x0c52460f, 0x31326fbf, 0x7692156f, 0x4bf23cdf, + 0xc9a2ab0e, 0xf4c282be, 0xb362f86e, 0x8e02d1de, 0x3c220dce, + 0x0142247e, 0x46e25eae, 0x7b82771e, 0xb1e6b092, 0x8c869922, + 0xcb26e3f2, 0xf646ca42, 0x44661652, 0x79063fe2, 0x3ea64532, + 0x03c66c82, 0x8196fb53, 0xbcf6d2e3, 0xfb56a833, 0xc6368183, + 0x74165d93, 0x49767423, 0x0ed60ef3, 0x33b62743, 0xd1062710, + 0xec660ea0, 0xabc67470, 0x96a65dc0, 0x248681d0, 0x19e6a860, + 0x5e46d2b0, 0x6326fb00, 0xe1766cd1, 0xdc164561, 0x9bb63fb1, + 0xa6d61601, 0x14f6ca11, 0x2996e3a1, 0x6e369971, 0x5356b0c1, + 0x70279f96, 0x4d47b626, 0x0ae7ccf6, 0x3787e546, 0x85a73956, + 0xb8c710e6, 0xff676a36, 0xc2074386, 0x4057d457, 0x7d37fde7, + 0x3a978737, 0x07f7ae87, 0xb5d77297, 0x88b75b27, 0xcf1721f7, + 0xf2770847, 0x10c70814, 0x2da721a4, 0x6a075b74, 0x576772c4, + 0xe547aed4, 0xd8278764, 0x9f87fdb4, 0xa2e7d404, 0x20b743d5, + 0x1dd76a65, 0x5a7710b5, 0x67173905, 0xd537e515, 0xe857cca5, + 0xaff7b675, 0x92979fc5, 0xe915e8db, 0xd475c16b, 0x93d5bbbb, + 0xaeb5920b, 0x1c954e1b, 0x21f567ab, 0x66551d7b, 0x5b3534cb, + 0xd965a31a, 0xe4058aaa, 0xa3a5f07a, 0x9ec5d9ca, 0x2ce505da, + 0x11852c6a, 0x562556ba, 0x6b457f0a, 0x89f57f59, 0xb49556e9, + 0xf3352c39, 0xce550589, 0x7c75d999, 0x4115f029, 0x06b58af9, + 0x3bd5a349, 0xb9853498, 0x84e51d28, 0xc34567f8, 0xfe254e48, + 0x4c059258, 0x7165bbe8, 0x36c5c138, 0x0ba5e888, 0x28d4c7df, + 0x15b4ee6f, 0x521494bf, 0x6f74bd0f, 0xdd54611f, 0xe03448af, + 0xa794327f, 0x9af41bcf, 0x18a48c1e, 0x25c4a5ae, 0x6264df7e, + 0x5f04f6ce, 0xed242ade, 0xd044036e, 0x97e479be, 0xaa84500e, + 0x4834505d, 0x755479ed, 0x32f4033d, 0x0f942a8d, 0xbdb4f69d, + 0x80d4df2d, 0xc774a5fd, 0xfa148c4d, 0x78441b9c, 0x4524322c, + 0x028448fc, 0x3fe4614c, 0x8dc4bd5c, 0xb0a494ec, 0xf704ee3c, + 0xca64c78c}}; + +local const z_word_t FAR crc_braid_big_table[][256] = { + {0x00000000, 0xb029603d, 0x6053c07a, 0xd07aa047, 0xc0a680f5, + 0x708fe0c8, 0xa0f5408f, 0x10dc20b2, 0xc14b7030, 0x7162100d, + 0xa118b04a, 0x1131d077, 0x01edf0c5, 0xb1c490f8, 0x61be30bf, + 0xd1975082, 0x8297e060, 0x32be805d, 0xe2c4201a, 0x52ed4027, + 0x42316095, 0xf21800a8, 0x2262a0ef, 0x924bc0d2, 0x43dc9050, + 0xf3f5f06d, 0x238f502a, 0x93a63017, 0x837a10a5, 0x33537098, + 0xe329d0df, 0x5300b0e2, 0x042fc1c1, 0xb406a1fc, 0x647c01bb, + 0xd4556186, 0xc4894134, 0x74a02109, 0xa4da814e, 0x14f3e173, + 0xc564b1f1, 0x754dd1cc, 0xa537718b, 0x151e11b6, 0x05c23104, + 0xb5eb5139, 0x6591f17e, 0xd5b89143, 0x86b821a1, 0x3691419c, + 0xe6ebe1db, 0x56c281e6, 0x461ea154, 0xf637c169, 0x264d612e, + 0x96640113, 0x47f35191, 0xf7da31ac, 0x27a091eb, 0x9789f1d6, + 0x8755d164, 0x377cb159, 0xe706111e, 0x572f7123, 0x4958f358, + 0xf9719365, 0x290b3322, 0x9922531f, 0x89fe73ad, 0x39d71390, + 0xe9adb3d7, 0x5984d3ea, 0x88138368, 0x383ae355, 0xe8404312, + 0x5869232f, 0x48b5039d, 0xf89c63a0, 0x28e6c3e7, 0x98cfa3da, + 0xcbcf1338, 0x7be67305, 0xab9cd342, 0x1bb5b37f, 0x0b6993cd, + 0xbb40f3f0, 0x6b3a53b7, 0xdb13338a, 0x0a846308, 0xbaad0335, + 0x6ad7a372, 0xdafec34f, 0xca22e3fd, 0x7a0b83c0, 0xaa712387, + 0x1a5843ba, 0x4d773299, 0xfd5e52a4, 0x2d24f2e3, 0x9d0d92de, + 0x8dd1b26c, 0x3df8d251, 0xed827216, 0x5dab122b, 0x8c3c42a9, + 0x3c152294, 0xec6f82d3, 0x5c46e2ee, 0x4c9ac25c, 0xfcb3a261, + 0x2cc90226, 0x9ce0621b, 0xcfe0d2f9, 0x7fc9b2c4, 0xafb31283, + 0x1f9a72be, 0x0f46520c, 0xbf6f3231, 0x6f159276, 0xdf3cf24b, + 0x0eaba2c9, 0xbe82c2f4, 0x6ef862b3, 0xded1028e, 0xce0d223c, + 0x7e244201, 0xae5ee246, 0x1e77827b, 0x92b0e6b1, 0x2299868c, + 0xf2e326cb, 0x42ca46f6, 0x52166644, 0xe23f0679, 0x3245a63e, + 0x826cc603, 0x53fb9681, 0xe3d2f6bc, 0x33a856fb, 0x838136c6, + 0x935d1674, 0x23747649, 0xf30ed60e, 0x4327b633, 0x102706d1, + 0xa00e66ec, 0x7074c6ab, 0xc05da696, 0xd0818624, 0x60a8e619, + 0xb0d2465e, 0x00fb2663, 0xd16c76e1, 0x614516dc, 0xb13fb69b, + 0x0116d6a6, 0x11caf614, 0xa1e39629, 0x7199366e, 0xc1b05653, + 0x969f2770, 0x26b6474d, 0xf6cce70a, 0x46e58737, 0x5639a785, + 0xe610c7b8, 0x366a67ff, 0x864307c2, 0x57d45740, 0xe7fd377d, + 0x3787973a, 0x87aef707, 0x9772d7b5, 0x275bb788, 0xf72117cf, + 0x470877f2, 0x1408c710, 0xa421a72d, 0x745b076a, 0xc4726757, + 0xd4ae47e5, 0x648727d8, 0xb4fd879f, 0x04d4e7a2, 0xd543b720, + 0x656ad71d, 0xb510775a, 0x05391767, 0x15e537d5, 0xa5cc57e8, + 0x75b6f7af, 0xc59f9792, 0xdbe815e9, 0x6bc175d4, 0xbbbbd593, + 0x0b92b5ae, 0x1b4e951c, 0xab67f521, 0x7b1d5566, 0xcb34355b, + 0x1aa365d9, 0xaa8a05e4, 0x7af0a5a3, 0xcad9c59e, 0xda05e52c, + 0x6a2c8511, 0xba562556, 0x0a7f456b, 0x597ff589, 0xe95695b4, + 0x392c35f3, 0x890555ce, 0x99d9757c, 0x29f01541, 0xf98ab506, + 0x49a3d53b, 0x983485b9, 0x281de584, 0xf86745c3, 0x484e25fe, + 0x5892054c, 0xe8bb6571, 0x38c1c536, 0x88e8a50b, 0xdfc7d428, + 0x6feeb415, 0xbf941452, 0x0fbd746f, 0x1f6154dd, 0xaf4834e0, + 0x7f3294a7, 0xcf1bf49a, 0x1e8ca418, 0xaea5c425, 0x7edf6462, + 0xcef6045f, 0xde2a24ed, 0x6e0344d0, 0xbe79e497, 0x0e5084aa, + 0x5d503448, 0xed795475, 0x3d03f432, 0x8d2a940f, 0x9df6b4bd, + 0x2ddfd480, 0xfda574c7, 0x4d8c14fa, 0x9c1b4478, 0x2c322445, + 0xfc488402, 0x4c61e43f, 0x5cbdc48d, 0xec94a4b0, 0x3cee04f7, + 0x8cc764ca}, + {0x00000000, 0xa5d35ccb, 0x0ba1c84d, 0xae729486, 0x1642919b, + 0xb391cd50, 0x1de359d6, 0xb830051d, 0x6d8253ec, 0xc8510f27, + 0x66239ba1, 0xc3f0c76a, 0x7bc0c277, 0xde139ebc, 0x70610a3a, + 0xd5b256f1, 0x9b02d603, 0x3ed18ac8, 0x90a31e4e, 0x35704285, + 0x8d404798, 0x28931b53, 0x86e18fd5, 0x2332d31e, 0xf68085ef, + 0x5353d924, 0xfd214da2, 0x58f21169, 0xe0c21474, 0x451148bf, + 0xeb63dc39, 0x4eb080f2, 0x3605ac07, 0x93d6f0cc, 0x3da4644a, + 0x98773881, 0x20473d9c, 0x85946157, 0x2be6f5d1, 0x8e35a91a, + 0x5b87ffeb, 0xfe54a320, 0x502637a6, 0xf5f56b6d, 0x4dc56e70, + 0xe81632bb, 0x4664a63d, 0xe3b7faf6, 0xad077a04, 0x08d426cf, + 0xa6a6b249, 0x0375ee82, 0xbb45eb9f, 0x1e96b754, 0xb0e423d2, + 0x15377f19, 0xc08529e8, 0x65567523, 0xcb24e1a5, 0x6ef7bd6e, + 0xd6c7b873, 0x7314e4b8, 0xdd66703e, 0x78b52cf5, 0x6c0a580f, + 0xc9d904c4, 0x67ab9042, 0xc278cc89, 0x7a48c994, 0xdf9b955f, + 0x71e901d9, 0xd43a5d12, 0x01880be3, 0xa45b5728, 0x0a29c3ae, + 0xaffa9f65, 0x17ca9a78, 0xb219c6b3, 0x1c6b5235, 0xb9b80efe, + 0xf7088e0c, 0x52dbd2c7, 0xfca94641, 0x597a1a8a, 0xe14a1f97, + 0x4499435c, 0xeaebd7da, 0x4f388b11, 0x9a8adde0, 0x3f59812b, + 0x912b15ad, 0x34f84966, 0x8cc84c7b, 0x291b10b0, 0x87698436, + 0x22bad8fd, 0x5a0ff408, 0xffdca8c3, 0x51ae3c45, 0xf47d608e, + 0x4c4d6593, 0xe99e3958, 0x47ecadde, 0xe23ff115, 0x378da7e4, + 0x925efb2f, 0x3c2c6fa9, 0x99ff3362, 0x21cf367f, 0x841c6ab4, + 0x2a6efe32, 0x8fbda2f9, 0xc10d220b, 0x64de7ec0, 0xcaacea46, + 0x6f7fb68d, 0xd74fb390, 0x729cef5b, 0xdcee7bdd, 0x793d2716, + 0xac8f71e7, 0x095c2d2c, 0xa72eb9aa, 0x02fde561, 0xbacde07c, + 0x1f1ebcb7, 0xb16c2831, 0x14bf74fa, 0xd814b01e, 0x7dc7ecd5, + 0xd3b57853, 0x76662498, 0xce562185, 0x6b857d4e, 0xc5f7e9c8, + 0x6024b503, 0xb596e3f2, 0x1045bf39, 0xbe372bbf, 0x1be47774, + 0xa3d47269, 0x06072ea2, 0xa875ba24, 0x0da6e6ef, 0x4316661d, + 0xe6c53ad6, 0x48b7ae50, 0xed64f29b, 0x5554f786, 0xf087ab4d, + 0x5ef53fcb, 0xfb266300, 0x2e9435f1, 0x8b47693a, 0x2535fdbc, + 0x80e6a177, 0x38d6a46a, 0x9d05f8a1, 0x33776c27, 0x96a430ec, + 0xee111c19, 0x4bc240d2, 0xe5b0d454, 0x4063889f, 0xf8538d82, + 0x5d80d149, 0xf3f245cf, 0x56211904, 0x83934ff5, 0x2640133e, + 0x883287b8, 0x2de1db73, 0x95d1de6e, 0x300282a5, 0x9e701623, + 0x3ba34ae8, 0x7513ca1a, 0xd0c096d1, 0x7eb20257, 0xdb615e9c, + 0x63515b81, 0xc682074a, 0x68f093cc, 0xcd23cf07, 0x189199f6, + 0xbd42c53d, 0x133051bb, 0xb6e30d70, 0x0ed3086d, 0xab0054a6, + 0x0572c020, 0xa0a19ceb, 0xb41ee811, 0x11cdb4da, 0xbfbf205c, + 0x1a6c7c97, 0xa25c798a, 0x078f2541, 0xa9fdb1c7, 0x0c2eed0c, + 0xd99cbbfd, 0x7c4fe736, 0xd23d73b0, 0x77ee2f7b, 0xcfde2a66, + 0x6a0d76ad, 0xc47fe22b, 0x61acbee0, 0x2f1c3e12, 0x8acf62d9, + 0x24bdf65f, 0x816eaa94, 0x395eaf89, 0x9c8df342, 0x32ff67c4, + 0x972c3b0f, 0x429e6dfe, 0xe74d3135, 0x493fa5b3, 0xececf978, + 0x54dcfc65, 0xf10fa0ae, 0x5f7d3428, 0xfaae68e3, 0x821b4416, + 0x27c818dd, 0x89ba8c5b, 0x2c69d090, 0x9459d58d, 0x318a8946, + 0x9ff81dc0, 0x3a2b410b, 0xef9917fa, 0x4a4a4b31, 0xe438dfb7, + 0x41eb837c, 0xf9db8661, 0x5c08daaa, 0xf27a4e2c, 0x57a912e7, + 0x19199215, 0xbccacede, 0x12b85a58, 0xb76b0693, 0x0f5b038e, + 0xaa885f45, 0x04facbc3, 0xa1299708, 0x749bc1f9, 0xd1489d32, + 0x7f3a09b4, 0xdae9557f, 0x62d95062, 0xc70a0ca9, 0x6978982f, + 0xccabc4e4}, + {0x00000000, 0xb40b77a6, 0x29119f97, 0x9d1ae831, 0x13244ff4, + 0xa72f3852, 0x3a35d063, 0x8e3ea7c5, 0x674eef33, 0xd3459895, + 0x4e5f70a4, 0xfa540702, 0x746aa0c7, 0xc061d761, 0x5d7b3f50, + 0xe97048f6, 0xce9cde67, 0x7a97a9c1, 0xe78d41f0, 0x53863656, + 0xddb89193, 0x69b3e635, 0xf4a90e04, 0x40a279a2, 0xa9d23154, + 0x1dd946f2, 0x80c3aec3, 0x34c8d965, 0xbaf67ea0, 0x0efd0906, + 0x93e7e137, 0x27ec9691, 0x9c39bdcf, 0x2832ca69, 0xb5282258, + 0x012355fe, 0x8f1df23b, 0x3b16859d, 0xa60c6dac, 0x12071a0a, + 0xfb7752fc, 0x4f7c255a, 0xd266cd6b, 0x666dbacd, 0xe8531d08, + 0x5c586aae, 0xc142829f, 0x7549f539, 0x52a563a8, 0xe6ae140e, + 0x7bb4fc3f, 0xcfbf8b99, 0x41812c5c, 0xf58a5bfa, 0x6890b3cb, + 0xdc9bc46d, 0x35eb8c9b, 0x81e0fb3d, 0x1cfa130c, 0xa8f164aa, + 0x26cfc36f, 0x92c4b4c9, 0x0fde5cf8, 0xbbd52b5e, 0x79750b44, + 0xcd7e7ce2, 0x506494d3, 0xe46fe375, 0x6a5144b0, 0xde5a3316, + 0x4340db27, 0xf74bac81, 0x1e3be477, 0xaa3093d1, 0x372a7be0, + 0x83210c46, 0x0d1fab83, 0xb914dc25, 0x240e3414, 0x900543b2, + 0xb7e9d523, 0x03e2a285, 0x9ef84ab4, 0x2af33d12, 0xa4cd9ad7, + 0x10c6ed71, 0x8ddc0540, 0x39d772e6, 0xd0a73a10, 0x64ac4db6, + 0xf9b6a587, 0x4dbdd221, 0xc38375e4, 0x77880242, 0xea92ea73, + 0x5e999dd5, 0xe54cb68b, 0x5147c12d, 0xcc5d291c, 0x78565eba, + 0xf668f97f, 0x42638ed9, 0xdf7966e8, 0x6b72114e, 0x820259b8, + 0x36092e1e, 0xab13c62f, 0x1f18b189, 0x9126164c, 0x252d61ea, + 0xb83789db, 0x0c3cfe7d, 0x2bd068ec, 0x9fdb1f4a, 0x02c1f77b, + 0xb6ca80dd, 0x38f42718, 0x8cff50be, 0x11e5b88f, 0xa5eecf29, + 0x4c9e87df, 0xf895f079, 0x658f1848, 0xd1846fee, 0x5fbac82b, + 0xebb1bf8d, 0x76ab57bc, 0xc2a0201a, 0xf2ea1688, 0x46e1612e, + 0xdbfb891f, 0x6ff0feb9, 0xe1ce597c, 0x55c52eda, 0xc8dfc6eb, + 0x7cd4b14d, 0x95a4f9bb, 0x21af8e1d, 0xbcb5662c, 0x08be118a, + 0x8680b64f, 0x328bc1e9, 0xaf9129d8, 0x1b9a5e7e, 0x3c76c8ef, + 0x887dbf49, 0x15675778, 0xa16c20de, 0x2f52871b, 0x9b59f0bd, + 0x0643188c, 0xb2486f2a, 0x5b3827dc, 0xef33507a, 0x7229b84b, + 0xc622cfed, 0x481c6828, 0xfc171f8e, 0x610df7bf, 0xd5068019, + 0x6ed3ab47, 0xdad8dce1, 0x47c234d0, 0xf3c94376, 0x7df7e4b3, + 0xc9fc9315, 0x54e67b24, 0xe0ed0c82, 0x099d4474, 0xbd9633d2, + 0x208cdbe3, 0x9487ac45, 0x1ab90b80, 0xaeb27c26, 0x33a89417, + 0x87a3e3b1, 0xa04f7520, 0x14440286, 0x895eeab7, 0x3d559d11, + 0xb36b3ad4, 0x07604d72, 0x9a7aa543, 0x2e71d2e5, 0xc7019a13, + 0x730aedb5, 0xee100584, 0x5a1b7222, 0xd425d5e7, 0x602ea241, + 0xfd344a70, 0x493f3dd6, 0x8b9f1dcc, 0x3f946a6a, 0xa28e825b, + 0x1685f5fd, 0x98bb5238, 0x2cb0259e, 0xb1aacdaf, 0x05a1ba09, + 0xecd1f2ff, 0x58da8559, 0xc5c06d68, 0x71cb1ace, 0xfff5bd0b, + 0x4bfecaad, 0xd6e4229c, 0x62ef553a, 0x4503c3ab, 0xf108b40d, + 0x6c125c3c, 0xd8192b9a, 0x56278c5f, 0xe22cfbf9, 0x7f3613c8, + 0xcb3d646e, 0x224d2c98, 0x96465b3e, 0x0b5cb30f, 0xbf57c4a9, + 0x3169636c, 0x856214ca, 0x1878fcfb, 0xac738b5d, 0x17a6a003, + 0xa3add7a5, 0x3eb73f94, 0x8abc4832, 0x0482eff7, 0xb0899851, + 0x2d937060, 0x999807c6, 0x70e84f30, 0xc4e33896, 0x59f9d0a7, + 0xedf2a701, 0x63cc00c4, 0xd7c77762, 0x4add9f53, 0xfed6e8f5, + 0xd93a7e64, 0x6d3109c2, 0xf02be1f3, 0x44209655, 0xca1e3190, + 0x7e154636, 0xe30fae07, 0x5704d9a1, 0xbe749157, 0x0a7fe6f1, + 0x97650ec0, 0x236e7966, 0xad50dea3, 0x195ba905, 0x84414134, + 0x304a3692}, + {0x00000000, 0x9e00aacc, 0x7d072542, 0xe3078f8e, 0xfa0e4a84, + 0x640ee048, 0x87096fc6, 0x1909c50a, 0xb51be5d3, 0x2b1b4f1f, + 0xc81cc091, 0x561c6a5d, 0x4f15af57, 0xd115059b, 0x32128a15, + 0xac1220d9, 0x2b31bb7c, 0xb53111b0, 0x56369e3e, 0xc83634f2, + 0xd13ff1f8, 0x4f3f5b34, 0xac38d4ba, 0x32387e76, 0x9e2a5eaf, + 0x002af463, 0xe32d7bed, 0x7d2dd121, 0x6424142b, 0xfa24bee7, + 0x19233169, 0x87239ba5, 0x566276f9, 0xc862dc35, 0x2b6553bb, + 0xb565f977, 0xac6c3c7d, 0x326c96b1, 0xd16b193f, 0x4f6bb3f3, + 0xe379932a, 0x7d7939e6, 0x9e7eb668, 0x007e1ca4, 0x1977d9ae, + 0x87777362, 0x6470fcec, 0xfa705620, 0x7d53cd85, 0xe3536749, + 0x0054e8c7, 0x9e54420b, 0x875d8701, 0x195d2dcd, 0xfa5aa243, + 0x645a088f, 0xc8482856, 0x5648829a, 0xb54f0d14, 0x2b4fa7d8, + 0x324662d2, 0xac46c81e, 0x4f414790, 0xd141ed5c, 0xedc29d29, + 0x73c237e5, 0x90c5b86b, 0x0ec512a7, 0x17ccd7ad, 0x89cc7d61, + 0x6acbf2ef, 0xf4cb5823, 0x58d978fa, 0xc6d9d236, 0x25de5db8, + 0xbbdef774, 0xa2d7327e, 0x3cd798b2, 0xdfd0173c, 0x41d0bdf0, + 0xc6f32655, 0x58f38c99, 0xbbf40317, 0x25f4a9db, 0x3cfd6cd1, + 0xa2fdc61d, 0x41fa4993, 0xdffae35f, 0x73e8c386, 0xede8694a, + 0x0eefe6c4, 0x90ef4c08, 0x89e68902, 0x17e623ce, 0xf4e1ac40, + 0x6ae1068c, 0xbba0ebd0, 0x25a0411c, 0xc6a7ce92, 0x58a7645e, + 0x41aea154, 0xdfae0b98, 0x3ca98416, 0xa2a92eda, 0x0ebb0e03, + 0x90bba4cf, 0x73bc2b41, 0xedbc818d, 0xf4b54487, 0x6ab5ee4b, + 0x89b261c5, 0x17b2cb09, 0x909150ac, 0x0e91fa60, 0xed9675ee, + 0x7396df22, 0x6a9f1a28, 0xf49fb0e4, 0x17983f6a, 0x899895a6, + 0x258ab57f, 0xbb8a1fb3, 0x588d903d, 0xc68d3af1, 0xdf84fffb, + 0x41845537, 0xa283dab9, 0x3c837075, 0xda853b53, 0x4485919f, + 0xa7821e11, 0x3982b4dd, 0x208b71d7, 0xbe8bdb1b, 0x5d8c5495, + 0xc38cfe59, 0x6f9ede80, 0xf19e744c, 0x1299fbc2, 0x8c99510e, + 0x95909404, 0x0b903ec8, 0xe897b146, 0x76971b8a, 0xf1b4802f, + 0x6fb42ae3, 0x8cb3a56d, 0x12b30fa1, 0x0bbacaab, 0x95ba6067, + 0x76bdefe9, 0xe8bd4525, 0x44af65fc, 0xdaafcf30, 0x39a840be, + 0xa7a8ea72, 0xbea12f78, 0x20a185b4, 0xc3a60a3a, 0x5da6a0f6, + 0x8ce74daa, 0x12e7e766, 0xf1e068e8, 0x6fe0c224, 0x76e9072e, + 0xe8e9ade2, 0x0bee226c, 0x95ee88a0, 0x39fca879, 0xa7fc02b5, + 0x44fb8d3b, 0xdafb27f7, 0xc3f2e2fd, 0x5df24831, 0xbef5c7bf, + 0x20f56d73, 0xa7d6f6d6, 0x39d65c1a, 0xdad1d394, 0x44d17958, + 0x5dd8bc52, 0xc3d8169e, 0x20df9910, 0xbedf33dc, 0x12cd1305, + 0x8ccdb9c9, 0x6fca3647, 0xf1ca9c8b, 0xe8c35981, 0x76c3f34d, + 0x95c47cc3, 0x0bc4d60f, 0x3747a67a, 0xa9470cb6, 0x4a408338, + 0xd44029f4, 0xcd49ecfe, 0x53494632, 0xb04ec9bc, 0x2e4e6370, + 0x825c43a9, 0x1c5ce965, 0xff5b66eb, 0x615bcc27, 0x7852092d, + 0xe652a3e1, 0x05552c6f, 0x9b5586a3, 0x1c761d06, 0x8276b7ca, + 0x61713844, 0xff719288, 0xe6785782, 0x7878fd4e, 0x9b7f72c0, + 0x057fd80c, 0xa96df8d5, 0x376d5219, 0xd46add97, 0x4a6a775b, + 0x5363b251, 0xcd63189d, 0x2e649713, 0xb0643ddf, 0x6125d083, + 0xff257a4f, 0x1c22f5c1, 0x82225f0d, 0x9b2b9a07, 0x052b30cb, + 0xe62cbf45, 0x782c1589, 0xd43e3550, 0x4a3e9f9c, 0xa9391012, + 0x3739bade, 0x2e307fd4, 0xb030d518, 0x53375a96, 0xcd37f05a, + 0x4a146bff, 0xd414c133, 0x37134ebd, 0xa913e471, 0xb01a217b, + 0x2e1a8bb7, 0xcd1d0439, 0x531daef5, 0xff0f8e2c, 0x610f24e0, + 0x8208ab6e, 0x1c0801a2, 0x0501c4a8, 0x9b016e64, 0x7806e1ea, + 0xe6064b26}}; + +#endif + +#endif + +#if N == 3 + +#if W == 8 + +local const z_crc_t FAR crc_braid_table[][256] = { + {0x00000000, 0x81256527, 0xd93bcc0f, 0x581ea928, 0x69069e5f, + 0xe823fb78, 0xb03d5250, 0x31183777, 0xd20d3cbe, 0x53285999, + 0x0b36f0b1, 0x8a139596, 0xbb0ba2e1, 0x3a2ec7c6, 0x62306eee, + 0xe3150bc9, 0x7f6b7f3d, 0xfe4e1a1a, 0xa650b332, 0x2775d615, + 0x166de162, 0x97488445, 0xcf562d6d, 0x4e73484a, 0xad664383, + 0x2c4326a4, 0x745d8f8c, 0xf578eaab, 0xc460dddc, 0x4545b8fb, + 0x1d5b11d3, 0x9c7e74f4, 0xfed6fe7a, 0x7ff39b5d, 0x27ed3275, + 0xa6c85752, 0x97d06025, 0x16f50502, 0x4eebac2a, 0xcfcec90d, + 0x2cdbc2c4, 0xadfea7e3, 0xf5e00ecb, 0x74c56bec, 0x45dd5c9b, + 0xc4f839bc, 0x9ce69094, 0x1dc3f5b3, 0x81bd8147, 0x0098e460, + 0x58864d48, 0xd9a3286f, 0xe8bb1f18, 0x699e7a3f, 0x3180d317, + 0xb0a5b630, 0x53b0bdf9, 0xd295d8de, 0x8a8b71f6, 0x0bae14d1, + 0x3ab623a6, 0xbb934681, 0xe38defa9, 0x62a88a8e, 0x26dcfab5, + 0xa7f99f92, 0xffe736ba, 0x7ec2539d, 0x4fda64ea, 0xceff01cd, + 0x96e1a8e5, 0x17c4cdc2, 0xf4d1c60b, 0x75f4a32c, 0x2dea0a04, + 0xaccf6f23, 0x9dd75854, 0x1cf23d73, 0x44ec945b, 0xc5c9f17c, + 0x59b78588, 0xd892e0af, 0x808c4987, 0x01a92ca0, 0x30b11bd7, + 0xb1947ef0, 0xe98ad7d8, 0x68afb2ff, 0x8bbab936, 0x0a9fdc11, + 0x52817539, 0xd3a4101e, 0xe2bc2769, 0x6399424e, 0x3b87eb66, + 0xbaa28e41, 0xd80a04cf, 0x592f61e8, 0x0131c8c0, 0x8014ade7, + 0xb10c9a90, 0x3029ffb7, 0x6837569f, 0xe91233b8, 0x0a073871, + 0x8b225d56, 0xd33cf47e, 0x52199159, 0x6301a62e, 0xe224c309, + 0xba3a6a21, 0x3b1f0f06, 0xa7617bf2, 0x26441ed5, 0x7e5ab7fd, + 0xff7fd2da, 0xce67e5ad, 0x4f42808a, 0x175c29a2, 0x96794c85, + 0x756c474c, 0xf449226b, 0xac578b43, 0x2d72ee64, 0x1c6ad913, + 0x9d4fbc34, 0xc551151c, 0x4474703b, 0x4db9f56a, 0xcc9c904d, + 0x94823965, 0x15a75c42, 0x24bf6b35, 0xa59a0e12, 0xfd84a73a, + 0x7ca1c21d, 0x9fb4c9d4, 0x1e91acf3, 0x468f05db, 0xc7aa60fc, + 0xf6b2578b, 0x779732ac, 0x2f899b84, 0xaeacfea3, 0x32d28a57, + 0xb3f7ef70, 0xebe94658, 0x6acc237f, 0x5bd41408, 0xdaf1712f, + 0x82efd807, 0x03cabd20, 0xe0dfb6e9, 0x61fad3ce, 0x39e47ae6, + 0xb8c11fc1, 0x89d928b6, 0x08fc4d91, 0x50e2e4b9, 0xd1c7819e, + 0xb36f0b10, 0x324a6e37, 0x6a54c71f, 0xeb71a238, 0xda69954f, + 0x5b4cf068, 0x03525940, 0x82773c67, 0x616237ae, 0xe0475289, + 0xb859fba1, 0x397c9e86, 0x0864a9f1, 0x8941ccd6, 0xd15f65fe, + 0x507a00d9, 0xcc04742d, 0x4d21110a, 0x153fb822, 0x941add05, + 0xa502ea72, 0x24278f55, 0x7c39267d, 0xfd1c435a, 0x1e094893, + 0x9f2c2db4, 0xc732849c, 0x4617e1bb, 0x770fd6cc, 0xf62ab3eb, + 0xae341ac3, 0x2f117fe4, 0x6b650fdf, 0xea406af8, 0xb25ec3d0, + 0x337ba6f7, 0x02639180, 0x8346f4a7, 0xdb585d8f, 0x5a7d38a8, + 0xb9683361, 0x384d5646, 0x6053ff6e, 0xe1769a49, 0xd06ead3e, + 0x514bc819, 0x09556131, 0x88700416, 0x140e70e2, 0x952b15c5, + 0xcd35bced, 0x4c10d9ca, 0x7d08eebd, 0xfc2d8b9a, 0xa43322b2, + 0x25164795, 0xc6034c5c, 0x4726297b, 0x1f388053, 0x9e1de574, + 0xaf05d203, 0x2e20b724, 0x763e1e0c, 0xf71b7b2b, 0x95b3f1a5, + 0x14969482, 0x4c883daa, 0xcdad588d, 0xfcb56ffa, 0x7d900add, + 0x258ea3f5, 0xa4abc6d2, 0x47becd1b, 0xc69ba83c, 0x9e850114, + 0x1fa06433, 0x2eb85344, 0xaf9d3663, 0xf7839f4b, 0x76a6fa6c, + 0xead88e98, 0x6bfdebbf, 0x33e34297, 0xb2c627b0, 0x83de10c7, + 0x02fb75e0, 0x5ae5dcc8, 0xdbc0b9ef, 0x38d5b226, 0xb9f0d701, + 0xe1ee7e29, 0x60cb1b0e, 0x51d32c79, 0xd0f6495e, 0x88e8e076, + 0x09cd8551}, + {0x00000000, 0x9b73ead4, 0xed96d3e9, 0x76e5393d, 0x005ca193, + 0x9b2f4b47, 0xedca727a, 0x76b998ae, 0x00b94326, 0x9bcaa9f2, + 0xed2f90cf, 0x765c7a1b, 0x00e5e2b5, 0x9b960861, 0xed73315c, + 0x7600db88, 0x0172864c, 0x9a016c98, 0xece455a5, 0x7797bf71, + 0x012e27df, 0x9a5dcd0b, 0xecb8f436, 0x77cb1ee2, 0x01cbc56a, + 0x9ab82fbe, 0xec5d1683, 0x772efc57, 0x019764f9, 0x9ae48e2d, + 0xec01b710, 0x77725dc4, 0x02e50c98, 0x9996e64c, 0xef73df71, + 0x740035a5, 0x02b9ad0b, 0x99ca47df, 0xef2f7ee2, 0x745c9436, + 0x025c4fbe, 0x992fa56a, 0xefca9c57, 0x74b97683, 0x0200ee2d, + 0x997304f9, 0xef963dc4, 0x74e5d710, 0x03978ad4, 0x98e46000, + 0xee01593d, 0x7572b3e9, 0x03cb2b47, 0x98b8c193, 0xee5df8ae, + 0x752e127a, 0x032ec9f2, 0x985d2326, 0xeeb81a1b, 0x75cbf0cf, + 0x03726861, 0x980182b5, 0xeee4bb88, 0x7597515c, 0x05ca1930, + 0x9eb9f3e4, 0xe85ccad9, 0x732f200d, 0x0596b8a3, 0x9ee55277, + 0xe8006b4a, 0x7373819e, 0x05735a16, 0x9e00b0c2, 0xe8e589ff, + 0x7396632b, 0x052ffb85, 0x9e5c1151, 0xe8b9286c, 0x73cac2b8, + 0x04b89f7c, 0x9fcb75a8, 0xe92e4c95, 0x725da641, 0x04e43eef, + 0x9f97d43b, 0xe972ed06, 0x720107d2, 0x0401dc5a, 0x9f72368e, + 0xe9970fb3, 0x72e4e567, 0x045d7dc9, 0x9f2e971d, 0xe9cbae20, + 0x72b844f4, 0x072f15a8, 0x9c5cff7c, 0xeab9c641, 0x71ca2c95, + 0x0773b43b, 0x9c005eef, 0xeae567d2, 0x71968d06, 0x0796568e, + 0x9ce5bc5a, 0xea008567, 0x71736fb3, 0x07caf71d, 0x9cb91dc9, + 0xea5c24f4, 0x712fce20, 0x065d93e4, 0x9d2e7930, 0xebcb400d, + 0x70b8aad9, 0x06013277, 0x9d72d8a3, 0xeb97e19e, 0x70e40b4a, + 0x06e4d0c2, 0x9d973a16, 0xeb72032b, 0x7001e9ff, 0x06b87151, + 0x9dcb9b85, 0xeb2ea2b8, 0x705d486c, 0x0b943260, 0x90e7d8b4, + 0xe602e189, 0x7d710b5d, 0x0bc893f3, 0x90bb7927, 0xe65e401a, + 0x7d2daace, 0x0b2d7146, 0x905e9b92, 0xe6bba2af, 0x7dc8487b, + 0x0b71d0d5, 0x90023a01, 0xe6e7033c, 0x7d94e9e8, 0x0ae6b42c, + 0x91955ef8, 0xe77067c5, 0x7c038d11, 0x0aba15bf, 0x91c9ff6b, + 0xe72cc656, 0x7c5f2c82, 0x0a5ff70a, 0x912c1dde, 0xe7c924e3, + 0x7cbace37, 0x0a035699, 0x9170bc4d, 0xe7958570, 0x7ce66fa4, + 0x09713ef8, 0x9202d42c, 0xe4e7ed11, 0x7f9407c5, 0x092d9f6b, + 0x925e75bf, 0xe4bb4c82, 0x7fc8a656, 0x09c87dde, 0x92bb970a, + 0xe45eae37, 0x7f2d44e3, 0x0994dc4d, 0x92e73699, 0xe4020fa4, + 0x7f71e570, 0x0803b8b4, 0x93705260, 0xe5956b5d, 0x7ee68189, + 0x085f1927, 0x932cf3f3, 0xe5c9cace, 0x7eba201a, 0x08bafb92, + 0x93c91146, 0xe52c287b, 0x7e5fc2af, 0x08e65a01, 0x9395b0d5, + 0xe57089e8, 0x7e03633c, 0x0e5e2b50, 0x952dc184, 0xe3c8f8b9, + 0x78bb126d, 0x0e028ac3, 0x95716017, 0xe394592a, 0x78e7b3fe, + 0x0ee76876, 0x959482a2, 0xe371bb9f, 0x7802514b, 0x0ebbc9e5, + 0x95c82331, 0xe32d1a0c, 0x785ef0d8, 0x0f2cad1c, 0x945f47c8, + 0xe2ba7ef5, 0x79c99421, 0x0f700c8f, 0x9403e65b, 0xe2e6df66, + 0x799535b2, 0x0f95ee3a, 0x94e604ee, 0xe2033dd3, 0x7970d707, + 0x0fc94fa9, 0x94baa57d, 0xe25f9c40, 0x792c7694, 0x0cbb27c8, + 0x97c8cd1c, 0xe12df421, 0x7a5e1ef5, 0x0ce7865b, 0x97946c8f, + 0xe17155b2, 0x7a02bf66, 0x0c0264ee, 0x97718e3a, 0xe194b707, + 0x7ae75dd3, 0x0c5ec57d, 0x972d2fa9, 0xe1c81694, 0x7abbfc40, + 0x0dc9a184, 0x96ba4b50, 0xe05f726d, 0x7b2c98b9, 0x0d950017, + 0x96e6eac3, 0xe003d3fe, 0x7b70392a, 0x0d70e2a2, 0x96030876, + 0xe0e6314b, 0x7b95db9f, 0x0d2c4331, 0x965fa9e5, 0xe0ba90d8, + 0x7bc97a0c}, + {0x00000000, 0x172864c0, 0x2e50c980, 0x3978ad40, 0x5ca19300, + 0x4b89f7c0, 0x72f15a80, 0x65d93e40, 0xb9432600, 0xae6b42c0, + 0x9713ef80, 0x803b8b40, 0xe5e2b500, 0xf2cad1c0, 0xcbb27c80, + 0xdc9a1840, 0xa9f74a41, 0xbedf2e81, 0x87a783c1, 0x908fe701, + 0xf556d941, 0xe27ebd81, 0xdb0610c1, 0xcc2e7401, 0x10b46c41, + 0x079c0881, 0x3ee4a5c1, 0x29ccc101, 0x4c15ff41, 0x5b3d9b81, + 0x624536c1, 0x756d5201, 0x889f92c3, 0x9fb7f603, 0xa6cf5b43, + 0xb1e73f83, 0xd43e01c3, 0xc3166503, 0xfa6ec843, 0xed46ac83, + 0x31dcb4c3, 0x26f4d003, 0x1f8c7d43, 0x08a41983, 0x6d7d27c3, + 0x7a554303, 0x432dee43, 0x54058a83, 0x2168d882, 0x3640bc42, + 0x0f381102, 0x181075c2, 0x7dc94b82, 0x6ae12f42, 0x53998202, + 0x44b1e6c2, 0x982bfe82, 0x8f039a42, 0xb67b3702, 0xa15353c2, + 0xc48a6d82, 0xd3a20942, 0xeadaa402, 0xfdf2c0c2, 0xca4e23c7, + 0xdd664707, 0xe41eea47, 0xf3368e87, 0x96efb0c7, 0x81c7d407, + 0xb8bf7947, 0xaf971d87, 0x730d05c7, 0x64256107, 0x5d5dcc47, + 0x4a75a887, 0x2fac96c7, 0x3884f207, 0x01fc5f47, 0x16d43b87, + 0x63b96986, 0x74910d46, 0x4de9a006, 0x5ac1c4c6, 0x3f18fa86, + 0x28309e46, 0x11483306, 0x066057c6, 0xdafa4f86, 0xcdd22b46, + 0xf4aa8606, 0xe382e2c6, 0x865bdc86, 0x9173b846, 0xa80b1506, + 0xbf2371c6, 0x42d1b104, 0x55f9d5c4, 0x6c817884, 0x7ba91c44, + 0x1e702204, 0x095846c4, 0x3020eb84, 0x27088f44, 0xfb929704, + 0xecbaf3c4, 0xd5c25e84, 0xc2ea3a44, 0xa7330404, 0xb01b60c4, + 0x8963cd84, 0x9e4ba944, 0xeb26fb45, 0xfc0e9f85, 0xc57632c5, + 0xd25e5605, 0xb7876845, 0xa0af0c85, 0x99d7a1c5, 0x8effc505, + 0x5265dd45, 0x454db985, 0x7c3514c5, 0x6b1d7005, 0x0ec44e45, + 0x19ec2a85, 0x209487c5, 0x37bce305, 0x4fed41cf, 0x58c5250f, + 0x61bd884f, 0x7695ec8f, 0x134cd2cf, 0x0464b60f, 0x3d1c1b4f, + 0x2a347f8f, 0xf6ae67cf, 0xe186030f, 0xd8feae4f, 0xcfd6ca8f, + 0xaa0ff4cf, 0xbd27900f, 0x845f3d4f, 0x9377598f, 0xe61a0b8e, + 0xf1326f4e, 0xc84ac20e, 0xdf62a6ce, 0xbabb988e, 0xad93fc4e, + 0x94eb510e, 0x83c335ce, 0x5f592d8e, 0x4871494e, 0x7109e40e, + 0x662180ce, 0x03f8be8e, 0x14d0da4e, 0x2da8770e, 0x3a8013ce, + 0xc772d30c, 0xd05ab7cc, 0xe9221a8c, 0xfe0a7e4c, 0x9bd3400c, + 0x8cfb24cc, 0xb583898c, 0xa2abed4c, 0x7e31f50c, 0x691991cc, + 0x50613c8c, 0x4749584c, 0x2290660c, 0x35b802cc, 0x0cc0af8c, + 0x1be8cb4c, 0x6e85994d, 0x79adfd8d, 0x40d550cd, 0x57fd340d, + 0x32240a4d, 0x250c6e8d, 0x1c74c3cd, 0x0b5ca70d, 0xd7c6bf4d, + 0xc0eedb8d, 0xf99676cd, 0xeebe120d, 0x8b672c4d, 0x9c4f488d, + 0xa537e5cd, 0xb21f810d, 0x85a36208, 0x928b06c8, 0xabf3ab88, + 0xbcdbcf48, 0xd902f108, 0xce2a95c8, 0xf7523888, 0xe07a5c48, + 0x3ce04408, 0x2bc820c8, 0x12b08d88, 0x0598e948, 0x6041d708, + 0x7769b3c8, 0x4e111e88, 0x59397a48, 0x2c542849, 0x3b7c4c89, + 0x0204e1c9, 0x152c8509, 0x70f5bb49, 0x67dddf89, 0x5ea572c9, + 0x498d1609, 0x95170e49, 0x823f6a89, 0xbb47c7c9, 0xac6fa309, + 0xc9b69d49, 0xde9ef989, 0xe7e654c9, 0xf0ce3009, 0x0d3cf0cb, + 0x1a14940b, 0x236c394b, 0x34445d8b, 0x519d63cb, 0x46b5070b, + 0x7fcdaa4b, 0x68e5ce8b, 0xb47fd6cb, 0xa357b20b, 0x9a2f1f4b, + 0x8d077b8b, 0xe8de45cb, 0xfff6210b, 0xc68e8c4b, 0xd1a6e88b, + 0xa4cbba8a, 0xb3e3de4a, 0x8a9b730a, 0x9db317ca, 0xf86a298a, + 0xef424d4a, 0xd63ae00a, 0xc11284ca, 0x1d889c8a, 0x0aa0f84a, + 0x33d8550a, 0x24f031ca, 0x41290f8a, 0x56016b4a, 0x6f79c60a, + 0x7851a2ca}, + {0x00000000, 0x9fda839e, 0xe4c4017d, 0x7b1e82e3, 0x12f904bb, + 0x8d238725, 0xf63d05c6, 0x69e78658, 0x25f20976, 0xba288ae8, + 0xc136080b, 0x5eec8b95, 0x370b0dcd, 0xa8d18e53, 0xd3cf0cb0, + 0x4c158f2e, 0x4be412ec, 0xd43e9172, 0xaf201391, 0x30fa900f, + 0x591d1657, 0xc6c795c9, 0xbdd9172a, 0x220394b4, 0x6e161b9a, + 0xf1cc9804, 0x8ad21ae7, 0x15089979, 0x7cef1f21, 0xe3359cbf, + 0x982b1e5c, 0x07f19dc2, 0x97c825d8, 0x0812a646, 0x730c24a5, + 0xecd6a73b, 0x85312163, 0x1aeba2fd, 0x61f5201e, 0xfe2fa380, + 0xb23a2cae, 0x2de0af30, 0x56fe2dd3, 0xc924ae4d, 0xa0c32815, + 0x3f19ab8b, 0x44072968, 0xdbddaaf6, 0xdc2c3734, 0x43f6b4aa, + 0x38e83649, 0xa732b5d7, 0xced5338f, 0x510fb011, 0x2a1132f2, + 0xb5cbb16c, 0xf9de3e42, 0x6604bddc, 0x1d1a3f3f, 0x82c0bca1, + 0xeb273af9, 0x74fdb967, 0x0fe33b84, 0x9039b81a, 0xf4e14df1, + 0x6b3bce6f, 0x10254c8c, 0x8fffcf12, 0xe618494a, 0x79c2cad4, + 0x02dc4837, 0x9d06cba9, 0xd1134487, 0x4ec9c719, 0x35d745fa, + 0xaa0dc664, 0xc3ea403c, 0x5c30c3a2, 0x272e4141, 0xb8f4c2df, + 0xbf055f1d, 0x20dfdc83, 0x5bc15e60, 0xc41bddfe, 0xadfc5ba6, + 0x3226d838, 0x49385adb, 0xd6e2d945, 0x9af7566b, 0x052dd5f5, + 0x7e335716, 0xe1e9d488, 0x880e52d0, 0x17d4d14e, 0x6cca53ad, + 0xf310d033, 0x63296829, 0xfcf3ebb7, 0x87ed6954, 0x1837eaca, + 0x71d06c92, 0xee0aef0c, 0x95146def, 0x0aceee71, 0x46db615f, + 0xd901e2c1, 0xa21f6022, 0x3dc5e3bc, 0x542265e4, 0xcbf8e67a, + 0xb0e66499, 0x2f3ce707, 0x28cd7ac5, 0xb717f95b, 0xcc097bb8, + 0x53d3f826, 0x3a347e7e, 0xa5eefde0, 0xdef07f03, 0x412afc9d, + 0x0d3f73b3, 0x92e5f02d, 0xe9fb72ce, 0x7621f150, 0x1fc67708, + 0x801cf496, 0xfb027675, 0x64d8f5eb, 0x32b39da3, 0xad691e3d, + 0xd6779cde, 0x49ad1f40, 0x204a9918, 0xbf901a86, 0xc48e9865, + 0x5b541bfb, 0x174194d5, 0x889b174b, 0xf38595a8, 0x6c5f1636, + 0x05b8906e, 0x9a6213f0, 0xe17c9113, 0x7ea6128d, 0x79578f4f, + 0xe68d0cd1, 0x9d938e32, 0x02490dac, 0x6bae8bf4, 0xf474086a, + 0x8f6a8a89, 0x10b00917, 0x5ca58639, 0xc37f05a7, 0xb8618744, + 0x27bb04da, 0x4e5c8282, 0xd186011c, 0xaa9883ff, 0x35420061, + 0xa57bb87b, 0x3aa13be5, 0x41bfb906, 0xde653a98, 0xb782bcc0, + 0x28583f5e, 0x5346bdbd, 0xcc9c3e23, 0x8089b10d, 0x1f533293, + 0x644db070, 0xfb9733ee, 0x9270b5b6, 0x0daa3628, 0x76b4b4cb, + 0xe96e3755, 0xee9faa97, 0x71452909, 0x0a5babea, 0x95812874, + 0xfc66ae2c, 0x63bc2db2, 0x18a2af51, 0x87782ccf, 0xcb6da3e1, + 0x54b7207f, 0x2fa9a29c, 0xb0732102, 0xd994a75a, 0x464e24c4, + 0x3d50a627, 0xa28a25b9, 0xc652d052, 0x598853cc, 0x2296d12f, + 0xbd4c52b1, 0xd4abd4e9, 0x4b715777, 0x306fd594, 0xafb5560a, + 0xe3a0d924, 0x7c7a5aba, 0x0764d859, 0x98be5bc7, 0xf159dd9f, + 0x6e835e01, 0x159ddce2, 0x8a475f7c, 0x8db6c2be, 0x126c4120, + 0x6972c3c3, 0xf6a8405d, 0x9f4fc605, 0x0095459b, 0x7b8bc778, + 0xe45144e6, 0xa844cbc8, 0x379e4856, 0x4c80cab5, 0xd35a492b, + 0xbabdcf73, 0x25674ced, 0x5e79ce0e, 0xc1a34d90, 0x519af58a, + 0xce407614, 0xb55ef4f7, 0x2a847769, 0x4363f131, 0xdcb972af, + 0xa7a7f04c, 0x387d73d2, 0x7468fcfc, 0xebb27f62, 0x90acfd81, + 0x0f767e1f, 0x6691f847, 0xf94b7bd9, 0x8255f93a, 0x1d8f7aa4, + 0x1a7ee766, 0x85a464f8, 0xfebae61b, 0x61606585, 0x0887e3dd, + 0x975d6043, 0xec43e2a0, 0x7399613e, 0x3f8cee10, 0xa0566d8e, + 0xdb48ef6d, 0x44926cf3, 0x2d75eaab, 0xb2af6935, 0xc9b1ebd6, + 0x566b6848}, + {0x00000000, 0x65673b46, 0xcace768c, 0xafa94dca, 0x4eedeb59, + 0x2b8ad01f, 0x84239dd5, 0xe144a693, 0x9ddbd6b2, 0xf8bcedf4, + 0x5715a03e, 0x32729b78, 0xd3363deb, 0xb65106ad, 0x19f84b67, + 0x7c9f7021, 0xe0c6ab25, 0x85a19063, 0x2a08dda9, 0x4f6fe6ef, + 0xae2b407c, 0xcb4c7b3a, 0x64e536f0, 0x01820db6, 0x7d1d7d97, + 0x187a46d1, 0xb7d30b1b, 0xd2b4305d, 0x33f096ce, 0x5697ad88, + 0xf93ee042, 0x9c59db04, 0x1afc500b, 0x7f9b6b4d, 0xd0322687, + 0xb5551dc1, 0x5411bb52, 0x31768014, 0x9edfcdde, 0xfbb8f698, + 0x872786b9, 0xe240bdff, 0x4de9f035, 0x288ecb73, 0xc9ca6de0, + 0xacad56a6, 0x03041b6c, 0x6663202a, 0xfa3afb2e, 0x9f5dc068, + 0x30f48da2, 0x5593b6e4, 0xb4d71077, 0xd1b02b31, 0x7e1966fb, + 0x1b7e5dbd, 0x67e12d9c, 0x028616da, 0xad2f5b10, 0xc8486056, + 0x290cc6c5, 0x4c6bfd83, 0xe3c2b049, 0x86a58b0f, 0x35f8a016, + 0x509f9b50, 0xff36d69a, 0x9a51eddc, 0x7b154b4f, 0x1e727009, + 0xb1db3dc3, 0xd4bc0685, 0xa82376a4, 0xcd444de2, 0x62ed0028, + 0x078a3b6e, 0xe6ce9dfd, 0x83a9a6bb, 0x2c00eb71, 0x4967d037, + 0xd53e0b33, 0xb0593075, 0x1ff07dbf, 0x7a9746f9, 0x9bd3e06a, + 0xfeb4db2c, 0x511d96e6, 0x347aada0, 0x48e5dd81, 0x2d82e6c7, + 0x822bab0d, 0xe74c904b, 0x060836d8, 0x636f0d9e, 0xccc64054, + 0xa9a17b12, 0x2f04f01d, 0x4a63cb5b, 0xe5ca8691, 0x80adbdd7, + 0x61e91b44, 0x048e2002, 0xab276dc8, 0xce40568e, 0xb2df26af, + 0xd7b81de9, 0x78115023, 0x1d766b65, 0xfc32cdf6, 0x9955f6b0, + 0x36fcbb7a, 0x539b803c, 0xcfc25b38, 0xaaa5607e, 0x050c2db4, + 0x606b16f2, 0x812fb061, 0xe4488b27, 0x4be1c6ed, 0x2e86fdab, + 0x52198d8a, 0x377eb6cc, 0x98d7fb06, 0xfdb0c040, 0x1cf466d3, + 0x79935d95, 0xd63a105f, 0xb35d2b19, 0x6bf1402c, 0x0e967b6a, + 0xa13f36a0, 0xc4580de6, 0x251cab75, 0x407b9033, 0xefd2ddf9, + 0x8ab5e6bf, 0xf62a969e, 0x934dadd8, 0x3ce4e012, 0x5983db54, + 0xb8c77dc7, 0xdda04681, 0x72090b4b, 0x176e300d, 0x8b37eb09, + 0xee50d04f, 0x41f99d85, 0x249ea6c3, 0xc5da0050, 0xa0bd3b16, + 0x0f1476dc, 0x6a734d9a, 0x16ec3dbb, 0x738b06fd, 0xdc224b37, + 0xb9457071, 0x5801d6e2, 0x3d66eda4, 0x92cfa06e, 0xf7a89b28, + 0x710d1027, 0x146a2b61, 0xbbc366ab, 0xdea45ded, 0x3fe0fb7e, + 0x5a87c038, 0xf52e8df2, 0x9049b6b4, 0xecd6c695, 0x89b1fdd3, + 0x2618b019, 0x437f8b5f, 0xa23b2dcc, 0xc75c168a, 0x68f55b40, + 0x0d926006, 0x91cbbb02, 0xf4ac8044, 0x5b05cd8e, 0x3e62f6c8, + 0xdf26505b, 0xba416b1d, 0x15e826d7, 0x708f1d91, 0x0c106db0, + 0x697756f6, 0xc6de1b3c, 0xa3b9207a, 0x42fd86e9, 0x279abdaf, + 0x8833f065, 0xed54cb23, 0x5e09e03a, 0x3b6edb7c, 0x94c796b6, + 0xf1a0adf0, 0x10e40b63, 0x75833025, 0xda2a7def, 0xbf4d46a9, + 0xc3d23688, 0xa6b50dce, 0x091c4004, 0x6c7b7b42, 0x8d3fddd1, + 0xe858e697, 0x47f1ab5d, 0x2296901b, 0xbecf4b1f, 0xdba87059, + 0x74013d93, 0x116606d5, 0xf022a046, 0x95459b00, 0x3aecd6ca, + 0x5f8bed8c, 0x23149dad, 0x4673a6eb, 0xe9daeb21, 0x8cbdd067, + 0x6df976f4, 0x089e4db2, 0xa7370078, 0xc2503b3e, 0x44f5b031, + 0x21928b77, 0x8e3bc6bd, 0xeb5cfdfb, 0x0a185b68, 0x6f7f602e, + 0xc0d62de4, 0xa5b116a2, 0xd92e6683, 0xbc495dc5, 0x13e0100f, + 0x76872b49, 0x97c38dda, 0xf2a4b69c, 0x5d0dfb56, 0x386ac010, + 0xa4331b14, 0xc1542052, 0x6efd6d98, 0x0b9a56de, 0xeadef04d, + 0x8fb9cb0b, 0x201086c1, 0x4577bd87, 0x39e8cda6, 0x5c8ff6e0, + 0xf326bb2a, 0x9641806c, 0x770526ff, 0x12621db9, 0xbdcb5073, + 0xd8ac6b35}, + {0x00000000, 0xd7e28058, 0x74b406f1, 0xa35686a9, 0xe9680de2, + 0x3e8a8dba, 0x9ddc0b13, 0x4a3e8b4b, 0x09a11d85, 0xde439ddd, + 0x7d151b74, 0xaaf79b2c, 0xe0c91067, 0x372b903f, 0x947d1696, + 0x439f96ce, 0x13423b0a, 0xc4a0bb52, 0x67f63dfb, 0xb014bda3, + 0xfa2a36e8, 0x2dc8b6b0, 0x8e9e3019, 0x597cb041, 0x1ae3268f, + 0xcd01a6d7, 0x6e57207e, 0xb9b5a026, 0xf38b2b6d, 0x2469ab35, + 0x873f2d9c, 0x50ddadc4, 0x26847614, 0xf166f64c, 0x523070e5, + 0x85d2f0bd, 0xcfec7bf6, 0x180efbae, 0xbb587d07, 0x6cbafd5f, + 0x2f256b91, 0xf8c7ebc9, 0x5b916d60, 0x8c73ed38, 0xc64d6673, + 0x11afe62b, 0xb2f96082, 0x651be0da, 0x35c64d1e, 0xe224cd46, + 0x41724bef, 0x9690cbb7, 0xdcae40fc, 0x0b4cc0a4, 0xa81a460d, + 0x7ff8c655, 0x3c67509b, 0xeb85d0c3, 0x48d3566a, 0x9f31d632, + 0xd50f5d79, 0x02eddd21, 0xa1bb5b88, 0x7659dbd0, 0x4d08ec28, + 0x9aea6c70, 0x39bcead9, 0xee5e6a81, 0xa460e1ca, 0x73826192, + 0xd0d4e73b, 0x07366763, 0x44a9f1ad, 0x934b71f5, 0x301df75c, + 0xe7ff7704, 0xadc1fc4f, 0x7a237c17, 0xd975fabe, 0x0e977ae6, + 0x5e4ad722, 0x89a8577a, 0x2afed1d3, 0xfd1c518b, 0xb722dac0, + 0x60c05a98, 0xc396dc31, 0x14745c69, 0x57ebcaa7, 0x80094aff, + 0x235fcc56, 0xf4bd4c0e, 0xbe83c745, 0x6961471d, 0xca37c1b4, + 0x1dd541ec, 0x6b8c9a3c, 0xbc6e1a64, 0x1f389ccd, 0xc8da1c95, + 0x82e497de, 0x55061786, 0xf650912f, 0x21b21177, 0x622d87b9, + 0xb5cf07e1, 0x16998148, 0xc17b0110, 0x8b458a5b, 0x5ca70a03, + 0xfff18caa, 0x28130cf2, 0x78cea136, 0xaf2c216e, 0x0c7aa7c7, + 0xdb98279f, 0x91a6acd4, 0x46442c8c, 0xe512aa25, 0x32f02a7d, + 0x716fbcb3, 0xa68d3ceb, 0x05dbba42, 0xd2393a1a, 0x9807b151, + 0x4fe53109, 0xecb3b7a0, 0x3b5137f8, 0x9a11d850, 0x4df35808, + 0xeea5dea1, 0x39475ef9, 0x7379d5b2, 0xa49b55ea, 0x07cdd343, + 0xd02f531b, 0x93b0c5d5, 0x4452458d, 0xe704c324, 0x30e6437c, + 0x7ad8c837, 0xad3a486f, 0x0e6ccec6, 0xd98e4e9e, 0x8953e35a, + 0x5eb16302, 0xfde7e5ab, 0x2a0565f3, 0x603beeb8, 0xb7d96ee0, + 0x148fe849, 0xc36d6811, 0x80f2fedf, 0x57107e87, 0xf446f82e, + 0x23a47876, 0x699af33d, 0xbe787365, 0x1d2ef5cc, 0xcacc7594, + 0xbc95ae44, 0x6b772e1c, 0xc821a8b5, 0x1fc328ed, 0x55fda3a6, + 0x821f23fe, 0x2149a557, 0xf6ab250f, 0xb534b3c1, 0x62d63399, + 0xc180b530, 0x16623568, 0x5c5cbe23, 0x8bbe3e7b, 0x28e8b8d2, + 0xff0a388a, 0xafd7954e, 0x78351516, 0xdb6393bf, 0x0c8113e7, + 0x46bf98ac, 0x915d18f4, 0x320b9e5d, 0xe5e91e05, 0xa67688cb, + 0x71940893, 0xd2c28e3a, 0x05200e62, 0x4f1e8529, 0x98fc0571, + 0x3baa83d8, 0xec480380, 0xd7193478, 0x00fbb420, 0xa3ad3289, + 0x744fb2d1, 0x3e71399a, 0xe993b9c2, 0x4ac53f6b, 0x9d27bf33, + 0xdeb829fd, 0x095aa9a5, 0xaa0c2f0c, 0x7deeaf54, 0x37d0241f, + 0xe032a447, 0x436422ee, 0x9486a2b6, 0xc45b0f72, 0x13b98f2a, + 0xb0ef0983, 0x670d89db, 0x2d330290, 0xfad182c8, 0x59870461, + 0x8e658439, 0xcdfa12f7, 0x1a1892af, 0xb94e1406, 0x6eac945e, + 0x24921f15, 0xf3709f4d, 0x502619e4, 0x87c499bc, 0xf19d426c, + 0x267fc234, 0x8529449d, 0x52cbc4c5, 0x18f54f8e, 0xcf17cfd6, + 0x6c41497f, 0xbba3c927, 0xf83c5fe9, 0x2fdedfb1, 0x8c885918, + 0x5b6ad940, 0x1154520b, 0xc6b6d253, 0x65e054fa, 0xb202d4a2, + 0xe2df7966, 0x353df93e, 0x966b7f97, 0x4189ffcf, 0x0bb77484, + 0xdc55f4dc, 0x7f037275, 0xa8e1f22d, 0xeb7e64e3, 0x3c9ce4bb, + 0x9fca6212, 0x4828e24a, 0x02166901, 0xd5f4e959, 0x76a26ff0, + 0xa140efa8}, + {0x00000000, 0xef52b6e1, 0x05d46b83, 0xea86dd62, 0x0ba8d706, + 0xe4fa61e7, 0x0e7cbc85, 0xe12e0a64, 0x1751ae0c, 0xf80318ed, + 0x1285c58f, 0xfdd7736e, 0x1cf9790a, 0xf3abcfeb, 0x192d1289, + 0xf67fa468, 0x2ea35c18, 0xc1f1eaf9, 0x2b77379b, 0xc425817a, + 0x250b8b1e, 0xca593dff, 0x20dfe09d, 0xcf8d567c, 0x39f2f214, + 0xd6a044f5, 0x3c269997, 0xd3742f76, 0x325a2512, 0xdd0893f3, + 0x378e4e91, 0xd8dcf870, 0x5d46b830, 0xb2140ed1, 0x5892d3b3, + 0xb7c06552, 0x56ee6f36, 0xb9bcd9d7, 0x533a04b5, 0xbc68b254, + 0x4a17163c, 0xa545a0dd, 0x4fc37dbf, 0xa091cb5e, 0x41bfc13a, + 0xaeed77db, 0x446baab9, 0xab391c58, 0x73e5e428, 0x9cb752c9, + 0x76318fab, 0x9963394a, 0x784d332e, 0x971f85cf, 0x7d9958ad, + 0x92cbee4c, 0x64b44a24, 0x8be6fcc5, 0x616021a7, 0x8e329746, + 0x6f1c9d22, 0x804e2bc3, 0x6ac8f6a1, 0x859a4040, 0xba8d7060, + 0x55dfc681, 0xbf591be3, 0x500bad02, 0xb125a766, 0x5e771187, + 0xb4f1cce5, 0x5ba37a04, 0xaddcde6c, 0x428e688d, 0xa808b5ef, + 0x475a030e, 0xa674096a, 0x4926bf8b, 0xa3a062e9, 0x4cf2d408, + 0x942e2c78, 0x7b7c9a99, 0x91fa47fb, 0x7ea8f11a, 0x9f86fb7e, + 0x70d44d9f, 0x9a5290fd, 0x7500261c, 0x837f8274, 0x6c2d3495, + 0x86abe9f7, 0x69f95f16, 0x88d75572, 0x6785e393, 0x8d033ef1, + 0x62518810, 0xe7cbc850, 0x08997eb1, 0xe21fa3d3, 0x0d4d1532, + 0xec631f56, 0x0331a9b7, 0xe9b774d5, 0x06e5c234, 0xf09a665c, + 0x1fc8d0bd, 0xf54e0ddf, 0x1a1cbb3e, 0xfb32b15a, 0x146007bb, + 0xfee6dad9, 0x11b46c38, 0xc9689448, 0x263a22a9, 0xccbcffcb, + 0x23ee492a, 0xc2c0434e, 0x2d92f5af, 0xc71428cd, 0x28469e2c, + 0xde393a44, 0x316b8ca5, 0xdbed51c7, 0x34bfe726, 0xd591ed42, + 0x3ac35ba3, 0xd04586c1, 0x3f173020, 0xae6be681, 0x41395060, + 0xabbf8d02, 0x44ed3be3, 0xa5c33187, 0x4a918766, 0xa0175a04, + 0x4f45ece5, 0xb93a488d, 0x5668fe6c, 0xbcee230e, 0x53bc95ef, + 0xb2929f8b, 0x5dc0296a, 0xb746f408, 0x581442e9, 0x80c8ba99, + 0x6f9a0c78, 0x851cd11a, 0x6a4e67fb, 0x8b606d9f, 0x6432db7e, + 0x8eb4061c, 0x61e6b0fd, 0x97991495, 0x78cba274, 0x924d7f16, + 0x7d1fc9f7, 0x9c31c393, 0x73637572, 0x99e5a810, 0x76b71ef1, + 0xf32d5eb1, 0x1c7fe850, 0xf6f93532, 0x19ab83d3, 0xf88589b7, + 0x17d73f56, 0xfd51e234, 0x120354d5, 0xe47cf0bd, 0x0b2e465c, + 0xe1a89b3e, 0x0efa2ddf, 0xefd427bb, 0x0086915a, 0xea004c38, + 0x0552fad9, 0xdd8e02a9, 0x32dcb448, 0xd85a692a, 0x3708dfcb, + 0xd626d5af, 0x3974634e, 0xd3f2be2c, 0x3ca008cd, 0xcadfaca5, + 0x258d1a44, 0xcf0bc726, 0x205971c7, 0xc1777ba3, 0x2e25cd42, + 0xc4a31020, 0x2bf1a6c1, 0x14e696e1, 0xfbb42000, 0x1132fd62, + 0xfe604b83, 0x1f4e41e7, 0xf01cf706, 0x1a9a2a64, 0xf5c89c85, + 0x03b738ed, 0xece58e0c, 0x0663536e, 0xe931e58f, 0x081fefeb, + 0xe74d590a, 0x0dcb8468, 0xe2993289, 0x3a45caf9, 0xd5177c18, + 0x3f91a17a, 0xd0c3179b, 0x31ed1dff, 0xdebfab1e, 0x3439767c, + 0xdb6bc09d, 0x2d1464f5, 0xc246d214, 0x28c00f76, 0xc792b997, + 0x26bcb3f3, 0xc9ee0512, 0x2368d870, 0xcc3a6e91, 0x49a02ed1, + 0xa6f29830, 0x4c744552, 0xa326f3b3, 0x4208f9d7, 0xad5a4f36, + 0x47dc9254, 0xa88e24b5, 0x5ef180dd, 0xb1a3363c, 0x5b25eb5e, + 0xb4775dbf, 0x555957db, 0xba0be13a, 0x508d3c58, 0xbfdf8ab9, + 0x670372c9, 0x8851c428, 0x62d7194a, 0x8d85afab, 0x6caba5cf, + 0x83f9132e, 0x697fce4c, 0x862d78ad, 0x7052dcc5, 0x9f006a24, + 0x7586b746, 0x9ad401a7, 0x7bfa0bc3, 0x94a8bd22, 0x7e2e6040, + 0x917cd6a1}, + {0x00000000, 0x87a6cb43, 0xd43c90c7, 0x539a5b84, 0x730827cf, + 0xf4aeec8c, 0xa734b708, 0x20927c4b, 0xe6104f9e, 0x61b684dd, + 0x322cdf59, 0xb58a141a, 0x95186851, 0x12bea312, 0x4124f896, + 0xc68233d5, 0x1751997d, 0x90f7523e, 0xc36d09ba, 0x44cbc2f9, + 0x6459beb2, 0xe3ff75f1, 0xb0652e75, 0x37c3e536, 0xf141d6e3, + 0x76e71da0, 0x257d4624, 0xa2db8d67, 0x8249f12c, 0x05ef3a6f, + 0x567561eb, 0xd1d3aaa8, 0x2ea332fa, 0xa905f9b9, 0xfa9fa23d, + 0x7d39697e, 0x5dab1535, 0xda0dde76, 0x899785f2, 0x0e314eb1, + 0xc8b37d64, 0x4f15b627, 0x1c8feda3, 0x9b2926e0, 0xbbbb5aab, + 0x3c1d91e8, 0x6f87ca6c, 0xe821012f, 0x39f2ab87, 0xbe5460c4, + 0xedce3b40, 0x6a68f003, 0x4afa8c48, 0xcd5c470b, 0x9ec61c8f, + 0x1960d7cc, 0xdfe2e419, 0x58442f5a, 0x0bde74de, 0x8c78bf9d, + 0xaceac3d6, 0x2b4c0895, 0x78d65311, 0xff709852, 0x5d4665f4, + 0xdae0aeb7, 0x897af533, 0x0edc3e70, 0x2e4e423b, 0xa9e88978, + 0xfa72d2fc, 0x7dd419bf, 0xbb562a6a, 0x3cf0e129, 0x6f6abaad, + 0xe8cc71ee, 0xc85e0da5, 0x4ff8c6e6, 0x1c629d62, 0x9bc45621, + 0x4a17fc89, 0xcdb137ca, 0x9e2b6c4e, 0x198da70d, 0x391fdb46, + 0xbeb91005, 0xed234b81, 0x6a8580c2, 0xac07b317, 0x2ba17854, + 0x783b23d0, 0xff9de893, 0xdf0f94d8, 0x58a95f9b, 0x0b33041f, + 0x8c95cf5c, 0x73e5570e, 0xf4439c4d, 0xa7d9c7c9, 0x207f0c8a, + 0x00ed70c1, 0x874bbb82, 0xd4d1e006, 0x53772b45, 0x95f51890, + 0x1253d3d3, 0x41c98857, 0xc66f4314, 0xe6fd3f5f, 0x615bf41c, + 0x32c1af98, 0xb56764db, 0x64b4ce73, 0xe3120530, 0xb0885eb4, + 0x372e95f7, 0x17bce9bc, 0x901a22ff, 0xc380797b, 0x4426b238, + 0x82a481ed, 0x05024aae, 0x5698112a, 0xd13eda69, 0xf1aca622, + 0x760a6d61, 0x259036e5, 0xa236fda6, 0xba8ccbe8, 0x3d2a00ab, + 0x6eb05b2f, 0xe916906c, 0xc984ec27, 0x4e222764, 0x1db87ce0, + 0x9a1eb7a3, 0x5c9c8476, 0xdb3a4f35, 0x88a014b1, 0x0f06dff2, + 0x2f94a3b9, 0xa83268fa, 0xfba8337e, 0x7c0ef83d, 0xaddd5295, + 0x2a7b99d6, 0x79e1c252, 0xfe470911, 0xded5755a, 0x5973be19, + 0x0ae9e59d, 0x8d4f2ede, 0x4bcd1d0b, 0xcc6bd648, 0x9ff18dcc, + 0x1857468f, 0x38c53ac4, 0xbf63f187, 0xecf9aa03, 0x6b5f6140, + 0x942ff912, 0x13893251, 0x401369d5, 0xc7b5a296, 0xe727dedd, + 0x6081159e, 0x331b4e1a, 0xb4bd8559, 0x723fb68c, 0xf5997dcf, + 0xa603264b, 0x21a5ed08, 0x01379143, 0x86915a00, 0xd50b0184, + 0x52adcac7, 0x837e606f, 0x04d8ab2c, 0x5742f0a8, 0xd0e43beb, + 0xf07647a0, 0x77d08ce3, 0x244ad767, 0xa3ec1c24, 0x656e2ff1, + 0xe2c8e4b2, 0xb152bf36, 0x36f47475, 0x1666083e, 0x91c0c37d, + 0xc25a98f9, 0x45fc53ba, 0xe7caae1c, 0x606c655f, 0x33f63edb, + 0xb450f598, 0x94c289d3, 0x13644290, 0x40fe1914, 0xc758d257, + 0x01dae182, 0x867c2ac1, 0xd5e67145, 0x5240ba06, 0x72d2c64d, + 0xf5740d0e, 0xa6ee568a, 0x21489dc9, 0xf09b3761, 0x773dfc22, + 0x24a7a7a6, 0xa3016ce5, 0x839310ae, 0x0435dbed, 0x57af8069, + 0xd0094b2a, 0x168b78ff, 0x912db3bc, 0xc2b7e838, 0x4511237b, + 0x65835f30, 0xe2259473, 0xb1bfcff7, 0x361904b4, 0xc9699ce6, + 0x4ecf57a5, 0x1d550c21, 0x9af3c762, 0xba61bb29, 0x3dc7706a, + 0x6e5d2bee, 0xe9fbe0ad, 0x2f79d378, 0xa8df183b, 0xfb4543bf, + 0x7ce388fc, 0x5c71f4b7, 0xdbd73ff4, 0x884d6470, 0x0febaf33, + 0xde38059b, 0x599eced8, 0x0a04955c, 0x8da25e1f, 0xad302254, + 0x2a96e917, 0x790cb293, 0xfeaa79d0, 0x38284a05, 0xbf8e8146, + 0xec14dac2, 0x6bb21181, 0x4b206dca, 0xcc86a689, 0x9f1cfd0d, + 0x18ba364e}}; + +local const z_word_t FAR crc_braid_big_table[][256] = { + {0x0000000000000000, 0x43cba68700000000, 0xc7903cd400000000, + 0x845b9a5300000000, 0xcf27087300000000, 0x8cecaef400000000, + 0x08b734a700000000, 0x4b7c922000000000, 0x9e4f10e600000000, + 0xdd84b66100000000, 0x59df2c3200000000, 0x1a148ab500000000, + 0x5168189500000000, 0x12a3be1200000000, 0x96f8244100000000, + 0xd53382c600000000, 0x7d99511700000000, 0x3e52f79000000000, + 0xba096dc300000000, 0xf9c2cb4400000000, 0xb2be596400000000, + 0xf175ffe300000000, 0x752e65b000000000, 0x36e5c33700000000, + 0xe3d641f100000000, 0xa01de77600000000, 0x24467d2500000000, + 0x678ddba200000000, 0x2cf1498200000000, 0x6f3aef0500000000, + 0xeb61755600000000, 0xa8aad3d100000000, 0xfa32a32e00000000, + 0xb9f905a900000000, 0x3da29ffa00000000, 0x7e69397d00000000, + 0x3515ab5d00000000, 0x76de0dda00000000, 0xf285978900000000, + 0xb14e310e00000000, 0x647db3c800000000, 0x27b6154f00000000, + 0xa3ed8f1c00000000, 0xe026299b00000000, 0xab5abbbb00000000, + 0xe8911d3c00000000, 0x6cca876f00000000, 0x2f0121e800000000, + 0x87abf23900000000, 0xc46054be00000000, 0x403bceed00000000, + 0x03f0686a00000000, 0x488cfa4a00000000, 0x0b475ccd00000000, + 0x8f1cc69e00000000, 0xccd7601900000000, 0x19e4e2df00000000, + 0x5a2f445800000000, 0xde74de0b00000000, 0x9dbf788c00000000, + 0xd6c3eaac00000000, 0x95084c2b00000000, 0x1153d67800000000, + 0x529870ff00000000, 0xf465465d00000000, 0xb7aee0da00000000, + 0x33f57a8900000000, 0x703edc0e00000000, 0x3b424e2e00000000, + 0x7889e8a900000000, 0xfcd272fa00000000, 0xbf19d47d00000000, + 0x6a2a56bb00000000, 0x29e1f03c00000000, 0xadba6a6f00000000, + 0xee71cce800000000, 0xa50d5ec800000000, 0xe6c6f84f00000000, + 0x629d621c00000000, 0x2156c49b00000000, 0x89fc174a00000000, + 0xca37b1cd00000000, 0x4e6c2b9e00000000, 0x0da78d1900000000, + 0x46db1f3900000000, 0x0510b9be00000000, 0x814b23ed00000000, + 0xc280856a00000000, 0x17b307ac00000000, 0x5478a12b00000000, + 0xd0233b7800000000, 0x93e89dff00000000, 0xd8940fdf00000000, + 0x9b5fa95800000000, 0x1f04330b00000000, 0x5ccf958c00000000, + 0x0e57e57300000000, 0x4d9c43f400000000, 0xc9c7d9a700000000, + 0x8a0c7f2000000000, 0xc170ed0000000000, 0x82bb4b8700000000, + 0x06e0d1d400000000, 0x452b775300000000, 0x9018f59500000000, + 0xd3d3531200000000, 0x5788c94100000000, 0x14436fc600000000, + 0x5f3ffde600000000, 0x1cf45b6100000000, 0x98afc13200000000, + 0xdb6467b500000000, 0x73ceb46400000000, 0x300512e300000000, + 0xb45e88b000000000, 0xf7952e3700000000, 0xbce9bc1700000000, + 0xff221a9000000000, 0x7b7980c300000000, 0x38b2264400000000, + 0xed81a48200000000, 0xae4a020500000000, 0x2a11985600000000, + 0x69da3ed100000000, 0x22a6acf100000000, 0x616d0a7600000000, + 0xe536902500000000, 0xa6fd36a200000000, 0xe8cb8cba00000000, + 0xab002a3d00000000, 0x2f5bb06e00000000, 0x6c9016e900000000, + 0x27ec84c900000000, 0x6427224e00000000, 0xe07cb81d00000000, + 0xa3b71e9a00000000, 0x76849c5c00000000, 0x354f3adb00000000, + 0xb114a08800000000, 0xf2df060f00000000, 0xb9a3942f00000000, + 0xfa6832a800000000, 0x7e33a8fb00000000, 0x3df80e7c00000000, + 0x9552ddad00000000, 0xd6997b2a00000000, 0x52c2e17900000000, + 0x110947fe00000000, 0x5a75d5de00000000, 0x19be735900000000, + 0x9de5e90a00000000, 0xde2e4f8d00000000, 0x0b1dcd4b00000000, + 0x48d66bcc00000000, 0xcc8df19f00000000, 0x8f46571800000000, + 0xc43ac53800000000, 0x87f163bf00000000, 0x03aaf9ec00000000, + 0x40615f6b00000000, 0x12f92f9400000000, 0x5132891300000000, + 0xd569134000000000, 0x96a2b5c700000000, 0xddde27e700000000, + 0x9e15816000000000, 0x1a4e1b3300000000, 0x5985bdb400000000, + 0x8cb63f7200000000, 0xcf7d99f500000000, 0x4b2603a600000000, + 0x08eda52100000000, 0x4391370100000000, 0x005a918600000000, + 0x84010bd500000000, 0xc7caad5200000000, 0x6f607e8300000000, + 0x2cabd80400000000, 0xa8f0425700000000, 0xeb3be4d000000000, + 0xa04776f000000000, 0xe38cd07700000000, 0x67d74a2400000000, + 0x241ceca300000000, 0xf12f6e6500000000, 0xb2e4c8e200000000, + 0x36bf52b100000000, 0x7574f43600000000, 0x3e08661600000000, + 0x7dc3c09100000000, 0xf9985ac200000000, 0xba53fc4500000000, + 0x1caecae700000000, 0x5f656c6000000000, 0xdb3ef63300000000, + 0x98f550b400000000, 0xd389c29400000000, 0x9042641300000000, + 0x1419fe4000000000, 0x57d258c700000000, 0x82e1da0100000000, + 0xc12a7c8600000000, 0x4571e6d500000000, 0x06ba405200000000, + 0x4dc6d27200000000, 0x0e0d74f500000000, 0x8a56eea600000000, + 0xc99d482100000000, 0x61379bf000000000, 0x22fc3d7700000000, + 0xa6a7a72400000000, 0xe56c01a300000000, 0xae10938300000000, + 0xeddb350400000000, 0x6980af5700000000, 0x2a4b09d000000000, + 0xff788b1600000000, 0xbcb32d9100000000, 0x38e8b7c200000000, + 0x7b23114500000000, 0x305f836500000000, 0x739425e200000000, + 0xf7cfbfb100000000, 0xb404193600000000, 0xe69c69c900000000, + 0xa557cf4e00000000, 0x210c551d00000000, 0x62c7f39a00000000, + 0x29bb61ba00000000, 0x6a70c73d00000000, 0xee2b5d6e00000000, + 0xade0fbe900000000, 0x78d3792f00000000, 0x3b18dfa800000000, + 0xbf4345fb00000000, 0xfc88e37c00000000, 0xb7f4715c00000000, + 0xf43fd7db00000000, 0x70644d8800000000, 0x33afeb0f00000000, + 0x9b0538de00000000, 0xd8ce9e5900000000, 0x5c95040a00000000, + 0x1f5ea28d00000000, 0x542230ad00000000, 0x17e9962a00000000, + 0x93b20c7900000000, 0xd079aafe00000000, 0x054a283800000000, + 0x46818ebf00000000, 0xc2da14ec00000000, 0x8111b26b00000000, + 0xca6d204b00000000, 0x89a686cc00000000, 0x0dfd1c9f00000000, + 0x4e36ba1800000000}, + {0x0000000000000000, 0xe1b652ef00000000, 0x836bd40500000000, + 0x62dd86ea00000000, 0x06d7a80b00000000, 0xe761fae400000000, + 0x85bc7c0e00000000, 0x640a2ee100000000, 0x0cae511700000000, + 0xed1803f800000000, 0x8fc5851200000000, 0x6e73d7fd00000000, + 0x0a79f91c00000000, 0xebcfabf300000000, 0x89122d1900000000, + 0x68a47ff600000000, 0x185ca32e00000000, 0xf9eaf1c100000000, + 0x9b37772b00000000, 0x7a8125c400000000, 0x1e8b0b2500000000, + 0xff3d59ca00000000, 0x9de0df2000000000, 0x7c568dcf00000000, + 0x14f2f23900000000, 0xf544a0d600000000, 0x9799263c00000000, + 0x762f74d300000000, 0x12255a3200000000, 0xf39308dd00000000, + 0x914e8e3700000000, 0x70f8dcd800000000, 0x30b8465d00000000, + 0xd10e14b200000000, 0xb3d3925800000000, 0x5265c0b700000000, + 0x366fee5600000000, 0xd7d9bcb900000000, 0xb5043a5300000000, + 0x54b268bc00000000, 0x3c16174a00000000, 0xdda045a500000000, + 0xbf7dc34f00000000, 0x5ecb91a000000000, 0x3ac1bf4100000000, + 0xdb77edae00000000, 0xb9aa6b4400000000, 0x581c39ab00000000, + 0x28e4e57300000000, 0xc952b79c00000000, 0xab8f317600000000, + 0x4a39639900000000, 0x2e334d7800000000, 0xcf851f9700000000, + 0xad58997d00000000, 0x4ceecb9200000000, 0x244ab46400000000, + 0xc5fce68b00000000, 0xa721606100000000, 0x4697328e00000000, + 0x229d1c6f00000000, 0xc32b4e8000000000, 0xa1f6c86a00000000, + 0x40409a8500000000, 0x60708dba00000000, 0x81c6df5500000000, + 0xe31b59bf00000000, 0x02ad0b5000000000, 0x66a725b100000000, + 0x8711775e00000000, 0xe5ccf1b400000000, 0x047aa35b00000000, + 0x6cdedcad00000000, 0x8d688e4200000000, 0xefb508a800000000, + 0x0e035a4700000000, 0x6a0974a600000000, 0x8bbf264900000000, + 0xe962a0a300000000, 0x08d4f24c00000000, 0x782c2e9400000000, + 0x999a7c7b00000000, 0xfb47fa9100000000, 0x1af1a87e00000000, + 0x7efb869f00000000, 0x9f4dd47000000000, 0xfd90529a00000000, + 0x1c26007500000000, 0x74827f8300000000, 0x95342d6c00000000, + 0xf7e9ab8600000000, 0x165ff96900000000, 0x7255d78800000000, + 0x93e3856700000000, 0xf13e038d00000000, 0x1088516200000000, + 0x50c8cbe700000000, 0xb17e990800000000, 0xd3a31fe200000000, + 0x32154d0d00000000, 0x561f63ec00000000, 0xb7a9310300000000, + 0xd574b7e900000000, 0x34c2e50600000000, 0x5c669af000000000, + 0xbdd0c81f00000000, 0xdf0d4ef500000000, 0x3ebb1c1a00000000, + 0x5ab132fb00000000, 0xbb07601400000000, 0xd9dae6fe00000000, + 0x386cb41100000000, 0x489468c900000000, 0xa9223a2600000000, + 0xcbffbccc00000000, 0x2a49ee2300000000, 0x4e43c0c200000000, + 0xaff5922d00000000, 0xcd2814c700000000, 0x2c9e462800000000, + 0x443a39de00000000, 0xa58c6b3100000000, 0xc751eddb00000000, + 0x26e7bf3400000000, 0x42ed91d500000000, 0xa35bc33a00000000, + 0xc18645d000000000, 0x2030173f00000000, 0x81e66bae00000000, + 0x6050394100000000, 0x028dbfab00000000, 0xe33bed4400000000, + 0x8731c3a500000000, 0x6687914a00000000, 0x045a17a000000000, + 0xe5ec454f00000000, 0x8d483ab900000000, 0x6cfe685600000000, + 0x0e23eebc00000000, 0xef95bc5300000000, 0x8b9f92b200000000, + 0x6a29c05d00000000, 0x08f446b700000000, 0xe942145800000000, + 0x99bac88000000000, 0x780c9a6f00000000, 0x1ad11c8500000000, + 0xfb674e6a00000000, 0x9f6d608b00000000, 0x7edb326400000000, + 0x1c06b48e00000000, 0xfdb0e66100000000, 0x9514999700000000, + 0x74a2cb7800000000, 0x167f4d9200000000, 0xf7c91f7d00000000, + 0x93c3319c00000000, 0x7275637300000000, 0x10a8e59900000000, + 0xf11eb77600000000, 0xb15e2df300000000, 0x50e87f1c00000000, + 0x3235f9f600000000, 0xd383ab1900000000, 0xb78985f800000000, + 0x563fd71700000000, 0x34e251fd00000000, 0xd554031200000000, + 0xbdf07ce400000000, 0x5c462e0b00000000, 0x3e9ba8e100000000, + 0xdf2dfa0e00000000, 0xbb27d4ef00000000, 0x5a91860000000000, + 0x384c00ea00000000, 0xd9fa520500000000, 0xa9028edd00000000, + 0x48b4dc3200000000, 0x2a695ad800000000, 0xcbdf083700000000, + 0xafd526d600000000, 0x4e63743900000000, 0x2cbef2d300000000, + 0xcd08a03c00000000, 0xa5acdfca00000000, 0x441a8d2500000000, + 0x26c70bcf00000000, 0xc771592000000000, 0xa37b77c100000000, + 0x42cd252e00000000, 0x2010a3c400000000, 0xc1a6f12b00000000, + 0xe196e61400000000, 0x0020b4fb00000000, 0x62fd321100000000, + 0x834b60fe00000000, 0xe7414e1f00000000, 0x06f71cf000000000, + 0x642a9a1a00000000, 0x859cc8f500000000, 0xed38b70300000000, + 0x0c8ee5ec00000000, 0x6e53630600000000, 0x8fe531e900000000, + 0xebef1f0800000000, 0x0a594de700000000, 0x6884cb0d00000000, + 0x893299e200000000, 0xf9ca453a00000000, 0x187c17d500000000, + 0x7aa1913f00000000, 0x9b17c3d000000000, 0xff1ded3100000000, + 0x1eabbfde00000000, 0x7c76393400000000, 0x9dc06bdb00000000, + 0xf564142d00000000, 0x14d246c200000000, 0x760fc02800000000, + 0x97b992c700000000, 0xf3b3bc2600000000, 0x1205eec900000000, + 0x70d8682300000000, 0x916e3acc00000000, 0xd12ea04900000000, + 0x3098f2a600000000, 0x5245744c00000000, 0xb3f326a300000000, + 0xd7f9084200000000, 0x364f5aad00000000, 0x5492dc4700000000, + 0xb5248ea800000000, 0xdd80f15e00000000, 0x3c36a3b100000000, + 0x5eeb255b00000000, 0xbf5d77b400000000, 0xdb57595500000000, + 0x3ae10bba00000000, 0x583c8d5000000000, 0xb98adfbf00000000, + 0xc972036700000000, 0x28c4518800000000, 0x4a19d76200000000, + 0xabaf858d00000000, 0xcfa5ab6c00000000, 0x2e13f98300000000, + 0x4cce7f6900000000, 0xad782d8600000000, 0xc5dc527000000000, + 0x246a009f00000000, 0x46b7867500000000, 0xa701d49a00000000, + 0xc30bfa7b00000000, 0x22bda89400000000, 0x40602e7e00000000, + 0xa1d67c9100000000}, + {0x0000000000000000, 0x5880e2d700000000, 0xf106b47400000000, + 0xa98656a300000000, 0xe20d68e900000000, 0xba8d8a3e00000000, + 0x130bdc9d00000000, 0x4b8b3e4a00000000, 0x851da10900000000, + 0xdd9d43de00000000, 0x741b157d00000000, 0x2c9bf7aa00000000, + 0x6710c9e000000000, 0x3f902b3700000000, 0x96167d9400000000, + 0xce969f4300000000, 0x0a3b421300000000, 0x52bba0c400000000, + 0xfb3df66700000000, 0xa3bd14b000000000, 0xe8362afa00000000, + 0xb0b6c82d00000000, 0x19309e8e00000000, 0x41b07c5900000000, + 0x8f26e31a00000000, 0xd7a601cd00000000, 0x7e20576e00000000, + 0x26a0b5b900000000, 0x6d2b8bf300000000, 0x35ab692400000000, + 0x9c2d3f8700000000, 0xc4addd5000000000, 0x1476842600000000, + 0x4cf666f100000000, 0xe570305200000000, 0xbdf0d28500000000, + 0xf67beccf00000000, 0xaefb0e1800000000, 0x077d58bb00000000, + 0x5ffdba6c00000000, 0x916b252f00000000, 0xc9ebc7f800000000, + 0x606d915b00000000, 0x38ed738c00000000, 0x73664dc600000000, + 0x2be6af1100000000, 0x8260f9b200000000, 0xdae01b6500000000, + 0x1e4dc63500000000, 0x46cd24e200000000, 0xef4b724100000000, + 0xb7cb909600000000, 0xfc40aedc00000000, 0xa4c04c0b00000000, + 0x0d461aa800000000, 0x55c6f87f00000000, 0x9b50673c00000000, + 0xc3d085eb00000000, 0x6a56d34800000000, 0x32d6319f00000000, + 0x795d0fd500000000, 0x21dded0200000000, 0x885bbba100000000, + 0xd0db597600000000, 0x28ec084d00000000, 0x706cea9a00000000, + 0xd9eabc3900000000, 0x816a5eee00000000, 0xcae160a400000000, + 0x9261827300000000, 0x3be7d4d000000000, 0x6367360700000000, + 0xadf1a94400000000, 0xf5714b9300000000, 0x5cf71d3000000000, + 0x0477ffe700000000, 0x4ffcc1ad00000000, 0x177c237a00000000, + 0xbefa75d900000000, 0xe67a970e00000000, 0x22d74a5e00000000, + 0x7a57a88900000000, 0xd3d1fe2a00000000, 0x8b511cfd00000000, + 0xc0da22b700000000, 0x985ac06000000000, 0x31dc96c300000000, + 0x695c741400000000, 0xa7caeb5700000000, 0xff4a098000000000, + 0x56cc5f2300000000, 0x0e4cbdf400000000, 0x45c783be00000000, + 0x1d47616900000000, 0xb4c137ca00000000, 0xec41d51d00000000, + 0x3c9a8c6b00000000, 0x641a6ebc00000000, 0xcd9c381f00000000, + 0x951cdac800000000, 0xde97e48200000000, 0x8617065500000000, + 0x2f9150f600000000, 0x7711b22100000000, 0xb9872d6200000000, + 0xe107cfb500000000, 0x4881991600000000, 0x10017bc100000000, + 0x5b8a458b00000000, 0x030aa75c00000000, 0xaa8cf1ff00000000, + 0xf20c132800000000, 0x36a1ce7800000000, 0x6e212caf00000000, + 0xc7a77a0c00000000, 0x9f2798db00000000, 0xd4aca69100000000, + 0x8c2c444600000000, 0x25aa12e500000000, 0x7d2af03200000000, + 0xb3bc6f7100000000, 0xeb3c8da600000000, 0x42badb0500000000, + 0x1a3a39d200000000, 0x51b1079800000000, 0x0931e54f00000000, + 0xa0b7b3ec00000000, 0xf837513b00000000, 0x50d8119a00000000, + 0x0858f34d00000000, 0xa1dea5ee00000000, 0xf95e473900000000, + 0xb2d5797300000000, 0xea559ba400000000, 0x43d3cd0700000000, + 0x1b532fd000000000, 0xd5c5b09300000000, 0x8d45524400000000, + 0x24c304e700000000, 0x7c43e63000000000, 0x37c8d87a00000000, + 0x6f483aad00000000, 0xc6ce6c0e00000000, 0x9e4e8ed900000000, + 0x5ae3538900000000, 0x0263b15e00000000, 0xabe5e7fd00000000, + 0xf365052a00000000, 0xb8ee3b6000000000, 0xe06ed9b700000000, + 0x49e88f1400000000, 0x11686dc300000000, 0xdffef28000000000, + 0x877e105700000000, 0x2ef846f400000000, 0x7678a42300000000, + 0x3df39a6900000000, 0x657378be00000000, 0xccf52e1d00000000, + 0x9475ccca00000000, 0x44ae95bc00000000, 0x1c2e776b00000000, + 0xb5a821c800000000, 0xed28c31f00000000, 0xa6a3fd5500000000, + 0xfe231f8200000000, 0x57a5492100000000, 0x0f25abf600000000, + 0xc1b334b500000000, 0x9933d66200000000, 0x30b580c100000000, + 0x6835621600000000, 0x23be5c5c00000000, 0x7b3ebe8b00000000, + 0xd2b8e82800000000, 0x8a380aff00000000, 0x4e95d7af00000000, + 0x1615357800000000, 0xbf9363db00000000, 0xe713810c00000000, + 0xac98bf4600000000, 0xf4185d9100000000, 0x5d9e0b3200000000, + 0x051ee9e500000000, 0xcb8876a600000000, 0x9308947100000000, + 0x3a8ec2d200000000, 0x620e200500000000, 0x29851e4f00000000, + 0x7105fc9800000000, 0xd883aa3b00000000, 0x800348ec00000000, + 0x783419d700000000, 0x20b4fb0000000000, 0x8932ada300000000, + 0xd1b24f7400000000, 0x9a39713e00000000, 0xc2b993e900000000, + 0x6b3fc54a00000000, 0x33bf279d00000000, 0xfd29b8de00000000, + 0xa5a95a0900000000, 0x0c2f0caa00000000, 0x54afee7d00000000, + 0x1f24d03700000000, 0x47a432e000000000, 0xee22644300000000, + 0xb6a2869400000000, 0x720f5bc400000000, 0x2a8fb91300000000, + 0x8309efb000000000, 0xdb890d6700000000, 0x9002332d00000000, + 0xc882d1fa00000000, 0x6104875900000000, 0x3984658e00000000, + 0xf712facd00000000, 0xaf92181a00000000, 0x06144eb900000000, + 0x5e94ac6e00000000, 0x151f922400000000, 0x4d9f70f300000000, + 0xe419265000000000, 0xbc99c48700000000, 0x6c429df100000000, + 0x34c27f2600000000, 0x9d44298500000000, 0xc5c4cb5200000000, + 0x8e4ff51800000000, 0xd6cf17cf00000000, 0x7f49416c00000000, + 0x27c9a3bb00000000, 0xe95f3cf800000000, 0xb1dfde2f00000000, + 0x1859888c00000000, 0x40d96a5b00000000, 0x0b52541100000000, + 0x53d2b6c600000000, 0xfa54e06500000000, 0xa2d402b200000000, + 0x6679dfe200000000, 0x3ef93d3500000000, 0x977f6b9600000000, + 0xcfff894100000000, 0x8474b70b00000000, 0xdcf455dc00000000, + 0x7572037f00000000, 0x2df2e1a800000000, 0xe3647eeb00000000, + 0xbbe49c3c00000000, 0x1262ca9f00000000, 0x4ae2284800000000, + 0x0169160200000000, 0x59e9f4d500000000, 0xf06fa27600000000, + 0xa8ef40a100000000}, + {0x0000000000000000, 0x463b676500000000, 0x8c76ceca00000000, + 0xca4da9af00000000, 0x59ebed4e00000000, 0x1fd08a2b00000000, + 0xd59d238400000000, 0x93a644e100000000, 0xb2d6db9d00000000, + 0xf4edbcf800000000, 0x3ea0155700000000, 0x789b723200000000, + 0xeb3d36d300000000, 0xad0651b600000000, 0x674bf81900000000, + 0x21709f7c00000000, 0x25abc6e000000000, 0x6390a18500000000, + 0xa9dd082a00000000, 0xefe66f4f00000000, 0x7c402bae00000000, + 0x3a7b4ccb00000000, 0xf036e56400000000, 0xb60d820100000000, + 0x977d1d7d00000000, 0xd1467a1800000000, 0x1b0bd3b700000000, + 0x5d30b4d200000000, 0xce96f03300000000, 0x88ad975600000000, + 0x42e03ef900000000, 0x04db599c00000000, 0x0b50fc1a00000000, + 0x4d6b9b7f00000000, 0x872632d000000000, 0xc11d55b500000000, + 0x52bb115400000000, 0x1480763100000000, 0xdecddf9e00000000, + 0x98f6b8fb00000000, 0xb986278700000000, 0xffbd40e200000000, + 0x35f0e94d00000000, 0x73cb8e2800000000, 0xe06dcac900000000, + 0xa656adac00000000, 0x6c1b040300000000, 0x2a20636600000000, + 0x2efb3afa00000000, 0x68c05d9f00000000, 0xa28df43000000000, + 0xe4b6935500000000, 0x7710d7b400000000, 0x312bb0d100000000, + 0xfb66197e00000000, 0xbd5d7e1b00000000, 0x9c2de16700000000, + 0xda16860200000000, 0x105b2fad00000000, 0x566048c800000000, + 0xc5c60c2900000000, 0x83fd6b4c00000000, 0x49b0c2e300000000, + 0x0f8ba58600000000, 0x16a0f83500000000, 0x509b9f5000000000, + 0x9ad636ff00000000, 0xdced519a00000000, 0x4f4b157b00000000, + 0x0970721e00000000, 0xc33ddbb100000000, 0x8506bcd400000000, + 0xa47623a800000000, 0xe24d44cd00000000, 0x2800ed6200000000, + 0x6e3b8a0700000000, 0xfd9dcee600000000, 0xbba6a98300000000, + 0x71eb002c00000000, 0x37d0674900000000, 0x330b3ed500000000, + 0x753059b000000000, 0xbf7df01f00000000, 0xf946977a00000000, + 0x6ae0d39b00000000, 0x2cdbb4fe00000000, 0xe6961d5100000000, + 0xa0ad7a3400000000, 0x81dde54800000000, 0xc7e6822d00000000, + 0x0dab2b8200000000, 0x4b904ce700000000, 0xd836080600000000, + 0x9e0d6f6300000000, 0x5440c6cc00000000, 0x127ba1a900000000, + 0x1df0042f00000000, 0x5bcb634a00000000, 0x9186cae500000000, + 0xd7bdad8000000000, 0x441be96100000000, 0x02208e0400000000, + 0xc86d27ab00000000, 0x8e5640ce00000000, 0xaf26dfb200000000, + 0xe91db8d700000000, 0x2350117800000000, 0x656b761d00000000, + 0xf6cd32fc00000000, 0xb0f6559900000000, 0x7abbfc3600000000, + 0x3c809b5300000000, 0x385bc2cf00000000, 0x7e60a5aa00000000, + 0xb42d0c0500000000, 0xf2166b6000000000, 0x61b02f8100000000, + 0x278b48e400000000, 0xedc6e14b00000000, 0xabfd862e00000000, + 0x8a8d195200000000, 0xccb67e3700000000, 0x06fbd79800000000, + 0x40c0b0fd00000000, 0xd366f41c00000000, 0x955d937900000000, + 0x5f103ad600000000, 0x192b5db300000000, 0x2c40f16b00000000, + 0x6a7b960e00000000, 0xa0363fa100000000, 0xe60d58c400000000, + 0x75ab1c2500000000, 0x33907b4000000000, 0xf9ddd2ef00000000, + 0xbfe6b58a00000000, 0x9e962af600000000, 0xd8ad4d9300000000, + 0x12e0e43c00000000, 0x54db835900000000, 0xc77dc7b800000000, + 0x8146a0dd00000000, 0x4b0b097200000000, 0x0d306e1700000000, + 0x09eb378b00000000, 0x4fd050ee00000000, 0x859df94100000000, + 0xc3a69e2400000000, 0x5000dac500000000, 0x163bbda000000000, + 0xdc76140f00000000, 0x9a4d736a00000000, 0xbb3dec1600000000, + 0xfd068b7300000000, 0x374b22dc00000000, 0x717045b900000000, + 0xe2d6015800000000, 0xa4ed663d00000000, 0x6ea0cf9200000000, + 0x289ba8f700000000, 0x27100d7100000000, 0x612b6a1400000000, + 0xab66c3bb00000000, 0xed5da4de00000000, 0x7efbe03f00000000, + 0x38c0875a00000000, 0xf28d2ef500000000, 0xb4b6499000000000, + 0x95c6d6ec00000000, 0xd3fdb18900000000, 0x19b0182600000000, + 0x5f8b7f4300000000, 0xcc2d3ba200000000, 0x8a165cc700000000, + 0x405bf56800000000, 0x0660920d00000000, 0x02bbcb9100000000, + 0x4480acf400000000, 0x8ecd055b00000000, 0xc8f6623e00000000, + 0x5b5026df00000000, 0x1d6b41ba00000000, 0xd726e81500000000, + 0x911d8f7000000000, 0xb06d100c00000000, 0xf656776900000000, + 0x3c1bdec600000000, 0x7a20b9a300000000, 0xe986fd4200000000, + 0xafbd9a2700000000, 0x65f0338800000000, 0x23cb54ed00000000, + 0x3ae0095e00000000, 0x7cdb6e3b00000000, 0xb696c79400000000, + 0xf0ada0f100000000, 0x630be41000000000, 0x2530837500000000, + 0xef7d2ada00000000, 0xa9464dbf00000000, 0x8836d2c300000000, + 0xce0db5a600000000, 0x04401c0900000000, 0x427b7b6c00000000, + 0xd1dd3f8d00000000, 0x97e658e800000000, 0x5dabf14700000000, + 0x1b90962200000000, 0x1f4bcfbe00000000, 0x5970a8db00000000, + 0x933d017400000000, 0xd506661100000000, 0x46a022f000000000, + 0x009b459500000000, 0xcad6ec3a00000000, 0x8ced8b5f00000000, + 0xad9d142300000000, 0xeba6734600000000, 0x21ebdae900000000, + 0x67d0bd8c00000000, 0xf476f96d00000000, 0xb24d9e0800000000, + 0x780037a700000000, 0x3e3b50c200000000, 0x31b0f54400000000, + 0x778b922100000000, 0xbdc63b8e00000000, 0xfbfd5ceb00000000, + 0x685b180a00000000, 0x2e607f6f00000000, 0xe42dd6c000000000, + 0xa216b1a500000000, 0x83662ed900000000, 0xc55d49bc00000000, + 0x0f10e01300000000, 0x492b877600000000, 0xda8dc39700000000, + 0x9cb6a4f200000000, 0x56fb0d5d00000000, 0x10c06a3800000000, + 0x141b33a400000000, 0x522054c100000000, 0x986dfd6e00000000, + 0xde569a0b00000000, 0x4df0deea00000000, 0x0bcbb98f00000000, + 0xc186102000000000, 0x87bd774500000000, 0xa6cde83900000000, + 0xe0f68f5c00000000, 0x2abb26f300000000, 0x6c80419600000000, + 0xff26057700000000, 0xb91d621200000000, 0x7350cbbd00000000, + 0x356bacd800000000}, + {0x0000000000000000, 0x9e83da9f00000000, 0x7d01c4e400000000, + 0xe3821e7b00000000, 0xbb04f91200000000, 0x2587238d00000000, + 0xc6053df600000000, 0x5886e76900000000, 0x7609f22500000000, + 0xe88a28ba00000000, 0x0b0836c100000000, 0x958bec5e00000000, + 0xcd0d0b3700000000, 0x538ed1a800000000, 0xb00ccfd300000000, + 0x2e8f154c00000000, 0xec12e44b00000000, 0x72913ed400000000, + 0x911320af00000000, 0x0f90fa3000000000, 0x57161d5900000000, + 0xc995c7c600000000, 0x2a17d9bd00000000, 0xb494032200000000, + 0x9a1b166e00000000, 0x0498ccf100000000, 0xe71ad28a00000000, + 0x7999081500000000, 0x211fef7c00000000, 0xbf9c35e300000000, + 0x5c1e2b9800000000, 0xc29df10700000000, 0xd825c89700000000, + 0x46a6120800000000, 0xa5240c7300000000, 0x3ba7d6ec00000000, + 0x6321318500000000, 0xfda2eb1a00000000, 0x1e20f56100000000, + 0x80a32ffe00000000, 0xae2c3ab200000000, 0x30afe02d00000000, + 0xd32dfe5600000000, 0x4dae24c900000000, 0x1528c3a000000000, + 0x8bab193f00000000, 0x6829074400000000, 0xf6aadddb00000000, + 0x34372cdc00000000, 0xaab4f64300000000, 0x4936e83800000000, + 0xd7b532a700000000, 0x8f33d5ce00000000, 0x11b00f5100000000, + 0xf232112a00000000, 0x6cb1cbb500000000, 0x423edef900000000, + 0xdcbd046600000000, 0x3f3f1a1d00000000, 0xa1bcc08200000000, + 0xf93a27eb00000000, 0x67b9fd7400000000, 0x843be30f00000000, + 0x1ab8399000000000, 0xf14de1f400000000, 0x6fce3b6b00000000, + 0x8c4c251000000000, 0x12cfff8f00000000, 0x4a4918e600000000, + 0xd4cac27900000000, 0x3748dc0200000000, 0xa9cb069d00000000, + 0x874413d100000000, 0x19c7c94e00000000, 0xfa45d73500000000, + 0x64c60daa00000000, 0x3c40eac300000000, 0xa2c3305c00000000, + 0x41412e2700000000, 0xdfc2f4b800000000, 0x1d5f05bf00000000, + 0x83dcdf2000000000, 0x605ec15b00000000, 0xfedd1bc400000000, + 0xa65bfcad00000000, 0x38d8263200000000, 0xdb5a384900000000, + 0x45d9e2d600000000, 0x6b56f79a00000000, 0xf5d52d0500000000, + 0x1657337e00000000, 0x88d4e9e100000000, 0xd0520e8800000000, + 0x4ed1d41700000000, 0xad53ca6c00000000, 0x33d010f300000000, + 0x2968296300000000, 0xb7ebf3fc00000000, 0x5469ed8700000000, + 0xcaea371800000000, 0x926cd07100000000, 0x0cef0aee00000000, + 0xef6d149500000000, 0x71eece0a00000000, 0x5f61db4600000000, + 0xc1e201d900000000, 0x22601fa200000000, 0xbce3c53d00000000, + 0xe465225400000000, 0x7ae6f8cb00000000, 0x9964e6b000000000, + 0x07e73c2f00000000, 0xc57acd2800000000, 0x5bf917b700000000, + 0xb87b09cc00000000, 0x26f8d35300000000, 0x7e7e343a00000000, + 0xe0fdeea500000000, 0x037ff0de00000000, 0x9dfc2a4100000000, + 0xb3733f0d00000000, 0x2df0e59200000000, 0xce72fbe900000000, + 0x50f1217600000000, 0x0877c61f00000000, 0x96f41c8000000000, + 0x757602fb00000000, 0xebf5d86400000000, 0xa39db33200000000, + 0x3d1e69ad00000000, 0xde9c77d600000000, 0x401fad4900000000, + 0x18994a2000000000, 0x861a90bf00000000, 0x65988ec400000000, + 0xfb1b545b00000000, 0xd594411700000000, 0x4b179b8800000000, + 0xa89585f300000000, 0x36165f6c00000000, 0x6e90b80500000000, + 0xf013629a00000000, 0x13917ce100000000, 0x8d12a67e00000000, + 0x4f8f577900000000, 0xd10c8de600000000, 0x328e939d00000000, + 0xac0d490200000000, 0xf48bae6b00000000, 0x6a0874f400000000, + 0x898a6a8f00000000, 0x1709b01000000000, 0x3986a55c00000000, + 0xa7057fc300000000, 0x448761b800000000, 0xda04bb2700000000, + 0x82825c4e00000000, 0x1c0186d100000000, 0xff8398aa00000000, + 0x6100423500000000, 0x7bb87ba500000000, 0xe53ba13a00000000, + 0x06b9bf4100000000, 0x983a65de00000000, 0xc0bc82b700000000, + 0x5e3f582800000000, 0xbdbd465300000000, 0x233e9ccc00000000, + 0x0db1898000000000, 0x9332531f00000000, 0x70b04d6400000000, + 0xee3397fb00000000, 0xb6b5709200000000, 0x2836aa0d00000000, + 0xcbb4b47600000000, 0x55376ee900000000, 0x97aa9fee00000000, + 0x0929457100000000, 0xeaab5b0a00000000, 0x7428819500000000, + 0x2cae66fc00000000, 0xb22dbc6300000000, 0x51afa21800000000, + 0xcf2c788700000000, 0xe1a36dcb00000000, 0x7f20b75400000000, + 0x9ca2a92f00000000, 0x022173b000000000, 0x5aa794d900000000, + 0xc4244e4600000000, 0x27a6503d00000000, 0xb9258aa200000000, + 0x52d052c600000000, 0xcc53885900000000, 0x2fd1962200000000, + 0xb1524cbd00000000, 0xe9d4abd400000000, 0x7757714b00000000, + 0x94d56f3000000000, 0x0a56b5af00000000, 0x24d9a0e300000000, + 0xba5a7a7c00000000, 0x59d8640700000000, 0xc75bbe9800000000, + 0x9fdd59f100000000, 0x015e836e00000000, 0xe2dc9d1500000000, + 0x7c5f478a00000000, 0xbec2b68d00000000, 0x20416c1200000000, + 0xc3c3726900000000, 0x5d40a8f600000000, 0x05c64f9f00000000, + 0x9b45950000000000, 0x78c78b7b00000000, 0xe64451e400000000, + 0xc8cb44a800000000, 0x56489e3700000000, 0xb5ca804c00000000, + 0x2b495ad300000000, 0x73cfbdba00000000, 0xed4c672500000000, + 0x0ece795e00000000, 0x904da3c100000000, 0x8af59a5100000000, + 0x147640ce00000000, 0xf7f45eb500000000, 0x6977842a00000000, + 0x31f1634300000000, 0xaf72b9dc00000000, 0x4cf0a7a700000000, + 0xd2737d3800000000, 0xfcfc687400000000, 0x627fb2eb00000000, + 0x81fdac9000000000, 0x1f7e760f00000000, 0x47f8916600000000, + 0xd97b4bf900000000, 0x3af9558200000000, 0xa47a8f1d00000000, + 0x66e77e1a00000000, 0xf864a48500000000, 0x1be6bafe00000000, + 0x8565606100000000, 0xdde3870800000000, 0x43605d9700000000, + 0xa0e243ec00000000, 0x3e61997300000000, 0x10ee8c3f00000000, + 0x8e6d56a000000000, 0x6def48db00000000, 0xf36c924400000000, + 0xabea752d00000000, 0x3569afb200000000, 0xd6ebb1c900000000, + 0x48686b5600000000}, + {0x0000000000000000, 0xc064281700000000, 0x80c9502e00000000, + 0x40ad783900000000, 0x0093a15c00000000, 0xc0f7894b00000000, + 0x805af17200000000, 0x403ed96500000000, 0x002643b900000000, + 0xc0426bae00000000, 0x80ef139700000000, 0x408b3b8000000000, + 0x00b5e2e500000000, 0xc0d1caf200000000, 0x807cb2cb00000000, + 0x40189adc00000000, 0x414af7a900000000, 0x812edfbe00000000, + 0xc183a78700000000, 0x01e78f9000000000, 0x41d956f500000000, + 0x81bd7ee200000000, 0xc11006db00000000, 0x01742ecc00000000, + 0x416cb41000000000, 0x81089c0700000000, 0xc1a5e43e00000000, + 0x01c1cc2900000000, 0x41ff154c00000000, 0x819b3d5b00000000, + 0xc136456200000000, 0x01526d7500000000, 0xc3929f8800000000, + 0x03f6b79f00000000, 0x435bcfa600000000, 0x833fe7b100000000, + 0xc3013ed400000000, 0x036516c300000000, 0x43c86efa00000000, + 0x83ac46ed00000000, 0xc3b4dc3100000000, 0x03d0f42600000000, + 0x437d8c1f00000000, 0x8319a40800000000, 0xc3277d6d00000000, + 0x0343557a00000000, 0x43ee2d4300000000, 0x838a055400000000, + 0x82d8682100000000, 0x42bc403600000000, 0x0211380f00000000, + 0xc275101800000000, 0x824bc97d00000000, 0x422fe16a00000000, + 0x0282995300000000, 0xc2e6b14400000000, 0x82fe2b9800000000, + 0x429a038f00000000, 0x02377bb600000000, 0xc25353a100000000, + 0x826d8ac400000000, 0x4209a2d300000000, 0x02a4daea00000000, + 0xc2c0f2fd00000000, 0xc7234eca00000000, 0x074766dd00000000, + 0x47ea1ee400000000, 0x878e36f300000000, 0xc7b0ef9600000000, + 0x07d4c78100000000, 0x4779bfb800000000, 0x871d97af00000000, + 0xc7050d7300000000, 0x0761256400000000, 0x47cc5d5d00000000, + 0x87a8754a00000000, 0xc796ac2f00000000, 0x07f2843800000000, + 0x475ffc0100000000, 0x873bd41600000000, 0x8669b96300000000, + 0x460d917400000000, 0x06a0e94d00000000, 0xc6c4c15a00000000, + 0x86fa183f00000000, 0x469e302800000000, 0x0633481100000000, + 0xc657600600000000, 0x864ffada00000000, 0x462bd2cd00000000, + 0x0686aaf400000000, 0xc6e282e300000000, 0x86dc5b8600000000, + 0x46b8739100000000, 0x06150ba800000000, 0xc67123bf00000000, + 0x04b1d14200000000, 0xc4d5f95500000000, 0x8478816c00000000, + 0x441ca97b00000000, 0x0422701e00000000, 0xc446580900000000, + 0x84eb203000000000, 0x448f082700000000, 0x049792fb00000000, + 0xc4f3baec00000000, 0x845ec2d500000000, 0x443aeac200000000, + 0x040433a700000000, 0xc4601bb000000000, 0x84cd638900000000, + 0x44a94b9e00000000, 0x45fb26eb00000000, 0x859f0efc00000000, + 0xc53276c500000000, 0x05565ed200000000, 0x456887b700000000, + 0x850cafa000000000, 0xc5a1d79900000000, 0x05c5ff8e00000000, + 0x45dd655200000000, 0x85b94d4500000000, 0xc514357c00000000, + 0x05701d6b00000000, 0x454ec40e00000000, 0x852aec1900000000, + 0xc587942000000000, 0x05e3bc3700000000, 0xcf41ed4f00000000, + 0x0f25c55800000000, 0x4f88bd6100000000, 0x8fec957600000000, + 0xcfd24c1300000000, 0x0fb6640400000000, 0x4f1b1c3d00000000, + 0x8f7f342a00000000, 0xcf67aef600000000, 0x0f0386e100000000, + 0x4faefed800000000, 0x8fcad6cf00000000, 0xcff40faa00000000, + 0x0f9027bd00000000, 0x4f3d5f8400000000, 0x8f59779300000000, + 0x8e0b1ae600000000, 0x4e6f32f100000000, 0x0ec24ac800000000, + 0xcea662df00000000, 0x8e98bbba00000000, 0x4efc93ad00000000, + 0x0e51eb9400000000, 0xce35c38300000000, 0x8e2d595f00000000, + 0x4e49714800000000, 0x0ee4097100000000, 0xce80216600000000, + 0x8ebef80300000000, 0x4edad01400000000, 0x0e77a82d00000000, + 0xce13803a00000000, 0x0cd372c700000000, 0xccb75ad000000000, + 0x8c1a22e900000000, 0x4c7e0afe00000000, 0x0c40d39b00000000, + 0xcc24fb8c00000000, 0x8c8983b500000000, 0x4cedaba200000000, + 0x0cf5317e00000000, 0xcc91196900000000, 0x8c3c615000000000, + 0x4c58494700000000, 0x0c66902200000000, 0xcc02b83500000000, + 0x8cafc00c00000000, 0x4ccbe81b00000000, 0x4d99856e00000000, + 0x8dfdad7900000000, 0xcd50d54000000000, 0x0d34fd5700000000, + 0x4d0a243200000000, 0x8d6e0c2500000000, 0xcdc3741c00000000, + 0x0da75c0b00000000, 0x4dbfc6d700000000, 0x8ddbeec000000000, + 0xcd7696f900000000, 0x0d12beee00000000, 0x4d2c678b00000000, + 0x8d484f9c00000000, 0xcde537a500000000, 0x0d811fb200000000, + 0x0862a38500000000, 0xc8068b9200000000, 0x88abf3ab00000000, + 0x48cfdbbc00000000, 0x08f102d900000000, 0xc8952ace00000000, + 0x883852f700000000, 0x485c7ae000000000, 0x0844e03c00000000, + 0xc820c82b00000000, 0x888db01200000000, 0x48e9980500000000, + 0x08d7416000000000, 0xc8b3697700000000, 0x881e114e00000000, + 0x487a395900000000, 0x4928542c00000000, 0x894c7c3b00000000, + 0xc9e1040200000000, 0x09852c1500000000, 0x49bbf57000000000, + 0x89dfdd6700000000, 0xc972a55e00000000, 0x09168d4900000000, + 0x490e179500000000, 0x896a3f8200000000, 0xc9c747bb00000000, + 0x09a36fac00000000, 0x499db6c900000000, 0x89f99ede00000000, + 0xc954e6e700000000, 0x0930cef000000000, 0xcbf03c0d00000000, + 0x0b94141a00000000, 0x4b396c2300000000, 0x8b5d443400000000, + 0xcb639d5100000000, 0x0b07b54600000000, 0x4baacd7f00000000, + 0x8bcee56800000000, 0xcbd67fb400000000, 0x0bb257a300000000, + 0x4b1f2f9a00000000, 0x8b7b078d00000000, 0xcb45dee800000000, + 0x0b21f6ff00000000, 0x4b8c8ec600000000, 0x8be8a6d100000000, + 0x8abacba400000000, 0x4adee3b300000000, 0x0a739b8a00000000, + 0xca17b39d00000000, 0x8a296af800000000, 0x4a4d42ef00000000, + 0x0ae03ad600000000, 0xca8412c100000000, 0x8a9c881d00000000, + 0x4af8a00a00000000, 0x0a55d83300000000, 0xca31f02400000000, + 0x8a0f294100000000, 0x4a6b015600000000, 0x0ac6796f00000000, + 0xcaa2517800000000}, + {0x0000000000000000, 0xd4ea739b00000000, 0xe9d396ed00000000, + 0x3d39e57600000000, 0x93a15c0000000000, 0x474b2f9b00000000, + 0x7a72caed00000000, 0xae98b97600000000, 0x2643b90000000000, + 0xf2a9ca9b00000000, 0xcf902fed00000000, 0x1b7a5c7600000000, + 0xb5e2e50000000000, 0x6108969b00000000, 0x5c3173ed00000000, + 0x88db007600000000, 0x4c86720100000000, 0x986c019a00000000, + 0xa555e4ec00000000, 0x71bf977700000000, 0xdf272e0100000000, + 0x0bcd5d9a00000000, 0x36f4b8ec00000000, 0xe21ecb7700000000, + 0x6ac5cb0100000000, 0xbe2fb89a00000000, 0x83165dec00000000, + 0x57fc2e7700000000, 0xf964970100000000, 0x2d8ee49a00000000, + 0x10b701ec00000000, 0xc45d727700000000, 0x980ce50200000000, + 0x4ce6969900000000, 0x71df73ef00000000, 0xa535007400000000, + 0x0badb90200000000, 0xdf47ca9900000000, 0xe27e2fef00000000, + 0x36945c7400000000, 0xbe4f5c0200000000, 0x6aa52f9900000000, + 0x579ccaef00000000, 0x8376b97400000000, 0x2dee000200000000, + 0xf904739900000000, 0xc43d96ef00000000, 0x10d7e57400000000, + 0xd48a970300000000, 0x0060e49800000000, 0x3d5901ee00000000, + 0xe9b3727500000000, 0x472bcb0300000000, 0x93c1b89800000000, + 0xaef85dee00000000, 0x7a122e7500000000, 0xf2c92e0300000000, + 0x26235d9800000000, 0x1b1ab8ee00000000, 0xcff0cb7500000000, + 0x6168720300000000, 0xb582019800000000, 0x88bbe4ee00000000, + 0x5c51977500000000, 0x3019ca0500000000, 0xe4f3b99e00000000, + 0xd9ca5ce800000000, 0x0d202f7300000000, 0xa3b8960500000000, + 0x7752e59e00000000, 0x4a6b00e800000000, 0x9e81737300000000, + 0x165a730500000000, 0xc2b0009e00000000, 0xff89e5e800000000, + 0x2b63967300000000, 0x85fb2f0500000000, 0x51115c9e00000000, + 0x6c28b9e800000000, 0xb8c2ca7300000000, 0x7c9fb80400000000, + 0xa875cb9f00000000, 0x954c2ee900000000, 0x41a65d7200000000, + 0xef3ee40400000000, 0x3bd4979f00000000, 0x06ed72e900000000, + 0xd207017200000000, 0x5adc010400000000, 0x8e36729f00000000, + 0xb30f97e900000000, 0x67e5e47200000000, 0xc97d5d0400000000, + 0x1d972e9f00000000, 0x20aecbe900000000, 0xf444b87200000000, + 0xa8152f0700000000, 0x7cff5c9c00000000, 0x41c6b9ea00000000, + 0x952cca7100000000, 0x3bb4730700000000, 0xef5e009c00000000, + 0xd267e5ea00000000, 0x068d967100000000, 0x8e56960700000000, + 0x5abce59c00000000, 0x678500ea00000000, 0xb36f737100000000, + 0x1df7ca0700000000, 0xc91db99c00000000, 0xf4245cea00000000, + 0x20ce2f7100000000, 0xe4935d0600000000, 0x30792e9d00000000, + 0x0d40cbeb00000000, 0xd9aab87000000000, 0x7732010600000000, + 0xa3d8729d00000000, 0x9ee197eb00000000, 0x4a0be47000000000, + 0xc2d0e40600000000, 0x163a979d00000000, 0x2b0372eb00000000, + 0xffe9017000000000, 0x5171b80600000000, 0x859bcb9d00000000, + 0xb8a22eeb00000000, 0x6c485d7000000000, 0x6032940b00000000, + 0xb4d8e79000000000, 0x89e102e600000000, 0x5d0b717d00000000, + 0xf393c80b00000000, 0x2779bb9000000000, 0x1a405ee600000000, + 0xceaa2d7d00000000, 0x46712d0b00000000, 0x929b5e9000000000, + 0xafa2bbe600000000, 0x7b48c87d00000000, 0xd5d0710b00000000, + 0x013a029000000000, 0x3c03e7e600000000, 0xe8e9947d00000000, + 0x2cb4e60a00000000, 0xf85e959100000000, 0xc56770e700000000, + 0x118d037c00000000, 0xbf15ba0a00000000, 0x6bffc99100000000, + 0x56c62ce700000000, 0x822c5f7c00000000, 0x0af75f0a00000000, + 0xde1d2c9100000000, 0xe324c9e700000000, 0x37ceba7c00000000, + 0x9956030a00000000, 0x4dbc709100000000, 0x708595e700000000, + 0xa46fe67c00000000, 0xf83e710900000000, 0x2cd4029200000000, + 0x11ede7e400000000, 0xc507947f00000000, 0x6b9f2d0900000000, + 0xbf755e9200000000, 0x824cbbe400000000, 0x56a6c87f00000000, + 0xde7dc80900000000, 0x0a97bb9200000000, 0x37ae5ee400000000, + 0xe3442d7f00000000, 0x4ddc940900000000, 0x9936e79200000000, + 0xa40f02e400000000, 0x70e5717f00000000, 0xb4b8030800000000, + 0x6052709300000000, 0x5d6b95e500000000, 0x8981e67e00000000, + 0x27195f0800000000, 0xf3f32c9300000000, 0xcecac9e500000000, + 0x1a20ba7e00000000, 0x92fbba0800000000, 0x4611c99300000000, + 0x7b282ce500000000, 0xafc25f7e00000000, 0x015ae60800000000, + 0xd5b0959300000000, 0xe88970e500000000, 0x3c63037e00000000, + 0x502b5e0e00000000, 0x84c12d9500000000, 0xb9f8c8e300000000, + 0x6d12bb7800000000, 0xc38a020e00000000, 0x1760719500000000, + 0x2a5994e300000000, 0xfeb3e77800000000, 0x7668e70e00000000, + 0xa282949500000000, 0x9fbb71e300000000, 0x4b51027800000000, + 0xe5c9bb0e00000000, 0x3123c89500000000, 0x0c1a2de300000000, + 0xd8f05e7800000000, 0x1cad2c0f00000000, 0xc8475f9400000000, + 0xf57ebae200000000, 0x2194c97900000000, 0x8f0c700f00000000, + 0x5be6039400000000, 0x66dfe6e200000000, 0xb235957900000000, + 0x3aee950f00000000, 0xee04e69400000000, 0xd33d03e200000000, + 0x07d7707900000000, 0xa94fc90f00000000, 0x7da5ba9400000000, + 0x409c5fe200000000, 0x94762c7900000000, 0xc827bb0c00000000, + 0x1ccdc89700000000, 0x21f42de100000000, 0xf51e5e7a00000000, + 0x5b86e70c00000000, 0x8f6c949700000000, 0xb25571e100000000, + 0x66bf027a00000000, 0xee64020c00000000, 0x3a8e719700000000, + 0x07b794e100000000, 0xd35de77a00000000, 0x7dc55e0c00000000, + 0xa92f2d9700000000, 0x9416c8e100000000, 0x40fcbb7a00000000, + 0x84a1c90d00000000, 0x504bba9600000000, 0x6d725fe000000000, + 0xb9982c7b00000000, 0x1700950d00000000, 0xc3eae69600000000, + 0xfed303e000000000, 0x2a39707b00000000, 0xa2e2700d00000000, + 0x7608039600000000, 0x4b31e6e000000000, 0x9fdb957b00000000, + 0x31432c0d00000000, 0xe5a95f9600000000, 0xd890bae000000000, + 0x0c7ac97b00000000}, + {0x0000000000000000, 0x2765258100000000, 0x0fcc3bd900000000, + 0x28a91e5800000000, 0x5f9e066900000000, 0x78fb23e800000000, + 0x50523db000000000, 0x7737183100000000, 0xbe3c0dd200000000, + 0x9959285300000000, 0xb1f0360b00000000, 0x9695138a00000000, + 0xe1a20bbb00000000, 0xc6c72e3a00000000, 0xee6e306200000000, + 0xc90b15e300000000, 0x3d7f6b7f00000000, 0x1a1a4efe00000000, + 0x32b350a600000000, 0x15d6752700000000, 0x62e16d1600000000, + 0x4584489700000000, 0x6d2d56cf00000000, 0x4a48734e00000000, + 0x834366ad00000000, 0xa426432c00000000, 0x8c8f5d7400000000, + 0xabea78f500000000, 0xdcdd60c400000000, 0xfbb8454500000000, + 0xd3115b1d00000000, 0xf4747e9c00000000, 0x7afed6fe00000000, + 0x5d9bf37f00000000, 0x7532ed2700000000, 0x5257c8a600000000, + 0x2560d09700000000, 0x0205f51600000000, 0x2aaceb4e00000000, + 0x0dc9cecf00000000, 0xc4c2db2c00000000, 0xe3a7fead00000000, + 0xcb0ee0f500000000, 0xec6bc57400000000, 0x9b5cdd4500000000, + 0xbc39f8c400000000, 0x9490e69c00000000, 0xb3f5c31d00000000, + 0x4781bd8100000000, 0x60e4980000000000, 0x484d865800000000, + 0x6f28a3d900000000, 0x181fbbe800000000, 0x3f7a9e6900000000, + 0x17d3803100000000, 0x30b6a5b000000000, 0xf9bdb05300000000, + 0xded895d200000000, 0xf6718b8a00000000, 0xd114ae0b00000000, + 0xa623b63a00000000, 0x814693bb00000000, 0xa9ef8de300000000, + 0x8e8aa86200000000, 0xb5fadc2600000000, 0x929ff9a700000000, + 0xba36e7ff00000000, 0x9d53c27e00000000, 0xea64da4f00000000, + 0xcd01ffce00000000, 0xe5a8e19600000000, 0xc2cdc41700000000, + 0x0bc6d1f400000000, 0x2ca3f47500000000, 0x040aea2d00000000, + 0x236fcfac00000000, 0x5458d79d00000000, 0x733df21c00000000, + 0x5b94ec4400000000, 0x7cf1c9c500000000, 0x8885b75900000000, + 0xafe092d800000000, 0x87498c8000000000, 0xa02ca90100000000, + 0xd71bb13000000000, 0xf07e94b100000000, 0xd8d78ae900000000, + 0xffb2af6800000000, 0x36b9ba8b00000000, 0x11dc9f0a00000000, + 0x3975815200000000, 0x1e10a4d300000000, 0x6927bce200000000, + 0x4e42996300000000, 0x66eb873b00000000, 0x418ea2ba00000000, + 0xcf040ad800000000, 0xe8612f5900000000, 0xc0c8310100000000, + 0xe7ad148000000000, 0x909a0cb100000000, 0xb7ff293000000000, + 0x9f56376800000000, 0xb83312e900000000, 0x7138070a00000000, + 0x565d228b00000000, 0x7ef43cd300000000, 0x5991195200000000, + 0x2ea6016300000000, 0x09c324e200000000, 0x216a3aba00000000, + 0x060f1f3b00000000, 0xf27b61a700000000, 0xd51e442600000000, + 0xfdb75a7e00000000, 0xdad27fff00000000, 0xade567ce00000000, + 0x8a80424f00000000, 0xa2295c1700000000, 0x854c799600000000, + 0x4c476c7500000000, 0x6b2249f400000000, 0x438b57ac00000000, + 0x64ee722d00000000, 0x13d96a1c00000000, 0x34bc4f9d00000000, + 0x1c1551c500000000, 0x3b70744400000000, 0x6af5b94d00000000, + 0x4d909ccc00000000, 0x6539829400000000, 0x425ca71500000000, + 0x356bbf2400000000, 0x120e9aa500000000, 0x3aa784fd00000000, + 0x1dc2a17c00000000, 0xd4c9b49f00000000, 0xf3ac911e00000000, + 0xdb058f4600000000, 0xfc60aac700000000, 0x8b57b2f600000000, + 0xac32977700000000, 0x849b892f00000000, 0xa3feacae00000000, + 0x578ad23200000000, 0x70eff7b300000000, 0x5846e9eb00000000, + 0x7f23cc6a00000000, 0x0814d45b00000000, 0x2f71f1da00000000, + 0x07d8ef8200000000, 0x20bdca0300000000, 0xe9b6dfe000000000, + 0xced3fa6100000000, 0xe67ae43900000000, 0xc11fc1b800000000, + 0xb628d98900000000, 0x914dfc0800000000, 0xb9e4e25000000000, + 0x9e81c7d100000000, 0x100b6fb300000000, 0x376e4a3200000000, + 0x1fc7546a00000000, 0x38a271eb00000000, 0x4f9569da00000000, + 0x68f04c5b00000000, 0x4059520300000000, 0x673c778200000000, + 0xae37626100000000, 0x895247e000000000, 0xa1fb59b800000000, + 0x869e7c3900000000, 0xf1a9640800000000, 0xd6cc418900000000, + 0xfe655fd100000000, 0xd9007a5000000000, 0x2d7404cc00000000, + 0x0a11214d00000000, 0x22b83f1500000000, 0x05dd1a9400000000, + 0x72ea02a500000000, 0x558f272400000000, 0x7d26397c00000000, + 0x5a431cfd00000000, 0x9348091e00000000, 0xb42d2c9f00000000, + 0x9c8432c700000000, 0xbbe1174600000000, 0xccd60f7700000000, + 0xebb32af600000000, 0xc31a34ae00000000, 0xe47f112f00000000, + 0xdf0f656b00000000, 0xf86a40ea00000000, 0xd0c35eb200000000, + 0xf7a67b3300000000, 0x8091630200000000, 0xa7f4468300000000, + 0x8f5d58db00000000, 0xa8387d5a00000000, 0x613368b900000000, + 0x46564d3800000000, 0x6eff536000000000, 0x499a76e100000000, + 0x3ead6ed000000000, 0x19c84b5100000000, 0x3161550900000000, + 0x1604708800000000, 0xe2700e1400000000, 0xc5152b9500000000, + 0xedbc35cd00000000, 0xcad9104c00000000, 0xbdee087d00000000, + 0x9a8b2dfc00000000, 0xb22233a400000000, 0x9547162500000000, + 0x5c4c03c600000000, 0x7b29264700000000, 0x5380381f00000000, + 0x74e51d9e00000000, 0x03d205af00000000, 0x24b7202e00000000, + 0x0c1e3e7600000000, 0x2b7b1bf700000000, 0xa5f1b39500000000, + 0x8294961400000000, 0xaa3d884c00000000, 0x8d58adcd00000000, + 0xfa6fb5fc00000000, 0xdd0a907d00000000, 0xf5a38e2500000000, + 0xd2c6aba400000000, 0x1bcdbe4700000000, 0x3ca89bc600000000, + 0x1401859e00000000, 0x3364a01f00000000, 0x4453b82e00000000, + 0x63369daf00000000, 0x4b9f83f700000000, 0x6cfaa67600000000, + 0x988ed8ea00000000, 0xbfebfd6b00000000, 0x9742e33300000000, + 0xb027c6b200000000, 0xc710de8300000000, 0xe075fb0200000000, + 0xc8dce55a00000000, 0xefb9c0db00000000, 0x26b2d53800000000, + 0x01d7f0b900000000, 0x297eeee100000000, 0x0e1bcb6000000000, + 0x792cd35100000000, 0x5e49f6d000000000, 0x76e0e88800000000, + 0x5185cd0900000000}}; + +#else /* W == 4 */ + +local const z_crc_t FAR crc_braid_table[][256] = { + {0x00000000, 0x9ba54c6f, 0xec3b9e9f, 0x779ed2f0, 0x03063b7f, + 0x98a37710, 0xef3da5e0, 0x7498e98f, 0x060c76fe, 0x9da93a91, + 0xea37e861, 0x7192a40e, 0x050a4d81, 0x9eaf01ee, 0xe931d31e, + 0x72949f71, 0x0c18edfc, 0x97bda193, 0xe0237363, 0x7b863f0c, + 0x0f1ed683, 0x94bb9aec, 0xe325481c, 0x78800473, 0x0a149b02, + 0x91b1d76d, 0xe62f059d, 0x7d8a49f2, 0x0912a07d, 0x92b7ec12, + 0xe5293ee2, 0x7e8c728d, 0x1831dbf8, 0x83949797, 0xf40a4567, + 0x6faf0908, 0x1b37e087, 0x8092ace8, 0xf70c7e18, 0x6ca93277, + 0x1e3dad06, 0x8598e169, 0xf2063399, 0x69a37ff6, 0x1d3b9679, + 0x869eda16, 0xf10008e6, 0x6aa54489, 0x14293604, 0x8f8c7a6b, + 0xf812a89b, 0x63b7e4f4, 0x172f0d7b, 0x8c8a4114, 0xfb1493e4, + 0x60b1df8b, 0x122540fa, 0x89800c95, 0xfe1ede65, 0x65bb920a, + 0x11237b85, 0x8a8637ea, 0xfd18e51a, 0x66bda975, 0x3063b7f0, + 0xabc6fb9f, 0xdc58296f, 0x47fd6500, 0x33658c8f, 0xa8c0c0e0, + 0xdf5e1210, 0x44fb5e7f, 0x366fc10e, 0xadca8d61, 0xda545f91, + 0x41f113fe, 0x3569fa71, 0xaeccb61e, 0xd95264ee, 0x42f72881, + 0x3c7b5a0c, 0xa7de1663, 0xd040c493, 0x4be588fc, 0x3f7d6173, + 0xa4d82d1c, 0xd346ffec, 0x48e3b383, 0x3a772cf2, 0xa1d2609d, + 0xd64cb26d, 0x4de9fe02, 0x3971178d, 0xa2d45be2, 0xd54a8912, + 0x4eefc57d, 0x28526c08, 0xb3f72067, 0xc469f297, 0x5fccbef8, + 0x2b545777, 0xb0f11b18, 0xc76fc9e8, 0x5cca8587, 0x2e5e1af6, + 0xb5fb5699, 0xc2658469, 0x59c0c806, 0x2d582189, 0xb6fd6de6, + 0xc163bf16, 0x5ac6f379, 0x244a81f4, 0xbfefcd9b, 0xc8711f6b, + 0x53d45304, 0x274cba8b, 0xbce9f6e4, 0xcb772414, 0x50d2687b, + 0x2246f70a, 0xb9e3bb65, 0xce7d6995, 0x55d825fa, 0x2140cc75, + 0xbae5801a, 0xcd7b52ea, 0x56de1e85, 0x60c76fe0, 0xfb62238f, + 0x8cfcf17f, 0x1759bd10, 0x63c1549f, 0xf86418f0, 0x8ffaca00, + 0x145f866f, 0x66cb191e, 0xfd6e5571, 0x8af08781, 0x1155cbee, + 0x65cd2261, 0xfe686e0e, 0x89f6bcfe, 0x1253f091, 0x6cdf821c, + 0xf77ace73, 0x80e41c83, 0x1b4150ec, 0x6fd9b963, 0xf47cf50c, + 0x83e227fc, 0x18476b93, 0x6ad3f4e2, 0xf176b88d, 0x86e86a7d, + 0x1d4d2612, 0x69d5cf9d, 0xf27083f2, 0x85ee5102, 0x1e4b1d6d, + 0x78f6b418, 0xe353f877, 0x94cd2a87, 0x0f6866e8, 0x7bf08f67, + 0xe055c308, 0x97cb11f8, 0x0c6e5d97, 0x7efac2e6, 0xe55f8e89, + 0x92c15c79, 0x09641016, 0x7dfcf999, 0xe659b5f6, 0x91c76706, + 0x0a622b69, 0x74ee59e4, 0xef4b158b, 0x98d5c77b, 0x03708b14, + 0x77e8629b, 0xec4d2ef4, 0x9bd3fc04, 0x0076b06b, 0x72e22f1a, + 0xe9476375, 0x9ed9b185, 0x057cfdea, 0x71e41465, 0xea41580a, + 0x9ddf8afa, 0x067ac695, 0x50a4d810, 0xcb01947f, 0xbc9f468f, + 0x273a0ae0, 0x53a2e36f, 0xc807af00, 0xbf997df0, 0x243c319f, + 0x56a8aeee, 0xcd0de281, 0xba933071, 0x21367c1e, 0x55ae9591, + 0xce0bd9fe, 0xb9950b0e, 0x22304761, 0x5cbc35ec, 0xc7197983, + 0xb087ab73, 0x2b22e71c, 0x5fba0e93, 0xc41f42fc, 0xb381900c, + 0x2824dc63, 0x5ab04312, 0xc1150f7d, 0xb68bdd8d, 0x2d2e91e2, + 0x59b6786d, 0xc2133402, 0xb58de6f2, 0x2e28aa9d, 0x489503e8, + 0xd3304f87, 0xa4ae9d77, 0x3f0bd118, 0x4b933897, 0xd03674f8, + 0xa7a8a608, 0x3c0dea67, 0x4e997516, 0xd53c3979, 0xa2a2eb89, + 0x3907a7e6, 0x4d9f4e69, 0xd63a0206, 0xa1a4d0f6, 0x3a019c99, + 0x448dee14, 0xdf28a27b, 0xa8b6708b, 0x33133ce4, 0x478bd56b, + 0xdc2e9904, 0xabb04bf4, 0x3015079b, 0x428198ea, 0xd924d485, + 0xaeba0675, 0x351f4a1a, 0x4187a395, 0xda22effa, 0xadbc3d0a, + 0x36197165}, + {0x00000000, 0xc18edfc0, 0x586cb9c1, 0x99e26601, 0xb0d97382, + 0x7157ac42, 0xe8b5ca43, 0x293b1583, 0xbac3e145, 0x7b4d3e85, + 0xe2af5884, 0x23218744, 0x0a1a92c7, 0xcb944d07, 0x52762b06, + 0x93f8f4c6, 0xaef6c4cb, 0x6f781b0b, 0xf69a7d0a, 0x3714a2ca, + 0x1e2fb749, 0xdfa16889, 0x46430e88, 0x87cdd148, 0x1435258e, + 0xd5bbfa4e, 0x4c599c4f, 0x8dd7438f, 0xa4ec560c, 0x656289cc, + 0xfc80efcd, 0x3d0e300d, 0x869c8fd7, 0x47125017, 0xdef03616, + 0x1f7ee9d6, 0x3645fc55, 0xf7cb2395, 0x6e294594, 0xafa79a54, + 0x3c5f6e92, 0xfdd1b152, 0x6433d753, 0xa5bd0893, 0x8c861d10, + 0x4d08c2d0, 0xd4eaa4d1, 0x15647b11, 0x286a4b1c, 0xe9e494dc, + 0x7006f2dd, 0xb1882d1d, 0x98b3389e, 0x593de75e, 0xc0df815f, + 0x01515e9f, 0x92a9aa59, 0x53277599, 0xcac51398, 0x0b4bcc58, + 0x2270d9db, 0xe3fe061b, 0x7a1c601a, 0xbb92bfda, 0xd64819ef, + 0x17c6c62f, 0x8e24a02e, 0x4faa7fee, 0x66916a6d, 0xa71fb5ad, + 0x3efdd3ac, 0xff730c6c, 0x6c8bf8aa, 0xad05276a, 0x34e7416b, + 0xf5699eab, 0xdc528b28, 0x1ddc54e8, 0x843e32e9, 0x45b0ed29, + 0x78bedd24, 0xb93002e4, 0x20d264e5, 0xe15cbb25, 0xc867aea6, + 0x09e97166, 0x900b1767, 0x5185c8a7, 0xc27d3c61, 0x03f3e3a1, + 0x9a1185a0, 0x5b9f5a60, 0x72a44fe3, 0xb32a9023, 0x2ac8f622, + 0xeb4629e2, 0x50d49638, 0x915a49f8, 0x08b82ff9, 0xc936f039, + 0xe00de5ba, 0x21833a7a, 0xb8615c7b, 0x79ef83bb, 0xea17777d, + 0x2b99a8bd, 0xb27bcebc, 0x73f5117c, 0x5ace04ff, 0x9b40db3f, + 0x02a2bd3e, 0xc32c62fe, 0xfe2252f3, 0x3fac8d33, 0xa64eeb32, + 0x67c034f2, 0x4efb2171, 0x8f75feb1, 0x169798b0, 0xd7194770, + 0x44e1b3b6, 0x856f6c76, 0x1c8d0a77, 0xdd03d5b7, 0xf438c034, + 0x35b61ff4, 0xac5479f5, 0x6ddaa635, 0x77e1359f, 0xb66fea5f, + 0x2f8d8c5e, 0xee03539e, 0xc738461d, 0x06b699dd, 0x9f54ffdc, + 0x5eda201c, 0xcd22d4da, 0x0cac0b1a, 0x954e6d1b, 0x54c0b2db, + 0x7dfba758, 0xbc757898, 0x25971e99, 0xe419c159, 0xd917f154, + 0x18992e94, 0x817b4895, 0x40f59755, 0x69ce82d6, 0xa8405d16, + 0x31a23b17, 0xf02ce4d7, 0x63d41011, 0xa25acfd1, 0x3bb8a9d0, + 0xfa367610, 0xd30d6393, 0x1283bc53, 0x8b61da52, 0x4aef0592, + 0xf17dba48, 0x30f36588, 0xa9110389, 0x689fdc49, 0x41a4c9ca, + 0x802a160a, 0x19c8700b, 0xd846afcb, 0x4bbe5b0d, 0x8a3084cd, + 0x13d2e2cc, 0xd25c3d0c, 0xfb67288f, 0x3ae9f74f, 0xa30b914e, + 0x62854e8e, 0x5f8b7e83, 0x9e05a143, 0x07e7c742, 0xc6691882, + 0xef520d01, 0x2edcd2c1, 0xb73eb4c0, 0x76b06b00, 0xe5489fc6, + 0x24c64006, 0xbd242607, 0x7caaf9c7, 0x5591ec44, 0x941f3384, + 0x0dfd5585, 0xcc738a45, 0xa1a92c70, 0x6027f3b0, 0xf9c595b1, + 0x384b4a71, 0x11705ff2, 0xd0fe8032, 0x491ce633, 0x889239f3, + 0x1b6acd35, 0xdae412f5, 0x430674f4, 0x8288ab34, 0xabb3beb7, + 0x6a3d6177, 0xf3df0776, 0x3251d8b6, 0x0f5fe8bb, 0xced1377b, + 0x5733517a, 0x96bd8eba, 0xbf869b39, 0x7e0844f9, 0xe7ea22f8, + 0x2664fd38, 0xb59c09fe, 0x7412d63e, 0xedf0b03f, 0x2c7e6fff, + 0x05457a7c, 0xc4cba5bc, 0x5d29c3bd, 0x9ca71c7d, 0x2735a3a7, + 0xe6bb7c67, 0x7f591a66, 0xbed7c5a6, 0x97ecd025, 0x56620fe5, + 0xcf8069e4, 0x0e0eb624, 0x9df642e2, 0x5c789d22, 0xc59afb23, + 0x041424e3, 0x2d2f3160, 0xeca1eea0, 0x754388a1, 0xb4cd5761, + 0x89c3676c, 0x484db8ac, 0xd1afdead, 0x1021016d, 0x391a14ee, + 0xf894cb2e, 0x6176ad2f, 0xa0f872ef, 0x33008629, 0xf28e59e9, + 0x6b6c3fe8, 0xaae2e028, 0x83d9f5ab, 0x42572a6b, 0xdbb54c6a, + 0x1a3b93aa}, + {0x00000000, 0xefc26b3e, 0x04f5d03d, 0xeb37bb03, 0x09eba07a, + 0xe629cb44, 0x0d1e7047, 0xe2dc1b79, 0x13d740f4, 0xfc152bca, + 0x172290c9, 0xf8e0fbf7, 0x1a3ce08e, 0xf5fe8bb0, 0x1ec930b3, + 0xf10b5b8d, 0x27ae81e8, 0xc86cead6, 0x235b51d5, 0xcc993aeb, + 0x2e452192, 0xc1874aac, 0x2ab0f1af, 0xc5729a91, 0x3479c11c, + 0xdbbbaa22, 0x308c1121, 0xdf4e7a1f, 0x3d926166, 0xd2500a58, + 0x3967b15b, 0xd6a5da65, 0x4f5d03d0, 0xa09f68ee, 0x4ba8d3ed, + 0xa46ab8d3, 0x46b6a3aa, 0xa974c894, 0x42437397, 0xad8118a9, + 0x5c8a4324, 0xb348281a, 0x587f9319, 0xb7bdf827, 0x5561e35e, + 0xbaa38860, 0x51943363, 0xbe56585d, 0x68f38238, 0x8731e906, + 0x6c065205, 0x83c4393b, 0x61182242, 0x8eda497c, 0x65edf27f, + 0x8a2f9941, 0x7b24c2cc, 0x94e6a9f2, 0x7fd112f1, 0x901379cf, + 0x72cf62b6, 0x9d0d0988, 0x763ab28b, 0x99f8d9b5, 0x9eba07a0, + 0x71786c9e, 0x9a4fd79d, 0x758dbca3, 0x9751a7da, 0x7893cce4, + 0x93a477e7, 0x7c661cd9, 0x8d6d4754, 0x62af2c6a, 0x89989769, + 0x665afc57, 0x8486e72e, 0x6b448c10, 0x80733713, 0x6fb15c2d, + 0xb9148648, 0x56d6ed76, 0xbde15675, 0x52233d4b, 0xb0ff2632, + 0x5f3d4d0c, 0xb40af60f, 0x5bc89d31, 0xaac3c6bc, 0x4501ad82, + 0xae361681, 0x41f47dbf, 0xa32866c6, 0x4cea0df8, 0xa7ddb6fb, + 0x481fddc5, 0xd1e70470, 0x3e256f4e, 0xd512d44d, 0x3ad0bf73, + 0xd80ca40a, 0x37cecf34, 0xdcf97437, 0x333b1f09, 0xc2304484, + 0x2df22fba, 0xc6c594b9, 0x2907ff87, 0xcbdbe4fe, 0x24198fc0, + 0xcf2e34c3, 0x20ec5ffd, 0xf6498598, 0x198beea6, 0xf2bc55a5, + 0x1d7e3e9b, 0xffa225e2, 0x10604edc, 0xfb57f5df, 0x14959ee1, + 0xe59ec56c, 0x0a5cae52, 0xe16b1551, 0x0ea97e6f, 0xec756516, + 0x03b70e28, 0xe880b52b, 0x0742de15, 0xe6050901, 0x09c7623f, + 0xe2f0d93c, 0x0d32b202, 0xefeea97b, 0x002cc245, 0xeb1b7946, + 0x04d91278, 0xf5d249f5, 0x1a1022cb, 0xf12799c8, 0x1ee5f2f6, + 0xfc39e98f, 0x13fb82b1, 0xf8cc39b2, 0x170e528c, 0xc1ab88e9, + 0x2e69e3d7, 0xc55e58d4, 0x2a9c33ea, 0xc8402893, 0x278243ad, + 0xccb5f8ae, 0x23779390, 0xd27cc81d, 0x3dbea323, 0xd6891820, + 0x394b731e, 0xdb976867, 0x34550359, 0xdf62b85a, 0x30a0d364, + 0xa9580ad1, 0x469a61ef, 0xadaddaec, 0x426fb1d2, 0xa0b3aaab, + 0x4f71c195, 0xa4467a96, 0x4b8411a8, 0xba8f4a25, 0x554d211b, + 0xbe7a9a18, 0x51b8f126, 0xb364ea5f, 0x5ca68161, 0xb7913a62, + 0x5853515c, 0x8ef68b39, 0x6134e007, 0x8a035b04, 0x65c1303a, + 0x871d2b43, 0x68df407d, 0x83e8fb7e, 0x6c2a9040, 0x9d21cbcd, + 0x72e3a0f3, 0x99d41bf0, 0x761670ce, 0x94ca6bb7, 0x7b080089, + 0x903fbb8a, 0x7ffdd0b4, 0x78bf0ea1, 0x977d659f, 0x7c4ade9c, + 0x9388b5a2, 0x7154aedb, 0x9e96c5e5, 0x75a17ee6, 0x9a6315d8, + 0x6b684e55, 0x84aa256b, 0x6f9d9e68, 0x805ff556, 0x6283ee2f, + 0x8d418511, 0x66763e12, 0x89b4552c, 0x5f118f49, 0xb0d3e477, + 0x5be45f74, 0xb426344a, 0x56fa2f33, 0xb938440d, 0x520fff0e, + 0xbdcd9430, 0x4cc6cfbd, 0xa304a483, 0x48331f80, 0xa7f174be, + 0x452d6fc7, 0xaaef04f9, 0x41d8bffa, 0xae1ad4c4, 0x37e20d71, + 0xd820664f, 0x3317dd4c, 0xdcd5b672, 0x3e09ad0b, 0xd1cbc635, + 0x3afc7d36, 0xd53e1608, 0x24354d85, 0xcbf726bb, 0x20c09db8, + 0xcf02f686, 0x2ddeedff, 0xc21c86c1, 0x292b3dc2, 0xc6e956fc, + 0x104c8c99, 0xff8ee7a7, 0x14b95ca4, 0xfb7b379a, 0x19a72ce3, + 0xf66547dd, 0x1d52fcde, 0xf29097e0, 0x039bcc6d, 0xec59a753, + 0x076e1c50, 0xe8ac776e, 0x0a706c17, 0xe5b20729, 0x0e85bc2a, + 0xe147d714}, + {0x00000000, 0x177b1443, 0x2ef62886, 0x398d3cc5, 0x5dec510c, + 0x4a97454f, 0x731a798a, 0x64616dc9, 0xbbd8a218, 0xaca3b65b, + 0x952e8a9e, 0x82559edd, 0xe634f314, 0xf14fe757, 0xc8c2db92, + 0xdfb9cfd1, 0xacc04271, 0xbbbb5632, 0x82366af7, 0x954d7eb4, + 0xf12c137d, 0xe657073e, 0xdfda3bfb, 0xc8a12fb8, 0x1718e069, + 0x0063f42a, 0x39eec8ef, 0x2e95dcac, 0x4af4b165, 0x5d8fa526, + 0x640299e3, 0x73798da0, 0x82f182a3, 0x958a96e0, 0xac07aa25, + 0xbb7cbe66, 0xdf1dd3af, 0xc866c7ec, 0xf1ebfb29, 0xe690ef6a, + 0x392920bb, 0x2e5234f8, 0x17df083d, 0x00a41c7e, 0x64c571b7, + 0x73be65f4, 0x4a335931, 0x5d484d72, 0x2e31c0d2, 0x394ad491, + 0x00c7e854, 0x17bcfc17, 0x73dd91de, 0x64a6859d, 0x5d2bb958, + 0x4a50ad1b, 0x95e962ca, 0x82927689, 0xbb1f4a4c, 0xac645e0f, + 0xc80533c6, 0xdf7e2785, 0xe6f31b40, 0xf1880f03, 0xde920307, + 0xc9e91744, 0xf0642b81, 0xe71f3fc2, 0x837e520b, 0x94054648, + 0xad887a8d, 0xbaf36ece, 0x654aa11f, 0x7231b55c, 0x4bbc8999, + 0x5cc79dda, 0x38a6f013, 0x2fdde450, 0x1650d895, 0x012bccd6, + 0x72524176, 0x65295535, 0x5ca469f0, 0x4bdf7db3, 0x2fbe107a, + 0x38c50439, 0x014838fc, 0x16332cbf, 0xc98ae36e, 0xdef1f72d, + 0xe77ccbe8, 0xf007dfab, 0x9466b262, 0x831da621, 0xba909ae4, + 0xadeb8ea7, 0x5c6381a4, 0x4b1895e7, 0x7295a922, 0x65eebd61, + 0x018fd0a8, 0x16f4c4eb, 0x2f79f82e, 0x3802ec6d, 0xe7bb23bc, + 0xf0c037ff, 0xc94d0b3a, 0xde361f79, 0xba5772b0, 0xad2c66f3, + 0x94a15a36, 0x83da4e75, 0xf0a3c3d5, 0xe7d8d796, 0xde55eb53, + 0xc92eff10, 0xad4f92d9, 0xba34869a, 0x83b9ba5f, 0x94c2ae1c, + 0x4b7b61cd, 0x5c00758e, 0x658d494b, 0x72f65d08, 0x169730c1, + 0x01ec2482, 0x38611847, 0x2f1a0c04, 0x6655004f, 0x712e140c, + 0x48a328c9, 0x5fd83c8a, 0x3bb95143, 0x2cc24500, 0x154f79c5, + 0x02346d86, 0xdd8da257, 0xcaf6b614, 0xf37b8ad1, 0xe4009e92, + 0x8061f35b, 0x971ae718, 0xae97dbdd, 0xb9eccf9e, 0xca95423e, + 0xddee567d, 0xe4636ab8, 0xf3187efb, 0x97791332, 0x80020771, + 0xb98f3bb4, 0xaef42ff7, 0x714de026, 0x6636f465, 0x5fbbc8a0, + 0x48c0dce3, 0x2ca1b12a, 0x3bdaa569, 0x025799ac, 0x152c8def, + 0xe4a482ec, 0xf3df96af, 0xca52aa6a, 0xdd29be29, 0xb948d3e0, + 0xae33c7a3, 0x97befb66, 0x80c5ef25, 0x5f7c20f4, 0x480734b7, + 0x718a0872, 0x66f11c31, 0x029071f8, 0x15eb65bb, 0x2c66597e, + 0x3b1d4d3d, 0x4864c09d, 0x5f1fd4de, 0x6692e81b, 0x71e9fc58, + 0x15889191, 0x02f385d2, 0x3b7eb917, 0x2c05ad54, 0xf3bc6285, + 0xe4c776c6, 0xdd4a4a03, 0xca315e40, 0xae503389, 0xb92b27ca, + 0x80a61b0f, 0x97dd0f4c, 0xb8c70348, 0xafbc170b, 0x96312bce, + 0x814a3f8d, 0xe52b5244, 0xf2504607, 0xcbdd7ac2, 0xdca66e81, + 0x031fa150, 0x1464b513, 0x2de989d6, 0x3a929d95, 0x5ef3f05c, + 0x4988e41f, 0x7005d8da, 0x677ecc99, 0x14074139, 0x037c557a, + 0x3af169bf, 0x2d8a7dfc, 0x49eb1035, 0x5e900476, 0x671d38b3, + 0x70662cf0, 0xafdfe321, 0xb8a4f762, 0x8129cba7, 0x9652dfe4, + 0xf233b22d, 0xe548a66e, 0xdcc59aab, 0xcbbe8ee8, 0x3a3681eb, + 0x2d4d95a8, 0x14c0a96d, 0x03bbbd2e, 0x67dad0e7, 0x70a1c4a4, + 0x492cf861, 0x5e57ec22, 0x81ee23f3, 0x969537b0, 0xaf180b75, + 0xb8631f36, 0xdc0272ff, 0xcb7966bc, 0xf2f45a79, 0xe58f4e3a, + 0x96f6c39a, 0x818dd7d9, 0xb800eb1c, 0xaf7bff5f, 0xcb1a9296, + 0xdc6186d5, 0xe5ecba10, 0xf297ae53, 0x2d2e6182, 0x3a5575c1, + 0x03d84904, 0x14a35d47, 0x70c2308e, 0x67b924cd, 0x5e341808, + 0x494f0c4b}}; + +local const z_word_t FAR crc_braid_big_table[][256] = { + {0x00000000, 0x43147b17, 0x8628f62e, 0xc53c8d39, 0x0c51ec5d, + 0x4f45974a, 0x8a791a73, 0xc96d6164, 0x18a2d8bb, 0x5bb6a3ac, + 0x9e8a2e95, 0xdd9e5582, 0x14f334e6, 0x57e74ff1, 0x92dbc2c8, + 0xd1cfb9df, 0x7142c0ac, 0x3256bbbb, 0xf76a3682, 0xb47e4d95, + 0x7d132cf1, 0x3e0757e6, 0xfb3bdadf, 0xb82fa1c8, 0x69e01817, + 0x2af46300, 0xefc8ee39, 0xacdc952e, 0x65b1f44a, 0x26a58f5d, + 0xe3990264, 0xa08d7973, 0xa382f182, 0xe0968a95, 0x25aa07ac, + 0x66be7cbb, 0xafd31ddf, 0xecc766c8, 0x29fbebf1, 0x6aef90e6, + 0xbb202939, 0xf834522e, 0x3d08df17, 0x7e1ca400, 0xb771c564, + 0xf465be73, 0x3159334a, 0x724d485d, 0xd2c0312e, 0x91d44a39, + 0x54e8c700, 0x17fcbc17, 0xde91dd73, 0x9d85a664, 0x58b92b5d, + 0x1bad504a, 0xca62e995, 0x89769282, 0x4c4a1fbb, 0x0f5e64ac, + 0xc63305c8, 0x85277edf, 0x401bf3e6, 0x030f88f1, 0x070392de, + 0x4417e9c9, 0x812b64f0, 0xc23f1fe7, 0x0b527e83, 0x48460594, + 0x8d7a88ad, 0xce6ef3ba, 0x1fa14a65, 0x5cb53172, 0x9989bc4b, + 0xda9dc75c, 0x13f0a638, 0x50e4dd2f, 0x95d85016, 0xd6cc2b01, + 0x76415272, 0x35552965, 0xf069a45c, 0xb37ddf4b, 0x7a10be2f, + 0x3904c538, 0xfc384801, 0xbf2c3316, 0x6ee38ac9, 0x2df7f1de, + 0xe8cb7ce7, 0xabdf07f0, 0x62b26694, 0x21a61d83, 0xe49a90ba, + 0xa78eebad, 0xa481635c, 0xe795184b, 0x22a99572, 0x61bdee65, + 0xa8d08f01, 0xebc4f416, 0x2ef8792f, 0x6dec0238, 0xbc23bbe7, + 0xff37c0f0, 0x3a0b4dc9, 0x791f36de, 0xb07257ba, 0xf3662cad, + 0x365aa194, 0x754eda83, 0xd5c3a3f0, 0x96d7d8e7, 0x53eb55de, + 0x10ff2ec9, 0xd9924fad, 0x9a8634ba, 0x5fbab983, 0x1caec294, + 0xcd617b4b, 0x8e75005c, 0x4b498d65, 0x085df672, 0xc1309716, + 0x8224ec01, 0x47186138, 0x040c1a2f, 0x4f005566, 0x0c142e71, + 0xc928a348, 0x8a3cd85f, 0x4351b93b, 0x0045c22c, 0xc5794f15, + 0x866d3402, 0x57a28ddd, 0x14b6f6ca, 0xd18a7bf3, 0x929e00e4, + 0x5bf36180, 0x18e71a97, 0xdddb97ae, 0x9ecfecb9, 0x3e4295ca, + 0x7d56eedd, 0xb86a63e4, 0xfb7e18f3, 0x32137997, 0x71070280, + 0xb43b8fb9, 0xf72ff4ae, 0x26e04d71, 0x65f43666, 0xa0c8bb5f, + 0xe3dcc048, 0x2ab1a12c, 0x69a5da3b, 0xac995702, 0xef8d2c15, + 0xec82a4e4, 0xaf96dff3, 0x6aaa52ca, 0x29be29dd, 0xe0d348b9, + 0xa3c733ae, 0x66fbbe97, 0x25efc580, 0xf4207c5f, 0xb7340748, + 0x72088a71, 0x311cf166, 0xf8719002, 0xbb65eb15, 0x7e59662c, + 0x3d4d1d3b, 0x9dc06448, 0xded41f5f, 0x1be89266, 0x58fce971, + 0x91918815, 0xd285f302, 0x17b97e3b, 0x54ad052c, 0x8562bcf3, + 0xc676c7e4, 0x034a4add, 0x405e31ca, 0x893350ae, 0xca272bb9, + 0x0f1ba680, 0x4c0fdd97, 0x4803c7b8, 0x0b17bcaf, 0xce2b3196, + 0x8d3f4a81, 0x44522be5, 0x074650f2, 0xc27addcb, 0x816ea6dc, + 0x50a11f03, 0x13b56414, 0xd689e92d, 0x959d923a, 0x5cf0f35e, + 0x1fe48849, 0xdad80570, 0x99cc7e67, 0x39410714, 0x7a557c03, + 0xbf69f13a, 0xfc7d8a2d, 0x3510eb49, 0x7604905e, 0xb3381d67, + 0xf02c6670, 0x21e3dfaf, 0x62f7a4b8, 0xa7cb2981, 0xe4df5296, + 0x2db233f2, 0x6ea648e5, 0xab9ac5dc, 0xe88ebecb, 0xeb81363a, + 0xa8954d2d, 0x6da9c014, 0x2ebdbb03, 0xe7d0da67, 0xa4c4a170, + 0x61f82c49, 0x22ec575e, 0xf323ee81, 0xb0379596, 0x750b18af, + 0x361f63b8, 0xff7202dc, 0xbc6679cb, 0x795af4f2, 0x3a4e8fe5, + 0x9ac3f696, 0xd9d78d81, 0x1ceb00b8, 0x5fff7baf, 0x96921acb, + 0xd58661dc, 0x10baece5, 0x53ae97f2, 0x82612e2d, 0xc175553a, + 0x0449d803, 0x475da314, 0x8e30c270, 0xcd24b967, 0x0818345e, + 0x4b0c4f49}, + {0x00000000, 0x3e6bc2ef, 0x3dd0f504, 0x03bb37eb, 0x7aa0eb09, + 0x44cb29e6, 0x47701e0d, 0x791bdce2, 0xf440d713, 0xca2b15fc, + 0xc9902217, 0xf7fbe0f8, 0x8ee03c1a, 0xb08bfef5, 0xb330c91e, + 0x8d5b0bf1, 0xe881ae27, 0xd6ea6cc8, 0xd5515b23, 0xeb3a99cc, + 0x9221452e, 0xac4a87c1, 0xaff1b02a, 0x919a72c5, 0x1cc17934, + 0x22aabbdb, 0x21118c30, 0x1f7a4edf, 0x6661923d, 0x580a50d2, + 0x5bb16739, 0x65daa5d6, 0xd0035d4f, 0xee689fa0, 0xedd3a84b, + 0xd3b86aa4, 0xaaa3b646, 0x94c874a9, 0x97734342, 0xa91881ad, + 0x24438a5c, 0x1a2848b3, 0x19937f58, 0x27f8bdb7, 0x5ee36155, + 0x6088a3ba, 0x63339451, 0x5d5856be, 0x3882f368, 0x06e93187, + 0x0552066c, 0x3b39c483, 0x42221861, 0x7c49da8e, 0x7ff2ed65, + 0x41992f8a, 0xccc2247b, 0xf2a9e694, 0xf112d17f, 0xcf791390, + 0xb662cf72, 0x88090d9d, 0x8bb23a76, 0xb5d9f899, 0xa007ba9e, + 0x9e6c7871, 0x9dd74f9a, 0xa3bc8d75, 0xdaa75197, 0xe4cc9378, + 0xe777a493, 0xd91c667c, 0x54476d8d, 0x6a2caf62, 0x69979889, + 0x57fc5a66, 0x2ee78684, 0x108c446b, 0x13377380, 0x2d5cb16f, + 0x488614b9, 0x76edd656, 0x7556e1bd, 0x4b3d2352, 0x3226ffb0, + 0x0c4d3d5f, 0x0ff60ab4, 0x319dc85b, 0xbcc6c3aa, 0x82ad0145, + 0x811636ae, 0xbf7df441, 0xc66628a3, 0xf80dea4c, 0xfbb6dda7, + 0xc5dd1f48, 0x7004e7d1, 0x4e6f253e, 0x4dd412d5, 0x73bfd03a, + 0x0aa40cd8, 0x34cfce37, 0x3774f9dc, 0x091f3b33, 0x844430c2, + 0xba2ff22d, 0xb994c5c6, 0x87ff0729, 0xfee4dbcb, 0xc08f1924, + 0xc3342ecf, 0xfd5fec20, 0x988549f6, 0xa6ee8b19, 0xa555bcf2, + 0x9b3e7e1d, 0xe225a2ff, 0xdc4e6010, 0xdff557fb, 0xe19e9514, + 0x6cc59ee5, 0x52ae5c0a, 0x51156be1, 0x6f7ea90e, 0x166575ec, + 0x280eb703, 0x2bb580e8, 0x15de4207, 0x010905e6, 0x3f62c709, + 0x3cd9f0e2, 0x02b2320d, 0x7ba9eeef, 0x45c22c00, 0x46791beb, + 0x7812d904, 0xf549d2f5, 0xcb22101a, 0xc89927f1, 0xf6f2e51e, + 0x8fe939fc, 0xb182fb13, 0xb239ccf8, 0x8c520e17, 0xe988abc1, + 0xd7e3692e, 0xd4585ec5, 0xea339c2a, 0x932840c8, 0xad438227, + 0xaef8b5cc, 0x90937723, 0x1dc87cd2, 0x23a3be3d, 0x201889d6, + 0x1e734b39, 0x676897db, 0x59035534, 0x5ab862df, 0x64d3a030, + 0xd10a58a9, 0xef619a46, 0xecdaadad, 0xd2b16f42, 0xabaab3a0, + 0x95c1714f, 0x967a46a4, 0xa811844b, 0x254a8fba, 0x1b214d55, + 0x189a7abe, 0x26f1b851, 0x5fea64b3, 0x6181a65c, 0x623a91b7, + 0x5c515358, 0x398bf68e, 0x07e03461, 0x045b038a, 0x3a30c165, + 0x432b1d87, 0x7d40df68, 0x7efbe883, 0x40902a6c, 0xcdcb219d, + 0xf3a0e372, 0xf01bd499, 0xce701676, 0xb76bca94, 0x8900087b, + 0x8abb3f90, 0xb4d0fd7f, 0xa10ebf78, 0x9f657d97, 0x9cde4a7c, + 0xa2b58893, 0xdbae5471, 0xe5c5969e, 0xe67ea175, 0xd815639a, + 0x554e686b, 0x6b25aa84, 0x689e9d6f, 0x56f55f80, 0x2fee8362, + 0x1185418d, 0x123e7666, 0x2c55b489, 0x498f115f, 0x77e4d3b0, + 0x745fe45b, 0x4a3426b4, 0x332ffa56, 0x0d4438b9, 0x0eff0f52, + 0x3094cdbd, 0xbdcfc64c, 0x83a404a3, 0x801f3348, 0xbe74f1a7, + 0xc76f2d45, 0xf904efaa, 0xfabfd841, 0xc4d41aae, 0x710de237, + 0x4f6620d8, 0x4cdd1733, 0x72b6d5dc, 0x0bad093e, 0x35c6cbd1, + 0x367dfc3a, 0x08163ed5, 0x854d3524, 0xbb26f7cb, 0xb89dc020, + 0x86f602cf, 0xffedde2d, 0xc1861cc2, 0xc23d2b29, 0xfc56e9c6, + 0x998c4c10, 0xa7e78eff, 0xa45cb914, 0x9a377bfb, 0xe32ca719, + 0xdd4765f6, 0xdefc521d, 0xe09790f2, 0x6dcc9b03, 0x53a759ec, + 0x501c6e07, 0x6e77ace8, 0x176c700a, 0x2907b2e5, 0x2abc850e, + 0x14d747e1}, + {0x00000000, 0xc0df8ec1, 0xc1b96c58, 0x0166e299, 0x8273d9b0, + 0x42ac5771, 0x43cab5e8, 0x83153b29, 0x45e1c3ba, 0x853e4d7b, + 0x8458afe2, 0x44872123, 0xc7921a0a, 0x074d94cb, 0x062b7652, + 0xc6f4f893, 0xcbc4f6ae, 0x0b1b786f, 0x0a7d9af6, 0xcaa21437, + 0x49b72f1e, 0x8968a1df, 0x880e4346, 0x48d1cd87, 0x8e253514, + 0x4efabbd5, 0x4f9c594c, 0x8f43d78d, 0x0c56eca4, 0xcc896265, + 0xcdef80fc, 0x0d300e3d, 0xd78f9c86, 0x17501247, 0x1636f0de, + 0xd6e97e1f, 0x55fc4536, 0x9523cbf7, 0x9445296e, 0x549aa7af, + 0x926e5f3c, 0x52b1d1fd, 0x53d73364, 0x9308bda5, 0x101d868c, + 0xd0c2084d, 0xd1a4ead4, 0x117b6415, 0x1c4b6a28, 0xdc94e4e9, + 0xddf20670, 0x1d2d88b1, 0x9e38b398, 0x5ee73d59, 0x5f81dfc0, + 0x9f5e5101, 0x59aaa992, 0x99752753, 0x9813c5ca, 0x58cc4b0b, + 0xdbd97022, 0x1b06fee3, 0x1a601c7a, 0xdabf92bb, 0xef1948d6, + 0x2fc6c617, 0x2ea0248e, 0xee7faa4f, 0x6d6a9166, 0xadb51fa7, + 0xacd3fd3e, 0x6c0c73ff, 0xaaf88b6c, 0x6a2705ad, 0x6b41e734, + 0xab9e69f5, 0x288b52dc, 0xe854dc1d, 0xe9323e84, 0x29edb045, + 0x24ddbe78, 0xe40230b9, 0xe564d220, 0x25bb5ce1, 0xa6ae67c8, + 0x6671e909, 0x67170b90, 0xa7c88551, 0x613c7dc2, 0xa1e3f303, + 0xa085119a, 0x605a9f5b, 0xe34fa472, 0x23902ab3, 0x22f6c82a, + 0xe22946eb, 0x3896d450, 0xf8495a91, 0xf92fb808, 0x39f036c9, + 0xbae50de0, 0x7a3a8321, 0x7b5c61b8, 0xbb83ef79, 0x7d7717ea, + 0xbda8992b, 0xbcce7bb2, 0x7c11f573, 0xff04ce5a, 0x3fdb409b, + 0x3ebda202, 0xfe622cc3, 0xf35222fe, 0x338dac3f, 0x32eb4ea6, + 0xf234c067, 0x7121fb4e, 0xb1fe758f, 0xb0989716, 0x704719d7, + 0xb6b3e144, 0x766c6f85, 0x770a8d1c, 0xb7d503dd, 0x34c038f4, + 0xf41fb635, 0xf57954ac, 0x35a6da6d, 0x9f35e177, 0x5fea6fb6, + 0x5e8c8d2f, 0x9e5303ee, 0x1d4638c7, 0xdd99b606, 0xdcff549f, + 0x1c20da5e, 0xdad422cd, 0x1a0bac0c, 0x1b6d4e95, 0xdbb2c054, + 0x58a7fb7d, 0x987875bc, 0x991e9725, 0x59c119e4, 0x54f117d9, + 0x942e9918, 0x95487b81, 0x5597f540, 0xd682ce69, 0x165d40a8, + 0x173ba231, 0xd7e42cf0, 0x1110d463, 0xd1cf5aa2, 0xd0a9b83b, + 0x107636fa, 0x93630dd3, 0x53bc8312, 0x52da618b, 0x9205ef4a, + 0x48ba7df1, 0x8865f330, 0x890311a9, 0x49dc9f68, 0xcac9a441, + 0x0a162a80, 0x0b70c819, 0xcbaf46d8, 0x0d5bbe4b, 0xcd84308a, + 0xcce2d213, 0x0c3d5cd2, 0x8f2867fb, 0x4ff7e93a, 0x4e910ba3, + 0x8e4e8562, 0x837e8b5f, 0x43a1059e, 0x42c7e707, 0x821869c6, + 0x010d52ef, 0xc1d2dc2e, 0xc0b43eb7, 0x006bb076, 0xc69f48e5, + 0x0640c624, 0x072624bd, 0xc7f9aa7c, 0x44ec9155, 0x84331f94, + 0x8555fd0d, 0x458a73cc, 0x702ca9a1, 0xb0f32760, 0xb195c5f9, + 0x714a4b38, 0xf25f7011, 0x3280fed0, 0x33e61c49, 0xf3399288, + 0x35cd6a1b, 0xf512e4da, 0xf4740643, 0x34ab8882, 0xb7beb3ab, + 0x77613d6a, 0x7607dff3, 0xb6d85132, 0xbbe85f0f, 0x7b37d1ce, + 0x7a513357, 0xba8ebd96, 0x399b86bf, 0xf944087e, 0xf822eae7, + 0x38fd6426, 0xfe099cb5, 0x3ed61274, 0x3fb0f0ed, 0xff6f7e2c, + 0x7c7a4505, 0xbca5cbc4, 0xbdc3295d, 0x7d1ca79c, 0xa7a33527, + 0x677cbbe6, 0x661a597f, 0xa6c5d7be, 0x25d0ec97, 0xe50f6256, + 0xe46980cf, 0x24b60e0e, 0xe242f69d, 0x229d785c, 0x23fb9ac5, + 0xe3241404, 0x60312f2d, 0xa0eea1ec, 0xa1884375, 0x6157cdb4, + 0x6c67c389, 0xacb84d48, 0xaddeafd1, 0x6d012110, 0xee141a39, + 0x2ecb94f8, 0x2fad7661, 0xef72f8a0, 0x29860033, 0xe9598ef2, + 0xe83f6c6b, 0x28e0e2aa, 0xabf5d983, 0x6b2a5742, 0x6a4cb5db, + 0xaa933b1a}, + {0x00000000, 0x6f4ca59b, 0x9f9e3bec, 0xf0d29e77, 0x7f3b0603, + 0x1077a398, 0xe0a53def, 0x8fe99874, 0xfe760c06, 0x913aa99d, + 0x61e837ea, 0x0ea49271, 0x814d0a05, 0xee01af9e, 0x1ed331e9, + 0x719f9472, 0xfced180c, 0x93a1bd97, 0x637323e0, 0x0c3f867b, + 0x83d61e0f, 0xec9abb94, 0x1c4825e3, 0x73048078, 0x029b140a, + 0x6dd7b191, 0x9d052fe6, 0xf2498a7d, 0x7da01209, 0x12ecb792, + 0xe23e29e5, 0x8d728c7e, 0xf8db3118, 0x97979483, 0x67450af4, + 0x0809af6f, 0x87e0371b, 0xe8ac9280, 0x187e0cf7, 0x7732a96c, + 0x06ad3d1e, 0x69e19885, 0x993306f2, 0xf67fa369, 0x79963b1d, + 0x16da9e86, 0xe60800f1, 0x8944a56a, 0x04362914, 0x6b7a8c8f, + 0x9ba812f8, 0xf4e4b763, 0x7b0d2f17, 0x14418a8c, 0xe49314fb, + 0x8bdfb160, 0xfa402512, 0x950c8089, 0x65de1efe, 0x0a92bb65, + 0x857b2311, 0xea37868a, 0x1ae518fd, 0x75a9bd66, 0xf0b76330, + 0x9ffbc6ab, 0x6f2958dc, 0x0065fd47, 0x8f8c6533, 0xe0c0c0a8, + 0x10125edf, 0x7f5efb44, 0x0ec16f36, 0x618dcaad, 0x915f54da, + 0xfe13f141, 0x71fa6935, 0x1eb6ccae, 0xee6452d9, 0x8128f742, + 0x0c5a7b3c, 0x6316dea7, 0x93c440d0, 0xfc88e54b, 0x73617d3f, + 0x1c2dd8a4, 0xecff46d3, 0x83b3e348, 0xf22c773a, 0x9d60d2a1, + 0x6db24cd6, 0x02fee94d, 0x8d177139, 0xe25bd4a2, 0x12894ad5, + 0x7dc5ef4e, 0x086c5228, 0x6720f7b3, 0x97f269c4, 0xf8becc5f, + 0x7757542b, 0x181bf1b0, 0xe8c96fc7, 0x8785ca5c, 0xf61a5e2e, + 0x9956fbb5, 0x698465c2, 0x06c8c059, 0x8921582d, 0xe66dfdb6, + 0x16bf63c1, 0x79f3c65a, 0xf4814a24, 0x9bcdefbf, 0x6b1f71c8, + 0x0453d453, 0x8bba4c27, 0xe4f6e9bc, 0x142477cb, 0x7b68d250, + 0x0af74622, 0x65bbe3b9, 0x95697dce, 0xfa25d855, 0x75cc4021, + 0x1a80e5ba, 0xea527bcd, 0x851ede56, 0xe06fc760, 0x8f2362fb, + 0x7ff1fc8c, 0x10bd5917, 0x9f54c163, 0xf01864f8, 0x00cafa8f, + 0x6f865f14, 0x1e19cb66, 0x71556efd, 0x8187f08a, 0xeecb5511, + 0x6122cd65, 0x0e6e68fe, 0xfebcf689, 0x91f05312, 0x1c82df6c, + 0x73ce7af7, 0x831ce480, 0xec50411b, 0x63b9d96f, 0x0cf57cf4, + 0xfc27e283, 0x936b4718, 0xe2f4d36a, 0x8db876f1, 0x7d6ae886, + 0x12264d1d, 0x9dcfd569, 0xf28370f2, 0x0251ee85, 0x6d1d4b1e, + 0x18b4f678, 0x77f853e3, 0x872acd94, 0xe866680f, 0x678ff07b, + 0x08c355e0, 0xf811cb97, 0x975d6e0c, 0xe6c2fa7e, 0x898e5fe5, + 0x795cc192, 0x16106409, 0x99f9fc7d, 0xf6b559e6, 0x0667c791, + 0x692b620a, 0xe459ee74, 0x8b154bef, 0x7bc7d598, 0x148b7003, + 0x9b62e877, 0xf42e4dec, 0x04fcd39b, 0x6bb07600, 0x1a2fe272, + 0x756347e9, 0x85b1d99e, 0xeafd7c05, 0x6514e471, 0x0a5841ea, + 0xfa8adf9d, 0x95c67a06, 0x10d8a450, 0x7f9401cb, 0x8f469fbc, + 0xe00a3a27, 0x6fe3a253, 0x00af07c8, 0xf07d99bf, 0x9f313c24, + 0xeeaea856, 0x81e20dcd, 0x713093ba, 0x1e7c3621, 0x9195ae55, + 0xfed90bce, 0x0e0b95b9, 0x61473022, 0xec35bc5c, 0x837919c7, + 0x73ab87b0, 0x1ce7222b, 0x930eba5f, 0xfc421fc4, 0x0c9081b3, + 0x63dc2428, 0x1243b05a, 0x7d0f15c1, 0x8ddd8bb6, 0xe2912e2d, + 0x6d78b659, 0x023413c2, 0xf2e68db5, 0x9daa282e, 0xe8039548, + 0x874f30d3, 0x779daea4, 0x18d10b3f, 0x9738934b, 0xf87436d0, + 0x08a6a8a7, 0x67ea0d3c, 0x1675994e, 0x79393cd5, 0x89eba2a2, + 0xe6a70739, 0x694e9f4d, 0x06023ad6, 0xf6d0a4a1, 0x999c013a, + 0x14ee8d44, 0x7ba228df, 0x8b70b6a8, 0xe43c1333, 0x6bd58b47, + 0x04992edc, 0xf44bb0ab, 0x9b071530, 0xea988142, 0x85d424d9, + 0x7506baae, 0x1a4a1f35, 0x95a38741, 0xfaef22da, 0x0a3dbcad, + 0x65711936}}; + +#endif + +#endif + +#if N == 4 + +#if W == 8 + +local const z_crc_t FAR crc_braid_table[][256] = { + {0x00000000, 0xf1da05aa, 0x38c50d15, 0xc91f08bf, 0x718a1a2a, + 0x80501f80, 0x494f173f, 0xb8951295, 0xe3143454, 0x12ce31fe, + 0xdbd13941, 0x2a0b3ceb, 0x929e2e7e, 0x63442bd4, 0xaa5b236b, + 0x5b8126c1, 0x1d596ee9, 0xec836b43, 0x259c63fc, 0xd4466656, + 0x6cd374c3, 0x9d097169, 0x541679d6, 0xa5cc7c7c, 0xfe4d5abd, + 0x0f975f17, 0xc68857a8, 0x37525202, 0x8fc74097, 0x7e1d453d, + 0xb7024d82, 0x46d84828, 0x3ab2ddd2, 0xcb68d878, 0x0277d0c7, + 0xf3add56d, 0x4b38c7f8, 0xbae2c252, 0x73fdcaed, 0x8227cf47, + 0xd9a6e986, 0x287cec2c, 0xe163e493, 0x10b9e139, 0xa82cf3ac, + 0x59f6f606, 0x90e9feb9, 0x6133fb13, 0x27ebb33b, 0xd631b691, + 0x1f2ebe2e, 0xeef4bb84, 0x5661a911, 0xa7bbacbb, 0x6ea4a404, + 0x9f7ea1ae, 0xc4ff876f, 0x352582c5, 0xfc3a8a7a, 0x0de08fd0, + 0xb5759d45, 0x44af98ef, 0x8db09050, 0x7c6a95fa, 0x7565bba4, + 0x84bfbe0e, 0x4da0b6b1, 0xbc7ab31b, 0x04efa18e, 0xf535a424, + 0x3c2aac9b, 0xcdf0a931, 0x96718ff0, 0x67ab8a5a, 0xaeb482e5, + 0x5f6e874f, 0xe7fb95da, 0x16219070, 0xdf3e98cf, 0x2ee49d65, + 0x683cd54d, 0x99e6d0e7, 0x50f9d858, 0xa123ddf2, 0x19b6cf67, + 0xe86ccacd, 0x2173c272, 0xd0a9c7d8, 0x8b28e119, 0x7af2e4b3, + 0xb3edec0c, 0x4237e9a6, 0xfaa2fb33, 0x0b78fe99, 0xc267f626, + 0x33bdf38c, 0x4fd76676, 0xbe0d63dc, 0x77126b63, 0x86c86ec9, + 0x3e5d7c5c, 0xcf8779f6, 0x06987149, 0xf74274e3, 0xacc35222, + 0x5d195788, 0x94065f37, 0x65dc5a9d, 0xdd494808, 0x2c934da2, + 0xe58c451d, 0x145640b7, 0x528e089f, 0xa3540d35, 0x6a4b058a, + 0x9b910020, 0x230412b5, 0xd2de171f, 0x1bc11fa0, 0xea1b1a0a, + 0xb19a3ccb, 0x40403961, 0x895f31de, 0x78853474, 0xc01026e1, + 0x31ca234b, 0xf8d52bf4, 0x090f2e5e, 0xeacb7748, 0x1b1172e2, + 0xd20e7a5d, 0x23d47ff7, 0x9b416d62, 0x6a9b68c8, 0xa3846077, + 0x525e65dd, 0x09df431c, 0xf80546b6, 0x311a4e09, 0xc0c04ba3, + 0x78555936, 0x898f5c9c, 0x40905423, 0xb14a5189, 0xf79219a1, + 0x06481c0b, 0xcf5714b4, 0x3e8d111e, 0x8618038b, 0x77c20621, + 0xbedd0e9e, 0x4f070b34, 0x14862df5, 0xe55c285f, 0x2c4320e0, + 0xdd99254a, 0x650c37df, 0x94d63275, 0x5dc93aca, 0xac133f60, + 0xd079aa9a, 0x21a3af30, 0xe8bca78f, 0x1966a225, 0xa1f3b0b0, + 0x5029b51a, 0x9936bda5, 0x68ecb80f, 0x336d9ece, 0xc2b79b64, + 0x0ba893db, 0xfa729671, 0x42e784e4, 0xb33d814e, 0x7a2289f1, + 0x8bf88c5b, 0xcd20c473, 0x3cfac1d9, 0xf5e5c966, 0x043fcccc, + 0xbcaade59, 0x4d70dbf3, 0x846fd34c, 0x75b5d6e6, 0x2e34f027, + 0xdfeef58d, 0x16f1fd32, 0xe72bf898, 0x5fbeea0d, 0xae64efa7, + 0x677be718, 0x96a1e2b2, 0x9faeccec, 0x6e74c946, 0xa76bc1f9, + 0x56b1c453, 0xee24d6c6, 0x1ffed36c, 0xd6e1dbd3, 0x273bde79, + 0x7cbaf8b8, 0x8d60fd12, 0x447ff5ad, 0xb5a5f007, 0x0d30e292, + 0xfceae738, 0x35f5ef87, 0xc42fea2d, 0x82f7a205, 0x732da7af, + 0xba32af10, 0x4be8aaba, 0xf37db82f, 0x02a7bd85, 0xcbb8b53a, + 0x3a62b090, 0x61e39651, 0x903993fb, 0x59269b44, 0xa8fc9eee, + 0x10698c7b, 0xe1b389d1, 0x28ac816e, 0xd97684c4, 0xa51c113e, + 0x54c61494, 0x9dd91c2b, 0x6c031981, 0xd4960b14, 0x254c0ebe, + 0xec530601, 0x1d8903ab, 0x4608256a, 0xb7d220c0, 0x7ecd287f, + 0x8f172dd5, 0x37823f40, 0xc6583aea, 0x0f473255, 0xfe9d37ff, + 0xb8457fd7, 0x499f7a7d, 0x808072c2, 0x715a7768, 0xc9cf65fd, + 0x38156057, 0xf10a68e8, 0x00d06d42, 0x5b514b83, 0xaa8b4e29, + 0x63944696, 0x924e433c, 0x2adb51a9, 0xdb015403, 0x121e5cbc, + 0xe3c45916}, + {0x00000000, 0x0ee7e8d1, 0x1dcfd1a2, 0x13283973, 0x3b9fa344, + 0x35784b95, 0x265072e6, 0x28b79a37, 0x773f4688, 0x79d8ae59, + 0x6af0972a, 0x64177ffb, 0x4ca0e5cc, 0x42470d1d, 0x516f346e, + 0x5f88dcbf, 0xee7e8d10, 0xe09965c1, 0xf3b15cb2, 0xfd56b463, + 0xd5e12e54, 0xdb06c685, 0xc82efff6, 0xc6c91727, 0x9941cb98, + 0x97a62349, 0x848e1a3a, 0x8a69f2eb, 0xa2de68dc, 0xac39800d, + 0xbf11b97e, 0xb1f651af, 0x078c1c61, 0x096bf4b0, 0x1a43cdc3, + 0x14a42512, 0x3c13bf25, 0x32f457f4, 0x21dc6e87, 0x2f3b8656, + 0x70b35ae9, 0x7e54b238, 0x6d7c8b4b, 0x639b639a, 0x4b2cf9ad, + 0x45cb117c, 0x56e3280f, 0x5804c0de, 0xe9f29171, 0xe71579a0, + 0xf43d40d3, 0xfadaa802, 0xd26d3235, 0xdc8adae4, 0xcfa2e397, + 0xc1450b46, 0x9ecdd7f9, 0x902a3f28, 0x8302065b, 0x8de5ee8a, + 0xa55274bd, 0xabb59c6c, 0xb89da51f, 0xb67a4dce, 0x0f1838c2, + 0x01ffd013, 0x12d7e960, 0x1c3001b1, 0x34879b86, 0x3a607357, + 0x29484a24, 0x27afa2f5, 0x78277e4a, 0x76c0969b, 0x65e8afe8, + 0x6b0f4739, 0x43b8dd0e, 0x4d5f35df, 0x5e770cac, 0x5090e47d, + 0xe166b5d2, 0xef815d03, 0xfca96470, 0xf24e8ca1, 0xdaf91696, + 0xd41efe47, 0xc736c734, 0xc9d12fe5, 0x9659f35a, 0x98be1b8b, + 0x8b9622f8, 0x8571ca29, 0xadc6501e, 0xa321b8cf, 0xb00981bc, + 0xbeee696d, 0x089424a3, 0x0673cc72, 0x155bf501, 0x1bbc1dd0, + 0x330b87e7, 0x3dec6f36, 0x2ec45645, 0x2023be94, 0x7fab622b, + 0x714c8afa, 0x6264b389, 0x6c835b58, 0x4434c16f, 0x4ad329be, + 0x59fb10cd, 0x571cf81c, 0xe6eaa9b3, 0xe80d4162, 0xfb257811, + 0xf5c290c0, 0xdd750af7, 0xd392e226, 0xc0badb55, 0xce5d3384, + 0x91d5ef3b, 0x9f3207ea, 0x8c1a3e99, 0x82fdd648, 0xaa4a4c7f, + 0xa4ada4ae, 0xb7859ddd, 0xb962750c, 0x1e307184, 0x10d79955, + 0x03ffa026, 0x0d1848f7, 0x25afd2c0, 0x2b483a11, 0x38600362, + 0x3687ebb3, 0x690f370c, 0x67e8dfdd, 0x74c0e6ae, 0x7a270e7f, + 0x52909448, 0x5c777c99, 0x4f5f45ea, 0x41b8ad3b, 0xf04efc94, + 0xfea91445, 0xed812d36, 0xe366c5e7, 0xcbd15fd0, 0xc536b701, + 0xd61e8e72, 0xd8f966a3, 0x8771ba1c, 0x899652cd, 0x9abe6bbe, + 0x9459836f, 0xbcee1958, 0xb209f189, 0xa121c8fa, 0xafc6202b, + 0x19bc6de5, 0x175b8534, 0x0473bc47, 0x0a945496, 0x2223cea1, + 0x2cc42670, 0x3fec1f03, 0x310bf7d2, 0x6e832b6d, 0x6064c3bc, + 0x734cfacf, 0x7dab121e, 0x551c8829, 0x5bfb60f8, 0x48d3598b, + 0x4634b15a, 0xf7c2e0f5, 0xf9250824, 0xea0d3157, 0xe4ead986, + 0xcc5d43b1, 0xc2baab60, 0xd1929213, 0xdf757ac2, 0x80fda67d, + 0x8e1a4eac, 0x9d3277df, 0x93d59f0e, 0xbb620539, 0xb585ede8, + 0xa6add49b, 0xa84a3c4a, 0x11284946, 0x1fcfa197, 0x0ce798e4, + 0x02007035, 0x2ab7ea02, 0x245002d3, 0x37783ba0, 0x399fd371, + 0x66170fce, 0x68f0e71f, 0x7bd8de6c, 0x753f36bd, 0x5d88ac8a, + 0x536f445b, 0x40477d28, 0x4ea095f9, 0xff56c456, 0xf1b12c87, + 0xe29915f4, 0xec7efd25, 0xc4c96712, 0xca2e8fc3, 0xd906b6b0, + 0xd7e15e61, 0x886982de, 0x868e6a0f, 0x95a6537c, 0x9b41bbad, + 0xb3f6219a, 0xbd11c94b, 0xae39f038, 0xa0de18e9, 0x16a45527, + 0x1843bdf6, 0x0b6b8485, 0x058c6c54, 0x2d3bf663, 0x23dc1eb2, + 0x30f427c1, 0x3e13cf10, 0x619b13af, 0x6f7cfb7e, 0x7c54c20d, + 0x72b32adc, 0x5a04b0eb, 0x54e3583a, 0x47cb6149, 0x492c8998, + 0xf8dad837, 0xf63d30e6, 0xe5150995, 0xebf2e144, 0xc3457b73, + 0xcda293a2, 0xde8aaad1, 0xd06d4200, 0x8fe59ebf, 0x8102766e, + 0x922a4f1d, 0x9ccda7cc, 0xb47a3dfb, 0xba9dd52a, 0xa9b5ec59, + 0xa7520488}, + {0x00000000, 0x3c60e308, 0x78c1c610, 0x44a12518, 0xf1838c20, + 0xcde36f28, 0x89424a30, 0xb522a938, 0x38761e01, 0x0416fd09, + 0x40b7d811, 0x7cd73b19, 0xc9f59221, 0xf5957129, 0xb1345431, + 0x8d54b739, 0x70ec3c02, 0x4c8cdf0a, 0x082dfa12, 0x344d191a, + 0x816fb022, 0xbd0f532a, 0xf9ae7632, 0xc5ce953a, 0x489a2203, + 0x74fac10b, 0x305be413, 0x0c3b071b, 0xb919ae23, 0x85794d2b, + 0xc1d86833, 0xfdb88b3b, 0xe1d87804, 0xddb89b0c, 0x9919be14, + 0xa5795d1c, 0x105bf424, 0x2c3b172c, 0x689a3234, 0x54fad13c, + 0xd9ae6605, 0xe5ce850d, 0xa16fa015, 0x9d0f431d, 0x282dea25, + 0x144d092d, 0x50ec2c35, 0x6c8ccf3d, 0x91344406, 0xad54a70e, + 0xe9f58216, 0xd595611e, 0x60b7c826, 0x5cd72b2e, 0x18760e36, + 0x2416ed3e, 0xa9425a07, 0x9522b90f, 0xd1839c17, 0xede37f1f, + 0x58c1d627, 0x64a1352f, 0x20001037, 0x1c60f33f, 0x18c1f649, + 0x24a11541, 0x60003059, 0x5c60d351, 0xe9427a69, 0xd5229961, + 0x9183bc79, 0xade35f71, 0x20b7e848, 0x1cd70b40, 0x58762e58, + 0x6416cd50, 0xd1346468, 0xed548760, 0xa9f5a278, 0x95954170, + 0x682dca4b, 0x544d2943, 0x10ec0c5b, 0x2c8cef53, 0x99ae466b, + 0xa5cea563, 0xe16f807b, 0xdd0f6373, 0x505bd44a, 0x6c3b3742, + 0x289a125a, 0x14faf152, 0xa1d8586a, 0x9db8bb62, 0xd9199e7a, + 0xe5797d72, 0xf9198e4d, 0xc5796d45, 0x81d8485d, 0xbdb8ab55, + 0x089a026d, 0x34fae165, 0x705bc47d, 0x4c3b2775, 0xc16f904c, + 0xfd0f7344, 0xb9ae565c, 0x85ceb554, 0x30ec1c6c, 0x0c8cff64, + 0x482dda7c, 0x744d3974, 0x89f5b24f, 0xb5955147, 0xf134745f, + 0xcd549757, 0x78763e6f, 0x4416dd67, 0x00b7f87f, 0x3cd71b77, + 0xb183ac4e, 0x8de34f46, 0xc9426a5e, 0xf5228956, 0x4000206e, + 0x7c60c366, 0x38c1e67e, 0x04a10576, 0x3183ec92, 0x0de30f9a, + 0x49422a82, 0x7522c98a, 0xc00060b2, 0xfc6083ba, 0xb8c1a6a2, + 0x84a145aa, 0x09f5f293, 0x3595119b, 0x71343483, 0x4d54d78b, + 0xf8767eb3, 0xc4169dbb, 0x80b7b8a3, 0xbcd75bab, 0x416fd090, + 0x7d0f3398, 0x39ae1680, 0x05cef588, 0xb0ec5cb0, 0x8c8cbfb8, + 0xc82d9aa0, 0xf44d79a8, 0x7919ce91, 0x45792d99, 0x01d80881, + 0x3db8eb89, 0x889a42b1, 0xb4faa1b9, 0xf05b84a1, 0xcc3b67a9, + 0xd05b9496, 0xec3b779e, 0xa89a5286, 0x94fab18e, 0x21d818b6, + 0x1db8fbbe, 0x5919dea6, 0x65793dae, 0xe82d8a97, 0xd44d699f, + 0x90ec4c87, 0xac8caf8f, 0x19ae06b7, 0x25cee5bf, 0x616fc0a7, + 0x5d0f23af, 0xa0b7a894, 0x9cd74b9c, 0xd8766e84, 0xe4168d8c, + 0x513424b4, 0x6d54c7bc, 0x29f5e2a4, 0x159501ac, 0x98c1b695, + 0xa4a1559d, 0xe0007085, 0xdc60938d, 0x69423ab5, 0x5522d9bd, + 0x1183fca5, 0x2de31fad, 0x29421adb, 0x1522f9d3, 0x5183dccb, + 0x6de33fc3, 0xd8c196fb, 0xe4a175f3, 0xa00050eb, 0x9c60b3e3, + 0x113404da, 0x2d54e7d2, 0x69f5c2ca, 0x559521c2, 0xe0b788fa, + 0xdcd76bf2, 0x98764eea, 0xa416ade2, 0x59ae26d9, 0x65cec5d1, + 0x216fe0c9, 0x1d0f03c1, 0xa82daaf9, 0x944d49f1, 0xd0ec6ce9, + 0xec8c8fe1, 0x61d838d8, 0x5db8dbd0, 0x1919fec8, 0x25791dc0, + 0x905bb4f8, 0xac3b57f0, 0xe89a72e8, 0xd4fa91e0, 0xc89a62df, + 0xf4fa81d7, 0xb05ba4cf, 0x8c3b47c7, 0x3919eeff, 0x05790df7, + 0x41d828ef, 0x7db8cbe7, 0xf0ec7cde, 0xcc8c9fd6, 0x882dbace, + 0xb44d59c6, 0x016ff0fe, 0x3d0f13f6, 0x79ae36ee, 0x45ced5e6, + 0xb8765edd, 0x8416bdd5, 0xc0b798cd, 0xfcd77bc5, 0x49f5d2fd, + 0x759531f5, 0x313414ed, 0x0d54f7e5, 0x800040dc, 0xbc60a3d4, + 0xf8c186cc, 0xc4a165c4, 0x7183ccfc, 0x4de32ff4, 0x09420aec, + 0x3522e9e4}, + {0x00000000, 0x6307d924, 0xc60fb248, 0xa5086b6c, 0x576e62d1, + 0x3469bbf5, 0x9161d099, 0xf26609bd, 0xaedcc5a2, 0xcddb1c86, + 0x68d377ea, 0x0bd4aece, 0xf9b2a773, 0x9ab57e57, 0x3fbd153b, + 0x5cbacc1f, 0x86c88d05, 0xe5cf5421, 0x40c73f4d, 0x23c0e669, + 0xd1a6efd4, 0xb2a136f0, 0x17a95d9c, 0x74ae84b8, 0x281448a7, + 0x4b139183, 0xee1bfaef, 0x8d1c23cb, 0x7f7a2a76, 0x1c7df352, + 0xb975983e, 0xda72411a, 0xd6e01c4b, 0xb5e7c56f, 0x10efae03, + 0x73e87727, 0x818e7e9a, 0xe289a7be, 0x4781ccd2, 0x248615f6, + 0x783cd9e9, 0x1b3b00cd, 0xbe336ba1, 0xdd34b285, 0x2f52bb38, + 0x4c55621c, 0xe95d0970, 0x8a5ad054, 0x5028914e, 0x332f486a, + 0x96272306, 0xf520fa22, 0x0746f39f, 0x64412abb, 0xc14941d7, + 0xa24e98f3, 0xfef454ec, 0x9df38dc8, 0x38fbe6a4, 0x5bfc3f80, + 0xa99a363d, 0xca9def19, 0x6f958475, 0x0c925d51, 0x76b13ed7, + 0x15b6e7f3, 0xb0be8c9f, 0xd3b955bb, 0x21df5c06, 0x42d88522, + 0xe7d0ee4e, 0x84d7376a, 0xd86dfb75, 0xbb6a2251, 0x1e62493d, + 0x7d659019, 0x8f0399a4, 0xec044080, 0x490c2bec, 0x2a0bf2c8, + 0xf079b3d2, 0x937e6af6, 0x3676019a, 0x5571d8be, 0xa717d103, + 0xc4100827, 0x6118634b, 0x021fba6f, 0x5ea57670, 0x3da2af54, + 0x98aac438, 0xfbad1d1c, 0x09cb14a1, 0x6acccd85, 0xcfc4a6e9, + 0xacc37fcd, 0xa051229c, 0xc356fbb8, 0x665e90d4, 0x055949f0, + 0xf73f404d, 0x94389969, 0x3130f205, 0x52372b21, 0x0e8de73e, + 0x6d8a3e1a, 0xc8825576, 0xab858c52, 0x59e385ef, 0x3ae45ccb, + 0x9fec37a7, 0xfcebee83, 0x2699af99, 0x459e76bd, 0xe0961dd1, + 0x8391c4f5, 0x71f7cd48, 0x12f0146c, 0xb7f87f00, 0xd4ffa624, + 0x88456a3b, 0xeb42b31f, 0x4e4ad873, 0x2d4d0157, 0xdf2b08ea, + 0xbc2cd1ce, 0x1924baa2, 0x7a236386, 0xed627dae, 0x8e65a48a, + 0x2b6dcfe6, 0x486a16c2, 0xba0c1f7f, 0xd90bc65b, 0x7c03ad37, + 0x1f047413, 0x43beb80c, 0x20b96128, 0x85b10a44, 0xe6b6d360, + 0x14d0dadd, 0x77d703f9, 0xd2df6895, 0xb1d8b1b1, 0x6baaf0ab, + 0x08ad298f, 0xada542e3, 0xcea29bc7, 0x3cc4927a, 0x5fc34b5e, + 0xfacb2032, 0x99ccf916, 0xc5763509, 0xa671ec2d, 0x03798741, + 0x607e5e65, 0x921857d8, 0xf11f8efc, 0x5417e590, 0x37103cb4, + 0x3b8261e5, 0x5885b8c1, 0xfd8dd3ad, 0x9e8a0a89, 0x6cec0334, + 0x0febda10, 0xaae3b17c, 0xc9e46858, 0x955ea447, 0xf6597d63, + 0x5351160f, 0x3056cf2b, 0xc230c696, 0xa1371fb2, 0x043f74de, + 0x6738adfa, 0xbd4aece0, 0xde4d35c4, 0x7b455ea8, 0x1842878c, + 0xea248e31, 0x89235715, 0x2c2b3c79, 0x4f2ce55d, 0x13962942, + 0x7091f066, 0xd5999b0a, 0xb69e422e, 0x44f84b93, 0x27ff92b7, + 0x82f7f9db, 0xe1f020ff, 0x9bd34379, 0xf8d49a5d, 0x5ddcf131, + 0x3edb2815, 0xccbd21a8, 0xafbaf88c, 0x0ab293e0, 0x69b54ac4, + 0x350f86db, 0x56085fff, 0xf3003493, 0x9007edb7, 0x6261e40a, + 0x01663d2e, 0xa46e5642, 0xc7698f66, 0x1d1bce7c, 0x7e1c1758, + 0xdb147c34, 0xb813a510, 0x4a75acad, 0x29727589, 0x8c7a1ee5, + 0xef7dc7c1, 0xb3c70bde, 0xd0c0d2fa, 0x75c8b996, 0x16cf60b2, + 0xe4a9690f, 0x87aeb02b, 0x22a6db47, 0x41a10263, 0x4d335f32, + 0x2e348616, 0x8b3ced7a, 0xe83b345e, 0x1a5d3de3, 0x795ae4c7, + 0xdc528fab, 0xbf55568f, 0xe3ef9a90, 0x80e843b4, 0x25e028d8, + 0x46e7f1fc, 0xb481f841, 0xd7862165, 0x728e4a09, 0x1189932d, + 0xcbfbd237, 0xa8fc0b13, 0x0df4607f, 0x6ef3b95b, 0x9c95b0e6, + 0xff9269c2, 0x5a9a02ae, 0x399ddb8a, 0x65271795, 0x0620ceb1, + 0xa328a5dd, 0xc02f7cf9, 0x32497544, 0x514eac60, 0xf446c70c, + 0x97411e28}, + {0x00000000, 0x01b5fd1d, 0x036bfa3a, 0x02de0727, 0x06d7f474, + 0x07620969, 0x05bc0e4e, 0x0409f353, 0x0dafe8e8, 0x0c1a15f5, + 0x0ec412d2, 0x0f71efcf, 0x0b781c9c, 0x0acde181, 0x0813e6a6, + 0x09a61bbb, 0x1b5fd1d0, 0x1aea2ccd, 0x18342bea, 0x1981d6f7, + 0x1d8825a4, 0x1c3dd8b9, 0x1ee3df9e, 0x1f562283, 0x16f03938, + 0x1745c425, 0x159bc302, 0x142e3e1f, 0x1027cd4c, 0x11923051, + 0x134c3776, 0x12f9ca6b, 0x36bfa3a0, 0x370a5ebd, 0x35d4599a, + 0x3461a487, 0x306857d4, 0x31ddaac9, 0x3303adee, 0x32b650f3, + 0x3b104b48, 0x3aa5b655, 0x387bb172, 0x39ce4c6f, 0x3dc7bf3c, + 0x3c724221, 0x3eac4506, 0x3f19b81b, 0x2de07270, 0x2c558f6d, + 0x2e8b884a, 0x2f3e7557, 0x2b378604, 0x2a827b19, 0x285c7c3e, + 0x29e98123, 0x204f9a98, 0x21fa6785, 0x232460a2, 0x22919dbf, + 0x26986eec, 0x272d93f1, 0x25f394d6, 0x244669cb, 0x6d7f4740, + 0x6ccaba5d, 0x6e14bd7a, 0x6fa14067, 0x6ba8b334, 0x6a1d4e29, + 0x68c3490e, 0x6976b413, 0x60d0afa8, 0x616552b5, 0x63bb5592, + 0x620ea88f, 0x66075bdc, 0x67b2a6c1, 0x656ca1e6, 0x64d95cfb, + 0x76209690, 0x77956b8d, 0x754b6caa, 0x74fe91b7, 0x70f762e4, + 0x71429ff9, 0x739c98de, 0x722965c3, 0x7b8f7e78, 0x7a3a8365, + 0x78e48442, 0x7951795f, 0x7d588a0c, 0x7ced7711, 0x7e337036, + 0x7f868d2b, 0x5bc0e4e0, 0x5a7519fd, 0x58ab1eda, 0x591ee3c7, + 0x5d171094, 0x5ca2ed89, 0x5e7ceaae, 0x5fc917b3, 0x566f0c08, + 0x57daf115, 0x5504f632, 0x54b10b2f, 0x50b8f87c, 0x510d0561, + 0x53d30246, 0x5266ff5b, 0x409f3530, 0x412ac82d, 0x43f4cf0a, + 0x42413217, 0x4648c144, 0x47fd3c59, 0x45233b7e, 0x4496c663, + 0x4d30ddd8, 0x4c8520c5, 0x4e5b27e2, 0x4feedaff, 0x4be729ac, + 0x4a52d4b1, 0x488cd396, 0x49392e8b, 0xdafe8e80, 0xdb4b739d, + 0xd99574ba, 0xd82089a7, 0xdc297af4, 0xdd9c87e9, 0xdf4280ce, + 0xdef77dd3, 0xd7516668, 0xd6e49b75, 0xd43a9c52, 0xd58f614f, + 0xd186921c, 0xd0336f01, 0xd2ed6826, 0xd358953b, 0xc1a15f50, + 0xc014a24d, 0xc2caa56a, 0xc37f5877, 0xc776ab24, 0xc6c35639, + 0xc41d511e, 0xc5a8ac03, 0xcc0eb7b8, 0xcdbb4aa5, 0xcf654d82, + 0xced0b09f, 0xcad943cc, 0xcb6cbed1, 0xc9b2b9f6, 0xc80744eb, + 0xec412d20, 0xedf4d03d, 0xef2ad71a, 0xee9f2a07, 0xea96d954, + 0xeb232449, 0xe9fd236e, 0xe848de73, 0xe1eec5c8, 0xe05b38d5, + 0xe2853ff2, 0xe330c2ef, 0xe73931bc, 0xe68ccca1, 0xe452cb86, + 0xe5e7369b, 0xf71efcf0, 0xf6ab01ed, 0xf47506ca, 0xf5c0fbd7, + 0xf1c90884, 0xf07cf599, 0xf2a2f2be, 0xf3170fa3, 0xfab11418, + 0xfb04e905, 0xf9daee22, 0xf86f133f, 0xfc66e06c, 0xfdd31d71, + 0xff0d1a56, 0xfeb8e74b, 0xb781c9c0, 0xb63434dd, 0xb4ea33fa, + 0xb55fcee7, 0xb1563db4, 0xb0e3c0a9, 0xb23dc78e, 0xb3883a93, + 0xba2e2128, 0xbb9bdc35, 0xb945db12, 0xb8f0260f, 0xbcf9d55c, + 0xbd4c2841, 0xbf922f66, 0xbe27d27b, 0xacde1810, 0xad6be50d, + 0xafb5e22a, 0xae001f37, 0xaa09ec64, 0xabbc1179, 0xa962165e, + 0xa8d7eb43, 0xa171f0f8, 0xa0c40de5, 0xa21a0ac2, 0xa3aff7df, + 0xa7a6048c, 0xa613f991, 0xa4cdfeb6, 0xa57803ab, 0x813e6a60, + 0x808b977d, 0x8255905a, 0x83e06d47, 0x87e99e14, 0x865c6309, + 0x8482642e, 0x85379933, 0x8c918288, 0x8d247f95, 0x8ffa78b2, + 0x8e4f85af, 0x8a4676fc, 0x8bf38be1, 0x892d8cc6, 0x889871db, + 0x9a61bbb0, 0x9bd446ad, 0x990a418a, 0x98bfbc97, 0x9cb64fc4, + 0x9d03b2d9, 0x9fddb5fe, 0x9e6848e3, 0x97ce5358, 0x967bae45, + 0x94a5a962, 0x9510547f, 0x9119a72c, 0x90ac5a31, 0x92725d16, + 0x93c7a00b}, + {0x00000000, 0x6e8c1b41, 0xdd183682, 0xb3942dc3, 0x61416b45, + 0x0fcd7004, 0xbc595dc7, 0xd2d54686, 0xc282d68a, 0xac0ecdcb, + 0x1f9ae008, 0x7116fb49, 0xa3c3bdcf, 0xcd4fa68e, 0x7edb8b4d, + 0x1057900c, 0x5e74ab55, 0x30f8b014, 0x836c9dd7, 0xede08696, + 0x3f35c010, 0x51b9db51, 0xe22df692, 0x8ca1edd3, 0x9cf67ddf, + 0xf27a669e, 0x41ee4b5d, 0x2f62501c, 0xfdb7169a, 0x933b0ddb, + 0x20af2018, 0x4e233b59, 0xbce956aa, 0xd2654deb, 0x61f16028, + 0x0f7d7b69, 0xdda83def, 0xb32426ae, 0x00b00b6d, 0x6e3c102c, + 0x7e6b8020, 0x10e79b61, 0xa373b6a2, 0xcdffade3, 0x1f2aeb65, + 0x71a6f024, 0xc232dde7, 0xacbec6a6, 0xe29dfdff, 0x8c11e6be, + 0x3f85cb7d, 0x5109d03c, 0x83dc96ba, 0xed508dfb, 0x5ec4a038, + 0x3048bb79, 0x201f2b75, 0x4e933034, 0xfd071df7, 0x938b06b6, + 0x415e4030, 0x2fd25b71, 0x9c4676b2, 0xf2ca6df3, 0xa2a3ab15, + 0xcc2fb054, 0x7fbb9d97, 0x113786d6, 0xc3e2c050, 0xad6edb11, + 0x1efaf6d2, 0x7076ed93, 0x60217d9f, 0x0ead66de, 0xbd394b1d, + 0xd3b5505c, 0x016016da, 0x6fec0d9b, 0xdc782058, 0xb2f43b19, + 0xfcd70040, 0x925b1b01, 0x21cf36c2, 0x4f432d83, 0x9d966b05, + 0xf31a7044, 0x408e5d87, 0x2e0246c6, 0x3e55d6ca, 0x50d9cd8b, + 0xe34de048, 0x8dc1fb09, 0x5f14bd8f, 0x3198a6ce, 0x820c8b0d, + 0xec80904c, 0x1e4afdbf, 0x70c6e6fe, 0xc352cb3d, 0xadded07c, + 0x7f0b96fa, 0x11878dbb, 0xa213a078, 0xcc9fbb39, 0xdcc82b35, + 0xb2443074, 0x01d01db7, 0x6f5c06f6, 0xbd894070, 0xd3055b31, + 0x609176f2, 0x0e1d6db3, 0x403e56ea, 0x2eb24dab, 0x9d266068, + 0xf3aa7b29, 0x217f3daf, 0x4ff326ee, 0xfc670b2d, 0x92eb106c, + 0x82bc8060, 0xec309b21, 0x5fa4b6e2, 0x3128ada3, 0xe3fdeb25, + 0x8d71f064, 0x3ee5dda7, 0x5069c6e6, 0x9e36506b, 0xf0ba4b2a, + 0x432e66e9, 0x2da27da8, 0xff773b2e, 0x91fb206f, 0x226f0dac, + 0x4ce316ed, 0x5cb486e1, 0x32389da0, 0x81acb063, 0xef20ab22, + 0x3df5eda4, 0x5379f6e5, 0xe0eddb26, 0x8e61c067, 0xc042fb3e, + 0xaecee07f, 0x1d5acdbc, 0x73d6d6fd, 0xa103907b, 0xcf8f8b3a, + 0x7c1ba6f9, 0x1297bdb8, 0x02c02db4, 0x6c4c36f5, 0xdfd81b36, + 0xb1540077, 0x638146f1, 0x0d0d5db0, 0xbe997073, 0xd0156b32, + 0x22df06c1, 0x4c531d80, 0xffc73043, 0x914b2b02, 0x439e6d84, + 0x2d1276c5, 0x9e865b06, 0xf00a4047, 0xe05dd04b, 0x8ed1cb0a, + 0x3d45e6c9, 0x53c9fd88, 0x811cbb0e, 0xef90a04f, 0x5c048d8c, + 0x328896cd, 0x7cabad94, 0x1227b6d5, 0xa1b39b16, 0xcf3f8057, + 0x1deac6d1, 0x7366dd90, 0xc0f2f053, 0xae7eeb12, 0xbe297b1e, + 0xd0a5605f, 0x63314d9c, 0x0dbd56dd, 0xdf68105b, 0xb1e40b1a, + 0x027026d9, 0x6cfc3d98, 0x3c95fb7e, 0x5219e03f, 0xe18dcdfc, + 0x8f01d6bd, 0x5dd4903b, 0x33588b7a, 0x80cca6b9, 0xee40bdf8, + 0xfe172df4, 0x909b36b5, 0x230f1b76, 0x4d830037, 0x9f5646b1, + 0xf1da5df0, 0x424e7033, 0x2cc26b72, 0x62e1502b, 0x0c6d4b6a, + 0xbff966a9, 0xd1757de8, 0x03a03b6e, 0x6d2c202f, 0xdeb80dec, + 0xb03416ad, 0xa06386a1, 0xceef9de0, 0x7d7bb023, 0x13f7ab62, + 0xc122ede4, 0xafaef6a5, 0x1c3adb66, 0x72b6c027, 0x807cadd4, + 0xeef0b695, 0x5d649b56, 0x33e88017, 0xe13dc691, 0x8fb1ddd0, + 0x3c25f013, 0x52a9eb52, 0x42fe7b5e, 0x2c72601f, 0x9fe64ddc, + 0xf16a569d, 0x23bf101b, 0x4d330b5a, 0xfea72699, 0x902b3dd8, + 0xde080681, 0xb0841dc0, 0x03103003, 0x6d9c2b42, 0xbf496dc4, + 0xd1c57685, 0x62515b46, 0x0cdd4007, 0x1c8ad00b, 0x7206cb4a, + 0xc192e689, 0xaf1efdc8, 0x7dcbbb4e, 0x1347a00f, 0xa0d38dcc, + 0xce5f968d}, + {0x00000000, 0xe71da697, 0x154a4b6f, 0xf257edf8, 0x2a9496de, + 0xcd893049, 0x3fdeddb1, 0xd8c37b26, 0x55292dbc, 0xb2348b2b, + 0x406366d3, 0xa77ec044, 0x7fbdbb62, 0x98a01df5, 0x6af7f00d, + 0x8dea569a, 0xaa525b78, 0x4d4ffdef, 0xbf181017, 0x5805b680, + 0x80c6cda6, 0x67db6b31, 0x958c86c9, 0x7291205e, 0xff7b76c4, + 0x1866d053, 0xea313dab, 0x0d2c9b3c, 0xd5efe01a, 0x32f2468d, + 0xc0a5ab75, 0x27b80de2, 0x8fd5b0b1, 0x68c81626, 0x9a9ffbde, + 0x7d825d49, 0xa541266f, 0x425c80f8, 0xb00b6d00, 0x5716cb97, + 0xdafc9d0d, 0x3de13b9a, 0xcfb6d662, 0x28ab70f5, 0xf0680bd3, + 0x1775ad44, 0xe52240bc, 0x023fe62b, 0x2587ebc9, 0xc29a4d5e, + 0x30cda0a6, 0xd7d00631, 0x0f137d17, 0xe80edb80, 0x1a593678, + 0xfd4490ef, 0x70aec675, 0x97b360e2, 0x65e48d1a, 0x82f92b8d, + 0x5a3a50ab, 0xbd27f63c, 0x4f701bc4, 0xa86dbd53, 0xc4da6723, + 0x23c7c1b4, 0xd1902c4c, 0x368d8adb, 0xee4ef1fd, 0x0953576a, + 0xfb04ba92, 0x1c191c05, 0x91f34a9f, 0x76eeec08, 0x84b901f0, + 0x63a4a767, 0xbb67dc41, 0x5c7a7ad6, 0xae2d972e, 0x493031b9, + 0x6e883c5b, 0x89959acc, 0x7bc27734, 0x9cdfd1a3, 0x441caa85, + 0xa3010c12, 0x5156e1ea, 0xb64b477d, 0x3ba111e7, 0xdcbcb770, + 0x2eeb5a88, 0xc9f6fc1f, 0x11358739, 0xf62821ae, 0x047fcc56, + 0xe3626ac1, 0x4b0fd792, 0xac127105, 0x5e459cfd, 0xb9583a6a, + 0x619b414c, 0x8686e7db, 0x74d10a23, 0x93ccacb4, 0x1e26fa2e, + 0xf93b5cb9, 0x0b6cb141, 0xec7117d6, 0x34b26cf0, 0xd3afca67, + 0x21f8279f, 0xc6e58108, 0xe15d8cea, 0x06402a7d, 0xf417c785, + 0x130a6112, 0xcbc91a34, 0x2cd4bca3, 0xde83515b, 0x399ef7cc, + 0xb474a156, 0x536907c1, 0xa13eea39, 0x46234cae, 0x9ee03788, + 0x79fd911f, 0x8baa7ce7, 0x6cb7da70, 0x52c5c807, 0xb5d86e90, + 0x478f8368, 0xa09225ff, 0x78515ed9, 0x9f4cf84e, 0x6d1b15b6, + 0x8a06b321, 0x07ece5bb, 0xe0f1432c, 0x12a6aed4, 0xf5bb0843, + 0x2d787365, 0xca65d5f2, 0x3832380a, 0xdf2f9e9d, 0xf897937f, + 0x1f8a35e8, 0xedddd810, 0x0ac07e87, 0xd20305a1, 0x351ea336, + 0xc7494ece, 0x2054e859, 0xadbebec3, 0x4aa31854, 0xb8f4f5ac, + 0x5fe9533b, 0x872a281d, 0x60378e8a, 0x92606372, 0x757dc5e5, + 0xdd1078b6, 0x3a0dde21, 0xc85a33d9, 0x2f47954e, 0xf784ee68, + 0x109948ff, 0xe2cea507, 0x05d30390, 0x8839550a, 0x6f24f39d, + 0x9d731e65, 0x7a6eb8f2, 0xa2adc3d4, 0x45b06543, 0xb7e788bb, + 0x50fa2e2c, 0x774223ce, 0x905f8559, 0x620868a1, 0x8515ce36, + 0x5dd6b510, 0xbacb1387, 0x489cfe7f, 0xaf8158e8, 0x226b0e72, + 0xc576a8e5, 0x3721451d, 0xd03ce38a, 0x08ff98ac, 0xefe23e3b, + 0x1db5d3c3, 0xfaa87554, 0x961faf24, 0x710209b3, 0x8355e44b, + 0x644842dc, 0xbc8b39fa, 0x5b969f6d, 0xa9c17295, 0x4edcd402, + 0xc3368298, 0x242b240f, 0xd67cc9f7, 0x31616f60, 0xe9a21446, + 0x0ebfb2d1, 0xfce85f29, 0x1bf5f9be, 0x3c4df45c, 0xdb5052cb, + 0x2907bf33, 0xce1a19a4, 0x16d96282, 0xf1c4c415, 0x039329ed, + 0xe48e8f7a, 0x6964d9e0, 0x8e797f77, 0x7c2e928f, 0x9b333418, + 0x43f04f3e, 0xa4ede9a9, 0x56ba0451, 0xb1a7a2c6, 0x19ca1f95, + 0xfed7b902, 0x0c8054fa, 0xeb9df26d, 0x335e894b, 0xd4432fdc, + 0x2614c224, 0xc10964b3, 0x4ce33229, 0xabfe94be, 0x59a97946, + 0xbeb4dfd1, 0x6677a4f7, 0x816a0260, 0x733def98, 0x9420490f, + 0xb39844ed, 0x5485e27a, 0xa6d20f82, 0x41cfa915, 0x990cd233, + 0x7e1174a4, 0x8c46995c, 0x6b5b3fcb, 0xe6b16951, 0x01accfc6, + 0xf3fb223e, 0x14e684a9, 0xcc25ff8f, 0x2b385918, 0xd96fb4e0, + 0x3e721277}, + {0x00000000, 0xa58b900e, 0x9066265d, 0x35edb653, 0xfbbd4afb, + 0x5e36daf5, 0x6bdb6ca6, 0xce50fca8, 0x2c0b93b7, 0x898003b9, + 0xbc6db5ea, 0x19e625e4, 0xd7b6d94c, 0x723d4942, 0x47d0ff11, + 0xe25b6f1f, 0x5817276e, 0xfd9cb760, 0xc8710133, 0x6dfa913d, + 0xa3aa6d95, 0x0621fd9b, 0x33cc4bc8, 0x9647dbc6, 0x741cb4d9, + 0xd19724d7, 0xe47a9284, 0x41f1028a, 0x8fa1fe22, 0x2a2a6e2c, + 0x1fc7d87f, 0xba4c4871, 0xb02e4edc, 0x15a5ded2, 0x20486881, + 0x85c3f88f, 0x4b930427, 0xee189429, 0xdbf5227a, 0x7e7eb274, + 0x9c25dd6b, 0x39ae4d65, 0x0c43fb36, 0xa9c86b38, 0x67989790, + 0xc213079e, 0xf7feb1cd, 0x527521c3, 0xe83969b2, 0x4db2f9bc, + 0x785f4fef, 0xddd4dfe1, 0x13842349, 0xb60fb347, 0x83e20514, + 0x2669951a, 0xc432fa05, 0x61b96a0b, 0x5454dc58, 0xf1df4c56, + 0x3f8fb0fe, 0x9a0420f0, 0xafe996a3, 0x0a6206ad, 0xbb2d9bf9, + 0x1ea60bf7, 0x2b4bbda4, 0x8ec02daa, 0x4090d102, 0xe51b410c, + 0xd0f6f75f, 0x757d6751, 0x9726084e, 0x32ad9840, 0x07402e13, + 0xa2cbbe1d, 0x6c9b42b5, 0xc910d2bb, 0xfcfd64e8, 0x5976f4e6, + 0xe33abc97, 0x46b12c99, 0x735c9aca, 0xd6d70ac4, 0x1887f66c, + 0xbd0c6662, 0x88e1d031, 0x2d6a403f, 0xcf312f20, 0x6ababf2e, + 0x5f57097d, 0xfadc9973, 0x348c65db, 0x9107f5d5, 0xa4ea4386, + 0x0161d388, 0x0b03d525, 0xae88452b, 0x9b65f378, 0x3eee6376, + 0xf0be9fde, 0x55350fd0, 0x60d8b983, 0xc553298d, 0x27084692, + 0x8283d69c, 0xb76e60cf, 0x12e5f0c1, 0xdcb50c69, 0x793e9c67, + 0x4cd32a34, 0xe958ba3a, 0x5314f24b, 0xf69f6245, 0xc372d416, + 0x66f94418, 0xa8a9b8b0, 0x0d2228be, 0x38cf9eed, 0x9d440ee3, + 0x7f1f61fc, 0xda94f1f2, 0xef7947a1, 0x4af2d7af, 0x84a22b07, + 0x2129bb09, 0x14c40d5a, 0xb14f9d54, 0xad2a31b3, 0x08a1a1bd, + 0x3d4c17ee, 0x98c787e0, 0x56977b48, 0xf31ceb46, 0xc6f15d15, + 0x637acd1b, 0x8121a204, 0x24aa320a, 0x11478459, 0xb4cc1457, + 0x7a9ce8ff, 0xdf1778f1, 0xeafacea2, 0x4f715eac, 0xf53d16dd, + 0x50b686d3, 0x655b3080, 0xc0d0a08e, 0x0e805c26, 0xab0bcc28, + 0x9ee67a7b, 0x3b6dea75, 0xd936856a, 0x7cbd1564, 0x4950a337, + 0xecdb3339, 0x228bcf91, 0x87005f9f, 0xb2ede9cc, 0x176679c2, + 0x1d047f6f, 0xb88fef61, 0x8d625932, 0x28e9c93c, 0xe6b93594, + 0x4332a59a, 0x76df13c9, 0xd35483c7, 0x310fecd8, 0x94847cd6, + 0xa169ca85, 0x04e25a8b, 0xcab2a623, 0x6f39362d, 0x5ad4807e, + 0xff5f1070, 0x45135801, 0xe098c80f, 0xd5757e5c, 0x70feee52, + 0xbeae12fa, 0x1b2582f4, 0x2ec834a7, 0x8b43a4a9, 0x6918cbb6, + 0xcc935bb8, 0xf97eedeb, 0x5cf57de5, 0x92a5814d, 0x372e1143, + 0x02c3a710, 0xa748371e, 0x1607aa4a, 0xb38c3a44, 0x86618c17, + 0x23ea1c19, 0xedbae0b1, 0x483170bf, 0x7ddcc6ec, 0xd85756e2, + 0x3a0c39fd, 0x9f87a9f3, 0xaa6a1fa0, 0x0fe18fae, 0xc1b17306, + 0x643ae308, 0x51d7555b, 0xf45cc555, 0x4e108d24, 0xeb9b1d2a, + 0xde76ab79, 0x7bfd3b77, 0xb5adc7df, 0x102657d1, 0x25cbe182, + 0x8040718c, 0x621b1e93, 0xc7908e9d, 0xf27d38ce, 0x57f6a8c0, + 0x99a65468, 0x3c2dc466, 0x09c07235, 0xac4be23b, 0xa629e496, + 0x03a27498, 0x364fc2cb, 0x93c452c5, 0x5d94ae6d, 0xf81f3e63, + 0xcdf28830, 0x6879183e, 0x8a227721, 0x2fa9e72f, 0x1a44517c, + 0xbfcfc172, 0x719f3dda, 0xd414add4, 0xe1f91b87, 0x44728b89, + 0xfe3ec3f8, 0x5bb553f6, 0x6e58e5a5, 0xcbd375ab, 0x05838903, + 0xa008190d, 0x95e5af5e, 0x306e3f50, 0xd235504f, 0x77bec041, + 0x42537612, 0xe7d8e61c, 0x29881ab4, 0x8c038aba, 0xb9ee3ce9, + 0x1c65ace7}}; + +local const z_word_t FAR crc_braid_big_table[][256] = { + {0x0000000000000000, 0x0e908ba500000000, 0x5d26669000000000, + 0x53b6ed3500000000, 0xfb4abdfb00000000, 0xf5da365e00000000, + 0xa66cdb6b00000000, 0xa8fc50ce00000000, 0xb7930b2c00000000, + 0xb903808900000000, 0xeab56dbc00000000, 0xe425e61900000000, + 0x4cd9b6d700000000, 0x42493d7200000000, 0x11ffd04700000000, + 0x1f6f5be200000000, 0x6e27175800000000, 0x60b79cfd00000000, + 0x330171c800000000, 0x3d91fa6d00000000, 0x956daaa300000000, + 0x9bfd210600000000, 0xc84bcc3300000000, 0xc6db479600000000, + 0xd9b41c7400000000, 0xd72497d100000000, 0x84927ae400000000, + 0x8a02f14100000000, 0x22fea18f00000000, 0x2c6e2a2a00000000, + 0x7fd8c71f00000000, 0x71484cba00000000, 0xdc4e2eb000000000, + 0xd2dea51500000000, 0x8168482000000000, 0x8ff8c38500000000, + 0x2704934b00000000, 0x299418ee00000000, 0x7a22f5db00000000, + 0x74b27e7e00000000, 0x6bdd259c00000000, 0x654dae3900000000, + 0x36fb430c00000000, 0x386bc8a900000000, 0x9097986700000000, + 0x9e0713c200000000, 0xcdb1fef700000000, 0xc321755200000000, + 0xb26939e800000000, 0xbcf9b24d00000000, 0xef4f5f7800000000, + 0xe1dfd4dd00000000, 0x4923841300000000, 0x47b30fb600000000, + 0x1405e28300000000, 0x1a95692600000000, 0x05fa32c400000000, + 0x0b6ab96100000000, 0x58dc545400000000, 0x564cdff100000000, + 0xfeb08f3f00000000, 0xf020049a00000000, 0xa396e9af00000000, + 0xad06620a00000000, 0xf99b2dbb00000000, 0xf70ba61e00000000, + 0xa4bd4b2b00000000, 0xaa2dc08e00000000, 0x02d1904000000000, + 0x0c411be500000000, 0x5ff7f6d000000000, 0x51677d7500000000, + 0x4e08269700000000, 0x4098ad3200000000, 0x132e400700000000, + 0x1dbecba200000000, 0xb5429b6c00000000, 0xbbd210c900000000, + 0xe864fdfc00000000, 0xe6f4765900000000, 0x97bc3ae300000000, + 0x992cb14600000000, 0xca9a5c7300000000, 0xc40ad7d600000000, + 0x6cf6871800000000, 0x62660cbd00000000, 0x31d0e18800000000, + 0x3f406a2d00000000, 0x202f31cf00000000, 0x2ebfba6a00000000, + 0x7d09575f00000000, 0x7399dcfa00000000, 0xdb658c3400000000, + 0xd5f5079100000000, 0x8643eaa400000000, 0x88d3610100000000, + 0x25d5030b00000000, 0x2b4588ae00000000, 0x78f3659b00000000, + 0x7663ee3e00000000, 0xde9fbef000000000, 0xd00f355500000000, + 0x83b9d86000000000, 0x8d2953c500000000, 0x9246082700000000, + 0x9cd6838200000000, 0xcf606eb700000000, 0xc1f0e51200000000, + 0x690cb5dc00000000, 0x679c3e7900000000, 0x342ad34c00000000, + 0x3aba58e900000000, 0x4bf2145300000000, 0x45629ff600000000, + 0x16d472c300000000, 0x1844f96600000000, 0xb0b8a9a800000000, + 0xbe28220d00000000, 0xed9ecf3800000000, 0xe30e449d00000000, + 0xfc611f7f00000000, 0xf2f194da00000000, 0xa14779ef00000000, + 0xafd7f24a00000000, 0x072ba28400000000, 0x09bb292100000000, + 0x5a0dc41400000000, 0x549d4fb100000000, 0xb3312aad00000000, + 0xbda1a10800000000, 0xee174c3d00000000, 0xe087c79800000000, + 0x487b975600000000, 0x46eb1cf300000000, 0x155df1c600000000, + 0x1bcd7a6300000000, 0x04a2218100000000, 0x0a32aa2400000000, + 0x5984471100000000, 0x5714ccb400000000, 0xffe89c7a00000000, + 0xf17817df00000000, 0xa2cefaea00000000, 0xac5e714f00000000, + 0xdd163df500000000, 0xd386b65000000000, 0x80305b6500000000, + 0x8ea0d0c000000000, 0x265c800e00000000, 0x28cc0bab00000000, + 0x7b7ae69e00000000, 0x75ea6d3b00000000, 0x6a8536d900000000, + 0x6415bd7c00000000, 0x37a3504900000000, 0x3933dbec00000000, + 0x91cf8b2200000000, 0x9f5f008700000000, 0xcce9edb200000000, + 0xc279661700000000, 0x6f7f041d00000000, 0x61ef8fb800000000, + 0x3259628d00000000, 0x3cc9e92800000000, 0x9435b9e600000000, + 0x9aa5324300000000, 0xc913df7600000000, 0xc78354d300000000, + 0xd8ec0f3100000000, 0xd67c849400000000, 0x85ca69a100000000, + 0x8b5ae20400000000, 0x23a6b2ca00000000, 0x2d36396f00000000, + 0x7e80d45a00000000, 0x70105fff00000000, 0x0158134500000000, + 0x0fc898e000000000, 0x5c7e75d500000000, 0x52eefe7000000000, + 0xfa12aebe00000000, 0xf482251b00000000, 0xa734c82e00000000, + 0xa9a4438b00000000, 0xb6cb186900000000, 0xb85b93cc00000000, + 0xebed7ef900000000, 0xe57df55c00000000, 0x4d81a59200000000, + 0x43112e3700000000, 0x10a7c30200000000, 0x1e3748a700000000, + 0x4aaa071600000000, 0x443a8cb300000000, 0x178c618600000000, + 0x191cea2300000000, 0xb1e0baed00000000, 0xbf70314800000000, + 0xecc6dc7d00000000, 0xe25657d800000000, 0xfd390c3a00000000, + 0xf3a9879f00000000, 0xa01f6aaa00000000, 0xae8fe10f00000000, + 0x0673b1c100000000, 0x08e33a6400000000, 0x5b55d75100000000, + 0x55c55cf400000000, 0x248d104e00000000, 0x2a1d9beb00000000, + 0x79ab76de00000000, 0x773bfd7b00000000, 0xdfc7adb500000000, + 0xd157261000000000, 0x82e1cb2500000000, 0x8c71408000000000, + 0x931e1b6200000000, 0x9d8e90c700000000, 0xce387df200000000, + 0xc0a8f65700000000, 0x6854a69900000000, 0x66c42d3c00000000, + 0x3572c00900000000, 0x3be24bac00000000, 0x96e429a600000000, + 0x9874a20300000000, 0xcbc24f3600000000, 0xc552c49300000000, + 0x6dae945d00000000, 0x633e1ff800000000, 0x3088f2cd00000000, + 0x3e18796800000000, 0x2177228a00000000, 0x2fe7a92f00000000, + 0x7c51441a00000000, 0x72c1cfbf00000000, 0xda3d9f7100000000, + 0xd4ad14d400000000, 0x871bf9e100000000, 0x898b724400000000, + 0xf8c33efe00000000, 0xf653b55b00000000, 0xa5e5586e00000000, + 0xab75d3cb00000000, 0x0389830500000000, 0x0d1908a000000000, + 0x5eafe59500000000, 0x503f6e3000000000, 0x4f5035d200000000, + 0x41c0be7700000000, 0x1276534200000000, 0x1ce6d8e700000000, + 0xb41a882900000000, 0xba8a038c00000000, 0xe93ceeb900000000, + 0xe7ac651c00000000}, + {0x0000000000000000, 0x97a61de700000000, 0x6f4b4a1500000000, + 0xf8ed57f200000000, 0xde96942a00000000, 0x493089cd00000000, + 0xb1ddde3f00000000, 0x267bc3d800000000, 0xbc2d295500000000, + 0x2b8b34b200000000, 0xd366634000000000, 0x44c07ea700000000, + 0x62bbbd7f00000000, 0xf51da09800000000, 0x0df0f76a00000000, + 0x9a56ea8d00000000, 0x785b52aa00000000, 0xeffd4f4d00000000, + 0x171018bf00000000, 0x80b6055800000000, 0xa6cdc68000000000, + 0x316bdb6700000000, 0xc9868c9500000000, 0x5e20917200000000, + 0xc4767bff00000000, 0x53d0661800000000, 0xab3d31ea00000000, + 0x3c9b2c0d00000000, 0x1ae0efd500000000, 0x8d46f23200000000, + 0x75aba5c000000000, 0xe20db82700000000, 0xb1b0d58f00000000, + 0x2616c86800000000, 0xdefb9f9a00000000, 0x495d827d00000000, + 0x6f2641a500000000, 0xf8805c4200000000, 0x006d0bb000000000, + 0x97cb165700000000, 0x0d9dfcda00000000, 0x9a3be13d00000000, + 0x62d6b6cf00000000, 0xf570ab2800000000, 0xd30b68f000000000, + 0x44ad751700000000, 0xbc4022e500000000, 0x2be63f0200000000, + 0xc9eb872500000000, 0x5e4d9ac200000000, 0xa6a0cd3000000000, + 0x3106d0d700000000, 0x177d130f00000000, 0x80db0ee800000000, + 0x7836591a00000000, 0xef9044fd00000000, 0x75c6ae7000000000, + 0xe260b39700000000, 0x1a8de46500000000, 0x8d2bf98200000000, + 0xab503a5a00000000, 0x3cf627bd00000000, 0xc41b704f00000000, + 0x53bd6da800000000, 0x2367dac400000000, 0xb4c1c72300000000, + 0x4c2c90d100000000, 0xdb8a8d3600000000, 0xfdf14eee00000000, + 0x6a57530900000000, 0x92ba04fb00000000, 0x051c191c00000000, + 0x9f4af39100000000, 0x08ecee7600000000, 0xf001b98400000000, + 0x67a7a46300000000, 0x41dc67bb00000000, 0xd67a7a5c00000000, + 0x2e972dae00000000, 0xb931304900000000, 0x5b3c886e00000000, + 0xcc9a958900000000, 0x3477c27b00000000, 0xa3d1df9c00000000, + 0x85aa1c4400000000, 0x120c01a300000000, 0xeae1565100000000, + 0x7d474bb600000000, 0xe711a13b00000000, 0x70b7bcdc00000000, + 0x885aeb2e00000000, 0x1ffcf6c900000000, 0x3987351100000000, + 0xae2128f600000000, 0x56cc7f0400000000, 0xc16a62e300000000, + 0x92d70f4b00000000, 0x057112ac00000000, 0xfd9c455e00000000, + 0x6a3a58b900000000, 0x4c419b6100000000, 0xdbe7868600000000, + 0x230ad17400000000, 0xb4accc9300000000, 0x2efa261e00000000, + 0xb95c3bf900000000, 0x41b16c0b00000000, 0xd61771ec00000000, + 0xf06cb23400000000, 0x67caafd300000000, 0x9f27f82100000000, + 0x0881e5c600000000, 0xea8c5de100000000, 0x7d2a400600000000, + 0x85c717f400000000, 0x12610a1300000000, 0x341ac9cb00000000, + 0xa3bcd42c00000000, 0x5b5183de00000000, 0xccf79e3900000000, + 0x56a174b400000000, 0xc107695300000000, 0x39ea3ea100000000, + 0xae4c234600000000, 0x8837e09e00000000, 0x1f91fd7900000000, + 0xe77caa8b00000000, 0x70dab76c00000000, 0x07c8c55200000000, + 0x906ed8b500000000, 0x68838f4700000000, 0xff2592a000000000, + 0xd95e517800000000, 0x4ef84c9f00000000, 0xb6151b6d00000000, + 0x21b3068a00000000, 0xbbe5ec0700000000, 0x2c43f1e000000000, + 0xd4aea61200000000, 0x4308bbf500000000, 0x6573782d00000000, + 0xf2d565ca00000000, 0x0a38323800000000, 0x9d9e2fdf00000000, + 0x7f9397f800000000, 0xe8358a1f00000000, 0x10d8dded00000000, + 0x877ec00a00000000, 0xa10503d200000000, 0x36a31e3500000000, + 0xce4e49c700000000, 0x59e8542000000000, 0xc3bebead00000000, + 0x5418a34a00000000, 0xacf5f4b800000000, 0x3b53e95f00000000, + 0x1d282a8700000000, 0x8a8e376000000000, 0x7263609200000000, + 0xe5c57d7500000000, 0xb67810dd00000000, 0x21de0d3a00000000, + 0xd9335ac800000000, 0x4e95472f00000000, 0x68ee84f700000000, + 0xff48991000000000, 0x07a5cee200000000, 0x9003d30500000000, + 0x0a55398800000000, 0x9df3246f00000000, 0x651e739d00000000, + 0xf2b86e7a00000000, 0xd4c3ada200000000, 0x4365b04500000000, + 0xbb88e7b700000000, 0x2c2efa5000000000, 0xce23427700000000, + 0x59855f9000000000, 0xa168086200000000, 0x36ce158500000000, + 0x10b5d65d00000000, 0x8713cbba00000000, 0x7ffe9c4800000000, + 0xe85881af00000000, 0x720e6b2200000000, 0xe5a876c500000000, + 0x1d45213700000000, 0x8ae33cd000000000, 0xac98ff0800000000, + 0x3b3ee2ef00000000, 0xc3d3b51d00000000, 0x5475a8fa00000000, + 0x24af1f9600000000, 0xb309027100000000, 0x4be4558300000000, + 0xdc42486400000000, 0xfa398bbc00000000, 0x6d9f965b00000000, + 0x9572c1a900000000, 0x02d4dc4e00000000, 0x988236c300000000, + 0x0f242b2400000000, 0xf7c97cd600000000, 0x606f613100000000, + 0x4614a2e900000000, 0xd1b2bf0e00000000, 0x295fe8fc00000000, + 0xbef9f51b00000000, 0x5cf44d3c00000000, 0xcb5250db00000000, + 0x33bf072900000000, 0xa4191ace00000000, 0x8262d91600000000, + 0x15c4c4f100000000, 0xed29930300000000, 0x7a8f8ee400000000, + 0xe0d9646900000000, 0x777f798e00000000, 0x8f922e7c00000000, + 0x1834339b00000000, 0x3e4ff04300000000, 0xa9e9eda400000000, + 0x5104ba5600000000, 0xc6a2a7b100000000, 0x951fca1900000000, + 0x02b9d7fe00000000, 0xfa54800c00000000, 0x6df29deb00000000, + 0x4b895e3300000000, 0xdc2f43d400000000, 0x24c2142600000000, + 0xb36409c100000000, 0x2932e34c00000000, 0xbe94feab00000000, + 0x4679a95900000000, 0xd1dfb4be00000000, 0xf7a4776600000000, + 0x60026a8100000000, 0x98ef3d7300000000, 0x0f49209400000000, + 0xed4498b300000000, 0x7ae2855400000000, 0x820fd2a600000000, + 0x15a9cf4100000000, 0x33d20c9900000000, 0xa474117e00000000, + 0x5c99468c00000000, 0xcb3f5b6b00000000, 0x5169b1e600000000, + 0xc6cfac0100000000, 0x3e22fbf300000000, 0xa984e61400000000, + 0x8fff25cc00000000, 0x1859382b00000000, 0xe0b46fd900000000, + 0x7712723e00000000}, + {0x0000000000000000, 0x411b8c6e00000000, 0x823618dd00000000, + 0xc32d94b300000000, 0x456b416100000000, 0x0470cd0f00000000, + 0xc75d59bc00000000, 0x8646d5d200000000, 0x8ad682c200000000, + 0xcbcd0eac00000000, 0x08e09a1f00000000, 0x49fb167100000000, + 0xcfbdc3a300000000, 0x8ea64fcd00000000, 0x4d8bdb7e00000000, + 0x0c90571000000000, 0x55ab745e00000000, 0x14b0f83000000000, + 0xd79d6c8300000000, 0x9686e0ed00000000, 0x10c0353f00000000, + 0x51dbb95100000000, 0x92f62de200000000, 0xd3eda18c00000000, + 0xdf7df69c00000000, 0x9e667af200000000, 0x5d4bee4100000000, + 0x1c50622f00000000, 0x9a16b7fd00000000, 0xdb0d3b9300000000, + 0x1820af2000000000, 0x593b234e00000000, 0xaa56e9bc00000000, + 0xeb4d65d200000000, 0x2860f16100000000, 0x697b7d0f00000000, + 0xef3da8dd00000000, 0xae2624b300000000, 0x6d0bb00000000000, + 0x2c103c6e00000000, 0x20806b7e00000000, 0x619be71000000000, + 0xa2b673a300000000, 0xe3adffcd00000000, 0x65eb2a1f00000000, + 0x24f0a67100000000, 0xe7dd32c200000000, 0xa6c6beac00000000, + 0xfffd9de200000000, 0xbee6118c00000000, 0x7dcb853f00000000, + 0x3cd0095100000000, 0xba96dc8300000000, 0xfb8d50ed00000000, + 0x38a0c45e00000000, 0x79bb483000000000, 0x752b1f2000000000, + 0x3430934e00000000, 0xf71d07fd00000000, 0xb6068b9300000000, + 0x30405e4100000000, 0x715bd22f00000000, 0xb276469c00000000, + 0xf36dcaf200000000, 0x15aba3a200000000, 0x54b02fcc00000000, + 0x979dbb7f00000000, 0xd686371100000000, 0x50c0e2c300000000, + 0x11db6ead00000000, 0xd2f6fa1e00000000, 0x93ed767000000000, + 0x9f7d216000000000, 0xde66ad0e00000000, 0x1d4b39bd00000000, + 0x5c50b5d300000000, 0xda16600100000000, 0x9b0dec6f00000000, + 0x582078dc00000000, 0x193bf4b200000000, 0x4000d7fc00000000, + 0x011b5b9200000000, 0xc236cf2100000000, 0x832d434f00000000, + 0x056b969d00000000, 0x44701af300000000, 0x875d8e4000000000, + 0xc646022e00000000, 0xcad6553e00000000, 0x8bcdd95000000000, + 0x48e04de300000000, 0x09fbc18d00000000, 0x8fbd145f00000000, + 0xcea6983100000000, 0x0d8b0c8200000000, 0x4c9080ec00000000, + 0xbffd4a1e00000000, 0xfee6c67000000000, 0x3dcb52c300000000, + 0x7cd0dead00000000, 0xfa960b7f00000000, 0xbb8d871100000000, + 0x78a013a200000000, 0x39bb9fcc00000000, 0x352bc8dc00000000, + 0x743044b200000000, 0xb71dd00100000000, 0xf6065c6f00000000, + 0x704089bd00000000, 0x315b05d300000000, 0xf276916000000000, + 0xb36d1d0e00000000, 0xea563e4000000000, 0xab4db22e00000000, + 0x6860269d00000000, 0x297baaf300000000, 0xaf3d7f2100000000, + 0xee26f34f00000000, 0x2d0b67fc00000000, 0x6c10eb9200000000, + 0x6080bc8200000000, 0x219b30ec00000000, 0xe2b6a45f00000000, + 0xa3ad283100000000, 0x25ebfde300000000, 0x64f0718d00000000, + 0xa7dde53e00000000, 0xe6c6695000000000, 0x6b50369e00000000, + 0x2a4bbaf000000000, 0xe9662e4300000000, 0xa87da22d00000000, + 0x2e3b77ff00000000, 0x6f20fb9100000000, 0xac0d6f2200000000, + 0xed16e34c00000000, 0xe186b45c00000000, 0xa09d383200000000, + 0x63b0ac8100000000, 0x22ab20ef00000000, 0xa4edf53d00000000, + 0xe5f6795300000000, 0x26dbede000000000, 0x67c0618e00000000, + 0x3efb42c000000000, 0x7fe0ceae00000000, 0xbccd5a1d00000000, + 0xfdd6d67300000000, 0x7b9003a100000000, 0x3a8b8fcf00000000, + 0xf9a61b7c00000000, 0xb8bd971200000000, 0xb42dc00200000000, + 0xf5364c6c00000000, 0x361bd8df00000000, 0x770054b100000000, + 0xf146816300000000, 0xb05d0d0d00000000, 0x737099be00000000, + 0x326b15d000000000, 0xc106df2200000000, 0x801d534c00000000, + 0x4330c7ff00000000, 0x022b4b9100000000, 0x846d9e4300000000, + 0xc576122d00000000, 0x065b869e00000000, 0x47400af000000000, + 0x4bd05de000000000, 0x0acbd18e00000000, 0xc9e6453d00000000, + 0x88fdc95300000000, 0x0ebb1c8100000000, 0x4fa090ef00000000, + 0x8c8d045c00000000, 0xcd96883200000000, 0x94adab7c00000000, + 0xd5b6271200000000, 0x169bb3a100000000, 0x57803fcf00000000, + 0xd1c6ea1d00000000, 0x90dd667300000000, 0x53f0f2c000000000, + 0x12eb7eae00000000, 0x1e7b29be00000000, 0x5f60a5d000000000, + 0x9c4d316300000000, 0xdd56bd0d00000000, 0x5b1068df00000000, + 0x1a0be4b100000000, 0xd926700200000000, 0x983dfc6c00000000, + 0x7efb953c00000000, 0x3fe0195200000000, 0xfccd8de100000000, + 0xbdd6018f00000000, 0x3b90d45d00000000, 0x7a8b583300000000, + 0xb9a6cc8000000000, 0xf8bd40ee00000000, 0xf42d17fe00000000, + 0xb5369b9000000000, 0x761b0f2300000000, 0x3700834d00000000, + 0xb146569f00000000, 0xf05ddaf100000000, 0x33704e4200000000, + 0x726bc22c00000000, 0x2b50e16200000000, 0x6a4b6d0c00000000, + 0xa966f9bf00000000, 0xe87d75d100000000, 0x6e3ba00300000000, + 0x2f202c6d00000000, 0xec0db8de00000000, 0xad1634b000000000, + 0xa18663a000000000, 0xe09defce00000000, 0x23b07b7d00000000, + 0x62abf71300000000, 0xe4ed22c100000000, 0xa5f6aeaf00000000, + 0x66db3a1c00000000, 0x27c0b67200000000, 0xd4ad7c8000000000, + 0x95b6f0ee00000000, 0x569b645d00000000, 0x1780e83300000000, + 0x91c63de100000000, 0xd0ddb18f00000000, 0x13f0253c00000000, + 0x52eba95200000000, 0x5e7bfe4200000000, 0x1f60722c00000000, + 0xdc4de69f00000000, 0x9d566af100000000, 0x1b10bf2300000000, + 0x5a0b334d00000000, 0x9926a7fe00000000, 0xd83d2b9000000000, + 0x810608de00000000, 0xc01d84b000000000, 0x0330100300000000, + 0x422b9c6d00000000, 0xc46d49bf00000000, 0x8576c5d100000000, + 0x465b516200000000, 0x0740dd0c00000000, 0x0bd08a1c00000000, + 0x4acb067200000000, 0x89e692c100000000, 0xc8fd1eaf00000000, + 0x4ebbcb7d00000000, 0x0fa0471300000000, 0xcc8dd3a000000000, + 0x8d965fce00000000}, + {0x0000000000000000, 0x1dfdb50100000000, 0x3afa6b0300000000, + 0x2707de0200000000, 0x74f4d70600000000, 0x6909620700000000, + 0x4e0ebc0500000000, 0x53f3090400000000, 0xe8e8af0d00000000, + 0xf5151a0c00000000, 0xd212c40e00000000, 0xcfef710f00000000, + 0x9c1c780b00000000, 0x81e1cd0a00000000, 0xa6e6130800000000, + 0xbb1ba60900000000, 0xd0d15f1b00000000, 0xcd2cea1a00000000, + 0xea2b341800000000, 0xf7d6811900000000, 0xa425881d00000000, + 0xb9d83d1c00000000, 0x9edfe31e00000000, 0x8322561f00000000, + 0x3839f01600000000, 0x25c4451700000000, 0x02c39b1500000000, + 0x1f3e2e1400000000, 0x4ccd271000000000, 0x5130921100000000, + 0x76374c1300000000, 0x6bcaf91200000000, 0xa0a3bf3600000000, + 0xbd5e0a3700000000, 0x9a59d43500000000, 0x87a4613400000000, + 0xd457683000000000, 0xc9aadd3100000000, 0xeead033300000000, + 0xf350b63200000000, 0x484b103b00000000, 0x55b6a53a00000000, + 0x72b17b3800000000, 0x6f4cce3900000000, 0x3cbfc73d00000000, + 0x2142723c00000000, 0x0645ac3e00000000, 0x1bb8193f00000000, + 0x7072e02d00000000, 0x6d8f552c00000000, 0x4a888b2e00000000, + 0x57753e2f00000000, 0x0486372b00000000, 0x197b822a00000000, + 0x3e7c5c2800000000, 0x2381e92900000000, 0x989a4f2000000000, + 0x8567fa2100000000, 0xa260242300000000, 0xbf9d912200000000, + 0xec6e982600000000, 0xf1932d2700000000, 0xd694f32500000000, + 0xcb69462400000000, 0x40477f6d00000000, 0x5dbaca6c00000000, + 0x7abd146e00000000, 0x6740a16f00000000, 0x34b3a86b00000000, + 0x294e1d6a00000000, 0x0e49c36800000000, 0x13b4766900000000, + 0xa8afd06000000000, 0xb552656100000000, 0x9255bb6300000000, + 0x8fa80e6200000000, 0xdc5b076600000000, 0xc1a6b26700000000, + 0xe6a16c6500000000, 0xfb5cd96400000000, 0x9096207600000000, + 0x8d6b957700000000, 0xaa6c4b7500000000, 0xb791fe7400000000, + 0xe462f77000000000, 0xf99f427100000000, 0xde989c7300000000, + 0xc365297200000000, 0x787e8f7b00000000, 0x65833a7a00000000, + 0x4284e47800000000, 0x5f79517900000000, 0x0c8a587d00000000, + 0x1177ed7c00000000, 0x3670337e00000000, 0x2b8d867f00000000, + 0xe0e4c05b00000000, 0xfd19755a00000000, 0xda1eab5800000000, + 0xc7e31e5900000000, 0x9410175d00000000, 0x89eda25c00000000, + 0xaeea7c5e00000000, 0xb317c95f00000000, 0x080c6f5600000000, + 0x15f1da5700000000, 0x32f6045500000000, 0x2f0bb15400000000, + 0x7cf8b85000000000, 0x61050d5100000000, 0x4602d35300000000, + 0x5bff665200000000, 0x30359f4000000000, 0x2dc82a4100000000, + 0x0acff44300000000, 0x1732414200000000, 0x44c1484600000000, + 0x593cfd4700000000, 0x7e3b234500000000, 0x63c6964400000000, + 0xd8dd304d00000000, 0xc520854c00000000, 0xe2275b4e00000000, + 0xffdaee4f00000000, 0xac29e74b00000000, 0xb1d4524a00000000, + 0x96d38c4800000000, 0x8b2e394900000000, 0x808efeda00000000, + 0x9d734bdb00000000, 0xba7495d900000000, 0xa78920d800000000, + 0xf47a29dc00000000, 0xe9879cdd00000000, 0xce8042df00000000, + 0xd37df7de00000000, 0x686651d700000000, 0x759be4d600000000, + 0x529c3ad400000000, 0x4f618fd500000000, 0x1c9286d100000000, + 0x016f33d000000000, 0x2668edd200000000, 0x3b9558d300000000, + 0x505fa1c100000000, 0x4da214c000000000, 0x6aa5cac200000000, + 0x77587fc300000000, 0x24ab76c700000000, 0x3956c3c600000000, + 0x1e511dc400000000, 0x03aca8c500000000, 0xb8b70ecc00000000, + 0xa54abbcd00000000, 0x824d65cf00000000, 0x9fb0d0ce00000000, + 0xcc43d9ca00000000, 0xd1be6ccb00000000, 0xf6b9b2c900000000, + 0xeb4407c800000000, 0x202d41ec00000000, 0x3dd0f4ed00000000, + 0x1ad72aef00000000, 0x072a9fee00000000, 0x54d996ea00000000, + 0x492423eb00000000, 0x6e23fde900000000, 0x73de48e800000000, + 0xc8c5eee100000000, 0xd5385be000000000, 0xf23f85e200000000, + 0xefc230e300000000, 0xbc3139e700000000, 0xa1cc8ce600000000, + 0x86cb52e400000000, 0x9b36e7e500000000, 0xf0fc1ef700000000, + 0xed01abf600000000, 0xca0675f400000000, 0xd7fbc0f500000000, + 0x8408c9f100000000, 0x99f57cf000000000, 0xbef2a2f200000000, + 0xa30f17f300000000, 0x1814b1fa00000000, 0x05e904fb00000000, + 0x22eedaf900000000, 0x3f136ff800000000, 0x6ce066fc00000000, + 0x711dd3fd00000000, 0x561a0dff00000000, 0x4be7b8fe00000000, + 0xc0c981b700000000, 0xdd3434b600000000, 0xfa33eab400000000, + 0xe7ce5fb500000000, 0xb43d56b100000000, 0xa9c0e3b000000000, + 0x8ec73db200000000, 0x933a88b300000000, 0x28212eba00000000, + 0x35dc9bbb00000000, 0x12db45b900000000, 0x0f26f0b800000000, + 0x5cd5f9bc00000000, 0x41284cbd00000000, 0x662f92bf00000000, + 0x7bd227be00000000, 0x1018deac00000000, 0x0de56bad00000000, + 0x2ae2b5af00000000, 0x371f00ae00000000, 0x64ec09aa00000000, + 0x7911bcab00000000, 0x5e1662a900000000, 0x43ebd7a800000000, + 0xf8f071a100000000, 0xe50dc4a000000000, 0xc20a1aa200000000, + 0xdff7afa300000000, 0x8c04a6a700000000, 0x91f913a600000000, + 0xb6fecda400000000, 0xab0378a500000000, 0x606a3e8100000000, + 0x7d978b8000000000, 0x5a90558200000000, 0x476de08300000000, + 0x149ee98700000000, 0x09635c8600000000, 0x2e64828400000000, + 0x3399378500000000, 0x8882918c00000000, 0x957f248d00000000, + 0xb278fa8f00000000, 0xaf854f8e00000000, 0xfc76468a00000000, + 0xe18bf38b00000000, 0xc68c2d8900000000, 0xdb71988800000000, + 0xb0bb619a00000000, 0xad46d49b00000000, 0x8a410a9900000000, + 0x97bcbf9800000000, 0xc44fb69c00000000, 0xd9b2039d00000000, + 0xfeb5dd9f00000000, 0xe348689e00000000, 0x5853ce9700000000, + 0x45ae7b9600000000, 0x62a9a59400000000, 0x7f54109500000000, + 0x2ca7199100000000, 0x315aac9000000000, 0x165d729200000000, + 0x0ba0c79300000000}, + {0x0000000000000000, 0x24d9076300000000, 0x48b20fc600000000, + 0x6c6b08a500000000, 0xd1626e5700000000, 0xf5bb693400000000, + 0x99d0619100000000, 0xbd0966f200000000, 0xa2c5dcae00000000, + 0x861cdbcd00000000, 0xea77d36800000000, 0xceaed40b00000000, + 0x73a7b2f900000000, 0x577eb59a00000000, 0x3b15bd3f00000000, + 0x1fccba5c00000000, 0x058dc88600000000, 0x2154cfe500000000, + 0x4d3fc74000000000, 0x69e6c02300000000, 0xd4efa6d100000000, + 0xf036a1b200000000, 0x9c5da91700000000, 0xb884ae7400000000, + 0xa748142800000000, 0x8391134b00000000, 0xeffa1bee00000000, + 0xcb231c8d00000000, 0x762a7a7f00000000, 0x52f37d1c00000000, + 0x3e9875b900000000, 0x1a4172da00000000, 0x4b1ce0d600000000, + 0x6fc5e7b500000000, 0x03aeef1000000000, 0x2777e87300000000, + 0x9a7e8e8100000000, 0xbea789e200000000, 0xd2cc814700000000, + 0xf615862400000000, 0xe9d93c7800000000, 0xcd003b1b00000000, + 0xa16b33be00000000, 0x85b234dd00000000, 0x38bb522f00000000, + 0x1c62554c00000000, 0x70095de900000000, 0x54d05a8a00000000, + 0x4e91285000000000, 0x6a482f3300000000, 0x0623279600000000, + 0x22fa20f500000000, 0x9ff3460700000000, 0xbb2a416400000000, + 0xd74149c100000000, 0xf3984ea200000000, 0xec54f4fe00000000, + 0xc88df39d00000000, 0xa4e6fb3800000000, 0x803ffc5b00000000, + 0x3d369aa900000000, 0x19ef9dca00000000, 0x7584956f00000000, + 0x515d920c00000000, 0xd73eb17600000000, 0xf3e7b61500000000, + 0x9f8cbeb000000000, 0xbb55b9d300000000, 0x065cdf2100000000, + 0x2285d84200000000, 0x4eeed0e700000000, 0x6a37d78400000000, + 0x75fb6dd800000000, 0x51226abb00000000, 0x3d49621e00000000, + 0x1990657d00000000, 0xa499038f00000000, 0x804004ec00000000, + 0xec2b0c4900000000, 0xc8f20b2a00000000, 0xd2b379f000000000, + 0xf66a7e9300000000, 0x9a01763600000000, 0xbed8715500000000, + 0x03d117a700000000, 0x270810c400000000, 0x4b63186100000000, + 0x6fba1f0200000000, 0x7076a55e00000000, 0x54afa23d00000000, + 0x38c4aa9800000000, 0x1c1dadfb00000000, 0xa114cb0900000000, + 0x85cdcc6a00000000, 0xe9a6c4cf00000000, 0xcd7fc3ac00000000, + 0x9c2251a000000000, 0xb8fb56c300000000, 0xd4905e6600000000, + 0xf049590500000000, 0x4d403ff700000000, 0x6999389400000000, + 0x05f2303100000000, 0x212b375200000000, 0x3ee78d0e00000000, + 0x1a3e8a6d00000000, 0x765582c800000000, 0x528c85ab00000000, + 0xef85e35900000000, 0xcb5ce43a00000000, 0xa737ec9f00000000, + 0x83eeebfc00000000, 0x99af992600000000, 0xbd769e4500000000, + 0xd11d96e000000000, 0xf5c4918300000000, 0x48cdf77100000000, + 0x6c14f01200000000, 0x007ff8b700000000, 0x24a6ffd400000000, + 0x3b6a458800000000, 0x1fb342eb00000000, 0x73d84a4e00000000, + 0x57014d2d00000000, 0xea082bdf00000000, 0xced12cbc00000000, + 0xa2ba241900000000, 0x8663237a00000000, 0xae7d62ed00000000, + 0x8aa4658e00000000, 0xe6cf6d2b00000000, 0xc2166a4800000000, + 0x7f1f0cba00000000, 0x5bc60bd900000000, 0x37ad037c00000000, + 0x1374041f00000000, 0x0cb8be4300000000, 0x2861b92000000000, + 0x440ab18500000000, 0x60d3b6e600000000, 0xdddad01400000000, + 0xf903d77700000000, 0x9568dfd200000000, 0xb1b1d8b100000000, + 0xabf0aa6b00000000, 0x8f29ad0800000000, 0xe342a5ad00000000, + 0xc79ba2ce00000000, 0x7a92c43c00000000, 0x5e4bc35f00000000, + 0x3220cbfa00000000, 0x16f9cc9900000000, 0x093576c500000000, + 0x2dec71a600000000, 0x4187790300000000, 0x655e7e6000000000, + 0xd857189200000000, 0xfc8e1ff100000000, 0x90e5175400000000, + 0xb43c103700000000, 0xe561823b00000000, 0xc1b8855800000000, + 0xadd38dfd00000000, 0x890a8a9e00000000, 0x3403ec6c00000000, + 0x10daeb0f00000000, 0x7cb1e3aa00000000, 0x5868e4c900000000, + 0x47a45e9500000000, 0x637d59f600000000, 0x0f16515300000000, + 0x2bcf563000000000, 0x96c630c200000000, 0xb21f37a100000000, + 0xde743f0400000000, 0xfaad386700000000, 0xe0ec4abd00000000, + 0xc4354dde00000000, 0xa85e457b00000000, 0x8c87421800000000, + 0x318e24ea00000000, 0x1557238900000000, 0x793c2b2c00000000, + 0x5de52c4f00000000, 0x4229961300000000, 0x66f0917000000000, + 0x0a9b99d500000000, 0x2e429eb600000000, 0x934bf84400000000, + 0xb792ff2700000000, 0xdbf9f78200000000, 0xff20f0e100000000, + 0x7943d39b00000000, 0x5d9ad4f800000000, 0x31f1dc5d00000000, + 0x1528db3e00000000, 0xa821bdcc00000000, 0x8cf8baaf00000000, + 0xe093b20a00000000, 0xc44ab56900000000, 0xdb860f3500000000, + 0xff5f085600000000, 0x933400f300000000, 0xb7ed079000000000, + 0x0ae4616200000000, 0x2e3d660100000000, 0x42566ea400000000, + 0x668f69c700000000, 0x7cce1b1d00000000, 0x58171c7e00000000, + 0x347c14db00000000, 0x10a513b800000000, 0xadac754a00000000, + 0x8975722900000000, 0xe51e7a8c00000000, 0xc1c77def00000000, + 0xde0bc7b300000000, 0xfad2c0d000000000, 0x96b9c87500000000, + 0xb260cf1600000000, 0x0f69a9e400000000, 0x2bb0ae8700000000, + 0x47dba62200000000, 0x6302a14100000000, 0x325f334d00000000, + 0x1686342e00000000, 0x7aed3c8b00000000, 0x5e343be800000000, + 0xe33d5d1a00000000, 0xc7e45a7900000000, 0xab8f52dc00000000, + 0x8f5655bf00000000, 0x909aefe300000000, 0xb443e88000000000, + 0xd828e02500000000, 0xfcf1e74600000000, 0x41f881b400000000, + 0x652186d700000000, 0x094a8e7200000000, 0x2d93891100000000, + 0x37d2fbcb00000000, 0x130bfca800000000, 0x7f60f40d00000000, + 0x5bb9f36e00000000, 0xe6b0959c00000000, 0xc26992ff00000000, + 0xae029a5a00000000, 0x8adb9d3900000000, 0x9517276500000000, + 0xb1ce200600000000, 0xdda528a300000000, 0xf97c2fc000000000, + 0x4475493200000000, 0x60ac4e5100000000, 0x0cc746f400000000, + 0x281e419700000000}, + {0x0000000000000000, 0x08e3603c00000000, 0x10c6c17800000000, + 0x1825a14400000000, 0x208c83f100000000, 0x286fe3cd00000000, + 0x304a428900000000, 0x38a922b500000000, 0x011e763800000000, + 0x09fd160400000000, 0x11d8b74000000000, 0x193bd77c00000000, + 0x2192f5c900000000, 0x297195f500000000, 0x315434b100000000, + 0x39b7548d00000000, 0x023cec7000000000, 0x0adf8c4c00000000, + 0x12fa2d0800000000, 0x1a194d3400000000, 0x22b06f8100000000, + 0x2a530fbd00000000, 0x3276aef900000000, 0x3a95cec500000000, + 0x03229a4800000000, 0x0bc1fa7400000000, 0x13e45b3000000000, + 0x1b073b0c00000000, 0x23ae19b900000000, 0x2b4d798500000000, + 0x3368d8c100000000, 0x3b8bb8fd00000000, 0x0478d8e100000000, + 0x0c9bb8dd00000000, 0x14be199900000000, 0x1c5d79a500000000, + 0x24f45b1000000000, 0x2c173b2c00000000, 0x34329a6800000000, + 0x3cd1fa5400000000, 0x0566aed900000000, 0x0d85cee500000000, + 0x15a06fa100000000, 0x1d430f9d00000000, 0x25ea2d2800000000, + 0x2d094d1400000000, 0x352cec5000000000, 0x3dcf8c6c00000000, + 0x0644349100000000, 0x0ea754ad00000000, 0x1682f5e900000000, + 0x1e6195d500000000, 0x26c8b76000000000, 0x2e2bd75c00000000, + 0x360e761800000000, 0x3eed162400000000, 0x075a42a900000000, + 0x0fb9229500000000, 0x179c83d100000000, 0x1f7fe3ed00000000, + 0x27d6c15800000000, 0x2f35a16400000000, 0x3710002000000000, + 0x3ff3601c00000000, 0x49f6c11800000000, 0x4115a12400000000, + 0x5930006000000000, 0x51d3605c00000000, 0x697a42e900000000, + 0x619922d500000000, 0x79bc839100000000, 0x715fe3ad00000000, + 0x48e8b72000000000, 0x400bd71c00000000, 0x582e765800000000, + 0x50cd166400000000, 0x686434d100000000, 0x608754ed00000000, + 0x78a2f5a900000000, 0x7041959500000000, 0x4bca2d6800000000, + 0x43294d5400000000, 0x5b0cec1000000000, 0x53ef8c2c00000000, + 0x6b46ae9900000000, 0x63a5cea500000000, 0x7b806fe100000000, + 0x73630fdd00000000, 0x4ad45b5000000000, 0x42373b6c00000000, + 0x5a129a2800000000, 0x52f1fa1400000000, 0x6a58d8a100000000, + 0x62bbb89d00000000, 0x7a9e19d900000000, 0x727d79e500000000, + 0x4d8e19f900000000, 0x456d79c500000000, 0x5d48d88100000000, + 0x55abb8bd00000000, 0x6d029a0800000000, 0x65e1fa3400000000, + 0x7dc45b7000000000, 0x75273b4c00000000, 0x4c906fc100000000, + 0x44730ffd00000000, 0x5c56aeb900000000, 0x54b5ce8500000000, + 0x6c1cec3000000000, 0x64ff8c0c00000000, 0x7cda2d4800000000, + 0x74394d7400000000, 0x4fb2f58900000000, 0x475195b500000000, + 0x5f7434f100000000, 0x579754cd00000000, 0x6f3e767800000000, + 0x67dd164400000000, 0x7ff8b70000000000, 0x771bd73c00000000, + 0x4eac83b100000000, 0x464fe38d00000000, 0x5e6a42c900000000, + 0x568922f500000000, 0x6e20004000000000, 0x66c3607c00000000, + 0x7ee6c13800000000, 0x7605a10400000000, 0x92ec833100000000, + 0x9a0fe30d00000000, 0x822a424900000000, 0x8ac9227500000000, + 0xb26000c000000000, 0xba8360fc00000000, 0xa2a6c1b800000000, + 0xaa45a18400000000, 0x93f2f50900000000, 0x9b11953500000000, + 0x8334347100000000, 0x8bd7544d00000000, 0xb37e76f800000000, + 0xbb9d16c400000000, 0xa3b8b78000000000, 0xab5bd7bc00000000, + 0x90d06f4100000000, 0x98330f7d00000000, 0x8016ae3900000000, + 0x88f5ce0500000000, 0xb05cecb000000000, 0xb8bf8c8c00000000, + 0xa09a2dc800000000, 0xa8794df400000000, 0x91ce197900000000, + 0x992d794500000000, 0x8108d80100000000, 0x89ebb83d00000000, + 0xb1429a8800000000, 0xb9a1fab400000000, 0xa1845bf000000000, + 0xa9673bcc00000000, 0x96945bd000000000, 0x9e773bec00000000, + 0x86529aa800000000, 0x8eb1fa9400000000, 0xb618d82100000000, + 0xbefbb81d00000000, 0xa6de195900000000, 0xae3d796500000000, + 0x978a2de800000000, 0x9f694dd400000000, 0x874cec9000000000, + 0x8faf8cac00000000, 0xb706ae1900000000, 0xbfe5ce2500000000, + 0xa7c06f6100000000, 0xaf230f5d00000000, 0x94a8b7a000000000, + 0x9c4bd79c00000000, 0x846e76d800000000, 0x8c8d16e400000000, + 0xb424345100000000, 0xbcc7546d00000000, 0xa4e2f52900000000, + 0xac01951500000000, 0x95b6c19800000000, 0x9d55a1a400000000, + 0x857000e000000000, 0x8d9360dc00000000, 0xb53a426900000000, + 0xbdd9225500000000, 0xa5fc831100000000, 0xad1fe32d00000000, + 0xdb1a422900000000, 0xd3f9221500000000, 0xcbdc835100000000, + 0xc33fe36d00000000, 0xfb96c1d800000000, 0xf375a1e400000000, + 0xeb5000a000000000, 0xe3b3609c00000000, 0xda04341100000000, + 0xd2e7542d00000000, 0xcac2f56900000000, 0xc221955500000000, + 0xfa88b7e000000000, 0xf26bd7dc00000000, 0xea4e769800000000, + 0xe2ad16a400000000, 0xd926ae5900000000, 0xd1c5ce6500000000, + 0xc9e06f2100000000, 0xc1030f1d00000000, 0xf9aa2da800000000, + 0xf1494d9400000000, 0xe96cecd000000000, 0xe18f8cec00000000, + 0xd838d86100000000, 0xd0dbb85d00000000, 0xc8fe191900000000, + 0xc01d792500000000, 0xf8b45b9000000000, 0xf0573bac00000000, + 0xe8729ae800000000, 0xe091fad400000000, 0xdf629ac800000000, + 0xd781faf400000000, 0xcfa45bb000000000, 0xc7473b8c00000000, + 0xffee193900000000, 0xf70d790500000000, 0xef28d84100000000, + 0xe7cbb87d00000000, 0xde7cecf000000000, 0xd69f8ccc00000000, + 0xceba2d8800000000, 0xc6594db400000000, 0xfef06f0100000000, + 0xf6130f3d00000000, 0xee36ae7900000000, 0xe6d5ce4500000000, + 0xdd5e76b800000000, 0xd5bd168400000000, 0xcd98b7c000000000, + 0xc57bd7fc00000000, 0xfdd2f54900000000, 0xf531957500000000, + 0xed14343100000000, 0xe5f7540d00000000, 0xdc40008000000000, + 0xd4a360bc00000000, 0xcc86c1f800000000, 0xc465a1c400000000, + 0xfccc837100000000, 0xf42fe34d00000000, 0xec0a420900000000, + 0xe4e9223500000000}, + {0x0000000000000000, 0xd1e8e70e00000000, 0xa2d1cf1d00000000, + 0x7339281300000000, 0x44a39f3b00000000, 0x954b783500000000, + 0xe672502600000000, 0x379ab72800000000, 0x88463f7700000000, + 0x59aed87900000000, 0x2a97f06a00000000, 0xfb7f176400000000, + 0xcce5a04c00000000, 0x1d0d474200000000, 0x6e346f5100000000, + 0xbfdc885f00000000, 0x108d7eee00000000, 0xc16599e000000000, + 0xb25cb1f300000000, 0x63b456fd00000000, 0x542ee1d500000000, + 0x85c606db00000000, 0xf6ff2ec800000000, 0x2717c9c600000000, + 0x98cb419900000000, 0x4923a69700000000, 0x3a1a8e8400000000, + 0xebf2698a00000000, 0xdc68dea200000000, 0x0d8039ac00000000, + 0x7eb911bf00000000, 0xaf51f6b100000000, 0x611c8c0700000000, + 0xb0f46b0900000000, 0xc3cd431a00000000, 0x1225a41400000000, + 0x25bf133c00000000, 0xf457f43200000000, 0x876edc2100000000, + 0x56863b2f00000000, 0xe95ab37000000000, 0x38b2547e00000000, + 0x4b8b7c6d00000000, 0x9a639b6300000000, 0xadf92c4b00000000, + 0x7c11cb4500000000, 0x0f28e35600000000, 0xdec0045800000000, + 0x7191f2e900000000, 0xa07915e700000000, 0xd3403df400000000, + 0x02a8dafa00000000, 0x35326dd200000000, 0xe4da8adc00000000, + 0x97e3a2cf00000000, 0x460b45c100000000, 0xf9d7cd9e00000000, + 0x283f2a9000000000, 0x5b06028300000000, 0x8aeee58d00000000, + 0xbd7452a500000000, 0x6c9cb5ab00000000, 0x1fa59db800000000, + 0xce4d7ab600000000, 0xc238180f00000000, 0x13d0ff0100000000, + 0x60e9d71200000000, 0xb101301c00000000, 0x869b873400000000, + 0x5773603a00000000, 0x244a482900000000, 0xf5a2af2700000000, + 0x4a7e277800000000, 0x9b96c07600000000, 0xe8afe86500000000, + 0x39470f6b00000000, 0x0eddb84300000000, 0xdf355f4d00000000, + 0xac0c775e00000000, 0x7de4905000000000, 0xd2b566e100000000, + 0x035d81ef00000000, 0x7064a9fc00000000, 0xa18c4ef200000000, + 0x9616f9da00000000, 0x47fe1ed400000000, 0x34c736c700000000, + 0xe52fd1c900000000, 0x5af3599600000000, 0x8b1bbe9800000000, + 0xf822968b00000000, 0x29ca718500000000, 0x1e50c6ad00000000, + 0xcfb821a300000000, 0xbc8109b000000000, 0x6d69eebe00000000, + 0xa324940800000000, 0x72cc730600000000, 0x01f55b1500000000, + 0xd01dbc1b00000000, 0xe7870b3300000000, 0x366fec3d00000000, + 0x4556c42e00000000, 0x94be232000000000, 0x2b62ab7f00000000, + 0xfa8a4c7100000000, 0x89b3646200000000, 0x585b836c00000000, + 0x6fc1344400000000, 0xbe29d34a00000000, 0xcd10fb5900000000, + 0x1cf81c5700000000, 0xb3a9eae600000000, 0x62410de800000000, + 0x117825fb00000000, 0xc090c2f500000000, 0xf70a75dd00000000, + 0x26e292d300000000, 0x55dbbac000000000, 0x84335dce00000000, + 0x3befd59100000000, 0xea07329f00000000, 0x993e1a8c00000000, + 0x48d6fd8200000000, 0x7f4c4aaa00000000, 0xaea4ada400000000, + 0xdd9d85b700000000, 0x0c7562b900000000, 0x8471301e00000000, + 0x5599d71000000000, 0x26a0ff0300000000, 0xf748180d00000000, + 0xc0d2af2500000000, 0x113a482b00000000, 0x6203603800000000, + 0xb3eb873600000000, 0x0c370f6900000000, 0xdddfe86700000000, + 0xaee6c07400000000, 0x7f0e277a00000000, 0x4894905200000000, + 0x997c775c00000000, 0xea455f4f00000000, 0x3badb84100000000, + 0x94fc4ef000000000, 0x4514a9fe00000000, 0x362d81ed00000000, + 0xe7c566e300000000, 0xd05fd1cb00000000, 0x01b736c500000000, + 0x728e1ed600000000, 0xa366f9d800000000, 0x1cba718700000000, + 0xcd52968900000000, 0xbe6bbe9a00000000, 0x6f83599400000000, + 0x5819eebc00000000, 0x89f109b200000000, 0xfac821a100000000, + 0x2b20c6af00000000, 0xe56dbc1900000000, 0x34855b1700000000, + 0x47bc730400000000, 0x9654940a00000000, 0xa1ce232200000000, + 0x7026c42c00000000, 0x031fec3f00000000, 0xd2f70b3100000000, + 0x6d2b836e00000000, 0xbcc3646000000000, 0xcffa4c7300000000, + 0x1e12ab7d00000000, 0x29881c5500000000, 0xf860fb5b00000000, + 0x8b59d34800000000, 0x5ab1344600000000, 0xf5e0c2f700000000, + 0x240825f900000000, 0x57310dea00000000, 0x86d9eae400000000, + 0xb1435dcc00000000, 0x60abbac200000000, 0x139292d100000000, + 0xc27a75df00000000, 0x7da6fd8000000000, 0xac4e1a8e00000000, + 0xdf77329d00000000, 0x0e9fd59300000000, 0x390562bb00000000, + 0xe8ed85b500000000, 0x9bd4ada600000000, 0x4a3c4aa800000000, + 0x4649281100000000, 0x97a1cf1f00000000, 0xe498e70c00000000, + 0x3570000200000000, 0x02eab72a00000000, 0xd302502400000000, + 0xa03b783700000000, 0x71d39f3900000000, 0xce0f176600000000, + 0x1fe7f06800000000, 0x6cded87b00000000, 0xbd363f7500000000, + 0x8aac885d00000000, 0x5b446f5300000000, 0x287d474000000000, + 0xf995a04e00000000, 0x56c456ff00000000, 0x872cb1f100000000, + 0xf41599e200000000, 0x25fd7eec00000000, 0x1267c9c400000000, + 0xc38f2eca00000000, 0xb0b606d900000000, 0x615ee1d700000000, + 0xde82698800000000, 0x0f6a8e8600000000, 0x7c53a69500000000, + 0xadbb419b00000000, 0x9a21f6b300000000, 0x4bc911bd00000000, + 0x38f039ae00000000, 0xe918dea000000000, 0x2755a41600000000, + 0xf6bd431800000000, 0x85846b0b00000000, 0x546c8c0500000000, + 0x63f63b2d00000000, 0xb21edc2300000000, 0xc127f43000000000, + 0x10cf133e00000000, 0xaf139b6100000000, 0x7efb7c6f00000000, + 0x0dc2547c00000000, 0xdc2ab37200000000, 0xebb0045a00000000, + 0x3a58e35400000000, 0x4961cb4700000000, 0x98892c4900000000, + 0x37d8daf800000000, 0xe6303df600000000, 0x950915e500000000, + 0x44e1f2eb00000000, 0x737b45c300000000, 0xa293a2cd00000000, + 0xd1aa8ade00000000, 0x00426dd000000000, 0xbf9ee58f00000000, + 0x6e76028100000000, 0x1d4f2a9200000000, 0xcca7cd9c00000000, + 0xfb3d7ab400000000, 0x2ad59dba00000000, 0x59ecb5a900000000, + 0x880452a700000000}, + {0x0000000000000000, 0xaa05daf100000000, 0x150dc53800000000, + 0xbf081fc900000000, 0x2a1a8a7100000000, 0x801f508000000000, + 0x3f174f4900000000, 0x951295b800000000, 0x543414e300000000, + 0xfe31ce1200000000, 0x4139d1db00000000, 0xeb3c0b2a00000000, + 0x7e2e9e9200000000, 0xd42b446300000000, 0x6b235baa00000000, + 0xc126815b00000000, 0xe96e591d00000000, 0x436b83ec00000000, + 0xfc639c2500000000, 0x566646d400000000, 0xc374d36c00000000, + 0x6971099d00000000, 0xd679165400000000, 0x7c7ccca500000000, + 0xbd5a4dfe00000000, 0x175f970f00000000, 0xa85788c600000000, + 0x0252523700000000, 0x9740c78f00000000, 0x3d451d7e00000000, + 0x824d02b700000000, 0x2848d84600000000, 0xd2ddb23a00000000, + 0x78d868cb00000000, 0xc7d0770200000000, 0x6dd5adf300000000, + 0xf8c7384b00000000, 0x52c2e2ba00000000, 0xedcafd7300000000, + 0x47cf278200000000, 0x86e9a6d900000000, 0x2cec7c2800000000, + 0x93e463e100000000, 0x39e1b91000000000, 0xacf32ca800000000, + 0x06f6f65900000000, 0xb9fee99000000000, 0x13fb336100000000, + 0x3bb3eb2700000000, 0x91b631d600000000, 0x2ebe2e1f00000000, + 0x84bbf4ee00000000, 0x11a9615600000000, 0xbbacbba700000000, + 0x04a4a46e00000000, 0xaea17e9f00000000, 0x6f87ffc400000000, + 0xc582253500000000, 0x7a8a3afc00000000, 0xd08fe00d00000000, + 0x459d75b500000000, 0xef98af4400000000, 0x5090b08d00000000, + 0xfa956a7c00000000, 0xa4bb657500000000, 0x0ebebf8400000000, + 0xb1b6a04d00000000, 0x1bb37abc00000000, 0x8ea1ef0400000000, + 0x24a435f500000000, 0x9bac2a3c00000000, 0x31a9f0cd00000000, + 0xf08f719600000000, 0x5a8aab6700000000, 0xe582b4ae00000000, + 0x4f876e5f00000000, 0xda95fbe700000000, 0x7090211600000000, + 0xcf983edf00000000, 0x659de42e00000000, 0x4dd53c6800000000, + 0xe7d0e69900000000, 0x58d8f95000000000, 0xf2dd23a100000000, + 0x67cfb61900000000, 0xcdca6ce800000000, 0x72c2732100000000, + 0xd8c7a9d000000000, 0x19e1288b00000000, 0xb3e4f27a00000000, + 0x0cecedb300000000, 0xa6e9374200000000, 0x33fba2fa00000000, + 0x99fe780b00000000, 0x26f667c200000000, 0x8cf3bd3300000000, + 0x7666d74f00000000, 0xdc630dbe00000000, 0x636b127700000000, + 0xc96ec88600000000, 0x5c7c5d3e00000000, 0xf67987cf00000000, + 0x4971980600000000, 0xe37442f700000000, 0x2252c3ac00000000, + 0x8857195d00000000, 0x375f069400000000, 0x9d5adc6500000000, + 0x084849dd00000000, 0xa24d932c00000000, 0x1d458ce500000000, + 0xb740561400000000, 0x9f088e5200000000, 0x350d54a300000000, + 0x8a054b6a00000000, 0x2000919b00000000, 0xb512042300000000, + 0x1f17ded200000000, 0xa01fc11b00000000, 0x0a1a1bea00000000, + 0xcb3c9ab100000000, 0x6139404000000000, 0xde315f8900000000, + 0x7434857800000000, 0xe12610c000000000, 0x4b23ca3100000000, + 0xf42bd5f800000000, 0x5e2e0f0900000000, 0x4877cbea00000000, + 0xe272111b00000000, 0x5d7a0ed200000000, 0xf77fd42300000000, + 0x626d419b00000000, 0xc8689b6a00000000, 0x776084a300000000, + 0xdd655e5200000000, 0x1c43df0900000000, 0xb64605f800000000, + 0x094e1a3100000000, 0xa34bc0c000000000, 0x3659557800000000, + 0x9c5c8f8900000000, 0x2354904000000000, 0x89514ab100000000, + 0xa11992f700000000, 0x0b1c480600000000, 0xb41457cf00000000, + 0x1e118d3e00000000, 0x8b03188600000000, 0x2106c27700000000, + 0x9e0eddbe00000000, 0x340b074f00000000, 0xf52d861400000000, + 0x5f285ce500000000, 0xe020432c00000000, 0x4a2599dd00000000, + 0xdf370c6500000000, 0x7532d69400000000, 0xca3ac95d00000000, + 0x603f13ac00000000, 0x9aaa79d000000000, 0x30afa32100000000, + 0x8fa7bce800000000, 0x25a2661900000000, 0xb0b0f3a100000000, + 0x1ab5295000000000, 0xa5bd369900000000, 0x0fb8ec6800000000, + 0xce9e6d3300000000, 0x649bb7c200000000, 0xdb93a80b00000000, + 0x719672fa00000000, 0xe484e74200000000, 0x4e813db300000000, + 0xf189227a00000000, 0x5b8cf88b00000000, 0x73c420cd00000000, + 0xd9c1fa3c00000000, 0x66c9e5f500000000, 0xcccc3f0400000000, + 0x59deaabc00000000, 0xf3db704d00000000, 0x4cd36f8400000000, + 0xe6d6b57500000000, 0x27f0342e00000000, 0x8df5eedf00000000, + 0x32fdf11600000000, 0x98f82be700000000, 0x0deabe5f00000000, + 0xa7ef64ae00000000, 0x18e77b6700000000, 0xb2e2a19600000000, + 0xecccae9f00000000, 0x46c9746e00000000, 0xf9c16ba700000000, + 0x53c4b15600000000, 0xc6d624ee00000000, 0x6cd3fe1f00000000, + 0xd3dbe1d600000000, 0x79de3b2700000000, 0xb8f8ba7c00000000, + 0x12fd608d00000000, 0xadf57f4400000000, 0x07f0a5b500000000, + 0x92e2300d00000000, 0x38e7eafc00000000, 0x87eff53500000000, + 0x2dea2fc400000000, 0x05a2f78200000000, 0xafa72d7300000000, + 0x10af32ba00000000, 0xbaaae84b00000000, 0x2fb87df300000000, + 0x85bda70200000000, 0x3ab5b8cb00000000, 0x90b0623a00000000, + 0x5196e36100000000, 0xfb93399000000000, 0x449b265900000000, + 0xee9efca800000000, 0x7b8c691000000000, 0xd189b3e100000000, + 0x6e81ac2800000000, 0xc48476d900000000, 0x3e111ca500000000, + 0x9414c65400000000, 0x2b1cd99d00000000, 0x8119036c00000000, + 0x140b96d400000000, 0xbe0e4c2500000000, 0x010653ec00000000, + 0xab03891d00000000, 0x6a25084600000000, 0xc020d2b700000000, + 0x7f28cd7e00000000, 0xd52d178f00000000, 0x403f823700000000, + 0xea3a58c600000000, 0x5532470f00000000, 0xff379dfe00000000, + 0xd77f45b800000000, 0x7d7a9f4900000000, 0xc272808000000000, + 0x68775a7100000000, 0xfd65cfc900000000, 0x5760153800000000, + 0xe8680af100000000, 0x426dd00000000000, 0x834b515b00000000, + 0x294e8baa00000000, 0x9646946300000000, 0x3c434e9200000000, + 0xa951db2a00000000, 0x035401db00000000, 0xbc5c1e1200000000, + 0x1659c4e300000000}}; + +#else /* W == 4 */ + +local const z_crc_t FAR crc_braid_table[][256] = { + {0x00000000, 0xae689191, 0x87a02563, 0x29c8b4f2, 0xd4314c87, + 0x7a59dd16, 0x539169e4, 0xfdf9f875, 0x73139f4f, 0xdd7b0ede, + 0xf4b3ba2c, 0x5adb2bbd, 0xa722d3c8, 0x094a4259, 0x2082f6ab, + 0x8eea673a, 0xe6273e9e, 0x484faf0f, 0x61871bfd, 0xcfef8a6c, + 0x32167219, 0x9c7ee388, 0xb5b6577a, 0x1bdec6eb, 0x9534a1d1, + 0x3b5c3040, 0x129484b2, 0xbcfc1523, 0x4105ed56, 0xef6d7cc7, + 0xc6a5c835, 0x68cd59a4, 0x173f7b7d, 0xb957eaec, 0x909f5e1e, + 0x3ef7cf8f, 0xc30e37fa, 0x6d66a66b, 0x44ae1299, 0xeac68308, + 0x642ce432, 0xca4475a3, 0xe38cc151, 0x4de450c0, 0xb01da8b5, + 0x1e753924, 0x37bd8dd6, 0x99d51c47, 0xf11845e3, 0x5f70d472, + 0x76b86080, 0xd8d0f111, 0x25290964, 0x8b4198f5, 0xa2892c07, + 0x0ce1bd96, 0x820bdaac, 0x2c634b3d, 0x05abffcf, 0xabc36e5e, + 0x563a962b, 0xf85207ba, 0xd19ab348, 0x7ff222d9, 0x2e7ef6fa, + 0x8016676b, 0xa9ded399, 0x07b64208, 0xfa4fba7d, 0x54272bec, + 0x7def9f1e, 0xd3870e8f, 0x5d6d69b5, 0xf305f824, 0xdacd4cd6, + 0x74a5dd47, 0x895c2532, 0x2734b4a3, 0x0efc0051, 0xa09491c0, + 0xc859c864, 0x663159f5, 0x4ff9ed07, 0xe1917c96, 0x1c6884e3, + 0xb2001572, 0x9bc8a180, 0x35a03011, 0xbb4a572b, 0x1522c6ba, + 0x3cea7248, 0x9282e3d9, 0x6f7b1bac, 0xc1138a3d, 0xe8db3ecf, + 0x46b3af5e, 0x39418d87, 0x97291c16, 0xbee1a8e4, 0x10893975, + 0xed70c100, 0x43185091, 0x6ad0e463, 0xc4b875f2, 0x4a5212c8, + 0xe43a8359, 0xcdf237ab, 0x639aa63a, 0x9e635e4f, 0x300bcfde, + 0x19c37b2c, 0xb7abeabd, 0xdf66b319, 0x710e2288, 0x58c6967a, + 0xf6ae07eb, 0x0b57ff9e, 0xa53f6e0f, 0x8cf7dafd, 0x229f4b6c, + 0xac752c56, 0x021dbdc7, 0x2bd50935, 0x85bd98a4, 0x784460d1, + 0xd62cf140, 0xffe445b2, 0x518cd423, 0x5cfdedf4, 0xf2957c65, + 0xdb5dc897, 0x75355906, 0x88cca173, 0x26a430e2, 0x0f6c8410, + 0xa1041581, 0x2fee72bb, 0x8186e32a, 0xa84e57d8, 0x0626c649, + 0xfbdf3e3c, 0x55b7afad, 0x7c7f1b5f, 0xd2178ace, 0xbadad36a, + 0x14b242fb, 0x3d7af609, 0x93126798, 0x6eeb9fed, 0xc0830e7c, + 0xe94bba8e, 0x47232b1f, 0xc9c94c25, 0x67a1ddb4, 0x4e696946, + 0xe001f8d7, 0x1df800a2, 0xb3909133, 0x9a5825c1, 0x3430b450, + 0x4bc29689, 0xe5aa0718, 0xcc62b3ea, 0x620a227b, 0x9ff3da0e, + 0x319b4b9f, 0x1853ff6d, 0xb63b6efc, 0x38d109c6, 0x96b99857, + 0xbf712ca5, 0x1119bd34, 0xece04541, 0x4288d4d0, 0x6b406022, + 0xc528f1b3, 0xade5a817, 0x038d3986, 0x2a458d74, 0x842d1ce5, + 0x79d4e490, 0xd7bc7501, 0xfe74c1f3, 0x501c5062, 0xdef63758, + 0x709ea6c9, 0x5956123b, 0xf73e83aa, 0x0ac77bdf, 0xa4afea4e, + 0x8d675ebc, 0x230fcf2d, 0x72831b0e, 0xdceb8a9f, 0xf5233e6d, + 0x5b4baffc, 0xa6b25789, 0x08dac618, 0x211272ea, 0x8f7ae37b, + 0x01908441, 0xaff815d0, 0x8630a122, 0x285830b3, 0xd5a1c8c6, + 0x7bc95957, 0x5201eda5, 0xfc697c34, 0x94a42590, 0x3accb401, + 0x130400f3, 0xbd6c9162, 0x40956917, 0xeefdf886, 0xc7354c74, + 0x695ddde5, 0xe7b7badf, 0x49df2b4e, 0x60179fbc, 0xce7f0e2d, + 0x3386f658, 0x9dee67c9, 0xb426d33b, 0x1a4e42aa, 0x65bc6073, + 0xcbd4f1e2, 0xe21c4510, 0x4c74d481, 0xb18d2cf4, 0x1fe5bd65, + 0x362d0997, 0x98459806, 0x16afff3c, 0xb8c76ead, 0x910fda5f, + 0x3f674bce, 0xc29eb3bb, 0x6cf6222a, 0x453e96d8, 0xeb560749, + 0x839b5eed, 0x2df3cf7c, 0x043b7b8e, 0xaa53ea1f, 0x57aa126a, + 0xf9c283fb, 0xd00a3709, 0x7e62a698, 0xf088c1a2, 0x5ee05033, + 0x7728e4c1, 0xd9407550, 0x24b98d25, 0x8ad11cb4, 0xa319a846, + 0x0d7139d7}, + {0x00000000, 0xb9fbdbe8, 0xa886b191, 0x117d6a79, 0x8a7c6563, + 0x3387be8b, 0x22fad4f2, 0x9b010f1a, 0xcf89cc87, 0x7672176f, + 0x670f7d16, 0xdef4a6fe, 0x45f5a9e4, 0xfc0e720c, 0xed731875, + 0x5488c39d, 0x44629f4f, 0xfd9944a7, 0xece42ede, 0x551ff536, + 0xce1efa2c, 0x77e521c4, 0x66984bbd, 0xdf639055, 0x8beb53c8, + 0x32108820, 0x236de259, 0x9a9639b1, 0x019736ab, 0xb86ced43, + 0xa911873a, 0x10ea5cd2, 0x88c53e9e, 0x313ee576, 0x20438f0f, + 0x99b854e7, 0x02b95bfd, 0xbb428015, 0xaa3fea6c, 0x13c43184, + 0x474cf219, 0xfeb729f1, 0xefca4388, 0x56319860, 0xcd30977a, + 0x74cb4c92, 0x65b626eb, 0xdc4dfd03, 0xcca7a1d1, 0x755c7a39, + 0x64211040, 0xdddacba8, 0x46dbc4b2, 0xff201f5a, 0xee5d7523, + 0x57a6aecb, 0x032e6d56, 0xbad5b6be, 0xaba8dcc7, 0x1253072f, + 0x89520835, 0x30a9d3dd, 0x21d4b9a4, 0x982f624c, 0xcafb7b7d, + 0x7300a095, 0x627dcaec, 0xdb861104, 0x40871e1e, 0xf97cc5f6, + 0xe801af8f, 0x51fa7467, 0x0572b7fa, 0xbc896c12, 0xadf4066b, + 0x140fdd83, 0x8f0ed299, 0x36f50971, 0x27886308, 0x9e73b8e0, + 0x8e99e432, 0x37623fda, 0x261f55a3, 0x9fe48e4b, 0x04e58151, + 0xbd1e5ab9, 0xac6330c0, 0x1598eb28, 0x411028b5, 0xf8ebf35d, + 0xe9969924, 0x506d42cc, 0xcb6c4dd6, 0x7297963e, 0x63eafc47, + 0xda1127af, 0x423e45e3, 0xfbc59e0b, 0xeab8f472, 0x53432f9a, + 0xc8422080, 0x71b9fb68, 0x60c49111, 0xd93f4af9, 0x8db78964, + 0x344c528c, 0x253138f5, 0x9ccae31d, 0x07cbec07, 0xbe3037ef, + 0xaf4d5d96, 0x16b6867e, 0x065cdaac, 0xbfa70144, 0xaeda6b3d, + 0x1721b0d5, 0x8c20bfcf, 0x35db6427, 0x24a60e5e, 0x9d5dd5b6, + 0xc9d5162b, 0x702ecdc3, 0x6153a7ba, 0xd8a87c52, 0x43a97348, + 0xfa52a8a0, 0xeb2fc2d9, 0x52d41931, 0x4e87f0bb, 0xf77c2b53, + 0xe601412a, 0x5ffa9ac2, 0xc4fb95d8, 0x7d004e30, 0x6c7d2449, + 0xd586ffa1, 0x810e3c3c, 0x38f5e7d4, 0x29888dad, 0x90735645, + 0x0b72595f, 0xb28982b7, 0xa3f4e8ce, 0x1a0f3326, 0x0ae56ff4, + 0xb31eb41c, 0xa263de65, 0x1b98058d, 0x80990a97, 0x3962d17f, + 0x281fbb06, 0x91e460ee, 0xc56ca373, 0x7c97789b, 0x6dea12e2, + 0xd411c90a, 0x4f10c610, 0xf6eb1df8, 0xe7967781, 0x5e6dac69, + 0xc642ce25, 0x7fb915cd, 0x6ec47fb4, 0xd73fa45c, 0x4c3eab46, + 0xf5c570ae, 0xe4b81ad7, 0x5d43c13f, 0x09cb02a2, 0xb030d94a, + 0xa14db333, 0x18b668db, 0x83b767c1, 0x3a4cbc29, 0x2b31d650, + 0x92ca0db8, 0x8220516a, 0x3bdb8a82, 0x2aa6e0fb, 0x935d3b13, + 0x085c3409, 0xb1a7efe1, 0xa0da8598, 0x19215e70, 0x4da99ded, + 0xf4524605, 0xe52f2c7c, 0x5cd4f794, 0xc7d5f88e, 0x7e2e2366, + 0x6f53491f, 0xd6a892f7, 0x847c8bc6, 0x3d87502e, 0x2cfa3a57, + 0x9501e1bf, 0x0e00eea5, 0xb7fb354d, 0xa6865f34, 0x1f7d84dc, + 0x4bf54741, 0xf20e9ca9, 0xe373f6d0, 0x5a882d38, 0xc1892222, + 0x7872f9ca, 0x690f93b3, 0xd0f4485b, 0xc01e1489, 0x79e5cf61, + 0x6898a518, 0xd1637ef0, 0x4a6271ea, 0xf399aa02, 0xe2e4c07b, + 0x5b1f1b93, 0x0f97d80e, 0xb66c03e6, 0xa711699f, 0x1eeab277, + 0x85ebbd6d, 0x3c106685, 0x2d6d0cfc, 0x9496d714, 0x0cb9b558, + 0xb5426eb0, 0xa43f04c9, 0x1dc4df21, 0x86c5d03b, 0x3f3e0bd3, + 0x2e4361aa, 0x97b8ba42, 0xc33079df, 0x7acba237, 0x6bb6c84e, + 0xd24d13a6, 0x494c1cbc, 0xf0b7c754, 0xe1caad2d, 0x583176c5, + 0x48db2a17, 0xf120f1ff, 0xe05d9b86, 0x59a6406e, 0xc2a74f74, + 0x7b5c949c, 0x6a21fee5, 0xd3da250d, 0x8752e690, 0x3ea93d78, + 0x2fd45701, 0x962f8ce9, 0x0d2e83f3, 0xb4d5581b, 0xa5a83262, + 0x1c53e98a}, + {0x00000000, 0x9d0fe176, 0xe16ec4ad, 0x7c6125db, 0x19ac8f1b, + 0x84a36e6d, 0xf8c24bb6, 0x65cdaac0, 0x33591e36, 0xae56ff40, + 0xd237da9b, 0x4f383bed, 0x2af5912d, 0xb7fa705b, 0xcb9b5580, + 0x5694b4f6, 0x66b23c6c, 0xfbbddd1a, 0x87dcf8c1, 0x1ad319b7, + 0x7f1eb377, 0xe2115201, 0x9e7077da, 0x037f96ac, 0x55eb225a, + 0xc8e4c32c, 0xb485e6f7, 0x298a0781, 0x4c47ad41, 0xd1484c37, + 0xad2969ec, 0x3026889a, 0xcd6478d8, 0x506b99ae, 0x2c0abc75, + 0xb1055d03, 0xd4c8f7c3, 0x49c716b5, 0x35a6336e, 0xa8a9d218, + 0xfe3d66ee, 0x63328798, 0x1f53a243, 0x825c4335, 0xe791e9f5, + 0x7a9e0883, 0x06ff2d58, 0x9bf0cc2e, 0xabd644b4, 0x36d9a5c2, + 0x4ab88019, 0xd7b7616f, 0xb27acbaf, 0x2f752ad9, 0x53140f02, + 0xce1bee74, 0x988f5a82, 0x0580bbf4, 0x79e19e2f, 0xe4ee7f59, + 0x8123d599, 0x1c2c34ef, 0x604d1134, 0xfd42f042, 0x41b9f7f1, + 0xdcb61687, 0xa0d7335c, 0x3dd8d22a, 0x581578ea, 0xc51a999c, + 0xb97bbc47, 0x24745d31, 0x72e0e9c7, 0xefef08b1, 0x938e2d6a, + 0x0e81cc1c, 0x6b4c66dc, 0xf64387aa, 0x8a22a271, 0x172d4307, + 0x270bcb9d, 0xba042aeb, 0xc6650f30, 0x5b6aee46, 0x3ea74486, + 0xa3a8a5f0, 0xdfc9802b, 0x42c6615d, 0x1452d5ab, 0x895d34dd, + 0xf53c1106, 0x6833f070, 0x0dfe5ab0, 0x90f1bbc6, 0xec909e1d, + 0x719f7f6b, 0x8cdd8f29, 0x11d26e5f, 0x6db34b84, 0xf0bcaaf2, + 0x95710032, 0x087ee144, 0x741fc49f, 0xe91025e9, 0xbf84911f, + 0x228b7069, 0x5eea55b2, 0xc3e5b4c4, 0xa6281e04, 0x3b27ff72, + 0x4746daa9, 0xda493bdf, 0xea6fb345, 0x77605233, 0x0b0177e8, + 0x960e969e, 0xf3c33c5e, 0x6eccdd28, 0x12adf8f3, 0x8fa21985, + 0xd936ad73, 0x44394c05, 0x385869de, 0xa55788a8, 0xc09a2268, + 0x5d95c31e, 0x21f4e6c5, 0xbcfb07b3, 0x8373efe2, 0x1e7c0e94, + 0x621d2b4f, 0xff12ca39, 0x9adf60f9, 0x07d0818f, 0x7bb1a454, + 0xe6be4522, 0xb02af1d4, 0x2d2510a2, 0x51443579, 0xcc4bd40f, + 0xa9867ecf, 0x34899fb9, 0x48e8ba62, 0xd5e75b14, 0xe5c1d38e, + 0x78ce32f8, 0x04af1723, 0x99a0f655, 0xfc6d5c95, 0x6162bde3, + 0x1d039838, 0x800c794e, 0xd698cdb8, 0x4b972cce, 0x37f60915, + 0xaaf9e863, 0xcf3442a3, 0x523ba3d5, 0x2e5a860e, 0xb3556778, + 0x4e17973a, 0xd318764c, 0xaf795397, 0x3276b2e1, 0x57bb1821, + 0xcab4f957, 0xb6d5dc8c, 0x2bda3dfa, 0x7d4e890c, 0xe041687a, + 0x9c204da1, 0x012facd7, 0x64e20617, 0xf9ede761, 0x858cc2ba, + 0x188323cc, 0x28a5ab56, 0xb5aa4a20, 0xc9cb6ffb, 0x54c48e8d, + 0x3109244d, 0xac06c53b, 0xd067e0e0, 0x4d680196, 0x1bfcb560, + 0x86f35416, 0xfa9271cd, 0x679d90bb, 0x02503a7b, 0x9f5fdb0d, + 0xe33efed6, 0x7e311fa0, 0xc2ca1813, 0x5fc5f965, 0x23a4dcbe, + 0xbeab3dc8, 0xdb669708, 0x4669767e, 0x3a0853a5, 0xa707b2d3, + 0xf1930625, 0x6c9ce753, 0x10fdc288, 0x8df223fe, 0xe83f893e, + 0x75306848, 0x09514d93, 0x945eace5, 0xa478247f, 0x3977c509, + 0x4516e0d2, 0xd81901a4, 0xbdd4ab64, 0x20db4a12, 0x5cba6fc9, + 0xc1b58ebf, 0x97213a49, 0x0a2edb3f, 0x764ffee4, 0xeb401f92, + 0x8e8db552, 0x13825424, 0x6fe371ff, 0xf2ec9089, 0x0fae60cb, + 0x92a181bd, 0xeec0a466, 0x73cf4510, 0x1602efd0, 0x8b0d0ea6, + 0xf76c2b7d, 0x6a63ca0b, 0x3cf77efd, 0xa1f89f8b, 0xdd99ba50, + 0x40965b26, 0x255bf1e6, 0xb8541090, 0xc435354b, 0x593ad43d, + 0x691c5ca7, 0xf413bdd1, 0x8872980a, 0x157d797c, 0x70b0d3bc, + 0xedbf32ca, 0x91de1711, 0x0cd1f667, 0x5a454291, 0xc74aa3e7, + 0xbb2b863c, 0x2624674a, 0x43e9cd8a, 0xdee62cfc, 0xa2870927, + 0x3f88e851}, + {0x00000000, 0xdd96d985, 0x605cb54b, 0xbdca6cce, 0xc0b96a96, + 0x1d2fb313, 0xa0e5dfdd, 0x7d730658, 0x5a03d36d, 0x87950ae8, + 0x3a5f6626, 0xe7c9bfa3, 0x9abab9fb, 0x472c607e, 0xfae60cb0, + 0x2770d535, 0xb407a6da, 0x69917f5f, 0xd45b1391, 0x09cdca14, + 0x74becc4c, 0xa92815c9, 0x14e27907, 0xc974a082, 0xee0475b7, + 0x3392ac32, 0x8e58c0fc, 0x53ce1979, 0x2ebd1f21, 0xf32bc6a4, + 0x4ee1aa6a, 0x937773ef, 0xb37e4bf5, 0x6ee89270, 0xd322febe, + 0x0eb4273b, 0x73c72163, 0xae51f8e6, 0x139b9428, 0xce0d4dad, + 0xe97d9898, 0x34eb411d, 0x89212dd3, 0x54b7f456, 0x29c4f20e, + 0xf4522b8b, 0x49984745, 0x940e9ec0, 0x0779ed2f, 0xdaef34aa, + 0x67255864, 0xbab381e1, 0xc7c087b9, 0x1a565e3c, 0xa79c32f2, + 0x7a0aeb77, 0x5d7a3e42, 0x80ece7c7, 0x3d268b09, 0xe0b0528c, + 0x9dc354d4, 0x40558d51, 0xfd9fe19f, 0x2009381a, 0xbd8d91ab, + 0x601b482e, 0xddd124e0, 0x0047fd65, 0x7d34fb3d, 0xa0a222b8, + 0x1d684e76, 0xc0fe97f3, 0xe78e42c6, 0x3a189b43, 0x87d2f78d, + 0x5a442e08, 0x27372850, 0xfaa1f1d5, 0x476b9d1b, 0x9afd449e, + 0x098a3771, 0xd41ceef4, 0x69d6823a, 0xb4405bbf, 0xc9335de7, + 0x14a58462, 0xa96fe8ac, 0x74f93129, 0x5389e41c, 0x8e1f3d99, + 0x33d55157, 0xee4388d2, 0x93308e8a, 0x4ea6570f, 0xf36c3bc1, + 0x2efae244, 0x0ef3da5e, 0xd36503db, 0x6eaf6f15, 0xb339b690, + 0xce4ab0c8, 0x13dc694d, 0xae160583, 0x7380dc06, 0x54f00933, + 0x8966d0b6, 0x34acbc78, 0xe93a65fd, 0x944963a5, 0x49dfba20, + 0xf415d6ee, 0x29830f6b, 0xbaf47c84, 0x6762a501, 0xdaa8c9cf, + 0x073e104a, 0x7a4d1612, 0xa7dbcf97, 0x1a11a359, 0xc7877adc, + 0xe0f7afe9, 0x3d61766c, 0x80ab1aa2, 0x5d3dc327, 0x204ec57f, + 0xfdd81cfa, 0x40127034, 0x9d84a9b1, 0xa06a2517, 0x7dfcfc92, + 0xc036905c, 0x1da049d9, 0x60d34f81, 0xbd459604, 0x008ffaca, + 0xdd19234f, 0xfa69f67a, 0x27ff2fff, 0x9a354331, 0x47a39ab4, + 0x3ad09cec, 0xe7464569, 0x5a8c29a7, 0x871af022, 0x146d83cd, + 0xc9fb5a48, 0x74313686, 0xa9a7ef03, 0xd4d4e95b, 0x094230de, + 0xb4885c10, 0x691e8595, 0x4e6e50a0, 0x93f88925, 0x2e32e5eb, + 0xf3a43c6e, 0x8ed73a36, 0x5341e3b3, 0xee8b8f7d, 0x331d56f8, + 0x13146ee2, 0xce82b767, 0x7348dba9, 0xaede022c, 0xd3ad0474, + 0x0e3bddf1, 0xb3f1b13f, 0x6e6768ba, 0x4917bd8f, 0x9481640a, + 0x294b08c4, 0xf4ddd141, 0x89aed719, 0x54380e9c, 0xe9f26252, + 0x3464bbd7, 0xa713c838, 0x7a8511bd, 0xc74f7d73, 0x1ad9a4f6, + 0x67aaa2ae, 0xba3c7b2b, 0x07f617e5, 0xda60ce60, 0xfd101b55, + 0x2086c2d0, 0x9d4cae1e, 0x40da779b, 0x3da971c3, 0xe03fa846, + 0x5df5c488, 0x80631d0d, 0x1de7b4bc, 0xc0716d39, 0x7dbb01f7, + 0xa02dd872, 0xdd5ede2a, 0x00c807af, 0xbd026b61, 0x6094b2e4, + 0x47e467d1, 0x9a72be54, 0x27b8d29a, 0xfa2e0b1f, 0x875d0d47, + 0x5acbd4c2, 0xe701b80c, 0x3a976189, 0xa9e01266, 0x7476cbe3, + 0xc9bca72d, 0x142a7ea8, 0x695978f0, 0xb4cfa175, 0x0905cdbb, + 0xd493143e, 0xf3e3c10b, 0x2e75188e, 0x93bf7440, 0x4e29adc5, + 0x335aab9d, 0xeecc7218, 0x53061ed6, 0x8e90c753, 0xae99ff49, + 0x730f26cc, 0xcec54a02, 0x13539387, 0x6e2095df, 0xb3b64c5a, + 0x0e7c2094, 0xd3eaf911, 0xf49a2c24, 0x290cf5a1, 0x94c6996f, + 0x495040ea, 0x342346b2, 0xe9b59f37, 0x547ff3f9, 0x89e92a7c, + 0x1a9e5993, 0xc7088016, 0x7ac2ecd8, 0xa754355d, 0xda273305, + 0x07b1ea80, 0xba7b864e, 0x67ed5fcb, 0x409d8afe, 0x9d0b537b, + 0x20c13fb5, 0xfd57e630, 0x8024e068, 0x5db239ed, 0xe0785523, + 0x3dee8ca6}}; + +local const z_word_t FAR crc_braid_big_table[][256] = { + {0x00000000, 0x85d996dd, 0x4bb55c60, 0xce6ccabd, 0x966ab9c0, + 0x13b32f1d, 0xdddfe5a0, 0x5806737d, 0x6dd3035a, 0xe80a9587, + 0x26665f3a, 0xa3bfc9e7, 0xfbb9ba9a, 0x7e602c47, 0xb00ce6fa, + 0x35d57027, 0xdaa607b4, 0x5f7f9169, 0x91135bd4, 0x14cacd09, + 0x4cccbe74, 0xc91528a9, 0x0779e214, 0x82a074c9, 0xb77504ee, + 0x32ac9233, 0xfcc0588e, 0x7919ce53, 0x211fbd2e, 0xa4c62bf3, + 0x6aaae14e, 0xef737793, 0xf54b7eb3, 0x7092e86e, 0xbefe22d3, + 0x3b27b40e, 0x6321c773, 0xe6f851ae, 0x28949b13, 0xad4d0dce, + 0x98987de9, 0x1d41eb34, 0xd32d2189, 0x56f4b754, 0x0ef2c429, + 0x8b2b52f4, 0x45479849, 0xc09e0e94, 0x2fed7907, 0xaa34efda, + 0x64582567, 0xe181b3ba, 0xb987c0c7, 0x3c5e561a, 0xf2329ca7, + 0x77eb0a7a, 0x423e7a5d, 0xc7e7ec80, 0x098b263d, 0x8c52b0e0, + 0xd454c39d, 0x518d5540, 0x9fe19ffd, 0x1a380920, 0xab918dbd, + 0x2e481b60, 0xe024d1dd, 0x65fd4700, 0x3dfb347d, 0xb822a2a0, + 0x764e681d, 0xf397fec0, 0xc6428ee7, 0x439b183a, 0x8df7d287, + 0x082e445a, 0x50283727, 0xd5f1a1fa, 0x1b9d6b47, 0x9e44fd9a, + 0x71378a09, 0xf4ee1cd4, 0x3a82d669, 0xbf5b40b4, 0xe75d33c9, + 0x6284a514, 0xace86fa9, 0x2931f974, 0x1ce48953, 0x993d1f8e, + 0x5751d533, 0xd28843ee, 0x8a8e3093, 0x0f57a64e, 0xc13b6cf3, + 0x44e2fa2e, 0x5edaf30e, 0xdb0365d3, 0x156faf6e, 0x90b639b3, + 0xc8b04ace, 0x4d69dc13, 0x830516ae, 0x06dc8073, 0x3309f054, + 0xb6d06689, 0x78bcac34, 0xfd653ae9, 0xa5634994, 0x20badf49, + 0xeed615f4, 0x6b0f8329, 0x847cf4ba, 0x01a56267, 0xcfc9a8da, + 0x4a103e07, 0x12164d7a, 0x97cfdba7, 0x59a3111a, 0xdc7a87c7, + 0xe9aff7e0, 0x6c76613d, 0xa21aab80, 0x27c33d5d, 0x7fc54e20, + 0xfa1cd8fd, 0x34701240, 0xb1a9849d, 0x17256aa0, 0x92fcfc7d, + 0x5c9036c0, 0xd949a01d, 0x814fd360, 0x049645bd, 0xcafa8f00, + 0x4f2319dd, 0x7af669fa, 0xff2fff27, 0x3143359a, 0xb49aa347, + 0xec9cd03a, 0x694546e7, 0xa7298c5a, 0x22f01a87, 0xcd836d14, + 0x485afbc9, 0x86363174, 0x03efa7a9, 0x5be9d4d4, 0xde304209, + 0x105c88b4, 0x95851e69, 0xa0506e4e, 0x2589f893, 0xebe5322e, + 0x6e3ca4f3, 0x363ad78e, 0xb3e34153, 0x7d8f8bee, 0xf8561d33, + 0xe26e1413, 0x67b782ce, 0xa9db4873, 0x2c02deae, 0x7404add3, + 0xf1dd3b0e, 0x3fb1f1b3, 0xba68676e, 0x8fbd1749, 0x0a648194, + 0xc4084b29, 0x41d1ddf4, 0x19d7ae89, 0x9c0e3854, 0x5262f2e9, + 0xd7bb6434, 0x38c813a7, 0xbd11857a, 0x737d4fc7, 0xf6a4d91a, + 0xaea2aa67, 0x2b7b3cba, 0xe517f607, 0x60ce60da, 0x551b10fd, + 0xd0c28620, 0x1eae4c9d, 0x9b77da40, 0xc371a93d, 0x46a83fe0, + 0x88c4f55d, 0x0d1d6380, 0xbcb4e71d, 0x396d71c0, 0xf701bb7d, + 0x72d82da0, 0x2ade5edd, 0xaf07c800, 0x616b02bd, 0xe4b29460, + 0xd167e447, 0x54be729a, 0x9ad2b827, 0x1f0b2efa, 0x470d5d87, + 0xc2d4cb5a, 0x0cb801e7, 0x8961973a, 0x6612e0a9, 0xe3cb7674, + 0x2da7bcc9, 0xa87e2a14, 0xf0785969, 0x75a1cfb4, 0xbbcd0509, + 0x3e1493d4, 0x0bc1e3f3, 0x8e18752e, 0x4074bf93, 0xc5ad294e, + 0x9dab5a33, 0x1872ccee, 0xd61e0653, 0x53c7908e, 0x49ff99ae, + 0xcc260f73, 0x024ac5ce, 0x87935313, 0xdf95206e, 0x5a4cb6b3, + 0x94207c0e, 0x11f9ead3, 0x242c9af4, 0xa1f50c29, 0x6f99c694, + 0xea405049, 0xb2462334, 0x379fb5e9, 0xf9f37f54, 0x7c2ae989, + 0x93599e1a, 0x168008c7, 0xd8ecc27a, 0x5d3554a7, 0x053327da, + 0x80eab107, 0x4e867bba, 0xcb5fed67, 0xfe8a9d40, 0x7b530b9d, + 0xb53fc120, 0x30e657fd, 0x68e02480, 0xed39b25d, 0x235578e0, + 0xa68cee3d}, + {0x00000000, 0x76e10f9d, 0xadc46ee1, 0xdb25617c, 0x1b8fac19, + 0x6d6ea384, 0xb64bc2f8, 0xc0aacd65, 0x361e5933, 0x40ff56ae, + 0x9bda37d2, 0xed3b384f, 0x2d91f52a, 0x5b70fab7, 0x80559bcb, + 0xf6b49456, 0x6c3cb266, 0x1addbdfb, 0xc1f8dc87, 0xb719d31a, + 0x77b31e7f, 0x015211e2, 0xda77709e, 0xac967f03, 0x5a22eb55, + 0x2cc3e4c8, 0xf7e685b4, 0x81078a29, 0x41ad474c, 0x374c48d1, + 0xec6929ad, 0x9a882630, 0xd87864cd, 0xae996b50, 0x75bc0a2c, + 0x035d05b1, 0xc3f7c8d4, 0xb516c749, 0x6e33a635, 0x18d2a9a8, + 0xee663dfe, 0x98873263, 0x43a2531f, 0x35435c82, 0xf5e991e7, + 0x83089e7a, 0x582dff06, 0x2eccf09b, 0xb444d6ab, 0xc2a5d936, + 0x1980b84a, 0x6f61b7d7, 0xafcb7ab2, 0xd92a752f, 0x020f1453, + 0x74ee1bce, 0x825a8f98, 0xf4bb8005, 0x2f9ee179, 0x597feee4, + 0x99d52381, 0xef342c1c, 0x34114d60, 0x42f042fd, 0xf1f7b941, + 0x8716b6dc, 0x5c33d7a0, 0x2ad2d83d, 0xea781558, 0x9c991ac5, + 0x47bc7bb9, 0x315d7424, 0xc7e9e072, 0xb108efef, 0x6a2d8e93, + 0x1ccc810e, 0xdc664c6b, 0xaa8743f6, 0x71a2228a, 0x07432d17, + 0x9dcb0b27, 0xeb2a04ba, 0x300f65c6, 0x46ee6a5b, 0x8644a73e, + 0xf0a5a8a3, 0x2b80c9df, 0x5d61c642, 0xabd55214, 0xdd345d89, + 0x06113cf5, 0x70f03368, 0xb05afe0d, 0xc6bbf190, 0x1d9e90ec, + 0x6b7f9f71, 0x298fdd8c, 0x5f6ed211, 0x844bb36d, 0xf2aabcf0, + 0x32007195, 0x44e17e08, 0x9fc41f74, 0xe92510e9, 0x1f9184bf, + 0x69708b22, 0xb255ea5e, 0xc4b4e5c3, 0x041e28a6, 0x72ff273b, + 0xa9da4647, 0xdf3b49da, 0x45b36fea, 0x33526077, 0xe877010b, + 0x9e960e96, 0x5e3cc3f3, 0x28ddcc6e, 0xf3f8ad12, 0x8519a28f, + 0x73ad36d9, 0x054c3944, 0xde695838, 0xa88857a5, 0x68229ac0, + 0x1ec3955d, 0xc5e6f421, 0xb307fbbc, 0xe2ef7383, 0x940e7c1e, + 0x4f2b1d62, 0x39ca12ff, 0xf960df9a, 0x8f81d007, 0x54a4b17b, + 0x2245bee6, 0xd4f12ab0, 0xa210252d, 0x79354451, 0x0fd44bcc, + 0xcf7e86a9, 0xb99f8934, 0x62bae848, 0x145be7d5, 0x8ed3c1e5, + 0xf832ce78, 0x2317af04, 0x55f6a099, 0x955c6dfc, 0xe3bd6261, + 0x3898031d, 0x4e790c80, 0xb8cd98d6, 0xce2c974b, 0x1509f637, + 0x63e8f9aa, 0xa34234cf, 0xd5a33b52, 0x0e865a2e, 0x786755b3, + 0x3a97174e, 0x4c7618d3, 0x975379af, 0xe1b27632, 0x2118bb57, + 0x57f9b4ca, 0x8cdcd5b6, 0xfa3dda2b, 0x0c894e7d, 0x7a6841e0, + 0xa14d209c, 0xd7ac2f01, 0x1706e264, 0x61e7edf9, 0xbac28c85, + 0xcc238318, 0x56aba528, 0x204aaab5, 0xfb6fcbc9, 0x8d8ec454, + 0x4d240931, 0x3bc506ac, 0xe0e067d0, 0x9601684d, 0x60b5fc1b, + 0x1654f386, 0xcd7192fa, 0xbb909d67, 0x7b3a5002, 0x0ddb5f9f, + 0xd6fe3ee3, 0xa01f317e, 0x1318cac2, 0x65f9c55f, 0xbedca423, + 0xc83dabbe, 0x089766db, 0x7e766946, 0xa553083a, 0xd3b207a7, + 0x250693f1, 0x53e79c6c, 0x88c2fd10, 0xfe23f28d, 0x3e893fe8, + 0x48683075, 0x934d5109, 0xe5ac5e94, 0x7f2478a4, 0x09c57739, + 0xd2e01645, 0xa40119d8, 0x64abd4bd, 0x124adb20, 0xc96fba5c, + 0xbf8eb5c1, 0x493a2197, 0x3fdb2e0a, 0xe4fe4f76, 0x921f40eb, + 0x52b58d8e, 0x24548213, 0xff71e36f, 0x8990ecf2, 0xcb60ae0f, + 0xbd81a192, 0x66a4c0ee, 0x1045cf73, 0xd0ef0216, 0xa60e0d8b, + 0x7d2b6cf7, 0x0bca636a, 0xfd7ef73c, 0x8b9ff8a1, 0x50ba99dd, + 0x265b9640, 0xe6f15b25, 0x901054b8, 0x4b3535c4, 0x3dd43a59, + 0xa75c1c69, 0xd1bd13f4, 0x0a987288, 0x7c797d15, 0xbcd3b070, + 0xca32bfed, 0x1117de91, 0x67f6d10c, 0x9142455a, 0xe7a34ac7, + 0x3c862bbb, 0x4a672426, 0x8acde943, 0xfc2ce6de, 0x270987a2, + 0x51e8883f}, + {0x00000000, 0xe8dbfbb9, 0x91b186a8, 0x796a7d11, 0x63657c8a, + 0x8bbe8733, 0xf2d4fa22, 0x1a0f019b, 0x87cc89cf, 0x6f177276, + 0x167d0f67, 0xfea6f4de, 0xe4a9f545, 0x0c720efc, 0x751873ed, + 0x9dc38854, 0x4f9f6244, 0xa74499fd, 0xde2ee4ec, 0x36f51f55, + 0x2cfa1ece, 0xc421e577, 0xbd4b9866, 0x559063df, 0xc853eb8b, + 0x20881032, 0x59e26d23, 0xb139969a, 0xab369701, 0x43ed6cb8, + 0x3a8711a9, 0xd25cea10, 0x9e3ec588, 0x76e53e31, 0x0f8f4320, + 0xe754b899, 0xfd5bb902, 0x158042bb, 0x6cea3faa, 0x8431c413, + 0x19f24c47, 0xf129b7fe, 0x8843caef, 0x60983156, 0x7a9730cd, + 0x924ccb74, 0xeb26b665, 0x03fd4ddc, 0xd1a1a7cc, 0x397a5c75, + 0x40102164, 0xa8cbdadd, 0xb2c4db46, 0x5a1f20ff, 0x23755dee, + 0xcbaea657, 0x566d2e03, 0xbeb6d5ba, 0xc7dca8ab, 0x2f075312, + 0x35085289, 0xddd3a930, 0xa4b9d421, 0x4c622f98, 0x7d7bfbca, + 0x95a00073, 0xecca7d62, 0x041186db, 0x1e1e8740, 0xf6c57cf9, + 0x8faf01e8, 0x6774fa51, 0xfab77205, 0x126c89bc, 0x6b06f4ad, + 0x83dd0f14, 0x99d20e8f, 0x7109f536, 0x08638827, 0xe0b8739e, + 0x32e4998e, 0xda3f6237, 0xa3551f26, 0x4b8ee49f, 0x5181e504, + 0xb95a1ebd, 0xc03063ac, 0x28eb9815, 0xb5281041, 0x5df3ebf8, + 0x249996e9, 0xcc426d50, 0xd64d6ccb, 0x3e969772, 0x47fcea63, + 0xaf2711da, 0xe3453e42, 0x0b9ec5fb, 0x72f4b8ea, 0x9a2f4353, + 0x802042c8, 0x68fbb971, 0x1191c460, 0xf94a3fd9, 0x6489b78d, + 0x8c524c34, 0xf5383125, 0x1de3ca9c, 0x07eccb07, 0xef3730be, + 0x965d4daf, 0x7e86b616, 0xacda5c06, 0x4401a7bf, 0x3d6bdaae, + 0xd5b02117, 0xcfbf208c, 0x2764db35, 0x5e0ea624, 0xb6d55d9d, + 0x2b16d5c9, 0xc3cd2e70, 0xbaa75361, 0x527ca8d8, 0x4873a943, + 0xa0a852fa, 0xd9c22feb, 0x3119d452, 0xbbf0874e, 0x532b7cf7, + 0x2a4101e6, 0xc29afa5f, 0xd895fbc4, 0x304e007d, 0x49247d6c, + 0xa1ff86d5, 0x3c3c0e81, 0xd4e7f538, 0xad8d8829, 0x45567390, + 0x5f59720b, 0xb78289b2, 0xcee8f4a3, 0x26330f1a, 0xf46fe50a, + 0x1cb41eb3, 0x65de63a2, 0x8d05981b, 0x970a9980, 0x7fd16239, + 0x06bb1f28, 0xee60e491, 0x73a36cc5, 0x9b78977c, 0xe212ea6d, + 0x0ac911d4, 0x10c6104f, 0xf81debf6, 0x817796e7, 0x69ac6d5e, + 0x25ce42c6, 0xcd15b97f, 0xb47fc46e, 0x5ca43fd7, 0x46ab3e4c, + 0xae70c5f5, 0xd71ab8e4, 0x3fc1435d, 0xa202cb09, 0x4ad930b0, + 0x33b34da1, 0xdb68b618, 0xc167b783, 0x29bc4c3a, 0x50d6312b, + 0xb80dca92, 0x6a512082, 0x828adb3b, 0xfbe0a62a, 0x133b5d93, + 0x09345c08, 0xe1efa7b1, 0x9885daa0, 0x705e2119, 0xed9da94d, + 0x054652f4, 0x7c2c2fe5, 0x94f7d45c, 0x8ef8d5c7, 0x66232e7e, + 0x1f49536f, 0xf792a8d6, 0xc68b7c84, 0x2e50873d, 0x573afa2c, + 0xbfe10195, 0xa5ee000e, 0x4d35fbb7, 0x345f86a6, 0xdc847d1f, + 0x4147f54b, 0xa99c0ef2, 0xd0f673e3, 0x382d885a, 0x222289c1, + 0xcaf97278, 0xb3930f69, 0x5b48f4d0, 0x89141ec0, 0x61cfe579, + 0x18a59868, 0xf07e63d1, 0xea71624a, 0x02aa99f3, 0x7bc0e4e2, + 0x931b1f5b, 0x0ed8970f, 0xe6036cb6, 0x9f6911a7, 0x77b2ea1e, + 0x6dbdeb85, 0x8566103c, 0xfc0c6d2d, 0x14d79694, 0x58b5b90c, + 0xb06e42b5, 0xc9043fa4, 0x21dfc41d, 0x3bd0c586, 0xd30b3e3f, + 0xaa61432e, 0x42bab897, 0xdf7930c3, 0x37a2cb7a, 0x4ec8b66b, + 0xa6134dd2, 0xbc1c4c49, 0x54c7b7f0, 0x2dadcae1, 0xc5763158, + 0x172adb48, 0xfff120f1, 0x869b5de0, 0x6e40a659, 0x744fa7c2, + 0x9c945c7b, 0xe5fe216a, 0x0d25dad3, 0x90e65287, 0x783da93e, + 0x0157d42f, 0xe98c2f96, 0xf3832e0d, 0x1b58d5b4, 0x6232a8a5, + 0x8ae9531c}, + {0x00000000, 0x919168ae, 0x6325a087, 0xf2b4c829, 0x874c31d4, + 0x16dd597a, 0xe4699153, 0x75f8f9fd, 0x4f9f1373, 0xde0e7bdd, + 0x2cbab3f4, 0xbd2bdb5a, 0xc8d322a7, 0x59424a09, 0xabf68220, + 0x3a67ea8e, 0x9e3e27e6, 0x0faf4f48, 0xfd1b8761, 0x6c8aefcf, + 0x19721632, 0x88e37e9c, 0x7a57b6b5, 0xebc6de1b, 0xd1a13495, + 0x40305c3b, 0xb2849412, 0x2315fcbc, 0x56ed0541, 0xc77c6def, + 0x35c8a5c6, 0xa459cd68, 0x7d7b3f17, 0xecea57b9, 0x1e5e9f90, + 0x8fcff73e, 0xfa370ec3, 0x6ba6666d, 0x9912ae44, 0x0883c6ea, + 0x32e42c64, 0xa37544ca, 0x51c18ce3, 0xc050e44d, 0xb5a81db0, + 0x2439751e, 0xd68dbd37, 0x471cd599, 0xe34518f1, 0x72d4705f, + 0x8060b876, 0x11f1d0d8, 0x64092925, 0xf598418b, 0x072c89a2, + 0x96bde10c, 0xacda0b82, 0x3d4b632c, 0xcfffab05, 0x5e6ec3ab, + 0x2b963a56, 0xba0752f8, 0x48b39ad1, 0xd922f27f, 0xfaf67e2e, + 0x6b671680, 0x99d3dea9, 0x0842b607, 0x7dba4ffa, 0xec2b2754, + 0x1e9fef7d, 0x8f0e87d3, 0xb5696d5d, 0x24f805f3, 0xd64ccdda, + 0x47dda574, 0x32255c89, 0xa3b43427, 0x5100fc0e, 0xc09194a0, + 0x64c859c8, 0xf5593166, 0x07edf94f, 0x967c91e1, 0xe384681c, + 0x721500b2, 0x80a1c89b, 0x1130a035, 0x2b574abb, 0xbac62215, + 0x4872ea3c, 0xd9e38292, 0xac1b7b6f, 0x3d8a13c1, 0xcf3edbe8, + 0x5eafb346, 0x878d4139, 0x161c2997, 0xe4a8e1be, 0x75398910, + 0x00c170ed, 0x91501843, 0x63e4d06a, 0xf275b8c4, 0xc812524a, + 0x59833ae4, 0xab37f2cd, 0x3aa69a63, 0x4f5e639e, 0xdecf0b30, + 0x2c7bc319, 0xbdeaabb7, 0x19b366df, 0x88220e71, 0x7a96c658, + 0xeb07aef6, 0x9eff570b, 0x0f6e3fa5, 0xfddaf78c, 0x6c4b9f22, + 0x562c75ac, 0xc7bd1d02, 0x3509d52b, 0xa498bd85, 0xd1604478, + 0x40f12cd6, 0xb245e4ff, 0x23d48c51, 0xf4edfd5c, 0x657c95f2, + 0x97c85ddb, 0x06593575, 0x73a1cc88, 0xe230a426, 0x10846c0f, + 0x811504a1, 0xbb72ee2f, 0x2ae38681, 0xd8574ea8, 0x49c62606, + 0x3c3edffb, 0xadafb755, 0x5f1b7f7c, 0xce8a17d2, 0x6ad3daba, + 0xfb42b214, 0x09f67a3d, 0x98671293, 0xed9feb6e, 0x7c0e83c0, + 0x8eba4be9, 0x1f2b2347, 0x254cc9c9, 0xb4dda167, 0x4669694e, + 0xd7f801e0, 0xa200f81d, 0x339190b3, 0xc125589a, 0x50b43034, + 0x8996c24b, 0x1807aae5, 0xeab362cc, 0x7b220a62, 0x0edaf39f, + 0x9f4b9b31, 0x6dff5318, 0xfc6e3bb6, 0xc609d138, 0x5798b996, + 0xa52c71bf, 0x34bd1911, 0x4145e0ec, 0xd0d48842, 0x2260406b, + 0xb3f128c5, 0x17a8e5ad, 0x86398d03, 0x748d452a, 0xe51c2d84, + 0x90e4d479, 0x0175bcd7, 0xf3c174fe, 0x62501c50, 0x5837f6de, + 0xc9a69e70, 0x3b125659, 0xaa833ef7, 0xdf7bc70a, 0x4eeaafa4, + 0xbc5e678d, 0x2dcf0f23, 0x0e1b8372, 0x9f8aebdc, 0x6d3e23f5, + 0xfcaf4b5b, 0x8957b2a6, 0x18c6da08, 0xea721221, 0x7be37a8f, + 0x41849001, 0xd015f8af, 0x22a13086, 0xb3305828, 0xc6c8a1d5, + 0x5759c97b, 0xa5ed0152, 0x347c69fc, 0x9025a494, 0x01b4cc3a, + 0xf3000413, 0x62916cbd, 0x17699540, 0x86f8fdee, 0x744c35c7, + 0xe5dd5d69, 0xdfbab7e7, 0x4e2bdf49, 0xbc9f1760, 0x2d0e7fce, + 0x58f68633, 0xc967ee9d, 0x3bd326b4, 0xaa424e1a, 0x7360bc65, + 0xe2f1d4cb, 0x10451ce2, 0x81d4744c, 0xf42c8db1, 0x65bde51f, + 0x97092d36, 0x06984598, 0x3cffaf16, 0xad6ec7b8, 0x5fda0f91, + 0xce4b673f, 0xbbb39ec2, 0x2a22f66c, 0xd8963e45, 0x490756eb, + 0xed5e9b83, 0x7ccff32d, 0x8e7b3b04, 0x1fea53aa, 0x6a12aa57, + 0xfb83c2f9, 0x09370ad0, 0x98a6627e, 0xa2c188f0, 0x3350e05e, + 0xc1e42877, 0x507540d9, 0x258db924, 0xb41cd18a, 0x46a819a3, + 0xd739710d}}; + +#endif + +#endif + +#if N == 5 + +#if W == 8 + +local const z_crc_t FAR crc_braid_table[][256] = { + {0x00000000, 0xaf449247, 0x85f822cf, 0x2abcb088, 0xd08143df, + 0x7fc5d198, 0x55796110, 0xfa3df357, 0x7a7381ff, 0xd53713b8, + 0xff8ba330, 0x50cf3177, 0xaaf2c220, 0x05b65067, 0x2f0ae0ef, + 0x804e72a8, 0xf4e703fe, 0x5ba391b9, 0x711f2131, 0xde5bb376, + 0x24664021, 0x8b22d266, 0xa19e62ee, 0x0edaf0a9, 0x8e948201, + 0x21d01046, 0x0b6ca0ce, 0xa4283289, 0x5e15c1de, 0xf1515399, + 0xdbede311, 0x74a97156, 0x32bf01bd, 0x9dfb93fa, 0xb7472372, + 0x1803b135, 0xe23e4262, 0x4d7ad025, 0x67c660ad, 0xc882f2ea, + 0x48cc8042, 0xe7881205, 0xcd34a28d, 0x627030ca, 0x984dc39d, + 0x370951da, 0x1db5e152, 0xb2f17315, 0xc6580243, 0x691c9004, + 0x43a0208c, 0xece4b2cb, 0x16d9419c, 0xb99dd3db, 0x93216353, + 0x3c65f114, 0xbc2b83bc, 0x136f11fb, 0x39d3a173, 0x96973334, + 0x6caac063, 0xc3ee5224, 0xe952e2ac, 0x461670eb, 0x657e037a, + 0xca3a913d, 0xe08621b5, 0x4fc2b3f2, 0xb5ff40a5, 0x1abbd2e2, + 0x3007626a, 0x9f43f02d, 0x1f0d8285, 0xb04910c2, 0x9af5a04a, + 0x35b1320d, 0xcf8cc15a, 0x60c8531d, 0x4a74e395, 0xe53071d2, + 0x91990084, 0x3edd92c3, 0x1461224b, 0xbb25b00c, 0x4118435b, + 0xee5cd11c, 0xc4e06194, 0x6ba4f3d3, 0xebea817b, 0x44ae133c, + 0x6e12a3b4, 0xc15631f3, 0x3b6bc2a4, 0x942f50e3, 0xbe93e06b, + 0x11d7722c, 0x57c102c7, 0xf8859080, 0xd2392008, 0x7d7db24f, + 0x87404118, 0x2804d35f, 0x02b863d7, 0xadfcf190, 0x2db28338, + 0x82f6117f, 0xa84aa1f7, 0x070e33b0, 0xfd33c0e7, 0x527752a0, + 0x78cbe228, 0xd78f706f, 0xa3260139, 0x0c62937e, 0x26de23f6, + 0x899ab1b1, 0x73a742e6, 0xdce3d0a1, 0xf65f6029, 0x591bf26e, + 0xd95580c6, 0x76111281, 0x5cada209, 0xf3e9304e, 0x09d4c319, + 0xa690515e, 0x8c2ce1d6, 0x23687391, 0xcafc06f4, 0x65b894b3, + 0x4f04243b, 0xe040b67c, 0x1a7d452b, 0xb539d76c, 0x9f8567e4, + 0x30c1f5a3, 0xb08f870b, 0x1fcb154c, 0x3577a5c4, 0x9a333783, + 0x600ec4d4, 0xcf4a5693, 0xe5f6e61b, 0x4ab2745c, 0x3e1b050a, + 0x915f974d, 0xbbe327c5, 0x14a7b582, 0xee9a46d5, 0x41ded492, + 0x6b62641a, 0xc426f65d, 0x446884f5, 0xeb2c16b2, 0xc190a63a, + 0x6ed4347d, 0x94e9c72a, 0x3bad556d, 0x1111e5e5, 0xbe5577a2, + 0xf8430749, 0x5707950e, 0x7dbb2586, 0xd2ffb7c1, 0x28c24496, + 0x8786d6d1, 0xad3a6659, 0x027ef41e, 0x823086b6, 0x2d7414f1, + 0x07c8a479, 0xa88c363e, 0x52b1c569, 0xfdf5572e, 0xd749e7a6, + 0x780d75e1, 0x0ca404b7, 0xa3e096f0, 0x895c2678, 0x2618b43f, + 0xdc254768, 0x7361d52f, 0x59dd65a7, 0xf699f7e0, 0x76d78548, + 0xd993170f, 0xf32fa787, 0x5c6b35c0, 0xa656c697, 0x091254d0, + 0x23aee458, 0x8cea761f, 0xaf82058e, 0x00c697c9, 0x2a7a2741, + 0x853eb506, 0x7f034651, 0xd047d416, 0xfafb649e, 0x55bff6d9, + 0xd5f18471, 0x7ab51636, 0x5009a6be, 0xff4d34f9, 0x0570c7ae, + 0xaa3455e9, 0x8088e561, 0x2fcc7726, 0x5b650670, 0xf4219437, + 0xde9d24bf, 0x71d9b6f8, 0x8be445af, 0x24a0d7e8, 0x0e1c6760, + 0xa158f527, 0x2116878f, 0x8e5215c8, 0xa4eea540, 0x0baa3707, + 0xf197c450, 0x5ed35617, 0x746fe69f, 0xdb2b74d8, 0x9d3d0433, + 0x32799674, 0x18c526fc, 0xb781b4bb, 0x4dbc47ec, 0xe2f8d5ab, + 0xc8446523, 0x6700f764, 0xe74e85cc, 0x480a178b, 0x62b6a703, + 0xcdf23544, 0x37cfc613, 0x988b5454, 0xb237e4dc, 0x1d73769b, + 0x69da07cd, 0xc69e958a, 0xec222502, 0x4366b745, 0xb95b4412, + 0x161fd655, 0x3ca366dd, 0x93e7f49a, 0x13a98632, 0xbced1475, + 0x9651a4fd, 0x391536ba, 0xc328c5ed, 0x6c6c57aa, 0x46d0e722, + 0xe9947565}, + {0x00000000, 0x4e890ba9, 0x9d121752, 0xd39b1cfb, 0xe15528e5, + 0xafdc234c, 0x7c473fb7, 0x32ce341e, 0x19db578b, 0x57525c22, + 0x84c940d9, 0xca404b70, 0xf88e7f6e, 0xb60774c7, 0x659c683c, + 0x2b156395, 0x33b6af16, 0x7d3fa4bf, 0xaea4b844, 0xe02db3ed, + 0xd2e387f3, 0x9c6a8c5a, 0x4ff190a1, 0x01789b08, 0x2a6df89d, + 0x64e4f334, 0xb77fefcf, 0xf9f6e466, 0xcb38d078, 0x85b1dbd1, + 0x562ac72a, 0x18a3cc83, 0x676d5e2c, 0x29e45585, 0xfa7f497e, + 0xb4f642d7, 0x863876c9, 0xc8b17d60, 0x1b2a619b, 0x55a36a32, + 0x7eb609a7, 0x303f020e, 0xe3a41ef5, 0xad2d155c, 0x9fe32142, + 0xd16a2aeb, 0x02f13610, 0x4c783db9, 0x54dbf13a, 0x1a52fa93, + 0xc9c9e668, 0x8740edc1, 0xb58ed9df, 0xfb07d276, 0x289cce8d, + 0x6615c524, 0x4d00a6b1, 0x0389ad18, 0xd012b1e3, 0x9e9bba4a, + 0xac558e54, 0xe2dc85fd, 0x31479906, 0x7fce92af, 0xcedabc58, + 0x8053b7f1, 0x53c8ab0a, 0x1d41a0a3, 0x2f8f94bd, 0x61069f14, + 0xb29d83ef, 0xfc148846, 0xd701ebd3, 0x9988e07a, 0x4a13fc81, + 0x049af728, 0x3654c336, 0x78ddc89f, 0xab46d464, 0xe5cfdfcd, + 0xfd6c134e, 0xb3e518e7, 0x607e041c, 0x2ef70fb5, 0x1c393bab, + 0x52b03002, 0x812b2cf9, 0xcfa22750, 0xe4b744c5, 0xaa3e4f6c, + 0x79a55397, 0x372c583e, 0x05e26c20, 0x4b6b6789, 0x98f07b72, + 0xd67970db, 0xa9b7e274, 0xe73ee9dd, 0x34a5f526, 0x7a2cfe8f, + 0x48e2ca91, 0x066bc138, 0xd5f0ddc3, 0x9b79d66a, 0xb06cb5ff, + 0xfee5be56, 0x2d7ea2ad, 0x63f7a904, 0x51399d1a, 0x1fb096b3, + 0xcc2b8a48, 0x82a281e1, 0x9a014d62, 0xd48846cb, 0x07135a30, + 0x499a5199, 0x7b546587, 0x35dd6e2e, 0xe64672d5, 0xa8cf797c, + 0x83da1ae9, 0xcd531140, 0x1ec80dbb, 0x50410612, 0x628f320c, + 0x2c0639a5, 0xff9d255e, 0xb1142ef7, 0x46c47ef1, 0x084d7558, + 0xdbd669a3, 0x955f620a, 0xa7915614, 0xe9185dbd, 0x3a834146, + 0x740a4aef, 0x5f1f297a, 0x119622d3, 0xc20d3e28, 0x8c843581, + 0xbe4a019f, 0xf0c30a36, 0x235816cd, 0x6dd11d64, 0x7572d1e7, + 0x3bfbda4e, 0xe860c6b5, 0xa6e9cd1c, 0x9427f902, 0xdaaef2ab, + 0x0935ee50, 0x47bce5f9, 0x6ca9866c, 0x22208dc5, 0xf1bb913e, + 0xbf329a97, 0x8dfcae89, 0xc375a520, 0x10eeb9db, 0x5e67b272, + 0x21a920dd, 0x6f202b74, 0xbcbb378f, 0xf2323c26, 0xc0fc0838, + 0x8e750391, 0x5dee1f6a, 0x136714c3, 0x38727756, 0x76fb7cff, + 0xa5606004, 0xebe96bad, 0xd9275fb3, 0x97ae541a, 0x443548e1, + 0x0abc4348, 0x121f8fcb, 0x5c968462, 0x8f0d9899, 0xc1849330, + 0xf34aa72e, 0xbdc3ac87, 0x6e58b07c, 0x20d1bbd5, 0x0bc4d840, + 0x454dd3e9, 0x96d6cf12, 0xd85fc4bb, 0xea91f0a5, 0xa418fb0c, + 0x7783e7f7, 0x390aec5e, 0x881ec2a9, 0xc697c900, 0x150cd5fb, + 0x5b85de52, 0x694bea4c, 0x27c2e1e5, 0xf459fd1e, 0xbad0f6b7, + 0x91c59522, 0xdf4c9e8b, 0x0cd78270, 0x425e89d9, 0x7090bdc7, + 0x3e19b66e, 0xed82aa95, 0xa30ba13c, 0xbba86dbf, 0xf5216616, + 0x26ba7aed, 0x68337144, 0x5afd455a, 0x14744ef3, 0xc7ef5208, + 0x896659a1, 0xa2733a34, 0xecfa319d, 0x3f612d66, 0x71e826cf, + 0x432612d1, 0x0daf1978, 0xde340583, 0x90bd0e2a, 0xef739c85, + 0xa1fa972c, 0x72618bd7, 0x3ce8807e, 0x0e26b460, 0x40afbfc9, + 0x9334a332, 0xddbda89b, 0xf6a8cb0e, 0xb821c0a7, 0x6bbadc5c, + 0x2533d7f5, 0x17fde3eb, 0x5974e842, 0x8aeff4b9, 0xc466ff10, + 0xdcc53393, 0x924c383a, 0x41d724c1, 0x0f5e2f68, 0x3d901b76, + 0x731910df, 0xa0820c24, 0xee0b078d, 0xc51e6418, 0x8b976fb1, + 0x580c734a, 0x168578e3, 0x244b4cfd, 0x6ac24754, 0xb9595baf, + 0xf7d05006}, + {0x00000000, 0x8d88fde2, 0xc060fd85, 0x4de80067, 0x5bb0fd4b, + 0xd63800a9, 0x9bd000ce, 0x1658fd2c, 0xb761fa96, 0x3ae90774, + 0x77010713, 0xfa89faf1, 0xecd107dd, 0x6159fa3f, 0x2cb1fa58, + 0xa13907ba, 0xb5b2f36d, 0x383a0e8f, 0x75d20ee8, 0xf85af30a, + 0xee020e26, 0x638af3c4, 0x2e62f3a3, 0xa3ea0e41, 0x02d309fb, + 0x8f5bf419, 0xc2b3f47e, 0x4f3b099c, 0x5963f4b0, 0xd4eb0952, + 0x99030935, 0x148bf4d7, 0xb014e09b, 0x3d9c1d79, 0x70741d1e, + 0xfdfce0fc, 0xeba41dd0, 0x662ce032, 0x2bc4e055, 0xa64c1db7, + 0x07751a0d, 0x8afde7ef, 0xc715e788, 0x4a9d1a6a, 0x5cc5e746, + 0xd14d1aa4, 0x9ca51ac3, 0x112de721, 0x05a613f6, 0x882eee14, + 0xc5c6ee73, 0x484e1391, 0x5e16eebd, 0xd39e135f, 0x9e761338, + 0x13feeeda, 0xb2c7e960, 0x3f4f1482, 0x72a714e5, 0xff2fe907, + 0xe977142b, 0x64ffe9c9, 0x2917e9ae, 0xa49f144c, 0xbb58c777, + 0x36d03a95, 0x7b383af2, 0xf6b0c710, 0xe0e83a3c, 0x6d60c7de, + 0x2088c7b9, 0xad003a5b, 0x0c393de1, 0x81b1c003, 0xcc59c064, + 0x41d13d86, 0x5789c0aa, 0xda013d48, 0x97e93d2f, 0x1a61c0cd, + 0x0eea341a, 0x8362c9f8, 0xce8ac99f, 0x4302347d, 0x555ac951, + 0xd8d234b3, 0x953a34d4, 0x18b2c936, 0xb98bce8c, 0x3403336e, + 0x79eb3309, 0xf463ceeb, 0xe23b33c7, 0x6fb3ce25, 0x225bce42, + 0xafd333a0, 0x0b4c27ec, 0x86c4da0e, 0xcb2cda69, 0x46a4278b, + 0x50fcdaa7, 0xdd742745, 0x909c2722, 0x1d14dac0, 0xbc2ddd7a, + 0x31a52098, 0x7c4d20ff, 0xf1c5dd1d, 0xe79d2031, 0x6a15ddd3, + 0x27fdddb4, 0xaa752056, 0xbefed481, 0x33762963, 0x7e9e2904, + 0xf316d4e6, 0xe54e29ca, 0x68c6d428, 0x252ed44f, 0xa8a629ad, + 0x099f2e17, 0x8417d3f5, 0xc9ffd392, 0x44772e70, 0x522fd35c, + 0xdfa72ebe, 0x924f2ed9, 0x1fc7d33b, 0xadc088af, 0x2048754d, + 0x6da0752a, 0xe02888c8, 0xf67075e4, 0x7bf88806, 0x36108861, + 0xbb987583, 0x1aa17239, 0x97298fdb, 0xdac18fbc, 0x5749725e, + 0x41118f72, 0xcc997290, 0x817172f7, 0x0cf98f15, 0x18727bc2, + 0x95fa8620, 0xd8128647, 0x559a7ba5, 0x43c28689, 0xce4a7b6b, + 0x83a27b0c, 0x0e2a86ee, 0xaf138154, 0x229b7cb6, 0x6f737cd1, + 0xe2fb8133, 0xf4a37c1f, 0x792b81fd, 0x34c3819a, 0xb94b7c78, + 0x1dd46834, 0x905c95d6, 0xddb495b1, 0x503c6853, 0x4664957f, + 0xcbec689d, 0x860468fa, 0x0b8c9518, 0xaab592a2, 0x273d6f40, + 0x6ad56f27, 0xe75d92c5, 0xf1056fe9, 0x7c8d920b, 0x3165926c, + 0xbced6f8e, 0xa8669b59, 0x25ee66bb, 0x680666dc, 0xe58e9b3e, + 0xf3d66612, 0x7e5e9bf0, 0x33b69b97, 0xbe3e6675, 0x1f0761cf, + 0x928f9c2d, 0xdf679c4a, 0x52ef61a8, 0x44b79c84, 0xc93f6166, + 0x84d76101, 0x095f9ce3, 0x16984fd8, 0x9b10b23a, 0xd6f8b25d, + 0x5b704fbf, 0x4d28b293, 0xc0a04f71, 0x8d484f16, 0x00c0b2f4, + 0xa1f9b54e, 0x2c7148ac, 0x619948cb, 0xec11b529, 0xfa494805, + 0x77c1b5e7, 0x3a29b580, 0xb7a14862, 0xa32abcb5, 0x2ea24157, + 0x634a4130, 0xeec2bcd2, 0xf89a41fe, 0x7512bc1c, 0x38fabc7b, + 0xb5724199, 0x144b4623, 0x99c3bbc1, 0xd42bbba6, 0x59a34644, + 0x4ffbbb68, 0xc273468a, 0x8f9b46ed, 0x0213bb0f, 0xa68caf43, + 0x2b0452a1, 0x66ec52c6, 0xeb64af24, 0xfd3c5208, 0x70b4afea, + 0x3d5caf8d, 0xb0d4526f, 0x11ed55d5, 0x9c65a837, 0xd18da850, + 0x5c0555b2, 0x4a5da89e, 0xc7d5557c, 0x8a3d551b, 0x07b5a8f9, + 0x133e5c2e, 0x9eb6a1cc, 0xd35ea1ab, 0x5ed65c49, 0x488ea165, + 0xc5065c87, 0x88ee5ce0, 0x0566a102, 0xa45fa6b8, 0x29d75b5a, + 0x643f5b3d, 0xe9b7a6df, 0xffef5bf3, 0x7267a611, 0x3f8fa676, + 0xb2075b94}, + {0x00000000, 0x80f0171f, 0xda91287f, 0x5a613f60, 0x6e5356bf, + 0xeea341a0, 0xb4c27ec0, 0x343269df, 0xdca6ad7e, 0x5c56ba61, + 0x06378501, 0x86c7921e, 0xb2f5fbc1, 0x3205ecde, 0x6864d3be, + 0xe894c4a1, 0x623c5cbd, 0xe2cc4ba2, 0xb8ad74c2, 0x385d63dd, + 0x0c6f0a02, 0x8c9f1d1d, 0xd6fe227d, 0x560e3562, 0xbe9af1c3, + 0x3e6ae6dc, 0x640bd9bc, 0xe4fbcea3, 0xd0c9a77c, 0x5039b063, + 0x0a588f03, 0x8aa8981c, 0xc478b97a, 0x4488ae65, 0x1ee99105, + 0x9e19861a, 0xaa2befc5, 0x2adbf8da, 0x70bac7ba, 0xf04ad0a5, + 0x18de1404, 0x982e031b, 0xc24f3c7b, 0x42bf2b64, 0x768d42bb, + 0xf67d55a4, 0xac1c6ac4, 0x2cec7ddb, 0xa644e5c7, 0x26b4f2d8, + 0x7cd5cdb8, 0xfc25daa7, 0xc817b378, 0x48e7a467, 0x12869b07, + 0x92768c18, 0x7ae248b9, 0xfa125fa6, 0xa07360c6, 0x208377d9, + 0x14b11e06, 0x94410919, 0xce203679, 0x4ed02166, 0x538074b5, + 0xd37063aa, 0x89115cca, 0x09e14bd5, 0x3dd3220a, 0xbd233515, + 0xe7420a75, 0x67b21d6a, 0x8f26d9cb, 0x0fd6ced4, 0x55b7f1b4, + 0xd547e6ab, 0xe1758f74, 0x6185986b, 0x3be4a70b, 0xbb14b014, + 0x31bc2808, 0xb14c3f17, 0xeb2d0077, 0x6bdd1768, 0x5fef7eb7, + 0xdf1f69a8, 0x857e56c8, 0x058e41d7, 0xed1a8576, 0x6dea9269, + 0x378bad09, 0xb77bba16, 0x8349d3c9, 0x03b9c4d6, 0x59d8fbb6, + 0xd928eca9, 0x97f8cdcf, 0x1708dad0, 0x4d69e5b0, 0xcd99f2af, + 0xf9ab9b70, 0x795b8c6f, 0x233ab30f, 0xa3caa410, 0x4b5e60b1, + 0xcbae77ae, 0x91cf48ce, 0x113f5fd1, 0x250d360e, 0xa5fd2111, + 0xff9c1e71, 0x7f6c096e, 0xf5c49172, 0x7534866d, 0x2f55b90d, + 0xafa5ae12, 0x9b97c7cd, 0x1b67d0d2, 0x4106efb2, 0xc1f6f8ad, + 0x29623c0c, 0xa9922b13, 0xf3f31473, 0x7303036c, 0x47316ab3, + 0xc7c17dac, 0x9da042cc, 0x1d5055d3, 0xa700e96a, 0x27f0fe75, + 0x7d91c115, 0xfd61d60a, 0xc953bfd5, 0x49a3a8ca, 0x13c297aa, + 0x933280b5, 0x7ba64414, 0xfb56530b, 0xa1376c6b, 0x21c77b74, + 0x15f512ab, 0x950505b4, 0xcf643ad4, 0x4f942dcb, 0xc53cb5d7, + 0x45cca2c8, 0x1fad9da8, 0x9f5d8ab7, 0xab6fe368, 0x2b9ff477, + 0x71fecb17, 0xf10edc08, 0x199a18a9, 0x996a0fb6, 0xc30b30d6, + 0x43fb27c9, 0x77c94e16, 0xf7395909, 0xad586669, 0x2da87176, + 0x63785010, 0xe388470f, 0xb9e9786f, 0x39196f70, 0x0d2b06af, + 0x8ddb11b0, 0xd7ba2ed0, 0x574a39cf, 0xbfdefd6e, 0x3f2eea71, + 0x654fd511, 0xe5bfc20e, 0xd18dabd1, 0x517dbcce, 0x0b1c83ae, + 0x8bec94b1, 0x01440cad, 0x81b41bb2, 0xdbd524d2, 0x5b2533cd, + 0x6f175a12, 0xefe74d0d, 0xb586726d, 0x35766572, 0xdde2a1d3, + 0x5d12b6cc, 0x077389ac, 0x87839eb3, 0xb3b1f76c, 0x3341e073, + 0x6920df13, 0xe9d0c80c, 0xf4809ddf, 0x74708ac0, 0x2e11b5a0, + 0xaee1a2bf, 0x9ad3cb60, 0x1a23dc7f, 0x4042e31f, 0xc0b2f400, + 0x282630a1, 0xa8d627be, 0xf2b718de, 0x72470fc1, 0x4675661e, + 0xc6857101, 0x9ce44e61, 0x1c14597e, 0x96bcc162, 0x164cd67d, + 0x4c2de91d, 0xccddfe02, 0xf8ef97dd, 0x781f80c2, 0x227ebfa2, + 0xa28ea8bd, 0x4a1a6c1c, 0xcaea7b03, 0x908b4463, 0x107b537c, + 0x24493aa3, 0xa4b92dbc, 0xfed812dc, 0x7e2805c3, 0x30f824a5, + 0xb00833ba, 0xea690cda, 0x6a991bc5, 0x5eab721a, 0xde5b6505, + 0x843a5a65, 0x04ca4d7a, 0xec5e89db, 0x6cae9ec4, 0x36cfa1a4, + 0xb63fb6bb, 0x820ddf64, 0x02fdc87b, 0x589cf71b, 0xd86ce004, + 0x52c47818, 0xd2346f07, 0x88555067, 0x08a54778, 0x3c972ea7, + 0xbc6739b8, 0xe60606d8, 0x66f611c7, 0x8e62d566, 0x0e92c279, + 0x54f3fd19, 0xd403ea06, 0xe03183d9, 0x60c194c6, 0x3aa0aba6, + 0xba50bcb9}, + {0x00000000, 0x9570d495, 0xf190af6b, 0x64e07bfe, 0x38505897, + 0xad208c02, 0xc9c0f7fc, 0x5cb02369, 0x70a0b12e, 0xe5d065bb, + 0x81301e45, 0x1440cad0, 0x48f0e9b9, 0xdd803d2c, 0xb96046d2, + 0x2c109247, 0xe141625c, 0x7431b6c9, 0x10d1cd37, 0x85a119a2, + 0xd9113acb, 0x4c61ee5e, 0x288195a0, 0xbdf14135, 0x91e1d372, + 0x049107e7, 0x60717c19, 0xf501a88c, 0xa9b18be5, 0x3cc15f70, + 0x5821248e, 0xcd51f01b, 0x19f3c2f9, 0x8c83166c, 0xe8636d92, + 0x7d13b907, 0x21a39a6e, 0xb4d34efb, 0xd0333505, 0x4543e190, + 0x695373d7, 0xfc23a742, 0x98c3dcbc, 0x0db30829, 0x51032b40, + 0xc473ffd5, 0xa093842b, 0x35e350be, 0xf8b2a0a5, 0x6dc27430, + 0x09220fce, 0x9c52db5b, 0xc0e2f832, 0x55922ca7, 0x31725759, + 0xa40283cc, 0x8812118b, 0x1d62c51e, 0x7982bee0, 0xecf26a75, + 0xb042491c, 0x25329d89, 0x41d2e677, 0xd4a232e2, 0x33e785f2, + 0xa6975167, 0xc2772a99, 0x5707fe0c, 0x0bb7dd65, 0x9ec709f0, + 0xfa27720e, 0x6f57a69b, 0x434734dc, 0xd637e049, 0xb2d79bb7, + 0x27a74f22, 0x7b176c4b, 0xee67b8de, 0x8a87c320, 0x1ff717b5, + 0xd2a6e7ae, 0x47d6333b, 0x233648c5, 0xb6469c50, 0xeaf6bf39, + 0x7f866bac, 0x1b661052, 0x8e16c4c7, 0xa2065680, 0x37768215, + 0x5396f9eb, 0xc6e62d7e, 0x9a560e17, 0x0f26da82, 0x6bc6a17c, + 0xfeb675e9, 0x2a14470b, 0xbf64939e, 0xdb84e860, 0x4ef43cf5, + 0x12441f9c, 0x8734cb09, 0xe3d4b0f7, 0x76a46462, 0x5ab4f625, + 0xcfc422b0, 0xab24594e, 0x3e548ddb, 0x62e4aeb2, 0xf7947a27, + 0x937401d9, 0x0604d54c, 0xcb552557, 0x5e25f1c2, 0x3ac58a3c, + 0xafb55ea9, 0xf3057dc0, 0x6675a955, 0x0295d2ab, 0x97e5063e, + 0xbbf59479, 0x2e8540ec, 0x4a653b12, 0xdf15ef87, 0x83a5ccee, + 0x16d5187b, 0x72356385, 0xe745b710, 0x67cf0be4, 0xf2bfdf71, + 0x965fa48f, 0x032f701a, 0x5f9f5373, 0xcaef87e6, 0xae0ffc18, + 0x3b7f288d, 0x176fbaca, 0x821f6e5f, 0xe6ff15a1, 0x738fc134, + 0x2f3fe25d, 0xba4f36c8, 0xdeaf4d36, 0x4bdf99a3, 0x868e69b8, + 0x13febd2d, 0x771ec6d3, 0xe26e1246, 0xbede312f, 0x2baee5ba, + 0x4f4e9e44, 0xda3e4ad1, 0xf62ed896, 0x635e0c03, 0x07be77fd, + 0x92cea368, 0xce7e8001, 0x5b0e5494, 0x3fee2f6a, 0xaa9efbff, + 0x7e3cc91d, 0xeb4c1d88, 0x8fac6676, 0x1adcb2e3, 0x466c918a, + 0xd31c451f, 0xb7fc3ee1, 0x228cea74, 0x0e9c7833, 0x9becaca6, + 0xff0cd758, 0x6a7c03cd, 0x36cc20a4, 0xa3bcf431, 0xc75c8fcf, + 0x522c5b5a, 0x9f7dab41, 0x0a0d7fd4, 0x6eed042a, 0xfb9dd0bf, + 0xa72df3d6, 0x325d2743, 0x56bd5cbd, 0xc3cd8828, 0xefdd1a6f, + 0x7aadcefa, 0x1e4db504, 0x8b3d6191, 0xd78d42f8, 0x42fd966d, + 0x261ded93, 0xb36d3906, 0x54288e16, 0xc1585a83, 0xa5b8217d, + 0x30c8f5e8, 0x6c78d681, 0xf9080214, 0x9de879ea, 0x0898ad7f, + 0x24883f38, 0xb1f8ebad, 0xd5189053, 0x406844c6, 0x1cd867af, + 0x89a8b33a, 0xed48c8c4, 0x78381c51, 0xb569ec4a, 0x201938df, + 0x44f94321, 0xd18997b4, 0x8d39b4dd, 0x18496048, 0x7ca91bb6, + 0xe9d9cf23, 0xc5c95d64, 0x50b989f1, 0x3459f20f, 0xa129269a, + 0xfd9905f3, 0x68e9d166, 0x0c09aa98, 0x99797e0d, 0x4ddb4cef, + 0xd8ab987a, 0xbc4be384, 0x293b3711, 0x758b1478, 0xe0fbc0ed, + 0x841bbb13, 0x116b6f86, 0x3d7bfdc1, 0xa80b2954, 0xcceb52aa, + 0x599b863f, 0x052ba556, 0x905b71c3, 0xf4bb0a3d, 0x61cbdea8, + 0xac9a2eb3, 0x39eafa26, 0x5d0a81d8, 0xc87a554d, 0x94ca7624, + 0x01baa2b1, 0x655ad94f, 0xf02a0dda, 0xdc3a9f9d, 0x494a4b08, + 0x2daa30f6, 0xb8dae463, 0xe46ac70a, 0x711a139f, 0x15fa6861, + 0x808abcf4}, + {0x00000000, 0xcf9e17c8, 0x444d29d1, 0x8bd33e19, 0x889a53a2, + 0x4704446a, 0xccd77a73, 0x03496dbb, 0xca45a105, 0x05dbb6cd, + 0x8e0888d4, 0x41969f1c, 0x42dff2a7, 0x8d41e56f, 0x0692db76, + 0xc90cccbe, 0x4ffa444b, 0x80645383, 0x0bb76d9a, 0xc4297a52, + 0xc76017e9, 0x08fe0021, 0x832d3e38, 0x4cb329f0, 0x85bfe54e, + 0x4a21f286, 0xc1f2cc9f, 0x0e6cdb57, 0x0d25b6ec, 0xc2bba124, + 0x49689f3d, 0x86f688f5, 0x9ff48896, 0x506a9f5e, 0xdbb9a147, + 0x1427b68f, 0x176edb34, 0xd8f0ccfc, 0x5323f2e5, 0x9cbde52d, + 0x55b12993, 0x9a2f3e5b, 0x11fc0042, 0xde62178a, 0xdd2b7a31, + 0x12b56df9, 0x996653e0, 0x56f84428, 0xd00eccdd, 0x1f90db15, + 0x9443e50c, 0x5bddf2c4, 0x58949f7f, 0x970a88b7, 0x1cd9b6ae, + 0xd347a166, 0x1a4b6dd8, 0xd5d57a10, 0x5e064409, 0x919853c1, + 0x92d13e7a, 0x5d4f29b2, 0xd69c17ab, 0x19020063, 0xe498176d, + 0x2b0600a5, 0xa0d53ebc, 0x6f4b2974, 0x6c0244cf, 0xa39c5307, + 0x284f6d1e, 0xe7d17ad6, 0x2eddb668, 0xe143a1a0, 0x6a909fb9, + 0xa50e8871, 0xa647e5ca, 0x69d9f202, 0xe20acc1b, 0x2d94dbd3, + 0xab625326, 0x64fc44ee, 0xef2f7af7, 0x20b16d3f, 0x23f80084, + 0xec66174c, 0x67b52955, 0xa82b3e9d, 0x6127f223, 0xaeb9e5eb, + 0x256adbf2, 0xeaf4cc3a, 0xe9bda181, 0x2623b649, 0xadf08850, + 0x626e9f98, 0x7b6c9ffb, 0xb4f28833, 0x3f21b62a, 0xf0bfa1e2, + 0xf3f6cc59, 0x3c68db91, 0xb7bbe588, 0x7825f240, 0xb1293efe, + 0x7eb72936, 0xf564172f, 0x3afa00e7, 0x39b36d5c, 0xf62d7a94, + 0x7dfe448d, 0xb2605345, 0x3496dbb0, 0xfb08cc78, 0x70dbf261, + 0xbf45e5a9, 0xbc0c8812, 0x73929fda, 0xf841a1c3, 0x37dfb60b, + 0xfed37ab5, 0x314d6d7d, 0xba9e5364, 0x750044ac, 0x76492917, + 0xb9d73edf, 0x320400c6, 0xfd9a170e, 0x1241289b, 0xdddf3f53, + 0x560c014a, 0x99921682, 0x9adb7b39, 0x55456cf1, 0xde9652e8, + 0x11084520, 0xd804899e, 0x179a9e56, 0x9c49a04f, 0x53d7b787, + 0x509eda3c, 0x9f00cdf4, 0x14d3f3ed, 0xdb4de425, 0x5dbb6cd0, + 0x92257b18, 0x19f64501, 0xd66852c9, 0xd5213f72, 0x1abf28ba, + 0x916c16a3, 0x5ef2016b, 0x97fecdd5, 0x5860da1d, 0xd3b3e404, + 0x1c2df3cc, 0x1f649e77, 0xd0fa89bf, 0x5b29b7a6, 0x94b7a06e, + 0x8db5a00d, 0x422bb7c5, 0xc9f889dc, 0x06669e14, 0x052ff3af, + 0xcab1e467, 0x4162da7e, 0x8efccdb6, 0x47f00108, 0x886e16c0, + 0x03bd28d9, 0xcc233f11, 0xcf6a52aa, 0x00f44562, 0x8b277b7b, + 0x44b96cb3, 0xc24fe446, 0x0dd1f38e, 0x8602cd97, 0x499cda5f, + 0x4ad5b7e4, 0x854ba02c, 0x0e989e35, 0xc10689fd, 0x080a4543, + 0xc794528b, 0x4c476c92, 0x83d97b5a, 0x809016e1, 0x4f0e0129, + 0xc4dd3f30, 0x0b4328f8, 0xf6d93ff6, 0x3947283e, 0xb2941627, + 0x7d0a01ef, 0x7e436c54, 0xb1dd7b9c, 0x3a0e4585, 0xf590524d, + 0x3c9c9ef3, 0xf302893b, 0x78d1b722, 0xb74fa0ea, 0xb406cd51, + 0x7b98da99, 0xf04be480, 0x3fd5f348, 0xb9237bbd, 0x76bd6c75, + 0xfd6e526c, 0x32f045a4, 0x31b9281f, 0xfe273fd7, 0x75f401ce, + 0xba6a1606, 0x7366dab8, 0xbcf8cd70, 0x372bf369, 0xf8b5e4a1, + 0xfbfc891a, 0x34629ed2, 0xbfb1a0cb, 0x702fb703, 0x692db760, + 0xa6b3a0a8, 0x2d609eb1, 0xe2fe8979, 0xe1b7e4c2, 0x2e29f30a, + 0xa5facd13, 0x6a64dadb, 0xa3681665, 0x6cf601ad, 0xe7253fb4, + 0x28bb287c, 0x2bf245c7, 0xe46c520f, 0x6fbf6c16, 0xa0217bde, + 0x26d7f32b, 0xe949e4e3, 0x629adafa, 0xad04cd32, 0xae4da089, + 0x61d3b741, 0xea008958, 0x259e9e90, 0xec92522e, 0x230c45e6, + 0xa8df7bff, 0x67416c37, 0x6408018c, 0xab961644, 0x2045285d, + 0xefdb3f95}, + {0x00000000, 0x24825136, 0x4904a26c, 0x6d86f35a, 0x920944d8, + 0xb68b15ee, 0xdb0de6b4, 0xff8fb782, 0xff638ff1, 0xdbe1dec7, + 0xb6672d9d, 0x92e57cab, 0x6d6acb29, 0x49e89a1f, 0x246e6945, + 0x00ec3873, 0x25b619a3, 0x01344895, 0x6cb2bbcf, 0x4830eaf9, + 0xb7bf5d7b, 0x933d0c4d, 0xfebbff17, 0xda39ae21, 0xdad59652, + 0xfe57c764, 0x93d1343e, 0xb7536508, 0x48dcd28a, 0x6c5e83bc, + 0x01d870e6, 0x255a21d0, 0x4b6c3346, 0x6fee6270, 0x0268912a, + 0x26eac01c, 0xd965779e, 0xfde726a8, 0x9061d5f2, 0xb4e384c4, + 0xb40fbcb7, 0x908ded81, 0xfd0b1edb, 0xd9894fed, 0x2606f86f, + 0x0284a959, 0x6f025a03, 0x4b800b35, 0x6eda2ae5, 0x4a587bd3, + 0x27de8889, 0x035cd9bf, 0xfcd36e3d, 0xd8513f0b, 0xb5d7cc51, + 0x91559d67, 0x91b9a514, 0xb53bf422, 0xd8bd0778, 0xfc3f564e, + 0x03b0e1cc, 0x2732b0fa, 0x4ab443a0, 0x6e361296, 0x96d8668c, + 0xb25a37ba, 0xdfdcc4e0, 0xfb5e95d6, 0x04d12254, 0x20537362, + 0x4dd58038, 0x6957d10e, 0x69bbe97d, 0x4d39b84b, 0x20bf4b11, + 0x043d1a27, 0xfbb2ada5, 0xdf30fc93, 0xb2b60fc9, 0x96345eff, + 0xb36e7f2f, 0x97ec2e19, 0xfa6add43, 0xdee88c75, 0x21673bf7, + 0x05e56ac1, 0x6863999b, 0x4ce1c8ad, 0x4c0df0de, 0x688fa1e8, + 0x050952b2, 0x218b0384, 0xde04b406, 0xfa86e530, 0x9700166a, + 0xb382475c, 0xddb455ca, 0xf93604fc, 0x94b0f7a6, 0xb032a690, + 0x4fbd1112, 0x6b3f4024, 0x06b9b37e, 0x223be248, 0x22d7da3b, + 0x06558b0d, 0x6bd37857, 0x4f512961, 0xb0de9ee3, 0x945ccfd5, + 0xf9da3c8f, 0xdd586db9, 0xf8024c69, 0xdc801d5f, 0xb106ee05, + 0x9584bf33, 0x6a0b08b1, 0x4e895987, 0x230faadd, 0x078dfbeb, + 0x0761c398, 0x23e392ae, 0x4e6561f4, 0x6ae730c2, 0x95688740, + 0xb1ead676, 0xdc6c252c, 0xf8ee741a, 0xf6c1cb59, 0xd2439a6f, + 0xbfc56935, 0x9b473803, 0x64c88f81, 0x404adeb7, 0x2dcc2ded, + 0x094e7cdb, 0x09a244a8, 0x2d20159e, 0x40a6e6c4, 0x6424b7f2, + 0x9bab0070, 0xbf295146, 0xd2afa21c, 0xf62df32a, 0xd377d2fa, + 0xf7f583cc, 0x9a737096, 0xbef121a0, 0x417e9622, 0x65fcc714, + 0x087a344e, 0x2cf86578, 0x2c145d0b, 0x08960c3d, 0x6510ff67, + 0x4192ae51, 0xbe1d19d3, 0x9a9f48e5, 0xf719bbbf, 0xd39bea89, + 0xbdadf81f, 0x992fa929, 0xf4a95a73, 0xd02b0b45, 0x2fa4bcc7, + 0x0b26edf1, 0x66a01eab, 0x42224f9d, 0x42ce77ee, 0x664c26d8, + 0x0bcad582, 0x2f4884b4, 0xd0c73336, 0xf4456200, 0x99c3915a, + 0xbd41c06c, 0x981be1bc, 0xbc99b08a, 0xd11f43d0, 0xf59d12e6, + 0x0a12a564, 0x2e90f452, 0x43160708, 0x6794563e, 0x67786e4d, + 0x43fa3f7b, 0x2e7ccc21, 0x0afe9d17, 0xf5712a95, 0xd1f37ba3, + 0xbc7588f9, 0x98f7d9cf, 0x6019add5, 0x449bfce3, 0x291d0fb9, + 0x0d9f5e8f, 0xf210e90d, 0xd692b83b, 0xbb144b61, 0x9f961a57, + 0x9f7a2224, 0xbbf87312, 0xd67e8048, 0xf2fcd17e, 0x0d7366fc, + 0x29f137ca, 0x4477c490, 0x60f595a6, 0x45afb476, 0x612de540, + 0x0cab161a, 0x2829472c, 0xd7a6f0ae, 0xf324a198, 0x9ea252c2, + 0xba2003f4, 0xbacc3b87, 0x9e4e6ab1, 0xf3c899eb, 0xd74ac8dd, + 0x28c57f5f, 0x0c472e69, 0x61c1dd33, 0x45438c05, 0x2b759e93, + 0x0ff7cfa5, 0x62713cff, 0x46f36dc9, 0xb97cda4b, 0x9dfe8b7d, + 0xf0787827, 0xd4fa2911, 0xd4161162, 0xf0944054, 0x9d12b30e, + 0xb990e238, 0x461f55ba, 0x629d048c, 0x0f1bf7d6, 0x2b99a6e0, + 0x0ec38730, 0x2a41d606, 0x47c7255c, 0x6345746a, 0x9ccac3e8, + 0xb84892de, 0xd5ce6184, 0xf14c30b2, 0xf1a008c1, 0xd52259f7, + 0xb8a4aaad, 0x9c26fb9b, 0x63a94c19, 0x472b1d2f, 0x2aadee75, + 0x0e2fbf43}, + {0x00000000, 0x36f290f3, 0x6de521e6, 0x5b17b115, 0xdbca43cc, + 0xed38d33f, 0xb62f622a, 0x80ddf2d9, 0x6ce581d9, 0x5a17112a, + 0x0100a03f, 0x37f230cc, 0xb72fc215, 0x81dd52e6, 0xdacae3f3, + 0xec387300, 0xd9cb03b2, 0xef399341, 0xb42e2254, 0x82dcb2a7, + 0x0201407e, 0x34f3d08d, 0x6fe46198, 0x5916f16b, 0xb52e826b, + 0x83dc1298, 0xd8cba38d, 0xee39337e, 0x6ee4c1a7, 0x58165154, + 0x0301e041, 0x35f370b2, 0x68e70125, 0x5e1591d6, 0x050220c3, + 0x33f0b030, 0xb32d42e9, 0x85dfd21a, 0xdec8630f, 0xe83af3fc, + 0x040280fc, 0x32f0100f, 0x69e7a11a, 0x5f1531e9, 0xdfc8c330, + 0xe93a53c3, 0xb22de2d6, 0x84df7225, 0xb12c0297, 0x87de9264, + 0xdcc92371, 0xea3bb382, 0x6ae6415b, 0x5c14d1a8, 0x070360bd, + 0x31f1f04e, 0xddc9834e, 0xeb3b13bd, 0xb02ca2a8, 0x86de325b, + 0x0603c082, 0x30f15071, 0x6be6e164, 0x5d147197, 0xd1ce024a, + 0xe73c92b9, 0xbc2b23ac, 0x8ad9b35f, 0x0a044186, 0x3cf6d175, + 0x67e16060, 0x5113f093, 0xbd2b8393, 0x8bd91360, 0xd0cea275, + 0xe63c3286, 0x66e1c05f, 0x501350ac, 0x0b04e1b9, 0x3df6714a, + 0x080501f8, 0x3ef7910b, 0x65e0201e, 0x5312b0ed, 0xd3cf4234, + 0xe53dd2c7, 0xbe2a63d2, 0x88d8f321, 0x64e08021, 0x521210d2, + 0x0905a1c7, 0x3ff73134, 0xbf2ac3ed, 0x89d8531e, 0xd2cfe20b, + 0xe43d72f8, 0xb929036f, 0x8fdb939c, 0xd4cc2289, 0xe23eb27a, + 0x62e340a3, 0x5411d050, 0x0f066145, 0x39f4f1b6, 0xd5cc82b6, + 0xe33e1245, 0xb829a350, 0x8edb33a3, 0x0e06c17a, 0x38f45189, + 0x63e3e09c, 0x5511706f, 0x60e200dd, 0x5610902e, 0x0d07213b, + 0x3bf5b1c8, 0xbb284311, 0x8ddad3e2, 0xd6cd62f7, 0xe03ff204, + 0x0c078104, 0x3af511f7, 0x61e2a0e2, 0x57103011, 0xd7cdc2c8, + 0xe13f523b, 0xba28e32e, 0x8cda73dd, 0x78ed02d5, 0x4e1f9226, + 0x15082333, 0x23fab3c0, 0xa3274119, 0x95d5d1ea, 0xcec260ff, + 0xf830f00c, 0x1408830c, 0x22fa13ff, 0x79eda2ea, 0x4f1f3219, + 0xcfc2c0c0, 0xf9305033, 0xa227e126, 0x94d571d5, 0xa1260167, + 0x97d49194, 0xccc32081, 0xfa31b072, 0x7aec42ab, 0x4c1ed258, + 0x1709634d, 0x21fbf3be, 0xcdc380be, 0xfb31104d, 0xa026a158, + 0x96d431ab, 0x1609c372, 0x20fb5381, 0x7bece294, 0x4d1e7267, + 0x100a03f0, 0x26f89303, 0x7def2216, 0x4b1db2e5, 0xcbc0403c, + 0xfd32d0cf, 0xa62561da, 0x90d7f129, 0x7cef8229, 0x4a1d12da, + 0x110aa3cf, 0x27f8333c, 0xa725c1e5, 0x91d75116, 0xcac0e003, + 0xfc3270f0, 0xc9c10042, 0xff3390b1, 0xa42421a4, 0x92d6b157, + 0x120b438e, 0x24f9d37d, 0x7fee6268, 0x491cf29b, 0xa524819b, + 0x93d61168, 0xc8c1a07d, 0xfe33308e, 0x7eeec257, 0x481c52a4, + 0x130be3b1, 0x25f97342, 0xa923009f, 0x9fd1906c, 0xc4c62179, + 0xf234b18a, 0x72e94353, 0x441bd3a0, 0x1f0c62b5, 0x29fef246, + 0xc5c68146, 0xf33411b5, 0xa823a0a0, 0x9ed13053, 0x1e0cc28a, + 0x28fe5279, 0x73e9e36c, 0x451b739f, 0x70e8032d, 0x461a93de, + 0x1d0d22cb, 0x2bffb238, 0xab2240e1, 0x9dd0d012, 0xc6c76107, + 0xf035f1f4, 0x1c0d82f4, 0x2aff1207, 0x71e8a312, 0x471a33e1, + 0xc7c7c138, 0xf13551cb, 0xaa22e0de, 0x9cd0702d, 0xc1c401ba, + 0xf7369149, 0xac21205c, 0x9ad3b0af, 0x1a0e4276, 0x2cfcd285, + 0x77eb6390, 0x4119f363, 0xad218063, 0x9bd31090, 0xc0c4a185, + 0xf6363176, 0x76ebc3af, 0x4019535c, 0x1b0ee249, 0x2dfc72ba, + 0x180f0208, 0x2efd92fb, 0x75ea23ee, 0x4318b31d, 0xc3c541c4, + 0xf537d137, 0xae206022, 0x98d2f0d1, 0x74ea83d1, 0x42181322, + 0x190fa237, 0x2ffd32c4, 0xaf20c01d, 0x99d250ee, 0xc2c5e1fb, + 0xf4377108}}; + +local const z_word_t FAR crc_braid_big_table[][256] = { + {0x0000000000000000, 0xf390f23600000000, 0xe621e56d00000000, + 0x15b1175b00000000, 0xcc43cadb00000000, 0x3fd338ed00000000, + 0x2a622fb600000000, 0xd9f2dd8000000000, 0xd981e56c00000000, + 0x2a11175a00000000, 0x3fa0000100000000, 0xcc30f23700000000, + 0x15c22fb700000000, 0xe652dd8100000000, 0xf3e3cada00000000, + 0x007338ec00000000, 0xb203cbd900000000, 0x419339ef00000000, + 0x54222eb400000000, 0xa7b2dc8200000000, 0x7e40010200000000, + 0x8dd0f33400000000, 0x9861e46f00000000, 0x6bf1165900000000, + 0x6b822eb500000000, 0x9812dc8300000000, 0x8da3cbd800000000, + 0x7e3339ee00000000, 0xa7c1e46e00000000, 0x5451165800000000, + 0x41e0010300000000, 0xb270f33500000000, 0x2501e76800000000, + 0xd691155e00000000, 0xc320020500000000, 0x30b0f03300000000, + 0xe9422db300000000, 0x1ad2df8500000000, 0x0f63c8de00000000, + 0xfcf33ae800000000, 0xfc80020400000000, 0x0f10f03200000000, + 0x1aa1e76900000000, 0xe931155f00000000, 0x30c3c8df00000000, + 0xc3533ae900000000, 0xd6e22db200000000, 0x2572df8400000000, + 0x97022cb100000000, 0x6492de8700000000, 0x7123c9dc00000000, + 0x82b33bea00000000, 0x5b41e66a00000000, 0xa8d1145c00000000, + 0xbd60030700000000, 0x4ef0f13100000000, 0x4e83c9dd00000000, + 0xbd133beb00000000, 0xa8a22cb000000000, 0x5b32de8600000000, + 0x82c0030600000000, 0x7150f13000000000, 0x64e1e66b00000000, + 0x9771145d00000000, 0x4a02ced100000000, 0xb9923ce700000000, + 0xac232bbc00000000, 0x5fb3d98a00000000, 0x8641040a00000000, + 0x75d1f63c00000000, 0x6060e16700000000, 0x93f0135100000000, + 0x93832bbd00000000, 0x6013d98b00000000, 0x75a2ced000000000, + 0x86323ce600000000, 0x5fc0e16600000000, 0xac50135000000000, + 0xb9e1040b00000000, 0x4a71f63d00000000, 0xf801050800000000, + 0x0b91f73e00000000, 0x1e20e06500000000, 0xedb0125300000000, + 0x3442cfd300000000, 0xc7d23de500000000, 0xd2632abe00000000, + 0x21f3d88800000000, 0x2180e06400000000, 0xd210125200000000, + 0xc7a1050900000000, 0x3431f73f00000000, 0xedc32abf00000000, + 0x1e53d88900000000, 0x0be2cfd200000000, 0xf8723de400000000, + 0x6f0329b900000000, 0x9c93db8f00000000, 0x8922ccd400000000, + 0x7ab23ee200000000, 0xa340e36200000000, 0x50d0115400000000, + 0x4561060f00000000, 0xb6f1f43900000000, 0xb682ccd500000000, + 0x45123ee300000000, 0x50a329b800000000, 0xa333db8e00000000, + 0x7ac1060e00000000, 0x8951f43800000000, 0x9ce0e36300000000, + 0x6f70115500000000, 0xdd00e26000000000, 0x2e90105600000000, + 0x3b21070d00000000, 0xc8b1f53b00000000, 0x114328bb00000000, + 0xe2d3da8d00000000, 0xf762cdd600000000, 0x04f23fe000000000, + 0x0481070c00000000, 0xf711f53a00000000, 0xe2a0e26100000000, + 0x1130105700000000, 0xc8c2cdd700000000, 0x3b523fe100000000, + 0x2ee328ba00000000, 0xdd73da8c00000000, 0xd502ed7800000000, + 0x26921f4e00000000, 0x3323081500000000, 0xc0b3fa2300000000, + 0x194127a300000000, 0xead1d59500000000, 0xff60c2ce00000000, + 0x0cf030f800000000, 0x0c83081400000000, 0xff13fa2200000000, + 0xeaa2ed7900000000, 0x19321f4f00000000, 0xc0c0c2cf00000000, + 0x335030f900000000, 0x26e127a200000000, 0xd571d59400000000, + 0x670126a100000000, 0x9491d49700000000, 0x8120c3cc00000000, + 0x72b031fa00000000, 0xab42ec7a00000000, 0x58d21e4c00000000, + 0x4d63091700000000, 0xbef3fb2100000000, 0xbe80c3cd00000000, + 0x4d1031fb00000000, 0x58a126a000000000, 0xab31d49600000000, + 0x72c3091600000000, 0x8153fb2000000000, 0x94e2ec7b00000000, + 0x67721e4d00000000, 0xf0030a1000000000, 0x0393f82600000000, + 0x1622ef7d00000000, 0xe5b21d4b00000000, 0x3c40c0cb00000000, + 0xcfd032fd00000000, 0xda6125a600000000, 0x29f1d79000000000, + 0x2982ef7c00000000, 0xda121d4a00000000, 0xcfa30a1100000000, + 0x3c33f82700000000, 0xe5c125a700000000, 0x1651d79100000000, + 0x03e0c0ca00000000, 0xf07032fc00000000, 0x4200c1c900000000, + 0xb19033ff00000000, 0xa42124a400000000, 0x57b1d69200000000, + 0x8e430b1200000000, 0x7dd3f92400000000, 0x6862ee7f00000000, + 0x9bf21c4900000000, 0x9b8124a500000000, 0x6811d69300000000, + 0x7da0c1c800000000, 0x8e3033fe00000000, 0x57c2ee7e00000000, + 0xa4521c4800000000, 0xb1e30b1300000000, 0x4273f92500000000, + 0x9f0023a900000000, 0x6c90d19f00000000, 0x7921c6c400000000, + 0x8ab134f200000000, 0x5343e97200000000, 0xa0d31b4400000000, + 0xb5620c1f00000000, 0x46f2fe2900000000, 0x4681c6c500000000, + 0xb51134f300000000, 0xa0a023a800000000, 0x5330d19e00000000, + 0x8ac20c1e00000000, 0x7952fe2800000000, 0x6ce3e97300000000, + 0x9f731b4500000000, 0x2d03e87000000000, 0xde931a4600000000, + 0xcb220d1d00000000, 0x38b2ff2b00000000, 0xe14022ab00000000, + 0x12d0d09d00000000, 0x0761c7c600000000, 0xf4f135f000000000, + 0xf4820d1c00000000, 0x0712ff2a00000000, 0x12a3e87100000000, + 0xe1331a4700000000, 0x38c1c7c700000000, 0xcb5135f100000000, + 0xdee022aa00000000, 0x2d70d09c00000000, 0xba01c4c100000000, + 0x499136f700000000, 0x5c2021ac00000000, 0xafb0d39a00000000, + 0x76420e1a00000000, 0x85d2fc2c00000000, 0x9063eb7700000000, + 0x63f3194100000000, 0x638021ad00000000, 0x9010d39b00000000, + 0x85a1c4c000000000, 0x763136f600000000, 0xafc3eb7600000000, + 0x5c53194000000000, 0x49e20e1b00000000, 0xba72fc2d00000000, + 0x08020f1800000000, 0xfb92fd2e00000000, 0xee23ea7500000000, + 0x1db3184300000000, 0xc441c5c300000000, 0x37d137f500000000, + 0x226020ae00000000, 0xd1f0d29800000000, 0xd183ea7400000000, + 0x2213184200000000, 0x37a20f1900000000, 0xc432fd2f00000000, + 0x1dc020af00000000, 0xee50d29900000000, 0xfbe1c5c200000000, + 0x087137f400000000}, + {0x0000000000000000, 0x3651822400000000, 0x6ca2044900000000, + 0x5af3866d00000000, 0xd844099200000000, 0xee158bb600000000, + 0xb4e60ddb00000000, 0x82b78fff00000000, 0xf18f63ff00000000, + 0xc7dee1db00000000, 0x9d2d67b600000000, 0xab7ce59200000000, + 0x29cb6a6d00000000, 0x1f9ae84900000000, 0x45696e2400000000, + 0x7338ec0000000000, 0xa319b62500000000, 0x9548340100000000, + 0xcfbbb26c00000000, 0xf9ea304800000000, 0x7b5dbfb700000000, + 0x4d0c3d9300000000, 0x17ffbbfe00000000, 0x21ae39da00000000, + 0x5296d5da00000000, 0x64c757fe00000000, 0x3e34d19300000000, + 0x086553b700000000, 0x8ad2dc4800000000, 0xbc835e6c00000000, + 0xe670d80100000000, 0xd0215a2500000000, 0x46336c4b00000000, + 0x7062ee6f00000000, 0x2a91680200000000, 0x1cc0ea2600000000, + 0x9e7765d900000000, 0xa826e7fd00000000, 0xf2d5619000000000, + 0xc484e3b400000000, 0xb7bc0fb400000000, 0x81ed8d9000000000, + 0xdb1e0bfd00000000, 0xed4f89d900000000, 0x6ff8062600000000, + 0x59a9840200000000, 0x035a026f00000000, 0x350b804b00000000, + 0xe52ada6e00000000, 0xd37b584a00000000, 0x8988de2700000000, + 0xbfd95c0300000000, 0x3d6ed3fc00000000, 0x0b3f51d800000000, + 0x51ccd7b500000000, 0x679d559100000000, 0x14a5b99100000000, + 0x22f43bb500000000, 0x7807bdd800000000, 0x4e563ffc00000000, + 0xcce1b00300000000, 0xfab0322700000000, 0xa043b44a00000000, + 0x9612366e00000000, 0x8c66d89600000000, 0xba375ab200000000, + 0xe0c4dcdf00000000, 0xd6955efb00000000, 0x5422d10400000000, + 0x6273532000000000, 0x3880d54d00000000, 0x0ed1576900000000, + 0x7de9bb6900000000, 0x4bb8394d00000000, 0x114bbf2000000000, + 0x271a3d0400000000, 0xa5adb2fb00000000, 0x93fc30df00000000, + 0xc90fb6b200000000, 0xff5e349600000000, 0x2f7f6eb300000000, + 0x192eec9700000000, 0x43dd6afa00000000, 0x758ce8de00000000, + 0xf73b672100000000, 0xc16ae50500000000, 0x9b99636800000000, + 0xadc8e14c00000000, 0xdef00d4c00000000, 0xe8a18f6800000000, + 0xb252090500000000, 0x84038b2100000000, 0x06b404de00000000, + 0x30e586fa00000000, 0x6a16009700000000, 0x5c4782b300000000, + 0xca55b4dd00000000, 0xfc0436f900000000, 0xa6f7b09400000000, + 0x90a632b000000000, 0x1211bd4f00000000, 0x24403f6b00000000, + 0x7eb3b90600000000, 0x48e23b2200000000, 0x3bdad72200000000, + 0x0d8b550600000000, 0x5778d36b00000000, 0x6129514f00000000, + 0xe39edeb000000000, 0xd5cf5c9400000000, 0x8f3cdaf900000000, + 0xb96d58dd00000000, 0x694c02f800000000, 0x5f1d80dc00000000, + 0x05ee06b100000000, 0x33bf849500000000, 0xb1080b6a00000000, + 0x8759894e00000000, 0xddaa0f2300000000, 0xebfb8d0700000000, + 0x98c3610700000000, 0xae92e32300000000, 0xf461654e00000000, + 0xc230e76a00000000, 0x4087689500000000, 0x76d6eab100000000, + 0x2c256cdc00000000, 0x1a74eef800000000, 0x59cbc1f600000000, + 0x6f9a43d200000000, 0x3569c5bf00000000, 0x0338479b00000000, + 0x818fc86400000000, 0xb7de4a4000000000, 0xed2dcc2d00000000, + 0xdb7c4e0900000000, 0xa844a20900000000, 0x9e15202d00000000, + 0xc4e6a64000000000, 0xf2b7246400000000, 0x7000ab9b00000000, + 0x465129bf00000000, 0x1ca2afd200000000, 0x2af32df600000000, + 0xfad277d300000000, 0xcc83f5f700000000, 0x9670739a00000000, + 0xa021f1be00000000, 0x22967e4100000000, 0x14c7fc6500000000, + 0x4e347a0800000000, 0x7865f82c00000000, 0x0b5d142c00000000, + 0x3d0c960800000000, 0x67ff106500000000, 0x51ae924100000000, + 0xd3191dbe00000000, 0xe5489f9a00000000, 0xbfbb19f700000000, + 0x89ea9bd300000000, 0x1ff8adbd00000000, 0x29a92f9900000000, + 0x735aa9f400000000, 0x450b2bd000000000, 0xc7bca42f00000000, + 0xf1ed260b00000000, 0xab1ea06600000000, 0x9d4f224200000000, + 0xee77ce4200000000, 0xd8264c6600000000, 0x82d5ca0b00000000, + 0xb484482f00000000, 0x3633c7d000000000, 0x006245f400000000, + 0x5a91c39900000000, 0x6cc041bd00000000, 0xbce11b9800000000, + 0x8ab099bc00000000, 0xd0431fd100000000, 0xe6129df500000000, + 0x64a5120a00000000, 0x52f4902e00000000, 0x0807164300000000, + 0x3e56946700000000, 0x4d6e786700000000, 0x7b3ffa4300000000, + 0x21cc7c2e00000000, 0x179dfe0a00000000, 0x952a71f500000000, + 0xa37bf3d100000000, 0xf98875bc00000000, 0xcfd9f79800000000, + 0xd5ad196000000000, 0xe3fc9b4400000000, 0xb90f1d2900000000, + 0x8f5e9f0d00000000, 0x0de910f200000000, 0x3bb892d600000000, + 0x614b14bb00000000, 0x571a969f00000000, 0x24227a9f00000000, + 0x1273f8bb00000000, 0x48807ed600000000, 0x7ed1fcf200000000, + 0xfc66730d00000000, 0xca37f12900000000, 0x90c4774400000000, + 0xa695f56000000000, 0x76b4af4500000000, 0x40e52d6100000000, + 0x1a16ab0c00000000, 0x2c47292800000000, 0xaef0a6d700000000, + 0x98a124f300000000, 0xc252a29e00000000, 0xf40320ba00000000, + 0x873bccba00000000, 0xb16a4e9e00000000, 0xeb99c8f300000000, + 0xddc84ad700000000, 0x5f7fc52800000000, 0x692e470c00000000, + 0x33ddc16100000000, 0x058c434500000000, 0x939e752b00000000, + 0xa5cff70f00000000, 0xff3c716200000000, 0xc96df34600000000, + 0x4bda7cb900000000, 0x7d8bfe9d00000000, 0x277878f000000000, + 0x1129fad400000000, 0x621116d400000000, 0x544094f000000000, + 0x0eb3129d00000000, 0x38e290b900000000, 0xba551f4600000000, + 0x8c049d6200000000, 0xd6f71b0f00000000, 0xe0a6992b00000000, + 0x3087c30e00000000, 0x06d6412a00000000, 0x5c25c74700000000, + 0x6a74456300000000, 0xe8c3ca9c00000000, 0xde9248b800000000, + 0x8461ced500000000, 0xb2304cf100000000, 0xc108a0f100000000, + 0xf75922d500000000, 0xadaaa4b800000000, 0x9bfb269c00000000, + 0x194ca96300000000, 0x2f1d2b4700000000, 0x75eead2a00000000, + 0x43bf2f0e00000000}, + {0x0000000000000000, 0xc8179ecf00000000, 0xd1294d4400000000, + 0x193ed38b00000000, 0xa2539a8800000000, 0x6a44044700000000, + 0x737ad7cc00000000, 0xbb6d490300000000, 0x05a145ca00000000, + 0xcdb6db0500000000, 0xd488088e00000000, 0x1c9f964100000000, + 0xa7f2df4200000000, 0x6fe5418d00000000, 0x76db920600000000, + 0xbecc0cc900000000, 0x4b44fa4f00000000, 0x8353648000000000, + 0x9a6db70b00000000, 0x527a29c400000000, 0xe91760c700000000, + 0x2100fe0800000000, 0x383e2d8300000000, 0xf029b34c00000000, + 0x4ee5bf8500000000, 0x86f2214a00000000, 0x9fccf2c100000000, + 0x57db6c0e00000000, 0xecb6250d00000000, 0x24a1bbc200000000, + 0x3d9f684900000000, 0xf588f68600000000, 0x9688f49f00000000, + 0x5e9f6a5000000000, 0x47a1b9db00000000, 0x8fb6271400000000, + 0x34db6e1700000000, 0xfcccf0d800000000, 0xe5f2235300000000, + 0x2de5bd9c00000000, 0x9329b15500000000, 0x5b3e2f9a00000000, + 0x4200fc1100000000, 0x8a1762de00000000, 0x317a2bdd00000000, + 0xf96db51200000000, 0xe053669900000000, 0x2844f85600000000, + 0xddcc0ed000000000, 0x15db901f00000000, 0x0ce5439400000000, + 0xc4f2dd5b00000000, 0x7f9f945800000000, 0xb7880a9700000000, + 0xaeb6d91c00000000, 0x66a147d300000000, 0xd86d4b1a00000000, + 0x107ad5d500000000, 0x0944065e00000000, 0xc153989100000000, + 0x7a3ed19200000000, 0xb2294f5d00000000, 0xab179cd600000000, + 0x6300021900000000, 0x6d1798e400000000, 0xa500062b00000000, + 0xbc3ed5a000000000, 0x74294b6f00000000, 0xcf44026c00000000, + 0x07539ca300000000, 0x1e6d4f2800000000, 0xd67ad1e700000000, + 0x68b6dd2e00000000, 0xa0a143e100000000, 0xb99f906a00000000, + 0x71880ea500000000, 0xcae547a600000000, 0x02f2d96900000000, + 0x1bcc0ae200000000, 0xd3db942d00000000, 0x265362ab00000000, + 0xee44fc6400000000, 0xf77a2fef00000000, 0x3f6db12000000000, + 0x8400f82300000000, 0x4c1766ec00000000, 0x5529b56700000000, + 0x9d3e2ba800000000, 0x23f2276100000000, 0xebe5b9ae00000000, + 0xf2db6a2500000000, 0x3accf4ea00000000, 0x81a1bde900000000, + 0x49b6232600000000, 0x5088f0ad00000000, 0x989f6e6200000000, + 0xfb9f6c7b00000000, 0x3388f2b400000000, 0x2ab6213f00000000, + 0xe2a1bff000000000, 0x59ccf6f300000000, 0x91db683c00000000, + 0x88e5bbb700000000, 0x40f2257800000000, 0xfe3e29b100000000, + 0x3629b77e00000000, 0x2f1764f500000000, 0xe700fa3a00000000, + 0x5c6db33900000000, 0x947a2df600000000, 0x8d44fe7d00000000, + 0x455360b200000000, 0xb0db963400000000, 0x78cc08fb00000000, + 0x61f2db7000000000, 0xa9e545bf00000000, 0x12880cbc00000000, + 0xda9f927300000000, 0xc3a141f800000000, 0x0bb6df3700000000, + 0xb57ad3fe00000000, 0x7d6d4d3100000000, 0x64539eba00000000, + 0xac44007500000000, 0x1729497600000000, 0xdf3ed7b900000000, + 0xc600043200000000, 0x0e179afd00000000, 0x9b28411200000000, + 0x533fdfdd00000000, 0x4a010c5600000000, 0x8216929900000000, + 0x397bdb9a00000000, 0xf16c455500000000, 0xe85296de00000000, + 0x2045081100000000, 0x9e8904d800000000, 0x569e9a1700000000, + 0x4fa0499c00000000, 0x87b7d75300000000, 0x3cda9e5000000000, + 0xf4cd009f00000000, 0xedf3d31400000000, 0x25e44ddb00000000, + 0xd06cbb5d00000000, 0x187b259200000000, 0x0145f61900000000, + 0xc95268d600000000, 0x723f21d500000000, 0xba28bf1a00000000, + 0xa3166c9100000000, 0x6b01f25e00000000, 0xd5cdfe9700000000, + 0x1dda605800000000, 0x04e4b3d300000000, 0xccf32d1c00000000, + 0x779e641f00000000, 0xbf89fad000000000, 0xa6b7295b00000000, + 0x6ea0b79400000000, 0x0da0b58d00000000, 0xc5b72b4200000000, + 0xdc89f8c900000000, 0x149e660600000000, 0xaff32f0500000000, + 0x67e4b1ca00000000, 0x7eda624100000000, 0xb6cdfc8e00000000, + 0x0801f04700000000, 0xc0166e8800000000, 0xd928bd0300000000, + 0x113f23cc00000000, 0xaa526acf00000000, 0x6245f40000000000, + 0x7b7b278b00000000, 0xb36cb94400000000, 0x46e44fc200000000, + 0x8ef3d10d00000000, 0x97cd028600000000, 0x5fda9c4900000000, + 0xe4b7d54a00000000, 0x2ca04b8500000000, 0x359e980e00000000, + 0xfd8906c100000000, 0x43450a0800000000, 0x8b5294c700000000, + 0x926c474c00000000, 0x5a7bd98300000000, 0xe116908000000000, + 0x29010e4f00000000, 0x303fddc400000000, 0xf828430b00000000, + 0xf63fd9f600000000, 0x3e28473900000000, 0x271694b200000000, + 0xef010a7d00000000, 0x546c437e00000000, 0x9c7bddb100000000, + 0x85450e3a00000000, 0x4d5290f500000000, 0xf39e9c3c00000000, + 0x3b8902f300000000, 0x22b7d17800000000, 0xeaa04fb700000000, + 0x51cd06b400000000, 0x99da987b00000000, 0x80e44bf000000000, + 0x48f3d53f00000000, 0xbd7b23b900000000, 0x756cbd7600000000, + 0x6c526efd00000000, 0xa445f03200000000, 0x1f28b93100000000, + 0xd73f27fe00000000, 0xce01f47500000000, 0x06166aba00000000, + 0xb8da667300000000, 0x70cdf8bc00000000, 0x69f32b3700000000, + 0xa1e4b5f800000000, 0x1a89fcfb00000000, 0xd29e623400000000, + 0xcba0b1bf00000000, 0x03b72f7000000000, 0x60b72d6900000000, + 0xa8a0b3a600000000, 0xb19e602d00000000, 0x7989fee200000000, + 0xc2e4b7e100000000, 0x0af3292e00000000, 0x13cdfaa500000000, + 0xdbda646a00000000, 0x651668a300000000, 0xad01f66c00000000, + 0xb43f25e700000000, 0x7c28bb2800000000, 0xc745f22b00000000, + 0x0f526ce400000000, 0x166cbf6f00000000, 0xde7b21a000000000, + 0x2bf3d72600000000, 0xe3e449e900000000, 0xfada9a6200000000, + 0x32cd04ad00000000, 0x89a04dae00000000, 0x41b7d36100000000, + 0x588900ea00000000, 0x909e9e2500000000, 0x2e5292ec00000000, + 0xe6450c2300000000, 0xff7bdfa800000000, 0x376c416700000000, + 0x8c01086400000000, 0x441696ab00000000, 0x5d28452000000000, + 0x953fdbef00000000}, + {0x0000000000000000, 0x95d4709500000000, 0x6baf90f100000000, + 0xfe7be06400000000, 0x9758503800000000, 0x028c20ad00000000, + 0xfcf7c0c900000000, 0x6923b05c00000000, 0x2eb1a07000000000, + 0xbb65d0e500000000, 0x451e308100000000, 0xd0ca401400000000, + 0xb9e9f04800000000, 0x2c3d80dd00000000, 0xd24660b900000000, + 0x4792102c00000000, 0x5c6241e100000000, 0xc9b6317400000000, + 0x37cdd11000000000, 0xa219a18500000000, 0xcb3a11d900000000, + 0x5eee614c00000000, 0xa095812800000000, 0x3541f1bd00000000, + 0x72d3e19100000000, 0xe707910400000000, 0x197c716000000000, + 0x8ca801f500000000, 0xe58bb1a900000000, 0x705fc13c00000000, + 0x8e24215800000000, 0x1bf051cd00000000, 0xf9c2f31900000000, + 0x6c16838c00000000, 0x926d63e800000000, 0x07b9137d00000000, + 0x6e9aa32100000000, 0xfb4ed3b400000000, 0x053533d000000000, + 0x90e1434500000000, 0xd773536900000000, 0x42a723fc00000000, + 0xbcdcc39800000000, 0x2908b30d00000000, 0x402b035100000000, + 0xd5ff73c400000000, 0x2b8493a000000000, 0xbe50e33500000000, + 0xa5a0b2f800000000, 0x3074c26d00000000, 0xce0f220900000000, + 0x5bdb529c00000000, 0x32f8e2c000000000, 0xa72c925500000000, + 0x5957723100000000, 0xcc8302a400000000, 0x8b11128800000000, + 0x1ec5621d00000000, 0xe0be827900000000, 0x756af2ec00000000, + 0x1c4942b000000000, 0x899d322500000000, 0x77e6d24100000000, + 0xe232a2d400000000, 0xf285e73300000000, 0x675197a600000000, + 0x992a77c200000000, 0x0cfe075700000000, 0x65ddb70b00000000, + 0xf009c79e00000000, 0x0e7227fa00000000, 0x9ba6576f00000000, + 0xdc34474300000000, 0x49e037d600000000, 0xb79bd7b200000000, + 0x224fa72700000000, 0x4b6c177b00000000, 0xdeb867ee00000000, + 0x20c3878a00000000, 0xb517f71f00000000, 0xaee7a6d200000000, + 0x3b33d64700000000, 0xc548362300000000, 0x509c46b600000000, + 0x39bff6ea00000000, 0xac6b867f00000000, 0x5210661b00000000, + 0xc7c4168e00000000, 0x805606a200000000, 0x1582763700000000, + 0xebf9965300000000, 0x7e2de6c600000000, 0x170e569a00000000, + 0x82da260f00000000, 0x7ca1c66b00000000, 0xe975b6fe00000000, + 0x0b47142a00000000, 0x9e9364bf00000000, 0x60e884db00000000, + 0xf53cf44e00000000, 0x9c1f441200000000, 0x09cb348700000000, + 0xf7b0d4e300000000, 0x6264a47600000000, 0x25f6b45a00000000, + 0xb022c4cf00000000, 0x4e5924ab00000000, 0xdb8d543e00000000, + 0xb2aee46200000000, 0x277a94f700000000, 0xd901749300000000, + 0x4cd5040600000000, 0x572555cb00000000, 0xc2f1255e00000000, + 0x3c8ac53a00000000, 0xa95eb5af00000000, 0xc07d05f300000000, + 0x55a9756600000000, 0xabd2950200000000, 0x3e06e59700000000, + 0x7994f5bb00000000, 0xec40852e00000000, 0x123b654a00000000, + 0x87ef15df00000000, 0xeecca58300000000, 0x7b18d51600000000, + 0x8563357200000000, 0x10b745e700000000, 0xe40bcf6700000000, + 0x71dfbff200000000, 0x8fa45f9600000000, 0x1a702f0300000000, + 0x73539f5f00000000, 0xe687efca00000000, 0x18fc0fae00000000, + 0x8d287f3b00000000, 0xcaba6f1700000000, 0x5f6e1f8200000000, + 0xa115ffe600000000, 0x34c18f7300000000, 0x5de23f2f00000000, + 0xc8364fba00000000, 0x364dafde00000000, 0xa399df4b00000000, + 0xb8698e8600000000, 0x2dbdfe1300000000, 0xd3c61e7700000000, + 0x46126ee200000000, 0x2f31debe00000000, 0xbae5ae2b00000000, + 0x449e4e4f00000000, 0xd14a3eda00000000, 0x96d82ef600000000, + 0x030c5e6300000000, 0xfd77be0700000000, 0x68a3ce9200000000, + 0x01807ece00000000, 0x94540e5b00000000, 0x6a2fee3f00000000, + 0xfffb9eaa00000000, 0x1dc93c7e00000000, 0x881d4ceb00000000, + 0x7666ac8f00000000, 0xe3b2dc1a00000000, 0x8a916c4600000000, + 0x1f451cd300000000, 0xe13efcb700000000, 0x74ea8c2200000000, + 0x33789c0e00000000, 0xa6acec9b00000000, 0x58d70cff00000000, + 0xcd037c6a00000000, 0xa420cc3600000000, 0x31f4bca300000000, + 0xcf8f5cc700000000, 0x5a5b2c5200000000, 0x41ab7d9f00000000, + 0xd47f0d0a00000000, 0x2a04ed6e00000000, 0xbfd09dfb00000000, + 0xd6f32da700000000, 0x43275d3200000000, 0xbd5cbd5600000000, + 0x2888cdc300000000, 0x6f1addef00000000, 0xfacead7a00000000, + 0x04b54d1e00000000, 0x91613d8b00000000, 0xf8428dd700000000, + 0x6d96fd4200000000, 0x93ed1d2600000000, 0x06396db300000000, + 0x168e285400000000, 0x835a58c100000000, 0x7d21b8a500000000, + 0xe8f5c83000000000, 0x81d6786c00000000, 0x140208f900000000, + 0xea79e89d00000000, 0x7fad980800000000, 0x383f882400000000, + 0xadebf8b100000000, 0x539018d500000000, 0xc644684000000000, + 0xaf67d81c00000000, 0x3ab3a88900000000, 0xc4c848ed00000000, + 0x511c387800000000, 0x4aec69b500000000, 0xdf38192000000000, + 0x2143f94400000000, 0xb49789d100000000, 0xddb4398d00000000, + 0x4860491800000000, 0xb61ba97c00000000, 0x23cfd9e900000000, + 0x645dc9c500000000, 0xf189b95000000000, 0x0ff2593400000000, + 0x9a2629a100000000, 0xf30599fd00000000, 0x66d1e96800000000, + 0x98aa090c00000000, 0x0d7e799900000000, 0xef4cdb4d00000000, + 0x7a98abd800000000, 0x84e34bbc00000000, 0x11373b2900000000, + 0x78148b7500000000, 0xedc0fbe000000000, 0x13bb1b8400000000, + 0x866f6b1100000000, 0xc1fd7b3d00000000, 0x54290ba800000000, + 0xaa52ebcc00000000, 0x3f869b5900000000, 0x56a52b0500000000, + 0xc3715b9000000000, 0x3d0abbf400000000, 0xa8decb6100000000, + 0xb32e9aac00000000, 0x26faea3900000000, 0xd8810a5d00000000, + 0x4d557ac800000000, 0x2476ca9400000000, 0xb1a2ba0100000000, + 0x4fd95a6500000000, 0xda0d2af000000000, 0x9d9f3adc00000000, + 0x084b4a4900000000, 0xf630aa2d00000000, 0x63e4dab800000000, + 0x0ac76ae400000000, 0x9f131a7100000000, 0x6168fa1500000000, + 0xf4bc8a8000000000}, + {0x0000000000000000, 0x1f17f08000000000, 0x7f2891da00000000, + 0x603f615a00000000, 0xbf56536e00000000, 0xa041a3ee00000000, + 0xc07ec2b400000000, 0xdf69323400000000, 0x7eada6dc00000000, + 0x61ba565c00000000, 0x0185370600000000, 0x1e92c78600000000, + 0xc1fbf5b200000000, 0xdeec053200000000, 0xbed3646800000000, + 0xa1c494e800000000, 0xbd5c3c6200000000, 0xa24bcce200000000, + 0xc274adb800000000, 0xdd635d3800000000, 0x020a6f0c00000000, + 0x1d1d9f8c00000000, 0x7d22fed600000000, 0x62350e5600000000, + 0xc3f19abe00000000, 0xdce66a3e00000000, 0xbcd90b6400000000, + 0xa3cefbe400000000, 0x7ca7c9d000000000, 0x63b0395000000000, + 0x038f580a00000000, 0x1c98a88a00000000, 0x7ab978c400000000, + 0x65ae884400000000, 0x0591e91e00000000, 0x1a86199e00000000, + 0xc5ef2baa00000000, 0xdaf8db2a00000000, 0xbac7ba7000000000, + 0xa5d04af000000000, 0x0414de1800000000, 0x1b032e9800000000, + 0x7b3c4fc200000000, 0x642bbf4200000000, 0xbb428d7600000000, + 0xa4557df600000000, 0xc46a1cac00000000, 0xdb7dec2c00000000, + 0xc7e544a600000000, 0xd8f2b42600000000, 0xb8cdd57c00000000, + 0xa7da25fc00000000, 0x78b317c800000000, 0x67a4e74800000000, + 0x079b861200000000, 0x188c769200000000, 0xb948e27a00000000, + 0xa65f12fa00000000, 0xc66073a000000000, 0xd977832000000000, + 0x061eb11400000000, 0x1909419400000000, 0x793620ce00000000, + 0x6621d04e00000000, 0xb574805300000000, 0xaa6370d300000000, + 0xca5c118900000000, 0xd54be10900000000, 0x0a22d33d00000000, + 0x153523bd00000000, 0x750a42e700000000, 0x6a1db26700000000, + 0xcbd9268f00000000, 0xd4ced60f00000000, 0xb4f1b75500000000, + 0xabe647d500000000, 0x748f75e100000000, 0x6b98856100000000, + 0x0ba7e43b00000000, 0x14b014bb00000000, 0x0828bc3100000000, + 0x173f4cb100000000, 0x77002deb00000000, 0x6817dd6b00000000, + 0xb77eef5f00000000, 0xa8691fdf00000000, 0xc8567e8500000000, + 0xd7418e0500000000, 0x76851aed00000000, 0x6992ea6d00000000, + 0x09ad8b3700000000, 0x16ba7bb700000000, 0xc9d3498300000000, + 0xd6c4b90300000000, 0xb6fbd85900000000, 0xa9ec28d900000000, + 0xcfcdf89700000000, 0xd0da081700000000, 0xb0e5694d00000000, + 0xaff299cd00000000, 0x709babf900000000, 0x6f8c5b7900000000, + 0x0fb33a2300000000, 0x10a4caa300000000, 0xb1605e4b00000000, + 0xae77aecb00000000, 0xce48cf9100000000, 0xd15f3f1100000000, + 0x0e360d2500000000, 0x1121fda500000000, 0x711e9cff00000000, + 0x6e096c7f00000000, 0x7291c4f500000000, 0x6d86347500000000, + 0x0db9552f00000000, 0x12aea5af00000000, 0xcdc7979b00000000, + 0xd2d0671b00000000, 0xb2ef064100000000, 0xadf8f6c100000000, + 0x0c3c622900000000, 0x132b92a900000000, 0x7314f3f300000000, + 0x6c03037300000000, 0xb36a314700000000, 0xac7dc1c700000000, + 0xcc42a09d00000000, 0xd355501d00000000, 0x6ae900a700000000, + 0x75fef02700000000, 0x15c1917d00000000, 0x0ad661fd00000000, + 0xd5bf53c900000000, 0xcaa8a34900000000, 0xaa97c21300000000, + 0xb580329300000000, 0x1444a67b00000000, 0x0b5356fb00000000, + 0x6b6c37a100000000, 0x747bc72100000000, 0xab12f51500000000, + 0xb405059500000000, 0xd43a64cf00000000, 0xcb2d944f00000000, + 0xd7b53cc500000000, 0xc8a2cc4500000000, 0xa89dad1f00000000, + 0xb78a5d9f00000000, 0x68e36fab00000000, 0x77f49f2b00000000, + 0x17cbfe7100000000, 0x08dc0ef100000000, 0xa9189a1900000000, + 0xb60f6a9900000000, 0xd6300bc300000000, 0xc927fb4300000000, + 0x164ec97700000000, 0x095939f700000000, 0x696658ad00000000, + 0x7671a82d00000000, 0x1050786300000000, 0x0f4788e300000000, + 0x6f78e9b900000000, 0x706f193900000000, 0xaf062b0d00000000, + 0xb011db8d00000000, 0xd02ebad700000000, 0xcf394a5700000000, + 0x6efddebf00000000, 0x71ea2e3f00000000, 0x11d54f6500000000, + 0x0ec2bfe500000000, 0xd1ab8dd100000000, 0xcebc7d5100000000, + 0xae831c0b00000000, 0xb194ec8b00000000, 0xad0c440100000000, + 0xb21bb48100000000, 0xd224d5db00000000, 0xcd33255b00000000, + 0x125a176f00000000, 0x0d4de7ef00000000, 0x6d7286b500000000, + 0x7265763500000000, 0xd3a1e2dd00000000, 0xccb6125d00000000, + 0xac89730700000000, 0xb39e838700000000, 0x6cf7b1b300000000, + 0x73e0413300000000, 0x13df206900000000, 0x0cc8d0e900000000, + 0xdf9d80f400000000, 0xc08a707400000000, 0xa0b5112e00000000, + 0xbfa2e1ae00000000, 0x60cbd39a00000000, 0x7fdc231a00000000, + 0x1fe3424000000000, 0x00f4b2c000000000, 0xa130262800000000, + 0xbe27d6a800000000, 0xde18b7f200000000, 0xc10f477200000000, + 0x1e66754600000000, 0x017185c600000000, 0x614ee49c00000000, + 0x7e59141c00000000, 0x62c1bc9600000000, 0x7dd64c1600000000, + 0x1de92d4c00000000, 0x02feddcc00000000, 0xdd97eff800000000, + 0xc2801f7800000000, 0xa2bf7e2200000000, 0xbda88ea200000000, + 0x1c6c1a4a00000000, 0x037beaca00000000, 0x63448b9000000000, + 0x7c537b1000000000, 0xa33a492400000000, 0xbc2db9a400000000, + 0xdc12d8fe00000000, 0xc305287e00000000, 0xa524f83000000000, + 0xba3308b000000000, 0xda0c69ea00000000, 0xc51b996a00000000, + 0x1a72ab5e00000000, 0x05655bde00000000, 0x655a3a8400000000, + 0x7a4dca0400000000, 0xdb895eec00000000, 0xc49eae6c00000000, + 0xa4a1cf3600000000, 0xbbb63fb600000000, 0x64df0d8200000000, + 0x7bc8fd0200000000, 0x1bf79c5800000000, 0x04e06cd800000000, + 0x1878c45200000000, 0x076f34d200000000, 0x6750558800000000, + 0x7847a50800000000, 0xa72e973c00000000, 0xb83967bc00000000, + 0xd80606e600000000, 0xc711f66600000000, 0x66d5628e00000000, + 0x79c2920e00000000, 0x19fdf35400000000, 0x06ea03d400000000, + 0xd98331e000000000, 0xc694c16000000000, 0xa6aba03a00000000, + 0xb9bc50ba00000000}, + {0x0000000000000000, 0xe2fd888d00000000, 0x85fd60c000000000, + 0x6700e84d00000000, 0x4bfdb05b00000000, 0xa90038d600000000, + 0xce00d09b00000000, 0x2cfd581600000000, 0x96fa61b700000000, + 0x7407e93a00000000, 0x1307017700000000, 0xf1fa89fa00000000, + 0xdd07d1ec00000000, 0x3ffa596100000000, 0x58fab12c00000000, + 0xba0739a100000000, 0x6df3b2b500000000, 0x8f0e3a3800000000, + 0xe80ed27500000000, 0x0af35af800000000, 0x260e02ee00000000, + 0xc4f38a6300000000, 0xa3f3622e00000000, 0x410eeaa300000000, + 0xfb09d30200000000, 0x19f45b8f00000000, 0x7ef4b3c200000000, + 0x9c093b4f00000000, 0xb0f4635900000000, 0x5209ebd400000000, + 0x3509039900000000, 0xd7f48b1400000000, 0x9be014b000000000, + 0x791d9c3d00000000, 0x1e1d747000000000, 0xfce0fcfd00000000, + 0xd01da4eb00000000, 0x32e02c6600000000, 0x55e0c42b00000000, + 0xb71d4ca600000000, 0x0d1a750700000000, 0xefe7fd8a00000000, + 0x88e715c700000000, 0x6a1a9d4a00000000, 0x46e7c55c00000000, + 0xa41a4dd100000000, 0xc31aa59c00000000, 0x21e72d1100000000, + 0xf613a60500000000, 0x14ee2e8800000000, 0x73eec6c500000000, + 0x91134e4800000000, 0xbdee165e00000000, 0x5f139ed300000000, + 0x3813769e00000000, 0xdaeefe1300000000, 0x60e9c7b200000000, + 0x82144f3f00000000, 0xe514a77200000000, 0x07e92fff00000000, + 0x2b1477e900000000, 0xc9e9ff6400000000, 0xaee9172900000000, + 0x4c149fa400000000, 0x77c758bb00000000, 0x953ad03600000000, + 0xf23a387b00000000, 0x10c7b0f600000000, 0x3c3ae8e000000000, + 0xdec7606d00000000, 0xb9c7882000000000, 0x5b3a00ad00000000, + 0xe13d390c00000000, 0x03c0b18100000000, 0x64c059cc00000000, + 0x863dd14100000000, 0xaac0895700000000, 0x483d01da00000000, + 0x2f3de99700000000, 0xcdc0611a00000000, 0x1a34ea0e00000000, + 0xf8c9628300000000, 0x9fc98ace00000000, 0x7d34024300000000, + 0x51c95a5500000000, 0xb334d2d800000000, 0xd4343a9500000000, + 0x36c9b21800000000, 0x8cce8bb900000000, 0x6e33033400000000, + 0x0933eb7900000000, 0xebce63f400000000, 0xc7333be200000000, + 0x25ceb36f00000000, 0x42ce5b2200000000, 0xa033d3af00000000, + 0xec274c0b00000000, 0x0edac48600000000, 0x69da2ccb00000000, + 0x8b27a44600000000, 0xa7dafc5000000000, 0x452774dd00000000, + 0x22279c9000000000, 0xc0da141d00000000, 0x7add2dbc00000000, + 0x9820a53100000000, 0xff204d7c00000000, 0x1dddc5f100000000, + 0x31209de700000000, 0xd3dd156a00000000, 0xb4ddfd2700000000, + 0x562075aa00000000, 0x81d4febe00000000, 0x6329763300000000, + 0x04299e7e00000000, 0xe6d416f300000000, 0xca294ee500000000, + 0x28d4c66800000000, 0x4fd42e2500000000, 0xad29a6a800000000, + 0x172e9f0900000000, 0xf5d3178400000000, 0x92d3ffc900000000, + 0x702e774400000000, 0x5cd32f5200000000, 0xbe2ea7df00000000, + 0xd92e4f9200000000, 0x3bd3c71f00000000, 0xaf88c0ad00000000, + 0x4d75482000000000, 0x2a75a06d00000000, 0xc88828e000000000, + 0xe47570f600000000, 0x0688f87b00000000, 0x6188103600000000, + 0x837598bb00000000, 0x3972a11a00000000, 0xdb8f299700000000, + 0xbc8fc1da00000000, 0x5e72495700000000, 0x728f114100000000, + 0x907299cc00000000, 0xf772718100000000, 0x158ff90c00000000, + 0xc27b721800000000, 0x2086fa9500000000, 0x478612d800000000, + 0xa57b9a5500000000, 0x8986c24300000000, 0x6b7b4ace00000000, + 0x0c7ba28300000000, 0xee862a0e00000000, 0x548113af00000000, + 0xb67c9b2200000000, 0xd17c736f00000000, 0x3381fbe200000000, + 0x1f7ca3f400000000, 0xfd812b7900000000, 0x9a81c33400000000, + 0x787c4bb900000000, 0x3468d41d00000000, 0xd6955c9000000000, + 0xb195b4dd00000000, 0x53683c5000000000, 0x7f95644600000000, + 0x9d68eccb00000000, 0xfa68048600000000, 0x18958c0b00000000, + 0xa292b5aa00000000, 0x406f3d2700000000, 0x276fd56a00000000, + 0xc5925de700000000, 0xe96f05f100000000, 0x0b928d7c00000000, + 0x6c92653100000000, 0x8e6fedbc00000000, 0x599b66a800000000, + 0xbb66ee2500000000, 0xdc66066800000000, 0x3e9b8ee500000000, + 0x1266d6f300000000, 0xf09b5e7e00000000, 0x979bb63300000000, + 0x75663ebe00000000, 0xcf61071f00000000, 0x2d9c8f9200000000, + 0x4a9c67df00000000, 0xa861ef5200000000, 0x849cb74400000000, + 0x66613fc900000000, 0x0161d78400000000, 0xe39c5f0900000000, + 0xd84f981600000000, 0x3ab2109b00000000, 0x5db2f8d600000000, + 0xbf4f705b00000000, 0x93b2284d00000000, 0x714fa0c000000000, + 0x164f488d00000000, 0xf4b2c00000000000, 0x4eb5f9a100000000, + 0xac48712c00000000, 0xcb48996100000000, 0x29b511ec00000000, + 0x054849fa00000000, 0xe7b5c17700000000, 0x80b5293a00000000, + 0x6248a1b700000000, 0xb5bc2aa300000000, 0x5741a22e00000000, + 0x30414a6300000000, 0xd2bcc2ee00000000, 0xfe419af800000000, + 0x1cbc127500000000, 0x7bbcfa3800000000, 0x994172b500000000, + 0x23464b1400000000, 0xc1bbc39900000000, 0xa6bb2bd400000000, + 0x4446a35900000000, 0x68bbfb4f00000000, 0x8a4673c200000000, + 0xed469b8f00000000, 0x0fbb130200000000, 0x43af8ca600000000, + 0xa152042b00000000, 0xc652ec6600000000, 0x24af64eb00000000, + 0x08523cfd00000000, 0xeaafb47000000000, 0x8daf5c3d00000000, + 0x6f52d4b000000000, 0xd555ed1100000000, 0x37a8659c00000000, + 0x50a88dd100000000, 0xb255055c00000000, 0x9ea85d4a00000000, + 0x7c55d5c700000000, 0x1b553d8a00000000, 0xf9a8b50700000000, + 0x2e5c3e1300000000, 0xcca1b69e00000000, 0xaba15ed300000000, + 0x495cd65e00000000, 0x65a18e4800000000, 0x875c06c500000000, + 0xe05cee8800000000, 0x02a1660500000000, 0xb8a65fa400000000, + 0x5a5bd72900000000, 0x3d5b3f6400000000, 0xdfa6b7e900000000, + 0xf35befff00000000, 0x11a6677200000000, 0x76a68f3f00000000, + 0x945b07b200000000}, + {0x0000000000000000, 0xa90b894e00000000, 0x5217129d00000000, + 0xfb1c9bd300000000, 0xe52855e100000000, 0x4c23dcaf00000000, + 0xb73f477c00000000, 0x1e34ce3200000000, 0x8b57db1900000000, + 0x225c525700000000, 0xd940c98400000000, 0x704b40ca00000000, + 0x6e7f8ef800000000, 0xc77407b600000000, 0x3c689c6500000000, + 0x9563152b00000000, 0x16afb63300000000, 0xbfa43f7d00000000, + 0x44b8a4ae00000000, 0xedb32de000000000, 0xf387e3d200000000, + 0x5a8c6a9c00000000, 0xa190f14f00000000, 0x089b780100000000, + 0x9df86d2a00000000, 0x34f3e46400000000, 0xcfef7fb700000000, + 0x66e4f6f900000000, 0x78d038cb00000000, 0xd1dbb18500000000, + 0x2ac72a5600000000, 0x83cca31800000000, 0x2c5e6d6700000000, + 0x8555e42900000000, 0x7e497ffa00000000, 0xd742f6b400000000, + 0xc976388600000000, 0x607db1c800000000, 0x9b612a1b00000000, + 0x326aa35500000000, 0xa709b67e00000000, 0x0e023f3000000000, + 0xf51ea4e300000000, 0x5c152dad00000000, 0x4221e39f00000000, + 0xeb2a6ad100000000, 0x1036f10200000000, 0xb93d784c00000000, + 0x3af1db5400000000, 0x93fa521a00000000, 0x68e6c9c900000000, + 0xc1ed408700000000, 0xdfd98eb500000000, 0x76d207fb00000000, + 0x8dce9c2800000000, 0x24c5156600000000, 0xb1a6004d00000000, + 0x18ad890300000000, 0xe3b112d000000000, 0x4aba9b9e00000000, + 0x548e55ac00000000, 0xfd85dce200000000, 0x0699473100000000, + 0xaf92ce7f00000000, 0x58bcdace00000000, 0xf1b7538000000000, + 0x0aabc85300000000, 0xa3a0411d00000000, 0xbd948f2f00000000, + 0x149f066100000000, 0xef839db200000000, 0x468814fc00000000, + 0xd3eb01d700000000, 0x7ae0889900000000, 0x81fc134a00000000, + 0x28f79a0400000000, 0x36c3543600000000, 0x9fc8dd7800000000, + 0x64d446ab00000000, 0xcddfcfe500000000, 0x4e136cfd00000000, + 0xe718e5b300000000, 0x1c047e6000000000, 0xb50ff72e00000000, + 0xab3b391c00000000, 0x0230b05200000000, 0xf92c2b8100000000, + 0x5027a2cf00000000, 0xc544b7e400000000, 0x6c4f3eaa00000000, + 0x9753a57900000000, 0x3e582c3700000000, 0x206ce20500000000, + 0x89676b4b00000000, 0x727bf09800000000, 0xdb7079d600000000, + 0x74e2b7a900000000, 0xdde93ee700000000, 0x26f5a53400000000, + 0x8ffe2c7a00000000, 0x91cae24800000000, 0x38c16b0600000000, + 0xc3ddf0d500000000, 0x6ad6799b00000000, 0xffb56cb000000000, + 0x56bee5fe00000000, 0xada27e2d00000000, 0x04a9f76300000000, + 0x1a9d395100000000, 0xb396b01f00000000, 0x488a2bcc00000000, + 0xe181a28200000000, 0x624d019a00000000, 0xcb4688d400000000, + 0x305a130700000000, 0x99519a4900000000, 0x8765547b00000000, + 0x2e6edd3500000000, 0xd57246e600000000, 0x7c79cfa800000000, + 0xe91ada8300000000, 0x401153cd00000000, 0xbb0dc81e00000000, + 0x1206415000000000, 0x0c328f6200000000, 0xa539062c00000000, + 0x5e259dff00000000, 0xf72e14b100000000, 0xf17ec44600000000, + 0x58754d0800000000, 0xa369d6db00000000, 0x0a625f9500000000, + 0x145691a700000000, 0xbd5d18e900000000, 0x4641833a00000000, + 0xef4a0a7400000000, 0x7a291f5f00000000, 0xd322961100000000, + 0x283e0dc200000000, 0x8135848c00000000, 0x9f014abe00000000, + 0x360ac3f000000000, 0xcd16582300000000, 0x641dd16d00000000, + 0xe7d1727500000000, 0x4edafb3b00000000, 0xb5c660e800000000, + 0x1ccde9a600000000, 0x02f9279400000000, 0xabf2aeda00000000, + 0x50ee350900000000, 0xf9e5bc4700000000, 0x6c86a96c00000000, + 0xc58d202200000000, 0x3e91bbf100000000, 0x979a32bf00000000, + 0x89aefc8d00000000, 0x20a575c300000000, 0xdbb9ee1000000000, + 0x72b2675e00000000, 0xdd20a92100000000, 0x742b206f00000000, + 0x8f37bbbc00000000, 0x263c32f200000000, 0x3808fcc000000000, + 0x9103758e00000000, 0x6a1fee5d00000000, 0xc314671300000000, + 0x5677723800000000, 0xff7cfb7600000000, 0x046060a500000000, + 0xad6be9eb00000000, 0xb35f27d900000000, 0x1a54ae9700000000, + 0xe148354400000000, 0x4843bc0a00000000, 0xcb8f1f1200000000, + 0x6284965c00000000, 0x99980d8f00000000, 0x309384c100000000, + 0x2ea74af300000000, 0x87acc3bd00000000, 0x7cb0586e00000000, + 0xd5bbd12000000000, 0x40d8c40b00000000, 0xe9d34d4500000000, + 0x12cfd69600000000, 0xbbc45fd800000000, 0xa5f091ea00000000, + 0x0cfb18a400000000, 0xf7e7837700000000, 0x5eec0a3900000000, + 0xa9c21e8800000000, 0x00c997c600000000, 0xfbd50c1500000000, + 0x52de855b00000000, 0x4cea4b6900000000, 0xe5e1c22700000000, + 0x1efd59f400000000, 0xb7f6d0ba00000000, 0x2295c59100000000, + 0x8b9e4cdf00000000, 0x7082d70c00000000, 0xd9895e4200000000, + 0xc7bd907000000000, 0x6eb6193e00000000, 0x95aa82ed00000000, + 0x3ca10ba300000000, 0xbf6da8bb00000000, 0x166621f500000000, + 0xed7aba2600000000, 0x4471336800000000, 0x5a45fd5a00000000, + 0xf34e741400000000, 0x0852efc700000000, 0xa159668900000000, + 0x343a73a200000000, 0x9d31faec00000000, 0x662d613f00000000, + 0xcf26e87100000000, 0xd112264300000000, 0x7819af0d00000000, + 0x830534de00000000, 0x2a0ebd9000000000, 0x859c73ef00000000, + 0x2c97faa100000000, 0xd78b617200000000, 0x7e80e83c00000000, + 0x60b4260e00000000, 0xc9bfaf4000000000, 0x32a3349300000000, + 0x9ba8bddd00000000, 0x0ecba8f600000000, 0xa7c021b800000000, + 0x5cdcba6b00000000, 0xf5d7332500000000, 0xebe3fd1700000000, + 0x42e8745900000000, 0xb9f4ef8a00000000, 0x10ff66c400000000, + 0x9333c5dc00000000, 0x3a384c9200000000, 0xc124d74100000000, + 0x682f5e0f00000000, 0x761b903d00000000, 0xdf10197300000000, + 0x240c82a000000000, 0x8d070bee00000000, 0x18641ec500000000, + 0xb16f978b00000000, 0x4a730c5800000000, 0xe378851600000000, + 0xfd4c4b2400000000, 0x5447c26a00000000, 0xaf5b59b900000000, + 0x0650d0f700000000}, + {0x0000000000000000, 0x479244af00000000, 0xcf22f88500000000, + 0x88b0bc2a00000000, 0xdf4381d000000000, 0x98d1c57f00000000, + 0x1061795500000000, 0x57f33dfa00000000, 0xff81737a00000000, + 0xb81337d500000000, 0x30a38bff00000000, 0x7731cf5000000000, + 0x20c2f2aa00000000, 0x6750b60500000000, 0xefe00a2f00000000, + 0xa8724e8000000000, 0xfe03e7f400000000, 0xb991a35b00000000, + 0x31211f7100000000, 0x76b35bde00000000, 0x2140662400000000, + 0x66d2228b00000000, 0xee629ea100000000, 0xa9f0da0e00000000, + 0x0182948e00000000, 0x4610d02100000000, 0xcea06c0b00000000, + 0x893228a400000000, 0xdec1155e00000000, 0x995351f100000000, + 0x11e3eddb00000000, 0x5671a97400000000, 0xbd01bf3200000000, + 0xfa93fb9d00000000, 0x722347b700000000, 0x35b1031800000000, + 0x62423ee200000000, 0x25d07a4d00000000, 0xad60c66700000000, + 0xeaf282c800000000, 0x4280cc4800000000, 0x051288e700000000, + 0x8da234cd00000000, 0xca30706200000000, 0x9dc34d9800000000, + 0xda51093700000000, 0x52e1b51d00000000, 0x1573f1b200000000, + 0x430258c600000000, 0x04901c6900000000, 0x8c20a04300000000, + 0xcbb2e4ec00000000, 0x9c41d91600000000, 0xdbd39db900000000, + 0x5363219300000000, 0x14f1653c00000000, 0xbc832bbc00000000, + 0xfb116f1300000000, 0x73a1d33900000000, 0x3433979600000000, + 0x63c0aa6c00000000, 0x2452eec300000000, 0xace252e900000000, + 0xeb70164600000000, 0x7a037e6500000000, 0x3d913aca00000000, + 0xb52186e000000000, 0xf2b3c24f00000000, 0xa540ffb500000000, + 0xe2d2bb1a00000000, 0x6a62073000000000, 0x2df0439f00000000, + 0x85820d1f00000000, 0xc21049b000000000, 0x4aa0f59a00000000, + 0x0d32b13500000000, 0x5ac18ccf00000000, 0x1d53c86000000000, + 0x95e3744a00000000, 0xd27130e500000000, 0x8400999100000000, + 0xc392dd3e00000000, 0x4b22611400000000, 0x0cb025bb00000000, + 0x5b43184100000000, 0x1cd15cee00000000, 0x9461e0c400000000, + 0xd3f3a46b00000000, 0x7b81eaeb00000000, 0x3c13ae4400000000, + 0xb4a3126e00000000, 0xf33156c100000000, 0xa4c26b3b00000000, + 0xe3502f9400000000, 0x6be093be00000000, 0x2c72d71100000000, + 0xc702c15700000000, 0x809085f800000000, 0x082039d200000000, + 0x4fb27d7d00000000, 0x1841408700000000, 0x5fd3042800000000, + 0xd763b80200000000, 0x90f1fcad00000000, 0x3883b22d00000000, + 0x7f11f68200000000, 0xf7a14aa800000000, 0xb0330e0700000000, + 0xe7c033fd00000000, 0xa052775200000000, 0x28e2cb7800000000, + 0x6f708fd700000000, 0x390126a300000000, 0x7e93620c00000000, + 0xf623de2600000000, 0xb1b19a8900000000, 0xe642a77300000000, + 0xa1d0e3dc00000000, 0x29605ff600000000, 0x6ef21b5900000000, + 0xc68055d900000000, 0x8112117600000000, 0x09a2ad5c00000000, + 0x4e30e9f300000000, 0x19c3d40900000000, 0x5e5190a600000000, + 0xd6e12c8c00000000, 0x9173682300000000, 0xf406fcca00000000, + 0xb394b86500000000, 0x3b24044f00000000, 0x7cb640e000000000, + 0x2b457d1a00000000, 0x6cd739b500000000, 0xe467859f00000000, + 0xa3f5c13000000000, 0x0b878fb000000000, 0x4c15cb1f00000000, + 0xc4a5773500000000, 0x8337339a00000000, 0xd4c40e6000000000, + 0x93564acf00000000, 0x1be6f6e500000000, 0x5c74b24a00000000, + 0x0a051b3e00000000, 0x4d975f9100000000, 0xc527e3bb00000000, + 0x82b5a71400000000, 0xd5469aee00000000, 0x92d4de4100000000, + 0x1a64626b00000000, 0x5df626c400000000, 0xf584684400000000, + 0xb2162ceb00000000, 0x3aa690c100000000, 0x7d34d46e00000000, + 0x2ac7e99400000000, 0x6d55ad3b00000000, 0xe5e5111100000000, + 0xa27755be00000000, 0x490743f800000000, 0x0e95075700000000, + 0x8625bb7d00000000, 0xc1b7ffd200000000, 0x9644c22800000000, + 0xd1d6868700000000, 0x59663aad00000000, 0x1ef47e0200000000, + 0xb686308200000000, 0xf114742d00000000, 0x79a4c80700000000, + 0x3e368ca800000000, 0x69c5b15200000000, 0x2e57f5fd00000000, + 0xa6e749d700000000, 0xe1750d7800000000, 0xb704a40c00000000, + 0xf096e0a300000000, 0x78265c8900000000, 0x3fb4182600000000, + 0x684725dc00000000, 0x2fd5617300000000, 0xa765dd5900000000, + 0xe0f799f600000000, 0x4885d77600000000, 0x0f1793d900000000, + 0x87a72ff300000000, 0xc0356b5c00000000, 0x97c656a600000000, + 0xd054120900000000, 0x58e4ae2300000000, 0x1f76ea8c00000000, + 0x8e0582af00000000, 0xc997c60000000000, 0x41277a2a00000000, + 0x06b53e8500000000, 0x5146037f00000000, 0x16d447d000000000, + 0x9e64fbfa00000000, 0xd9f6bf5500000000, 0x7184f1d500000000, + 0x3616b57a00000000, 0xbea6095000000000, 0xf9344dff00000000, + 0xaec7700500000000, 0xe95534aa00000000, 0x61e5888000000000, + 0x2677cc2f00000000, 0x7006655b00000000, 0x379421f400000000, + 0xbf249dde00000000, 0xf8b6d97100000000, 0xaf45e48b00000000, + 0xe8d7a02400000000, 0x60671c0e00000000, 0x27f558a100000000, + 0x8f87162100000000, 0xc815528e00000000, 0x40a5eea400000000, + 0x0737aa0b00000000, 0x50c497f100000000, 0x1756d35e00000000, + 0x9fe66f7400000000, 0xd8742bdb00000000, 0x33043d9d00000000, + 0x7496793200000000, 0xfc26c51800000000, 0xbbb481b700000000, + 0xec47bc4d00000000, 0xabd5f8e200000000, 0x236544c800000000, + 0x64f7006700000000, 0xcc854ee700000000, 0x8b170a4800000000, + 0x03a7b66200000000, 0x4435f2cd00000000, 0x13c6cf3700000000, + 0x54548b9800000000, 0xdce437b200000000, 0x9b76731d00000000, + 0xcd07da6900000000, 0x8a959ec600000000, 0x022522ec00000000, + 0x45b7664300000000, 0x12445bb900000000, 0x55d61f1600000000, + 0xdd66a33c00000000, 0x9af4e79300000000, 0x3286a91300000000, + 0x7514edbc00000000, 0xfda4519600000000, 0xba36153900000000, + 0xedc528c300000000, 0xaa576c6c00000000, 0x22e7d04600000000, + 0x657594e900000000}}; + +#else /* W == 4 */ + +local const z_crc_t FAR crc_braid_table[][256] = { + {0x00000000, 0x65673b46, 0xcace768c, 0xafa94dca, 0x4eedeb59, + 0x2b8ad01f, 0x84239dd5, 0xe144a693, 0x9ddbd6b2, 0xf8bcedf4, + 0x5715a03e, 0x32729b78, 0xd3363deb, 0xb65106ad, 0x19f84b67, + 0x7c9f7021, 0xe0c6ab25, 0x85a19063, 0x2a08dda9, 0x4f6fe6ef, + 0xae2b407c, 0xcb4c7b3a, 0x64e536f0, 0x01820db6, 0x7d1d7d97, + 0x187a46d1, 0xb7d30b1b, 0xd2b4305d, 0x33f096ce, 0x5697ad88, + 0xf93ee042, 0x9c59db04, 0x1afc500b, 0x7f9b6b4d, 0xd0322687, + 0xb5551dc1, 0x5411bb52, 0x31768014, 0x9edfcdde, 0xfbb8f698, + 0x872786b9, 0xe240bdff, 0x4de9f035, 0x288ecb73, 0xc9ca6de0, + 0xacad56a6, 0x03041b6c, 0x6663202a, 0xfa3afb2e, 0x9f5dc068, + 0x30f48da2, 0x5593b6e4, 0xb4d71077, 0xd1b02b31, 0x7e1966fb, + 0x1b7e5dbd, 0x67e12d9c, 0x028616da, 0xad2f5b10, 0xc8486056, + 0x290cc6c5, 0x4c6bfd83, 0xe3c2b049, 0x86a58b0f, 0x35f8a016, + 0x509f9b50, 0xff36d69a, 0x9a51eddc, 0x7b154b4f, 0x1e727009, + 0xb1db3dc3, 0xd4bc0685, 0xa82376a4, 0xcd444de2, 0x62ed0028, + 0x078a3b6e, 0xe6ce9dfd, 0x83a9a6bb, 0x2c00eb71, 0x4967d037, + 0xd53e0b33, 0xb0593075, 0x1ff07dbf, 0x7a9746f9, 0x9bd3e06a, + 0xfeb4db2c, 0x511d96e6, 0x347aada0, 0x48e5dd81, 0x2d82e6c7, + 0x822bab0d, 0xe74c904b, 0x060836d8, 0x636f0d9e, 0xccc64054, + 0xa9a17b12, 0x2f04f01d, 0x4a63cb5b, 0xe5ca8691, 0x80adbdd7, + 0x61e91b44, 0x048e2002, 0xab276dc8, 0xce40568e, 0xb2df26af, + 0xd7b81de9, 0x78115023, 0x1d766b65, 0xfc32cdf6, 0x9955f6b0, + 0x36fcbb7a, 0x539b803c, 0xcfc25b38, 0xaaa5607e, 0x050c2db4, + 0x606b16f2, 0x812fb061, 0xe4488b27, 0x4be1c6ed, 0x2e86fdab, + 0x52198d8a, 0x377eb6cc, 0x98d7fb06, 0xfdb0c040, 0x1cf466d3, + 0x79935d95, 0xd63a105f, 0xb35d2b19, 0x6bf1402c, 0x0e967b6a, + 0xa13f36a0, 0xc4580de6, 0x251cab75, 0x407b9033, 0xefd2ddf9, + 0x8ab5e6bf, 0xf62a969e, 0x934dadd8, 0x3ce4e012, 0x5983db54, + 0xb8c77dc7, 0xdda04681, 0x72090b4b, 0x176e300d, 0x8b37eb09, + 0xee50d04f, 0x41f99d85, 0x249ea6c3, 0xc5da0050, 0xa0bd3b16, + 0x0f1476dc, 0x6a734d9a, 0x16ec3dbb, 0x738b06fd, 0xdc224b37, + 0xb9457071, 0x5801d6e2, 0x3d66eda4, 0x92cfa06e, 0xf7a89b28, + 0x710d1027, 0x146a2b61, 0xbbc366ab, 0xdea45ded, 0x3fe0fb7e, + 0x5a87c038, 0xf52e8df2, 0x9049b6b4, 0xecd6c695, 0x89b1fdd3, + 0x2618b019, 0x437f8b5f, 0xa23b2dcc, 0xc75c168a, 0x68f55b40, + 0x0d926006, 0x91cbbb02, 0xf4ac8044, 0x5b05cd8e, 0x3e62f6c8, + 0xdf26505b, 0xba416b1d, 0x15e826d7, 0x708f1d91, 0x0c106db0, + 0x697756f6, 0xc6de1b3c, 0xa3b9207a, 0x42fd86e9, 0x279abdaf, + 0x8833f065, 0xed54cb23, 0x5e09e03a, 0x3b6edb7c, 0x94c796b6, + 0xf1a0adf0, 0x10e40b63, 0x75833025, 0xda2a7def, 0xbf4d46a9, + 0xc3d23688, 0xa6b50dce, 0x091c4004, 0x6c7b7b42, 0x8d3fddd1, + 0xe858e697, 0x47f1ab5d, 0x2296901b, 0xbecf4b1f, 0xdba87059, + 0x74013d93, 0x116606d5, 0xf022a046, 0x95459b00, 0x3aecd6ca, + 0x5f8bed8c, 0x23149dad, 0x4673a6eb, 0xe9daeb21, 0x8cbdd067, + 0x6df976f4, 0x089e4db2, 0xa7370078, 0xc2503b3e, 0x44f5b031, + 0x21928b77, 0x8e3bc6bd, 0xeb5cfdfb, 0x0a185b68, 0x6f7f602e, + 0xc0d62de4, 0xa5b116a2, 0xd92e6683, 0xbc495dc5, 0x13e0100f, + 0x76872b49, 0x97c38dda, 0xf2a4b69c, 0x5d0dfb56, 0x386ac010, + 0xa4331b14, 0xc1542052, 0x6efd6d98, 0x0b9a56de, 0xeadef04d, + 0x8fb9cb0b, 0x201086c1, 0x4577bd87, 0x39e8cda6, 0x5c8ff6e0, + 0xf326bb2a, 0x9641806c, 0x770526ff, 0x12621db9, 0xbdcb5073, + 0xd8ac6b35}, + {0x00000000, 0xd7e28058, 0x74b406f1, 0xa35686a9, 0xe9680de2, + 0x3e8a8dba, 0x9ddc0b13, 0x4a3e8b4b, 0x09a11d85, 0xde439ddd, + 0x7d151b74, 0xaaf79b2c, 0xe0c91067, 0x372b903f, 0x947d1696, + 0x439f96ce, 0x13423b0a, 0xc4a0bb52, 0x67f63dfb, 0xb014bda3, + 0xfa2a36e8, 0x2dc8b6b0, 0x8e9e3019, 0x597cb041, 0x1ae3268f, + 0xcd01a6d7, 0x6e57207e, 0xb9b5a026, 0xf38b2b6d, 0x2469ab35, + 0x873f2d9c, 0x50ddadc4, 0x26847614, 0xf166f64c, 0x523070e5, + 0x85d2f0bd, 0xcfec7bf6, 0x180efbae, 0xbb587d07, 0x6cbafd5f, + 0x2f256b91, 0xf8c7ebc9, 0x5b916d60, 0x8c73ed38, 0xc64d6673, + 0x11afe62b, 0xb2f96082, 0x651be0da, 0x35c64d1e, 0xe224cd46, + 0x41724bef, 0x9690cbb7, 0xdcae40fc, 0x0b4cc0a4, 0xa81a460d, + 0x7ff8c655, 0x3c67509b, 0xeb85d0c3, 0x48d3566a, 0x9f31d632, + 0xd50f5d79, 0x02eddd21, 0xa1bb5b88, 0x7659dbd0, 0x4d08ec28, + 0x9aea6c70, 0x39bcead9, 0xee5e6a81, 0xa460e1ca, 0x73826192, + 0xd0d4e73b, 0x07366763, 0x44a9f1ad, 0x934b71f5, 0x301df75c, + 0xe7ff7704, 0xadc1fc4f, 0x7a237c17, 0xd975fabe, 0x0e977ae6, + 0x5e4ad722, 0x89a8577a, 0x2afed1d3, 0xfd1c518b, 0xb722dac0, + 0x60c05a98, 0xc396dc31, 0x14745c69, 0x57ebcaa7, 0x80094aff, + 0x235fcc56, 0xf4bd4c0e, 0xbe83c745, 0x6961471d, 0xca37c1b4, + 0x1dd541ec, 0x6b8c9a3c, 0xbc6e1a64, 0x1f389ccd, 0xc8da1c95, + 0x82e497de, 0x55061786, 0xf650912f, 0x21b21177, 0x622d87b9, + 0xb5cf07e1, 0x16998148, 0xc17b0110, 0x8b458a5b, 0x5ca70a03, + 0xfff18caa, 0x28130cf2, 0x78cea136, 0xaf2c216e, 0x0c7aa7c7, + 0xdb98279f, 0x91a6acd4, 0x46442c8c, 0xe512aa25, 0x32f02a7d, + 0x716fbcb3, 0xa68d3ceb, 0x05dbba42, 0xd2393a1a, 0x9807b151, + 0x4fe53109, 0xecb3b7a0, 0x3b5137f8, 0x9a11d850, 0x4df35808, + 0xeea5dea1, 0x39475ef9, 0x7379d5b2, 0xa49b55ea, 0x07cdd343, + 0xd02f531b, 0x93b0c5d5, 0x4452458d, 0xe704c324, 0x30e6437c, + 0x7ad8c837, 0xad3a486f, 0x0e6ccec6, 0xd98e4e9e, 0x8953e35a, + 0x5eb16302, 0xfde7e5ab, 0x2a0565f3, 0x603beeb8, 0xb7d96ee0, + 0x148fe849, 0xc36d6811, 0x80f2fedf, 0x57107e87, 0xf446f82e, + 0x23a47876, 0x699af33d, 0xbe787365, 0x1d2ef5cc, 0xcacc7594, + 0xbc95ae44, 0x6b772e1c, 0xc821a8b5, 0x1fc328ed, 0x55fda3a6, + 0x821f23fe, 0x2149a557, 0xf6ab250f, 0xb534b3c1, 0x62d63399, + 0xc180b530, 0x16623568, 0x5c5cbe23, 0x8bbe3e7b, 0x28e8b8d2, + 0xff0a388a, 0xafd7954e, 0x78351516, 0xdb6393bf, 0x0c8113e7, + 0x46bf98ac, 0x915d18f4, 0x320b9e5d, 0xe5e91e05, 0xa67688cb, + 0x71940893, 0xd2c28e3a, 0x05200e62, 0x4f1e8529, 0x98fc0571, + 0x3baa83d8, 0xec480380, 0xd7193478, 0x00fbb420, 0xa3ad3289, + 0x744fb2d1, 0x3e71399a, 0xe993b9c2, 0x4ac53f6b, 0x9d27bf33, + 0xdeb829fd, 0x095aa9a5, 0xaa0c2f0c, 0x7deeaf54, 0x37d0241f, + 0xe032a447, 0x436422ee, 0x9486a2b6, 0xc45b0f72, 0x13b98f2a, + 0xb0ef0983, 0x670d89db, 0x2d330290, 0xfad182c8, 0x59870461, + 0x8e658439, 0xcdfa12f7, 0x1a1892af, 0xb94e1406, 0x6eac945e, + 0x24921f15, 0xf3709f4d, 0x502619e4, 0x87c499bc, 0xf19d426c, + 0x267fc234, 0x8529449d, 0x52cbc4c5, 0x18f54f8e, 0xcf17cfd6, + 0x6c41497f, 0xbba3c927, 0xf83c5fe9, 0x2fdedfb1, 0x8c885918, + 0x5b6ad940, 0x1154520b, 0xc6b6d253, 0x65e054fa, 0xb202d4a2, + 0xe2df7966, 0x353df93e, 0x966b7f97, 0x4189ffcf, 0x0bb77484, + 0xdc55f4dc, 0x7f037275, 0xa8e1f22d, 0xeb7e64e3, 0x3c9ce4bb, + 0x9fca6212, 0x4828e24a, 0x02166901, 0xd5f4e959, 0x76a26ff0, + 0xa140efa8}, + {0x00000000, 0xef52b6e1, 0x05d46b83, 0xea86dd62, 0x0ba8d706, + 0xe4fa61e7, 0x0e7cbc85, 0xe12e0a64, 0x1751ae0c, 0xf80318ed, + 0x1285c58f, 0xfdd7736e, 0x1cf9790a, 0xf3abcfeb, 0x192d1289, + 0xf67fa468, 0x2ea35c18, 0xc1f1eaf9, 0x2b77379b, 0xc425817a, + 0x250b8b1e, 0xca593dff, 0x20dfe09d, 0xcf8d567c, 0x39f2f214, + 0xd6a044f5, 0x3c269997, 0xd3742f76, 0x325a2512, 0xdd0893f3, + 0x378e4e91, 0xd8dcf870, 0x5d46b830, 0xb2140ed1, 0x5892d3b3, + 0xb7c06552, 0x56ee6f36, 0xb9bcd9d7, 0x533a04b5, 0xbc68b254, + 0x4a17163c, 0xa545a0dd, 0x4fc37dbf, 0xa091cb5e, 0x41bfc13a, + 0xaeed77db, 0x446baab9, 0xab391c58, 0x73e5e428, 0x9cb752c9, + 0x76318fab, 0x9963394a, 0x784d332e, 0x971f85cf, 0x7d9958ad, + 0x92cbee4c, 0x64b44a24, 0x8be6fcc5, 0x616021a7, 0x8e329746, + 0x6f1c9d22, 0x804e2bc3, 0x6ac8f6a1, 0x859a4040, 0xba8d7060, + 0x55dfc681, 0xbf591be3, 0x500bad02, 0xb125a766, 0x5e771187, + 0xb4f1cce5, 0x5ba37a04, 0xaddcde6c, 0x428e688d, 0xa808b5ef, + 0x475a030e, 0xa674096a, 0x4926bf8b, 0xa3a062e9, 0x4cf2d408, + 0x942e2c78, 0x7b7c9a99, 0x91fa47fb, 0x7ea8f11a, 0x9f86fb7e, + 0x70d44d9f, 0x9a5290fd, 0x7500261c, 0x837f8274, 0x6c2d3495, + 0x86abe9f7, 0x69f95f16, 0x88d75572, 0x6785e393, 0x8d033ef1, + 0x62518810, 0xe7cbc850, 0x08997eb1, 0xe21fa3d3, 0x0d4d1532, + 0xec631f56, 0x0331a9b7, 0xe9b774d5, 0x06e5c234, 0xf09a665c, + 0x1fc8d0bd, 0xf54e0ddf, 0x1a1cbb3e, 0xfb32b15a, 0x146007bb, + 0xfee6dad9, 0x11b46c38, 0xc9689448, 0x263a22a9, 0xccbcffcb, + 0x23ee492a, 0xc2c0434e, 0x2d92f5af, 0xc71428cd, 0x28469e2c, + 0xde393a44, 0x316b8ca5, 0xdbed51c7, 0x34bfe726, 0xd591ed42, + 0x3ac35ba3, 0xd04586c1, 0x3f173020, 0xae6be681, 0x41395060, + 0xabbf8d02, 0x44ed3be3, 0xa5c33187, 0x4a918766, 0xa0175a04, + 0x4f45ece5, 0xb93a488d, 0x5668fe6c, 0xbcee230e, 0x53bc95ef, + 0xb2929f8b, 0x5dc0296a, 0xb746f408, 0x581442e9, 0x80c8ba99, + 0x6f9a0c78, 0x851cd11a, 0x6a4e67fb, 0x8b606d9f, 0x6432db7e, + 0x8eb4061c, 0x61e6b0fd, 0x97991495, 0x78cba274, 0x924d7f16, + 0x7d1fc9f7, 0x9c31c393, 0x73637572, 0x99e5a810, 0x76b71ef1, + 0xf32d5eb1, 0x1c7fe850, 0xf6f93532, 0x19ab83d3, 0xf88589b7, + 0x17d73f56, 0xfd51e234, 0x120354d5, 0xe47cf0bd, 0x0b2e465c, + 0xe1a89b3e, 0x0efa2ddf, 0xefd427bb, 0x0086915a, 0xea004c38, + 0x0552fad9, 0xdd8e02a9, 0x32dcb448, 0xd85a692a, 0x3708dfcb, + 0xd626d5af, 0x3974634e, 0xd3f2be2c, 0x3ca008cd, 0xcadfaca5, + 0x258d1a44, 0xcf0bc726, 0x205971c7, 0xc1777ba3, 0x2e25cd42, + 0xc4a31020, 0x2bf1a6c1, 0x14e696e1, 0xfbb42000, 0x1132fd62, + 0xfe604b83, 0x1f4e41e7, 0xf01cf706, 0x1a9a2a64, 0xf5c89c85, + 0x03b738ed, 0xece58e0c, 0x0663536e, 0xe931e58f, 0x081fefeb, + 0xe74d590a, 0x0dcb8468, 0xe2993289, 0x3a45caf9, 0xd5177c18, + 0x3f91a17a, 0xd0c3179b, 0x31ed1dff, 0xdebfab1e, 0x3439767c, + 0xdb6bc09d, 0x2d1464f5, 0xc246d214, 0x28c00f76, 0xc792b997, + 0x26bcb3f3, 0xc9ee0512, 0x2368d870, 0xcc3a6e91, 0x49a02ed1, + 0xa6f29830, 0x4c744552, 0xa326f3b3, 0x4208f9d7, 0xad5a4f36, + 0x47dc9254, 0xa88e24b5, 0x5ef180dd, 0xb1a3363c, 0x5b25eb5e, + 0xb4775dbf, 0x555957db, 0xba0be13a, 0x508d3c58, 0xbfdf8ab9, + 0x670372c9, 0x8851c428, 0x62d7194a, 0x8d85afab, 0x6caba5cf, + 0x83f9132e, 0x697fce4c, 0x862d78ad, 0x7052dcc5, 0x9f006a24, + 0x7586b746, 0x9ad401a7, 0x7bfa0bc3, 0x94a8bd22, 0x7e2e6040, + 0x917cd6a1}, + {0x00000000, 0x87a6cb43, 0xd43c90c7, 0x539a5b84, 0x730827cf, + 0xf4aeec8c, 0xa734b708, 0x20927c4b, 0xe6104f9e, 0x61b684dd, + 0x322cdf59, 0xb58a141a, 0x95186851, 0x12bea312, 0x4124f896, + 0xc68233d5, 0x1751997d, 0x90f7523e, 0xc36d09ba, 0x44cbc2f9, + 0x6459beb2, 0xe3ff75f1, 0xb0652e75, 0x37c3e536, 0xf141d6e3, + 0x76e71da0, 0x257d4624, 0xa2db8d67, 0x8249f12c, 0x05ef3a6f, + 0x567561eb, 0xd1d3aaa8, 0x2ea332fa, 0xa905f9b9, 0xfa9fa23d, + 0x7d39697e, 0x5dab1535, 0xda0dde76, 0x899785f2, 0x0e314eb1, + 0xc8b37d64, 0x4f15b627, 0x1c8feda3, 0x9b2926e0, 0xbbbb5aab, + 0x3c1d91e8, 0x6f87ca6c, 0xe821012f, 0x39f2ab87, 0xbe5460c4, + 0xedce3b40, 0x6a68f003, 0x4afa8c48, 0xcd5c470b, 0x9ec61c8f, + 0x1960d7cc, 0xdfe2e419, 0x58442f5a, 0x0bde74de, 0x8c78bf9d, + 0xaceac3d6, 0x2b4c0895, 0x78d65311, 0xff709852, 0x5d4665f4, + 0xdae0aeb7, 0x897af533, 0x0edc3e70, 0x2e4e423b, 0xa9e88978, + 0xfa72d2fc, 0x7dd419bf, 0xbb562a6a, 0x3cf0e129, 0x6f6abaad, + 0xe8cc71ee, 0xc85e0da5, 0x4ff8c6e6, 0x1c629d62, 0x9bc45621, + 0x4a17fc89, 0xcdb137ca, 0x9e2b6c4e, 0x198da70d, 0x391fdb46, + 0xbeb91005, 0xed234b81, 0x6a8580c2, 0xac07b317, 0x2ba17854, + 0x783b23d0, 0xff9de893, 0xdf0f94d8, 0x58a95f9b, 0x0b33041f, + 0x8c95cf5c, 0x73e5570e, 0xf4439c4d, 0xa7d9c7c9, 0x207f0c8a, + 0x00ed70c1, 0x874bbb82, 0xd4d1e006, 0x53772b45, 0x95f51890, + 0x1253d3d3, 0x41c98857, 0xc66f4314, 0xe6fd3f5f, 0x615bf41c, + 0x32c1af98, 0xb56764db, 0x64b4ce73, 0xe3120530, 0xb0885eb4, + 0x372e95f7, 0x17bce9bc, 0x901a22ff, 0xc380797b, 0x4426b238, + 0x82a481ed, 0x05024aae, 0x5698112a, 0xd13eda69, 0xf1aca622, + 0x760a6d61, 0x259036e5, 0xa236fda6, 0xba8ccbe8, 0x3d2a00ab, + 0x6eb05b2f, 0xe916906c, 0xc984ec27, 0x4e222764, 0x1db87ce0, + 0x9a1eb7a3, 0x5c9c8476, 0xdb3a4f35, 0x88a014b1, 0x0f06dff2, + 0x2f94a3b9, 0xa83268fa, 0xfba8337e, 0x7c0ef83d, 0xaddd5295, + 0x2a7b99d6, 0x79e1c252, 0xfe470911, 0xded5755a, 0x5973be19, + 0x0ae9e59d, 0x8d4f2ede, 0x4bcd1d0b, 0xcc6bd648, 0x9ff18dcc, + 0x1857468f, 0x38c53ac4, 0xbf63f187, 0xecf9aa03, 0x6b5f6140, + 0x942ff912, 0x13893251, 0x401369d5, 0xc7b5a296, 0xe727dedd, + 0x6081159e, 0x331b4e1a, 0xb4bd8559, 0x723fb68c, 0xf5997dcf, + 0xa603264b, 0x21a5ed08, 0x01379143, 0x86915a00, 0xd50b0184, + 0x52adcac7, 0x837e606f, 0x04d8ab2c, 0x5742f0a8, 0xd0e43beb, + 0xf07647a0, 0x77d08ce3, 0x244ad767, 0xa3ec1c24, 0x656e2ff1, + 0xe2c8e4b2, 0xb152bf36, 0x36f47475, 0x1666083e, 0x91c0c37d, + 0xc25a98f9, 0x45fc53ba, 0xe7caae1c, 0x606c655f, 0x33f63edb, + 0xb450f598, 0x94c289d3, 0x13644290, 0x40fe1914, 0xc758d257, + 0x01dae182, 0x867c2ac1, 0xd5e67145, 0x5240ba06, 0x72d2c64d, + 0xf5740d0e, 0xa6ee568a, 0x21489dc9, 0xf09b3761, 0x773dfc22, + 0x24a7a7a6, 0xa3016ce5, 0x839310ae, 0x0435dbed, 0x57af8069, + 0xd0094b2a, 0x168b78ff, 0x912db3bc, 0xc2b7e838, 0x4511237b, + 0x65835f30, 0xe2259473, 0xb1bfcff7, 0x361904b4, 0xc9699ce6, + 0x4ecf57a5, 0x1d550c21, 0x9af3c762, 0xba61bb29, 0x3dc7706a, + 0x6e5d2bee, 0xe9fbe0ad, 0x2f79d378, 0xa8df183b, 0xfb4543bf, + 0x7ce388fc, 0x5c71f4b7, 0xdbd73ff4, 0x884d6470, 0x0febaf33, + 0xde38059b, 0x599eced8, 0x0a04955c, 0x8da25e1f, 0xad302254, + 0x2a96e917, 0x790cb293, 0xfeaa79d0, 0x38284a05, 0xbf8e8146, + 0xec14dac2, 0x6bb21181, 0x4b206dca, 0xcc86a689, 0x9f1cfd0d, + 0x18ba364e}}; + +local const z_word_t FAR crc_braid_big_table[][256] = { + {0x00000000, 0x43cba687, 0xc7903cd4, 0x845b9a53, 0xcf270873, + 0x8cecaef4, 0x08b734a7, 0x4b7c9220, 0x9e4f10e6, 0xdd84b661, + 0x59df2c32, 0x1a148ab5, 0x51681895, 0x12a3be12, 0x96f82441, + 0xd53382c6, 0x7d995117, 0x3e52f790, 0xba096dc3, 0xf9c2cb44, + 0xb2be5964, 0xf175ffe3, 0x752e65b0, 0x36e5c337, 0xe3d641f1, + 0xa01de776, 0x24467d25, 0x678ddba2, 0x2cf14982, 0x6f3aef05, + 0xeb617556, 0xa8aad3d1, 0xfa32a32e, 0xb9f905a9, 0x3da29ffa, + 0x7e69397d, 0x3515ab5d, 0x76de0dda, 0xf2859789, 0xb14e310e, + 0x647db3c8, 0x27b6154f, 0xa3ed8f1c, 0xe026299b, 0xab5abbbb, + 0xe8911d3c, 0x6cca876f, 0x2f0121e8, 0x87abf239, 0xc46054be, + 0x403bceed, 0x03f0686a, 0x488cfa4a, 0x0b475ccd, 0x8f1cc69e, + 0xccd76019, 0x19e4e2df, 0x5a2f4458, 0xde74de0b, 0x9dbf788c, + 0xd6c3eaac, 0x95084c2b, 0x1153d678, 0x529870ff, 0xf465465d, + 0xb7aee0da, 0x33f57a89, 0x703edc0e, 0x3b424e2e, 0x7889e8a9, + 0xfcd272fa, 0xbf19d47d, 0x6a2a56bb, 0x29e1f03c, 0xadba6a6f, + 0xee71cce8, 0xa50d5ec8, 0xe6c6f84f, 0x629d621c, 0x2156c49b, + 0x89fc174a, 0xca37b1cd, 0x4e6c2b9e, 0x0da78d19, 0x46db1f39, + 0x0510b9be, 0x814b23ed, 0xc280856a, 0x17b307ac, 0x5478a12b, + 0xd0233b78, 0x93e89dff, 0xd8940fdf, 0x9b5fa958, 0x1f04330b, + 0x5ccf958c, 0x0e57e573, 0x4d9c43f4, 0xc9c7d9a7, 0x8a0c7f20, + 0xc170ed00, 0x82bb4b87, 0x06e0d1d4, 0x452b7753, 0x9018f595, + 0xd3d35312, 0x5788c941, 0x14436fc6, 0x5f3ffde6, 0x1cf45b61, + 0x98afc132, 0xdb6467b5, 0x73ceb464, 0x300512e3, 0xb45e88b0, + 0xf7952e37, 0xbce9bc17, 0xff221a90, 0x7b7980c3, 0x38b22644, + 0xed81a482, 0xae4a0205, 0x2a119856, 0x69da3ed1, 0x22a6acf1, + 0x616d0a76, 0xe5369025, 0xa6fd36a2, 0xe8cb8cba, 0xab002a3d, + 0x2f5bb06e, 0x6c9016e9, 0x27ec84c9, 0x6427224e, 0xe07cb81d, + 0xa3b71e9a, 0x76849c5c, 0x354f3adb, 0xb114a088, 0xf2df060f, + 0xb9a3942f, 0xfa6832a8, 0x7e33a8fb, 0x3df80e7c, 0x9552ddad, + 0xd6997b2a, 0x52c2e179, 0x110947fe, 0x5a75d5de, 0x19be7359, + 0x9de5e90a, 0xde2e4f8d, 0x0b1dcd4b, 0x48d66bcc, 0xcc8df19f, + 0x8f465718, 0xc43ac538, 0x87f163bf, 0x03aaf9ec, 0x40615f6b, + 0x12f92f94, 0x51328913, 0xd5691340, 0x96a2b5c7, 0xddde27e7, + 0x9e158160, 0x1a4e1b33, 0x5985bdb4, 0x8cb63f72, 0xcf7d99f5, + 0x4b2603a6, 0x08eda521, 0x43913701, 0x005a9186, 0x84010bd5, + 0xc7caad52, 0x6f607e83, 0x2cabd804, 0xa8f04257, 0xeb3be4d0, + 0xa04776f0, 0xe38cd077, 0x67d74a24, 0x241ceca3, 0xf12f6e65, + 0xb2e4c8e2, 0x36bf52b1, 0x7574f436, 0x3e086616, 0x7dc3c091, + 0xf9985ac2, 0xba53fc45, 0x1caecae7, 0x5f656c60, 0xdb3ef633, + 0x98f550b4, 0xd389c294, 0x90426413, 0x1419fe40, 0x57d258c7, + 0x82e1da01, 0xc12a7c86, 0x4571e6d5, 0x06ba4052, 0x4dc6d272, + 0x0e0d74f5, 0x8a56eea6, 0xc99d4821, 0x61379bf0, 0x22fc3d77, + 0xa6a7a724, 0xe56c01a3, 0xae109383, 0xeddb3504, 0x6980af57, + 0x2a4b09d0, 0xff788b16, 0xbcb32d91, 0x38e8b7c2, 0x7b231145, + 0x305f8365, 0x739425e2, 0xf7cfbfb1, 0xb4041936, 0xe69c69c9, + 0xa557cf4e, 0x210c551d, 0x62c7f39a, 0x29bb61ba, 0x6a70c73d, + 0xee2b5d6e, 0xade0fbe9, 0x78d3792f, 0x3b18dfa8, 0xbf4345fb, + 0xfc88e37c, 0xb7f4715c, 0xf43fd7db, 0x70644d88, 0x33afeb0f, + 0x9b0538de, 0xd8ce9e59, 0x5c95040a, 0x1f5ea28d, 0x542230ad, + 0x17e9962a, 0x93b20c79, 0xd079aafe, 0x054a2838, 0x46818ebf, + 0xc2da14ec, 0x8111b26b, 0xca6d204b, 0x89a686cc, 0x0dfd1c9f, + 0x4e36ba18}, + {0x00000000, 0xe1b652ef, 0x836bd405, 0x62dd86ea, 0x06d7a80b, + 0xe761fae4, 0x85bc7c0e, 0x640a2ee1, 0x0cae5117, 0xed1803f8, + 0x8fc58512, 0x6e73d7fd, 0x0a79f91c, 0xebcfabf3, 0x89122d19, + 0x68a47ff6, 0x185ca32e, 0xf9eaf1c1, 0x9b37772b, 0x7a8125c4, + 0x1e8b0b25, 0xff3d59ca, 0x9de0df20, 0x7c568dcf, 0x14f2f239, + 0xf544a0d6, 0x9799263c, 0x762f74d3, 0x12255a32, 0xf39308dd, + 0x914e8e37, 0x70f8dcd8, 0x30b8465d, 0xd10e14b2, 0xb3d39258, + 0x5265c0b7, 0x366fee56, 0xd7d9bcb9, 0xb5043a53, 0x54b268bc, + 0x3c16174a, 0xdda045a5, 0xbf7dc34f, 0x5ecb91a0, 0x3ac1bf41, + 0xdb77edae, 0xb9aa6b44, 0x581c39ab, 0x28e4e573, 0xc952b79c, + 0xab8f3176, 0x4a396399, 0x2e334d78, 0xcf851f97, 0xad58997d, + 0x4ceecb92, 0x244ab464, 0xc5fce68b, 0xa7216061, 0x4697328e, + 0x229d1c6f, 0xc32b4e80, 0xa1f6c86a, 0x40409a85, 0x60708dba, + 0x81c6df55, 0xe31b59bf, 0x02ad0b50, 0x66a725b1, 0x8711775e, + 0xe5ccf1b4, 0x047aa35b, 0x6cdedcad, 0x8d688e42, 0xefb508a8, + 0x0e035a47, 0x6a0974a6, 0x8bbf2649, 0xe962a0a3, 0x08d4f24c, + 0x782c2e94, 0x999a7c7b, 0xfb47fa91, 0x1af1a87e, 0x7efb869f, + 0x9f4dd470, 0xfd90529a, 0x1c260075, 0x74827f83, 0x95342d6c, + 0xf7e9ab86, 0x165ff969, 0x7255d788, 0x93e38567, 0xf13e038d, + 0x10885162, 0x50c8cbe7, 0xb17e9908, 0xd3a31fe2, 0x32154d0d, + 0x561f63ec, 0xb7a93103, 0xd574b7e9, 0x34c2e506, 0x5c669af0, + 0xbdd0c81f, 0xdf0d4ef5, 0x3ebb1c1a, 0x5ab132fb, 0xbb076014, + 0xd9dae6fe, 0x386cb411, 0x489468c9, 0xa9223a26, 0xcbffbccc, + 0x2a49ee23, 0x4e43c0c2, 0xaff5922d, 0xcd2814c7, 0x2c9e4628, + 0x443a39de, 0xa58c6b31, 0xc751eddb, 0x26e7bf34, 0x42ed91d5, + 0xa35bc33a, 0xc18645d0, 0x2030173f, 0x81e66bae, 0x60503941, + 0x028dbfab, 0xe33bed44, 0x8731c3a5, 0x6687914a, 0x045a17a0, + 0xe5ec454f, 0x8d483ab9, 0x6cfe6856, 0x0e23eebc, 0xef95bc53, + 0x8b9f92b2, 0x6a29c05d, 0x08f446b7, 0xe9421458, 0x99bac880, + 0x780c9a6f, 0x1ad11c85, 0xfb674e6a, 0x9f6d608b, 0x7edb3264, + 0x1c06b48e, 0xfdb0e661, 0x95149997, 0x74a2cb78, 0x167f4d92, + 0xf7c91f7d, 0x93c3319c, 0x72756373, 0x10a8e599, 0xf11eb776, + 0xb15e2df3, 0x50e87f1c, 0x3235f9f6, 0xd383ab19, 0xb78985f8, + 0x563fd717, 0x34e251fd, 0xd5540312, 0xbdf07ce4, 0x5c462e0b, + 0x3e9ba8e1, 0xdf2dfa0e, 0xbb27d4ef, 0x5a918600, 0x384c00ea, + 0xd9fa5205, 0xa9028edd, 0x48b4dc32, 0x2a695ad8, 0xcbdf0837, + 0xafd526d6, 0x4e637439, 0x2cbef2d3, 0xcd08a03c, 0xa5acdfca, + 0x441a8d25, 0x26c70bcf, 0xc7715920, 0xa37b77c1, 0x42cd252e, + 0x2010a3c4, 0xc1a6f12b, 0xe196e614, 0x0020b4fb, 0x62fd3211, + 0x834b60fe, 0xe7414e1f, 0x06f71cf0, 0x642a9a1a, 0x859cc8f5, + 0xed38b703, 0x0c8ee5ec, 0x6e536306, 0x8fe531e9, 0xebef1f08, + 0x0a594de7, 0x6884cb0d, 0x893299e2, 0xf9ca453a, 0x187c17d5, + 0x7aa1913f, 0x9b17c3d0, 0xff1ded31, 0x1eabbfde, 0x7c763934, + 0x9dc06bdb, 0xf564142d, 0x14d246c2, 0x760fc028, 0x97b992c7, + 0xf3b3bc26, 0x1205eec9, 0x70d86823, 0x916e3acc, 0xd12ea049, + 0x3098f2a6, 0x5245744c, 0xb3f326a3, 0xd7f90842, 0x364f5aad, + 0x5492dc47, 0xb5248ea8, 0xdd80f15e, 0x3c36a3b1, 0x5eeb255b, + 0xbf5d77b4, 0xdb575955, 0x3ae10bba, 0x583c8d50, 0xb98adfbf, + 0xc9720367, 0x28c45188, 0x4a19d762, 0xabaf858d, 0xcfa5ab6c, + 0x2e13f983, 0x4cce7f69, 0xad782d86, 0xc5dc5270, 0x246a009f, + 0x46b78675, 0xa701d49a, 0xc30bfa7b, 0x22bda894, 0x40602e7e, + 0xa1d67c91}, + {0x00000000, 0x5880e2d7, 0xf106b474, 0xa98656a3, 0xe20d68e9, + 0xba8d8a3e, 0x130bdc9d, 0x4b8b3e4a, 0x851da109, 0xdd9d43de, + 0x741b157d, 0x2c9bf7aa, 0x6710c9e0, 0x3f902b37, 0x96167d94, + 0xce969f43, 0x0a3b4213, 0x52bba0c4, 0xfb3df667, 0xa3bd14b0, + 0xe8362afa, 0xb0b6c82d, 0x19309e8e, 0x41b07c59, 0x8f26e31a, + 0xd7a601cd, 0x7e20576e, 0x26a0b5b9, 0x6d2b8bf3, 0x35ab6924, + 0x9c2d3f87, 0xc4addd50, 0x14768426, 0x4cf666f1, 0xe5703052, + 0xbdf0d285, 0xf67beccf, 0xaefb0e18, 0x077d58bb, 0x5ffdba6c, + 0x916b252f, 0xc9ebc7f8, 0x606d915b, 0x38ed738c, 0x73664dc6, + 0x2be6af11, 0x8260f9b2, 0xdae01b65, 0x1e4dc635, 0x46cd24e2, + 0xef4b7241, 0xb7cb9096, 0xfc40aedc, 0xa4c04c0b, 0x0d461aa8, + 0x55c6f87f, 0x9b50673c, 0xc3d085eb, 0x6a56d348, 0x32d6319f, + 0x795d0fd5, 0x21dded02, 0x885bbba1, 0xd0db5976, 0x28ec084d, + 0x706cea9a, 0xd9eabc39, 0x816a5eee, 0xcae160a4, 0x92618273, + 0x3be7d4d0, 0x63673607, 0xadf1a944, 0xf5714b93, 0x5cf71d30, + 0x0477ffe7, 0x4ffcc1ad, 0x177c237a, 0xbefa75d9, 0xe67a970e, + 0x22d74a5e, 0x7a57a889, 0xd3d1fe2a, 0x8b511cfd, 0xc0da22b7, + 0x985ac060, 0x31dc96c3, 0x695c7414, 0xa7caeb57, 0xff4a0980, + 0x56cc5f23, 0x0e4cbdf4, 0x45c783be, 0x1d476169, 0xb4c137ca, + 0xec41d51d, 0x3c9a8c6b, 0x641a6ebc, 0xcd9c381f, 0x951cdac8, + 0xde97e482, 0x86170655, 0x2f9150f6, 0x7711b221, 0xb9872d62, + 0xe107cfb5, 0x48819916, 0x10017bc1, 0x5b8a458b, 0x030aa75c, + 0xaa8cf1ff, 0xf20c1328, 0x36a1ce78, 0x6e212caf, 0xc7a77a0c, + 0x9f2798db, 0xd4aca691, 0x8c2c4446, 0x25aa12e5, 0x7d2af032, + 0xb3bc6f71, 0xeb3c8da6, 0x42badb05, 0x1a3a39d2, 0x51b10798, + 0x0931e54f, 0xa0b7b3ec, 0xf837513b, 0x50d8119a, 0x0858f34d, + 0xa1dea5ee, 0xf95e4739, 0xb2d57973, 0xea559ba4, 0x43d3cd07, + 0x1b532fd0, 0xd5c5b093, 0x8d455244, 0x24c304e7, 0x7c43e630, + 0x37c8d87a, 0x6f483aad, 0xc6ce6c0e, 0x9e4e8ed9, 0x5ae35389, + 0x0263b15e, 0xabe5e7fd, 0xf365052a, 0xb8ee3b60, 0xe06ed9b7, + 0x49e88f14, 0x11686dc3, 0xdffef280, 0x877e1057, 0x2ef846f4, + 0x7678a423, 0x3df39a69, 0x657378be, 0xccf52e1d, 0x9475ccca, + 0x44ae95bc, 0x1c2e776b, 0xb5a821c8, 0xed28c31f, 0xa6a3fd55, + 0xfe231f82, 0x57a54921, 0x0f25abf6, 0xc1b334b5, 0x9933d662, + 0x30b580c1, 0x68356216, 0x23be5c5c, 0x7b3ebe8b, 0xd2b8e828, + 0x8a380aff, 0x4e95d7af, 0x16153578, 0xbf9363db, 0xe713810c, + 0xac98bf46, 0xf4185d91, 0x5d9e0b32, 0x051ee9e5, 0xcb8876a6, + 0x93089471, 0x3a8ec2d2, 0x620e2005, 0x29851e4f, 0x7105fc98, + 0xd883aa3b, 0x800348ec, 0x783419d7, 0x20b4fb00, 0x8932ada3, + 0xd1b24f74, 0x9a39713e, 0xc2b993e9, 0x6b3fc54a, 0x33bf279d, + 0xfd29b8de, 0xa5a95a09, 0x0c2f0caa, 0x54afee7d, 0x1f24d037, + 0x47a432e0, 0xee226443, 0xb6a28694, 0x720f5bc4, 0x2a8fb913, + 0x8309efb0, 0xdb890d67, 0x9002332d, 0xc882d1fa, 0x61048759, + 0x3984658e, 0xf712facd, 0xaf92181a, 0x06144eb9, 0x5e94ac6e, + 0x151f9224, 0x4d9f70f3, 0xe4192650, 0xbc99c487, 0x6c429df1, + 0x34c27f26, 0x9d442985, 0xc5c4cb52, 0x8e4ff518, 0xd6cf17cf, + 0x7f49416c, 0x27c9a3bb, 0xe95f3cf8, 0xb1dfde2f, 0x1859888c, + 0x40d96a5b, 0x0b525411, 0x53d2b6c6, 0xfa54e065, 0xa2d402b2, + 0x6679dfe2, 0x3ef93d35, 0x977f6b96, 0xcfff8941, 0x8474b70b, + 0xdcf455dc, 0x7572037f, 0x2df2e1a8, 0xe3647eeb, 0xbbe49c3c, + 0x1262ca9f, 0x4ae22848, 0x01691602, 0x59e9f4d5, 0xf06fa276, + 0xa8ef40a1}, + {0x00000000, 0x463b6765, 0x8c76ceca, 0xca4da9af, 0x59ebed4e, + 0x1fd08a2b, 0xd59d2384, 0x93a644e1, 0xb2d6db9d, 0xf4edbcf8, + 0x3ea01557, 0x789b7232, 0xeb3d36d3, 0xad0651b6, 0x674bf819, + 0x21709f7c, 0x25abc6e0, 0x6390a185, 0xa9dd082a, 0xefe66f4f, + 0x7c402bae, 0x3a7b4ccb, 0xf036e564, 0xb60d8201, 0x977d1d7d, + 0xd1467a18, 0x1b0bd3b7, 0x5d30b4d2, 0xce96f033, 0x88ad9756, + 0x42e03ef9, 0x04db599c, 0x0b50fc1a, 0x4d6b9b7f, 0x872632d0, + 0xc11d55b5, 0x52bb1154, 0x14807631, 0xdecddf9e, 0x98f6b8fb, + 0xb9862787, 0xffbd40e2, 0x35f0e94d, 0x73cb8e28, 0xe06dcac9, + 0xa656adac, 0x6c1b0403, 0x2a206366, 0x2efb3afa, 0x68c05d9f, + 0xa28df430, 0xe4b69355, 0x7710d7b4, 0x312bb0d1, 0xfb66197e, + 0xbd5d7e1b, 0x9c2de167, 0xda168602, 0x105b2fad, 0x566048c8, + 0xc5c60c29, 0x83fd6b4c, 0x49b0c2e3, 0x0f8ba586, 0x16a0f835, + 0x509b9f50, 0x9ad636ff, 0xdced519a, 0x4f4b157b, 0x0970721e, + 0xc33ddbb1, 0x8506bcd4, 0xa47623a8, 0xe24d44cd, 0x2800ed62, + 0x6e3b8a07, 0xfd9dcee6, 0xbba6a983, 0x71eb002c, 0x37d06749, + 0x330b3ed5, 0x753059b0, 0xbf7df01f, 0xf946977a, 0x6ae0d39b, + 0x2cdbb4fe, 0xe6961d51, 0xa0ad7a34, 0x81dde548, 0xc7e6822d, + 0x0dab2b82, 0x4b904ce7, 0xd8360806, 0x9e0d6f63, 0x5440c6cc, + 0x127ba1a9, 0x1df0042f, 0x5bcb634a, 0x9186cae5, 0xd7bdad80, + 0x441be961, 0x02208e04, 0xc86d27ab, 0x8e5640ce, 0xaf26dfb2, + 0xe91db8d7, 0x23501178, 0x656b761d, 0xf6cd32fc, 0xb0f65599, + 0x7abbfc36, 0x3c809b53, 0x385bc2cf, 0x7e60a5aa, 0xb42d0c05, + 0xf2166b60, 0x61b02f81, 0x278b48e4, 0xedc6e14b, 0xabfd862e, + 0x8a8d1952, 0xccb67e37, 0x06fbd798, 0x40c0b0fd, 0xd366f41c, + 0x955d9379, 0x5f103ad6, 0x192b5db3, 0x2c40f16b, 0x6a7b960e, + 0xa0363fa1, 0xe60d58c4, 0x75ab1c25, 0x33907b40, 0xf9ddd2ef, + 0xbfe6b58a, 0x9e962af6, 0xd8ad4d93, 0x12e0e43c, 0x54db8359, + 0xc77dc7b8, 0x8146a0dd, 0x4b0b0972, 0x0d306e17, 0x09eb378b, + 0x4fd050ee, 0x859df941, 0xc3a69e24, 0x5000dac5, 0x163bbda0, + 0xdc76140f, 0x9a4d736a, 0xbb3dec16, 0xfd068b73, 0x374b22dc, + 0x717045b9, 0xe2d60158, 0xa4ed663d, 0x6ea0cf92, 0x289ba8f7, + 0x27100d71, 0x612b6a14, 0xab66c3bb, 0xed5da4de, 0x7efbe03f, + 0x38c0875a, 0xf28d2ef5, 0xb4b64990, 0x95c6d6ec, 0xd3fdb189, + 0x19b01826, 0x5f8b7f43, 0xcc2d3ba2, 0x8a165cc7, 0x405bf568, + 0x0660920d, 0x02bbcb91, 0x4480acf4, 0x8ecd055b, 0xc8f6623e, + 0x5b5026df, 0x1d6b41ba, 0xd726e815, 0x911d8f70, 0xb06d100c, + 0xf6567769, 0x3c1bdec6, 0x7a20b9a3, 0xe986fd42, 0xafbd9a27, + 0x65f03388, 0x23cb54ed, 0x3ae0095e, 0x7cdb6e3b, 0xb696c794, + 0xf0ada0f1, 0x630be410, 0x25308375, 0xef7d2ada, 0xa9464dbf, + 0x8836d2c3, 0xce0db5a6, 0x04401c09, 0x427b7b6c, 0xd1dd3f8d, + 0x97e658e8, 0x5dabf147, 0x1b909622, 0x1f4bcfbe, 0x5970a8db, + 0x933d0174, 0xd5066611, 0x46a022f0, 0x009b4595, 0xcad6ec3a, + 0x8ced8b5f, 0xad9d1423, 0xeba67346, 0x21ebdae9, 0x67d0bd8c, + 0xf476f96d, 0xb24d9e08, 0x780037a7, 0x3e3b50c2, 0x31b0f544, + 0x778b9221, 0xbdc63b8e, 0xfbfd5ceb, 0x685b180a, 0x2e607f6f, + 0xe42dd6c0, 0xa216b1a5, 0x83662ed9, 0xc55d49bc, 0x0f10e013, + 0x492b8776, 0xda8dc397, 0x9cb6a4f2, 0x56fb0d5d, 0x10c06a38, + 0x141b33a4, 0x522054c1, 0x986dfd6e, 0xde569a0b, 0x4df0deea, + 0x0bcbb98f, 0xc1861020, 0x87bd7745, 0xa6cde839, 0xe0f68f5c, + 0x2abb26f3, 0x6c804196, 0xff260577, 0xb91d6212, 0x7350cbbd, + 0x356bacd8}}; + +#endif + +#endif + +#if N == 6 + +#if W == 8 + +local const z_crc_t FAR crc_braid_table[][256] = { + {0x00000000, 0x3db1ecdc, 0x7b63d9b8, 0x46d23564, 0xf6c7b370, + 0xcb765fac, 0x8da46ac8, 0xb0158614, 0x36fe60a1, 0x0b4f8c7d, + 0x4d9db919, 0x702c55c5, 0xc039d3d1, 0xfd883f0d, 0xbb5a0a69, + 0x86ebe6b5, 0x6dfcc142, 0x504d2d9e, 0x169f18fa, 0x2b2ef426, + 0x9b3b7232, 0xa68a9eee, 0xe058ab8a, 0xdde94756, 0x5b02a1e3, + 0x66b34d3f, 0x2061785b, 0x1dd09487, 0xadc51293, 0x9074fe4f, + 0xd6a6cb2b, 0xeb1727f7, 0xdbf98284, 0xe6486e58, 0xa09a5b3c, + 0x9d2bb7e0, 0x2d3e31f4, 0x108fdd28, 0x565de84c, 0x6bec0490, + 0xed07e225, 0xd0b60ef9, 0x96643b9d, 0xabd5d741, 0x1bc05155, + 0x2671bd89, 0x60a388ed, 0x5d126431, 0xb60543c6, 0x8bb4af1a, + 0xcd669a7e, 0xf0d776a2, 0x40c2f0b6, 0x7d731c6a, 0x3ba1290e, + 0x0610c5d2, 0x80fb2367, 0xbd4acfbb, 0xfb98fadf, 0xc6291603, + 0x763c9017, 0x4b8d7ccb, 0x0d5f49af, 0x30eea573, 0x6c820349, + 0x5133ef95, 0x17e1daf1, 0x2a50362d, 0x9a45b039, 0xa7f45ce5, + 0xe1266981, 0xdc97855d, 0x5a7c63e8, 0x67cd8f34, 0x211fba50, + 0x1cae568c, 0xacbbd098, 0x910a3c44, 0xd7d80920, 0xea69e5fc, + 0x017ec20b, 0x3ccf2ed7, 0x7a1d1bb3, 0x47acf76f, 0xf7b9717b, + 0xca089da7, 0x8cdaa8c3, 0xb16b441f, 0x3780a2aa, 0x0a314e76, + 0x4ce37b12, 0x715297ce, 0xc14711da, 0xfcf6fd06, 0xba24c862, + 0x879524be, 0xb77b81cd, 0x8aca6d11, 0xcc185875, 0xf1a9b4a9, + 0x41bc32bd, 0x7c0dde61, 0x3adfeb05, 0x076e07d9, 0x8185e16c, + 0xbc340db0, 0xfae638d4, 0xc757d408, 0x7742521c, 0x4af3bec0, + 0x0c218ba4, 0x31906778, 0xda87408f, 0xe736ac53, 0xa1e49937, + 0x9c5575eb, 0x2c40f3ff, 0x11f11f23, 0x57232a47, 0x6a92c69b, + 0xec79202e, 0xd1c8ccf2, 0x971af996, 0xaaab154a, 0x1abe935e, + 0x270f7f82, 0x61dd4ae6, 0x5c6ca63a, 0xd9040692, 0xe4b5ea4e, + 0xa267df2a, 0x9fd633f6, 0x2fc3b5e2, 0x1272593e, 0x54a06c5a, + 0x69118086, 0xeffa6633, 0xd24b8aef, 0x9499bf8b, 0xa9285357, + 0x193dd543, 0x248c399f, 0x625e0cfb, 0x5fefe027, 0xb4f8c7d0, + 0x89492b0c, 0xcf9b1e68, 0xf22af2b4, 0x423f74a0, 0x7f8e987c, + 0x395cad18, 0x04ed41c4, 0x8206a771, 0xbfb74bad, 0xf9657ec9, + 0xc4d49215, 0x74c11401, 0x4970f8dd, 0x0fa2cdb9, 0x32132165, + 0x02fd8416, 0x3f4c68ca, 0x799e5dae, 0x442fb172, 0xf43a3766, + 0xc98bdbba, 0x8f59eede, 0xb2e80202, 0x3403e4b7, 0x09b2086b, + 0x4f603d0f, 0x72d1d1d3, 0xc2c457c7, 0xff75bb1b, 0xb9a78e7f, + 0x841662a3, 0x6f014554, 0x52b0a988, 0x14629cec, 0x29d37030, + 0x99c6f624, 0xa4771af8, 0xe2a52f9c, 0xdf14c340, 0x59ff25f5, + 0x644ec929, 0x229cfc4d, 0x1f2d1091, 0xaf389685, 0x92897a59, + 0xd45b4f3d, 0xe9eaa3e1, 0xb58605db, 0x8837e907, 0xcee5dc63, + 0xf35430bf, 0x4341b6ab, 0x7ef05a77, 0x38226f13, 0x059383cf, + 0x8378657a, 0xbec989a6, 0xf81bbcc2, 0xc5aa501e, 0x75bfd60a, + 0x480e3ad6, 0x0edc0fb2, 0x336de36e, 0xd87ac499, 0xe5cb2845, + 0xa3191d21, 0x9ea8f1fd, 0x2ebd77e9, 0x130c9b35, 0x55deae51, + 0x686f428d, 0xee84a438, 0xd33548e4, 0x95e77d80, 0xa856915c, + 0x18431748, 0x25f2fb94, 0x6320cef0, 0x5e91222c, 0x6e7f875f, + 0x53ce6b83, 0x151c5ee7, 0x28adb23b, 0x98b8342f, 0xa509d8f3, + 0xe3dbed97, 0xde6a014b, 0x5881e7fe, 0x65300b22, 0x23e23e46, + 0x1e53d29a, 0xae46548e, 0x93f7b852, 0xd5258d36, 0xe89461ea, + 0x0383461d, 0x3e32aac1, 0x78e09fa5, 0x45517379, 0xf544f56d, + 0xc8f519b1, 0x8e272cd5, 0xb396c009, 0x357d26bc, 0x08ccca60, + 0x4e1eff04, 0x73af13d8, 0xc3ba95cc, 0xfe0b7910, 0xb8d94c74, + 0x8568a0a8}, + {0x00000000, 0x69790b65, 0xd2f216ca, 0xbb8b1daf, 0x7e952bd5, + 0x17ec20b0, 0xac673d1f, 0xc51e367a, 0xfd2a57aa, 0x94535ccf, + 0x2fd84160, 0x46a14a05, 0x83bf7c7f, 0xeac6771a, 0x514d6ab5, + 0x383461d0, 0x2125a915, 0x485ca270, 0xf3d7bfdf, 0x9aaeb4ba, + 0x5fb082c0, 0x36c989a5, 0x8d42940a, 0xe43b9f6f, 0xdc0ffebf, + 0xb576f5da, 0x0efde875, 0x6784e310, 0xa29ad56a, 0xcbe3de0f, + 0x7068c3a0, 0x1911c8c5, 0x424b522a, 0x2b32594f, 0x90b944e0, + 0xf9c04f85, 0x3cde79ff, 0x55a7729a, 0xee2c6f35, 0x87556450, + 0xbf610580, 0xd6180ee5, 0x6d93134a, 0x04ea182f, 0xc1f42e55, + 0xa88d2530, 0x1306389f, 0x7a7f33fa, 0x636efb3f, 0x0a17f05a, + 0xb19cedf5, 0xd8e5e690, 0x1dfbd0ea, 0x7482db8f, 0xcf09c620, + 0xa670cd45, 0x9e44ac95, 0xf73da7f0, 0x4cb6ba5f, 0x25cfb13a, + 0xe0d18740, 0x89a88c25, 0x3223918a, 0x5b5a9aef, 0x8496a454, + 0xedefaf31, 0x5664b29e, 0x3f1db9fb, 0xfa038f81, 0x937a84e4, + 0x28f1994b, 0x4188922e, 0x79bcf3fe, 0x10c5f89b, 0xab4ee534, + 0xc237ee51, 0x0729d82b, 0x6e50d34e, 0xd5dbcee1, 0xbca2c584, + 0xa5b30d41, 0xccca0624, 0x77411b8b, 0x1e3810ee, 0xdb262694, + 0xb25f2df1, 0x09d4305e, 0x60ad3b3b, 0x58995aeb, 0x31e0518e, + 0x8a6b4c21, 0xe3124744, 0x260c713e, 0x4f757a5b, 0xf4fe67f4, + 0x9d876c91, 0xc6ddf67e, 0xafa4fd1b, 0x142fe0b4, 0x7d56ebd1, + 0xb848ddab, 0xd131d6ce, 0x6abacb61, 0x03c3c004, 0x3bf7a1d4, + 0x528eaab1, 0xe905b71e, 0x807cbc7b, 0x45628a01, 0x2c1b8164, + 0x97909ccb, 0xfee997ae, 0xe7f85f6b, 0x8e81540e, 0x350a49a1, + 0x5c7342c4, 0x996d74be, 0xf0147fdb, 0x4b9f6274, 0x22e66911, + 0x1ad208c1, 0x73ab03a4, 0xc8201e0b, 0xa159156e, 0x64472314, + 0x0d3e2871, 0xb6b535de, 0xdfcc3ebb, 0xd25c4ee9, 0xbb25458c, + 0x00ae5823, 0x69d75346, 0xacc9653c, 0xc5b06e59, 0x7e3b73f6, + 0x17427893, 0x2f761943, 0x460f1226, 0xfd840f89, 0x94fd04ec, + 0x51e33296, 0x389a39f3, 0x8311245c, 0xea682f39, 0xf379e7fc, + 0x9a00ec99, 0x218bf136, 0x48f2fa53, 0x8deccc29, 0xe495c74c, + 0x5f1edae3, 0x3667d186, 0x0e53b056, 0x672abb33, 0xdca1a69c, + 0xb5d8adf9, 0x70c69b83, 0x19bf90e6, 0xa2348d49, 0xcb4d862c, + 0x90171cc3, 0xf96e17a6, 0x42e50a09, 0x2b9c016c, 0xee823716, + 0x87fb3c73, 0x3c7021dc, 0x55092ab9, 0x6d3d4b69, 0x0444400c, + 0xbfcf5da3, 0xd6b656c6, 0x13a860bc, 0x7ad16bd9, 0xc15a7676, + 0xa8237d13, 0xb132b5d6, 0xd84bbeb3, 0x63c0a31c, 0x0ab9a879, + 0xcfa79e03, 0xa6de9566, 0x1d5588c9, 0x742c83ac, 0x4c18e27c, + 0x2561e919, 0x9eeaf4b6, 0xf793ffd3, 0x328dc9a9, 0x5bf4c2cc, + 0xe07fdf63, 0x8906d406, 0x56caeabd, 0x3fb3e1d8, 0x8438fc77, + 0xed41f712, 0x285fc168, 0x4126ca0d, 0xfaadd7a2, 0x93d4dcc7, + 0xabe0bd17, 0xc299b672, 0x7912abdd, 0x106ba0b8, 0xd57596c2, + 0xbc0c9da7, 0x07878008, 0x6efe8b6d, 0x77ef43a8, 0x1e9648cd, + 0xa51d5562, 0xcc645e07, 0x097a687d, 0x60036318, 0xdb887eb7, + 0xb2f175d2, 0x8ac51402, 0xe3bc1f67, 0x583702c8, 0x314e09ad, + 0xf4503fd7, 0x9d2934b2, 0x26a2291d, 0x4fdb2278, 0x1481b897, + 0x7df8b3f2, 0xc673ae5d, 0xaf0aa538, 0x6a149342, 0x036d9827, + 0xb8e68588, 0xd19f8eed, 0xe9abef3d, 0x80d2e458, 0x3b59f9f7, + 0x5220f292, 0x973ec4e8, 0xfe47cf8d, 0x45ccd222, 0x2cb5d947, + 0x35a41182, 0x5cdd1ae7, 0xe7560748, 0x8e2f0c2d, 0x4b313a57, + 0x22483132, 0x99c32c9d, 0xf0ba27f8, 0xc88e4628, 0xa1f74d4d, + 0x1a7c50e2, 0x73055b87, 0xb61b6dfd, 0xdf626698, 0x64e97b37, + 0x0d907052}, + {0x00000000, 0x7fc99b93, 0xff933726, 0x805aacb5, 0x2457680d, + 0x5b9ef39e, 0xdbc45f2b, 0xa40dc4b8, 0x48aed01a, 0x37674b89, + 0xb73de73c, 0xc8f47caf, 0x6cf9b817, 0x13302384, 0x936a8f31, + 0xeca314a2, 0x915da034, 0xee943ba7, 0x6ece9712, 0x11070c81, + 0xb50ac839, 0xcac353aa, 0x4a99ff1f, 0x3550648c, 0xd9f3702e, + 0xa63aebbd, 0x26604708, 0x59a9dc9b, 0xfda41823, 0x826d83b0, + 0x02372f05, 0x7dfeb496, 0xf9ca4629, 0x8603ddba, 0x0659710f, + 0x7990ea9c, 0xdd9d2e24, 0xa254b5b7, 0x220e1902, 0x5dc78291, + 0xb1649633, 0xcead0da0, 0x4ef7a115, 0x313e3a86, 0x9533fe3e, + 0xeafa65ad, 0x6aa0c918, 0x1569528b, 0x6897e61d, 0x175e7d8e, + 0x9704d13b, 0xe8cd4aa8, 0x4cc08e10, 0x33091583, 0xb353b936, + 0xcc9a22a5, 0x20393607, 0x5ff0ad94, 0xdfaa0121, 0xa0639ab2, + 0x046e5e0a, 0x7ba7c599, 0xfbfd692c, 0x8434f2bf, 0x28e58a13, + 0x572c1180, 0xd776bd35, 0xa8bf26a6, 0x0cb2e21e, 0x737b798d, + 0xf321d538, 0x8ce84eab, 0x604b5a09, 0x1f82c19a, 0x9fd86d2f, + 0xe011f6bc, 0x441c3204, 0x3bd5a997, 0xbb8f0522, 0xc4469eb1, + 0xb9b82a27, 0xc671b1b4, 0x462b1d01, 0x39e28692, 0x9def422a, + 0xe226d9b9, 0x627c750c, 0x1db5ee9f, 0xf116fa3d, 0x8edf61ae, + 0x0e85cd1b, 0x714c5688, 0xd5419230, 0xaa8809a3, 0x2ad2a516, + 0x551b3e85, 0xd12fcc3a, 0xaee657a9, 0x2ebcfb1c, 0x5175608f, + 0xf578a437, 0x8ab13fa4, 0x0aeb9311, 0x75220882, 0x99811c20, + 0xe64887b3, 0x66122b06, 0x19dbb095, 0xbdd6742d, 0xc21fefbe, + 0x4245430b, 0x3d8cd898, 0x40726c0e, 0x3fbbf79d, 0xbfe15b28, + 0xc028c0bb, 0x64250403, 0x1bec9f90, 0x9bb63325, 0xe47fa8b6, + 0x08dcbc14, 0x77152787, 0xf74f8b32, 0x888610a1, 0x2c8bd419, + 0x53424f8a, 0xd318e33f, 0xacd178ac, 0x51cb1426, 0x2e028fb5, + 0xae582300, 0xd191b893, 0x759c7c2b, 0x0a55e7b8, 0x8a0f4b0d, + 0xf5c6d09e, 0x1965c43c, 0x66ac5faf, 0xe6f6f31a, 0x993f6889, + 0x3d32ac31, 0x42fb37a2, 0xc2a19b17, 0xbd680084, 0xc096b412, + 0xbf5f2f81, 0x3f058334, 0x40cc18a7, 0xe4c1dc1f, 0x9b08478c, + 0x1b52eb39, 0x649b70aa, 0x88386408, 0xf7f1ff9b, 0x77ab532e, + 0x0862c8bd, 0xac6f0c05, 0xd3a69796, 0x53fc3b23, 0x2c35a0b0, + 0xa801520f, 0xd7c8c99c, 0x57926529, 0x285bfeba, 0x8c563a02, + 0xf39fa191, 0x73c50d24, 0x0c0c96b7, 0xe0af8215, 0x9f661986, + 0x1f3cb533, 0x60f52ea0, 0xc4f8ea18, 0xbb31718b, 0x3b6bdd3e, + 0x44a246ad, 0x395cf23b, 0x469569a8, 0xc6cfc51d, 0xb9065e8e, + 0x1d0b9a36, 0x62c201a5, 0xe298ad10, 0x9d513683, 0x71f22221, + 0x0e3bb9b2, 0x8e611507, 0xf1a88e94, 0x55a54a2c, 0x2a6cd1bf, + 0xaa367d0a, 0xd5ffe699, 0x792e9e35, 0x06e705a6, 0x86bda913, + 0xf9743280, 0x5d79f638, 0x22b06dab, 0xa2eac11e, 0xdd235a8d, + 0x31804e2f, 0x4e49d5bc, 0xce137909, 0xb1dae29a, 0x15d72622, + 0x6a1ebdb1, 0xea441104, 0x958d8a97, 0xe8733e01, 0x97baa592, + 0x17e00927, 0x682992b4, 0xcc24560c, 0xb3edcd9f, 0x33b7612a, + 0x4c7efab9, 0xa0ddee1b, 0xdf147588, 0x5f4ed93d, 0x208742ae, + 0x848a8616, 0xfb431d85, 0x7b19b130, 0x04d02aa3, 0x80e4d81c, + 0xff2d438f, 0x7f77ef3a, 0x00be74a9, 0xa4b3b011, 0xdb7a2b82, + 0x5b208737, 0x24e91ca4, 0xc84a0806, 0xb7839395, 0x37d93f20, + 0x4810a4b3, 0xec1d600b, 0x93d4fb98, 0x138e572d, 0x6c47ccbe, + 0x11b97828, 0x6e70e3bb, 0xee2a4f0e, 0x91e3d49d, 0x35ee1025, + 0x4a278bb6, 0xca7d2703, 0xb5b4bc90, 0x5917a832, 0x26de33a1, + 0xa6849f14, 0xd94d0487, 0x7d40c03f, 0x02895bac, 0x82d3f719, + 0xfd1a6c8a}, + {0x00000000, 0xa396284c, 0x9c5d56d9, 0x3fcb7e95, 0xe3cbabf3, + 0x405d83bf, 0x7f96fd2a, 0xdc00d566, 0x1ce651a7, 0xbf7079eb, + 0x80bb077e, 0x232d2f32, 0xff2dfa54, 0x5cbbd218, 0x6370ac8d, + 0xc0e684c1, 0x39cca34e, 0x9a5a8b02, 0xa591f597, 0x0607dddb, + 0xda0708bd, 0x799120f1, 0x465a5e64, 0xe5cc7628, 0x252af2e9, + 0x86bcdaa5, 0xb977a430, 0x1ae18c7c, 0xc6e1591a, 0x65777156, + 0x5abc0fc3, 0xf92a278f, 0x7399469c, 0xd00f6ed0, 0xefc41045, + 0x4c523809, 0x9052ed6f, 0x33c4c523, 0x0c0fbbb6, 0xaf9993fa, + 0x6f7f173b, 0xcce93f77, 0xf32241e2, 0x50b469ae, 0x8cb4bcc8, + 0x2f229484, 0x10e9ea11, 0xb37fc25d, 0x4a55e5d2, 0xe9c3cd9e, + 0xd608b30b, 0x759e9b47, 0xa99e4e21, 0x0a08666d, 0x35c318f8, + 0x965530b4, 0x56b3b475, 0xf5259c39, 0xcaeee2ac, 0x6978cae0, + 0xb5781f86, 0x16ee37ca, 0x2925495f, 0x8ab36113, 0xe7328d38, + 0x44a4a574, 0x7b6fdbe1, 0xd8f9f3ad, 0x04f926cb, 0xa76f0e87, + 0x98a47012, 0x3b32585e, 0xfbd4dc9f, 0x5842f4d3, 0x67898a46, + 0xc41fa20a, 0x181f776c, 0xbb895f20, 0x844221b5, 0x27d409f9, + 0xdefe2e76, 0x7d68063a, 0x42a378af, 0xe13550e3, 0x3d358585, + 0x9ea3adc9, 0xa168d35c, 0x02fefb10, 0xc2187fd1, 0x618e579d, + 0x5e452908, 0xfdd30144, 0x21d3d422, 0x8245fc6e, 0xbd8e82fb, + 0x1e18aab7, 0x94abcba4, 0x373de3e8, 0x08f69d7d, 0xab60b531, + 0x77606057, 0xd4f6481b, 0xeb3d368e, 0x48ab1ec2, 0x884d9a03, + 0x2bdbb24f, 0x1410ccda, 0xb786e496, 0x6b8631f0, 0xc81019bc, + 0xf7db6729, 0x544d4f65, 0xad6768ea, 0x0ef140a6, 0x313a3e33, + 0x92ac167f, 0x4eacc319, 0xed3aeb55, 0xd2f195c0, 0x7167bd8c, + 0xb181394d, 0x12171101, 0x2ddc6f94, 0x8e4a47d8, 0x524a92be, + 0xf1dcbaf2, 0xce17c467, 0x6d81ec2b, 0x15141c31, 0xb682347d, + 0x89494ae8, 0x2adf62a4, 0xf6dfb7c2, 0x55499f8e, 0x6a82e11b, + 0xc914c957, 0x09f24d96, 0xaa6465da, 0x95af1b4f, 0x36393303, + 0xea39e665, 0x49afce29, 0x7664b0bc, 0xd5f298f0, 0x2cd8bf7f, + 0x8f4e9733, 0xb085e9a6, 0x1313c1ea, 0xcf13148c, 0x6c853cc0, + 0x534e4255, 0xf0d86a19, 0x303eeed8, 0x93a8c694, 0xac63b801, + 0x0ff5904d, 0xd3f5452b, 0x70636d67, 0x4fa813f2, 0xec3e3bbe, + 0x668d5aad, 0xc51b72e1, 0xfad00c74, 0x59462438, 0x8546f15e, + 0x26d0d912, 0x191ba787, 0xba8d8fcb, 0x7a6b0b0a, 0xd9fd2346, + 0xe6365dd3, 0x45a0759f, 0x99a0a0f9, 0x3a3688b5, 0x05fdf620, + 0xa66bde6c, 0x5f41f9e3, 0xfcd7d1af, 0xc31caf3a, 0x608a8776, + 0xbc8a5210, 0x1f1c7a5c, 0x20d704c9, 0x83412c85, 0x43a7a844, + 0xe0318008, 0xdffafe9d, 0x7c6cd6d1, 0xa06c03b7, 0x03fa2bfb, + 0x3c31556e, 0x9fa77d22, 0xf2269109, 0x51b0b945, 0x6e7bc7d0, + 0xcdedef9c, 0x11ed3afa, 0xb27b12b6, 0x8db06c23, 0x2e26446f, + 0xeec0c0ae, 0x4d56e8e2, 0x729d9677, 0xd10bbe3b, 0x0d0b6b5d, + 0xae9d4311, 0x91563d84, 0x32c015c8, 0xcbea3247, 0x687c1a0b, + 0x57b7649e, 0xf4214cd2, 0x282199b4, 0x8bb7b1f8, 0xb47ccf6d, + 0x17eae721, 0xd70c63e0, 0x749a4bac, 0x4b513539, 0xe8c71d75, + 0x34c7c813, 0x9751e05f, 0xa89a9eca, 0x0b0cb686, 0x81bfd795, + 0x2229ffd9, 0x1de2814c, 0xbe74a900, 0x62747c66, 0xc1e2542a, + 0xfe292abf, 0x5dbf02f3, 0x9d598632, 0x3ecfae7e, 0x0104d0eb, + 0xa292f8a7, 0x7e922dc1, 0xdd04058d, 0xe2cf7b18, 0x41595354, + 0xb87374db, 0x1be55c97, 0x242e2202, 0x87b80a4e, 0x5bb8df28, + 0xf82ef764, 0xc7e589f1, 0x6473a1bd, 0xa495257c, 0x07030d30, + 0x38c873a5, 0x9b5e5be9, 0x475e8e8f, 0xe4c8a6c3, 0xdb03d856, + 0x7895f01a}, + {0x00000000, 0x2a283862, 0x545070c4, 0x7e7848a6, 0xa8a0e188, + 0x8288d9ea, 0xfcf0914c, 0xd6d8a92e, 0x8a30c551, 0xa018fd33, + 0xde60b595, 0xf4488df7, 0x229024d9, 0x08b81cbb, 0x76c0541d, + 0x5ce86c7f, 0xcf108ce3, 0xe538b481, 0x9b40fc27, 0xb168c445, + 0x67b06d6b, 0x4d985509, 0x33e01daf, 0x19c825cd, 0x452049b2, + 0x6f0871d0, 0x11703976, 0x3b580114, 0xed80a83a, 0xc7a89058, + 0xb9d0d8fe, 0x93f8e09c, 0x45501f87, 0x6f7827e5, 0x11006f43, + 0x3b285721, 0xedf0fe0f, 0xc7d8c66d, 0xb9a08ecb, 0x9388b6a9, + 0xcf60dad6, 0xe548e2b4, 0x9b30aa12, 0xb1189270, 0x67c03b5e, + 0x4de8033c, 0x33904b9a, 0x19b873f8, 0x8a409364, 0xa068ab06, + 0xde10e3a0, 0xf438dbc2, 0x22e072ec, 0x08c84a8e, 0x76b00228, + 0x5c983a4a, 0x00705635, 0x2a586e57, 0x542026f1, 0x7e081e93, + 0xa8d0b7bd, 0x82f88fdf, 0xfc80c779, 0xd6a8ff1b, 0x8aa03f0e, + 0xa088076c, 0xdef04fca, 0xf4d877a8, 0x2200de86, 0x0828e6e4, + 0x7650ae42, 0x5c789620, 0x0090fa5f, 0x2ab8c23d, 0x54c08a9b, + 0x7ee8b2f9, 0xa8301bd7, 0x821823b5, 0xfc606b13, 0xd6485371, + 0x45b0b3ed, 0x6f988b8f, 0x11e0c329, 0x3bc8fb4b, 0xed105265, + 0xc7386a07, 0xb94022a1, 0x93681ac3, 0xcf8076bc, 0xe5a84ede, + 0x9bd00678, 0xb1f83e1a, 0x67209734, 0x4d08af56, 0x3370e7f0, + 0x1958df92, 0xcff02089, 0xe5d818eb, 0x9ba0504d, 0xb188682f, + 0x6750c101, 0x4d78f963, 0x3300b1c5, 0x192889a7, 0x45c0e5d8, + 0x6fe8ddba, 0x1190951c, 0x3bb8ad7e, 0xed600450, 0xc7483c32, + 0xb9307494, 0x93184cf6, 0x00e0ac6a, 0x2ac89408, 0x54b0dcae, + 0x7e98e4cc, 0xa8404de2, 0x82687580, 0xfc103d26, 0xd6380544, + 0x8ad0693b, 0xa0f85159, 0xde8019ff, 0xf4a8219d, 0x227088b3, + 0x0858b0d1, 0x7620f877, 0x5c08c015, 0xce31785d, 0xe419403f, + 0x9a610899, 0xb04930fb, 0x669199d5, 0x4cb9a1b7, 0x32c1e911, + 0x18e9d173, 0x4401bd0c, 0x6e29856e, 0x1051cdc8, 0x3a79f5aa, + 0xeca15c84, 0xc68964e6, 0xb8f12c40, 0x92d91422, 0x0121f4be, + 0x2b09ccdc, 0x5571847a, 0x7f59bc18, 0xa9811536, 0x83a92d54, + 0xfdd165f2, 0xd7f95d90, 0x8b1131ef, 0xa139098d, 0xdf41412b, + 0xf5697949, 0x23b1d067, 0x0999e805, 0x77e1a0a3, 0x5dc998c1, + 0x8b6167da, 0xa1495fb8, 0xdf31171e, 0xf5192f7c, 0x23c18652, + 0x09e9be30, 0x7791f696, 0x5db9cef4, 0x0151a28b, 0x2b799ae9, + 0x5501d24f, 0x7f29ea2d, 0xa9f14303, 0x83d97b61, 0xfda133c7, + 0xd7890ba5, 0x4471eb39, 0x6e59d35b, 0x10219bfd, 0x3a09a39f, + 0xecd10ab1, 0xc6f932d3, 0xb8817a75, 0x92a94217, 0xce412e68, + 0xe469160a, 0x9a115eac, 0xb03966ce, 0x66e1cfe0, 0x4cc9f782, + 0x32b1bf24, 0x18998746, 0x44914753, 0x6eb97f31, 0x10c13797, + 0x3ae90ff5, 0xec31a6db, 0xc6199eb9, 0xb861d61f, 0x9249ee7d, + 0xcea18202, 0xe489ba60, 0x9af1f2c6, 0xb0d9caa4, 0x6601638a, + 0x4c295be8, 0x3251134e, 0x18792b2c, 0x8b81cbb0, 0xa1a9f3d2, + 0xdfd1bb74, 0xf5f98316, 0x23212a38, 0x0909125a, 0x77715afc, + 0x5d59629e, 0x01b10ee1, 0x2b993683, 0x55e17e25, 0x7fc94647, + 0xa911ef69, 0x8339d70b, 0xfd419fad, 0xd769a7cf, 0x01c158d4, + 0x2be960b6, 0x55912810, 0x7fb91072, 0xa961b95c, 0x8349813e, + 0xfd31c998, 0xd719f1fa, 0x8bf19d85, 0xa1d9a5e7, 0xdfa1ed41, + 0xf589d523, 0x23517c0d, 0x0979446f, 0x77010cc9, 0x5d2934ab, + 0xced1d437, 0xe4f9ec55, 0x9a81a4f3, 0xb0a99c91, 0x667135bf, + 0x4c590ddd, 0x3221457b, 0x18097d19, 0x44e11166, 0x6ec92904, + 0x10b161a2, 0x3a9959c0, 0xec41f0ee, 0xc669c88c, 0xb811802a, + 0x9239b848}, + {0x00000000, 0x4713f6fb, 0x8e27edf6, 0xc9341b0d, 0xc73eddad, + 0x802d2b56, 0x4919305b, 0x0e0ac6a0, 0x550cbd1b, 0x121f4be0, + 0xdb2b50ed, 0x9c38a616, 0x923260b6, 0xd521964d, 0x1c158d40, + 0x5b067bbb, 0xaa197a36, 0xed0a8ccd, 0x243e97c0, 0x632d613b, + 0x6d27a79b, 0x2a345160, 0xe3004a6d, 0xa413bc96, 0xff15c72d, + 0xb80631d6, 0x71322adb, 0x3621dc20, 0x382b1a80, 0x7f38ec7b, + 0xb60cf776, 0xf11f018d, 0x8f43f22d, 0xc85004d6, 0x01641fdb, + 0x4677e920, 0x487d2f80, 0x0f6ed97b, 0xc65ac276, 0x8149348d, + 0xda4f4f36, 0x9d5cb9cd, 0x5468a2c0, 0x137b543b, 0x1d71929b, + 0x5a626460, 0x93567f6d, 0xd4458996, 0x255a881b, 0x62497ee0, + 0xab7d65ed, 0xec6e9316, 0xe26455b6, 0xa577a34d, 0x6c43b840, + 0x2b504ebb, 0x70563500, 0x3745c3fb, 0xfe71d8f6, 0xb9622e0d, + 0xb768e8ad, 0xf07b1e56, 0x394f055b, 0x7e5cf3a0, 0xc5f6e21b, + 0x82e514e0, 0x4bd10fed, 0x0cc2f916, 0x02c83fb6, 0x45dbc94d, + 0x8cefd240, 0xcbfc24bb, 0x90fa5f00, 0xd7e9a9fb, 0x1eddb2f6, + 0x59ce440d, 0x57c482ad, 0x10d77456, 0xd9e36f5b, 0x9ef099a0, + 0x6fef982d, 0x28fc6ed6, 0xe1c875db, 0xa6db8320, 0xa8d14580, + 0xefc2b37b, 0x26f6a876, 0x61e55e8d, 0x3ae32536, 0x7df0d3cd, + 0xb4c4c8c0, 0xf3d73e3b, 0xfdddf89b, 0xbace0e60, 0x73fa156d, + 0x34e9e396, 0x4ab51036, 0x0da6e6cd, 0xc492fdc0, 0x83810b3b, + 0x8d8bcd9b, 0xca983b60, 0x03ac206d, 0x44bfd696, 0x1fb9ad2d, + 0x58aa5bd6, 0x919e40db, 0xd68db620, 0xd8877080, 0x9f94867b, + 0x56a09d76, 0x11b36b8d, 0xe0ac6a00, 0xa7bf9cfb, 0x6e8b87f6, + 0x2998710d, 0x2792b7ad, 0x60814156, 0xa9b55a5b, 0xeea6aca0, + 0xb5a0d71b, 0xf2b321e0, 0x3b873aed, 0x7c94cc16, 0x729e0ab6, + 0x358dfc4d, 0xfcb9e740, 0xbbaa11bb, 0x509cc277, 0x178f348c, + 0xdebb2f81, 0x99a8d97a, 0x97a21fda, 0xd0b1e921, 0x1985f22c, + 0x5e9604d7, 0x05907f6c, 0x42838997, 0x8bb7929a, 0xcca46461, + 0xc2aea2c1, 0x85bd543a, 0x4c894f37, 0x0b9ab9cc, 0xfa85b841, + 0xbd964eba, 0x74a255b7, 0x33b1a34c, 0x3dbb65ec, 0x7aa89317, + 0xb39c881a, 0xf48f7ee1, 0xaf89055a, 0xe89af3a1, 0x21aee8ac, + 0x66bd1e57, 0x68b7d8f7, 0x2fa42e0c, 0xe6903501, 0xa183c3fa, + 0xdfdf305a, 0x98ccc6a1, 0x51f8ddac, 0x16eb2b57, 0x18e1edf7, + 0x5ff21b0c, 0x96c60001, 0xd1d5f6fa, 0x8ad38d41, 0xcdc07bba, + 0x04f460b7, 0x43e7964c, 0x4ded50ec, 0x0afea617, 0xc3cabd1a, + 0x84d94be1, 0x75c64a6c, 0x32d5bc97, 0xfbe1a79a, 0xbcf25161, + 0xb2f897c1, 0xf5eb613a, 0x3cdf7a37, 0x7bcc8ccc, 0x20caf777, + 0x67d9018c, 0xaeed1a81, 0xe9feec7a, 0xe7f42ada, 0xa0e7dc21, + 0x69d3c72c, 0x2ec031d7, 0x956a206c, 0xd279d697, 0x1b4dcd9a, + 0x5c5e3b61, 0x5254fdc1, 0x15470b3a, 0xdc731037, 0x9b60e6cc, + 0xc0669d77, 0x87756b8c, 0x4e417081, 0x0952867a, 0x075840da, + 0x404bb621, 0x897fad2c, 0xce6c5bd7, 0x3f735a5a, 0x7860aca1, + 0xb154b7ac, 0xf6474157, 0xf84d87f7, 0xbf5e710c, 0x766a6a01, + 0x31799cfa, 0x6a7fe741, 0x2d6c11ba, 0xe4580ab7, 0xa34bfc4c, + 0xad413aec, 0xea52cc17, 0x2366d71a, 0x647521e1, 0x1a29d241, + 0x5d3a24ba, 0x940e3fb7, 0xd31dc94c, 0xdd170fec, 0x9a04f917, + 0x5330e21a, 0x142314e1, 0x4f256f5a, 0x083699a1, 0xc10282ac, + 0x86117457, 0x881bb2f7, 0xcf08440c, 0x063c5f01, 0x412fa9fa, + 0xb030a877, 0xf7235e8c, 0x3e174581, 0x7904b37a, 0x770e75da, + 0x301d8321, 0xf929982c, 0xbe3a6ed7, 0xe53c156c, 0xa22fe397, + 0x6b1bf89a, 0x2c080e61, 0x2202c8c1, 0x65113e3a, 0xac252537, + 0xeb36d3cc}, + {0x00000000, 0xa13984ee, 0x99020f9d, 0x383b8b73, 0xe975197b, + 0x484c9d95, 0x707716e6, 0xd14e9208, 0x099b34b7, 0xa8a2b059, + 0x90993b2a, 0x31a0bfc4, 0xe0ee2dcc, 0x41d7a922, 0x79ec2251, + 0xd8d5a6bf, 0x1336696e, 0xb20fed80, 0x8a3466f3, 0x2b0de21d, + 0xfa437015, 0x5b7af4fb, 0x63417f88, 0xc278fb66, 0x1aad5dd9, + 0xbb94d937, 0x83af5244, 0x2296d6aa, 0xf3d844a2, 0x52e1c04c, + 0x6ada4b3f, 0xcbe3cfd1, 0x266cd2dc, 0x87555632, 0xbf6edd41, + 0x1e5759af, 0xcf19cba7, 0x6e204f49, 0x561bc43a, 0xf72240d4, + 0x2ff7e66b, 0x8ece6285, 0xb6f5e9f6, 0x17cc6d18, 0xc682ff10, + 0x67bb7bfe, 0x5f80f08d, 0xfeb97463, 0x355abbb2, 0x94633f5c, + 0xac58b42f, 0x0d6130c1, 0xdc2fa2c9, 0x7d162627, 0x452dad54, + 0xe41429ba, 0x3cc18f05, 0x9df80beb, 0xa5c38098, 0x04fa0476, + 0xd5b4967e, 0x748d1290, 0x4cb699e3, 0xed8f1d0d, 0x4cd9a5b8, + 0xede02156, 0xd5dbaa25, 0x74e22ecb, 0xa5acbcc3, 0x0495382d, + 0x3caeb35e, 0x9d9737b0, 0x4542910f, 0xe47b15e1, 0xdc409e92, + 0x7d791a7c, 0xac378874, 0x0d0e0c9a, 0x353587e9, 0x940c0307, + 0x5fefccd6, 0xfed64838, 0xc6edc34b, 0x67d447a5, 0xb69ad5ad, + 0x17a35143, 0x2f98da30, 0x8ea15ede, 0x5674f861, 0xf74d7c8f, + 0xcf76f7fc, 0x6e4f7312, 0xbf01e11a, 0x1e3865f4, 0x2603ee87, + 0x873a6a69, 0x6ab57764, 0xcb8cf38a, 0xf3b778f9, 0x528efc17, + 0x83c06e1f, 0x22f9eaf1, 0x1ac26182, 0xbbfbe56c, 0x632e43d3, + 0xc217c73d, 0xfa2c4c4e, 0x5b15c8a0, 0x8a5b5aa8, 0x2b62de46, + 0x13595535, 0xb260d1db, 0x79831e0a, 0xd8ba9ae4, 0xe0811197, + 0x41b89579, 0x90f60771, 0x31cf839f, 0x09f408ec, 0xa8cd8c02, + 0x70182abd, 0xd121ae53, 0xe91a2520, 0x4823a1ce, 0x996d33c6, + 0x3854b728, 0x006f3c5b, 0xa156b8b5, 0x99b34b70, 0x388acf9e, + 0x00b144ed, 0xa188c003, 0x70c6520b, 0xd1ffd6e5, 0xe9c45d96, + 0x48fdd978, 0x90287fc7, 0x3111fb29, 0x092a705a, 0xa813f4b4, + 0x795d66bc, 0xd864e252, 0xe05f6921, 0x4166edcf, 0x8a85221e, + 0x2bbca6f0, 0x13872d83, 0xb2bea96d, 0x63f03b65, 0xc2c9bf8b, + 0xfaf234f8, 0x5bcbb016, 0x831e16a9, 0x22279247, 0x1a1c1934, + 0xbb259dda, 0x6a6b0fd2, 0xcb528b3c, 0xf369004f, 0x525084a1, + 0xbfdf99ac, 0x1ee61d42, 0x26dd9631, 0x87e412df, 0x56aa80d7, + 0xf7930439, 0xcfa88f4a, 0x6e910ba4, 0xb644ad1b, 0x177d29f5, + 0x2f46a286, 0x8e7f2668, 0x5f31b460, 0xfe08308e, 0xc633bbfd, + 0x670a3f13, 0xace9f0c2, 0x0dd0742c, 0x35ebff5f, 0x94d27bb1, + 0x459ce9b9, 0xe4a56d57, 0xdc9ee624, 0x7da762ca, 0xa572c475, + 0x044b409b, 0x3c70cbe8, 0x9d494f06, 0x4c07dd0e, 0xed3e59e0, + 0xd505d293, 0x743c567d, 0xd56aeec8, 0x74536a26, 0x4c68e155, + 0xed5165bb, 0x3c1ff7b3, 0x9d26735d, 0xa51df82e, 0x04247cc0, + 0xdcf1da7f, 0x7dc85e91, 0x45f3d5e2, 0xe4ca510c, 0x3584c304, + 0x94bd47ea, 0xac86cc99, 0x0dbf4877, 0xc65c87a6, 0x67650348, + 0x5f5e883b, 0xfe670cd5, 0x2f299edd, 0x8e101a33, 0xb62b9140, + 0x171215ae, 0xcfc7b311, 0x6efe37ff, 0x56c5bc8c, 0xf7fc3862, + 0x26b2aa6a, 0x878b2e84, 0xbfb0a5f7, 0x1e892119, 0xf3063c14, + 0x523fb8fa, 0x6a043389, 0xcb3db767, 0x1a73256f, 0xbb4aa181, + 0x83712af2, 0x2248ae1c, 0xfa9d08a3, 0x5ba48c4d, 0x639f073e, + 0xc2a683d0, 0x13e811d8, 0xb2d19536, 0x8aea1e45, 0x2bd39aab, + 0xe030557a, 0x4109d194, 0x79325ae7, 0xd80bde09, 0x09454c01, + 0xa87cc8ef, 0x9047439c, 0x317ec772, 0xe9ab61cd, 0x4892e523, + 0x70a96e50, 0xd190eabe, 0x00de78b6, 0xa1e7fc58, 0x99dc772b, + 0x38e5f3c5}, + {0x00000000, 0xe81790a1, 0x0b5e2703, 0xe349b7a2, 0x16bc4e06, + 0xfeabdea7, 0x1de26905, 0xf5f5f9a4, 0x2d789c0c, 0xc56f0cad, + 0x2626bb0f, 0xce312bae, 0x3bc4d20a, 0xd3d342ab, 0x309af509, + 0xd88d65a8, 0x5af13818, 0xb2e6a8b9, 0x51af1f1b, 0xb9b88fba, + 0x4c4d761e, 0xa45ae6bf, 0x4713511d, 0xaf04c1bc, 0x7789a414, + 0x9f9e34b5, 0x7cd78317, 0x94c013b6, 0x6135ea12, 0x89227ab3, + 0x6a6bcd11, 0x827c5db0, 0xb5e27030, 0x5df5e091, 0xbebc5733, + 0x56abc792, 0xa35e3e36, 0x4b49ae97, 0xa8001935, 0x40178994, + 0x989aec3c, 0x708d7c9d, 0x93c4cb3f, 0x7bd35b9e, 0x8e26a23a, + 0x6631329b, 0x85788539, 0x6d6f1598, 0xef134828, 0x0704d889, + 0xe44d6f2b, 0x0c5aff8a, 0xf9af062e, 0x11b8968f, 0xf2f1212d, + 0x1ae6b18c, 0xc26bd424, 0x2a7c4485, 0xc935f327, 0x21226386, + 0xd4d79a22, 0x3cc00a83, 0xdf89bd21, 0x379e2d80, 0xb0b5e621, + 0x58a27680, 0xbbebc122, 0x53fc5183, 0xa609a827, 0x4e1e3886, + 0xad578f24, 0x45401f85, 0x9dcd7a2d, 0x75daea8c, 0x96935d2e, + 0x7e84cd8f, 0x8b71342b, 0x6366a48a, 0x802f1328, 0x68388389, + 0xea44de39, 0x02534e98, 0xe11af93a, 0x090d699b, 0xfcf8903f, + 0x14ef009e, 0xf7a6b73c, 0x1fb1279d, 0xc73c4235, 0x2f2bd294, + 0xcc626536, 0x2475f597, 0xd1800c33, 0x39979c92, 0xdade2b30, + 0x32c9bb91, 0x05579611, 0xed4006b0, 0x0e09b112, 0xe61e21b3, + 0x13ebd817, 0xfbfc48b6, 0x18b5ff14, 0xf0a26fb5, 0x282f0a1d, + 0xc0389abc, 0x23712d1e, 0xcb66bdbf, 0x3e93441b, 0xd684d4ba, + 0x35cd6318, 0xdddaf3b9, 0x5fa6ae09, 0xb7b13ea8, 0x54f8890a, + 0xbcef19ab, 0x491ae00f, 0xa10d70ae, 0x4244c70c, 0xaa5357ad, + 0x72de3205, 0x9ac9a2a4, 0x79801506, 0x919785a7, 0x64627c03, + 0x8c75eca2, 0x6f3c5b00, 0x872bcba1, 0xba1aca03, 0x520d5aa2, + 0xb144ed00, 0x59537da1, 0xaca68405, 0x44b114a4, 0xa7f8a306, + 0x4fef33a7, 0x9762560f, 0x7f75c6ae, 0x9c3c710c, 0x742be1ad, + 0x81de1809, 0x69c988a8, 0x8a803f0a, 0x6297afab, 0xe0ebf21b, + 0x08fc62ba, 0xebb5d518, 0x03a245b9, 0xf657bc1d, 0x1e402cbc, + 0xfd099b1e, 0x151e0bbf, 0xcd936e17, 0x2584feb6, 0xc6cd4914, + 0x2edad9b5, 0xdb2f2011, 0x3338b0b0, 0xd0710712, 0x386697b3, + 0x0ff8ba33, 0xe7ef2a92, 0x04a69d30, 0xecb10d91, 0x1944f435, + 0xf1536494, 0x121ad336, 0xfa0d4397, 0x2280263f, 0xca97b69e, + 0x29de013c, 0xc1c9919d, 0x343c6839, 0xdc2bf898, 0x3f624f3a, + 0xd775df9b, 0x5509822b, 0xbd1e128a, 0x5e57a528, 0xb6403589, + 0x43b5cc2d, 0xaba25c8c, 0x48ebeb2e, 0xa0fc7b8f, 0x78711e27, + 0x90668e86, 0x732f3924, 0x9b38a985, 0x6ecd5021, 0x86dac080, + 0x65937722, 0x8d84e783, 0x0aaf2c22, 0xe2b8bc83, 0x01f10b21, + 0xe9e69b80, 0x1c136224, 0xf404f285, 0x174d4527, 0xff5ad586, + 0x27d7b02e, 0xcfc0208f, 0x2c89972d, 0xc49e078c, 0x316bfe28, + 0xd97c6e89, 0x3a35d92b, 0xd222498a, 0x505e143a, 0xb849849b, + 0x5b003339, 0xb317a398, 0x46e25a3c, 0xaef5ca9d, 0x4dbc7d3f, + 0xa5abed9e, 0x7d268836, 0x95311897, 0x7678af35, 0x9e6f3f94, + 0x6b9ac630, 0x838d5691, 0x60c4e133, 0x88d37192, 0xbf4d5c12, + 0x575accb3, 0xb4137b11, 0x5c04ebb0, 0xa9f11214, 0x41e682b5, + 0xa2af3517, 0x4ab8a5b6, 0x9235c01e, 0x7a2250bf, 0x996be71d, + 0x717c77bc, 0x84898e18, 0x6c9e1eb9, 0x8fd7a91b, 0x67c039ba, + 0xe5bc640a, 0x0dabf4ab, 0xeee24309, 0x06f5d3a8, 0xf3002a0c, + 0x1b17baad, 0xf85e0d0f, 0x10499dae, 0xc8c4f806, 0x20d368a7, + 0xc39adf05, 0x2b8d4fa4, 0xde78b600, 0x366f26a1, 0xd5269103, + 0x3d3101a2}}; + +local const z_word_t FAR crc_braid_big_table[][256] = { + {0x0000000000000000, 0xa19017e800000000, 0x03275e0b00000000, + 0xa2b749e300000000, 0x064ebc1600000000, 0xa7deabfe00000000, + 0x0569e21d00000000, 0xa4f9f5f500000000, 0x0c9c782d00000000, + 0xad0c6fc500000000, 0x0fbb262600000000, 0xae2b31ce00000000, + 0x0ad2c43b00000000, 0xab42d3d300000000, 0x09f59a3000000000, + 0xa8658dd800000000, 0x1838f15a00000000, 0xb9a8e6b200000000, + 0x1b1faf5100000000, 0xba8fb8b900000000, 0x1e764d4c00000000, + 0xbfe65aa400000000, 0x1d51134700000000, 0xbcc104af00000000, + 0x14a4897700000000, 0xb5349e9f00000000, 0x1783d77c00000000, + 0xb613c09400000000, 0x12ea356100000000, 0xb37a228900000000, + 0x11cd6b6a00000000, 0xb05d7c8200000000, 0x3070e2b500000000, + 0x91e0f55d00000000, 0x3357bcbe00000000, 0x92c7ab5600000000, + 0x363e5ea300000000, 0x97ae494b00000000, 0x351900a800000000, + 0x9489174000000000, 0x3cec9a9800000000, 0x9d7c8d7000000000, + 0x3fcbc49300000000, 0x9e5bd37b00000000, 0x3aa2268e00000000, + 0x9b32316600000000, 0x3985788500000000, 0x98156f6d00000000, + 0x284813ef00000000, 0x89d8040700000000, 0x2b6f4de400000000, + 0x8aff5a0c00000000, 0x2e06aff900000000, 0x8f96b81100000000, + 0x2d21f1f200000000, 0x8cb1e61a00000000, 0x24d46bc200000000, + 0x85447c2a00000000, 0x27f335c900000000, 0x8663222100000000, + 0x229ad7d400000000, 0x830ac03c00000000, 0x21bd89df00000000, + 0x802d9e3700000000, 0x21e6b5b000000000, 0x8076a25800000000, + 0x22c1ebbb00000000, 0x8351fc5300000000, 0x27a809a600000000, + 0x86381e4e00000000, 0x248f57ad00000000, 0x851f404500000000, + 0x2d7acd9d00000000, 0x8ceada7500000000, 0x2e5d939600000000, + 0x8fcd847e00000000, 0x2b34718b00000000, 0x8aa4666300000000, + 0x28132f8000000000, 0x8983386800000000, 0x39de44ea00000000, + 0x984e530200000000, 0x3af91ae100000000, 0x9b690d0900000000, + 0x3f90f8fc00000000, 0x9e00ef1400000000, 0x3cb7a6f700000000, + 0x9d27b11f00000000, 0x35423cc700000000, 0x94d22b2f00000000, + 0x366562cc00000000, 0x97f5752400000000, 0x330c80d100000000, + 0x929c973900000000, 0x302bdeda00000000, 0x91bbc93200000000, + 0x1196570500000000, 0xb00640ed00000000, 0x12b1090e00000000, + 0xb3211ee600000000, 0x17d8eb1300000000, 0xb648fcfb00000000, + 0x14ffb51800000000, 0xb56fa2f000000000, 0x1d0a2f2800000000, + 0xbc9a38c000000000, 0x1e2d712300000000, 0xbfbd66cb00000000, + 0x1b44933e00000000, 0xbad484d600000000, 0x1863cd3500000000, + 0xb9f3dadd00000000, 0x09aea65f00000000, 0xa83eb1b700000000, + 0x0a89f85400000000, 0xab19efbc00000000, 0x0fe01a4900000000, + 0xae700da100000000, 0x0cc7444200000000, 0xad5753aa00000000, + 0x0532de7200000000, 0xa4a2c99a00000000, 0x0615807900000000, + 0xa785979100000000, 0x037c626400000000, 0xa2ec758c00000000, + 0x005b3c6f00000000, 0xa1cb2b8700000000, 0x03ca1aba00000000, + 0xa25a0d5200000000, 0x00ed44b100000000, 0xa17d535900000000, + 0x0584a6ac00000000, 0xa414b14400000000, 0x06a3f8a700000000, + 0xa733ef4f00000000, 0x0f56629700000000, 0xaec6757f00000000, + 0x0c713c9c00000000, 0xade12b7400000000, 0x0918de8100000000, + 0xa888c96900000000, 0x0a3f808a00000000, 0xabaf976200000000, + 0x1bf2ebe000000000, 0xba62fc0800000000, 0x18d5b5eb00000000, + 0xb945a20300000000, 0x1dbc57f600000000, 0xbc2c401e00000000, + 0x1e9b09fd00000000, 0xbf0b1e1500000000, 0x176e93cd00000000, + 0xb6fe842500000000, 0x1449cdc600000000, 0xb5d9da2e00000000, + 0x11202fdb00000000, 0xb0b0383300000000, 0x120771d000000000, + 0xb397663800000000, 0x33baf80f00000000, 0x922aefe700000000, + 0x309da60400000000, 0x910db1ec00000000, 0x35f4441900000000, + 0x946453f100000000, 0x36d31a1200000000, 0x97430dfa00000000, + 0x3f26802200000000, 0x9eb697ca00000000, 0x3c01de2900000000, + 0x9d91c9c100000000, 0x39683c3400000000, 0x98f82bdc00000000, + 0x3a4f623f00000000, 0x9bdf75d700000000, 0x2b82095500000000, + 0x8a121ebd00000000, 0x28a5575e00000000, 0x893540b600000000, + 0x2dccb54300000000, 0x8c5ca2ab00000000, 0x2eebeb4800000000, + 0x8f7bfca000000000, 0x271e717800000000, 0x868e669000000000, + 0x24392f7300000000, 0x85a9389b00000000, 0x2150cd6e00000000, + 0x80c0da8600000000, 0x2277936500000000, 0x83e7848d00000000, + 0x222caf0a00000000, 0x83bcb8e200000000, 0x210bf10100000000, + 0x809be6e900000000, 0x2462131c00000000, 0x85f204f400000000, + 0x27454d1700000000, 0x86d55aff00000000, 0x2eb0d72700000000, + 0x8f20c0cf00000000, 0x2d97892c00000000, 0x8c079ec400000000, + 0x28fe6b3100000000, 0x896e7cd900000000, 0x2bd9353a00000000, + 0x8a4922d200000000, 0x3a145e5000000000, 0x9b8449b800000000, + 0x3933005b00000000, 0x98a317b300000000, 0x3c5ae24600000000, + 0x9dcaf5ae00000000, 0x3f7dbc4d00000000, 0x9eedaba500000000, + 0x3688267d00000000, 0x9718319500000000, 0x35af787600000000, + 0x943f6f9e00000000, 0x30c69a6b00000000, 0x91568d8300000000, + 0x33e1c46000000000, 0x9271d38800000000, 0x125c4dbf00000000, + 0xb3cc5a5700000000, 0x117b13b400000000, 0xb0eb045c00000000, + 0x1412f1a900000000, 0xb582e64100000000, 0x1735afa200000000, + 0xb6a5b84a00000000, 0x1ec0359200000000, 0xbf50227a00000000, + 0x1de76b9900000000, 0xbc777c7100000000, 0x188e898400000000, + 0xb91e9e6c00000000, 0x1ba9d78f00000000, 0xba39c06700000000, + 0x0a64bce500000000, 0xabf4ab0d00000000, 0x0943e2ee00000000, + 0xa8d3f50600000000, 0x0c2a00f300000000, 0xadba171b00000000, + 0x0f0d5ef800000000, 0xae9d491000000000, 0x06f8c4c800000000, + 0xa768d32000000000, 0x05df9ac300000000, 0xa44f8d2b00000000, + 0x00b678de00000000, 0xa1266f3600000000, 0x039126d500000000, + 0xa201313d00000000}, + {0x0000000000000000, 0xee8439a100000000, 0x9d0f029900000000, + 0x738b3b3800000000, 0x7b1975e900000000, 0x959d4c4800000000, + 0xe616777000000000, 0x08924ed100000000, 0xb7349b0900000000, + 0x59b0a2a800000000, 0x2a3b999000000000, 0xc4bfa03100000000, + 0xcc2deee000000000, 0x22a9d74100000000, 0x5122ec7900000000, + 0xbfa6d5d800000000, 0x6e69361300000000, 0x80ed0fb200000000, + 0xf366348a00000000, 0x1de20d2b00000000, 0x157043fa00000000, + 0xfbf47a5b00000000, 0x887f416300000000, 0x66fb78c200000000, + 0xd95dad1a00000000, 0x37d994bb00000000, 0x4452af8300000000, + 0xaad6962200000000, 0xa244d8f300000000, 0x4cc0e15200000000, + 0x3f4bda6a00000000, 0xd1cfe3cb00000000, 0xdcd26c2600000000, + 0x3256558700000000, 0x41dd6ebf00000000, 0xaf59571e00000000, + 0xa7cb19cf00000000, 0x494f206e00000000, 0x3ac41b5600000000, + 0xd44022f700000000, 0x6be6f72f00000000, 0x8562ce8e00000000, + 0xf6e9f5b600000000, 0x186dcc1700000000, 0x10ff82c600000000, + 0xfe7bbb6700000000, 0x8df0805f00000000, 0x6374b9fe00000000, + 0xb2bb5a3500000000, 0x5c3f639400000000, 0x2fb458ac00000000, + 0xc130610d00000000, 0xc9a22fdc00000000, 0x2726167d00000000, + 0x54ad2d4500000000, 0xba2914e400000000, 0x058fc13c00000000, + 0xeb0bf89d00000000, 0x9880c3a500000000, 0x7604fa0400000000, + 0x7e96b4d500000000, 0x90128d7400000000, 0xe399b64c00000000, + 0x0d1d8fed00000000, 0xb8a5d94c00000000, 0x5621e0ed00000000, + 0x25aadbd500000000, 0xcb2ee27400000000, 0xc3bcaca500000000, + 0x2d38950400000000, 0x5eb3ae3c00000000, 0xb037979d00000000, + 0x0f91424500000000, 0xe1157be400000000, 0x929e40dc00000000, + 0x7c1a797d00000000, 0x748837ac00000000, 0x9a0c0e0d00000000, + 0xe987353500000000, 0x07030c9400000000, 0xd6ccef5f00000000, + 0x3848d6fe00000000, 0x4bc3edc600000000, 0xa547d46700000000, + 0xadd59ab600000000, 0x4351a31700000000, 0x30da982f00000000, + 0xde5ea18e00000000, 0x61f8745600000000, 0x8f7c4df700000000, + 0xfcf776cf00000000, 0x12734f6e00000000, 0x1ae101bf00000000, + 0xf465381e00000000, 0x87ee032600000000, 0x696a3a8700000000, + 0x6477b56a00000000, 0x8af38ccb00000000, 0xf978b7f300000000, + 0x17fc8e5200000000, 0x1f6ec08300000000, 0xf1eaf92200000000, + 0x8261c21a00000000, 0x6ce5fbbb00000000, 0xd3432e6300000000, + 0x3dc717c200000000, 0x4e4c2cfa00000000, 0xa0c8155b00000000, + 0xa85a5b8a00000000, 0x46de622b00000000, 0x3555591300000000, + 0xdbd160b200000000, 0x0a1e837900000000, 0xe49abad800000000, + 0x971181e000000000, 0x7995b84100000000, 0x7107f69000000000, + 0x9f83cf3100000000, 0xec08f40900000000, 0x028ccda800000000, + 0xbd2a187000000000, 0x53ae21d100000000, 0x20251ae900000000, + 0xcea1234800000000, 0xc6336d9900000000, 0x28b7543800000000, + 0x5b3c6f0000000000, 0xb5b856a100000000, 0x704bb39900000000, + 0x9ecf8a3800000000, 0xed44b10000000000, 0x03c088a100000000, + 0x0b52c67000000000, 0xe5d6ffd100000000, 0x965dc4e900000000, + 0x78d9fd4800000000, 0xc77f289000000000, 0x29fb113100000000, + 0x5a702a0900000000, 0xb4f413a800000000, 0xbc665d7900000000, + 0x52e264d800000000, 0x21695fe000000000, 0xcfed664100000000, + 0x1e22858a00000000, 0xf0a6bc2b00000000, 0x832d871300000000, + 0x6da9beb200000000, 0x653bf06300000000, 0x8bbfc9c200000000, + 0xf834f2fa00000000, 0x16b0cb5b00000000, 0xa9161e8300000000, + 0x4792272200000000, 0x34191c1a00000000, 0xda9d25bb00000000, + 0xd20f6b6a00000000, 0x3c8b52cb00000000, 0x4f0069f300000000, + 0xa184505200000000, 0xac99dfbf00000000, 0x421de61e00000000, + 0x3196dd2600000000, 0xdf12e48700000000, 0xd780aa5600000000, + 0x390493f700000000, 0x4a8fa8cf00000000, 0xa40b916e00000000, + 0x1bad44b600000000, 0xf5297d1700000000, 0x86a2462f00000000, + 0x68267f8e00000000, 0x60b4315f00000000, 0x8e3008fe00000000, + 0xfdbb33c600000000, 0x133f0a6700000000, 0xc2f0e9ac00000000, + 0x2c74d00d00000000, 0x5fffeb3500000000, 0xb17bd29400000000, + 0xb9e99c4500000000, 0x576da5e400000000, 0x24e69edc00000000, + 0xca62a77d00000000, 0x75c472a500000000, 0x9b404b0400000000, + 0xe8cb703c00000000, 0x064f499d00000000, 0x0edd074c00000000, + 0xe0593eed00000000, 0x93d205d500000000, 0x7d563c7400000000, + 0xc8ee6ad500000000, 0x266a537400000000, 0x55e1684c00000000, + 0xbb6551ed00000000, 0xb3f71f3c00000000, 0x5d73269d00000000, + 0x2ef81da500000000, 0xc07c240400000000, 0x7fdaf1dc00000000, + 0x915ec87d00000000, 0xe2d5f34500000000, 0x0c51cae400000000, + 0x04c3843500000000, 0xea47bd9400000000, 0x99cc86ac00000000, + 0x7748bf0d00000000, 0xa6875cc600000000, 0x4803656700000000, + 0x3b885e5f00000000, 0xd50c67fe00000000, 0xdd9e292f00000000, + 0x331a108e00000000, 0x40912bb600000000, 0xae15121700000000, + 0x11b3c7cf00000000, 0xff37fe6e00000000, 0x8cbcc55600000000, + 0x6238fcf700000000, 0x6aaab22600000000, 0x842e8b8700000000, + 0xf7a5b0bf00000000, 0x1921891e00000000, 0x143c06f300000000, + 0xfab83f5200000000, 0x8933046a00000000, 0x67b73dcb00000000, + 0x6f25731a00000000, 0x81a14abb00000000, 0xf22a718300000000, + 0x1cae482200000000, 0xa3089dfa00000000, 0x4d8ca45b00000000, + 0x3e079f6300000000, 0xd083a6c200000000, 0xd811e81300000000, + 0x3695d1b200000000, 0x451eea8a00000000, 0xab9ad32b00000000, + 0x7a5530e000000000, 0x94d1094100000000, 0xe75a327900000000, + 0x09de0bd800000000, 0x014c450900000000, 0xefc87ca800000000, + 0x9c43479000000000, 0x72c77e3100000000, 0xcd61abe900000000, + 0x23e5924800000000, 0x506ea97000000000, 0xbeea90d100000000, + 0xb678de0000000000, 0x58fce7a100000000, 0x2b77dc9900000000, + 0xc5f3e53800000000}, + {0x0000000000000000, 0xfbf6134700000000, 0xf6ed278e00000000, + 0x0d1b34c900000000, 0xaddd3ec700000000, 0x562b2d8000000000, + 0x5b30194900000000, 0xa0c60a0e00000000, 0x1bbd0c5500000000, + 0xe04b1f1200000000, 0xed502bdb00000000, 0x16a6389c00000000, + 0xb660329200000000, 0x4d9621d500000000, 0x408d151c00000000, + 0xbb7b065b00000000, 0x367a19aa00000000, 0xcd8c0aed00000000, + 0xc0973e2400000000, 0x3b612d6300000000, 0x9ba7276d00000000, + 0x6051342a00000000, 0x6d4a00e300000000, 0x96bc13a400000000, + 0x2dc715ff00000000, 0xd63106b800000000, 0xdb2a327100000000, + 0x20dc213600000000, 0x801a2b3800000000, 0x7bec387f00000000, + 0x76f70cb600000000, 0x8d011ff100000000, 0x2df2438f00000000, + 0xd60450c800000000, 0xdb1f640100000000, 0x20e9774600000000, + 0x802f7d4800000000, 0x7bd96e0f00000000, 0x76c25ac600000000, + 0x8d34498100000000, 0x364f4fda00000000, 0xcdb95c9d00000000, + 0xc0a2685400000000, 0x3b547b1300000000, 0x9b92711d00000000, + 0x6064625a00000000, 0x6d7f569300000000, 0x968945d400000000, + 0x1b885a2500000000, 0xe07e496200000000, 0xed657dab00000000, + 0x16936eec00000000, 0xb65564e200000000, 0x4da377a500000000, + 0x40b8436c00000000, 0xbb4e502b00000000, 0x0035567000000000, + 0xfbc3453700000000, 0xf6d871fe00000000, 0x0d2e62b900000000, + 0xade868b700000000, 0x561e7bf000000000, 0x5b054f3900000000, + 0xa0f35c7e00000000, 0x1be2f6c500000000, 0xe014e58200000000, + 0xed0fd14b00000000, 0x16f9c20c00000000, 0xb63fc80200000000, + 0x4dc9db4500000000, 0x40d2ef8c00000000, 0xbb24fccb00000000, + 0x005ffa9000000000, 0xfba9e9d700000000, 0xf6b2dd1e00000000, + 0x0d44ce5900000000, 0xad82c45700000000, 0x5674d71000000000, + 0x5b6fe3d900000000, 0xa099f09e00000000, 0x2d98ef6f00000000, + 0xd66efc2800000000, 0xdb75c8e100000000, 0x2083dba600000000, + 0x8045d1a800000000, 0x7bb3c2ef00000000, 0x76a8f62600000000, + 0x8d5ee56100000000, 0x3625e33a00000000, 0xcdd3f07d00000000, + 0xc0c8c4b400000000, 0x3b3ed7f300000000, 0x9bf8ddfd00000000, + 0x600eceba00000000, 0x6d15fa7300000000, 0x96e3e93400000000, + 0x3610b54a00000000, 0xcde6a60d00000000, 0xc0fd92c400000000, + 0x3b0b818300000000, 0x9bcd8b8d00000000, 0x603b98ca00000000, + 0x6d20ac0300000000, 0x96d6bf4400000000, 0x2dadb91f00000000, + 0xd65baa5800000000, 0xdb409e9100000000, 0x20b68dd600000000, + 0x807087d800000000, 0x7b86949f00000000, 0x769da05600000000, + 0x8d6bb31100000000, 0x006aace000000000, 0xfb9cbfa700000000, + 0xf6878b6e00000000, 0x0d71982900000000, 0xadb7922700000000, + 0x5641816000000000, 0x5b5ab5a900000000, 0xa0aca6ee00000000, + 0x1bd7a0b500000000, 0xe021b3f200000000, 0xed3a873b00000000, + 0x16cc947c00000000, 0xb60a9e7200000000, 0x4dfc8d3500000000, + 0x40e7b9fc00000000, 0xbb11aabb00000000, 0x77c29c5000000000, + 0x8c348f1700000000, 0x812fbbde00000000, 0x7ad9a89900000000, + 0xda1fa29700000000, 0x21e9b1d000000000, 0x2cf2851900000000, + 0xd704965e00000000, 0x6c7f900500000000, 0x9789834200000000, + 0x9a92b78b00000000, 0x6164a4cc00000000, 0xc1a2aec200000000, + 0x3a54bd8500000000, 0x374f894c00000000, 0xccb99a0b00000000, + 0x41b885fa00000000, 0xba4e96bd00000000, 0xb755a27400000000, + 0x4ca3b13300000000, 0xec65bb3d00000000, 0x1793a87a00000000, + 0x1a889cb300000000, 0xe17e8ff400000000, 0x5a0589af00000000, + 0xa1f39ae800000000, 0xace8ae2100000000, 0x571ebd6600000000, + 0xf7d8b76800000000, 0x0c2ea42f00000000, 0x013590e600000000, + 0xfac383a100000000, 0x5a30dfdf00000000, 0xa1c6cc9800000000, + 0xacddf85100000000, 0x572beb1600000000, 0xf7ede11800000000, + 0x0c1bf25f00000000, 0x0100c69600000000, 0xfaf6d5d100000000, + 0x418dd38a00000000, 0xba7bc0cd00000000, 0xb760f40400000000, + 0x4c96e74300000000, 0xec50ed4d00000000, 0x17a6fe0a00000000, + 0x1abdcac300000000, 0xe14bd98400000000, 0x6c4ac67500000000, + 0x97bcd53200000000, 0x9aa7e1fb00000000, 0x6151f2bc00000000, + 0xc197f8b200000000, 0x3a61ebf500000000, 0x377adf3c00000000, + 0xcc8ccc7b00000000, 0x77f7ca2000000000, 0x8c01d96700000000, + 0x811aedae00000000, 0x7aecfee900000000, 0xda2af4e700000000, + 0x21dce7a000000000, 0x2cc7d36900000000, 0xd731c02e00000000, + 0x6c206a9500000000, 0x97d679d200000000, 0x9acd4d1b00000000, + 0x613b5e5c00000000, 0xc1fd545200000000, 0x3a0b471500000000, + 0x371073dc00000000, 0xcce6609b00000000, 0x779d66c000000000, + 0x8c6b758700000000, 0x8170414e00000000, 0x7a86520900000000, + 0xda40580700000000, 0x21b64b4000000000, 0x2cad7f8900000000, + 0xd75b6cce00000000, 0x5a5a733f00000000, 0xa1ac607800000000, + 0xacb754b100000000, 0x574147f600000000, 0xf7874df800000000, + 0x0c715ebf00000000, 0x016a6a7600000000, 0xfa9c793100000000, + 0x41e77f6a00000000, 0xba116c2d00000000, 0xb70a58e400000000, + 0x4cfc4ba300000000, 0xec3a41ad00000000, 0x17cc52ea00000000, + 0x1ad7662300000000, 0xe121756400000000, 0x41d2291a00000000, + 0xba243a5d00000000, 0xb73f0e9400000000, 0x4cc91dd300000000, + 0xec0f17dd00000000, 0x17f9049a00000000, 0x1ae2305300000000, + 0xe114231400000000, 0x5a6f254f00000000, 0xa199360800000000, + 0xac8202c100000000, 0x5774118600000000, 0xf7b21b8800000000, + 0x0c4408cf00000000, 0x015f3c0600000000, 0xfaa92f4100000000, + 0x77a830b000000000, 0x8c5e23f700000000, 0x8145173e00000000, + 0x7ab3047900000000, 0xda750e7700000000, 0x21831d3000000000, + 0x2c9829f900000000, 0xd76e3abe00000000, 0x6c153ce500000000, + 0x97e32fa200000000, 0x9af81b6b00000000, 0x610e082c00000000, + 0xc1c8022200000000, 0x3a3e116500000000, 0x372525ac00000000, + 0xccd336eb00000000}, + {0x0000000000000000, 0x6238282a00000000, 0xc470505400000000, + 0xa648787e00000000, 0x88e1a0a800000000, 0xead9888200000000, + 0x4c91f0fc00000000, 0x2ea9d8d600000000, 0x51c5308a00000000, + 0x33fd18a000000000, 0x95b560de00000000, 0xf78d48f400000000, + 0xd924902200000000, 0xbb1cb80800000000, 0x1d54c07600000000, + 0x7f6ce85c00000000, 0xe38c10cf00000000, 0x81b438e500000000, + 0x27fc409b00000000, 0x45c468b100000000, 0x6b6db06700000000, + 0x0955984d00000000, 0xaf1de03300000000, 0xcd25c81900000000, + 0xb249204500000000, 0xd071086f00000000, 0x7639701100000000, + 0x1401583b00000000, 0x3aa880ed00000000, 0x5890a8c700000000, + 0xfed8d0b900000000, 0x9ce0f89300000000, 0x871f504500000000, + 0xe527786f00000000, 0x436f001100000000, 0x2157283b00000000, + 0x0ffef0ed00000000, 0x6dc6d8c700000000, 0xcb8ea0b900000000, + 0xa9b6889300000000, 0xd6da60cf00000000, 0xb4e248e500000000, + 0x12aa309b00000000, 0x709218b100000000, 0x5e3bc06700000000, + 0x3c03e84d00000000, 0x9a4b903300000000, 0xf873b81900000000, + 0x6493408a00000000, 0x06ab68a000000000, 0xa0e310de00000000, + 0xc2db38f400000000, 0xec72e02200000000, 0x8e4ac80800000000, + 0x2802b07600000000, 0x4a3a985c00000000, 0x3556700000000000, + 0x576e582a00000000, 0xf126205400000000, 0x931e087e00000000, + 0xbdb7d0a800000000, 0xdf8ff88200000000, 0x79c780fc00000000, + 0x1bffa8d600000000, 0x0e3fa08a00000000, 0x6c0788a000000000, + 0xca4ff0de00000000, 0xa877d8f400000000, 0x86de002200000000, + 0xe4e6280800000000, 0x42ae507600000000, 0x2096785c00000000, + 0x5ffa900000000000, 0x3dc2b82a00000000, 0x9b8ac05400000000, + 0xf9b2e87e00000000, 0xd71b30a800000000, 0xb523188200000000, + 0x136b60fc00000000, 0x715348d600000000, 0xedb3b04500000000, + 0x8f8b986f00000000, 0x29c3e01100000000, 0x4bfbc83b00000000, + 0x655210ed00000000, 0x076a38c700000000, 0xa12240b900000000, + 0xc31a689300000000, 0xbc7680cf00000000, 0xde4ea8e500000000, + 0x7806d09b00000000, 0x1a3ef8b100000000, 0x3497206700000000, + 0x56af084d00000000, 0xf0e7703300000000, 0x92df581900000000, + 0x8920f0cf00000000, 0xeb18d8e500000000, 0x4d50a09b00000000, + 0x2f6888b100000000, 0x01c1506700000000, 0x63f9784d00000000, + 0xc5b1003300000000, 0xa789281900000000, 0xd8e5c04500000000, + 0xbadde86f00000000, 0x1c95901100000000, 0x7eadb83b00000000, + 0x500460ed00000000, 0x323c48c700000000, 0x947430b900000000, + 0xf64c189300000000, 0x6aace00000000000, 0x0894c82a00000000, + 0xaedcb05400000000, 0xcce4987e00000000, 0xe24d40a800000000, + 0x8075688200000000, 0x263d10fc00000000, 0x440538d600000000, + 0x3b69d08a00000000, 0x5951f8a000000000, 0xff1980de00000000, + 0x9d21a8f400000000, 0xb388702200000000, 0xd1b0580800000000, + 0x77f8207600000000, 0x15c0085c00000000, 0x5d7831ce00000000, + 0x3f4019e400000000, 0x9908619a00000000, 0xfb3049b000000000, + 0xd599916600000000, 0xb7a1b94c00000000, 0x11e9c13200000000, + 0x73d1e91800000000, 0x0cbd014400000000, 0x6e85296e00000000, + 0xc8cd511000000000, 0xaaf5793a00000000, 0x845ca1ec00000000, + 0xe66489c600000000, 0x402cf1b800000000, 0x2214d99200000000, + 0xbef4210100000000, 0xdccc092b00000000, 0x7a84715500000000, + 0x18bc597f00000000, 0x361581a900000000, 0x542da98300000000, + 0xf265d1fd00000000, 0x905df9d700000000, 0xef31118b00000000, + 0x8d0939a100000000, 0x2b4141df00000000, 0x497969f500000000, + 0x67d0b12300000000, 0x05e8990900000000, 0xa3a0e17700000000, + 0xc198c95d00000000, 0xda67618b00000000, 0xb85f49a100000000, + 0x1e1731df00000000, 0x7c2f19f500000000, 0x5286c12300000000, + 0x30bee90900000000, 0x96f6917700000000, 0xf4ceb95d00000000, + 0x8ba2510100000000, 0xe99a792b00000000, 0x4fd2015500000000, + 0x2dea297f00000000, 0x0343f1a900000000, 0x617bd98300000000, + 0xc733a1fd00000000, 0xa50b89d700000000, 0x39eb714400000000, + 0x5bd3596e00000000, 0xfd9b211000000000, 0x9fa3093a00000000, + 0xb10ad1ec00000000, 0xd332f9c600000000, 0x757a81b800000000, + 0x1742a99200000000, 0x682e41ce00000000, 0x0a1669e400000000, + 0xac5e119a00000000, 0xce6639b000000000, 0xe0cfe16600000000, + 0x82f7c94c00000000, 0x24bfb13200000000, 0x4687991800000000, + 0x5347914400000000, 0x317fb96e00000000, 0x9737c11000000000, + 0xf50fe93a00000000, 0xdba631ec00000000, 0xb99e19c600000000, + 0x1fd661b800000000, 0x7dee499200000000, 0x0282a1ce00000000, + 0x60ba89e400000000, 0xc6f2f19a00000000, 0xa4cad9b000000000, + 0x8a63016600000000, 0xe85b294c00000000, 0x4e13513200000000, + 0x2c2b791800000000, 0xb0cb818b00000000, 0xd2f3a9a100000000, + 0x74bbd1df00000000, 0x1683f9f500000000, 0x382a212300000000, + 0x5a12090900000000, 0xfc5a717700000000, 0x9e62595d00000000, + 0xe10eb10100000000, 0x8336992b00000000, 0x257ee15500000000, + 0x4746c97f00000000, 0x69ef11a900000000, 0x0bd7398300000000, + 0xad9f41fd00000000, 0xcfa769d700000000, 0xd458c10100000000, + 0xb660e92b00000000, 0x1028915500000000, 0x7210b97f00000000, + 0x5cb961a900000000, 0x3e81498300000000, 0x98c931fd00000000, + 0xfaf119d700000000, 0x859df18b00000000, 0xe7a5d9a100000000, + 0x41eda1df00000000, 0x23d589f500000000, 0x0d7c512300000000, + 0x6f44790900000000, 0xc90c017700000000, 0xab34295d00000000, + 0x37d4d1ce00000000, 0x55ecf9e400000000, 0xf3a4819a00000000, + 0x919ca9b000000000, 0xbf35716600000000, 0xdd0d594c00000000, + 0x7b45213200000000, 0x197d091800000000, 0x6611e14400000000, + 0x0429c96e00000000, 0xa261b11000000000, 0xc059993a00000000, + 0xeef041ec00000000, 0x8cc869c600000000, 0x2a8011b800000000, + 0x48b8399200000000}, + {0x0000000000000000, 0x4c2896a300000000, 0xd9565d9c00000000, + 0x957ecb3f00000000, 0xf3abcbe300000000, 0xbf835d4000000000, + 0x2afd967f00000000, 0x66d500dc00000000, 0xa751e61c00000000, + 0xeb7970bf00000000, 0x7e07bb8000000000, 0x322f2d2300000000, + 0x54fa2dff00000000, 0x18d2bb5c00000000, 0x8dac706300000000, + 0xc184e6c000000000, 0x4ea3cc3900000000, 0x028b5a9a00000000, + 0x97f591a500000000, 0xdbdd070600000000, 0xbd0807da00000000, + 0xf120917900000000, 0x645e5a4600000000, 0x2876cce500000000, + 0xe9f22a2500000000, 0xa5dabc8600000000, 0x30a477b900000000, + 0x7c8ce11a00000000, 0x1a59e1c600000000, 0x5671776500000000, + 0xc30fbc5a00000000, 0x8f272af900000000, 0x9c46997300000000, + 0xd06e0fd000000000, 0x4510c4ef00000000, 0x0938524c00000000, + 0x6fed529000000000, 0x23c5c43300000000, 0xb6bb0f0c00000000, + 0xfa9399af00000000, 0x3b177f6f00000000, 0x773fe9cc00000000, + 0xe24122f300000000, 0xae69b45000000000, 0xc8bcb48c00000000, + 0x8494222f00000000, 0x11eae91000000000, 0x5dc27fb300000000, + 0xd2e5554a00000000, 0x9ecdc3e900000000, 0x0bb308d600000000, + 0x479b9e7500000000, 0x214e9ea900000000, 0x6d66080a00000000, + 0xf818c33500000000, 0xb430559600000000, 0x75b4b35600000000, + 0x399c25f500000000, 0xace2eeca00000000, 0xe0ca786900000000, + 0x861f78b500000000, 0xca37ee1600000000, 0x5f49252900000000, + 0x1361b38a00000000, 0x388d32e700000000, 0x74a5a44400000000, + 0xe1db6f7b00000000, 0xadf3f9d800000000, 0xcb26f90400000000, + 0x870e6fa700000000, 0x1270a49800000000, 0x5e58323b00000000, + 0x9fdcd4fb00000000, 0xd3f4425800000000, 0x468a896700000000, + 0x0aa21fc400000000, 0x6c771f1800000000, 0x205f89bb00000000, + 0xb521428400000000, 0xf909d42700000000, 0x762efede00000000, + 0x3a06687d00000000, 0xaf78a34200000000, 0xe35035e100000000, + 0x8585353d00000000, 0xc9ada39e00000000, 0x5cd368a100000000, + 0x10fbfe0200000000, 0xd17f18c200000000, 0x9d578e6100000000, + 0x0829455e00000000, 0x4401d3fd00000000, 0x22d4d32100000000, + 0x6efc458200000000, 0xfb828ebd00000000, 0xb7aa181e00000000, + 0xa4cbab9400000000, 0xe8e33d3700000000, 0x7d9df60800000000, + 0x31b560ab00000000, 0x5760607700000000, 0x1b48f6d400000000, + 0x8e363deb00000000, 0xc21eab4800000000, 0x039a4d8800000000, + 0x4fb2db2b00000000, 0xdacc101400000000, 0x96e486b700000000, + 0xf031866b00000000, 0xbc1910c800000000, 0x2967dbf700000000, + 0x654f4d5400000000, 0xea6867ad00000000, 0xa640f10e00000000, + 0x333e3a3100000000, 0x7f16ac9200000000, 0x19c3ac4e00000000, + 0x55eb3aed00000000, 0xc095f1d200000000, 0x8cbd677100000000, + 0x4d3981b100000000, 0x0111171200000000, 0x946fdc2d00000000, + 0xd8474a8e00000000, 0xbe924a5200000000, 0xf2badcf100000000, + 0x67c417ce00000000, 0x2bec816d00000000, 0x311c141500000000, + 0x7d3482b600000000, 0xe84a498900000000, 0xa462df2a00000000, + 0xc2b7dff600000000, 0x8e9f495500000000, 0x1be1826a00000000, + 0x57c914c900000000, 0x964df20900000000, 0xda6564aa00000000, + 0x4f1baf9500000000, 0x0333393600000000, 0x65e639ea00000000, + 0x29ceaf4900000000, 0xbcb0647600000000, 0xf098f2d500000000, + 0x7fbfd82c00000000, 0x33974e8f00000000, 0xa6e985b000000000, + 0xeac1131300000000, 0x8c1413cf00000000, 0xc03c856c00000000, + 0x55424e5300000000, 0x196ad8f000000000, 0xd8ee3e3000000000, + 0x94c6a89300000000, 0x01b863ac00000000, 0x4d90f50f00000000, + 0x2b45f5d300000000, 0x676d637000000000, 0xf213a84f00000000, + 0xbe3b3eec00000000, 0xad5a8d6600000000, 0xe1721bc500000000, + 0x740cd0fa00000000, 0x3824465900000000, 0x5ef1468500000000, + 0x12d9d02600000000, 0x87a71b1900000000, 0xcb8f8dba00000000, + 0x0a0b6b7a00000000, 0x4623fdd900000000, 0xd35d36e600000000, + 0x9f75a04500000000, 0xf9a0a09900000000, 0xb588363a00000000, + 0x20f6fd0500000000, 0x6cde6ba600000000, 0xe3f9415f00000000, + 0xafd1d7fc00000000, 0x3aaf1cc300000000, 0x76878a6000000000, + 0x10528abc00000000, 0x5c7a1c1f00000000, 0xc904d72000000000, + 0x852c418300000000, 0x44a8a74300000000, 0x088031e000000000, + 0x9dfefadf00000000, 0xd1d66c7c00000000, 0xb7036ca000000000, + 0xfb2bfa0300000000, 0x6e55313c00000000, 0x227da79f00000000, + 0x099126f200000000, 0x45b9b05100000000, 0xd0c77b6e00000000, + 0x9cefedcd00000000, 0xfa3aed1100000000, 0xb6127bb200000000, + 0x236cb08d00000000, 0x6f44262e00000000, 0xaec0c0ee00000000, + 0xe2e8564d00000000, 0x77969d7200000000, 0x3bbe0bd100000000, + 0x5d6b0b0d00000000, 0x11439dae00000000, 0x843d569100000000, + 0xc815c03200000000, 0x4732eacb00000000, 0x0b1a7c6800000000, + 0x9e64b75700000000, 0xd24c21f400000000, 0xb499212800000000, + 0xf8b1b78b00000000, 0x6dcf7cb400000000, 0x21e7ea1700000000, + 0xe0630cd700000000, 0xac4b9a7400000000, 0x3935514b00000000, + 0x751dc7e800000000, 0x13c8c73400000000, 0x5fe0519700000000, + 0xca9e9aa800000000, 0x86b60c0b00000000, 0x95d7bf8100000000, + 0xd9ff292200000000, 0x4c81e21d00000000, 0x00a974be00000000, + 0x667c746200000000, 0x2a54e2c100000000, 0xbf2a29fe00000000, + 0xf302bf5d00000000, 0x3286599d00000000, 0x7eaecf3e00000000, + 0xebd0040100000000, 0xa7f892a200000000, 0xc12d927e00000000, + 0x8d0504dd00000000, 0x187bcfe200000000, 0x5453594100000000, + 0xdb7473b800000000, 0x975ce51b00000000, 0x02222e2400000000, + 0x4e0ab88700000000, 0x28dfb85b00000000, 0x64f72ef800000000, + 0xf189e5c700000000, 0xbda1736400000000, 0x7c2595a400000000, + 0x300d030700000000, 0xa573c83800000000, 0xe95b5e9b00000000, + 0x8f8e5e4700000000, 0xc3a6c8e400000000, 0x56d803db00000000, + 0x1af0957800000000}, + {0x0000000000000000, 0x939bc97f00000000, 0x263793ff00000000, + 0xb5ac5a8000000000, 0x0d68572400000000, 0x9ef39e5b00000000, + 0x2b5fc4db00000000, 0xb8c40da400000000, 0x1ad0ae4800000000, + 0x894b673700000000, 0x3ce73db700000000, 0xaf7cf4c800000000, + 0x17b8f96c00000000, 0x8423301300000000, 0x318f6a9300000000, + 0xa214a3ec00000000, 0x34a05d9100000000, 0xa73b94ee00000000, + 0x1297ce6e00000000, 0x810c071100000000, 0x39c80ab500000000, + 0xaa53c3ca00000000, 0x1fff994a00000000, 0x8c64503500000000, + 0x2e70f3d900000000, 0xbdeb3aa600000000, 0x0847602600000000, + 0x9bdca95900000000, 0x2318a4fd00000000, 0xb0836d8200000000, + 0x052f370200000000, 0x96b4fe7d00000000, 0x2946caf900000000, + 0xbadd038600000000, 0x0f71590600000000, 0x9cea907900000000, + 0x242e9ddd00000000, 0xb7b554a200000000, 0x02190e2200000000, + 0x9182c75d00000000, 0x339664b100000000, 0xa00dadce00000000, + 0x15a1f74e00000000, 0x863a3e3100000000, 0x3efe339500000000, + 0xad65faea00000000, 0x18c9a06a00000000, 0x8b52691500000000, + 0x1de6976800000000, 0x8e7d5e1700000000, 0x3bd1049700000000, + 0xa84acde800000000, 0x108ec04c00000000, 0x8315093300000000, + 0x36b953b300000000, 0xa5229acc00000000, 0x0736392000000000, + 0x94adf05f00000000, 0x2101aadf00000000, 0xb29a63a000000000, + 0x0a5e6e0400000000, 0x99c5a77b00000000, 0x2c69fdfb00000000, + 0xbff2348400000000, 0x138ae52800000000, 0x80112c5700000000, + 0x35bd76d700000000, 0xa626bfa800000000, 0x1ee2b20c00000000, + 0x8d797b7300000000, 0x38d521f300000000, 0xab4ee88c00000000, + 0x095a4b6000000000, 0x9ac1821f00000000, 0x2f6dd89f00000000, + 0xbcf611e000000000, 0x04321c4400000000, 0x97a9d53b00000000, + 0x22058fbb00000000, 0xb19e46c400000000, 0x272ab8b900000000, + 0xb4b171c600000000, 0x011d2b4600000000, 0x9286e23900000000, + 0x2a42ef9d00000000, 0xb9d926e200000000, 0x0c757c6200000000, + 0x9feeb51d00000000, 0x3dfa16f100000000, 0xae61df8e00000000, + 0x1bcd850e00000000, 0x88564c7100000000, 0x309241d500000000, + 0xa30988aa00000000, 0x16a5d22a00000000, 0x853e1b5500000000, + 0x3acc2fd100000000, 0xa957e6ae00000000, 0x1cfbbc2e00000000, + 0x8f60755100000000, 0x37a478f500000000, 0xa43fb18a00000000, + 0x1193eb0a00000000, 0x8208227500000000, 0x201c819900000000, + 0xb38748e600000000, 0x062b126600000000, 0x95b0db1900000000, + 0x2d74d6bd00000000, 0xbeef1fc200000000, 0x0b43454200000000, + 0x98d88c3d00000000, 0x0e6c724000000000, 0x9df7bb3f00000000, + 0x285be1bf00000000, 0xbbc028c000000000, 0x0304256400000000, + 0x909fec1b00000000, 0x2533b69b00000000, 0xb6a87fe400000000, + 0x14bcdc0800000000, 0x8727157700000000, 0x328b4ff700000000, + 0xa110868800000000, 0x19d48b2c00000000, 0x8a4f425300000000, + 0x3fe318d300000000, 0xac78d1ac00000000, 0x2614cb5100000000, + 0xb58f022e00000000, 0x002358ae00000000, 0x93b891d100000000, + 0x2b7c9c7500000000, 0xb8e7550a00000000, 0x0d4b0f8a00000000, + 0x9ed0c6f500000000, 0x3cc4651900000000, 0xaf5fac6600000000, + 0x1af3f6e600000000, 0x89683f9900000000, 0x31ac323d00000000, + 0xa237fb4200000000, 0x179ba1c200000000, 0x840068bd00000000, + 0x12b496c000000000, 0x812f5fbf00000000, 0x3483053f00000000, + 0xa718cc4000000000, 0x1fdcc1e400000000, 0x8c47089b00000000, + 0x39eb521b00000000, 0xaa709b6400000000, 0x0864388800000000, + 0x9bfff1f700000000, 0x2e53ab7700000000, 0xbdc8620800000000, + 0x050c6fac00000000, 0x9697a6d300000000, 0x233bfc5300000000, + 0xb0a0352c00000000, 0x0f5201a800000000, 0x9cc9c8d700000000, + 0x2965925700000000, 0xbafe5b2800000000, 0x023a568c00000000, + 0x91a19ff300000000, 0x240dc57300000000, 0xb7960c0c00000000, + 0x1582afe000000000, 0x8619669f00000000, 0x33b53c1f00000000, + 0xa02ef56000000000, 0x18eaf8c400000000, 0x8b7131bb00000000, + 0x3edd6b3b00000000, 0xad46a24400000000, 0x3bf25c3900000000, + 0xa869954600000000, 0x1dc5cfc600000000, 0x8e5e06b900000000, + 0x369a0b1d00000000, 0xa501c26200000000, 0x10ad98e200000000, + 0x8336519d00000000, 0x2122f27100000000, 0xb2b93b0e00000000, + 0x0715618e00000000, 0x948ea8f100000000, 0x2c4aa55500000000, + 0xbfd16c2a00000000, 0x0a7d36aa00000000, 0x99e6ffd500000000, + 0x359e2e7900000000, 0xa605e70600000000, 0x13a9bd8600000000, + 0x803274f900000000, 0x38f6795d00000000, 0xab6db02200000000, + 0x1ec1eaa200000000, 0x8d5a23dd00000000, 0x2f4e803100000000, + 0xbcd5494e00000000, 0x097913ce00000000, 0x9ae2dab100000000, + 0x2226d71500000000, 0xb1bd1e6a00000000, 0x041144ea00000000, + 0x978a8d9500000000, 0x013e73e800000000, 0x92a5ba9700000000, + 0x2709e01700000000, 0xb492296800000000, 0x0c5624cc00000000, + 0x9fcdedb300000000, 0x2a61b73300000000, 0xb9fa7e4c00000000, + 0x1beedda000000000, 0x887514df00000000, 0x3dd94e5f00000000, + 0xae42872000000000, 0x16868a8400000000, 0x851d43fb00000000, + 0x30b1197b00000000, 0xa32ad00400000000, 0x1cd8e48000000000, + 0x8f432dff00000000, 0x3aef777f00000000, 0xa974be0000000000, + 0x11b0b3a400000000, 0x822b7adb00000000, 0x3787205b00000000, + 0xa41ce92400000000, 0x06084ac800000000, 0x959383b700000000, + 0x203fd93700000000, 0xb3a4104800000000, 0x0b601dec00000000, + 0x98fbd49300000000, 0x2d578e1300000000, 0xbecc476c00000000, + 0x2878b91100000000, 0xbbe3706e00000000, 0x0e4f2aee00000000, + 0x9dd4e39100000000, 0x2510ee3500000000, 0xb68b274a00000000, + 0x03277dca00000000, 0x90bcb4b500000000, 0x32a8175900000000, + 0xa133de2600000000, 0x149f84a600000000, 0x87044dd900000000, + 0x3fc0407d00000000, 0xac5b890200000000, 0x19f7d38200000000, + 0x8a6c1afd00000000}, + {0x0000000000000000, 0x650b796900000000, 0xca16f2d200000000, + 0xaf1d8bbb00000000, 0xd52b957e00000000, 0xb020ec1700000000, + 0x1f3d67ac00000000, 0x7a361ec500000000, 0xaa572afd00000000, + 0xcf5c539400000000, 0x6041d82f00000000, 0x054aa14600000000, + 0x7f7cbf8300000000, 0x1a77c6ea00000000, 0xb56a4d5100000000, + 0xd061343800000000, 0x15a9252100000000, 0x70a25c4800000000, + 0xdfbfd7f300000000, 0xbab4ae9a00000000, 0xc082b05f00000000, + 0xa589c93600000000, 0x0a94428d00000000, 0x6f9f3be400000000, + 0xbffe0fdc00000000, 0xdaf576b500000000, 0x75e8fd0e00000000, + 0x10e3846700000000, 0x6ad59aa200000000, 0x0fdee3cb00000000, + 0xa0c3687000000000, 0xc5c8111900000000, 0x2a524b4200000000, + 0x4f59322b00000000, 0xe044b99000000000, 0x854fc0f900000000, + 0xff79de3c00000000, 0x9a72a75500000000, 0x356f2cee00000000, + 0x5064558700000000, 0x800561bf00000000, 0xe50e18d600000000, + 0x4a13936d00000000, 0x2f18ea0400000000, 0x552ef4c100000000, + 0x30258da800000000, 0x9f38061300000000, 0xfa337f7a00000000, + 0x3ffb6e6300000000, 0x5af0170a00000000, 0xf5ed9cb100000000, + 0x90e6e5d800000000, 0xead0fb1d00000000, 0x8fdb827400000000, + 0x20c609cf00000000, 0x45cd70a600000000, 0x95ac449e00000000, + 0xf0a73df700000000, 0x5fbab64c00000000, 0x3ab1cf2500000000, + 0x4087d1e000000000, 0x258ca88900000000, 0x8a91233200000000, + 0xef9a5a5b00000000, 0x54a4968400000000, 0x31afefed00000000, + 0x9eb2645600000000, 0xfbb91d3f00000000, 0x818f03fa00000000, + 0xe4847a9300000000, 0x4b99f12800000000, 0x2e92884100000000, + 0xfef3bc7900000000, 0x9bf8c51000000000, 0x34e54eab00000000, + 0x51ee37c200000000, 0x2bd8290700000000, 0x4ed3506e00000000, + 0xe1cedbd500000000, 0x84c5a2bc00000000, 0x410db3a500000000, + 0x2406cacc00000000, 0x8b1b417700000000, 0xee10381e00000000, + 0x942626db00000000, 0xf12d5fb200000000, 0x5e30d40900000000, + 0x3b3bad6000000000, 0xeb5a995800000000, 0x8e51e03100000000, + 0x214c6b8a00000000, 0x444712e300000000, 0x3e710c2600000000, + 0x5b7a754f00000000, 0xf467fef400000000, 0x916c879d00000000, + 0x7ef6ddc600000000, 0x1bfda4af00000000, 0xb4e02f1400000000, + 0xd1eb567d00000000, 0xabdd48b800000000, 0xced631d100000000, + 0x61cbba6a00000000, 0x04c0c30300000000, 0xd4a1f73b00000000, + 0xb1aa8e5200000000, 0x1eb705e900000000, 0x7bbc7c8000000000, + 0x018a624500000000, 0x64811b2c00000000, 0xcb9c909700000000, + 0xae97e9fe00000000, 0x6b5ff8e700000000, 0x0e54818e00000000, + 0xa1490a3500000000, 0xc442735c00000000, 0xbe746d9900000000, + 0xdb7f14f000000000, 0x74629f4b00000000, 0x1169e62200000000, + 0xc108d21a00000000, 0xa403ab7300000000, 0x0b1e20c800000000, + 0x6e1559a100000000, 0x1423476400000000, 0x71283e0d00000000, + 0xde35b5b600000000, 0xbb3eccdf00000000, 0xe94e5cd200000000, + 0x8c4525bb00000000, 0x2358ae0000000000, 0x4653d76900000000, + 0x3c65c9ac00000000, 0x596eb0c500000000, 0xf6733b7e00000000, + 0x9378421700000000, 0x4319762f00000000, 0x26120f4600000000, + 0x890f84fd00000000, 0xec04fd9400000000, 0x9632e35100000000, + 0xf3399a3800000000, 0x5c24118300000000, 0x392f68ea00000000, + 0xfce779f300000000, 0x99ec009a00000000, 0x36f18b2100000000, + 0x53faf24800000000, 0x29ccec8d00000000, 0x4cc795e400000000, + 0xe3da1e5f00000000, 0x86d1673600000000, 0x56b0530e00000000, + 0x33bb2a6700000000, 0x9ca6a1dc00000000, 0xf9add8b500000000, + 0x839bc67000000000, 0xe690bf1900000000, 0x498d34a200000000, + 0x2c864dcb00000000, 0xc31c179000000000, 0xa6176ef900000000, + 0x090ae54200000000, 0x6c019c2b00000000, 0x163782ee00000000, + 0x733cfb8700000000, 0xdc21703c00000000, 0xb92a095500000000, + 0x694b3d6d00000000, 0x0c40440400000000, 0xa35dcfbf00000000, + 0xc656b6d600000000, 0xbc60a81300000000, 0xd96bd17a00000000, + 0x76765ac100000000, 0x137d23a800000000, 0xd6b532b100000000, + 0xb3be4bd800000000, 0x1ca3c06300000000, 0x79a8b90a00000000, + 0x039ea7cf00000000, 0x6695dea600000000, 0xc988551d00000000, + 0xac832c7400000000, 0x7ce2184c00000000, 0x19e9612500000000, + 0xb6f4ea9e00000000, 0xd3ff93f700000000, 0xa9c98d3200000000, + 0xccc2f45b00000000, 0x63df7fe000000000, 0x06d4068900000000, + 0xbdeaca5600000000, 0xd8e1b33f00000000, 0x77fc388400000000, + 0x12f741ed00000000, 0x68c15f2800000000, 0x0dca264100000000, + 0xa2d7adfa00000000, 0xc7dcd49300000000, 0x17bde0ab00000000, + 0x72b699c200000000, 0xddab127900000000, 0xb8a06b1000000000, + 0xc29675d500000000, 0xa79d0cbc00000000, 0x0880870700000000, + 0x6d8bfe6e00000000, 0xa843ef7700000000, 0xcd48961e00000000, + 0x62551da500000000, 0x075e64cc00000000, 0x7d687a0900000000, + 0x1863036000000000, 0xb77e88db00000000, 0xd275f1b200000000, + 0x0214c58a00000000, 0x671fbce300000000, 0xc802375800000000, + 0xad094e3100000000, 0xd73f50f400000000, 0xb234299d00000000, + 0x1d29a22600000000, 0x7822db4f00000000, 0x97b8811400000000, + 0xf2b3f87d00000000, 0x5dae73c600000000, 0x38a50aaf00000000, + 0x4293146a00000000, 0x27986d0300000000, 0x8885e6b800000000, + 0xed8e9fd100000000, 0x3defabe900000000, 0x58e4d28000000000, + 0xf7f9593b00000000, 0x92f2205200000000, 0xe8c43e9700000000, + 0x8dcf47fe00000000, 0x22d2cc4500000000, 0x47d9b52c00000000, + 0x8211a43500000000, 0xe71add5c00000000, 0x480756e700000000, + 0x2d0c2f8e00000000, 0x573a314b00000000, 0x3231482200000000, + 0x9d2cc39900000000, 0xf827baf000000000, 0x28468ec800000000, + 0x4d4df7a100000000, 0xe2507c1a00000000, 0x875b057300000000, + 0xfd6d1bb600000000, 0x986662df00000000, 0x377be96400000000, + 0x5270900d00000000}, + {0x0000000000000000, 0xdcecb13d00000000, 0xb8d9637b00000000, + 0x6435d24600000000, 0x70b3c7f600000000, 0xac5f76cb00000000, + 0xc86aa48d00000000, 0x148615b000000000, 0xa160fe3600000000, + 0x7d8c4f0b00000000, 0x19b99d4d00000000, 0xc5552c7000000000, + 0xd1d339c000000000, 0x0d3f88fd00000000, 0x690a5abb00000000, + 0xb5e6eb8600000000, 0x42c1fc6d00000000, 0x9e2d4d5000000000, + 0xfa189f1600000000, 0x26f42e2b00000000, 0x32723b9b00000000, + 0xee9e8aa600000000, 0x8aab58e000000000, 0x5647e9dd00000000, + 0xe3a1025b00000000, 0x3f4db36600000000, 0x5b78612000000000, + 0x8794d01d00000000, 0x9312c5ad00000000, 0x4ffe749000000000, + 0x2bcba6d600000000, 0xf72717eb00000000, 0x8482f9db00000000, + 0x586e48e600000000, 0x3c5b9aa000000000, 0xe0b72b9d00000000, + 0xf4313e2d00000000, 0x28dd8f1000000000, 0x4ce85d5600000000, + 0x9004ec6b00000000, 0x25e207ed00000000, 0xf90eb6d000000000, + 0x9d3b649600000000, 0x41d7d5ab00000000, 0x5551c01b00000000, + 0x89bd712600000000, 0xed88a36000000000, 0x3164125d00000000, + 0xc64305b600000000, 0x1aafb48b00000000, 0x7e9a66cd00000000, + 0xa276d7f000000000, 0xb6f0c24000000000, 0x6a1c737d00000000, + 0x0e29a13b00000000, 0xd2c5100600000000, 0x6723fb8000000000, + 0xbbcf4abd00000000, 0xdffa98fb00000000, 0x031629c600000000, + 0x17903c7600000000, 0xcb7c8d4b00000000, 0xaf495f0d00000000, + 0x73a5ee3000000000, 0x4903826c00000000, 0x95ef335100000000, + 0xf1dae11700000000, 0x2d36502a00000000, 0x39b0459a00000000, + 0xe55cf4a700000000, 0x816926e100000000, 0x5d8597dc00000000, + 0xe8637c5a00000000, 0x348fcd6700000000, 0x50ba1f2100000000, + 0x8c56ae1c00000000, 0x98d0bbac00000000, 0x443c0a9100000000, + 0x2009d8d700000000, 0xfce569ea00000000, 0x0bc27e0100000000, + 0xd72ecf3c00000000, 0xb31b1d7a00000000, 0x6ff7ac4700000000, + 0x7b71b9f700000000, 0xa79d08ca00000000, 0xc3a8da8c00000000, + 0x1f446bb100000000, 0xaaa2803700000000, 0x764e310a00000000, + 0x127be34c00000000, 0xce97527100000000, 0xda1147c100000000, + 0x06fdf6fc00000000, 0x62c824ba00000000, 0xbe24958700000000, + 0xcd817bb700000000, 0x116dca8a00000000, 0x755818cc00000000, + 0xa9b4a9f100000000, 0xbd32bc4100000000, 0x61de0d7c00000000, + 0x05ebdf3a00000000, 0xd9076e0700000000, 0x6ce1858100000000, + 0xb00d34bc00000000, 0xd438e6fa00000000, 0x08d457c700000000, + 0x1c52427700000000, 0xc0bef34a00000000, 0xa48b210c00000000, + 0x7867903100000000, 0x8f4087da00000000, 0x53ac36e700000000, + 0x3799e4a100000000, 0xeb75559c00000000, 0xfff3402c00000000, + 0x231ff11100000000, 0x472a235700000000, 0x9bc6926a00000000, + 0x2e2079ec00000000, 0xf2ccc8d100000000, 0x96f91a9700000000, + 0x4a15abaa00000000, 0x5e93be1a00000000, 0x827f0f2700000000, + 0xe64add6100000000, 0x3aa66c5c00000000, 0x920604d900000000, + 0x4eeab5e400000000, 0x2adf67a200000000, 0xf633d69f00000000, + 0xe2b5c32f00000000, 0x3e59721200000000, 0x5a6ca05400000000, + 0x8680116900000000, 0x3366faef00000000, 0xef8a4bd200000000, + 0x8bbf999400000000, 0x575328a900000000, 0x43d53d1900000000, + 0x9f398c2400000000, 0xfb0c5e6200000000, 0x27e0ef5f00000000, + 0xd0c7f8b400000000, 0x0c2b498900000000, 0x681e9bcf00000000, + 0xb4f22af200000000, 0xa0743f4200000000, 0x7c988e7f00000000, + 0x18ad5c3900000000, 0xc441ed0400000000, 0x71a7068200000000, + 0xad4bb7bf00000000, 0xc97e65f900000000, 0x1592d4c400000000, + 0x0114c17400000000, 0xddf8704900000000, 0xb9cda20f00000000, + 0x6521133200000000, 0x1684fd0200000000, 0xca684c3f00000000, + 0xae5d9e7900000000, 0x72b12f4400000000, 0x66373af400000000, + 0xbadb8bc900000000, 0xdeee598f00000000, 0x0202e8b200000000, + 0xb7e4033400000000, 0x6b08b20900000000, 0x0f3d604f00000000, + 0xd3d1d17200000000, 0xc757c4c200000000, 0x1bbb75ff00000000, + 0x7f8ea7b900000000, 0xa362168400000000, 0x5445016f00000000, + 0x88a9b05200000000, 0xec9c621400000000, 0x3070d32900000000, + 0x24f6c69900000000, 0xf81a77a400000000, 0x9c2fa5e200000000, + 0x40c314df00000000, 0xf525ff5900000000, 0x29c94e6400000000, + 0x4dfc9c2200000000, 0x91102d1f00000000, 0x859638af00000000, + 0x597a899200000000, 0x3d4f5bd400000000, 0xe1a3eae900000000, + 0xdb0586b500000000, 0x07e9378800000000, 0x63dce5ce00000000, + 0xbf3054f300000000, 0xabb6414300000000, 0x775af07e00000000, + 0x136f223800000000, 0xcf83930500000000, 0x7a65788300000000, + 0xa689c9be00000000, 0xc2bc1bf800000000, 0x1e50aac500000000, + 0x0ad6bf7500000000, 0xd63a0e4800000000, 0xb20fdc0e00000000, + 0x6ee36d3300000000, 0x99c47ad800000000, 0x4528cbe500000000, + 0x211d19a300000000, 0xfdf1a89e00000000, 0xe977bd2e00000000, + 0x359b0c1300000000, 0x51aede5500000000, 0x8d426f6800000000, + 0x38a484ee00000000, 0xe44835d300000000, 0x807de79500000000, + 0x5c9156a800000000, 0x4817431800000000, 0x94fbf22500000000, + 0xf0ce206300000000, 0x2c22915e00000000, 0x5f877f6e00000000, + 0x836bce5300000000, 0xe75e1c1500000000, 0x3bb2ad2800000000, + 0x2f34b89800000000, 0xf3d809a500000000, 0x97eddbe300000000, + 0x4b016ade00000000, 0xfee7815800000000, 0x220b306500000000, + 0x463ee22300000000, 0x9ad2531e00000000, 0x8e5446ae00000000, + 0x52b8f79300000000, 0x368d25d500000000, 0xea6194e800000000, + 0x1d46830300000000, 0xc1aa323e00000000, 0xa59fe07800000000, + 0x7973514500000000, 0x6df544f500000000, 0xb119f5c800000000, + 0xd52c278e00000000, 0x09c096b300000000, 0xbc267d3500000000, + 0x60cacc0800000000, 0x04ff1e4e00000000, 0xd813af7300000000, + 0xcc95bac300000000, 0x10790bfe00000000, 0x744cd9b800000000, + 0xa8a0688500000000}}; + +#else /* W == 4 */ + +local const z_crc_t FAR crc_braid_table[][256] = { + {0x00000000, 0x81256527, 0xd93bcc0f, 0x581ea928, 0x69069e5f, + 0xe823fb78, 0xb03d5250, 0x31183777, 0xd20d3cbe, 0x53285999, + 0x0b36f0b1, 0x8a139596, 0xbb0ba2e1, 0x3a2ec7c6, 0x62306eee, + 0xe3150bc9, 0x7f6b7f3d, 0xfe4e1a1a, 0xa650b332, 0x2775d615, + 0x166de162, 0x97488445, 0xcf562d6d, 0x4e73484a, 0xad664383, + 0x2c4326a4, 0x745d8f8c, 0xf578eaab, 0xc460dddc, 0x4545b8fb, + 0x1d5b11d3, 0x9c7e74f4, 0xfed6fe7a, 0x7ff39b5d, 0x27ed3275, + 0xa6c85752, 0x97d06025, 0x16f50502, 0x4eebac2a, 0xcfcec90d, + 0x2cdbc2c4, 0xadfea7e3, 0xf5e00ecb, 0x74c56bec, 0x45dd5c9b, + 0xc4f839bc, 0x9ce69094, 0x1dc3f5b3, 0x81bd8147, 0x0098e460, + 0x58864d48, 0xd9a3286f, 0xe8bb1f18, 0x699e7a3f, 0x3180d317, + 0xb0a5b630, 0x53b0bdf9, 0xd295d8de, 0x8a8b71f6, 0x0bae14d1, + 0x3ab623a6, 0xbb934681, 0xe38defa9, 0x62a88a8e, 0x26dcfab5, + 0xa7f99f92, 0xffe736ba, 0x7ec2539d, 0x4fda64ea, 0xceff01cd, + 0x96e1a8e5, 0x17c4cdc2, 0xf4d1c60b, 0x75f4a32c, 0x2dea0a04, + 0xaccf6f23, 0x9dd75854, 0x1cf23d73, 0x44ec945b, 0xc5c9f17c, + 0x59b78588, 0xd892e0af, 0x808c4987, 0x01a92ca0, 0x30b11bd7, + 0xb1947ef0, 0xe98ad7d8, 0x68afb2ff, 0x8bbab936, 0x0a9fdc11, + 0x52817539, 0xd3a4101e, 0xe2bc2769, 0x6399424e, 0x3b87eb66, + 0xbaa28e41, 0xd80a04cf, 0x592f61e8, 0x0131c8c0, 0x8014ade7, + 0xb10c9a90, 0x3029ffb7, 0x6837569f, 0xe91233b8, 0x0a073871, + 0x8b225d56, 0xd33cf47e, 0x52199159, 0x6301a62e, 0xe224c309, + 0xba3a6a21, 0x3b1f0f06, 0xa7617bf2, 0x26441ed5, 0x7e5ab7fd, + 0xff7fd2da, 0xce67e5ad, 0x4f42808a, 0x175c29a2, 0x96794c85, + 0x756c474c, 0xf449226b, 0xac578b43, 0x2d72ee64, 0x1c6ad913, + 0x9d4fbc34, 0xc551151c, 0x4474703b, 0x4db9f56a, 0xcc9c904d, + 0x94823965, 0x15a75c42, 0x24bf6b35, 0xa59a0e12, 0xfd84a73a, + 0x7ca1c21d, 0x9fb4c9d4, 0x1e91acf3, 0x468f05db, 0xc7aa60fc, + 0xf6b2578b, 0x779732ac, 0x2f899b84, 0xaeacfea3, 0x32d28a57, + 0xb3f7ef70, 0xebe94658, 0x6acc237f, 0x5bd41408, 0xdaf1712f, + 0x82efd807, 0x03cabd20, 0xe0dfb6e9, 0x61fad3ce, 0x39e47ae6, + 0xb8c11fc1, 0x89d928b6, 0x08fc4d91, 0x50e2e4b9, 0xd1c7819e, + 0xb36f0b10, 0x324a6e37, 0x6a54c71f, 0xeb71a238, 0xda69954f, + 0x5b4cf068, 0x03525940, 0x82773c67, 0x616237ae, 0xe0475289, + 0xb859fba1, 0x397c9e86, 0x0864a9f1, 0x8941ccd6, 0xd15f65fe, + 0x507a00d9, 0xcc04742d, 0x4d21110a, 0x153fb822, 0x941add05, + 0xa502ea72, 0x24278f55, 0x7c39267d, 0xfd1c435a, 0x1e094893, + 0x9f2c2db4, 0xc732849c, 0x4617e1bb, 0x770fd6cc, 0xf62ab3eb, + 0xae341ac3, 0x2f117fe4, 0x6b650fdf, 0xea406af8, 0xb25ec3d0, + 0x337ba6f7, 0x02639180, 0x8346f4a7, 0xdb585d8f, 0x5a7d38a8, + 0xb9683361, 0x384d5646, 0x6053ff6e, 0xe1769a49, 0xd06ead3e, + 0x514bc819, 0x09556131, 0x88700416, 0x140e70e2, 0x952b15c5, + 0xcd35bced, 0x4c10d9ca, 0x7d08eebd, 0xfc2d8b9a, 0xa43322b2, + 0x25164795, 0xc6034c5c, 0x4726297b, 0x1f388053, 0x9e1de574, + 0xaf05d203, 0x2e20b724, 0x763e1e0c, 0xf71b7b2b, 0x95b3f1a5, + 0x14969482, 0x4c883daa, 0xcdad588d, 0xfcb56ffa, 0x7d900add, + 0x258ea3f5, 0xa4abc6d2, 0x47becd1b, 0xc69ba83c, 0x9e850114, + 0x1fa06433, 0x2eb85344, 0xaf9d3663, 0xf7839f4b, 0x76a6fa6c, + 0xead88e98, 0x6bfdebbf, 0x33e34297, 0xb2c627b0, 0x83de10c7, + 0x02fb75e0, 0x5ae5dcc8, 0xdbc0b9ef, 0x38d5b226, 0xb9f0d701, + 0xe1ee7e29, 0x60cb1b0e, 0x51d32c79, 0xd0f6495e, 0x88e8e076, + 0x09cd8551}, + {0x00000000, 0x9b73ead4, 0xed96d3e9, 0x76e5393d, 0x005ca193, + 0x9b2f4b47, 0xedca727a, 0x76b998ae, 0x00b94326, 0x9bcaa9f2, + 0xed2f90cf, 0x765c7a1b, 0x00e5e2b5, 0x9b960861, 0xed73315c, + 0x7600db88, 0x0172864c, 0x9a016c98, 0xece455a5, 0x7797bf71, + 0x012e27df, 0x9a5dcd0b, 0xecb8f436, 0x77cb1ee2, 0x01cbc56a, + 0x9ab82fbe, 0xec5d1683, 0x772efc57, 0x019764f9, 0x9ae48e2d, + 0xec01b710, 0x77725dc4, 0x02e50c98, 0x9996e64c, 0xef73df71, + 0x740035a5, 0x02b9ad0b, 0x99ca47df, 0xef2f7ee2, 0x745c9436, + 0x025c4fbe, 0x992fa56a, 0xefca9c57, 0x74b97683, 0x0200ee2d, + 0x997304f9, 0xef963dc4, 0x74e5d710, 0x03978ad4, 0x98e46000, + 0xee01593d, 0x7572b3e9, 0x03cb2b47, 0x98b8c193, 0xee5df8ae, + 0x752e127a, 0x032ec9f2, 0x985d2326, 0xeeb81a1b, 0x75cbf0cf, + 0x03726861, 0x980182b5, 0xeee4bb88, 0x7597515c, 0x05ca1930, + 0x9eb9f3e4, 0xe85ccad9, 0x732f200d, 0x0596b8a3, 0x9ee55277, + 0xe8006b4a, 0x7373819e, 0x05735a16, 0x9e00b0c2, 0xe8e589ff, + 0x7396632b, 0x052ffb85, 0x9e5c1151, 0xe8b9286c, 0x73cac2b8, + 0x04b89f7c, 0x9fcb75a8, 0xe92e4c95, 0x725da641, 0x04e43eef, + 0x9f97d43b, 0xe972ed06, 0x720107d2, 0x0401dc5a, 0x9f72368e, + 0xe9970fb3, 0x72e4e567, 0x045d7dc9, 0x9f2e971d, 0xe9cbae20, + 0x72b844f4, 0x072f15a8, 0x9c5cff7c, 0xeab9c641, 0x71ca2c95, + 0x0773b43b, 0x9c005eef, 0xeae567d2, 0x71968d06, 0x0796568e, + 0x9ce5bc5a, 0xea008567, 0x71736fb3, 0x07caf71d, 0x9cb91dc9, + 0xea5c24f4, 0x712fce20, 0x065d93e4, 0x9d2e7930, 0xebcb400d, + 0x70b8aad9, 0x06013277, 0x9d72d8a3, 0xeb97e19e, 0x70e40b4a, + 0x06e4d0c2, 0x9d973a16, 0xeb72032b, 0x7001e9ff, 0x06b87151, + 0x9dcb9b85, 0xeb2ea2b8, 0x705d486c, 0x0b943260, 0x90e7d8b4, + 0xe602e189, 0x7d710b5d, 0x0bc893f3, 0x90bb7927, 0xe65e401a, + 0x7d2daace, 0x0b2d7146, 0x905e9b92, 0xe6bba2af, 0x7dc8487b, + 0x0b71d0d5, 0x90023a01, 0xe6e7033c, 0x7d94e9e8, 0x0ae6b42c, + 0x91955ef8, 0xe77067c5, 0x7c038d11, 0x0aba15bf, 0x91c9ff6b, + 0xe72cc656, 0x7c5f2c82, 0x0a5ff70a, 0x912c1dde, 0xe7c924e3, + 0x7cbace37, 0x0a035699, 0x9170bc4d, 0xe7958570, 0x7ce66fa4, + 0x09713ef8, 0x9202d42c, 0xe4e7ed11, 0x7f9407c5, 0x092d9f6b, + 0x925e75bf, 0xe4bb4c82, 0x7fc8a656, 0x09c87dde, 0x92bb970a, + 0xe45eae37, 0x7f2d44e3, 0x0994dc4d, 0x92e73699, 0xe4020fa4, + 0x7f71e570, 0x0803b8b4, 0x93705260, 0xe5956b5d, 0x7ee68189, + 0x085f1927, 0x932cf3f3, 0xe5c9cace, 0x7eba201a, 0x08bafb92, + 0x93c91146, 0xe52c287b, 0x7e5fc2af, 0x08e65a01, 0x9395b0d5, + 0xe57089e8, 0x7e03633c, 0x0e5e2b50, 0x952dc184, 0xe3c8f8b9, + 0x78bb126d, 0x0e028ac3, 0x95716017, 0xe394592a, 0x78e7b3fe, + 0x0ee76876, 0x959482a2, 0xe371bb9f, 0x7802514b, 0x0ebbc9e5, + 0x95c82331, 0xe32d1a0c, 0x785ef0d8, 0x0f2cad1c, 0x945f47c8, + 0xe2ba7ef5, 0x79c99421, 0x0f700c8f, 0x9403e65b, 0xe2e6df66, + 0x799535b2, 0x0f95ee3a, 0x94e604ee, 0xe2033dd3, 0x7970d707, + 0x0fc94fa9, 0x94baa57d, 0xe25f9c40, 0x792c7694, 0x0cbb27c8, + 0x97c8cd1c, 0xe12df421, 0x7a5e1ef5, 0x0ce7865b, 0x97946c8f, + 0xe17155b2, 0x7a02bf66, 0x0c0264ee, 0x97718e3a, 0xe194b707, + 0x7ae75dd3, 0x0c5ec57d, 0x972d2fa9, 0xe1c81694, 0x7abbfc40, + 0x0dc9a184, 0x96ba4b50, 0xe05f726d, 0x7b2c98b9, 0x0d950017, + 0x96e6eac3, 0xe003d3fe, 0x7b70392a, 0x0d70e2a2, 0x96030876, + 0xe0e6314b, 0x7b95db9f, 0x0d2c4331, 0x965fa9e5, 0xe0ba90d8, + 0x7bc97a0c}, + {0x00000000, 0x172864c0, 0x2e50c980, 0x3978ad40, 0x5ca19300, + 0x4b89f7c0, 0x72f15a80, 0x65d93e40, 0xb9432600, 0xae6b42c0, + 0x9713ef80, 0x803b8b40, 0xe5e2b500, 0xf2cad1c0, 0xcbb27c80, + 0xdc9a1840, 0xa9f74a41, 0xbedf2e81, 0x87a783c1, 0x908fe701, + 0xf556d941, 0xe27ebd81, 0xdb0610c1, 0xcc2e7401, 0x10b46c41, + 0x079c0881, 0x3ee4a5c1, 0x29ccc101, 0x4c15ff41, 0x5b3d9b81, + 0x624536c1, 0x756d5201, 0x889f92c3, 0x9fb7f603, 0xa6cf5b43, + 0xb1e73f83, 0xd43e01c3, 0xc3166503, 0xfa6ec843, 0xed46ac83, + 0x31dcb4c3, 0x26f4d003, 0x1f8c7d43, 0x08a41983, 0x6d7d27c3, + 0x7a554303, 0x432dee43, 0x54058a83, 0x2168d882, 0x3640bc42, + 0x0f381102, 0x181075c2, 0x7dc94b82, 0x6ae12f42, 0x53998202, + 0x44b1e6c2, 0x982bfe82, 0x8f039a42, 0xb67b3702, 0xa15353c2, + 0xc48a6d82, 0xd3a20942, 0xeadaa402, 0xfdf2c0c2, 0xca4e23c7, + 0xdd664707, 0xe41eea47, 0xf3368e87, 0x96efb0c7, 0x81c7d407, + 0xb8bf7947, 0xaf971d87, 0x730d05c7, 0x64256107, 0x5d5dcc47, + 0x4a75a887, 0x2fac96c7, 0x3884f207, 0x01fc5f47, 0x16d43b87, + 0x63b96986, 0x74910d46, 0x4de9a006, 0x5ac1c4c6, 0x3f18fa86, + 0x28309e46, 0x11483306, 0x066057c6, 0xdafa4f86, 0xcdd22b46, + 0xf4aa8606, 0xe382e2c6, 0x865bdc86, 0x9173b846, 0xa80b1506, + 0xbf2371c6, 0x42d1b104, 0x55f9d5c4, 0x6c817884, 0x7ba91c44, + 0x1e702204, 0x095846c4, 0x3020eb84, 0x27088f44, 0xfb929704, + 0xecbaf3c4, 0xd5c25e84, 0xc2ea3a44, 0xa7330404, 0xb01b60c4, + 0x8963cd84, 0x9e4ba944, 0xeb26fb45, 0xfc0e9f85, 0xc57632c5, + 0xd25e5605, 0xb7876845, 0xa0af0c85, 0x99d7a1c5, 0x8effc505, + 0x5265dd45, 0x454db985, 0x7c3514c5, 0x6b1d7005, 0x0ec44e45, + 0x19ec2a85, 0x209487c5, 0x37bce305, 0x4fed41cf, 0x58c5250f, + 0x61bd884f, 0x7695ec8f, 0x134cd2cf, 0x0464b60f, 0x3d1c1b4f, + 0x2a347f8f, 0xf6ae67cf, 0xe186030f, 0xd8feae4f, 0xcfd6ca8f, + 0xaa0ff4cf, 0xbd27900f, 0x845f3d4f, 0x9377598f, 0xe61a0b8e, + 0xf1326f4e, 0xc84ac20e, 0xdf62a6ce, 0xbabb988e, 0xad93fc4e, + 0x94eb510e, 0x83c335ce, 0x5f592d8e, 0x4871494e, 0x7109e40e, + 0x662180ce, 0x03f8be8e, 0x14d0da4e, 0x2da8770e, 0x3a8013ce, + 0xc772d30c, 0xd05ab7cc, 0xe9221a8c, 0xfe0a7e4c, 0x9bd3400c, + 0x8cfb24cc, 0xb583898c, 0xa2abed4c, 0x7e31f50c, 0x691991cc, + 0x50613c8c, 0x4749584c, 0x2290660c, 0x35b802cc, 0x0cc0af8c, + 0x1be8cb4c, 0x6e85994d, 0x79adfd8d, 0x40d550cd, 0x57fd340d, + 0x32240a4d, 0x250c6e8d, 0x1c74c3cd, 0x0b5ca70d, 0xd7c6bf4d, + 0xc0eedb8d, 0xf99676cd, 0xeebe120d, 0x8b672c4d, 0x9c4f488d, + 0xa537e5cd, 0xb21f810d, 0x85a36208, 0x928b06c8, 0xabf3ab88, + 0xbcdbcf48, 0xd902f108, 0xce2a95c8, 0xf7523888, 0xe07a5c48, + 0x3ce04408, 0x2bc820c8, 0x12b08d88, 0x0598e948, 0x6041d708, + 0x7769b3c8, 0x4e111e88, 0x59397a48, 0x2c542849, 0x3b7c4c89, + 0x0204e1c9, 0x152c8509, 0x70f5bb49, 0x67dddf89, 0x5ea572c9, + 0x498d1609, 0x95170e49, 0x823f6a89, 0xbb47c7c9, 0xac6fa309, + 0xc9b69d49, 0xde9ef989, 0xe7e654c9, 0xf0ce3009, 0x0d3cf0cb, + 0x1a14940b, 0x236c394b, 0x34445d8b, 0x519d63cb, 0x46b5070b, + 0x7fcdaa4b, 0x68e5ce8b, 0xb47fd6cb, 0xa357b20b, 0x9a2f1f4b, + 0x8d077b8b, 0xe8de45cb, 0xfff6210b, 0xc68e8c4b, 0xd1a6e88b, + 0xa4cbba8a, 0xb3e3de4a, 0x8a9b730a, 0x9db317ca, 0xf86a298a, + 0xef424d4a, 0xd63ae00a, 0xc11284ca, 0x1d889c8a, 0x0aa0f84a, + 0x33d8550a, 0x24f031ca, 0x41290f8a, 0x56016b4a, 0x6f79c60a, + 0x7851a2ca}, + {0x00000000, 0x9fda839e, 0xe4c4017d, 0x7b1e82e3, 0x12f904bb, + 0x8d238725, 0xf63d05c6, 0x69e78658, 0x25f20976, 0xba288ae8, + 0xc136080b, 0x5eec8b95, 0x370b0dcd, 0xa8d18e53, 0xd3cf0cb0, + 0x4c158f2e, 0x4be412ec, 0xd43e9172, 0xaf201391, 0x30fa900f, + 0x591d1657, 0xc6c795c9, 0xbdd9172a, 0x220394b4, 0x6e161b9a, + 0xf1cc9804, 0x8ad21ae7, 0x15089979, 0x7cef1f21, 0xe3359cbf, + 0x982b1e5c, 0x07f19dc2, 0x97c825d8, 0x0812a646, 0x730c24a5, + 0xecd6a73b, 0x85312163, 0x1aeba2fd, 0x61f5201e, 0xfe2fa380, + 0xb23a2cae, 0x2de0af30, 0x56fe2dd3, 0xc924ae4d, 0xa0c32815, + 0x3f19ab8b, 0x44072968, 0xdbddaaf6, 0xdc2c3734, 0x43f6b4aa, + 0x38e83649, 0xa732b5d7, 0xced5338f, 0x510fb011, 0x2a1132f2, + 0xb5cbb16c, 0xf9de3e42, 0x6604bddc, 0x1d1a3f3f, 0x82c0bca1, + 0xeb273af9, 0x74fdb967, 0x0fe33b84, 0x9039b81a, 0xf4e14df1, + 0x6b3bce6f, 0x10254c8c, 0x8fffcf12, 0xe618494a, 0x79c2cad4, + 0x02dc4837, 0x9d06cba9, 0xd1134487, 0x4ec9c719, 0x35d745fa, + 0xaa0dc664, 0xc3ea403c, 0x5c30c3a2, 0x272e4141, 0xb8f4c2df, + 0xbf055f1d, 0x20dfdc83, 0x5bc15e60, 0xc41bddfe, 0xadfc5ba6, + 0x3226d838, 0x49385adb, 0xd6e2d945, 0x9af7566b, 0x052dd5f5, + 0x7e335716, 0xe1e9d488, 0x880e52d0, 0x17d4d14e, 0x6cca53ad, + 0xf310d033, 0x63296829, 0xfcf3ebb7, 0x87ed6954, 0x1837eaca, + 0x71d06c92, 0xee0aef0c, 0x95146def, 0x0aceee71, 0x46db615f, + 0xd901e2c1, 0xa21f6022, 0x3dc5e3bc, 0x542265e4, 0xcbf8e67a, + 0xb0e66499, 0x2f3ce707, 0x28cd7ac5, 0xb717f95b, 0xcc097bb8, + 0x53d3f826, 0x3a347e7e, 0xa5eefde0, 0xdef07f03, 0x412afc9d, + 0x0d3f73b3, 0x92e5f02d, 0xe9fb72ce, 0x7621f150, 0x1fc67708, + 0x801cf496, 0xfb027675, 0x64d8f5eb, 0x32b39da3, 0xad691e3d, + 0xd6779cde, 0x49ad1f40, 0x204a9918, 0xbf901a86, 0xc48e9865, + 0x5b541bfb, 0x174194d5, 0x889b174b, 0xf38595a8, 0x6c5f1636, + 0x05b8906e, 0x9a6213f0, 0xe17c9113, 0x7ea6128d, 0x79578f4f, + 0xe68d0cd1, 0x9d938e32, 0x02490dac, 0x6bae8bf4, 0xf474086a, + 0x8f6a8a89, 0x10b00917, 0x5ca58639, 0xc37f05a7, 0xb8618744, + 0x27bb04da, 0x4e5c8282, 0xd186011c, 0xaa9883ff, 0x35420061, + 0xa57bb87b, 0x3aa13be5, 0x41bfb906, 0xde653a98, 0xb782bcc0, + 0x28583f5e, 0x5346bdbd, 0xcc9c3e23, 0x8089b10d, 0x1f533293, + 0x644db070, 0xfb9733ee, 0x9270b5b6, 0x0daa3628, 0x76b4b4cb, + 0xe96e3755, 0xee9faa97, 0x71452909, 0x0a5babea, 0x95812874, + 0xfc66ae2c, 0x63bc2db2, 0x18a2af51, 0x87782ccf, 0xcb6da3e1, + 0x54b7207f, 0x2fa9a29c, 0xb0732102, 0xd994a75a, 0x464e24c4, + 0x3d50a627, 0xa28a25b9, 0xc652d052, 0x598853cc, 0x2296d12f, + 0xbd4c52b1, 0xd4abd4e9, 0x4b715777, 0x306fd594, 0xafb5560a, + 0xe3a0d924, 0x7c7a5aba, 0x0764d859, 0x98be5bc7, 0xf159dd9f, + 0x6e835e01, 0x159ddce2, 0x8a475f7c, 0x8db6c2be, 0x126c4120, + 0x6972c3c3, 0xf6a8405d, 0x9f4fc605, 0x0095459b, 0x7b8bc778, + 0xe45144e6, 0xa844cbc8, 0x379e4856, 0x4c80cab5, 0xd35a492b, + 0xbabdcf73, 0x25674ced, 0x5e79ce0e, 0xc1a34d90, 0x519af58a, + 0xce407614, 0xb55ef4f7, 0x2a847769, 0x4363f131, 0xdcb972af, + 0xa7a7f04c, 0x387d73d2, 0x7468fcfc, 0xebb27f62, 0x90acfd81, + 0x0f767e1f, 0x6691f847, 0xf94b7bd9, 0x8255f93a, 0x1d8f7aa4, + 0x1a7ee766, 0x85a464f8, 0xfebae61b, 0x61606585, 0x0887e3dd, + 0x975d6043, 0xec43e2a0, 0x7399613e, 0x3f8cee10, 0xa0566d8e, + 0xdb48ef6d, 0x44926cf3, 0x2d75eaab, 0xb2af6935, 0xc9b1ebd6, + 0x566b6848}}; + +local const z_word_t FAR crc_braid_big_table[][256] = { + {0x00000000, 0x9e83da9f, 0x7d01c4e4, 0xe3821e7b, 0xbb04f912, + 0x2587238d, 0xc6053df6, 0x5886e769, 0x7609f225, 0xe88a28ba, + 0x0b0836c1, 0x958bec5e, 0xcd0d0b37, 0x538ed1a8, 0xb00ccfd3, + 0x2e8f154c, 0xec12e44b, 0x72913ed4, 0x911320af, 0x0f90fa30, + 0x57161d59, 0xc995c7c6, 0x2a17d9bd, 0xb4940322, 0x9a1b166e, + 0x0498ccf1, 0xe71ad28a, 0x79990815, 0x211fef7c, 0xbf9c35e3, + 0x5c1e2b98, 0xc29df107, 0xd825c897, 0x46a61208, 0xa5240c73, + 0x3ba7d6ec, 0x63213185, 0xfda2eb1a, 0x1e20f561, 0x80a32ffe, + 0xae2c3ab2, 0x30afe02d, 0xd32dfe56, 0x4dae24c9, 0x1528c3a0, + 0x8bab193f, 0x68290744, 0xf6aadddb, 0x34372cdc, 0xaab4f643, + 0x4936e838, 0xd7b532a7, 0x8f33d5ce, 0x11b00f51, 0xf232112a, + 0x6cb1cbb5, 0x423edef9, 0xdcbd0466, 0x3f3f1a1d, 0xa1bcc082, + 0xf93a27eb, 0x67b9fd74, 0x843be30f, 0x1ab83990, 0xf14de1f4, + 0x6fce3b6b, 0x8c4c2510, 0x12cfff8f, 0x4a4918e6, 0xd4cac279, + 0x3748dc02, 0xa9cb069d, 0x874413d1, 0x19c7c94e, 0xfa45d735, + 0x64c60daa, 0x3c40eac3, 0xa2c3305c, 0x41412e27, 0xdfc2f4b8, + 0x1d5f05bf, 0x83dcdf20, 0x605ec15b, 0xfedd1bc4, 0xa65bfcad, + 0x38d82632, 0xdb5a3849, 0x45d9e2d6, 0x6b56f79a, 0xf5d52d05, + 0x1657337e, 0x88d4e9e1, 0xd0520e88, 0x4ed1d417, 0xad53ca6c, + 0x33d010f3, 0x29682963, 0xb7ebf3fc, 0x5469ed87, 0xcaea3718, + 0x926cd071, 0x0cef0aee, 0xef6d1495, 0x71eece0a, 0x5f61db46, + 0xc1e201d9, 0x22601fa2, 0xbce3c53d, 0xe4652254, 0x7ae6f8cb, + 0x9964e6b0, 0x07e73c2f, 0xc57acd28, 0x5bf917b7, 0xb87b09cc, + 0x26f8d353, 0x7e7e343a, 0xe0fdeea5, 0x037ff0de, 0x9dfc2a41, + 0xb3733f0d, 0x2df0e592, 0xce72fbe9, 0x50f12176, 0x0877c61f, + 0x96f41c80, 0x757602fb, 0xebf5d864, 0xa39db332, 0x3d1e69ad, + 0xde9c77d6, 0x401fad49, 0x18994a20, 0x861a90bf, 0x65988ec4, + 0xfb1b545b, 0xd5944117, 0x4b179b88, 0xa89585f3, 0x36165f6c, + 0x6e90b805, 0xf013629a, 0x13917ce1, 0x8d12a67e, 0x4f8f5779, + 0xd10c8de6, 0x328e939d, 0xac0d4902, 0xf48bae6b, 0x6a0874f4, + 0x898a6a8f, 0x1709b010, 0x3986a55c, 0xa7057fc3, 0x448761b8, + 0xda04bb27, 0x82825c4e, 0x1c0186d1, 0xff8398aa, 0x61004235, + 0x7bb87ba5, 0xe53ba13a, 0x06b9bf41, 0x983a65de, 0xc0bc82b7, + 0x5e3f5828, 0xbdbd4653, 0x233e9ccc, 0x0db18980, 0x9332531f, + 0x70b04d64, 0xee3397fb, 0xb6b57092, 0x2836aa0d, 0xcbb4b476, + 0x55376ee9, 0x97aa9fee, 0x09294571, 0xeaab5b0a, 0x74288195, + 0x2cae66fc, 0xb22dbc63, 0x51afa218, 0xcf2c7887, 0xe1a36dcb, + 0x7f20b754, 0x9ca2a92f, 0x022173b0, 0x5aa794d9, 0xc4244e46, + 0x27a6503d, 0xb9258aa2, 0x52d052c6, 0xcc538859, 0x2fd19622, + 0xb1524cbd, 0xe9d4abd4, 0x7757714b, 0x94d56f30, 0x0a56b5af, + 0x24d9a0e3, 0xba5a7a7c, 0x59d86407, 0xc75bbe98, 0x9fdd59f1, + 0x015e836e, 0xe2dc9d15, 0x7c5f478a, 0xbec2b68d, 0x20416c12, + 0xc3c37269, 0x5d40a8f6, 0x05c64f9f, 0x9b459500, 0x78c78b7b, + 0xe64451e4, 0xc8cb44a8, 0x56489e37, 0xb5ca804c, 0x2b495ad3, + 0x73cfbdba, 0xed4c6725, 0x0ece795e, 0x904da3c1, 0x8af59a51, + 0x147640ce, 0xf7f45eb5, 0x6977842a, 0x31f16343, 0xaf72b9dc, + 0x4cf0a7a7, 0xd2737d38, 0xfcfc6874, 0x627fb2eb, 0x81fdac90, + 0x1f7e760f, 0x47f89166, 0xd97b4bf9, 0x3af95582, 0xa47a8f1d, + 0x66e77e1a, 0xf864a485, 0x1be6bafe, 0x85656061, 0xdde38708, + 0x43605d97, 0xa0e243ec, 0x3e619973, 0x10ee8c3f, 0x8e6d56a0, + 0x6def48db, 0xf36c9244, 0xabea752d, 0x3569afb2, 0xd6ebb1c9, + 0x48686b56}, + {0x00000000, 0xc0642817, 0x80c9502e, 0x40ad7839, 0x0093a15c, + 0xc0f7894b, 0x805af172, 0x403ed965, 0x002643b9, 0xc0426bae, + 0x80ef1397, 0x408b3b80, 0x00b5e2e5, 0xc0d1caf2, 0x807cb2cb, + 0x40189adc, 0x414af7a9, 0x812edfbe, 0xc183a787, 0x01e78f90, + 0x41d956f5, 0x81bd7ee2, 0xc11006db, 0x01742ecc, 0x416cb410, + 0x81089c07, 0xc1a5e43e, 0x01c1cc29, 0x41ff154c, 0x819b3d5b, + 0xc1364562, 0x01526d75, 0xc3929f88, 0x03f6b79f, 0x435bcfa6, + 0x833fe7b1, 0xc3013ed4, 0x036516c3, 0x43c86efa, 0x83ac46ed, + 0xc3b4dc31, 0x03d0f426, 0x437d8c1f, 0x8319a408, 0xc3277d6d, + 0x0343557a, 0x43ee2d43, 0x838a0554, 0x82d86821, 0x42bc4036, + 0x0211380f, 0xc2751018, 0x824bc97d, 0x422fe16a, 0x02829953, + 0xc2e6b144, 0x82fe2b98, 0x429a038f, 0x02377bb6, 0xc25353a1, + 0x826d8ac4, 0x4209a2d3, 0x02a4daea, 0xc2c0f2fd, 0xc7234eca, + 0x074766dd, 0x47ea1ee4, 0x878e36f3, 0xc7b0ef96, 0x07d4c781, + 0x4779bfb8, 0x871d97af, 0xc7050d73, 0x07612564, 0x47cc5d5d, + 0x87a8754a, 0xc796ac2f, 0x07f28438, 0x475ffc01, 0x873bd416, + 0x8669b963, 0x460d9174, 0x06a0e94d, 0xc6c4c15a, 0x86fa183f, + 0x469e3028, 0x06334811, 0xc6576006, 0x864ffada, 0x462bd2cd, + 0x0686aaf4, 0xc6e282e3, 0x86dc5b86, 0x46b87391, 0x06150ba8, + 0xc67123bf, 0x04b1d142, 0xc4d5f955, 0x8478816c, 0x441ca97b, + 0x0422701e, 0xc4465809, 0x84eb2030, 0x448f0827, 0x049792fb, + 0xc4f3baec, 0x845ec2d5, 0x443aeac2, 0x040433a7, 0xc4601bb0, + 0x84cd6389, 0x44a94b9e, 0x45fb26eb, 0x859f0efc, 0xc53276c5, + 0x05565ed2, 0x456887b7, 0x850cafa0, 0xc5a1d799, 0x05c5ff8e, + 0x45dd6552, 0x85b94d45, 0xc514357c, 0x05701d6b, 0x454ec40e, + 0x852aec19, 0xc5879420, 0x05e3bc37, 0xcf41ed4f, 0x0f25c558, + 0x4f88bd61, 0x8fec9576, 0xcfd24c13, 0x0fb66404, 0x4f1b1c3d, + 0x8f7f342a, 0xcf67aef6, 0x0f0386e1, 0x4faefed8, 0x8fcad6cf, + 0xcff40faa, 0x0f9027bd, 0x4f3d5f84, 0x8f597793, 0x8e0b1ae6, + 0x4e6f32f1, 0x0ec24ac8, 0xcea662df, 0x8e98bbba, 0x4efc93ad, + 0x0e51eb94, 0xce35c383, 0x8e2d595f, 0x4e497148, 0x0ee40971, + 0xce802166, 0x8ebef803, 0x4edad014, 0x0e77a82d, 0xce13803a, + 0x0cd372c7, 0xccb75ad0, 0x8c1a22e9, 0x4c7e0afe, 0x0c40d39b, + 0xcc24fb8c, 0x8c8983b5, 0x4cedaba2, 0x0cf5317e, 0xcc911969, + 0x8c3c6150, 0x4c584947, 0x0c669022, 0xcc02b835, 0x8cafc00c, + 0x4ccbe81b, 0x4d99856e, 0x8dfdad79, 0xcd50d540, 0x0d34fd57, + 0x4d0a2432, 0x8d6e0c25, 0xcdc3741c, 0x0da75c0b, 0x4dbfc6d7, + 0x8ddbeec0, 0xcd7696f9, 0x0d12beee, 0x4d2c678b, 0x8d484f9c, + 0xcde537a5, 0x0d811fb2, 0x0862a385, 0xc8068b92, 0x88abf3ab, + 0x48cfdbbc, 0x08f102d9, 0xc8952ace, 0x883852f7, 0x485c7ae0, + 0x0844e03c, 0xc820c82b, 0x888db012, 0x48e99805, 0x08d74160, + 0xc8b36977, 0x881e114e, 0x487a3959, 0x4928542c, 0x894c7c3b, + 0xc9e10402, 0x09852c15, 0x49bbf570, 0x89dfdd67, 0xc972a55e, + 0x09168d49, 0x490e1795, 0x896a3f82, 0xc9c747bb, 0x09a36fac, + 0x499db6c9, 0x89f99ede, 0xc954e6e7, 0x0930cef0, 0xcbf03c0d, + 0x0b94141a, 0x4b396c23, 0x8b5d4434, 0xcb639d51, 0x0b07b546, + 0x4baacd7f, 0x8bcee568, 0xcbd67fb4, 0x0bb257a3, 0x4b1f2f9a, + 0x8b7b078d, 0xcb45dee8, 0x0b21f6ff, 0x4b8c8ec6, 0x8be8a6d1, + 0x8abacba4, 0x4adee3b3, 0x0a739b8a, 0xca17b39d, 0x8a296af8, + 0x4a4d42ef, 0x0ae03ad6, 0xca8412c1, 0x8a9c881d, 0x4af8a00a, + 0x0a55d833, 0xca31f024, 0x8a0f2941, 0x4a6b0156, 0x0ac6796f, + 0xcaa25178}, + {0x00000000, 0xd4ea739b, 0xe9d396ed, 0x3d39e576, 0x93a15c00, + 0x474b2f9b, 0x7a72caed, 0xae98b976, 0x2643b900, 0xf2a9ca9b, + 0xcf902fed, 0x1b7a5c76, 0xb5e2e500, 0x6108969b, 0x5c3173ed, + 0x88db0076, 0x4c867201, 0x986c019a, 0xa555e4ec, 0x71bf9777, + 0xdf272e01, 0x0bcd5d9a, 0x36f4b8ec, 0xe21ecb77, 0x6ac5cb01, + 0xbe2fb89a, 0x83165dec, 0x57fc2e77, 0xf9649701, 0x2d8ee49a, + 0x10b701ec, 0xc45d7277, 0x980ce502, 0x4ce69699, 0x71df73ef, + 0xa5350074, 0x0badb902, 0xdf47ca99, 0xe27e2fef, 0x36945c74, + 0xbe4f5c02, 0x6aa52f99, 0x579ccaef, 0x8376b974, 0x2dee0002, + 0xf9047399, 0xc43d96ef, 0x10d7e574, 0xd48a9703, 0x0060e498, + 0x3d5901ee, 0xe9b37275, 0x472bcb03, 0x93c1b898, 0xaef85dee, + 0x7a122e75, 0xf2c92e03, 0x26235d98, 0x1b1ab8ee, 0xcff0cb75, + 0x61687203, 0xb5820198, 0x88bbe4ee, 0x5c519775, 0x3019ca05, + 0xe4f3b99e, 0xd9ca5ce8, 0x0d202f73, 0xa3b89605, 0x7752e59e, + 0x4a6b00e8, 0x9e817373, 0x165a7305, 0xc2b0009e, 0xff89e5e8, + 0x2b639673, 0x85fb2f05, 0x51115c9e, 0x6c28b9e8, 0xb8c2ca73, + 0x7c9fb804, 0xa875cb9f, 0x954c2ee9, 0x41a65d72, 0xef3ee404, + 0x3bd4979f, 0x06ed72e9, 0xd2070172, 0x5adc0104, 0x8e36729f, + 0xb30f97e9, 0x67e5e472, 0xc97d5d04, 0x1d972e9f, 0x20aecbe9, + 0xf444b872, 0xa8152f07, 0x7cff5c9c, 0x41c6b9ea, 0x952cca71, + 0x3bb47307, 0xef5e009c, 0xd267e5ea, 0x068d9671, 0x8e569607, + 0x5abce59c, 0x678500ea, 0xb36f7371, 0x1df7ca07, 0xc91db99c, + 0xf4245cea, 0x20ce2f71, 0xe4935d06, 0x30792e9d, 0x0d40cbeb, + 0xd9aab870, 0x77320106, 0xa3d8729d, 0x9ee197eb, 0x4a0be470, + 0xc2d0e406, 0x163a979d, 0x2b0372eb, 0xffe90170, 0x5171b806, + 0x859bcb9d, 0xb8a22eeb, 0x6c485d70, 0x6032940b, 0xb4d8e790, + 0x89e102e6, 0x5d0b717d, 0xf393c80b, 0x2779bb90, 0x1a405ee6, + 0xceaa2d7d, 0x46712d0b, 0x929b5e90, 0xafa2bbe6, 0x7b48c87d, + 0xd5d0710b, 0x013a0290, 0x3c03e7e6, 0xe8e9947d, 0x2cb4e60a, + 0xf85e9591, 0xc56770e7, 0x118d037c, 0xbf15ba0a, 0x6bffc991, + 0x56c62ce7, 0x822c5f7c, 0x0af75f0a, 0xde1d2c91, 0xe324c9e7, + 0x37ceba7c, 0x9956030a, 0x4dbc7091, 0x708595e7, 0xa46fe67c, + 0xf83e7109, 0x2cd40292, 0x11ede7e4, 0xc507947f, 0x6b9f2d09, + 0xbf755e92, 0x824cbbe4, 0x56a6c87f, 0xde7dc809, 0x0a97bb92, + 0x37ae5ee4, 0xe3442d7f, 0x4ddc9409, 0x9936e792, 0xa40f02e4, + 0x70e5717f, 0xb4b80308, 0x60527093, 0x5d6b95e5, 0x8981e67e, + 0x27195f08, 0xf3f32c93, 0xcecac9e5, 0x1a20ba7e, 0x92fbba08, + 0x4611c993, 0x7b282ce5, 0xafc25f7e, 0x015ae608, 0xd5b09593, + 0xe88970e5, 0x3c63037e, 0x502b5e0e, 0x84c12d95, 0xb9f8c8e3, + 0x6d12bb78, 0xc38a020e, 0x17607195, 0x2a5994e3, 0xfeb3e778, + 0x7668e70e, 0xa2829495, 0x9fbb71e3, 0x4b510278, 0xe5c9bb0e, + 0x3123c895, 0x0c1a2de3, 0xd8f05e78, 0x1cad2c0f, 0xc8475f94, + 0xf57ebae2, 0x2194c979, 0x8f0c700f, 0x5be60394, 0x66dfe6e2, + 0xb2359579, 0x3aee950f, 0xee04e694, 0xd33d03e2, 0x07d77079, + 0xa94fc90f, 0x7da5ba94, 0x409c5fe2, 0x94762c79, 0xc827bb0c, + 0x1ccdc897, 0x21f42de1, 0xf51e5e7a, 0x5b86e70c, 0x8f6c9497, + 0xb25571e1, 0x66bf027a, 0xee64020c, 0x3a8e7197, 0x07b794e1, + 0xd35de77a, 0x7dc55e0c, 0xa92f2d97, 0x9416c8e1, 0x40fcbb7a, + 0x84a1c90d, 0x504bba96, 0x6d725fe0, 0xb9982c7b, 0x1700950d, + 0xc3eae696, 0xfed303e0, 0x2a39707b, 0xa2e2700d, 0x76080396, + 0x4b31e6e0, 0x9fdb957b, 0x31432c0d, 0xe5a95f96, 0xd890bae0, + 0x0c7ac97b}, + {0x00000000, 0x27652581, 0x0fcc3bd9, 0x28a91e58, 0x5f9e0669, + 0x78fb23e8, 0x50523db0, 0x77371831, 0xbe3c0dd2, 0x99592853, + 0xb1f0360b, 0x9695138a, 0xe1a20bbb, 0xc6c72e3a, 0xee6e3062, + 0xc90b15e3, 0x3d7f6b7f, 0x1a1a4efe, 0x32b350a6, 0x15d67527, + 0x62e16d16, 0x45844897, 0x6d2d56cf, 0x4a48734e, 0x834366ad, + 0xa426432c, 0x8c8f5d74, 0xabea78f5, 0xdcdd60c4, 0xfbb84545, + 0xd3115b1d, 0xf4747e9c, 0x7afed6fe, 0x5d9bf37f, 0x7532ed27, + 0x5257c8a6, 0x2560d097, 0x0205f516, 0x2aaceb4e, 0x0dc9cecf, + 0xc4c2db2c, 0xe3a7fead, 0xcb0ee0f5, 0xec6bc574, 0x9b5cdd45, + 0xbc39f8c4, 0x9490e69c, 0xb3f5c31d, 0x4781bd81, 0x60e49800, + 0x484d8658, 0x6f28a3d9, 0x181fbbe8, 0x3f7a9e69, 0x17d38031, + 0x30b6a5b0, 0xf9bdb053, 0xded895d2, 0xf6718b8a, 0xd114ae0b, + 0xa623b63a, 0x814693bb, 0xa9ef8de3, 0x8e8aa862, 0xb5fadc26, + 0x929ff9a7, 0xba36e7ff, 0x9d53c27e, 0xea64da4f, 0xcd01ffce, + 0xe5a8e196, 0xc2cdc417, 0x0bc6d1f4, 0x2ca3f475, 0x040aea2d, + 0x236fcfac, 0x5458d79d, 0x733df21c, 0x5b94ec44, 0x7cf1c9c5, + 0x8885b759, 0xafe092d8, 0x87498c80, 0xa02ca901, 0xd71bb130, + 0xf07e94b1, 0xd8d78ae9, 0xffb2af68, 0x36b9ba8b, 0x11dc9f0a, + 0x39758152, 0x1e10a4d3, 0x6927bce2, 0x4e429963, 0x66eb873b, + 0x418ea2ba, 0xcf040ad8, 0xe8612f59, 0xc0c83101, 0xe7ad1480, + 0x909a0cb1, 0xb7ff2930, 0x9f563768, 0xb83312e9, 0x7138070a, + 0x565d228b, 0x7ef43cd3, 0x59911952, 0x2ea60163, 0x09c324e2, + 0x216a3aba, 0x060f1f3b, 0xf27b61a7, 0xd51e4426, 0xfdb75a7e, + 0xdad27fff, 0xade567ce, 0x8a80424f, 0xa2295c17, 0x854c7996, + 0x4c476c75, 0x6b2249f4, 0x438b57ac, 0x64ee722d, 0x13d96a1c, + 0x34bc4f9d, 0x1c1551c5, 0x3b707444, 0x6af5b94d, 0x4d909ccc, + 0x65398294, 0x425ca715, 0x356bbf24, 0x120e9aa5, 0x3aa784fd, + 0x1dc2a17c, 0xd4c9b49f, 0xf3ac911e, 0xdb058f46, 0xfc60aac7, + 0x8b57b2f6, 0xac329777, 0x849b892f, 0xa3feacae, 0x578ad232, + 0x70eff7b3, 0x5846e9eb, 0x7f23cc6a, 0x0814d45b, 0x2f71f1da, + 0x07d8ef82, 0x20bdca03, 0xe9b6dfe0, 0xced3fa61, 0xe67ae439, + 0xc11fc1b8, 0xb628d989, 0x914dfc08, 0xb9e4e250, 0x9e81c7d1, + 0x100b6fb3, 0x376e4a32, 0x1fc7546a, 0x38a271eb, 0x4f9569da, + 0x68f04c5b, 0x40595203, 0x673c7782, 0xae376261, 0x895247e0, + 0xa1fb59b8, 0x869e7c39, 0xf1a96408, 0xd6cc4189, 0xfe655fd1, + 0xd9007a50, 0x2d7404cc, 0x0a11214d, 0x22b83f15, 0x05dd1a94, + 0x72ea02a5, 0x558f2724, 0x7d26397c, 0x5a431cfd, 0x9348091e, + 0xb42d2c9f, 0x9c8432c7, 0xbbe11746, 0xccd60f77, 0xebb32af6, + 0xc31a34ae, 0xe47f112f, 0xdf0f656b, 0xf86a40ea, 0xd0c35eb2, + 0xf7a67b33, 0x80916302, 0xa7f44683, 0x8f5d58db, 0xa8387d5a, + 0x613368b9, 0x46564d38, 0x6eff5360, 0x499a76e1, 0x3ead6ed0, + 0x19c84b51, 0x31615509, 0x16047088, 0xe2700e14, 0xc5152b95, + 0xedbc35cd, 0xcad9104c, 0xbdee087d, 0x9a8b2dfc, 0xb22233a4, + 0x95471625, 0x5c4c03c6, 0x7b292647, 0x5380381f, 0x74e51d9e, + 0x03d205af, 0x24b7202e, 0x0c1e3e76, 0x2b7b1bf7, 0xa5f1b395, + 0x82949614, 0xaa3d884c, 0x8d58adcd, 0xfa6fb5fc, 0xdd0a907d, + 0xf5a38e25, 0xd2c6aba4, 0x1bcdbe47, 0x3ca89bc6, 0x1401859e, + 0x3364a01f, 0x4453b82e, 0x63369daf, 0x4b9f83f7, 0x6cfaa676, + 0x988ed8ea, 0xbfebfd6b, 0x9742e333, 0xb027c6b2, 0xc710de83, + 0xe075fb02, 0xc8dce55a, 0xefb9c0db, 0x26b2d538, 0x01d7f0b9, + 0x297eeee1, 0x0e1bcb60, 0x792cd351, 0x5e49f6d0, 0x76e0e888, + 0x5185cd09}}; + +#endif + +#endif + +#endif + +local const z_crc_t FAR x2n_table[] = { + 0x40000000, 0x20000000, 0x08000000, 0x00800000, 0x00008000, + 0xedb88320, 0xb1e6b092, 0xa06a2517, 0xed627dae, 0x88d14467, + 0xd7bbfe6a, 0xec447f11, 0x8e7ea170, 0x6427800e, 0x4d47bae0, + 0x09fe548f, 0x83852d0f, 0x30362f1a, 0x7b5a9cc3, 0x31fec169, + 0x9fec022a, 0x6c8dedc4, 0x15d6874d, 0x5fde7a4e, 0xbad90e37, + 0x2e4e5eef, 0x4eaba214, 0xa8a472c0, 0x429a969e, 0x148d302a, + 0xc40ba6d0, 0xc4e22c3c}; diff --git a/thirdparty/zlib-1.3.1/deflate.c b/thirdparty/zlib-1.3.1/deflate.c new file mode 100644 index 0000000..012ea81 --- /dev/null +++ b/thirdparty/zlib-1.3.1/deflate.c @@ -0,0 +1,2139 @@ +/* deflate.c -- compress data using the deflation algorithm + * Copyright (C) 1995-2024 Jean-loup Gailly and Mark Adler + * For conditions of distribution and use, see copyright notice in zlib.h + */ + +/* + * ALGORITHM + * + * The "deflation" process depends on being able to identify portions + * of the input text which are identical to earlier input (within a + * sliding window trailing behind the input currently being processed). + * + * The most straightforward technique turns out to be the fastest for + * most input files: try all possible matches and select the longest. + * The key feature of this algorithm is that insertions into the string + * dictionary are very simple and thus fast, and deletions are avoided + * completely. Insertions are performed at each input character, whereas + * string matches are performed only when the previous match ends. So it + * is preferable to spend more time in matches to allow very fast string + * insertions and avoid deletions. The matching algorithm for small + * strings is inspired from that of Rabin & Karp. A brute force approach + * is used to find longer strings when a small match has been found. + * A similar algorithm is used in comic (by Jan-Mark Wams) and freeze + * (by Leonid Broukhis). + * A previous version of this file used a more sophisticated algorithm + * (by Fiala and Greene) which is guaranteed to run in linear amortized + * time, but has a larger average cost, uses more memory and is patented. + * However the F&G algorithm may be faster for some highly redundant + * files if the parameter max_chain_length (described below) is too large. + * + * ACKNOWLEDGEMENTS + * + * The idea of lazy evaluation of matches is due to Jan-Mark Wams, and + * I found it in 'freeze' written by Leonid Broukhis. + * Thanks to many people for bug reports and testing. + * + * REFERENCES + * + * Deutsch, L.P.,"DEFLATE Compressed Data Format Specification". + * Available in http://tools.ietf.org/html/rfc1951 + * + * A description of the Rabin and Karp algorithm is given in the book + * "Algorithms" by R. Sedgewick, Addison-Wesley, p252. + * + * Fiala,E.R., and Greene,D.H. + * Data Compression with Finite Windows, Comm.ACM, 32,4 (1989) 490-595 + * + */ + +/* @(#) $Id$ */ + +#include "deflate.h" + +const char deflate_copyright[] = + " deflate 1.3.1 Copyright 1995-2024 Jean-loup Gailly and Mark Adler "; +/* + If you use the zlib library in a product, an acknowledgment is welcome + in the documentation of your product. If for some reason you cannot + include such an acknowledgment, I would appreciate that you keep this + copyright string in the executable of your product. + */ + +typedef enum { + need_more, /* block not completed, need more input or more output */ + block_done, /* block flush performed */ + finish_started, /* finish started, need only more output at next deflate */ + finish_done /* finish done, accept no more input or output */ +} block_state; + +typedef block_state (*compress_func)(deflate_state *s, int flush); +/* Compression function. Returns the block state after the call. */ + +local block_state deflate_stored(deflate_state *s, int flush); +local block_state deflate_fast(deflate_state *s, int flush); +#ifndef FASTEST +local block_state deflate_slow(deflate_state *s, int flush); +#endif +local block_state deflate_rle(deflate_state *s, int flush); +local block_state deflate_huff(deflate_state *s, int flush); + +/* =========================================================================== + * Local data + */ + +#define NIL 0 +/* Tail of hash chains */ + +#ifndef TOO_FAR +# define TOO_FAR 4096 +#endif +/* Matches of length 3 are discarded if their distance exceeds TOO_FAR */ + +/* Values for max_lazy_match, good_match and max_chain_length, depending on + * the desired pack level (0..9). The values given below have been tuned to + * exclude worst case performance for pathological files. Better values may be + * found for specific files. + */ +typedef struct config_s { + ush good_length; /* reduce lazy search above this match length */ + ush max_lazy; /* do not perform lazy search above this match length */ + ush nice_length; /* quit search above this match length */ + ush max_chain; + compress_func func; +} config; + +#ifdef FASTEST +local const config configuration_table[2] = { +/* good lazy nice chain */ +/* 0 */ {0, 0, 0, 0, deflate_stored}, /* store only */ +/* 1 */ {4, 4, 8, 4, deflate_fast}}; /* max speed, no lazy matches */ +#else +local const config configuration_table[10] = { +/* good lazy nice chain */ +/* 0 */ {0, 0, 0, 0, deflate_stored}, /* store only */ +/* 1 */ {4, 4, 8, 4, deflate_fast}, /* max speed, no lazy matches */ +/* 2 */ {4, 5, 16, 8, deflate_fast}, +/* 3 */ {4, 6, 32, 32, deflate_fast}, + +/* 4 */ {4, 4, 16, 16, deflate_slow}, /* lazy matches */ +/* 5 */ {8, 16, 32, 32, deflate_slow}, +/* 6 */ {8, 16, 128, 128, deflate_slow}, +/* 7 */ {8, 32, 128, 256, deflate_slow}, +/* 8 */ {32, 128, 258, 1024, deflate_slow}, +/* 9 */ {32, 258, 258, 4096, deflate_slow}}; /* max compression */ +#endif + +/* Note: the deflate() code requires max_lazy >= MIN_MATCH and max_chain >= 4 + * For deflate_fast() (levels <= 3) good is ignored and lazy has a different + * meaning. + */ + +/* rank Z_BLOCK between Z_NO_FLUSH and Z_PARTIAL_FLUSH */ +#define RANK(f) (((f) * 2) - ((f) > 4 ? 9 : 0)) + +/* =========================================================================== + * Update a hash value with the given input byte + * IN assertion: all calls to UPDATE_HASH are made with consecutive input + * characters, so that a running hash key can be computed from the previous + * key instead of complete recalculation each time. + */ +#define UPDATE_HASH(s,h,c) (h = (((h) << s->hash_shift) ^ (c)) & s->hash_mask) + + +/* =========================================================================== + * Insert string str in the dictionary and set match_head to the previous head + * of the hash chain (the most recent string with same hash key). Return + * the previous length of the hash chain. + * If this file is compiled with -DFASTEST, the compression level is forced + * to 1, and no hash chains are maintained. + * IN assertion: all calls to INSERT_STRING are made with consecutive input + * characters and the first MIN_MATCH bytes of str are valid (except for + * the last MIN_MATCH-1 bytes of the input file). + */ +#ifdef FASTEST +#define INSERT_STRING(s, str, match_head) \ + (UPDATE_HASH(s, s->ins_h, s->window[(str) + (MIN_MATCH-1)]), \ + match_head = s->head[s->ins_h], \ + s->head[s->ins_h] = (Pos)(str)) +#else +#define INSERT_STRING(s, str, match_head) \ + (UPDATE_HASH(s, s->ins_h, s->window[(str) + (MIN_MATCH-1)]), \ + match_head = s->prev[(str) & s->w_mask] = s->head[s->ins_h], \ + s->head[s->ins_h] = (Pos)(str)) +#endif + +/* =========================================================================== + * Initialize the hash table (avoiding 64K overflow for 16 bit systems). + * prev[] will be initialized on the fly. + */ +#define CLEAR_HASH(s) \ + do { \ + s->head[s->hash_size - 1] = NIL; \ + zmemzero((Bytef *)s->head, \ + (unsigned)(s->hash_size - 1)*sizeof(*s->head)); \ + } while (0) + +/* =========================================================================== + * Slide the hash table when sliding the window down (could be avoided with 32 + * bit values at the expense of memory usage). We slide even when level == 0 to + * keep the hash table consistent if we switch back to level > 0 later. + */ +#if defined(__has_feature) +# if __has_feature(memory_sanitizer) + __attribute__((no_sanitize("memory"))) +# endif +#endif +local void slide_hash(deflate_state *s) { + unsigned n, m; + Posf *p; + uInt wsize = s->w_size; + + n = s->hash_size; + p = &s->head[n]; + do { + m = *--p; + *p = (Pos)(m >= wsize ? m - wsize : NIL); + } while (--n); + n = wsize; +#ifndef FASTEST + p = &s->prev[n]; + do { + m = *--p; + *p = (Pos)(m >= wsize ? m - wsize : NIL); + /* If n is not on any hash chain, prev[n] is garbage but + * its value will never be used. + */ + } while (--n); +#endif +} + +/* =========================================================================== + * Read a new buffer from the current input stream, update the adler32 + * and total number of bytes read. All deflate() input goes through + * this function so some applications may wish to modify it to avoid + * allocating a large strm->next_in buffer and copying from it. + * (See also flush_pending()). + */ +local unsigned read_buf(z_streamp strm, Bytef *buf, unsigned size) { + unsigned len = strm->avail_in; + + if (len > size) len = size; + if (len == 0) return 0; + + strm->avail_in -= len; + + zmemcpy(buf, strm->next_in, len); + if (strm->state->wrap == 1) { + strm->adler = adler32(strm->adler, buf, len); + } +#ifdef GZIP + else if (strm->state->wrap == 2) { + strm->adler = crc32(strm->adler, buf, len); + } +#endif + strm->next_in += len; + strm->total_in += len; + + return len; +} + +/* =========================================================================== + * Fill the window when the lookahead becomes insufficient. + * Updates strstart and lookahead. + * + * IN assertion: lookahead < MIN_LOOKAHEAD + * OUT assertions: strstart <= window_size-MIN_LOOKAHEAD + * At least one byte has been read, or avail_in == 0; reads are + * performed for at least two bytes (required for the zip translate_eol + * option -- not supported here). + */ +local void fill_window(deflate_state *s) { + unsigned n; + unsigned more; /* Amount of free space at the end of the window. */ + uInt wsize = s->w_size; + + Assert(s->lookahead < MIN_LOOKAHEAD, "already enough lookahead"); + + do { + more = (unsigned)(s->window_size -(ulg)s->lookahead -(ulg)s->strstart); + + /* Deal with !@#$% 64K limit: */ + if (sizeof(int) <= 2) { + if (more == 0 && s->strstart == 0 && s->lookahead == 0) { + more = wsize; + + } else if (more == (unsigned)(-1)) { + /* Very unlikely, but possible on 16 bit machine if + * strstart == 0 && lookahead == 1 (input done a byte at time) + */ + more--; + } + } + + /* If the window is almost full and there is insufficient lookahead, + * move the upper half to the lower one to make room in the upper half. + */ + if (s->strstart >= wsize + MAX_DIST(s)) { + + zmemcpy(s->window, s->window + wsize, (unsigned)wsize - more); + s->match_start -= wsize; + s->strstart -= wsize; /* we now have strstart >= MAX_DIST */ + s->block_start -= (long) wsize; + if (s->insert > s->strstart) + s->insert = s->strstart; + slide_hash(s); + more += wsize; + } + if (s->strm->avail_in == 0) break; + + /* If there was no sliding: + * strstart <= WSIZE+MAX_DIST-1 && lookahead <= MIN_LOOKAHEAD - 1 && + * more == window_size - lookahead - strstart + * => more >= window_size - (MIN_LOOKAHEAD-1 + WSIZE + MAX_DIST-1) + * => more >= window_size - 2*WSIZE + 2 + * In the BIG_MEM or MMAP case (not yet supported), + * window_size == input_size + MIN_LOOKAHEAD && + * strstart + s->lookahead <= input_size => more >= MIN_LOOKAHEAD. + * Otherwise, window_size == 2*WSIZE so more >= 2. + * If there was sliding, more >= WSIZE. So in all cases, more >= 2. + */ + Assert(more >= 2, "more < 2"); + + n = read_buf(s->strm, s->window + s->strstart + s->lookahead, more); + s->lookahead += n; + + /* Initialize the hash value now that we have some input: */ + if (s->lookahead + s->insert >= MIN_MATCH) { + uInt str = s->strstart - s->insert; + s->ins_h = s->window[str]; + UPDATE_HASH(s, s->ins_h, s->window[str + 1]); +#if MIN_MATCH != 3 + Call UPDATE_HASH() MIN_MATCH-3 more times +#endif + while (s->insert) { + UPDATE_HASH(s, s->ins_h, s->window[str + MIN_MATCH-1]); +#ifndef FASTEST + s->prev[str & s->w_mask] = s->head[s->ins_h]; +#endif + s->head[s->ins_h] = (Pos)str; + str++; + s->insert--; + if (s->lookahead + s->insert < MIN_MATCH) + break; + } + } + /* If the whole input has less than MIN_MATCH bytes, ins_h is garbage, + * but this is not important since only literal bytes will be emitted. + */ + + } while (s->lookahead < MIN_LOOKAHEAD && s->strm->avail_in != 0); + + /* If the WIN_INIT bytes after the end of the current data have never been + * written, then zero those bytes in order to avoid memory check reports of + * the use of uninitialized (or uninitialised as Julian writes) bytes by + * the longest match routines. Update the high water mark for the next + * time through here. WIN_INIT is set to MAX_MATCH since the longest match + * routines allow scanning to strstart + MAX_MATCH, ignoring lookahead. + */ + if (s->high_water < s->window_size) { + ulg curr = s->strstart + (ulg)(s->lookahead); + ulg init; + + if (s->high_water < curr) { + /* Previous high water mark below current data -- zero WIN_INIT + * bytes or up to end of window, whichever is less. + */ + init = s->window_size - curr; + if (init > WIN_INIT) + init = WIN_INIT; + zmemzero(s->window + curr, (unsigned)init); + s->high_water = curr + init; + } + else if (s->high_water < (ulg)curr + WIN_INIT) { + /* High water mark at or above current data, but below current data + * plus WIN_INIT -- zero out to current data plus WIN_INIT, or up + * to end of window, whichever is less. + */ + init = (ulg)curr + WIN_INIT - s->high_water; + if (init > s->window_size - s->high_water) + init = s->window_size - s->high_water; + zmemzero(s->window + s->high_water, (unsigned)init); + s->high_water += init; + } + } + + Assert((ulg)s->strstart <= s->window_size - MIN_LOOKAHEAD, + "not enough room for search"); +} + +/* ========================================================================= */ +int ZEXPORT deflateInit_(z_streamp strm, int level, const char *version, + int stream_size) { + return deflateInit2_(strm, level, Z_DEFLATED, MAX_WBITS, DEF_MEM_LEVEL, + Z_DEFAULT_STRATEGY, version, stream_size); + /* To do: ignore strm->next_in if we use it as window */ +} + +/* ========================================================================= */ +int ZEXPORT deflateInit2_(z_streamp strm, int level, int method, + int windowBits, int memLevel, int strategy, + const char *version, int stream_size) { + deflate_state *s; + int wrap = 1; + static const char my_version[] = ZLIB_VERSION; + + if (version == Z_NULL || version[0] != my_version[0] || + stream_size != sizeof(z_stream)) { + return Z_VERSION_ERROR; + } + if (strm == Z_NULL) return Z_STREAM_ERROR; + + strm->msg = Z_NULL; + if (strm->zalloc == (alloc_func)0) { +#ifdef Z_SOLO + return Z_STREAM_ERROR; +#else + strm->zalloc = zcalloc; + strm->opaque = (voidpf)0; +#endif + } + if (strm->zfree == (free_func)0) +#ifdef Z_SOLO + return Z_STREAM_ERROR; +#else + strm->zfree = zcfree; +#endif + +#ifdef FASTEST + if (level != 0) level = 1; +#else + if (level == Z_DEFAULT_COMPRESSION) level = 6; +#endif + + if (windowBits < 0) { /* suppress zlib wrapper */ + wrap = 0; + if (windowBits < -15) + return Z_STREAM_ERROR; + windowBits = -windowBits; + } +#ifdef GZIP + else if (windowBits > 15) { + wrap = 2; /* write gzip wrapper instead */ + windowBits -= 16; + } +#endif + if (memLevel < 1 || memLevel > MAX_MEM_LEVEL || method != Z_DEFLATED || + windowBits < 8 || windowBits > 15 || level < 0 || level > 9 || + strategy < 0 || strategy > Z_FIXED || (windowBits == 8 && wrap != 1)) { + return Z_STREAM_ERROR; + } + if (windowBits == 8) windowBits = 9; /* until 256-byte window bug fixed */ + s = (deflate_state *) ZALLOC(strm, 1, sizeof(deflate_state)); + if (s == Z_NULL) return Z_MEM_ERROR; + strm->state = (struct internal_state FAR *)s; + s->strm = strm; + s->status = INIT_STATE; /* to pass state test in deflateReset() */ + + s->wrap = wrap; + s->gzhead = Z_NULL; + s->w_bits = (uInt)windowBits; + s->w_size = 1 << s->w_bits; + s->w_mask = s->w_size - 1; + + s->hash_bits = (uInt)memLevel + 7; + s->hash_size = 1 << s->hash_bits; + s->hash_mask = s->hash_size - 1; + s->hash_shift = ((s->hash_bits + MIN_MATCH-1) / MIN_MATCH); + + s->window = (Bytef *) ZALLOC(strm, s->w_size, 2*sizeof(Byte)); + s->prev = (Posf *) ZALLOC(strm, s->w_size, sizeof(Pos)); + s->head = (Posf *) ZALLOC(strm, s->hash_size, sizeof(Pos)); + + s->high_water = 0; /* nothing written to s->window yet */ + + s->lit_bufsize = 1 << (memLevel + 6); /* 16K elements by default */ + + /* We overlay pending_buf and sym_buf. This works since the average size + * for length/distance pairs over any compressed block is assured to be 31 + * bits or less. + * + * Analysis: The longest fixed codes are a length code of 8 bits plus 5 + * extra bits, for lengths 131 to 257. The longest fixed distance codes are + * 5 bits plus 13 extra bits, for distances 16385 to 32768. The longest + * possible fixed-codes length/distance pair is then 31 bits total. + * + * sym_buf starts one-fourth of the way into pending_buf. So there are + * three bytes in sym_buf for every four bytes in pending_buf. Each symbol + * in sym_buf is three bytes -- two for the distance and one for the + * literal/length. As each symbol is consumed, the pointer to the next + * sym_buf value to read moves forward three bytes. From that symbol, up to + * 31 bits are written to pending_buf. The closest the written pending_buf + * bits gets to the next sym_buf symbol to read is just before the last + * code is written. At that time, 31*(n - 2) bits have been written, just + * after 24*(n - 2) bits have been consumed from sym_buf. sym_buf starts at + * 8*n bits into pending_buf. (Note that the symbol buffer fills when n - 1 + * symbols are written.) The closest the writing gets to what is unread is + * then n + 14 bits. Here n is lit_bufsize, which is 16384 by default, and + * can range from 128 to 32768. + * + * Therefore, at a minimum, there are 142 bits of space between what is + * written and what is read in the overlain buffers, so the symbols cannot + * be overwritten by the compressed data. That space is actually 139 bits, + * due to the three-bit fixed-code block header. + * + * That covers the case where either Z_FIXED is specified, forcing fixed + * codes, or when the use of fixed codes is chosen, because that choice + * results in a smaller compressed block than dynamic codes. That latter + * condition then assures that the above analysis also covers all dynamic + * blocks. A dynamic-code block will only be chosen to be emitted if it has + * fewer bits than a fixed-code block would for the same set of symbols. + * Therefore its average symbol length is assured to be less than 31. So + * the compressed data for a dynamic block also cannot overwrite the + * symbols from which it is being constructed. + */ + + s->pending_buf = (uchf *) ZALLOC(strm, s->lit_bufsize, LIT_BUFS); + s->pending_buf_size = (ulg)s->lit_bufsize * 4; + + if (s->window == Z_NULL || s->prev == Z_NULL || s->head == Z_NULL || + s->pending_buf == Z_NULL) { + s->status = FINISH_STATE; + strm->msg = ERR_MSG(Z_MEM_ERROR); + deflateEnd (strm); + return Z_MEM_ERROR; + } +#ifdef LIT_MEM + s->d_buf = (ushf *)(s->pending_buf + (s->lit_bufsize << 1)); + s->l_buf = s->pending_buf + (s->lit_bufsize << 2); + s->sym_end = s->lit_bufsize - 1; +#else + s->sym_buf = s->pending_buf + s->lit_bufsize; + s->sym_end = (s->lit_bufsize - 1) * 3; +#endif + /* We avoid equality with lit_bufsize*3 because of wraparound at 64K + * on 16 bit machines and because stored blocks are restricted to + * 64K-1 bytes. + */ + + s->level = level; + s->strategy = strategy; + s->method = (Byte)method; + + return deflateReset(strm); +} + +/* ========================================================================= + * Check for a valid deflate stream state. Return 0 if ok, 1 if not. + */ +local int deflateStateCheck(z_streamp strm) { + deflate_state *s; + if (strm == Z_NULL || + strm->zalloc == (alloc_func)0 || strm->zfree == (free_func)0) + return 1; + s = strm->state; + if (s == Z_NULL || s->strm != strm || (s->status != INIT_STATE && +#ifdef GZIP + s->status != GZIP_STATE && +#endif + s->status != EXTRA_STATE && + s->status != NAME_STATE && + s->status != COMMENT_STATE && + s->status != HCRC_STATE && + s->status != BUSY_STATE && + s->status != FINISH_STATE)) + return 1; + return 0; +} + +/* ========================================================================= */ +int ZEXPORT deflateSetDictionary(z_streamp strm, const Bytef *dictionary, + uInt dictLength) { + deflate_state *s; + uInt str, n; + int wrap; + unsigned avail; + z_const unsigned char *next; + + if (deflateStateCheck(strm) || dictionary == Z_NULL) + return Z_STREAM_ERROR; + s = strm->state; + wrap = s->wrap; + if (wrap == 2 || (wrap == 1 && s->status != INIT_STATE) || s->lookahead) + return Z_STREAM_ERROR; + + /* when using zlib wrappers, compute Adler-32 for provided dictionary */ + if (wrap == 1) + strm->adler = adler32(strm->adler, dictionary, dictLength); + s->wrap = 0; /* avoid computing Adler-32 in read_buf */ + + /* if dictionary would fill window, just replace the history */ + if (dictLength >= s->w_size) { + if (wrap == 0) { /* already empty otherwise */ + CLEAR_HASH(s); + s->strstart = 0; + s->block_start = 0L; + s->insert = 0; + } + dictionary += dictLength - s->w_size; /* use the tail */ + dictLength = s->w_size; + } + + /* insert dictionary into window and hash */ + avail = strm->avail_in; + next = strm->next_in; + strm->avail_in = dictLength; + strm->next_in = (z_const Bytef *)dictionary; + fill_window(s); + while (s->lookahead >= MIN_MATCH) { + str = s->strstart; + n = s->lookahead - (MIN_MATCH-1); + do { + UPDATE_HASH(s, s->ins_h, s->window[str + MIN_MATCH-1]); +#ifndef FASTEST + s->prev[str & s->w_mask] = s->head[s->ins_h]; +#endif + s->head[s->ins_h] = (Pos)str; + str++; + } while (--n); + s->strstart = str; + s->lookahead = MIN_MATCH-1; + fill_window(s); + } + s->strstart += s->lookahead; + s->block_start = (long)s->strstart; + s->insert = s->lookahead; + s->lookahead = 0; + s->match_length = s->prev_length = MIN_MATCH-1; + s->match_available = 0; + strm->next_in = next; + strm->avail_in = avail; + s->wrap = wrap; + return Z_OK; +} + +/* ========================================================================= */ +int ZEXPORT deflateGetDictionary(z_streamp strm, Bytef *dictionary, + uInt *dictLength) { + deflate_state *s; + uInt len; + + if (deflateStateCheck(strm)) + return Z_STREAM_ERROR; + s = strm->state; + len = s->strstart + s->lookahead; + if (len > s->w_size) + len = s->w_size; + if (dictionary != Z_NULL && len) + zmemcpy(dictionary, s->window + s->strstart + s->lookahead - len, len); + if (dictLength != Z_NULL) + *dictLength = len; + return Z_OK; +} + +/* ========================================================================= */ +int ZEXPORT deflateResetKeep(z_streamp strm) { + deflate_state *s; + + if (deflateStateCheck(strm)) { + return Z_STREAM_ERROR; + } + + strm->total_in = strm->total_out = 0; + strm->msg = Z_NULL; /* use zfree if we ever allocate msg dynamically */ + strm->data_type = Z_UNKNOWN; + + s = (deflate_state *)strm->state; + s->pending = 0; + s->pending_out = s->pending_buf; + + if (s->wrap < 0) { + s->wrap = -s->wrap; /* was made negative by deflate(..., Z_FINISH); */ + } + s->status = +#ifdef GZIP + s->wrap == 2 ? GZIP_STATE : +#endif + INIT_STATE; + strm->adler = +#ifdef GZIP + s->wrap == 2 ? crc32(0L, Z_NULL, 0) : +#endif + adler32(0L, Z_NULL, 0); + s->last_flush = -2; + + _tr_init(s); + + return Z_OK; +} + +/* =========================================================================== + * Initialize the "longest match" routines for a new zlib stream + */ +local void lm_init(deflate_state *s) { + s->window_size = (ulg)2L*s->w_size; + + CLEAR_HASH(s); + + /* Set the default configuration parameters: + */ + s->max_lazy_match = configuration_table[s->level].max_lazy; + s->good_match = configuration_table[s->level].good_length; + s->nice_match = configuration_table[s->level].nice_length; + s->max_chain_length = configuration_table[s->level].max_chain; + + s->strstart = 0; + s->block_start = 0L; + s->lookahead = 0; + s->insert = 0; + s->match_length = s->prev_length = MIN_MATCH-1; + s->match_available = 0; + s->ins_h = 0; +} + +/* ========================================================================= */ +int ZEXPORT deflateReset(z_streamp strm) { + int ret; + + ret = deflateResetKeep(strm); + if (ret == Z_OK) + lm_init(strm->state); + return ret; +} + +/* ========================================================================= */ +int ZEXPORT deflateSetHeader(z_streamp strm, gz_headerp head) { + if (deflateStateCheck(strm) || strm->state->wrap != 2) + return Z_STREAM_ERROR; + strm->state->gzhead = head; + return Z_OK; +} + +/* ========================================================================= */ +int ZEXPORT deflatePending(z_streamp strm, unsigned *pending, int *bits) { + if (deflateStateCheck(strm)) return Z_STREAM_ERROR; + if (pending != Z_NULL) + *pending = strm->state->pending; + if (bits != Z_NULL) + *bits = strm->state->bi_valid; + return Z_OK; +} + +/* ========================================================================= */ +int ZEXPORT deflatePrime(z_streamp strm, int bits, int value) { + deflate_state *s; + int put; + + if (deflateStateCheck(strm)) return Z_STREAM_ERROR; + s = strm->state; +#ifdef LIT_MEM + if (bits < 0 || bits > 16 || + (uchf *)s->d_buf < s->pending_out + ((Buf_size + 7) >> 3)) + return Z_BUF_ERROR; +#else + if (bits < 0 || bits > 16 || + s->sym_buf < s->pending_out + ((Buf_size + 7) >> 3)) + return Z_BUF_ERROR; +#endif + do { + put = Buf_size - s->bi_valid; + if (put > bits) + put = bits; + s->bi_buf |= (ush)((value & ((1 << put) - 1)) << s->bi_valid); + s->bi_valid += put; + _tr_flush_bits(s); + value >>= put; + bits -= put; + } while (bits); + return Z_OK; +} + +/* ========================================================================= */ +int ZEXPORT deflateParams(z_streamp strm, int level, int strategy) { + deflate_state *s; + compress_func func; + + if (deflateStateCheck(strm)) return Z_STREAM_ERROR; + s = strm->state; + +#ifdef FASTEST + if (level != 0) level = 1; +#else + if (level == Z_DEFAULT_COMPRESSION) level = 6; +#endif + if (level < 0 || level > 9 || strategy < 0 || strategy > Z_FIXED) { + return Z_STREAM_ERROR; + } + func = configuration_table[s->level].func; + + if ((strategy != s->strategy || func != configuration_table[level].func) && + s->last_flush != -2) { + /* Flush the last buffer: */ + int err = deflate(strm, Z_BLOCK); + if (err == Z_STREAM_ERROR) + return err; + if (strm->avail_in || (s->strstart - s->block_start) + s->lookahead) + return Z_BUF_ERROR; + } + if (s->level != level) { + if (s->level == 0 && s->matches != 0) { + if (s->matches == 1) + slide_hash(s); + else + CLEAR_HASH(s); + s->matches = 0; + } + s->level = level; + s->max_lazy_match = configuration_table[level].max_lazy; + s->good_match = configuration_table[level].good_length; + s->nice_match = configuration_table[level].nice_length; + s->max_chain_length = configuration_table[level].max_chain; + } + s->strategy = strategy; + return Z_OK; +} + +/* ========================================================================= */ +int ZEXPORT deflateTune(z_streamp strm, int good_length, int max_lazy, + int nice_length, int max_chain) { + deflate_state *s; + + if (deflateStateCheck(strm)) return Z_STREAM_ERROR; + s = strm->state; + s->good_match = (uInt)good_length; + s->max_lazy_match = (uInt)max_lazy; + s->nice_match = nice_length; + s->max_chain_length = (uInt)max_chain; + return Z_OK; +} + +/* ========================================================================= + * For the default windowBits of 15 and memLevel of 8, this function returns a + * close to exact, as well as small, upper bound on the compressed size. This + * is an expansion of ~0.03%, plus a small constant. + * + * For any setting other than those defaults for windowBits and memLevel, one + * of two worst case bounds is returned. This is at most an expansion of ~4% or + * ~13%, plus a small constant. + * + * Both the 0.03% and 4% derive from the overhead of stored blocks. The first + * one is for stored blocks of 16383 bytes (memLevel == 8), whereas the second + * is for stored blocks of 127 bytes (the worst case memLevel == 1). The + * expansion results from five bytes of header for each stored block. + * + * The larger expansion of 13% results from a window size less than or equal to + * the symbols buffer size (windowBits <= memLevel + 7). In that case some of + * the data being compressed may have slid out of the sliding window, impeding + * a stored block from being emitted. Then the only choice is a fixed or + * dynamic block, where a fixed block limits the maximum expansion to 9 bits + * per 8-bit byte, plus 10 bits for every block. The smallest block size for + * which this can occur is 255 (memLevel == 2). + * + * Shifts are used to approximate divisions, for speed. + */ +uLong ZEXPORT deflateBound(z_streamp strm, uLong sourceLen) { + deflate_state *s; + uLong fixedlen, storelen, wraplen; + + /* upper bound for fixed blocks with 9-bit literals and length 255 + (memLevel == 2, which is the lowest that may not use stored blocks) -- + ~13% overhead plus a small constant */ + fixedlen = sourceLen + (sourceLen >> 3) + (sourceLen >> 8) + + (sourceLen >> 9) + 4; + + /* upper bound for stored blocks with length 127 (memLevel == 1) -- + ~4% overhead plus a small constant */ + storelen = sourceLen + (sourceLen >> 5) + (sourceLen >> 7) + + (sourceLen >> 11) + 7; + + /* if can't get parameters, return larger bound plus a zlib wrapper */ + if (deflateStateCheck(strm)) + return (fixedlen > storelen ? fixedlen : storelen) + 6; + + /* compute wrapper length */ + s = strm->state; + switch (s->wrap) { + case 0: /* raw deflate */ + wraplen = 0; + break; + case 1: /* zlib wrapper */ + wraplen = 6 + (s->strstart ? 4 : 0); + break; +#ifdef GZIP + case 2: /* gzip wrapper */ + wraplen = 18; + if (s->gzhead != Z_NULL) { /* user-supplied gzip header */ + Bytef *str; + if (s->gzhead->extra != Z_NULL) + wraplen += 2 + s->gzhead->extra_len; + str = s->gzhead->name; + if (str != Z_NULL) + do { + wraplen++; + } while (*str++); + str = s->gzhead->comment; + if (str != Z_NULL) + do { + wraplen++; + } while (*str++); + if (s->gzhead->hcrc) + wraplen += 2; + } + break; +#endif + default: /* for compiler happiness */ + wraplen = 6; + } + + /* if not default parameters, return one of the conservative bounds */ + if (s->w_bits != 15 || s->hash_bits != 8 + 7) + return (s->w_bits <= s->hash_bits && s->level ? fixedlen : storelen) + + wraplen; + + /* default settings: return tight bound for that case -- ~0.03% overhead + plus a small constant */ + return sourceLen + (sourceLen >> 12) + (sourceLen >> 14) + + (sourceLen >> 25) + 13 - 6 + wraplen; +} + +/* ========================================================================= + * Put a short in the pending buffer. The 16-bit value is put in MSB order. + * IN assertion: the stream state is correct and there is enough room in + * pending_buf. + */ +local void putShortMSB(deflate_state *s, uInt b) { + put_byte(s, (Byte)(b >> 8)); + put_byte(s, (Byte)(b & 0xff)); +} + +/* ========================================================================= + * Flush as much pending output as possible. All deflate() output, except for + * some deflate_stored() output, goes through this function so some + * applications may wish to modify it to avoid allocating a large + * strm->next_out buffer and copying into it. (See also read_buf()). + */ +local void flush_pending(z_streamp strm) { + unsigned len; + deflate_state *s = strm->state; + + _tr_flush_bits(s); + len = s->pending; + if (len > strm->avail_out) len = strm->avail_out; + if (len == 0) return; + + zmemcpy(strm->next_out, s->pending_out, len); + strm->next_out += len; + s->pending_out += len; + strm->total_out += len; + strm->avail_out -= len; + s->pending -= len; + if (s->pending == 0) { + s->pending_out = s->pending_buf; + } +} + +/* =========================================================================== + * Update the header CRC with the bytes s->pending_buf[beg..s->pending - 1]. + */ +#define HCRC_UPDATE(beg) \ + do { \ + if (s->gzhead->hcrc && s->pending > (beg)) \ + strm->adler = crc32(strm->adler, s->pending_buf + (beg), \ + s->pending - (beg)); \ + } while (0) + +/* ========================================================================= */ +int ZEXPORT deflate(z_streamp strm, int flush) { + int old_flush; /* value of flush param for previous deflate call */ + deflate_state *s; + + if (deflateStateCheck(strm) || flush > Z_BLOCK || flush < 0) { + return Z_STREAM_ERROR; + } + s = strm->state; + + if (strm->next_out == Z_NULL || + (strm->avail_in != 0 && strm->next_in == Z_NULL) || + (s->status == FINISH_STATE && flush != Z_FINISH)) { + ERR_RETURN(strm, Z_STREAM_ERROR); + } + if (strm->avail_out == 0) ERR_RETURN(strm, Z_BUF_ERROR); + + old_flush = s->last_flush; + s->last_flush = flush; + + /* Flush as much pending output as possible */ + if (s->pending != 0) { + flush_pending(strm); + if (strm->avail_out == 0) { + /* Since avail_out is 0, deflate will be called again with + * more output space, but possibly with both pending and + * avail_in equal to zero. There won't be anything to do, + * but this is not an error situation so make sure we + * return OK instead of BUF_ERROR at next call of deflate: + */ + s->last_flush = -1; + return Z_OK; + } + + /* Make sure there is something to do and avoid duplicate consecutive + * flushes. For repeated and useless calls with Z_FINISH, we keep + * returning Z_STREAM_END instead of Z_BUF_ERROR. + */ + } else if (strm->avail_in == 0 && RANK(flush) <= RANK(old_flush) && + flush != Z_FINISH) { + ERR_RETURN(strm, Z_BUF_ERROR); + } + + /* User must not provide more input after the first FINISH: */ + if (s->status == FINISH_STATE && strm->avail_in != 0) { + ERR_RETURN(strm, Z_BUF_ERROR); + } + + /* Write the header */ + if (s->status == INIT_STATE && s->wrap == 0) + s->status = BUSY_STATE; + if (s->status == INIT_STATE) { + /* zlib header */ + uInt header = (Z_DEFLATED + ((s->w_bits - 8) << 4)) << 8; + uInt level_flags; + + if (s->strategy >= Z_HUFFMAN_ONLY || s->level < 2) + level_flags = 0; + else if (s->level < 6) + level_flags = 1; + else if (s->level == 6) + level_flags = 2; + else + level_flags = 3; + header |= (level_flags << 6); + if (s->strstart != 0) header |= PRESET_DICT; + header += 31 - (header % 31); + + putShortMSB(s, header); + + /* Save the adler32 of the preset dictionary: */ + if (s->strstart != 0) { + putShortMSB(s, (uInt)(strm->adler >> 16)); + putShortMSB(s, (uInt)(strm->adler & 0xffff)); + } + strm->adler = adler32(0L, Z_NULL, 0); + s->status = BUSY_STATE; + + /* Compression must start with an empty pending buffer */ + flush_pending(strm); + if (s->pending != 0) { + s->last_flush = -1; + return Z_OK; + } + } +#ifdef GZIP + if (s->status == GZIP_STATE) { + /* gzip header */ + strm->adler = crc32(0L, Z_NULL, 0); + put_byte(s, 31); + put_byte(s, 139); + put_byte(s, 8); + if (s->gzhead == Z_NULL) { + put_byte(s, 0); + put_byte(s, 0); + put_byte(s, 0); + put_byte(s, 0); + put_byte(s, 0); + put_byte(s, s->level == 9 ? 2 : + (s->strategy >= Z_HUFFMAN_ONLY || s->level < 2 ? + 4 : 0)); + put_byte(s, OS_CODE); + s->status = BUSY_STATE; + + /* Compression must start with an empty pending buffer */ + flush_pending(strm); + if (s->pending != 0) { + s->last_flush = -1; + return Z_OK; + } + } + else { + put_byte(s, (s->gzhead->text ? 1 : 0) + + (s->gzhead->hcrc ? 2 : 0) + + (s->gzhead->extra == Z_NULL ? 0 : 4) + + (s->gzhead->name == Z_NULL ? 0 : 8) + + (s->gzhead->comment == Z_NULL ? 0 : 16) + ); + put_byte(s, (Byte)(s->gzhead->time & 0xff)); + put_byte(s, (Byte)((s->gzhead->time >> 8) & 0xff)); + put_byte(s, (Byte)((s->gzhead->time >> 16) & 0xff)); + put_byte(s, (Byte)((s->gzhead->time >> 24) & 0xff)); + put_byte(s, s->level == 9 ? 2 : + (s->strategy >= Z_HUFFMAN_ONLY || s->level < 2 ? + 4 : 0)); + put_byte(s, s->gzhead->os & 0xff); + if (s->gzhead->extra != Z_NULL) { + put_byte(s, s->gzhead->extra_len & 0xff); + put_byte(s, (s->gzhead->extra_len >> 8) & 0xff); + } + if (s->gzhead->hcrc) + strm->adler = crc32(strm->adler, s->pending_buf, + s->pending); + s->gzindex = 0; + s->status = EXTRA_STATE; + } + } + if (s->status == EXTRA_STATE) { + if (s->gzhead->extra != Z_NULL) { + ulg beg = s->pending; /* start of bytes to update crc */ + uInt left = (s->gzhead->extra_len & 0xffff) - s->gzindex; + while (s->pending + left > s->pending_buf_size) { + uInt copy = s->pending_buf_size - s->pending; + zmemcpy(s->pending_buf + s->pending, + s->gzhead->extra + s->gzindex, copy); + s->pending = s->pending_buf_size; + HCRC_UPDATE(beg); + s->gzindex += copy; + flush_pending(strm); + if (s->pending != 0) { + s->last_flush = -1; + return Z_OK; + } + beg = 0; + left -= copy; + } + zmemcpy(s->pending_buf + s->pending, + s->gzhead->extra + s->gzindex, left); + s->pending += left; + HCRC_UPDATE(beg); + s->gzindex = 0; + } + s->status = NAME_STATE; + } + if (s->status == NAME_STATE) { + if (s->gzhead->name != Z_NULL) { + ulg beg = s->pending; /* start of bytes to update crc */ + int val; + do { + if (s->pending == s->pending_buf_size) { + HCRC_UPDATE(beg); + flush_pending(strm); + if (s->pending != 0) { + s->last_flush = -1; + return Z_OK; + } + beg = 0; + } + val = s->gzhead->name[s->gzindex++]; + put_byte(s, val); + } while (val != 0); + HCRC_UPDATE(beg); + s->gzindex = 0; + } + s->status = COMMENT_STATE; + } + if (s->status == COMMENT_STATE) { + if (s->gzhead->comment != Z_NULL) { + ulg beg = s->pending; /* start of bytes to update crc */ + int val; + do { + if (s->pending == s->pending_buf_size) { + HCRC_UPDATE(beg); + flush_pending(strm); + if (s->pending != 0) { + s->last_flush = -1; + return Z_OK; + } + beg = 0; + } + val = s->gzhead->comment[s->gzindex++]; + put_byte(s, val); + } while (val != 0); + HCRC_UPDATE(beg); + } + s->status = HCRC_STATE; + } + if (s->status == HCRC_STATE) { + if (s->gzhead->hcrc) { + if (s->pending + 2 > s->pending_buf_size) { + flush_pending(strm); + if (s->pending != 0) { + s->last_flush = -1; + return Z_OK; + } + } + put_byte(s, (Byte)(strm->adler & 0xff)); + put_byte(s, (Byte)((strm->adler >> 8) & 0xff)); + strm->adler = crc32(0L, Z_NULL, 0); + } + s->status = BUSY_STATE; + + /* Compression must start with an empty pending buffer */ + flush_pending(strm); + if (s->pending != 0) { + s->last_flush = -1; + return Z_OK; + } + } +#endif + + /* Start a new block or continue the current one. + */ + if (strm->avail_in != 0 || s->lookahead != 0 || + (flush != Z_NO_FLUSH && s->status != FINISH_STATE)) { + block_state bstate; + + bstate = s->level == 0 ? deflate_stored(s, flush) : + s->strategy == Z_HUFFMAN_ONLY ? deflate_huff(s, flush) : + s->strategy == Z_RLE ? deflate_rle(s, flush) : + (*(configuration_table[s->level].func))(s, flush); + + if (bstate == finish_started || bstate == finish_done) { + s->status = FINISH_STATE; + } + if (bstate == need_more || bstate == finish_started) { + if (strm->avail_out == 0) { + s->last_flush = -1; /* avoid BUF_ERROR next call, see above */ + } + return Z_OK; + /* If flush != Z_NO_FLUSH && avail_out == 0, the next call + * of deflate should use the same flush parameter to make sure + * that the flush is complete. So we don't have to output an + * empty block here, this will be done at next call. This also + * ensures that for a very small output buffer, we emit at most + * one empty block. + */ + } + if (bstate == block_done) { + if (flush == Z_PARTIAL_FLUSH) { + _tr_align(s); + } else if (flush != Z_BLOCK) { /* FULL_FLUSH or SYNC_FLUSH */ + _tr_stored_block(s, (char*)0, 0L, 0); + /* For a full flush, this empty block will be recognized + * as a special marker by inflate_sync(). + */ + if (flush == Z_FULL_FLUSH) { + CLEAR_HASH(s); /* forget history */ + if (s->lookahead == 0) { + s->strstart = 0; + s->block_start = 0L; + s->insert = 0; + } + } + } + flush_pending(strm); + if (strm->avail_out == 0) { + s->last_flush = -1; /* avoid BUF_ERROR at next call, see above */ + return Z_OK; + } + } + } + + if (flush != Z_FINISH) return Z_OK; + if (s->wrap <= 0) return Z_STREAM_END; + + /* Write the trailer */ +#ifdef GZIP + if (s->wrap == 2) { + put_byte(s, (Byte)(strm->adler & 0xff)); + put_byte(s, (Byte)((strm->adler >> 8) & 0xff)); + put_byte(s, (Byte)((strm->adler >> 16) & 0xff)); + put_byte(s, (Byte)((strm->adler >> 24) & 0xff)); + put_byte(s, (Byte)(strm->total_in & 0xff)); + put_byte(s, (Byte)((strm->total_in >> 8) & 0xff)); + put_byte(s, (Byte)((strm->total_in >> 16) & 0xff)); + put_byte(s, (Byte)((strm->total_in >> 24) & 0xff)); + } + else +#endif + { + putShortMSB(s, (uInt)(strm->adler >> 16)); + putShortMSB(s, (uInt)(strm->adler & 0xffff)); + } + flush_pending(strm); + /* If avail_out is zero, the application will call deflate again + * to flush the rest. + */ + if (s->wrap > 0) s->wrap = -s->wrap; /* write the trailer only once! */ + return s->pending != 0 ? Z_OK : Z_STREAM_END; +} + +/* ========================================================================= */ +int ZEXPORT deflateEnd(z_streamp strm) { + int status; + + if (deflateStateCheck(strm)) return Z_STREAM_ERROR; + + status = strm->state->status; + + /* Deallocate in reverse order of allocations: */ + TRY_FREE(strm, strm->state->pending_buf); + TRY_FREE(strm, strm->state->head); + TRY_FREE(strm, strm->state->prev); + TRY_FREE(strm, strm->state->window); + + ZFREE(strm, strm->state); + strm->state = Z_NULL; + + return status == BUSY_STATE ? Z_DATA_ERROR : Z_OK; +} + +/* ========================================================================= + * Copy the source state to the destination state. + * To simplify the source, this is not supported for 16-bit MSDOS (which + * doesn't have enough memory anyway to duplicate compression states). + */ +int ZEXPORT deflateCopy(z_streamp dest, z_streamp source) { +#ifdef MAXSEG_64K + (void)dest; + (void)source; + return Z_STREAM_ERROR; +#else + deflate_state *ds; + deflate_state *ss; + + + if (deflateStateCheck(source) || dest == Z_NULL) { + return Z_STREAM_ERROR; + } + + ss = source->state; + + zmemcpy((voidpf)dest, (voidpf)source, sizeof(z_stream)); + + ds = (deflate_state *) ZALLOC(dest, 1, sizeof(deflate_state)); + if (ds == Z_NULL) return Z_MEM_ERROR; + dest->state = (struct internal_state FAR *) ds; + zmemcpy((voidpf)ds, (voidpf)ss, sizeof(deflate_state)); + ds->strm = dest; + + ds->window = (Bytef *) ZALLOC(dest, ds->w_size, 2*sizeof(Byte)); + ds->prev = (Posf *) ZALLOC(dest, ds->w_size, sizeof(Pos)); + ds->head = (Posf *) ZALLOC(dest, ds->hash_size, sizeof(Pos)); + ds->pending_buf = (uchf *) ZALLOC(dest, ds->lit_bufsize, LIT_BUFS); + + if (ds->window == Z_NULL || ds->prev == Z_NULL || ds->head == Z_NULL || + ds->pending_buf == Z_NULL) { + deflateEnd (dest); + return Z_MEM_ERROR; + } + /* following zmemcpy do not work for 16-bit MSDOS */ + zmemcpy(ds->window, ss->window, ds->w_size * 2 * sizeof(Byte)); + zmemcpy((voidpf)ds->prev, (voidpf)ss->prev, ds->w_size * sizeof(Pos)); + zmemcpy((voidpf)ds->head, (voidpf)ss->head, ds->hash_size * sizeof(Pos)); + zmemcpy(ds->pending_buf, ss->pending_buf, ds->lit_bufsize * LIT_BUFS); + + ds->pending_out = ds->pending_buf + (ss->pending_out - ss->pending_buf); +#ifdef LIT_MEM + ds->d_buf = (ushf *)(ds->pending_buf + (ds->lit_bufsize << 1)); + ds->l_buf = ds->pending_buf + (ds->lit_bufsize << 2); +#else + ds->sym_buf = ds->pending_buf + ds->lit_bufsize; +#endif + + ds->l_desc.dyn_tree = ds->dyn_ltree; + ds->d_desc.dyn_tree = ds->dyn_dtree; + ds->bl_desc.dyn_tree = ds->bl_tree; + + return Z_OK; +#endif /* MAXSEG_64K */ +} + +#ifndef FASTEST +/* =========================================================================== + * Set match_start to the longest match starting at the given string and + * return its length. Matches shorter or equal to prev_length are discarded, + * in which case the result is equal to prev_length and match_start is + * garbage. + * IN assertions: cur_match is the head of the hash chain for the current + * string (strstart) and its distance is <= MAX_DIST, and prev_length >= 1 + * OUT assertion: the match length is not greater than s->lookahead. + */ +local uInt longest_match(deflate_state *s, IPos cur_match) { + unsigned chain_length = s->max_chain_length;/* max hash chain length */ + register Bytef *scan = s->window + s->strstart; /* current string */ + register Bytef *match; /* matched string */ + register int len; /* length of current match */ + int best_len = (int)s->prev_length; /* best match length so far */ + int nice_match = s->nice_match; /* stop if match long enough */ + IPos limit = s->strstart > (IPos)MAX_DIST(s) ? + s->strstart - (IPos)MAX_DIST(s) : NIL; + /* Stop when cur_match becomes <= limit. To simplify the code, + * we prevent matches with the string of window index 0. + */ + Posf *prev = s->prev; + uInt wmask = s->w_mask; + +#ifdef UNALIGNED_OK + /* Compare two bytes at a time. Note: this is not always beneficial. + * Try with and without -DUNALIGNED_OK to check. + */ + register Bytef *strend = s->window + s->strstart + MAX_MATCH - 1; + register ush scan_start = *(ushf*)scan; + register ush scan_end = *(ushf*)(scan + best_len - 1); +#else + register Bytef *strend = s->window + s->strstart + MAX_MATCH; + register Byte scan_end1 = scan[best_len - 1]; + register Byte scan_end = scan[best_len]; +#endif + + /* The code is optimized for HASH_BITS >= 8 and MAX_MATCH-2 multiple of 16. + * It is easy to get rid of this optimization if necessary. + */ + Assert(s->hash_bits >= 8 && MAX_MATCH == 258, "Code too clever"); + + /* Do not waste too much time if we already have a good match: */ + if (s->prev_length >= s->good_match) { + chain_length >>= 2; + } + /* Do not look for matches beyond the end of the input. This is necessary + * to make deflate deterministic. + */ + if ((uInt)nice_match > s->lookahead) nice_match = (int)s->lookahead; + + Assert((ulg)s->strstart <= s->window_size - MIN_LOOKAHEAD, + "need lookahead"); + + do { + Assert(cur_match < s->strstart, "no future"); + match = s->window + cur_match; + + /* Skip to next match if the match length cannot increase + * or if the match length is less than 2. Note that the checks below + * for insufficient lookahead only occur occasionally for performance + * reasons. Therefore uninitialized memory will be accessed, and + * conditional jumps will be made that depend on those values. + * However the length of the match is limited to the lookahead, so + * the output of deflate is not affected by the uninitialized values. + */ +#if (defined(UNALIGNED_OK) && MAX_MATCH == 258) + /* This code assumes sizeof(unsigned short) == 2. Do not use + * UNALIGNED_OK if your compiler uses a different size. + */ + if (*(ushf*)(match + best_len - 1) != scan_end || + *(ushf*)match != scan_start) continue; + + /* It is not necessary to compare scan[2] and match[2] since they are + * always equal when the other bytes match, given that the hash keys + * are equal and that HASH_BITS >= 8. Compare 2 bytes at a time at + * strstart + 3, + 5, up to strstart + 257. We check for insufficient + * lookahead only every 4th comparison; the 128th check will be made + * at strstart + 257. If MAX_MATCH-2 is not a multiple of 8, it is + * necessary to put more guard bytes at the end of the window, or + * to check more often for insufficient lookahead. + */ + Assert(scan[2] == match[2], "scan[2]?"); + scan++, match++; + do { + } while (*(ushf*)(scan += 2) == *(ushf*)(match += 2) && + *(ushf*)(scan += 2) == *(ushf*)(match += 2) && + *(ushf*)(scan += 2) == *(ushf*)(match += 2) && + *(ushf*)(scan += 2) == *(ushf*)(match += 2) && + scan < strend); + /* The funny "do {}" generates better code on most compilers */ + + /* Here, scan <= window + strstart + 257 */ + Assert(scan <= s->window + (unsigned)(s->window_size - 1), + "wild scan"); + if (*scan == *match) scan++; + + len = (MAX_MATCH - 1) - (int)(strend - scan); + scan = strend - (MAX_MATCH-1); + +#else /* UNALIGNED_OK */ + + if (match[best_len] != scan_end || + match[best_len - 1] != scan_end1 || + *match != *scan || + *++match != scan[1]) continue; + + /* The check at best_len - 1 can be removed because it will be made + * again later. (This heuristic is not always a win.) + * It is not necessary to compare scan[2] and match[2] since they + * are always equal when the other bytes match, given that + * the hash keys are equal and that HASH_BITS >= 8. + */ + scan += 2, match++; + Assert(*scan == *match, "match[2]?"); + + /* We check for insufficient lookahead only every 8th comparison; + * the 256th check will be made at strstart + 258. + */ + do { + } while (*++scan == *++match && *++scan == *++match && + *++scan == *++match && *++scan == *++match && + *++scan == *++match && *++scan == *++match && + *++scan == *++match && *++scan == *++match && + scan < strend); + + Assert(scan <= s->window + (unsigned)(s->window_size - 1), + "wild scan"); + + len = MAX_MATCH - (int)(strend - scan); + scan = strend - MAX_MATCH; + +#endif /* UNALIGNED_OK */ + + if (len > best_len) { + s->match_start = cur_match; + best_len = len; + if (len >= nice_match) break; +#ifdef UNALIGNED_OK + scan_end = *(ushf*)(scan + best_len - 1); +#else + scan_end1 = scan[best_len - 1]; + scan_end = scan[best_len]; +#endif + } + } while ((cur_match = prev[cur_match & wmask]) > limit + && --chain_length != 0); + + if ((uInt)best_len <= s->lookahead) return (uInt)best_len; + return s->lookahead; +} + +#else /* FASTEST */ + +/* --------------------------------------------------------------------------- + * Optimized version for FASTEST only + */ +local uInt longest_match(deflate_state *s, IPos cur_match) { + register Bytef *scan = s->window + s->strstart; /* current string */ + register Bytef *match; /* matched string */ + register int len; /* length of current match */ + register Bytef *strend = s->window + s->strstart + MAX_MATCH; + + /* The code is optimized for HASH_BITS >= 8 and MAX_MATCH-2 multiple of 16. + * It is easy to get rid of this optimization if necessary. + */ + Assert(s->hash_bits >= 8 && MAX_MATCH == 258, "Code too clever"); + + Assert((ulg)s->strstart <= s->window_size - MIN_LOOKAHEAD, + "need lookahead"); + + Assert(cur_match < s->strstart, "no future"); + + match = s->window + cur_match; + + /* Return failure if the match length is less than 2: + */ + if (match[0] != scan[0] || match[1] != scan[1]) return MIN_MATCH-1; + + /* The check at best_len - 1 can be removed because it will be made + * again later. (This heuristic is not always a win.) + * It is not necessary to compare scan[2] and match[2] since they + * are always equal when the other bytes match, given that + * the hash keys are equal and that HASH_BITS >= 8. + */ + scan += 2, match += 2; + Assert(*scan == *match, "match[2]?"); + + /* We check for insufficient lookahead only every 8th comparison; + * the 256th check will be made at strstart + 258. + */ + do { + } while (*++scan == *++match && *++scan == *++match && + *++scan == *++match && *++scan == *++match && + *++scan == *++match && *++scan == *++match && + *++scan == *++match && *++scan == *++match && + scan < strend); + + Assert(scan <= s->window + (unsigned)(s->window_size - 1), "wild scan"); + + len = MAX_MATCH - (int)(strend - scan); + + if (len < MIN_MATCH) return MIN_MATCH - 1; + + s->match_start = cur_match; + return (uInt)len <= s->lookahead ? (uInt)len : s->lookahead; +} + +#endif /* FASTEST */ + +#ifdef ZLIB_DEBUG + +#define EQUAL 0 +/* result of memcmp for equal strings */ + +/* =========================================================================== + * Check that the match at match_start is indeed a match. + */ +local void check_match(deflate_state *s, IPos start, IPos match, int length) { + /* check that the match is indeed a match */ + Bytef *back = s->window + (int)match, *here = s->window + start; + IPos len = length; + if (match == (IPos)-1) { + /* match starts one byte before the current window -- just compare the + subsequent length-1 bytes */ + back++; + here++; + len--; + } + if (zmemcmp(back, here, len) != EQUAL) { + fprintf(stderr, " start %u, match %d, length %d\n", + start, (int)match, length); + do { + fprintf(stderr, "(%02x %02x)", *back++, *here++); + } while (--len != 0); + z_error("invalid match"); + } + if (z_verbose > 1) { + fprintf(stderr,"\\[%d,%d]", start - match, length); + do { putc(s->window[start++], stderr); } while (--length != 0); + } +} +#else +# define check_match(s, start, match, length) +#endif /* ZLIB_DEBUG */ + +/* =========================================================================== + * Flush the current block, with given end-of-file flag. + * IN assertion: strstart is set to the end of the current match. + */ +#define FLUSH_BLOCK_ONLY(s, last) { \ + _tr_flush_block(s, (s->block_start >= 0L ? \ + (charf *)&s->window[(unsigned)s->block_start] : \ + (charf *)Z_NULL), \ + (ulg)((long)s->strstart - s->block_start), \ + (last)); \ + s->block_start = s->strstart; \ + flush_pending(s->strm); \ + Tracev((stderr,"[FLUSH]")); \ +} + +/* Same but force premature exit if necessary. */ +#define FLUSH_BLOCK(s, last) { \ + FLUSH_BLOCK_ONLY(s, last); \ + if (s->strm->avail_out == 0) return (last) ? finish_started : need_more; \ +} + +/* Maximum stored block length in deflate format (not including header). */ +#define MAX_STORED 65535 + +/* Minimum of a and b. */ +#define MIN(a, b) ((a) > (b) ? (b) : (a)) + +/* =========================================================================== + * Copy without compression as much as possible from the input stream, return + * the current block state. + * + * In case deflateParams() is used to later switch to a non-zero compression + * level, s->matches (otherwise unused when storing) keeps track of the number + * of hash table slides to perform. If s->matches is 1, then one hash table + * slide will be done when switching. If s->matches is 2, the maximum value + * allowed here, then the hash table will be cleared, since two or more slides + * is the same as a clear. + * + * deflate_stored() is written to minimize the number of times an input byte is + * copied. It is most efficient with large input and output buffers, which + * maximizes the opportunities to have a single copy from next_in to next_out. + */ +local block_state deflate_stored(deflate_state *s, int flush) { + /* Smallest worthy block size when not flushing or finishing. By default + * this is 32K. This can be as small as 507 bytes for memLevel == 1. For + * large input and output buffers, the stored block size will be larger. + */ + unsigned min_block = MIN(s->pending_buf_size - 5, s->w_size); + + /* Copy as many min_block or larger stored blocks directly to next_out as + * possible. If flushing, copy the remaining available input to next_out as + * stored blocks, if there is enough space. + */ + unsigned len, left, have, last = 0; + unsigned used = s->strm->avail_in; + do { + /* Set len to the maximum size block that we can copy directly with the + * available input data and output space. Set left to how much of that + * would be copied from what's left in the window. + */ + len = MAX_STORED; /* maximum deflate stored block length */ + have = (s->bi_valid + 42) >> 3; /* number of header bytes */ + if (s->strm->avail_out < have) /* need room for header */ + break; + /* maximum stored block length that will fit in avail_out: */ + have = s->strm->avail_out - have; + left = s->strstart - s->block_start; /* bytes left in window */ + if (len > (ulg)left + s->strm->avail_in) + len = left + s->strm->avail_in; /* limit len to the input */ + if (len > have) + len = have; /* limit len to the output */ + + /* If the stored block would be less than min_block in length, or if + * unable to copy all of the available input when flushing, then try + * copying to the window and the pending buffer instead. Also don't + * write an empty block when flushing -- deflate() does that. + */ + if (len < min_block && ((len == 0 && flush != Z_FINISH) || + flush == Z_NO_FLUSH || + len != left + s->strm->avail_in)) + break; + + /* Make a dummy stored block in pending to get the header bytes, + * including any pending bits. This also updates the debugging counts. + */ + last = flush == Z_FINISH && len == left + s->strm->avail_in ? 1 : 0; + _tr_stored_block(s, (char *)0, 0L, last); + + /* Replace the lengths in the dummy stored block with len. */ + s->pending_buf[s->pending - 4] = len; + s->pending_buf[s->pending - 3] = len >> 8; + s->pending_buf[s->pending - 2] = ~len; + s->pending_buf[s->pending - 1] = ~len >> 8; + + /* Write the stored block header bytes. */ + flush_pending(s->strm); + +#ifdef ZLIB_DEBUG + /* Update debugging counts for the data about to be copied. */ + s->compressed_len += len << 3; + s->bits_sent += len << 3; +#endif + + /* Copy uncompressed bytes from the window to next_out. */ + if (left) { + if (left > len) + left = len; + zmemcpy(s->strm->next_out, s->window + s->block_start, left); + s->strm->next_out += left; + s->strm->avail_out -= left; + s->strm->total_out += left; + s->block_start += left; + len -= left; + } + + /* Copy uncompressed bytes directly from next_in to next_out, updating + * the check value. + */ + if (len) { + read_buf(s->strm, s->strm->next_out, len); + s->strm->next_out += len; + s->strm->avail_out -= len; + s->strm->total_out += len; + } + } while (last == 0); + + /* Update the sliding window with the last s->w_size bytes of the copied + * data, or append all of the copied data to the existing window if less + * than s->w_size bytes were copied. Also update the number of bytes to + * insert in the hash tables, in the event that deflateParams() switches to + * a non-zero compression level. + */ + used -= s->strm->avail_in; /* number of input bytes directly copied */ + if (used) { + /* If any input was used, then no unused input remains in the window, + * therefore s->block_start == s->strstart. + */ + if (used >= s->w_size) { /* supplant the previous history */ + s->matches = 2; /* clear hash */ + zmemcpy(s->window, s->strm->next_in - s->w_size, s->w_size); + s->strstart = s->w_size; + s->insert = s->strstart; + } + else { + if (s->window_size - s->strstart <= used) { + /* Slide the window down. */ + s->strstart -= s->w_size; + zmemcpy(s->window, s->window + s->w_size, s->strstart); + if (s->matches < 2) + s->matches++; /* add a pending slide_hash() */ + if (s->insert > s->strstart) + s->insert = s->strstart; + } + zmemcpy(s->window + s->strstart, s->strm->next_in - used, used); + s->strstart += used; + s->insert += MIN(used, s->w_size - s->insert); + } + s->block_start = s->strstart; + } + if (s->high_water < s->strstart) + s->high_water = s->strstart; + + /* If the last block was written to next_out, then done. */ + if (last) + return finish_done; + + /* If flushing and all input has been consumed, then done. */ + if (flush != Z_NO_FLUSH && flush != Z_FINISH && + s->strm->avail_in == 0 && (long)s->strstart == s->block_start) + return block_done; + + /* Fill the window with any remaining input. */ + have = s->window_size - s->strstart; + if (s->strm->avail_in > have && s->block_start >= (long)s->w_size) { + /* Slide the window down. */ + s->block_start -= s->w_size; + s->strstart -= s->w_size; + zmemcpy(s->window, s->window + s->w_size, s->strstart); + if (s->matches < 2) + s->matches++; /* add a pending slide_hash() */ + have += s->w_size; /* more space now */ + if (s->insert > s->strstart) + s->insert = s->strstart; + } + if (have > s->strm->avail_in) + have = s->strm->avail_in; + if (have) { + read_buf(s->strm, s->window + s->strstart, have); + s->strstart += have; + s->insert += MIN(have, s->w_size - s->insert); + } + if (s->high_water < s->strstart) + s->high_water = s->strstart; + + /* There was not enough avail_out to write a complete worthy or flushed + * stored block to next_out. Write a stored block to pending instead, if we + * have enough input for a worthy block, or if flushing and there is enough + * room for the remaining input as a stored block in the pending buffer. + */ + have = (s->bi_valid + 42) >> 3; /* number of header bytes */ + /* maximum stored block length that will fit in pending: */ + have = MIN(s->pending_buf_size - have, MAX_STORED); + min_block = MIN(have, s->w_size); + left = s->strstart - s->block_start; + if (left >= min_block || + ((left || flush == Z_FINISH) && flush != Z_NO_FLUSH && + s->strm->avail_in == 0 && left <= have)) { + len = MIN(left, have); + last = flush == Z_FINISH && s->strm->avail_in == 0 && + len == left ? 1 : 0; + _tr_stored_block(s, (charf *)s->window + s->block_start, len, last); + s->block_start += len; + flush_pending(s->strm); + } + + /* We've done all we can with the available input and output. */ + return last ? finish_started : need_more; +} + +/* =========================================================================== + * Compress as much as possible from the input stream, return the current + * block state. + * This function does not perform lazy evaluation of matches and inserts + * new strings in the dictionary only for unmatched strings or for short + * matches. It is used only for the fast compression options. + */ +local block_state deflate_fast(deflate_state *s, int flush) { + IPos hash_head; /* head of the hash chain */ + int bflush; /* set if current block must be flushed */ + + for (;;) { + /* Make sure that we always have enough lookahead, except + * at the end of the input file. We need MAX_MATCH bytes + * for the next match, plus MIN_MATCH bytes to insert the + * string following the next match. + */ + if (s->lookahead < MIN_LOOKAHEAD) { + fill_window(s); + if (s->lookahead < MIN_LOOKAHEAD && flush == Z_NO_FLUSH) { + return need_more; + } + if (s->lookahead == 0) break; /* flush the current block */ + } + + /* Insert the string window[strstart .. strstart + 2] in the + * dictionary, and set hash_head to the head of the hash chain: + */ + hash_head = NIL; + if (s->lookahead >= MIN_MATCH) { + INSERT_STRING(s, s->strstart, hash_head); + } + + /* Find the longest match, discarding those <= prev_length. + * At this point we have always match_length < MIN_MATCH + */ + if (hash_head != NIL && s->strstart - hash_head <= MAX_DIST(s)) { + /* To simplify the code, we prevent matches with the string + * of window index 0 (in particular we have to avoid a match + * of the string with itself at the start of the input file). + */ + s->match_length = longest_match (s, hash_head); + /* longest_match() sets match_start */ + } + if (s->match_length >= MIN_MATCH) { + check_match(s, s->strstart, s->match_start, s->match_length); + + _tr_tally_dist(s, s->strstart - s->match_start, + s->match_length - MIN_MATCH, bflush); + + s->lookahead -= s->match_length; + + /* Insert new strings in the hash table only if the match length + * is not too large. This saves time but degrades compression. + */ +#ifndef FASTEST + if (s->match_length <= s->max_insert_length && + s->lookahead >= MIN_MATCH) { + s->match_length--; /* string at strstart already in table */ + do { + s->strstart++; + INSERT_STRING(s, s->strstart, hash_head); + /* strstart never exceeds WSIZE-MAX_MATCH, so there are + * always MIN_MATCH bytes ahead. + */ + } while (--s->match_length != 0); + s->strstart++; + } else +#endif + { + s->strstart += s->match_length; + s->match_length = 0; + s->ins_h = s->window[s->strstart]; + UPDATE_HASH(s, s->ins_h, s->window[s->strstart + 1]); +#if MIN_MATCH != 3 + Call UPDATE_HASH() MIN_MATCH-3 more times +#endif + /* If lookahead < MIN_MATCH, ins_h is garbage, but it does not + * matter since it will be recomputed at next deflate call. + */ + } + } else { + /* No match, output a literal byte */ + Tracevv((stderr,"%c", s->window[s->strstart])); + _tr_tally_lit(s, s->window[s->strstart], bflush); + s->lookahead--; + s->strstart++; + } + if (bflush) FLUSH_BLOCK(s, 0); + } + s->insert = s->strstart < MIN_MATCH-1 ? s->strstart : MIN_MATCH-1; + if (flush == Z_FINISH) { + FLUSH_BLOCK(s, 1); + return finish_done; + } + if (s->sym_next) + FLUSH_BLOCK(s, 0); + return block_done; +} + +#ifndef FASTEST +/* =========================================================================== + * Same as above, but achieves better compression. We use a lazy + * evaluation for matches: a match is finally adopted only if there is + * no better match at the next window position. + */ +local block_state deflate_slow(deflate_state *s, int flush) { + IPos hash_head; /* head of hash chain */ + int bflush; /* set if current block must be flushed */ + + /* Process the input block. */ + for (;;) { + /* Make sure that we always have enough lookahead, except + * at the end of the input file. We need MAX_MATCH bytes + * for the next match, plus MIN_MATCH bytes to insert the + * string following the next match. + */ + if (s->lookahead < MIN_LOOKAHEAD) { + fill_window(s); + if (s->lookahead < MIN_LOOKAHEAD && flush == Z_NO_FLUSH) { + return need_more; + } + if (s->lookahead == 0) break; /* flush the current block */ + } + + /* Insert the string window[strstart .. strstart + 2] in the + * dictionary, and set hash_head to the head of the hash chain: + */ + hash_head = NIL; + if (s->lookahead >= MIN_MATCH) { + INSERT_STRING(s, s->strstart, hash_head); + } + + /* Find the longest match, discarding those <= prev_length. + */ + s->prev_length = s->match_length, s->prev_match = s->match_start; + s->match_length = MIN_MATCH-1; + + if (hash_head != NIL && s->prev_length < s->max_lazy_match && + s->strstart - hash_head <= MAX_DIST(s)) { + /* To simplify the code, we prevent matches with the string + * of window index 0 (in particular we have to avoid a match + * of the string with itself at the start of the input file). + */ + s->match_length = longest_match (s, hash_head); + /* longest_match() sets match_start */ + + if (s->match_length <= 5 && (s->strategy == Z_FILTERED +#if TOO_FAR <= 32767 + || (s->match_length == MIN_MATCH && + s->strstart - s->match_start > TOO_FAR) +#endif + )) { + + /* If prev_match is also MIN_MATCH, match_start is garbage + * but we will ignore the current match anyway. + */ + s->match_length = MIN_MATCH-1; + } + } + /* If there was a match at the previous step and the current + * match is not better, output the previous match: + */ + if (s->prev_length >= MIN_MATCH && s->match_length <= s->prev_length) { + uInt max_insert = s->strstart + s->lookahead - MIN_MATCH; + /* Do not insert strings in hash table beyond this. */ + + check_match(s, s->strstart - 1, s->prev_match, s->prev_length); + + _tr_tally_dist(s, s->strstart - 1 - s->prev_match, + s->prev_length - MIN_MATCH, bflush); + + /* Insert in hash table all strings up to the end of the match. + * strstart - 1 and strstart are already inserted. If there is not + * enough lookahead, the last two strings are not inserted in + * the hash table. + */ + s->lookahead -= s->prev_length - 1; + s->prev_length -= 2; + do { + if (++s->strstart <= max_insert) { + INSERT_STRING(s, s->strstart, hash_head); + } + } while (--s->prev_length != 0); + s->match_available = 0; + s->match_length = MIN_MATCH-1; + s->strstart++; + + if (bflush) FLUSH_BLOCK(s, 0); + + } else if (s->match_available) { + /* If there was no match at the previous position, output a + * single literal. If there was a match but the current match + * is longer, truncate the previous match to a single literal. + */ + Tracevv((stderr,"%c", s->window[s->strstart - 1])); + _tr_tally_lit(s, s->window[s->strstart - 1], bflush); + if (bflush) { + FLUSH_BLOCK_ONLY(s, 0); + } + s->strstart++; + s->lookahead--; + if (s->strm->avail_out == 0) return need_more; + } else { + /* There is no previous match to compare with, wait for + * the next step to decide. + */ + s->match_available = 1; + s->strstart++; + s->lookahead--; + } + } + Assert (flush != Z_NO_FLUSH, "no flush?"); + if (s->match_available) { + Tracevv((stderr,"%c", s->window[s->strstart - 1])); + _tr_tally_lit(s, s->window[s->strstart - 1], bflush); + s->match_available = 0; + } + s->insert = s->strstart < MIN_MATCH-1 ? s->strstart : MIN_MATCH-1; + if (flush == Z_FINISH) { + FLUSH_BLOCK(s, 1); + return finish_done; + } + if (s->sym_next) + FLUSH_BLOCK(s, 0); + return block_done; +} +#endif /* FASTEST */ + +/* =========================================================================== + * For Z_RLE, simply look for runs of bytes, generate matches only of distance + * one. Do not maintain a hash table. (It will be regenerated if this run of + * deflate switches away from Z_RLE.) + */ +local block_state deflate_rle(deflate_state *s, int flush) { + int bflush; /* set if current block must be flushed */ + uInt prev; /* byte at distance one to match */ + Bytef *scan, *strend; /* scan goes up to strend for length of run */ + + for (;;) { + /* Make sure that we always have enough lookahead, except + * at the end of the input file. We need MAX_MATCH bytes + * for the longest run, plus one for the unrolled loop. + */ + if (s->lookahead <= MAX_MATCH) { + fill_window(s); + if (s->lookahead <= MAX_MATCH && flush == Z_NO_FLUSH) { + return need_more; + } + if (s->lookahead == 0) break; /* flush the current block */ + } + + /* See how many times the previous byte repeats */ + s->match_length = 0; + if (s->lookahead >= MIN_MATCH && s->strstart > 0) { + scan = s->window + s->strstart - 1; + prev = *scan; + if (prev == *++scan && prev == *++scan && prev == *++scan) { + strend = s->window + s->strstart + MAX_MATCH; + do { + } while (prev == *++scan && prev == *++scan && + prev == *++scan && prev == *++scan && + prev == *++scan && prev == *++scan && + prev == *++scan && prev == *++scan && + scan < strend); + s->match_length = MAX_MATCH - (uInt)(strend - scan); + if (s->match_length > s->lookahead) + s->match_length = s->lookahead; + } + Assert(scan <= s->window + (uInt)(s->window_size - 1), + "wild scan"); + } + + /* Emit match if have run of MIN_MATCH or longer, else emit literal */ + if (s->match_length >= MIN_MATCH) { + check_match(s, s->strstart, s->strstart - 1, s->match_length); + + _tr_tally_dist(s, 1, s->match_length - MIN_MATCH, bflush); + + s->lookahead -= s->match_length; + s->strstart += s->match_length; + s->match_length = 0; + } else { + /* No match, output a literal byte */ + Tracevv((stderr,"%c", s->window[s->strstart])); + _tr_tally_lit(s, s->window[s->strstart], bflush); + s->lookahead--; + s->strstart++; + } + if (bflush) FLUSH_BLOCK(s, 0); + } + s->insert = 0; + if (flush == Z_FINISH) { + FLUSH_BLOCK(s, 1); + return finish_done; + } + if (s->sym_next) + FLUSH_BLOCK(s, 0); + return block_done; +} + +/* =========================================================================== + * For Z_HUFFMAN_ONLY, do not look for matches. Do not maintain a hash table. + * (It will be regenerated if this run of deflate switches away from Huffman.) + */ +local block_state deflate_huff(deflate_state *s, int flush) { + int bflush; /* set if current block must be flushed */ + + for (;;) { + /* Make sure that we have a literal to write. */ + if (s->lookahead == 0) { + fill_window(s); + if (s->lookahead == 0) { + if (flush == Z_NO_FLUSH) + return need_more; + break; /* flush the current block */ + } + } + + /* Output a literal byte */ + s->match_length = 0; + Tracevv((stderr,"%c", s->window[s->strstart])); + _tr_tally_lit(s, s->window[s->strstart], bflush); + s->lookahead--; + s->strstart++; + if (bflush) FLUSH_BLOCK(s, 0); + } + s->insert = 0; + if (flush == Z_FINISH) { + FLUSH_BLOCK(s, 1); + return finish_done; + } + if (s->sym_next) + FLUSH_BLOCK(s, 0); + return block_done; +} diff --git a/thirdparty/zlib-1.3.1/deflate.h b/thirdparty/zlib-1.3.1/deflate.h new file mode 100644 index 0000000..300c6ad --- /dev/null +++ b/thirdparty/zlib-1.3.1/deflate.h @@ -0,0 +1,377 @@ +/* deflate.h -- internal compression state + * Copyright (C) 1995-2024 Jean-loup Gailly + * For conditions of distribution and use, see copyright notice in zlib.h + */ + +/* WARNING: this file should *not* be used by applications. It is + part of the implementation of the compression library and is + subject to change. Applications should only use zlib.h. + */ + +/* @(#) $Id$ */ + +#ifndef DEFLATE_H +#define DEFLATE_H + +#include "zutil.h" + +/* define NO_GZIP when compiling if you want to disable gzip header and + trailer creation by deflate(). NO_GZIP would be used to avoid linking in + the crc code when it is not needed. For shared libraries, gzip encoding + should be left enabled. */ +#ifndef NO_GZIP +# define GZIP +#endif + +/* define LIT_MEM to slightly increase the speed of deflate (order 1% to 2%) at + the cost of a larger memory footprint */ +/* #define LIT_MEM */ + +/* =========================================================================== + * Internal compression state. + */ + +#define LENGTH_CODES 29 +/* number of length codes, not counting the special END_BLOCK code */ + +#define LITERALS 256 +/* number of literal bytes 0..255 */ + +#define L_CODES (LITERALS+1+LENGTH_CODES) +/* number of Literal or Length codes, including the END_BLOCK code */ + +#define D_CODES 30 +/* number of distance codes */ + +#define BL_CODES 19 +/* number of codes used to transfer the bit lengths */ + +#define HEAP_SIZE (2*L_CODES+1) +/* maximum heap size */ + +#define MAX_BITS 15 +/* All codes must not exceed MAX_BITS bits */ + +#define Buf_size 16 +/* size of bit buffer in bi_buf */ + +#define INIT_STATE 42 /* zlib header -> BUSY_STATE */ +#ifdef GZIP +# define GZIP_STATE 57 /* gzip header -> BUSY_STATE | EXTRA_STATE */ +#endif +#define EXTRA_STATE 69 /* gzip extra block -> NAME_STATE */ +#define NAME_STATE 73 /* gzip file name -> COMMENT_STATE */ +#define COMMENT_STATE 91 /* gzip comment -> HCRC_STATE */ +#define HCRC_STATE 103 /* gzip header CRC -> BUSY_STATE */ +#define BUSY_STATE 113 /* deflate -> FINISH_STATE */ +#define FINISH_STATE 666 /* stream complete */ +/* Stream status */ + + +/* Data structure describing a single value and its code string. */ +typedef struct ct_data_s { + union { + ush freq; /* frequency count */ + ush code; /* bit string */ + } fc; + union { + ush dad; /* father node in Huffman tree */ + ush len; /* length of bit string */ + } dl; +} FAR ct_data; + +#define Freq fc.freq +#define Code fc.code +#define Dad dl.dad +#define Len dl.len + +typedef struct static_tree_desc_s static_tree_desc; + +typedef struct tree_desc_s { + ct_data *dyn_tree; /* the dynamic tree */ + int max_code; /* largest code with non zero frequency */ + const static_tree_desc *stat_desc; /* the corresponding static tree */ +} FAR tree_desc; + +typedef ush Pos; +typedef Pos FAR Posf; +typedef unsigned IPos; + +/* A Pos is an index in the character window. We use short instead of int to + * save space in the various tables. IPos is used only for parameter passing. + */ + +typedef struct internal_state { + z_streamp strm; /* pointer back to this zlib stream */ + int status; /* as the name implies */ + Bytef *pending_buf; /* output still pending */ + ulg pending_buf_size; /* size of pending_buf */ + Bytef *pending_out; /* next pending byte to output to the stream */ + ulg pending; /* nb of bytes in the pending buffer */ + int wrap; /* bit 0 true for zlib, bit 1 true for gzip */ + gz_headerp gzhead; /* gzip header information to write */ + ulg gzindex; /* where in extra, name, or comment */ + Byte method; /* can only be DEFLATED */ + int last_flush; /* value of flush param for previous deflate call */ + + /* used by deflate.c: */ + + uInt w_size; /* LZ77 window size (32K by default) */ + uInt w_bits; /* log2(w_size) (8..16) */ + uInt w_mask; /* w_size - 1 */ + + Bytef *window; + /* Sliding window. Input bytes are read into the second half of the window, + * and move to the first half later to keep a dictionary of at least wSize + * bytes. With this organization, matches are limited to a distance of + * wSize-MAX_MATCH bytes, but this ensures that IO is always + * performed with a length multiple of the block size. Also, it limits + * the window size to 64K, which is quite useful on MSDOS. + * To do: use the user input buffer as sliding window. + */ + + ulg window_size; + /* Actual size of window: 2*wSize, except when the user input buffer + * is directly used as sliding window. + */ + + Posf *prev; + /* Link to older string with same hash index. To limit the size of this + * array to 64K, this link is maintained only for the last 32K strings. + * An index in this array is thus a window index modulo 32K. + */ + + Posf *head; /* Heads of the hash chains or NIL. */ + + uInt ins_h; /* hash index of string to be inserted */ + uInt hash_size; /* number of elements in hash table */ + uInt hash_bits; /* log2(hash_size) */ + uInt hash_mask; /* hash_size-1 */ + + uInt hash_shift; + /* Number of bits by which ins_h must be shifted at each input + * step. It must be such that after MIN_MATCH steps, the oldest + * byte no longer takes part in the hash key, that is: + * hash_shift * MIN_MATCH >= hash_bits + */ + + long block_start; + /* Window position at the beginning of the current output block. Gets + * negative when the window is moved backwards. + */ + + uInt match_length; /* length of best match */ + IPos prev_match; /* previous match */ + int match_available; /* set if previous match exists */ + uInt strstart; /* start of string to insert */ + uInt match_start; /* start of matching string */ + uInt lookahead; /* number of valid bytes ahead in window */ + + uInt prev_length; + /* Length of the best match at previous step. Matches not greater than this + * are discarded. This is used in the lazy match evaluation. + */ + + uInt max_chain_length; + /* To speed up deflation, hash chains are never searched beyond this + * length. A higher limit improves compression ratio but degrades the + * speed. + */ + + uInt max_lazy_match; + /* Attempt to find a better match only when the current match is strictly + * smaller than this value. This mechanism is used only for compression + * levels >= 4. + */ +# define max_insert_length max_lazy_match + /* Insert new strings in the hash table only if the match length is not + * greater than this length. This saves time but degrades compression. + * max_insert_length is used only for compression levels <= 3. + */ + + int level; /* compression level (1..9) */ + int strategy; /* favor or force Huffman coding*/ + + uInt good_match; + /* Use a faster search when the previous match is longer than this */ + + int nice_match; /* Stop searching when current match exceeds this */ + + /* used by trees.c: */ + /* Didn't use ct_data typedef below to suppress compiler warning */ + struct ct_data_s dyn_ltree[HEAP_SIZE]; /* literal and length tree */ + struct ct_data_s dyn_dtree[2*D_CODES+1]; /* distance tree */ + struct ct_data_s bl_tree[2*BL_CODES+1]; /* Huffman tree for bit lengths */ + + struct tree_desc_s l_desc; /* desc. for literal tree */ + struct tree_desc_s d_desc; /* desc. for distance tree */ + struct tree_desc_s bl_desc; /* desc. for bit length tree */ + + ush bl_count[MAX_BITS+1]; + /* number of codes at each bit length for an optimal tree */ + + int heap[2*L_CODES+1]; /* heap used to build the Huffman trees */ + int heap_len; /* number of elements in the heap */ + int heap_max; /* element of largest frequency */ + /* The sons of heap[n] are heap[2*n] and heap[2*n+1]. heap[0] is not used. + * The same heap array is used to build all trees. + */ + + uch depth[2*L_CODES+1]; + /* Depth of each subtree used as tie breaker for trees of equal frequency + */ + +#ifdef LIT_MEM +# define LIT_BUFS 5 + ushf *d_buf; /* buffer for distances */ + uchf *l_buf; /* buffer for literals/lengths */ +#else +# define LIT_BUFS 4 + uchf *sym_buf; /* buffer for distances and literals/lengths */ +#endif + + uInt lit_bufsize; + /* Size of match buffer for literals/lengths. There are 4 reasons for + * limiting lit_bufsize to 64K: + * - frequencies can be kept in 16 bit counters + * - if compression is not successful for the first block, all input + * data is still in the window so we can still emit a stored block even + * when input comes from standard input. (This can also be done for + * all blocks if lit_bufsize is not greater than 32K.) + * - if compression is not successful for a file smaller than 64K, we can + * even emit a stored file instead of a stored block (saving 5 bytes). + * This is applicable only for zip (not gzip or zlib). + * - creating new Huffman trees less frequently may not provide fast + * adaptation to changes in the input data statistics. (Take for + * example a binary file with poorly compressible code followed by + * a highly compressible string table.) Smaller buffer sizes give + * fast adaptation but have of course the overhead of transmitting + * trees more frequently. + * - I can't count above 4 + */ + + uInt sym_next; /* running index in symbol buffer */ + uInt sym_end; /* symbol table full when sym_next reaches this */ + + ulg opt_len; /* bit length of current block with optimal trees */ + ulg static_len; /* bit length of current block with static trees */ + uInt matches; /* number of string matches in current block */ + uInt insert; /* bytes at end of window left to insert */ + +#ifdef ZLIB_DEBUG + ulg compressed_len; /* total bit length of compressed file mod 2^32 */ + ulg bits_sent; /* bit length of compressed data sent mod 2^32 */ +#endif + + ush bi_buf; + /* Output buffer. bits are inserted starting at the bottom (least + * significant bits). + */ + int bi_valid; + /* Number of valid bits in bi_buf. All bits above the last valid bit + * are always zero. + */ + + ulg high_water; + /* High water mark offset in window for initialized bytes -- bytes above + * this are set to zero in order to avoid memory check warnings when + * longest match routines access bytes past the input. This is then + * updated to the new high water mark. + */ + +} FAR deflate_state; + +/* Output a byte on the stream. + * IN assertion: there is enough room in pending_buf. + */ +#define put_byte(s, c) {s->pending_buf[s->pending++] = (Bytef)(c);} + + +#define MIN_LOOKAHEAD (MAX_MATCH+MIN_MATCH+1) +/* Minimum amount of lookahead, except at the end of the input file. + * See deflate.c for comments about the MIN_MATCH+1. + */ + +#define MAX_DIST(s) ((s)->w_size-MIN_LOOKAHEAD) +/* In order to simplify the code, particularly on 16 bit machines, match + * distances are limited to MAX_DIST instead of WSIZE. + */ + +#define WIN_INIT MAX_MATCH +/* Number of bytes after end of data in window to initialize in order to avoid + memory checker errors from longest match routines */ + + /* in trees.c */ +void ZLIB_INTERNAL _tr_init(deflate_state *s); +int ZLIB_INTERNAL _tr_tally(deflate_state *s, unsigned dist, unsigned lc); +void ZLIB_INTERNAL _tr_flush_block(deflate_state *s, charf *buf, + ulg stored_len, int last); +void ZLIB_INTERNAL _tr_flush_bits(deflate_state *s); +void ZLIB_INTERNAL _tr_align(deflate_state *s); +void ZLIB_INTERNAL _tr_stored_block(deflate_state *s, charf *buf, + ulg stored_len, int last); + +#define d_code(dist) \ + ((dist) < 256 ? _dist_code[dist] : _dist_code[256+((dist)>>7)]) +/* Mapping from a distance to a distance code. dist is the distance - 1 and + * must not have side effects. _dist_code[256] and _dist_code[257] are never + * used. + */ + +#ifndef ZLIB_DEBUG +/* Inline versions of _tr_tally for speed: */ + +#if defined(GEN_TREES_H) || !defined(STDC) + extern uch ZLIB_INTERNAL _length_code[]; + extern uch ZLIB_INTERNAL _dist_code[]; +#else + extern const uch ZLIB_INTERNAL _length_code[]; + extern const uch ZLIB_INTERNAL _dist_code[]; +#endif + +#ifdef LIT_MEM +# define _tr_tally_lit(s, c, flush) \ + { uch cc = (c); \ + s->d_buf[s->sym_next] = 0; \ + s->l_buf[s->sym_next++] = cc; \ + s->dyn_ltree[cc].Freq++; \ + flush = (s->sym_next == s->sym_end); \ + } +# define _tr_tally_dist(s, distance, length, flush) \ + { uch len = (uch)(length); \ + ush dist = (ush)(distance); \ + s->d_buf[s->sym_next] = dist; \ + s->l_buf[s->sym_next++] = len; \ + dist--; \ + s->dyn_ltree[_length_code[len]+LITERALS+1].Freq++; \ + s->dyn_dtree[d_code(dist)].Freq++; \ + flush = (s->sym_next == s->sym_end); \ + } +#else +# define _tr_tally_lit(s, c, flush) \ + { uch cc = (c); \ + s->sym_buf[s->sym_next++] = 0; \ + s->sym_buf[s->sym_next++] = 0; \ + s->sym_buf[s->sym_next++] = cc; \ + s->dyn_ltree[cc].Freq++; \ + flush = (s->sym_next == s->sym_end); \ + } +# define _tr_tally_dist(s, distance, length, flush) \ + { uch len = (uch)(length); \ + ush dist = (ush)(distance); \ + s->sym_buf[s->sym_next++] = (uch)dist; \ + s->sym_buf[s->sym_next++] = (uch)(dist >> 8); \ + s->sym_buf[s->sym_next++] = len; \ + dist--; \ + s->dyn_ltree[_length_code[len]+LITERALS+1].Freq++; \ + s->dyn_dtree[d_code(dist)].Freq++; \ + flush = (s->sym_next == s->sym_end); \ + } +#endif +#else +# define _tr_tally_lit(s, c, flush) flush = _tr_tally(s, 0, c) +# define _tr_tally_dist(s, distance, length, flush) \ + flush = _tr_tally(s, distance, length) +#endif + +#endif /* DEFLATE_H */ diff --git a/thirdparty/zlib-1.3.1/doc/algorithm.txt b/thirdparty/zlib-1.3.1/doc/algorithm.txt new file mode 100644 index 0000000..029e5a3 --- /dev/null +++ b/thirdparty/zlib-1.3.1/doc/algorithm.txt @@ -0,0 +1,209 @@ +1. Compression algorithm (deflate) + +The deflation algorithm used by gzip (also zip and zlib) is a variation of +LZ77 (Lempel-Ziv 1977, see reference below). It finds duplicated strings in +the input data. The second occurrence of a string is replaced by a +pointer to the previous string, in the form of a pair (distance, +length). Distances are limited to 32K bytes, and lengths are limited +to 258 bytes. When a string does not occur anywhere in the previous +32K bytes, it is emitted as a sequence of literal bytes. (In this +description, `string' must be taken as an arbitrary sequence of bytes, +and is not restricted to printable characters.) + +Literals or match lengths are compressed with one Huffman tree, and +match distances are compressed with another tree. The trees are stored +in a compact form at the start of each block. The blocks can have any +size (except that the compressed data for one block must fit in +available memory). A block is terminated when deflate() determines that +it would be useful to start another block with fresh trees. (This is +somewhat similar to the behavior of LZW-based _compress_.) + +Duplicated strings are found using a hash table. All input strings of +length 3 are inserted in the hash table. A hash index is computed for +the next 3 bytes. If the hash chain for this index is not empty, all +strings in the chain are compared with the current input string, and +the longest match is selected. + +The hash chains are searched starting with the most recent strings, to +favor small distances and thus take advantage of the Huffman encoding. +The hash chains are singly linked. There are no deletions from the +hash chains, the algorithm simply discards matches that are too old. + +To avoid a worst-case situation, very long hash chains are arbitrarily +truncated at a certain length, determined by a runtime option (level +parameter of deflateInit). So deflate() does not always find the longest +possible match but generally finds a match which is long enough. + +deflate() also defers the selection of matches with a lazy evaluation +mechanism. After a match of length N has been found, deflate() searches for +a longer match at the next input byte. If a longer match is found, the +previous match is truncated to a length of one (thus producing a single +literal byte) and the process of lazy evaluation begins again. Otherwise, +the original match is kept, and the next match search is attempted only N +steps later. + +The lazy match evaluation is also subject to a runtime parameter. If +the current match is long enough, deflate() reduces the search for a longer +match, thus speeding up the whole process. If compression ratio is more +important than speed, deflate() attempts a complete second search even if +the first match is already long enough. + +The lazy match evaluation is not performed for the fastest compression +modes (level parameter 1 to 3). For these fast modes, new strings +are inserted in the hash table only when no match was found, or +when the match is not too long. This degrades the compression ratio +but saves time since there are both fewer insertions and fewer searches. + + +2. Decompression algorithm (inflate) + +2.1 Introduction + +The key question is how to represent a Huffman code (or any prefix code) so +that you can decode fast. The most important characteristic is that shorter +codes are much more common than longer codes, so pay attention to decoding the +short codes fast, and let the long codes take longer to decode. + +inflate() sets up a first level table that covers some number of bits of +input less than the length of longest code. It gets that many bits from the +stream, and looks it up in the table. The table will tell if the next +code is that many bits or less and how many, and if it is, it will tell +the value, else it will point to the next level table for which inflate() +grabs more bits and tries to decode a longer code. + +How many bits to make the first lookup is a tradeoff between the time it +takes to decode and the time it takes to build the table. If building the +table took no time (and if you had infinite memory), then there would only +be a first level table to cover all the way to the longest code. However, +building the table ends up taking a lot longer for more bits since short +codes are replicated many times in such a table. What inflate() does is +simply to make the number of bits in the first table a variable, and then +to set that variable for the maximum speed. + +For inflate, which has 286 possible codes for the literal/length tree, the size +of the first table is nine bits. Also the distance trees have 30 possible +values, and the size of the first table is six bits. Note that for each of +those cases, the table ended up one bit longer than the ``average'' code +length, i.e. the code length of an approximately flat code which would be a +little more than eight bits for 286 symbols and a little less than five bits +for 30 symbols. + + +2.2 More details on the inflate table lookup + +Ok, you want to know what this cleverly obfuscated inflate tree actually +looks like. You are correct that it's not a Huffman tree. It is simply a +lookup table for the first, let's say, nine bits of a Huffman symbol. The +symbol could be as short as one bit or as long as 15 bits. If a particular +symbol is shorter than nine bits, then that symbol's translation is duplicated +in all those entries that start with that symbol's bits. For example, if the +symbol is four bits, then it's duplicated 32 times in a nine-bit table. If a +symbol is nine bits long, it appears in the table once. + +If the symbol is longer than nine bits, then that entry in the table points +to another similar table for the remaining bits. Again, there are duplicated +entries as needed. The idea is that most of the time the symbol will be short +and there will only be one table look up. (That's whole idea behind data +compression in the first place.) For the less frequent long symbols, there +will be two lookups. If you had a compression method with really long +symbols, you could have as many levels of lookups as is efficient. For +inflate, two is enough. + +So a table entry either points to another table (in which case nine bits in +the above example are gobbled), or it contains the translation for the symbol +and the number of bits to gobble. Then you start again with the next +ungobbled bit. + +You may wonder: why not just have one lookup table for how ever many bits the +longest symbol is? The reason is that if you do that, you end up spending +more time filling in duplicate symbol entries than you do actually decoding. +At least for deflate's output that generates new trees every several 10's of +kbytes. You can imagine that filling in a 2^15 entry table for a 15-bit code +would take too long if you're only decoding several thousand symbols. At the +other extreme, you could make a new table for every bit in the code. In fact, +that's essentially a Huffman tree. But then you spend too much time +traversing the tree while decoding, even for short symbols. + +So the number of bits for the first lookup table is a trade of the time to +fill out the table vs. the time spent looking at the second level and above of +the table. + +Here is an example, scaled down: + +The code being decoded, with 10 symbols, from 1 to 6 bits long: + +A: 0 +B: 10 +C: 1100 +D: 11010 +E: 11011 +F: 11100 +G: 11101 +H: 11110 +I: 111110 +J: 111111 + +Let's make the first table three bits long (eight entries): + +000: A,1 +001: A,1 +010: A,1 +011: A,1 +100: B,2 +101: B,2 +110: -> table X (gobble 3 bits) +111: -> table Y (gobble 3 bits) + +Each entry is what the bits decode as and how many bits that is, i.e. how +many bits to gobble. Or the entry points to another table, with the number of +bits to gobble implicit in the size of the table. + +Table X is two bits long since the longest code starting with 110 is five bits +long: + +00: C,1 +01: C,1 +10: D,2 +11: E,2 + +Table Y is three bits long since the longest code starting with 111 is six +bits long: + +000: F,2 +001: F,2 +010: G,2 +011: G,2 +100: H,2 +101: H,2 +110: I,3 +111: J,3 + +So what we have here are three tables with a total of 20 entries that had to +be constructed. That's compared to 64 entries for a single table. Or +compared to 16 entries for a Huffman tree (six two entry tables and one four +entry table). Assuming that the code ideally represents the probability of +the symbols, it takes on the average 1.25 lookups per symbol. That's compared +to one lookup for the single table, or 1.66 lookups per symbol for the +Huffman tree. + +There, I think that gives you a picture of what's going on. For inflate, the +meaning of a particular symbol is often more than just a letter. It can be a +byte (a "literal"), or it can be either a length or a distance which +indicates a base value and a number of bits to fetch after the code that is +added to the base value. Or it might be the special end-of-block code. The +data structures created in inftrees.c try to encode all that information +compactly in the tables. + + +Jean-loup Gailly Mark Adler +jloup@gzip.org madler@alumni.caltech.edu + + +References: + +[LZ77] Ziv J., Lempel A., ``A Universal Algorithm for Sequential Data +Compression,'' IEEE Transactions on Information Theory, Vol. 23, No. 3, +pp. 337-343. + +``DEFLATE Compressed Data Format Specification'' available in +http://tools.ietf.org/html/rfc1951 diff --git a/thirdparty/zlib-1.3.1/doc/crc-doc.1.0.pdf b/thirdparty/zlib-1.3.1/doc/crc-doc.1.0.pdf new file mode 100644 index 0000000000000000000000000000000000000000..d6942ecc09a3f8b2d7e4b6fbecc5955121e8e7cf GIT binary patch literal 776142 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 z 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%0A!*@!_1l*%gn{T*uEUOk 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

    TW z_IDONo{|>HAW1G>TyRtpbmwk{?E;Qe^keeoFsDM3S=2db6)SXNcKE5%&&Ar#_N zpb@o8hS`1wgDDbLa&s+bs8dLKx3^4*zmN|i^7+?GCYx*0-1L2GVTM3%-hPWrrhz0e zbXNHB3HfPmGwCS)c;aGu`*;sb-s8nk=U{GPS59ihrvy=D!4Vx`q}533<6z$ck`Pyq z#Wp|O#O4)elSw*QD!!Er{iJ0~8m2>w=uzx@uM&gU0r$C!=YYmjU1aUBHf`trIflpm zFq{>9Y%Ab4N$mgk2oo{wij86SPzFIw|MoSMh>+=?vK%06Ri5?N6y32 zPWFhl#BhsY+gB&zX;_uy28Xzn@#4NH&UCg_=suUja2QPKb-V!m%U6KxcfYDXI(>KVeZLk1dpU8 zJ(yC4l)g7U9lQo+6a{OuE#k*r-jT#E>0I?o6F>I7yPufUqKPKv}ds~3-?2-x{@=kJ>}nO93O zI3+2XM938mPr#0cVU!2=Wwm_oC}TP=y|_@ywlY%`>@9xa$lSI=tkviJnbecM0g6D; z#gnR7xopbk>jjl(OpGP8cT&dDJ^}*|cYn&W;+mV3&0>yf)w#>nwHu1yokd8ym zQAEeQj_R{r_lrFHT8M}S83BAw2~OKeB5i}Q1uX)2R?d&}r0rzF4H>KEf;v|b}({Pj53@@LXZ!rbM&_B91^_?a$7^_jgH z_D&VwOkJ-?ckMq0-)0KKW|}6YyN3ro2heX%gbj1Kpnk|b734y1tAZb=i8QY5bMHOC zbUYV^l|Rp`f6{L!GWTHZr zoJeOTZ>=xYHk|0I*rr{Y?@X3*1y^kuJ3YGuir-S?3uMz24JJ&d@LXC^AIqx2430Mw zxhP8Ewks}5ddx7a%H&Pkvbe{q+$Hm?zRF9aZnQP@uchGsl#Cc}$!-uw4xA^8 zJTo>TdPw1Sw;2$~;fGv{;q(+?rngoV%qxM9sMp!{!D53t zHYX@;Z65KdeOE|7NY41K;ryCh*ITJZc-|E5k=47tbg`vkV>v}>cYd6|SMWCm>(jj> z(Y-IP3MMF`@7?wsDi;HW<_vO~T(l=k={JY>LsPax4pbFHZ{$NzksGQkw&_C{BRM

    ?-Y#xg4rj7}S3taUTj z0m{xbMtGrj$86fu84uUP*(#g~wH}V~hk#WCX;v(`1_2-(?zT*N{VS`G|2OC_H2pnb z522H|E3jZPu2ny6ZVRH~MDvmErT%rMJvMyY?($AXqV_Ka_eHZP6?AY$u(e4r@@LET zBC7(2I-H!EE6;(*T;DL!r?IBE%lOy*{f@jQep_=~XGT{ylSvVf{L@y{XDU48e{ZD|(rtSdT<*gO?N=uPgKctWC=wiSR3^S**k~pv6p!ugYzXT+ z{Lqko8tQ(yagaZmpEte_rQrtDp0x~~$~0OT+?vQuxf-Bkl1}R(D}e{JHie4IUnL&i zUe;=;6cKlk^A2e+E_AaQLY=lz`YcU~-R}%4zlQukLiZtEeVe$Lb>mw;QbUS2S5H zp=KXE*c(sk#!B;vo`$P6TGMUOnUrtL&?s3cvgqN3A}p573k0m1ENy)_%5gsknc1qz zaF?HZ)y(h^K#H3;Ul7ViTx3igN_{)I7Od%w%^w_EmlBkcFBMNoe9^pNBZrr+1;p3D z2-nxEhAOOgdXv4@y^ik!%#>*0okJm4;mAOiIa2cxe<`}X0g{Mb3`+Vr9O0!Ko?PKR z(nrEt87SL!+=W5&-rdJm_LXAH*8ZK9{e#Kf1*bL0IVk43{mw7}ZE#|rGsA>&{S5*_ z_!dn9q{K$_`jwKo69GwnPSJJ=#h=lX8e7GTGm)j_Ud+7gaBC)BwSZbE=Fs4 zwDYfrDu>3QOYtmhnqf!A#%R(s<@A|N50Z%X)jGTM<=FWGZt(`eqH24d`_DWh>Hzu3 zik3oH>tiSJvqoW}V7!Ol=L<`Z1~?R7s;s+J4tnbN1Ed+BxP#=oaj*zEsW#LR?WU)w z7v4=H@QcJA@+_dufEa*FixnjzLl<>h+h3snoZR(nr~~M-6~*g71f94c#oc9Cd?-#zea24Qercq{aIq0Mmm2`$=*4 z<0e$ZAXi0TGcW~~?LQ7P4phDfdVt>oO^SM&R&3tOw4S>W|B4decrZZNvQe!ei*o}Bp2)6S z#`A(T1Q7{0+gx2|X`h%yk~>!a#sjgfr(#SR7!`9D@9rcj;Fc8~hFMR$G65BGO|xxn zthV?OWC<4;3>^`tp~%~R6*?)AcFopfBSqh}8@5;*|2V&<;&u2=9yg*oUf&U`@v7MG z6bVgk$F0mp=W8uwVXr3{BIw2Rt<_eYf*EHSHA$ajFDd>*T{`H#rn2VuPl4u|{H&At zhxo!!y?4%(fy8kfV|7RqHvrB3&Q;gp`{KN2t*w;&{xZ1P#MOIC?(PlROn0Y|(=bs7 zDimSnj`EwRxtM{*sylG;X?CjGnhCQUZvtP9*{sM!S{W+{RLX)HcJo3kZR!ccdjyu@ zxM?+w>&CMO@#Bl}_EyqO;d<=WBc83bWveQm7ycFH8pOxKBTqz3ri?s4&Z~d##38c? z&A+-liN(Wv*L>UFsvAP(;^|&V%(A%D?dLjFuf)^Zds+Idxyf3#*&mo|#qFN?xn)DW zukknUZBO{PKl_&v$QR*S3Xa34t=D!jFX5S=L?wv37h&sa%_r8jR0nM%Bi%LSo@hZO zR_WxBBHD>ZZP~H{VfsUCXJ`u#DB4Bl!lio$&qnZa*k5ObiU`?{ljpLhp>eA>6GlrP zGi$Cf85}Z#FTj@}!0f!|JmgTE(8{>Vt0nin70#i4*$jnHZvit`N-VKI}D|_{8kXk2f@AGpcgKA|61$U*` zkGu_LyVmO$vKPCWy$ilS4Mgd5!L_VMl$@6W9lHmpzF$};aj zEZ$qPLI(?PudEV*^L4FB8~SllSL~O*=t>@qahBNN*om+e4SB$&{(CdqJ9gQSWC1k% zG1Ej|LD7Gn%2q_{gz%J1mesRwy1Arw;%jEJSl6~f!7bM-qI;D;1VqiE%dKYP970=d zx%dP{oI(6FXubv;uch+|Q~9$GzaTtI^jYqn(K>wFOZg2kqI85gJv!;9pV;UErvsbO z7#kLg7}QnBq4Z$RH?nc2kh{?}y+-`UWpYKCjk=TebbkP__bO7Tc|GeWB5Nqi z@S?$~!PHD%14rEz&qC#S}0bQZxN^)(Py zOl)*Fh4l=9TvZHQlPNSbX?0cek;3s0t*vm_)?B56$H9P!p4sVuk*G(|1->4bq>)b; z*3>J7QiW7Kj@>igJRHN`-tW9I6=*Wl}7E zwf0IXW-Kz7O8jW$Lc>aHgcXUzze)6C5+K=KShiEWtRK~EHyTvWs(Fd zf5dgSRs#|fZmF(k#gzA4%qx7tH9h;z6D>IKE0rXDw{~(W?}V(}E6YLaRcTVQzmoeo zXphhaoF1t=2xrI+dVhX-q}#XfI-C3e@7~nLyTG@Rrmcdl!4? z$RLeZy(|CRV;FpqjaOY&*$-$$>ItQygumtZ+etna>tGGPVA%pINn6b@si4Bwg@8~W z8orB%yan#>khK*+qsgV=j{`1WqZr&QLz+Il1E+Vj7~!MUY*kKu6VFpxF1$Nvd@{lCum>O20^1e-frTI)NR{nx_c|3V)8AJqDP=Ggzy_x)eU zga2*uf24pp{ue1=mj7QV;J?MzG?wvU{HdH*P8g*1+xI5Am;{& z0S*!X>@h*@)j0%cG%v4Ndj1rRsAf1(qB z^uQscrlz9)B*V$O1{&z;At31i47BraL*Vukfb_wDh6vd2{8AAX9R&>LqYe#m^YDlW z*r+L>jHn-XF!UjZI0B{#*2_nMqX4}@V(39Q1pbJUNs5ztZnM$giQ}YPoc=WFVNj&mUF{h3l0%CXaL4!fqRBFl z44sohK;Y4u_y@Hg=67iL3PO-o_*%`#&waygifGCKllOJVQ??)zWQ?gbQd6@gY)a@;q)P1zz8XRD`o42 zaDM9`hs65316uim+=K)B@#X%0ts|d-3J@ah{09AI)TWh3w>RhPOz(#M9xl%Dy90WO zkQ@OLJuEl?*xOTL`c+lY^!@G{|2P8p2L2keg7yDc!M(|eXcr+v5&U8U@8A85?B9o? z3Hp*a;@;iDg-`&c<^$yWmf30gWgQ#QVK^*Y^xR#+lwI;#-tLfgk?(ObiM-aff5H|%H78xoQ_E+q^ zW~llz1r5a*vj5Mt5dQQ^0l|a7K(d4p9Q@s7524P#=lc#(0XzuV3WauOsv;jy_Otzp zh7=X>^*1-D2?ijj-><9O4=qpwqWf3pSCJFt0u)q9rbo;l6~BFj*Mg%$<@65a zok^URc@+)KavPZ{8aZq1#d*Frt%mueW*?wj4_BP=M;?jkV<+}-qNvq;3!*?e{ zyCGf|xD61hcmAHtaj#&Bd2=Ox z2>s?r;Opm$_gky7K~y? zw>zby(JbpXh?Mz0SWG{!flwJtn2P9}A*@_?*DPLU5-z<72!h zGioytfpL}HsG8XEr*LN#FeI&4M_NtLQ{=eMRNAJOG3Y9F-vUT@)1_+WpM~akPRhks zljZWOHs&p{BBSjExhl)AczYh;B#N=n%W4v^6T<&SE;5Y5Y-&zD!AG;X#qJi8S45m$ z<(p=tTP@-1{B5MbeN*{N7(J`z+`cJED$=w_*qxrG_ryI08Pd*mcbt6V*~77dA*-m_ zp?Yz=JHZq5Es3z6NShQ{QD_2L#=_S z!>Ofmyb=JtR12jt+#%}IfwWx;v}?=!Vz^V5gW+lLng3%~Xqc7_7%RU~{)am+rd{!) zykLPdXsHVf)}5E02>N|LZ4QYAM@8@HIpE)upX=9?)6ml5rw7OY4h81u7!yMFa~S3a zK?iYAB1Lu!9l8lWGBMXHI-3Da!=N&=)Lr2^k{I`G?pi9r?~CoXw?SgdVn`Rl(|2u0BghJyFa-FFV`3bCpNPUx+DFr@TSG*T!@qi9fv!0RT*2B#< z*>+;+OIUI+gSM86;vijwxN6P6NueVp)xS-Ey=SoRwE5JGY1yb9+1OrhH59yh8qDXo z?Jf;o_vFzj`4uhryRF(?5LiO`P>~I<@y~jF9W;j-3*=M>3l{Wc?PENOg4CT%6r;)m zm8aaF_1V^>r$`(PZ~pLua*p)5-=z4Uno&t zbJ2U-YPg5E(-5EZuY;dvGFq;JJ%V|g&pS|CC0;)s`SsPJ`s8*2CD?fSO&e4~bPYXB zPvQkL;L8*awobM4!G!0&Plowky(qzXP4Epu@KreZd;S~IE07HW~vK7AsU z2F@zRN;Vzm`$$>gN9Wp863*8ZXnONd=5gFh@nI-!C;+3nwA$gbHkg&OEa^1g`*gdU zt3T3)%%)aU7`V>rK#GLhdMsr7?_8**$$(x(;MU;DV=#*?Dpik=3;z zT~w2oq=bjp4{`=NjU(*Z9bb~H$5$fpcH&?;&2G1+we8wj+jKNC?e4#^b`CM3g#nr^ z+qP}nwr$(CZQFLevhm8cZQHJSlSz8IGtcie;IUo#Y++BV zNL}HoSI-$!C2>Yvq-s?7Rh|0XY&!+=4H?PZ`&Ty^m~y5YULK6xP1XH`v$k9`K8L}} z0_n?`;%T##NcV1uVG@`tOPQgd$SR&*(p!e(3=3!kl*WD~5_!n9%KNV0c^ z(fV1Mfcr^D^$0$|PStKWSJv@lLO&gqWyeNZ7Gy_hb7R~V%p#x zqEZsNynU26L#EksWgouV5Mf7QQ8%h^AaK(`+?cd=O0=fLyJe$mn4!;?f?UeNflt{R zsob)pA3m*TE2!7|$Yp6q=zX2hueX!$`>X(5uDk%4MEtE)>s=lVcucJBQ_?}G+x5am zLEH!!T8;yGvt0>DO}e+(iy5=7N^yL>r}li<<8>) zJ?%N*0JG83Wh5!4G_~d_!82~>>6V4jbhq0#g5Ldc6vWwCvp?R z%+biW$YA}Kwe-<*O~Rv><@2sOs-FeSdE{kpm(``euH)L|hLFnV5Fx_GzI?mE1Snz} z4+f$OUxg8nU4xJB>DbPSrim7{YI1?+DYlofiic)NYs&v$5_5c%ZT zmsu%9Y0OHh?z1v3doGRr`Rz?n_ zZXT5?l%_b52|Eouu})djMuEEXp&k=<6#1&6=OmkSn9;GF`|l)Ch? za_JdMjS=`ij;=WoS$S2}2L{dAu0nw{Ii;f6buRA33ZHq)iv*aJPmid$yVcooN{CEK|w_99VS09aJqPT>~C3=I1$~9{MCGS zct~(34;_|9#cBIv!fdrs!Pm-<1WikE<%8k@*?p$LU5_w#t(W0OWCM_*4F?r%Sb5Wh z(O%3|_sV5`Y09wbekVAQ+Ehoz@lE4^e_6`Jb-7NyU$J)5pLC~N_s~P0H^3%aGM2t! zhMTIP>gbp?lugOgm2jPckNKJBp^?eG1U=u0Ir8z~^kWXSSj*UyWoN!pxvgQtGeM+k z8KtLV9wn_m?$~Op6=%Ym;7vd9GcYH-BNbtdCI{P%qetE8>;B{8Ds(*!zUm>%h4wb# z5&JCczmwC^n3#w-b@GflCtB(5IcqbN*JJEV%71n~x#hzNe;s)zT}! z5Wn@~&H_pwNM&XQ7iK)GGU~^)4FqmSB!q%J{uLK*0g1rGl$;#e z+MDe&M%Yj8>A*9nDf$3h*Wna+K_?VNredJJ-(6g*eh~e51th0DYe6&l68><yv zbsYV~KsV88WYWyn1Lhg(8=3{ZkH{HD9e!n5xhYHBSpA!j94A>C>B-KKztCw;uNO5* z@yFLESLN4sRf3^f-t)RN;o4oO4`;O{Z>gfr{@>O5Xa*!vy6XPD!wSwg(|VR*deTF%<9_K|yGptaf9K+oeEI;`j@N$#N5;A* znvb>JQTRqDXx?ZMYS;}a>uePU1z(Qc9yF(?eZl+}Mro^t8fR4(8&lWjAMrKTkWJt5 zc&$u60)=ONyVMlhD44aG<`a1#-(T&t9D`{O8rXKF-xYpX;L+Y0`>sTev%Lnm6zs7dCCM!D4=&%8Zc|4#D|}K{ z2zGFBtHm}>FhdvWJ+f1+KbJ6X2*T~;*s$JV{DP>@_foeTEX1I zG(<8zJ?&(H7cw-;Xm={(qx#i5Jyg(ouhACHvLaAu`Ej|yjN4d|kNSunhK%!Pp-FNe zNn1cLTNyBRnsO}WeGGevpFh0V9}rr5_K_yqCFiSyQsAFfVzn3hc@0y@(;Au=IJ8H1 zVNLD(?Y;dW(~^=D+Dh!y8Pki&%TsKXIv@GSl@FXp42D2+O}jb}sMS8s0AsJ_;gQ@? zF5MMThuDe4ES>1+cPy2FWb@Y4pKD=1Gki_y(joj+9k5Fewn7i!7b>1fkUJ=A#eV3} ztkmeP6-pjzX;LTNgZY@Y z^ba*0w`cOhkb^IOCt;E2Hw7?BX`M zX7th>)O0m%M{HzeUc<&g6^0@Btgleev3${`Kax5>;Vg1(LO*K7yXzik^UFN4g-ze9 zyR7ll;ec;6mk-nj!a8eLgDX~v4Rz`{4vuN?CK%%GVrtyFXCh~+iTIJw=jy(%9NcZ(@@D zk-B^W_H>K-fJex}B{NZJKqKSCjBQzd`_y8Vb&yqf5Kx@0ouz48>^IWYY!Qf8Kxr+h zKj^8!5Wnw{)(#Ee^T#unS+VLkCDwLLm$&w$$N=P-`H+>_Tp8txmw31ZHIEZ2py<> zFGtL#yps1IKI!%xtQ&_!*|9SXzs$1gBD4p2I$}ZGgA?igk$%`^9y~3vuq4Bz7PXfa zQa6r-w!^;*3?r-v0Ru)A6)38^D~YI9lIp0G>tF1&!6w}CmfDmpX=M|xO=DOxK=cR6 zhf?a&MBqi3lWz1;g@S6fLOe;h+FRJDGNDX@G{X)SPNu4ErG#In$K^w;j`-{`<7)72 zA59|FATc7>Xx#?Yq}JfF&S*{6^>Sb?k_}4UdTS5OXdR49+=N`zj!3P9X0aFImqO#| znwVI7n+T$e!OHOAZk_Deqs&H`PTU0aev81OHt75Q;|`+=Btg%7%4A~!l`#zJ6(YWd zq3x2U!ai7Al%I$z!&+M$yiQXk!(1LDWe(;BBrK%fmSW*^7gAnpABb+-eVB>pA=lK% z&XpMn-Is^SO5Rvj{*1x%4R{_9`_8N*4y1i^pBP~0|@rB%0z^3Ad#(LxmdBlUqcrs zQz7H4~aT6^5 zX(?%O^LndiB#kURPEk7pJu0f}7nS{JFMBepFk?bfA=JU-=j&Zur`7O!8=@ByxNL56 z{>U{H?|Bq&S0}Y5bT6Qlnt*VJpPDPY!e6r{LQB+(iEFYGi`<$g)A&G-L~yAjQKxj~ z$}Is$uBW9yS=;Uj=*+oCq-ymxINd!z9~8{R>}9u{IW#IQaEpDH#Um&~RSO0|>2 z#LdQUD1R*eJ<_D(uD5xl zHq)m;*UObUG^={+EmQL*@|V8;lhxQJc{+%~4=Df~=W~|!rqeFg_B#g2ZVKmT#I%v+ zM4~mNr2v!5u5A`1PD7EOqQ$+!33y2&Vkb`OND8TjYja}>Q6yoNyXm&Lm#s_&v`E`p z0$oTr-^*VVRm!HU7qVWS4W;92w7((ny)x4F6^7~ril-{RVI4*mB)*>2j_0rw@wDkM zEsy6&t2{c_rI6v#Y<=5DMb!^Eo5mVWhTletku(+3*25+yO}%Qjw$IW^P_eKk2$+Sn z*`9TIVl+E$1KQplkWY%WC7Z2m%m)yvyluk!`U`GvwfFb`0$G_D{u5#Re}Jr-QvVCG z{u}Q8w=q~&j(?E#AAMwJXaD~JS^t$%|C^2Qe*|0qt4#TSLeu|(QUB?k|4)p{#K_L{ zzcDH!8wOLE z3R~Nh!`snaiwAY-zB7E~pI?3UCp+UZ58i1!(mO3XBq}CVSTaT@2Fe927)Jv`BU2Ob z2?`4-#>Sw38l4!L8XJif6)m;8)&PHr#fuiexHz?g1;2j(Bsc(NwRew`$m;CCr1ld8 zbXVgB!~*w^OwW!C&Q3rXn42Dd#uKhZ;uBaNnAyT97=eui3ksN%P(l6)E>CVLO`X)v z`Q-t!m_7rr@$un_`E>%1SO?CnnU)a%AVo%}F8J0KVMgW-09%{FIy-phM`;dHqoafS zqM^CDxtSt+nVB*mmp0@Q3+QTzMisz4gK=>J&I10S!Yr^cg8%AbF(aW0C`)a5>_f#e zfJS#mCMVdFH88jR=Wy-oXb+kSlnZD(1Ayfe4Tu6pc(OMh_Qz%b`muuxh|Rq2bMg27 z6*YnVNN|bgJlz^rToYAfN=I%RVCbt4dH#0S};^x0R_JBUEon0z$f@I+BO)xf$d0ziTQkxrK zX7BrI^8V>yD`?=J@amrs$~v}nP|q}_i>uKruo71%z&YM$yCWjuZ;~c}4uDQgO-;{D z|4-rz;FY1-@P#U{xCr=0Pr9jp(1zvHgWC@W5Z%TU(7S@x-v&=&Z;s4P&_6tmdUp9O zKm1EX!p0WR(UJ+>k78j7EA%n=Lk6bxh259im)rs_kpFD^wFXe*-}Ccn^2TO(Vvvw~ zivQ@3%NU(j)ZE$1GPq0nt4>J=_X6O-?C1cPvDTphXk&Ag1CZASzWaOpZV&#W{M}bl zMYiH^{t7R~nE;B>|9VTb)A^b&wDpq*v(dL226xwonDW>D5e8)L2h$%|jZUqpjlK1E zR{D-U{nx+g7k%>g^6hswrbPGp>Zi2)yY269{LawM#>}IAbepG}tLG*x>D^{nz)yW8 z+}$p8EeK1STgz{s7AJag8!jTSX74m7GB!Cg^=aSn%FMzFo`AEeH9B*(|LlT4+#zjP zE-OR@lw0f1<&Nj0k?A*oXWKG!lW&)H&Tib5KGoi)*|)t8Wdi2fS3Ro9=>b><2WO@S zQIBjt_5qMbQ_po3=iH$_F`R)RSfK8X4uC!D2M|raoP<9v4Lf>(=oS5ZA0m5z=okC} z;2()EK_39L%3mTpHh}0U{2@4l#P47Z02(L%Iqc{K{HKwk2mPVRe~!`b;2n*n-vV~D zSpEp){-SsNq1O@12k;)ptZ#J3`(DC7+uFjv#P8MhG$+3S_8q{#fV%@)UylCJ)`r(F z;M+|&#D zb&0x-ot{U%0%Bor`NW5Uo8gc8HQnF))PC$UVrylO_is+Pt|gxF7wTgjTAvwOzrY8x zU;lT?EZtKoXt*3R~tRLuO{&#}v8rBBTDJ$rAWG+oNb@!Q<;Rc?8}gFaSOR9bWCv| z%W<9@kf|`_fy^r0yh`ry`xe0TTEP8_SY7d!5egB;QZ_TY6MEJn)0Eq6(s0)TZluG~ z*50K2S_3K4t_`J{Oi2WGNj0~y8Zs(0&xZesDsL#Okp7JJFimwht zreoCtz2=`YO{^T7Bc8$E#a9NgLPz*?kk5&kxYIm6Ac^N|Y+n4+3}ZChfFrz=g8=iz z;6Da9+ob#QdJ!Yym-4>F9lwN}r)nH@P$qF>091RQFr=arl5gIzi*a)4G~Y^jAuEup z!BolaoNI|g7mjk&lye%xX==;(xYa1jgJkxGr9%$!jJbPRd6NEY?Ukf^k}3CK4H2m} zT_I`%;*@zSQfJ(ph-n;Q;aT*0+KG6B*SF}J2;mu9x3RFp)n+{r(n)>E3sx~(yZfb!8ZkY(MHZV z0?qVc%7KRrJtXBbvlI)=^A@K9@g&5LU0-pK-!zZdeeiJ1Su$J^C)&4hG9;61rz4l$ z1R{`%X{M?7;s<4d-|R$ zvFSPVSI!I8)XPyL3A8#EY?+~SAHBdyS7|-KOCZmY-K{bHfzP`f9n-boa-`ct$$RlnV*`nPy~bNi zF9lVcGY_uS&_u>=lEgGqt-&tHj;JTGWkP&+Xc2-^(oc?4K{GF~_2l9r0lLCeIglbj z=>E0j53925)OXae&qcN?9O0plleHF~2r)Z5x_?ZB7(f^@sP`f(hzSId8O&hm{_RY! zA^XMtI7`mRFdb~K0Mo1uI$0RNB)unk4r9`Bv)9`a9350S8Tt(M8Cl*kK zApcF__;rd&T?v=yA}eLqhQXWC0jr=W4)FIBo;D-I7IL~I|9VnHAk@Yu(V@qOlW{|l z03QB~fAvOV;QG)=MTepFZSJ|CU(?V%Wa5>K`l12wKLLyx*`U7_T75^JEz?}lcLTuY z3^s4KCK00*A7MJ%I--F1CKFBpdDeHDt%I!4*JW~Z0J0`y$xiN3pz#`eU`cb;xeu0x ze}OFrs-3NSLCP`Vnncp(0rX~ZmgB1>m}P=LlfkCxm8M=A1Vy4q&CiB)k9i)iUwp~ z=2(5z0Yg#V;HtwAL~8Q4)n$94Gl;0^68JYt;u2Sx6I2571mf}CN`@2ld$zrNt`CWz z*5T*9OR&2sc-zDevJ=kzfyg1b=9IdMOK@oW-B0oL05~dAuVY$WG#8;6077X#mmWcs zazlIAML4^qqy36*>~NN>JX@*^lU4Ubx0P}VYTrMUxR!TZz{WuoD_P1Qkx(4XNk+*s z(|7-*fJ@@$ht(lW>v9`I>7pBGEwZNs{4!Vyto?BekaTf;MC>WRQl4zp2=~yX~&2DXIc&+(hkF2u6)E6crD z`F8~pLJHT|FWhRN3}R5{c89~t77447Ok45A$wQhDaoWU&QX~Rg-?Bj}yaZF9niTos z7b6T@CfzyJ3mpV4k*rZ9Z(r*BW=b9FvlK6uX3t7VZ1!B7;MnH|Z;$0u$+5ia_C^=n zz8m$o0XCA=DD0>X(-EVdmho{ra{IOl&jp_wUuH@pC5bDou`87YFiSQEkCjbik{b+8iACC2+&5>*Vm_>w~fPOBC?b%Z}uV>$4 zV=*D~8qW|r2rL6#bg;7z-cZ3Oq;zS2K>q7E+4R-R|2L2&*mo~c8EBNp&KB~U8y#I2 zlt|sxLUaLV%`@h(Kk;CI?_N`GOgAG#QPn$UO0U|XV0%V7-7l1K*Wq!ar_n1?*#R2} zwHj!D1wbn6eKCAQ-7|W+;r5wt6p2hTo-1WtA&Fu498j9s~5 zl6p|*u^k`xlDC$1M2wdsC(z*~%M>oXUZDC4Vts{G=EKGoV>W2zfI&Jroz=_Z;~~%1 zOBp;Datgh!l+{-i@^$ex82R?$&92>s2Hm!ZZC2=rK06;3SyUL>PFm-$LY`e1^h>H9 z<0`6vMI>$8aHma6{{i@+h^jT|5TE@kdK|!$Bup=AUSXDwqxzo0FW{*0~y9) z7b6V}C(_woF42cPgR}@mtoIWilTZg@51gA`kfg1n;mE0j!{NK}5E-PF5m4tgBsZWg zFDt?)AbEsgA>UE!;sYuFH}k`z^_?QQX00i&6+rATJmM(VYpX+gJ|>hW{t2G0U45lt zd4UrKC?!GOdFzuBMvv0XXEzafSCQfVYp<$eLn0}f0L&4K+G^-U0(ZL{4fiz z4fMOnNNUBmNYKuSKUaMDwa`-h+rBzYFy{5u%gzYDE5}Z&4C;E4NA@vHpB#i8-uJ`F zrMNI{#OuEm1#(ZE#GxXKJSJs}blDq&?TB0&e+|2iujep<=kw^v#)XbOl@nwhwxTmm z?N?6*7p<{1n_rXXfo?+NnR3aF7yNS#L}Z{(z^eV*jI7YqML;8dZW{G!vV6v?Moc=o zPsj|LlX`%fE*Az~UNvJ4Qv}fo84*%uPD0ZT8+gk$Qnl?RjmfE5CtD&s$;0$E(2=|dIJuR+=we{)=aQl_(*U|n#NP58{Z(+kPOaoL5V$%)Mv}o^P(V` z!kExJcn^O6UA7%?3}U7wiK)+`%7#lj(J5MZi?GXpGnPSM<(%H=-c}m*dFtSe&knfu z*Mi5;_}%whUlX%Wy1oX?(d}KqI8)!6OzkHYGq*~6R#y$?AVn1>3elck*q4(wlXQZw zlI{iT8lQ4=Ah+WYXik@CfL=>1Gx7r#M;F_AM>=aBbJ>t|=l<2OkAQeq#8!WjZVKas zL7}7IoaeG<9+uw*zB}nj5&Ly;*yyRZ(hgQoTwQry?SrmW(O8MNhG5pICj{ySyz#xK zMFPc==`2JB?)=|tGG}z@A5jx-4w2$Y5{fEDR16&5b;IfjYe9t-A{r$(2TepKsI}z~ z19$}k%eAdrr86c0R6X*@GMPMGoT#^syDl+BVa(KOaV?8jy6*g#19EzjIdcm`8o!lB zGQ^u=r{iuc73P;`D1JjbM>9klv9HF!v^8aQn3|4)Gx6^IkL3yG64`45z|x!+M>_g+ zbPCeX#S*Z~pLDqQS$=dYnE375>puK11suwWo^_VbvL%*OV`?07YIVQ>Iw!Ip4b{i{ zdx=|^pwhkVs4L9WE07>jkM6=>aT=6|1lcjqx_THNrQ}78tE`^8;^|;-q-S$RD%y`i zSLd}v8MTE3hA;Tc^B5c>IsGM&x-ML(6Q38r$i=9|^9KvmLQ%Y_2T@c=Ep15iE ze3tA1CrjSE++2VOw(0PbY({sMYBL9Z-+_}k*CxN#@;F>T)!ttinF|!8#GM@iY5hGx zC4b5ghKEfLk3fD)e~_w5$_Jc$Bl=d|2wq=y~JA6Yg6R|1Ym6^kS~B<*9R| zVau?0T@iIEho%kKFY4!T+<$j)J^Y^ z7htgT1!^TyyCz;v$MdLOAm{r4X#&isQV7sgmCN9xgvlvdVRbiIL{o$aiR;tJ-&KUl(U;0 z;DS+}W&Kg+As`$Q=;~}=WaFa+Q1Tr3_+x$9CJqhnXIBW>_DmmYw96<}A4tawOKZZ< zhYd+l>^WgI{I{`2DPgfE-`mwPjN6nB6O!VbEL)<@4gPgZih$t$gNQq z=W3{4V8p^o8nt3w?&xppH(tKNpXB!{hnl}`^NEeb_5-VXEme!xIs8cshIE>+(FN3> z0jY)ty*ZfXi|6vA`wc>%US$oy0xkz{)D1%E2 z_rpY~7*`9;F1rWNT(okv6%xp(?=p#>Ui9A>iM7;Pol_w`%VBya!>rYHppMcH3=&~UBESK&r1+gb=QYwk_b$4 z5c<{*q5_`}%7#9;kNWKc=Af;SX&D8-2*lmSCmZso6KX~}=dWO{H{;MDdW%d$WJiIl zOr(xhhByQ%uGF=v97WICLEByEy%gsrnVXXo4!#S6d+ctucK?YE*|#nm$YJ2C@Lk*# zPqFsofvH1I=L$)^EpfB@HHeDf)~PL;r)Ri4rI%tq?&CdwJ9Pm2its zMrRHPimG8DbIawTR&ecNK-iBq`{0lwV#duybi0R|ihY)qT+lKB!;bUX z9bgS`1L~u%>~jiuleT#TtRy8rSD`J(oqXlfb+rhS#OH)wG`Q8Nc0{S%nhgxo5&R$+ zalzLcd{sr_jPbZWa8B3|K6;u648=Fg1`A7~MXp*oi@g-hOY0jjN2>}GlOT`=X*1Q; zS)iPel%z9!s*%Y@va*N~4uI5Ekr_mkhF#cW4b?!yug3$<0Wbfk`|Ok?w#U+)5FzPZ zuGEq^MBOflC8%S_{*o(7CD7IgPht7?ixuF>f+JTw5Nx*)e(v&=x^>r|tqhuR#@Q70 zdeU0(ql?a~jkYj{W6tMa9q#GcgJ%T*VM@*fYwnwswkn|Kh7w7wUKyn?HXH8Yr-GoU zINLMr(}zlV#Ltyln=C_OVRMjZO+7_?UK{NzlAYrln33{&rCUbu8DP%}S{r{DMG;HR zpZ;U*N^4^Bc=OzK&xjS03} zv6-26n-LFW8^BdZ;z3J~U(y}BZb=2(3>@do9Kfv4eLKIWM=QM%DGM9m8>yEcvMd%} znECwYollZ(%G}}BOXh694uaD^iFlj+>bNWGHxmniQ^YNyPGr}HCJjLPi-oEf)h#yd=SK_oNBSfZ3V>L2#7A-E}gIM`Ey%OEG57`QSKfi;T{b z?*~!U=Oi;?_(^qQPiOWj=-9Hg(9X8_rc29qC!~1Bp%^`)qOCd$7FJo#-bw#@ATX{(IH^d(NsYVmOr>kkSt~a32Sx>KWOEh3|Jg~ zNmNfc`Y|i%*36OJaY_6U;@UwrPpD;^j~tCIXN@PsBhps10C{Z@Pvgr=dkh|ob90Y%eQ5o8%eOPk292 zqD9~?Utnh228AAVgRiF^e2&NF_8Pd+!TLg^hWDTF+}F>m*FUc7eW{sYCARZRSEG*Q2t%w#MxZece0CoY+9o9u{|F21b`kVZjxMuw^vxSL^R zvvEYz2$;y;F&@|n!e~0!8{2ezo(26V5svRsDcOk)qoO9*s)BG^fxFUQ&chFfdlaml zH44piB2}Q6Vo`rgg{hR%?RC09?1Es(7FqkETfoRuwy7+ax)n!*OI@h{7$#Uc#F=*f1i4eQ@~ z*k1NPP~drU+7m%t>rV`u_)e+R63>1;7E4%(ko4vIZuj-6H4^O;%e29$_-CE+9~Cik zh41Y{()}HxQg&r%=te;Bb9V~9<9s$97Lsw@p<}sLq0B%~R`R>IBUo0pV7ov;<*R{0 zv>kFa?X!>FP8|z9P(5fDFc)&SaEB8NY*2A(B05kHe0Ql}=3=~vl(myYadorA9#Dab zaa8#YZ<2BUL3p^66>MrkT{x1AfdI+m=*_SfhMw~EWE8c~FYVMUt1D{lbx8h%*IE<2 zka#~T*l|C<)+WxQZv$io;axK3c_ffr!T9td!2nywevapRD-u16TgbaGEH|{VkTvn> zLiS&F-{)R$Sa0|Xu39u>^(@h$bD$2^C05QHGoJuTDhN7;l7CQABHL^Xht5PA&$=#A2={me*h`518I;%D(%l<62fr8%afbJra_O6kvqCoD7 zS&>~sn*%H+!ERoxS_N)?%r{3H0C50;=Axv=O#Z9+8b#JJ88Y2x{A`vl{IC7^%3@xF zRo}Lf)z-Y)JX7km<$(6EVuhYUZ8`3#fPAC^)Gy}(CyOR>f2ygwl64R*8ctw+;kVU8 zW%S0=8S{j5tN80vKu8^ZSny4BrvOeG%%?RJJ>6v{k1}KYM1VrS1Q;KP@LusmF`_G`!<&NM_{am?jqAniTHJJKz}SPp<}GGysKHH8}2KiP<7 z(R18(yg6ySSYbf)G|OF5OYd4%6*1|CMcPj zDoGe&c=pM#Foy!yXwnAd;Wq(mvm$duaoNm=kdf5ec;DpgNUR!Uh5AdeQii`s5Qe7G zR>A$3QVlC4lLb!l822F?h;7t()j86X?ovN0xtlIt&Yfu%kW&WEjoO4tq11pRI&aSf zynn%jqA8!Hh&^OD7FEY3=5&f7iVZ;K7{&TR7{x(;yEA#$vM|oo>?^4^Cd4yar%`MTKCJasfV)^5g(d+%bX>vSQ;6g()!r{t)rI2Z zjaTFl4J3QXGISxn5A){lh|txeIewW2WRLV@W`X((T|Z%JS>A-#Uy>B)v>Q|W)EVN#1bVNJ28+@}7@9)MIOFskAWEM4VZ zgY7>dNcjZ^M{fYPz{YtxZ4jlzLmtdS{vAuyU#OO-(OsObY(Z~Xa`QsB?a4#TxS_j? z^iUVmLl3$lPLYb!P!k`6rz+0rq?JR_>gC2J089kFd$M{$Zn*je zE64Qw&s6$u4r|y6S_2UTdP8ooqjrf<2;<5)**k`t3fsN)Z|lLA*UJF!BG1s5;^)Av zsEqfU1zIA7A}s~Ak2n{LR5p#dE%ih}#ekAcnYui|W+jDoe1+%$;po}p3Bb%IzI#Lr z>X7kB10$>1`mmPbgxn7;Kh77!em<8W|uZqp$cJuo2lX*oHfe!t=qy9enFz}sJHgNkY-=%$yKj!+j)E!8C+9X|- zIQeOON7C@w9<3xHbh(e*l}W=3@k$&K)5%IaImx?Tq!f>UjW%G^gH;DL(|KSxX8Xgg z^lr~o&Ny;w{z`wukBYHr9@j{9XlH}Bd2E--XdS+TS)Z2ebYZ@F!9Ja448wz1R{F?Q zTc<#*Qmll_LX{j@ocr(!RKv`~0i>ndk>v<3yFwsI^Ea_mD=Nwh!!ENq$EieJbEAgKznkIygVog@vvIr4Y54!_y660wnm!wfdhUallHXU2$ zAB$LDq<=a#`TopihOVocR)d8$e^EJa@!+T|4qGNnD2d*Esdr5I>(K9|)Op%jkB6Bs zh?wzM2Bc#pnX}(O0XW^(8M4Dtq+Baa)@$Q!eu8@gT$`^SdM3!$Y%sQUT9(Ew_Y3APsP)>= zYktbcYs-SV---G~!!(UbDvj27f9@Yg-&a1%&&cim+LLE2>Dy}$e;gfJywsea3v={o z@rYKEgoGCXX{C!&5xyaP^dbmLa@Vx8(8;|oII~k?tg-z>X`;`>{e1UMiS33|uPYpY z$T;cHFeq&}TH9^mi1|(%4%|ILgOsb0&(>c(1`$&Y)^Cit2|=%+r8s7tfk! zO2AUd;(5Wa+LeD|8q^s(QuPHZA$Hbq0 zSx3Q$0*OFqnhHVtQ;=84%Wrw(=U8Ja>l;~;`}FXE3MZJHyy2XFM}z^tvos&Y=@rOw zAy-C^eH(upG54}_RYi`LEK|Z5RJ+ia>o!INZ_*8?>8z{OvP0l@NH_6eds4Kyvf6hQ zQD-c#_Y6>|ejNn3cxMS;RQh!EGs%$C_mowk;{FZQ#L6ww#P>Yq4c?;FP-x}LW%%`& z18b;R6*he>H1m){N2gPEVwtfa$LU;uVUNh5_U61@!?1*EStbx9e9i|VkKE<3N>T1P z51rRU896yK3Q5yw6nyZFYBfoLO_25pKbZ zgd9blQxo&fFp@Of^g=A5!{5gm3L<`obg?!;WKoy!2v;dv^^$?i1^P>%-;#<2XYWSW z6n^Q51UI`7Xw$>ac!6|WqkS&E30Y4A>IeDU%yVJC?HzlZadL3C@4g?VLxNIw>n@3w ztT;h{!RH-bXS&=;8*Fv1xJ)}|8e+SpOf*hwCcF?IzBG9J-PlF9CY5faJ?#t&C>1-< zppEYtT9%*d4>fMsEi=&_m)yi$0A~8ERFX7G)&|_E{Ycu9Ai*(_zAl@e#10AcUELBG zj>9fX4XvD4Ypapc+%%rg8km5eWCq}Ye|yRfL~g)-n<>-WaM5s(L3PO-lx=fO0G{da z=wou1&Go^IrC^O^fcGe!GV}(pL9W+@MH|AOIdNccV!VVlQ0Y%=nH2|$+82hQy(Mjg zkAX<*+C$JT)OneOdGbRdM*^QObBo#ylb7LWa4@Je8US2^Dm9xzyFKIW)KcE-cXq}| z-o)Q(OE5xbsf0}54m^*Lf(`qd)Xx)1-_ih*JC~|gHi%Ny;6&fD&F>dh{@HnKm46e6 zETO+o6@;k=*040mu}H2{^*-0g!R(Odc4`p` zr}1(4qF@c>Lvo4m_a_XILSyd1j34XEDJ6XIa) zDWMf<4n9nTZjni~(a!ApDe1W$vZ$AC!$SPR2q~U(G3R(u7VaBYUI;RBQO{tRi0sUx z*DgK$_a|&#;N=3qhZa9rZhBZg&XBY%D80P}{jWTK0bB@^b3`f&?P5l9>vz<4NUl|J zp{P#<7^|tpil^=ZZO@P1pUlCK5jr@%Cb{Wp=_f@!e3Dg37`nhUi;zS;VfaUw5KLaN zS;}H7M_in1-Xh{-#xmR8W9P!o4MA(lzb|P8D|}^8L#siJ@KTA=4&O@ha_@O!HOP_@u2$d%KJ2Ixv?wqP!u>7gt5Dk^Du}} zqTDIa$IRCANfA*B*2vIkgBW(NeYYI8%UO_YX#o|Os?LxN9i6AJqv25H$#No{gBX_% z1@W-XT+|Seog)B5#78mM&4%xPkuZJ1&Gr2xOiqArKqH53L+%z~P5R}(TA9_AnaqOo z*+YpZj9yKn%JEdDWZ3)I>Hp5cuZeOCEvqfD&N)7dO-(>&82PpP31#RB+uD(SsNt4L zM6|^Bq6Yo=4ei=c%c`9sXfjVPu)&DpdJ}WohSl4=nR`GrTNC|iwJ)Wce~3?U{W+5f zUhF)^0I$`qa~B$OlGeZHD7;WMXMFisc&=*S8I|*CLD!cKe1cUPiGfxLe!z6N{C-=K z+ED5&5UmKyFJ*EPGeQb3q0EA(JQ67CuU{r$R&AolnI^@WWR%^QV|`trzySmMyvBrd z;IJVtT7z5iF$2cCL$}RMeiMf7V0x&_$?)d#+hTn%*m?uB^cWM|{s5-Brz+JfQzQzoMS*Ikz$($6C5FV4hN z_KkIijQI5YbJXDN6;`Px%T_pF3n9WP!BGxhr|11zM~ckb9LmYZjnt^~)oi>)N#!3- z-L^Zw-6ov-@hHL@H=VYNFHcQGTOLyAzfdHx2|9<*39UO9&wUx@5Xn_A8JKfapjHVg&;I+Stb+`ari!B3Jx{8oseZr$(>AI z(}EfQ2V?IPoLLmE>&CXtPSW8Y+qP}nwrzB5+qP}nNyoN#ueEAp)!C=cnKyIjV%E4C zHRk(05B1&~+ho^Z97GCY04Wy>(IL~An^}oCAxyy;q-k;*m}!*-66SFo(Th6&CH7n~^cq6?}=-Q-DJ*{O7^lD<@K$ z$fSL<>WqB|ME4C?y)C0)dPXTa2{7DWt2q4R3lTqsUSI?haWfd@{^E$3!Pt$$!z*=j z+IVl71gp9NYFV#_Fpf6mP@tQ!uW!eC3>PVjjUHuwzMlc|$)&w`2qFq&ICQSH5SlKR z_5sdF#|S-kgU>fKA2_`r4Ys1kLYKf()Ywg4@V}NGQwemQB7NrGkva3FKJ#T_$6=vD zzWt@em7C5pwD0MF$(gLT7eS$1+R;{tcpb=R#LX1HMhTtGK9=J}FD8s~Pk8rHxO7f3 z^N%GWc`)?Vj9A-le?@=Lx>8zhg#-}GA=&8+mN<>%_hTf>-M^@Gk4fXIlFEM3iE4%e zWO}g|PNQjJss8KuIYykVRO&bL3$pBWykb3kw9-3Mn6PXG*oc}|3Sx!)e0)AnMpEmI zSWu@3LH3rMl?=feCNZh@CXc2@f#VqiES}PBoWi^!jZ1|i4xi$v8_HS<1OA2lH?69K z&-t90G<=0Z{LUk0sOcP<_F7_yN{zas>B5B@w|gK4X<`HYkRWLLe!J>=)IYaqbnTj6&Q{;DS7Y#Ne(fDbGMTM|RHD;!Ds}C_OfvR!5zYBH5O9XvSKphFp@A zsjsxJLxo``x1%RvkZ`V3K7EPlI8-f{>^^O|&rK0THkIdj8B}YfdluG_LFxbQR{s=z zTz!X275A;n;!G%8&ex9M+oMv>nxd_-vOdKC6B&>Fs|wn6noH|=kgZhQo+)`W-IbK& zkX)^$SN284sl{Q-Su)*NPu+cTsQ)bHQds=t(b@U%`JUDDOMuUZjB0F+cv1YU`GHE# z(X2mWyuUsJij|G!E6ku=0Bero=yX>bM=^B96blIO9@lv2?8pj=U0oT8jkHTnL@*kE z@#r-6eQ9G>?+YU^xN-aem1A(V0A?zF4P$ryOvb7X*B}3+pT_%wx7Q=2;@GxtJyG=y zq;2dsAx}OG#&B_pebDd%`$`duCP&7_DG}I($Ej-S^BEHoY~Jsh^ez0uxzk{mOsEC= zJ4yDd0PJjJ-Q#9-FD$29kDW0zpz1|K%v?exBSQw7)4q;hidIM^rrE_aM`j1sD1THc zrph=dVPOag*2V6a7+je-Iskf;X}`E(Uo6-|tN?HoeMez|6e#)kCXmV(2{H{%Oq(Pu z(A$KnUh+b{WIL9Nit&zFG*Ij)4VkrZ`q^YBsd)4)5uo|PP_oil@LD}%Y=HNS=wl#f ze|^>gT)5~P_eDz&O&meKPrqxVl1xWk@67s}H@`Hzdx28C8tWn(69v{K*CPkB$FmE8 z)pca71}=7f1Irzb(XN0EX~)hXru5@`MhMm`5Rw|g^dQxk0QXRl z{G6iP$@~Se0j{^2XXE!qwwc?rX0QUWSk|#}&(*OFfd77py!8jCLKXi(+KF?M$of#N zGXej=f=IMPr=ACX`S{A%2oaMvz18CHsPebzR}ez5t{3Zt zZqh}R1KiumQpr2q3d~W6z^tMzMpgSs46wM9vNnYTdF ztC$1EFHR3evo3b=$O{nz#_F*x%rTowAOnpp#LAr(bO16AsMH%CCbQH!&V;71>8{kq zsjq9eFO6~HrUzf*tos9L6$qTRT3L0`(^3nx6gMCI4ifXVbKkQ(R^)j0?AIe|?cU!Y zVPGbZ+@Uo|B)j@kX@lynHy+ZaylQXdI$o>M{iPShD|rO`#`yDW%| zU3Dg8EJZ2$o2?VwTTLA|!R?^lbRoka{KlyUY{DBm)A*d@nB$+b;7p%brQ<&XZpBE1_|b3#Xt-ta-A^J+XC_^S+!f3S`J(w2 zJn!}aM|>mCJaV(V<&^JZH)0`O-hBf~Jip>i(UJT{Pv*Iw*F67HPxJjAY)9p>vV0*L zdDPx)7-T267iGlMDSo^DD(ZjN`D+TOYzfz>rC7K7DPd6nVdflGOg??=oWNV;0am*5 zI@>T{PqwkW72X~YHE6{l`xI;0qP)+2r-D5Q`SPR^6Z~_MGdN7CN7>yh%Fv*)^pLEh z8eWJ8;6X(O88&@v9K3--Xk;*gpIf%mfoosZw$Ll!1=DtcVyrlhLEj+n4WB~smVjPy z2uHEwA)hGezP*1-J~&bi-T*NY+9=Sb`H7$rnNN_J+|$FE8#p65douAm%8sX4QdM@^a6fVwzu=$<4fO*%~7vDWLW#elqgs{gqBSv|8 z$g{nc^^(6R$-JJvxG0<;SL{a4s54xh?1@?VQaadraUe-wTUVUf0uGZ%M@$~FWexnf z>)QO$Ic)}p7KX$7mUH7E)aJ|DrUsuIE+dKP#q#wmBs$~BXx5_4RT%rou<@F}8aFLI zAPiik!0%7tn$V``aMJxp(&Qyr|LMJZju5C**?7R;iMex)^2|SjDY~d38~|)v1MdK^ z+bIs(ZDINXF{{aVSxUJmqfeC$Hb9aEFsJV6AAX50tJdJa#ROAu)<&CNAvcLY8JN_y z%DdmR@*u;b>MiNaw`RTaEOk~^CgpOTjsu4F4#RT?jIH%j^7%7~UMLiy_4{hA;U{Bu zKJ?s+1_R_Hch|LFq^95z1P(I_h%_H}YiQJ)#mwF9h}c{cwx%dChSl~F(Q?}NpHC!T zcj9z(zuH@roMBvOUs{t9_{0>9>}rU@5OF7_tWC%1q$uUJAc-r-JWR_oZS#>h=pzAB zqhwuz6a>`2P#MNidqq*i#lD76megyid36&n42PN9Vh6-9+t zejK~s?mqYGfGuR0ZvN>q)+g?Pm&#XLTPM zfrFTwG*>xTzOCA7MjU?v2f7s?7B-(TNT~Z<%s^8>+uAm}L*kESrl|yh0K*ws3W2K= zz`_^!Aa&D*`0MK^x$|UDZIhvy8GK~MnoF0_)g+>OIyC|5jdfUye3h6PZH^F_i!$qT zwAOnTNvNIG4SpngTQYi|jtKnLMuoE#EbA8aG7=jj^VhvfzlZ0<%GZk3vd|ANPH_67 z0Gxf%b$FJzPUx0(*t(BTqc-3)M1yL@z@dcZr{YS|x9zu;8u=^g8c8CPYwWx-7+b!OJ$dPt)&_lQJPaS_D#;Z5P@>(#M@b#9DAt1zrJY6yl<+uzh&}=iXK*)EEaPS` z<429M^DKqu#vF2JcP46)^qx_4*n8+3-Y%xJ;d!MiIKhl&AIsY~e6F!8z#NO}5 zyP$8?)!i+99kU36@m)@T{NeRE8#lNq+h=ZrO~crGlfb?;A=ye+n!KVm7*Bzx_-oM7xPJ@_Y+vF) zk0G>`lvyGxjob|zkl#9tk!?I7KePS;n`)9aaki9YXG{KUBuo9|j?^Yyo>2kFg|2ckAkN{{d5;a+__M|6ZH@zx`D<~}|& zchrQ&V=#AhjiPezCsO)N9(L!*M0xoYrjTsVujkQTob6KyJQKgMSC@Te(9bW8WT;Vt zIr1@aUB|}|s@I$uu#?Oyz{%{AhU{xEuyfGxR5}(xg!rpMeij&k=Mw4RfI_V`{>a1O zFghjN#wtoYHNZ5mh=dY(;$>z<1{P~sUALSE%WY8+H&eLv%uk->o+6bq5W zo?2+tMfpG}uIxd1FwEBhc^lrpQ}yW#Ap&T!dfXLnA`h$H!0)a^HMP$!ON{7M`G6?u zYmiyeJ#7efdWjZam-MLK0VNq?m-|S?-Hm2ri3`;~zZooNdN(iWuEvh>)v7kL(W{{W zKd}#MPI+F>1Q9F_t}#r{;~i}W4jK{uvNc?{S7Z58f z*S8pT*6mhkx-=z!2mA|wo`Dqv?7grMo4vh&@~LvlgW^})_7EqY2w8mBQ`@GsUp>7~rFPR2^^Qt*U9xx1^lx}&+r zxQd!ruqMiboIsKszm%WK83ap+PS@n4>~ld#FRrIc6G=HB5b$tH54;k~Q89{JLLm@bPrCB4t@&s$#AP$2anOoX5{$=G zXQ$^ND;SrV8>4Asz)b94R4_?=#urZ*I5I+RqNnFs2649o%&f*-Y+5d|U2Q*BiynF8cf_(q&mb zdIjm~HbhGa{M>ONueR}q1}hf~9^RB;o#1OOOj0Vi`AYSHWhAJgou!B%OqVG0c?u^h zKhh=K9v8|QzPq_bw%i};%|`p}EXUc+yX}rEtB0jMb%*O)J1iKpUlWB<&bR9wNlcsQ zC)S7l4h#WX_|2iO%V0#_^&u{zOgPI+(4hXSzDnKk3Yo$WOCu1T@z-j4Nr$!O1@EXz zHeNSOufTFu_Z2xAG-KTDujoH{Ca0szraXQVrJ{K=n4L=$`6zEtUi2}z<~*u;20d|#0TofPzC&X43HCuug*L~{vFMMJ3NRSOM8&Q~hNgvtMhUX+ zuN<3;t{bCLQpsQIsqp5|7_V{N`MKUXh5Ld+^)bI|3MX^3Y&$Pqx!DBAGav~zKy1t@ zM0oz(9OOb$NJaP_neUN_99pAuw1lva0WUpv6zS^`9aNZm|FyyloUTxC9x3~irGB5< zN-dhwVGBtcwSH&r6sQD(B7@RpS1vESiljEuy}})eKtuHC3Wvt);CcpuMeQ5N-8(cA z6_9b}Ni}r|8sVbq{L*E4aSN_rE-&hpIIW#Dqm@Clmg3Rq#PqB|Zi_^FDJcvo1Tp-Q zI5U*T#kK60>&Ca(-Lz5pJW!1l*!1XbNx1M(TPl{|n&OIiQ@&PkG!p-Lo|agbr}Op$ z_6-XB*{TI9Ar(7NxQOxE*9|tZOQ(zSM<8i#Q?^CBOMPb|De-f8!|W360fVK3gpsz|d|MW;oRq&bco^>pHU z>${IlNtF?zO5zEtyjDNpcq@|+A25FZ(=PG)5wS;H8dX%A?Lfr8ij@&^ zasktf%Df*=Gb7w{=9Pdt=l3gy(YJgbqkphbXeHpzLB`OJoj~c z<`kc8#df!O689>>hx#0=W>+;Q4P;f@CjvZLt@&1}Tfma4w6Bo{$RD{H6c%%sj`M2t z&pud_W%%$_$~0Y9&!z@l*7aq0q2Icsw5GCxpZVDWycrKt$eikf{p65-Xj~xDiBx*Z z$1Se;93o?M9M-tYqZl4ygWF^7tM4;-rkDMYfxB?b_H>5rx_>3hJQQhk95-V$24`-jwtKOxfrD2>dgLdKrD-5V+C(cj;l46-?HV7Xr^Tq9~)0Z z5i#sKGSos9qvA;TwqHV#cAGA%|znkkRvAZ(UJXEO}cCeG(^&jl-%)Ttt{KT|FQZ z)myWNgm+Nt@*4UEH|5GM;X(V)n`Y1dM!a(K)7=3jRSCN}(Lb_OfHhzUeJ;H9`d+GI*%#^Zv?Lc}Ku&0XmWg?CWGsfl(J*1(P4TmO=g z{b&WdcWivrHjl=PI1V4oBM^Bkf}aQnc$(F&5=4AWObC@@sNXK$Jn}H`|Ax0={6EMq z|6h0;6=_jLRZ(go8D$9u`u{uMhKYrUmXU@2AK!+NnTU;r{(tjrSUH$s073@#;wBbm z=FUW{?EkPe!X{2eCbrH*v<&|-DdB8jZDAx}Yi4coZ{**AlCz18>c5r$uY4N;fFM8! zAOa8rhyx@5G5|S%JU|hk1W*PT0E_@ecGh;b0Aqj&z!YF=;rj1o=i&%31DFHMJ?za* zYylPkD}Xh?24D-Y1K8P`0PF$w2974S)+VOT|J8E*k52{I{}Ywi83P<#?3_)E4Xyuk z`hRx*YsG)|{;TN-Z~{148#tK*oB__}jwU7m7l13k4d4Or1bCV_+Wj{Y&wp}v{yT~1 zA6n=CDKz0={9ouDMxuW^%lvP1{>yLj-$*=6tW50xKS?|>P2lo)<`}fmsLX9bIBx$Q z3Hwq9b93f4uKw+yPDog~{%x{yGXZSSfrZyFjPRt$_CKit4RZy;zRHEJe*5>$Q!V?<}cA~Z-2 zZwM_7bJc$LZ-&dOx&dUY*bVzYhvL^Ap1tg7O*nlY=3>VJnTKh2_P~fu06e_G$cx3 zoD@~rAH}kusqF3Oe*V79zLg0y^P9)N2ZnYKV4ynpOgN;w`xv6 zRnk>I&@ZVkgaK8TKhCVIEa2-LSet$=4Xr?FTI(Rd6N)g>GuJb4Kt^7Td~h)~+5C3j zBQ+zcEhFT15Pm7PaPcTA;8?v3pHaCk;GQ6VHgTQ+~l7R*gm7>Fi@O2YOw>wd{?Ky+69jiRr*?*UZ@sshA3@byz#TMphodn1Z-)=L ze(!durVtISU!SdSxpGr9KPw$_2akRV-*Jl4a7PHY#z#Q(4fTzn?Cb5o+FjZ}H$SoW zgx^1Zze|;e*UoD4RxP!*EYw}HaoVFim3|HxHWcNm*7snPs~Bn(k}&O?CAX2Tz7z+kg)FJD2@*x=%ap!-%;=CfYMaH zMXiBMn}3LQ*rX17krDmZkL-qE^;y3V54;!C1Fd&|e`(!AGMP5|@v8zc-4fo?CcN!l zU)qgLJlXM_5L(8=z7itXkz@S$;{lmY{_rErusyE#qx>tHuw$(B>tmy1{YS0=-~0yc zsjvUQ?Xkgn;1le=VrDwMG5!bCQTri0Z#BgKR(0ymZ)Je|3gW)dYW~?9cvsC>+(ocU z=2*w!()b?SqYZu7opzVHv4)2DF66O$;^++c-oM2dJicl5i26AxcVh$(_|Z7kI=1x_ zYH4lD{h>RoCMDp%?G5~1?Mv_Q@3(7xoz1*ujrkezBk(1f!#9s?V@6~=Mr^2oefQNP zl{_73IoMf6A-2m0H*er}2Be^4MAcBHYNx z+ju^Dvc@W9ZQcxRV~=2>SFoqi+?9*wA1WhmIC?KNCH4b4pLQwL81BHKTtd z-Q^n}RVenz8(|7~Tw2%vxTim<|7TJEyA&c9P#Yu$=M%)hDRNBd8c!3}xu>Cs)=bwH zKP@;3R?oZf({ELj^!P_kO#lNlbr_>-h?+-oe_M6-vUWKtI=;Qq_K08Y#6G&iU(D|M zFFDzlN_%_RtiByR+CCkev|Y(54ruM;x|5v~^k31BSJCg+CR@Q(BlT5pSYQWOuVx8r znFF`7LbenVy!j^rxm2|P7g0))YO~s>p@_lgkDN}=5B~O}bXY19Zvn*(FXpMhN4u>* zLJn-rX?UJc%Uw3)NKl^JO&vn7lZu3DX?TDaU3S?AQ5Qvzqg?K-t#BN^O>$YZamNgO zW}iCN7_R018h=5VD1Gt08Ok(5s-)WEP72HfErv>zbju{p06ZnQ?cNJknn^E4A&S<# zS}$%4YfdE2SpW3paTu0o8(YcwUy<@1{gLteOQyOz7<1*gzuA9}!CuMv4-x;tqh7+t zE}e);5jo#yPwVUyiP#8`@{Kb)(>K~dD=E@Smxv&J=4SR*p(Hpu&;i7C-qGfjXQ1_wlqO4U4hXzGQSDWPcgCk7i^Iv9T8UNocdy@3auw?-~ zUzp{QS^gEHjUBvdIkVcAJ?W~idm^(>_p1%XvRIv~u58wF{DMRqcPi@;0X5kTX%wpB z7;Ru-KW#_FYf)7oPXEx42`#InY1$5za3yQzZYSM0FRs;Who07jsAGTe=irO?451AI zb-iK3ZWQYS$r3R8Y;pS*LdDfQ9!*I+qeY_=9wuD}#c$hf!X^> zO12H!RIUX%c^%6>SS0NOepSu2*0OQ3_gAJK!EjqWp)mJG3~}vC+R^w)h>5g=k8SnN z2YXw9A$OKqhbK~cji-aglZv60J^#{q%nPNi<1$yS9~Cf3cy19^K=#UpAaHSn}>>qxdCP9Kzt zB{Ey$t%~ttyhsIJiCxbz4+dwo=i#FFdj0VP9WC!n*yDeCGXU?*c*{oWb9YENZ|txdvnSt zy6{-&s>^^}aoDkWaAv;}jg1otP2hYkw7QxTUBA9@=i7!Fer(UT5I*LqdIIlxLxJcZ znB;v;DM^1;)Fxy73yxoG#uo2xMC@UpZDPp3?>9r5E?tR-rs z1NB^}(yh5al@Qm>P^9trmD*T1rY*FtYIvo)OA*YRkrqtJv)N;Qg7RJpUKgW<+FR5p z|4!VFw*6kC zw`Ac>BExqeIj4a!00vM_^FjkXBG?^h`&utmYW7dzo9+)`sfdVr4}GSt2?8wV#1ddC zcZ}ATzett~9^i;8?kxchoqXqA_mU~cQ?rt4HXTC_w{);JSOK^ATq9|qFswcZ3frxT zMoU56jME-`G|EtJ7CMaWaFOkqQknlGaqSlOeBh-4SRF|Au)}E9)S9AGY}XsTsCjSC;+ zO%5w%k6$FyxuC~@TQaHIT-5|ArDW~BQxCn=T_^iOG2awlIi}@@hMri(gSdr7bOF^f zhOQ78#cKxX#|rvo58`_y>NQw2i-kMXuez1HI%2~tL}$4jGG^r1ZA=o}QQ1Im{J_;~ z7+$`~tWkKrrQZ!mR&^o$+L3?1UbW7}Yc$i~gjNN5AuX_7*9^88E$g}5x~O}O7>`KN z;&z9$1I2c}XAwe>_C0&W%D}eFcv0TOzbi6Fxu?}86sm{vaIqqX<$1M}h;_rRASgi_ zo$DPEJvdl!#OZWI;X9NN7N$-%MX@0-+%exk)Ea2QNH4bJPO$N6Y0TdE!@k;7&1j+7p6n*kW<7Tv@`^> z=&~2GP{KTl30l?jdp0%JDA_CMvw85nS;15_YTjttI5=JXl$`FBfeWrMFM&Qwp}S&h zk3KMKDIB*K%DF>js^k{Z!SLuW7RsrxOEr1R_xLnQv-q=eue+C3=E zj}Ds?T6S6YD+FD7OL+2%TPBB?ivPkzn;Db5?cHWYo=nFg^w!sJtWnv`>56FS?iI zLY{v?x?O2-DknLvYO&U)XRNN3W<2>Tt=p(zU+8j&6EOSBFft=pGM~oY{*tB>W8khD ziIM%$-c0?OIh>Gb8Pd$!A)q2d5J$`Q9>PzRee#!iRpd{OI?yl52RTmLw~GgEd3_&S zTNGGON`HkAu5kFUn?nqFU;Pb zXY2=^ON$u@kk~bn2(#&l2znyYmM57k?lLaOH&=>i77^Tug<$sEQ)E9Obcc>A*og#l zZ5~zfv0wwC`#Jlb5D(PIY_QOUFtR@CAp0DfDPV}z{x;g56_`?&o!bS>H$0915cH0$` zSl5yUcGqBlYWQ_x}HK~z8tFOHa=avpR zSgK9RLA_Vr=$;d15=RE3zhVzK&5X0#fN^hE86x5_=-D)j#%_3%XgaMouHDIeW@B>r zh5nV9Hppa7Z==4K-?k{D>D(EJ$z|xj#I^!Dyi1>l;|@KEHIz+T<$d2r4$`vqvHZU0 zH8&`^s1e|)bk5`q^Pd|;?LA&As<$6m5*ZlOXk0 zur9M4v3*cnF7$xp%uHG6Pyed{lXJ$VWGl0m4ezK78`}`iEkv(dGa_^PBv=aiMp96$ z;R+9sh7ZBW!VGPbwTM;EWmF3aC{%ZC0C~b>N{#!D?!$sEFSz(<1NjIX@u*F;P zW7?N*ix!RM`Ef||@zAt(rd1|HYEVN>B%~es{CIp6+RVk5EXzbRzTb!v%&Wj!sf{n= zfWK$zNTB$CHl2|W=1@YL+LJY?^wb^aD?@ojrv)e&^d{5f_UGKR`Lg`z zS6=BU-4-DhXV#(Q_$EO^y?b@xaY4l`ai(A0u~axd&ndiA6GQkIB`h&|AzyFQ9AC*^ zN(2#q#H`!CqG*qh7O5D~PD71BN*!j%rqC67D8+T$qeaB>qF+Cf3j|ojQ7oOlxsgTq zsi&r}e#aT^Js1^^#}NdeH5&=_$#x90yf=cw*2+78VnbgT%$Mtu*>?#(<2H1lzQ?Ck zi7G8^Rb8Nupxov$+<*pZX2w*~hNu-UZ$n2F4vKIURB#QUVKvb{l;No6{yleS&z&c9 z2Zqz?I0|Q=dSig0VQH7LL8to>*0H(t4Uh@k5^CiL4Z0;oY?!7{bWqd&e7AB}Ie?#J z#%9l+qcqai>9RzWtTTImpubPLzFe#d0HQQPrWS!O6+Dm=ady@a&Bx4Y7hY$AT9IeE zmxklmVX9zW$2!%&*X$GS9Zr3+D{;0lJdJ-OOJ1u~%y>2>j@&`D+@P}{r<#)iPOdro zC>aRFh-A&;%;TNISwT>ckoDPX^00+!LcD%2caEF8d@ww`Q^yiQ(6kjfZwZ->=l$~w z(KLzP*>a{J!66N$F#%Nj?&IsOT8NdE`ZQ7O1Q`s+belK92H<;F-~#1iM8Eo+wE{00 zZ^{I^SgV66B}Tv8c97@Y0wlMNH; zhR!$h!X(X!8ijUzrxeX2!+($6;PtFT7{osvZ0m$Eq;`3??KH3JV2K|)G;oS}ycAb_ z^Fp*tcp}j7ko)+)r}kL=mxTs`w9o~9)ddG$u1YAp;$9Dh1GYk{EZKc)hdNYYU{UJ6 zU6fc9E(u(KZT3%g>bosD7H0e5t(-ZjA45f}P){X3A&{tEc5Z57I=hWJ2Mog_^645P z>Pw1o-OZCQFol=}j1?^ehJc*N+AeS)8iggIOf5$Ypb|ZV&~t!P@^%3MDji#yxMju+w+oB9aj=F}U=}-ZMMnhgx8SFqpbM0- z1R;M7N*;0VpG|CZDtRll0X&%^)2E62knDx6p3?1Cw{jYSX&Cq9YJ`@=l@D3^?xw@} zGbR>lV-9QjT+Q0@O8#d|S&M#Q*A9yi^EI0aB2?zF6*C3a)brwy<|T@HGdwHb8`I3QsXC0Xm{o%#PR=q%O$P6c}DnT&jfm z{&ZOOElLPZ7&%dX)`Xp=@qd>%hfZ&AswQJ9s z0{aMVwuAomo)q%s|9bbD$ZmpqTjIV8yf@*jz8Uq2(V9g;j@*@4bGQ-b88j?C|8!Lj zGPM&i#y%29u(oao!;nCyqRV$;rrPuXD1Vtphk!!BCCkHvengN{U;v6mpp&Y(!(=>K z&7LgT)s2K#%$H}jT+e0s=~-q&U6ZDjV}pZ!jGQg8U5m1JJ?FA4E%tIqB3g+Wgo8v% zUyA>v$%cUdW=&xxQa|exWHaT-h>J`q{q!E}$9-Ze`r@aKx~&xgEp$ifUSTqWD41jR zf(hR_OA8alK_u<7Y_3M+LOvh|0HMQE!s^i7D;3_?Z+s7nTOQg(3Ve~rVT9~TJ7wv1sY&?^N`u__%qVG)@M<>%;HvSE*UA%2hvSCQvpb-%2gr6<{_(7Ma7c=BSr^gajI~%f} z>~~PJvK?vbrB4cZXpl1iH2?BY<4WQ)^{1>0bCWgW(FVff`!NmO_1P{0o|1vDXCX<> zN>YAihP^nh^DLlAaVsO~FF^`icF?&coS3l?@9UAJZ;gMp3(-aGvQSxnR|04kkV=x3RjkN9&w_~YNPOt_Jbg=I8b%6czgR_b@J&^&WOO!>FI7Wk26XyeCa zb@G-Vp@4>im9{;)ejwY=T7iTXLG^2Zo990aqO?kw7u#kBXiFehf8~afWiGM|ySxzh02s}yeTe+e0Gtk}kXZ|Jx znOB4!5s$TQL0%)J{y{i&;xS6twH*vxTR0qs8l13N$aU)K$fa2NvF>m~IpMf%m>YpR zvG*VGS_N*V+xE;$;10x-%PB@N4i2mxZ%y4kGfFFn>(90>1*3WSxfK6avB&8vU^Z>bM!8FQ%&Ne zv9`JATbUY8xVik52e@RPB^S-j>wK1@8thEe;8RX?f z=6&_KB}hd*BL?iz=&|gDUcX~YE=j?)tMO~%tzmTwBXI&2UFv%;GCisukVK1$rr`%3 zqo(o&+70dMhP3a%`&k?w&n{x8Gp8;X&G*^U$?eWU8))H_gI>00HK( zl;MGGnv_dn`zM3Wi{pY>AqqZvZ-y87besT9v>w%Dh}}5kuvJkDTWN52vMRV)}zOb9KgP z=OhHq7=67CgXub&B#+3YeS|cH!;UC^zz1=&2CDxfc41~^Kcvwt8G=}z&E?#WSmy_D)#Ta(LJq+`P2)NntZmc{T1TRb*Ifq6>hRefv|A z5T*DIrs+RobVhju5<;hm=`#$3HMMIP-zQ0WbZQQ2z0mFE+m?~M;l!c@?tFLR##Ppf zl@E1vKDypyO8%zQ=?5(>)%QWB-}SXQA}FYW^-=aIPcOKp%-C5Z`kF;(R1S08z#LEE zjF$F<<_4BZp73!2vksNm>@NT|cMO(L~w$EX}w|Eqds$OS9tuxm~El8;e%A)C8NsYMDLc6xN)i_JXbfqoVEUAo5W| zv@Z`ZU#V%>VY}_rsyp64{+?%oDIqDLLdn5R1%YJC;9(@ zprl^%41-Kqq1}N;oR7VvX;-*Vtk~Vg{f{c%7yS3!Dgx96`C1aS9bovD%xWSw+*y!+ zb!-;l;rsNf>4TVq0kC^jV^ykyz@Nj=0($R)M?woMCkRw8)=z-77OKSSRr;EkHsqLB z@A#dCe$9z;V041~2kL%mgFOrKCOT3m>vs(Bhyecf$Rb(CN~&qc2$fTZfZ4(&TM8Ir zHS6rtZHsC%4vD3Jj2e>ol}6oJ_?J#~Wgk9Ob0Ws{`Ll$t0 zTN-jP;gS@ugI}jAufBg&k^mL)Q-kdTy3oe=RQUycNSw4Y;pT|62_K9= zZBn)`-n$rDEoG369IdOT8EKyH?nQALx)&(!^zzTN@RZ2=fDez#pa^Jw-SlxfxfNtM+B4ZxMq zb01_2MYKQkv&S)9s=t%v+DE6fL&4T;y%URR@x^u-q|A7a_m~PA2R^yK4YXfo830|; z0~ySGA}}COo)k42fvUk@NksCqttRdX2&i8&!p)KS^@J?mF|in4Cj5xrh#L@ZZ+eTrW; z%B5|^xZ~(x)@%@Sh`YWl1HXwR+>R%p_Du-wt3^le4I6R(6}*ISz}dNl^T~9abY<|~ z7!Nvcps3&1iIPas=F8x6R zKv=TGu8di?Sa)Y|Ur^=j%8*#D=k=>TCCZ0}bH)4h()8+7x!zVLI*SPX>DwV^%D{4F z$0A4ovjyVPnuC>>|Mu2>ly5G@xWg&@rJsxQQDAX)kmVLzuL#4SQ6O0LvVh#hddpr~ zSmy~27?-*#RiS;bxl#ec$+r*BB)4Mi8id{)+}|XU_t==DAg-ChI+wbE_8EIvJvV*m3*kadfN( z18F@h;R9X#!cv(jUJ`%!z%~LnIAQ>q)I^YG*{r#kf}H~5@o}V<5mMCY|LE*mz-r3+ zw;`fZh9W8sqgNafF(6}>i z*>4$V)Lv`eTwL|0l18U(SBE*eqP- z_06UT9bAR^42I zHMEb`zh-dk{h=3%PD4hdDEv^p`}=i*kEOkpOT7-3P8l>u^LhA>-Yx5FE@Nujrpy`o z^Z9HKr?*}6|F-z!$DLg{Id|98PV;+qZQa_`+vCd)#oqJzqkht}TRN}K?rWaEYjez4 z^Ln`prKPod+zPV%;w(=-331ap;L&{f*LmZR;-1S9yP{97BhrQ+kt^C|*-!=<~B>T|vj)l@+w6mSXce9~moDC*n8dl6Cj*3LjmP z*(muJ4LwE8qR7Cx#qWvd;j?XVxjp6URs~jHSs&7LwB^mnIAQwq6VKmGaNO`P zDfFtfT+W1xhnCum;XBPLF*iTuHmt*cK|GO?#XlI-msxZgx)($jYHc4m{S?iRzHGTO*gVWWE zCdV1ZmQ?mVdX}T4@F-Q&|7~uieA=o5 zETdZ&pUpXazj{|#K$2`rtqFvgvTeAvRMdhF!O+yEgg3dy&C|bA}mf zf2v)c=SmVE<#q&Gp(8q0(0ZaSrz;M1`!1;^R@P5!ELduqr!$^}UiIelVgg00 z631@&d2iwKi)zoFI&^p!Er`@Vpxa(o>d;)~yXXBQuZ<&IgWE>l++X-MUv%a3Nfnp+ zJ!2m1mQhQ}>N#Vv>Q2O4o9}G3mQ)sO%+dEa+OC%$IZrwDQlxImuq2H$sT-8i zhSuD?c@FkBPw6(S6be!mXY~QYan^)viT(SLi@9D&bbwNawuWB%n zmYwqCYJNt`%GAVd72C?qL+p*ze7bCB>P6%?BKmquSiF=)=_!`N4(<)An~~uQ&J1)7sW>&FyJgf>m!_^=X9}dlV~bV!B@K?>3K) zb-0vlulp>&Lg~#PrX`lK>8DobMdW&3j4&$II9qqdY-p&JS6fxA-r=HH;iKhw8;cKS zQz~&!_g?)m&*%D^rtf~q*FCqm%=P>I2in6Fce%b1n*4P5W=et22^ zLw?`7k^Y8RT4Tx;>MV3dislA%T5GrN&YDoYZ|x5~t4`LWsM~4r>!XnC`ZE>@&u5w( z?u%5mA5}8N?ELJpuKa){=yCJmTXZgk`cnQT50<@MiFtn_AE-(iWIS5_`-wy5j~TA3{wi^E;5C9uCJzIj$J)kgtFno0 zUGes4ZT4{O1xN5^g*2Y-%lqT42dAK&y7<)Bje5>9Skt55Thx>jbk2k&YwFZiKHhh7 zRh;_*O|Qj!Z|o`2j#<3IaqR8|V|E+GnlG@%lfFwLE=l z`Y3En#qSN*SKS#Ak$iNrq2NGu;Yuqbhl+d0EA=ik>K}6OdgJW2G>&)Sshs}}cfqb= z)MQX}Tar!Cc#|P|_x@CQ|DAg3B= zuVf!HBmPs{j=3jyJ&DiJuwA>st8Jl*ZQR&Ob+0i_zd!Aw3K|qoot{Qi1)aJ20-qe- z{+HUVopH_47gu;#R2<5_`n0OrtT9(`Z_TZM!B-QMH*f6-zhmK8ykBR-h*+(n3p@`a zwRtzbSKqeNY+r%s#plyy;rE~1ygGl^bIT07SHF5!>OS6)B>!~j;pqCX!P(W(7rG4*H;b*R&*H0#FJvioXB={O8FzGZ&)=_< z)5Z$iu6K*BB<3E?+E`X!b>?i)=)n-gP=(~mqfJR#Gz*P07 zE+|^w`>L&Wl;_howH+ff8+Url36xb-sm*zichu}r_{r~LqwlH&2p=7rH#S;**{7_` z&`oLQedFa{t6TXzS9kL>{cciHkj8d9t(EsoUl_%7`rSzXX~OuZGRu3;&o|~coV&V1 zqu1A6sn0t>f7%mrQO=H8ozbgJ0zN;VQl6umu{fmYY>G4gmdxjIJ-4Uz{J3b%-Zj3t zgYIpyE@hsEhoTyZH&wj<6|Cf4f0hpRou zgys13cpiy<7~5j=+%-aQXywh_GgF6MQmr#Sen7j%aYoAL%eQgZW~ zv4b?D7kb1e{9IvDh;8nDR3jL9z%uGs^zfV;O>qh{Y_!i7zAO(dXt-JM#3%OPYTpu1 zZ8Eq1Kzr{{&CL9}?+iyPci(F`6Iw;pt|H7XIX%DlTgw+v2 zkx4Bv!@ArXen`2J{Q7odNq&;*$TOeHvI`b#WE#s_Z!PTgRI7_iUu~06H@P9f3R@<; zklxuorO>>}UnuW3?tFQE`^gOx6ouznW@}i4w-#x5hRsv>G@U>5`u!=#(GA{9QijNv zx&IY#(f?$hUFO?Y#I{i-mjy?b*i6h_KRj`AUs|hE=m~%8d24TY)Y(Ux1)VZKZj6<- z7HpeUGRAU#x%!dK$t!KtYkD>gy12eXslVfNIP3V+ZRZDzQ@)tEU>=loB{>2PqG zj?d>2e2Pa3NY-IG6qPzm$6S6rOow6M_qMYS(}A;k|2awrek=Vy{Hl0k@zFVNU7!Ew z!8yqpIqvDVur)#81YCHauP7vRX;6qraukkp5RN(a#y$v#_J1xBEF|0~EHYTc(`Bp+ zR&C@RDl!WKX9#tTg*FR~7;_pe6q^%(j7dWLg2RGBcqqlV#u1!a^a}|MGhX2hAm-QG zdw;zES8jg3VJkv;;CJ1_bkKhN`fqeBtWAxDLJ1x4XojN{9dZD42#5|fU^b>MZuT}d zVm3en95OUah9uawK}nWv1P~dFePr>Q=Ksw$h7Q(36L-MIv|m@z2uuek_^YRAuz)X) zA{a}sb%Qf23G(sh>FdjhCBhRg_TR{uT3I{0x`@e8T+`5u5T#^8OOXK=U&$~cVUt1o z&j$ZS#?s8%#?=Clv6URLg;YaxL`*OzL%)d_M8p?5q=dPF0Z$a@3rr%14_w5~Hm;_2 zOiTef{fL<6h?qI7%c8@!4jfZBBcy@3N@(R`>1-;d1M~^2nC7S$MSw@Y(P6H>SO=U@ zmUb4#00X1rZf9+5Zz87Ck8%VY6%#%uwi$S`aWu3s zv2qoY;p!JdIQk{QD3)bdxrTxz!ykAwSvp#n+ZZuyxUr2P9QoqFF<;3L>_j7R=(oH_ z4%|&{mX0RIOu2Lfl@AIf4B^NZX9qTO@kKG>94A#01|CZm_GUsuCYBuga}r0re70Rk zmXAnSFwCt3Q?HG?yP4ZUh6*>sUR*O!BCEN z`OGI1z6KJT3n}6KO)nUuwSgJNT4-UmzyXkP684j0FmX34)kLs!FN(0*D*|Ri4_q;( z3mq(-8O1mW`w1m+S0Y6QXJ=pL;)|Qa-4t8C;ty5~%rx#6ZjK8WKRF5e(J#u;?>}3H zF$9|oK5zj$x;wkLODxlmf>DlwrOB{L0Rfi+vEl}189+v8B_Y#~gvI@cl$$U%8|LDR zn@EWfzbP0Wc=m6Z&y%p_8ypV;LS12hns_?b}Sex@ripW zws25xL2&S1E(!%(>Y#A2l?37Fz$q2(3vwWfB5EA4YzEl*#n{Ml8?JQcz3-(2fR79rhlsqH_a4&${N>UwDA2?^OvIaRG6zF|eFX>~5fBJU&PJ$d2r>X?NG1o(Id1~QbKSNMhUz<&~IvnAAcm=3MOCxFbR ze<3-86(ws!M9bt5ux?ro`TB=P5(EgSWxW4jD9sp?`NIqRictsIjUgC8acqSV zB(uem9tT{+xtAt6w!&zFsms#$5(18o_!ysQ3#7*Jfe~OGU^E5CIl?Chcx?c~nb%Ly z^9T+<5Ye2q@o5lT@Vx{D^8?-$Ft29Va{wJs;6r;-7=oiDoWlS{aK`Zk2nBP-aqvj^ zc{s_uOJvUro=3qtKyZp{7o6hS1;=Tov5#pmAVj%xfa4dkKus z8HWSya_%L7hv9n(l;VuTNKU*_2+fDrLC`oyYXr^bXq+H$roUrz2C+pl?HwCKND$_* zT}TW#9U4c_Adn!8#6bXaFdBj5hy+!aGcU#UFG-PbjY3EQloe{F!fCHWwUNn@aU!8r2*rNQ|Wtc`|al`jCxg`Nj6 zPMroA0mlr$Xl9!##SgH9;|&LS1MbZLXRr|IdjSTTI4;J#AY#wKjH4i1F<3v(1I;q$ zUK(BpPND>C1Ax(R4~&zbe}Q}nFr0Z2BFzs2MF7S?2tvBTNgU()66fS+Fpd*5U=#-L zD*z^d_avaIf~EoHLZNV;1jP-5>$RV3Dn@Tt*0!#qkOCSOP9KXQf7+ga^A_03rXjNQ4NhFC;{vv5DI)aj{^)eXVAR@oaT%JT{f&g&31ohXXdBUY#)KPg!|rt*$Tnq024UQDL$xWkbfzVn&7+vFp7hb zpm~IH6Gfp2+@Asrh4su}?AjO>;_Vk83X#*-=jl56trLk~^5{AS1u?HzK}}}. + +Abstract + + This specification defines a lossless compressed data format. The + data can be produced or consumed, even for an arbitrarily long + sequentially presented input data stream, using only an a priori + bounded amount of intermediate storage. The format presently uses + the DEFLATE compression method but can be easily extended to use + other compression methods. It can be implemented readily in a manner + not covered by patents. This specification also defines the ADLER-32 + checksum (an extension and improvement of the Fletcher checksum), + used for detection of data corruption, and provides an algorithm for + computing it. + + + + +Deutsch & Gailly Informational [Page 1] + +RFC 1950 ZLIB Compressed Data Format Specification May 1996 + + +Table of Contents + + 1. Introduction ................................................... 2 + 1.1. Purpose ................................................... 2 + 1.2. Intended audience ......................................... 3 + 1.3. Scope ..................................................... 3 + 1.4. Compliance ................................................ 3 + 1.5. Definitions of terms and conventions used ................ 3 + 1.6. Changes from previous versions ............................ 3 + 2. Detailed specification ......................................... 3 + 2.1. Overall conventions ....................................... 3 + 2.2. Data format ............................................... 4 + 2.3. Compliance ................................................ 7 + 3. References ..................................................... 7 + 4. Source code .................................................... 8 + 5. Security Considerations ........................................ 8 + 6. Acknowledgements ............................................... 8 + 7. Authors' Addresses ............................................. 8 + 8. Appendix: Rationale ............................................ 9 + 9. Appendix: Sample code ..........................................10 + +1. Introduction + + 1.1. Purpose + + The purpose of this specification is to define a lossless + compressed data format that: + + * Is independent of CPU type, operating system, file system, + and character set, and hence can be used for interchange; + + * Can be produced or consumed, even for an arbitrarily long + sequentially presented input data stream, using only an a + priori bounded amount of intermediate storage, and hence can + be used in data communications or similar structures such as + Unix filters; + + * Can use a number of different compression methods; + + * Can be implemented readily in a manner not covered by + patents, and hence can be practiced freely. + + The data format defined by this specification does not attempt to + allow random access to compressed data. + + + + + + + +Deutsch & Gailly Informational [Page 2] + +RFC 1950 ZLIB Compressed Data Format Specification May 1996 + + + 1.2. Intended audience + + This specification is intended for use by implementors of software + to compress data into zlib format and/or decompress data from zlib + format. + + The text of the specification assumes a basic background in + programming at the level of bits and other primitive data + representations. + + 1.3. Scope + + The specification specifies a compressed data format that can be + used for in-memory compression of a sequence of arbitrary bytes. + + 1.4. Compliance + + Unless otherwise indicated below, a compliant decompressor must be + able to accept and decompress any data set that conforms to all + the specifications presented here; a compliant compressor must + produce data sets that conform to all the specifications presented + here. + + 1.5. Definitions of terms and conventions used + + byte: 8 bits stored or transmitted as a unit (same as an octet). + (For this specification, a byte is exactly 8 bits, even on + machines which store a character on a number of bits different + from 8.) See below, for the numbering of bits within a byte. + + 1.6. Changes from previous versions + + Version 3.1 was the first public release of this specification. + In version 3.2, some terminology was changed and the Adler-32 + sample code was rewritten for clarity. In version 3.3, the + support for a preset dictionary was introduced, and the + specification was converted to RFC style. + +2. Detailed specification + + 2.1. Overall conventions + + In the diagrams below, a box like this: + + +---+ + | | <-- the vertical bars might be missing + +---+ + + + + +Deutsch & Gailly Informational [Page 3] + +RFC 1950 ZLIB Compressed Data Format Specification May 1996 + + + represents one byte; a box like this: + + +==============+ + | | + +==============+ + + represents a variable number of bytes. + + Bytes stored within a computer do not have a "bit order", since + they are always treated as a unit. However, a byte considered as + an integer between 0 and 255 does have a most- and least- + significant bit, and since we write numbers with the most- + significant digit on the left, we also write bytes with the most- + significant bit on the left. In the diagrams below, we number the + bits of a byte so that bit 0 is the least-significant bit, i.e., + the bits are numbered: + + +--------+ + |76543210| + +--------+ + + Within a computer, a number may occupy multiple bytes. All + multi-byte numbers in the format described here are stored with + the MOST-significant byte first (at the lower memory address). + For example, the decimal number 520 is stored as: + + 0 1 + +--------+--------+ + |00000010|00001000| + +--------+--------+ + ^ ^ + | | + | + less significant byte = 8 + + more significant byte = 2 x 256 + + 2.2. Data format + + A zlib stream has the following structure: + + 0 1 + +---+---+ + |CMF|FLG| (more-->) + +---+---+ + + + + + + + + +Deutsch & Gailly Informational [Page 4] + +RFC 1950 ZLIB Compressed Data Format Specification May 1996 + + + (if FLG.FDICT set) + + 0 1 2 3 + +---+---+---+---+ + | DICTID | (more-->) + +---+---+---+---+ + + +=====================+---+---+---+---+ + |...compressed data...| ADLER32 | + +=====================+---+---+---+---+ + + Any data which may appear after ADLER32 are not part of the zlib + stream. + + CMF (Compression Method and flags) + This byte is divided into a 4-bit compression method and a 4- + bit information field depending on the compression method. + + bits 0 to 3 CM Compression method + bits 4 to 7 CINFO Compression info + + CM (Compression method) + This identifies the compression method used in the file. CM = 8 + denotes the "deflate" compression method with a window size up + to 32K. This is the method used by gzip and PNG (see + references [1] and [2] in Chapter 3, below, for the reference + documents). CM = 15 is reserved. It might be used in a future + version of this specification to indicate the presence of an + extra field before the compressed data. + + CINFO (Compression info) + For CM = 8, CINFO is the base-2 logarithm of the LZ77 window + size, minus eight (CINFO=7 indicates a 32K window size). Values + of CINFO above 7 are not allowed in this version of the + specification. CINFO is not defined in this specification for + CM not equal to 8. + + FLG (FLaGs) + This flag byte is divided as follows: + + bits 0 to 4 FCHECK (check bits for CMF and FLG) + bit 5 FDICT (preset dictionary) + bits 6 to 7 FLEVEL (compression level) + + The FCHECK value must be such that CMF and FLG, when viewed as + a 16-bit unsigned integer stored in MSB order (CMF*256 + FLG), + is a multiple of 31. + + + + +Deutsch & Gailly Informational [Page 5] + +RFC 1950 ZLIB Compressed Data Format Specification May 1996 + + + FDICT (Preset dictionary) + If FDICT is set, a DICT dictionary identifier is present + immediately after the FLG byte. The dictionary is a sequence of + bytes which are initially fed to the compressor without + producing any compressed output. DICT is the Adler-32 checksum + of this sequence of bytes (see the definition of ADLER32 + below). The decompressor can use this identifier to determine + which dictionary has been used by the compressor. + + FLEVEL (Compression level) + These flags are available for use by specific compression + methods. The "deflate" method (CM = 8) sets these flags as + follows: + + 0 - compressor used fastest algorithm + 1 - compressor used fast algorithm + 2 - compressor used default algorithm + 3 - compressor used maximum compression, slowest algorithm + + The information in FLEVEL is not needed for decompression; it + is there to indicate if recompression might be worthwhile. + + compressed data + For compression method 8, the compressed data is stored in the + deflate compressed data format as described in the document + "DEFLATE Compressed Data Format Specification" by L. Peter + Deutsch. (See reference [3] in Chapter 3, below) + + Other compressed data formats are not specified in this version + of the zlib specification. + + ADLER32 (Adler-32 checksum) + This contains a checksum value of the uncompressed data + (excluding any dictionary data) computed according to Adler-32 + algorithm. This algorithm is a 32-bit extension and improvement + of the Fletcher algorithm, used in the ITU-T X.224 / ISO 8073 + standard. See references [4] and [5] in Chapter 3, below) + + Adler-32 is composed of two sums accumulated per byte: s1 is + the sum of all bytes, s2 is the sum of all s1 values. Both sums + are done modulo 65521. s1 is initialized to 1, s2 to zero. The + Adler-32 checksum is stored as s2*65536 + s1 in most- + significant-byte first (network) order. + + + + + + + + +Deutsch & Gailly Informational [Page 6] + +RFC 1950 ZLIB Compressed Data Format Specification May 1996 + + + 2.3. Compliance + + A compliant compressor must produce streams with correct CMF, FLG + and ADLER32, but need not support preset dictionaries. When the + zlib data format is used as part of another standard data format, + the compressor may use only preset dictionaries that are specified + by this other data format. If this other format does not use the + preset dictionary feature, the compressor must not set the FDICT + flag. + + A compliant decompressor must check CMF, FLG, and ADLER32, and + provide an error indication if any of these have incorrect values. + A compliant decompressor must give an error indication if CM is + not one of the values defined in this specification (only the + value 8 is permitted in this version), since another value could + indicate the presence of new features that would cause subsequent + data to be interpreted incorrectly. A compliant decompressor must + give an error indication if FDICT is set and DICTID is not the + identifier of a known preset dictionary. A decompressor may + ignore FLEVEL and still be compliant. When the zlib data format + is being used as a part of another standard format, a compliant + decompressor must support all the preset dictionaries specified by + the other format. When the other format does not use the preset + dictionary feature, a compliant decompressor must reject any + stream in which the FDICT flag is set. + +3. References + + [1] Deutsch, L.P.,"GZIP Compressed Data Format Specification", + available in ftp://ftp.uu.net/pub/archiving/zip/doc/ + + [2] Thomas Boutell, "PNG (Portable Network Graphics) specification", + available in ftp://ftp.uu.net/graphics/png/documents/ + + [3] Deutsch, L.P.,"DEFLATE Compressed Data Format Specification", + available in ftp://ftp.uu.net/pub/archiving/zip/doc/ + + [4] Fletcher, J. G., "An Arithmetic Checksum for Serial + Transmissions," IEEE Transactions on Communications, Vol. COM-30, + No. 1, January 1982, pp. 247-252. + + [5] ITU-T Recommendation X.224, Annex D, "Checksum Algorithms," + November, 1993, pp. 144, 145. (Available from + gopher://info.itu.ch). ITU-T X.244 is also the same as ISO 8073. + + + + + + + +Deutsch & Gailly Informational [Page 7] + +RFC 1950 ZLIB Compressed Data Format Specification May 1996 + + +4. Source code + + Source code for a C language implementation of a "zlib" compliant + library is available at ftp://ftp.uu.net/pub/archiving/zip/zlib/. + +5. Security Considerations + + A decoder that fails to check the ADLER32 checksum value may be + subject to undetected data corruption. + +6. Acknowledgements + + Trademarks cited in this document are the property of their + respective owners. + + Jean-Loup Gailly and Mark Adler designed the zlib format and wrote + the related software described in this specification. Glenn + Randers-Pehrson converted this document to RFC and HTML format. + +7. Authors' Addresses + + L. Peter Deutsch + Aladdin Enterprises + 203 Santa Margarita Ave. + Menlo Park, CA 94025 + + Phone: (415) 322-0103 (AM only) + FAX: (415) 322-1734 + EMail: + + + Jean-Loup Gailly + + EMail: + + Questions about the technical content of this specification can be + sent by email to + + Jean-Loup Gailly and + Mark Adler + + Editorial comments on this specification can be sent by email to + + L. Peter Deutsch and + Glenn Randers-Pehrson + + + + + + +Deutsch & Gailly Informational [Page 8] + +RFC 1950 ZLIB Compressed Data Format Specification May 1996 + + +8. Appendix: Rationale + + 8.1. Preset dictionaries + + A preset dictionary is specially useful to compress short input + sequences. The compressor can take advantage of the dictionary + context to encode the input in a more compact manner. The + decompressor can be initialized with the appropriate context by + virtually decompressing a compressed version of the dictionary + without producing any output. However for certain compression + algorithms such as the deflate algorithm this operation can be + achieved without actually performing any decompression. + + The compressor and the decompressor must use exactly the same + dictionary. The dictionary may be fixed or may be chosen among a + certain number of predefined dictionaries, according to the kind + of input data. The decompressor can determine which dictionary has + been chosen by the compressor by checking the dictionary + identifier. This document does not specify the contents of + predefined dictionaries, since the optimal dictionaries are + application specific. Standard data formats using this feature of + the zlib specification must precisely define the allowed + dictionaries. + + 8.2. The Adler-32 algorithm + + The Adler-32 algorithm is much faster than the CRC32 algorithm yet + still provides an extremely low probability of undetected errors. + + The modulo on unsigned long accumulators can be delayed for 5552 + bytes, so the modulo operation time is negligible. If the bytes + are a, b, c, the second sum is 3a + 2b + c + 3, and so is position + and order sensitive, unlike the first sum, which is just a + checksum. That 65521 is prime is important to avoid a possible + large class of two-byte errors that leave the check unchanged. + (The Fletcher checksum uses 255, which is not prime and which also + makes the Fletcher check insensitive to single byte changes 0 <-> + 255.) + + The sum s1 is initialized to 1 instead of zero to make the length + of the sequence part of s2, so that the length does not have to be + checked separately. (Any sequence of zeroes has a Fletcher + checksum of zero.) + + + + + + + + +Deutsch & Gailly Informational [Page 9] + +RFC 1950 ZLIB Compressed Data Format Specification May 1996 + + +9. Appendix: Sample code + + The following C code computes the Adler-32 checksum of a data buffer. + It is written for clarity, not for speed. The sample code is in the + ANSI C programming language. Non C users may find it easier to read + with these hints: + + & Bitwise AND operator. + >> Bitwise right shift operator. When applied to an + unsigned quantity, as here, right shift inserts zero bit(s) + at the left. + << Bitwise left shift operator. Left shift inserts zero + bit(s) at the right. + ++ "n++" increments the variable n. + % modulo operator: a % b is the remainder of a divided by b. + + #define BASE 65521 /* largest prime smaller than 65536 */ + + /* + Update a running Adler-32 checksum with the bytes buf[0..len-1] + and return the updated checksum. The Adler-32 checksum should be + initialized to 1. + + Usage example: + + unsigned long adler = 1L; + + while (read_buffer(buffer, length) != EOF) { + adler = update_adler32(adler, buffer, length); + } + if (adler != original_adler) error(); + */ + unsigned long update_adler32(unsigned long adler, + unsigned char *buf, int len) + { + unsigned long s1 = adler & 0xffff; + unsigned long s2 = (adler >> 16) & 0xffff; + int n; + + for (n = 0; n < len; n++) { + s1 = (s1 + buf[n]) % BASE; + s2 = (s2 + s1) % BASE; + } + return (s2 << 16) + s1; + } + + /* Return the adler32 of the bytes buf[0..len-1] */ + + + + +Deutsch & Gailly Informational [Page 10] + +RFC 1950 ZLIB Compressed Data Format Specification May 1996 + + + unsigned long adler32(unsigned char *buf, int len) + { + return update_adler32(1L, buf, len); + } + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Deutsch & Gailly Informational [Page 11] + diff --git a/thirdparty/zlib-1.3.1/doc/rfc1951.txt b/thirdparty/zlib-1.3.1/doc/rfc1951.txt new file mode 100644 index 0000000..403c8c7 --- /dev/null +++ b/thirdparty/zlib-1.3.1/doc/rfc1951.txt @@ -0,0 +1,955 @@ + + + + + + +Network Working Group P. Deutsch +Request for Comments: 1951 Aladdin Enterprises +Category: Informational May 1996 + + + DEFLATE Compressed Data Format Specification version 1.3 + +Status of This Memo + + This memo provides information for the Internet community. This memo + does not specify an Internet standard of any kind. Distribution of + this memo is unlimited. + +IESG Note: + + The IESG takes no position on the validity of any Intellectual + Property Rights statements contained in this document. + +Notices + + Copyright (c) 1996 L. Peter Deutsch + + Permission is granted to copy and distribute this document for any + purpose and without charge, including translations into other + languages and incorporation into compilations, provided that the + copyright notice and this notice are preserved, and that any + substantive changes or deletions from the original are clearly + marked. + + A pointer to the latest version of this and related documentation in + HTML format can be found at the URL + . + +Abstract + + This specification defines a lossless compressed data format that + compresses data using a combination of the LZ77 algorithm and Huffman + coding, with efficiency comparable to the best currently available + general-purpose compression methods. The data can be produced or + consumed, even for an arbitrarily long sequentially presented input + data stream, using only an a priori bounded amount of intermediate + storage. The format can be implemented readily in a manner not + covered by patents. + + + + + + + + +Deutsch Informational [Page 1] + +RFC 1951 DEFLATE Compressed Data Format Specification May 1996 + + +Table of Contents + + 1. Introduction ................................................... 2 + 1.1. Purpose ................................................... 2 + 1.2. Intended audience ......................................... 3 + 1.3. Scope ..................................................... 3 + 1.4. Compliance ................................................ 3 + 1.5. Definitions of terms and conventions used ................ 3 + 1.6. Changes from previous versions ............................ 4 + 2. Compressed representation overview ............................. 4 + 3. Detailed specification ......................................... 5 + 3.1. Overall conventions ....................................... 5 + 3.1.1. Packing into bytes .................................. 5 + 3.2. Compressed block format ................................... 6 + 3.2.1. Synopsis of prefix and Huffman coding ............... 6 + 3.2.2. Use of Huffman coding in the "deflate" format ....... 7 + 3.2.3. Details of block format ............................. 9 + 3.2.4. Non-compressed blocks (BTYPE=00) ................... 11 + 3.2.5. Compressed blocks (length and distance codes) ...... 11 + 3.2.6. Compression with fixed Huffman codes (BTYPE=01) .... 12 + 3.2.7. Compression with dynamic Huffman codes (BTYPE=10) .. 13 + 3.3. Compliance ............................................... 14 + 4. Compression algorithm details ................................. 14 + 5. References .................................................... 16 + 6. Security Considerations ....................................... 16 + 7. Source code ................................................... 16 + 8. Acknowledgements .............................................. 16 + 9. Author's Address .............................................. 17 + +1. Introduction + + 1.1. Purpose + + The purpose of this specification is to define a lossless + compressed data format that: + * Is independent of CPU type, operating system, file system, + and character set, and hence can be used for interchange; + * Can be produced or consumed, even for an arbitrarily long + sequentially presented input data stream, using only an a + priori bounded amount of intermediate storage, and hence + can be used in data communications or similar structures + such as Unix filters; + * Compresses data with efficiency comparable to the best + currently available general-purpose compression methods, + and in particular considerably better than the "compress" + program; + * Can be implemented readily in a manner not covered by + patents, and hence can be practiced freely; + + + +Deutsch Informational [Page 2] + +RFC 1951 DEFLATE Compressed Data Format Specification May 1996 + + + * Is compatible with the file format produced by the current + widely used gzip utility, in that conforming decompressors + will be able to read data produced by the existing gzip + compressor. + + The data format defined by this specification does not attempt to: + + * Allow random access to compressed data; + * Compress specialized data (e.g., raster graphics) as well + as the best currently available specialized algorithms. + + A simple counting argument shows that no lossless compression + algorithm can compress every possible input data set. For the + format defined here, the worst case expansion is 5 bytes per 32K- + byte block, i.e., a size increase of 0.015% for large data sets. + English text usually compresses by a factor of 2.5 to 3; + executable files usually compress somewhat less; graphical data + such as raster images may compress much more. + + 1.2. Intended audience + + This specification is intended for use by implementors of software + to compress data into "deflate" format and/or decompress data from + "deflate" format. + + The text of the specification assumes a basic background in + programming at the level of bits and other primitive data + representations. Familiarity with the technique of Huffman coding + is helpful but not required. + + 1.3. Scope + + The specification specifies a method for representing a sequence + of bytes as a (usually shorter) sequence of bits, and a method for + packing the latter bit sequence into bytes. + + 1.4. Compliance + + Unless otherwise indicated below, a compliant decompressor must be + able to accept and decompress any data set that conforms to all + the specifications presented here; a compliant compressor must + produce data sets that conform to all the specifications presented + here. + + 1.5. Definitions of terms and conventions used + + Byte: 8 bits stored or transmitted as a unit (same as an octet). + For this specification, a byte is exactly 8 bits, even on machines + + + +Deutsch Informational [Page 3] + +RFC 1951 DEFLATE Compressed Data Format Specification May 1996 + + + which store a character on a number of bits different from eight. + See below, for the numbering of bits within a byte. + + String: a sequence of arbitrary bytes. + + 1.6. Changes from previous versions + + There have been no technical changes to the deflate format since + version 1.1 of this specification. In version 1.2, some + terminology was changed. Version 1.3 is a conversion of the + specification to RFC style. + +2. Compressed representation overview + + A compressed data set consists of a series of blocks, corresponding + to successive blocks of input data. The block sizes are arbitrary, + except that non-compressible blocks are limited to 65,535 bytes. + + Each block is compressed using a combination of the LZ77 algorithm + and Huffman coding. The Huffman trees for each block are independent + of those for previous or subsequent blocks; the LZ77 algorithm may + use a reference to a duplicated string occurring in a previous block, + up to 32K input bytes before. + + Each block consists of two parts: a pair of Huffman code trees that + describe the representation of the compressed data part, and a + compressed data part. (The Huffman trees themselves are compressed + using Huffman encoding.) The compressed data consists of a series of + elements of two types: literal bytes (of strings that have not been + detected as duplicated within the previous 32K input bytes), and + pointers to duplicated strings, where a pointer is represented as a + pair . The representation used in the + "deflate" format limits distances to 32K bytes and lengths to 258 + bytes, but does not limit the size of a block, except for + uncompressible blocks, which are limited as noted above. + + Each type of value (literals, distances, and lengths) in the + compressed data is represented using a Huffman code, using one code + tree for literals and lengths and a separate code tree for distances. + The code trees for each block appear in a compact form just before + the compressed data for that block. + + + + + + + + + + +Deutsch Informational [Page 4] + +RFC 1951 DEFLATE Compressed Data Format Specification May 1996 + + +3. Detailed specification + + 3.1. Overall conventions In the diagrams below, a box like this: + + +---+ + | | <-- the vertical bars might be missing + +---+ + + represents one byte; a box like this: + + +==============+ + | | + +==============+ + + represents a variable number of bytes. + + Bytes stored within a computer do not have a "bit order", since + they are always treated as a unit. However, a byte considered as + an integer between 0 and 255 does have a most- and least- + significant bit, and since we write numbers with the most- + significant digit on the left, we also write bytes with the most- + significant bit on the left. In the diagrams below, we number the + bits of a byte so that bit 0 is the least-significant bit, i.e., + the bits are numbered: + + +--------+ + |76543210| + +--------+ + + Within a computer, a number may occupy multiple bytes. All + multi-byte numbers in the format described here are stored with + the least-significant byte first (at the lower memory address). + For example, the decimal number 520 is stored as: + + 0 1 + +--------+--------+ + |00001000|00000010| + +--------+--------+ + ^ ^ + | | + | + more significant byte = 2 x 256 + + less significant byte = 8 + + 3.1.1. Packing into bytes + + This document does not address the issue of the order in which + bits of a byte are transmitted on a bit-sequential medium, + since the final data format described here is byte- rather than + + + +Deutsch Informational [Page 5] + +RFC 1951 DEFLATE Compressed Data Format Specification May 1996 + + + bit-oriented. However, we describe the compressed block format + in below, as a sequence of data elements of various bit + lengths, not a sequence of bytes. We must therefore specify + how to pack these data elements into bytes to form the final + compressed byte sequence: + + * Data elements are packed into bytes in order of + increasing bit number within the byte, i.e., starting + with the least-significant bit of the byte. + * Data elements other than Huffman codes are packed + starting with the least-significant bit of the data + element. + * Huffman codes are packed starting with the most- + significant bit of the code. + + In other words, if one were to print out the compressed data as + a sequence of bytes, starting with the first byte at the + *right* margin and proceeding to the *left*, with the most- + significant bit of each byte on the left as usual, one would be + able to parse the result from right to left, with fixed-width + elements in the correct MSB-to-LSB order and Huffman codes in + bit-reversed order (i.e., with the first bit of the code in the + relative LSB position). + + 3.2. Compressed block format + + 3.2.1. Synopsis of prefix and Huffman coding + + Prefix coding represents symbols from an a priori known + alphabet by bit sequences (codes), one code for each symbol, in + a manner such that different symbols may be represented by bit + sequences of different lengths, but a parser can always parse + an encoded string unambiguously symbol-by-symbol. + + We define a prefix code in terms of a binary tree in which the + two edges descending from each non-leaf node are labeled 0 and + 1 and in which the leaf nodes correspond one-for-one with (are + labeled with) the symbols of the alphabet; then the code for a + symbol is the sequence of 0's and 1's on the edges leading from + the root to the leaf labeled with that symbol. For example: + + + + + + + + + + + +Deutsch Informational [Page 6] + +RFC 1951 DEFLATE Compressed Data Format Specification May 1996 + + + /\ Symbol Code + 0 1 ------ ---- + / \ A 00 + /\ B B 1 + 0 1 C 011 + / \ D 010 + A /\ + 0 1 + / \ + D C + + A parser can decode the next symbol from an encoded input + stream by walking down the tree from the root, at each step + choosing the edge corresponding to the next input bit. + + Given an alphabet with known symbol frequencies, the Huffman + algorithm allows the construction of an optimal prefix code + (one which represents strings with those symbol frequencies + using the fewest bits of any possible prefix codes for that + alphabet). Such a code is called a Huffman code. (See + reference [1] in Chapter 5, references for additional + information on Huffman codes.) + + Note that in the "deflate" format, the Huffman codes for the + various alphabets must not exceed certain maximum code lengths. + This constraint complicates the algorithm for computing code + lengths from symbol frequencies. Again, see Chapter 5, + references for details. + + 3.2.2. Use of Huffman coding in the "deflate" format + + The Huffman codes used for each alphabet in the "deflate" + format have two additional rules: + + * All codes of a given bit length have lexicographically + consecutive values, in the same order as the symbols + they represent; + + * Shorter codes lexicographically precede longer codes. + + + + + + + + + + + + +Deutsch Informational [Page 7] + +RFC 1951 DEFLATE Compressed Data Format Specification May 1996 + + + We could recode the example above to follow this rule as + follows, assuming that the order of the alphabet is ABCD: + + Symbol Code + ------ ---- + A 10 + B 0 + C 110 + D 111 + + I.e., 0 precedes 10 which precedes 11x, and 110 and 111 are + lexicographically consecutive. + + Given this rule, we can define the Huffman code for an alphabet + just by giving the bit lengths of the codes for each symbol of + the alphabet in order; this is sufficient to determine the + actual codes. In our example, the code is completely defined + by the sequence of bit lengths (2, 1, 3, 3). The following + algorithm generates the codes as integers, intended to be read + from most- to least-significant bit. The code lengths are + initially in tree[I].Len; the codes are produced in + tree[I].Code. + + 1) Count the number of codes for each code length. Let + bl_count[N] be the number of codes of length N, N >= 1. + + 2) Find the numerical value of the smallest code for each + code length: + + code = 0; + bl_count[0] = 0; + for (bits = 1; bits <= MAX_BITS; bits++) { + code = (code + bl_count[bits-1]) << 1; + next_code[bits] = code; + } + + 3) Assign numerical values to all codes, using consecutive + values for all codes of the same length with the base + values determined at step 2. Codes that are never used + (which have a bit length of zero) must not be assigned a + value. + + for (n = 0; n <= max_code; n++) { + len = tree[n].Len; + if (len != 0) { + tree[n].Code = next_code[len]; + next_code[len]++; + } + + + +Deutsch Informational [Page 8] + +RFC 1951 DEFLATE Compressed Data Format Specification May 1996 + + + } + + Example: + + Consider the alphabet ABCDEFGH, with bit lengths (3, 3, 3, 3, + 3, 2, 4, 4). After step 1, we have: + + N bl_count[N] + - ----------- + 2 1 + 3 5 + 4 2 + + Step 2 computes the following next_code values: + + N next_code[N] + - ------------ + 1 0 + 2 0 + 3 2 + 4 14 + + Step 3 produces the following code values: + + Symbol Length Code + ------ ------ ---- + A 3 010 + B 3 011 + C 3 100 + D 3 101 + E 3 110 + F 2 00 + G 4 1110 + H 4 1111 + + 3.2.3. Details of block format + + Each block of compressed data begins with 3 header bits + containing the following data: + + first bit BFINAL + next 2 bits BTYPE + + Note that the header bits do not necessarily begin on a byte + boundary, since a block does not necessarily occupy an integral + number of bytes. + + + + + +Deutsch Informational [Page 9] + +RFC 1951 DEFLATE Compressed Data Format Specification May 1996 + + + BFINAL is set if and only if this is the last block of the data + set. + + BTYPE specifies how the data are compressed, as follows: + + 00 - no compression + 01 - compressed with fixed Huffman codes + 10 - compressed with dynamic Huffman codes + 11 - reserved (error) + + The only difference between the two compressed cases is how the + Huffman codes for the literal/length and distance alphabets are + defined. + + In all cases, the decoding algorithm for the actual data is as + follows: + + do + read block header from input stream. + if stored with no compression + skip any remaining bits in current partially + processed byte + read LEN and NLEN (see next section) + copy LEN bytes of data to output + otherwise + if compressed with dynamic Huffman codes + read representation of code trees (see + subsection below) + loop (until end of block code recognized) + decode literal/length value from input stream + if value < 256 + copy value (literal byte) to output stream + otherwise + if value = end of block (256) + break from loop + otherwise (value = 257..285) + decode distance from input stream + + move backwards distance bytes in the output + stream, and copy length bytes from this + position to the output stream. + end loop + while not last block + + Note that a duplicated string reference may refer to a string + in a previous block; i.e., the backward distance may cross one + or more block boundaries. However a distance cannot refer past + the beginning of the output stream. (An application using a + + + +Deutsch Informational [Page 10] + +RFC 1951 DEFLATE Compressed Data Format Specification May 1996 + + + preset dictionary might discard part of the output stream; a + distance can refer to that part of the output stream anyway) + Note also that the referenced string may overlap the current + position; for example, if the last 2 bytes decoded have values + X and Y, a string reference with + adds X,Y,X,Y,X to the output stream. + + We now specify each compression method in turn. + + 3.2.4. Non-compressed blocks (BTYPE=00) + + Any bits of input up to the next byte boundary are ignored. + The rest of the block consists of the following information: + + 0 1 2 3 4... + +---+---+---+---+================================+ + | LEN | NLEN |... LEN bytes of literal data...| + +---+---+---+---+================================+ + + LEN is the number of data bytes in the block. NLEN is the + one's complement of LEN. + + 3.2.5. Compressed blocks (length and distance codes) + + As noted above, encoded data blocks in the "deflate" format + consist of sequences of symbols drawn from three conceptually + distinct alphabets: either literal bytes, from the alphabet of + byte values (0..255), or pairs, + where the length is drawn from (3..258) and the distance is + drawn from (1..32,768). In fact, the literal and length + alphabets are merged into a single alphabet (0..285), where + values 0..255 represent literal bytes, the value 256 indicates + end-of-block, and values 257..285 represent length codes + (possibly in conjunction with extra bits following the symbol + code) as follows: + + + + + + + + + + + + + + + + +Deutsch Informational [Page 11] + +RFC 1951 DEFLATE Compressed Data Format Specification May 1996 + + + Extra Extra Extra + Code Bits Length(s) Code Bits Lengths Code Bits Length(s) + ---- ---- ------ ---- ---- ------- ---- ---- ------- + 257 0 3 267 1 15,16 277 4 67-82 + 258 0 4 268 1 17,18 278 4 83-98 + 259 0 5 269 2 19-22 279 4 99-114 + 260 0 6 270 2 23-26 280 4 115-130 + 261 0 7 271 2 27-30 281 5 131-162 + 262 0 8 272 2 31-34 282 5 163-194 + 263 0 9 273 3 35-42 283 5 195-226 + 264 0 10 274 3 43-50 284 5 227-257 + 265 1 11,12 275 3 51-58 285 0 258 + 266 1 13,14 276 3 59-66 + + The extra bits should be interpreted as a machine integer + stored with the most-significant bit first, e.g., bits 1110 + represent the value 14. + + Extra Extra Extra + Code Bits Dist Code Bits Dist Code Bits Distance + ---- ---- ---- ---- ---- ------ ---- ---- -------- + 0 0 1 10 4 33-48 20 9 1025-1536 + 1 0 2 11 4 49-64 21 9 1537-2048 + 2 0 3 12 5 65-96 22 10 2049-3072 + 3 0 4 13 5 97-128 23 10 3073-4096 + 4 1 5,6 14 6 129-192 24 11 4097-6144 + 5 1 7,8 15 6 193-256 25 11 6145-8192 + 6 2 9-12 16 7 257-384 26 12 8193-12288 + 7 2 13-16 17 7 385-512 27 12 12289-16384 + 8 3 17-24 18 8 513-768 28 13 16385-24576 + 9 3 25-32 19 8 769-1024 29 13 24577-32768 + + 3.2.6. Compression with fixed Huffman codes (BTYPE=01) + + The Huffman codes for the two alphabets are fixed, and are not + represented explicitly in the data. The Huffman code lengths + for the literal/length alphabet are: + + Lit Value Bits Codes + --------- ---- ----- + 0 - 143 8 00110000 through + 10111111 + 144 - 255 9 110010000 through + 111111111 + 256 - 279 7 0000000 through + 0010111 + 280 - 287 8 11000000 through + 11000111 + + + +Deutsch Informational [Page 12] + +RFC 1951 DEFLATE Compressed Data Format Specification May 1996 + + + The code lengths are sufficient to generate the actual codes, + as described above; we show the codes in the table for added + clarity. Literal/length values 286-287 will never actually + occur in the compressed data, but participate in the code + construction. + + Distance codes 0-31 are represented by (fixed-length) 5-bit + codes, with possible additional bits as shown in the table + shown in Paragraph 3.2.5, above. Note that distance codes 30- + 31 will never actually occur in the compressed data. + + 3.2.7. Compression with dynamic Huffman codes (BTYPE=10) + + The Huffman codes for the two alphabets appear in the block + immediately after the header bits and before the actual + compressed data, first the literal/length code and then the + distance code. Each code is defined by a sequence of code + lengths, as discussed in Paragraph 3.2.2, above. For even + greater compactness, the code length sequences themselves are + compressed using a Huffman code. The alphabet for code lengths + is as follows: + + 0 - 15: Represent code lengths of 0 - 15 + 16: Copy the previous code length 3 - 6 times. + The next 2 bits indicate repeat length + (0 = 3, ... , 3 = 6) + Example: Codes 8, 16 (+2 bits 11), + 16 (+2 bits 10) will expand to + 12 code lengths of 8 (1 + 6 + 5) + 17: Repeat a code length of 0 for 3 - 10 times. + (3 bits of length) + 18: Repeat a code length of 0 for 11 - 138 times + (7 bits of length) + + A code length of 0 indicates that the corresponding symbol in + the literal/length or distance alphabet will not occur in the + block, and should not participate in the Huffman code + construction algorithm given earlier. If only one distance + code is used, it is encoded using one bit, not zero bits; in + this case there is a single code length of one, with one unused + code. One distance code of zero bits means that there are no + distance codes used at all (the data is all literals). + + We can now define the format of the block: + + 5 Bits: HLIT, # of Literal/Length codes - 257 (257 - 286) + 5 Bits: HDIST, # of Distance codes - 1 (1 - 32) + 4 Bits: HCLEN, # of Code Length codes - 4 (4 - 19) + + + +Deutsch Informational [Page 13] + +RFC 1951 DEFLATE Compressed Data Format Specification May 1996 + + + (HCLEN + 4) x 3 bits: code lengths for the code length + alphabet given just above, in the order: 16, 17, 18, + 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15 + + These code lengths are interpreted as 3-bit integers + (0-7); as above, a code length of 0 means the + corresponding symbol (literal/length or distance code + length) is not used. + + HLIT + 257 code lengths for the literal/length alphabet, + encoded using the code length Huffman code + + HDIST + 1 code lengths for the distance alphabet, + encoded using the code length Huffman code + + The actual compressed data of the block, + encoded using the literal/length and distance Huffman + codes + + The literal/length symbol 256 (end of data), + encoded using the literal/length Huffman code + + The code length repeat codes can cross from HLIT + 257 to the + HDIST + 1 code lengths. In other words, all code lengths form + a single sequence of HLIT + HDIST + 258 values. + + 3.3. Compliance + + A compressor may limit further the ranges of values specified in + the previous section and still be compliant; for example, it may + limit the range of backward pointers to some value smaller than + 32K. Similarly, a compressor may limit the size of blocks so that + a compressible block fits in memory. + + A compliant decompressor must accept the full range of possible + values defined in the previous section, and must accept blocks of + arbitrary size. + +4. Compression algorithm details + + While it is the intent of this document to define the "deflate" + compressed data format without reference to any particular + compression algorithm, the format is related to the compressed + formats produced by LZ77 (Lempel-Ziv 1977, see reference [2] below); + since many variations of LZ77 are patented, it is strongly + recommended that the implementor of a compressor follow the general + algorithm presented here, which is known not to be patented per se. + The material in this section is not part of the definition of the + + + +Deutsch Informational [Page 14] + +RFC 1951 DEFLATE Compressed Data Format Specification May 1996 + + + specification per se, and a compressor need not follow it in order to + be compliant. + + The compressor terminates a block when it determines that starting a + new block with fresh trees would be useful, or when the block size + fills up the compressor's block buffer. + + The compressor uses a chained hash table to find duplicated strings, + using a hash function that operates on 3-byte sequences. At any + given point during compression, let XYZ be the next 3 input bytes to + be examined (not necessarily all different, of course). First, the + compressor examines the hash chain for XYZ. If the chain is empty, + the compressor simply writes out X as a literal byte and advances one + byte in the input. If the hash chain is not empty, indicating that + the sequence XYZ (or, if we are unlucky, some other 3 bytes with the + same hash function value) has occurred recently, the compressor + compares all strings on the XYZ hash chain with the actual input data + sequence starting at the current point, and selects the longest + match. + + The compressor searches the hash chains starting with the most recent + strings, to favor small distances and thus take advantage of the + Huffman encoding. The hash chains are singly linked. There are no + deletions from the hash chains; the algorithm simply discards matches + that are too old. To avoid a worst-case situation, very long hash + chains are arbitrarily truncated at a certain length, determined by a + run-time parameter. + + To improve overall compression, the compressor optionally defers the + selection of matches ("lazy matching"): after a match of length N has + been found, the compressor searches for a longer match starting at + the next input byte. If it finds a longer match, it truncates the + previous match to a length of one (thus producing a single literal + byte) and then emits the longer match. Otherwise, it emits the + original match, and, as described above, advances N bytes before + continuing. + + Run-time parameters also control this "lazy match" procedure. If + compression ratio is most important, the compressor attempts a + complete second search regardless of the length of the first match. + In the normal case, if the current match is "long enough", the + compressor reduces the search for a longer match, thus speeding up + the process. If speed is most important, the compressor inserts new + strings in the hash table only when no match was found, or when the + match is not "too long". This degrades the compression ratio but + saves time since there are both fewer insertions and fewer searches. + + + + + +Deutsch Informational [Page 15] + +RFC 1951 DEFLATE Compressed Data Format Specification May 1996 + + +5. References + + [1] Huffman, D. A., "A Method for the Construction of Minimum + Redundancy Codes", Proceedings of the Institute of Radio + Engineers, September 1952, Volume 40, Number 9, pp. 1098-1101. + + [2] Ziv J., Lempel A., "A Universal Algorithm for Sequential Data + Compression", IEEE Transactions on Information Theory, Vol. 23, + No. 3, pp. 337-343. + + [3] Gailly, J.-L., and Adler, M., ZLIB documentation and sources, + available in ftp://ftp.uu.net/pub/archiving/zip/doc/ + + [4] Gailly, J.-L., and Adler, M., GZIP documentation and sources, + available as gzip-*.tar in ftp://prep.ai.mit.edu/pub/gnu/ + + [5] Schwartz, E. S., and Kallick, B. "Generating a canonical prefix + encoding." Comm. ACM, 7,3 (Mar. 1964), pp. 166-169. + + [6] Hirschberg and Lelewer, "Efficient decoding of prefix codes," + Comm. ACM, 33,4, April 1990, pp. 449-459. + +6. Security Considerations + + Any data compression method involves the reduction of redundancy in + the data. Consequently, any corruption of the data is likely to have + severe effects and be difficult to correct. Uncompressed text, on + the other hand, will probably still be readable despite the presence + of some corrupted bytes. + + It is recommended that systems using this data format provide some + means of validating the integrity of the compressed data. See + reference [3], for example. + +7. Source code + + Source code for a C language implementation of a "deflate" compliant + compressor and decompressor is available within the zlib package at + ftp://ftp.uu.net/pub/archiving/zip/zlib/. + +8. Acknowledgements + + Trademarks cited in this document are the property of their + respective owners. + + Phil Katz designed the deflate format. Jean-Loup Gailly and Mark + Adler wrote the related software described in this specification. + Glenn Randers-Pehrson converted this document to RFC and HTML format. + + + +Deutsch Informational [Page 16] + +RFC 1951 DEFLATE Compressed Data Format Specification May 1996 + + +9. Author's Address + + L. Peter Deutsch + Aladdin Enterprises + 203 Santa Margarita Ave. + Menlo Park, CA 94025 + + Phone: (415) 322-0103 (AM only) + FAX: (415) 322-1734 + EMail: + + Questions about the technical content of this specification can be + sent by email to: + + Jean-Loup Gailly and + Mark Adler + + Editorial comments on this specification can be sent by email to: + + L. Peter Deutsch and + Glenn Randers-Pehrson + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Deutsch Informational [Page 17] + diff --git a/thirdparty/zlib-1.3.1/doc/rfc1952.txt b/thirdparty/zlib-1.3.1/doc/rfc1952.txt new file mode 100644 index 0000000..a8e51b4 --- /dev/null +++ b/thirdparty/zlib-1.3.1/doc/rfc1952.txt @@ -0,0 +1,675 @@ + + + + + + +Network Working Group P. Deutsch +Request for Comments: 1952 Aladdin Enterprises +Category: Informational May 1996 + + + GZIP file format specification version 4.3 + +Status of This Memo + + This memo provides information for the Internet community. This memo + does not specify an Internet standard of any kind. Distribution of + this memo is unlimited. + +IESG Note: + + The IESG takes no position on the validity of any Intellectual + Property Rights statements contained in this document. + +Notices + + Copyright (c) 1996 L. Peter Deutsch + + Permission is granted to copy and distribute this document for any + purpose and without charge, including translations into other + languages and incorporation into compilations, provided that the + copyright notice and this notice are preserved, and that any + substantive changes or deletions from the original are clearly + marked. + + A pointer to the latest version of this and related documentation in + HTML format can be found at the URL + . + +Abstract + + This specification defines a lossless compressed data format that is + compatible with the widely used GZIP utility. The format includes a + cyclic redundancy check value for detecting data corruption. The + format presently uses the DEFLATE method of compression but can be + easily extended to use other compression methods. The format can be + implemented readily in a manner not covered by patents. + + + + + + + + + + +Deutsch Informational [Page 1] + +RFC 1952 GZIP File Format Specification May 1996 + + +Table of Contents + + 1. Introduction ................................................... 2 + 1.1. Purpose ................................................... 2 + 1.2. Intended audience ......................................... 3 + 1.3. Scope ..................................................... 3 + 1.4. Compliance ................................................ 3 + 1.5. Definitions of terms and conventions used ................. 3 + 1.6. Changes from previous versions ............................ 3 + 2. Detailed specification ......................................... 4 + 2.1. Overall conventions ....................................... 4 + 2.2. File format ............................................... 5 + 2.3. Member format ............................................. 5 + 2.3.1. Member header and trailer ........................... 6 + 2.3.1.1. Extra field ................................... 8 + 2.3.1.2. Compliance .................................... 9 + 3. References .................................................. 9 + 4. Security Considerations .................................... 10 + 5. Acknowledgements ........................................... 10 + 6. Author's Address ........................................... 10 + 7. Appendix: Jean-Loup Gailly's gzip utility .................. 11 + 8. Appendix: Sample CRC Code .................................. 11 + +1. Introduction + + 1.1. Purpose + + The purpose of this specification is to define a lossless + compressed data format that: + + * Is independent of CPU type, operating system, file system, + and character set, and hence can be used for interchange; + * Can compress or decompress a data stream (as opposed to a + randomly accessible file) to produce another data stream, + using only an a priori bounded amount of intermediate + storage, and hence can be used in data communications or + similar structures such as Unix filters; + * Compresses data with efficiency comparable to the best + currently available general-purpose compression methods, + and in particular considerably better than the "compress" + program; + * Can be implemented readily in a manner not covered by + patents, and hence can be practiced freely; + * Is compatible with the file format produced by the current + widely used gzip utility, in that conforming decompressors + will be able to read data produced by the existing gzip + compressor. + + + + +Deutsch Informational [Page 2] + +RFC 1952 GZIP File Format Specification May 1996 + + + The data format defined by this specification does not attempt to: + + * Provide random access to compressed data; + * Compress specialized data (e.g., raster graphics) as well as + the best currently available specialized algorithms. + + 1.2. Intended audience + + This specification is intended for use by implementors of software + to compress data into gzip format and/or decompress data from gzip + format. + + The text of the specification assumes a basic background in + programming at the level of bits and other primitive data + representations. + + 1.3. Scope + + The specification specifies a compression method and a file format + (the latter assuming only that a file can store a sequence of + arbitrary bytes). It does not specify any particular interface to + a file system or anything about character sets or encodings + (except for file names and comments, which are optional). + + 1.4. Compliance + + Unless otherwise indicated below, a compliant decompressor must be + able to accept and decompress any file that conforms to all the + specifications presented here; a compliant compressor must produce + files that conform to all the specifications presented here. The + material in the appendices is not part of the specification per se + and is not relevant to compliance. + + 1.5. Definitions of terms and conventions used + + byte: 8 bits stored or transmitted as a unit (same as an octet). + (For this specification, a byte is exactly 8 bits, even on + machines which store a character on a number of bits different + from 8.) See below for the numbering of bits within a byte. + + 1.6. Changes from previous versions + + There have been no technical changes to the gzip format since + version 4.1 of this specification. In version 4.2, some + terminology was changed, and the sample CRC code was rewritten for + clarity and to eliminate the requirement for the caller to do pre- + and post-conditioning. Version 4.3 is a conversion of the + specification to RFC style. + + + +Deutsch Informational [Page 3] + +RFC 1952 GZIP File Format Specification May 1996 + + +2. Detailed specification + + 2.1. Overall conventions + + In the diagrams below, a box like this: + + +---+ + | | <-- the vertical bars might be missing + +---+ + + represents one byte; a box like this: + + +==============+ + | | + +==============+ + + represents a variable number of bytes. + + Bytes stored within a computer do not have a "bit order", since + they are always treated as a unit. However, a byte considered as + an integer between 0 and 255 does have a most- and least- + significant bit, and since we write numbers with the most- + significant digit on the left, we also write bytes with the most- + significant bit on the left. In the diagrams below, we number the + bits of a byte so that bit 0 is the least-significant bit, i.e., + the bits are numbered: + + +--------+ + |76543210| + +--------+ + + This document does not address the issue of the order in which + bits of a byte are transmitted on a bit-sequential medium, since + the data format described here is byte- rather than bit-oriented. + + Within a computer, a number may occupy multiple bytes. All + multi-byte numbers in the format described here are stored with + the least-significant byte first (at the lower memory address). + For example, the decimal number 520 is stored as: + + 0 1 + +--------+--------+ + |00001000|00000010| + +--------+--------+ + ^ ^ + | | + | + more significant byte = 2 x 256 + + less significant byte = 8 + + + +Deutsch Informational [Page 4] + +RFC 1952 GZIP File Format Specification May 1996 + + + 2.2. File format + + A gzip file consists of a series of "members" (compressed data + sets). The format of each member is specified in the following + section. The members simply appear one after another in the file, + with no additional information before, between, or after them. + + 2.3. Member format + + Each member has the following structure: + + +---+---+---+---+---+---+---+---+---+---+ + |ID1|ID2|CM |FLG| MTIME |XFL|OS | (more-->) + +---+---+---+---+---+---+---+---+---+---+ + + (if FLG.FEXTRA set) + + +---+---+=================================+ + | XLEN |...XLEN bytes of "extra field"...| (more-->) + +---+---+=================================+ + + (if FLG.FNAME set) + + +=========================================+ + |...original file name, zero-terminated...| (more-->) + +=========================================+ + + (if FLG.FCOMMENT set) + + +===================================+ + |...file comment, zero-terminated...| (more-->) + +===================================+ + + (if FLG.FHCRC set) + + +---+---+ + | CRC16 | + +---+---+ + + +=======================+ + |...compressed blocks...| (more-->) + +=======================+ + + 0 1 2 3 4 5 6 7 + +---+---+---+---+---+---+---+---+ + | CRC32 | ISIZE | + +---+---+---+---+---+---+---+---+ + + + + +Deutsch Informational [Page 5] + +RFC 1952 GZIP File Format Specification May 1996 + + + 2.3.1. Member header and trailer + + ID1 (IDentification 1) + ID2 (IDentification 2) + These have the fixed values ID1 = 31 (0x1f, \037), ID2 = 139 + (0x8b, \213), to identify the file as being in gzip format. + + CM (Compression Method) + This identifies the compression method used in the file. CM + = 0-7 are reserved. CM = 8 denotes the "deflate" + compression method, which is the one customarily used by + gzip and which is documented elsewhere. + + FLG (FLaGs) + This flag byte is divided into individual bits as follows: + + bit 0 FTEXT + bit 1 FHCRC + bit 2 FEXTRA + bit 3 FNAME + bit 4 FCOMMENT + bit 5 reserved + bit 6 reserved + bit 7 reserved + + If FTEXT is set, the file is probably ASCII text. This is + an optional indication, which the compressor may set by + checking a small amount of the input data to see whether any + non-ASCII characters are present. In case of doubt, FTEXT + is cleared, indicating binary data. For systems which have + different file formats for ascii text and binary data, the + decompressor can use FTEXT to choose the appropriate format. + We deliberately do not specify the algorithm used to set + this bit, since a compressor always has the option of + leaving it cleared and a decompressor always has the option + of ignoring it and letting some other program handle issues + of data conversion. + + If FHCRC is set, a CRC16 for the gzip header is present, + immediately before the compressed data. The CRC16 consists + of the two least significant bytes of the CRC32 for all + bytes of the gzip header up to and not including the CRC16. + [The FHCRC bit was never set by versions of gzip up to + 1.2.4, even though it was documented with a different + meaning in gzip 1.2.4.] + + If FEXTRA is set, optional extra fields are present, as + described in a following section. + + + +Deutsch Informational [Page 6] + +RFC 1952 GZIP File Format Specification May 1996 + + + If FNAME is set, an original file name is present, + terminated by a zero byte. The name must consist of ISO + 8859-1 (LATIN-1) characters; on operating systems using + EBCDIC or any other character set for file names, the name + must be translated to the ISO LATIN-1 character set. This + is the original name of the file being compressed, with any + directory components removed, and, if the file being + compressed is on a file system with case insensitive names, + forced to lower case. There is no original file name if the + data was compressed from a source other than a named file; + for example, if the source was stdin on a Unix system, there + is no file name. + + If FCOMMENT is set, a zero-terminated file comment is + present. This comment is not interpreted; it is only + intended for human consumption. The comment must consist of + ISO 8859-1 (LATIN-1) characters. Line breaks should be + denoted by a single line feed character (10 decimal). + + Reserved FLG bits must be zero. + + MTIME (Modification TIME) + This gives the most recent modification time of the original + file being compressed. The time is in Unix format, i.e., + seconds since 00:00:00 GMT, Jan. 1, 1970. (Note that this + may cause problems for MS-DOS and other systems that use + local rather than Universal time.) If the compressed data + did not come from a file, MTIME is set to the time at which + compression started. MTIME = 0 means no time stamp is + available. + + XFL (eXtra FLags) + These flags are available for use by specific compression + methods. The "deflate" method (CM = 8) sets these flags as + follows: + + XFL = 2 - compressor used maximum compression, + slowest algorithm + XFL = 4 - compressor used fastest algorithm + + OS (Operating System) + This identifies the type of file system on which compression + took place. This may be useful in determining end-of-line + convention for text files. The currently defined values are + as follows: + + + + + + +Deutsch Informational [Page 7] + +RFC 1952 GZIP File Format Specification May 1996 + + + 0 - FAT filesystem (MS-DOS, OS/2, NT/Win32) + 1 - Amiga + 2 - VMS (or OpenVMS) + 3 - Unix + 4 - VM/CMS + 5 - Atari TOS + 6 - HPFS filesystem (OS/2, NT) + 7 - Macintosh + 8 - Z-System + 9 - CP/M + 10 - TOPS-20 + 11 - NTFS filesystem (NT) + 12 - QDOS + 13 - Acorn RISCOS + 255 - unknown + + XLEN (eXtra LENgth) + If FLG.FEXTRA is set, this gives the length of the optional + extra field. See below for details. + + CRC32 (CRC-32) + This contains a Cyclic Redundancy Check value of the + uncompressed data computed according to CRC-32 algorithm + used in the ISO 3309 standard and in section 8.1.1.6.2 of + ITU-T recommendation V.42. (See http://www.iso.ch for + ordering ISO documents. See gopher://info.itu.ch for an + online version of ITU-T V.42.) + + ISIZE (Input SIZE) + This contains the size of the original (uncompressed) input + data modulo 2^32. + + 2.3.1.1. Extra field + + If the FLG.FEXTRA bit is set, an "extra field" is present in + the header, with total length XLEN bytes. It consists of a + series of subfields, each of the form: + + +---+---+---+---+==================================+ + |SI1|SI2| LEN |... LEN bytes of subfield data ...| + +---+---+---+---+==================================+ + + SI1 and SI2 provide a subfield ID, typically two ASCII letters + with some mnemonic value. Jean-Loup Gailly + is maintaining a registry of subfield + IDs; please send him any subfield ID you wish to use. Subfield + IDs with SI2 = 0 are reserved for future use. The following + IDs are currently defined: + + + +Deutsch Informational [Page 8] + +RFC 1952 GZIP File Format Specification May 1996 + + + SI1 SI2 Data + ---------- ---------- ---- + 0x41 ('A') 0x70 ('P') Apollo file type information + + LEN gives the length of the subfield data, excluding the 4 + initial bytes. + + 2.3.1.2. Compliance + + A compliant compressor must produce files with correct ID1, + ID2, CM, CRC32, and ISIZE, but may set all the other fields in + the fixed-length part of the header to default values (255 for + OS, 0 for all others). The compressor must set all reserved + bits to zero. + + A compliant decompressor must check ID1, ID2, and CM, and + provide an error indication if any of these have incorrect + values. It must examine FEXTRA/XLEN, FNAME, FCOMMENT and FHCRC + at least so it can skip over the optional fields if they are + present. It need not examine any other part of the header or + trailer; in particular, a decompressor may ignore FTEXT and OS + and always produce binary output, and still be compliant. A + compliant decompressor must give an error indication if any + reserved bit is non-zero, since such a bit could indicate the + presence of a new field that would cause subsequent data to be + interpreted incorrectly. + +3. References + + [1] "Information Processing - 8-bit single-byte coded graphic + character sets - Part 1: Latin alphabet No.1" (ISO 8859-1:1987). + The ISO 8859-1 (Latin-1) character set is a superset of 7-bit + ASCII. Files defining this character set are available as + iso_8859-1.* in ftp://ftp.uu.net/graphics/png/documents/ + + [2] ISO 3309 + + [3] ITU-T recommendation V.42 + + [4] Deutsch, L.P.,"DEFLATE Compressed Data Format Specification", + available in ftp://ftp.uu.net/pub/archiving/zip/doc/ + + [5] Gailly, J.-L., GZIP documentation, available as gzip-*.tar in + ftp://prep.ai.mit.edu/pub/gnu/ + + [6] Sarwate, D.V., "Computation of Cyclic Redundancy Checks via Table + Look-Up", Communications of the ACM, 31(8), pp.1008-1013. + + + + +Deutsch Informational [Page 9] + +RFC 1952 GZIP File Format Specification May 1996 + + + [7] Schwaderer, W.D., "CRC Calculation", April 85 PC Tech Journal, + pp.118-133. + + [8] ftp://ftp.adelaide.edu.au/pub/rocksoft/papers/crc_v3.txt, + describing the CRC concept. + +4. Security Considerations + + Any data compression method involves the reduction of redundancy in + the data. Consequently, any corruption of the data is likely to have + severe effects and be difficult to correct. Uncompressed text, on + the other hand, will probably still be readable despite the presence + of some corrupted bytes. + + It is recommended that systems using this data format provide some + means of validating the integrity of the compressed data, such as by + setting and checking the CRC-32 check value. + +5. Acknowledgements + + Trademarks cited in this document are the property of their + respective owners. + + Jean-Loup Gailly designed the gzip format and wrote, with Mark Adler, + the related software described in this specification. Glenn + Randers-Pehrson converted this document to RFC and HTML format. + +6. Author's Address + + L. Peter Deutsch + Aladdin Enterprises + 203 Santa Margarita Ave. + Menlo Park, CA 94025 + + Phone: (415) 322-0103 (AM only) + FAX: (415) 322-1734 + EMail: + + Questions about the technical content of this specification can be + sent by email to: + + Jean-Loup Gailly and + Mark Adler + + Editorial comments on this specification can be sent by email to: + + L. Peter Deutsch and + Glenn Randers-Pehrson + + + +Deutsch Informational [Page 10] + +RFC 1952 GZIP File Format Specification May 1996 + + +7. Appendix: Jean-Loup Gailly's gzip utility + + The most widely used implementation of gzip compression, and the + original documentation on which this specification is based, were + created by Jean-Loup Gailly . Since this + implementation is a de facto standard, we mention some more of its + features here. Again, the material in this section is not part of + the specification per se, and implementations need not follow it to + be compliant. + + When compressing or decompressing a file, gzip preserves the + protection, ownership, and modification time attributes on the local + file system, since there is no provision for representing protection + attributes in the gzip file format itself. Since the file format + includes a modification time, the gzip decompressor provides a + command line switch that assigns the modification time from the file, + rather than the local modification time of the compressed input, to + the decompressed output. + +8. Appendix: Sample CRC Code + + The following sample code represents a practical implementation of + the CRC (Cyclic Redundancy Check). (See also ISO 3309 and ITU-T V.42 + for a formal specification.) + + The sample code is in the ANSI C programming language. Non C users + may find it easier to read with these hints: + + & Bitwise AND operator. + ^ Bitwise exclusive-OR operator. + >> Bitwise right shift operator. When applied to an + unsigned quantity, as here, right shift inserts zero + bit(s) at the left. + ! Logical NOT operator. + ++ "n++" increments the variable n. + 0xNNN 0x introduces a hexadecimal (base 16) constant. + Suffix L indicates a long value (at least 32 bits). + + /* Table of CRCs of all 8-bit messages. */ + unsigned long crc_table[256]; + + /* Flag: has the table been computed? Initially false. */ + int crc_table_computed = 0; + + /* Make the table for a fast CRC. */ + void make_crc_table(void) + { + unsigned long c; + + + +Deutsch Informational [Page 11] + +RFC 1952 GZIP File Format Specification May 1996 + + + int n, k; + for (n = 0; n < 256; n++) { + c = (unsigned long) n; + for (k = 0; k < 8; k++) { + if (c & 1) { + c = 0xedb88320L ^ (c >> 1); + } else { + c = c >> 1; + } + } + crc_table[n] = c; + } + crc_table_computed = 1; + } + + /* + Update a running crc with the bytes buf[0..len-1] and return + the updated crc. The crc should be initialized to zero. Pre- and + post-conditioning (one's complement) is performed within this + function so it shouldn't be done by the caller. Usage example: + + unsigned long crc = 0L; + + while (read_buffer(buffer, length) != EOF) { + crc = update_crc(crc, buffer, length); + } + if (crc != original_crc) error(); + */ + unsigned long update_crc(unsigned long crc, + unsigned char *buf, int len) + { + unsigned long c = crc ^ 0xffffffffL; + int n; + + if (!crc_table_computed) + make_crc_table(); + for (n = 0; n < len; n++) { + c = crc_table[(c ^ buf[n]) & 0xff] ^ (c >> 8); + } + return c ^ 0xffffffffL; + } + + /* Return the CRC of the bytes buf[0..len-1]. */ + unsigned long crc(unsigned char *buf, int len) + { + return update_crc(0L, buf, len); + } + + + + +Deutsch Informational [Page 12] + diff --git a/thirdparty/zlib-1.3.1/doc/txtvsbin.txt b/thirdparty/zlib-1.3.1/doc/txtvsbin.txt new file mode 100644 index 0000000..2a901ea --- /dev/null +++ b/thirdparty/zlib-1.3.1/doc/txtvsbin.txt @@ -0,0 +1,107 @@ +A Fast Method for Identifying Plain Text Files +============================================== + + +Introduction +------------ + +Given a file coming from an unknown source, it is sometimes desirable +to find out whether the format of that file is plain text. Although +this may appear like a simple task, a fully accurate detection of the +file type requires heavy-duty semantic analysis on the file contents. +It is, however, possible to obtain satisfactory results by employing +various heuristics. + +Previous versions of PKZip and other zip-compatible compression tools +were using a crude detection scheme: if more than 80% (4/5) of the bytes +found in a certain buffer are within the range [7..127], the file is +labeled as plain text, otherwise it is labeled as binary. A prominent +limitation of this scheme is the restriction to Latin-based alphabets. +Other alphabets, like Greek, Cyrillic or Asian, make extensive use of +the bytes within the range [128..255], and texts using these alphabets +are most often misidentified by this scheme; in other words, the rate +of false negatives is sometimes too high, which means that the recall +is low. Another weakness of this scheme is a reduced precision, due to +the false positives that may occur when binary files containing large +amounts of textual characters are misidentified as plain text. + +In this article we propose a new, simple detection scheme that features +a much increased precision and a near-100% recall. This scheme is +designed to work on ASCII, Unicode and other ASCII-derived alphabets, +and it handles single-byte encodings (ISO-8859, MacRoman, KOI8, etc.) +and variable-sized encodings (ISO-2022, UTF-8, etc.). Wider encodings +(UCS-2/UTF-16 and UCS-4/UTF-32) are not handled, however. + + +The Algorithm +------------- + +The algorithm works by dividing the set of bytecodes [0..255] into three +categories: +- The allow list of textual bytecodes: + 9 (TAB), 10 (LF), 13 (CR), 32 (SPACE) to 255. +- The gray list of tolerated bytecodes: + 7 (BEL), 8 (BS), 11 (VT), 12 (FF), 26 (SUB), 27 (ESC). +- The block list of undesired, non-textual bytecodes: + 0 (NUL) to 6, 14 to 31. + +If a file contains at least one byte that belongs to the allow list and +no byte that belongs to the block list, then the file is categorized as +plain text; otherwise, it is categorized as binary. (The boundary case, +when the file is empty, automatically falls into the latter category.) + + +Rationale +--------- + +The idea behind this algorithm relies on two observations. + +The first observation is that, although the full range of 7-bit codes +[0..127] is properly specified by the ASCII standard, most control +characters in the range [0..31] are not used in practice. The only +widely-used, almost universally-portable control codes are 9 (TAB), +10 (LF) and 13 (CR). There are a few more control codes that are +recognized on a reduced range of platforms and text viewers/editors: +7 (BEL), 8 (BS), 11 (VT), 12 (FF), 26 (SUB) and 27 (ESC); but these +codes are rarely (if ever) used alone, without being accompanied by +some printable text. Even the newer, portable text formats such as +XML avoid using control characters outside the list mentioned here. + +The second observation is that most of the binary files tend to contain +control characters, especially 0 (NUL). Even though the older text +detection schemes observe the presence of non-ASCII codes from the range +[128..255], the precision rarely has to suffer if this upper range is +labeled as textual, because the files that are genuinely binary tend to +contain both control characters and codes from the upper range. On the +other hand, the upper range needs to be labeled as textual, because it +is used by virtually all ASCII extensions. In particular, this range is +used for encoding non-Latin scripts. + +Since there is no counting involved, other than simply observing the +presence or the absence of some byte values, the algorithm produces +consistent results, regardless what alphabet encoding is being used. +(If counting were involved, it could be possible to obtain different +results on a text encoded, say, using ISO-8859-16 versus UTF-8.) + +There is an extra category of plain text files that are "polluted" with +one or more block-listed codes, either by mistake or by peculiar design +considerations. In such cases, a scheme that tolerates a small fraction +of block-listed codes would provide an increased recall (i.e. more true +positives). This, however, incurs a reduced precision overall, since +false positives are more likely to appear in binary files that contain +large chunks of textual data. Furthermore, "polluted" plain text should +be regarded as binary by general-purpose text detection schemes, because +general-purpose text processing algorithms might not be applicable. +Under this premise, it is safe to say that our detection method provides +a near-100% recall. + +Experiments have been run on many files coming from various platforms +and applications. We tried plain text files, system logs, source code, +formatted office documents, compiled object code, etc. The results +confirm the optimistic assumptions about the capabilities of this +algorithm. + + +-- +Cosmin Truta +Last updated: 2006-May-28 diff --git a/thirdparty/zlib-1.3.1/examples/README.examples b/thirdparty/zlib-1.3.1/examples/README.examples new file mode 100644 index 0000000..e3a4b88 --- /dev/null +++ b/thirdparty/zlib-1.3.1/examples/README.examples @@ -0,0 +1,54 @@ +This directory contains examples of the use of zlib and other relevant +programs and documentation. + +enough.c + calculation and justification of ENOUGH parameter in inftrees.h + - calculates the maximum table space used in inflate tree + construction over all possible Huffman codes + +fitblk.c + compress just enough input to nearly fill a requested output size + - zlib isn't designed to do this, but fitblk does it anyway + +gun.c + uncompress a gzip file + - illustrates the use of inflateBack() for high speed file-to-file + decompression using call-back functions + - is approximately twice as fast as gzip -d + - also provides Unix uncompress functionality, again twice as fast + +gzappend.c + append to a gzip file + - illustrates the use of the Z_BLOCK flush parameter for inflate() + - illustrates the use of deflatePrime() to start at any bit + +gzjoin.c + join gzip files without recalculating the crc or recompressing + - illustrates the use of the Z_BLOCK flush parameter for inflate() + - illustrates the use of crc32_combine() + +gzlog.c +gzlog.h + efficiently and robustly maintain a message log file in gzip format + - illustrates use of raw deflate, Z_PARTIAL_FLUSH, deflatePrime(), + and deflateSetDictionary() + - illustrates use of a gzip header extra field + +gznorm.c + normalize a gzip file by combining members into a single member + - demonstrates how to concatenate deflate streams using Z_BLOCK + +zlib_how.html + painfully comprehensive description of zpipe.c (see below) + - describes in excruciating detail the use of deflate() and inflate() + +zpipe.c + reads and writes zlib streams from stdin to stdout + - illustrates the proper use of deflate() and inflate() + - deeply commented in zlib_how.html (see above) + +zran.c +zran.h + index a zlib or gzip stream and randomly access it + - illustrates the use of Z_BLOCK, inflatePrime(), and + inflateSetDictionary() to provide random access diff --git a/thirdparty/zlib-1.3.1/examples/enough.c b/thirdparty/zlib-1.3.1/examples/enough.c new file mode 100644 index 0000000..8a3cade --- /dev/null +++ b/thirdparty/zlib-1.3.1/examples/enough.c @@ -0,0 +1,597 @@ +/* enough.c -- determine the maximum size of inflate's Huffman code tables over + * all possible valid and complete prefix codes, subject to a length limit. + * Copyright (C) 2007, 2008, 2012, 2018 Mark Adler + * Version 1.5 5 August 2018 Mark Adler + */ + +/* Version history: + 1.0 3 Jan 2007 First version (derived from codecount.c version 1.4) + 1.1 4 Jan 2007 Use faster incremental table usage computation + Prune examine() search on previously visited states + 1.2 5 Jan 2007 Comments clean up + As inflate does, decrease root for short codes + Refuse cases where inflate would increase root + 1.3 17 Feb 2008 Add argument for initial root table size + Fix bug for initial root table size == max - 1 + Use a macro to compute the history index + 1.4 18 Aug 2012 Avoid shifts more than bits in type (caused endless loop!) + Clean up comparisons of different types + Clean up code indentation + 1.5 5 Aug 2018 Clean up code style, formatting, and comments + Show all the codes for the maximum, and only the maximum + */ + +/* + Examine all possible prefix codes for a given number of symbols and a + maximum code length in bits to determine the maximum table size for zlib's + inflate. Only complete prefix codes are counted. + + Two codes are considered distinct if the vectors of the number of codes per + length are not identical. So permutations of the symbol assignments result + in the same code for the counting, as do permutations of the assignments of + the bit values to the codes (i.e. only canonical codes are counted). + + We build a code from shorter to longer lengths, determining how many symbols + are coded at each length. At each step, we have how many symbols remain to + be coded, what the last code length used was, and how many bit patterns of + that length remain unused. Then we add one to the code length and double the + number of unused patterns to graduate to the next code length. We then + assign all portions of the remaining symbols to that code length that + preserve the properties of a correct and eventually complete code. Those + properties are: we cannot use more bit patterns than are available; and when + all the symbols are used, there are exactly zero possible bit patterns left + unused. + + The inflate Huffman decoding algorithm uses two-level lookup tables for + speed. There is a single first-level table to decode codes up to root bits + in length (root == 9 for literal/length codes and root == 6 for distance + codes, in the current inflate implementation). The base table has 1 << root + entries and is indexed by the next root bits of input. Codes shorter than + root bits have replicated table entries, so that the correct entry is + pointed to regardless of the bits that follow the short code. If the code is + longer than root bits, then the table entry points to a second-level table. + The size of that table is determined by the longest code with that root-bit + prefix. If that longest code has length len, then the table has size 1 << + (len - root), to index the remaining bits in that set of codes. Each + subsequent root-bit prefix then has its own sub-table. The total number of + table entries required by the code is calculated incrementally as the number + of codes at each bit length is populated. When all of the codes are shorter + than root bits, then root is reduced to the longest code length, resulting + in a single, smaller, one-level table. + + The inflate algorithm also provides for small values of root (relative to + the log2 of the number of symbols), where the shortest code has more bits + than root. In that case, root is increased to the length of the shortest + code. This program, by design, does not handle that case, so it is verified + that the number of symbols is less than 1 << (root + 1). + + In order to speed up the examination (by about ten orders of magnitude for + the default arguments), the intermediate states in the build-up of a code + are remembered and previously visited branches are pruned. The memory + required for this will increase rapidly with the total number of symbols and + the maximum code length in bits. However this is a very small price to pay + for the vast speedup. + + First, all of the possible prefix codes are counted, and reachable + intermediate states are noted by a non-zero count in a saved-results array. + Second, the intermediate states that lead to (root + 1) bit or longer codes + are used to look at all sub-codes from those junctures for their inflate + memory usage. (The amount of memory used is not affected by the number of + codes of root bits or less in length.) Third, the visited states in the + construction of those sub-codes and the associated calculation of the table + size is recalled in order to avoid recalculating from the same juncture. + Beginning the code examination at (root + 1) bit codes, which is enabled by + identifying the reachable nodes, accounts for about six of the orders of + magnitude of improvement for the default arguments. About another four + orders of magnitude come from not revisiting previous states. Out of + approximately 2x10^16 possible prefix codes, only about 2x10^6 sub-codes + need to be examined to cover all of the possible table memory usage cases + for the default arguments of 286 symbols limited to 15-bit codes. + + Note that the uintmax_t type is used for counting. It is quite easy to + exceed the capacity of an eight-byte integer with a large number of symbols + and a large maximum code length, so multiple-precision arithmetic would need + to replace the integer arithmetic in that case. This program will abort if + an overflow occurs. The big_t type identifies where the counting takes + place. + + The uintmax_t type is also used for calculating the number of possible codes + remaining at the maximum length. This limits the maximum code length to the + number of bits in a long long minus the number of bits needed to represent + the symbols in a flat code. The code_t type identifies where the bit-pattern + counting takes place. + */ + +#include +#include +#include +#include +#include +#include + +#define local static + +// Special data types. +typedef uintmax_t big_t; // type for code counting +#define PRIbig "ju" // printf format for big_t +typedef uintmax_t code_t; // type for bit pattern counting +struct tab { // type for been-here check + size_t len; // allocated length of bit vector in octets + char *vec; // allocated bit vector +}; + +/* The array for saving results, num[], is indexed with this triplet: + + syms: number of symbols remaining to code + left: number of available bit patterns at length len + len: number of bits in the codes currently being assigned + + Those indices are constrained thusly when saving results: + + syms: 3..totsym (totsym == total symbols to code) + left: 2..syms - 1, but only the evens (so syms == 8 -> 2, 4, 6) + len: 1..max - 1 (max == maximum code length in bits) + + syms == 2 is not saved since that immediately leads to a single code. left + must be even, since it represents the number of available bit patterns at + the current length, which is double the number at the previous length. left + ends at syms-1 since left == syms immediately results in a single code. + (left > sym is not allowed since that would result in an incomplete code.) + len is less than max, since the code completes immediately when len == max. + + The offset into the array is calculated for the three indices with the first + one (syms) being outermost, and the last one (len) being innermost. We build + the array with length max-1 lists for the len index, with syms-3 of those + for each symbol. There are totsym-2 of those, with each one varying in + length as a function of sym. See the calculation of index in map() for the + index, and the calculation of size in main() for the size of the array. + + For the deflate example of 286 symbols limited to 15-bit codes, the array + has 284,284 entries, taking up 2.17 MB for an 8-byte big_t. More than half + of the space allocated for saved results is actually used -- not all + possible triplets are reached in the generation of valid prefix codes. + */ + +/* The array for tracking visited states, done[], is itself indexed identically + to the num[] array as described above for the (syms, left, len) triplet. + Each element in the array is further indexed by the (mem, rem) doublet, + where mem is the amount of inflate table space used so far, and rem is the + remaining unused entries in the current inflate sub-table. Each indexed + element is simply one bit indicating whether the state has been visited or + not. Since the ranges for mem and rem are not known a priori, each bit + vector is of a variable size, and grows as needed to accommodate the visited + states. mem and rem are used to calculate a single index in a triangular + array. Since the range of mem is expected in the default case to be about + ten times larger than the range of rem, the array is skewed to reduce the + memory usage, with eight times the range for mem than for rem. See the + calculations for offset and bit in been_here() for the details. + + For the deflate example of 286 symbols limited to 15-bit codes, the bit + vectors grow to total 5.5 MB, in addition to the 4.3 MB done array itself. + */ + +// Type for a variable-length, allocated string. +typedef struct { + char *str; // pointer to allocated string + size_t size; // size of allocation + size_t len; // length of string, not including terminating zero +} string_t; + +// Clear a string_t. +local void string_clear(string_t *s) { + s->str[0] = 0; + s->len = 0; +} + +// Initialize a string_t. +local void string_init(string_t *s) { + s->size = 16; + s->str = malloc(s->size); + assert(s->str != NULL && "out of memory"); + string_clear(s); +} + +// Release the allocation of a string_t. +local void string_free(string_t *s) { + free(s->str); + s->str = NULL; + s->size = 0; + s->len = 0; +} + +// Save the results of printf with fmt and the subsequent argument list to s. +// Each call appends to s. The allocated space for s is increased as needed. +local void string_printf(string_t *s, char *fmt, ...) { + va_list ap; + va_start(ap, fmt); + size_t len = s->len; + int ret = vsnprintf(s->str + len, s->size - len, fmt, ap); + assert(ret >= 0 && "out of memory"); + s->len += ret; + if (s->size < s->len + 1) { + do { + s->size <<= 1; + assert(s->size != 0 && "overflow"); + } while (s->size < s->len + 1); + s->str = realloc(s->str, s->size); + assert(s->str != NULL && "out of memory"); + vsnprintf(s->str + len, s->size - len, fmt, ap); + } + va_end(ap); +} + +// Globals to avoid propagating constants or constant pointers recursively. +struct { + int max; // maximum allowed bit length for the codes + int root; // size of base code table in bits + int large; // largest code table so far + size_t size; // number of elements in num and done + big_t tot; // total number of codes with maximum tables size + string_t out; // display of subcodes for maximum tables size + int *code; // number of symbols assigned to each bit length + big_t *num; // saved results array for code counting + struct tab *done; // states already evaluated array +} g; + +// Index function for num[] and done[]. +local inline size_t map(int syms, int left, int len) { + return ((size_t)((syms - 1) >> 1) * ((syms - 2) >> 1) + + (left >> 1) - 1) * (g.max - 1) + + len - 1; +} + +// Free allocated space in globals. +local void cleanup(void) { + if (g.done != NULL) { + for (size_t n = 0; n < g.size; n++) + if (g.done[n].len) + free(g.done[n].vec); + g.size = 0; + free(g.done); g.done = NULL; + } + free(g.num); g.num = NULL; + free(g.code); g.code = NULL; + string_free(&g.out); +} + +// Return the number of possible prefix codes using bit patterns of lengths len +// through max inclusive, coding syms symbols, with left bit patterns of length +// len unused -- return -1 if there is an overflow in the counting. Keep a +// record of previous results in num to prevent repeating the same calculation. +local big_t count(int syms, int left, int len) { + // see if only one possible code + if (syms == left) + return 1; + + // note and verify the expected state + assert(syms > left && left > 0 && len < g.max); + + // see if we've done this one already + size_t index = map(syms, left, len); + big_t got = g.num[index]; + if (got) + return got; // we have -- return the saved result + + // we need to use at least this many bit patterns so that the code won't be + // incomplete at the next length (more bit patterns than symbols) + int least = (left << 1) - syms; + if (least < 0) + least = 0; + + // we can use at most this many bit patterns, lest there not be enough + // available for the remaining symbols at the maximum length (if there were + // no limit to the code length, this would become: most = left - 1) + int most = (((code_t)left << (g.max - len)) - syms) / + (((code_t)1 << (g.max - len)) - 1); + + // count all possible codes from this juncture and add them up + big_t sum = 0; + for (int use = least; use <= most; use++) { + got = count(syms - use, (left - use) << 1, len + 1); + sum += got; + if (got == (big_t)-1 || sum < got) // overflow + return (big_t)-1; + } + + // verify that all recursive calls are productive + assert(sum != 0); + + // save the result and return it + g.num[index] = sum; + return sum; +} + +// Return true if we've been here before, set to true if not. Set a bit in a +// bit vector to indicate visiting this state. Each (syms,len,left) state has a +// variable size bit vector indexed by (mem,rem). The bit vector is lengthened +// as needed to allow setting the (mem,rem) bit. +local int been_here(int syms, int left, int len, int mem, int rem) { + // point to vector for (syms,left,len), bit in vector for (mem,rem) + size_t index = map(syms, left, len); + mem -= 1 << g.root; // mem always includes the root table + mem >>= 1; // mem and rem are always even + rem >>= 1; + size_t offset = (mem >> 3) + rem; + offset = ((offset * (offset + 1)) >> 1) + rem; + int bit = 1 << (mem & 7); + + // see if we've been here + size_t length = g.done[index].len; + if (offset < length && (g.done[index].vec[offset] & bit) != 0) + return 1; // done this! + + // we haven't been here before -- set the bit to show we have now + + // see if we need to lengthen the vector in order to set the bit + if (length <= offset) { + // if we have one already, enlarge it, zero out the appended space + char *vector; + if (length) { + do { + length <<= 1; + } while (length <= offset); + vector = realloc(g.done[index].vec, length); + assert(vector != NULL && "out of memory"); + memset(vector + g.done[index].len, 0, length - g.done[index].len); + } + + // otherwise we need to make a new vector and zero it out + else { + length = 16; + while (length <= offset) + length <<= 1; + vector = calloc(length, 1); + assert(vector != NULL && "out of memory"); + } + + // install the new vector + g.done[index].len = length; + g.done[index].vec = vector; + } + + // set the bit + g.done[index].vec[offset] |= bit; + return 0; +} + +// Examine all possible codes from the given node (syms, len, left). Compute +// the amount of memory required to build inflate's decoding tables, where the +// number of code structures used so far is mem, and the number remaining in +// the current sub-table is rem. +local void examine(int syms, int left, int len, int mem, int rem) { + // see if we have a complete code + if (syms == left) { + // set the last code entry + g.code[len] = left; + + // complete computation of memory used by this code + while (rem < left) { + left -= rem; + rem = 1 << (len - g.root); + mem += rem; + } + assert(rem == left); + + // if this is at the maximum, show the sub-code + if (mem >= g.large) { + // if this is a new maximum, update the maximum and clear out the + // printed sub-codes from the previous maximum + if (mem > g.large) { + g.large = mem; + string_clear(&g.out); + } + + // compute the starting state for this sub-code + syms = 0; + left = 1 << g.max; + for (int bits = g.max; bits > g.root; bits--) { + syms += g.code[bits]; + left -= g.code[bits]; + assert((left & 1) == 0); + left >>= 1; + } + + // print the starting state and the resulting sub-code to g.out + string_printf(&g.out, "<%u, %u, %u>:", + syms, g.root + 1, ((1 << g.root) - left) << 1); + for (int bits = g.root + 1; bits <= g.max; bits++) + if (g.code[bits]) + string_printf(&g.out, " %d[%d]", g.code[bits], bits); + string_printf(&g.out, "\n"); + } + + // remove entries as we drop back down in the recursion + g.code[len] = 0; + return; + } + + // prune the tree if we can + if (been_here(syms, left, len, mem, rem)) + return; + + // we need to use at least this many bit patterns so that the code won't be + // incomplete at the next length (more bit patterns than symbols) + int least = (left << 1) - syms; + if (least < 0) + least = 0; + + // we can use at most this many bit patterns, lest there not be enough + // available for the remaining symbols at the maximum length (if there were + // no limit to the code length, this would become: most = left - 1) + int most = (((code_t)left << (g.max - len)) - syms) / + (((code_t)1 << (g.max - len)) - 1); + + // occupy least table spaces, creating new sub-tables as needed + int use = least; + while (rem < use) { + use -= rem; + rem = 1 << (len - g.root); + mem += rem; + } + rem -= use; + + // examine codes from here, updating table space as we go + for (use = least; use <= most; use++) { + g.code[len] = use; + examine(syms - use, (left - use) << 1, len + 1, + mem + (rem ? 1 << (len - g.root) : 0), rem << 1); + if (rem == 0) { + rem = 1 << (len - g.root); + mem += rem; + } + rem--; + } + + // remove entries as we drop back down in the recursion + g.code[len] = 0; +} + +// Look at all sub-codes starting with root + 1 bits. Look at only the valid +// intermediate code states (syms, left, len). For each completed code, +// calculate the amount of memory required by inflate to build the decoding +// tables. Find the maximum amount of memory required and show the codes that +// require that maximum. +local void enough(int syms) { + // clear code + for (int n = 0; n <= g.max; n++) + g.code[n] = 0; + + // look at all (root + 1) bit and longer codes + string_clear(&g.out); // empty saved results + g.large = 1 << g.root; // base table + if (g.root < g.max) // otherwise, there's only a base table + for (int n = 3; n <= syms; n++) + for (int left = 2; left < n; left += 2) { + // look at all reachable (root + 1) bit nodes, and the + // resulting codes (complete at root + 2 or more) + size_t index = map(n, left, g.root + 1); + if (g.root + 1 < g.max && g.num[index]) // reachable node + examine(n, left, g.root + 1, 1 << g.root, 0); + + // also look at root bit codes with completions at root + 1 + // bits (not saved in num, since complete), just in case + if (g.num[index - 1] && n <= left << 1) + examine((n - left) << 1, (n - left) << 1, g.root + 1, + 1 << g.root, 0); + } + + // done + printf("maximum of %d table entries for root = %d\n", g.large, g.root); + fputs(g.out.str, stdout); +} + +// Examine and show the total number of possible prefix codes for a given +// maximum number of symbols, initial root table size, and maximum code length +// in bits -- those are the command arguments in that order. The default values +// are 286, 9, and 15 respectively, for the deflate literal/length code. The +// possible codes are counted for each number of coded symbols from two to the +// maximum. The counts for each of those and the total number of codes are +// shown. The maximum number of inflate table entries is then calculated across +// all possible codes. Each new maximum number of table entries and the +// associated sub-code (starting at root + 1 == 10 bits) is shown. +// +// To count and examine prefix codes that are not length-limited, provide a +// maximum length equal to the number of symbols minus one. +// +// For the deflate literal/length code, use "enough". For the deflate distance +// code, use "enough 30 6". +int main(int argc, char **argv) { + // set up globals for cleanup() + g.code = NULL; + g.num = NULL; + g.done = NULL; + string_init(&g.out); + + // get arguments -- default to the deflate literal/length code + int syms = 286; + g.root = 9; + g.max = 15; + if (argc > 1) { + syms = atoi(argv[1]); + if (argc > 2) { + g.root = atoi(argv[2]); + if (argc > 3) + g.max = atoi(argv[3]); + } + } + if (argc > 4 || syms < 2 || g.root < 1 || g.max < 1) { + fputs("invalid arguments, need: [sym >= 2 [root >= 1 [max >= 1]]]\n", + stderr); + return 1; + } + + // if not restricting the code length, the longest is syms - 1 + if (g.max > syms - 1) + g.max = syms - 1; + + // determine the number of bits in a code_t + int bits = 0; + for (code_t word = 1; word; word <<= 1) + bits++; + + // make sure that the calculation of most will not overflow + if (g.max > bits || (code_t)(syms - 2) >= ((code_t)-1 >> (g.max - 1))) { + fputs("abort: code length too long for internal types\n", stderr); + return 1; + } + + // reject impossible code requests + if ((code_t)(syms - 1) > ((code_t)1 << g.max) - 1) { + fprintf(stderr, "%d symbols cannot be coded in %d bits\n", + syms, g.max); + return 1; + } + + // allocate code vector + g.code = calloc(g.max + 1, sizeof(int)); + assert(g.code != NULL && "out of memory"); + + // determine size of saved results array, checking for overflows, + // allocate and clear the array (set all to zero with calloc()) + if (syms == 2) // iff max == 1 + g.num = NULL; // won't be saving any results + else { + g.size = syms >> 1; + int n = (syms - 1) >> 1; + assert(g.size <= (size_t)-1 / n && "overflow"); + g.size *= n; + n = g.max - 1; + assert(g.size <= (size_t)-1 / n && "overflow"); + g.size *= n; + g.num = calloc(g.size, sizeof(big_t)); + assert(g.num != NULL && "out of memory"); + } + + // count possible codes for all numbers of symbols, add up counts + big_t sum = 0; + for (int n = 2; n <= syms; n++) { + big_t got = count(n, 2, 1); + sum += got; + assert(got != (big_t)-1 && sum >= got && "overflow"); + } + printf("%"PRIbig" total codes for 2 to %d symbols", sum, syms); + if (g.max < syms - 1) + printf(" (%d-bit length limit)\n", g.max); + else + puts(" (no length limit)"); + + // allocate and clear done array for been_here() + if (syms == 2) + g.done = NULL; + else { + g.done = calloc(g.size, sizeof(struct tab)); + assert(g.done != NULL && "out of memory"); + } + + // find and show maximum inflate table usage + if (g.root > g.max) // reduce root to max length + g.root = g.max; + if ((code_t)syms < ((code_t)1 << (g.root + 1))) + enough(syms); + else + fputs("cannot handle minimum code lengths > root", stderr); + + // done + cleanup(); + return 0; +} diff --git a/thirdparty/zlib-1.3.1/examples/fitblk.c b/thirdparty/zlib-1.3.1/examples/fitblk.c new file mode 100644 index 0000000..723dc00 --- /dev/null +++ b/thirdparty/zlib-1.3.1/examples/fitblk.c @@ -0,0 +1,233 @@ +/* fitblk.c: example of fitting compressed output to a specified size + Not copyrighted -- provided to the public domain + Version 1.1 25 November 2004 Mark Adler */ + +/* Version history: + 1.0 24 Nov 2004 First version + 1.1 25 Nov 2004 Change deflateInit2() to deflateInit() + Use fixed-size, stack-allocated raw buffers + Simplify code moving compression to subroutines + Use assert() for internal errors + Add detailed description of approach + */ + +/* Approach to just fitting a requested compressed size: + + fitblk performs three compression passes on a portion of the input + data in order to determine how much of that input will compress to + nearly the requested output block size. The first pass generates + enough deflate blocks to produce output to fill the requested + output size plus a specified excess amount (see the EXCESS define + below). The last deflate block may go quite a bit past that, but + is discarded. The second pass decompresses and recompresses just + the compressed data that fit in the requested plus excess sized + buffer. The deflate process is terminated after that amount of + input, which is less than the amount consumed on the first pass. + The last deflate block of the result will be of a comparable size + to the final product, so that the header for that deflate block and + the compression ratio for that block will be about the same as in + the final product. The third compression pass decompresses the + result of the second step, but only the compressed data up to the + requested size minus an amount to allow the compressed stream to + complete (see the MARGIN define below). That will result in a + final compressed stream whose length is less than or equal to the + requested size. Assuming sufficient input and a requested size + greater than a few hundred bytes, the shortfall will typically be + less than ten bytes. + + If the input is short enough that the first compression completes + before filling the requested output size, then that compressed + stream is return with no recompression. + + EXCESS is chosen to be just greater than the shortfall seen in a + two pass approach similar to the above. That shortfall is due to + the last deflate block compressing more efficiently with a smaller + header on the second pass. EXCESS is set to be large enough so + that there is enough uncompressed data for the second pass to fill + out the requested size, and small enough so that the final deflate + block of the second pass will be close in size to the final deflate + block of the third and final pass. MARGIN is chosen to be just + large enough to assure that the final compression has enough room + to complete in all cases. + */ + +#include +#include +#include +#include "zlib.h" + +#define local static + +/* print nastygram and leave */ +local void quit(char *why) +{ + fprintf(stderr, "fitblk abort: %s\n", why); + exit(1); +} + +#define RAWLEN 4096 /* intermediate uncompressed buffer size */ + +/* compress from file to def until provided buffer is full or end of + input reached; return last deflate() return value, or Z_ERRNO if + there was read error on the file */ +local int partcompress(FILE *in, z_streamp def) +{ + int ret, flush; + unsigned char raw[RAWLEN]; + + flush = Z_NO_FLUSH; + do { + def->avail_in = fread(raw, 1, RAWLEN, in); + if (ferror(in)) + return Z_ERRNO; + def->next_in = raw; + if (feof(in)) + flush = Z_FINISH; + ret = deflate(def, flush); + assert(ret != Z_STREAM_ERROR); + } while (def->avail_out != 0 && flush == Z_NO_FLUSH); + return ret; +} + +/* recompress from inf's input to def's output; the input for inf and + the output for def are set in those structures before calling; + return last deflate() return value, or Z_MEM_ERROR if inflate() + was not able to allocate enough memory when it needed to */ +local int recompress(z_streamp inf, z_streamp def) +{ + int ret, flush; + unsigned char raw[RAWLEN]; + + flush = Z_NO_FLUSH; + do { + /* decompress */ + inf->avail_out = RAWLEN; + inf->next_out = raw; + ret = inflate(inf, Z_NO_FLUSH); + assert(ret != Z_STREAM_ERROR && ret != Z_DATA_ERROR && + ret != Z_NEED_DICT); + if (ret == Z_MEM_ERROR) + return ret; + + /* compress what was decompressed until done or no room */ + def->avail_in = RAWLEN - inf->avail_out; + def->next_in = raw; + if (inf->avail_out != 0) + flush = Z_FINISH; + ret = deflate(def, flush); + assert(ret != Z_STREAM_ERROR); + } while (ret != Z_STREAM_END && def->avail_out != 0); + return ret; +} + +#define EXCESS 256 /* empirically determined stream overage */ +#define MARGIN 8 /* amount to back off for completion */ + +/* compress from stdin to fixed-size block on stdout */ +int main(int argc, char **argv) +{ + int ret; /* return code */ + unsigned size; /* requested fixed output block size */ + unsigned have; /* bytes written by deflate() call */ + unsigned char *blk; /* intermediate and final stream */ + unsigned char *tmp; /* close to desired size stream */ + z_stream def, inf; /* zlib deflate and inflate states */ + + /* get requested output size */ + if (argc != 2) + quit("need one argument: size of output block"); + ret = strtol(argv[1], argv + 1, 10); + if (argv[1][0] != 0) + quit("argument must be a number"); + if (ret < 8) /* 8 is minimum zlib stream size */ + quit("need positive size of 8 or greater"); + size = (unsigned)ret; + + /* allocate memory for buffers and compression engine */ + blk = malloc(size + EXCESS); + def.zalloc = Z_NULL; + def.zfree = Z_NULL; + def.opaque = Z_NULL; + ret = deflateInit(&def, Z_DEFAULT_COMPRESSION); + if (ret != Z_OK || blk == NULL) + quit("out of memory"); + + /* compress from stdin until output full, or no more input */ + def.avail_out = size + EXCESS; + def.next_out = blk; + ret = partcompress(stdin, &def); + if (ret == Z_ERRNO) + quit("error reading input"); + + /* if it all fit, then size was undersubscribed -- done! */ + if (ret == Z_STREAM_END && def.avail_out >= EXCESS) { + /* write block to stdout */ + have = size + EXCESS - def.avail_out; + if (fwrite(blk, 1, have, stdout) != have || ferror(stdout)) + quit("error writing output"); + + /* clean up and print results to stderr */ + ret = deflateEnd(&def); + assert(ret != Z_STREAM_ERROR); + free(blk); + fprintf(stderr, + "%u bytes unused out of %u requested (all input)\n", + size - have, size); + return 0; + } + + /* it didn't all fit -- set up for recompression */ + inf.zalloc = Z_NULL; + inf.zfree = Z_NULL; + inf.opaque = Z_NULL; + inf.avail_in = 0; + inf.next_in = Z_NULL; + ret = inflateInit(&inf); + tmp = malloc(size + EXCESS); + if (ret != Z_OK || tmp == NULL) + quit("out of memory"); + ret = deflateReset(&def); + assert(ret != Z_STREAM_ERROR); + + /* do first recompression close to the right amount */ + inf.avail_in = size + EXCESS; + inf.next_in = blk; + def.avail_out = size + EXCESS; + def.next_out = tmp; + ret = recompress(&inf, &def); + if (ret == Z_MEM_ERROR) + quit("out of memory"); + + /* set up for next recompression */ + ret = inflateReset(&inf); + assert(ret != Z_STREAM_ERROR); + ret = deflateReset(&def); + assert(ret != Z_STREAM_ERROR); + + /* do second and final recompression (third compression) */ + inf.avail_in = size - MARGIN; /* assure stream will complete */ + inf.next_in = tmp; + def.avail_out = size; + def.next_out = blk; + ret = recompress(&inf, &def); + if (ret == Z_MEM_ERROR) + quit("out of memory"); + assert(ret == Z_STREAM_END); /* otherwise MARGIN too small */ + + /* done -- write block to stdout */ + have = size - def.avail_out; + if (fwrite(blk, 1, have, stdout) != have || ferror(stdout)) + quit("error writing output"); + + /* clean up and print results to stderr */ + free(tmp); + ret = inflateEnd(&inf); + assert(ret != Z_STREAM_ERROR); + ret = deflateEnd(&def); + assert(ret != Z_STREAM_ERROR); + free(blk); + fprintf(stderr, + "%u bytes unused out of %u requested (%lu input)\n", + size - have, size, def.total_in); + return 0; +} diff --git a/thirdparty/zlib-1.3.1/examples/gun.c b/thirdparty/zlib-1.3.1/examples/gun.c new file mode 100644 index 0000000..bea5497 --- /dev/null +++ b/thirdparty/zlib-1.3.1/examples/gun.c @@ -0,0 +1,702 @@ +/* gun.c -- simple gunzip to give an example of the use of inflateBack() + * Copyright (C) 2003, 2005, 2008, 2010, 2012 Mark Adler + * For conditions of distribution and use, see copyright notice in zlib.h + Version 1.7 12 August 2012 Mark Adler */ + +/* Version history: + 1.0 16 Feb 2003 First version for testing of inflateBack() + 1.1 21 Feb 2005 Decompress concatenated gzip streams + Remove use of "this" variable (C++ keyword) + Fix return value for in() + Improve allocation failure checking + Add typecasting for void * structures + Add -h option for command version and usage + Add a bunch of comments + 1.2 20 Mar 2005 Add Unix compress (LZW) decompression + Copy file attributes from input file to output file + 1.3 12 Jun 2005 Add casts for error messages [Oberhumer] + 1.4 8 Dec 2006 LZW decompression speed improvements + 1.5 9 Feb 2008 Avoid warning in latest version of gcc + 1.6 17 Jan 2010 Avoid signed/unsigned comparison warnings + 1.7 12 Aug 2012 Update for z_const usage in zlib 1.2.8 + */ + +/* + gun [ -t ] [ name ... ] + + decompresses the data in the named gzip files. If no arguments are given, + gun will decompress from stdin to stdout. The names must end in .gz, -gz, + .z, -z, _z, or .Z. The uncompressed data will be written to a file name + with the suffix stripped. On success, the original file is deleted. On + failure, the output file is deleted. For most failures, the command will + continue to process the remaining names on the command line. A memory + allocation failure will abort the command. If -t is specified, then the + listed files or stdin will be tested as gzip files for integrity (without + checking for a proper suffix), no output will be written, and no files + will be deleted. + + Like gzip, gun allows concatenated gzip streams and will decompress them, + writing all of the uncompressed data to the output. Unlike gzip, gun allows + an empty file on input, and will produce no error writing an empty output + file. + + gun will also decompress files made by Unix compress, which uses LZW + compression. These files are automatically detected by virtue of their + magic header bytes. Since the end of Unix compress stream is marked by the + end-of-file, they cannot be concatenated. If a Unix compress stream is + encountered in an input file, it is the last stream in that file. + + Like gunzip and uncompress, the file attributes of the original compressed + file are maintained in the final uncompressed file, to the extent that the + user permissions allow it. + + On my Mac OS X PowerPC G4, gun is almost twice as fast as gunzip (version + 1.2.4) is on the same file, when gun is linked with zlib 1.2.2. Also the + LZW decompression provided by gun is about twice as fast as the standard + Unix uncompress command. + */ + +/* external functions and related types and constants */ +#include /* fprintf() */ +#include /* malloc(), free() */ +#include /* strerror(), strcmp(), strlen(), memcpy() */ +#include /* errno */ +#include /* open() */ +#include /* read(), write(), close(), chown(), unlink() */ +#include +#include /* stat(), chmod() */ +#include /* utime() */ +#include "zlib.h" /* inflateBackInit(), inflateBack(), */ + /* inflateBackEnd(), crc32() */ + +/* function declaration */ +#define local static + +/* buffer constants */ +#define SIZE 32768U /* input and output buffer sizes */ +#define PIECE 16384 /* limits i/o chunks for 16-bit int case */ + +/* structure for infback() to pass to input function in() -- it maintains the + input file and a buffer of size SIZE */ +struct ind { + int infile; + unsigned char *inbuf; +}; + +/* Load input buffer, assumed to be empty, and return bytes loaded and a + pointer to them. read() is called until the buffer is full, or until it + returns end-of-file or error. Return 0 on error. */ +local unsigned in(void *in_desc, z_const unsigned char **buf) +{ + int ret; + unsigned len; + unsigned char *next; + struct ind *me = (struct ind *)in_desc; + + next = me->inbuf; + *buf = next; + len = 0; + do { + ret = PIECE; + if ((unsigned)ret > SIZE - len) + ret = (int)(SIZE - len); + ret = (int)read(me->infile, next, ret); + if (ret == -1) { + len = 0; + break; + } + next += ret; + len += ret; + } while (ret != 0 && len < SIZE); + return len; +} + +/* structure for infback() to pass to output function out() -- it maintains the + output file, a running CRC-32 check on the output and the total number of + bytes output, both for checking against the gzip trailer. (The length in + the gzip trailer is stored modulo 2^32, so it's ok if a long is 32 bits and + the output is greater than 4 GB.) */ +struct outd { + int outfile; + int check; /* true if checking crc and total */ + unsigned long crc; + unsigned long total; +}; + +/* Write output buffer and update the CRC-32 and total bytes written. write() + is called until all of the output is written or an error is encountered. + On success out() returns 0. For a write failure, out() returns 1. If the + output file descriptor is -1, then nothing is written. + */ +local int out(void *out_desc, unsigned char *buf, unsigned len) +{ + int ret; + struct outd *me = (struct outd *)out_desc; + + if (me->check) { + me->crc = crc32(me->crc, buf, len); + me->total += len; + } + if (me->outfile != -1) + do { + ret = PIECE; + if ((unsigned)ret > len) + ret = (int)len; + ret = (int)write(me->outfile, buf, ret); + if (ret == -1) + return 1; + buf += ret; + len -= ret; + } while (len != 0); + return 0; +} + +/* next input byte macro for use inside lunpipe() and gunpipe() */ +#define NEXT() (have ? 0 : (have = in(indp, &next)), \ + last = have ? (have--, (int)(*next++)) : -1) + +/* memory for gunpipe() and lunpipe() -- + the first 256 entries of prefix[] and suffix[] are never used, could + have offset the index, but it's faster to waste the memory */ +unsigned char inbuf[SIZE]; /* input buffer */ +unsigned char outbuf[SIZE]; /* output buffer */ +unsigned short prefix[65536]; /* index to LZW prefix string */ +unsigned char suffix[65536]; /* one-character LZW suffix */ +unsigned char match[65280 + 2]; /* buffer for reversed match or gzip + 32K sliding window */ + +/* throw out what's left in the current bits byte buffer (this is a vestigial + aspect of the compressed data format derived from an implementation that + made use of a special VAX machine instruction!) */ +#define FLUSHCODE() \ + do { \ + left = 0; \ + rem = 0; \ + if (chunk > have) { \ + chunk -= have; \ + have = 0; \ + if (NEXT() == -1) \ + break; \ + chunk--; \ + if (chunk > have) { \ + chunk = have = 0; \ + break; \ + } \ + } \ + have -= chunk; \ + next += chunk; \ + chunk = 0; \ + } while (0) + +/* Decompress a compress (LZW) file from indp to outfile. The compress magic + header (two bytes) has already been read and verified. There are have bytes + of buffered input at next. strm is used for passing error information back + to gunpipe(). + + lunpipe() will return Z_OK on success, Z_BUF_ERROR for an unexpected end of + file, read error, or write error (a write error indicated by strm->next_in + not equal to Z_NULL), or Z_DATA_ERROR for invalid input. + */ +local int lunpipe(unsigned have, z_const unsigned char *next, struct ind *indp, + int outfile, z_stream *strm) +{ + int last; /* last byte read by NEXT(), or -1 if EOF */ + unsigned chunk; /* bytes left in current chunk */ + int left; /* bits left in rem */ + unsigned rem; /* unused bits from input */ + int bits; /* current bits per code */ + unsigned code; /* code, table traversal index */ + unsigned mask; /* mask for current bits codes */ + int max; /* maximum bits per code for this stream */ + unsigned flags; /* compress flags, then block compress flag */ + unsigned end; /* last valid entry in prefix/suffix tables */ + unsigned temp; /* current code */ + unsigned prev; /* previous code */ + unsigned final; /* last character written for previous code */ + unsigned stack; /* next position for reversed string */ + unsigned outcnt; /* bytes in output buffer */ + struct outd outd; /* output structure */ + unsigned char *p; + + /* set up output */ + outd.outfile = outfile; + outd.check = 0; + + /* process remainder of compress header -- a flags byte */ + flags = NEXT(); + if (last == -1) + return Z_BUF_ERROR; + if (flags & 0x60) { + strm->msg = (char *)"unknown lzw flags set"; + return Z_DATA_ERROR; + } + max = flags & 0x1f; + if (max < 9 || max > 16) { + strm->msg = (char *)"lzw bits out of range"; + return Z_DATA_ERROR; + } + if (max == 9) /* 9 doesn't really mean 9 */ + max = 10; + flags &= 0x80; /* true if block compress */ + + /* clear table */ + bits = 9; + mask = 0x1ff; + end = flags ? 256 : 255; + + /* set up: get first 9-bit code, which is the first decompressed byte, but + don't create a table entry until the next code */ + if (NEXT() == -1) /* no compressed data is ok */ + return Z_OK; + final = prev = (unsigned)last; /* low 8 bits of code */ + if (NEXT() == -1) /* missing a bit */ + return Z_BUF_ERROR; + if (last & 1) { /* code must be < 256 */ + strm->msg = (char *)"invalid lzw code"; + return Z_DATA_ERROR; + } + rem = (unsigned)last >> 1; /* remaining 7 bits */ + left = 7; + chunk = bits - 2; /* 7 bytes left in this chunk */ + outbuf[0] = (unsigned char)final; /* write first decompressed byte */ + outcnt = 1; + + /* decode codes */ + stack = 0; + for (;;) { + /* if the table will be full after this, increment the code size */ + if (end >= mask && bits < max) { + FLUSHCODE(); + bits++; + mask <<= 1; + mask++; + } + + /* get a code of length bits */ + if (chunk == 0) /* decrement chunk modulo bits */ + chunk = bits; + code = rem; /* low bits of code */ + if (NEXT() == -1) { /* EOF is end of compressed data */ + /* write remaining buffered output */ + if (outcnt && out(&outd, outbuf, outcnt)) { + strm->next_in = outbuf; /* signal write error */ + return Z_BUF_ERROR; + } + return Z_OK; + } + code += (unsigned)last << left; /* middle (or high) bits of code */ + left += 8; + chunk--; + if (bits > left) { /* need more bits */ + if (NEXT() == -1) /* can't end in middle of code */ + return Z_BUF_ERROR; + code += (unsigned)last << left; /* high bits of code */ + left += 8; + chunk--; + } + code &= mask; /* mask to current code length */ + left -= bits; /* number of unused bits */ + rem = (unsigned)last >> (8 - left); /* unused bits from last byte */ + + /* process clear code (256) */ + if (code == 256 && flags) { + FLUSHCODE(); + bits = 9; /* initialize bits and mask */ + mask = 0x1ff; + end = 255; /* empty table */ + continue; /* get next code */ + } + + /* special code to reuse last match */ + temp = code; /* save the current code */ + if (code > end) { + /* Be picky on the allowed code here, and make sure that the code + we drop through (prev) will be a valid index so that random + input does not cause an exception. The code != end + 1 check is + empirically derived, and not checked in the original uncompress + code. If this ever causes a problem, that check could be safely + removed. Leaving this check in greatly improves gun's ability + to detect random or corrupted input after a compress header. + In any case, the prev > end check must be retained. */ + if (code != end + 1 || prev > end) { + strm->msg = (char *)"invalid lzw code"; + return Z_DATA_ERROR; + } + match[stack++] = (unsigned char)final; + code = prev; + } + + /* walk through linked list to generate output in reverse order */ + p = match + stack; + while (code >= 256) { + *p++ = suffix[code]; + code = prefix[code]; + } + stack = p - match; + match[stack++] = (unsigned char)code; + final = code; + + /* link new table entry */ + if (end < mask) { + end++; + prefix[end] = (unsigned short)prev; + suffix[end] = (unsigned char)final; + } + + /* set previous code for next iteration */ + prev = temp; + + /* write output in forward order */ + while (stack > SIZE - outcnt) { + while (outcnt < SIZE) + outbuf[outcnt++] = match[--stack]; + if (out(&outd, outbuf, outcnt)) { + strm->next_in = outbuf; /* signal write error */ + return Z_BUF_ERROR; + } + outcnt = 0; + } + p = match + stack; + do { + outbuf[outcnt++] = *--p; + } while (p > match); + stack = 0; + + /* loop for next code with final and prev as the last match, rem and + left provide the first 0..7 bits of the next code, end is the last + valid table entry */ + } +} + +/* Decompress a gzip file from infile to outfile. strm is assumed to have been + successfully initialized with inflateBackInit(). The input file may consist + of a series of gzip streams, in which case all of them will be decompressed + to the output file. If outfile is -1, then the gzip stream(s) integrity is + checked and nothing is written. + + The return value is a zlib error code: Z_MEM_ERROR if out of memory, + Z_DATA_ERROR if the header or the compressed data is invalid, or if the + trailer CRC-32 check or length doesn't match, Z_BUF_ERROR if the input ends + prematurely or a write error occurs, or Z_ERRNO if junk (not a another gzip + stream) follows a valid gzip stream. + */ +local int gunpipe(z_stream *strm, int infile, int outfile) +{ + int ret, first, last; + unsigned have, flags, len; + z_const unsigned char *next = NULL; + struct ind ind, *indp; + struct outd outd; + + /* setup input buffer */ + ind.infile = infile; + ind.inbuf = inbuf; + indp = &ind; + + /* decompress concatenated gzip streams */ + have = 0; /* no input data read in yet */ + first = 1; /* looking for first gzip header */ + strm->next_in = Z_NULL; /* so Z_BUF_ERROR means EOF */ + for (;;) { + /* look for the two magic header bytes for a gzip stream */ + if (NEXT() == -1) { + ret = Z_OK; + break; /* empty gzip stream is ok */ + } + if (last != 31 || (NEXT() != 139 && last != 157)) { + strm->msg = (char *)"incorrect header check"; + ret = first ? Z_DATA_ERROR : Z_ERRNO; + break; /* not a gzip or compress header */ + } + first = 0; /* next non-header is junk */ + + /* process a compress (LZW) file -- can't be concatenated after this */ + if (last == 157) { + ret = lunpipe(have, next, indp, outfile, strm); + break; + } + + /* process remainder of gzip header */ + ret = Z_BUF_ERROR; + if (NEXT() != 8) { /* only deflate method allowed */ + if (last == -1) break; + strm->msg = (char *)"unknown compression method"; + ret = Z_DATA_ERROR; + break; + } + flags = NEXT(); /* header flags */ + NEXT(); /* discard mod time, xflgs, os */ + NEXT(); + NEXT(); + NEXT(); + NEXT(); + NEXT(); + if (last == -1) break; + if (flags & 0xe0) { + strm->msg = (char *)"unknown header flags set"; + ret = Z_DATA_ERROR; + break; + } + if (flags & 4) { /* extra field */ + len = NEXT(); + len += (unsigned)(NEXT()) << 8; + if (last == -1) break; + while (len > have) { + len -= have; + have = 0; + if (NEXT() == -1) break; + len--; + } + if (last == -1) break; + have -= len; + next += len; + } + if (flags & 8) /* file name */ + while (NEXT() != 0 && last != -1) + ; + if (flags & 16) /* comment */ + while (NEXT() != 0 && last != -1) + ; + if (flags & 2) { /* header crc */ + NEXT(); + NEXT(); + } + if (last == -1) break; + + /* set up output */ + outd.outfile = outfile; + outd.check = 1; + outd.crc = crc32(0L, Z_NULL, 0); + outd.total = 0; + + /* decompress data to output */ + strm->next_in = next; + strm->avail_in = have; + ret = inflateBack(strm, in, indp, out, &outd); + if (ret != Z_STREAM_END) break; + next = strm->next_in; + have = strm->avail_in; + strm->next_in = Z_NULL; /* so Z_BUF_ERROR means EOF */ + + /* check trailer */ + ret = Z_BUF_ERROR; + if (NEXT() != (int)(outd.crc & 0xff) || + NEXT() != (int)((outd.crc >> 8) & 0xff) || + NEXT() != (int)((outd.crc >> 16) & 0xff) || + NEXT() != (int)((outd.crc >> 24) & 0xff)) { + /* crc error */ + if (last != -1) { + strm->msg = (char *)"incorrect data check"; + ret = Z_DATA_ERROR; + } + break; + } + if (NEXT() != (int)(outd.total & 0xff) || + NEXT() != (int)((outd.total >> 8) & 0xff) || + NEXT() != (int)((outd.total >> 16) & 0xff) || + NEXT() != (int)((outd.total >> 24) & 0xff)) { + /* length error */ + if (last != -1) { + strm->msg = (char *)"incorrect length check"; + ret = Z_DATA_ERROR; + } + break; + } + + /* go back and look for another gzip stream */ + } + + /* clean up and return */ + return ret; +} + +/* Copy file attributes, from -> to, as best we can. This is best effort, so + no errors are reported. The mode bits, including suid, sgid, and the sticky + bit are copied (if allowed), the owner's user id and group id are copied + (again if allowed), and the access and modify times are copied. */ +local void copymeta(char *from, char *to) +{ + struct stat was; + struct utimbuf when; + + /* get all of from's Unix meta data, return if not a regular file */ + if (stat(from, &was) != 0 || (was.st_mode & S_IFMT) != S_IFREG) + return; + + /* set to's mode bits, ignore errors */ + (void)chmod(to, was.st_mode & 07777); + + /* copy owner's user and group, ignore errors */ + (void)chown(to, was.st_uid, was.st_gid); + + /* copy access and modify times, ignore errors */ + when.actime = was.st_atime; + when.modtime = was.st_mtime; + (void)utime(to, &when); +} + +/* Decompress the file inname to the file outnname, of if test is true, just + decompress without writing and check the gzip trailer for integrity. If + inname is NULL or an empty string, read from stdin. If outname is NULL or + an empty string, write to stdout. strm is a pre-initialized inflateBack + structure. When appropriate, copy the file attributes from inname to + outname. + + gunzip() returns 1 if there is an out-of-memory error or an unexpected + return code from gunpipe(). Otherwise it returns 0. + */ +local int gunzip(z_stream *strm, char *inname, char *outname, int test) +{ + int ret; + int infile, outfile; + + /* open files */ + if (inname == NULL || *inname == 0) { + inname = "-"; + infile = 0; /* stdin */ + } + else { + infile = open(inname, O_RDONLY, 0); + if (infile == -1) { + fprintf(stderr, "gun cannot open %s\n", inname); + return 0; + } + } + if (test) + outfile = -1; + else if (outname == NULL || *outname == 0) { + outname = "-"; + outfile = 1; /* stdout */ + } + else { + outfile = open(outname, O_CREAT | O_TRUNC | O_WRONLY, 0666); + if (outfile == -1) { + close(infile); + fprintf(stderr, "gun cannot create %s\n", outname); + return 0; + } + } + errno = 0; + + /* decompress */ + ret = gunpipe(strm, infile, outfile); + if (outfile > 2) close(outfile); + if (infile > 2) close(infile); + + /* interpret result */ + switch (ret) { + case Z_OK: + case Z_ERRNO: + if (infile > 2 && outfile > 2) { + copymeta(inname, outname); /* copy attributes */ + unlink(inname); + } + if (ret == Z_ERRNO) + fprintf(stderr, "gun warning: trailing garbage ignored in %s\n", + inname); + break; + case Z_DATA_ERROR: + if (outfile > 2) unlink(outname); + fprintf(stderr, "gun data error on %s: %s\n", inname, strm->msg); + break; + case Z_MEM_ERROR: + if (outfile > 2) unlink(outname); + fprintf(stderr, "gun out of memory error--aborting\n"); + return 1; + case Z_BUF_ERROR: + if (outfile > 2) unlink(outname); + if (strm->next_in != Z_NULL) { + fprintf(stderr, "gun write error on %s: %s\n", + outname, strerror(errno)); + } + else if (errno) { + fprintf(stderr, "gun read error on %s: %s\n", + inname, strerror(errno)); + } + else { + fprintf(stderr, "gun unexpected end of file on %s\n", + inname); + } + break; + default: + if (outfile > 2) unlink(outname); + fprintf(stderr, "gun internal error--aborting\n"); + return 1; + } + return 0; +} + +/* Process the gun command line arguments. See the command syntax near the + beginning of this source file. */ +int main(int argc, char **argv) +{ + int ret, len, test; + char *outname; + unsigned char *window; + z_stream strm; + + /* initialize inflateBack state for repeated use */ + window = match; /* reuse LZW match buffer */ + strm.zalloc = Z_NULL; + strm.zfree = Z_NULL; + strm.opaque = Z_NULL; + ret = inflateBackInit(&strm, 15, window); + if (ret != Z_OK) { + fprintf(stderr, "gun out of memory error--aborting\n"); + return 1; + } + + /* decompress each file to the same name with the suffix removed */ + argc--; + argv++; + test = 0; + if (argc && strcmp(*argv, "-h") == 0) { + fprintf(stderr, "gun 1.6 (17 Jan 2010)\n"); + fprintf(stderr, "Copyright (C) 2003-2010 Mark Adler\n"); + fprintf(stderr, "usage: gun [-t] [file1.gz [file2.Z ...]]\n"); + return 0; + } + if (argc && strcmp(*argv, "-t") == 0) { + test = 1; + argc--; + argv++; + } + if (argc) + do { + if (test) + outname = NULL; + else { + len = (int)strlen(*argv); + if (strcmp(*argv + len - 3, ".gz") == 0 || + strcmp(*argv + len - 3, "-gz") == 0) + len -= 3; + else if (strcmp(*argv + len - 2, ".z") == 0 || + strcmp(*argv + len - 2, "-z") == 0 || + strcmp(*argv + len - 2, "_z") == 0 || + strcmp(*argv + len - 2, ".Z") == 0) + len -= 2; + else { + fprintf(stderr, "gun error: no gz type on %s--skipping\n", + *argv); + continue; + } + outname = malloc(len + 1); + if (outname == NULL) { + fprintf(stderr, "gun out of memory error--aborting\n"); + ret = 1; + break; + } + memcpy(outname, *argv, len); + outname[len] = 0; + } + ret = gunzip(&strm, *argv, outname, test); + if (outname != NULL) free(outname); + if (ret) break; + } while (argv++, --argc); + else + ret = gunzip(&strm, NULL, NULL, test); + + /* clean up */ + inflateBackEnd(&strm); + return ret; +} diff --git a/thirdparty/zlib-1.3.1/examples/gzappend.c b/thirdparty/zlib-1.3.1/examples/gzappend.c new file mode 100644 index 0000000..23e93cf --- /dev/null +++ b/thirdparty/zlib-1.3.1/examples/gzappend.c @@ -0,0 +1,504 @@ +/* gzappend -- command to append to a gzip file + + Copyright (C) 2003, 2012 Mark Adler, all rights reserved + version 1.2, 11 Oct 2012 + + This software is provided 'as-is', without any express or implied + warranty. In no event will the author be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. + + Mark Adler madler@alumni.caltech.edu + */ + +/* + * Change history: + * + * 1.0 19 Oct 2003 - First version + * 1.1 4 Nov 2003 - Expand and clarify some comments and notes + * - Add version and copyright to help + * - Send help to stdout instead of stderr + * - Add some preemptive typecasts + * - Add L to constants in lseek() calls + * - Remove some debugging information in error messages + * - Use new data_type definition for zlib 1.2.1 + * - Simplify and unify file operations + * - Finish off gzip file in gztack() + * - Use deflatePrime() instead of adding empty blocks + * - Keep gzip file clean on appended file read errors + * - Use in-place rotate instead of auxiliary buffer + * (Why you ask? Because it was fun to write!) + * 1.2 11 Oct 2012 - Fix for proper z_const usage + * - Check for input buffer malloc failure + */ + +/* + gzappend takes a gzip file and appends to it, compressing files from the + command line or data from stdin. The gzip file is written to directly, to + avoid copying that file, in case it's large. Note that this results in the + unfriendly behavior that if gzappend fails, the gzip file is corrupted. + + This program was written to illustrate the use of the new Z_BLOCK option of + zlib 1.2.x's inflate() function. This option returns from inflate() at each + block boundary to facilitate locating and modifying the last block bit at + the start of the final deflate block. Also whether using Z_BLOCK or not, + another required feature of zlib 1.2.x is that inflate() now provides the + number of unused bits in the last input byte used. gzappend will not work + with versions of zlib earlier than 1.2.1. + + gzappend first decompresses the gzip file internally, discarding all but + the last 32K of uncompressed data, and noting the location of the last block + bit and the number of unused bits in the last byte of the compressed data. + The gzip trailer containing the CRC-32 and length of the uncompressed data + is verified. This trailer will be later overwritten. + + Then the last block bit is cleared by seeking back in the file and rewriting + the byte that contains it. Seeking forward, the last byte of the compressed + data is saved along with the number of unused bits to initialize deflate. + + A deflate process is initialized, using the last 32K of the uncompressed + data from the gzip file to initialize the dictionary. If the total + uncompressed data was less than 32K, then all of it is used to initialize + the dictionary. The deflate output bit buffer is also initialized with the + last bits from the original deflate stream. From here on, the data to + append is simply compressed using deflate, and written to the gzip file. + When that is complete, the new CRC-32 and uncompressed length are written + as the trailer of the gzip file. + */ + +#include +#include +#include +#include +#include +#include "zlib.h" + +#define local static +#define LGCHUNK 14 +#define CHUNK (1U << LGCHUNK) +#define DSIZE 32768U + +/* print an error message and terminate with extreme prejudice */ +local void bye(char *msg1, char *msg2) +{ + fprintf(stderr, "gzappend error: %s%s\n", msg1, msg2); + exit(1); +} + +/* return the greatest common divisor of a and b using Euclid's algorithm, + modified to be fast when one argument much greater than the other, and + coded to avoid unnecessary swapping */ +local unsigned gcd(unsigned a, unsigned b) +{ + unsigned c; + + while (a && b) + if (a > b) { + c = b; + while (a - c >= c) + c <<= 1; + a -= c; + } + else { + c = a; + while (b - c >= c) + c <<= 1; + b -= c; + } + return a + b; +} + +/* rotate list[0..len-1] left by rot positions, in place */ +local void rotate(unsigned char *list, unsigned len, unsigned rot) +{ + unsigned char tmp; + unsigned cycles; + unsigned char *start, *last, *to, *from; + + /* normalize rot and handle degenerate cases */ + if (len < 2) return; + if (rot >= len) rot %= len; + if (rot == 0) return; + + /* pointer to last entry in list */ + last = list + (len - 1); + + /* do simple left shift by one */ + if (rot == 1) { + tmp = *list; + memmove(list, list + 1, len - 1); + *last = tmp; + return; + } + + /* do simple right shift by one */ + if (rot == len - 1) { + tmp = *last; + memmove(list + 1, list, len - 1); + *list = tmp; + return; + } + + /* otherwise do rotate as a set of cycles in place */ + cycles = gcd(len, rot); /* number of cycles */ + do { + start = from = list + cycles; /* start index is arbitrary */ + tmp = *from; /* save entry to be overwritten */ + for (;;) { + to = from; /* next step in cycle */ + from += rot; /* go right rot positions */ + if (from > last) from -= len; /* (pointer better not wrap) */ + if (from == start) break; /* all but one shifted */ + *to = *from; /* shift left */ + } + *to = tmp; /* complete the circle */ + } while (--cycles); +} + +/* structure for gzip file read operations */ +typedef struct { + int fd; /* file descriptor */ + int size; /* 1 << size is bytes in buf */ + unsigned left; /* bytes available at next */ + unsigned char *buf; /* buffer */ + z_const unsigned char *next; /* next byte in buffer */ + char *name; /* file name for error messages */ +} file; + +/* reload buffer */ +local int readin(file *in) +{ + int len; + + len = read(in->fd, in->buf, 1 << in->size); + if (len == -1) bye("error reading ", in->name); + in->left = (unsigned)len; + in->next = in->buf; + return len; +} + +/* read from file in, exit if end-of-file */ +local int readmore(file *in) +{ + if (readin(in) == 0) bye("unexpected end of ", in->name); + return 0; +} + +#define read1(in) (in->left == 0 ? readmore(in) : 0, \ + in->left--, *(in->next)++) + +/* skip over n bytes of in */ +local void skip(file *in, unsigned n) +{ + unsigned bypass; + + if (n > in->left) { + n -= in->left; + bypass = n & ~((1U << in->size) - 1); + if (bypass) { + if (lseek(in->fd, (off_t)bypass, SEEK_CUR) == -1) + bye("seeking ", in->name); + n -= bypass; + } + readmore(in); + if (n > in->left) + bye("unexpected end of ", in->name); + } + in->left -= n; + in->next += n; +} + +/* read a four-byte unsigned integer, little-endian, from in */ +unsigned long read4(file *in) +{ + unsigned long val; + + val = read1(in); + val += (unsigned)read1(in) << 8; + val += (unsigned long)read1(in) << 16; + val += (unsigned long)read1(in) << 24; + return val; +} + +/* skip over gzip header */ +local void gzheader(file *in) +{ + int flags; + unsigned n; + + if (read1(in) != 31 || read1(in) != 139) bye(in->name, " not a gzip file"); + if (read1(in) != 8) bye("unknown compression method in", in->name); + flags = read1(in); + if (flags & 0xe0) bye("unknown header flags set in", in->name); + skip(in, 6); + if (flags & 4) { + n = read1(in); + n += (unsigned)(read1(in)) << 8; + skip(in, n); + } + if (flags & 8) while (read1(in) != 0) ; + if (flags & 16) while (read1(in) != 0) ; + if (flags & 2) skip(in, 2); +} + +/* decompress gzip file "name", return strm with a deflate stream ready to + continue compression of the data in the gzip file, and return a file + descriptor pointing to where to write the compressed data -- the deflate + stream is initialized to compress using level "level" */ +local int gzscan(char *name, z_stream *strm, int level) +{ + int ret, lastbit, left, full; + unsigned have; + unsigned long crc, tot; + unsigned char *window; + off_t lastoff, end; + file gz; + + /* open gzip file */ + gz.name = name; + gz.fd = open(name, O_RDWR, 0); + if (gz.fd == -1) bye("cannot open ", name); + gz.buf = malloc(CHUNK); + if (gz.buf == NULL) bye("out of memory", ""); + gz.size = LGCHUNK; + gz.left = 0; + + /* skip gzip header */ + gzheader(&gz); + + /* prepare to decompress */ + window = malloc(DSIZE); + if (window == NULL) bye("out of memory", ""); + strm->zalloc = Z_NULL; + strm->zfree = Z_NULL; + strm->opaque = Z_NULL; + ret = inflateInit2(strm, -15); + if (ret != Z_OK) bye("out of memory", " or library mismatch"); + + /* decompress the deflate stream, saving append information */ + lastbit = 0; + lastoff = lseek(gz.fd, 0L, SEEK_CUR) - gz.left; + left = 0; + strm->avail_in = gz.left; + strm->next_in = gz.next; + crc = crc32(0L, Z_NULL, 0); + have = full = 0; + do { + /* if needed, get more input */ + if (strm->avail_in == 0) { + readmore(&gz); + strm->avail_in = gz.left; + strm->next_in = gz.next; + } + + /* set up output to next available section of sliding window */ + strm->avail_out = DSIZE - have; + strm->next_out = window + have; + + /* inflate and check for errors */ + ret = inflate(strm, Z_BLOCK); + if (ret == Z_STREAM_ERROR) bye("internal stream error!", ""); + if (ret == Z_MEM_ERROR) bye("out of memory", ""); + if (ret == Z_DATA_ERROR) + bye("invalid compressed data--format violated in", name); + + /* update crc and sliding window pointer */ + crc = crc32(crc, window + have, DSIZE - have - strm->avail_out); + if (strm->avail_out) + have = DSIZE - strm->avail_out; + else { + have = 0; + full = 1; + } + + /* process end of block */ + if (strm->data_type & 128) { + if (strm->data_type & 64) + left = strm->data_type & 0x1f; + else { + lastbit = strm->data_type & 0x1f; + lastoff = lseek(gz.fd, 0L, SEEK_CUR) - strm->avail_in; + } + } + } while (ret != Z_STREAM_END); + inflateEnd(strm); + gz.left = strm->avail_in; + gz.next = strm->next_in; + + /* save the location of the end of the compressed data */ + end = lseek(gz.fd, 0L, SEEK_CUR) - gz.left; + + /* check gzip trailer and save total for deflate */ + if (crc != read4(&gz)) + bye("invalid compressed data--crc mismatch in ", name); + tot = strm->total_out; + if ((tot & 0xffffffffUL) != read4(&gz)) + bye("invalid compressed data--length mismatch in", name); + + /* if not at end of file, warn */ + if (gz.left || readin(&gz)) + fprintf(stderr, + "gzappend warning: junk at end of gzip file overwritten\n"); + + /* clear last block bit */ + lseek(gz.fd, lastoff - (lastbit != 0), SEEK_SET); + if (read(gz.fd, gz.buf, 1) != 1) bye("reading after seek on ", name); + *gz.buf = (unsigned char)(*gz.buf ^ (1 << ((8 - lastbit) & 7))); + lseek(gz.fd, -1L, SEEK_CUR); + if (write(gz.fd, gz.buf, 1) != 1) bye("writing after seek to ", name); + + /* if window wrapped, build dictionary from window by rotating */ + if (full) { + rotate(window, DSIZE, have); + have = DSIZE; + } + + /* set up deflate stream with window, crc, total_in, and leftover bits */ + ret = deflateInit2(strm, level, Z_DEFLATED, -15, 8, Z_DEFAULT_STRATEGY); + if (ret != Z_OK) bye("out of memory", ""); + deflateSetDictionary(strm, window, have); + strm->adler = crc; + strm->total_in = tot; + if (left) { + lseek(gz.fd, --end, SEEK_SET); + if (read(gz.fd, gz.buf, 1) != 1) bye("reading after seek on ", name); + deflatePrime(strm, 8 - left, *gz.buf); + } + lseek(gz.fd, end, SEEK_SET); + + /* clean up and return */ + free(window); + free(gz.buf); + return gz.fd; +} + +/* append file "name" to gzip file gd using deflate stream strm -- if last + is true, then finish off the deflate stream at the end */ +local void gztack(char *name, int gd, z_stream *strm, int last) +{ + int fd, len, ret; + unsigned left; + unsigned char *in, *out; + + /* open file to compress and append */ + fd = 0; + if (name != NULL) { + fd = open(name, O_RDONLY, 0); + if (fd == -1) + fprintf(stderr, "gzappend warning: %s not found, skipping ...\n", + name); + } + + /* allocate buffers */ + in = malloc(CHUNK); + out = malloc(CHUNK); + if (in == NULL || out == NULL) bye("out of memory", ""); + + /* compress input file and append to gzip file */ + do { + /* get more input */ + len = read(fd, in, CHUNK); + if (len == -1) { + fprintf(stderr, + "gzappend warning: error reading %s, skipping rest ...\n", + name); + len = 0; + } + strm->avail_in = (unsigned)len; + strm->next_in = in; + if (len) strm->adler = crc32(strm->adler, in, (unsigned)len); + + /* compress and write all available output */ + do { + strm->avail_out = CHUNK; + strm->next_out = out; + ret = deflate(strm, last && len == 0 ? Z_FINISH : Z_NO_FLUSH); + left = CHUNK - strm->avail_out; + while (left) { + len = write(gd, out + CHUNK - strm->avail_out - left, left); + if (len == -1) bye("writing gzip file", ""); + left -= (unsigned)len; + } + } while (strm->avail_out == 0 && ret != Z_STREAM_END); + } while (len != 0); + + /* write trailer after last entry */ + if (last) { + deflateEnd(strm); + out[0] = (unsigned char)(strm->adler); + out[1] = (unsigned char)(strm->adler >> 8); + out[2] = (unsigned char)(strm->adler >> 16); + out[3] = (unsigned char)(strm->adler >> 24); + out[4] = (unsigned char)(strm->total_in); + out[5] = (unsigned char)(strm->total_in >> 8); + out[6] = (unsigned char)(strm->total_in >> 16); + out[7] = (unsigned char)(strm->total_in >> 24); + len = 8; + do { + ret = write(gd, out + 8 - len, len); + if (ret == -1) bye("writing gzip file", ""); + len -= ret; + } while (len); + close(gd); + } + + /* clean up and return */ + free(out); + free(in); + if (fd > 0) close(fd); +} + +/* process the compression level option if present, scan the gzip file, and + append the specified files, or append the data from stdin if no other file + names are provided on the command line -- the gzip file must be writable + and seekable */ +int main(int argc, char **argv) +{ + int gd, level; + z_stream strm; + + /* ignore command name */ + argc--; argv++; + + /* provide usage if no arguments */ + if (*argv == NULL) { + printf( + "gzappend 1.2 (11 Oct 2012) Copyright (C) 2003, 2012 Mark Adler\n" + ); + printf( + "usage: gzappend [-level] file.gz [ addthis [ andthis ... ]]\n"); + return 0; + } + + /* set compression level */ + level = Z_DEFAULT_COMPRESSION; + if (argv[0][0] == '-') { + if (argv[0][1] < '0' || argv[0][1] > '9' || argv[0][2] != 0) + bye("invalid compression level", ""); + level = argv[0][1] - '0'; + if (*++argv == NULL) bye("no gzip file name after options", ""); + } + + /* prepare to append to gzip file */ + gd = gzscan(*argv++, &strm, level); + + /* append files on command line, or from stdin if none */ + if (*argv == NULL) + gztack(NULL, gd, &strm, 1); + else + do { + gztack(*argv, gd, &strm, argv[1] == NULL); + } while (*++argv != NULL); + return 0; +} diff --git a/thirdparty/zlib-1.3.1/examples/gzjoin.c b/thirdparty/zlib-1.3.1/examples/gzjoin.c new file mode 100644 index 0000000..89e8098 --- /dev/null +++ b/thirdparty/zlib-1.3.1/examples/gzjoin.c @@ -0,0 +1,449 @@ +/* gzjoin -- command to join gzip files into one gzip file + + Copyright (C) 2004, 2005, 2012 Mark Adler, all rights reserved + version 1.2, 14 Aug 2012 + + This software is provided 'as-is', without any express or implied + warranty. In no event will the author be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. + + Mark Adler madler@alumni.caltech.edu + */ + +/* + * Change history: + * + * 1.0 11 Dec 2004 - First version + * 1.1 12 Jun 2005 - Changed ssize_t to long for portability + * 1.2 14 Aug 2012 - Clean up for z_const usage + */ + +/* + gzjoin takes one or more gzip files on the command line and writes out a + single gzip file that will uncompress to the concatenation of the + uncompressed data from the individual gzip files. gzjoin does this without + having to recompress any of the data and without having to calculate a new + crc32 for the concatenated uncompressed data. gzjoin does however have to + decompress all of the input data in order to find the bits in the compressed + data that need to be modified to concatenate the streams. + + gzjoin does not do an integrity check on the input gzip files other than + checking the gzip header and decompressing the compressed data. They are + otherwise assumed to be complete and correct. + + Each joint between gzip files removes at least 18 bytes of previous trailer + and subsequent header, and inserts an average of about three bytes to the + compressed data in order to connect the streams. The output gzip file + has a minimal ten-byte gzip header with no file name or modification time. + + This program was written to illustrate the use of the Z_BLOCK option of + inflate() and the crc32_combine() function. gzjoin will not compile with + versions of zlib earlier than 1.2.3. + */ + +#include /* fputs(), fprintf(), fwrite(), putc() */ +#include /* exit(), malloc(), free() */ +#include /* open() */ +#include /* close(), read(), lseek() */ +#include "zlib.h" + /* crc32(), crc32_combine(), inflateInit2(), inflate(), inflateEnd() */ + +#define local static + +/* exit with an error (return a value to allow use in an expression) */ +local int bail(char *why1, char *why2) +{ + fprintf(stderr, "gzjoin error: %s%s, output incomplete\n", why1, why2); + exit(1); + return 0; +} + +/* -- simple buffered file input with access to the buffer -- */ + +#define CHUNK 32768 /* must be a power of two and fit in unsigned */ + +/* bin buffered input file type */ +typedef struct { + char *name; /* name of file for error messages */ + int fd; /* file descriptor */ + unsigned left; /* bytes remaining at next */ + unsigned char *next; /* next byte to read */ + unsigned char *buf; /* allocated buffer of length CHUNK */ +} bin; + +/* close a buffered file and free allocated memory */ +local void bclose(bin *in) +{ + if (in != NULL) { + if (in->fd != -1) + close(in->fd); + if (in->buf != NULL) + free(in->buf); + free(in); + } +} + +/* open a buffered file for input, return a pointer to type bin, or NULL on + failure */ +local bin *bopen(char *name) +{ + bin *in; + + in = malloc(sizeof(bin)); + if (in == NULL) + return NULL; + in->buf = malloc(CHUNK); + in->fd = open(name, O_RDONLY, 0); + if (in->buf == NULL || in->fd == -1) { + bclose(in); + return NULL; + } + in->left = 0; + in->next = in->buf; + in->name = name; + return in; +} + +/* load buffer from file, return -1 on read error, 0 or 1 on success, with + 1 indicating that end-of-file was reached */ +local int bload(bin *in) +{ + long len; + + if (in == NULL) + return -1; + if (in->left != 0) + return 0; + in->next = in->buf; + do { + len = (long)read(in->fd, in->buf + in->left, CHUNK - in->left); + if (len < 0) + return -1; + in->left += (unsigned)len; + } while (len != 0 && in->left < CHUNK); + return len == 0 ? 1 : 0; +} + +/* get a byte from the file, bail if end of file */ +#define bget(in) (in->left ? 0 : bload(in), \ + in->left ? (in->left--, *(in->next)++) : \ + bail("unexpected end of file on ", in->name)) + +/* get a four-byte little-endian unsigned integer from file */ +local unsigned long bget4(bin *in) +{ + unsigned long val; + + val = bget(in); + val += (unsigned long)(bget(in)) << 8; + val += (unsigned long)(bget(in)) << 16; + val += (unsigned long)(bget(in)) << 24; + return val; +} + +/* skip bytes in file */ +local void bskip(bin *in, unsigned skip) +{ + /* check pointer */ + if (in == NULL) + return; + + /* easy case -- skip bytes in buffer */ + if (skip <= in->left) { + in->left -= skip; + in->next += skip; + return; + } + + /* skip what's in buffer, discard buffer contents */ + skip -= in->left; + in->left = 0; + + /* seek past multiples of CHUNK bytes */ + if (skip > CHUNK) { + unsigned left; + + left = skip & (CHUNK - 1); + if (left == 0) { + /* exact number of chunks: seek all the way minus one byte to check + for end-of-file with a read */ + lseek(in->fd, skip - 1, SEEK_CUR); + if (read(in->fd, in->buf, 1) != 1) + bail("unexpected end of file on ", in->name); + return; + } + + /* skip the integral chunks, update skip with remainder */ + lseek(in->fd, skip - left, SEEK_CUR); + skip = left; + } + + /* read more input and skip remainder */ + bload(in); + if (skip > in->left) + bail("unexpected end of file on ", in->name); + in->left -= skip; + in->next += skip; +} + +/* -- end of buffered input functions -- */ + +/* skip the gzip header from file in */ +local void gzhead(bin *in) +{ + int flags; + + /* verify gzip magic header and compression method */ + if (bget(in) != 0x1f || bget(in) != 0x8b || bget(in) != 8) + bail(in->name, " is not a valid gzip file"); + + /* get and verify flags */ + flags = bget(in); + if ((flags & 0xe0) != 0) + bail("unknown reserved bits set in ", in->name); + + /* skip modification time, extra flags, and os */ + bskip(in, 6); + + /* skip extra field if present */ + if (flags & 4) { + unsigned len; + + len = bget(in); + len += (unsigned)(bget(in)) << 8; + bskip(in, len); + } + + /* skip file name if present */ + if (flags & 8) + while (bget(in) != 0) + ; + + /* skip comment if present */ + if (flags & 16) + while (bget(in) != 0) + ; + + /* skip header crc if present */ + if (flags & 2) + bskip(in, 2); +} + +/* write a four-byte little-endian unsigned integer to out */ +local void put4(unsigned long val, FILE *out) +{ + putc(val & 0xff, out); + putc((val >> 8) & 0xff, out); + putc((val >> 16) & 0xff, out); + putc((val >> 24) & 0xff, out); +} + +/* Load up zlib stream from buffered input, bail if end of file */ +local void zpull(z_streamp strm, bin *in) +{ + if (in->left == 0) + bload(in); + if (in->left == 0) + bail("unexpected end of file on ", in->name); + strm->avail_in = in->left; + strm->next_in = in->next; +} + +/* Write header for gzip file to out and initialize trailer. */ +local void gzinit(unsigned long *crc, unsigned long *tot, FILE *out) +{ + fwrite("\x1f\x8b\x08\0\0\0\0\0\0\xff", 1, 10, out); + *crc = crc32(0L, Z_NULL, 0); + *tot = 0; +} + +/* Copy the compressed data from name, zeroing the last block bit of the last + block if clr is true, and adding empty blocks as needed to get to a byte + boundary. If clr is false, then the last block becomes the last block of + the output, and the gzip trailer is written. crc and tot maintains the + crc and length (modulo 2^32) of the output for the trailer. The resulting + gzip file is written to out. gzinit() must be called before the first call + of gzcopy() to write the gzip header and to initialize crc and tot. */ +local void gzcopy(char *name, int clr, unsigned long *crc, unsigned long *tot, + FILE *out) +{ + int ret; /* return value from zlib functions */ + int pos; /* where the "last block" bit is in byte */ + int last; /* true if processing the last block */ + bin *in; /* buffered input file */ + unsigned char *start; /* start of compressed data in buffer */ + unsigned char *junk; /* buffer for uncompressed data -- discarded */ + z_off_t len; /* length of uncompressed data (support > 4 GB) */ + z_stream strm; /* zlib inflate stream */ + + /* open gzip file and skip header */ + in = bopen(name); + if (in == NULL) + bail("could not open ", name); + gzhead(in); + + /* allocate buffer for uncompressed data and initialize raw inflate + stream */ + junk = malloc(CHUNK); + strm.zalloc = Z_NULL; + strm.zfree = Z_NULL; + strm.opaque = Z_NULL; + strm.avail_in = 0; + strm.next_in = Z_NULL; + ret = inflateInit2(&strm, -15); + if (junk == NULL || ret != Z_OK) + bail("out of memory", ""); + + /* inflate and copy compressed data, clear last-block bit if requested */ + len = 0; + zpull(&strm, in); + start = in->next; + last = start[0] & 1; + if (last && clr) + start[0] &= ~1; + strm.avail_out = 0; + for (;;) { + /* if input used and output done, write used input and get more */ + if (strm.avail_in == 0 && strm.avail_out != 0) { + fwrite(start, 1, strm.next_in - start, out); + start = in->buf; + in->left = 0; + zpull(&strm, in); + } + + /* decompress -- return early when end-of-block reached */ + strm.avail_out = CHUNK; + strm.next_out = junk; + ret = inflate(&strm, Z_BLOCK); + switch (ret) { + case Z_MEM_ERROR: + bail("out of memory", ""); + case Z_DATA_ERROR: + bail("invalid compressed data in ", in->name); + } + + /* update length of uncompressed data */ + len += CHUNK - strm.avail_out; + + /* check for block boundary (only get this when block copied out) */ + if (strm.data_type & 128) { + /* if that was the last block, then done */ + if (last) + break; + + /* number of unused bits in last byte */ + pos = strm.data_type & 7; + + /* find the next last-block bit */ + if (pos != 0) { + /* next last-block bit is in last used byte */ + pos = 0x100 >> pos; + last = strm.next_in[-1] & pos; + if (last && clr) + in->buf[strm.next_in - in->buf - 1] &= ~pos; + } + else { + /* next last-block bit is in next unused byte */ + if (strm.avail_in == 0) { + /* don't have that byte yet -- get it */ + fwrite(start, 1, strm.next_in - start, out); + start = in->buf; + in->left = 0; + zpull(&strm, in); + } + last = strm.next_in[0] & 1; + if (last && clr) + in->buf[strm.next_in - in->buf] &= ~1; + } + } + } + + /* update buffer with unused input */ + in->left = strm.avail_in; + in->next = in->buf + (strm.next_in - in->buf); + + /* copy used input, write empty blocks to get to byte boundary */ + pos = strm.data_type & 7; + fwrite(start, 1, in->next - start - 1, out); + last = in->next[-1]; + if (pos == 0 || !clr) + /* already at byte boundary, or last file: write last byte */ + putc(last, out); + else { + /* append empty blocks to last byte */ + last &= ((0x100 >> pos) - 1); /* assure unused bits are zero */ + if (pos & 1) { + /* odd -- append an empty stored block */ + putc(last, out); + if (pos == 1) + putc(0, out); /* two more bits in block header */ + fwrite("\0\0\xff\xff", 1, 4, out); + } + else { + /* even -- append 1, 2, or 3 empty fixed blocks */ + switch (pos) { + case 6: + putc(last | 8, out); + last = 0; + case 4: + putc(last | 0x20, out); + last = 0; + case 2: + putc(last | 0x80, out); + putc(0, out); + } + } + } + + /* update crc and tot */ + *crc = crc32_combine(*crc, bget4(in), len); + *tot += (unsigned long)len; + + /* clean up */ + inflateEnd(&strm); + free(junk); + bclose(in); + + /* write trailer if this is the last gzip file */ + if (!clr) { + put4(*crc, out); + put4(*tot, out); + } +} + +/* join the gzip files on the command line, write result to stdout */ +int main(int argc, char **argv) +{ + unsigned long crc, tot; /* running crc and total uncompressed length */ + + /* skip command name */ + argc--; + argv++; + + /* show usage if no arguments */ + if (argc == 0) { + fputs("gzjoin usage: gzjoin f1.gz [f2.gz [f3.gz ...]] > fjoin.gz\n", + stderr); + return 0; + } + + /* join gzip files on command line and write to stdout */ + gzinit(&crc, &tot, stdout); + while (argc--) + gzcopy(*argv++, argc, &crc, &tot, stdout); + + /* done */ + return 0; +} diff --git a/thirdparty/zlib-1.3.1/examples/gzlog.c b/thirdparty/zlib-1.3.1/examples/gzlog.c new file mode 100644 index 0000000..da1b02e --- /dev/null +++ b/thirdparty/zlib-1.3.1/examples/gzlog.c @@ -0,0 +1,1061 @@ +/* + * gzlog.c + * Copyright (C) 2004, 2008, 2012, 2016, 2019 Mark Adler, all rights reserved + * For conditions of distribution and use, see copyright notice in gzlog.h + * version 2.3, 25 May 2019 + */ + +/* + gzlog provides a mechanism for frequently appending short strings to a gzip + file that is efficient both in execution time and compression ratio. The + strategy is to write the short strings in an uncompressed form to the end of + the gzip file, only compressing when the amount of uncompressed data has + reached a given threshold. + + gzlog also provides protection against interruptions in the process due to + system crashes. The status of the operation is recorded in an extra field + in the gzip file, and is only updated once the gzip file is brought to a + valid state. The last data to be appended or compressed is saved in an + auxiliary file, so that if the operation is interrupted, it can be completed + the next time an append operation is attempted. + + gzlog maintains another auxiliary file with the last 32K of data from the + compressed portion, which is preloaded for the compression of the subsequent + data. This minimizes the impact to the compression ratio of appending. + */ + +/* + Operations Concept: + + Files (log name "foo"): + foo.gz -- gzip file with the complete log + foo.add -- last message to append or last data to compress + foo.dict -- dictionary of the last 32K of data for next compression + foo.temp -- temporary dictionary file for compression after this one + foo.lock -- lock file for reading and writing the other files + foo.repairs -- log file for log file recovery operations (not compressed) + + gzip file structure: + - fixed-length (no file name) header with extra field (see below) + - compressed data ending initially with empty stored block + - uncompressed data filling out originally empty stored block and + subsequent stored blocks as needed (16K max each) + - gzip trailer + - no junk at end (no other gzip streams) + + When appending data, the information in the first three items above plus the + foo.add file are sufficient to recover an interrupted append operation. The + extra field has the necessary information to restore the start of the last + stored block and determine where to append the data in the foo.add file, as + well as the crc and length of the gzip data before the append operation. + + The foo.add file is created before the gzip file is marked for append, and + deleted after the gzip file is marked as complete. So if the append + operation is interrupted, the data to add will still be there. If due to + some external force, the foo.add file gets deleted between when the append + operation was interrupted and when recovery is attempted, the gzip file will + still be restored, but without the appended data. + + When compressing data, the information in the first two items above plus the + foo.add file are sufficient to recover an interrupted compress operation. + The extra field has the necessary information to find the end of the + compressed data, and contains both the crc and length of just the compressed + data and of the complete set of data including the contents of the foo.add + file. + + Again, the foo.add file is maintained during the compress operation in case + of an interruption. If in the unlikely event the foo.add file with the data + to be compressed is missing due to some external force, a gzip file with + just the previous compressed data will be reconstructed. In this case, all + of the data that was to be compressed is lost (approximately one megabyte). + This will not occur if all that happened was an interruption of the compress + operation. + + The third state that is marked is the replacement of the old dictionary with + the new dictionary after a compress operation. Once compression is + complete, the gzip file is marked as being in the replace state. This + completes the gzip file, so an interrupt after being so marked does not + result in recompression. Then the dictionary file is replaced, and the gzip + file is marked as completed. This state prevents the possibility of + restarting compression with the wrong dictionary file. + + All three operations are wrapped by a lock/unlock procedure. In order to + gain exclusive access to the log files, first a foo.lock file must be + exclusively created. When all operations are complete, the lock is + released by deleting the foo.lock file. If when attempting to create the + lock file, it already exists and the modify time of the lock file is more + than five minutes old (set by the PATIENCE define below), then the old + lock file is considered stale and deleted, and the exclusive creation of + the lock file is retried. To assure that there are no false assessments + of the staleness of the lock file, the operations periodically touch the + lock file to update the modified date. + + Following is the definition of the extra field with all of the information + required to enable the above append and compress operations and their + recovery if interrupted. Multi-byte values are stored little endian + (consistent with the gzip format). File pointers are eight bytes long. + The crc's and lengths for the gzip trailer are four bytes long. (Note that + the length at the end of a gzip file is used for error checking only, and + for large files is actually the length modulo 2^32.) The stored block + length is two bytes long. The gzip extra field two-byte identification is + "ap" for append. It is assumed that writing the extra field to the file is + an "atomic" operation. That is, either all of the extra field is written + to the file, or none of it is, if the operation is interrupted right at the + point of updating the extra field. This is a reasonable assumption, since + the extra field is within the first 52 bytes of the file, which is smaller + than any expected block size for a mass storage device (usually 512 bytes or + larger). + + Extra field (35 bytes): + - Pointer to first stored block length -- this points to the two-byte length + of the first stored block, which is followed by the two-byte, one's + complement of that length. The stored block length is preceded by the + three-bit header of the stored block, which is the actual start of the + stored block in the deflate format. See the bit offset field below. + - Pointer to the last stored block length. This is the same as above, but + for the last stored block of the uncompressed data in the gzip file. + Initially this is the same as the first stored block length pointer. + When the stored block gets to 16K (see the MAX_STORE define), then a new + stored block as added, at which point the last stored block length pointer + is different from the first stored block length pointer. When they are + different, the first bit of the last stored block header is eight bits, or + one byte back from the block length. + - Compressed data crc and length. This is the crc and length of the data + that is in the compressed portion of the deflate stream. These are used + only in the event that the foo.add file containing the data to compress is + lost after a compress operation is interrupted. + - Total data crc and length. This is the crc and length of all of the data + stored in the gzip file, compressed and uncompressed. It is used to + reconstruct the gzip trailer when compressing, as well as when recovering + interrupted operations. + - Final stored block length. This is used to quickly find where to append, + and allows the restoration of the original final stored block state when + an append operation is interrupted. + - First stored block start as the number of bits back from the final stored + block first length byte. This value is in the range of 3..10, and is + stored as the low three bits of the final byte of the extra field after + subtracting three (0..7). This allows the last-block bit of the stored + block header to be updated when a new stored block is added, for the case + when the first stored block and the last stored block are the same. (When + they are different, the numbers of bits back is known to be eight.) This + also allows for new compressed data to be appended to the old compressed + data in the compress operation, overwriting the previous first stored + block, or for the compressed data to be terminated and a valid gzip file + reconstructed on the off chance that a compression operation was + interrupted and the data to compress in the foo.add file was deleted. + - The operation in process. This is the next two bits in the last byte (the + bits under the mask 0x18). The are interpreted as 0: nothing in process, + 1: append in process, 2: compress in process, 3: replace in process. + - The top three bits of the last byte in the extra field are reserved and + are currently set to zero. + + Main procedure: + - Exclusively create the foo.lock file using the O_CREAT and O_EXCL modes of + the system open() call. If the modify time of an existing lock file is + more than PATIENCE seconds old, then the lock file is deleted and the + exclusive create is retried. + - Load the extra field from the foo.gz file, and see if an operation was in + progress but not completed. If so, apply the recovery procedure below. + - Perform the append procedure with the provided data. + - If the uncompressed data in the foo.gz file is 1MB or more, apply the + compress procedure. + - Delete the foo.lock file. + + Append procedure: + - Put what to append in the foo.add file so that the operation can be + restarted if this procedure is interrupted. + - Mark the foo.gz extra field with the append operation in progress. + + Restore the original last-block bit and stored block length of the last + stored block from the information in the extra field, in case a previous + append operation was interrupted. + - Append the provided data to the last stored block, creating new stored + blocks as needed and updating the stored blocks last-block bits and + lengths. + - Update the crc and length with the new data, and write the gzip trailer. + - Write over the extra field (with a single write operation) with the new + pointers, lengths, and crc's, and mark the gzip file as not in process. + Though there is still a foo.add file, it will be ignored since nothing + is in process. If a foo.add file is leftover from a previously + completed operation, it is truncated when writing new data to it. + - Delete the foo.add file. + + Compress and replace procedures: + - Read all of the uncompressed data in the stored blocks in foo.gz and write + it to foo.add. Also write foo.temp with the last 32K of that data to + provide a dictionary for the next invocation of this procedure. + - Rewrite the extra field marking foo.gz with a compression in process. + * If there is no data provided to compress (due to a missing foo.add file + when recovering), reconstruct and truncate the foo.gz file to contain + only the previous compressed data and proceed to the step after the next + one. Otherwise ... + - Compress the data with the dictionary in foo.dict, and write to the + foo.gz file starting at the bit immediately following the last previously + compressed block. If there is no foo.dict, proceed anyway with the + compression at slightly reduced efficiency. (For the foo.dict file to be + missing requires some external failure beyond simply the interruption of + a compress operation.) During this process, the foo.lock file is + periodically touched to assure that that file is not considered stale by + another process before we're done. The deflation is terminated with a + non-last empty static block (10 bits long), that is then located and + written over by a last-bit-set empty stored block. + - Append the crc and length of the data in the gzip file (previously + calculated during the append operations). + - Write over the extra field with the updated stored block offsets, bits + back, crc's, and lengths, and mark foo.gz as in process for a replacement + of the dictionary. + @ Delete the foo.add file. + - Replace foo.dict with foo.temp. + - Write over the extra field, marking foo.gz as complete. + + Recovery procedure: + - If not a replace recovery, read in the foo.add file, and provide that data + to the appropriate recovery below. If there is no foo.add file, provide + a zero data length to the recovery. In that case, the append recovery + restores the foo.gz to the previous compressed + uncompressed data state. + For the compress recovery, a missing foo.add file results in foo.gz being + restored to the previous compressed-only data state. + - Append recovery: + - Pick up append at + step above + - Compress recovery: + - Pick up compress at * step above + - Replace recovery: + - Pick up compress at @ step above + - Log the repair with a date stamp in foo.repairs + */ + +#include +#include /* rename, fopen, fprintf, fclose */ +#include /* malloc, free */ +#include /* strlen, strrchr, strcpy, strncpy, strcmp */ +#include /* open */ +#include /* lseek, read, write, close, unlink, sleep, */ + /* ftruncate, fsync */ +#include /* errno */ +#include /* time, ctime */ +#include /* stat */ +#include /* utimes */ +#include "zlib.h" /* crc32 */ + +#include "gzlog.h" /* header for external access */ + +#define local static +typedef unsigned int uint; +typedef unsigned long ulong; + +/* Macro for debugging to deterministically force recovery operations */ +#ifdef GZLOG_DEBUG + #include /* longjmp */ + jmp_buf gzlog_jump; /* where to go back to */ + int gzlog_bail = 0; /* which point to bail at (1..8) */ + int gzlog_count = -1; /* number of times through to wait */ +# define BAIL(n) do { if (n == gzlog_bail && gzlog_count-- == 0) \ + longjmp(gzlog_jump, gzlog_bail); } while (0) +#else +# define BAIL(n) +#endif + +/* how old the lock file can be in seconds before considering it stale */ +#define PATIENCE 300 + +/* maximum stored block size in Kbytes -- must be in 1..63 */ +#define MAX_STORE 16 + +/* number of stored Kbytes to trigger compression (must be >= 32 to allow + dictionary construction, and <= 204 * MAX_STORE, in order for >> 10 to + discard the stored block headers contribution of five bytes each) */ +#define TRIGGER 1024 + +/* size of a deflate dictionary (this cannot be changed) */ +#define DICT 32768U + +/* values for the operation (2 bits) */ +#define NO_OP 0 +#define APPEND_OP 1 +#define COMPRESS_OP 2 +#define REPLACE_OP 3 + +/* macros to extract little-endian integers from an unsigned byte buffer */ +#define PULL2(p) ((p)[0]+((uint)((p)[1])<<8)) +#define PULL4(p) (PULL2(p)+((ulong)PULL2(p+2)<<16)) +#define PULL8(p) (PULL4(p)+((off_t)PULL4(p+4)<<32)) + +/* macros to store integers into a byte buffer in little-endian order */ +#define PUT2(p,a) do {(p)[0]=a;(p)[1]=(a)>>8;} while(0) +#define PUT4(p,a) do {PUT2(p,a);PUT2(p+2,a>>16);} while(0) +#define PUT8(p,a) do {PUT4(p,a);PUT4(p+4,a>>32);} while(0) + +/* internal structure for log information */ +#define LOGID "\106\035\172" /* should be three non-zero characters */ +struct log { + char id[4]; /* contains LOGID to detect inadvertent overwrites */ + int fd; /* file descriptor for .gz file, opened read/write */ + char *path; /* allocated path, e.g. "/var/log/foo" or "foo" */ + char *end; /* end of path, for appending suffices such as ".gz" */ + off_t first; /* offset of first stored block first length byte */ + int back; /* location of first block id in bits back from first */ + uint stored; /* bytes currently in last stored block */ + off_t last; /* offset of last stored block first length byte */ + ulong ccrc; /* crc of compressed data */ + ulong clen; /* length (modulo 2^32) of compressed data */ + ulong tcrc; /* crc of total data */ + ulong tlen; /* length (modulo 2^32) of total data */ + time_t lock; /* last modify time of our lock file */ +}; + +/* gzip header for gzlog */ +local unsigned char log_gzhead[] = { + 0x1f, 0x8b, /* magic gzip id */ + 8, /* compression method is deflate */ + 4, /* there is an extra field (no file name) */ + 0, 0, 0, 0, /* no modification time provided */ + 0, 0xff, /* no extra flags, no OS specified */ + 39, 0, 'a', 'p', 35, 0 /* extra field with "ap" subfield */ + /* 35 is EXTRA, 39 is EXTRA + 4 */ +}; + +#define HEAD sizeof(log_gzhead) /* should be 16 */ + +/* initial gzip extra field content (52 == HEAD + EXTRA + 1) */ +local unsigned char log_gzext[] = { + 52, 0, 0, 0, 0, 0, 0, 0, /* offset of first stored block length */ + 52, 0, 0, 0, 0, 0, 0, 0, /* offset of last stored block length */ + 0, 0, 0, 0, 0, 0, 0, 0, /* compressed data crc and length */ + 0, 0, 0, 0, 0, 0, 0, 0, /* total data crc and length */ + 0, 0, /* final stored block data length */ + 5 /* op is NO_OP, last bit 8 bits back */ +}; + +#define EXTRA sizeof(log_gzext) /* should be 35 */ + +/* initial gzip data and trailer */ +local unsigned char log_gzbody[] = { + 1, 0, 0, 0xff, 0xff, /* empty stored block (last) */ + 0, 0, 0, 0, /* crc */ + 0, 0, 0, 0 /* uncompressed length */ +}; + +#define BODY sizeof(log_gzbody) + +/* Exclusively create foo.lock in order to negotiate exclusive access to the + foo.* files. If the modify time of an existing lock file is greater than + PATIENCE seconds in the past, then consider the lock file to have been + abandoned, delete it, and try the exclusive create again. Save the lock + file modify time for verification of ownership. Return 0 on success, or -1 + on failure, usually due to an access restriction or invalid path. Note that + if stat() or unlink() fails, it may be due to another process noticing the + abandoned lock file a smidge sooner and deleting it, so those are not + flagged as an error. */ +local int log_lock(struct log *log) +{ + int fd; + struct stat st; + + strcpy(log->end, ".lock"); + while ((fd = open(log->path, O_CREAT | O_EXCL, 0644)) < 0) { + if (errno != EEXIST) + return -1; + if (stat(log->path, &st) == 0 && time(NULL) - st.st_mtime > PATIENCE) { + unlink(log->path); + continue; + } + sleep(2); /* relinquish the CPU for two seconds while waiting */ + } + close(fd); + if (stat(log->path, &st) == 0) + log->lock = st.st_mtime; + return 0; +} + +/* Update the modify time of the lock file to now, in order to prevent another + task from thinking that the lock is stale. Save the lock file modify time + for verification of ownership. */ +local void log_touch(struct log *log) +{ + struct stat st; + + strcpy(log->end, ".lock"); + utimes(log->path, NULL); + if (stat(log->path, &st) == 0) + log->lock = st.st_mtime; +} + +/* Check the log file modify time against what is expected. Return true if + this is not our lock. If it is our lock, touch it to keep it. */ +local int log_check(struct log *log) +{ + struct stat st; + + strcpy(log->end, ".lock"); + if (stat(log->path, &st) || st.st_mtime != log->lock) + return 1; + log_touch(log); + return 0; +} + +/* Unlock a previously acquired lock, but only if it's ours. */ +local void log_unlock(struct log *log) +{ + if (log_check(log)) + return; + strcpy(log->end, ".lock"); + unlink(log->path); + log->lock = 0; +} + +/* Check the gzip header and read in the extra field, filling in the values in + the log structure. Return op on success or -1 if the gzip header was not as + expected. op is the current operation in progress last written to the extra + field. This assumes that the gzip file has already been opened, with the + file descriptor log->fd. */ +local int log_head(struct log *log) +{ + int op; + unsigned char buf[HEAD + EXTRA]; + + if (lseek(log->fd, 0, SEEK_SET) < 0 || + read(log->fd, buf, HEAD + EXTRA) != HEAD + EXTRA || + memcmp(buf, log_gzhead, HEAD)) { + return -1; + } + log->first = PULL8(buf + HEAD); + log->last = PULL8(buf + HEAD + 8); + log->ccrc = PULL4(buf + HEAD + 16); + log->clen = PULL4(buf + HEAD + 20); + log->tcrc = PULL4(buf + HEAD + 24); + log->tlen = PULL4(buf + HEAD + 28); + log->stored = PULL2(buf + HEAD + 32); + log->back = 3 + (buf[HEAD + 34] & 7); + op = (buf[HEAD + 34] >> 3) & 3; + return op; +} + +/* Write over the extra field contents, marking the operation as op. Use fsync + to assure that the device is written to, and in the requested order. This + operation, and only this operation, is assumed to be atomic in order to + assure that the log is recoverable in the event of an interruption at any + point in the process. Return -1 if the write to foo.gz failed. */ +local int log_mark(struct log *log, int op) +{ + int ret; + unsigned char ext[EXTRA]; + + PUT8(ext, log->first); + PUT8(ext + 8, log->last); + PUT4(ext + 16, log->ccrc); + PUT4(ext + 20, log->clen); + PUT4(ext + 24, log->tcrc); + PUT4(ext + 28, log->tlen); + PUT2(ext + 32, log->stored); + ext[34] = log->back - 3 + (op << 3); + fsync(log->fd); + ret = lseek(log->fd, HEAD, SEEK_SET) < 0 || + write(log->fd, ext, EXTRA) != EXTRA ? -1 : 0; + fsync(log->fd); + return ret; +} + +/* Rewrite the last block header bits and subsequent zero bits to get to a byte + boundary, setting the last block bit if last is true, and then write the + remainder of the stored block header (length and one's complement). Leave + the file pointer after the end of the last stored block data. Return -1 if + there is a read or write failure on the foo.gz file */ +local int log_last(struct log *log, int last) +{ + int back, len, mask; + unsigned char buf[6]; + + /* determine the locations of the bytes and bits to modify */ + back = log->last == log->first ? log->back : 8; + len = back > 8 ? 2 : 1; /* bytes back from log->last */ + mask = 0x80 >> ((back - 1) & 7); /* mask for block last-bit */ + + /* get the byte to modify (one or two back) into buf[0] -- don't need to + read the byte if the last-bit is eight bits back, since in that case + the entire byte will be modified */ + buf[0] = 0; + if (back != 8 && (lseek(log->fd, log->last - len, SEEK_SET) < 0 || + read(log->fd, buf, 1) != 1)) + return -1; + + /* change the last-bit of the last stored block as requested -- note + that all bits above the last-bit are set to zero, per the type bits + of a stored block being 00 and per the convention that the bits to + bring the stream to a byte boundary are also zeros */ + buf[1] = 0; + buf[2 - len] = (*buf & (mask - 1)) + (last ? mask : 0); + + /* write the modified stored block header and lengths, move the file + pointer to after the last stored block data */ + PUT2(buf + 2, log->stored); + PUT2(buf + 4, log->stored ^ 0xffff); + return lseek(log->fd, log->last - len, SEEK_SET) < 0 || + write(log->fd, buf + 2 - len, len + 4) != len + 4 || + lseek(log->fd, log->stored, SEEK_CUR) < 0 ? -1 : 0; +} + +/* Append len bytes from data to the locked and open log file. len may be zero + if recovering and no .add file was found. In that case, the previous state + of the foo.gz file is restored. The data is appended uncompressed in + deflate stored blocks. Return -1 if there was an error reading or writing + the foo.gz file. */ +local int log_append(struct log *log, unsigned char *data, size_t len) +{ + uint put; + off_t end; + unsigned char buf[8]; + + /* set the last block last-bit and length, in case recovering an + interrupted append, then position the file pointer to append to the + block */ + if (log_last(log, 1)) + return -1; + + /* append, adding stored blocks and updating the offset of the last stored + block as needed, and update the total crc and length */ + while (len) { + /* append as much as we can to the last block */ + put = (MAX_STORE << 10) - log->stored; + if (put > len) + put = (uint)len; + if (put) { + if (write(log->fd, data, put) != put) + return -1; + BAIL(1); + log->tcrc = crc32(log->tcrc, data, put); + log->tlen += put; + log->stored += put; + data += put; + len -= put; + } + + /* if we need to, add a new empty stored block */ + if (len) { + /* mark current block as not last */ + if (log_last(log, 0)) + return -1; + + /* point to new, empty stored block */ + log->last += 4 + log->stored + 1; + log->stored = 0; + } + + /* mark last block as last, update its length */ + if (log_last(log, 1)) + return -1; + BAIL(2); + } + + /* write the new crc and length trailer, and truncate just in case (could + be recovering from partial append with a missing foo.add file) */ + PUT4(buf, log->tcrc); + PUT4(buf + 4, log->tlen); + if (write(log->fd, buf, 8) != 8 || + (end = lseek(log->fd, 0, SEEK_CUR)) < 0 || ftruncate(log->fd, end)) + return -1; + + /* write the extra field, marking the log file as done, delete .add file */ + if (log_mark(log, NO_OP)) + return -1; + strcpy(log->end, ".add"); + unlink(log->path); /* ignore error, since may not exist */ + return 0; +} + +/* Replace the foo.dict file with the foo.temp file. Also delete the foo.add + file, since the compress operation may have been interrupted before that was + done. Returns 1 if memory could not be allocated, or -1 if reading or + writing foo.gz fails, or if the rename fails for some reason other than + foo.temp not existing. foo.temp not existing is a permitted error, since + the replace operation may have been interrupted after the rename is done, + but before foo.gz is marked as complete. */ +local int log_replace(struct log *log) +{ + int ret; + char *dest; + + /* delete foo.add file */ + strcpy(log->end, ".add"); + unlink(log->path); /* ignore error, since may not exist */ + BAIL(3); + + /* rename foo.name to foo.dict, replacing foo.dict if it exists */ + strcpy(log->end, ".dict"); + dest = malloc(strlen(log->path) + 1); + if (dest == NULL) + return -2; + strcpy(dest, log->path); + strcpy(log->end, ".temp"); + ret = rename(log->path, dest); + free(dest); + if (ret && errno != ENOENT) + return -1; + BAIL(4); + + /* mark the foo.gz file as done */ + return log_mark(log, NO_OP); +} + +/* Compress the len bytes at data and append the compressed data to the + foo.gz deflate data immediately after the previous compressed data. This + overwrites the previous uncompressed data, which was stored in foo.add + and is the data provided in data[0..len-1]. If this operation is + interrupted, it picks up at the start of this routine, with the foo.add + file read in again. If there is no data to compress (len == 0), then we + simply terminate the foo.gz file after the previously compressed data, + appending a final empty stored block and the gzip trailer. Return -1 if + reading or writing the log.gz file failed, or -2 if there was a memory + allocation failure. */ +local int log_compress(struct log *log, unsigned char *data, size_t len) +{ + int fd; + uint got, max; + ssize_t dict; + off_t end; + z_stream strm; + unsigned char buf[DICT]; + + /* compress and append compressed data */ + if (len) { + /* set up for deflate, allocating memory */ + strm.zalloc = Z_NULL; + strm.zfree = Z_NULL; + strm.opaque = Z_NULL; + if (deflateInit2(&strm, Z_DEFAULT_COMPRESSION, Z_DEFLATED, -15, 8, + Z_DEFAULT_STRATEGY) != Z_OK) + return -2; + + /* read in dictionary (last 32K of data that was compressed) */ + strcpy(log->end, ".dict"); + fd = open(log->path, O_RDONLY, 0); + if (fd >= 0) { + dict = read(fd, buf, DICT); + close(fd); + if (dict < 0) { + deflateEnd(&strm); + return -1; + } + if (dict) + deflateSetDictionary(&strm, buf, (uint)dict); + } + log_touch(log); + + /* prime deflate with last bits of previous block, position write + pointer to write those bits and overwrite what follows */ + if (lseek(log->fd, log->first - (log->back > 8 ? 2 : 1), + SEEK_SET) < 0 || + read(log->fd, buf, 1) != 1 || lseek(log->fd, -1, SEEK_CUR) < 0) { + deflateEnd(&strm); + return -1; + } + deflatePrime(&strm, (8 - log->back) & 7, *buf); + + /* compress, finishing with a partial non-last empty static block */ + strm.next_in = data; + max = (((uint)0 - 1) >> 1) + 1; /* in case int smaller than size_t */ + do { + strm.avail_in = len > max ? max : (uint)len; + len -= strm.avail_in; + do { + strm.avail_out = DICT; + strm.next_out = buf; + deflate(&strm, len ? Z_NO_FLUSH : Z_PARTIAL_FLUSH); + got = DICT - strm.avail_out; + if (got && write(log->fd, buf, got) != got) { + deflateEnd(&strm); + return -1; + } + log_touch(log); + } while (strm.avail_out == 0); + } while (len); + deflateEnd(&strm); + BAIL(5); + + /* find start of empty static block -- scanning backwards the first one + bit is the second bit of the block, if the last byte is zero, then + we know the byte before that has a one in the top bit, since an + empty static block is ten bits long */ + if ((log->first = lseek(log->fd, -1, SEEK_CUR)) < 0 || + read(log->fd, buf, 1) != 1) + return -1; + log->first++; + if (*buf) { + log->back = 1; + while ((*buf & ((uint)1 << (8 - log->back++))) == 0) + ; /* guaranteed to terminate, since *buf != 0 */ + } + else + log->back = 10; + + /* update compressed crc and length */ + log->ccrc = log->tcrc; + log->clen = log->tlen; + } + else { + /* no data to compress -- fix up existing gzip stream */ + log->tcrc = log->ccrc; + log->tlen = log->clen; + } + + /* complete and truncate gzip stream */ + log->last = log->first; + log->stored = 0; + PUT4(buf, log->tcrc); + PUT4(buf + 4, log->tlen); + if (log_last(log, 1) || write(log->fd, buf, 8) != 8 || + (end = lseek(log->fd, 0, SEEK_CUR)) < 0 || ftruncate(log->fd, end)) + return -1; + BAIL(6); + + /* mark as being in the replace operation */ + if (log_mark(log, REPLACE_OP)) + return -1; + + /* execute the replace operation and mark the file as done */ + return log_replace(log); +} + +/* log a repair record to the .repairs file */ +local void log_log(struct log *log, int op, char *record) +{ + time_t now; + FILE *rec; + + now = time(NULL); + strcpy(log->end, ".repairs"); + rec = fopen(log->path, "a"); + if (rec == NULL) + return; + fprintf(rec, "%.24s %s recovery: %s\n", ctime(&now), op == APPEND_OP ? + "append" : (op == COMPRESS_OP ? "compress" : "replace"), record); + fclose(rec); + return; +} + +/* Recover the interrupted operation op. First read foo.add for recovering an + append or compress operation. Return -1 if there was an error reading or + writing foo.gz or reading an existing foo.add, or -2 if there was a memory + allocation failure. */ +local int log_recover(struct log *log, int op) +{ + int fd, ret = 0; + unsigned char *data = NULL; + size_t len = 0; + struct stat st; + + /* log recovery */ + log_log(log, op, "start"); + + /* load foo.add file if expected and present */ + if (op == APPEND_OP || op == COMPRESS_OP) { + strcpy(log->end, ".add"); + if (stat(log->path, &st) == 0 && st.st_size) { + len = (size_t)(st.st_size); + if ((off_t)len != st.st_size || + (data = malloc(st.st_size)) == NULL) { + log_log(log, op, "allocation failure"); + return -2; + } + if ((fd = open(log->path, O_RDONLY, 0)) < 0) { + free(data); + log_log(log, op, ".add file read failure"); + return -1; + } + ret = (size_t)read(fd, data, len) != len; + close(fd); + if (ret) { + free(data); + log_log(log, op, ".add file read failure"); + return -1; + } + log_log(log, op, "loaded .add file"); + } + else + log_log(log, op, "missing .add file!"); + } + + /* recover the interrupted operation */ + switch (op) { + case APPEND_OP: + ret = log_append(log, data, len); + break; + case COMPRESS_OP: + ret = log_compress(log, data, len); + break; + case REPLACE_OP: + ret = log_replace(log); + } + + /* log status */ + log_log(log, op, ret ? "failure" : "complete"); + + /* clean up */ + if (data != NULL) + free(data); + return ret; +} + +/* Close the foo.gz file (if open) and release the lock. */ +local void log_close(struct log *log) +{ + if (log->fd >= 0) + close(log->fd); + log->fd = -1; + log_unlock(log); +} + +/* Open foo.gz, verify the header, and load the extra field contents, after + first creating the foo.lock file to gain exclusive access to the foo.* + files. If foo.gz does not exist or is empty, then write the initial header, + extra, and body content of an empty foo.gz log file. If there is an error + creating the lock file due to access restrictions, or an error reading or + writing the foo.gz file, or if the foo.gz file is not a proper log file for + this object (e.g. not a gzip file or does not contain the expected extra + field), then return true. If there is an error, the lock is released. + Otherwise, the lock is left in place. */ +local int log_open(struct log *log) +{ + int op; + + /* release open file resource if left over -- can occur if lock lost + between gzlog_open() and gzlog_write() */ + if (log->fd >= 0) + close(log->fd); + log->fd = -1; + + /* negotiate exclusive access */ + if (log_lock(log) < 0) + return -1; + + /* open the log file, foo.gz */ + strcpy(log->end, ".gz"); + log->fd = open(log->path, O_RDWR | O_CREAT, 0644); + if (log->fd < 0) { + log_close(log); + return -1; + } + + /* if new, initialize foo.gz with an empty log, delete old dictionary */ + if (lseek(log->fd, 0, SEEK_END) == 0) { + if (write(log->fd, log_gzhead, HEAD) != HEAD || + write(log->fd, log_gzext, EXTRA) != EXTRA || + write(log->fd, log_gzbody, BODY) != BODY) { + log_close(log); + return -1; + } + strcpy(log->end, ".dict"); + unlink(log->path); + } + + /* verify log file and load extra field information */ + if ((op = log_head(log)) < 0) { + log_close(log); + return -1; + } + + /* check for interrupted process and if so, recover */ + if (op != NO_OP && log_recover(log, op)) { + log_close(log); + return -1; + } + + /* touch the lock file to prevent another process from grabbing it */ + log_touch(log); + return 0; +} + +/* See gzlog.h for the description of the external methods below */ +gzlog *gzlog_open(char *path) +{ + size_t n; + struct log *log; + + /* check arguments */ + if (path == NULL || *path == 0) + return NULL; + + /* allocate and initialize log structure */ + log = malloc(sizeof(struct log)); + if (log == NULL) + return NULL; + strcpy(log->id, LOGID); + log->fd = -1; + + /* save path and end of path for name construction */ + n = strlen(path); + log->path = malloc(n + 9); /* allow for ".repairs" */ + if (log->path == NULL) { + free(log); + return NULL; + } + strcpy(log->path, path); + log->end = log->path + n; + + /* gain exclusive access and verify log file -- may perform a + recovery operation if needed */ + if (log_open(log)) { + free(log->path); + free(log); + return NULL; + } + + /* return pointer to log structure */ + return log; +} + +/* gzlog_compress() return values: + 0: all good + -1: file i/o error (usually access issue) + -2: memory allocation failure + -3: invalid log pointer argument */ +int gzlog_compress(gzlog *logd) +{ + int fd, ret; + uint block; + size_t len, next; + unsigned char *data, buf[5]; + struct log *log = logd; + + /* check arguments */ + if (log == NULL || strcmp(log->id, LOGID)) + return -3; + + /* see if we lost the lock -- if so get it again and reload the extra + field information (it probably changed), recover last operation if + necessary */ + if (log_check(log) && log_open(log)) + return -1; + + /* create space for uncompressed data */ + len = ((size_t)(log->last - log->first) & ~(((size_t)1 << 10) - 1)) + + log->stored; + if ((data = malloc(len)) == NULL) + return -2; + + /* do statement here is just a cheap trick for error handling */ + do { + /* read in the uncompressed data */ + if (lseek(log->fd, log->first - 1, SEEK_SET) < 0) + break; + next = 0; + while (next < len) { + if (read(log->fd, buf, 5) != 5) + break; + block = PULL2(buf + 1); + if (next + block > len || + read(log->fd, (char *)data + next, block) != block) + break; + next += block; + } + if (lseek(log->fd, 0, SEEK_CUR) != log->last + 4 + log->stored) + break; + log_touch(log); + + /* write the uncompressed data to the .add file */ + strcpy(log->end, ".add"); + fd = open(log->path, O_WRONLY | O_CREAT | O_TRUNC, 0644); + if (fd < 0) + break; + ret = (size_t)write(fd, data, len) != len; + if (ret | close(fd)) + break; + log_touch(log); + + /* write the dictionary for the next compress to the .temp file */ + strcpy(log->end, ".temp"); + fd = open(log->path, O_WRONLY | O_CREAT | O_TRUNC, 0644); + if (fd < 0) + break; + next = DICT > len ? len : DICT; + ret = (size_t)write(fd, (char *)data + len - next, next) != next; + if (ret | close(fd)) + break; + log_touch(log); + + /* roll back to compressed data, mark the compress in progress */ + log->last = log->first; + log->stored = 0; + if (log_mark(log, COMPRESS_OP)) + break; + BAIL(7); + + /* compress and append the data (clears mark) */ + ret = log_compress(log, data, len); + free(data); + return ret; + } while (0); + + /* broke out of do above on i/o error */ + free(data); + return -1; +} + +/* gzlog_write() return values: + 0: all good + -1: file i/o error (usually access issue) + -2: memory allocation failure + -3: invalid log pointer argument */ +int gzlog_write(gzlog *logd, void *data, size_t len) +{ + int fd, ret; + struct log *log = logd; + + /* check arguments */ + if (log == NULL || strcmp(log->id, LOGID)) + return -3; + if (data == NULL || len <= 0) + return 0; + + /* see if we lost the lock -- if so get it again and reload the extra + field information (it probably changed), recover last operation if + necessary */ + if (log_check(log) && log_open(log)) + return -1; + + /* create and write .add file */ + strcpy(log->end, ".add"); + fd = open(log->path, O_WRONLY | O_CREAT | O_TRUNC, 0644); + if (fd < 0) + return -1; + ret = (size_t)write(fd, data, len) != len; + if (ret | close(fd)) + return -1; + log_touch(log); + + /* mark log file with append in progress */ + if (log_mark(log, APPEND_OP)) + return -1; + BAIL(8); + + /* append data (clears mark) */ + if (log_append(log, data, len)) + return -1; + + /* check to see if it's time to compress -- if not, then done */ + if (((log->last - log->first) >> 10) + (log->stored >> 10) < TRIGGER) + return 0; + + /* time to compress */ + return gzlog_compress(log); +} + +/* gzlog_close() return values: + 0: ok + -3: invalid log pointer argument */ +int gzlog_close(gzlog *logd) +{ + struct log *log = logd; + + /* check arguments */ + if (log == NULL || strcmp(log->id, LOGID)) + return -3; + + /* close the log file and release the lock */ + log_close(log); + + /* free structure and return */ + if (log->path != NULL) + free(log->path); + strcpy(log->id, "bad"); + free(log); + return 0; +} diff --git a/thirdparty/zlib-1.3.1/examples/gzlog.h b/thirdparty/zlib-1.3.1/examples/gzlog.h new file mode 100644 index 0000000..4f05109 --- /dev/null +++ b/thirdparty/zlib-1.3.1/examples/gzlog.h @@ -0,0 +1,91 @@ +/* gzlog.h + Copyright (C) 2004, 2008, 2012 Mark Adler, all rights reserved + version 2.2, 14 Aug 2012 + + This software is provided 'as-is', without any express or implied + warranty. In no event will the author be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. + + Mark Adler madler@alumni.caltech.edu + */ + +/* Version History: + 1.0 26 Nov 2004 First version + 2.0 25 Apr 2008 Complete redesign for recovery of interrupted operations + Interface changed slightly in that now path is a prefix + Compression now occurs as needed during gzlog_write() + gzlog_write() now always leaves the log file as valid gzip + 2.1 8 Jul 2012 Fix argument checks in gzlog_compress() and gzlog_write() + 2.2 14 Aug 2012 Clean up signed comparisons + */ + +/* + The gzlog object allows writing short messages to a gzipped log file, + opening the log file locked for small bursts, and then closing it. The log + object works by appending stored (uncompressed) data to the gzip file until + 1 MB has been accumulated. At that time, the stored data is compressed, and + replaces the uncompressed data in the file. The log file is truncated to + its new size at that time. After each write operation, the log file is a + valid gzip file that can decompressed to recover what was written. + + The gzlog operations can be interrupted at any point due to an application or + system crash, and the log file will be recovered the next time the log is + opened with gzlog_open(). + */ + +#ifndef GZLOG_H +#define GZLOG_H + +/* gzlog object type */ +typedef void gzlog; + +/* Open a gzlog object, creating the log file if it does not exist. Return + NULL on error. Note that gzlog_open() could take a while to complete if it + has to wait to verify that a lock is stale (possibly for five minutes), or + if there is significant contention with other instantiations of this object + when locking the resource. path is the prefix of the file names created by + this object. If path is "foo", then the log file will be "foo.gz", and + other auxiliary files will be created and destroyed during the process: + "foo.dict" for a compression dictionary, "foo.temp" for a temporary (next) + dictionary, "foo.add" for data being added or compressed, "foo.lock" for the + lock file, and "foo.repairs" to log recovery operations performed due to + interrupted gzlog operations. A gzlog_open() followed by a gzlog_close() + will recover a previously interrupted operation, if any. */ +gzlog *gzlog_open(char *path); + +/* Write to a gzlog object. Return zero on success, -1 if there is a file i/o + error on any of the gzlog files (this should not happen if gzlog_open() + succeeded, unless the device has run out of space or leftover auxiliary + files have permissions or ownership that prevent their use), -2 if there is + a memory allocation failure, or -3 if the log argument is invalid (e.g. if + it was not created by gzlog_open()). This function will write data to the + file uncompressed, until 1 MB has been accumulated, at which time that data + will be compressed. The log file will be a valid gzip file upon successful + return. */ +int gzlog_write(gzlog *log, void *data, size_t len); + +/* Force compression of any uncompressed data in the log. This should be used + sparingly, if at all. The main application would be when a log file will + not be appended to again. If this is used to compress frequently while + appending, it will both significantly increase the execution time and + reduce the compression ratio. The return codes are the same as for + gzlog_write(). */ +int gzlog_compress(gzlog *log); + +/* Close a gzlog object. Return zero on success, -3 if the log argument is + invalid. The log object is freed, and so cannot be referenced again. */ +int gzlog_close(gzlog *log); + +#endif diff --git a/thirdparty/zlib-1.3.1/examples/gznorm.c b/thirdparty/zlib-1.3.1/examples/gznorm.c new file mode 100644 index 0000000..68e0a0f --- /dev/null +++ b/thirdparty/zlib-1.3.1/examples/gznorm.c @@ -0,0 +1,470 @@ +/* gznorm.c -- normalize a gzip stream + * Copyright (C) 2018 Mark Adler + * For conditions of distribution and use, see copyright notice in zlib.h + * Version 1.0 7 Oct 2018 Mark Adler */ + +// gznorm takes a gzip stream, potentially containing multiple members, and +// converts it to a gzip stream with a single member. In addition the gzip +// header is normalized, removing the file name and time stamp, and setting the +// other header contents (XFL, OS) to fixed values. gznorm does not recompress +// the data, so it is fast, but no advantage is gained from the history that +// could be available across member boundaries. + +#include // fread, fwrite, putc, fflush, ferror, fprintf, + // vsnprintf, stdout, stderr, NULL, FILE +#include // malloc, free +#include // strerror +#include // errno +#include // va_list, va_start, va_end +#include "zlib.h" // inflateInit2, inflate, inflateReset, inflateEnd, + // z_stream, z_off_t, crc32_combine, Z_NULL, Z_BLOCK, + // Z_OK, Z_STREAM_END, Z_BUF_ERROR, Z_DATA_ERROR, + // Z_MEM_ERROR + +#if defined(MSDOS) || defined(OS2) || defined(WIN32) || defined(__CYGWIN__) +# include +# include +# define SET_BINARY_MODE(file) setmode(fileno(file), O_BINARY) +#else +# define SET_BINARY_MODE(file) +#endif + +#define local static + +// printf to an allocated string. Return the string, or NULL if the printf or +// allocation fails. +local char *aprintf(char *fmt, ...) { + // Get the length of the result of the printf. + va_list args; + va_start(args, fmt); + int len = vsnprintf(NULL, 0, fmt, args); + va_end(args); + if (len < 0) + return NULL; + + // Allocate the required space and printf to it. + char *str = malloc(len + 1); + if (str == NULL) + return NULL; + va_start(args, fmt); + vsnprintf(str, len + 1, fmt, args); + va_end(args); + return str; +} + +// Return with an error, putting an allocated error message in *err. Doing an +// inflateEnd() on an already ended state, or one with state set to Z_NULL, is +// permitted. +#define BYE(...) \ + do { \ + inflateEnd(&strm); \ + *err = aprintf(__VA_ARGS__); \ + return 1; \ + } while (0) + +// Chunk size for buffered reads and for decompression. Twice this many bytes +// will be allocated on the stack by gzip_normalize(). Must fit in an unsigned. +#define CHUNK 16384 + +// Read a gzip stream from in and write an equivalent normalized gzip stream to +// out. If given no input, an empty gzip stream will be written. If successful, +// 0 is returned, and *err is set to NULL. On error, 1 is returned, where the +// details of the error are returned in *err, a pointer to an allocated string. +// +// The input may be a stream with multiple gzip members, which is converted to +// a single gzip member on the output. Each gzip member is decompressed at the +// level of deflate blocks. This enables clearing the last-block bit, shifting +// the compressed data to concatenate to the previous member's compressed data, +// which can end at an arbitrary bit boundary, and identifying stored blocks in +// order to resynchronize those to byte boundaries. The deflate compressed data +// is terminated with a 10-bit empty fixed block. If any members on the input +// end with a 10-bit empty fixed block, then that block is excised from the +// stream. This avoids appending empty fixed blocks for every normalization, +// and assures that gzip_normalize applied a second time will not change the +// input. The pad bits after stored block headers and after the final deflate +// block are all forced to zeros. +local int gzip_normalize(FILE *in, FILE *out, char **err) { + // initialize the inflate engine to process a gzip member + z_stream strm; + strm.zalloc = Z_NULL; + strm.zfree = Z_NULL; + strm.opaque = Z_NULL; + strm.avail_in = 0; + strm.next_in = Z_NULL; + if (inflateInit2(&strm, 15 + 16) != Z_OK) + BYE("out of memory"); + + // State while processing the input gzip stream. + enum { // BETWEEN -> HEAD -> BLOCK -> TAIL -> BETWEEN -> ... + BETWEEN, // between gzip members (must end in this state) + HEAD, // reading a gzip header + BLOCK, // reading deflate blocks + TAIL // reading a gzip trailer + } state = BETWEEN; // current component being processed + unsigned long crc = 0; // accumulated CRC of uncompressed data + unsigned long len = 0; // accumulated length of uncompressed data + unsigned long buf = 0; // deflate stream bit buffer of num bits + int num = 0; // number of bits in buf (at bottom) + + // Write a canonical gzip header (no mod time, file name, comment, extra + // block, or extra flags, and OS is marked as unknown). + fwrite("\x1f\x8b\x08\0\0\0\0\0\0\xff", 1, 10, out); + + // Process the gzip stream from in until reaching the end of the input, + // encountering invalid input, or experiencing an i/o error. + int more; // true if not at the end of the input + do { + // State inside this loop. + unsigned char *put; // next input buffer location to process + int prev; // number of bits from previous block in + // the bit buffer, or -1 if not at the + // start of a block + unsigned long long memb; // uncompressed length of member + size_t tail; // number of trailer bytes read (0..8) + unsigned long part; // accumulated trailer component + + // Get the next chunk of input from in. + unsigned char dat[CHUNK]; + strm.avail_in = fread(dat, 1, CHUNK, in); + if (strm.avail_in == 0) + break; + more = strm.avail_in == CHUNK; + strm.next_in = put = dat; + + // Run that chunk of input through the inflate engine to exhaustion. + do { + // At this point it is assured that strm.avail_in > 0. + + // Inflate until the end of a gzip component (header, deflate + // block, trailer) is reached, or until all of the chunk is + // consumed. The resulting decompressed data is discarded, though + // the total size of the decompressed data in each member is + // tracked, for the calculation of the total CRC. + do { + // inflate and handle any errors + unsigned char scrap[CHUNK]; + strm.avail_out = CHUNK; + strm.next_out = scrap; + int ret = inflate(&strm, Z_BLOCK); + if (ret == Z_MEM_ERROR) + BYE("out of memory"); + if (ret == Z_DATA_ERROR) + BYE("input invalid: %s", strm.msg); + if (ret != Z_OK && ret != Z_BUF_ERROR && ret != Z_STREAM_END) + BYE("internal error"); + + // Update the number of uncompressed bytes generated in this + // member. The actual count (not modulo 2^32) is required to + // correctly compute the total CRC. + unsigned got = CHUNK - strm.avail_out; + memb += got; + if (memb < got) + BYE("overflow error"); + + // Continue to process this chunk until it is consumed, or + // until the end of a component (header, deflate block, or + // trailer) is reached. + } while (strm.avail_out == 0 && (strm.data_type & 0x80) == 0); + + // Since strm.avail_in was > 0 for the inflate call, some input was + // just consumed. It is therefore assured that put < strm.next_in. + + // Disposition the consumed component or part of a component. + switch (state) { + case BETWEEN: + state = HEAD; + // Fall through to HEAD when some or all of the header is + // processed. + + case HEAD: + // Discard the header. + if (strm.data_type & 0x80) { + // End of header reached -- deflate blocks follow. + put = strm.next_in; + prev = num; + memb = 0; + state = BLOCK; + } + break; + + case BLOCK: + // Copy the deflate stream to the output, but with the + // last-block-bit cleared. Re-synchronize stored block + // headers to the output byte boundaries. The bytes at + // put..strm.next_in-1 is the compressed data that has been + // processed and is ready to be copied to the output. + + // At this point, it is assured that new compressed data is + // available, i.e., put < strm.next_in. If prev is -1, then + // that compressed data starts in the middle of a deflate + // block. If prev is not -1, then the bits in the bit + // buffer, possibly combined with the bits in *put, contain + // the three-bit header of the new deflate block. In that + // case, prev is the number of bits from the previous block + // that remain in the bit buffer. Since num is the number + // of bits in the bit buffer, we have that num - prev is + // the number of bits from the new block currently in the + // bit buffer. + + // If strm.data_type & 0xc0 is 0x80, then the last byte of + // the available compressed data includes the last bits of + // the end of a deflate block. In that case, that last byte + // also has strm.data_type & 0x1f bits of the next deflate + // block, in the range 0..7. If strm.data_type & 0xc0 is + // 0xc0, then the last byte of the compressed data is the + // end of the deflate stream, followed by strm.data_type & + // 0x1f pad bits, also in the range 0..7. + + // Set bits to the number of bits not yet consumed from the + // last byte. If we are at the end of the block, bits is + // either the number of bits in the last byte belonging to + // the next block, or the number of pad bits after the + // final block. In either of those cases, bits is in the + // range 0..7. + ; // (required due to C syntax oddity) + int bits = strm.data_type & 0x1f; + + if (prev != -1) { + // We are at the start of a new block. Clear the last + // block bit, and check for special cases. If it is a + // stored block, then emit the header and pad to the + // next byte boundary. If it is a final, empty fixed + // block, then excise it. + + // Some or all of the three header bits for this block + // may already be in the bit buffer. Load any remaining + // header bits into the bit buffer. + if (num - prev < 3) { + buf += (unsigned long)*put++ << num; + num += 8; + } + + // Set last to have a 1 in the position of the last + // block bit in the bit buffer. + unsigned long last = (unsigned long)1 << prev; + + if (((buf >> prev) & 7) == 3) { + // This is a final fixed block. Load at least ten + // bits from this block, including the header, into + // the bit buffer. We already have at least three, + // so at most one more byte needs to be loaded. + if (num - prev < 10) { + if (put == strm.next_in) + // Need to go get and process more input. + // We'll end up back here to finish this. + break; + buf += (unsigned long)*put++ << num; + num += 8; + } + if (((buf >> prev) & 0x3ff) == 3) { + // That final fixed block is empty. Delete it + // to avoid adding an empty block every time a + // gzip stream is normalized. + num = prev; + buf &= last - 1; // zero the pad bits + } + } + else if (((buf >> prev) & 6) == 0) { + // This is a stored block. Flush to the next + // byte boundary after the three-bit header. + num = (prev + 10) & ~7; + buf &= last - 1; // zero the pad bits + } + + // Clear the last block bit. + buf &= ~last; + + // Write out complete bytes in the bit buffer. + while (num >= 8) { + putc(buf, out); + buf >>= 8; + num -= 8; + } + + // If no more bytes left to process, then we have + // consumed the byte that had bits from the next block. + if (put == strm.next_in) + bits = 0; + } + + // We are done handling the deflate block header. Now copy + // all or almost all of the remaining compressed data that + // has been processed so far. Don't copy one byte at the + // end if it contains bits from the next deflate block or + // pad bits at the end of a deflate block. + + // mix is 1 if we are at the end of a deflate block, and if + // some of the bits in the last byte follow this block. mix + // is 0 if we are in the middle of a deflate block, if the + // deflate block ended on a byte boundary, or if all of the + // compressed data processed so far has been consumed. + int mix = (strm.data_type & 0x80) && bits; + + // Copy all of the processed compressed data to the output, + // except for the last byte if it contains bits from the + // next deflate block or pad bits at the end of the deflate + // stream. Copy the data after shifting in num bits from + // buf in front of it, leaving num bits from the end of the + // compressed data in buf when done. + unsigned char *end = strm.next_in - mix; + if (put < end) { + if (num) + // Insert num bits from buf before the data being + // copied. + do { + buf += (unsigned)(*put++) << num; + putc(buf, out); + buf >>= 8; + } while (put < end); + else { + // No shifting needed -- write directly. + fwrite(put, 1, end - put, out); + put = end; + } + } + + // Process the last processed byte if it wasn't written. + if (mix) { + // Load the last byte into the bit buffer. + buf += (unsigned)(*put++) << num; + num += 8; + + if (strm.data_type & 0x40) { + // We are at the end of the deflate stream and + // there are bits pad bits. Discard the pad bits + // and write a byte to the output, if available. + // Leave the num bits left over in buf to prepend + // to the next deflate stream. + num -= bits; + if (num >= 8) { + putc(buf, out); + num -= 8; + buf >>= 8; + } + + // Force the pad bits in the bit buffer to zeros. + buf &= ((unsigned long)1 << num) - 1; + + // Don't need to set prev here since going to TAIL. + } + else + // At the end of an internal deflate block. Leave + // the last byte in the bit buffer to examine on + // the next entry to BLOCK, when more bits from the + // next block will be available. + prev = num - bits; // number of bits in buffer + // from current block + } + + // Don't have a byte left over, so we are in the middle of + // a deflate block, or the deflate block ended on a byte + // boundary. Set prev appropriately for the next entry into + // BLOCK. + else if (strm.data_type & 0x80) + // The block ended on a byte boundary, so no header + // bits are in the bit buffer. + prev = num; + else + // In the middle of a deflate block, so no header here. + prev = -1; + + // Check for the end of the deflate stream. + if ((strm.data_type & 0xc0) == 0xc0) { + // That ends the deflate stream on the input side, the + // pad bits were discarded, and any remaining bits from + // the last block in the stream are saved in the bit + // buffer to prepend to the next stream. Process the + // gzip trailer next. + tail = 0; + part = 0; + state = TAIL; + } + break; + + case TAIL: + // Accumulate available trailer bytes to update the total + // CRC and the total uncompressed length. + do { + part = (part >> 8) + ((unsigned long)(*put++) << 24); + tail++; + if (tail == 4) { + // Update the total CRC. + z_off_t len2 = memb; + if (len2 < 0 || (unsigned long long)len2 != memb) + BYE("overflow error"); + crc = crc ? crc32_combine(crc, part, len2) : part; + part = 0; + } + else if (tail == 8) { + // Update the total uncompressed length. (It's ok + // if this sum is done modulo 2^32.) + len += part; + + // At the end of a member. Set up to inflate an + // immediately following gzip member. (If we made + // it this far, then the trailer was valid.) + if (inflateReset(&strm) != Z_OK) + BYE("internal error"); + state = BETWEEN; + break; + } + } while (put < strm.next_in); + break; + } + + // Process the input buffer until completely consumed. + } while (strm.avail_in > 0); + + // Process input until end of file, invalid input, or i/o error. + } while (more); + + // Done with the inflate engine. + inflateEnd(&strm); + + // Verify the validity of the input. + if (state != BETWEEN) + BYE("input invalid: incomplete gzip stream"); + + // Write the remaining deflate stream bits, followed by a terminating + // deflate fixed block. + buf += (unsigned long)3 << num; + putc(buf, out); + putc(buf >> 8, out); + if (num > 6) + putc(0, out); + + // Write the gzip trailer, which is the CRC and the uncompressed length + // modulo 2^32, both in little-endian order. + putc(crc, out); + putc(crc >> 8, out); + putc(crc >> 16, out); + putc(crc >> 24, out); + putc(len, out); + putc(len >> 8, out); + putc(len >> 16, out); + putc(len >> 24, out); + fflush(out); + + // Check for any i/o errors. + if (ferror(in) || ferror(out)) + BYE("i/o error: %s", strerror(errno)); + + // All good! + *err = NULL; + return 0; +} + +// Normalize the gzip stream on stdin, writing the result to stdout. +int main(void) { + // Avoid end-of-line conversions on evil operating systems. + SET_BINARY_MODE(stdin); + SET_BINARY_MODE(stdout); + + // Normalize from stdin to stdout, returning 1 on error, 0 if ok. + char *err; + int ret = gzip_normalize(stdin, stdout, &err); + if (ret) + fprintf(stderr, "gznorm error: %s\n", err); + free(err); + return ret; +} diff --git a/thirdparty/zlib-1.3.1/examples/zlib_how.html b/thirdparty/zlib-1.3.1/examples/zlib_how.html new file mode 100644 index 0000000..43271b9 --- /dev/null +++ b/thirdparty/zlib-1.3.1/examples/zlib_how.html @@ -0,0 +1,549 @@ + + + + +zlib Usage Example + + + +

    zlib Usage Example

    +We often get questions about how the deflate() and inflate() functions should be used. +Users wonder when they should provide more input, when they should use more output, +what to do with a Z_BUF_ERROR, how to make sure the process terminates properly, and +so on. So for those who have read zlib.h (a few times), and +would like further edification, below is an annotated example in C of simple routines to compress and decompress +from an input file to an output file using deflate() and inflate() respectively. The +annotations are interspersed between lines of the code. So please read between the lines. +We hope this helps explain some of the intricacies of zlib. +

    +Without further ado, here is the program zpipe.c: +

    
    +/* zpipe.c: example of proper use of zlib's inflate() and deflate()
    +   Not copyrighted -- provided to the public domain
    +   Version 1.4  11 December 2005  Mark Adler */
    +
    +/* Version history:
    +   1.0  30 Oct 2004  First version
    +   1.1   8 Nov 2004  Add void casting for unused return values
    +                     Use switch statement for inflate() return values
    +   1.2   9 Nov 2004  Add assertions to document zlib guarantees
    +   1.3   6 Apr 2005  Remove incorrect assertion in inf()
    +   1.4  11 Dec 2005  Add hack to avoid MSDOS end-of-line conversions
    +                     Avoid some compiler warnings for input and output buffers
    + */
    +
    +We now include the header files for the required definitions. From +stdio.h we use fopen(), fread(), fwrite(), +feof(), ferror(), and fclose() for file i/o, and +fputs() for error messages. From string.h we use +strcmp() for command line argument processing. +From assert.h we use the assert() macro. +From zlib.h +we use the basic compression functions deflateInit(), +deflate(), and deflateEnd(), and the basic decompression +functions inflateInit(), inflate(), and +inflateEnd(). +
    
    +#include <stdio.h>
    +#include <string.h>
    +#include <assert.h>
    +#include "zlib.h"
    +
    +This is an ugly hack required to avoid corruption of the input and output data on +Windows/MS-DOS systems. Without this, those systems would assume that the input and output +files are text, and try to convert the end-of-line characters from one standard to +another. That would corrupt binary data, and in particular would render the compressed data unusable. +This sets the input and output to binary which suppresses the end-of-line conversions. +SET_BINARY_MODE() will be used later on stdin and stdout, at the beginning of main(). +
    
    +#if defined(MSDOS) || defined(OS2) || defined(WIN32) || defined(__CYGWIN__)
    +#  include <fcntl.h>
    +#  include <io.h>
    +#  define SET_BINARY_MODE(file) setmode(fileno(file), O_BINARY)
    +#else
    +#  define SET_BINARY_MODE(file)
    +#endif
    +
    +CHUNK is simply the buffer size for feeding data to and pulling data +from the zlib routines. Larger buffer sizes would be more efficient, +especially for inflate(). If the memory is available, buffers sizes +on the order of 128K or 256K bytes should be used. +
    
    +#define CHUNK 16384
    +
    +The def() routine compresses data from an input file to an output file. The output data +will be in the zlib format, which is different from the gzip or zip +formats. The zlib format has a very small header of only two bytes to identify it as +a zlib stream and to provide decoding information, and a four-byte trailer with a fast +check value to verify the integrity of the uncompressed data after decoding. +
    
    +/* Compress from file source to file dest until EOF on source.
    +   def() returns Z_OK on success, Z_MEM_ERROR if memory could not be
    +   allocated for processing, Z_STREAM_ERROR if an invalid compression
    +   level is supplied, Z_VERSION_ERROR if the version of zlib.h and the
    +   version of the library linked do not match, or Z_ERRNO if there is
    +   an error reading or writing the files. */
    +int def(FILE *source, FILE *dest, int level)
    +{
    +
    +Here are the local variables for def(). ret will be used for zlib +return codes. flush will keep track of the current flushing state for deflate(), +which is either no flushing, or flush to completion after the end of the input file is reached. +have is the amount of data returned from deflate(). The strm structure +is used to pass information to and from the zlib routines, and to maintain the +deflate() state. in and out are the input and output buffers for +deflate(). +
    
    +    int ret, flush;
    +    unsigned have;
    +    z_stream strm;
    +    unsigned char in[CHUNK];
    +    unsigned char out[CHUNK];
    +
    +The first thing we do is to initialize the zlib state for compression using +deflateInit(). This must be done before the first use of deflate(). +The zalloc, zfree, and opaque fields in the strm +structure must be initialized before calling deflateInit(). Here they are +set to the zlib constant Z_NULL to request that zlib use +the default memory allocation routines. An application may also choose to provide +custom memory allocation routines here. deflateInit() will allocate on the +order of 256K bytes for the internal state. +(See zlib Technical Details.) +

    +deflateInit() is called with a pointer to the structure to be initialized and +the compression level, which is an integer in the range of -1 to 9. Lower compression +levels result in faster execution, but less compression. Higher levels result in +greater compression, but slower execution. The zlib constant Z_DEFAULT_COMPRESSION, +equal to -1, +provides a good compromise between compression and speed and is equivalent to level 6. +Level 0 actually does no compression at all, and in fact expands the data slightly to produce +the zlib format (it is not a byte-for-byte copy of the input). +More advanced applications of zlib +may use deflateInit2() here instead. Such an application may want to reduce how +much memory will be used, at some price in compression. Or it may need to request a +gzip header and trailer instead of a zlib header and trailer, or raw +encoding with no header or trailer at all. +

    +We must check the return value of deflateInit() against the zlib constant +Z_OK to make sure that it was able to +allocate memory for the internal state, and that the provided arguments were valid. +deflateInit() will also check that the version of zlib that the zlib.h +file came from matches the version of zlib actually linked with the program. This +is especially important for environments in which zlib is a shared library. +

    +Note that an application can initialize multiple, independent zlib streams, which can +operate in parallel. The state information maintained in the structure allows the zlib +routines to be reentrant. +

    
    +    /* allocate deflate state */
    +    strm.zalloc = Z_NULL;
    +    strm.zfree = Z_NULL;
    +    strm.opaque = Z_NULL;
    +    ret = deflateInit(&strm, level);
    +    if (ret != Z_OK)
    +        return ret;
    +
    +With the pleasantries out of the way, now we can get down to business. The outer do-loop +reads all of the input file and exits at the bottom of the loop once end-of-file is reached. +This loop contains the only call of deflate(). So we must make sure that all of the +input data has been processed and that all of the output data has been generated and consumed +before we fall out of the loop at the bottom. +
    
    +    /* compress until end of file */
    +    do {
    +
    +We start off by reading data from the input file. The number of bytes read is put directly +into avail_in, and a pointer to those bytes is put into next_in. We also +check to see if end-of-file on the input has been reached using feof(). +If we are at the end of file, then flush is set to the +zlib constant Z_FINISH, which is later passed to deflate() to +indicate that this is the last chunk of input data to compress. +If we are not yet at the end of the input, then the zlib +constant Z_NO_FLUSH will be passed to deflate to indicate that we are still +in the middle of the uncompressed data. +

    +If there is an error in reading from the input file, the process is aborted with +deflateEnd() being called to free the allocated zlib state before returning +the error. We wouldn't want a memory leak, now would we? deflateEnd() can be called +at any time after the state has been initialized. Once that's done, deflateInit() (or +deflateInit2()) would have to be called to start a new compression process. There is +no point here in checking the deflateEnd() return code. The deallocation can't fail. +

    
    +        strm.avail_in = fread(in, 1, CHUNK, source);
    +        if (ferror(source)) {
    +            (void)deflateEnd(&strm);
    +            return Z_ERRNO;
    +        }
    +        flush = feof(source) ? Z_FINISH : Z_NO_FLUSH;
    +        strm.next_in = in;
    +
    +The inner do-loop passes our chunk of input data to deflate(), and then +keeps calling deflate() until it is done producing output. Once there is no more +new output, deflate() is guaranteed to have consumed all of the input, i.e., +avail_in will be zero. +
    
    +        /* run deflate() on input until output buffer not full, finish
    +           compression if all of source has been read in */
    +        do {
    +
    +Output space is provided to deflate() by setting avail_out to the number +of available output bytes and next_out to a pointer to that space. +
    
    +            strm.avail_out = CHUNK;
    +            strm.next_out = out;
    +
    +Now we call the compression engine itself, deflate(). It takes as many of the +avail_in bytes at next_in as it can process, and writes as many as +avail_out bytes to next_out. Those counters and pointers are then +updated past the input data consumed and the output data written. It is the amount of +output space available that may limit how much input is consumed. +Hence the inner loop to make sure that +all of the input is consumed by providing more output space each time. Since avail_in +and next_in are updated by deflate(), we don't have to mess with those +between deflate() calls until it's all used up. +

    +The parameters to deflate() are a pointer to the strm structure containing +the input and output information and the internal compression engine state, and a parameter +indicating whether and how to flush data to the output. Normally deflate will consume +several K bytes of input data before producing any output (except for the header), in order +to accumulate statistics on the data for optimum compression. It will then put out a burst of +compressed data, and proceed to consume more input before the next burst. Eventually, +deflate() +must be told to terminate the stream, complete the compression with provided input data, and +write out the trailer check value. deflate() will continue to compress normally as long +as the flush parameter is Z_NO_FLUSH. Once the Z_FINISH parameter is provided, +deflate() will begin to complete the compressed output stream. However depending on how +much output space is provided, deflate() may have to be called several times until it +has provided the complete compressed stream, even after it has consumed all of the input. The flush +parameter must continue to be Z_FINISH for those subsequent calls. +

    +There are other values of the flush parameter that are used in more advanced applications. You can +force deflate() to produce a burst of output that encodes all of the input data provided +so far, even if it wouldn't have otherwise, for example to control data latency on a link with +compressed data. You can also ask that deflate() do that as well as erase any history up to +that point so that what follows can be decompressed independently, for example for random access +applications. Both requests will degrade compression by an amount depending on how often such +requests are made. +

    +deflate() has a return value that can indicate errors, yet we do not check it here. Why +not? Well, it turns out that deflate() can do no wrong here. Let's go through +deflate()'s return values and dispense with them one by one. The possible values are +Z_OK, Z_STREAM_END, Z_STREAM_ERROR, or Z_BUF_ERROR. Z_OK +is, well, ok. Z_STREAM_END is also ok and will be returned for the last call of +deflate(). This is already guaranteed by calling deflate() with Z_FINISH +until it has no more output. Z_STREAM_ERROR is only possible if the stream is not +initialized properly, but we did initialize it properly. There is no harm in checking for +Z_STREAM_ERROR here, for example to check for the possibility that some +other part of the application inadvertently clobbered the memory containing the zlib state. +Z_BUF_ERROR will be explained further below, but +suffice it to say that this is simply an indication that deflate() could not consume +more input or produce more output. deflate() can be called again with more output space +or more available input, which it will be in this code. +

    
    +            ret = deflate(&strm, flush);    /* no bad return value */
    +            assert(ret != Z_STREAM_ERROR);  /* state not clobbered */
    +
    +Now we compute how much output deflate() provided on the last call, which is the +difference between how much space was provided before the call, and how much output space +is still available after the call. Then that data, if any, is written to the output file. +We can then reuse the output buffer for the next call of deflate(). Again if there +is a file i/o error, we call deflateEnd() before returning to avoid a memory leak. +
    
    +            have = CHUNK - strm.avail_out;
    +            if (fwrite(out, 1, have, dest) != have || ferror(dest)) {
    +                (void)deflateEnd(&strm);
    +                return Z_ERRNO;
    +            }
    +
    +The inner do-loop is repeated until the last deflate() call fails to fill the +provided output buffer. Then we know that deflate() has done as much as it can with +the provided input, and that all of that input has been consumed. We can then fall out of this +loop and reuse the input buffer. +

    +The way we tell that deflate() has no more output is by seeing that it did not fill +the output buffer, leaving avail_out greater than zero. However suppose that +deflate() has no more output, but just so happened to exactly fill the output buffer! +avail_out is zero, and we can't tell that deflate() has done all it can. +As far as we know, deflate() +has more output for us. So we call it again. But now deflate() produces no output +at all, and avail_out remains unchanged as CHUNK. That deflate() call +wasn't able to do anything, either consume input or produce output, and so it returns +Z_BUF_ERROR. (See, I told you I'd cover this later.) However this is not a problem at +all. Now we finally have the desired indication that deflate() is really done, +and so we drop out of the inner loop to provide more input to deflate(). +

    +With flush set to Z_FINISH, this final set of deflate() calls will +complete the output stream. Once that is done, subsequent calls of deflate() would return +Z_STREAM_ERROR if the flush parameter is not Z_FINISH, and do no more processing +until the state is reinitialized. +

    +Some applications of zlib have two loops that call deflate() +instead of the single inner loop we have here. The first loop would call +without flushing and feed all of the data to deflate(). The second loop would call +deflate() with no more +data and the Z_FINISH parameter to complete the process. As you can see from this +example, that can be avoided by simply keeping track of the current flush state. +

    
    +        } while (strm.avail_out == 0);
    +        assert(strm.avail_in == 0);     /* all input will be used */
    +
    +Now we check to see if we have already processed all of the input file. That information was +saved in the flush variable, so we see if that was set to Z_FINISH. If so, +then we're done and we fall out of the outer loop. We're guaranteed to get Z_STREAM_END +from the last deflate() call, since we ran it until the last chunk of input was +consumed and all of the output was generated. +
    
    +        /* done when last data in file processed */
    +    } while (flush != Z_FINISH);
    +    assert(ret == Z_STREAM_END);        /* stream will be complete */
    +
    +The process is complete, but we still need to deallocate the state to avoid a memory leak +(or rather more like a memory hemorrhage if you didn't do this). Then +finally we can return with a happy return value. +
    
    +    /* clean up and return */
    +    (void)deflateEnd(&strm);
    +    return Z_OK;
    +}
    +
    +Now we do the same thing for decompression in the inf() routine. inf() +decompresses what is hopefully a valid zlib stream from the input file and writes the +uncompressed data to the output file. Much of the discussion above for def() +applies to inf() as well, so the discussion here will focus on the differences between +the two. +
    
    +/* Decompress from file source to file dest until stream ends or EOF.
    +   inf() returns Z_OK on success, Z_MEM_ERROR if memory could not be
    +   allocated for processing, Z_DATA_ERROR if the deflate data is
    +   invalid or incomplete, Z_VERSION_ERROR if the version of zlib.h and
    +   the version of the library linked do not match, or Z_ERRNO if there
    +   is an error reading or writing the files. */
    +int inf(FILE *source, FILE *dest)
    +{
    +
    +The local variables have the same functionality as they do for def(). The +only difference is that there is no flush variable, since inflate() +can tell from the zlib stream itself when the stream is complete. +
    
    +    int ret;
    +    unsigned have;
    +    z_stream strm;
    +    unsigned char in[CHUNK];
    +    unsigned char out[CHUNK];
    +
    +The initialization of the state is the same, except that there is no compression level, +of course, and two more elements of the structure are initialized. avail_in +and next_in must be initialized before calling inflateInit(). This +is because the application has the option to provide the start of the zlib stream in +order for inflateInit() to have access to information about the compression +method to aid in memory allocation. In the current implementation of zlib +(up through versions 1.2.x), the method-dependent memory allocations are deferred to the first call of +inflate() anyway. However those fields must be initialized since later versions +of zlib that provide more compression methods may take advantage of this interface. +In any case, no decompression is performed by inflateInit(), so the +avail_out and next_out fields do not need to be initialized before calling. +

    +Here avail_in is set to zero and next_in is set to Z_NULL to +indicate that no input data is being provided. +

    
    +    /* allocate inflate state */
    +    strm.zalloc = Z_NULL;
    +    strm.zfree = Z_NULL;
    +    strm.opaque = Z_NULL;
    +    strm.avail_in = 0;
    +    strm.next_in = Z_NULL;
    +    ret = inflateInit(&strm);
    +    if (ret != Z_OK)
    +        return ret;
    +
    +The outer do-loop decompresses input until inflate() indicates +that it has reached the end of the compressed data and has produced all of the uncompressed +output. This is in contrast to def() which processes all of the input file. +If end-of-file is reached before the compressed data self-terminates, then the compressed +data is incomplete and an error is returned. +
    
    +    /* decompress until deflate stream ends or end of file */
    +    do {
    +
    +We read input data and set the strm structure accordingly. If we've reached the +end of the input file, then we leave the outer loop and report an error, since the +compressed data is incomplete. Note that we may read more data than is eventually consumed +by inflate(), if the input file continues past the zlib stream. +For applications where zlib streams are embedded in other data, this routine would +need to be modified to return the unused data, or at least indicate how much of the input +data was not used, so the application would know where to pick up after the zlib stream. +
    
    +        strm.avail_in = fread(in, 1, CHUNK, source);
    +        if (ferror(source)) {
    +            (void)inflateEnd(&strm);
    +            return Z_ERRNO;
    +        }
    +        if (strm.avail_in == 0)
    +            break;
    +        strm.next_in = in;
    +
    +The inner do-loop has the same function it did in def(), which is to +keep calling inflate() until has generated all of the output it can with the +provided input. +
    
    +        /* run inflate() on input until output buffer not full */
    +        do {
    +
    +Just like in def(), the same output space is provided for each call of inflate(). +
    
    +            strm.avail_out = CHUNK;
    +            strm.next_out = out;
    +
    +Now we run the decompression engine itself. There is no need to adjust the flush parameter, since +the zlib format is self-terminating. The main difference here is that there are +return values that we need to pay attention to. Z_DATA_ERROR +indicates that inflate() detected an error in the zlib compressed data format, +which means that either the data is not a zlib stream to begin with, or that the data was +corrupted somewhere along the way since it was compressed. The other error to be processed is +Z_MEM_ERROR, which can occur since memory allocation is deferred until inflate() +needs it, unlike deflate(), whose memory is allocated at the start by deflateInit(). +

    +Advanced applications may use +deflateSetDictionary() to prime deflate() with a set of likely data to improve the +first 32K or so of compression. This is noted in the zlib header, so inflate() +requests that that dictionary be provided before it can start to decompress. Without the dictionary, +correct decompression is not possible. For this routine, we have no idea what the dictionary is, +so the Z_NEED_DICT indication is converted to a Z_DATA_ERROR. +

    +inflate() can also return Z_STREAM_ERROR, which should not be possible here, +but could be checked for as noted above for def(). Z_BUF_ERROR does not need to be +checked for here, for the same reasons noted for def(). Z_STREAM_END will be +checked for later. +

    
    +            ret = inflate(&strm, Z_NO_FLUSH);
    +            assert(ret != Z_STREAM_ERROR);  /* state not clobbered */
    +            switch (ret) {
    +            case Z_NEED_DICT:
    +                ret = Z_DATA_ERROR;     /* and fall through */
    +            case Z_DATA_ERROR:
    +            case Z_MEM_ERROR:
    +                (void)inflateEnd(&strm);
    +                return ret;
    +            }
    +
    +The output of inflate() is handled identically to that of deflate(). +
    
    +            have = CHUNK - strm.avail_out;
    +            if (fwrite(out, 1, have, dest) != have || ferror(dest)) {
    +                (void)inflateEnd(&strm);
    +                return Z_ERRNO;
    +            }
    +
    +The inner do-loop ends when inflate() has no more output as indicated +by not filling the output buffer, just as for deflate(). In this case, we cannot +assert that strm.avail_in will be zero, since the deflate stream may end before the file +does. +
    
    +        } while (strm.avail_out == 0);
    +
    +The outer do-loop ends when inflate() reports that it has reached the +end of the input zlib stream, has completed the decompression and integrity +check, and has provided all of the output. This is indicated by the inflate() +return value Z_STREAM_END. The inner loop is guaranteed to leave ret +equal to Z_STREAM_END if the last chunk of the input file read contained the end +of the zlib stream. So if the return value is not Z_STREAM_END, the +loop continues to read more input. +
    
    +        /* done when inflate() says it's done */
    +    } while (ret != Z_STREAM_END);
    +
    +At this point, decompression successfully completed, or we broke out of the loop due to no +more data being available from the input file. If the last inflate() return value +is not Z_STREAM_END, then the zlib stream was incomplete and a data error +is returned. Otherwise, we return with a happy return value. Of course, inflateEnd() +is called first to avoid a memory leak. +
    
    +    /* clean up and return */
    +    (void)inflateEnd(&strm);
    +    return ret == Z_STREAM_END ? Z_OK : Z_DATA_ERROR;
    +}
    +
    +That ends the routines that directly use zlib. The following routines make this +a command-line program by running data through the above routines from stdin to +stdout, and handling any errors reported by def() or inf(). +

    +zerr() is used to interpret the possible error codes from def() +and inf(), as detailed in their comments above, and print out an error message. +Note that these are only a subset of the possible return values from deflate() +and inflate(). +

    
    +/* report a zlib or i/o error */
    +void zerr(int ret)
    +{
    +    fputs("zpipe: ", stderr);
    +    switch (ret) {
    +    case Z_ERRNO:
    +        if (ferror(stdin))
    +            fputs("error reading stdin\n", stderr);
    +        if (ferror(stdout))
    +            fputs("error writing stdout\n", stderr);
    +        break;
    +    case Z_STREAM_ERROR:
    +        fputs("invalid compression level\n", stderr);
    +        break;
    +    case Z_DATA_ERROR:
    +        fputs("invalid or incomplete deflate data\n", stderr);
    +        break;
    +    case Z_MEM_ERROR:
    +        fputs("out of memory\n", stderr);
    +        break;
    +    case Z_VERSION_ERROR:
    +        fputs("zlib version mismatch!\n", stderr);
    +    }
    +}
    +
    +Here is the main() routine used to test def() and inf(). The +zpipe command is simply a compression pipe from stdin to stdout, if +no arguments are given, or it is a decompression pipe if zpipe -d is used. If any other +arguments are provided, no compression or decompression is performed. Instead a usage +message is displayed. Examples are zpipe < foo.txt > foo.txt.z to compress, and +zpipe -d < foo.txt.z > foo.txt to decompress. +
    
    +/* compress or decompress from stdin to stdout */
    +int main(int argc, char **argv)
    +{
    +    int ret;
    +
    +    /* avoid end-of-line conversions */
    +    SET_BINARY_MODE(stdin);
    +    SET_BINARY_MODE(stdout);
    +
    +    /* do compression if no arguments */
    +    if (argc == 1) {
    +        ret = def(stdin, stdout, Z_DEFAULT_COMPRESSION);
    +        if (ret != Z_OK)
    +            zerr(ret);
    +        return ret;
    +    }
    +
    +    /* do decompression if -d specified */
    +    else if (argc == 2 && strcmp(argv[1], "-d") == 0) {
    +        ret = inf(stdin, stdout);
    +        if (ret != Z_OK)
    +            zerr(ret);
    +        return ret;
    +    }
    +
    +    /* otherwise, report usage */
    +    else {
    +        fputs("zpipe usage: zpipe [-d] < source > dest\n", stderr);
    +        return 1;
    +    }
    +}
    +
    +
    +Last modified 24 January 2023
    +Copyright © 2004-2023 Mark Adler

    + +Creative Commons License + +Creative Commons Attribution-NoDerivatives 4.0 International License. + + diff --git a/thirdparty/zlib-1.3.1/examples/zpipe.c b/thirdparty/zlib-1.3.1/examples/zpipe.c new file mode 100644 index 0000000..83535d1 --- /dev/null +++ b/thirdparty/zlib-1.3.1/examples/zpipe.c @@ -0,0 +1,205 @@ +/* zpipe.c: example of proper use of zlib's inflate() and deflate() + Not copyrighted -- provided to the public domain + Version 1.4 11 December 2005 Mark Adler */ + +/* Version history: + 1.0 30 Oct 2004 First version + 1.1 8 Nov 2004 Add void casting for unused return values + Use switch statement for inflate() return values + 1.2 9 Nov 2004 Add assertions to document zlib guarantees + 1.3 6 Apr 2005 Remove incorrect assertion in inf() + 1.4 11 Dec 2005 Add hack to avoid MSDOS end-of-line conversions + Avoid some compiler warnings for input and output buffers + */ + +#include +#include +#include +#include "zlib.h" + +#if defined(MSDOS) || defined(OS2) || defined(WIN32) || defined(__CYGWIN__) +# include +# include +# define SET_BINARY_MODE(file) setmode(fileno(file), O_BINARY) +#else +# define SET_BINARY_MODE(file) +#endif + +#define CHUNK 16384 + +/* Compress from file source to file dest until EOF on source. + def() returns Z_OK on success, Z_MEM_ERROR if memory could not be + allocated for processing, Z_STREAM_ERROR if an invalid compression + level is supplied, Z_VERSION_ERROR if the version of zlib.h and the + version of the library linked do not match, or Z_ERRNO if there is + an error reading or writing the files. */ +int def(FILE *source, FILE *dest, int level) +{ + int ret, flush; + unsigned have; + z_stream strm; + unsigned char in[CHUNK]; + unsigned char out[CHUNK]; + + /* allocate deflate state */ + strm.zalloc = Z_NULL; + strm.zfree = Z_NULL; + strm.opaque = Z_NULL; + ret = deflateInit(&strm, level); + if (ret != Z_OK) + return ret; + + /* compress until end of file */ + do { + strm.avail_in = fread(in, 1, CHUNK, source); + if (ferror(source)) { + (void)deflateEnd(&strm); + return Z_ERRNO; + } + flush = feof(source) ? Z_FINISH : Z_NO_FLUSH; + strm.next_in = in; + + /* run deflate() on input until output buffer not full, finish + compression if all of source has been read in */ + do { + strm.avail_out = CHUNK; + strm.next_out = out; + ret = deflate(&strm, flush); /* no bad return value */ + assert(ret != Z_STREAM_ERROR); /* state not clobbered */ + have = CHUNK - strm.avail_out; + if (fwrite(out, 1, have, dest) != have || ferror(dest)) { + (void)deflateEnd(&strm); + return Z_ERRNO; + } + } while (strm.avail_out == 0); + assert(strm.avail_in == 0); /* all input will be used */ + + /* done when last data in file processed */ + } while (flush != Z_FINISH); + assert(ret == Z_STREAM_END); /* stream will be complete */ + + /* clean up and return */ + (void)deflateEnd(&strm); + return Z_OK; +} + +/* Decompress from file source to file dest until stream ends or EOF. + inf() returns Z_OK on success, Z_MEM_ERROR if memory could not be + allocated for processing, Z_DATA_ERROR if the deflate data is + invalid or incomplete, Z_VERSION_ERROR if the version of zlib.h and + the version of the library linked do not match, or Z_ERRNO if there + is an error reading or writing the files. */ +int inf(FILE *source, FILE *dest) +{ + int ret; + unsigned have; + z_stream strm; + unsigned char in[CHUNK]; + unsigned char out[CHUNK]; + + /* allocate inflate state */ + strm.zalloc = Z_NULL; + strm.zfree = Z_NULL; + strm.opaque = Z_NULL; + strm.avail_in = 0; + strm.next_in = Z_NULL; + ret = inflateInit(&strm); + if (ret != Z_OK) + return ret; + + /* decompress until deflate stream ends or end of file */ + do { + strm.avail_in = fread(in, 1, CHUNK, source); + if (ferror(source)) { + (void)inflateEnd(&strm); + return Z_ERRNO; + } + if (strm.avail_in == 0) + break; + strm.next_in = in; + + /* run inflate() on input until output buffer not full */ + do { + strm.avail_out = CHUNK; + strm.next_out = out; + ret = inflate(&strm, Z_NO_FLUSH); + assert(ret != Z_STREAM_ERROR); /* state not clobbered */ + switch (ret) { + case Z_NEED_DICT: + ret = Z_DATA_ERROR; /* and fall through */ + case Z_DATA_ERROR: + case Z_MEM_ERROR: + (void)inflateEnd(&strm); + return ret; + } + have = CHUNK - strm.avail_out; + if (fwrite(out, 1, have, dest) != have || ferror(dest)) { + (void)inflateEnd(&strm); + return Z_ERRNO; + } + } while (strm.avail_out == 0); + + /* done when inflate() says it's done */ + } while (ret != Z_STREAM_END); + + /* clean up and return */ + (void)inflateEnd(&strm); + return ret == Z_STREAM_END ? Z_OK : Z_DATA_ERROR; +} + +/* report a zlib or i/o error */ +void zerr(int ret) +{ + fputs("zpipe: ", stderr); + switch (ret) { + case Z_ERRNO: + if (ferror(stdin)) + fputs("error reading stdin\n", stderr); + if (ferror(stdout)) + fputs("error writing stdout\n", stderr); + break; + case Z_STREAM_ERROR: + fputs("invalid compression level\n", stderr); + break; + case Z_DATA_ERROR: + fputs("invalid or incomplete deflate data\n", stderr); + break; + case Z_MEM_ERROR: + fputs("out of memory\n", stderr); + break; + case Z_VERSION_ERROR: + fputs("zlib version mismatch!\n", stderr); + } +} + +/* compress or decompress from stdin to stdout */ +int main(int argc, char **argv) +{ + int ret; + + /* avoid end-of-line conversions */ + SET_BINARY_MODE(stdin); + SET_BINARY_MODE(stdout); + + /* do compression if no arguments */ + if (argc == 1) { + ret = def(stdin, stdout, Z_DEFAULT_COMPRESSION); + if (ret != Z_OK) + zerr(ret); + return ret; + } + + /* do decompression if -d specified */ + else if (argc == 2 && strcmp(argv[1], "-d") == 0) { + ret = inf(stdin, stdout); + if (ret != Z_OK) + zerr(ret); + return ret; + } + + /* otherwise, report usage */ + else { + fputs("zpipe usage: zpipe [-d] < source > dest\n", stderr); + return 1; + } +} diff --git a/thirdparty/zlib-1.3.1/examples/zran.c b/thirdparty/zlib-1.3.1/examples/zran.c new file mode 100644 index 0000000..d313595 --- /dev/null +++ b/thirdparty/zlib-1.3.1/examples/zran.c @@ -0,0 +1,533 @@ +/* zran.c -- example of deflate stream indexing and random access + * Copyright (C) 2005, 2012, 2018, 2023 Mark Adler + * For conditions of distribution and use, see copyright notice in zlib.h + * Version 1.4 13 Apr 2023 Mark Adler */ + +/* Version History: + 1.0 29 May 2005 First version + 1.1 29 Sep 2012 Fix memory reallocation error + 1.2 14 Oct 2018 Handle gzip streams with multiple members + Add a header file to facilitate usage in applications + 1.3 18 Feb 2023 Permit raw deflate streams as well as zlib and gzip + Permit crossing gzip member boundaries when extracting + Support a size_t size when extracting (was an int) + Do a binary search over the index for an access point + Expose the access point type to enable save and load + 1.4 13 Apr 2023 Add a NOPRIME define to not use inflatePrime() + */ + +// Illustrate the use of Z_BLOCK, inflatePrime(), and inflateSetDictionary() +// for random access of a compressed file. A file containing a raw deflate +// stream is provided on the command line. The compressed stream is decoded in +// its entirety, and an index built with access points about every SPAN bytes +// in the uncompressed output. The compressed file is left open, and can then +// be read randomly, having to decompress on the average SPAN/2 uncompressed +// bytes before getting to the desired block of data. +// +// An access point can be created at the start of any deflate block, by saving +// the starting file offset and bit of that block, and the 32K bytes of +// uncompressed data that precede that block. Also the uncompressed offset of +// that block is saved to provide a reference for locating a desired starting +// point in the uncompressed stream. deflate_index_build() decompresses the +// input raw deflate stream a block at a time, and at the end of each block +// decides if enough uncompressed data has gone by to justify the creation of a +// new access point. If so, that point is saved in a data structure that grows +// as needed to accommodate the points. +// +// To use the index, an offset in the uncompressed data is provided, for which +// the latest access point at or preceding that offset is located in the index. +// The input file is positioned to the specified location in the index, and if +// necessary the first few bits of the compressed data is read from the file. +// inflate is initialized with those bits and the 32K of uncompressed data, and +// decompression then proceeds until the desired offset in the file is reached. +// Then decompression continues to read the requested uncompressed data from +// the file. +// +// There is some fair bit of overhead to starting inflation for the random +// access, mainly copying the 32K byte dictionary. If small pieces of the file +// are being accessed, it would make sense to implement a cache to hold some +// lookahead to avoid many calls to deflate_index_extract() for small lengths. +// +// Another way to build an index would be to use inflateCopy(). That would not +// be constrained to have access points at block boundaries, but would require +// more memory per access point, and could not be saved to a file due to the +// use of pointers in the state. The approach here allows for storage of the +// index in a file. + +#include +#include +#include +#include +#include "zlib.h" +#include "zran.h" + +#define WINSIZE 32768U // sliding window size +#define CHUNK 16384 // file input buffer size + +// See comments in zran.h. +void deflate_index_free(struct deflate_index *index) { + if (index != NULL) { + free(index->list); + free(index); + } +} + +// Add an access point to the list. If out of memory, deallocate the existing +// list and return NULL. index->mode is temporarily the allocated number of +// access points, until it is time for deflate_index_build() to return. Then +// index->mode is set to the mode of inflation. +static struct deflate_index *add_point(struct deflate_index *index, int bits, + off_t in, off_t out, unsigned left, + unsigned char *window) { + if (index == NULL) { + // The list is empty. Create it, starting with eight access points. + index = malloc(sizeof(struct deflate_index)); + if (index == NULL) + return NULL; + index->have = 0; + index->mode = 8; + index->list = malloc(sizeof(point_t) * index->mode); + if (index->list == NULL) { + free(index); + return NULL; + } + } + + else if (index->have == index->mode) { + // The list is full. Make it bigger. + index->mode <<= 1; + point_t *next = realloc(index->list, sizeof(point_t) * index->mode); + if (next == NULL) { + deflate_index_free(index); + return NULL; + } + index->list = next; + } + + // Fill in the access point and increment how many we have. + point_t *next = (point_t *)(index->list) + index->have++; + if (index->have < 0) { + // Overflowed the int! + deflate_index_free(index); + return NULL; + } + next->out = out; + next->in = in; + next->bits = bits; + if (left) + memcpy(next->window, window + WINSIZE - left, left); + if (left < WINSIZE) + memcpy(next->window + left, window, WINSIZE - left); + + // Return the index, which may have been newly allocated or destroyed. + return index; +} + +// Decompression modes. These are the inflateInit2() windowBits parameter. +#define RAW -15 +#define ZLIB 15 +#define GZIP 31 + +// See comments in zran.h. +int deflate_index_build(FILE *in, off_t span, struct deflate_index **built) { + // Set up inflation state. + z_stream strm = {0}; // inflate engine (gets fired up later) + unsigned char buf[CHUNK]; // input buffer + unsigned char win[WINSIZE] = {0}; // output sliding window + off_t totin = 0; // total bytes read from input + off_t totout = 0; // total bytes uncompressed + int mode = 0; // mode: RAW, ZLIB, or GZIP (0 => not set yet) + + // Decompress from in, generating access points along the way. + int ret; // the return value from zlib, or Z_ERRNO + off_t last; // last access point uncompressed offset + struct deflate_index *index = NULL; // list of access points + do { + // Assure available input, at least until reaching EOF. + if (strm.avail_in == 0) { + strm.avail_in = fread(buf, 1, sizeof(buf), in); + totin += strm.avail_in; + strm.next_in = buf; + if (strm.avail_in < sizeof(buf) && ferror(in)) { + ret = Z_ERRNO; + break; + } + + if (mode == 0) { + // At the start of the input -- determine the type. Assume raw + // if it is neither zlib nor gzip. This could in theory result + // in a false positive for zlib, but in practice the fill bits + // after a stored block are always zeros, so a raw stream won't + // start with an 8 in the low nybble. + mode = strm.avail_in == 0 ? RAW : // empty -- will fail + (strm.next_in[0] & 0xf) == 8 ? ZLIB : + strm.next_in[0] == 0x1f ? GZIP : + /* else */ RAW; + ret = inflateInit2(&strm, mode); + if (ret != Z_OK) + break; + } + } + + // Assure available output. This rotates the output through, for use as + // a sliding window on the uncompressed data. + if (strm.avail_out == 0) { + strm.avail_out = sizeof(win); + strm.next_out = win; + } + + if (mode == RAW && index == NULL) + // We skip the inflate() call at the start of raw deflate data in + // order generate an access point there. Set data_type to imitate + // the end of a header. + strm.data_type = 0x80; + else { + // Inflate and update the number of uncompressed bytes. + unsigned before = strm.avail_out; + ret = inflate(&strm, Z_BLOCK); + totout += before - strm.avail_out; + } + + if ((strm.data_type & 0xc0) == 0x80 && + (index == NULL || totout - last >= span)) { + // We are at the end of a header or a non-last deflate block, so we + // can add an access point here. Furthermore, we are either at the + // very start for the first access point, or there has been span or + // more uncompressed bytes since the last access point, so we want + // to add an access point here. + index = add_point(index, strm.data_type & 7, totin - strm.avail_in, + totout, strm.avail_out, win); + if (index == NULL) { + ret = Z_MEM_ERROR; + break; + } + last = totout; + } + + if (ret == Z_STREAM_END && mode == GZIP && + (strm.avail_in || ungetc(getc(in), in) != EOF)) + // There is more input after the end of a gzip member. Reset the + // inflate state to read another gzip member. On success, this will + // set ret to Z_OK to continue decompressing. + ret = inflateReset2(&strm, GZIP); + + // Keep going until Z_STREAM_END or error. If the compressed data ends + // prematurely without a file read error, Z_BUF_ERROR is returned. + } while (ret == Z_OK); + inflateEnd(&strm); + + if (ret != Z_STREAM_END) { + // An error was encountered. Discard the index and return a negative + // error code. + deflate_index_free(index); + return ret == Z_NEED_DICT ? Z_DATA_ERROR : ret; + } + + // Shrink the index to only the occupied access points and return it. + index->mode = mode; + index->length = totout; + point_t *list = realloc(index->list, sizeof(point_t) * index->have); + if (list == NULL) { + // Seems like a realloc() to make something smaller should always work, + // but just in case. + deflate_index_free(index); + return Z_MEM_ERROR; + } + index->list = list; + *built = index; + return index->have; +} + +#ifdef NOPRIME +// Support zlib versions before 1.2.3 (July 2005), or incomplete zlib clones +// that do not have inflatePrime(). + +# define INFLATEPRIME inflatePreface + +// Append the low bits bits of value to in[] at bit position *have, updating +// *have. value must be zero above its low bits bits. bits must be positive. +// This assumes that any bits above the *have bits in the last byte are zeros. +// That assumption is preserved on return, as any bits above *have + bits in +// the last byte written will be set to zeros. +static inline void append_bits(unsigned value, int bits, + unsigned char *in, int *have) { + in += *have >> 3; // where the first bits from value will go + int k = *have & 7; // the number of bits already there + *have += bits; + if (k) + *in |= value << k; // write value above the low k bits + else + *in = value; + k = 8 - k; // the number of bits just appended + while (bits > k) { + value >>= k; // drop the bits appended + bits -= k; + k = 8; // now at a byte boundary + *++in = value; + } +} + +// Insert enough bits in the form of empty deflate blocks in front of the +// low bits bits of value, in order to bring the sequence to a byte boundary. +// Then feed that to inflate(). This does what inflatePrime() does, except that +// a negative value of bits is not supported. bits must be in 0..16. If the +// arguments are invalid, Z_STREAM_ERROR is returned. Otherwise the return +// value from inflate() is returned. +static int inflatePreface(z_stream *strm, int bits, int value) { + // Check input. + if (strm == Z_NULL || bits < 0 || bits > 16) + return Z_STREAM_ERROR; + if (bits == 0) + return Z_OK; + value &= (2 << (bits - 1)) - 1; + + // An empty dynamic block with an odd number of bits (95). The high bit of + // the last byte is unused. + static const unsigned char dyn[] = { + 4, 0xe0, 0x81, 8, 0, 0, 0, 0, 0x20, 0xa8, 0xab, 0x1f + }; + const int dynlen = 95; // number of bits in the block + + // Build an input buffer for inflate that is a multiple of eight bits in + // length, and that ends with the low bits bits of value. + unsigned char in[(dynlen + 3 * 10 + 16 + 7) / 8]; + int have = 0; + if (bits & 1) { + // Insert an empty dynamic block to get to an odd number of bits, so + // when bits bits from value are appended, we are at an even number of + // bits. + memcpy(in, dyn, sizeof(dyn)); + have = dynlen; + } + while ((have + bits) & 7) + // Insert empty fixed blocks until appending bits bits would put us on + // a byte boundary. This will insert at most three fixed blocks. + append_bits(2, 10, in, &have); + + // Append the bits bits from value, which takes us to a byte boundary. + append_bits(value, bits, in, &have); + + // Deliver the input to inflate(). There is no output space provided, but + // inflate() can't get stuck waiting on output not ingesting all of the + // provided input. The reason is that there will be at most 16 bits of + // input from value after the empty deflate blocks (which themselves + // generate no output). At least ten bits are needed to generate the first + // output byte from a fixed block. The last two bytes of the buffer have to + // be ingested in order to get ten bits, which is the most that value can + // occupy. + strm->avail_in = have >> 3; + strm->next_in = in; + strm->avail_out = 0; + strm->next_out = in; // not used, but can't be NULL + return inflate(strm, Z_NO_FLUSH); +} + +#else +# define INFLATEPRIME inflatePrime +#endif + +// See comments in zran.h. +ptrdiff_t deflate_index_extract(FILE *in, struct deflate_index *index, + off_t offset, unsigned char *buf, size_t len) { + // Do a quick sanity check on the index. + if (index == NULL || index->have < 1 || index->list[0].out != 0) + return Z_STREAM_ERROR; + + // If nothing to extract, return zero bytes extracted. + if (len == 0 || offset < 0 || offset >= index->length) + return 0; + + // Find the access point closest to but not after offset. + int lo = -1, hi = index->have; + point_t *point = index->list; + while (hi - lo > 1) { + int mid = (lo + hi) >> 1; + if (offset < point[mid].out) + hi = mid; + else + lo = mid; + } + point += lo; + + // Initialize the input file and prime the inflate engine to start there. + int ret = fseeko(in, point->in - (point->bits ? 1 : 0), SEEK_SET); + if (ret == -1) + return Z_ERRNO; + int ch = 0; + if (point->bits && (ch = getc(in)) == EOF) + return ferror(in) ? Z_ERRNO : Z_BUF_ERROR; + z_stream strm = {0}; + ret = inflateInit2(&strm, RAW); + if (ret != Z_OK) + return ret; + if (point->bits) + INFLATEPRIME(&strm, point->bits, ch >> (8 - point->bits)); + inflateSetDictionary(&strm, point->window, WINSIZE); + + // Skip uncompressed bytes until offset reached, then satisfy request. + unsigned char input[CHUNK]; + unsigned char discard[WINSIZE]; + offset -= point->out; // number of bytes to skip to get to offset + size_t left = len; // number of bytes left to read after offset + do { + if (offset) { + // Discard up to offset uncompressed bytes. + strm.avail_out = offset < WINSIZE ? (unsigned)offset : WINSIZE; + strm.next_out = discard; + } + else { + // Uncompress up to left bytes into buf. + strm.avail_out = left < UINT_MAX ? (unsigned)left : UINT_MAX; + strm.next_out = buf + len - left; + } + + // Uncompress, setting got to the number of bytes uncompressed. + if (strm.avail_in == 0) { + // Assure available input. + strm.avail_in = fread(input, 1, CHUNK, in); + if (strm.avail_in < CHUNK && ferror(in)) { + ret = Z_ERRNO; + break; + } + strm.next_in = input; + } + unsigned got = strm.avail_out; + ret = inflate(&strm, Z_NO_FLUSH); + got -= strm.avail_out; + + // Update the appropriate count. + if (offset) + offset -= got; + else + left -= got; + + // If we're at the end of a gzip member and there's more to read, + // continue to the next gzip member. + if (ret == Z_STREAM_END && index->mode == GZIP) { + // Discard the gzip trailer. + unsigned drop = 8; // length of gzip trailer + if (strm.avail_in >= drop) { + strm.avail_in -= drop; + strm.next_in += drop; + } + else { + // Read and discard the remainder of the gzip trailer. + drop -= strm.avail_in; + strm.avail_in = 0; + do { + if (getc(in) == EOF) + // The input does not have a complete trailer. + return ferror(in) ? Z_ERRNO : Z_BUF_ERROR; + } while (--drop); + } + + if (strm.avail_in || ungetc(getc(in), in) != EOF) { + // There's more after the gzip trailer. Use inflate to skip the + // gzip header and resume the raw inflate there. + inflateReset2(&strm, GZIP); + do { + if (strm.avail_in == 0) { + strm.avail_in = fread(input, 1, CHUNK, in); + if (strm.avail_in < CHUNK && ferror(in)) { + ret = Z_ERRNO; + break; + } + strm.next_in = input; + } + strm.avail_out = WINSIZE; + strm.next_out = discard; + ret = inflate(&strm, Z_BLOCK); // stop at end of header + } while (ret == Z_OK && (strm.data_type & 0x80) == 0); + if (ret != Z_OK) + break; + inflateReset2(&strm, RAW); + } + } + + // Continue until we have the requested data, the deflate data has + // ended, or an error is encountered. + } while (ret == Z_OK && left); + inflateEnd(&strm); + + // Return the number of uncompressed bytes read into buf, or the error. + return ret == Z_OK || ret == Z_STREAM_END ? len - left : ret; +} + +#ifdef TEST + +#define SPAN 1048576L // desired distance between access points +#define LEN 16384 // number of bytes to extract + +// Demonstrate the use of deflate_index_build() and deflate_index_extract() by +// processing the file provided on the command line, and extracting LEN bytes +// from 2/3rds of the way through the uncompressed output, writing that to +// stdout. An offset can be provided as the second argument, in which case the +// data is extracted from there instead. +int main(int argc, char **argv) { + // Open the input file. + if (argc < 2 || argc > 3) { + fprintf(stderr, "usage: zran file.raw [offset]\n"); + return 1; + } + FILE *in = fopen(argv[1], "rb"); + if (in == NULL) { + fprintf(stderr, "zran: could not open %s for reading\n", argv[1]); + return 1; + } + + // Get optional offset. + off_t offset = -1; + if (argc == 3) { + char *end; + offset = strtoll(argv[2], &end, 10); + if (*end || offset < 0) { + fprintf(stderr, "zran: %s is not a valid offset\n", argv[2]); + return 1; + } + } + + // Build index. + struct deflate_index *index = NULL; + int len = deflate_index_build(in, SPAN, &index); + if (len < 0) { + fclose(in); + switch (len) { + case Z_MEM_ERROR: + fprintf(stderr, "zran: out of memory\n"); + break; + case Z_BUF_ERROR: + fprintf(stderr, "zran: %s ended prematurely\n", argv[1]); + break; + case Z_DATA_ERROR: + fprintf(stderr, "zran: compressed data error in %s\n", argv[1]); + break; + case Z_ERRNO: + fprintf(stderr, "zran: read error on %s\n", argv[1]); + break; + default: + fprintf(stderr, "zran: error %d while building index\n", len); + } + return 1; + } + fprintf(stderr, "zran: built index with %d access points\n", len); + + // Use index by reading some bytes from an arbitrary offset. + unsigned char buf[LEN]; + if (offset == -1) + offset = ((index->length + 1) << 1) / 3; + ptrdiff_t got = deflate_index_extract(in, index, offset, buf, LEN); + if (got < 0) + fprintf(stderr, "zran: extraction failed: %s error\n", + got == Z_MEM_ERROR ? "out of memory" : "input corrupted"); + else { + fwrite(buf, 1, got, stdout); + fprintf(stderr, "zran: extracted %ld bytes at %lld\n", got, offset); + } + + // Clean up and exit. + deflate_index_free(index); + fclose(in); + return 0; +} + +#endif diff --git a/thirdparty/zlib-1.3.1/examples/zran.h b/thirdparty/zlib-1.3.1/examples/zran.h new file mode 100644 index 0000000..ebf780d --- /dev/null +++ b/thirdparty/zlib-1.3.1/examples/zran.h @@ -0,0 +1,51 @@ +/* zran.h -- example of deflated stream indexing and random access + * Copyright (C) 2005, 2012, 2018, 2023 Mark Adler + * For conditions of distribution and use, see copyright notice in zlib.h + * Version 1.3 18 Feb 2023 Mark Adler */ + +#include +#include "zlib.h" + +// Access point. +typedef struct point { + off_t out; // offset in uncompressed data + off_t in; // offset in compressed file of first full byte + int bits; // 0, or number of bits (1-7) from byte at in-1 + unsigned char window[32768]; // preceding 32K of uncompressed data +} point_t; + +// Access point list. +struct deflate_index { + int have; // number of access points in list + int mode; // -15 for raw, 15 for zlib, or 31 for gzip + off_t length; // total length of uncompressed data + point_t *list; // allocated list of access points +}; + +// Make one pass through a zlib, gzip, or raw deflate compressed stream and +// build an index, with access points about every span bytes of uncompressed +// output. gzip files with multiple members are fully indexed. span should be +// chosen to balance the speed of random access against the memory requirements +// of the list, which is about 32K bytes per access point. The return value is +// the number of access points on success (>= 1), Z_MEM_ERROR for out of +// memory, Z_BUF_ERROR for a premature end of input, Z_DATA_ERROR for a format +// or verification error in the input file, or Z_ERRNO for a file read error. +// On success, *built points to the resulting index. +int deflate_index_build(FILE *in, off_t span, struct deflate_index **built); + +// Use the index to read len bytes from offset into buf. Return the number of +// bytes read or a negative error code. If data is requested past the end of +// the uncompressed data, then deflate_index_extract() will return a value less +// than len, indicating how much was actually read into buf. If given a valid +// index, this function should not return an error unless the file was modified +// somehow since the index was generated, given that deflate_index_build() had +// validated all of the input. If nevertheless there is a failure, Z_BUF_ERROR +// is returned if the compressed data ends prematurely, Z_DATA_ERROR if the +// deflate compressed data is not valid, Z_MEM_ERROR if out of memory, +// Z_STREAM_ERROR if the index is not valid, or Z_ERRNO if there is an error +// reading or seeking on the input file. +ptrdiff_t deflate_index_extract(FILE *in, struct deflate_index *index, + off_t offset, unsigned char *buf, size_t len); + +// Deallocate an index built by deflate_index_build(). +void deflate_index_free(struct deflate_index *index); diff --git a/thirdparty/zlib-1.3.1/gzclose.c b/thirdparty/zlib-1.3.1/gzclose.c new file mode 100644 index 0000000..48d6a86 --- /dev/null +++ b/thirdparty/zlib-1.3.1/gzclose.c @@ -0,0 +1,23 @@ +/* gzclose.c -- zlib gzclose() function + * Copyright (C) 2004, 2010 Mark Adler + * For conditions of distribution and use, see copyright notice in zlib.h + */ + +#include "gzguts.h" + +/* gzclose() is in a separate file so that it is linked in only if it is used. + That way the other gzclose functions can be used instead to avoid linking in + unneeded compression or decompression routines. */ +int ZEXPORT gzclose(gzFile file) { +#ifndef NO_GZCOMPRESS + gz_statep state; + + if (file == NULL) + return Z_STREAM_ERROR; + state = (gz_statep)file; + + return state->mode == GZ_READ ? gzclose_r(file) : gzclose_w(file); +#else + return gzclose_r(file); +#endif +} diff --git a/thirdparty/zlib-1.3.1/gzguts.h b/thirdparty/zlib-1.3.1/gzguts.h new file mode 100644 index 0000000..eba7208 --- /dev/null +++ b/thirdparty/zlib-1.3.1/gzguts.h @@ -0,0 +1,214 @@ +/* gzguts.h -- zlib internal header definitions for gz* operations + * Copyright (C) 2004-2024 Mark Adler + * For conditions of distribution and use, see copyright notice in zlib.h + */ + +#ifdef _LARGEFILE64_SOURCE +# ifndef _LARGEFILE_SOURCE +# define _LARGEFILE_SOURCE 1 +# endif +# undef _FILE_OFFSET_BITS +# undef _TIME_BITS +#endif + +#ifdef HAVE_HIDDEN +# define ZLIB_INTERNAL __attribute__((visibility ("hidden"))) +#else +# define ZLIB_INTERNAL +#endif + +#include +#include "zlib.h" +#ifdef STDC +# include +# include +# include +#endif + +#ifndef _POSIX_SOURCE +# define _POSIX_SOURCE +#endif +#include + +#ifdef _WIN32 +# include +#endif + +#if defined(__TURBOC__) || defined(_MSC_VER) || defined(_WIN32) +# include +#endif + +#if defined(_WIN32) +# define WIDECHAR +#endif + +#ifdef WINAPI_FAMILY +# define open _open +# define read _read +# define write _write +# define close _close +#endif + +#ifdef NO_DEFLATE /* for compatibility with old definition */ +# define NO_GZCOMPRESS +#endif + +#if defined(STDC99) || (defined(__TURBOC__) && __TURBOC__ >= 0x550) +# ifndef HAVE_VSNPRINTF +# define HAVE_VSNPRINTF +# endif +#endif + +#if defined(__CYGWIN__) +# ifndef HAVE_VSNPRINTF +# define HAVE_VSNPRINTF +# endif +#endif + +#if defined(MSDOS) && defined(__BORLANDC__) && (BORLANDC > 0x410) +# ifndef HAVE_VSNPRINTF +# define HAVE_VSNPRINTF +# endif +#endif + +#ifndef HAVE_VSNPRINTF +# ifdef MSDOS +/* vsnprintf may exist on some MS-DOS compilers (DJGPP?), + but for now we just assume it doesn't. */ +# define NO_vsnprintf +# endif +# ifdef __TURBOC__ +# define NO_vsnprintf +# endif +# ifdef WIN32 +/* In Win32, vsnprintf is available as the "non-ANSI" _vsnprintf. */ +# if !defined(vsnprintf) && !defined(NO_vsnprintf) +# if !defined(_MSC_VER) || ( defined(_MSC_VER) && _MSC_VER < 1500 ) +# define vsnprintf _vsnprintf +# endif +# endif +# endif +# ifdef __SASC +# define NO_vsnprintf +# endif +# ifdef VMS +# define NO_vsnprintf +# endif +# ifdef __OS400__ +# define NO_vsnprintf +# endif +# ifdef __MVS__ +# define NO_vsnprintf +# endif +#endif + +/* unlike snprintf (which is required in C99), _snprintf does not guarantee + null termination of the result -- however this is only used in gzlib.c where + the result is assured to fit in the space provided */ +#if defined(_MSC_VER) && _MSC_VER < 1900 +# define snprintf _snprintf +#endif + +#ifndef local +# define local static +#endif +/* since "static" is used to mean two completely different things in C, we + define "local" for the non-static meaning of "static", for readability + (compile with -Dlocal if your debugger can't find static symbols) */ + +/* gz* functions always use library allocation functions */ +#ifndef STDC + extern voidp malloc(uInt size); + extern void free(voidpf ptr); +#endif + +/* get errno and strerror definition */ +#if defined UNDER_CE +# include +# define zstrerror() gz_strwinerror((DWORD)GetLastError()) +#else +# ifndef NO_STRERROR +# include +# define zstrerror() strerror(errno) +# else +# define zstrerror() "stdio error (consult errno)" +# endif +#endif + +/* provide prototypes for these when building zlib without LFS */ +#if !defined(_LARGEFILE64_SOURCE) || _LFS64_LARGEFILE-0 == 0 + ZEXTERN gzFile ZEXPORT gzopen64(const char *, const char *); + ZEXTERN z_off64_t ZEXPORT gzseek64(gzFile, z_off64_t, int); + ZEXTERN z_off64_t ZEXPORT gztell64(gzFile); + ZEXTERN z_off64_t ZEXPORT gzoffset64(gzFile); +#endif + +/* default memLevel */ +#if MAX_MEM_LEVEL >= 8 +# define DEF_MEM_LEVEL 8 +#else +# define DEF_MEM_LEVEL MAX_MEM_LEVEL +#endif + +/* default i/o buffer size -- double this for output when reading (this and + twice this must be able to fit in an unsigned type) */ +#define GZBUFSIZE 8192 + +/* gzip modes, also provide a little integrity check on the passed structure */ +#define GZ_NONE 0 +#define GZ_READ 7247 +#define GZ_WRITE 31153 +#define GZ_APPEND 1 /* mode set to GZ_WRITE after the file is opened */ + +/* values for gz_state how */ +#define LOOK 0 /* look for a gzip header */ +#define COPY 1 /* copy input directly */ +#define GZIP 2 /* decompress a gzip stream */ + +/* internal gzip file state data structure */ +typedef struct { + /* exposed contents for gzgetc() macro */ + struct gzFile_s x; /* "x" for exposed */ + /* x.have: number of bytes available at x.next */ + /* x.next: next output data to deliver or write */ + /* x.pos: current position in uncompressed data */ + /* used for both reading and writing */ + int mode; /* see gzip modes above */ + int fd; /* file descriptor */ + char *path; /* path or fd for error messages */ + unsigned size; /* buffer size, zero if not allocated yet */ + unsigned want; /* requested buffer size, default is GZBUFSIZE */ + unsigned char *in; /* input buffer (double-sized when writing) */ + unsigned char *out; /* output buffer (double-sized when reading) */ + int direct; /* 0 if processing gzip, 1 if transparent */ + /* just for reading */ + int how; /* 0: get header, 1: copy, 2: decompress */ + z_off64_t start; /* where the gzip data started, for rewinding */ + int eof; /* true if end of input file reached */ + int past; /* true if read requested past end */ + /* just for writing */ + int level; /* compression level */ + int strategy; /* compression strategy */ + int reset; /* true if a reset is pending after a Z_FINISH */ + /* seek request */ + z_off64_t skip; /* amount to skip (already rewound if backwards) */ + int seek; /* true if seek request pending */ + /* error information */ + int err; /* error code */ + char *msg; /* error message */ + /* zlib inflate or deflate stream */ + z_stream strm; /* stream structure in-place (not a pointer) */ +} gz_state; +typedef gz_state FAR *gz_statep; + +/* shared functions */ +void ZLIB_INTERNAL gz_error(gz_statep, int, const char *); +#if defined UNDER_CE +char ZLIB_INTERNAL *gz_strwinerror(DWORD error); +#endif + +/* GT_OFF(x), where x is an unsigned value, is true if x > maximum z_off64_t + value -- needed when comparing unsigned to z_off64_t, which is signed + (possible z_off64_t types off_t, off64_t, and long are all signed) */ +unsigned ZLIB_INTERNAL gz_intmax(void); +#define GT_OFF(x) (sizeof(int) == sizeof(z_off64_t) && (x) > gz_intmax()) diff --git a/thirdparty/zlib-1.3.1/gzlib.c b/thirdparty/zlib-1.3.1/gzlib.c new file mode 100644 index 0000000..983153c --- /dev/null +++ b/thirdparty/zlib-1.3.1/gzlib.c @@ -0,0 +1,582 @@ +/* gzlib.c -- zlib functions common to reading and writing gzip files + * Copyright (C) 2004-2024 Mark Adler + * For conditions of distribution and use, see copyright notice in zlib.h + */ + +#include "gzguts.h" + +#if defined(_WIN32) && !defined(__BORLANDC__) +# define LSEEK _lseeki64 +#else +#if defined(_LARGEFILE64_SOURCE) && _LFS64_LARGEFILE-0 +# define LSEEK lseek64 +#else +# define LSEEK lseek +#endif +#endif + +#if defined UNDER_CE + +/* Map the Windows error number in ERROR to a locale-dependent error message + string and return a pointer to it. Typically, the values for ERROR come + from GetLastError. + + The string pointed to shall not be modified by the application, but may be + overwritten by a subsequent call to gz_strwinerror + + The gz_strwinerror function does not change the current setting of + GetLastError. */ +char ZLIB_INTERNAL *gz_strwinerror(DWORD error) { + static char buf[1024]; + + wchar_t *msgbuf; + DWORD lasterr = GetLastError(); + DWORD chars = FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM + | FORMAT_MESSAGE_ALLOCATE_BUFFER, + NULL, + error, + 0, /* Default language */ + (LPVOID)&msgbuf, + 0, + NULL); + if (chars != 0) { + /* If there is an \r\n appended, zap it. */ + if (chars >= 2 + && msgbuf[chars - 2] == '\r' && msgbuf[chars - 1] == '\n') { + chars -= 2; + msgbuf[chars] = 0; + } + + if (chars > sizeof (buf) - 1) { + chars = sizeof (buf) - 1; + msgbuf[chars] = 0; + } + + wcstombs(buf, msgbuf, chars + 1); + LocalFree(msgbuf); + } + else { + sprintf(buf, "unknown win32 error (%ld)", error); + } + + SetLastError(lasterr); + return buf; +} + +#endif /* UNDER_CE */ + +/* Reset gzip file state */ +local void gz_reset(gz_statep state) { + state->x.have = 0; /* no output data available */ + if (state->mode == GZ_READ) { /* for reading ... */ + state->eof = 0; /* not at end of file */ + state->past = 0; /* have not read past end yet */ + state->how = LOOK; /* look for gzip header */ + } + else /* for writing ... */ + state->reset = 0; /* no deflateReset pending */ + state->seek = 0; /* no seek request pending */ + gz_error(state, Z_OK, NULL); /* clear error */ + state->x.pos = 0; /* no uncompressed data yet */ + state->strm.avail_in = 0; /* no input data yet */ +} + +/* Open a gzip file either by name or file descriptor. */ +local gzFile gz_open(const void *path, int fd, const char *mode) { + gz_statep state; + z_size_t len; + int oflag; +#ifdef O_CLOEXEC + int cloexec = 0; +#endif +#ifdef O_EXCL + int exclusive = 0; +#endif + + /* check input */ + if (path == NULL) + return NULL; + + /* allocate gzFile structure to return */ + state = (gz_statep)malloc(sizeof(gz_state)); + if (state == NULL) + return NULL; + state->size = 0; /* no buffers allocated yet */ + state->want = GZBUFSIZE; /* requested buffer size */ + state->msg = NULL; /* no error message yet */ + + /* interpret mode */ + state->mode = GZ_NONE; + state->level = Z_DEFAULT_COMPRESSION; + state->strategy = Z_DEFAULT_STRATEGY; + state->direct = 0; + while (*mode) { + if (*mode >= '0' && *mode <= '9') + state->level = *mode - '0'; + else + switch (*mode) { + case 'r': + state->mode = GZ_READ; + break; +#ifndef NO_GZCOMPRESS + case 'w': + state->mode = GZ_WRITE; + break; + case 'a': + state->mode = GZ_APPEND; + break; +#endif + case '+': /* can't read and write at the same time */ + free(state); + return NULL; + case 'b': /* ignore -- will request binary anyway */ + break; +#ifdef O_CLOEXEC + case 'e': + cloexec = 1; + break; +#endif +#ifdef O_EXCL + case 'x': + exclusive = 1; + break; +#endif + case 'f': + state->strategy = Z_FILTERED; + break; + case 'h': + state->strategy = Z_HUFFMAN_ONLY; + break; + case 'R': + state->strategy = Z_RLE; + break; + case 'F': + state->strategy = Z_FIXED; + break; + case 'T': + state->direct = 1; + break; + default: /* could consider as an error, but just ignore */ + ; + } + mode++; + } + + /* must provide an "r", "w", or "a" */ + if (state->mode == GZ_NONE) { + free(state); + return NULL; + } + + /* can't force transparent read */ + if (state->mode == GZ_READ) { + if (state->direct) { + free(state); + return NULL; + } + state->direct = 1; /* for empty file */ + } + + /* save the path name for error messages */ +#ifdef WIDECHAR + if (fd == -2) { + len = wcstombs(NULL, path, 0); + if (len == (z_size_t)-1) + len = 0; + } + else +#endif + len = strlen((const char *)path); + state->path = (char *)malloc(len + 1); + if (state->path == NULL) { + free(state); + return NULL; + } +#ifdef WIDECHAR + if (fd == -2) + if (len) + wcstombs(state->path, path, len + 1); + else + *(state->path) = 0; + else +#endif +#if !defined(NO_snprintf) && !defined(NO_vsnprintf) + (void)snprintf(state->path, len + 1, "%s", (const char *)path); +#else + strcpy(state->path, path); +#endif + + /* compute the flags for open() */ + oflag = +#ifdef O_LARGEFILE + O_LARGEFILE | +#endif +#ifdef O_BINARY + O_BINARY | +#endif +#ifdef O_CLOEXEC + (cloexec ? O_CLOEXEC : 0) | +#endif + (state->mode == GZ_READ ? + O_RDONLY : + (O_WRONLY | O_CREAT | +#ifdef O_EXCL + (exclusive ? O_EXCL : 0) | +#endif + (state->mode == GZ_WRITE ? + O_TRUNC : + O_APPEND))); + + /* open the file with the appropriate flags (or just use fd) */ + state->fd = fd > -1 ? fd : ( +#ifdef WIDECHAR + fd == -2 ? _wopen(path, oflag, 0666) : +#endif + open((const char *)path, oflag, 0666)); + if (state->fd == -1) { + free(state->path); + free(state); + return NULL; + } + if (state->mode == GZ_APPEND) { + LSEEK(state->fd, 0, SEEK_END); /* so gzoffset() is correct */ + state->mode = GZ_WRITE; /* simplify later checks */ + } + + /* save the current position for rewinding (only if reading) */ + if (state->mode == GZ_READ) { + state->start = LSEEK(state->fd, 0, SEEK_CUR); + if (state->start == -1) state->start = 0; + } + + /* initialize stream */ + gz_reset(state); + + /* return stream */ + return (gzFile)state; +} + +/* -- see zlib.h -- */ +gzFile ZEXPORT gzopen(const char *path, const char *mode) { + return gz_open(path, -1, mode); +} + +/* -- see zlib.h -- */ +gzFile ZEXPORT gzopen64(const char *path, const char *mode) { + return gz_open(path, -1, mode); +} + +/* -- see zlib.h -- */ +gzFile ZEXPORT gzdopen(int fd, const char *mode) { + char *path; /* identifier for error messages */ + gzFile gz; + + if (fd == -1 || (path = (char *)malloc(7 + 3 * sizeof(int))) == NULL) + return NULL; +#if !defined(NO_snprintf) && !defined(NO_vsnprintf) + (void)snprintf(path, 7 + 3 * sizeof(int), "", fd); +#else + sprintf(path, "", fd); /* for debugging */ +#endif + gz = gz_open(path, fd, mode); + free(path); + return gz; +} + +/* -- see zlib.h -- */ +#ifdef WIDECHAR +gzFile ZEXPORT gzopen_w(const wchar_t *path, const char *mode) { + return gz_open(path, -2, mode); +} +#endif + +/* -- see zlib.h -- */ +int ZEXPORT gzbuffer(gzFile file, unsigned size) { + gz_statep state; + + /* get internal structure and check integrity */ + if (file == NULL) + return -1; + state = (gz_statep)file; + if (state->mode != GZ_READ && state->mode != GZ_WRITE) + return -1; + + /* make sure we haven't already allocated memory */ + if (state->size != 0) + return -1; + + /* check and set requested size */ + if ((size << 1) < size) + return -1; /* need to be able to double it */ + if (size < 8) + size = 8; /* needed to behave well with flushing */ + state->want = size; + return 0; +} + +/* -- see zlib.h -- */ +int ZEXPORT gzrewind(gzFile file) { + gz_statep state; + + /* get internal structure */ + if (file == NULL) + return -1; + state = (gz_statep)file; + + /* check that we're reading and that there's no error */ + if (state->mode != GZ_READ || + (state->err != Z_OK && state->err != Z_BUF_ERROR)) + return -1; + + /* back up and start over */ + if (LSEEK(state->fd, state->start, SEEK_SET) == -1) + return -1; + gz_reset(state); + return 0; +} + +/* -- see zlib.h -- */ +z_off64_t ZEXPORT gzseek64(gzFile file, z_off64_t offset, int whence) { + unsigned n; + z_off64_t ret; + gz_statep state; + + /* get internal structure and check integrity */ + if (file == NULL) + return -1; + state = (gz_statep)file; + if (state->mode != GZ_READ && state->mode != GZ_WRITE) + return -1; + + /* check that there's no error */ + if (state->err != Z_OK && state->err != Z_BUF_ERROR) + return -1; + + /* can only seek from start or relative to current position */ + if (whence != SEEK_SET && whence != SEEK_CUR) + return -1; + + /* normalize offset to a SEEK_CUR specification */ + if (whence == SEEK_SET) + offset -= state->x.pos; + else if (state->seek) + offset += state->skip; + state->seek = 0; + + /* if within raw area while reading, just go there */ + if (state->mode == GZ_READ && state->how == COPY && + state->x.pos + offset >= 0) { + ret = LSEEK(state->fd, offset - (z_off64_t)state->x.have, SEEK_CUR); + if (ret == -1) + return -1; + state->x.have = 0; + state->eof = 0; + state->past = 0; + state->seek = 0; + gz_error(state, Z_OK, NULL); + state->strm.avail_in = 0; + state->x.pos += offset; + return state->x.pos; + } + + /* calculate skip amount, rewinding if needed for back seek when reading */ + if (offset < 0) { + if (state->mode != GZ_READ) /* writing -- can't go backwards */ + return -1; + offset += state->x.pos; + if (offset < 0) /* before start of file! */ + return -1; + if (gzrewind(file) == -1) /* rewind, then skip to offset */ + return -1; + } + + /* if reading, skip what's in output buffer (one less gzgetc() check) */ + if (state->mode == GZ_READ) { + n = GT_OFF(state->x.have) || (z_off64_t)state->x.have > offset ? + (unsigned)offset : state->x.have; + state->x.have -= n; + state->x.next += n; + state->x.pos += n; + offset -= n; + } + + /* request skip (if not zero) */ + if (offset) { + state->seek = 1; + state->skip = offset; + } + return state->x.pos + offset; +} + +/* -- see zlib.h -- */ +z_off_t ZEXPORT gzseek(gzFile file, z_off_t offset, int whence) { + z_off64_t ret; + + ret = gzseek64(file, (z_off64_t)offset, whence); + return ret == (z_off_t)ret ? (z_off_t)ret : -1; +} + +/* -- see zlib.h -- */ +z_off64_t ZEXPORT gztell64(gzFile file) { + gz_statep state; + + /* get internal structure and check integrity */ + if (file == NULL) + return -1; + state = (gz_statep)file; + if (state->mode != GZ_READ && state->mode != GZ_WRITE) + return -1; + + /* return position */ + return state->x.pos + (state->seek ? state->skip : 0); +} + +/* -- see zlib.h -- */ +z_off_t ZEXPORT gztell(gzFile file) { + z_off64_t ret; + + ret = gztell64(file); + return ret == (z_off_t)ret ? (z_off_t)ret : -1; +} + +/* -- see zlib.h -- */ +z_off64_t ZEXPORT gzoffset64(gzFile file) { + z_off64_t offset; + gz_statep state; + + /* get internal structure and check integrity */ + if (file == NULL) + return -1; + state = (gz_statep)file; + if (state->mode != GZ_READ && state->mode != GZ_WRITE) + return -1; + + /* compute and return effective offset in file */ + offset = LSEEK(state->fd, 0, SEEK_CUR); + if (offset == -1) + return -1; + if (state->mode == GZ_READ) /* reading */ + offset -= state->strm.avail_in; /* don't count buffered input */ + return offset; +} + +/* -- see zlib.h -- */ +z_off_t ZEXPORT gzoffset(gzFile file) { + z_off64_t ret; + + ret = gzoffset64(file); + return ret == (z_off_t)ret ? (z_off_t)ret : -1; +} + +/* -- see zlib.h -- */ +int ZEXPORT gzeof(gzFile file) { + gz_statep state; + + /* get internal structure and check integrity */ + if (file == NULL) + return 0; + state = (gz_statep)file; + if (state->mode != GZ_READ && state->mode != GZ_WRITE) + return 0; + + /* return end-of-file state */ + return state->mode == GZ_READ ? state->past : 0; +} + +/* -- see zlib.h -- */ +const char * ZEXPORT gzerror(gzFile file, int *errnum) { + gz_statep state; + + /* get internal structure and check integrity */ + if (file == NULL) + return NULL; + state = (gz_statep)file; + if (state->mode != GZ_READ && state->mode != GZ_WRITE) + return NULL; + + /* return error information */ + if (errnum != NULL) + *errnum = state->err; + return state->err == Z_MEM_ERROR ? "out of memory" : + (state->msg == NULL ? "" : state->msg); +} + +/* -- see zlib.h -- */ +void ZEXPORT gzclearerr(gzFile file) { + gz_statep state; + + /* get internal structure and check integrity */ + if (file == NULL) + return; + state = (gz_statep)file; + if (state->mode != GZ_READ && state->mode != GZ_WRITE) + return; + + /* clear error and end-of-file */ + if (state->mode == GZ_READ) { + state->eof = 0; + state->past = 0; + } + gz_error(state, Z_OK, NULL); +} + +/* Create an error message in allocated memory and set state->err and + state->msg accordingly. Free any previous error message already there. Do + not try to free or allocate space if the error is Z_MEM_ERROR (out of + memory). Simply save the error message as a static string. If there is an + allocation failure constructing the error message, then convert the error to + out of memory. */ +void ZLIB_INTERNAL gz_error(gz_statep state, int err, const char *msg) { + /* free previously allocated message and clear */ + if (state->msg != NULL) { + if (state->err != Z_MEM_ERROR) + free(state->msg); + state->msg = NULL; + } + + /* if fatal, set state->x.have to 0 so that the gzgetc() macro fails */ + if (err != Z_OK && err != Z_BUF_ERROR) + state->x.have = 0; + + /* set error code, and if no message, then done */ + state->err = err; + if (msg == NULL) + return; + + /* for an out of memory error, return literal string when requested */ + if (err == Z_MEM_ERROR) + return; + + /* construct error message with path */ + if ((state->msg = (char *)malloc(strlen(state->path) + strlen(msg) + 3)) == + NULL) { + state->err = Z_MEM_ERROR; + return; + } +#if !defined(NO_snprintf) && !defined(NO_vsnprintf) + (void)snprintf(state->msg, strlen(state->path) + strlen(msg) + 3, + "%s%s%s", state->path, ": ", msg); +#else + strcpy(state->msg, state->path); + strcat(state->msg, ": "); + strcat(state->msg, msg); +#endif +} + +/* portably return maximum value for an int (when limits.h presumed not + available) -- we need to do this to cover cases where 2's complement not + used, since C standard permits 1's complement and sign-bit representations, + otherwise we could just use ((unsigned)-1) >> 1 */ +unsigned ZLIB_INTERNAL gz_intmax(void) { +#ifdef INT_MAX + return INT_MAX; +#else + unsigned p = 1, q; + do { + q = p; + p <<= 1; + p++; + } while (p > q); + return q >> 1; +#endif +} diff --git a/thirdparty/zlib-1.3.1/gzread.c b/thirdparty/zlib-1.3.1/gzread.c new file mode 100644 index 0000000..4168cbc --- /dev/null +++ b/thirdparty/zlib-1.3.1/gzread.c @@ -0,0 +1,602 @@ +/* gzread.c -- zlib functions for reading gzip files + * Copyright (C) 2004-2017 Mark Adler + * For conditions of distribution and use, see copyright notice in zlib.h + */ + +#include "gzguts.h" + +/* Use read() to load a buffer -- return -1 on error, otherwise 0. Read from + state->fd, and update state->eof, state->err, and state->msg as appropriate. + This function needs to loop on read(), since read() is not guaranteed to + read the number of bytes requested, depending on the type of descriptor. */ +local int gz_load(gz_statep state, unsigned char *buf, unsigned len, + unsigned *have) { + int ret; + unsigned get, max = ((unsigned)-1 >> 2) + 1; + + *have = 0; + do { + get = len - *have; + if (get > max) + get = max; + ret = read(state->fd, buf + *have, get); + if (ret <= 0) + break; + *have += (unsigned)ret; + } while (*have < len); + if (ret < 0) { + gz_error(state, Z_ERRNO, zstrerror()); + return -1; + } + if (ret == 0) + state->eof = 1; + return 0; +} + +/* Load up input buffer and set eof flag if last data loaded -- return -1 on + error, 0 otherwise. Note that the eof flag is set when the end of the input + file is reached, even though there may be unused data in the buffer. Once + that data has been used, no more attempts will be made to read the file. + If strm->avail_in != 0, then the current data is moved to the beginning of + the input buffer, and then the remainder of the buffer is loaded with the + available data from the input file. */ +local int gz_avail(gz_statep state) { + unsigned got; + z_streamp strm = &(state->strm); + + if (state->err != Z_OK && state->err != Z_BUF_ERROR) + return -1; + if (state->eof == 0) { + if (strm->avail_in) { /* copy what's there to the start */ + unsigned char *p = state->in; + unsigned const char *q = strm->next_in; + unsigned n = strm->avail_in; + do { + *p++ = *q++; + } while (--n); + } + if (gz_load(state, state->in + strm->avail_in, + state->size - strm->avail_in, &got) == -1) + return -1; + strm->avail_in += got; + strm->next_in = state->in; + } + return 0; +} + +/* Look for gzip header, set up for inflate or copy. state->x.have must be 0. + If this is the first time in, allocate required memory. state->how will be + left unchanged if there is no more input data available, will be set to COPY + if there is no gzip header and direct copying will be performed, or it will + be set to GZIP for decompression. If direct copying, then leftover input + data from the input buffer will be copied to the output buffer. In that + case, all further file reads will be directly to either the output buffer or + a user buffer. If decompressing, the inflate state will be initialized. + gz_look() will return 0 on success or -1 on failure. */ +local int gz_look(gz_statep state) { + z_streamp strm = &(state->strm); + + /* allocate read buffers and inflate memory */ + if (state->size == 0) { + /* allocate buffers */ + state->in = (unsigned char *)malloc(state->want); + state->out = (unsigned char *)malloc(state->want << 1); + if (state->in == NULL || state->out == NULL) { + free(state->out); + free(state->in); + gz_error(state, Z_MEM_ERROR, "out of memory"); + return -1; + } + state->size = state->want; + + /* allocate inflate memory */ + state->strm.zalloc = Z_NULL; + state->strm.zfree = Z_NULL; + state->strm.opaque = Z_NULL; + state->strm.avail_in = 0; + state->strm.next_in = Z_NULL; + if (inflateInit2(&(state->strm), 15 + 16) != Z_OK) { /* gunzip */ + free(state->out); + free(state->in); + state->size = 0; + gz_error(state, Z_MEM_ERROR, "out of memory"); + return -1; + } + } + + /* get at least the magic bytes in the input buffer */ + if (strm->avail_in < 2) { + if (gz_avail(state) == -1) + return -1; + if (strm->avail_in == 0) + return 0; + } + + /* look for gzip magic bytes -- if there, do gzip decoding (note: there is + a logical dilemma here when considering the case of a partially written + gzip file, to wit, if a single 31 byte is written, then we cannot tell + whether this is a single-byte file, or just a partially written gzip + file -- for here we assume that if a gzip file is being written, then + the header will be written in a single operation, so that reading a + single byte is sufficient indication that it is not a gzip file) */ + if (strm->avail_in > 1 && + strm->next_in[0] == 31 && strm->next_in[1] == 139) { + inflateReset(strm); + state->how = GZIP; + state->direct = 0; + return 0; + } + + /* no gzip header -- if we were decoding gzip before, then this is trailing + garbage. Ignore the trailing garbage and finish. */ + if (state->direct == 0) { + strm->avail_in = 0; + state->eof = 1; + state->x.have = 0; + return 0; + } + + /* doing raw i/o, copy any leftover input to output -- this assumes that + the output buffer is larger than the input buffer, which also assures + space for gzungetc() */ + state->x.next = state->out; + memcpy(state->x.next, strm->next_in, strm->avail_in); + state->x.have = strm->avail_in; + strm->avail_in = 0; + state->how = COPY; + state->direct = 1; + return 0; +} + +/* Decompress from input to the provided next_out and avail_out in the state. + On return, state->x.have and state->x.next point to the just decompressed + data. If the gzip stream completes, state->how is reset to LOOK to look for + the next gzip stream or raw data, once state->x.have is depleted. Returns 0 + on success, -1 on failure. */ +local int gz_decomp(gz_statep state) { + int ret = Z_OK; + unsigned had; + z_streamp strm = &(state->strm); + + /* fill output buffer up to end of deflate stream */ + had = strm->avail_out; + do { + /* get more input for inflate() */ + if (strm->avail_in == 0 && gz_avail(state) == -1) + return -1; + if (strm->avail_in == 0) { + gz_error(state, Z_BUF_ERROR, "unexpected end of file"); + break; + } + + /* decompress and handle errors */ + ret = inflate(strm, Z_NO_FLUSH); + if (ret == Z_STREAM_ERROR || ret == Z_NEED_DICT) { + gz_error(state, Z_STREAM_ERROR, + "internal error: inflate stream corrupt"); + return -1; + } + if (ret == Z_MEM_ERROR) { + gz_error(state, Z_MEM_ERROR, "out of memory"); + return -1; + } + if (ret == Z_DATA_ERROR) { /* deflate stream invalid */ + gz_error(state, Z_DATA_ERROR, + strm->msg == NULL ? "compressed data error" : strm->msg); + return -1; + } + } while (strm->avail_out && ret != Z_STREAM_END); + + /* update available output */ + state->x.have = had - strm->avail_out; + state->x.next = strm->next_out - state->x.have; + + /* if the gzip stream completed successfully, look for another */ + if (ret == Z_STREAM_END) + state->how = LOOK; + + /* good decompression */ + return 0; +} + +/* Fetch data and put it in the output buffer. Assumes state->x.have is 0. + Data is either copied from the input file or decompressed from the input + file depending on state->how. If state->how is LOOK, then a gzip header is + looked for to determine whether to copy or decompress. Returns -1 on error, + otherwise 0. gz_fetch() will leave state->how as COPY or GZIP unless the + end of the input file has been reached and all data has been processed. */ +local int gz_fetch(gz_statep state) { + z_streamp strm = &(state->strm); + + do { + switch(state->how) { + case LOOK: /* -> LOOK, COPY (only if never GZIP), or GZIP */ + if (gz_look(state) == -1) + return -1; + if (state->how == LOOK) + return 0; + break; + case COPY: /* -> COPY */ + if (gz_load(state, state->out, state->size << 1, &(state->x.have)) + == -1) + return -1; + state->x.next = state->out; + return 0; + case GZIP: /* -> GZIP or LOOK (if end of gzip stream) */ + strm->avail_out = state->size << 1; + strm->next_out = state->out; + if (gz_decomp(state) == -1) + return -1; + } + } while (state->x.have == 0 && (!state->eof || strm->avail_in)); + return 0; +} + +/* Skip len uncompressed bytes of output. Return -1 on error, 0 on success. */ +local int gz_skip(gz_statep state, z_off64_t len) { + unsigned n; + + /* skip over len bytes or reach end-of-file, whichever comes first */ + while (len) + /* skip over whatever is in output buffer */ + if (state->x.have) { + n = GT_OFF(state->x.have) || (z_off64_t)state->x.have > len ? + (unsigned)len : state->x.have; + state->x.have -= n; + state->x.next += n; + state->x.pos += n; + len -= n; + } + + /* output buffer empty -- return if we're at the end of the input */ + else if (state->eof && state->strm.avail_in == 0) + break; + + /* need more data to skip -- load up output buffer */ + else { + /* get more output, looking for header if required */ + if (gz_fetch(state) == -1) + return -1; + } + return 0; +} + +/* Read len bytes into buf from file, or less than len up to the end of the + input. Return the number of bytes read. If zero is returned, either the + end of file was reached, or there was an error. state->err must be + consulted in that case to determine which. */ +local z_size_t gz_read(gz_statep state, voidp buf, z_size_t len) { + z_size_t got; + unsigned n; + + /* if len is zero, avoid unnecessary operations */ + if (len == 0) + return 0; + + /* process a skip request */ + if (state->seek) { + state->seek = 0; + if (gz_skip(state, state->skip) == -1) + return 0; + } + + /* get len bytes to buf, or less than len if at the end */ + got = 0; + do { + /* set n to the maximum amount of len that fits in an unsigned int */ + n = (unsigned)-1; + if (n > len) + n = (unsigned)len; + + /* first just try copying data from the output buffer */ + if (state->x.have) { + if (state->x.have < n) + n = state->x.have; + memcpy(buf, state->x.next, n); + state->x.next += n; + state->x.have -= n; + } + + /* output buffer empty -- return if we're at the end of the input */ + else if (state->eof && state->strm.avail_in == 0) { + state->past = 1; /* tried to read past end */ + break; + } + + /* need output data -- for small len or new stream load up our output + buffer */ + else if (state->how == LOOK || n < (state->size << 1)) { + /* get more output, looking for header if required */ + if (gz_fetch(state) == -1) + return 0; + continue; /* no progress yet -- go back to copy above */ + /* the copy above assures that we will leave with space in the + output buffer, allowing at least one gzungetc() to succeed */ + } + + /* large len -- read directly into user buffer */ + else if (state->how == COPY) { /* read directly */ + if (gz_load(state, (unsigned char *)buf, n, &n) == -1) + return 0; + } + + /* large len -- decompress directly into user buffer */ + else { /* state->how == GZIP */ + state->strm.avail_out = n; + state->strm.next_out = (unsigned char *)buf; + if (gz_decomp(state) == -1) + return 0; + n = state->x.have; + state->x.have = 0; + } + + /* update progress */ + len -= n; + buf = (char *)buf + n; + got += n; + state->x.pos += n; + } while (len); + + /* return number of bytes read into user buffer */ + return got; +} + +/* -- see zlib.h -- */ +int ZEXPORT gzread(gzFile file, voidp buf, unsigned len) { + gz_statep state; + + /* get internal structure */ + if (file == NULL) + return -1; + state = (gz_statep)file; + + /* check that we're reading and that there's no (serious) error */ + if (state->mode != GZ_READ || + (state->err != Z_OK && state->err != Z_BUF_ERROR)) + return -1; + + /* since an int is returned, make sure len fits in one, otherwise return + with an error (this avoids a flaw in the interface) */ + if ((int)len < 0) { + gz_error(state, Z_STREAM_ERROR, "request does not fit in an int"); + return -1; + } + + /* read len or fewer bytes to buf */ + len = (unsigned)gz_read(state, buf, len); + + /* check for an error */ + if (len == 0 && state->err != Z_OK && state->err != Z_BUF_ERROR) + return -1; + + /* return the number of bytes read (this is assured to fit in an int) */ + return (int)len; +} + +/* -- see zlib.h -- */ +z_size_t ZEXPORT gzfread(voidp buf, z_size_t size, z_size_t nitems, gzFile file) { + z_size_t len; + gz_statep state; + + /* get internal structure */ + if (file == NULL) + return 0; + state = (gz_statep)file; + + /* check that we're reading and that there's no (serious) error */ + if (state->mode != GZ_READ || + (state->err != Z_OK && state->err != Z_BUF_ERROR)) + return 0; + + /* compute bytes to read -- error on overflow */ + len = nitems * size; + if (size && len / size != nitems) { + gz_error(state, Z_STREAM_ERROR, "request does not fit in a size_t"); + return 0; + } + + /* read len or fewer bytes to buf, return the number of full items read */ + return len ? gz_read(state, buf, len) / size : 0; +} + +/* -- see zlib.h -- */ +#ifdef Z_PREFIX_SET +# undef z_gzgetc +#else +# undef gzgetc +#endif +int ZEXPORT gzgetc(gzFile file) { + unsigned char buf[1]; + gz_statep state; + + /* get internal structure */ + if (file == NULL) + return -1; + state = (gz_statep)file; + + /* check that we're reading and that there's no (serious) error */ + if (state->mode != GZ_READ || + (state->err != Z_OK && state->err != Z_BUF_ERROR)) + return -1; + + /* try output buffer (no need to check for skip request) */ + if (state->x.have) { + state->x.have--; + state->x.pos++; + return *(state->x.next)++; + } + + /* nothing there -- try gz_read() */ + return gz_read(state, buf, 1) < 1 ? -1 : buf[0]; +} + +int ZEXPORT gzgetc_(gzFile file) { + return gzgetc(file); +} + +/* -- see zlib.h -- */ +int ZEXPORT gzungetc(int c, gzFile file) { + gz_statep state; + + /* get internal structure */ + if (file == NULL) + return -1; + state = (gz_statep)file; + + /* in case this was just opened, set up the input buffer */ + if (state->mode == GZ_READ && state->how == LOOK && state->x.have == 0) + (void)gz_look(state); + + /* check that we're reading and that there's no (serious) error */ + if (state->mode != GZ_READ || + (state->err != Z_OK && state->err != Z_BUF_ERROR)) + return -1; + + /* process a skip request */ + if (state->seek) { + state->seek = 0; + if (gz_skip(state, state->skip) == -1) + return -1; + } + + /* can't push EOF */ + if (c < 0) + return -1; + + /* if output buffer empty, put byte at end (allows more pushing) */ + if (state->x.have == 0) { + state->x.have = 1; + state->x.next = state->out + (state->size << 1) - 1; + state->x.next[0] = (unsigned char)c; + state->x.pos--; + state->past = 0; + return c; + } + + /* if no room, give up (must have already done a gzungetc()) */ + if (state->x.have == (state->size << 1)) { + gz_error(state, Z_DATA_ERROR, "out of room to push characters"); + return -1; + } + + /* slide output data if needed and insert byte before existing data */ + if (state->x.next == state->out) { + unsigned char *src = state->out + state->x.have; + unsigned char *dest = state->out + (state->size << 1); + while (src > state->out) + *--dest = *--src; + state->x.next = dest; + } + state->x.have++; + state->x.next--; + state->x.next[0] = (unsigned char)c; + state->x.pos--; + state->past = 0; + return c; +} + +/* -- see zlib.h -- */ +char * ZEXPORT gzgets(gzFile file, char *buf, int len) { + unsigned left, n; + char *str; + unsigned char *eol; + gz_statep state; + + /* check parameters and get internal structure */ + if (file == NULL || buf == NULL || len < 1) + return NULL; + state = (gz_statep)file; + + /* check that we're reading and that there's no (serious) error */ + if (state->mode != GZ_READ || + (state->err != Z_OK && state->err != Z_BUF_ERROR)) + return NULL; + + /* process a skip request */ + if (state->seek) { + state->seek = 0; + if (gz_skip(state, state->skip) == -1) + return NULL; + } + + /* copy output bytes up to new line or len - 1, whichever comes first -- + append a terminating zero to the string (we don't check for a zero in + the contents, let the user worry about that) */ + str = buf; + left = (unsigned)len - 1; + if (left) do { + /* assure that something is in the output buffer */ + if (state->x.have == 0 && gz_fetch(state) == -1) + return NULL; /* error */ + if (state->x.have == 0) { /* end of file */ + state->past = 1; /* read past end */ + break; /* return what we have */ + } + + /* look for end-of-line in current output buffer */ + n = state->x.have > left ? left : state->x.have; + eol = (unsigned char *)memchr(state->x.next, '\n', n); + if (eol != NULL) + n = (unsigned)(eol - state->x.next) + 1; + + /* copy through end-of-line, or remainder if not found */ + memcpy(buf, state->x.next, n); + state->x.have -= n; + state->x.next += n; + state->x.pos += n; + left -= n; + buf += n; + } while (left && eol == NULL); + + /* return terminated string, or if nothing, end of file */ + if (buf == str) + return NULL; + buf[0] = 0; + return str; +} + +/* -- see zlib.h -- */ +int ZEXPORT gzdirect(gzFile file) { + gz_statep state; + + /* get internal structure */ + if (file == NULL) + return 0; + state = (gz_statep)file; + + /* if the state is not known, but we can find out, then do so (this is + mainly for right after a gzopen() or gzdopen()) */ + if (state->mode == GZ_READ && state->how == LOOK && state->x.have == 0) + (void)gz_look(state); + + /* return 1 if transparent, 0 if processing a gzip stream */ + return state->direct; +} + +/* -- see zlib.h -- */ +int ZEXPORT gzclose_r(gzFile file) { + int ret, err; + gz_statep state; + + /* get internal structure */ + if (file == NULL) + return Z_STREAM_ERROR; + state = (gz_statep)file; + + /* check that we're reading */ + if (state->mode != GZ_READ) + return Z_STREAM_ERROR; + + /* free memory and close file */ + if (state->size) { + inflateEnd(&(state->strm)); + free(state->out); + free(state->in); + } + err = state->err == Z_BUF_ERROR ? Z_BUF_ERROR : Z_OK; + gz_error(state, Z_OK, NULL); + free(state->path); + ret = close(state->fd); + free(state); + return ret ? Z_ERRNO : err; +} diff --git a/thirdparty/zlib-1.3.1/gzwrite.c b/thirdparty/zlib-1.3.1/gzwrite.c new file mode 100644 index 0000000..435b462 --- /dev/null +++ b/thirdparty/zlib-1.3.1/gzwrite.c @@ -0,0 +1,631 @@ +/* gzwrite.c -- zlib functions for writing gzip files + * Copyright (C) 2004-2019 Mark Adler + * For conditions of distribution and use, see copyright notice in zlib.h + */ + +#include "gzguts.h" + +/* Initialize state for writing a gzip file. Mark initialization by setting + state->size to non-zero. Return -1 on a memory allocation failure, or 0 on + success. */ +local int gz_init(gz_statep state) { + int ret; + z_streamp strm = &(state->strm); + + /* allocate input buffer (double size for gzprintf) */ + state->in = (unsigned char *)malloc(state->want << 1); + if (state->in == NULL) { + gz_error(state, Z_MEM_ERROR, "out of memory"); + return -1; + } + + /* only need output buffer and deflate state if compressing */ + if (!state->direct) { + /* allocate output buffer */ + state->out = (unsigned char *)malloc(state->want); + if (state->out == NULL) { + free(state->in); + gz_error(state, Z_MEM_ERROR, "out of memory"); + return -1; + } + + /* allocate deflate memory, set up for gzip compression */ + strm->zalloc = Z_NULL; + strm->zfree = Z_NULL; + strm->opaque = Z_NULL; + ret = deflateInit2(strm, state->level, Z_DEFLATED, + MAX_WBITS + 16, DEF_MEM_LEVEL, state->strategy); + if (ret != Z_OK) { + free(state->out); + free(state->in); + gz_error(state, Z_MEM_ERROR, "out of memory"); + return -1; + } + strm->next_in = NULL; + } + + /* mark state as initialized */ + state->size = state->want; + + /* initialize write buffer if compressing */ + if (!state->direct) { + strm->avail_out = state->size; + strm->next_out = state->out; + state->x.next = strm->next_out; + } + return 0; +} + +/* Compress whatever is at avail_in and next_in and write to the output file. + Return -1 if there is an error writing to the output file or if gz_init() + fails to allocate memory, otherwise 0. flush is assumed to be a valid + deflate() flush value. If flush is Z_FINISH, then the deflate() state is + reset to start a new gzip stream. If gz->direct is true, then simply write + to the output file without compressing, and ignore flush. */ +local int gz_comp(gz_statep state, int flush) { + int ret, writ; + unsigned have, put, max = ((unsigned)-1 >> 2) + 1; + z_streamp strm = &(state->strm); + + /* allocate memory if this is the first time through */ + if (state->size == 0 && gz_init(state) == -1) + return -1; + + /* write directly if requested */ + if (state->direct) { + while (strm->avail_in) { + put = strm->avail_in > max ? max : strm->avail_in; + writ = write(state->fd, strm->next_in, put); + if (writ < 0) { + gz_error(state, Z_ERRNO, zstrerror()); + return -1; + } + strm->avail_in -= (unsigned)writ; + strm->next_in += writ; + } + return 0; + } + + /* check for a pending reset */ + if (state->reset) { + /* don't start a new gzip member unless there is data to write */ + if (strm->avail_in == 0) + return 0; + deflateReset(strm); + state->reset = 0; + } + + /* run deflate() on provided input until it produces no more output */ + ret = Z_OK; + do { + /* write out current buffer contents if full, or if flushing, but if + doing Z_FINISH then don't write until we get to Z_STREAM_END */ + if (strm->avail_out == 0 || (flush != Z_NO_FLUSH && + (flush != Z_FINISH || ret == Z_STREAM_END))) { + while (strm->next_out > state->x.next) { + put = strm->next_out - state->x.next > (int)max ? max : + (unsigned)(strm->next_out - state->x.next); + writ = write(state->fd, state->x.next, put); + if (writ < 0) { + gz_error(state, Z_ERRNO, zstrerror()); + return -1; + } + state->x.next += writ; + } + if (strm->avail_out == 0) { + strm->avail_out = state->size; + strm->next_out = state->out; + state->x.next = state->out; + } + } + + /* compress */ + have = strm->avail_out; + ret = deflate(strm, flush); + if (ret == Z_STREAM_ERROR) { + gz_error(state, Z_STREAM_ERROR, + "internal error: deflate stream corrupt"); + return -1; + } + have -= strm->avail_out; + } while (have); + + /* if that completed a deflate stream, allow another to start */ + if (flush == Z_FINISH) + state->reset = 1; + + /* all done, no errors */ + return 0; +} + +/* Compress len zeros to output. Return -1 on a write error or memory + allocation failure by gz_comp(), or 0 on success. */ +local int gz_zero(gz_statep state, z_off64_t len) { + int first; + unsigned n; + z_streamp strm = &(state->strm); + + /* consume whatever's left in the input buffer */ + if (strm->avail_in && gz_comp(state, Z_NO_FLUSH) == -1) + return -1; + + /* compress len zeros (len guaranteed > 0) */ + first = 1; + while (len) { + n = GT_OFF(state->size) || (z_off64_t)state->size > len ? + (unsigned)len : state->size; + if (first) { + memset(state->in, 0, n); + first = 0; + } + strm->avail_in = n; + strm->next_in = state->in; + state->x.pos += n; + if (gz_comp(state, Z_NO_FLUSH) == -1) + return -1; + len -= n; + } + return 0; +} + +/* Write len bytes from buf to file. Return the number of bytes written. If + the returned value is less than len, then there was an error. */ +local z_size_t gz_write(gz_statep state, voidpc buf, z_size_t len) { + z_size_t put = len; + + /* if len is zero, avoid unnecessary operations */ + if (len == 0) + return 0; + + /* allocate memory if this is the first time through */ + if (state->size == 0 && gz_init(state) == -1) + return 0; + + /* check for seek request */ + if (state->seek) { + state->seek = 0; + if (gz_zero(state, state->skip) == -1) + return 0; + } + + /* for small len, copy to input buffer, otherwise compress directly */ + if (len < state->size) { + /* copy to input buffer, compress when full */ + do { + unsigned have, copy; + + if (state->strm.avail_in == 0) + state->strm.next_in = state->in; + have = (unsigned)((state->strm.next_in + state->strm.avail_in) - + state->in); + copy = state->size - have; + if (copy > len) + copy = (unsigned)len; + memcpy(state->in + have, buf, copy); + state->strm.avail_in += copy; + state->x.pos += copy; + buf = (const char *)buf + copy; + len -= copy; + if (len && gz_comp(state, Z_NO_FLUSH) == -1) + return 0; + } while (len); + } + else { + /* consume whatever's left in the input buffer */ + if (state->strm.avail_in && gz_comp(state, Z_NO_FLUSH) == -1) + return 0; + + /* directly compress user buffer to file */ + state->strm.next_in = (z_const Bytef *)buf; + do { + unsigned n = (unsigned)-1; + if (n > len) + n = (unsigned)len; + state->strm.avail_in = n; + state->x.pos += n; + if (gz_comp(state, Z_NO_FLUSH) == -1) + return 0; + len -= n; + } while (len); + } + + /* input was all buffered or compressed */ + return put; +} + +/* -- see zlib.h -- */ +int ZEXPORT gzwrite(gzFile file, voidpc buf, unsigned len) { + gz_statep state; + + /* get internal structure */ + if (file == NULL) + return 0; + state = (gz_statep)file; + + /* check that we're writing and that there's no error */ + if (state->mode != GZ_WRITE || state->err != Z_OK) + return 0; + + /* since an int is returned, make sure len fits in one, otherwise return + with an error (this avoids a flaw in the interface) */ + if ((int)len < 0) { + gz_error(state, Z_DATA_ERROR, "requested length does not fit in int"); + return 0; + } + + /* write len bytes from buf (the return value will fit in an int) */ + return (int)gz_write(state, buf, len); +} + +/* -- see zlib.h -- */ +z_size_t ZEXPORT gzfwrite(voidpc buf, z_size_t size, z_size_t nitems, + gzFile file) { + z_size_t len; + gz_statep state; + + /* get internal structure */ + if (file == NULL) + return 0; + state = (gz_statep)file; + + /* check that we're writing and that there's no error */ + if (state->mode != GZ_WRITE || state->err != Z_OK) + return 0; + + /* compute bytes to read -- error on overflow */ + len = nitems * size; + if (size && len / size != nitems) { + gz_error(state, Z_STREAM_ERROR, "request does not fit in a size_t"); + return 0; + } + + /* write len bytes to buf, return the number of full items written */ + return len ? gz_write(state, buf, len) / size : 0; +} + +/* -- see zlib.h -- */ +int ZEXPORT gzputc(gzFile file, int c) { + unsigned have; + unsigned char buf[1]; + gz_statep state; + z_streamp strm; + + /* get internal structure */ + if (file == NULL) + return -1; + state = (gz_statep)file; + strm = &(state->strm); + + /* check that we're writing and that there's no error */ + if (state->mode != GZ_WRITE || state->err != Z_OK) + return -1; + + /* check for seek request */ + if (state->seek) { + state->seek = 0; + if (gz_zero(state, state->skip) == -1) + return -1; + } + + /* try writing to input buffer for speed (state->size == 0 if buffer not + initialized) */ + if (state->size) { + if (strm->avail_in == 0) + strm->next_in = state->in; + have = (unsigned)((strm->next_in + strm->avail_in) - state->in); + if (have < state->size) { + state->in[have] = (unsigned char)c; + strm->avail_in++; + state->x.pos++; + return c & 0xff; + } + } + + /* no room in buffer or not initialized, use gz_write() */ + buf[0] = (unsigned char)c; + if (gz_write(state, buf, 1) != 1) + return -1; + return c & 0xff; +} + +/* -- see zlib.h -- */ +int ZEXPORT gzputs(gzFile file, const char *s) { + z_size_t len, put; + gz_statep state; + + /* get internal structure */ + if (file == NULL) + return -1; + state = (gz_statep)file; + + /* check that we're writing and that there's no error */ + if (state->mode != GZ_WRITE || state->err != Z_OK) + return -1; + + /* write string */ + len = strlen(s); + if ((int)len < 0 || (unsigned)len != len) { + gz_error(state, Z_STREAM_ERROR, "string length does not fit in int"); + return -1; + } + put = gz_write(state, s, len); + return put < len ? -1 : (int)len; +} + +#if defined(STDC) || defined(Z_HAVE_STDARG_H) +#include + +/* -- see zlib.h -- */ +int ZEXPORTVA gzvprintf(gzFile file, const char *format, va_list va) { + int len; + unsigned left; + char *next; + gz_statep state; + z_streamp strm; + + /* get internal structure */ + if (file == NULL) + return Z_STREAM_ERROR; + state = (gz_statep)file; + strm = &(state->strm); + + /* check that we're writing and that there's no error */ + if (state->mode != GZ_WRITE || state->err != Z_OK) + return Z_STREAM_ERROR; + + /* make sure we have some buffer space */ + if (state->size == 0 && gz_init(state) == -1) + return state->err; + + /* check for seek request */ + if (state->seek) { + state->seek = 0; + if (gz_zero(state, state->skip) == -1) + return state->err; + } + + /* do the printf() into the input buffer, put length in len -- the input + buffer is double-sized just for this function, so there is guaranteed to + be state->size bytes available after the current contents */ + if (strm->avail_in == 0) + strm->next_in = state->in; + next = (char *)(state->in + (strm->next_in - state->in) + strm->avail_in); + next[state->size - 1] = 0; +#ifdef NO_vsnprintf +# ifdef HAS_vsprintf_void + (void)vsprintf(next, format, va); + for (len = 0; len < state->size; len++) + if (next[len] == 0) break; +# else + len = vsprintf(next, format, va); +# endif +#else +# ifdef HAS_vsnprintf_void + (void)vsnprintf(next, state->size, format, va); + len = strlen(next); +# else + len = vsnprintf(next, state->size, format, va); +# endif +#endif + + /* check that printf() results fit in buffer */ + if (len == 0 || (unsigned)len >= state->size || next[state->size - 1] != 0) + return 0; + + /* update buffer and position, compress first half if past that */ + strm->avail_in += (unsigned)len; + state->x.pos += len; + if (strm->avail_in >= state->size) { + left = strm->avail_in - state->size; + strm->avail_in = state->size; + if (gz_comp(state, Z_NO_FLUSH) == -1) + return state->err; + memmove(state->in, state->in + state->size, left); + strm->next_in = state->in; + strm->avail_in = left; + } + return len; +} + +int ZEXPORTVA gzprintf(gzFile file, const char *format, ...) { + va_list va; + int ret; + + va_start(va, format); + ret = gzvprintf(file, format, va); + va_end(va); + return ret; +} + +#else /* !STDC && !Z_HAVE_STDARG_H */ + +/* -- see zlib.h -- */ +int ZEXPORTVA gzprintf(gzFile file, const char *format, int a1, int a2, int a3, + int a4, int a5, int a6, int a7, int a8, int a9, int a10, + int a11, int a12, int a13, int a14, int a15, int a16, + int a17, int a18, int a19, int a20) { + unsigned len, left; + char *next; + gz_statep state; + z_streamp strm; + + /* get internal structure */ + if (file == NULL) + return Z_STREAM_ERROR; + state = (gz_statep)file; + strm = &(state->strm); + + /* check that can really pass pointer in ints */ + if (sizeof(int) != sizeof(void *)) + return Z_STREAM_ERROR; + + /* check that we're writing and that there's no error */ + if (state->mode != GZ_WRITE || state->err != Z_OK) + return Z_STREAM_ERROR; + + /* make sure we have some buffer space */ + if (state->size == 0 && gz_init(state) == -1) + return state->error; + + /* check for seek request */ + if (state->seek) { + state->seek = 0; + if (gz_zero(state, state->skip) == -1) + return state->error; + } + + /* do the printf() into the input buffer, put length in len -- the input + buffer is double-sized just for this function, so there is guaranteed to + be state->size bytes available after the current contents */ + if (strm->avail_in == 0) + strm->next_in = state->in; + next = (char *)(strm->next_in + strm->avail_in); + next[state->size - 1] = 0; +#ifdef NO_snprintf +# ifdef HAS_sprintf_void + sprintf(next, format, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, + a13, a14, a15, a16, a17, a18, a19, a20); + for (len = 0; len < size; len++) + if (next[len] == 0) + break; +# else + len = sprintf(next, format, a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, + a12, a13, a14, a15, a16, a17, a18, a19, a20); +# endif +#else +# ifdef HAS_snprintf_void + snprintf(next, state->size, format, a1, a2, a3, a4, a5, a6, a7, a8, a9, + a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20); + len = strlen(next); +# else + len = snprintf(next, state->size, format, a1, a2, a3, a4, a5, a6, a7, a8, + a9, a10, a11, a12, a13, a14, a15, a16, a17, a18, a19, a20); +# endif +#endif + + /* check that printf() results fit in buffer */ + if (len == 0 || len >= state->size || next[state->size - 1] != 0) + return 0; + + /* update buffer and position, compress first half if past that */ + strm->avail_in += len; + state->x.pos += len; + if (strm->avail_in >= state->size) { + left = strm->avail_in - state->size; + strm->avail_in = state->size; + if (gz_comp(state, Z_NO_FLUSH) == -1) + return state->err; + memmove(state->in, state->in + state->size, left); + strm->next_in = state->in; + strm->avail_in = left; + } + return (int)len; +} + +#endif + +/* -- see zlib.h -- */ +int ZEXPORT gzflush(gzFile file, int flush) { + gz_statep state; + + /* get internal structure */ + if (file == NULL) + return Z_STREAM_ERROR; + state = (gz_statep)file; + + /* check that we're writing and that there's no error */ + if (state->mode != GZ_WRITE || state->err != Z_OK) + return Z_STREAM_ERROR; + + /* check flush parameter */ + if (flush < 0 || flush > Z_FINISH) + return Z_STREAM_ERROR; + + /* check for seek request */ + if (state->seek) { + state->seek = 0; + if (gz_zero(state, state->skip) == -1) + return state->err; + } + + /* compress remaining data with requested flush */ + (void)gz_comp(state, flush); + return state->err; +} + +/* -- see zlib.h -- */ +int ZEXPORT gzsetparams(gzFile file, int level, int strategy) { + gz_statep state; + z_streamp strm; + + /* get internal structure */ + if (file == NULL) + return Z_STREAM_ERROR; + state = (gz_statep)file; + strm = &(state->strm); + + /* check that we're writing and that there's no error */ + if (state->mode != GZ_WRITE || state->err != Z_OK || state->direct) + return Z_STREAM_ERROR; + + /* if no change is requested, then do nothing */ + if (level == state->level && strategy == state->strategy) + return Z_OK; + + /* check for seek request */ + if (state->seek) { + state->seek = 0; + if (gz_zero(state, state->skip) == -1) + return state->err; + } + + /* change compression parameters for subsequent input */ + if (state->size) { + /* flush previous input with previous parameters before changing */ + if (strm->avail_in && gz_comp(state, Z_BLOCK) == -1) + return state->err; + deflateParams(strm, level, strategy); + } + state->level = level; + state->strategy = strategy; + return Z_OK; +} + +/* -- see zlib.h -- */ +int ZEXPORT gzclose_w(gzFile file) { + int ret = Z_OK; + gz_statep state; + + /* get internal structure */ + if (file == NULL) + return Z_STREAM_ERROR; + state = (gz_statep)file; + + /* check that we're writing */ + if (state->mode != GZ_WRITE) + return Z_STREAM_ERROR; + + /* check for seek request */ + if (state->seek) { + state->seek = 0; + if (gz_zero(state, state->skip) == -1) + ret = state->err; + } + + /* flush, free memory, and close file */ + if (gz_comp(state, Z_FINISH) == -1) + ret = state->err; + if (state->size) { + if (!state->direct) { + (void)deflateEnd(&(state->strm)); + free(state->out); + } + free(state->in); + } + gz_error(state, Z_OK, NULL); + free(state->path); + if (close(state->fd) == -1) + ret = Z_ERRNO; + free(state); + return ret; +} diff --git a/thirdparty/zlib-1.3.1/infback.c b/thirdparty/zlib-1.3.1/infback.c new file mode 100644 index 0000000..e7b25b3 --- /dev/null +++ b/thirdparty/zlib-1.3.1/infback.c @@ -0,0 +1,628 @@ +/* infback.c -- inflate using a call-back interface + * Copyright (C) 1995-2022 Mark Adler + * For conditions of distribution and use, see copyright notice in zlib.h + */ + +/* + This code is largely copied from inflate.c. Normally either infback.o or + inflate.o would be linked into an application--not both. The interface + with inffast.c is retained so that optimized assembler-coded versions of + inflate_fast() can be used with either inflate.c or infback.c. + */ + +#include "zutil.h" +#include "inftrees.h" +#include "inflate.h" +#include "inffast.h" + +/* + strm provides memory allocation functions in zalloc and zfree, or + Z_NULL to use the library memory allocation functions. + + windowBits is in the range 8..15, and window is a user-supplied + window and output buffer that is 2**windowBits bytes. + */ +int ZEXPORT inflateBackInit_(z_streamp strm, int windowBits, + unsigned char FAR *window, const char *version, + int stream_size) { + struct inflate_state FAR *state; + + if (version == Z_NULL || version[0] != ZLIB_VERSION[0] || + stream_size != (int)(sizeof(z_stream))) + return Z_VERSION_ERROR; + if (strm == Z_NULL || window == Z_NULL || + windowBits < 8 || windowBits > 15) + return Z_STREAM_ERROR; + strm->msg = Z_NULL; /* in case we return an error */ + if (strm->zalloc == (alloc_func)0) { +#ifdef Z_SOLO + return Z_STREAM_ERROR; +#else + strm->zalloc = zcalloc; + strm->opaque = (voidpf)0; +#endif + } + if (strm->zfree == (free_func)0) +#ifdef Z_SOLO + return Z_STREAM_ERROR; +#else + strm->zfree = zcfree; +#endif + state = (struct inflate_state FAR *)ZALLOC(strm, 1, + sizeof(struct inflate_state)); + if (state == Z_NULL) return Z_MEM_ERROR; + Tracev((stderr, "inflate: allocated\n")); + strm->state = (struct internal_state FAR *)state; + state->dmax = 32768U; + state->wbits = (uInt)windowBits; + state->wsize = 1U << windowBits; + state->window = window; + state->wnext = 0; + state->whave = 0; + state->sane = 1; + return Z_OK; +} + +/* + Return state with length and distance decoding tables and index sizes set to + fixed code decoding. Normally this returns fixed tables from inffixed.h. + If BUILDFIXED is defined, then instead this routine builds the tables the + first time it's called, and returns those tables the first time and + thereafter. This reduces the size of the code by about 2K bytes, in + exchange for a little execution time. However, BUILDFIXED should not be + used for threaded applications, since the rewriting of the tables and virgin + may not be thread-safe. + */ +local void fixedtables(struct inflate_state FAR *state) { +#ifdef BUILDFIXED + static int virgin = 1; + static code *lenfix, *distfix; + static code fixed[544]; + + /* build fixed huffman tables if first call (may not be thread safe) */ + if (virgin) { + unsigned sym, bits; + static code *next; + + /* literal/length table */ + sym = 0; + while (sym < 144) state->lens[sym++] = 8; + while (sym < 256) state->lens[sym++] = 9; + while (sym < 280) state->lens[sym++] = 7; + while (sym < 288) state->lens[sym++] = 8; + next = fixed; + lenfix = next; + bits = 9; + inflate_table(LENS, state->lens, 288, &(next), &(bits), state->work); + + /* distance table */ + sym = 0; + while (sym < 32) state->lens[sym++] = 5; + distfix = next; + bits = 5; + inflate_table(DISTS, state->lens, 32, &(next), &(bits), state->work); + + /* do this just once */ + virgin = 0; + } +#else /* !BUILDFIXED */ +# include "inffixed.h" +#endif /* BUILDFIXED */ + state->lencode = lenfix; + state->lenbits = 9; + state->distcode = distfix; + state->distbits = 5; +} + +/* Macros for inflateBack(): */ + +/* Load returned state from inflate_fast() */ +#define LOAD() \ + do { \ + put = strm->next_out; \ + left = strm->avail_out; \ + next = strm->next_in; \ + have = strm->avail_in; \ + hold = state->hold; \ + bits = state->bits; \ + } while (0) + +/* Set state from registers for inflate_fast() */ +#define RESTORE() \ + do { \ + strm->next_out = put; \ + strm->avail_out = left; \ + strm->next_in = next; \ + strm->avail_in = have; \ + state->hold = hold; \ + state->bits = bits; \ + } while (0) + +/* Clear the input bit accumulator */ +#define INITBITS() \ + do { \ + hold = 0; \ + bits = 0; \ + } while (0) + +/* Assure that some input is available. If input is requested, but denied, + then return a Z_BUF_ERROR from inflateBack(). */ +#define PULL() \ + do { \ + if (have == 0) { \ + have = in(in_desc, &next); \ + if (have == 0) { \ + next = Z_NULL; \ + ret = Z_BUF_ERROR; \ + goto inf_leave; \ + } \ + } \ + } while (0) + +/* Get a byte of input into the bit accumulator, or return from inflateBack() + with an error if there is no input available. */ +#define PULLBYTE() \ + do { \ + PULL(); \ + have--; \ + hold += (unsigned long)(*next++) << bits; \ + bits += 8; \ + } while (0) + +/* Assure that there are at least n bits in the bit accumulator. If there is + not enough available input to do that, then return from inflateBack() with + an error. */ +#define NEEDBITS(n) \ + do { \ + while (bits < (unsigned)(n)) \ + PULLBYTE(); \ + } while (0) + +/* Return the low n bits of the bit accumulator (n < 16) */ +#define BITS(n) \ + ((unsigned)hold & ((1U << (n)) - 1)) + +/* Remove n bits from the bit accumulator */ +#define DROPBITS(n) \ + do { \ + hold >>= (n); \ + bits -= (unsigned)(n); \ + } while (0) + +/* Remove zero to seven bits as needed to go to a byte boundary */ +#define BYTEBITS() \ + do { \ + hold >>= bits & 7; \ + bits -= bits & 7; \ + } while (0) + +/* Assure that some output space is available, by writing out the window + if it's full. If the write fails, return from inflateBack() with a + Z_BUF_ERROR. */ +#define ROOM() \ + do { \ + if (left == 0) { \ + put = state->window; \ + left = state->wsize; \ + state->whave = left; \ + if (out(out_desc, put, left)) { \ + ret = Z_BUF_ERROR; \ + goto inf_leave; \ + } \ + } \ + } while (0) + +/* + strm provides the memory allocation functions and window buffer on input, + and provides information on the unused input on return. For Z_DATA_ERROR + returns, strm will also provide an error message. + + in() and out() are the call-back input and output functions. When + inflateBack() needs more input, it calls in(). When inflateBack() has + filled the window with output, or when it completes with data in the + window, it calls out() to write out the data. The application must not + change the provided input until in() is called again or inflateBack() + returns. The application must not change the window/output buffer until + inflateBack() returns. + + in() and out() are called with a descriptor parameter provided in the + inflateBack() call. This parameter can be a structure that provides the + information required to do the read or write, as well as accumulated + information on the input and output such as totals and check values. + + in() should return zero on failure. out() should return non-zero on + failure. If either in() or out() fails, than inflateBack() returns a + Z_BUF_ERROR. strm->next_in can be checked for Z_NULL to see whether it + was in() or out() that caused in the error. Otherwise, inflateBack() + returns Z_STREAM_END on success, Z_DATA_ERROR for an deflate format + error, or Z_MEM_ERROR if it could not allocate memory for the state. + inflateBack() can also return Z_STREAM_ERROR if the input parameters + are not correct, i.e. strm is Z_NULL or the state was not initialized. + */ +int ZEXPORT inflateBack(z_streamp strm, in_func in, void FAR *in_desc, + out_func out, void FAR *out_desc) { + struct inflate_state FAR *state; + z_const unsigned char FAR *next; /* next input */ + unsigned char FAR *put; /* next output */ + unsigned have, left; /* available input and output */ + unsigned long hold; /* bit buffer */ + unsigned bits; /* bits in bit buffer */ + unsigned copy; /* number of stored or match bytes to copy */ + unsigned char FAR *from; /* where to copy match bytes from */ + code here; /* current decoding table entry */ + code last; /* parent table entry */ + unsigned len; /* length to copy for repeats, bits to drop */ + int ret; /* return code */ + static const unsigned short order[19] = /* permutation of code lengths */ + {16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15}; + + /* Check that the strm exists and that the state was initialized */ + if (strm == Z_NULL || strm->state == Z_NULL) + return Z_STREAM_ERROR; + state = (struct inflate_state FAR *)strm->state; + + /* Reset the state */ + strm->msg = Z_NULL; + state->mode = TYPE; + state->last = 0; + state->whave = 0; + next = strm->next_in; + have = next != Z_NULL ? strm->avail_in : 0; + hold = 0; + bits = 0; + put = state->window; + left = state->wsize; + + /* Inflate until end of block marked as last */ + for (;;) + switch (state->mode) { + case TYPE: + /* determine and dispatch block type */ + if (state->last) { + BYTEBITS(); + state->mode = DONE; + break; + } + NEEDBITS(3); + state->last = BITS(1); + DROPBITS(1); + switch (BITS(2)) { + case 0: /* stored block */ + Tracev((stderr, "inflate: stored block%s\n", + state->last ? " (last)" : "")); + state->mode = STORED; + break; + case 1: /* fixed block */ + fixedtables(state); + Tracev((stderr, "inflate: fixed codes block%s\n", + state->last ? " (last)" : "")); + state->mode = LEN; /* decode codes */ + break; + case 2: /* dynamic block */ + Tracev((stderr, "inflate: dynamic codes block%s\n", + state->last ? " (last)" : "")); + state->mode = TABLE; + break; + case 3: + strm->msg = (char *)"invalid block type"; + state->mode = BAD; + } + DROPBITS(2); + break; + + case STORED: + /* get and verify stored block length */ + BYTEBITS(); /* go to byte boundary */ + NEEDBITS(32); + if ((hold & 0xffff) != ((hold >> 16) ^ 0xffff)) { + strm->msg = (char *)"invalid stored block lengths"; + state->mode = BAD; + break; + } + state->length = (unsigned)hold & 0xffff; + Tracev((stderr, "inflate: stored length %u\n", + state->length)); + INITBITS(); + + /* copy stored block from input to output */ + while (state->length != 0) { + copy = state->length; + PULL(); + ROOM(); + if (copy > have) copy = have; + if (copy > left) copy = left; + zmemcpy(put, next, copy); + have -= copy; + next += copy; + left -= copy; + put += copy; + state->length -= copy; + } + Tracev((stderr, "inflate: stored end\n")); + state->mode = TYPE; + break; + + case TABLE: + /* get dynamic table entries descriptor */ + NEEDBITS(14); + state->nlen = BITS(5) + 257; + DROPBITS(5); + state->ndist = BITS(5) + 1; + DROPBITS(5); + state->ncode = BITS(4) + 4; + DROPBITS(4); +#ifndef PKZIP_BUG_WORKAROUND + if (state->nlen > 286 || state->ndist > 30) { + strm->msg = (char *)"too many length or distance symbols"; + state->mode = BAD; + break; + } +#endif + Tracev((stderr, "inflate: table sizes ok\n")); + + /* get code length code lengths (not a typo) */ + state->have = 0; + while (state->have < state->ncode) { + NEEDBITS(3); + state->lens[order[state->have++]] = (unsigned short)BITS(3); + DROPBITS(3); + } + while (state->have < 19) + state->lens[order[state->have++]] = 0; + state->next = state->codes; + state->lencode = (code const FAR *)(state->next); + state->lenbits = 7; + ret = inflate_table(CODES, state->lens, 19, &(state->next), + &(state->lenbits), state->work); + if (ret) { + strm->msg = (char *)"invalid code lengths set"; + state->mode = BAD; + break; + } + Tracev((stderr, "inflate: code lengths ok\n")); + + /* get length and distance code code lengths */ + state->have = 0; + while (state->have < state->nlen + state->ndist) { + for (;;) { + here = state->lencode[BITS(state->lenbits)]; + if ((unsigned)(here.bits) <= bits) break; + PULLBYTE(); + } + if (here.val < 16) { + DROPBITS(here.bits); + state->lens[state->have++] = here.val; + } + else { + if (here.val == 16) { + NEEDBITS(here.bits + 2); + DROPBITS(here.bits); + if (state->have == 0) { + strm->msg = (char *)"invalid bit length repeat"; + state->mode = BAD; + break; + } + len = (unsigned)(state->lens[state->have - 1]); + copy = 3 + BITS(2); + DROPBITS(2); + } + else if (here.val == 17) { + NEEDBITS(here.bits + 3); + DROPBITS(here.bits); + len = 0; + copy = 3 + BITS(3); + DROPBITS(3); + } + else { + NEEDBITS(here.bits + 7); + DROPBITS(here.bits); + len = 0; + copy = 11 + BITS(7); + DROPBITS(7); + } + if (state->have + copy > state->nlen + state->ndist) { + strm->msg = (char *)"invalid bit length repeat"; + state->mode = BAD; + break; + } + while (copy--) + state->lens[state->have++] = (unsigned short)len; + } + } + + /* handle error breaks in while */ + if (state->mode == BAD) break; + + /* check for end-of-block code (better have one) */ + if (state->lens[256] == 0) { + strm->msg = (char *)"invalid code -- missing end-of-block"; + state->mode = BAD; + break; + } + + /* build code tables -- note: do not change the lenbits or distbits + values here (9 and 6) without reading the comments in inftrees.h + concerning the ENOUGH constants, which depend on those values */ + state->next = state->codes; + state->lencode = (code const FAR *)(state->next); + state->lenbits = 9; + ret = inflate_table(LENS, state->lens, state->nlen, &(state->next), + &(state->lenbits), state->work); + if (ret) { + strm->msg = (char *)"invalid literal/lengths set"; + state->mode = BAD; + break; + } + state->distcode = (code const FAR *)(state->next); + state->distbits = 6; + ret = inflate_table(DISTS, state->lens + state->nlen, state->ndist, + &(state->next), &(state->distbits), state->work); + if (ret) { + strm->msg = (char *)"invalid distances set"; + state->mode = BAD; + break; + } + Tracev((stderr, "inflate: codes ok\n")); + state->mode = LEN; + /* fallthrough */ + + case LEN: + /* use inflate_fast() if we have enough input and output */ + if (have >= 6 && left >= 258) { + RESTORE(); + if (state->whave < state->wsize) + state->whave = state->wsize - left; + inflate_fast(strm, state->wsize); + LOAD(); + break; + } + + /* get a literal, length, or end-of-block code */ + for (;;) { + here = state->lencode[BITS(state->lenbits)]; + if ((unsigned)(here.bits) <= bits) break; + PULLBYTE(); + } + if (here.op && (here.op & 0xf0) == 0) { + last = here; + for (;;) { + here = state->lencode[last.val + + (BITS(last.bits + last.op) >> last.bits)]; + if ((unsigned)(last.bits + here.bits) <= bits) break; + PULLBYTE(); + } + DROPBITS(last.bits); + } + DROPBITS(here.bits); + state->length = (unsigned)here.val; + + /* process literal */ + if (here.op == 0) { + Tracevv((stderr, here.val >= 0x20 && here.val < 0x7f ? + "inflate: literal '%c'\n" : + "inflate: literal 0x%02x\n", here.val)); + ROOM(); + *put++ = (unsigned char)(state->length); + left--; + state->mode = LEN; + break; + } + + /* process end of block */ + if (here.op & 32) { + Tracevv((stderr, "inflate: end of block\n")); + state->mode = TYPE; + break; + } + + /* invalid code */ + if (here.op & 64) { + strm->msg = (char *)"invalid literal/length code"; + state->mode = BAD; + break; + } + + /* length code -- get extra bits, if any */ + state->extra = (unsigned)(here.op) & 15; + if (state->extra != 0) { + NEEDBITS(state->extra); + state->length += BITS(state->extra); + DROPBITS(state->extra); + } + Tracevv((stderr, "inflate: length %u\n", state->length)); + + /* get distance code */ + for (;;) { + here = state->distcode[BITS(state->distbits)]; + if ((unsigned)(here.bits) <= bits) break; + PULLBYTE(); + } + if ((here.op & 0xf0) == 0) { + last = here; + for (;;) { + here = state->distcode[last.val + + (BITS(last.bits + last.op) >> last.bits)]; + if ((unsigned)(last.bits + here.bits) <= bits) break; + PULLBYTE(); + } + DROPBITS(last.bits); + } + DROPBITS(here.bits); + if (here.op & 64) { + strm->msg = (char *)"invalid distance code"; + state->mode = BAD; + break; + } + state->offset = (unsigned)here.val; + + /* get distance extra bits, if any */ + state->extra = (unsigned)(here.op) & 15; + if (state->extra != 0) { + NEEDBITS(state->extra); + state->offset += BITS(state->extra); + DROPBITS(state->extra); + } + if (state->offset > state->wsize - (state->whave < state->wsize ? + left : 0)) { + strm->msg = (char *)"invalid distance too far back"; + state->mode = BAD; + break; + } + Tracevv((stderr, "inflate: distance %u\n", state->offset)); + + /* copy match from window to output */ + do { + ROOM(); + copy = state->wsize - state->offset; + if (copy < left) { + from = put + copy; + copy = left - copy; + } + else { + from = put - state->offset; + copy = left; + } + if (copy > state->length) copy = state->length; + state->length -= copy; + left -= copy; + do { + *put++ = *from++; + } while (--copy); + } while (state->length != 0); + break; + + case DONE: + /* inflate stream terminated properly */ + ret = Z_STREAM_END; + goto inf_leave; + + case BAD: + ret = Z_DATA_ERROR; + goto inf_leave; + + default: + /* can't happen, but makes compilers happy */ + ret = Z_STREAM_ERROR; + goto inf_leave; + } + + /* Write leftover output and return unused input */ + inf_leave: + if (left < state->wsize) { + if (out(out_desc, state->window, state->wsize - left) && + ret == Z_STREAM_END) + ret = Z_BUF_ERROR; + } + strm->next_in = next; + strm->avail_in = have; + return ret; +} + +int ZEXPORT inflateBackEnd(z_streamp strm) { + if (strm == Z_NULL || strm->state == Z_NULL || strm->zfree == (free_func)0) + return Z_STREAM_ERROR; + ZFREE(strm, strm->state); + strm->state = Z_NULL; + Tracev((stderr, "inflate: end\n")); + return Z_OK; +} diff --git a/thirdparty/zlib-1.3.1/inffast.c b/thirdparty/zlib-1.3.1/inffast.c new file mode 100644 index 0000000..9354676 --- /dev/null +++ b/thirdparty/zlib-1.3.1/inffast.c @@ -0,0 +1,320 @@ +/* inffast.c -- fast decoding + * Copyright (C) 1995-2017 Mark Adler + * For conditions of distribution and use, see copyright notice in zlib.h + */ + +#include "zutil.h" +#include "inftrees.h" +#include "inflate.h" +#include "inffast.h" + +#ifdef ASMINF +# pragma message("Assembler code may have bugs -- use at your own risk") +#else + +/* + Decode literal, length, and distance codes and write out the resulting + literal and match bytes until either not enough input or output is + available, an end-of-block is encountered, or a data error is encountered. + When large enough input and output buffers are supplied to inflate(), for + example, a 16K input buffer and a 64K output buffer, more than 95% of the + inflate execution time is spent in this routine. + + Entry assumptions: + + state->mode == LEN + strm->avail_in >= 6 + strm->avail_out >= 258 + start >= strm->avail_out + state->bits < 8 + + On return, state->mode is one of: + + LEN -- ran out of enough output space or enough available input + TYPE -- reached end of block code, inflate() to interpret next block + BAD -- error in block data + + Notes: + + - The maximum input bits used by a length/distance pair is 15 bits for the + length code, 5 bits for the length extra, 15 bits for the distance code, + and 13 bits for the distance extra. This totals 48 bits, or six bytes. + Therefore if strm->avail_in >= 6, then there is enough input to avoid + checking for available input while decoding. + + - The maximum bytes that a single length/distance pair can output is 258 + bytes, which is the maximum length that can be coded. inflate_fast() + requires strm->avail_out >= 258 for each loop to avoid checking for + output space. + */ +void ZLIB_INTERNAL inflate_fast(z_streamp strm, unsigned start) { + struct inflate_state FAR *state; + z_const unsigned char FAR *in; /* local strm->next_in */ + z_const unsigned char FAR *last; /* have enough input while in < last */ + unsigned char FAR *out; /* local strm->next_out */ + unsigned char FAR *beg; /* inflate()'s initial strm->next_out */ + unsigned char FAR *end; /* while out < end, enough space available */ +#ifdef INFLATE_STRICT + unsigned dmax; /* maximum distance from zlib header */ +#endif + unsigned wsize; /* window size or zero if not using window */ + unsigned whave; /* valid bytes in the window */ + unsigned wnext; /* window write index */ + unsigned char FAR *window; /* allocated sliding window, if wsize != 0 */ + unsigned long hold; /* local strm->hold */ + unsigned bits; /* local strm->bits */ + code const FAR *lcode; /* local strm->lencode */ + code const FAR *dcode; /* local strm->distcode */ + unsigned lmask; /* mask for first level of length codes */ + unsigned dmask; /* mask for first level of distance codes */ + code const *here; /* retrieved table entry */ + unsigned op; /* code bits, operation, extra bits, or */ + /* window position, window bytes to copy */ + unsigned len; /* match length, unused bytes */ + unsigned dist; /* match distance */ + unsigned char FAR *from; /* where to copy match from */ + + /* copy state to local variables */ + state = (struct inflate_state FAR *)strm->state; + in = strm->next_in; + last = in + (strm->avail_in - 5); + out = strm->next_out; + beg = out - (start - strm->avail_out); + end = out + (strm->avail_out - 257); +#ifdef INFLATE_STRICT + dmax = state->dmax; +#endif + wsize = state->wsize; + whave = state->whave; + wnext = state->wnext; + window = state->window; + hold = state->hold; + bits = state->bits; + lcode = state->lencode; + dcode = state->distcode; + lmask = (1U << state->lenbits) - 1; + dmask = (1U << state->distbits) - 1; + + /* decode literals and length/distances until end-of-block or not enough + input data or output space */ + do { + if (bits < 15) { + hold += (unsigned long)(*in++) << bits; + bits += 8; + hold += (unsigned long)(*in++) << bits; + bits += 8; + } + here = lcode + (hold & lmask); + dolen: + op = (unsigned)(here->bits); + hold >>= op; + bits -= op; + op = (unsigned)(here->op); + if (op == 0) { /* literal */ + Tracevv((stderr, here->val >= 0x20 && here->val < 0x7f ? + "inflate: literal '%c'\n" : + "inflate: literal 0x%02x\n", here->val)); + *out++ = (unsigned char)(here->val); + } + else if (op & 16) { /* length base */ + len = (unsigned)(here->val); + op &= 15; /* number of extra bits */ + if (op) { + if (bits < op) { + hold += (unsigned long)(*in++) << bits; + bits += 8; + } + len += (unsigned)hold & ((1U << op) - 1); + hold >>= op; + bits -= op; + } + Tracevv((stderr, "inflate: length %u\n", len)); + if (bits < 15) { + hold += (unsigned long)(*in++) << bits; + bits += 8; + hold += (unsigned long)(*in++) << bits; + bits += 8; + } + here = dcode + (hold & dmask); + dodist: + op = (unsigned)(here->bits); + hold >>= op; + bits -= op; + op = (unsigned)(here->op); + if (op & 16) { /* distance base */ + dist = (unsigned)(here->val); + op &= 15; /* number of extra bits */ + if (bits < op) { + hold += (unsigned long)(*in++) << bits; + bits += 8; + if (bits < op) { + hold += (unsigned long)(*in++) << bits; + bits += 8; + } + } + dist += (unsigned)hold & ((1U << op) - 1); +#ifdef INFLATE_STRICT + if (dist > dmax) { + strm->msg = (char *)"invalid distance too far back"; + state->mode = BAD; + break; + } +#endif + hold >>= op; + bits -= op; + Tracevv((stderr, "inflate: distance %u\n", dist)); + op = (unsigned)(out - beg); /* max distance in output */ + if (dist > op) { /* see if copy from window */ + op = dist - op; /* distance back in window */ + if (op > whave) { + if (state->sane) { + strm->msg = + (char *)"invalid distance too far back"; + state->mode = BAD; + break; + } +#ifdef INFLATE_ALLOW_INVALID_DISTANCE_TOOFAR_ARRR + if (len <= op - whave) { + do { + *out++ = 0; + } while (--len); + continue; + } + len -= op - whave; + do { + *out++ = 0; + } while (--op > whave); + if (op == 0) { + from = out - dist; + do { + *out++ = *from++; + } while (--len); + continue; + } +#endif + } + from = window; + if (wnext == 0) { /* very common case */ + from += wsize - op; + if (op < len) { /* some from window */ + len -= op; + do { + *out++ = *from++; + } while (--op); + from = out - dist; /* rest from output */ + } + } + else if (wnext < op) { /* wrap around window */ + from += wsize + wnext - op; + op -= wnext; + if (op < len) { /* some from end of window */ + len -= op; + do { + *out++ = *from++; + } while (--op); + from = window; + if (wnext < len) { /* some from start of window */ + op = wnext; + len -= op; + do { + *out++ = *from++; + } while (--op); + from = out - dist; /* rest from output */ + } + } + } + else { /* contiguous in window */ + from += wnext - op; + if (op < len) { /* some from window */ + len -= op; + do { + *out++ = *from++; + } while (--op); + from = out - dist; /* rest from output */ + } + } + while (len > 2) { + *out++ = *from++; + *out++ = *from++; + *out++ = *from++; + len -= 3; + } + if (len) { + *out++ = *from++; + if (len > 1) + *out++ = *from++; + } + } + else { + from = out - dist; /* copy direct from output */ + do { /* minimum length is three */ + *out++ = *from++; + *out++ = *from++; + *out++ = *from++; + len -= 3; + } while (len > 2); + if (len) { + *out++ = *from++; + if (len > 1) + *out++ = *from++; + } + } + } + else if ((op & 64) == 0) { /* 2nd level distance code */ + here = dcode + here->val + (hold & ((1U << op) - 1)); + goto dodist; + } + else { + strm->msg = (char *)"invalid distance code"; + state->mode = BAD; + break; + } + } + else if ((op & 64) == 0) { /* 2nd level length code */ + here = lcode + here->val + (hold & ((1U << op) - 1)); + goto dolen; + } + else if (op & 32) { /* end-of-block */ + Tracevv((stderr, "inflate: end of block\n")); + state->mode = TYPE; + break; + } + else { + strm->msg = (char *)"invalid literal/length code"; + state->mode = BAD; + break; + } + } while (in < last && out < end); + + /* return unused bytes (on entry, bits < 8, so in won't go too far back) */ + len = bits >> 3; + in -= len; + bits -= len << 3; + hold &= (1U << bits) - 1; + + /* update state and return */ + strm->next_in = in; + strm->next_out = out; + strm->avail_in = (unsigned)(in < last ? 5 + (last - in) : 5 - (in - last)); + strm->avail_out = (unsigned)(out < end ? + 257 + (end - out) : 257 - (out - end)); + state->hold = hold; + state->bits = bits; + return; +} + +/* + inflate_fast() speedups that turned out slower (on a PowerPC G3 750CXe): + - Using bit fields for code structure + - Different op definition to avoid & for extra bits (do & for table bits) + - Three separate decoding do-loops for direct, window, and wnext == 0 + - Special case for distance > 1 copies to do overlapped load and store copy + - Explicit branch predictions (based on measured branch probabilities) + - Deferring match copy and interspersed it with decoding subsequent codes + - Swapping literal/length else + - Swapping window/direct else + - Larger unrolled copy loops (three is about right) + - Moving len -= 3 statement into middle of loop + */ + +#endif /* !ASMINF */ diff --git a/thirdparty/zlib-1.3.1/inffast.h b/thirdparty/zlib-1.3.1/inffast.h new file mode 100644 index 0000000..49c6d15 --- /dev/null +++ b/thirdparty/zlib-1.3.1/inffast.h @@ -0,0 +1,11 @@ +/* inffast.h -- header to use inffast.c + * Copyright (C) 1995-2003, 2010 Mark Adler + * For conditions of distribution and use, see copyright notice in zlib.h + */ + +/* WARNING: this file should *not* be used by applications. It is + part of the implementation of the compression library and is + subject to change. Applications should only use zlib.h. + */ + +void ZLIB_INTERNAL inflate_fast(z_streamp strm, unsigned start); diff --git a/thirdparty/zlib-1.3.1/inffixed.h b/thirdparty/zlib-1.3.1/inffixed.h new file mode 100644 index 0000000..d628327 --- /dev/null +++ b/thirdparty/zlib-1.3.1/inffixed.h @@ -0,0 +1,94 @@ + /* inffixed.h -- table for decoding fixed codes + * Generated automatically by makefixed(). + */ + + /* WARNING: this file should *not* be used by applications. + It is part of the implementation of this library and is + subject to change. Applications should only use zlib.h. + */ + + static const code lenfix[512] = { + {96,7,0},{0,8,80},{0,8,16},{20,8,115},{18,7,31},{0,8,112},{0,8,48}, + {0,9,192},{16,7,10},{0,8,96},{0,8,32},{0,9,160},{0,8,0},{0,8,128}, + {0,8,64},{0,9,224},{16,7,6},{0,8,88},{0,8,24},{0,9,144},{19,7,59}, + {0,8,120},{0,8,56},{0,9,208},{17,7,17},{0,8,104},{0,8,40},{0,9,176}, + {0,8,8},{0,8,136},{0,8,72},{0,9,240},{16,7,4},{0,8,84},{0,8,20}, + {21,8,227},{19,7,43},{0,8,116},{0,8,52},{0,9,200},{17,7,13},{0,8,100}, + {0,8,36},{0,9,168},{0,8,4},{0,8,132},{0,8,68},{0,9,232},{16,7,8}, + {0,8,92},{0,8,28},{0,9,152},{20,7,83},{0,8,124},{0,8,60},{0,9,216}, + {18,7,23},{0,8,108},{0,8,44},{0,9,184},{0,8,12},{0,8,140},{0,8,76}, + {0,9,248},{16,7,3},{0,8,82},{0,8,18},{21,8,163},{19,7,35},{0,8,114}, + {0,8,50},{0,9,196},{17,7,11},{0,8,98},{0,8,34},{0,9,164},{0,8,2}, + {0,8,130},{0,8,66},{0,9,228},{16,7,7},{0,8,90},{0,8,26},{0,9,148}, + {20,7,67},{0,8,122},{0,8,58},{0,9,212},{18,7,19},{0,8,106},{0,8,42}, + {0,9,180},{0,8,10},{0,8,138},{0,8,74},{0,9,244},{16,7,5},{0,8,86}, + {0,8,22},{64,8,0},{19,7,51},{0,8,118},{0,8,54},{0,9,204},{17,7,15}, + {0,8,102},{0,8,38},{0,9,172},{0,8,6},{0,8,134},{0,8,70},{0,9,236}, + {16,7,9},{0,8,94},{0,8,30},{0,9,156},{20,7,99},{0,8,126},{0,8,62}, + {0,9,220},{18,7,27},{0,8,110},{0,8,46},{0,9,188},{0,8,14},{0,8,142}, + {0,8,78},{0,9,252},{96,7,0},{0,8,81},{0,8,17},{21,8,131},{18,7,31}, + {0,8,113},{0,8,49},{0,9,194},{16,7,10},{0,8,97},{0,8,33},{0,9,162}, + {0,8,1},{0,8,129},{0,8,65},{0,9,226},{16,7,6},{0,8,89},{0,8,25}, + {0,9,146},{19,7,59},{0,8,121},{0,8,57},{0,9,210},{17,7,17},{0,8,105}, + {0,8,41},{0,9,178},{0,8,9},{0,8,137},{0,8,73},{0,9,242},{16,7,4}, + {0,8,85},{0,8,21},{16,8,258},{19,7,43},{0,8,117},{0,8,53},{0,9,202}, + {17,7,13},{0,8,101},{0,8,37},{0,9,170},{0,8,5},{0,8,133},{0,8,69}, + {0,9,234},{16,7,8},{0,8,93},{0,8,29},{0,9,154},{20,7,83},{0,8,125}, + {0,8,61},{0,9,218},{18,7,23},{0,8,109},{0,8,45},{0,9,186},{0,8,13}, + {0,8,141},{0,8,77},{0,9,250},{16,7,3},{0,8,83},{0,8,19},{21,8,195}, + {19,7,35},{0,8,115},{0,8,51},{0,9,198},{17,7,11},{0,8,99},{0,8,35}, + {0,9,166},{0,8,3},{0,8,131},{0,8,67},{0,9,230},{16,7,7},{0,8,91}, + {0,8,27},{0,9,150},{20,7,67},{0,8,123},{0,8,59},{0,9,214},{18,7,19}, + {0,8,107},{0,8,43},{0,9,182},{0,8,11},{0,8,139},{0,8,75},{0,9,246}, + {16,7,5},{0,8,87},{0,8,23},{64,8,0},{19,7,51},{0,8,119},{0,8,55}, + {0,9,206},{17,7,15},{0,8,103},{0,8,39},{0,9,174},{0,8,7},{0,8,135}, + {0,8,71},{0,9,238},{16,7,9},{0,8,95},{0,8,31},{0,9,158},{20,7,99}, + {0,8,127},{0,8,63},{0,9,222},{18,7,27},{0,8,111},{0,8,47},{0,9,190}, + {0,8,15},{0,8,143},{0,8,79},{0,9,254},{96,7,0},{0,8,80},{0,8,16}, + {20,8,115},{18,7,31},{0,8,112},{0,8,48},{0,9,193},{16,7,10},{0,8,96}, + {0,8,32},{0,9,161},{0,8,0},{0,8,128},{0,8,64},{0,9,225},{16,7,6}, + {0,8,88},{0,8,24},{0,9,145},{19,7,59},{0,8,120},{0,8,56},{0,9,209}, + {17,7,17},{0,8,104},{0,8,40},{0,9,177},{0,8,8},{0,8,136},{0,8,72}, + {0,9,241},{16,7,4},{0,8,84},{0,8,20},{21,8,227},{19,7,43},{0,8,116}, + {0,8,52},{0,9,201},{17,7,13},{0,8,100},{0,8,36},{0,9,169},{0,8,4}, + {0,8,132},{0,8,68},{0,9,233},{16,7,8},{0,8,92},{0,8,28},{0,9,153}, + {20,7,83},{0,8,124},{0,8,60},{0,9,217},{18,7,23},{0,8,108},{0,8,44}, + {0,9,185},{0,8,12},{0,8,140},{0,8,76},{0,9,249},{16,7,3},{0,8,82}, + {0,8,18},{21,8,163},{19,7,35},{0,8,114},{0,8,50},{0,9,197},{17,7,11}, + {0,8,98},{0,8,34},{0,9,165},{0,8,2},{0,8,130},{0,8,66},{0,9,229}, + {16,7,7},{0,8,90},{0,8,26},{0,9,149},{20,7,67},{0,8,122},{0,8,58}, + {0,9,213},{18,7,19},{0,8,106},{0,8,42},{0,9,181},{0,8,10},{0,8,138}, + {0,8,74},{0,9,245},{16,7,5},{0,8,86},{0,8,22},{64,8,0},{19,7,51}, + {0,8,118},{0,8,54},{0,9,205},{17,7,15},{0,8,102},{0,8,38},{0,9,173}, + {0,8,6},{0,8,134},{0,8,70},{0,9,237},{16,7,9},{0,8,94},{0,8,30}, + {0,9,157},{20,7,99},{0,8,126},{0,8,62},{0,9,221},{18,7,27},{0,8,110}, + {0,8,46},{0,9,189},{0,8,14},{0,8,142},{0,8,78},{0,9,253},{96,7,0}, + {0,8,81},{0,8,17},{21,8,131},{18,7,31},{0,8,113},{0,8,49},{0,9,195}, + {16,7,10},{0,8,97},{0,8,33},{0,9,163},{0,8,1},{0,8,129},{0,8,65}, + {0,9,227},{16,7,6},{0,8,89},{0,8,25},{0,9,147},{19,7,59},{0,8,121}, + {0,8,57},{0,9,211},{17,7,17},{0,8,105},{0,8,41},{0,9,179},{0,8,9}, + {0,8,137},{0,8,73},{0,9,243},{16,7,4},{0,8,85},{0,8,21},{16,8,258}, + {19,7,43},{0,8,117},{0,8,53},{0,9,203},{17,7,13},{0,8,101},{0,8,37}, + {0,9,171},{0,8,5},{0,8,133},{0,8,69},{0,9,235},{16,7,8},{0,8,93}, + {0,8,29},{0,9,155},{20,7,83},{0,8,125},{0,8,61},{0,9,219},{18,7,23}, + {0,8,109},{0,8,45},{0,9,187},{0,8,13},{0,8,141},{0,8,77},{0,9,251}, + {16,7,3},{0,8,83},{0,8,19},{21,8,195},{19,7,35},{0,8,115},{0,8,51}, + {0,9,199},{17,7,11},{0,8,99},{0,8,35},{0,9,167},{0,8,3},{0,8,131}, + {0,8,67},{0,9,231},{16,7,7},{0,8,91},{0,8,27},{0,9,151},{20,7,67}, + {0,8,123},{0,8,59},{0,9,215},{18,7,19},{0,8,107},{0,8,43},{0,9,183}, + {0,8,11},{0,8,139},{0,8,75},{0,9,247},{16,7,5},{0,8,87},{0,8,23}, + {64,8,0},{19,7,51},{0,8,119},{0,8,55},{0,9,207},{17,7,15},{0,8,103}, + {0,8,39},{0,9,175},{0,8,7},{0,8,135},{0,8,71},{0,9,239},{16,7,9}, + {0,8,95},{0,8,31},{0,9,159},{20,7,99},{0,8,127},{0,8,63},{0,9,223}, + {18,7,27},{0,8,111},{0,8,47},{0,9,191},{0,8,15},{0,8,143},{0,8,79}, + {0,9,255} + }; + + static const code distfix[32] = { + {16,5,1},{23,5,257},{19,5,17},{27,5,4097},{17,5,5},{25,5,1025}, + {21,5,65},{29,5,16385},{16,5,3},{24,5,513},{20,5,33},{28,5,8193}, + {18,5,9},{26,5,2049},{22,5,129},{64,5,0},{16,5,2},{23,5,385}, + {19,5,25},{27,5,6145},{17,5,7},{25,5,1537},{21,5,97},{29,5,24577}, + {16,5,4},{24,5,769},{20,5,49},{28,5,12289},{18,5,13},{26,5,3073}, + {22,5,193},{64,5,0} + }; diff --git a/thirdparty/zlib-1.3.1/inflate.c b/thirdparty/zlib-1.3.1/inflate.c new file mode 100644 index 0000000..94ecff0 --- /dev/null +++ b/thirdparty/zlib-1.3.1/inflate.c @@ -0,0 +1,1526 @@ +/* inflate.c -- zlib decompression + * Copyright (C) 1995-2022 Mark Adler + * For conditions of distribution and use, see copyright notice in zlib.h + */ + +/* + * Change history: + * + * 1.2.beta0 24 Nov 2002 + * - First version -- complete rewrite of inflate to simplify code, avoid + * creation of window when not needed, minimize use of window when it is + * needed, make inffast.c even faster, implement gzip decoding, and to + * improve code readability and style over the previous zlib inflate code + * + * 1.2.beta1 25 Nov 2002 + * - Use pointers for available input and output checking in inffast.c + * - Remove input and output counters in inffast.c + * - Change inffast.c entry and loop from avail_in >= 7 to >= 6 + * - Remove unnecessary second byte pull from length extra in inffast.c + * - Unroll direct copy to three copies per loop in inffast.c + * + * 1.2.beta2 4 Dec 2002 + * - Change external routine names to reduce potential conflicts + * - Correct filename to inffixed.h for fixed tables in inflate.c + * - Make hbuf[] unsigned char to match parameter type in inflate.c + * - Change strm->next_out[-state->offset] to *(strm->next_out - state->offset) + * to avoid negation problem on Alphas (64 bit) in inflate.c + * + * 1.2.beta3 22 Dec 2002 + * - Add comments on state->bits assertion in inffast.c + * - Add comments on op field in inftrees.h + * - Fix bug in reuse of allocated window after inflateReset() + * - Remove bit fields--back to byte structure for speed + * - Remove distance extra == 0 check in inflate_fast()--only helps for lengths + * - Change post-increments to pre-increments in inflate_fast(), PPC biased? + * - Add compile time option, POSTINC, to use post-increments instead (Intel?) + * - Make MATCH copy in inflate() much faster for when inflate_fast() not used + * - Use local copies of stream next and avail values, as well as local bit + * buffer and bit count in inflate()--for speed when inflate_fast() not used + * + * 1.2.beta4 1 Jan 2003 + * - Split ptr - 257 statements in inflate_table() to avoid compiler warnings + * - Move a comment on output buffer sizes from inffast.c to inflate.c + * - Add comments in inffast.c to introduce the inflate_fast() routine + * - Rearrange window copies in inflate_fast() for speed and simplification + * - Unroll last copy for window match in inflate_fast() + * - Use local copies of window variables in inflate_fast() for speed + * - Pull out common wnext == 0 case for speed in inflate_fast() + * - Make op and len in inflate_fast() unsigned for consistency + * - Add FAR to lcode and dcode declarations in inflate_fast() + * - Simplified bad distance check in inflate_fast() + * - Added inflateBackInit(), inflateBack(), and inflateBackEnd() in new + * source file infback.c to provide a call-back interface to inflate for + * programs like gzip and unzip -- uses window as output buffer to avoid + * window copying + * + * 1.2.beta5 1 Jan 2003 + * - Improved inflateBack() interface to allow the caller to provide initial + * input in strm. + * - Fixed stored blocks bug in inflateBack() + * + * 1.2.beta6 4 Jan 2003 + * - Added comments in inffast.c on effectiveness of POSTINC + * - Typecasting all around to reduce compiler warnings + * - Changed loops from while (1) or do {} while (1) to for (;;), again to + * make compilers happy + * - Changed type of window in inflateBackInit() to unsigned char * + * + * 1.2.beta7 27 Jan 2003 + * - Changed many types to unsigned or unsigned short to avoid warnings + * - Added inflateCopy() function + * + * 1.2.0 9 Mar 2003 + * - Changed inflateBack() interface to provide separate opaque descriptors + * for the in() and out() functions + * - Changed inflateBack() argument and in_func typedef to swap the length + * and buffer address return values for the input function + * - Check next_in and next_out for Z_NULL on entry to inflate() + * + * The history for versions after 1.2.0 are in ChangeLog in zlib distribution. + */ + +#include "zutil.h" +#include "inftrees.h" +#include "inflate.h" +#include "inffast.h" + +#ifdef MAKEFIXED +# ifndef BUILDFIXED +# define BUILDFIXED +# endif +#endif + +local int inflateStateCheck(z_streamp strm) { + struct inflate_state FAR *state; + if (strm == Z_NULL || + strm->zalloc == (alloc_func)0 || strm->zfree == (free_func)0) + return 1; + state = (struct inflate_state FAR *)strm->state; + if (state == Z_NULL || state->strm != strm || + state->mode < HEAD || state->mode > SYNC) + return 1; + return 0; +} + +int ZEXPORT inflateResetKeep(z_streamp strm) { + struct inflate_state FAR *state; + + if (inflateStateCheck(strm)) return Z_STREAM_ERROR; + state = (struct inflate_state FAR *)strm->state; + strm->total_in = strm->total_out = state->total = 0; + strm->msg = Z_NULL; + if (state->wrap) /* to support ill-conceived Java test suite */ + strm->adler = state->wrap & 1; + state->mode = HEAD; + state->last = 0; + state->havedict = 0; + state->flags = -1; + state->dmax = 32768U; + state->head = Z_NULL; + state->hold = 0; + state->bits = 0; + state->lencode = state->distcode = state->next = state->codes; + state->sane = 1; + state->back = -1; + Tracev((stderr, "inflate: reset\n")); + return Z_OK; +} + +int ZEXPORT inflateReset(z_streamp strm) { + struct inflate_state FAR *state; + + if (inflateStateCheck(strm)) return Z_STREAM_ERROR; + state = (struct inflate_state FAR *)strm->state; + state->wsize = 0; + state->whave = 0; + state->wnext = 0; + return inflateResetKeep(strm); +} + +int ZEXPORT inflateReset2(z_streamp strm, int windowBits) { + int wrap; + struct inflate_state FAR *state; + + /* get the state */ + if (inflateStateCheck(strm)) return Z_STREAM_ERROR; + state = (struct inflate_state FAR *)strm->state; + + /* extract wrap request from windowBits parameter */ + if (windowBits < 0) { + if (windowBits < -15) + return Z_STREAM_ERROR; + wrap = 0; + windowBits = -windowBits; + } + else { + wrap = (windowBits >> 4) + 5; +#ifdef GUNZIP + if (windowBits < 48) + windowBits &= 15; +#endif + } + + /* set number of window bits, free window if different */ + if (windowBits && (windowBits < 8 || windowBits > 15)) + return Z_STREAM_ERROR; + if (state->window != Z_NULL && state->wbits != (unsigned)windowBits) { + ZFREE(strm, state->window); + state->window = Z_NULL; + } + + /* update state and reset the rest of it */ + state->wrap = wrap; + state->wbits = (unsigned)windowBits; + return inflateReset(strm); +} + +int ZEXPORT inflateInit2_(z_streamp strm, int windowBits, + const char *version, int stream_size) { + int ret; + struct inflate_state FAR *state; + + if (version == Z_NULL || version[0] != ZLIB_VERSION[0] || + stream_size != (int)(sizeof(z_stream))) + return Z_VERSION_ERROR; + if (strm == Z_NULL) return Z_STREAM_ERROR; + strm->msg = Z_NULL; /* in case we return an error */ + if (strm->zalloc == (alloc_func)0) { +#ifdef Z_SOLO + return Z_STREAM_ERROR; +#else + strm->zalloc = zcalloc; + strm->opaque = (voidpf)0; +#endif + } + if (strm->zfree == (free_func)0) +#ifdef Z_SOLO + return Z_STREAM_ERROR; +#else + strm->zfree = zcfree; +#endif + state = (struct inflate_state FAR *) + ZALLOC(strm, 1, sizeof(struct inflate_state)); + if (state == Z_NULL) return Z_MEM_ERROR; + Tracev((stderr, "inflate: allocated\n")); + strm->state = (struct internal_state FAR *)state; + state->strm = strm; + state->window = Z_NULL; + state->mode = HEAD; /* to pass state test in inflateReset2() */ + ret = inflateReset2(strm, windowBits); + if (ret != Z_OK) { + ZFREE(strm, state); + strm->state = Z_NULL; + } + return ret; +} + +int ZEXPORT inflateInit_(z_streamp strm, const char *version, + int stream_size) { + return inflateInit2_(strm, DEF_WBITS, version, stream_size); +} + +int ZEXPORT inflatePrime(z_streamp strm, int bits, int value) { + struct inflate_state FAR *state; + + if (inflateStateCheck(strm)) return Z_STREAM_ERROR; + if (bits == 0) + return Z_OK; + state = (struct inflate_state FAR *)strm->state; + if (bits < 0) { + state->hold = 0; + state->bits = 0; + return Z_OK; + } + if (bits > 16 || state->bits + (uInt)bits > 32) return Z_STREAM_ERROR; + value &= (1L << bits) - 1; + state->hold += (unsigned)value << state->bits; + state->bits += (uInt)bits; + return Z_OK; +} + +/* + Return state with length and distance decoding tables and index sizes set to + fixed code decoding. Normally this returns fixed tables from inffixed.h. + If BUILDFIXED is defined, then instead this routine builds the tables the + first time it's called, and returns those tables the first time and + thereafter. This reduces the size of the code by about 2K bytes, in + exchange for a little execution time. However, BUILDFIXED should not be + used for threaded applications, since the rewriting of the tables and virgin + may not be thread-safe. + */ +local void fixedtables(struct inflate_state FAR *state) { +#ifdef BUILDFIXED + static int virgin = 1; + static code *lenfix, *distfix; + static code fixed[544]; + + /* build fixed huffman tables if first call (may not be thread safe) */ + if (virgin) { + unsigned sym, bits; + static code *next; + + /* literal/length table */ + sym = 0; + while (sym < 144) state->lens[sym++] = 8; + while (sym < 256) state->lens[sym++] = 9; + while (sym < 280) state->lens[sym++] = 7; + while (sym < 288) state->lens[sym++] = 8; + next = fixed; + lenfix = next; + bits = 9; + inflate_table(LENS, state->lens, 288, &(next), &(bits), state->work); + + /* distance table */ + sym = 0; + while (sym < 32) state->lens[sym++] = 5; + distfix = next; + bits = 5; + inflate_table(DISTS, state->lens, 32, &(next), &(bits), state->work); + + /* do this just once */ + virgin = 0; + } +#else /* !BUILDFIXED */ +# include "inffixed.h" +#endif /* BUILDFIXED */ + state->lencode = lenfix; + state->lenbits = 9; + state->distcode = distfix; + state->distbits = 5; +} + +#ifdef MAKEFIXED +#include + +/* + Write out the inffixed.h that is #include'd above. Defining MAKEFIXED also + defines BUILDFIXED, so the tables are built on the fly. makefixed() writes + those tables to stdout, which would be piped to inffixed.h. A small program + can simply call makefixed to do this: + + void makefixed(void); + + int main(void) + { + makefixed(); + return 0; + } + + Then that can be linked with zlib built with MAKEFIXED defined and run: + + a.out > inffixed.h + */ +void makefixed(void) +{ + unsigned low, size; + struct inflate_state state; + + fixedtables(&state); + puts(" /* inffixed.h -- table for decoding fixed codes"); + puts(" * Generated automatically by makefixed()."); + puts(" */"); + puts(""); + puts(" /* WARNING: this file should *not* be used by applications."); + puts(" It is part of the implementation of this library and is"); + puts(" subject to change. Applications should only use zlib.h."); + puts(" */"); + puts(""); + size = 1U << 9; + printf(" static const code lenfix[%u] = {", size); + low = 0; + for (;;) { + if ((low % 7) == 0) printf("\n "); + printf("{%u,%u,%d}", (low & 127) == 99 ? 64 : state.lencode[low].op, + state.lencode[low].bits, state.lencode[low].val); + if (++low == size) break; + putchar(','); + } + puts("\n };"); + size = 1U << 5; + printf("\n static const code distfix[%u] = {", size); + low = 0; + for (;;) { + if ((low % 6) == 0) printf("\n "); + printf("{%u,%u,%d}", state.distcode[low].op, state.distcode[low].bits, + state.distcode[low].val); + if (++low == size) break; + putchar(','); + } + puts("\n };"); +} +#endif /* MAKEFIXED */ + +/* + Update the window with the last wsize (normally 32K) bytes written before + returning. If window does not exist yet, create it. This is only called + when a window is already in use, or when output has been written during this + inflate call, but the end of the deflate stream has not been reached yet. + It is also called to create a window for dictionary data when a dictionary + is loaded. + + Providing output buffers larger than 32K to inflate() should provide a speed + advantage, since only the last 32K of output is copied to the sliding window + upon return from inflate(), and since all distances after the first 32K of + output will fall in the output data, making match copies simpler and faster. + The advantage may be dependent on the size of the processor's data caches. + */ +local int updatewindow(z_streamp strm, const Bytef *end, unsigned copy) { + struct inflate_state FAR *state; + unsigned dist; + + state = (struct inflate_state FAR *)strm->state; + + /* if it hasn't been done already, allocate space for the window */ + if (state->window == Z_NULL) { + state->window = (unsigned char FAR *) + ZALLOC(strm, 1U << state->wbits, + sizeof(unsigned char)); + if (state->window == Z_NULL) return 1; + } + + /* if window not in use yet, initialize */ + if (state->wsize == 0) { + state->wsize = 1U << state->wbits; + state->wnext = 0; + state->whave = 0; + } + + /* copy state->wsize or less output bytes into the circular window */ + if (copy >= state->wsize) { + zmemcpy(state->window, end - state->wsize, state->wsize); + state->wnext = 0; + state->whave = state->wsize; + } + else { + dist = state->wsize - state->wnext; + if (dist > copy) dist = copy; + zmemcpy(state->window + state->wnext, end - copy, dist); + copy -= dist; + if (copy) { + zmemcpy(state->window, end - copy, copy); + state->wnext = copy; + state->whave = state->wsize; + } + else { + state->wnext += dist; + if (state->wnext == state->wsize) state->wnext = 0; + if (state->whave < state->wsize) state->whave += dist; + } + } + return 0; +} + +/* Macros for inflate(): */ + +/* check function to use adler32() for zlib or crc32() for gzip */ +#ifdef GUNZIP +# define UPDATE_CHECK(check, buf, len) \ + (state->flags ? crc32(check, buf, len) : adler32(check, buf, len)) +#else +# define UPDATE_CHECK(check, buf, len) adler32(check, buf, len) +#endif + +/* check macros for header crc */ +#ifdef GUNZIP +# define CRC2(check, word) \ + do { \ + hbuf[0] = (unsigned char)(word); \ + hbuf[1] = (unsigned char)((word) >> 8); \ + check = crc32(check, hbuf, 2); \ + } while (0) + +# define CRC4(check, word) \ + do { \ + hbuf[0] = (unsigned char)(word); \ + hbuf[1] = (unsigned char)((word) >> 8); \ + hbuf[2] = (unsigned char)((word) >> 16); \ + hbuf[3] = (unsigned char)((word) >> 24); \ + check = crc32(check, hbuf, 4); \ + } while (0) +#endif + +/* Load registers with state in inflate() for speed */ +#define LOAD() \ + do { \ + put = strm->next_out; \ + left = strm->avail_out; \ + next = strm->next_in; \ + have = strm->avail_in; \ + hold = state->hold; \ + bits = state->bits; \ + } while (0) + +/* Restore state from registers in inflate() */ +#define RESTORE() \ + do { \ + strm->next_out = put; \ + strm->avail_out = left; \ + strm->next_in = next; \ + strm->avail_in = have; \ + state->hold = hold; \ + state->bits = bits; \ + } while (0) + +/* Clear the input bit accumulator */ +#define INITBITS() \ + do { \ + hold = 0; \ + bits = 0; \ + } while (0) + +/* Get a byte of input into the bit accumulator, or return from inflate() + if there is no input available. */ +#define PULLBYTE() \ + do { \ + if (have == 0) goto inf_leave; \ + have--; \ + hold += (unsigned long)(*next++) << bits; \ + bits += 8; \ + } while (0) + +/* Assure that there are at least n bits in the bit accumulator. If there is + not enough available input to do that, then return from inflate(). */ +#define NEEDBITS(n) \ + do { \ + while (bits < (unsigned)(n)) \ + PULLBYTE(); \ + } while (0) + +/* Return the low n bits of the bit accumulator (n < 16) */ +#define BITS(n) \ + ((unsigned)hold & ((1U << (n)) - 1)) + +/* Remove n bits from the bit accumulator */ +#define DROPBITS(n) \ + do { \ + hold >>= (n); \ + bits -= (unsigned)(n); \ + } while (0) + +/* Remove zero to seven bits as needed to go to a byte boundary */ +#define BYTEBITS() \ + do { \ + hold >>= bits & 7; \ + bits -= bits & 7; \ + } while (0) + +/* + inflate() uses a state machine to process as much input data and generate as + much output data as possible before returning. The state machine is + structured roughly as follows: + + for (;;) switch (state) { + ... + case STATEn: + if (not enough input data or output space to make progress) + return; + ... make progress ... + state = STATEm; + break; + ... + } + + so when inflate() is called again, the same case is attempted again, and + if the appropriate resources are provided, the machine proceeds to the + next state. The NEEDBITS() macro is usually the way the state evaluates + whether it can proceed or should return. NEEDBITS() does the return if + the requested bits are not available. The typical use of the BITS macros + is: + + NEEDBITS(n); + ... do something with BITS(n) ... + DROPBITS(n); + + where NEEDBITS(n) either returns from inflate() if there isn't enough + input left to load n bits into the accumulator, or it continues. BITS(n) + gives the low n bits in the accumulator. When done, DROPBITS(n) drops + the low n bits off the accumulator. INITBITS() clears the accumulator + and sets the number of available bits to zero. BYTEBITS() discards just + enough bits to put the accumulator on a byte boundary. After BYTEBITS() + and a NEEDBITS(8), then BITS(8) would return the next byte in the stream. + + NEEDBITS(n) uses PULLBYTE() to get an available byte of input, or to return + if there is no input available. The decoding of variable length codes uses + PULLBYTE() directly in order to pull just enough bytes to decode the next + code, and no more. + + Some states loop until they get enough input, making sure that enough + state information is maintained to continue the loop where it left off + if NEEDBITS() returns in the loop. For example, want, need, and keep + would all have to actually be part of the saved state in case NEEDBITS() + returns: + + case STATEw: + while (want < need) { + NEEDBITS(n); + keep[want++] = BITS(n); + DROPBITS(n); + } + state = STATEx; + case STATEx: + + As shown above, if the next state is also the next case, then the break + is omitted. + + A state may also return if there is not enough output space available to + complete that state. Those states are copying stored data, writing a + literal byte, and copying a matching string. + + When returning, a "goto inf_leave" is used to update the total counters, + update the check value, and determine whether any progress has been made + during that inflate() call in order to return the proper return code. + Progress is defined as a change in either strm->avail_in or strm->avail_out. + When there is a window, goto inf_leave will update the window with the last + output written. If a goto inf_leave occurs in the middle of decompression + and there is no window currently, goto inf_leave will create one and copy + output to the window for the next call of inflate(). + + In this implementation, the flush parameter of inflate() only affects the + return code (per zlib.h). inflate() always writes as much as possible to + strm->next_out, given the space available and the provided input--the effect + documented in zlib.h of Z_SYNC_FLUSH. Furthermore, inflate() always defers + the allocation of and copying into a sliding window until necessary, which + provides the effect documented in zlib.h for Z_FINISH when the entire input + stream available. So the only thing the flush parameter actually does is: + when flush is set to Z_FINISH, inflate() cannot return Z_OK. Instead it + will return Z_BUF_ERROR if it has not reached the end of the stream. + */ + +int ZEXPORT inflate(z_streamp strm, int flush) { + struct inflate_state FAR *state; + z_const unsigned char FAR *next; /* next input */ + unsigned char FAR *put; /* next output */ + unsigned have, left; /* available input and output */ + unsigned long hold; /* bit buffer */ + unsigned bits; /* bits in bit buffer */ + unsigned in, out; /* save starting available input and output */ + unsigned copy; /* number of stored or match bytes to copy */ + unsigned char FAR *from; /* where to copy match bytes from */ + code here; /* current decoding table entry */ + code last; /* parent table entry */ + unsigned len; /* length to copy for repeats, bits to drop */ + int ret; /* return code */ +#ifdef GUNZIP + unsigned char hbuf[4]; /* buffer for gzip header crc calculation */ +#endif + static const unsigned short order[19] = /* permutation of code lengths */ + {16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15}; + + if (inflateStateCheck(strm) || strm->next_out == Z_NULL || + (strm->next_in == Z_NULL && strm->avail_in != 0)) + return Z_STREAM_ERROR; + + state = (struct inflate_state FAR *)strm->state; + if (state->mode == TYPE) state->mode = TYPEDO; /* skip check */ + LOAD(); + in = have; + out = left; + ret = Z_OK; + for (;;) + switch (state->mode) { + case HEAD: + if (state->wrap == 0) { + state->mode = TYPEDO; + break; + } + NEEDBITS(16); +#ifdef GUNZIP + if ((state->wrap & 2) && hold == 0x8b1f) { /* gzip header */ + if (state->wbits == 0) + state->wbits = 15; + state->check = crc32(0L, Z_NULL, 0); + CRC2(state->check, hold); + INITBITS(); + state->mode = FLAGS; + break; + } + if (state->head != Z_NULL) + state->head->done = -1; + if (!(state->wrap & 1) || /* check if zlib header allowed */ +#else + if ( +#endif + ((BITS(8) << 8) + (hold >> 8)) % 31) { + strm->msg = (char *)"incorrect header check"; + state->mode = BAD; + break; + } + if (BITS(4) != Z_DEFLATED) { + strm->msg = (char *)"unknown compression method"; + state->mode = BAD; + break; + } + DROPBITS(4); + len = BITS(4) + 8; + if (state->wbits == 0) + state->wbits = len; + if (len > 15 || len > state->wbits) { + strm->msg = (char *)"invalid window size"; + state->mode = BAD; + break; + } + state->dmax = 1U << len; + state->flags = 0; /* indicate zlib header */ + Tracev((stderr, "inflate: zlib header ok\n")); + strm->adler = state->check = adler32(0L, Z_NULL, 0); + state->mode = hold & 0x200 ? DICTID : TYPE; + INITBITS(); + break; +#ifdef GUNZIP + case FLAGS: + NEEDBITS(16); + state->flags = (int)(hold); + if ((state->flags & 0xff) != Z_DEFLATED) { + strm->msg = (char *)"unknown compression method"; + state->mode = BAD; + break; + } + if (state->flags & 0xe000) { + strm->msg = (char *)"unknown header flags set"; + state->mode = BAD; + break; + } + if (state->head != Z_NULL) + state->head->text = (int)((hold >> 8) & 1); + if ((state->flags & 0x0200) && (state->wrap & 4)) + CRC2(state->check, hold); + INITBITS(); + state->mode = TIME; + /* fallthrough */ + case TIME: + NEEDBITS(32); + if (state->head != Z_NULL) + state->head->time = hold; + if ((state->flags & 0x0200) && (state->wrap & 4)) + CRC4(state->check, hold); + INITBITS(); + state->mode = OS; + /* fallthrough */ + case OS: + NEEDBITS(16); + if (state->head != Z_NULL) { + state->head->xflags = (int)(hold & 0xff); + state->head->os = (int)(hold >> 8); + } + if ((state->flags & 0x0200) && (state->wrap & 4)) + CRC2(state->check, hold); + INITBITS(); + state->mode = EXLEN; + /* fallthrough */ + case EXLEN: + if (state->flags & 0x0400) { + NEEDBITS(16); + state->length = (unsigned)(hold); + if (state->head != Z_NULL) + state->head->extra_len = (unsigned)hold; + if ((state->flags & 0x0200) && (state->wrap & 4)) + CRC2(state->check, hold); + INITBITS(); + } + else if (state->head != Z_NULL) + state->head->extra = Z_NULL; + state->mode = EXTRA; + /* fallthrough */ + case EXTRA: + if (state->flags & 0x0400) { + copy = state->length; + if (copy > have) copy = have; + if (copy) { + if (state->head != Z_NULL && + state->head->extra != Z_NULL && + (len = state->head->extra_len - state->length) < + state->head->extra_max) { + zmemcpy(state->head->extra + len, next, + len + copy > state->head->extra_max ? + state->head->extra_max - len : copy); + } + if ((state->flags & 0x0200) && (state->wrap & 4)) + state->check = crc32(state->check, next, copy); + have -= copy; + next += copy; + state->length -= copy; + } + if (state->length) goto inf_leave; + } + state->length = 0; + state->mode = NAME; + /* fallthrough */ + case NAME: + if (state->flags & 0x0800) { + if (have == 0) goto inf_leave; + copy = 0; + do { + len = (unsigned)(next[copy++]); + if (state->head != Z_NULL && + state->head->name != Z_NULL && + state->length < state->head->name_max) + state->head->name[state->length++] = (Bytef)len; + } while (len && copy < have); + if ((state->flags & 0x0200) && (state->wrap & 4)) + state->check = crc32(state->check, next, copy); + have -= copy; + next += copy; + if (len) goto inf_leave; + } + else if (state->head != Z_NULL) + state->head->name = Z_NULL; + state->length = 0; + state->mode = COMMENT; + /* fallthrough */ + case COMMENT: + if (state->flags & 0x1000) { + if (have == 0) goto inf_leave; + copy = 0; + do { + len = (unsigned)(next[copy++]); + if (state->head != Z_NULL && + state->head->comment != Z_NULL && + state->length < state->head->comm_max) + state->head->comment[state->length++] = (Bytef)len; + } while (len && copy < have); + if ((state->flags & 0x0200) && (state->wrap & 4)) + state->check = crc32(state->check, next, copy); + have -= copy; + next += copy; + if (len) goto inf_leave; + } + else if (state->head != Z_NULL) + state->head->comment = Z_NULL; + state->mode = HCRC; + /* fallthrough */ + case HCRC: + if (state->flags & 0x0200) { + NEEDBITS(16); + if ((state->wrap & 4) && hold != (state->check & 0xffff)) { + strm->msg = (char *)"header crc mismatch"; + state->mode = BAD; + break; + } + INITBITS(); + } + if (state->head != Z_NULL) { + state->head->hcrc = (int)((state->flags >> 9) & 1); + state->head->done = 1; + } + strm->adler = state->check = crc32(0L, Z_NULL, 0); + state->mode = TYPE; + break; +#endif + case DICTID: + NEEDBITS(32); + strm->adler = state->check = ZSWAP32(hold); + INITBITS(); + state->mode = DICT; + /* fallthrough */ + case DICT: + if (state->havedict == 0) { + RESTORE(); + return Z_NEED_DICT; + } + strm->adler = state->check = adler32(0L, Z_NULL, 0); + state->mode = TYPE; + /* fallthrough */ + case TYPE: + if (flush == Z_BLOCK || flush == Z_TREES) goto inf_leave; + /* fallthrough */ + case TYPEDO: + if (state->last) { + BYTEBITS(); + state->mode = CHECK; + break; + } + NEEDBITS(3); + state->last = BITS(1); + DROPBITS(1); + switch (BITS(2)) { + case 0: /* stored block */ + Tracev((stderr, "inflate: stored block%s\n", + state->last ? " (last)" : "")); + state->mode = STORED; + break; + case 1: /* fixed block */ + fixedtables(state); + Tracev((stderr, "inflate: fixed codes block%s\n", + state->last ? " (last)" : "")); + state->mode = LEN_; /* decode codes */ + if (flush == Z_TREES) { + DROPBITS(2); + goto inf_leave; + } + break; + case 2: /* dynamic block */ + Tracev((stderr, "inflate: dynamic codes block%s\n", + state->last ? " (last)" : "")); + state->mode = TABLE; + break; + case 3: + strm->msg = (char *)"invalid block type"; + state->mode = BAD; + } + DROPBITS(2); + break; + case STORED: + BYTEBITS(); /* go to byte boundary */ + NEEDBITS(32); + if ((hold & 0xffff) != ((hold >> 16) ^ 0xffff)) { + strm->msg = (char *)"invalid stored block lengths"; + state->mode = BAD; + break; + } + state->length = (unsigned)hold & 0xffff; + Tracev((stderr, "inflate: stored length %u\n", + state->length)); + INITBITS(); + state->mode = COPY_; + if (flush == Z_TREES) goto inf_leave; + /* fallthrough */ + case COPY_: + state->mode = COPY; + /* fallthrough */ + case COPY: + copy = state->length; + if (copy) { + if (copy > have) copy = have; + if (copy > left) copy = left; + if (copy == 0) goto inf_leave; + zmemcpy(put, next, copy); + have -= copy; + next += copy; + left -= copy; + put += copy; + state->length -= copy; + break; + } + Tracev((stderr, "inflate: stored end\n")); + state->mode = TYPE; + break; + case TABLE: + NEEDBITS(14); + state->nlen = BITS(5) + 257; + DROPBITS(5); + state->ndist = BITS(5) + 1; + DROPBITS(5); + state->ncode = BITS(4) + 4; + DROPBITS(4); +#ifndef PKZIP_BUG_WORKAROUND + if (state->nlen > 286 || state->ndist > 30) { + strm->msg = (char *)"too many length or distance symbols"; + state->mode = BAD; + break; + } +#endif + Tracev((stderr, "inflate: table sizes ok\n")); + state->have = 0; + state->mode = LENLENS; + /* fallthrough */ + case LENLENS: + while (state->have < state->ncode) { + NEEDBITS(3); + state->lens[order[state->have++]] = (unsigned short)BITS(3); + DROPBITS(3); + } + while (state->have < 19) + state->lens[order[state->have++]] = 0; + state->next = state->codes; + state->lencode = (const code FAR *)(state->next); + state->lenbits = 7; + ret = inflate_table(CODES, state->lens, 19, &(state->next), + &(state->lenbits), state->work); + if (ret) { + strm->msg = (char *)"invalid code lengths set"; + state->mode = BAD; + break; + } + Tracev((stderr, "inflate: code lengths ok\n")); + state->have = 0; + state->mode = CODELENS; + /* fallthrough */ + case CODELENS: + while (state->have < state->nlen + state->ndist) { + for (;;) { + here = state->lencode[BITS(state->lenbits)]; + if ((unsigned)(here.bits) <= bits) break; + PULLBYTE(); + } + if (here.val < 16) { + DROPBITS(here.bits); + state->lens[state->have++] = here.val; + } + else { + if (here.val == 16) { + NEEDBITS(here.bits + 2); + DROPBITS(here.bits); + if (state->have == 0) { + strm->msg = (char *)"invalid bit length repeat"; + state->mode = BAD; + break; + } + len = state->lens[state->have - 1]; + copy = 3 + BITS(2); + DROPBITS(2); + } + else if (here.val == 17) { + NEEDBITS(here.bits + 3); + DROPBITS(here.bits); + len = 0; + copy = 3 + BITS(3); + DROPBITS(3); + } + else { + NEEDBITS(here.bits + 7); + DROPBITS(here.bits); + len = 0; + copy = 11 + BITS(7); + DROPBITS(7); + } + if (state->have + copy > state->nlen + state->ndist) { + strm->msg = (char *)"invalid bit length repeat"; + state->mode = BAD; + break; + } + while (copy--) + state->lens[state->have++] = (unsigned short)len; + } + } + + /* handle error breaks in while */ + if (state->mode == BAD) break; + + /* check for end-of-block code (better have one) */ + if (state->lens[256] == 0) { + strm->msg = (char *)"invalid code -- missing end-of-block"; + state->mode = BAD; + break; + } + + /* build code tables -- note: do not change the lenbits or distbits + values here (9 and 6) without reading the comments in inftrees.h + concerning the ENOUGH constants, which depend on those values */ + state->next = state->codes; + state->lencode = (const code FAR *)(state->next); + state->lenbits = 9; + ret = inflate_table(LENS, state->lens, state->nlen, &(state->next), + &(state->lenbits), state->work); + if (ret) { + strm->msg = (char *)"invalid literal/lengths set"; + state->mode = BAD; + break; + } + state->distcode = (const code FAR *)(state->next); + state->distbits = 6; + ret = inflate_table(DISTS, state->lens + state->nlen, state->ndist, + &(state->next), &(state->distbits), state->work); + if (ret) { + strm->msg = (char *)"invalid distances set"; + state->mode = BAD; + break; + } + Tracev((stderr, "inflate: codes ok\n")); + state->mode = LEN_; + if (flush == Z_TREES) goto inf_leave; + /* fallthrough */ + case LEN_: + state->mode = LEN; + /* fallthrough */ + case LEN: + if (have >= 6 && left >= 258) { + RESTORE(); + inflate_fast(strm, out); + LOAD(); + if (state->mode == TYPE) + state->back = -1; + break; + } + state->back = 0; + for (;;) { + here = state->lencode[BITS(state->lenbits)]; + if ((unsigned)(here.bits) <= bits) break; + PULLBYTE(); + } + if (here.op && (here.op & 0xf0) == 0) { + last = here; + for (;;) { + here = state->lencode[last.val + + (BITS(last.bits + last.op) >> last.bits)]; + if ((unsigned)(last.bits + here.bits) <= bits) break; + PULLBYTE(); + } + DROPBITS(last.bits); + state->back += last.bits; + } + DROPBITS(here.bits); + state->back += here.bits; + state->length = (unsigned)here.val; + if ((int)(here.op) == 0) { + Tracevv((stderr, here.val >= 0x20 && here.val < 0x7f ? + "inflate: literal '%c'\n" : + "inflate: literal 0x%02x\n", here.val)); + state->mode = LIT; + break; + } + if (here.op & 32) { + Tracevv((stderr, "inflate: end of block\n")); + state->back = -1; + state->mode = TYPE; + break; + } + if (here.op & 64) { + strm->msg = (char *)"invalid literal/length code"; + state->mode = BAD; + break; + } + state->extra = (unsigned)(here.op) & 15; + state->mode = LENEXT; + /* fallthrough */ + case LENEXT: + if (state->extra) { + NEEDBITS(state->extra); + state->length += BITS(state->extra); + DROPBITS(state->extra); + state->back += state->extra; + } + Tracevv((stderr, "inflate: length %u\n", state->length)); + state->was = state->length; + state->mode = DIST; + /* fallthrough */ + case DIST: + for (;;) { + here = state->distcode[BITS(state->distbits)]; + if ((unsigned)(here.bits) <= bits) break; + PULLBYTE(); + } + if ((here.op & 0xf0) == 0) { + last = here; + for (;;) { + here = state->distcode[last.val + + (BITS(last.bits + last.op) >> last.bits)]; + if ((unsigned)(last.bits + here.bits) <= bits) break; + PULLBYTE(); + } + DROPBITS(last.bits); + state->back += last.bits; + } + DROPBITS(here.bits); + state->back += here.bits; + if (here.op & 64) { + strm->msg = (char *)"invalid distance code"; + state->mode = BAD; + break; + } + state->offset = (unsigned)here.val; + state->extra = (unsigned)(here.op) & 15; + state->mode = DISTEXT; + /* fallthrough */ + case DISTEXT: + if (state->extra) { + NEEDBITS(state->extra); + state->offset += BITS(state->extra); + DROPBITS(state->extra); + state->back += state->extra; + } +#ifdef INFLATE_STRICT + if (state->offset > state->dmax) { + strm->msg = (char *)"invalid distance too far back"; + state->mode = BAD; + break; + } +#endif + Tracevv((stderr, "inflate: distance %u\n", state->offset)); + state->mode = MATCH; + /* fallthrough */ + case MATCH: + if (left == 0) goto inf_leave; + copy = out - left; + if (state->offset > copy) { /* copy from window */ + copy = state->offset - copy; + if (copy > state->whave) { + if (state->sane) { + strm->msg = (char *)"invalid distance too far back"; + state->mode = BAD; + break; + } +#ifdef INFLATE_ALLOW_INVALID_DISTANCE_TOOFAR_ARRR + Trace((stderr, "inflate.c too far\n")); + copy -= state->whave; + if (copy > state->length) copy = state->length; + if (copy > left) copy = left; + left -= copy; + state->length -= copy; + do { + *put++ = 0; + } while (--copy); + if (state->length == 0) state->mode = LEN; + break; +#endif + } + if (copy > state->wnext) { + copy -= state->wnext; + from = state->window + (state->wsize - copy); + } + else + from = state->window + (state->wnext - copy); + if (copy > state->length) copy = state->length; + } + else { /* copy from output */ + from = put - state->offset; + copy = state->length; + } + if (copy > left) copy = left; + left -= copy; + state->length -= copy; + do { + *put++ = *from++; + } while (--copy); + if (state->length == 0) state->mode = LEN; + break; + case LIT: + if (left == 0) goto inf_leave; + *put++ = (unsigned char)(state->length); + left--; + state->mode = LEN; + break; + case CHECK: + if (state->wrap) { + NEEDBITS(32); + out -= left; + strm->total_out += out; + state->total += out; + if ((state->wrap & 4) && out) + strm->adler = state->check = + UPDATE_CHECK(state->check, put - out, out); + out = left; + if ((state->wrap & 4) && ( +#ifdef GUNZIP + state->flags ? hold : +#endif + ZSWAP32(hold)) != state->check) { + strm->msg = (char *)"incorrect data check"; + state->mode = BAD; + break; + } + INITBITS(); + Tracev((stderr, "inflate: check matches trailer\n")); + } +#ifdef GUNZIP + state->mode = LENGTH; + /* fallthrough */ + case LENGTH: + if (state->wrap && state->flags) { + NEEDBITS(32); + if ((state->wrap & 4) && hold != (state->total & 0xffffffff)) { + strm->msg = (char *)"incorrect length check"; + state->mode = BAD; + break; + } + INITBITS(); + Tracev((stderr, "inflate: length matches trailer\n")); + } +#endif + state->mode = DONE; + /* fallthrough */ + case DONE: + ret = Z_STREAM_END; + goto inf_leave; + case BAD: + ret = Z_DATA_ERROR; + goto inf_leave; + case MEM: + return Z_MEM_ERROR; + case SYNC: + /* fallthrough */ + default: + return Z_STREAM_ERROR; + } + + /* + Return from inflate(), updating the total counts and the check value. + If there was no progress during the inflate() call, return a buffer + error. Call updatewindow() to create and/or update the window state. + Note: a memory error from inflate() is non-recoverable. + */ + inf_leave: + RESTORE(); + if (state->wsize || (out != strm->avail_out && state->mode < BAD && + (state->mode < CHECK || flush != Z_FINISH))) + if (updatewindow(strm, strm->next_out, out - strm->avail_out)) { + state->mode = MEM; + return Z_MEM_ERROR; + } + in -= strm->avail_in; + out -= strm->avail_out; + strm->total_in += in; + strm->total_out += out; + state->total += out; + if ((state->wrap & 4) && out) + strm->adler = state->check = + UPDATE_CHECK(state->check, strm->next_out - out, out); + strm->data_type = (int)state->bits + (state->last ? 64 : 0) + + (state->mode == TYPE ? 128 : 0) + + (state->mode == LEN_ || state->mode == COPY_ ? 256 : 0); + if (((in == 0 && out == 0) || flush == Z_FINISH) && ret == Z_OK) + ret = Z_BUF_ERROR; + return ret; +} + +int ZEXPORT inflateEnd(z_streamp strm) { + struct inflate_state FAR *state; + if (inflateStateCheck(strm)) + return Z_STREAM_ERROR; + state = (struct inflate_state FAR *)strm->state; + if (state->window != Z_NULL) ZFREE(strm, state->window); + ZFREE(strm, strm->state); + strm->state = Z_NULL; + Tracev((stderr, "inflate: end\n")); + return Z_OK; +} + +int ZEXPORT inflateGetDictionary(z_streamp strm, Bytef *dictionary, + uInt *dictLength) { + struct inflate_state FAR *state; + + /* check state */ + if (inflateStateCheck(strm)) return Z_STREAM_ERROR; + state = (struct inflate_state FAR *)strm->state; + + /* copy dictionary */ + if (state->whave && dictionary != Z_NULL) { + zmemcpy(dictionary, state->window + state->wnext, + state->whave - state->wnext); + zmemcpy(dictionary + state->whave - state->wnext, + state->window, state->wnext); + } + if (dictLength != Z_NULL) + *dictLength = state->whave; + return Z_OK; +} + +int ZEXPORT inflateSetDictionary(z_streamp strm, const Bytef *dictionary, + uInt dictLength) { + struct inflate_state FAR *state; + unsigned long dictid; + int ret; + + /* check state */ + if (inflateStateCheck(strm)) return Z_STREAM_ERROR; + state = (struct inflate_state FAR *)strm->state; + if (state->wrap != 0 && state->mode != DICT) + return Z_STREAM_ERROR; + + /* check for correct dictionary identifier */ + if (state->mode == DICT) { + dictid = adler32(0L, Z_NULL, 0); + dictid = adler32(dictid, dictionary, dictLength); + if (dictid != state->check) + return Z_DATA_ERROR; + } + + /* copy dictionary to window using updatewindow(), which will amend the + existing dictionary if appropriate */ + ret = updatewindow(strm, dictionary + dictLength, dictLength); + if (ret) { + state->mode = MEM; + return Z_MEM_ERROR; + } + state->havedict = 1; + Tracev((stderr, "inflate: dictionary set\n")); + return Z_OK; +} + +int ZEXPORT inflateGetHeader(z_streamp strm, gz_headerp head) { + struct inflate_state FAR *state; + + /* check state */ + if (inflateStateCheck(strm)) return Z_STREAM_ERROR; + state = (struct inflate_state FAR *)strm->state; + if ((state->wrap & 2) == 0) return Z_STREAM_ERROR; + + /* save header structure */ + state->head = head; + head->done = 0; + return Z_OK; +} + +/* + Search buf[0..len-1] for the pattern: 0, 0, 0xff, 0xff. Return when found + or when out of input. When called, *have is the number of pattern bytes + found in order so far, in 0..3. On return *have is updated to the new + state. If on return *have equals four, then the pattern was found and the + return value is how many bytes were read including the last byte of the + pattern. If *have is less than four, then the pattern has not been found + yet and the return value is len. In the latter case, syncsearch() can be + called again with more data and the *have state. *have is initialized to + zero for the first call. + */ +local unsigned syncsearch(unsigned FAR *have, const unsigned char FAR *buf, + unsigned len) { + unsigned got; + unsigned next; + + got = *have; + next = 0; + while (next < len && got < 4) { + if ((int)(buf[next]) == (got < 2 ? 0 : 0xff)) + got++; + else if (buf[next]) + got = 0; + else + got = 4 - got; + next++; + } + *have = got; + return next; +} + +int ZEXPORT inflateSync(z_streamp strm) { + unsigned len; /* number of bytes to look at or looked at */ + int flags; /* temporary to save header status */ + unsigned long in, out; /* temporary to save total_in and total_out */ + unsigned char buf[4]; /* to restore bit buffer to byte string */ + struct inflate_state FAR *state; + + /* check parameters */ + if (inflateStateCheck(strm)) return Z_STREAM_ERROR; + state = (struct inflate_state FAR *)strm->state; + if (strm->avail_in == 0 && state->bits < 8) return Z_BUF_ERROR; + + /* if first time, start search in bit buffer */ + if (state->mode != SYNC) { + state->mode = SYNC; + state->hold >>= state->bits & 7; + state->bits -= state->bits & 7; + len = 0; + while (state->bits >= 8) { + buf[len++] = (unsigned char)(state->hold); + state->hold >>= 8; + state->bits -= 8; + } + state->have = 0; + syncsearch(&(state->have), buf, len); + } + + /* search available input */ + len = syncsearch(&(state->have), strm->next_in, strm->avail_in); + strm->avail_in -= len; + strm->next_in += len; + strm->total_in += len; + + /* return no joy or set up to restart inflate() on a new block */ + if (state->have != 4) return Z_DATA_ERROR; + if (state->flags == -1) + state->wrap = 0; /* if no header yet, treat as raw */ + else + state->wrap &= ~4; /* no point in computing a check value now */ + flags = state->flags; + in = strm->total_in; out = strm->total_out; + inflateReset(strm); + strm->total_in = in; strm->total_out = out; + state->flags = flags; + state->mode = TYPE; + return Z_OK; +} + +/* + Returns true if inflate is currently at the end of a block generated by + Z_SYNC_FLUSH or Z_FULL_FLUSH. This function is used by one PPP + implementation to provide an additional safety check. PPP uses + Z_SYNC_FLUSH but removes the length bytes of the resulting empty stored + block. When decompressing, PPP checks that at the end of input packet, + inflate is waiting for these length bytes. + */ +int ZEXPORT inflateSyncPoint(z_streamp strm) { + struct inflate_state FAR *state; + + if (inflateStateCheck(strm)) return Z_STREAM_ERROR; + state = (struct inflate_state FAR *)strm->state; + return state->mode == STORED && state->bits == 0; +} + +int ZEXPORT inflateCopy(z_streamp dest, z_streamp source) { + struct inflate_state FAR *state; + struct inflate_state FAR *copy; + unsigned char FAR *window; + unsigned wsize; + + /* check input */ + if (inflateStateCheck(source) || dest == Z_NULL) + return Z_STREAM_ERROR; + state = (struct inflate_state FAR *)source->state; + + /* allocate space */ + copy = (struct inflate_state FAR *) + ZALLOC(source, 1, sizeof(struct inflate_state)); + if (copy == Z_NULL) return Z_MEM_ERROR; + window = Z_NULL; + if (state->window != Z_NULL) { + window = (unsigned char FAR *) + ZALLOC(source, 1U << state->wbits, sizeof(unsigned char)); + if (window == Z_NULL) { + ZFREE(source, copy); + return Z_MEM_ERROR; + } + } + + /* copy state */ + zmemcpy((voidpf)dest, (voidpf)source, sizeof(z_stream)); + zmemcpy((voidpf)copy, (voidpf)state, sizeof(struct inflate_state)); + copy->strm = dest; + if (state->lencode >= state->codes && + state->lencode <= state->codes + ENOUGH - 1) { + copy->lencode = copy->codes + (state->lencode - state->codes); + copy->distcode = copy->codes + (state->distcode - state->codes); + } + copy->next = copy->codes + (state->next - state->codes); + if (window != Z_NULL) { + wsize = 1U << state->wbits; + zmemcpy(window, state->window, wsize); + } + copy->window = window; + dest->state = (struct internal_state FAR *)copy; + return Z_OK; +} + +int ZEXPORT inflateUndermine(z_streamp strm, int subvert) { + struct inflate_state FAR *state; + + if (inflateStateCheck(strm)) return Z_STREAM_ERROR; + state = (struct inflate_state FAR *)strm->state; +#ifdef INFLATE_ALLOW_INVALID_DISTANCE_TOOFAR_ARRR + state->sane = !subvert; + return Z_OK; +#else + (void)subvert; + state->sane = 1; + return Z_DATA_ERROR; +#endif +} + +int ZEXPORT inflateValidate(z_streamp strm, int check) { + struct inflate_state FAR *state; + + if (inflateStateCheck(strm)) return Z_STREAM_ERROR; + state = (struct inflate_state FAR *)strm->state; + if (check && state->wrap) + state->wrap |= 4; + else + state->wrap &= ~4; + return Z_OK; +} + +long ZEXPORT inflateMark(z_streamp strm) { + struct inflate_state FAR *state; + + if (inflateStateCheck(strm)) + return -(1L << 16); + state = (struct inflate_state FAR *)strm->state; + return (long)(((unsigned long)((long)state->back)) << 16) + + (state->mode == COPY ? state->length : + (state->mode == MATCH ? state->was - state->length : 0)); +} + +unsigned long ZEXPORT inflateCodesUsed(z_streamp strm) { + struct inflate_state FAR *state; + if (inflateStateCheck(strm)) return (unsigned long)-1; + state = (struct inflate_state FAR *)strm->state; + return (unsigned long)(state->next - state->codes); +} diff --git a/thirdparty/zlib-1.3.1/inflate.h b/thirdparty/zlib-1.3.1/inflate.h new file mode 100644 index 0000000..f127b6b --- /dev/null +++ b/thirdparty/zlib-1.3.1/inflate.h @@ -0,0 +1,126 @@ +/* inflate.h -- internal inflate state definition + * Copyright (C) 1995-2019 Mark Adler + * For conditions of distribution and use, see copyright notice in zlib.h + */ + +/* WARNING: this file should *not* be used by applications. It is + part of the implementation of the compression library and is + subject to change. Applications should only use zlib.h. + */ + +/* define NO_GZIP when compiling if you want to disable gzip header and + trailer decoding by inflate(). NO_GZIP would be used to avoid linking in + the crc code when it is not needed. For shared libraries, gzip decoding + should be left enabled. */ +#ifndef NO_GZIP +# define GUNZIP +#endif + +/* Possible inflate modes between inflate() calls */ +typedef enum { + HEAD = 16180, /* i: waiting for magic header */ + FLAGS, /* i: waiting for method and flags (gzip) */ + TIME, /* i: waiting for modification time (gzip) */ + OS, /* i: waiting for extra flags and operating system (gzip) */ + EXLEN, /* i: waiting for extra length (gzip) */ + EXTRA, /* i: waiting for extra bytes (gzip) */ + NAME, /* i: waiting for end of file name (gzip) */ + COMMENT, /* i: waiting for end of comment (gzip) */ + HCRC, /* i: waiting for header crc (gzip) */ + DICTID, /* i: waiting for dictionary check value */ + DICT, /* waiting for inflateSetDictionary() call */ + TYPE, /* i: waiting for type bits, including last-flag bit */ + TYPEDO, /* i: same, but skip check to exit inflate on new block */ + STORED, /* i: waiting for stored size (length and complement) */ + COPY_, /* i/o: same as COPY below, but only first time in */ + COPY, /* i/o: waiting for input or output to copy stored block */ + TABLE, /* i: waiting for dynamic block table lengths */ + LENLENS, /* i: waiting for code length code lengths */ + CODELENS, /* i: waiting for length/lit and distance code lengths */ + LEN_, /* i: same as LEN below, but only first time in */ + LEN, /* i: waiting for length/lit/eob code */ + LENEXT, /* i: waiting for length extra bits */ + DIST, /* i: waiting for distance code */ + DISTEXT, /* i: waiting for distance extra bits */ + MATCH, /* o: waiting for output space to copy string */ + LIT, /* o: waiting for output space to write literal */ + CHECK, /* i: waiting for 32-bit check value */ + LENGTH, /* i: waiting for 32-bit length (gzip) */ + DONE, /* finished check, done -- remain here until reset */ + BAD, /* got a data error -- remain here until reset */ + MEM, /* got an inflate() memory error -- remain here until reset */ + SYNC /* looking for synchronization bytes to restart inflate() */ +} inflate_mode; + +/* + State transitions between above modes - + + (most modes can go to BAD or MEM on error -- not shown for clarity) + + Process header: + HEAD -> (gzip) or (zlib) or (raw) + (gzip) -> FLAGS -> TIME -> OS -> EXLEN -> EXTRA -> NAME -> COMMENT -> + HCRC -> TYPE + (zlib) -> DICTID or TYPE + DICTID -> DICT -> TYPE + (raw) -> TYPEDO + Read deflate blocks: + TYPE -> TYPEDO -> STORED or TABLE or LEN_ or CHECK + STORED -> COPY_ -> COPY -> TYPE + TABLE -> LENLENS -> CODELENS -> LEN_ + LEN_ -> LEN + Read deflate codes in fixed or dynamic block: + LEN -> LENEXT or LIT or TYPE + LENEXT -> DIST -> DISTEXT -> MATCH -> LEN + LIT -> LEN + Process trailer: + CHECK -> LENGTH -> DONE + */ + +/* State maintained between inflate() calls -- approximately 7K bytes, not + including the allocated sliding window, which is up to 32K bytes. */ +struct inflate_state { + z_streamp strm; /* pointer back to this zlib stream */ + inflate_mode mode; /* current inflate mode */ + int last; /* true if processing last block */ + int wrap; /* bit 0 true for zlib, bit 1 true for gzip, + bit 2 true to validate check value */ + int havedict; /* true if dictionary provided */ + int flags; /* gzip header method and flags, 0 if zlib, or + -1 if raw or no header yet */ + unsigned dmax; /* zlib header max distance (INFLATE_STRICT) */ + unsigned long check; /* protected copy of check value */ + unsigned long total; /* protected copy of output count */ + gz_headerp head; /* where to save gzip header information */ + /* sliding window */ + unsigned wbits; /* log base 2 of requested window size */ + unsigned wsize; /* window size or zero if not using window */ + unsigned whave; /* valid bytes in the window */ + unsigned wnext; /* window write index */ + unsigned char FAR *window; /* allocated sliding window, if needed */ + /* bit accumulator */ + unsigned long hold; /* input bit accumulator */ + unsigned bits; /* number of bits in "in" */ + /* for string and stored block copying */ + unsigned length; /* literal or length of data to copy */ + unsigned offset; /* distance back to copy string from */ + /* for table and code decoding */ + unsigned extra; /* extra bits needed */ + /* fixed and dynamic code tables */ + code const FAR *lencode; /* starting table for length/literal codes */ + code const FAR *distcode; /* starting table for distance codes */ + unsigned lenbits; /* index bits for lencode */ + unsigned distbits; /* index bits for distcode */ + /* dynamic table building */ + unsigned ncode; /* number of code length code lengths */ + unsigned nlen; /* number of length code lengths */ + unsigned ndist; /* number of distance code lengths */ + unsigned have; /* number of code lengths in lens[] */ + code FAR *next; /* next available space in codes[] */ + unsigned short lens[320]; /* temporary storage for code lengths */ + unsigned short work[288]; /* work area for code table building */ + code codes[ENOUGH]; /* space for code tables */ + int sane; /* if false, allow invalid distance too far */ + int back; /* bits back of last unprocessed length/lit */ + unsigned was; /* initial length of match */ +}; diff --git a/thirdparty/zlib-1.3.1/inftrees.c b/thirdparty/zlib-1.3.1/inftrees.c new file mode 100644 index 0000000..98cfe16 --- /dev/null +++ b/thirdparty/zlib-1.3.1/inftrees.c @@ -0,0 +1,299 @@ +/* inftrees.c -- generate Huffman trees for efficient decoding + * Copyright (C) 1995-2024 Mark Adler + * For conditions of distribution and use, see copyright notice in zlib.h + */ + +#include "zutil.h" +#include "inftrees.h" + +#define MAXBITS 15 + +const char inflate_copyright[] = + " inflate 1.3.1 Copyright 1995-2024 Mark Adler "; +/* + If you use the zlib library in a product, an acknowledgment is welcome + in the documentation of your product. If for some reason you cannot + include such an acknowledgment, I would appreciate that you keep this + copyright string in the executable of your product. + */ + +/* + Build a set of tables to decode the provided canonical Huffman code. + The code lengths are lens[0..codes-1]. The result starts at *table, + whose indices are 0..2^bits-1. work is a writable array of at least + lens shorts, which is used as a work area. type is the type of code + to be generated, CODES, LENS, or DISTS. On return, zero is success, + -1 is an invalid code, and +1 means that ENOUGH isn't enough. table + on return points to the next available entry's address. bits is the + requested root table index bits, and on return it is the actual root + table index bits. It will differ if the request is greater than the + longest code or if it is less than the shortest code. + */ +int ZLIB_INTERNAL inflate_table(codetype type, unsigned short FAR *lens, + unsigned codes, code FAR * FAR *table, + unsigned FAR *bits, unsigned short FAR *work) { + unsigned len; /* a code's length in bits */ + unsigned sym; /* index of code symbols */ + unsigned min, max; /* minimum and maximum code lengths */ + unsigned root; /* number of index bits for root table */ + unsigned curr; /* number of index bits for current table */ + unsigned drop; /* code bits to drop for sub-table */ + int left; /* number of prefix codes available */ + unsigned used; /* code entries in table used */ + unsigned huff; /* Huffman code */ + unsigned incr; /* for incrementing code, index */ + unsigned fill; /* index for replicating entries */ + unsigned low; /* low bits for current root entry */ + unsigned mask; /* mask for low root bits */ + code here; /* table entry for duplication */ + code FAR *next; /* next available space in table */ + const unsigned short FAR *base; /* base value table to use */ + const unsigned short FAR *extra; /* extra bits table to use */ + unsigned match; /* use base and extra for symbol >= match */ + unsigned short count[MAXBITS+1]; /* number of codes of each length */ + unsigned short offs[MAXBITS+1]; /* offsets in table for each length */ + static const unsigned short lbase[31] = { /* Length codes 257..285 base */ + 3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 23, 27, 31, + 35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258, 0, 0}; + static const unsigned short lext[31] = { /* Length codes 257..285 extra */ + 16, 16, 16, 16, 16, 16, 16, 16, 17, 17, 17, 17, 18, 18, 18, 18, + 19, 19, 19, 19, 20, 20, 20, 20, 21, 21, 21, 21, 16, 203, 77}; + static const unsigned short dbase[32] = { /* Distance codes 0..29 base */ + 1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193, + 257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145, + 8193, 12289, 16385, 24577, 0, 0}; + static const unsigned short dext[32] = { /* Distance codes 0..29 extra */ + 16, 16, 16, 16, 17, 17, 18, 18, 19, 19, 20, 20, 21, 21, 22, 22, + 23, 23, 24, 24, 25, 25, 26, 26, 27, 27, + 28, 28, 29, 29, 64, 64}; + + /* + Process a set of code lengths to create a canonical Huffman code. The + code lengths are lens[0..codes-1]. Each length corresponds to the + symbols 0..codes-1. The Huffman code is generated by first sorting the + symbols by length from short to long, and retaining the symbol order + for codes with equal lengths. Then the code starts with all zero bits + for the first code of the shortest length, and the codes are integer + increments for the same length, and zeros are appended as the length + increases. For the deflate format, these bits are stored backwards + from their more natural integer increment ordering, and so when the + decoding tables are built in the large loop below, the integer codes + are incremented backwards. + + This routine assumes, but does not check, that all of the entries in + lens[] are in the range 0..MAXBITS. The caller must assure this. + 1..MAXBITS is interpreted as that code length. zero means that that + symbol does not occur in this code. + + The codes are sorted by computing a count of codes for each length, + creating from that a table of starting indices for each length in the + sorted table, and then entering the symbols in order in the sorted + table. The sorted table is work[], with that space being provided by + the caller. + + The length counts are used for other purposes as well, i.e. finding + the minimum and maximum length codes, determining if there are any + codes at all, checking for a valid set of lengths, and looking ahead + at length counts to determine sub-table sizes when building the + decoding tables. + */ + + /* accumulate lengths for codes (assumes lens[] all in 0..MAXBITS) */ + for (len = 0; len <= MAXBITS; len++) + count[len] = 0; + for (sym = 0; sym < codes; sym++) + count[lens[sym]]++; + + /* bound code lengths, force root to be within code lengths */ + root = *bits; + for (max = MAXBITS; max >= 1; max--) + if (count[max] != 0) break; + if (root > max) root = max; + if (max == 0) { /* no symbols to code at all */ + here.op = (unsigned char)64; /* invalid code marker */ + here.bits = (unsigned char)1; + here.val = (unsigned short)0; + *(*table)++ = here; /* make a table to force an error */ + *(*table)++ = here; + *bits = 1; + return 0; /* no symbols, but wait for decoding to report error */ + } + for (min = 1; min < max; min++) + if (count[min] != 0) break; + if (root < min) root = min; + + /* check for an over-subscribed or incomplete set of lengths */ + left = 1; + for (len = 1; len <= MAXBITS; len++) { + left <<= 1; + left -= count[len]; + if (left < 0) return -1; /* over-subscribed */ + } + if (left > 0 && (type == CODES || max != 1)) + return -1; /* incomplete set */ + + /* generate offsets into symbol table for each length for sorting */ + offs[1] = 0; + for (len = 1; len < MAXBITS; len++) + offs[len + 1] = offs[len] + count[len]; + + /* sort symbols by length, by symbol order within each length */ + for (sym = 0; sym < codes; sym++) + if (lens[sym] != 0) work[offs[lens[sym]]++] = (unsigned short)sym; + + /* + Create and fill in decoding tables. In this loop, the table being + filled is at next and has curr index bits. The code being used is huff + with length len. That code is converted to an index by dropping drop + bits off of the bottom. For codes where len is less than drop + curr, + those top drop + curr - len bits are incremented through all values to + fill the table with replicated entries. + + root is the number of index bits for the root table. When len exceeds + root, sub-tables are created pointed to by the root entry with an index + of the low root bits of huff. This is saved in low to check for when a + new sub-table should be started. drop is zero when the root table is + being filled, and drop is root when sub-tables are being filled. + + When a new sub-table is needed, it is necessary to look ahead in the + code lengths to determine what size sub-table is needed. The length + counts are used for this, and so count[] is decremented as codes are + entered in the tables. + + used keeps track of how many table entries have been allocated from the + provided *table space. It is checked for LENS and DIST tables against + the constants ENOUGH_LENS and ENOUGH_DISTS to guard against changes in + the initial root table size constants. See the comments in inftrees.h + for more information. + + sym increments through all symbols, and the loop terminates when + all codes of length max, i.e. all codes, have been processed. This + routine permits incomplete codes, so another loop after this one fills + in the rest of the decoding tables with invalid code markers. + */ + + /* set up for code type */ + switch (type) { + case CODES: + base = extra = work; /* dummy value--not used */ + match = 20; + break; + case LENS: + base = lbase; + extra = lext; + match = 257; + break; + default: /* DISTS */ + base = dbase; + extra = dext; + match = 0; + } + + /* initialize state for loop */ + huff = 0; /* starting code */ + sym = 0; /* starting code symbol */ + len = min; /* starting code length */ + next = *table; /* current table to fill in */ + curr = root; /* current table index bits */ + drop = 0; /* current bits to drop from code for index */ + low = (unsigned)(-1); /* trigger new sub-table when len > root */ + used = 1U << root; /* use root table entries */ + mask = used - 1; /* mask for comparing low */ + + /* check available table space */ + if ((type == LENS && used > ENOUGH_LENS) || + (type == DISTS && used > ENOUGH_DISTS)) + return 1; + + /* process all codes and make table entries */ + for (;;) { + /* create table entry */ + here.bits = (unsigned char)(len - drop); + if (work[sym] + 1U < match) { + here.op = (unsigned char)0; + here.val = work[sym]; + } + else if (work[sym] >= match) { + here.op = (unsigned char)(extra[work[sym] - match]); + here.val = base[work[sym] - match]; + } + else { + here.op = (unsigned char)(32 + 64); /* end of block */ + here.val = 0; + } + + /* replicate for those indices with low len bits equal to huff */ + incr = 1U << (len - drop); + fill = 1U << curr; + min = fill; /* save offset to next table */ + do { + fill -= incr; + next[(huff >> drop) + fill] = here; + } while (fill != 0); + + /* backwards increment the len-bit code huff */ + incr = 1U << (len - 1); + while (huff & incr) + incr >>= 1; + if (incr != 0) { + huff &= incr - 1; + huff += incr; + } + else + huff = 0; + + /* go to next symbol, update count, len */ + sym++; + if (--(count[len]) == 0) { + if (len == max) break; + len = lens[work[sym]]; + } + + /* create new sub-table if needed */ + if (len > root && (huff & mask) != low) { + /* if first time, transition to sub-tables */ + if (drop == 0) + drop = root; + + /* increment past last table */ + next += min; /* here min is 1 << curr */ + + /* determine length of next table */ + curr = len - drop; + left = (int)(1 << curr); + while (curr + drop < max) { + left -= count[curr + drop]; + if (left <= 0) break; + curr++; + left <<= 1; + } + + /* check for enough space */ + used += 1U << curr; + if ((type == LENS && used > ENOUGH_LENS) || + (type == DISTS && used > ENOUGH_DISTS)) + return 1; + + /* point entry in root table to sub-table */ + low = huff & mask; + (*table)[low].op = (unsigned char)curr; + (*table)[low].bits = (unsigned char)root; + (*table)[low].val = (unsigned short)(next - *table); + } + } + + /* fill in remaining table entry if code is incomplete (guaranteed to have + at most one remaining entry, since if the code is incomplete, the + maximum code length that was allowed to get this far is one bit) */ + if (huff != 0) { + here.op = (unsigned char)64; /* invalid code marker */ + here.bits = (unsigned char)(len - drop); + here.val = (unsigned short)0; + next[huff] = here; + } + + /* set return parameters */ + *table += used; + *bits = root; + return 0; +} diff --git a/thirdparty/zlib-1.3.1/inftrees.h b/thirdparty/zlib-1.3.1/inftrees.h new file mode 100644 index 0000000..396f74b --- /dev/null +++ b/thirdparty/zlib-1.3.1/inftrees.h @@ -0,0 +1,62 @@ +/* inftrees.h -- header to use inftrees.c + * Copyright (C) 1995-2005, 2010 Mark Adler + * For conditions of distribution and use, see copyright notice in zlib.h + */ + +/* WARNING: this file should *not* be used by applications. It is + part of the implementation of the compression library and is + subject to change. Applications should only use zlib.h. + */ + +/* Structure for decoding tables. Each entry provides either the + information needed to do the operation requested by the code that + indexed that table entry, or it provides a pointer to another + table that indexes more bits of the code. op indicates whether + the entry is a pointer to another table, a literal, a length or + distance, an end-of-block, or an invalid code. For a table + pointer, the low four bits of op is the number of index bits of + that table. For a length or distance, the low four bits of op + is the number of extra bits to get after the code. bits is + the number of bits in this code or part of the code to drop off + of the bit buffer. val is the actual byte to output in the case + of a literal, the base length or distance, or the offset from + the current table to the next table. Each entry is four bytes. */ +typedef struct { + unsigned char op; /* operation, extra bits, table bits */ + unsigned char bits; /* bits in this part of the code */ + unsigned short val; /* offset in table or code value */ +} code; + +/* op values as set by inflate_table(): + 00000000 - literal + 0000tttt - table link, tttt != 0 is the number of table index bits + 0001eeee - length or distance, eeee is the number of extra bits + 01100000 - end of block + 01000000 - invalid code + */ + +/* Maximum size of the dynamic table. The maximum number of code structures is + 1444, which is the sum of 852 for literal/length codes and 592 for distance + codes. These values were found by exhaustive searches using the program + examples/enough.c found in the zlib distribution. The arguments to that + program are the number of symbols, the initial root table size, and the + maximum bit length of a code. "enough 286 9 15" for literal/length codes + returns 852, and "enough 30 6 15" for distance codes returns 592. The + initial root table size (9 or 6) is found in the fifth argument of the + inflate_table() calls in inflate.c and infback.c. If the root table size is + changed, then these maximum sizes would be need to be recalculated and + updated. */ +#define ENOUGH_LENS 852 +#define ENOUGH_DISTS 592 +#define ENOUGH (ENOUGH_LENS+ENOUGH_DISTS) + +/* Type of code to build for inflate_table() */ +typedef enum { + CODES, + LENS, + DISTS +} codetype; + +int ZLIB_INTERNAL inflate_table(codetype type, unsigned short FAR *lens, + unsigned codes, code FAR * FAR *table, + unsigned FAR *bits, unsigned short FAR *work); diff --git a/thirdparty/zlib-1.3.1/install/include/zconf.h b/thirdparty/zlib-1.3.1/install/include/zconf.h new file mode 100644 index 0000000..cf801d3 --- /dev/null +++ b/thirdparty/zlib-1.3.1/install/include/zconf.h @@ -0,0 +1,545 @@ +/* zconf.h -- configuration of the zlib compression library + * Copyright (C) 1995-2024 Jean-loup Gailly, Mark Adler + * For conditions of distribution and use, see copyright notice in zlib.h + */ + +/* @(#) $Id$ */ + +#ifndef ZCONF_H +#define ZCONF_H +/* #undef Z_PREFIX */ +#define Z_HAVE_UNISTD_H + +/* + * If you *really* need a unique prefix for all types and library functions, + * compile with -DZ_PREFIX. The "standard" zlib should be compiled without it. + * Even better than compiling with -DZ_PREFIX would be to use configure to set + * this permanently in zconf.h using "./configure --zprefix". + */ +#ifdef Z_PREFIX /* may be set to #if 1 by ./configure */ +# define Z_PREFIX_SET + +/* all linked symbols and init macros */ +# define _dist_code z__dist_code +# define _length_code z__length_code +# define _tr_align z__tr_align +# define _tr_flush_bits z__tr_flush_bits +# define _tr_flush_block z__tr_flush_block +# define _tr_init z__tr_init +# define _tr_stored_block z__tr_stored_block +# define _tr_tally z__tr_tally +# define adler32 z_adler32 +# define adler32_combine z_adler32_combine +# define adler32_combine64 z_adler32_combine64 +# define adler32_z z_adler32_z +# ifndef Z_SOLO +# define compress z_compress +# define compress2 z_compress2 +# define compressBound z_compressBound +# endif +# define crc32 z_crc32 +# define crc32_combine z_crc32_combine +# define crc32_combine64 z_crc32_combine64 +# define crc32_combine_gen z_crc32_combine_gen +# define crc32_combine_gen64 z_crc32_combine_gen64 +# define crc32_combine_op z_crc32_combine_op +# define crc32_z z_crc32_z +# define deflate z_deflate +# define deflateBound z_deflateBound +# define deflateCopy z_deflateCopy +# define deflateEnd z_deflateEnd +# define deflateGetDictionary z_deflateGetDictionary +# define deflateInit z_deflateInit +# define deflateInit2 z_deflateInit2 +# define deflateInit2_ z_deflateInit2_ +# define deflateInit_ z_deflateInit_ +# define deflateParams z_deflateParams +# define deflatePending z_deflatePending +# define deflatePrime z_deflatePrime +# define deflateReset z_deflateReset +# define deflateResetKeep z_deflateResetKeep +# define deflateSetDictionary z_deflateSetDictionary +# define deflateSetHeader z_deflateSetHeader +# define deflateTune z_deflateTune +# define deflate_copyright z_deflate_copyright +# define get_crc_table z_get_crc_table +# ifndef Z_SOLO +# define gz_error z_gz_error +# define gz_intmax z_gz_intmax +# define gz_strwinerror z_gz_strwinerror +# define gzbuffer z_gzbuffer +# define gzclearerr z_gzclearerr +# define gzclose z_gzclose +# define gzclose_r z_gzclose_r +# define gzclose_w z_gzclose_w +# define gzdirect z_gzdirect +# define gzdopen z_gzdopen +# define gzeof z_gzeof +# define gzerror z_gzerror +# define gzflush z_gzflush +# define gzfread z_gzfread +# define gzfwrite z_gzfwrite +# define gzgetc z_gzgetc +# define gzgetc_ z_gzgetc_ +# define gzgets z_gzgets +# define gzoffset z_gzoffset +# define gzoffset64 z_gzoffset64 +# define gzopen z_gzopen +# define gzopen64 z_gzopen64 +# ifdef _WIN32 +# define gzopen_w z_gzopen_w +# endif +# define gzprintf z_gzprintf +# define gzputc z_gzputc +# define gzputs z_gzputs +# define gzread z_gzread +# define gzrewind z_gzrewind +# define gzseek z_gzseek +# define gzseek64 z_gzseek64 +# define gzsetparams z_gzsetparams +# define gztell z_gztell +# define gztell64 z_gztell64 +# define gzungetc z_gzungetc +# define gzvprintf z_gzvprintf +# define gzwrite z_gzwrite +# endif +# define inflate z_inflate +# define inflateBack z_inflateBack +# define inflateBackEnd z_inflateBackEnd +# define inflateBackInit z_inflateBackInit +# define inflateBackInit_ z_inflateBackInit_ +# define inflateCodesUsed z_inflateCodesUsed +# define inflateCopy z_inflateCopy +# define inflateEnd z_inflateEnd +# define inflateGetDictionary z_inflateGetDictionary +# define inflateGetHeader z_inflateGetHeader +# define inflateInit z_inflateInit +# define inflateInit2 z_inflateInit2 +# define inflateInit2_ z_inflateInit2_ +# define inflateInit_ z_inflateInit_ +# define inflateMark z_inflateMark +# define inflatePrime z_inflatePrime +# define inflateReset z_inflateReset +# define inflateReset2 z_inflateReset2 +# define inflateResetKeep z_inflateResetKeep +# define inflateSetDictionary z_inflateSetDictionary +# define inflateSync z_inflateSync +# define inflateSyncPoint z_inflateSyncPoint +# define inflateUndermine z_inflateUndermine +# define inflateValidate z_inflateValidate +# define inflate_copyright z_inflate_copyright +# define inflate_fast z_inflate_fast +# define inflate_table z_inflate_table +# ifndef Z_SOLO +# define uncompress z_uncompress +# define uncompress2 z_uncompress2 +# endif +# define zError z_zError +# ifndef Z_SOLO +# define zcalloc z_zcalloc +# define zcfree z_zcfree +# endif +# define zlibCompileFlags z_zlibCompileFlags +# define zlibVersion z_zlibVersion + +/* all zlib typedefs in zlib.h and zconf.h */ +# define Byte z_Byte +# define Bytef z_Bytef +# define alloc_func z_alloc_func +# define charf z_charf +# define free_func z_free_func +# ifndef Z_SOLO +# define gzFile z_gzFile +# endif +# define gz_header z_gz_header +# define gz_headerp z_gz_headerp +# define in_func z_in_func +# define intf z_intf +# define out_func z_out_func +# define uInt z_uInt +# define uIntf z_uIntf +# define uLong z_uLong +# define uLongf z_uLongf +# define voidp z_voidp +# define voidpc z_voidpc +# define voidpf z_voidpf + +/* all zlib structs in zlib.h and zconf.h */ +# define gz_header_s z_gz_header_s +# define internal_state z_internal_state + +#endif + +#if defined(__MSDOS__) && !defined(MSDOS) +# define MSDOS +#endif +#if (defined(OS_2) || defined(__OS2__)) && !defined(OS2) +# define OS2 +#endif +#if defined(_WINDOWS) && !defined(WINDOWS) +# define WINDOWS +#endif +#if defined(_WIN32) || defined(_WIN32_WCE) || defined(__WIN32__) +# ifndef WIN32 +# define WIN32 +# endif +#endif +#if (defined(MSDOS) || defined(OS2) || defined(WINDOWS)) && !defined(WIN32) +# if !defined(__GNUC__) && !defined(__FLAT__) && !defined(__386__) +# ifndef SYS16BIT +# define SYS16BIT +# endif +# endif +#endif + +/* + * Compile with -DMAXSEG_64K if the alloc function cannot allocate more + * than 64k bytes at a time (needed on systems with 16-bit int). + */ +#ifdef SYS16BIT +# define MAXSEG_64K +#endif +#ifdef MSDOS +# define UNALIGNED_OK +#endif + +#ifdef __STDC_VERSION__ +# ifndef STDC +# define STDC +# endif +# if __STDC_VERSION__ >= 199901L +# ifndef STDC99 +# define STDC99 +# endif +# endif +#endif +#if !defined(STDC) && (defined(__STDC__) || defined(__cplusplus)) +# define STDC +#endif +#if !defined(STDC) && (defined(__GNUC__) || defined(__BORLANDC__)) +# define STDC +#endif +#if !defined(STDC) && (defined(MSDOS) || defined(WINDOWS) || defined(WIN32)) +# define STDC +#endif +#if !defined(STDC) && (defined(OS2) || defined(__HOS_AIX__)) +# define STDC +#endif + +#if defined(__OS400__) && !defined(STDC) /* iSeries (formerly AS/400). */ +# define STDC +#endif + +#ifndef STDC +# ifndef const /* cannot use !defined(STDC) && !defined(const) on Mac */ +# define const /* note: need a more gentle solution here */ +# endif +#endif + +#if defined(ZLIB_CONST) && !defined(z_const) +# define z_const const +#else +# define z_const +#endif + +#ifdef Z_SOLO +# ifdef _WIN64 + typedef unsigned long long z_size_t; +# else + typedef unsigned long z_size_t; +# endif +#else +# define z_longlong long long +# if defined(NO_SIZE_T) + typedef unsigned NO_SIZE_T z_size_t; +# elif defined(STDC) +# include + typedef size_t z_size_t; +# else + typedef unsigned long z_size_t; +# endif +# undef z_longlong +#endif + +/* Maximum value for memLevel in deflateInit2 */ +#ifndef MAX_MEM_LEVEL +# ifdef MAXSEG_64K +# define MAX_MEM_LEVEL 8 +# else +# define MAX_MEM_LEVEL 9 +# endif +#endif + +/* Maximum value for windowBits in deflateInit2 and inflateInit2. + * WARNING: reducing MAX_WBITS makes minigzip unable to extract .gz files + * created by gzip. (Files created by minigzip can still be extracted by + * gzip.) + */ +#ifndef MAX_WBITS +# define MAX_WBITS 15 /* 32K LZ77 window */ +#endif + +/* The memory requirements for deflate are (in bytes): + (1 << (windowBits+2)) + (1 << (memLevel+9)) + that is: 128K for windowBits=15 + 128K for memLevel = 8 (default values) + plus a few kilobytes for small objects. For example, if you want to reduce + the default memory requirements from 256K to 128K, compile with + make CFLAGS="-O -DMAX_WBITS=14 -DMAX_MEM_LEVEL=7" + Of course this will generally degrade compression (there's no free lunch). + + The memory requirements for inflate are (in bytes) 1 << windowBits + that is, 32K for windowBits=15 (default value) plus about 7 kilobytes + for small objects. +*/ + + /* Type declarations */ + +#ifndef OF /* function prototypes */ +# ifdef STDC +# define OF(args) args +# else +# define OF(args) () +# endif +#endif + +/* The following definitions for FAR are needed only for MSDOS mixed + * model programming (small or medium model with some far allocations). + * This was tested only with MSC; for other MSDOS compilers you may have + * to define NO_MEMCPY in zutil.h. If you don't need the mixed model, + * just define FAR to be empty. + */ +#ifdef SYS16BIT +# if defined(M_I86SM) || defined(M_I86MM) + /* MSC small or medium model */ +# define SMALL_MEDIUM +# ifdef _MSC_VER +# define FAR _far +# else +# define FAR far +# endif +# endif +# if (defined(__SMALL__) || defined(__MEDIUM__)) + /* Turbo C small or medium model */ +# define SMALL_MEDIUM +# ifdef __BORLANDC__ +# define FAR _far +# else +# define FAR far +# endif +# endif +#endif + +#if defined(WINDOWS) || defined(WIN32) + /* If building or using zlib as a DLL, define ZLIB_DLL. + * This is not mandatory, but it offers a little performance increase. + */ +# ifdef ZLIB_DLL +# if defined(WIN32) && (!defined(__BORLANDC__) || (__BORLANDC__ >= 0x500)) +# ifdef ZLIB_INTERNAL +# define ZEXTERN extern __declspec(dllexport) +# else +# define ZEXTERN extern __declspec(dllimport) +# endif +# endif +# endif /* ZLIB_DLL */ + /* If building or using zlib with the WINAPI/WINAPIV calling convention, + * define ZLIB_WINAPI. + * Caution: the standard ZLIB1.DLL is NOT compiled using ZLIB_WINAPI. + */ +# ifdef ZLIB_WINAPI +# ifdef FAR +# undef FAR +# endif +# ifndef WIN32_LEAN_AND_MEAN +# define WIN32_LEAN_AND_MEAN +# endif +# include + /* No need for _export, use ZLIB.DEF instead. */ + /* For complete Windows compatibility, use WINAPI, not __stdcall. */ +# define ZEXPORT WINAPI +# ifdef WIN32 +# define ZEXPORTVA WINAPIV +# else +# define ZEXPORTVA FAR CDECL +# endif +# endif +#endif + +#if defined (__BEOS__) +# ifdef ZLIB_DLL +# ifdef ZLIB_INTERNAL +# define ZEXPORT __declspec(dllexport) +# define ZEXPORTVA __declspec(dllexport) +# else +# define ZEXPORT __declspec(dllimport) +# define ZEXPORTVA __declspec(dllimport) +# endif +# endif +#endif + +#ifndef ZEXTERN +# define ZEXTERN extern +#endif +#ifndef ZEXPORT +# define ZEXPORT +#endif +#ifndef ZEXPORTVA +# define ZEXPORTVA +#endif + +#ifndef FAR +# define FAR +#endif + +#if !defined(__MACTYPES__) +typedef unsigned char Byte; /* 8 bits */ +#endif +typedef unsigned int uInt; /* 16 bits or more */ +typedef unsigned long uLong; /* 32 bits or more */ + +#ifdef SMALL_MEDIUM + /* Borland C/C++ and some old MSC versions ignore FAR inside typedef */ +# define Bytef Byte FAR +#else + typedef Byte FAR Bytef; +#endif +typedef char FAR charf; +typedef int FAR intf; +typedef uInt FAR uIntf; +typedef uLong FAR uLongf; + +#ifdef STDC + typedef void const *voidpc; + typedef void FAR *voidpf; + typedef void *voidp; +#else + typedef Byte const *voidpc; + typedef Byte FAR *voidpf; + typedef Byte *voidp; +#endif + +#if !defined(Z_U4) && !defined(Z_SOLO) && defined(STDC) +# include +# if (UINT_MAX == 0xffffffffUL) +# define Z_U4 unsigned +# elif (ULONG_MAX == 0xffffffffUL) +# define Z_U4 unsigned long +# elif (USHRT_MAX == 0xffffffffUL) +# define Z_U4 unsigned short +# endif +#endif + +#ifdef Z_U4 + typedef Z_U4 z_crc_t; +#else + typedef unsigned long z_crc_t; +#endif + +#ifdef HAVE_UNISTD_H /* may be set to #if 1 by ./configure */ +# define Z_HAVE_UNISTD_H +#endif + +#ifdef HAVE_STDARG_H /* may be set to #if 1 by ./configure */ +# define Z_HAVE_STDARG_H +#endif + +#ifdef STDC +# ifndef Z_SOLO +# include /* for off_t */ +# endif +#endif + +#if defined(STDC) || defined(Z_HAVE_STDARG_H) +# ifndef Z_SOLO +# include /* for va_list */ +# endif +#endif + +#ifdef _WIN32 +# ifndef Z_SOLO +# include /* for wchar_t */ +# endif +#endif + +/* a little trick to accommodate both "#define _LARGEFILE64_SOURCE" and + * "#define _LARGEFILE64_SOURCE 1" as requesting 64-bit operations, (even + * though the former does not conform to the LFS document), but considering + * both "#undef _LARGEFILE64_SOURCE" and "#define _LARGEFILE64_SOURCE 0" as + * equivalently requesting no 64-bit operations + */ +#if defined(_LARGEFILE64_SOURCE) && -_LARGEFILE64_SOURCE - -1 == 1 +# undef _LARGEFILE64_SOURCE +#endif + +#ifndef Z_HAVE_UNISTD_H +# ifdef __WATCOMC__ +# define Z_HAVE_UNISTD_H +# endif +#endif +#ifndef Z_HAVE_UNISTD_H +# if defined(_LARGEFILE64_SOURCE) && !defined(_WIN32) +# define Z_HAVE_UNISTD_H +# endif +#endif +#ifndef Z_SOLO +# if defined(Z_HAVE_UNISTD_H) +# include /* for SEEK_*, off_t, and _LFS64_LARGEFILE */ +# ifdef VMS +# include /* for off_t */ +# endif +# ifndef z_off_t +# define z_off_t off_t +# endif +# endif +#endif + +#if defined(_LFS64_LARGEFILE) && _LFS64_LARGEFILE-0 +# define Z_LFS64 +#endif + +#if defined(_LARGEFILE64_SOURCE) && defined(Z_LFS64) +# define Z_LARGE64 +#endif + +#if defined(_FILE_OFFSET_BITS) && _FILE_OFFSET_BITS-0 == 64 && defined(Z_LFS64) +# define Z_WANT64 +#endif + +#if !defined(SEEK_SET) && !defined(Z_SOLO) +# define SEEK_SET 0 /* Seek from beginning of file. */ +# define SEEK_CUR 1 /* Seek from current position. */ +# define SEEK_END 2 /* Set file pointer to EOF plus "offset" */ +#endif + +#ifndef z_off_t +# define z_off_t long +#endif + +#if !defined(_WIN32) && defined(Z_LARGE64) +# define z_off64_t off64_t +#else +# if defined(_WIN32) && !defined(__GNUC__) +# define z_off64_t __int64 +# else +# define z_off64_t z_off_t +# endif +#endif + +/* MVS linker does not support external names larger than 8 bytes */ +#if defined(__MVS__) + #pragma map(deflateInit_,"DEIN") + #pragma map(deflateInit2_,"DEIN2") + #pragma map(deflateEnd,"DEEND") + #pragma map(deflateBound,"DEBND") + #pragma map(inflateInit_,"ININ") + #pragma map(inflateInit2_,"ININ2") + #pragma map(inflateEnd,"INEND") + #pragma map(inflateSync,"INSY") + #pragma map(inflateSetDictionary,"INSEDI") + #pragma map(compressBound,"CMBND") + #pragma map(inflate_table,"INTABL") + #pragma map(inflate_fast,"INFA") + #pragma map(inflate_copyright,"INCOPY") +#endif + +#endif /* ZCONF_H */ diff --git a/thirdparty/zlib-1.3.1/install/include/zlib.h b/thirdparty/zlib-1.3.1/install/include/zlib.h new file mode 100644 index 0000000..8d4b932 --- /dev/null +++ b/thirdparty/zlib-1.3.1/install/include/zlib.h @@ -0,0 +1,1938 @@ +/* zlib.h -- interface of the 'zlib' general purpose compression library + version 1.3.1, January 22nd, 2024 + + Copyright (C) 1995-2024 Jean-loup Gailly and Mark Adler + + This software is provided 'as-is', without any express or implied + warranty. In no event will the authors be held liable for any damages + arising from the use of this software. + + Permission is granted to anyone to use this software for any purpose, + including commercial applications, and to alter it and redistribute it + freely, subject to the following restrictions: + + 1. The origin of this software must not be misrepresented; you must not + claim that you wrote the original software. If you use this software + in a product, an acknowledgment in the product documentation would be + appreciated but is not required. + 2. Altered source versions must be plainly marked as such, and must not be + misrepresented as being the original software. + 3. This notice may not be removed or altered from any source distribution. + + Jean-loup Gailly Mark Adler + jloup@gzip.org madler@alumni.caltech.edu + + + The data format used by the zlib library is described by RFCs (Request for + Comments) 1950 to 1952 in the files http://tools.ietf.org/html/rfc1950 + (zlib format), rfc1951 (deflate format) and rfc1952 (gzip format). +*/ + +#ifndef ZLIB_H +#define ZLIB_H + +#include "zconf.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#define ZLIB_VERSION "1.3.1" +#define ZLIB_VERNUM 0x1310 +#define ZLIB_VER_MAJOR 1 +#define ZLIB_VER_MINOR 3 +#define ZLIB_VER_REVISION 1 +#define ZLIB_VER_SUBREVISION 0 + +/* + The 'zlib' compression library provides in-memory compression and + decompression functions, including integrity checks of the uncompressed data. + This version of the library supports only one compression method (deflation) + but other algorithms will be added later and will have the same stream + interface. + + Compression can be done in a single step if the buffers are large enough, + or can be done by repeated calls of the compression function. In the latter + case, the application must provide more input and/or consume the output + (providing more output space) before each call. + + The compressed data format used by default by the in-memory functions is + the zlib format, which is a zlib wrapper documented in RFC 1950, wrapped + around a deflate stream, which is itself documented in RFC 1951. + + The library also supports reading and writing files in gzip (.gz) format + with an interface similar to that of stdio using the functions that start + with "gz". The gzip format is different from the zlib format. gzip is a + gzip wrapper, documented in RFC 1952, wrapped around a deflate stream. + + This library can optionally read and write gzip and raw deflate streams in + memory as well. + + The zlib format was designed to be compact and fast for use in memory + and on communications channels. The gzip format was designed for single- + file compression on file systems, has a larger header than zlib to maintain + directory information, and uses a different, slower check method than zlib. + + The library does not install any signal handler. The decoder checks + the consistency of the compressed data, so the library should never crash + even in the case of corrupted input. +*/ + +typedef voidpf (*alloc_func)(voidpf opaque, uInt items, uInt size); +typedef void (*free_func)(voidpf opaque, voidpf address); + +struct internal_state; + +typedef struct z_stream_s { + z_const Bytef *next_in; /* next input byte */ + uInt avail_in; /* number of bytes available at next_in */ + uLong total_in; /* total number of input bytes read so far */ + + Bytef *next_out; /* next output byte will go here */ + uInt avail_out; /* remaining free space at next_out */ + uLong total_out; /* total number of bytes output so far */ + + z_const char *msg; /* last error message, NULL if no error */ + struct internal_state FAR *state; /* not visible by applications */ + + alloc_func zalloc; /* used to allocate the internal state */ + free_func zfree; /* used to free the internal state */ + voidpf opaque; /* private data object passed to zalloc and zfree */ + + int data_type; /* best guess about the data type: binary or text + for deflate, or the decoding state for inflate */ + uLong adler; /* Adler-32 or CRC-32 value of the uncompressed data */ + uLong reserved; /* reserved for future use */ +} z_stream; + +typedef z_stream FAR *z_streamp; + +/* + gzip header information passed to and from zlib routines. See RFC 1952 + for more details on the meanings of these fields. +*/ +typedef struct gz_header_s { + int text; /* true if compressed data believed to be text */ + uLong time; /* modification time */ + int xflags; /* extra flags (not used when writing a gzip file) */ + int os; /* operating system */ + Bytef *extra; /* pointer to extra field or Z_NULL if none */ + uInt extra_len; /* extra field length (valid if extra != Z_NULL) */ + uInt extra_max; /* space at extra (only when reading header) */ + Bytef *name; /* pointer to zero-terminated file name or Z_NULL */ + uInt name_max; /* space at name (only when reading header) */ + Bytef *comment; /* pointer to zero-terminated comment or Z_NULL */ + uInt comm_max; /* space at comment (only when reading header) */ + int hcrc; /* true if there was or will be a header crc */ + int done; /* true when done reading gzip header (not used + when writing a gzip file) */ +} gz_header; + +typedef gz_header FAR *gz_headerp; + +/* + The application must update next_in and avail_in when avail_in has dropped + to zero. It must update next_out and avail_out when avail_out has dropped + to zero. The application must initialize zalloc, zfree and opaque before + calling the init function. All other fields are set by the compression + library and must not be updated by the application. + + The opaque value provided by the application will be passed as the first + parameter for calls of zalloc and zfree. This can be useful for custom + memory management. The compression library attaches no meaning to the + opaque value. + + zalloc must return Z_NULL if there is not enough memory for the object. + If zlib is used in a multi-threaded application, zalloc and zfree must be + thread safe. In that case, zlib is thread-safe. When zalloc and zfree are + Z_NULL on entry to the initialization function, they are set to internal + routines that use the standard library functions malloc() and free(). + + On 16-bit systems, the functions zalloc and zfree must be able to allocate + exactly 65536 bytes, but will not be required to allocate more than this if + the symbol MAXSEG_64K is defined (see zconf.h). WARNING: On MSDOS, pointers + returned by zalloc for objects of exactly 65536 bytes *must* have their + offset normalized to zero. The default allocation function provided by this + library ensures this (see zutil.c). To reduce memory requirements and avoid + any allocation of 64K objects, at the expense of compression ratio, compile + the library with -DMAX_WBITS=14 (see zconf.h). + + The fields total_in and total_out can be used for statistics or progress + reports. After compression, total_in holds the total size of the + uncompressed data and may be saved for use by the decompressor (particularly + if the decompressor wants to decompress everything in a single step). +*/ + + /* constants */ + +#define Z_NO_FLUSH 0 +#define Z_PARTIAL_FLUSH 1 +#define Z_SYNC_FLUSH 2 +#define Z_FULL_FLUSH 3 +#define Z_FINISH 4 +#define Z_BLOCK 5 +#define Z_TREES 6 +/* Allowed flush values; see deflate() and inflate() below for details */ + +#define Z_OK 0 +#define Z_STREAM_END 1 +#define Z_NEED_DICT 2 +#define Z_ERRNO (-1) +#define Z_STREAM_ERROR (-2) +#define Z_DATA_ERROR (-3) +#define Z_MEM_ERROR (-4) +#define Z_BUF_ERROR (-5) +#define Z_VERSION_ERROR (-6) +/* Return codes for the compression/decompression functions. Negative values + * are errors, positive values are used for special but normal events. + */ + +#define Z_NO_COMPRESSION 0 +#define Z_BEST_SPEED 1 +#define Z_BEST_COMPRESSION 9 +#define Z_DEFAULT_COMPRESSION (-1) +/* compression levels */ + +#define Z_FILTERED 1 +#define Z_HUFFMAN_ONLY 2 +#define Z_RLE 3 +#define Z_FIXED 4 +#define Z_DEFAULT_STRATEGY 0 +/* compression strategy; see deflateInit2() below for details */ + +#define Z_BINARY 0 +#define Z_TEXT 1 +#define Z_ASCII Z_TEXT /* for compatibility with 1.2.2 and earlier */ +#define Z_UNKNOWN 2 +/* Possible values of the data_type field for deflate() */ + +#define Z_DEFLATED 8 +/* The deflate compression method (the only one supported in this version) */ + +#define Z_NULL 0 /* for initializing zalloc, zfree, opaque */ + +#define zlib_version zlibVersion() +/* for compatibility with versions < 1.0.2 */ + + + /* basic functions */ + +ZEXTERN const char * ZEXPORT zlibVersion(void); +/* The application can compare zlibVersion and ZLIB_VERSION for consistency. + If the first character differs, the library code actually used is not + compatible with the zlib.h header file used by the application. This check + is automatically made by deflateInit and inflateInit. + */ + +/* +ZEXTERN int ZEXPORT deflateInit(z_streamp strm, int level); + + Initializes the internal stream state for compression. The fields + zalloc, zfree and opaque must be initialized before by the caller. If + zalloc and zfree are set to Z_NULL, deflateInit updates them to use default + allocation functions. total_in, total_out, adler, and msg are initialized. + + The compression level must be Z_DEFAULT_COMPRESSION, or between 0 and 9: + 1 gives best speed, 9 gives best compression, 0 gives no compression at all + (the input data is simply copied a block at a time). Z_DEFAULT_COMPRESSION + requests a default compromise between speed and compression (currently + equivalent to level 6). + + deflateInit returns Z_OK if success, Z_MEM_ERROR if there was not enough + memory, Z_STREAM_ERROR if level is not a valid compression level, or + Z_VERSION_ERROR if the zlib library version (zlib_version) is incompatible + with the version assumed by the caller (ZLIB_VERSION). msg is set to null + if there is no error message. deflateInit does not perform any compression: + this will be done by deflate(). +*/ + + +ZEXTERN int ZEXPORT deflate(z_streamp strm, int flush); +/* + deflate compresses as much data as possible, and stops when the input + buffer becomes empty or the output buffer becomes full. It may introduce + some output latency (reading input without producing any output) except when + forced to flush. + + The detailed semantics are as follows. deflate performs one or both of the + following actions: + + - Compress more input starting at next_in and update next_in and avail_in + accordingly. If not all input can be processed (because there is not + enough room in the output buffer), next_in and avail_in are updated and + processing will resume at this point for the next call of deflate(). + + - Generate more output starting at next_out and update next_out and avail_out + accordingly. This action is forced if the parameter flush is non zero. + Forcing flush frequently degrades the compression ratio, so this parameter + should be set only when necessary. Some output may be provided even if + flush is zero. + + Before the call of deflate(), the application should ensure that at least + one of the actions is possible, by providing more input and/or consuming more + output, and updating avail_in or avail_out accordingly; avail_out should + never be zero before the call. The application can consume the compressed + output when it wants, for example when the output buffer is full (avail_out + == 0), or after each call of deflate(). If deflate returns Z_OK and with + zero avail_out, it must be called again after making room in the output + buffer because there might be more output pending. See deflatePending(), + which can be used if desired to determine whether or not there is more output + in that case. + + Normally the parameter flush is set to Z_NO_FLUSH, which allows deflate to + decide how much data to accumulate before producing output, in order to + maximize compression. + + If the parameter flush is set to Z_SYNC_FLUSH, all pending output is + flushed to the output buffer and the output is aligned on a byte boundary, so + that the decompressor can get all input data available so far. (In + particular avail_in is zero after the call if enough output space has been + provided before the call.) Flushing may degrade compression for some + compression algorithms and so it should be used only when necessary. This + completes the current deflate block and follows it with an empty stored block + that is three bits plus filler bits to the next byte, followed by four bytes + (00 00 ff ff). + + If flush is set to Z_PARTIAL_FLUSH, all pending output is flushed to the + output buffer, but the output is not aligned to a byte boundary. All of the + input data so far will be available to the decompressor, as for Z_SYNC_FLUSH. + This completes the current deflate block and follows it with an empty fixed + codes block that is 10 bits long. This assures that enough bytes are output + in order for the decompressor to finish the block before the empty fixed + codes block. + + If flush is set to Z_BLOCK, a deflate block is completed and emitted, as + for Z_SYNC_FLUSH, but the output is not aligned on a byte boundary, and up to + seven bits of the current block are held to be written as the next byte after + the next deflate block is completed. In this case, the decompressor may not + be provided enough bits at this point in order to complete decompression of + the data provided so far to the compressor. It may need to wait for the next + block to be emitted. This is for advanced applications that need to control + the emission of deflate blocks. + + If flush is set to Z_FULL_FLUSH, all output is flushed as with + Z_SYNC_FLUSH, and the compression state is reset so that decompression can + restart from this point if previous compressed data has been damaged or if + random access is desired. Using Z_FULL_FLUSH too often can seriously degrade + compression. + + If deflate returns with avail_out == 0, this function must be called again + with the same value of the flush parameter and more output space (updated + avail_out), until the flush is complete (deflate returns with non-zero + avail_out). In the case of a Z_FULL_FLUSH or Z_SYNC_FLUSH, make sure that + avail_out is greater than six when the flush marker begins, in order to avoid + repeated flush markers upon calling deflate() again when avail_out == 0. + + If the parameter flush is set to Z_FINISH, pending input is processed, + pending output is flushed and deflate returns with Z_STREAM_END if there was + enough output space. If deflate returns with Z_OK or Z_BUF_ERROR, this + function must be called again with Z_FINISH and more output space (updated + avail_out) but no more input data, until it returns with Z_STREAM_END or an + error. After deflate has returned Z_STREAM_END, the only possible operations + on the stream are deflateReset or deflateEnd. + + Z_FINISH can be used in the first deflate call after deflateInit if all the + compression is to be done in a single step. In order to complete in one + call, avail_out must be at least the value returned by deflateBound (see + below). Then deflate is guaranteed to return Z_STREAM_END. If not enough + output space is provided, deflate will not return Z_STREAM_END, and it must + be called again as described above. + + deflate() sets strm->adler to the Adler-32 checksum of all input read + so far (that is, total_in bytes). If a gzip stream is being generated, then + strm->adler will be the CRC-32 checksum of the input read so far. (See + deflateInit2 below.) + + deflate() may update strm->data_type if it can make a good guess about + the input data type (Z_BINARY or Z_TEXT). If in doubt, the data is + considered binary. This field is only for information purposes and does not + affect the compression algorithm in any manner. + + deflate() returns Z_OK if some progress has been made (more input + processed or more output produced), Z_STREAM_END if all input has been + consumed and all output has been produced (only when flush is set to + Z_FINISH), Z_STREAM_ERROR if the stream state was inconsistent (for example + if next_in or next_out was Z_NULL or the state was inadvertently written over + by the application), or Z_BUF_ERROR if no progress is possible (for example + avail_in or avail_out was zero). Note that Z_BUF_ERROR is not fatal, and + deflate() can be called again with more input and more output space to + continue compressing. +*/ + + +ZEXTERN int ZEXPORT deflateEnd(z_streamp strm); +/* + All dynamically allocated data structures for this stream are freed. + This function discards any unprocessed input and does not flush any pending + output. + + deflateEnd returns Z_OK if success, Z_STREAM_ERROR if the + stream state was inconsistent, Z_DATA_ERROR if the stream was freed + prematurely (some input or output was discarded). In the error case, msg + may be set but then points to a static string (which must not be + deallocated). +*/ + + +/* +ZEXTERN int ZEXPORT inflateInit(z_streamp strm); + + Initializes the internal stream state for decompression. The fields + next_in, avail_in, zalloc, zfree and opaque must be initialized before by + the caller. In the current version of inflate, the provided input is not + read or consumed. The allocation of a sliding window will be deferred to + the first call of inflate (if the decompression does not complete on the + first call). If zalloc and zfree are set to Z_NULL, inflateInit updates + them to use default allocation functions. total_in, total_out, adler, and + msg are initialized. + + inflateInit returns Z_OK if success, Z_MEM_ERROR if there was not enough + memory, Z_VERSION_ERROR if the zlib library version is incompatible with the + version assumed by the caller, or Z_STREAM_ERROR if the parameters are + invalid, such as a null pointer to the structure. msg is set to null if + there is no error message. inflateInit does not perform any decompression. + Actual decompression will be done by inflate(). So next_in, and avail_in, + next_out, and avail_out are unused and unchanged. The current + implementation of inflateInit() does not process any header information -- + that is deferred until inflate() is called. +*/ + + +ZEXTERN int ZEXPORT inflate(z_streamp strm, int flush); +/* + inflate decompresses as much data as possible, and stops when the input + buffer becomes empty or the output buffer becomes full. It may introduce + some output latency (reading input without producing any output) except when + forced to flush. + + The detailed semantics are as follows. inflate performs one or both of the + following actions: + + - Decompress more input starting at next_in and update next_in and avail_in + accordingly. If not all input can be processed (because there is not + enough room in the output buffer), then next_in and avail_in are updated + accordingly, and processing will resume at this point for the next call of + inflate(). + + - Generate more output starting at next_out and update next_out and avail_out + accordingly. inflate() provides as much output as possible, until there is + no more input data or no more space in the output buffer (see below about + the flush parameter). + + Before the call of inflate(), the application should ensure that at least + one of the actions is possible, by providing more input and/or consuming more + output, and updating the next_* and avail_* values accordingly. If the + caller of inflate() does not provide both available input and available + output space, it is possible that there will be no progress made. The + application can consume the uncompressed output when it wants, for example + when the output buffer is full (avail_out == 0), or after each call of + inflate(). If inflate returns Z_OK and with zero avail_out, it must be + called again after making room in the output buffer because there might be + more output pending. + + The flush parameter of inflate() can be Z_NO_FLUSH, Z_SYNC_FLUSH, Z_FINISH, + Z_BLOCK, or Z_TREES. Z_SYNC_FLUSH requests that inflate() flush as much + output as possible to the output buffer. Z_BLOCK requests that inflate() + stop if and when it gets to the next deflate block boundary. When decoding + the zlib or gzip format, this will cause inflate() to return immediately + after the header and before the first block. When doing a raw inflate, + inflate() will go ahead and process the first block, and will return when it + gets to the end of that block, or when it runs out of data. + + The Z_BLOCK option assists in appending to or combining deflate streams. + To assist in this, on return inflate() always sets strm->data_type to the + number of unused bits in the last byte taken from strm->next_in, plus 64 if + inflate() is currently decoding the last block in the deflate stream, plus + 128 if inflate() returned immediately after decoding an end-of-block code or + decoding the complete header up to just before the first byte of the deflate + stream. The end-of-block will not be indicated until all of the uncompressed + data from that block has been written to strm->next_out. The number of + unused bits may in general be greater than seven, except when bit 7 of + data_type is set, in which case the number of unused bits will be less than + eight. data_type is set as noted here every time inflate() returns for all + flush options, and so can be used to determine the amount of currently + consumed input in bits. + + The Z_TREES option behaves as Z_BLOCK does, but it also returns when the + end of each deflate block header is reached, before any actual data in that + block is decoded. This allows the caller to determine the length of the + deflate block header for later use in random access within a deflate block. + 256 is added to the value of strm->data_type when inflate() returns + immediately after reaching the end of the deflate block header. + + inflate() should normally be called until it returns Z_STREAM_END or an + error. However if all decompression is to be performed in a single step (a + single call of inflate), the parameter flush should be set to Z_FINISH. In + this case all pending input is processed and all pending output is flushed; + avail_out must be large enough to hold all of the uncompressed data for the + operation to complete. (The size of the uncompressed data may have been + saved by the compressor for this purpose.) The use of Z_FINISH is not + required to perform an inflation in one step. However it may be used to + inform inflate that a faster approach can be used for the single inflate() + call. Z_FINISH also informs inflate to not maintain a sliding window if the + stream completes, which reduces inflate's memory footprint. If the stream + does not complete, either because not all of the stream is provided or not + enough output space is provided, then a sliding window will be allocated and + inflate() can be called again to continue the operation as if Z_NO_FLUSH had + been used. + + In this implementation, inflate() always flushes as much output as + possible to the output buffer, and always uses the faster approach on the + first call. So the effects of the flush parameter in this implementation are + on the return value of inflate() as noted below, when inflate() returns early + when Z_BLOCK or Z_TREES is used, and when inflate() avoids the allocation of + memory for a sliding window when Z_FINISH is used. + + If a preset dictionary is needed after this call (see inflateSetDictionary + below), inflate sets strm->adler to the Adler-32 checksum of the dictionary + chosen by the compressor and returns Z_NEED_DICT; otherwise it sets + strm->adler to the Adler-32 checksum of all output produced so far (that is, + total_out bytes) and returns Z_OK, Z_STREAM_END or an error code as described + below. At the end of the stream, inflate() checks that its computed Adler-32 + checksum is equal to that saved by the compressor and returns Z_STREAM_END + only if the checksum is correct. + + inflate() can decompress and check either zlib-wrapped or gzip-wrapped + deflate data. The header type is detected automatically, if requested when + initializing with inflateInit2(). Any information contained in the gzip + header is not retained unless inflateGetHeader() is used. When processing + gzip-wrapped deflate data, strm->adler32 is set to the CRC-32 of the output + produced so far. The CRC-32 is checked against the gzip trailer, as is the + uncompressed length, modulo 2^32. + + inflate() returns Z_OK if some progress has been made (more input processed + or more output produced), Z_STREAM_END if the end of the compressed data has + been reached and all uncompressed output has been produced, Z_NEED_DICT if a + preset dictionary is needed at this point, Z_DATA_ERROR if the input data was + corrupted (input stream not conforming to the zlib format or incorrect check + value, in which case strm->msg points to a string with a more specific + error), Z_STREAM_ERROR if the stream structure was inconsistent (for example + next_in or next_out was Z_NULL, or the state was inadvertently written over + by the application), Z_MEM_ERROR if there was not enough memory, Z_BUF_ERROR + if no progress was possible or if there was not enough room in the output + buffer when Z_FINISH is used. Note that Z_BUF_ERROR is not fatal, and + inflate() can be called again with more input and more output space to + continue decompressing. If Z_DATA_ERROR is returned, the application may + then call inflateSync() to look for a good compression block if a partial + recovery of the data is to be attempted. +*/ + + +ZEXTERN int ZEXPORT inflateEnd(z_streamp strm); +/* + All dynamically allocated data structures for this stream are freed. + This function discards any unprocessed input and does not flush any pending + output. + + inflateEnd returns Z_OK if success, or Z_STREAM_ERROR if the stream state + was inconsistent. +*/ + + + /* Advanced functions */ + +/* + The following functions are needed only in some special applications. +*/ + +/* +ZEXTERN int ZEXPORT deflateInit2(z_streamp strm, + int level, + int method, + int windowBits, + int memLevel, + int strategy); + + This is another version of deflateInit with more compression options. The + fields zalloc, zfree and opaque must be initialized before by the caller. + + The method parameter is the compression method. It must be Z_DEFLATED in + this version of the library. + + The windowBits parameter is the base two logarithm of the window size + (the size of the history buffer). It should be in the range 8..15 for this + version of the library. Larger values of this parameter result in better + compression at the expense of memory usage. The default value is 15 if + deflateInit is used instead. + + For the current implementation of deflate(), a windowBits value of 8 (a + window size of 256 bytes) is not supported. As a result, a request for 8 + will result in 9 (a 512-byte window). In that case, providing 8 to + inflateInit2() will result in an error when the zlib header with 9 is + checked against the initialization of inflate(). The remedy is to not use 8 + with deflateInit2() with this initialization, or at least in that case use 9 + with inflateInit2(). + + windowBits can also be -8..-15 for raw deflate. In this case, -windowBits + determines the window size. deflate() will then generate raw deflate data + with no zlib header or trailer, and will not compute a check value. + + windowBits can also be greater than 15 for optional gzip encoding. Add + 16 to windowBits to write a simple gzip header and trailer around the + compressed data instead of a zlib wrapper. The gzip header will have no + file name, no extra data, no comment, no modification time (set to zero), no + header crc, and the operating system will be set to the appropriate value, + if the operating system was determined at compile time. If a gzip stream is + being written, strm->adler is a CRC-32 instead of an Adler-32. + + For raw deflate or gzip encoding, a request for a 256-byte window is + rejected as invalid, since only the zlib header provides a means of + transmitting the window size to the decompressor. + + The memLevel parameter specifies how much memory should be allocated + for the internal compression state. memLevel=1 uses minimum memory but is + slow and reduces compression ratio; memLevel=9 uses maximum memory for + optimal speed. The default value is 8. See zconf.h for total memory usage + as a function of windowBits and memLevel. + + The strategy parameter is used to tune the compression algorithm. Use the + value Z_DEFAULT_STRATEGY for normal data, Z_FILTERED for data produced by a + filter (or predictor), Z_HUFFMAN_ONLY to force Huffman encoding only (no + string match), or Z_RLE to limit match distances to one (run-length + encoding). Filtered data consists mostly of small values with a somewhat + random distribution. In this case, the compression algorithm is tuned to + compress them better. The effect of Z_FILTERED is to force more Huffman + coding and less string matching; it is somewhat intermediate between + Z_DEFAULT_STRATEGY and Z_HUFFMAN_ONLY. Z_RLE is designed to be almost as + fast as Z_HUFFMAN_ONLY, but give better compression for PNG image data. The + strategy parameter only affects the compression ratio but not the + correctness of the compressed output even if it is not set appropriately. + Z_FIXED prevents the use of dynamic Huffman codes, allowing for a simpler + decoder for special applications. + + deflateInit2 returns Z_OK if success, Z_MEM_ERROR if there was not enough + memory, Z_STREAM_ERROR if any parameter is invalid (such as an invalid + method), or Z_VERSION_ERROR if the zlib library version (zlib_version) is + incompatible with the version assumed by the caller (ZLIB_VERSION). msg is + set to null if there is no error message. deflateInit2 does not perform any + compression: this will be done by deflate(). +*/ + +ZEXTERN int ZEXPORT deflateSetDictionary(z_streamp strm, + const Bytef *dictionary, + uInt dictLength); +/* + Initializes the compression dictionary from the given byte sequence + without producing any compressed output. When using the zlib format, this + function must be called immediately after deflateInit, deflateInit2 or + deflateReset, and before any call of deflate. When doing raw deflate, this + function must be called either before any call of deflate, or immediately + after the completion of a deflate block, i.e. after all input has been + consumed and all output has been delivered when using any of the flush + options Z_BLOCK, Z_PARTIAL_FLUSH, Z_SYNC_FLUSH, or Z_FULL_FLUSH. The + compressor and decompressor must use exactly the same dictionary (see + inflateSetDictionary). + + The dictionary should consist of strings (byte sequences) that are likely + to be encountered later in the data to be compressed, with the most commonly + used strings preferably put towards the end of the dictionary. Using a + dictionary is most useful when the data to be compressed is short and can be + predicted with good accuracy; the data can then be compressed better than + with the default empty dictionary. + + Depending on the size of the compression data structures selected by + deflateInit or deflateInit2, a part of the dictionary may in effect be + discarded, for example if the dictionary is larger than the window size + provided in deflateInit or deflateInit2. Thus the strings most likely to be + useful should be put at the end of the dictionary, not at the front. In + addition, the current implementation of deflate will use at most the window + size minus 262 bytes of the provided dictionary. + + Upon return of this function, strm->adler is set to the Adler-32 value + of the dictionary; the decompressor may later use this value to determine + which dictionary has been used by the compressor. (The Adler-32 value + applies to the whole dictionary even if only a subset of the dictionary is + actually used by the compressor.) If a raw deflate was requested, then the + Adler-32 value is not computed and strm->adler is not set. + + deflateSetDictionary returns Z_OK if success, or Z_STREAM_ERROR if a + parameter is invalid (e.g. dictionary being Z_NULL) or the stream state is + inconsistent (for example if deflate has already been called for this stream + or if not at a block boundary for raw deflate). deflateSetDictionary does + not perform any compression: this will be done by deflate(). +*/ + +ZEXTERN int ZEXPORT deflateGetDictionary(z_streamp strm, + Bytef *dictionary, + uInt *dictLength); +/* + Returns the sliding dictionary being maintained by deflate. dictLength is + set to the number of bytes in the dictionary, and that many bytes are copied + to dictionary. dictionary must have enough space, where 32768 bytes is + always enough. If deflateGetDictionary() is called with dictionary equal to + Z_NULL, then only the dictionary length is returned, and nothing is copied. + Similarly, if dictLength is Z_NULL, then it is not set. + + deflateGetDictionary() may return a length less than the window size, even + when more than the window size in input has been provided. It may return up + to 258 bytes less in that case, due to how zlib's implementation of deflate + manages the sliding window and lookahead for matches, where matches can be + up to 258 bytes long. If the application needs the last window-size bytes of + input, then that would need to be saved by the application outside of zlib. + + deflateGetDictionary returns Z_OK on success, or Z_STREAM_ERROR if the + stream state is inconsistent. +*/ + +ZEXTERN int ZEXPORT deflateCopy(z_streamp dest, + z_streamp source); +/* + Sets the destination stream as a complete copy of the source stream. + + This function can be useful when several compression strategies will be + tried, for example when there are several ways of pre-processing the input + data with a filter. The streams that will be discarded should then be freed + by calling deflateEnd. Note that deflateCopy duplicates the internal + compression state which can be quite large, so this strategy is slow and can + consume lots of memory. + + deflateCopy returns Z_OK if success, Z_MEM_ERROR if there was not + enough memory, Z_STREAM_ERROR if the source stream state was inconsistent + (such as zalloc being Z_NULL). msg is left unchanged in both source and + destination. +*/ + +ZEXTERN int ZEXPORT deflateReset(z_streamp strm); +/* + This function is equivalent to deflateEnd followed by deflateInit, but + does not free and reallocate the internal compression state. The stream + will leave the compression level and any other attributes that may have been + set unchanged. total_in, total_out, adler, and msg are initialized. + + deflateReset returns Z_OK if success, or Z_STREAM_ERROR if the source + stream state was inconsistent (such as zalloc or state being Z_NULL). +*/ + +ZEXTERN int ZEXPORT deflateParams(z_streamp strm, + int level, + int strategy); +/* + Dynamically update the compression level and compression strategy. The + interpretation of level and strategy is as in deflateInit2(). This can be + used to switch between compression and straight copy of the input data, or + to switch to a different kind of input data requiring a different strategy. + If the compression approach (which is a function of the level) or the + strategy is changed, and if there have been any deflate() calls since the + state was initialized or reset, then the input available so far is + compressed with the old level and strategy using deflate(strm, Z_BLOCK). + There are three approaches for the compression levels 0, 1..3, and 4..9 + respectively. The new level and strategy will take effect at the next call + of deflate(). + + If a deflate(strm, Z_BLOCK) is performed by deflateParams(), and it does + not have enough output space to complete, then the parameter change will not + take effect. In this case, deflateParams() can be called again with the + same parameters and more output space to try again. + + In order to assure a change in the parameters on the first try, the + deflate stream should be flushed using deflate() with Z_BLOCK or other flush + request until strm.avail_out is not zero, before calling deflateParams(). + Then no more input data should be provided before the deflateParams() call. + If this is done, the old level and strategy will be applied to the data + compressed before deflateParams(), and the new level and strategy will be + applied to the data compressed after deflateParams(). + + deflateParams returns Z_OK on success, Z_STREAM_ERROR if the source stream + state was inconsistent or if a parameter was invalid, or Z_BUF_ERROR if + there was not enough output space to complete the compression of the + available input data before a change in the strategy or approach. Note that + in the case of a Z_BUF_ERROR, the parameters are not changed. A return + value of Z_BUF_ERROR is not fatal, in which case deflateParams() can be + retried with more output space. +*/ + +ZEXTERN int ZEXPORT deflateTune(z_streamp strm, + int good_length, + int max_lazy, + int nice_length, + int max_chain); +/* + Fine tune deflate's internal compression parameters. This should only be + used by someone who understands the algorithm used by zlib's deflate for + searching for the best matching string, and even then only by the most + fanatic optimizer trying to squeeze out the last compressed bit for their + specific input data. Read the deflate.c source code for the meaning of the + max_lazy, good_length, nice_length, and max_chain parameters. + + deflateTune() can be called after deflateInit() or deflateInit2(), and + returns Z_OK on success, or Z_STREAM_ERROR for an invalid deflate stream. + */ + +ZEXTERN uLong ZEXPORT deflateBound(z_streamp strm, + uLong sourceLen); +/* + deflateBound() returns an upper bound on the compressed size after + deflation of sourceLen bytes. It must be called after deflateInit() or + deflateInit2(), and after deflateSetHeader(), if used. This would be used + to allocate an output buffer for deflation in a single pass, and so would be + called before deflate(). If that first deflate() call is provided the + sourceLen input bytes, an output buffer allocated to the size returned by + deflateBound(), and the flush value Z_FINISH, then deflate() is guaranteed + to return Z_STREAM_END. Note that it is possible for the compressed size to + be larger than the value returned by deflateBound() if flush options other + than Z_FINISH or Z_NO_FLUSH are used. +*/ + +ZEXTERN int ZEXPORT deflatePending(z_streamp strm, + unsigned *pending, + int *bits); +/* + deflatePending() returns the number of bytes and bits of output that have + been generated, but not yet provided in the available output. The bytes not + provided would be due to the available output space having being consumed. + The number of bits of output not provided are between 0 and 7, where they + await more bits to join them in order to fill out a full byte. If pending + or bits are Z_NULL, then those values are not set. + + deflatePending returns Z_OK if success, or Z_STREAM_ERROR if the source + stream state was inconsistent. + */ + +ZEXTERN int ZEXPORT deflatePrime(z_streamp strm, + int bits, + int value); +/* + deflatePrime() inserts bits in the deflate output stream. The intent + is that this function is used to start off the deflate output with the bits + leftover from a previous deflate stream when appending to it. As such, this + function can only be used for raw deflate, and must be used before the first + deflate() call after a deflateInit2() or deflateReset(). bits must be less + than or equal to 16, and that many of the least significant bits of value + will be inserted in the output. + + deflatePrime returns Z_OK if success, Z_BUF_ERROR if there was not enough + room in the internal buffer to insert the bits, or Z_STREAM_ERROR if the + source stream state was inconsistent. +*/ + +ZEXTERN int ZEXPORT deflateSetHeader(z_streamp strm, + gz_headerp head); +/* + deflateSetHeader() provides gzip header information for when a gzip + stream is requested by deflateInit2(). deflateSetHeader() may be called + after deflateInit2() or deflateReset() and before the first call of + deflate(). The text, time, os, extra field, name, and comment information + in the provided gz_header structure are written to the gzip header (xflag is + ignored -- the extra flags are set according to the compression level). The + caller must assure that, if not Z_NULL, name and comment are terminated with + a zero byte, and that if extra is not Z_NULL, that extra_len bytes are + available there. If hcrc is true, a gzip header crc is included. Note that + the current versions of the command-line version of gzip (up through version + 1.3.x) do not support header crc's, and will report that it is a "multi-part + gzip file" and give up. + + If deflateSetHeader is not used, the default gzip header has text false, + the time set to zero, and os set to the current operating system, with no + extra, name, or comment fields. The gzip header is returned to the default + state by deflateReset(). + + deflateSetHeader returns Z_OK if success, or Z_STREAM_ERROR if the source + stream state was inconsistent. +*/ + +/* +ZEXTERN int ZEXPORT inflateInit2(z_streamp strm, + int windowBits); + + This is another version of inflateInit with an extra parameter. The + fields next_in, avail_in, zalloc, zfree and opaque must be initialized + before by the caller. + + The windowBits parameter is the base two logarithm of the maximum window + size (the size of the history buffer). It should be in the range 8..15 for + this version of the library. The default value is 15 if inflateInit is used + instead. windowBits must be greater than or equal to the windowBits value + provided to deflateInit2() while compressing, or it must be equal to 15 if + deflateInit2() was not used. If a compressed stream with a larger window + size is given as input, inflate() will return with the error code + Z_DATA_ERROR instead of trying to allocate a larger window. + + windowBits can also be zero to request that inflate use the window size in + the zlib header of the compressed stream. + + windowBits can also be -8..-15 for raw inflate. In this case, -windowBits + determines the window size. inflate() will then process raw deflate data, + not looking for a zlib or gzip header, not generating a check value, and not + looking for any check values for comparison at the end of the stream. This + is for use with other formats that use the deflate compressed data format + such as zip. Those formats provide their own check values. If a custom + format is developed using the raw deflate format for compressed data, it is + recommended that a check value such as an Adler-32 or a CRC-32 be applied to + the uncompressed data as is done in the zlib, gzip, and zip formats. For + most applications, the zlib format should be used as is. Note that comments + above on the use in deflateInit2() applies to the magnitude of windowBits. + + windowBits can also be greater than 15 for optional gzip decoding. Add + 32 to windowBits to enable zlib and gzip decoding with automatic header + detection, or add 16 to decode only the gzip format (the zlib format will + return a Z_DATA_ERROR). If a gzip stream is being decoded, strm->adler is a + CRC-32 instead of an Adler-32. Unlike the gunzip utility and gzread() (see + below), inflate() will *not* automatically decode concatenated gzip members. + inflate() will return Z_STREAM_END at the end of the gzip member. The state + would need to be reset to continue decoding a subsequent gzip member. This + *must* be done if there is more data after a gzip member, in order for the + decompression to be compliant with the gzip standard (RFC 1952). + + inflateInit2 returns Z_OK if success, Z_MEM_ERROR if there was not enough + memory, Z_VERSION_ERROR if the zlib library version is incompatible with the + version assumed by the caller, or Z_STREAM_ERROR if the parameters are + invalid, such as a null pointer to the structure. msg is set to null if + there is no error message. inflateInit2 does not perform any decompression + apart from possibly reading the zlib header if present: actual decompression + will be done by inflate(). (So next_in and avail_in may be modified, but + next_out and avail_out are unused and unchanged.) The current implementation + of inflateInit2() does not process any header information -- that is + deferred until inflate() is called. +*/ + +ZEXTERN int ZEXPORT inflateSetDictionary(z_streamp strm, + const Bytef *dictionary, + uInt dictLength); +/* + Initializes the decompression dictionary from the given uncompressed byte + sequence. This function must be called immediately after a call of inflate, + if that call returned Z_NEED_DICT. The dictionary chosen by the compressor + can be determined from the Adler-32 value returned by that call of inflate. + The compressor and decompressor must use exactly the same dictionary (see + deflateSetDictionary). For raw inflate, this function can be called at any + time to set the dictionary. If the provided dictionary is smaller than the + window and there is already data in the window, then the provided dictionary + will amend what's there. The application must insure that the dictionary + that was used for compression is provided. + + inflateSetDictionary returns Z_OK if success, Z_STREAM_ERROR if a + parameter is invalid (e.g. dictionary being Z_NULL) or the stream state is + inconsistent, Z_DATA_ERROR if the given dictionary doesn't match the + expected one (incorrect Adler-32 value). inflateSetDictionary does not + perform any decompression: this will be done by subsequent calls of + inflate(). +*/ + +ZEXTERN int ZEXPORT inflateGetDictionary(z_streamp strm, + Bytef *dictionary, + uInt *dictLength); +/* + Returns the sliding dictionary being maintained by inflate. dictLength is + set to the number of bytes in the dictionary, and that many bytes are copied + to dictionary. dictionary must have enough space, where 32768 bytes is + always enough. If inflateGetDictionary() is called with dictionary equal to + Z_NULL, then only the dictionary length is returned, and nothing is copied. + Similarly, if dictLength is Z_NULL, then it is not set. + + inflateGetDictionary returns Z_OK on success, or Z_STREAM_ERROR if the + stream state is inconsistent. +*/ + +ZEXTERN int ZEXPORT inflateSync(z_streamp strm); +/* + Skips invalid compressed data until a possible full flush point (see above + for the description of deflate with Z_FULL_FLUSH) can be found, or until all + available input is skipped. No output is provided. + + inflateSync searches for a 00 00 FF FF pattern in the compressed data. + All full flush points have this pattern, but not all occurrences of this + pattern are full flush points. + + inflateSync returns Z_OK if a possible full flush point has been found, + Z_BUF_ERROR if no more input was provided, Z_DATA_ERROR if no flush point + has been found, or Z_STREAM_ERROR if the stream structure was inconsistent. + In the success case, the application may save the current value of total_in + which indicates where valid compressed data was found. In the error case, + the application may repeatedly call inflateSync, providing more input each + time, until success or end of the input data. +*/ + +ZEXTERN int ZEXPORT inflateCopy(z_streamp dest, + z_streamp source); +/* + Sets the destination stream as a complete copy of the source stream. + + This function can be useful when randomly accessing a large stream. The + first pass through the stream can periodically record the inflate state, + allowing restarting inflate at those points when randomly accessing the + stream. + + inflateCopy returns Z_OK if success, Z_MEM_ERROR if there was not + enough memory, Z_STREAM_ERROR if the source stream state was inconsistent + (such as zalloc being Z_NULL). msg is left unchanged in both source and + destination. +*/ + +ZEXTERN int ZEXPORT inflateReset(z_streamp strm); +/* + This function is equivalent to inflateEnd followed by inflateInit, + but does not free and reallocate the internal decompression state. The + stream will keep attributes that may have been set by inflateInit2. + total_in, total_out, adler, and msg are initialized. + + inflateReset returns Z_OK if success, or Z_STREAM_ERROR if the source + stream state was inconsistent (such as zalloc or state being Z_NULL). +*/ + +ZEXTERN int ZEXPORT inflateReset2(z_streamp strm, + int windowBits); +/* + This function is the same as inflateReset, but it also permits changing + the wrap and window size requests. The windowBits parameter is interpreted + the same as it is for inflateInit2. If the window size is changed, then the + memory allocated for the window is freed, and the window will be reallocated + by inflate() if needed. + + inflateReset2 returns Z_OK if success, or Z_STREAM_ERROR if the source + stream state was inconsistent (such as zalloc or state being Z_NULL), or if + the windowBits parameter is invalid. +*/ + +ZEXTERN int ZEXPORT inflatePrime(z_streamp strm, + int bits, + int value); +/* + This function inserts bits in the inflate input stream. The intent is + that this function is used to start inflating at a bit position in the + middle of a byte. The provided bits will be used before any bytes are used + from next_in. This function should only be used with raw inflate, and + should be used before the first inflate() call after inflateInit2() or + inflateReset(). bits must be less than or equal to 16, and that many of the + least significant bits of value will be inserted in the input. + + If bits is negative, then the input stream bit buffer is emptied. Then + inflatePrime() can be called again to put bits in the buffer. This is used + to clear out bits leftover after feeding inflate a block description prior + to feeding inflate codes. + + inflatePrime returns Z_OK if success, or Z_STREAM_ERROR if the source + stream state was inconsistent. +*/ + +ZEXTERN long ZEXPORT inflateMark(z_streamp strm); +/* + This function returns two values, one in the lower 16 bits of the return + value, and the other in the remaining upper bits, obtained by shifting the + return value down 16 bits. If the upper value is -1 and the lower value is + zero, then inflate() is currently decoding information outside of a block. + If the upper value is -1 and the lower value is non-zero, then inflate is in + the middle of a stored block, with the lower value equaling the number of + bytes from the input remaining to copy. If the upper value is not -1, then + it is the number of bits back from the current bit position in the input of + the code (literal or length/distance pair) currently being processed. In + that case the lower value is the number of bytes already emitted for that + code. + + A code is being processed if inflate is waiting for more input to complete + decoding of the code, or if it has completed decoding but is waiting for + more output space to write the literal or match data. + + inflateMark() is used to mark locations in the input data for random + access, which may be at bit positions, and to note those cases where the + output of a code may span boundaries of random access blocks. The current + location in the input stream can be determined from avail_in and data_type + as noted in the description for the Z_BLOCK flush parameter for inflate. + + inflateMark returns the value noted above, or -65536 if the provided + source stream state was inconsistent. +*/ + +ZEXTERN int ZEXPORT inflateGetHeader(z_streamp strm, + gz_headerp head); +/* + inflateGetHeader() requests that gzip header information be stored in the + provided gz_header structure. inflateGetHeader() may be called after + inflateInit2() or inflateReset(), and before the first call of inflate(). + As inflate() processes the gzip stream, head->done is zero until the header + is completed, at which time head->done is set to one. If a zlib stream is + being decoded, then head->done is set to -1 to indicate that there will be + no gzip header information forthcoming. Note that Z_BLOCK or Z_TREES can be + used to force inflate() to return immediately after header processing is + complete and before any actual data is decompressed. + + The text, time, xflags, and os fields are filled in with the gzip header + contents. hcrc is set to true if there is a header CRC. (The header CRC + was valid if done is set to one.) If extra is not Z_NULL, then extra_max + contains the maximum number of bytes to write to extra. Once done is true, + extra_len contains the actual extra field length, and extra contains the + extra field, or that field truncated if extra_max is less than extra_len. + If name is not Z_NULL, then up to name_max characters are written there, + terminated with a zero unless the length is greater than name_max. If + comment is not Z_NULL, then up to comm_max characters are written there, + terminated with a zero unless the length is greater than comm_max. When any + of extra, name, or comment are not Z_NULL and the respective field is not + present in the header, then that field is set to Z_NULL to signal its + absence. This allows the use of deflateSetHeader() with the returned + structure to duplicate the header. However if those fields are set to + allocated memory, then the application will need to save those pointers + elsewhere so that they can be eventually freed. + + If inflateGetHeader is not used, then the header information is simply + discarded. The header is always checked for validity, including the header + CRC if present. inflateReset() will reset the process to discard the header + information. The application would need to call inflateGetHeader() again to + retrieve the header from the next gzip stream. + + inflateGetHeader returns Z_OK if success, or Z_STREAM_ERROR if the source + stream state was inconsistent. +*/ + +/* +ZEXTERN int ZEXPORT inflateBackInit(z_streamp strm, int windowBits, + unsigned char FAR *window); + + Initialize the internal stream state for decompression using inflateBack() + calls. The fields zalloc, zfree and opaque in strm must be initialized + before the call. If zalloc and zfree are Z_NULL, then the default library- + derived memory allocation routines are used. windowBits is the base two + logarithm of the window size, in the range 8..15. window is a caller + supplied buffer of that size. Except for special applications where it is + assured that deflate was used with small window sizes, windowBits must be 15 + and a 32K byte window must be supplied to be able to decompress general + deflate streams. + + See inflateBack() for the usage of these routines. + + inflateBackInit will return Z_OK on success, Z_STREAM_ERROR if any of + the parameters are invalid, Z_MEM_ERROR if the internal state could not be + allocated, or Z_VERSION_ERROR if the version of the library does not match + the version of the header file. +*/ + +typedef unsigned (*in_func)(void FAR *, + z_const unsigned char FAR * FAR *); +typedef int (*out_func)(void FAR *, unsigned char FAR *, unsigned); + +ZEXTERN int ZEXPORT inflateBack(z_streamp strm, + in_func in, void FAR *in_desc, + out_func out, void FAR *out_desc); +/* + inflateBack() does a raw inflate with a single call using a call-back + interface for input and output. This is potentially more efficient than + inflate() for file i/o applications, in that it avoids copying between the + output and the sliding window by simply making the window itself the output + buffer. inflate() can be faster on modern CPUs when used with large + buffers. inflateBack() trusts the application to not change the output + buffer passed by the output function, at least until inflateBack() returns. + + inflateBackInit() must be called first to allocate the internal state + and to initialize the state with the user-provided window buffer. + inflateBack() may then be used multiple times to inflate a complete, raw + deflate stream with each call. inflateBackEnd() is then called to free the + allocated state. + + A raw deflate stream is one with no zlib or gzip header or trailer. + This routine would normally be used in a utility that reads zip or gzip + files and writes out uncompressed files. The utility would decode the + header and process the trailer on its own, hence this routine expects only + the raw deflate stream to decompress. This is different from the default + behavior of inflate(), which expects a zlib header and trailer around the + deflate stream. + + inflateBack() uses two subroutines supplied by the caller that are then + called by inflateBack() for input and output. inflateBack() calls those + routines until it reads a complete deflate stream and writes out all of the + uncompressed data, or until it encounters an error. The function's + parameters and return types are defined above in the in_func and out_func + typedefs. inflateBack() will call in(in_desc, &buf) which should return the + number of bytes of provided input, and a pointer to that input in buf. If + there is no input available, in() must return zero -- buf is ignored in that + case -- and inflateBack() will return a buffer error. inflateBack() will + call out(out_desc, buf, len) to write the uncompressed data buf[0..len-1]. + out() should return zero on success, or non-zero on failure. If out() + returns non-zero, inflateBack() will return with an error. Neither in() nor + out() are permitted to change the contents of the window provided to + inflateBackInit(), which is also the buffer that out() uses to write from. + The length written by out() will be at most the window size. Any non-zero + amount of input may be provided by in(). + + For convenience, inflateBack() can be provided input on the first call by + setting strm->next_in and strm->avail_in. If that input is exhausted, then + in() will be called. Therefore strm->next_in must be initialized before + calling inflateBack(). If strm->next_in is Z_NULL, then in() will be called + immediately for input. If strm->next_in is not Z_NULL, then strm->avail_in + must also be initialized, and then if strm->avail_in is not zero, input will + initially be taken from strm->next_in[0 .. strm->avail_in - 1]. + + The in_desc and out_desc parameters of inflateBack() is passed as the + first parameter of in() and out() respectively when they are called. These + descriptors can be optionally used to pass any information that the caller- + supplied in() and out() functions need to do their job. + + On return, inflateBack() will set strm->next_in and strm->avail_in to + pass back any unused input that was provided by the last in() call. The + return values of inflateBack() can be Z_STREAM_END on success, Z_BUF_ERROR + if in() or out() returned an error, Z_DATA_ERROR if there was a format error + in the deflate stream (in which case strm->msg is set to indicate the nature + of the error), or Z_STREAM_ERROR if the stream was not properly initialized. + In the case of Z_BUF_ERROR, an input or output error can be distinguished + using strm->next_in which will be Z_NULL only if in() returned an error. If + strm->next_in is not Z_NULL, then the Z_BUF_ERROR was due to out() returning + non-zero. (in() will always be called before out(), so strm->next_in is + assured to be defined if out() returns non-zero.) Note that inflateBack() + cannot return Z_OK. +*/ + +ZEXTERN int ZEXPORT inflateBackEnd(z_streamp strm); +/* + All memory allocated by inflateBackInit() is freed. + + inflateBackEnd() returns Z_OK on success, or Z_STREAM_ERROR if the stream + state was inconsistent. +*/ + +ZEXTERN uLong ZEXPORT zlibCompileFlags(void); +/* Return flags indicating compile-time options. + + Type sizes, two bits each, 00 = 16 bits, 01 = 32, 10 = 64, 11 = other: + 1.0: size of uInt + 3.2: size of uLong + 5.4: size of voidpf (pointer) + 7.6: size of z_off_t + + Compiler, assembler, and debug options: + 8: ZLIB_DEBUG + 9: ASMV or ASMINF -- use ASM code + 10: ZLIB_WINAPI -- exported functions use the WINAPI calling convention + 11: 0 (reserved) + + One-time table building (smaller code, but not thread-safe if true): + 12: BUILDFIXED -- build static block decoding tables when needed + 13: DYNAMIC_CRC_TABLE -- build CRC calculation tables when needed + 14,15: 0 (reserved) + + Library content (indicates missing functionality): + 16: NO_GZCOMPRESS -- gz* functions cannot compress (to avoid linking + deflate code when not needed) + 17: NO_GZIP -- deflate can't write gzip streams, and inflate can't detect + and decode gzip streams (to avoid linking crc code) + 18-19: 0 (reserved) + + Operation variations (changes in library functionality): + 20: PKZIP_BUG_WORKAROUND -- slightly more permissive inflate + 21: FASTEST -- deflate algorithm with only one, lowest compression level + 22,23: 0 (reserved) + + The sprintf variant used by gzprintf (zero is best): + 24: 0 = vs*, 1 = s* -- 1 means limited to 20 arguments after the format + 25: 0 = *nprintf, 1 = *printf -- 1 means gzprintf() not secure! + 26: 0 = returns value, 1 = void -- 1 means inferred string length returned + + Remainder: + 27-31: 0 (reserved) + */ + +#ifndef Z_SOLO + + /* utility functions */ + +/* + The following utility functions are implemented on top of the basic + stream-oriented functions. To simplify the interface, some default options + are assumed (compression level and memory usage, standard memory allocation + functions). The source code of these utility functions can be modified if + you need special options. +*/ + +ZEXTERN int ZEXPORT compress(Bytef *dest, uLongf *destLen, + const Bytef *source, uLong sourceLen); +/* + Compresses the source buffer into the destination buffer. sourceLen is + the byte length of the source buffer. Upon entry, destLen is the total size + of the destination buffer, which must be at least the value returned by + compressBound(sourceLen). Upon exit, destLen is the actual size of the + compressed data. compress() is equivalent to compress2() with a level + parameter of Z_DEFAULT_COMPRESSION. + + compress returns Z_OK if success, Z_MEM_ERROR if there was not + enough memory, Z_BUF_ERROR if there was not enough room in the output + buffer. +*/ + +ZEXTERN int ZEXPORT compress2(Bytef *dest, uLongf *destLen, + const Bytef *source, uLong sourceLen, + int level); +/* + Compresses the source buffer into the destination buffer. The level + parameter has the same meaning as in deflateInit. sourceLen is the byte + length of the source buffer. Upon entry, destLen is the total size of the + destination buffer, which must be at least the value returned by + compressBound(sourceLen). Upon exit, destLen is the actual size of the + compressed data. + + compress2 returns Z_OK if success, Z_MEM_ERROR if there was not enough + memory, Z_BUF_ERROR if there was not enough room in the output buffer, + Z_STREAM_ERROR if the level parameter is invalid. +*/ + +ZEXTERN uLong ZEXPORT compressBound(uLong sourceLen); +/* + compressBound() returns an upper bound on the compressed size after + compress() or compress2() on sourceLen bytes. It would be used before a + compress() or compress2() call to allocate the destination buffer. +*/ + +ZEXTERN int ZEXPORT uncompress(Bytef *dest, uLongf *destLen, + const Bytef *source, uLong sourceLen); +/* + Decompresses the source buffer into the destination buffer. sourceLen is + the byte length of the source buffer. Upon entry, destLen is the total size + of the destination buffer, which must be large enough to hold the entire + uncompressed data. (The size of the uncompressed data must have been saved + previously by the compressor and transmitted to the decompressor by some + mechanism outside the scope of this compression library.) Upon exit, destLen + is the actual size of the uncompressed data. + + uncompress returns Z_OK if success, Z_MEM_ERROR if there was not + enough memory, Z_BUF_ERROR if there was not enough room in the output + buffer, or Z_DATA_ERROR if the input data was corrupted or incomplete. In + the case where there is not enough room, uncompress() will fill the output + buffer with the uncompressed data up to that point. +*/ + +ZEXTERN int ZEXPORT uncompress2(Bytef *dest, uLongf *destLen, + const Bytef *source, uLong *sourceLen); +/* + Same as uncompress, except that sourceLen is a pointer, where the + length of the source is *sourceLen. On return, *sourceLen is the number of + source bytes consumed. +*/ + + /* gzip file access functions */ + +/* + This library supports reading and writing files in gzip (.gz) format with + an interface similar to that of stdio, using the functions that start with + "gz". The gzip format is different from the zlib format. gzip is a gzip + wrapper, documented in RFC 1952, wrapped around a deflate stream. +*/ + +typedef struct gzFile_s *gzFile; /* semi-opaque gzip file descriptor */ + +/* +ZEXTERN gzFile ZEXPORT gzopen(const char *path, const char *mode); + + Open the gzip (.gz) file at path for reading and decompressing, or + compressing and writing. The mode parameter is as in fopen ("rb" or "wb") + but can also include a compression level ("wb9") or a strategy: 'f' for + filtered data as in "wb6f", 'h' for Huffman-only compression as in "wb1h", + 'R' for run-length encoding as in "wb1R", or 'F' for fixed code compression + as in "wb9F". (See the description of deflateInit2 for more information + about the strategy parameter.) 'T' will request transparent writing or + appending with no compression and not using the gzip format. + + "a" can be used instead of "w" to request that the gzip stream that will + be written be appended to the file. "+" will result in an error, since + reading and writing to the same gzip file is not supported. The addition of + "x" when writing will create the file exclusively, which fails if the file + already exists. On systems that support it, the addition of "e" when + reading or writing will set the flag to close the file on an execve() call. + + These functions, as well as gzip, will read and decode a sequence of gzip + streams in a file. The append function of gzopen() can be used to create + such a file. (Also see gzflush() for another way to do this.) When + appending, gzopen does not test whether the file begins with a gzip stream, + nor does it look for the end of the gzip streams to begin appending. gzopen + will simply append a gzip stream to the existing file. + + gzopen can be used to read a file which is not in gzip format; in this + case gzread will directly read from the file without decompression. When + reading, this will be detected automatically by looking for the magic two- + byte gzip header. + + gzopen returns NULL if the file could not be opened, if there was + insufficient memory to allocate the gzFile state, or if an invalid mode was + specified (an 'r', 'w', or 'a' was not provided, or '+' was provided). + errno can be checked to determine if the reason gzopen failed was that the + file could not be opened. +*/ + +ZEXTERN gzFile ZEXPORT gzdopen(int fd, const char *mode); +/* + Associate a gzFile with the file descriptor fd. File descriptors are + obtained from calls like open, dup, creat, pipe or fileno (if the file has + been previously opened with fopen). The mode parameter is as in gzopen. + + The next call of gzclose on the returned gzFile will also close the file + descriptor fd, just like fclose(fdopen(fd, mode)) closes the file descriptor + fd. If you want to keep fd open, use fd = dup(fd_keep); gz = gzdopen(fd, + mode);. The duplicated descriptor should be saved to avoid a leak, since + gzdopen does not close fd if it fails. If you are using fileno() to get the + file descriptor from a FILE *, then you will have to use dup() to avoid + double-close()ing the file descriptor. Both gzclose() and fclose() will + close the associated file descriptor, so they need to have different file + descriptors. + + gzdopen returns NULL if there was insufficient memory to allocate the + gzFile state, if an invalid mode was specified (an 'r', 'w', or 'a' was not + provided, or '+' was provided), or if fd is -1. The file descriptor is not + used until the next gz* read, write, seek, or close operation, so gzdopen + will not detect if fd is invalid (unless fd is -1). +*/ + +ZEXTERN int ZEXPORT gzbuffer(gzFile file, unsigned size); +/* + Set the internal buffer size used by this library's functions for file to + size. The default buffer size is 8192 bytes. This function must be called + after gzopen() or gzdopen(), and before any other calls that read or write + the file. The buffer memory allocation is always deferred to the first read + or write. Three times that size in buffer space is allocated. A larger + buffer size of, for example, 64K or 128K bytes will noticeably increase the + speed of decompression (reading). + + The new buffer size also affects the maximum length for gzprintf(). + + gzbuffer() returns 0 on success, or -1 on failure, such as being called + too late. +*/ + +ZEXTERN int ZEXPORT gzsetparams(gzFile file, int level, int strategy); +/* + Dynamically update the compression level and strategy for file. See the + description of deflateInit2 for the meaning of these parameters. Previously + provided data is flushed before applying the parameter changes. + + gzsetparams returns Z_OK if success, Z_STREAM_ERROR if the file was not + opened for writing, Z_ERRNO if there is an error writing the flushed data, + or Z_MEM_ERROR if there is a memory allocation error. +*/ + +ZEXTERN int ZEXPORT gzread(gzFile file, voidp buf, unsigned len); +/* + Read and decompress up to len uncompressed bytes from file into buf. If + the input file is not in gzip format, gzread copies the given number of + bytes into the buffer directly from the file. + + After reaching the end of a gzip stream in the input, gzread will continue + to read, looking for another gzip stream. Any number of gzip streams may be + concatenated in the input file, and will all be decompressed by gzread(). + If something other than a gzip stream is encountered after a gzip stream, + that remaining trailing garbage is ignored (and no error is returned). + + gzread can be used to read a gzip file that is being concurrently written. + Upon reaching the end of the input, gzread will return with the available + data. If the error code returned by gzerror is Z_OK or Z_BUF_ERROR, then + gzclearerr can be used to clear the end of file indicator in order to permit + gzread to be tried again. Z_OK indicates that a gzip stream was completed + on the last gzread. Z_BUF_ERROR indicates that the input file ended in the + middle of a gzip stream. Note that gzread does not return -1 in the event + of an incomplete gzip stream. This error is deferred until gzclose(), which + will return Z_BUF_ERROR if the last gzread ended in the middle of a gzip + stream. Alternatively, gzerror can be used before gzclose to detect this + case. + + gzread returns the number of uncompressed bytes actually read, less than + len for end of file, or -1 for error. If len is too large to fit in an int, + then nothing is read, -1 is returned, and the error state is set to + Z_STREAM_ERROR. +*/ + +ZEXTERN z_size_t ZEXPORT gzfread(voidp buf, z_size_t size, z_size_t nitems, + gzFile file); +/* + Read and decompress up to nitems items of size size from file into buf, + otherwise operating as gzread() does. This duplicates the interface of + stdio's fread(), with size_t request and return types. If the library + defines size_t, then z_size_t is identical to size_t. If not, then z_size_t + is an unsigned integer type that can contain a pointer. + + gzfread() returns the number of full items read of size size, or zero if + the end of the file was reached and a full item could not be read, or if + there was an error. gzerror() must be consulted if zero is returned in + order to determine if there was an error. If the multiplication of size and + nitems overflows, i.e. the product does not fit in a z_size_t, then nothing + is read, zero is returned, and the error state is set to Z_STREAM_ERROR. + + In the event that the end of file is reached and only a partial item is + available at the end, i.e. the remaining uncompressed data length is not a + multiple of size, then the final partial item is nevertheless read into buf + and the end-of-file flag is set. The length of the partial item read is not + provided, but could be inferred from the result of gztell(). This behavior + is the same as the behavior of fread() implementations in common libraries, + but it prevents the direct use of gzfread() to read a concurrently written + file, resetting and retrying on end-of-file, when size is not 1. +*/ + +ZEXTERN int ZEXPORT gzwrite(gzFile file, voidpc buf, unsigned len); +/* + Compress and write the len uncompressed bytes at buf to file. gzwrite + returns the number of uncompressed bytes written or 0 in case of error. +*/ + +ZEXTERN z_size_t ZEXPORT gzfwrite(voidpc buf, z_size_t size, + z_size_t nitems, gzFile file); +/* + Compress and write nitems items of size size from buf to file, duplicating + the interface of stdio's fwrite(), with size_t request and return types. If + the library defines size_t, then z_size_t is identical to size_t. If not, + then z_size_t is an unsigned integer type that can contain a pointer. + + gzfwrite() returns the number of full items written of size size, or zero + if there was an error. If the multiplication of size and nitems overflows, + i.e. the product does not fit in a z_size_t, then nothing is written, zero + is returned, and the error state is set to Z_STREAM_ERROR. +*/ + +ZEXTERN int ZEXPORTVA gzprintf(gzFile file, const char *format, ...); +/* + Convert, format, compress, and write the arguments (...) to file under + control of the string format, as in fprintf. gzprintf returns the number of + uncompressed bytes actually written, or a negative zlib error code in case + of error. The number of uncompressed bytes written is limited to 8191, or + one less than the buffer size given to gzbuffer(). The caller should assure + that this limit is not exceeded. If it is exceeded, then gzprintf() will + return an error (0) with nothing written. In this case, there may also be a + buffer overflow with unpredictable consequences, which is possible only if + zlib was compiled with the insecure functions sprintf() or vsprintf(), + because the secure snprintf() or vsnprintf() functions were not available. + This can be determined using zlibCompileFlags(). +*/ + +ZEXTERN int ZEXPORT gzputs(gzFile file, const char *s); +/* + Compress and write the given null-terminated string s to file, excluding + the terminating null character. + + gzputs returns the number of characters written, or -1 in case of error. +*/ + +ZEXTERN char * ZEXPORT gzgets(gzFile file, char *buf, int len); +/* + Read and decompress bytes from file into buf, until len-1 characters are + read, or until a newline character is read and transferred to buf, or an + end-of-file condition is encountered. If any characters are read or if len + is one, the string is terminated with a null character. If no characters + are read due to an end-of-file or len is less than one, then the buffer is + left untouched. + + gzgets returns buf which is a null-terminated string, or it returns NULL + for end-of-file or in case of error. If there was an error, the contents at + buf are indeterminate. +*/ + +ZEXTERN int ZEXPORT gzputc(gzFile file, int c); +/* + Compress and write c, converted to an unsigned char, into file. gzputc + returns the value that was written, or -1 in case of error. +*/ + +ZEXTERN int ZEXPORT gzgetc(gzFile file); +/* + Read and decompress one byte from file. gzgetc returns this byte or -1 + in case of end of file or error. This is implemented as a macro for speed. + As such, it does not do all of the checking the other functions do. I.e. + it does not check to see if file is NULL, nor whether the structure file + points to has been clobbered or not. +*/ + +ZEXTERN int ZEXPORT gzungetc(int c, gzFile file); +/* + Push c back onto the stream for file to be read as the first character on + the next read. At least one character of push-back is always allowed. + gzungetc() returns the character pushed, or -1 on failure. gzungetc() will + fail if c is -1, and may fail if a character has been pushed but not read + yet. If gzungetc is used immediately after gzopen or gzdopen, at least the + output buffer size of pushed characters is allowed. (See gzbuffer above.) + The pushed character will be discarded if the stream is repositioned with + gzseek() or gzrewind(). +*/ + +ZEXTERN int ZEXPORT gzflush(gzFile file, int flush); +/* + Flush all pending output to file. The parameter flush is as in the + deflate() function. The return value is the zlib error number (see function + gzerror below). gzflush is only permitted when writing. + + If the flush parameter is Z_FINISH, the remaining data is written and the + gzip stream is completed in the output. If gzwrite() is called again, a new + gzip stream will be started in the output. gzread() is able to read such + concatenated gzip streams. + + gzflush should be called only when strictly necessary because it will + degrade compression if called too often. +*/ + +/* +ZEXTERN z_off_t ZEXPORT gzseek(gzFile file, + z_off_t offset, int whence); + + Set the starting position to offset relative to whence for the next gzread + or gzwrite on file. The offset represents a number of bytes in the + uncompressed data stream. The whence parameter is defined as in lseek(2); + the value SEEK_END is not supported. + + If the file is opened for reading, this function is emulated but can be + extremely slow. If the file is opened for writing, only forward seeks are + supported; gzseek then compresses a sequence of zeroes up to the new + starting position. + + gzseek returns the resulting offset location as measured in bytes from + the beginning of the uncompressed stream, or -1 in case of error, in + particular if the file is opened for writing and the new starting position + would be before the current position. +*/ + +ZEXTERN int ZEXPORT gzrewind(gzFile file); +/* + Rewind file. This function is supported only for reading. + + gzrewind(file) is equivalent to (int)gzseek(file, 0L, SEEK_SET). +*/ + +/* +ZEXTERN z_off_t ZEXPORT gztell(gzFile file); + + Return the starting position for the next gzread or gzwrite on file. + This position represents a number of bytes in the uncompressed data stream, + and is zero when starting, even if appending or reading a gzip stream from + the middle of a file using gzdopen(). + + gztell(file) is equivalent to gzseek(file, 0L, SEEK_CUR) +*/ + +/* +ZEXTERN z_off_t ZEXPORT gzoffset(gzFile file); + + Return the current compressed (actual) read or write offset of file. This + offset includes the count of bytes that precede the gzip stream, for example + when appending or when using gzdopen() for reading. When reading, the + offset does not include as yet unused buffered input. This information can + be used for a progress indicator. On error, gzoffset() returns -1. +*/ + +ZEXTERN int ZEXPORT gzeof(gzFile file); +/* + Return true (1) if the end-of-file indicator for file has been set while + reading, false (0) otherwise. Note that the end-of-file indicator is set + only if the read tried to go past the end of the input, but came up short. + Therefore, just like feof(), gzeof() may return false even if there is no + more data to read, in the event that the last read request was for the exact + number of bytes remaining in the input file. This will happen if the input + file size is an exact multiple of the buffer size. + + If gzeof() returns true, then the read functions will return no more data, + unless the end-of-file indicator is reset by gzclearerr() and the input file + has grown since the previous end of file was detected. +*/ + +ZEXTERN int ZEXPORT gzdirect(gzFile file); +/* + Return true (1) if file is being copied directly while reading, or false + (0) if file is a gzip stream being decompressed. + + If the input file is empty, gzdirect() will return true, since the input + does not contain a gzip stream. + + If gzdirect() is used immediately after gzopen() or gzdopen() it will + cause buffers to be allocated to allow reading the file to determine if it + is a gzip file. Therefore if gzbuffer() is used, it should be called before + gzdirect(). + + When writing, gzdirect() returns true (1) if transparent writing was + requested ("wT" for the gzopen() mode), or false (0) otherwise. (Note: + gzdirect() is not needed when writing. Transparent writing must be + explicitly requested, so the application already knows the answer. When + linking statically, using gzdirect() will include all of the zlib code for + gzip file reading and decompression, which may not be desired.) +*/ + +ZEXTERN int ZEXPORT gzclose(gzFile file); +/* + Flush all pending output for file, if necessary, close file and + deallocate the (de)compression state. Note that once file is closed, you + cannot call gzerror with file, since its structures have been deallocated. + gzclose must not be called more than once on the same file, just as free + must not be called more than once on the same allocation. + + gzclose will return Z_STREAM_ERROR if file is not valid, Z_ERRNO on a + file operation error, Z_MEM_ERROR if out of memory, Z_BUF_ERROR if the + last read ended in the middle of a gzip stream, or Z_OK on success. +*/ + +ZEXTERN int ZEXPORT gzclose_r(gzFile file); +ZEXTERN int ZEXPORT gzclose_w(gzFile file); +/* + Same as gzclose(), but gzclose_r() is only for use when reading, and + gzclose_w() is only for use when writing or appending. The advantage to + using these instead of gzclose() is that they avoid linking in zlib + compression or decompression code that is not used when only reading or only + writing respectively. If gzclose() is used, then both compression and + decompression code will be included the application when linking to a static + zlib library. +*/ + +ZEXTERN const char * ZEXPORT gzerror(gzFile file, int *errnum); +/* + Return the error message for the last error which occurred on file. + errnum is set to zlib error number. If an error occurred in the file system + and not in the compression library, errnum is set to Z_ERRNO and the + application may consult errno to get the exact error code. + + The application must not modify the returned string. Future calls to + this function may invalidate the previously returned string. If file is + closed, then the string previously returned by gzerror will no longer be + available. + + gzerror() should be used to distinguish errors from end-of-file for those + functions above that do not distinguish those cases in their return values. +*/ + +ZEXTERN void ZEXPORT gzclearerr(gzFile file); +/* + Clear the error and end-of-file flags for file. This is analogous to the + clearerr() function in stdio. This is useful for continuing to read a gzip + file that is being written concurrently. +*/ + +#endif /* !Z_SOLO */ + + /* checksum functions */ + +/* + These functions are not related to compression but are exported + anyway because they might be useful in applications using the compression + library. +*/ + +ZEXTERN uLong ZEXPORT adler32(uLong adler, const Bytef *buf, uInt len); +/* + Update a running Adler-32 checksum with the bytes buf[0..len-1] and + return the updated checksum. An Adler-32 value is in the range of a 32-bit + unsigned integer. If buf is Z_NULL, this function returns the required + initial value for the checksum. + + An Adler-32 checksum is almost as reliable as a CRC-32 but can be computed + much faster. + + Usage example: + + uLong adler = adler32(0L, Z_NULL, 0); + + while (read_buffer(buffer, length) != EOF) { + adler = adler32(adler, buffer, length); + } + if (adler != original_adler) error(); +*/ + +ZEXTERN uLong ZEXPORT adler32_z(uLong adler, const Bytef *buf, + z_size_t len); +/* + Same as adler32(), but with a size_t length. +*/ + +/* +ZEXTERN uLong ZEXPORT adler32_combine(uLong adler1, uLong adler2, + z_off_t len2); + + Combine two Adler-32 checksums into one. For two sequences of bytes, seq1 + and seq2 with lengths len1 and len2, Adler-32 checksums were calculated for + each, adler1 and adler2. adler32_combine() returns the Adler-32 checksum of + seq1 and seq2 concatenated, requiring only adler1, adler2, and len2. Note + that the z_off_t type (like off_t) is a signed integer. If len2 is + negative, the result has no meaning or utility. +*/ + +ZEXTERN uLong ZEXPORT crc32(uLong crc, const Bytef *buf, uInt len); +/* + Update a running CRC-32 with the bytes buf[0..len-1] and return the + updated CRC-32. A CRC-32 value is in the range of a 32-bit unsigned integer. + If buf is Z_NULL, this function returns the required initial value for the + crc. Pre- and post-conditioning (one's complement) is performed within this + function so it shouldn't be done by the application. + + Usage example: + + uLong crc = crc32(0L, Z_NULL, 0); + + while (read_buffer(buffer, length) != EOF) { + crc = crc32(crc, buffer, length); + } + if (crc != original_crc) error(); +*/ + +ZEXTERN uLong ZEXPORT crc32_z(uLong crc, const Bytef *buf, + z_size_t len); +/* + Same as crc32(), but with a size_t length. +*/ + +/* +ZEXTERN uLong ZEXPORT crc32_combine(uLong crc1, uLong crc2, z_off_t len2); + + Combine two CRC-32 check values into one. For two sequences of bytes, + seq1 and seq2 with lengths len1 and len2, CRC-32 check values were + calculated for each, crc1 and crc2. crc32_combine() returns the CRC-32 + check value of seq1 and seq2 concatenated, requiring only crc1, crc2, and + len2. len2 must be non-negative. +*/ + +/* +ZEXTERN uLong ZEXPORT crc32_combine_gen(z_off_t len2); + + Return the operator corresponding to length len2, to be used with + crc32_combine_op(). len2 must be non-negative. +*/ + +ZEXTERN uLong ZEXPORT crc32_combine_op(uLong crc1, uLong crc2, uLong op); +/* + Give the same result as crc32_combine(), using op in place of len2. op is + is generated from len2 by crc32_combine_gen(). This will be faster than + crc32_combine() if the generated op is used more than once. +*/ + + + /* various hacks, don't look :) */ + +/* deflateInit and inflateInit are macros to allow checking the zlib version + * and the compiler's view of z_stream: + */ +ZEXTERN int ZEXPORT deflateInit_(z_streamp strm, int level, + const char *version, int stream_size); +ZEXTERN int ZEXPORT inflateInit_(z_streamp strm, + const char *version, int stream_size); +ZEXTERN int ZEXPORT deflateInit2_(z_streamp strm, int level, int method, + int windowBits, int memLevel, + int strategy, const char *version, + int stream_size); +ZEXTERN int ZEXPORT inflateInit2_(z_streamp strm, int windowBits, + const char *version, int stream_size); +ZEXTERN int ZEXPORT inflateBackInit_(z_streamp strm, int windowBits, + unsigned char FAR *window, + const char *version, + int stream_size); +#ifdef Z_PREFIX_SET +# define z_deflateInit(strm, level) \ + deflateInit_((strm), (level), ZLIB_VERSION, (int)sizeof(z_stream)) +# define z_inflateInit(strm) \ + inflateInit_((strm), ZLIB_VERSION, (int)sizeof(z_stream)) +# define z_deflateInit2(strm, level, method, windowBits, memLevel, strategy) \ + deflateInit2_((strm),(level),(method),(windowBits),(memLevel),\ + (strategy), ZLIB_VERSION, (int)sizeof(z_stream)) +# define z_inflateInit2(strm, windowBits) \ + inflateInit2_((strm), (windowBits), ZLIB_VERSION, \ + (int)sizeof(z_stream)) +# define z_inflateBackInit(strm, windowBits, window) \ + inflateBackInit_((strm), (windowBits), (window), \ + ZLIB_VERSION, (int)sizeof(z_stream)) +#else +# define deflateInit(strm, level) \ + deflateInit_((strm), (level), ZLIB_VERSION, (int)sizeof(z_stream)) +# define inflateInit(strm) \ + inflateInit_((strm), ZLIB_VERSION, (int)sizeof(z_stream)) +# define deflateInit2(strm, level, method, windowBits, memLevel, strategy) \ + deflateInit2_((strm),(level),(method),(windowBits),(memLevel),\ + (strategy), ZLIB_VERSION, (int)sizeof(z_stream)) +# define inflateInit2(strm, windowBits) \ + inflateInit2_((strm), (windowBits), ZLIB_VERSION, \ + (int)sizeof(z_stream)) +# define inflateBackInit(strm, windowBits, window) \ + inflateBackInit_((strm), (windowBits), (window), \ + ZLIB_VERSION, (int)sizeof(z_stream)) +#endif + +#ifndef Z_SOLO + +/* gzgetc() macro and its supporting function and exposed data structure. Note + * that the real internal state is much larger than the exposed structure. + * This abbreviated structure exposes just enough for the gzgetc() macro. The + * user should not mess with these exposed elements, since their names or + * behavior could change in the future, perhaps even capriciously. They can + * only be used by the gzgetc() macro. You have been warned. + */ +struct gzFile_s { + unsigned have; + unsigned char *next; + z_off64_t pos; +}; +ZEXTERN int ZEXPORT gzgetc_(gzFile file); /* backward compatibility */ +#ifdef Z_PREFIX_SET +# undef z_gzgetc +# define z_gzgetc(g) \ + ((g)->have ? ((g)->have--, (g)->pos++, *((g)->next)++) : (gzgetc)(g)) +#else +# define gzgetc(g) \ + ((g)->have ? ((g)->have--, (g)->pos++, *((g)->next)++) : (gzgetc)(g)) +#endif + +/* provide 64-bit offset functions if _LARGEFILE64_SOURCE defined, and/or + * change the regular functions to 64 bits if _FILE_OFFSET_BITS is 64 (if + * both are true, the application gets the *64 functions, and the regular + * functions are changed to 64 bits) -- in case these are set on systems + * without large file support, _LFS64_LARGEFILE must also be true + */ +#ifdef Z_LARGE64 + ZEXTERN gzFile ZEXPORT gzopen64(const char *, const char *); + ZEXTERN z_off64_t ZEXPORT gzseek64(gzFile, z_off64_t, int); + ZEXTERN z_off64_t ZEXPORT gztell64(gzFile); + ZEXTERN z_off64_t ZEXPORT gzoffset64(gzFile); + ZEXTERN uLong ZEXPORT adler32_combine64(uLong, uLong, z_off64_t); + ZEXTERN uLong ZEXPORT crc32_combine64(uLong, uLong, z_off64_t); + ZEXTERN uLong ZEXPORT crc32_combine_gen64(z_off64_t); +#endif + +#if !defined(ZLIB_INTERNAL) && defined(Z_WANT64) +# ifdef Z_PREFIX_SET +# define z_gzopen z_gzopen64 +# define z_gzseek z_gzseek64 +# define z_gztell z_gztell64 +# define z_gzoffset z_gzoffset64 +# define z_adler32_combine z_adler32_combine64 +# define z_crc32_combine z_crc32_combine64 +# define z_crc32_combine_gen z_crc32_combine_gen64 +# else +# define gzopen gzopen64 +# define gzseek gzseek64 +# define gztell gztell64 +# define gzoffset gzoffset64 +# define adler32_combine adler32_combine64 +# define crc32_combine crc32_combine64 +# define crc32_combine_gen crc32_combine_gen64 +# endif +# ifndef Z_LARGE64 + ZEXTERN gzFile ZEXPORT gzopen64(const char *, const char *); + ZEXTERN z_off_t ZEXPORT gzseek64(gzFile, z_off_t, int); + ZEXTERN z_off_t ZEXPORT gztell64(gzFile); + ZEXTERN z_off_t ZEXPORT gzoffset64(gzFile); + ZEXTERN uLong ZEXPORT adler32_combine64(uLong, uLong, z_off_t); + ZEXTERN uLong ZEXPORT crc32_combine64(uLong, uLong, z_off_t); + ZEXTERN uLong ZEXPORT crc32_combine_gen64(z_off_t); +# endif +#else + ZEXTERN gzFile ZEXPORT gzopen(const char *, const char *); + ZEXTERN z_off_t ZEXPORT gzseek(gzFile, z_off_t, int); + ZEXTERN z_off_t ZEXPORT gztell(gzFile); + ZEXTERN z_off_t ZEXPORT gzoffset(gzFile); + ZEXTERN uLong ZEXPORT adler32_combine(uLong, uLong, z_off_t); + ZEXTERN uLong ZEXPORT crc32_combine(uLong, uLong, z_off_t); + ZEXTERN uLong ZEXPORT crc32_combine_gen(z_off_t); +#endif + +#else /* Z_SOLO */ + + ZEXTERN uLong ZEXPORT adler32_combine(uLong, uLong, z_off_t); + ZEXTERN uLong ZEXPORT crc32_combine(uLong, uLong, z_off_t); + ZEXTERN uLong ZEXPORT crc32_combine_gen(z_off_t); + +#endif /* !Z_SOLO */ + +/* undocumented functions */ +ZEXTERN const char * ZEXPORT zError(int); +ZEXTERN int ZEXPORT inflateSyncPoint(z_streamp); +ZEXTERN const z_crc_t FAR * ZEXPORT get_crc_table(void); +ZEXTERN int ZEXPORT inflateUndermine(z_streamp, int); +ZEXTERN int ZEXPORT inflateValidate(z_streamp, int); +ZEXTERN unsigned long ZEXPORT inflateCodesUsed(z_streamp); +ZEXTERN int ZEXPORT inflateResetKeep(z_streamp); +ZEXTERN int ZEXPORT deflateResetKeep(z_streamp); +#if defined(_WIN32) && !defined(Z_SOLO) +ZEXTERN gzFile ZEXPORT gzopen_w(const wchar_t *path, + const char *mode); +#endif +#if defined(STDC) || defined(Z_HAVE_STDARG_H) +# ifndef Z_SOLO +ZEXTERN int ZEXPORTVA gzvprintf(gzFile file, + const char *format, + va_list va); +# endif +#endif + +#ifdef __cplusplus +} +#endif + +#endif /* ZLIB_H */ diff --git a/thirdparty/zlib-1.3.1/install/lib/libz.a b/thirdparty/zlib-1.3.1/install/lib/libz.a new file mode 100644 index 0000000000000000000000000000000000000000..7019d4940215f52f899b10abe659598c50d3c7b2 GIT binary patch literal 242940 zcmeFZdst0f_cy-RVOQFnkQ8;BlO&}il(Ql^R7%KM=X0uETS6*QAw`lyIYde%Dv=Z+ zM4?E9s2qwAMGhgoW3G0(@9*zCb^Qiysua4$X{|El)Fm>LazlXngH2M4Ri^m88{_|hz zN*+W0GD`l{pS_cpv)^ca+jTtgUH8@2(Px!|ySMXyeKr`wgA!jqXMcbFKX-p_runS) zcH+4@i)_kWcjdH>Y0_3`C7IlFk- zi=1bByNhi9{-FQoX$F`jma=yCcNYEQ!OYqD55|0Fk%_yb$lb@=-fwNU)XaaC36is% z?VX(cx}~g~y`9{>UH?4#xvz5m^I-31zskS+sr$NMHFU7ptgfyTKTP-W{Zl!Ngzs8E zcULzN&vl)nmyf?QTz!0@AG$8kMXu|d#2F5&U0lE-*L8l*Yuw3Dth06Y^YbA&{?5*x zoGiJ4XOXj)7xzqV;MvE;1v-Yy>AHnHXCD{xuNcA6%h}!!9w5us-CMNEJ`nEwpby~U zBEG`dJHjKm*ur(ScTa{tJUhAjIXnJoh%JFy*hJ@m+Z_3i3camU!M;kkQrQ-K>~Ze0JK@sCpd?k6&BV5W!#yC#wN!HOG0@k6%+ znM>lVe@+Z>=0B%UkED3EbW5%EcI<|k5BF9+(9G@(Zv4f93%y~Ets<|YIK#%?%iRg4 zd-t=2y`N|I{d6BEXa9x%&VMYNX7A|vk0z0fZfSD=x7LVXSaCIfn|IwgF82N+o~_6a zM&G^b#$V*)=j>$b;N=6Tq=XwATL*U-JMsvox_bY;pi9up+1pj*1~oW2^K6~m{b9Y} zZb3t2@8z|Yx7xdBmFc7XW4hef*zu#s{qbk^{;Mc(YSfO<&`=(2$ApB0 zP$A?JOoh;AxJ<^`J3!vn)(eKp-p_WG^C};|wKR_>&h{5UXWROcQFiuYLMSGJDDeT3 zqNF=dko$5>Wiuf|AU~9c8DoT5#30ra^AR8M3}|JzPzJOjTxbJY0r53yWh`N=fF+Rx zk_^C7#+{uE?uDdKFCmr&DQN>*rb|k|70Dn0k`ZEAD3ayiG-(AaXG~#vB!}cpu>#!o zMhd965ci>tXd~2ThAfW&DB`}TuMUrg6^%P7+z%GO@M@k-;7^f@-RmLjD ztzgOkq=E)m;(-9GiUuN8AyxxWH8H3%{)>|ug#JQIj zg+s)xk-_Sm-cY2DhFW3`Kp%!Q&@ds^1awU?x(pu9Nok?sNXrvz1AsOFh|x!Mq3b~B z=^`DZE5aku2sF|U>w%n}0j(-SagvI7lrazMqftoT6px0Q#-Pz?j1Z57n#Mv+kYfNE z20a=I*bqR+Awx87HXaY<6VP}xL5L@U#zfGdjTj?RxdNVK9D*mKNocYMo&p$C$dFE& zAxn``MLZQ$jnGtNI>R5Aq9$Pi3N)6jGwHX*Xgcm|q*OgykD$eI2bf|*@S zoP}ngnI3pHl+A|r%kTu^E||l0j~SYS%q+1v)MkOqk%bV?1w-fl86rzg$_iN`D^ENR zK<0H1kqoxx%H|_$G~X95fU*UD=G(%q%59)479kt7NQ4)og=n!KUIJoEx_YapCzcv# zYU5>SDOzTUmxCoM&~mgwh*zSO;_gtuwnW4Z*&;hnY!4Xr&|AheGmGT8&og@Ms)Bpw^%Ov_^;n zyP(#hwJ6X7uLJRQf1uWPK?R{8wB7@6fU*sLpn_4b4v)bh1S*t5At;m*;*H#-QO27n z1ZgAXfx{pNg~4h8?h&?98Mufn?WLiNJM}Hw?ru7ND4(#Iy@F{p$PU?3T>g# zRsi2729Kf;q-~(Oov3c_0go1g$504TG)U|q5<7apcT#94fb(%I2fm9!u@u?`;BjK` z-4ucp2deQzHNFRYj~IL}g&^$#iG4(3Uk~_x3hf7Q37o)zCsHVZLWux=Kn#A6LXZxC z>LH?fs0aM87(9tWkPd^y5h8J<2mC07jsmzOPUgUmQ7D;0#{fJ<44z6MNGYItoTwh} z0Z$WypP&$=G>|w+Bu@5#r&A~$z@_jh4m^WGrzn&G;HSmlXD9^eG^l10)yy97EHQXC zg&<{t#91P7wg)_iLOB553!me_&r|3eh0X(bt{D6Rg&^gEY93L|>jA$g2G6Guq>CU? zKqLx!z%Nng5`atN%N%$ig)UR55Wug9!LL#X(iKp>MpUo$fES6uuTuz85lGx15;uCl zZ&K(cfD3Rj2Y!n}#T2>);J3x#B@}{m8&pe)YH1Jn9WnS_3PHL968DJ2y&mu~3Y7u4 z3@+!u?^CFpLiYjuff&4kLXaMS>O-RXum`+S3|>VcNR=Q_O(d#&z#mcQ5rE6$#~k<* z3O%OK69BIfgFmGZq#96tMpU2mfY*w_>nH@N79{G4M12qVa|%5Na5?;f1Aj@O7ZiF4 z;IG8s4HSa(3RD}3YGV)hYccp63PE}e5=}&+sR#Tmh28?VJbuT4zo*bU3cUyLW-<5& z3PEZH)sIB=V-I+X7`&B2kXk_E6Os7T1OAx;N6<#0&lGBd;xDB53lzhrj3zCGzf#}| zzftHbg}y=YcT)TvilyLRS)SNmwNsqC`9Yy}3jLsb@lPW5v)c?A{Hsf#gF?S3)Bys& ziNJ4SMYq>ez?~Ghw@&IGjyRMC>o(FTltvqAOT38&7ZgULO*9Ilg?KZKHq(FnP&ko| zpiwxDB4|$>NkbKp-CtvhcngiT&^q9Nw$fw~-A1FWG};CzQ6Nax;q5en6h(XBXrdYo zs^S$ohLe!NJ7@$c1|)V8iJc%JUZG=Y6bs-K-o=5((P$Tq;sAWN7(AXvkamOW9-_LZ z2Yjy>d>@Sj6I@20uw7NGCud zok*njfS;n#DFA121_yqcMj13Z4d7?Q;F&anbOuzjh-y|3c(xe)ER7&#gG3II$msz; zN27B9&d29D@LU?5r%^6|Ul4=m(FoE7P`yZ0FZO`vi@^(M1SuaRE)j`KJ>ZvVbQ!=U za3KeNg+_%mx&q)=#o*Uy1nDZM77^8=9`Ng8@EbIObR8sa5{a8V;Kej525?Dyivzz+ zqgyn(4d5kW@KPEZXN^ccW<;U^q;4UL}As0P5Fiou`J z2+~tfttG0pJ>Yd>@Om0SssoAVMB;f5_zN1n0B~vik^_H5qn9*#1>g;0@J1RzY5>*O zMD=wK_!}{J6OACf0g1On;%yK3I~u(MZ~=bLfj86WJ&l?H{DT<$BaI+^0M!wu2Y}1s-yC=+jegUp6Tm~6u7ztOgCK=69(WVvpiRu5g)5AckinZ7 z1St$8!ihvUNQf7%2nIzk#BoJ3WL4b4phyO7VT5?A7PV~RCo7)$BV)DFbGmSNbDsN zdwan5F|ge4XV5+d?T6w7Qk($Aio~PzY+w=@a9{@*l*ph1Aa;<59Rx82$oaFQJH&ur zIn1C#3_1)#Nkk}#U_lOX8Amw#k22^8gN}mz$sj;n#xVv#N(Pk_qLKnCVwaK1Nyy;i z41$yj5@|#t4J7`!JY{@>;T-2l2AyEgNyZna6QT5O7#V!3OCWg5Vo)Z7vKSH0W)PHQGk*9i(Krhls+@)@&S6jvBQID*_3DXdDEuv+q0R+4 zKnda+FiS{WLkcc1Az9LD87x6AQV`mJ3yY;lgab(_bcIHGffZbQ!vhPDKn&GOULa)n zAyn|+A}IemH5xKph~w`y4rh3OY7FCoG5@Z{M|?gLLI<-UZ19|(hU)#Tp`?MDT@6$x z4K!q6@P;!GxS7W53f#YDg8Sc|a(K!aac;62QO+BjkYx1HfQ$ zy_$FkjGQ_eg46@>P!3B24MiG42;jglt7AB3cq%FiF&@eQ@1M6@# zase9;2-tA*L=TNbdY*U`c~XE#4a90Z@Mx%XwAgAzJcd&ni^ia_me>FcHADu;P>9FD zr{Fkoq(c#6HKcF3XpJYH2mlkoYHl_wLa2t6alsl(JOvP@qA6&q5E}u4(H{h3PHGx5 zM$SXyAc$yiSdh0NeI-Kpc$6f6cA=2Q#4bEX92=2F@ge~%}LEcv(X$+Yz7Es z&aOZz!PfLM3BrO6CNPEv}Je1s{< zW=!#t2lFH^45lPY;ID2l#fu-pN}e1-NnVA&J;N!<^x+im`EXY9D_p-5q+Y&$K2ED0 zAv8_Nz^xtg*;x_Y{LuI?hF=_V5S`cD`M_in2lbiweEUS0uR z|LB0K2k;|kjG^IJX9K74dgI5BF)(y;89&-!wDTzY(T+}I$B)%>bR6xZ@8aaFH+DF0 z_eQ8)US#hFJd3T1v%P3FP;*k+0*BRJo;qDIXl?nwJ?QxOinNtTWLyXMA&!mF@dj`{t)ojaSjx9$M3tt?f+f0eU!l%!~ajT{UGUE){YO+b}rt| zimx>HL_r9ieojRA|2p?3cz-@sCSPU0%aSPxAF3t)r;497H!Wz)C zV5OIWTPflKB{k^<;0t5LxgSAzl8$3?o>}FpNAF;=x?KgP~q19)gBob#aX>9*TxybpcYx8UU*yt`Fg1 z1e?X0;53GLg71(-!=cAGD;2R8ER9-SHJW2>fE#zENM za3G!lLog9!CVJpWXcD-P$!LNCH-jMPFG+&_;x32TW`^aRoB+f?%pow+$qkL?a480ER(KSKSP$2KX{^;Tv;bb4VfpDu&m`11jbU zdKt^XTLrZRK*dr>-~n$GS0HPw0=3B^xd3>DWRScEygRa8Tp0K6$O{D9NtaX5n*xbZ zx}$YR@px}ZPLIDTB9Br$mg&{K^y!1YqG$ozve8#6F z-^1TV35s`Df+zVxf|6{3`~T;v{-vvu=8m0oJ1SU;{##!)e%yF{&RN+>^SYT~pm1S2 z*zvk(VZsg*|0Je}?dV|gAog4T9cTP+{Zwd6afxqCSl%RGXm$5SBD?xsjO)AD>URemdGI27%E6>DgNDTvXOekgXK17HS=pnJ5 zFUDXDP|0ZUA2OM1WFU~qQkbKX1HiR#P2e^oBG`;j;80*Q;(@iGm0AWge7up3x;6=7 zaIQp%bzoxc^5P)8Iq&kiG~!$S5@016;=#vhIxqwtB38H*p*Y zUB~sEFL)2dF6P)990(tcH=wXlimc+fu?wZ&)^eh zAs#wocrrGi-JlKA;C7k;?S%L`JSRLII?aSwI|EHeGlZ}gf%}=TFCm)|*ptkf3A+#q zJO=DRgxHMpB4*-V3`0=5}?n@Oq*Od@%|V;tgWeU{DP~8&HUdP{qMO z6?+h>cq2vBHxYJZ6MU4ym}=5Sz!(#R%@nZ4zz++7DHfwdPyiFj@y3yq23PcHMKx4)3Pm^D3TWi{q(Tcn<|~dkHTL?68nf!~1~T0XhLoJeS5;Dtqm7Y2ry@WDU}gXCh47bY5qDOg^T2onr^u!xYsz!)E)0`O6;Ny&r^ z1_D@!kCB!D1$>N9zapH#;88Uw=%oNpn3UE#Q1 z!t7q<%$vnAyu`dBV%~Ma=>oGWBDC%`3V7WBe3LV;n9#aF__$_DNJ3`O`DJ#V9iFwV0odr5pgn^X>s1IP?M+#_J(t9l&^d#IWW@P<) z7}-f(eF2Ot^{*INI}+ILrc0LtGfTwX2s!(WL;lXOwBKR601Mkrb!|j2kg|N>WVz1> zvQGaLs{s-F3)EN)q%7ohfEpoX$#+601=K7svHm!e2If@^w2{yf8{rFt`%*9mF1D-w zFv7)>1s&K}$lFZ&<8ZDh@DCa5PsrHFZlEm$XiGPc3GlI9K-&l%OP2j8j+%`EAmC#; zi-3@Y+i1v%A^fY@q8$WiM>o(Uj+7-m!jZAWIqaf=qXj0`AIFJ-b`w?>Xjp#?Y;1ft z&>jLrC|Ry)Zg?*Z4rCu8V}X+W8z1ZT=TnNKWW~FpM53Jt+GLl1fIJ+42Tgc5NFENt z1A+%&XyJSdJSfA%AD&jBd-?RjNi_K2BQ&tIz}5bZsPzK6R=jSG!O4I^+6W}=G3YEF zP9gj)5VrmtVGBGh1RjWpCO$3}O{0OdB_n-;V{%V`=t*MBNf1>hqKM;d3F;}r*OIXW znl_z~wf^`t5j_o}szg*-%-p)+Ov2of(E{T33=Pb!Kh7qi*&wP&L>2H^u>m+HEzq`b=mm;7zpV%SEpdSPG;p}U)(UX}Z5)~w z3eNiy4euLpwZP(DrbR&30*4Dstp~nB*jmy*R|(WrfEq(;QpeXgs3MNNEdr?P-B33O z6fm_w-`)hMVvfBn2B=$vo+VJX3Dj+X(j-u-z}6D0IHDHlS|MwLs2t z%tRnH03bATeJO@WQ& z10VYj4-dpFi@SN*S-{JJ9LLB4FDoRZ?Cb8CYKPx+H=&6(mL_!U8yfgn5e6c*iEyzV zz{HZq>tWzx;c5p=EUdC02?q;ItccLCP|`vN;8w18IPMh~SRv4_&=TNWKNH$j1f(nB za=!rLSHilImVDzN$KY<>71l)39KySD^S}=O=r->sF%LLbAYy+37_hCt!*&1|u&iK~ zItId(GcS|@^EMKq73fwG;aZ_&6BB^LICgL|Ay|QCh0ikv%mZQ-xYh^|1VR;{B7p+j zLa0?@UKhEliMz>F{~mIcn_G5xJ8THK86M4mc|fcJ+ZqF4K&b-Rx&y#~N(Hl2F|ewf zdAo>t9GeQ9s)!J(P_i4$i|5SaSXAIrg+Qc&dBB7InFm}cKq5k$ za?GiJ4{gfLS33-ZX_tA2iFrvJbD9KTM+kumEGaBs9EPHpDzyWu6wCvb6!_8<5Cnb{ zNYqp??>J{(8po5SfqB4*(zu%u6%j@hpwa;m7|>IkdBBE(dCG(fg_ObgV?u%g-zk0v z>@bj_UFKyG^MDHlRx}%G1uhgQ(z5^tBq(6W;B(y74xcCHF+nbdy6aW)S2R1L7?P-C`6rlaK?xP1J9L z`UrxqiA%(4r3@+sH5T7t5aitfwYyx=2z-x0aC;AO${1AE4OC8m%DaIOzApxPz@P^J zB!w#&1bG#p_D~E|$so9`gq$h{RdoYZ6QJsDAZ7eW4D^^mj{ykQC)%^cqIs4Jm#D#hkwxftwiA#E9MdTT=EG$^yAifE#{CGTuRkNYL%P zeerw7SPC~Y=skm)8B6?ujPOSWePGZ>m^3X6YUw_0;EP*{>?a1bGUyZIi9Zv(&w%Gk z#xD@Jk>W25YGcqBn1ElQm}GzBt|I)MK({mKJA>N6^dCg~2eAfnba*`clbf)=81$1t zzo70827zh^bjWY6q!X4SSh}Djlof|VHnK3MH?b&`MVnX=4r9?q7KO1Mcr%MOvt+>v zXA#&D&idmB7V3)tZiM?*3dE5tSi6Nqku2K62H>qwOsw6;T}3#G1#7pnD2hef0Wg|q zM}xKqa)`AtEb*Z`SQNve9jp-VWD%(DgoO2W$7R zXg7=Y0Qg=O?d7c9$0D#}AAsy9_3iJmHi1~1$f5)mC4#jF#MT}ZTYHFDdzeLsSacWw zlZbW_XYC=*+9RAzM_F`)MMuG=WEO#HGE{VoD@kF|F&3pjNou#X$BDIREJ|fj8d!UR zMaNlm0>DqQ=p<)tI*Y)LbO1R;>O0kAZ3eOSG>bA=bQ-KZBephEY;6{?Hk(CREXoGJ zvqbwWXKfZ|Z4PJCITq!x=p5K|o<*Q~9xBS^N-nS{mqiz#B(K}ri^SS|7Ui)hAFM54 z(M1*&0Qe;qUE-|0%p$PkGJq74`U-ojy+W+L%AzYQx(e1_6I)v(w)Q%)_6Cctv*-o@ z-Xz*LIcu+T))sR%-C|KOi*A8Uw^;QJ-2-dO zSag>~WdL5zqH@mK`z!)G?gPjJQs09fYb%Jg4_Q>fqK9B@rP$gkv9;C2+D9y^X3--6 zd`z?-bJkXK);{5Es$tO+7S(`FPgw-2Pobh`TuCj9p0TJFO6t0;ttZw#XHgxCo`bb7 zSX9rV7Xbc}MK3vPU$F@6cm*I0q`rn8Ya5BRuUXW{qSs*U8?m)bVr$;YwOr)WV`xDEZWF?Pp?b8;d@%s12pM8O`D4}mZ~+6oI24{w75$*{HnNEG?aRumsru)m)a^TpfYhZB79M#~pR z^I>oi5Kaed}v}UoB`&eSbhNB1;u39i{q~F^~HxK#>0s=_`L*Z z?;+ZIKwAVkWZB!xHDn(gXoH_iKtuLJFbx(eur7fsNrba(u&IQS1KmwLNSb&EHkYuA zgeD$_oh2Og1@I(Tqqrs>f$$vsKmtIHlKPHzH?hmKWYVBxe3Z;b$3P^7h@^l>5a-r{ za4J+p;o~IxIH0D%VKu%wd|-s~P%2+uP(o2E-DJhTAo+}WnEOQ>5apax0b1T0$)nyP;3gDM9}n`I zH!`S-KnN=O17psheq=An)v5$l!SCKsfAY&WhLGb@T-1cCPz9;T3(iv1fd9~zF4MRd zA+U>36$0O)Oqf#cw|rgYy}-C%l3kpo5DTCo+!25Ppjf1ktRJ+2s}S1oo52cTy@C+f z6{#+EMFcI7Lw)_A1)NkrGUJs{KcpnY{h=!Eh?fYsd_|<<2R!}&c|j#b4g3#A|4#=% z)H49efB05n)gRMCZ;`LfJ}?%2fgtKD0^9o_MGxrxeq=0^U@VmUq30RY|Ib(`!&s;w zWu)Q(jbO-Oguji&Ks50G{4vChWX9rucPKEHV&M0k!P4CwNe)eN^OpN1r+B*ayJ%~U zb(4bE0S*T8$iYB3K?0iuZWbs+a@9a7`JCl`*Qv0D%Yws?->$ZtBOku0Iy z6o7K$a|AY05LYE9FStxgvT#n3fpdzoAxyADw`t_p3=E+nQa$Gvt^Yv|A~?H9Ax=Utjp{Nl49iX<$5en{w}$tvXSjiG={*CO zJy_~l81z9f=zUOMA)HVNEhjzP59WaqOiv{d40*q0~Mk|&Yr*zOvQaN5DbQs zCvb#8oGXl=E zB58l%54RSV2NwFptCibFBEk$3?8dHqKH$OeZ)7gCsm)+$F_`;O90_GTm1G?=22w4B?gM zJYCl;0xuz+_}uy+1*=iWA3s6Pw!j2}+PU9)|Cf_Af|UF4a`DMgmQX1k{I^F>a?J>P zxepiT_1dp;eU;>nHV@yiDUMCa@lJ>Ix75fTyYO`FUrm+uTOL2yt8IS1*QKDWU`d?| zuVd8;cRDHLs(nJ49P>>I$RMAQz0KVgr>ogtovh<>ey8!% z0106YRe&Ds(^9DXxHUXWIOyDYiIi7`hetoW@aE`k$-pt~Jo%WkUVD`H$vw}P^$5|K zyh>`Xms2dY+_AB3o~I`qk5ql6=Nvwl=kTdHUczgA3N`R*o7AR7*X6(5e4OcQ)s)-k z?S;!xL0j^E)u}ymn62}q-{+u;?at;8e=fGqwzxO%+yoJ?Ao+z}{zK!Gx;fSHk0!6W ze*f6dwyFw`Cim&T9(#{5-Qt>2e!=dEzYc5CpvH{0HJ3hlJ4p7~Bq87Gq%l2AK|ydi z0?FJSdd_Xp*>E4!>!C~D;aB$eBa!2pnH-p6IlDipMJ1w51;F z1Z8rs4tDm68+Mu}opnfZgGrox%Y$U8NViYaU%#(OxUX2`@U7Iq|` z!{7DV6&NEk^y1e%GkC$VnU(W4c8Ix)ECb_CAIPU(D>(?HQv;I_P+3K2q z-*r(z>NAORQ_T#rXFbuDePljR`pnlkjDg)c*0|`SUERVu*R+o@-lNuDb~oLA*1mK= zm`g#@1D~M=FWju-*T~#qW(xB2l<2`DHTVlJPrP_TQ*bGJ*U}tq*5mB*!e!8^kv5TP2sAb|K!}+HRPTV+@UmH@EJ+rCv zoSy2ZOP97?yI7(ZcXobia*jIRp!{N-MD^X_i)t4Xx;`GFyUyk8g*o=u>49!5c5C}+ z8D19T9Ep)B8d%3)8vPM|@?#t-B?v`i88Dsb>byPRUP+0?i8D*yHP0PXzD>LG;E>I6 zsV2{}t7;CmH5YuJlGJZeV4|P?yU7L>84~l(yPADh!M=xshNj=Fcied-{KPXUt&fd9 zmO)0^rzfm8FKsbsa5^u$iQ2nCZNq)jb;<(;6}c<)avt2<(=vKX#$KCg^;6o}nk5GW zR=);VcqWEKYUr0=RawVI7|4voo)~l#fb@P)hnf)++I^RYH|P=hNnS36^I4*29_Z zzltW;WQ9uOcAHa=^ZRou8qM>bu1li5!5*N+UOBo4{?I4&@{ zd8g0%BPY~a*pbUh9p}VGlr&Ud$_Oav^EE>sV(>K*9p z8KCy{uKusguM79D%l~CCDKv5ZxMkPMg6&dH=IF@qKPh?I*=LU2I4o+`tLB@}&C)v} zbhkyTSl>AxY$)-wdY{pi%#I3|Hr4nQacgZACRC|tuQ)rxsMXVB{T{g_gQ-UvWfxyx zovu1`^v?B0?av;3ENnct?a&^rua7b;;`-FTnzW!MY)SEk;tLy1lb)FgdilxfdH3)2 z&M?Zd-0DO4!FJ=K)I;i4yeBu5CSFQ<8lWhjVBznPKl!~#M_*WmXz>YM#ay zt2N&Ai&fj~dm$xRU*)6QH<80HMqa7gKb<_Yz^RtD90PdvY; zcy~)iQmdojmBLWHu+<+oXgxV$YEihw;6c$n*>kC^k!r7L>(_hTe>OFGZ{y-OE7DtM z4&1qC@F26Y%S(LIYT_nSqDl#u-lj=|TX=~x;!CRDPuSiZWt(wOamc$=e^dPKNt0{& zrR{A2?W?ja4oL;_43AHlXmxE=<`S^n-gPxb}WDAwoF-C*Dl28l}^=_qe@vR zVJ^ClZ>*SIAg@s0ceZw9z?0~ry$8-8`(*P|c7?(fk8z3vM<26B3$E^4)!|)hlOV8Y zseLOb&D(J`LIFiyS~DZ{?wj%TUw16m%Gdbp6>7YvQ-i-IPtBo^zg6j_v7V=vTjWmqqj}zD|mX)ENaS}aJ3`7o*kTCD;n5u!-&LhCtVe8*H7K4 zZMa8i!|r=~4o{b!IIXXBe$w@ylfSwqUsB9`W1#gT^ZYFx6}>|-#+gA&c4)jDP@PKM z4MvN+HImNdtIV;v%b{wApGn4_hqMl$|*~3 zSe$R$anUQ*bLhz1?~1?Mt%_YXuGxRPzl+69?Zz{`H`%pkKdB$+{FlYev8H#`Uwkz4 zGtMpDx#ySB>8Ho8m`0|t6TRT6=^wl&t zaxc&uk2q6&e4WhUVf$(xo=T0~KElLw=*d0}8?;*V&ldOy-%W~6op!N?KVZW62lKKd z_w^dpV40MA_WgImc@wQ3^-hpl{Mq72ZOVuCl{3d@SFZJcyD;(C^oqNZ1Luz{ue^~N z7d^w;M7@Z89W=dB&+yixbw0BuWZb;xC3k3U%;Tjm=WnGQvsR`zyzcny%-6c`VWM5V z_v75zZ+0m5c3V|c_xn?5WU#^_-S4Jt0fEPcO#YnU?(83U`OX(zwcV@ll$e~3FHqH8 z<9RL(-)hz@8kCycvGDhhL7Nt(%*OIV)4yIlJLcT}(Nzw5=R&W#jdf5Oa(Vgk^;0fK zJ-F~jbK5xS&bjf`XO#Ml4J?dvta;scqs*y&g{E!FD`Hn166o{)YHBFm5|A1vwOcqL z=Gp@X_~qR2@V_jD{9pSXg`J!j%FKEnI7X!!<^1Gr)z3)2pKU2h7%!Z1EibOgbLx#b zqYH-}>==HbHs!?9UNR$PPA)j}VZ$Kxa>JR&^y@zicA9?vXvA(m`DNF&cI5R9>-90S zW~;30PI|P?txflT*t3yK#&33x`PS#h-7~wC2S_N+&0D$qly|>DyVNZX`+k0Qs?R8va*PI-j1W zy>tqGm;dU(q&^NMhv&S|oJF}S(My`zDqDPx2Bdv7Izrz6=jW|IhIu~ZJ3NbcD^Z;$ zcy0gVRd_*=oRhTfbD7ig`Zp^x-*?;y@8j)X-66fUUG-gA`sb~EbX44qg?v?Bo~+yc zw)JYF;Tr9A8;4&1D@ri5bMlgsgY|VN$R@f>@zbaAUrds!_U_l16fja$(P!vV{m*ey z&tm7s82WyH`bh7B>5BVuirHr?b}hDczLIO;^TDS2aY5cWcEbDx*=_}sl={zkmNX-! za6^&h%F@`R30Dh^Yt}TM&O7O8vRHL|y5_3}|J&BN2hw+p3YatAalh_pi@>t*L3=Y6 z@84klp>&t}oE)bczZ#>CV>^4(z4|eO532eUY0nKk^7WR7kx@dpop1ETjW_ESz8tuu zkj@ZTxf~yw71?{u%7#0wIqbURWnQ&UGosyMrhPmol_tk5o$1j_lp0m2F}ukjDOu{_ zC-cA&y1Vx$1g-x$^GED}*0kW@pAm--TRimb*lC@hs=-?=+7uENKSsyvTT^<3l5M-Y z-@@uGaWBJNTc#N3;li;vNnSp-{+nf#Z-!No5oygkXY`L z&~mB#)}T7sxnHK_s}5M2rT;Tu(oXU5lg8iUymETa+U<7x#NY`UrJV(Lv}S)8GI#ow zYiGXf(z&atSUlp8siw(<@wF-2Jx3MKYp&6FT{vc1b8KbuvZ4uBBW9E%z5Y`-HhP}6 zvl?$qM;E5QoY-sLP{Y>sM1- zwV&^4ROG<|;LxGpJIu`P_iN+1gCxGGwm4}e3r3;vTt+6Q;l1~KM~NK`qnh4* z93&;Z#NxHv=2F?M`uktBm&}-;9Mr#Z-I3U-iT#VpJJp&;{gqx=8x$~p%)u+3HD8<* zbrc_%UJH=FqPaJ3SMlew1sZ+$A8z|TavKusJ>kxM-K5!i`#z;w&k&iP{j8B(-7YoF zz;bEEf?ZE%o>PxWdluTda*{!E*2;H7mldv9lT)*3$-)WG1s4}jinhwzR#$l2k8#z! zK5xq$m1>9dGvU!?Dd}FiecQv#?}fN$1nNZGcxvsd?!h~3nj5kDIQ1~0NbqC*;7e({ zjqG%Tk5mQ4lJ|dlX=-Hg&Pfk9FH4wTHcZNY`}@;vQn_P}n+5Gchb$EupKU&Gzoc%2 z{s6^o=jOR7$M;FT+-J{sb>qs>n{IB{Kd=83>u)UNh6;<}qvgk2!*w%kS<`y?N+PwVjH}s~2@kN180I71at376xvw zDtdb=Udmj%_x!3r>wUhRZO*1Ea!=Pk8U1D5R^KU4s~foW&52(R{C*UwJlx=+ zWs^VrdCR1Xiyl57gm>Pg$gaHAc=NlZ!$AjCY;!$v>#zQEN({5^&h^qhBzrts#k6M7 zc)mj3<&9=Tny-b1d-Ojmd1^u65$*CJ69ePk9PE6wTfQ#Q_Qc{r>}bLAviR+CiyHhb z4oq*mUHtg?HklA~)wh|qDc>woqW=EF8QN>+?^OO0Ur{l?&!R22jTNW++_atA(Wu(C z%zodQtNJxguIK#kE7r{~ao zt={`=+@DOjKRESNtNkkJfCht|LsL5pj=m|~eleY=HF@N+OmDB9N=?JwZ@%p`Z1CLr zpbKirxql@DY(B7jtmTB7EXAZPpXwy!^OARu{Nbjb7Cbub=j88lLGjklGOG5k*RsC$ zd~NSuGk-5#U0JJg*?-Bwh9>D+UCU^J+Fi3*Ri1b5M7JK^VY*29`h*+fB3m5`nUn4B zjqGhb`?QbTJx_mY-%9tsMthE)D}Gix?De638|?N)D_s_&Cq zM|wMFzq<9ppwK#NwW!Ttij<4ehN3I6?faHqyEy;X4As*muWg;Z>}sZb9lh_1RZhj$ zYrA(&bLy+8^4n<9gT=+0o+DG>eEm>|EWN>8!iju&BYH)wt?qz-zUnp&Lxq zkJd!HZkpXXg8y-XkIicPclRq!rs*c@|2V;K&--!s=;RIK-Gf)8_Z#~}wl-kv-tbRy zqvmGaI=jKivfue(symvK6NhWm=jSg?pQIN1#wW7G>kXzxj{lS%d3k}|_2zpMjXd01 zm^nYT&$_#Orr^*`)g3B!)pzP%yi!?gGIFT^)`9JTg$GZ)EvnKsmx>Rpn%}$Acc1kN zQ|GoP^`~>UuKO}t?&%a?-MP~yo_Mo0@Q2@nUmG5(6z1D#c}!|~KHSISV#b?0!VkAr z%BEO;zuBk?>pt#3JOzI95VMUQ;i1<~NuKSm zeI#%};KU*2od@5<)yeOEwD^Q=qF^*TXnTCwa{q=!a&6NOSR8*`d>e(xY~wZiUX3)% z-}LZ)y~O-A+B4$6DDUhuzoNqU_LfCAeWoimc1*RkU)H9ofA!41bFNM`PC57dU-sea zWo}uSW2hVdtv{>-I|mHzEDBw_-b5pN+@@n2oB8yd(>D8hYu%sn#J%-Y>fiwBRrW)7 z8Z;a==t#Y|z4XmwEnd2J=CYAZN;|!7Z+<^)?%-igY8Qg)6aLCgUVdP6K+Ocpv0IW9 zv*ab}K8@U+oR_BW_Ty*T=-?o^?~^m0S;uRw-(R)%`8Dg`Gkf)}tz5lyiT`C4>86H* z(U!WkW_Q&DcRZ_R9d3=jqrAv;$G964t`|DCM!s)9$#~k@8|@z1-ly+Y{dq=x-7AaF z9o_SKSnV^rjr|Ud9yoVE&ZY1repAnH|FVBWSt_GphEtlQD8tz45wS~ol>%zBbw){X zSg@TB`zU?HqG>H@<*z2bYYCW{w5ELfOZ7R`uF3CJ)t$XZw!XOaDm%-%(7>Qgv|7nU zYD(;tq7B!U?rWd%YyQR8C8t&Gyqs-Ef1Og3WA$a5Cwwk;xM-h0d~&g`hxZEY4^2PoGe)kh2u!O}p7?Xd^unN*TYfDUw&m7TPi@;` z;p8j-?#$@gas0$3hweR+X5*JfA6+>pLvQc`tvyZs*UDta{XV(2e4OSSeqqc;)Ax!` zu6btn-e`tamE4I)-FjHHLst2s!Cdkg@X`AGbN)lmu(uJ<90Y0A60d&Pzm^Ls2!F0C z?bLtXX_@bga&w>X8#_9x{k>J&*Ghj*FMFq=(`W0~kYjGT$;*|mw!UrGUSpVeedxw@ zLj_TPl`NUuiR$VPmPOkHjsNsXu`0>r%Os8cdn-gE1N4^;?ek13?z3Uc+}KA?zx%E* zy`Yz^D0hGHu8Om{SDdYFKKK~q6+EtPYg&w3behz;k29Ata;c(T9p~c|@>zy5|c^ax=A)7>AI%DD^(wn}yx7#Xhsb1*k8vZganwiq- zFmH>(>(X0RQu~9mUJOdEkhSQi|K4$s4KwOQZc{Eql^U*%X-RNdKIm5Yr7v@3>jtRi zPx+~zwN%kgGXHnulgGVtyvE&j+dWHT!r&8k3OY-Ne3-3u?aK7II=jA{DOS|Ht7&>@ zMD6$qCZjyJr_?mhD;`t$TB91Hf}T?Z)KNW7)_frPkfnD zG%9jVY@|z4|D~+ujQ0(B6J|x*xc&Aj_%K9nenI@l>|KYWR$LkGk!#u}wODalQ|PUW z`+X8*0>f4B5Ac}l`ZLOI)nO<7n&6lm303>X%#OYL72^X-kBW9#geYwobo<+ZQAKh7 zj;sClH>4>9vuT( zwlfPGG}ribi|RLt0SQ`8Uv3=;XL83izi)_wKSOdbk~Bk81-{2 zTSK2^B^yjyHuT-foHZ*77cN;;b5Zbof>rdS#f5d-@?06e+gs*c*L0{>nG+p;CfzGN zr7WzyudaK@J@W{izzkpOr#BAsJk(c5iuuAt>6Nc4=_1uANbAP!$&jsD2T; zSd=5tnrstsqRCD6#guK)7Y{xa^qn&$%BK2 z-k`K+`r$qI`c9iDeLX4P+V$(?pP7o6l7DC!ywSOJJ~QT!p30J-OydDBHFn&kQmefe zq2Ro8NgAJ{v{$LSr;m-Cs&l~VS;lpZ%>jz7E?>>9^?Vz`AGBO5d%ymxvfR(p`HMG5 zdR^?W9XZr9_IvTW+sk5C*=_f49(U8i#lQENM(yl&yG_mm>z|ChY4O(!^}D9Ver6x{ z>@3ZFdfMoh!2HUwv;n5FA>VHXjX-d$Kg>``jzr4*3!+-@R9swTLPBU zlv_x>*GzcpseN1ix^oSi zarKwwx*8$+G|ed5ZgO8ZI{gDE{7G*aJQeSR$_QHN3GKMz329XNd?{moCb|MaQD^|)%Z=X z_SPtu4^2%*Y;Wjua;Scb)&`+Z!P(U4N$>bI7pFZKKViT=$*g&n z4WoL!KbxC0ah~D#gx-&=EIu!m`jAq4WckvyUY%d@FgkVtV<=`2*uJZ&aFC z&xn4_7OCqsP7hl5=$2u|gjqgvUiWT3j+uLC>-?8XS7tfV9j_bGwfN4T?IwP>ko(xX zUUA2p*+r||dWU}cUAIUfII_+3yY7%_|@CG-$|gJUeC4*Yu(C=f<49>QFU$|JBfQdP)vs-Ig!EJS6J!l=Yf# zE4NZUXQv&xW*`sVG>%KX?X%vE-4 zjm~I#=a2iFZY_yq?PHubkH7n)&$j`}yUygzRg~~PwR@%du0j1i`yRHi(olI7d3}FD z>%nPW8X?!lgbz14XkB{!hVmE77>EK^c^S_R$xpsL?E56!rjfOES=+ZPQC{Zp*r@jc zYr)O)59T}9FZhv7KRo)PZmrAM$?a42c!umX-r89v$Q5mVy0GnO2;;Xp?fEC2cfn3C zCmnc|f4Ib<&n(Rsb7&=Zse&fPpT>`;wT*&G&DT$GYA|S_Hp!j`7I3ffI@9~P6@q~ea`aY=ZrO9sW^cxp_9^w# z4lJo*2mG=Ugd}=elrnxriihg%*8aTkbzkJLh`bj@mpUz)TE=R| zl=|N;Syg{3!zPts2YR_UBCQ`2e(D}xam7uqE&Axfxbv@asukAU&(t0jtm5)>VDO4d zuFrK2&=E>cGDa>_xHZepX1L7F8|I!JVK1*`&W=clk{|m$Ny+MPqE)9sRYJnN=BMlX znOXkj=i4i*W^&QP0*UanApytknpnJWXy$23Zky=cc<*3G*ooBq5xjT8*{#`=)^=Yz(5)hpoDG&&VbwyH4Xw^#!%2 zz}{9v)B-%6f9c=-x_{x*gnhPAa>$Y~0BdyI{VIPL7?Y(x;6hGwol^iW+A2 z{AROmL`S-{O7u3v;PZF(RsWRe$h=~t+U8QRHf}|H)dU6Gvn#Y!JX?)M$n9D0ab&7N z(*I)bz2mGZlE42O&JDv1GOn{atD{@3sG|;w2}ea`T$w>I?z-!)vMTBtX2x(8byr;_ z2T2kI$r&UF5+q9!MIxjSa zz3Rim&)wF3e(Bfeb~*6kwbQ45zHUkHj+1{}dq&};-~HkFPInHwyw1CCH9h`?2fn_& zLCqd_#k((?9XU9@#WlCbmUq4K?r+}ScE(M&&nl}r`M0~zSpR6Zle_2TKQ!sVr~dNI zlC3AzA3jr_zWT>@pPu>h+*dnXxc?t}Z&`NQ9XTIfcKO4bp6&HkpXpx?nXo^9NA5jO zw61&l##7+s`zr;-%suH;z{#X zHu?RgF^~SOdH9N+$KDrzfB&gN%6m8LAG+-Gb?@BSX>aG#3IU#N-xqF)ac(_L4?GHTi{9WhHUsq?x z$jQeK+i>oEt>;|(_cxFGFu&H5?a#UPrA1vf9vCrwz~5^g{!3}){QMCYo>Z{l7Ww1D zKR(nq_vOEA{cP+0>$}ZdmMi(~7BqZnZu?7jFCW#k+czJ6b;j(o`;@h)ekyjx&%e3* zxmoR`}adzcI-L$-n5%ruWkF*an*hQa&Og``9I!$=;;^!vGntTaMK&_iC1sS8;TfJ%a z(skqK9BOdE2h|@p+}8Ao&FgBe9Jl(4zn!t6?)aOxhAw-1{mm`jSk>%!H}&AOzf4(t z+R9nI`^}g;vQ}|q#-KZ69g<7(HoP`D_tVgG zO{sX_H8N-4`}t?5Cb#VvpFZvPgWuROa`%k)F8pU=>9AU%Ll^bQ8PoNnWBL|8Us-c@ z@}Vp0bicRyrJeUQ4Odm&e6Xmx+1+jbQTKxbcZY7Mj`!YsQh4Mut&#^9d|hktt^b&` zVaab^|MaF#^JaYZ!^{rP-o54IZNJ@E=i1I|pZ)6ad)NKr`q!HM^|EOr4L?k{zeD-PyJoDq#;f!Ah0&8gd8Nj6 zcW$Zq?9!WJsrqL|%3hh5o1eclPuku3z_iolk+xH2-uGV4ie@_o-?8=3F=uU9+IP~b zzNfyme$3RrO}XNPbEnp9`TE?Zm(QP7Jz?*R*7EWjQ>I6!Z_jH!dCkk8yTNpXw~uc=zV*lV4Dy_dJC`B3GRPgmYHX2&rrb9?6eJg`P+;+g+W44S;ZR?lnN zCx@>&C4At42jdHW`u6Ty|K8#s_b>Zhb-mQXRq<983u z-1bP7|`|H*X-#v77&*w@%Sh)DcZ3q6idiMQaj+%4p{Z~zkZ)x;e zy(S;jJZIypHBP#&UbOKyW!}?wZM$pVqA~Yx`}6q^cimV1;Jkk=Yc{3xocmgzc={u2 zhWzn??e*Txd#d;B+=}R_k>h9nId;Z*Z_c`W-fMGni_e*QTaTtwD!qm4e;z$;)ynfr zHVo=?`__pk_rG`Hq|fg;aK;mr!v{nj>RDqzPJHa1W9nV?SmOS+vCyr@^?svqtL-zM zE_i10ITQ1ypH$joP1pXPyg#qzvzzz5p1WzAYqxgIdtbh{{pts{O!@Bj8(Tlza^CUF zznOW)?T<`)>Z8KfE1v3*ylv;twJIOIFMjzu$A)v8cKgSmpTE0%;)BhqeqMWg^~#1r zYHa`K`kHILxWQ|E%capN3rF97Mzd9S9sljM4^~`%<-<>Hnz*{M@rHG`ZEmnF_r6O$ zxP1TEITQc1b@re)D_&dqeBEh3e>!*WfueV2EqvimQ+n2|J$3k~S*z;BmamWZyk+aH zXPvg;{x_!F_w>1on>C*C_Xkdjoc+i-y{6{QyJS&b*P*w?ww+WbvabtzU=?~G%yysw z{|WzbQm}=6^u$aC+sCiT}QP@BP=T?oj#D?DfY!f6eEQ4t=icF)hx#_rqBg z*LS<+r<_`K+O|INyn1yP4Y=)@2N(Qw{@Ibw2QS{+rTY5z>wbH~(_8PnL5n~4RdHL$I>vkzvH7a*;{gUmALvIii?1&g!lL>qlIxggeYHGMc!Z!IS zi^7qd%y(oY2v;~^F`e#w+Cp&E(yMnr*6hK1gZiNs5{g8UTKv=_kKIeaznr`O)%+iK zKK@j*N5hfhveoZ?@P5BZ#F}_{=_aH&x<4GLX*JVzqQ*KFqwvBDLS9_ilKPD3UYbdb zpp%hA;-42h{Lmx!J{pQ7lNxMMzau@RJ{vE@pnEw=H`_Ag)liYL1wm#sFZbC0C=Pjf z`9~K%@@VXko<@xwn~o^P^)$B=jx0N3guKv6|9K@d7+&bNM_o-1fEUW}IHE_PgL>DF z3|#g{k6>hp!f4{$sMjt^hkGQvkhfg_bV%}Nh5qT6!=LUo_%kV&KP&V2^F>YmbgAWq zLSN>`LbHyIg9#8Z=@Z~5=F)8bz5(-CaZ8T|S3O#Tce)Tg)nZ2lZR zhd*QM@MrzG{FzmkzDzqmnt1d4s5k8bessSunpkpC)LU?IPAD;;UNkYeUNp3;UL^4Y z-@9EBO^o2M|B6fULLXgHGtsRyns|l(-YAWFOD{bp6#Dwonu(Q{MH5^3uh$jP#MmpM zp>0>>CJyqw-IdWq|0|=R*RRY=yvz5k{Pz{VJ6@Ha7<5%MF`oYxTony{aaGO4fCkb3 z8}RMdW0MAvJu?yC{@>!gU0hnXo}Ux!hh;ZhlT$i!j~q}+07zaDIVlFi|UWx-AR5nKeX$e_mMnJ zlNknj?@>QeY9@lNH4gNZeNSexyTz2$F~3OZW`#M~#BTOGUw!8ElvG4BUf<@h{6qg((M#EJ~g^83)5_#)J6OQCb5uz0Lc~b4`7je{z(9C0K2^_t1ujom#|x>xRzdsB{3dVU3Q z_W@8O7n|H);WR$sgBnCHMG(D8ze16#qJjm`YeWFOBa*K@lCJP5Jxa-=l4|T8qXHS% ze zgb9`BS1lr79vvfCUdJ%e^2#+#9$^cPh>}NKJO$4&)Se?$9w7@XKwh_S1)=iz*;Bwh{T;^|FR#>FI2 zBRHNubp1_|VvUwJfP!Lzvy{8)T95sMF?+;YvPMou+Ns78B&?XA#|dsU9`dr=L)w@SnBJ?sd-XRV2t$7c=v z(Jp$&h_&|~{KXM|&kBgdw~m5hw?1e>^t}%#DAD9;5rXg$o6k?5M#R1&r`V>T{^lT; znug>wia~fjaa#ix7M@R8d>AzONaOG+i|xwd1S!v`qAcPZ9_0VV)ON<%>d1j zrh3@#)xb#E%P|eYH&BzMp?zpOI6|(p;z*z!Z9IxK0w13tR53kNtQpgWMe=R)dt%wM z8iB6{A@`0{g(Li6d`U+zJ{!VOnlQ}aNb9wh}D zgU_x^)fjw4->VntU{^$g@!6H>mN#u$w7}1px zw$Vi4t3fEfN{z@jI}&WAXGUt}Zi|I)N$ebO zOh(-!Sv}yns`!(V)WtUk%x;b@9(IkLyj}yAtrH@%3$OUaE?n}V?YCeHu3OCC_`fWU zM6n-*0Ti}IGAPoGxKcZTt@#P^n`1F^wFvQFi%=j?p#XF*0_grb4Ox656UhMC6{Ot> zfbA)FN~D3Dl41IL`Moj~pQ#h4<9w?Bi(Cpy4NSXIJ6%qd(?$N1=^1i{Ry$M9)JIIC zOP(bJz^))0PuSm?lZywYB^jo5q>eH@*JpE{oTp6d`oGSX^OYKT6qMS9QdcgNbN`d+ zMH&^mh+X={st@YH)bjIGkVqlyCsIhc%V2t0hUw*UxiYQqvmvK~GQHCOMKo-s)<7C4 zwKDSblu7;nWO}t+tt9^7HzK8il4$7vDwlF4Q6UXUrSOL%+WMCpA>p;sNVn@nTH>)? z|1#w7*UQbdD8Ht12!pG;OQnrZ&zeBxk7b8L+rN9W~}adUEG?J7S9Y@hhTI;}>bP ze)PhB{`Ch;Uu4q{7JZBnULaOZz>2URup;G>`jEjonSK&1m5I0-)aK!q+;X0uFsO9i zVpBwfI3`_>^i_I4G;fGyATM{BFb0H!kOJH5YU*)62utR!v2FpzABTf$mi&3$asxaaEgCZEq7JLFWzj^Rqg5Vc%eO;M~9^26-T|$YRYko zG~@BKoTc;O?6OP!r=`M`z`u@^NSzeV$hnz{_MmvKZrPh5QdiZL^DEp1)UDq zJLw;(nM;99cwh5!mu}&{Y1Z)Ii6HiSt=utQ_{v|Oe!(LWJ#rfUPxU*@EarxqSxl?v zP-3}2GE@493_Ha1QSDrl&5VUD(fz!Y*gP#F_C{0_tp)S#SV&nugMhe);f2saNnhoA zs`51q2aR-yY|0j5ehK*zcpACiF)kL$gq#LEJSPQ;&ePxcs-2*8Im3H-c3RX&QC>mO6_sfDD}z~3zgBMV z|GE><8IskIy5ZMYSr#U$Il2mldAioCoy}Ge4X;DarE8cGcForM>$1A4D!bM<=jPXt z{7T|11$X`Our2#}{$0Puzw3GaLVumhM2f0HF9m^$nx_}^hN_iBby5L|EKd9(*I)kg zeC^aGjMa@mI4wd%t;uu36p(6e_V2}MV!cz(3v<6MPoCw}OQD@idX{lHyiI-7O<>}s^sS#nOLn%T|^hcL7KOo}-(w2>Lfr$tUAIj>%%b3n`1bZA`= z(7F&>7h!R`sG0@*Lbg{Jg zzFb+2b?pkds!~_+^TKggX0$A^Udmsx^BhaIn%JK8Nj2nNSPmpjnPJ2$D6v#Xnq0w3 zuBF7%T4;ncD``T>b<#vLT1>6u7hTW%zd_e)BDeV^H&Sww+^DH6?($1+rkSO&&`_R6 z=uecGg^e5&wQ~C$6J8WfYp^I=S=5Ah{}KGDSYp0KnBY%puOz-pF;g@i>{k=PQkr0L zaH%#?mIyh;oXsg`ISp*XDVHaCrdgl!L%jrV3`UFPRrfI#4@&nc6sqRR*XR6Lm>(O& zip^)O)p%QkUMeT_lCH8O21~i)?WsTB=dXDo!@j~Q|5b%$)JkP>#OCf9{>p=t}8(l@$`VO&ox zmU=0735+iZ80Y(`BYi1~nBAAE>bT6OV6*xcm?@t>aeun4)xnCYgVN!lj zHzw8=yRxRxse*M?aJP$GwNz{ChnV*dla}S-DzdZ0=GcLEr+|tOe+g44@I$hcYjj=bk zr=St$W>|L&V{^vH++1zVRCxh&Q71JstByyJ8__PBg+<@Xx>`Y@+M4YG+WAE;T%^`! z%6w}xR53I62xDg^?xb0zdqK5#Som}f2h+F^OS4bpB~8bo67~%WFf;cv2}#9*0mTxq z1gTi45~O0mq}(S<3rjO`asw+f5h$T#hGlzT3*68!UYKEF->_VXVVTRr8KVOJ)?^u_ zGvrPV*pJjSEm)j`j7mk=nz{8@mq+Bf1(-kEbIDR$qzj}bXtF(A zV6SP;vY3z@b-7v<+q_k?GS-m1Dwf5lCd#y3f04d&>RqX&HS={FuQbhEQ^G3PE?5Su z*u#+>Q^QWylHcB#-NU6U8(CqnK@ZF`rEK1f4zVUxAy^0U{pf>aM)q0R#=XE<8&D1)+y{1Sv_DaoimNjt~^7LKA zmhPgIyBI+)&h***r_~r~jDD%G$I~fm!rNk)ZwU;2K`+yP3fRz-zD!eKMx{RYBB*PY zn~?75b;Y>Kwi{Ow%8*Th(KaJa2qTXDGLucIzyHIhswSIi-dV|FR>|Jas@UslbM}4Y zF{@;~G~SJ+Oh{&y-_thIO%Q>s%Jza+$nMYD*~@ElHhwqAb(OrnUa!to+a%&ym7DY_ z#df1pg%?>HvOnQ#Rl5yJ|Ic!Z{P{-r7siW4Qf^JTzcOBb&5V~VlhrJfM!=Rw#=NQA zCQYkY7^Cv{;9aGN_3;j!KzC}@JQl_~<*rIco-$oK?$)*A9+t&>Qtn=#7Cu$ES62n2 ze4pH>OThj9uLtA-U9lcyL42?|&Q+^YB~?m4*dk|qtCg&N)$&NCW6@JqDP{E-Yu#fh zmb^-N{Bf2%BVbG3Ei8G><;fIj$*l07!n%hTwm4gfWhkSQPs`J~4qMqX@{Ef2tpDrZ z@^2OIIsC5AHD@ifDlNh+eJUV}Aq9D?g^X`&T@7)#5-DC+1QtIQ#I|^zSlX!AjtjQ_ zspPDGh@M^m@gJxM_XUy+vHlqgmcP!hxW#obziStKsVsnYiN%gjSJYWBputLbjjn`N zgY~ZmjT^BRA_&VMYho`JMAks6^hOZYzdp9ivH)5W7Pr1MX`p^q3P5!R7gz%ObK#;) zGO|?Kzv_Ed3BGLk$_7JqNSK9>1vT@cIW!tRO{voN01Yz{M1ryH{jH)%FAT{|}iZMT^JbPG??R^_u5K7m1NTez%M#C;f+ zZR#Oy;yzN^+r#)y@s_6C$J&*Tm9kdbp^bNF<6v|?QKzXs#ybN>yDXL2E;_W^N<5sU z4E<;78*PZ66l#0ev*Ae96lb4?(`JyQx=$HiFO%)8QnQ`efbTO0=@+n_UnjF*>{pkm zjn9_>>jT!4uflRb{iKze@{CId8LzLkPv5Ao6pv{NHz`tln;xws-cs$`A$5V0=Zq8> z0pG*Evy@x^Lzt9j_(`iYyBWzZvcvaNQ1@r`lj?}$A2p#{s$xGi``yGI)0Cxv~_2;8}9W$D}E;W_nb z;XLi_(=z8No>UTKXc^8^y)n7Dxn-hB&d379CETd}BK}sdR&M{J%)Cc#2LJ0OFi=Uh z1-wqTfNH<9l|0x9Uc*k1jud7MBpPu%NAfDu+rVHSnU6j1IX{pxsh%N(F&E2-z91cI z#wIi8rZ9>`<+xz;Siq(b;%eB#Jo3v;A%m6P78c-qu!?5Wt-}9slGD>zjIHLW<)BSb zc2|hwAyCDIcpsj3PQRGjwf0#@3;cayo^L3*@hAs{=@y(6HZ=<{{aJs_ zR8qyx@Df+*_ZQQME6tTsj3d<0ROsvjGySbkf3LvcXLjAFCPOcjE9o!s%Dr&?tOZT} ziv^80LA9V2@DI~1U*BB{{TBp}*%8y(VfF{L^>QuWH=i}h&JN6H+&2tp_Wlz@OQw;% zJ?6P%teg0#xN~VMn(7*8f%yKMh*n-ufmU6#0seT^_&8!hoBbZZW1(=16%W2}& z5fB)`%wSWsTu&}ir$F%fd5K?zR|KWh}f=LlpHem+E{=+k{I~u_Gh=5CgCgEJ zV^SkC&oZx`NT)H|YwCJ_4BpOTD$_H_ree~cK6#l}PhK~F)5IOeUH(NjZ0%>B?=vdF z%^B0Y2TALFLDtV%@e4nv6a}**sTwEvUcdx0Vs=oVlzC&noE{XYX5NULT8WaeLennI z9dDj;dL`3@!lXNs$AC9Zebqb*4}+fs6|LsqI@8F0PgPZa7?!zS9x>M8B5JKxdDq zn!;=fNk{sT;1TyrhdT$Jw3e~%2W zbJ2QZde0sn@-ZCkIrzoAH4zzV&bA=Uuk?vQpjQE{jOPHSe1ShzJ)Nq$OtKt7N6(js zP7OB3wq6t^rY|ymdZtsq1rE&OE2fD z&(S<5s@pl%1JU|y2{0C2!Cv8tdKCC9u@dFCHCv)dd6kytJ4{4!)f29ao|FY!fF!OJ zt`%S@;&4Ni`c&i^+a+irt`&9|+}3i6%d`5W0{zm6BC{J^Tie$!6}58b2|}f zkk1qhVZS^{iW(iY<&fW}D+nhQjgi->g1+85cD>)RJT*${`h24=pIIZDVvW2}ZdRxV4fF8a{Ym#3;Qr;7 zO6-w;wtMl6I`8B!K8K)t`0f?4UXUv@D|BR~Oi$? zV#2HjDS}@Qj7X(gG6y4T+zs)m4h^e4b0}1Y1ynIk@)-uzXKl3e1J7Na!+^<0J$Kl4 zLu%5DVbRR$?a^Tr_ZTf511F4_W5cz5~Ew<%qF=^BHCV*Js#XBdt?ZZo*oXiE#t9p;^0O7V9Qvl zZ;rZ0I*xMQ97}u&IPs_twvX5&VOzP&oW4l8-`V5zJD;OEpLkjHvM0x^3w96#djmse zuZ`uuau9=xC2Sl{)z+u!xjox2lpnQU(A@&*ytHSh@IL+AA8$cnOpn5dtJuy9MCHfAaj!M06 zrFy8$B)nArDdCOLju{pEzid}g;Og6;q3P{Dm9o3IBL8L8+`g#hgUVMQl;DB#TQJMoEUD*;f);E z1Y*}w>3V4_*QZeMoIsKrPC~_3$c_+TOspT zD*X+o)8A6~mu^Ly-*yt3{7-Uw6%MAGr0I3;@6@W7;V`NychyjR z2(QvZDfcj=^KfS1ACX72F0Lk@RZ3E6R*(6t9!DKN=Cf)JtL8`EcXL2_?nw?9J;l+A zr^?+wVe~INQ2$D~r(uM{DY$*+a4OWJ7wM9J>oHb4eqr`e6CHJ~;-JRQR<{!hxFs+( z98Y0Y;pp?$sHrw#D7P`=ur)$|>j8|q=<>3ps&RCBdkn#-C@reDH>bOg|x%!>RNQ~AACaU?LY_kK{FQQH-G;H_q4S@X+1_h0_?ujtH5XL5RFSVJQ zJSgzq$iqtAN1LLu`>5h>#PJK7qPo%J{b*{+J9u2t(&Q(GeeGa2m#8aBk$#W?>K9i9 zjy4|znZZg1m5m}F0-2#E0Sa92U|5wnnTn61gfbuQQyQU^OoOAx%hBI77#*CuNTIl` zCu59KMAbKWivvpdiC)p)ujp?q$=cQ0itmf7Qwl%Tcm{C-HB=Ey41j%)>46Kf2h%1P z)=9ossv55pH*s?MCKhwytL8C2)%dCq%J)*)ot$rt zO5FnATUA%#effB*IA$S>!cVHZiYkkbBKBs`W{HpRtE&h<-4eVVVEjmPY+%5pK`T|( z@0gp){suNeJXlCjstznZ%jkz`)e`k%@z|^g99e-8rBo4sE5lh8S^^Nz99ji9wCL07 z^gx#Y2}F^uRqqx~Ertj7IJQWM%#S0KNZ{P^+`2G_m(z}|@?UdoiMh3)vq^ng{wJ_L zZVtM!B`kb4XS=agF@E}E}QIN{@UR_DggfnMLbxzxH>=)#}=158b#{1 zr|1Qxh;s{1SEnq+z`2E14JZcAtpcEcP{eVCkLyL60|DexccU2iyp93`W@N;()eDh8 zPX`puv86J;q!e*w;ok~;SzPL86wTjNso20!1{;{6Xb?fA2qw^a4Lop=^?I;U9HQ_* zkbsqLsFni@)N!QlV2Xw*#o-DK1Pqv=7$5;r(<3A71Hb`-{u>o3ccYcy7)1ig7#xUW zBX&>6stb`-!4QCMTqL9J!2pg&5Zsl{3@i*4|zyO5$c zBf@81cHEXkWQh@bDy#6 zD8Y>Nngx6h;0!^Q#DY?4T09NiO5$GIT(>|ApC7ap!h9>zY7Q-ipU|O_kBdZ z=SyvOSSkGwk;4)B0m47(&!5yk@Us$bfx8|Dd^F`+M&&0o8GiZbNv>5?px7!}=~{DO zU&pLXRNCOUL}dj9?V{3-0#sHMIvt|YJ}Mn(&{4~!V^kkr>b9rog{bgp9nCzqo$$=l zw#apkN@u=!u1i#pD|L-Zm#B0_nr;D?7o+l`vF#od^oU9iW7|{N_KHf+sPuwIZ!MSJ z#+JH0De4myKHaixUy900#HIOrbT5sQoL?b%!tbCQJH}hGXtixqB6^* zm>m?%iOL+4Vy;RtFDi4RG7pw-Xt}&$Qc!m;Mf0P=XJ%H41yNZ*TNL=hC<=U0R2D{M zQMBAGR$6aHWpPyAg!z)FDexsxUxB|BmABZ{MKcO~X;hX%2L=94lxKTcRNjfovgi%& zU8S>J|E!40yHQyIv6WF-9(AiADJ!FC1-?2et9?n%G*)5DHx{BQP~WGq}vh{ zY~`R41qE)KlKL%SSeD)ZIqW_NegLlpVK^qw+Cri`)(l9PuU3ePXw3 zXH-6k%1#8@6>!-dmEFen)1ct9sC;H@_bA)Xqp~L|pTlFXmdjpaOWi#beGwHtyRvNe zMP;9{-5-_xe93oT>R23z%9l|&5Up@uDb0gX`6?<05#nndAGq;NlH};>UO56n{Vyp7i8GUDqq%*V~ic6eL}rpx`A>UZSAD_4R~G6!-Ol{eC~IQtDpz zgik+Y0pnwA`fK!s0ledSGJs<7O9y(2xgF%mKu-oy?4@lOgFP8cJI@WV8bdu9;>l32 z+zr!C59bZnli`fg2$gkRJO%z)A?Pi9di&&~FPve{k} zH%H~4>&YBX=E8HHC-aa#cqw?plQ*pX{D8m$PZk)Dg`QBh5K$JXD2ouK&=+H|CyS|) zbZ-W2mUyzn+PvinWp5$R+rg!!o-E~3k$cCJcleU;mIYVd_2gXY!PvgI^dVV4Ts zN>5gL4c#go=~W(&A=J3G((_N+(5l3(_GC3*^4yw$-da!itU=5IU(EM-L#0NMd!PN7 zwOOYG*JW?rdQaAKp}>7$G{kN2gs&SIw2eAwn>^X*$tDJEvnQL=?MmGiPqxsmuG<>$ z-sZ_R3X<-_fY3*t@bx45v^}Wuu_qrJuN^^^Pdwr4Cyeh-Pas6ao#}^Sm(?kCyFKBv zi$3`eMWOpNAorOkpFvLC9#8mu3a8JtNIs{sJu0PcuP1xGBe$_%c=CnGuulhKU%Epj zZokJi_DfIpd-5gibsKvCMsk23_48tCaQI4pf0ZU)=nk47Meb`)_#C7g-)N0*s8M9t z8yJLu=wCx=Xg?>(XHd*nVGT>8P2AGlQHendI)CExuNT>06PpD7U6 zA|{lzh@mZsU7&Sa#iUiNp=%wZL#<;>6{vBoRV*`Aid-A3TjJWrq^R-Izf$*6QTvf{eLgs)vuztt&q17gCbKYdDT(t$B<;GmccjL9I1IR(SmmAJt%4N5R1 zCWB)#gmTXRTKUkJ427%bhFOK-F&PFli$D=0w0|RGG9o4;>E9?FnNjH;mblR|8BMz) zHwI^peHp8aUx~@sn7k6JaO1T7_?V1~$#~jN(DoCu?I*@$qV@JwdLpmtO-XCMNimsZ zmnH`z^IA+^qae>si3w#>kZ!6{pB9s;F_{MS=}LWimip^4dEJDX5tA8wAxw?dn3=6H zD<-py$!ud%;O4}HuXDJwbCveIn9PmIJZQfWlQ+`sO5OaJ%%@#lw;&L1VN4cMkaUXz zLW^U<*Tvk~H-jomVzR_|y%kh>J0^U6n>)KSCJ>_H()68u$Lf^2WijFNPUg;H?2E~} zu_GVx2_sv zOg6=2GlRHA*=?a}zD~P*w>6->EhgKbjWP`iK8ndl6co7a%IxEqY>&yuP~M^CvO@(H z>Taj#lbG_jaD9oiL>UDl7?G1<+R68EVN)2G>C`Ya}&8LvIYyuf`P z6TW`V9N4Sezlh1+n0$fw`(m;$-LBN_kI8=8)pcJ6LLZ390Sc1ttANnKnDF%=LVg`o z`6edc7_V=GD&NI~uir5T4#fmQR6LZP1K(SnQg=8ee7>jC>8JY#eaL={$qzC4Q3pQg z>rXKaB=R#FGbTS%o_@Mp#H9rgJkPa^YlT*EX&IMR@p9KXPXF4(rFC4|#8a+qoRMi8 z&*;5&acM`pBG*1H?fFvMb%?{bV_Z7KrDMFpy`b$o#pQ*#bfSG{ZQnWDzDr!X(5%39 zjdS0-#yK>We!9EGrJG%PkxP14y2qtE1$nMVTqx^-bUl@NuekJ#OE0MRR_eX8)ceGx z4=sw^OL2LLFD0(8*65q9(JwCjjLFN!B+vDa3t#)ko45f=dth7!#AP6~2gPMjx?QOo z9GAhgtLugY!VQhfPzsW6SU_laT=+UX&RcU(Wn^4N8n017mC*#ou8xt1@QE^N> z(A#6JPN{n(E_}u^F#eq_b>rePE`H?GJw7hujqU{P+=R4{C2nGzr~B2oOpME`5YVT4 z5@cl(KZ2)wvi_c|!yZhK*W&UT#ERUMxJ=hLBmxWMXq~)>*3I#&l1r#lg3!l01;OS-q8kaXY`WbX+NnDmdsmQ$* zm$&#*;@;L_dOJHzOXITCc)erH^W3ty@O2q;;9cduJTC9XWjW%nh|7v}JA5T^SxLLP zZdD-k>bR_?AnDcwgx1D|uWJ$Vy`akbae3c(tqZEGj|*SdGY3A13xufnL3$2susWq~ zV_f)bpwoKp+Mb0?@v>bZw>d7G;F0P$T(&^pb6c&#wzzDK%Ql{r549&B#pT1e zd_+&S>lkcL_oc*r9G8!2$4huzcJQUdeWEo!$=28zmz^g0t~fS@-Er9!m)-R2)1YUc z#pN@u=ea#`p==MM_qp=i8<)@HvKO9TD8(<*6ieN{xa>P>BJYpOeq-^a*8DPEv&0?H ziTqVu4#edvI;#`;AZ+CzKh&UVgHr0gj?34yuj{_CY4>ehzKP4XaQ-fk@lae2Q6cHR z4+;*)<*;%5K}G#BE_SBmdj6&FA(bfK+(@};qzU3nw7d132DKx;<~P7f*0^s z32B*-R*5HF>x9nvHVJ8+kTwZaX2QQ^?GnDXc2Nin;d>_-`#uTjosd4X*Rg*IZt@a8GJd{N z*Eb=3Y45pyw1+}Jjc{U9_2q=T%$4S@e?s~Pr2r%oG5{vQ3+KRu47ApR5_;NTa6$$p zWN@Ow4bh<)nvfw08Om4=OUN*76+8vQ6Ed7;nA}GATt{TMjbK2iQQ3 zPRQtl8&Fk4wla2^p6tcjJ}wgoKPw$OJe~^chUd4$P|ohe-+H z>!d`!#X)zI6EZpBUdwWrl8`Arhp7ogNhV}!LZ-oCx^j3uA=4A`Ivi&B9A;!W%nUfp zN(f(PCGrPZA7&?HcEZica+sTtx&AQBO9ZF3-biq2YkorJC1if0+AT=P8wpv!Oj?+b zh16viYQ#(2;(*DU3E?Y$7bT8ur+oO2nYAP#OO#oz%t^Sn67rVzEmvMkxVIDXwhm>k zj7hkqP?4qS`Q^EHbTF4C-tV+nrgsh_a zYOTH|A*&OzhU#k*vi69({+`W|_Y?A7Lf%)FHXE>I`c&7Y2heltRf-Q1vOXanKz4(Y z-I$OK3E2qQO$phQAzSJ;CuB1tlkc`bN48{U(pG%{wk2e1LbmAxpzpmOYIi>jo&cTZ zp8H6NZ%@ca3E2*>kM-w{gnXQk9q{@@X?~KH>>{^QFYijo&V=lu_HO<8X+m}<1F!knbtD&K=f56Okq{hXDRsS)(kq$Os->=XQhLKL-}O;`eKP!BN;0SVCgr81 z^o2$-6#LO*>BkQ}isr9q7rB>{*y#Hw<>jRGPgb}A+UtQy8IY8LNw%a)bWjpiP5Z&x zez3JqtH&Wp83Ol0H&jI)mXx7M8J4`x4OcQFk}^CgBOo(U$&55Ipv#rasH4b?PReK_ zGbYL7G&U(?k}@_~?p{$cWyE8(#z!0Usgd|=Es1O*$DveB4tQs$eJvMDK>;j~4|Ws5PV?k0-1 zCWX)XEc0zi*=EE(G;SXy<-??W1h?%0@sE@8u~pa+6nv7DPmJ46<+dv+JCm{t(z~@> zb{jY9?xg6`r106E<@Q-pJ~Lu_^d^6vls!rLoUZOQ=3gXbZ&JR1`M!YH{-o@;`dJJvrRub~(~EN805)>DuS$v(+I-+UH1zoRsUB#FAq;HP&L)w>fgi0?5t%7}g{~YO` zlU1V}Va$;Mv@di673Vf6M+WA|pq$2Tu=Zp~jttI`ArKpygZ>$sli9is%aLK$Y`8WX zkt2MD6H#bnFe0OJgwIHNPRLDLA4ccMXj&AwG1_9Rl7A&f#^wlr$K;&k#?ey7(V)IH zsPD$-l+6#h30gdXft#2k6LV_Y&Pm4S)XM!Z8ouE9)BK&(|0L?KzJUcHe?7%kdrkp> zZEcyhpN3>Ca72z!+^PkTNc!;jJdUjs(K?@F>p7C!Bpc$S#GIz~z5ukU+n^1yc&5_2w%mP>L#vf_k!sKeg~pNhew}&p8FMDggRa z5e2e3MavtKJ?U!uRRBP1hcrHB?J9SsoGxc(s1$3JAcSuL&?KTMRXK}~8Bp;+D3Oh( zKo7e6Bjj<=9e7d_bdt3N6{qO={9LB{`HcJdm5PG)Z*r~NMd9!X={tNhQq_-E>L~)j z9)A$3sI0ieB>tqcZIeYSRZcb^gBz&u!~m44@eOMDVXnBPl^W(s^c7I&YSPux=RRL* zNq!2TB1OS1ODgI>f7vZ70B#WGesPN`0f`ZpTszJ!t5g7|91FQxxxMOy-|@1&sOx?m zZ(GbPr#H2gd@=JBGi9EOvk6T|T-fYcH;d^Fk5CEIkvsxTvb_OfYjey1sYby7sU_`qO!9AWEL4JmA$XUihhD==ZWYLnS?g`LOT0&hMlH`1+KQ7 zCbh41r!%e=$}$VURM3~Tvk+byXZ3inOx;J6YQB4v$|-q-=v=_xvhQU@1ne@dpeOX1 zZ|?sxyhH(b3D3t%RJnf=yX&9Cs3bn+V}XV!a!;dgEFIF5;3bTV1?WnGmat!jk|=PX zB%-cmSXwAbq6(CRJO@OAEr`M-^m%wygLtWWHlTz|fZk*+0xE%K^a;Nf z@CGfR>5oDRmYB+yd_WR}rXJspEpiJKD*-H`N&`}I^U@)R{;_h_kMCin$xqNi@FSR3@-ftj#w zE%PIOg?zw-wp?xyiFXhcuml*26$oMjSfpSHYZPE4@SSRmFC9QY5qva}5(o)O6(L~* zh}Se|^u8bUD+DmYGA0!$ID*f6aQZ-ti220;nqtk@5MUd$!@gmlSo0`tv@RP^LRFs+ zk;rpf0*Hjg|KbcuTHHJ!5)9k6^swbARKmpnC@ddAOVcL_W!u9yf|lTU+F>b_c7P-J zgqF1ZB;B^y?bJtmR}cYA;j})f-9A>L6s&|_@R^@CDdhGjR6_63=fRb|njT5Hei26Z z?F#~bRXG3Pa{pmDym=2wc1Xb2<%Sq|!x02eBKm3&>rcTmkz#=I7iF*rF zf=hWB)Wr3!WrT5S#kpfeNsv-b4~Dl+9}F)h78qf`v?p!th;y+65TRI!YOoT*r!BF* zIv7l%14qRJd4qsprJyBzNdQb}wxm+BCHVzlAG#P>&=8b$Y)<#(4+oPqf+-sMvD|{5~ZG01_e$MrAQ`;(zULSb_<9^9|cOJz)L`+Z?;<&0nFMR zl}M>l6De_R0DV!swFxv((Nq{@_9vp6y!~+1ef5~9q(f%c#(^c zF-d3XM7xrwpb4C&ijn{_QKiTUu1uyW$O)w9q=}|RYUrk_h*Nc3p~TO&d`Z^R z=?bGz30~JcNuVllo@x=uiQsPMfvE87f}fa0-4X>>SYu!nb0{F};#|d90IR4{Kn3;Z zF=B7%h|O1Ah0JHf79b7+Ey#}9LWNH#JMl3T*^-g0i)dYXMTwHSiMvD&D7S>vW{oWjnUshfY)jo$yI)FyO=oupv~P z7UhGbu;JLKt=Q{;jNkwt6)YtoHEO%fN_BIZYHhbgaS&S-WC5I_LID=x48S6#=!%ch zb&C~Yu^pL1E`V5g&L9@d1?v*eSP;uKyaTAyr_2j6^a4uqDs*hoZ6#V@R|YQ;(*Br;NmO3cwjM9 zyaI(|@bzov&^Ox2ZxxLJ32;4C@#ujKh#BQA7r1KSXX&LVRpR)v7L;+`L{g!qPx>%7Jtte=!zzjYuqg4vcptKDqw{1I6tPqX1)(9Ym zaRr*uo`PzHY4B-BqmBmHP?$!bGG9=ThCcg%Gptd7%^+T4P|#JO87d3l49dE3)Ean( z)dg|U-5B&x7zQB|_273;JzNhpD)opSp)z|ZV#8ElZ#`-cMg#ChpXjyjr6?l-HUpeS zU(SN}QzHGM!AlI=Pz7mNJ8&9dHz0s%R4Pn^YXj*^Mr9825gQ!MGYJdakfr@`jme5OR>2xNz^?=( z#wpkW^hQ>@7C7)5HdsJ1CQuoL>Eky%2X2Flufk`N@&UgwN%0#TYgRt5W%&fC4Yr+G z)CRqoroFM}wg3bNO{Qm?0N;4sxB=xb_5e9%Qc&t<1qFaJW}EPH6xso3qteZ_O9hJN zpc%jBMUU9}6)3jDXw8oT=+J&IP#_0j51gf11dJn?SOp5|u)07w7E`xGVI5YmBq~cN zKs$rypztlG<=YDX05;LYE!B~DM{ylsIZ{A6OdT!DcI;gRbSS;$0lgIp?=X6X@BrLF zPR^*pHdd#RA_Wdq#~Llj1@56J50m6Q#dugt;2eC`(huMq6tDB|pkEDm$9k%vdOrvn z0{hrNNwq>gDBH*+-lTGGRH4WjC5g zq(_xIsAv!B<^l=<^MO!br-dqTU_NY&1IR~-`%Xb1;60kSLn_1f3j6@A0rJ+D;c#}a z0CfBS&k_g31iTSb3RkPG6&wcvn;C`ywG)`0Mv*7v$g{f z;$;vaq~X-o06@Ab41^QRiv4I<)3jU!u12T~MgZ!=x zqK);Xz!~Jj4e_#9wV9I;AB0W?C&I}3y ztVh!f)}s=vht@4pxCj5{E7*hPlu|IyJJQ+&@WZIi_hdd_nz{uZzz@J6=t3<5`H@+f z7b*Nh@AP6te)yJ@V88XI$6B~Vy9D+F90-5kqz`XH9n^+pmY`*cTk4Tn;vFr02M)^= z@)0;smU^{vzt0U1&je|Ul!^Owt2E|OwMrN0l=jb#7W%g7=1z~11wkMSF;XY|Bp}+w zLX6dT;z%+8WHIJJp(s#v~?Llbn)a zS6e)#a60$TY}?K8r;ul^(iNBW3S-YEj%=kycsno5PeQyY!4kYGCBYGnLO);-9kggc zg}z05gl40_q+RaLXND6&RxU`XAzLoY*p znPDRe=NPu<7`6zxDLi>zhb@xJHlziH9L(SP+dn%~sP^!d zn0uJWt<>DqDsB2IRI|8swT)WBRqD2Cz``1iX}leQecG$-tb-cGF?ZvSr#S>VW(mBY z7IAw!2`F_|tGH6?q9KK(3%0MWY756A?hoFJ8a0StxrBmKySVZ1p>}N@4$R_K&`Yh} zN~U)Z`K?Or;vCmBJ3h_&X!xKb#}hlb=CP<&Gr5s?ITHsiu*RB|Tt{$#MiDx4WCv;- zA-yt4qY3Gx9IOL1IBe5$2n1z_jVSS?7?7b_FjNannX0uMjXqpUhtuB?Y9SAF|1d(l zjdbBz(f_$eGOPOoza+Z9j7b0Hn7rQUQI8zlk(?1Q6(3CAVn>L#?3z&QNV}(NLQQRI z8A7jjwP>1lveLa{gQl7W`Zv~7oUIn(jR#Q2P%}ak<*m8>YY^aHIR6SLkoSISedO7;#OOx^9m6?_Tq9P#D+8RVd+X~Afe_GGFq8foti+%(*#0=a+%V)LTO!z z*1R%>Q}R-|s{B`?b(&Ov@F`sbr-nk7Tg@2cY53Pdxkf2fC?!i5nZghG2f4PKNNq>w zxwZA880}4-+fstILAMy~eWMQcO`6}il8|l828-ENsR~;)b$~$Aw0hQ;KST8|@@L=m z=*g`r!Jk!vzp4Zlk5gTcx5#bfzG|la-|;^FJ%vhc>h5HG?#PT!u(fDLox7!(++FGJ zf$Kd=vzgMoS81AFCI+Y6CHIxP`;LWVeP^|K$%mi<%O#2`UrCKRI zq7)y+`}k-ICuEhR%H3m7d>o3VkyGvoc^ryQWGFuAQ+$dV>FjvO_%D_5DW&+dQZ(0N z3fJS4@@%>LHx!?v{_`Ztdp@Nq_c=(mNUOyn)wnj8tyF)aWLv4)()2)3ZiC_|q(o_> zZXur5w-#@crtOJ-WU(X(vdLk3b2Ywz`bD31RNro=EF;vdG3ufq$3+zbMYAd=A%|s8ZDG2zrF0ke3)^ zG~5`CGDi3pN2!;QHye%4iQ};xwt24=&{h`mQWhye_zKtrr}iaL}KH?ny%hOyp2^ydlvB{ zX4K?N-@|y9dKjTmtp3H>tT@fpuSnUPFi=e8Jx|?>gkaNTK|E5K0BptTRGe=u76c>~ zTI{t2$|N{!TkIBTFt*~zUHB8x$oLW$tF!P%w?t{$-Ml*0E%#9bri zTAh&JuOIB8`_a6HKhpjubsoB(b!#V{Hg6I6U+kTEe4JJF|DR{(NhZyNW=d0-(opVG z0!`^cH@W~q10`+QWL1=68=90h4NWIap+ITNj%*4dn}Fi%k2iC%YiRGEGk#n6+u_f{wv7} zP*~AnU8Ue^S|3*j8rNjpH6-8?lyUsKICd3VB(ARD!(j(F9}NoGi1*+obfAU>@k+y0VZ-Bd^K}`R}Zu*Hk-8$RPk$2 zSO}=dEBl6`u@Q&u&~g+uLaz~ntuzQe^aa18@M_{1zZ)ol6Dl6tLScraeV=ChAVWMh zKtnIW{V)S$$hSNZ+Coe=_COz#tw(^NH7H<(3l)})v{zXeuc>Jug|r!<@ipOvRS~Wg zfN4oSNZNZ_I@ z(+iLg0F+`E2{0V^1_G4WBPh{GfD!WV1Hc9W!wiTbm#_&v9QX!4r08yX1DAUou|VuM z-oS@J8(Ej2iRj3oGr_AVz!KS4?YqtnouXIy=x?mJEg+1R<0FC=HNw|sd8xpQV2#%i zP3(I03Pcff@uL71H&8D%-%tfCZp?x#YL4F&`UQM=vrz(5B<&VP7*O%nEP$dP;oAi$ z@+}Xvs2Ffo{~cR|6V)JKLLkPw7~xH78VKSw3K|EXNXWN=BMhW?4;A+)ES%8No>MOoIi<~hjS-Z3>!`P{wl)SGTu=Z%XU2{>)?fohI{_3#8Beu zp=)=IC!v$s#ud=Dv+3Bae%1moGLEZc#3LacAGj13Z4_6j)TVZoN<}@BXcO8NtMNn^_!v-BKu^Oh&&_E?!#-~_4ZADr*9)oX z*PGGQ9H4sJsm#p8=WWeQypSH`4ia(Gus5ZL(6>Xm#Q9L&5 zaSKClqiWdwZp7lmEfU@1#5pd8Zig80)%{>{qYt_V4+{qSVU!PAS-2Q1&*PQCs%|l%i`=I(IG&UQm z&1E0aZO*2yk%D}}X8Q32)eSG|Y|}ZPjU0B4Lgt(n7QKHez(4a%GkP!7e-W_p{; z5Z3&WS&+J1R^$XGq#c@y=x`Kg|1ht@L4gA(EedGIQN#FaQf%2?T^9KZKIXnf9xx4g zWj&+BxfXajt}JPkHrFd5k3I)Yj-OyRgrNIKFd7R}i-!_TD8`kkNy?mtiZbUUDRX#o zD9lQR1bXTpOh@2?-)*tj8H zpWVvORsX?(v6ZX+Ky{hQc6Cd8DsMfz1JAB*(F^AU8T%SaN-1Gl!+W{A_Y~d!yZmIV5e1!a`^cUoiqrqPX->svv8IAruZ1))v#yug9e=r3?A z=nu+$J>SJ~fuo-5glTlUcBf-0&mY{5^xQ7u;<@h|M@(zR0oGbi&D*V&113%B*8 z?sq?*)9!1Tkj`b_Il%2FB*4uX*d6mqDsbFz;LOO(@{I%16~P7m8>p@b9^?tyi8CRb zI0xy>aSH|#wDYIn&z~8LgY_04B@wK+Cvp79J<0lFnC`(`@RGqd=_syt!9!^v!DD>3 z_c*YE8JW4BAU;bXc&z`n&@B|f<9yEdx%ahZuAK;!o1}~7xWu`0>_CbgKHu@~c-Ija zmI6S+5;61@V7GnHsbqT`CzCH}xb7V9#q`$8U);)aKD+s4Zg5~)<*|d9gQ(A~E&(6( zm-Cs=QXM`^96uleo89rE8(#bdT{H;yLQTdUm|N?ZTkERpx8R}NS>A=IL1&YC#HnQC ze1=DDbto}Y&k7(yKgSW(auRVYofG%#1UeT-g7Y{~IC*H{dJZ*`DwD9lQN$_Knwg{H z2+|FL6olH&(Sc-j!DkD#osbT~5&CrweE{Mg6!8y=I20)Jfq~Qk6)vUh+~C^OP(GCA zZhj~o%%Mb2t_(4WxdJP+Yl-aW+}o?Nm|%$bz-qP9>W_ zfD0Lc3mi>1FfupB!WB4!Ab*p{LxMs#4kUlGcWbKC;bi1Fnr@}OLO7WkQck4XtpS`) zoK_!0yMKoui2;611py8G(>*X@pW&ps%Sv%jSt~i7?k0h0&RIpGKdbyRa0dR}OX;i3 zz@fmgC5_eKLraZ%(43icdR?`hFZ+;bf)K})+HLc;ugSdy3b%$oN8w63EOUGGbIeT*7Zpo$9*z<2v(~1tr!QpJlJyAC7725(oz6kFw_({(GApEhj;}pk zTQ|qoer^`3c2ocF&tbVg?zN2N+=^9{2}?cRt+uEGOnXLX?gFtC?X|EU;^oda&_D9wV?2k<2zEXeD zk@Zrk;oRNe+$Xw{smPJ3x{;syTu)H650Mz9PS|aeXxWjWtoTWsTdTS`zWUwCRuuE3 zZUFGLZgnV{N20Q#W{pHqFmNl19g>Qkj&OCl6+O+Z>*f$!?@qCzyT^6u2GrdfW4D2` zh)~AbJk9{UGN<|?2by}8mvrTMG>$U<2_ffPJICO%bG4TvOmV!O$6kKE9e?MO156ya zj1!Eb=mNfT99?K|nVn&3*u}x}sA9&4NCjF}mZ|WLpnf&-QqU~0E>0cJu*-n6z`{YN zID(L?E|2FUO)#!u@4sJZlSBID*slUZ7F~ zIIz@!8wT84hJFUo=tc=hYa}+&9?lw$sQ`lCTEXIOqj0R_iBl;6;2#t9yo59`aPHGF z`1|7wABPj2zLVjygGp6}VDx~B{=77?U4k?ehQHrYHtmb#CWTPEsY zBJqB(_6J0TQwgc+LAoErsES)I=h7!BvN#+|#j=NOzwmGVJ}u%F0zd=Sh!H}&mh%4p^Bf3Ig>b#O8C{ljdz+DCXE)GJ! zHw;F`=KXvvJo>u#pPePB+wy)>D7R|)mR{($4dVVbwS32*@bB;m$ojjsV!mhd;rj+` zf1e=%!G`P);??OZf!GgYbB;Z#;v8E_e;gkD#I6q0m11E>{;3db?a;4=9Ipww)+YTk z_4mJoVgq0I178DhgI(JtVz1jud?OV3g?EdcgIlcc&3_B9R&Rb45`HbGSA}f*jc{yS zV@qJykpG=LVeyOY7j#YO-$VWnhFZU&8EUKMkLFzKQEc{?Khbt$zKU{&{j*i`mr%`L zy#wsr-~e0HjbUg2ly|o74Fkkx z$5J|2HdBM&D3^R!4cJy!0kz}w{D5f>yg95VXi184hP}W@Uud{jF$LVdh=d-GZQ~(} z5oK_PtxPNK4~x@+WAK=@Bhjh0kH2U#6Y9v1`9C|YW|51a5Z@Lr#&4q zJVx5%LaoarCPq2%Yv02sGVTcoa1=l3KSAm#yI@SDKC3hkY-%wa*PG+-ZL^u zxM*0mNPb>eIWRVu_A|V^XARJPmJ(bvhU5W`4X7P%8vBCB%Ad2l#Z=SthF(8k#>$I= zvtRH%1IM3!%MfAgr zZW{Yx=1{O~2>#f>=^xX=pHLhEKdBN3nD#7T+SX4n?7{x8#Ca2n4TLQPF|h&!Ve>5y zjBO6EV#W-;Ru6s|$OO=O;UKS9N`p(&W>9Yc?B5K)%8T4VX1=dI!S}T&xSD^zqxXSr z{e!$;g(Ln^KCo3Bv8YSQ{$x-7?A>4sxWUrTzj&&YfkvBJgam?F*^xB5DK1uDoHOZKD%_?1cc?45LBV0NID8m#R3> zH8A#N6qi3N1U^(H5Ws7~T?R^5$Ol$)1;m=PD?v^Ts0O6=Zy2EW8p6QQkE^rXROagk zn7)=$Jp!q%K|s^Gs%)WPYSKOmQhbBj0y0gTDRzS(>MBxP6jUw$*Paxt+DHIZ^G}zU zg*R-7wchY;a)2H9h7G;elaC37mRxg(2I`KiVeufu>0lc0Ccr9%h8i7Z#}6kFX)te9MDdr;mkFpO*ithUf8+@EQ5Jip&#oi^bV>1>UbT?J2u; zjbcyA{dM37e^ySdBJp$}@j3H%eY!frpZBh?_8K^I6 zgd<&ah67j_VPWylDd9OK7=O^LyU(2NKI7gW`uk!Quh^hfc^)kOCkEaM zFBBeuT`2r?4WQiy-@~dJi)S99J3xD$E+J|ig|>YI$@SqrmO`_ zNEDyV`2yw*hNA{(f*|*1p9-j;@v;zY;bQm+>2S%|io@2l0ytrq8*va2dyMX6JGXr) zE!qkzh7~#sJqpfWJ%9<;E(>5bf%s*RumEN&(4g$#My~)y*eP}X{iiNXUEaBL42>Bh z8w4v0WG!_CZeFe>_}a=@U>EU|yOOwTU3CW0PH^Mh zgl_x=5;rj%NE5u*mrHl2FGS7rLChwFka=RCrjdJEkmM%-RnsWv^()=zS7s;+;DMXD zXH@SiHovd69z2+Znq|*c3>?4@X1l%KneI(B??Aiqj#9c06KS6?V3X5**(*)ga#Gp` zxwdjV^yYLwPu3uV{&X%Hn7Id~2SCRzcQ2*$pfj&B@CFj}3nXw0G!M%jhO^`brr|kA zZLcS+~Ff_3m)7kLFEKk~hJ`s2+U_Nv3Zpp>H98 z+2-K1%?8}PJXuq^01MD&bMab%vgN(*xNckt-lrNCiCo#eOEu)v<Rx1!Jo01+^|eW8sK?#@8) zkjkGBs)#M_OxCw8P~4;?q?m#PHOT-Jx-~n;mp@k-%F2>%DNAsVw({p98saT&qG4HQ zVvYp%R=MvzmbwJh$;A-9MCJT_?-yCQ4_LVmO5uX%e&5>01@F>k zNMnCJ<~}M+rUz*0Q&1PRiH0Z?bYg&`b*yB==UF2T-lt zN6YS4%gQPflqf-E@_@DMp=!%Msg^w~-3b~JPD8cq5o_5etp-&2)PUjy70RdR-D6?Q z26+xxJTm;9ZOlGx@l^G5dVAWzQ(f zvvM9lZGyC*mVLom_Kel=MXTXU!EK;qZUfpso>w_EB+pAv!g;51FIvlJl_3-=v0bsfKS^%f4YX zeA{Y3Z-Nr#JJ9%U7&Fu+v77+Dr`y-f^q;HltYzP`a<5pqAI9z#X-^0REqx2d|AfU? z%YLHbC`*1UeMw2$lAl=1Uahw5HDy6tf(GSh)PU-Q>+Gy$uUQR0w;Em#4gjUpt51lH zqjD%eejyb|x5A1gs86&4eqrT)W#v$zpgH+9b)!R}=x=BlIuvddQE}8KC{ljUQ`9HF zvzGm#+Oj_?%b&uH>)q0uaCx1z?2lH%U#teSCn!?>3XM0znEg%V{w^H~ij(dX{R#Ki zSn!z%A04kk6qoL34t(i787D}Qy;o}`- zHGPV*qEA5vAZxvk5I|TQ%RF6f0W`57RSF;P=7kYREUxHL`lUx9ZwMrIAIbtuSD64P zwoQG4;Xm;oME*hgZEOkD5_vd7v@p8)SK641F5ehyl<%oNh27Q61(3mfj8{?{${(Fa0oXhK^7V*aZbXM`h_O^=l zmcr!uOk@5>T0v^DVFVfj7u$o zm15tsY5-R1j+l|@^snP6cv0ivgHpMWzKf~xF@$ z!V+s(PX+!pr{MN<9XU@26Ft2o5ERDVS8wJ#JwickmY?Cxc~*(LC+$p-FZlY6uEN+K z1o#Q1b3^b2a|S+-v)T&@MYwui%=?2uDV;1wa)GUvG0$3%P}+2nvFI1!>UpuK!O~wW zThbEnr)^=F^OSo6U;jZ0E*4vFO@xnE6o$33;34fpz-*U`2#h^k{)ZvLAzkqaF2dTw z)k~N+_Fg;R)d2{VV=$0+nX4yyCRMJ@QetvG!CeFQEdaQGE1{0%Xzy{O;l zKXk(4a{$25-z2tvwQy1X-AGaRd^rd26(=s47$w1Wr&zY#L1F$eZ^eT?3uH8|AftrM z)C1Ui)0&e@Hm7$P7J6H3TJwofjjT;=fbRB2JkYzxe}W!NKL0*Wu}>%sVAM#F;a<}2 zGrQAGWl}jor$*`lVWy_bf6#w|)I+i3pGd*@lRL&xlL19VJ^(}Qmry{dCn5Hf0qn>C zPe~F0Ly#DtLmkP0e`=md28aa}gdMQ}gnh7Fpe9NjfDafb4+znI-njecLD&a@rzOBs zo1|a%lT;L5@)VEOZ&4gE zASd+Hq<}R@0csDtKRmrWf4?s&piKP-M*Wo-c>wO8P??edpq@v_Kn`I1;QD_g-oGC? z067TWpBq{w323}t)l7rwM<#fUbR+;C{j54@2m=4b6yU{!q1vQC22fyOP!kw=65oKA zA0!2E8H`@Fq<{ur1m6Ew6j@7zVQNDJ__aiU6^H=-`R~N`Yia&oVgSMb*H|kF58w)* z@<&MkqVXs72`K=P;Ll`)>*vv5$hg*P8j9&(J(AjkC_r`a|M2yHqjP^(I>JDJC+j2= zkoFI@5QKp^9ViR1o1R%_qzFMHIY3bC*~X0(B^aDT!ZBVhKq%-B(g0gv#+}cjSrP_p zzyfmGgDgPH5d)A3f=@76E{4HH2)M*}VPpWNiU|OS0q8OelD!mc5vJdW!T&2{@KF`0 z6qQDJ1mkbKe+3Z*G`*6%b0q^<;j4w2svCpC2KS5MC(E_81pfXyV~*kVt;k1xu;4jc zLP~uOIQyF+I$c~oT>mXJ`&Nx63_jfcZHx>YKC;5?kcXk?-}M6JY|X*rQ_&q1fyYPP z4?7y*aajF3q1rPTIaOz1@vUV5r1w~7?p1B@_xFmw?^mE;vdEwJe#1ZSQf_))z^!%5-ZD+l>wK3s4Q%sfD0uxBegjC}8kH1ORG<#YYf$8d>Xeq6gED0PuMR>KTed z;F&4`B!FirI12&5Qvw)Oyx@gm_DTB^L-Cw&QCNJhtA0UHDBtpM{OM+BXpg{9YtUDG zXyAo{LrME8;@it=+Sg1}q1ej;JqKbHUzbC#UfMSTiEj!M#lyFP27!GF7L9;K-M0tf zeL$r0@a2wG!K3290x)V=#rGiy$|y9b*4$cr69Y!N42;x9<(2BF{4fJrs!{oo|Ij1M zlz%^BG=8GD|5Nk${V88xmE*6Do7Ys!Ysi-YYWbO*f9?GHFaJr~pkBx8a`*)^B@luh z0DjsbNUoog_6v>DFEj2Ja`(0KS?67VPdS%=<-LC)_G<%8Mdvq413oo6WcW2{zZHC1 zCNVMMy1+23zZZ;Z?fQfN1Stbhtx10}ko8ZV6dC>qDFaafUMsEn3#3HyubRwnDzGrX zX+N+j2rJQq*(@_{m&Xby{CC9^=KjDepUfZqjI86I8VzVl@|oGn5o_S7ofc<@Av6Hh zP7Bae63+!5Juk};o^K%P`Jiv$rbNjEcCym~!|yEf`+_PK2asy>5l7&Q3_H76h#BB1 znB*nErJ$$mnQ{OIJ!Q|NI0P=O5-=}dO$EGvjZ(l*3EU-jU=Y)8x&B^}1wQo)#Dk|- z0_I&Q)YO+U3{|sxGyHU+@Ke&R1I)w8m-sP)eF0j%tM9-Ca)TgLV;2KW!%x9fD+>f1 zRX)Gyh6SX0FfVLg0ZAp2f;tR(3Zi;DP5+pDfX$q*U{rmA*z;M(KhXh1CBqAz4jG;&&G1yf zSR*kp$|&BjP0yFI#22=9eZ_x*)K?W)*hsysG{Os8lgOZW!(X$=!(aBKwAp+eQX=^c z16THfDL*kPg#W0#^&w!FWWCFHQx^nFDkCgN~qdH*0w ztYPcfE1{`B^wEZ427hFsh=0WL{;`JeCt3Gn#Tw==3yu0uX>MQ!U)AuvmL>Ku0f(7D zVRrva;f6JX{!2~%xgrm{pA!=Kby0hR{YK%2OGF*E)%}a=O!#Hi{n85lch>#4A_;2= zXMD)va$Moxgy#NMF^7pfT(#Wzoh&zguNcI{9VUu`YWt%F8U7=+{YkU#Pu05q9O(Q- zL5Fq1{#BiMGwc4UV8cXFQ1QPj-Y}ts3CHdm`;RJtjf6eq9TPf7QVzt5NFtET9jep4Og}zi!-dP$U+Pcv?~aqhKZt}P{TT_ zKb$a7A0`4XBTuMdMH<$=VZj~=G^}XD`d(HO5PtY7$}z96RzU?IHn6oEf4Hdl!yh3B zQ4|!_wj6$#C<^Ko5r?k_XiJEqKye7%P$h6<;%=lMQ4~VIZcd0bEJ_3&ChZnRm^j0? zB7lbxzFkp=`9>6lM6rj-TvR~eJNQ6Q_K*;w4iiN|afpdFOcVt*jR?cUOr{uti0>XW z!h|2b$4C%;*k}@Fn1AN@M z%1(DkN8bw9*4fk5=WvXCI?C4?0X}~@%CC*We_8$}{9k9k^|>Z0*f)KyjU4|cAy0uP zHGHn)uhPq(H%1%7XUC@~R=PfA;wbT-GclhF`W$`hoQ)f!T+i~AE0(W3AyfD2*?gTC zB|{oQHy5m2-oGeQp!WK01|&^g6laQqzE3*wltm|X^{rmsyE3MslqkeC_r_6Ns5^C0 zS6|USDwpZ%pSyfXKh<~ioe~u?QD#_vDWkvWD;T zXj#YVWl?5$U0+v6=c41+ERB+;GL3nIX=I~95@&`l>0P;W`3Ysi<0ezhUOgBwX%~Djgsxlojj~>`H5W`^`uxH$-_GOI!;_2B_ng8 zRFv6ao25N#Rxew$DwNNR%CB0}f8?^>zWzgw+%L*Bmn&Gby1%!tt24^%Sgv5vvNcPW zMw!w1Kx|Q85B2dXa#6BVIq|49E4v~*jzgaPde`tK3UzUzVNp-l$`ksREn3ps*%cS+ z7j-UQ-EUvey_HLAwnv#U<+iw4ZJC>mAHvW2&lMA6g4G>+=~ zx_Ww-OxpjQa}TKbd7R6|x#l=JDU-V}j&mR3=iWHZK9k8t@%2d(|0b!ay(*t+x-MT^ z``5-y)5bz=?e`0rrXTb7$zhqM&kw7u{oS^iray06oBh;?TrqlOL|ydd?T6(4x_z9x zuo&lVD8|u4#roQBkIXjxU}SCWi#ueSUf!X$_UTdCrZ0@Dt$n09+w^#IZSC**`cskJ)8wJio6{PjS7$Zm9@s0+eU6`R z!=Bu}Zz1~hoME}oy)({zg`fXEGR~cSR2<#+uA$LK-#t8c!!dF09)6xaCXRk~OnvTx zg>mj`e(qivM_*c4pZn%c zUSCz8y=ir>kp1E6Tyykde{=SiC*_*6-#VFZkDtC{bm96PqbK?K`ud^KWgD8K>o&&2 zqfPIRo1=@b;?qsn^Xqrl^Yt4y@#zz{@#`D6@%6!v^XUV3^XtL8`TC*z`1JSt`Sj_B z`1F^D`1I<-@#yH;N8+8Lk3Sl_1|Bz^~}_jhV*iXXj*giLN;}(;R*Dd_KK&KA-;k z0zTb&VWv5E!9`^Lh<@G6ujn5aWg3$+uFdQkWxsV@W^9!G&NPFf}eEpq%z5g-N zZhI_KUwhtXGMT1}K9i}f{W?mUrtdt#r`x&dsp+mK`Sd4!`kOv|@hLvN_*AAgy8P)( zUGB9nK;=*Rb@3M=_1!Ph(Pv)F?3Ud76}A1mm(}*4>UZ@0pU}>0eoBj<_!*zx{28Ba zdYw<-f1S2}`VDBjpkKF~osDyk@GCn1oNQzC>kG2GC6`{Bh1!2zmWA3gAL4iP!nN65 zq6@CeGKM$t>CT(^^p`vN^w3>=`tIF)y6T>6bMBA#Kljla%+}wJjM-tT++3Abyw%a<4=ie zmh^P2JmHwBQzlKGH2H+({jPOcfB&l0d+yHXWowR~w50dM-FtdY^1mihw7Y9bzneaD z<{n)$I%iLwJ$w3$nVm~#Pn$8VYf8toC7pZB-edBTCDS^mF751^yvMlcaxpHA{T+QL zboDP<+SSp&rmt&t-T3_RYkF2pJhAJ<-o8`DHxBqRv3FJf`0bW-^z=;R*j(O6Z4-Mr z*0sTpuRn23Pyh0hI(pW0jc+`0jh%!OPw44AzN2UL_~9#iSN8XHtXjpXH*x8z{@&#) z`^Pu-buI1c>sq;_YhwQ?tGZT?uUozRgq0J!*7l!p>XM$`)m@X8OzPd;@!w?q3jg`f z{`ZXO(=B!8lv&{^+e^pl6JvOn_*{)`yg1$vZ^*o;&q=mxFN`F=9rE#yQT)&EMv82=)UN0#k(w|-f6xbs@P zZjDP^O*@gkV;@JVl-3#hT?hM4=#L>T>$s}BL2N$KQ5}}NSw+)I^o>K;<;BQ0w7obB zJKhGjO?x^NN)}(LlopIqL4tslcIL~<*fr@j)9prA-@Zb&yP zu09Z`Ys`Oa+x)W{mOMZDo7s?ApYXS)TywVVi6~`tI)vF8R})Isc;o#VZ@gcl5PGs+ zvWwJbWE>x@dW20^BSE{4lp&5_|Lp{li&^Fbk}IVRww@cbGej)+8kz0O45o6kg3~Nufg_2!IUP_xXb6k_BGlJ{{$un~%E1_TzX2Ty^Gl4J& z8|jnVGbv`uFTlxCMl-B-CAr`;OHof#HtBRm=3t*PhLoM% z7`HPm&dkZqQR?KB7zxrY?!v=e1>cQzySTBXv{j$Sxn143Qfg-W^DyI&Q?uePVZ}dD zMi@q5lA9y~ySEYWUpD;xDUlJ}pJG-nPYGDAD16`$#5s`xC5 zTQs?TS?#;oYtp^iW)m4#P}Z&;(y;t(K&98indX7KiB5=>rb)Mcl)g&w9n+! zLj12t+kM|dFrWF_h^<;o^(RnvLEF*T<}YvucBcomJs+iJnLjWZo?1Kje|ON(L$eKA z{jYw&lOYZH0pA*kqt{TAYpAQFMfw!ivh~v@1rXwFv6ywd*M@THJKH|-+Zf}bce=xr zj7^GVKAbTz#{ebPheSd$_~V7Qc@(paPJdK`N zEVZXAr~o@9yGR{6Cx$6A0bhib8tGmVdn<{nxI^8xH%6@lbpk!?UFkv}q%1rUU9euw zQlN)|@gn#t)OcS7THaclf4trRj_x$rC}5%PdvcxH~25~$OldYSZVjtv52f_p*fzX-&ECfHe?k^am@S1q&XU0r4_f55@K9Ev9%?X1nvsdHM3RkCP2p^N zTNo}qq;h#29b~>_{e4*e3ueaDa z@p7XkDD1;$Yz{pUW31$7nXL8mlypV2nDQ~ zG|OHJ&J8$1tM0GLoC#AV9HG_Qm#cMuO}0#``|GN^?AP%1;M(BpmVbi{@wd&C>09y4 z>@1(~9l1A*%M#8z-fu(2vgvRvo2c{$GH-G}pwd@V=_}Prf2g{CBm*Zbnjlu*$$u>K zrT}hOg+I|4|3qVK-P{{{r?w|#>_qabSOUE!Yo`{*XJdrDQ)B+hOtuJPRIz*Bx-`@v z>7*g8NJE-rmQw3#CEesSid%?}Xj3?^S7*5g+-x_;rwnC%nkb}jbe5;W4QX>{&RXKO zWHY{KM&_`P)I`z<0tv$yE%uozT#?(}$IJD}MMlpUqnTL~>KX_XRbh-)v5_^y3O3v2 zc7ALc^ZzSsY9?+jbEKKJe`Rp)@sS!G*@XVgNx45=_GmK|$UF4|kyEfZmK^6mVu8^e)_} z#{31@ctUlg3TgFzMzQR5lwisO`bhS!p+j34As_5|0|S&uJU4mW%7k$;C{9DgYRm5M@k#-dTAR!Vqgd;%VEQ?!a5y!Dkso zt6CU^%>Ox4(`<58W_?AH z+xoWgc9kd_{%s}7ye%kE{4SFqOATwybV`9DS%du}Vec5Oq^7ph{GKr{9q0z_aDiqi zY~ZzI-N-PAR&EEkgLeB-o{HkCvU~5y92@P3t?EXH9e*dbbGt9?@HAzt$GFt)OJl5e z_HU;J!Yu;{;|uL~ZfNbwLmZ+RXWQ$>vL&^W)Y{D}8W*uEt)e#A>Wz)olO6A|7`YKRt8v98C$=o z?a*mvkSiNARu1GWrrS})c8rAowmom5NbK6;Jnp26*#)?huEZFR3OSmY`xQAg3M59W zY_l9v+-Uhj@U4lZ5c#Fho{oW%38|&D#ZDbXNe`S-5h-;Y!@P^zwLKk6#%h#wrx@uW zTQh5b7`8>NfxxGmgx;j79}+CEAJNj0WK3x7me3mZ+o`^Z(;UJpA~$WDjubn+o!drZ zyw168w3NB;b(l=5!;? zX1z4qjWlaxWs%T}2(&g<2($`ITi15IZRhj&I#1hXjXOY_{FRnEAGvvd!u!>P4L;92 zTR@ft-SR|lv6G-N|B0c~>evLf;YWXK`N?d^5{NmwzHvi>qD4WOGbmq_7O!vM2Mv{d zA7YkghxmKFX<=GA=?O=%p&h{2mMbg#Ox?DR-nt?Ym zGWPY1J&Tn|nUP)6*w}lQ{i_PY+ zwG^23lD3T@dF$q)Do0Yo$ZC}d^Pat>GaUuB^2}$~cg;%NktH%(8_YcJVvJMUTS`pz z)Hi<&w8m6vHKjX4L|cu2)h!gUt$*I2t=~3&S~8B(;|7-A%@)jV$9<8AAqo%qcPzd*$1QuWSV%WKgtC#U=Hd|zh%7O!ozjOcXKjk&%p zrq)@Pw!;kCeE{znbRU2_u+jy)4WJ2yj&

    -#~NNiWJpS-ddY*(mKQ)etLQYjX2UB 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 literal 0 HcmV?d00001 diff --git a/thirdparty/zlib-1.3.1/install/share/man/man3/zlib.3 b/thirdparty/zlib-1.3.1/install/share/man/man3/zlib.3 new file mode 100644 index 0000000..c716020 --- /dev/null +++ b/thirdparty/zlib-1.3.1/install/share/man/man3/zlib.3 @@ -0,0 +1,149 @@ +.TH ZLIB 3 "22 Jan 2024" +.SH NAME +zlib \- compression/decompression library +.SH SYNOPSIS +[see +.I zlib.h +for full description] +.SH DESCRIPTION +The +.I zlib +library is a general purpose data compression library. +The code is thread safe, assuming that the standard library functions +used are thread safe, such as memory allocation routines. +It provides in-memory compression and decompression functions, +including integrity checks of the uncompressed data. +This version of the library supports only one compression method (deflation) +but other algorithms may be added later +with the same stream interface. +.LP +Compression can be done in a single step if the buffers are large enough +or can be done by repeated calls of the compression function. +In the latter case, +the application must provide more input and/or consume the output +(providing more output space) before each call. +.LP +The library also supports reading and writing files in +.IR gzip (1) +(.gz) format +with an interface similar to that of stdio. +.LP +The library does not install any signal handler. +The decoder checks the consistency of the compressed data, +so the library should never crash even in the case of corrupted input. +.LP +All functions of the compression library are documented in the file +.IR zlib.h . +The distribution source includes examples of use of the library +in the files +.I test/example.c +and +.IR test/minigzip.c, +as well as other examples in the +.IR examples/ +directory. +.LP +Changes to this version are documented in the file +.I ChangeLog +that accompanies the source. +.LP +.I zlib +is built in to many languages and operating systems, including but not limited to +Java, Python, .NET, PHP, Perl, Ruby, Swift, and Go. +.LP +An experimental package to read and write files in the .zip format, +written on top of +.I zlib +by Gilles Vollant (info@winimage.com), +is available at: +.IP +http://www.winimage.com/zLibDll/minizip.html +and also in the +.I contrib/minizip +directory of the main +.I zlib +source distribution. +.SH "SEE ALSO" +The +.I zlib +web site can be found at: +.IP +http://zlib.net/ +.LP +The data format used by the +.I zlib +library is described by RFC +(Request for Comments) 1950 to 1952 in the files: +.IP +http://tools.ietf.org/html/rfc1950 (for the zlib header and trailer format) +.br +http://tools.ietf.org/html/rfc1951 (for the deflate compressed data format) +.br +http://tools.ietf.org/html/rfc1952 (for the gzip header and trailer format) +.LP +Mark Nelson wrote an article about +.I zlib +for the Jan. 1997 issue of Dr. Dobb's Journal; +a copy of the article is available at: +.IP +http://marknelson.us/1997/01/01/zlib-engine/ +.SH "REPORTING PROBLEMS" +Before reporting a problem, +please check the +.I zlib +web site to verify that you have the latest version of +.IR zlib ; +otherwise, +obtain the latest version and see if the problem still exists. +Please read the +.I zlib +FAQ at: +.IP +http://zlib.net/zlib_faq.html +.LP +before asking for help. +Send questions and/or comments to zlib@gzip.org, +or (for the Windows DLL version) to Gilles Vollant (info@winimage.com). +.SH AUTHORS AND LICENSE +Version 1.3.1 +.LP +Copyright (C) 1995-2024 Jean-loup Gailly and Mark Adler +.LP +This software is provided 'as-is', without any express or implied +warranty. In no event will the authors be held liable for any damages +arising from the use of this software. +.LP +Permission is granted to anyone to use this software for any purpose, +including commercial applications, and to alter it and redistribute it +freely, subject to the following restrictions: +.LP +.nr step 1 1 +.IP \n[step]. 3 +The origin of this software must not be misrepresented; you must not +claim that you wrote the original software. If you use this software +in a product, an acknowledgment in the product documentation would be +appreciated but is not required. +.IP \n+[step]. +Altered source versions must be plainly marked as such, and must not be +misrepresented as being the original software. +.IP \n+[step]. +This notice may not be removed or altered from any source distribution. +.LP +Jean-loup Gailly Mark Adler +.br +jloup@gzip.org madler@alumni.caltech.edu +.LP +The deflate format used by +.I zlib +was defined by Phil Katz. +The deflate and +.I zlib +specifications were written by L. Peter Deutsch. +Thanks to all the people who reported problems and suggested various +improvements in +.IR zlib ; +who are too numerous to cite here. +.LP +UNIX manual page by R. P. C. Rodgers, +U.S. National Library of Medicine (rodgers@nlm.nih.gov). +.\" end of man page diff --git a/thirdparty/zlib-1.3.1/install/share/pkgconfig/zlib.pc b/thirdparty/zlib-1.3.1/install/share/pkgconfig/zlib.pc new file mode 100644 index 0000000..78e0117 --- /dev/null +++ b/thirdparty/zlib-1.3.1/install/share/pkgconfig/zlib.pc @@ -0,0 +1,13 @@ +prefix=/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/install +exec_prefix=/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/install +libdir=/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/install/lib +sharedlibdir=/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/install/lib +includedir=/home/romazan/Рабочий Ñтол/cproject/thirdparty/zlib-1.3.1/install/include + +Name: zlib +Description: zlib compression library +Version: 1.3.1 + +Requires: +Libs: -L${libdir} -L${sharedlibdir} -lz +Cflags: -I${includedir} diff --git a/thirdparty/zlib-1.3.1/make_vms.com b/thirdparty/zlib-1.3.1/make_vms.com new file mode 100644 index 0000000..4dc8a89 --- /dev/null +++ b/thirdparty/zlib-1.3.1/make_vms.com @@ -0,0 +1,867 @@ +$! make libz under VMS written by +$! Martin P.J. Zinser +$! +$! In case of problems with the install you might contact me at +$! zinser@zinser.no-ip.info(preferred) or +$! martin.zinser@eurexchange.com (work) +$! +$! Make procedure history for Zlib +$! +$!------------------------------------------------------------------------------ +$! Version history +$! 0.01 20060120 First version to receive a number +$! 0.02 20061008 Adapt to new Makefile.in +$! 0.03 20091224 Add support for large file check +$! 0.04 20100110 Add new gzclose, gzlib, gzread, gzwrite +$! 0.05 20100221 Exchange zlibdefs.h by zconf.h.in +$! 0.06 20120111 Fix missing amiss_err, update zconf_h.in, fix new examples +$! subdir path, update module search in makefile.in +$! 0.07 20120115 Triggered by work done by Alexey Chupahin completely redesigned +$! shared image creation +$! 0.08 20120219 Make it work on VAX again, pre-load missing symbols to shared +$! image +$! 0.09 20120305 SMS. P1 sets builder ("MMK", "MMS", " " (built-in)). +$! "" -> automatic, preference: MMK, MMS, built-in. +$! +$ on error then goto err_exit +$! +$ true = 1 +$ false = 0 +$ tmpnam = "temp_" + f$getjpi("","pid") +$ tt = tmpnam + ".txt" +$ tc = tmpnam + ".c" +$ th = tmpnam + ".h" +$ define/nolog tconfig 'th' +$ its_decc = false +$ its_vaxc = false +$ its_gnuc = false +$ s_case = False +$! +$! Setup variables holding "config" information +$! +$ Make = "''p1'" +$ name = "Zlib" +$ version = "?.?.?" +$ v_string = "ZLIB_VERSION" +$ v_file = "zlib.h" +$ ccopt = "/include = []" +$ lopts = "" +$ dnsrl = "" +$ aconf_in_file = "zconf.h.in#zconf.h_in#zconf_h.in" +$ conf_check_string = "" +$ linkonly = false +$ optfile = name + ".opt" +$ mapfile = name + ".map" +$ libdefs = "" +$ vax = f$getsyi("HW_MODEL").lt.1024 +$ axp = f$getsyi("HW_MODEL").ge.1024 .and. f$getsyi("HW_MODEL").lt.4096 +$ ia64 = f$getsyi("HW_MODEL").ge.4096 +$! +$! 2012-03-05 SMS. +$! Why is this needed? And if it is needed, why not simply ".not. vax"? +$! +$!!! if axp .or. ia64 then set proc/parse=extended +$! +$ whoami = f$parse(f$environment("Procedure"),,,,"NO_CONCEAL") +$ mydef = F$parse(whoami,,,"DEVICE") +$ mydir = f$parse(whoami,,,"DIRECTORY") - "][" +$ myproc = f$parse(whoami,,,"Name") + f$parse(whoami,,,"type") +$! +$! Check for MMK/MMS +$! +$ if (Make .eqs. "") +$ then +$ If F$Search ("Sys$System:MMS.EXE") .nes. "" Then Make = "MMS" +$ If F$Type (MMK) .eqs. "STRING" Then Make = "MMK" +$ else +$ Make = f$edit( Make, "trim") +$ endif +$! +$ gosub find_version +$! +$ open/write topt tmp.opt +$ open/write optf 'optfile' +$! +$ gosub check_opts +$! +$! Look for the compiler used +$! +$ gosub check_compiler +$ close topt +$ close optf +$! +$ if its_decc +$ then +$ ccopt = "/prefix=all" + ccopt +$ if f$trnlnm("SYS") .eqs. "" +$ then +$ if axp +$ then +$ define sys sys$library: +$ else +$ ccopt = "/decc" + ccopt +$ define sys decc$library_include: +$ endif +$ endif +$! +$! 2012-03-05 SMS. +$! Why /NAMES = AS_IS? Why not simply ".not. vax"? And why not on VAX? +$! +$ if axp .or. ia64 +$ then +$ ccopt = ccopt + "/name=as_is/opt=(inline=speed)" +$ s_case = true +$ endif +$ endif +$ if its_vaxc .or. its_gnuc +$ then +$ if f$trnlnm("SYS").eqs."" then define sys sys$library: +$ endif +$! +$! Build a fake configure input header +$! +$ open/write conf_hin config.hin +$ write conf_hin "#undef _LARGEFILE64_SOURCE" +$ close conf_hin +$! +$! +$ i = 0 +$FIND_ACONF: +$ fname = f$element(i,"#",aconf_in_file) +$ if fname .eqs. "#" then goto AMISS_ERR +$ if f$search(fname) .eqs. "" +$ then +$ i = i + 1 +$ goto find_aconf +$ endif +$ open/read/err=aconf_err aconf_in 'fname' +$ open/write aconf zconf.h +$ACONF_LOOP: +$ read/end_of_file=aconf_exit aconf_in line +$ work = f$edit(line, "compress,trim") +$ if f$extract(0,6,work) .nes. "#undef" +$ then +$ if f$extract(0,12,work) .nes. "#cmakedefine" +$ then +$ write aconf line +$ endif +$ else +$ cdef = f$element(1," ",work) +$ gosub check_config +$ endif +$ goto aconf_loop +$ACONF_EXIT: +$ write aconf "" +$ write aconf "/* VMS specifics added by make_vms.com: */" +$ write aconf "#define VMS 1" +$ write aconf "#include " +$ write aconf "#include " +$ write aconf "#ifdef _LARGEFILE" +$ write aconf "# define off64_t __off64_t" +$ write aconf "# define fopen64 fopen" +$ write aconf "# define fseeko64 fseeko" +$ write aconf "# define lseek64 lseek" +$ write aconf "# define ftello64 ftell" +$ write aconf "#endif" +$ write aconf "#if !defined( __VAX) && (__CRTL_VER >= 70312000)" +$ write aconf "# define HAVE_VSNPRINTF" +$ write aconf "#endif" +$ close aconf_in +$ close aconf +$ if f$search("''th'") .nes. "" then delete 'th';* +$! Build the thing plain or with mms +$! +$ write sys$output "Compiling Zlib sources ..." +$ if make.eqs."" +$ then +$ if (f$search( "example.obj;*") .nes. "") then delete example.obj;* +$ if (f$search( "minigzip.obj;*") .nes. "") then delete minigzip.obj;* +$ CALL MAKE adler32.OBJ "CC ''CCOPT' adler32" - + adler32.c zlib.h zconf.h +$ CALL MAKE compress.OBJ "CC ''CCOPT' compress" - + compress.c zlib.h zconf.h +$ CALL MAKE crc32.OBJ "CC ''CCOPT' crc32" - + crc32.c zlib.h zconf.h +$ CALL MAKE deflate.OBJ "CC ''CCOPT' deflate" - + deflate.c deflate.h zutil.h zlib.h zconf.h +$ CALL MAKE gzclose.OBJ "CC ''CCOPT' gzclose" - + gzclose.c zutil.h zlib.h zconf.h +$ CALL MAKE gzlib.OBJ "CC ''CCOPT' gzlib" - + gzlib.c zutil.h zlib.h zconf.h +$ CALL MAKE gzread.OBJ "CC ''CCOPT' gzread" - + gzread.c zutil.h zlib.h zconf.h +$ CALL MAKE gzwrite.OBJ "CC ''CCOPT' gzwrite" - + gzwrite.c zutil.h zlib.h zconf.h +$ CALL MAKE infback.OBJ "CC ''CCOPT' infback" - + infback.c zutil.h inftrees.h inflate.h inffast.h inffixed.h +$ CALL MAKE inffast.OBJ "CC ''CCOPT' inffast" - + inffast.c zutil.h zlib.h zconf.h inffast.h +$ CALL MAKE inflate.OBJ "CC ''CCOPT' inflate" - + inflate.c zutil.h zlib.h zconf.h infblock.h +$ CALL MAKE inftrees.OBJ "CC ''CCOPT' inftrees" - + inftrees.c zutil.h zlib.h zconf.h inftrees.h +$ CALL MAKE trees.OBJ "CC ''CCOPT' trees" - + trees.c deflate.h zutil.h zlib.h zconf.h +$ CALL MAKE uncompr.OBJ "CC ''CCOPT' uncompr" - + uncompr.c zlib.h zconf.h +$ CALL MAKE zutil.OBJ "CC ''CCOPT' zutil" - + zutil.c zutil.h zlib.h zconf.h +$ write sys$output "Building Zlib ..." +$ CALL MAKE libz.OLB "lib/crea libz.olb *.obj" *.OBJ +$ write sys$output "Building example..." +$ CALL MAKE example.OBJ "CC ''CCOPT' [.test]example" - + [.test]example.c zlib.h zconf.h +$ call make example.exe "LINK example,libz.olb/lib" example.obj libz.olb +$ write sys$output "Building minigzip..." +$ CALL MAKE minigzip.OBJ "CC ''CCOPT' [.test]minigzip" - + [.test]minigzip.c zlib.h zconf.h +$ call make minigzip.exe - + "LINK minigzip,libz.olb/lib" - + minigzip.obj libz.olb +$ else +$ gosub crea_mms +$ write sys$output "Make ''name' ''version' with ''Make' " +$ 'make' +$ endif +$! +$! Create shareable image +$! +$ gosub crea_olist +$ write sys$output "Creating libzshr.exe" +$ call map_2_shopt 'mapfile' 'optfile' +$ LINK_'lopts'/SHARE=libzshr.exe modules.opt/opt,'optfile'/opt +$ write sys$output "Zlib build completed" +$ delete/nolog tmp.opt;* +$ exit +$AMISS_ERR: +$ write sys$output "No source for config.hin found." +$ write sys$output "Tried any of ''aconf_in_file'" +$ goto err_exit +$CC_ERR: +$ write sys$output "C compiler required to build ''name'" +$ goto err_exit +$ERR_EXIT: +$ set message/facil/ident/sever/text +$ close/nolog optf +$ close/nolog topt +$ close/nolog aconf_in +$ close/nolog aconf +$ close/nolog out +$ close/nolog min +$ close/nolog mod +$ close/nolog h_in +$ write sys$output "Exiting..." +$ exit 2 +$! +$! +$MAKE: SUBROUTINE !SUBROUTINE TO CHECK DEPENDENCIES +$ V = 'F$Verify(0) +$! P1 = What we are trying to make +$! P2 = Command to make it +$! P3 - P8 What it depends on +$ +$ If F$Search(P1) .Eqs. "" Then Goto Makeit +$ Time = F$CvTime(F$File(P1,"RDT")) +$arg=3 +$Loop: +$ Argument = P'arg +$ If Argument .Eqs. "" Then Goto Exit +$ El=0 +$Loop2: +$ File = F$Element(El," ",Argument) +$ If File .Eqs. " " Then Goto Endl +$ AFile = "" +$Loop3: +$ OFile = AFile +$ AFile = F$Search(File) +$ If AFile .Eqs. "" .Or. AFile .Eqs. OFile Then Goto NextEl +$ If F$CvTime(F$File(AFile,"RDT")) .Ges. Time Then Goto Makeit +$ Goto Loop3 +$NextEL: +$ El = El + 1 +$ Goto Loop2 +$EndL: +$ arg=arg+1 +$ If arg .Le. 8 Then Goto Loop +$ Goto Exit +$ +$Makeit: +$ VV=F$VERIFY(0) +$ write sys$output P2 +$ 'P2 +$ VV='F$Verify(VV) +$Exit: +$ If V Then Set Verify +$ENDSUBROUTINE +$!------------------------------------------------------------------------------ +$! +$! Check command line options and set symbols accordingly +$! +$!------------------------------------------------------------------------------ +$! Version history +$! 0.01 20041206 First version to receive a number +$! 0.02 20060126 Add new "HELP" target +$ CHECK_OPTS: +$ i = 1 +$ OPT_LOOP: +$ if i .lt. 9 +$ then +$ cparm = f$edit(p'i',"upcase") +$! +$! Check if parameter actually contains something +$! +$ if f$edit(cparm,"trim") .nes. "" +$ then +$ if cparm .eqs. "DEBUG" +$ then +$ ccopt = ccopt + "/noopt/deb" +$ lopts = lopts + "/deb" +$ endif +$ if f$locate("CCOPT=",cparm) .lt. f$length(cparm) +$ then +$ start = f$locate("=",cparm) + 1 +$ len = f$length(cparm) - start +$ ccopt = ccopt + f$extract(start,len,cparm) +$ if f$locate("AS_IS",f$edit(ccopt,"UPCASE")) .lt. f$length(ccopt) - + then s_case = true +$ endif +$ if cparm .eqs. "LINK" then linkonly = true +$ if f$locate("LOPTS=",cparm) .lt. f$length(cparm) +$ then +$ start = f$locate("=",cparm) + 1 +$ len = f$length(cparm) - start +$ lopts = lopts + f$extract(start,len,cparm) +$ endif +$ if f$locate("CC=",cparm) .lt. f$length(cparm) +$ then +$ start = f$locate("=",cparm) + 1 +$ len = f$length(cparm) - start +$ cc_com = f$extract(start,len,cparm) + if (cc_com .nes. "DECC") .and. - + (cc_com .nes. "VAXC") .and. - + (cc_com .nes. "GNUC") +$ then +$ write sys$output "Unsupported compiler choice ''cc_com' ignored" +$ write sys$output "Use DECC, VAXC, or GNUC instead" +$ else +$ if cc_com .eqs. "DECC" then its_decc = true +$ if cc_com .eqs. "VAXC" then its_vaxc = true +$ if cc_com .eqs. "GNUC" then its_gnuc = true +$ endif +$ endif +$ if f$locate("MAKE=",cparm) .lt. f$length(cparm) +$ then +$ start = f$locate("=",cparm) + 1 +$ len = f$length(cparm) - start +$ mmks = f$extract(start,len,cparm) +$ if (mmks .eqs. "MMK") .or. (mmks .eqs. "MMS") +$ then +$ make = mmks +$ else +$ write sys$output "Unsupported make choice ''mmks' ignored" +$ write sys$output "Use MMK or MMS instead" +$ endif +$ endif +$ if cparm .eqs. "HELP" then gosub bhelp +$ endif +$ i = i + 1 +$ goto opt_loop +$ endif +$ return +$!------------------------------------------------------------------------------ +$! +$! Look for the compiler used +$! +$! Version history +$! 0.01 20040223 First version to receive a number +$! 0.02 20040229 Save/set value of decc$no_rooted_search_lists +$! 0.03 20060202 Extend handling of GNU C +$! 0.04 20090402 Compaq -> hp +$CHECK_COMPILER: +$ if (.not. (its_decc .or. its_vaxc .or. its_gnuc)) +$ then +$ its_decc = (f$search("SYS$SYSTEM:DECC$COMPILER.EXE") .nes. "") +$ its_vaxc = .not. its_decc .and. (F$Search("SYS$System:VAXC.Exe") .nes. "") +$ its_gnuc = .not. (its_decc .or. its_vaxc) .and. (f$trnlnm("gnu_cc") .nes. "") +$ endif +$! +$! Exit if no compiler available +$! +$ if (.not. (its_decc .or. its_vaxc .or. its_gnuc)) +$ then goto CC_ERR +$ else +$ if its_decc +$ then +$ write sys$output "CC compiler check ... hp C" +$ if f$trnlnm("decc$no_rooted_search_lists") .nes. "" +$ then +$ dnrsl = f$trnlnm("decc$no_rooted_search_lists") +$ endif +$ define/nolog decc$no_rooted_search_lists 1 +$ else +$ if its_vaxc then write sys$output "CC compiler check ... VAX C" +$ if its_gnuc +$ then +$ write sys$output "CC compiler check ... GNU C" +$ if f$trnlnm(topt) then write topt "gnu_cc:[000000]gcclib.olb/lib" +$ if f$trnlnm(optf) then write optf "gnu_cc:[000000]gcclib.olb/lib" +$ cc = "gcc" +$ endif +$ if f$trnlnm(topt) then write topt "sys$share:vaxcrtl.exe/share" +$ if f$trnlnm(optf) then write optf "sys$share:vaxcrtl.exe/share" +$ endif +$ endif +$ return +$!------------------------------------------------------------------------------ +$! +$! If MMS/MMK are available dump out the descrip.mms if required +$! +$CREA_MMS: +$ write sys$output "Creating descrip.mms..." +$ create descrip.mms +$ open/append out descrip.mms +$ copy sys$input: out +$ deck +# descrip.mms: MMS description file for building zlib on VMS +# written by Martin P.J. Zinser +# + +OBJS = adler32.obj, compress.obj, crc32.obj, gzclose.obj, gzlib.obj\ + gzread.obj, gzwrite.obj, uncompr.obj, infback.obj\ + deflate.obj, trees.obj, zutil.obj, inflate.obj, \ + inftrees.obj, inffast.obj + +$ eod +$ write out "CFLAGS=", ccopt +$ write out "LOPTS=", lopts +$ write out "all : example.exe minigzip.exe libz.olb" +$ copy sys$input: out +$ deck + @ write sys$output " Example applications available" + +libz.olb : libz.olb($(OBJS)) + @ write sys$output " libz available" + +example.exe : example.obj libz.olb + link $(LOPTS) example,libz.olb/lib + +minigzip.exe : minigzip.obj libz.olb + link $(LOPTS) minigzip,libz.olb/lib + +clean : + delete *.obj;*,libz.olb;*,*.opt;*,*.exe;* + + +# Other dependencies. +adler32.obj : adler32.c zutil.h zlib.h zconf.h +compress.obj : compress.c zlib.h zconf.h +crc32.obj : crc32.c zutil.h zlib.h zconf.h +deflate.obj : deflate.c deflate.h zutil.h zlib.h zconf.h +example.obj : [.test]example.c zlib.h zconf.h +gzclose.obj : gzclose.c zutil.h zlib.h zconf.h +gzlib.obj : gzlib.c zutil.h zlib.h zconf.h +gzread.obj : gzread.c zutil.h zlib.h zconf.h +gzwrite.obj : gzwrite.c zutil.h zlib.h zconf.h +inffast.obj : inffast.c zutil.h zlib.h zconf.h inftrees.h inffast.h +inflate.obj : inflate.c zutil.h zlib.h zconf.h +inftrees.obj : inftrees.c zutil.h zlib.h zconf.h inftrees.h +minigzip.obj : [.test]minigzip.c zlib.h zconf.h +trees.obj : trees.c deflate.h zutil.h zlib.h zconf.h +uncompr.obj : uncompr.c zlib.h zconf.h +zutil.obj : zutil.c zutil.h zlib.h zconf.h +infback.obj : infback.c zutil.h inftrees.h inflate.h inffast.h inffixed.h +$ eod +$ close out +$ return +$!------------------------------------------------------------------------------ +$! +$! Read list of core library sources from makefile.in and create options +$! needed to build shareable image +$! +$CREA_OLIST: +$ open/read min makefile.in +$ open/write mod modules.opt +$ src_check_list = "OBJZ =#OBJG =" +$MRLOOP: +$ read/end=mrdone min rec +$ i = 0 +$SRC_CHECK_LOOP: +$ src_check = f$element(i, "#", src_check_list) +$ i = i+1 +$ if src_check .eqs. "#" then goto mrloop +$ if (f$extract(0,6,rec) .nes. src_check) then goto src_check_loop +$ rec = rec - src_check +$ gosub extra_filnam +$ if (f$element(1,"\",rec) .eqs. "\") then goto mrloop +$MRSLOOP: +$ read/end=mrdone min rec +$ gosub extra_filnam +$ if (f$element(1,"\",rec) .nes. "\") then goto mrsloop +$MRDONE: +$ close min +$ close mod +$ return +$!------------------------------------------------------------------------------ +$! +$! Take record extracted in crea_olist and split it into single filenames +$! +$EXTRA_FILNAM: +$ myrec = f$edit(rec - "\", "trim,compress") +$ i = 0 +$FELOOP: +$ srcfil = f$element(i," ", myrec) +$ if (srcfil .nes. " ") +$ then +$ write mod f$parse(srcfil,,,"NAME"), ".obj" +$ i = i + 1 +$ goto feloop +$ endif +$ return +$!------------------------------------------------------------------------------ +$! +$! Find current Zlib version number +$! +$FIND_VERSION: +$ open/read h_in 'v_file' +$hloop: +$ read/end=hdone h_in rec +$ rec = f$edit(rec,"TRIM") +$ if (f$extract(0,1,rec) .nes. "#") then goto hloop +$ rec = f$edit(rec - "#", "TRIM") +$ if f$element(0," ",rec) .nes. "define" then goto hloop +$ if f$element(1," ",rec) .eqs. v_string +$ then +$ version = 'f$element(2," ",rec)' +$ goto hdone +$ endif +$ goto hloop +$hdone: +$ close h_in +$ return +$!------------------------------------------------------------------------------ +$! +$CHECK_CONFIG: +$! +$ in_ldef = f$locate(cdef,libdefs) +$ if (in_ldef .lt. f$length(libdefs)) +$ then +$ write aconf "#define ''cdef' 1" +$ libdefs = f$extract(0,in_ldef,libdefs) + - + f$extract(in_ldef + f$length(cdef) + 1, - + f$length(libdefs) - in_ldef - f$length(cdef) - 1, - + libdefs) +$ else +$ if (f$type('cdef') .eqs. "INTEGER") +$ then +$ write aconf "#define ''cdef' ", 'cdef' +$ else +$ if (f$type('cdef') .eqs. "STRING") +$ then +$ write aconf "#define ''cdef' ", """", '''cdef'', """" +$ else +$ gosub check_cc_def +$ endif +$ endif +$ endif +$ return +$!------------------------------------------------------------------------------ +$! +$! Check if this is a define relating to the properties of the C/C++ +$! compiler +$! +$ CHECK_CC_DEF: +$ if (cdef .eqs. "_LARGEFILE64_SOURCE") +$ then +$ copy sys$input: 'tc' +$ deck +#include "tconfig" +#define _LARGEFILE +#include + +int main(){ +FILE *fp; + fp = fopen("temp.txt","r"); + fseeko(fp,1,SEEK_SET); + fclose(fp); +} + +$ eod +$ test_inv = false +$ comm_h = false +$ gosub cc_prop_check +$ return +$ endif +$ write aconf "/* ", line, " */" +$ return +$!------------------------------------------------------------------------------ +$! +$! Check for properties of C/C++ compiler +$! +$! Version history +$! 0.01 20031020 First version to receive a number +$! 0.02 20031022 Added logic for defines with value +$! 0.03 20040309 Make sure local config file gets not deleted +$! 0.04 20041230 Also write include for configure run +$! 0.05 20050103 Add processing of "comment defines" +$CC_PROP_CHECK: +$ cc_prop = true +$ is_need = false +$ is_need = (f$extract(0,4,cdef) .eqs. "NEED") .or. (test_inv .eq. true) +$ if f$search(th) .eqs. "" then create 'th' +$ set message/nofac/noident/nosever/notext +$ on error then continue +$ cc 'tmpnam' +$ if .not. ($status) then cc_prop = false +$ on error then continue +$! The headers might lie about the capabilities of the RTL +$ link 'tmpnam',tmp.opt/opt +$ if .not. ($status) then cc_prop = false +$ set message/fac/ident/sever/text +$ on error then goto err_exit +$ delete/nolog 'tmpnam'.*;*/exclude='th' +$ if (cc_prop .and. .not. is_need) .or. - + (.not. cc_prop .and. is_need) +$ then +$ write sys$output "Checking for ''cdef'... yes" +$ if f$type('cdef_val'_yes) .nes. "" +$ then +$ if f$type('cdef_val'_yes) .eqs. "INTEGER" - + then call write_config f$fao("#define !AS !UL",cdef,'cdef_val'_yes) +$ if f$type('cdef_val'_yes) .eqs. "STRING" - + then call write_config f$fao("#define !AS !AS",cdef,'cdef_val'_yes) +$ else +$ call write_config f$fao("#define !AS 1",cdef) +$ endif +$ if (cdef .eqs. "HAVE_FSEEKO") .or. (cdef .eqs. "_LARGE_FILES") .or. - + (cdef .eqs. "_LARGEFILE64_SOURCE") then - + call write_config f$string("#define _LARGEFILE 1") +$ else +$ write sys$output "Checking for ''cdef'... no" +$ if (comm_h) +$ then + call write_config f$fao("/* !AS */",line) +$ else +$ if f$type('cdef_val'_no) .nes. "" +$ then +$ if f$type('cdef_val'_no) .eqs. "INTEGER" - + then call write_config f$fao("#define !AS !UL",cdef,'cdef_val'_no) +$ if f$type('cdef_val'_no) .eqs. "STRING" - + then call write_config f$fao("#define !AS !AS",cdef,'cdef_val'_no) +$ else +$ call write_config f$fao("#undef !AS",cdef) +$ endif +$ endif +$ endif +$ return +$!------------------------------------------------------------------------------ +$! +$! Check for properties of C/C++ compiler with multiple result values +$! +$! Version history +$! 0.01 20040127 First version +$! 0.02 20050103 Reconcile changes from cc_prop up to version 0.05 +$CC_MPROP_CHECK: +$ cc_prop = true +$ i = 1 +$ idel = 1 +$ MT_LOOP: +$ if f$type(result_'i') .eqs. "STRING" +$ then +$ set message/nofac/noident/nosever/notext +$ on error then continue +$ cc 'tmpnam'_'i' +$ if .not. ($status) then cc_prop = false +$ on error then continue +$! The headers might lie about the capabilities of the RTL +$ link 'tmpnam'_'i',tmp.opt/opt +$ if .not. ($status) then cc_prop = false +$ set message/fac/ident/sever/text +$ on error then goto err_exit +$ delete/nolog 'tmpnam'_'i'.*;* +$ if (cc_prop) +$ then +$ write sys$output "Checking for ''cdef'... ", mdef_'i' +$ if f$type(mdef_'i') .eqs. "INTEGER" - + then call write_config f$fao("#define !AS !UL",cdef,mdef_'i') +$ if f$type('cdef_val'_yes) .eqs. "STRING" - + then call write_config f$fao("#define !AS !AS",cdef,mdef_'i') +$ goto msym_clean +$ else +$ i = i + 1 +$ goto mt_loop +$ endif +$ endif +$ write sys$output "Checking for ''cdef'... no" +$ call write_config f$fao("#undef !AS",cdef) +$ MSYM_CLEAN: +$ if (idel .le. msym_max) +$ then +$ delete/sym mdef_'idel' +$ idel = idel + 1 +$ goto msym_clean +$ endif +$ return +$!------------------------------------------------------------------------------ +$! +$! Write configuration to both permanent and temporary config file +$! +$! Version history +$! 0.01 20031029 First version to receive a number +$! +$WRITE_CONFIG: SUBROUTINE +$ write aconf 'p1' +$ open/append confh 'th' +$ write confh 'p1' +$ close confh +$ENDSUBROUTINE +$!------------------------------------------------------------------------------ +$! +$! Analyze the project map file and create the symbol vector for a shareable +$! image from it +$! +$! Version history +$! 0.01 20120128 First version +$! 0.02 20120226 Add pre-load logic +$! +$ MAP_2_SHOPT: Subroutine +$! +$ SAY := "WRITE_ SYS$OUTPUT" +$! +$ IF F$SEARCH("''P1'") .EQS. "" +$ THEN +$ SAY "MAP_2_SHOPT-E-NOSUCHFILE: Error, inputfile ''p1' not available" +$ goto exit_m2s +$ ENDIF +$ IF "''P2'" .EQS. "" +$ THEN +$ SAY "MAP_2_SHOPT: Error, no output file provided" +$ goto exit_m2s +$ ENDIF +$! +$ module1 = "deflate#deflateEnd#deflateInit_#deflateParams#deflateSetDictionary" +$ module2 = "gzclose#gzerror#gzgetc#gzgets#gzopen#gzprintf#gzputc#gzputs#gzread" +$ module3 = "gzseek#gztell#inflate#inflateEnd#inflateInit_#inflateSetDictionary" +$ module4 = "inflateSync#uncompress#zlibVersion#compress" +$ open/read map 'p1 +$ if axp .or. ia64 +$ then +$ open/write aopt a.opt +$ open/write bopt b.opt +$ write aopt " CASE_SENSITIVE=YES" +$ write bopt "SYMBOL_VECTOR= (-" +$ mod_sym_num = 1 +$ MOD_SYM_LOOP: +$ if f$type(module'mod_sym_num') .nes. "" +$ then +$ mod_in = 0 +$ MOD_SYM_IN: +$ shared_proc = f$element(mod_in, "#", module'mod_sym_num') +$ if shared_proc .nes. "#" +$ then +$ write aopt f$fao(" symbol_vector=(!AS/!AS=PROCEDURE)",- + f$edit(shared_proc,"upcase"),shared_proc) +$ write bopt f$fao("!AS=PROCEDURE,-",shared_proc) +$ mod_in = mod_in + 1 +$ goto mod_sym_in +$ endif +$ mod_sym_num = mod_sym_num + 1 +$ goto mod_sym_loop +$ endif +$MAP_LOOP: +$ read/end=map_end map line +$ if (f$locate("{",line).lt. f$length(line)) .or. - + (f$locate("global:", line) .lt. f$length(line)) +$ then +$ proc = true +$ goto map_loop +$ endif +$ if f$locate("}",line).lt. f$length(line) then proc = false +$ if f$locate("local:", line) .lt. f$length(line) then proc = false +$ if proc +$ then +$ shared_proc = f$edit(line,"collapse") +$ chop_semi = f$locate(";", shared_proc) +$ if chop_semi .lt. f$length(shared_proc) then - + shared_proc = f$extract(0, chop_semi, shared_proc) +$ write aopt f$fao(" symbol_vector=(!AS/!AS=PROCEDURE)",- + f$edit(shared_proc,"upcase"),shared_proc) +$ write bopt f$fao("!AS=PROCEDURE,-",shared_proc) +$ endif +$ goto map_loop +$MAP_END: +$ close/nolog aopt +$ close/nolog bopt +$ open/append libopt 'p2' +$ open/read aopt a.opt +$ open/read bopt b.opt +$ALOOP: +$ read/end=aloop_end aopt line +$ write libopt line +$ goto aloop +$ALOOP_END: +$ close/nolog aopt +$ sv = "" +$BLOOP: +$ read/end=bloop_end bopt svn +$ if (svn.nes."") +$ then +$ if (sv.nes."") then write libopt sv +$ sv = svn +$ endif +$ goto bloop +$BLOOP_END: +$ write libopt f$extract(0,f$length(sv)-2,sv), "-" +$ write libopt ")" +$ close/nolog bopt +$ delete/nolog/noconf a.opt;*,b.opt;* +$ else +$ if vax +$ then +$ open/append libopt 'p2' +$ mod_sym_num = 1 +$ VMOD_SYM_LOOP: +$ if f$type(module'mod_sym_num') .nes. "" +$ then +$ mod_in = 0 +$ VMOD_SYM_IN: +$ shared_proc = f$element(mod_in, "#", module'mod_sym_num') +$ if shared_proc .nes. "#" +$ then +$ write libopt f$fao("UNIVERSAL=!AS",- + f$edit(shared_proc,"upcase")) +$ mod_in = mod_in + 1 +$ goto vmod_sym_in +$ endif +$ mod_sym_num = mod_sym_num + 1 +$ goto vmod_sym_loop +$ endif +$VMAP_LOOP: +$ read/end=vmap_end map line +$ if (f$locate("{",line).lt. f$length(line)) .or. - + (f$locate("global:", line) .lt. f$length(line)) +$ then +$ proc = true +$ goto vmap_loop +$ endif +$ if f$locate("}",line).lt. f$length(line) then proc = false +$ if f$locate("local:", line) .lt. f$length(line) then proc = false +$ if proc +$ then +$ shared_proc = f$edit(line,"collapse") +$ chop_semi = f$locate(";", shared_proc) +$ if chop_semi .lt. f$length(shared_proc) then - + shared_proc = f$extract(0, chop_semi, shared_proc) +$ write libopt f$fao("UNIVERSAL=!AS",- + f$edit(shared_proc,"upcase")) +$ endif +$ goto vmap_loop +$VMAP_END: +$ else +$ write sys$output "Unknown Architecture (Not VAX, AXP, or IA64)" +$ write sys$output "No options file created" +$ endif +$ endif +$ EXIT_M2S: +$ close/nolog map +$ close/nolog libopt +$ endsubroutine diff --git a/thirdparty/zlib-1.3.1/msdos/Makefile.bor b/thirdparty/zlib-1.3.1/msdos/Makefile.bor new file mode 100644 index 0000000..3d12a2c --- /dev/null +++ b/thirdparty/zlib-1.3.1/msdos/Makefile.bor @@ -0,0 +1,115 @@ +# Makefile for zlib +# Borland C++ +# Last updated: 15-Mar-2003 + +# To use, do "make -fmakefile.bor" +# To compile in small model, set below: MODEL=s + +# WARNING: the small model is supported but only for small values of +# MAX_WBITS and MAX_MEM_LEVEL. For example: +# -DMAX_WBITS=11 -DDEF_WBITS=11 -DMAX_MEM_LEVEL=3 +# If you wish to reduce the memory requirements (default 256K for big +# objects plus a few K), you can add to the LOC macro below: +# -DMAX_MEM_LEVEL=7 -DMAX_WBITS=14 +# See zconf.h for details about the memory requirements. + +# ------------ Turbo C++, Borland C++ ------------ + +# Optional nonstandard preprocessor flags (e.g. -DMAX_MEM_LEVEL=7) +# should be added to the environment via "set LOCAL_ZLIB=-DFOO" or added +# to the declaration of LOC here: +LOC = $(LOCAL_ZLIB) + +# type for CPU required: 0: 8086, 1: 80186, 2: 80286, 3: 80386, etc. +CPU_TYP = 0 + +# memory model: one of s, m, c, l (small, medium, compact, large) +MODEL=l + +# replace bcc with tcc for Turbo C++ 1.0, with bcc32 for the 32 bit version +CC=bcc +LD=bcc +AR=tlib + +# compiler flags +# replace "-O2" by "-O -G -a -d" for Turbo C++ 1.0 +CFLAGS=-O2 -Z -m$(MODEL) $(LOC) + +LDFLAGS=-m$(MODEL) -f- + + +# variables +ZLIB_LIB = zlib_$(MODEL).lib + +OBJ1 = adler32.obj compress.obj crc32.obj deflate.obj gzclose.obj gzlib.obj gzread.obj +OBJ2 = gzwrite.obj infback.obj inffast.obj inflate.obj inftrees.obj trees.obj uncompr.obj zutil.obj +OBJP1 = +adler32.obj+compress.obj+crc32.obj+deflate.obj+gzclose.obj+gzlib.obj+gzread.obj +OBJP2 = +gzwrite.obj+infback.obj+inffast.obj+inflate.obj+inftrees.obj+trees.obj+uncompr.obj+zutil.obj + + +# targets +all: $(ZLIB_LIB) example.exe minigzip.exe + +.c.obj: + $(CC) -c $(CFLAGS) $*.c + +adler32.obj: adler32.c zlib.h zconf.h + +compress.obj: compress.c zlib.h zconf.h + +crc32.obj: crc32.c zlib.h zconf.h crc32.h + +deflate.obj: deflate.c deflate.h zutil.h zlib.h zconf.h + +gzclose.obj: gzclose.c zlib.h zconf.h gzguts.h + +gzlib.obj: gzlib.c zlib.h zconf.h gzguts.h + +gzread.obj: gzread.c zlib.h zconf.h gzguts.h + +gzwrite.obj: gzwrite.c zlib.h zconf.h gzguts.h + +infback.obj: infback.c zutil.h zlib.h zconf.h inftrees.h inflate.h \ + inffast.h inffixed.h + +inffast.obj: inffast.c zutil.h zlib.h zconf.h inftrees.h inflate.h \ + inffast.h + +inflate.obj: inflate.c zutil.h zlib.h zconf.h inftrees.h inflate.h \ + inffast.h inffixed.h + +inftrees.obj: inftrees.c zutil.h zlib.h zconf.h inftrees.h + +trees.obj: trees.c zutil.h zlib.h zconf.h deflate.h trees.h + +uncompr.obj: uncompr.c zlib.h zconf.h + +zutil.obj: zutil.c zutil.h zlib.h zconf.h + +example.obj: test/example.c zlib.h zconf.h + +minigzip.obj: test/minigzip.c zlib.h zconf.h + + +# the command line is cut to fit in the MS-DOS 128 byte limit: +$(ZLIB_LIB): $(OBJ1) $(OBJ2) + -del $(ZLIB_LIB) + $(AR) $(ZLIB_LIB) $(OBJP1) + $(AR) $(ZLIB_LIB) $(OBJP2) + +example.exe: example.obj $(ZLIB_LIB) + $(LD) $(LDFLAGS) example.obj $(ZLIB_LIB) + +minigzip.exe: minigzip.obj $(ZLIB_LIB) + $(LD) $(LDFLAGS) minigzip.obj $(ZLIB_LIB) + +test: example.exe minigzip.exe + example + echo hello world | minigzip | minigzip -d + +clean: + -del *.obj + -del *.lib + -del *.exe + -del zlib_*.bak + -del foo.gz diff --git a/thirdparty/zlib-1.3.1/msdos/Makefile.dj2 b/thirdparty/zlib-1.3.1/msdos/Makefile.dj2 new file mode 100644 index 0000000..59d2037 --- /dev/null +++ b/thirdparty/zlib-1.3.1/msdos/Makefile.dj2 @@ -0,0 +1,104 @@ +# Makefile for zlib. Modified for djgpp v2.0 by F. J. Donahoe, 3/15/96. +# Copyright (C) 1995-1998 Jean-loup Gailly. +# For conditions of distribution and use, see copyright notice in zlib.h + +# To compile, or to compile and test, type: +# +# make -fmakefile.dj2; make test -fmakefile.dj2 +# +# To install libz.a, zconf.h and zlib.h in the djgpp directories, type: +# +# make install -fmakefile.dj2 +# +# after first defining LIBRARY_PATH and INCLUDE_PATH in djgpp.env as +# in the sample below if the pattern of the DJGPP distribution is to +# be followed. Remember that, while 'es around <=> are ignored in +# makefiles, they are *not* in batch files or in djgpp.env. +# - - - - - +# [make] +# INCLUDE_PATH=%\>;INCLUDE_PATH%%\DJDIR%\include +# LIBRARY_PATH=%\>;LIBRARY_PATH%%\DJDIR%\lib +# BUTT=-m486 +# - - - - - +# Alternately, these variables may be defined below, overriding the values +# in djgpp.env, as +# INCLUDE_PATH=c:\usr\include +# LIBRARY_PATH=c:\usr\lib + +CC=gcc + +#CFLAGS=-MMD -O +#CFLAGS=-O -DMAX_WBITS=14 -DMAX_MEM_LEVEL=7 +#CFLAGS=-MMD -g -DZLIB_DEBUG +CFLAGS=-MMD -O3 $(BUTT) -Wall -Wwrite-strings -Wpointer-arith -Wconversion \ + -Wstrict-prototypes -Wmissing-prototypes + +# If cp.exe is available, replace "copy /Y" with "cp -fp" . +CP=copy /Y +# If gnu install.exe is available, replace $(CP) with ginstall. +INSTALL=$(CP) +# The default value of RM is "rm -f." If "rm.exe" is found, comment out: +RM=del +LDLIBS=-L. -lz +LD=$(CC) -s -o +LDSHARED=$(CC) + +INCL=zlib.h zconf.h +LIBS=libz.a + +AR=ar rcs + +prefix=/usr/local +exec_prefix = $(prefix) + +OBJS = adler32.o compress.o crc32.o gzclose.o gzlib.o gzread.o gzwrite.o \ + uncompr.o deflate.o trees.o zutil.o inflate.o infback.o inftrees.o inffast.o + +OBJA = +# to use the asm code: make OBJA=match.o + +TEST_OBJS = example.o minigzip.o + +all: example.exe minigzip.exe + +check: test +test: all + ./example + echo hello world | .\minigzip | .\minigzip -d + +%.o : %.c + $(CC) $(CFLAGS) -c $< -o $@ + +libz.a: $(OBJS) $(OBJA) + $(AR) $@ $(OBJS) $(OBJA) + +%.exe : %.o $(LIBS) + $(LD) $@ $< $(LDLIBS) + +# INCLUDE_PATH and LIBRARY_PATH were set for [make] in djgpp.env . + +.PHONY : uninstall clean + +install: $(INCL) $(LIBS) + -@if not exist $(INCLUDE_PATH)\nul mkdir $(INCLUDE_PATH) + -@if not exist $(LIBRARY_PATH)\nul mkdir $(LIBRARY_PATH) + $(INSTALL) zlib.h $(INCLUDE_PATH) + $(INSTALL) zconf.h $(INCLUDE_PATH) + $(INSTALL) libz.a $(LIBRARY_PATH) + +uninstall: + $(RM) $(INCLUDE_PATH)\zlib.h + $(RM) $(INCLUDE_PATH)\zconf.h + $(RM) $(LIBRARY_PATH)\libz.a + +clean: + $(RM) *.d + $(RM) *.o + $(RM) *.exe + $(RM) libz.a + $(RM) foo.gz + +DEPS := $(wildcard *.d) +ifneq ($(DEPS),) +include $(DEPS) +endif diff --git a/thirdparty/zlib-1.3.1/msdos/Makefile.emx b/thirdparty/zlib-1.3.1/msdos/Makefile.emx new file mode 100644 index 0000000..e30f67b --- /dev/null +++ b/thirdparty/zlib-1.3.1/msdos/Makefile.emx @@ -0,0 +1,69 @@ +# Makefile for zlib. Modified for emx 0.9c by Chr. Spieler, 6/17/98. +# Copyright (C) 1995-1998 Jean-loup Gailly. +# For conditions of distribution and use, see copyright notice in zlib.h + +# To compile, or to compile and test, type: +# +# make -fmakefile.emx; make test -fmakefile.emx +# + +CC=gcc + +#CFLAGS=-MMD -O +#CFLAGS=-O -DMAX_WBITS=14 -DMAX_MEM_LEVEL=7 +#CFLAGS=-MMD -g -DZLIB_DEBUG +CFLAGS=-MMD -O3 $(BUTT) -Wall -Wwrite-strings -Wpointer-arith -Wconversion \ + -Wstrict-prototypes -Wmissing-prototypes + +# If cp.exe is available, replace "copy /Y" with "cp -fp" . +CP=copy /Y +# If gnu install.exe is available, replace $(CP) with ginstall. +INSTALL=$(CP) +# The default value of RM is "rm -f." If "rm.exe" is found, comment out: +RM=del +LDLIBS=-L. -lzlib +LD=$(CC) -s -o +LDSHARED=$(CC) + +INCL=zlib.h zconf.h +LIBS=zlib.a + +AR=ar rcs + +prefix=/usr/local +exec_prefix = $(prefix) + +OBJS = adler32.o compress.o crc32.o gzclose.o gzlib.o gzread.o gzwrite.o \ + uncompr.o deflate.o trees.o zutil.o inflate.o infback.o inftrees.o inffast.o + +TEST_OBJS = example.o minigzip.o + +all: example.exe minigzip.exe + +test: all + ./example + echo hello world | .\minigzip | .\minigzip -d + +%.o : %.c + $(CC) $(CFLAGS) -c $< -o $@ + +zlib.a: $(OBJS) + $(AR) $@ $(OBJS) + +%.exe : %.o $(LIBS) + $(LD) $@ $< $(LDLIBS) + + +.PHONY : clean + +clean: + $(RM) *.d + $(RM) *.o + $(RM) *.exe + $(RM) zlib.a + $(RM) foo.gz + +DEPS := $(wildcard *.d) +ifneq ($(DEPS),) +include $(DEPS) +endif diff --git a/thirdparty/zlib-1.3.1/msdos/Makefile.msc b/thirdparty/zlib-1.3.1/msdos/Makefile.msc new file mode 100644 index 0000000..ae83786 --- /dev/null +++ b/thirdparty/zlib-1.3.1/msdos/Makefile.msc @@ -0,0 +1,112 @@ +# Makefile for zlib +# Microsoft C 5.1 or later +# Last updated: 19-Mar-2003 + +# To use, do "make makefile.msc" +# To compile in small model, set below: MODEL=S + +# If you wish to reduce the memory requirements (default 256K for big +# objects plus a few K), you can add to the LOC macro below: +# -DMAX_MEM_LEVEL=7 -DMAX_WBITS=14 +# See zconf.h for details about the memory requirements. + +# ------------- Microsoft C 5.1 and later ------------- + +# Optional nonstandard preprocessor flags (e.g. -DMAX_MEM_LEVEL=7) +# should be added to the environment via "set LOCAL_ZLIB=-DFOO" or added +# to the declaration of LOC here: +LOC = $(LOCAL_ZLIB) + +# Type for CPU required: 0: 8086, 1: 80186, 2: 80286, 3: 80386, etc. +CPU_TYP = 0 + +# Memory model: one of S, M, C, L (small, medium, compact, large) +MODEL=L + +CC=cl +CFLAGS=-nologo -A$(MODEL) -G$(CPU_TYP) -W3 -Oait -Gs $(LOC) +#-Ox generates bad code with MSC 5.1 +LIB_CFLAGS=-Zl $(CFLAGS) + +LD=link +LDFLAGS=/noi/e/st:0x1500/noe/farcall/packcode +# "/farcall/packcode" are only useful for `large code' memory models +# but should be a "no-op" for small code models. + + +# variables +ZLIB_LIB = zlib_$(MODEL).lib + +OBJ1 = adler32.obj compress.obj crc32.obj deflate.obj gzclose.obj gzlib.obj gzread.obj +OBJ2 = gzwrite.obj infback.obj inffast.obj inflate.obj inftrees.obj trees.obj uncompr.obj zutil.obj + + +# targets +all: $(ZLIB_LIB) example.exe minigzip.exe + +.c.obj: + $(CC) -c $(LIB_CFLAGS) $*.c + +adler32.obj: adler32.c zlib.h zconf.h + +compress.obj: compress.c zlib.h zconf.h + +crc32.obj: crc32.c zlib.h zconf.h crc32.h + +deflate.obj: deflate.c deflate.h zutil.h zlib.h zconf.h + +gzclose.obj: gzclose.c zlib.h zconf.h gzguts.h + +gzlib.obj: gzlib.c zlib.h zconf.h gzguts.h + +gzread.obj: gzread.c zlib.h zconf.h gzguts.h + +gzwrite.obj: gzwrite.c zlib.h zconf.h gzguts.h + +infback.obj: infback.c zutil.h zlib.h zconf.h inftrees.h inflate.h \ + inffast.h inffixed.h + +inffast.obj: inffast.c zutil.h zlib.h zconf.h inftrees.h inflate.h \ + inffast.h + +inflate.obj: inflate.c zutil.h zlib.h zconf.h inftrees.h inflate.h \ + inffast.h inffixed.h + +inftrees.obj: inftrees.c zutil.h zlib.h zconf.h inftrees.h + +trees.obj: trees.c zutil.h zlib.h zconf.h deflate.h trees.h + +uncompr.obj: uncompr.c zlib.h zconf.h + +zutil.obj: zutil.c zutil.h zlib.h zconf.h + +example.obj: test/example.c zlib.h zconf.h + $(CC) -c $(CFLAGS) $*.c + +minigzip.obj: test/minigzip.c zlib.h zconf.h + $(CC) -c $(CFLAGS) $*.c + + +# the command line is cut to fit in the MS-DOS 128 byte limit: +$(ZLIB_LIB): $(OBJ1) $(OBJ2) + if exist $(ZLIB_LIB) del $(ZLIB_LIB) + lib $(ZLIB_LIB) $(OBJ1); + lib $(ZLIB_LIB) $(OBJ2); + +example.exe: example.obj $(ZLIB_LIB) + $(LD) $(LDFLAGS) example.obj,,,$(ZLIB_LIB); + +minigzip.exe: minigzip.obj $(ZLIB_LIB) + $(LD) $(LDFLAGS) minigzip.obj,,,$(ZLIB_LIB); + +test: example.exe minigzip.exe + example + echo hello world | minigzip | minigzip -d + +clean: + -del *.obj + -del *.lib + -del *.exe + -del *.map + -del zlib_*.bak + -del foo.gz diff --git a/thirdparty/zlib-1.3.1/msdos/Makefile.tc b/thirdparty/zlib-1.3.1/msdos/Makefile.tc new file mode 100644 index 0000000..5aec82a --- /dev/null +++ b/thirdparty/zlib-1.3.1/msdos/Makefile.tc @@ -0,0 +1,100 @@ +# Makefile for zlib +# Turbo C 2.01, Turbo C++ 1.01 +# Last updated: 15-Mar-2003 + +# To use, do "make -fmakefile.tc" +# To compile in small model, set below: MODEL=s + +# WARNING: the small model is supported but only for small values of +# MAX_WBITS and MAX_MEM_LEVEL. For example: +# -DMAX_WBITS=11 -DMAX_MEM_LEVEL=3 +# If you wish to reduce the memory requirements (default 256K for big +# objects plus a few K), you can add to CFLAGS below: +# -DMAX_MEM_LEVEL=7 -DMAX_WBITS=14 +# See zconf.h for details about the memory requirements. + +# ------------ Turbo C 2.01, Turbo C++ 1.01 ------------ +MODEL=l +CC=tcc +LD=tcc +AR=tlib +# CFLAGS=-O2 -G -Z -m$(MODEL) -DMAX_WBITS=11 -DMAX_MEM_LEVEL=3 +CFLAGS=-O2 -G -Z -m$(MODEL) +LDFLAGS=-m$(MODEL) -f- + + +# variables +ZLIB_LIB = zlib_$(MODEL).lib + +OBJ1 = adler32.obj compress.obj crc32.obj deflate.obj gzclose.obj gzlib.obj gzread.obj +OBJ2 = gzwrite.obj infback.obj inffast.obj inflate.obj inftrees.obj trees.obj uncompr.obj zutil.obj +OBJP1 = +adler32.obj+compress.obj+crc32.obj+deflate.obj+gzclose.obj+gzlib.obj+gzread.obj +OBJP2 = +gzwrite.obj+infback.obj+inffast.obj+inflate.obj+inftrees.obj+trees.obj+uncompr.obj+zutil.obj + + +# targets +all: $(ZLIB_LIB) example.exe minigzip.exe + +.c.obj: + $(CC) -c $(CFLAGS) $*.c + +adler32.obj: adler32.c zlib.h zconf.h + +compress.obj: compress.c zlib.h zconf.h + +crc32.obj: crc32.c zlib.h zconf.h crc32.h + +deflate.obj: deflate.c deflate.h zutil.h zlib.h zconf.h + +gzclose.obj: gzclose.c zlib.h zconf.h gzguts.h + +gzlib.obj: gzlib.c zlib.h zconf.h gzguts.h + +gzread.obj: gzread.c zlib.h zconf.h gzguts.h + +gzwrite.obj: gzwrite.c zlib.h zconf.h gzguts.h + +infback.obj: infback.c zutil.h zlib.h zconf.h inftrees.h inflate.h \ + inffast.h inffixed.h + +inffast.obj: inffast.c zutil.h zlib.h zconf.h inftrees.h inflate.h \ + inffast.h + +inflate.obj: inflate.c zutil.h zlib.h zconf.h inftrees.h inflate.h \ + inffast.h inffixed.h + +inftrees.obj: inftrees.c zutil.h zlib.h zconf.h inftrees.h + +trees.obj: trees.c zutil.h zlib.h zconf.h deflate.h trees.h + +uncompr.obj: uncompr.c zlib.h zconf.h + +zutil.obj: zutil.c zutil.h zlib.h zconf.h + +example.obj: test/example.c zlib.h zconf.h + +minigzip.obj: test/minigzip.c zlib.h zconf.h + + +# the command line is cut to fit in the MS-DOS 128 byte limit: +$(ZLIB_LIB): $(OBJ1) $(OBJ2) + -del $(ZLIB_LIB) + $(AR) $(ZLIB_LIB) $(OBJP1) + $(AR) $(ZLIB_LIB) $(OBJP2) + +example.exe: example.obj $(ZLIB_LIB) + $(LD) $(LDFLAGS) example.obj $(ZLIB_LIB) + +minigzip.exe: minigzip.obj $(ZLIB_LIB) + $(LD) $(LDFLAGS) minigzip.obj $(ZLIB_LIB) + +test: example.exe minigzip.exe + example + echo hello world | minigzip | minigzip -d + +clean: + -del *.obj + -del *.lib + -del *.exe + -del zlib_*.bak + -del foo.gz diff --git a/thirdparty/zlib-1.3.1/nintendods/Makefile b/thirdparty/zlib-1.3.1/nintendods/Makefile new file mode 100644 index 0000000..21337d0 --- /dev/null +++ b/thirdparty/zlib-1.3.1/nintendods/Makefile @@ -0,0 +1,126 @@ +#--------------------------------------------------------------------------------- +.SUFFIXES: +#--------------------------------------------------------------------------------- + +ifeq ($(strip $(DEVKITARM)),) +$(error "Please set DEVKITARM in your environment. export DEVKITARM=devkitARM") +endif + +include $(DEVKITARM)/ds_rules + +#--------------------------------------------------------------------------------- +# TARGET is the name of the output +# BUILD is the directory where object files & intermediate files will be placed +# SOURCES is a list of directories containing source code +# DATA is a list of directories containing data files +# INCLUDES is a list of directories containing header files +#--------------------------------------------------------------------------------- +TARGET := $(shell basename $(CURDIR)) +BUILD := build +SOURCES := ../../ +DATA := data +INCLUDES := include + +#--------------------------------------------------------------------------------- +# options for code generation +#--------------------------------------------------------------------------------- +ARCH := -mthumb -mthumb-interwork + +CFLAGS := -Wall -O2\ + -march=armv5te -mtune=arm946e-s \ + -fomit-frame-pointer -ffast-math \ + $(ARCH) + +CFLAGS += $(INCLUDE) -DARM9 +CXXFLAGS := $(CFLAGS) -fno-rtti -fno-exceptions + +ASFLAGS := $(ARCH) -march=armv5te -mtune=arm946e-s +LDFLAGS = -specs=ds_arm9.specs -g $(ARCH) -Wl,-Map,$(notdir $*.map) + +#--------------------------------------------------------------------------------- +# list of directories containing libraries, this must be the top level containing +# include and lib +#--------------------------------------------------------------------------------- +LIBDIRS := $(LIBNDS) + +#--------------------------------------------------------------------------------- +# no real need to edit anything past this point unless you need to add additional +# rules for different file extensions +#--------------------------------------------------------------------------------- +ifneq ($(BUILD),$(notdir $(CURDIR))) +#--------------------------------------------------------------------------------- + +export OUTPUT := $(CURDIR)/lib/libz.a + +export VPATH := $(foreach dir,$(SOURCES),$(CURDIR)/$(dir)) \ + $(foreach dir,$(DATA),$(CURDIR)/$(dir)) + +export DEPSDIR := $(CURDIR)/$(BUILD) + +CFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.c))) +CPPFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.cpp))) +SFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.s))) +BINFILES := $(foreach dir,$(DATA),$(notdir $(wildcard $(dir)/*.*))) + +#--------------------------------------------------------------------------------- +# use CXX for linking C++ projects, CC for standard C +#--------------------------------------------------------------------------------- +ifeq ($(strip $(CPPFILES)),) +#--------------------------------------------------------------------------------- + export LD := $(CC) +#--------------------------------------------------------------------------------- +else +#--------------------------------------------------------------------------------- + export LD := $(CXX) +#--------------------------------------------------------------------------------- +endif +#--------------------------------------------------------------------------------- + +export OFILES := $(addsuffix .o,$(BINFILES)) \ + $(CPPFILES:.cpp=.o) $(CFILES:.c=.o) $(SFILES:.s=.o) + +export INCLUDE := $(foreach dir,$(INCLUDES),-I$(CURDIR)/$(dir)) \ + $(foreach dir,$(LIBDIRS),-I$(dir)/include) \ + -I$(CURDIR)/$(BUILD) + +.PHONY: $(BUILD) clean all + +#--------------------------------------------------------------------------------- +all: $(BUILD) + @[ -d $@ ] || mkdir -p include + @cp ../../*.h include + +lib: + @[ -d $@ ] || mkdir -p $@ + +$(BUILD): lib + @[ -d $@ ] || mkdir -p $@ + @$(MAKE) --no-print-directory -C $(BUILD) -f $(CURDIR)/Makefile + +#--------------------------------------------------------------------------------- +clean: + @echo clean ... + @rm -fr $(BUILD) lib + +#--------------------------------------------------------------------------------- +else + +DEPENDS := $(OFILES:.o=.d) + +#--------------------------------------------------------------------------------- +# main targets +#--------------------------------------------------------------------------------- +$(OUTPUT) : $(OFILES) + +#--------------------------------------------------------------------------------- +%.bin.o : %.bin +#--------------------------------------------------------------------------------- + @echo $(notdir $<) + @$(bin2o) + + +-include $(DEPENDS) + +#--------------------------------------------------------------------------------------- +endif +#--------------------------------------------------------------------------------------- diff --git a/thirdparty/zlib-1.3.1/nintendods/README b/thirdparty/zlib-1.3.1/nintendods/README new file mode 100644 index 0000000..ba7a37d --- /dev/null +++ b/thirdparty/zlib-1.3.1/nintendods/README @@ -0,0 +1,5 @@ +This Makefile requires devkitARM (http://www.devkitpro.org/category/devkitarm/) and works inside "contrib/nds". It is based on a devkitARM template. + +Eduardo Costa +January 3, 2009 + diff --git a/thirdparty/zlib-1.3.1/old/Makefile.emx b/thirdparty/zlib-1.3.1/old/Makefile.emx new file mode 100644 index 0000000..612b037 --- /dev/null +++ b/thirdparty/zlib-1.3.1/old/Makefile.emx @@ -0,0 +1,69 @@ +# Makefile for zlib. Modified for emx/rsxnt by Chr. Spieler, 6/16/98. +# Copyright (C) 1995-1998 Jean-loup Gailly. +# For conditions of distribution and use, see copyright notice in zlib.h + +# To compile, or to compile and test, type: +# +# make -fmakefile.emx; make test -fmakefile.emx +# + +CC=gcc -Zwin32 + +#CFLAGS=-MMD -O +#CFLAGS=-O -DMAX_WBITS=14 -DMAX_MEM_LEVEL=7 +#CFLAGS=-MMD -g -DZLIB_DEBUG +CFLAGS=-MMD -O3 $(BUTT) -Wall -Wwrite-strings -Wpointer-arith -Wconversion \ + -Wstrict-prototypes -Wmissing-prototypes + +# If cp.exe is available, replace "copy /Y" with "cp -fp" . +CP=copy /Y +# If gnu install.exe is available, replace $(CP) with ginstall. +INSTALL=$(CP) +# The default value of RM is "rm -f." If "rm.exe" is found, comment out: +RM=del +LDLIBS=-L. -lzlib +LD=$(CC) -s -o +LDSHARED=$(CC) + +INCL=zlib.h zconf.h +LIBS=zlib.a + +AR=ar rcs + +prefix=/usr/local +exec_prefix = $(prefix) + +OBJS = adler32.o compress.o crc32.o deflate.o gzclose.o gzlib.o gzread.o \ + gzwrite.o infback.o inffast.o inflate.o inftrees.o trees.o uncompr.o zutil.o + +TEST_OBJS = example.o minigzip.o + +all: example.exe minigzip.exe + +test: all + ./example + echo hello world | .\minigzip | .\minigzip -d + +%.o : %.c + $(CC) $(CFLAGS) -c $< -o $@ + +zlib.a: $(OBJS) + $(AR) $@ $(OBJS) + +%.exe : %.o $(LIBS) + $(LD) $@ $< $(LDLIBS) + + +.PHONY : clean + +clean: + $(RM) *.d + $(RM) *.o + $(RM) *.exe + $(RM) zlib.a + $(RM) foo.gz + +DEPS := $(wildcard *.d) +ifneq ($(DEPS),) +include $(DEPS) +endif diff --git a/thirdparty/zlib-1.3.1/old/Makefile.riscos b/thirdparty/zlib-1.3.1/old/Makefile.riscos new file mode 100644 index 0000000..57e29d3 --- /dev/null +++ b/thirdparty/zlib-1.3.1/old/Makefile.riscos @@ -0,0 +1,151 @@ +# Project: zlib_1_03 +# Patched for zlib 1.1.2 rw@shadow.org.uk 19980430 +# test works out-of-the-box, installs `somewhere' on demand + +# Toolflags: +CCflags = -c -depend !Depend -IC: -g -throwback -DRISCOS -fah +C++flags = -c -depend !Depend -IC: -throwback +Linkflags = -aif -c++ -o $@ +ObjAsmflags = -throwback -NoCache -depend !Depend +CMHGflags = +LibFileflags = -c -l -o $@ +Squeezeflags = -o $@ + +# change the line below to where _you_ want the library installed. +libdest = lib:zlib + +# Final targets: +@.lib: @.o.adler32 @.o.compress @.o.crc32 @.o.deflate @.o.gzio \ + @.o.infblock @.o.infcodes @.o.inffast @.o.inflate @.o.inftrees @.o.infutil @.o.trees \ + @.o.uncompr @.o.zutil + LibFile $(LibFileflags) @.o.adler32 @.o.compress @.o.crc32 @.o.deflate \ + @.o.gzio @.o.infblock @.o.infcodes @.o.inffast @.o.inflate @.o.inftrees @.o.infutil \ + @.o.trees @.o.uncompr @.o.zutil +test: @.minigzip @.example @.lib + @copy @.lib @.libc A~C~DF~L~N~P~Q~RS~TV + @echo running tests: hang on. + @/@.minigzip -f -9 libc + @/@.minigzip -d libc-gz + @/@.minigzip -f -1 libc + @/@.minigzip -d libc-gz + @/@.minigzip -h -9 libc + @/@.minigzip -d libc-gz + @/@.minigzip -h -1 libc + @/@.minigzip -d libc-gz + @/@.minigzip -9 libc + @/@.minigzip -d libc-gz + @/@.minigzip -1 libc + @/@.minigzip -d libc-gz + @diff @.lib @.libc + @echo that should have reported '@.lib and @.libc identical' if you have diff. + @/@.example @.fred @.fred + @echo that will have given lots of hello!'s. + +@.minigzip: @.o.minigzip @.lib C:o.Stubs + Link $(Linkflags) @.o.minigzip @.lib C:o.Stubs +@.example: @.o.example @.lib C:o.Stubs + Link $(Linkflags) @.o.example @.lib C:o.Stubs + +install: @.lib + cdir $(libdest) + cdir $(libdest).h + @copy @.h.zlib $(libdest).h.zlib A~C~DF~L~N~P~Q~RS~TV + @copy @.h.zconf $(libdest).h.zconf A~C~DF~L~N~P~Q~RS~TV + @copy @.lib $(libdest).lib A~C~DF~L~N~P~Q~RS~TV + @echo okay, installed zlib in $(libdest) + +clean:; remove @.minigzip + remove @.example + remove @.libc + -wipe @.o.* F~r~cV + remove @.fred + +# User-editable dependencies: +.c.o: + cc $(ccflags) -o $@ $< + +# Static dependencies: + +# Dynamic dependencies: +o.example: c.example +o.example: h.zlib +o.example: h.zconf +o.minigzip: c.minigzip +o.minigzip: h.zlib +o.minigzip: h.zconf +o.adler32: c.adler32 +o.adler32: h.zlib +o.adler32: h.zconf +o.compress: c.compress +o.compress: h.zlib +o.compress: h.zconf +o.crc32: c.crc32 +o.crc32: h.zlib +o.crc32: h.zconf +o.deflate: c.deflate +o.deflate: h.deflate +o.deflate: h.zutil +o.deflate: h.zlib +o.deflate: h.zconf +o.gzio: c.gzio +o.gzio: h.zutil +o.gzio: h.zlib +o.gzio: h.zconf +o.infblock: c.infblock +o.infblock: h.zutil +o.infblock: h.zlib +o.infblock: h.zconf +o.infblock: h.infblock +o.infblock: h.inftrees +o.infblock: h.infcodes +o.infblock: h.infutil +o.infcodes: c.infcodes +o.infcodes: h.zutil +o.infcodes: h.zlib +o.infcodes: h.zconf +o.infcodes: h.inftrees +o.infcodes: h.infblock +o.infcodes: h.infcodes +o.infcodes: h.infutil +o.infcodes: h.inffast +o.inffast: c.inffast +o.inffast: h.zutil +o.inffast: h.zlib +o.inffast: h.zconf +o.inffast: h.inftrees +o.inffast: h.infblock +o.inffast: h.infcodes +o.inffast: h.infutil +o.inffast: h.inffast +o.inflate: c.inflate +o.inflate: h.zutil +o.inflate: h.zlib +o.inflate: h.zconf +o.inflate: h.infblock +o.inftrees: c.inftrees +o.inftrees: h.zutil +o.inftrees: h.zlib +o.inftrees: h.zconf +o.inftrees: h.inftrees +o.inftrees: h.inffixed +o.infutil: c.infutil +o.infutil: h.zutil +o.infutil: h.zlib +o.infutil: h.zconf +o.infutil: h.infblock +o.infutil: h.inftrees +o.infutil: h.infcodes +o.infutil: h.infutil +o.trees: c.trees +o.trees: h.deflate +o.trees: h.zutil +o.trees: h.zlib +o.trees: h.zconf +o.trees: h.trees +o.uncompr: c.uncompr +o.uncompr: h.zlib +o.uncompr: h.zconf +o.zutil: c.zutil +o.zutil: h.zutil +o.zutil: h.zlib +o.zutil: h.zconf diff --git a/thirdparty/zlib-1.3.1/old/README b/thirdparty/zlib-1.3.1/old/README new file mode 100644 index 0000000..800bf07 --- /dev/null +++ b/thirdparty/zlib-1.3.1/old/README @@ -0,0 +1,3 @@ +This directory contains files that have not been updated for zlib 1.2.x + +(Volunteers are encouraged to help clean this up. Thanks.) diff --git a/thirdparty/zlib-1.3.1/old/descrip.mms b/thirdparty/zlib-1.3.1/old/descrip.mms new file mode 100644 index 0000000..7066da5 --- /dev/null +++ b/thirdparty/zlib-1.3.1/old/descrip.mms @@ -0,0 +1,48 @@ +# descrip.mms: MMS description file for building zlib on VMS +# written by Martin P.J. Zinser + +cc_defs = +c_deb = + +.ifdef __DECC__ +pref = /prefix=all +.endif + +OBJS = adler32.obj, compress.obj, crc32.obj, gzio.obj, uncompr.obj,\ + deflate.obj, trees.obj, zutil.obj, inflate.obj, infblock.obj,\ + inftrees.obj, infcodes.obj, infutil.obj, inffast.obj + +CFLAGS= $(C_DEB) $(CC_DEFS) $(PREF) + +all : example.exe minigzip.exe + @ write sys$output " Example applications available" +libz.olb : libz.olb($(OBJS)) + @ write sys$output " libz available" + +example.exe : example.obj libz.olb + link example,libz.olb/lib + +minigzip.exe : minigzip.obj libz.olb + link minigzip,libz.olb/lib,x11vms:xvmsutils.olb/lib + +clean : + delete *.obj;*,libz.olb;* + + +# Other dependencies. +adler32.obj : zutil.h zlib.h zconf.h +compress.obj : zlib.h zconf.h +crc32.obj : zutil.h zlib.h zconf.h +deflate.obj : deflate.h zutil.h zlib.h zconf.h +example.obj : zlib.h zconf.h +gzio.obj : zutil.h zlib.h zconf.h +infblock.obj : zutil.h zlib.h zconf.h infblock.h inftrees.h infcodes.h infutil.h +infcodes.obj : zutil.h zlib.h zconf.h inftrees.h infutil.h infcodes.h inffast.h +inffast.obj : zutil.h zlib.h zconf.h inftrees.h infutil.h inffast.h +inflate.obj : zutil.h zlib.h zconf.h infblock.h +inftrees.obj : zutil.h zlib.h zconf.h inftrees.h +infutil.obj : zutil.h zlib.h zconf.h inftrees.h infutil.h +minigzip.obj : zlib.h zconf.h +trees.obj : deflate.h zutil.h zlib.h zconf.h +uncompr.obj : zlib.h zconf.h +zutil.obj : zutil.h zlib.h zconf.h diff --git a/thirdparty/zlib-1.3.1/old/os2/Makefile.os2 b/thirdparty/zlib-1.3.1/old/os2/Makefile.os2 new file mode 100644 index 0000000..bb426c0 --- /dev/null +++ b/thirdparty/zlib-1.3.1/old/os2/Makefile.os2 @@ -0,0 +1,136 @@ +# Makefile for zlib under OS/2 using GCC (PGCC) +# For conditions of distribution and use, see copyright notice in zlib.h + +# To compile and test, type: +# cp Makefile.os2 .. +# cd .. +# make -f Makefile.os2 test + +# This makefile will build a static library z.lib, a shared library +# z.dll and a import library zdll.lib. You can use either z.lib or +# zdll.lib by specifying either -lz or -lzdll on gcc's command line + +CC=gcc -Zomf -s + +CFLAGS=-O6 -Wall +#CFLAGS=-O -DMAX_WBITS=14 -DMAX_MEM_LEVEL=7 +#CFLAGS=-g -DZLIB_DEBUG +#CFLAGS=-O3 -Wall -Wwrite-strings -Wpointer-arith -Wconversion \ +# -Wstrict-prototypes -Wmissing-prototypes + +#################### BUG WARNING: ##################### +## infcodes.c hits a bug in pgcc-1.0, so you have to use either +## -O# where # <= 4 or one of (-fno-ommit-frame-pointer or -fno-force-mem) +## This bug is reportedly fixed in pgcc >1.0, but this was not tested +CFLAGS+=-fno-force-mem + +LDFLAGS=-s -L. -lzdll -Zcrtdll +LDSHARED=$(CC) -s -Zomf -Zdll -Zcrtdll + +VER=1.1.0 +ZLIB=z.lib +SHAREDLIB=z.dll +SHAREDLIBIMP=zdll.lib +LIBS=$(ZLIB) $(SHAREDLIB) $(SHAREDLIBIMP) + +AR=emxomfar cr +IMPLIB=emximp +RANLIB=echo +TAR=tar +SHELL=bash + +prefix=/usr/local +exec_prefix = $(prefix) + +OBJS = adler32.o compress.o crc32.o gzio.o uncompr.o deflate.o trees.o \ + zutil.o inflate.o infblock.o inftrees.o infcodes.o infutil.o inffast.o + +TEST_OBJS = example.o minigzip.o + +DISTFILES = README INDEX ChangeLog configure Make*[a-z0-9] *.[ch] descrip.mms \ + algorithm.txt zlib.3 msdos/Make*[a-z0-9] msdos/zlib.def msdos/zlib.rc \ + nt/Makefile.nt nt/zlib.dnt contrib/README.contrib contrib/*.txt \ + contrib/asm386/*.asm contrib/asm386/*.c \ + contrib/asm386/*.bat contrib/asm386/zlibvc.d?? contrib/iostream/*.cpp \ + contrib/iostream/*.h contrib/iostream2/*.h contrib/iostream2/*.cpp \ + contrib/untgz/Makefile contrib/untgz/*.c contrib/untgz/*.w32 + +all: example.exe minigzip.exe + +test: all + @LD_LIBRARY_PATH=.:$(LD_LIBRARY_PATH) ; export LD_LIBRARY_PATH; \ + echo hello world | ./minigzip | ./minigzip -d || \ + echo ' *** minigzip test FAILED ***' ; \ + if ./example; then \ + echo ' *** zlib test OK ***'; \ + else \ + echo ' *** zlib test FAILED ***'; \ + fi + +$(ZLIB): $(OBJS) + $(AR) $@ $(OBJS) + -@ ($(RANLIB) $@ || true) >/dev/null 2>&1 + +$(SHAREDLIB): $(OBJS) os2/z.def + $(LDSHARED) -o $@ $^ + +$(SHAREDLIBIMP): os2/z.def + $(IMPLIB) -o $@ $^ + +example.exe: example.o $(LIBS) + $(CC) $(CFLAGS) -o $@ example.o $(LDFLAGS) + +minigzip.exe: minigzip.o $(LIBS) + $(CC) $(CFLAGS) -o $@ minigzip.o $(LDFLAGS) + +clean: + rm -f *.o *~ example minigzip libz.a libz.so* foo.gz + +distclean: clean + +zip: + mv Makefile Makefile~; cp -p Makefile.in Makefile + rm -f test.c ztest*.c + v=`sed -n -e 's/\.//g' -e '/VERSION "/s/.*"\(.*\)".*/\1/p' < zlib.h`;\ + zip -ul9 zlib$$v $(DISTFILES) + mv Makefile~ Makefile + +dist: + mv Makefile Makefile~; cp -p Makefile.in Makefile + rm -f test.c ztest*.c + d=zlib-`sed -n '/VERSION "/s/.*"\(.*\)".*/\1/p' < zlib.h`;\ + rm -f $$d.tar.gz; \ + if test ! -d ../$$d; then rm -f ../$$d; ln -s `pwd` ../$$d; fi; \ + files=""; \ + for f in $(DISTFILES); do files="$$files $$d/$$f"; done; \ + cd ..; \ + GZIP=-9 $(TAR) chofz $$d/$$d.tar.gz $$files; \ + if test ! -d $$d; then rm -f $$d; fi + mv Makefile~ Makefile + +tags: + etags *.[ch] + +depend: + makedepend -- $(CFLAGS) -- *.[ch] + +# DO NOT DELETE THIS LINE -- make depend depends on it. + +adler32.o: zlib.h zconf.h +compress.o: zlib.h zconf.h +crc32.o: zlib.h zconf.h +deflate.o: deflate.h zutil.h zlib.h zconf.h +example.o: zlib.h zconf.h +gzio.o: zutil.h zlib.h zconf.h +infblock.o: infblock.h inftrees.h infcodes.h infutil.h zutil.h zlib.h zconf.h +infcodes.o: zutil.h zlib.h zconf.h +infcodes.o: inftrees.h infblock.h infcodes.h infutil.h inffast.h +inffast.o: zutil.h zlib.h zconf.h inftrees.h +inffast.o: infblock.h infcodes.h infutil.h inffast.h +inflate.o: zutil.h zlib.h zconf.h infblock.h +inftrees.o: zutil.h zlib.h zconf.h inftrees.h +infutil.o: zutil.h zlib.h zconf.h infblock.h inftrees.h infcodes.h infutil.h +minigzip.o: zlib.h zconf.h +trees.o: deflate.h zutil.h zlib.h zconf.h trees.h +uncompr.o: zlib.h zconf.h +zutil.o: zutil.h zlib.h zconf.h diff --git a/thirdparty/zlib-1.3.1/old/os2/zlib.def b/thirdparty/zlib-1.3.1/old/os2/zlib.def new file mode 100644 index 0000000..4c753f1 --- /dev/null +++ b/thirdparty/zlib-1.3.1/old/os2/zlib.def @@ -0,0 +1,51 @@ +; +; Slightly modified version of ../nt/zlib.dnt :-) +; + +LIBRARY Z +DESCRIPTION "Zlib compression library for OS/2" +CODE PRELOAD MOVEABLE DISCARDABLE +DATA PRELOAD MOVEABLE MULTIPLE + +EXPORTS + adler32 + compress + crc32 + deflate + deflateCopy + deflateEnd + deflateInit2_ + deflateInit_ + deflateParams + deflateReset + deflateSetDictionary + gzclose + gzdopen + gzerror + gzflush + gzopen + gzread + gzwrite + inflate + inflateEnd + inflateInit2_ + inflateInit_ + inflateReset + inflateSetDictionary + inflateSync + uncompress + zlibVersion + gzprintf + gzputc + gzgetc + gzseek + gzrewind + gztell + gzeof + gzsetparams + zError + inflateSyncPoint + get_crc_table + compress2 + gzputs + gzgets diff --git a/thirdparty/zlib-1.3.1/old/visual-basic.txt b/thirdparty/zlib-1.3.1/old/visual-basic.txt new file mode 100644 index 0000000..3c8d2a4 --- /dev/null +++ b/thirdparty/zlib-1.3.1/old/visual-basic.txt @@ -0,0 +1,160 @@ +See below some functions declarations for Visual Basic. + +Frequently Asked Question: + +Q: Each time I use the compress function I get the -5 error (not enough + room in the output buffer). + +A: Make sure that the length of the compressed buffer is passed by + reference ("as any"), not by value ("as long"). Also check that + before the call of compress this length is equal to the total size of + the compressed buffer and not zero. + + +From: "Jon Caruana" +Subject: Re: How to port zlib declares to vb? +Date: Mon, 28 Oct 1996 18:33:03 -0600 + +Got the answer! (I haven't had time to check this but it's what I got, and +looks correct): + +He has the following routines working: + compress + uncompress + gzopen + gzwrite + gzread + gzclose + +Declares follow: (Quoted from Carlos Rios , in Vb4 form) + +#If Win16 Then 'Use Win16 calls. +Declare Function compress Lib "ZLIB.DLL" (ByVal compr As + String, comprLen As Any, ByVal buf As String, ByVal buflen + As Long) As Integer +Declare Function uncompress Lib "ZLIB.DLL" (ByVal uncompr + As String, uncomprLen As Any, ByVal compr As String, ByVal + lcompr As Long) As Integer +Declare Function gzopen Lib "ZLIB.DLL" (ByVal filePath As + String, ByVal mode As String) As Long +Declare Function gzread Lib "ZLIB.DLL" (ByVal file As + Long, ByVal uncompr As String, ByVal uncomprLen As Integer) + As Integer +Declare Function gzwrite Lib "ZLIB.DLL" (ByVal file As + Long, ByVal uncompr As String, ByVal uncomprLen As Integer) + As Integer +Declare Function gzclose Lib "ZLIB.DLL" (ByVal file As + Long) As Integer +#Else +Declare Function compress Lib "ZLIB32.DLL" + (ByVal compr As String, comprLen As Any, ByVal buf As + String, ByVal buflen As Long) As Integer +Declare Function uncompress Lib "ZLIB32.DLL" + (ByVal uncompr As String, uncomprLen As Any, ByVal compr As + String, ByVal lcompr As Long) As Long +Declare Function gzopen Lib "ZLIB32.DLL" + (ByVal file As String, ByVal mode As String) As Long +Declare Function gzread Lib "ZLIB32.DLL" + (ByVal file As Long, ByVal uncompr As String, ByVal + uncomprLen As Long) As Long +Declare Function gzwrite Lib "ZLIB32.DLL" + (ByVal file As Long, ByVal uncompr As String, ByVal + uncomprLen As Long) As Long +Declare Function gzclose Lib "ZLIB32.DLL" + (ByVal file As Long) As Long +#End If + +-Jon Caruana +jon-net@usa.net +Microsoft Sitebuilder Network Level 1 Member - HTML Writer's Guild Member + + +Here is another example from Michael that he +says conforms to the VB guidelines, and that solves the problem of not +knowing the uncompressed size by storing it at the end of the file: + +'Calling the functions: +'bracket meaning: [optional] {Range of possible values} +'Call subCompressFile( [, , [level of compression {1..9}]]) +'Call subUncompressFile() + +Option Explicit +Private lngpvtPcnSml As Long 'Stores value for 'lngPercentSmaller' +Private Const SUCCESS As Long = 0 +Private Const strFilExt As String = ".cpr" +Private Declare Function lngfncCpr Lib "zlib.dll" Alias "compress2" (ByRef +dest As Any, ByRef destLen As Any, ByRef src As Any, ByVal srcLen As Long, +ByVal level As Integer) As Long +Private Declare Function lngfncUcp Lib "zlib.dll" Alias "uncompress" (ByRef +dest As Any, ByRef destLen As Any, ByRef src As Any, ByVal srcLen As Long) +As Long + +Public Sub subCompressFile(ByVal strargOriFilPth As String, Optional ByVal +strargCprFilPth As String, Optional ByVal intLvl As Integer = 9) + Dim strCprPth As String + Dim lngOriSiz As Long + Dim lngCprSiz As Long + Dim bytaryOri() As Byte + Dim bytaryCpr() As Byte + lngOriSiz = FileLen(strargOriFilPth) + ReDim bytaryOri(lngOriSiz - 1) + Open strargOriFilPth For Binary Access Read As #1 + Get #1, , bytaryOri() + Close #1 + strCprPth = IIf(strargCprFilPth = "", strargOriFilPth, strargCprFilPth) +'Select file path and name + strCprPth = strCprPth & IIf(Right(strCprPth, Len(strFilExt)) = +strFilExt, "", strFilExt) 'Add file extension if not exists + lngCprSiz = (lngOriSiz * 1.01) + 12 'Compression needs temporary a bit +more space then original file size + ReDim bytaryCpr(lngCprSiz - 1) + If lngfncCpr(bytaryCpr(0), lngCprSiz, bytaryOri(0), lngOriSiz, intLvl) = +SUCCESS Then + lngpvtPcnSml = (1# - (lngCprSiz / lngOriSiz)) * 100 + ReDim Preserve bytaryCpr(lngCprSiz - 1) + Open strCprPth For Binary Access Write As #1 + Put #1, , bytaryCpr() + Put #1, , lngOriSiz 'Add the original size value to the end +(last 4 bytes) + Close #1 + Else + MsgBox "Compression error" + End If + Erase bytaryCpr + Erase bytaryOri +End Sub + +Public Sub subUncompressFile(ByVal strargFilPth As String) + Dim bytaryCpr() As Byte + Dim bytaryOri() As Byte + Dim lngOriSiz As Long + Dim lngCprSiz As Long + Dim strOriPth As String + lngCprSiz = FileLen(strargFilPth) + ReDim bytaryCpr(lngCprSiz - 1) + Open strargFilPth For Binary Access Read As #1 + Get #1, , bytaryCpr() + Close #1 + 'Read the original file size value: + lngOriSiz = bytaryCpr(lngCprSiz - 1) * (2 ^ 24) _ + + bytaryCpr(lngCprSiz - 2) * (2 ^ 16) _ + + bytaryCpr(lngCprSiz - 3) * (2 ^ 8) _ + + bytaryCpr(lngCprSiz - 4) + ReDim Preserve bytaryCpr(lngCprSiz - 5) 'Cut of the original size value + ReDim bytaryOri(lngOriSiz - 1) + If lngfncUcp(bytaryOri(0), lngOriSiz, bytaryCpr(0), lngCprSiz) = SUCCESS +Then + strOriPth = Left(strargFilPth, Len(strargFilPth) - Len(strFilExt)) + Open strOriPth For Binary Access Write As #1 + Put #1, , bytaryOri() + Close #1 + Else + MsgBox "Uncompression error" + End If + Erase bytaryCpr + Erase bytaryOri +End Sub +Public Property Get lngPercentSmaller() As Long + lngPercentSmaller = lngpvtPcnSml +End Property diff --git a/thirdparty/zlib-1.3.1/os400/README400 b/thirdparty/zlib-1.3.1/os400/README400 new file mode 100644 index 0000000..30ed5a1 --- /dev/null +++ b/thirdparty/zlib-1.3.1/os400/README400 @@ -0,0 +1,48 @@ + ZLIB version 1.3.1 for OS/400 installation instructions + +1) Download and unpack the zlib tarball to some IFS directory. + (i.e.: /path/to/the/zlib/ifs/source/directory) + + If the installed IFS command supports gzip format, this is straightforward, +else you have to unpack first to some directory on a system supporting it, +then move the whole directory to the IFS via the network (via SMB or FTP). + +2) Edit the configuration parameters in the compilation script. + + EDTF STMF('/path/to/the/zlib/ifs/source/directory/os400/make.sh') + +Tune the parameters according to your needs if not matching the defaults. +Save the file and exit after edition. + +3) Enter qshell, then work in the zlib OS/400 specific directory. + + QSH + cd /path/to/the/zlib/ifs/source/directory/os400 + +4) Compile and install + + sh make.sh + +The script will: +- create the libraries, objects and IFS directories for the zlib environment, +- compile all modules, +- create a service program, +- create a static and a dynamic binding directory, +- install header files for C/C++ and for ILE/RPG, both for compilation in + DB2 and IFS environments. + +That's all. + + +Notes: For OS/400 ILE RPG programmers, a /copy member defining the ZLIB + API prototypes for ILE RPG can be found in ZLIB/H(ZLIB.INC). + In the ILE environment, the same definitions are available from + file zlib.inc located in the same IFS include directory as the + C/C++ header files. + Please read comments in this member for more information. + + Remember that most foreign textual data are ASCII coded: this + implementation does not handle conversion from/to ASCII, so + text data code conversions must be done explicitly. + + Mainly for the reason above, always open zipped files in binary mode. diff --git a/thirdparty/zlib-1.3.1/os400/bndsrc b/thirdparty/zlib-1.3.1/os400/bndsrc new file mode 100644 index 0000000..9f92bb1 --- /dev/null +++ b/thirdparty/zlib-1.3.1/os400/bndsrc @@ -0,0 +1,127 @@ +STRPGMEXP PGMLVL(*CURRENT) SIGNATURE('ZLIB') + +/*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/ +/* Version 1.1.3 entry points. */ +/*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/ + + EXPORT SYMBOL("adler32") + EXPORT SYMBOL("compress") + EXPORT SYMBOL("compress2") + EXPORT SYMBOL("crc32") + EXPORT SYMBOL("get_crc_table") + EXPORT SYMBOL("deflate") + EXPORT SYMBOL("deflateEnd") + EXPORT SYMBOL("deflateSetDictionary") + EXPORT SYMBOL("deflateCopy") + EXPORT SYMBOL("deflateReset") + EXPORT SYMBOL("deflateParams") + EXPORT SYMBOL("deflatePrime") + EXPORT SYMBOL("deflateInit_") + EXPORT SYMBOL("deflateInit2_") + EXPORT SYMBOL("gzopen") + EXPORT SYMBOL("gzdopen") + EXPORT SYMBOL("gzsetparams") + EXPORT SYMBOL("gzread") + EXPORT SYMBOL("gzwrite") + EXPORT SYMBOL("gzprintf") + EXPORT SYMBOL("gzputs") + EXPORT SYMBOL("gzgets") + EXPORT SYMBOL("gzputc") + EXPORT SYMBOL("gzgetc") + EXPORT SYMBOL("gzflush") + EXPORT SYMBOL("gzseek") + EXPORT SYMBOL("gzrewind") + EXPORT SYMBOL("gztell") + EXPORT SYMBOL("gzeof") + EXPORT SYMBOL("gzclose") + EXPORT SYMBOL("gzerror") + EXPORT SYMBOL("inflate") + EXPORT SYMBOL("inflateEnd") + EXPORT SYMBOL("inflateSetDictionary") + EXPORT SYMBOL("inflateSync") + EXPORT SYMBOL("inflateReset") + EXPORT SYMBOL("inflateInit_") + EXPORT SYMBOL("inflateInit2_") + EXPORT SYMBOL("inflateSyncPoint") + EXPORT SYMBOL("uncompress") + EXPORT SYMBOL("zlibVersion") + EXPORT SYMBOL("zError") + EXPORT SYMBOL("z_errmsg") + +/*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/ +/* Version 1.2.1 additional entry points. */ +/*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/ + + EXPORT SYMBOL("compressBound") + EXPORT SYMBOL("deflateBound") + EXPORT SYMBOL("deflatePending") + EXPORT SYMBOL("gzungetc") + EXPORT SYMBOL("gzclearerr") + EXPORT SYMBOL("inflateBack") + EXPORT SYMBOL("inflateBackEnd") + EXPORT SYMBOL("inflateBackInit_") + EXPORT SYMBOL("inflateCopy") + EXPORT SYMBOL("zlibCompileFlags") + +/*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/ +/* Version 1.2.4 additional entry points. */ +/*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/ + + EXPORT SYMBOL("adler32_combine") + EXPORT SYMBOL("adler32_combine64") + EXPORT SYMBOL("crc32_combine") + EXPORT SYMBOL("crc32_combine64") + EXPORT SYMBOL("deflateSetHeader") + EXPORT SYMBOL("deflateTune") + EXPORT SYMBOL("gzbuffer") + EXPORT SYMBOL("gzclose_r") + EXPORT SYMBOL("gzclose_w") + EXPORT SYMBOL("gzdirect") + EXPORT SYMBOL("gzoffset") + EXPORT SYMBOL("gzoffset64") + EXPORT SYMBOL("gzopen64") + EXPORT SYMBOL("gzseek64") + EXPORT SYMBOL("gztell64") + EXPORT SYMBOL("inflateGetHeader") + EXPORT SYMBOL("inflateMark") + EXPORT SYMBOL("inflatePrime") + EXPORT SYMBOL("inflateReset2") + EXPORT SYMBOL("inflateUndermine") + +/*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/ +/* Version 1.2.6 additional entry points. */ +/*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/ + + EXPORT SYMBOL("deflateResetKeep") + EXPORT SYMBOL("gzgetc_") + EXPORT SYMBOL("inflateResetKeep") + +/*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/ +/* Version 1.2.8 additional entry points. */ +/*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/ + + EXPORT SYMBOL("gzvprintf") + EXPORT SYMBOL("inflateGetDictionary") + +/*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/ +/* Version 1.2.9 additional entry points. */ +/*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/ + + EXPORT SYMBOL("adler32_z") + EXPORT SYMBOL("crc32_z") + EXPORT SYMBOL("deflateGetDictionary") + EXPORT SYMBOL("gzfread") + EXPORT SYMBOL("gzfwrite") + EXPORT SYMBOL("inflateCodesUsed") + EXPORT SYMBOL("inflateValidate") + EXPORT SYMBOL("uncompress2") + +/*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/ +/* Version 1.2.12 additional entry points. */ +/*@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@*/ + + EXPORT SYMBOL("crc32_combine_gen64") + EXPORT SYMBOL("crc32_combine_gen") + EXPORT SYMBOL("crc32_combine_op") + +ENDPGMEXP diff --git a/thirdparty/zlib-1.3.1/os400/make.sh b/thirdparty/zlib-1.3.1/os400/make.sh new file mode 100644 index 0000000..19eec11 --- /dev/null +++ b/thirdparty/zlib-1.3.1/os400/make.sh @@ -0,0 +1,366 @@ +#!/bin/sh +# +# ZLIB compilation script for the OS/400. +# +# +# This is a shell script since make is not a standard component of OS/400. + + +################################################################################ +# +# Tunable configuration parameters. +# +################################################################################ + +TARGETLIB='ZLIB' # Target OS/400 program library +STATBNDDIR='ZLIB_A' # Static binding directory. +DYNBNDDIR='ZLIB' # Dynamic binding directory. +SRVPGM="ZLIB" # Service program. +IFSDIR='/zlib' # IFS support base directory. +TGTCCSID='500' # Target CCSID of objects +DEBUG='*NONE' # Debug level +OPTIMIZE='40' # Optimisation level +OUTPUT='*NONE' # Compilation output option. +TGTRLS='V6R1M0' # Target OS release + +export TARGETLIB STATBNDDIR DYNBNDDIR SRVPGM IFSDIR +export TGTCCSID DEBUG OPTIMIZE OUTPUT TGTRLS + + +################################################################################ +# +# OS/400 specific definitions. +# +################################################################################ + +LIBIFSNAME="/QSYS.LIB/${TARGETLIB}.LIB" + + +################################################################################ +# +# Procedures. +# +################################################################################ + +# action_needed dest [src] +# +# dest is an object to build +# if specified, src is an object on which dest depends. +# +# exit 0 (succeeds) if some action has to be taken, else 1. + +action_needed() + +{ + [ ! -e "${1}" ] && return 0 + [ "${2}" ] || return 1 + [ "${1}" -ot "${2}" ] && return 0 + return 1 +} + + +# make_module module_name source_name [additional_definitions] +# +# Compile source name into module if needed. +# As side effect, append the module name to variable MODULES. +# Set LINK to "YES" if the module has been compiled. + +make_module() + +{ + MODULES="${MODULES} ${1}" + MODIFSNAME="${LIBIFSNAME}/${1}.MODULE" + CSRC="`basename \"${2}\"`" + + if action_needed "${MODIFSNAME}" "${2}" + then : + elif [ ! "`sed -e \"//,/<\\\\/source>/!d\" \ + -e '/ tmphdrfile + + # Need to translate to target CCSID. + + CMD="CPY OBJ('`pwd`/tmphdrfile') TOOBJ('${DEST}')" + CMD="${CMD} TOCCSID(${TGTCCSID}) DTAFMT(*TEXT) REPLACE(*YES)" + system "${CMD}" + # touch -r "${HFILE}" "${DEST}" + rm -f tmphdrfile + fi + + IFSFILE="${IFSDIR}/include/`basename \"${HFILE}\"`" + + if action_needed "${IFSFILE}" "${DEST}" + then rm -f "${IFSFILE}" + ln -s "${DEST}" "${IFSFILE}" + fi +done + + +# Install the ILE/RPG header file. + + +HFILE="${SCRIPTDIR}/zlib.inc" +DEST="${SRCPF}/ZLIB.INC.MBR" + +if action_needed "${DEST}" "${HFILE}" +then CMD="CPY OBJ('${HFILE}') TOOBJ('${DEST}')" + CMD="${CMD} TOCCSID(${TGTCCSID}) DTAFMT(*TEXT) REPLACE(*YES)" + system "${CMD}" + # touch -r "${HFILE}" "${DEST}" +fi + +IFSFILE="${IFSDIR}/include/`basename \"${HFILE}\"`" + +if action_needed "${IFSFILE}" "${DEST}" +then rm -f "${IFSFILE}" + ln -s "${DEST}" "${IFSFILE}" +fi + + +# Create and compile the identification source file. + +echo '#pragma comment(user, "ZLIB version '"${VERSION}"'")' > os400.c +echo '#pragma comment(user, __DATE__)' >> os400.c +echo '#pragma comment(user, __TIME__)' >> os400.c +echo '#pragma comment(copyright, "Copyright (C) 1995-2017 Jean-Loup Gailly, Mark Adler. OS/400 version by P. Monnerat.")' >> os400.c +make_module OS400 os400.c +LINK= # No need to rebuild service program yet. +MODULES= + + +# Get source list. + +CSOURCES=`sed -e '/ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Library + + Medium + + 2.0 + + + + zlib + zlib + alain.bonnefoy@icbt.com + Public + public + www.gzip.org/zlib + + + Jean-Loup Gailly,Mark Adler + www.gzip.org/zlib + + zlib@gzip.org + + + A massively spiffy yet delicately unobtrusive compression library. + zlib is designed to be a free, general-purpose, legally unencumbered, lossless data compression library for use on virtually any computer hardware and operating system. + http://www.gzip.org/zlib + + + + + 1.3.1 + Medium + Stable + + + + + + + No License + + + + Software Development/Libraries and Extensions/C Libraries + zlib,compression + qnx6 + qnx6 + None + Developer + + + + + + + + + + + + + + Install + Post + No + Ignore + + No + Optional + + + + + + + + + + + + + InstallOver + zlib + + + + + + + + + + + + + InstallOver + zlib-dev + + + + + + + + + diff --git a/thirdparty/zlib-1.3.1/test/example.c b/thirdparty/zlib-1.3.1/test/example.c new file mode 100644 index 0000000..c3521dd --- /dev/null +++ b/thirdparty/zlib-1.3.1/test/example.c @@ -0,0 +1,546 @@ +/* example.c -- usage example of the zlib compression library + * Copyright (C) 1995-2006, 2011, 2016 Jean-loup Gailly + * For conditions of distribution and use, see copyright notice in zlib.h + */ + +/* @(#) $Id$ */ + +#include "zlib.h" +#include + +#ifdef STDC +# include +# include +#endif + +#if defined(VMS) || defined(RISCOS) +# define TESTFILE "foo-gz" +#else +# define TESTFILE "foo.gz" +#endif + +#define CHECK_ERR(err, msg) { \ + if (err != Z_OK) { \ + fprintf(stderr, "%s error: %d\n", msg, err); \ + exit(1); \ + } \ +} + +static z_const char hello[] = "hello, hello!"; +/* "hello world" would be more standard, but the repeated "hello" + * stresses the compression code better, sorry... + */ + +static const char dictionary[] = "hello"; +static uLong dictId; /* Adler32 value of the dictionary */ + +#ifdef Z_SOLO + +static void *myalloc(void *q, unsigned n, unsigned m) { + (void)q; + return calloc(n, m); +} + +static void myfree(void *q, void *p) { + (void)q; + free(p); +} + +static alloc_func zalloc = myalloc; +static free_func zfree = myfree; + +#else /* !Z_SOLO */ + +static alloc_func zalloc = (alloc_func)0; +static free_func zfree = (free_func)0; + +/* =========================================================================== + * Test compress() and uncompress() + */ +static void test_compress(Byte *compr, uLong comprLen, Byte *uncompr, + uLong uncomprLen) { + int err; + uLong len = (uLong)strlen(hello)+1; + + err = compress(compr, &comprLen, (const Bytef*)hello, len); + CHECK_ERR(err, "compress"); + + strcpy((char*)uncompr, "garbage"); + + err = uncompress(uncompr, &uncomprLen, compr, comprLen); + CHECK_ERR(err, "uncompress"); + + if (strcmp((char*)uncompr, hello)) { + fprintf(stderr, "bad uncompress\n"); + exit(1); + } else { + printf("uncompress(): %s\n", (char *)uncompr); + } +} + +/* =========================================================================== + * Test read/write of .gz files + */ +static void test_gzio(const char *fname, Byte *uncompr, uLong uncomprLen) { +#ifdef NO_GZCOMPRESS + fprintf(stderr, "NO_GZCOMPRESS -- gz* functions cannot compress\n"); +#else + int err; + int len = (int)strlen(hello)+1; + gzFile file; + z_off_t pos; + + file = gzopen(fname, "wb"); + if (file == NULL) { + fprintf(stderr, "gzopen error\n"); + exit(1); + } + gzputc(file, 'h'); + if (gzputs(file, "ello") != 4) { + fprintf(stderr, "gzputs err: %s\n", gzerror(file, &err)); + exit(1); + } + if (gzprintf(file, ", %s!", "hello") != 8) { + fprintf(stderr, "gzprintf err: %s\n", gzerror(file, &err)); + exit(1); + } + gzseek(file, 1L, SEEK_CUR); /* add one zero byte */ + gzclose(file); + + file = gzopen(fname, "rb"); + if (file == NULL) { + fprintf(stderr, "gzopen error\n"); + exit(1); + } + strcpy((char*)uncompr, "garbage"); + + if (gzread(file, uncompr, (unsigned)uncomprLen) != len) { + fprintf(stderr, "gzread err: %s\n", gzerror(file, &err)); + exit(1); + } + if (strcmp((char*)uncompr, hello)) { + fprintf(stderr, "bad gzread: %s\n", (char*)uncompr); + exit(1); + } else { + printf("gzread(): %s\n", (char*)uncompr); + } + + pos = gzseek(file, -8L, SEEK_CUR); + if (pos != 6 || gztell(file) != pos) { + fprintf(stderr, "gzseek error, pos=%ld, gztell=%ld\n", + (long)pos, (long)gztell(file)); + exit(1); + } + + if (gzgetc(file) != ' ') { + fprintf(stderr, "gzgetc error\n"); + exit(1); + } + + if (gzungetc(' ', file) != ' ') { + fprintf(stderr, "gzungetc error\n"); + exit(1); + } + + gzgets(file, (char*)uncompr, (int)uncomprLen); + if (strlen((char*)uncompr) != 7) { /* " hello!" */ + fprintf(stderr, "gzgets err after gzseek: %s\n", gzerror(file, &err)); + exit(1); + } + if (strcmp((char*)uncompr, hello + 6)) { + fprintf(stderr, "bad gzgets after gzseek\n"); + exit(1); + } else { + printf("gzgets() after gzseek: %s\n", (char*)uncompr); + } + + gzclose(file); +#endif +} + +#endif /* Z_SOLO */ + +/* =========================================================================== + * Test deflate() with small buffers + */ +static void test_deflate(Byte *compr, uLong comprLen) { + z_stream c_stream; /* compression stream */ + int err; + uLong len = (uLong)strlen(hello)+1; + + c_stream.zalloc = zalloc; + c_stream.zfree = zfree; + c_stream.opaque = (voidpf)0; + + err = deflateInit(&c_stream, Z_DEFAULT_COMPRESSION); + CHECK_ERR(err, "deflateInit"); + + c_stream.next_in = (z_const unsigned char *)hello; + c_stream.next_out = compr; + + while (c_stream.total_in != len && c_stream.total_out < comprLen) { + c_stream.avail_in = c_stream.avail_out = 1; /* force small buffers */ + err = deflate(&c_stream, Z_NO_FLUSH); + CHECK_ERR(err, "deflate"); + } + /* Finish the stream, still forcing small buffers: */ + for (;;) { + c_stream.avail_out = 1; + err = deflate(&c_stream, Z_FINISH); + if (err == Z_STREAM_END) break; + CHECK_ERR(err, "deflate"); + } + + err = deflateEnd(&c_stream); + CHECK_ERR(err, "deflateEnd"); +} + +/* =========================================================================== + * Test inflate() with small buffers + */ +static void test_inflate(Byte *compr, uLong comprLen, Byte *uncompr, + uLong uncomprLen) { + int err; + z_stream d_stream; /* decompression stream */ + + strcpy((char*)uncompr, "garbage"); + + d_stream.zalloc = zalloc; + d_stream.zfree = zfree; + d_stream.opaque = (voidpf)0; + + d_stream.next_in = compr; + d_stream.avail_in = 0; + d_stream.next_out = uncompr; + + err = inflateInit(&d_stream); + CHECK_ERR(err, "inflateInit"); + + while (d_stream.total_out < uncomprLen && d_stream.total_in < comprLen) { + d_stream.avail_in = d_stream.avail_out = 1; /* force small buffers */ + err = inflate(&d_stream, Z_NO_FLUSH); + if (err == Z_STREAM_END) break; + CHECK_ERR(err, "inflate"); + } + + err = inflateEnd(&d_stream); + CHECK_ERR(err, "inflateEnd"); + + if (strcmp((char*)uncompr, hello)) { + fprintf(stderr, "bad inflate\n"); + exit(1); + } else { + printf("inflate(): %s\n", (char *)uncompr); + } +} + +/* =========================================================================== + * Test deflate() with large buffers and dynamic change of compression level + */ +static void test_large_deflate(Byte *compr, uLong comprLen, Byte *uncompr, + uLong uncomprLen) { + z_stream c_stream; /* compression stream */ + int err; + + c_stream.zalloc = zalloc; + c_stream.zfree = zfree; + c_stream.opaque = (voidpf)0; + + err = deflateInit(&c_stream, Z_BEST_SPEED); + CHECK_ERR(err, "deflateInit"); + + c_stream.next_out = compr; + c_stream.avail_out = (uInt)comprLen; + + /* At this point, uncompr is still mostly zeroes, so it should compress + * very well: + */ + c_stream.next_in = uncompr; + c_stream.avail_in = (uInt)uncomprLen; + err = deflate(&c_stream, Z_NO_FLUSH); + CHECK_ERR(err, "deflate"); + if (c_stream.avail_in != 0) { + fprintf(stderr, "deflate not greedy\n"); + exit(1); + } + + /* Feed in already compressed data and switch to no compression: */ + deflateParams(&c_stream, Z_NO_COMPRESSION, Z_DEFAULT_STRATEGY); + c_stream.next_in = compr; + c_stream.avail_in = (uInt)uncomprLen/2; + err = deflate(&c_stream, Z_NO_FLUSH); + CHECK_ERR(err, "deflate"); + + /* Switch back to compressing mode: */ + deflateParams(&c_stream, Z_BEST_COMPRESSION, Z_FILTERED); + c_stream.next_in = uncompr; + c_stream.avail_in = (uInt)uncomprLen; + err = deflate(&c_stream, Z_NO_FLUSH); + CHECK_ERR(err, "deflate"); + + err = deflate(&c_stream, Z_FINISH); + if (err != Z_STREAM_END) { + fprintf(stderr, "deflate should report Z_STREAM_END\n"); + exit(1); + } + err = deflateEnd(&c_stream); + CHECK_ERR(err, "deflateEnd"); +} + +/* =========================================================================== + * Test inflate() with large buffers + */ +static void test_large_inflate(Byte *compr, uLong comprLen, Byte *uncompr, + uLong uncomprLen) { + int err; + z_stream d_stream; /* decompression stream */ + + strcpy((char*)uncompr, "garbage"); + + d_stream.zalloc = zalloc; + d_stream.zfree = zfree; + d_stream.opaque = (voidpf)0; + + d_stream.next_in = compr; + d_stream.avail_in = (uInt)comprLen; + + err = inflateInit(&d_stream); + CHECK_ERR(err, "inflateInit"); + + for (;;) { + d_stream.next_out = uncompr; /* discard the output */ + d_stream.avail_out = (uInt)uncomprLen; + err = inflate(&d_stream, Z_NO_FLUSH); + if (err == Z_STREAM_END) break; + CHECK_ERR(err, "large inflate"); + } + + err = inflateEnd(&d_stream); + CHECK_ERR(err, "inflateEnd"); + + if (d_stream.total_out != 2*uncomprLen + uncomprLen/2) { + fprintf(stderr, "bad large inflate: %ld\n", d_stream.total_out); + exit(1); + } else { + printf("large_inflate(): OK\n"); + } +} + +/* =========================================================================== + * Test deflate() with full flush + */ +static void test_flush(Byte *compr, uLong *comprLen) { + z_stream c_stream; /* compression stream */ + int err; + uInt len = (uInt)strlen(hello)+1; + + c_stream.zalloc = zalloc; + c_stream.zfree = zfree; + c_stream.opaque = (voidpf)0; + + err = deflateInit(&c_stream, Z_DEFAULT_COMPRESSION); + CHECK_ERR(err, "deflateInit"); + + c_stream.next_in = (z_const unsigned char *)hello; + c_stream.next_out = compr; + c_stream.avail_in = 3; + c_stream.avail_out = (uInt)*comprLen; + err = deflate(&c_stream, Z_FULL_FLUSH); + CHECK_ERR(err, "deflate"); + + compr[3]++; /* force an error in first compressed block */ + c_stream.avail_in = len - 3; + + err = deflate(&c_stream, Z_FINISH); + if (err != Z_STREAM_END) { + CHECK_ERR(err, "deflate"); + } + err = deflateEnd(&c_stream); + CHECK_ERR(err, "deflateEnd"); + + *comprLen = c_stream.total_out; +} + +/* =========================================================================== + * Test inflateSync() + */ +static void test_sync(Byte *compr, uLong comprLen, Byte *uncompr, + uLong uncomprLen) { + int err; + z_stream d_stream; /* decompression stream */ + + strcpy((char*)uncompr, "garbage"); + + d_stream.zalloc = zalloc; + d_stream.zfree = zfree; + d_stream.opaque = (voidpf)0; + + d_stream.next_in = compr; + d_stream.avail_in = 2; /* just read the zlib header */ + + err = inflateInit(&d_stream); + CHECK_ERR(err, "inflateInit"); + + d_stream.next_out = uncompr; + d_stream.avail_out = (uInt)uncomprLen; + + err = inflate(&d_stream, Z_NO_FLUSH); + CHECK_ERR(err, "inflate"); + + d_stream.avail_in = (uInt)comprLen-2; /* read all compressed data */ + err = inflateSync(&d_stream); /* but skip the damaged part */ + CHECK_ERR(err, "inflateSync"); + + err = inflate(&d_stream, Z_FINISH); + if (err != Z_STREAM_END) { + fprintf(stderr, "inflate should report Z_STREAM_END\n"); + exit(1); + } + err = inflateEnd(&d_stream); + CHECK_ERR(err, "inflateEnd"); + + printf("after inflateSync(): hel%s\n", (char *)uncompr); +} + +/* =========================================================================== + * Test deflate() with preset dictionary + */ +static void test_dict_deflate(Byte *compr, uLong comprLen) { + z_stream c_stream; /* compression stream */ + int err; + + c_stream.zalloc = zalloc; + c_stream.zfree = zfree; + c_stream.opaque = (voidpf)0; + + err = deflateInit(&c_stream, Z_BEST_COMPRESSION); + CHECK_ERR(err, "deflateInit"); + + err = deflateSetDictionary(&c_stream, + (const Bytef*)dictionary, (int)sizeof(dictionary)); + CHECK_ERR(err, "deflateSetDictionary"); + + dictId = c_stream.adler; + c_stream.next_out = compr; + c_stream.avail_out = (uInt)comprLen; + + c_stream.next_in = (z_const unsigned char *)hello; + c_stream.avail_in = (uInt)strlen(hello)+1; + + err = deflate(&c_stream, Z_FINISH); + if (err != Z_STREAM_END) { + fprintf(stderr, "deflate should report Z_STREAM_END\n"); + exit(1); + } + err = deflateEnd(&c_stream); + CHECK_ERR(err, "deflateEnd"); +} + +/* =========================================================================== + * Test inflate() with a preset dictionary + */ +static void test_dict_inflate(Byte *compr, uLong comprLen, Byte *uncompr, + uLong uncomprLen) { + int err; + z_stream d_stream; /* decompression stream */ + + strcpy((char*)uncompr, "garbage"); + + d_stream.zalloc = zalloc; + d_stream.zfree = zfree; + d_stream.opaque = (voidpf)0; + + d_stream.next_in = compr; + d_stream.avail_in = (uInt)comprLen; + + err = inflateInit(&d_stream); + CHECK_ERR(err, "inflateInit"); + + d_stream.next_out = uncompr; + d_stream.avail_out = (uInt)uncomprLen; + + for (;;) { + err = inflate(&d_stream, Z_NO_FLUSH); + if (err == Z_STREAM_END) break; + if (err == Z_NEED_DICT) { + if (d_stream.adler != dictId) { + fprintf(stderr, "unexpected dictionary"); + exit(1); + } + err = inflateSetDictionary(&d_stream, (const Bytef*)dictionary, + (int)sizeof(dictionary)); + } + CHECK_ERR(err, "inflate with dict"); + } + + err = inflateEnd(&d_stream); + CHECK_ERR(err, "inflateEnd"); + + if (strcmp((char*)uncompr, hello)) { + fprintf(stderr, "bad inflate with dict\n"); + exit(1); + } else { + printf("inflate with dictionary: %s\n", (char *)uncompr); + } +} + +/* =========================================================================== + * Usage: example [output.gz [input.gz]] + */ + +int main(int argc, char *argv[]) { + Byte *compr, *uncompr; + uLong uncomprLen = 20000; + uLong comprLen = 3 * uncomprLen; + static const char* myVersion = ZLIB_VERSION; + + if (zlibVersion()[0] != myVersion[0]) { + fprintf(stderr, "incompatible zlib version\n"); + exit(1); + + } else if (strcmp(zlibVersion(), ZLIB_VERSION) != 0) { + fprintf(stderr, "warning: different zlib version linked: %s\n", + zlibVersion()); + } + + printf("zlib version %s = 0x%04x, compile flags = 0x%lx\n", + ZLIB_VERSION, ZLIB_VERNUM, zlibCompileFlags()); + + compr = (Byte*)calloc((uInt)comprLen, 1); + uncompr = (Byte*)calloc((uInt)uncomprLen, 1); + /* compr and uncompr are cleared to avoid reading uninitialized + * data and to ensure that uncompr compresses well. + */ + if (compr == Z_NULL || uncompr == Z_NULL) { + printf("out of memory\n"); + exit(1); + } + +#ifdef Z_SOLO + (void)argc; + (void)argv; +#else + test_compress(compr, comprLen, uncompr, uncomprLen); + + test_gzio((argc > 1 ? argv[1] : TESTFILE), + uncompr, uncomprLen); +#endif + + test_deflate(compr, comprLen); + test_inflate(compr, comprLen, uncompr, uncomprLen); + + test_large_deflate(compr, comprLen, uncompr, uncomprLen); + test_large_inflate(compr, comprLen, uncompr, uncomprLen); + + test_flush(compr, &comprLen); + test_sync(compr, comprLen, uncompr, uncomprLen); + comprLen = 3 * uncomprLen; + + test_dict_deflate(compr, comprLen); + test_dict_inflate(compr, comprLen, uncompr, uncomprLen); + + free(compr); + free(uncompr); + + return 0; +} diff --git a/thirdparty/zlib-1.3.1/test/infcover.c b/thirdparty/zlib-1.3.1/test/infcover.c new file mode 100644 index 0000000..8912c40 --- /dev/null +++ b/thirdparty/zlib-1.3.1/test/infcover.c @@ -0,0 +1,672 @@ +/* infcover.c -- test zlib's inflate routines with full code coverage + * Copyright (C) 2011, 2016 Mark Adler + * For conditions of distribution and use, see copyright notice in zlib.h + */ + +/* to use, do: ./configure --cover && make cover */ + +#include +#include +#include +#include +#include "zlib.h" + +/* get definition of internal structure so we can mess with it (see pull()), + and so we can call inflate_trees() (see cover5()) */ +#define ZLIB_INTERNAL +#include "inftrees.h" +#include "inflate.h" + +#define local static + +/* -- memory tracking routines -- */ + +/* + These memory tracking routines are provided to zlib and track all of zlib's + allocations and deallocations, check for LIFO operations, keep a current + and high water mark of total bytes requested, optionally set a limit on the + total memory that can be allocated, and when done check for memory leaks. + + They are used as follows: + + z_stream strm; + mem_setup(&strm) initializes the memory tracking and sets the + zalloc, zfree, and opaque members of strm to use + memory tracking for all zlib operations on strm + mem_limit(&strm, limit) sets a limit on the total bytes requested -- a + request that exceeds this limit will result in an + allocation failure (returns NULL) -- setting the + limit to zero means no limit, which is the default + after mem_setup() + mem_used(&strm, "msg") prints to stderr "msg" and the total bytes used + mem_high(&strm, "msg") prints to stderr "msg" and the high water mark + mem_done(&strm, "msg") ends memory tracking, releases all allocations + for the tracking as well as leaked zlib blocks, if + any. If there was anything unusual, such as leaked + blocks, non-FIFO frees, or frees of addresses not + allocated, then "msg" and information about the + problem is printed to stderr. If everything is + normal, nothing is printed. mem_done resets the + strm members to Z_NULL to use the default memory + allocation routines on the next zlib initialization + using strm. + */ + +/* these items are strung together in a linked list, one for each allocation */ +struct mem_item { + void *ptr; /* pointer to allocated memory */ + size_t size; /* requested size of allocation */ + struct mem_item *next; /* pointer to next item in list, or NULL */ +}; + +/* this structure is at the root of the linked list, and tracks statistics */ +struct mem_zone { + struct mem_item *first; /* pointer to first item in list, or NULL */ + size_t total, highwater; /* total allocations, and largest total */ + size_t limit; /* memory allocation limit, or 0 if no limit */ + int notlifo, rogue; /* counts of non-LIFO frees and rogue frees */ +}; + +/* memory allocation routine to pass to zlib */ +local void *mem_alloc(void *mem, unsigned count, unsigned size) +{ + void *ptr; + struct mem_item *item; + struct mem_zone *zone = mem; + size_t len = count * (size_t)size; + + /* induced allocation failure */ + if (zone == NULL || (zone->limit && zone->total + len > zone->limit)) + return NULL; + + /* perform allocation using the standard library, fill memory with a + non-zero value to make sure that the code isn't depending on zeros */ + ptr = malloc(len); + if (ptr == NULL) + return NULL; + memset(ptr, 0xa5, len); + + /* create a new item for the list */ + item = malloc(sizeof(struct mem_item)); + if (item == NULL) { + free(ptr); + return NULL; + } + item->ptr = ptr; + item->size = len; + + /* insert item at the beginning of the list */ + item->next = zone->first; + zone->first = item; + + /* update the statistics */ + zone->total += item->size; + if (zone->total > zone->highwater) + zone->highwater = zone->total; + + /* return the allocated memory */ + return ptr; +} + +/* memory free routine to pass to zlib */ +local void mem_free(void *mem, void *ptr) +{ + struct mem_item *item, *next; + struct mem_zone *zone = mem; + + /* if no zone, just do a free */ + if (zone == NULL) { + free(ptr); + return; + } + + /* point next to the item that matches ptr, or NULL if not found -- remove + the item from the linked list if found */ + next = zone->first; + if (next) { + if (next->ptr == ptr) + zone->first = next->next; /* first one is it, remove from list */ + else { + do { /* search the linked list */ + item = next; + next = item->next; + } while (next != NULL && next->ptr != ptr); + if (next) { /* if found, remove from linked list */ + item->next = next->next; + zone->notlifo++; /* not a LIFO free */ + } + + } + } + + /* if found, update the statistics and free the item */ + if (next) { + zone->total -= next->size; + free(next); + } + + /* if not found, update the rogue count */ + else + zone->rogue++; + + /* in any case, do the requested free with the standard library function */ + free(ptr); +} + +/* set up a controlled memory allocation space for monitoring, set the stream + parameters to the controlled routines, with opaque pointing to the space */ +local void mem_setup(z_stream *strm) +{ + struct mem_zone *zone; + + zone = malloc(sizeof(struct mem_zone)); + assert(zone != NULL); + zone->first = NULL; + zone->total = 0; + zone->highwater = 0; + zone->limit = 0; + zone->notlifo = 0; + zone->rogue = 0; + strm->opaque = zone; + strm->zalloc = mem_alloc; + strm->zfree = mem_free; +} + +/* set a limit on the total memory allocation, or 0 to remove the limit */ +local void mem_limit(z_stream *strm, size_t limit) +{ + struct mem_zone *zone = strm->opaque; + + zone->limit = limit; +} + +/* show the current total requested allocations in bytes */ +local void mem_used(z_stream *strm, char *prefix) +{ + struct mem_zone *zone = strm->opaque; + + fprintf(stderr, "%s: %lu allocated\n", prefix, zone->total); +} + +/* show the high water allocation in bytes */ +local void mem_high(z_stream *strm, char *prefix) +{ + struct mem_zone *zone = strm->opaque; + + fprintf(stderr, "%s: %lu high water mark\n", prefix, zone->highwater); +} + +/* release the memory allocation zone -- if there are any surprises, notify */ +local void mem_done(z_stream *strm, char *prefix) +{ + int count = 0; + struct mem_item *item, *next; + struct mem_zone *zone = strm->opaque; + + /* show high water mark */ + mem_high(strm, prefix); + + /* free leftover allocations and item structures, if any */ + item = zone->first; + while (item != NULL) { + free(item->ptr); + next = item->next; + free(item); + item = next; + count++; + } + + /* issue alerts about anything unexpected */ + if (count || zone->total) + fprintf(stderr, "** %s: %lu bytes in %d blocks not freed\n", + prefix, zone->total, count); + if (zone->notlifo) + fprintf(stderr, "** %s: %d frees not LIFO\n", prefix, zone->notlifo); + if (zone->rogue) + fprintf(stderr, "** %s: %d frees not recognized\n", + prefix, zone->rogue); + + /* free the zone and delete from the stream */ + free(zone); + strm->opaque = Z_NULL; + strm->zalloc = Z_NULL; + strm->zfree = Z_NULL; +} + +/* -- inflate test routines -- */ + +/* Decode a hexadecimal string, set *len to length, in[] to the bytes. This + decodes liberally, in that hex digits can be adjacent, in which case two in + a row writes a byte. Or they can be delimited by any non-hex character, + where the delimiters are ignored except when a single hex digit is followed + by a delimiter, where that single digit writes a byte. The returned data is + allocated and must eventually be freed. NULL is returned if out of memory. + If the length is not needed, then len can be NULL. */ +local unsigned char *h2b(const char *hex, unsigned *len) +{ + unsigned char *in, *re; + unsigned next, val; + + in = malloc((strlen(hex) + 1) >> 1); + if (in == NULL) + return NULL; + next = 0; + val = 1; + do { + if (*hex >= '0' && *hex <= '9') + val = (val << 4) + *hex - '0'; + else if (*hex >= 'A' && *hex <= 'F') + val = (val << 4) + *hex - 'A' + 10; + else if (*hex >= 'a' && *hex <= 'f') + val = (val << 4) + *hex - 'a' + 10; + else if (val != 1 && val < 32) /* one digit followed by delimiter */ + val += 240; /* make it look like two digits */ + if (val > 255) { /* have two digits */ + in[next++] = val & 0xff; /* save the decoded byte */ + val = 1; /* start over */ + } + } while (*hex++); /* go through the loop with the terminating null */ + if (len != NULL) + *len = next; + re = realloc(in, next); + return re == NULL ? in : re; +} + +/* generic inflate() run, where hex is the hexadecimal input data, what is the + text to include in an error message, step is how much input data to feed + inflate() on each call, or zero to feed it all, win is the window bits + parameter to inflateInit2(), len is the size of the output buffer, and err + is the error code expected from the first inflate() call (the second + inflate() call is expected to return Z_STREAM_END). If win is 47, then + header information is collected with inflateGetHeader(). If a zlib stream + is looking for a dictionary, then an empty dictionary is provided. + inflate() is run until all of the input data is consumed. */ +local void inf(char *hex, char *what, unsigned step, int win, unsigned len, + int err) +{ + int ret; + unsigned have; + unsigned char *in, *out; + z_stream strm, copy; + gz_header head; + + mem_setup(&strm); + strm.avail_in = 0; + strm.next_in = Z_NULL; + ret = inflateInit2(&strm, win); + if (ret != Z_OK) { + mem_done(&strm, what); + return; + } + out = malloc(len); assert(out != NULL); + if (win == 47) { + head.extra = out; + head.extra_max = len; + head.name = out; + head.name_max = len; + head.comment = out; + head.comm_max = len; + ret = inflateGetHeader(&strm, &head); assert(ret == Z_OK); + } + in = h2b(hex, &have); assert(in != NULL); + if (step == 0 || step > have) + step = have; + strm.avail_in = step; + have -= step; + strm.next_in = in; + do { + strm.avail_out = len; + strm.next_out = out; + ret = inflate(&strm, Z_NO_FLUSH); assert(err == 9 || ret == err); + if (ret != Z_OK && ret != Z_BUF_ERROR && ret != Z_NEED_DICT) + break; + if (ret == Z_NEED_DICT) { + ret = inflateSetDictionary(&strm, in, 1); + assert(ret == Z_DATA_ERROR); + mem_limit(&strm, 1); + ret = inflateSetDictionary(&strm, out, 0); + assert(ret == Z_MEM_ERROR); + mem_limit(&strm, 0); + ((struct inflate_state *)strm.state)->mode = DICT; + ret = inflateSetDictionary(&strm, out, 0); + assert(ret == Z_OK); + ret = inflate(&strm, Z_NO_FLUSH); assert(ret == Z_BUF_ERROR); + } + ret = inflateCopy(©, &strm); assert(ret == Z_OK); + ret = inflateEnd(©); assert(ret == Z_OK); + err = 9; /* don't care next time around */ + have += strm.avail_in; + strm.avail_in = step > have ? have : step; + have -= strm.avail_in; + } while (strm.avail_in); + free(in); + free(out); + ret = inflateReset2(&strm, -8); assert(ret == Z_OK); + ret = inflateEnd(&strm); assert(ret == Z_OK); + mem_done(&strm, what); +} + +/* cover all of the lines in inflate.c up to inflate() */ +local void cover_support(void) +{ + int ret; + z_stream strm; + + mem_setup(&strm); + strm.avail_in = 0; + strm.next_in = Z_NULL; + ret = inflateInit(&strm); assert(ret == Z_OK); + mem_used(&strm, "inflate init"); + ret = inflatePrime(&strm, 5, 31); assert(ret == Z_OK); + ret = inflatePrime(&strm, -1, 0); assert(ret == Z_OK); + ret = inflateSetDictionary(&strm, Z_NULL, 0); + assert(ret == Z_STREAM_ERROR); + ret = inflateEnd(&strm); assert(ret == Z_OK); + mem_done(&strm, "prime"); + + inf("63 0", "force window allocation", 0, -15, 1, Z_OK); + inf("63 18 5", "force window replacement", 0, -8, 259, Z_OK); + inf("63 18 68 30 d0 0 0", "force split window update", 4, -8, 259, Z_OK); + inf("3 0", "use fixed blocks", 0, -15, 1, Z_STREAM_END); + inf("", "bad window size", 0, 1, 0, Z_STREAM_ERROR); + + mem_setup(&strm); + strm.avail_in = 0; + strm.next_in = Z_NULL; + ret = inflateInit_(&strm, "!", (int)sizeof(z_stream)); + assert(ret == Z_VERSION_ERROR); + mem_done(&strm, "wrong version"); + + strm.avail_in = 0; + strm.next_in = Z_NULL; + ret = inflateInit(&strm); assert(ret == Z_OK); + ret = inflateEnd(&strm); assert(ret == Z_OK); + fputs("inflate built-in memory routines\n", stderr); +} + +/* cover all inflate() header and trailer cases and code after inflate() */ +local void cover_wrap(void) +{ + int ret; + z_stream strm, copy; + unsigned char dict[257]; + + ret = inflate(Z_NULL, 0); assert(ret == Z_STREAM_ERROR); + ret = inflateEnd(Z_NULL); assert(ret == Z_STREAM_ERROR); + ret = inflateCopy(Z_NULL, Z_NULL); assert(ret == Z_STREAM_ERROR); + fputs("inflate bad parameters\n", stderr); + + inf("1f 8b 0 0", "bad gzip method", 0, 31, 0, Z_DATA_ERROR); + inf("1f 8b 8 80", "bad gzip flags", 0, 31, 0, Z_DATA_ERROR); + inf("77 85", "bad zlib method", 0, 15, 0, Z_DATA_ERROR); + inf("8 99", "set window size from header", 0, 0, 0, Z_OK); + inf("78 9c", "bad zlib window size", 0, 8, 0, Z_DATA_ERROR); + inf("78 9c 63 0 0 0 1 0 1", "check adler32", 0, 15, 1, Z_STREAM_END); + inf("1f 8b 8 1e 0 0 0 0 0 0 1 0 0 0 0 0 0", "bad header crc", 0, 47, 1, + Z_DATA_ERROR); + inf("1f 8b 8 2 0 0 0 0 0 0 1d 26 3 0 0 0 0 0 0 0 0 0", "check gzip length", + 0, 47, 0, Z_STREAM_END); + inf("78 90", "bad zlib header check", 0, 47, 0, Z_DATA_ERROR); + inf("8 b8 0 0 0 1", "need dictionary", 0, 8, 0, Z_NEED_DICT); + inf("78 9c 63 0", "compute adler32", 0, 15, 1, Z_OK); + + mem_setup(&strm); + strm.avail_in = 0; + strm.next_in = Z_NULL; + ret = inflateInit2(&strm, -8); + strm.avail_in = 2; + strm.next_in = (void *)"\x63"; + strm.avail_out = 1; + strm.next_out = (void *)&ret; + mem_limit(&strm, 1); + ret = inflate(&strm, Z_NO_FLUSH); assert(ret == Z_MEM_ERROR); + ret = inflate(&strm, Z_NO_FLUSH); assert(ret == Z_MEM_ERROR); + mem_limit(&strm, 0); + memset(dict, 0, 257); + ret = inflateSetDictionary(&strm, dict, 257); + assert(ret == Z_OK); + mem_limit(&strm, (sizeof(struct inflate_state) << 1) + 256); + ret = inflatePrime(&strm, 16, 0); assert(ret == Z_OK); + strm.avail_in = 2; + strm.next_in = (void *)"\x80"; + ret = inflateSync(&strm); assert(ret == Z_DATA_ERROR); + ret = inflate(&strm, Z_NO_FLUSH); assert(ret == Z_STREAM_ERROR); + strm.avail_in = 4; + strm.next_in = (void *)"\0\0\xff\xff"; + ret = inflateSync(&strm); assert(ret == Z_OK); + (void)inflateSyncPoint(&strm); + ret = inflateCopy(©, &strm); assert(ret == Z_MEM_ERROR); + mem_limit(&strm, 0); + ret = inflateUndermine(&strm, 1); assert(ret == Z_DATA_ERROR); + (void)inflateMark(&strm); + ret = inflateEnd(&strm); assert(ret == Z_OK); + mem_done(&strm, "miscellaneous, force memory errors"); +} + +/* input and output functions for inflateBack() */ +local unsigned pull(void *desc, unsigned char **buf) +{ + static unsigned int next = 0; + static unsigned char dat[] = {0x63, 0, 2, 0}; + struct inflate_state *state; + + if (desc == Z_NULL) { + next = 0; + return 0; /* no input (already provided at next_in) */ + } + state = (void *)((z_stream *)desc)->state; + if (state != Z_NULL) + state->mode = SYNC; /* force an otherwise impossible situation */ + return next < sizeof(dat) ? (*buf = dat + next++, 1) : 0; +} + +local int push(void *desc, unsigned char *buf, unsigned len) +{ + (void)buf; + (void)len; + return desc != Z_NULL; /* force error if desc not null */ +} + +/* cover inflateBack() up to common deflate data cases and after those */ +local void cover_back(void) +{ + int ret; + z_stream strm; + unsigned char win[32768]; + + ret = inflateBackInit_(Z_NULL, 0, win, 0, 0); + assert(ret == Z_VERSION_ERROR); + ret = inflateBackInit(Z_NULL, 0, win); assert(ret == Z_STREAM_ERROR); + ret = inflateBack(Z_NULL, Z_NULL, Z_NULL, Z_NULL, Z_NULL); + assert(ret == Z_STREAM_ERROR); + ret = inflateBackEnd(Z_NULL); assert(ret == Z_STREAM_ERROR); + fputs("inflateBack bad parameters\n", stderr); + + mem_setup(&strm); + ret = inflateBackInit(&strm, 15, win); assert(ret == Z_OK); + strm.avail_in = 2; + strm.next_in = (void *)"\x03"; + ret = inflateBack(&strm, pull, Z_NULL, push, Z_NULL); + assert(ret == Z_STREAM_END); + /* force output error */ + strm.avail_in = 3; + strm.next_in = (void *)"\x63\x00"; + ret = inflateBack(&strm, pull, Z_NULL, push, &strm); + assert(ret == Z_BUF_ERROR); + /* force mode error by mucking with state */ + ret = inflateBack(&strm, pull, &strm, push, Z_NULL); + assert(ret == Z_STREAM_ERROR); + ret = inflateBackEnd(&strm); assert(ret == Z_OK); + mem_done(&strm, "inflateBack bad state"); + + ret = inflateBackInit(&strm, 15, win); assert(ret == Z_OK); + ret = inflateBackEnd(&strm); assert(ret == Z_OK); + fputs("inflateBack built-in memory routines\n", stderr); +} + +/* do a raw inflate of data in hexadecimal with both inflate and inflateBack */ +local int try(char *hex, char *id, int err) +{ + int ret; + unsigned len, size; + unsigned char *in, *out, *win; + char *prefix; + z_stream strm; + + /* convert to hex */ + in = h2b(hex, &len); + assert(in != NULL); + + /* allocate work areas */ + size = len << 3; + out = malloc(size); + assert(out != NULL); + win = malloc(32768); + assert(win != NULL); + prefix = malloc(strlen(id) + 6); + assert(prefix != NULL); + + /* first with inflate */ + strcpy(prefix, id); + strcat(prefix, "-late"); + mem_setup(&strm); + strm.avail_in = 0; + strm.next_in = Z_NULL; + ret = inflateInit2(&strm, err < 0 ? 47 : -15); + assert(ret == Z_OK); + strm.avail_in = len; + strm.next_in = in; + do { + strm.avail_out = size; + strm.next_out = out; + ret = inflate(&strm, Z_TREES); + assert(ret != Z_STREAM_ERROR && ret != Z_MEM_ERROR); + if (ret == Z_DATA_ERROR || ret == Z_NEED_DICT) + break; + } while (strm.avail_in || strm.avail_out == 0); + if (err) { + assert(ret == Z_DATA_ERROR); + assert(strcmp(id, strm.msg) == 0); + } + inflateEnd(&strm); + mem_done(&strm, prefix); + + /* then with inflateBack */ + if (err >= 0) { + strcpy(prefix, id); + strcat(prefix, "-back"); + mem_setup(&strm); + ret = inflateBackInit(&strm, 15, win); + assert(ret == Z_OK); + strm.avail_in = len; + strm.next_in = in; + ret = inflateBack(&strm, pull, Z_NULL, push, Z_NULL); + assert(ret != Z_STREAM_ERROR); + if (err) { + assert(ret == Z_DATA_ERROR); + assert(strcmp(id, strm.msg) == 0); + } + inflateBackEnd(&strm); + mem_done(&strm, prefix); + } + + /* clean up */ + free(prefix); + free(win); + free(out); + free(in); + return ret; +} + +/* cover deflate data cases in both inflate() and inflateBack() */ +local void cover_inflate(void) +{ + try("0 0 0 0 0", "invalid stored block lengths", 1); + try("3 0", "fixed", 0); + try("6", "invalid block type", 1); + try("1 1 0 fe ff 0", "stored", 0); + try("fc 0 0", "too many length or distance symbols", 1); + try("4 0 fe ff", "invalid code lengths set", 1); + try("4 0 24 49 0", "invalid bit length repeat", 1); + try("4 0 24 e9 ff ff", "invalid bit length repeat", 1); + try("4 0 24 e9 ff 6d", "invalid code -- missing end-of-block", 1); + try("4 80 49 92 24 49 92 24 71 ff ff 93 11 0", + "invalid literal/lengths set", 1); + try("4 80 49 92 24 49 92 24 f b4 ff ff c3 84", "invalid distances set", 1); + try("4 c0 81 8 0 0 0 0 20 7f eb b 0 0", "invalid literal/length code", 1); + try("2 7e ff ff", "invalid distance code", 1); + try("c c0 81 0 0 0 0 0 90 ff 6b 4 0", "invalid distance too far back", 1); + + /* also trailer mismatch just in inflate() */ + try("1f 8b 8 0 0 0 0 0 0 0 3 0 0 0 0 1", "incorrect data check", -1); + try("1f 8b 8 0 0 0 0 0 0 0 3 0 0 0 0 0 0 0 0 1", + "incorrect length check", -1); + try("5 c0 21 d 0 0 0 80 b0 fe 6d 2f 91 6c", "pull 17", 0); + try("5 e0 81 91 24 cb b2 2c 49 e2 f 2e 8b 9a 47 56 9f fb fe ec d2 ff 1f", + "long code", 0); + try("ed c0 1 1 0 0 0 40 20 ff 57 1b 42 2c 4f", "length extra", 0); + try("ed cf c1 b1 2c 47 10 c4 30 fa 6f 35 1d 1 82 59 3d fb be 2e 2a fc f c", + "long distance and extra", 0); + try("ed c0 81 0 0 0 0 80 a0 fd a9 17 a9 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 " + "0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 6", "window end", 0); + inf("2 8 20 80 0 3 0", "inflate_fast TYPE return", 0, -15, 258, + Z_STREAM_END); + inf("63 18 5 40 c 0", "window wrap", 3, -8, 300, Z_OK); +} + +/* cover remaining lines in inftrees.c */ +local void cover_trees(void) +{ + int ret; + unsigned bits; + unsigned short lens[16], work[16]; + code *next, table[ENOUGH_DISTS]; + + /* we need to call inflate_table() directly in order to manifest not- + enough errors, since zlib insures that enough is always enough */ + for (bits = 0; bits < 15; bits++) + lens[bits] = (unsigned short)(bits + 1); + lens[15] = 15; + next = table; + bits = 15; + ret = inflate_table(DISTS, lens, 16, &next, &bits, work); + assert(ret == 1); + next = table; + bits = 1; + ret = inflate_table(DISTS, lens, 16, &next, &bits, work); + assert(ret == 1); + fputs("inflate_table not enough errors\n", stderr); +} + +/* cover remaining inffast.c decoding and window copying */ +local void cover_fast(void) +{ + inf("e5 e0 81 ad 6d cb b2 2c c9 01 1e 59 63 ae 7d ee fb 4d fd b5 35 41 68" + " ff 7f 0f 0 0 0", "fast length extra bits", 0, -8, 258, Z_DATA_ERROR); + inf("25 fd 81 b5 6d 59 b6 6a 49 ea af 35 6 34 eb 8c b9 f6 b9 1e ef 67 49" + " 50 fe ff ff 3f 0 0", "fast distance extra bits", 0, -8, 258, + Z_DATA_ERROR); + inf("3 7e 0 0 0 0 0", "fast invalid distance code", 0, -8, 258, + Z_DATA_ERROR); + inf("1b 7 0 0 0 0 0", "fast invalid literal/length code", 0, -8, 258, + Z_DATA_ERROR); + inf("d c7 1 ae eb 38 c 4 41 a0 87 72 de df fb 1f b8 36 b1 38 5d ff ff 0", + "fast 2nd level codes and too far back", 0, -8, 258, Z_DATA_ERROR); + inf("63 18 5 8c 10 8 0 0 0 0", "very common case", 0, -8, 259, Z_OK); + inf("63 60 60 18 c9 0 8 18 18 18 26 c0 28 0 29 0 0 0", + "contiguous and wrap around window", 6, -8, 259, Z_OK); + inf("63 0 3 0 0 0 0 0", "copy direct from output", 0, -8, 259, + Z_STREAM_END); +} + +int main(void) +{ + fprintf(stderr, "%s\n", zlibVersion()); + cover_support(); + cover_wrap(); + cover_back(); + cover_inflate(); + cover_trees(); + cover_fast(); + return 0; +} diff --git a/thirdparty/zlib-1.3.1/test/minigzip.c b/thirdparty/zlib-1.3.1/test/minigzip.c new file mode 100644 index 0000000..134e10e --- /dev/null +++ b/thirdparty/zlib-1.3.1/test/minigzip.c @@ -0,0 +1,579 @@ +/* minigzip.c -- simulate gzip using the zlib compression library + * Copyright (C) 1995-2006, 2010, 2011, 2016 Jean-loup Gailly + * For conditions of distribution and use, see copyright notice in zlib.h + */ + +/* + * minigzip is a minimal implementation of the gzip utility. This is + * only an example of using zlib and isn't meant to replace the + * full-featured gzip. No attempt is made to deal with file systems + * limiting names to 14 or 8+3 characters, etc... Error checking is + * very limited. So use minigzip only for testing; use gzip for the + * real thing. On MSDOS, use only on file names without extension + * or in pipe mode. + */ + +/* @(#) $Id$ */ + +#include "zlib.h" +#include + +#ifdef STDC +# include +# include +#endif + +#ifdef USE_MMAP +# include +# include +# include +#endif + +#if defined(MSDOS) || defined(OS2) || defined(WIN32) || defined(__CYGWIN__) +# include +# include +# ifdef UNDER_CE +# include +# endif +# define SET_BINARY_MODE(file) setmode(fileno(file), O_BINARY) +#else +# define SET_BINARY_MODE(file) +#endif + +#if defined(_MSC_VER) && _MSC_VER < 1900 +# define snprintf _snprintf +#endif + +#ifdef VMS +# define unlink delete +# define GZ_SUFFIX "-gz" +#endif +#ifdef RISCOS +# define unlink remove +# define GZ_SUFFIX "-gz" +# define fileno(file) file->__file +#endif +#if defined(__MWERKS__) && __dest_os != __be_os && __dest_os != __win32_os +# include /* for fileno */ +#endif + +#if !defined(Z_HAVE_UNISTD_H) && !defined(_LARGEFILE64_SOURCE) +#ifndef WIN32 /* unlink already in stdio.h for WIN32 */ + extern int unlink(const char *); +#endif +#endif + +#if defined(UNDER_CE) +# include +# define perror(s) pwinerror(s) + +/* Map the Windows error number in ERROR to a locale-dependent error + message string and return a pointer to it. Typically, the values + for ERROR come from GetLastError. + + The string pointed to shall not be modified by the application, + but may be overwritten by a subsequent call to strwinerror + + The strwinerror function does not change the current setting + of GetLastError. */ + +static char *strwinerror (error) + DWORD error; +{ + static char buf[1024]; + + wchar_t *msgbuf; + DWORD lasterr = GetLastError(); + DWORD chars = FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM + | FORMAT_MESSAGE_ALLOCATE_BUFFER, + NULL, + error, + 0, /* Default language */ + (LPVOID)&msgbuf, + 0, + NULL); + if (chars != 0) { + /* If there is an \r\n appended, zap it. */ + if (chars >= 2 + && msgbuf[chars - 2] == '\r' && msgbuf[chars - 1] == '\n') { + chars -= 2; + msgbuf[chars] = 0; + } + + if (chars > sizeof (buf) - 1) { + chars = sizeof (buf) - 1; + msgbuf[chars] = 0; + } + + wcstombs(buf, msgbuf, chars + 1); + LocalFree(msgbuf); + } + else { + sprintf(buf, "unknown win32 error (%ld)", error); + } + + SetLastError(lasterr); + return buf; +} + +static void pwinerror (s) + const char *s; +{ + if (s && *s) + fprintf(stderr, "%s: %s\n", s, strwinerror(GetLastError ())); + else + fprintf(stderr, "%s\n", strwinerror(GetLastError ())); +} + +#endif /* UNDER_CE */ + +#ifndef GZ_SUFFIX +# define GZ_SUFFIX ".gz" +#endif +#define SUFFIX_LEN (sizeof(GZ_SUFFIX)-1) + +#define BUFLEN 16384 +#define MAX_NAME_LEN 1024 + +#ifdef MAXSEG_64K +# define local static + /* Needed for systems with limitation on stack size. */ +#else +# define local +#endif + +#ifdef Z_SOLO +/* for Z_SOLO, create simplified gz* functions using deflate and inflate */ + +#if defined(Z_HAVE_UNISTD_H) || defined(Z_LARGE) +# include /* for unlink() */ +#endif + +static void *myalloc(void *q, unsigned n, unsigned m) { + (void)q; + return calloc(n, m); +} + +static void myfree(void *q, void *p) { + (void)q; + free(p); +} + +typedef struct gzFile_s { + FILE *file; + int write; + int err; + char *msg; + z_stream strm; +} *gzFile; + +static gzFile gz_open(const char *path, int fd, const char *mode) { + gzFile gz; + int ret; + + gz = malloc(sizeof(struct gzFile_s)); + if (gz == NULL) + return NULL; + gz->write = strchr(mode, 'w') != NULL; + gz->strm.zalloc = myalloc; + gz->strm.zfree = myfree; + gz->strm.opaque = Z_NULL; + if (gz->write) + ret = deflateInit2(&(gz->strm), -1, 8, 15 + 16, 8, 0); + else { + gz->strm.next_in = 0; + gz->strm.avail_in = Z_NULL; + ret = inflateInit2(&(gz->strm), 15 + 16); + } + if (ret != Z_OK) { + free(gz); + return NULL; + } + gz->file = path == NULL ? fdopen(fd, gz->write ? "wb" : "rb") : + fopen(path, gz->write ? "wb" : "rb"); + if (gz->file == NULL) { + gz->write ? deflateEnd(&(gz->strm)) : inflateEnd(&(gz->strm)); + free(gz); + return NULL; + } + gz->err = 0; + gz->msg = ""; + return gz; +} + +static gzFile gzopen(const char *path, const char *mode) { + return gz_open(path, -1, mode); +} + +static gzFile gzdopen(int fd, const char *mode) { + return gz_open(NULL, fd, mode); +} + +static int gzwrite(gzFile gz, const void *buf, unsigned len) { + z_stream *strm; + unsigned char out[BUFLEN]; + + if (gz == NULL || !gz->write) + return 0; + strm = &(gz->strm); + strm->next_in = (void *)buf; + strm->avail_in = len; + do { + strm->next_out = out; + strm->avail_out = BUFLEN; + (void)deflate(strm, Z_NO_FLUSH); + fwrite(out, 1, BUFLEN - strm->avail_out, gz->file); + } while (strm->avail_out == 0); + return len; +} + +static int gzread(gzFile gz, void *buf, unsigned len) { + int ret; + unsigned got; + unsigned char in[1]; + z_stream *strm; + + if (gz == NULL || gz->write) + return 0; + if (gz->err) + return 0; + strm = &(gz->strm); + strm->next_out = (void *)buf; + strm->avail_out = len; + do { + got = fread(in, 1, 1, gz->file); + if (got == 0) + break; + strm->next_in = in; + strm->avail_in = 1; + ret = inflate(strm, Z_NO_FLUSH); + if (ret == Z_DATA_ERROR) { + gz->err = Z_DATA_ERROR; + gz->msg = strm->msg; + return 0; + } + if (ret == Z_STREAM_END) + inflateReset(strm); + } while (strm->avail_out); + return len - strm->avail_out; +} + +static int gzclose(gzFile gz) { + z_stream *strm; + unsigned char out[BUFLEN]; + + if (gz == NULL) + return Z_STREAM_ERROR; + strm = &(gz->strm); + if (gz->write) { + strm->next_in = Z_NULL; + strm->avail_in = 0; + do { + strm->next_out = out; + strm->avail_out = BUFLEN; + (void)deflate(strm, Z_FINISH); + fwrite(out, 1, BUFLEN - strm->avail_out, gz->file); + } while (strm->avail_out == 0); + deflateEnd(strm); + } + else + inflateEnd(strm); + fclose(gz->file); + free(gz); + return Z_OK; +} + +static const char *gzerror(gzFile gz, int *err) { + *err = gz->err; + return gz->msg; +} + +#endif + +static char *prog; + +/* =========================================================================== + * Display error message and exit + */ +static void error(const char *msg) { + fprintf(stderr, "%s: %s\n", prog, msg); + exit(1); +} + +#ifdef USE_MMAP /* MMAP version, Miguel Albrecht */ + +/* Try compressing the input file at once using mmap. Return Z_OK if + * success, Z_ERRNO otherwise. + */ +static int gz_compress_mmap(FILE *in, gzFile out) { + int len; + int err; + int ifd = fileno(in); + caddr_t buf; /* mmap'ed buffer for the entire input file */ + off_t buf_len; /* length of the input file */ + struct stat sb; + + /* Determine the size of the file, needed for mmap: */ + if (fstat(ifd, &sb) < 0) return Z_ERRNO; + buf_len = sb.st_size; + if (buf_len <= 0) return Z_ERRNO; + + /* Now do the actual mmap: */ + buf = mmap((caddr_t) 0, buf_len, PROT_READ, MAP_SHARED, ifd, (off_t)0); + if (buf == (caddr_t)(-1)) return Z_ERRNO; + + /* Compress the whole file at once: */ + len = gzwrite(out, (char *)buf, (unsigned)buf_len); + + if (len != (int)buf_len) error(gzerror(out, &err)); + + munmap(buf, buf_len); + fclose(in); + if (gzclose(out) != Z_OK) error("failed gzclose"); + return Z_OK; +} +#endif /* USE_MMAP */ + +/* =========================================================================== + * Compress input to output then close both files. + */ + +static void gz_compress(FILE *in, gzFile out) { + local char buf[BUFLEN]; + int len; + int err; + +#ifdef USE_MMAP + /* Try first compressing with mmap. If mmap fails (minigzip used in a + * pipe), use the normal fread loop. + */ + if (gz_compress_mmap(in, out) == Z_OK) return; +#endif + for (;;) { + len = (int)fread(buf, 1, sizeof(buf), in); + if (ferror(in)) { + perror("fread"); + exit(1); + } + if (len == 0) break; + + if (gzwrite(out, buf, (unsigned)len) != len) error(gzerror(out, &err)); + } + fclose(in); + if (gzclose(out) != Z_OK) error("failed gzclose"); +} + +/* =========================================================================== + * Uncompress input to output then close both files. + */ +static void gz_uncompress(gzFile in, FILE *out) { + local char buf[BUFLEN]; + int len; + int err; + + for (;;) { + len = gzread(in, buf, sizeof(buf)); + if (len < 0) error (gzerror(in, &err)); + if (len == 0) break; + + if ((int)fwrite(buf, 1, (unsigned)len, out) != len) { + error("failed fwrite"); + } + } + if (fclose(out)) error("failed fclose"); + + if (gzclose(in) != Z_OK) error("failed gzclose"); +} + + +/* =========================================================================== + * Compress the given file: create a corresponding .gz file and remove the + * original. + */ +static void file_compress(char *file, char *mode) { + local char outfile[MAX_NAME_LEN]; + FILE *in; + gzFile out; + + if (strlen(file) + strlen(GZ_SUFFIX) >= sizeof(outfile)) { + fprintf(stderr, "%s: filename too long\n", prog); + exit(1); + } + +#if !defined(NO_snprintf) && !defined(NO_vsnprintf) + snprintf(outfile, sizeof(outfile), "%s%s", file, GZ_SUFFIX); +#else + strcpy(outfile, file); + strcat(outfile, GZ_SUFFIX); +#endif + + in = fopen(file, "rb"); + if (in == NULL) { + perror(file); + exit(1); + } + out = gzopen(outfile, mode); + if (out == NULL) { + fprintf(stderr, "%s: can't gzopen %s\n", prog, outfile); + exit(1); + } + gz_compress(in, out); + + unlink(file); +} + + +/* =========================================================================== + * Uncompress the given file and remove the original. + */ +static void file_uncompress(char *file) { + local char buf[MAX_NAME_LEN]; + char *infile, *outfile; + FILE *out; + gzFile in; + z_size_t len = strlen(file); + + if (len + strlen(GZ_SUFFIX) >= sizeof(buf)) { + fprintf(stderr, "%s: filename too long\n", prog); + exit(1); + } + +#if !defined(NO_snprintf) && !defined(NO_vsnprintf) + snprintf(buf, sizeof(buf), "%s", file); +#else + strcpy(buf, file); +#endif + + if (len > SUFFIX_LEN && strcmp(file+len-SUFFIX_LEN, GZ_SUFFIX) == 0) { + infile = file; + outfile = buf; + outfile[len-3] = '\0'; + } else { + outfile = file; + infile = buf; +#if !defined(NO_snprintf) && !defined(NO_vsnprintf) + snprintf(buf + len, sizeof(buf) - len, "%s", GZ_SUFFIX); +#else + strcat(infile, GZ_SUFFIX); +#endif + } + in = gzopen(infile, "rb"); + if (in == NULL) { + fprintf(stderr, "%s: can't gzopen %s\n", prog, infile); + exit(1); + } + out = fopen(outfile, "wb"); + if (out == NULL) { + perror(file); + exit(1); + } + + gz_uncompress(in, out); + + unlink(infile); +} + + +/* =========================================================================== + * Usage: minigzip [-c] [-d] [-f] [-h] [-r] [-1 to -9] [files...] + * -c : write to standard output + * -d : decompress + * -f : compress with Z_FILTERED + * -h : compress with Z_HUFFMAN_ONLY + * -r : compress with Z_RLE + * -1 to -9 : compression level + */ + +int main(int argc, char *argv[]) { + int copyout = 0; + int uncompr = 0; + gzFile file; + char *bname, outmode[20]; + +#if !defined(NO_snprintf) && !defined(NO_vsnprintf) + snprintf(outmode, sizeof(outmode), "%s", "wb6 "); +#else + strcpy(outmode, "wb6 "); +#endif + + prog = argv[0]; + bname = strrchr(argv[0], '/'); + if (bname) + bname++; + else + bname = argv[0]; + argc--, argv++; + + if (!strcmp(bname, "gunzip")) + uncompr = 1; + else if (!strcmp(bname, "zcat")) + copyout = uncompr = 1; + + while (argc > 0) { + if (strcmp(*argv, "-c") == 0) + copyout = 1; + else if (strcmp(*argv, "-d") == 0) + uncompr = 1; + else if (strcmp(*argv, "-f") == 0) + outmode[3] = 'f'; + else if (strcmp(*argv, "-h") == 0) + outmode[3] = 'h'; + else if (strcmp(*argv, "-r") == 0) + outmode[3] = 'R'; + else if ((*argv)[0] == '-' && (*argv)[1] >= '1' && (*argv)[1] <= '9' && + (*argv)[2] == 0) + outmode[2] = (*argv)[1]; + else + break; + argc--, argv++; + } + if (outmode[3] == ' ') + outmode[3] = 0; + if (argc == 0) { + SET_BINARY_MODE(stdin); + SET_BINARY_MODE(stdout); + if (uncompr) { + file = gzdopen(fileno(stdin), "rb"); + if (file == NULL) error("can't gzdopen stdin"); + gz_uncompress(file, stdout); + } else { + file = gzdopen(fileno(stdout), outmode); + if (file == NULL) error("can't gzdopen stdout"); + gz_compress(stdin, file); + } + } else { + if (copyout) { + SET_BINARY_MODE(stdout); + } + do { + if (uncompr) { + if (copyout) { + file = gzopen(*argv, "rb"); + if (file == NULL) + fprintf(stderr, "%s: can't gzopen %s\n", prog, *argv); + else + gz_uncompress(file, stdout); + } else { + file_uncompress(*argv); + } + } else { + if (copyout) { + FILE * in = fopen(*argv, "rb"); + + if (in == NULL) { + perror(*argv); + } else { + file = gzdopen(fileno(stdout), outmode); + if (file == NULL) error("can't gzdopen stdout"); + + gz_compress(in, file); + } + + } else { + file_compress(*argv, outmode); + } + } + } while (argv++, --argc); + } + return 0; +} diff --git a/thirdparty/zlib-1.3.1/treebuild.xml b/thirdparty/zlib-1.3.1/treebuild.xml new file mode 100644 index 0000000..930b00b --- /dev/null +++ b/thirdparty/zlib-1.3.1/treebuild.xml @@ -0,0 +1,116 @@ + + + + zip compression library + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/thirdparty/zlib-1.3.1/trees.c b/thirdparty/zlib-1.3.1/trees.c new file mode 100644 index 0000000..6a523ef --- /dev/null +++ b/thirdparty/zlib-1.3.1/trees.c @@ -0,0 +1,1117 @@ +/* trees.c -- output deflated data using Huffman coding + * Copyright (C) 1995-2024 Jean-loup Gailly + * detect_data_type() function provided freely by Cosmin Truta, 2006 + * For conditions of distribution and use, see copyright notice in zlib.h + */ + +/* + * ALGORITHM + * + * The "deflation" process uses several Huffman trees. The more + * common source values are represented by shorter bit sequences. + * + * Each code tree is stored in a compressed form which is itself + * a Huffman encoding of the lengths of all the code strings (in + * ascending order by source values). The actual code strings are + * reconstructed from the lengths in the inflate process, as described + * in the deflate specification. + * + * REFERENCES + * + * Deutsch, L.P.,"'Deflate' Compressed Data Format Specification". + * Available in ftp.uu.net:/pub/archiving/zip/doc/deflate-1.1.doc + * + * Storer, James A. + * Data Compression: Methods and Theory, pp. 49-50. + * Computer Science Press, 1988. ISBN 0-7167-8156-5. + * + * Sedgewick, R. + * Algorithms, p290. + * Addison-Wesley, 1983. ISBN 0-201-06672-6. + */ + +/* @(#) $Id$ */ + +/* #define GEN_TREES_H */ + +#include "deflate.h" + +#ifdef ZLIB_DEBUG +# include +#endif + +/* =========================================================================== + * Constants + */ + +#define MAX_BL_BITS 7 +/* Bit length codes must not exceed MAX_BL_BITS bits */ + +#define END_BLOCK 256 +/* end of block literal code */ + +#define REP_3_6 16 +/* repeat previous bit length 3-6 times (2 bits of repeat count) */ + +#define REPZ_3_10 17 +/* repeat a zero length 3-10 times (3 bits of repeat count) */ + +#define REPZ_11_138 18 +/* repeat a zero length 11-138 times (7 bits of repeat count) */ + +local const int extra_lbits[LENGTH_CODES] /* extra bits for each length code */ + = {0,0,0,0,0,0,0,0,1,1,1,1,2,2,2,2,3,3,3,3,4,4,4,4,5,5,5,5,0}; + +local const int extra_dbits[D_CODES] /* extra bits for each distance code */ + = {0,0,0,0,1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10,11,11,12,12,13,13}; + +local const int extra_blbits[BL_CODES]/* extra bits for each bit length code */ + = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,2,3,7}; + +local const uch bl_order[BL_CODES] + = {16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15}; +/* The lengths of the bit length codes are sent in order of decreasing + * probability, to avoid transmitting the lengths for unused bit length codes. + */ + +/* =========================================================================== + * Local data. These are initialized only once. + */ + +#define DIST_CODE_LEN 512 /* see definition of array dist_code below */ + +#if defined(GEN_TREES_H) || !defined(STDC) +/* non ANSI compilers may not accept trees.h */ + +local ct_data static_ltree[L_CODES+2]; +/* The static literal tree. Since the bit lengths are imposed, there is no + * need for the L_CODES extra codes used during heap construction. However + * The codes 286 and 287 are needed to build a canonical tree (see _tr_init + * below). + */ + +local ct_data static_dtree[D_CODES]; +/* The static distance tree. (Actually a trivial tree since all codes use + * 5 bits.) + */ + +uch _dist_code[DIST_CODE_LEN]; +/* Distance codes. The first 256 values correspond to the distances + * 3 .. 258, the last 256 values correspond to the top 8 bits of + * the 15 bit distances. + */ + +uch _length_code[MAX_MATCH-MIN_MATCH+1]; +/* length code for each normalized match length (0 == MIN_MATCH) */ + +local int base_length[LENGTH_CODES]; +/* First normalized length for each code (0 = MIN_MATCH) */ + +local int base_dist[D_CODES]; +/* First normalized distance for each code (0 = distance of 1) */ + +#else +# include "trees.h" +#endif /* GEN_TREES_H */ + +struct static_tree_desc_s { + const ct_data *static_tree; /* static tree or NULL */ + const intf *extra_bits; /* extra bits for each code or NULL */ + int extra_base; /* base index for extra_bits */ + int elems; /* max number of elements in the tree */ + int max_length; /* max bit length for the codes */ +}; + +#ifdef NO_INIT_GLOBAL_POINTERS +# define TCONST +#else +# define TCONST const +#endif + +local TCONST static_tree_desc static_l_desc = +{static_ltree, extra_lbits, LITERALS+1, L_CODES, MAX_BITS}; + +local TCONST static_tree_desc static_d_desc = +{static_dtree, extra_dbits, 0, D_CODES, MAX_BITS}; + +local TCONST static_tree_desc static_bl_desc = +{(const ct_data *)0, extra_blbits, 0, BL_CODES, MAX_BL_BITS}; + +/* =========================================================================== + * Output a short LSB first on the stream. + * IN assertion: there is enough room in pendingBuf. + */ +#define put_short(s, w) { \ + put_byte(s, (uch)((w) & 0xff)); \ + put_byte(s, (uch)((ush)(w) >> 8)); \ +} + +/* =========================================================================== + * Reverse the first len bits of a code, using straightforward code (a faster + * method would use a table) + * IN assertion: 1 <= len <= 15 + */ +local unsigned bi_reverse(unsigned code, int len) { + register unsigned res = 0; + do { + res |= code & 1; + code >>= 1, res <<= 1; + } while (--len > 0); + return res >> 1; +} + +/* =========================================================================== + * Flush the bit buffer, keeping at most 7 bits in it. + */ +local void bi_flush(deflate_state *s) { + if (s->bi_valid == 16) { + put_short(s, s->bi_buf); + s->bi_buf = 0; + s->bi_valid = 0; + } else if (s->bi_valid >= 8) { + put_byte(s, (Byte)s->bi_buf); + s->bi_buf >>= 8; + s->bi_valid -= 8; + } +} + +/* =========================================================================== + * Flush the bit buffer and align the output on a byte boundary + */ +local void bi_windup(deflate_state *s) { + if (s->bi_valid > 8) { + put_short(s, s->bi_buf); + } else if (s->bi_valid > 0) { + put_byte(s, (Byte)s->bi_buf); + } + s->bi_buf = 0; + s->bi_valid = 0; +#ifdef ZLIB_DEBUG + s->bits_sent = (s->bits_sent + 7) & ~7; +#endif +} + +/* =========================================================================== + * Generate the codes for a given tree and bit counts (which need not be + * optimal). + * IN assertion: the array bl_count contains the bit length statistics for + * the given tree and the field len is set for all tree elements. + * OUT assertion: the field code is set for all tree elements of non + * zero code length. + */ +local void gen_codes(ct_data *tree, int max_code, ushf *bl_count) { + ush next_code[MAX_BITS+1]; /* next code value for each bit length */ + unsigned code = 0; /* running code value */ + int bits; /* bit index */ + int n; /* code index */ + + /* The distribution counts are first used to generate the code values + * without bit reversal. + */ + for (bits = 1; bits <= MAX_BITS; bits++) { + code = (code + bl_count[bits - 1]) << 1; + next_code[bits] = (ush)code; + } + /* Check that the bit counts in bl_count are consistent. The last code + * must be all ones. + */ + Assert (code + bl_count[MAX_BITS] - 1 == (1 << MAX_BITS) - 1, + "inconsistent bit counts"); + Tracev((stderr,"\ngen_codes: max_code %d ", max_code)); + + for (n = 0; n <= max_code; n++) { + int len = tree[n].Len; + if (len == 0) continue; + /* Now reverse the bits */ + tree[n].Code = (ush)bi_reverse(next_code[len]++, len); + + Tracecv(tree != static_ltree, (stderr,"\nn %3d %c l %2d c %4x (%x) ", + n, (isgraph(n) ? n : ' '), len, tree[n].Code, next_code[len] - 1)); + } +} + +#ifdef GEN_TREES_H +local void gen_trees_header(void); +#endif + +#ifndef ZLIB_DEBUG +# define send_code(s, c, tree) send_bits(s, tree[c].Code, tree[c].Len) + /* Send a code of the given tree. c and tree must not have side effects */ + +#else /* !ZLIB_DEBUG */ +# define send_code(s, c, tree) \ + { if (z_verbose>2) fprintf(stderr,"\ncd %3d ",(c)); \ + send_bits(s, tree[c].Code, tree[c].Len); } +#endif + +/* =========================================================================== + * Send a value on a given number of bits. + * IN assertion: length <= 16 and value fits in length bits. + */ +#ifdef ZLIB_DEBUG +local void send_bits(deflate_state *s, int value, int length) { + Tracevv((stderr," l %2d v %4x ", length, value)); + Assert(length > 0 && length <= 15, "invalid length"); + s->bits_sent += (ulg)length; + + /* If not enough room in bi_buf, use (valid) bits from bi_buf and + * (16 - bi_valid) bits from value, leaving (width - (16 - bi_valid)) + * unused bits in value. + */ + if (s->bi_valid > (int)Buf_size - length) { + s->bi_buf |= (ush)value << s->bi_valid; + put_short(s, s->bi_buf); + s->bi_buf = (ush)value >> (Buf_size - s->bi_valid); + s->bi_valid += length - Buf_size; + } else { + s->bi_buf |= (ush)value << s->bi_valid; + s->bi_valid += length; + } +} +#else /* !ZLIB_DEBUG */ + +#define send_bits(s, value, length) \ +{ int len = length;\ + if (s->bi_valid > (int)Buf_size - len) {\ + int val = (int)value;\ + s->bi_buf |= (ush)val << s->bi_valid;\ + put_short(s, s->bi_buf);\ + s->bi_buf = (ush)val >> (Buf_size - s->bi_valid);\ + s->bi_valid += len - Buf_size;\ + } else {\ + s->bi_buf |= (ush)(value) << s->bi_valid;\ + s->bi_valid += len;\ + }\ +} +#endif /* ZLIB_DEBUG */ + + +/* the arguments must not have side effects */ + +/* =========================================================================== + * Initialize the various 'constant' tables. + */ +local void tr_static_init(void) { +#if defined(GEN_TREES_H) || !defined(STDC) + static int static_init_done = 0; + int n; /* iterates over tree elements */ + int bits; /* bit counter */ + int length; /* length value */ + int code; /* code value */ + int dist; /* distance index */ + ush bl_count[MAX_BITS+1]; + /* number of codes at each bit length for an optimal tree */ + + if (static_init_done) return; + + /* For some embedded targets, global variables are not initialized: */ +#ifdef NO_INIT_GLOBAL_POINTERS + static_l_desc.static_tree = static_ltree; + static_l_desc.extra_bits = extra_lbits; + static_d_desc.static_tree = static_dtree; + static_d_desc.extra_bits = extra_dbits; + static_bl_desc.extra_bits = extra_blbits; +#endif + + /* Initialize the mapping length (0..255) -> length code (0..28) */ + length = 0; + for (code = 0; code < LENGTH_CODES-1; code++) { + base_length[code] = length; + for (n = 0; n < (1 << extra_lbits[code]); n++) { + _length_code[length++] = (uch)code; + } + } + Assert (length == 256, "tr_static_init: length != 256"); + /* Note that the length 255 (match length 258) can be represented + * in two different ways: code 284 + 5 bits or code 285, so we + * overwrite length_code[255] to use the best encoding: + */ + _length_code[length - 1] = (uch)code; + + /* Initialize the mapping dist (0..32K) -> dist code (0..29) */ + dist = 0; + for (code = 0 ; code < 16; code++) { + base_dist[code] = dist; + for (n = 0; n < (1 << extra_dbits[code]); n++) { + _dist_code[dist++] = (uch)code; + } + } + Assert (dist == 256, "tr_static_init: dist != 256"); + dist >>= 7; /* from now on, all distances are divided by 128 */ + for ( ; code < D_CODES; code++) { + base_dist[code] = dist << 7; + for (n = 0; n < (1 << (extra_dbits[code] - 7)); n++) { + _dist_code[256 + dist++] = (uch)code; + } + } + Assert (dist == 256, "tr_static_init: 256 + dist != 512"); + + /* Construct the codes of the static literal tree */ + for (bits = 0; bits <= MAX_BITS; bits++) bl_count[bits] = 0; + n = 0; + while (n <= 143) static_ltree[n++].Len = 8, bl_count[8]++; + while (n <= 255) static_ltree[n++].Len = 9, bl_count[9]++; + while (n <= 279) static_ltree[n++].Len = 7, bl_count[7]++; + while (n <= 287) static_ltree[n++].Len = 8, bl_count[8]++; + /* Codes 286 and 287 do not exist, but we must include them in the + * tree construction to get a canonical Huffman tree (longest code + * all ones) + */ + gen_codes((ct_data *)static_ltree, L_CODES+1, bl_count); + + /* The static distance tree is trivial: */ + for (n = 0; n < D_CODES; n++) { + static_dtree[n].Len = 5; + static_dtree[n].Code = bi_reverse((unsigned)n, 5); + } + static_init_done = 1; + +# ifdef GEN_TREES_H + gen_trees_header(); +# endif +#endif /* defined(GEN_TREES_H) || !defined(STDC) */ +} + +/* =========================================================================== + * Generate the file trees.h describing the static trees. + */ +#ifdef GEN_TREES_H +# ifndef ZLIB_DEBUG +# include +# endif + +# define SEPARATOR(i, last, width) \ + ((i) == (last)? "\n};\n\n" : \ + ((i) % (width) == (width) - 1 ? ",\n" : ", ")) + +void gen_trees_header(void) { + FILE *header = fopen("trees.h", "w"); + int i; + + Assert (header != NULL, "Can't open trees.h"); + fprintf(header, + "/* header created automatically with -DGEN_TREES_H */\n\n"); + + fprintf(header, "local const ct_data static_ltree[L_CODES+2] = {\n"); + for (i = 0; i < L_CODES+2; i++) { + fprintf(header, "{{%3u},{%3u}}%s", static_ltree[i].Code, + static_ltree[i].Len, SEPARATOR(i, L_CODES+1, 5)); + } + + fprintf(header, "local const ct_data static_dtree[D_CODES] = {\n"); + for (i = 0; i < D_CODES; i++) { + fprintf(header, "{{%2u},{%2u}}%s", static_dtree[i].Code, + static_dtree[i].Len, SEPARATOR(i, D_CODES-1, 5)); + } + + fprintf(header, "const uch ZLIB_INTERNAL _dist_code[DIST_CODE_LEN] = {\n"); + for (i = 0; i < DIST_CODE_LEN; i++) { + fprintf(header, "%2u%s", _dist_code[i], + SEPARATOR(i, DIST_CODE_LEN-1, 20)); + } + + fprintf(header, + "const uch ZLIB_INTERNAL _length_code[MAX_MATCH-MIN_MATCH+1]= {\n"); + for (i = 0; i < MAX_MATCH-MIN_MATCH+1; i++) { + fprintf(header, "%2u%s", _length_code[i], + SEPARATOR(i, MAX_MATCH-MIN_MATCH, 20)); + } + + fprintf(header, "local const int base_length[LENGTH_CODES] = {\n"); + for (i = 0; i < LENGTH_CODES; i++) { + fprintf(header, "%1u%s", base_length[i], + SEPARATOR(i, LENGTH_CODES-1, 20)); + } + + fprintf(header, "local const int base_dist[D_CODES] = {\n"); + for (i = 0; i < D_CODES; i++) { + fprintf(header, "%5u%s", base_dist[i], + SEPARATOR(i, D_CODES-1, 10)); + } + + fclose(header); +} +#endif /* GEN_TREES_H */ + +/* =========================================================================== + * Initialize a new block. + */ +local void init_block(deflate_state *s) { + int n; /* iterates over tree elements */ + + /* Initialize the trees. */ + for (n = 0; n < L_CODES; n++) s->dyn_ltree[n].Freq = 0; + for (n = 0; n < D_CODES; n++) s->dyn_dtree[n].Freq = 0; + for (n = 0; n < BL_CODES; n++) s->bl_tree[n].Freq = 0; + + s->dyn_ltree[END_BLOCK].Freq = 1; + s->opt_len = s->static_len = 0L; + s->sym_next = s->matches = 0; +} + +/* =========================================================================== + * Initialize the tree data structures for a new zlib stream. + */ +void ZLIB_INTERNAL _tr_init(deflate_state *s) { + tr_static_init(); + + s->l_desc.dyn_tree = s->dyn_ltree; + s->l_desc.stat_desc = &static_l_desc; + + s->d_desc.dyn_tree = s->dyn_dtree; + s->d_desc.stat_desc = &static_d_desc; + + s->bl_desc.dyn_tree = s->bl_tree; + s->bl_desc.stat_desc = &static_bl_desc; + + s->bi_buf = 0; + s->bi_valid = 0; +#ifdef ZLIB_DEBUG + s->compressed_len = 0L; + s->bits_sent = 0L; +#endif + + /* Initialize the first block of the first file: */ + init_block(s); +} + +#define SMALLEST 1 +/* Index within the heap array of least frequent node in the Huffman tree */ + + +/* =========================================================================== + * Remove the smallest element from the heap and recreate the heap with + * one less element. Updates heap and heap_len. + */ +#define pqremove(s, tree, top) \ +{\ + top = s->heap[SMALLEST]; \ + s->heap[SMALLEST] = s->heap[s->heap_len--]; \ + pqdownheap(s, tree, SMALLEST); \ +} + +/* =========================================================================== + * Compares to subtrees, using the tree depth as tie breaker when + * the subtrees have equal frequency. This minimizes the worst case length. + */ +#define smaller(tree, n, m, depth) \ + (tree[n].Freq < tree[m].Freq || \ + (tree[n].Freq == tree[m].Freq && depth[n] <= depth[m])) + +/* =========================================================================== + * Restore the heap property by moving down the tree starting at node k, + * exchanging a node with the smallest of its two sons if necessary, stopping + * when the heap property is re-established (each father smaller than its + * two sons). + */ +local void pqdownheap(deflate_state *s, ct_data *tree, int k) { + int v = s->heap[k]; + int j = k << 1; /* left son of k */ + while (j <= s->heap_len) { + /* Set j to the smallest of the two sons: */ + if (j < s->heap_len && + smaller(tree, s->heap[j + 1], s->heap[j], s->depth)) { + j++; + } + /* Exit if v is smaller than both sons */ + if (smaller(tree, v, s->heap[j], s->depth)) break; + + /* Exchange v with the smallest son */ + s->heap[k] = s->heap[j]; k = j; + + /* And continue down the tree, setting j to the left son of k */ + j <<= 1; + } + s->heap[k] = v; +} + +/* =========================================================================== + * Compute the optimal bit lengths for a tree and update the total bit length + * for the current block. + * IN assertion: the fields freq and dad are set, heap[heap_max] and + * above are the tree nodes sorted by increasing frequency. + * OUT assertions: the field len is set to the optimal bit length, the + * array bl_count contains the frequencies for each bit length. + * The length opt_len is updated; static_len is also updated if stree is + * not null. + */ +local void gen_bitlen(deflate_state *s, tree_desc *desc) { + ct_data *tree = desc->dyn_tree; + int max_code = desc->max_code; + const ct_data *stree = desc->stat_desc->static_tree; + const intf *extra = desc->stat_desc->extra_bits; + int base = desc->stat_desc->extra_base; + int max_length = desc->stat_desc->max_length; + int h; /* heap index */ + int n, m; /* iterate over the tree elements */ + int bits; /* bit length */ + int xbits; /* extra bits */ + ush f; /* frequency */ + int overflow = 0; /* number of elements with bit length too large */ + + for (bits = 0; bits <= MAX_BITS; bits++) s->bl_count[bits] = 0; + + /* In a first pass, compute the optimal bit lengths (which may + * overflow in the case of the bit length tree). + */ + tree[s->heap[s->heap_max]].Len = 0; /* root of the heap */ + + for (h = s->heap_max + 1; h < HEAP_SIZE; h++) { + n = s->heap[h]; + bits = tree[tree[n].Dad].Len + 1; + if (bits > max_length) bits = max_length, overflow++; + tree[n].Len = (ush)bits; + /* We overwrite tree[n].Dad which is no longer needed */ + + if (n > max_code) continue; /* not a leaf node */ + + s->bl_count[bits]++; + xbits = 0; + if (n >= base) xbits = extra[n - base]; + f = tree[n].Freq; + s->opt_len += (ulg)f * (unsigned)(bits + xbits); + if (stree) s->static_len += (ulg)f * (unsigned)(stree[n].Len + xbits); + } + if (overflow == 0) return; + + Tracev((stderr,"\nbit length overflow\n")); + /* This happens for example on obj2 and pic of the Calgary corpus */ + + /* Find the first bit length which could increase: */ + do { + bits = max_length - 1; + while (s->bl_count[bits] == 0) bits--; + s->bl_count[bits]--; /* move one leaf down the tree */ + s->bl_count[bits + 1] += 2; /* move one overflow item as its brother */ + s->bl_count[max_length]--; + /* The brother of the overflow item also moves one step up, + * but this does not affect bl_count[max_length] + */ + overflow -= 2; + } while (overflow > 0); + + /* Now recompute all bit lengths, scanning in increasing frequency. + * h is still equal to HEAP_SIZE. (It is simpler to reconstruct all + * lengths instead of fixing only the wrong ones. This idea is taken + * from 'ar' written by Haruhiko Okumura.) + */ + for (bits = max_length; bits != 0; bits--) { + n = s->bl_count[bits]; + while (n != 0) { + m = s->heap[--h]; + if (m > max_code) continue; + if ((unsigned) tree[m].Len != (unsigned) bits) { + Tracev((stderr,"code %d bits %d->%d\n", m, tree[m].Len, bits)); + s->opt_len += ((ulg)bits - tree[m].Len) * tree[m].Freq; + tree[m].Len = (ush)bits; + } + n--; + } + } +} + +#ifdef DUMP_BL_TREE +# include +#endif + +/* =========================================================================== + * Construct one Huffman tree and assigns the code bit strings and lengths. + * Update the total bit length for the current block. + * IN assertion: the field freq is set for all tree elements. + * OUT assertions: the fields len and code are set to the optimal bit length + * and corresponding code. The length opt_len is updated; static_len is + * also updated if stree is not null. The field max_code is set. + */ +local void build_tree(deflate_state *s, tree_desc *desc) { + ct_data *tree = desc->dyn_tree; + const ct_data *stree = desc->stat_desc->static_tree; + int elems = desc->stat_desc->elems; + int n, m; /* iterate over heap elements */ + int max_code = -1; /* largest code with non zero frequency */ + int node; /* new node being created */ + + /* Construct the initial heap, with least frequent element in + * heap[SMALLEST]. The sons of heap[n] are heap[2*n] and heap[2*n + 1]. + * heap[0] is not used. + */ + s->heap_len = 0, s->heap_max = HEAP_SIZE; + + for (n = 0; n < elems; n++) { + if (tree[n].Freq != 0) { + s->heap[++(s->heap_len)] = max_code = n; + s->depth[n] = 0; + } else { + tree[n].Len = 0; + } + } + + /* The pkzip format requires that at least one distance code exists, + * and that at least one bit should be sent even if there is only one + * possible code. So to avoid special checks later on we force at least + * two codes of non zero frequency. + */ + while (s->heap_len < 2) { + node = s->heap[++(s->heap_len)] = (max_code < 2 ? ++max_code : 0); + tree[node].Freq = 1; + s->depth[node] = 0; + s->opt_len--; if (stree) s->static_len -= stree[node].Len; + /* node is 0 or 1 so it does not have extra bits */ + } + desc->max_code = max_code; + + /* The elements heap[heap_len/2 + 1 .. heap_len] are leaves of the tree, + * establish sub-heaps of increasing lengths: + */ + for (n = s->heap_len/2; n >= 1; n--) pqdownheap(s, tree, n); + + /* Construct the Huffman tree by repeatedly combining the least two + * frequent nodes. + */ + node = elems; /* next internal node of the tree */ + do { + pqremove(s, tree, n); /* n = node of least frequency */ + m = s->heap[SMALLEST]; /* m = node of next least frequency */ + + s->heap[--(s->heap_max)] = n; /* keep the nodes sorted by frequency */ + s->heap[--(s->heap_max)] = m; + + /* Create a new node father of n and m */ + tree[node].Freq = tree[n].Freq + tree[m].Freq; + s->depth[node] = (uch)((s->depth[n] >= s->depth[m] ? + s->depth[n] : s->depth[m]) + 1); + tree[n].Dad = tree[m].Dad = (ush)node; +#ifdef DUMP_BL_TREE + if (tree == s->bl_tree) { + fprintf(stderr,"\nnode %d(%d), sons %d(%d) %d(%d)", + node, tree[node].Freq, n, tree[n].Freq, m, tree[m].Freq); + } +#endif + /* and insert the new node in the heap */ + s->heap[SMALLEST] = node++; + pqdownheap(s, tree, SMALLEST); + + } while (s->heap_len >= 2); + + s->heap[--(s->heap_max)] = s->heap[SMALLEST]; + + /* At this point, the fields freq and dad are set. We can now + * generate the bit lengths. + */ + gen_bitlen(s, (tree_desc *)desc); + + /* The field len is now set, we can generate the bit codes */ + gen_codes ((ct_data *)tree, max_code, s->bl_count); +} + +/* =========================================================================== + * Scan a literal or distance tree to determine the frequencies of the codes + * in the bit length tree. + */ +local void scan_tree(deflate_state *s, ct_data *tree, int max_code) { + int n; /* iterates over all tree elements */ + int prevlen = -1; /* last emitted length */ + int curlen; /* length of current code */ + int nextlen = tree[0].Len; /* length of next code */ + int count = 0; /* repeat count of the current code */ + int max_count = 7; /* max repeat count */ + int min_count = 4; /* min repeat count */ + + if (nextlen == 0) max_count = 138, min_count = 3; + tree[max_code + 1].Len = (ush)0xffff; /* guard */ + + for (n = 0; n <= max_code; n++) { + curlen = nextlen; nextlen = tree[n + 1].Len; + if (++count < max_count && curlen == nextlen) { + continue; + } else if (count < min_count) { + s->bl_tree[curlen].Freq += count; + } else if (curlen != 0) { + if (curlen != prevlen) s->bl_tree[curlen].Freq++; + s->bl_tree[REP_3_6].Freq++; + } else if (count <= 10) { + s->bl_tree[REPZ_3_10].Freq++; + } else { + s->bl_tree[REPZ_11_138].Freq++; + } + count = 0; prevlen = curlen; + if (nextlen == 0) { + max_count = 138, min_count = 3; + } else if (curlen == nextlen) { + max_count = 6, min_count = 3; + } else { + max_count = 7, min_count = 4; + } + } +} + +/* =========================================================================== + * Send a literal or distance tree in compressed form, using the codes in + * bl_tree. + */ +local void send_tree(deflate_state *s, ct_data *tree, int max_code) { + int n; /* iterates over all tree elements */ + int prevlen = -1; /* last emitted length */ + int curlen; /* length of current code */ + int nextlen = tree[0].Len; /* length of next code */ + int count = 0; /* repeat count of the current code */ + int max_count = 7; /* max repeat count */ + int min_count = 4; /* min repeat count */ + + /* tree[max_code + 1].Len = -1; */ /* guard already set */ + if (nextlen == 0) max_count = 138, min_count = 3; + + for (n = 0; n <= max_code; n++) { + curlen = nextlen; nextlen = tree[n + 1].Len; + if (++count < max_count && curlen == nextlen) { + continue; + } else if (count < min_count) { + do { send_code(s, curlen, s->bl_tree); } while (--count != 0); + + } else if (curlen != 0) { + if (curlen != prevlen) { + send_code(s, curlen, s->bl_tree); count--; + } + Assert(count >= 3 && count <= 6, " 3_6?"); + send_code(s, REP_3_6, s->bl_tree); send_bits(s, count - 3, 2); + + } else if (count <= 10) { + send_code(s, REPZ_3_10, s->bl_tree); send_bits(s, count - 3, 3); + + } else { + send_code(s, REPZ_11_138, s->bl_tree); send_bits(s, count - 11, 7); + } + count = 0; prevlen = curlen; + if (nextlen == 0) { + max_count = 138, min_count = 3; + } else if (curlen == nextlen) { + max_count = 6, min_count = 3; + } else { + max_count = 7, min_count = 4; + } + } +} + +/* =========================================================================== + * Construct the Huffman tree for the bit lengths and return the index in + * bl_order of the last bit length code to send. + */ +local int build_bl_tree(deflate_state *s) { + int max_blindex; /* index of last bit length code of non zero freq */ + + /* Determine the bit length frequencies for literal and distance trees */ + scan_tree(s, (ct_data *)s->dyn_ltree, s->l_desc.max_code); + scan_tree(s, (ct_data *)s->dyn_dtree, s->d_desc.max_code); + + /* Build the bit length tree: */ + build_tree(s, (tree_desc *)(&(s->bl_desc))); + /* opt_len now includes the length of the tree representations, except the + * lengths of the bit lengths codes and the 5 + 5 + 4 bits for the counts. + */ + + /* Determine the number of bit length codes to send. The pkzip format + * requires that at least 4 bit length codes be sent. (appnote.txt says + * 3 but the actual value used is 4.) + */ + for (max_blindex = BL_CODES-1; max_blindex >= 3; max_blindex--) { + if (s->bl_tree[bl_order[max_blindex]].Len != 0) break; + } + /* Update opt_len to include the bit length tree and counts */ + s->opt_len += 3*((ulg)max_blindex + 1) + 5 + 5 + 4; + Tracev((stderr, "\ndyn trees: dyn %ld, stat %ld", + s->opt_len, s->static_len)); + + return max_blindex; +} + +/* =========================================================================== + * Send the header for a block using dynamic Huffman trees: the counts, the + * lengths of the bit length codes, the literal tree and the distance tree. + * IN assertion: lcodes >= 257, dcodes >= 1, blcodes >= 4. + */ +local void send_all_trees(deflate_state *s, int lcodes, int dcodes, + int blcodes) { + int rank; /* index in bl_order */ + + Assert (lcodes >= 257 && dcodes >= 1 && blcodes >= 4, "not enough codes"); + Assert (lcodes <= L_CODES && dcodes <= D_CODES && blcodes <= BL_CODES, + "too many codes"); + Tracev((stderr, "\nbl counts: ")); + send_bits(s, lcodes - 257, 5); /* not +255 as stated in appnote.txt */ + send_bits(s, dcodes - 1, 5); + send_bits(s, blcodes - 4, 4); /* not -3 as stated in appnote.txt */ + for (rank = 0; rank < blcodes; rank++) { + Tracev((stderr, "\nbl code %2d ", bl_order[rank])); + send_bits(s, s->bl_tree[bl_order[rank]].Len, 3); + } + Tracev((stderr, "\nbl tree: sent %ld", s->bits_sent)); + + send_tree(s, (ct_data *)s->dyn_ltree, lcodes - 1); /* literal tree */ + Tracev((stderr, "\nlit tree: sent %ld", s->bits_sent)); + + send_tree(s, (ct_data *)s->dyn_dtree, dcodes - 1); /* distance tree */ + Tracev((stderr, "\ndist tree: sent %ld", s->bits_sent)); +} + +/* =========================================================================== + * Send a stored block + */ +void ZLIB_INTERNAL _tr_stored_block(deflate_state *s, charf *buf, + ulg stored_len, int last) { + send_bits(s, (STORED_BLOCK<<1) + last, 3); /* send block type */ + bi_windup(s); /* align on byte boundary */ + put_short(s, (ush)stored_len); + put_short(s, (ush)~stored_len); + if (stored_len) + zmemcpy(s->pending_buf + s->pending, (Bytef *)buf, stored_len); + s->pending += stored_len; +#ifdef ZLIB_DEBUG + s->compressed_len = (s->compressed_len + 3 + 7) & (ulg)~7L; + s->compressed_len += (stored_len + 4) << 3; + s->bits_sent += 2*16; + s->bits_sent += stored_len << 3; +#endif +} + +/* =========================================================================== + * Flush the bits in the bit buffer to pending output (leaves at most 7 bits) + */ +void ZLIB_INTERNAL _tr_flush_bits(deflate_state *s) { + bi_flush(s); +} + +/* =========================================================================== + * Send one empty static block to give enough lookahead for inflate. + * This takes 10 bits, of which 7 may remain in the bit buffer. + */ +void ZLIB_INTERNAL _tr_align(deflate_state *s) { + send_bits(s, STATIC_TREES<<1, 3); + send_code(s, END_BLOCK, static_ltree); +#ifdef ZLIB_DEBUG + s->compressed_len += 10L; /* 3 for block type, 7 for EOB */ +#endif + bi_flush(s); +} + +/* =========================================================================== + * Send the block data compressed using the given Huffman trees + */ +local void compress_block(deflate_state *s, const ct_data *ltree, + const ct_data *dtree) { + unsigned dist; /* distance of matched string */ + int lc; /* match length or unmatched char (if dist == 0) */ + unsigned sx = 0; /* running index in symbol buffers */ + unsigned code; /* the code to send */ + int extra; /* number of extra bits to send */ + + if (s->sym_next != 0) do { +#ifdef LIT_MEM + dist = s->d_buf[sx]; + lc = s->l_buf[sx++]; +#else + dist = s->sym_buf[sx++] & 0xff; + dist += (unsigned)(s->sym_buf[sx++] & 0xff) << 8; + lc = s->sym_buf[sx++]; +#endif + if (dist == 0) { + send_code(s, lc, ltree); /* send a literal byte */ + Tracecv(isgraph(lc), (stderr," '%c' ", lc)); + } else { + /* Here, lc is the match length - MIN_MATCH */ + code = _length_code[lc]; + send_code(s, code + LITERALS + 1, ltree); /* send length code */ + extra = extra_lbits[code]; + if (extra != 0) { + lc -= base_length[code]; + send_bits(s, lc, extra); /* send the extra length bits */ + } + dist--; /* dist is now the match distance - 1 */ + code = d_code(dist); + Assert (code < D_CODES, "bad d_code"); + + send_code(s, code, dtree); /* send the distance code */ + extra = extra_dbits[code]; + if (extra != 0) { + dist -= (unsigned)base_dist[code]; + send_bits(s, dist, extra); /* send the extra distance bits */ + } + } /* literal or match pair ? */ + + /* Check for no overlay of pending_buf on needed symbols */ +#ifdef LIT_MEM + Assert(s->pending < 2 * (s->lit_bufsize + sx), "pendingBuf overflow"); +#else + Assert(s->pending < s->lit_bufsize + sx, "pendingBuf overflow"); +#endif + + } while (sx < s->sym_next); + + send_code(s, END_BLOCK, ltree); +} + +/* =========================================================================== + * Check if the data type is TEXT or BINARY, using the following algorithm: + * - TEXT if the two conditions below are satisfied: + * a) There are no non-portable control characters belonging to the + * "block list" (0..6, 14..25, 28..31). + * b) There is at least one printable character belonging to the + * "allow list" (9 {TAB}, 10 {LF}, 13 {CR}, 32..255). + * - BINARY otherwise. + * - The following partially-portable control characters form a + * "gray list" that is ignored in this detection algorithm: + * (7 {BEL}, 8 {BS}, 11 {VT}, 12 {FF}, 26 {SUB}, 27 {ESC}). + * IN assertion: the fields Freq of dyn_ltree are set. + */ +local int detect_data_type(deflate_state *s) { + /* block_mask is the bit mask of block-listed bytes + * set bits 0..6, 14..25, and 28..31 + * 0xf3ffc07f = binary 11110011111111111100000001111111 + */ + unsigned long block_mask = 0xf3ffc07fUL; + int n; + + /* Check for non-textual ("block-listed") bytes. */ + for (n = 0; n <= 31; n++, block_mask >>= 1) + if ((block_mask & 1) && (s->dyn_ltree[n].Freq != 0)) + return Z_BINARY; + + /* Check for textual ("allow-listed") bytes. */ + if (s->dyn_ltree[9].Freq != 0 || s->dyn_ltree[10].Freq != 0 + || s->dyn_ltree[13].Freq != 0) + return Z_TEXT; + for (n = 32; n < LITERALS; n++) + if (s->dyn_ltree[n].Freq != 0) + return Z_TEXT; + + /* There are no "block-listed" or "allow-listed" bytes: + * this stream either is empty or has tolerated ("gray-listed") bytes only. + */ + return Z_BINARY; +} + +/* =========================================================================== + * Determine the best encoding for the current block: dynamic trees, static + * trees or store, and write out the encoded block. + */ +void ZLIB_INTERNAL _tr_flush_block(deflate_state *s, charf *buf, + ulg stored_len, int last) { + ulg opt_lenb, static_lenb; /* opt_len and static_len in bytes */ + int max_blindex = 0; /* index of last bit length code of non zero freq */ + + /* Build the Huffman trees unless a stored block is forced */ + if (s->level > 0) { + + /* Check if the file is binary or text */ + if (s->strm->data_type == Z_UNKNOWN) + s->strm->data_type = detect_data_type(s); + + /* Construct the literal and distance trees */ + build_tree(s, (tree_desc *)(&(s->l_desc))); + Tracev((stderr, "\nlit data: dyn %ld, stat %ld", s->opt_len, + s->static_len)); + + build_tree(s, (tree_desc *)(&(s->d_desc))); + Tracev((stderr, "\ndist data: dyn %ld, stat %ld", s->opt_len, + s->static_len)); + /* At this point, opt_len and static_len are the total bit lengths of + * the compressed block data, excluding the tree representations. + */ + + /* Build the bit length tree for the above two trees, and get the index + * in bl_order of the last bit length code to send. + */ + max_blindex = build_bl_tree(s); + + /* Determine the best encoding. Compute the block lengths in bytes. */ + opt_lenb = (s->opt_len + 3 + 7) >> 3; + static_lenb = (s->static_len + 3 + 7) >> 3; + + Tracev((stderr, "\nopt %lu(%lu) stat %lu(%lu) stored %lu lit %u ", + opt_lenb, s->opt_len, static_lenb, s->static_len, stored_len, + s->sym_next / 3)); + +#ifndef FORCE_STATIC + if (static_lenb <= opt_lenb || s->strategy == Z_FIXED) +#endif + opt_lenb = static_lenb; + + } else { + Assert(buf != (char*)0, "lost buf"); + opt_lenb = static_lenb = stored_len + 5; /* force a stored block */ + } + +#ifdef FORCE_STORED + if (buf != (char*)0) { /* force stored block */ +#else + if (stored_len + 4 <= opt_lenb && buf != (char*)0) { + /* 4: two words for the lengths */ +#endif + /* The test buf != NULL is only necessary if LIT_BUFSIZE > WSIZE. + * Otherwise we can't have processed more than WSIZE input bytes since + * the last block flush, because compression would have been + * successful. If LIT_BUFSIZE <= WSIZE, it is never too late to + * transform a block into a stored block. + */ + _tr_stored_block(s, buf, stored_len, last); + + } else if (static_lenb == opt_lenb) { + send_bits(s, (STATIC_TREES<<1) + last, 3); + compress_block(s, (const ct_data *)static_ltree, + (const ct_data *)static_dtree); +#ifdef ZLIB_DEBUG + s->compressed_len += 3 + s->static_len; +#endif + } else { + send_bits(s, (DYN_TREES<<1) + last, 3); + send_all_trees(s, s->l_desc.max_code + 1, s->d_desc.max_code + 1, + max_blindex + 1); + compress_block(s, (const ct_data *)s->dyn_ltree, + (const ct_data *)s->dyn_dtree); +#ifdef ZLIB_DEBUG + s->compressed_len += 3 + s->opt_len; +#endif + } + Assert (s->compressed_len == s->bits_sent, "bad compressed size"); + /* The above check is made mod 2^32, for files larger than 512 MB + * and uLong implemented on 32 bits. + */ + init_block(s); + + if (last) { + bi_windup(s); +#ifdef ZLIB_DEBUG + s->compressed_len += 7; /* align on byte boundary */ +#endif + } + Tracev((stderr,"\ncomprlen %lu(%lu) ", s->compressed_len >> 3, + s->compressed_len - 7*last)); +} + +/* =========================================================================== + * Save the match info and tally the frequency counts. Return true if + * the current block must be flushed. + */ +int ZLIB_INTERNAL _tr_tally(deflate_state *s, unsigned dist, unsigned lc) { +#ifdef LIT_MEM + s->d_buf[s->sym_next] = (ush)dist; + s->l_buf[s->sym_next++] = (uch)lc; +#else + s->sym_buf[s->sym_next++] = (uch)dist; + s->sym_buf[s->sym_next++] = (uch)(dist >> 8); + s->sym_buf[s->sym_next++] = (uch)lc; +#endif + if (dist == 0) { + /* lc is the unmatched char */ + s->dyn_ltree[lc].Freq++; + } else { + s->matches++; + /* Here, lc is the match length - MIN_MATCH */ + dist--; /* dist = match distance - 1 */ + Assert((ush)dist < (ush)MAX_DIST(s) && + (ush)lc <= (ush)(MAX_MATCH-MIN_MATCH) && + (ush)d_code(dist) < (ush)D_CODES, "_tr_tally: bad match"); + + s->dyn_ltree[_length_code[lc] + LITERALS + 1].Freq++; + s->dyn_dtree[d_code(dist)].Freq++; + } + return (s->sym_next == s->sym_end); +} diff --git a/thirdparty/zlib-1.3.1/trees.h b/thirdparty/zlib-1.3.1/trees.h new file mode 100644 index 0000000..d35639d --- /dev/null +++ b/thirdparty/zlib-1.3.1/trees.h @@ -0,0 +1,128 @@ +/* header created automatically with -DGEN_TREES_H */ + +local const ct_data static_ltree[L_CODES+2] = { +{{ 12},{ 8}}, {{140},{ 8}}, {{ 76},{ 8}}, {{204},{ 8}}, {{ 44},{ 8}}, +{{172},{ 8}}, {{108},{ 8}}, {{236},{ 8}}, {{ 28},{ 8}}, {{156},{ 8}}, +{{ 92},{ 8}}, {{220},{ 8}}, {{ 60},{ 8}}, {{188},{ 8}}, {{124},{ 8}}, +{{252},{ 8}}, {{ 2},{ 8}}, {{130},{ 8}}, {{ 66},{ 8}}, {{194},{ 8}}, +{{ 34},{ 8}}, {{162},{ 8}}, {{ 98},{ 8}}, {{226},{ 8}}, {{ 18},{ 8}}, +{{146},{ 8}}, {{ 82},{ 8}}, {{210},{ 8}}, {{ 50},{ 8}}, {{178},{ 8}}, +{{114},{ 8}}, {{242},{ 8}}, {{ 10},{ 8}}, {{138},{ 8}}, {{ 74},{ 8}}, +{{202},{ 8}}, {{ 42},{ 8}}, {{170},{ 8}}, {{106},{ 8}}, {{234},{ 8}}, +{{ 26},{ 8}}, {{154},{ 8}}, {{ 90},{ 8}}, {{218},{ 8}}, {{ 58},{ 8}}, +{{186},{ 8}}, {{122},{ 8}}, {{250},{ 8}}, {{ 6},{ 8}}, {{134},{ 8}}, +{{ 70},{ 8}}, {{198},{ 8}}, {{ 38},{ 8}}, {{166},{ 8}}, {{102},{ 8}}, +{{230},{ 8}}, {{ 22},{ 8}}, {{150},{ 8}}, {{ 86},{ 8}}, {{214},{ 8}}, +{{ 54},{ 8}}, {{182},{ 8}}, {{118},{ 8}}, {{246},{ 8}}, {{ 14},{ 8}}, +{{142},{ 8}}, {{ 78},{ 8}}, {{206},{ 8}}, {{ 46},{ 8}}, {{174},{ 8}}, +{{110},{ 8}}, {{238},{ 8}}, {{ 30},{ 8}}, {{158},{ 8}}, {{ 94},{ 8}}, +{{222},{ 8}}, {{ 62},{ 8}}, {{190},{ 8}}, {{126},{ 8}}, {{254},{ 8}}, +{{ 1},{ 8}}, {{129},{ 8}}, {{ 65},{ 8}}, {{193},{ 8}}, {{ 33},{ 8}}, +{{161},{ 8}}, {{ 97},{ 8}}, {{225},{ 8}}, {{ 17},{ 8}}, {{145},{ 8}}, +{{ 81},{ 8}}, {{209},{ 8}}, {{ 49},{ 8}}, {{177},{ 8}}, {{113},{ 8}}, +{{241},{ 8}}, {{ 9},{ 8}}, {{137},{ 8}}, {{ 73},{ 8}}, {{201},{ 8}}, +{{ 41},{ 8}}, {{169},{ 8}}, {{105},{ 8}}, {{233},{ 8}}, {{ 25},{ 8}}, +{{153},{ 8}}, {{ 89},{ 8}}, {{217},{ 8}}, {{ 57},{ 8}}, {{185},{ 8}}, +{{121},{ 8}}, {{249},{ 8}}, {{ 5},{ 8}}, {{133},{ 8}}, {{ 69},{ 8}}, +{{197},{ 8}}, {{ 37},{ 8}}, {{165},{ 8}}, {{101},{ 8}}, {{229},{ 8}}, +{{ 21},{ 8}}, {{149},{ 8}}, {{ 85},{ 8}}, {{213},{ 8}}, {{ 53},{ 8}}, +{{181},{ 8}}, {{117},{ 8}}, {{245},{ 8}}, {{ 13},{ 8}}, {{141},{ 8}}, +{{ 77},{ 8}}, {{205},{ 8}}, {{ 45},{ 8}}, {{173},{ 8}}, {{109},{ 8}}, +{{237},{ 8}}, {{ 29},{ 8}}, {{157},{ 8}}, {{ 93},{ 8}}, {{221},{ 8}}, +{{ 61},{ 8}}, {{189},{ 8}}, {{125},{ 8}}, {{253},{ 8}}, {{ 19},{ 9}}, +{{275},{ 9}}, {{147},{ 9}}, {{403},{ 9}}, {{ 83},{ 9}}, {{339},{ 9}}, +{{211},{ 9}}, {{467},{ 9}}, {{ 51},{ 9}}, {{307},{ 9}}, {{179},{ 9}}, +{{435},{ 9}}, {{115},{ 9}}, {{371},{ 9}}, {{243},{ 9}}, {{499},{ 9}}, +{{ 11},{ 9}}, {{267},{ 9}}, {{139},{ 9}}, {{395},{ 9}}, {{ 75},{ 9}}, +{{331},{ 9}}, {{203},{ 9}}, {{459},{ 9}}, {{ 43},{ 9}}, {{299},{ 9}}, +{{171},{ 9}}, {{427},{ 9}}, {{107},{ 9}}, {{363},{ 9}}, {{235},{ 9}}, +{{491},{ 9}}, {{ 27},{ 9}}, {{283},{ 9}}, {{155},{ 9}}, {{411},{ 9}}, +{{ 91},{ 9}}, {{347},{ 9}}, {{219},{ 9}}, {{475},{ 9}}, {{ 59},{ 9}}, +{{315},{ 9}}, {{187},{ 9}}, {{443},{ 9}}, {{123},{ 9}}, {{379},{ 9}}, +{{251},{ 9}}, {{507},{ 9}}, {{ 7},{ 9}}, {{263},{ 9}}, {{135},{ 9}}, +{{391},{ 9}}, {{ 71},{ 9}}, {{327},{ 9}}, {{199},{ 9}}, {{455},{ 9}}, +{{ 39},{ 9}}, {{295},{ 9}}, {{167},{ 9}}, {{423},{ 9}}, {{103},{ 9}}, +{{359},{ 9}}, {{231},{ 9}}, {{487},{ 9}}, {{ 23},{ 9}}, {{279},{ 9}}, +{{151},{ 9}}, {{407},{ 9}}, {{ 87},{ 9}}, {{343},{ 9}}, {{215},{ 9}}, +{{471},{ 9}}, {{ 55},{ 9}}, {{311},{ 9}}, {{183},{ 9}}, {{439},{ 9}}, +{{119},{ 9}}, {{375},{ 9}}, {{247},{ 9}}, {{503},{ 9}}, {{ 15},{ 9}}, +{{271},{ 9}}, {{143},{ 9}}, {{399},{ 9}}, {{ 79},{ 9}}, {{335},{ 9}}, +{{207},{ 9}}, {{463},{ 9}}, {{ 47},{ 9}}, {{303},{ 9}}, {{175},{ 9}}, +{{431},{ 9}}, {{111},{ 9}}, {{367},{ 9}}, {{239},{ 9}}, {{495},{ 9}}, +{{ 31},{ 9}}, {{287},{ 9}}, {{159},{ 9}}, {{415},{ 9}}, {{ 95},{ 9}}, +{{351},{ 9}}, {{223},{ 9}}, {{479},{ 9}}, {{ 63},{ 9}}, {{319},{ 9}}, +{{191},{ 9}}, {{447},{ 9}}, {{127},{ 9}}, {{383},{ 9}}, {{255},{ 9}}, +{{511},{ 9}}, {{ 0},{ 7}}, {{ 64},{ 7}}, {{ 32},{ 7}}, {{ 96},{ 7}}, +{{ 16},{ 7}}, {{ 80},{ 7}}, {{ 48},{ 7}}, {{112},{ 7}}, {{ 8},{ 7}}, +{{ 72},{ 7}}, {{ 40},{ 7}}, {{104},{ 7}}, {{ 24},{ 7}}, {{ 88},{ 7}}, +{{ 56},{ 7}}, {{120},{ 7}}, {{ 4},{ 7}}, {{ 68},{ 7}}, {{ 36},{ 7}}, +{{100},{ 7}}, {{ 20},{ 7}}, {{ 84},{ 7}}, {{ 52},{ 7}}, {{116},{ 7}}, +{{ 3},{ 8}}, {{131},{ 8}}, {{ 67},{ 8}}, {{195},{ 8}}, {{ 35},{ 8}}, +{{163},{ 8}}, {{ 99},{ 8}}, {{227},{ 8}} +}; + +local const ct_data static_dtree[D_CODES] = { +{{ 0},{ 5}}, {{16},{ 5}}, {{ 8},{ 5}}, {{24},{ 5}}, {{ 4},{ 5}}, +{{20},{ 5}}, {{12},{ 5}}, {{28},{ 5}}, {{ 2},{ 5}}, {{18},{ 5}}, +{{10},{ 5}}, {{26},{ 5}}, {{ 6},{ 5}}, {{22},{ 5}}, {{14},{ 5}}, +{{30},{ 5}}, {{ 1},{ 5}}, {{17},{ 5}}, {{ 9},{ 5}}, {{25},{ 5}}, +{{ 5},{ 5}}, {{21},{ 5}}, {{13},{ 5}}, {{29},{ 5}}, {{ 3},{ 5}}, +{{19},{ 5}}, {{11},{ 5}}, {{27},{ 5}}, {{ 7},{ 5}}, {{23},{ 5}} +}; + +const uch ZLIB_INTERNAL _dist_code[DIST_CODE_LEN] = { + 0, 1, 2, 3, 4, 4, 5, 5, 6, 6, 6, 6, 7, 7, 7, 7, 8, 8, 8, 8, + 8, 8, 8, 8, 9, 9, 9, 9, 9, 9, 9, 9, 10, 10, 10, 10, 10, 10, 10, 10, +10, 10, 10, 10, 10, 10, 10, 10, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, 11, +11, 11, 11, 11, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, +12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 12, 13, 13, 13, 13, +13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, 13, +13, 13, 13, 13, 13, 13, 13, 13, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, +14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, +14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, +14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 14, 15, 15, 15, 15, 15, 15, 15, 15, +15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, +15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, +15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 15, 0, 0, 16, 17, +18, 18, 19, 19, 20, 20, 20, 20, 21, 21, 21, 21, 22, 22, 22, 22, 22, 22, 22, 22, +23, 23, 23, 23, 23, 23, 23, 23, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, +24, 24, 24, 24, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, +26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, +26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 27, 27, 27, 27, 27, 27, 27, 27, +27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, +27, 27, 27, 27, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, +28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, +28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, 28, +28, 28, 28, 28, 28, 28, 28, 28, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, +29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, +29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, +29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29, 29 +}; + +const uch ZLIB_INTERNAL _length_code[MAX_MATCH-MIN_MATCH+1]= { + 0, 1, 2, 3, 4, 5, 6, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 12, 12, +13, 13, 13, 13, 14, 14, 14, 14, 15, 15, 15, 15, 16, 16, 16, 16, 16, 16, 16, 16, +17, 17, 17, 17, 17, 17, 17, 17, 18, 18, 18, 18, 18, 18, 18, 18, 19, 19, 19, 19, +19, 19, 19, 19, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, 20, +21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 21, 22, 22, 22, 22, +22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 23, 23, 23, 23, 23, 23, 23, 23, +23, 23, 23, 23, 23, 23, 23, 23, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, +24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, +25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, +25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 26, 26, 26, 26, 26, 26, 26, 26, +26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, 26, +26, 26, 26, 26, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, +27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 27, 28 +}; + +local const int base_length[LENGTH_CODES] = { +0, 1, 2, 3, 4, 5, 6, 7, 8, 10, 12, 14, 16, 20, 24, 28, 32, 40, 48, 56, +64, 80, 96, 112, 128, 160, 192, 224, 0 +}; + +local const int base_dist[D_CODES] = { + 0, 1, 2, 3, 4, 6, 8, 12, 16, 24, + 32, 48, 64, 96, 128, 192, 256, 384, 512, 768, + 1024, 1536, 2048, 3072, 4096, 6144, 8192, 12288, 16384, 24576 +}; + diff --git a/thirdparty/zlib-1.3.1/uncompr.c b/thirdparty/zlib-1.3.1/uncompr.c new file mode 100644 index 0000000..5e25666 --- /dev/null +++ b/thirdparty/zlib-1.3.1/uncompr.c @@ -0,0 +1,85 @@ +/* uncompr.c -- decompress a memory buffer + * Copyright (C) 1995-2003, 2010, 2014, 2016 Jean-loup Gailly, Mark Adler + * For conditions of distribution and use, see copyright notice in zlib.h + */ + +/* @(#) $Id$ */ + +#define ZLIB_INTERNAL +#include "zlib.h" + +/* =========================================================================== + Decompresses the source buffer into the destination buffer. *sourceLen is + the byte length of the source buffer. Upon entry, *destLen is the total size + of the destination buffer, which must be large enough to hold the entire + uncompressed data. (The size of the uncompressed data must have been saved + previously by the compressor and transmitted to the decompressor by some + mechanism outside the scope of this compression library.) Upon exit, + *destLen is the size of the decompressed data and *sourceLen is the number + of source bytes consumed. Upon return, source + *sourceLen points to the + first unused input byte. + + uncompress returns Z_OK if success, Z_MEM_ERROR if there was not enough + memory, Z_BUF_ERROR if there was not enough room in the output buffer, or + Z_DATA_ERROR if the input data was corrupted, including if the input data is + an incomplete zlib stream. +*/ +int ZEXPORT uncompress2(Bytef *dest, uLongf *destLen, const Bytef *source, + uLong *sourceLen) { + z_stream stream; + int err; + const uInt max = (uInt)-1; + uLong len, left; + Byte buf[1]; /* for detection of incomplete stream when *destLen == 0 */ + + len = *sourceLen; + if (*destLen) { + left = *destLen; + *destLen = 0; + } + else { + left = 1; + dest = buf; + } + + stream.next_in = (z_const Bytef *)source; + stream.avail_in = 0; + stream.zalloc = (alloc_func)0; + stream.zfree = (free_func)0; + stream.opaque = (voidpf)0; + + err = inflateInit(&stream); + if (err != Z_OK) return err; + + stream.next_out = dest; + stream.avail_out = 0; + + do { + if (stream.avail_out == 0) { + stream.avail_out = left > (uLong)max ? max : (uInt)left; + left -= stream.avail_out; + } + if (stream.avail_in == 0) { + stream.avail_in = len > (uLong)max ? max : (uInt)len; + len -= stream.avail_in; + } + err = inflate(&stream, Z_NO_FLUSH); + } while (err == Z_OK); + + *sourceLen -= len + stream.avail_in; + if (dest != buf) + *destLen = stream.total_out; + else if (stream.total_out && err == Z_BUF_ERROR) + left = 1; + + inflateEnd(&stream); + return err == Z_STREAM_END ? Z_OK : + err == Z_NEED_DICT ? Z_DATA_ERROR : + err == Z_BUF_ERROR && left + stream.avail_out ? Z_DATA_ERROR : + err; +} + +int ZEXPORT uncompress(Bytef *dest, uLongf *destLen, const Bytef *source, + uLong sourceLen) { + return uncompress2(dest, destLen, source, &sourceLen); +} diff --git a/thirdparty/zlib-1.3.1/watcom/watcom_f.mak b/thirdparty/zlib-1.3.1/watcom/watcom_f.mak new file mode 100644 index 0000000..37f4d74 --- /dev/null +++ b/thirdparty/zlib-1.3.1/watcom/watcom_f.mak @@ -0,0 +1,43 @@ +# Makefile for zlib +# OpenWatcom flat model +# Last updated: 28-Dec-2005 + +# To use, do "wmake -f watcom_f.mak" + +C_SOURCE = adler32.c compress.c crc32.c deflate.c & + gzclose.c gzlib.c gzread.c gzwrite.c & + infback.c inffast.c inflate.c inftrees.c & + trees.c uncompr.c zutil.c + +OBJS = adler32.obj compress.obj crc32.obj deflate.obj & + gzclose.obj gzlib.obj gzread.obj gzwrite.obj & + infback.obj inffast.obj inflate.obj inftrees.obj & + trees.obj uncompr.obj zutil.obj + +CC = wcc386 +LINKER = wcl386 +CFLAGS = -zq -mf -3r -fp3 -s -bt=dos -oilrtfm -fr=nul -wx +ZLIB_LIB = zlib_f.lib + +.C.OBJ: + $(CC) $(CFLAGS) $[@ + +all: $(ZLIB_LIB) example.exe minigzip.exe + +$(ZLIB_LIB): $(OBJS) + wlib -b -c $(ZLIB_LIB) -+adler32.obj -+compress.obj -+crc32.obj + wlib -b -c $(ZLIB_LIB) -+gzclose.obj -+gzlib.obj -+gzread.obj -+gzwrite.obj + wlib -b -c $(ZLIB_LIB) -+deflate.obj -+infback.obj + wlib -b -c $(ZLIB_LIB) -+inffast.obj -+inflate.obj -+inftrees.obj + wlib -b -c $(ZLIB_LIB) -+trees.obj -+uncompr.obj -+zutil.obj + +example.exe: $(ZLIB_LIB) example.obj + $(LINKER) -ldos32a -fe=example.exe example.obj $(ZLIB_LIB) + +minigzip.exe: $(ZLIB_LIB) minigzip.obj + $(LINKER) -ldos32a -fe=minigzip.exe minigzip.obj $(ZLIB_LIB) + +clean: .SYMBOLIC + del *.obj + del $(ZLIB_LIB) + @echo Cleaning done diff --git a/thirdparty/zlib-1.3.1/watcom/watcom_l.mak b/thirdparty/zlib-1.3.1/watcom/watcom_l.mak new file mode 100644 index 0000000..193eed7 --- /dev/null +++ b/thirdparty/zlib-1.3.1/watcom/watcom_l.mak @@ -0,0 +1,43 @@ +# Makefile for zlib +# OpenWatcom large model +# Last updated: 28-Dec-2005 + +# To use, do "wmake -f watcom_l.mak" + +C_SOURCE = adler32.c compress.c crc32.c deflate.c & + gzclose.c gzlib.c gzread.c gzwrite.c & + infback.c inffast.c inflate.c inftrees.c & + trees.c uncompr.c zutil.c + +OBJS = adler32.obj compress.obj crc32.obj deflate.obj & + gzclose.obj gzlib.obj gzread.obj gzwrite.obj & + infback.obj inffast.obj inflate.obj inftrees.obj & + trees.obj uncompr.obj zutil.obj + +CC = wcc +LINKER = wcl +CFLAGS = -zq -ml -s -bt=dos -oilrtfm -fr=nul -wx +ZLIB_LIB = zlib_l.lib + +.C.OBJ: + $(CC) $(CFLAGS) $[@ + +all: $(ZLIB_LIB) example.exe minigzip.exe + +$(ZLIB_LIB): $(OBJS) + wlib -b -c $(ZLIB_LIB) -+adler32.obj -+compress.obj -+crc32.obj + wlib -b -c $(ZLIB_LIB) -+gzclose.obj -+gzlib.obj -+gzread.obj -+gzwrite.obj + wlib -b -c $(ZLIB_LIB) -+deflate.obj -+infback.obj + wlib -b -c $(ZLIB_LIB) -+inffast.obj -+inflate.obj -+inftrees.obj + wlib -b -c $(ZLIB_LIB) -+trees.obj -+uncompr.obj -+zutil.obj + +example.exe: $(ZLIB_LIB) example.obj + $(LINKER) -fe=example.exe example.obj $(ZLIB_LIB) + +minigzip.exe: $(ZLIB_LIB) minigzip.obj + $(LINKER) -fe=minigzip.exe minigzip.obj $(ZLIB_LIB) + +clean: .SYMBOLIC + del *.obj + del $(ZLIB_LIB) + @echo Cleaning done diff --git a/thirdparty/zlib-1.3.1/zconf.h.cmakein b/thirdparty/zlib-1.3.1/zconf.h.cmakein new file mode 100644 index 0000000..0abe3bc --- /dev/null +++ b/thirdparty/zlib-1.3.1/zconf.h.cmakein @@ -0,0 +1,545 @@ +/* zconf.h -- configuration of the zlib compression library + * Copyright (C) 1995-2024 Jean-loup Gailly, Mark Adler + * For conditions of distribution and use, see copyright notice in zlib.h + */ + +/* @(#) $Id$ */ + +#ifndef ZCONF_H +#define ZCONF_H +#cmakedefine Z_PREFIX +#cmakedefine Z_HAVE_UNISTD_H + +/* + * If you *really* need a unique prefix for all types and library functions, + * compile with -DZ_PREFIX. The "standard" zlib should be compiled without it. + * Even better than compiling with -DZ_PREFIX would be to use configure to set + * this permanently in zconf.h using "./configure --zprefix". + */ +#ifdef Z_PREFIX /* may be set to #if 1 by ./configure */ +# define Z_PREFIX_SET + +/* all linked symbols and init macros */ +# define _dist_code z__dist_code +# define _length_code z__length_code +# define _tr_align z__tr_align +# define _tr_flush_bits z__tr_flush_bits +# define _tr_flush_block z__tr_flush_block +# define _tr_init z__tr_init +# define _tr_stored_block z__tr_stored_block +# define _tr_tally z__tr_tally +# define adler32 z_adler32 +# define adler32_combine z_adler32_combine +# define adler32_combine64 z_adler32_combine64 +# define adler32_z z_adler32_z +# ifndef Z_SOLO +# define compress z_compress +# define compress2 z_compress2 +# define compressBound z_compressBound +# endif +# define crc32 z_crc32 +# define crc32_combine z_crc32_combine +# define crc32_combine64 z_crc32_combine64 +# define crc32_combine_gen z_crc32_combine_gen +# define crc32_combine_gen64 z_crc32_combine_gen64 +# define crc32_combine_op z_crc32_combine_op +# define crc32_z z_crc32_z +# define deflate z_deflate +# define deflateBound z_deflateBound +# define deflateCopy z_deflateCopy +# define deflateEnd z_deflateEnd +# define deflateGetDictionary z_deflateGetDictionary +# define deflateInit z_deflateInit +# define deflateInit2 z_deflateInit2 +# define deflateInit2_ z_deflateInit2_ +# define deflateInit_ z_deflateInit_ +# define deflateParams z_deflateParams +# define deflatePending z_deflatePending +# define deflatePrime z_deflatePrime +# define deflateReset z_deflateReset +# define deflateResetKeep z_deflateResetKeep +# define deflateSetDictionary z_deflateSetDictionary +# define deflateSetHeader z_deflateSetHeader +# define deflateTune z_deflateTune +# define deflate_copyright z_deflate_copyright +# define get_crc_table z_get_crc_table +# ifndef Z_SOLO +# define gz_error z_gz_error +# define gz_intmax z_gz_intmax +# define gz_strwinerror z_gz_strwinerror +# define gzbuffer z_gzbuffer +# define gzclearerr z_gzclearerr +# define gzclose z_gzclose +# define gzclose_r z_gzclose_r +# define gzclose_w z_gzclose_w +# define gzdirect z_gzdirect +# define gzdopen z_gzdopen +# define gzeof z_gzeof +# define gzerror z_gzerror +# define gzflush z_gzflush +# define gzfread z_gzfread +# define gzfwrite z_gzfwrite +# define gzgetc z_gzgetc +# define gzgetc_ z_gzgetc_ +# define gzgets z_gzgets +# define gzoffset z_gzoffset +# define gzoffset64 z_gzoffset64 +# define gzopen z_gzopen +# define gzopen64 z_gzopen64 +# ifdef _WIN32 +# define gzopen_w z_gzopen_w +# endif +# define gzprintf z_gzprintf +# define gzputc z_gzputc +# define gzputs z_gzputs +# define gzread z_gzread +# define gzrewind z_gzrewind +# define gzseek z_gzseek +# define gzseek64 z_gzseek64 +# define gzsetparams z_gzsetparams +# define gztell z_gztell +# define gztell64 z_gztell64 +# define gzungetc z_gzungetc +# define gzvprintf z_gzvprintf +# define gzwrite z_gzwrite +# endif +# define inflate z_inflate +# define inflateBack z_inflateBack +# define inflateBackEnd z_inflateBackEnd +# define inflateBackInit z_inflateBackInit +# define inflateBackInit_ z_inflateBackInit_ +# define inflateCodesUsed z_inflateCodesUsed +# define inflateCopy z_inflateCopy +# define inflateEnd z_inflateEnd +# define inflateGetDictionary z_inflateGetDictionary +# define inflateGetHeader z_inflateGetHeader +# define inflateInit z_inflateInit +# define inflateInit2 z_inflateInit2 +# define inflateInit2_ z_inflateInit2_ +# define inflateInit_ z_inflateInit_ +# define inflateMark z_inflateMark +# define inflatePrime z_inflatePrime +# define inflateReset z_inflateReset +# define inflateReset2 z_inflateReset2 +# define inflateResetKeep z_inflateResetKeep +# define inflateSetDictionary z_inflateSetDictionary +# define inflateSync z_inflateSync +# define inflateSyncPoint z_inflateSyncPoint +# define inflateUndermine z_inflateUndermine +# define inflateValidate z_inflateValidate +# define inflate_copyright z_inflate_copyright +# define inflate_fast z_inflate_fast +# define inflate_table z_inflate_table +# ifndef Z_SOLO +# define uncompress z_uncompress +# define uncompress2 z_uncompress2 +# endif +# define zError z_zError +# ifndef Z_SOLO +# define zcalloc z_zcalloc +# define zcfree z_zcfree +# endif +# define zlibCompileFlags z_zlibCompileFlags +# define zlibVersion z_zlibVersion + +/* all zlib typedefs in zlib.h and zconf.h */ +# define Byte z_Byte +# define Bytef z_Bytef +# define alloc_func z_alloc_func +# define charf z_charf +# define free_func z_free_func +# ifndef Z_SOLO +# define gzFile z_gzFile +# endif +# define gz_header z_gz_header +# define gz_headerp z_gz_headerp +# define in_func z_in_func +# define intf z_intf +# define out_func z_out_func +# define uInt z_uInt +# define uIntf z_uIntf +# define uLong z_uLong +# define uLongf z_uLongf +# define voidp z_voidp +# define voidpc z_voidpc +# define voidpf z_voidpf + +/* all zlib structs in zlib.h and zconf.h */ +# define gz_header_s z_gz_header_s +# define internal_state z_internal_state + +#endif + +#if defined(__MSDOS__) && !defined(MSDOS) +# define MSDOS +#endif +#if (defined(OS_2) || defined(__OS2__)) && !defined(OS2) +# define OS2 +#endif +#if defined(_WINDOWS) && !defined(WINDOWS) +# define WINDOWS +#endif +#if defined(_WIN32) || defined(_WIN32_WCE) || defined(__WIN32__) +# ifndef WIN32 +# define WIN32 +# endif +#endif +#if (defined(MSDOS) || defined(OS2) || defined(WINDOWS)) && !defined(WIN32) +# if !defined(__GNUC__) && !defined(__FLAT__) && !defined(__386__) +# ifndef SYS16BIT +# define SYS16BIT +# endif +# endif +#endif + +/* + * Compile with -DMAXSEG_64K if the alloc function cannot allocate more + * than 64k bytes at a time (needed on systems with 16-bit int). + */ +#ifdef SYS16BIT +# define MAXSEG_64K +#endif +#ifdef MSDOS +# define UNALIGNED_OK +#endif + +#ifdef __STDC_VERSION__ +# ifndef STDC +# define STDC +# endif +# if __STDC_VERSION__ >= 199901L +# ifndef STDC99 +# define STDC99 +# endif +# endif +#endif +#if !defined(STDC) && (defined(__STDC__) || defined(__cplusplus)) +# define STDC +#endif +#if !defined(STDC) && (defined(__GNUC__) || defined(__BORLANDC__)) +# define STDC +#endif +#if !defined(STDC) && (defined(MSDOS) || defined(WINDOWS) || defined(WIN32)) +# define STDC +#endif +#if !defined(STDC) && (defined(OS2) || defined(__HOS_AIX__)) +# define STDC +#endif + +#if defined(__OS400__) && !defined(STDC) /* iSeries (formerly AS/400). */ +# define STDC +#endif + +#ifndef STDC +# ifndef const /* cannot use !defined(STDC) && !defined(const) on Mac */ +# define const /* note: need a more gentle solution here */ +# endif +#endif + +#if defined(ZLIB_CONST) && !defined(z_const) +# define z_const const +#else +# define z_const +#endif + +#ifdef Z_SOLO +# ifdef _WIN64 + typedef unsigned long long z_size_t; +# else + typedef unsigned long z_size_t; +# endif +#else +# define z_longlong long long +# if defined(NO_SIZE_T) + typedef unsigned NO_SIZE_T z_size_t; +# elif defined(STDC) +# include + typedef size_t z_size_t; +# else + typedef unsigned long z_size_t; +# endif +# undef z_longlong +#endif + +/* Maximum value for memLevel in deflateInit2 */ +#ifndef MAX_MEM_LEVEL +# ifdef MAXSEG_64K +# define MAX_MEM_LEVEL 8 +# else +# define MAX_MEM_LEVEL 9 +# endif +#endif + +/* Maximum value for windowBits in deflateInit2 and inflateInit2. + * WARNING: reducing MAX_WBITS makes minigzip unable to extract .gz files + * created by gzip. (Files created by minigzip can still be extracted by + * gzip.) + */ +#ifndef MAX_WBITS +# define MAX_WBITS 15 /* 32K LZ77 window */ +#endif + +/* The memory requirements for deflate are (in bytes): + (1 << (windowBits+2)) + (1 << (memLevel+9)) + that is: 128K for windowBits=15 + 128K for memLevel = 8 (default values) + plus a few kilobytes for small objects. For example, if you want to reduce + the default memory requirements from 256K to 128K, compile with + make CFLAGS="-O -DMAX_WBITS=14 -DMAX_MEM_LEVEL=7" + Of course this will generally degrade compression (there's no free lunch). + + The memory requirements for inflate are (in bytes) 1 << windowBits + that is, 32K for windowBits=15 (default value) plus about 7 kilobytes + for small objects. +*/ + + /* Type declarations */ + +#ifndef OF /* function prototypes */ +# ifdef STDC +# define OF(args) args +# else +# define OF(args) () +# endif +#endif + +/* The following definitions for FAR are needed only for MSDOS mixed + * model programming (small or medium model with some far allocations). + * This was tested only with MSC; for other MSDOS compilers you may have + * to define NO_MEMCPY in zutil.h. If you don't need the mixed model, + * just define FAR to be empty. + */ +#ifdef SYS16BIT +# if defined(M_I86SM) || defined(M_I86MM) + /* MSC small or medium model */ +# define SMALL_MEDIUM +# ifdef _MSC_VER +# define FAR _far +# else +# define FAR far +# endif +# endif +# if (defined(__SMALL__) || defined(__MEDIUM__)) + /* Turbo C small or medium model */ +# define SMALL_MEDIUM +# ifdef __BORLANDC__ +# define FAR _far +# else +# define FAR far +# endif +# endif +#endif + +#if defined(WINDOWS) || defined(WIN32) + /* If building or using zlib as a DLL, define ZLIB_DLL. + * This is not mandatory, but it offers a little performance increase. + */ +# ifdef ZLIB_DLL +# if defined(WIN32) && (!defined(__BORLANDC__) || (__BORLANDC__ >= 0x500)) +# ifdef ZLIB_INTERNAL +# define ZEXTERN extern __declspec(dllexport) +# else +# define ZEXTERN extern __declspec(dllimport) +# endif +# endif +# endif /* ZLIB_DLL */ + /* If building or using zlib with the WINAPI/WINAPIV calling convention, + * define ZLIB_WINAPI. + * Caution: the standard ZLIB1.DLL is NOT compiled using ZLIB_WINAPI. + */ +# ifdef ZLIB_WINAPI +# ifdef FAR +# undef FAR +# endif +# ifndef WIN32_LEAN_AND_MEAN +# define WIN32_LEAN_AND_MEAN +# endif +# include + /* No need for _export, use ZLIB.DEF instead. */ + /* For complete Windows compatibility, use WINAPI, not __stdcall. */ +# define ZEXPORT WINAPI +# ifdef WIN32 +# define ZEXPORTVA WINAPIV +# else +# define ZEXPORTVA FAR CDECL +# endif +# endif +#endif + +#if defined (__BEOS__) +# ifdef ZLIB_DLL +# ifdef ZLIB_INTERNAL +# define ZEXPORT __declspec(dllexport) +# define ZEXPORTVA __declspec(dllexport) +# else +# define ZEXPORT __declspec(dllimport) +# define ZEXPORTVA __declspec(dllimport) +# endif +# endif +#endif + +#ifndef ZEXTERN +# define ZEXTERN extern +#endif +#ifndef ZEXPORT +# define ZEXPORT +#endif +#ifndef ZEXPORTVA +# define ZEXPORTVA +#endif + +#ifndef FAR +# define FAR +#endif + +#if !defined(__MACTYPES__) +typedef unsigned char Byte; /* 8 bits */ +#endif +typedef unsigned int uInt; /* 16 bits or more */ +typedef unsigned long uLong; /* 32 bits or more */ + +#ifdef SMALL_MEDIUM + /* Borland C/C++ and some old MSC versions ignore FAR inside typedef */ +# define Bytef Byte FAR +#else + typedef Byte FAR Bytef; +#endif +typedef char FAR charf; +typedef int FAR intf; +typedef uInt FAR uIntf; +typedef uLong FAR uLongf; + +#ifdef STDC + typedef void const *voidpc; + typedef void FAR *voidpf; + typedef void *voidp; +#else + typedef Byte const *voidpc; + typedef Byte FAR *voidpf; + typedef Byte *voidp; +#endif + +#if !defined(Z_U4) && !defined(Z_SOLO) && defined(STDC) +# include +# if (UINT_MAX == 0xffffffffUL) +# define Z_U4 unsigned +# elif (ULONG_MAX == 0xffffffffUL) +# define Z_U4 unsigned long +# elif (USHRT_MAX == 0xffffffffUL) +# define Z_U4 unsigned short +# endif +#endif + +#ifdef Z_U4 + typedef Z_U4 z_crc_t; +#else + typedef unsigned long z_crc_t; +#endif + +#ifdef HAVE_UNISTD_H /* may be set to #if 1 by ./configure */ +# define Z_HAVE_UNISTD_H +#endif + +#ifdef HAVE_STDARG_H /* may be set to #if 1 by ./configure */ +# define Z_HAVE_STDARG_H +#endif + +#ifdef STDC +# ifndef Z_SOLO +# include /* for off_t */ +# endif +#endif + +#if defined(STDC) || defined(Z_HAVE_STDARG_H) +# ifndef Z_SOLO +# include /* for va_list */ +# endif +#endif + +#ifdef _WIN32 +# ifndef Z_SOLO +# include /* for wchar_t */ +# endif +#endif + +/* a little trick to accommodate both "#define _LARGEFILE64_SOURCE" and + * "#define _LARGEFILE64_SOURCE 1" as requesting 64-bit operations, (even + * though the former does not conform to the LFS document), but considering + * both "#undef _LARGEFILE64_SOURCE" and "#define _LARGEFILE64_SOURCE 0" as + * equivalently requesting no 64-bit operations + */ +#if defined(_LARGEFILE64_SOURCE) && -_LARGEFILE64_SOURCE - -1 == 1 +# undef _LARGEFILE64_SOURCE +#endif + +#ifndef Z_HAVE_UNISTD_H +# ifdef __WATCOMC__ +# define Z_HAVE_UNISTD_H +# endif +#endif +#ifndef Z_HAVE_UNISTD_H +# if defined(_LARGEFILE64_SOURCE) && !defined(_WIN32) +# define Z_HAVE_UNISTD_H +# endif +#endif +#ifndef Z_SOLO +# if defined(Z_HAVE_UNISTD_H) +# include /* for SEEK_*, off_t, and _LFS64_LARGEFILE */ +# ifdef VMS +# include /* for off_t */ +# endif +# ifndef z_off_t +# define z_off_t off_t +# endif +# endif +#endif + +#if defined(_LFS64_LARGEFILE) && _LFS64_LARGEFILE-0 +# define Z_LFS64 +#endif + +#if defined(_LARGEFILE64_SOURCE) && defined(Z_LFS64) +# define Z_LARGE64 +#endif + +#if defined(_FILE_OFFSET_BITS) && _FILE_OFFSET_BITS-0 == 64 && defined(Z_LFS64) +# define Z_WANT64 +#endif + +#if !defined(SEEK_SET) && !defined(Z_SOLO) +# define SEEK_SET 0 /* Seek from beginning of file. */ +# define SEEK_CUR 1 /* Seek from current position. */ +# define SEEK_END 2 /* Set file pointer to EOF plus "offset" */ +#endif + +#ifndef z_off_t +# define z_off_t long +#endif + +#if !defined(_WIN32) && defined(Z_LARGE64) +# define z_off64_t off64_t +#else +# if defined(_WIN32) && !defined(__GNUC__) +# define z_off64_t __int64 +# else +# define z_off64_t z_off_t +# endif +#endif + +/* MVS linker does not support external names larger than 8 bytes */ +#if defined(__MVS__) + #pragma map(deflateInit_,"DEIN") + #pragma map(deflateInit2_,"DEIN2") + #pragma map(deflateEnd,"DEEND") + #pragma map(deflateBound,"DEBND") + #pragma map(inflateInit_,"ININ") + #pragma map(inflateInit2_,"ININ2") + #pragma map(inflateEnd,"INEND") + #pragma map(inflateSync,"INSY") + #pragma map(inflateSetDictionary,"INSEDI") + #pragma map(compressBound,"CMBND") + #pragma map(inflate_table,"INTABL") + #pragma map(inflate_fast,"INFA") + #pragma map(inflate_copyright,"INCOPY") +#endif + +#endif /* ZCONF_H */ diff --git a/thirdparty/zlib-1.3.1/zconf.h.in b/thirdparty/zlib-1.3.1/zconf.h.in new file mode 100644 index 0000000..62adc8d --- /dev/null +++ b/thirdparty/zlib-1.3.1/zconf.h.in @@ -0,0 +1,543 @@ +/* zconf.h -- configuration of the zlib compression library + * Copyright (C) 1995-2024 Jean-loup Gailly, Mark Adler + * For conditions of distribution and use, see copyright notice in zlib.h + */ + +/* @(#) $Id$ */ + +#ifndef ZCONF_H +#define ZCONF_H + +/* + * If you *really* need a unique prefix for all types and library functions, + * compile with -DZ_PREFIX. The "standard" zlib should be compiled without it. + * Even better than compiling with -DZ_PREFIX would be to use configure to set + * this permanently in zconf.h using "./configure --zprefix". + */ +#ifdef Z_PREFIX /* may be set to #if 1 by ./configure */ +# define Z_PREFIX_SET + +/* all linked symbols and init macros */ +# define _dist_code z__dist_code +# define _length_code z__length_code +# define _tr_align z__tr_align +# define _tr_flush_bits z__tr_flush_bits +# define _tr_flush_block z__tr_flush_block +# define _tr_init z__tr_init +# define _tr_stored_block z__tr_stored_block +# define _tr_tally z__tr_tally +# define adler32 z_adler32 +# define adler32_combine z_adler32_combine +# define adler32_combine64 z_adler32_combine64 +# define adler32_z z_adler32_z +# ifndef Z_SOLO +# define compress z_compress +# define compress2 z_compress2 +# define compressBound z_compressBound +# endif +# define crc32 z_crc32 +# define crc32_combine z_crc32_combine +# define crc32_combine64 z_crc32_combine64 +# define crc32_combine_gen z_crc32_combine_gen +# define crc32_combine_gen64 z_crc32_combine_gen64 +# define crc32_combine_op z_crc32_combine_op +# define crc32_z z_crc32_z +# define deflate z_deflate +# define deflateBound z_deflateBound +# define deflateCopy z_deflateCopy +# define deflateEnd z_deflateEnd +# define deflateGetDictionary z_deflateGetDictionary +# define deflateInit z_deflateInit +# define deflateInit2 z_deflateInit2 +# define deflateInit2_ z_deflateInit2_ +# define deflateInit_ z_deflateInit_ +# define deflateParams z_deflateParams +# define deflatePending z_deflatePending +# define deflatePrime z_deflatePrime +# define deflateReset z_deflateReset +# define deflateResetKeep z_deflateResetKeep +# define deflateSetDictionary z_deflateSetDictionary +# define deflateSetHeader z_deflateSetHeader +# define deflateTune z_deflateTune +# define deflate_copyright z_deflate_copyright +# define get_crc_table z_get_crc_table +# ifndef Z_SOLO +# define gz_error z_gz_error +# define gz_intmax z_gz_intmax +# define gz_strwinerror z_gz_strwinerror +# define gzbuffer z_gzbuffer +# define gzclearerr z_gzclearerr +# define gzclose z_gzclose +# define gzclose_r z_gzclose_r +# define gzclose_w z_gzclose_w +# define gzdirect z_gzdirect +# define gzdopen z_gzdopen +# define gzeof z_gzeof +# define gzerror z_gzerror +# define gzflush z_gzflush +# define gzfread z_gzfread +# define gzfwrite z_gzfwrite +# define gzgetc z_gzgetc +# define gzgetc_ z_gzgetc_ +# define gzgets z_gzgets +# define gzoffset z_gzoffset +# define gzoffset64 z_gzoffset64 +# define gzopen z_gzopen +# define gzopen64 z_gzopen64 +# ifdef _WIN32 +# define gzopen_w z_gzopen_w +# endif +# define gzprintf z_gzprintf +# define gzputc z_gzputc +# define gzputs z_gzputs +# define gzread z_gzread +# define gzrewind z_gzrewind +# define gzseek z_gzseek +# define gzseek64 z_gzseek64 +# define gzsetparams z_gzsetparams +# define gztell z_gztell +# define gztell64 z_gztell64 +# define gzungetc z_gzungetc +# define gzvprintf z_gzvprintf +# define gzwrite z_gzwrite +# endif +# define inflate z_inflate +# define inflateBack z_inflateBack +# define inflateBackEnd z_inflateBackEnd +# define inflateBackInit z_inflateBackInit +# define inflateBackInit_ z_inflateBackInit_ +# define inflateCodesUsed z_inflateCodesUsed +# define inflateCopy z_inflateCopy +# define inflateEnd z_inflateEnd +# define inflateGetDictionary z_inflateGetDictionary +# define inflateGetHeader z_inflateGetHeader +# define inflateInit z_inflateInit +# define inflateInit2 z_inflateInit2 +# define inflateInit2_ z_inflateInit2_ +# define inflateInit_ z_inflateInit_ +# define inflateMark z_inflateMark +# define inflatePrime z_inflatePrime +# define inflateReset z_inflateReset +# define inflateReset2 z_inflateReset2 +# define inflateResetKeep z_inflateResetKeep +# define inflateSetDictionary z_inflateSetDictionary +# define inflateSync z_inflateSync +# define inflateSyncPoint z_inflateSyncPoint +# define inflateUndermine z_inflateUndermine +# define inflateValidate z_inflateValidate +# define inflate_copyright z_inflate_copyright +# define inflate_fast z_inflate_fast +# define inflate_table z_inflate_table +# ifndef Z_SOLO +# define uncompress z_uncompress +# define uncompress2 z_uncompress2 +# endif +# define zError z_zError +# ifndef Z_SOLO +# define zcalloc z_zcalloc +# define zcfree z_zcfree +# endif +# define zlibCompileFlags z_zlibCompileFlags +# define zlibVersion z_zlibVersion + +/* all zlib typedefs in zlib.h and zconf.h */ +# define Byte z_Byte +# define Bytef z_Bytef +# define alloc_func z_alloc_func +# define charf z_charf +# define free_func z_free_func +# ifndef Z_SOLO +# define gzFile z_gzFile +# endif +# define gz_header z_gz_header +# define gz_headerp z_gz_headerp +# define in_func z_in_func +# define intf z_intf +# define out_func z_out_func +# define uInt z_uInt +# define uIntf z_uIntf +# define uLong z_uLong +# define uLongf z_uLongf +# define voidp z_voidp +# define voidpc z_voidpc +# define voidpf z_voidpf + +/* all zlib structs in zlib.h and zconf.h */ +# define gz_header_s z_gz_header_s +# define internal_state z_internal_state + +#endif + +#if defined(__MSDOS__) && !defined(MSDOS) +# define MSDOS +#endif +#if (defined(OS_2) || defined(__OS2__)) && !defined(OS2) +# define OS2 +#endif +#if defined(_WINDOWS) && !defined(WINDOWS) +# define WINDOWS +#endif +#if defined(_WIN32) || defined(_WIN32_WCE) || defined(__WIN32__) +# ifndef WIN32 +# define WIN32 +# endif +#endif +#if (defined(MSDOS) || defined(OS2) || defined(WINDOWS)) && !defined(WIN32) +# if !defined(__GNUC__) && !defined(__FLAT__) && !defined(__386__) +# ifndef SYS16BIT +# define SYS16BIT +# endif +# endif +#endif + +/* + * Compile with -DMAXSEG_64K if the alloc function cannot allocate more + * than 64k bytes at a time (needed on systems with 16-bit int). + */ +#ifdef SYS16BIT +# define MAXSEG_64K +#endif +#ifdef MSDOS +# define UNALIGNED_OK +#endif + +#ifdef __STDC_VERSION__ +# ifndef STDC +# define STDC +# endif +# if __STDC_VERSION__ >= 199901L +# ifndef STDC99 +# define STDC99 +# endif +# endif +#endif +#if !defined(STDC) && (defined(__STDC__) || defined(__cplusplus)) +# define STDC +#endif +#if !defined(STDC) && (defined(__GNUC__) || defined(__BORLANDC__)) +# define STDC +#endif +#if !defined(STDC) && (defined(MSDOS) || defined(WINDOWS) || defined(WIN32)) +# define STDC +#endif +#if !defined(STDC) && (defined(OS2) || defined(__HOS_AIX__)) +# define STDC +#endif + +#if defined(__OS400__) && !defined(STDC) /* iSeries (formerly AS/400). */ +# define STDC +#endif + +#ifndef STDC +# ifndef const /* cannot use !defined(STDC) && !defined(const) on Mac */ +# define const /* note: need a more gentle solution here */ +# endif +#endif + +#if defined(ZLIB_CONST) && !defined(z_const) +# define z_const const +#else +# define z_const +#endif + +#ifdef Z_SOLO +# ifdef _WIN64 + typedef unsigned long long z_size_t; +# else + typedef unsigned long z_size_t; +# endif +#else +# define z_longlong long long +# if defined(NO_SIZE_T) + typedef unsigned NO_SIZE_T z_size_t; +# elif defined(STDC) +# include + typedef size_t z_size_t; +# else + typedef unsigned long z_size_t; +# endif +# undef z_longlong +#endif + +/* Maximum value for memLevel in deflateInit2 */ +#ifndef MAX_MEM_LEVEL +# ifdef MAXSEG_64K +# define MAX_MEM_LEVEL 8 +# else +# define MAX_MEM_LEVEL 9 +# endif +#endif + +/* Maximum value for windowBits in deflateInit2 and inflateInit2. + * WARNING: reducing MAX_WBITS makes minigzip unable to extract .gz files + * created by gzip. (Files created by minigzip can still be extracted by + * gzip.) + */ +#ifndef MAX_WBITS +# define MAX_WBITS 15 /* 32K LZ77 window */ +#endif + +/* The memory requirements for deflate are (in bytes): + (1 << (windowBits+2)) + (1 << (memLevel+9)) + that is: 128K for windowBits=15 + 128K for memLevel = 8 (default values) + plus a few kilobytes for small objects. For example, if you want to reduce + the default memory requirements from 256K to 128K, compile with + make CFLAGS="-O -DMAX_WBITS=14 -DMAX_MEM_LEVEL=7" + Of course this will generally degrade compression (there's no free lunch). + + The memory requirements for inflate are (in bytes) 1 << windowBits + that is, 32K for windowBits=15 (default value) plus about 7 kilobytes + for small objects. +*/ + + /* Type declarations */ + +#ifndef OF /* function prototypes */ +# ifdef STDC +# define OF(args) args +# else +# define OF(args) () +# endif +#endif + +/* The following definitions for FAR are needed only for MSDOS mixed + * model programming (small or medium model with some far allocations). + * This was tested only with MSC; for other MSDOS compilers you may have + * to define NO_MEMCPY in zutil.h. If you don't need the mixed model, + * just define FAR to be empty. + */ +#ifdef SYS16BIT +# if defined(M_I86SM) || defined(M_I86MM) + /* MSC small or medium model */ +# define SMALL_MEDIUM +# ifdef _MSC_VER +# define FAR _far +# else +# define FAR far +# endif +# endif +# if (defined(__SMALL__) || defined(__MEDIUM__)) + /* Turbo C small or medium model */ +# define SMALL_MEDIUM +# ifdef __BORLANDC__ +# define FAR _far +# else +# define FAR far +# endif +# endif +#endif + +#if defined(WINDOWS) || defined(WIN32) + /* If building or using zlib as a DLL, define ZLIB_DLL. + * This is not mandatory, but it offers a little performance increase. + */ +# ifdef ZLIB_DLL +# if defined(WIN32) && (!defined(__BORLANDC__) || (__BORLANDC__ >= 0x500)) +# ifdef ZLIB_INTERNAL +# define ZEXTERN extern __declspec(dllexport) +# else +# define ZEXTERN extern __declspec(dllimport) +# endif +# endif +# endif /* ZLIB_DLL */ + /* If building or using zlib with the WINAPI/WINAPIV calling convention, + * define ZLIB_WINAPI. + * Caution: the standard ZLIB1.DLL is NOT compiled using ZLIB_WINAPI. + */ +# ifdef ZLIB_WINAPI +# ifdef FAR +# undef FAR +# endif +# ifndef WIN32_LEAN_AND_MEAN +# define WIN32_LEAN_AND_MEAN +# endif +# include + /* No need for _export, use ZLIB.DEF instead. */ + /* For complete Windows compatibility, use WINAPI, not __stdcall. */ +# define ZEXPORT WINAPI +# ifdef WIN32 +# define ZEXPORTVA WINAPIV +# else +# define ZEXPORTVA FAR CDECL +# endif +# endif +#endif + +#if defined (__BEOS__) +# ifdef ZLIB_DLL +# ifdef ZLIB_INTERNAL +# define ZEXPORT __declspec(dllexport) +# define ZEXPORTVA __declspec(dllexport) +# else +# define ZEXPORT __declspec(dllimport) +# define ZEXPORTVA __declspec(dllimport) +# endif +# endif +#endif + +#ifndef ZEXTERN +# define ZEXTERN extern +#endif +#ifndef ZEXPORT +# define ZEXPORT +#endif +#ifndef ZEXPORTVA +# define ZEXPORTVA +#endif + +#ifndef FAR +# define FAR +#endif + +#if !defined(__MACTYPES__) +typedef unsigned char Byte; /* 8 bits */ +#endif +typedef unsigned int uInt; /* 16 bits or more */ +typedef unsigned long uLong; /* 32 bits or more */ + +#ifdef SMALL_MEDIUM + /* Borland C/C++ and some old MSC versions ignore FAR inside typedef */ +# define Bytef Byte FAR +#else + typedef Byte FAR Bytef; +#endif +typedef char FAR charf; +typedef int FAR intf; +typedef uInt FAR uIntf; +typedef uLong FAR uLongf; + +#ifdef STDC + typedef void const *voidpc; + typedef void FAR *voidpf; + typedef void *voidp; +#else + typedef Byte const *voidpc; + typedef Byte FAR *voidpf; + typedef Byte *voidp; +#endif + +#if !defined(Z_U4) && !defined(Z_SOLO) && defined(STDC) +# include +# if (UINT_MAX == 0xffffffffUL) +# define Z_U4 unsigned +# elif (ULONG_MAX == 0xffffffffUL) +# define Z_U4 unsigned long +# elif (USHRT_MAX == 0xffffffffUL) +# define Z_U4 unsigned short +# endif +#endif + +#ifdef Z_U4 + typedef Z_U4 z_crc_t; +#else + typedef unsigned long z_crc_t; +#endif + +#ifdef HAVE_UNISTD_H /* may be set to #if 1 by ./configure */ +# define Z_HAVE_UNISTD_H +#endif + +#ifdef HAVE_STDARG_H /* may be set to #if 1 by ./configure */ +# define Z_HAVE_STDARG_H +#endif + +#ifdef STDC +# ifndef Z_SOLO +# include /* for off_t */ +# endif +#endif + +#if defined(STDC) || defined(Z_HAVE_STDARG_H) +# ifndef Z_SOLO +# include /* for va_list */ +# endif +#endif + +#ifdef _WIN32 +# ifndef Z_SOLO +# include /* for wchar_t */ +# endif +#endif + +/* a little trick to accommodate both "#define _LARGEFILE64_SOURCE" and + * "#define _LARGEFILE64_SOURCE 1" as requesting 64-bit operations, (even + * though the former does not conform to the LFS document), but considering + * both "#undef _LARGEFILE64_SOURCE" and "#define _LARGEFILE64_SOURCE 0" as + * equivalently requesting no 64-bit operations + */ +#if defined(_LARGEFILE64_SOURCE) && -_LARGEFILE64_SOURCE - -1 == 1 +# undef _LARGEFILE64_SOURCE +#endif + +#ifndef Z_HAVE_UNISTD_H +# ifdef __WATCOMC__ +# define Z_HAVE_UNISTD_H +# endif +#endif +#ifndef Z_HAVE_UNISTD_H +# if defined(_LARGEFILE64_SOURCE) && !defined(_WIN32) +# define Z_HAVE_UNISTD_H +# endif +#endif +#ifndef Z_SOLO +# if defined(Z_HAVE_UNISTD_H) +# include /* for SEEK_*, off_t, and _LFS64_LARGEFILE */ +# ifdef VMS +# include /* for off_t */ +# endif +# ifndef z_off_t +# define z_off_t off_t +# endif +# endif +#endif + +#if defined(_LFS64_LARGEFILE) && _LFS64_LARGEFILE-0 +# define Z_LFS64 +#endif + +#if defined(_LARGEFILE64_SOURCE) && defined(Z_LFS64) +# define Z_LARGE64 +#endif + +#if defined(_FILE_OFFSET_BITS) && _FILE_OFFSET_BITS-0 == 64 && defined(Z_LFS64) +# define Z_WANT64 +#endif + +#if !defined(SEEK_SET) && !defined(Z_SOLO) +# define SEEK_SET 0 /* Seek from beginning of file. */ +# define SEEK_CUR 1 /* Seek from current position. */ +# define SEEK_END 2 /* Set file pointer to EOF plus "offset" */ +#endif + +#ifndef z_off_t +# define z_off_t long +#endif + +#if !defined(_WIN32) && defined(Z_LARGE64) +# define z_off64_t off64_t +#else +# if defined(_WIN32) && !defined(__GNUC__) +# define z_off64_t __int64 +# else +# define z_off64_t z_off_t +# endif +#endif + +/* MVS linker does not support external names larger than 8 bytes */ +#if defined(__MVS__) + #pragma map(deflateInit_,"DEIN") + #pragma map(deflateInit2_,"DEIN2") + #pragma map(deflateEnd,"DEEND") + #pragma map(deflateBound,"DEBND") + #pragma map(inflateInit_,"ININ") + #pragma map(inflateInit2_,"ININ2") + #pragma map(inflateEnd,"INEND") + #pragma map(inflateSync,"INSY") + #pragma map(inflateSetDictionary,"INSEDI") + #pragma map(compressBound,"CMBND") + #pragma map(inflate_table,"INTABL") + #pragma map(inflate_fast,"INFA") + #pragma map(inflate_copyright,"INCOPY") +#endif + +#endif /* ZCONF_H */ diff --git a/thirdparty/zlib-1.3.1/zconf.h.included b/thirdparty/zlib-1.3.1/zconf.h.included new file mode 100644 index 0000000..62adc8d --- /dev/null +++ b/thirdparty/zlib-1.3.1/zconf.h.included @@ -0,0 +1,543 @@ +/* zconf.h -- configuration of the zlib compression library + * Copyright (C) 1995-2024 Jean-loup Gailly, Mark Adler + * For conditions of distribution and use, see copyright notice in zlib.h + */ + +/* @(#) $Id$ */ + +#ifndef ZCONF_H +#define ZCONF_H + +/* + * If you *really* need a unique prefix for all types and library functions, + * compile with -DZ_PREFIX. The "standard" zlib should be compiled without it. + * Even better than compiling with -DZ_PREFIX would be to use configure to set + * this permanently in zconf.h using "./configure --zprefix". + */ +#ifdef Z_PREFIX /* may be set to #if 1 by ./configure */ +# define Z_PREFIX_SET + +/* all linked symbols and init macros */ +# define _dist_code z__dist_code +# define _length_code z__length_code +# define _tr_align z__tr_align +# define _tr_flush_bits z__tr_flush_bits +# define _tr_flush_block z__tr_flush_block +# define _tr_init z__tr_init +# define _tr_stored_block z__tr_stored_block +# define _tr_tally z__tr_tally +# define adler32 z_adler32 +# define adler32_combine z_adler32_combine +# define adler32_combine64 z_adler32_combine64 +# define adler32_z z_adler32_z +# ifndef Z_SOLO +# define compress z_compress +# define compress2 z_compress2 +# define compressBound z_compressBound +# endif +# define crc32 z_crc32 +# define crc32_combine z_crc32_combine +# define crc32_combine64 z_crc32_combine64 +# define crc32_combine_gen z_crc32_combine_gen +# define crc32_combine_gen64 z_crc32_combine_gen64 +# define crc32_combine_op z_crc32_combine_op +# define crc32_z z_crc32_z +# define deflate z_deflate +# define deflateBound z_deflateBound +# define deflateCopy z_deflateCopy +# define deflateEnd z_deflateEnd +# define deflateGetDictionary z_deflateGetDictionary +# define deflateInit z_deflateInit +# define deflateInit2 z_deflateInit2 +# define deflateInit2_ z_deflateInit2_ +# define deflateInit_ z_deflateInit_ +# define deflateParams z_deflateParams +# define deflatePending z_deflatePending +# define deflatePrime z_deflatePrime +# define deflateReset z_deflateReset +# define deflateResetKeep z_deflateResetKeep +# define deflateSetDictionary z_deflateSetDictionary +# define deflateSetHeader z_deflateSetHeader +# define deflateTune z_deflateTune +# define deflate_copyright z_deflate_copyright +# define get_crc_table z_get_crc_table +# ifndef Z_SOLO +# define gz_error z_gz_error +# define gz_intmax z_gz_intmax +# define gz_strwinerror z_gz_strwinerror +# define gzbuffer z_gzbuffer +# define gzclearerr z_gzclearerr +# define gzclose z_gzclose +# define gzclose_r z_gzclose_r +# define gzclose_w z_gzclose_w +# define gzdirect z_gzdirect +# define gzdopen z_gzdopen +# define gzeof z_gzeof +# define gzerror z_gzerror +# define gzflush z_gzflush +# define gzfread z_gzfread +# define gzfwrite z_gzfwrite +# define gzgetc z_gzgetc +# define gzgetc_ z_gzgetc_ +# define gzgets z_gzgets +# define gzoffset z_gzoffset +# define gzoffset64 z_gzoffset64 +# define gzopen z_gzopen +# define gzopen64 z_gzopen64 +# ifdef _WIN32 +# define gzopen_w z_gzopen_w +# endif +# define gzprintf z_gzprintf +# define gzputc z_gzputc +# define gzputs z_gzputs +# define gzread z_gzread +# define gzrewind z_gzrewind +# define gzseek z_gzseek +# define gzseek64 z_gzseek64 +# define gzsetparams z_gzsetparams +# define gztell z_gztell +# define gztell64 z_gztell64 +# define gzungetc z_gzungetc +# define gzvprintf z_gzvprintf +# define gzwrite z_gzwrite +# endif +# define inflate z_inflate +# define inflateBack z_inflateBack +# define inflateBackEnd z_inflateBackEnd +# define inflateBackInit z_inflateBackInit +# define inflateBackInit_ z_inflateBackInit_ +# define inflateCodesUsed z_inflateCodesUsed +# define inflateCopy z_inflateCopy +# define inflateEnd z_inflateEnd +# define inflateGetDictionary z_inflateGetDictionary +# define inflateGetHeader z_inflateGetHeader +# define inflateInit z_inflateInit +# define inflateInit2 z_inflateInit2 +# define inflateInit2_ z_inflateInit2_ +# define inflateInit_ z_inflateInit_ +# define inflateMark z_inflateMark +# define inflatePrime z_inflatePrime +# define inflateReset z_inflateReset +# define inflateReset2 z_inflateReset2 +# define inflateResetKeep z_inflateResetKeep +# define inflateSetDictionary z_inflateSetDictionary +# define inflateSync z_inflateSync +# define inflateSyncPoint z_inflateSyncPoint +# define inflateUndermine z_inflateUndermine +# define inflateValidate z_inflateValidate +# define inflate_copyright z_inflate_copyright +# define inflate_fast z_inflate_fast +# define inflate_table z_inflate_table +# ifndef Z_SOLO +# define uncompress z_uncompress +# define uncompress2 z_uncompress2 +# endif +# define zError z_zError +# ifndef Z_SOLO +# define zcalloc z_zcalloc +# define zcfree z_zcfree +# endif +# define zlibCompileFlags z_zlibCompileFlags +# define zlibVersion z_zlibVersion + +/* all zlib typedefs in zlib.h and zconf.h */ +# define Byte z_Byte +# define Bytef z_Bytef +# define alloc_func z_alloc_func +# define charf z_charf +# define free_func z_free_func +# ifndef Z_SOLO +# define gzFile z_gzFile +# endif +# define gz_header z_gz_header +# define gz_headerp z_gz_headerp +# define in_func z_in_func +# define intf z_intf +# define out_func z_out_func +# define uInt z_uInt +# define uIntf z_uIntf +# define uLong z_uLong +# define uLongf z_uLongf +# define voidp z_voidp +# define voidpc z_voidpc +# define voidpf z_voidpf + +/* all zlib structs in zlib.h and zconf.h */ +# define gz_header_s z_gz_header_s +# define internal_state z_internal_state + +#endif + +#if defined(__MSDOS__) && !defined(MSDOS) +# define MSDOS +#endif +#if (defined(OS_2) || defined(__OS2__)) && !defined(OS2) +# define OS2 +#endif +#if defined(_WINDOWS) && !defined(WINDOWS) +# define WINDOWS +#endif +#if defined(_WIN32) || defined(_WIN32_WCE) || defined(__WIN32__) +# ifndef WIN32 +# define WIN32 +# endif +#endif +#if (defined(MSDOS) || defined(OS2) || defined(WINDOWS)) && !defined(WIN32) +# if !defined(__GNUC__) && !defined(__FLAT__) && !defined(__386__) +# ifndef SYS16BIT +# define SYS16BIT +# endif +# endif +#endif + +/* + * Compile with -DMAXSEG_64K if the alloc function cannot allocate more + * than 64k bytes at a time (needed on systems with 16-bit int). + */ +#ifdef SYS16BIT +# define MAXSEG_64K +#endif +#ifdef MSDOS +# define UNALIGNED_OK +#endif + +#ifdef __STDC_VERSION__ +# ifndef STDC +# define STDC +# endif +# if __STDC_VERSION__ >= 199901L +# ifndef STDC99 +# define STDC99 +# endif +# endif +#endif +#if !defined(STDC) && (defined(__STDC__) || defined(__cplusplus)) +# define STDC +#endif +#if !defined(STDC) && (defined(__GNUC__) || defined(__BORLANDC__)) +# define STDC +#endif +#if !defined(STDC) && (defined(MSDOS) || defined(WINDOWS) || defined(WIN32)) +# define STDC +#endif +#if !defined(STDC) && (defined(OS2) || defined(__HOS_AIX__)) +# define STDC +#endif + +#if defined(__OS400__) && !defined(STDC) /* iSeries (formerly AS/400). */ +# define STDC +#endif + +#ifndef STDC +# ifndef const /* cannot use !defined(STDC) && !defined(const) on Mac */ +# define const /* note: need a more gentle solution here */ +# endif +#endif + +#if defined(ZLIB_CONST) && !defined(z_const) +# define z_const const +#else +# define z_const +#endif + +#ifdef Z_SOLO +# ifdef _WIN64 + typedef unsigned long long z_size_t; +# else + typedef unsigned long z_size_t; +# endif +#else +# define z_longlong long long +# if defined(NO_SIZE_T) + typedef unsigned NO_SIZE_T z_size_t; +# elif defined(STDC) +# include + typedef size_t z_size_t; +# else + typedef unsigned long z_size_t; +# endif +# undef z_longlong +#endif + +/* Maximum value for memLevel in deflateInit2 */ +#ifndef MAX_MEM_LEVEL +# ifdef MAXSEG_64K +# define MAX_MEM_LEVEL 8 +# else +# define MAX_MEM_LEVEL 9 +# endif +#endif + +/* Maximum value for windowBits in deflateInit2 and inflateInit2. + * WARNING: reducing MAX_WBITS makes minigzip unable to extract .gz files + * created by gzip. (Files created by minigzip can still be extracted by + * gzip.) + */ +#ifndef MAX_WBITS +# define MAX_WBITS 15 /* 32K LZ77 window */ +#endif + +/* The memory requirements for deflate are (in bytes): + (1 << (windowBits+2)) + (1 << (memLevel+9)) + that is: 128K for windowBits=15 + 128K for memLevel = 8 (default values) + plus a few kilobytes for small objects. For example, if you want to reduce + the default memory requirements from 256K to 128K, compile with + make CFLAGS="-O -DMAX_WBITS=14 -DMAX_MEM_LEVEL=7" + Of course this will generally degrade compression (there's no free lunch). + + The memory requirements for inflate are (in bytes) 1 << windowBits + that is, 32K for windowBits=15 (default value) plus about 7 kilobytes + for small objects. +*/ + + /* Type declarations */ + +#ifndef OF /* function prototypes */ +# ifdef STDC +# define OF(args) args +# else +# define OF(args) () +# endif +#endif + +/* The following definitions for FAR are needed only for MSDOS mixed + * model programming (small or medium model with some far allocations). + * This was tested only with MSC; for other MSDOS compilers you may have + * to define NO_MEMCPY in zutil.h. If you don't need the mixed model, + * just define FAR to be empty. + */ +#ifdef SYS16BIT +# if defined(M_I86SM) || defined(M_I86MM) + /* MSC small or medium model */ +# define SMALL_MEDIUM +# ifdef _MSC_VER +# define FAR _far +# else +# define FAR far +# endif +# endif +# if (defined(__SMALL__) || defined(__MEDIUM__)) + /* Turbo C small or medium model */ +# define SMALL_MEDIUM +# ifdef __BORLANDC__ +# define FAR _far +# else +# define FAR far +# endif +# endif +#endif + +#if defined(WINDOWS) || defined(WIN32) + /* If building or using zlib as a DLL, define ZLIB_DLL. + * This is not mandatory, but it offers a little performance increase. + */ +# ifdef ZLIB_DLL +# if defined(WIN32) && (!defined(__BORLANDC__) || (__BORLANDC__ >= 0x500)) +# ifdef ZLIB_INTERNAL +# define ZEXTERN extern __declspec(dllexport) +# else +# define ZEXTERN extern __declspec(dllimport) +# endif +# endif +# endif /* ZLIB_DLL */ + /* If building or using zlib with the WINAPI/WINAPIV calling convention, + * define ZLIB_WINAPI. + * Caution: the standard ZLIB1.DLL is NOT compiled using ZLIB_WINAPI. + */ +# ifdef ZLIB_WINAPI +# ifdef FAR +# undef FAR +# endif +# ifndef WIN32_LEAN_AND_MEAN +# define WIN32_LEAN_AND_MEAN +# endif +# include + /* No need for _export, use ZLIB.DEF instead. */ + /* For complete Windows compatibility, use WINAPI, not __stdcall. */ +# define ZEXPORT WINAPI +# ifdef WIN32 +# define ZEXPORTVA WINAPIV +# else +# define ZEXPORTVA FAR CDECL +# endif +# endif +#endif + +#if defined (__BEOS__) +# ifdef ZLIB_DLL +# ifdef ZLIB_INTERNAL +# define ZEXPORT __declspec(dllexport) +# define ZEXPORTVA __declspec(dllexport) +# else +# define ZEXPORT __declspec(dllimport) +# define ZEXPORTVA __declspec(dllimport) +# endif +# endif +#endif + +#ifndef ZEXTERN +# define ZEXTERN extern +#endif +#ifndef ZEXPORT +# define ZEXPORT +#endif +#ifndef ZEXPORTVA +# define ZEXPORTVA +#endif + +#ifndef FAR +# define FAR +#endif + +#if !defined(__MACTYPES__) +typedef unsigned char Byte; /* 8 bits */ +#endif +typedef unsigned int uInt; /* 16 bits or more */ +typedef unsigned long uLong; /* 32 bits or more */ + +#ifdef SMALL_MEDIUM + /* Borland C/C++ and some old MSC versions ignore FAR inside typedef */ +# define Bytef Byte FAR +#else + typedef Byte FAR Bytef; +#endif +typedef char FAR charf; +typedef int FAR intf; +typedef uInt FAR uIntf; +typedef uLong FAR uLongf; + +#ifdef STDC + typedef void const *voidpc; + typedef void FAR *voidpf; + typedef void *voidp; +#else + typedef Byte const *voidpc; + typedef Byte FAR *voidpf; + typedef Byte *voidp; +#endif + +#if !defined(Z_U4) && !defined(Z_SOLO) && defined(STDC) +# include +# if (UINT_MAX == 0xffffffffUL) +# define Z_U4 unsigned +# elif (ULONG_MAX == 0xffffffffUL) +# define Z_U4 unsigned long +# elif (USHRT_MAX == 0xffffffffUL) +# define Z_U4 unsigned short +# endif +#endif + +#ifdef Z_U4 + typedef Z_U4 z_crc_t; +#else + typedef unsigned long z_crc_t; +#endif + +#ifdef HAVE_UNISTD_H /* may be set to #if 1 by ./configure */ +# define Z_HAVE_UNISTD_H +#endif + +#ifdef HAVE_STDARG_H /* may be set to #if 1 by ./configure */ +# define Z_HAVE_STDARG_H +#endif + +#ifdef STDC +# ifndef Z_SOLO +# include /* for off_t */ +# endif +#endif + +#if defined(STDC) || defined(Z_HAVE_STDARG_H) +# ifndef Z_SOLO +# include /* for va_list */ +# endif +#endif + +#ifdef _WIN32 +# ifndef Z_SOLO +# include /* for wchar_t */ +# endif +#endif + +/* a little trick to accommodate both "#define _LARGEFILE64_SOURCE" and + * "#define _LARGEFILE64_SOURCE 1" as requesting 64-bit operations, (even + * though the former does not conform to the LFS document), but considering + * both "#undef _LARGEFILE64_SOURCE" and "#define _LARGEFILE64_SOURCE 0" as + * equivalently requesting no 64-bit operations + */ +#if defined(_LARGEFILE64_SOURCE) && -_LARGEFILE64_SOURCE - -1 == 1 +# undef _LARGEFILE64_SOURCE +#endif + +#ifndef Z_HAVE_UNISTD_H +# ifdef __WATCOMC__ +# define Z_HAVE_UNISTD_H +# endif +#endif +#ifndef Z_HAVE_UNISTD_H +# if defined(_LARGEFILE64_SOURCE) && !defined(_WIN32) +# define Z_HAVE_UNISTD_H +# endif +#endif +#ifndef Z_SOLO +# if defined(Z_HAVE_UNISTD_H) +# include /* for SEEK_*, off_t, and _LFS64_LARGEFILE */ +# ifdef VMS +# include /* for off_t */ +# endif +# ifndef z_off_t +# define z_off_t off_t +# endif +# endif +#endif + +#if defined(_LFS64_LARGEFILE) && _LFS64_LARGEFILE-0 +# define Z_LFS64 +#endif + +#if defined(_LARGEFILE64_SOURCE) && defined(Z_LFS64) +# define Z_LARGE64 +#endif + +#if defined(_FILE_OFFSET_BITS) && _FILE_OFFSET_BITS-0 == 64 && defined(Z_LFS64) +# define Z_WANT64 +#endif + +#if !defined(SEEK_SET) && !defined(Z_SOLO) +# define SEEK_SET 0 /* Seek from beginning of file. */ +# define SEEK_CUR 1 /* Seek from current position. */ +# define SEEK_END 2 /* Set file pointer to EOF plus "offset" */ +#endif + +#ifndef z_off_t +# define z_off_t long +#endif + +#if !defined(_WIN32) && defined(Z_LARGE64) +# define z_off64_t off64_t +#else +# if defined(_WIN32) && !defined(__GNUC__) +# define z_off64_t __int64 +# else +# define z_off64_t z_off_t +# endif +#endif + +/* MVS linker does not support external names larger than 8 bytes */ +#if defined(__MVS__) + #pragma map(deflateInit_,"DEIN") + #pragma map(deflateInit2_,"DEIN2") + #pragma map(deflateEnd,"DEEND") + #pragma map(deflateBound,"DEBND") + #pragma map(inflateInit_,"ININ") + #pragma map(inflateInit2_,"ININ2") + #pragma map(inflateEnd,"INEND") + #pragma map(inflateSync,"INSY") + #pragma map(inflateSetDictionary,"INSEDI") + #pragma map(compressBound,"CMBND") + #pragma map(inflate_table,"INTABL") + #pragma map(inflate_fast,"INFA") + #pragma map(inflate_copyright,"INCOPY") +#endif + +#endif /* ZCONF_H */ diff --git a/thirdparty/zlib-1.3.1/zlib.3 b/thirdparty/zlib-1.3.1/zlib.3 new file mode 100644 index 0000000..c716020 --- /dev/null +++ b/thirdparty/zlib-1.3.1/zlib.3 @@ -0,0 +1,149 @@ +.TH ZLIB 3 "22 Jan 2024" +.SH NAME +zlib \- compression/decompression library +.SH SYNOPSIS +[see +.I zlib.h +for full description] +.SH DESCRIPTION +The +.I zlib +library is a general purpose data compression library. +The code is thread safe, assuming that the standard library functions +used are thread safe, such as memory allocation routines. +It provides in-memory compression and decompression functions, +including integrity checks of the uncompressed data. +This version of the library supports only one compression method (deflation) +but other algorithms may be added later +with the same stream interface. +.LP +Compression can be done in a single step if the buffers are large enough +or can be done by repeated calls of the compression function. +In the latter case, +the application must provide more input and/or consume the output +(providing more output space) before each call. +.LP +The library also supports reading and writing files in +.IR gzip (1) +(.gz) format +with an interface similar to that of stdio. +.LP +The library does not install any signal handler. +The decoder checks the consistency of the compressed data, +so the library should never crash even in the case of corrupted input. +.LP +All functions of the compression library are documented in the file +.IR zlib.h . +The distribution source includes examples of use of the library +in the files +.I test/example.c +and +.IR test/minigzip.c, +as well as other examples in the +.IR examples/ +directory. +.LP +Changes to this version are documented in the file +.I ChangeLog +that accompanies the source. +.LP +.I zlib +is built in to many languages and operating systems, including but not limited to +Java, Python, .NET, PHP, Perl, Ruby, Swift, and Go. +.LP +An experimental package to read and write files in the .zip format, +written on top of +.I zlib +by Gilles Vollant (info@winimage.com), +is available at: +.IP +http://www.winimage.com/zLibDll/minizip.html +and also in the +.I contrib/minizip +directory of the main +.I zlib +source distribution. +.SH "SEE ALSO" +The +.I zlib +web site can be found at: +.IP +http://zlib.net/ +.LP +The data format used by the +.I zlib +library is described by RFC +(Request for Comments) 1950 to 1952 in the files: +.IP +http://tools.ietf.org/html/rfc1950 (for the zlib header and trailer format) +.br +http://tools.ietf.org/html/rfc1951 (for the deflate compressed data format) +.br +http://tools.ietf.org/html/rfc1952 (for the gzip header and trailer format) +.LP +Mark Nelson wrote an article about +.I zlib +for the Jan. 1997 issue of Dr. Dobb's Journal; +a copy of the article is available at: +.IP +http://marknelson.us/1997/01/01/zlib-engine/ +.SH "REPORTING PROBLEMS" +Before reporting a problem, +please check the +.I zlib +web site to verify that you have the latest version of +.IR zlib ; +otherwise, +obtain the latest version and see if the problem still exists. +Please read the +.I zlib +FAQ at: +.IP +http://zlib.net/zlib_faq.html +.LP +before asking for help. +Send questions and/or comments to zlib@gzip.org, +or (for the Windows DLL version) to Gilles Vollant (info@winimage.com). +.SH AUTHORS AND LICENSE +Version 1.3.1 +.LP +Copyright (C) 1995-2024 Jean-loup Gailly and Mark Adler +.LP +This software is provided 'as-is', without any express or implied +warranty. In no event will the authors be held liable for any damages +arising from the use of this software. +.LP +Permission is granted to anyone to use this software for any purpose, +including commercial applications, and to alter it and redistribute it +freely, subject to the following restrictions: +.LP +.nr step 1 1 +.IP \n[step]. 3 +The origin of this software must not be misrepresented; you must not +claim that you wrote the original software. If you use this software +in a product, an acknowledgment in the product documentation would be +appreciated but is not required. +.IP \n+[step]. +Altered source versions must be plainly marked as such, and must not be +misrepresented as being the original software. +.IP \n+[step]. +This notice may not be removed or altered from any source distribution. +.LP +Jean-loup Gailly Mark Adler +.br +jloup@gzip.org madler@alumni.caltech.edu +.LP +The deflate format used by +.I zlib +was defined by Phil Katz. +The deflate and +.I zlib +specifications were written by L. Peter Deutsch. +Thanks to all the people who reported problems and suggested various +improvements in +.IR zlib ; +who are too numerous to cite here. +.LP +UNIX manual page by R. P. C. Rodgers, +U.S. National Library of Medicine (rodgers@nlm.nih.gov). +.\" end of man page diff --git a/thirdparty/zlib-1.3.1/zlib.3.pdf b/thirdparty/zlib-1.3.1/zlib.3.pdf new file mode 100644 index 0000000000000000000000000000000000000000..b224532bdd8eed1939b7dd04a7a0dd46be649c00 GIT binary patch literal 25523 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 to the Adler-32 checksum of all input read + so far (that is, total_in bytes). If a gzip stream is being generated, then + strm->adler will be the CRC-32 checksum of the input read so far. (See + deflateInit2 below.) + + deflate() may update strm->data_type if it can make a good guess about + the input data type (Z_BINARY or Z_TEXT). If in doubt, the data is + considered binary. This field is only for information purposes and does not + affect the compression algorithm in any manner. + + deflate() returns Z_OK if some progress has been made (more input + processed or more output produced), Z_STREAM_END if all input has been + consumed and all output has been produced (only when flush is set to + Z_FINISH), Z_STREAM_ERROR if the stream state was inconsistent (for example + if next_in or next_out was Z_NULL or the state was inadvertently written over + by the application), or Z_BUF_ERROR if no progress is possible (for example + avail_in or avail_out was zero). Note that Z_BUF_ERROR is not fatal, and + deflate() can be called again with more input and more output space to + continue compressing. +*/ + + +ZEXTERN int ZEXPORT deflateEnd(z_streamp strm); +/* + All dynamically allocated data structures for this stream are freed. + This function discards any unprocessed input and does not flush any pending + output. + + deflateEnd returns Z_OK if success, Z_STREAM_ERROR if the + stream state was inconsistent, Z_DATA_ERROR if the stream was freed + prematurely (some input or output was discarded). In the error case, msg + may be set but then points to a static string (which must not be + deallocated). +*/ + + +/* +ZEXTERN int ZEXPORT inflateInit(z_streamp strm); + + Initializes the internal stream state for decompression. The fields + next_in, avail_in, zalloc, zfree and opaque must be initialized before by + the caller. In the current version of inflate, the provided input is not + read or consumed. The allocation of a sliding window will be deferred to + the first call of inflate (if the decompression does not complete on the + first call). If zalloc and zfree are set to Z_NULL, inflateInit updates + them to use default allocation functions. total_in, total_out, adler, and + msg are initialized. + + inflateInit returns Z_OK if success, Z_MEM_ERROR if there was not enough + memory, Z_VERSION_ERROR if the zlib library version is incompatible with the + version assumed by the caller, or Z_STREAM_ERROR if the parameters are + invalid, such as a null pointer to the structure. msg is set to null if + there is no error message. inflateInit does not perform any decompression. + Actual decompression will be done by inflate(). So next_in, and avail_in, + next_out, and avail_out are unused and unchanged. The current + implementation of inflateInit() does not process any header information -- + that is deferred until inflate() is called. +*/ + + +ZEXTERN int ZEXPORT inflate(z_streamp strm, int flush); +/* + inflate decompresses as much data as possible, and stops when the input + buffer becomes empty or the output buffer becomes full. It may introduce + some output latency (reading input without producing any output) except when + forced to flush. + + The detailed semantics are as follows. inflate performs one or both of the + following actions: + + - Decompress more input starting at next_in and update next_in and avail_in + accordingly. If not all input can be processed (because there is not + enough room in the output buffer), then next_in and avail_in are updated + accordingly, and processing will resume at this point for the next call of + inflate(). + + - Generate more output starting at next_out and update next_out and avail_out + accordingly. inflate() provides as much output as possible, until there is + no more input data or no more space in the output buffer (see below about + the flush parameter). + + Before the call of inflate(), the application should ensure that at least + one of the actions is possible, by providing more input and/or consuming more + output, and updating the next_* and avail_* values accordingly. If the + caller of inflate() does not provide both available input and available + output space, it is possible that there will be no progress made. The + application can consume the uncompressed output when it wants, for example + when the output buffer is full (avail_out == 0), or after each call of + inflate(). If inflate returns Z_OK and with zero avail_out, it must be + called again after making room in the output buffer because there might be + more output pending. + + The flush parameter of inflate() can be Z_NO_FLUSH, Z_SYNC_FLUSH, Z_FINISH, + Z_BLOCK, or Z_TREES. Z_SYNC_FLUSH requests that inflate() flush as much + output as possible to the output buffer. Z_BLOCK requests that inflate() + stop if and when it gets to the next deflate block boundary. When decoding + the zlib or gzip format, this will cause inflate() to return immediately + after the header and before the first block. When doing a raw inflate, + inflate() will go ahead and process the first block, and will return when it + gets to the end of that block, or when it runs out of data. + + The Z_BLOCK option assists in appending to or combining deflate streams. + To assist in this, on return inflate() always sets strm->data_type to the + number of unused bits in the last byte taken from strm->next_in, plus 64 if + inflate() is currently decoding the last block in the deflate stream, plus + 128 if inflate() returned immediately after decoding an end-of-block code or + decoding the complete header up to just before the first byte of the deflate + stream. The end-of-block will not be indicated until all of the uncompressed + data from that block has been written to strm->next_out. The number of + unused bits may in general be greater than seven, except when bit 7 of + data_type is set, in which case the number of unused bits will be less than + eight. data_type is set as noted here every time inflate() returns for all + flush options, and so can be used to determine the amount of currently + consumed input in bits. + + The Z_TREES option behaves as Z_BLOCK does, but it also returns when the + end of each deflate block header is reached, before any actual data in that + block is decoded. This allows the caller to determine the length of the + deflate block header for later use in random access within a deflate block. + 256 is added to the value of strm->data_type when inflate() returns + immediately after reaching the end of the deflate block header. + + inflate() should normally be called until it returns Z_STREAM_END or an + error. However if all decompression is to be performed in a single step (a + single call of inflate), the parameter flush should be set to Z_FINISH. In + this case all pending input is processed and all pending output is flushed; + avail_out must be large enough to hold all of the uncompressed data for the + operation to complete. (The size of the uncompressed data may have been + saved by the compressor for this purpose.) The use of Z_FINISH is not + required to perform an inflation in one step. However it may be used to + inform inflate that a faster approach can be used for the single inflate() + call. Z_FINISH also informs inflate to not maintain a sliding window if the + stream completes, which reduces inflate's memory footprint. If the stream + does not complete, either because not all of the stream is provided or not + enough output space is provided, then a sliding window will be allocated and + inflate() can be called again to continue the operation as if Z_NO_FLUSH had + been used. + + In this implementation, inflate() always flushes as much output as + possible to the output buffer, and always uses the faster approach on the + first call. So the effects of the flush parameter in this implementation are + on the return value of inflate() as noted below, when inflate() returns early + when Z_BLOCK or Z_TREES is used, and when inflate() avoids the allocation of + memory for a sliding window when Z_FINISH is used. + + If a preset dictionary is needed after this call (see inflateSetDictionary + below), inflate sets strm->adler to the Adler-32 checksum of the dictionary + chosen by the compressor and returns Z_NEED_DICT; otherwise it sets + strm->adler to the Adler-32 checksum of all output produced so far (that is, + total_out bytes) and returns Z_OK, Z_STREAM_END or an error code as described + below. At the end of the stream, inflate() checks that its computed Adler-32 + checksum is equal to that saved by the compressor and returns Z_STREAM_END + only if the checksum is correct. + + inflate() can decompress and check either zlib-wrapped or gzip-wrapped + deflate data. The header type is detected automatically, if requested when + initializing with inflateInit2(). Any information contained in the gzip + header is not retained unless inflateGetHeader() is used. When processing + gzip-wrapped deflate data, strm->adler32 is set to the CRC-32 of the output + produced so far. The CRC-32 is checked against the gzip trailer, as is the + uncompressed length, modulo 2^32. + + inflate() returns Z_OK if some progress has been made (more input processed + or more output produced), Z_STREAM_END if the end of the compressed data has + been reached and all uncompressed output has been produced, Z_NEED_DICT if a + preset dictionary is needed at this point, Z_DATA_ERROR if the input data was + corrupted (input stream not conforming to the zlib format or incorrect check + value, in which case strm->msg points to a string with a more specific + error), Z_STREAM_ERROR if the stream structure was inconsistent (for example + next_in or next_out was Z_NULL, or the state was inadvertently written over + by the application), Z_MEM_ERROR if there was not enough memory, Z_BUF_ERROR + if no progress was possible or if there was not enough room in the output + buffer when Z_FINISH is used. Note that Z_BUF_ERROR is not fatal, and + inflate() can be called again with more input and more output space to + continue decompressing. If Z_DATA_ERROR is returned, the application may + then call inflateSync() to look for a good compression block if a partial + recovery of the data is to be attempted. +*/ + + +ZEXTERN int ZEXPORT inflateEnd(z_streamp strm); +/* + All dynamically allocated data structures for this stream are freed. + This function discards any unprocessed input and does not flush any pending + output. + + inflateEnd returns Z_OK if success, or Z_STREAM_ERROR if the stream state + was inconsistent. +*/ + + + /* Advanced functions */ + +/* + The following functions are needed only in some special applications. +*/ + +/* +ZEXTERN int ZEXPORT deflateInit2(z_streamp strm, + int level, + int method, + int windowBits, + int memLevel, + int strategy); + + This is another version of deflateInit with more compression options. The + fields zalloc, zfree and opaque must be initialized before by the caller. + + The method parameter is the compression method. It must be Z_DEFLATED in + this version of the library. + + The windowBits parameter is the base two logarithm of the window size + (the size of the history buffer). It should be in the range 8..15 for this + version of the library. Larger values of this parameter result in better + compression at the expense of memory usage. The default value is 15 if + deflateInit is used instead. + + For the current implementation of deflate(), a windowBits value of 8 (a + window size of 256 bytes) is not supported. As a result, a request for 8 + will result in 9 (a 512-byte window). In that case, providing 8 to + inflateInit2() will result in an error when the zlib header with 9 is + checked against the initialization of inflate(). The remedy is to not use 8 + with deflateInit2() with this initialization, or at least in that case use 9 + with inflateInit2(). + + windowBits can also be -8..-15 for raw deflate. In this case, -windowBits + determines the window size. deflate() will then generate raw deflate data + with no zlib header or trailer, and will not compute a check value. + + windowBits can also be greater than 15 for optional gzip encoding. Add + 16 to windowBits to write a simple gzip header and trailer around the + compressed data instead of a zlib wrapper. The gzip header will have no + file name, no extra data, no comment, no modification time (set to zero), no + header crc, and the operating system will be set to the appropriate value, + if the operating system was determined at compile time. If a gzip stream is + being written, strm->adler is a CRC-32 instead of an Adler-32. + + For raw deflate or gzip encoding, a request for a 256-byte window is + rejected as invalid, since only the zlib header provides a means of + transmitting the window size to the decompressor. + + The memLevel parameter specifies how much memory should be allocated + for the internal compression state. memLevel=1 uses minimum memory but is + slow and reduces compression ratio; memLevel=9 uses maximum memory for + optimal speed. The default value is 8. See zconf.h for total memory usage + as a function of windowBits and memLevel. + + The strategy parameter is used to tune the compression algorithm. Use the + value Z_DEFAULT_STRATEGY for normal data, Z_FILTERED for data produced by a + filter (or predictor), Z_HUFFMAN_ONLY to force Huffman encoding only (no + string match), or Z_RLE to limit match distances to one (run-length + encoding). Filtered data consists mostly of small values with a somewhat + random distribution. In this case, the compression algorithm is tuned to + compress them better. The effect of Z_FILTERED is to force more Huffman + coding and less string matching; it is somewhat intermediate between + Z_DEFAULT_STRATEGY and Z_HUFFMAN_ONLY. Z_RLE is designed to be almost as + fast as Z_HUFFMAN_ONLY, but give better compression for PNG image data. The + strategy parameter only affects the compression ratio but not the + correctness of the compressed output even if it is not set appropriately. + Z_FIXED prevents the use of dynamic Huffman codes, allowing for a simpler + decoder for special applications. + + deflateInit2 returns Z_OK if success, Z_MEM_ERROR if there was not enough + memory, Z_STREAM_ERROR if any parameter is invalid (such as an invalid + method), or Z_VERSION_ERROR if the zlib library version (zlib_version) is + incompatible with the version assumed by the caller (ZLIB_VERSION). msg is + set to null if there is no error message. deflateInit2 does not perform any + compression: this will be done by deflate(). +*/ + +ZEXTERN int ZEXPORT deflateSetDictionary(z_streamp strm, + const Bytef *dictionary, + uInt dictLength); +/* + Initializes the compression dictionary from the given byte sequence + without producing any compressed output. When using the zlib format, this + function must be called immediately after deflateInit, deflateInit2 or + deflateReset, and before any call of deflate. When doing raw deflate, this + function must be called either before any call of deflate, or immediately + after the completion of a deflate block, i.e. after all input has been + consumed and all output has been delivered when using any of the flush + options Z_BLOCK, Z_PARTIAL_FLUSH, Z_SYNC_FLUSH, or Z_FULL_FLUSH. The + compressor and decompressor must use exactly the same dictionary (see + inflateSetDictionary). + + The dictionary should consist of strings (byte sequences) that are likely + to be encountered later in the data to be compressed, with the most commonly + used strings preferably put towards the end of the dictionary. Using a + dictionary is most useful when the data to be compressed is short and can be + predicted with good accuracy; the data can then be compressed better than + with the default empty dictionary. + + Depending on the size of the compression data structures selected by + deflateInit or deflateInit2, a part of the dictionary may in effect be + discarded, for example if the dictionary is larger than the window size + provided in deflateInit or deflateInit2. Thus the strings most likely to be + useful should be put at the end of the dictionary, not at the front. In + addition, the current implementation of deflate will use at most the window + size minus 262 bytes of the provided dictionary. + + Upon return of this function, strm->adler is set to the Adler-32 value + of the dictionary; the decompressor may later use this value to determine + which dictionary has been used by the compressor. (The Adler-32 value + applies to the whole dictionary even if only a subset of the dictionary is + actually used by the compressor.) If a raw deflate was requested, then the + Adler-32 value is not computed and strm->adler is not set. + + deflateSetDictionary returns Z_OK if success, or Z_STREAM_ERROR if a + parameter is invalid (e.g. dictionary being Z_NULL) or the stream state is + inconsistent (for example if deflate has already been called for this stream + or if not at a block boundary for raw deflate). deflateSetDictionary does + not perform any compression: this will be done by deflate(). +*/ + +ZEXTERN int ZEXPORT deflateGetDictionary(z_streamp strm, + Bytef *dictionary, + uInt *dictLength); +/* + Returns the sliding dictionary being maintained by deflate. dictLength is + set to the number of bytes in the dictionary, and that many bytes are copied + to dictionary. dictionary must have enough space, where 32768 bytes is + always enough. If deflateGetDictionary() is called with dictionary equal to + Z_NULL, then only the dictionary length is returned, and nothing is copied. + Similarly, if dictLength is Z_NULL, then it is not set. + + deflateGetDictionary() may return a length less than the window size, even + when more than the window size in input has been provided. It may return up + to 258 bytes less in that case, due to how zlib's implementation of deflate + manages the sliding window and lookahead for matches, where matches can be + up to 258 bytes long. If the application needs the last window-size bytes of + input, then that would need to be saved by the application outside of zlib. + + deflateGetDictionary returns Z_OK on success, or Z_STREAM_ERROR if the + stream state is inconsistent. +*/ + +ZEXTERN int ZEXPORT deflateCopy(z_streamp dest, + z_streamp source); +/* + Sets the destination stream as a complete copy of the source stream. + + This function can be useful when several compression strategies will be + tried, for example when there are several ways of pre-processing the input + data with a filter. The streams that will be discarded should then be freed + by calling deflateEnd. Note that deflateCopy duplicates the internal + compression state which can be quite large, so this strategy is slow and can + consume lots of memory. + + deflateCopy returns Z_OK if success, Z_MEM_ERROR if there was not + enough memory, Z_STREAM_ERROR if the source stream state was inconsistent + (such as zalloc being Z_NULL). msg is left unchanged in both source and + destination. +*/ + +ZEXTERN int ZEXPORT deflateReset(z_streamp strm); +/* + This function is equivalent to deflateEnd followed by deflateInit, but + does not free and reallocate the internal compression state. The stream + will leave the compression level and any other attributes that may have been + set unchanged. total_in, total_out, adler, and msg are initialized. + + deflateReset returns Z_OK if success, or Z_STREAM_ERROR if the source + stream state was inconsistent (such as zalloc or state being Z_NULL). +*/ + +ZEXTERN int ZEXPORT deflateParams(z_streamp strm, + int level, + int strategy); +/* + Dynamically update the compression level and compression strategy. The + interpretation of level and strategy is as in deflateInit2(). This can be + used to switch between compression and straight copy of the input data, or + to switch to a different kind of input data requiring a different strategy. + If the compression approach (which is a function of the level) or the + strategy is changed, and if there have been any deflate() calls since the + state was initialized or reset, then the input available so far is + compressed with the old level and strategy using deflate(strm, Z_BLOCK). + There are three approaches for the compression levels 0, 1..3, and 4..9 + respectively. The new level and strategy will take effect at the next call + of deflate(). + + If a deflate(strm, Z_BLOCK) is performed by deflateParams(), and it does + not have enough output space to complete, then the parameter change will not + take effect. In this case, deflateParams() can be called again with the + same parameters and more output space to try again. + + In order to assure a change in the parameters on the first try, the + deflate stream should be flushed using deflate() with Z_BLOCK or other flush + request until strm.avail_out is not zero, before calling deflateParams(). + Then no more input data should be provided before the deflateParams() call. + If this is done, the old level and strategy will be applied to the data + compressed before deflateParams(), and the new level and strategy will be + applied to the data compressed after deflateParams(). + + deflateParams returns Z_OK on success, Z_STREAM_ERROR if the source stream + state was inconsistent or if a parameter was invalid, or Z_BUF_ERROR if + there was not enough output space to complete the compression of the + available input data before a change in the strategy or approach. Note that + in the case of a Z_BUF_ERROR, the parameters are not changed. A return + value of Z_BUF_ERROR is not fatal, in which case deflateParams() can be + retried with more output space. +*/ + +ZEXTERN int ZEXPORT deflateTune(z_streamp strm, + int good_length, + int max_lazy, + int nice_length, + int max_chain); +/* + Fine tune deflate's internal compression parameters. This should only be + used by someone who understands the algorithm used by zlib's deflate for + searching for the best matching string, and even then only by the most + fanatic optimizer trying to squeeze out the last compressed bit for their + specific input data. Read the deflate.c source code for the meaning of the + max_lazy, good_length, nice_length, and max_chain parameters. + + deflateTune() can be called after deflateInit() or deflateInit2(), and + returns Z_OK on success, or Z_STREAM_ERROR for an invalid deflate stream. + */ + +ZEXTERN uLong ZEXPORT deflateBound(z_streamp strm, + uLong sourceLen); +/* + deflateBound() returns an upper bound on the compressed size after + deflation of sourceLen bytes. It must be called after deflateInit() or + deflateInit2(), and after deflateSetHeader(), if used. This would be used + to allocate an output buffer for deflation in a single pass, and so would be + called before deflate(). If that first deflate() call is provided the + sourceLen input bytes, an output buffer allocated to the size returned by + deflateBound(), and the flush value Z_FINISH, then deflate() is guaranteed + to return Z_STREAM_END. Note that it is possible for the compressed size to + be larger than the value returned by deflateBound() if flush options other + than Z_FINISH or Z_NO_FLUSH are used. +*/ + +ZEXTERN int ZEXPORT deflatePending(z_streamp strm, + unsigned *pending, + int *bits); +/* + deflatePending() returns the number of bytes and bits of output that have + been generated, but not yet provided in the available output. The bytes not + provided would be due to the available output space having being consumed. + The number of bits of output not provided are between 0 and 7, where they + await more bits to join them in order to fill out a full byte. If pending + or bits are Z_NULL, then those values are not set. + + deflatePending returns Z_OK if success, or Z_STREAM_ERROR if the source + stream state was inconsistent. + */ + +ZEXTERN int ZEXPORT deflatePrime(z_streamp strm, + int bits, + int value); +/* + deflatePrime() inserts bits in the deflate output stream. The intent + is that this function is used to start off the deflate output with the bits + leftover from a previous deflate stream when appending to it. As such, this + function can only be used for raw deflate, and must be used before the first + deflate() call after a deflateInit2() or deflateReset(). bits must be less + than or equal to 16, and that many of the least significant bits of value + will be inserted in the output. + + deflatePrime returns Z_OK if success, Z_BUF_ERROR if there was not enough + room in the internal buffer to insert the bits, or Z_STREAM_ERROR if the + source stream state was inconsistent. +*/ + +ZEXTERN int ZEXPORT deflateSetHeader(z_streamp strm, + gz_headerp head); +/* + deflateSetHeader() provides gzip header information for when a gzip + stream is requested by deflateInit2(). deflateSetHeader() may be called + after deflateInit2() or deflateReset() and before the first call of + deflate(). The text, time, os, extra field, name, and comment information + in the provided gz_header structure are written to the gzip header (xflag is + ignored -- the extra flags are set according to the compression level). The + caller must assure that, if not Z_NULL, name and comment are terminated with + a zero byte, and that if extra is not Z_NULL, that extra_len bytes are + available there. If hcrc is true, a gzip header crc is included. Note that + the current versions of the command-line version of gzip (up through version + 1.3.x) do not support header crc's, and will report that it is a "multi-part + gzip file" and give up. + + If deflateSetHeader is not used, the default gzip header has text false, + the time set to zero, and os set to the current operating system, with no + extra, name, or comment fields. The gzip header is returned to the default + state by deflateReset(). + + deflateSetHeader returns Z_OK if success, or Z_STREAM_ERROR if the source + stream state was inconsistent. +*/ + +/* +ZEXTERN int ZEXPORT inflateInit2(z_streamp strm, + int windowBits); + + This is another version of inflateInit with an extra parameter. The + fields next_in, avail_in, zalloc, zfree and opaque must be initialized + before by the caller. + + The windowBits parameter is the base two logarithm of the maximum window + size (the size of the history buffer). It should be in the range 8..15 for + this version of the library. The default value is 15 if inflateInit is used + instead. windowBits must be greater than or equal to the windowBits value + provided to deflateInit2() while compressing, or it must be equal to 15 if + deflateInit2() was not used. If a compressed stream with a larger window + size is given as input, inflate() will return with the error code + Z_DATA_ERROR instead of trying to allocate a larger window. + + windowBits can also be zero to request that inflate use the window size in + the zlib header of the compressed stream. + + windowBits can also be -8..-15 for raw inflate. In this case, -windowBits + determines the window size. inflate() will then process raw deflate data, + not looking for a zlib or gzip header, not generating a check value, and not + looking for any check values for comparison at the end of the stream. This + is for use with other formats that use the deflate compressed data format + such as zip. Those formats provide their own check values. If a custom + format is developed using the raw deflate format for compressed data, it is + recommended that a check value such as an Adler-32 or a CRC-32 be applied to + the uncompressed data as is done in the zlib, gzip, and zip formats. For + most applications, the zlib format should be used as is. Note that comments + above on the use in deflateInit2() applies to the magnitude of windowBits. + + windowBits can also be greater than 15 for optional gzip decoding. Add + 32 to windowBits to enable zlib and gzip decoding with automatic header + detection, or add 16 to decode only the gzip format (the zlib format will + return a Z_DATA_ERROR). If a gzip stream is being decoded, strm->adler is a + CRC-32 instead of an Adler-32. Unlike the gunzip utility and gzread() (see + below), inflate() will *not* automatically decode concatenated gzip members. + inflate() will return Z_STREAM_END at the end of the gzip member. The state + would need to be reset to continue decoding a subsequent gzip member. This + *must* be done if there is more data after a gzip member, in order for the + decompression to be compliant with the gzip standard (RFC 1952). + + inflateInit2 returns Z_OK if success, Z_MEM_ERROR if there was not enough + memory, Z_VERSION_ERROR if the zlib library version is incompatible with the + version assumed by the caller, or Z_STREAM_ERROR if the parameters are + invalid, such as a null pointer to the structure. msg is set to null if + there is no error message. inflateInit2 does not perform any decompression + apart from possibly reading the zlib header if present: actual decompression + will be done by inflate(). (So next_in and avail_in may be modified, but + next_out and avail_out are unused and unchanged.) The current implementation + of inflateInit2() does not process any header information -- that is + deferred until inflate() is called. +*/ + +ZEXTERN int ZEXPORT inflateSetDictionary(z_streamp strm, + const Bytef *dictionary, + uInt dictLength); +/* + Initializes the decompression dictionary from the given uncompressed byte + sequence. This function must be called immediately after a call of inflate, + if that call returned Z_NEED_DICT. The dictionary chosen by the compressor + can be determined from the Adler-32 value returned by that call of inflate. + The compressor and decompressor must use exactly the same dictionary (see + deflateSetDictionary). For raw inflate, this function can be called at any + time to set the dictionary. If the provided dictionary is smaller than the + window and there is already data in the window, then the provided dictionary + will amend what's there. The application must insure that the dictionary + that was used for compression is provided. + + inflateSetDictionary returns Z_OK if success, Z_STREAM_ERROR if a + parameter is invalid (e.g. dictionary being Z_NULL) or the stream state is + inconsistent, Z_DATA_ERROR if the given dictionary doesn't match the + expected one (incorrect Adler-32 value). inflateSetDictionary does not + perform any decompression: this will be done by subsequent calls of + inflate(). +*/ + +ZEXTERN int ZEXPORT inflateGetDictionary(z_streamp strm, + Bytef *dictionary, + uInt *dictLength); +/* + Returns the sliding dictionary being maintained by inflate. dictLength is + set to the number of bytes in the dictionary, and that many bytes are copied + to dictionary. dictionary must have enough space, where 32768 bytes is + always enough. If inflateGetDictionary() is called with dictionary equal to + Z_NULL, then only the dictionary length is returned, and nothing is copied. + Similarly, if dictLength is Z_NULL, then it is not set. + + inflateGetDictionary returns Z_OK on success, or Z_STREAM_ERROR if the + stream state is inconsistent. +*/ + +ZEXTERN int ZEXPORT inflateSync(z_streamp strm); +/* + Skips invalid compressed data until a possible full flush point (see above + for the description of deflate with Z_FULL_FLUSH) can be found, or until all + available input is skipped. No output is provided. + + inflateSync searches for a 00 00 FF FF pattern in the compressed data. + All full flush points have this pattern, but not all occurrences of this + pattern are full flush points. + + inflateSync returns Z_OK if a possible full flush point has been found, + Z_BUF_ERROR if no more input was provided, Z_DATA_ERROR if no flush point + has been found, or Z_STREAM_ERROR if the stream structure was inconsistent. + In the success case, the application may save the current value of total_in + which indicates where valid compressed data was found. In the error case, + the application may repeatedly call inflateSync, providing more input each + time, until success or end of the input data. +*/ + +ZEXTERN int ZEXPORT inflateCopy(z_streamp dest, + z_streamp source); +/* + Sets the destination stream as a complete copy of the source stream. + + This function can be useful when randomly accessing a large stream. The + first pass through the stream can periodically record the inflate state, + allowing restarting inflate at those points when randomly accessing the + stream. + + inflateCopy returns Z_OK if success, Z_MEM_ERROR if there was not + enough memory, Z_STREAM_ERROR if the source stream state was inconsistent + (such as zalloc being Z_NULL). msg is left unchanged in both source and + destination. +*/ + +ZEXTERN int ZEXPORT inflateReset(z_streamp strm); +/* + This function is equivalent to inflateEnd followed by inflateInit, + but does not free and reallocate the internal decompression state. The + stream will keep attributes that may have been set by inflateInit2. + total_in, total_out, adler, and msg are initialized. + + inflateReset returns Z_OK if success, or Z_STREAM_ERROR if the source + stream state was inconsistent (such as zalloc or state being Z_NULL). +*/ + +ZEXTERN int ZEXPORT inflateReset2(z_streamp strm, + int windowBits); +/* + This function is the same as inflateReset, but it also permits changing + the wrap and window size requests. The windowBits parameter is interpreted + the same as it is for inflateInit2. If the window size is changed, then the + memory allocated for the window is freed, and the window will be reallocated + by inflate() if needed. + + inflateReset2 returns Z_OK if success, or Z_STREAM_ERROR if the source + stream state was inconsistent (such as zalloc or state being Z_NULL), or if + the windowBits parameter is invalid. +*/ + +ZEXTERN int ZEXPORT inflatePrime(z_streamp strm, + int bits, + int value); +/* + This function inserts bits in the inflate input stream. The intent is + that this function is used to start inflating at a bit position in the + middle of a byte. The provided bits will be used before any bytes are used + from next_in. This function should only be used with raw inflate, and + should be used before the first inflate() call after inflateInit2() or + inflateReset(). bits must be less than or equal to 16, and that many of the + least significant bits of value will be inserted in the input. + + If bits is negative, then the input stream bit buffer is emptied. Then + inflatePrime() can be called again to put bits in the buffer. This is used + to clear out bits leftover after feeding inflate a block description prior + to feeding inflate codes. + + inflatePrime returns Z_OK if success, or Z_STREAM_ERROR if the source + stream state was inconsistent. +*/ + +ZEXTERN long ZEXPORT inflateMark(z_streamp strm); +/* + This function returns two values, one in the lower 16 bits of the return + value, and the other in the remaining upper bits, obtained by shifting the + return value down 16 bits. If the upper value is -1 and the lower value is + zero, then inflate() is currently decoding information outside of a block. + If the upper value is -1 and the lower value is non-zero, then inflate is in + the middle of a stored block, with the lower value equaling the number of + bytes from the input remaining to copy. If the upper value is not -1, then + it is the number of bits back from the current bit position in the input of + the code (literal or length/distance pair) currently being processed. In + that case the lower value is the number of bytes already emitted for that + code. + + A code is being processed if inflate is waiting for more input to complete + decoding of the code, or if it has completed decoding but is waiting for + more output space to write the literal or match data. + + inflateMark() is used to mark locations in the input data for random + access, which may be at bit positions, and to note those cases where the + output of a code may span boundaries of random access blocks. The current + location in the input stream can be determined from avail_in and data_type + as noted in the description for the Z_BLOCK flush parameter for inflate. + + inflateMark returns the value noted above, or -65536 if the provided + source stream state was inconsistent. +*/ + +ZEXTERN int ZEXPORT inflateGetHeader(z_streamp strm, + gz_headerp head); +/* + inflateGetHeader() requests that gzip header information be stored in the + provided gz_header structure. inflateGetHeader() may be called after + inflateInit2() or inflateReset(), and before the first call of inflate(). + As inflate() processes the gzip stream, head->done is zero until the header + is completed, at which time head->done is set to one. If a zlib stream is + being decoded, then head->done is set to -1 to indicate that there will be + no gzip header information forthcoming. Note that Z_BLOCK or Z_TREES can be + used to force inflate() to return immediately after header processing is + complete and before any actual data is decompressed. + + The text, time, xflags, and os fields are filled in with the gzip header + contents. hcrc is set to true if there is a header CRC. (The header CRC + was valid if done is set to one.) If extra is not Z_NULL, then extra_max + contains the maximum number of bytes to write to extra. Once done is true, + extra_len contains the actual extra field length, and extra contains the + extra field, or that field truncated if extra_max is less than extra_len. + If name is not Z_NULL, then up to name_max characters are written there, + terminated with a zero unless the length is greater than name_max. If + comment is not Z_NULL, then up to comm_max characters are written there, + terminated with a zero unless the length is greater than comm_max. When any + of extra, name, or comment are not Z_NULL and the respective field is not + present in the header, then that field is set to Z_NULL to signal its + absence. This allows the use of deflateSetHeader() with the returned + structure to duplicate the header. However if those fields are set to + allocated memory, then the application will need to save those pointers + elsewhere so that they can be eventually freed. + + If inflateGetHeader is not used, then the header information is simply + discarded. The header is always checked for validity, including the header + CRC if present. inflateReset() will reset the process to discard the header + information. The application would need to call inflateGetHeader() again to + retrieve the header from the next gzip stream. + + inflateGetHeader returns Z_OK if success, or Z_STREAM_ERROR if the source + stream state was inconsistent. +*/ + +/* +ZEXTERN int ZEXPORT inflateBackInit(z_streamp strm, int windowBits, + unsigned char FAR *window); + + Initialize the internal stream state for decompression using inflateBack() + calls. The fields zalloc, zfree and opaque in strm must be initialized + before the call. If zalloc and zfree are Z_NULL, then the default library- + derived memory allocation routines are used. windowBits is the base two + logarithm of the window size, in the range 8..15. window is a caller + supplied buffer of that size. Except for special applications where it is + assured that deflate was used with small window sizes, windowBits must be 15 + and a 32K byte window must be supplied to be able to decompress general + deflate streams. + + See inflateBack() for the usage of these routines. + + inflateBackInit will return Z_OK on success, Z_STREAM_ERROR if any of + the parameters are invalid, Z_MEM_ERROR if the internal state could not be + allocated, or Z_VERSION_ERROR if the version of the library does not match + the version of the header file. +*/ + +typedef unsigned (*in_func)(void FAR *, + z_const unsigned char FAR * FAR *); +typedef int (*out_func)(void FAR *, unsigned char FAR *, unsigned); + +ZEXTERN int ZEXPORT inflateBack(z_streamp strm, + in_func in, void FAR *in_desc, + out_func out, void FAR *out_desc); +/* + inflateBack() does a raw inflate with a single call using a call-back + interface for input and output. This is potentially more efficient than + inflate() for file i/o applications, in that it avoids copying between the + output and the sliding window by simply making the window itself the output + buffer. inflate() can be faster on modern CPUs when used with large + buffers. inflateBack() trusts the application to not change the output + buffer passed by the output function, at least until inflateBack() returns. + + inflateBackInit() must be called first to allocate the internal state + and to initialize the state with the user-provided window buffer. + inflateBack() may then be used multiple times to inflate a complete, raw + deflate stream with each call. inflateBackEnd() is then called to free the + allocated state. + + A raw deflate stream is one with no zlib or gzip header or trailer. + This routine would normally be used in a utility that reads zip or gzip + files and writes out uncompressed files. The utility would decode the + header and process the trailer on its own, hence this routine expects only + the raw deflate stream to decompress. This is different from the default + behavior of inflate(), which expects a zlib header and trailer around the + deflate stream. + + inflateBack() uses two subroutines supplied by the caller that are then + called by inflateBack() for input and output. inflateBack() calls those + routines until it reads a complete deflate stream and writes out all of the + uncompressed data, or until it encounters an error. The function's + parameters and return types are defined above in the in_func and out_func + typedefs. inflateBack() will call in(in_desc, &buf) which should return the + number of bytes of provided input, and a pointer to that input in buf. If + there is no input available, in() must return zero -- buf is ignored in that + case -- and inflateBack() will return a buffer error. inflateBack() will + call out(out_desc, buf, len) to write the uncompressed data buf[0..len-1]. + out() should return zero on success, or non-zero on failure. If out() + returns non-zero, inflateBack() will return with an error. Neither in() nor + out() are permitted to change the contents of the window provided to + inflateBackInit(), which is also the buffer that out() uses to write from. + The length written by out() will be at most the window size. Any non-zero + amount of input may be provided by in(). + + For convenience, inflateBack() can be provided input on the first call by + setting strm->next_in and strm->avail_in. If that input is exhausted, then + in() will be called. Therefore strm->next_in must be initialized before + calling inflateBack(). If strm->next_in is Z_NULL, then in() will be called + immediately for input. If strm->next_in is not Z_NULL, then strm->avail_in + must also be initialized, and then if strm->avail_in is not zero, input will + initially be taken from strm->next_in[0 .. strm->avail_in - 1]. + + The in_desc and out_desc parameters of inflateBack() is passed as the + first parameter of in() and out() respectively when they are called. These + descriptors can be optionally used to pass any information that the caller- + supplied in() and out() functions need to do their job. + + On return, inflateBack() will set strm->next_in and strm->avail_in to + pass back any unused input that was provided by the last in() call. The + return values of inflateBack() can be Z_STREAM_END on success, Z_BUF_ERROR + if in() or out() returned an error, Z_DATA_ERROR if there was a format error + in the deflate stream (in which case strm->msg is set to indicate the nature + of the error), or Z_STREAM_ERROR if the stream was not properly initialized. + In the case of Z_BUF_ERROR, an input or output error can be distinguished + using strm->next_in which will be Z_NULL only if in() returned an error. If + strm->next_in is not Z_NULL, then the Z_BUF_ERROR was due to out() returning + non-zero. (in() will always be called before out(), so strm->next_in is + assured to be defined if out() returns non-zero.) Note that inflateBack() + cannot return Z_OK. +*/ + +ZEXTERN int ZEXPORT inflateBackEnd(z_streamp strm); +/* + All memory allocated by inflateBackInit() is freed. + + inflateBackEnd() returns Z_OK on success, or Z_STREAM_ERROR if the stream + state was inconsistent. +*/ + +ZEXTERN uLong ZEXPORT zlibCompileFlags(void); +/* Return flags indicating compile-time options. + + Type sizes, two bits each, 00 = 16 bits, 01 = 32, 10 = 64, 11 = other: + 1.0: size of uInt + 3.2: size of uLong + 5.4: size of voidpf (pointer) + 7.6: size of z_off_t + + Compiler, assembler, and debug options: + 8: ZLIB_DEBUG + 9: ASMV or ASMINF -- use ASM code + 10: ZLIB_WINAPI -- exported functions use the WINAPI calling convention + 11: 0 (reserved) + + One-time table building (smaller code, but not thread-safe if true): + 12: BUILDFIXED -- build static block decoding tables when needed + 13: DYNAMIC_CRC_TABLE -- build CRC calculation tables when needed + 14,15: 0 (reserved) + + Library content (indicates missing functionality): + 16: NO_GZCOMPRESS -- gz* functions cannot compress (to avoid linking + deflate code when not needed) + 17: NO_GZIP -- deflate can't write gzip streams, and inflate can't detect + and decode gzip streams (to avoid linking crc code) + 18-19: 0 (reserved) + + Operation variations (changes in library functionality): + 20: PKZIP_BUG_WORKAROUND -- slightly more permissive inflate + 21: FASTEST -- deflate algorithm with only one, lowest compression level + 22,23: 0 (reserved) + + The sprintf variant used by gzprintf (zero is best): + 24: 0 = vs*, 1 = s* -- 1 means limited to 20 arguments after the format + 25: 0 = *nprintf, 1 = *printf -- 1 means gzprintf() not secure! + 26: 0 = returns value, 1 = void -- 1 means inferred string length returned + + Remainder: + 27-31: 0 (reserved) + */ + +#ifndef Z_SOLO + + /* utility functions */ + +/* + The following utility functions are implemented on top of the basic + stream-oriented functions. To simplify the interface, some default options + are assumed (compression level and memory usage, standard memory allocation + functions). The source code of these utility functions can be modified if + you need special options. +*/ + +ZEXTERN int ZEXPORT compress(Bytef *dest, uLongf *destLen, + const Bytef *source, uLong sourceLen); +/* + Compresses the source buffer into the destination buffer. sourceLen is + the byte length of the source buffer. Upon entry, destLen is the total size + of the destination buffer, which must be at least the value returned by + compressBound(sourceLen). Upon exit, destLen is the actual size of the + compressed data. compress() is equivalent to compress2() with a level + parameter of Z_DEFAULT_COMPRESSION. + + compress returns Z_OK if success, Z_MEM_ERROR if there was not + enough memory, Z_BUF_ERROR if there was not enough room in the output + buffer. +*/ + +ZEXTERN int ZEXPORT compress2(Bytef *dest, uLongf *destLen, + const Bytef *source, uLong sourceLen, + int level); +/* + Compresses the source buffer into the destination buffer. The level + parameter has the same meaning as in deflateInit. sourceLen is the byte + length of the source buffer. Upon entry, destLen is the total size of the + destination buffer, which must be at least the value returned by + compressBound(sourceLen). Upon exit, destLen is the actual size of the + compressed data. + + compress2 returns Z_OK if success, Z_MEM_ERROR if there was not enough + memory, Z_BUF_ERROR if there was not enough room in the output buffer, + Z_STREAM_ERROR if the level parameter is invalid. +*/ + +ZEXTERN uLong ZEXPORT compressBound(uLong sourceLen); +/* + compressBound() returns an upper bound on the compressed size after + compress() or compress2() on sourceLen bytes. It would be used before a + compress() or compress2() call to allocate the destination buffer. +*/ + +ZEXTERN int ZEXPORT uncompress(Bytef *dest, uLongf *destLen, + const Bytef *source, uLong sourceLen); +/* + Decompresses the source buffer into the destination buffer. sourceLen is + the byte length of the source buffer. Upon entry, destLen is the total size + of the destination buffer, which must be large enough to hold the entire + uncompressed data. (The size of the uncompressed data must have been saved + previously by the compressor and transmitted to the decompressor by some + mechanism outside the scope of this compression library.) Upon exit, destLen + is the actual size of the uncompressed data. + + uncompress returns Z_OK if success, Z_MEM_ERROR if there was not + enough memory, Z_BUF_ERROR if there was not enough room in the output + buffer, or Z_DATA_ERROR if the input data was corrupted or incomplete. In + the case where there is not enough room, uncompress() will fill the output + buffer with the uncompressed data up to that point. +*/ + +ZEXTERN int ZEXPORT uncompress2(Bytef *dest, uLongf *destLen, + const Bytef *source, uLong *sourceLen); +/* + Same as uncompress, except that sourceLen is a pointer, where the + length of the source is *sourceLen. On return, *sourceLen is the number of + source bytes consumed. +*/ + + /* gzip file access functions */ + +/* + This library supports reading and writing files in gzip (.gz) format with + an interface similar to that of stdio, using the functions that start with + "gz". The gzip format is different from the zlib format. gzip is a gzip + wrapper, documented in RFC 1952, wrapped around a deflate stream. +*/ + +typedef struct gzFile_s *gzFile; /* semi-opaque gzip file descriptor */ + +/* +ZEXTERN gzFile ZEXPORT gzopen(const char *path, const char *mode); + + Open the gzip (.gz) file at path for reading and decompressing, or + compressing and writing. The mode parameter is as in fopen ("rb" or "wb") + but can also include a compression level ("wb9") or a strategy: 'f' for + filtered data as in "wb6f", 'h' for Huffman-only compression as in "wb1h", + 'R' for run-length encoding as in "wb1R", or 'F' for fixed code compression + as in "wb9F". (See the description of deflateInit2 for more information + about the strategy parameter.) 'T' will request transparent writing or + appending with no compression and not using the gzip format. + + "a" can be used instead of "w" to request that the gzip stream that will + be written be appended to the file. "+" will result in an error, since + reading and writing to the same gzip file is not supported. The addition of + "x" when writing will create the file exclusively, which fails if the file + already exists. On systems that support it, the addition of "e" when + reading or writing will set the flag to close the file on an execve() call. + + These functions, as well as gzip, will read and decode a sequence of gzip + streams in a file. The append function of gzopen() can be used to create + such a file. (Also see gzflush() for another way to do this.) When + appending, gzopen does not test whether the file begins with a gzip stream, + nor does it look for the end of the gzip streams to begin appending. gzopen + will simply append a gzip stream to the existing file. + + gzopen can be used to read a file which is not in gzip format; in this + case gzread will directly read from the file without decompression. When + reading, this will be detected automatically by looking for the magic two- + byte gzip header. + + gzopen returns NULL if the file could not be opened, if there was + insufficient memory to allocate the gzFile state, or if an invalid mode was + specified (an 'r', 'w', or 'a' was not provided, or '+' was provided). + errno can be checked to determine if the reason gzopen failed was that the + file could not be opened. +*/ + +ZEXTERN gzFile ZEXPORT gzdopen(int fd, const char *mode); +/* + Associate a gzFile with the file descriptor fd. File descriptors are + obtained from calls like open, dup, creat, pipe or fileno (if the file has + been previously opened with fopen). The mode parameter is as in gzopen. + + The next call of gzclose on the returned gzFile will also close the file + descriptor fd, just like fclose(fdopen(fd, mode)) closes the file descriptor + fd. If you want to keep fd open, use fd = dup(fd_keep); gz = gzdopen(fd, + mode);. The duplicated descriptor should be saved to avoid a leak, since + gzdopen does not close fd if it fails. If you are using fileno() to get the + file descriptor from a FILE *, then you will have to use dup() to avoid + double-close()ing the file descriptor. Both gzclose() and fclose() will + close the associated file descriptor, so they need to have different file + descriptors. + + gzdopen returns NULL if there was insufficient memory to allocate the + gzFile state, if an invalid mode was specified (an 'r', 'w', or 'a' was not + provided, or '+' was provided), or if fd is -1. The file descriptor is not + used until the next gz* read, write, seek, or close operation, so gzdopen + will not detect if fd is invalid (unless fd is -1). +*/ + +ZEXTERN int ZEXPORT gzbuffer(gzFile file, unsigned size); +/* + Set the internal buffer size used by this library's functions for file to + size. The default buffer size is 8192 bytes. This function must be called + after gzopen() or gzdopen(), and before any other calls that read or write + the file. The buffer memory allocation is always deferred to the first read + or write. Three times that size in buffer space is allocated. A larger + buffer size of, for example, 64K or 128K bytes will noticeably increase the + speed of decompression (reading). + + The new buffer size also affects the maximum length for gzprintf(). + + gzbuffer() returns 0 on success, or -1 on failure, such as being called + too late. +*/ + +ZEXTERN int ZEXPORT gzsetparams(gzFile file, int level, int strategy); +/* + Dynamically update the compression level and strategy for file. See the + description of deflateInit2 for the meaning of these parameters. Previously + provided data is flushed before applying the parameter changes. + + gzsetparams returns Z_OK if success, Z_STREAM_ERROR if the file was not + opened for writing, Z_ERRNO if there is an error writing the flushed data, + or Z_MEM_ERROR if there is a memory allocation error. +*/ + +ZEXTERN int ZEXPORT gzread(gzFile file, voidp buf, unsigned len); +/* + Read and decompress up to len uncompressed bytes from file into buf. If + the input file is not in gzip format, gzread copies the given number of + bytes into the buffer directly from the file. + + After reaching the end of a gzip stream in the input, gzread will continue + to read, looking for another gzip stream. Any number of gzip streams may be + concatenated in the input file, and will all be decompressed by gzread(). + If something other than a gzip stream is encountered after a gzip stream, + that remaining trailing garbage is ignored (and no error is returned). + + gzread can be used to read a gzip file that is being concurrently written. + Upon reaching the end of the input, gzread will return with the available + data. If the error code returned by gzerror is Z_OK or Z_BUF_ERROR, then + gzclearerr can be used to clear the end of file indicator in order to permit + gzread to be tried again. Z_OK indicates that a gzip stream was completed + on the last gzread. Z_BUF_ERROR indicates that the input file ended in the + middle of a gzip stream. Note that gzread does not return -1 in the event + of an incomplete gzip stream. This error is deferred until gzclose(), which + will return Z_BUF_ERROR if the last gzread ended in the middle of a gzip + stream. Alternatively, gzerror can be used before gzclose to detect this + case. + + gzread returns the number of uncompressed bytes actually read, less than + len for end of file, or -1 for error. If len is too large to fit in an int, + then nothing is read, -1 is returned, and the error state is set to + Z_STREAM_ERROR. +*/ + +ZEXTERN z_size_t ZEXPORT gzfread(voidp buf, z_size_t size, z_size_t nitems, + gzFile file); +/* + Read and decompress up to nitems items of size size from file into buf, + otherwise operating as gzread() does. This duplicates the interface of + stdio's fread(), with size_t request and return types. If the library + defines size_t, then z_size_t is identical to size_t. If not, then z_size_t + is an unsigned integer type that can contain a pointer. + + gzfread() returns the number of full items read of size size, or zero if + the end of the file was reached and a full item could not be read, or if + there was an error. gzerror() must be consulted if zero is returned in + order to determine if there was an error. If the multiplication of size and + nitems overflows, i.e. the product does not fit in a z_size_t, then nothing + is read, zero is returned, and the error state is set to Z_STREAM_ERROR. + + In the event that the end of file is reached and only a partial item is + available at the end, i.e. the remaining uncompressed data length is not a + multiple of size, then the final partial item is nevertheless read into buf + and the end-of-file flag is set. The length of the partial item read is not + provided, but could be inferred from the result of gztell(). This behavior + is the same as the behavior of fread() implementations in common libraries, + but it prevents the direct use of gzfread() to read a concurrently written + file, resetting and retrying on end-of-file, when size is not 1. +*/ + +ZEXTERN int ZEXPORT gzwrite(gzFile file, voidpc buf, unsigned len); +/* + Compress and write the len uncompressed bytes at buf to file. gzwrite + returns the number of uncompressed bytes written or 0 in case of error. +*/ + +ZEXTERN z_size_t ZEXPORT gzfwrite(voidpc buf, z_size_t size, + z_size_t nitems, gzFile file); +/* + Compress and write nitems items of size size from buf to file, duplicating + the interface of stdio's fwrite(), with size_t request and return types. If + the library defines size_t, then z_size_t is identical to size_t. If not, + then z_size_t is an unsigned integer type that can contain a pointer. + + gzfwrite() returns the number of full items written of size size, or zero + if there was an error. If the multiplication of size and nitems overflows, + i.e. the product does not fit in a z_size_t, then nothing is written, zero + is returned, and the error state is set to Z_STREAM_ERROR. +*/ + +ZEXTERN int ZEXPORTVA gzprintf(gzFile file, const char *format, ...); +/* + Convert, format, compress, and write the arguments (...) to file under + control of the string format, as in fprintf. gzprintf returns the number of + uncompressed bytes actually written, or a negative zlib error code in case + of error. The number of uncompressed bytes written is limited to 8191, or + one less than the buffer size given to gzbuffer(). The caller should assure + that this limit is not exceeded. If it is exceeded, then gzprintf() will + return an error (0) with nothing written. In this case, there may also be a + buffer overflow with unpredictable consequences, which is possible only if + zlib was compiled with the insecure functions sprintf() or vsprintf(), + because the secure snprintf() or vsnprintf() functions were not available. + This can be determined using zlibCompileFlags(). +*/ + +ZEXTERN int ZEXPORT gzputs(gzFile file, const char *s); +/* + Compress and write the given null-terminated string s to file, excluding + the terminating null character. + + gzputs returns the number of characters written, or -1 in case of error. +*/ + +ZEXTERN char * ZEXPORT gzgets(gzFile file, char *buf, int len); +/* + Read and decompress bytes from file into buf, until len-1 characters are + read, or until a newline character is read and transferred to buf, or an + end-of-file condition is encountered. If any characters are read or if len + is one, the string is terminated with a null character. If no characters + are read due to an end-of-file or len is less than one, then the buffer is + left untouched. + + gzgets returns buf which is a null-terminated string, or it returns NULL + for end-of-file or in case of error. If there was an error, the contents at + buf are indeterminate. +*/ + +ZEXTERN int ZEXPORT gzputc(gzFile file, int c); +/* + Compress and write c, converted to an unsigned char, into file. gzputc + returns the value that was written, or -1 in case of error. +*/ + +ZEXTERN int ZEXPORT gzgetc(gzFile file); +/* + Read and decompress one byte from file. gzgetc returns this byte or -1 + in case of end of file or error. This is implemented as a macro for speed. + As such, it does not do all of the checking the other functions do. I.e. + it does not check to see if file is NULL, nor whether the structure file + points to has been clobbered or not. +*/ + +ZEXTERN int ZEXPORT gzungetc(int c, gzFile file); +/* + Push c back onto the stream for file to be read as the first character on + the next read. At least one character of push-back is always allowed. + gzungetc() returns the character pushed, or -1 on failure. gzungetc() will + fail if c is -1, and may fail if a character has been pushed but not read + yet. If gzungetc is used immediately after gzopen or gzdopen, at least the + output buffer size of pushed characters is allowed. (See gzbuffer above.) + The pushed character will be discarded if the stream is repositioned with + gzseek() or gzrewind(). +*/ + +ZEXTERN int ZEXPORT gzflush(gzFile file, int flush); +/* + Flush all pending output to file. The parameter flush is as in the + deflate() function. The return value is the zlib error number (see function + gzerror below). gzflush is only permitted when writing. + + If the flush parameter is Z_FINISH, the remaining data is written and the + gzip stream is completed in the output. If gzwrite() is called again, a new + gzip stream will be started in the output. gzread() is able to read such + concatenated gzip streams. + + gzflush should be called only when strictly necessary because it will + degrade compression if called too often. +*/ + +/* +ZEXTERN z_off_t ZEXPORT gzseek(gzFile file, + z_off_t offset, int whence); + + Set the starting position to offset relative to whence for the next gzread + or gzwrite on file. The offset represents a number of bytes in the + uncompressed data stream. The whence parameter is defined as in lseek(2); + the value SEEK_END is not supported. + + If the file is opened for reading, this function is emulated but can be + extremely slow. If the file is opened for writing, only forward seeks are + supported; gzseek then compresses a sequence of zeroes up to the new + starting position. + + gzseek returns the resulting offset location as measured in bytes from + the beginning of the uncompressed stream, or -1 in case of error, in + particular if the file is opened for writing and the new starting position + would be before the current position. +*/ + +ZEXTERN int ZEXPORT gzrewind(gzFile file); +/* + Rewind file. This function is supported only for reading. + + gzrewind(file) is equivalent to (int)gzseek(file, 0L, SEEK_SET). +*/ + +/* +ZEXTERN z_off_t ZEXPORT gztell(gzFile file); + + Return the starting position for the next gzread or gzwrite on file. + This position represents a number of bytes in the uncompressed data stream, + and is zero when starting, even if appending or reading a gzip stream from + the middle of a file using gzdopen(). + + gztell(file) is equivalent to gzseek(file, 0L, SEEK_CUR) +*/ + +/* +ZEXTERN z_off_t ZEXPORT gzoffset(gzFile file); + + Return the current compressed (actual) read or write offset of file. This + offset includes the count of bytes that precede the gzip stream, for example + when appending or when using gzdopen() for reading. When reading, the + offset does not include as yet unused buffered input. This information can + be used for a progress indicator. On error, gzoffset() returns -1. +*/ + +ZEXTERN int ZEXPORT gzeof(gzFile file); +/* + Return true (1) if the end-of-file indicator for file has been set while + reading, false (0) otherwise. Note that the end-of-file indicator is set + only if the read tried to go past the end of the input, but came up short. + Therefore, just like feof(), gzeof() may return false even if there is no + more data to read, in the event that the last read request was for the exact + number of bytes remaining in the input file. This will happen if the input + file size is an exact multiple of the buffer size. + + If gzeof() returns true, then the read functions will return no more data, + unless the end-of-file indicator is reset by gzclearerr() and the input file + has grown since the previous end of file was detected. +*/ + +ZEXTERN int ZEXPORT gzdirect(gzFile file); +/* + Return true (1) if file is being copied directly while reading, or false + (0) if file is a gzip stream being decompressed. + + If the input file is empty, gzdirect() will return true, since the input + does not contain a gzip stream. + + If gzdirect() is used immediately after gzopen() or gzdopen() it will + cause buffers to be allocated to allow reading the file to determine if it + is a gzip file. Therefore if gzbuffer() is used, it should be called before + gzdirect(). + + When writing, gzdirect() returns true (1) if transparent writing was + requested ("wT" for the gzopen() mode), or false (0) otherwise. (Note: + gzdirect() is not needed when writing. Transparent writing must be + explicitly requested, so the application already knows the answer. When + linking statically, using gzdirect() will include all of the zlib code for + gzip file reading and decompression, which may not be desired.) +*/ + +ZEXTERN int ZEXPORT gzclose(gzFile file); +/* + Flush all pending output for file, if necessary, close file and + deallocate the (de)compression state. Note that once file is closed, you + cannot call gzerror with file, since its structures have been deallocated. + gzclose must not be called more than once on the same file, just as free + must not be called more than once on the same allocation. + + gzclose will return Z_STREAM_ERROR if file is not valid, Z_ERRNO on a + file operation error, Z_MEM_ERROR if out of memory, Z_BUF_ERROR if the + last read ended in the middle of a gzip stream, or Z_OK on success. +*/ + +ZEXTERN int ZEXPORT gzclose_r(gzFile file); +ZEXTERN int ZEXPORT gzclose_w(gzFile file); +/* + Same as gzclose(), but gzclose_r() is only for use when reading, and + gzclose_w() is only for use when writing or appending. The advantage to + using these instead of gzclose() is that they avoid linking in zlib + compression or decompression code that is not used when only reading or only + writing respectively. If gzclose() is used, then both compression and + decompression code will be included the application when linking to a static + zlib library. +*/ + +ZEXTERN const char * ZEXPORT gzerror(gzFile file, int *errnum); +/* + Return the error message for the last error which occurred on file. + errnum is set to zlib error number. If an error occurred in the file system + and not in the compression library, errnum is set to Z_ERRNO and the + application may consult errno to get the exact error code. + + The application must not modify the returned string. Future calls to + this function may invalidate the previously returned string. If file is + closed, then the string previously returned by gzerror will no longer be + available. + + gzerror() should be used to distinguish errors from end-of-file for those + functions above that do not distinguish those cases in their return values. +*/ + +ZEXTERN void ZEXPORT gzclearerr(gzFile file); +/* + Clear the error and end-of-file flags for file. This is analogous to the + clearerr() function in stdio. This is useful for continuing to read a gzip + file that is being written concurrently. +*/ + +#endif /* !Z_SOLO */ + + /* checksum functions */ + +/* + These functions are not related to compression but are exported + anyway because they might be useful in applications using the compression + library. +*/ + +ZEXTERN uLong ZEXPORT adler32(uLong adler, const Bytef *buf, uInt len); +/* + Update a running Adler-32 checksum with the bytes buf[0..len-1] and + return the updated checksum. An Adler-32 value is in the range of a 32-bit + unsigned integer. If buf is Z_NULL, this function returns the required + initial value for the checksum. + + An Adler-32 checksum is almost as reliable as a CRC-32 but can be computed + much faster. + + Usage example: + + uLong adler = adler32(0L, Z_NULL, 0); + + while (read_buffer(buffer, length) != EOF) { + adler = adler32(adler, buffer, length); + } + if (adler != original_adler) error(); +*/ + +ZEXTERN uLong ZEXPORT adler32_z(uLong adler, const Bytef *buf, + z_size_t len); +/* + Same as adler32(), but with a size_t length. +*/ + +/* +ZEXTERN uLong ZEXPORT adler32_combine(uLong adler1, uLong adler2, + z_off_t len2); + + Combine two Adler-32 checksums into one. For two sequences of bytes, seq1 + and seq2 with lengths len1 and len2, Adler-32 checksums were calculated for + each, adler1 and adler2. adler32_combine() returns the Adler-32 checksum of + seq1 and seq2 concatenated, requiring only adler1, adler2, and len2. Note + that the z_off_t type (like off_t) is a signed integer. If len2 is + negative, the result has no meaning or utility. +*/ + +ZEXTERN uLong ZEXPORT crc32(uLong crc, const Bytef *buf, uInt len); +/* + Update a running CRC-32 with the bytes buf[0..len-1] and return the + updated CRC-32. A CRC-32 value is in the range of a 32-bit unsigned integer. + If buf is Z_NULL, this function returns the required initial value for the + crc. Pre- and post-conditioning (one's complement) is performed within this + function so it shouldn't be done by the application. + + Usage example: + + uLong crc = crc32(0L, Z_NULL, 0); + + while (read_buffer(buffer, length) != EOF) { + crc = crc32(crc, buffer, length); + } + if (crc != original_crc) error(); +*/ + +ZEXTERN uLong ZEXPORT crc32_z(uLong crc, const Bytef *buf, + z_size_t len); +/* + Same as crc32(), but with a size_t length. +*/ + +/* +ZEXTERN uLong ZEXPORT crc32_combine(uLong crc1, uLong crc2, z_off_t len2); + + Combine two CRC-32 check values into one. For two sequences of bytes, + seq1 and seq2 with lengths len1 and len2, CRC-32 check values were + calculated for each, crc1 and crc2. crc32_combine() returns the CRC-32 + check value of seq1 and seq2 concatenated, requiring only crc1, crc2, and + len2. len2 must be non-negative. +*/ + +/* +ZEXTERN uLong ZEXPORT crc32_combine_gen(z_off_t len2); + + Return the operator corresponding to length len2, to be used with + crc32_combine_op(). len2 must be non-negative. +*/ + +ZEXTERN uLong ZEXPORT crc32_combine_op(uLong crc1, uLong crc2, uLong op); +/* + Give the same result as crc32_combine(), using op in place of len2. op is + is generated from len2 by crc32_combine_gen(). This will be faster than + crc32_combine() if the generated op is used more than once. +*/ + + + /* various hacks, don't look :) */ + +/* deflateInit and inflateInit are macros to allow checking the zlib version + * and the compiler's view of z_stream: + */ +ZEXTERN int ZEXPORT deflateInit_(z_streamp strm, int level, + const char *version, int stream_size); +ZEXTERN int ZEXPORT inflateInit_(z_streamp strm, + const char *version, int stream_size); +ZEXTERN int ZEXPORT deflateInit2_(z_streamp strm, int level, int method, + int windowBits, int memLevel, + int strategy, const char *version, + int stream_size); +ZEXTERN int ZEXPORT inflateInit2_(z_streamp strm, int windowBits, + const char *version, int stream_size); +ZEXTERN int ZEXPORT inflateBackInit_(z_streamp strm, int windowBits, + unsigned char FAR *window, + const char *version, + int stream_size); +#ifdef Z_PREFIX_SET +# define z_deflateInit(strm, level) \ + deflateInit_((strm), (level), ZLIB_VERSION, (int)sizeof(z_stream)) +# define z_inflateInit(strm) \ + inflateInit_((strm), ZLIB_VERSION, (int)sizeof(z_stream)) +# define z_deflateInit2(strm, level, method, windowBits, memLevel, strategy) \ + deflateInit2_((strm),(level),(method),(windowBits),(memLevel),\ + (strategy), ZLIB_VERSION, (int)sizeof(z_stream)) +# define z_inflateInit2(strm, windowBits) \ + inflateInit2_((strm), (windowBits), ZLIB_VERSION, \ + (int)sizeof(z_stream)) +# define z_inflateBackInit(strm, windowBits, window) \ + inflateBackInit_((strm), (windowBits), (window), \ + ZLIB_VERSION, (int)sizeof(z_stream)) +#else +# define deflateInit(strm, level) \ + deflateInit_((strm), (level), ZLIB_VERSION, (int)sizeof(z_stream)) +# define inflateInit(strm) \ + inflateInit_((strm), ZLIB_VERSION, (int)sizeof(z_stream)) +# define deflateInit2(strm, level, method, windowBits, memLevel, strategy) \ + deflateInit2_((strm),(level),(method),(windowBits),(memLevel),\ + (strategy), ZLIB_VERSION, (int)sizeof(z_stream)) +# define inflateInit2(strm, windowBits) \ + inflateInit2_((strm), (windowBits), ZLIB_VERSION, \ + (int)sizeof(z_stream)) +# define inflateBackInit(strm, windowBits, window) \ + inflateBackInit_((strm), (windowBits), (window), \ + ZLIB_VERSION, (int)sizeof(z_stream)) +#endif + +#ifndef Z_SOLO + +/* gzgetc() macro and its supporting function and exposed data structure. Note + * that the real internal state is much larger than the exposed structure. + * This abbreviated structure exposes just enough for the gzgetc() macro. The + * user should not mess with these exposed elements, since their names or + * behavior could change in the future, perhaps even capriciously. They can + * only be used by the gzgetc() macro. You have been warned. + */ +struct gzFile_s { + unsigned have; + unsigned char *next; + z_off64_t pos; +}; +ZEXTERN int ZEXPORT gzgetc_(gzFile file); /* backward compatibility */ +#ifdef Z_PREFIX_SET +# undef z_gzgetc +# define z_gzgetc(g) \ + ((g)->have ? ((g)->have--, (g)->pos++, *((g)->next)++) : (gzgetc)(g)) +#else +# define gzgetc(g) \ + ((g)->have ? ((g)->have--, (g)->pos++, *((g)->next)++) : (gzgetc)(g)) +#endif + +/* provide 64-bit offset functions if _LARGEFILE64_SOURCE defined, and/or + * change the regular functions to 64 bits if _FILE_OFFSET_BITS is 64 (if + * both are true, the application gets the *64 functions, and the regular + * functions are changed to 64 bits) -- in case these are set on systems + * without large file support, _LFS64_LARGEFILE must also be true + */ +#ifdef Z_LARGE64 + ZEXTERN gzFile ZEXPORT gzopen64(const char *, const char *); + ZEXTERN z_off64_t ZEXPORT gzseek64(gzFile, z_off64_t, int); + ZEXTERN z_off64_t ZEXPORT gztell64(gzFile); + ZEXTERN z_off64_t ZEXPORT gzoffset64(gzFile); + ZEXTERN uLong ZEXPORT adler32_combine64(uLong, uLong, z_off64_t); + ZEXTERN uLong ZEXPORT crc32_combine64(uLong, uLong, z_off64_t); + ZEXTERN uLong ZEXPORT crc32_combine_gen64(z_off64_t); +#endif + +#if !defined(ZLIB_INTERNAL) && defined(Z_WANT64) +# ifdef Z_PREFIX_SET +# define z_gzopen z_gzopen64 +# define z_gzseek z_gzseek64 +# define z_gztell z_gztell64 +# define z_gzoffset z_gzoffset64 +# define z_adler32_combine z_adler32_combine64 +# define z_crc32_combine z_crc32_combine64 +# define z_crc32_combine_gen z_crc32_combine_gen64 +# else +# define gzopen gzopen64 +# define gzseek gzseek64 +# define gztell gztell64 +# define gzoffset gzoffset64 +# define adler32_combine adler32_combine64 +# define crc32_combine crc32_combine64 +# define crc32_combine_gen crc32_combine_gen64 +# endif +# ifndef Z_LARGE64 + ZEXTERN gzFile ZEXPORT gzopen64(const char *, const char *); + ZEXTERN z_off_t ZEXPORT gzseek64(gzFile, z_off_t, int); + ZEXTERN z_off_t ZEXPORT gztell64(gzFile); + ZEXTERN z_off_t ZEXPORT gzoffset64(gzFile); + ZEXTERN uLong ZEXPORT adler32_combine64(uLong, uLong, z_off_t); + ZEXTERN uLong ZEXPORT crc32_combine64(uLong, uLong, z_off_t); + ZEXTERN uLong ZEXPORT crc32_combine_gen64(z_off_t); +# endif +#else + ZEXTERN gzFile ZEXPORT gzopen(const char *, const char *); + ZEXTERN z_off_t ZEXPORT gzseek(gzFile, z_off_t, int); + ZEXTERN z_off_t ZEXPORT gztell(gzFile); + ZEXTERN z_off_t ZEXPORT gzoffset(gzFile); + ZEXTERN uLong ZEXPORT adler32_combine(uLong, uLong, z_off_t); + ZEXTERN uLong ZEXPORT crc32_combine(uLong, uLong, z_off_t); + ZEXTERN uLong ZEXPORT crc32_combine_gen(z_off_t); +#endif + +#else /* Z_SOLO */ + + ZEXTERN uLong ZEXPORT adler32_combine(uLong, uLong, z_off_t); + ZEXTERN uLong ZEXPORT crc32_combine(uLong, uLong, z_off_t); + ZEXTERN uLong ZEXPORT crc32_combine_gen(z_off_t); + +#endif /* !Z_SOLO */ + +/* undocumented functions */ +ZEXTERN const char * ZEXPORT zError(int); +ZEXTERN int ZEXPORT inflateSyncPoint(z_streamp); +ZEXTERN const z_crc_t FAR * ZEXPORT get_crc_table(void); +ZEXTERN int ZEXPORT inflateUndermine(z_streamp, int); +ZEXTERN int ZEXPORT inflateValidate(z_streamp, int); +ZEXTERN unsigned long ZEXPORT inflateCodesUsed(z_streamp); +ZEXTERN int ZEXPORT inflateResetKeep(z_streamp); +ZEXTERN int ZEXPORT deflateResetKeep(z_streamp); +#if defined(_WIN32) && !defined(Z_SOLO) +ZEXTERN gzFile ZEXPORT gzopen_w(const wchar_t *path, + const char *mode); +#endif +#if defined(STDC) || defined(Z_HAVE_STDARG_H) +# ifndef Z_SOLO +ZEXTERN int ZEXPORTVA gzvprintf(gzFile file, + const char *format, + va_list va); +# endif +#endif + +#ifdef __cplusplus +} +#endif + +#endif /* ZLIB_H */ diff --git a/thirdparty/zlib-1.3.1/zlib.map b/thirdparty/zlib-1.3.1/zlib.map new file mode 100644 index 0000000..31544f2 --- /dev/null +++ b/thirdparty/zlib-1.3.1/zlib.map @@ -0,0 +1,100 @@ +ZLIB_1.2.0 { + global: + compressBound; + deflateBound; + inflateBack; + inflateBackEnd; + inflateBackInit_; + inflateCopy; + local: + deflate_copyright; + inflate_copyright; + inflate_fast; + inflate_table; + zcalloc; + zcfree; + z_errmsg; + gz_error; + gz_intmax; + _*; +}; + +ZLIB_1.2.0.2 { + gzclearerr; + gzungetc; + zlibCompileFlags; +} ZLIB_1.2.0; + +ZLIB_1.2.0.8 { + deflatePrime; +} ZLIB_1.2.0.2; + +ZLIB_1.2.2 { + adler32_combine; + crc32_combine; + deflateSetHeader; + inflateGetHeader; +} ZLIB_1.2.0.8; + +ZLIB_1.2.2.3 { + deflateTune; + gzdirect; +} ZLIB_1.2.2; + +ZLIB_1.2.2.4 { + inflatePrime; +} ZLIB_1.2.2.3; + +ZLIB_1.2.3.3 { + adler32_combine64; + crc32_combine64; + gzopen64; + gzseek64; + gztell64; + inflateUndermine; +} ZLIB_1.2.2.4; + +ZLIB_1.2.3.4 { + inflateReset2; + inflateMark; +} ZLIB_1.2.3.3; + +ZLIB_1.2.3.5 { + gzbuffer; + gzoffset; + gzoffset64; + gzclose_r; + gzclose_w; +} ZLIB_1.2.3.4; + +ZLIB_1.2.5.1 { + deflatePending; +} ZLIB_1.2.3.5; + +ZLIB_1.2.5.2 { + deflateResetKeep; + gzgetc_; + inflateResetKeep; +} ZLIB_1.2.5.1; + +ZLIB_1.2.7.1 { + inflateGetDictionary; + gzvprintf; +} ZLIB_1.2.5.2; + +ZLIB_1.2.9 { + inflateCodesUsed; + inflateValidate; + uncompress2; + gzfread; + gzfwrite; + deflateGetDictionary; + adler32_z; + crc32_z; +} ZLIB_1.2.7.1; + +ZLIB_1.2.12 { + crc32_combine_gen; + crc32_combine_gen64; + crc32_combine_op; +} ZLIB_1.2.9; diff --git a/thirdparty/zlib-1.3.1/zlib.pc.cmakein b/thirdparty/zlib-1.3.1/zlib.pc.cmakein new file mode 100644 index 0000000..a5e6429 --- /dev/null +++ b/thirdparty/zlib-1.3.1/zlib.pc.cmakein @@ -0,0 +1,13 @@ +prefix=@CMAKE_INSTALL_PREFIX@ +exec_prefix=@CMAKE_INSTALL_PREFIX@ +libdir=@INSTALL_LIB_DIR@ +sharedlibdir=@INSTALL_LIB_DIR@ +includedir=@INSTALL_INC_DIR@ + +Name: zlib +Description: zlib compression library +Version: @VERSION@ + +Requires: +Libs: -L${libdir} -L${sharedlibdir} -lz +Cflags: -I${includedir} diff --git a/thirdparty/zlib-1.3.1/zlib.pc.in b/thirdparty/zlib-1.3.1/zlib.pc.in new file mode 100644 index 0000000..7e5acf9 --- /dev/null +++ b/thirdparty/zlib-1.3.1/zlib.pc.in @@ -0,0 +1,13 @@ +prefix=@prefix@ +exec_prefix=@exec_prefix@ +libdir=@libdir@ +sharedlibdir=@sharedlibdir@ +includedir=@includedir@ + +Name: zlib +Description: zlib compression library +Version: @VERSION@ + +Requires: +Libs: -L${libdir} -L${sharedlibdir} -lz +Cflags: -I${includedir} diff --git a/thirdparty/zlib-1.3.1/zutil.c b/thirdparty/zlib-1.3.1/zutil.c new file mode 100644 index 0000000..b1c5d2d --- /dev/null +++ b/thirdparty/zlib-1.3.1/zutil.c @@ -0,0 +1,299 @@ +/* zutil.c -- target dependent utility functions for the compression library + * Copyright (C) 1995-2017 Jean-loup Gailly + * For conditions of distribution and use, see copyright notice in zlib.h + */ + +/* @(#) $Id$ */ + +#include "zutil.h" +#ifndef Z_SOLO +# include "gzguts.h" +#endif + +z_const char * const z_errmsg[10] = { + (z_const char *)"need dictionary", /* Z_NEED_DICT 2 */ + (z_const char *)"stream end", /* Z_STREAM_END 1 */ + (z_const char *)"", /* Z_OK 0 */ + (z_const char *)"file error", /* Z_ERRNO (-1) */ + (z_const char *)"stream error", /* Z_STREAM_ERROR (-2) */ + (z_const char *)"data error", /* Z_DATA_ERROR (-3) */ + (z_const char *)"insufficient memory", /* Z_MEM_ERROR (-4) */ + (z_const char *)"buffer error", /* Z_BUF_ERROR (-5) */ + (z_const char *)"incompatible version",/* Z_VERSION_ERROR (-6) */ + (z_const char *)"" +}; + + +const char * ZEXPORT zlibVersion(void) { + return ZLIB_VERSION; +} + +uLong ZEXPORT zlibCompileFlags(void) { + uLong flags; + + flags = 0; + switch ((int)(sizeof(uInt))) { + case 2: break; + case 4: flags += 1; break; + case 8: flags += 2; break; + default: flags += 3; + } + switch ((int)(sizeof(uLong))) { + case 2: break; + case 4: flags += 1 << 2; break; + case 8: flags += 2 << 2; break; + default: flags += 3 << 2; + } + switch ((int)(sizeof(voidpf))) { + case 2: break; + case 4: flags += 1 << 4; break; + case 8: flags += 2 << 4; break; + default: flags += 3 << 4; + } + switch ((int)(sizeof(z_off_t))) { + case 2: break; + case 4: flags += 1 << 6; break; + case 8: flags += 2 << 6; break; + default: flags += 3 << 6; + } +#ifdef ZLIB_DEBUG + flags += 1 << 8; +#endif + /* +#if defined(ASMV) || defined(ASMINF) + flags += 1 << 9; +#endif + */ +#ifdef ZLIB_WINAPI + flags += 1 << 10; +#endif +#ifdef BUILDFIXED + flags += 1 << 12; +#endif +#ifdef DYNAMIC_CRC_TABLE + flags += 1 << 13; +#endif +#ifdef NO_GZCOMPRESS + flags += 1L << 16; +#endif +#ifdef NO_GZIP + flags += 1L << 17; +#endif +#ifdef PKZIP_BUG_WORKAROUND + flags += 1L << 20; +#endif +#ifdef FASTEST + flags += 1L << 21; +#endif +#if defined(STDC) || defined(Z_HAVE_STDARG_H) +# ifdef NO_vsnprintf + flags += 1L << 25; +# ifdef HAS_vsprintf_void + flags += 1L << 26; +# endif +# else +# ifdef HAS_vsnprintf_void + flags += 1L << 26; +# endif +# endif +#else + flags += 1L << 24; +# ifdef NO_snprintf + flags += 1L << 25; +# ifdef HAS_sprintf_void + flags += 1L << 26; +# endif +# else +# ifdef HAS_snprintf_void + flags += 1L << 26; +# endif +# endif +#endif + return flags; +} + +#ifdef ZLIB_DEBUG +#include +# ifndef verbose +# define verbose 0 +# endif +int ZLIB_INTERNAL z_verbose = verbose; + +void ZLIB_INTERNAL z_error(char *m) { + fprintf(stderr, "%s\n", m); + exit(1); +} +#endif + +/* exported to allow conversion of error code to string for compress() and + * uncompress() + */ +const char * ZEXPORT zError(int err) { + return ERR_MSG(err); +} + +#if defined(_WIN32_WCE) && _WIN32_WCE < 0x800 + /* The older Microsoft C Run-Time Library for Windows CE doesn't have + * errno. We define it as a global variable to simplify porting. + * Its value is always 0 and should not be used. + */ + int errno = 0; +#endif + +#ifndef HAVE_MEMCPY + +void ZLIB_INTERNAL zmemcpy(Bytef* dest, const Bytef* source, uInt len) { + if (len == 0) return; + do { + *dest++ = *source++; /* ??? to be unrolled */ + } while (--len != 0); +} + +int ZLIB_INTERNAL zmemcmp(const Bytef* s1, const Bytef* s2, uInt len) { + uInt j; + + for (j = 0; j < len; j++) { + if (s1[j] != s2[j]) return 2*(s1[j] > s2[j])-1; + } + return 0; +} + +void ZLIB_INTERNAL zmemzero(Bytef* dest, uInt len) { + if (len == 0) return; + do { + *dest++ = 0; /* ??? to be unrolled */ + } while (--len != 0); +} +#endif + +#ifndef Z_SOLO + +#ifdef SYS16BIT + +#ifdef __TURBOC__ +/* Turbo C in 16-bit mode */ + +# define MY_ZCALLOC + +/* Turbo C malloc() does not allow dynamic allocation of 64K bytes + * and farmalloc(64K) returns a pointer with an offset of 8, so we + * must fix the pointer. Warning: the pointer must be put back to its + * original form in order to free it, use zcfree(). + */ + +#define MAX_PTR 10 +/* 10*64K = 640K */ + +local int next_ptr = 0; + +typedef struct ptr_table_s { + voidpf org_ptr; + voidpf new_ptr; +} ptr_table; + +local ptr_table table[MAX_PTR]; +/* This table is used to remember the original form of pointers + * to large buffers (64K). Such pointers are normalized with a zero offset. + * Since MSDOS is not a preemptive multitasking OS, this table is not + * protected from concurrent access. This hack doesn't work anyway on + * a protected system like OS/2. Use Microsoft C instead. + */ + +voidpf ZLIB_INTERNAL zcalloc(voidpf opaque, unsigned items, unsigned size) { + voidpf buf; + ulg bsize = (ulg)items*size; + + (void)opaque; + + /* If we allocate less than 65520 bytes, we assume that farmalloc + * will return a usable pointer which doesn't have to be normalized. + */ + if (bsize < 65520L) { + buf = farmalloc(bsize); + if (*(ush*)&buf != 0) return buf; + } else { + buf = farmalloc(bsize + 16L); + } + if (buf == NULL || next_ptr >= MAX_PTR) return NULL; + table[next_ptr].org_ptr = buf; + + /* Normalize the pointer to seg:0 */ + *((ush*)&buf+1) += ((ush)((uch*)buf-0) + 15) >> 4; + *(ush*)&buf = 0; + table[next_ptr++].new_ptr = buf; + return buf; +} + +void ZLIB_INTERNAL zcfree(voidpf opaque, voidpf ptr) { + int n; + + (void)opaque; + + if (*(ush*)&ptr != 0) { /* object < 64K */ + farfree(ptr); + return; + } + /* Find the original pointer */ + for (n = 0; n < next_ptr; n++) { + if (ptr != table[n].new_ptr) continue; + + farfree(table[n].org_ptr); + while (++n < next_ptr) { + table[n-1] = table[n]; + } + next_ptr--; + return; + } + Assert(0, "zcfree: ptr not found"); +} + +#endif /* __TURBOC__ */ + + +#ifdef M_I86 +/* Microsoft C in 16-bit mode */ + +# define MY_ZCALLOC + +#if (!defined(_MSC_VER) || (_MSC_VER <= 600)) +# define _halloc halloc +# define _hfree hfree +#endif + +voidpf ZLIB_INTERNAL zcalloc(voidpf opaque, uInt items, uInt size) { + (void)opaque; + return _halloc((long)items, size); +} + +void ZLIB_INTERNAL zcfree(voidpf opaque, voidpf ptr) { + (void)opaque; + _hfree(ptr); +} + +#endif /* M_I86 */ + +#endif /* SYS16BIT */ + + +#ifndef MY_ZCALLOC /* Any system without a special alloc function */ + +#ifndef STDC +extern voidp malloc(uInt size); +extern voidp calloc(uInt items, uInt size); +extern void free(voidpf ptr); +#endif + +voidpf ZLIB_INTERNAL zcalloc(voidpf opaque, unsigned items, unsigned size) { + (void)opaque; + return sizeof(uInt) > 2 ? (voidpf)malloc(items * size) : + (voidpf)calloc(items, size); +} + +void ZLIB_INTERNAL zcfree(voidpf opaque, voidpf ptr) { + (void)opaque; + free(ptr); +} + +#endif /* MY_ZCALLOC */ + +#endif /* !Z_SOLO */ diff --git a/thirdparty/zlib-1.3.1/zutil.h b/thirdparty/zlib-1.3.1/zutil.h new file mode 100644 index 0000000..48dd7fe --- /dev/null +++ b/thirdparty/zlib-1.3.1/zutil.h @@ -0,0 +1,254 @@ +/* zutil.h -- internal interface and configuration of the compression library + * Copyright (C) 1995-2024 Jean-loup Gailly, Mark Adler + * For conditions of distribution and use, see copyright notice in zlib.h + */ + +/* WARNING: this file should *not* be used by applications. It is + part of the implementation of the compression library and is + subject to change. Applications should only use zlib.h. + */ + +/* @(#) $Id$ */ + +#ifndef ZUTIL_H +#define ZUTIL_H + +#ifdef HAVE_HIDDEN +# define ZLIB_INTERNAL __attribute__((visibility ("hidden"))) +#else +# define ZLIB_INTERNAL +#endif + +#include "zlib.h" + +#if defined(STDC) && !defined(Z_SOLO) +# if !(defined(_WIN32_WCE) && defined(_MSC_VER)) +# include +# endif +# include +# include +#endif + +#ifndef local +# define local static +#endif +/* since "static" is used to mean two completely different things in C, we + define "local" for the non-static meaning of "static", for readability + (compile with -Dlocal if your debugger can't find static symbols) */ + +typedef unsigned char uch; +typedef uch FAR uchf; +typedef unsigned short ush; +typedef ush FAR ushf; +typedef unsigned long ulg; + +#if !defined(Z_U8) && !defined(Z_SOLO) && defined(STDC) +# include +# if (ULONG_MAX == 0xffffffffffffffff) +# define Z_U8 unsigned long +# elif (ULLONG_MAX == 0xffffffffffffffff) +# define Z_U8 unsigned long long +# elif (UINT_MAX == 0xffffffffffffffff) +# define Z_U8 unsigned +# endif +#endif + +extern z_const char * const z_errmsg[10]; /* indexed by 2-zlib_error */ +/* (size given to avoid silly warnings with Visual C++) */ + +#define ERR_MSG(err) z_errmsg[(err) < -6 || (err) > 2 ? 9 : 2 - (err)] + +#define ERR_RETURN(strm,err) \ + return (strm->msg = ERR_MSG(err), (err)) +/* To be used only when the state is known to be valid */ + + /* common constants */ + +#ifndef DEF_WBITS +# define DEF_WBITS MAX_WBITS +#endif +/* default windowBits for decompression. MAX_WBITS is for compression only */ + +#if MAX_MEM_LEVEL >= 8 +# define DEF_MEM_LEVEL 8 +#else +# define DEF_MEM_LEVEL MAX_MEM_LEVEL +#endif +/* default memLevel */ + +#define STORED_BLOCK 0 +#define STATIC_TREES 1 +#define DYN_TREES 2 +/* The three kinds of block type */ + +#define MIN_MATCH 3 +#define MAX_MATCH 258 +/* The minimum and maximum match lengths */ + +#define PRESET_DICT 0x20 /* preset dictionary flag in zlib header */ + + /* target dependencies */ + +#if defined(MSDOS) || (defined(WINDOWS) && !defined(WIN32)) +# define OS_CODE 0x00 +# ifndef Z_SOLO +# if defined(__TURBOC__) || defined(__BORLANDC__) +# if (__STDC__ == 1) && (defined(__LARGE__) || defined(__COMPACT__)) + /* Allow compilation with ANSI keywords only enabled */ + void _Cdecl farfree( void *block ); + void *_Cdecl farmalloc( unsigned long nbytes ); +# else +# include +# endif +# else /* MSC or DJGPP */ +# include +# endif +# endif +#endif + +#ifdef AMIGA +# define OS_CODE 1 +#endif + +#if defined(VAXC) || defined(VMS) +# define OS_CODE 2 +# define F_OPEN(name, mode) \ + fopen((name), (mode), "mbc=60", "ctx=stm", "rfm=fix", "mrs=512") +#endif + +#ifdef __370__ +# if __TARGET_LIB__ < 0x20000000 +# define OS_CODE 4 +# elif __TARGET_LIB__ < 0x40000000 +# define OS_CODE 11 +# else +# define OS_CODE 8 +# endif +#endif + +#if defined(ATARI) || defined(atarist) +# define OS_CODE 5 +#endif + +#ifdef OS2 +# define OS_CODE 6 +# if defined(M_I86) && !defined(Z_SOLO) +# include +# endif +#endif + +#if defined(MACOS) +# define OS_CODE 7 +#endif + +#ifdef __acorn +# define OS_CODE 13 +#endif + +#if defined(WIN32) && !defined(__CYGWIN__) +# define OS_CODE 10 +#endif + +#ifdef _BEOS_ +# define OS_CODE 16 +#endif + +#ifdef __TOS_OS400__ +# define OS_CODE 18 +#endif + +#ifdef __APPLE__ +# define OS_CODE 19 +#endif + +#if defined(__BORLANDC__) && !defined(MSDOS) + #pragma warn -8004 + #pragma warn -8008 + #pragma warn -8066 +#endif + +/* provide prototypes for these when building zlib without LFS */ +#if !defined(_WIN32) && \ + (!defined(_LARGEFILE64_SOURCE) || _LFS64_LARGEFILE-0 == 0) + ZEXTERN uLong ZEXPORT adler32_combine64(uLong, uLong, z_off_t); + ZEXTERN uLong ZEXPORT crc32_combine64(uLong, uLong, z_off_t); + ZEXTERN uLong ZEXPORT crc32_combine_gen64(z_off_t); +#endif + + /* common defaults */ + +#ifndef OS_CODE +# define OS_CODE 3 /* assume Unix */ +#endif + +#ifndef F_OPEN +# define F_OPEN(name, mode) fopen((name), (mode)) +#endif + + /* functions */ + +#if defined(pyr) || defined(Z_SOLO) +# define NO_MEMCPY +#endif +#if defined(SMALL_MEDIUM) && !defined(_MSC_VER) && !defined(__SC__) + /* Use our own functions for small and medium model with MSC <= 5.0. + * You may have to use the same strategy for Borland C (untested). + * The __SC__ check is for Symantec. + */ +# define NO_MEMCPY +#endif +#if defined(STDC) && !defined(HAVE_MEMCPY) && !defined(NO_MEMCPY) +# define HAVE_MEMCPY +#endif +#ifdef HAVE_MEMCPY +# ifdef SMALL_MEDIUM /* MSDOS small or medium model */ +# define zmemcpy _fmemcpy +# define zmemcmp _fmemcmp +# define zmemzero(dest, len) _fmemset(dest, 0, len) +# else +# define zmemcpy memcpy +# define zmemcmp memcmp +# define zmemzero(dest, len) memset(dest, 0, len) +# endif +#else + void ZLIB_INTERNAL zmemcpy(Bytef* dest, const Bytef* source, uInt len); + int ZLIB_INTERNAL zmemcmp(const Bytef* s1, const Bytef* s2, uInt len); + void ZLIB_INTERNAL zmemzero(Bytef* dest, uInt len); +#endif + +/* Diagnostic functions */ +#ifdef ZLIB_DEBUG +# include + extern int ZLIB_INTERNAL z_verbose; + extern void ZLIB_INTERNAL z_error(char *m); +# define Assert(cond,msg) {if(!(cond)) z_error(msg);} +# define Trace(x) {if (z_verbose>=0) fprintf x ;} +# define Tracev(x) {if (z_verbose>0) fprintf x ;} +# define Tracevv(x) {if (z_verbose>1) fprintf x ;} +# define Tracec(c,x) {if (z_verbose>0 && (c)) fprintf x ;} +# define Tracecv(c,x) {if (z_verbose>1 && (c)) fprintf x ;} +#else +# define Assert(cond,msg) +# define Trace(x) +# define Tracev(x) +# define Tracevv(x) +# define Tracec(c,x) +# define Tracecv(c,x) +#endif + +#ifndef Z_SOLO + voidpf ZLIB_INTERNAL zcalloc(voidpf opaque, unsigned items, + unsigned size); + void ZLIB_INTERNAL zcfree(voidpf opaque, voidpf ptr); +#endif + +#define ZALLOC(strm, items, size) \ + (*((strm)->zalloc))((strm)->opaque, (items), (size)) +#define ZFREE(strm, addr) (*((strm)->zfree))((strm)->opaque, (voidpf)(addr)) +#define TRY_FREE(s, p) {if (p) ZFREE(s, p);} + +/* Reverse the bytes in a 32-bit value */ +#define ZSWAP32(q) ((((q) >> 24) & 0xff) + (((q) >> 8) & 0xff00) + \ + (((q) & 0xff00) << 8) + (((q) & 0xff) << 24)) + +#endif /* ZUTIL_H */

    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℞AMkzQ=&V-bWaym-?9j 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%0ARD|WAUa-^)bZn# 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

    ha zLaMAf=TJIZFK#&6Va%U0pVsiSVUZh*LkUizvxS8u)Y!TfY|0^ziJ~FxwB}7Vdd7On z8NgP0Yl65ZP(%#h1;sObJ}n@Z#xe45MiBUgigq_(3)!+sV+~$)7?)?tGYc_mnG$d7 zy2!hUhiHD=c=x27VoQ~2f=CDE(5fW|#H^q{`zm&6bGf~ewX8ez&{cQ#mdfWvclH3w zBgTU#xeY&CW?nb@{%CllMYZQHhO+sVY% z8=DjR<~!&7xIenr-d$bQ)mW=~clEC4l?9=RhV$xCQc2d7Uh5~C#de_^3(xHKV4b*d zs;$AW&vc^*nNpmsoyGb5YNM0ambVo$v~nB)Jd?zenVY%)ilahXd(^vX5c8C>ACP&r z`16hCQ-O81I)?_QdZ*8JqI3oEj(Jh`uZ5zzvjxImBQs2ryqycd3Y^z?dMiG(BLm7g zEm*8c!YM-5q#p`8{9gU52{YzJ6e5}e|26CE#FI)PTfFvvV(+yvF9!dM9qxb zT7Ie>V?+v&yUFY=LBHfn=&|NF!w{YQ8zESN~%2!StzD%C{Wp{ zT6>hreBhQn+ShjDTQ9BdZzIbIOk_Q)QV*%i=;9OJoMT!=N;zX@h6dlu`s;g}CE!K1 zNC&n}%;}=fgU)_}_mD72S|sW}&D1 zhkQIUpgW{4XG!~wEIU%VeisWBDveLx2!3@$9_R044RpcIXHIK&gv@cX*_r{*mFsLt z033Op&UT8kg(kPB!#<@HzP1Y)`UcD2s%J@GA4IxT`ecm>t8@`$|-Uk z3zZKQTLLO2@}!y4s-E_66_Re#pe$#}0fd@+26R645}RQWRlQ;2T<0S;m8 z2Lige{^!nlqiTb=Js}F^g@~wW3T5F9#u?><(B}71fxvvXW!N*KIQDbhz%b|vczFt3 zNV|YdVMuOaVJ|Ew$qc@HB0;0I_2Yh32>7gRZ#4c`RiRKP%tGLKz?Z&Y*>=z(^9jQ! z(^C#LpY~*6(Ow6l2?r4bQnYtMG|F2;j2h%uHqgd>kUBdF5lB>Dmx4w-H53KdneZ6f z4kNIvB}%HPs+xPb4M-tb!LA+pd_u7Ujw*`gg=rV~N~gvw(ap=E_6vD5M_K2S%-jm7 z{L-0>2(VVbK!c~9{g622ch|_UaIZjTe9;DKPSmfx+D+mUZMBYIp)+kH`HE`J=1>;y z;~Z)9-$JUs6l!x@s0w89MOyj|#O!=eu*51wY)z0!XRm$-@Lo75Bv_QN?5OxEZW6{ZYq!bfD)#r`jk#BJ9`(Wug08T_6?NAMD% zb-)tT#4Zaz-@qssK!qTe`_nOE4b=Qa4u4_$8Ycor#c`JnSj}v=IxDZQuRM7+HtkGT z5HAT;JVN#R)JTGp4HDJ}sD!)k-T90gN6H>LPOC^C?ZFHV!AQ^ir~PR7P2HxioJ zcc@hp#N#5M$~~vKhS;u{b!^E^$n)P^b(whs=Xa^ZgiB(jaNu23<4jm3rdy8kVWq!_ zlK-?@mAg%$KM z(b#hsDUOBzw>t%4@)+X$3wB@36)csUhZK6U=Jd-dRz;r5vWI+Fii zcTQ%N7~?ws0?SxL8rb;K5)4Wl95brywmZpuc+?zyf|wfbcE|n9I{5P2i;13mK|<|0 zA4-aZAk~{1D`FLRXsAVe1Bl==1PW@V0kNRSwE+2=TKzUQ;-{;<0nLArI|FqbVexEb zUYENo4!WQRoUPe-S$9GH?yb~)fP!F7cR7Ili?1La&7T<8Zu`{-pEN53y{#}3e~|8)|H0ratMi2aiwdU}JK7Li(=r058bg|ha+$O<9aN(;N{&DA#@Izur#@6qExIj zPlf6~^-yCQ@4W2>?k`1}yVsz-ygh$`6WR@1*=@_C;zI2vS~p>;-7sb%S=&u+0u>K) zD}$Rx52IaF`YAfNX0yi0tkVqHSr#qQDQ*Fs{_2zh8@a%VbBNgJUgEMj*UeV&G=(dh zOQJn-0$5CX;Y)&qKa#~nI8?WvJ)NP~d=+*}(%wd&Cd#+%Azf5jGhPjS0 z5NgEl;tPrOG%*yvGBHgKdB@*#iYipaIqb(J*O5+D@d66Z2_+eFN??3Ck_^`7S#|PX zf;=ICSx7p_G@{rVO{bsUiV5gz08pHYmd}i!7Dm(_s_jm&dG1gMVV1e{x6uQC6^$|! zOCHkaVNzP17qL#y-Fe$20>uiBI~SbYltEYk@{(358AMzk3u8+?@gfH;)dyk1FYOlI4KY z#3JiqiBywTVe~Fwb?%%oDU{xS5sYhcUq=PO3&Byob=g<)qJ7RY9L=+Z`!hM+np$J? zlngYR*~qD4?-v)q`D=38l{J93b1}&U*d<(%*Nqge!GGap>cYJ0o)h1g=%4IoQc|w& zOpIS&44~Pu`FGn`PB?(;Utt5C!8&h#tZ{ehJXHWGRiCC4RA+FeP_a*EdgYFk&DC$u zrEu;OTpF$rR235H2gSh#3Y?8s|KNw4Xj?tA6Ql{8icHT$c>0E%!?Da%4;u!2tr}EH zV^&5&sM1jk8`c;~Mw_WZ#~g*?A*k*j59yJcUFO_R3Un{an%_mW3Ax-y;kQrFtI3ce z^gD#4W}L|B?glw+vm$>Ot;&jN6x`XDE#lRNDC*D|edtgHa1<*+hv3rdJ-iFBTZ~d8 z$C~$&G*XUJlrUr(Ov$n6X~P`lYa+JJyCAI9%+36Hg0q+xz%dWHCPABIrxc7Q@45L1 zti|QEVl*6SEz+yKA}ke# z5tj)zt0zNNEMd-?OT1u^X-+}obuH9JXotf{UGkM(4+DYF35}q>j)_vCMbI&5Z9B6# zg68rVX|7fp-IPqZrPIN4q#iX{zo}o^Wyoc3qQ9WAfA<}!v#$5M-*YKLT8q3%{9b+t z+ji-(fA-kB4SLCcIf#ZBRWf%1;g@O{QFjXpy4gF&jEDV&A+V3=Q_@J)#{cZt`&G3q z-cw@inJ9Ybfq#h19TA>buneigY602pf7* z^3U^!O&Z)U0ivCy8pE7JLmU(X$~;k~0qbtGQS2%`^d-qdoI}j=#$i5F5%bFiGCE`X zP9BZ83}PSAIRTRo^<9SnjyuSu;oi!;v1>8;cBDut_8=lf84oZFyeuz=9H~oBx6v!= zJ|SB`j5#F%ulpw=9)|Af^igku1{nNFByaT8;@xB_bC_|LdS@K}iw_y9>5 z@Ky8%oVmm0^uUxokYOAce6R8vyN{?#1{Xc*=yp?pIBHb-#8J>K578${S$G~{&p_PL zh2n2DqZ9^TdqZ#sh`qYii`diaBaRHl@I6MKN}!eB3cq(Jtjeyb3eAoUUX^Oy_|`RR{SFzH57*>FU!lsY^!;E06nJt2NPWUfFqHeuW0A^@g?y-TU0 z?iOuEpCQMm0tHS37@OO;nggK#73W?=yfn$}q`@>B2BH7%oFP~JkuyA*19;K&m``>Q zu0>u~zI+fic`vKhp{F5ICy$}{c)tO3=xM^ z2oWMsW~s_u#Vv66V2`2K#fGZkdkC&h&r%jxE$;VL7;sh4}DS%Jz}_8vV*otJK^3UE0!twP_P;QrLHm zM0jceH2-fC8V%U9RcVYsdw93UQ&<%7IO@S#_=eOi;sux%l$E7bvW0)Gi<2!j;UF#3 zZg9SQ`~aNUm@|-3eOLNApkdQEcVIP_D=()X8|#j5jlzpa=yE= zG7(z?YO9$!(uJ0GGi^Cx*yFZQ1~^hIWofQcLs&n951QrFvwjN;5V`TEE(dRYN;F^| zwh}Ho(s|1*m-SqY9km{0UZ|kca@YbV4$c|f85Ib?nfn1&- z0FAY7!;8NgWB0C-Kc?k3M>0(fS@kJ93iG`@r?t~?8`7grzW3{{j3a}EuN&{09Tcx*bzNZ)wWXNQyG=1xbWu7Qm|-WIHKT6s$Dn^ zR4W+PNrN}-v(!!j=!1?5i&g?-ijq=!iH=rK+#2XAVL7b4W;E|Z811Pd@`AYM>h&ty zVnUC8tGKaAOnS_^3kzZrASE36z6m``W7ocA&#+S=n3}G-hS#bIYs+-{jhQ&IkGakK*e@UtWXzZ0J9% z4bBzJk}x?9d(JA*2+V@GE_<~TT3Yn&m^sn%1sIYvoEP=A!;?bF28s#SRu3#hvf5Bb(tj%z*9ZUM7>=cmXC~f7=s(F! zEfZAZehvVSk9o(F7SHTxCpn4?R48ic**Oj76DK_3Hwkg$*Ph-~edP4xWU|~o7jPC~ z00@~T{Q0M(E(-8tq0aX#Skx={V7p9kfH668q?J0CIkmA$P`%J&8bU`_G%S|R^iZ;h zeU*=Rt1b%c3Q3|x<%oYxuTwNTf?jbp0yx;_fWQPSig+bRNC1e;ibAU~`Ih;Ppw7W( z$=kMt>!G9;sDCXDa4ht1-N^F~B{yd~(**^e6V=s$uS_L^%1iM#{OB5^+ML@To;2-w$%wk2#^XV+=bPs}{BC*yJ;H9`X}{}9*-lZ| zGox6^@ok#7zhl0A@5GPz$(+m=jq%{;#^fJtI!AIr%`H;*6RO_liJwQZU5;@XTRD>; z56a#XoDpw~Skd0d`xIXoveP2qKswh*WluO=1z{m}!za3lBhwa&a%9+%x_6M@rGjP@ zYXWSmrWN=7%oRWaX}E69$^gmfZB04RMCQi@+eyA(z!MWve0*VpyCU|Y0wLQ$^a&@d z_)SH?v0TNfVS)R2UoM!aDw0L+uBAcYE=i~~l&b|Qk{Z}SWzzByYykL|MBI&F3gU@M z53-aMg~IH!Xm0hf4Att?F{x45kfn@N=lw|z!^hBD=H7clVFr0|3zL97U{(Mb&gMGz zJf}y?Zj$jpi`Aw^YFVHu!I3`J$FB&0EASZI+>D1qnEjREQGEwQ_v8Kg=G499+EVGf zE)FP$YD7@Mf{$4za5P`AeKxKjkLUyCWKhTFslA$S`-IPe611|J2Ain|Dob~=`5<|0 zus)0L)YSp2NWJ*FHrs^p5VmZCuYaaVV=zq;FD_13l}Tgv8WT27s0ot*#zZJ{nI=gT zM1<1K2&{zTlGhn%qOn8<4UT7%3`V?AA#7jaQ@&MRr$SY6UeRjl@|_Fec{dhy~Wk(=nn2G&soxoukpvBQ8jD!em{0 zQ91uyVS<(A9+D>^m`jx@a4UI*3#``ysS2zqn7Kn5{U_@c*s|5vgw~;8D{*vz$60o8 ziNH16@VaP{z!|bk8vPI5G}6W>A+eOB#V{4Jxd)$4rnT+f$74 zI+f;os!AIDk3A$zgyo>nrb1z%1(|T$v;fl?Sti9mB)hUeCVXJbEb1t@bm-2)N5pCH zuYI?B#DL$ECjJD5>+O+$*U+X41t-F_Xv7?9AsAFfBnj2-7k`7gfGTw~Spg-gC_iXW zZI}mgC5iw}&_f41u*U_uU+|;|&9OBRpah?Xp)hFCE2%LuqlT-)Xi%-e{`ihoIS(}yn zwxC{wB&5M#(<9t;NbMT0dc*A<2^aHEAYI(>S?e16ZtCr{z=x_&NyJ)cfc48Y%GtS$&aXeRM zF|&V?qR)qGL+1H+o<-pu$Z`D@d0HC{ z3Y+Xt46{-Q7iNQ?0esd9>6q(lD_Tn^!<*ff`J*|Buvjcc?9(Cin!CfBR?RaTk^vS% zW%7yJTlX05@@HfR^0o^tjQqLp7l8{!uy}-VW5-Kjg;_XI8BQ!4<^J);_;fC1u^`{l zz)0L}**QW=2w6Sua?$()Np#od&rb;=E&WIRSdLM|v~z-^%Q@ze92Wz00~_v{wM(?& zJm;UMx_vcT5CaTZkYu4zpyk{nD^Bh_V~mRSyhv7lG!RsmbD5j%;b@ATqxJ>1oDOSI zCR?e$3qUd_TMlIRvJ=g0WkRxx zl_b)!iH-kRn6B*~A*qNAq|a6tMWIKzen;57Vi9xM?+YTynoP{S{CXQ`yl z7B%L8rS4V>`-jOqMV`NkpBLP)vscsPljeEeV)Z(#!{xR=v*8&0&$E3B`49t$B zdGCP}G}4=qO_5*F3@ftaKuJ#O8o{<1(L4tHXki#IQheWC9yYxLhk#gqH|z$l#^Foz z-ne0btdx04{d}r0QAAs;21Da$b~xVr?X{aB1bU}-d=FLf+h5v>Bf6M+TMOjeu_D7i z+hqG;I|U!~B=avdyug$@eN4(}kcs7rD%jLw6@E-i0BhA=!5_{@ht(DOhlQLeVG~o( z##S_@*HpR#qdW2T_NTqsf?5i!j~N-2L!TCuNSuCc<78p0%`r^P9r?R|u2xapK@kCj_ZyOP|>$Uin+5(kJ!t*mA3`frSHIF;!{O=a+Oe&LATSIts>4f(x`DV zL8>u2b%g7X3We;Bnj>d4&&gOgn+oBJnLG0cK0?Jzh#3HyV)wd}2wd$l6$xN@t$0gB z;G*(ArLG=7R{VnZs69bk<8A5}jXJv$Q@_XKiDGFj1V8`5Qh1@9%W4;+`t_K@JoZ3^ z{~0eU@ko%B7&C~Wh~SZAh4V*(X{}qW>fSQR5vn(?jG%exof$=M(xLcWrh2D=I4UL7 zdp*qHNtiJhY(_)g0iSFk(`PR|F~E?xHwW9SK8pL z(fEV|x`&6@(8502oHM!~mE`rGmV`+@u}9dONXbEr#J~B6op?|D+MfQ?{o|1ZCVOAM z29j?%(QKo!w*3)6aRV`5+H-wOFfmuQ(2hor2=T@ov}1>TnQ0Dc!{_d&U{b{H*tjVT z?m}~J=%PA5*M8eJy=$^pTAzGA(l+!JV}hn8Y6YtT&LmG%<#{~?g0x2}JT4xKB{gH}E^UNQo#C07h*ann?!tT?yUT@YQe=Cf6;czW6fV zno%Ype}K~Iu^s9|VbO0Z0yOvMa#`;L1ecv6KQhUKeul;ZVU) zNx4*FpYqfZ8T<~V7v|T03ZCE4v%&(}Xp)3Mg)BP#x8~A(ehlA&j@L!$5w({oQ={%a z`}Mb;GjOVcgIFvQ#4lgUHTfFEH1=Dn!w>y?+P&s zRInGr|8~W=2Sn;XO!r-LGfY%*;JFb7th^bjxMk4s<1fL4)W|3jTR@PmC|`Vr_ys_i z?~@7woX(Pr?#VOKk7Nz^nR$6irG$=$UHS;f5(`Mu^vnDdK@F&S&028N!F)xD zm-vZ%rCfr2wV|0|okq{m$`s9-&(brR(6!XHtJ^^Alb>(ZLo7z-OHE;r$d9im3=B@*5>bVPaGjTSjeD0O3`Rri=!RvQ2A9C|N{SBHlAcghFNpEIeK&L>6Eh zPBRWZ6Q>P&eENaZc3sC19$`IY1XD8$@%;;4>4GM45aX^Fdt7YgQA%8h@VT9iocBa6 zaZ}#a&Q&u5Ou_r1sCi|ul+f*GLQ)S|+j3ZU5T&$WO6bv&j?ORdresWn!F$=7lkgLy)t$%Jkz%XSH{YVw{=aS|n(0ISrKE+7$_RX7!Es)e zx8jDejTmCu^%l02IOC@MK0>H_B2xwigO@O3 zE=A}*!OEa`0ot8Qnw87M3?#;C_OaW@P?ZVt!SR0MeQ93+ocTviW8uLr{UfKKWyncE zV@kR+0h;?s=Mre54+6@hhsU>dGF;a$?=^6pcFP|X z5XVX~jw$-0m2E^on3ThDIci!?AP{FFIv){M7UdTq0-dub%Z9H8!x-suGNRToeDd=p zAQ6yGF>AyB!oguZVN7lHDHIowFzfP(MUYEgzRzMT38I-Q4R9^)8sTdM0b5^_Sz_qF z0b5dvi)(l=34iYO!j#35u*O$75)Ut4xKtI2YLrCRU?9$)tBEz5F`F8>+Ltb&5r>KO zr=umtba%r|4$QxlYsJva-_B8!mxI+ZkXgI*hbT%7Y+0veHpW1tvp|44Ed-%Ae*KH{ zyx0LWT1)r3%H7GHalx_3-4eaO;@Wbf9nQ|JnmDj=J<6@0aj;gI0=dfYK_V2@r^b$0 zL|7;oJCklztkDfr+3C^w^8@%cn?RK}yKQ6i^Ku6z3;i&y(U3cQ*pq=YXPP%c>?o(GYWNj5c62*`@Xh_GVFC#gh?mJgzo3Nf3BgoB4m0$wz|4l} zOy#h|hh_$j|Hl+x)dC(<5;u-+TpazuD|g8Wi9=h6a1{5RdVo)Y14)~#Bh?(K4S!TT z3gB()uTto+wW7{~EW!bZr2SAJfE52iY4 zr--$f(vgt9;nIH#NSxb}yZEs#;-Z;|W??UCj(9i)3AO?Gbu0z?jTTpsgE@T7OiW7~ zoJ57=R4N!wS#XOotvjTO9-ES!Zbxu3#K+!a!XZU2f1crGCw52K$?oR_oa8}So5y)h zeorAeqn;G3Sf#VziwDlAvxf4d5!0T&`@`|-HtFSbd`jMfoV@FZsk$m&4O3@gX`2Iwnv*OkzX==4$Cq zgb5I+<|V?Q+xTFdQ8z;JFC%}s*)D%(%&S624*u#@zOw;Wv~tkdc7L+IJkr2^nX?mF z=PBUgdquATJVZ5<%{Bj`NS$$jf5uc20p8oK%v$BG;?~2YvV9SwqL=PjQQNLAE_{vp z1YEe=me)MU!bl{3j=uA1WOEWBmd2o@}?%G3w+3&+_|j$LhrH-niJbA8Uu> zeP{969fhZ{RyOPK5c1JSfGrK#>EynFLrHKS1z)ZNScF>H z#?mSa%M~Y2{3w0W+hb%&u%$z!cBodu&D}QDVBKGRuXulegQv5+U!YLrQ3fN0w z9B59DB@yhF$Ho<&uCh`_T4X9gr0?us9HSoru>Ck8mMCS&{8Sx>~}C+<>{HG&#YV4E4CGsBGm z-fB=_iK6e(a|=ILEyzMaN)gfxYC+ZIv4V>G9%-@U>A3{@w^1X(& z=kmQcL>k1-R>|itQC5Xsyr!mH_biChR&$^0$G|MrVLtj?_$61Miy3eRgh0hm_g|h* z4sXFz0(Divs6?XqK0xpfXL0x{z6v-{K#IV9VUW@ZeJ{vLhx9YmX!gpO?xnLhcj%jY z=RT;O+ZciVsx-9?Zj)ehz!j}-RRlc6JK}XPK1Mpucs3;Ap{;q_lgQ)b_#3)DsklAc zCS)8`H&omMDogqs&~y3zA?ZHelH3EJ6g!R@fH9F9{3(W;xne#Zb*}JH50hWEck31Q z{SqE5;nL?%G_cKGoyrNy^T_ZEJ9e(r-CF$@Y{+0+Op`oBl%ThZokscHiy1wh7|v4{ z{qb+jUR2ZmWxx}`4A6Hqok_{q~*@Bq3bwSOoSZUTeras#lv0azZJPzcIV<6`-zlV0^vi5Q4{ z+%{k^uf;I}+IAaI$1T~8CgJe9dSHlyDiFmHL^#K-F+d7UKgnYaDw?MmnJ1r(vz^Zx zOj*!#u1gjjB|k==%8=d$Okl$lHvl=44J7}|eGRJAGOYNAke?3oMp9kSla~ha^4~}@ z)jT7XyW&EFSY8?Yyz1r#h1q~9Pn6mGhEhkqc!Bsu8v_P>7W6$Qpw@~stZ;?2OtlK;dP3kg_WP2|D<1^AnkEblI+4mR(eFz102nE&hIr~(mpQh%i% zV#jizQ5|>XQ|~*@hWPujjQ{(L@ax?RR+wB}kH07Fvj^|S&yJ+H%~OTZ&uCn}Z_?he z$1vdg%crpR^K0%0=rOJDPLEi6c(eE9)>*@R8sH;)vgI)KF-tYDOJNP+3 z)AxN0BJQ=|He0`S7h$Q>Hd?sXy>1LD&Gn$rRVox z;&V`aSRmg75)pl1_B~lGy??FQ87h7gU|gXb=Ib)ReCCHD|M zJgQ?a=txdoUNd}g3t#VZi#)l#NvM6*Dc+n&`5;kR=Uu--d1MDc! zefOjMWWM|lOa{B`dQZds>)%kov#Z+MKNnX4G)5HReFH1Y2%L`r0oDu<|2lKhO~G+* z`}+|<0iZgAIS-}EV1BakLxgM2{B_WuA8yDG{8ur6L4d1I8Y~SGC)GduZzLGE!_%+3 z_jfz@-#0fm-FJu@eT065H#a|>3af8V5jSSNRD)j`!XBMvzhCClh^#mL%jq)PXZP~_ zzTbgrne)PU14;bd3ei*3-eT9gZtWLfr95zd1K`(?dj32=gq;F^{&9tfxCjQ<;j>+5 zxjmeqt+-UfzxkN+2~$$Pr178l1GDr%BKg9tZI`8hLIFTE&AZNd1#XQ5toB*g5O3%4 zuchK_{o}6fF*oCU2cLmdKPQ0$2|;(Jo&2f;cE|jIqvm+^IofXd`PG=D{PgEelyO{E z*dZ(ScqKp``T5vS3F6=HIs~8nx8i2uCxM@Ry=~`s``_;x_}$u`4~+b-um67n(er^* z&^7S)=uVgMS;D`$LS=`0SGn3<_#qDJuw7fvuWj57FKMK_CheoXEeCw|%MUQ20cCoy zVR!G1WdM9QnW^(*oEWVhfm=FL>u*FjQtRl*nj27IXj~(G%#(hF!BKUNXjgp-Vg|>- zTWdJ^HLUKO-T#XF=?((~+)w0#5ecBAprRe0_S*d2dWWr$#cTSaHT|$#+{V|_-;UjFy?v=xzm_l%!D};)RbiLfwMcBh=~9jE!KX=; zU(M*Tc`%%5;+djg;pM&;nr&()bkC9E7Pjb?pYb@;;Ac*>dqcQ8)Dl!QW-~M=Z`q|7 zk>SY*m%E$5daCxk=NMV4*q~(#l}c?l)tb5yGKqk#xUjlo*A=Q4PZ(c9#%!L|Z@?tE zv$a0#KL?tvoIF>!7&usFQS1sUX)g-foJT(EU4ruubav=6x%GtXqwUeX+1~mNVdZhG zQI6$DtoS2-Q6B_UZRrSc4=&WIPD1UkVO74=5j~O=;HX`)?aSVZVEbcnb%U)KPHuWp zX9HyGw%lEpZU88rC<<5B1iqA@$aP{(Ln$FgsfM51_J{!?pl7(mmCtpQycFf0uXcf&hiY z8@LX#l=<1x5Q)HlvzCy9FUN&}C#06UZ``xTAOAh-Bi_BH3VIhcxQ0^f^OHT36nxBb zXPjR!e@zLH{c}o4iIy1s+9hF%F+)8Tj`Icb(?a#{+-829ShL;Dc?M$lp}S+t&tlkb z)&fXiRl4899`d+Qr;TPIzlWOxqGti}{eJTQ2|ci4NM$p3*zIqljOrF$MW(uruLtYu zJ{1Um`?QimgsI%=r*_)q?uKYTu&%7}q;niAUq|1cZ|^w6QXJ3|_-|mfp)h$*Gwlh@ zC=IMTtvax8mB#)f1i1vuA+D^sUo-64<2rlmxFH5>HrHy-u!!IdSiRi*&%~miVARZw zbRofjOu*QEzi}{Z6$E!_{0l%v{{U~!Wll|5(Giilk7%L)ykt9Qi*LOe8+V1#2*q$CSLX^U+5a z4$3jQG~WaETt3i$8sPg9uM@Uwb;x-2!_RZaXWF-FT`iyiuqCb*$gEy$U(IC+U2I(` zM0##~B52IWx^W+p$QNxPxR$u3Ttg5Tge6s7NIiQ?r!8?lb8GK~=L7aM--_Sy2l2Jq z{9N1ZEkw+j+g~H{O?ASnUHMoQp+gBe4h+c4bt=4|ez5E)wUKw~>1=<`3VYu1*o((? zd39iV5S&7c&oT1Fn7kUR`>9{*q`q%ghSdBVJ2m^s-9xV5G*`wTuEWpCz0$m=t>0`O zU!6AIXx$43yJ;4)(N{3n8^-PX<$Tj=&6^VKfW91F@C&&kO3%>&&uGhdWl2Y zDe-2GFMFEh`&xayQHo)9oGLr`{2lCeR$H9QU-S821?{ifcYXo)wDZ;ZmdE>>Z=k&# z%Z!@PswC*{nGV9kK54Ua?&q$$Z>T*T9QgLvbiH1}&b}Gnv`T|2;Aa?bz5Aa!%CJ~O zJ$yCKKe|eD{ZWw1i(QXH`XX=GLh4_!62v~PW9qbpQU6i*sg%z$K4px+K`zq{zTOXx>2NEg>5EpSx_c9DY=3H*lVUq>tE5| z`9EMxhzGjH1qMGw$|P}TZ8H|@8+Jy z{q@g2@PyZ zZ_XHvj%FK92mha_MlZ`6Ux-oor-X=YFDWKPlZrWi7IB&W+1v#Gp?~=wNl;~Ns__U0 zuSLwWqrSo4p5)oK*Ljp~yMEcRSJr|taOD1F>+K{OnM)lxxBH`C5s7gqgk`fhfdvbT zaN>>7(KNG6+OynyBa)xYqIo~vuWK%0rO|nfyvO^uH`md95k$1O8{NH$C@{RXvc%c<~Jtx6@I8T^G#4X-sd2IH#*^ij+m^~oxZ2rhU`TQUG zWm>BXZ-vwtu`AWjLTBmd5Bq(eW+A!bgkeQ1SVo~siO)+bR*P8zw{6$KWkyeCQhZY0 zJa`RlGSe9e{0#l|Jdc;q#Rqckk6m9P^JWQgVOfuZ+{b{e`v|$jQE0uhA4=udec~(% zAtL#CN;51;TWQJydhtW>b?~3Ov;Up0b_x0|q&wQ|R5i=<1+*7Vx4|m$2l7b1DDRKB zRJ9R@(LmvZnv@$^+EE$&QnkCFAzRC%@W#Z76rRdSS=uho{LV};@q$_0ww8s*`WBfu zM`U^SJ<`6tC%@9gwZ`BzSlTi_mFrnFEkA43{(rs@)nee6Hj_*{gRdERf`9f3-~lI| zk3Mg{ZZCYi13r0HH}gXal__KO(|nCqUKSP(H;&@P;|7bS!|K!qM&%Ovha>%r{9>mw zvc10^8&DD8FxIii@Gh}7A29+%kJ}~|!a$z9$DX~f=12kP@Ku9-)hO@c^ zcr-V%ICwq&?155Hz?q-HS@I5qj=OUwFAb<{p^?^bHbOeWn+MkqG&pht+J!a&7buG|8KExoi}G5<*cSLzOn~ zqgHqpgRe;4Y=vLoJ@>z9v@*26N$gK>%^-Q2KOkEna*R%MKdoD5J)Y~nt zl*|?VYoY%(1RG0}c{SN)pKk$FSZ*<*JK9m$M`e&;t0%^Ugowk7Q#{tACfAx}i;8UFA0~x_Dc!+TC_UDnG8t<#Ei5*M zrZg6lnn4y2aBrV*NKWSRG+n#Q8{N;-1?lBvWoa85_Su@DH4X2m%TO0CWQbFCre8Ix3P}t{xg^11655P0fWZ6l>oNnbv zN1{e+ENo6Vh%v;xv+k68n~Zno%4JY6waQ@N9;h7y9u(-^Ll@bd%ko2SY*jZAmE(d# z9_DjIZd2Z{-c|S+tJ=921?}gB!R~xpQFts8Eanok^%Y_ol(Ho9h%wQs$K+o3xj9_> z$D)CusPH(BU^CK}Vp;Otwcv008}cRzFb6sXn<(E=4pT3$XV(=9w)fSi{^^=4oTF~h ziO(W#g7;-h4heGu+HzS=q3Z1+%cGg#J#lbP+KjwhqD@*IBiV|)F=z48KB@~lo3teOQ^ltd@>L&vp{;h&Kk=S_7l4>ei* za+eeoopluh(e3{UefZ}ziiw!$pewhEs^U=NpzZ`X{98zQXXqMv>dlozg-2|jL9sD6 z)A0)KTf%6k?NxH3K~`Lu z4+XGZ(anZ)qbhlV<9Q1cS6_d9#Gtt?BmmICz-cN)BC6;FLTh6U)dJ1=++f*^iUtj$zv?{brT#Xg; zRpl4YX*&?HV7>yPkh41N`)VYJpF@*Rn*U~tX2$eC{@~pA`mpMV%Y$BX1Ss5{ySAnw zz$d0|vNU(-CWwPdjDX3=p$B|0O~Ro#J~BxTzn$=8sopt?i_SK@#Ngic=4h~>Biy9& zUWT6wh}P9ZP@Tw@c&2(4%=gP|gi?{|zYO1k;gvlEK6&aRGzR-m$9cA%7ZsYh%o@CW zZr=5N`r?Q6BZw2_-LTZ1?Ym*dHTIWND`8C+*&hzZJ_Uk>>XNvrhdC%r>$-1>Km(@$ zR9aWfIGqKEEQGl)gh`!I312$<;B88A1>Tx zum0Vb_%KIBvKNg@{1+XSDAIhEACEi{uX^T_UhTP5V`9o2(ZK6dv#oN?n=+t5xec+=PNh21WX3wKNjx1;)Z|m zCF$-Ww~4jg=vLd)&`6-szkJ8(=_S{XwLs}!KdL4lb0AWAF1!$i|5JRe==4_Mnl~!; zUFk~5uTf{~nx0cD-PG9XUYHa=(-VQ=N$gT4J*~T{gUvuFbZXX<&do&Oy84n6 ztO=E}jp(y<-QD=NhgmKGVVzt>Ny9f10S8feF zO)8I-cl4-V5#>$8bIT@iy3549P21q->U^ZOg$QLB@v--X7aHhN z>miYnzKb--aJ>d^1)yWaK~d{Cq#Nd(3FJ?CgTs8Jq})(cdcyHBL+cLM{HOcvub6Pm z$694%ty1~*m)COI+O}PtGwh)z96~_0n}`ZK0n{?UFEQhq�rRb`0y|*v1_Y0K2x& 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

    2Vlss}S1ufqA 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 literal 0 HcmV?d00001 diff --git a/thirdparty/libzip-1.11.3/build-emcmake/ossfuzz/zip_write_encrypt_aes256_file_fuzzer.js b/thirdparty/libzip-1.11.3/build-emcmake/ossfuzz/zip_write_encrypt_aes256_file_fuzzer.js new file mode 100644 index 0000000..16a597e --- /dev/null +++ b/thirdparty/libzip-1.11.3/build-emcmake/ossfuzz/zip_write_encrypt_aes256_file_fuzzer.js @@ -0,0 +1,4809 @@ +// include: shell.js +// The Module object: Our interface to the outside world. We import +// and export values on it. There are various ways Module can be used: +// 1. Not defined. We create it here +// 2. A function parameter, function(moduleArg) => Promise +// 3. pre-run appended it, var Module = {}; ..generated code.. +// 4. External script tag defines var Module. +// We need to check if Module already exists (e.g. case 3 above). +// Substitution will be replaced with actual code on later stage of the build, +// this way Closure Compiler will not mangle it (e.g. case 4. above). +// Note that if you want to run closure, and also to use Module +// after the generated code, you will need to define var Module = {}; +// before the code. Then that object will be used in the code, and you +// can continue to use Module afterwards as well. +var Module = typeof Module != 'undefined' ? Module : {}; + +// Determine the runtime environment we are in. You can customize this by +// setting the ENVIRONMENT setting at compile time (see settings.js). + +// Attempt to auto-detect the environment +var ENVIRONMENT_IS_WEB = typeof window == 'object'; +var ENVIRONMENT_IS_WORKER = typeof WorkerGlobalScope != 'undefined'; +// N.b. Electron.js environment is simultaneously a NODE-environment, but +// also a web environment. +var ENVIRONMENT_IS_NODE = typeof process == 'object' && typeof process.versions == 'object' && typeof process.versions.node == 'string' && process.type != 'renderer'; +var ENVIRONMENT_IS_SHELL = !ENVIRONMENT_IS_WEB && !ENVIRONMENT_IS_NODE && !ENVIRONMENT_IS_WORKER; + +if (ENVIRONMENT_IS_NODE) { + +} + +// --pre-jses are emitted after the Module integration code, so that they can +// refer to Module (if they choose; they can also define Module) + + +// Sometimes an existing Module object exists with properties +// meant to overwrite the default module functionality. Here +// we collect those properties and reapply _after_ we configure +// the current environment's defaults to avoid having to be so +// defensive during initialization. +var moduleOverrides = {...Module}; + +var arguments_ = []; +var thisProgram = './this.program'; +var quit_ = (status, toThrow) => { + throw toThrow; +}; + +// `/` should be present at the end if `scriptDirectory` is not empty +var scriptDirectory = ''; +function locateFile(path) { + if (Module['locateFile']) { + return Module['locateFile'](path, scriptDirectory); + } + return scriptDirectory + path; +} + +// Hooks that are implemented differently in different runtime environments. +var readAsync, readBinary; + +if (ENVIRONMENT_IS_NODE) { + if (typeof process == 'undefined' || !process.release || process.release.name !== 'node') throw new Error('not compiled for this environment (did you build to HTML and try to run it not on the web, or set ENVIRONMENT to something - like node - and run it someplace else - like on the web?)'); + + var nodeVersion = process.versions.node; + var numericVersion = nodeVersion.split('.').slice(0, 3); + numericVersion = (numericVersion[0] * 10000) + (numericVersion[1] * 100) + (numericVersion[2].split('-')[0] * 1); + var minVersion = 160000; + if (numericVersion < 160000) { + throw new Error('This emscripten-generated code requires node v16.0.0 (detected v' + nodeVersion + ')'); + } + + // These modules will usually be used on Node.js. Load them eagerly to avoid + // the complexity of lazy-loading. + var fs = require('fs'); + var nodePath = require('path'); + + scriptDirectory = __dirname + '/'; + +// include: node_shell_read.js +readBinary = (filename) => { + // We need to re-wrap `file://` strings to URLs. + filename = isFileURI(filename) ? new URL(filename) : filename; + var ret = fs.readFileSync(filename); + assert(Buffer.isBuffer(ret)); + return ret; +}; + +readAsync = async (filename, binary = true) => { + // See the comment in the `readBinary` function. + filename = isFileURI(filename) ? new URL(filename) : filename; + var ret = fs.readFileSync(filename, binary ? undefined : 'utf8'); + assert(binary ? Buffer.isBuffer(ret) : typeof ret == 'string'); + return ret; +}; +// end include: node_shell_read.js + if (!Module['thisProgram'] && process.argv.length > 1) { + thisProgram = process.argv[1].replace(/\\/g, '/'); + } + + arguments_ = process.argv.slice(2); + + if (typeof module != 'undefined') { + module['exports'] = Module; + } + + quit_ = (status, toThrow) => { + process.exitCode = status; + throw toThrow; + }; + +} else +if (ENVIRONMENT_IS_SHELL) { + + if ((typeof process == 'object' && typeof require === 'function') || typeof window == 'object' || typeof WorkerGlobalScope != 'undefined') throw new Error('not compiled for this environment (did you build to HTML and try to run it not on the web, or set ENVIRONMENT to something - like node - and run it someplace else - like on the web?)'); + +} else + +// Note that this includes Node.js workers when relevant (pthreads is enabled). +// Node.js workers are detected as a combination of ENVIRONMENT_IS_WORKER and +// ENVIRONMENT_IS_NODE. +if (ENVIRONMENT_IS_WEB || ENVIRONMENT_IS_WORKER) { + if (ENVIRONMENT_IS_WORKER) { // Check worker, not web, since window could be polyfilled + scriptDirectory = self.location.href; + } else if (typeof document != 'undefined' && document.currentScript) { // web + scriptDirectory = document.currentScript.src; + } + // blob urls look like blob:http://site.com/etc/etc and we cannot infer anything from them. + // otherwise, slice off the final part of the url to find the script directory. + // if scriptDirectory does not contain a slash, lastIndexOf will return -1, + // and scriptDirectory will correctly be replaced with an empty string. + // If scriptDirectory contains a query (starting with ?) or a fragment (starting with #), + // they are removed because they could contain a slash. + if (scriptDirectory.startsWith('blob:')) { + scriptDirectory = ''; + } else { + scriptDirectory = scriptDirectory.slice(0, scriptDirectory.replace(/[?#].*/, '').lastIndexOf('/')+1); + } + + if (!(typeof window == 'object' || typeof WorkerGlobalScope != 'undefined')) throw new Error('not compiled for this environment (did you build to HTML and try to run it not on the web, or set ENVIRONMENT to something - like node - and run it someplace else - like on the web?)'); + + { +// include: web_or_worker_shell_read.js +if (ENVIRONMENT_IS_WORKER) { + readBinary = (url) => { + var xhr = new XMLHttpRequest(); + xhr.open('GET', url, false); + xhr.responseType = 'arraybuffer'; + xhr.send(null); + return new Uint8Array(/** @type{!ArrayBuffer} */(xhr.response)); + }; + } + + readAsync = async (url) => { + // Fetch has some additional restrictions over XHR, like it can't be used on a file:// url. + // See https://github.com/github/fetch/pull/92#issuecomment-140665932 + // Cordova or Electron apps are typically loaded from a file:// url. + // So use XHR on webview if URL is a file URL. + if (isFileURI(url)) { + return new Promise((resolve, reject) => { + var xhr = new XMLHttpRequest(); + xhr.open('GET', url, true); + xhr.responseType = 'arraybuffer'; + xhr.onload = () => { + if (xhr.status == 200 || (xhr.status == 0 && xhr.response)) { // file URLs can return 0 + resolve(xhr.response); + return; + } + reject(xhr.status); + }; + xhr.onerror = reject; + xhr.send(null); + }); + } + var response = await fetch(url, { credentials: 'same-origin' }); + if (response.ok) { + return response.arrayBuffer(); + } + throw new Error(response.status + ' : ' + response.url); + }; +// end include: web_or_worker_shell_read.js + } +} else +{ + throw new Error('environment detection error'); +} + +var out = Module['print'] || console.log.bind(console); +var err = Module['printErr'] || console.error.bind(console); + +// Merge back in the overrides +Object.assign(Module, moduleOverrides); +// Free the object hierarchy contained in the overrides, this lets the GC +// reclaim data used. +moduleOverrides = null; +checkIncomingModuleAPI(); + +// Emit code to handle expected values on the Module object. This applies Module.x +// to the proper local x. This has two benefits: first, we only emit it if it is +// expected to arrive, and second, by using a local everywhere else that can be +// minified. + +if (Module['arguments']) arguments_ = Module['arguments'];legacyModuleProp('arguments', 'arguments_'); + +if (Module['thisProgram']) thisProgram = Module['thisProgram'];legacyModuleProp('thisProgram', 'thisProgram'); + +// perform assertions in shell.js after we set up out() and err(), as otherwise if an assertion fails it cannot print the message +// Assertions on removed incoming Module JS APIs. +assert(typeof Module['memoryInitializerPrefixURL'] == 'undefined', 'Module.memoryInitializerPrefixURL option was removed, use Module.locateFile instead'); +assert(typeof Module['pthreadMainPrefixURL'] == 'undefined', 'Module.pthreadMainPrefixURL option was removed, use Module.locateFile instead'); +assert(typeof Module['cdInitializerPrefixURL'] == 'undefined', 'Module.cdInitializerPrefixURL option was removed, use Module.locateFile instead'); +assert(typeof Module['filePackagePrefixURL'] == 'undefined', 'Module.filePackagePrefixURL option was removed, use Module.locateFile instead'); +assert(typeof Module['read'] == 'undefined', 'Module.read option was removed'); +assert(typeof Module['readAsync'] == 'undefined', 'Module.readAsync option was removed (modify readAsync in JS)'); +assert(typeof Module['readBinary'] == 'undefined', 'Module.readBinary option was removed (modify readBinary in JS)'); +assert(typeof Module['setWindowTitle'] == 'undefined', 'Module.setWindowTitle option was removed (modify emscripten_set_window_title in JS)'); +assert(typeof Module['TOTAL_MEMORY'] == 'undefined', 'Module.TOTAL_MEMORY has been renamed Module.INITIAL_MEMORY'); +legacyModuleProp('asm', 'wasmExports'); +legacyModuleProp('readAsync', 'readAsync'); +legacyModuleProp('readBinary', 'readBinary'); +legacyModuleProp('setWindowTitle', 'setWindowTitle'); +var IDBFS = 'IDBFS is no longer included by default; build with -lidbfs.js'; +var PROXYFS = 'PROXYFS is no longer included by default; build with -lproxyfs.js'; +var WORKERFS = 'WORKERFS is no longer included by default; build with -lworkerfs.js'; +var FETCHFS = 'FETCHFS is no longer included by default; build with -lfetchfs.js'; +var ICASEFS = 'ICASEFS is no longer included by default; build with -licasefs.js'; +var JSFILEFS = 'JSFILEFS is no longer included by default; build with -ljsfilefs.js'; +var OPFS = 'OPFS is no longer included by default; build with -lopfs.js'; + +var NODEFS = 'NODEFS is no longer included by default; build with -lnodefs.js'; + +assert(!ENVIRONMENT_IS_SHELL, 'shell environment detected but not enabled at build time. Add `shell` to `-sENVIRONMENT` to enable.'); + +// end include: shell.js + +// include: preamble.js +// === Preamble library stuff === + +// Documentation for the public APIs defined in this file must be updated in: +// site/source/docs/api_reference/preamble.js.rst +// A prebuilt local version of the documentation is available at: +// site/build/text/docs/api_reference/preamble.js.txt +// You can also build docs locally as HTML or other formats in site/ +// An online HTML version (which may be of a different version of Emscripten) +// is up at http://kripken.github.io/emscripten-site/docs/api_reference/preamble.js.html + +var wasmBinary = Module['wasmBinary'];legacyModuleProp('wasmBinary', 'wasmBinary'); + +if (typeof WebAssembly != 'object') { + err('no native wasm support detected'); +} + +// Wasm globals + +var wasmMemory; + +//======================================== +// Runtime essentials +//======================================== + +// whether we are quitting the application. no code should run after this. +// set in exit() and abort() +var ABORT = false; + +// set by exit() and abort(). Passed to 'onExit' handler. +// NOTE: This is also used as the process return code code in shell environments +// but only when noExitRuntime is false. +var EXITSTATUS; + +// In STRICT mode, we only define assert() when ASSERTIONS is set. i.e. we +// don't define it at all in release modes. This matches the behaviour of +// MINIMAL_RUNTIME. +// TODO(sbc): Make this the default even without STRICT enabled. +/** @type {function(*, string=)} */ +function assert(condition, text) { + if (!condition) { + abort('Assertion failed' + (text ? ': ' + text : '')); + } +} + +// We used to include malloc/free by default in the past. Show a helpful error in +// builds with assertions. +function _malloc() { + abort('malloc() called but not included in the build - add `_malloc` to EXPORTED_FUNCTIONS'); +} +function _free() { + // Show a helpful error since we used to include free by default in the past. + abort('free() called but not included in the build - add `_free` to EXPORTED_FUNCTIONS'); +} + +// Memory management + +var HEAP, +/** @type {!Int8Array} */ + HEAP8, +/** @type {!Uint8Array} */ + HEAPU8, +/** @type {!Int16Array} */ + HEAP16, +/** @type {!Uint16Array} */ + HEAPU16, +/** @type {!Int32Array} */ + HEAP32, +/** @type {!Uint32Array} */ + HEAPU32, +/** @type {!Float32Array} */ + HEAPF32, +/* BigInt64Array type is not correctly defined in closure +/** not-@type {!BigInt64Array} */ + HEAP64, +/* BigUint64Array type is not correctly defined in closure +/** not-t@type {!BigUint64Array} */ + HEAPU64, +/** @type {!Float64Array} */ + HEAPF64; + +var runtimeInitialized = false; + +/** + * Indicates whether filename is delivered via file protocol (as opposed to http/https) + * @noinline + */ +var isFileURI = (filename) => filename.startsWith('file://'); + +// include: runtime_shared.js +// include: runtime_stack_check.js +// Initializes the stack cookie. Called at the startup of main and at the startup of each thread in pthreads mode. +function writeStackCookie() { + var max = _emscripten_stack_get_end(); + assert((max & 3) == 0); + // If the stack ends at address zero we write our cookies 4 bytes into the + // stack. This prevents interference with SAFE_HEAP and ASAN which also + // monitor writes to address zero. + if (max == 0) { + max += 4; + } + // The stack grow downwards towards _emscripten_stack_get_end. + // We write cookies to the final two words in the stack and detect if they are + // ever overwritten. + HEAPU32[((max)>>2)] = 0x02135467; + HEAPU32[(((max)+(4))>>2)] = 0x89BACDFE; + // Also test the global address 0 for integrity. + HEAPU32[((0)>>2)] = 1668509029; +} + +function checkStackCookie() { + if (ABORT) return; + var max = _emscripten_stack_get_end(); + // See writeStackCookie(). + if (max == 0) { + max += 4; + } + var cookie1 = HEAPU32[((max)>>2)]; + var cookie2 = HEAPU32[(((max)+(4))>>2)]; + if (cookie1 != 0x02135467 || cookie2 != 0x89BACDFE) { + abort(`Stack overflow! Stack cookie has been overwritten at ${ptrToString(max)}, expected hex dwords 0x89BACDFE and 0x2135467, but received ${ptrToString(cookie2)} ${ptrToString(cookie1)}`); + } + // Also test the global address 0 for integrity. + if (HEAPU32[((0)>>2)] != 0x63736d65 /* 'emsc' */) { + abort('Runtime error: The application has corrupted its heap memory area (address zero)!'); + } +} +// end include: runtime_stack_check.js +// include: runtime_exceptions.js +// end include: runtime_exceptions.js +// include: runtime_debug.js +// Endianness check +(() => { + var h16 = new Int16Array(1); + var h8 = new Int8Array(h16.buffer); + h16[0] = 0x6373; + if (h8[0] !== 0x73 || h8[1] !== 0x63) throw 'Runtime error: expected the system to be little-endian! (Run with -sSUPPORT_BIG_ENDIAN to bypass)'; +})(); + +if (Module['ENVIRONMENT']) { + throw new Error('Module.ENVIRONMENT has been deprecated. To force the environment, use the ENVIRONMENT compile-time option (for example, -sENVIRONMENT=web or -sENVIRONMENT=node)'); +} + +function legacyModuleProp(prop, newName, incoming=true) { + if (!Object.getOwnPropertyDescriptor(Module, prop)) { + Object.defineProperty(Module, prop, { + configurable: true, + get() { + let extra = incoming ? ' (the initial value can be provided on Module, but after startup the value is only looked for on a local variable of that name)' : ''; + abort(`\`Module.${prop}\` has been replaced by \`${newName}\`` + extra); + + } + }); + } +} + +function consumedModuleProp(prop) { + if (!Object.getOwnPropertyDescriptor(Module, prop)) { + Object.defineProperty(Module, prop, { + configurable: true, + set() { + abort(`Attempt to set \`Module.${prop}\` after it has already been processed. This can happen, for example, when code is injected via '--post-js' rather than '--pre-js'`); + + } + }); + } +} + +function ignoredModuleProp(prop) { + if (Object.getOwnPropertyDescriptor(Module, prop)) { + abort(`\`Module.${prop}\` was supplied but \`${prop}\` not included in INCOMING_MODULE_JS_API`); + } +} + +// forcing the filesystem exports a few things by default +function isExportedByForceFilesystem(name) { + return name === 'FS_createPath' || + name === 'FS_createDataFile' || + name === 'FS_createPreloadedFile' || + name === 'FS_unlink' || + name === 'addRunDependency' || + // The old FS has some functionality that WasmFS lacks. + name === 'FS_createLazyFile' || + name === 'FS_createDevice' || + name === 'removeRunDependency'; +} + +/** + * Intercept access to a global symbol. This enables us to give informative + * warnings/errors when folks attempt to use symbols they did not include in + * their build, or no symbols that no longer exist. + */ +function hookGlobalSymbolAccess(sym, func) { + if (typeof globalThis != 'undefined' && !Object.getOwnPropertyDescriptor(globalThis, sym)) { + Object.defineProperty(globalThis, sym, { + configurable: true, + get() { + func(); + return undefined; + } + }); + } +} + +function missingGlobal(sym, msg) { + hookGlobalSymbolAccess(sym, () => { + warnOnce(`\`${sym}\` is not longer defined by emscripten. ${msg}`); + }); +} + +missingGlobal('buffer', 'Please use HEAP8.buffer or wasmMemory.buffer'); +missingGlobal('asm', 'Please use wasmExports instead'); + +function missingLibrarySymbol(sym) { + hookGlobalSymbolAccess(sym, () => { + // Can't `abort()` here because it would break code that does runtime + // checks. e.g. `if (typeof SDL === 'undefined')`. + var msg = `\`${sym}\` is a library symbol and not included by default; add it to your library.js __deps or to DEFAULT_LIBRARY_FUNCS_TO_INCLUDE on the command line`; + // DEFAULT_LIBRARY_FUNCS_TO_INCLUDE requires the name as it appears in + // library.js, which means $name for a JS name with no prefix, or name + // for a JS name like _name. + var librarySymbol = sym; + if (!librarySymbol.startsWith('_')) { + librarySymbol = '$' + sym; + } + msg += ` (e.g. -sDEFAULT_LIBRARY_FUNCS_TO_INCLUDE='${librarySymbol}')`; + if (isExportedByForceFilesystem(sym)) { + msg += '. Alternatively, forcing filesystem support (-sFORCE_FILESYSTEM) can export this for you'; + } + warnOnce(msg); + }); + + // Any symbol that is not included from the JS library is also (by definition) + // not exported on the Module object. + unexportedRuntimeSymbol(sym); +} + +function unexportedRuntimeSymbol(sym) { + if (!Object.getOwnPropertyDescriptor(Module, sym)) { + Object.defineProperty(Module, sym, { + configurable: true, + get() { + var msg = `'${sym}' was not exported. add it to EXPORTED_RUNTIME_METHODS (see the Emscripten FAQ)`; + if (isExportedByForceFilesystem(sym)) { + msg += '. Alternatively, forcing filesystem support (-sFORCE_FILESYSTEM) can export this for you'; + } + abort(msg); + } + }); + } +} + +var runtimeDebug = true; // Switch to false at runtime to disable logging at the right times + +// Used by XXXXX_DEBUG settings to output debug messages. +function dbg(...args) { + if (!runtimeDebug && typeof runtimeDebug != 'undefined') return; + // TODO(sbc): Make this configurable somehow. Its not always convenient for + // logging to show up as warnings. + console.warn(...args); +} +// end include: runtime_debug.js +// include: memoryprofiler.js +// end include: memoryprofiler.js + + +function updateMemoryViews() { + var b = wasmMemory.buffer; + Module['HEAP8'] = HEAP8 = new Int8Array(b); + Module['HEAP16'] = HEAP16 = new Int16Array(b); + Module['HEAPU8'] = HEAPU8 = new Uint8Array(b); + Module['HEAPU16'] = HEAPU16 = new Uint16Array(b); + Module['HEAP32'] = HEAP32 = new Int32Array(b); + Module['HEAPU32'] = HEAPU32 = new Uint32Array(b); + Module['HEAPF32'] = HEAPF32 = new Float32Array(b); + Module['HEAPF64'] = HEAPF64 = new Float64Array(b); + Module['HEAP64'] = HEAP64 = new BigInt64Array(b); + Module['HEAPU64'] = HEAPU64 = new BigUint64Array(b); +} + +// end include: runtime_shared.js +assert(!Module['STACK_SIZE'], 'STACK_SIZE can no longer be set at runtime. Use -sSTACK_SIZE at link time') + +assert(typeof Int32Array != 'undefined' && typeof Float64Array !== 'undefined' && Int32Array.prototype.subarray != undefined && Int32Array.prototype.set != undefined, + 'JS engine does not provide full typed array support'); + +// If memory is defined in wasm, the user can't provide it, or set INITIAL_MEMORY +assert(!Module['wasmMemory'], 'Use of `wasmMemory` detected. Use -sIMPORTED_MEMORY to define wasmMemory externally'); +assert(!Module['INITIAL_MEMORY'], 'Detected runtime INITIAL_MEMORY setting. Use -sIMPORTED_MEMORY to define wasmMemory dynamically'); + +function preRun() { + if (Module['preRun']) { + if (typeof Module['preRun'] == 'function') Module['preRun'] = [Module['preRun']]; + while (Module['preRun'].length) { + addOnPreRun(Module['preRun'].shift()); + } + } + consumedModuleProp('preRun'); + callRuntimeCallbacks(onPreRuns); +} + +function initRuntime() { + assert(!runtimeInitialized); + runtimeInitialized = true; + + checkStackCookie(); + + if (!Module['noFSInit'] && !FS.initialized) FS.init(); +TTY.init(); + + wasmExports['__wasm_call_ctors'](); + + FS.ignorePermissions = false; +} + +function preMain() { + checkStackCookie(); + +} + +function postRun() { + checkStackCookie(); + + if (Module['postRun']) { + if (typeof Module['postRun'] == 'function') Module['postRun'] = [Module['postRun']]; + while (Module['postRun'].length) { + addOnPostRun(Module['postRun'].shift()); + } + } + consumedModuleProp('postRun'); + + callRuntimeCallbacks(onPostRuns); +} + +// A counter of dependencies for calling run(). If we need to +// do asynchronous work before running, increment this and +// decrement it. Incrementing must happen in a place like +// Module.preRun (used by emcc to add file preloading). +// Note that you can add dependencies in preRun, even though +// it happens right before run - run will be postponed until +// the dependencies are met. +var runDependencies = 0; +var dependenciesFulfilled = null; // overridden to take different actions when all run dependencies are fulfilled +var runDependencyTracking = {}; +var runDependencyWatcher = null; + +function getUniqueRunDependency(id) { + var orig = id; + while (1) { + if (!runDependencyTracking[id]) return id; + id = orig + Math.random(); + } +} + +function addRunDependency(id) { + runDependencies++; + + Module['monitorRunDependencies']?.(runDependencies); + + if (id) { + assert(!runDependencyTracking[id]); + runDependencyTracking[id] = 1; + if (runDependencyWatcher === null && typeof setInterval != 'undefined') { + // Check for missing dependencies every few seconds + runDependencyWatcher = setInterval(() => { + if (ABORT) { + clearInterval(runDependencyWatcher); + runDependencyWatcher = null; + return; + } + var shown = false; + for (var dep in runDependencyTracking) { + if (!shown) { + shown = true; + err('still waiting on run dependencies:'); + } + err(`dependency: ${dep}`); + } + if (shown) { + err('(end of list)'); + } + }, 10000); + } + } else { + err('warning: run dependency added without ID'); + } +} + +function removeRunDependency(id) { + runDependencies--; + + Module['monitorRunDependencies']?.(runDependencies); + + if (id) { + assert(runDependencyTracking[id]); + delete runDependencyTracking[id]; + } else { + err('warning: run dependency removed without ID'); + } + if (runDependencies == 0) { + if (runDependencyWatcher !== null) { + clearInterval(runDependencyWatcher); + runDependencyWatcher = null; + } + if (dependenciesFulfilled) { + var callback = dependenciesFulfilled; + dependenciesFulfilled = null; + callback(); // can add another dependenciesFulfilled + } + } +} + +/** @param {string|number=} what */ +function abort(what) { + Module['onAbort']?.(what); + + what = 'Aborted(' + what + ')'; + // TODO(sbc): Should we remove printing and leave it up to whoever + // catches the exception? + err(what); + + ABORT = true; + + // Use a wasm runtime error, because a JS error might be seen as a foreign + // exception, which means we'd run destructors on it. We need the error to + // simply make the program stop. + // FIXME This approach does not work in Wasm EH because it currently does not assume + // all RuntimeErrors are from traps; it decides whether a RuntimeError is from + // a trap or not based on a hidden field within the object. So at the moment + // we don't have a way of throwing a wasm trap from JS. TODO Make a JS API that + // allows this in the wasm spec. + + // Suppress closure compiler warning here. Closure compiler's builtin extern + // definition for WebAssembly.RuntimeError claims it takes no arguments even + // though it can. + // TODO(https://github.com/google/closure-compiler/pull/3913): Remove if/when upstream closure gets fixed. + /** @suppress {checkTypes} */ + var e = new WebAssembly.RuntimeError(what); + + // Throw the error whether or not MODULARIZE is set because abort is used + // in code paths apart from instantiation where an exception is expected + // to be thrown when abort is called. + throw e; +} + +function createExportWrapper(name, nargs) { + return (...args) => { + assert(runtimeInitialized, `native function \`${name}\` called before runtime initialization`); + var f = wasmExports[name]; + assert(f, `exported native function \`${name}\` not found`); + // Only assert for too many arguments. Too few can be valid since the missing arguments will be zero filled. + assert(args.length <= nargs, `native function \`${name}\` called with ${args.length} args but expects ${nargs}`); + return f(...args); + }; +} + +var wasmBinaryFile; + +function findWasmBinary() { + return locateFile('zip_write_encrypt_aes256_file_fuzzer.wasm'); +} + +function getBinarySync(file) { + if (file == wasmBinaryFile && wasmBinary) { + return new Uint8Array(wasmBinary); + } + if (readBinary) { + return readBinary(file); + } + throw 'both async and sync fetching of the wasm failed'; +} + +async function getWasmBinary(binaryFile) { + // If we don't have the binary yet, load it asynchronously using readAsync. + if (!wasmBinary) { + // Fetch the binary using readAsync + try { + var response = await readAsync(binaryFile); + return new Uint8Array(response); + } catch { + // Fall back to getBinarySync below; + } + } + + // Otherwise, getBinarySync should be able to get it synchronously + return getBinarySync(binaryFile); +} + +async function instantiateArrayBuffer(binaryFile, imports) { + try { + var binary = await getWasmBinary(binaryFile); + var instance = await WebAssembly.instantiate(binary, imports); + return instance; + } catch (reason) { + err(`failed to asynchronously prepare wasm: ${reason}`); + + // Warn on some common problems. + if (isFileURI(wasmBinaryFile)) { + err(`warning: Loading from a file URI (${wasmBinaryFile}) is not supported in most browsers. See https://emscripten.org/docs/getting_started/FAQ.html#how-do-i-run-a-local-webserver-for-testing-why-does-my-program-stall-in-downloading-or-preparing`); + } + abort(reason); + } +} + +async function instantiateAsync(binary, binaryFile, imports) { + if (!binary && typeof WebAssembly.instantiateStreaming == 'function' + // Don't use streaming for file:// delivered objects in a webview, fetch them synchronously. + && !isFileURI(binaryFile) + // Avoid instantiateStreaming() on Node.js environment for now, as while + // Node.js v18.1.0 implements it, it does not have a full fetch() + // implementation yet. + // + // Reference: + // https://github.com/emscripten-core/emscripten/pull/16917 + && !ENVIRONMENT_IS_NODE + ) { + try { + var response = fetch(binaryFile, { credentials: 'same-origin' }); + var instantiationResult = await WebAssembly.instantiateStreaming(response, imports); + return instantiationResult; + } catch (reason) { + // We expect the most common failure cause to be a bad MIME type for the binary, + // in which case falling back to ArrayBuffer instantiation should work. + err(`wasm streaming compile failed: ${reason}`); + err('falling back to ArrayBuffer instantiation'); + // fall back of instantiateArrayBuffer below + }; + } + return instantiateArrayBuffer(binaryFile, imports); +} + +function getWasmImports() { + // prepare imports + return { + 'env': wasmImports, + 'wasi_snapshot_preview1': wasmImports, + } +} + +// Create the wasm instance. +// Receives the wasm imports, returns the exports. +async function createWasm() { + // Load the wasm module and create an instance of using native support in the JS engine. + // handle a generated wasm instance, receiving its exports and + // performing other necessary setup + /** @param {WebAssembly.Module=} module*/ + function receiveInstance(instance, module) { + wasmExports = instance.exports; + + + + wasmMemory = wasmExports['memory']; + + assert(wasmMemory, 'memory not found in wasm exports'); + updateMemoryViews(); + + removeRunDependency('wasm-instantiate'); + return wasmExports; + } + // wait for the pthread pool (if any) + addRunDependency('wasm-instantiate'); + + // Prefer streaming instantiation if available. + // Async compilation can be confusing when an error on the page overwrites Module + // (for example, if the order of elements is wrong, and the one defining Module is + // later), so we save Module and check it later. + var trueModule = Module; + function receiveInstantiationResult(result) { + // 'result' is a ResultObject object which has both the module and instance. + // receiveInstance() will swap in the exports (to Module.asm) so they can be called + assert(Module === trueModule, 'the Module object should not be replaced during async compilation - perhaps the order of HTML elements is wrong?'); + trueModule = null; + // TODO: Due to Closure regression https://github.com/google/closure-compiler/issues/3193, the above line no longer optimizes out down to the following line. + // When the regression is fixed, can restore the above PTHREADS-enabled path. + return receiveInstance(result['instance']); + } + + var info = getWasmImports(); + + // User shell pages can write their own Module.instantiateWasm = function(imports, successCallback) callback + // to manually instantiate the Wasm module themselves. This allows pages to + // run the instantiation parallel to any other async startup actions they are + // performing. + // Also pthreads and wasm workers initialize the wasm instance through this + // path. + if (Module['instantiateWasm']) { + return new Promise((resolve, reject) => { + try { + Module['instantiateWasm'](info, (mod, inst) => { + receiveInstance(mod, inst); + resolve(mod.exports); + }); + } catch(e) { + err(`Module.instantiateWasm callback failed with error: ${e}`); + reject(e); + } + }); + } + + wasmBinaryFile ??= findWasmBinary(); + var result = await instantiateAsync(wasmBinary, wasmBinaryFile, info); + var exports = receiveInstantiationResult(result); + return exports; +} + +// end include: preamble.js + +// Begin JS library code + + + class ExitStatus { + name = 'ExitStatus'; + constructor(status) { + this.message = `Program terminated with exit(${status})`; + this.status = status; + } + } + + var callRuntimeCallbacks = (callbacks) => { + while (callbacks.length > 0) { + // Pass the module as the first argument. + callbacks.shift()(Module); + } + }; + var onPostRuns = []; + var addOnPostRun = (cb) => onPostRuns.unshift(cb); + + var onPreRuns = []; + var addOnPreRun = (cb) => onPreRuns.unshift(cb); + + + + /** + * @param {number} ptr + * @param {string} type + */ + function getValue(ptr, type = 'i8') { + if (type.endsWith('*')) type = '*'; + switch (type) { + case 'i1': return HEAP8[ptr]; + case 'i8': return HEAP8[ptr]; + case 'i16': return HEAP16[((ptr)>>1)]; + case 'i32': return HEAP32[((ptr)>>2)]; + case 'i64': return HEAP64[((ptr)>>3)]; + case 'float': return HEAPF32[((ptr)>>2)]; + case 'double': return HEAPF64[((ptr)>>3)]; + case '*': return HEAPU32[((ptr)>>2)]; + default: abort(`invalid type for getValue: ${type}`); + } + } + + var noExitRuntime = Module['noExitRuntime'] || true; + + var ptrToString = (ptr) => { + assert(typeof ptr === 'number'); + // With CAN_ADDRESS_2GB or MEMORY64, pointers are already unsigned. + ptr >>>= 0; + return '0x' + ptr.toString(16).padStart(8, '0'); + }; + + + /** + * @param {number} ptr + * @param {number} value + * @param {string} type + */ + function setValue(ptr, value, type = 'i8') { + if (type.endsWith('*')) type = '*'; + switch (type) { + case 'i1': HEAP8[ptr] = value; break; + case 'i8': HEAP8[ptr] = value; break; + case 'i16': HEAP16[((ptr)>>1)] = value; break; + case 'i32': HEAP32[((ptr)>>2)] = value; break; + case 'i64': HEAP64[((ptr)>>3)] = BigInt(value); break; + case 'float': HEAPF32[((ptr)>>2)] = value; break; + case 'double': HEAPF64[((ptr)>>3)] = value; break; + case '*': HEAPU32[((ptr)>>2)] = value; break; + default: abort(`invalid type for setValue: ${type}`); + } + } + + var stackRestore = (val) => __emscripten_stack_restore(val); + + var stackSave = () => _emscripten_stack_get_current(); + + var warnOnce = (text) => { + warnOnce.shown ||= {}; + if (!warnOnce.shown[text]) { + warnOnce.shown[text] = 1; + if (ENVIRONMENT_IS_NODE) text = 'warning: ' + text; + err(text); + } + }; + + var PATH = { + isAbs:(path) => path.charAt(0) === '/', + splitPath:(filename) => { + var splitPathRe = /^(\/?|)([\s\S]*?)((?:\.{1,2}|[^\/]+?|)(\.[^.\/]*|))(?:[\/]*)$/; + return splitPathRe.exec(filename).slice(1); + }, + normalizeArray:(parts, allowAboveRoot) => { + // if the path tries to go above the root, `up` ends up > 0 + var up = 0; + for (var i = parts.length - 1; i >= 0; i--) { + var last = parts[i]; + if (last === '.') { + parts.splice(i, 1); + } else if (last === '..') { + parts.splice(i, 1); + up++; + } else if (up) { + parts.splice(i, 1); + up--; + } + } + // if the path is allowed to go above the root, restore leading ..s + if (allowAboveRoot) { + for (; up; up--) { + parts.unshift('..'); + } + } + return parts; + }, + normalize:(path) => { + var isAbsolute = PATH.isAbs(path), + trailingSlash = path.slice(-1) === '/'; + // Normalize the path + path = PATH.normalizeArray(path.split('/').filter((p) => !!p), !isAbsolute).join('/'); + if (!path && !isAbsolute) { + path = '.'; + } + if (path && trailingSlash) { + path += '/'; + } + return (isAbsolute ? '/' : '') + path; + }, + dirname:(path) => { + var result = PATH.splitPath(path), + root = result[0], + dir = result[1]; + if (!root && !dir) { + // No dirname whatsoever + return '.'; + } + if (dir) { + // It has a dirname, strip trailing slash + dir = dir.slice(0, -1); + } + return root + dir; + }, + basename:(path) => path && path.match(/([^\/]+|\/)\/*$/)[1], + join:(...paths) => PATH.normalize(paths.join('/')), + join2:(l, r) => PATH.normalize(l + '/' + r), + }; + + var initRandomFill = () => { + // This block is not needed on v19+ since crypto.getRandomValues is builtin + if (ENVIRONMENT_IS_NODE) { + var nodeCrypto = require('crypto'); + return (view) => nodeCrypto.randomFillSync(view); + } + + return (view) => crypto.getRandomValues(view); + }; + var randomFill = (view) => { + // Lazily init on the first invocation. + (randomFill = initRandomFill())(view); + }; + + + + var PATH_FS = { + resolve:(...args) => { + var resolvedPath = '', + resolvedAbsolute = false; + for (var i = args.length - 1; i >= -1 && !resolvedAbsolute; i--) { + var path = (i >= 0) ? args[i] : FS.cwd(); + // Skip empty and invalid entries + if (typeof path != 'string') { + throw new TypeError('Arguments to path.resolve must be strings'); + } else if (!path) { + return ''; // an invalid portion invalidates the whole thing + } + resolvedPath = path + '/' + resolvedPath; + resolvedAbsolute = PATH.isAbs(path); + } + // At this point the path should be resolved to a full absolute path, but + // handle relative paths to be safe (might happen when process.cwd() fails) + resolvedPath = PATH.normalizeArray(resolvedPath.split('/').filter((p) => !!p), !resolvedAbsolute).join('/'); + return ((resolvedAbsolute ? '/' : '') + resolvedPath) || '.'; + }, + relative:(from, to) => { + from = PATH_FS.resolve(from).slice(1); + to = PATH_FS.resolve(to).slice(1); + function trim(arr) { + var start = 0; + for (; start < arr.length; start++) { + if (arr[start] !== '') break; + } + var end = arr.length - 1; + for (; end >= 0; end--) { + if (arr[end] !== '') break; + } + if (start > end) return []; + return arr.slice(start, end - start + 1); + } + var fromParts = trim(from.split('/')); + var toParts = trim(to.split('/')); + var length = Math.min(fromParts.length, toParts.length); + var samePartsLength = length; + for (var i = 0; i < length; i++) { + if (fromParts[i] !== toParts[i]) { + samePartsLength = i; + break; + } + } + var outputParts = []; + for (var i = samePartsLength; i < fromParts.length; i++) { + outputParts.push('..'); + } + outputParts = outputParts.concat(toParts.slice(samePartsLength)); + return outputParts.join('/'); + }, + }; + + + var UTF8Decoder = typeof TextDecoder != 'undefined' ? new TextDecoder() : undefined; + + /** + * Given a pointer 'idx' to a null-terminated UTF8-encoded string in the given + * array that contains uint8 values, returns a copy of that string as a + * Javascript String object. + * heapOrArray is either a regular array, or a JavaScript typed array view. + * @param {number=} idx + * @param {number=} maxBytesToRead + * @return {string} + */ + var UTF8ArrayToString = (heapOrArray, idx = 0, maxBytesToRead = NaN) => { + var endIdx = idx + maxBytesToRead; + var endPtr = idx; + // TextDecoder needs to know the byte length in advance, it doesn't stop on + // null terminator by itself. Also, use the length info to avoid running tiny + // strings through TextDecoder, since .subarray() allocates garbage. + // (As a tiny code save trick, compare endPtr against endIdx using a negation, + // so that undefined/NaN means Infinity) + while (heapOrArray[endPtr] && !(endPtr >= endIdx)) ++endPtr; + + if (endPtr - idx > 16 && heapOrArray.buffer && UTF8Decoder) { + return UTF8Decoder.decode(heapOrArray.subarray(idx, endPtr)); + } + var str = ''; + // If building with TextDecoder, we have already computed the string length + // above, so test loop end condition against that + while (idx < endPtr) { + // For UTF8 byte structure, see: + // http://en.wikipedia.org/wiki/UTF-8#Description + // https://www.ietf.org/rfc/rfc2279.txt + // https://tools.ietf.org/html/rfc3629 + var u0 = heapOrArray[idx++]; + if (!(u0 & 0x80)) { str += String.fromCharCode(u0); continue; } + var u1 = heapOrArray[idx++] & 63; + if ((u0 & 0xE0) == 0xC0) { str += String.fromCharCode(((u0 & 31) << 6) | u1); continue; } + var u2 = heapOrArray[idx++] & 63; + if ((u0 & 0xF0) == 0xE0) { + u0 = ((u0 & 15) << 12) | (u1 << 6) | u2; + } else { + if ((u0 & 0xF8) != 0xF0) warnOnce('Invalid UTF-8 leading byte ' + ptrToString(u0) + ' encountered when deserializing a UTF-8 string in wasm memory to a JS string!'); + u0 = ((u0 & 7) << 18) | (u1 << 12) | (u2 << 6) | (heapOrArray[idx++] & 63); + } + + if (u0 < 0x10000) { + str += String.fromCharCode(u0); + } else { + var ch = u0 - 0x10000; + str += String.fromCharCode(0xD800 | (ch >> 10), 0xDC00 | (ch & 0x3FF)); + } + } + return str; + }; + + var FS_stdin_getChar_buffer = []; + + var lengthBytesUTF8 = (str) => { + var len = 0; + for (var i = 0; i < str.length; ++i) { + // Gotcha: charCodeAt returns a 16-bit word that is a UTF-16 encoded code + // unit, not a Unicode code point of the character! So decode + // UTF16->UTF32->UTF8. + // See http://unicode.org/faq/utf_bom.html#utf16-3 + var c = str.charCodeAt(i); // possibly a lead surrogate + if (c <= 0x7F) { + len++; + } else if (c <= 0x7FF) { + len += 2; + } else if (c >= 0xD800 && c <= 0xDFFF) { + len += 4; ++i; + } else { + len += 3; + } + } + return len; + }; + + var stringToUTF8Array = (str, heap, outIdx, maxBytesToWrite) => { + assert(typeof str === 'string', `stringToUTF8Array expects a string (got ${typeof str})`); + // Parameter maxBytesToWrite is not optional. Negative values, 0, null, + // undefined and false each don't write out any bytes. + if (!(maxBytesToWrite > 0)) + return 0; + + var startIdx = outIdx; + var endIdx = outIdx + maxBytesToWrite - 1; // -1 for string null terminator. + for (var i = 0; i < str.length; ++i) { + // Gotcha: charCodeAt returns a 16-bit word that is a UTF-16 encoded code + // unit, not a Unicode code point of the character! So decode + // UTF16->UTF32->UTF8. + // See http://unicode.org/faq/utf_bom.html#utf16-3 + // For UTF8 byte structure, see http://en.wikipedia.org/wiki/UTF-8#Description + // and https://www.ietf.org/rfc/rfc2279.txt + // and https://tools.ietf.org/html/rfc3629 + var u = str.charCodeAt(i); // possibly a lead surrogate + if (u >= 0xD800 && u <= 0xDFFF) { + var u1 = str.charCodeAt(++i); + u = 0x10000 + ((u & 0x3FF) << 10) | (u1 & 0x3FF); + } + if (u <= 0x7F) { + if (outIdx >= endIdx) break; + heap[outIdx++] = u; + } else if (u <= 0x7FF) { + if (outIdx + 1 >= endIdx) break; + heap[outIdx++] = 0xC0 | (u >> 6); + heap[outIdx++] = 0x80 | (u & 63); + } else if (u <= 0xFFFF) { + if (outIdx + 2 >= endIdx) break; + heap[outIdx++] = 0xE0 | (u >> 12); + heap[outIdx++] = 0x80 | ((u >> 6) & 63); + heap[outIdx++] = 0x80 | (u & 63); + } else { + if (outIdx + 3 >= endIdx) break; + if (u > 0x10FFFF) warnOnce('Invalid Unicode code point ' + ptrToString(u) + ' encountered when serializing a JS string to a UTF-8 string in wasm memory! (Valid unicode code points should be in range 0-0x10FFFF).'); + heap[outIdx++] = 0xF0 | (u >> 18); + heap[outIdx++] = 0x80 | ((u >> 12) & 63); + heap[outIdx++] = 0x80 | ((u >> 6) & 63); + heap[outIdx++] = 0x80 | (u & 63); + } + } + // Null-terminate the pointer to the buffer. + heap[outIdx] = 0; + return outIdx - startIdx; + }; + /** @type {function(string, boolean=, number=)} */ + var intArrayFromString = (stringy, dontAddNull, length) => { + var len = length > 0 ? length : lengthBytesUTF8(stringy)+1; + var u8array = new Array(len); + var numBytesWritten = stringToUTF8Array(stringy, u8array, 0, u8array.length); + if (dontAddNull) u8array.length = numBytesWritten; + return u8array; + }; + var FS_stdin_getChar = () => { + if (!FS_stdin_getChar_buffer.length) { + var result = null; + if (ENVIRONMENT_IS_NODE) { + // we will read data by chunks of BUFSIZE + var BUFSIZE = 256; + var buf = Buffer.alloc(BUFSIZE); + var bytesRead = 0; + + // For some reason we must suppress a closure warning here, even though + // fd definitely exists on process.stdin, and is even the proper way to + // get the fd of stdin, + // https://github.com/nodejs/help/issues/2136#issuecomment-523649904 + // This started to happen after moving this logic out of library_tty.js, + // so it is related to the surrounding code in some unclear manner. + /** @suppress {missingProperties} */ + var fd = process.stdin.fd; + + try { + bytesRead = fs.readSync(fd, buf, 0, BUFSIZE); + } catch(e) { + // Cross-platform differences: on Windows, reading EOF throws an + // exception, but on other OSes, reading EOF returns 0. Uniformize + // behavior by treating the EOF exception to return 0. + if (e.toString().includes('EOF')) bytesRead = 0; + else throw e; + } + + if (bytesRead > 0) { + result = buf.slice(0, bytesRead).toString('utf-8'); + } + } else + if (typeof window != 'undefined' && + typeof window.prompt == 'function') { + // Browser. + result = window.prompt('Input: '); // returns null on cancel + if (result !== null) { + result += '\n'; + } + } else + {} + if (!result) { + return null; + } + FS_stdin_getChar_buffer = intArrayFromString(result, true); + } + return FS_stdin_getChar_buffer.shift(); + }; + var TTY = { + ttys:[], + init() { + // https://github.com/emscripten-core/emscripten/pull/1555 + // if (ENVIRONMENT_IS_NODE) { + // // currently, FS.init does not distinguish if process.stdin is a file or TTY + // // device, it always assumes it's a TTY device. because of this, we're forcing + // // process.stdin to UTF8 encoding to at least make stdin reading compatible + // // with text files until FS.init can be refactored. + // process.stdin.setEncoding('utf8'); + // } + }, + shutdown() { + // https://github.com/emscripten-core/emscripten/pull/1555 + // if (ENVIRONMENT_IS_NODE) { + // // inolen: any idea as to why node -e 'process.stdin.read()' wouldn't exit immediately (with process.stdin being a tty)? + // // isaacs: because now it's reading from the stream, you've expressed interest in it, so that read() kicks off a _read() which creates a ReadReq operation + // // inolen: I thought read() in that case was a synchronous operation that just grabbed some amount of buffered data if it exists? + // // isaacs: it is. but it also triggers a _read() call, which calls readStart() on the handle + // // isaacs: do process.stdin.pause() and i'd think it'd probably close the pending call + // process.stdin.pause(); + // } + }, + register(dev, ops) { + TTY.ttys[dev] = { input: [], output: [], ops: ops }; + FS.registerDevice(dev, TTY.stream_ops); + }, + stream_ops:{ + open(stream) { + var tty = TTY.ttys[stream.node.rdev]; + if (!tty) { + throw new FS.ErrnoError(43); + } + stream.tty = tty; + stream.seekable = false; + }, + close(stream) { + // flush any pending line data + stream.tty.ops.fsync(stream.tty); + }, + fsync(stream) { + stream.tty.ops.fsync(stream.tty); + }, + read(stream, buffer, offset, length, pos /* ignored */) { + if (!stream.tty || !stream.tty.ops.get_char) { + throw new FS.ErrnoError(60); + } + var bytesRead = 0; + for (var i = 0; i < length; i++) { + var result; + try { + result = stream.tty.ops.get_char(stream.tty); + } catch (e) { + throw new FS.ErrnoError(29); + } + if (result === undefined && bytesRead === 0) { + throw new FS.ErrnoError(6); + } + if (result === null || result === undefined) break; + bytesRead++; + buffer[offset+i] = result; + } + if (bytesRead) { + stream.node.atime = Date.now(); + } + return bytesRead; + }, + write(stream, buffer, offset, length, pos) { + if (!stream.tty || !stream.tty.ops.put_char) { + throw new FS.ErrnoError(60); + } + try { + for (var i = 0; i < length; i++) { + stream.tty.ops.put_char(stream.tty, buffer[offset+i]); + } + } catch (e) { + throw new FS.ErrnoError(29); + } + if (length) { + stream.node.mtime = stream.node.ctime = Date.now(); + } + return i; + }, + }, + default_tty_ops:{ + get_char(tty) { + return FS_stdin_getChar(); + }, + put_char(tty, val) { + if (val === null || val === 10) { + out(UTF8ArrayToString(tty.output)); + tty.output = []; + } else { + if (val != 0) tty.output.push(val); // val == 0 would cut text output off in the middle. + } + }, + fsync(tty) { + if (tty.output?.length > 0) { + out(UTF8ArrayToString(tty.output)); + tty.output = []; + } + }, + ioctl_tcgets(tty) { + // typical setting + return { + c_iflag: 25856, + c_oflag: 5, + c_cflag: 191, + c_lflag: 35387, + c_cc: [ + 0x03, 0x1c, 0x7f, 0x15, 0x04, 0x00, 0x01, 0x00, 0x11, 0x13, 0x1a, 0x00, + 0x12, 0x0f, 0x17, 0x16, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, + ] + }; + }, + ioctl_tcsets(tty, optional_actions, data) { + // currently just ignore + return 0; + }, + ioctl_tiocgwinsz(tty) { + return [24, 80]; + }, + }, + default_tty1_ops:{ + put_char(tty, val) { + if (val === null || val === 10) { + err(UTF8ArrayToString(tty.output)); + tty.output = []; + } else { + if (val != 0) tty.output.push(val); + } + }, + fsync(tty) { + if (tty.output?.length > 0) { + err(UTF8ArrayToString(tty.output)); + tty.output = []; + } + }, + }, + }; + + + var mmapAlloc = (size) => { + abort('internal error: mmapAlloc called but `emscripten_builtin_memalign` native symbol not exported'); + }; + var MEMFS = { + ops_table:null, + mount(mount) { + return MEMFS.createNode(null, '/', 16895, 0); + }, + createNode(parent, name, mode, dev) { + if (FS.isBlkdev(mode) || FS.isFIFO(mode)) { + // no supported + throw new FS.ErrnoError(63); + } + MEMFS.ops_table ||= { + dir: { + node: { + getattr: MEMFS.node_ops.getattr, + setattr: MEMFS.node_ops.setattr, + lookup: MEMFS.node_ops.lookup, + mknod: MEMFS.node_ops.mknod, + rename: MEMFS.node_ops.rename, + unlink: MEMFS.node_ops.unlink, + rmdir: MEMFS.node_ops.rmdir, + readdir: MEMFS.node_ops.readdir, + symlink: MEMFS.node_ops.symlink + }, + stream: { + llseek: MEMFS.stream_ops.llseek + } + }, + file: { + node: { + getattr: MEMFS.node_ops.getattr, + setattr: MEMFS.node_ops.setattr + }, + stream: { + llseek: MEMFS.stream_ops.llseek, + read: MEMFS.stream_ops.read, + write: MEMFS.stream_ops.write, + mmap: MEMFS.stream_ops.mmap, + msync: MEMFS.stream_ops.msync + } + }, + link: { + node: { + getattr: MEMFS.node_ops.getattr, + setattr: MEMFS.node_ops.setattr, + readlink: MEMFS.node_ops.readlink + }, + stream: {} + }, + chrdev: { + node: { + getattr: MEMFS.node_ops.getattr, + setattr: MEMFS.node_ops.setattr + }, + stream: FS.chrdev_stream_ops + } + }; + var node = FS.createNode(parent, name, mode, dev); + if (FS.isDir(node.mode)) { + node.node_ops = MEMFS.ops_table.dir.node; + node.stream_ops = MEMFS.ops_table.dir.stream; + node.contents = {}; + } else if (FS.isFile(node.mode)) { + node.node_ops = MEMFS.ops_table.file.node; + node.stream_ops = MEMFS.ops_table.file.stream; + node.usedBytes = 0; // The actual number of bytes used in the typed array, as opposed to contents.length which gives the whole capacity. + // When the byte data of the file is populated, this will point to either a typed array, or a normal JS array. Typed arrays are preferred + // for performance, and used by default. However, typed arrays are not resizable like normal JS arrays are, so there is a small disk size + // penalty involved for appending file writes that continuously grow a file similar to std::vector capacity vs used -scheme. + node.contents = null; + } else if (FS.isLink(node.mode)) { + node.node_ops = MEMFS.ops_table.link.node; + node.stream_ops = MEMFS.ops_table.link.stream; + } else if (FS.isChrdev(node.mode)) { + node.node_ops = MEMFS.ops_table.chrdev.node; + node.stream_ops = MEMFS.ops_table.chrdev.stream; + } + node.atime = node.mtime = node.ctime = Date.now(); + // add the new node to the parent + if (parent) { + parent.contents[name] = node; + parent.atime = parent.mtime = parent.ctime = node.atime; + } + return node; + }, + getFileDataAsTypedArray(node) { + if (!node.contents) return new Uint8Array(0); + if (node.contents.subarray) return node.contents.subarray(0, node.usedBytes); // Make sure to not return excess unused bytes. + return new Uint8Array(node.contents); + }, + expandFileStorage(node, newCapacity) { + var prevCapacity = node.contents ? node.contents.length : 0; + if (prevCapacity >= newCapacity) return; // No need to expand, the storage was already large enough. + // Don't expand strictly to the given requested limit if it's only a very small increase, but instead geometrically grow capacity. + // For small filesizes (<1MB), perform size*2 geometric increase, but for large sizes, do a much more conservative size*1.125 increase to + // avoid overshooting the allocation cap by a very large margin. + var CAPACITY_DOUBLING_MAX = 1024 * 1024; + newCapacity = Math.max(newCapacity, (prevCapacity * (prevCapacity < CAPACITY_DOUBLING_MAX ? 2.0 : 1.125)) >>> 0); + if (prevCapacity != 0) newCapacity = Math.max(newCapacity, 256); // At minimum allocate 256b for each file when expanding. + var oldContents = node.contents; + node.contents = new Uint8Array(newCapacity); // Allocate new storage. + if (node.usedBytes > 0) node.contents.set(oldContents.subarray(0, node.usedBytes), 0); // Copy old data over to the new storage. + }, + resizeFileStorage(node, newSize) { + if (node.usedBytes == newSize) return; + if (newSize == 0) { + node.contents = null; // Fully decommit when requesting a resize to zero. + node.usedBytes = 0; + } else { + var oldContents = node.contents; + node.contents = new Uint8Array(newSize); // Allocate new storage. + if (oldContents) { + node.contents.set(oldContents.subarray(0, Math.min(newSize, node.usedBytes))); // Copy old data over to the new storage. + } + node.usedBytes = newSize; + } + }, + node_ops:{ + getattr(node) { + var attr = {}; + // device numbers reuse inode numbers. + attr.dev = FS.isChrdev(node.mode) ? node.id : 1; + attr.ino = node.id; + attr.mode = node.mode; + attr.nlink = 1; + attr.uid = 0; + attr.gid = 0; + attr.rdev = node.rdev; + if (FS.isDir(node.mode)) { + attr.size = 4096; + } else if (FS.isFile(node.mode)) { + attr.size = node.usedBytes; + } else if (FS.isLink(node.mode)) { + attr.size = node.link.length; + } else { + attr.size = 0; + } + attr.atime = new Date(node.atime); + attr.mtime = new Date(node.mtime); + attr.ctime = new Date(node.ctime); + // NOTE: In our implementation, st_blocks = Math.ceil(st_size/st_blksize), + // but this is not required by the standard. + attr.blksize = 4096; + attr.blocks = Math.ceil(attr.size / attr.blksize); + return attr; + }, + setattr(node, attr) { + for (const key of ["mode", "atime", "mtime", "ctime"]) { + if (attr[key] != null) { + node[key] = attr[key]; + } + } + if (attr.size !== undefined) { + MEMFS.resizeFileStorage(node, attr.size); + } + }, + lookup(parent, name) { + throw new FS.ErrnoError(44); + }, + mknod(parent, name, mode, dev) { + return MEMFS.createNode(parent, name, mode, dev); + }, + rename(old_node, new_dir, new_name) { + var new_node; + try { + new_node = FS.lookupNode(new_dir, new_name); + } catch (e) {} + if (new_node) { + if (FS.isDir(old_node.mode)) { + // if we're overwriting a directory at new_name, make sure it's empty. + for (var i in new_node.contents) { + throw new FS.ErrnoError(55); + } + } + FS.hashRemoveNode(new_node); + } + // do the internal rewiring + delete old_node.parent.contents[old_node.name]; + new_dir.contents[new_name] = old_node; + old_node.name = new_name; + new_dir.ctime = new_dir.mtime = old_node.parent.ctime = old_node.parent.mtime = Date.now(); + }, + unlink(parent, name) { + delete parent.contents[name]; + parent.ctime = parent.mtime = Date.now(); + }, + rmdir(parent, name) { + var node = FS.lookupNode(parent, name); + for (var i in node.contents) { + throw new FS.ErrnoError(55); + } + delete parent.contents[name]; + parent.ctime = parent.mtime = Date.now(); + }, + readdir(node) { + return ['.', '..', ...Object.keys(node.contents)]; + }, + symlink(parent, newname, oldpath) { + var node = MEMFS.createNode(parent, newname, 0o777 | 40960, 0); + node.link = oldpath; + return node; + }, + readlink(node) { + if (!FS.isLink(node.mode)) { + throw new FS.ErrnoError(28); + } + return node.link; + }, + }, + stream_ops:{ + read(stream, buffer, offset, length, position) { + var contents = stream.node.contents; + if (position >= stream.node.usedBytes) return 0; + var size = Math.min(stream.node.usedBytes - position, length); + assert(size >= 0); + if (size > 8 && contents.subarray) { // non-trivial, and typed array + buffer.set(contents.subarray(position, position + size), offset); + } else { + for (var i = 0; i < size; i++) buffer[offset + i] = contents[position + i]; + } + return size; + }, + write(stream, buffer, offset, length, position, canOwn) { + // The data buffer should be a typed array view + assert(!(buffer instanceof ArrayBuffer)); + + if (!length) return 0; + var node = stream.node; + node.mtime = node.ctime = Date.now(); + + if (buffer.subarray && (!node.contents || node.contents.subarray)) { // This write is from a typed array to a typed array? + if (canOwn) { + assert(position === 0, 'canOwn must imply no weird position inside the file'); + node.contents = buffer.subarray(offset, offset + length); + node.usedBytes = length; + return length; + } else if (node.usedBytes === 0 && position === 0) { // If this is a simple first write to an empty file, do a fast set since we don't need to care about old data. + node.contents = buffer.slice(offset, offset + length); + node.usedBytes = length; + return length; + } else if (position + length <= node.usedBytes) { // Writing to an already allocated and used subrange of the file? + node.contents.set(buffer.subarray(offset, offset + length), position); + return length; + } + } + + // Appending to an existing file and we need to reallocate, or source data did not come as a typed array. + MEMFS.expandFileStorage(node, position+length); + if (node.contents.subarray && buffer.subarray) { + // Use typed array write which is available. + node.contents.set(buffer.subarray(offset, offset + length), position); + } else { + for (var i = 0; i < length; i++) { + node.contents[position + i] = buffer[offset + i]; // Or fall back to manual write if not. + } + } + node.usedBytes = Math.max(node.usedBytes, position + length); + return length; + }, + llseek(stream, offset, whence) { + var position = offset; + if (whence === 1) { + position += stream.position; + } else if (whence === 2) { + if (FS.isFile(stream.node.mode)) { + position += stream.node.usedBytes; + } + } + if (position < 0) { + throw new FS.ErrnoError(28); + } + return position; + }, + mmap(stream, length, position, prot, flags) { + if (!FS.isFile(stream.node.mode)) { + throw new FS.ErrnoError(43); + } + var ptr; + var allocated; + var contents = stream.node.contents; + // Only make a new copy when MAP_PRIVATE is specified. + if (!(flags & 2) && contents && contents.buffer === HEAP8.buffer) { + // We can't emulate MAP_SHARED when the file is not backed by the + // buffer we're mapping to (e.g. the HEAP buffer). + allocated = false; + ptr = contents.byteOffset; + } else { + allocated = true; + ptr = mmapAlloc(length); + if (!ptr) { + throw new FS.ErrnoError(48); + } + if (contents) { + // Try to avoid unnecessary slices. + if (position > 0 || position + length < contents.length) { + if (contents.subarray) { + contents = contents.subarray(position, position + length); + } else { + contents = Array.prototype.slice.call(contents, position, position + length); + } + } + HEAP8.set(contents, ptr); + } + } + return { ptr, allocated }; + }, + msync(stream, buffer, offset, length, mmapFlags) { + MEMFS.stream_ops.write(stream, buffer, 0, length, offset, false); + // should we check if bytesWritten and length are the same? + return 0; + }, + }, + }; + + var asyncLoad = async (url) => { + var arrayBuffer = await readAsync(url); + assert(arrayBuffer, `Loading data file "${url}" failed (no arrayBuffer).`); + return new Uint8Array(arrayBuffer); + }; + + + var FS_createDataFile = (parent, name, fileData, canRead, canWrite, canOwn) => { + FS.createDataFile(parent, name, fileData, canRead, canWrite, canOwn); + }; + + var preloadPlugins = Module['preloadPlugins'] || []; + var FS_handledByPreloadPlugin = (byteArray, fullname, finish, onerror) => { + // Ensure plugins are ready. + if (typeof Browser != 'undefined') Browser.init(); + + var handled = false; + preloadPlugins.forEach((plugin) => { + if (handled) return; + if (plugin['canHandle'](fullname)) { + plugin['handle'](byteArray, fullname, finish, onerror); + handled = true; + } + }); + return handled; + }; + var FS_createPreloadedFile = (parent, name, url, canRead, canWrite, onload, onerror, dontCreateFile, canOwn, preFinish) => { + // TODO we should allow people to just pass in a complete filename instead + // of parent and name being that we just join them anyways + var fullname = name ? PATH_FS.resolve(PATH.join2(parent, name)) : parent; + var dep = getUniqueRunDependency(`cp ${fullname}`); // might have several active requests for the same fullname + function processData(byteArray) { + function finish(byteArray) { + preFinish?.(); + if (!dontCreateFile) { + FS_createDataFile(parent, name, byteArray, canRead, canWrite, canOwn); + } + onload?.(); + removeRunDependency(dep); + } + if (FS_handledByPreloadPlugin(byteArray, fullname, finish, () => { + onerror?.(); + removeRunDependency(dep); + })) { + return; + } + finish(byteArray); + } + addRunDependency(dep); + if (typeof url == 'string') { + asyncLoad(url).then(processData, onerror); + } else { + processData(url); + } + }; + + var FS_modeStringToFlags = (str) => { + var flagModes = { + 'r': 0, + 'r+': 2, + 'w': 512 | 64 | 1, + 'w+': 512 | 64 | 2, + 'a': 1024 | 64 | 1, + 'a+': 1024 | 64 | 2, + }; + var flags = flagModes[str]; + if (typeof flags == 'undefined') { + throw new Error(`Unknown file open mode: ${str}`); + } + return flags; + }; + + var FS_getMode = (canRead, canWrite) => { + var mode = 0; + if (canRead) mode |= 292 | 73; + if (canWrite) mode |= 146; + return mode; + }; + + + + + + + /** + * Given a pointer 'ptr' to a null-terminated UTF8-encoded string in the + * emscripten HEAP, returns a copy of that string as a Javascript String object. + * + * @param {number} ptr + * @param {number=} maxBytesToRead - An optional length that specifies the + * maximum number of bytes to read. You can omit this parameter to scan the + * string until the first 0 byte. If maxBytesToRead is passed, and the string + * at [ptr, ptr+maxBytesToReadr[ contains a null byte in the middle, then the + * string will cut short at that byte index (i.e. maxBytesToRead will not + * produce a string of exact length [ptr, ptr+maxBytesToRead[) N.B. mixing + * frequent uses of UTF8ToString() with and without maxBytesToRead may throw + * JS JIT optimizations off, so it is worth to consider consistently using one + * @return {string} + */ + var UTF8ToString = (ptr, maxBytesToRead) => { + assert(typeof ptr == 'number', `UTF8ToString expects a number (got ${typeof ptr})`); + return ptr ? UTF8ArrayToString(HEAPU8, ptr, maxBytesToRead) : ''; + }; + + var strError = (errno) => UTF8ToString(_strerror(errno)); + + var ERRNO_CODES = { + 'EPERM': 63, + 'ENOENT': 44, + 'ESRCH': 71, + 'EINTR': 27, + 'EIO': 29, + 'ENXIO': 60, + 'E2BIG': 1, + 'ENOEXEC': 45, + 'EBADF': 8, + 'ECHILD': 12, + 'EAGAIN': 6, + 'EWOULDBLOCK': 6, + 'ENOMEM': 48, + 'EACCES': 2, + 'EFAULT': 21, + 'ENOTBLK': 105, + 'EBUSY': 10, + 'EEXIST': 20, + 'EXDEV': 75, + 'ENODEV': 43, + 'ENOTDIR': 54, + 'EISDIR': 31, + 'EINVAL': 28, + 'ENFILE': 41, + 'EMFILE': 33, + 'ENOTTY': 59, + 'ETXTBSY': 74, + 'EFBIG': 22, + 'ENOSPC': 51, + 'ESPIPE': 70, + 'EROFS': 69, + 'EMLINK': 34, + 'EPIPE': 64, + 'EDOM': 18, + 'ERANGE': 68, + 'ENOMSG': 49, + 'EIDRM': 24, + 'ECHRNG': 106, + 'EL2NSYNC': 156, + 'EL3HLT': 107, + 'EL3RST': 108, + 'ELNRNG': 109, + 'EUNATCH': 110, + 'ENOCSI': 111, + 'EL2HLT': 112, + 'EDEADLK': 16, + 'ENOLCK': 46, + 'EBADE': 113, + 'EBADR': 114, + 'EXFULL': 115, + 'ENOANO': 104, + 'EBADRQC': 103, + 'EBADSLT': 102, + 'EDEADLOCK': 16, + 'EBFONT': 101, + 'ENOSTR': 100, + 'ENODATA': 116, + 'ETIME': 117, + 'ENOSR': 118, + 'ENONET': 119, + 'ENOPKG': 120, + 'EREMOTE': 121, + 'ENOLINK': 47, + 'EADV': 122, + 'ESRMNT': 123, + 'ECOMM': 124, + 'EPROTO': 65, + 'EMULTIHOP': 36, + 'EDOTDOT': 125, + 'EBADMSG': 9, + 'ENOTUNIQ': 126, + 'EBADFD': 127, + 'EREMCHG': 128, + 'ELIBACC': 129, + 'ELIBBAD': 130, + 'ELIBSCN': 131, + 'ELIBMAX': 132, + 'ELIBEXEC': 133, + 'ENOSYS': 52, + 'ENOTEMPTY': 55, + 'ENAMETOOLONG': 37, + 'ELOOP': 32, + 'EOPNOTSUPP': 138, + 'EPFNOSUPPORT': 139, + 'ECONNRESET': 15, + 'ENOBUFS': 42, + 'EAFNOSUPPORT': 5, + 'EPROTOTYPE': 67, + 'ENOTSOCK': 57, + 'ENOPROTOOPT': 50, + 'ESHUTDOWN': 140, + 'ECONNREFUSED': 14, + 'EADDRINUSE': 3, + 'ECONNABORTED': 13, + 'ENETUNREACH': 40, + 'ENETDOWN': 38, + 'ETIMEDOUT': 73, + 'EHOSTDOWN': 142, + 'EHOSTUNREACH': 23, + 'EINPROGRESS': 26, + 'EALREADY': 7, + 'EDESTADDRREQ': 17, + 'EMSGSIZE': 35, + 'EPROTONOSUPPORT': 66, + 'ESOCKTNOSUPPORT': 137, + 'EADDRNOTAVAIL': 4, + 'ENETRESET': 39, + 'EISCONN': 30, + 'ENOTCONN': 53, + 'ETOOMANYREFS': 141, + 'EUSERS': 136, + 'EDQUOT': 19, + 'ESTALE': 72, + 'ENOTSUP': 138, + 'ENOMEDIUM': 148, + 'EILSEQ': 25, + 'EOVERFLOW': 61, + 'ECANCELED': 11, + 'ENOTRECOVERABLE': 56, + 'EOWNERDEAD': 62, + 'ESTRPIPE': 135, + }; + var FS = { + root:null, + mounts:[], + devices:{ + }, + streams:[], + nextInode:1, + nameTable:null, + currentPath:"/", + initialized:false, + ignorePermissions:true, + filesystems:null, + syncFSRequests:0, + readFiles:{ + }, + ErrnoError:class extends Error { + name = 'ErrnoError'; + // We set the `name` property to be able to identify `FS.ErrnoError` + // - the `name` is a standard ECMA-262 property of error objects. Kind of good to have it anyway. + // - when using PROXYFS, an error can come from an underlying FS + // as different FS objects have their own FS.ErrnoError each, + // the test `err instanceof FS.ErrnoError` won't detect an error coming from another filesystem, causing bugs. + // we'll use the reliable test `err.name == "ErrnoError"` instead + constructor(errno) { + super(runtimeInitialized ? strError(errno) : ''); + this.errno = errno; + for (var key in ERRNO_CODES) { + if (ERRNO_CODES[key] === errno) { + this.code = key; + break; + } + } + } + }, + FSStream:class { + shared = {}; + get object() { + return this.node; + } + set object(val) { + this.node = val; + } + get isRead() { + return (this.flags & 2097155) !== 1; + } + get isWrite() { + return (this.flags & 2097155) !== 0; + } + get isAppend() { + return (this.flags & 1024); + } + get flags() { + return this.shared.flags; + } + set flags(val) { + this.shared.flags = val; + } + get position() { + return this.shared.position; + } + set position(val) { + this.shared.position = val; + } + }, + FSNode:class { + node_ops = {}; + stream_ops = {}; + readMode = 292 | 73; + writeMode = 146; + mounted = null; + constructor(parent, name, mode, rdev) { + if (!parent) { + parent = this; // root node sets parent to itself + } + this.parent = parent; + this.mount = parent.mount; + this.id = FS.nextInode++; + this.name = name; + this.mode = mode; + this.rdev = rdev; + this.atime = this.mtime = this.ctime = Date.now(); + } + get read() { + return (this.mode & this.readMode) === this.readMode; + } + set read(val) { + val ? this.mode |= this.readMode : this.mode &= ~this.readMode; + } + get write() { + return (this.mode & this.writeMode) === this.writeMode; + } + set write(val) { + val ? this.mode |= this.writeMode : this.mode &= ~this.writeMode; + } + get isFolder() { + return FS.isDir(this.mode); + } + get isDevice() { + return FS.isChrdev(this.mode); + } + }, + lookupPath(path, opts = {}) { + if (!path) { + throw new FS.ErrnoError(44); + } + opts.follow_mount ??= true + + if (!PATH.isAbs(path)) { + path = FS.cwd() + '/' + path; + } + + // limit max consecutive symlinks to 40 (SYMLOOP_MAX). + linkloop: for (var nlinks = 0; nlinks < 40; nlinks++) { + // split the absolute path + var parts = path.split('/').filter((p) => !!p); + + // start at the root + var current = FS.root; + var current_path = '/'; + + for (var i = 0; i < parts.length; i++) { + var islast = (i === parts.length-1); + if (islast && opts.parent) { + // stop resolving + break; + } + + if (parts[i] === '.') { + continue; + } + + if (parts[i] === '..') { + current_path = PATH.dirname(current_path); + current = current.parent; + continue; + } + + current_path = PATH.join2(current_path, parts[i]); + try { + current = FS.lookupNode(current, parts[i]); + } catch (e) { + // if noent_okay is true, suppress a ENOENT in the last component + // and return an object with an undefined node. This is needed for + // resolving symlinks in the path when creating a file. + if ((e?.errno === 44) && islast && opts.noent_okay) { + return { path: current_path }; + } + throw e; + } + + // jump to the mount's root node if this is a mountpoint + if (FS.isMountpoint(current) && (!islast || opts.follow_mount)) { + current = current.mounted.root; + } + + // by default, lookupPath will not follow a symlink if it is the final path component. + // setting opts.follow = true will override this behavior. + if (FS.isLink(current.mode) && (!islast || opts.follow)) { + if (!current.node_ops.readlink) { + throw new FS.ErrnoError(52); + } + var link = current.node_ops.readlink(current); + if (!PATH.isAbs(link)) { + link = PATH.dirname(current_path) + '/' + link; + } + path = link + '/' + parts.slice(i + 1).join('/'); + continue linkloop; + } + } + return { path: current_path, node: current }; + } + throw new FS.ErrnoError(32); + }, + getPath(node) { + var path; + while (true) { + if (FS.isRoot(node)) { + var mount = node.mount.mountpoint; + if (!path) return mount; + return mount[mount.length-1] !== '/' ? `${mount}/${path}` : mount + path; + } + path = path ? `${node.name}/${path}` : node.name; + node = node.parent; + } + }, + hashName(parentid, name) { + var hash = 0; + + for (var i = 0; i < name.length; i++) { + hash = ((hash << 5) - hash + name.charCodeAt(i)) | 0; + } + return ((parentid + hash) >>> 0) % FS.nameTable.length; + }, + hashAddNode(node) { + var hash = FS.hashName(node.parent.id, node.name); + node.name_next = FS.nameTable[hash]; + FS.nameTable[hash] = node; + }, + hashRemoveNode(node) { + var hash = FS.hashName(node.parent.id, node.name); + if (FS.nameTable[hash] === node) { + FS.nameTable[hash] = node.name_next; + } else { + var current = FS.nameTable[hash]; + while (current) { + if (current.name_next === node) { + current.name_next = node.name_next; + break; + } + current = current.name_next; + } + } + }, + lookupNode(parent, name) { + var errCode = FS.mayLookup(parent); + if (errCode) { + throw new FS.ErrnoError(errCode); + } + var hash = FS.hashName(parent.id, name); + for (var node = FS.nameTable[hash]; node; node = node.name_next) { + var nodeName = node.name; + if (node.parent.id === parent.id && nodeName === name) { + return node; + } + } + // if we failed to find it in the cache, call into the VFS + return FS.lookup(parent, name); + }, + createNode(parent, name, mode, rdev) { + assert(typeof parent == 'object') + var node = new FS.FSNode(parent, name, mode, rdev); + + FS.hashAddNode(node); + + return node; + }, + destroyNode(node) { + FS.hashRemoveNode(node); + }, + isRoot(node) { + return node === node.parent; + }, + isMountpoint(node) { + return !!node.mounted; + }, + isFile(mode) { + return (mode & 61440) === 32768; + }, + isDir(mode) { + return (mode & 61440) === 16384; + }, + isLink(mode) { + return (mode & 61440) === 40960; + }, + isChrdev(mode) { + return (mode & 61440) === 8192; + }, + isBlkdev(mode) { + return (mode & 61440) === 24576; + }, + isFIFO(mode) { + return (mode & 61440) === 4096; + }, + isSocket(mode) { + return (mode & 49152) === 49152; + }, + flagsToPermissionString(flag) { + var perms = ['r', 'w', 'rw'][flag & 3]; + if ((flag & 512)) { + perms += 'w'; + } + return perms; + }, + nodePermissions(node, perms) { + if (FS.ignorePermissions) { + return 0; + } + // return 0 if any user, group or owner bits are set. + if (perms.includes('r') && !(node.mode & 292)) { + return 2; + } else if (perms.includes('w') && !(node.mode & 146)) { + return 2; + } else if (perms.includes('x') && !(node.mode & 73)) { + return 2; + } + return 0; + }, + mayLookup(dir) { + if (!FS.isDir(dir.mode)) return 54; + var errCode = FS.nodePermissions(dir, 'x'); + if (errCode) return errCode; + if (!dir.node_ops.lookup) return 2; + return 0; + }, + mayCreate(dir, name) { + if (!FS.isDir(dir.mode)) { + return 54; + } + try { + var node = FS.lookupNode(dir, name); + return 20; + } catch (e) { + } + return FS.nodePermissions(dir, 'wx'); + }, + mayDelete(dir, name, isdir) { + var node; + try { + node = FS.lookupNode(dir, name); + } catch (e) { + return e.errno; + } + var errCode = FS.nodePermissions(dir, 'wx'); + if (errCode) { + return errCode; + } + if (isdir) { + if (!FS.isDir(node.mode)) { + return 54; + } + if (FS.isRoot(node) || FS.getPath(node) === FS.cwd()) { + return 10; + } + } else { + if (FS.isDir(node.mode)) { + return 31; + } + } + return 0; + }, + mayOpen(node, flags) { + if (!node) { + return 44; + } + if (FS.isLink(node.mode)) { + return 32; + } else if (FS.isDir(node.mode)) { + if (FS.flagsToPermissionString(flags) !== 'r' // opening for write + || (flags & (512 | 64))) { // TODO: check for O_SEARCH? (== search for dir only) + return 31; + } + } + return FS.nodePermissions(node, FS.flagsToPermissionString(flags)); + }, + checkOpExists(op, err) { + if (!op) { + throw new FS.ErrnoError(err); + } + return op; + }, + MAX_OPEN_FDS:4096, + nextfd() { + for (var fd = 0; fd <= FS.MAX_OPEN_FDS; fd++) { + if (!FS.streams[fd]) { + return fd; + } + } + throw new FS.ErrnoError(33); + }, + getStreamChecked(fd) { + var stream = FS.getStream(fd); + if (!stream) { + throw new FS.ErrnoError(8); + } + return stream; + }, + getStream:(fd) => FS.streams[fd], + createStream(stream, fd = -1) { + assert(fd >= -1); + + // clone it, so we can return an instance of FSStream + stream = Object.assign(new FS.FSStream(), stream); + if (fd == -1) { + fd = FS.nextfd(); + } + stream.fd = fd; + FS.streams[fd] = stream; + return stream; + }, + closeStream(fd) { + FS.streams[fd] = null; + }, + dupStream(origStream, fd = -1) { + var stream = FS.createStream(origStream, fd); + stream.stream_ops?.dup?.(stream); + return stream; + }, + doSetAttr(stream, node, attr) { + var setattr = stream?.stream_ops.setattr; + var arg = setattr ? stream : node; + setattr ??= node.node_ops.setattr; + FS.checkOpExists(setattr, 63) + setattr(arg, attr); + }, + chrdev_stream_ops:{ + open(stream) { + var device = FS.getDevice(stream.node.rdev); + // override node's stream ops with the device's + stream.stream_ops = device.stream_ops; + // forward the open call + stream.stream_ops.open?.(stream); + }, + llseek() { + throw new FS.ErrnoError(70); + }, + }, + major:(dev) => ((dev) >> 8), + minor:(dev) => ((dev) & 0xff), + makedev:(ma, mi) => ((ma) << 8 | (mi)), + registerDevice(dev, ops) { + FS.devices[dev] = { stream_ops: ops }; + }, + getDevice:(dev) => FS.devices[dev], + getMounts(mount) { + var mounts = []; + var check = [mount]; + + while (check.length) { + var m = check.pop(); + + mounts.push(m); + + check.push(...m.mounts); + } + + return mounts; + }, + syncfs(populate, callback) { + if (typeof populate == 'function') { + callback = populate; + populate = false; + } + + FS.syncFSRequests++; + + if (FS.syncFSRequests > 1) { + err(`warning: ${FS.syncFSRequests} FS.syncfs operations in flight at once, probably just doing extra work`); + } + + var mounts = FS.getMounts(FS.root.mount); + var completed = 0; + + function doCallback(errCode) { + assert(FS.syncFSRequests > 0); + FS.syncFSRequests--; + return callback(errCode); + } + + function done(errCode) { + if (errCode) { + if (!done.errored) { + done.errored = true; + return doCallback(errCode); + } + return; + } + if (++completed >= mounts.length) { + doCallback(null); + } + }; + + // sync all mounts + mounts.forEach((mount) => { + if (!mount.type.syncfs) { + return done(null); + } + mount.type.syncfs(mount, populate, done); + }); + }, + mount(type, opts, mountpoint) { + if (typeof type == 'string') { + // The filesystem was not included, and instead we have an error + // message stored in the variable. + throw type; + } + var root = mountpoint === '/'; + var pseudo = !mountpoint; + var node; + + if (root && FS.root) { + throw new FS.ErrnoError(10); + } else if (!root && !pseudo) { + var lookup = FS.lookupPath(mountpoint, { follow_mount: false }); + + mountpoint = lookup.path; // use the absolute path + node = lookup.node; + + if (FS.isMountpoint(node)) { + throw new FS.ErrnoError(10); + } + + if (!FS.isDir(node.mode)) { + throw new FS.ErrnoError(54); + } + } + + var mount = { + type, + opts, + mountpoint, + mounts: [] + }; + + // create a root node for the fs + var mountRoot = type.mount(mount); + mountRoot.mount = mount; + mount.root = mountRoot; + + if (root) { + FS.root = mountRoot; + } else if (node) { + // set as a mountpoint + node.mounted = mount; + + // add the new mount to the current mount's children + if (node.mount) { + node.mount.mounts.push(mount); + } + } + + return mountRoot; + }, + unmount(mountpoint) { + var lookup = FS.lookupPath(mountpoint, { follow_mount: false }); + + if (!FS.isMountpoint(lookup.node)) { + throw new FS.ErrnoError(28); + } + + // destroy the nodes for this mount, and all its child mounts + var node = lookup.node; + var mount = node.mounted; + var mounts = FS.getMounts(mount); + + Object.keys(FS.nameTable).forEach((hash) => { + var current = FS.nameTable[hash]; + + while (current) { + var next = current.name_next; + + if (mounts.includes(current.mount)) { + FS.destroyNode(current); + } + + current = next; + } + }); + + // no longer a mountpoint + node.mounted = null; + + // remove this mount from the child mounts + var idx = node.mount.mounts.indexOf(mount); + assert(idx !== -1); + node.mount.mounts.splice(idx, 1); + }, + lookup(parent, name) { + return parent.node_ops.lookup(parent, name); + }, + mknod(path, mode, dev) { + var lookup = FS.lookupPath(path, { parent: true }); + var parent = lookup.node; + var name = PATH.basename(path); + if (!name) { + throw new FS.ErrnoError(28); + } + if (name === '.' || name === '..') { + throw new FS.ErrnoError(20); + } + var errCode = FS.mayCreate(parent, name); + if (errCode) { + throw new FS.ErrnoError(errCode); + } + if (!parent.node_ops.mknod) { + throw new FS.ErrnoError(63); + } + return parent.node_ops.mknod(parent, name, mode, dev); + }, + statfs(path) { + return FS.statfsNode(FS.lookupPath(path, {follow: true}).node); + }, + statfsStream(stream) { + // We keep a separate statfsStream function because noderawfs overrides + // it. In noderawfs, stream.node is sometimes null. Instead, we need to + // look at stream.path. + return FS.statfsNode(stream.node); + }, + statfsNode(node) { + // NOTE: None of the defaults here are true. We're just returning safe and + // sane values. Currently nodefs and rawfs replace these defaults, + // other file systems leave them alone. + var rtn = { + bsize: 4096, + frsize: 4096, + blocks: 1e6, + bfree: 5e5, + bavail: 5e5, + files: FS.nextInode, + ffree: FS.nextInode - 1, + fsid: 42, + flags: 2, + namelen: 255, + }; + + if (node.node_ops.statfs) { + Object.assign(rtn, node.node_ops.statfs(node.mount.opts.root)); + } + return rtn; + }, + create(path, mode = 0o666) { + mode &= 4095; + mode |= 32768; + return FS.mknod(path, mode, 0); + }, + mkdir(path, mode = 0o777) { + mode &= 511 | 512; + mode |= 16384; + return FS.mknod(path, mode, 0); + }, + mkdirTree(path, mode) { + var dirs = path.split('/'); + var d = ''; + for (var dir of dirs) { + if (!dir) continue; + if (d || PATH.isAbs(path)) d += '/'; + d += dir; + try { + FS.mkdir(d, mode); + } catch(e) { + if (e.errno != 20) throw e; + } + } + }, + mkdev(path, mode, dev) { + if (typeof dev == 'undefined') { + dev = mode; + mode = 0o666; + } + mode |= 8192; + return FS.mknod(path, mode, dev); + }, + symlink(oldpath, newpath) { + if (!PATH_FS.resolve(oldpath)) { + throw new FS.ErrnoError(44); + } + var lookup = FS.lookupPath(newpath, { parent: true }); + var parent = lookup.node; + if (!parent) { + throw new FS.ErrnoError(44); + } + var newname = PATH.basename(newpath); + var errCode = FS.mayCreate(parent, newname); + if (errCode) { + throw new FS.ErrnoError(errCode); + } + if (!parent.node_ops.symlink) { + throw new FS.ErrnoError(63); + } + return parent.node_ops.symlink(parent, newname, oldpath); + }, + rename(old_path, new_path) { + var old_dirname = PATH.dirname(old_path); + var new_dirname = PATH.dirname(new_path); + var old_name = PATH.basename(old_path); + var new_name = PATH.basename(new_path); + // parents must exist + var lookup, old_dir, new_dir; + + // let the errors from non existent directories percolate up + lookup = FS.lookupPath(old_path, { parent: true }); + old_dir = lookup.node; + lookup = FS.lookupPath(new_path, { parent: true }); + new_dir = lookup.node; + + if (!old_dir || !new_dir) throw new FS.ErrnoError(44); + // need to be part of the same mount + if (old_dir.mount !== new_dir.mount) { + throw new FS.ErrnoError(75); + } + // source must exist + var old_node = FS.lookupNode(old_dir, old_name); + // old path should not be an ancestor of the new path + var relative = PATH_FS.relative(old_path, new_dirname); + if (relative.charAt(0) !== '.') { + throw new FS.ErrnoError(28); + } + // new path should not be an ancestor of the old path + relative = PATH_FS.relative(new_path, old_dirname); + if (relative.charAt(0) !== '.') { + throw new FS.ErrnoError(55); + } + // see if the new path already exists + var new_node; + try { + new_node = FS.lookupNode(new_dir, new_name); + } catch (e) { + // not fatal + } + // early out if nothing needs to change + if (old_node === new_node) { + return; + } + // we'll need to delete the old entry + var isdir = FS.isDir(old_node.mode); + var errCode = FS.mayDelete(old_dir, old_name, isdir); + if (errCode) { + throw new FS.ErrnoError(errCode); + } + // need delete permissions if we'll be overwriting. + // need create permissions if new doesn't already exist. + errCode = new_node ? + FS.mayDelete(new_dir, new_name, isdir) : + FS.mayCreate(new_dir, new_name); + if (errCode) { + throw new FS.ErrnoError(errCode); + } + if (!old_dir.node_ops.rename) { + throw new FS.ErrnoError(63); + } + if (FS.isMountpoint(old_node) || (new_node && FS.isMountpoint(new_node))) { + throw new FS.ErrnoError(10); + } + // if we are going to change the parent, check write permissions + if (new_dir !== old_dir) { + errCode = FS.nodePermissions(old_dir, 'w'); + if (errCode) { + throw new FS.ErrnoError(errCode); + } + } + // remove the node from the lookup hash + FS.hashRemoveNode(old_node); + // do the underlying fs rename + try { + old_dir.node_ops.rename(old_node, new_dir, new_name); + // update old node (we do this here to avoid each backend + // needing to) + old_node.parent = new_dir; + } catch (e) { + throw e; + } finally { + // add the node back to the hash (in case node_ops.rename + // changed its name) + FS.hashAddNode(old_node); + } + }, + rmdir(path) { + var lookup = FS.lookupPath(path, { parent: true }); + var parent = lookup.node; + var name = PATH.basename(path); + var node = FS.lookupNode(parent, name); + var errCode = FS.mayDelete(parent, name, true); + if (errCode) { + throw new FS.ErrnoError(errCode); + } + if (!parent.node_ops.rmdir) { + throw new FS.ErrnoError(63); + } + if (FS.isMountpoint(node)) { + throw new FS.ErrnoError(10); + } + parent.node_ops.rmdir(parent, name); + FS.destroyNode(node); + }, + readdir(path) { + var lookup = FS.lookupPath(path, { follow: true }); + var node = lookup.node; + var readdir = FS.checkOpExists(node.node_ops.readdir, 54); + return readdir(node); + }, + unlink(path) { + var lookup = FS.lookupPath(path, { parent: true }); + var parent = lookup.node; + if (!parent) { + throw new FS.ErrnoError(44); + } + var name = PATH.basename(path); + var node = FS.lookupNode(parent, name); + var errCode = FS.mayDelete(parent, name, false); + if (errCode) { + // According to POSIX, we should map EISDIR to EPERM, but + // we instead do what Linux does (and we must, as we use + // the musl linux libc). + throw new FS.ErrnoError(errCode); + } + if (!parent.node_ops.unlink) { + throw new FS.ErrnoError(63); + } + if (FS.isMountpoint(node)) { + throw new FS.ErrnoError(10); + } + parent.node_ops.unlink(parent, name); + FS.destroyNode(node); + }, + readlink(path) { + var lookup = FS.lookupPath(path); + var link = lookup.node; + if (!link) { + throw new FS.ErrnoError(44); + } + if (!link.node_ops.readlink) { + throw new FS.ErrnoError(28); + } + return link.node_ops.readlink(link); + }, + stat(path, dontFollow) { + var lookup = FS.lookupPath(path, { follow: !dontFollow }); + var node = lookup.node; + var getattr = FS.checkOpExists(node.node_ops.getattr, 63); + return getattr(node); + }, + fstat(fd) { + var stream = FS.getStreamChecked(fd); + var node = stream.node; + var getattr = stream.stream_ops.getattr; + var arg = getattr ? stream : node; + getattr ??= node.node_ops.getattr; + FS.checkOpExists(getattr, 63) + return getattr(arg); + }, + lstat(path) { + return FS.stat(path, true); + }, + doChmod(stream, node, mode, dontFollow) { + FS.doSetAttr(stream, node, { + mode: (mode & 4095) | (node.mode & ~4095), + ctime: Date.now(), + dontFollow + }); + }, + chmod(path, mode, dontFollow) { + var node; + if (typeof path == 'string') { + var lookup = FS.lookupPath(path, { follow: !dontFollow }); + node = lookup.node; + } else { + node = path; + } + FS.doChmod(null, node, mode, dontFollow); + }, + lchmod(path, mode) { + FS.chmod(path, mode, true); + }, + fchmod(fd, mode) { + var stream = FS.getStreamChecked(fd); + FS.doChmod(stream, stream.node, mode, false); + }, + doChown(stream, node, dontFollow) { + FS.doSetAttr(stream, node, { + timestamp: Date.now(), + dontFollow + // we ignore the uid / gid for now + }); + }, + chown(path, uid, gid, dontFollow) { + var node; + if (typeof path == 'string') { + var lookup = FS.lookupPath(path, { follow: !dontFollow }); + node = lookup.node; + } else { + node = path; + } + FS.doChown(null, node, dontFollow); + }, + lchown(path, uid, gid) { + FS.chown(path, uid, gid, true); + }, + fchown(fd, uid, gid) { + var stream = FS.getStreamChecked(fd); + FS.doChown(stream, stream.node, false); + }, + doTruncate(stream, node, len) { + if (FS.isDir(node.mode)) { + throw new FS.ErrnoError(31); + } + if (!FS.isFile(node.mode)) { + throw new FS.ErrnoError(28); + } + var errCode = FS.nodePermissions(node, 'w'); + if (errCode) { + throw new FS.ErrnoError(errCode); + } + FS.doSetAttr(stream, node, { + size: len, + timestamp: Date.now() + }); + }, + truncate(path, len) { + if (len < 0) { + throw new FS.ErrnoError(28); + } + var node; + if (typeof path == 'string') { + var lookup = FS.lookupPath(path, { follow: true }); + node = lookup.node; + } else { + node = path; + } + FS.doTruncate(null, node, len); + }, + ftruncate(fd, len) { + var stream = FS.getStreamChecked(fd); + if (len < 0 || (stream.flags & 2097155) === 0) { + throw new FS.ErrnoError(28); + } + FS.doTruncate(stream, stream.node, len); + }, + utime(path, atime, mtime) { + var lookup = FS.lookupPath(path, { follow: true }); + var node = lookup.node; + var setattr = FS.checkOpExists(node.node_ops.setattr, 63); + setattr(node, { + atime: atime, + mtime: mtime + }); + }, + open(path, flags, mode = 0o666) { + if (path === "") { + throw new FS.ErrnoError(44); + } + flags = typeof flags == 'string' ? FS_modeStringToFlags(flags) : flags; + if ((flags & 64)) { + mode = (mode & 4095) | 32768; + } else { + mode = 0; + } + var node; + var isDirPath; + if (typeof path == 'object') { + node = path; + } else { + isDirPath = path.endsWith("/"); + // noent_okay makes it so that if the final component of the path + // doesn't exist, lookupPath returns `node: undefined`. `path` will be + // updated to point to the target of all symlinks. + var lookup = FS.lookupPath(path, { + follow: !(flags & 131072), + noent_okay: true + }); + node = lookup.node; + path = lookup.path; + } + // perhaps we need to create the node + var created = false; + if ((flags & 64)) { + if (node) { + // if O_CREAT and O_EXCL are set, error out if the node already exists + if ((flags & 128)) { + throw new FS.ErrnoError(20); + } + } else if (isDirPath) { + throw new FS.ErrnoError(31); + } else { + // node doesn't exist, try to create it + // Ignore the permission bits here to ensure we can `open` this new + // file below. We use chmod below the apply the permissions once the + // file is open. + node = FS.mknod(path, mode | 0o777, 0); + created = true; + } + } + if (!node) { + throw new FS.ErrnoError(44); + } + // can't truncate a device + if (FS.isChrdev(node.mode)) { + flags &= ~512; + } + // if asked only for a directory, then this must be one + if ((flags & 65536) && !FS.isDir(node.mode)) { + throw new FS.ErrnoError(54); + } + // check permissions, if this is not a file we just created now (it is ok to + // create and write to a file with read-only permissions; it is read-only + // for later use) + if (!created) { + var errCode = FS.mayOpen(node, flags); + if (errCode) { + throw new FS.ErrnoError(errCode); + } + } + // do truncation if necessary + if ((flags & 512) && !created) { + FS.truncate(node, 0); + } + // we've already handled these, don't pass down to the underlying vfs + flags &= ~(128 | 512 | 131072); + + // register the stream with the filesystem + var stream = FS.createStream({ + node, + path: FS.getPath(node), // we want the absolute path to the node + flags, + seekable: true, + position: 0, + stream_ops: node.stream_ops, + // used by the file family libc calls (fopen, fwrite, ferror, etc.) + ungotten: [], + error: false + }); + // call the new stream's open function + if (stream.stream_ops.open) { + stream.stream_ops.open(stream); + } + if (created) { + FS.chmod(node, mode & 0o777); + } + if (Module['logReadFiles'] && !(flags & 1)) { + if (!(path in FS.readFiles)) { + FS.readFiles[path] = 1; + } + } + return stream; + }, + close(stream) { + if (FS.isClosed(stream)) { + throw new FS.ErrnoError(8); + } + if (stream.getdents) stream.getdents = null; // free readdir state + try { + if (stream.stream_ops.close) { + stream.stream_ops.close(stream); + } + } catch (e) { + throw e; + } finally { + FS.closeStream(stream.fd); + } + stream.fd = null; + }, + isClosed(stream) { + return stream.fd === null; + }, + llseek(stream, offset, whence) { + if (FS.isClosed(stream)) { + throw new FS.ErrnoError(8); + } + if (!stream.seekable || !stream.stream_ops.llseek) { + throw new FS.ErrnoError(70); + } + if (whence != 0 && whence != 1 && whence != 2) { + throw new FS.ErrnoError(28); + } + stream.position = stream.stream_ops.llseek(stream, offset, whence); + stream.ungotten = []; + return stream.position; + }, + read(stream, buffer, offset, length, position) { + assert(offset >= 0); + if (length < 0 || position < 0) { + throw new FS.ErrnoError(28); + } + if (FS.isClosed(stream)) { + throw new FS.ErrnoError(8); + } + if ((stream.flags & 2097155) === 1) { + throw new FS.ErrnoError(8); + } + if (FS.isDir(stream.node.mode)) { + throw new FS.ErrnoError(31); + } + if (!stream.stream_ops.read) { + throw new FS.ErrnoError(28); + } + var seeking = typeof position != 'undefined'; + if (!seeking) { + position = stream.position; + } else if (!stream.seekable) { + throw new FS.ErrnoError(70); + } + var bytesRead = stream.stream_ops.read(stream, buffer, offset, length, position); + if (!seeking) stream.position += bytesRead; + return bytesRead; + }, + write(stream, buffer, offset, length, position, canOwn) { + assert(offset >= 0); + if (length < 0 || position < 0) { + throw new FS.ErrnoError(28); + } + if (FS.isClosed(stream)) { + throw new FS.ErrnoError(8); + } + if ((stream.flags & 2097155) === 0) { + throw new FS.ErrnoError(8); + } + if (FS.isDir(stream.node.mode)) { + throw new FS.ErrnoError(31); + } + if (!stream.stream_ops.write) { + throw new FS.ErrnoError(28); + } + if (stream.seekable && stream.flags & 1024) { + // seek to the end before writing in append mode + FS.llseek(stream, 0, 2); + } + var seeking = typeof position != 'undefined'; + if (!seeking) { + position = stream.position; + } else if (!stream.seekable) { + throw new FS.ErrnoError(70); + } + var bytesWritten = stream.stream_ops.write(stream, buffer, offset, length, position, canOwn); + if (!seeking) stream.position += bytesWritten; + return bytesWritten; + }, + mmap(stream, length, position, prot, flags) { + // User requests writing to file (prot & PROT_WRITE != 0). + // Checking if we have permissions to write to the file unless + // MAP_PRIVATE flag is set. According to POSIX spec it is possible + // to write to file opened in read-only mode with MAP_PRIVATE flag, + // as all modifications will be visible only in the memory of + // the current process. + if ((prot & 2) !== 0 + && (flags & 2) === 0 + && (stream.flags & 2097155) !== 2) { + throw new FS.ErrnoError(2); + } + if ((stream.flags & 2097155) === 1) { + throw new FS.ErrnoError(2); + } + if (!stream.stream_ops.mmap) { + throw new FS.ErrnoError(43); + } + if (!length) { + throw new FS.ErrnoError(28); + } + return stream.stream_ops.mmap(stream, length, position, prot, flags); + }, + msync(stream, buffer, offset, length, mmapFlags) { + assert(offset >= 0); + if (!stream.stream_ops.msync) { + return 0; + } + return stream.stream_ops.msync(stream, buffer, offset, length, mmapFlags); + }, + ioctl(stream, cmd, arg) { + if (!stream.stream_ops.ioctl) { + throw new FS.ErrnoError(59); + } + return stream.stream_ops.ioctl(stream, cmd, arg); + }, + readFile(path, opts = {}) { + opts.flags = opts.flags || 0; + opts.encoding = opts.encoding || 'binary'; + if (opts.encoding !== 'utf8' && opts.encoding !== 'binary') { + throw new Error(`Invalid encoding type "${opts.encoding}"`); + } + var ret; + var stream = FS.open(path, opts.flags); + var stat = FS.stat(path); + var length = stat.size; + var buf = new Uint8Array(length); + FS.read(stream, buf, 0, length, 0); + if (opts.encoding === 'utf8') { + ret = UTF8ArrayToString(buf); + } else if (opts.encoding === 'binary') { + ret = buf; + } + FS.close(stream); + return ret; + }, + writeFile(path, data, opts = {}) { + opts.flags = opts.flags || 577; + var stream = FS.open(path, opts.flags, opts.mode); + if (typeof data == 'string') { + var buf = new Uint8Array(lengthBytesUTF8(data)+1); + var actualNumBytes = stringToUTF8Array(data, buf, 0, buf.length); + FS.write(stream, buf, 0, actualNumBytes, undefined, opts.canOwn); + } else if (ArrayBuffer.isView(data)) { + FS.write(stream, data, 0, data.byteLength, undefined, opts.canOwn); + } else { + throw new Error('Unsupported data type'); + } + FS.close(stream); + }, + cwd:() => FS.currentPath, + chdir(path) { + var lookup = FS.lookupPath(path, { follow: true }); + if (lookup.node === null) { + throw new FS.ErrnoError(44); + } + if (!FS.isDir(lookup.node.mode)) { + throw new FS.ErrnoError(54); + } + var errCode = FS.nodePermissions(lookup.node, 'x'); + if (errCode) { + throw new FS.ErrnoError(errCode); + } + FS.currentPath = lookup.path; + }, + createDefaultDirectories() { + FS.mkdir('/tmp'); + FS.mkdir('/home'); + FS.mkdir('/home/web_user'); + }, + createDefaultDevices() { + // create /dev + FS.mkdir('/dev'); + // setup /dev/null + FS.registerDevice(FS.makedev(1, 3), { + read: () => 0, + write: (stream, buffer, offset, length, pos) => length, + llseek: () => 0, + }); + FS.mkdev('/dev/null', FS.makedev(1, 3)); + // setup /dev/tty and /dev/tty1 + // stderr needs to print output using err() rather than out() + // so we register a second tty just for it. + TTY.register(FS.makedev(5, 0), TTY.default_tty_ops); + TTY.register(FS.makedev(6, 0), TTY.default_tty1_ops); + FS.mkdev('/dev/tty', FS.makedev(5, 0)); + FS.mkdev('/dev/tty1', FS.makedev(6, 0)); + // setup /dev/[u]random + // use a buffer to avoid overhead of individual crypto calls per byte + var randomBuffer = new Uint8Array(1024), randomLeft = 0; + var randomByte = () => { + if (randomLeft === 0) { + randomFill(randomBuffer); + randomLeft = randomBuffer.byteLength; + } + return randomBuffer[--randomLeft]; + }; + FS.createDevice('/dev', 'random', randomByte); + FS.createDevice('/dev', 'urandom', randomByte); + // we're not going to emulate the actual shm device, + // just create the tmp dirs that reside in it commonly + FS.mkdir('/dev/shm'); + FS.mkdir('/dev/shm/tmp'); + }, + createSpecialDirectories() { + // create /proc/self/fd which allows /proc/self/fd/6 => readlink gives the + // name of the stream for fd 6 (see test_unistd_ttyname) + FS.mkdir('/proc'); + var proc_self = FS.mkdir('/proc/self'); + FS.mkdir('/proc/self/fd'); + FS.mount({ + mount() { + var node = FS.createNode(proc_self, 'fd', 16895, 73); + node.stream_ops = { + llseek: MEMFS.stream_ops.llseek, + }; + node.node_ops = { + lookup(parent, name) { + var fd = +name; + var stream = FS.getStreamChecked(fd); + var ret = { + parent: null, + mount: { mountpoint: 'fake' }, + node_ops: { readlink: () => stream.path }, + id: fd + 1, + }; + ret.parent = ret; // make it look like a simple root node + return ret; + }, + readdir() { + return Array.from(FS.streams.entries()) + .filter(([k, v]) => v) + .map(([k, v]) => k.toString()); + } + }; + return node; + } + }, {}, '/proc/self/fd'); + }, + createStandardStreams(input, output, error) { + // TODO deprecate the old functionality of a single + // input / output callback and that utilizes FS.createDevice + // and instead require a unique set of stream ops + + // by default, we symlink the standard streams to the + // default tty devices. however, if the standard streams + // have been overwritten we create a unique device for + // them instead. + if (input) { + FS.createDevice('/dev', 'stdin', input); + } else { + FS.symlink('/dev/tty', '/dev/stdin'); + } + if (output) { + FS.createDevice('/dev', 'stdout', null, output); + } else { + FS.symlink('/dev/tty', '/dev/stdout'); + } + if (error) { + FS.createDevice('/dev', 'stderr', null, error); + } else { + FS.symlink('/dev/tty1', '/dev/stderr'); + } + + // open default streams for the stdin, stdout and stderr devices + var stdin = FS.open('/dev/stdin', 0); + var stdout = FS.open('/dev/stdout', 1); + var stderr = FS.open('/dev/stderr', 1); + assert(stdin.fd === 0, `invalid handle for stdin (${stdin.fd})`); + assert(stdout.fd === 1, `invalid handle for stdout (${stdout.fd})`); + assert(stderr.fd === 2, `invalid handle for stderr (${stderr.fd})`); + }, + staticInit() { + FS.nameTable = new Array(4096); + + FS.mount(MEMFS, {}, '/'); + + FS.createDefaultDirectories(); + FS.createDefaultDevices(); + FS.createSpecialDirectories(); + + FS.filesystems = { + 'MEMFS': MEMFS, + }; + }, + init(input, output, error) { + assert(!FS.initialized, 'FS.init was previously called. If you want to initialize later with custom parameters, remove any earlier calls (note that one is automatically added to the generated code)'); + FS.initialized = true; + + // Allow Module.stdin etc. to provide defaults, if none explicitly passed to us here + input ??= Module['stdin']; + output ??= Module['stdout']; + error ??= Module['stderr']; + + FS.createStandardStreams(input, output, error); + }, + quit() { + FS.initialized = false; + // force-flush all streams, so we get musl std streams printed out + _fflush(0); + // close all of our streams + for (var stream of FS.streams) { + if (stream) { + FS.close(stream); + } + } + }, + findObject(path, dontResolveLastLink) { + var ret = FS.analyzePath(path, dontResolveLastLink); + if (!ret.exists) { + return null; + } + return ret.object; + }, + analyzePath(path, dontResolveLastLink) { + // operate from within the context of the symlink's target + try { + var lookup = FS.lookupPath(path, { follow: !dontResolveLastLink }); + path = lookup.path; + } catch (e) { + } + var ret = { + isRoot: false, exists: false, error: 0, name: null, path: null, object: null, + parentExists: false, parentPath: null, parentObject: null + }; + try { + var lookup = FS.lookupPath(path, { parent: true }); + ret.parentExists = true; + ret.parentPath = lookup.path; + ret.parentObject = lookup.node; + ret.name = PATH.basename(path); + lookup = FS.lookupPath(path, { follow: !dontResolveLastLink }); + ret.exists = true; + ret.path = lookup.path; + ret.object = lookup.node; + ret.name = lookup.node.name; + ret.isRoot = lookup.path === '/'; + } catch (e) { + ret.error = e.errno; + }; + return ret; + }, + createPath(parent, path, canRead, canWrite) { + parent = typeof parent == 'string' ? parent : FS.getPath(parent); + var parts = path.split('/').reverse(); + while (parts.length) { + var part = parts.pop(); + if (!part) continue; + var current = PATH.join2(parent, part); + try { + FS.mkdir(current); + } catch (e) { + if (e.errno != 20) throw e; + } + parent = current; + } + return current; + }, + createFile(parent, name, properties, canRead, canWrite) { + var path = PATH.join2(typeof parent == 'string' ? parent : FS.getPath(parent), name); + var mode = FS_getMode(canRead, canWrite); + return FS.create(path, mode); + }, + createDataFile(parent, name, data, canRead, canWrite, canOwn) { + var path = name; + if (parent) { + parent = typeof parent == 'string' ? parent : FS.getPath(parent); + path = name ? PATH.join2(parent, name) : parent; + } + var mode = FS_getMode(canRead, canWrite); + var node = FS.create(path, mode); + if (data) { + if (typeof data == 'string') { + var arr = new Array(data.length); + for (var i = 0, len = data.length; i < len; ++i) arr[i] = data.charCodeAt(i); + data = arr; + } + // make sure we can write to the file + FS.chmod(node, mode | 146); + var stream = FS.open(node, 577); + FS.write(stream, data, 0, data.length, 0, canOwn); + FS.close(stream); + FS.chmod(node, mode); + } + }, + createDevice(parent, name, input, output) { + var path = PATH.join2(typeof parent == 'string' ? parent : FS.getPath(parent), name); + var mode = FS_getMode(!!input, !!output); + FS.createDevice.major ??= 64; + var dev = FS.makedev(FS.createDevice.major++, 0); + // Create a fake device that a set of stream ops to emulate + // the old behavior. + FS.registerDevice(dev, { + open(stream) { + stream.seekable = false; + }, + close(stream) { + // flush any pending line data + if (output?.buffer?.length) { + output(10); + } + }, + read(stream, buffer, offset, length, pos /* ignored */) { + var bytesRead = 0; + for (var i = 0; i < length; i++) { + var result; + try { + result = input(); + } catch (e) { + throw new FS.ErrnoError(29); + } + if (result === undefined && bytesRead === 0) { + throw new FS.ErrnoError(6); + } + if (result === null || result === undefined) break; + bytesRead++; + buffer[offset+i] = result; + } + if (bytesRead) { + stream.node.atime = Date.now(); + } + return bytesRead; + }, + write(stream, buffer, offset, length, pos) { + for (var i = 0; i < length; i++) { + try { + output(buffer[offset+i]); + } catch (e) { + throw new FS.ErrnoError(29); + } + } + if (length) { + stream.node.mtime = stream.node.ctime = Date.now(); + } + return i; + } + }); + return FS.mkdev(path, mode, dev); + }, + forceLoadFile(obj) { + if (obj.isDevice || obj.isFolder || obj.link || obj.contents) return true; + if (typeof XMLHttpRequest != 'undefined') { + throw new Error("Lazy loading should have been performed (contents set) in createLazyFile, but it was not. Lazy loading only works in web workers. Use --embed-file or --preload-file in emcc on the main thread."); + } else { // Command-line. + try { + obj.contents = readBinary(obj.url); + obj.usedBytes = obj.contents.length; + } catch (e) { + throw new FS.ErrnoError(29); + } + } + }, + createLazyFile(parent, name, url, canRead, canWrite) { + // Lazy chunked Uint8Array (implements get and length from Uint8Array). + // Actual getting is abstracted away for eventual reuse. + class LazyUint8Array { + lengthKnown = false; + chunks = []; // Loaded chunks. Index is the chunk number + get(idx) { + if (idx > this.length-1 || idx < 0) { + return undefined; + } + var chunkOffset = idx % this.chunkSize; + var chunkNum = (idx / this.chunkSize)|0; + return this.getter(chunkNum)[chunkOffset]; + } + setDataGetter(getter) { + this.getter = getter; + } + cacheLength() { + // Find length + var xhr = new XMLHttpRequest(); + xhr.open('HEAD', url, false); + xhr.send(null); + if (!(xhr.status >= 200 && xhr.status < 300 || xhr.status === 304)) throw new Error("Couldn't load " + url + ". Status: " + xhr.status); + var datalength = Number(xhr.getResponseHeader("Content-length")); + var header; + var hasByteServing = (header = xhr.getResponseHeader("Accept-Ranges")) && header === "bytes"; + var usesGzip = (header = xhr.getResponseHeader("Content-Encoding")) && header === "gzip"; + + var chunkSize = 1024*1024; // Chunk size in bytes + + if (!hasByteServing) chunkSize = datalength; + + // Function to get a range from the remote URL. + var doXHR = (from, to) => { + if (from > to) throw new Error("invalid range (" + from + ", " + to + ") or no bytes requested!"); + if (to > datalength-1) throw new Error("only " + datalength + " bytes available! programmer error!"); + + // TODO: Use mozResponseArrayBuffer, responseStream, etc. if available. + var xhr = new XMLHttpRequest(); + xhr.open('GET', url, false); + if (datalength !== chunkSize) xhr.setRequestHeader("Range", "bytes=" + from + "-" + to); + + // Some hints to the browser that we want binary data. + xhr.responseType = 'arraybuffer'; + if (xhr.overrideMimeType) { + xhr.overrideMimeType('text/plain; charset=x-user-defined'); + } + + xhr.send(null); + if (!(xhr.status >= 200 && xhr.status < 300 || xhr.status === 304)) throw new Error("Couldn't load " + url + ". Status: " + xhr.status); + if (xhr.response !== undefined) { + return new Uint8Array(/** @type{Array} */(xhr.response || [])); + } + return intArrayFromString(xhr.responseText || '', true); + }; + var lazyArray = this; + lazyArray.setDataGetter((chunkNum) => { + var start = chunkNum * chunkSize; + var end = (chunkNum+1) * chunkSize - 1; // including this byte + end = Math.min(end, datalength-1); // if datalength-1 is selected, this is the last block + if (typeof lazyArray.chunks[chunkNum] == 'undefined') { + lazyArray.chunks[chunkNum] = doXHR(start, end); + } + if (typeof lazyArray.chunks[chunkNum] == 'undefined') throw new Error('doXHR failed!'); + return lazyArray.chunks[chunkNum]; + }); + + if (usesGzip || !datalength) { + // if the server uses gzip or doesn't supply the length, we have to download the whole file to get the (uncompressed) length + chunkSize = datalength = 1; // this will force getter(0)/doXHR do download the whole file + datalength = this.getter(0).length; + chunkSize = datalength; + out("LazyFiles on gzip forces download of the whole file when length is accessed"); + } + + this._length = datalength; + this._chunkSize = chunkSize; + this.lengthKnown = true; + } + get length() { + if (!this.lengthKnown) { + this.cacheLength(); + } + return this._length; + } + get chunkSize() { + if (!this.lengthKnown) { + this.cacheLength(); + } + return this._chunkSize; + } + } + + if (typeof XMLHttpRequest != 'undefined') { + if (!ENVIRONMENT_IS_WORKER) throw 'Cannot do synchronous binary XHRs outside webworkers in modern browsers. Use --embed-file or --preload-file in emcc'; + var lazyArray = new LazyUint8Array(); + var properties = { isDevice: false, contents: lazyArray }; + } else { + var properties = { isDevice: false, url: url }; + } + + var node = FS.createFile(parent, name, properties, canRead, canWrite); + // This is a total hack, but I want to get this lazy file code out of the + // core of MEMFS. If we want to keep this lazy file concept I feel it should + // be its own thin LAZYFS proxying calls to MEMFS. + if (properties.contents) { + node.contents = properties.contents; + } else if (properties.url) { + node.contents = null; + node.url = properties.url; + } + // Add a function that defers querying the file size until it is asked the first time. + Object.defineProperties(node, { + usedBytes: { + get: function() { return this.contents.length; } + } + }); + // override each stream op with one that tries to force load the lazy file first + var stream_ops = {}; + var keys = Object.keys(node.stream_ops); + keys.forEach((key) => { + var fn = node.stream_ops[key]; + stream_ops[key] = (...args) => { + FS.forceLoadFile(node); + return fn(...args); + }; + }); + function writeChunks(stream, buffer, offset, length, position) { + var contents = stream.node.contents; + if (position >= contents.length) + return 0; + var size = Math.min(contents.length - position, length); + assert(size >= 0); + if (contents.slice) { // normal array + for (var i = 0; i < size; i++) { + buffer[offset + i] = contents[position + i]; + } + } else { + for (var i = 0; i < size; i++) { // LazyUint8Array from sync binary XHR + buffer[offset + i] = contents.get(position + i); + } + } + return size; + } + // use a custom read function + stream_ops.read = (stream, buffer, offset, length, position) => { + FS.forceLoadFile(node); + return writeChunks(stream, buffer, offset, length, position) + }; + // use a custom mmap function + stream_ops.mmap = (stream, length, position, prot, flags) => { + FS.forceLoadFile(node); + var ptr = mmapAlloc(length); + if (!ptr) { + throw new FS.ErrnoError(48); + } + writeChunks(stream, HEAP8, ptr, length, position); + return { ptr, allocated: true }; + }; + node.stream_ops = stream_ops; + return node; + }, + absolutePath() { + abort('FS.absolutePath has been removed; use PATH_FS.resolve instead'); + }, + createFolder() { + abort('FS.createFolder has been removed; use FS.mkdir instead'); + }, + createLink() { + abort('FS.createLink has been removed; use FS.symlink instead'); + }, + joinPath() { + abort('FS.joinPath has been removed; use PATH.join instead'); + }, + mmapAlloc() { + abort('FS.mmapAlloc has been replaced by the top level function mmapAlloc'); + }, + standardizePath() { + abort('FS.standardizePath has been removed; use PATH.normalize instead'); + }, + }; + + var SYSCALLS = { + DEFAULT_POLLMASK:5, + calculateAt(dirfd, path, allowEmpty) { + if (PATH.isAbs(path)) { + return path; + } + // relative path + var dir; + if (dirfd === -100) { + dir = FS.cwd(); + } else { + var dirstream = SYSCALLS.getStreamFromFD(dirfd); + dir = dirstream.path; + } + if (path.length == 0) { + if (!allowEmpty) { + throw new FS.ErrnoError(44);; + } + return dir; + } + return dir + '/' + path; + }, + writeStat(buf, stat) { + HEAP32[((buf)>>2)] = stat.dev; + HEAP32[(((buf)+(4))>>2)] = stat.mode; + HEAPU32[(((buf)+(8))>>2)] = stat.nlink; + HEAP32[(((buf)+(12))>>2)] = stat.uid; + HEAP32[(((buf)+(16))>>2)] = stat.gid; + HEAP32[(((buf)+(20))>>2)] = stat.rdev; + HEAP64[(((buf)+(24))>>3)] = BigInt(stat.size); + HEAP32[(((buf)+(32))>>2)] = 4096; + HEAP32[(((buf)+(36))>>2)] = stat.blocks; + var atime = stat.atime.getTime(); + var mtime = stat.mtime.getTime(); + var ctime = stat.ctime.getTime(); + HEAP64[(((buf)+(40))>>3)] = BigInt(Math.floor(atime / 1000)); + HEAPU32[(((buf)+(48))>>2)] = (atime % 1000) * 1000 * 1000; + HEAP64[(((buf)+(56))>>3)] = BigInt(Math.floor(mtime / 1000)); + HEAPU32[(((buf)+(64))>>2)] = (mtime % 1000) * 1000 * 1000; + HEAP64[(((buf)+(72))>>3)] = BigInt(Math.floor(ctime / 1000)); + HEAPU32[(((buf)+(80))>>2)] = (ctime % 1000) * 1000 * 1000; + HEAP64[(((buf)+(88))>>3)] = BigInt(stat.ino); + return 0; + }, + writeStatFs(buf, stats) { + HEAP32[(((buf)+(4))>>2)] = stats.bsize; + HEAP32[(((buf)+(40))>>2)] = stats.bsize; + HEAP32[(((buf)+(8))>>2)] = stats.blocks; + HEAP32[(((buf)+(12))>>2)] = stats.bfree; + HEAP32[(((buf)+(16))>>2)] = stats.bavail; + HEAP32[(((buf)+(20))>>2)] = stats.files; + HEAP32[(((buf)+(24))>>2)] = stats.ffree; + HEAP32[(((buf)+(28))>>2)] = stats.fsid; + HEAP32[(((buf)+(44))>>2)] = stats.flags; // ST_NOSUID + HEAP32[(((buf)+(36))>>2)] = stats.namelen; + }, + doMsync(addr, stream, len, flags, offset) { + if (!FS.isFile(stream.node.mode)) { + throw new FS.ErrnoError(43); + } + if (flags & 2) { + // MAP_PRIVATE calls need not to be synced back to underlying fs + return 0; + } + var buffer = HEAPU8.slice(addr, addr + len); + FS.msync(stream, buffer, offset, len, flags); + }, + getStreamFromFD(fd) { + var stream = FS.getStreamChecked(fd); + return stream; + }, + varargs:undefined, + getStr(ptr) { + var ret = UTF8ToString(ptr); + return ret; + }, + }; + function ___syscall_chmod(path, mode) { + try { + + path = SYSCALLS.getStr(path); + FS.chmod(path, mode); + return 0; + } catch (e) { + if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + return -e.errno; + } + } + + function ___syscall_fchmod(fd, mode) { + try { + + FS.fchmod(fd, mode); + return 0; + } catch (e) { + if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + return -e.errno; + } + } + + /** @suppress {duplicate } */ + var syscallGetVarargI = () => { + assert(SYSCALLS.varargs != undefined); + // the `+` prepended here is necessary to convince the JSCompiler that varargs is indeed a number. + var ret = HEAP32[((+SYSCALLS.varargs)>>2)]; + SYSCALLS.varargs += 4; + return ret; + }; + var syscallGetVarargP = syscallGetVarargI; + + + function ___syscall_fcntl64(fd, cmd, varargs) { + SYSCALLS.varargs = varargs; + try { + + var stream = SYSCALLS.getStreamFromFD(fd); + switch (cmd) { + case 0: { + var arg = syscallGetVarargI(); + if (arg < 0) { + return -28; + } + while (FS.streams[arg]) { + arg++; + } + var newStream; + newStream = FS.dupStream(stream, arg); + return newStream.fd; + } + case 1: + case 2: + return 0; // FD_CLOEXEC makes no sense for a single process. + case 3: + return stream.flags; + case 4: { + var arg = syscallGetVarargI(); + stream.flags |= arg; + return 0; + } + case 12: { + var arg = syscallGetVarargP(); + var offset = 0; + // We're always unlocked. + HEAP16[(((arg)+(offset))>>1)] = 2; + return 0; + } + case 13: + case 14: + // Pretend that the locking is successful. These are process-level locks, + // and Emscripten programs are a single process. If we supported linking a + // filesystem between programs, we'd need to do more here. + // See https://github.com/emscripten-core/emscripten/issues/23697 + return 0; + } + return -28; + } catch (e) { + if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + return -e.errno; + } + } + + function ___syscall_fstat64(fd, buf) { + try { + + return SYSCALLS.writeStat(buf, FS.fstat(fd)); + } catch (e) { + if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + return -e.errno; + } + } + + + function ___syscall_ioctl(fd, op, varargs) { + SYSCALLS.varargs = varargs; + try { + + var stream = SYSCALLS.getStreamFromFD(fd); + switch (op) { + case 21509: { + if (!stream.tty) return -59; + return 0; + } + case 21505: { + if (!stream.tty) return -59; + if (stream.tty.ops.ioctl_tcgets) { + var termios = stream.tty.ops.ioctl_tcgets(stream); + var argp = syscallGetVarargP(); + HEAP32[((argp)>>2)] = termios.c_iflag || 0; + HEAP32[(((argp)+(4))>>2)] = termios.c_oflag || 0; + HEAP32[(((argp)+(8))>>2)] = termios.c_cflag || 0; + HEAP32[(((argp)+(12))>>2)] = termios.c_lflag || 0; + for (var i = 0; i < 32; i++) { + HEAP8[(argp + i)+(17)] = termios.c_cc[i] || 0; + } + return 0; + } + return 0; + } + case 21510: + case 21511: + case 21512: { + if (!stream.tty) return -59; + return 0; // no-op, not actually adjusting terminal settings + } + case 21506: + case 21507: + case 21508: { + if (!stream.tty) return -59; + if (stream.tty.ops.ioctl_tcsets) { + var argp = syscallGetVarargP(); + var c_iflag = HEAP32[((argp)>>2)]; + var c_oflag = HEAP32[(((argp)+(4))>>2)]; + var c_cflag = HEAP32[(((argp)+(8))>>2)]; + var c_lflag = HEAP32[(((argp)+(12))>>2)]; + var c_cc = [] + for (var i = 0; i < 32; i++) { + c_cc.push(HEAP8[(argp + i)+(17)]); + } + return stream.tty.ops.ioctl_tcsets(stream.tty, op, { c_iflag, c_oflag, c_cflag, c_lflag, c_cc }); + } + return 0; // no-op, not actually adjusting terminal settings + } + case 21519: { + if (!stream.tty) return -59; + var argp = syscallGetVarargP(); + HEAP32[((argp)>>2)] = 0; + return 0; + } + case 21520: { + if (!stream.tty) return -59; + return -28; // not supported + } + case 21531: { + var argp = syscallGetVarargP(); + return FS.ioctl(stream, op, argp); + } + case 21523: { + // TODO: in theory we should write to the winsize struct that gets + // passed in, but for now musl doesn't read anything on it + if (!stream.tty) return -59; + if (stream.tty.ops.ioctl_tiocgwinsz) { + var winsize = stream.tty.ops.ioctl_tiocgwinsz(stream.tty); + var argp = syscallGetVarargP(); + HEAP16[((argp)>>1)] = winsize[0]; + HEAP16[(((argp)+(2))>>1)] = winsize[1]; + } + return 0; + } + case 21524: { + // TODO: technically, this ioctl call should change the window size. + // but, since emscripten doesn't have any concept of a terminal window + // yet, we'll just silently throw it away as we do TIOCGWINSZ + if (!stream.tty) return -59; + return 0; + } + case 21515: { + if (!stream.tty) return -59; + return 0; + } + default: return -28; // not supported + } + } catch (e) { + if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + return -e.errno; + } + } + + function ___syscall_lstat64(path, buf) { + try { + + path = SYSCALLS.getStr(path); + return SYSCALLS.writeStat(buf, FS.lstat(path)); + } catch (e) { + if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + return -e.errno; + } + } + + function ___syscall_newfstatat(dirfd, path, buf, flags) { + try { + + path = SYSCALLS.getStr(path); + var nofollow = flags & 256; + var allowEmpty = flags & 4096; + flags = flags & (~6400); + assert(!flags, `unknown flags in __syscall_newfstatat: ${flags}`); + path = SYSCALLS.calculateAt(dirfd, path, allowEmpty); + return SYSCALLS.writeStat(buf, nofollow ? FS.lstat(path) : FS.stat(path)); + } catch (e) { + if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + return -e.errno; + } + } + + + function ___syscall_openat(dirfd, path, flags, varargs) { + SYSCALLS.varargs = varargs; + try { + + path = SYSCALLS.getStr(path); + path = SYSCALLS.calculateAt(dirfd, path); + var mode = varargs ? syscallGetVarargI() : 0; + return FS.open(path, flags, mode).fd; + } catch (e) { + if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + return -e.errno; + } + } + + function ___syscall_renameat(olddirfd, oldpath, newdirfd, newpath) { + try { + + oldpath = SYSCALLS.getStr(oldpath); + newpath = SYSCALLS.getStr(newpath); + oldpath = SYSCALLS.calculateAt(olddirfd, oldpath); + newpath = SYSCALLS.calculateAt(newdirfd, newpath); + FS.rename(oldpath, newpath); + return 0; + } catch (e) { + if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + return -e.errno; + } + } + + function ___syscall_rmdir(path) { + try { + + path = SYSCALLS.getStr(path); + FS.rmdir(path); + return 0; + } catch (e) { + if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + return -e.errno; + } + } + + function ___syscall_stat64(path, buf) { + try { + + path = SYSCALLS.getStr(path); + return SYSCALLS.writeStat(buf, FS.stat(path)); + } catch (e) { + if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + return -e.errno; + } + } + + function ___syscall_unlinkat(dirfd, path, flags) { + try { + + path = SYSCALLS.getStr(path); + path = SYSCALLS.calculateAt(dirfd, path); + if (flags === 0) { + FS.unlink(path); + } else if (flags === 512) { + FS.rmdir(path); + } else { + abort('Invalid flags passed to unlinkat'); + } + return 0; + } catch (e) { + if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + return -e.errno; + } + } + + var __abort_js = () => + abort('native code called abort()'); + + var isLeapYear = (year) => year%4 === 0 && (year%100 !== 0 || year%400 === 0); + + var MONTH_DAYS_LEAP_CUMULATIVE = [0,31,60,91,121,152,182,213,244,274,305,335]; + + var MONTH_DAYS_REGULAR_CUMULATIVE = [0,31,59,90,120,151,181,212,243,273,304,334]; + var ydayFromDate = (date) => { + var leap = isLeapYear(date.getFullYear()); + var monthDaysCumulative = (leap ? MONTH_DAYS_LEAP_CUMULATIVE : MONTH_DAYS_REGULAR_CUMULATIVE); + var yday = monthDaysCumulative[date.getMonth()] + date.getDate() - 1; // -1 since it's days since Jan 1 + + return yday; + }; + + var INT53_MAX = 9007199254740992; + + var INT53_MIN = -9007199254740992; + var bigintToI53Checked = (num) => (num < INT53_MIN || num > INT53_MAX) ? NaN : Number(num); + function __localtime_js(time, tmPtr) { + time = bigintToI53Checked(time); + + + var date = new Date(time*1000); + HEAP32[((tmPtr)>>2)] = date.getSeconds(); + HEAP32[(((tmPtr)+(4))>>2)] = date.getMinutes(); + HEAP32[(((tmPtr)+(8))>>2)] = date.getHours(); + HEAP32[(((tmPtr)+(12))>>2)] = date.getDate(); + HEAP32[(((tmPtr)+(16))>>2)] = date.getMonth(); + HEAP32[(((tmPtr)+(20))>>2)] = date.getFullYear()-1900; + HEAP32[(((tmPtr)+(24))>>2)] = date.getDay(); + + var yday = ydayFromDate(date)|0; + HEAP32[(((tmPtr)+(28))>>2)] = yday; + HEAP32[(((tmPtr)+(36))>>2)] = -(date.getTimezoneOffset() * 60); + + // Attention: DST is in December in South, and some regions don't have DST at all. + var start = new Date(date.getFullYear(), 0, 1); + var summerOffset = new Date(date.getFullYear(), 6, 1).getTimezoneOffset(); + var winterOffset = start.getTimezoneOffset(); + var dst = (summerOffset != winterOffset && date.getTimezoneOffset() == Math.min(winterOffset, summerOffset))|0; + HEAP32[(((tmPtr)+(32))>>2)] = dst; + ; + } + + + var __mktime_js = function(tmPtr) { + + var ret = (() => { + var date = new Date(HEAP32[(((tmPtr)+(20))>>2)] + 1900, + HEAP32[(((tmPtr)+(16))>>2)], + HEAP32[(((tmPtr)+(12))>>2)], + HEAP32[(((tmPtr)+(8))>>2)], + HEAP32[(((tmPtr)+(4))>>2)], + HEAP32[((tmPtr)>>2)], + 0); + + // There's an ambiguous hour when the time goes back; the tm_isdst field is + // used to disambiguate it. Date() basically guesses, so we fix it up if it + // guessed wrong, or fill in tm_isdst with the guess if it's -1. + var dst = HEAP32[(((tmPtr)+(32))>>2)]; + var guessedOffset = date.getTimezoneOffset(); + var start = new Date(date.getFullYear(), 0, 1); + var summerOffset = new Date(date.getFullYear(), 6, 1).getTimezoneOffset(); + var winterOffset = start.getTimezoneOffset(); + var dstOffset = Math.min(winterOffset, summerOffset); // DST is in December in South + if (dst < 0) { + // Attention: some regions don't have DST at all. + HEAP32[(((tmPtr)+(32))>>2)] = Number(summerOffset != winterOffset && dstOffset == guessedOffset); + } else if ((dst > 0) != (dstOffset == guessedOffset)) { + var nonDstOffset = Math.max(winterOffset, summerOffset); + var trueOffset = dst > 0 ? dstOffset : nonDstOffset; + // Don't try setMinutes(date.getMinutes() + ...) -- it's messed up. + date.setTime(date.getTime() + (trueOffset - guessedOffset)*60000); + } + + HEAP32[(((tmPtr)+(24))>>2)] = date.getDay(); + var yday = ydayFromDate(date)|0; + HEAP32[(((tmPtr)+(28))>>2)] = yday; + // To match expected behavior, update fields from date + HEAP32[((tmPtr)>>2)] = date.getSeconds(); + HEAP32[(((tmPtr)+(4))>>2)] = date.getMinutes(); + HEAP32[(((tmPtr)+(8))>>2)] = date.getHours(); + HEAP32[(((tmPtr)+(12))>>2)] = date.getDate(); + HEAP32[(((tmPtr)+(16))>>2)] = date.getMonth(); + HEAP32[(((tmPtr)+(20))>>2)] = date.getYear(); + + var timeMs = date.getTime(); + if (isNaN(timeMs)) { + return -1; + } + // Return time in microseconds + return timeMs / 1000; + })(); + return BigInt(ret); + }; + + var stringToUTF8 = (str, outPtr, maxBytesToWrite) => { + assert(typeof maxBytesToWrite == 'number', 'stringToUTF8(str, outPtr, maxBytesToWrite) is missing the third parameter that specifies the length of the output buffer!'); + return stringToUTF8Array(str, HEAPU8, outPtr, maxBytesToWrite); + }; + + var __tzset_js = (timezone, daylight, std_name, dst_name) => { + // TODO: Use (malleable) environment variables instead of system settings. + var currentYear = new Date().getFullYear(); + var winter = new Date(currentYear, 0, 1); + var summer = new Date(currentYear, 6, 1); + var winterOffset = winter.getTimezoneOffset(); + var summerOffset = summer.getTimezoneOffset(); + + // Local standard timezone offset. Local standard time is not adjusted for + // daylight savings. This code uses the fact that getTimezoneOffset returns + // a greater value during Standard Time versus Daylight Saving Time (DST). + // Thus it determines the expected output during Standard Time, and it + // compares whether the output of the given date the same (Standard) or less + // (DST). + var stdTimezoneOffset = Math.max(winterOffset, summerOffset); + + // timezone is specified as seconds west of UTC ("The external variable + // `timezone` shall be set to the difference, in seconds, between + // Coordinated Universal Time (UTC) and local standard time."), the same + // as returned by stdTimezoneOffset. + // See http://pubs.opengroup.org/onlinepubs/009695399/functions/tzset.html + HEAPU32[((timezone)>>2)] = stdTimezoneOffset * 60; + + HEAP32[((daylight)>>2)] = Number(winterOffset != summerOffset); + + var extractZone = (timezoneOffset) => { + // Why inverse sign? + // Read here https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Date/getTimezoneOffset + var sign = timezoneOffset >= 0 ? "-" : "+"; + + var absOffset = Math.abs(timezoneOffset) + var hours = String(Math.floor(absOffset / 60)).padStart(2, "0"); + var minutes = String(absOffset % 60).padStart(2, "0"); + + return `UTC${sign}${hours}${minutes}`; + } + + var winterName = extractZone(winterOffset); + var summerName = extractZone(summerOffset); + assert(winterName); + assert(summerName); + assert(lengthBytesUTF8(winterName) <= 16, `timezone name truncated to fit in TZNAME_MAX (${winterName})`); + assert(lengthBytesUTF8(summerName) <= 16, `timezone name truncated to fit in TZNAME_MAX (${summerName})`); + if (summerOffset < winterOffset) { + // Northern hemisphere + stringToUTF8(winterName, std_name, 17); + stringToUTF8(summerName, dst_name, 17); + } else { + stringToUTF8(winterName, dst_name, 17); + stringToUTF8(summerName, std_name, 17); + } + }; + + var _emscripten_date_now = () => Date.now(); + + var abortOnCannotGrowMemory = (requestedSize) => { + abort(`Cannot enlarge memory arrays to size ${requestedSize} bytes (OOM). Either (1) compile with -sINITIAL_MEMORY=X with X higher than the current value ${HEAP8.length}, (2) compile with -sALLOW_MEMORY_GROWTH which allows increasing the size at runtime, or (3) if you want malloc to return NULL (0) instead of this abort, compile with -sABORTING_MALLOC=0`); + }; + var _emscripten_resize_heap = (requestedSize) => { + var oldSize = HEAPU8.length; + // With CAN_ADDRESS_2GB or MEMORY64, pointers are already unsigned. + requestedSize >>>= 0; + abortOnCannotGrowMemory(requestedSize); + }; + + function _fd_close(fd) { + try { + + var stream = SYSCALLS.getStreamFromFD(fd); + FS.close(stream); + return 0; + } catch (e) { + if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + return e.errno; + } + } + + function _fd_fdstat_get(fd, pbuf) { + try { + + var rightsBase = 0; + var rightsInheriting = 0; + var flags = 0; + { + var stream = SYSCALLS.getStreamFromFD(fd); + // All character devices are terminals (other things a Linux system would + // assume is a character device, like the mouse, we have special APIs for). + var type = stream.tty ? 2 : + FS.isDir(stream.mode) ? 3 : + FS.isLink(stream.mode) ? 7 : + 4; + } + HEAP8[pbuf] = type; + HEAP16[(((pbuf)+(2))>>1)] = flags; + HEAP64[(((pbuf)+(8))>>3)] = BigInt(rightsBase); + HEAP64[(((pbuf)+(16))>>3)] = BigInt(rightsInheriting); + return 0; + } catch (e) { + if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + return e.errno; + } + } + + /** @param {number=} offset */ + var doReadv = (stream, iov, iovcnt, offset) => { + var ret = 0; + for (var i = 0; i < iovcnt; i++) { + var ptr = HEAPU32[((iov)>>2)]; + var len = HEAPU32[(((iov)+(4))>>2)]; + iov += 8; + var curr = FS.read(stream, HEAP8, ptr, len, offset); + if (curr < 0) return -1; + ret += curr; + if (curr < len) break; // nothing more to read + if (typeof offset != 'undefined') { + offset += curr; + } + } + return ret; + }; + + function _fd_read(fd, iov, iovcnt, pnum) { + try { + + var stream = SYSCALLS.getStreamFromFD(fd); + var num = doReadv(stream, iov, iovcnt); + HEAPU32[((pnum)>>2)] = num; + return 0; + } catch (e) { + if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + return e.errno; + } + } + + + function _fd_seek(fd, offset, whence, newOffset) { + offset = bigintToI53Checked(offset); + + + try { + + if (isNaN(offset)) return 61; + var stream = SYSCALLS.getStreamFromFD(fd); + FS.llseek(stream, offset, whence); + HEAP64[((newOffset)>>3)] = BigInt(stream.position); + if (stream.getdents && offset === 0 && whence === 0) stream.getdents = null; // reset readdir state + return 0; + } catch (e) { + if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + return e.errno; + } + ; + } + + /** @param {number=} offset */ + var doWritev = (stream, iov, iovcnt, offset) => { + var ret = 0; + for (var i = 0; i < iovcnt; i++) { + var ptr = HEAPU32[((iov)>>2)]; + var len = HEAPU32[(((iov)+(4))>>2)]; + iov += 8; + var curr = FS.write(stream, HEAP8, ptr, len, offset); + if (curr < 0) return -1; + ret += curr; + if (curr < len) { + // No more space to write. + break; + } + if (typeof offset != 'undefined') { + offset += curr; + } + } + return ret; + }; + + function _fd_write(fd, iov, iovcnt, pnum) { + try { + + var stream = SYSCALLS.getStreamFromFD(fd); + var num = doWritev(stream, iov, iovcnt); + HEAPU32[((pnum)>>2)] = num; + return 0; + } catch (e) { + if (typeof FS == 'undefined' || !(e.name === 'ErrnoError')) throw e; + return e.errno; + } + } + + + var runtimeKeepaliveCounter = 0; + var keepRuntimeAlive = () => noExitRuntime || runtimeKeepaliveCounter > 0; + var _proc_exit = (code) => { + EXITSTATUS = code; + if (!keepRuntimeAlive()) { + Module['onExit']?.(code); + ABORT = true; + } + quit_(code, new ExitStatus(code)); + }; + + + /** @param {boolean|number=} implicit */ + var exitJS = (status, implicit) => { + EXITSTATUS = status; + + checkUnflushedContent(); + + // if exit() was called explicitly, warn the user if the runtime isn't actually being shut down + if (keepRuntimeAlive() && !implicit) { + var msg = `program exited (with status: ${status}), but keepRuntimeAlive() is set (counter=${runtimeKeepaliveCounter}) due to an async operation, so halting execution but not exiting the runtime or preventing further async execution (you can use emscripten_force_exit, if you want to force a true shutdown)`; + err(msg); + } + + _proc_exit(status); + }; + + var handleException = (e) => { + // Certain exception types we do not treat as errors since they are used for + // internal control flow. + // 1. ExitStatus, which is thrown by exit() + // 2. "unwind", which is thrown by emscripten_unwind_to_js_event_loop() and others + // that wish to return to JS event loop. + if (e instanceof ExitStatus || e == 'unwind') { + return EXITSTATUS; + } + checkStackCookie(); + if (e instanceof WebAssembly.RuntimeError) { + if (_emscripten_stack_get_current() <= 0) { + err('Stack overflow detected. You can try increasing -sSTACK_SIZE (currently set to 65536)'); + } + } + quit_(1, e); + }; + + + + var stackAlloc = (sz) => __emscripten_stack_alloc(sz); + var stringToUTF8OnStack = (str) => { + var size = lengthBytesUTF8(str) + 1; + var ret = stackAlloc(size); + stringToUTF8(str, ret, size); + return ret; + }; + + FS.createPreloadedFile = FS_createPreloadedFile; + FS.staticInit(); + // Set module methods based on EXPORTED_RUNTIME_METHODS + ; +// End JS library code + +function checkIncomingModuleAPI() { + ignoredModuleProp('fetchSettings'); +} +var wasmImports = { + /** @export */ + __syscall_chmod: ___syscall_chmod, + /** @export */ + __syscall_fchmod: ___syscall_fchmod, + /** @export */ + __syscall_fcntl64: ___syscall_fcntl64, + /** @export */ + __syscall_fstat64: ___syscall_fstat64, + /** @export */ + __syscall_ioctl: ___syscall_ioctl, + /** @export */ + __syscall_lstat64: ___syscall_lstat64, + /** @export */ + __syscall_newfstatat: ___syscall_newfstatat, + /** @export */ + __syscall_openat: ___syscall_openat, + /** @export */ + __syscall_renameat: ___syscall_renameat, + /** @export */ + __syscall_rmdir: ___syscall_rmdir, + /** @export */ + __syscall_stat64: ___syscall_stat64, + /** @export */ + __syscall_unlinkat: ___syscall_unlinkat, + /** @export */ + _abort_js: __abort_js, + /** @export */ + _localtime_js: __localtime_js, + /** @export */ + _mktime_js: __mktime_js, + /** @export */ + _tzset_js: __tzset_js, + /** @export */ + emscripten_date_now: _emscripten_date_now, + /** @export */ + emscripten_resize_heap: _emscripten_resize_heap, + /** @export */ + fd_close: _fd_close, + /** @export */ + fd_fdstat_get: _fd_fdstat_get, + /** @export */ + fd_read: _fd_read, + /** @export */ + fd_seek: _fd_seek, + /** @export */ + fd_write: _fd_write +}; +var wasmExports; +createWasm(); +var ___wasm_call_ctors = createExportWrapper('__wasm_call_ctors', 0); +var _main = Module['_main'] = createExportWrapper('__main_argc_argv', 2); +var _strerror = createExportWrapper('strerror', 1); +var _fflush = createExportWrapper('fflush', 1); +var _emscripten_stack_init = () => (_emscripten_stack_init = wasmExports['emscripten_stack_init'])(); +var _emscripten_stack_get_free = () => (_emscripten_stack_get_free = wasmExports['emscripten_stack_get_free'])(); +var _emscripten_stack_get_base = () => (_emscripten_stack_get_base = wasmExports['emscripten_stack_get_base'])(); +var _emscripten_stack_get_end = () => (_emscripten_stack_get_end = wasmExports['emscripten_stack_get_end'])(); +var __emscripten_stack_restore = (a0) => (__emscripten_stack_restore = wasmExports['_emscripten_stack_restore'])(a0); +var __emscripten_stack_alloc = (a0) => (__emscripten_stack_alloc = wasmExports['_emscripten_stack_alloc'])(a0); +var _emscripten_stack_get_current = () => (_emscripten_stack_get_current = wasmExports['emscripten_stack_get_current'])(); + + +// include: postamble.js +// === Auto-generated postamble setup entry stuff === + +var missingLibrarySymbols = [ + 'writeI53ToI64', + 'writeI53ToI64Clamped', + 'writeI53ToI64Signaling', + 'writeI53ToU64Clamped', + 'writeI53ToU64Signaling', + 'readI53FromI64', + 'readI53FromU64', + 'convertI32PairToI53', + 'convertI32PairToI53Checked', + 'convertU32PairToI53', + 'getTempRet0', + 'setTempRet0', + 'zeroMemory', + 'getHeapMax', + 'growMemory', + 'inetPton4', + 'inetNtop4', + 'inetPton6', + 'inetNtop6', + 'readSockaddr', + 'writeSockaddr', + 'emscriptenLog', + 'readEmAsmArgs', + 'jstoi_q', + 'getExecutableName', + 'listenOnce', + 'autoResumeAudioContext', + 'getDynCaller', + 'dynCall', + 'runtimeKeepalivePush', + 'runtimeKeepalivePop', + 'callUserCallback', + 'maybeExit', + 'asmjsMangle', + 'alignMemory', + 'HandleAllocator', + 'getNativeTypeSize', + 'addOnInit', + 'addOnPostCtor', + 'addOnPreMain', + 'addOnExit', + 'STACK_SIZE', + 'STACK_ALIGN', + 'POINTER_SIZE', + 'ASSERTIONS', + 'getCFunc', + 'ccall', + 'cwrap', + 'uleb128Encode', + 'sigToWasmTypes', + 'generateFuncType', + 'convertJsFunctionToWasm', + 'getEmptyTableSlot', + 'updateTableMap', + 'getFunctionAddress', + 'addFunction', + 'removeFunction', + 'reallyNegative', + 'unSign', + 'strLen', + 'reSign', + 'formatString', + 'intArrayToString', + 'AsciiToString', + 'stringToAscii', + 'UTF16ToString', + 'stringToUTF16', + 'lengthBytesUTF16', + 'UTF32ToString', + 'stringToUTF32', + 'lengthBytesUTF32', + 'stringToNewUTF8', + 'writeArrayToMemory', + 'registerKeyEventCallback', + 'maybeCStringToJsString', + 'findEventTarget', + 'getBoundingClientRect', + 'fillMouseEventData', + 'registerMouseEventCallback', + 'registerWheelEventCallback', + 'registerUiEventCallback', + 'registerFocusEventCallback', + 'fillDeviceOrientationEventData', + 'registerDeviceOrientationEventCallback', + 'fillDeviceMotionEventData', + 'registerDeviceMotionEventCallback', + 'screenOrientation', + 'fillOrientationChangeEventData', + 'registerOrientationChangeEventCallback', + 'fillFullscreenChangeEventData', + 'registerFullscreenChangeEventCallback', + 'JSEvents_requestFullscreen', + 'JSEvents_resizeCanvasForFullscreen', + 'registerRestoreOldStyle', + 'hideEverythingExceptGivenElement', + 'restoreHiddenElements', + 'setLetterbox', + 'softFullscreenResizeWebGLRenderTarget', + 'doRequestFullscreen', + 'fillPointerlockChangeEventData', + 'registerPointerlockChangeEventCallback', + 'registerPointerlockErrorEventCallback', + 'requestPointerLock', + 'fillVisibilityChangeEventData', + 'registerVisibilityChangeEventCallback', + 'registerTouchEventCallback', + 'fillGamepadEventData', + 'registerGamepadEventCallback', + 'registerBeforeUnloadEventCallback', + 'fillBatteryEventData', + 'battery', + 'registerBatteryEventCallback', + 'setCanvasElementSize', + 'getCanvasElementSize', + 'jsStackTrace', + 'getCallstack', + 'convertPCtoSourceLocation', + 'getEnvStrings', + 'checkWasiClock', + 'wasiRightsToMuslOFlags', + 'wasiOFlagsToMuslOFlags', + 'safeSetTimeout', + 'setImmediateWrapped', + 'safeRequestAnimationFrame', + 'clearImmediateWrapped', + 'registerPostMainLoop', + 'registerPreMainLoop', + 'getPromise', + 'makePromise', + 'idsToPromises', + 'makePromiseCallback', + 'ExceptionInfo', + 'findMatchingCatch', + 'Browser_asyncPrepareDataCounter', + 'arraySum', + 'addDays', + 'getSocketFromFD', + 'getSocketAddress', + 'FS_unlink', + 'FS_mkdirTree', + '_setNetworkCallback', + 'heapObjectForWebGLType', + 'toTypedArrayIndex', + 'webgl_enable_ANGLE_instanced_arrays', + 'webgl_enable_OES_vertex_array_object', + 'webgl_enable_WEBGL_draw_buffers', + 'webgl_enable_WEBGL_multi_draw', + 'webgl_enable_EXT_polygon_offset_clamp', + 'webgl_enable_EXT_clip_control', + 'webgl_enable_WEBGL_polygon_mode', + 'emscriptenWebGLGet', + 'computeUnpackAlignedImageSize', + 'colorChannelsInGlTextureFormat', + 'emscriptenWebGLGetTexPixelData', + 'emscriptenWebGLGetUniform', + 'webglGetUniformLocation', + 'webglPrepareUniformLocationsBeforeFirstUse', + 'webglGetLeftBracePos', + 'emscriptenWebGLGetVertexAttrib', + '__glGetActiveAttribOrUniform', + 'writeGLArray', + 'registerWebGlEventCallback', + 'runAndAbortIfError', + 'ALLOC_NORMAL', + 'ALLOC_STACK', + 'allocate', + 'writeStringToMemory', + 'writeAsciiToMemory', + 'demangle', + 'stackTrace', +]; +missingLibrarySymbols.forEach(missingLibrarySymbol) + +var unexportedSymbols = [ + 'run', + 'addRunDependency', + 'removeRunDependency', + 'out', + 'err', + 'callMain', + 'abort', + 'wasmMemory', + 'wasmExports', + 'writeStackCookie', + 'checkStackCookie', + 'INT53_MAX', + 'INT53_MIN', + 'bigintToI53Checked', + 'stackSave', + 'stackRestore', + 'stackAlloc', + 'ptrToString', + 'exitJS', + 'abortOnCannotGrowMemory', + 'ENV', + 'ERRNO_CODES', + 'strError', + 'DNS', + 'Protocols', + 'Sockets', + 'timers', + 'warnOnce', + 'readEmAsmArgsArray', + 'jstoi_s', + 'handleException', + 'keepRuntimeAlive', + 'asyncLoad', + 'mmapAlloc', + 'wasmTable', + 'noExitRuntime', + 'addOnPreRun', + 'addOnPostRun', + 'freeTableIndexes', + 'functionsInTableMap', + 'setValue', + 'getValue', + 'PATH', + 'PATH_FS', + 'UTF8Decoder', + 'UTF8ArrayToString', + 'UTF8ToString', + 'stringToUTF8Array', + 'stringToUTF8', + 'lengthBytesUTF8', + 'intArrayFromString', + 'UTF16Decoder', + 'stringToUTF8OnStack', + 'JSEvents', + 'specialHTMLTargets', + 'findCanvasEventTarget', + 'currentFullscreenStrategy', + 'restoreOldWindowedStyle', + 'UNWIND_CACHE', + 'ExitStatus', + 'doReadv', + 'doWritev', + 'initRandomFill', + 'randomFill', + 'emSetImmediate', + 'emClearImmediate_deps', + 'emClearImmediate', + 'promiseMap', + 'uncaughtExceptionCount', + 'exceptionLast', + 'exceptionCaught', + 'Browser', + 'getPreloadedImageData__data', + 'wget', + 'MONTH_DAYS_REGULAR', + 'MONTH_DAYS_LEAP', + 'MONTH_DAYS_REGULAR_CUMULATIVE', + 'MONTH_DAYS_LEAP_CUMULATIVE', + 'isLeapYear', + 'ydayFromDate', + 'SYSCALLS', + 'preloadPlugins', + 'FS_createPreloadedFile', + 'FS_modeStringToFlags', + 'FS_getMode', + 'FS_stdin_getChar_buffer', + 'FS_stdin_getChar', + 'FS_createPath', + 'FS_createDevice', + 'FS_readFile', + 'FS', + 'FS_createDataFile', + 'FS_createLazyFile', + 'MEMFS', + 'TTY', + 'PIPEFS', + 'SOCKFS', + 'tempFixedLengthArray', + 'miniTempWebGLFloatBuffers', + 'miniTempWebGLIntBuffers', + 'GL', + 'AL', + 'GLUT', + 'EGL', + 'GLEW', + 'IDBStore', + 'SDL', + 'SDL_gfx', + 'allocateUTF8', + 'allocateUTF8OnStack', + 'print', + 'printErr', +]; +unexportedSymbols.forEach(unexportedRuntimeSymbol); + + + +var calledRun; + +function callMain(args = []) { + assert(runDependencies == 0, 'cannot call main when async dependencies remain! (listen on Module["onRuntimeInitialized"])'); + assert(typeof onPreRuns === 'undefined' || onPreRuns.length == 0, 'cannot call main when preRun functions remain to be called'); + + var entryFunction = _main; + + args.unshift(thisProgram); + + var argc = args.length; + var argv = stackAlloc((argc + 1) * 4); + var argv_ptr = argv; + args.forEach((arg) => { + HEAPU32[((argv_ptr)>>2)] = stringToUTF8OnStack(arg); + argv_ptr += 4; + }); + HEAPU32[((argv_ptr)>>2)] = 0; + + try { + + var ret = entryFunction(argc, argv); + + // if we're not running an evented main loop, it's time to exit + exitJS(ret, /* implicit = */ true); + return ret; + } catch (e) { + return handleException(e); + } +} + +function stackCheckInit() { + // This is normally called automatically during __wasm_call_ctors but need to + // get these values before even running any of the ctors so we call it redundantly + // here. + _emscripten_stack_init(); + // TODO(sbc): Move writeStackCookie to native to to avoid this. + writeStackCookie(); +} + +function run(args = arguments_) { + + if (runDependencies > 0) { + dependenciesFulfilled = run; + return; + } + + stackCheckInit(); + + preRun(); + + // a preRun added a dependency, run will be called later + if (runDependencies > 0) { + dependenciesFulfilled = run; + return; + } + + function doRun() { + // run may have just been called through dependencies being fulfilled just in this very frame, + // or while the async setStatus time below was happening + assert(!calledRun); + calledRun = true; + Module['calledRun'] = true; + + if (ABORT) return; + + initRuntime(); + + preMain(); + + Module['onRuntimeInitialized']?.(); + consumedModuleProp('onRuntimeInitialized'); + + var noInitialRun = Module['noInitialRun'];legacyModuleProp('noInitialRun', 'noInitialRun'); + if (!noInitialRun) callMain(args); + + postRun(); + } + + if (Module['setStatus']) { + Module['setStatus']('Running...'); + setTimeout(() => { + setTimeout(() => Module['setStatus'](''), 1); + doRun(); + }, 1); + } else + { + doRun(); + } + checkStackCookie(); +} + +function checkUnflushedContent() { + // Compiler settings do not allow exiting the runtime, so flushing + // the streams is not possible. but in ASSERTIONS mode we check + // if there was something to flush, and if so tell the user they + // should request that the runtime be exitable. + // Normally we would not even include flush() at all, but in ASSERTIONS + // builds we do so just for this check, and here we see if there is any + // content to flush, that is, we check if there would have been + // something a non-ASSERTIONS build would have not seen. + // How we flush the streams depends on whether we are in SYSCALLS_REQUIRE_FILESYSTEM=0 + // mode (which has its own special function for this; otherwise, all + // the code is inside libc) + var oldOut = out; + var oldErr = err; + var has = false; + out = err = (x) => { + has = true; + } + try { // it doesn't matter if it fails + _fflush(0); + // also flush in the JS FS layer + ['stdout', 'stderr'].forEach((name) => { + var info = FS.analyzePath('/dev/' + name); + if (!info) return; + var stream = info.object; + var rdev = stream.rdev; + var tty = TTY.ttys[rdev]; + if (tty?.output?.length) { + has = true; + } + }); + } catch(e) {} + out = oldOut; + err = oldErr; + if (has) { + warnOnce('stdio streams had content in them that was not flushed. you should set EXIT_RUNTIME to 1 (see the Emscripten FAQ), or make sure to emit a newline when you printf etc.'); + } +} + +if (Module['preInit']) { + if (typeof Module['preInit'] == 'function') Module['preInit'] = [Module['preInit']]; + while (Module['preInit'].length > 0) { + Module['preInit'].pop()(); + } +} +consumedModuleProp('preInit'); + +run(); + +// end include: postamble.js + diff --git a/thirdparty/libzip-1.11.3/build-emcmake/ossfuzz/zip_write_encrypt_aes256_file_fuzzer.wasm b/thirdparty/libzip-1.11.3/build-emcmake/ossfuzz/zip_write_encrypt_aes256_file_fuzzer.wasm new file mode 100755 index 0000000000000000000000000000000000000000..abbf197376f63483a5ac2fa4e588da6957d623bd GIT binary patch literal 400122 zcmb@v2b@$z*8bl&^)$@jv`83&cuG+*Af^Sx#Ed$O%I+Fi)>U`WRa_loBfIXqFTx;# zm{H6LFpUYtgs7+(Fz1}boO90q?^E}7_l&apzVGMv-_PQ7-&=LgsZ&*_>Qp`FbZ*Z> z4-9g-TyRUY=^nx4VDcWx6#XxlvPbCu8%>!sCAUYwzj(@&$y2fd{zH_O3sjiTlljBv z$y5}bw0QPL57So=ic&gxD5n%C>UrgYNmQHcKl^97J;KRU$nn>c*F&-K6sGKv<718L zs*0C9ts7;3c$3>BuL4z)z8vpWf%ba&^jXEyYRTm6LpWuUe?Lio5-qHAj{;}e?afklbp?mFlzyag-+3TQ*2MpafSEJ|k)#v*iyw}77 zay7jU+w;)<#vOXlo`)Q|@4*wt9Wr73KlU4c*an4t_8zy_0S6yCK3DiRC2A-!Vf>zZ z=eqx!0wQtPg#9Lt&vh5;mBt@<=w1`{J7nVcgU0Q>=fv^j4m$X-+)8>=tO~WyUi%(+ z@ZP!b7qWJE+M)2lhm1dH&xtAZjtxF^;+_*}uqV=?c*n;*sw@v0f7m{HwH!(Zl&k!k z7D@$&jvv2&u7~99GH&9(4jn&nTZ=~ynbo=bBCXD;r_=%}Hx{TZN zuLn=?GWv1St3#(u7=P$~{~AAT-|>4M0<(LfrBUxNEX0L|hC-ohp=-B>9$gDHVb~Bh zG;}S5VfTibE`8!c-)=QEl#1hi{kyLm)^zPLpnF{C%J%{f3vvA__1(hmad!)YLRiz_ zip8!y8dmKQ_U*yzm1_z$uJ3AfLC~ef6>3(g32SN^3iaX20}FjuU!x|B*A$&WJqm?} zy0zBo5hs27cB@NjlR_a^Qxg|z3S9~??;ZsCxMuB|d?BtW#9qMLZQ3r6~ZBL5_hW$S6IJm*RT+F zjl*tXKb5Jeso8)(YA0gVhyH)6OTC(c)yKW#p1g~D7U~PD^jxKWl~q;=3pMrqLaG*# z3Sqm3s6&@dh2@VO?Uq8tQ!4csR zVZM7bC1`AGi);ClOaD`IS=cRq;P?X%p738`j+ul>IB=Xd9(zqZc*3E%-prx{_uTKG zaeGeq+g|$5KXQHgj2pM#L5$1sdrcg-&)*N)YvO(fA2e>_o_{@He2^;~I&s4I2@?*U zkh>_#@3YSVe?N5J+`D1V4r7f`x!3*>*l%L)*{IL2UNBzA?K5Hg_}p{<=H*}a#4f8g6azpl}D*#kv&F zng*-B>G!UUfvau2E9dGcR@dsfSvR+Wb+uYsp*Vf2M5^aS{m^hEq>5H=#b&o6b-LS% z*1hCb3P*+`ZKZ9x-o7e73r-0G2T4O^r5m=uoGYf^m8j#3X2!4|hx zD$3f8ZA)@)9UEk8+1j>F@m=3f>)N{QZZI_m4-JQ_;BdDdVhyqNY)Fe+ADK6>^=*Ta z+Yp&IOl984HY&@!aVqm~>^GUrLm@SEXjp7q;AI}xSaguJ;jL~H+t`NLCLP4z%#E-S z#e3A&l+32KX{9wN&^GJXn$1(`wy-VSmbT>;Zlu1Cc8!hGLf6#z^Usmn%9?DelH1xg zw~@BBH5NbdP27g|G}|`T+~P*jo)#NrEhV=t?b$YM&vv$5xjoybf{eD&S$lqq7{47F zTI2D)J-=%-_j?}wzSZqu+uQGKhYsx->2|aoD-GC*Vmozgz|OXF@oF#87$o|Gjj=zp zxUop|M;mK@EV*5fXqQx?KiQwk678Bww43dgNwhn3cOM$A-}r===+BMoyT9=0FRgBz z?P`Cvah)XE!}h31v?s;(tV*Xvmn?ne+7jO6CtsnBcyS+7m$MbA_tJ}x+$tLjL z^|cq}gPp3g+&?(vqn#@_Fvl-jNt!OI_3S-y3@r9FBawY3-D-}P` z%qh?AqBs{_PiXYg9By{K>5B&IZ4D*YhrZ~O^6hJV%Y2#JgTfxJzx5aGm1)t$LETB{8WF>#V#<1BqWy35lvl-g>h-Wj5I>T)!6MJ}P zHg(K*FZ_tKNt;4(Guy;Q*k(-fPko~|=h+ra)-6W4E%`XowzQEY*9gPLlwp%Kl^Jf; zc$;UqH4L}0t(e~1bY@s&jyD(I_S&V)D4I43J0$LP%y}=%w$@_X7SGTe?CXbl(QQZB z?QJ{Tev})H48OI}_S=&C9Wwk58B*DQZ@aC6mo=uY- z>uZMuNqLq87{Sm23-@QTM4A$H7D+4?Mh&FIlKR@qf?&nvSIB5~st990$(mgrscS56 zH6>T@)1`pi8hxGvtK{HZ@QXQRno;R{KdE9C$`#TEW!37fKKqX7MPx3vYDT4!)Yr}o zlCCWF@}=YD%iOtM}m(}vF3tE=6sVH5o>snFKWfIg`-C9wBRlL@^?I`(N zms;z>j1SVqyCiw)Yi|o`Vx-7>X~M}-S(=buS^n-rMkyE;`GL`2N)*$)C6+Iq=Z$km z!&HZ1%B6;B)N+;RYj;yO_Lq>Nh3>4|ByX3B@X3bEiU`yl*4q9mm{F8RfKBLHc3KtP1{*3yE;i*Bt7hAb=GZ+TLGQc z%Zio|x|k072B}wNkXe7c{hTDzDWW~Cr#h#X^{`%JJDE)x&2-b$;QFGve%9CejmT-D zNb&uLhW#_k*ns_9S)(7DDVnR;Dq@6#yW`G!{@^59>J*&fPp?Z7t&}H;9Fgy)!luoDeG6-iLOstmQ_~D>Zh{(SxNhs7$1FX z>IMk-_2VI&)I_sw%r0o8r|YPH zG&q;Il~rMYt!x8Int<~i3of(I%*|l-^|Mtcp4s;?lNY$4cVV;IEjshuduOg ztkLotRTyf&v7se5%!bW(!<&liC5GE3GjJC+vJsQqrfG%EY%>j+%~io~BT8}%=DU$} zL?a$R;|$kin_AN(90Si`Yuj4mW*b%T4nc`+!l?P|4z{wENp4$4%C_jA!6WOo9fN0k z9&O+1a0jx%vmJvcwK*&N&jX`kbAsg!jQ^v}8Ih~+Jo~UYNVfvd5qNN}p0$y7dC!)` z5#gDIzglkEg1F$<%4G6t7{Ioi>ufTYw{8dN@>p^;-VoMQR_uZmq^K^^ZXMP#Tfe(l z?cvzTI@b+>8P{68yRnRGWvs7#C9037gnq6?%(rMto;emwPW->PI^Uv3V}BG`yg$lI zGW92tufHYoCmQ$@YAsB(_~u!^FUZ#KL<@De)rj^>un%D}A zfpBCr(x6j7Xiv`Tbxfxd1DzHG>DwM@S#RVHcfFc^=704}!CuyT3^qMTCm|NyYp|~u zLPGXS>v@BBxE4e=KsrmSGa=o8S{qPa6BBbqZoY~$7qN7}k5V|5({{LnR*t4&`Hw!!ic<}+J8i}h`N8#0M0 zo7e_2PPtkNN--PKK^yUOqgKb%9q31sZCGD>bj*$>oUENpFaD`>3+1`ec}J7gsXB?( zoekE~@5!1moI%=`B?ek-T^R4_mZWQ@Ccmc{>*^@yH#8-;g4gm2Xc;ousZVv=A?MSt zQ_U>R)s-1_^iaR}?G789b_{8+%unhKsZT%@=j@PlZHEw*v)=eMM$+j-NnSNW3f$tA|y#6J` z`ss@eAi5#_zhQ}<-oQ2*kqgon9Q)YDu+R2lzhNl&gP&HJ?5taVQ(wC@Otj9{`G1+c zi7D&%BKvF3W@Yo~<~E=1%<~p%*T>#W9&ujA1rMh(sf!o+dESKrU1%8E@Ef&eSBtoH zI1F_q*Ub-sZc-lg3#_3lbUH0~K_sZTB1Bfq^hm)5j3$3#*435tr$@@RXG%ny7xr!p zi=Vs%y&>SoL(B5ULrRE+ws>~NY-N~nVBkB=a~Z$`h6QTmYk!Uk%o&fYm7(D>)vQuq z`?pXo!v9b9x+s^xbxlokt<}1&Ody%-`q~jeO?jgJUseUHsjq!6h~$ISm+Sv~>n*db z(;)uP%iel7Xs+wrqsF*wvBG>rq;E5$)s>Q6H6AEZM;~jWL?1W1Zglqw*3DKZxq9E- z^_qoKSOOC(W@`3zR#epU(64rk}3(9SGo0 zz?y&IXd+I>3y+5cdF>22_AL8uTK>IZE74Rq>eLIr!y5#ZW*<)J@}lWF0%kqC7Sm(5ek%rj(WIYadIM;{KOP@dhbX zO8oz$QZ#2fdtzP>cw$z}45Q8j3uuOZ|Hm&}6JM5nv-QdhU5svu>Dv7dyfM_|{n?U~ zBK@*pTmKQcP~UK5G5OxQ{{!nzS?01i%zIjvrP@{FV%U1C_4Ps#QBv z>FV{h_r)v8de-2fgj14#`!8Qr`M*2!@F%d<#g+Z>a>ikH3i!Vthw0)Yv%EqR&Go}@ z8ndt1&M-tHbqqt?6t8!cS_!^A7?C|@x}K`w9hGTvRN9$fzCs_C)CRA7Rp`sk-z$8k z>#qv_B4rxGZ$LYW_7zaEt>Sw?6&$|Bs@Tv~XS&r?!LOs!-0HS^yEH73(6FsRH>As9 z#e13Q)>Z|UN?T`|D_@GJ0(&7FJR+B^pF^4ku{aK~^=G;bRAEDw#SN#iI&Rd?F35A> zl+-pJk;_h&hBmFwn#cj^OdJ_1cu!`UEsp1y_uPAOI7fv zqSJ6_8ryMae1)y>SDHrT! zlfI5k(LTak-C+@Sb*+eV$FwEvHMD81F-{-HVr+xd*p^&ZzjSoXwpoSh0wd{uVRO@+ zL^jm3aqSzR7v9J)$!L;4=&LpfGhAQ$zD_D*FMkd4SI$jCx@`HY$1i5BcHKIu^rOU| z_)cQ6A5~@7?fSdh9FX+{`Txt}`1F4Imj-pQ02%BqfJN##i> zKY)K;HlR)6B=}5{1S%=cb(9>I7kSpZIBjwLmigbD_A^ZJ!L=FQJv$=Ug+0WQoX*m%wl(#|Ir;5YyvBE;KQ|Z} z4%9ivNLSD9-+Q+^cJgl7cIY-dm4Ndl4Va#+RMq39@=G>HTK@X5tX5qjs`pC^4Afzh zKNa?k@u$AJEgMjL-QRNi3o>1fwK&JL^!B^tR)fH575Q^#lum)w#4z9R?jyxO_!in;9C(RP}s%dX719YfJE zL&HH(@t4}o%e~Z|;{HUrKcys_rnp`Cw(GEHIPKnzkGllntXdoSBdXpOz4(jBa-kT5bPP?f|GAXb0GVC3g^ga!_T|9Bc=R-XSTyl9k%s1n3=V z6YS85ZlWDx6I%Pp|5bATg5JN%6Xn0{zeR3RO73tw zyxmQP+!UK^Qzp8$z$RH+(CVfJHZ>TWt8+&L5SkX)5rIt$O76(Ojtt7QrUy1X5VaY! zU9CMTu%m)@H#30Z(Sgkj?C4;kJ0>s+90S#313Q)qu{%z?`r`vTF0kW+QSJmWIWe#k z0y_~VvjUqHR1|trU?+JlCudw{2R0inr-;j`ft?cAsc<00-GDyJQ$rH z7zNIU(FK8B;OSo&*oDDbQH#4MFsNM=jByvMN$r7M99TOnFA2OcxCFL-vJH2a26k!S zE(O)GGO(*)zaTIQEP(yhfnDv{UlZ6hp8d6fT`QWk zc3I%AgN$9rHRJHi5L_SF^`61PjKK|o-2j6{VsK+%ivqh51~&ypftz4(b6_|7L9kej zxh1g0f!#u5ZcQ6=s~Y3QSJQ9vL`S+Mf$?!ku&cXWweAS)_Q39-)}7R{J5vP=3J1Bn z0=p|nPm|J_voydY+#T4`!0v|oJppFnUJaD{0=p-$djq>KsMv=4)w=s};$`a6(f0t4 zMEF53NsD_Zu!m^g!)o3mfju19BQ)>Pz$ox23?2)N|383+vK8iWUvUTbgqS`V7~h`= z?8%_`nK#l;W%QrU=sy$KGthrl^q&jt*}$HI{_}xR;Cbl35E%b|3K=a` zdM%e1qK^Xmh*8wwJ{F-*0{b|yPhkA17=K!2{8=XH=Yf5WmcGzw&X++WD`#8IeH9q* zzX}yZ|8`1wZux|qU7W&^o-_N1%D)#65z`pkr;D^9|2#W9e zRr$xDsjaQxehTczzxj^%hIT|)a??Va7RnY-=tz)) zb|mNd!?RI6+)WQzCT4^-J+v8AK1!8mhIUkFGpT%ZNSlwQdX7@ZsP-|`Zh+LW`f{vD z@#Q#uIgT$ogd?Mo>0mvcXWCbt5ZVc$R+SS&Lhp9?}eKeP+rb75!{xDY-U zg?5qWb8%=F)1nsF?rRQrmxRX0OTt~7)R z@mD>%BxKy)9@>)7Zb!yDLZbvP?+AZir_<`Js8?U5PVn! zA1)Kz#XS<*BVKur`UVVlkA=p^$HL+~Kam~}881(S_IPMdfZ%*m)Se3M$mt>kq4}KN9PY zL;EPSk74~u*l6xk3IADWpM>^lXrG1Y!j%&JJhacfOkafdMOb`8L{ovj4DHLRKwn9q zue?Bk&YZv2_pkZBF1r0jU%o--EoGz9;=bjXcH-ZK#>ejv`+F(vhtR$c?FW?hV`x7j zcVsG;XSxd6^k|Zs5!nph z9~Bw@*ZY}~LF&lJW=6$xy{e9mP}R{<#jG3?p{irClUT>7)g2e1s^fJYc>)$Pvg0E= zA})8V6Bz~0fzr7ma4tds zLDT)fd6AvRhn$-uvFAoMC$hQGC^s)c)8|JvFS7HalDmM0)AS3_r&v+9Ts*do;#fA|jVYc1dKHLgcc@E)#)lk63hfR99!pLr* z?jqG%RF(b4$Zqu2Zi?(C--w%4VR2+PN4A&>x9IDwk=-hec1x7`twncRWViX6OT_T@ z$d*KQI}Gnog*zj=15-%-yTtIWD#N9bE%nvzj_hvF@Sdn~NzUCH**%fnOO5+P;C}Xi zp5uLGj=Q)AB71-u4emjWwTB{mFtUfJ@UR4UB(g^$_o%o%T;{fmdn~fYsM5ndu2Jwr zWRFMo1XZ3?m8T+mGP0+T`RNGD`%Gj{W9*_s-LsKBD_XVoXyl%Y>^VtNYu7~XdCB%d zWY0(T0%Ts)5PFdz)FT~2FGco}Z`{kG{|cMH$X-7-~sHL_)F`>6Jsq`*IA zc5&ZF_B|gO+z*ob$H;z&>__VTq@L`y%O@}WwzbRQ*f7v;3dVLVrLcnHcYSQv#dbaX7K+~uu`P`42KX&X`7J8*E4mwFyU|y?DYl#VkaIW3 zc600&O9DvU65B2MR%?r6cWZ343*NB3H7;J~$Nz2OxFojQVp|foxZB0?j@WLG?G8BJ zDMj6xDe5jM>MkitBckAzs_NabEsgDNguO>q?~U!A*zTq3eX4q2S=55NKeqehG_a+X zsKAuO10wNYY!AftAS50ViHBo*D7J?o@rXz~QYG!q*r2b!>dn~rcxcD989*_N9 z?h~;+9@`UCe^S(*itWkRo`U$(`ua?4PsjEQZ=V(MXUoLv+;g!#2c0_id`jnq*q)E= z1xmgcH-60}@k_D27~4xccv(g5<#^K|1y%0iUdcLiS=`tbx>sZ4!Lrz1jf=N3avAvF#-;gM8#`Z>RZ$j@aiSkya<+r8fxBYO`L4qdmJ3P`XdDnB<#l5F#@qTRY z#r8h4wWvD3s^rRvFVA;NLt)c2@=gr?5MrTuhLCf3Q>-`Nu5l*DEy zc1lvb&5L%bWH~LdQxiK45~n9dEh?Oz6c_peXQQa%rG!yDF@w-eyrN(rS zyF9VWlj_0Ry6y^ae+9a$N7_NPA~tVhbrc#@&$E4N38IvGEgZUAIWg7FC(unAnY; z>P?B=l%x(3TdkW#@@7a@uap)iwm7L=LENGOx2S+8yt}(KXKFnx;E@YKFl| z@L36#ICbEp5woHxg=%1}=M|YqBk@snr2w5H)bwniAVE?5ePA zC`silsJulgPnEl^Z7Z_drDV6a?c2G*iqo*IiCkiBXTNLZ?&|ky<_=Wf(RQ#MOKvB| z{7!19+|r$~8Dnf`8#9Ufs@VR(z=68@VJvTaFyG2` z;1V5f#x(%^@Xlh{dT4m-p}+dqj-QfX`Vj6vq97?%2Q*5^3nG0+F}$l_G4$^7PzR)g zI)l#n8vjFdq(HE-^{v(rV8>VVkmlkX9WFDxeV}9+G%%pi1mCe$S{dk;wSE8?!mYOK z&6T{a=6m_Swf=L+=e)NX34uN-nlybDcuUg9mrbwub@_gN$bYuxUpES`!CzqrQd~it zVFIGbtNBU_7)xWJUir4r~ zj=srTp_NN{fRbs|M(F`h8AdDCN z{S^fsRd`KLt>V4>BJOd0C9rFURdDARqrPn61cKSu^=n!pTpvL;)7;9KG9Li4Bk1!VWFv^;3)HIA(-dZTnF2R%9wuxHX*|xUbG`Bq+ zFq%;E(K~VvA7H|`g)h0^qp9ClI$#Ht_onPfuHW;vQ`!ML^Ks`*gYz(y?8L|LjcfSL zQWk%pX=CjVHg=l(BOG?IKiV!kV#9*ehLzlIUKP7}9?Dd(dt+OH%l6&v&l89z&)Z)h zg&#VOkK=|#mz3LvAbVsw-P888J%&YtGA;a-l7CgnRDiuu*WR|5?LEznM}U27yzR52 z`x^r6Yk#wSOKv|ez>J|bX#CkxVJBHZx8=p-`P*q zwS951w*b>+E~aY(BONxl8M^#C%HPo+6*TMeKB!#Ym$ zKTg;9T04*TT1QB(@%jJp!HRz8<^QAG{XCcZR7?k;am$|tPjJCMOLzQZ-O1w3_5R7a z;V*H+kFrnkSBglw8JGPUAE)WQpNswpy6Dey)z2WQ_4-(g;qT7ip`Y4Z_VfQU#8RVy zS0DiL001;TB!n+@wy*$_{+xg%;aq=ze=fYw6YukM)kryP>YOrJ&;UIuXn?D*xP(cZlKneJ9aZ}nmYelmH!3FXF z2AGYIY#ii33*> zai{cgR{(4PtU#+<>ahj9T^bZ0)UMv$E&bjjzyJ_|76)7)aKHub6;`0+?pG(??^`^@ zJs@!&NL3cedrMW$s`;QF01pW+kevsD703e^7#1y&5+2FG13SA%MIX=rOYURPe_Zq* zFAq@U1vyX#!L37(^P17HH^y&yON zPy$Xy#Qr6r2LKPi`b9rJ{p$2e;0?jD3_VbCuX^6-_BBBTWN%&<3g!)=1^^2*gBgI> zTS5)kThM+Rg1$@N&IUbI-wEs;U-jJp3kNy?+`xNO1uqZ?FYvy=0wwoh07f7)bsio7 zHo%W6-?yI#A0Ymp2H*pDRSRUmeU{1#IshQR=MVu5fXH8f2KrL402){eI0B>qtiS|- z82Fk}fC2I#0!HLEwfx}Rrr-nU|L;`hd%*<21C$(SfbRnLqZIT*+BaT9KcyUj0e}to znR0C*b*F})0ssSy5+>k?kZQF62Y>}Y5#Wp;tFJfEhvq zl-x{JI64Fk01yDqGyU}-GL8@y;8;Da1swnufO1^)g9$jEYFz*40RW81ZIZUFrWb_;A)it5CBf#8p?nOxH@##sTJ3zO7k4APdRe=4>DjO zj=C%+(fZax! zCA#hB_8+!OI`q{Yy8f3g?o9cYZ~aTU^~Z{3xBeXJhTQp6zZUF(yH~XD)4e}e{a7>c zzaRd;k?CSp;Hn>s#(nT;Js8b}KX?7b`?U~B!l7LLL*QXu|8w!r`L4uz#P^U_#-ph) z<$HhZnaY>1{F{G$<)2>oiy6k@nUE`gjfiK%Myp))m$>TZmcKeox%7X*7ke>m9Ot;` ze^Gb+9O~*hm;FOSJYO#@_x-@1vip7vn52ERL*Kn7RlT0d%q{i(Y_f3Cqq`@OQ1Slst@h0h&7_x&Gmh5unl91Yj{ z+=GSO^rtub*%iK5HP`x|gz4!zMwJ`>JlFgkR^y`X{wWD*Zu@-|F8k9_&n18QhWq`m zP)&a>_TltR+A=QgDex^qa*I!0s_}u_{;vfiSdq?c%ki%*$K5_$zlUoJwaa(>&D`;DNVKdY%fmzz4;wMEtzRV1HE>IrW5J4oK5YyUhK{|qbNF(Uu~K#^PhX`rLH zY?~fIak{^3OWQGn3L1Y$@zcldu(YpShRTUl(Kpq%CC*e=lvy&^rZvr|1iU0#<3m8xW z7y!jns}xV8yzi#db)(3g|LMB<2R5a9O27cT=f7u0#k;)NAO!LN1X8g93Gn?K#6DL{ zKn4I7I1eUs#AHsD$y`o^t76X+jd`8L1~`xhH&E93aPR|A1Tt`ePy^hciQ+|Nij1m@ zz1*XP9YB7j<0V23XgRpF{KTUNl&0?T3}0Zpx;!f0;#&f8AP;;XZAlqP&|F3m2t;rd zd>4rCf->LH0u@|cZOJvFaZTrzT&ri-R$B5KAq|2G(x3#=0E!Dm5e46%!Z%Qu(+b~; zMS!vV9n6i=|4o7&05}-seg!x1Ta{bNg3*2tKG09nIYw{= zkO|Eo6=(`51rQ6zLFM?ErX26D4&gOg*n|_Z`(GA0;0bu}(5SeaEr1kwHj8IkDtrr0 zia{yJbvar0jo!3AO#1`;8dXviVu1HpQ$Qm zmc?N<{tB&-(gK)pj^GKYbDTaqPhf@0JeVUsb2^I7@SV#;ohr=Z4!KalF0i51_3DKg zc3~9Q1r>WxxCM#KjeeeM{Z^m~pcKF=pux*xzzu*DK(xj}M_ekn0uYDdLt3Zh?0VH) z;VHp+e#ZIA*m%abE6exRz!%urBIrnDSRgC|D25jB3vdBN;IRbkZKarN%ZeEdiU9ya zrLotG#`S4qD;_0?hJ|zs7FW=Q%*$P*l8d;uUKB8GZjAX1ykTc|lh^@l0OW8pjan>r zi_7fjhg;OOw+iY2uA$Z4=9?ocD@=o!-0txWw|DB1JA`nk2zjSi-}wt6@A8C319Xta z*x=sHhqXAZ0qXz|A_YExcPK9M`=5J7<6dZNt>U9WK7H zXFns7Ty6g#LMM*@QSLu(m|?a zBKc~DcxZL6Wm3JK;Te{UzY(@Q-p%RL|0|fx%anm(;J)# zWPpfi03!4q_`~-CLF@z;0x5nH8Uo-0`(sJ*a|bEfbn^`eqAdXh(F*o~m1mmnPR>4H58f!Ila2We5@H6IW<>!Zrc{6s%>W_b3;^Qj1O!A0+(UNaa%@s@ zngKo>=c^u{aN+{)0Wib~Ni!e_s?HJ&0sutGfnhj_>+_%%Q2{fYoVeLZ^~41T#3`N# zpodfSilcx85QJYeKtKS8I2|G&9@6dlnduuK58xoq;tlu*UY?y0B_O`%>Oa66&JoCg z-E9I00-OVSn^Tp1USjiL+TegPFtpAH1aI)LhEV_^o7{gkTIgks` zSil*m|F8%PDl7xAg~J77;PthT1;=omNYsMaaMz1GxCO8b3n341f!%2`BDYbds70xw zfGaE#Vu4doO8ET=PzC;f69b``wH~BG`U;Q&|6j~24%~gCZY{q8sKEbk1uWt(FpzZ# zuhzmIyW0g_u-lRKj&kWc6XXAPP})SAiE&qAcX^#J)tJ3Iv89RKjac`nZ|?8(HQqRi7!7@XV4J)_6ZCiYBX&+_=W#Q6Wy$prVj z1b88_=M#GY0bW$OmlAt1v6m?KvIKZJ)xX#BD~Y{Adx;82*fzeJ*s{c4rQmC7?`yuj zgL50Z*G1-y#9mMA4c@+)*qi>HtixMLQ_;Ph*jtIcolJA@Bv`0-6MHAIcNq=uspk8M zy_eYg)cinnKVYJ zet_YRV)&yNVrqVp!hTAvQ6l8R&wB8)H0be4zBAhLyqKD|HXQ$a$sLi0z!7=hMn9;g zh5yXXfpwyv@wFxT8h)7`B;tI|jPP zite!;=pL7+p~vU#xV#;oZ*?a?-Sazfqm)Y}>XPt!*`4FOM=fM;-Hl(#bw@JtDKrUXQDXQ|3r z9a)WZXL|-)yL0gP^L9>tlsi`x&db}mc{>jZb3|cIhbGQd6X)e^F8)1DJU>sDUmz`A zh;z@qP~I-gXVDE)+(lw}QAd`v?&7>%?3K~ZTW`HCQTW5BLTn@~7m34->?iYfBVTWl1UGe%;AYPf5{vzZk?s~Q zi#Sis+b#JFig&BpbX(qT#eb(wOVp;@^R^^!w?pv`QM@DTuRA5(ofYY*cbA^r<)3(A zUku#ReB&}Uk$Q1AjlKsDK0mOH|K)6HzP|Q{cqO0BgER_Cj-XTwLVgLdkq7@lLIsj6 z#FJ{Ph?%)da;}O6%Sgq-%$zaO0L=`GX7LwGG14WL+~hoHW|OF(bv`P;slnp-#DHT# z%v2M+DlH(uEMK{*$9MDtK zxmRNmKp08nd@3nW8IaIV2c(7i(R&__(F#W+3KwhM21^4Wj4qL+L|_~IMv&awV>-$CA7G8pu4V-DZJzc zLw9gWcRdKKH#E%XN?MYIdj)D!>q%{jK0GX=)ospNvjwtlX`~6aEh`fk zt~N3gPgqZiH1eoXkGvkv8R?oDHDlDQ!nNJ)zQfXf!H0NF|$+ z4oAT2E+_xwFEW_HI^Wa)EQ=i6S!%k1CHkcb9XEC1BZ)b9A^=ubp7?x)&HpAZi{DYy z(|(_kgQVNUgmkCUN@=FDO8b>QO?gN^bA6 z_Z5-IQ7IB6z7h#ic(l9Kji0dSz_*SO>I(s16rDjfs6ESAnF^P+js*9`OT_&bqgCTI zmAC;^VW)83fr)vHJ`3BJDh}V1H+U*bzmHSQ#{L)ADTWOzelm% zKNzmDOOlUt+H8W_N%297SYJ=+J=nB!tOC>H`U% z6J}@E4-($Uk=Pj$E2ks|KtdT188q}4gUVK^D$r1%e;R#AM_%hiY1ebNAUukk;0(zx{PK?#VK z;xF?V{t^wd*-_p!a<21x6zM=;jaK^XX)SJbIL<<4+l zWDtGC8nQ|8gLDN!oDst!Uzb!nRP_tUpIAVu$)UZ8+cM*jbL!)f=vfBKtDsSTihz@w ztWim$^R^YQ{f-8;d6e=Pw@q4zADg(*jmkuAv6dT2A3e&py#QF>Hnv^1u5FLLw$H?c z!f3{X|AC2C_d7cD_vl~;enRH={F=lInsMxfcZBJVQY$DKAH(1U+llt{OSem z_Tc^IU;T7}|2YWygZBE2R`h5&!dm!dt}W_VKWk;H>PTo+H>MMi)<^*A!>jACWJOt` z6&2(mE7rXo8>W1&q#vBfR9Z2cO2x;e__S1S(BD3t>m-)RNRug74kM|v=#)1p(l5N;rVEGRxG<@4rB*BhtCP_SUdVQ6{Rxzsef$@0C~3u|RBb zmUKyB7C4*IWgZim@0=*vkMu4Y8>pYNth#KpX_p&S5{gn#xid3>_|VW- zja`wh@L*(Sf{2kmlP4aJtd+<=>A@49R@A3{P?=sl@hD`XI@2=Bo$NEwa}Sa}>G1Oq zqthq-5r@!6CGSc#QaD&ho z4ukOrW6xGc8Axi>UG4jeAL+;V)uOj&V>P2_?Ww^HoXJ)yD$9BpstW47>$NsKAy}B}L)#i*0 z{*_+sh~tL8>nJ7bsD|-sDWh~x#=P+MeIl;HYPM$a!D)yNtPh9 zlqL_?@bVj-!3dK6Xc%e!ZAe9s^{G()^)RSySQRA3Pw-kJbGU7!!REiQ50jqQgxS#Y z0*FS67=N!A?>dZen?QGj@moSAwp^QP&imSgpQvqYxm0Bf+oByPcZ`|e(ne0iJ=okD zTV>pfPxv|SOKruR-`e;&p-C9_L@4f}pYxtwb4r&?n%1o0@3~;>^-UQhx8B7Z*GV{i|4~w4l zz(#szBvUBS7HLUYkV<|+{U{9yy7~DF7RTP2wSGH_yVFpdcZ9}uAFB2l8v30-P3YUW zF-ASfeq#ko-d8EQchL&u_okRMzXHK_xb~-O(R$~jB*r*L|F5b|6X^<-tgtK%(`ryS z(ygv$a_EAKqsq8A?QReQ(od&}xZi8o+O3ZK>{_DIl(W3`zm+i&PiA!+f+vG$>+@r8 zna0S%KPX%uzXo5MIYi@_KDO~Fel;Vg1VMOXGAx^&>ublP!t9mYh|F58uX&@n!jy3% zYHbADq_&tTvjLN2i|izCOQ`#~)534;1x%bqYbv>|(CbziZPcezzHMx4+XkJ{Q_L7m z4tk2y2;b^aOfdh8d-{EiM8B^wJe^>E09Af{i|Sbu`K=8}_FMaH=0p6BYQIaz)bF)h z+WA+3T~%>*W)I{;yIR>Kr6X#rjTOB=5)1Li%7}uQqPsebs6R2S9j1xQH< z@S0V3cfRc2%Kqrj?k`QR<%o&+3%{~=k*tW@gLivy2ag{1v^{LkX7^W=wU_Bb|SkArA+f5T+%OP&1`3t{`ECKCm=Law!gU<|hXSq&oRBO=EBDk8$iL!^=) zl0o`Qc8Hb6x(SHk6BU+-iI|u!EsFy8_pH=E?CD8ZX!0y{b& z!C|L2$1)TBL_JPP4+)XzB<1ntw?0sUaEVTD36`KPnwq7Ah&HS9+mrlT#tC5(d_KAJ z+u1?mn_g|@{D{O;oT8A4PP#iya-Xg+3IZrP$xZx3+Lr`Rq(Trj!RNDrNlKi^>$5vE zByfT&!YptiBjxuaqY0vD{MgGfM>+E5`oxKI0-M`emU)up{D9<&MjS=;KxnkPz>C26 zyHK$rQ6-RK*X0FLFwT7_g)ez&Knz8eT`}#3%N0UV&W(75f+^bF{IvJ43~au_CO{S| zqoZBbx%U^8rMNnk;u-~1ka2NWf+%SEbxOKO&_s#Y32*kU7wFteu~5+y#87yX=Lf?g zrCH=jEin~}rnnI)Zc3%NSxFa(p8#;-gEkg-mVzLPv^#E<6#8kG+Z0eivc+8$KEX+O zkcLliQl83jhvdMYyHoKK?yj;F@L#G3igtIm;wE@eOK^pPC}43<=MK;+>rK*qWv2Hl zvVxe3UEKp>`k)dh5{>nBW0$HR#xsuVfvUtCwNgyHbw#{6sqxf zN2VBbq9>jR6h8f=SP(D4;{OyZo=#ajEf$$&C7$9Lf(r(ch0&f>;6%2%K!uoz=Xqsm z9!6f(5>!D51=j6F9kcMk+y9poPocxCmlbUBN1Zlm3+0eOC3OMC0} zECC~6x4>Qv?2U47WdeY;@C>d~j0NNSZADqw+k`iefDw#EKx75s6kse;Ht&_$P~m+= zRtyPZLM;3x%ZCcHAjG2NIz(4M^OL|nsRUGfnwBM+;#0*`lpLWIi12w?u53zvp%{zo z9Fug63b06%FoKLj5`ru$y6u#Ju~ktPJ&3Y^uMe;w)Iv!Y{h@(03Gz)T7t^yyRuO_M z$Si?}lPz#w*FSrmj3)GgsEh2lb847YKSJ>r*@@>gpRSQN)57d9=*SSp(-nJMo5vu_jqeG+y%x}o#Ct?E-Mp=Gvl&Nhb zd;?&Hf9xM&5(wg0=A$@3XrNSrI2MNkQxE8-kc03|hFvOOrU!nCd>8p8I=t2Aj{o#L z$ljO#>ZY(K|3>ofAl??1xkOV36Lq2fGNk5e()kmX zp&>g0G=8CeZb_%~H z&={uIJ-_}za*cj8?-Q}Z`V3Ct=@)<2(#%y)kRGxS>TM0#u>kb?@Z28(H+MP$hK>&1 z)dc7afa!96ipo~4(piln{tURe(;2W%fW7EY8AOrgoDSH!<((wTBI$%Kt=IGBw48RL zv8|XM4NSn98EhK@PtGO+HOM`o8XNl>{s_3l5%A9+N7X~%jcm9O&9sFEZ-Ny5JfPWa zO56R(Z^>;=gE!9_4ACuY3-#HSs&h#|GKzw0G?GzpB+&RJqjW3J&7TF7aA~&T)S#(& ztKZ{$ucqAnvjR7Y4)s1wbEhK!`022hRev-+JbGw&h1?)-`{(k@!i{ZVr|9lVSL}fJ zKDfKt?S%OLptpn@Go~v1AM6kMW%jX|@EwnO8^638uf+?$8^8a(TS@1-{Gj-sGU5M> zES&1LsA>yGx|#dZ+$o1TqW?AHM*B#kURK_CloUS-ZsW6~n-=#s z%Kc3`N*j#A_qBZmp5D)k)@u7%Ysu~Jhx7hv(+`gPq4$N;MER?e@a-?@AI)|d5Qi-@&A@nQ^L1N zY|@Avo<~~j@W!^Tsbf>Zo8fa?8r|L8Il6mlB_sP0Kyi8;9kD034!7&C-8P z@~+8AY&38~=#kly;N)!g08K2=DV`=#+uFP1X`Cv5gB(mjBY~Ef9{i6pphO56%j#FIEr(bpx1ft(h)dGajqBAVq)oUhv89$5iJ z8B=RlL}fyGw?a4R_mnHL$H%?6mx}kPV%diPfGGE&Y^VD>yoq!` zKBQP|k-&}M;lmw0&i*(LSuyWYNJN|p9zIqs=F&-^ zcu(#F;6++$AC$YizoN8L<$5PVa(^tR!alBOEqm|X3TgGzGLN!Tu`5mmJn$iKF1~=r zm*Vkdl?Tp5%HwN=Ym3G=K6Lw=U-I}?(b`hMcV!;96W=L*dso~Gc;HOnX8Z_`pTy&* zDv#8MKo{PL5DokU9!?FjGZe-4BSrr-qC4|-rfD;Y^MGfO26RJox zG-SVXU8>CM?yNR>aGYJ{goZ zD^^^K)Z&!-E%G;r4(C@hc;G|DZw<3haeco%OBBzkjSn=xBP`BWCwe!rNW6GP_bw%g zS4_dulx{g>T#4e9LH?f3Qs3*d#iwwk`=noj$L~{ScxEmDI!Am|^oc}(pbn@9Se_3=DK<@Y8 zMfXZbs`yTVE%Vx|Bb1y#a+1hrgPe#(Reg=`jB%Z=zpn4EBjOthDkrAAX+33-e^c?} z*&u#fMc$^0j@jQ)RJpyw;C)xheNR#4#FLkZBS*RKmpx<#?+4QEhl(mEj-0?n4c?EX z-A}Tpa>bEX4pC6%r%D)KQRZjj`WalYBbtsnXZf6Gen0sI+6K1TdYn12;EesQXX z>epf8xBkO7K5U%-eiim3J3NQ5-}#{OZxvMDVF0rsAX7ZVe&~=Yo|gQW4U^FdC{G9Y z&lp<igi=a4-j;GDqmZ2Dxi#oVQPpX!?u@ogJlMazerh zUQ{-D#fQ&~`njVip6*E%EIuUY>W)qM9GAt2vnN$dIjQ2eBTyVdCn{$=LE_{Gjr<;F zmJh~EnVux3CyQx04xFIzG!C37aRr5+3e(dR=j~39s_x$ziUJpR;=pBseGE8};Kar# z=$o>&c6vmbc>k8LZ(_mE5v=G(XL;zLA%+NB-y#B=SUjH&;@~UsX;aFNTZ*pFlqCmun&-zE$M5E zQ$%vE2l8V?k5>+#&rmwtW*SzdSKB#2s@-amJls#P$6yzMof~O<3%u z3N0qkd#Pf*L5VBF{Gh<6nkU4CFkK~=qwNG3Qr+h_xIY#20mXNhgS~nAU|G<#I3eB? zC(Q|&=hfT9ct5O2?~($(dHHCyxbN-9q`}9Pik|%Q1lXjld7|9gi29_0zO{3EDr)MX z5b&pzjDC!JMm3*R=r_^c#MdYnedb||R+u+2Hd!+I?0Tg#A_(M4yCT1N_wz5zBV!lO%;O}GNcIBw&-LYk6 zmGN+#BspH;-~@t~CCP^W31wm@Dp$P@vIzg46&I)agU6H7G~R@J69RrRftAF5Q)71A zVK>F{b_&tfY;2XRo?!3dTYkfOT3YvX<*X+VoX|vA5ePms4oMc8m`1_KM&4ej&;Y=3-!!Iodh9ly=s!M;P! zj#lt@TJQFlZ1zKfk)*Zv_3l*QH?iLQ$cN&?3FPinZ)v&S-AZe(nB;qWq&H#S)vI9U z!M#dzFK_R@@;o5Y`#vSPA48}&GxEVKtvy$fsq!B3LA?kyS`pu=aE~a~TT}@8ew2Ce zm@?lJ@}2Rj%mV_yr&I#Je=!e;0)H~j+{&lKndomK!k?yv&uBD0lXWwrwo~wTt5V(f zaD;s4$Z?-$yC>?qy89cQ#(#I(!oKVS!Ix>8AkizdgHZ4e+d-Ht^D*SF>eZ_Z-q#cc zuH^T=<-~x$5f|J2G<(yBjPr&V@Tr1|{;$KoQ(8oTzaMv!?gO6$zbxH{65+#+(v4O& z{Es@+p(8(5Fu1G-;o!MSIQS^S!BHil-(<%B994cHRen+KLYhf9c-n_qIQaUm5)MAi zTcB@5?^`9sCl@{^3!+ENH<94qL+=OC`=Lw^OGNzlk8x$A{gY(>DV1Hn{sb$^{4A1f z3Gw09mW(1Q9Fj*Q#D$aop5Km3AUVwkdr}+`k4&<9(+RZAD-N6|(-jR~eB1ZHQHtf9 znPtW&WK#4x2ZWOfKU=wB@1wyhA|4NQ;=!{sg|djmh@X(8WitJos4#Jvz**u(sQ4^J zi;p5u9B#9H_WRjLe~P3(rOXZKPgS(IY!Q*-1!c-Vtr91GMp8K`In%e1emqOD;$m~Q ze}d5?KAg9FJ*V7WBFFhH5yguWIo?9#I1wHcd`hE{1?9F9Hh#4yKnOVxuStsOkh@m&2qC{#QRLiMir&Hw@#E0DK^mrg zM2stJ-1nYOKZ%3F;q#5Ea+9LTi5@R0<-H=wRmykp6~s#>jSD!h)r(t_R#My(Fg}pc z)RrTtyuS9aBpJZH;wt=Gp?bHt{J61A1CAARv#8K5oJxNl(*p#2_M_yj1SS?-m&PRk z-DwyYeCqR)@RID}R^R>{dW{pUk`DihjXTY$C5c<~R+h(Vzr&+?b@8 z<5q4DwVL?*!|glWAEK-Vs;feg3&if=A_aEuV|@Xo9`S2K^YScmLAcsMy1tK9Px546XC0Xl9cZt{PQ$0aggyV&K17vKw_OL-`K57 z(+BGW$AcwHfF;)jc3eHXiG`a~ToYNOi$8e%DHLqO4y#&*K<1V)Rnl*Sqa+Nh8Z#FI zs2rLtHN#-&!N(=H2_kP&mUskf%BD1UGa~`MZB|`QVqnOdr{i-9X3ImPHMYAZi4r@q;%D%Tt!2r!@qO0JePnZqt4DQUi#1tGDUCQWz?a#f%yzKZ zZfNMW83Re)zPes0$F#qbEC;9kw$Zqa1X=0R8h%vo+G$ided7zkfQ|Jw~u#(1@sLV&}dEp0fi9t+OdR`DgIyhJFj5iw8uA~uNUwd{KbokZwq6;msaDUViW%`S} zUX%$3t^D5tH4udO7VF9s*G33;u;9{=4FWbsxo(K!!^ujn-cNQyUCI#}Y2g+BKhoX= zPRi=a`>&^}dZQbPBz@5pjuvD;63pY!n?76xSGI7PDy* zw?wi?mYKYnB$G*El1Va2Cd*9rRkO@wn{hHpW-{+&;{W?Q_dZWmHQk!`^G|52>Ur+I zoO|v$zjKbN#n9z6e+Z*|2yaVRxlH-vgj~*4GL$I$m!8ryB41WRk$~=4j0!NVRbwf# zv0I+Q#6)?_7N%~MaX1TMIxU@EmGw*P_~G51&lcMHpo7A51S{?_&4I=;1B!KbK?|b= z#_}9MblLi3#&)qavY^EbLv(R@4hub{$w=bzTw8cDsr-r7KpIyhW}<>UPNk304*vAQZBC4vZb9r(ku<;}1 z=G~qQ@WcQZE0R^=$x-FKd%yj_E^y^XiD<44PZ!XFg;2?bF~*tj7&7U`T;qiN*&)qh zo|w7DiezJWax72G=|1r6?#?e4lfjf6jBlru8hL38wRoMdhMuYUHe0uCaosYvu3f!q7^S;G#FY#(2dfkj6<_&oIv!A z%odLZyUwbXR@#QQCP{a?riCy}T+Suiq3rpPLPQn%9%*^e;6I5hzZ^J2D7Tz$6jb z$^1F~WY{BfLjB38=Scq2^m^A8p9w4{0xhQp{ru_obpBL^429BDU%zEir?MvTr~Crc zsZM>$WIau<&vu?oXvnW}lum6>9z|nO+e2RcZZJA(D|62u^O`lo_gkpK_em%p-*l|q27CCx1IaE1zl*P3%X9NxhpAa7^2pB4A>Yj& zFw?vmr$L9CygYZ5>sUy6Fv&CgA?2eZzHW+}T7y<#Eb0!O&JobzritW+^0G5vsEMi2 z24#ozXEcOn$0yYw5U|MZ8A8uEh-z+g52r!oMmY1e5E+dLTDprvD~ zj`9^sw74oYKTMwCY`BRH6&T)5+I%`~KHb_Jh6$LU7~-%6!<4V1AT!6V`7>?m&diD; zf>h~I>(|-pFPYanAbPM9anyOTf#w-jkEiLV0NRWB&W-snKXT`a=?KGi9!5x^;LS0? z`Gl0(EFL5zxWHWy6I^Jlei~*froPx+EHqy!roIF_q)^b8hE3B_INE{zE; ziwQ1wm%Gcv&x8b5xGPGJSx>Kw39iB<=}Iv(AptPHnBZ!6wPLg!@Y`cb(0gvXn4FOE zT6b+s`EvJif1SJTfWJPbtP!B)dNDsCB^bWgsvDT58&)K&Fx#qFD#aH&d9iava%@~y zH!@c@xf|V0HNVT|Y8Oj|3AmYLH?K&R#CmSwksmM&Gp2*&FzFhM}^4In}G)f+9qgc0v+sdkJ1$ANwzm1 zOWb4N3(?MoQG7yRLV$$0gjL~hZ-5Zm^uNO}NuhI32|lR2`$OJ$CT@R%Jrcnh6H&r< z%N_{?AueKR8Etz{L*}PLo&yO+N$vn+zp>t^rl2moNl7kChyX8W2FzCI1IlEh%JaX} z^S_dX5{60Q?L!kksK+1*KPX(G82s=!#TtG{VP3@LcPvUy0Ay%8A9Nvb!;jGHk1}G5 zl4AiC+KZ3LQiKK)abJx~h!ycQt%$FM6_K55)DLVB^Q1>aoit#q>wk)^_`2+pWS#U4S^-{= zx4ZneG{~R@NyH<*5b7nIbl*`0-=XVv)`2AC!FR!`eow9bzMzC)2SK`M;r>9arcpms zo*#xr*|DdoA<|3EKO4sQxx@i7e2#o|v!rJg;l<37ek>T_5NJYb07&>VVF^Q^7eIt@ zTUZkO?*%0UL|8dE)(b=NhqR%){C^8GSo($?6c{5-R>&8F z3|3wQGHA2%f~J0No~ggxpn`i9@g0Stm63=v_-|8TvhkI3k#-cxXb9iRiPrzW*FBJkEc^Y*sT zO)!A~2p^>>kA(-1%RC8qAez;@dram>Ltq1`6iDEc0tO<*SEJvNHk$E$ifU|g?dOZg z%sWF_?`kkTQi@&vJ*xU?6_+9c@pc#^%V3%$K;V1wr59|GyibjPAAEbi^7exlBro7V zaDyLUB>z&S{FUsFusEs#2c%IS42{x~7~A|PTM}RZKin`-00TSB^2j*UP#>T`>&)Nq zX$(G?z`c1-+!!Q@Y2X;pfiZ9lP{EH24LDt(KpM=#_*5R(0H0Ry829OX)dK>wL8xN@ zDf+Xt{d0yL(|mAVU|w5GT7|@ngQ2kN0I;8(&iL6be`a z3P|!V*VhJ6z^^oP8GK*|*uaKe&>z8pcG-=6Zi*=b{#s>zJ)L^G_zl$wtnV8F_aSr> zcdt_fe4vGvk*xVUh79};9sO=t7vD2v;P-d{MiAWK_gP~HUA@3^rN&Q z*4VQ)c#yg0_@Wwq97ppfs_CbpU=V*i{u%lIS;hT};DA8=YC`-`09k(5<0%Q800{n>-0R+_er7*ynFo2LEK!An-1iYfs|0f+KvH}47 zqcxf^GWjfwOe94wh!pJw!IB5_hdD}tmV)}by#VSDb!dUI_8APuR_UDuND+X)NdW$Y z^)rxP<1OkQ3Zd3H3vEChQd!F2;^t@oe`O=;{49M6;V`xCGK*aDib0 zfCWB)xCJ80lZ80~78J~=>eT^#1@7|F^vHx_^`F%5rMAW663?*I9B=I z)({^iMu)L+dQ9W=cmZ=!@PLmM0wl0;oSsx}Fn~`s#e&Jk=_!SGsjmo-e;sar7^lG7 zE>LioFi7tzIR3qpj&T?pO?tNq2W9teVeM-EX?5x8I0^I!U|`7kULgdvn!yIz@V=kn z{VZVXFucG5KOkfv(Fs%_xWM-d7l={3feQf%lJEbd!}}q%@k4QV|5}Ja(1I0!f@J-O z(1O4L;W^cok2Vaip#{|jkb*g%;sl4l36c*~;Kv0FBnX!fff?WTjE4793Y_w3!32r> z0wl0;ct4}up#MMz{vEkLt6D!>Uxo$GFefc*P=I))TA zJOU*6MZ>OrDMgY2{ri#tfa?Ve#1y^(7HI76SL>q>6!2>XL;J@x^FIk3=>Cb!UsvXD z#4s=z#|sJ=)&$e`Er9{0mil&@5l|oq!S9d}Kwy#q0->M+{F%@;G&mvwmk0?MmPm^I z)3NoOGXL0MfInuiej+rWqPzSA7%lKWir5ACuRKd|zYYL@Rp5T0{1oT~22<1a%dlX6 zWoW-&Q3kPHM5O*z*gvAXVC7zL)ctdd_QH3H{aK;(W80U{tJLQi-#%5<2k?&)!TbRL z{7nH2iE2sVeqcy6mA^}u0>koqYhjAaq~o`u|vlT|oLM z7&srl|Cbj2DTb3#5E#Dyk$^AOycd*gZxM(eSU#e$7ODSs!GS0ZCR2!%eZunr;DgE3 z+dJ)TU@{fBrM}SaF4EPzkuU~&N7j4vr@x z)IFemfJh>;uSReeN_a!P1kinNOiPHP`zGZ8*$3S3&D8m@ay)Dhov;)iDY{31l68Ud zvv~sC_ZH#%z*!3}mm>RMJ&W$KG#@AY1TE~c{>$R)!Sp^ z$ng$5bLI%~La&|zL$zPnK0*6zJ-@3s*qa4;A?gdDzEZf@K%}! zsPBV<_6_+DX{0_>AKSlH{tpZ6M+}$J`;?!sGc=yE!TWur7$q|x{yGTjVv@Cmx%q(o zXeU5F;CvsWoqrp~ee7>PpaD9KD)(Xt;3q>G)^;$vt z5zyr^Ytug{mW%LxU#8Zt2;E20PDOqJ;Rkz4t?h9j!1@973pO#}`?$%+z%Fp58qcrC z@!Umx7dFc`wOPIup?!e*(#>Ln`fUYt344_}{f?^o&Zs&4t{{FPi5dX)`JUps2(0vd z>oHY+KkYMbf1ubedJE)_^t}T6@%2YcHwZu2RzvSS$AJA<2tTO~L$N<8x}Sh)bpEGB z1c-qAekz3D27&wFU}J0-I9T=Z=M5G9qUe5M`F=@-a#shwkFUQX>#vm+I3M`Ff2BeL z@zpDQUI;!RE&g2<{w4-=*>Es|&+vPx902^@?=2VjJ*p$ zd+CX^3k)9z_#b2Z79f0KA{cfMd>vr;8hGDc1$GIe0%VVWLi8a;R`2%W1ly+Jb_4M3 zZ852_8gfVaW?u_%KA?R_iPOQoQy4xSq<6I#z(aeg!IA03PX0E zq3Wn@7wA6pu=ls%I0i5uP`~>X;3ew;kiHHeeHj_G_JQcLtl;?g`d~}x^S07K^C47? zXg;`DRrJ~xlM?~zgBp)2=AjS;W=X*Hm40T00O<>Z0KCr-eo+v(Qqf@E)Z)SKy}9Lp zuze(3CTQOyEyDG^g@=Inc>dOw-9q$r0O(V*8K-%C2-=4l?J>Q043ygAEkuLqr^>xK z(0<*W_qDanM*$}Vp_Fhg)pr)li-Q{TAa}@e?u%4&E+5?B0Wk!}n9FlBgG$y&W_0dHYV5n6#H=qPNom3c{CJmqML$-t=p9% zhhZ*`rQM*GlF!f=72nJ7oA=O~KU@Th;Xj;{o$CAibSpJ=EzKp#z&yjg$qlAgY848Q zXCZWbb{X`T;n8Y-4uzWo%prdyUk4m+@@sycn`hgATn;6Ct2>GdiRhpeGe6Y5!0I+& zMNO)<1L)f314Vm>P55GR;k>VhaWGs(#UD%g2B@g{CG=s57-g$~u(Iy>dIdd(J$pi> zm~-A9wDU_N)g^qeTc(|58RY^wAlwL#EXsv$-mR$Md|Z0Bm8N&2rjuh$JyO0!k?tzD zYQM+lu`91gCMk0d2sDOtl0VhDRriH)z*pR$t3*{FUXPV%Shv|V^zC#@z19u8wKcyE zXPN8V8eAaXaR;qO!Pe@|5Lk@z+i`oG!x<({{D#JK;zx{>nf@GFZa(~K{#;sqZZ<}n zLK)|wQ9G~nzs5{#Cc)+~hV6JgKEJfrD!qUr>dr7?0qt_&7jYNXS#)XPh@esChl5DChd7Y z9|$NwCIvP7^4v6@K$uH%VbjkRZje~JA)3FM7{ zXNEQl#FgKNkR^2(PkB?L>sRs&pjSUs2UzfO+Z~X4>j9lcuQj#CSOjD+FUye&Izp`; zV288EIViLp+ZN`gHSKklgx8c?)>(t?-ZbnfV@3v*01`*1_M8YDwC%sXY5P+Q1Rxfp z_yd6tn;-H6zj5<9#A5vmX?%)BCF7!yZvd71Vx3>d#A-~-zTO{4YV+IKfW)!Z3UC^# zSsJPVjN_J?(#~4VW*3ZLxox-?+2~f7Hu_^mhgOBcOwo=Gk|k^jRm85-OceBR*46Mom+-flvrzGlB)XY_dO#GHMuo79rz^ZA^nMw55O zU~h1HQ+jV8XVw!G?CQzcAq~p)*whW~Y`0-(EE>R~+C+;s(W0~i=fMG)$MdG5Ap=@o z7lfiObQi`Uy$J6(7j5t_qig8U-NiM3i8c6=bh6m-S`%ACMs4sg7nixM?y?Q+X}P|+ z++9)Ao=!8NE!PZh3z<-n$4phX%~dz}?PN07oi&eoTn7sMcsc!ex%$ES<>z($yiPy0 zmOK6RWHBF}HNS(&*b!pxu#YZk#rNVG)p48POVAcnGv-0zu-+Q1cUP zY9@r0*yMJ*D7V`)wezhQ;8Ftbb(g0A>?yhuAyeFBI1QP(AHv}Fh!ZiGt8JQTV0xzE zFUx)$2J>+k90eT66h}Z50bwI2GM%!f8^&43Rv!f!qO*eEtRz4=Yu;HK9rMFId5ZT| z<}4Rre;C*sd(j*}!F*>~%X{#hH5Gtg3EpB9+MOC8E*6i6RxGUdwjCN{RV}irEPg^w z821C5I0<5q?_?2DkwxPnf1JM_Kt8=7 z+;dPHU_P)IK`LUU<99n-)x*@i1`cCQ4boF|r`HFi%dZ{G!*;B7>mq-G>)=JOcxRTM zc}0?O8#Lr>k#pU&{(MuJa(?rrgNzj^p4w9!+mhko!40DX1BRy{Fy(W zuAA53s=pAiy#aRW-KX9QClwfgLTCB*JS<4jy=+BN1iw|r5!1!|yjVXOoPBw?kfOUp zKf~(o!ADoG-%3j^bz2}pmo_$3PP)>DHj$>HyE1L4mgQBpR<;4^*;eycvn zqLI+1I5;n7U0%n!yxzTBKDZj|1jduqxr4#U{0kS|NLuH@TpJ{cVea(-w6oJdJ79Nq z39`-lErQyy_fR8&cQ%H_^cU_gB9dmeHQ7KrHGf-3y9X!2w~1}BrLi{wsS}%$K%Zy} zvS!PE%ups-JczkEWI7yGi25YbIRIAOG8|ey+)v{Q7Vb!d4--Y3CVDm< zVES~S^q=-eP~8mZo8klnIowRzVt&krp&Y~>1n?RjuGn|x40_G1>v%Kj^om`$Q|pB zi^4sua@>-Dv^58Sm8KXltXD;WVdKSsOuCrSpXKCQ&V?&@Y!`uB5n8sAjd@bJKq#>U zqP5bUQu8|bcvte5g#yr-pLfX^wk-?F10K^1hnQB@cXstS0k^A;)n0II*s#Hp*%7|9 zkb`!aNlTSAkElXVN?a)luB$3oe|VxONrez4soS3L%aZQlJTJJCi67Jfj`c-JK9eC} zxPc6z+z~7`b|Nf5GGw+II^93k9mEAy5W2sf#5Tb0XFEH=;)|H!#sUuXBUIoFn^v>V z;7CV&z^-t9C)nI>pJH>FDcb?t{alJ*>6?AX0*_076)|8%m>EWm#Xl1iF18n1`~|mw zgIK`y1=<0Nk{osyA`Y1!%+4Sh*okOhW+oaSpB8_}M^Fsq!vQAw(kMu@^F*E5JGl&; z67Kvptk4Q>r7W_nK4AIEce3R>g|)6lPfyA^rbk%sC)d||!L4Q*xg=`2-(~)8D=dN` z3LL7!_YcPfQ|a#f1rj9|i>{-Bi0iw8aY?!)sCX91rpTf&ko-Z?B_tP$zJioT(xomw z&?!X$L0dTnXsr0g0FCSqOhZgo(hKQq52RCI`Bu471%FGNq!KniT*iA@IHh@o#jF^D zNL;{*NrL$!>&2*BPb{e&zHkZ)N9zX8kAQi$)%dLz_C|X>O6=lt+74008Zx__rj4-( zK&x0x)&MT1`?-u3Swl0O8(}RS5u=yMl4>?Z8&g=R%baRjM5&;uSB4)0`Bey?tT?Wn z`~7^1Gk$P{B{VN$x(D)D?@*lafR&~gT8!0kSr3=c!{bS(5RAujyG(nylpZcs4^e~I zn3>s!B5GO11h(6cVPi4)QXN5(bYcu+w=f6W$B0^Fh?*}`TRGO&#hPlbuc_5xh#;Y8 z*DJJPNDLl4UD}3W+A!SM2B@hze|l&GaBc3Ew81diBT&xMqqU+se>R!Vu1`^~0NTpD zA!I(sowJ`Al;wSQn46=`{<~B}iGK znL-5~pl+sMOLnq`7&^X^)$GG+UXhqrsFe`GTp)rg5=*lzE@>9@&?v#FJ3N-N%ug?U z+eBrye!1PSPG-32lBEv*Y;rP~x9i{RmtZK}gdf*or3u73D{cM_=%28Phb7BQc zFkc{1G*;`0`E7OgaO;64n_W|t)eWt-<-Of6gq&yLPpm?-Vk*^_chw&U<+EGOh(8{V z;rJ>`+ma$6)lOaJh}KvYUtp3FgrO(Kky-+oB0l|ao%^u1jrQXkkkL2Vk2{NOYox$V+9{(?+K-pQDwADIt2*{bflfyPN(mTH>K`?LURC?k{#5@5isWUGPKIjNw zTZ2Nf2zQ7=x_L71v_?QE)rk3)KD#_q23KZ#mY%n6pa*#zE$fXi53B_^bx+U0T zFhVC#&j}1D5)>O8mYIfh8Fx-QfcN?345`WDHjF29@6$zjQL>5!rvBIxt3fPps}oBr zo5OcuZUVFt-9*Y~(gc&SOQi0Grz3G&?bhyKNwvClD-sL9)TfoD;?K0=O}<_efn1cd z`t|l~1J)}WYM85>?amn*JBFYVpBK8%-PWDAB3VVj; z7gh5a?Y74wrWaw_HA;4EXeov!?ph2XNPQhGMT!@LuZboYXro(Js(U;5#WMBWW4jP4B^=VIy}_Yr=hr>__gSlvkLu zWwR2&R-}S~2u;B<{%d6; zf=x&TXU&xIkeP@)L@BRNtV^#K`kRX=b|J)Y&kB;b9WT;A@uCxHpm>&nQFwFK1zbw! zeVq9TX)LP`%EI6S>yM9PtNIBu0{H}@j87)+lZmvO&#-O)FemOAxs0yK)MHWR zGP>gbPL27j{6@Ra^7eDG;?P|8$hxBy`;IUVemgU8;(BF}t9!Dnh%c`!>~3q6()=pV!4##-YaQ}@uJcr)ve zB>bD!jnpG_&12H>bs2V?PCyxo{%*A6z-MU~&hOO=|9&X^2hk~XP39awlvil+GS-P_ z6Zb5G)#;zJT7I0k=M+{3Se(r71H%*$MKgNC3D>u;pYt#IvWH9kBBshY0FC_ag=3ts{&%3>{6U&8fsE+aPGV?*MXsi5@4Ny zbLR(0fO$rHW}Y!3@6GCaYMTKj!%RG0o8KV=jaKY4=w%$RhvdUq1NQom=?&33Lq46g z$8dj!(ecNG+MGRLKPun%Eu z!S(1@BGKbieoaN1p$oOOHPv#5*uwR=!s-XXgr%aCf2HXg(Jm!HyHxWttm`v46s!!K zDoG>h!Y}WBDyq!El(;8K-JQQ{nd|^cXkBTYDe$x$49GEpek-DB7XP<-oy9T=V{M)B z15t-|a*xu99Q<JJa~15M47P4aiIg`?-zf!(9wvXnNg0RkOr(zw{rPrI7eEnrzqp-9aGQ z)MR9%a&jr(0}V5Hx;tG_?&Wdd&7mL>=EnH%r~$rNpD+0v$h?%`j>nx{l|U=3+3wDr z$^XNm#`Dyj677V3o0?s8w6*ll-Q>ErR!YS!G(i4TlQ7c@>0i<{!|Ngh!32~l?erDpCO%fr=gY00l15pPX3^AKj zQOu{Ph(pS+epq>X%5o@ph?_bB!NOfiRT3d30COfGdV1VIsJc6^9na&>SmX4PRGCf~ za4j3q&@CLMvGzKbG}jwX{kng?AhUQckEPyX*Zf(2%+uIW)xN$L-GK$3=-88+@UShQ&C6Vw6S2expI6@C6ATnV`%)sL=|^lKP~)6l99o zh*Van9#9l=byU*kF09fh_p)fC;%um?m*!C|q+pro4rH^^D=t{K*zWKSc14SBa`#3nC(~m=0(h9DQzHFKx3DNPSkX>wb`NcAnc4d@fq~H{ZcJ`oXm;^5( zcX)_`-OR9LRBg$_$p!~(y!MpnrQRvnwv%``=Z)p9_H zE7ss+d2+0&k@(q%YQn*-6y1_4s)^&{R3F#f`Qbv6AxVm)8A~fF@34sVS0qwBqDAWA z1FfjoV9x63e$0gXG>d+vcO8bpu5mTrWmktTdd6$y|JwcLsg-MK7o=U=Z<6a4t+Km6 z>en#kT<2K1x(6Q)ZMTQ8rEZD|*B2!$;qVZy)b*IyUk}l@vmP>qdz|>wM@>9qZT_$* zm8n-9y`vTGn(HH&dSAN3h{UW=8w{wM75ZvSXtTN8xSDfP$M6jUL`mj@%3qEco$RHsod<)My^9dDB~$3PJ$89`eRviQ$lxDq$sqv zyYs(VlWi$U8E>7@XWGO%({e*dq28Q`7NFJ|u867Fx@j-Rxd`bR z6h&Be4Jy()()U1D05Hk^V{hx&s`x%=vn}A6 zme#cIHT0BPqqDd`&#L&@%txxIl$uhjL(6flB{D@N$|d_@M58i_Xozg679G3`L)L>; zOU;^iDVD+_>>-#bea~WDS8@RdHfEuv72!075W{vC1iEf4MNzDYe7@a^TseqFm zprx8Wg~pr`8q>u!CKs+T_)w#dDTc|&0XQaWa-V=5V#+G2uZw#O`Xxv~+#`L0c`D(Ic?kQTL0wDuet zBHIevf9-V*R29v9t8h%F$P5;TX-GUqdy2p1a_5z?De=SJwQ?DDh>n#4vyt zQ_97x(YU`aq2XKHC2q@*-%7Si9pK5Dzs$zuvN$GP9#?4UG~vS6 ziE4G*L`rl$WjIPGr2upAv|9Ds-S$W(uI}#qOffkn-FU5}v7NMC+digg7pu~XxCvIJ zhYvR16g~)sQ{n?_j4nQKJgx)OC_9rM4|jZ|0;A&jShzvkZ#&7%+q`w+@3Q|H4>jug+?5 zE{j4A4rjLr)w>nY%OQP?ULI==N-eD@)OOzKV}S@&OfSL%EGxR$fb9Yh_8|)_|LOI* z-mKsWd$G?9gDk1-#~cWPc6Ui zmh%cNXX~FWr!JP0)o`++R0~*d?^d~0%3ZeHgRblbYb>3USY4-<{$%hSR*;Su%WEXQ z2z-FOn!*P{IR>nf(GC!T9Z>W&qUc3tXdT17E^a`p5hQ`;=S-fT$uy+AZV$v=m@Ck# zItoZy6lj%>tdAY(f!c2fM}tVIHRv3DK~F=RywCDtb8yiaH6{ zCnV_e=dlMi^JsHbmVI##oY&p?kqMmw8Y*bK0Eox%C-L<_x_4SK0M2a zQJlQ609pkh%LgPFgE?8I3YMcG$Cb*sX6OSzxdG)7>&2Vv7<7 z;Cd!OgAtTKdZED?S(wWBXYQ!m+_dGnQy4iC_EI{xDaY5t_<9&bhHXk&{p_2=qY?dd z-Uh|Nba#Y^a-W~cbQo#2q!8n1=jjKFfeE^R8`NwMDt_jecPPsS8ZqLX84x!hN1^r{ zbJ+O&D4riB52N;czQ(Hum$TY@2OGi$=dc>-#cX$F5t{48{LL!O0EBv~Uy5`=a4tES zHCh^Kl*Q{Kc8w-wuXv{H*4SjW(k8Q&Q*?o(g@?jASwl|=ZLslNob4>YUhFLE!)kWd zYDIuQ6{OcHSB_U)vxZ}F(stWh73^Q@CMk^k>Dma^_O(p-I?|otut{-eG`3yn?}oNZ z?E9>`Lh7?A&Z5BA*hy_}L)v!rF~GqAgAX;?q}T>LFV@?~W}$kg%_4B4HKq^dsm)!$ zV$!DMbsy-RHg};=)%MXV8#H^<4|8=$%Kb8BKDoBIQ-={g7l^x#+KU+uYS>`6|8M?y7Ek&0k~Pxh9Na zJ2By9D0i)UdBtBxqAVVKElsc^6h?fL|SjYC6 zo}VG=mDgB47sw=qe|N$Z8Y6D+?w0S^&<2^k-J`PZZ44jZ1`vp~K|2=aP7xp|A#yxk zW5EOA-7pdHdqDPj4*&=;JW!;Zuf(?H)5YY}luW+JeKu$gOi0O`(KRALh&_cTg%Fvh zCX|#xBg7t>!rWT%2q2WXAzTfxL-QzR z5{G7o0Okt7vZ3};wm#d)DZ6T>fQIj{z^EqPLm7=tot4%GRaCZq%a%%(NNHSZg-c-) z#U3@e`~p}hW5^2tQ8>IQQL)?9{oE;dzJU1e+7w-I1DZMaSXDd zTD5QO2@<5R3iOjuG$b(W{}48NNq`>K{Bp`%o|U;GB!!_6#|lSmHJwCF@TsZ%zDp`F z1*2hl1E&G>RXl6Kts+&Y9ml+Bhc=ebixmP4_SCqF%H5rRN|G7rB5D>VH;R#M)gXZd zqnPrC;|jIIs^QS@@+Ju>a@ZQ@U}yv_8#tPJsG|T?#gMGkPqryb!#+S(%;vnxHOERr z;wt`Wnx)Dj!c29CVHW~taX5`LW<&QJ6sC%B6xh$el&FRyEUz)3iVrihyYnwwJLJ#) z5dLKNDu4Q!mSKEBb+0o)wdB>X9wqR1#e zFx>pmqF&ez?Kr}k;OHLI!6JIR7*Vc#+y{=q%7JYU#F~-9-ppjS+~-tDFH&2J0TrdT z{sg9CsXI<=M~u_Aj6x0SJKUsOW@OMV$C0TAd)mYPiou>j4d!t}ogD@Kl`SmRW~XBT zo4{>g{aW)C3a!LKd*L%^U{4UubRn9tU-0lMY^^Ozvofm*{(AtHeF(n(%-HC&Xtc5G z!(&Ne!tmBjUH8C^w}>0p#g`+_YQl59w#0e7IWOhYdC?A^u{jQB4rZgpoo_rlui!S| z*)QbLg;jAA{mkXwoV%dA^Fx!mrPL8@Lk2@rfCo(ks?o#uS^S+}rzeZYx%UpRGcg)+ z&b%feV-=T(R$C~AHfn6U0NlwK=Hnq@C+h^@iCLb(RR(GJM9IU$I8 zMZ?RsS(q!1I+%3EP{wTfJiFecKF_vM9^%K$D-8R&gNKJBYPTO~^p9lX%T1%im)Qk( zz%OJl?0iDnO@|hj4@GRkmSLCJrm^c{DQ((a{L}FpLCK_TzN{rWQKI4X`sfZ5+IIl>^6~5CTmVtY(L-&dg3v zV>nK$561w)%!*PCm3!GFMHymp(dCwFMXaUJ)C!Y5t?eNTqBEj_=~-krD+s>Fmsm0q z7$>`p^-6o#Dd)zEklj}$$)mm=_DMam1D95b_UyU5(gZIXjb3Tk=)%rh3b~~TmjY|} z#WdV7^i|Bidyrp_GXJJgm(i%p8XJWqGc7{$xGRi0T1h-7y;( z>yQrf?)J>QyDIbUocLyfeTq50FR6p)fz>;T+h_bTY<6%}4f{+uX1H)fv7&G0PY@pZ zl>*gQV4^AIK?}O@AT0K)6Z-gSG4o8sYn1ghWKCP$E?B)a_jP<~aX+Niy*_adDZD}z zG`;M>0nm2|K#%)Hp1nB%IZto}>mQ(bvOYphL{y+K{`*G5(Z3-n{Z#an_zE=WZ3!V3 z0MOUK&eNbrldziF{bPxHEQ$KCJ^pdk@pw}MpAe2dDwb$rmk{+i|MnPRVaUHj#Xpq* zsCQ3M{C*X`-!3nf`kje;XA(V{y-TIPi_(o>>l3v8-G*I%k3jXZ7<<}Ap-b3$z8*+Q zKd~+Vucxp+|GvZtQ=jvOsRwY6H5})Uz59T$^m<231$>3am!pedqyn}4f{;uK4Wj1VD|E^O*=oQ5&N9x!+N;@#C>_O zVD>m&WF>q-$ol?pY<`{#+ne$&Q#c<3%rU}ei=44zsgR{wK(!|^%Rz>$htk zZCGokQYRfY#gKH%#&tKx7Y%42B@tUG3=p9OtFV<*qRdy3lBR~OJh;c3g;>N>SRO3Y z0*7gp9Hw8OU`aV0o^!gxXbi#D^R_gkpX?(qIv3$5j-a*a?>nGdCKMdurh=O+izTKtnhDOw69pPeH3fQpkSK6a;9&qF(Vvx7ZH)OUG3Kfo zwqid_g_JUk(?}RJ3%{tUv18XM3>)rdL>D+plco zf6VROrs(S-n7vctDjiGKuQDS!2-9<_L!gc%-IyLKTTNxF8!J04R0f+Nh3Ns9jMLmO z{;x>4hIEGT8NmJBVnpgKZf#ZC(f+V`Pw(#hL)&c0r4v@6c;9rDCalQ73u}eyeZgX= zY2_C9u4lzPt*q!4zW@JOy|#8(z1p-==d<}szqH{udt}xMown7y-Z#2fGKw%UOn~_& zNykK+!W8?fbm7#>gh$?wfE%okgxe!rze}!1*KYvKiY(fq$f6O4Ww*?t7PBzzhq3Vw z+s%rmoc5q*90v(+2{1+0yt9Ut*`s3gyZx-jSvPRdrY6C*pg}OOHULM`$N?sOo|Hhy zveQXFiZ&iq?_iOYJzrHU2n|CSDb7{jws}uu8wUD%*)=npRc^ zV4JK$+`1_hrptcyV9^BGTrNw`*}kvv#N^i-#*|;%P_dZRa2B)5krexkthO_$?aZ_` zoGYC*kdx>-_((SK^^o5{+c#*lX=cx%Li6UhJKQlDMB1r0n+CgJn(^hhn;T_|+nf#W z`HYb{RElXYTTvzk*_} z$VT@{mc~^q4Vj+eB`I4PS5xNIp|7#YRi0FNVm}A`c6RWTb@VghdA+@c3TeO?eh3@osjw*~8%QL=HBl z43@%H-^jV2gu5`3S)&+-iei*FvkGn+-aT}6v^>3od)wLWobj7Rp~DOtrng6s2Y-$w zSU<}$BQ#?s+kD1u?|AF7wt46Gg9a>m+wdctV*Q>A@c}=VWOKEMYyi+>sb2$bU_YpW zVn7v)Xm_)<7aWkBR*TT?!JEdD(=MrR>nbPIq=Q{)z`_tWRcF*PZ9uC!bEQEIrk^_4 zl}71H`^3pdQEb2RvAtRM=2oME>^0#k9Q3`c)l;=rt?bp1850&&(eqC7Lu472Qw=wq zF<)zF564s5o_;RGmK9?JMF&UHt7feW4-p-?btH~WM?aIHPk^)BxLi<9_r~MHIOBN*iHQpX1J}nwaRHblikg=TpM@p(aht1yWR8 z$g|O+qOY{Hc{YUDUO6V}Nkv2Bv%SKw!MqvUYo2VS)s1+fHVHG0?~P!1gTlkt2~-nJ z;9%n5V*>}*<&X-6q2zjpKN%q=Qy8W2H58XBE%e>ay~?P~;ItJ4WSTTe^lS%)F>ymp zk|B45Wl*bT&?-|_RFMhEsbHORONBGDX%%9jv{k)q0dv|ihqQBDzf;K2xuq}KNq;2I z4EIoB7c>SFb_yj-7gHppwyO;bC!X4IG{!Nh(*)Mc;;ezk&_MHJDqkFju`2|wIS!f6 z@!7DM&xFPXE)5L~@k0O28usGH9t}I0UZSR`_tH+kRqPP!Y}u9f!^IVY6mE&bf) zYXL=?YG9bPoQz(}EU<{@mJ1}ii+8cCk5wBpWn43=hYC~2nTG38+k{2 z1Xmy|JSt!5mb;ae@uZ%;O;S%t`Ke@)ypwph*+z;I&xR&uB2UqMsQwV%K@uoD-a%@9 zElpgjjcQHF_%{$eOUCoO?KWiTahaqpLCuvOc#c-wCML?5G|}^O5&ZwqdV7ATf?%~8 zFdWKB37|c35#WQ1Dx;k2x=S>}dtlOvZi}{bHsZhtQ~ho8zWw!BXTNMn!)p46$h2O@B$4MBFUa#6W&0SQ_pwdpL;NWUIVPwA)I>a6`xUAw0)U z8Muv(=N@)eZs&rwhiyH}&0gPhFQZU1+OR?eIQq3MDvcMxt#vCk6~;MZ zsW2#UA?X&X+XO{a7sbW3>3RlVPLcgl4Twf#Y)?N{Epw#7IX>h75vIN`)iGwOzqeU; z;N-ITV5@6vmn&b1eU6v?u^s+c@!4TzwTypQMblU-6Nr(PhGDbexD>Evn2rrM&hVPh z?DX)016gN>mfg~bV=Y1e$F{EYuQsG-F-PO80jXdk6>My*fTK&S9j>-DJSa8x`^}uP z2E`uXTDB>ANsBh7)?!qB%JZ_2=VEv9et!vh41hi2x8iJjYqh?|b77AUp`}RJ+(Add zlDH}x>TPbD%DXz0N66{@emmuvAMFvYT35Skt6+m(F4A!wJv3}kB`PUUQPlhmly^hA zlL#uU;&z7O@Rhya-$ZfdBzpt}#ZGrK3JQ0Nip%s9bq_!I_DT1bX(U!jBVnU+yD&cc z(MV7lI)yu=Sr`$zhXi*b&Am(b9+etZ67FsRc`66%C1~v{Qh3l3!Flc{+bR?hp&oP* z4^R(^h+?LQzypS9C|*rHXdzxhhMaT{uTA2Cgc89f2ff2XRvJ18YxNrvy!q^x3Zj_# z@EMT~f&_1-w1-XG@Hzy^I>l0TLD8msb3B%yi9r8A z5R!y5?TLgEo=i|cpmK0e)+7GDowm5QLnGrR*1CU(R1WI)Q?a4@6~}qMf2SIXrs16l zs)iBi7)bDLs)$O4B1(qxZJCB4!VH(lh0lAfJd_O9anmvECu%e0{bh92Ga|(T3I2-m z8Z-(-Y1ViWpE*IH;65aE!VYN_{*SZ@2CiXnot*X9AV;mjDxCF%x=<#3jJE%+>O!M{ zdg0@=9d!Z;GFLt5C3I1-#yvwuviLdCHvSkb77C?D8y5A^1r*TbHD)%(=94Zd&G|WCmQO^o%K5 zoZ^hnn_v2k5!<6F+^$R&M1u+ZB^q@EgYMX@HOJ8!gLz>g zh|)TMy262zUhXgmQgj#7yxXX8?r2ji5Ay_nx!_C7Vg$@rX2aZGysc{IaCDzFsWFm8^y8Ol04^`@t%qzN-IZB7b2e9mkK~}) z%t6CQ_h8ynRXv#Y=picc(o-g-iAdDb{B@LZ9V_c>$1L{u5HfIv=?h*|PMR6wG zZCUQo;iR_So6ygDr31CPP@vyu3BZ`XB8grk?9Kfm?;KJbSg+J^kp{HjylUmdl3JK_ zy*jvZ*}*l$!Nv4(W^sVMh8De6)xFjZ5=+g&^}3|=qzyfXS1ZRCB~e1EM6XDRo^XJ1 zj-eZ`af(sGo6-^nILp{)9Alhm4?{X1(NVBb?+aE=GE9aQDocKxW7-!g{ z*5${P>v5fEoM9E6XLxUlhZ)|RRPWo(Zh2 zS4mvHA5;mPTOUkL<3J<*hcvaMv}anz*6S`Ebbp-!11M#H^Nw-kh~wP*2;=xsjpN^_ zG)^~8JdU!D#Uq`|9Yb+q7fa$ScaeMk!QL<;oJCuq=XXwYp>eW5-kUyP0T zQsTa3RsDl`sQV%%ZVrw3vi#Ml5noB%SNM|iUrj_hz9z?YxUAcOuR31fr;bKsJM^FA zwNAOdF1K{b^$pAQ&BT2pao?mZ-_mG*D{V=S{MUWka(qXg>$I=G8{781#C^}+d|wXh z^yUYN`$0N`KU9x@BnNh<`Daz;vzkHj+Os+#dM?3-om%u`d9qU}KanrHMsoDi1aEd~ z>(5l?Kg*dN{_BSPzi1SHE=P9ws;l9{&PMSU^|t>~zU-9oS8`>ivVSc}+mY`8)I3`3{vzmlep~#!b9>;?#OOVl;!j)B25#AB^Sc`#`@T&{?g_Yk!L1wRN zW>YWNjogqWED2tXVF|$2kcVqtPN#ff?*g7R`QFaAW!z= z_^OM;S`cKU9R`l|6J0Z;77|qbqV||*Vi-8+s8)0rt0{Av!taTwLoh2#q53$I;bG>r zfvgzR4~o%-&5nw$BHDL+@kslwi;tx-$8@$D`Pt>CmIdexfb&z4nSqSy|18w!omYd+@0pB9^WJbVBYqBot2tGV zE=B7{VygetPBTqed)+9cifXZ-;E-ku8_G1xkdhRQf%aM+vn-9jnUbT))#z`cyYmeV z?uuSyLedfYv%O8kFdVvS+TdYh5sw6ZN>4yU4y`)qEbX#I*g!Ohodzgg;3@ z7qLGiWt9Xq+0D1zz4k=%)Y**CURDZ(*|xz!7MPOpL3p#UgeDrrlu)8kGY{kr%A}3s z-h}1T1!?BW-S5XiT)D|gAPwh~Mht-MkWEc`I^8^>4iv^h;ttzOy+Wm+sE*7bS`C(8 zDhj2MeT`uZ?dqA6%SLlQK{*4cH>@}(_>+NDkc|GphGZ5cnJBd8`^nL7n_vzPGwOTGMW#U(Gf1A z1ld7xm!i4b6lbJpD~hDWsNd#BI)wFQ0#XIr%bK(t43!Eq7ZswPEA*=?pjF1!aqzz1 zuL_xve`*g6I--GZ8Lzd1K5lptUjcnlJE{At6bxV|Fwa8X%d`L z*sU~9p`t{bp#$?w654%qL$gICdX99m&nZvfLP~fqh1UVi9j@Ml7o=d*b=0_!wz*wcUms1mm^DMeA6px%|9US`2piP{LNilM*mX*Hz{jnQc-ZMr5UR5t)?*{2nH#2|-(^kJKt992-f4=m3tGR|Ua8M&plUJeB7 zajNJ>Fga(9pG)sjcSLSLgx3-o3|G-2E$4i;@d8JXNCgEtsxc@Kl`KLMm{!sQ`H$hJ zhd?vc!%r*tbTk7ra~{NzWIaL0Ff~}fX%Tt@-1c(>5Nzstq>vV1E#6TGu4ab-ZOO!u zD}p#O0u`+!sK0DW0avTsL4EWIo~XR5$!mC~5oD34x=Pj5UxT72yf2{uYf+4#EPz^X zUEf^|s9OpaDYmH}2%yE14ui*J|j+ zTHHq42E^D~)MRzf4lumpD7O?3=MCmD!Sv2W^v=>9M}DZ8o3q=);9W;?eJHph-ekp= zy|l|krqRNwg$shsujPZCTbScAQN~?*YA_o-ae>a_{xImnX1ER3+A^ReRtEe6HS*R6 zxFk$=hwg5U%e)VksNfFE8ksRff}dM7waE6WDmbG3Y=MHCQNMiv_~`EZdix}~>+t+d zZQ>kdJUclZrSWgbEFF=H)Oc1C2N;F{F;7dCgDn5pa}&aj?ui#Iu3633QP<7#w?%^^ zO1Qt53}OvJKZdxp+PQ&f(@$g5o6cerI*Y~t)|uICkLW{WpM~IQ52ti`3q!bc^ zBHdl@JxM%_9G#2w!ghja#cXW|EETj^=CE&!a~y$I5EnJT%_Bd&VlmzSARj5p zfH6au%O;Qu%w;WDecbvdS=K%(oG?T5ftW^`7t5PYUjo7V&%R> z7Y5Upuk~9Q0%HzwSmw-GnbmoDsM><&0E!{eRSwSZMwA%5$2pn1+~HCqav9BjH5^_w zSOwRT$y{pG;09Y1EoWv|y9w=8MA2VQe~mYUH;_TV4*s$buPq_OYcOgqqReP?Q2&Cmv*^<;iaw2B8ffjzQPHOzEFz_j z6@B`{E!~pU$iU(V{sOWme75jAqrT&7L;+5Uu9!wt+-j;36)*i~8B96I?n@X0 z2~rx2rtq0+L%>kWT#En#X54~Msvlw3R4uDR2cvLn)0pAgNa`fuh%_Y%wkS-S6Cax@ zX+~;Xe1w~My;uL7&OLkQQ-KG+O8!Lz9<6ew+GT`wu3?zxaK?(kz{ukoKqF(eawCYT1b9%LHy&-s=Vmp1*+JpBacO69|9a4U<%PQUdB zoqpyan*KK0^pH0Vn{IMtIc5G|6E1Y~N`g3%014rY*fa{^&KQeZruZfgZ!NC3@pL>a zlxBV$O7}gc#J*haisAXwc8T3CE5a^oZ6G93% z#ziGwJWZ;*7D6#bw9=R)#uzc7w&gvPT1*UHg$Xfl>#&q6G~-2XWbo|?Oo*GlBUoBM zp~J%&oQnoFzmdVWWZv;@hoqsps>Ecoxlfr;^hQ4?Btt0b=Ins=D2PVHWCLt#1Mb}@ zk*J!1jLIFggNusA!HvllB4jkPiyNU3mdt!O?m$LGJcz8c?5=|41urD03aJVI;Ep#* zKAHQ(hoEdJfQHEIHXjMzaj537P2O2*6=DYj~0y(|Vu|<%k4$a;RmB#Q4Mm35HqdJcQX4_|bgWoP*q+ zJ?02Zi@)vsDmN_>z87@< z)1T6{KTj5{L%6`5pRs0#^MO3rWKb@|Ffg+XBoZ^5cAKQZv@W{iv%VwaaLj}ywJ@r@ zA3K!#q-d!aMRWMMld&SQXw7Mm0U!aW)c2Cb{tbLRX&72$1;INd#EiJ=DQlzV&x}(+ z!U6AS1KY~^p(b)>%cx&7VX5Zm!!fRNJ%f4xf;I;UaB!d(CBV^vUdGW^nmBsq_2^hy zFBn+DtW$53XOGY~5J};3%v3wU+~ld_OY~6+xL7VC7~=Y+6ugvH8aDQi6LL8_ zXi3(Obigv5s1Jy?Th4L3;s9b{e)l32Kxp7rx|2$OvZLl?Dzre zleK#^K(>28oR?|{4$$(tiIA)A=rdyqWdiQgHFZoAD27EwP`sW-N_oi9DM-13_*u=M z&Q*({{Hzgua0z`iPN-gX6H1rT9p>Q_w7KL7#gLiHaun>4yXYM+;cPL%;b$L&%t6T7 z4DIJ;#{u-+o$qd$EK}+Zj)-nP3%DODU}CKsL!LhwYZlW1{_}*E<|{yZ+nfZ56@zc; zm!4ikmoau|#!J65o%IBVH!qkBNV_?4K8F*dE~+sqAf>2E7+}=Jgn^{2GV1okqA_Tg z6>s7D+DM%G5{2|c8e&KMY4N-Ud4klbMc8aAcYzk74?)ttM;GlBYJ&^rMDk9I78K-J zTnBB8c5&&ZXd4>u_7aX$%%aB%BbHKx@rgy1S6~&uP#MWIqr0_DrlgE^YD_u+EP4tz ztDJYp7G6$;D-W(r>*=$PHR7jPS(%nDDVOO86K=k7T#N z+##ACGr5Xvt3nla&0l~t^3#pt$RLcguC1n#rnf+6UB1(}o1yYu_Gxx`t}-1NqyxVmO^iUn)V08^x-6`~(!!ST1TVmH{|gqCia_WfZ7~WrYZ8@n+s5=C*XV_-kI*83&l# z=^?NtWeZpf=F{W?#+RUfGwC>4jLWTh-O3ezYKHTrdyHF;S~nd?b|8)&Z_J7lCh&90 z6dF1}v8H|#B=9H#m}p@PIF$5RLvfE4b@gI!vxcI1lYe{@wsdi2Z*j*|IS!8%P%DNB zrNTar#TE&|QWo-fSV&XaSHDZO!wtqXEus^eA6Ou+EMkFh(xjcA z(TAZ?V&y;`ERFDk->^+@Q=H{hysB^8^GV!L47W;rD$bW6+B{tInqTEglM1;cC$?P` za=R&oPGib17jBQYKD74s!}!AuWAcX-1p>NE)Cd~d z#2@lIDxpIQRJJ^A6~cbl=lku4`AOfJA=z~%UtTIpX-}!WCK4dns`U_wt zQ!O-K$1s_rAl>uSUk5)pmX{HcMuV%Q!!*Diu=K&p$h|f~Cz9qwTk2XH%gZq|aFshB zPSV$=OLFC;e2!@G^!y|;;4R(Uc~V;6L0;t2R+V8R2FcLmM2_F9DIm(M!gQIwx{pht zHEswOa=7a$-Dk~9uY`7qRc&k7Eu)<|SiW^&7SEt~OuG?Lotd4;XHnf*^|dk}zOnRG zD||i4O?y4;&!OYygsbMyWo*yQ#&%O^qj8E+wjgUfym8gb?87dvJ+sTRRc^L!W`y$J6k#`y#&of_z zlbRJr&~X|_6Gk+8IDPCP(GjKGw8IV40!lXkpqM~=ADnR_nh>LCPqL%tggpB|*O+O{>KL*# zM3?Sxy`RpWH7$#@YljQp6AOna)kSJ1?@hJ2gW-eEpekFF3S4D?z?3e|X7KuX)L->n zyZgfuo!#B}=81>NVR{?a0Es;${+P+1B$vWJNbx06h{PWfk4!_F* zZHa~2`M-^-SkjmC!TG-hN^JVh7?A+JF05?EU>n*m84)1Hl;Ke)bI?I7q_DCx9R9Em z5@TeSNQ`a06E@7|V~Zq3D#v8S8KGgEH1gNjR7w;$bx_v=R9^e)z^e6QDqtvWi|<1( zc|`dY(rh(~Fy&O;M3`y8iy8kGhYLB=Zg11^Hjuwu!>>|i>ssJuN1|mDz^Z4d*a=q| z>xAQF#95_PaMr>48q8|_m`WMzzIeVzZM`3CAWnjd;P+ajjtQme0UV#sUkhJXy5F+K zb8j<^u!ta)F(ZOl*G#~95qE%g4mR{Kx&r{v3>#j(zX)JNyEkA&6+ve?(w@QcAslS@ zBB}t;tP47zU(LjeHS85X2z5 zrSa|}4m3+*%9+vw^@fMX*e%NnyTf?Z>^jl7_E<##x1#34-d^dhlsMt4kanBfCNa>};a8P8F_}o!U*oRA-29r-A2l?G zv&8HSOC?DrZhm>lbe+3SMO=?<`t=)|e4)4-OxCVWXRc5z=Zm>Q$pu#^i;->6-Yx!C z=H)iG8x;R-?$#)0+rvEViPTlb=p?y4aeEU485KbNtekz(D@qLubSCUh1FBQrwt(kv zTmW}l;G=X2+=FrefWH<2nn@e6dlQV(HD>qmPPb}M{??8A?e|5%{28|gqThA}KjJ4? zev*@tM0|f$Qu;5AnXhUdl1@Vq9J z|0DD`Ty?f!f*v{o%)cG?DR@!A?!4+BHH-8|llrdQ<{wJ{_&1Ku<1#?cHpml{1nOU- zgVB8$g(qc6@%HG&eYfELEr#+B_*@&or(~9{BWr(b$vczOCf!cIi-iAg0sl|IHt5#~ z|IY#P9zA{!ZGBp9-221H^llLUZ|a;Da2I(~s>zFKAIFiLWyuS-r1Am-=%|{;@2M%D zkeAGBY))$#EC$92i{;Txo=p!8$I?dM#(FZ|AoJuH`JiQB0vcR79^wxMW5|rMC{AFd zHmj9f8hrO&$*TZiY#ha5F{gpYQVZa*{GsHsI@{Enrbva$J-|Ch=&T+}dqxs7bG;yOu^pJ!$k%60(~FDzb<= zaf)uKhB3NuTZTMpnP@Ze_tLMehj_ws%W*TqD46v9oH3>ER$J5IV^1>Y#bs~+LD{K0 zRZ(}UFn4NY7R;ELRGb{kI?N(i)2RQKTU1a0G2q8K3IPEijSenP-5Hf8X*&akyj_RS zdeW^AmGNr>zc_0aXw49Z&lZ8*q%LT(2_U=0;iDn#e)C{Y5V*%MNfL%#Ksgsw<<`Vs z#NirznS{$yDqOvUBwUvUOnqtvZBfStIB2*im0o3odnt)74VtRU+@0; zUr0(m`!IKF&EH0v+p>k9xiw*3rzc5G=3#f(!C}qgNa1q<2MSHOiyzp9Dd-0l zUor~g^_?;eE4|v9b8o^jp=TS}SV0%iV5zD3km zQI;~>|7J6kNX84MGmx;j-4_|G7JAc4p)K6a0?Epd(8JsV#z4W5p;2?pWncV|=C3StDkGVgf#C z00wfxk$&|J4>)i4ts(Cz!&3xwmcLZLNfE$Etq7QWUSuY?pc#2VyBFrV>lWUG{o@Ka zpKSB1NOTv(fjf#&a1$o$CbpD8PLZ=9byBd=TbI7yr@L7x0`5vRJ_GQgB*4UVPkW&MT@n_f~E}f%QcLYu}6e_ zYWZ8QyK^t{R&+qqbQePdz27u|cze}Bp`rg35L4Q0ar6$CbioSZ&{Jbl!)OXfJsCSU zkIC`Cdi>IyrgRp$XD!eDR?Z@#v5oGI_x9pT`z4RI*5XX^;8`t-3=qV|S zLs7*&7lqn^SJf$}BhH;r6?jC2uAoq4h;HQwcPnmJJEdQVg`Ps8r<{;~)(ZW85wzR? zN86de$yHQszwf<0OEQy8Crn@n0jk0P6OzCHk%UD^4=@Q3AsYciSrjC1gGl3ms1p)M z2>ZUt9@ar6f{K6}yNZf}E2yZTprVMlu&5~C|2b8+dpZlge!uV24BdTi)v3Me)N{6i zFFUl|W`h|f;c8X&d)d8WuW(L3i>H24nR44~bjuU;Mey%hl_iVyI&3g){Tor7=?+tF z8$f!@Bj~@2wXnZ%!2!g_bKC(^WaAAq%_V;&KgRx+w{ih|i5+9|RcvvXpEsk8@+aiQ zn=s538MJV5IylF-CS|-jq^~;wfh#!4itfi6q8;UJ;tvENX(NcAG~CmG?`K}sBqXALi~kglc8=Q@v1Wv5w6 znM*6&r?^US4E8NEcV4G*tKuAt>cTn&gPk;evmzdQ2XY=VaX1S(7guula2}qi3rK!? zQ2+yVUcFkA&HAXP=_GtvcDzX!? zTRx6M{l){V<{EdrLmt@~-)zcHSp(+7FN;8{s_mKwc*j_J2`H;d=xTf$+De&v}R{ZHC?clji(eM|ZZAcoOunB^^v3Bz6@)<&D=rjL5 z#%L;lPIxD*w1Yp<)eIaN)yDK&qHvWTo(Ei2WsZ!`WxX2Sw^)8%ddE|?RMM1RYG)hg zm)j;?nGH)_%l*k>XF9q^@qyLB!F-^0wvZ3>bLUEj^(d~mt)(HGpwc28!A+RKm8+$Z zyA&oX$wFU~Eeh_oOla;-$_@^iyK|Y;A++TswuPZIE|rWqkg?nDn(_ojS+`wY54SiV z6A|e@q*VavUf;!~#uPH%-QX03%(;K)qjd1cC4$nfGHvcQA7Tb$*jnMXdtA8f;)xSe zR-3_3UUAioFo$Px!f$1q+SZf|7iLX83hfIcG^y{nAWR%&DkDx)I+e>Je1Uv`K8QhjTghr#Ooa3m33M=~C;S9XSe3-7J>|(xe?FqE55i_s1OO z`8(ppAb~AN0`OXeD`;^u)Jq)BRu$cX^9w{x+E|58XmPtKohh=b&aez7T{IS8cNUpt z-$Ma@@C>hDRqFVug~<&TvANHbIb4bNQvSU|KJyB%i}2oV)~trWKDDs)bKn{F6LB=* zRRJvIML_bz{rB+)&?fT}UG?*5|2&;jmW)UrwFV8BBGRA(LxVy(a90iZLE#sC!=!8` zm*9ikAqUrW;H&;U5PwgNxB_41y>%Ehu&9?+n1dE~M6I{f2S@TUH;IM9`}5iXv8qW& zTQ44+KQ(9-NAd2M{E5MSHl*F=*QJJM}eo>#9X3Zi-A;6)udfo{=4nmocU;x z;XGw2XMgE3o1mxZOy>@4$A1+_l^$3w$k7IfvwubX(z^Ef-vS2^W+*_R<$wdQqB-#8 z*RxZHKM&^WUd%hY8ka7&qCr#>e||(%s~r3keL=10a1#y#n5>PcGK!a2(VEF>IhSHv z%$FtXB{)vOhsx#2pf1C_A-ZJ*AuKHy;470DXH~vb09kiU_6-fdr^;3Mgqb0vmBe!b z&Z_AL!pgI2AVj76kbHR7wguc&C&Eu}PXJJ>0H;*?Q?>SQm+T9QYKpL6sNku0 zkY+U{Qs(N|ql^7#g3Icn+iw{Mdg8RR>K{?MNAh%Y@#;yJel20g{koic;?)x` zp2NHJ8}jK{>(aGcds6*x#n~KM@a@=w$3qLgBNw0UJCyugx%6Buhn^&P0&m86^sGDd ztm4p(|*4^r9LZC zw>)(#Qk){EwEc`U9s_gz%9MF}W?IhtS*cr@x-(OERyus1o}Ie0(^}`8BWmZS?wr(} z3$^o9=6Px895ri#Kc7e1sV+#}1*xieVd{8xVOqM?R^~;@auL;>LNzZ=`RXpFnwN<1 zrK!6lb(cc;GF9`kdNnUkfmp6c$#P}tE>GPRsk^eFnx9DBC+gL_O4P1S-Bqc(8fw?5 z%xhvbIjkUatsY&gYN)!4{dK9k4nVr#uaEV=A$2!U{~3OjO1&|4yjYdG8`B6C-lWGj zr|zcI-3$_Ri%PsTb+@GMR!Y20^}nrN{~@Eg*x#PI+pU;SrjBQyOat;Cy6jV_`&7LR zpBBYCQupc9-2uhbs_<%S1NSYf^Jh}`86$RQ>h4UVOyaIs|IeoGvsVAlrH*HxOXvH~ zi{jm>`+Vx|hT<1g$1l|Dcuxvkf3KQ#U+V5j-My*1uc42>n7S|4>-Qy5`*P~Ol)5iN z?JKI^S7QC*`TNyam-|z9KXvKx57>jb{=wAoj$aR^r7zpGcu3S9PTfPPdl+husBVv> z`O*Jq>K=_HtLanx*HZVjG(gkj`?@lJBXwU--8abmn5y!aRVADwbNn|`_f4CP-_pBp zaU+@0SMcA~k8ksXvniXYl{~{gp7P>5se3$i-$@tw?~3#jsrzo~o`Cd|se6(h)7JDo zW&R$eY@&=a{rCB;iT{Jt{eYrc{SQ;evmd7O{EtNB$Eo{K>V6E7r_{Ko@{XV5pHAJ= z>D0m;{}ZMAY3hEGx}TEnXQU(L&#W6%w`bD6ZT-(v_e|=3&gJMAO8(2#{UUY0B>A(c zdscO8tMTa1S(WDcU!{G^fL4B;I-c;~U**02yePboy602(0u+9uiv6b6>%UFiZyS33 zcd7ebz1Lq<=HI98#nki(R%zoY~Huc;%!U(<^JTk81tM^>xuZm;UAdzDS&HPztt)V-Fv z*Qvo9p}*d!HQ?{5`@0qNk66$@Q}<5_dQ%1cD|K(C?q3x2@6?gt-xTy#>fW*p%kYDs zZQ-=cod&eehH4L{_~r4%ip;IxMbV#;L2G5^&dA)#3>+$>hG%8&%*>sY&GKhk^11#T zJw7*MYMqx+=kqgnZsyJ>{RR4YVdhA9AwMt597R(Y?sxIA;0XPO6U!d!nv=B~)16!prC-To7qyE1d1$olY0RnObp&6&R~E4TWg%-xo`p=`k49((JP znfqiGCApu_op>jrmOGs3iYgorP1&%9~o)#NVkJ-j%sK zGj|vHK1&VVXX{P-T;@KPcgyE9cD}na_xa4-O}BhOIq%8b7czGbIq%Kfz4d(e#V+|` z?2<2K?u(iG5?%6TW&29zzMQ$QknO9XOTJp~lKV4vf94;kcgcg9dyp=9D02_#d7FD6 z^AD>_9?9IpnR|pTc~sNuYngjAb6=y)Uss#IkvVF?f4?5voZojI%iLpGIIF`p`OVCI zGplWr-%kH#=6)6X2g1J=_2)D9>&!h5^%vBX7pyx%35)%2GWQ!> zNTZg-I1{5Bh87{%U*B-!k{NEFSZ(D&4Dey!Bkc zzowphJ#(*R?sc|=H$?UCnR_F1e~0QnRN;T*6`1S)X+yNwznQr=jr6}V$FqNB!`YF4 zXYSwi-g-+EmlfSx>`=w3KMgB&cUrMNdDtS&aD9$n4qOl3KEtnw56(bv&4XUQvgmlW zvN-6^EIN{(S)Aw3Dnj?{qC2bT&W7$eqI(W>kxc>$b@+4j{=A|)x9HB}{rN>&a(*%2 zpe`sf2QDnazFvd~yXY<~x{Hc+_H~NCxack}Mj5uv%1Z$1i#2}sQc=IG=q@d~%bTUG34LM$t|>x)Fv+;E%N#W`@?va}W2 zExeERd0F|c#IIZN_7-VVaUENwPmXUS`BH^O+*{YZeaIS(*4C;7mGTkVFh(+$&40lB z264NcPPzX8Qd@v_*;SQ#QX#%$CS|jwe(T0g&z4c5ku;I7Jk11=ul$b9M)Q_%?bEZf z6w!gQ%s^Xt_>Ov*)Sb?<7iMiWJ-f&*aqNO9;aw!xhk-N(SgP#=w4Np`^qVrix!)Oi zoyjZU96kjK-p9-n-NYfk1>1>POop1ELuKHn)Gl?n$(Z<3MiwW_@1WafH6%FH4B^HQqK#sZYsd-qwhd0O@i;acgty7P!&(?iLCw~>3d<@jTLo>OvB>XC zd(7Uh>UX8kU1Oow61bhy@}1=ZQeYHqkp!Ds52kQ?KzNVo+3iVGWTbvGV|=FAcyykI z{GQa$A~X#E>XzN!#CLZ6>LPQ1JsW9osE#={ltFQ58=&qGI<|6ujZV`5crM}pD)Mxy zyynNyAq1Z7<_!k*S&FX(`V1uSVmO4oa52~m4K6^ciOHsk#J%$y% zSC$@C#Jh*B2DY8=4krYA-)8EJUiYj@EM;~?))5x2V@S=5w{j+pZ zNMEc8XBv%UFm+feOkgGr!LdNM$1cK>BLTBL&V8`zk7o#uuMfe87=jZRf~x5xRck|V zB7`vlt_{I0a%&i!UWZ;qmr0F1Irb|4u7~hkSj5^FuZ41TeR6bltyF_&Hf4&rC9j>7Imv1v z#x%ZEn-R!t6Yy+BDDCBm)LwxY)Sgf1KUXE7u|Tj@09bxrV?VFqC-CbPi3G`@x8ShQ zxCio7=pe!9^Bp-_>Vgvv$^{bu2YY@0U=i0!X| zvbRc~wd#kIb!b>tAlT3kpG*RW4j2nE`zbJAFj(+|wGmjxC2;5l!GgbvV-7^_Qm7?` z4FrSbMVq@b@t>0x7qBaM>*wiNFxXIOAXxC%V9$6DC|x~zU{z=<>Fy(%5P0i2586sS z`R^Aa0xFBeFRSCfOviskxT|6+eKjdPth0c=yI(KwA3hye8xMrgN(KL5-spz}zYc-I zGWd^J@T5nm;-d)=EtqRX0hPXHga366HHd2ym}|v9mbk|f1yTZ<{bo|S!UO<{rUc|# zpS7T=p;sP{U7JI$fCB1T09T;bCm59{$x7xYl{s|n_Y_MBwcoH`>CP2{P!n$_^A@GEA99h?RZAGYYd;1_uMb^@)v9L z+%E;aY9T$Fx9K@SutPww^xUrn!h)&}_~#QxisvEyg3wjv0A~FSU#1Z@Ndv!^09d~M zE-C$5V@3ERJ!W(adsPl#*U)dEtuIl=A63T7LSDgK2L!f~;!l(Tz^af*g%~nPuq`$q zMhwtZF_Q|4nG}ctwEhiZuZkGZDtPN_5Cdl=#p@7zBXMt7j=yVc{$T*>KR|7z&GJu( z0Igze&MbISKi(tF08<5EJr6wN z{M6>v`N|yTm4T`ts`Ytwkr31&0jU?Kyl4Yx6_(ms!%_#pQq{6{4{XZU%hMADq>dAi zN>%vp6%piP-GQPufuq*8VcTM_O1TtX9l_K=fvHV^sp5+4&PQW7z`#@a0?Tq;3akp2 zx&$Ou?F;{d)inh524JgIYUPa)O~tQ&Xyr|zi;NhsY9I!h%J*9!2DEx>3al!IEhqX` z!Goa=>2VuitG`_}yWMJUJKF7u|70rW6kxRpXq7msf>XO0pJfHG*N(QorOA#t8{4Qd z>I%CQOgpm87tt|kaz)oP0P70#dXjG`_oBRjsMv>{giRhA2@V$k$D)*ge{$)buzgtS@uW6| zn}MK(e-cdSL(w(={wRnh-n2ujK|54a(6UV=n`wv+z=Xnvp5(VIf4vYC59j!;$!4A) zs<5Bt`NlGBLnbr&8jxbBn|zX=sg;nEy6I+tt)%4RGP4X4z!n6C zHbx8AGe)*1+F1yr$}J4gaEF$%p)gmmx#?xQE*YgS*}}$GnL;c`yMFy47IJA$T?(4A%+yDq|=GwOFbNXbK0D)jL(HT{&8@Vwc4q9*%Y?%n9kZ zT}0WjH*R&J!^96O3%zX(!y64gyF8|rG3{2CwibH9(lXethx!J(Xj8?slPxVH9)rNH zX3Q-Emkos?cOe6wO=E`bErYo@!t1fyakWhQR2x)F+%#MUhYUDeEUmI0l?OAlPFJHk zW$92mbvsAPwl0sG#h4CDc4?EW=Hg-L_HejZj8<-~Ts4{$dm%S5Etj3|<56G5`tAj<)B<@1qH(+q2ZCbj#Iusb95lYt}7SPV+P|1TUGYU5Gt0an2D#z*_*mM4tJF!Xh1OuE z9SF%z`$l_F;zddQ9bRzZjycBi0!2dJ>+-TeeBY^`oCxFe`?ADuSpNOxE1!U$7MLMC2O)>O^t%^ZbMX%d&QC$PO>UW~7owP%TvZk{y&EOQ5zb`zC*2>z2vhepc ztPQ(H%BGvR1Fuce%A)njt)tNb(2vkGJ^;J^|t<^&vwx-Ino{?v8k*iMP|Ul_4;Hw_w+2_F z??F>L5IBquINZJ49d4c*ZnHUk1j&xja-s%yrSJFeqYKUAsOpbmRE`q&CBvgucXTX= zpC91o2WXs?Nsk=Es#@&O&yLb~bhLX4(&0w&ub2CL#T`2A@@Ot zaZwm#*E+SZ5qJCO*Q@GJqz)&>Occa*KERohu?-FL-pI4Ws-K+%izT4ngqEI@6QHSF;m?isM`|or{Z=mfjmXmH>Vf=Eq;Od6ZSM^auY3sUSO#>@vMQf|EX*UQlh-0}*30A@G zxLE%i6Ci~6@+Q5!iI+VZs2^5yHxd8eOab@PpeUgfP54>i`qn>byf3 zD#H@$^YTvB=*~6TW9UMxG7v*6AVZv;5cr%BhWPUHdii-?o)Q}im~eMey4@D+7c?~Y zSV-r4xO?BLp}ALTWuYbaCFM?`4h5kO_eC|Y;VmJmGg7)3(ith8@_%($OMo8kA2u=% zs4frGTcXAJph!GqD8oZk;bD<@co>OC6wx_$hDPEPAc^584Y0(cLM9gZuZz+*Vt{89 z7oY^K$E-QZ_f1OI68)Bd3ebr`4=Q04A2(p&an!xOBN`wPz!Tr4Hoy{3P?xahGF8zA zD-zzBsrvmG;~D57bO`x=pyvIc-aJj8AI3s|l%Q>p!xPJZCme5{qSmN{CBPG)6j33J zI{!3pKSiP!HV$y2+$L-Sv;v%h0MGex2}02dLNRQve*!HAArxxqv!SOt{BwpyJjX5r zNP(~}f)rIi3Uv}iKA#s!e#0x2AH2eP42*)Wza{(cl>J518GDibF`OcH4;jHC{$N^I zFXaV;Q-ECjk(@6pCwK+m#h=LeipKesVTJx#8e%#J|6+xnBD8|9eMg zEvXj@Z1Fl7dq6Fi7nxMT-VkCjAK-#~;1vKE|D?z_Rpgt)iZswdIl(PxXODkN_=S6m ztjkie0#yJ?oCbIRN^yExFLJp+3vCK3bSuwTcx(rhJsuy{ow7zuXxhS<80T=~n#l`8Yw^8;A zMS@gZZaGo&;z_Hp3cg-R)=#L&tEB9Oau=|y6ujz1f=ygQ#tFa?R%8xF%mR!cUyeak z!5~oPl8h!42pVyt<-5rWZ1+dH`qYDh; zlMzoLAHYK^z(eC)Z&2*gMb0MdYAc!k{*1J`(DbssQJcV>`J1~;lj~02z=CTeKAXQm z$BTcT%NU&!CwV@h6MpmKIIXh-!c=0W|7fA{i6s)S$U zF?wHWgE2cG=cs3@zpnd8n(c?jUbeku90!U~*%0=^;*LbV4wvroO)OZ^ZY=!`HX^bR0rnt19QCRR z1BsEKAd2v(kSux{se$m$i$k1yMM^6w`WalsRkV@0GwIX6MNS!=4psyN$qNwm; zb-?w8P89$y)d-IpI@rd$E;oLVJFz{){#Z#AJz&#?z(Vq21}s$djw(9wnO3^z?4QWd zzl9rq6_!O^5~djjb#%s7_0o%6fQvrI{~%@vpp^+Eq%tRm8UO;ST2tL*H+66rBqTMW zUbn65o$t4&lsXJltJE}h%y*!%v6Hhf8<8=;T4w^+#Vfm54DWjInJDX2Fb)N|1Kah|K6H!P${(5?Xm@|CCs3r zh6Y2;?UIpr64i-nxJ{J_#H%6`XoOykv{$CfPz7~qb?vjk8xv*?c57ANp@m5&cQ9Z^ z(R3L~=rR})i-%AGP$3?|ti~xLKl7G@$+BHSq#P?K2T?+H5JkP3V6O}|sj?}Jcbm;> zz=q{FAkacLVY`IcVi`<7fv5+87B*{owY9yg2 zt9$4C2G^EuW}c($%3AAvAqOa-e(eSFvDf^DJxRe=LfwjNPP4a5+WkJ(54rzJuDAw) zRQ+{{hS^hxg zN*;fO=qq_G%<7B?EPc{iIK;hszF$|^MeEGN++pe#T&{@v5$*{6IuZ=z$oUOOhdZi9 z9sgbGi4Q>C0x!B*q&FVp+Ikhn&VnU36Bf3u`biE<55^Re!l+@S=EQPrB7(WjfXn152ET($VLo`mMyT99pnHRglFM1<8%1$CVR&r!)K8{ zeI`U%OD#RhQB*7$+@QX7yseG*&M-9$1Og?RZ;DXs@q5ARk@U_;n4!2Xx;(BgG=}mV zX>z4mel(qIoK4l2n0cH#%&Ez+JHh|s*n7j?aa6ErtwxEiB^np33W$nKrLSNx2dcochx0M{*CH#>+WRpgXVpoM)31@^d} zdnIM^TerEbgDYuX)XU|N@sr!!WOftlHN0F*<_Ov@{6gd~nIlMXpSHhI+lV@r%|j2T zxv6f4n}Wz;Rj}GtTsu0aRgNx{5|P7X=BtHNxDiz+dx*4QG7DrkL=d|j)o{L8EA~($ zlo`b)WiHq2+ULry@BMyH8gAN6Rgdo`TPiBEzn*ZG+~OX&mhEa-+g-tUwaA8I<(ToR zuvDx00pTIaPT~URx&1*==eap!mg}_Rk0a00*z_h6lz_rAtQV5&M zEPoKSH9WQI4`BiwVuPginKD!f6xC{Bo&pPUd7*b~Df$qMdbm4ucr1e>pm78=*#C}X z_8zI(iy|fEMQ={Iq5S*H4kf9gJE{V(dURaF@9${4I7vq3OX)wabLg62wx1(73QjnH zZJ=7Ig%*xU9VH97T6;kFi6@!THT9qJDD!Q4upqS*wvgz`J>Ma|kt8)|ZvVMT>Y-r) zu4nlcYG!gs^X2A7sE4gm=FdjX-0WAoYuAv%RJyh?D{8|T-;SoGw$8=8TKW=C%*MU8 z>jf^8sH>7qmQZ-iV$`?)`-XJZx2gZs5TZ{HYlsBj|EVDsMghTUy&)FBpgpq7){xG1 zHsq453Gv&Y_TI7od9olT(~#)K_I8tn*CXh%5jvg1yg?6DE{BR<^VcM1v)16<X1M0y^RXcsldhn>xOd#Ph#Y<0c>5$Y;2Zf*8B-t9-EMatwOw- zUq2ao;|A>gM$j~MlM24bHU`{~N9_>PHm4cGFy}O+^Uvn>yQ?{AjVgkqz65)23EVt)NYDH_*y~xM3=5@-6Xed6^3AI zn1F3?{}@6oDcBWJCd8DiKgK(U)H_H=fYsfkux#b*R9@Cwb9q6>D9Sr8@ah67(}pgc zaXLqZ-<1ojiCp^|m;`6yR?9JyE-t&7uFQUHp2P~=G@2Dd%~@eH&`TiU6#Nb=p4y&n zF9*X=T5gx4ep2=aJ1=7w4ryQ)sMx;NWkR<03zNq#AoKB$mB1|EAFHYhN9dKtIg6;lqI~A4oP)Ry7^`pyUhEEAfOC>O!gSqm=jMrKo23#p+3C!W$SNc!MFl;upg` zWWXA9Q*_{$2H5U{a$$iwqGdC+#=f_BA($lIRq&o&f zL%ZepO2@~kP+W?{bZI{#RFa;SxMfn79_H?mT6Fv6@@=KctuRLy4~hwp%Cx;)DRpVI zrvvnOrU_KfL_v7{GE}n7K!nOjBREBrdLBBDs7a4TT1tg3jJnbikp{V?^~6O|myV;e zRBo=C&C6AAf@+Ojhto&e9Na!yO-+$n&A383(&}Xdq*qFzTIZ^jg3$CTJ!nI4D%TcP z)oWDMYb7s5m%4&m3u<}2X;<@K{vj_7G0%{THX|7on^W+sqFQx7YSr}ZO$lOAWT6c{ zF09O3q)=UJ*{z~+D>U+5tlQrfTm~0WvWD*M@_2zLbQX>-po>`alTxd$qE>A)>eD8a zu?F8E7Z)1n)rnhe4MrN;>^`HhicRiDn;LnjdgU%rNBnu0l&oh-y*jC>S65N5HtKiR zshgg)G9vT5$Ee>c>i0(K5JSq@jHr{+;Pa_bu_pigqO`7Op=wPTjUrEmEC@X<{rynT zY=%#Jfx~VEO{v6P5pZ)AA(0zwYrL6 zlVZM+H^m{|M6_8O0tA}PNHxRmOFuygF=sPUPUAMLLP$HmO`GR>#GO27Mc5fO2IQTV z;0e|ENr^n&lhhbFXF+mKl9Q4|eE(kV2>S=B9U@F*o}l;pb-g3ce;EBBOY z@|0CBOxkuyJqtCd=PWd{p@wktrxI~i5qCoEnY^ttf>yR_{tK&VyT=Pg0qG`^Pb8i0 z*`)Ljt?%)Sn6{ATMD15n%0?HvinPEh&m?}_of<* z-1AN8YY$&i|CZ=e#UlfKi!bI8!)k~W^fbhI#UKQA%K-a(6=8{&P8!_H)6kyU>O>T} z!ZHj~<))j~DHXL6Oem@n5Q?5d&R$7H&y8fQpl&I0pJzmoke<&M9POqMMJ$S-^uqK+ z>f6oeaI<8rh}}@>7N?15v>Ev*E_Nj& zjV$Zs2;!bfTZ-r-$}hQe6>IqR`meG1Wyuv|;H9R%Wy_+;-g2VF7s6e3o?nmNv(~6x zWr3)uuyLoe;7${yB6+k7XR$KudQuDcyFm;V(I6Jd+=h|?q*DIbh`&5E2{)3Bqr}3f z7?VoXCcp$MF3BdkB9%U4jMQc%-fVitEp1YU?kuTHC3=3)5_C~nHgj8;P$830VYqOF z`{&kB*t&v9q$l?5Rvm4xr%jt$r|J^01#^{?`hU}@ngliEZ_O(;D>p|6xO$e`y@?Gf z;C%=)tuu$~C@bt(CO_}>>#7M4y21XUYWaF261MscA#Y;M3ir>ku=)iPFu~~87(nws zJe<6Q!JE>7o3Z6?t}d3uDR#5tIX&zA0_07JN0wQOuL|o0r@bYW-Eug!tw?4H$nbFx z&TpL&MF=6aGI_Qo)@tndNgZvcWla<4_|$G+vE%=Pv_^v;Kp9;EL0u`$WHoEXeWU+J zichq}A*>%UAuII#1b|inFu~Vgeh&i4mA66bf6IeHtoFyTv}~P`!oxMol5Rx**REM( z*K^G>7n*hQIMLJ`HXZQt7p=vu!{aBGsq zn2#EQNwg>2^r>Qd^aP#z8ID7MC+Hs~naqM~O3THv3&6@+cU=OsN?6v(2h#jjK9J_) z&{P-wxAA3ao=mAvI~nruN95@QQ{qyfD=)u_42KaaF&hmC!=EXcHVA`+it*Ue&9(!m zctY=RzbE|!KaT2d$fFG_EP#z-v&MC_y_}Aa-nQa70O*@cum)nRPhkP?^vJ4BD-VSQ z%HS7Gl#T!j3!RdS_jqxsrmfJwp1Zt>@<%axwp%V*=WYq5PTDuthcHfnWB6zd6S2TW zzQv8hlaWMCB%DC|_~@d2mdyYr$Xkd!j7k(v@)qkFJl9CUdWz0LlJ;Ol(jvF5=m|(l zv?;$f)xa5199@d&=7A_m4BlfGWHU}10rM~r-GW?OK-5T1VK?n%@wY@9=h)xf9c}kE zk5Ye2ufB^vO)23k`umTHBLDyUJ)BY2egCo7^UkB!)oa%4MEMT=v~lQgw{huK>+-Gzpm4caF#7-GwqkM@<3}O3{824cGeit-1FR{YEKgD`u=q-_E7Xz-1S0O z*R6m@dg3*YHnmFRQo2p`fy_2g+@?MWTG?<(QvzoJX@T(wzowGXY<)1&<16yq((?v{ z#P{ZH+*EcnNp>K~j?yiewT6y64KyuxD`7fNkO}-N2w`~A1;T<1SHU!PcDu4~bNcSa z*WD_}agoPZTvxr{!@X06<^`7iOx~Nwe;0jVU#|CxRJbSa2WpP z=4VMp=P|6S)d}SjEwz2hEA3F<7nSzeZlBU)HhBBdRr|5y(>jA&`WxUD+Gc=@(J>KC zFCv5Lzuitqr&x&j;kWY9Y+NS!kkT6)c(*U{#5R1HwAhoeJh1~;Ds%Rv6H*3m z)~+BM^28XPcmj3f<~OQv+0i7*<9T9>QuEm87|SD8M>~!^*^D%%Y9nPe!>DSk&%8BQ zALc{17IQ26-T4@8E(fDIE!6xS(8-l>Znp_OTm^?(NVmdD z-Gx$jCAGw&!~uv~iP1vstG1Qw&N%O`(M#JXb`O5BN?Z9lldr^^SC^OhTBd`|;~E{< zB~(=Cw?$!F$WpCGVN(pYc+sDwL|q>Biy;;#p#j`JZr=gGPXgamSdGM%Z}snjzJZ_f z)^PJnTjc0B-uGsJeHu07qeFn7MZiy>&jFU({J7l2C@SonMU(Ger(a*|nD=rdA4WPe zDRGAn@0cUp5w(svl13k?j%hM3L}37|0-&8k!~jqT00MvxU{&%y_kjv%=P|0l;xGeb zO2RK9$O~dc=VA!Q5XImaVgPlEiaWl74atYx;yBx9fN~mnP|hKLB54ia9Pk6~gc#07 zy>)URj|T{m2jLX?kGhWz0cgsdKLKn8@Bnd&8>|S*lr0GhSvgM)IcqU<RT7)Wl3W z0UBQ}2mZjBm`Nu>J68bC0A=#;R3@Ub&yW)ct0iFOndAe>EY_?+2CxPZ;CT-Dz%I{4 zTiS3;EB<`LF3(E_W%$vI!-rV05~wCD$wjjJ0LC25@k?eK-LC0#iQZot%{&I>{DJ#4 z*}Ke=nIt7yeb~G<^b(g4ad(&kifNF=l>%4#3ZRz)FR#i$&2HhCS6ej!Ft5>@Hi4V~ znnunHJ^(gt(^6xuk1s$oZ!q9vReW%xAWWsWNkHZh)*STbEzu*y0Hz$+fdE}r{A~g( zK}M}Zl>xxg$^yGI_>%3=rdzk1^)>@w)`0_pojqv5&YIo2f}P!2+#rAk;f#@zoX!Sa zyYe%qiSwowdvpDF-&`e!HS%`SSFKF$^6hZSBeczpB)wgKXL0>aI2O42R{dz!vHAb8 zq^54!GhBeoB~mmDRp{{>FiOPNcAeU)?FI5z%>t9Z>i&zGrGru1&~+_ph`eJ1y@|G9 z%Vx@!U9iKO`ps$;-P~=i+`98_*5)?j_G@X8auN6?LxIMAB7aqh$X{JI<7AtjArah% zRaInP8o90AmTv2X4RLtfHro3v5jSA1&?y1KK(TI!BcR9;zyUCTPTdsOE3<3%`vO`p zJH+F{irJC*ZZ6*kk#%Kq`%|!~ZgjE0RTj)|^DL?oYB4%Ec5=(Wk6w1H%!dq1;P!ejA6)GgYK0vY z@B_s$;MYQKcpHQpUfr+0X3*RH-?fhJY-vqL6`R^R3fagp?WNHp#wKH%$J&CO8|Hss zR69UkI5J)z;Ex0<#|XgU#Dz+9^s@?v2R(9QwMi|7D{6KdOwSg#ZxHF48?0$WpOqE@ zCb*HSnybYiFCW90qM4)_PkwCD7q{p2LZwt-Cn8{ZJ>E3bCXY$`N#h|l4-Z)wy1=N4 zp4*}CUxPa`-iRu0NfBG-MTn@eNOM^dTdP9AZf>huExEVop=l!PqGFu^hopzB3pW}2 zd8)lFG_g!y+&)Hp$aehNPQP>tsQ1ttQzKY0kvF%etQ?WqF{GJ>ax%e^V5^iPa7yn` zvpX%Z%PHKm%=o-nVjt z+0QLhoTdHsp+E_|Kgb>E4&ptP)gmG+?c#Q{Nvw9nsa03Jo7P!$+S)*y!Wl7^cySnN zW`~7wJ)Hc9E5ERO^}rFs&FYSHN4O&w`S-CB)-c}-e1NVv#vScG;Et(v1#Fg_ zaRsUxZDY84#c-)(jtxZ}Clg-6(|*b(`3K4KLFE}4TXH;vYq1pI#g2~)wo1Y(AxT7Q z4!oF@UWvNYkFskL& zpb8^*p>cEC>mcUzA^A~v%T?i#+CJicC8Y_rZJ3+U9T8BBX+Yf zbu!%T3J>7&Zh`gd5|d{s0*iMmDO`BaAe-Jb;UcG6A)+?R-A_tHy=$^lc>3w25BE@a zBye~Ls5$x7RjbvY)z-$Qw(_F|S?)?!T|q((MtqmV)X1i}Nr*v2PTh={x*{=kXH874 zm%GUmSTkn16@oEf>3L7I$kn?USmpBWUfyAjI|^|$;%WCqBRWlXxy^{BD-uh$*TmAw z*DEhz%?PF|{(eOxe!xV}GQKU8r${c{oQtJ9B$j?iGHJc*@sH@;BjkHDDUXobuSX?> z*1K-Wqni;&R}e>onm?wn3y7ih&dI)3GUy7DXST0z%fuFev))ZGku!qiiVSR9Y6iA? z*Civ{W@OG4S=Tlrbw>D%oSAn#{ydMrpWu}iIWyvC8P{s>MDW~<+_@sJU&WePt=?ra ztqs!V_Hv4xnIBJ+tCbz%C;IUdeh4b~seb&_=xrd;Gyj@Pf3Vf}j9xus!&;0B?&q?) z)x7(KgwC?u`DKF@^0QG8y~sb8P|~j&gwL)fdY+5uxxAUg&hM1i`S~b$uI-+`Rms0? zDEW7Z`<<2iVuCDMCI4QDes77gSiL{U@K*c5OR~3BqCYlN@8#$*Y!M=9s`rZI(pcYC zkw>##{y7(M&qW+f_5P~r{Vkf`y1zx87S{BuD*4rhl3$Z-S|z_8%y4I5hD)M1EKwRa zmcKVt<{#0Y*dlCmsSKj%e@Y--MJ`Qc{#CEczqP@1@1tdu!>c1p>J zq|b^j#cCxZoo+@xP07~2#WLN+|19F?W@OMr5SLIoF!KnlJKDb4JWl+z_~quMBaLSk z-<k>7$!=OQ?_Wk^);7~82( zlY6dt-OJNVj)Y9laS?!D5`cGUIc~?DkXB2^(+ecGJ)^yYBZ3{5z8nbLk@R-st8(MR z(QDpQ>g(Et&sxPrZwQukIv2gimoHl;{l+Famyx{4!dds@={12*#mj5e@6JTuT~}f& zeGf{XNxHJz!=d6>E4_~l2ILX*6KXQ@v~d!+zjqjLoV~iewN={i1HbFGIa?hgE_I(F zSku{rvJO?+4HN8tVz@>(;xW2POR=Md(`P!g z*S!W&fewntwg#uDslC3rFUrE_afy}BD2%GBex%_aCJU!~rg*8Iw39LzE}9YoCKExP z6&(Me%?aQPhalR33*fevu*oaClj0A9^t(?njv6|>3pim!tX-k<0^GlZSz zhc8cR{SNC1&AOe~h^D)p-1I>Zm?k&FDxq2e#0aHfaVi=1Nkc5lVpx^~es>W0-7C5_ zYNMJ-PT}mfN66b#Sy^#|rmPq^4gs$deb=FCJP>?5Rf5;$*02J*Sb^LUm#_w#bUkD+ zwK=m2HCt>2E?TF|%Q}88C(t@qAjFV#)jQtokfd^K^;*O>&H8f(4ThyR1^r^#H6G{= z##z%LaiSdxkwb&*?LF>L_n!WSwMSPTPFIr8mSA3(I{!!wVmpZY`_vcap;@*^M-Abg zxd`IUWpIEy;rrb&6%hBu?#Ot4^l}fhoTgt~;FJFc4sK-`aY zCsd?Y?EXi9taTXPm{l|`o8*+4Iic~iczRvj{p=lvjw1IFcari+VGU2+aY(6hEs zZJi2*sx7nrF5f1@^RQ*=eKBsI@`PWsyxKzZZCL5*X3=I&ujxcC%|+*ucTq&<02LA_9=@OL0u6)pt&# zg}sJob-J;xa|tZWI1h?d%9)s0i;eoUgQC~5E+&Q<#A{d>HvxDha!oyc)8WvGxvE&? z*WodgU1=g&C+1nzJ_EI9YWozZZ8L0|N5-j&vVkgzp?C5lKrbmm@1!C0i82s7Tvf<{ zXpfn2xT)GQw{=^&ZI`ffHVLMacsK5z&fsz=IIueFZrel`Hf*BWLYYJA$DQ;6`mSAc ziFQ%dWcc=J&LrP{`_y(*ZEc2FzOEHsv|gUo29+5Emrx%-Qh!Q znui6x#ky?xR@wD7Tcz5^9;vFcM-H(=;0LKQ9Ql98euCPIVL`^#-6lZ(n5@4_s+{fnmkJA-{ zKw*Pbzl5Te#PR9!r?NGf<;9@wj0hsb*(geEk(B4OGxF~=wk|ftCU!@5wm!4LXkt5L zKAOD5lCnWs|A2q3v>PkiBmd3_+api4Ei&!Y3^qwi%eKfrL18mPd2E$U?35(5UYMaB z^E~#u`w<4%{uWp~v32?#SjU>QqIW&2c3@4~oVxj7a{^A1uma7u+6_x)W%kQ9r(QNE zesybeQf*PS3kr7ZSV$XS@k+ljeh6JVH(FDMWUan~jxjyn1-_w814CDwRNMd=WDU= zIxCbeoD=IiU)J}01T?}KBs!vn&NA(Kqzsd>YFX>lpyq{g49U+1!4LA}g4ft$6 z81TK+MGM1eWCK1an;n??L1L;bTZSpC#&-~IKFU;=AWCAGW(OUcg=>hBSWFTmiRxbP z@MAF>lwOUwZw+iU$Ac+TA|TVwXT_T+smOt3zs!A2E0Uz~LvZg|;NAxi9d)@)D~#l3 zIs%Xxxy{8=SQaElnif9PY@(R>K@J`2>B60Q5e};pZw_0lerswe)76j{UR^U4vq80L zn~-U8c!!`!bf-F8)-2)J*~X3?>z7`)o$DQhQI8&LmiQg}O5q-T7We2$?j3_1FU@Wz zTU=T)$bi(>T%xuA*)@7mgQps*wOg%P2z!*w6lBC!Q@fJigXJ_+7wCDuOndqq4g{)x zPcrUFM#^VA-CiVbvxCs`?5(U_oIHEG{)K)P*=9?!Q`Oa32cad}muBpT=GuNMIe41g zoO~Cv8ow)~*CI{GWHEdf{gtls4vpk zXKk^L>JzTh8iRvFRZWFvVdEW|z}QJy^HFiJziHsZVWB?{cZcg(IU@YxA}vZBNJIYp zoCy|JWdLoNBizvyc=r#u!-SwprgNA(rr!_uQ$qbKwaI%d4LFW;AB0UOo=R=<9!~>~ zR|5iSx=?yFD*uE~K1Y+vKhd2yFVpGQ~1Z|5{+mY8O$441~ zkGYS!j}5}OpW;3qw@~K?Ezc4~zLta4X6eH)?KQQRhBD#dmjO=}bwb&I*$E}098k+q z2w5S85M$OkdIqFML&}w~(BU{*8fE-(HJU_bQZ}B8`?W8Z{8PG+9#DsOjk|m@18F(9Fo^?+h6Q zLVLDs0{MDnLKv-tNryP*6M3K&L@;qC&o=ps)+}-tL^0P=0sMAfibYbnOMXoyKyhE7 zA6q3vp>uj9KH=-VwDvxUP9WZfhz2=ITg{N5*hEBj@_|;za+Q&C9GLw zch>Snx)3P|&HMElzDN;@*hZroyde1qf|7a>zm;(wPuj58lcioW!jal`@nV96M1%1A z*wjBrEHWf3y<*KuZvaoENKf!XTFLG63KED|Q~xX{q(d^wNPyUb7p;kQY)CoQ7P%#2YFM8HQCC@djU4q)X(16tZWe^Va2ol)3~T zq-5$vtig7QSmSIN+YQRpE(kLu_{Pev8Ic7ya+^OYOHvKZ0uyQ=-WZh4T{9+kBw|-o z5=`&-oDt%tV1hS@Pg0UxLXr^4(%xcwXU)d$?lN4U&QJ&y{#{CPZ0>k^h0==>M$R!U zj!F4UMY_TPYi(#X`T zO7T{z@^6eJZZh|zH&Tc+{PgB#-r%p4qs$&0EWf2Nk2o&H&Y6L@EyZtXK#uF;i?TUhxyJR)hExC_+_dmhP3>zMa zTw544ezo(fU3`&I!IOumjAqbH^;>Q`F|}gR*g1j~lzGTg8jHZOumN8dx}3;V3M)5# zDDVd0@)C5LVw8ci;709*DSHpXl45Bk(9TLn%}9dsUH9g+00F> z1PG+yX}!2HLy#Bwtr)~SriN{MJsLqHGl{adfsNc|2^a`ARkTIZ)!t1B<)Xi&I&X_Q z-?sAzsFDDKz?4?~_C{-aky0OOipcciTva0ym1F*bz zN877S<8+Zp0qXLLRsFJ+5ojY^x<)b6hFx^lcd^xtmU|8?(wZ0B?r_iP3K!c>p>Eu2 zN3Qm5R2dso*R~S9(N;HVIWs955zJfv1*e-y)E@LjD;SAkL{K{Jgj3G^l0ICYc6SK(H8yka@5nxgyNSA*BdE{@~e{xHPPWa z4Xsc&<_u|(*)`Xr8Yg8qn>t3L2D8~O(~grtkNq;OQMpUum*djIHqpiG;#VhF+cr!y zvmkIiV^-EnfH#!fLaIQTj5WcdhPr?Iq=@I@$6BLYsk7A?b(Co$42Mg$u z1vba&k{+%>yV-dv3Snz*i4eS7F#!Gl#dMOqJ|h3ubA1@_x_ygi@fuy?L~^ z*$c)AwHF|5Qp}c)f`Lr9hwOngR|S88g4n+xiav z6Pp_RC%QJ`y=BRada>*92NyeNmjd3cRdi=4x>SC=(TcE1R)n&?wBpxiPfdMGepKn{ z)1}jbro1+x;DG|)?*y~Tbqq{dD0d{MJcN#xq!N*ve5N7enOfL{ezk|=X!M4z(`{Ha zreGr?OX`IjFGsHO0Jwl8*bi3y1UsDY1`idb+LUQ*Lbi7`EJx>SDUhT-!0^t&LB-UyLt+lz}b(JG#&+xv)dRJ zH>0ENpya=>5@O1lr+?c5xJ(4ycV;T^_8N|RUrCZp@=4Wr*6LbPJ7bL?^IYdU1g92? z>+lt7iUa2Tk=btxNXc^top99V{c%mt-RAufc7+A+O2adn9|-OysEwNX*}iMI-!(rF z>`xn!aifrt{>J;I>*5#db-QFV+GrYNv)QjQt2XIq`&pJu%Uhh$+v{4r7VB^L64F>H zEFuS4Z3fhQFIZ}g_Xx_j-N@FSo|w*$L_xaZ*(|F0a}ft&Pmo)yKO0R?*o94IU@11> z2saZfSn806ZAjaR#X^(|j4l`o)nPyUr3FQYbUBSZL6gA?_V81tVa_F+LjBwp% zrCV%KZ%%WtEvYXOM>$>>va;cGkUtmhPT3DgXWfXL_711 z(KVx3TOOlGmAjK@Ni@PYSTM&o75ff)S~?15rMV8IThW!qT!8Qu~|pkV`-D13F)BLIJ^Jd zn&5Jyv8}BMws9S@EfEkj{(BKUmV_Rw`ZhJ0S=|=)as^MsRWBZHnXJ}b`^D2G_&1X0 zh_H9pduLseGjca{O_S>iGbz-Ei{%jALrsfX{qh;nrC+%74-bJU|~zhhsR}cm`S}<9MM#Ro6=L|JgMfo_kTBT3NJZ)-0UorrIpD|N7T&5JQ_^;U97qVp6d<##hStC%||dieg~ah$1r4ZP~vDLh1rOs*rl?a(`j;8*>b9$BwrZMePvf@NG!kN|%I*+z>`0Dj9J@9{S3pp+BN8^ zhbiPJQjB3xwq-HC#%fl%34#N$nT^8q_x_-YLs|H|avc>7d7SK{JK9cfN@nHL?msxH z((YxBs+`NhMUN={tC%(gGom&Oj?1msDDVTj`_SZyo3v^M|50d$EBV_+o*i zfg7`;A;y;GZkh`9G7AOH1DI^*m z;3mpYj()!3+NazL#@gcc1!Hyl z#W}bSVH=v0L+W$T1@_=r9nLXLi?|7GfyQ5H3$%Gy;sd>L|}WJ86rlx#g?+PRrLByP%8BP-;v- z{r!F;x+$FB#AfIGcEmwp&JmDW9p1(DiFE#2T`US7ml6M+h>L{r-Y|6a0m2c zIjK3@hKJ$OLAWhVMdF}{Co>u~7hJm(Y(W>9hB~B)xwT7y-9_c>#1n(=;k`w*joD}~ zLaetLZkMV}NMgN>2`|ic{q~v6!gq>*&B88bp%69{nfljIWU_wVGw-{-=sUyl`x|h4 z2Zm3NwMvD_?;D5D;-L6_+uXjWFj1!xV7^ste>-XpaC6)NRq*?{roXiNm@~Bui~#`6 zw}hCdyLmgMcg&=bW~1H@cAtRVroreChhM zdN&W=ZD#_-Oz?-69Y#Sd?mZPLGsWqCC`+O=Rr-bc>*Q~Ah9z1xuAN+$uWp4Y@?O=TkI8Y{lmT3eA&C!n-t`s4%}k*p|F!6|nX5F}7bACzYgFQ3 zds4e1#W}c`<3bCS<08(%#he-i_-#%Mn}edWfuWhvZwqu*5Gk+R!vbxIP8+#M>bUq_ zI4;O<=fvza&Iz3qVdg;~+#_+RXZJ`rmCc+lea8q)gupta5|T-TGh?y0;{hrrmefWLM- z!m4cRwr6!t89tTY!Gzt(fqqy0blNkWOUzQOQJDu>xpXcj2z<5od$mDwbgNkXgKhxXVu4i$d$*ORbOX& zQ8`=ARo_qL`mJ(yf<&rR&dv|}iN(IvW*>^(Co&m}IZXD|?PotonRSsxP=naJ;?i6! zFBDS?qt@-uD^!q$F1NkI?fh)tIWU|HxS{X|#a(5wXK8C_4q?Z#$Z7p7;DiN?MN!qi zH%|2ThIz9X9eE-hbz<6gsz1UV?vCj9N0Rz|?nw8(s>gX(+_1FTa(+lN97k&}BKsVKD z-(%91ueuXgpeuiZ`>@pg!bBy4nj27>llty`>#ess(49ZYoxB{~`2jhVC@2a=pmhp! z-gM|=$?YgBeoQ$(-pA={y7VjX`SmfkMAt#9jF}n{$e{0aBh9|D)GbSvOG{C~;A6VQ zL7!eDwmhM$*oKzNtf-2@BEx!yDN0#WR|X~eE@>@V0cR!X&!bNtcaL@{ES`;47Y5CW z@qTVJF>r}C~FUY>agyWaZXhNQ34uZqDAR-omG_9Hru zwQj#j>W;R0Z&H$jS02tXj?Jt#+z|! zty}N_AQx`Db+KW)m=jGw3$9xX03q!P@Z1R3rkJPzAl!7@Yxmqylpqo0Xrdaqj@UD! zI@+!uyJPS`St- z?yAb##*b%T+E|4M`raf|$Y9BZTy8e?M5P$tfGU&Rf(l#BeaJS^fh#Y8b!v87XdAK$ zce`$zj6lq~rJ66VUT7$EDArnw)ji^Ps7L#gE zu)3aFXa|yPbcYazNlv>g)l3+?vO{+XN5tr$?a7TuN=zZV_FgnZwj8P*$^{IW*>EiI zvmlz=aL~_Kam2pdS5&8Q(Z-M?FrB2F1DQDtu6Ys_rSw-2IT@x1?kEB+ z3iO2MEfLLU0hSz73#0uuRsV4aeY{2pOKg?7BuuwcagciI!G0;Jmj%|SD%R+< zpc$^t#V=|i6OPlx66vyIT@Hh^f&<>kpu-**Uj(BhHi!pP#2?uU{G;}WCxS^jo5SUt z_!z$ETnKapJHjDxL+7K;eL+HHFG!e6pNtnru9*=2&?2)GRzI zxY_Dk2A2u*LxQVi*b$cqOi?p79!#OWg18}mUzaSvvlirUFox#_N?oN=SJnIVMk{4n z&E})FRA7WqiLTX1i{+LC%J4(5Mz<#OJd99MZ#h&46xLhNTSjKv*emAfE*tXCsy1*%a7mw|ov=fRylT~$A=>$cdR^{O zYU709hd6GGo3}#YiS9Fk7>E?a1Hlu0DLLfrjYBjK@Um49(*rZ~0R3cAG25PCb&T>u z#_~L9#f2xZLJx10q=COrKa{lucxnfi<>A%9%qz*lGgT>iLXi+-U3hzPaRKbtuI{ZeKqoA~Dv_gsRF ziThP@hyS%m{8}We4Kw72i)HhI9>2f_@EZkyitN$zaF<`rnl^)vk?wUZ&`(zW@6<%7 z)p{gSAv6liT*S)js1TSLIgIHIzqTZYnVf2ndEW(FW665-Q9^2PiLrg#faq=m zD>JF|gxwPmyDE-CF0-7%kf4_pUB+~iWm&;Z>1aE9n`UHh!f9JY&R}F^b;>_=B5xX)COkZU< zmlm*@h|r7}-4US3mevvWzvh6!;gVb2u!#!TBl#*p+NkN-eK|^Zw?wEE!yOjPds4Pa zp{Yg-l8mPiNVj~5U8EhufXM}ZUG9q@L17z~rOSk(G;x$f73v$iE_9}!(YV6*TfC22 z@sl9yH-WG*+w*))OSkGbx3kB*7zNTyPU)L_k);jb4gbPqI=|V(V_-Xn81wWNN)^vBtLo2o|KPhKMb+l6OWQ1I6qJ`PW6r%Y_ z)$as>Jhlg9hs(BN&xH7?dC!1O$}cVhgFjmaVy@q<&w*0nZEU&Uojx-4-T8hdMHp9I z^?el4r(K#lf?n?#+qak7OB<|WsO~*$EzyFdrb7ELR5km6mbL8z7_9xN(*6xqIsoKp zEdfY6aDw7I8!%#>E3W>XpC0InaxDVlCz;p*_OCH^B({RXyLo{k#XYMLO%Iwq<4I10s_8t9lK4|8$E z(3`iT(<0usPk^YlVa?VgYr4%>PG&YFJ;N^l8Ju$!hw zWk&^r5?TpQ9jL-zUuN7Km?Hl!B@4VYPp=@4i>cw9TVS7UR z53i!;hyZL8f!n?s7Oe>LO_yI|%q4Gj3w~{Nd%jLsE6^hB_w}H=z>b9)>^L9Tk+Hr> zz$0j5LyT3Ua!W9=HvhGuz}o~eidPyk5OOG)zqX0B3+B}!!>8qlm4gBv`wp0#)k)c7 z{>%vtKfPK&qr0>2+|v%0yYgO$ZG@ZttQ84oZMA}*=HKT?W?M89oP+6Zx}jHqqb0dV z03*z{jj{CdQLx{<40?Gq`2)C_-*0GBgAvJz;i24EBrQw-8KC9g@mmb zo*VxAH^~|Px4e-J@9z@Fzu&S{UR2%})nC;5_xkaB2syOq{*b`)y`(2EQM*6N!rT2Z ziMaI3ku2v+v8Gfu;B5 z)H+B9n9*0H^x%~;`o_Gw;<54$Ga3VLzF(ErW;90KEm(Hf+NdJ}qi<3}1*32NUBg>( zrx<)A^9f0TO+u3EWd*KN{06oO6?z$t0PZFkpZP zdnW-VkdP=X287HIW(Enbq!6Nlgd)TXmK!3kB|u;Tf)we}2{j-^iqh54qzgy~L5hGN zBH~N)Rr!CuYwvUJofN?T^ZftM^ZV(9d+#}Wuie*PeO-ia_$JA~+?c1onxfGpm~&+6 zi7GPwfo-k7DQ8>29<0KaI0Dc50r*e!8w9Lkxh;Cp4$H~Qm(K_@5pnq;fzu=_Qf?cXjZ>7z-*VUbSckqpt>6A9tUMpJo*vS^y zo_Gul%P3Cr2#V&1X*dcAL zXJ$k4EOs)55!;%xoJBg$tn)vRYRGqJVC5b=_o$&K1N zIAHA`c>S1o#e@j$Fpwqyz#LPFc%xqdZe@}~m?b20*$ywey6hnx`^^n&bmv|pRL5#u ziC9diU@kGDm)4}JnYGMZ&a5SvKU%x%pwW!E=tf8t>KLBW-8Iy+`|zF$vEl2UWdbar z#;C=9J^ai_yAm5+pPD$usX6%?Cqu8LW_2evDj|C|fqCa+s0+1oBUOb;= zACmIIyEA5OX}Kar8Izb_dlC#%nSQO0Jt+=Oj4Ru@g*lt@~S+DP=7f3CIM?@?^_LQV+vC6j6-ijoK0ldY9uOJYTm2S+90A?#}c-h=^!BiM=N-c08E{I-nVOy+0!?P$jI z^)=taY3zv@WQ;bn7?$m+Wx~ZizXP?*mT`K&Na-Ora9Qf^ox-G(8`$kMxddL+5-6J% zfMx<{mYeBjEk-v#!|g1=K+8BMaVFskOTV zihX`Awf1mx-5%5Zo(w0?k>&QbI^#>jks4Z85E{C#O)d=zzp!Hzpm_i?8^*;1``y=7 z>mAzfV`5;A)>*s>?bE(&1l*s06YaL!>N+OApJum_!ER_D+EtusueylZh|wVUDs@% zB`C=BP`R89lyd~-+^ABYj)0H3IxlfcB-yJ;z;}KQqupN+2XUdP%`X5I;;x|`dyzzX z0)DZ8FOBAeixKeg98<#j4!Kmqik~L#Qst-WBZeZa=Q6$-lJOwSG44uZTJk_pLhEC$W& z5V;)!y_+a|vlOwnn6=<7$pMnyl_w-?NjomX-CsxjcuitE{(eb~TPcFnZp(x~ViS@P z$nC7??NW}T6|YHLXE5#zFA&w;DW!K!vO3<~#kafTyxt?R+=N7GaRYK+%tBRD7)Ac> zPUa(fle+u?*+2%ksK3=Wgl|aX9t0YaI9rs5rQ_Bpk-w?LBQXh8O%gc%9s(L7IEp<6 zwBf~OM+*12E#?!NWh8D$;htniB7Wo5Q(DY0R3vcL5P~=Up00NZVVu1{49DN^1w91o zd5#yTw?VSD`^O=gWVM|1EJHci&A&o+PDSD}($h@v zu&N4vL>LH+fVaT-?&J8ofdzj@op$&;K4f^v$6y#c161J(GL^Li2}4XvI6P`~&HBzr z97>La%adChc6U{IRmRb@x3w-UTU2jpaYb7X;!^?8q~$HRs4}y$@*-n=<9`jK ztR+w~D~2Mm`b-9h7lv5anqR{(=^8>ZHug^;Nem1VWCyBGqY3qjjOzLzYfI=%G~)Yo zmlX14C~f?p1GVkeYUqT5scEdRvPSP%BOaP0F!2OTQ-lH6@{gCNd{q0$G@GSO{Pl#s0`p^ftJ<(skC7D&2^=hYT*qiojJdhWocwV_qlVPnW$ zsGv(fg2fgo+$<(r0-u7jtNA8dpC;A^v&Fm4FFIQ)&cUX@30=FCcWev!5Bk)xtyOt61L))RxuLE8;HhMZVY2w)n z=2cA1QQC7>b2QYQab83-==`)_pROr~GJcp*TyO{ij7;l1Se9&T0jrir$fG#x{Skt+ zX05ZRMbV}YneeEHlGE!~mc+;4Z%((&p{@$wWlxIq6FAcqM5pCX4qb~K+ln52o^fw2 z^*5fJpN|B15h8phtXCvV>mkBJ6Q=%#=>mk2s6D=iqRX3bY|r#vtzMFW-$))vcq&K^bi*u zZHgjgMHT9Gw!G>bV82ZB_|xUF+`aMvr2bjq1qQQn1$mwVSwO)^aBlNjKr2TwU84dSLK@*9ko!SR24>imqg!GRvJA7R_F7Wq#~+MpPX1Nq)y z=D(`jms>#lMWevVe+(a3`71%TNw>Ig^Qh*Qy-?SHwb(!Uh$Hd{7JEXutiG%t5g{*y zz#wb4Ir5J$No2{b8%=^cBA#Wrdscnxj$^GqRe979lSmYHTQwhGuKrsAJu@&;{EK6+~Szui-*attIFVK^G>1a*07| z3GKrkX=`1QB&+8n;i|WY$j@dj!Ze6D=d(_kYuYjyq<~t3*cPIPi-;cftks^GwHP56 zz?v4&=Kz*xkZaqYa~SEr1EK#iH@twgnucb9t!ldQ+FGAWlks^EQ!v=d<)tuAE@uLz zK0}I+KpYfoJL&+s*h&WxlUBhbgCO1%4x(AuA{wO(p={AbhAX*|=^l*V6VezaQSxw2 zg$1%x1MTW;PP>6d)~NbVbsm1?`O9Qi3CXs9Jrt9yDXr>AuHvlc4)Gb zY-aYxQ!}L0%Xh#j^%K0>|G_8NBERV%t^EAzY!dgaAug7k<&k=1#1R3pkkGAtfKIJj zw>X<1ZJkXY&L)b+rK|&Xg2eSi+rv7Q3~7(k>D9?3fMCMug<7g{de>u7B685tE<#l= zWMu{_RCRtZg%HP8MHc7Fa(Ow~D&O`4I#(U{p(*fcSb>_iVc^xw1{6L`TStCNb~INE z>ImI87_yIIaA_2?{on1|I2@)KsA<=$fVke_cAzcl9$_9RV*9=adbFt{#6KH1ot?F2++Hug`ND#-$lZM*yAXmr->CH^r+l^f&f#%%CZbHpZ zr16QO@=K_Cn?ewrd|Wt|YrZzohax|mB=XE;s6@hXo5m<1SSKk+lOPz?+PzY7s)4`* zs`9k@L|LrK6q6($1e7ZeK5xu0Wk>q0*$Lb5XqzhH)hS`GxUJh-??~%0?pBQ?QH5x? zlp%b;kWqm+kcR{?RO^N-R}7gH4Aj9SBsqe^UAcjJ*$ow;%Pdh4Ru~)g3oQGLMV{A1 z47(qi84h9{-VNcbN@+M0G%6H|;*e+rf$IgVG>2;z;Uf?bDRx`lrXnX- z3Y8PP>xaEKgkuUu>^ z$Mq|b%N21kDu^J4LmEAvgPh88SWP?Tm1pc+72&IUmove(G_pnpH#sL0O*5|aOo7+0 z(Eq7W!+_k1!)`WUDAXO%+N1qAk%gpLmvxW13(SnSA9o+&UYOjm5n*&dAyqi;@S$>m z1me_i$_qmxV!TM!khe?t2xiCpA4MKn7wn*KrGqYmp-mkU2!dU0nvY)(Hv`IMf-+DX zi=BD>3U+~8aq^oi9G2iIjH@C_5W+p$E{>GRhZuk@yU=@@LS-@MeX{$!B!X52y^0EK z)78vzCkRX*f!t$opslcH&xt*%8rUL?Ns;6bx(kvK_jYUgSOeIZv8 z61AT}#z-(xJItY>w$=-phRBaa{v$$HEeN-Um|`|Lc*C4zNR@+r<)rdFFdwLBZ{fmu z5cN+AXK@F}aG{BCkHoBXgoAc1@zkNL66f8_6q{IU=5khIoI6Xn3b?(Y9V&r#kejE;Nocyz0Z|u-=z!j=>ti_}8&WT@)sfQ*v2n(;qs^S4cR6zc zI&S$y#I%04%Yi<#)sSRO62WAMq3k}F&x_V&GRM$jzB1_*u)e?$zo52d zl_1Og9m2FvW7-WVR7vd64mK#q#Hz%B+5rvge^u_cQ#k_|<^$ckvM^9!mR+d1OK5-= z#+UZ;b3`Vap0&ogN1xN~zhd-d9xkS{8Sm%a+*iND5&yE=z1z=aq^4r6`8`bvyQg-C zVC^MXxev5@u2VdML%fgM_duMVzvkw3`>#{IN)pv-&Et|0Cw+hVwSRrm_x9gl#HM7e z`fqiv?Z3^yYErbiS|R(KPo4SHF;ZfGe}K-}0-i0XlDqCZ5f>al7NDl4UJhl*0+b#+ zGC!CDI-g$^jUcSZ!4xKin4iH1QnYD&KqK@Dd-Z-YVt&@g5%V+tLt=i;e?ZLd8qx1G zPGEmxKG5=W;AKB4EuX{c4Yd3m9m62B=t!ZvQM>vCSzdy}=!;y@# z=D$gE-z=IV>{HR)x2g8+`Z7=9q&K-553KQB{d^tN19)~oRnAxOWY2GFeLPJ@<)`@* z@LDL4{;%Y}nZ_m>-8Fp$Bz397{mYAk0CGpMql zkCykZv??L(n;1w%CJYQ^o+UX1$qAa50hE`i_D3+9tGq;XdvJ+}UWd^XR)En2|L77i zU$vcbMst#m)mAW?t0NL6UCQ$M8KDP55iRIx2u_&$1GlsclwUAm$Ae?=Bp*zQ;W;Ol z+68nH7m#!@==H-)7F_5g1iuO&S_u3^f#sw}V(7h$h$TAsBdqwJ^q}HNPR~Wy6SGCc$tLoUjrY&S_jla1_KQMEFWN zu*!voyv*-6!kz}hNs$g1&d)66R+<Z~D$M+MeRGuTE(b5_N9sta(P`heq<^VlwqSfpq|cgZ)39&(3iMOKnFna-Gf zA0Q_A-RPwepKND_sdd;rK(*^^p%_cK4bMS@p++Zhx9zEgCv0Kk1nb?=h17jdniOo|Y zHcxY~2kaw+VT@on!yf=VvjVL7?=ZaY#JL`WJ>Y>75BxV=kJ$q*Bwpcx?t4)@@O^su zef2UpNlwEqu*v;E2K_d73o&Q46w9-)4QwzCq=iLh5N7j%h2ThkSQ0D*t5^sk0LCb= zb>e$rKGa>;+*= zj3IkqBPBw&Wi z!ZPqe*#}D8G6Ks%-d#+emL?#03f2-^Wp3I!%>qLc+;j-JL4@wW&?rY?S)O{ipu9|cJACyjCh0xH8eW|e zY4D#e~j@Mil)eU0U{w32IZ;LJE?c0c2okm7=d zoi8*3-TgEI(g);yb6Dkg?G+`N8tzB42)X1xN1p339%TRZ@u2)3U)s!Xz#uFrOI-uN z=q*1>V`)gU%8Nl*K!tp>FlPC8G6eFpC_zgAuNe^4VtZyfX)o$Irl_%Ls9{N2LJf*q zQkL9sg^8&^p4t3Z#^71Lkv0=$mV`yIgl`JXVpX!C*Z71!$IlM5c3#&IFZL9d@ z(1oucGWhaB4ATaezZc+h0ibPU z3xjAw-iOU#lE4@*%wWw6KnRE^Adp#Z-a=#tUw8XiNH8n2KmFOCaaw0PkPJ?Q+#2A% ziDb}yYYbR(QOSLyt#$Gz^AH?g+O(e?scXWpB^%HI9uNaKD8~V-=6kU=m0s1%Mz}dR zA$D{8f0sfv3+H~NdRkgv15C9>MAFtX_%xmN!oPC|45jLJQfvoH*=R*EdWq>vi|Ap! z+!#r~0i?O1voOO}QU% zG+iO@+&>aaTRh<7*EWw!94@7gTU%jt20d7YOorGQglT+xAO`ALj2Ms7cZ8zIFI03G zq?%##p5?GP1q-kiC5|~7(K*O&{$P6E=&D}iN`$O(U4q@59Ah>i4BL>kGSL59CpV=Q+7@}%I{Bl$4MWH_B-O?k;uansG=1N z17%cXn0h1xQ5tNzdJsf3m=Ud=-(np;fRKTSwAf?o)!kRa*)ZDzD)w$$I~)6lz7 zztHcpS{fdG)y;<_&T|PBWX#+}sWEK%B6C-h+|_Z<7M)$Vt9L{4){U5~2`L}BIxJ&S zygICoCFv%xGrPg$O^re`xAsuXmr2>C5lqC|$!e_Q))A8~=jU}7vLTve{m^Xek0c8| zl!7o;snHJGvV{;oCV^^>3=SUbZauwTpXYg&dVsfs=Z3QLFz>f+ z=~W^@3(INXV)_h%Z1Qsw z8cp_tg{Cu=X53hl+ge}Cn$~YX7KO?3e~v6f(>F04MiBQP+FVHp3Z1kL$l$?P4MPT3 z**_yuTWimRScN&;6q6W_ixf20!^+4xrj9wg{pvJe*^NkDY}@8j!nk&n5m^?vqd*uv zY@B++EybIN*kv8|li7dv^t%Uj3o`B2<9=4*!&kHl=b#IR;+GM6EbKzARpn8M*u{wA z0=sMkb{WU}V0P#?=DbZ{QYN~MWCMq9M!+tg0lV1UHxtA_I&mf{c*AdEsZ*pmb6czp zgET*PE#Xty}RQkCM4UkPfXSk<8QgrgDlVI(e_3*3>GqjY?XvT5ZArZIuUTzzi#xJ8i2chetq?k!ZzZR8U1hy z{e*PuXPu*@?9V1;G5W2EFmoGgjsqU9RGFT%HA-l=m^#BS+D8k7WOOU(~w-za;ut`sYV5J(cB zEBxv-jk?9Hegup>b61hN#eHfqmtWbfnX_c}g4?gH^^t6tvdKa@pZy=js7YRt#Ci(SSO})bV4EHqhIF-rfiu z<&*Z#8ePjGInd|jm16N~rmu>hDRa|*S{K|pjY1Q{=Ck`@b5=lHP3T@fbiNMg{PP^< z1~)sp*FpDi@-ZsFhGfxZCvmxFy4>rNvJq!!9Q_OsF zi(ZS<=b64yJQ`(|WO4e?T^~7gT`7L^kj|3zg;-mX{e^5Qa!?lCtbcN}&~uenYPyYc z4Am-gB4g(E<5Ulc4Ga;+n8y@BGtcD%A>bT7unwBVM;YryJ_rIel@Cn0r|^ONcq=|Q zI}=??P{mFzP2kBOSr`wIg;^WB#?1V?{V?!^@r5G*CBym{@l^ozd?+MCt}09ey;66~w@p`?~eQV$s3%=`yn5{e=Lm zI~%Z2Chz+a%zeUHfUzf;C_UatXNxj(A#1FtN%+OcbO`vy323PZ20eq_h_~#ML z2YsttP`4?Dr=^-wAKqN>|O znu~3pK`^E3LX3p0I?PGeJtUxnb0dQ7sK->I_$8^4|0^eV)yU<%F>=xmG&fr zz_GDS@l`r&c0xVN*$FY3W+`M4zST+6DGRbv#W09RQ^pV-46IHIpevTwf@ zD%F)KS*xDhaM6^8SMvzPa!4dl79}{wC;rgHEs~zK&mX3{wl85r^`WCe+e$>xsA`oa zZh-WxL(sEAHE>O!Mje7KRoc6uiqt#=6|1y&t4rHD1ZAu0tR{ske?wxpyQ3||%F!rd zkKv(4gNBtqC5&4VpP+U<4%O|F#Q!)Ed6+9)`%t!WbWy9KbUl%%A~E9$Gj&SBB%W%y zPfjJ?#!sTQ6{YIhio#Mtt%`P)Xv;n5RztgFdL!PaDOk^<3Odp=r74|ULeWXbW)X&k zdbvWi$1hR&^AfbGC{q=Ng~bkmSZo*0e`t^i4FV}iMt|(2d3JUKqcC8L@8=%o;0gg5~V7i z9q3a#PmzdOx>VlrU*24u#0VKEREMBdm12m}V+hp(SoEi8SAW4IU8mk$FLf%a(;9i* z=*Te42ql_&L=NJNQ@l({t|5ewN5f*46^w4fHtjb=q! zhKvo(T#s7 zZP9<4TAM8yBw`%bx<&Tnl)=GT=!PjsQNUEW7)4FrKLr;fq&>@~6ylWNxiO5&L_eYO zAQK}|8F5OmsRJ#n#_QGWbucXAHN1%=T&uISO~lfJ2v(Wa5J#htW=pTBn}s$hYf`y( zJZ!^HTx>!_DTk5|2OYeV0;%IkKz5WdO#=(H(xVU+W3)O0_ZMlAeAtxz#^ zNhNK9x5n061-WD&^PMsIJco2H)~~jhFET*`c~+sLtSFYs{5OY zoydaM!0dir1GZRr4wO)cQv$8DpRBtlR7c>V>KJ`3MX~sKKe^RShWKa>J_8H<6xhg4 zhtI%#;tj5j9r9<t>nl^t5mdCX%CW=)_rRxeg`oFM9t4L~l>2YMk&%|=L!3f;S55KX1+t~2olc~;dZ0HTFRVj8NRTbnTGb!YIm|E8 zopNZ%w+4MtY>&fa1#=h|eq#%e9brZm8^zI=EEMfQG;+#aGR2ZH#MOWZIl?TvAV9+U zKz#70@?%|=Q#;Q_-r5FY{Pk3$+Z zv-b*5pgK;VVJ8X%n&iafAX#});Utn)tzhL`mXgokGU z4Em!9B1E{@=6%@|=o1D6X#$;cHYw2{Nmib0jZ){S_Ib+<`+Nn9v!elhk`(kw4f=#} zUlhh|TL97|bPP&msdX$TPI)b9|ETK!)c1uXhwmir z9dej7lj{Ms%zFvR9^8Atd0%ioNZk8M>rf-b191M4kBQy>zra%ce=5a;?wo(c2me-v z2Lb#rAr%B^9^8jXJdlf0x_W3D@;mgdI=_P;vmS@1T4?e$knG`zwCYLg5Dw&#%J1Ng ztY=C%iZ^6ILck?Vmh4vp&T-Ib}kl6TGiXZe$>Qg@Y=zB+Y0yqeP2*gJOp zwS2LQ?&o>wU)W?^m%3l1?m8yp`qTlN3KXT#^=ai5L;N>T!QDV#<7(fi)xIfpH>U0; zR{Lhn`7NotId!)%=fBjP|59_#jQmPfe-(x)#Gu~(I&Xhj>Xun=Z%rK!Z%r5a+wym} zr;fkd;%wa^Fn0tn!M2jB6W|a?um4Ue^PLtO5KyGdkVNu3+~ft!I3Yk;$c(9r&px;Iky7l!txy8PGFy_ved(&e`_w72pO(~rNU?r#R>?bz1eQ}=fsjPU=H zI{x0K8}I0mdq>T~LdK)F_{q%7EL4@;<)cwN%|8MH}`+%f-Kls_;=bh!he{$f2Zz4(8r>T-XEH|MVUJ^tNFt+dVg3} zM_hfGQ0U^!^<{2xR`rKxppPRmHq8$+cX;NG$lMRJ;;uZBI9KjSSnSxMQ8P#J(D1>J zGRZ=Y&fJeOcQmk$$=os7*b;a&a}+u@+oB|)=5hAxI12n&1)RPepSk0$=n0wQ=?PY} z*`H`dPo%&}R#e|k&fLjX^pwo;^b{3k$fv4nr-rU6&6G{XPcl~aw9Ne^bEjqCQccDg znL9mmXD}IOYBJ7jn2fV*GS1H2S(!VVrq0o1oU6%LlDTs-cW&mE)FudfWR(Q<~@Kg-4Va`o@a}xu-IdeB>QCN0k*48>dDJ(x%Z3SVW%?j-<;cR95htgOY zpK(E#YmNhi=cAeC%HIs(x3KRlazoW)6&KrVX=}YDOE$^1O=)MNS~`{~OWCwS`U#2o z2eP~tBB)AB^g>bj(8l)CPO}^IMIVBy;RZ;+H^Xv6bn2`ik@-}xt#eRNIazcFH%uCA zdvB&S(+~sM;MyU(Oy#ry(a&ml0^Z+;KvLRiB@!`zQU_Xu2!`uMz zNkz`>sM60Vp;L~4WyQSBQ!)(pqeG8khT2~Js(7MBXuO!2y7h3*GZi}4SK(=g;_^>J z0%T=KAfn0Ih{-Z5Q$_XK(2Yks$Ec*8-FN{Od1Kv#Dz-Kg6|$;Cx3IskFjEG3r2i}{ zgO5Ut&>vUkvu&-XBuOP-y;bYhb9+*{z;i-$BBmv^iGM%HG^H!!fQJJ9L5QA3%H%&e(b9M`Gr zD*`TW?;8!blsAZg)+#jE4c0`X@)Vgpl=-xHMhoc55LeNjB1T^c!6NUQgFR<=Jye;6 zR}Nv~44N4%PeY<;zbqrw)cRK1&yNJYg@#+e9vb1+F~4TPccF%tna(tAAoXT6rA=o&6sTwEi%gew+vzWm?w!&+FH*`TY`33;_V=+ zZtxmeRmP@vhefTKdxfB^Sdq00Z%AX%#MUruv0|Pkb^|kx6`LrH!Hp&jCg`2byw}}E ziM6&Sjz?=rz-#*Y zV85_7RnXQG>69WPSQN*i3@{s8x6YVgST?e)^_op~4^sS~ZIFU}1O5#`GB3&fAkz|r z?^4byKeMF&;d6kMk*Uxc{2Rr;5!4;b=TORM>ZQeyvA(nnxh5k!q=oO&Oax7YjGaSy zX+OeJsjOo3sGi>I_a2nbwFzN4m4`Z73N>{;l!lerPuMjMutmoRYPdxf0Fc}*68=N3 zw@CO8!_XolfJ^krod8=y?A*=MB`GUlp52p6=ZYh4<$3Gm(m9E+_T4GcdzlV#xV!tU zsZckYpu!$#;o3_%R-rsdS~|g3Vu-4w6Uw{#5&eqPL`=YzNAA{lZj-H=_|_+kut;kn&NBB!iYhg%~2V zWTAa}FdAq~)XdCTs^-x67QizPpql@j&Fbeu^8m7ZZ_P4~th{bF_Ex~L9L+V%Y;E=tK$HZj z-KV&I@S9s9Gid61D{I1oDXEjIVJX}o{nAh~6?C~#2R++#Dw{qc!fsPnza zB_yVyU*D%+mZ#-Qej&X#8-bcXnAtekX2XVf2!$2}!ToF`_>?K_YKkbUeLVQ7&&%`5X#D_RxK#@_hd> zEgWx;-byeEkTm`TWbh}d1w``5=TD-iC(8=JE|)N^7zqr=NPvm`i6w77RYLhg|Nc}>?4@kJp zOx=j|NK$y7wj!q|8#7%+F8{FP@--!aX>pGL7sUlr&3GR*vzNzWE@tFL8t)TPG>_a! z?I4;@qG%=83~+CSag3*Z$=^%J-+}XY z6T<(UV#wX!j%k%68o4=!3~XKawsdY5PAUPDe(h z8Ahm%-2Gn|7X91uDZfMa-%&ngpe;f&lptcSNz&dzBIU^?HY1CB1Gq7zK;KF-Dr=L1QWbN!iXf|Z&Jb{4viG2Ya z0(Rc=oF}KHmHW&90vUS?f_7*pO?@tO??&j(FwaslWu)xbS814MYnYTm#NL9Oy}-3J zgI+W3T$V@x-{O`amOW3Rb#LN!j=WHqzFRv zpV4*p1Fx@5{8gILt5pUuImGidl(|-dcK>q?^V+bQW3%@`eCphFQMf)`!u9J_suj_? zzd;ZXpCehn5eUfATM(s-yfy;Na4ceV!cnN;FHN@oO9~=RXIXx&rhb(-1&&>&rf!uq z9U=O33DIv;saB-w{&qpQ!=&kV00E(S3qo@>Wn(%gL2gb7WaY@h@1n%rHY@J#0N-}g zJ?hH6YUDm!Dg@^(2+gY=Ir#&r1m-4D*MIqbPg=Ra=r6?PEy&I{PtOuj4hTf)E$$(E zV4Lo&6q!2Dk)=PJB24c=fKFc!nm;1Zc})`Z76ji>%PuWU#(4v1vkdd4tP5(WR5u-n=Laj*Jk)#6v3Hfu9lcSMTGtbkE2>dDvnM;dQ;t z1?V*d=mz_Ze7@=WU)1$CB~V9>-i$?)ABRgM!?sWaU~SEfC`J7G&nwhO^d4(OVFu z$EdggM<7!FClyVa-hwn;6(jmUgx-Q2U3TT66NuGYkg6*_E}$1>{92T4nH*zx971-G zDIDk=m4;wAEThT33~@Wc^)De~XUs^{k+mO=Jot!=F&|;_;7}ZSdkeDmEwXRN`bX-4 zgzewegE{`FtZT4Gw2mnKN7-V@*+HplkDX^1!7&+XXJqZj)Q`>jkh9Z1!gS>AKh9<# zVyAt?>xkM{X9Eo#(SWqIC-PB3Re1JQqZ1FTlr3GKHZ%kDrLt ztKP)uh|qDyxiAwhy-05^;tdki6`AZlKB6Ab*OR|4~pV-Ws<46<=&Eeyz1wmbqVNZW$AJ zt3BtC-DV}Z9dGB0t;QYpiq*JNTjw_{322mO?k?)xow>U+e~*^rUR#p;^yWU^+@HDo zGyi}F_1nw=V>X6}K^(KfBp9&hi=m*gSAc_?3!hcmvrhgp)} z3E(4{`(5T90pO#WrAOnEJf=F2<#S+HjBUxsHEB;|?(xh$0f;9B;;GC%nYpI`@w7lZ zoli7V@J!~OVb-Sj-viGmg=aJOY_`-tmw{*gkh$kF_lInOe?D`Rc%HGokhvGA(d=JT z4_>rh=jY)i1Hv)*BVTOlU)I#WlDU^N_X?F?<+)AtpR52A{hB8Fb(`ov^UVF3Qg3AL zjm-Z=6aA)5^k4Pnue^CHb8lt-ZyMv<8rk172c*9#Gr zV>q+ycz!0`IjiibLutO8QFf=7-6`c^Ox2yBa;O}vOKnt)^QU~7kifoO7Dje?*%)1Gksm?e%WoA#isr*X=v?@XmU-A?SW1sCSj!Z_4g2 zpx!O0cL%6;X717Zd&};gvb&e}_v!t8<$^7^U#}l1yZg)T0bc*M?0!pSkEoeRCW)SzvO?Xx{s9I@5=5G>OLyakE&_3?T@Lak0F3J4hLlTxE?&t z1C$obBg^yzPmFGO(!NmUDZbbgKg}2aOc~Vod(GjqYWF#{_6Pmv`Lg>1xm;=Tg|Y(* z^{M$x+5Nukp3VQBD?8pkU5*$2i$HWQHm=S~g8av_d#UXH$m+Z-$gh;$%VqZpkYCkc zUTs*NKb75|>Z|jbz`eHI>b$Opuji{{WBjuo{n^UduAfjX(hPq~<6!yVed$O|1aBxMuVx%@Yzi zJ;*xVG$1wKsGJU9&`G-?F&DQbteKEB<1wu|7N8cN>CUJ{{0`m-Kvt##^wKf0IEew> z8d6%Km)1M;nvNRnW>nK_PDlo$&a!u;<8*6TieZ%;+4-wVP%RRM5{0TIFEI6D7<60f z>%%vZ3Q20G{NET>|%UxHdnb%S$F zIiLEENtC-q=G;K(oX9gPw^K{eO6)mh#d1>GO5)MNCL1IR1eSYHlrNAR%eA6|M1|CWdm@gu0tLVifkq&>I9>sQE3JyDdahSYIa5OLIacI6X?85R@KA zRJT>UrVl~4G*GFe#wqj+bt=*_>0=uv%CgIJ`%V_8%MohM5~12?w+$^Qo5WO=-mddt z{6Glv+wFTOo##Sz+Z!sizMBU~$?wp$OkwGFaMSt-Mjz9j&hTHPmIb4)`RUfe^f-tS z@->~1Z0cv)8MK&kH92_*M;lD@mk)Ko zG)8^+dz3;<-xJ{=5h8=^W>8N1?2JM!c^_!_R-+?bzgJ)_7I6ahU%>;cwA8* z9}jhJ|E~9}d!`)fBWm1!^6$W(&iY35I2HP~`c`vfmRO8t=v!{SkQW6i_?I4_j|HJP zIVIeJEt5@SZHwKDZ)w*Zr4YQg&wo$fzmHex_ow?G(6NQ?2X0}_AH?=JsOTDQq#D{G zHZ<7XL+~1fFqK{?tnUaZi4HTXM=|pe8zz3aE!p%8OTmim39CVT4m+Ur-D2cM82Fxu^~j+9Ek`U|=j0byPv9 zicU`!OE1K$Gc>IF#z8f7W)kTDTa2@$D-xKqBYc$S{GE+rhFqFjC!|{E0>1+n)6n2~ zrWslSV8fCXf4=lYv6~mfLKj-B-V5?>R?rsV&>>`s#>o1;)FSp?ObHhnx+FnMq!urY zB~TmjcPRmmNrbHzmnn+x1eA5?i3|p6BGVKpqO_GjTXbbIzBEvd9azL^ajw>qTob)a zr3OMxB;Sr}alXZ`v|K2E=1cig@#qr}{a;V6`x_Kb8FdPpj~n@UQ_{(n&hDLp$f51aA!OoO@N_z66~Q8lIXIJ@@CuN5~uF0oxS6P2ypFP?{g~ zJAEE)53e6mmk_JdsSb2LsC%>vey1TnBFzsvAIL!U;?W%JNdK5#Kc3*4;U4Gp6N!5w z9eKc5LwP3GNuEgB0_I`EHkTh|dwh5d-fG89&;Cccm6mPu@$qGAW7Plagq$ zltjGxK(LuM)ItN%4RO`kz{jB~>YOOAjDhZ-Oc|P@eHX1llP4 zD`=zsc6Py_&1~gFs+&QZcCS4dNb6=HsUF*tW>m5*B8fCOds2j@5(=>=gDGQnIGS;L zG8D*W+9o7oPbxeys#N&Eo`jt7&_r5Eds2`?ocFfYs|J2r_4t zM#?zwWtWE}4nsGiG9rqJ9K^OzGz&&$T9l@)G?*^+`4+lsg!c^JNO-fi%_h`pL4PaQ zP@7=HY`aX78HOo0@GyZK4u55F8T))YAdT2td7>}_3DK>KX{`X#i0)uIre2y?FnLP2 z-OMJm&#wzery$icpz@LiD$kA9&1oPZ@`RR&!>C@G0Vqolducwv#3SKmvDjOEenUW7 z*sU2W4ZCF^2~MpGV`2b_L6Mut%14ky<P|%}-^0rWP=_ zbK8k#=ngRD^xJKOh>fAw^$O=@dde2Q~ zv&Mds>|QWubuCg3L9BrK{A^(E0)4m3jCu@VGKSI5FBdQgAgmk=1Q6B=5mLnMx_LS& z!u+cHs$lLOUe0xM^=l8ehueLz-_ymgA~Ffui@bX6Nnc@CX;BVRm$-C4pSdjJi%e%= z9;e(+#pdZ8ojj80!I3^L>>GZXk!3?9!d`fz{*efc@NH#}S#`5(#TE~^W+;8tSwi@h z$o#+h#qd%DucTG?D$%=Q6dDU+6?-zL?k?Z$SK=;D1I7U@K2r@?AS8vMfFYnCa}>u_ zqp_US%Ab-cX=;jI_Mlq+k9)1>P#_aN{*yW|cdA?ta&P|7AN@f!~u({h@@DjAJLT)7|t4R#AN}Zh$qD{*cIXZrlp<@Ufqz8gO5g$1LvuY)X*HbFQqFZSAnu zQ;GhW{4)3D$t8ek8`-%m*YksY$A1;}1J=qydDr}0AkI~$n{0e(rr)FU!-Nw_a!$(; z#tGlcXdu?y?Vax#75thCn&*AZ@5@N%xp^Jw@#kpMeBF^3?7xWclX#2pQ}g@VLE9f( zq22opobKsx1(YwpeT$9-^|})5$n8 zVQ5Ds!Gf<_oSE$Q6yE1(=+0xHI~ngWM$9s590jt55(d=oF;5}WuSw7Qe z2+kS6*k2xx8S=}+*q-6 zuwrOgfm&a>%dM|hG&tMGzQT)T@M3UguwDyb$mDH*HLYGF%RKeQa=JRbd+7ihI9Bt#wXP#Ha4h7&cOfg#(tN7Q-Y}#UfSy zVal^6NGJ`cx!U01K{|-vB+2SI-}MoYnO9<_>i?DV>|!1OtN{hTS#Y2|zL}*o*0bgZ zu^|VEU}l8P-Ub@IspJ8|!@(jvCnSoRsvFwELe^lyi1|e#q0rE98X}EQz{My=7>CiG zRcS@y=vQlN{dbxa;Vf6J(ZPXG&PfbIJt`uHcKarJZJtRr-=fV&&*hv(v2s1?Yd5|t zG4NDPJ-5SQklI4YmBh8AK|;SP;&5n__);41>Nem!hbKXGJ&ka1!{*8nkfPjiV9k|6tSz6)54d+qf!9IL`n0w$^i#r0o;zqp<2y z4B8Iuu6uXZe6vk^Gh>UCx>ACpt`tv?W=9lMsBZZdY$r87C2(o@DQCfTh+W>fEQ%hY3nBZF7b8&ok@BS3 zj{u~iq1v+|8fxWmt>sz~#@eC*En`5(1K!oSB#>$r6UsK}Vy<2~y>icKM{Q;rLpf~V>dk%@lHcCD4*Py>dhDzBsJ7Pi6ur_8zV_E=}<=vbYHE)4ecKH z{chw94q%hN)fA5pG#hFZNm>o&in-#d5;Kf1Az~1_l5cw*0h7Gd z{JP90`M<^JT6L{Fw=NImV$ua_ z;#|9$+FGw3n9R&O@Gbs;~$X@*WZTg*hNn*+}oM#q+h;$Fzezgj>6NW%sF$(co41>nlv- zz~HYh{H4hmZIffWgpiHe8ICaORW`>4u~k!JG$UaetLzw>w+&r~+pxRta9#7`*^uMo z@otucso)(2!$xVY93>9Bg5x2QczESd zqveTLVMJvl$=bR0ER|+era^Hy?QN~cWXXga1N6u0u}l_JD@KSH*nJfl-fSR&`~m}M zBS3{!?y}V|00rHX)9OatYnj_vBcqIaeE*2=ZZ$2f)wZy!ki~9wO-Ey1Br~cBg)CS? zImnVLAo+s>j$bjsV+3mCa2Yi31#}eUN4rsObPeS0-5Abf0BfnX%N`|*ifzD_+aT|j z#n>q83|DT?1?_{Oj-$2(q{J4p0gU6BMSh=L8q9iZ40>)Pk=t4y8k*cwXt+|uJeh;p z+t1i4F4+#&6vA^1n8a=bE*8ELros)JTvBcgf~~lw$tBw<9dKE?8c^`9B1)N*E>h+qGdL9~j znrEUJ3A!~nX8csuItk8(f@A71*q2Th)}_~P3>XW?U-J_IGBFN!BskT87#&(gj=zb3 zY$_m|IT8)kh=Mx=1iHD~qQ_4Hh*><<_FU-oRDp|Zh^a{lG4k3JvH0CYdBI@_}Y4l=8H_h!>6Mac9`29uJ z=ZkERD5~3upF6RO1a%}h(txA*ax<#n!*=~T}4fGy&*GT9}Yr&-KRgcO`E$pEda`Ad6lA7GUNv)YQz1!~# zH1m3|`LA0GU)Ok2Y@Euj+StN=p#{rHUX@f`EqqfgSOD9a|8^(7AZFb}1Y5OsfSd0Q z=&nc0ulWP5g#*<>My&j@`|r>K`}@26`YvY;$7c?;4d#3Ls01^oDlYK+>Oh>nP@DZA zyLv5jZ4C+f58NSN^ou0NIy6Cgj)fCJz!K)`FiEih-^b2JPOb(rDW@0f_hRvy`EhEO zB;6W3LgIAf=sO}ur|6LqrXxYe@lzH~#UVn7ZrwcEKI<9DtNvJ%upf)W4LSO8i6#m$ zIy2QMN7pJNK|dika?*)AS*A|N%zF@>)AFejo+C3?cznk4lQ@>s)c4bDENGJGLpvr; z6i0TBEd30cMQ)8IgIM8*xj>b$%OEmxL+!D4y7(C7sM(_7VjT^naAQ?I^OG>4*j4OM2d}*kJ?3mP>JpE$E zw3IPX&fMeKaF?hxB`bGAcmrhdgz3C~w~93YLfgth?gJqN-KW41!rIaVGW9DYS;q@h zVs$&7h}to(uS36Dzm>Zj=xm6xR{&Rr+BJ}qcCKt8Vu2X^Q z8)EKb7Gvc7~LGj&y!l4e5Tho(+bTAvVz}xZC4RdbAGpE!X1$ujHSu>b>(5 z5>Y*33=6tvOy!3r2*G+-n9U4J#Iy`lL@;`sMtILGjcdNMGfY<(L);c2(6$SZ`gFOeRc>F*PD;Mp zrVE=B*HeQ(0bD!RFCWc;JE?L5_qrV_N7^h-3vVp34GM5N{a=wQ5_b{}j;mb01Ksq7 zS!_qp1IS8U(6b-c@C@Tem`$@hF(ypga1Ku_iFMC%cd^~X0nTo;WkKclL#_j4r~B9K zo{NLp{T}pSkGf^ro{*n=@n|olwAnjy1AB6!lH^nQiR#ZWG|GW=PZ*85{mP}cbjG9> zk==njMrt83fJJ!QzMl{szYphb~T(qdn8LGHp+xL?QQ3sijF7VZ%vR4mv zz*2c`=tz-sj!+I)fn_LrLY+n~&pb=nlHz2(` zOf{3*&gU>&HG~UpXSy6ZxeH};nXSrNe5v^m*H(5{hs(g^lH6ew*+9+^b`QY)CTW(F-|5F}2Ay}N!)U@&M)Am~d>JomJ%?efTWVRVBQI$wC zZ!ef<2Jaqal?(Mkx*4Uj30^%#Fu7)FGL1RiPtwYWUIyvF&2xiv;P&PN@BTS_;OD** zA2@JL;{%OiFCPP?rpKvA!YpJByj+^uY$(QC?o!ke4%IgF}N7bGmf<(V&A|KPZVYdh+b5@#%AR?LSpf#Dz;tPjUTgA?nzlpen_U5bq+w>$%^ zU8UXqu2ROmW!_Kh&4lefPsy!0dRupMk=E}~*O`~=a$UN5x22q&wQhWM5)K-^IyG^z zc{xlsMGAztZ$y3TFXwYR=H)nRqVc{6JUe9F9I~W1WNv1Cer7R0AqSj7x6Lk=dl%+s zm-_t7TlE#ncy|@Dv#G&^Q+M)LY1o+9Za%CpIvD~T(1X4GHz@Z__YL>WZvQR7 znQd6j*XU&}_L6jP?C}FAw?M3|TTsCJ4)DxCOhV5=W3!$7fn6~h+)V#npjj%Gn*Y8H zrnkVlwTI!+uAuykCd7P zCXNSl;B*_KF~H}-`YtBa+TjTedu@(z&U~u_* zG(ILPxbm1IPkv(Hafid=GCeT0KbE~1+-)&M@VbMr7YjS1^C}Dbc2aH=1LHdgzL)%! z)Q0Ef_eYwI1&jmNI~1;$Dlojp`oi=U4Z`paG9$10QHAkkskaj6%by&2F0m(5<ra=C6_?te0x^L+6Kl}rF+HOUV^<&hnQMx=BM^K zugJ;*qdN?mc2S9ci->t0i^0b7cR9UL;A8k&UR;T-5Y}UfhoyzTy$bg4YSt2Fw%DcD zXkOr6OX6N(Y_C=Rl`t=%`CrIltWb7bM{D@^Xk~2s>M+37T1Rg%SD)*7IWlYpSX+B> zlf`zsk&Tyc9E{2A%`KLlgv zRP;GH4q-W_zBbE_GDOKVv68NIKs)-=Gf^IIb$|vj0tDZcQ8ZKQ$Tuiecmk zpBtO}w;q3}m~!qz_Wp(O@uC!~vBv6$rk&55-PoZDCKnCIf}c9(f{RlQ)?zff&0Ir= z>&M~zC_^J3p&v)^qr^%5p+%M(6!UE!nRabMh&gv;N{qS1iY;dyCA1uWKZ0(nF!9Hz z{xLL2WVvHgqRNr7rSc<^B zZ0fA|fQda@{WzP^2h2RaG*S6n2$K|3xzva$XEvE?pGYs8eZdKae=7j8vtIl{_~1xfi!Qnulx3Nc4;x#@m|m~!N3DQXc#?h0zL zd9PHhpDCyu0p+GEjvT>|EQH+Ev_~+xYw}vX3Mh9ihI6CSphx2q0;irsB1 zR!~e^DM8CU%#u@xxe6iXLNvKP^0P2!gqS1T+yl(nZ#Db}EyUb|4F4f*sE5J?$R&yh za<)eZCdc2yiaQn_JQ9+!I3;DN6iHbY`^PQJ+~X9~F&|(0Oc7V^i9D_xEj(49;-{J7 zLlXka5kiiza>W$?UJ>SOZxCe8`aoQ{=fb)ZWR8b_NEa%|9E6c8vb4-5z8nL3NfGAA z%|h5s4d{<~b5jT|2Oac^w!o{3F-Lqk;>k76`kxeCPMi5PL=cE6m*63MDs#oGpxi=yJrHdxsIcs}a1L zFNssYIh&666>iQZhQIAbF7fO0(ql%wZAj2T;M{>Y4; zA8E0!jQS;dT&aj2H=XElls-mzS_l_M?m&f%izlyF8Cs5`iHSsyqlx1!CCl+y57FbO zbfV(N5jhV3b0uIYjw|8fbX@a*adKW1$uFw%)QrG!@@^y_%c4cD$jGu-0poaiI>W=& z(aI7r?hGq?rpi_nI_^xxa$Bt6alAZRWmVLo$elws2Nx+?&duBsx_O?ud4A^3Q!bVo zQRJA33+f%cPyyo9n~P{6RX{m{%UzuH5mb&Tx+LadnL$uFzz`npQU!_oe^`4HI5~@I z{eQaq?PW3p>A(mh3~~yBM4V_4gi)hr5GD~&RM3lF?!DlGFvC@vjEIVmjU*&MAdm&Z zk`S`61j4>ULfFE-?_0u7*!LyC@B5s$x_bh_`?>f3*Cx|lZ`G+&_10T&)pO2yssdLW zV$QCMIY(r160=B(mUP|<{Bh@^=y^^fcb+#YwrVk+XM?iCV2kUV?hDxqbks`999O>C zy(i#?>jyy`!Fru6Pa{`c*T3M3^X`Hj?lK<@aKv4n>-)q&9S3QgyQd=XN=X-KTy@Rg z5w23wRZ4Ot4}dyO2nl>`{UB}Y4%dn@E}|q?b3DrlnS2$8DORz|HPP6ZIVVV^>hw*Q zIw-q63o`j|6w1%&Z5%kMSGNvw8Y}7?F8`I1reNFP@bxsMhOm6MVF3OM_~_X>-EtX7 z>+0Y1sr{u0IwW2gX_x-Za$G@`-z5tYB>tDIBTR*uo+43M=ZR5}uMnrSby*MkO}|%> zrvk?nR1Zi_)2hcSq^OjTsOq7}DH4?)wk&ijplD{Sz*7vt`ND(jT zn~#WBEgBOdq1daRa}?eY_?&gwF#h=D;$|ghMA(roF9^FDA}C&mB6GM1*t>phi&bfT zKrwoLO=G1N4PX3!Yh1Ub)R3 z5zTm>dS;AY>P-3Or7rrO>Tb?dPY7t=y8-z2*Pn`2bp0SZ5I&v;ov}8OT1To@YyjS!9tqkS z{(^>n?(*>PSNg3Q_esC~t=4aUx4-)!`-lBQaOR<@fPWgNHVl|p8?oUq%6r^r1%wX) zqk!Rf@JC~Kc6?9W7b_o=QuIuOuw47-asLX?!%?NC$wc9JuFH`rF^>t*^Y#Gf`QM{N z%A*l+bWCt}6<_ax<*_6Z>Zd@^DGugM$_zNF-UL{B)^uQ@8ONv1I6=)gfo*u7W=xav z)1yNRr?2bh4CR~Q`KqnOw`FF!`{y7Bh$17d_bU)Sssqvk>HFM44&E35y;IYYV0oT0 zTUZ{)lxM=67!>+X0eSvd%@vwwbHOyvkl=Yv%`*=;Vm`Nnmdvkr;Clm(uHThQB=r)cw$gi-M%R?xi3z2VKzG1- zm($2AH0G|TH}T3$`5|AfICiH89>|W}rVejVwCB|kJ!FUi+7&?VbZ>RfgcvVz?S=s4 z+0wLIu5;{e2^jJ+_fc6!e(tR2zFq>ZcLDw45C;gmA#FLx-i>@~6{zPezd5?2^qrxX zOTu!O&=@5E^WBn4xK;R`#xz)-OSs*seQwM2nYPjkcW8*;87Y9$>0NKKyM*n*(wIr% zzP|G(Oh64n`+)!MW%V&zBlJEgbDt|iket_ezsP`mcsvkwcu+{6?~ESulwk@T^-%)m z=Vd_q$jntPkoIUM9^negR{-kM(vkcn5J2jDA|4L0dw5d!^(kS0_7wMZh3@ML-B<3^ zN);9EH$tJ*Ui#@++cSzE_2>NAHLL~CIpp^&!x`|8%+F_j3HV19FJ^%M!1^jcepK;N zedushM4|}N?<<0IRSY7nP2iw@1wg;PI=mKjcwO)xAYeK&)bnpBsMH?-#{dUqjgZo` zd%*v^o8C!JX>J4gOB3D`^5=d1eoO)B`yg%Ghr$AZ{SF28~zl&o8P>dA>NZjZi;C=`L?*sok zg5CA_tWPQ9eShuEm>`5;Viu(U`hfo?3hPTdjWi&?Nm z0Okjds2)gkq6F@R@yzBf06*#m)&uxEj=HB(H;`XCB7pr00Do$UG*_R4{+$36!JB@X z5I^-f(4SwL5&r`7&E&!v@Sb~0q9Y?tVi%9uB_=q$r)Qmm`-75g`NmE=Ly^lFUVu>H$4ET2jojgwsogdGTz?)DFT@V|(P{nmf zb6Q*tJ=3AFvxNO|j6}CilQ=sY4@1;>5)u9LmV^HJ-*df875wW4{Nw0|SOyHx^IYJ0 zK>mONFGTJ|LjB73X+{S_7L} z!G@gDygjQI_Ot%$Dyq6#88}y>TgOXW<5^Q^@LJD0BrNf)OUSU)v+5ft;B}sLS(Y;= zY?)^rBz%xMt|tSKAX4?sF+nK+7D(z%p4Gz5o;4oOOjdonMcALR0s=1AAGJ3jR-eBq^$r7wGc2LoW4Z zEV$Xbf4cqu)!G8#V+Kf~v}5O;2zOMO{W@n%a_Fh8vw#gdNiB+$lm2BUm;u&|Gt0VG zF2CUmr1dDQNI9R;*JJbS1t4Zp0UTS(FL<^uF`;}(OL4!vL0nz=_PqhevOIhD4YYf& z-458xY$MtAWr3woLaf}zirHAi&YhDl-M){at?b|pPqTc=S!)9sTB925DOJ)as}1SUXwK|ge#;wGBe5It87D#-D>p)w zX$}2jV?DG5{yLTi>sfygjsdk7-1>B^d)`)3sN=g0n=)!iTqE*`XhJS9ItMpwy2i1R zG^~v#v~|-po5T*-xPQ|n`C`>6OJk|l5!udBnNSb+i3Ji3Bn2JN6TKR*hiH_k0bj_b zKr@|B!83ald@CIxw2n|8N9!0l&DOtss)FT#d=hyhH|v4)B7RbB8@;h!`6chr^(pLe zJ7UJYg*Xp8=v z={BKEZ`ho9!QG?4Ajz`@|J7&-65A3|8-`-4_n;`9_#SNywqp2x-3A#UKD9gAPH}fb zuE-}*&WMM5vt{4;W?CU`QufX5b5yU{#)E!(1?$Dwu!;jLG9W_=wcCvyqGGGmI-AB>7HV!|wAK8x&0+{g%b}^!XK$Xd{Mm$hr zKc)2^LU1^KRCV5CiT(whlSTl=Vfgd@O&1Gr7VN6|?|+Pa?8}NSqLF<0eIGC$s}{Q# z*qJqyJJ9YP)?}eesS;=a1P<}GGV|%SuFHe!!`IeLZ!1ms8f&~VokTC&fNqW4sCK!3 z)2wVhWf&Lo9M%3G<{X(c9I$12sm(e6lG%YFE5baVlbW$$d5HDyYfwAH(};b(8o;tT zrN~T)!>c}fF^0JsGOfrtM3#BtT=ItLZ08SI=aO@e;NjhfXaLR88}hHnKw8U3dN)HN zZW{|>RFSsO#$2=sNt<*N^xiVH~-0<)zs&w{FZ0= z^rgrGcZwdd#Sw9`*_y!{O3O872ae-Y?e>(yXMq8I9o_-oMUO38v*3m z+BdX>wkc+wRk{E^_AhMcEwYMVxw!YeTpp<69D zM4{8}bGBLS7HrP1&Fi;dAh*D27PA-Ev9}P1wVl;(M~$-(t<_i)m>3Hsuf&A!+!~M34TH z)0Zd$eR0;x+qE3I#Rhb)!_343&k^L*fU7alymGeFax4v&@%U`@2Ks%W%W-@)QpH9% z%g9LsYzQr@(?3n}!*tYo2>gqsF z9T=FteGk;z*S2RZW{H+!9c=78P@p#ugKOXUOZZ-Azx3@p0*B>H`r568ANqa$p?9mw z4WnGA4YST(Ub?(?{}O)GIVAO3Rsax{8t>dpY9Q(6wVT)o)Q&L&-sKYWW5hW5Y%jq; zyn_G2>$hJTj@ttZ=88yz*^TkTMb`Y66?mJ7h`v#^EJum;6HHb4?IhZ#eMA$w(n2F zACX=U*EI#}MishI!3i*j2dzn}r&OcwpJJwMv3#WJx^Hv&S)XDQ{}^W_Od*<;4#E`Z zvAe@R6T54Q+?5EPk-x?=hu9%1^EYO)zuR9Sxcpn3$;d_rVFyX4CbT=0)*R}OPu|)0 z(;WX~W;l#1hjn8SIXsNYU@IAwiF3nfJ+WgV^W_LEAhc{;w18A_X{L2Y2#bu$j91vM z)R~ZB2|O_d?snnROgXF{N6M4A5+3Wj{b{1Vj`z@B`9IJ0q-_=Kn_wkTAF>(8Res`DC?ykz-^JNsQQm!#q zLP`9&-Q9#-W>B^5Syo+Z-_W&M?Patf`vkJC4#`!cKz_dPIIbvz{H8J&-c=seCYG!H6Pq-cEWL~5;$cY`|DBQAt(>0mg zy8pX%ndC7L*{b;B<^Q^>-QZuXYIo3nJ7?wk!bW~H&R(cx!TM4E0sWh1{I96;q`Q{n z+@Q76Zhe-Rg}h>BNnx)T3hC=|<^oaVrOP)|`#eS79(9Cm%~;8(yCW8#-~P?@H$?%F zzT)j>fR|#4LjR_FvyJktDMsI)|0}?z-7-#1-WROs$}2R12rdz=rQ>IC1ukG|=XjT6 zBlJWw18*Hxdh769HJ4ZWqyxmJ2u(jkKpW2fTFEV9AL3Gc9rugS7a-Cz!l?ZcZyp!! zzAy*}Op9O}i)mIZ4x7O{6<-ClElFW5Tapw|)4LdvItl74JVKi;;(5uN)uA?)D=eP# zwplmN&*rgHL;t2nvzf2f=c4i#%te42#yKs8&L_u@8-*iNbqL`bmcHHne(A*@_v)W# zjQ8C-m(z}HwspiVMuclRrD|+Cp^TnhW+G9&4e$tR@5Tz_p3MrJ@h7Gmx-`dUxG!65 z!{H#3G19dXHlnXLVunbC*LNal(U%4jExyuM3vEHtEeoQI|LDt<-7Rr;HzpMkIBd=p zN1eplr2u%Q9B1u{ox4T0KnMlr!RxF)n4Z@aC5l8+CY$+ z5bPK$T?xi$b00LXGoZ|7hX0wKx4dm08+k|=$PIT2qJtSSWIY78Gp}h4vV^?0N4+*^ za03KUorH<|{s@{k+tLP)#LJANDg#mH>{G{ar?=*<|1BG0-|A%xw6$%+0RpzIo~m!# zSMA#)*#PCmgm4I5=W_*nAr{9TyZI+JL3#TQ2%uCsfD_pAY0UHiVJK3a1)-O{khkoI z1`$zDpx4BF8E;)DzdCiYgq+Cowu2&b^Mf0HAAZD5+fmx?1md`pkVw7{w;fYfgf1KL zS^7(Q(FriUYj#D}t|`0pPxuP^RZ^qBL z2Q{9eytYdRc+{ubu@@26{MnD~(l6CXzp_2-S0iCe$SdM=PhH!C&5~#Nwf$OC>u+pN z`^`wgtn>Eo+hwUv@nC*x$9_aw6Y^QYIczWc&yhrZ=Ea#XLRofXv*c3tv3>O9{MI6i(*fc_ejp6j9m6L zdHlY%%kEtrLwmEcVMd-7qc}&fpCKQ68TK_P`9CgRf*H_bZ!s68eMlTRoFs>rj8Q+=anSFf0d5H+8c zERaW+ItB0wk$WjDlh4A;NEn7_&RI0a@Alrfbw%~gk$Q{dRlRLw0d#T!W#?+t#0{g zUGC~#;Uf1CO+TM2Q12?KcNOaSh}v6jT50b=&EHSHSyyLp&gu5h4q6 z^_EG!>*En?z2OG;)VcxnZgll-k^>gOl$^9H^_IK))p8`_VTGt$ka%nAVbvfHD@5*^ zMoMjmp)#U+O&&PgCnv zyd+m1L_G-i={>xo9;!0#qaI#UkH}f7S22?JDkd_XUIj<4l!sJzc-Ccf5EPlJ_q^15Ark8M$}Ng3FQOil`lz=m za_U#)5yc_6(H*K+(T|9F6^XCO=Sk|l?jnb#UQf6}ja1}g-l^_~rj@~`pQ-Wbck5uZ zJn@Y@X@aL5qN2<8k}DK{_fs6?doCHLC(_M0JJfZM@8W}?# zQ;qO`$`kJxH5#g*M;COQe4zAlnCkveQz?cElncV|iLWP+;(kxDY11WWdR5SVVMdl0 z2>wqq3u1=o^gxOi%!E>_sM&T0GEnlcSzEFA*pPr5L=C%rf^fsO$ZzzqY zc?yUm2y&#HqVhJM0z;H#kU}6m>q5mo>Q0}jm`EIZz2$ZE&F_E6touYKN&R2va-cBPG6`98$${jV-{dh-tR`-ok0*+Cn zT};+Xl=Tv_;)bC?e5rc;GI#K~jJ98{%a?Q6-`hj*iPB?+LlhoDSK{7wRkm~XjpKNE z6CIhA8x-DA*JOKRh~%|MSdt|eQvI`3qLw0RTh%lWM<|I}7ULo-ctAx_H%Jt|Pq;+g zh^U*Q^Aq9a@^zA^a_(eR)a??5!xMf`cOa_j@kC6y9GoNy zx28P4O#-D6)q=~DMBVG5koVHS`>LYum#7Ei_JpGo6JvC9>XwJoLoN!xraYcaj4O$1 z#=S|R@Myx%=}|;IRu%QQMB&1Oi_;T`!iNdZrYGsEr{uFFtyW0X3Pi~@V5NSnBK*pb7<<)&17!@p3i_r+{yzks9C3kq`V#Xm`IOslB( zWonS60zW1G?oCu9v+QeG+>>xU>XlCtS6sh-9n~&`3+(R!Ad}jJ*nI zMASP-d^bxtqgwKwi`+K6uSiBh7?~5*oDXP@kAuC5XN>p#BdNDqA&rDF_J)r=zVTy( zed00(hEJnI>s*c)?ybA4r6mtZ=50*Z5*+5N90g%e9nko9G~k|)FPrL5OX#$ zN6ezsJCb8O^oUN%8J{C_BZ*iKVFWHB zqm8h|wD+b;J%SdAU_73TCwL&^3AuxbS(JLyb4Kvubkv(6^=9U5M$TrEksw7xorpva zPLz6tBqG`ro#+9IBNd&dnsCsX2lZS(W9CFvU3tJKbfp5TBT; zcZSp>6p{GEd1NFmkt_32Z-J|~Fa{=80)dIyT3})?fr*4U5}DW?JS0)-5r~L-t%^zX zu*8vyNzB`MsOQhX-eGZ7z4N7B8j5%UwGxGRzG4sY*K`@p1R$pBT_W`^&DkY6yOfLs z9&+U})Vti(BixV>#4G5%E2SR6g@hblMaHW+nTf-akVs_VHGXr6EJVF>Sdue7*K%{0 zO1-71S57OtF2{4TEN9o{Y#Al5*X8TEyv7@T+i-&m+ArLgvm0IVO*td&CM4dRvzv3} z+5Y}nuHwrn-Y)5b!Y#4btvS1uVoA6yXQbUmvD^Jpd$=QKe7%E|J9BntRnT1$bXQf7 zg}bAmdvbOUf;bH~XQbUrvHPN+`*X(E`$>5qXAe{bJt#pBRt2?&hoYc|bM`QTn4@w= z+9MQuGzxkwXMBB(l*e=Scva9767)n>P&qsq1wECsrw~*QD{@BK3W}|af}YM9U!NxB znVdaS74)nGJzEvDUwAIp*%F@5*>gF2o;&b@F2BHKf8Vr+7jyPvF23Gh(zTbkc8Eg( z`-N3XSVcl_Q*~xMFua@tt9T`6FX!x)+-~7j-Qm}A_G->vW6->wv)75O_4U<(;SJ?| zGiPsb!Vz55Z%N);$U9K??~w4eF29qrw{!Lm1MpogEBQVD+Z*1O=nr!Ce$GBX^$%70 zLuo_G;D(0qkq_9_oTiks)ztlQ&M5jZ9rB4^`IPC1uxqZ2N+KLGI$=zYNo-VNW0Kx5 zHnGu(jZM14ILLAxZ9F0|^f)3J8OA5nH$I7ru0z6v1Z^iKHX*Tz$-&`BE=$`<{7yy#ONz8TCeh?HC9z`?o03$*v58UiSSmWsuS~_jme^FT9ADM; z1Zg`hvEvh)hPKnOreQZj_>9D6xVAGBLywsVIZ^eUSl9L>X*(;ilivVHsHzjs6IxSC(qRXl17Qb?9Vz(rAD_3r-YJ0o1y(6*P z61xL!?@a9W#O_4+U5VZ0+TNWQdfbhWdsN>&b#3pJw)Z7=Z({eM?fp^P2cotQO52AL zdoZzw5csf4KkV8*=-NKwIz5`$BZ)nVPLCx<(Z{Ihali6JVvi^G1XrG{YWtM5U6I(6 ziLF4}m5Du-*h+*yo!HZ^?K6p?$1@0dR`oqw*Y-JS`+Q>0CH6epz7Vy2F>3pgv|W|h zONp&Q;L9rgvTOU2Yx|1p^lD}|AtC$YB@dk5j~G8MSC?($gv3 zONyqw8QzeYd7F{9nKa}?z%(W*v^&YK%*xwIY$~~Oanlxt4&N*o2v$$k+->dJA*9qlw}@S4)xdCp<#YrCWr+}UVzkv zd0Utt=(ZS}pYPvvOD6N>s3as5{!~}IK#7oy#d$HLfHD68Culm?tseybh_e4&)EhV%y|uF7ut#s=^I!+-Q2cY*q9os zCvRaV@x$i4=vO?K2L<#5_HJ?!!5HV)g8npz&1^Fr@x3`0H;=7p4gtsY_n^7eJNdb)Jqj8so99Bkj{#Rk`I-#jP`A>WYbfI`leI)mz3 zPotymXpM816-t!D_S})RaFV0j_t336qn9zr9bP}0E^j~325e}Y;alp=s@)j;-6Ypy zKh!PQLASuqR;q*@)4qbxL44(1+mC5~6`{pl(YpsaW=1{#pr#q@pm%$ubvBa`EZ;M=FX_MeH9sq&si_tcg0z4jbH%3x`Y8 zsEi$MqcDq%_PtxHOmlojgXoVX#l|vQM3Lh>M>F1u_$Jyoa*S7w@#Jujvqgrw37NqS z33fWkJ~D%;4l`ZFjdXg@C%aj05=Al4u^OohKROD>CdWrdj7(9EDRtq;%33$LA&=2i)7Rr+|Y=1Pr@&efe#jjip+biImSIcmr@kt9*A~b zcxvNouG#py>o&e99FyMF2=50SgM?oj&)=@d$mhbBW{i)Feb-6&b#>v(JV&$aeSE~F zdV_N4D3B=pM%nuYH#9-GAmKO11Gw3BMd8@}_$;UBttxtJU3hB#Yp$992<=r4ng62j zJ7w@2+|V2_{~;Xv-(9l*Rl+?{I3_zjvIAn}%VX-R_4)mtqgkdvKKGO3LFIU`F8m>x z0(Iug!!8^!R9L=&4@_C*dFDl22b*RP-!r!b5$7onyo6(S^j221n>KOC)B4cW| z7*pA>QM$yx>);XZ^~0K~*9{g!42U0Q4s=@~#=)pYbAUBf8L${)J^YvqvKT^^%AK#i z^~xb~D6H`!9wpDl(K04tLEH_~A+MmZkvE|t!{NB9-Jp!|ki1pPVUH|_?CDtb`D&~s zOcZT`UO-2>Q2?VMw!%pm1tvR8-8RV#$4Wn?k8R{i9 z%Y|bp#Bz8t!eu7Z^na@Jpq@g}nt3n^pB;tIk!cVEVIS*Y6pjsWF5Qv~XSi^zf>;Ps zYSdIXmOno8DY{UaFRW{hSNZdn8K7z1nFBAcMP1-l=g3&?>rFb`KkO*lrui_ttEpiAYMyRGhc)3C4_$NYhT}36Akk%wccD*2vj)QTU{2 zY3#0B8l!Lwi>~?6Zdp7E;m1h$F?HeC9H$_>KPE@@`EhPAJPzTQ8Y$YEQl(;e?3UFL z(5tTbv?zSKGoel+#|-6|Q5QZ_yMAntGix?Tpf4`_5q9+r%&Z(QFgHeGlI*VABg^oo z)^>DQC4ukV70nU6eaerc1mkBqhFkWx>=u ziRH2kk7~-D+AGr~S1!mMB-15pPf8G|LC!W=FfW3)^#5=C(9jIU7=K#?1uD9g&W37o0%*|1Ib1bfM2ttoR045E=;gYVk!6luC z5zX1pzSg(IR+NBCL6`|$A{p)0J_xIOdio5INmuwL-2#1r4XK2!Y4z3u4Ls|&I_H9E zi5ioW-Moh-U|U4`Sx>kTM7{jznSmfCUwHIPP3F+fGhC*-Fmv-5wTn>B z3{c51>#T$wP-h2k}ssE2iOs+-@o5h~FDRMJmSiQnlqU=ogh z5=b&)Z6FCqxp}W z!=Xrkl+ylLA^P&LG(!tmM?)3r7y;Blo-qPBfI2F|ImWU_P@lBmgNy@^!yAAcJA-hL z6jrw)&S#3{fpfM3a3biQ!|~{4-P;WfE%Z}>+!72fC+j^_>aeLw&cx5UP+}( zKpS-A>2ga3(&!SPu_m5@D)U?w%q=Q9pQ6=+y%W|bbZpDSF$7IDERm=ZqAsJGYw58)gxy^UjJQt5ykd~`VK zkTe0f<3jp^a}CrEpbb73WqO5kxH_O5d~||Ldz#>IhoaOkR{(AJ;JGpuxGEkI zBPT2*w91dU2)-frFfL*6=Ex%-EA843fXI7jZO0Re)w>1!i!;@eI78`&RKx z%wGjJwquyO#OLJatSSIEJmCd_8>#|q!>f2nn1-Ce!8EdXKZAGJDtCW=evK+#iTS}d z_`E_ZIBHH$45z}lPxNboHMYwx8LZ@1yrX%syyHbhJ2$> z_Hu&+amX3kgmAdVAQ>OH#-JKr;YV_JCU}3a&E&j;$-18{(cnc zW9LbEfflC-w_x_6EWpKSNLo1ah*8Xr-XDYH)68c!S$rNEB-iHCv*meOX>QbcsC=6H zfnM~T3IQ+V-dvJT%PYM>&wUlm_cK`8<{J!ETcg-`hje8%g6c3>_C6J zfO_`Rj7 z!Mi1F!-SpMdIP5D<>_toP-!vS!;90V@JNl^ji_{Eaj*33_D!c?zHho;qVAge0ZBTa$f&wheG&+U*Sn`5xp}xhOQ~V&R`WTR(LkI5;7K%`0lL_~X43s@Mf+D@>&gqD zcF=NqGyE}XtGZbD1DoJt0il#}RC(80I0Dle69wVQM*|)%Js@k{*;cdq)042F-HJzN zplvaHjSa1=|L(h!@U*}SnDDfGCw*Fmhjv;~qXYa#Eu%juNf^?31Ch5p7+Vhy-y-Ll zBT{IN)QES9hJxzJM)EBB`&!NUJ&Lu%q5&PFwpZd5CJAZj@~ty605(D{4=PrwfL zqv32(>ui74Rm;h_smeJ*1Kh{_a0YuO9qW~_tL<9L>Blc540~RHyD{8%8_u3I!;t@( z{k+1S^cUn5$CwZJbmrwQ?ZN$&0Y5$wMAPACdpl{7z-gcOsa@?|6;- ztoF>*j-Jt5+4HQ!V#Xb>w4V2rDj_O*6CobQTYA0NKu zUDr0C=6lyucm3+EzR-6HZFFoK6HN;YHXE&OO6TV0baon-0d-sa>bOx2@B=mnV+hy* z-0V%|orIIpH#6LC_rDrwo7+H`BvS2pjf>D`lurygn13#Pd&0>|x62+CW%)ZDS>KAXwn5gmAa2_pzzcjE`*t_C zd%JID65ut-a+jnEciLq+N!oTo`{onv5t?%0pyESQv%A?a| zL6l}YRMJ;=GhRqL3Sv7n6}1!h!jF1ZY@iDtPKxuDDuCHjY9~I+=hRbnA&(!hzFqdB z!D-S@c!Ykc_qDwFJ=1QaxGNIDC~3;iDdxlg3XbqRyOZJw8&UiHn~rM9oLEDIGo2Q) zmN8b^Im`8(!F=)17U1ph@yYn+^{)z}9uU}3 zS#uBLl#{aJ1k}c?wXUcbV7nA@>@!bWx-4zy%{pEVi=4F7!&oh+4vYQmOS{#_YQ=dh zs`Qp|8QK9r>=omssKu2xpv+KhOIbg?DxaWQ7^|C_^)Ob$PGK{K_+||8jTpaSbwAO~ zc~;VR<`X^ z`J9<#+iRS-@@)+1@08Ehbd@UlUHxfc;^GXYZmmphDEA`f^%bg)FaLpFra$x*(hs3r zW83JuGt9LV=}dq5(zGKT=U~TLnjXN?6#ff&+j#+hE%!3MVZe}^o!7lH&j%+YmCy0% zcNbLHCBDd78RcHiU(&rgBguB{<~98jfyn+afFRq?#G=9)RX2qfws+a?Fa&CS${z8T z#_{I6g!)~u0yz6rIA8}4@larkW(0?gw zb8rv4?f}EZ;D!cHK*FH*JLCAH3fQsB0z0#?60Vi9aeovo!f$e#aTyjA=D zp&4kI{vGRnbYsDGfRs5kLmqQL$~|(LBjb23fGf*gu3>HNa)*N{3W#!AJD{@T%C!zJ?1v{RKvRL0T4kn8XW_4?vu& zQC$2OfSB4Z6*LS$%)z%A9-YgCd&4a*t7)7GK!-(m(F;%7*{x6F<`?P zVZ&Dm8?K}z7x=y*>RO3Pm06ks!wqtQyAD|i;4o#ck3<*4<@k0(hGI=1%Hc+dyr~b> zh25NCp&r!%8(xlxC4)tJ;Z2R8@K8}+kaioY-7XP#_}M~tpw*qy=gzu5ccrHY9UzR@ zMSu|B<81^YCM}*8PShk_?7P=CLB#i`^*-Q*O2UZw`XJRof3YU}g-@rC)GGuYew4yP z#e_kHIw?pv@#8#6;KDhO-rAy=l6t^Hq*+FL+7pD%l>`$bA*u0X zbc-j$dkYkp&#P3sWN__;@w%X4zb|jZs^9dMyrmPv!GpWy_r|5S>92Rxrg!~3@ONp` zd(z^)YHyW5h1E7NVc_8pC8$Fq5Q;%*A>wYR;d|0^I?}D67|!s@XiMRh zGTT-FmN>1q;y-XWD?>|nF)(tgaV!x1v1$%Z%Ux@)uMUT?I`sCY+u5($mc726bw+4X6y+Z0~(;U|IW`f1>RP^Uk zf5xTe8uB(XYWUNd?j3Z13E^fv>>glu*EGsCjTg`28(u{{c{x}qcS?5=)Y@VkAdoKo zJ*&goZ48`^B)b-?(*@MQp4T?9uT;XOuGOYdX-18~C_aRN<8^M9*0Q+;!0gQ<<}ff- zL|ci0Kn<}Ct!yg3szt4Dgj?AMXW2@CYj>>`*LDRR*B-(?!Ylh`TG^Q8I(Q8i^tobv9Ya+|AX<7Xna(Qw`*>Z zMMC$jL!g;!_?@k`TMSPgU(r6mmY`$#C4-^dO|%lFIY`u@~a^}T0VdrxEMnU);J zG~8*!#Jng|&koeJgLKGMImxvN{gHZaM~dxO9U?o?eU7#CVj^+9M$mJP4(}Xx#-+qz z6*Bz<52l|~*lq4&yV_4TX1_VycI#oINueR3#zx-@ChRGDAjUVDJG04bgm1nf?1`9P z+pp}`750_?W-usjj8oF?_U}DmFOcQEc3p#H-b65;s)*y0b`K~WwmhWJT`Df)NTq~{0 zspQkD4oa)?XsxuWUaBHutA5{o8>#*~&)q z&}zy*1=Ak}h2mkpE^^gjl9xK8GDsYqVc*GKvP&CI!VThvlW+qq3di}P&ij@7IECL9*bI&q+~>70Vli5WRF zWoyn%KgF2|WscXL6E`LT3sA-f^9fojyFP3@r%`lVMy^a*Z91nbFlz)+Srk1{dry3r zDyi>Md|YR#`dL&zFiu77+JefH2{CLz3$-oi2)3YznH`A~D`AdnfXkBZU`F0ca9gY) ziB0C*RMHueG%r#scCi(uzygoXT7W_eQ%MV5QdV9|FkM7R><`b?9>8vtn|OZpCJusmvC|Zvb%8dd2eBcg z+(jzqH4S2O+PSG5moC<>^guSJ{JbniXZ0vL%PVI8$>(xz@0Aj8Wxe97VvehQL(0Lp z=T)bhc5PCxp??lwkBU<1?$qz(5--#dmZrPZA#z_TvqNR8YRg~`WSdHs>(>x=Lo9P+ z>cKQb9!vt4Z|)nSMW*Gklxz{V`1aKQjcWsTu4vGqjVm8TZ~3g+uKg>I%^h(At3{3H zyHg=s^(nL+M<;@|wA{H{ZMwVK(e1cAF_E&Fy(c{kS99roROTDnK9fk?)Fwo7VVtRM zXuH<7p(T1Noje}ZUN-&2RmWqo8Ek5OUt4R&6JmDMc9*@ZclA@+(@NhJ8j~yIt`=?$ zrL(Qo@|V0TxV6vd-ajj%M|QN|ZHP}Dds+E9!Lku0vTuFCC9-PB+jo)J#>SR@XA}FLwz6I9Xp#3}jN7V&kGN;twU6p|ZFS1_SkkW6RbhAfiMQ@k z6=m1@DbppJMmDot8qG$ph0QOiL?dLWiw!Ni+p+kx#Qt(8CpC_}txLqGX*}CT!d$aR zWIM~&b|Mnl&~oWWmq^|TBu$b;Hnr?}%s5mP;qPMBnE^h9(`WzE3rY?gAx= z_&j;5aeq41TYZ`&&X)U=$7jv)SgtuPk-Vp&_UV#1SFTSuJJlpcPba47d0Ey0_&MS7 zG(X!F7Dym2PWU@5#QEyXtl!f!1s(8Ka1SQ}wQAEnK2D-;r(m#Sf&tg_5^=Sk|pBjJ(T9 zf~XN6Pv>X6y)N;Ntft00Jt9kiSaE8+OPq~;r^dS#iY2Y@QUBfJSdO>vUJ-cSrO!+UJfNs7J;o0zLQ6ZRhotkv>eWXSnkDYWhv>#fW7{56ES3s9 zo}NY9PFNPV=t&iLDhr7t1dar0ZLC-<%B-M`D`U~8#nz~z&!p$gmc`oGP-AWEA_j|} zFX*m9)W}5VXU)FEAX(*# zYvd#y z@W=W|6cw?i53tJDL(vTr~$`d?l%BQRx zawf*0DW)t%Q$fq9@kd@!H>UAZV{^6Vb~1<@=m*9JaWiVw2~#5$7J{dUq&fy|2%GX+ zU{^er4A2F|1j44KlF&lj6x9+kb$pJPDdO^-ym6XWOWxy2O5>)c)Tvo$X6J0SYcWS!RD+_rMcBxtxvm9y z=b%LzA9YGy3&N!4xfaAn&37#pC~j$CByl`g5m9JS4T!2JAj&H}M-fo!3qqkhfk3Ep zU5oRi#bOV4T1=IMKym4O*Mhv~kwh#MpR?;)5E6BvYvG|#x&;^K2=lqbxf?H`FD`X0 zE)%6AT#nG3#Y$mwyu!7B#L>05N@R|@BUeicm>i*XyoM^TRXP-o8VKYS&Et}s@wvRN z#nK$qjy`Q(mtz877HJ*3pmjvn4LO({VQs9y;^-6jjfAUd0*A}-CRTO1+5`@b<8tIM zf!~tj`mIjdcx&#b&^IFIcKvgQSRA2k#O@#h$8Z-Sp>M2C;CG9j(KWe867CgkBW#T$ z#MXG9ayP;581B#Us6UYFYzPlZ=0l=ygpIKh9u|Wmw2g2yZY+kzN2Fd8Jd+}6^lo}g z42`;ba5Q=X{ESbK&;l_dqMmXx#;53{6-tMeQT;~VCrMiAyo`_5`|WA5H2TCOo<;#A z&-(3pE(cK~#EkIC##&y;!Of^@p=I=HU&=wqsA^ZK+Lv>%F+#k^)TDIy7ga5JSCRCp zb1*(%ul6-DGWu*KPDbH}Z>TTcjC72{p<_hm+c_8+VPLF4#7G~%qnno2{ca8>M3sL} zyoyo+LPo~=2a%DnB1T5n68^=H$WRKaW5UOxVN{7vRK=%}hp{`1f(nhm&qQjI_Y>3} zofw}F>uQflpk`FHW5vuUA>%}{c7zBT;blA+UPfs#A%U9_E=FQ;{Poo?LdGM>Pbf}I zm@G0z2{lUgvr#xe%npa+X-G=KY|k+#vDt~uNxH)6YV=%oxCyk4 zoE0GL&!}qO9_ER?QSF;A#zu{f1*&+VvogwVGLW@`*`D@~Q zonVQiL1Xg_6{K-(OujZ$ z+QK-`+YWUkWRYtAc;|{7hnOmVWNpw)6o;e)M;6I;SR@fWNpTganv=yODJhUgx>C?Z z^7ZKaE^tROXrPURLvjiPf)GU>TP@ci=E&nHH$=pdlxr7p2*OG$=4I}Jpryr1i>_D(>vnl6?(4BYC?9+1J8?TP@cSmgH>-<%Wc%QMv2#b{z?& zuq+C?9-5K7UC)5KA!fM|S`n}7rkLgCyz%vB?(FisA&892t9SMm&(jfZg_S99x76+| zU>_7C`M!_%?RmT1<=&yj-BDGtJ=`fS(7WIpf$tju0`cxftliCz_=w-5-}k87<3PAK zZ}%dsE!+oVlYhD2HDM;r+XEz6cu*bl5OhtDjnKS@m2M9s!;HKSlJrR49&rNHN1f*M zvAjK+x5wzj$5q|qWG!phmBSNJ_LF&g64^|qF=0jCR*=vVR;se6^R_Z?Pb2vmrQ0)7 z*vPw*q-UYfg}Wpl_iW|x9E?p&3$a1ZLp|c{cmeKjzCin}ZhEoaO)o(`;&rX^%3H$A z5P!q0%NTe?wZEFTSMv5M>c0kEQ?*=2cpcsm$_)u`M5W(^tBHhCcq0Yge>|=;W^7gSh zKDPCfyaFXYWyXYRm-On>J*r@%+_FBppbTRQHo9PA3SD7rf%c6n*w})ND?qf1?bMDa z)aJeM1shMfwlJY!6ZkSPOe|3Gkp-JrupRF0YT948j+M6cu|ucSH5Di~j96?O?HOZF)RJGo$|Ap6vUomwr| z5l$=EX_OlhW=G}b6l@L&rEq!_G`C=Uom*hn9J9Lr=m`r8h9EL7 zEW~;HOwZF1&MFw6GwGQ0&US>e3wCy)@6&xw!On5Hi`2M9RVCZQxdoo?^9puu!OlZ~ zp6@_jjDg!!`|Sn0tzfsK{v8Foqgt*b z+*z&;^I6b(nR8QAHa? zgyE1dy2u86OwmRcZA_6^g4jo^#@#M#{91|uMZ6XOR;m9JD zPb%7xMVnNFm`Uk28ULmhBkz$U9aS_wM-&<3wEgI!RX=gIIL1YGgegVia|}hR?}1~B z0<(`R+Ob7Dj&xrvtC(PmOU2`5q>2`3h-OXHJ@b`n>5!>ppsim5n87wu#!i5t#Sigt>ZKD8)s zgVTz3YSB(B4iB@{HFJtKyJ&Oh%hQW?x=O{TU~bXoQVg5P8ELI&)M}mQJ+f_>Uo^hX zFP0aN88xaQEGXK7Vpv$Lp>1at?My^~ww+aET%TREvx;_hu`8UTnim!AoT4qF=5x~u z&aHRMd9jAYMdRz@V)=Zp;rybVUkn%2Yq+pz7p65_RFrpg(Jm_5#nf<#YPhs$mlW+% zYPc+|;j(%Sm&Y2eC>md{D3&kq8m=tbmBnyXy@socc6Hhf*A!z^(Y3|S=CGt_*A#6@ z@qnpP|c_Y{-eWgEZU8#tjVq_hMS6Z zliJo~7eIDbw42qHO}4NYmLtWMSI1WpZc%66TC`h=b}LQ2O-;SMXtx#ZcA9!e+SEJZ z-Aclp>Y2NWc4yJ`arb< zlklLlc&KO(7VRO#J}j}16z$=nJ%ZRri}q+uY)5#kXphk|*q5?d%9@PP}j4P`D|6QZNqcA{Cv@# zE86qqenCH9EZPf2dy(8Pr7d}>n!i1)D%z@I`DWe!ICQrSFUxK1m7={|v{!gkUX_g3 ziuP*JUPH#~s`2%@gg1)l{bteLC>sCzr+mHSN&RiZTe<^p7wxU0y^TWeNZ7kYd#7mc zBJ4d0d#^6+{i3~3U+ow^h@Qtp3U$UtsJDyZxqoNy2M>wHmCzR^5YDbt>vT4*; z4%1cN^jdv0N{p$QC7V&QnaCJ~#1m<;oyZTlqNQ)NZNo_=F#1^~JE>%|O2fm+YV|24 zJGo@1lvt8V=&2>9YRaFc@~3(E>hw6fWV5NgHO!I9r55~G4D%nF``NJ{c zk&->)l|QP=A1m3TC3}pT9#^_O?v<1GQIei08J`F1l|NasCtcW6UfYV2Jyo(5)V4AT zf4XE(dxmFX!m}lN)@yrCwLM?5=SucGqF+$Dz2LQx_c@YYEE%7b_1a!4*-I{Lm2UFO zC0kXpmuc!NUiqsfd!=NrQu%AKuGdTUy61l*CcIg)H@)(=RQcN_d#hw`Q`0+2w|Bg9 z^1emVyCviETD|i3O7@-$dtW#C12~gQ_5qcD=#_s|vJXr45tXlwb$wj2k3Ih=qZ{$8X(ZjoG-`O0cN9ru8;#HEdgbF9Z5*r;n0gwy$>SUCh(;UV zcyO4|sAp?pqfKbEiJV4pWMeu_O=`4Bo_}&oII7W(BB3Q5t;&ySw4)pC7;2iLberOp zllN$nj%_qPM>g_o)fP&}xfoWCjW!iAL&EW5(m0{fj&HOR&|_Mok!4zAUx&EqvCND{ zo8e_ikXk>7(4>OAOBL&QBlsuaB%Qtle00XCLfRS z2DStdhBO1%d0bP!G`yW#+O6<*(-u%;wG`Gklt)SNmWg`FfB7wIA>1I7h8uLJyi000 zw@l~AwAui~^=~?1aORez-ijf8S`i0xqSg#zl;fK?P~rzMPJt;oeTPM8(Kr>Shf(Pl zoK&Kn;RsLKF7?(_!a6?2)``#Opfp^+T>~ehEi&)S`^cE$0DRJ&dXSB)&4W=gSLCu zD*SC);qUZkQ24$5UKM&QMH2S4-|48EKiY5Yk6nSV{IE}x?GyH=<=x2b;qL*qza3Bs z|4pcUkNx+?9B`A^pK3$*&yrdW2a>sBeA=*@O&vZF(w=-u2&5nA|gbpQldxE z`D8f?$ww!aQ6; z-Pu-;m`GO>gA})~cnOvsij>e~IWH_Q12WChaiM&XJ=~0?AA2{CRF2jB6n4dixswSi;#D|^Sz4JwORVM5-O1n1EM8F z@7kbXiHrEc`RpDaaRK*?NC{F!?dtZpRz>ss*zuSN6(VFp!TT+udF7)sZity6RY4Oz z$+Z&4pBB1W46kaXM@kUU?^Lg(isIF`*R5fR=WPp16)QnlM2|xH6Cx$*v&=Ge#j@(1 z8WgTq?1Xf=A=Yza8Z*&A%!J*Og;?lp%+O6qXq&1qKF*C-xCPtf;nicoY=P{}# zHUb|Kg!ui|aW{0^lhtl(76X9a$`u(~fh^I(8fhytyZt}*-aKCG>bm#mob$}jb0S94 zp4-xNZA;qI=Gb^sl2A*Va~i@>W0JPHZ3fz!#@^<_X`0iZwY^CML_ic&5JUzAnPrqo zK#+M*1_fkLQ2|kuK|xUvr~Ce_?|z==kfy);d;RY3&-=Lze>I>+la4X5&7CfkT=+Fig4qsVf!%B$zlybngZHjA>mmV zOWaLXt867?_di-3jjmsl7H# zReP96OqG!Y(UsNSv}$|NRH7A2iG&2k5^gV%NaK>US+bbWD9w(A=Eys&+Id)p6!?Yp z_%_Z$w3*-{SBpnj&C&&4sU)Kbl%~-uY=2o!kn;#tv7Df4jA!#zg4w|0QjP0ecNDv% zIS-hTV$7`buFHTdxyF%S~3vVWd7p;nPL)sbMi8)5!fH{UY`@Re@G^Mb}Ank+Nugf9> zalZoG5Y(m(vkU^;#B+3G7+8mKhRP3e9CV{BGX|5;SB4opgX;RrG=tP3Ah-QE&?pm) z+q@En7~U%JY=)80Dl-k9p;W?5gH)Mm#4Xc}G_>|H&hSdnHUmE?F=3QUGsFwV8Km6> z)Ee^)FN?*+J>I}*nPK26rH*kJBXB*`C^WjR-Ij^b#=R6~%N#4HJ!TphZ;Y$!LwFlT z0^1DiG{%D-zh6Y|FQdmfhRR68>tUx+HPi5bHsnpFFO@AbT5L2aq758&3RCK2nW4xw zQ%SL@6ppVM>y3vXi$AAnu{UnAq2a<*gR~iS*M^yDah41=Y!t)D+u?NahCD{fz@`=?+Mjc)jQ;toPZIW4s zCv2&+EhI4TTV>^eNk@N-CXDji7>Oq|5>Lvm!=7Zsx6>^;w!PXhtT}c#y`7OB79P72 zdT!x?aR)I6>SVUDyKE_f-I)wKNGM|NAuA8(#BDsB6U;ey_R zgFjzq98O?ofe`tm8+n{$cu$GV(=z?Q<^!BbGQ4kyQ7`GH9^p)R;2N>?u(M7aYY+O~ z30n{2&$l6dPSzfjEn*ac%?C`qQ)a4Dz~;k;Dw=#WVe)|yh+Tk(_r$}+I>Y?qB0RjG z@bG?hurTQOfHs?gTYq5s5kIn>WB@{UKB7qigbzdtY%&2s5G8TLAQ^z@tqgYYaAVo- zqc3(JSb|{n(OY2R0y+ zDgQvyl?SNfed!e3A{8oPK7!!~tu0pFCHf0v4@^Op((W=h`&c4_k6#a1dC1PAA~#BmJsQJ` zl&zrkZqe4GF+^LBz7<;!BFZ`gon`Jp(T+0qpt@UrVD-^n+JxZ;B^txJl&#~BzF~a| z!w-x>*b9|p8{i;*nK#P(LvMPMEI$%SN<43EPVp_=qAp?kfgK3{-Ao_0sSn$rK*$4X zHiairggkgssZY|vcA0!cdGiyg%Ze9^HPdRUQfUiS*?N1aG~!YB6QwDgU`HDg+4O)Q z7+G}k(}0jV+wtKt;GqFwHJUh_%Tgp?o;n476kMAQgH~jcVCEooyx48120@ThTu*U_ zv)zzjyWiQ4cA2|Kj-kjP@yTmCT$Ysda0uhC!fVtOjkQy*x>PEEh5hOmNyK4P6wB9N z(;==*_ZdY!yp4H1q}Pf8-x+mEXRkwegnn|IY)Ku3=lgWhq=!bJD*l1IYOtWHSK=<{ zO0R12MTVPq`*fwbE|wC7&+z_SwmkrS3VyWvg~pb9YmjH-KdPTx(SELmpLov}!6vjS zO%cM;AU%q=<`V4&c?)W+oh~o5h_rhW;~g)`_FwJuZ4zWFWLcCexjcJ7_yTf3cQhtp zc31hH9guX!-A1*BKcxOOxQ@cz>>uGe3TILNWhTTsudeI|r~%QozaIDh(>HvXiHHXv zYyLV;m1{!TrLymVUy1uhLvWw7-6YZ0yY_GheUW4n4xwKlw0r2oh615Kvp)-ciqJxjrIUYcf33ClZTq%X@OS9#cYLCLmr?w#CMqb%vV~1U_#O?rcw1*San=bjcM1=* ze`9~!GyENc;O=MJT+;ph$`Jg0(g`BFs}nas1Q)dS4__yESq(Do|8D=-7Jlf%_QOgY z_Y%|%AGAJf?t`{(XhqoF+7FrcKZPG9!-j*P@S~#rDEv4n=njHf6Y+KferOSI_YDK= zUu-~s;+WOog!b?4$9ALL)PC6h)&5mueRD#>1G-m+4R5p>Ap8ThA2$31Db?lP9mCHV zHe#JIxo=_EZqcyS7CD9tL&-zEVT z((v0P(*8Q~aM&L%p*Z4h^zl@O!0lB6BP0>`+exH^U|eo%`${g3xLi@)M@bfrL_8V1 zyCn+eR}o)Al8bx$qZ5C%t#Tsd35dM!bux&>NgIoV3c0v@tA%H(jg$MJ_T!11T>fiY zB_?+g6Fi{10;5G~tV_u?f|KM$sQt)JmMdH3JfM(hnv@S}pdPI8X*mUgHpNG@7B`V# zIF+Da@11=!m9)IYBq8V1OMj&ImQD>Z*JH|4t)W-TR|nlD)qL51+1> zyeEeG}?c)gvHW7cQf!@9S++k=y05s>0lS(tC=s zRZan$Sb!QsMZCew+ko&XN`DHKVElSC;%1!alZHpY`1NQ^^pyh$gixpL-G1#GRiA)u z;Ww!N8x=+ggrN8Io6vA~Z`XzZV^>`xs3 za9`+2?2a0?a6;O&g>H1ETjWqa#GTePMVAqJ&AB)zXuxtKF8%oJP zv@iF(B;KS)n@qU+N`5>MeN>nTb-M5&i3xjXze^pIb%K0Wc&c4-_B|H?M9 zdtawf`??4=vU`6+gZ)j#ujz-&HfDo+zVD|ETRU~MK9R>mhDExu2gzc&I(_6t9N<_|>k z`=WV+X!^d~hWhb(`|mx&KQb+TNO|`MuAq`X#LIZU3dQ~jm#vieCtQL5Q@^qfvcXzK z@t;NU$7mma+=ddezqR!Y{{qFIP~Lasws52U1d2CSDBhG%tVEfV<}qdeCLaG)6#rcm zUG><8>hUJ~Y0vO8DE=IZx8SMmmNsp#J*TP!>92)1AL)7urZ^NwmmY`5OfNR?!xW!D`= zLwBj6yS$;1-Vjj zvaL?1M<@!p#CSu~yrG%i(5!Zj+VJp(;;|=cM;dxq)#tji@VPWJPkKfgnpf^oS zj@jnRH(Q@X(HQ=&Xn%*Qk?N1QzVQ*NFP0OwXof?yv^W-M6Zvx~-zGelUWN@GB& zD2L(KqeUbR)^>Noww>|cL1U;4ujz0F1a|7jPCT=7;JvCtM`;tiGbjq*rvVo=@C~L+ViS7o=Wr&7w%X=-%0+T7(n@ULXypYCO*+q&`>E z5%nUUni^NC|Jr0<=J!<{u0YG!a(L)%13RE(M8SxiYKI2l;br!<(~OZORMMsJKu0U;v4P?-@8PF$>CQ> zy@;Z*tX>qKI1!gP>Fwx6yiG3G2G&ZEcuu;+-nbFx^_}++ljoUR7nobjt_#Wg7X`eo ziNeKpe%J81c2$SNgVis>OR|l8=vu=MssE9bhv8!#?JTA018coHI>Uj|9JU1=D1J~GqCUJ0ozYNf2+P!mQMo1zk6zX|Zpy_P)Qh-mlYcb;7}3Al0OWi_pjL%6=KH}~sio)v^Skm8Ldp+S4sR|K) zyPGvRSBrxGOI)k5w&QWWF+`PNH>nJ#({yXa!CJrInnF!Cw1O#{jUzC>vlDJN(HOD_ zP#H>h$RfBTj$}V63@J4q4p<44nhRG8YFhwcxTbJn*{fJ%qD1s{juLTELJTD$&phfZ zaTTM2NJ57Ki%DDRfh8je-O7JKj|g9A5v5UtFBFM9B85h9x%7fgiUKQ0TjdVf6p1n( zcpjsxBDq>K1cf5n#WlPS6pG|LPK~v-y6~@y8pVELz5eoBziSe`CA5YlZ>-Lis8fU; zbc+7cT%+g$fUWMhZ7Z{7n`X-s(k!An1QM@Ne-d^rsp3jSO%A-X-BR(+2K>U6jZz=R z8RGgxy~?LW5N#pq#NDvI$MuYRDA?*pazmNOg56sik1s^!johJC+{f_sMXAUuJ0Ndt z_+k5c*$W%4*YLsCc8U5h;qiI7SJR2{P^9!i;*YJbbcUq82pcce;*SlbVRD5#Qj5xv zUqw8$MW1Z!fr-MfRSH8NuBa>QE4OTVlUDg_ za}p=zrwuJ)MNWqX@f0OGBznW@6|PbGLwRlkeUT^-JEA~jpw6Jirp<~9QCFLaY@xC2 z&JBGcn#8hvp^JRGr7FtAp8qeDiOwy0L%DYAd#P);U!q9#J@-E<6Nx4hW%7gDDHBP% z6%_-@#36NP5R*560&%E*6;UV#^o8F3a48WreCQB8A*v4hN_9xu9jFBEtYdniBt!v9 zHB^Zs>)OA8s7h>&e%>0TNaVQ-wLz4WMvWrD7oui$Li(d~9 zs8?td(JnrS!eR>T((;t5!eVM2nnlg=hvLwnKAh&1&?%BOoe@T@T&t;O<>V){6b(+>l}Aff;B3xXzxoT z&)*Inx^F-TNrP7kMBNQxg*WeViq@*2xgSD`-*Q2-HR@aZyE@hos?mP04LNhL&;BGd zB{f~Z{4EgE1Upl}J|`DJ`n{81?uNcc6)}wu`re@{uNT+z_JsjRm_MJurN5*zP`9KK z5eXV=n~^R%L3c3UD$#@n%c0U;kxCG!52*x{T%J52v>?G~>4!-9Ppun=CO^o11;O-J z+K?xwtVcz@{Z;#_X0QXK8xSk^YQ)MhvfIb{h{1|%VnFyBsA*!AA(pV7ko8yAF?^kg z`}N9@SELkh*by-^BIf?cDV*QGw7-;osKd4Z3 ztn~HaAGj6$cl(C~D4nu@ye8>TgYeQCl>ecBevH`Se^|f%p+Do+|Bq@gCb+6Y4oR|e zfh5__PCwGW>~{Z5qb{-Nhs5Hatj!NQKT?#le?f-a8m~rq1j}B1fDQ2KH|k%i--Jx! z$Nd0L4^V6~j$8p5)eo7#R`AXf7s5HMnOWMIIwjMsH*r4DvV$k`Zcfs!#4c_m%HGM2Sx*AUsBp zT=7I-zM1?Ism5eQK=U)X7(lL}Ytxi=9_YFEJXC{Z1F^)7l4iiq^!DP68I@brOe&+K zZ7<50E$T(YB$8&}897Eh8z7Meot{hI=gGgkhHJk1wxA}FV)T;~gRF(+%VGnv3}Dm# zz7c5nJaBP_pJbQBaA!D|5|w2RkzU3KA;>^S%dNPSR6(NgsLKTqX*i82$xxs(VWn3f z^+1+Es<6^g(S=N7wO2xv;gyhT$gBLo8l)PMZ>+7k4tWL*ua{86*3-B;oU)Wv6q_Pmehi@XPDlIB|HnE#D226Noe5-h%63zE6?hMKIg)U=V%4#1Vx_b zFN6<=e8s%r^8vvGQi>ND5@ZpOeTm?Jha<5gH4bzBRt4s)P-jUy$J`0LoWsW**<}&h zp%FzmCrBWU!%1(X5%d>91X79DVIBDcMWQ?SlRmXh#VV&0fO9hd=Y$4whc~@9XJP`E z@v|g!MFfFF0+4eXQV7T+cR(6(4)X5^6O9l8V^o(voYD;SRf9Z&h7x%Mv+e@CM@{N` z5<}?KT#U`UpFo*=L@0BEWD$Zg_eK;!YadG4fJYp`j^*y)Z{r?tJ+g@??E`@#5rud_JW&(M(uwvy;9Gqg&;~m~@(GbfP~l^Z zm_k9#S`#S+SZCB>5!hUrR(OK%Q1Jw>#=Yh}0yJv^jgF+Eu%fjhtH8Ok#1vPt#{z0* z2SHXbu8e98P3p5X9#J;OhK2yoj4wPcI{6jh;U*E7#@b$w~#_e z>@b%?^I{f)2%dT3y6j)PK`7=0J{~TO5Enq1`Fjz~B4l{Pn?(Wv&;-$d+axwf6tRR# zeDV-L=r6vPID)SUNEMJkET=9~1xh_iV|+R(l^~gUBgh_*LaZ#y85$D7gA+rpAV4$3 zkTvj#4uS_H6KfJW6j)6fA_$&H;;If=BoRsH*VWp(gfD~+`U_GU+*Q0tZB!bv2xo}` z@)f^H5NE^|*K}~HM}tcxL~@Iy9tb3mPHg4nA&5X;v5gu}xYPrQ1mcP4GyaK0>aoMU z#H*#9E{E7zmU=WuFtICP2Z@Bgr-*AtMut>^#N9|e_Gk$A3f_z)qRmAR-03UdiYSU0 zAW_6E6;T9ITZt$TL{z>H&q^ktSNWU>KJPB#pNB1^4rCpoU?TOv5=58z7iue~F+>y2 zoeL&(0XwWkbfi{3th|&o{KSoMOBQ8ZUW3exJ1j2~q zM(Dx_eiac&IFwln{&a$0ZjJcmhO+pf?d{a}F}Fq(bAtpA zJm=_rJhr|o9J6kO=Y?jj-Uu7yUjBmTyq5r)I|68?pBEFU$NO{*ShJu2?W7(J!Z?56 z!w$r`wgPePQ}I0iG16PE(Sx{LLTpg^8qIMpkxR5DAZKI}8X3g7!Zq`&C=mss34b$) z7kGwp{Vbz4hRaDea){xQM)bt{Jg*4J1X7ASXzfl~Lm*Lk!w4yyP83P>MI^y6x-bHf z#Mf~=Pj!S42qZ>RUC3q#jHwccVh9|UL`sMt#`&Ee*#l|!aR+vh1LB6{4Rd9mfI&a~ zxW5jc^GW-N7$*6J9dUy*gpff_=le?FK-z=c`KO2%WDM|3wJ8!dRPX!^5;_RU+!}$* z4bk_!+|kE3?6L>F;hBOmw|~PfhfvOJ$rE(1nWKT4Q|D3@WDY?0pcBC#V4Fek`R_!k z(jdu%ywkJ6%vZ(v)d50C;T?)1iM|3kcc_4zzYfTmULk})AhCoIUYd;X(kg){hUkVE zBB6u`LYU^h57IKq;u>`=lECHO6}v%J`wyx8Nxnf?NCeyT1?Rd!0M@~bsFDxu_S zTh_IY@ApgN`Zd=66vO(IW$=5ZzH}4VPyhIps~gx4oI1277U}(vrZ~3G#R=UKVam;+ zo%c8zhe+<+ww@+RB3jyUB z7mpq4l^o933f#kgxhZ-Rmgtc1fb#v3pb#*=ze0xwOWuF55Ugkxu7sH@r3d%AfIcLy z0I+9WB5GQ&kI(2l`P(G^c03SvL$LBY;|i|wjQ_6vO+P>(f2$V$PUOl!J+)8_f3KuUocQnC4ZV=A z)FjfCHXwTcSf-6=MI`=*%DZ5tO@b8(g<1vr=n(!%Ifzs2M{Pv!>u>+u3nTOzq$xkP zwl+yo%9Iiq$WLrQKVTp!yHTU^69F-95`}+7lJc)@h)$d~ki7p0|G3$H+6(wcO%kN9 z4Ft$7UzII>vfDNxDd8Ot;^HA72hMP~wjl061e=T!auVDrN>&M{!p%l;NJaeSeBVMB*cfG$bB^um)u!_+?6Bu-Rbr2@_KiB;P|__ zn;|Aa+;R_S31asFa94GtC8H%R!S}4>CWuRT!DGw!@Fs*N6hb<3U&S09e7o~@pSLl= z+nDIEyNOVl6I*5MD2$6XYln4dSErA0;Q{ zzd z>``xlDDkv_-~cC#=b zpgsuGBK(KOY)h51ttzrD2H@kiAkLm}&bE3B;6G?#djx>AIRHcpeW&UnA=xQ83Ew-_ zd&)W6>GhuWdWcG%7Q&-VvXUK=j`RfU0cX#sI?@b8C;P}nO!AC#w!g~R0Tn@9f>`7r zEj+6ho^{R+cni;Y3&>3nqC5|cLvhRyo74!-;ZhR^aS*h?IeWqD9rk)hB8mg2ULIBc zD4e}4&W@=%!jhMT-Ds1vU|^`3WAe<0r?4$2%NJI zz1~2-#}8@;=a5)sFn2(NCmj%;P#w9+t>r-Q2vRi9l3?(@jSlnsRVkDOCw(HUV;o!N zIEQs`3y81|ZUGXGMA1u0LKCNf$b>&fp+QDg!bkpY;W{w+?k`LSL0h=uaCVS|6*2QZ z`k9Qsk(!L*CV8*&?#1-l&8e#d0^c{d8#N!y;T!(l!TjU zDv1FmN9d5R#{1DL?SC{vHPa$tIC6VwU8RORFE1jCLv@CB(H`5 zA`)aKYcW(t2C`0di{LoGY(N(giHk$pBqG_UdE&!il8(@`ZW4-Y=4LxU*59OUsl5)- z2o<+UID%B94XKEqTb?L0V^z#XIfgG`2qYFsU>kIH2b^{HhPq2&va|NG;?d96tZL_E z>i_CWHT(@a=}VOOe|4ojDiZAfb6sfzM|KQxuII?^gUpfLzVXG{XgGp5Dd`)lx>Ea# zFV^0Wl>8QFQ9r>)p>oIYSFFRoiuZ^H@ZH$q+>8p<>7qh)&CGX=Al-dJrnm!T>)>fAJ`53!FGS&{^7byY;LT*y^T}xGkw(5 z`oX?I2Yc&Zk%ha)^!o54{HXo2p&7mIlH)yn`j-lSZheCX>;bHLG^BQ8PtNw$qdjGB zPA&rtaxkS~{dd&A4)5+6eoD!op%eXCo0Om&?2~@EZ>d&kL4BYG>1?k-AMEG+!DzlX z*AKMH!Tws|x_<%IJ&bR4a!F_qw!4;-ykOn8^Q{H7n-Jz$FJqdU(S*X&oqj~W6VUER zQ5zM(-Naz5@h$AG^4GsXYS6o>c)gDG&LZdd(N1ZMYedJOX1iBJIM{Q_AIkxNk8}my z-N4bFQ@!K?e!SPtcYjob3gV5*yL_t04+>3iK96A!+_jW!XKvOBpJyVchkMsa}R=l{8Ih9I9(@;f!pb)hrMnBX+J(uCduA-}|o!GEca|4xbm%Sq!tz_X+bFHR+X zrx*#qjq3lZr2pDcxfw7HI4!S<3idUwHf_r(V;ploLcKCvB4GW z+yOS|CV&n>*8qLgxf$??J--=nEvRVNxfY;d-*(Bp;Bz%NLFWL;IiUT0KpO3xe!Aa@ zhW!%dX&cH@pQKMGlT;LTClt63a5>n+6yyr9mkuPzV(tYTo%iWFP`()KuR(e0H)~Zt zm{jLBa8SBakc>5G*q@KLfE&35h#$`WTnB{Veo?y9GWD07`r#Vx19q6YN2EW6dXY;8 z_W;I^Q~yz&{ReOl;2y-;pIAG(323}t)l54cJw)N$*U{atRR@iW!0XA2M~CY3l{g|AWz~c&hnSs0&wfASFKw>DXGHQ{|r@b##a=raRuN$@D_Uur+z1SPRD*N&3AMS z;4(l!GRJkxA5>JhpVtjQG%l!5@5wt9*MR;~pOSTvf;T6Uh6dtka}m&z2h&}JbQ3N@ z>0Ab)dNQXw0cjtzg>V_D3GMF!?52au2PupRbq|m#c8H(G8gwzZjf8K9p^o<+3h&8n zfGtpQv~^;;J(i7{(^l>RaLzS=J3&NuQ)DCuTrL5l{D8|HfT`ja0ImVZG8`~|54uGT z{XSHj|K99RRDT+Mfw|PWapvW!-e4 z0BDsXJ{N&a+_g4~9*2G|09zQStyG7=)+zyR0Nbe8jSE0R3B{;9KlRmNpS0}^#SZC3 zIpQa>>RnQW@~g;+UlFvu{ilV@)`;(p340PJPkp5hC2cR)w`auKKEJ9^?HMUO+v_U! zCxNnCr5JUZ2c;7Qt6k9sq5G6t)Z=D9cZt3a6{)b=M9WEnXA|H-1N8!LgEn7;AX-Lg zgEF9;%g2qVBmE&dQXiGW)loT8i?&pway0p)RXS6iqm0Hez5Q1lyZs73UloK~pPS=q zuq5FvXkQxN+zPCoMp+1s#C?Y{9 zShrgi43ZBhZwaL-$%E@EpV(W4==Ng*pl+W5u0Zv#1=>>*hoT-GR>u$ycO~j@v~TE5 z@pppS$-fpQw5PoH5mj9ric}{Bq+5}@vA>qa4CN_0$x*0F(Vntr3d)W4ls%K`5V)sG z!13Ig3gEb%Qq-UJmHw2pu_(7(gNi$-WPv2g)B8~7-6ySSQpRSi6s-wpyZr*0A{DAgpiy;BTz`sAwX#4WdK=lWpxcQuFK%8@lZs7@I*j%d zjp{5|pDlDZ8q^BvCSth<;2Mf~j^Y$u>Rbw-jr2=^s!p*rFgilJLr=W9+d zZd*iYt+~pQdqj<+HwD?fn7p_rI-pw}TdHidrvSQ_(Il!;vX)nQi+a=n=uzPf6)O7F zl@tWKP1Y*$R<&Z_keE1%`XL%s7+YO^r%|)oO`6q2#pN=@Y-96NX zIxTNhsVS7H*K~->2#u=TL$M;!sp>D5(H8NKA{C|TR_bo^c;MS$i{mn-wvdLKs16l3 zQI!RSHg$VK3^l6$g4j-l{dPJiQ7N!1p+kY4&~be#%2+3HRfk%6j`B&dI|&R9Uwe|j zAhlO6qMXz-O2bi2SRtQX+Xk?#>Q+nDB#j17ghZXQ}aAotF3W zav+7@C~ztI%a`{Hb&3J5&c7&sQbY!?Ebo`<@EYYkI~-X(lK73{FnH9RN*!f+zpNoV zrf}hSjlwIbM*S7ojfcTkHGIbvG91@YOrSWsUrVBfx8gwxmQTos6w$%^gp;CnO3}e_ z9My*ZC|}*Dt25yZg$&o!dsCsp6aP_AI4kE-We-trMRwozIN@*6Y#F(6PRNaS zQrN?&we#*S>O8Go(5$;qZR@>A=c3$4X)AhPo%ukK!*LshJ&dY|s)J73H;X5H*}X zu!o5WBT_cP$=tzKs>tBj!=&J4Bq4j*Xk*my_FEBNqDDChJVrT9_ZNldsLED!PZBd6 zdl)&3YL6?3PNT4gk<%ziOU9-csImA`V&rieC7)5+H{5LpE~Df(O25nBZ5&CBryleA zepQq!srZ#lJV`aklhi~?U=JhzL}f=(*u$t-_>Ou&5yP>Ep*jSnR0&K?*;FcG4-@+} zErr)8QNn!`Y10{DJVwpn0v<1&%wLY zGXB6GMgz56BaA%^1n~`(jIi6oC}D*Xd^L5(%~XrY#}qei`ukYQ9!qse;$5u7Wz+Cf z%@@jEJO1-{7cp!FL^?j|rUq#rYsF1%`8hz2IsrLKdZ#RfT!Q8343@)VUZj+m3X0EB zAkszQizpMkn4I&J07{gEhVYbnQrteK5-H;{Qrw$|U=&X0a=Tn-=T9;QpVVCOM0eIy z3Z0k{pORCiHVk8&A{H?UJ3w$fFW1nr^rH@mZHyx8dD^eh#IFP5AlQZXGX=b(LxS$m z9mLCgn$L*G8;Go?g0&3fCLYWzR9L%`dcS2?D&R$zq+SzrLCL`h9x*Is1LZyV&%lBbsI#v90DpWTPK7_XtT?2u=D+^(nIHsDc?Li) z%~VSF#9d2G;;p4Eid#MP`~|BgIO|-VC~o%D z0nm=~>94dG@3JO&lWpNjyRux=@j9u{#ixwF#6ID-Dd}&o4RlUpxuhd>QsMVn_Ap~S+xY)!JvJp1 zr`>vlHLclp>yas=H_IFAxZJmZj&R?x%Kha`t51^j$$q@QDXUn$#cDP5l&dj!y5#h%V6`iV+uJr?RH=w<-ABm4d(1l4CCZjy3iUze`Wb7I>8TY?)RQwA@S3pM}bP(Z=+< z+Nb5u*)2S5N%^B(V$1lvzMFqQ&)r8*FWkJ=8{KM8UvCJz4Ec4_+D8BvP2{jD#thb;C-V%VZjw^i9UQ17}t$rK7 z#)QNVoL$#X>Zdqqzjj%1PNwENj0r*C=v`OsxznT%FpgJlc}VkiFLhTV~W{Aioe zH(Ie9bCxxt?kOgffB4!$F>aJa-i#N+FjUu(`j&>|yEi}!%sz2r+!8Ops>8Z5Lk4zW zTWmi?9*{2 z!3R1`*mXBmJwu?vl@{Dh6>s{tczdk9F4XAKzQ$*$;SL9V97MxWixw0b(cKRAWJ8q8 zLAJxT&;+R_O$2Z5s+MVbzd#nRlFuqjQa?vcM=tW>ib;~&g?0&_C+80^0sVuXRin^0 zzPru##R| z^#l6YH!g$kURFG`y{2YM<&#z0@^pLbZ!DJ5YGGw+we--E>@9zv?YDS35Z!+EPELv_p)qFmYCTQghwI!eVOVq&q) z=5D5~Ezol&Yqx|OP8ixCev3rTiH?5m9o)EDM@8T1-G;e$a9?mK)>TTUMMt7E>)0Vr z^1n;s??%8+Gn@YJiQ~_b_}RGYbq!7YB5YL`HG6d#D{PDwjy|>OIJMQquDZ`p0;jd? z7!=Qr_={`#&1B78`)kRr^?&wX`}`-YLrra6DxJyZ@`Yll{u7sVy!?|_bo$h<{A$C0 z`L$o~{2QPCP3{6d^6px+6u!U+e<69>&3LEN0K0!W7Dh>1X~KOY(X%@8{pn_Z*e6tc z)V1;b!Mmu>fUe<>q4dW431`O7T(FZbgsl(ObHy4^zyGswM-_G6)^>?=C9 zw`hm%A#IF*fZCD|Pa_{5VrC5p{>5nmr_2|pAK2uS{aJi3jp16p&A)(8F1!3}P5=+3 z@D1+CU>)q6ZPj(mC^Ut?XnAm4Ez9^X>@Rx)RBne;E`uAI6L3Rg_%{9fc6p?}!`J@1 z_8mDH_0Y%PGyh)+j&&LCiOW@00QUYdY}# z)BJMiL+9`VjyN}vaYH|l5B~t{p%xtT4-99cv5g-l#c?!hKco$&9L`3qAH%|*{rMBn zLt|2=wPhKv)t%fWuQf^jk^M+}*gsR=jmCS0HU{8dh_&@EZQ&>M_9xo+ohi2z?}7`` zTQCyGD!hz0ZwBd%^U+ecnVSD*H`~9pg@4x^wttUxo5KIpTm7kF5Z(sfSz)$*Wx@{Aff3Q{79qNC>nw zy3XqZM1rn9QG?AnZ~;6&2`F9JRk!PHZs#SGIBfAEy8@qP74D2^36H;py%25qx2roa zYN$OeyK`{Ughdt$yUFfOiZHQEnC?X2H z6(=r+=Q&UlfG0psyWu&JW4xOYN7)pi)XmX7-XSu%>}h{fS>3U zKvE;tz9iTd7>c;7^cIjJS&zpfn4&VNutnE;e7(kA6PQAis{GA6Aq0imKFModS0_Zp zNg*nbb8DDSSINIo)3S81=IonpYc6m_T<##OMIJ~6FpIO7kbg@s3vHf`~uFJxLcJ^)$m&QyIn8~oao&o%XFmQWXBKI z9ZBG=&Oj|7I#Rh6kcCjz4zdP@ahIUh@#A%mtAv^bv)~cxy0atzV^nzzzw`~eS3d-} zj$bj{=`CmA$3?s~@3q~M0()&0>~$Zo*Nh>6YY-R{P~roos!syAK= z$sonS*0U36#vBouqpl`pAJ!nx74jM&2D(FK%Wl1~dX@octuS0&fMhT{3!^K&UY7zg zFfCE{7Smn-b~g!@;R_GMg}@kHguCXESH0v6-7I9raVxH3^L&6n13-tySOF36%j5<0b&uWUntzpeC@`Y=;}& zW_=^sKrz@s$;Nh3V+J6jp#sRb2|xzfTgi6A{N}JNfn#)*l{(-uW?!00A~Qy*z1E=-O&MR zbQDm-AsT%G*6LuwqT{?aS*stcPQPb0rq62nT^XkzHtV-sYO|hlll3_LUJx}9881{k z=wXcl1Kml{^gHa+??|m37W4vZ6z`q;(c{mTff*e0lqO*?9ERZ-3e!>G^VR7G0^@|wpOcz?05MJqh|x>%3rtcX`~onVy7y*vGMsVlKwdb?0*e&q zrMYaZE*E(KB^-*8OJ4Xp;^kdORlLi50BPYb3!H^4)VoA*#d)|x-0oSRE95V)li(H1 z-!i_U4SWU6d{}0tSr+OaQLrQf^;8&0h?&}Gpk6gjZ<293YC^QTsf3|h>tF~l#jS!= z+$1A)Z0*R78z4xFp~!7J3uuuN&;o5C>fGC9oG#n+TG^%#i{|NZ1H6+``Wk|%;JFi- zmd`*?7U&82r40~(1+JI*5jViQ>snSY1MhK1diRiCUcRGcxUTMxscRXSlh?d4a-0WL ztk^KhP6^Fz%<0!!9a&9T^129V!Lt;?Nm#CCdCil_ zdM80Gn1p4l1(qwKwW>_3xeT%>0kUAefULj{eGNkawBqq{sipwF0zz%_U5#6lZ&5RAWiY;{jESQAb99ywfHtKN_J`p?hqylgehAU1& zkQ0fax+WpuiNr{~F$!{;6PSg@V3&pvSOsW{rx?PgHH2U#z*X#~JA2gaJ>?EHCy)wN zdq&lOP=Ku1N1GiJk$W>Bik6kk?*od-MHsH?{02~Q&`0)JpWi?zo)vte4Lk)+JYQ`B z_{1R!_8=w~T)&_W>9uthw1R)TDkK+wzEpQ@I4ow5IEdm1l#Yth(K4m3fGQyHvX4kY z;g|{>D;H=M%;FWF2$$e1dJ&ily06EmTx|d=sCJ@S4OqoVuLi{86n}ICVZmqssyHoN zMK4el)ITF=1);Xu5?Dq2ls5-(6>oWM2UcjVfurzw38dm3a(XBj7isT;jRIDYvh#GI zloYw3kX*ihDjt`_mcS|~bdfy(Tt!UPUOB=k8We!b8w5_lpLYWja2y37ia1|8Co#83C<3cUAQWG% z0w{okfC2$l@j;30Z%+Ysm=mY@Nf4p#sBRbrV3SI{F<7IOY$MlX%5qbq5wakC8;`{1*hQOt_hd| zSVeyz6s8zlaqI1@*j!E>a0JgR#vD|Ia248pokjw#Xburv(L>-0$5#kkLA)+N6>OC8 zqYBbu0kwJ%p^Hv0RCh|hSzfD)bk}us1sIFU=1RP-Rjgp(6+kVPkY4^mMSMjkqIb0n z6u1JE1?Y-4pcVd#A1x17S3-Bu+6sUdG)5aM)rFOi>Rjh?)b0+m(11Lq$wIg;&=#xd ztHOBM8WjYCK_X@i970q2=B!QWo3l<4yKEheu2<3Z6pbrm13M`_?GiTn4Ia=M2hdcn zuvsl^QIsyibpZtyXIsmha`IHzE>(L1duJctCslvD;&u_Ut5?{e`a9V^adA)mUEI^F zwV%S+*@yROxY1EyH^)sUwa}s)lL!$Enr%QH6M(9PQ+l!1u52NfMl3wC$nX&_^Ygi59 zi-6eb)RB}ONrj^tfy3pNJBOE@e%Ek}y)tFTVDuHRXDU~;qp9$!T071;6O=Dpzm~Gs zc&~AKz0Ls>`klfFrbH^7OxcN)out?)HFB!lNOL%yveVAU8(L#;rtA%j9VmAuWoN3T z&Jx&_Qk}zF&QtgBw*T8XoJ$!={5n@&WAAuQb9gspJnv}A#5H!_bGn8LxQ=7*WR1N? zioHh>Ki+f>7rjLH@ILO4Qg)F6`#>c=poFinQut8pe<;S7z?E<2M=ARV_Si!;ngi4J zFZ6?Y1=4hNkVdv<*#*;W&!Jls-Id z!_qdK^d3pI+tV$Nu?|P1?e?^dAicZ}??~Gn(CZZLOv}t{WZLdb+ejK7MZ+{bs@!zf zaFB zoVLXz^ax8tXKC7&q-`l9v`p!?jFISJlwCs7^0e_RNLSb4qw3U(w5>>ol^TIZ%Pn^f ztDJt<@L1aT^D!7*own5~SG1Msutu#tp0+h0W{Mw$5-?|-fRCcC~XNRUtT!*`2f1XMk&#p94UP-a1DH7M=ZZFY2>`5EXZU$_x zO6;XXT!+ty{b$4&6S%St_oZzg>~#tIHJS&~wm)qLm?8%?M9-$}VA`IgPtU3HbJbow zpSI_{+96eYA#I1!_5y8nDX+s9(=Dr6aWAFq#k9RdPI<*0PTOH>b_z#)c#o#-NZO9l z#LH^pWi?T~nH@`WGkYa%$I|u+FY#3|bv$jartLU2UQ63+ly~WD*YLXPzn-j5t@^Iv zM4Fq~$+VqF+errGlm_HfdC0nl)1vl9+D@nK4YJ=<_M1Llr+syv@zr@YZD-PUmge5_ zA#MzBr;R_~P7es@Jf$hTlQy1n5P4Tb-i1iKnVnB_Nx6`=^J%+4_It{HkL=3LtT|jv z+eHSX6yDb~`XFuZr|kop`%wM)usq~V;UjMh;U;?}dwNyCD!DATg)_8|k&6=iH_#)g5SEbEFgiLNMP!!vd} z>8aAMX|EfBR6 z4HNeOtFn8_Y#{2)*l4P8Nzb(8!@U_Bld*dv56U*ME2EUeR9UiPh4dWM1l`yjOPIg`kknEn36FbCAjXR zIZVyClH;L_P0iRtq^C*^?L@58GA$OSXKY%=rf2$u8ESoI#%5$}CVbDz*ep65C+BQ+ zel}=>QnIAGhB+A~=ffGBld*?0+}Sm%b7>=r4d#j3{EW@Z*nF}VD0>0f-AU1>V<9ge z{}LHnn6X7P_lWnZF)Yp)e=g1p2unPLn|j80mOx~gh%AFhoSe%uOwLC$wmf5xlD$IN zE6A=)PW;+ukTtH#*vgEp%G?wl^Hx`9?6HikrqwmEjmJf4ZN?tY*jkFM%d`w6Nb&lN zt;^VY%5BIPMK{pM##m!hQe<<+Hf3xxMYf2<){Je**jBjTmNANMqs9}l#*^Om_KZE5 zvF%jYA=Y+gY)8g+QejudD7lLYPkDvr@N~v_o}xqX1@F!nj}qh!V-Lk_k4A$Zd-Y?l z`ku_GXEH61vwiK$*fSa1M|yet+MlugOty~UfZphVh#%<|4tk@#!?PLVIY$E&KiG?&JGA;Jf$hzn>C&>5E&~XV<8d;WL%aNcVE`VW$iw) z$18h0+3lA9{bFN6*6z>R1X`KsG@HYutno~wY?M$>R=EeVHaTk#WN!)&iqwPEmZm6s zYSyM?ZECiEcu3g~sikCIPt!u_WZ4Ut=LZH}JCuaA<=K`^aPnx@mS^oz=emsGSdncxcZa^pE3>vDYb(i&U*%O<|0+M0wN+Vr zOqHBkQ&_Dg*JN#V*4Dt$<7)D8^5gqmtL$}ITbs3YaI{|8>&b2`B@)`kup!Hm*qF5q zS=&gDH&MbBOj+BUwM~%RqB>iuB)6)w;=Sty4*r766S zHJ(Edc~L}OtoHgPEtJDqdns#&$v&d&BkE&W7t|Dv(hNQvUe4Olti4P-$0F5NvYcRF z&DtwjdzAq_o|JnnYsa(pTJ|U5^{i3!^=z+jLOnT|wG&x834v1@iBsk2*E^ifwoD$P z`SC{9PG{{6+K=<&&18O@$=aJ)J41RZzTl>CHfipytewr;TTp%5*=i2wvc~f^g?sSz zdq+KbhadVBzN;Va@*{48=d&#vn6nqMc0OwtL_S$P?`id1%-VZdyU6N!U+jO7wfD33 z0S$d9_CFN+rC%xUCnA3_J#C~Ffa`8LVISkH0WpFO8 z!Or1U-*38xAvxpEAvxT^Y*YDhw-E=o*HL;BXQ2raFh)ox;^&M9%ng z1QhNNg*$V0N6zkq!bnjVS*CDx7$pj$+EKVm1@6M?gs*`{qFcDzX?73y_`e7MayB~m z)i6c{$H+W|0_2U(eISvl>U0kGdfBdFY|eP@%@KrI4UMCrc%!>7QXQW&p8InB!u=|7 zKPCLL-#JY15?62pE zSf4YVb=18a<(~VTNwPU%HFD$liJ(V>JvHJ zma`{l^+}Dz_MAPLv+XpxBR0A-XFNNo_QRywE>V3dXS;It6pcPDs!vxN-L33BIoqAH zJv6#k*?X&vK9d6ww=ZYUSJ&?2gIXgh32VsR;tk=@jYdEl zNzFo^(Y?c|T+4g6YF|B_vr{=c4I^=1eIw`J-8XagM$XWpyWXLEKYXJ^T1 zO;X>=wQOd8dpl=uYCvhR9~*w!96=+iheIRrXM_yOW~zH7u|7H9T*_@-{q= z-vkQi%sC=&{5c{&Al%_8P2tYG@!SECks>k@B5{3<%Co-i%G;>C-9`4@%D$WIcI)e& zJZFs2dAlcXqiJP~(`*j+=3CBn2xIehZ{EgIbzDrpFK_p`+wSpV|Ngv<&)favPf)r| zfOc!kqBr$|C#t|CFE9yaC+BTq-X>G@fxJDCmouUV>7hammO8Ozs=YjK%ks9I{702;kG30`6)LdO3#_D@tMaxYZ>uQ!Sl%A^2=OZqc0eIInvVSnECKfWs#ElhyuCr~Z-zIWTvIp`$)3&ISu(yI-V%wo^TzWQQ{$X|zLU3ed3%Sc z|8Cx>@h-H_=eeI;$lLk6U7*~1d4uG8aC0$l7xRs*$M+#^@6*9fmb$9Lr@{xm1AUmc z5AyaQ6h88%xx?p;KR?c27Y52|XHdZg7Hm)fiD-eBFu0&oXmSPX8g5n6t%b_*jl*Pt zZSl5(4Jp`d1@=80(c92MWm_C3lEVu&tYE{*zFpb3lii&ZZHprc+7|C9*ocDNL7R6{ zK-=QTg7N3b!hkT!Q<}nE1>+e7k-J6YZivKf@ty+P;^>0iQ?Suwk5Tp*vg5Y+xtd=I z_tFe|)7XODTd=XTGp-=iQo+U*?7l+pFkWolU$F57yPw<%bd!!wP~Vfmo9KK_D%iw= zO`^o)$khV{pQg*JupW3dZwLp?{dJ8q>w7g2nwx znBgUw!_0y<>sbYxS+H4jXm(7WQ?NM&_i7++=N9bYg3Tp=p3-d|gjz|T@9FayxdjEI z>Hf_4;ry4BjEWJn$<*rI|x0)vY+BufgmxL`{P#9dP(%L=x%V9Ur|o(#!y z4M}-EH-<-HO`Togon2Y56$M*K=~V@0=VJw1Rj|ise|5nqxw_CNtP$163$~_Uk5g`K z!PY`C9%|QVcCFLwD&Jq%Yj$lY*!qHPfX+sZ*hV@UKf0SlZF9jk6>KxvTa>+p?Czv! zc5QXGwiRq^!M4%d6F!n$xeLahPclZ^J*6q^C>YOni0l-Roe+t$YnNu%Qw7^qu&2m= zTG>yN9cPz%zuTMHQ?T6y+e0&ZBhhCH#A!)K#hZ5qcJ>N zFrI@%6;BlGL_r__lXQp$cB)_}3wDYgofiM6X|<##o5C9fzTs~c?2UrGN%k52 zJX^3c1v?9!w^aHqO1lWPDZH)ubFN@-7wjCv_l~mPAv?a4ca?p}JnUUi_64#N zRGDV?dkH@m3-(^YF4Expg_g_12L*e-U>`8MKU9xCD%ghw`-t3+liB_8rL%h=!=<-1 zsHjb9aM1=8ZEz92dJ*P_6zx_53l)i$P&7*3R_qgo%Jsppq75zDFv<-t+VEm!cHho- z#%{-sxFW_JQDk=CQM3_7y8}9R(wyB{tjz9_qBg2%Ba1eQ?7NhG7unrO(d@q4*}A7_ zcNgs*nj7tJw=s+XnpCtg#R1`7Pr-7iXgv2qWSoeMgGe07`-;r&@p#HA+IX_>SN8p6 zx0~G)yqSqbn^3fgG&3m@om@1YNyVGO1FH2vLR91Rpx2mEvTXan%dzLJzYPh^CM1`8AZ+~GmAC@pDxs%rO}>Uv{^-)4U2PBdJd)IRC!q0bBp$H z(dNR-JY~;Ic+rPszOok-ZGO=f(C|WKFI2;9gw=g)5y|5G5$Aky(H<$Ih-|42#8$oOZAIH!v~6TRq3kDoARMTs-aqNhY%kiAMcYm@J0j7YxEd_l4n}vE zYVAshs>V}ZL%gE{o6(7wvFSAJ8LYNse^1X#9DUre5|GcEF+?qsR^6m6-5q(OxBidvVc7J5Jfx zibnC*id>HM-cA(lbz-l<{z<*}lgxv-H=ioTz4>&}P8IDmyp(Up#pHHev^R?OCg~Eu zm#1Ura7NSRY|+jX?JNzxrJlS+sm`Rt{iGD$jvSsV>bUSu(asg^9ZJ6&)6W;}y!ZBk zxO}f@7mD^C`4^RL7a^zP!uy{7K2zv}qEYn&N_@x4KA@omKcg#OAJNnvdGVnk_{<+uI3!3LM8uL3@zDhB^yfV zVJbbWVkSPk)N*o|PW!i)YwHUqGWfFo~n?)v!n~s$dcVzvXLdU zK0e2q!(Aog8AaK6LAtwScb9ZQx+j(xT{50~C=oA6V@lGgmuyVQ?j`lx$wzZ+N#i`O zWMfM1sO)l93q(2zbr$9Iz zrj~3<$)=M2kcM(v$#`f3st};;L#23Gnod2N4rB4MG()2|Lt`yQdxx0}?;s7|tdh+v z*(^%N;hUWd-<*=oF4-K?tHbwj$sYDmnH#y9S2CWt6#7=u|M?|E)(c8DzhnzY?VF@7 z^if$WfRZ*hgiFdb6}-OG>u1gz06;D6))_%VWt$OZF%we;8K8gq1#i zt4g-AWUDCnSWI7CYB|&)tSQ;*lC2^A@tD5W$8TN9)|PA?>FZ0J4mOmGhc=)J0m`l~ zkKab>*+#k$$8VFyZ&P*rHkVp<`ek!V$u^g43nk^X`*U$W=Rg}a4AK9rm$OU84EMm^!`@M6q(sboAalF?E9>K+cqj3XuEIZTGn zzOLbD%y_wEJV(X9YBYsoo&naqWIV^n=&p>$@M_FBUNW9n$!JyvaezI;!s{jD&(}*G z*Ok?hy~Bx;onY3K!bu9*Nh)7lvI_}|ytdcXVvn!^VrcKi=Z_Cd)$gxt0-;cX%An;(_3LARaZo83qwrPh&jT|HU-3-fku1+hIsO&E8gTJVWXSgrWL5tloy! z+pzlnVR*e!V|YE{$a>byh+Q~Zi4#Ub+C~z-uTyeV8da}D z@m=*cs^0E`!rk6%wR?Hm2T2*V`Bh+*?nV@2zK>s)!TDDrsyzDVN7N zKCYf|xUb&E)!TivK3unaz%vL{Ut7{sYPGOGcKU{Bf>g{3j=hnBJ0qI$9bL(v$zvtK6e0r^S)+sDd z0}E)NWA()@tha^!Vi%G5xtdRgN1(|4YH__iQg4ePv4jl0@umEGRfo&NGH-Huy)CP^ z<>Wu==^eugPhVMYE9z|}>8t9EtW|XEF^%QwdgFPFfmx%UkJsCpdV8Fyv9{hIy_Op5 zVhih?(uR6lUvC>o-&k*CZLCKdQ*W@d37VTVjkeU==6c%#&8_uD2ey*2t=_izG@sb(y4B*wh6eJ~wq z&eW}vgqT{2N&DDDk{BgQ5;`HKK~$1U5))0LMiX<|L=QH`BqlP0%m^|mGAgL3hzJg- zAfPA?I8UGq3XV()Dh@o~U+sNPH#gpUbD#IWm(TvtXRlSOs@B?TuU)IERuxE}7hBK6 zRy@&O5Xu+Z+6!&%MXFy?^-ENDp+pmHowK*Tt*vWo>!JB_%+xDwji0a3_YGcB7dEyv zt_>jBBqWK?vnrN@KwasnqRjOZ8^=nj@Ct5CSaWY%m+LpGq6*8~KNZ)8{T(2|s zZ>rUs5mL>Ax4gyMZSAeL_BJiv@fNjVTU+CLhbOyTEw+nJG;?-%i=Az4M_b!Ti(TG= zBb9CKUFP8G%xa^jq3wg+$(~6 zODrA~KJpeHx3!Pj+Q+o`#9P#cPum*TC$P9rE%udIJSg-_Ypv;@wti{rpGGs8))Ziw zOWQz_h{EEav~dkcvl~~L4Ni;2NYgch*1S7I(>5e+Luo!NZhm>%xP}4REqZTH0_cGLKH%sI-lyS;`k_z42qb<=C{1N!wUjj!V~DxFT)i z(sl*6L+m$h=>d(Zqe>EnhZDQIc?MGm;6PS{=$!VJc#;NK0 zWeAyRo0_((xW8Hyt}an%2-DK_AB>U^cum@-rR^G!#X`*Vw9C*l(l$M9Gxj4g(}~PV z+sw4h0_p5@eJ0FF+w8Q>;r7~i+^$O-*R?e589j%&>H3Eln0aZNo3?pE8GpO3Puul8 zpq}9dv3G;mD=l(F{D{%bPuqM4x+!gx-IT^;ljiliC2cpS?G^|xNZSJ1#%jV_h3i(H zO8Kj?P{Vm!+7_nmHm1NL5ZfZyh+pR0g>7-#Zcp1{s+XvG3DsRF(aU^?cl*w?-I2CC zA$ONERvYe48$a((H-)8MLO_qSaV-VOy+U#?NaC0IzBDiMvb5cowq;Z=SM_qL4ecz;)luT^Q|S_zQ{bo*f19!T4R>Bg`+ZM0YoKM%zXA5PoDG(@OO8`ne7 zc|=9_2!xoznnI7J?NLYmm^Z2mkEf06u{8E;@wB$YGDn2c_Jo5z>7cdYskCuD3GJr^ z`n1@Ous)NvXB_ld2kjc3OWSi4@a8?AHm+ykH3G6J1?hgecE28qNP3Nm9)J=``%%Lw`Vnt@oY-lCMwPdn>A>!rj2Ve zWB8hGx1{a0v~8guThm61t&HL8X}(Nvr0w;zy#d^tX#?e(aQ#-=-bzcrc^lOBHVpWe z>7ekA&x&nndnaw%z_8s(*M=QwW&U-3)Pg6D8 z1s@Z3YpU)^+wQdOf%^L*`aVSCsrrFXewelo()JMoRMs($25eVn$B()KYl zKZ%+8G;RF+l%DPLlDg0@V_f?{(q9>t`)A5ibwGxxIxu4cGBz+n#A;O!qPqOusR@HK zT5yMCY;eYgWZ0l*B)|;I*wBm(`KZfW{j$dus$in zXid%-*Q5-&p>#VnV^cCVHPaZb${47xqQ%uQg=voInv6}$*fo?-&lpwHGZ%*$8H1e} z;GCIZqRh(J%#6(f=j@Epf!S2d$=IBXCd##7vuo+CPn2A^&auwT*mW733)Xo~?VxbI zm*0@F>oax(KHurQ-lFJlWcb{j|+iLFJjRa*6ga&g9P&)8zBm#BIP)vS6MU-g{5J2Q4i#_ojX zT`^O4XN;eB)Ayxb!m5`suB9NkS4i#!Nom#7R9cp?`!cqS>gB3lPIY-I<-+|=W<|#C z&)5pctc;Pa${5#5#{L1ddLTlodGMgOSe>y4Gq#!*4|xl$HW}l3h$p*7E!K!mG;<#D z7LR7^k&Hb`i^sf0*YJ489%l}+O0CTp*JJSbgv#s*8ka?wC%ySo8GABgPtp8oZ(bLk z$r#tuu=uP9K3ih(pzxfxcs^s#W$bxcyx=Wr!;2Z?dI1(+Qj3>LEFKird5iTKTbHr* zw0PNDbPca$?3IYc4H@Hl85TFH%r-iUkzlgPTW`+Tri^W-^{W|u{a?%2s~LNZ`z@Lr zTQpxZu^PhGO#Ot>`ue|~v8@?<9aQnx|BZ}){ol;k8yS0(@>G=+53-rO1rgbBGWJ%+ z-UjPCF^}6a#`O-s4G}xrot+&S+n%u<0Pf5nC+y1D&W!Ei_T9MMdl}<;mv*t7usc(~ zhP8fA#&&0HkBG-|!uuI}pHb);K2S$KP)C~Ogb!nMdo#Azfj-I@Wglg_hmSSKKgrm~ z8T$mnpJwb++QxFiKH=J@H>R}s_RI3d^v_zqto6@w%p6^Y4Imq2V787i?Zbks@pD1;q;RW-ZeiAL&Duf+>^882|F&%W;&cs*vbM@LXMEiy~9c6Zj6LgpTI;+|$A_h#*0 zTC6-S+^3rRN;M5(S+@SEVR~) zD)1f?9>^MH55UQT;$(H!9?aTmIC&`Q@IxhvUBkm!d)V8oi97sA*0|Qt;YZcsM@t>< z8Xn8qV}N!JkH_@ZW^FA6b>WG)?UPyK=aaO3Dr-PJ#nXOTSe{l#nvYFp?HNb(Y>eo+ ztUc#UJRc)^A#4160Yoom4X77E^pX(0Bt*Vwv=8gz*6Xvjp4Q#M%UPrBWxD-}y1gN5 zuVifl-QK8S-q_sfOm z9KE5|Z-}F4_P?36Hy!O;s(8!Ms-}H-+i`XZ?_`ai@4(?UakxEe+p@MD4tI#d9VHGs zg`L8%vjv7-F@|@u#~@H*VNcffI2Z3{jcYfcAE?Ma0Jd9n-nw1* zQ1tg^?Zd3?r7Ir^*+&4hqeN@n$BwOY_(X7@X6=)#eG1$@!R-UCvr0bBa-cY(-Y=)6 zHD~>D)<4J6ngeb?PVeM^T={hHz?=;v6-2i%C`We(Q4tN?;GCovtvWFNSPaYAFvoH^L^L0VD<1raoDI*}2xyNK?U7*Vtdh%fF^`?XDDgNt zXQOg98n`in8v|UYh>Nii7vpj^HfQ6+Mb+nGl2_#H3eRCNUfhh&?e~3}kgKa$29)FXj z3EMR}o0hX{sGhFs=~Q>2M9*nPPT!=NIh&EQnUI?WfJDpLIpgQ-TvM3iB{*5;jB5@^ zt`m~$KoWnG=H~b&&CA)`oXw;9dR1Rfb@`jbI_yYTeRIZjL#{E*7u0;9Oav|5jKN2p6cx766OHEZAEewrg0JvxUG~xGiT~w*tFJMYgDfw`;gPXSe&% zFV5Ac!jhaV&e;+=dWS~x4n2to=bbsbvvfyjxt!hQT-*&9fOj`nEzQ|ds@jKpoC}gr z`Ckk7<#^AR<&5h-I=DP%)GUXm`(uC=Iin4CD{}F1*p)e3nG36O<)!U`oIT*kAB>T& zj@v#YmiV@$r&|kK>kP!@Mz9x!`-8~_<-SKIeSdVG3n>R;||8T%$#vO&iMG( zt|2^;GcFZ$ir<(g0ktQaNARhfJ>?_#v_|lmoIRbhXBfd}HGv9)|^*#$<&e{5$y$tGCoZGsvK{IP(&Nk$1 zBVe0yezbLS&Nk(2GjOlw4A55@hS%a2TOyFHIop!6t$@5P6mR70^_;!IY<@FmfWAqK zx8fFWJMDLJ_IA$Rp}{t>wmoOta<-iYJ8}l(4jSyt*-mu=2ZCJK<*m_j=ImX6VDIIO zviEWX*wibxCuh5Jwg-Ig=j{E`NHl~Ga`pH67y84TeUP&c8RmHP-<$I<^hY_{o3oE7 zPqBva&_9NfeayYi2YsTOPq?X#SC&t6^^YU@?917wIoqdJaYetp^~=k^)j!W;>hFnj zczL>p0eKrhMNJr(w}C2dmXrtOS&0VcZBX6@=W$2M(~+Th8E$Mb%TN zF0VucNy^()AD650%;u}}c2(Z4hTJsuXIg2P>cTZn4Cys*(}A}zL*1L1w;6ex3H+?Q z0WvF3Ko50nPTpqcZ4MRJ=Iz=N8jR`r`nmqR=jQFYyv>D~_<7IE`}4j&Z}akYJ>~jb z@Q7~^(>JJ3+}x;}8`XpOvChxeujP5)l(+eLyGgC&opH0kZsx9%Y<;A)zD4)9_Umh;+?}niY2n#mN%}2)K{sXQ&<#N+@3eCMO66r zy-QdeS1idJ*J3JsJtcBdTybaKxbC1Lw&ULA6$GBk8`oV_#CF`Jam77(<625ZR}t?T z?#vNCTg^0tzvvMO(@N|U#1 zcpz^N0G|pEMh{_i-X6@`YUcbyYW8s69?ILpG+UFmHONZ3xfB zJ$gQG&qJyzyx;{EUW_YV%G*oc)pdEJY+b%Ftj`EX-sAr8FKaTtT$+Vw3G($% zGHW*E?UlT3(6eAtYy_ii>Xe$qer?ehTWdG z?ZDQA9eLy02JB81*-l_%IbfH=vIytxU0^M|mp86m!0uL&?Jn_vSev&!z*L3z^*BDr z+xvO@fbsuOL-k>4s4VQw+uqV$*YHu^K5{NTj;7wn%~hY|?GvinhfiaU_vLM$Q|MP6 zb)|nbZ}5O>bu1Z-tG02Xf}3e|xWd7@ zhVj+LbwzbqGMG?pTq=kpgRbGqYP%BJ7@FcXld5eJ1+2N%QYcLkD^sg&O11I-wo9P+nVY;JOx+*TpF3R@+=hIj`ECXs)ledDV73C~pv+8};A(YP+G@=7a2} zYP+#I++59Lzp1*kgSe&IZgCU~s{O$2t<|=m+HM8K!fIP6aQr{3!)>t0L36QqyRa^< zw%e+0F<6&W+oEc_z1o(*;vLlnZ+F1roz7xIxU1T@?qn?eOVuIV4gE;6jCruIwAz-E ziYi(Ox`lhHnWy(w+db8GFMQl5ddsTqzG_y!D@T3xA2bi{L8jH|!JK=Z&l`aX!1Ma3JR%JxLs1 zV3{_fKA#wvC{e7aw?J|?BiI@FVq&gZN2!-uN2!-uN2!;H!qYC0o=NY<=d87eR+)$L z@f=~DLpl54i9w%8gYeOzVL`E6iY2ZBtQ&TvI zp9fpc4zhzS(=vh3AyEqw$S9pm=jiSW_62P(%h?7`4DD(EWovI=E`~#ye}^J{QSueo z{|c|2FT>siQyQ7N5P%6xQ7`i>GPU7w8jw524sQxaL=_~BQL?bQ=3~Nbq?RuT}}8_ROmTd>c|t; ziacS*+P53Y)$%Pnt`Oqxdmg4b@-Q9$qi_N}IRR|nBx%d>A0Mcb*p9dhjlXMM?7L-d zJ!4oMxmvuQjA2U5)Jf~17t~w5SpGqD_e1-k^i|#L2iC2TWG$_gmZ?&8mElDF$p+8a za#Cnu*t%PTbuWe<@X{mhS~i?Sqm%q?ar`~4r=Ho#5q?sH3IC~fvYlE8y;N8eei9-6 zDXjm8k*uXL^tPW^?*bW@obb=>=RXR+fXFZCa4-9r{k+`a%5YlL_?KjBIjxbTEv=Qb zB^woEmR8|RBUwvhILm%xXBEQPQN{1Prveye-GXPu26bbPAV5 zc>ZdC6`sG@CHA-OWNc|p*aDt^#CVjt#reC;E|Y}XFJWB XPQE&WMI(5VfgE+60o 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